tailwind-styled-v4 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +467 -189
- package/dist/cli/init.js +208 -0
- package/dist/index.d.mts +63 -34
- package/dist/index.d.ts +63 -34
- package/dist/index.js +3 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +23 -77
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/createComponent.ts","../src/utils/isObject.ts","../src/runtime/responsiveEngine.ts","../src/runtime/propEngine.ts","../src/runtime/variantEngine.ts","../src/runtime/compoundVariant.ts","../src/plugins/pluginEngine.ts","../src/core/templateParser.ts","../src/core/twProxy.ts","../src/core/cv.ts","../src/core/withTw.ts","../src/plugins/registerPlugin.ts","../src/plugins/builtinPlugins.ts","../src/runtime/classResolver.ts","../src/theme/themeStore.ts","../src/theme/tokenResolver.ts","../src/theme/defaultTheme.ts","../src/utils/hash.ts","../src/core/styledFactory.ts","../src/utils/merge.ts","../src/utils/classParser.ts","../src/utils/cx.ts","../src/validation/propValidator.ts","../src/plugins/tailwindV4Plugins.ts"],"names":["isObject","value","SCREENS","resolveResponsive","key","classes","v","screen","propMap","TW_PROP_KEYS","registerProp","resolver","resolveProps","props","cls","resolveVariants","variants","defaultVariants","style","resolveCompound","compounds","compound","match","plugins","addPlugin","plugin","getPlugin","name","listPlugins","resolvePluginProps","resolveValue","obj","k","templateParser","strings","values","result","i","resolved","line","EXTRA_FILTER","shouldForwardProp","prop","createComponent","tag","config","isString","base","compoundVariants","BaseStyled","styled","Component","propClasses","variantClasses","compoundClasses","pluginClasses","twMerge","expr","extra","newConfig","makeTag","stringsOrConfig","tw","component","_target","cv","merged","withTw","baseOrOpts","displayName","WrappedComponent","forwardRef","ref","twProps","restProps","mergedClassName","React","attachTw","registerPlugin","loadBuiltinPlugins","resolveClasses","currentTheme","listeners","setTheme","newTheme","namespace","incoming","fn","replaceTheme","theme","getTheme","getThemeNamespace","resetTheme","onThemeChange","listener","resolveThemeToken","ns","isThemeToken","resolveToken","resolveColor","resolveSpacing","resolveRadius","loadDefaultTheme","loadDarkTheme","djb2","str","hash","hashClass","input","hashNumber","componentName","EXTRA_BLOCKED","blockProp","allowProp","styledFactory","mergeClasses","parseClassString","c","normalizeClasses","splitModifiers","modifiers","isValidClass","getModifier","idx","stripModifier","groupByModifier","groups","mod","cx","inputs","parts","flatten","out","cxm","IS_DEV","VALID_SCREENS","KNOWN_TW_PROPS","validateVariantProps","schema","errors","warnings","customValidators","map","valid","msg","SPACING_PROPS","unknownScreens","s","e","w","buildSchema","loadTypographyPlugin","loadFormsPlugin","loadAspectPlugin","PRESETS","loadContainerQueryPlugin","loadAnimationPlugin","loadInteractivityPlugin","loadAllV4Plugins"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * tailwind-styled-v4 — createComponent (PRO Engine)\n *\n * Core factory that wires together:\n * - styled-components (theming, SSR, SC ecosystem)\n * - propEngine (inline prop → class)\n * - variantEngine (CVA-style variants)\n * - compoundVariant engine\n * - pluginEngine (extensible via registerPlugin)\n * - tailwind-merge (conflict-free class resolution)\n * - shouldForwardProp (no tw props leaking to DOM)\n *\n * Supports two call signatures:\n * createComponent(\"div\", \"p-4 bg-zinc-900\")\n * createComponent(\"button\", { base, variants, compoundVariants, defaultVariants })\n *\n * Returns a component with .extend() for chaining.\n */\n\nimport styled from \"styled-components\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { resolveProps, TW_PROP_KEYS } from \"../runtime/propEngine\"\nimport { resolveVariants } from \"../runtime/variantEngine\"\nimport { resolveCompound } from \"../runtime/compoundVariant\"\nimport { resolvePluginProps } from \"../plugins/pluginEngine\"\nimport { templateParser } from \"./templateParser\"\nimport type { ComponentConfig } from \"../types/component\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// shouldForwardProp — keep tw-specific props out of the DOM\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Extra non-tw props that must also be filtered */\nconst EXTRA_FILTER = new Set([\n \"variant\", \"size\", \"intent\", \"color\", \"shape\", \"tone\",\n])\n\nfunction shouldForwardProp(prop: string): boolean {\n if (EXTRA_FILTER.has(prop)) return false\n if (TW_PROP_KEYS.has(prop)) return false\n return true\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// createComponent\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function createComponent(\n tag: any,\n config: string | ComponentConfig\n): any {\n const isString = typeof config === \"string\"\n\n const base = isString ? (config as string) : (config.base ?? \"\")\n const variants = isString ? {} : (config.variants ?? {})\n const compoundVariants = isString ? [] : (config.compoundVariants ?? [])\n const defaultVariants = isString ? {} : (config.defaultVariants ?? {})\n\n // ── styled-components shell with shouldForwardProp ──────────────────────\n const BaseStyled = styled(tag).withConfig({\n shouldForwardProp,\n })<any>``\n\n // ── attrs() to merge all tw classes into className ───────────────────────\n const Component = styled(BaseStyled).attrs(\n (props: Record<string, any>) => {\n const propClasses = resolveProps(props)\n const variantClasses = resolveVariants(variants, props, defaultVariants)\n const compoundClasses = resolveCompound(compoundVariants, props)\n const pluginClasses = resolvePluginProps(props)\n\n return {\n className: twMerge(\n base,\n variantClasses,\n compoundClasses,\n propClasses,\n pluginClasses,\n props.className\n ),\n }\n }\n )``\n\n // ── .extend() — chain extra classes onto a component ────────────────────\n ;(Component as any).extend = (\n strings: TemplateStringsArray,\n ...expr: any[]\n ) => {\n const extra = templateParser(strings, expr)\n return createComponent(Component, {\n // Carry over existing config (non-string branch)\n ...(isString ? {} : (config as ComponentConfig)),\n base: twMerge(base, extra),\n })\n }\n\n // ── .withVariants() — attach/merge new variants without re-typing ────────\n ;(Component as any).withVariants = (\n newConfig: Pick<ComponentConfig, \"variants\" | \"compoundVariants\" | \"defaultVariants\">\n ) => {\n return createComponent(tag, {\n base,\n variants: { ...variants, ...(newConfig.variants ?? {}) },\n compoundVariants: [ ...compoundVariants, ...(newConfig.compoundVariants ?? []) ],\n defaultVariants: { ...defaultVariants, ...(newConfig.defaultVariants ?? {}) },\n })\n }\n\n return Component\n}\n","/**\n * Check if value is a plain object\n */\nexport function isObject(value: any): value is Record<string, any> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n}","/**\n * tailwind-styled-v4 — Responsive Engine\n *\n * Converts a value or responsive object into Tailwind prefix classes.\n *\n * @example\n * resolveResponsive(\"p\", 4) → \"p-4\"\n * resolveResponsive(\"p\", { sm:2, lg:8 }) → \"sm:p-2 lg:p-8\"\n * resolveResponsive(\"p\", { base:1, md:4 })→ \"p-1 md:p-4\"\n */\n\nimport { isObject } from \"../utils/isObject\"\n\nconst SCREENS = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"] as const\ntype Screen = (typeof SCREENS)[number]\n\ntype ResponsiveValue<T = string | number> =\n | T\n | ({ base?: T } & Partial<Record<Screen, T>>)\n\nexport function resolveResponsive(\n key: string,\n value: ResponsiveValue\n): string {\n if (!isObject(value)) {\n return `${key}-${value}`\n }\n\n const classes: string[] = []\n const v = value as Record<string, any>\n\n // base (no screen prefix)\n if (v.base !== undefined) {\n classes.push(`${key}-${v.base}`)\n }\n\n for (const screen of SCREENS) {\n if (v[screen] !== undefined) {\n classes.push(`${screen}:${key}-${v[screen]}`)\n }\n }\n\n return classes.join(\" \")\n}\n","/**\n * tailwind-styled-v4 — PRO Prop Engine\n *\n * Converts React props → Tailwind class strings.\n * Supports responsive objects: p={{ sm: 2, md: 4, lg: 8 }}\n */\n\nimport { resolveResponsive } from \"./responsiveEngine\"\n\ntype PropResolver = (value: any) => string\n\nconst propMap: Record<string, PropResolver> = {\n\n // ── Padding ───────────────────────────────────────────\n p: v => resolveResponsive(\"p\", v),\n px: v => resolveResponsive(\"px\", v),\n py: v => resolveResponsive(\"py\", v),\n pt: v => resolveResponsive(\"pt\", v),\n pb: v => resolveResponsive(\"pb\", v),\n pl: v => resolveResponsive(\"pl\", v),\n pr: v => resolveResponsive(\"pr\", v),\n\n // ── Margin ────────────────────────────────────────────\n m: v => resolveResponsive(\"m\", v),\n mx: v => resolveResponsive(\"mx\", v),\n my: v => resolveResponsive(\"my\", v),\n mt: v => resolveResponsive(\"mt\", v),\n mb: v => resolveResponsive(\"mb\", v),\n ml: v => resolveResponsive(\"ml\", v),\n mr: v => resolveResponsive(\"mr\", v),\n\n // ── Gap / Space ───────────────────────────────────────\n gap: v => resolveResponsive(\"gap\", v),\n gapX: v => resolveResponsive(\"gap-x\", v),\n gapY: v => resolveResponsive(\"gap-y\", v),\n spaceX: v => resolveResponsive(\"space-x\", v),\n spaceY: v => resolveResponsive(\"space-y\", v),\n\n // ── Sizing ────────────────────────────────────────────\n w: v => resolveResponsive(\"w\", v),\n h: v => resolveResponsive(\"h\", v),\n size: v => resolveResponsive(\"size\", v),\n minW: v => resolveResponsive(\"min-w\", v),\n maxW: v => resolveResponsive(\"max-w\", v),\n minH: v => resolveResponsive(\"min-h\", v),\n maxH: v => resolveResponsive(\"max-h\", v),\n\n // ── Colors ────────────────────────────────────────────\n bg: v => resolveResponsive(\"bg\", v),\n text: v => resolveResponsive(\"text\", v),\n border: v => v === true ? \"border\" : resolveResponsive(\"border\", v),\n ring: v => v === true ? \"ring\" : resolveResponsive(\"ring\", v),\n ringColor: v => resolveResponsive(\"ring\", v),\n fill: v => resolveResponsive(\"fill\", v),\n stroke: v => resolveResponsive(\"stroke\", v),\n accent: v => resolveResponsive(\"accent\", v),\n caret: v => resolveResponsive(\"caret\", v),\n divide: v => resolveResponsive(\"divide\", v),\n\n // ── Typography ────────────────────────────────────────\n font: v => resolveResponsive(\"font\", v),\n fontSize: v => resolveResponsive(\"text\", v),\n leading: v => resolveResponsive(\"leading\", v),\n tracking: v => resolveResponsive(\"tracking\", v),\n align: v => `text-${v}`,\n whitespace: v => `whitespace-${v}`,\n truncate: v => v === true ? \"truncate\" : \"\",\n lineClamp: v => `line-clamp-${v}`,\n\n // ── Flexbox ───────────────────────────────────────────\n flex: v => v === true ? \"flex\" : v === false ? \"\" : resolveResponsive(\"flex\", v),\n flexDir: v => `flex-${v}`,\n flexRow: v => v === true ? \"flex-row\" : \"flex-col\",\n flexCol: v => v === true ? \"flex-col\" : \"flex-row\",\n items: v => resolveResponsive(\"items\", v),\n justify: v => resolveResponsive(\"justify\", v),\n content: v => resolveResponsive(\"content\", v),\n wrap: v => v === true ? \"flex-wrap\" : v === false ? \"flex-nowrap\" : `flex-${v}`,\n grow: v => v === true ? \"grow\" : v === false ? \"grow-0\" : `grow-${v}`,\n shrink: v => v === true ? \"shrink\" : v === false ? \"shrink-0\" : `shrink-${v}`,\n basis: v => resolveResponsive(\"basis\", v),\n self: v => resolveResponsive(\"self\", v),\n place: v => resolveResponsive(\"place-items\", v),\n\n // ── Grid ──────────────────────────────────────────────\n cols: v => resolveResponsive(\"grid-cols\", v),\n rows: v => resolveResponsive(\"grid-rows\", v),\n colSpan: v => resolveResponsive(\"col-span\", v),\n rowSpan: v => resolveResponsive(\"row-span\", v),\n colStart: v => `col-start-${v}`,\n colEnd: v => `col-end-${v}`,\n rowStart: v => `row-start-${v}`,\n rowEnd: v => `row-end-${v}`,\n\n // ── Layout ────────────────────────────────────────────\n display: v => `${v}`,\n overflow: v => resolveResponsive(\"overflow\", v),\n overflowX: v => `overflow-x-${v}`,\n overflowY: v => `overflow-y-${v}`,\n pos: v => `${v}`,\n position: v => `${v}`,\n z: v => resolveResponsive(\"z\", v),\n top: v => resolveResponsive(\"top\", v),\n right: v => resolveResponsive(\"right\", v),\n bottom: v => resolveResponsive(\"bottom\", v),\n left: v => resolveResponsive(\"left\", v),\n inset: v => resolveResponsive(\"inset\", v),\n insetX: v => resolveResponsive(\"inset-x\", v),\n insetY: v => resolveResponsive(\"inset-y\", v),\n\n // ── Border & Outline ──────────────────────────────────\n rounded: v => v === true ? \"rounded\" : resolveResponsive(\"rounded\", v),\n roundedT: v => resolveResponsive(\"rounded-t\", v),\n roundedB: v => resolveResponsive(\"rounded-b\", v),\n roundedL: v => resolveResponsive(\"rounded-l\", v),\n roundedR: v => resolveResponsive(\"rounded-r\", v),\n borderWidth: v => resolveResponsive(\"border\", v),\n borderStyle: v => `border-${v}`,\n outline: v => v === \"none\" ? \"outline-none\" : `outline-${v}`,\n outlineColor: v => `outline-${v}`,\n\n // ── Visual Effects ────────────────────────────────────\n opacity: v => resolveResponsive(\"opacity\", v),\n shadow: v => v === true ? \"shadow\" : resolveResponsive(\"shadow\", v),\n shadowColor: v => `shadow-${v}`,\n blur: v => v === true ? \"blur\" : resolveResponsive(\"blur\", v),\n brightness: v => resolveResponsive(\"brightness\", v),\n contrast: v => resolveResponsive(\"contrast\", v),\n saturate: v => resolveResponsive(\"saturate\", v),\n grayscale: v => v === true ? \"grayscale\" : \"\",\n invert: v => v === true ? \"invert\" : \"\",\n backdrop: v => resolveResponsive(\"backdrop-blur\", v),\n\n // ── Transition & Animation ────────────────────────────\n transition: v => v === true ? \"transition\" : `transition-${v}`,\n duration: v => resolveResponsive(\"duration\", v),\n ease: v => `ease-${v}`,\n delay: v => resolveResponsive(\"delay\", v),\n animate: v => `animate-${v}`,\n\n // ── Interaction ───────────────────────────────────────\n cursor: v => `cursor-${v}`,\n select: v => `select-${v}`,\n pointer: v => v === true ? \"pointer-events-auto\" : \"pointer-events-none\",\n touch: v => `touch-${v}`,\n\n // ── Accessibility ─────────────────────────────────────\n sr: v => v === true ? \"sr-only\" : \"not-sr-only\",\n hidden: v => v === true ? \"hidden\" : \"\",\n visible: v => v === true ? \"visible\" : \"invisible\",\n\n // ── Misc ─────────────────────────────────────────────\n aspect: v => `aspect-${v}`,\n object: v => `object-${v}`,\n scroll: v => `scroll-${v}`,\n container: v => v === true ? \"container\" : \"\",\n}\n\n// All tw prop keys — used by shouldForwardProp to avoid leaking to DOM\nexport const TW_PROP_KEYS: ReadonlySet<string> = new Set(Object.keys(propMap))\n\n/**\n * Extend the prop map at runtime (for plugins)\n */\nexport function registerProp(key: string, resolver: PropResolver): void {\n (propMap as Record<string, PropResolver>)[key] = resolver\n ;(TW_PROP_KEYS as Set<string>).add(key)\n}\n\n/**\n * Resolve all tw props from a component props object → class string\n */\nexport function resolveProps(props: Record<string, any>): string {\n const classes: string[] = []\n\n for (const key in props) {\n const resolver = propMap[key]\n if (!resolver) continue\n\n const value = props[key]\n if (value === undefined || value === null) continue\n\n const cls = resolver(value)\n if (cls) classes.push(cls)\n }\n\n return classes.join(\" \").trim()\n}\n","/**\n * tailwind-styled-v4 — Variant Engine\n *\n * Resolves variant props → Tailwind classes.\n * Supports defaultVariants and boolean variants.\n *\n * @example\n * const variants = {\n * variant: { primary: \"bg-blue-500\", ghost: \"bg-transparent\" },\n * size: { sm: \"h-8 px-3\", lg: \"h-12 px-6\" }\n * }\n * resolveVariants(variants, { variant:\"primary\", size:\"lg\" }, { size:\"sm\" })\n * → \"bg-blue-500 h-12 px-6\"\n */\n\nimport type { VariantMap } from \"../types/variants\"\n\nexport function resolveVariants(\n variants: VariantMap,\n props: Record<string, any>,\n defaultVariants?: Record<string, string>\n): string {\n if (!variants) return \"\"\n\n const classes: string[] = []\n\n for (const key in variants) {\n // Prop value takes priority over defaultVariant\n const value = props[key] ?? defaultVariants?.[key]\n if (value === undefined || value === null) continue\n\n const variantMap = variants[key]\n const style = variantMap[String(value)]\n\n if (style) classes.push(style)\n }\n\n return classes.join(\" \").trim()\n}\n","/**\n * tailwind-styled-v4 — Compound Variant Engine\n *\n * Applies extra classes when multiple variant conditions are met simultaneously.\n *\n * @example\n * compoundVariants: [\n * { variant: \"primary\", size: \"lg\", class: \"shadow-lg shadow-blue-500/40\" },\n * { variant: \"ghost\", size: \"sm\", class: \"opacity-70\" }\n * ]\n */\n\nimport type { CompoundVariant } from \"../types/variants\"\n\nexport function resolveCompound(\n compounds: CompoundVariant[],\n props: Record<string, any>\n): string {\n if (!compounds || compounds.length === 0) return \"\"\n\n const classes: string[] = []\n\n for (const compound of compounds) {\n let match = true\n\n for (const key in compound) {\n // \"class\" and \"className\" are output keys, not condition keys\n if (key === \"class\" || key === \"className\") continue\n\n if (props[key] !== compound[key]) {\n match = false\n break\n }\n }\n\n if (match) {\n const cls = compound.class ?? compound.className\n if (cls) classes.push(cls)\n }\n }\n\n return classes.join(\" \").trim()\n}\n","/**\n * tailwind-styled-v4 — Plugin Engine\n *\n * Allows extending the prop system with custom prop resolvers.\n *\n * @example\n * registerPlugin({\n * name: \"motion\",\n * props: {\n * animate: v => `animate-${v}`,\n * motion: v => `motion-${v}`,\n * }\n * })\n */\n\ntype PluginResolver = (value: any) => string\n\nexport type TailwindPlugin = {\n name: string\n props: Record<string, PluginResolver>\n /** Optional: called once when plugin registers */\n onRegister?: () => void\n}\n\nconst plugins: Map<string, TailwindPlugin> = new Map()\n\nexport function addPlugin(plugin: TailwindPlugin): void {\n if (plugins.has(plugin.name)) {\n console.warn(`[tailwind-styled-v4] Plugin \"${plugin.name}\" already registered — overwriting`)\n }\n plugins.set(plugin.name, plugin)\n plugin.onRegister?.()\n}\n\nexport function getPlugin(name: string): TailwindPlugin | undefined {\n return plugins.get(name)\n}\n\nexport function listPlugins(): string[] {\n return Array.from(plugins.keys())\n}\n\nexport function resolvePluginProps(props: Record<string, any>): string {\n const classes: string[] = []\n\n for (const plugin of plugins.values()) {\n for (const key in plugin.props) {\n if (props[key] !== undefined) {\n const cls = plugin.props[key](props[key])\n if (cls) classes.push(cls)\n }\n }\n }\n\n return classes.join(\" \").trim()\n}\n","/**\n * tailwind-styled-v4 — Template Parser\n *\n * Processes tagged template literals for the tw proxy.\n * Handles strings, arrays, conditionals, and nested tw values.\n *\n * @example\n * templateParser([\"p-4 \", \" bg-zinc-900\"], [\"rounded-xl\"])\n * → \"p-4 rounded-xl bg-zinc-900\"\n *\n * // Conditional interpolation\n * const isActive = true\n * tw.div`p-4 ${isActive && \"bg-blue-500\"} rounded-xl`\n * → \"p-4 bg-blue-500 rounded-xl\"\n *\n * // Array interpolation\n * tw.div`p-4 ${[\"bg-zinc-900\", \"rounded-xl\"]}`\n * → \"p-4 bg-zinc-900 rounded-xl\"\n */\n\n/**\n * Resolve a single interpolated value to a string.\n * Handles: string, number, boolean, array, null/undefined.\n */\nfunction resolveValue(value: unknown): string {\n if (value === null || value === undefined || value === false) return \"\"\n if (typeof value === \"string\") return value\n if (typeof value === \"number\") return String(value)\n if (Array.isArray(value)) return value.map(resolveValue).filter(Boolean).join(\" \")\n if (typeof value === \"object\") {\n // Handle object form: { \"bg-blue-500\": true, \"bg-red-500\": false }\n const obj = value as Record<string, unknown>\n return Object.keys(obj).filter(k => obj[k]).join(\" \")\n }\n return \"\"\n}\n\n/**\n * Parse a tagged template literal into a normalized Tailwind class string.\n */\nexport function templateParser(\n strings: TemplateStringsArray | readonly string[],\n values: unknown[]\n): string {\n let result = \"\"\n\n for (let i = 0; i < strings.length; i++) {\n result += strings[i]\n\n if (i < values.length) {\n const resolved = resolveValue(values[i])\n if (resolved) result += \" \" + resolved\n }\n }\n\n return result\n .split(\"\\n\")\n .map(line => line.trim())\n .filter(Boolean)\n .join(\" \")\n .replace(/\\s{2,}/g, \" \")\n .trim()\n}\n\n/**\n * Simple tagged template literal for static class strings.\n * Can be used standalone without tw proxy.\n *\n * @example\n * const classes = cls`p-4 bg-zinc-900 rounded-xl`\n * // → \"p-4 bg-zinc-900 rounded-xl\"\n */\nexport function cls(\n strings: TemplateStringsArray,\n ...values: unknown[]\n): string {\n return templateParser(strings, values)\n}\n","/**\n * tailwind-styled-v4 — tw Proxy (PRO)\n *\n * The main entry point. Returns a Proxy that intercepts HTML tag access\n * and supports two syntaxes:\n *\n * ① Template literal (simple):\n * const Box = tw.div`p-4 bg-zinc-900 rounded-xl`\n *\n * ② Object config (full control):\n * const Button = tw.button({\n * base: \"px-4 py-2 rounded-lg font-medium\",\n * variants: {\n * variant: { primary: \"bg-blue-500 text-white\", ghost: \"bg-transparent\" },\n * size: { sm: \"h-8 text-sm\", lg: \"h-12 text-base\" }\n * },\n * compoundVariants: [\n * { variant: \"primary\", size: \"lg\", class: \"shadow-lg shadow-blue-500/40\" }\n * ],\n * defaultVariants: { variant: \"primary\", size: \"sm\" }\n * })\n *\n * ③ Extend existing components:\n * const Card = tw.div`p-6 rounded-2xl bg-zinc-900`\n * const HeroCard = Card.extend`border border-zinc-700 shadow-xl`\n *\n * ④ Wrap existing styled / React components:\n * const StyledLink = tw(Link)`underline text-blue-400`\n */\n\nimport { createComponent } from \"./createComponent\"\nimport { templateParser } from \"./templateParser\"\nimport type { ComponentConfig } from \"../types/component\"\n\ntype TemplateLiteralCall = (strings: TemplateStringsArray, ...expr: any[]) => any\ntype ConfigCall = (config: ComponentConfig) => any\ntype TwTag = TemplateLiteralCall & ConfigCall\n\n// ─────────────────────────────────────────────────────────────────────────────\n// tw proxy\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction makeTag(tag: any): TwTag {\n return function (\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\n ...expr: any[]\n ): any {\n // Object config API\n if (\n !Array.isArray(stringsOrConfig) &&\n typeof stringsOrConfig === \"object\" &&\n stringsOrConfig !== null\n ) {\n return createComponent(tag, stringsOrConfig as ComponentConfig)\n }\n\n // Template literal API\n const base = templateParser(\n stringsOrConfig as TemplateStringsArray,\n expr\n )\n return createComponent(tag, base)\n } as TwTag\n}\n\nexport const tw = new Proxy(\n // Also callable as tw(Component)`classes` to wrap any component\n function (component: any) {\n return makeTag(component)\n } as any,\n {\n get(_target, tag: string) {\n return makeTag(tag)\n },\n }\n) as Record<string, TwTag> & ((component: any) => TwTag)\n","/**\n * tailwind-styled-v4 — cv() (Class Variants)\n *\n * A standalone CVA-compatible function that works without styled-components.\n * Perfect for headless UI, shadcn/ui, or any className-based component.\n *\n * @example\n * const buttonCv = cv({\n * base: \"inline-flex items-center rounded-lg font-medium transition\",\n * variants: {\n * variant: {\n * primary: \"bg-blue-500 text-white hover:bg-blue-600\",\n * ghost: \"bg-transparent border hover:bg-zinc-800\",\n * },\n * size: {\n * sm: \"h-8 px-3 text-sm\",\n * md: \"h-10 px-4 text-sm\",\n * lg: \"h-12 px-6 text-base\",\n * }\n * },\n * compoundVariants: [\n * { variant: \"primary\", size: \"lg\", class: \"shadow-lg shadow-blue-500/30\" }\n * ],\n * defaultVariants: { variant: \"primary\", size: \"md\" }\n * })\n *\n * // Usage in a component:\n * buttonCv({ variant: \"ghost\", size: \"sm\" })\n * // → \"inline-flex items-center ... bg-transparent border hover:bg-zinc-800 h-8 px-3 text-sm\"\n */\n\nimport { twMerge } from \"tailwind-merge\"\n\nimport { resolveVariants } from \"../runtime/variantEngine\"\nimport { resolveCompound } from \"../runtime/compoundVariant\"\n\ntype CvProps<V extends Record<string, Record<string, string>>> = {\n [K in keyof V]?: keyof V[K]\n} & { className?: string }\n\nexport function cv<V extends Record<string, Record<string, string>>>(\n config: {\n base?: string\n variants?: V\n compoundVariants?: Array<{ class?: string; className?: string; [key: string]: any }>\n defaultVariants?: { [K in keyof V]?: keyof V[K] }\n }\n) {\n const {\n base = \"\",\n variants = {} as V,\n compoundVariants = [],\n defaultVariants = {} as any,\n } = config\n\n return function (props?: CvProps<V>): string {\n const merged = { ...(defaultVariants as any), ...(props ?? {}) }\n\n const variantClasses = resolveVariants(variants as any, merged)\n const compoundClasses = resolveCompound(compoundVariants, merged)\n\n return twMerge(base, variantClasses, compoundClasses, props?.className)\n }\n}\n","/**\n * tailwind-styled-v4 — withTw() HOC\n *\n * Higher-order component that injects tw prop support into ANY existing\n * React component — without requiring it to be rebuilt with tw.tag.\n *\n * Useful for:\n * - Third-party components (e.g. shadcn/ui, Radix UI primitives)\n * - Legacy components you don't own\n * - Any component that already accepts className\n *\n * @example\n * import { Button } from \"@/components/ui/button\" // shadcn Button\n * import { withTw } from \"tailwind-styled-v4\"\n *\n * const TwButton = withTw(Button)\n *\n * // Now supports all tw props:\n * <TwButton p={4} rounded=\"xl\" variant=\"primary\" size=\"lg\" />\n * // → <Button className=\"p-4 rounded-xl\" variant=\"primary\" size=\"lg\" />\n *\n * // Or as tagged template:\n * const StyledButton = withTw(Button, \"px-4 py-2 bg-blue-500\")\n */\n\nimport React, { forwardRef } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { resolveProps, TW_PROP_KEYS } from \"../runtime/propEngine\"\nimport { resolvePluginProps } from \"../plugins/pluginEngine\"\n\nexport interface WithTwOptions {\n /** Extra base classes always applied */\n base?: string\n /** Forward ref to underlying component */\n forwardRef?: boolean\n /** Display name for DevTools */\n displayName?: string\n}\n\n/**\n * Wrap any component with tw prop support.\n * The wrapped component will accept all tw props (p, m, bg, text, etc.)\n * and merge them into className before forwarding to the inner component.\n */\nexport function withTw<T extends { className?: string; ref?: any }>(\n Component: React.ComponentType<T>,\n baseOrOpts: string | WithTwOptions = \"\"\n): React.ComponentType<T & Record<string, any>> {\n const base = typeof baseOrOpts === \"string\"\n ? baseOrOpts\n : (baseOrOpts.base ?? \"\")\n\n const displayName = typeof baseOrOpts === \"object\"\n ? (baseOrOpts.displayName ?? `withTw(${Component.displayName ?? Component.name ?? \"Component\"})`)\n : `withTw(${Component.displayName ?? Component.name ?? \"Component\"})`\n\n const WrappedComponent = forwardRef<any, T & Record<string, any>>(\n (props, ref) => {\n const twProps: Record<string, any> = {}\n const restProps: Record<string, any> = {}\n\n // Split tw props from rest\n for (const key in props) {\n if (TW_PROP_KEYS.has(key)) {\n twProps[key] = (props as any)[key]\n } else {\n restProps[key] = (props as any)[key]\n }\n }\n\n const propClasses = resolveProps(twProps)\n const pluginClasses = resolvePluginProps(twProps)\n\n const mergedClassName = twMerge(\n base,\n propClasses,\n pluginClasses,\n props.className\n )\n\n return React.createElement(Component, {\n ...restProps,\n ref,\n className: mergedClassName,\n } as any)\n }\n )\n\n WrappedComponent.displayName = displayName\n\n return WrappedComponent as any\n}\n\n/**\n * Attach tw prop support directly to a component (mutation-based, lighter weight).\n * Returns the same component reference with extended className logic.\n * Prefer withTw() for purity; use attachTw() when ref identity matters.\n */\nexport function attachTw<T extends { className?: string }>(\n Component: React.ComponentType<T>,\n base = \"\"\n): React.ComponentType<T & Record<string, any>> {\n return withTw(Component, base)\n}\n","/**\n * tailwind-styled-v4 — registerPlugin\n *\n * Public API for adding custom prop resolvers.\n */\n\nimport { addPlugin } from \"./pluginEngine\"\nimport type { TailwindPlugin } from \"./pluginEngine\"\n\nexport function registerPlugin(plugin: TailwindPlugin): void {\n if (!plugin.name || typeof plugin.name !== \"string\") {\n throw new Error(\"[tailwind-styled-v4] Plugin must have a non-empty string name\")\n }\n if (!plugin.props || typeof plugin.props !== \"object\") {\n throw new Error(`[tailwind-styled-v4] Plugin \"${plugin.name}\" must define a props object`)\n }\n addPlugin(plugin)\n}\n","/**\n * tailwind-styled-v4 — Built-in Plugins\n *\n * Optional curated plugins. Call loadBuiltinPlugins() in your app entry point.\n *\n * @example\n * // _app.tsx or layout.tsx\n * import { loadBuiltinPlugins } from \"tailwind-styled-v4\"\n * loadBuiltinPlugins()\n */\n\nimport { registerPlugin } from \"./registerPlugin\"\n\nexport function loadBuiltinPlugins(): void {\n\n // ── Animation ───────────────────────────────────────────────────\n registerPlugin({\n name: \"animation\",\n props: {\n animate: v => `animate-${v}`,\n duration: v => `duration-${v}`,\n delay: v => `delay-${v}`,\n ease: v => `ease-${v}`,\n }\n })\n\n // ── Grid Helpers ─────────────────────────────────────────────────\n registerPlugin({\n name: \"grid\",\n props: {\n grid: v => v === true ? \"grid\" : `grid-cols-${v}`,\n gridCols: v => `grid-cols-${v}`,\n gridRows: v => `grid-rows-${v}`,\n autoRows: v => `auto-rows-${v}`,\n autoCols: v => `auto-cols-${v}`,\n }\n })\n\n // ── Backdrop ─────────────────────────────────────────────────────\n registerPlugin({\n name: \"backdrop\",\n props: {\n backdropBlur: v => `backdrop-blur-${v}`,\n backdropBrightness: v => `backdrop-brightness-${v}`,\n backdropContrast: v => `backdrop-contrast-${v}`,\n backdropSaturate: v => `backdrop-saturate-${v}`,\n }\n })\n\n // ── Text Gradient ────────────────────────────────────────────────\n registerPlugin({\n name: \"gradient\",\n props: {\n gradientFrom: v => `from-${v}`,\n gradientVia: v => `via-${v}`,\n gradientTo: v => `to-${v}`,\n gradient: v => `bg-gradient-to-${v}`,\n }\n })\n\n // ── Scroll Behavior ──────────────────────────────────────────────\n registerPlugin({\n name: \"scroll\",\n props: {\n scrollSmooth: v => v === true ? \"scroll-smooth\" : \"\",\n scrollAuto: v => v === true ? \"scroll-auto\" : \"\",\n snapAlign: v => `snap-${v}`,\n snapType: v => `snap-${v}`,\n }\n })\n\n // ── Print ────────────────────────────────────────────────────────\n registerPlugin({\n name: \"print\",\n props: {\n printHidden: v => v === true ? \"print:hidden\" : \"\",\n printBlock: v => v === true ? \"print:block\" : \"\",\n }\n })\n}\n","/**\n * tailwind-styled-v4 — Class Resolver\n *\n * Central resolver that combines all engines into a final className string.\n * Uses tailwind-merge to resolve class conflicts correctly.\n */\n\nimport { twMerge } from \"tailwind-merge\"\n\nimport { resolveProps } from \"./propEngine\"\nimport { resolveVariants } from \"./variantEngine\"\nimport { resolveCompound } from \"./compoundVariant\"\nimport { resolvePluginProps } from \"../plugins/pluginEngine\"\nimport type { VariantMap, CompoundVariant } from \"../types/variants\"\n\nexport interface ResolveConfig {\n base: string\n variants?: VariantMap\n compoundVariants?: CompoundVariant[]\n defaultVariants?: Record<string, string>\n}\n\nexport function resolveClasses(\n config: ResolveConfig,\n props: Record<string, any>\n): string {\n const {\n base,\n variants = {},\n compoundVariants = [],\n defaultVariants = {}\n } = config\n\n const propClasses = resolveProps(props)\n const variantClasses = resolveVariants(variants, props, defaultVariants)\n const compoundClasses = resolveCompound(compoundVariants, props)\n const pluginClasses = resolvePluginProps(props)\n\n return twMerge(\n base,\n variantClasses,\n compoundClasses,\n propClasses,\n pluginClasses,\n props.className\n )\n}\n","/**\n * tailwind-styled-v4 — Theme Store\n *\n * Global theme store that bridges tw token aliases to actual Tailwind classes.\n * Supports deep merging, change subscriptions, and SSR-safe usage.\n *\n * @example\n * setTheme({\n * colors: { brand: \"blue-600\", muted: \"zinc-500\" },\n * radius: { button: \"lg\", card: \"2xl\" },\n * spacing: { section: \"16\", page: \"24\" }\n * })\n *\n * // In propEngine, bg=\"brand\" → resolves to bg-blue-600\n */\n\nexport interface TailwindTheme {\n colors?: Record<string, string>\n spacing?: Record<string, string>\n radius?: Record<string, string>\n shadow?: Record<string, string>\n font?: Record<string, string>\n fontSize?: Record<string, string>\n opacity?: Record<string, string>\n duration?: Record<string, string>\n /** Arbitrary custom token namespace */\n [key: string]: Record<string, string> | undefined\n}\n\nexport type ThemeListener = (theme: TailwindTheme) => void\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────────────────────────────────────\n\nlet currentTheme: TailwindTheme = {}\nconst listeners: Set<ThemeListener> = new Set()\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Core API\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Merge new theme tokens into the global theme.\n * Notifies all subscribers after update.\n */\nexport function setTheme(newTheme: TailwindTheme): void {\n // Deep merge per namespace\n for (const namespace in newTheme) {\n const incoming = newTheme[namespace]\n if (!incoming) continue\n\n currentTheme[namespace] = {\n ...(currentTheme[namespace] ?? {}),\n ...incoming,\n }\n }\n\n listeners.forEach(fn => fn(currentTheme))\n}\n\n/**\n * Replace the entire theme (non-merging).\n */\nexport function replaceTheme(theme: TailwindTheme): void {\n currentTheme = { ...theme }\n listeners.forEach(fn => fn(currentTheme))\n}\n\n/**\n * Get current theme state (shallow copy to prevent mutation).\n */\nexport function getTheme(): TailwindTheme {\n return { ...currentTheme }\n}\n\n/**\n * Get a specific namespace from the theme.\n */\nexport function getThemeNamespace(\n namespace: keyof TailwindTheme\n): Record<string, string> {\n return { ...(currentTheme[namespace] ?? {}) }\n}\n\n/**\n * Reset theme to empty state. Useful in tests.\n */\nexport function resetTheme(): void {\n currentTheme = {}\n listeners.forEach(fn => fn(currentTheme))\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Subscription API\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Subscribe to theme changes.\n * Returns an unsubscribe function.\n *\n * @example\n * const unsub = onThemeChange(theme => {\n * console.log(\"Theme changed:\", theme)\n * })\n * unsub() // cleanup\n */\nexport function onThemeChange(listener: ThemeListener): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Token access helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Resolve a token alias to its theme value.\n * Returns the original value unchanged if no token matches.\n *\n * @example\n * // theme.colors = { brand: \"blue-600\" }\n * resolveThemeToken(\"colors\", \"brand\") → \"blue-600\"\n * resolveThemeToken(\"colors\", \"zinc-500\") → \"zinc-500\" (passthrough)\n */\nexport function resolveThemeToken(\n namespace: string,\n value: string\n): string {\n const ns = currentTheme[namespace]\n if (!ns) return value\n return ns[value] ?? value\n}\n\n/**\n * Check if a value is a registered theme token.\n */\nexport function isThemeToken(namespace: string, value: string): boolean {\n return !!(currentTheme[namespace]?.[value])\n}\n","/**\n * tailwind-styled-v4 — Token Resolver\n *\n * Resolves design token aliases → Tailwind class segments.\n * Used by propEngine to support semantic color names, spacing aliases, etc.\n *\n * @example\n * // theme: { colors: { brand: \"blue-600\", danger: \"red-500\" } }\n * resolveToken(\"colors\", \"brand\") → \"blue-600\"\n * resolveToken(\"colors\", \"danger\") → \"red-500\"\n * resolveToken(\"colors\", \"zinc-900\") → \"zinc-900\" (passthrough)\n *\n * resolveToken(\"radius\", \"card\") → \"2xl\" (if themed)\n * resolveToken(\"radius\", \"md\") → \"md\" (passthrough)\n */\n\nimport { resolveThemeToken } from \"./themeStore\"\n\nexport type TokenNamespace =\n | \"colors\"\n | \"spacing\"\n | \"radius\"\n | \"shadow\"\n | \"font\"\n | \"fontSize\"\n | \"opacity\"\n | \"duration\"\n | (string & {})\n\n/**\n * Resolve a value through the token system.\n * Multi-level: first checks theme tokens, then returns raw value.\n */\nexport function resolveToken(namespace: TokenNamespace, value: string): string {\n return resolveThemeToken(namespace, value)\n}\n\n/**\n * Resolve a color token → Tailwind color class segment.\n * Supports:\n * \"brand\" → theme.colors.brand → \"blue-600\"\n * \"blue-600\" → passthrough\n * \"white\"/\"black\" → passthrough\n *\n * @example\n * resolveColor(\"brand\") → \"blue-600\"\n * resolveColor(\"zinc-500\") → \"zinc-500\"\n */\nexport function resolveColor(value: string): string {\n return resolveToken(\"colors\", value)\n}\n\n/**\n * Resolve a spacing token.\n *\n * @example\n * resolveSpacing(\"section\") → \"16\" (if theme.spacing.section = \"16\")\n * resolveSpacing(\"4\") → \"4\" (passthrough)\n */\nexport function resolveSpacing(value: string | number): string {\n if (typeof value === \"number\") return String(value)\n return resolveToken(\"spacing\", value)\n}\n\n/**\n * Resolve a border-radius token.\n *\n * @example\n * resolveRadius(\"card\") → \"2xl\" (if themed)\n * resolveRadius(\"lg\") → \"lg\" (passthrough)\n */\nexport function resolveRadius(value: string): string {\n return resolveToken(\"radius\", value)\n}\n\n/**\n * Resolve multiple tokens at once.\n * Returns a Record of resolved values.\n *\n * @example\n * resolveTokens(\"colors\", [\"brand\", \"muted\", \"zinc-900\"])\n * → { brand: \"blue-600\", muted: \"zinc-500\", \"zinc-900\": \"zinc-900\" }\n */\nexport function resolveTokens(\n namespace: TokenNamespace,\n values: string[]\n): Record<string, string> {\n const result: Record<string, string> = {}\n for (const v of values) {\n result[v] = resolveToken(namespace, v)\n }\n return result\n}\n","/**\n * tailwind-styled-v4 — Default Theme\n *\n * Ready-to-use semantic token system.\n * Call loadDefaultTheme() once in your app entry point (_app.tsx / layout.tsx).\n *\n * @example\n * // app/layout.tsx\n * import { loadDefaultTheme } from \"tailwind-styled-v4\"\n * loadDefaultTheme()\n *\n * // Now you can use semantic tokens:\n * <Box bg=\"primary\" text=\"foreground\" rounded=\"card\" />\n * // → bg-blue-600 text-white rounded-2xl\n */\n\nimport { setTheme } from \"./themeStore\"\n\nexport function loadDefaultTheme(): void {\n setTheme({\n // ── Colors ─────────────────────────────────────────────────────────────\n colors: {\n // Brand\n primary: \"blue-600\",\n \"primary-hover\": \"blue-700\",\n \"primary-light\": \"blue-100\",\n\n secondary: \"violet-600\",\n \"secondary-hover\": \"violet-700\",\n\n // Semantic\n success: \"emerald-500\",\n warning: \"amber-500\",\n danger: \"red-500\",\n info: \"sky-500\",\n\n // Neutral\n foreground: \"white\",\n background: \"zinc-950\",\n surface: \"zinc-900\",\n \"surface-2\": \"zinc-800\",\n \"surface-3\": \"zinc-700\",\n\n muted: \"zinc-500\",\n subtle: \"zinc-400\",\n border: \"zinc-700\",\n \"border-light\": \"zinc-200\",\n\n // Text\n \"text-primary\": \"zinc-50\",\n \"text-secondary\": \"zinc-400\",\n \"text-muted\": \"zinc-600\",\n\n // Interactive\n link: \"blue-400\",\n \"link-hover\": \"blue-300\",\n },\n\n // ── Spacing ────────────────────────────────────────────────────────────\n spacing: {\n xs: \"2\",\n sm: \"4\",\n md: \"6\",\n lg: \"8\",\n xl: \"12\",\n \"2xl\": \"16\",\n \"3xl\": \"24\",\n section: \"16\",\n page: \"24\",\n },\n\n // ── Border Radius ──────────────────────────────────────────────────────\n radius: {\n none: \"none\",\n xs: \"sm\",\n sm: \"md\",\n md: \"lg\",\n lg: \"xl\",\n xl: \"2xl\",\n card: \"2xl\",\n button: \"lg\",\n badge: \"full\",\n pill: \"full\",\n input: \"md\",\n },\n\n // ── Shadows ────────────────────────────────────────────────────────────\n shadow: {\n xs: \"sm\",\n sm: \"md\",\n md: \"lg\",\n lg: \"xl\",\n xl: \"2xl\",\n card: \"xl\",\n modal: \"2xl\",\n none: \"none\",\n },\n\n // ── Typography ─────────────────────────────────────────────────────────\n font: {\n sans: \"sans\",\n mono: \"mono\",\n serif: \"serif\",\n },\n\n fontSize: {\n caption: \"xs\",\n small: \"sm\",\n body: \"base\",\n lead: \"lg\",\n title: \"xl\",\n heading: \"2xl\",\n display: \"4xl\",\n },\n\n // ── Transitions ────────────────────────────────────────────────────────\n duration: {\n fast: \"150\",\n normal: \"200\",\n slow: \"300\",\n slower: \"500\",\n },\n\n // ── Opacity ────────────────────────────────────────────────────────────\n opacity: {\n disabled: \"50\",\n muted: \"70\",\n subtle: \"40\",\n },\n })\n}\n\n/**\n * Load a minimal dark theme for fintech/crypto/Web3 UIs.\n * Matches aanragil.design token conventions.\n */\nexport function loadDarkTheme(): void {\n setTheme({\n colors: {\n primary: \"blue-500\",\n secondary: \"indigo-500\",\n accent: \"cyan-400\",\n background: \"zinc-950\",\n surface: \"zinc-900\",\n \"surface-2\": \"zinc-800\",\n foreground: \"zinc-50\",\n muted: \"zinc-500\",\n border: \"zinc-800\",\n success: \"emerald-400\",\n warning: \"amber-400\",\n danger: \"red-400\",\n },\n radius: {\n card: \"xl\",\n button: \"lg\",\n badge: \"full\",\n input: \"md\",\n },\n })\n}\n","/**\n * tailwind-styled-v4 — Deterministic Hash Utility\n *\n * Generates a short stable hash from a string.\n * Used for:\n * - data-tw attribute values in dev tools\n * - CSS @layer naming\n * - Component deduplication\n *\n * Algorithm: djb2 — fast, collision-resistant enough for our use case.\n *\n * @example\n * hashClass(\"div:p-4 bg-zinc-900\") → \"tw-3f2a1b\"\n */\n\n/**\n * djb2 hash — produces a 32-bit signed integer\n */\nfunction djb2(str: string): number {\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash) ^ str.charCodeAt(i)\n hash = hash >>> 0 // convert to unsigned 32-bit\n }\n return hash\n}\n\n/**\n * Returns a short hex hash string prefixed with \"tw-\".\n * Output is always 8 characters (tw- + 5 hex chars).\n *\n * @example\n * hashClass(\"div:p-4\") → \"tw-3f2a1\"\n * hashClass(\"button:bg-blue\") → \"tw-8c4d2\"\n */\nexport function hashClass(input: string): string {\n const n = djb2(input)\n return \"tw-\" + n.toString(16).slice(0, 5).padStart(5, \"0\")\n}\n\n/**\n * Returns a numeric hash — useful for CSS layer ordering.\n */\nexport function hashNumber(input: string): number {\n return djb2(input)\n}\n\n/**\n * Generates a stable component display name from tag + classes.\n * Used as the styled-components displayName for better DevTools experience.\n *\n * @example\n * componentName(\"div\", \"p-4 bg-zinc-900\") → \"Tw-div-3f2a1\"\n */\nexport function componentName(tag: string, classes: string): string {\n const hash = hashClass(`${tag}:${classes}`)\n const tagCap = tag.charAt(0).toUpperCase() + tag.slice(1)\n return `Tw${tagCap}-${hash.replace(\"tw-\", \"\")}`\n}\n","/**\n * tailwind-styled-v4 — Styled Factory\n *\n * Thin wrapper around styled-components that adds:\n * - Automatic shouldForwardProp for tw props\n * - Display name injection for React DevTools\n * - SSR-compatible class generation\n *\n * Abstracts over styled-components internals so we can swap\n * the underlying CSS-in-JS library in future versions.\n */\n\nimport styled, { ThemeContext } from \"styled-components\"\nimport type { JSX } from \"react\"\nimport { TW_PROP_KEYS } from \"../runtime/propEngine\"\nimport { componentName } from \"../utils/hash\"\n\n// Re-export for internal use\nexport { ThemeContext }\n\n// ─────────────────────────────────────────────────────────────────────────────\n// shouldForwardProp registry\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Extra prop names that are variant/config keys, not DOM attributes.\n * These get filtered out by shouldForwardProp.\n */\nconst EXTRA_BLOCKED = new Set([\n // Common variant prop names developers use\n \"variant\", \"size\", \"intent\", \"color\", \"shape\", \"tone\", \"weight\",\n \"hierarchy\", \"emphasis\", \"status\", \"appearance\",\n // Internal tw keys\n \"base\", \"as\", \"_ref\",\n])\n\n/**\n * Determine if a prop should be forwarded to the DOM.\n * Blocks tw utility props and common variant props from leaking as HTML attributes.\n */\nexport function shouldForwardProp(prop: string): boolean {\n if (prop.startsWith(\"$\")) return true // $ prefix = always forward (styled-components convention)\n if (EXTRA_BLOCKED.has(prop)) return false\n if (TW_PROP_KEYS.has(prop)) return false\n return true\n}\n\n/**\n * Add a custom prop name to the block list.\n * Useful for custom variant props not already in the list.\n *\n * @example\n * blockProp(\"hierarchy\") // <Button hierarchy=\"primary\" /> won't pollute DOM\n */\nexport function blockProp(prop: string): void {\n EXTRA_BLOCKED.add(prop)\n}\n\n/**\n * Remove a prop from the block list (allow forwarding).\n */\nexport function allowProp(prop: string): void {\n EXTRA_BLOCKED.delete(prop)\n ;(TW_PROP_KEYS as Set<string>).delete(prop)\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a styled-components base with tw-aware shouldForwardProp.\n *\n * @param tag - HTML tag string or React component\n * @param classes - Optional base class string for display name generation\n */\nexport function styledFactory(tag: any, classes = \"\"): any {\n const base = styled(tag).withConfig({ shouldForwardProp })\n\n if (process.env.NODE_ENV !== \"production\" && typeof tag === \"string\" && classes) {\n // Inject display name for React DevTools\n const name = componentName(tag, classes)\n ;(base as any).displayName = name\n }\n\n return base\n}\n\n/**\n * Type-safe version for known HTML elements.\n */\nexport function styledElement<Tag extends keyof JSX.IntrinsicElements>(\n tag: Tag,\n classes = \"\"\n): ReturnType<typeof styled.div> {\n return styledFactory(tag, classes) as ReturnType<typeof styled.div>\n}\n","import { twMerge } from \"tailwind-merge\"\n\n/**\n * Merge Tailwind classes safely\n */\nexport function mergeClasses(...classes: (string | undefined)[]) {\n return twMerge(...classes.filter(Boolean))\n}","/**\n * tailwind-styled-v4 — Class Parser Utilities\n */\n\n/**\n * Parse a Tailwind class string into a deduplicated sorted array.\n *\n * @example\n * parseClassString(\"p-4 bg-zinc-900 p-4\") → [\"bg-zinc-900\", \"p-4\"]\n */\nexport function parseClassString(cls: string): string[] {\n return Array.from(\n new Set(\n cls\n .split(/\\s+/)\n .map(c => c.trim())\n .filter(Boolean)\n )\n )\n}\n\n/**\n * Normalize a class string: trim, deduplicate, sort, collapse whitespace.\n *\n * @example\n * normalizeClasses(\" p-4 bg-zinc-900 p-4 \") → \"bg-zinc-900 p-4\"\n */\nexport function normalizeClasses(cls: string): string {\n return parseClassString(cls).sort().join(\" \")\n}\n\n/**\n * Split a class string into groups: base classes vs modifier classes.\n *\n * @example\n * splitModifiers(\"p-4 hover:bg-blue-500 md:p-8\")\n * → { base: [\"p-4\"], modifiers: [\"hover:bg-blue-500\", \"md:p-8\"] }\n */\nexport function splitModifiers(cls: string): {\n base: string[]\n modifiers: string[]\n} {\n const classes = parseClassString(cls)\n const base: string[] = []\n const modifiers: string[] = []\n\n for (const c of classes) {\n if (c.includes(\":\")) modifiers.push(c)\n else base.push(c)\n }\n\n return { base, modifiers }\n}\n\n/**\n * Check if a string looks like a valid Tailwind class token.\n *\n * @example\n * isValidClass(\"bg-blue-500\") → true\n * isValidClass(\"not a class\") → false\n */\nexport function isValidClass(cls: string): boolean {\n return /^!?[-a-z0-9]+(?:[:/[\\]().#,]+[-a-z0-9_]+)*$/.test(cls)\n}\n\n/**\n * Extract modifier prefix from a class.\n *\n * @example\n * getModifier(\"hover:bg-blue-500\") → \"hover\"\n * getModifier(\"md:p-4\") → \"md\"\n * getModifier(\"p-4\") → null\n */\nexport function getModifier(cls: string): string | null {\n const idx = cls.indexOf(\":\")\n return idx > -1 ? cls.slice(0, idx) : null\n}\n\n/**\n * Strip modifier prefix from a class.\n *\n * @example\n * stripModifier(\"hover:bg-blue-500\") → \"bg-blue-500\"\n * stripModifier(\"p-4\") → \"p-4\"\n */\nexport function stripModifier(cls: string): string {\n const idx = cls.indexOf(\":\")\n return idx > -1 ? cls.slice(idx + 1) : cls\n}\n\n/**\n * Group classes by their modifier prefix.\n *\n * @example\n * groupByModifier(\"p-4 hover:bg-blue-500 hover:text-white md:p-8\")\n * → { \"\": [\"p-4\"], hover: [\"bg-blue-500\", \"text-white\"], md: [\"p-8\"] }\n */\nexport function groupByModifier(cls: string): Record<string, string[]> {\n const classes = parseClassString(cls)\n const groups: Record<string, string[]> = {}\n\n for (const c of classes) {\n const mod = getModifier(c) ?? \"\"\n const base = stripModifier(c)\n if (!groups[mod]) groups[mod] = []\n groups[mod].push(base)\n }\n\n return groups\n}\n","/**\n * tailwind-styled-v4 — cx() utility\n *\n * Ultra-lightweight class joiner (~100 bytes minified).\n * Drop-in replacement for clsx in runtime-critical paths.\n *\n * Supports:\n * - Strings\n * - Arrays (nested)\n * - Objects { \"class\": boolean }\n * - Falsy values (ignored)\n *\n * @example\n * cx(\"p-4\", \"bg-zinc-900\") → \"p-4 bg-zinc-900\"\n * cx(\"p-4\", isActive && \"bg-blue-500\") → \"p-4 bg-blue-500\"\n * cx([\"p-4\", \"m-2\"], { hidden: false, flex: true }) → \"p-4 m-2 flex\"\n * cx(\"p-4\", undefined, null, false, 0) → \"p-4\"\n */\n\ntype CxInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | CxInput[]\n | Record<string, boolean | undefined | null>\n\nexport function cx(...inputs: CxInput[]): string {\n const parts: string[] = []\n flatten(inputs, parts)\n return parts.join(\" \")\n}\n\nfunction flatten(inputs: CxInput[], out: string[]): void {\n for (const input of inputs) {\n if (!input) continue\n\n if (typeof input === \"string\") {\n out.push(input)\n continue\n }\n\n if (typeof input === \"number\") {\n out.push(String(input))\n continue\n }\n\n if (Array.isArray(input)) {\n flatten(input, out)\n continue\n }\n\n if (typeof input === \"object\") {\n for (const key in input) {\n if (input[key]) out.push(key)\n }\n }\n }\n}\n\n/**\n * cx with tailwind-merge deduplication.\n * Use this when you need conflict resolution (e.g. p-4 overriding p-2).\n * Slightly heavier than cx() — import separately.\n */\nexport function cxm(...inputs: CxInput[]): string {\n // Lazy import tailwind-merge to keep cx() itself zero-dep\n try {\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n const { twMerge } = require(\"tailwind-merge\") as typeof import(\"tailwind-merge\")\n return twMerge(cx(...inputs))\n } catch {\n return cx(...inputs)\n }\n}\n","/**\n * tailwind-styled-v4 — Prop Validator\n *\n * Runtime validation untuk variant props.\n * Memberikan error messages yang jelas ketika value tidak valid.\n *\n * Aktif di development saja (process.env.NODE_ENV !== 'production').\n * Di production = no-op, zero overhead.\n *\n * @example\n * // Dev: error langsung di konsol dengan hint yang jelas\n * <Button variant=\"invalid\" />\n * // [tw-error] Invalid prop \"variant\"=\"invalid\" on <button>\n * // Expected one of: \"primary\" | \"ghost\" | \"danger\"\n * // Got: \"invalid\"\n */\n\nconst IS_DEV =\n typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface ValidationSchema {\n tag: string\n variants?: Record<string, Record<string, string>>\n customValidators?: Record<string, (v: unknown) => string | null>\n}\n\nexport interface ValidationResult {\n valid: boolean\n errors: string[]\n warnings: string[]\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Variant prop validator\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst VALID_SCREENS = new Set([\"base\", \"sm\", \"md\", \"lg\", \"xl\", \"2xl\"])\n\nconst KNOWN_TW_PROPS = new Set([\n \"p\",\"px\",\"py\",\"pt\",\"pb\",\"pl\",\"pr\",\n \"m\",\"mx\",\"my\",\"mt\",\"mb\",\"ml\",\"mr\",\n \"gap\",\"gapX\",\"gapY\",\"spaceX\",\"spaceY\",\n \"w\",\"h\",\"size\",\"minW\",\"maxW\",\"minH\",\"maxH\",\n \"bg\",\"text\",\"border\",\"ring\",\"fill\",\"stroke\",\"accent\",\"caret\",\"divide\",\n \"font\",\"fontSize\",\"leading\",\"tracking\",\"align\",\"truncate\",\"lineClamp\",\n \"flex\",\"flexDir\",\"items\",\"justify\",\"wrap\",\"grow\",\"shrink\",\"basis\",\"self\",\"place\",\n \"cols\",\"rows\",\"colSpan\",\"rowSpan\",\"colStart\",\"colEnd\",\"rowStart\",\"rowEnd\",\n \"display\",\"overflow\",\"overflowX\",\"overflowY\",\"pos\",\"z\",\n \"top\",\"right\",\"bottom\",\"left\",\"inset\",\n \"rounded\",\"roundedT\",\"roundedB\",\"roundedL\",\"roundedR\",\n \"borderWidth\",\"borderStyle\",\"outline\",\n \"opacity\",\"shadow\",\"blur\",\"brightness\",\"contrast\",\n \"saturate\",\"grayscale\",\"invert\",\"backdrop\",\n \"transition\",\"duration\",\"ease\",\"delay\",\"animate\",\n \"cursor\",\"select\",\"pointer\",\"touch\",\n \"sr\",\"hidden\",\"visible\",\"aspect\",\"object\",\"scroll\",\"container\",\n // Boolean convenience\n \"flex\",\"grid\",\"block\",\"inline\",\"hidden\",\"truncate\",\"underline\",\"italic\",\n])\n\n/**\n * Validate variant props against a schema.\n * Pure no-op in production.\n */\nexport function validateVariantProps(\n props: Record<string, unknown>,\n schema: ValidationSchema\n): ValidationResult {\n if (!IS_DEV) return { valid: true, errors: [], warnings: [] }\n\n const errors: string[] = []\n const warnings: string[] = []\n const { tag, variants = {}, customValidators = {} } = schema\n\n // ── Variant key validation ─────────────────────────────────────────────────\n for (const [key, map] of Object.entries(variants)) {\n const value = props[key]\n if (value === undefined || value === null) continue\n\n const str = String(value)\n const valid = Object.keys(map)\n\n if (!valid.includes(str)) {\n errors.push(\n `[tw-error] Invalid prop \"${key}\"=\"${str}\" on <${tag}>\\n` +\n ` Expected one of: ${valid.map(v => `\"${v}\"`).join(\" | \")}\\n` +\n ` Got: \"${str}\"\\n` +\n ` Hint: Add \"${str}\" to the variants config, or fix the typo.`\n )\n }\n }\n\n // ── Custom validators ─────────────────────────────────────────────────────\n for (const [key, fn] of Object.entries(customValidators)) {\n const msg = fn(props[key])\n if (msg) errors.push(`[tw-error] ${msg}`)\n }\n\n // ── Suspicious spacing values ─────────────────────────────────────────────\n const SPACING_PROPS = new Set([\"p\",\"px\",\"py\",\"pt\",\"pb\",\"pl\",\"pr\",\"m\",\"mx\",\"my\",\"mt\",\"mb\",\"ml\",\"mr\",\"gap\"])\n for (const key of SPACING_PROPS) {\n const v = props[key]\n if (typeof v === \"number\" && v > 96) {\n warnings.push(\n `[tw-warn] Prop \"${key}\"=${v} exceeds Tailwind spacing scale max (96).\\n` +\n ` Use arbitrary values: ${key}=\"[${v}px]\" for custom sizes.`\n )\n }\n }\n\n // ── Responsive object screen names ────────────────────────────────────────\n for (const [key, value] of Object.entries(props)) {\n if (typeof value !== \"object\" || !value || Array.isArray(value)) continue\n const unknownScreens = Object.keys(value as object).filter(s => !VALID_SCREENS.has(s))\n if (unknownScreens.length > 0) {\n warnings.push(\n `[tw-warn] Unknown screen(s) in \"${key}\" responsive object: ${unknownScreens.map(s=>`\"${s}\"`).join(\", \")}\\n` +\n ` Valid screens: \"base\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\"`\n )\n }\n }\n\n if (IS_DEV) {\n errors.forEach(e => console.error(e))\n warnings.forEach(w => console.warn(w))\n }\n\n return { valid: errors.length === 0, errors, warnings }\n}\n\n/**\n * Build reusable validation schema from component config.\n */\nexport function buildSchema(\n tag: string,\n variants: Record<string, Record<string, string>> = {}\n): ValidationSchema {\n return { tag, variants }\n}\n\nexport { KNOWN_TW_PROPS, VALID_SCREENS }\n","/**\n * tailwind-styled-v4 — Tailwind v4 Plugin Helpers\n *\n * Tailwind v4 mengubah cara plugin bekerja (CSS-first, bukan JS config).\n * File ini menyediakan tw prop equivalents untuk plugin populer:\n * - @tailwindcss/typography\n * - @tailwindcss/forms\n * - @tailwindcss/aspect-ratio\n * - @tailwindcss/container-queries\n *\n * Usage:\n * import { loadTypographyPlugin, loadFormsPlugin } from \"tailwind-styled-v4\"\n * loadTypographyPlugin()\n * loadFormsPlugin()\n *\n * Lalu pakai props:\n * <div prose=\"lg\" /> → prose prose-lg\n * <input formInput=\"text\" /> → form-input (dari @tailwindcss/forms)\n * <div aspect=\"video\" /> → aspect-video (built-in v4)\n * <div cq=\"sm\" /> → @sm (container query)\n */\n\nimport { registerPlugin } from \"./registerPlugin\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// @tailwindcss/typography\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load typography plugin props.\n * Requires @tailwindcss/typography installed.\n *\n * @example\n * loadTypographyPlugin()\n *\n * <article prose>...</article>\n * // → class=\"prose\"\n *\n * <article prose=\"lg\" proseDark>...</article>\n * // → class=\"prose prose-lg dark:prose-invert\"\n *\n * <article prose=\"xl\" proseColor=\"slate\">...</article>\n * // → class=\"prose prose-xl prose-slate\"\n */\nexport function loadTypographyPlugin(): void {\n registerPlugin({\n name: \"typography\",\n props: {\n // prose=\"lg\" | prose={true} | prose=\"sm\"|\"base\"|\"lg\"|\"xl\"|\"2xl\"\n prose: (v: any) => {\n if (v === true || v === \"base\" || v === \"\") return \"prose\"\n if (typeof v === \"string\") return `prose prose-${v}`\n return \"prose\"\n },\n\n // Prose color: proseColor=\"slate\" → prose-slate\n proseColor: (v: any) => `prose-${v}`,\n\n // Dark mode invert: proseDark={true} → dark:prose-invert\n proseDark: (v: any) => v === true ? \"dark:prose-invert\" : \"\",\n\n // Max width override: proseMaxW={false} → max-w-none\n proseMaxW: (v: any) => v === false ? \"max-w-none\" : \"\",\n\n // Lead size: proseLead=\"relaxed\" → prose-lead:leading-relaxed (custom)\n proseLeading: (v: any) => `leading-${v}`,\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// @tailwindcss/forms\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load forms plugin props.\n * Requires @tailwindcss/forms installed.\n *\n * @example\n * loadFormsPlugin()\n *\n * <input formInput /> → form-input\n * <select formSelect /> → form-select\n * <textarea formTextarea /> → form-textarea\n * <input type=\"checkbox\" formCheckbox /> → form-checkbox\n * <input type=\"radio\" formRadio /> → form-radio\n * <input formInput=\"text\" /> → form-input (explicit)\n */\nexport function loadFormsPlugin(): void {\n registerPlugin({\n name: \"forms\",\n props: {\n formInput: (v: any) => v ? \"form-input\" : \"\",\n formSelect: (v: any) => v ? \"form-select\" : \"\",\n formTextarea: (v: any) => v ? \"form-textarea\" : \"\",\n formCheckbox: (v: any) => v ? \"form-checkbox\" : \"\",\n formRadio: (v: any) => v ? \"form-radio\" : \"\",\n formRange: (v: any) => v ? \"form-range\" : \"\",\n // Alias\n form: (v: any) => {\n const map: Record<string, string> = {\n input: \"form-input\", select: \"form-select\",\n textarea: \"form-textarea\", checkbox: \"form-checkbox\",\n radio: \"form-radio\", range: \"form-range\",\n }\n return map[v] ?? `form-${v}`\n },\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Aspect Ratio (built-in Tailwind v4)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load aspect-ratio convenience props.\n * aspect-ratio is built into Tailwind v4 (no plugin needed).\n *\n * @example\n * loadAspectPlugin()\n *\n * <div aspectRatio=\"video\" /> → aspect-video\n * <div aspectRatio=\"square\" /> → aspect-square\n * <div aspectRatio=\"4/3\" /> → aspect-[4/3]\n * <div aspectRatio={16/9} /> → aspect-video (auto-detect)\n */\nexport function loadAspectPlugin(): void {\n registerPlugin({\n name: \"aspect\",\n props: {\n aspectRatio: (v: any) => {\n const PRESETS: Record<string, string> = {\n video: \"aspect-video\", // 16/9\n square: \"aspect-square\", // 1/1\n auto: \"aspect-auto\",\n \"4/3\": \"aspect-[4/3]\",\n \"3/2\": \"aspect-[3/2]\",\n \"1/1\": \"aspect-square\",\n }\n if (typeof v === \"number\") {\n // Auto-detect common ratios\n if (Math.abs(v - 16/9) < 0.01) return \"aspect-video\"\n if (Math.abs(v - 1) < 0.01) return \"aspect-square\"\n return `aspect-[${v}]`\n }\n return PRESETS[v] ?? `aspect-${v}`\n },\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Container Queries (@tailwindcss/container-queries / Tailwind v4 built-in)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load container query props.\n * Built into Tailwind v4.\n *\n * @example\n * loadContainerQueryPlugin()\n *\n * <div container>...</div> → @container\n * <div cq=\"sm\">...</div> → @sm:... (mark as container query target)\n * <div containerName=\"main\"> → @container/main\n */\nexport function loadContainerQueryPlugin(): void {\n registerPlugin({\n name: \"container-queries\",\n props: {\n container: (v: any) => v === true ? \"@container\" : `@container/${v}`,\n containerName: (v: any) => `@container/${v}`,\n cq: (v: any) => v ? `@${v}:block` : \"\",\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Enhanced Animations (Tailwind v4 built-in)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load enhanced animation props for Tailwind v4.\n *\n * @example\n * loadAnimationPlugin()\n *\n * <div enterAnim=\"fade-up\" /> → animate-in fade-in slide-in-from-bottom-4\n * <div exitAnim=\"fade-down\" /> → animate-out fade-out slide-out-to-bottom-4\n * <div animDuration={300} /> → duration-300\n */\nexport function loadAnimationPlugin(): void {\n registerPlugin({\n name: \"animations-v4\",\n props: {\n // Enter animations (Tailwind v4 animate-in API)\n enterAnim: (v: any) => {\n const map: Record<string, string> = {\n \"fade\": \"animate-in fade-in\",\n \"fade-up\": \"animate-in fade-in slide-in-from-bottom-4\",\n \"fade-down\": \"animate-in fade-in slide-in-from-top-4\",\n \"fade-left\": \"animate-in fade-in slide-in-from-right-4\",\n \"fade-right\": \"animate-in fade-in slide-in-from-left-4\",\n \"zoom\": \"animate-in zoom-in-95\",\n \"slide-up\": \"animate-in slide-in-from-bottom-4\",\n \"slide-down\": \"animate-in slide-in-from-top-4\",\n \"spin-in\": \"animate-in spin-in-180\",\n }\n return map[v] ?? `animate-in ${v}`\n },\n\n // Exit animations\n exitAnim: (v: any) => {\n const map: Record<string, string> = {\n \"fade\": \"animate-out fade-out\",\n \"fade-up\": \"animate-out fade-out slide-out-to-top-4\",\n \"fade-down\": \"animate-out fade-out slide-out-to-bottom-4\",\n \"zoom\": \"animate-out zoom-out-95\",\n \"slide-up\": \"animate-out slide-out-to-top-4\",\n \"slide-down\": \"animate-out slide-out-to-bottom-4\",\n }\n return map[v] ?? `animate-out ${v}`\n },\n\n // Animation fill mode\n animFill: (v: any) => `fill-mode-${v}`,\n animDuration: (v: any) => `duration-${v}`,\n animDelay: (v: any) => `delay-${v}`,\n animRepeat: (v: any) => v === \"infinite\" ? \"repeat-infinite\" : `repeat-${v}`,\n animDirection:(v: any) => `direction-${v}`,\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Interactivity (hover, focus, active state utilities)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load interactivity plugin.\n * Shorthand props untuk common hover/focus/active patterns.\n *\n * @example\n * loadInteractivityPlugin()\n *\n * <div hoverBg=\"zinc-800\" /> → hover:bg-zinc-800\n * <div focusRing=\"blue-500\" /> → focus-visible:ring-2 focus-visible:ring-blue-500\n * <div activeScale /> → active:scale-95\n */\nexport function loadInteractivityPlugin(): void {\n registerPlugin({\n name: \"interactivity\",\n props: {\n hoverBg: (v: any) => `hover:bg-${v}`,\n hoverText: (v: any) => `hover:text-${v}`,\n hoverBorder: (v: any) => `hover:border-${v}`,\n hoverShadow: (v: any) => `hover:shadow-${v}`,\n hoverOpacity:(v: any) => `hover:opacity-${v}`,\n hoverScale: (v: any) => v === true ? \"hover:scale-105\" : `hover:scale-${v}`,\n\n focusRing: (v: any) => v === true\n ? \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\"\n : `focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-${v} focus-visible:ring-offset-2`,\n focusBg: (v: any) => `focus:bg-${v}`,\n\n activeScale: (v: any) => v === true ? \"active:scale-95\" : `active:scale-${v}`,\n activeBg: (v: any) => `active:bg-${v}`,\n activeOpacity:(v: any) => `active:opacity-${v}`,\n\n groupHoverBg: (v: any) => `group-hover:bg-${v}`,\n groupHoverText: (v: any) => `group-hover:text-${v}`,\n groupHoverScale:(v: any) => `group-hover:scale-${v}`,\n peerCheckedBg: (v: any) => `peer-checked:bg-${v}`,\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Load all v4-compatible plugins at once\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load all Tailwind v4 plugin helpers at once.\n *\n * @example\n * import { loadAllV4Plugins } from \"tailwind-styled-v4\"\n * loadAllV4Plugins()\n */\nexport function loadAllV4Plugins(): void {\n loadTypographyPlugin()\n loadFormsPlugin()\n loadAspectPlugin()\n loadContainerQueryPlugin()\n loadAnimationPlugin()\n loadInteractivityPlugin()\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/createComponent.ts","../src/utils/isObject.ts","../src/runtime/responsiveEngine.ts","../src/theme/themeStore.ts","../src/theme/tokenResolver.ts","../src/runtime/propEngine.ts","../src/runtime/variantEngine.ts","../src/runtime/compoundVariant.ts","../src/plugins/pluginEngine.ts","../src/core/templateParser.ts","../src/core/twProxy.ts","../src/core/cv.ts","../src/core/withTw.ts","../src/plugins/registerPlugin.ts","../src/plugins/builtinPlugins.ts","../src/runtime/classResolver.ts","../src/theme/defaultTheme.ts","../src/utils/hash.ts","../src/core/styledFactory.ts","../src/utils/merge.ts","../src/utils/classParser.ts","../src/utils/cx.ts","../src/validation/propValidator.ts","../src/plugins/tailwindV4Plugins.ts"],"names":["isObject","value","SCREENS","applyToken","raw","tokenFn","str","resolveResponsive","key","tokenResolver","classes","v","screen","currentTheme","listeners","setTheme","newTheme","namespace","incoming","fn","replaceTheme","theme","getTheme","getThemeNamespace","resetTheme","onThemeChange","listener","resolveThemeToken","ns","isThemeToken","resolveToken","resolveColor","resolveSpacing","resolveRadius","propMap","s","TW_PROP_KEYS","registerProp","resolver","resolveProps","props","cls","resolveVariants","variants","defaultVariants","style","resolveCompound","compounds","merged","compound","match","plugins","addPlugin","plugin","getPlugin","name","listPlugins","resolvePluginProps","resolveValue","obj","k","templateParser","strings","values","result","i","resolved","line","EXTRA_FILTER","shouldForwardProp","prop","createComponent","tag","config","isString","base","compoundVariants","BaseStyled","styled","Component","propClasses","variantClasses","compoundClasses","pluginClasses","twMerge","expr","extra","newConfig","makeTag","stringsOrConfig","exprs","HTML_TAGS","tagFactories","twCallable","component","tw","cv","withTw","baseOrOpts","displayName","WrappedComponent","forwardRef","ref","twProps","restProps","mergedClassName","React","attachTw","registerPlugin","_loaded","loadBuiltinPlugins","resolveClasses","mergedProps","loadDefaultTheme","loadDarkTheme","djb2","hash","hashClass","input","hashNumber","componentName","EXTRA_BLOCKED","blockProp","allowProp","styledFactory","mergeClasses","parseClassString","c","normalizeClasses","splitModifiers","modifiers","isValidClass","getModifier","idx","stripModifier","groupByModifier","groups","mod","cx","inputs","parts","flatten","out","cxm","VALID_SCREENS","KNOWN_TW_PROPS","validateVariantProps","schema","buildSchema","loadTypographyPlugin","loadFormsPlugin","loadAspectPlugin","PRESETS","loadContainerQueryPlugin","loadAnimationPlugin","loadInteractivityPlugin","loadAllV4Plugins"],"mappings":";AAmBA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,OAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,OAAA,KAAA,CAAA,GAAA,CAAA,IAAA,KAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,OAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,SAAA,CAAA,CAAA,CAAA,GAAA,OAAA,OAAA,CAAA,GAAA,CAAA,OAAA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,MAAA,KAAA,CAAA,sBAAA,CAAA,CAAA,CAAA,oBAAA,CAAA,CAAA,CAAA,CChBO,SAASA,CAAAA,CAASC,CAAAA,CAA0C,CACjE,OAAOA,CAAAA,GAAU,MAAQ,OAAOA,CAAAA,EAAU,UAAY,CAAC,KAAA,CAAM,QAAQA,CAAK,CAC5E,CCcA,IAAMC,GAAU,CAAC,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,KAAK,CAAA,CAW9C,SAASC,EAAWC,CAAAA,CAAUC,CAAAA,CAAyC,CACrE,IAAMC,CAAAA,CAAM,OAAOF,CAAG,CAAA,CACtB,OAAOC,CAAAA,CAAUA,CAAAA,CAAQC,CAAG,CAAA,CAAIA,CAClC,CAEO,SAASC,EACdC,CAAAA,CACAP,CAAAA,CAEAQ,EACQ,CACR,GAAI,CAACT,CAAAA,CAASC,CAAK,EACjB,OAAO,CAAA,EAAGO,CAAG,CAAA,CAAA,EAAIL,CAAAA,CAAWF,EAAOQ,CAAa,CAAC,CAAA,CAAA,CAGnD,IAAMC,EAAoB,EAAC,CACrBC,EAAIV,CAAAA,CAGNU,CAAAA,CAAE,OAAS,MAAA,EACbD,CAAAA,CAAQ,KAAK,CAAA,EAAGF,CAAG,IAAIL,CAAAA,CAAWQ,CAAAA,CAAE,KAAMF,CAAa,CAAC,EAAE,CAAA,CAG5D,IAAA,IAAWG,CAAAA,IAAUV,EAAAA,CACfS,EAAEC,CAAM,CAAA,GAAM,QAChBF,CAAAA,CAAQ,IAAA,CAAK,GAAGE,CAAM,CAAA,CAAA,EAAIJ,CAAG,CAAA,CAAA,EAAIL,CAAAA,CAAWQ,EAAEC,CAAM,CAAA,CAAGH,CAAa,CAAC,CAAA,CAAE,EAI3E,OAAOC,CAAAA,CAAQ,IAAA,CAAK,GAAG,CACzB,CCzBA,IAAIG,EAAiC,EAAC,CAChCC,EAAgC,IAAI,GAAA,CAUnC,SAASC,CAAAA,CAASC,CAAAA,CAA+B,CAEtD,IAAA,IAAWC,CAAAA,IAAaD,EAAU,CAChC,IAAME,EAAWF,CAAAA,CAASC,CAAS,CAAA,CAC9BC,CAAAA,GAELL,EAAaI,CAAS,CAAA,CAAI,CACxB,GAAIJ,CAAAA,CAAaI,CAAS,CAAA,EAAK,GAC/B,GAAGC,CACL,GACF,CAEAJ,CAAAA,CAAU,QAAQK,CAAAA,EAAMA,CAAAA,CAAGN,CAAY,CAAC,EAC1C,CAKO,SAASO,EAAAA,CAAaC,EAA4B,CACvDR,CAAAA,CAAe,CAAE,GAAGQ,CAAM,EAC1BP,CAAAA,CAAU,OAAA,CAAQK,GAAMA,CAAAA,CAAGN,CAAY,CAAC,EAC1C,CAKO,SAASS,EAAAA,EAA0B,CACxC,OAAO,CAAE,GAAGT,CAAa,CAC3B,CAKO,SAASU,EAAAA,CACdN,EACwB,CACxB,OAAO,CAAE,GAAIJ,CAAAA,CAAaI,CAAS,CAAA,EAAK,EAAI,CAC9C,CAKO,SAASO,EAAAA,EAAmB,CACjCX,EAAe,EAAC,CAChBC,CAAAA,CAAU,OAAA,CAAQK,GAAMA,CAAAA,CAAGN,CAAY,CAAC,EAC1C,CAgBO,SAASY,EAAAA,CAAcC,CAAAA,CAAqC,CACjE,OAAAZ,CAAAA,CAAU,IAAIY,CAAQ,CAAA,CACf,IAAMZ,CAAAA,CAAU,MAAA,CAAOY,CAAQ,CACxC,CAeO,SAASC,CAAAA,CACdV,EACAhB,CAAAA,CACQ,CACR,IAAM2B,CAAAA,CAAKf,CAAAA,CAAaI,CAAS,CAAA,CACjC,OAAKW,EACEA,CAAAA,CAAG3B,CAAK,GAAKA,CAAAA,CADJA,CAElB,CAKO,SAAS4B,EAAAA,CAAaZ,EAAmBhB,CAAAA,CAAwB,CACtE,OAAO,CAAC,CAAEY,EAAaI,CAAS,CAAA,GAAIhB,CAAK,CAC3C,CC1GO,SAAS6B,CAAAA,CAAab,CAAAA,CAA2BhB,EAAuB,CAC7E,OAAO0B,EAAkBV,CAAAA,CAAWhB,CAAK,CAC3C,CAaO,SAAS8B,EAAa9B,CAAAA,CAAuB,CAClD,OAAO6B,CAAAA,CAAa,SAAU7B,CAAK,CACrC,CASO,SAAS+B,CAAAA,CAAe/B,EAAgC,CAC7D,OAAI,OAAOA,CAAAA,EAAU,QAAA,CAAiB,OAAOA,CAAK,CAAA,CAC3C6B,EAAa,SAAA,CAAW7B,CAAK,CACtC,CASO,SAASgC,CAAAA,CAAchC,CAAAA,CAAuB,CACnD,OAAO6B,CAAAA,CAAa,SAAU7B,CAAK,CACrC,CCvDA,IAAMiC,CAAAA,CAAwC,CAI5C,CAAA,CAAKvB,CAAAA,EAAKJ,EAAkB,GAAA,CAAOI,CAAAA,CAAGqB,CAAc,CAAA,CACpD,EAAA,CAAKrB,GAAKJ,CAAAA,CAAkB,IAAA,CAAOI,CAAAA,CAAGqB,CAAc,EACpD,EAAA,CAAKrB,CAAAA,EAAKJ,EAAkB,IAAA,CAAOI,CAAAA,CAAGqB,CAAc,CAAA,CACpD,EAAA,CAAKrB,GAAKJ,CAAAA,CAAkB,IAAA,CAAOI,EAAGqB,CAAc,CAAA,CACpD,GAAKrB,CAAAA,EAAKJ,CAAAA,CAAkB,KAAOI,CAAAA,CAAGqB,CAAc,EACpD,EAAA,CAAKrB,CAAAA,EAAKJ,EAAkB,IAAA,CAAOI,CAAAA,CAAGqB,CAAc,CAAA,CACpD,EAAA,CAAKrB,GAAKJ,CAAAA,CAAkB,IAAA,CAAOI,EAAGqB,CAAc,CAAA,CAGpD,EAAKrB,CAAAA,EAAKJ,CAAAA,CAAkB,IAAOI,CAAAA,CAAGqB,CAAc,EACpD,EAAA,CAAKrB,CAAAA,EAAKJ,CAAAA,CAAkB,IAAA,CAAOI,EAAGqB,CAAc,CAAA,CACpD,GAAKrB,CAAAA,EAAKJ,CAAAA,CAAkB,KAAOI,CAAAA,CAAGqB,CAAc,EACpD,EAAA,CAAKrB,CAAAA,EAAKJ,EAAkB,IAAA,CAAOI,CAAAA,CAAGqB,CAAc,CAAA,CACpD,EAAA,CAAKrB,GAAKJ,CAAAA,CAAkB,IAAA,CAAOI,CAAAA,CAAGqB,CAAc,EACpD,EAAA,CAAKrB,CAAAA,EAAKJ,EAAkB,IAAA,CAAOI,CAAAA,CAAGqB,CAAc,CAAA,CACpD,EAAA,CAAKrB,GAAKJ,CAAAA,CAAkB,IAAA,CAAOI,EAAGqB,CAAc,CAAA,CAGpD,IAAQrB,CAAAA,EAAKJ,CAAAA,CAAkB,MAAWI,CAAAA,CAAGqB,CAAc,CAAA,CAC3D,IAAA,CAAQrB,GAAKJ,CAAAA,CAAkB,OAAA,CAAWI,EAAGqB,CAAc,CAAA,CAC3D,KAAQrB,CAAAA,EAAKJ,CAAAA,CAAkB,QAAWI,CAAAA,CAAGqB,CAAc,EAC3D,MAAA,CAAQrB,CAAAA,EAAKJ,EAAkB,SAAA,CAAWI,CAAAA,CAAGqB,CAAc,CAAA,CAC3D,MAAA,CAAQrB,GAAKJ,CAAAA,CAAkB,SAAA,CAAWI,EAAGqB,CAAc,CAAA,CAI3D,EAAMrB,CAAAA,EAAKJ,CAAAA,CAAkB,IAASI,CAAC,CAAA,CACvC,EAAMA,CAAAA,EAAKJ,CAAAA,CAAkB,IAASI,CAAC,CAAA,CACvC,KAAMA,CAAAA,EAAKJ,CAAAA,CAAkB,OAASI,CAAC,CAAA,CACvC,IAAA,CAAMA,CAAAA,EAAKJ,EAAkB,OAAA,CAASI,CAAC,EACvC,IAAA,CAAMA,CAAAA,EAAKJ,EAAkB,OAAA,CAASI,CAAC,EACvC,IAAA,CAAMA,CAAAA,EAAKJ,EAAkB,OAAA,CAASI,CAAC,EACvC,IAAA,CAAMA,CAAAA,EAAKJ,EAAkB,OAAA,CAASI,CAAC,CAAA,CAIvC,EAAA,CAAWA,GAAKJ,CAAAA,CAAkB,IAAA,CAAUI,EAAGoB,CAAY,CAAA,CAC3D,KAAWpB,CAAAA,EAAKJ,CAAAA,CAAkB,OAAUI,CAAAA,CAAGoB,CAAY,EAC3D,MAAA,CAAWpB,CAAAA,EAAKA,IAAM,IAAA,CAAO,QAAA,CAAWJ,EAAkB,QAAA,CAAWI,CAAAA,CAAGoB,CAAY,CAAA,CACpF,KAAWpB,CAAAA,EAAKA,CAAAA,GAAM,KAAO,MAAA,CAAWJ,CAAAA,CAAkB,OAAWI,CAAAA,CAAGoB,CAAY,EACpF,SAAA,CAAWpB,CAAAA,EAAKJ,EAAkB,MAAA,CAAUI,CAAAA,CAAGoB,CAAY,CAAA,CAC3D,IAAA,CAAWpB,GAAKJ,CAAAA,CAAkB,MAAA,CAAUI,EAAGoB,CAAY,CAAA,CAC3D,OAAWpB,CAAAA,EAAKJ,CAAAA,CAAkB,SAAUI,CAAAA,CAAGoB,CAAY,EAC3D,MAAA,CAAWpB,CAAAA,EAAKJ,EAAkB,QAAA,CAAUI,CAAAA,CAAGoB,CAAY,CAAA,CAC3D,KAAA,CAAWpB,GAAKJ,CAAAA,CAAkB,OAAA,CAAUI,EAAGoB,CAAY,CAAA,CAC3D,MAAA,CAAWpB,CAAAA,EAAKJ,EAAkB,QAAA,CAAUI,CAAAA,CAAGoB,CAAY,CAAA,CAI3D,IAAA,CAAYpB,GAAKJ,CAAAA,CAAkB,MAAA,CAAWI,EAAGwB,CAAAA,EAAKL,CAAAA,CAAa,OAAQK,CAAC,CAAC,EAC7E,QAAA,CAAYxB,CAAAA,EAAKJ,EAAkB,MAAA,CAAWI,CAAAA,CAAGwB,CAAAA,EAAKL,CAAAA,CAAa,WAAYK,CAAC,CAAC,EACjF,OAAA,CAAYxB,CAAAA,EAAKJ,EAAkB,SAAA,CAAYI,CAAC,EAChD,QAAA,CAAYA,CAAAA,EAAKJ,EAAkB,UAAA,CAAYI,CAAC,EAChD,KAAA,CAAYA,CAAAA,EAAK,QAAQA,CAAC,CAAA,CAAA,CAC1B,UAAA,CAAYA,CAAAA,EAAK,cAAcA,CAAC,CAAA,CAAA,CAChC,SAAYA,CAAAA,EAAKA,CAAAA,GAAM,KAAO,UAAA,CAAa,EAAA,CAC3C,UAAYA,CAAAA,EAAK,CAAA,WAAA,EAAcA,CAAC,CAAA,CAAA,CAGhC,IAAA,CAASA,GAAKA,CAAAA,GAAM,IAAA,CAAO,OAASA,CAAAA,GAAM,KAAA,CAAQ,GAAKJ,CAAAA,CAAkB,MAAA,CAAQI,CAAC,CAAA,CAClF,OAAA,CAASA,GAAK,CAAA,KAAA,EAAQA,CAAC,GACvB,OAAA,CAASA,CAAAA,EAAKA,IAAM,IAAA,CAAO,UAAA,CAAa,WACxC,OAAA,CAASA,CAAAA,EAAKA,IAAM,IAAA,CAAO,UAAA,CAAa,WACxC,KAAA,CAASA,CAAAA,EAAKJ,CAAAA,CAAkB,OAAA,CAAeI,CAAC,CAAA,CAChD,OAAA,CAASA,GAAKJ,CAAAA,CAAkB,SAAA,CAAeI,CAAC,CAAA,CAChD,OAAA,CAASA,GAAKJ,CAAAA,CAAkB,SAAA,CAAeI,CAAC,CAAA,CAChD,IAAA,CAASA,GAAKA,CAAAA,GAAM,IAAA,CAAO,YAAcA,CAAAA,GAAM,KAAA,CAAQ,aAAA,CAAgB,CAAA,KAAA,EAAQA,CAAC,CAAA,CAAA,CAChF,IAAA,CAASA,GAAKA,CAAAA,GAAM,IAAA,CAAO,OAASA,CAAAA,GAAM,KAAA,CAAQ,SAAW,CAAA,KAAA,EAAQA,CAAC,GACtE,MAAA,CAASA,CAAAA,EAAKA,IAAM,IAAA,CAAO,QAAA,CAAWA,IAAM,KAAA,CAAQ,UAAA,CAAa,CAAA,OAAA,EAAUA,CAAC,GAC5E,KAAA,CAASA,CAAAA,EAAKJ,EAAkB,OAAA,CAAeI,CAAC,EAChD,IAAA,CAASA,CAAAA,EAAKJ,EAAkB,MAAA,CAAeI,CAAC,EAChD,KAAA,CAASA,CAAAA,EAAKJ,EAAkB,aAAA,CAAeI,CAAC,EAGhD,IAAA,CAAUA,CAAAA,EAAKJ,EAAkB,WAAA,CAAaI,CAAC,EAC/C,IAAA,CAAUA,CAAAA,EAAKJ,EAAkB,WAAA,CAAaI,CAAC,EAC/C,OAAA,CAAUA,CAAAA,EAAKJ,EAAkB,UAAA,CAAaI,CAAC,EAC/C,OAAA,CAAUA,CAAAA,EAAKJ,EAAkB,UAAA,CAAaI,CAAC,EAC/C,QAAA,CAAUA,CAAAA,EAAK,CAAA,UAAA,EAAaA,CAAC,GAC7B,MAAA,CAAUA,CAAAA,EAAK,WAAWA,CAAC,CAAA,CAAA,CAC3B,SAAUA,CAAAA,EAAK,CAAA,UAAA,EAAaA,CAAC,CAAA,CAAA,CAC7B,MAAA,CAAUA,GAAK,CAAA,QAAA,EAAWA,CAAC,GAG3B,OAAA,CAAWA,CAAAA,EAAK,GAAGA,CAAC,CAAA,CAAA,CACpB,QAAA,CAAWA,CAAAA,EAAKJ,EAAkB,UAAA,CAAaI,CAAC,EAChD,SAAA,CAAWA,CAAAA,EAAK,cAAcA,CAAC,CAAA,CAAA,CAC/B,UAAWA,CAAAA,EAAK,CAAA,WAAA,EAAcA,CAAC,CAAA,CAAA,CAC/B,GAAA,CAAWA,GAAK,CAAA,EAAGA,CAAC,GACpB,QAAA,CAAWA,CAAAA,EAAK,CAAA,EAAGA,CAAC,GACpB,CAAA,CAAWA,CAAAA,EAAKJ,EAAkB,GAAA,CAAWI,CAAC,EAC9C,GAAA,CAAWA,CAAAA,EAAKJ,EAAkB,KAAA,CAAWI,CAAC,EAC9C,KAAA,CAAWA,CAAAA,EAAKJ,EAAkB,OAAA,CAAWI,CAAC,EAC9C,MAAA,CAAWA,CAAAA,EAAKJ,EAAkB,QAAA,CAAWI,CAAC,EAC9C,IAAA,CAAWA,CAAAA,EAAKJ,EAAkB,MAAA,CAAWI,CAAC,EAC9C,KAAA,CAAWA,CAAAA,EAAKJ,EAAkB,OAAA,CAAWI,CAAC,EAC9C,MAAA,CAAWA,CAAAA,EAAKJ,EAAkB,SAAA,CAAWI,CAAC,EAC9C,MAAA,CAAWA,CAAAA,EAAKJ,CAAAA,CAAkB,SAAA,CAAWI,CAAC,CAAA,CAI9C,OAAA,CAAcA,GAAKA,CAAAA,GAAM,IAAA,CAAO,UAAYJ,CAAAA,CAAkB,SAAA,CAAaI,EAAGsB,CAAa,CAAA,CAC3F,SAActB,CAAAA,EAAKJ,CAAAA,CAAkB,YAAaI,CAAAA,CAAGsB,CAAa,EAClE,QAAA,CAActB,CAAAA,EAAKJ,CAAAA,CAAkB,WAAA,CAAaI,EAAGsB,CAAa,CAAA,CAClE,SAActB,CAAAA,EAAKJ,CAAAA,CAAkB,YAAaI,CAAAA,CAAGsB,CAAa,EAClE,QAAA,CAActB,CAAAA,EAAKJ,EAAkB,WAAA,CAAaI,CAAAA,CAAGsB,CAAa,CAAA,CAClE,WAAA,CAActB,GAAKJ,CAAAA,CAAkB,QAAA,CAAaI,CAAC,CAAA,CACnD,YAAcA,CAAAA,EAAK,CAAA,OAAA,EAAUA,CAAC,CAAA,CAAA,CAC9B,OAAA,CAAcA,GAAKA,CAAAA,GAAM,MAAA,CAAS,eAAiB,CAAA,QAAA,EAAWA,CAAC,GAC/D,YAAA,CAAcA,CAAAA,EAAK,WAAWA,CAAC,CAAA,CAAA,CAI/B,QAAaA,CAAAA,EAAKJ,CAAAA,CAAkB,UAAcI,CAAAA,CAAGwB,CAAAA,EAAKL,EAAa,SAAA,CAAWK,CAAC,CAAC,CAAA,CAEpF,MAAA,CAAaxB,GAAKA,CAAAA,GAAM,IAAA,CAAO,SAAWJ,CAAAA,CAAkB,QAAA,CAAcI,EAAGwB,CAAAA,EAAKL,CAAAA,CAAa,SAAUK,CAAC,CAAC,EAC3G,WAAA,CAAaxB,CAAAA,EAAK,CAAA,OAAA,EAAUoB,CAAAA,CAAa,OAAOpB,CAAC,CAAC,CAAC,CAAA,CAAA,CACnD,IAAA,CAAaA,GAAKA,CAAAA,GAAM,IAAA,CAAO,OAASJ,CAAAA,CAAkB,MAAA,CAAeI,CAAC,CAAA,CAC1E,UAAA,CAAaA,GAAKJ,CAAAA,CAAkB,YAAA,CAAcI,CAAC,CAAA,CACnD,QAAA,CAAaA,CAAAA,EAAKJ,CAAAA,CAAkB,WAAcI,CAAC,CAAA,CACnD,SAAaA,CAAAA,EAAKJ,CAAAA,CAAkB,WAAcI,CAAC,CAAA,CACnD,UAAaA,CAAAA,EAAKA,CAAAA,GAAM,KAAO,WAAA,CAAc,EAAA,CAC7C,OAAaA,CAAAA,EAAKA,CAAAA,GAAM,KAAO,QAAA,CAAW,EAAA,CAC1C,QAAA,CAAaA,CAAAA,EAAKJ,EAAkB,eAAA,CAAiBI,CAAC,EAItD,UAAA,CAAYA,CAAAA,EAAKA,IAAM,IAAA,CAAO,YAAA,CAAe,cAAcA,CAAC,CAAA,CAAA,CAC5D,SAAYA,CAAAA,EAAKJ,CAAAA,CAAkB,WAAYI,CAAAA,CAAGwB,CAAAA,EAAKL,EAAa,UAAA,CAAYK,CAAC,CAAC,CAAA,CAClF,IAAA,CAAYxB,GAAK,CAAA,KAAA,EAAQA,CAAC,GAC1B,KAAA,CAAYA,CAAAA,EAAKJ,EAAkB,OAAA,CAAYI,CAAC,EAChD,OAAA,CAAYA,CAAAA,EAAK,WAAWA,CAAC,CAAA,CAAA,CAG7B,OAASA,CAAAA,EAAK,CAAA,OAAA,EAAUA,CAAC,CAAA,CAAA,CACzB,MAAA,CAASA,CAAAA,EAAK,CAAA,OAAA,EAAUA,CAAC,CAAA,CAAA,CACzB,OAAA,CAASA,GAAKA,CAAAA,GAAM,IAAA,CAAO,sBAAwB,qBAAA,CACnD,KAAA,CAASA,GAAK,CAAA,MAAA,EAASA,CAAC,GAGxB,EAAA,CAASA,CAAAA,EAAKA,IAAM,IAAA,CAAO,SAAA,CAAY,cACvC,MAAA,CAASA,CAAAA,EAAKA,CAAAA,GAAM,IAAA,CAAO,SAAW,EAAA,CACtC,OAAA,CAASA,GAAKA,CAAAA,GAAM,IAAA,CAAO,UAAY,WAAA,CAGvC,MAAA,CAAWA,GAAK,CAAA,OAAA,EAAUA,CAAC,GAC3B,MAAA,CAAWA,CAAAA,EAAK,UAAUA,CAAC,CAAA,CAAA,CAC3B,OAAWA,CAAAA,EAAK,CAAA,OAAA,EAAUA,CAAC,CAAA,CAAA,CAC3B,UAAWA,CAAAA,EAAKA,CAAAA,GAAM,KAAO,WAAA,CAAc,EAC7C,EAGayB,CAAAA,CAAoC,IAAI,IAAI,MAAA,CAAO,IAAA,CAAKF,CAAO,CAAC,EAKtE,SAASG,EAAAA,CAAa7B,CAAAA,CAAa8B,EAA8B,CACrEJ,CAAAA,CAAyC1B,CAAG,CAAA,CAAI8B,CAAAA,CAC/CF,EAA6B,GAAA,CAAI5B,CAAG,EACxC,CAKO,SAAS+B,EAAaC,CAAAA,CAAoC,CAC/D,IAAM9B,CAAAA,CAAoB,GAE1B,IAAA,IAAWF,CAAAA,IAAOgC,EAAO,CACvB,IAAMF,EAAWJ,CAAAA,CAAQ1B,CAAG,CAAA,CAC5B,GAAI,CAAC8B,CAAAA,CAAU,SAEf,IAAMrC,CAAAA,CAAQuC,CAAAA,CAAMhC,CAAG,CAAA,CACvB,GAA2BP,GAAU,IAAA,EAAQA,CAAAA,GAAU,MAAO,SAE9D,IAAMwC,EAAMH,CAAAA,CAASrC,CAAK,EACtBwC,CAAAA,EAAK/B,CAAAA,CAAQ,IAAA,CAAK+B,CAAG,EAC3B,CAEA,OAAO/B,EAAQ,IAAA,CAAK,GAAG,EAAE,IAAA,EAC3B,CCzLO,SAASgC,CAAAA,CACdC,EACAH,CAAAA,CACAI,CAAAA,CACQ,CACR,GAAI,CAACD,EAAU,OAAO,EAAA,CAEtB,IAAMjC,CAAAA,CAAoB,EAAC,CAE3B,IAAA,IAAWF,KAAOmC,CAAAA,CAAU,CAE1B,IAAM1C,CAAAA,CAAQuC,CAAAA,CAAMhC,CAAG,CAAA,EAAKoC,CAAAA,GAAkBpC,CAAG,CAAA,CACjD,GAA2BP,GAAU,IAAA,CAAM,SAG3C,IAAM4C,CAAAA,CADaF,CAAAA,CAASnC,CAAG,CAAA,CACN,MAAA,CAAOP,CAAK,CAAC,CAAA,CAElC4C,GAAOnC,CAAAA,CAAQ,IAAA,CAAKmC,CAAK,EAC/B,CAEA,OAAOnC,CAAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAC3B,CCxBO,SAASoC,EACdC,CAAAA,CACAP,CAAAA,CACAI,CAAAA,CACQ,CACR,GAAI,CAACG,CAAAA,EAAaA,EAAU,MAAA,GAAW,CAAA,CAAG,OAAO,EAAA,CAEjD,IAAMrC,EAAoB,EAAC,CAGrBsC,EAASJ,CAAAA,CAAkB,CAAE,GAAGA,CAAAA,CAAiB,GAAGJ,CAAM,CAAA,CAAIA,CAAAA,CAEpE,IAAA,IAAWS,CAAAA,IAAYF,EAAW,CAChC,IAAIG,EAAQ,IAAA,CAEZ,IAAA,IAAW1C,KAAOyC,CAAAA,CAEhB,GAAI,EAAAzC,CAAAA,GAAQ,OAAA,EAAWA,IAAQ,WAAA,CAAA,EAE3BwC,CAAAA,CAAOxC,CAAG,CAAA,GAAMyC,CAAAA,CAASzC,CAAG,CAAA,CAAG,CACjC0C,CAAAA,CAAQ,KAAA,CACR,KACF,CAGF,GAAIA,EAAO,CACT,IAAMT,EAAMQ,CAAAA,CAAS,KAAA,EAASA,EAAS,SAAA,CACnCR,CAAAA,EAAK/B,EAAQ,IAAA,CAAK+B,CAAG,EAC3B,CACF,CAEA,OAAO/B,CAAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAC3B,CCtBA,IAAMyC,EAAuC,IAAI,GAAA,CAE1C,SAASC,CAAAA,CAAUC,CAAAA,CAA8B,CAClDF,CAAAA,CAAQ,GAAA,CAAIE,EAAO,IAAI,CAAA,EACzB,QAAQ,IAAA,CAAK,CAAA,6BAAA,EAAgCA,EAAO,IAAI,CAAA,uCAAA,CAAoC,CAAA,CAE9FF,CAAAA,CAAQ,IAAIE,CAAAA,CAAO,IAAA,CAAMA,CAAM,CAAA,CAC/BA,CAAAA,CAAO,eACT,CAEO,SAASC,EAAAA,CAAUC,CAAAA,CAA0C,CAClE,OAAOJ,CAAAA,CAAQ,IAAII,CAAI,CACzB,CAEO,SAASC,EAAAA,EAAwB,CACtC,OAAO,MAAM,IAAA,CAAKL,CAAAA,CAAQ,MAAM,CAClC,CAEO,SAASM,CAAAA,CAAmBjB,EAAoC,CACrE,IAAM9B,EAAoB,EAAC,CAE3B,QAAW2C,CAAAA,IAAUF,CAAAA,CAAQ,QAAO,CAClC,IAAA,IAAW3C,CAAAA,IAAO6C,CAAAA,CAAO,MACvB,GAAIb,CAAAA,CAAMhC,CAAG,CAAA,GAAM,MAAA,CAAW,CAC5B,IAAMiC,CAAAA,CAAMY,EAAO,KAAA,CAAM7C,CAAG,EAAEgC,CAAAA,CAAMhC,CAAG,CAAC,CAAA,CACpCiC,CAAAA,EAAK/B,EAAQ,IAAA,CAAK+B,CAAG,EAC3B,CAIJ,OAAO/B,EAAQ,IAAA,CAAK,GAAG,EAAE,IAAA,EAC3B,CC/BA,SAASgD,CAAAA,CAAazD,EAAwB,CAC5C,GAAIA,GAAU,IAAA,EAA+BA,CAAAA,GAAU,MAAO,OAAO,EAAA,CACrE,GAAI,OAAOA,CAAAA,EAAU,QAAA,CAAW,OAAOA,EACvC,GAAI,OAAOA,GAAU,QAAA,CAAW,OAAO,OAAOA,CAAK,CAAA,CACnD,GAAI,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAS,OAAOA,EAAM,GAAA,CAAIyD,CAAY,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CACvF,GAAI,OAAOzD,CAAAA,EAAU,QAAA,CAAW,CAE9B,IAAM0D,CAAAA,CAAM1D,EACZ,OAAO,MAAA,CAAO,KAAK0D,CAAG,CAAA,CAAE,OAAOC,CAAAA,EAAKD,CAAAA,CAAIC,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CACtD,CACA,OAAO,EACT,CAKO,SAASC,EACdC,CAAAA,CACAC,CAAAA,CACQ,CACR,IAAIC,CAAAA,CAAS,GAEb,IAAA,IAASC,CAAAA,CAAI,EAAGA,CAAAA,CAAIH,CAAAA,CAAQ,OAAQG,CAAAA,EAAAA,CAGlC,GAFAD,GAAUF,CAAAA,CAAQG,CAAC,EAEfA,CAAAA,CAAIF,CAAAA,CAAO,OAAQ,CACrB,IAAMG,EAAWR,CAAAA,CAAaK,CAAAA,CAAOE,CAAC,CAAC,CAAA,CACnCC,IAAUF,CAAAA,EAAU,GAAA,CAAME,GAChC,CAGF,OAAOF,EACJ,KAAA,CAAM;AAAA,CAAI,CAAA,CACV,IAAIG,CAAAA,EAAQA,CAAAA,CAAK,MAAM,CAAA,CACvB,OAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA,CACR,QAAQ,SAAA,CAAW,GAAG,EACtB,IAAA,EACL,CAUO,SAAS1B,EAAAA,CACdqB,CAAAA,CAAAA,GACGC,EACK,CACR,OAAOF,EAAeC,CAAAA,CAASC,CAAM,CACvC,CT3CA,IAAMK,EAAAA,CAAe,IAAI,GAAA,CAAI,CAC3B,UAAW,MAAA,CAAQ,QAAA,CAAU,QAAS,OAAA,CAAS,MACjD,CAAC,CAAA,CAED,SAASC,EAAAA,CAAkBC,CAAAA,CAAuB,CAEhD,OADI,EAAAF,EAAAA,CAAa,GAAA,CAAIE,CAAI,CAAA,EACrBlC,CAAAA,CAAa,IAAIkC,CAAI,CAAA,CAE3B,CAMO,SAASC,CAAAA,CACdC,EACAC,CAAAA,CACK,CACL,IAAMC,CAAAA,CAAW,OAAOD,GAAW,QAAA,CAE7BE,CAAAA,CAAmBD,CAAAA,CAAYD,CAAAA,CAAwBA,CAAAA,CAAO,IAAA,EAAQ,GACtE9B,CAAAA,CAAmB+B,CAAAA,CAAW,EAAC,CAAyBD,CAAAA,CAAO,UAAY,EAAC,CAC5EG,CAAAA,CAAmBF,CAAAA,CAAW,EAAC,CAAyBD,EAAO,gBAAA,EAAoB,GACnF7B,CAAAA,CAAmB8B,CAAAA,CAAW,EAAC,CAAyBD,CAAAA,CAAO,eAAA,EAAmB,EAAC,CAGnFI,CAAAA,CAAaC,mBAAON,CAAG,CAAA,CAAE,WAAW,CACxC,iBAAA,CAAAH,EACF,CAAC,CAAA,CAAA,CAAA,CAGKU,EAAYD,kBAAAA,CAAOD,CAAU,EAAE,KAAA,CAClCrC,CAAAA,EAA+B,CAC9B,IAAMwC,CAAAA,CAAkBzC,EAAaC,CAAK,CAAA,CACpCyC,CAAAA,CAAkBvC,CAAAA,CAAgBC,CAAAA,CAAUH,CAAAA,CAAOI,CAAe,CAAA,CAClEsC,CAAAA,CAAkBpC,EAAgB8B,CAAAA,CAAkBpC,CAAK,EACzD2C,CAAAA,CAAkB1B,CAAAA,CAAmBjB,CAAK,CAAA,CAEhD,OAAO,CACL,UAAW4C,qBAAAA,CACTT,CAAAA,CACAM,EACAC,CAAAA,CACAF,CAAAA,CACAG,EACA3C,CAAAA,CAAM,SACR,CACF,CACF,CACF,CAAA,CAAA,CAAA,CAGC,OAACuC,CAAAA,CAAkB,MAAA,CAAS,CAC3BjB,CAAAA,CAAAA,GACGuB,CAAAA,GACA,CACH,IAAMC,CAAAA,CAAQzB,EAAeC,CAAAA,CAASuB,CAAI,EAC1C,OAAOd,CAAAA,CAAgBQ,EAAW,CAEhC,GAAIL,EAAW,EAAC,CAAKD,CAAAA,CACrB,IAAA,CAAMW,qBAAAA,CAAQT,CAAAA,CAAMW,CAAK,CAC3B,CAAC,CACH,CAAA,CAGEP,CAAAA,CAAkB,aAClBQ,CAAAA,EAEOhB,CAAAA,CAAgBC,CAAAA,CAAK,CAC1B,IAAA,CAAAG,CAAAA,CACA,SAAkB,CAAE,GAAGhC,EAAkB,GAAI4C,CAAAA,CAAU,UAAY,EAAI,CAAA,CACvE,gBAAA,CAAkB,CAAE,GAAGX,EAAmB,GAAIW,CAAAA,CAAU,kBAAoB,EAAI,EAChF,eAAA,CAAkB,CAAE,GAAG3C,CAAAA,CAAmB,GAAI2C,EAAU,eAAA,EAAmB,EAAI,CACjF,CAAC,EAGIR,CACT,CURA,SAASS,CAAAA,CAAQhB,CAAAA,CAA6B,CAC5C,OAAO,SACLiB,CAAAA,CAAAA,GACGC,EACqB,CAExB,OACE,CAAC,KAAA,CAAM,OAAA,CAAQD,CAAe,CAAA,EAC9B,OAAOA,CAAAA,EAAoB,UAC3BA,CAAAA,GAAoB,IAAA,CAEblB,EAAgBC,CAAAA,CAAKiB,CAAkC,EAGzDlB,CAAAA,CACLC,CAAAA,CACAX,CAAAA,CAAe4B,CAAAA,CAAyCC,CAAK,CAC/D,CACF,CACF,CAMA,IAAMC,EAAAA,CAAY,CAEhB,MAAO,SAAA,CAAW,SAAA,CAAW,QAAS,QAAA,CAAU,QAAA,CAAU,OAAQ,KAAA,CAClE,QAAA,CAAU,aAAc,SAAA,CAAW,SAAA,CAEnC,KAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAE9B,GAAA,CAAK,OAAQ,QAAA,CAAU,IAAA,CAAM,IAAK,GAAA,CAAK,GAAA,CAAK,IAAK,OAAA,CAAS,MAAA,CAC1D,MAAA,CAAQ,MAAA,CAAQ,MAAA,CAAQ,KAAA,CAAO,OAAQ,KAAA,CAAO,MAAA,CAAQ,UACtD,YAAA,CAAc,GAAA,CAAK,MAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAExC,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAE9B,QAAS,OAAA,CAAS,OAAA,CAAS,QAAS,IAAA,CAAM,IAAA,CAAM,KAAM,SAAA,CACtD,UAAA,CAAY,MAEZ,KAAA,CAAO,SAAA,CAAW,QAAS,OAAA,CAAS,QAAA,CAAU,QAAS,QAAA,CACvD,KAAA,CAAO,MAAA,CAAQ,QAAA,CAAU,MAAA,CAAQ,MAAA,CAAQ,WAAY,SAAA,CACrD,GAAA,CAAK,OAAQ,KAAA,CAAO,QAAA,CAEpB,OAAQ,OAAA,CAAS,UAAA,CAAY,QAAA,CAAU,QAAA,CAAU,UAAA,CACjD,QAAA,CAAU,QAAS,UAAA,CAAY,QAAA,CAAU,SAAU,UAAA,CACnD,OAAA,CAAS,WAET,GAAA,CAAK,MAAA,CAAQ,KAAA,CAEb,QAAA,CAAU,OAAA,CAAS,QAAA,CAEnB,MAAO,IAAA,CAAM,IAAA,CAAM,MAEnB,QAAA,CAAU,MAAA,CAAQ,WAAY,MAChC,CAAA,CAEMC,CAAAA,CAAe,EAAC,CACtB,IAAA,IAAWpB,KAAOmB,EAAAA,CAChBC,CAAAA,CAAapB,CAAG,CAAA,CAAIgB,CAAAA,CAAQhB,CAAG,CAAA,CAKjC,IAAMqB,EAAAA,CAAa,SACjBC,CAAAA,CACuB,CACvB,OAAON,CAAAA,CAAQM,CAAS,CAC1B,CAAA,CAEaC,EAAAA,CAAe,OAAO,MAAA,CAAOF,EAAAA,CAAYD,CAAY,ECtI3D,SAASI,GACdvB,CAAAA,CAMA,CACA,GAAM,CACJ,IAAA,CAAAE,CAAAA,CAAO,EAAA,CACP,QAAA,CAAAhC,CAAAA,CAAW,EAAC,CACZ,gBAAA,CAAAiC,EAAmB,EAAC,CACpB,gBAAAhC,CAAAA,CAAkB,EACpB,CAAA,CAAI6B,CAAAA,CAEJ,OAAO,SAAUjC,CAAAA,CAA4B,CAC3C,IAAMQ,CAAAA,CAAS,CAAE,GAAIJ,CAAAA,CAAyB,GAAIJ,CAAAA,EAAS,EAAI,EAEzDyC,CAAAA,CAAkBvC,CAAAA,CAAgBC,EAAiBK,CAAM,CAAA,CACzDkC,EAAkBpC,CAAAA,CAAgB8B,CAAAA,CAAkB5B,CAAM,CAAA,CAEhE,OAAOoC,qBAAAA,CAAQT,EAAMM,CAAAA,CAAgBC,CAAAA,CAAiB1C,GAAO,SAAS,CACxE,CACF,CClBO,SAASyD,CAAAA,CACdlB,EACAmB,CAAAA,CAAqC,EAAA,CACS,CAC9C,IAAMvB,CAAAA,CAAO,OAAOuB,CAAAA,EAAe,QAAA,CAC/BA,EACCA,CAAAA,CAAW,IAAA,EAAQ,GAElBC,CAAAA,CAAc,OAAOD,CAAAA,EAAe,QAAA,CACrCA,CAAAA,CAAW,WAAA,EAAe,UAAUnB,CAAAA,CAAU,WAAA,EAAeA,EAAU,IAAA,EAAQ,WAAW,IAC3F,CAAA,OAAA,EAAUA,CAAAA,CAAU,WAAA,EAAeA,CAAAA,CAAU,IAAA,EAAQ,WAAW,IAE9DqB,CAAAA,CAAmBC,aAAAA,CACvB,CAAC7D,CAAAA,CAAO8D,CAAAA,GAAQ,CACd,IAAMC,CAAAA,CAAgC,EAAC,CACjCC,CAAAA,CAAiC,GAGvC,IAAA,IAAWhG,CAAAA,IAAOgC,EACZJ,CAAAA,CAAa,GAAA,CAAI5B,CAAG,CAAA,CACtB+F,CAAAA,CAAQ/F,CAAG,CAAA,CAAKgC,CAAAA,CAAchC,CAAG,CAAA,CAEjCgG,CAAAA,CAAUhG,CAAG,CAAA,CAAKgC,CAAAA,CAAchC,CAAG,CAAA,CAIvC,IAAMwE,CAAAA,CAAgBzC,CAAAA,CAAagE,CAAO,CAAA,CACpCpB,EAAgB1B,CAAAA,CAAmB8C,CAAO,EAE1CE,CAAAA,CAAkBrB,qBAAAA,CACtBT,EACAK,CAAAA,CACAG,CAAAA,CACA3C,CAAAA,CAAM,SACR,CAAA,CAEA,OAAOkE,oBAAM,aAAA,CAAc3B,CAAAA,CAAW,CACpC,GAAGyB,CAAAA,CACH,IAAAF,CAAAA,CACA,SAAA,CAAWG,CACb,CAAQ,CACV,CACF,EAEA,OAAAL,CAAAA,CAAiB,YAAcD,CAAAA,CAExBC,CACT,CAOO,SAASO,EAAAA,CACd5B,EACAJ,CAAAA,CAAO,EAAA,CACuC,CAC9C,OAAOsB,CAAAA,CAAOlB,EAAWJ,CAAI,CAC/B,CC/FO,SAASiC,CAAAA,CAAevD,CAAAA,CAA8B,CAC3D,GAAI,CAACA,EAAO,IAAA,EAAQ,OAAOA,EAAO,IAAA,EAAS,QAAA,CACzC,MAAM,IAAI,KAAA,CAAM,+DAA+D,CAAA,CAEjF,GAAI,CAACA,EAAO,KAAA,EAAS,OAAOA,EAAO,KAAA,EAAU,QAAA,CAC3C,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgCA,CAAAA,CAAO,IAAI,CAAA,4BAAA,CAA8B,EAE3FD,CAAAA,CAAUC,CAAM,EAClB,CCHA,IAAIwD,EAAU,KAAA,CAEP,SAASC,IAA2B,CACrCD,CAAAA,GACJA,EAAU,IAAA,CAOVD,CAAAA,CAAe,CACb,IAAA,CAAM,WAAA,CACN,MAAO,CACL,UAAA,CAAcjG,CAAAA,EAAKA,CAAAA,GAAM,IAAA,CAAO,4BAAA,CAA+B,GAC/D,YAAA,CAAcA,CAAAA,EAAKA,IAAM,IAAA,CAAO,+BAAA,CAAkC,GAClE,UAAA,CAAcA,CAAAA,EAAK,CAAA,YAAA,EAAeA,CAAC,CAAA,CACrC,CACF,CAAC,CAAA,CAKDiG,CAAAA,CAAe,CACb,IAAA,CAAM,MAAA,CACN,MAAO,CACL,QAAA,CAAUjG,CAAAA,EAAK,CAAA,UAAA,EAAaA,CAAC,CAAA,CAAA,CAC7B,SAAUA,CAAAA,EAAK,CAAA,UAAA,EAAaA,CAAC,CAAA,CAC/B,CACF,CAAC,CAAA,CAGDiG,CAAAA,CAAe,CACb,IAAA,CAAM,UAAA,CACN,MAAO,CACL,YAAA,CAAoBjG,GAAK,CAAA,cAAA,EAAiBA,CAAC,GAC3C,kBAAA,CAAoBA,CAAAA,EAAK,CAAA,oBAAA,EAAuBA,CAAC,CAAA,CAAA,CACjD,gBAAA,CAAoBA,GAAK,CAAA,kBAAA,EAAqBA,CAAC,GAC/C,gBAAA,CAAoBA,CAAAA,EAAK,qBAAqBA,CAAC,CAAA,CACjD,CACF,CAAC,CAAA,CAGDiG,CAAAA,CAAe,CACb,IAAA,CAAM,UAAA,CACN,MAAO,CACL,YAAA,CAAcjG,GAAK,CAAA,KAAA,EAAQA,CAAC,CAAA,CAAA,CAC5B,WAAA,CAAcA,CAAAA,EAAK,CAAA,IAAA,EAAOA,CAAC,CAAA,CAAA,CAC3B,UAAA,CAAcA,GAAK,CAAA,GAAA,EAAMA,CAAC,GAC1B,QAAA,CAAcA,CAAAA,EAAK,kBAAkBA,CAAC,CAAA,CACxC,CACF,CAAC,CAAA,CAGDiG,EAAe,CACb,IAAA,CAAM,SACN,KAAA,CAAO,CACL,YAAA,CAAcjG,CAAAA,EAAKA,CAAAA,GAAM,IAAA,CAAO,gBAAkB,EAAA,CAClD,UAAA,CAAcA,GAAKA,CAAAA,GAAM,IAAA,CAAO,cAAgB,EAAA,CAChD,SAAA,CAAcA,CAAAA,EAAK,CAAA,KAAA,EAAQA,CAAC,CAAA,CAAA,CAC5B,SAAcA,CAAAA,EAAK,CAAA,KAAA,EAAQA,CAAC,CAAA,CAC9B,CACF,CAAC,CAAA,CAGDiG,CAAAA,CAAe,CACb,IAAA,CAAM,OAAA,CACN,KAAA,CAAO,CACL,WAAA,CAAajG,CAAAA,EAAKA,IAAM,IAAA,CAAO,cAAA,CAAiB,GAChD,UAAA,CAAaA,CAAAA,EAAKA,CAAAA,GAAM,IAAA,CAAO,aAAA,CAAgB,EACjD,CACF,CAAC,CAAA,EACH,CC5DO,SAASoG,EAAAA,CACdtC,CAAAA,CACAjC,CAAAA,CACQ,CACR,GAAM,CACJ,IAAA,CAAAmC,EACA,QAAA,CAAAhC,CAAAA,CAAW,EAAC,CACZ,gBAAA,CAAAiC,CAAAA,CAAmB,EAAC,CACpB,eAAA,CAAAhC,EAAkB,EACpB,EAAI6B,CAAAA,CAIEuC,CAAAA,CAAc,CAAE,GAAGpE,CAAAA,CAAiB,GAAGJ,CAAM,CAAA,CAE7CyC,CAAAA,CAAkBvC,EAAgBC,CAAAA,CAAUqE,CAAAA,CAAapE,CAAe,CAAA,CACxEsC,CAAAA,CAAkBpC,EAAgB8B,CAAAA,CAAkBoC,CAAW,EAC/DhC,CAAAA,CAAkBzC,CAAAA,CAAaC,CAAK,CAAA,CACpC2C,CAAAA,CAAkB1B,EAAmBjB,CAAK,CAAA,CAEhD,OAAO4C,qBAAAA,CACLT,CAAAA,CACAM,CAAAA,CACAC,CAAAA,CACAF,CAAAA,CACAG,CAAAA,CACA3C,EAAM,SACR,CACF,CCpCO,SAASyE,EAAAA,EAAyB,CACvClG,CAAAA,CAAS,CAEP,MAAA,CAAQ,CAEN,OAAA,CAAa,UAAA,CACb,gBAAiB,UAAA,CACjB,eAAA,CAAiB,WAEjB,SAAA,CAAa,YAAA,CACb,kBAAmB,YAAA,CAGnB,OAAA,CAAa,aAAA,CACb,OAAA,CAAa,WAAA,CACb,MAAA,CAAa,UACb,IAAA,CAAa,SAAA,CAGb,WAAa,OAAA,CACb,UAAA,CAAa,WACb,OAAA,CAAa,UAAA,CACb,YAAa,UAAA,CACb,WAAA,CAAa,WAEb,KAAA,CAAa,UAAA,CACb,OAAa,UAAA,CACb,MAAA,CAAa,WACb,cAAA,CAAgB,UAAA,CAGhB,cAAA,CAAkB,SAAA,CAClB,gBAAA,CAAkB,UAAA,CAClB,aAAkB,UAAA,CAGlB,IAAA,CAAa,WACb,YAAA,CAAc,UAChB,EAGA,OAAA,CAAS,CACP,EAAA,CAAS,GAAA,CACT,EAAA,CAAS,GAAA,CACT,GAAS,GAAA,CACT,EAAA,CAAS,IACT,EAAA,CAAS,IAAA,CACT,MAAS,IAAA,CACT,KAAA,CAAS,IAAA,CACT,OAAA,CAAS,IAAA,CACT,IAAA,CAAS,IACX,CAAA,CAGA,MAAA,CAAQ,CACN,IAAA,CAAS,MAAA,CACT,GAAS,IAAA,CACT,EAAA,CAAS,KACT,EAAA,CAAS,IAAA,CACT,GAAS,IAAA,CACT,EAAA,CAAS,MACT,IAAA,CAAS,KAAA,CACT,OAAS,IAAA,CACT,KAAA,CAAS,MAAA,CACT,IAAA,CAAS,MAAA,CACT,KAAA,CAAS,IACX,CAAA,CAGA,MAAA,CAAQ,CACN,EAAA,CAAQ,IAAA,CACR,GAAQ,IAAA,CACR,EAAA,CAAQ,IAAA,CACR,EAAA,CAAQ,IAAA,CACR,EAAA,CAAQ,MACR,IAAA,CAAQ,IAAA,CACR,MAAQ,KAAA,CACR,IAAA,CAAQ,MACV,CAAA,CAGA,IAAA,CAAM,CACJ,IAAA,CAAO,MAAA,CACP,IAAA,CAAO,OACP,KAAA,CAAO,OACT,EAEA,QAAA,CAAU,CACR,QAAS,IAAA,CACT,KAAA,CAAS,KACT,IAAA,CAAS,MAAA,CACT,KAAS,IAAA,CACT,KAAA,CAAS,KACT,OAAA,CAAS,KAAA,CACT,QAAS,KACX,CAAA,CAGA,QAAA,CAAU,CACR,IAAA,CAAQ,KAAA,CACR,OAAQ,KAAA,CACR,IAAA,CAAQ,MACR,MAAA,CAAQ,KACV,EAGA,OAAA,CAAS,CACP,QAAA,CAAU,IAAA,CACV,KAAA,CAAU,IAAA,CACV,OAAU,IACZ,CACF,CAAC,EACH,CAMO,SAASmG,EAAAA,EAAsB,CACpCnG,CAAAA,CAAS,CACP,MAAA,CAAQ,CACN,QAAa,UAAA,CACb,SAAA,CAAa,aACb,MAAA,CAAa,UAAA,CACb,WAAa,UAAA,CACb,OAAA,CAAa,WACb,WAAA,CAAa,UAAA,CACb,WAAa,SAAA,CACb,KAAA,CAAa,WACb,MAAA,CAAa,UAAA,CACb,QAAa,aAAA,CACb,OAAA,CAAa,WAAA,CACb,MAAA,CAAa,SACf,CAAA,CACA,OAAQ,CACN,IAAA,CAAQ,KACR,MAAA,CAAQ,IAAA,CACR,MAAQ,MAAA,CACR,KAAA,CAAQ,IACV,CACF,CAAC,EACH,CC7IA,SAASoG,CAAAA,CAAK7G,CAAAA,CAAqB,CACjC,IAAI8G,CAAAA,CAAO,IAAA,CACX,QAASnD,CAAAA,CAAI,CAAA,CAAGA,EAAI3D,CAAAA,CAAI,MAAA,CAAQ2D,IAC9BmD,CAAAA,CAAAA,CAASA,CAAAA,EAAQ,GAAKA,CAAAA,CAAQ9G,CAAAA,CAAI,WAAW2D,CAAC,CAAA,CAC9CmD,EAAOA,CAAAA,GAAS,CAAA,CAElB,OAAOA,CACT,CAUO,SAASC,CAAAA,CAAUC,CAAAA,CAAuB,CAE/C,OAAO,KAAA,CADGH,CAAAA,CAAKG,CAAK,CAAA,CACH,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAE,QAAA,CAAS,EAAG,GAAG,CAC3D,CAKO,SAASC,EAAAA,CAAWD,EAAuB,CAChD,OAAOH,CAAAA,CAAKG,CAAK,CACnB,CASO,SAASE,EAAAA,CAAchD,CAAAA,CAAa9D,EAAyB,CAClE,IAAM0G,EAAOC,CAAAA,CAAU,CAAA,EAAG7C,CAAG,CAAA,CAAA,EAAI9D,CAAO,EAAE,CAAA,CAE1C,OAAO,KADQ8D,CAAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,CAAIA,CAAAA,CAAI,KAAA,CAAM,CAAC,CACtC,CAAA,CAAA,EAAI4C,CAAAA,CAAK,QAAQ,KAAA,CAAO,EAAE,CAAC,CAAA,CAC/C,CC9BA,IAAMK,CAAAA,CAAgB,IAAI,GAAA,CAAI,CAE5B,SAAA,CAAW,MAAA,CAAQ,SAAU,OAAA,CAAS,OAAA,CAAS,OAAQ,QAAA,CACvD,WAAA,CAAa,UAAA,CAAY,QAAA,CAAU,YAAA,CAEnC,MAAA,CAAQ,KAAM,MAChB,CAAC,EAMM,SAASpD,CAAAA,CAAkBC,EAAuB,CACvD,OAAIA,CAAAA,CAAK,UAAA,CAAW,GAAG,CAAA,CAAc,KACjC,EAAAmD,CAAAA,CAAc,IAAInD,CAAI,CAAA,EACtBlC,EAAa,GAAA,CAAIkC,CAAI,CAAA,CAE3B,CASO,SAASoD,EAAAA,CAAUpD,EAAoB,CAC5CmD,CAAAA,CAAc,IAAInD,CAAI,EACxB,CAKO,SAASqD,EAAAA,CAAUrD,CAAAA,CAAoB,CAC5CmD,CAAAA,CAAc,MAAA,CAAOnD,CAAI,CAAA,CACvBlC,CAAAA,CAA6B,OAAOkC,CAAI,EAC5C,CAYO,SAASsD,EAAAA,CAAcpD,CAAAA,CAAU9D,CAAAA,CAAU,EAAA,CAAS,CASzD,OARaoE,kBAAAA,CAAON,CAAG,EAAE,UAAA,CAAW,CAAE,kBAAAH,CAAkB,CAAC,CAS3D,CCjFO,SAASwD,EAAAA,CAAAA,GAAgBnH,CAAAA,CAAiC,CAC/D,OAAO0E,qBAAAA,CAAQ,GAAG1E,CAAAA,CAAQ,MAAA,CAAO,OAAO,CAAC,CAC3C,CCGO,SAASoH,CAAAA,CAAiBrF,CAAAA,CAAuB,CACtD,OAAO,KAAA,CAAM,IAAA,CACX,IAAI,GAAA,CACFA,CAAAA,CACG,MAAM,KAAK,CAAA,CACX,IAAIsF,CAAAA,EAAKA,CAAAA,CAAE,MAAM,CAAA,CACjB,MAAA,CAAO,OAAO,CACnB,CACF,CACF,CAQO,SAASC,GAAiBvF,CAAAA,CAAqB,CACpD,OAAOqF,CAAAA,CAAiBrF,CAAG,EAAE,IAAA,EAAK,CAAE,KAAK,GAAG,CAC9C,CASO,SAASwF,EAAAA,CAAexF,EAG7B,CACA,IAAM/B,CAAAA,CAAWoH,CAAAA,CAAiBrF,CAAG,CAAA,CAC/BkC,EAAsB,EAAC,CACvBuD,EAAsB,EAAC,CAE7B,QAAWH,CAAAA,IAAKrH,CAAAA,CACVqH,CAAAA,CAAE,QAAA,CAAS,GAAG,CAAA,CAAGG,EAAU,IAAA,CAAKH,CAAC,EAChCpD,CAAAA,CAAK,IAAA,CAAKoD,CAAC,CAAA,CAGlB,OAAO,CAAE,IAAA,CAAApD,CAAAA,CAAM,SAAA,CAAAuD,CAAU,CAC3B,CASO,SAASC,EAAAA,CAAa1F,CAAAA,CAAsB,CACjD,OAAO,6CAAA,CAA8C,KAAKA,CAAG,CAC/D,CAUO,SAAS2F,CAAAA,CAAY3F,EAA4B,CACtD,IAAM4F,EAAM5F,CAAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,CAC3B,OAAO4F,CAAAA,CAAM,GAAK5F,CAAAA,CAAI,KAAA,CAAM,EAAG4F,CAAG,CAAA,CAAI,IACxC,CASO,SAASC,CAAAA,CAAc7F,CAAAA,CAAqB,CACjD,IAAM4F,EAAM5F,CAAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,CAC3B,OAAO4F,EAAM,EAAA,CAAK5F,CAAAA,CAAI,KAAA,CAAM4F,CAAAA,CAAM,CAAC,CAAA,CAAI5F,CACzC,CASO,SAAS8F,GAAgB9F,CAAAA,CAAuC,CACrE,IAAM/B,CAAAA,CAAUoH,CAAAA,CAAiBrF,CAAG,CAAA,CAC9B+F,CAAAA,CAAmC,EAAC,CAE1C,IAAA,IAAWT,KAAKrH,CAAAA,CAAS,CACvB,IAAM+H,CAAAA,CAAML,CAAAA,CAAYL,CAAC,CAAA,EAAK,EAAA,CACxBpD,CAAAA,CAAO2D,EAAcP,CAAC,CAAA,CACvBS,EAAOC,CAAG,CAAA,GAAGD,EAAOC,CAAG,CAAA,CAAI,EAAC,CAAA,CACjCD,CAAAA,CAAOC,CAAG,EAAE,IAAA,CAAK9D,CAAI,EACvB,CAEA,OAAO6D,CACT,CCjFO,SAASE,CAAAA,CAAAA,GAAMC,CAAAA,CAA2B,CAC/C,IAAMC,EAAkB,EAAC,CACzB,OAAAC,CAAAA,CAAQF,CAAAA,CAAQC,CAAK,CAAA,CACdA,CAAAA,CAAM,KAAK,GAAG,CACvB,CAEA,SAASC,CAAAA,CAAQF,EAAmBG,CAAAA,CAAqB,CACvD,QAAWxB,CAAAA,IAASqB,CAAAA,CAClB,GAAKrB,CAAAA,CAEL,CAAA,GAAI,OAAOA,GAAU,QAAA,CAAU,CAC7BwB,EAAI,IAAA,CAAKxB,CAAK,EACd,QACF,CAEA,GAAI,OAAOA,CAAAA,EAAU,QAAA,CAAU,CAC7BwB,CAAAA,CAAI,IAAA,CAAK,OAAOxB,CAAK,CAAC,EACtB,QACF,CAEA,GAAI,KAAA,CAAM,OAAA,CAAQA,CAAK,EAAG,CACxBuB,CAAAA,CAAQvB,EAAOwB,CAAG,CAAA,CAClB,QACF,CAEA,GAAI,OAAOxB,CAAAA,EAAU,QAAA,CACnB,QAAW9G,CAAAA,IAAO8G,CAAAA,CACZA,EAAM9G,CAAG,CAAA,EAAGsI,EAAI,IAAA,CAAKtI,CAAG,EAAA,CAIpC,CAOO,SAASuI,EAAAA,CAAAA,GAAOJ,EAA2B,CAEhD,GAAI,CAEF,GAAM,CAAE,QAAAvD,CAAQ,CAAA,CAAI,EAAA,CAAQ,gBAAgB,CAAA,CAC5C,OAAOA,EAAQsD,CAAAA,CAAG,GAAGC,CAAM,CAAC,CAC9B,MAAQ,CACN,OAAOD,CAAAA,CAAG,GAAGC,CAAM,CACrB,CACF,CCxDA,IAuBMK,CAAAA,CAAgB,IAAI,GAAA,CAAI,CAAC,OAAQ,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,KAAK,CAAC,CAAA,CAE/DC,EAAAA,CAAsC7G,EAMrC,SAAS8G,EAAAA,CACd1G,CAAAA,CACA2G,EACkB,CACL,OAAO,CAAE,KAAA,CAAO,IAAA,CAAM,MAAA,CAAQ,EAAC,CAAG,QAAA,CAAU,EAAG,CAAA,CA4D9D,CAKO,SAASC,EAAAA,CACd5E,CAAAA,CACA7B,CAAAA,CAAmD,EAAC,CAClC,CAClB,OAAO,CAAE,GAAA,CAAA6B,CAAAA,CAAK,SAAA7B,CAAS,CACzB,CC/EO,SAAS0G,EAAAA,EAA6B,CAC3CzC,CAAAA,CAAe,CACb,IAAA,CAAM,YAAA,CACN,KAAA,CAAO,CAEL,KAAA,CAAQjG,CAAAA,EACFA,IAAM,IAAA,EAAQA,CAAAA,GAAM,MAAA,EAAUA,CAAAA,GAAM,EAAA,CAAY,OAAA,CAChD,OAAOA,CAAAA,EAAM,QAAA,CAAiB,CAAA,YAAA,EAAeA,CAAC,CAAA,CAAA,CAC3C,OAAA,CAIT,WAAaA,CAAAA,EAAW,CAAA,MAAA,EAASA,CAAC,CAAA,CAAA,CAGlC,SAAA,CAAYA,CAAAA,EAAWA,CAAAA,GAAM,IAAA,CAAO,mBAAA,CAAsB,EAAA,CAG1D,SAAA,CAAYA,CAAAA,EAAWA,CAAAA,GAAM,KAAA,CAAQ,aAAe,EAAA,CAGpD,YAAA,CAAeA,CAAAA,EAAW,CAAA,QAAA,EAAWA,CAAC,CAAA,CACxC,CACF,CAAC,EACH,CAoBO,SAAS2I,EAAAA,EAAwB,CACtC1C,CAAAA,CAAe,CACb,IAAA,CAAM,OAAA,CACN,KAAA,CAAO,CACL,SAAA,CAAejG,CAAAA,EAAWA,CAAAA,CAAI,YAAA,CAAe,EAAA,CAC7C,UAAA,CAAeA,CAAAA,EAAWA,CAAAA,CAAI,aAAA,CAAgB,EAAA,CAC9C,aAAeA,CAAAA,EAAWA,CAAAA,CAAI,eAAA,CAAkB,EAAA,CAChD,YAAA,CAAeA,CAAAA,EAAWA,EAAI,eAAA,CAAkB,EAAA,CAChD,SAAA,CAAeA,CAAAA,EAAWA,CAAAA,CAAI,YAAA,CAAe,GAC7C,SAAA,CAAeA,CAAAA,EAAWA,CAAAA,CAAI,YAAA,CAAe,EAAA,CAE7C,IAAA,CAAOA,CAAAA,EAAAA,CAC+B,CAClC,KAAA,CAAO,YAAA,CAAc,MAAA,CAAQ,aAAA,CAC7B,QAAA,CAAU,eAAA,CAAiB,SAAU,eAAA,CACrC,KAAA,CAAO,YAAA,CAAc,KAAA,CAAO,YAC9B,CAAA,EACWA,CAAC,CAAA,EAAK,CAAA,KAAA,EAAQA,CAAC,CAAA,CAE9B,CACF,CAAC,EACH,CAkBO,SAAS4I,EAAAA,EAAyB,CACvC3C,CAAAA,CAAe,CACb,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,CACL,WAAA,CAAcjG,CAAAA,EAAW,CACvB,IAAM6I,CAAAA,CAAkC,CACtC,KAAA,CAAQ,cAAA,CACR,MAAA,CAAQ,eAAA,CACR,IAAA,CAAQ,aAAA,CACR,KAAA,CAAQ,cAAA,CACR,KAAA,CAAQ,cAAA,CACR,KAAA,CAAQ,eACV,CAAA,CACA,OAAI,OAAO7I,CAAAA,EAAM,QAAA,CAEX,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAI,EAAA,CAAG,CAAC,CAAA,CAAI,GAAA,CAAa,cAAA,CAClC,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAI,CAAC,EAAO,GAAA,CAAa,eAAA,CAC/B,CAAA,QAAA,EAAWA,CAAC,CAAA,CAAA,CAAA,CAEd6I,CAAAA,CAAQ7I,CAAC,CAAA,EAAK,CAAA,OAAA,EAAUA,CAAC,CAAA,CAClC,CACF,CACF,CAAC,EACH,CAiBO,SAAS8I,EAAAA,EAAiC,CAC/C7C,CAAAA,CAAe,CACb,IAAA,CAAM,mBAAA,CACN,KAAA,CAAO,CACL,SAAA,CAAgBjG,CAAAA,EAAWA,CAAAA,GAAM,IAAA,CAAO,aAAe,CAAA,WAAA,EAAcA,CAAC,CAAA,CAAA,CACtE,aAAA,CAAgBA,CAAAA,EAAW,CAAA,WAAA,EAAcA,CAAC,CAAA,CAAA,CAC1C,EAAA,CAAgBA,CAAAA,EAAWA,CAAAA,CAAI,CAAA,CAAA,EAAIA,CAAC,SAAW,EACjD,CACF,CAAC,EACH,CAgBO,SAAS+I,EAAAA,EAA4B,CAC1C9C,CAAAA,CAAe,CACb,IAAA,CAAM,eAAA,CACN,KAAA,CAAO,CAEL,UAAYjG,CAAAA,EAAAA,CAC0B,CAClC,IAAA,CAAe,oBAAA,CACf,SAAA,CAAe,2CAAA,CACf,WAAA,CAAe,wCAAA,CACf,WAAA,CAAe,0CAAA,CACf,YAAA,CAAe,yCAAA,CACf,IAAA,CAAe,uBAAA,CACf,WAAe,mCAAA,CACf,YAAA,CAAe,gCAAA,CACf,SAAA,CAAe,wBACjB,CAAA,EACWA,CAAC,CAAA,EAAK,CAAA,WAAA,EAAcA,CAAC,CAAA,CAAA,CAIlC,QAAA,CAAWA,CAAAA,EAAAA,CAC2B,CAClC,KAAc,sBAAA,CACd,SAAA,CAAc,yCAAA,CACd,WAAA,CAAc,4CAAA,CACd,IAAA,CAAc,yBAAA,CACd,UAAA,CAAc,gCAAA,CACd,YAAA,CAAc,mCAChB,CAAA,EACWA,CAAC,CAAA,EAAK,eAAeA,CAAC,CAAA,CAAA,CAInC,QAAA,CAAeA,CAAAA,EAAW,CAAA,UAAA,EAAaA,CAAC,CAAA,CAAA,CACxC,YAAA,CAAeA,CAAAA,EAAW,CAAA,SAAA,EAAYA,CAAC,CAAA,CAAA,CACvC,SAAA,CAAeA,CAAAA,EAAW,SAASA,CAAC,CAAA,CAAA,CACpC,UAAA,CAAeA,CAAAA,EAAWA,CAAAA,GAAM,UAAA,CAAa,iBAAA,CAAoB,CAAA,OAAA,EAAUA,CAAC,CAAA,CAAA,CAC5E,aAAA,CAAeA,CAAAA,EAAW,CAAA,UAAA,EAAaA,CAAC,EAC1C,CACF,CAAC,EACH,CAiBO,SAASgJ,EAAAA,EAAgC,CAC9C/C,CAAAA,CAAe,CACb,IAAA,CAAM,eAAA,CACN,KAAA,CAAO,CACL,OAAA,CAAcjG,GAAW,CAAA,SAAA,EAAYoB,CAAAA,CAAa,MAAA,CAAOpB,CAAC,CAAC,CAAC,GAC5D,SAAA,CAAcA,CAAAA,EAAW,CAAA,WAAA,EAAcoB,CAAAA,CAAa,MAAA,CAAOpB,CAAC,CAAC,CAAC,CAAA,CAAA,CAC9D,WAAA,CAAcA,CAAAA,EAAW,CAAA,aAAA,EAAgBoB,CAAAA,CAAa,MAAA,CAAOpB,CAAC,CAAC,CAAC,CAAA,CAAA,CAChE,WAAA,CAAcA,CAAAA,EAAW,CAAA,aAAA,EAAgBA,CAAC,CAAA,CAAA,CAC1C,YAAA,CAAcA,CAAAA,EAAW,CAAA,cAAA,EAAiBA,CAAC,CAAA,CAAA,CAC3C,UAAA,CAAcA,CAAAA,EAAWA,CAAAA,GAAM,IAAA,CAAO,iBAAA,CAAoB,CAAA,YAAA,EAAeA,CAAC,CAAA,CAAA,CAE1E,UAAYA,CAAAA,EAAWA,CAAAA,GAAM,IAAA,CACzB,yGAAA,CACA,CAAA,mEAAA,EAAsEA,CAAC,CAAA,4BAAA,CAAA,CAC3E,OAAA,CAAYA,CAAAA,EAAW,CAAA,SAAA,EAAYA,CAAC,CAAA,CAAA,CAEpC,WAAA,CAAeA,CAAAA,EAAWA,IAAM,IAAA,CAAO,iBAAA,CAAoB,CAAA,aAAA,EAAgBA,CAAC,CAAA,CAAA,CAC5E,QAAA,CAAeA,CAAAA,EAAW,CAAA,UAAA,EAAaA,CAAC,CAAA,CAAA,CACxC,aAAA,CAAeA,CAAAA,EAAW,CAAA,eAAA,EAAkBA,CAAC,GAE7C,YAAA,CAAiBA,CAAAA,EAAW,CAAA,eAAA,EAAkBoB,CAAAA,CAAa,MAAA,CAAOpB,CAAC,CAAC,CAAC,CAAA,CAAA,CACrE,cAAA,CAAiBA,CAAAA,EAAW,CAAA,iBAAA,EAAoBA,CAAC,CAAA,CAAA,CACjD,gBAAiBA,CAAAA,EAAW,CAAA,kBAAA,EAAqBA,CAAC,CAAA,CAAA,CAClD,aAAA,CAAiBA,CAAAA,EAAW,CAAA,gBAAA,EAAmBA,CAAC,CAAA,CAClD,CACF,CAAC,EACH,CAaO,SAASiJ,IAAyB,CACvCP,EAAAA,EAAqB,CACrBC,EAAAA,EAAgB,CAChBC,EAAAA,EAAiB,CACjBE,EAAAA,EAAyB,CACzBC,EAAAA,EAAoB,CACpBC,EAAAA,GACF","file":"index.js","sourcesContent":["/**\n * tailwind-styled-v4 — createComponent (PRO Engine)\n *\n * Core factory that wires together:\n * - styled-components (theming, SSR, SC ecosystem)\n * - propEngine (inline prop → class)\n * - variantEngine (CVA-style variants)\n * - compoundVariant engine\n * - pluginEngine (extensible via registerPlugin)\n * - tailwind-merge (conflict-free class resolution)\n * - shouldForwardProp (no tw props leaking to DOM)\n *\n * Supports two call signatures:\n * createComponent(\"div\", \"p-4 bg-zinc-900\")\n * createComponent(\"button\", { base, variants, compoundVariants, defaultVariants })\n *\n * Returns a component with .extend() for chaining.\n */\n\nimport styled from \"styled-components\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { resolveProps, TW_PROP_KEYS } from \"../runtime/propEngine\"\nimport { resolveVariants } from \"../runtime/variantEngine\"\nimport { resolveCompound } from \"../runtime/compoundVariant\"\nimport { resolvePluginProps } from \"../plugins/pluginEngine\"\nimport { templateParser } from \"./templateParser\"\nimport type { ComponentConfig } from \"../types/component\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// shouldForwardProp — keep tw-specific props out of the DOM\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Extra non-tw props that must also be filtered */\nconst EXTRA_FILTER = new Set([\n \"variant\", \"size\", \"intent\", \"color\", \"shape\", \"tone\",\n])\n\nfunction shouldForwardProp(prop: string): boolean {\n if (EXTRA_FILTER.has(prop)) return false\n if (TW_PROP_KEYS.has(prop)) return false\n return true\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// createComponent\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function createComponent(\n tag: any,\n config: string | ComponentConfig\n): any {\n const isString = typeof config === \"string\"\n\n const base = isString ? (config as string) : (config.base ?? \"\")\n const variants = isString ? {} : (config.variants ?? {})\n const compoundVariants = isString ? [] : (config.compoundVariants ?? [])\n const defaultVariants = isString ? {} : (config.defaultVariants ?? {})\n\n // ── styled-components shell with shouldForwardProp ──────────────────────\n const BaseStyled = styled(tag).withConfig({\n shouldForwardProp,\n })<any>``\n\n // ── attrs() to merge all tw classes into className ───────────────────────\n const Component = styled(BaseStyled).attrs(\n (props: Record<string, any>) => {\n const propClasses = resolveProps(props)\n const variantClasses = resolveVariants(variants, props, defaultVariants)\n const compoundClasses = resolveCompound(compoundVariants, props)\n const pluginClasses = resolvePluginProps(props)\n\n return {\n className: twMerge(\n base,\n variantClasses,\n compoundClasses,\n propClasses,\n pluginClasses,\n props.className\n ),\n }\n }\n )``\n\n // ── .extend() — chain extra classes onto a component ────────────────────\n ;(Component as any).extend = (\n strings: TemplateStringsArray,\n ...expr: any[]\n ) => {\n const extra = templateParser(strings, expr)\n return createComponent(Component, {\n // Carry over existing config (non-string branch)\n ...(isString ? {} : (config as ComponentConfig)),\n base: twMerge(base, extra),\n })\n }\n\n // ── .withVariants() — attach/merge new variants without re-typing ────────\n ;(Component as any).withVariants = (\n newConfig: Pick<ComponentConfig, \"variants\" | \"compoundVariants\" | \"defaultVariants\">\n ) => {\n return createComponent(tag, {\n base,\n variants: { ...variants, ...(newConfig.variants ?? {}) },\n compoundVariants: [ ...compoundVariants, ...(newConfig.compoundVariants ?? []) ],\n defaultVariants: { ...defaultVariants, ...(newConfig.defaultVariants ?? {}) },\n })\n }\n\n return Component\n}\n","/**\n * Check if value is a plain object\n */\nexport function isObject(value: any): value is Record<string, any> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n}","/**\n * tailwind-styled-v4 — Responsive Engine\n *\n * Converts a value or responsive object into Tailwind prefix classes.\n * Optionally resolves design token aliases before interpolation.\n *\n * @example\n * resolveResponsive(\"p\", 4) → \"p-4\"\n * resolveResponsive(\"p\", { sm:2, lg:8 }) → \"sm:p-2 lg:p-8\"\n * resolveResponsive(\"p\", { base:1, md:4 })→ \"p-1 md:p-4\"\n *\n * // With token resolver:\n * resolveResponsive(\"bg\", \"brand\", resolveColor) → \"bg-blue-600\"\n * resolveResponsive(\"bg\", { base:\"brand\", md:\"primary\" }, resolveColor)\n * → \"bg-blue-600 md:bg-blue-600\"\n */\n\nimport { isObject } from \"../utils/isObject\"\n\nconst SCREENS = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"] as const\ntype Screen = (typeof SCREENS)[number]\n\ntype ResponsiveValue<T = string | number> =\n | T\n | ({ base?: T } & Partial<Record<Screen, T>>)\n\n/**\n * Normalise a raw prop value to a string, then run it through an\n * optional token resolver (e.g. resolveColor, resolveRadius).\n */\nfunction applyToken(raw: any, tokenFn?: (v: string) => string): string {\n const str = String(raw)\n return tokenFn ? tokenFn(str) : str\n}\n\nexport function resolveResponsive(\n key: string,\n value: ResponsiveValue,\n /** Optional design-token resolver — called on every scalar value */\n tokenResolver?: (v: string) => string\n): string {\n if (!isObject(value)) {\n return `${key}-${applyToken(value, tokenResolver)}`\n }\n\n const classes: string[] = []\n const v = value as Record<string, any>\n\n // base (no screen prefix)\n if (v.base !== undefined) {\n classes.push(`${key}-${applyToken(v.base, tokenResolver)}`)\n }\n\n for (const screen of SCREENS) {\n if (v[screen] !== undefined) {\n classes.push(`${screen}:${key}-${applyToken(v[screen], tokenResolver)}`)\n }\n }\n\n return classes.join(\" \")\n}\n","/**\n * tailwind-styled-v4 — Theme Store\n *\n * Global theme store that bridges tw token aliases to actual Tailwind classes.\n * Supports deep merging, change subscriptions, and SSR-safe usage.\n *\n * @example\n * setTheme({\n * colors: { brand: \"blue-600\", muted: \"zinc-500\" },\n * radius: { button: \"lg\", card: \"2xl\" },\n * spacing: { section: \"16\", page: \"24\" }\n * })\n *\n * // In propEngine, bg=\"brand\" → resolves to bg-blue-600\n */\n\nexport interface TailwindTheme {\n colors?: Record<string, string>\n spacing?: Record<string, string>\n radius?: Record<string, string>\n shadow?: Record<string, string>\n font?: Record<string, string>\n fontSize?: Record<string, string>\n opacity?: Record<string, string>\n duration?: Record<string, string>\n /** Arbitrary custom token namespace */\n [key: string]: Record<string, string> | undefined\n}\n\nexport type ThemeListener = (theme: TailwindTheme) => void\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────────────────────────────────────\n\nlet currentTheme: TailwindTheme = {}\nconst listeners: Set<ThemeListener> = new Set()\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Core API\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Merge new theme tokens into the global theme.\n * Notifies all subscribers after update.\n */\nexport function setTheme(newTheme: TailwindTheme): void {\n // Deep merge per namespace\n for (const namespace in newTheme) {\n const incoming = newTheme[namespace]\n if (!incoming) continue\n\n currentTheme[namespace] = {\n ...(currentTheme[namespace] ?? {}),\n ...incoming,\n }\n }\n\n listeners.forEach(fn => fn(currentTheme))\n}\n\n/**\n * Replace the entire theme (non-merging).\n */\nexport function replaceTheme(theme: TailwindTheme): void {\n currentTheme = { ...theme }\n listeners.forEach(fn => fn(currentTheme))\n}\n\n/**\n * Get current theme state (shallow copy to prevent mutation).\n */\nexport function getTheme(): TailwindTheme {\n return { ...currentTheme }\n}\n\n/**\n * Get a specific namespace from the theme.\n */\nexport function getThemeNamespace(\n namespace: keyof TailwindTheme\n): Record<string, string> {\n return { ...(currentTheme[namespace] ?? {}) }\n}\n\n/**\n * Reset theme to empty state. Useful in tests.\n */\nexport function resetTheme(): void {\n currentTheme = {}\n listeners.forEach(fn => fn(currentTheme))\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Subscription API\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Subscribe to theme changes.\n * Returns an unsubscribe function.\n *\n * @example\n * const unsub = onThemeChange(theme => {\n * console.log(\"Theme changed:\", theme)\n * })\n * unsub() // cleanup\n */\nexport function onThemeChange(listener: ThemeListener): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Token access helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Resolve a token alias to its theme value.\n * Returns the original value unchanged if no token matches.\n *\n * @example\n * // theme.colors = { brand: \"blue-600\" }\n * resolveThemeToken(\"colors\", \"brand\") → \"blue-600\"\n * resolveThemeToken(\"colors\", \"zinc-500\") → \"zinc-500\" (passthrough)\n */\nexport function resolveThemeToken(\n namespace: string,\n value: string\n): string {\n const ns = currentTheme[namespace]\n if (!ns) return value\n return ns[value] ?? value\n}\n\n/**\n * Check if a value is a registered theme token.\n */\nexport function isThemeToken(namespace: string, value: string): boolean {\n return !!(currentTheme[namespace]?.[value])\n}\n","/**\n * tailwind-styled-v4 — Token Resolver\n *\n * Resolves design token aliases → Tailwind class segments.\n * Used by propEngine to support semantic color names, spacing aliases, etc.\n *\n * @example\n * // theme: { colors: { brand: \"blue-600\", danger: \"red-500\" } }\n * resolveToken(\"colors\", \"brand\") → \"blue-600\"\n * resolveToken(\"colors\", \"danger\") → \"red-500\"\n * resolveToken(\"colors\", \"zinc-900\") → \"zinc-900\" (passthrough)\n *\n * resolveToken(\"radius\", \"card\") → \"2xl\" (if themed)\n * resolveToken(\"radius\", \"md\") → \"md\" (passthrough)\n */\n\nimport { resolveThemeToken } from \"./themeStore\"\n\nexport type TokenNamespace =\n | \"colors\"\n | \"spacing\"\n | \"radius\"\n | \"shadow\"\n | \"font\"\n | \"fontSize\"\n | \"opacity\"\n | \"duration\"\n | (string & {})\n\n/**\n * Resolve a value through the token system.\n * Multi-level: first checks theme tokens, then returns raw value.\n */\nexport function resolveToken(namespace: TokenNamespace, value: string): string {\n return resolveThemeToken(namespace, value)\n}\n\n/**\n * Resolve a color token → Tailwind color class segment.\n * Supports:\n * \"brand\" → theme.colors.brand → \"blue-600\"\n * \"blue-600\" → passthrough\n * \"white\"/\"black\" → passthrough\n *\n * @example\n * resolveColor(\"brand\") → \"blue-600\"\n * resolveColor(\"zinc-500\") → \"zinc-500\"\n */\nexport function resolveColor(value: string): string {\n return resolveToken(\"colors\", value)\n}\n\n/**\n * Resolve a spacing token.\n *\n * @example\n * resolveSpacing(\"section\") → \"16\" (if theme.spacing.section = \"16\")\n * resolveSpacing(\"4\") → \"4\" (passthrough)\n */\nexport function resolveSpacing(value: string | number): string {\n if (typeof value === \"number\") return String(value)\n return resolveToken(\"spacing\", value)\n}\n\n/**\n * Resolve a border-radius token.\n *\n * @example\n * resolveRadius(\"card\") → \"2xl\" (if themed)\n * resolveRadius(\"lg\") → \"lg\" (passthrough)\n */\nexport function resolveRadius(value: string): string {\n return resolveToken(\"radius\", value)\n}\n\n/**\n * Resolve multiple tokens at once.\n * Returns a Record of resolved values.\n *\n * @example\n * resolveTokens(\"colors\", [\"brand\", \"muted\", \"zinc-900\"])\n * → { brand: \"blue-600\", muted: \"zinc-500\", \"zinc-900\": \"zinc-900\" }\n */\nexport function resolveTokens(\n namespace: TokenNamespace,\n values: string[]\n): Record<string, string> {\n const result: Record<string, string> = {}\n for (const v of values) {\n result[v] = resolveToken(namespace, v)\n }\n return result\n}\n","/**\n * tailwind-styled-v4 — PRO Prop Engine\n *\n * Converts React props → Tailwind class strings.\n * Supports responsive objects: p={{ sm: 2, md: 4, lg: 8 }}\n * Supports theme tokens: bg=\"brand\" → bg-blue-600\n */\n\nimport { resolveResponsive } from \"./responsiveEngine\"\nimport {\n resolveColor,\n resolveSpacing,\n resolveRadius,\n resolveToken,\n} from \"../theme/tokenResolver\"\n\ntype PropResolver = (value: any) => string\n\nconst propMap: Record<string, PropResolver> = {\n\n // ── Padding ───────────────────────────────────────────\n // Spacing tokens: p=\"section\" → p-16 (if theme.spacing.section = \"16\")\n p: v => resolveResponsive(\"p\", v, resolveSpacing),\n px: v => resolveResponsive(\"px\", v, resolveSpacing),\n py: v => resolveResponsive(\"py\", v, resolveSpacing),\n pt: v => resolveResponsive(\"pt\", v, resolveSpacing),\n pb: v => resolveResponsive(\"pb\", v, resolveSpacing),\n pl: v => resolveResponsive(\"pl\", v, resolveSpacing),\n pr: v => resolveResponsive(\"pr\", v, resolveSpacing),\n\n // ── Margin ────────────────────────────────────────────\n m: v => resolveResponsive(\"m\", v, resolveSpacing),\n mx: v => resolveResponsive(\"mx\", v, resolveSpacing),\n my: v => resolveResponsive(\"my\", v, resolveSpacing),\n mt: v => resolveResponsive(\"mt\", v, resolveSpacing),\n mb: v => resolveResponsive(\"mb\", v, resolveSpacing),\n ml: v => resolveResponsive(\"ml\", v, resolveSpacing),\n mr: v => resolveResponsive(\"mr\", v, resolveSpacing),\n\n // ── Gap / Space ───────────────────────────────────────\n gap: v => resolveResponsive(\"gap\", v, resolveSpacing),\n gapX: v => resolveResponsive(\"gap-x\", v, resolveSpacing),\n gapY: v => resolveResponsive(\"gap-y\", v, resolveSpacing),\n spaceX: v => resolveResponsive(\"space-x\", v, resolveSpacing),\n spaceY: v => resolveResponsive(\"space-y\", v, resolveSpacing),\n\n // ── Sizing ────────────────────────────────────────────\n // No token namespace for sizing — passthrough\n w: v => resolveResponsive(\"w\", v),\n h: v => resolveResponsive(\"h\", v),\n size: v => resolveResponsive(\"size\", v),\n minW: v => resolveResponsive(\"min-w\", v),\n maxW: v => resolveResponsive(\"max-w\", v),\n minH: v => resolveResponsive(\"min-h\", v),\n maxH: v => resolveResponsive(\"max-h\", v),\n\n // ── Colors ────────────────────────────────────────────\n // Color tokens: bg=\"brand\" → bg-blue-600\n bg: v => resolveResponsive(\"bg\", v, resolveColor),\n text: v => resolveResponsive(\"text\", v, resolveColor),\n border: v => v === true ? \"border\" : resolveResponsive(\"border\", v, resolveColor),\n ring: v => v === true ? \"ring\" : resolveResponsive(\"ring\", v, resolveColor),\n ringColor: v => resolveResponsive(\"ring\", v, resolveColor),\n fill: v => resolveResponsive(\"fill\", v, resolveColor),\n stroke: v => resolveResponsive(\"stroke\", v, resolveColor),\n accent: v => resolveResponsive(\"accent\", v, resolveColor),\n caret: v => resolveResponsive(\"caret\", v, resolveColor),\n divide: v => resolveResponsive(\"divide\", v, resolveColor),\n\n // ── Typography ────────────────────────────────────────\n // fontSize tokens: fontSize=\"heading\" → text-2xl\n font: v => resolveResponsive(\"font\", v, s => resolveToken(\"font\", s)),\n fontSize: v => resolveResponsive(\"text\", v, s => resolveToken(\"fontSize\", s)),\n leading: v => resolveResponsive(\"leading\", v),\n tracking: v => resolveResponsive(\"tracking\", v),\n align: v => `text-${v}`,\n whitespace: v => `whitespace-${v}`,\n truncate: v => v === true ? \"truncate\" : \"\",\n lineClamp: v => `line-clamp-${v}`,\n\n // ── Flexbox ───────────────────────────────────────────\n flex: v => v === true ? \"flex\" : v === false ? \"\" : resolveResponsive(\"flex\", v),\n flexDir: v => `flex-${v}`,\n flexRow: v => v === true ? \"flex-row\" : \"flex-col\",\n flexCol: v => v === true ? \"flex-col\" : \"flex-row\",\n items: v => resolveResponsive(\"items\", v),\n justify: v => resolveResponsive(\"justify\", v),\n content: v => resolveResponsive(\"content\", v),\n wrap: v => v === true ? \"flex-wrap\" : v === false ? \"flex-nowrap\" : `flex-${v}`,\n grow: v => v === true ? \"grow\" : v === false ? \"grow-0\" : `grow-${v}`,\n shrink: v => v === true ? \"shrink\" : v === false ? \"shrink-0\" : `shrink-${v}`,\n basis: v => resolveResponsive(\"basis\", v),\n self: v => resolveResponsive(\"self\", v),\n place: v => resolveResponsive(\"place-items\", v),\n\n // ── Grid ──────────────────────────────────────────────\n cols: v => resolveResponsive(\"grid-cols\", v),\n rows: v => resolveResponsive(\"grid-rows\", v),\n colSpan: v => resolveResponsive(\"col-span\", v),\n rowSpan: v => resolveResponsive(\"row-span\", v),\n colStart: v => `col-start-${v}`,\n colEnd: v => `col-end-${v}`,\n rowStart: v => `row-start-${v}`,\n rowEnd: v => `row-end-${v}`,\n\n // ── Layout ────────────────────────────────────────────\n display: v => `${v}`,\n overflow: v => resolveResponsive(\"overflow\", v),\n overflowX: v => `overflow-x-${v}`,\n overflowY: v => `overflow-y-${v}`,\n pos: v => `${v}`,\n position: v => `${v}`,\n z: v => resolveResponsive(\"z\", v),\n top: v => resolveResponsive(\"top\", v),\n right: v => resolveResponsive(\"right\", v),\n bottom: v => resolveResponsive(\"bottom\", v),\n left: v => resolveResponsive(\"left\", v),\n inset: v => resolveResponsive(\"inset\", v),\n insetX: v => resolveResponsive(\"inset-x\", v),\n insetY: v => resolveResponsive(\"inset-y\", v),\n\n // ── Border & Radius ───────────────────────────────────\n // Radius tokens: rounded=\"card\" → rounded-2xl\n rounded: v => v === true ? \"rounded\" : resolveResponsive(\"rounded\", v, resolveRadius),\n roundedT: v => resolveResponsive(\"rounded-t\", v, resolveRadius),\n roundedB: v => resolveResponsive(\"rounded-b\", v, resolveRadius),\n roundedL: v => resolveResponsive(\"rounded-l\", v, resolveRadius),\n roundedR: v => resolveResponsive(\"rounded-r\", v, resolveRadius),\n borderWidth: v => resolveResponsive(\"border\", v),\n borderStyle: v => `border-${v}`,\n outline: v => v === \"none\" ? \"outline-none\" : `outline-${v}`,\n outlineColor: v => `outline-${v}`,\n\n // ── Visual Effects ────────────────────────────────────\n // Opacity tokens: opacity=\"disabled\" → opacity-50\n opacity: v => resolveResponsive(\"opacity\", v, s => resolveToken(\"opacity\", s)),\n // Shadow tokens: shadow=\"card\" → shadow-xl\n shadow: v => v === true ? \"shadow\" : resolveResponsive(\"shadow\", v, s => resolveToken(\"shadow\", s)),\n shadowColor: v => `shadow-${resolveColor(String(v))}`,\n blur: v => v === true ? \"blur\" : resolveResponsive(\"blur\", v),\n brightness: v => resolveResponsive(\"brightness\", v),\n contrast: v => resolveResponsive(\"contrast\", v),\n saturate: v => resolveResponsive(\"saturate\", v),\n grayscale: v => v === true ? \"grayscale\" : \"\",\n invert: v => v === true ? \"invert\" : \"\",\n backdrop: v => resolveResponsive(\"backdrop-blur\", v),\n\n // ── Transition & Animation ────────────────────────────\n // Duration tokens: duration=\"fast\" → duration-150\n transition: v => v === true ? \"transition\" : `transition-${v}`,\n duration: v => resolveResponsive(\"duration\", v, s => resolveToken(\"duration\", s)),\n ease: v => `ease-${v}`,\n delay: v => resolveResponsive(\"delay\", v),\n animate: v => `animate-${v}`,\n\n // ── Interaction ───────────────────────────────────────\n cursor: v => `cursor-${v}`,\n select: v => `select-${v}`,\n pointer: v => v === true ? \"pointer-events-auto\" : \"pointer-events-none\",\n touch: v => `touch-${v}`,\n\n // ── Accessibility ─────────────────────────────────────\n sr: v => v === true ? \"sr-only\" : \"not-sr-only\",\n hidden: v => v === true ? \"hidden\" : \"\",\n visible: v => v === true ? \"visible\" : \"invisible\",\n\n // ── Misc ─────────────────────────────────────────────\n aspect: v => `aspect-${v}`,\n object: v => `object-${v}`,\n scroll: v => `scroll-${v}`,\n container: v => v === true ? \"container\" : \"\",\n}\n\n// All tw prop keys — used by shouldForwardProp to avoid leaking to DOM\nexport const TW_PROP_KEYS: ReadonlySet<string> = new Set(Object.keys(propMap))\n\n/**\n * Extend the prop map at runtime (for plugins)\n */\nexport function registerProp(key: string, resolver: PropResolver): void {\n (propMap as Record<string, PropResolver>)[key] = resolver\n ;(TW_PROP_KEYS as Set<string>).add(key)\n}\n\n/**\n * Resolve all tw props from a component props object → class string\n */\nexport function resolveProps(props: Record<string, any>): string {\n const classes: string[] = []\n\n for (const key in props) {\n const resolver = propMap[key]\n if (!resolver) continue\n\n const value = props[key]\n if (value === undefined || value === null || value === false) continue\n\n const cls = resolver(value)\n if (cls) classes.push(cls)\n }\n\n return classes.join(\" \").trim()\n}","/**\n * tailwind-styled-v4 — Variant Engine\n *\n * Resolves variant props → Tailwind classes.\n * Supports defaultVariants and boolean variants.\n *\n * @example\n * const variants = {\n * variant: { primary: \"bg-blue-500\", ghost: \"bg-transparent\" },\n * size: { sm: \"h-8 px-3\", lg: \"h-12 px-6\" }\n * }\n * resolveVariants(variants, { variant:\"primary\", size:\"lg\" }, { size:\"sm\" })\n * → \"bg-blue-500 h-12 px-6\"\n */\n\nimport type { VariantMap } from \"../types/variants\"\n\nexport function resolveVariants(\n variants: VariantMap,\n props: Record<string, any>,\n defaultVariants?: Record<string, string>\n): string {\n if (!variants) return \"\"\n\n const classes: string[] = []\n\n for (const key in variants) {\n // Prop value takes priority over defaultVariant\n const value = props[key] ?? defaultVariants?.[key]\n if (value === undefined || value === null) continue\n\n const variantMap = variants[key]\n const style = variantMap[String(value)]\n\n if (style) classes.push(style)\n }\n\n return classes.join(\" \").trim()\n}\n","/**\n * tailwind-styled-v4 — Compound Variant Engine\n *\n * Applies extra classes when multiple variant conditions are met simultaneously.\n *\n * @example\n * compoundVariants: [\n * { variant: \"primary\", size: \"lg\", class: \"shadow-lg shadow-blue-500/40\" },\n * { variant: \"ghost\", size: \"sm\", class: \"opacity-70\" }\n * ]\n */\n\nimport type { CompoundVariant } from \"../types/variants\"\n\nexport function resolveCompound(\n compounds: CompoundVariant[],\n props: Record<string, any>,\n defaultVariants?: Record<string, any>\n): string {\n if (!compounds || compounds.length === 0) return \"\"\n\n const classes: string[] = []\n // Merge defaultVariants so compound conditions fire correctly\n // even when the user doesn't pass explicit variant props.\n const merged = defaultVariants ? { ...defaultVariants, ...props } : props\n\n for (const compound of compounds) {\n let match = true\n\n for (const key in compound) {\n // \"class\" and \"className\" are output keys, not condition keys\n if (key === \"class\" || key === \"className\") continue\n\n if (merged[key] !== compound[key]) {\n match = false\n break\n }\n }\n\n if (match) {\n const cls = compound.class ?? compound.className\n if (cls) classes.push(cls)\n }\n }\n\n return classes.join(\" \").trim()\n}\n","/**\n * tailwind-styled-v4 — Plugin Engine\n *\n * Allows extending the prop system with custom prop resolvers.\n *\n * @example\n * registerPlugin({\n * name: \"motion\",\n * props: {\n * animate: v => `animate-${v}`,\n * motion: v => `motion-${v}`,\n * }\n * })\n */\n\ntype PluginResolver = (value: any) => string\n\nexport type TailwindPlugin = {\n name: string\n props: Record<string, PluginResolver>\n /** Optional: called once when plugin registers */\n onRegister?: () => void\n}\n\nconst plugins: Map<string, TailwindPlugin> = new Map()\n\nexport function addPlugin(plugin: TailwindPlugin): void {\n if (plugins.has(plugin.name)) {\n console.warn(`[tailwind-styled-v4] Plugin \"${plugin.name}\" already registered — overwriting`)\n }\n plugins.set(plugin.name, plugin)\n plugin.onRegister?.()\n}\n\nexport function getPlugin(name: string): TailwindPlugin | undefined {\n return plugins.get(name)\n}\n\nexport function listPlugins(): string[] {\n return Array.from(plugins.keys())\n}\n\nexport function resolvePluginProps(props: Record<string, any>): string {\n const classes: string[] = []\n\n for (const plugin of plugins.values()) {\n for (const key in plugin.props) {\n if (props[key] !== undefined) {\n const cls = plugin.props[key](props[key])\n if (cls) classes.push(cls)\n }\n }\n }\n\n return classes.join(\" \").trim()\n}\n","/**\n * tailwind-styled-v4 — Template Parser\n *\n * Processes tagged template literals for the tw proxy.\n * Handles strings, arrays, conditionals, and nested tw values.\n *\n * @example\n * templateParser([\"p-4 \", \" bg-zinc-900\"], [\"rounded-xl\"])\n * → \"p-4 rounded-xl bg-zinc-900\"\n *\n * // Conditional interpolation\n * const isActive = true\n * tw.div`p-4 ${isActive && \"bg-blue-500\"} rounded-xl`\n * → \"p-4 bg-blue-500 rounded-xl\"\n *\n * // Array interpolation\n * tw.div`p-4 ${[\"bg-zinc-900\", \"rounded-xl\"]}`\n * → \"p-4 bg-zinc-900 rounded-xl\"\n */\n\n/**\n * Resolve a single interpolated value to a string.\n * Handles: string, number, boolean, array, null/undefined.\n */\nfunction resolveValue(value: unknown): string {\n if (value === null || value === undefined || value === false) return \"\"\n if (typeof value === \"string\") return value\n if (typeof value === \"number\") return String(value)\n if (Array.isArray(value)) return value.map(resolveValue).filter(Boolean).join(\" \")\n if (typeof value === \"object\") {\n // Handle object form: { \"bg-blue-500\": true, \"bg-red-500\": false }\n const obj = value as Record<string, unknown>\n return Object.keys(obj).filter(k => obj[k]).join(\" \")\n }\n return \"\"\n}\n\n/**\n * Parse a tagged template literal into a normalized Tailwind class string.\n */\nexport function templateParser(\n strings: TemplateStringsArray | readonly string[],\n values: unknown[]\n): string {\n let result = \"\"\n\n for (let i = 0; i < strings.length; i++) {\n result += strings[i]\n\n if (i < values.length) {\n const resolved = resolveValue(values[i])\n if (resolved) result += \" \" + resolved\n }\n }\n\n return result\n .split(\"\\n\")\n .map(line => line.trim())\n .filter(Boolean)\n .join(\" \")\n .replace(/\\s{2,}/g, \" \")\n .trim()\n}\n\n/**\n * Simple tagged template literal for static class strings.\n * Can be used standalone without tw proxy.\n *\n * @example\n * const classes = cls`p-4 bg-zinc-900 rounded-xl`\n * // → \"p-4 bg-zinc-900 rounded-xl\"\n */\nexport function cls(\n strings: TemplateStringsArray,\n ...values: unknown[]\n): string {\n return templateParser(strings, values)\n}\n","/**\n * tailwind-styled-v4 v2 — tw\n *\n * ── Changelog v2 ──────────────────────────────────────────────────────────────\n *\n * FIX 1 — import { tw } undefined in Next.js / Vite\n * BEFORE: export const tw = new Proxy(fn, { get })\n * tsup splitting:true + Proxy = tw resolves undefined after chunk split\n * AFTER: Object.assign(callable, { div, button, ... })\n * Plain object, pre-built at module load, transparent to all bundlers\n *\n * FIX 2 — tw.div<Props>`${({ $isHover }) => ...}` TypeScript generic\n * BEFORE: TwTagFactory not generic → \"Binding element '$isHover' implicitly has 'any' type\"\n * AFTER: TwTagFactory<P> is a generic function → full type inference on template interpolations\n *\n * API (unchanged, backward compatible):\n * tw.div`p-4 bg-zinc-900`\n * tw.div<BadgeProps>`${({ $isHover }) => $isHover ? \"opacity-100\" : \"opacity-0\"}`\n * tw.button({ base, variants, compoundVariants, defaultVariants })\n * tw.div`...`.extend`extra`\n * tw(Link)`underline text-blue-400`\n * tw(Button)({ base, variants })\n */\n\nimport { createComponent } from \"./createComponent\"\nimport { templateParser } from \"./templateParser\"\nimport type { ComponentConfig } from \"../types/component\"\nimport type React from \"react\"\nimport type { JSX } from \"react\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Interpolation types (mirror styled-components API)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Valid values inside a tw template literal interpolation */\ntype Interpolation<P extends object> =\n | string\n | number\n | boolean\n | null\n | undefined\n | ((props: P) => string | number | boolean | null | undefined | Interpolation<P>)\n | Interpolation<P>[]\n\n// ─────────────────────────────────────────────────────────────────────────────\n// TwStyledComponent — result of every tw call\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface TwStyledComponent<P extends object = Record<string, any>>\n extends React.ForwardRefExoticComponent<P & Record<string, any>> {\n /** Chain extra classes: Card.extend`shadow-2xl ring-1` */\n extend<EP extends object = P>(\n strings: TemplateStringsArray,\n ...exprs: Interpolation<EP>[]\n ): TwStyledComponent<EP>\n\n /** Merge new variants onto existing component */\n withVariants(\n config: Pick<ComponentConfig, \"variants\" | \"compoundVariants\" | \"defaultVariants\">\n ): TwStyledComponent<P>\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// TwTagFactory — the function bound to each HTML tag\n// P = extra props (transient $props + custom typed interpolations)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface TwTagFactory<E extends keyof JSX.IntrinsicElements = \"div\"> {\n // ① Template literal — no props typing\n (strings: TemplateStringsArray, ...exprs: Interpolation<JSX.IntrinsicElements[E]>[]): TwStyledComponent<JSX.IntrinsicElements[E]>\n\n // ① Template literal — WITH generic props: tw.div<BadgeProps>`...`\n <P extends object>(strings: TemplateStringsArray, ...exprs: Interpolation<JSX.IntrinsicElements[E] & P>[]): TwStyledComponent<JSX.IntrinsicElements[E] & P>\n\n // ② Object config — tw.button({ base, variants })\n (config: ComponentConfig): TwStyledComponent<JSX.IntrinsicElements[E]>\n\n // ② Object config WITH generic: tw.button<ButtonProps>({ base, variants })\n <P extends object>(config: ComponentConfig): TwStyledComponent<JSX.IntrinsicElements[E] & P>\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// TwObject — full tw type (all tags + callable for wrapping components)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type TwObject = {\n [K in keyof JSX.IntrinsicElements]: TwTagFactory<K>\n} & {\n // tw(AnyComponent)`classes` — wrap any component\n <C extends React.ComponentType<any>>(component: C): TwComponentFactory<C>\n}\n\n/** Factory for wrapped React components — preserves original component's prop types */\nexport interface TwComponentFactory<C extends React.ComponentType<any>> {\n (strings: TemplateStringsArray, ...exprs: Interpolation<React.ComponentPropsWithRef<C>>[]): TwStyledComponent<React.ComponentPropsWithRef<C>>\n <P extends object>(strings: TemplateStringsArray, ...exprs: Interpolation<React.ComponentPropsWithRef<C> & P>[]): TwStyledComponent<React.ComponentPropsWithRef<C> & P>\n (config: ComponentConfig): TwStyledComponent<React.ComponentPropsWithRef<C>>\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// makeTag — factory for one tag / component\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction makeTag(tag: any): TwTagFactory<any> {\n return function (\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\n ...exprs: any[]\n ): TwStyledComponent<any> {\n // Object config path: tw.button({ base, variants, ... })\n if (\n !Array.isArray(stringsOrConfig) &&\n typeof stringsOrConfig === \"object\" &&\n stringsOrConfig !== null\n ) {\n return createComponent(tag, stringsOrConfig as ComponentConfig) as any\n }\n // Template literal path: tw.div`p-4 bg-zinc-900`\n return createComponent(\n tag,\n templateParser(stringsOrConfig as TemplateStringsArray, exprs)\n ) as any\n } as TwTagFactory<any>\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// HTML tags — all tags pre-built at module load (no Proxy)\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst HTML_TAGS = [\n // Block\n \"div\", \"section\", \"article\", \"aside\", \"header\", \"footer\", \"main\", \"nav\",\n \"figure\", \"figcaption\", \"details\", \"summary\",\n // Headings\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n // Text\n \"p\", \"span\", \"strong\", \"em\", \"b\", \"i\", \"s\", \"u\", \"small\", \"mark\",\n \"abbr\", \"cite\", \"code\", \"kbd\", \"samp\", \"var\", \"time\", \"address\",\n \"blockquote\", \"q\", \"del\", \"ins\", \"sub\", \"sup\",\n // Lists\n \"ul\", \"ol\", \"li\", \"dl\", \"dt\", \"dd\",\n // Table\n \"table\", \"thead\", \"tbody\", \"tfoot\", \"tr\", \"th\", \"td\", \"caption\",\n \"colgroup\", \"col\",\n // Media\n \"img\", \"picture\", \"video\", \"audio\", \"source\", \"track\", \"canvas\",\n \"svg\", \"path\", \"circle\", \"rect\", \"line\", \"polyline\", \"polygon\",\n \"g\", \"defs\", \"use\", \"symbol\",\n // Form\n \"form\", \"input\", \"textarea\", \"select\", \"option\", \"optgroup\",\n \"button\", \"label\", \"fieldset\", \"legend\", \"output\", \"progress\",\n \"meter\", \"datalist\",\n // Interactive\n \"a\", \"area\", \"map\",\n // Embedded\n \"iframe\", \"embed\", \"object\",\n // Structural\n \"pre\", \"hr\", \"br\", \"wbr\",\n // Misc\n \"dialog\", \"menu\", \"template\", \"slot\",\n] as const\n\nconst tagFactories = {} as Record<string, TwTagFactory<any>>\nfor (const tag of HTML_TAGS) {\n tagFactories[tag] = makeTag(tag)\n}\n\n// tw is callable for wrapping components AND has all tag properties\n// Object.assign is fully transparent to bundlers (unlike Proxy)\nconst twCallable = function <C extends React.ComponentType<any>>(\n component: C\n): TwComponentFactory<C> {\n return makeTag(component) as any\n}\n\nexport const tw: TwObject = Object.assign(twCallable, tagFactories) as unknown as TwObject","/**\n * tailwind-styled-v4 — cv() (Class Variants)\n *\n * A standalone CVA-compatible function that works without styled-components.\n * Perfect for headless UI, shadcn/ui, or any className-based component.\n *\n * @example\n * const buttonCv = cv({\n * base: \"inline-flex items-center rounded-lg font-medium transition\",\n * variants: {\n * variant: {\n * primary: \"bg-blue-500 text-white hover:bg-blue-600\",\n * ghost: \"bg-transparent border hover:bg-zinc-800\",\n * },\n * size: {\n * sm: \"h-8 px-3 text-sm\",\n * md: \"h-10 px-4 text-sm\",\n * lg: \"h-12 px-6 text-base\",\n * }\n * },\n * compoundVariants: [\n * { variant: \"primary\", size: \"lg\", class: \"shadow-lg shadow-blue-500/30\" }\n * ],\n * defaultVariants: { variant: \"primary\", size: \"md\" }\n * })\n *\n * // Usage in a component:\n * buttonCv({ variant: \"ghost\", size: \"sm\" })\n * // → \"inline-flex items-center ... bg-transparent border hover:bg-zinc-800 h-8 px-3 text-sm\"\n */\n\nimport { twMerge } from \"tailwind-merge\"\n\nimport { resolveVariants } from \"../runtime/variantEngine\"\nimport { resolveCompound } from \"../runtime/compoundVariant\"\n\ntype CvProps<V extends Record<string, Record<string, string>>> = {\n [K in keyof V]?: keyof V[K]\n} & { className?: string }\n\nexport function cv<V extends Record<string, Record<string, string>>>(\n config: {\n base?: string\n variants?: V\n compoundVariants?: Array<{ class?: string; className?: string; [key: string]: any }>\n defaultVariants?: { [K in keyof V]?: keyof V[K] }\n }\n) {\n const {\n base = \"\",\n variants = {} as V,\n compoundVariants = [],\n defaultVariants = {} as any,\n } = config\n\n return function (props?: CvProps<V>): string {\n const merged = { ...(defaultVariants as any), ...(props ?? {}) }\n\n const variantClasses = resolveVariants(variants as any, merged)\n const compoundClasses = resolveCompound(compoundVariants, merged)\n\n return twMerge(base, variantClasses, compoundClasses, props?.className)\n }\n}\n","/**\n * tailwind-styled-v4 — withTw() HOC\n *\n * Higher-order component that injects tw prop support into ANY existing\n * React component — without requiring it to be rebuilt with tw.tag.\n *\n * Useful for:\n * - Third-party components (e.g. shadcn/ui, Radix UI primitives)\n * - Legacy components you don't own\n * - Any component that already accepts className\n *\n * @example\n * import { Button } from \"@/components/ui/button\" // shadcn Button\n * import { withTw } from \"tailwind-styled-v4\"\n *\n * const TwButton = withTw(Button)\n *\n * // Now supports all tw props:\n * <TwButton p={4} rounded=\"xl\" variant=\"primary\" size=\"lg\" />\n * // → <Button className=\"p-4 rounded-xl\" variant=\"primary\" size=\"lg\" />\n *\n * // Or as tagged template:\n * const StyledButton = withTw(Button, \"px-4 py-2 bg-blue-500\")\n */\n\nimport React, { forwardRef } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { resolveProps, TW_PROP_KEYS } from \"../runtime/propEngine\"\nimport { resolvePluginProps } from \"../plugins/pluginEngine\"\n\nexport interface WithTwOptions {\n /** Extra base classes always applied */\n base?: string\n /** Forward ref to underlying component */\n forwardRef?: boolean\n /** Display name for DevTools */\n displayName?: string\n}\n\n/**\n * Wrap any component with tw prop support.\n * The wrapped component will accept all tw props (p, m, bg, text, etc.)\n * and merge them into className before forwarding to the inner component.\n */\nexport function withTw<T extends { className?: string; ref?: any }>(\n Component: React.ComponentType<T>,\n baseOrOpts: string | WithTwOptions = \"\"\n): React.ComponentType<T & Record<string, any>> {\n const base = typeof baseOrOpts === \"string\"\n ? baseOrOpts\n : (baseOrOpts.base ?? \"\")\n\n const displayName = typeof baseOrOpts === \"object\"\n ? (baseOrOpts.displayName ?? `withTw(${Component.displayName ?? Component.name ?? \"Component\"})`)\n : `withTw(${Component.displayName ?? Component.name ?? \"Component\"})`\n\n const WrappedComponent = forwardRef<any, T & Record<string, any>>(\n (props, ref) => {\n const twProps: Record<string, any> = {}\n const restProps: Record<string, any> = {}\n\n // Split tw props from rest\n for (const key in props) {\n if (TW_PROP_KEYS.has(key)) {\n twProps[key] = (props as any)[key]\n } else {\n restProps[key] = (props as any)[key]\n }\n }\n\n const propClasses = resolveProps(twProps)\n const pluginClasses = resolvePluginProps(twProps)\n\n const mergedClassName = twMerge(\n base,\n propClasses,\n pluginClasses,\n props.className\n )\n\n return React.createElement(Component, {\n ...restProps,\n ref,\n className: mergedClassName,\n } as any)\n }\n )\n\n WrappedComponent.displayName = displayName\n\n return WrappedComponent as any\n}\n\n/**\n * Attach tw prop support directly to a component (mutation-based, lighter weight).\n * Returns the same component reference with extended className logic.\n * Prefer withTw() for purity; use attachTw() when ref identity matters.\n */\nexport function attachTw<T extends { className?: string }>(\n Component: React.ComponentType<T>,\n base = \"\"\n): React.ComponentType<T & Record<string, any>> {\n return withTw(Component, base)\n}\n","/**\n * tailwind-styled-v4 — registerPlugin\n *\n * Public API for adding custom prop resolvers.\n */\n\nimport { addPlugin } from \"./pluginEngine\"\nimport type { TailwindPlugin } from \"./pluginEngine\"\n\nexport function registerPlugin(plugin: TailwindPlugin): void {\n if (!plugin.name || typeof plugin.name !== \"string\") {\n throw new Error(\"[tailwind-styled-v4] Plugin must have a non-empty string name\")\n }\n if (!plugin.props || typeof plugin.props !== \"object\") {\n throw new Error(`[tailwind-styled-v4] Plugin \"${plugin.name}\" must define a props object`)\n }\n addPlugin(plugin)\n}\n","/**\n * tailwind-styled-v4 — Built-in Plugins\n *\n * Optional curated plugins. Call loadBuiltinPlugins() in your app entry point.\n *\n * @example\n * // _app.tsx or layout.tsx\n * import { loadBuiltinPlugins } from \"tailwind-styled-v4\"\n * loadBuiltinPlugins()\n */\n\nimport { registerPlugin } from \"./registerPlugin\"\n\n// Guard: prevent re-registering on every hot-reload / multiple calls\nlet _loaded = false\n\nexport function loadBuiltinPlugins(): void {\n if (_loaded) return\n _loaded = true\n\n // ── Animation ───────────────────────────────────────────────────────────\n // NOTE: animate/duration/delay/ease sudah ada di propEngine's propMap.\n // Mendaftarkannya di sini juga akan menyebabkan double-resolution:\n // resolveProps DAN resolvePluginProps keduanya akan fire → duplikat kelas.\n // Plugin animation hanya menambahkan props yang belum ada di propEngine.\n registerPlugin({\n name: \"animation\",\n props: {\n motionSafe: v => v === true ? \"motion-safe:transition-all\" : \"\",\n motionReduce: v => v === true ? \"motion-reduce:transition-none\" : \"\",\n willChange: v => `will-change-${v}`,\n }\n })\n\n // ── Grid Helpers ─────────────────────────────────────────────────────────\n // NOTE: cols/rows/gridCols/gridRows sudah ada di propEngine.\n // Hanya tambahkan helpers yang genuinely missing.\n registerPlugin({\n name: \"grid\",\n props: {\n autoRows: v => `auto-rows-${v}`,\n autoCols: v => `auto-cols-${v}`,\n }\n })\n\n // ── Backdrop ─────────────────────────────────────────────────────────────\n registerPlugin({\n name: \"backdrop\",\n props: {\n backdropBlur: v => `backdrop-blur-${v}`,\n backdropBrightness: v => `backdrop-brightness-${v}`,\n backdropContrast: v => `backdrop-contrast-${v}`,\n backdropSaturate: v => `backdrop-saturate-${v}`,\n }\n })\n\n // ── Gradient ────────────────────────────────────────────────────────────\n registerPlugin({\n name: \"gradient\",\n props: {\n gradientFrom: v => `from-${v}`,\n gradientVia: v => `via-${v}`,\n gradientTo: v => `to-${v}`,\n gradient: v => `bg-gradient-to-${v}`,\n }\n })\n\n // ── Scroll Behavior ──────────────────────────────────────────────────────\n registerPlugin({\n name: \"scroll\",\n props: {\n scrollSmooth: v => v === true ? \"scroll-smooth\" : \"\",\n scrollAuto: v => v === true ? \"scroll-auto\" : \"\",\n snapAlign: v => `snap-${v}`,\n snapType: v => `snap-${v}`,\n }\n })\n\n // ── Print ────────────────────────────────────────────────────────────────\n registerPlugin({\n name: \"print\",\n props: {\n printHidden: v => v === true ? \"print:hidden\" : \"\",\n printBlock: v => v === true ? \"print:block\" : \"\",\n }\n })\n}\n","/**\n * tailwind-styled-v4 — Class Resolver\n *\n * Central resolver that combines all engines into a final className string.\n * Uses tailwind-merge to resolve class conflicts correctly.\n *\n * This is the canonical single-call API used externally (e.g. headless\n * components, server-side rendering, testing). createComponent() uses the\n * same engines directly for performance — keep the two in sync.\n */\n\nimport { twMerge } from \"tailwind-merge\"\n\nimport { resolveProps } from \"./propEngine\"\nimport { resolveVariants } from \"./variantEngine\"\nimport { resolveCompound } from \"./compoundVariant\"\nimport { resolvePluginProps } from \"../plugins/pluginEngine\"\nimport type { VariantMap, CompoundVariant } from \"../types/variants\"\n\nexport interface ResolveConfig {\n base: string\n variants?: VariantMap\n compoundVariants?: CompoundVariant[]\n defaultVariants?: Record<string, string>\n}\n\nexport function resolveClasses(\n config: ResolveConfig,\n props: Record<string, any>\n): string {\n const {\n base,\n variants = {},\n compoundVariants = [],\n defaultVariants = {}\n } = config\n\n // Merge defaultVariants so compound conditions fire correctly\n // when user doesn't pass explicit variant props — same logic as createComponent\n const mergedProps = { ...defaultVariants, ...props }\n\n const variantClasses = resolveVariants(variants, mergedProps, defaultVariants)\n const compoundClasses = resolveCompound(compoundVariants, mergedProps)\n const propClasses = resolveProps(props)\n const pluginClasses = resolvePluginProps(props)\n\n return twMerge(\n base,\n variantClasses,\n compoundClasses,\n propClasses,\n pluginClasses,\n props.className\n )\n}\n","/**\n * tailwind-styled-v4 — Default Theme\n *\n * Ready-to-use semantic token system.\n * Call loadDefaultTheme() once in your app entry point (_app.tsx / layout.tsx).\n *\n * @example\n * // app/layout.tsx\n * import { loadDefaultTheme } from \"tailwind-styled-v4\"\n * loadDefaultTheme()\n *\n * // Now you can use semantic tokens:\n * <Box bg=\"primary\" text=\"foreground\" rounded=\"card\" />\n * // → bg-blue-600 text-white rounded-2xl\n */\n\nimport { setTheme } from \"./themeStore\"\n\nexport function loadDefaultTheme(): void {\n setTheme({\n // ── Colors ─────────────────────────────────────────────────────────────\n colors: {\n // Brand\n primary: \"blue-600\",\n \"primary-hover\": \"blue-700\",\n \"primary-light\": \"blue-100\",\n\n secondary: \"violet-600\",\n \"secondary-hover\": \"violet-700\",\n\n // Semantic\n success: \"emerald-500\",\n warning: \"amber-500\",\n danger: \"red-500\",\n info: \"sky-500\",\n\n // Neutral\n foreground: \"white\",\n background: \"zinc-950\",\n surface: \"zinc-900\",\n \"surface-2\": \"zinc-800\",\n \"surface-3\": \"zinc-700\",\n\n muted: \"zinc-500\",\n subtle: \"zinc-400\",\n border: \"zinc-700\",\n \"border-light\": \"zinc-200\",\n\n // Text\n \"text-primary\": \"zinc-50\",\n \"text-secondary\": \"zinc-400\",\n \"text-muted\": \"zinc-600\",\n\n // Interactive\n link: \"blue-400\",\n \"link-hover\": \"blue-300\",\n },\n\n // ── Spacing ────────────────────────────────────────────────────────────\n spacing: {\n xs: \"2\",\n sm: \"4\",\n md: \"6\",\n lg: \"8\",\n xl: \"12\",\n \"2xl\": \"16\",\n \"3xl\": \"24\",\n section: \"16\",\n page: \"24\",\n },\n\n // ── Border Radius ──────────────────────────────────────────────────────\n radius: {\n none: \"none\",\n xs: \"sm\",\n sm: \"md\",\n md: \"lg\",\n lg: \"xl\",\n xl: \"2xl\",\n card: \"2xl\",\n button: \"lg\",\n badge: \"full\",\n pill: \"full\",\n input: \"md\",\n },\n\n // ── Shadows ────────────────────────────────────────────────────────────\n shadow: {\n xs: \"sm\",\n sm: \"md\",\n md: \"lg\",\n lg: \"xl\",\n xl: \"2xl\",\n card: \"xl\",\n modal: \"2xl\",\n none: \"none\",\n },\n\n // ── Typography ─────────────────────────────────────────────────────────\n font: {\n sans: \"sans\",\n mono: \"mono\",\n serif: \"serif\",\n },\n\n fontSize: {\n caption: \"xs\",\n small: \"sm\",\n body: \"base\",\n lead: \"lg\",\n title: \"xl\",\n heading: \"2xl\",\n display: \"4xl\",\n },\n\n // ── Transitions ────────────────────────────────────────────────────────\n duration: {\n fast: \"150\",\n normal: \"200\",\n slow: \"300\",\n slower: \"500\",\n },\n\n // ── Opacity ────────────────────────────────────────────────────────────\n opacity: {\n disabled: \"50\",\n muted: \"70\",\n subtle: \"40\",\n },\n })\n}\n\n/**\n * Load a minimal dark theme for fintech/crypto/Web3 UIs.\n * Matches aanragil.design token conventions.\n */\nexport function loadDarkTheme(): void {\n setTheme({\n colors: {\n primary: \"blue-500\",\n secondary: \"indigo-500\",\n accent: \"cyan-400\",\n background: \"zinc-950\",\n surface: \"zinc-900\",\n \"surface-2\": \"zinc-800\",\n foreground: \"zinc-50\",\n muted: \"zinc-500\",\n border: \"zinc-800\",\n success: \"emerald-400\",\n warning: \"amber-400\",\n danger: \"red-400\",\n },\n radius: {\n card: \"xl\",\n button: \"lg\",\n badge: \"full\",\n input: \"md\",\n },\n })\n}\n","/**\n * tailwind-styled-v4 — Deterministic Hash Utility\n *\n * Generates a short stable hash from a string.\n * Used for:\n * - data-tw attribute values in dev tools\n * - CSS @layer naming\n * - Component deduplication\n *\n * Algorithm: djb2 — fast, collision-resistant enough for our use case.\n *\n * @example\n * hashClass(\"div:p-4 bg-zinc-900\") → \"tw-3f2a1b\"\n */\n\n/**\n * djb2 hash — produces a 32-bit signed integer\n */\nfunction djb2(str: string): number {\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash) ^ str.charCodeAt(i)\n hash = hash >>> 0 // convert to unsigned 32-bit\n }\n return hash\n}\n\n/**\n * Returns a short hex hash string prefixed with \"tw-\".\n * Output is always 8 characters (tw- + 5 hex chars).\n *\n * @example\n * hashClass(\"div:p-4\") → \"tw-3f2a1\"\n * hashClass(\"button:bg-blue\") → \"tw-8c4d2\"\n */\nexport function hashClass(input: string): string {\n const n = djb2(input)\n return \"tw-\" + n.toString(16).slice(0, 5).padStart(5, \"0\")\n}\n\n/**\n * Returns a numeric hash — useful for CSS layer ordering.\n */\nexport function hashNumber(input: string): number {\n return djb2(input)\n}\n\n/**\n * Generates a stable component display name from tag + classes.\n * Used as the styled-components displayName for better DevTools experience.\n *\n * @example\n * componentName(\"div\", \"p-4 bg-zinc-900\") → \"Tw-div-3f2a1\"\n */\nexport function componentName(tag: string, classes: string): string {\n const hash = hashClass(`${tag}:${classes}`)\n const tagCap = tag.charAt(0).toUpperCase() + tag.slice(1)\n return `Tw${tagCap}-${hash.replace(\"tw-\", \"\")}`\n}\n","/**\n * tailwind-styled-v4 — Styled Factory\n *\n * Thin wrapper around styled-components that adds:\n * - Automatic shouldForwardProp for tw props\n * - Display name injection for React DevTools\n * - SSR-compatible class generation\n *\n * Abstracts over styled-components internals so we can swap\n * the underlying CSS-in-JS library in future versions.\n */\n\nimport styled, { ThemeContext } from \"styled-components\"\nimport type { JSX } from \"react\"\nimport { TW_PROP_KEYS } from \"../runtime/propEngine\"\nimport { componentName } from \"../utils/hash\"\n\n// Re-export for internal use\nexport { ThemeContext }\n\n// ─────────────────────────────────────────────────────────────────────────────\n// shouldForwardProp registry\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Extra prop names that are variant/config keys, not DOM attributes.\n * These get filtered out by shouldForwardProp.\n */\nconst EXTRA_BLOCKED = new Set([\n // Common variant prop names developers use\n \"variant\", \"size\", \"intent\", \"color\", \"shape\", \"tone\", \"weight\",\n \"hierarchy\", \"emphasis\", \"status\", \"appearance\",\n // Internal tw keys\n \"base\", \"as\", \"_ref\",\n])\n\n/**\n * Determine if a prop should be forwarded to the DOM.\n * Blocks tw utility props and common variant props from leaking as HTML attributes.\n */\nexport function shouldForwardProp(prop: string): boolean {\n if (prop.startsWith(\"$\")) return true // $ prefix = always forward (styled-components convention)\n if (EXTRA_BLOCKED.has(prop)) return false\n if (TW_PROP_KEYS.has(prop)) return false\n return true\n}\n\n/**\n * Add a custom prop name to the block list.\n * Useful for custom variant props not already in the list.\n *\n * @example\n * blockProp(\"hierarchy\") // <Button hierarchy=\"primary\" /> won't pollute DOM\n */\nexport function blockProp(prop: string): void {\n EXTRA_BLOCKED.add(prop)\n}\n\n/**\n * Remove a prop from the block list (allow forwarding).\n */\nexport function allowProp(prop: string): void {\n EXTRA_BLOCKED.delete(prop)\n ;(TW_PROP_KEYS as Set<string>).delete(prop)\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a styled-components base with tw-aware shouldForwardProp.\n *\n * @param tag - HTML tag string or React component\n * @param classes - Optional base class string for display name generation\n */\nexport function styledFactory(tag: any, classes = \"\"): any {\n const base = styled(tag).withConfig({ shouldForwardProp })\n\n if (process.env.NODE_ENV !== \"production\" && typeof tag === \"string\" && classes) {\n // Inject display name for React DevTools\n const name = componentName(tag, classes)\n ;(base as any).displayName = name\n }\n\n return base\n}\n\n/**\n * Type-safe version for known HTML elements.\n */\nexport function styledElement<Tag extends keyof JSX.IntrinsicElements>(\n tag: Tag,\n classes = \"\"\n): ReturnType<typeof styled.div> {\n return styledFactory(tag, classes) as ReturnType<typeof styled.div>\n}\n","import { twMerge } from \"tailwind-merge\"\n\n/**\n * Merge Tailwind classes safely\n */\nexport function mergeClasses(...classes: (string | undefined)[]) {\n return twMerge(...classes.filter(Boolean))\n}","/**\n * tailwind-styled-v4 — Class Parser Utilities\n */\n\n/**\n * Parse a Tailwind class string into a deduplicated sorted array.\n *\n * @example\n * parseClassString(\"p-4 bg-zinc-900 p-4\") → [\"bg-zinc-900\", \"p-4\"]\n */\nexport function parseClassString(cls: string): string[] {\n return Array.from(\n new Set(\n cls\n .split(/\\s+/)\n .map(c => c.trim())\n .filter(Boolean)\n )\n )\n}\n\n/**\n * Normalize a class string: trim, deduplicate, sort, collapse whitespace.\n *\n * @example\n * normalizeClasses(\" p-4 bg-zinc-900 p-4 \") → \"bg-zinc-900 p-4\"\n */\nexport function normalizeClasses(cls: string): string {\n return parseClassString(cls).sort().join(\" \")\n}\n\n/**\n * Split a class string into groups: base classes vs modifier classes.\n *\n * @example\n * splitModifiers(\"p-4 hover:bg-blue-500 md:p-8\")\n * → { base: [\"p-4\"], modifiers: [\"hover:bg-blue-500\", \"md:p-8\"] }\n */\nexport function splitModifiers(cls: string): {\n base: string[]\n modifiers: string[]\n} {\n const classes = parseClassString(cls)\n const base: string[] = []\n const modifiers: string[] = []\n\n for (const c of classes) {\n if (c.includes(\":\")) modifiers.push(c)\n else base.push(c)\n }\n\n return { base, modifiers }\n}\n\n/**\n * Check if a string looks like a valid Tailwind class token.\n *\n * @example\n * isValidClass(\"bg-blue-500\") → true\n * isValidClass(\"not a class\") → false\n */\nexport function isValidClass(cls: string): boolean {\n return /^!?[-a-z0-9]+(?:[:/[\\]().#,]+[-a-z0-9_]+)*$/.test(cls)\n}\n\n/**\n * Extract modifier prefix from a class.\n *\n * @example\n * getModifier(\"hover:bg-blue-500\") → \"hover\"\n * getModifier(\"md:p-4\") → \"md\"\n * getModifier(\"p-4\") → null\n */\nexport function getModifier(cls: string): string | null {\n const idx = cls.indexOf(\":\")\n return idx > -1 ? cls.slice(0, idx) : null\n}\n\n/**\n * Strip modifier prefix from a class.\n *\n * @example\n * stripModifier(\"hover:bg-blue-500\") → \"bg-blue-500\"\n * stripModifier(\"p-4\") → \"p-4\"\n */\nexport function stripModifier(cls: string): string {\n const idx = cls.indexOf(\":\")\n return idx > -1 ? cls.slice(idx + 1) : cls\n}\n\n/**\n * Group classes by their modifier prefix.\n *\n * @example\n * groupByModifier(\"p-4 hover:bg-blue-500 hover:text-white md:p-8\")\n * → { \"\": [\"p-4\"], hover: [\"bg-blue-500\", \"text-white\"], md: [\"p-8\"] }\n */\nexport function groupByModifier(cls: string): Record<string, string[]> {\n const classes = parseClassString(cls)\n const groups: Record<string, string[]> = {}\n\n for (const c of classes) {\n const mod = getModifier(c) ?? \"\"\n const base = stripModifier(c)\n if (!groups[mod]) groups[mod] = []\n groups[mod].push(base)\n }\n\n return groups\n}\n","/**\n * tailwind-styled-v4 — cx() utility\n *\n * Ultra-lightweight class joiner (~100 bytes minified).\n * Drop-in replacement for clsx in runtime-critical paths.\n *\n * Supports:\n * - Strings\n * - Arrays (nested)\n * - Objects { \"class\": boolean }\n * - Falsy values (ignored)\n *\n * @example\n * cx(\"p-4\", \"bg-zinc-900\") → \"p-4 bg-zinc-900\"\n * cx(\"p-4\", isActive && \"bg-blue-500\") → \"p-4 bg-blue-500\"\n * cx([\"p-4\", \"m-2\"], { hidden: false, flex: true }) → \"p-4 m-2 flex\"\n * cx(\"p-4\", undefined, null, false, 0) → \"p-4\"\n */\n\ntype CxInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | CxInput[]\n | Record<string, boolean | undefined | null>\n\nexport function cx(...inputs: CxInput[]): string {\n const parts: string[] = []\n flatten(inputs, parts)\n return parts.join(\" \")\n}\n\nfunction flatten(inputs: CxInput[], out: string[]): void {\n for (const input of inputs) {\n if (!input) continue\n\n if (typeof input === \"string\") {\n out.push(input)\n continue\n }\n\n if (typeof input === \"number\") {\n out.push(String(input))\n continue\n }\n\n if (Array.isArray(input)) {\n flatten(input, out)\n continue\n }\n\n if (typeof input === \"object\") {\n for (const key in input) {\n if (input[key]) out.push(key)\n }\n }\n }\n}\n\n/**\n * cx with tailwind-merge deduplication.\n * Use this when you need conflict resolution (e.g. p-4 overriding p-2).\n * Slightly heavier than cx() — import separately.\n */\nexport function cxm(...inputs: CxInput[]): string {\n // Lazy import tailwind-merge to keep cx() itself zero-dep\n try {\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n const { twMerge } = require(\"tailwind-merge\") as typeof import(\"tailwind-merge\")\n return twMerge(cx(...inputs))\n } catch {\n return cx(...inputs)\n }\n}\n","/**\n * tailwind-styled-v4 — Prop Validator\n *\n * Runtime validation untuk variant props.\n * Memberikan error messages yang jelas ketika value tidak valid.\n *\n * Aktif di development saja (process.env.NODE_ENV !== 'production').\n * Di production = no-op, zero overhead.\n *\n * @example\n * // Dev: error langsung di konsol dengan hint yang jelas\n * <Button variant=\"invalid\" />\n * // [tw-error] Invalid prop \"variant\"=\"invalid\" on <button>\n * // Expected one of: \"primary\" | \"ghost\" | \"danger\"\n * // Got: \"invalid\"\n */\n\nimport { TW_PROP_KEYS } from \"../runtime/propEngine\"\n\nconst IS_DEV =\n typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface ValidationSchema {\n tag: string\n variants?: Record<string, Record<string, string>>\n customValidators?: Record<string, (v: unknown) => string | null>\n}\n\nexport interface ValidationResult {\n valid: boolean\n errors: string[]\n warnings: string[]\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Variant prop validator\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst VALID_SCREENS = new Set([\"base\", \"sm\", \"md\", \"lg\", \"xl\", \"2xl\"])\n\nconst KNOWN_TW_PROPS: ReadonlySet<string> = TW_PROP_KEYS\n\n/**\n * Validate variant props against a schema.\n * Pure no-op in production.\n */\nexport function validateVariantProps(\n props: Record<string, unknown>,\n schema: ValidationSchema\n): ValidationResult {\n if (!IS_DEV) return { valid: true, errors: [], warnings: [] }\n\n const errors: string[] = []\n const warnings: string[] = []\n const { tag, variants = {}, customValidators = {} } = schema\n\n // ── Variant key validation ─────────────────────────────────────────────────\n for (const [key, map] of Object.entries(variants)) {\n const value = props[key]\n if (value === undefined || value === null) continue\n\n const str = String(value)\n const valid = Object.keys(map)\n\n if (!valid.includes(str)) {\n errors.push(\n `[tw-error] Invalid prop \"${key}\"=\"${str}\" on <${tag}>\\n` +\n ` Expected one of: ${valid.map(v => `\"${v}\"`).join(\" | \")}\\n` +\n ` Got: \"${str}\"\\n` +\n ` Hint: Add \"${str}\" to the variants config, or fix the typo.`\n )\n }\n }\n\n // ── Custom validators ─────────────────────────────────────────────────────\n for (const [key, fn] of Object.entries(customValidators)) {\n const msg = fn(props[key])\n if (msg) errors.push(`[tw-error] ${msg}`)\n }\n\n // ── Suspicious spacing values ─────────────────────────────────────────────\n const SPACING_PROPS = new Set([\"p\",\"px\",\"py\",\"pt\",\"pb\",\"pl\",\"pr\",\"m\",\"mx\",\"my\",\"mt\",\"mb\",\"ml\",\"mr\",\"gap\"])\n for (const key of SPACING_PROPS) {\n const v = props[key]\n if (typeof v === \"number\" && v > 96) {\n warnings.push(\n `[tw-warn] Prop \"${key}\"=${v} exceeds Tailwind spacing scale max (96).\\n` +\n ` Use arbitrary values: ${key}=\"[${v}px]\" for custom sizes.`\n )\n }\n }\n\n // ── Responsive object screen names ────────────────────────────────────────\n for (const [key, value] of Object.entries(props)) {\n if (typeof value !== \"object\" || !value || Array.isArray(value)) continue\n const unknownScreens = Object.keys(value as object).filter(s => !VALID_SCREENS.has(s))\n if (unknownScreens.length > 0) {\n warnings.push(\n `[tw-warn] Unknown screen(s) in \"${key}\" responsive object: ${unknownScreens.map(s=>`\"${s}\"`).join(\", \")}\\n` +\n ` Valid screens: \"base\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\"`\n )\n }\n }\n\n if (IS_DEV) {\n errors.forEach(e => console.error(e))\n warnings.forEach(w => console.warn(w))\n }\n\n return { valid: errors.length === 0, errors, warnings }\n}\n\n/**\n * Build reusable validation schema from component config.\n */\nexport function buildSchema(\n tag: string,\n variants: Record<string, Record<string, string>> = {}\n): ValidationSchema {\n return { tag, variants }\n}\n\nexport { KNOWN_TW_PROPS, VALID_SCREENS }\n","/**\n * tailwind-styled-v4 — Tailwind v4 Plugin Helpers\n *\n * Tailwind v4 mengubah cara plugin bekerja (CSS-first, bukan JS config).\n * File ini menyediakan tw prop equivalents untuk plugin populer:\n * - @tailwindcss/typography\n * - @tailwindcss/forms\n * - @tailwindcss/aspect-ratio\n * - @tailwindcss/container-queries\n *\n * Usage:\n * import { loadTypographyPlugin, loadFormsPlugin } from \"tailwind-styled-v4\"\n * loadTypographyPlugin()\n * loadFormsPlugin()\n *\n * Lalu pakai props:\n * <div prose=\"lg\" /> → prose prose-lg\n * <input formInput=\"text\" /> → form-input (dari @tailwindcss/forms)\n * <div aspect=\"video\" /> → aspect-video (built-in v4)\n * <div cq=\"sm\" /> → @sm (container query)\n */\n\nimport { registerPlugin } from \"./registerPlugin\"\nimport { resolveColor } from \"../theme/tokenResolver\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// @tailwindcss/typography\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load typography plugin props.\n * Requires @tailwindcss/typography installed.\n *\n * @example\n * loadTypographyPlugin()\n *\n * <article prose>...</article>\n * // → class=\"prose\"\n *\n * <article prose=\"lg\" proseDark>...</article>\n * // → class=\"prose prose-lg dark:prose-invert\"\n *\n * <article prose=\"xl\" proseColor=\"slate\">...</article>\n * // → class=\"prose prose-xl prose-slate\"\n */\nexport function loadTypographyPlugin(): void {\n registerPlugin({\n name: \"typography\",\n props: {\n // prose=\"lg\" | prose={true} | prose=\"sm\"|\"base\"|\"lg\"|\"xl\"|\"2xl\"\n prose: (v: any) => {\n if (v === true || v === \"base\" || v === \"\") return \"prose\"\n if (typeof v === \"string\") return `prose prose-${v}`\n return \"prose\"\n },\n\n // Prose color: proseColor=\"slate\" → prose-slate\n proseColor: (v: any) => `prose-${v}`,\n\n // Dark mode invert: proseDark={true} → dark:prose-invert\n proseDark: (v: any) => v === true ? \"dark:prose-invert\" : \"\",\n\n // Max width override: proseMaxW={false} → max-w-none\n proseMaxW: (v: any) => v === false ? \"max-w-none\" : \"\",\n\n // Lead size: proseLead=\"relaxed\" → prose-lead:leading-relaxed (custom)\n proseLeading: (v: any) => `leading-${v}`,\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// @tailwindcss/forms\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load forms plugin props.\n * Requires @tailwindcss/forms installed.\n *\n * @example\n * loadFormsPlugin()\n *\n * <input formInput /> → form-input\n * <select formSelect /> → form-select\n * <textarea formTextarea /> → form-textarea\n * <input type=\"checkbox\" formCheckbox /> → form-checkbox\n * <input type=\"radio\" formRadio /> → form-radio\n * <input formInput=\"text\" /> → form-input (explicit)\n */\nexport function loadFormsPlugin(): void {\n registerPlugin({\n name: \"forms\",\n props: {\n formInput: (v: any) => v ? \"form-input\" : \"\",\n formSelect: (v: any) => v ? \"form-select\" : \"\",\n formTextarea: (v: any) => v ? \"form-textarea\" : \"\",\n formCheckbox: (v: any) => v ? \"form-checkbox\" : \"\",\n formRadio: (v: any) => v ? \"form-radio\" : \"\",\n formRange: (v: any) => v ? \"form-range\" : \"\",\n // Alias\n form: (v: any) => {\n const map: Record<string, string> = {\n input: \"form-input\", select: \"form-select\",\n textarea: \"form-textarea\", checkbox: \"form-checkbox\",\n radio: \"form-radio\", range: \"form-range\",\n }\n return map[v] ?? `form-${v}`\n },\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Aspect Ratio (built-in Tailwind v4)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load aspect-ratio convenience props.\n * aspect-ratio is built into Tailwind v4 (no plugin needed).\n *\n * @example\n * loadAspectPlugin()\n *\n * <div aspectRatio=\"video\" /> → aspect-video\n * <div aspectRatio=\"square\" /> → aspect-square\n * <div aspectRatio=\"4/3\" /> → aspect-[4/3]\n * <div aspectRatio={16/9} /> → aspect-video (auto-detect)\n */\nexport function loadAspectPlugin(): void {\n registerPlugin({\n name: \"aspect\",\n props: {\n aspectRatio: (v: any) => {\n const PRESETS: Record<string, string> = {\n video: \"aspect-video\", // 16/9\n square: \"aspect-square\", // 1/1\n auto: \"aspect-auto\",\n \"4/3\": \"aspect-[4/3]\",\n \"3/2\": \"aspect-[3/2]\",\n \"1/1\": \"aspect-square\",\n }\n if (typeof v === \"number\") {\n // Auto-detect common ratios\n if (Math.abs(v - 16/9) < 0.01) return \"aspect-video\"\n if (Math.abs(v - 1) < 0.01) return \"aspect-square\"\n return `aspect-[${v}]`\n }\n return PRESETS[v] ?? `aspect-${v}`\n },\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Container Queries (@tailwindcss/container-queries / Tailwind v4 built-in)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load container query props.\n * Built into Tailwind v4.\n *\n * @example\n * loadContainerQueryPlugin()\n *\n * <div container>...</div> → @container\n * <div cq=\"sm\">...</div> → @sm:... (mark as container query target)\n * <div containerName=\"main\"> → @container/main\n */\nexport function loadContainerQueryPlugin(): void {\n registerPlugin({\n name: \"container-queries\",\n props: {\n container: (v: any) => v === true ? \"@container\" : `@container/${v}`,\n containerName: (v: any) => `@container/${v}`,\n cq: (v: any) => v ? `@${v}:block` : \"\",\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Enhanced Animations (Tailwind v4 built-in)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load enhanced animation props for Tailwind v4.\n *\n * @example\n * loadAnimationPlugin()\n *\n * <div enterAnim=\"fade-up\" /> → animate-in fade-in slide-in-from-bottom-4\n * <div exitAnim=\"fade-down\" /> → animate-out fade-out slide-out-to-bottom-4\n * <div animDuration={300} /> → duration-300\n */\nexport function loadAnimationPlugin(): void {\n registerPlugin({\n name: \"animations-v4\",\n props: {\n // Enter animations (Tailwind v4 animate-in API)\n enterAnim: (v: any) => {\n const map: Record<string, string> = {\n \"fade\": \"animate-in fade-in\",\n \"fade-up\": \"animate-in fade-in slide-in-from-bottom-4\",\n \"fade-down\": \"animate-in fade-in slide-in-from-top-4\",\n \"fade-left\": \"animate-in fade-in slide-in-from-right-4\",\n \"fade-right\": \"animate-in fade-in slide-in-from-left-4\",\n \"zoom\": \"animate-in zoom-in-95\",\n \"slide-up\": \"animate-in slide-in-from-bottom-4\",\n \"slide-down\": \"animate-in slide-in-from-top-4\",\n \"spin-in\": \"animate-in spin-in-180\",\n }\n return map[v] ?? `animate-in ${v}`\n },\n\n // Exit animations\n exitAnim: (v: any) => {\n const map: Record<string, string> = {\n \"fade\": \"animate-out fade-out\",\n \"fade-up\": \"animate-out fade-out slide-out-to-top-4\",\n \"fade-down\": \"animate-out fade-out slide-out-to-bottom-4\",\n \"zoom\": \"animate-out zoom-out-95\",\n \"slide-up\": \"animate-out slide-out-to-top-4\",\n \"slide-down\": \"animate-out slide-out-to-bottom-4\",\n }\n return map[v] ?? `animate-out ${v}`\n },\n\n // Animation fill mode\n animFill: (v: any) => `fill-mode-${v}`,\n animDuration: (v: any) => `duration-${v}`,\n animDelay: (v: any) => `delay-${v}`,\n animRepeat: (v: any) => v === \"infinite\" ? \"repeat-infinite\" : `repeat-${v}`,\n animDirection:(v: any) => `direction-${v}`,\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Interactivity (hover, focus, active state utilities)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load interactivity plugin.\n * Shorthand props untuk common hover/focus/active patterns.\n *\n * @example\n * loadInteractivityPlugin()\n *\n * <div hoverBg=\"zinc-800\" /> → hover:bg-zinc-800\n * <div focusRing=\"blue-500\" /> → focus-visible:ring-2 focus-visible:ring-blue-500\n * <div activeScale /> → active:scale-95\n */\nexport function loadInteractivityPlugin(): void {\n registerPlugin({\n name: \"interactivity\",\n props: {\n hoverBg: (v: any) => `hover:bg-${resolveColor(String(v))}`,\n hoverText: (v: any) => `hover:text-${resolveColor(String(v))}`,\n hoverBorder: (v: any) => `hover:border-${resolveColor(String(v))}`,\n hoverShadow: (v: any) => `hover:shadow-${v}`,\n hoverOpacity:(v: any) => `hover:opacity-${v}`,\n hoverScale: (v: any) => v === true ? \"hover:scale-105\" : `hover:scale-${v}`,\n\n focusRing: (v: any) => v === true\n ? \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\"\n : `focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-${v} focus-visible:ring-offset-2`,\n focusBg: (v: any) => `focus:bg-${v}`,\n\n activeScale: (v: any) => v === true ? \"active:scale-95\" : `active:scale-${v}`,\n activeBg: (v: any) => `active:bg-${v}`,\n activeOpacity:(v: any) => `active:opacity-${v}`,\n\n groupHoverBg: (v: any) => `group-hover:bg-${resolveColor(String(v))}`,\n groupHoverText: (v: any) => `group-hover:text-${v}`,\n groupHoverScale:(v: any) => `group-hover:scale-${v}`,\n peerCheckedBg: (v: any) => `peer-checked:bg-${v}`,\n }\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Load all v4-compatible plugins at once\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Load all Tailwind v4 plugin helpers at once.\n *\n * @example\n * import { loadAllV4Plugins } from \"tailwind-styled-v4\"\n * loadAllV4Plugins()\n */\nexport function loadAllV4Plugins(): void {\n loadTypographyPlugin()\n loadFormsPlugin()\n loadAspectPlugin()\n loadContainerQueryPlugin()\n loadAnimationPlugin()\n loadInteractivityPlugin()\n}\n"]}
|