tw-mrg 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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/groups/types.ts","../src/cache.ts","../src/groups/layout.ts","../src/groups/spacing.ts","../src/groups/sizing.ts","../src/groups/flexbox-grid.ts","../src/groups/typography.ts","../src/groups/colors.ts","../src/groups/backgrounds.ts","../src/groups/borders.ts","../src/groups/effects.ts","../src/groups/transforms.ts","../src/groups/transitions.ts","../src/groups/interactivity.ts","../src/groups/svg.ts","../src/groups/accessibility.ts","../src/groups/tables.ts","../src/groups/masks.ts","../src/groups/full.ts","../src/groups/minimal.ts","../src/trie.ts","../src/class-groups.ts","../src/parser.ts","../src/resolver.ts","../src/create-tw.ts","../src/tw.ts","../src/tw-join.ts","../src/css-generator.ts","../src/style-injector.ts","../src/tw-prefix.ts","../src/tw-states.ts","../src/tw-debug.ts"],"sourcesContent":["/**\n * Specificity levels for composite class handling.\n * Higher numbers = more specific = won't be overridden by lower.\n */\n\nexport const SPECIFICITY = {\n /** All sides (p-4, m-4, rounded) */\n ALL: 1,\n /** Axis (px-4, my-4, rounded-t) */\n AXIS: 2,\n /** Single side (pt-4, mr-4, rounded-tl) */\n SIDE: 3,\n /** Arbitrary values are highly specific */\n ARBITRARY: 10,\n} as const\n\n/**\n * A prefix entry for the trie-based classifier.\n */\n\nexport interface PrefixEntry {\n /** The group ID this prefix maps to */\n groupId: string\n /** Specificity level for this prefix */\n specificity: number\n}\n\n/**\n * Conflict mapping from a group ID to groups it overrides.\n */\n\nexport type ConflictMap = Record<string, string[]>\n\n/**\n * A complete class group configuration.\n */\n\nexport interface ClassGroupConfig {\n /** Prefix-to-group mappings for trie lookup */\n prefixes: Record<string, PrefixEntry>\n /** Exact match mappings for standalone classes */\n exactMatches: Record<string, PrefixEntry>\n /** Regex patterns for complex matching (fallback) */\n patterns: Array<{ pattern: RegExp; groupId: string; specificity: number }>\n /** Conflict mappings */\n conflicts: ConflictMap\n}\n\n/**\n * Creates a prefix entry with default specificity.\n */\n\nexport function prefix(groupId: string, specificity = 1): PrefixEntry {\n return { groupId, specificity }\n}\n\n/**\n * Merges multiple class group configs into one.\n */\n\nexport function mergeConfigs(...configs: ClassGroupConfig[]): ClassGroupConfig {\n const merged: ClassGroupConfig = {\n prefixes: {},\n exactMatches: {},\n patterns: [],\n conflicts: {},\n }\n\n for (const config of configs) {\n Object.assign(merged.prefixes, config.prefixes)\n Object.assign(merged.exactMatches, config.exactMatches)\n merged.patterns.push(...config.patterns)\n // Merge conflicts, combining arrays for same keys\n for (const [key, values] of Object.entries(config.conflicts)) {\n if (key in merged.conflicts) {\n merged.conflicts[key] = [...new Set([...merged.conflicts[key], ...values])]\n } else {\n merged.conflicts[key] = [...values]\n }\n }\n }\n\n return merged\n}\n\n/**\n * Hierarchy definition for generating bidirectional conflicts.\n * Structure: base -> { axis -> sides[] }\n * Sides can be suffixes (appended as base-side) or full names (used as-is if prefixed with @)\n */\n\nexport interface ConflictHierarchy {\n [base: string]: {\n x?: string[]\n y?: string[]\n [axis: string]: string[] | undefined\n }\n}\n\n/**\n * Auto-generates bidirectional conflict maps from a hierarchy definition.\n * This reduces manual conflict definitions significantly.\n *\n * @param hierarchy - The hierarchy definition\n * @param fullSideNames - If true, sides are used as full group names (not prefixed with base-)\n *\n * @example\n * // Standard: sides are suffixes\n * generateConflicts({ padding: { x: ['l', 'r'], y: ['t', 'b'] } })\n * // → padding-l, padding-r, padding-t, padding-b\n *\n * @example\n * // Full names: sides are complete group names\n * generateConflicts({ inset: { x: ['left', 'right'], y: ['top', 'bottom'] } }, true)\n * // → left, right, top, bottom (not inset-left, inset-right)\n */\n\nexport function generateConflicts(hierarchy: ConflictHierarchy, fullSideNames = false): ConflictMap {\n const conflicts: ConflictMap = {}\n\n for (const [base, axes] of Object.entries(hierarchy)) {\n // Collect all descendant groups\n const allGroups: string[] = [base]\n const sideToAxis = new Map<string, string>()\n\n for (const [axis, sides] of Object.entries(axes)) {\n if (!sides || sides.length === 0) continue\n const axisGroup = `${base}-${axis}`\n allGroups.push(axisGroup)\n\n for (const side of sides) {\n const sideGroup = fullSideNames ? side : `${base}-${side}`\n allGroups.push(sideGroup)\n sideToAxis.set(sideGroup, axisGroup)\n }\n }\n\n // Base conflicts with everything\n conflicts[base] = [...allGroups]\n\n // Each axis conflicts with base, itself, and its sides\n for (const [axis, sides] of Object.entries(axes)) {\n if (!sides || sides.length === 0) continue\n const axisGroup = `${base}-${axis}`\n const sideGroups = sides.map(s => fullSideNames ? s : `${base}-${s}`)\n conflicts[axisGroup] = [base, axisGroup, ...sideGroups]\n }\n\n // Each side conflicts with base, its axis, and itself\n for (const [axis, sides] of Object.entries(axes)) {\n if (!sides || sides.length === 0) continue\n const axisGroup = `${base}-${axis}`\n for (const side of sides) {\n const sideGroup = fullSideNames ? side : `${base}-${side}`\n conflicts[sideGroup] = [base, axisGroup, sideGroup]\n }\n }\n }\n\n return conflicts\n}\n\n/**\n * Creates simple self-referencing conflicts for groups that don't have hierarchy.\n */\n\nexport function simpleConflicts(...groupIds: string[]): ConflictMap {\n const conflicts: ConflictMap = {}\n for (const id of groupIds) {\n conflicts[id] = [id]\n }\n return conflicts\n}\n","import type { Cache, ClassToken } from './types'\n\n/**\n * Simplified LRU (Least Recently Used) cache using ES6 Map's insertion order.\n *\n * ES6 Maps maintain insertion order, so we can implement LRU by:\n * - On get: delete and re-set to move item to end (most recent)\n * - On set: add to end, delete from beginning if over capacity\n *\n * This is simpler than a doubly-linked list implementation and\n * leverages highly optimized native Map operations.\n *\n * - get: O(1) amortized\n * - set: O(1) amortized\n * - has: O(1)\n */\n\nclass LRUCache<K, V> implements Cache<K, V> {\n private cache = new Map<K, V>()\n private readonly maxSize: number\n\n constructor(maxSize = 500) {\n this.maxSize = maxSize\n }\n\n /** Gets a value, moving it to most recently used position. */\n get(key: K): V | undefined {\n const value = this.cache.get(key)\n if (value === undefined) {\n return undefined\n }\n // Move to end (most recently used) by delete + set\n this.cache.delete(key)\n this.cache.set(key, value)\n return value\n }\n\n /** Sets a value, evicting the oldest entry if at capacity. */\n set(key: K, value: V): void {\n // Delete first so re-setting moves existing key to end (no-op if key doesn't exist)\n this.cache.delete(key)\n this.cache.set(key, value)\n\n // Evict oldest (first item) if over capacity\n if (this.cache.size > this.maxSize) {\n // Map.keys().next().value gets the first (oldest) key\n const oldestKey = this.cache.keys().next().value\n if (oldestKey !== undefined) {\n this.cache.delete(oldestKey)\n }\n }\n }\n\n has(key: K): boolean {\n return this.cache.has(key)\n }\n\n clear(): void {\n this.cache.clear()\n }\n\n get size(): number {\n return this.cache.size\n }\n}\n\n// Singleton caches for the default tw() function\nlet parseCache: LRUCache<string, ClassToken[]> | null = null\nlet mergeCache: LRUCache<string, string> | null = null\n\nfunction getParseCache(): LRUCache<string, ClassToken[]> {\n if (parseCache === null) {\n parseCache = new LRUCache<string, ClassToken[]>(1000)\n }\n return parseCache\n}\n\nfunction getMergeCache(): LRUCache<string, string> {\n if (mergeCache === null) {\n mergeCache = new LRUCache<string, string>(500)\n }\n return mergeCache\n}\n\nfunction clearCaches(): void {\n parseCache?.clear()\n mergeCache?.clear()\n}\n\n/**\n * Returns current cache statistics for debugging/monitoring.\n *\n * @example\n * ```ts\n * const stats = getCacheStats()\n * console.log(`Parse cache: ${stats.parseSize}, Merge cache: ${stats.mergeSize}`)\n * ```\n */\n\nfunction getCacheStats(): { parseSize: number; mergeSize: number } {\n return {\n parseSize: parseCache?.size ?? 0,\n mergeSize: mergeCache?.size ?? 0,\n }\n}\n\nexport { LRUCache, getParseCache, getMergeCache, clearCaches, getCacheStats }\n","import type { ClassGroupConfig } from './types'\nimport { prefix, SPECIFICITY, generateConflicts, simpleConflicts } from './types'\n\n// Hierarchies for auto-generating conflicts\nconst LAYOUT_HIERARCHY = {\n overflow: { x: [], y: [] },\n overscroll: { x: [], y: [] },\n}\n\n// Inset uses full side names (top, right, etc.) instead of inset-t, inset-r\nconst INSET_HIERARCHY = {\n inset: { x: ['left', 'right', 'start', 'end'], y: ['top', 'bottom'] },\n}\n\n/**\n * Layout-related class groups: display, position, visibility, float, etc.\n */\n\nexport const layoutGroups: ClassGroupConfig = {\n prefixes: {\n // Aspect ratio\n 'aspect-': prefix('aspect-ratio'),\n\n // Columns\n 'columns-': prefix('columns'),\n\n // Container\n '@container': prefix('container'),\n\n // Position\n 'inset-': prefix('inset', SPECIFICITY.ALL),\n '-inset-': prefix('inset', SPECIFICITY.ALL),\n 'inset-x-': prefix('inset-x', SPECIFICITY.AXIS),\n '-inset-x-': prefix('inset-x', SPECIFICITY.AXIS),\n 'inset-y-': prefix('inset-y', SPECIFICITY.AXIS),\n '-inset-y-': prefix('inset-y', SPECIFICITY.AXIS),\n 'top-': prefix('top', SPECIFICITY.SIDE),\n '-top-': prefix('top', SPECIFICITY.SIDE),\n 'right-': prefix('right', SPECIFICITY.SIDE),\n '-right-': prefix('right', SPECIFICITY.SIDE),\n 'bottom-': prefix('bottom', SPECIFICITY.SIDE),\n '-bottom-': prefix('bottom', SPECIFICITY.SIDE),\n 'left-': prefix('left', SPECIFICITY.SIDE),\n '-left-': prefix('left', SPECIFICITY.SIDE),\n 'start-': prefix('start', SPECIFICITY.SIDE),\n '-start-': prefix('start', SPECIFICITY.SIDE),\n 'end-': prefix('end', SPECIFICITY.SIDE),\n '-end-': prefix('end', SPECIFICITY.SIDE),\n\n // Z-index\n 'z-': prefix('z-index'),\n '-z-': prefix('z-index'),\n\n // Float & Clear\n 'float-': prefix('float'),\n 'clear-': prefix('clear'),\n\n // Object fit/position\n 'object-': prefix('object-fit'), // Will be refined by exact matches\n\n // Overflow\n 'overflow-': prefix('overflow', SPECIFICITY.ALL),\n 'overflow-x-': prefix('overflow-x', SPECIFICITY.AXIS),\n 'overflow-y-': prefix('overflow-y', SPECIFICITY.AXIS),\n\n // Overscroll\n 'overscroll-': prefix('overscroll', SPECIFICITY.ALL),\n 'overscroll-x-': prefix('overscroll-x', SPECIFICITY.AXIS),\n 'overscroll-y-': prefix('overscroll-y', SPECIFICITY.AXIS),\n },\n\n exactMatches: {\n // Aspect ratio\n 'aspect-auto': prefix('aspect-ratio'),\n 'aspect-square': prefix('aspect-ratio'),\n 'aspect-video': prefix('aspect-ratio'),\n\n // Container\n container: prefix('container'),\n '@container': prefix('container'),\n\n // Columns\n 'columns-auto': prefix('columns'),\n\n // CSS Containment\n 'contain-none': prefix('contain'),\n 'contain-content': prefix('contain'),\n 'contain-strict': prefix('contain'),\n 'contain-size': prefix('contain'),\n 'contain-inline-size': prefix('contain'),\n 'contain-layout': prefix('contain'),\n 'contain-style': prefix('contain'),\n 'contain-paint': prefix('contain'),\n\n // Field sizing (new in v4)\n 'field-sizing-content': prefix('field-sizing'),\n 'field-sizing-fixed': prefix('field-sizing'),\n\n // Break before\n 'break-before-auto': prefix('break-before'),\n 'break-before-avoid': prefix('break-before'),\n 'break-before-all': prefix('break-before'),\n 'break-before-avoid-page': prefix('break-before'),\n 'break-before-page': prefix('break-before'),\n 'break-before-left': prefix('break-before'),\n 'break-before-right': prefix('break-before'),\n 'break-before-column': prefix('break-before'),\n\n // Break after\n 'break-after-auto': prefix('break-after'),\n 'break-after-avoid': prefix('break-after'),\n 'break-after-all': prefix('break-after'),\n 'break-after-avoid-page': prefix('break-after'),\n 'break-after-page': prefix('break-after'),\n 'break-after-left': prefix('break-after'),\n 'break-after-right': prefix('break-after'),\n 'break-after-column': prefix('break-after'),\n\n // Break inside\n 'break-inside-auto': prefix('break-inside'),\n 'break-inside-avoid': prefix('break-inside'),\n 'break-inside-avoid-page': prefix('break-inside'),\n 'break-inside-avoid-column': prefix('break-inside'),\n\n // Color scheme\n 'scheme-normal': prefix('color-scheme'),\n 'scheme-dark': prefix('color-scheme'),\n 'scheme-light': prefix('color-scheme'),\n 'scheme-light-dark': prefix('color-scheme'),\n 'scheme-dark-light': prefix('color-scheme'),\n 'scheme-only-dark': prefix('color-scheme'),\n 'scheme-only-light': prefix('color-scheme'),\n\n // Display\n block: prefix('display'),\n 'inline-block': prefix('display'),\n inline: prefix('display'),\n flex: prefix('display'),\n 'inline-flex': prefix('display'),\n table: prefix('display'),\n 'inline-table': prefix('display'),\n 'table-caption': prefix('display'),\n 'table-cell': prefix('display'),\n 'table-column': prefix('display'),\n 'table-column-group': prefix('display'),\n 'table-footer-group': prefix('display'),\n 'table-header-group': prefix('display'),\n 'table-row-group': prefix('display'),\n 'table-row': prefix('display'),\n 'flow-root': prefix('display'),\n grid: prefix('display'),\n 'inline-grid': prefix('display'),\n contents: prefix('display'),\n 'list-item': prefix('display'),\n hidden: prefix('display'),\n\n // Position\n static: prefix('position'),\n fixed: prefix('position'),\n absolute: prefix('position'),\n relative: prefix('position'),\n sticky: prefix('position'),\n\n // Visibility\n visible: prefix('visibility'),\n invisible: prefix('visibility'),\n collapse: prefix('visibility'),\n\n // Isolation\n isolate: prefix('isolation'),\n 'isolation-auto': prefix('isolation'),\n\n // Object fit\n 'object-contain': prefix('object-fit'),\n 'object-cover': prefix('object-fit'),\n 'object-fill': prefix('object-fit'),\n 'object-none': prefix('object-fit'),\n 'object-scale-down': prefix('object-fit'),\n\n // Object position\n 'object-bottom': prefix('object-position'),\n 'object-center': prefix('object-position'),\n 'object-left': prefix('object-position'),\n 'object-left-bottom': prefix('object-position'),\n 'object-left-top': prefix('object-position'),\n 'object-right': prefix('object-position'),\n 'object-right-bottom': prefix('object-position'),\n 'object-right-top': prefix('object-position'),\n 'object-top': prefix('object-position'),\n\n // Overflow exact\n 'overflow-auto': prefix('overflow', SPECIFICITY.ALL),\n 'overflow-hidden': prefix('overflow', SPECIFICITY.ALL),\n 'overflow-clip': prefix('overflow', SPECIFICITY.ALL),\n 'overflow-visible': prefix('overflow', SPECIFICITY.ALL),\n 'overflow-scroll': prefix('overflow', SPECIFICITY.ALL),\n },\n\n patterns: [],\n\n conflicts: {\n ...simpleConflicts(\n 'aspect-ratio', 'columns', 'container', 'display', 'position',\n 'visibility', 'isolation', 'float', 'clear', 'object-fit',\n 'object-position', 'z-index', 'contain', 'field-sizing',\n 'break-before', 'break-after', 'break-inside', 'color-scheme'\n ),\n ...generateConflicts(LAYOUT_HIERARCHY),\n ...generateConflicts(INSET_HIERARCHY, true), // Use full side names\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, SPECIFICITY, generateConflicts, simpleConflicts } from './types'\n\n// Define hierarchy for auto-generating conflicts\nconst SPACING_HIERARCHY = {\n padding: { x: ['l', 'r', 's', 'e'], y: ['t', 'b'] },\n margin: { x: ['l', 'r', 's', 'e'], y: ['t', 'b'] },\n gap: { x: [], y: [] },\n}\n\n/**\n * Spacing-related class groups: padding, margin, gap, space.\n */\n\nexport const spacingGroups: ClassGroupConfig = {\n prefixes: {\n // Padding\n 'p-': prefix('padding', SPECIFICITY.ALL),\n 'px-': prefix('padding-x', SPECIFICITY.AXIS),\n 'py-': prefix('padding-y', SPECIFICITY.AXIS),\n 'pt-': prefix('padding-t', SPECIFICITY.SIDE),\n 'pr-': prefix('padding-r', SPECIFICITY.SIDE),\n 'pb-': prefix('padding-b', SPECIFICITY.SIDE),\n 'pl-': prefix('padding-l', SPECIFICITY.SIDE),\n 'ps-': prefix('padding-s', SPECIFICITY.SIDE),\n 'pe-': prefix('padding-e', SPECIFICITY.SIDE),\n\n // Margin\n 'm-': prefix('margin', SPECIFICITY.ALL),\n '-m-': prefix('margin', SPECIFICITY.ALL),\n 'mx-': prefix('margin-x', SPECIFICITY.AXIS),\n '-mx-': prefix('margin-x', SPECIFICITY.AXIS),\n 'my-': prefix('margin-y', SPECIFICITY.AXIS),\n '-my-': prefix('margin-y', SPECIFICITY.AXIS),\n 'mt-': prefix('margin-t', SPECIFICITY.SIDE),\n '-mt-': prefix('margin-t', SPECIFICITY.SIDE),\n 'mr-': prefix('margin-r', SPECIFICITY.SIDE),\n '-mr-': prefix('margin-r', SPECIFICITY.SIDE),\n 'mb-': prefix('margin-b', SPECIFICITY.SIDE),\n '-mb-': prefix('margin-b', SPECIFICITY.SIDE),\n 'ml-': prefix('margin-l', SPECIFICITY.SIDE),\n '-ml-': prefix('margin-l', SPECIFICITY.SIDE),\n 'ms-': prefix('margin-s', SPECIFICITY.SIDE),\n '-ms-': prefix('margin-s', SPECIFICITY.SIDE),\n 'me-': prefix('margin-e', SPECIFICITY.SIDE),\n '-me-': prefix('margin-e', SPECIFICITY.SIDE),\n\n // Gap\n 'gap-': prefix('gap', SPECIFICITY.ALL),\n 'gap-x-': prefix('gap-x', SPECIFICITY.AXIS),\n 'gap-y-': prefix('gap-y', SPECIFICITY.AXIS),\n\n // Space between\n 'space-x-': prefix('space-x'),\n '-space-x-': prefix('space-x'),\n 'space-y-': prefix('space-y'),\n '-space-y-': prefix('space-y'),\n },\n\n exactMatches: {\n 'space-x-reverse': prefix('space-x-reverse'),\n 'space-y-reverse': prefix('space-y-reverse'),\n },\n\n patterns: [],\n\n conflicts: {\n ...generateConflicts(SPACING_HIERARCHY),\n ...simpleConflicts('space-x', 'space-y', 'space-x-reverse', 'space-y-reverse'),\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, SPECIFICITY } from './types'\n\n/**\n * Sizing-related class groups: width, height, min/max, size.\n */\n\nexport const sizingGroups: ClassGroupConfig = {\n prefixes: {\n // Width\n 'w-': prefix('width'),\n 'min-w-': prefix('min-width'),\n 'max-w-': prefix('max-width'),\n\n // Height\n 'h-': prefix('height'),\n 'min-h-': prefix('min-height'),\n 'max-h-': prefix('max-height'),\n\n // Size (width + height shorthand)\n 'size-': prefix('size', SPECIFICITY.ALL),\n },\n\n exactMatches: {},\n\n patterns: [],\n\n conflicts: {\n width: ['width'],\n 'min-width': ['min-width'],\n 'max-width': ['max-width'],\n height: ['height'],\n 'min-height': ['min-height'],\n 'max-height': ['max-height'],\n size: ['size', 'width', 'height'],\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n/**\n * Flexbox and Grid class groups.\n */\n\nexport const flexboxGridGroups: ClassGroupConfig = {\n prefixes: {\n // Flex basis\n 'basis-': prefix('flex-basis'),\n\n // Order\n 'order-': prefix('order'),\n '-order-': prefix('order'),\n\n // Grid template\n 'grid-cols-': prefix('grid-template-columns'),\n 'grid-rows-': prefix('grid-template-rows'),\n\n // Grid column\n 'col-': prefix('grid-column'),\n 'col-start-': prefix('grid-column-start'),\n 'col-end-': prefix('grid-column-end'),\n\n // Grid row\n 'row-': prefix('grid-row'),\n 'row-start-': prefix('grid-row-start'),\n 'row-end-': prefix('grid-row-end'),\n\n // Grid auto\n 'auto-cols-': prefix('grid-auto-columns'),\n 'auto-rows-': prefix('grid-auto-rows'),\n },\n\n exactMatches: {\n // Flex direction\n 'flex-row': prefix('flex-direction'),\n 'flex-row-reverse': prefix('flex-direction'),\n 'flex-col': prefix('flex-direction'),\n 'flex-col-reverse': prefix('flex-direction'),\n\n // Flex wrap\n 'flex-wrap': prefix('flex-wrap'),\n 'flex-wrap-reverse': prefix('flex-wrap'),\n 'flex-nowrap': prefix('flex-wrap'),\n\n // Flex\n 'flex-1': prefix('flex'),\n 'flex-auto': prefix('flex'),\n 'flex-initial': prefix('flex'),\n 'flex-none': prefix('flex'),\n\n // Grow / Shrink\n grow: prefix('flex-grow'),\n 'grow-0': prefix('flex-grow'),\n shrink: prefix('flex-shrink'),\n 'shrink-0': prefix('flex-shrink'),\n\n // Order\n 'order-none': prefix('order'),\n 'order-first': prefix('order'),\n 'order-last': prefix('order'),\n\n // Grid auto flow\n 'grid-flow-row': prefix('grid-auto-flow'),\n 'grid-flow-col': prefix('grid-auto-flow'),\n 'grid-flow-dense': prefix('grid-auto-flow'),\n 'grid-flow-row-dense': prefix('grid-auto-flow'),\n 'grid-flow-col-dense': prefix('grid-auto-flow'),\n\n // Justify content\n 'justify-normal': prefix('justify-content'),\n 'justify-start': prefix('justify-content'),\n 'justify-end': prefix('justify-content'),\n 'justify-center': prefix('justify-content'),\n 'justify-between': prefix('justify-content'),\n 'justify-around': prefix('justify-content'),\n 'justify-evenly': prefix('justify-content'),\n 'justify-stretch': prefix('justify-content'),\n 'justify-baseline': prefix('justify-content'),\n // Safe alignment\n 'justify-start-safe': prefix('justify-content'),\n 'justify-end-safe': prefix('justify-content'),\n 'justify-center-safe': prefix('justify-content'),\n\n // Justify items\n 'justify-items-start': prefix('justify-items'),\n 'justify-items-end': prefix('justify-items'),\n 'justify-items-center': prefix('justify-items'),\n 'justify-items-stretch': prefix('justify-items'),\n // Safe alignment\n 'justify-items-start-safe': prefix('justify-items'),\n 'justify-items-end-safe': prefix('justify-items'),\n 'justify-items-center-safe': prefix('justify-items'),\n\n // Justify self\n 'justify-self-auto': prefix('justify-self'),\n 'justify-self-start': prefix('justify-self'),\n 'justify-self-end': prefix('justify-self'),\n 'justify-self-center': prefix('justify-self'),\n 'justify-self-stretch': prefix('justify-self'),\n // Safe alignment\n 'justify-self-start-safe': prefix('justify-self'),\n 'justify-self-end-safe': prefix('justify-self'),\n 'justify-self-center-safe': prefix('justify-self'),\n\n // Align content\n 'content-normal': prefix('align-content'),\n 'content-center': prefix('align-content'),\n 'content-start': prefix('align-content'),\n 'content-end': prefix('align-content'),\n 'content-between': prefix('align-content'),\n 'content-around': prefix('align-content'),\n 'content-evenly': prefix('align-content'),\n 'content-baseline': prefix('align-content'),\n 'content-stretch': prefix('align-content'),\n // Safe alignment\n 'content-start-safe': prefix('align-content'),\n 'content-end-safe': prefix('align-content'),\n 'content-center-safe': prefix('align-content'),\n\n // Align items\n 'items-start': prefix('align-items'),\n 'items-end': prefix('align-items'),\n 'items-center': prefix('align-items'),\n 'items-baseline': prefix('align-items'),\n 'items-baseline-last': prefix('align-items'),\n 'items-stretch': prefix('align-items'),\n // Safe alignment\n 'items-start-safe': prefix('align-items'),\n 'items-end-safe': prefix('align-items'),\n 'items-center-safe': prefix('align-items'),\n\n // Align self\n 'self-auto': prefix('align-self'),\n 'self-start': prefix('align-self'),\n 'self-end': prefix('align-self'),\n 'self-center': prefix('align-self'),\n 'self-stretch': prefix('align-self'),\n 'self-baseline': prefix('align-self'),\n // Safe alignment\n 'self-start-safe': prefix('align-self'),\n 'self-end-safe': prefix('align-self'),\n 'self-center-safe': prefix('align-self'),\n\n // Place content\n 'place-content-center': prefix('place-content'),\n 'place-content-start': prefix('place-content'),\n 'place-content-end': prefix('place-content'),\n 'place-content-between': prefix('place-content'),\n 'place-content-around': prefix('place-content'),\n 'place-content-evenly': prefix('place-content'),\n 'place-content-baseline': prefix('place-content'),\n 'place-content-stretch': prefix('place-content'),\n // Safe alignment\n 'place-content-start-safe': prefix('place-content'),\n 'place-content-end-safe': prefix('place-content'),\n 'place-content-center-safe': prefix('place-content'),\n\n // Place items\n 'place-items-start': prefix('place-items'),\n 'place-items-end': prefix('place-items'),\n 'place-items-center': prefix('place-items'),\n 'place-items-baseline': prefix('place-items'),\n 'place-items-stretch': prefix('place-items'),\n // Safe alignment\n 'place-items-start-safe': prefix('place-items'),\n 'place-items-end-safe': prefix('place-items'),\n 'place-items-center-safe': prefix('place-items'),\n\n // Place self\n 'place-self-auto': prefix('place-self'),\n 'place-self-start': prefix('place-self'),\n 'place-self-end': prefix('place-self'),\n 'place-self-center': prefix('place-self'),\n 'place-self-stretch': prefix('place-self'),\n // Safe alignment\n 'place-self-start-safe': prefix('place-self'),\n 'place-self-end-safe': prefix('place-self'),\n 'place-self-center-safe': prefix('place-self'),\n },\n\n patterns: [\n // Arbitrary flex values\n { pattern: /^flex-\\[/, groupId: 'flex', specificity: 1 },\n { pattern: /^grow-\\[/, groupId: 'flex-grow', specificity: 1 },\n { pattern: /^shrink-\\[/, groupId: 'flex-shrink', specificity: 1 },\n ],\n\n conflicts: {\n // Grid column/row have hierarchical conflicts\n 'grid-column': ['grid-column', 'grid-column-start', 'grid-column-end'],\n 'grid-row': ['grid-row', 'grid-row-start', 'grid-row-end'],\n ...simpleConflicts(\n 'flex-basis', 'flex-direction', 'flex-wrap', 'flex', 'flex-grow', 'flex-shrink',\n 'order', 'grid-template-columns', 'grid-template-rows',\n 'grid-column-start', 'grid-column-end', 'grid-row-start', 'grid-row-end',\n 'grid-auto-flow', 'grid-auto-columns', 'grid-auto-rows',\n 'justify-content', 'justify-items', 'justify-self',\n 'align-content', 'align-items', 'align-self',\n 'place-content', 'place-items', 'place-self'\n ),\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix } from './types'\n\n/**\n * Typography-related class groups: font, text, leading, tracking, etc.\n */\n\nexport const typographyGroups: ClassGroupConfig = {\n prefixes: {\n // Letter spacing\n 'tracking-': prefix('letter-spacing'),\n\n // Line height\n 'leading-': prefix('line-height'),\n\n // Line clamp\n 'line-clamp-': prefix('line-clamp'),\n\n // Text indent\n 'indent-': prefix('text-indent'),\n\n // List image\n 'list-image-': prefix('list-image'),\n\n // Text decoration\n 'decoration-': prefix('text-decoration-color'), // Refined by exact matches\n\n // Underline offset\n 'underline-offset-': prefix('text-underline-offset'),\n\n // Content\n 'content-': prefix('content'),\n },\n\n exactMatches: {\n // Font family\n 'font-sans': prefix('font-family'),\n 'font-serif': prefix('font-family'),\n 'font-mono': prefix('font-family'),\n\n // Font size\n 'text-xs': prefix('font-size'),\n 'text-sm': prefix('font-size'),\n 'text-base': prefix('font-size'),\n 'text-lg': prefix('font-size'),\n 'text-xl': prefix('font-size'),\n 'text-2xl': prefix('font-size'),\n 'text-3xl': prefix('font-size'),\n 'text-4xl': prefix('font-size'),\n 'text-5xl': prefix('font-size'),\n 'text-6xl': prefix('font-size'),\n 'text-7xl': prefix('font-size'),\n 'text-8xl': prefix('font-size'),\n 'text-9xl': prefix('font-size'),\n\n // Font smoothing\n antialiased: prefix('font-smoothing'),\n 'subpixel-antialiased': prefix('font-smoothing'),\n\n // Font style\n italic: prefix('font-style'),\n 'not-italic': prefix('font-style'),\n\n // Font weight\n 'font-thin': prefix('font-weight'),\n 'font-extralight': prefix('font-weight'),\n 'font-light': prefix('font-weight'),\n 'font-normal': prefix('font-weight'),\n 'font-medium': prefix('font-weight'),\n 'font-semibold': prefix('font-weight'),\n 'font-bold': prefix('font-weight'),\n 'font-extrabold': prefix('font-weight'),\n 'font-black': prefix('font-weight'),\n\n // Font variant numeric\n 'normal-nums': prefix('font-variant-numeric'),\n ordinal: prefix('font-variant-numeric'),\n 'slashed-zero': prefix('font-variant-numeric'),\n 'lining-nums': prefix('font-variant-numeric'),\n 'oldstyle-nums': prefix('font-variant-numeric'),\n 'proportional-nums': prefix('font-variant-numeric'),\n 'tabular-nums': prefix('font-variant-numeric'),\n 'diagonal-fractions': prefix('font-variant-numeric'),\n 'stacked-fractions': prefix('font-variant-numeric'),\n\n // Font stretch\n 'font-stretch-normal': prefix('font-stretch'),\n 'font-stretch-ultra-condensed': prefix('font-stretch'),\n 'font-stretch-extra-condensed': prefix('font-stretch'),\n 'font-stretch-condensed': prefix('font-stretch'),\n 'font-stretch-semi-condensed': prefix('font-stretch'),\n 'font-stretch-semi-expanded': prefix('font-stretch'),\n 'font-stretch-expanded': prefix('font-stretch'),\n 'font-stretch-extra-expanded': prefix('font-stretch'),\n 'font-stretch-ultra-expanded': prefix('font-stretch'),\n\n // List style position\n 'list-inside': prefix('list-style-position'),\n 'list-outside': prefix('list-style-position'),\n\n // List style type\n 'list-none': prefix('list-style-type'),\n 'list-disc': prefix('list-style-type'),\n 'list-decimal': prefix('list-style-type'),\n\n // Text align\n 'text-left': prefix('text-align'),\n 'text-center': prefix('text-align'),\n 'text-right': prefix('text-align'),\n 'text-justify': prefix('text-align'),\n 'text-start': prefix('text-align'),\n 'text-end': prefix('text-align'),\n\n // Text decoration\n underline: prefix('text-decoration'),\n overline: prefix('text-decoration'),\n 'line-through': prefix('text-decoration'),\n 'no-underline': prefix('text-decoration'),\n\n // Text decoration style\n 'decoration-solid': prefix('text-decoration-style'),\n 'decoration-double': prefix('text-decoration-style'),\n 'decoration-dotted': prefix('text-decoration-style'),\n 'decoration-dashed': prefix('text-decoration-style'),\n 'decoration-wavy': prefix('text-decoration-style'),\n\n // Text decoration thickness\n 'decoration-auto': prefix('text-decoration-thickness'),\n 'decoration-from-font': prefix('text-decoration-thickness'),\n 'decoration-0': prefix('text-decoration-thickness'),\n 'decoration-1': prefix('text-decoration-thickness'),\n 'decoration-2': prefix('text-decoration-thickness'),\n 'decoration-4': prefix('text-decoration-thickness'),\n 'decoration-8': prefix('text-decoration-thickness'),\n\n // Text transform\n uppercase: prefix('text-transform'),\n lowercase: prefix('text-transform'),\n capitalize: prefix('text-transform'),\n 'normal-case': prefix('text-transform'),\n\n // Text overflow\n truncate: prefix('text-overflow'),\n 'text-ellipsis': prefix('text-overflow'),\n 'text-clip': prefix('text-overflow'),\n\n // Text wrap\n 'text-wrap': prefix('text-wrap'),\n 'text-nowrap': prefix('text-wrap'),\n 'text-balance': prefix('text-wrap'),\n 'text-pretty': prefix('text-wrap'),\n\n // Vertical align\n 'align-baseline': prefix('vertical-align'),\n 'align-top': prefix('vertical-align'),\n 'align-middle': prefix('vertical-align'),\n 'align-bottom': prefix('vertical-align'),\n 'align-text-top': prefix('vertical-align'),\n 'align-text-bottom': prefix('vertical-align'),\n 'align-sub': prefix('vertical-align'),\n 'align-super': prefix('vertical-align'),\n\n // Whitespace\n 'whitespace-normal': prefix('whitespace'),\n 'whitespace-nowrap': prefix('whitespace'),\n 'whitespace-pre': prefix('whitespace'),\n 'whitespace-pre-line': prefix('whitespace'),\n 'whitespace-pre-wrap': prefix('whitespace'),\n 'whitespace-break-spaces': prefix('whitespace'),\n\n // Word break\n 'break-normal': prefix('word-break'),\n 'break-words': prefix('word-break'),\n 'break-all': prefix('word-break'),\n 'break-keep': prefix('word-break'),\n\n // Hyphens\n 'hyphens-none': prefix('hyphens'),\n 'hyphens-manual': prefix('hyphens'),\n 'hyphens-auto': prefix('hyphens'),\n\n // Overflow wrap\n 'wrap-normal': prefix('overflow-wrap'),\n 'wrap-break-word': prefix('overflow-wrap'),\n 'wrap-anywhere': prefix('overflow-wrap'),\n },\n\n patterns: [\n // Font family arbitrary\n { pattern: /^font-\\[/, groupId: 'font-family', specificity: 1 },\n // Font weight numeric\n { pattern: /^font-\\d+$/, groupId: 'font-weight', specificity: 1 },\n // Tracking arbitrary\n { pattern: /^tracking-\\[/, groupId: 'letter-spacing', specificity: 1 },\n // Leading arbitrary\n { pattern: /^leading-\\[/, groupId: 'line-height', specificity: 1 },\n // List style arbitrary\n { pattern: /^list-\\[/, groupId: 'list-style-type', specificity: 1 },\n // Decoration arbitrary\n { pattern: /^decoration-\\[/, groupId: 'text-decoration-thickness', specificity: 1 },\n ],\n\n conflicts: {\n 'font-family': ['font-family'],\n 'font-size': ['font-size'],\n 'font-smoothing': ['font-smoothing'],\n 'font-style': ['font-style'],\n 'font-weight': ['font-weight'],\n 'font-variant-numeric': ['font-variant-numeric'],\n 'font-stretch': ['font-stretch'],\n 'letter-spacing': ['letter-spacing'],\n 'line-height': ['line-height'],\n 'line-clamp': ['line-clamp'],\n 'list-image': ['list-image'],\n 'list-style-position': ['list-style-position'],\n 'list-style-type': ['list-style-type'],\n 'text-align': ['text-align'],\n 'text-decoration': ['text-decoration'],\n 'text-decoration-color': ['text-decoration-color'],\n 'text-decoration-style': ['text-decoration-style'],\n 'text-decoration-thickness': ['text-decoration-thickness'],\n 'text-underline-offset': ['text-underline-offset'],\n 'text-transform': ['text-transform'],\n 'text-overflow': ['text-overflow'],\n 'text-wrap': ['text-wrap'],\n 'text-indent': ['text-indent'],\n 'vertical-align': ['vertical-align'],\n whitespace: ['whitespace'],\n 'word-break': ['word-break'],\n hyphens: ['hyphens'],\n 'overflow-wrap': ['overflow-wrap'],\n content: ['content'],\n },\n}\n","import type { ClassGroupConfig, PrefixEntry } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n// Color palette names used in Tailwind\nconst COLOR_NAMES = [\n 'slate', 'gray', 'zinc', 'neutral', 'stone',\n 'red', 'orange', 'amber', 'yellow', 'lime',\n 'green', 'emerald', 'teal', 'cyan', 'sky',\n 'blue', 'indigo', 'violet', 'purple', 'fuchsia',\n 'pink', 'rose',\n]\n\n// Special color values\nconst SPECIAL_COLORS = ['inherit', 'current', 'transparent', 'black', 'white']\n\n/**\n * Creates trie prefixes for all color names with a given prefix.\n * This replaces regex patterns with O(k) trie lookups.\n *\n * @example\n * createColorPrefixes('text-', 'text-color')\n * // → { 'text-red-': {...}, 'text-blue-': {...}, ... }\n */\n\nfunction createColorPrefixes(prefixStr: string, groupId: string): Record<string, PrefixEntry> {\n const prefixes: Record<string, PrefixEntry> = {}\n\n // Add color palette prefixes (e.g., text-red-, text-blue-)\n for (const color of COLOR_NAMES) {\n prefixes[`${prefixStr}${color}-`] = prefix(groupId)\n }\n\n // Add arbitrary value prefix (e.g., text-[)\n prefixes[`${prefixStr}[`] = prefix(groupId)\n\n return prefixes\n}\n\n/**\n * Creates exact matches for special colors.\n */\n\nfunction createSpecialColorMatches(prefixStr: string, groupId: string): Record<string, PrefixEntry> {\n const matches: Record<string, PrefixEntry> = {}\n for (const color of SPECIAL_COLORS) {\n matches[`${prefixStr}${color}`] = prefix(groupId)\n }\n return matches\n}\n\n// Color utility definitions: [prefix, groupId]\nconst COLOR_UTILITIES: [string, string][] = [\n ['text-', 'text-color'],\n ['bg-', 'bg-color'],\n ['border-', 'border-color'],\n ['outline-', 'outline-color'],\n ['ring-', 'ring-color'],\n ['ring-offset-', 'ring-offset-color'],\n ['divide-', 'divide-color'],\n ['accent-', 'accent-color'],\n ['caret-', 'caret-color'],\n ['fill-', 'fill'],\n ['stroke-', 'stroke'],\n ['shadow-', 'box-shadow-color'],\n ['placeholder-', 'placeholder-color'],\n ['from-', 'gradient-from'],\n ['via-', 'gradient-via'],\n ['to-', 'gradient-to'],\n]\n\n// Generate all prefixes from color utilities\nfunction generateAllColorPrefixes(): Record<string, PrefixEntry> {\n const prefixes: Record<string, PrefixEntry> = {}\n for (const [utilityPrefix, groupId] of COLOR_UTILITIES) {\n Object.assign(prefixes, createColorPrefixes(utilityPrefix, groupId))\n }\n return prefixes\n}\n\n// Special color utilities that need exact matches for inherit/current/transparent/black/white\nconst SPECIAL_COLOR_UTILITIES: [string, string][] = [\n ['text-', 'text-color'],\n ['bg-', 'bg-color'],\n ['border-', 'border-color'],\n ['outline-', 'outline-color'],\n ['ring-', 'ring-color'],\n]\n\nfunction generateSpecialColorMatches(): Record<string, PrefixEntry> {\n const matches: Record<string, PrefixEntry> = {}\n for (const [utilityPrefix, groupId] of SPECIAL_COLOR_UTILITIES) {\n Object.assign(matches, createSpecialColorMatches(utilityPrefix, groupId))\n }\n return matches\n}\n\n/**\n * Color-related class groups: text color, background color, border color, etc.\n * Uses trie prefixes for O(k) classification instead of O(n*p) regex matching.\n */\n\nexport const colorGroups: ClassGroupConfig = {\n prefixes: generateAllColorPrefixes(),\n\n exactMatches: {\n ...generateSpecialColorMatches(),\n // Gradient stop reset\n 'via-none': prefix('gradient-via'),\n },\n\n // No patterns needed - all handled by prefixes now\n patterns: [],\n\n conflicts: simpleConflicts(\n 'text-color', 'bg-color', 'border-color', 'outline-color',\n 'ring-color', 'ring-offset-color', 'divide-color', 'accent-color',\n 'caret-color', 'fill', 'stroke', 'box-shadow-color', 'placeholder-color',\n 'gradient-from', 'gradient-via', 'gradient-to'\n ),\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix } from './types'\n\n/**\n * Background-related class groups (non-color): attachment, clip, origin, position, repeat, size, image.\n */\n\nexport const backgroundGroups: ClassGroupConfig = {\n prefixes: {\n // Background image - gradient directions\n 'bg-gradient-to-': prefix('bg-image'),\n\n // Background image - gradient types (v4)\n 'bg-linear-': prefix('bg-image'),\n '-bg-linear-': prefix('bg-image'),\n 'bg-radial-': prefix('bg-image'),\n 'bg-conic-': prefix('bg-image'),\n '-bg-conic-': prefix('bg-image'),\n },\n\n exactMatches: {\n // Background attachment\n 'bg-fixed': prefix('bg-attachment'),\n 'bg-local': prefix('bg-attachment'),\n 'bg-scroll': prefix('bg-attachment'),\n\n // Background clip\n 'bg-clip-border': prefix('bg-clip'),\n 'bg-clip-padding': prefix('bg-clip'),\n 'bg-clip-content': prefix('bg-clip'),\n 'bg-clip-text': prefix('bg-clip'),\n\n // Background origin\n 'bg-origin-border': prefix('bg-origin'),\n 'bg-origin-padding': prefix('bg-origin'),\n 'bg-origin-content': prefix('bg-origin'),\n\n // Background position\n 'bg-bottom': prefix('bg-position'),\n 'bg-center': prefix('bg-position'),\n 'bg-left': prefix('bg-position'),\n 'bg-left-bottom': prefix('bg-position'),\n 'bg-left-top': prefix('bg-position'),\n 'bg-right': prefix('bg-position'),\n 'bg-right-bottom': prefix('bg-position'),\n 'bg-right-top': prefix('bg-position'),\n 'bg-top': prefix('bg-position'),\n\n // Background repeat\n 'bg-repeat': prefix('bg-repeat'),\n 'bg-no-repeat': prefix('bg-repeat'),\n 'bg-repeat-x': prefix('bg-repeat'),\n 'bg-repeat-y': prefix('bg-repeat'),\n 'bg-repeat-round': prefix('bg-repeat'),\n 'bg-repeat-space': prefix('bg-repeat'),\n\n // Background size\n 'bg-auto': prefix('bg-size'),\n 'bg-cover': prefix('bg-size'),\n 'bg-contain': prefix('bg-size'),\n\n // Background image\n 'bg-none': prefix('bg-image'),\n },\n\n patterns: [\n // Background position arbitrary\n { pattern: /^bg-\\[position:/, groupId: 'bg-position', specificity: 1 },\n // Background size arbitrary\n { pattern: /^bg-\\[size:/, groupId: 'bg-size', specificity: 1 },\n // Background image url\n { pattern: /^bg-\\[url/, groupId: 'bg-image', specificity: 1 },\n ],\n\n conflicts: {\n 'bg-attachment': ['bg-attachment'],\n 'bg-clip': ['bg-clip'],\n 'bg-origin': ['bg-origin'],\n 'bg-position': ['bg-position'],\n 'bg-repeat': ['bg-repeat'],\n 'bg-size': ['bg-size'],\n 'bg-image': ['bg-image'],\n },\n}\n","import type { ClassGroupConfig, ConflictMap } from './types'\nimport { prefix, SPECIFICITY, generateConflicts, simpleConflicts } from './types'\n\n// Hierarchies for auto-generating conflicts\nconst BORDER_WIDTH_HIERARCHY = {\n 'border-width': { x: ['l', 'r', 's', 'e'], y: ['t', 'b'] },\n 'border-spacing': { x: [], y: [] },\n}\n\n/**\n * Generates border-radius conflicts with quadrant support.\n * Border radius has a unique pattern: corners conflict with both adjacent sides.\n */\n\nfunction borderRadiusConflicts(): ConflictMap {\n const base = 'border-radius'\n const sides = ['t', 'r', 'b', 'l', 's', 'e']\n const corners: Record<string, string[]> = {\n tl: ['t', 'l'],\n tr: ['t', 'r'],\n br: ['b', 'r'],\n bl: ['b', 'l'],\n ss: ['s'],\n se: ['s', 'e'],\n es: ['e', 's'],\n ee: ['e'],\n }\n\n const allGroups = [base, ...sides.map(s => `${base}-${s}`), ...Object.keys(corners).map(c => `${base}-${c}`)]\n const conflicts: ConflictMap = {}\n\n // Base conflicts with everything\n conflicts[base] = allGroups\n\n // Each side conflicts with base, itself, and its corners\n for (const side of sides) {\n const sideGroup = `${base}-${side}`\n const cornersOnSide = Object.entries(corners)\n .filter(([_, adjSides]) => adjSides.includes(side))\n .map(([corner]) => `${base}-${corner}`)\n conflicts[sideGroup] = [base, sideGroup, ...cornersOnSide]\n }\n\n // Each corner conflicts with base, its adjacent sides, and itself\n for (const [corner, adjSides] of Object.entries(corners)) {\n const cornerGroup = `${base}-${corner}`\n conflicts[cornerGroup] = [base, ...adjSides.map(s => `${base}-${s}`), cornerGroup]\n }\n\n return conflicts\n}\n\n/**\n * Border-related class groups: width, style, radius, divide, outline, ring.\n */\n\nexport const borderGroups: ClassGroupConfig = {\n prefixes: {\n // Border radius\n 'rounded-': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-t-': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-r-': prefix('border-radius-r', SPECIFICITY.AXIS),\n 'rounded-b-': prefix('border-radius-b', SPECIFICITY.AXIS),\n 'rounded-l-': prefix('border-radius-l', SPECIFICITY.AXIS),\n 'rounded-tl-': prefix('border-radius-tl', SPECIFICITY.SIDE),\n 'rounded-tr-': prefix('border-radius-tr', SPECIFICITY.SIDE),\n 'rounded-br-': prefix('border-radius-br', SPECIFICITY.SIDE),\n 'rounded-bl-': prefix('border-radius-bl', SPECIFICITY.SIDE),\n 'rounded-s-': prefix('border-radius-s', SPECIFICITY.AXIS),\n 'rounded-e-': prefix('border-radius-e', SPECIFICITY.AXIS),\n 'rounded-ss-': prefix('border-radius-ss', SPECIFICITY.SIDE),\n 'rounded-se-': prefix('border-radius-se', SPECIFICITY.SIDE),\n 'rounded-es-': prefix('border-radius-es', SPECIFICITY.SIDE),\n 'rounded-ee-': prefix('border-radius-ee', SPECIFICITY.SIDE),\n\n // Border width (handled by exact matches mostly, but prefix for arbitrary)\n 'border-x-': prefix('border-width-x', SPECIFICITY.AXIS),\n 'border-y-': prefix('border-width-y', SPECIFICITY.AXIS),\n 'border-t-': prefix('border-width-t', SPECIFICITY.SIDE),\n 'border-r-': prefix('border-width-r', SPECIFICITY.SIDE),\n 'border-b-': prefix('border-width-b', SPECIFICITY.SIDE),\n 'border-l-': prefix('border-width-l', SPECIFICITY.SIDE),\n 'border-s-': prefix('border-width-s', SPECIFICITY.SIDE),\n 'border-e-': prefix('border-width-e', SPECIFICITY.SIDE),\n\n // Border spacing\n 'border-spacing-': prefix('border-spacing', SPECIFICITY.ALL),\n 'border-spacing-x-': prefix('border-spacing-x', SPECIFICITY.AXIS),\n 'border-spacing-y-': prefix('border-spacing-y', SPECIFICITY.AXIS),\n\n // Divide\n 'divide-x-': prefix('divide-x'),\n 'divide-y-': prefix('divide-y'),\n\n // Outline\n 'outline-offset-': prefix('outline-offset'),\n\n // Ring\n 'ring-offset-': prefix('ring-offset-width'),\n },\n\n exactMatches: {\n // Border radius exact\n rounded: prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-none': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-sm': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-md': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-lg': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-xl': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-2xl': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-3xl': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-full': prefix('border-radius', SPECIFICITY.ALL),\n\n 'rounded-t': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-none': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-sm': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-md': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-lg': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-xl': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-2xl': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-3xl': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-full': prefix('border-radius-t', SPECIFICITY.AXIS),\n\n 'rounded-r': prefix('border-radius-r', SPECIFICITY.AXIS),\n 'rounded-b': prefix('border-radius-b', SPECIFICITY.AXIS),\n 'rounded-l': prefix('border-radius-l', SPECIFICITY.AXIS),\n 'rounded-s': prefix('border-radius-s', SPECIFICITY.AXIS),\n 'rounded-e': prefix('border-radius-e', SPECIFICITY.AXIS),\n\n 'rounded-tl': prefix('border-radius-tl', SPECIFICITY.SIDE),\n 'rounded-tr': prefix('border-radius-tr', SPECIFICITY.SIDE),\n 'rounded-br': prefix('border-radius-br', SPECIFICITY.SIDE),\n 'rounded-bl': prefix('border-radius-bl', SPECIFICITY.SIDE),\n\n // Border width\n border: prefix('border-width', SPECIFICITY.ALL),\n 'border-0': prefix('border-width', SPECIFICITY.ALL),\n 'border-2': prefix('border-width', SPECIFICITY.ALL),\n 'border-4': prefix('border-width', SPECIFICITY.ALL),\n 'border-8': prefix('border-width', SPECIFICITY.ALL),\n\n 'border-x': prefix('border-width-x', SPECIFICITY.AXIS),\n 'border-x-0': prefix('border-width-x', SPECIFICITY.AXIS),\n 'border-x-2': prefix('border-width-x', SPECIFICITY.AXIS),\n 'border-x-4': prefix('border-width-x', SPECIFICITY.AXIS),\n 'border-x-8': prefix('border-width-x', SPECIFICITY.AXIS),\n\n 'border-y': prefix('border-width-y', SPECIFICITY.AXIS),\n 'border-y-0': prefix('border-width-y', SPECIFICITY.AXIS),\n 'border-y-2': prefix('border-width-y', SPECIFICITY.AXIS),\n 'border-y-4': prefix('border-width-y', SPECIFICITY.AXIS),\n 'border-y-8': prefix('border-width-y', SPECIFICITY.AXIS),\n\n 'border-t': prefix('border-width-t', SPECIFICITY.SIDE),\n 'border-t-0': prefix('border-width-t', SPECIFICITY.SIDE),\n 'border-t-2': prefix('border-width-t', SPECIFICITY.SIDE),\n 'border-t-4': prefix('border-width-t', SPECIFICITY.SIDE),\n 'border-t-8': prefix('border-width-t', SPECIFICITY.SIDE),\n\n 'border-r': prefix('border-width-r', SPECIFICITY.SIDE),\n 'border-b': prefix('border-width-b', SPECIFICITY.SIDE),\n 'border-l': prefix('border-width-l', SPECIFICITY.SIDE),\n 'border-s': prefix('border-width-s', SPECIFICITY.SIDE),\n 'border-e': prefix('border-width-e', SPECIFICITY.SIDE),\n\n // Border style\n 'border-solid': prefix('border-style'),\n 'border-dashed': prefix('border-style'),\n 'border-dotted': prefix('border-style'),\n 'border-double': prefix('border-style'),\n 'border-hidden': prefix('border-style'),\n 'border-none': prefix('border-style'),\n\n // Border collapse\n 'border-collapse': prefix('border-collapse'),\n 'border-separate': prefix('border-collapse'),\n\n // Divide style\n 'divide-solid': prefix('divide-style'),\n 'divide-dashed': prefix('divide-style'),\n 'divide-dotted': prefix('divide-style'),\n 'divide-double': prefix('divide-style'),\n 'divide-none': prefix('divide-style'),\n\n // Divide reverse\n 'divide-x-reverse': prefix('divide-x-reverse'),\n 'divide-y-reverse': prefix('divide-y-reverse'),\n\n // Outline style\n outline: prefix('outline-style'),\n 'outline-none': prefix('outline-style'),\n 'outline-hidden': prefix('outline-style'),\n 'outline-dashed': prefix('outline-style'),\n 'outline-dotted': prefix('outline-style'),\n 'outline-double': prefix('outline-style'),\n\n // Outline width (must be exact to avoid conflicting with outline-color)\n 'outline-0': prefix('outline-width'),\n 'outline-1': prefix('outline-width'),\n 'outline-2': prefix('outline-width'),\n 'outline-4': prefix('outline-width'),\n 'outline-8': prefix('outline-width'),\n\n // Ring width\n ring: prefix('ring-width'),\n 'ring-0': prefix('ring-width'),\n 'ring-1': prefix('ring-width'),\n 'ring-2': prefix('ring-width'),\n 'ring-4': prefix('ring-width'),\n 'ring-8': prefix('ring-width'),\n 'ring-inset': prefix('ring-width'),\n },\n\n patterns: [\n // Border width arbitrary\n { pattern: /^border-\\[\\d/, groupId: 'border-width', specificity: SPECIFICITY.ALL },\n { pattern: /^border-\\d+$/, groupId: 'border-width', specificity: SPECIFICITY.ALL },\n // Rounded arbitrary\n { pattern: /^rounded-\\[/, groupId: 'border-radius', specificity: SPECIFICITY.ALL },\n // Outline width\n { pattern: /^outline-\\d+$/, groupId: 'outline-width', specificity: 1 },\n { pattern: /^outline-\\[.*px/, groupId: 'outline-width', specificity: 1 },\n // Ring arbitrary\n { pattern: /^ring-\\[/, groupId: 'ring-width', specificity: 1 },\n // Ring offset arbitrary\n { pattern: /^ring-offset-\\d+$/, groupId: 'ring-offset-width', specificity: 1 },\n { pattern: /^ring-offset-\\[/, groupId: 'ring-offset-width', specificity: 1 },\n ],\n\n conflicts: {\n ...borderRadiusConflicts(),\n ...generateConflicts(BORDER_WIDTH_HIERARCHY),\n ...simpleConflicts(\n 'border-style', 'border-collapse',\n 'divide-x', 'divide-y', 'divide-style', 'divide-x-reverse', 'divide-y-reverse',\n 'outline-style', 'outline-width', 'outline-offset',\n 'ring-width', 'ring-offset-width'\n ),\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n/**\n * Effects class groups: shadow, opacity, blend modes, filters.\n */\n\nexport const effectsGroups: ClassGroupConfig = {\n prefixes: {\n // Opacity\n 'opacity-': prefix('opacity'),\n\n // Inset shadow (arbitrary)\n 'inset-shadow-': prefix('inset-shadow'),\n\n // Inset ring (arbitrary)\n 'inset-ring-': prefix('inset-ring'),\n\n // Text shadow (arbitrary)\n 'text-shadow-': prefix('text-shadow'),\n\n // Mix blend\n 'mix-blend-': prefix('mix-blend-mode'),\n\n // Background blend\n 'bg-blend-': prefix('bg-blend-mode'),\n\n // Filter values\n 'brightness-': prefix('brightness'),\n 'contrast-': prefix('contrast'),\n 'saturate-': prefix('saturate'),\n 'hue-rotate-': prefix('hue-rotate'),\n '-hue-rotate-': prefix('hue-rotate'),\n\n // Backdrop filter values\n 'backdrop-brightness-': prefix('backdrop-brightness'),\n 'backdrop-contrast-': prefix('backdrop-contrast'),\n 'backdrop-saturate-': prefix('backdrop-saturate'),\n 'backdrop-hue-rotate-': prefix('backdrop-hue-rotate'),\n '-backdrop-hue-rotate-': prefix('backdrop-hue-rotate'),\n 'backdrop-opacity-': prefix('backdrop-opacity'),\n },\n\n exactMatches: {\n // Box shadow\n shadow: prefix('box-shadow'),\n 'shadow-sm': prefix('box-shadow'),\n 'shadow-md': prefix('box-shadow'),\n 'shadow-lg': prefix('box-shadow'),\n 'shadow-xl': prefix('box-shadow'),\n 'shadow-2xl': prefix('box-shadow'),\n 'shadow-inner': prefix('box-shadow'),\n 'shadow-none': prefix('box-shadow'),\n\n // Inset shadow\n 'inset-shadow': prefix('inset-shadow'),\n 'inset-shadow-xs': prefix('inset-shadow'),\n 'inset-shadow-sm': prefix('inset-shadow'),\n 'inset-shadow-md': prefix('inset-shadow'),\n 'inset-shadow-lg': prefix('inset-shadow'),\n 'inset-shadow-none': prefix('inset-shadow'),\n\n // Inset ring\n 'inset-ring': prefix('inset-ring'),\n 'inset-ring-0': prefix('inset-ring'),\n 'inset-ring-1': prefix('inset-ring'),\n 'inset-ring-2': prefix('inset-ring'),\n 'inset-ring-4': prefix('inset-ring'),\n 'inset-ring-8': prefix('inset-ring'),\n\n // Text shadow\n 'text-shadow': prefix('text-shadow'),\n 'text-shadow-sm': prefix('text-shadow'),\n 'text-shadow-md': prefix('text-shadow'),\n 'text-shadow-lg': prefix('text-shadow'),\n 'text-shadow-none': prefix('text-shadow'),\n\n // Box decoration break\n 'box-decoration-clone': prefix('box-decoration-break'),\n 'box-decoration-slice': prefix('box-decoration-break'),\n\n // Filter\n filter: prefix('filter'),\n 'filter-none': prefix('filter'),\n\n // Blur\n blur: prefix('blur'),\n 'blur-none': prefix('blur'),\n 'blur-sm': prefix('blur'),\n 'blur-md': prefix('blur'),\n 'blur-lg': prefix('blur'),\n 'blur-xl': prefix('blur'),\n 'blur-2xl': prefix('blur'),\n 'blur-3xl': prefix('blur'),\n\n // Drop shadow\n 'drop-shadow': prefix('drop-shadow'),\n 'drop-shadow-sm': prefix('drop-shadow'),\n 'drop-shadow-md': prefix('drop-shadow'),\n 'drop-shadow-lg': prefix('drop-shadow'),\n 'drop-shadow-xl': prefix('drop-shadow'),\n 'drop-shadow-2xl': prefix('drop-shadow'),\n 'drop-shadow-none': prefix('drop-shadow'),\n\n // Grayscale\n grayscale: prefix('grayscale'),\n 'grayscale-0': prefix('grayscale'),\n\n // Invert\n invert: prefix('invert'),\n 'invert-0': prefix('invert'),\n\n // Sepia\n sepia: prefix('sepia'),\n 'sepia-0': prefix('sepia'),\n\n // Backdrop filter\n 'backdrop-filter': prefix('backdrop-filter'),\n 'backdrop-filter-none': prefix('backdrop-filter'),\n\n // Backdrop blur\n 'backdrop-blur': prefix('backdrop-blur'),\n 'backdrop-blur-none': prefix('backdrop-blur'),\n 'backdrop-blur-sm': prefix('backdrop-blur'),\n 'backdrop-blur-md': prefix('backdrop-blur'),\n 'backdrop-blur-lg': prefix('backdrop-blur'),\n 'backdrop-blur-xl': prefix('backdrop-blur'),\n 'backdrop-blur-2xl': prefix('backdrop-blur'),\n 'backdrop-blur-3xl': prefix('backdrop-blur'),\n\n // Backdrop grayscale\n 'backdrop-grayscale': prefix('backdrop-grayscale'),\n 'backdrop-grayscale-0': prefix('backdrop-grayscale'),\n\n // Backdrop invert\n 'backdrop-invert': prefix('backdrop-invert'),\n 'backdrop-invert-0': prefix('backdrop-invert'),\n\n // Backdrop sepia\n 'backdrop-sepia': prefix('backdrop-sepia'),\n 'backdrop-sepia-0': prefix('backdrop-sepia'),\n },\n\n patterns: [\n // Shadow arbitrary\n { pattern: /^shadow-\\[/, groupId: 'box-shadow', specificity: 1 },\n // Inset shadow arbitrary\n { pattern: /^inset-shadow-\\[/, groupId: 'inset-shadow', specificity: 1 },\n // Inset ring arbitrary\n { pattern: /^inset-ring-\\[/, groupId: 'inset-ring', specificity: 1 },\n // Text shadow arbitrary\n { pattern: /^text-shadow-\\[/, groupId: 'text-shadow', specificity: 1 },\n // Blur arbitrary\n { pattern: /^blur-\\[/, groupId: 'blur', specificity: 1 },\n // Drop shadow arbitrary\n { pattern: /^drop-shadow-\\[/, groupId: 'drop-shadow', specificity: 1 },\n // Backdrop blur arbitrary\n { pattern: /^backdrop-blur-\\[/, groupId: 'backdrop-blur', specificity: 1 },\n ],\n\n conflicts: simpleConflicts(\n 'box-shadow', 'box-shadow-color',\n 'inset-shadow', 'inset-shadow-color',\n 'inset-ring', 'inset-ring-color',\n 'text-shadow', 'text-shadow-color',\n 'box-decoration-break', 'opacity', 'mix-blend-mode', 'bg-blend-mode',\n 'filter', 'blur', 'brightness', 'contrast', 'drop-shadow',\n 'grayscale', 'hue-rotate', 'invert', 'saturate', 'sepia',\n 'backdrop-filter', 'backdrop-blur', 'backdrop-brightness', 'backdrop-contrast',\n 'backdrop-grayscale', 'backdrop-hue-rotate', 'backdrop-invert',\n 'backdrop-opacity', 'backdrop-saturate', 'backdrop-sepia'\n ),\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, SPECIFICITY, simpleConflicts } from './types'\n\n/**\n * Transform class groups: scale, rotate, translate, skew, origin, perspective.\n * Includes 2D and 3D transforms.\n */\n\nexport const transformGroups: ClassGroupConfig = {\n prefixes: {\n // Scale (2D)\n 'scale-': prefix('scale', SPECIFICITY.ALL),\n '-scale-': prefix('scale', SPECIFICITY.ALL),\n 'scale-x-': prefix('scale-x', SPECIFICITY.AXIS),\n '-scale-x-': prefix('scale-x', SPECIFICITY.AXIS),\n 'scale-y-': prefix('scale-y', SPECIFICITY.AXIS),\n '-scale-y-': prefix('scale-y', SPECIFICITY.AXIS),\n // Scale (3D)\n 'scale-z-': prefix('scale-z', SPECIFICITY.AXIS),\n '-scale-z-': prefix('scale-z', SPECIFICITY.AXIS),\n\n // Rotate (2D - default Z-axis)\n 'rotate-': prefix('rotate'),\n '-rotate-': prefix('rotate'),\n // Rotate (3D axes)\n 'rotate-x-': prefix('rotate-x'),\n '-rotate-x-': prefix('rotate-x'),\n 'rotate-y-': prefix('rotate-y'),\n '-rotate-y-': prefix('rotate-y'),\n 'rotate-z-': prefix('rotate-z'),\n '-rotate-z-': prefix('rotate-z'),\n\n // Translate (2D)\n 'translate-': prefix('translate', SPECIFICITY.ALL),\n '-translate-': prefix('translate', SPECIFICITY.ALL),\n 'translate-x-': prefix('translate-x', SPECIFICITY.AXIS),\n '-translate-x-': prefix('translate-x', SPECIFICITY.AXIS),\n 'translate-y-': prefix('translate-y', SPECIFICITY.AXIS),\n '-translate-y-': prefix('translate-y', SPECIFICITY.AXIS),\n // Translate (3D)\n 'translate-z-': prefix('translate-z', SPECIFICITY.AXIS),\n '-translate-z-': prefix('translate-z', SPECIFICITY.AXIS),\n\n // Skew\n 'skew-x-': prefix('skew-x'),\n '-skew-x-': prefix('skew-x'),\n 'skew-y-': prefix('skew-y'),\n '-skew-y-': prefix('skew-y'),\n\n // Transform origin\n 'origin-': prefix('transform-origin'),\n\n // Perspective\n 'perspective-': prefix('perspective'),\n\n // Perspective origin\n 'perspective-origin-': prefix('perspective-origin'),\n },\n\n exactMatches: {\n // Transform\n transform: prefix('transform'),\n 'transform-cpu': prefix('transform'),\n 'transform-gpu': prefix('transform'),\n 'transform-none': prefix('transform'),\n\n // Transform style (3D)\n 'transform-3d': prefix('transform-style'),\n 'transform-flat': prefix('transform-style'),\n\n // Backface visibility\n 'backface-visible': prefix('backface-visibility'),\n 'backface-hidden': prefix('backface-visibility'),\n\n // Perspective none\n 'perspective-none': prefix('perspective'),\n\n // Transform box\n 'transform-box-content': prefix('transform-box'),\n 'transform-box-border': prefix('transform-box'),\n 'transform-box-fill': prefix('transform-box'),\n 'transform-box-stroke': prefix('transform-box'),\n 'transform-box-view': prefix('transform-box'),\n\n // Scale static\n 'scale-none': prefix('scale', SPECIFICITY.ALL),\n 'scale-3d': prefix('scale', SPECIFICITY.ALL),\n\n // Rotate static\n 'rotate-none': prefix('rotate'),\n\n // Translate static\n 'translate-none': prefix('translate', SPECIFICITY.ALL),\n 'translate-full': prefix('translate', SPECIFICITY.ALL),\n '-translate-full': prefix('translate', SPECIFICITY.ALL),\n\n // Perspective origin positions\n 'perspective-origin-center': prefix('perspective-origin'),\n 'perspective-origin-top': prefix('perspective-origin'),\n 'perspective-origin-top-right': prefix('perspective-origin'),\n 'perspective-origin-right': prefix('perspective-origin'),\n 'perspective-origin-bottom-right': prefix('perspective-origin'),\n 'perspective-origin-bottom': prefix('perspective-origin'),\n 'perspective-origin-bottom-left': prefix('perspective-origin'),\n 'perspective-origin-left': prefix('perspective-origin'),\n 'perspective-origin-top-left': prefix('perspective-origin'),\n },\n\n patterns: [\n // Perspective arbitrary\n { pattern: /^perspective-\\[/, groupId: 'perspective', specificity: 1 },\n ],\n\n conflicts: {\n transform: ['transform'],\n 'transform-style': ['transform-style'],\n 'backface-visibility': ['backface-visibility'],\n perspective: ['perspective'],\n 'perspective-origin': ['perspective-origin'],\n // Scale - 2D bidirectional (scale-z is independent 3D axis)\n scale: ['scale', 'scale-x', 'scale-y'],\n 'scale-x': ['scale', 'scale-x'],\n 'scale-y': ['scale', 'scale-y'],\n 'scale-z': ['scale-z'],\n // Rotate - each axis is independent\n rotate: ['rotate'],\n 'rotate-x': ['rotate-x'],\n 'rotate-y': ['rotate-y'],\n 'rotate-z': ['rotate-z'],\n // Translate - 2D bidirectional (translate-z is independent 3D axis)\n translate: ['translate', 'translate-x', 'translate-y'],\n 'translate-x': ['translate', 'translate-x'],\n 'translate-y': ['translate', 'translate-y'],\n 'translate-z': ['translate-z'],\n ...simpleConflicts('skew-x', 'skew-y', 'transform-origin', 'transform-box'),\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n/**\n * Transition and animation class groups.\n */\n\nexport const transitionGroups: ClassGroupConfig = {\n prefixes: {\n // Duration\n 'duration-': prefix('transition-duration'),\n\n // Delay\n 'delay-': prefix('transition-delay'),\n },\n\n exactMatches: {\n // Transition\n transition: prefix('transition'),\n 'transition-none': prefix('transition'),\n 'transition-all': prefix('transition'),\n 'transition-colors': prefix('transition'),\n 'transition-opacity': prefix('transition'),\n 'transition-shadow': prefix('transition'),\n 'transition-transform': prefix('transition'),\n\n // Timing function\n 'ease-linear': prefix('transition-timing-function'),\n 'ease-in': prefix('transition-timing-function'),\n 'ease-out': prefix('transition-timing-function'),\n 'ease-in-out': prefix('transition-timing-function'),\n\n // Transition behavior (new in v4)\n 'transition-normal': prefix('transition-behavior'),\n 'transition-discrete': prefix('transition-behavior'),\n\n // Animation\n 'animate-none': prefix('animation'),\n 'animate-spin': prefix('animation'),\n 'animate-ping': prefix('animation'),\n 'animate-pulse': prefix('animation'),\n 'animate-bounce': prefix('animation'),\n },\n\n patterns: [\n // Animate arbitrary\n { pattern: /^animate-\\[/, groupId: 'animation', specificity: 1 },\n ],\n\n conflicts: simpleConflicts(\n 'transition', 'transition-duration', 'transition-timing-function',\n 'transition-delay', 'transition-behavior', 'animation'\n ),\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, SPECIFICITY } from './types'\n\n/**\n * Interactivity class groups: cursor, pointer events, resize, scroll, touch, select.\n */\n\nexport const interactivityGroups: ClassGroupConfig = {\n prefixes: {\n // Cursor\n 'cursor-': prefix('cursor'),\n\n // Scroll margin\n 'scroll-m-': prefix('scroll-margin', SPECIFICITY.ALL),\n 'scroll-mx-': prefix('scroll-margin-x', SPECIFICITY.AXIS),\n 'scroll-my-': prefix('scroll-margin-y', SPECIFICITY.AXIS),\n 'scroll-mt-': prefix('scroll-margin-t', SPECIFICITY.SIDE),\n 'scroll-mr-': prefix('scroll-margin-r', SPECIFICITY.SIDE),\n 'scroll-mb-': prefix('scroll-margin-b', SPECIFICITY.SIDE),\n 'scroll-ml-': prefix('scroll-margin-l', SPECIFICITY.SIDE),\n 'scroll-ms-': prefix('scroll-margin-s', SPECIFICITY.SIDE),\n 'scroll-me-': prefix('scroll-margin-e', SPECIFICITY.SIDE),\n\n // Scroll padding\n 'scroll-p-': prefix('scroll-padding', SPECIFICITY.ALL),\n 'scroll-px-': prefix('scroll-padding-x', SPECIFICITY.AXIS),\n 'scroll-py-': prefix('scroll-padding-y', SPECIFICITY.AXIS),\n 'scroll-pt-': prefix('scroll-padding-t', SPECIFICITY.SIDE),\n 'scroll-pr-': prefix('scroll-padding-r', SPECIFICITY.SIDE),\n 'scroll-pb-': prefix('scroll-padding-b', SPECIFICITY.SIDE),\n 'scroll-pl-': prefix('scroll-padding-l', SPECIFICITY.SIDE),\n 'scroll-ps-': prefix('scroll-padding-s', SPECIFICITY.SIDE),\n 'scroll-pe-': prefix('scroll-padding-e', SPECIFICITY.SIDE),\n\n // Will change\n 'will-change-': prefix('will-change'),\n },\n\n exactMatches: {\n // Appearance\n 'appearance-none': prefix('appearance'),\n 'appearance-auto': prefix('appearance'),\n\n // Pointer events\n 'pointer-events-none': prefix('pointer-events'),\n 'pointer-events-auto': prefix('pointer-events'),\n\n // Resize\n resize: prefix('resize'),\n 'resize-none': prefix('resize'),\n 'resize-y': prefix('resize'),\n 'resize-x': prefix('resize'),\n\n // Scroll behavior\n 'scroll-auto': prefix('scroll-behavior'),\n 'scroll-smooth': prefix('scroll-behavior'),\n\n // Scroll snap align\n 'snap-start': prefix('scroll-snap-align'),\n 'snap-end': prefix('scroll-snap-align'),\n 'snap-center': prefix('scroll-snap-align'),\n 'snap-align-none': prefix('scroll-snap-align'),\n\n // Scroll snap stop\n 'snap-normal': prefix('scroll-snap-stop'),\n 'snap-always': prefix('scroll-snap-stop'),\n\n // Scroll snap type\n 'snap-none': prefix('scroll-snap-type'),\n 'snap-x': prefix('scroll-snap-type'),\n 'snap-y': prefix('scroll-snap-type'),\n 'snap-both': prefix('scroll-snap-type'),\n 'snap-mandatory': prefix('scroll-snap-type'),\n 'snap-proximity': prefix('scroll-snap-type'),\n\n // Touch action\n 'touch-auto': prefix('touch-action'),\n 'touch-none': prefix('touch-action'),\n 'touch-pan-x': prefix('touch-action'),\n 'touch-pan-left': prefix('touch-action'),\n 'touch-pan-right': prefix('touch-action'),\n 'touch-pan-y': prefix('touch-action'),\n 'touch-pan-up': prefix('touch-action'),\n 'touch-pan-down': prefix('touch-action'),\n 'touch-pinch-zoom': prefix('touch-action'),\n 'touch-manipulation': prefix('touch-action'),\n\n // User select\n 'select-none': prefix('user-select'),\n 'select-text': prefix('user-select'),\n 'select-all': prefix('user-select'),\n 'select-auto': prefix('user-select'),\n\n // Will change\n 'will-change-auto': prefix('will-change'),\n 'will-change-scroll': prefix('will-change'),\n 'will-change-contents': prefix('will-change'),\n 'will-change-transform': prefix('will-change'),\n },\n\n patterns: [\n // Will change arbitrary\n { pattern: /^will-change-\\[/, groupId: 'will-change', specificity: 1 },\n ],\n\n conflicts: {\n appearance: ['appearance'],\n cursor: ['cursor'],\n 'pointer-events': ['pointer-events'],\n resize: ['resize'],\n 'scroll-behavior': ['scroll-behavior'],\n 'scroll-margin': [\n 'scroll-margin', 'scroll-margin-x', 'scroll-margin-y',\n 'scroll-margin-t', 'scroll-margin-r', 'scroll-margin-b', 'scroll-margin-l',\n 'scroll-margin-s', 'scroll-margin-e',\n ],\n 'scroll-margin-x': ['scroll-margin-x', 'scroll-margin-l', 'scroll-margin-r', 'scroll-margin-s', 'scroll-margin-e'],\n 'scroll-margin-y': ['scroll-margin-y', 'scroll-margin-t', 'scroll-margin-b'],\n 'scroll-margin-t': ['scroll-margin-t'],\n 'scroll-margin-r': ['scroll-margin-r'],\n 'scroll-margin-b': ['scroll-margin-b'],\n 'scroll-margin-l': ['scroll-margin-l'],\n 'scroll-margin-s': ['scroll-margin-s'],\n 'scroll-margin-e': ['scroll-margin-e'],\n 'scroll-padding': [\n 'scroll-padding', 'scroll-padding-x', 'scroll-padding-y',\n 'scroll-padding-t', 'scroll-padding-r', 'scroll-padding-b', 'scroll-padding-l',\n 'scroll-padding-s', 'scroll-padding-e',\n ],\n 'scroll-padding-x': ['scroll-padding-x', 'scroll-padding-l', 'scroll-padding-r', 'scroll-padding-s', 'scroll-padding-e'],\n 'scroll-padding-y': ['scroll-padding-y', 'scroll-padding-t', 'scroll-padding-b'],\n 'scroll-padding-t': ['scroll-padding-t'],\n 'scroll-padding-r': ['scroll-padding-r'],\n 'scroll-padding-b': ['scroll-padding-b'],\n 'scroll-padding-l': ['scroll-padding-l'],\n 'scroll-padding-s': ['scroll-padding-s'],\n 'scroll-padding-e': ['scroll-padding-e'],\n 'scroll-snap-align': ['scroll-snap-align'],\n 'scroll-snap-stop': ['scroll-snap-stop'],\n 'scroll-snap-type': ['scroll-snap-type'],\n 'touch-action': ['touch-action'],\n 'user-select': ['user-select'],\n 'will-change': ['will-change'],\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n/**\n * SVG class groups: fill, stroke, stroke-cap, stroke-join, stroke-dash, stroke-offset,\n * stroke-miter, stroke-opacity, paint-order, vector-effect.\n */\n\nexport const svgGroups: ClassGroupConfig = {\n prefixes: {\n // Stroke width (numeric values like stroke-2)\n // Note: stroke-<color> is handled by colors.ts\n 'stroke-': prefix('stroke-width'),\n\n // Stroke linecap\n 'stroke-cap-': prefix('stroke-cap'),\n\n // Stroke linejoin\n 'stroke-join-': prefix('stroke-join'),\n\n // Stroke dasharray\n 'stroke-dash-': prefix('stroke-dash'),\n\n // Stroke dashoffset\n 'stroke-offset-': prefix('stroke-offset'),\n\n // Stroke miterlimit\n 'stroke-miter-': prefix('stroke-miter'),\n\n // Stroke opacity\n 'stroke-opacity-': prefix('stroke-opacity'),\n\n // Paint order\n 'paint-': prefix('paint-order'),\n\n // Vector effect\n 'vector-': prefix('vector-effect'),\n },\n\n exactMatches: {\n // Stroke linecap exact matches\n 'stroke-cap-butt': prefix('stroke-cap'),\n 'stroke-cap-round': prefix('stroke-cap'),\n 'stroke-cap-square': prefix('stroke-cap'),\n\n // Stroke linejoin exact matches\n 'stroke-join-miter': prefix('stroke-join'),\n 'stroke-join-round': prefix('stroke-join'),\n 'stroke-join-bevel': prefix('stroke-join'),\n\n // Paint order exact matches\n 'paint-normal': prefix('paint-order'),\n 'paint-stroke': prefix('paint-order'),\n 'paint-fill': prefix('paint-order'),\n 'paint-markers': prefix('paint-order'),\n 'paint-stroke-fill': prefix('paint-order'),\n 'paint-stroke-markers': prefix('paint-order'),\n 'paint-fill-stroke': prefix('paint-order'),\n 'paint-fill-markers': prefix('paint-order'),\n 'paint-markers-stroke': prefix('paint-order'),\n 'paint-markers-fill': prefix('paint-order'),\n 'paint-stroke-fill-markers': prefix('paint-order'),\n 'paint-stroke-markers-fill': prefix('paint-order'),\n 'paint-fill-stroke-markers': prefix('paint-order'),\n 'paint-fill-markers-stroke': prefix('paint-order'),\n 'paint-markers-stroke-fill': prefix('paint-order'),\n 'paint-markers-fill-stroke': prefix('paint-order'),\n\n // Vector effect exact matches\n 'vector-none': prefix('vector-effect'),\n 'vector-non-scaling-stroke': prefix('vector-effect'),\n 'vector-non-scaling-size': prefix('vector-effect'),\n 'vector-non-rotation': prefix('vector-effect'),\n 'vector-fixed-position': prefix('vector-effect'),\n },\n\n patterns: [\n // Stroke width numeric\n { pattern: /^stroke-\\d+$/, groupId: 'stroke-width', specificity: 1 },\n // Stroke width arbitrary\n { pattern: /^stroke-\\[/, groupId: 'stroke-width', specificity: 1 },\n // Stroke dasharray arbitrary\n { pattern: /^stroke-dash-\\[/, groupId: 'stroke-dash', specificity: 1 },\n // Stroke dashoffset arbitrary\n { pattern: /^stroke-offset-\\[/, groupId: 'stroke-offset', specificity: 1 },\n // Stroke miterlimit arbitrary\n { pattern: /^stroke-miter-\\[/, groupId: 'stroke-miter', specificity: 1 },\n // Stroke opacity arbitrary\n { pattern: /^stroke-opacity-\\[/, groupId: 'stroke-opacity', specificity: 1 },\n ],\n\n conflicts: simpleConflicts(\n 'stroke-width', 'stroke-cap', 'stroke-join', 'stroke-dash',\n 'stroke-offset', 'stroke-miter', 'stroke-opacity',\n 'paint-order', 'vector-effect'\n ),\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix } from './types'\n\n/**\n * Accessibility class groups: screen reader, forced colors.\n */\n\nexport const accessibilityGroups: ClassGroupConfig = {\n prefixes: {},\n\n exactMatches: {\n // Screen reader\n 'sr-only': prefix('sr-only'),\n 'not-sr-only': prefix('sr-only'),\n\n // Forced color adjust\n 'forced-color-adjust-auto': prefix('forced-color-adjust'),\n 'forced-color-adjust-none': prefix('forced-color-adjust'),\n },\n\n patterns: [],\n\n conflicts: {\n 'sr-only': ['sr-only'],\n 'forced-color-adjust': ['forced-color-adjust'],\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix } from './types'\n\n/**\n * Table class groups: layout, caption.\n */\n\nexport const tableGroups: ClassGroupConfig = {\n prefixes: {},\n\n exactMatches: {\n // Table layout\n 'table-auto': prefix('table-layout'),\n 'table-fixed': prefix('table-layout'),\n\n // Caption side\n 'caption-top': prefix('caption-side'),\n 'caption-bottom': prefix('caption-side'),\n },\n\n patterns: [],\n\n conflicts: {\n 'table-layout': ['table-layout'],\n 'caption-side': ['caption-side'],\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n/**\n * Mask-related class groups for CSS masking.\n * New in Tailwind CSS v4.\n */\n\nexport const maskGroups: ClassGroupConfig = {\n prefixes: {\n // Mask image (arbitrary)\n 'mask-': prefix('mask-image'),\n\n // Mask size (arbitrary)\n 'mask-size-': prefix('mask-size'),\n\n // Mask position (arbitrary)\n 'mask-position-': prefix('mask-position'),\n },\n\n exactMatches: {\n // Mask image\n 'mask-none': prefix('mask-image'),\n\n // Mask shape functions\n 'mask-circle': prefix('mask-image'),\n 'mask-ellipse': prefix('mask-image'),\n 'mask-no-clip': prefix('mask-clip'),\n\n // Mask radial positions\n 'mask-radial-at-center': prefix('mask-image'),\n 'mask-radial-at-top': prefix('mask-image'),\n 'mask-radial-at-top-left': prefix('mask-image'),\n 'mask-radial-at-top-right': prefix('mask-image'),\n 'mask-radial-at-bottom': prefix('mask-image'),\n 'mask-radial-at-bottom-left': prefix('mask-image'),\n 'mask-radial-at-bottom-right': prefix('mask-image'),\n 'mask-radial-at-left': prefix('mask-image'),\n 'mask-radial-at-right': prefix('mask-image'),\n\n // Mask radial sizing\n 'mask-radial-closest-corner': prefix('mask-image'),\n 'mask-radial-closest-side': prefix('mask-image'),\n 'mask-radial-farthest-corner': prefix('mask-image'),\n 'mask-radial-farthest-side': prefix('mask-image'),\n\n // Mask composite\n 'mask-add': prefix('mask-composite'),\n 'mask-subtract': prefix('mask-composite'),\n 'mask-intersect': prefix('mask-composite'),\n 'mask-exclude': prefix('mask-composite'),\n\n // Mask mode\n 'mask-alpha': prefix('mask-mode'),\n 'mask-luminance': prefix('mask-mode'),\n 'mask-match': prefix('mask-mode'),\n\n // Mask type\n 'mask-type-alpha': prefix('mask-type'),\n 'mask-type-luminance': prefix('mask-type'),\n\n // Mask size\n 'mask-auto': prefix('mask-size'),\n 'mask-cover': prefix('mask-size'),\n 'mask-contain': prefix('mask-size'),\n\n // Mask position\n 'mask-center': prefix('mask-position'),\n 'mask-top': prefix('mask-position'),\n 'mask-top-left': prefix('mask-position'),\n 'mask-top-right': prefix('mask-position'),\n 'mask-bottom': prefix('mask-position'),\n 'mask-bottom-left': prefix('mask-position'),\n 'mask-bottom-right': prefix('mask-position'),\n 'mask-left': prefix('mask-position'),\n 'mask-right': prefix('mask-position'),\n\n // Mask repeat\n 'mask-repeat': prefix('mask-repeat'),\n 'mask-no-repeat': prefix('mask-repeat'),\n 'mask-repeat-x': prefix('mask-repeat'),\n 'mask-repeat-y': prefix('mask-repeat'),\n 'mask-repeat-round': prefix('mask-repeat'),\n 'mask-repeat-space': prefix('mask-repeat'),\n\n // Mask clip\n 'mask-clip-border': prefix('mask-clip'),\n 'mask-clip-padding': prefix('mask-clip'),\n 'mask-clip-content': prefix('mask-clip'),\n 'mask-clip-fill': prefix('mask-clip'),\n 'mask-clip-stroke': prefix('mask-clip'),\n 'mask-clip-view': prefix('mask-clip'),\n\n // Mask origin\n 'mask-origin-border': prefix('mask-origin'),\n 'mask-origin-padding': prefix('mask-origin'),\n 'mask-origin-content': prefix('mask-origin'),\n 'mask-origin-fill': prefix('mask-origin'),\n 'mask-origin-stroke': prefix('mask-origin'),\n 'mask-origin-view': prefix('mask-origin'),\n },\n\n patterns: [\n // Mask image arbitrary (gradients, urls, etc.)\n { pattern: /^mask-\\[/, groupId: 'mask-image', specificity: 1 },\n // Mask linear/radial/conic gradients\n { pattern: /^mask-linear-/, groupId: 'mask-image', specificity: 1 },\n { pattern: /^mask-radial-/, groupId: 'mask-image', specificity: 1 },\n { pattern: /^mask-conic-/, groupId: 'mask-image', specificity: 1 },\n ],\n\n conflicts: simpleConflicts(\n 'mask-image',\n 'mask-composite',\n 'mask-mode',\n 'mask-type',\n 'mask-size',\n 'mask-position',\n 'mask-repeat',\n 'mask-clip',\n 'mask-origin'\n ),\n}\n","import type { ClassGroupConfig } from './types'\nimport { mergeConfigs } from './types'\nimport { layoutGroups } from './layout'\nimport { spacingGroups } from './spacing'\nimport { sizingGroups } from './sizing'\nimport { flexboxGridGroups } from './flexbox-grid'\nimport { typographyGroups } from './typography'\nimport { colorGroups } from './colors'\nimport { backgroundGroups } from './backgrounds'\nimport { borderGroups } from './borders'\nimport { effectsGroups } from './effects'\nimport { transformGroups } from './transforms'\nimport { transitionGroups } from './transitions'\nimport { interactivityGroups } from './interactivity'\nimport { svgGroups } from './svg'\nimport { accessibilityGroups } from './accessibility'\nimport { tableGroups } from './tables'\nimport { maskGroups } from './masks'\n\n// Lazy-loaded config to defer computation until first use\nlet _fullConfig: ClassGroupConfig | null = null\n\n/**\n * Gets the full class group configuration.\n * Lazily computed on first access to reduce startup time.\n */\n\nfunction getFullConfig(): ClassGroupConfig {\n if (_fullConfig === null) {\n _fullConfig = mergeConfigs(\n layoutGroups,\n spacingGroups,\n sizingGroups,\n flexboxGridGroups,\n typographyGroups,\n colorGroups,\n backgroundGroups,\n borderGroups,\n effectsGroups,\n transformGroups,\n transitionGroups,\n interactivityGroups,\n svgGroups,\n accessibilityGroups,\n tableGroups,\n maskGroups\n )\n }\n return _fullConfig\n}\n\n/**\n * Full class group configuration.\n * Covers all Tailwind CSS v4 utilities.\n *\n * Bundle size: ~7KB gzipped\n *\n * Uses lazy initialization via a Proxy to defer computation until first access,\n * reducing startup time when the full config is imported but not immediately used.\n */\n\nexport const fullConfig: ClassGroupConfig = new Proxy({} as ClassGroupConfig, {\n get(_, prop) {\n return getFullConfig()[prop as keyof ClassGroupConfig]\n },\n ownKeys() {\n return Reflect.ownKeys(getFullConfig())\n },\n getOwnPropertyDescriptor(_, prop) {\n return Object.getOwnPropertyDescriptor(getFullConfig(), prop)\n },\n})\n\nexport { getFullConfig }\n","import type { ClassGroupConfig } from './types'\nimport { mergeConfigs } from './types'\nimport { layoutGroups } from './layout'\nimport { spacingGroups } from './spacing'\nimport { sizingGroups } from './sizing'\nimport { flexboxGridGroups } from './flexbox-grid'\nimport { typographyGroups } from './typography'\nimport { colorGroups } from './colors'\nimport { borderGroups } from './borders'\n\n/**\n * Minimal class group configuration.\n * Covers the most commonly used Tailwind utilities:\n * - Layout (display, position, visibility)\n * - Spacing (padding, margin, gap)\n * - Sizing (width, height)\n * - Flexbox & Grid\n * - Typography\n * - Colors\n * - Borders\n *\n * Bundle size: ~1.5KB gzipped\n */\n\nexport const minimalConfig: ClassGroupConfig = mergeConfigs(\n layoutGroups,\n spacingGroups,\n sizingGroups,\n flexboxGridGroups,\n typographyGroups,\n colorGroups,\n borderGroups\n)\n","import type { PrefixEntry } from './groups/types'\n\ninterface TrieNode {\n children: Map<string, TrieNode>\n entry: PrefixEntry | null\n}\n\nfunction createTrieNode(): TrieNode {\n return { children: new Map(), entry: null }\n}\n\n/** Prefix trie for O(k) class classification where k is the class name length. */\nclass PrefixTrie {\n private root: TrieNode = createTrieNode()\n\n insert(prefix: string, entry: PrefixEntry): void {\n let node = this.root\n for (const char of prefix) {\n if (!node.children.has(char)) {\n node.children.set(char, createTrieNode())\n }\n node = node.children.get(char)!\n }\n node.entry = entry\n }\n\n findLongestMatch(className: string): { entry: PrefixEntry; matchLength: number } | null {\n let node = this.root\n let lastMatch: { entry: PrefixEntry; matchLength: number } | null = null\n let matchLength = 0\n\n // Check for empty prefix match at root\n if (node.entry) {\n lastMatch = { entry: node.entry, matchLength: 0 }\n }\n\n for (const char of className) {\n const child = node.children.get(char)\n if (!child) break\n node = child\n matchLength++\n if (node.entry) {\n lastMatch = { entry: node.entry, matchLength }\n }\n }\n\n return lastMatch\n }\n}\n\nexport { PrefixTrie }\n","import type { ClassGroupConfig, PrefixEntry, ConflictMap } from './groups/types'\nimport { fullConfig } from './groups/full'\nimport { minimalConfig } from './groups/minimal'\nimport type { TwMergeMode } from './types'\nimport { PrefixTrie } from './trie'\n\ninterface ClassifierState {\n mode: TwMergeMode\n config: ClassGroupConfig\n prefixTrie: PrefixTrie\n exactMatches: Map<string, PrefixEntry>\n conflicts: ConflictMap\n /** Pre-computed conflict sets for O(1) lookups */\n conflictSets: Map<string, Set<string>>\n initialized: boolean\n}\n\n// Default state with full config\nlet state: ClassifierState = {\n mode: 'full',\n config: fullConfig,\n prefixTrie: new PrefixTrie(),\n exactMatches: new Map(),\n conflicts: {},\n conflictSets: new Map(),\n initialized: false,\n}\n\n/**\n * Initializes the classifier with the given configuration.\n */\n\nfunction initializeClassifier(config: ClassGroupConfig): void {\n state.prefixTrie = new PrefixTrie()\n state.exactMatches = new Map()\n state.conflicts = config.conflicts\n state.conflictSets = new Map()\n\n // Insert all prefixes into the trie\n for (const [prefix, entry] of Object.entries(config.prefixes)) {\n state.prefixTrie.insert(prefix, entry)\n }\n\n // Build exact match map\n for (const [className, entry] of Object.entries(config.exactMatches)) {\n state.exactMatches.set(className, entry)\n }\n\n // Pre-compute conflict sets for O(1) lookups\n for (const [groupId, conflicts] of Object.entries(config.conflicts)) {\n state.conflictSets.set(groupId, new Set(conflicts))\n }\n\n state.config = config\n state.initialized = true\n}\n\n/**\n * Sets the merge mode and reinitializes the classifier.\n */\n\nfunction setMergeMode(mode: TwMergeMode): void {\n if (mode === state.mode && state.initialized) {\n return\n }\n\n state.mode = mode\n\n if (mode === false) {\n // Disable merging - clear everything\n state.prefixTrie = new PrefixTrie()\n state.exactMatches = new Map()\n state.conflicts = {}\n state.conflictSets = new Map()\n state.initialized = true\n return\n }\n\n const config = mode === 'minimal' ? minimalConfig : fullConfig\n initializeClassifier(config)\n}\n\n/**\n * Ensures the classifier is initialized with the current mode.\n */\n\nfunction ensureInitialized(): void {\n if (!state.initialized) {\n setMergeMode(state.mode)\n }\n}\n\n/**\n * Classifies a utility class into a group and returns its specificity.\n *\n * @param utility - The utility class (without modifiers)\n * @returns The group ID (or null) and specificity level\n */\n\nfunction classifyClass(utility: string): { group: string | null; specificity: number } {\n ensureInitialized()\n\n // If merging is disabled, return null\n if (state.mode === false) {\n return { group: null, specificity: 1 }\n }\n\n // Fast path: exact match\n const exactMatch = state.exactMatches.get(utility)\n if (exactMatch) {\n return { group: exactMatch.groupId, specificity: exactMatch.specificity }\n }\n\n // Trie-based prefix match\n const prefixMatch = state.prefixTrie.findLongestMatch(utility)\n if (prefixMatch) {\n return { group: prefixMatch.entry.groupId, specificity: prefixMatch.entry.specificity }\n }\n\n // Pattern-based fallback (for complex patterns like arbitrary values)\n for (const { pattern, groupId, specificity } of state.config.patterns) {\n if (pattern.test(utility)) {\n return { group: groupId, specificity }\n }\n }\n\n // Unknown class\n return { group: null, specificity: 1 }\n}\n\n/** Empty set singleton to avoid allocations */\nconst EMPTY_SET: ReadonlySet<string> = new Set()\n\n/**\n * Gets the groups that a given group conflicts with as a Set (O(1) lookups).\n *\n * @param groupId - The group ID to check\n * @returns Set of conflicting group IDs\n */\n\nfunction getConflictingGroupsSet(groupId: string): ReadonlySet<string> {\n ensureInitialized()\n return state.conflictSets.get(groupId) ?? EMPTY_SET\n}\n\n/**\n * Gets the groups that a given group conflicts with.\n *\n * @param groupId - The group ID to check\n * @returns Array of conflicting group IDs\n */\n\nfunction getConflictingGroups(groupId: string): string[] {\n ensureInitialized()\n return state.conflicts[groupId] ?? []\n}\n\n/**\n * Gets the current merge mode.\n */\n\nfunction getMergeMode(): TwMergeMode {\n return state.mode\n}\n\n/**\n * Gets the current configuration.\n */\n\nfunction getConfig(): ClassGroupConfig {\n ensureInitialized()\n return state.config\n}\n\n/**\n * Resets the classifier to default state (Useful for testing).\n */\n\nfunction resetClassifier(): void {\n state = {\n mode: 'full',\n config: fullConfig,\n prefixTrie: new PrefixTrie(),\n exactMatches: new Map(),\n conflicts: {},\n conflictSets: new Map(),\n initialized: false,\n }\n}\n\n/**\n * Class group information for introspection.\n */\n\ninterface ClassGroup {\n id: string\n conflictsWith: string[]\n}\n\n/**\n * Gets all class groups for introspection.\n * Returns array of group IDs and their conflicts.\n */\n\nfunction getClassGroups(): ClassGroup[] {\n ensureInitialized()\n return Object.entries(state.conflicts).map(([id, conflictsWith]) => ({\n id,\n conflictsWith,\n }))\n}\n\n/**\n * Gets a specific class group by ID.\n */\n\nfunction getClassGroup(id: string): ClassGroup | undefined {\n ensureInitialized()\n if (!(id in state.conflicts)) {\n return undefined\n }\n return { id, conflictsWith: state.conflicts[id] }\n}\n\n// Re-export SPECIFICITY for convenience\nexport { SPECIFICITY } from './groups/types'\n\nexport {\n classifyClass,\n getConflictingGroups,\n getConflictingGroupsSet,\n getClassGroups,\n getClassGroup,\n setMergeMode,\n getMergeMode,\n getConfig,\n resetClassifier,\n}\n","import type { ClassToken, ClassValue } from './types'\nimport { getParseCache } from './cache'\nimport { classifyClass, SPECIFICITY } from './class-groups'\n\n/**\n * Flattens ClassValue inputs into a single string.\n * Handles strings, arrays, objects, and nested combinations.\n *\n * @example\n * ```ts\n * flattenClassValue('a b c') // => 'a b c'\n * flattenClassValue(['a', 'b']) // => 'a b'\n * flattenClassValue({ a: true, b: false }) // => 'a'\n * flattenClassValue(['a', { b: true }, ['c', 'd']]) // => 'a b c d'\n * ```\n */\n\nfunction flattenClassValue(value: ClassValue): string {\n if (value === null || value === undefined || value === false || value === '') {\n return ''\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n if (typeof value === 'number' || typeof value === 'bigint') {\n return String(value)\n }\n\n if (Array.isArray(value)) {\n // Optimization: avoid array allocation for single item\n if (value.length === 1) {\n return flattenClassValue(value[0])\n }\n // Optimization: direct string concatenation instead of array join\n let result = ''\n for (const item of value) {\n const flattened = flattenClassValue(item)\n if (flattened) {\n result = result ? result + ' ' + flattened : flattened\n }\n }\n return result\n }\n\n // Object: include keys where value is truthy\n if (typeof value === 'object') {\n // Optimization: direct string concatenation instead of array join\n let result = ''\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key) && value[key]) {\n result = result ? result + ' ' + key : key\n }\n }\n return result\n }\n\n return ''\n}\n\n/**\n * Flattens multiple ClassValue inputs into a single string.\n *\n * @param inputs - ClassValue inputs to flatten\n * @returns Combined class string\n */\n\nfunction flattenClassValues(...inputs: ClassValue[]): string {\n // Optimization: avoid array allocation, use direct concatenation\n if (inputs.length === 1) {\n return flattenClassValue(inputs[0])\n }\n let result = ''\n for (const input of inputs) {\n const flattened = flattenClassValue(input)\n if (flattened) {\n result = result ? result + ' ' + flattened : flattened\n }\n }\n return result\n}\n\nconst CLASS_SPLIT_REGEX = /\\s+/\nconst ARBITRARY_VALUE_REGEX = /^\\[([a-zA-Z-]+):(.+)\\]$/\nconst ARBITRARY_CSS_VAR_REGEX = /^\\[(--[a-zA-Z0-9-]+):(.+)\\]$/\n\n// Pre-compiled regexes for stripPostfixModifier (optimization: moved from inline)\nconst POSTFIX_NUMBER_REGEX = /^[\\d.]+$/\nconst POSTFIX_FRACTION_REGEX = /^\\d+\\/\\d+$/\nconst POSTFIX_NAMED_REGEX = /^[a-z]+$/\n\n/**\n * Splits a class string into individual class names.\n * Handles whitespace and filters empty strings.\n *\n * @param classString - The class string to split\n * @returns Array of individual class names\n */\n\nfunction splitClasses(classString: string): string[] {\n return classString.split(CLASS_SPLIT_REGEX).filter(Boolean)\n}\n\n/**\n * Extracts modifiers and !important flag from a class name.\n * Modifiers are colon-separated prefixes like \"hover:\", \"md:\", etc.\n * !important can appear as \"!\" modifier or \"!\" prefix on utility.\n *\n * @example\n * ```ts\n * extractModifiers('hover:md:text-red-500')\n * // => { modifiers: ['hover', 'md'], utility: 'text-red-500', hasImportant: false }\n *\n * extractModifiers('hover:!bg-red-500')\n * // => { modifiers: ['hover'], utility: 'bg-red-500', hasImportant: true }\n *\n * extractModifiers('!p-4')\n * // => { modifiers: [], utility: 'p-4', hasImportant: true }\n * ```\n */\n\nfunction extractModifiers(className: string): {\n modifiers: string[]\n utility: string\n hasImportant: boolean\n} {\n // Fast path: no brackets means we can use simple split\n // This covers ~95% of Tailwind classes (e.g., \"hover:md:p-4\")\n if (!className.includes('[')) {\n const colonIndex = className.indexOf(':')\n\n // No modifiers at all (e.g., \"p-4\", \"!p-4\")\n if (colonIndex === -1) {\n if (className.startsWith('!')) {\n return { modifiers: [], utility: className.slice(1), hasImportant: true }\n }\n return { modifiers: [], utility: className, hasImportant: false }\n }\n\n // Has modifiers - use simple split\n const parts = className.split(':')\n let utility = parts[parts.length - 1]\n const modifiers = parts.slice(0, -1)\n let hasImportant = false\n\n // Check for ! prefix on utility\n if (utility.startsWith('!')) {\n utility = utility.slice(1)\n hasImportant = true\n }\n\n // Check for standalone ! in modifiers\n const importantIndex = modifiers.indexOf('!')\n if (importantIndex !== -1) {\n modifiers.splice(importantIndex, 1)\n hasImportant = true\n }\n\n return { modifiers, utility, hasImportant }\n }\n\n // Slow path: handle arbitrary values with colons inside brackets\n // e.g., \"hover:[color:red]\" should be { modifiers: ['hover'], utility: '[color:red]' }\n const parts: string[] = []\n let current = ''\n let bracketDepth = 0\n\n for (const char of className) {\n if (char === '[') {\n bracketDepth++\n current += char\n } else if (char === ']') {\n bracketDepth--\n current += char\n } else if (char === ':' && bracketDepth === 0) {\n if (current) {\n parts.push(current)\n }\n current = ''\n } else {\n current += char\n }\n }\n\n if (current) {\n parts.push(current)\n }\n\n if (parts.length === 0) {\n return { modifiers: [], utility: '', hasImportant: false }\n }\n\n if (parts.length === 1) {\n // Single part - check for ! prefix\n const single = parts[0]\n if (single.startsWith('!')) {\n return { modifiers: [], utility: single.slice(1), hasImportant: true }\n }\n return { modifiers: [], utility: single, hasImportant: false }\n }\n\n let utility = parts[parts.length - 1]\n const modifiers = parts.slice(0, -1)\n let hasImportant = false\n\n // Check for ! prefix on utility (e.g., \"hover:!bg-red-500\")\n if (utility.startsWith('!')) {\n utility = utility.slice(1)\n hasImportant = true\n }\n\n // Check for standalone ! in modifiers (e.g., \"hover:!:bg-red-500\" - unusual but valid)\n const importantIndex = modifiers.indexOf('!')\n if (importantIndex !== -1) {\n modifiers.splice(importantIndex, 1)\n hasImportant = true\n }\n\n return { modifiers, utility, hasImportant }\n}\n\n/**\n * Strips postfix modifier from utility (e.g., \"text-lg/7\" → \"text-lg\").\n * Postfix modifiers are used in Tailwind v3.3+ for:\n * - Line height shorthand: text-lg/7\n * - Opacity modifiers: bg-red-500/50\n *\n * @param utility - The utility class\n * @returns Utility without postfix modifier\n */\n\nfunction stripPostfixModifier(utility: string): string {\n // Don't strip from arbitrary values (e.g., [color:red/50])\n if (utility.includes('[')) {\n return utility\n }\n\n const slashIndex = utility.lastIndexOf('/')\n if (slashIndex === -1) {\n return utility\n }\n\n // Check if what follows the slash looks like a postfix modifier\n // (number, fraction like 1/2, or named value)\n const afterSlash = utility.slice(slashIndex + 1)\n if (POSTFIX_NUMBER_REGEX.test(afterSlash) || POSTFIX_FRACTION_REGEX.test(afterSlash) || POSTFIX_NAMED_REGEX.test(afterSlash)) {\n return utility.slice(0, slashIndex)\n }\n\n return utility\n}\n\n/**\n * Base parsing result without classification.\n */\n\ninterface ParsedClass {\n raw: string\n modifiers: string[]\n modifierKey: string\n hasImportant: boolean\n utility: string\n utilityForClassification: string\n isArbitrary: boolean\n arbitraryProperty?: string\n position: number\n}\n\n/**\n * Parses a single class name without classification.\n * Used by createTw() which does its own classification.\n *\n * @param className - The class name to parse\n * @param position - Original position in the input\n * @returns Parsed class info (without group/specificity)\n */\n\nfunction parseClassBase(className: string, position: number): ParsedClass {\n const { modifiers, utility, hasImportant } = extractModifiers(className)\n\n // Pre-compute sorted modifier key for conflict resolution\n let modifierKey: string\n if (modifiers.length === 0) {\n modifierKey = ''\n } else if (modifiers.length === 1) {\n modifierKey = modifiers[0]\n } else {\n modifierKey = [...modifiers].sort().join(':')\n }\n\n // Strip postfix modifier for classification (e.g., \"text-lg/7\" → \"text-lg\")\n const utilityForClassification = stripPostfixModifier(utility)\n\n // Check for arbitrary values\n const cssVarMatch = utilityForClassification.match(ARBITRARY_CSS_VAR_REGEX)\n if (cssVarMatch) {\n return {\n raw: className,\n modifiers,\n modifierKey,\n hasImportant,\n utility,\n utilityForClassification,\n isArbitrary: true,\n arbitraryProperty: cssVarMatch[1],\n position,\n }\n }\n\n const arbitraryMatch = utilityForClassification.match(ARBITRARY_VALUE_REGEX)\n if (arbitraryMatch) {\n return {\n raw: className,\n modifiers,\n modifierKey,\n hasImportant,\n utility,\n utilityForClassification,\n isArbitrary: true,\n arbitraryProperty: arbitraryMatch[1],\n position,\n }\n }\n\n return {\n raw: className,\n modifiers,\n modifierKey,\n hasImportant,\n utility,\n utilityForClassification,\n isArbitrary: false,\n position,\n }\n}\n\n/**\n * Parses a single class name into a ClassToken.\n * Includes classification using the global classifier.\n *\n * @param className - The class name to parse\n * @param position - Original position in the input\n * @returns Parsed ClassToken with group and specificity\n */\n\nfunction parseClass(className: string, position: number): ClassToken {\n const base = parseClassBase(className, position)\n\n // Handle arbitrary values\n if (base.isArbitrary) {\n const group = base.arbitraryProperty?.startsWith('--')\n ? 'arbitrary-css-var'\n : `arbitrary-${base.arbitraryProperty}`\n return {\n raw: base.raw,\n modifiers: base.modifiers,\n modifierKey: base.modifierKey,\n hasImportant: base.hasImportant,\n utility: base.utility,\n group,\n isArbitrary: true,\n arbitraryProperty: base.arbitraryProperty,\n specificity: SPECIFICITY.ARBITRARY,\n position: base.position,\n }\n }\n\n // Classify using class groups\n const { group, specificity } = classifyClass(base.utilityForClassification)\n\n return {\n raw: base.raw,\n modifiers: base.modifiers,\n modifierKey: base.modifierKey,\n hasImportant: base.hasImportant,\n utility: base.utility,\n group,\n isArbitrary: false,\n specificity,\n position: base.position,\n }\n}\n\n/**\n * Parses a class string into an array of ClassTokens.\n * Results are cached for performance.\n *\n * @param classString - The class string to parse\n * @returns Array of ClassTokens\n */\n\nfunction parseClasses(classString: string): ClassToken[] {\n if (!classString) {\n return []\n }\n\n // Check cache first\n const cache = getParseCache()\n const cached = cache.get(classString)\n if (cached !== undefined) {\n return cached\n }\n\n const classes = splitClasses(classString)\n const tokens: ClassToken[] = new Array(classes.length)\n for (let i = 0; i < classes.length; i++) {\n tokens[i] = parseClass(classes[i], i)\n }\n\n cache.set(classString, tokens)\n return tokens\n}\n\nexport {\n flattenClassValue,\n flattenClassValues,\n splitClasses,\n extractModifiers,\n parseClassBase,\n parseClass,\n parseClasses,\n}\nexport type { ParsedClass }\n","import type { ClassToken, ResolvedClasses, RemovedClass } from './types'\nimport { getConflictingGroups } from './class-groups'\n\n/** Type for a function that returns conflicting groups for a group ID */\nexport type ConflictResolver = (groupId: string) => string[]\n\n/**\n * Core O(n) conflict resolution algorithm.\n * Processes tokens in reverse order (later classes win).\n *\n * @param tokens - Array of class tokens to resolve\n * @param getConflicts - Function to get conflicting groups for a group ID\n * @param trackRemoved - Whether to track removed tokens for debugging\n * @returns Object with kept indices and optionally removed info\n */\n\nfunction resolveCore<T extends boolean>(\n tokens: ClassToken[],\n getConflicts: ConflictResolver,\n trackRemoved: T\n): T extends true\n ? { kept: Set<number>; removed: RemovedClass[] }\n : { kept: Set<number>; removed: null } {\n const kept = new Set<number>()\n\n if (tokens.length === 0) {\n return { kept, removed: trackRemoved ? [] : null } as ReturnType<typeof resolveCore<T>>\n }\n\n if (tokens.length === 1) {\n kept.add(0)\n return { kept, removed: trackRemoved ? [] : null } as ReturnType<typeof resolveCore<T>>\n }\n\n // For tracking mode, we need full token info; otherwise just specificity\n const seen = trackRemoved\n ? new Map<string, { token: ClassToken; specificity: number }>()\n : new Map<string, { specificity: number }>()\n\n const removed: RemovedClass[] = trackRemoved ? [] : (null as unknown as RemovedClass[])\n\n for (let i = tokens.length - 1; i >= 0; i--) {\n const token = tokens[i]\n\n // Unknown classes are always kept\n if (token.group === null) {\n kept.add(i)\n continue\n }\n\n const baseKey = `${token.hasImportant ? '!' : ''}${token.modifierKey}:`\n const ownKey = baseKey + token.group\n const existing = seen.get(ownKey)\n\n // Same group already seen - this token is overridden\n if (existing !== undefined) {\n if (trackRemoved) {\n const existingWithToken = existing as { token: ClassToken; specificity: number }\n removed.push({\n token,\n overriddenBy: existingWithToken.token,\n reason: `overridden by ${existingWithToken.token.raw}`,\n })\n }\n continue\n }\n\n // Check if any conflicting group overrides this token\n let overridden = false\n let overriddenByToken: ClassToken | null = null\n const conflictGroups = getConflicts(token.group)\n\n for (const conflictGroup of conflictGroups) {\n if (conflictGroup === token.group) continue\n\n const conflictKey = baseKey + conflictGroup\n const conflictExisting = seen.get(conflictKey)\n\n if (conflictExisting !== undefined) {\n // Only override if conflict has higher or equal specificity\n if (conflictExisting.specificity > token.specificity) {\n continue\n } else {\n overridden = true\n if (trackRemoved && 'token' in conflictExisting) {\n overriddenByToken = (conflictExisting as { token: ClassToken; specificity: number }).token\n }\n break\n }\n }\n }\n\n if (overridden) {\n if (trackRemoved && overriddenByToken !== null) {\n removed.push({\n token,\n overriddenBy: overriddenByToken,\n reason: `overridden by ${overriddenByToken.raw}`,\n })\n }\n } else {\n kept.add(i)\n if (trackRemoved) {\n ;(seen as Map<string, { token: ClassToken; specificity: number }>).set(ownKey, {\n token,\n specificity: token.specificity,\n })\n } else {\n ;(seen as Map<string, { specificity: number }>).set(ownKey, {\n specificity: token.specificity,\n })\n }\n }\n }\n\n return { kept, removed } as ReturnType<typeof resolveCore<T>>\n}\n\n/** Resolves conflicts with full debug info about removed classes. */\nfunction resolveConflicts(tokens: ClassToken[]): ResolvedClasses {\n if (tokens.length === 0) return { kept: [], removed: [] }\n if (tokens.length === 1) return { kept: [tokens[0]], removed: [] }\n\n const { kept, removed } = resolveCore(tokens, getConflictingGroups, true)\n return {\n kept: tokens.filter((_, i) => kept.has(i)),\n removed,\n }\n}\n\n/** Resolves conflicts returning only kept tokens (faster, no debug info). */\nfunction resolveConflictsSimple(tokens: ClassToken[]): ClassToken[] {\n if (tokens.length <= 1) return tokens\n\n const { kept } = resolveCore(tokens, getConflictingGroups, false)\n return tokens.filter((_, i) => kept.has(i))\n}\n\n/**\n * Configurable conflict resolution for custom tw instances.\n * Accepts a custom conflict resolver function.\n */\n\nfunction resolveWithCustomConflicts(\n tokens: ClassToken[],\n getConflicts: ConflictResolver\n): Set<number> {\n if (tokens.length === 0) return new Set()\n if (tokens.length === 1) return new Set([0])\n\n const { kept } = resolveCore(tokens, getConflicts, false)\n return kept\n}\n\n/**\n * Converts tokens back to a space-separated class string.\n * Optimization: Direct string concatenation instead of map + join.\n */\n\nfunction tokensToString(tokens: ClassToken[]): string {\n if (tokens.length === 0) return ''\n if (tokens.length === 1) return tokens[0].raw\n\n let result = tokens[0].raw\n for (let i = 1; i < tokens.length; i++) {\n result += ' ' + tokens[i].raw\n }\n return result\n}\n\nexport {\n resolveConflicts,\n resolveConflictsSimple,\n resolveWithCustomConflicts,\n tokensToString,\n}\n","\"use client\";\n\nimport type { ClassValue, TwConfig, ClassToken } from \"./types\";\nimport type { ClassGroupConfig, PrefixEntry } from \"./groups/types\";\nimport { SPECIFICITY } from \"./groups/types\";\nimport { flattenClassValues, parseClassBase, splitClasses } from \"./parser\";\nimport { LRUCache } from \"./cache\";\nimport { fullConfig as defaultFullConfig } from \"./groups/full\";\nimport { minimalConfig as defaultMinimalConfig } from \"./groups/minimal\";\nimport { PrefixTrie } from \"./trie\";\nimport { resolveWithCustomConflicts } from \"./resolver\";\n\n// ============================================================================\n// Custom tw() Factory\n// ============================================================================\n\n/**\n * Creates a customized tw function with extended or overridden configuration.\n *\n * Use this when you need to:\n * - Add custom class groups for your design system\n * - Change conflict resolution behavior\n * - Add a Tailwind prefix\n * - Adjust cache size\n * - Use minimal mode for smaller bundle\n *\n * @param config - Configuration options\n * @returns A customized tw function\n *\n * @example\n * ```tsx\n * // Add custom class groups\n * const tw = createTw({\n * extend: {\n * classGroups: {\n * 'custom-size': ['size-xs', 'size-sm', 'size-md', 'size-lg', 'size-xl'],\n * },\n * },\n * })\n *\n * tw('size-sm size-lg') // => 'size-lg'\n *\n * // Use minimal mode for smaller bundle\n * const tw = createTw({\n * mode: 'minimal',\n * })\n *\n * // With Tailwind prefix\n * const tw = createTw({\n * prefix: 'tw-',\n * })\n *\n * tw('tw-p-4 tw-p-8') // => 'tw-p-8'\n *\n * // Disable caching\n * const tw = createTw({\n * cacheSize: 0,\n * })\n *\n * // Disable merging entirely (just join classes)\n * const tw = createTw({\n * mode: false,\n * })\n * ```\n */\n\nfunction createTw(config: TwConfig = {}): (...inputs: ClassValue[]) => string {\n // Validate config\n if (config.cacheSize !== undefined && config.cacheSize < 0) {\n throw new Error(\"tw-mrg: cacheSize must be non-negative\");\n }\n\n const {\n prefix = \"\",\n cacheSize = 500,\n mode = \"full\",\n extend,\n override,\n } = config;\n\n if (mode === false) {\n return function noMergeTw(...inputs: ClassValue[]): string {\n return flattenClassValues(...inputs);\n };\n }\n\n const baseConfig =\n mode === \"minimal\" ? defaultMinimalConfig : defaultFullConfig;\n const groupConfig = buildGroupConfig(baseConfig, extend, override);\n\n const trie = new PrefixTrie();\n const exactMatches = new Map<string, PrefixEntry>();\n\n for (const [pfx, entry] of Object.entries(groupConfig.prefixes)) {\n trie.insert(pfx, entry);\n }\n\n for (const [className, entry] of Object.entries(groupConfig.exactMatches)) {\n exactMatches.set(className, entry);\n }\n\n const cache =\n cacheSize > 0 ? new LRUCache<string, string>(cacheSize) : null;\n\n /**\n * Classifies a utility class into a group.\n */\n\n function classifyUtility(utility: string): {\n group: string | null;\n specificity: number;\n } {\n const unprefixed =\n prefix && utility.startsWith(prefix)\n ? utility.slice(prefix.length)\n : utility;\n\n const exact = exactMatches.get(unprefixed);\n if (exact) {\n return { group: exact.groupId, specificity: exact.specificity };\n }\n\n const prefixMatch = trie.findLongestMatch(unprefixed);\n if (prefixMatch) {\n return {\n group: prefixMatch.entry.groupId,\n specificity: prefixMatch.entry.specificity,\n };\n }\n\n for (const { pattern, groupId, specificity } of groupConfig.patterns) {\n if (pattern.test(unprefixed)) {\n return { group: groupId, specificity };\n }\n }\n\n return { group: null, specificity: 1 };\n }\n\n /**\n * Gets conflicting groups for a group ID.\n */\n\n function getConflicts(groupId: string): string[] {\n return groupConfig.conflicts[groupId] ?? [];\n }\n\n return function customTw(...inputs: ClassValue[]): string {\n if (inputs.length === 0) return \"\";\n\n const classString = flattenClassValues(...inputs);\n if (!classString) return \"\";\n if (!classString.includes(\" \")) return classString;\n\n if (cache) {\n const cached = cache.get(classString);\n if (cached !== undefined) return cached;\n }\n\n const classes = splitClasses(classString);\n const tokens: ClassToken[] = new Array(classes.length);\n\n for (let i = 0; i < classes.length; i++) {\n const parsed = parseClassBase(classes[i], i);\n\n // Handle arbitrary values\n if (parsed.isArbitrary) {\n const group = parsed.arbitraryProperty?.startsWith(\"--\")\n ? \"arbitrary-css-var\"\n : `arbitrary-${parsed.arbitraryProperty}`;\n tokens[i] = {\n raw: parsed.raw,\n modifiers: parsed.modifiers,\n modifierKey: parsed.modifierKey,\n hasImportant: parsed.hasImportant,\n utility: parsed.utility,\n group,\n isArbitrary: true,\n arbitraryProperty: parsed.arbitraryProperty,\n specificity: SPECIFICITY.ARBITRARY,\n position: parsed.position,\n };\n } else {\n // Classify using custom classifier\n const { group, specificity } = classifyUtility(\n parsed.utilityForClassification,\n );\n tokens[i] = {\n raw: parsed.raw,\n modifiers: parsed.modifiers,\n modifierKey: parsed.modifierKey,\n hasImportant: parsed.hasImportant,\n utility: parsed.utility,\n group,\n isArbitrary: false,\n specificity,\n position: parsed.position,\n };\n }\n }\n\n // Use shared resolver with custom conflict function\n const kept = resolveWithCustomConflicts(tokens, getConflicts);\n\n // Build result string directly without intermediate array\n let result = \"\";\n for (let i = 0; i < tokens.length; i++) {\n if (kept.has(i)) {\n result = result ? result + \" \" + tokens[i].raw : tokens[i].raw;\n }\n }\n\n if (cache) {\n cache.set(classString, result);\n }\n\n return result;\n };\n}\n\n/**\n * Adds class group patterns to config.\n */\n\nfunction addClassGroups(\n config: ClassGroupConfig,\n classGroups: Record<string, (string | RegExp)[]>,\n addSelfConflict: boolean,\n): void {\n for (const [id, patterns] of Object.entries(classGroups)) {\n for (const p of patterns) {\n if (p instanceof RegExp) {\n config.patterns.push({\n pattern: p,\n groupId: id,\n specificity: 1,\n });\n } else {\n config.exactMatches[p] = { groupId: id, specificity: 1 };\n }\n }\n if (addSelfConflict && config.conflicts[id] === undefined) {\n config.conflicts[id] = [id];\n }\n }\n}\n\n/**\n * Builds group configuration from base + extensions + overrides.\n */\n\nfunction buildGroupConfig(\n base: ClassGroupConfig,\n extend?: TwConfig[\"extend\"],\n override?: TwConfig[\"override\"],\n): ClassGroupConfig {\n const config: ClassGroupConfig = {\n prefixes: { ...base.prefixes },\n exactMatches: { ...base.exactMatches },\n patterns: [...base.patterns],\n conflicts: { ...base.conflicts },\n };\n\n if (override?.classGroups) {\n addClassGroups(config, override.classGroups, false);\n }\n\n if (extend?.classGroups) {\n addClassGroups(config, extend.classGroups, true);\n }\n\n if (extend?.conflictingClassGroups) {\n for (const [id, conflicts] of Object.entries(\n extend.conflictingClassGroups,\n )) {\n const existing = config.conflicts[id] as string[] | undefined;\n config.conflicts[id] =\n existing !== undefined\n ? [...new Set([...existing, ...conflicts])]\n : conflicts;\n }\n }\n\n if (override?.conflictingClassGroups) {\n Object.assign(config.conflicts, override.conflictingClassGroups);\n }\n\n if (extend?.prefixes) {\n for (const [pfx, entry] of Object.entries(extend.prefixes)) {\n config.prefixes[pfx] = {\n groupId: entry.groupId,\n specificity: entry.specificity ?? 1,\n };\n }\n }\n\n return config;\n}\n\nexport { createTw };\n","'use client'\n\nimport type { ClassValue } from './types'\nimport { createTw } from './create-tw'\nimport { getMergeMode } from './class-groups'\nimport { flattenClassValues } from './parser'\n\n/**\n * Default tw() function.\n * Uses the full class group configuration.\n *\n * Respects the global merge mode set by setMergeMode().\n * For customization (prefix, custom groups, etc.), use createTw() instead.\n */\n\n// Create internal merge function for 'full' mode\nconst twMerge = createTw({ mode: 'full' })\n\nfunction tw(...inputs: ClassValue[]): string {\n // Check if merging is disabled globally\n if (getMergeMode() === false) {\n return flattenClassValues(...inputs)\n }\n return twMerge(...inputs)\n}\n\nexport { tw }\n","import type { ClassValue } from './types'\nimport { flattenClassValues } from './parser'\n\n/**\n * Joins class values without conflict resolution (clsx-style).\n * Faster than `tw()` when conflicts don't need resolving.\n *\n * @example\n * twJoin('base', isActive && 'active', { hidden: isHidden })\n * twJoin('p-4', 'p-8') // => 'p-4 p-8' (both preserved, unlike tw)\n */\n\nfunction twJoin(...inputs: ClassValue[]): string {\n return flattenClassValues(...inputs)\n}\n\nexport { twJoin }\n","/**\n * CSS Generator using Tailwind's design system.\n * Works with any Tailwind v4 project - no config required.\n */\n\nimport { __unstable__loadDesignSystem } from 'tailwindcss'\n\ninterface DesignSystem {\n candidatesToCss(classes: string[]): (string | null)[]\n resolveThemeValue(path: string, forceInline?: boolean): string | undefined\n /** Returns class order as BigInt (null for invalid classes) */\n getClassOrder(classes: string[]): [string, bigint | null][]\n /** Canonicalizes classes (e.g., mt-2 mr-2 mb-2 ml-2 → m-2) */\n canonicalizeCandidates(candidates: string[], options?: Record<string, unknown>): string[]\n}\n\nlet designSystem: DesignSystem | null = null\nlet initPromise: Promise<void> | null = null\n\nexport interface CSSGeneratorOptions {\n /**\n * Custom CSS to initialize the design system with.\n * Defaults to '@import \"tailwindcss\";' which includes full default theme.\n */\n css?: string\n}\n\n/**\n * Initialize the CSS generator.\n * Call once at app startup before using twPrefix().\n *\n * @example\n * // Basic usage (uses Tailwind defaults)\n * await initCSSGenerator()\n *\n * @example\n * // With custom theme\n * await initCSSGenerator({\n * css: `\n * @import \"tailwindcss\";\n * @theme {\n * --color-brand: #ff6600;\n * }\n * `\n * })\n */\nexport async function initCSSGenerator(options: CSSGeneratorOptions = {}): Promise<void> {\n if (designSystem) return\n if (initPromise) return initPromise\n\n const css = options.css ?? '@import \"tailwindcss\";'\n\n initPromise = (async () => {\n designSystem = await __unstable__loadDesignSystem(css)\n })()\n\n return initPromise\n}\n\n/** Generate CSS for a single Tailwind class. Returns null if invalid or uninitialized. */\nexport function generateCSS(className: string): string | null {\n if (!designSystem) return null\n const [css] = designSystem.candidatesToCss([className])\n return css ?? null\n}\n\n/** Generate CSS for multiple classes at once (more efficient than repeated generateCSS calls). */\nexport function generateCSSBatch(classNames: string[]): (string | null)[] {\n if (!designSystem) return classNames.map(() => null)\n return designSystem.candidatesToCss(classNames)\n}\n\nexport function isInitialized(): boolean {\n return designSystem !== null\n}\n\n/** Get a theme value by path (e.g., '--color-red-500' → 'oklch(63.7% 0.237 25.331)'). */\nexport function getThemeValue(path: string): string | undefined {\n if (!designSystem) return undefined\n return designSystem.resolveThemeValue(path)\n}\n\n/**\n * Validates if a class is a valid Tailwind utility.\n * Returns true if the class produces CSS output.\n *\n * @example\n * isValidClass('p-4') // => true\n * isValidClass('invalid-class') // => false\n */\nexport function isValidClass(className: string): boolean {\n if (!designSystem) return false\n const [css] = designSystem.candidatesToCss([className])\n return css !== null\n}\n\n/**\n * Validates multiple classes at once.\n * Returns an array of booleans indicating validity.\n *\n * @example\n * validateClasses(['p-4', 'invalid', 'm-2']) // => [true, false, true]\n */\nexport function validateClasses(classNames: string[]): boolean[] {\n if (!designSystem) return classNames.map(() => false)\n return designSystem.candidatesToCss(classNames).map(css => css !== null)\n}\n\n/**\n * Gets the sort order for classes (useful for deterministic ordering).\n * Returns null for invalid classes.\n *\n * @example\n * getClassOrder(['p-4', 'm-2']) // => [['p-4', 123n], ['m-2', 456n]]\n */\nexport function getClassOrder(classNames: string[]): [string, bigint | null][] {\n if (!designSystem) return classNames.map(c => [c, null])\n return designSystem.getClassOrder(classNames)\n}\n\n/**\n * Canonicalizes classes by collapsing redundant utilities.\n * For example, mt-2 mr-2 mb-2 ml-2 → m-2\n *\n * Note: Requires the CSS generator to be initialized.\n *\n * @example\n * canonicalizeClasses(['mt-2', 'mr-2', 'mb-2', 'ml-2']) // => ['m-2']\n */\n\nexport function canonicalizeClasses(classNames: string[]): string[] {\n if (!designSystem) return classNames\n return designSystem.canonicalizeCandidates(classNames)\n}\n","\"use client\";\n\nlet styleElement: HTMLStyleElement | null = null;\nconst injectedClasses = new Set<string>();\n\n/** Error handler for CSS injection failures */\ntype StyleInjectorErrorHandler = (error: Error, context: string) => void;\nlet errorHandler: StyleInjectorErrorHandler | null = null;\n\n/**\n * Sets a custom error handler for CSS injection failures.\n * Useful for debugging when CSS injection silently fails.\n *\n * @param handler - Error handler function, or null to disable\n *\n * @example\n * ```ts\n * setStyleInjectorErrorHandler((error, context) => {\n * console.warn(`CSS injection failed in ${context}:`, error)\n * })\n * ```\n */\n\nexport function setStyleInjectorErrorHandler(\n handler: StyleInjectorErrorHandler | null,\n): void {\n errorHandler = handler;\n}\n\nexport function getStyleElement(): HTMLStyleElement | null {\n if (typeof document === \"undefined\") return null;\n\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"tw-mrg-styles\";\n document.head.appendChild(styleElement);\n }\n return styleElement;\n}\n\n/**\n * Injects a CSS rule for a class.\n * Uses insertRule for better performance when available.\n */\n\nexport function injectCSS(className: string, cssRule: string): void {\n if (injectedClasses.has(className)) return;\n\n const style = getStyleElement();\n if (!style) return;\n\n // Try to use insertRule for better performance\n const sheet = style.sheet;\n if (sheet) {\n try {\n sheet.insertRule(cssRule, sheet.cssRules.length);\n injectedClasses.add(className);\n return;\n } catch (e) {\n // Fall back to textContent if insertRule fails (e.g., invalid CSS)\n errorHandler?.(\n e instanceof Error ? e : new Error(String(e)),\n \"injectCSS\",\n );\n }\n }\n\n // Fallback: append to textContent\n style.textContent += cssRule + \"\\n\";\n injectedClasses.add(className);\n}\n\n/**\n * Batched injection for performance.\n * Uses insertRule when available, falls back to textContent.\n */\n\nexport function injectCSSBatch(\n classNames: string[],\n cssRules: (string | null)[],\n): void {\n const style = getStyleElement();\n if (!style) return;\n\n const sheet = style.sheet;\n const useInsertRule = sheet !== null;\n\n // Collect rules that need to be injected\n const rulesToInject: string[] = [];\n for (let i = 0; i < classNames.length; i++) {\n const className = classNames[i];\n const css = cssRules[i];\n if (css && className && !injectedClasses.has(className)) {\n if (useInsertRule) {\n try {\n sheet.insertRule(css, sheet.cssRules.length);\n injectedClasses.add(className);\n } catch (e) {\n // If insertRule fails, collect for textContent fallback\n errorHandler?.(\n e instanceof Error ? e : new Error(String(e)),\n \"injectCSSBatch\",\n );\n rulesToInject.push(css);\n injectedClasses.add(className);\n }\n } else {\n rulesToInject.push(css);\n injectedClasses.add(className);\n }\n }\n }\n\n // Fallback: batch append to textContent\n if (rulesToInject.length > 0) {\n style.textContent += rulesToInject.join(\"\\n\") + \"\\n\";\n }\n}\n\nexport function hasInjectedClass(className: string): boolean {\n return injectedClasses.has(className);\n}\n\nexport function clearInjectedStyles(): void {\n if (styleElement) {\n // Clear both textContent and stylesheet rules\n const sheet = styleElement.sheet;\n if (sheet) {\n while (sheet.cssRules.length > 0) {\n sheet.deleteRule(0);\n }\n }\n styleElement.textContent = \"\";\n }\n injectedClasses.clear();\n}\n\nexport function getInjectedClasses(): string[] {\n return Array.from(injectedClasses);\n}\n\n/**\n * Resets internal state. Only for testing.\n * @internal\n */\n\nexport function __resetForTesting(): void {\n styleElement = null;\n injectedClasses.clear();\n errorHandler = null;\n}\n","'use client'\n\nimport { generateCSSBatch, isInitialized } from './css-generator'\nimport { injectCSSBatch, hasInjectedClass } from './style-injector'\n\n/**\n * Bulk-prefix classes with a modifier.\n * Does not merge - use `tw()` to merge the result if needed.\n *\n * Supports two forms:\n * 1. **Simple form**: `twPrefix(modifier, classes)` - prefix all classes with a single modifier\n * 2. **Object form**: `twPrefix({ modifier: classes, ... })` - prefix multiple sets at once\n *\n * @param modifierOrObject - Either a modifier string (with trailing colon) or an object mapping modifiers to classes\n * @param classes - When using simple form, the classes to prefix\n * @returns Prefixed class string\n *\n * @example\n * ```tsx\n * // Simple form - prefix all classes with a modifier\n * twPrefix(\"hover:\", \"leading-none bg-white p-0\")\n * // => \"hover:leading-none hover:bg-white hover:p-0\"\n *\n * // Complex modifiers (group-hover, data attributes, etc.)\n * twPrefix(\"group-hover:\", \"opacity-100 scale-105\")\n * // => \"group-hover:opacity-100 group-hover:scale-105\"\n *\n * twPrefix(\"data-[state=open]:\", \"rotate-180\")\n * // => \"data-[state=open]:rotate-180\"\n *\n * // Object form - multiple modifiers at once\n * twPrefix({\n * \"hover:\": \"bg-white scale-105\",\n * \"focus:\": \"ring-2 ring-blue-500\",\n * \"group-hover:\": \"opacity-100\"\n * })\n * // => \"hover:bg-white hover:scale-105 focus:ring-2 focus:ring-blue-500 group-hover:opacity-100\"\n *\n * // Compose with tw() for merging\n * tw(\n * \"bg-gray-100\",\n * twPrefix(\"hover:\", \"bg-white\"),\n * twPrefix(\"focus:\", \"ring-2\")\n * )\n * // => \"bg-gray-100 hover:bg-white focus:ring-2\"\n *\n * // Stacked modifiers\n * twPrefix(\"hover:md:\", \"text-lg font-bold\")\n * // => \"hover:md:text-lg hover:md:font-bold\"\n * ```\n */\n\nconst CLASS_SPLIT_REGEX = /\\s+/\n\nfunction twPrefix(modifier: string, classes: string): string\nfunction twPrefix(modifierMap: Record<string, string>): string\nfunction twPrefix(\n modifierOrMap: string | Record<string, string>,\n classes?: string\n): string {\n let composed: string\n let prefixedClassNames: string[] | null = null\n\n if (typeof modifierOrMap === 'object') {\n // Collect all prefixed class names for CSS injection\n const allPrefixed: string[] = []\n let result = ''\n for (const modifier in modifierOrMap) {\n if (Object.prototype.hasOwnProperty.call(modifierOrMap, modifier)) {\n const classString = modifierOrMap[modifier]\n if (classString) {\n const { str, classNames } = prefixClassesWithNames(modifier, classString)\n if (str) {\n result = result ? result + ' ' + str : str\n for (const cls of classNames) {\n allPrefixed.push(cls)\n }\n }\n }\n }\n }\n composed = result\n prefixedClassNames = allPrefixed\n } else {\n const { str, classNames } = prefixClassesWithNames(modifierOrMap, classes ?? '')\n composed = str\n prefixedClassNames = classNames\n }\n\n if (typeof window !== 'undefined' && isInitialized() && prefixedClassNames.length > 0) {\n const newClassNames = prefixedClassNames.filter((cls) => !hasInjectedClass(cls))\n\n if (newClassNames.length > 0) {\n const cssRules = generateCSSBatch(newClassNames)\n injectCSSBatch(newClassNames, cssRules)\n }\n }\n\n return composed\n}\n\n/**\n * Prefixes classes and returns both the string and class names array.\n * Avoids double splitting by returning both results.\n */\n\nfunction prefixClassesWithNames(modifier: string, classes: string): { str: string; classNames: string[] } {\n const classList = classes.split(CLASS_SPLIT_REGEX).filter(Boolean)\n if (classList.length === 0) return { str: '', classNames: [] }\n\n // Direct concatenation instead of map().join()\n const classNames: string[] = new Array(classList.length)\n let str = ''\n for (let i = 0; i < classList.length; i++) {\n const prefixed = modifier + classList[i]\n classNames[i] = prefixed\n str = str ? str + ' ' + prefixed : prefixed\n }\n return { str, classNames }\n}\n\nexport { twPrefix }\n","'use client'\n\nimport type {\n ClassValue,\n TwStatesConfig,\n VariantsSchema,\n VariantProps,\n TwStatesResult,\n CompoundVariant,\n} from './types'\nimport { tw } from './tw'\n\n/**\n * Creates a variant-based styling function (CVA-like) integrated with tw().\n *\n * @example\n * const button = twStates({\n * base: 'px-4 py-2 rounded',\n * variants: {\n * variant: { primary: 'bg-blue-500', secondary: 'bg-gray-200' },\n * size: { sm: 'text-sm', lg: 'text-lg' },\n * },\n * defaultVariants: { variant: 'primary', size: 'sm' },\n * })\n *\n * button() // uses defaults\n * button({ variant: 'secondary', size: 'lg', className: 'mt-4' })\n */\n\nfunction twStates<V extends VariantsSchema>(\n config: TwStatesConfig<V>\n): TwStatesResult<V> {\n const { base, variants, defaultVariants, compoundVariants } = config\n\n // Pre-compute variant keys to avoid Object.entries/Object.keys in hot path\n const variantKeys = variants ? Object.keys(variants) : []\n\n // Pre-extract compound variant keys (excluding 'class' and 'className')\n const compoundVariantKeys: string[][] | null = compoundVariants\n ? compoundVariants.map((compound) => {\n const keys: string[] = []\n for (const key in compound) {\n if (Object.prototype.hasOwnProperty.call(compound, key) && key !== 'class' && key !== 'className') {\n keys.push(key)\n }\n }\n return keys\n })\n : null\n\n return (props = {}) => {\n const { class: classFromProps, className, ...variantProps } = props\n const classes: ClassValue[] = []\n\n if (base) {\n classes.push(base)\n }\n\n if (variants) {\n for (const variantKey of variantKeys) {\n const value =\n (variantProps as Record<string, unknown>)[variantKey] ??\n defaultVariants?.[variantKey as keyof typeof defaultVariants]\n\n if (value !== null && value !== undefined) {\n const variantClasses = variants[variantKey][value as string]\n if (variantClasses) {\n classes.push(variantClasses)\n }\n }\n }\n }\n\n if (compoundVariants && compoundVariantKeys) {\n for (let i = 0; i < compoundVariants.length; i++) {\n const compound = compoundVariants[i]\n const keys = compoundVariantKeys[i]\n if (matchesCompoundVariantFast(compound, keys, variantProps as Record<string, unknown>, defaultVariants)) {\n const compoundClass = compound.class ?? compound.className\n if (compoundClass) {\n classes.push(compoundClass)\n }\n }\n }\n }\n\n if (classFromProps) {\n classes.push(classFromProps)\n }\n if (className) {\n classes.push(className)\n }\n\n return tw(...classes)\n }\n}\n\n/**\n * Fast compound variant matcher using pre-computed keys.\n * Avoids Object.entries allocation in hot path.\n */\n\nfunction matchesCompoundVariantFast<V extends VariantsSchema>(\n compound: CompoundVariant<V>,\n keys: string[],\n props: Record<string, unknown>,\n defaults?: VariantProps<V>\n): boolean {\n for (const key of keys) {\n const value = (compound as Record<string, unknown>)[key]\n const actualValue =\n props[key] ?? defaults?.[key as keyof typeof defaults]\n\n if (normalizeValue(actualValue) !== normalizeValue(value)) {\n return false\n }\n }\n return true\n}\n\n/** Normalizes boolean-like values ('true'/'false' strings to booleans). */\nfunction normalizeValue(value: unknown): unknown {\n if (value === 'true' || value === true) return true\n if (value === 'false' || value === false) return false\n return value\n}\n\nexport { twStates }\n","'use client'\n\nimport type { ClassValue, TwDebugResult, TwDebugRemovedClass, TwDebugKeptClass } from './types'\nimport { flattenClassValues, parseClasses } from './parser'\nimport { resolveConflicts, tokensToString } from './resolver'\n\n/**\n * Returns detailed information about class merging decisions.\n * Useful for debugging why classes were removed or kept.\n *\n * Unlike `tw()`, this function does not cache results and provides\n * full information about the resolution process.\n *\n * @param inputs - Class strings, objects, arrays, or falsy values\n * @returns Debug result with output, removed, and kept information\n *\n * @example\n * ```tsx\n * const result = twDebug('p-4 px-2 p-8')\n * // => {\n * // output: 'px-2 p-8',\n * // removed: [\n * // { class: 'p-4', reason: 'overridden by p-8', conflictsWith: 'p-8' }\n * // ],\n * // kept: [\n * // { class: 'px-2', group: 'padding-x' },\n * // { class: 'p-8', group: 'padding' }\n * // ]\n * // }\n *\n * // Check why a class was removed\n * const { removed } = twDebug('text-sm text-lg text-red-500')\n * removed.forEach(r => console.log(`${r.class} was ${r.reason}`))\n *\n * // Inspect group assignments\n * const { kept } = twDebug('hover:bg-blue-500 focus:ring-2')\n * kept.forEach(k => console.log(`${k.class} -> ${k.group}`))\n * ```\n */\n\nfunction twDebug(...inputs: ClassValue[]): TwDebugResult {\n if (inputs.length === 0) {\n return { output: '', removed: [], kept: [] }\n }\n\n const classString = flattenClassValues(...inputs)\n if (!classString) {\n return { output: '', removed: [], kept: [] }\n }\n\n // Single class - no conflicts possible\n if (!classString.includes(' ')) {\n const tokens = parseClasses(classString)\n return {\n output: classString,\n removed: [],\n kept: tokens.map((t) => ({\n class: t.raw,\n group: t.group,\n })),\n }\n }\n\n const tokens = parseClasses(classString)\n const { kept, removed } = resolveConflicts(tokens)\n\n const removedClasses: TwDebugRemovedClass[] = removed.map((r) => ({\n class: r.token.raw,\n reason: r.reason,\n conflictsWith: r.overriddenBy.raw,\n }))\n\n const keptClasses: TwDebugKeptClass[] = kept.map((k) => ({\n class: k.raw,\n group: k.group,\n }))\n\n return {\n output: tokensToString(kept),\n removed: removedClasses,\n kept: keptClasses,\n }\n}\n\nexport { twDebug }\n"],"mappings":";;;AAKO,IAAM,cAAc;AAAA;AAAA,EAEzB,KAAK;AAAA;AAAA,EAEL,MAAM;AAAA;AAAA,EAEN,MAAM;AAAA;AAAA,EAEN,WAAW;AACb;AAsCO,SAAS,OAAO,SAAiB,cAAc,GAAgB;AACpE,SAAO,EAAE,SAAS,YAAY;AAChC;AAMO,SAAS,gBAAgB,SAA+C;AAC7E,QAAM,SAA2B;AAAA,IAC/B,UAAU,CAAC;AAAA,IACX,cAAc,CAAC;AAAA,IACf,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,EACd;AAEA,aAAW,UAAU,SAAS;AAC5B,WAAO,OAAO,OAAO,UAAU,OAAO,QAAQ;AAC9C,WAAO,OAAO,OAAO,cAAc,OAAO,YAAY;AACtD,WAAO,SAAS,KAAK,GAAG,OAAO,QAAQ;AAEvC,eAAW,CAAC,KAAK,MAAM,KAAK,OAAO,QAAQ,OAAO,SAAS,GAAG;AAC5D,UAAI,OAAO,OAAO,WAAW;AAC3B,eAAO,UAAU,GAAG,IAAI,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,OAAO,UAAU,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC;AAAA,MAC5E,OAAO;AACL,eAAO,UAAU,GAAG,IAAI,CAAC,GAAG,MAAM;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAkCO,SAAS,kBAAkB,WAA8B,gBAAgB,OAAoB;AAClG,QAAM,YAAyB,CAAC;AAEhC,aAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,SAAS,GAAG;AAEpD,UAAM,YAAsB,CAAC,IAAI;AACjC,UAAM,aAAa,oBAAI,IAAoB;AAE3C,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAChD,UAAI,CAAC,SAAS,MAAM,WAAW,EAAG;AAClC,YAAM,YAAY,GAAG,IAAI,IAAI,IAAI;AACjC,gBAAU,KAAK,SAAS;AAExB,iBAAW,QAAQ,OAAO;AACxB,cAAM,YAAY,gBAAgB,OAAO,GAAG,IAAI,IAAI,IAAI;AACxD,kBAAU,KAAK,SAAS;AACxB,mBAAW,IAAI,WAAW,SAAS;AAAA,MACrC;AAAA,IACF;AAGA,cAAU,IAAI,IAAI,CAAC,GAAG,SAAS;AAG/B,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAChD,UAAI,CAAC,SAAS,MAAM,WAAW,EAAG;AAClC,YAAM,YAAY,GAAG,IAAI,IAAI,IAAI;AACjC,YAAM,aAAa,MAAM,IAAI,OAAK,gBAAgB,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE;AACpE,gBAAU,SAAS,IAAI,CAAC,MAAM,WAAW,GAAG,UAAU;AAAA,IACxD;AAGA,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAChD,UAAI,CAAC,SAAS,MAAM,WAAW,EAAG;AAClC,YAAM,YAAY,GAAG,IAAI,IAAI,IAAI;AACjC,iBAAW,QAAQ,OAAO;AACxB,cAAM,YAAY,gBAAgB,OAAO,GAAG,IAAI,IAAI,IAAI;AACxD,kBAAU,SAAS,IAAI,CAAC,MAAM,WAAW,SAAS;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,mBAAmB,UAAiC;AAClE,QAAM,YAAyB,CAAC;AAChC,aAAW,MAAM,UAAU;AACzB,cAAU,EAAE,IAAI,CAAC,EAAE;AAAA,EACrB;AACA,SAAO;AACT;;;AC3JA,IAAM,WAAN,MAA4C;AAAA,EAI1C,YAAY,UAAU,KAAK;AAH3B,SAAQ,QAAQ,oBAAI,IAAU;AAI5B,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA,EAGA,IAAI,KAAuB;AACzB,UAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAChC,QAAI,UAAU,QAAW;AACvB,aAAO;AAAA,IACT;AAEA,SAAK,MAAM,OAAO,GAAG;AACrB,SAAK,MAAM,IAAI,KAAK,KAAK;AACzB,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,KAAQ,OAAgB;AAE1B,SAAK,MAAM,OAAO,GAAG;AACrB,SAAK,MAAM,IAAI,KAAK,KAAK;AAGzB,QAAI,KAAK,MAAM,OAAO,KAAK,SAAS;AAElC,YAAM,YAAY,KAAK,MAAM,KAAK,EAAE,KAAK,EAAE;AAC3C,UAAI,cAAc,QAAW;AAC3B,aAAK,MAAM,OAAO,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,KAAiB;AACnB,WAAO,KAAK,MAAM,IAAI,GAAG;AAAA,EAC3B;AAAA,EAEA,QAAc;AACZ,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;AAGA,IAAI,aAAoD;AACxD,IAAI,aAA8C;AAElD,SAAS,gBAAgD;AACvD,MAAI,eAAe,MAAM;AACvB,iBAAa,IAAI,SAA+B,GAAI;AAAA,EACtD;AACA,SAAO;AACT;AASA,SAAS,cAAoB;AAC3B,cAAY,MAAM;AAClB,cAAY,MAAM;AACpB;AAYA,SAAS,gBAA0D;AACjE,SAAO;AAAA,IACL,WAAW,YAAY,QAAQ;AAAA,IAC/B,WAAW,YAAY,QAAQ;AAAA,EACjC;AACF;;;ACpGA,IAAM,mBAAmB;AAAA,EACvB,UAAU,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE;AAAA,EACzB,YAAY,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE;AAC7B;AAGA,IAAM,kBAAkB;AAAA,EACtB,OAAO,EAAE,GAAG,CAAC,QAAQ,SAAS,SAAS,KAAK,GAAG,GAAG,CAAC,OAAO,QAAQ,EAAE;AACtE;AAMO,IAAM,eAAiC;AAAA,EAC5C,UAAU;AAAA;AAAA,IAER,WAAW,OAAO,cAAc;AAAA;AAAA,IAGhC,YAAY,OAAO,SAAS;AAAA;AAAA,IAG5B,cAAc,OAAO,WAAW;AAAA;AAAA,IAGhC,UAAU,OAAO,SAAS,YAAY,GAAG;AAAA,IACzC,WAAW,OAAO,SAAS,YAAY,GAAG;AAAA,IAC1C,YAAY,OAAO,WAAW,YAAY,IAAI;AAAA,IAC9C,aAAa,OAAO,WAAW,YAAY,IAAI;AAAA,IAC/C,YAAY,OAAO,WAAW,YAAY,IAAI;AAAA,IAC9C,aAAa,OAAO,WAAW,YAAY,IAAI;AAAA,IAC/C,QAAQ,OAAO,OAAO,YAAY,IAAI;AAAA,IACtC,SAAS,OAAO,OAAO,YAAY,IAAI;AAAA,IACvC,UAAU,OAAO,SAAS,YAAY,IAAI;AAAA,IAC1C,WAAW,OAAO,SAAS,YAAY,IAAI;AAAA,IAC3C,WAAW,OAAO,UAAU,YAAY,IAAI;AAAA,IAC5C,YAAY,OAAO,UAAU,YAAY,IAAI;AAAA,IAC7C,SAAS,OAAO,QAAQ,YAAY,IAAI;AAAA,IACxC,UAAU,OAAO,QAAQ,YAAY,IAAI;AAAA,IACzC,UAAU,OAAO,SAAS,YAAY,IAAI;AAAA,IAC1C,WAAW,OAAO,SAAS,YAAY,IAAI;AAAA,IAC3C,QAAQ,OAAO,OAAO,YAAY,IAAI;AAAA,IACtC,SAAS,OAAO,OAAO,YAAY,IAAI;AAAA;AAAA,IAGvC,MAAM,OAAO,SAAS;AAAA,IACtB,OAAO,OAAO,SAAS;AAAA;AAAA,IAGvB,UAAU,OAAO,OAAO;AAAA,IACxB,UAAU,OAAO,OAAO;AAAA;AAAA,IAGxB,WAAW,OAAO,YAAY;AAAA;AAAA;AAAA,IAG9B,aAAa,OAAO,YAAY,YAAY,GAAG;AAAA,IAC/C,eAAe,OAAO,cAAc,YAAY,IAAI;AAAA,IACpD,eAAe,OAAO,cAAc,YAAY,IAAI;AAAA;AAAA,IAGpD,eAAe,OAAO,cAAc,YAAY,GAAG;AAAA,IACnD,iBAAiB,OAAO,gBAAgB,YAAY,IAAI;AAAA,IACxD,iBAAiB,OAAO,gBAAgB,YAAY,IAAI;AAAA,EAC1D;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,eAAe,OAAO,cAAc;AAAA,IACpC,iBAAiB,OAAO,cAAc;AAAA,IACtC,gBAAgB,OAAO,cAAc;AAAA;AAAA,IAGrC,WAAW,OAAO,WAAW;AAAA,IAC7B,cAAc,OAAO,WAAW;AAAA;AAAA,IAGhC,gBAAgB,OAAO,SAAS;AAAA;AAAA,IAGhC,gBAAgB,OAAO,SAAS;AAAA,IAChC,mBAAmB,OAAO,SAAS;AAAA,IACnC,kBAAkB,OAAO,SAAS;AAAA,IAClC,gBAAgB,OAAO,SAAS;AAAA,IAChC,uBAAuB,OAAO,SAAS;AAAA,IACvC,kBAAkB,OAAO,SAAS;AAAA,IAClC,iBAAiB,OAAO,SAAS;AAAA,IACjC,iBAAiB,OAAO,SAAS;AAAA;AAAA,IAGjC,wBAAwB,OAAO,cAAc;AAAA,IAC7C,sBAAsB,OAAO,cAAc;AAAA;AAAA,IAG3C,qBAAqB,OAAO,cAAc;AAAA,IAC1C,sBAAsB,OAAO,cAAc;AAAA,IAC3C,oBAAoB,OAAO,cAAc;AAAA,IACzC,2BAA2B,OAAO,cAAc;AAAA,IAChD,qBAAqB,OAAO,cAAc;AAAA,IAC1C,qBAAqB,OAAO,cAAc;AAAA,IAC1C,sBAAsB,OAAO,cAAc;AAAA,IAC3C,uBAAuB,OAAO,cAAc;AAAA;AAAA,IAG5C,oBAAoB,OAAO,aAAa;AAAA,IACxC,qBAAqB,OAAO,aAAa;AAAA,IACzC,mBAAmB,OAAO,aAAa;AAAA,IACvC,0BAA0B,OAAO,aAAa;AAAA,IAC9C,oBAAoB,OAAO,aAAa;AAAA,IACxC,oBAAoB,OAAO,aAAa;AAAA,IACxC,qBAAqB,OAAO,aAAa;AAAA,IACzC,sBAAsB,OAAO,aAAa;AAAA;AAAA,IAG1C,qBAAqB,OAAO,cAAc;AAAA,IAC1C,sBAAsB,OAAO,cAAc;AAAA,IAC3C,2BAA2B,OAAO,cAAc;AAAA,IAChD,6BAA6B,OAAO,cAAc;AAAA;AAAA,IAGlD,iBAAiB,OAAO,cAAc;AAAA,IACtC,eAAe,OAAO,cAAc;AAAA,IACpC,gBAAgB,OAAO,cAAc;AAAA,IACrC,qBAAqB,OAAO,cAAc;AAAA,IAC1C,qBAAqB,OAAO,cAAc;AAAA,IAC1C,oBAAoB,OAAO,cAAc;AAAA,IACzC,qBAAqB,OAAO,cAAc;AAAA;AAAA,IAG1C,OAAO,OAAO,SAAS;AAAA,IACvB,gBAAgB,OAAO,SAAS;AAAA,IAChC,QAAQ,OAAO,SAAS;AAAA,IACxB,MAAM,OAAO,SAAS;AAAA,IACtB,eAAe,OAAO,SAAS;AAAA,IAC/B,OAAO,OAAO,SAAS;AAAA,IACvB,gBAAgB,OAAO,SAAS;AAAA,IAChC,iBAAiB,OAAO,SAAS;AAAA,IACjC,cAAc,OAAO,SAAS;AAAA,IAC9B,gBAAgB,OAAO,SAAS;AAAA,IAChC,sBAAsB,OAAO,SAAS;AAAA,IACtC,sBAAsB,OAAO,SAAS;AAAA,IACtC,sBAAsB,OAAO,SAAS;AAAA,IACtC,mBAAmB,OAAO,SAAS;AAAA,IACnC,aAAa,OAAO,SAAS;AAAA,IAC7B,aAAa,OAAO,SAAS;AAAA,IAC7B,MAAM,OAAO,SAAS;AAAA,IACtB,eAAe,OAAO,SAAS;AAAA,IAC/B,UAAU,OAAO,SAAS;AAAA,IAC1B,aAAa,OAAO,SAAS;AAAA,IAC7B,QAAQ,OAAO,SAAS;AAAA;AAAA,IAGxB,QAAQ,OAAO,UAAU;AAAA,IACzB,OAAO,OAAO,UAAU;AAAA,IACxB,UAAU,OAAO,UAAU;AAAA,IAC3B,UAAU,OAAO,UAAU;AAAA,IAC3B,QAAQ,OAAO,UAAU;AAAA;AAAA,IAGzB,SAAS,OAAO,YAAY;AAAA,IAC5B,WAAW,OAAO,YAAY;AAAA,IAC9B,UAAU,OAAO,YAAY;AAAA;AAAA,IAG7B,SAAS,OAAO,WAAW;AAAA,IAC3B,kBAAkB,OAAO,WAAW;AAAA;AAAA,IAGpC,kBAAkB,OAAO,YAAY;AAAA,IACrC,gBAAgB,OAAO,YAAY;AAAA,IACnC,eAAe,OAAO,YAAY;AAAA,IAClC,eAAe,OAAO,YAAY;AAAA,IAClC,qBAAqB,OAAO,YAAY;AAAA;AAAA,IAGxC,iBAAiB,OAAO,iBAAiB;AAAA,IACzC,iBAAiB,OAAO,iBAAiB;AAAA,IACzC,eAAe,OAAO,iBAAiB;AAAA,IACvC,sBAAsB,OAAO,iBAAiB;AAAA,IAC9C,mBAAmB,OAAO,iBAAiB;AAAA,IAC3C,gBAAgB,OAAO,iBAAiB;AAAA,IACxC,uBAAuB,OAAO,iBAAiB;AAAA,IAC/C,oBAAoB,OAAO,iBAAiB;AAAA,IAC5C,cAAc,OAAO,iBAAiB;AAAA;AAAA,IAGtC,iBAAiB,OAAO,YAAY,YAAY,GAAG;AAAA,IACnD,mBAAmB,OAAO,YAAY,YAAY,GAAG;AAAA,IACrD,iBAAiB,OAAO,YAAY,YAAY,GAAG;AAAA,IACnD,oBAAoB,OAAO,YAAY,YAAY,GAAG;AAAA,IACtD,mBAAmB,OAAO,YAAY,YAAY,GAAG;AAAA,EACvD;AAAA,EAEA,UAAU,CAAC;AAAA,EAEX,WAAW;AAAA,IACT,GAAG;AAAA,MACD;AAAA,MAAgB;AAAA,MAAW;AAAA,MAAa;AAAA,MAAW;AAAA,MACnD;AAAA,MAAc;AAAA,MAAa;AAAA,MAAS;AAAA,MAAS;AAAA,MAC7C;AAAA,MAAmB;AAAA,MAAW;AAAA,MAAW;AAAA,MACzC;AAAA,MAAgB;AAAA,MAAe;AAAA,MAAgB;AAAA,IACjD;AAAA,IACA,GAAG,kBAAkB,gBAAgB;AAAA,IACrC,GAAG,kBAAkB,iBAAiB,IAAI;AAAA;AAAA,EAC5C;AACF;;;AC9MA,IAAM,oBAAoB;AAAA,EACxB,SAAS,EAAE,GAAG,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE;AAAA,EAClD,QAAQ,EAAE,GAAG,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE;AAAA,EACjD,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE;AACtB;AAMO,IAAM,gBAAkC;AAAA,EAC7C,UAAU;AAAA;AAAA,IAER,MAAM,OAAO,WAAW,YAAY,GAAG;AAAA,IACvC,OAAO,OAAO,aAAa,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,aAAa,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,aAAa,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,aAAa,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,aAAa,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,aAAa,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,aAAa,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,aAAa,YAAY,IAAI;AAAA;AAAA,IAG3C,MAAM,OAAO,UAAU,YAAY,GAAG;AAAA,IACtC,OAAO,OAAO,UAAU,YAAY,GAAG;AAAA,IACvC,OAAO,OAAO,YAAY,YAAY,IAAI;AAAA,IAC1C,QAAQ,OAAO,YAAY,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,YAAY,YAAY,IAAI;AAAA,IAC1C,QAAQ,OAAO,YAAY,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,YAAY,YAAY,IAAI;AAAA,IAC1C,QAAQ,OAAO,YAAY,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,YAAY,YAAY,IAAI;AAAA,IAC1C,QAAQ,OAAO,YAAY,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,YAAY,YAAY,IAAI;AAAA,IAC1C,QAAQ,OAAO,YAAY,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,YAAY,YAAY,IAAI;AAAA,IAC1C,QAAQ,OAAO,YAAY,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,YAAY,YAAY,IAAI;AAAA,IAC1C,QAAQ,OAAO,YAAY,YAAY,IAAI;AAAA,IAC3C,OAAO,OAAO,YAAY,YAAY,IAAI;AAAA,IAC1C,QAAQ,OAAO,YAAY,YAAY,IAAI;AAAA;AAAA,IAG3C,QAAQ,OAAO,OAAO,YAAY,GAAG;AAAA,IACrC,UAAU,OAAO,SAAS,YAAY,IAAI;AAAA,IAC1C,UAAU,OAAO,SAAS,YAAY,IAAI;AAAA;AAAA,IAG1C,YAAY,OAAO,SAAS;AAAA,IAC5B,aAAa,OAAO,SAAS;AAAA,IAC7B,YAAY,OAAO,SAAS;AAAA,IAC5B,aAAa,OAAO,SAAS;AAAA,EAC/B;AAAA,EAEA,cAAc;AAAA,IACZ,mBAAmB,OAAO,iBAAiB;AAAA,IAC3C,mBAAmB,OAAO,iBAAiB;AAAA,EAC7C;AAAA,EAEA,UAAU,CAAC;AAAA,EAEX,WAAW;AAAA,IACT,GAAG,kBAAkB,iBAAiB;AAAA,IACtC,GAAG,gBAAgB,WAAW,WAAW,mBAAmB,iBAAiB;AAAA,EAC/E;AACF;;;AC/DO,IAAM,eAAiC;AAAA,EAC5C,UAAU;AAAA;AAAA,IAER,MAAM,OAAO,OAAO;AAAA,IACpB,UAAU,OAAO,WAAW;AAAA,IAC5B,UAAU,OAAO,WAAW;AAAA;AAAA,IAG5B,MAAM,OAAO,QAAQ;AAAA,IACrB,UAAU,OAAO,YAAY;AAAA,IAC7B,UAAU,OAAO,YAAY;AAAA;AAAA,IAG7B,SAAS,OAAO,QAAQ,YAAY,GAAG;AAAA,EACzC;AAAA,EAEA,cAAc,CAAC;AAAA,EAEf,UAAU,CAAC;AAAA,EAEX,WAAW;AAAA,IACT,OAAO,CAAC,OAAO;AAAA,IACf,aAAa,CAAC,WAAW;AAAA,IACzB,aAAa,CAAC,WAAW;AAAA,IACzB,QAAQ,CAAC,QAAQ;AAAA,IACjB,cAAc,CAAC,YAAY;AAAA,IAC3B,cAAc,CAAC,YAAY;AAAA,IAC3B,MAAM,CAAC,QAAQ,SAAS,QAAQ;AAAA,EAClC;AACF;;;AC7BO,IAAM,oBAAsC;AAAA,EACjD,UAAU;AAAA;AAAA,IAER,UAAU,OAAO,YAAY;AAAA;AAAA,IAG7B,UAAU,OAAO,OAAO;AAAA,IACxB,WAAW,OAAO,OAAO;AAAA;AAAA,IAGzB,cAAc,OAAO,uBAAuB;AAAA,IAC5C,cAAc,OAAO,oBAAoB;AAAA;AAAA,IAGzC,QAAQ,OAAO,aAAa;AAAA,IAC5B,cAAc,OAAO,mBAAmB;AAAA,IACxC,YAAY,OAAO,iBAAiB;AAAA;AAAA,IAGpC,QAAQ,OAAO,UAAU;AAAA,IACzB,cAAc,OAAO,gBAAgB;AAAA,IACrC,YAAY,OAAO,cAAc;AAAA;AAAA,IAGjC,cAAc,OAAO,mBAAmB;AAAA,IACxC,cAAc,OAAO,gBAAgB;AAAA,EACvC;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,YAAY,OAAO,gBAAgB;AAAA,IACnC,oBAAoB,OAAO,gBAAgB;AAAA,IAC3C,YAAY,OAAO,gBAAgB;AAAA,IACnC,oBAAoB,OAAO,gBAAgB;AAAA;AAAA,IAG3C,aAAa,OAAO,WAAW;AAAA,IAC/B,qBAAqB,OAAO,WAAW;AAAA,IACvC,eAAe,OAAO,WAAW;AAAA;AAAA,IAGjC,UAAU,OAAO,MAAM;AAAA,IACvB,aAAa,OAAO,MAAM;AAAA,IAC1B,gBAAgB,OAAO,MAAM;AAAA,IAC7B,aAAa,OAAO,MAAM;AAAA;AAAA,IAG1B,MAAM,OAAO,WAAW;AAAA,IACxB,UAAU,OAAO,WAAW;AAAA,IAC5B,QAAQ,OAAO,aAAa;AAAA,IAC5B,YAAY,OAAO,aAAa;AAAA;AAAA,IAGhC,cAAc,OAAO,OAAO;AAAA,IAC5B,eAAe,OAAO,OAAO;AAAA,IAC7B,cAAc,OAAO,OAAO;AAAA;AAAA,IAG5B,iBAAiB,OAAO,gBAAgB;AAAA,IACxC,iBAAiB,OAAO,gBAAgB;AAAA,IACxC,mBAAmB,OAAO,gBAAgB;AAAA,IAC1C,uBAAuB,OAAO,gBAAgB;AAAA,IAC9C,uBAAuB,OAAO,gBAAgB;AAAA;AAAA,IAG9C,kBAAkB,OAAO,iBAAiB;AAAA,IAC1C,iBAAiB,OAAO,iBAAiB;AAAA,IACzC,eAAe,OAAO,iBAAiB;AAAA,IACvC,kBAAkB,OAAO,iBAAiB;AAAA,IAC1C,mBAAmB,OAAO,iBAAiB;AAAA,IAC3C,kBAAkB,OAAO,iBAAiB;AAAA,IAC1C,kBAAkB,OAAO,iBAAiB;AAAA,IAC1C,mBAAmB,OAAO,iBAAiB;AAAA,IAC3C,oBAAoB,OAAO,iBAAiB;AAAA;AAAA,IAE5C,sBAAsB,OAAO,iBAAiB;AAAA,IAC9C,oBAAoB,OAAO,iBAAiB;AAAA,IAC5C,uBAAuB,OAAO,iBAAiB;AAAA;AAAA,IAG/C,uBAAuB,OAAO,eAAe;AAAA,IAC7C,qBAAqB,OAAO,eAAe;AAAA,IAC3C,wBAAwB,OAAO,eAAe;AAAA,IAC9C,yBAAyB,OAAO,eAAe;AAAA;AAAA,IAE/C,4BAA4B,OAAO,eAAe;AAAA,IAClD,0BAA0B,OAAO,eAAe;AAAA,IAChD,6BAA6B,OAAO,eAAe;AAAA;AAAA,IAGnD,qBAAqB,OAAO,cAAc;AAAA,IAC1C,sBAAsB,OAAO,cAAc;AAAA,IAC3C,oBAAoB,OAAO,cAAc;AAAA,IACzC,uBAAuB,OAAO,cAAc;AAAA,IAC5C,wBAAwB,OAAO,cAAc;AAAA;AAAA,IAE7C,2BAA2B,OAAO,cAAc;AAAA,IAChD,yBAAyB,OAAO,cAAc;AAAA,IAC9C,4BAA4B,OAAO,cAAc;AAAA;AAAA,IAGjD,kBAAkB,OAAO,eAAe;AAAA,IACxC,kBAAkB,OAAO,eAAe;AAAA,IACxC,iBAAiB,OAAO,eAAe;AAAA,IACvC,eAAe,OAAO,eAAe;AAAA,IACrC,mBAAmB,OAAO,eAAe;AAAA,IACzC,kBAAkB,OAAO,eAAe;AAAA,IACxC,kBAAkB,OAAO,eAAe;AAAA,IACxC,oBAAoB,OAAO,eAAe;AAAA,IAC1C,mBAAmB,OAAO,eAAe;AAAA;AAAA,IAEzC,sBAAsB,OAAO,eAAe;AAAA,IAC5C,oBAAoB,OAAO,eAAe;AAAA,IAC1C,uBAAuB,OAAO,eAAe;AAAA;AAAA,IAG7C,eAAe,OAAO,aAAa;AAAA,IACnC,aAAa,OAAO,aAAa;AAAA,IACjC,gBAAgB,OAAO,aAAa;AAAA,IACpC,kBAAkB,OAAO,aAAa;AAAA,IACtC,uBAAuB,OAAO,aAAa;AAAA,IAC3C,iBAAiB,OAAO,aAAa;AAAA;AAAA,IAErC,oBAAoB,OAAO,aAAa;AAAA,IACxC,kBAAkB,OAAO,aAAa;AAAA,IACtC,qBAAqB,OAAO,aAAa;AAAA;AAAA,IAGzC,aAAa,OAAO,YAAY;AAAA,IAChC,cAAc,OAAO,YAAY;AAAA,IACjC,YAAY,OAAO,YAAY;AAAA,IAC/B,eAAe,OAAO,YAAY;AAAA,IAClC,gBAAgB,OAAO,YAAY;AAAA,IACnC,iBAAiB,OAAO,YAAY;AAAA;AAAA,IAEpC,mBAAmB,OAAO,YAAY;AAAA,IACtC,iBAAiB,OAAO,YAAY;AAAA,IACpC,oBAAoB,OAAO,YAAY;AAAA;AAAA,IAGvC,wBAAwB,OAAO,eAAe;AAAA,IAC9C,uBAAuB,OAAO,eAAe;AAAA,IAC7C,qBAAqB,OAAO,eAAe;AAAA,IAC3C,yBAAyB,OAAO,eAAe;AAAA,IAC/C,wBAAwB,OAAO,eAAe;AAAA,IAC9C,wBAAwB,OAAO,eAAe;AAAA,IAC9C,0BAA0B,OAAO,eAAe;AAAA,IAChD,yBAAyB,OAAO,eAAe;AAAA;AAAA,IAE/C,4BAA4B,OAAO,eAAe;AAAA,IAClD,0BAA0B,OAAO,eAAe;AAAA,IAChD,6BAA6B,OAAO,eAAe;AAAA;AAAA,IAGnD,qBAAqB,OAAO,aAAa;AAAA,IACzC,mBAAmB,OAAO,aAAa;AAAA,IACvC,sBAAsB,OAAO,aAAa;AAAA,IAC1C,wBAAwB,OAAO,aAAa;AAAA,IAC5C,uBAAuB,OAAO,aAAa;AAAA;AAAA,IAE3C,0BAA0B,OAAO,aAAa;AAAA,IAC9C,wBAAwB,OAAO,aAAa;AAAA,IAC5C,2BAA2B,OAAO,aAAa;AAAA;AAAA,IAG/C,mBAAmB,OAAO,YAAY;AAAA,IACtC,oBAAoB,OAAO,YAAY;AAAA,IACvC,kBAAkB,OAAO,YAAY;AAAA,IACrC,qBAAqB,OAAO,YAAY;AAAA,IACxC,sBAAsB,OAAO,YAAY;AAAA;AAAA,IAEzC,yBAAyB,OAAO,YAAY;AAAA,IAC5C,uBAAuB,OAAO,YAAY;AAAA,IAC1C,0BAA0B,OAAO,YAAY;AAAA,EAC/C;AAAA,EAEA,UAAU;AAAA;AAAA,IAER,EAAE,SAAS,YAAY,SAAS,QAAQ,aAAa,EAAE;AAAA,IACvD,EAAE,SAAS,YAAY,SAAS,aAAa,aAAa,EAAE;AAAA,IAC5D,EAAE,SAAS,cAAc,SAAS,eAAe,aAAa,EAAE;AAAA,EAClE;AAAA,EAEA,WAAW;AAAA;AAAA,IAET,eAAe,CAAC,eAAe,qBAAqB,iBAAiB;AAAA,IACrE,YAAY,CAAC,YAAY,kBAAkB,cAAc;AAAA,IACzD,GAAG;AAAA,MACD;AAAA,MAAc;AAAA,MAAkB;AAAA,MAAa;AAAA,MAAQ;AAAA,MAAa;AAAA,MAClE;AAAA,MAAS;AAAA,MAAyB;AAAA,MAClC;AAAA,MAAqB;AAAA,MAAmB;AAAA,MAAkB;AAAA,MAC1D;AAAA,MAAkB;AAAA,MAAqB;AAAA,MACvC;AAAA,MAAmB;AAAA,MAAiB;AAAA,MACpC;AAAA,MAAiB;AAAA,MAAe;AAAA,MAChC;AAAA,MAAiB;AAAA,MAAe;AAAA,IAClC;AAAA,EACF;AACF;;;ACrMO,IAAM,mBAAqC;AAAA,EAChD,UAAU;AAAA;AAAA,IAER,aAAa,OAAO,gBAAgB;AAAA;AAAA,IAGpC,YAAY,OAAO,aAAa;AAAA;AAAA,IAGhC,eAAe,OAAO,YAAY;AAAA;AAAA,IAGlC,WAAW,OAAO,aAAa;AAAA;AAAA,IAG/B,eAAe,OAAO,YAAY;AAAA;AAAA,IAGlC,eAAe,OAAO,uBAAuB;AAAA;AAAA;AAAA,IAG7C,qBAAqB,OAAO,uBAAuB;AAAA;AAAA,IAGnD,YAAY,OAAO,SAAS;AAAA,EAC9B;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,aAAa,OAAO,aAAa;AAAA,IACjC,cAAc,OAAO,aAAa;AAAA,IAClC,aAAa,OAAO,aAAa;AAAA;AAAA,IAGjC,WAAW,OAAO,WAAW;AAAA,IAC7B,WAAW,OAAO,WAAW;AAAA,IAC7B,aAAa,OAAO,WAAW;AAAA,IAC/B,WAAW,OAAO,WAAW;AAAA,IAC7B,WAAW,OAAO,WAAW;AAAA,IAC7B,YAAY,OAAO,WAAW;AAAA,IAC9B,YAAY,OAAO,WAAW;AAAA,IAC9B,YAAY,OAAO,WAAW;AAAA,IAC9B,YAAY,OAAO,WAAW;AAAA,IAC9B,YAAY,OAAO,WAAW;AAAA,IAC9B,YAAY,OAAO,WAAW;AAAA,IAC9B,YAAY,OAAO,WAAW;AAAA,IAC9B,YAAY,OAAO,WAAW;AAAA;AAAA,IAG9B,aAAa,OAAO,gBAAgB;AAAA,IACpC,wBAAwB,OAAO,gBAAgB;AAAA;AAAA,IAG/C,QAAQ,OAAO,YAAY;AAAA,IAC3B,cAAc,OAAO,YAAY;AAAA;AAAA,IAGjC,aAAa,OAAO,aAAa;AAAA,IACjC,mBAAmB,OAAO,aAAa;AAAA,IACvC,cAAc,OAAO,aAAa;AAAA,IAClC,eAAe,OAAO,aAAa;AAAA,IACnC,eAAe,OAAO,aAAa;AAAA,IACnC,iBAAiB,OAAO,aAAa;AAAA,IACrC,aAAa,OAAO,aAAa;AAAA,IACjC,kBAAkB,OAAO,aAAa;AAAA,IACtC,cAAc,OAAO,aAAa;AAAA;AAAA,IAGlC,eAAe,OAAO,sBAAsB;AAAA,IAC5C,SAAS,OAAO,sBAAsB;AAAA,IACtC,gBAAgB,OAAO,sBAAsB;AAAA,IAC7C,eAAe,OAAO,sBAAsB;AAAA,IAC5C,iBAAiB,OAAO,sBAAsB;AAAA,IAC9C,qBAAqB,OAAO,sBAAsB;AAAA,IAClD,gBAAgB,OAAO,sBAAsB;AAAA,IAC7C,sBAAsB,OAAO,sBAAsB;AAAA,IACnD,qBAAqB,OAAO,sBAAsB;AAAA;AAAA,IAGlD,uBAAuB,OAAO,cAAc;AAAA,IAC5C,gCAAgC,OAAO,cAAc;AAAA,IACrD,gCAAgC,OAAO,cAAc;AAAA,IACrD,0BAA0B,OAAO,cAAc;AAAA,IAC/C,+BAA+B,OAAO,cAAc;AAAA,IACpD,8BAA8B,OAAO,cAAc;AAAA,IACnD,yBAAyB,OAAO,cAAc;AAAA,IAC9C,+BAA+B,OAAO,cAAc;AAAA,IACpD,+BAA+B,OAAO,cAAc;AAAA;AAAA,IAGpD,eAAe,OAAO,qBAAqB;AAAA,IAC3C,gBAAgB,OAAO,qBAAqB;AAAA;AAAA,IAG5C,aAAa,OAAO,iBAAiB;AAAA,IACrC,aAAa,OAAO,iBAAiB;AAAA,IACrC,gBAAgB,OAAO,iBAAiB;AAAA;AAAA,IAGxC,aAAa,OAAO,YAAY;AAAA,IAChC,eAAe,OAAO,YAAY;AAAA,IAClC,cAAc,OAAO,YAAY;AAAA,IACjC,gBAAgB,OAAO,YAAY;AAAA,IACnC,cAAc,OAAO,YAAY;AAAA,IACjC,YAAY,OAAO,YAAY;AAAA;AAAA,IAG/B,WAAW,OAAO,iBAAiB;AAAA,IACnC,UAAU,OAAO,iBAAiB;AAAA,IAClC,gBAAgB,OAAO,iBAAiB;AAAA,IACxC,gBAAgB,OAAO,iBAAiB;AAAA;AAAA,IAGxC,oBAAoB,OAAO,uBAAuB;AAAA,IAClD,qBAAqB,OAAO,uBAAuB;AAAA,IACnD,qBAAqB,OAAO,uBAAuB;AAAA,IACnD,qBAAqB,OAAO,uBAAuB;AAAA,IACnD,mBAAmB,OAAO,uBAAuB;AAAA;AAAA,IAGjD,mBAAmB,OAAO,2BAA2B;AAAA,IACrD,wBAAwB,OAAO,2BAA2B;AAAA,IAC1D,gBAAgB,OAAO,2BAA2B;AAAA,IAClD,gBAAgB,OAAO,2BAA2B;AAAA,IAClD,gBAAgB,OAAO,2BAA2B;AAAA,IAClD,gBAAgB,OAAO,2BAA2B;AAAA,IAClD,gBAAgB,OAAO,2BAA2B;AAAA;AAAA,IAGlD,WAAW,OAAO,gBAAgB;AAAA,IAClC,WAAW,OAAO,gBAAgB;AAAA,IAClC,YAAY,OAAO,gBAAgB;AAAA,IACnC,eAAe,OAAO,gBAAgB;AAAA;AAAA,IAGtC,UAAU,OAAO,eAAe;AAAA,IAChC,iBAAiB,OAAO,eAAe;AAAA,IACvC,aAAa,OAAO,eAAe;AAAA;AAAA,IAGnC,aAAa,OAAO,WAAW;AAAA,IAC/B,eAAe,OAAO,WAAW;AAAA,IACjC,gBAAgB,OAAO,WAAW;AAAA,IAClC,eAAe,OAAO,WAAW;AAAA;AAAA,IAGjC,kBAAkB,OAAO,gBAAgB;AAAA,IACzC,aAAa,OAAO,gBAAgB;AAAA,IACpC,gBAAgB,OAAO,gBAAgB;AAAA,IACvC,gBAAgB,OAAO,gBAAgB;AAAA,IACvC,kBAAkB,OAAO,gBAAgB;AAAA,IACzC,qBAAqB,OAAO,gBAAgB;AAAA,IAC5C,aAAa,OAAO,gBAAgB;AAAA,IACpC,eAAe,OAAO,gBAAgB;AAAA;AAAA,IAGtC,qBAAqB,OAAO,YAAY;AAAA,IACxC,qBAAqB,OAAO,YAAY;AAAA,IACxC,kBAAkB,OAAO,YAAY;AAAA,IACrC,uBAAuB,OAAO,YAAY;AAAA,IAC1C,uBAAuB,OAAO,YAAY;AAAA,IAC1C,2BAA2B,OAAO,YAAY;AAAA;AAAA,IAG9C,gBAAgB,OAAO,YAAY;AAAA,IACnC,eAAe,OAAO,YAAY;AAAA,IAClC,aAAa,OAAO,YAAY;AAAA,IAChC,cAAc,OAAO,YAAY;AAAA;AAAA,IAGjC,gBAAgB,OAAO,SAAS;AAAA,IAChC,kBAAkB,OAAO,SAAS;AAAA,IAClC,gBAAgB,OAAO,SAAS;AAAA;AAAA,IAGhC,eAAe,OAAO,eAAe;AAAA,IACrC,mBAAmB,OAAO,eAAe;AAAA,IACzC,iBAAiB,OAAO,eAAe;AAAA,EACzC;AAAA,EAEA,UAAU;AAAA;AAAA,IAER,EAAE,SAAS,YAAY,SAAS,eAAe,aAAa,EAAE;AAAA;AAAA,IAE9D,EAAE,SAAS,cAAc,SAAS,eAAe,aAAa,EAAE;AAAA;AAAA,IAEhE,EAAE,SAAS,gBAAgB,SAAS,kBAAkB,aAAa,EAAE;AAAA;AAAA,IAErE,EAAE,SAAS,eAAe,SAAS,eAAe,aAAa,EAAE;AAAA;AAAA,IAEjE,EAAE,SAAS,YAAY,SAAS,mBAAmB,aAAa,EAAE;AAAA;AAAA,IAElE,EAAE,SAAS,kBAAkB,SAAS,6BAA6B,aAAa,EAAE;AAAA,EACpF;AAAA,EAEA,WAAW;AAAA,IACT,eAAe,CAAC,aAAa;AAAA,IAC7B,aAAa,CAAC,WAAW;AAAA,IACzB,kBAAkB,CAAC,gBAAgB;AAAA,IACnC,cAAc,CAAC,YAAY;AAAA,IAC3B,eAAe,CAAC,aAAa;AAAA,IAC7B,wBAAwB,CAAC,sBAAsB;AAAA,IAC/C,gBAAgB,CAAC,cAAc;AAAA,IAC/B,kBAAkB,CAAC,gBAAgB;AAAA,IACnC,eAAe,CAAC,aAAa;AAAA,IAC7B,cAAc,CAAC,YAAY;AAAA,IAC3B,cAAc,CAAC,YAAY;AAAA,IAC3B,uBAAuB,CAAC,qBAAqB;AAAA,IAC7C,mBAAmB,CAAC,iBAAiB;AAAA,IACrC,cAAc,CAAC,YAAY;AAAA,IAC3B,mBAAmB,CAAC,iBAAiB;AAAA,IACrC,yBAAyB,CAAC,uBAAuB;AAAA,IACjD,yBAAyB,CAAC,uBAAuB;AAAA,IACjD,6BAA6B,CAAC,2BAA2B;AAAA,IACzD,yBAAyB,CAAC,uBAAuB;AAAA,IACjD,kBAAkB,CAAC,gBAAgB;AAAA,IACnC,iBAAiB,CAAC,eAAe;AAAA,IACjC,aAAa,CAAC,WAAW;AAAA,IACzB,eAAe,CAAC,aAAa;AAAA,IAC7B,kBAAkB,CAAC,gBAAgB;AAAA,IACnC,YAAY,CAAC,YAAY;AAAA,IACzB,cAAc,CAAC,YAAY;AAAA,IAC3B,SAAS,CAAC,SAAS;AAAA,IACnB,iBAAiB,CAAC,eAAe;AAAA,IACjC,SAAS,CAAC,SAAS;AAAA,EACrB;AACF;;;ACrOA,IAAM,cAAc;AAAA,EAClB;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAW;AAAA,EACpC;AAAA,EAAO;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EACpC;AAAA,EAAS;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAQ;AAAA,EACpC;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EACtC;AAAA,EAAQ;AACV;AAGA,IAAM,iBAAiB,CAAC,WAAW,WAAW,eAAe,SAAS,OAAO;AAW7E,SAAS,oBAAoB,WAAmB,SAA8C;AAC5F,QAAM,WAAwC,CAAC;AAG/C,aAAW,SAAS,aAAa;AAC/B,aAAS,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,OAAO,OAAO;AAAA,EACpD;AAGA,WAAS,GAAG,SAAS,GAAG,IAAI,OAAO,OAAO;AAE1C,SAAO;AACT;AAMA,SAAS,0BAA0B,WAAmB,SAA8C;AAClG,QAAM,UAAuC,CAAC;AAC9C,aAAW,SAAS,gBAAgB;AAClC,YAAQ,GAAG,SAAS,GAAG,KAAK,EAAE,IAAI,OAAO,OAAO;AAAA,EAClD;AACA,SAAO;AACT;AAGA,IAAM,kBAAsC;AAAA,EAC1C,CAAC,SAAS,YAAY;AAAA,EACtB,CAAC,OAAO,UAAU;AAAA,EAClB,CAAC,WAAW,cAAc;AAAA,EAC1B,CAAC,YAAY,eAAe;AAAA,EAC5B,CAAC,SAAS,YAAY;AAAA,EACtB,CAAC,gBAAgB,mBAAmB;AAAA,EACpC,CAAC,WAAW,cAAc;AAAA,EAC1B,CAAC,WAAW,cAAc;AAAA,EAC1B,CAAC,UAAU,aAAa;AAAA,EACxB,CAAC,SAAS,MAAM;AAAA,EAChB,CAAC,WAAW,QAAQ;AAAA,EACpB,CAAC,WAAW,kBAAkB;AAAA,EAC9B,CAAC,gBAAgB,mBAAmB;AAAA,EACpC,CAAC,SAAS,eAAe;AAAA,EACzB,CAAC,QAAQ,cAAc;AAAA,EACvB,CAAC,OAAO,aAAa;AACvB;AAGA,SAAS,2BAAwD;AAC/D,QAAM,WAAwC,CAAC;AAC/C,aAAW,CAAC,eAAe,OAAO,KAAK,iBAAiB;AACtD,WAAO,OAAO,UAAU,oBAAoB,eAAe,OAAO,CAAC;AAAA,EACrE;AACA,SAAO;AACT;AAGA,IAAM,0BAA8C;AAAA,EAClD,CAAC,SAAS,YAAY;AAAA,EACtB,CAAC,OAAO,UAAU;AAAA,EAClB,CAAC,WAAW,cAAc;AAAA,EAC1B,CAAC,YAAY,eAAe;AAAA,EAC5B,CAAC,SAAS,YAAY;AACxB;AAEA,SAAS,8BAA2D;AAClE,QAAM,UAAuC,CAAC;AAC9C,aAAW,CAAC,eAAe,OAAO,KAAK,yBAAyB;AAC9D,WAAO,OAAO,SAAS,0BAA0B,eAAe,OAAO,CAAC;AAAA,EAC1E;AACA,SAAO;AACT;AAOO,IAAM,cAAgC;AAAA,EAC3C,UAAU,yBAAyB;AAAA,EAEnC,cAAc;AAAA,IACZ,GAAG,4BAA4B;AAAA;AAAA,IAE/B,YAAY,OAAO,cAAc;AAAA,EACnC;AAAA;AAAA,EAGA,UAAU,CAAC;AAAA,EAEX,WAAW;AAAA,IACT;AAAA,IAAc;AAAA,IAAY;AAAA,IAAgB;AAAA,IAC1C;AAAA,IAAc;AAAA,IAAqB;AAAA,IAAgB;AAAA,IACnD;AAAA,IAAe;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAoB;AAAA,IACrD;AAAA,IAAiB;AAAA,IAAgB;AAAA,EACnC;AACF;;;AChHO,IAAM,mBAAqC;AAAA,EAChD,UAAU;AAAA;AAAA,IAER,mBAAmB,OAAO,UAAU;AAAA;AAAA,IAGpC,cAAc,OAAO,UAAU;AAAA,IAC/B,eAAe,OAAO,UAAU;AAAA,IAChC,cAAc,OAAO,UAAU;AAAA,IAC/B,aAAa,OAAO,UAAU;AAAA,IAC9B,cAAc,OAAO,UAAU;AAAA,EACjC;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,YAAY,OAAO,eAAe;AAAA,IAClC,YAAY,OAAO,eAAe;AAAA,IAClC,aAAa,OAAO,eAAe;AAAA;AAAA,IAGnC,kBAAkB,OAAO,SAAS;AAAA,IAClC,mBAAmB,OAAO,SAAS;AAAA,IACnC,mBAAmB,OAAO,SAAS;AAAA,IACnC,gBAAgB,OAAO,SAAS;AAAA;AAAA,IAGhC,oBAAoB,OAAO,WAAW;AAAA,IACtC,qBAAqB,OAAO,WAAW;AAAA,IACvC,qBAAqB,OAAO,WAAW;AAAA;AAAA,IAGvC,aAAa,OAAO,aAAa;AAAA,IACjC,aAAa,OAAO,aAAa;AAAA,IACjC,WAAW,OAAO,aAAa;AAAA,IAC/B,kBAAkB,OAAO,aAAa;AAAA,IACtC,eAAe,OAAO,aAAa;AAAA,IACnC,YAAY,OAAO,aAAa;AAAA,IAChC,mBAAmB,OAAO,aAAa;AAAA,IACvC,gBAAgB,OAAO,aAAa;AAAA,IACpC,UAAU,OAAO,aAAa;AAAA;AAAA,IAG9B,aAAa,OAAO,WAAW;AAAA,IAC/B,gBAAgB,OAAO,WAAW;AAAA,IAClC,eAAe,OAAO,WAAW;AAAA,IACjC,eAAe,OAAO,WAAW;AAAA,IACjC,mBAAmB,OAAO,WAAW;AAAA,IACrC,mBAAmB,OAAO,WAAW;AAAA;AAAA,IAGrC,WAAW,OAAO,SAAS;AAAA,IAC3B,YAAY,OAAO,SAAS;AAAA,IAC5B,cAAc,OAAO,SAAS;AAAA;AAAA,IAG9B,WAAW,OAAO,UAAU;AAAA,EAC9B;AAAA,EAEA,UAAU;AAAA;AAAA,IAER,EAAE,SAAS,mBAAmB,SAAS,eAAe,aAAa,EAAE;AAAA;AAAA,IAErE,EAAE,SAAS,eAAe,SAAS,WAAW,aAAa,EAAE;AAAA;AAAA,IAE7D,EAAE,SAAS,aAAa,SAAS,YAAY,aAAa,EAAE;AAAA,EAC9D;AAAA,EAEA,WAAW;AAAA,IACT,iBAAiB,CAAC,eAAe;AAAA,IACjC,WAAW,CAAC,SAAS;AAAA,IACrB,aAAa,CAAC,WAAW;AAAA,IACzB,eAAe,CAAC,aAAa;AAAA,IAC7B,aAAa,CAAC,WAAW;AAAA,IACzB,WAAW,CAAC,SAAS;AAAA,IACrB,YAAY,CAAC,UAAU;AAAA,EACzB;AACF;;;AC/EA,IAAM,yBAAyB;AAAA,EAC7B,gBAAgB,EAAE,GAAG,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE;AAAA,EACzD,kBAAkB,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE;AACnC;AAOA,SAAS,wBAAqC;AAC5C,QAAM,OAAO;AACb,QAAM,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAC3C,QAAM,UAAoC;AAAA,IACxC,IAAI,CAAC,KAAK,GAAG;AAAA,IACb,IAAI,CAAC,KAAK,GAAG;AAAA,IACb,IAAI,CAAC,KAAK,GAAG;AAAA,IACb,IAAI,CAAC,KAAK,GAAG;AAAA,IACb,IAAI,CAAC,GAAG;AAAA,IACR,IAAI,CAAC,KAAK,GAAG;AAAA,IACb,IAAI,CAAC,KAAK,GAAG;AAAA,IACb,IAAI,CAAC,GAAG;AAAA,EACV;AAEA,QAAM,YAAY,CAAC,MAAM,GAAG,MAAM,IAAI,OAAK,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,KAAK,OAAO,EAAE,IAAI,OAAK,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;AAC5G,QAAM,YAAyB,CAAC;AAGhC,YAAU,IAAI,IAAI;AAGlB,aAAW,QAAQ,OAAO;AACxB,UAAM,YAAY,GAAG,IAAI,IAAI,IAAI;AACjC,UAAM,gBAAgB,OAAO,QAAQ,OAAO,EACzC,OAAO,CAAC,CAAC,GAAG,QAAQ,MAAM,SAAS,SAAS,IAAI,CAAC,EACjD,IAAI,CAAC,CAAC,MAAM,MAAM,GAAG,IAAI,IAAI,MAAM,EAAE;AACxC,cAAU,SAAS,IAAI,CAAC,MAAM,WAAW,GAAG,aAAa;AAAA,EAC3D;AAGA,aAAW,CAAC,QAAQ,QAAQ,KAAK,OAAO,QAAQ,OAAO,GAAG;AACxD,UAAM,cAAc,GAAG,IAAI,IAAI,MAAM;AACrC,cAAU,WAAW,IAAI,CAAC,MAAM,GAAG,SAAS,IAAI,OAAK,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,WAAW;AAAA,EACnF;AAEA,SAAO;AACT;AAMO,IAAM,eAAiC;AAAA,EAC5C,UAAU;AAAA;AAAA,IAER,YAAY,OAAO,iBAAiB,YAAY,GAAG;AAAA,IACnD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,eAAe,OAAO,oBAAoB,YAAY,IAAI;AAAA,IAC1D,eAAe,OAAO,oBAAoB,YAAY,IAAI;AAAA,IAC1D,eAAe,OAAO,oBAAoB,YAAY,IAAI;AAAA,IAC1D,eAAe,OAAO,oBAAoB,YAAY,IAAI;AAAA,IAC1D,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,eAAe,OAAO,oBAAoB,YAAY,IAAI;AAAA,IAC1D,eAAe,OAAO,oBAAoB,YAAY,IAAI;AAAA,IAC1D,eAAe,OAAO,oBAAoB,YAAY,IAAI;AAAA,IAC1D,eAAe,OAAO,oBAAoB,YAAY,IAAI;AAAA;AAAA,IAG1D,aAAa,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACtD,aAAa,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACtD,aAAa,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACtD,aAAa,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACtD,aAAa,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACtD,aAAa,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACtD,aAAa,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACtD,aAAa,OAAO,kBAAkB,YAAY,IAAI;AAAA;AAAA,IAGtD,mBAAmB,OAAO,kBAAkB,YAAY,GAAG;AAAA,IAC3D,qBAAqB,OAAO,oBAAoB,YAAY,IAAI;AAAA,IAChE,qBAAqB,OAAO,oBAAoB,YAAY,IAAI;AAAA;AAAA,IAGhE,aAAa,OAAO,UAAU;AAAA,IAC9B,aAAa,OAAO,UAAU;AAAA;AAAA,IAG9B,mBAAmB,OAAO,gBAAgB;AAAA;AAAA,IAG1C,gBAAgB,OAAO,mBAAmB;AAAA,EAC5C;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,SAAS,OAAO,iBAAiB,YAAY,GAAG;AAAA,IAChD,gBAAgB,OAAO,iBAAiB,YAAY,GAAG;AAAA,IACvD,cAAc,OAAO,iBAAiB,YAAY,GAAG;AAAA,IACrD,cAAc,OAAO,iBAAiB,YAAY,GAAG;AAAA,IACrD,cAAc,OAAO,iBAAiB,YAAY,GAAG;AAAA,IACrD,cAAc,OAAO,iBAAiB,YAAY,GAAG;AAAA,IACrD,eAAe,OAAO,iBAAiB,YAAY,GAAG;AAAA,IACtD,eAAe,OAAO,iBAAiB,YAAY,GAAG;AAAA,IACtD,gBAAgB,OAAO,iBAAiB,YAAY,GAAG;AAAA,IAEvD,aAAa,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACvD,kBAAkB,OAAO,mBAAmB,YAAY,IAAI;AAAA,IAC5D,gBAAgB,OAAO,mBAAmB,YAAY,IAAI;AAAA,IAC1D,gBAAgB,OAAO,mBAAmB,YAAY,IAAI;AAAA,IAC1D,gBAAgB,OAAO,mBAAmB,YAAY,IAAI;AAAA,IAC1D,gBAAgB,OAAO,mBAAmB,YAAY,IAAI;AAAA,IAC1D,iBAAiB,OAAO,mBAAmB,YAAY,IAAI;AAAA,IAC3D,iBAAiB,OAAO,mBAAmB,YAAY,IAAI;AAAA,IAC3D,kBAAkB,OAAO,mBAAmB,YAAY,IAAI;AAAA,IAE5D,aAAa,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACvD,aAAa,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACvD,aAAa,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACvD,aAAa,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACvD,aAAa,OAAO,mBAAmB,YAAY,IAAI;AAAA,IAEvD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA,IACzD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA,IACzD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA,IACzD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA;AAAA,IAGzD,QAAQ,OAAO,gBAAgB,YAAY,GAAG;AAAA,IAC9C,YAAY,OAAO,gBAAgB,YAAY,GAAG;AAAA,IAClD,YAAY,OAAO,gBAAgB,YAAY,GAAG;AAAA,IAClD,YAAY,OAAO,gBAAgB,YAAY,GAAG;AAAA,IAClD,YAAY,OAAO,gBAAgB,YAAY,GAAG;AAAA,IAElD,YAAY,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACrD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACvD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACvD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACvD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IAEvD,YAAY,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACrD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACvD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACvD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACvD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IAEvD,YAAY,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACrD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACvD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACvD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACvD,cAAc,OAAO,kBAAkB,YAAY,IAAI;AAAA,IAEvD,YAAY,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACrD,YAAY,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACrD,YAAY,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACrD,YAAY,OAAO,kBAAkB,YAAY,IAAI;AAAA,IACrD,YAAY,OAAO,kBAAkB,YAAY,IAAI;AAAA;AAAA,IAGrD,gBAAgB,OAAO,cAAc;AAAA,IACrC,iBAAiB,OAAO,cAAc;AAAA,IACtC,iBAAiB,OAAO,cAAc;AAAA,IACtC,iBAAiB,OAAO,cAAc;AAAA,IACtC,iBAAiB,OAAO,cAAc;AAAA,IACtC,eAAe,OAAO,cAAc;AAAA;AAAA,IAGpC,mBAAmB,OAAO,iBAAiB;AAAA,IAC3C,mBAAmB,OAAO,iBAAiB;AAAA;AAAA,IAG3C,gBAAgB,OAAO,cAAc;AAAA,IACrC,iBAAiB,OAAO,cAAc;AAAA,IACtC,iBAAiB,OAAO,cAAc;AAAA,IACtC,iBAAiB,OAAO,cAAc;AAAA,IACtC,eAAe,OAAO,cAAc;AAAA;AAAA,IAGpC,oBAAoB,OAAO,kBAAkB;AAAA,IAC7C,oBAAoB,OAAO,kBAAkB;AAAA;AAAA,IAG7C,SAAS,OAAO,eAAe;AAAA,IAC/B,gBAAgB,OAAO,eAAe;AAAA,IACtC,kBAAkB,OAAO,eAAe;AAAA,IACxC,kBAAkB,OAAO,eAAe;AAAA,IACxC,kBAAkB,OAAO,eAAe;AAAA,IACxC,kBAAkB,OAAO,eAAe;AAAA;AAAA,IAGxC,aAAa,OAAO,eAAe;AAAA,IACnC,aAAa,OAAO,eAAe;AAAA,IACnC,aAAa,OAAO,eAAe;AAAA,IACnC,aAAa,OAAO,eAAe;AAAA,IACnC,aAAa,OAAO,eAAe;AAAA;AAAA,IAGnC,MAAM,OAAO,YAAY;AAAA,IACzB,UAAU,OAAO,YAAY;AAAA,IAC7B,UAAU,OAAO,YAAY;AAAA,IAC7B,UAAU,OAAO,YAAY;AAAA,IAC7B,UAAU,OAAO,YAAY;AAAA,IAC7B,UAAU,OAAO,YAAY;AAAA,IAC7B,cAAc,OAAO,YAAY;AAAA,EACnC;AAAA,EAEA,UAAU;AAAA;AAAA,IAER,EAAE,SAAS,gBAAgB,SAAS,gBAAgB,aAAa,YAAY,IAAI;AAAA,IACjF,EAAE,SAAS,gBAAgB,SAAS,gBAAgB,aAAa,YAAY,IAAI;AAAA;AAAA,IAEjF,EAAE,SAAS,eAAe,SAAS,iBAAiB,aAAa,YAAY,IAAI;AAAA;AAAA,IAEjF,EAAE,SAAS,iBAAiB,SAAS,iBAAiB,aAAa,EAAE;AAAA,IACrE,EAAE,SAAS,mBAAmB,SAAS,iBAAiB,aAAa,EAAE;AAAA;AAAA,IAEvE,EAAE,SAAS,YAAY,SAAS,cAAc,aAAa,EAAE;AAAA;AAAA,IAE7D,EAAE,SAAS,qBAAqB,SAAS,qBAAqB,aAAa,EAAE;AAAA,IAC7E,EAAE,SAAS,mBAAmB,SAAS,qBAAqB,aAAa,EAAE;AAAA,EAC7E;AAAA,EAEA,WAAW;AAAA,IACT,GAAG,sBAAsB;AAAA,IACzB,GAAG,kBAAkB,sBAAsB;AAAA,IAC3C,GAAG;AAAA,MACD;AAAA,MAAgB;AAAA,MAChB;AAAA,MAAY;AAAA,MAAY;AAAA,MAAgB;AAAA,MAAoB;AAAA,MAC5D;AAAA,MAAiB;AAAA,MAAiB;AAAA,MAClC;AAAA,MAAc;AAAA,IAChB;AAAA,EACF;AACF;;;ACxOO,IAAM,gBAAkC;AAAA,EAC7C,UAAU;AAAA;AAAA,IAER,YAAY,OAAO,SAAS;AAAA;AAAA,IAG5B,iBAAiB,OAAO,cAAc;AAAA;AAAA,IAGtC,eAAe,OAAO,YAAY;AAAA;AAAA,IAGlC,gBAAgB,OAAO,aAAa;AAAA;AAAA,IAGpC,cAAc,OAAO,gBAAgB;AAAA;AAAA,IAGrC,aAAa,OAAO,eAAe;AAAA;AAAA,IAGnC,eAAe,OAAO,YAAY;AAAA,IAClC,aAAa,OAAO,UAAU;AAAA,IAC9B,aAAa,OAAO,UAAU;AAAA,IAC9B,eAAe,OAAO,YAAY;AAAA,IAClC,gBAAgB,OAAO,YAAY;AAAA;AAAA,IAGnC,wBAAwB,OAAO,qBAAqB;AAAA,IACpD,sBAAsB,OAAO,mBAAmB;AAAA,IAChD,sBAAsB,OAAO,mBAAmB;AAAA,IAChD,wBAAwB,OAAO,qBAAqB;AAAA,IACpD,yBAAyB,OAAO,qBAAqB;AAAA,IACrD,qBAAqB,OAAO,kBAAkB;AAAA,EAChD;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,QAAQ,OAAO,YAAY;AAAA,IAC3B,aAAa,OAAO,YAAY;AAAA,IAChC,aAAa,OAAO,YAAY;AAAA,IAChC,aAAa,OAAO,YAAY;AAAA,IAChC,aAAa,OAAO,YAAY;AAAA,IAChC,cAAc,OAAO,YAAY;AAAA,IACjC,gBAAgB,OAAO,YAAY;AAAA,IACnC,eAAe,OAAO,YAAY;AAAA;AAAA,IAGlC,gBAAgB,OAAO,cAAc;AAAA,IACrC,mBAAmB,OAAO,cAAc;AAAA,IACxC,mBAAmB,OAAO,cAAc;AAAA,IACxC,mBAAmB,OAAO,cAAc;AAAA,IACxC,mBAAmB,OAAO,cAAc;AAAA,IACxC,qBAAqB,OAAO,cAAc;AAAA;AAAA,IAG1C,cAAc,OAAO,YAAY;AAAA,IACjC,gBAAgB,OAAO,YAAY;AAAA,IACnC,gBAAgB,OAAO,YAAY;AAAA,IACnC,gBAAgB,OAAO,YAAY;AAAA,IACnC,gBAAgB,OAAO,YAAY;AAAA,IACnC,gBAAgB,OAAO,YAAY;AAAA;AAAA,IAGnC,eAAe,OAAO,aAAa;AAAA,IACnC,kBAAkB,OAAO,aAAa;AAAA,IACtC,kBAAkB,OAAO,aAAa;AAAA,IACtC,kBAAkB,OAAO,aAAa;AAAA,IACtC,oBAAoB,OAAO,aAAa;AAAA;AAAA,IAGxC,wBAAwB,OAAO,sBAAsB;AAAA,IACrD,wBAAwB,OAAO,sBAAsB;AAAA;AAAA,IAGrD,QAAQ,OAAO,QAAQ;AAAA,IACvB,eAAe,OAAO,QAAQ;AAAA;AAAA,IAG9B,MAAM,OAAO,MAAM;AAAA,IACnB,aAAa,OAAO,MAAM;AAAA,IAC1B,WAAW,OAAO,MAAM;AAAA,IACxB,WAAW,OAAO,MAAM;AAAA,IACxB,WAAW,OAAO,MAAM;AAAA,IACxB,WAAW,OAAO,MAAM;AAAA,IACxB,YAAY,OAAO,MAAM;AAAA,IACzB,YAAY,OAAO,MAAM;AAAA;AAAA,IAGzB,eAAe,OAAO,aAAa;AAAA,IACnC,kBAAkB,OAAO,aAAa;AAAA,IACtC,kBAAkB,OAAO,aAAa;AAAA,IACtC,kBAAkB,OAAO,aAAa;AAAA,IACtC,kBAAkB,OAAO,aAAa;AAAA,IACtC,mBAAmB,OAAO,aAAa;AAAA,IACvC,oBAAoB,OAAO,aAAa;AAAA;AAAA,IAGxC,WAAW,OAAO,WAAW;AAAA,IAC7B,eAAe,OAAO,WAAW;AAAA;AAAA,IAGjC,QAAQ,OAAO,QAAQ;AAAA,IACvB,YAAY,OAAO,QAAQ;AAAA;AAAA,IAG3B,OAAO,OAAO,OAAO;AAAA,IACrB,WAAW,OAAO,OAAO;AAAA;AAAA,IAGzB,mBAAmB,OAAO,iBAAiB;AAAA,IAC3C,wBAAwB,OAAO,iBAAiB;AAAA;AAAA,IAGhD,iBAAiB,OAAO,eAAe;AAAA,IACvC,sBAAsB,OAAO,eAAe;AAAA,IAC5C,oBAAoB,OAAO,eAAe;AAAA,IAC1C,oBAAoB,OAAO,eAAe;AAAA,IAC1C,oBAAoB,OAAO,eAAe;AAAA,IAC1C,oBAAoB,OAAO,eAAe;AAAA,IAC1C,qBAAqB,OAAO,eAAe;AAAA,IAC3C,qBAAqB,OAAO,eAAe;AAAA;AAAA,IAG3C,sBAAsB,OAAO,oBAAoB;AAAA,IACjD,wBAAwB,OAAO,oBAAoB;AAAA;AAAA,IAGnD,mBAAmB,OAAO,iBAAiB;AAAA,IAC3C,qBAAqB,OAAO,iBAAiB;AAAA;AAAA,IAG7C,kBAAkB,OAAO,gBAAgB;AAAA,IACzC,oBAAoB,OAAO,gBAAgB;AAAA,EAC7C;AAAA,EAEA,UAAU;AAAA;AAAA,IAER,EAAE,SAAS,cAAc,SAAS,cAAc,aAAa,EAAE;AAAA;AAAA,IAE/D,EAAE,SAAS,oBAAoB,SAAS,gBAAgB,aAAa,EAAE;AAAA;AAAA,IAEvE,EAAE,SAAS,kBAAkB,SAAS,cAAc,aAAa,EAAE;AAAA;AAAA,IAEnE,EAAE,SAAS,mBAAmB,SAAS,eAAe,aAAa,EAAE;AAAA;AAAA,IAErE,EAAE,SAAS,YAAY,SAAS,QAAQ,aAAa,EAAE;AAAA;AAAA,IAEvD,EAAE,SAAS,mBAAmB,SAAS,eAAe,aAAa,EAAE;AAAA;AAAA,IAErE,EAAE,SAAS,qBAAqB,SAAS,iBAAiB,aAAa,EAAE;AAAA,EAC3E;AAAA,EAEA,WAAW;AAAA,IACT;AAAA,IAAc;AAAA,IACd;AAAA,IAAgB;AAAA,IAChB;AAAA,IAAc;AAAA,IACd;AAAA,IAAe;AAAA,IACf;AAAA,IAAwB;AAAA,IAAW;AAAA,IAAkB;AAAA,IACrD;AAAA,IAAU;AAAA,IAAQ;AAAA,IAAc;AAAA,IAAY;AAAA,IAC5C;AAAA,IAAa;AAAA,IAAc;AAAA,IAAU;AAAA,IAAY;AAAA,IACjD;AAAA,IAAmB;AAAA,IAAiB;AAAA,IAAuB;AAAA,IAC3D;AAAA,IAAsB;AAAA,IAAuB;AAAA,IAC7C;AAAA,IAAoB;AAAA,IAAqB;AAAA,EAC3C;AACF;;;ACpKO,IAAM,kBAAoC;AAAA,EAC/C,UAAU;AAAA;AAAA,IAER,UAAU,OAAO,SAAS,YAAY,GAAG;AAAA,IACzC,WAAW,OAAO,SAAS,YAAY,GAAG;AAAA,IAC1C,YAAY,OAAO,WAAW,YAAY,IAAI;AAAA,IAC9C,aAAa,OAAO,WAAW,YAAY,IAAI;AAAA,IAC/C,YAAY,OAAO,WAAW,YAAY,IAAI;AAAA,IAC9C,aAAa,OAAO,WAAW,YAAY,IAAI;AAAA;AAAA,IAE/C,YAAY,OAAO,WAAW,YAAY,IAAI;AAAA,IAC9C,aAAa,OAAO,WAAW,YAAY,IAAI;AAAA;AAAA,IAG/C,WAAW,OAAO,QAAQ;AAAA,IAC1B,YAAY,OAAO,QAAQ;AAAA;AAAA,IAE3B,aAAa,OAAO,UAAU;AAAA,IAC9B,cAAc,OAAO,UAAU;AAAA,IAC/B,aAAa,OAAO,UAAU;AAAA,IAC9B,cAAc,OAAO,UAAU;AAAA,IAC/B,aAAa,OAAO,UAAU;AAAA,IAC9B,cAAc,OAAO,UAAU;AAAA;AAAA,IAG/B,cAAc,OAAO,aAAa,YAAY,GAAG;AAAA,IACjD,eAAe,OAAO,aAAa,YAAY,GAAG;AAAA,IAClD,gBAAgB,OAAO,eAAe,YAAY,IAAI;AAAA,IACtD,iBAAiB,OAAO,eAAe,YAAY,IAAI;AAAA,IACvD,gBAAgB,OAAO,eAAe,YAAY,IAAI;AAAA,IACtD,iBAAiB,OAAO,eAAe,YAAY,IAAI;AAAA;AAAA,IAEvD,gBAAgB,OAAO,eAAe,YAAY,IAAI;AAAA,IACtD,iBAAiB,OAAO,eAAe,YAAY,IAAI;AAAA;AAAA,IAGvD,WAAW,OAAO,QAAQ;AAAA,IAC1B,YAAY,OAAO,QAAQ;AAAA,IAC3B,WAAW,OAAO,QAAQ;AAAA,IAC1B,YAAY,OAAO,QAAQ;AAAA;AAAA,IAG3B,WAAW,OAAO,kBAAkB;AAAA;AAAA,IAGpC,gBAAgB,OAAO,aAAa;AAAA;AAAA,IAGpC,uBAAuB,OAAO,oBAAoB;AAAA,EACpD;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,WAAW,OAAO,WAAW;AAAA,IAC7B,iBAAiB,OAAO,WAAW;AAAA,IACnC,iBAAiB,OAAO,WAAW;AAAA,IACnC,kBAAkB,OAAO,WAAW;AAAA;AAAA,IAGpC,gBAAgB,OAAO,iBAAiB;AAAA,IACxC,kBAAkB,OAAO,iBAAiB;AAAA;AAAA,IAG1C,oBAAoB,OAAO,qBAAqB;AAAA,IAChD,mBAAmB,OAAO,qBAAqB;AAAA;AAAA,IAG/C,oBAAoB,OAAO,aAAa;AAAA;AAAA,IAGxC,yBAAyB,OAAO,eAAe;AAAA,IAC/C,wBAAwB,OAAO,eAAe;AAAA,IAC9C,sBAAsB,OAAO,eAAe;AAAA,IAC5C,wBAAwB,OAAO,eAAe;AAAA,IAC9C,sBAAsB,OAAO,eAAe;AAAA;AAAA,IAG5C,cAAc,OAAO,SAAS,YAAY,GAAG;AAAA,IAC7C,YAAY,OAAO,SAAS,YAAY,GAAG;AAAA;AAAA,IAG3C,eAAe,OAAO,QAAQ;AAAA;AAAA,IAG9B,kBAAkB,OAAO,aAAa,YAAY,GAAG;AAAA,IACrD,kBAAkB,OAAO,aAAa,YAAY,GAAG;AAAA,IACrD,mBAAmB,OAAO,aAAa,YAAY,GAAG;AAAA;AAAA,IAGtD,6BAA6B,OAAO,oBAAoB;AAAA,IACxD,0BAA0B,OAAO,oBAAoB;AAAA,IACrD,gCAAgC,OAAO,oBAAoB;AAAA,IAC3D,4BAA4B,OAAO,oBAAoB;AAAA,IACvD,mCAAmC,OAAO,oBAAoB;AAAA,IAC9D,6BAA6B,OAAO,oBAAoB;AAAA,IACxD,kCAAkC,OAAO,oBAAoB;AAAA,IAC7D,2BAA2B,OAAO,oBAAoB;AAAA,IACtD,+BAA+B,OAAO,oBAAoB;AAAA,EAC5D;AAAA,EAEA,UAAU;AAAA;AAAA,IAER,EAAE,SAAS,mBAAmB,SAAS,eAAe,aAAa,EAAE;AAAA,EACvE;AAAA,EAEA,WAAW;AAAA,IACT,WAAW,CAAC,WAAW;AAAA,IACvB,mBAAmB,CAAC,iBAAiB;AAAA,IACrC,uBAAuB,CAAC,qBAAqB;AAAA,IAC7C,aAAa,CAAC,aAAa;AAAA,IAC3B,sBAAsB,CAAC,oBAAoB;AAAA;AAAA,IAE3C,OAAO,CAAC,SAAS,WAAW,SAAS;AAAA,IACrC,WAAW,CAAC,SAAS,SAAS;AAAA,IAC9B,WAAW,CAAC,SAAS,SAAS;AAAA,IAC9B,WAAW,CAAC,SAAS;AAAA;AAAA,IAErB,QAAQ,CAAC,QAAQ;AAAA,IACjB,YAAY,CAAC,UAAU;AAAA,IACvB,YAAY,CAAC,UAAU;AAAA,IACvB,YAAY,CAAC,UAAU;AAAA;AAAA,IAEvB,WAAW,CAAC,aAAa,eAAe,aAAa;AAAA,IACrD,eAAe,CAAC,aAAa,aAAa;AAAA,IAC1C,eAAe,CAAC,aAAa,aAAa;AAAA,IAC1C,eAAe,CAAC,aAAa;AAAA,IAC7B,GAAG,gBAAgB,UAAU,UAAU,oBAAoB,eAAe;AAAA,EAC5E;AACF;;;ACjIO,IAAM,mBAAqC;AAAA,EAChD,UAAU;AAAA;AAAA,IAER,aAAa,OAAO,qBAAqB;AAAA;AAAA,IAGzC,UAAU,OAAO,kBAAkB;AAAA,EACrC;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,YAAY,OAAO,YAAY;AAAA,IAC/B,mBAAmB,OAAO,YAAY;AAAA,IACtC,kBAAkB,OAAO,YAAY;AAAA,IACrC,qBAAqB,OAAO,YAAY;AAAA,IACxC,sBAAsB,OAAO,YAAY;AAAA,IACzC,qBAAqB,OAAO,YAAY;AAAA,IACxC,wBAAwB,OAAO,YAAY;AAAA;AAAA,IAG3C,eAAe,OAAO,4BAA4B;AAAA,IAClD,WAAW,OAAO,4BAA4B;AAAA,IAC9C,YAAY,OAAO,4BAA4B;AAAA,IAC/C,eAAe,OAAO,4BAA4B;AAAA;AAAA,IAGlD,qBAAqB,OAAO,qBAAqB;AAAA,IACjD,uBAAuB,OAAO,qBAAqB;AAAA;AAAA,IAGnD,gBAAgB,OAAO,WAAW;AAAA,IAClC,gBAAgB,OAAO,WAAW;AAAA,IAClC,gBAAgB,OAAO,WAAW;AAAA,IAClC,iBAAiB,OAAO,WAAW;AAAA,IACnC,kBAAkB,OAAO,WAAW;AAAA,EACtC;AAAA,EAEA,UAAU;AAAA;AAAA,IAER,EAAE,SAAS,eAAe,SAAS,aAAa,aAAa,EAAE;AAAA,EACjE;AAAA,EAEA,WAAW;AAAA,IACT;AAAA,IAAc;AAAA,IAAuB;AAAA,IACrC;AAAA,IAAoB;AAAA,IAAuB;AAAA,EAC7C;AACF;;;AC9CO,IAAM,sBAAwC;AAAA,EACnD,UAAU;AAAA;AAAA,IAER,WAAW,OAAO,QAAQ;AAAA;AAAA,IAG1B,aAAa,OAAO,iBAAiB,YAAY,GAAG;AAAA,IACpD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA,IACxD,cAAc,OAAO,mBAAmB,YAAY,IAAI;AAAA;AAAA,IAGxD,aAAa,OAAO,kBAAkB,YAAY,GAAG;AAAA,IACrD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA,IACzD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA,IACzD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA,IACzD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA,IACzD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA,IACzD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA,IACzD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA,IACzD,cAAc,OAAO,oBAAoB,YAAY,IAAI;AAAA;AAAA,IAGzD,gBAAgB,OAAO,aAAa;AAAA,EACtC;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,mBAAmB,OAAO,YAAY;AAAA,IACtC,mBAAmB,OAAO,YAAY;AAAA;AAAA,IAGtC,uBAAuB,OAAO,gBAAgB;AAAA,IAC9C,uBAAuB,OAAO,gBAAgB;AAAA;AAAA,IAG9C,QAAQ,OAAO,QAAQ;AAAA,IACvB,eAAe,OAAO,QAAQ;AAAA,IAC9B,YAAY,OAAO,QAAQ;AAAA,IAC3B,YAAY,OAAO,QAAQ;AAAA;AAAA,IAG3B,eAAe,OAAO,iBAAiB;AAAA,IACvC,iBAAiB,OAAO,iBAAiB;AAAA;AAAA,IAGzC,cAAc,OAAO,mBAAmB;AAAA,IACxC,YAAY,OAAO,mBAAmB;AAAA,IACtC,eAAe,OAAO,mBAAmB;AAAA,IACzC,mBAAmB,OAAO,mBAAmB;AAAA;AAAA,IAG7C,eAAe,OAAO,kBAAkB;AAAA,IACxC,eAAe,OAAO,kBAAkB;AAAA;AAAA,IAGxC,aAAa,OAAO,kBAAkB;AAAA,IACtC,UAAU,OAAO,kBAAkB;AAAA,IACnC,UAAU,OAAO,kBAAkB;AAAA,IACnC,aAAa,OAAO,kBAAkB;AAAA,IACtC,kBAAkB,OAAO,kBAAkB;AAAA,IAC3C,kBAAkB,OAAO,kBAAkB;AAAA;AAAA,IAG3C,cAAc,OAAO,cAAc;AAAA,IACnC,cAAc,OAAO,cAAc;AAAA,IACnC,eAAe,OAAO,cAAc;AAAA,IACpC,kBAAkB,OAAO,cAAc;AAAA,IACvC,mBAAmB,OAAO,cAAc;AAAA,IACxC,eAAe,OAAO,cAAc;AAAA,IACpC,gBAAgB,OAAO,cAAc;AAAA,IACrC,kBAAkB,OAAO,cAAc;AAAA,IACvC,oBAAoB,OAAO,cAAc;AAAA,IACzC,sBAAsB,OAAO,cAAc;AAAA;AAAA,IAG3C,eAAe,OAAO,aAAa;AAAA,IACnC,eAAe,OAAO,aAAa;AAAA,IACnC,cAAc,OAAO,aAAa;AAAA,IAClC,eAAe,OAAO,aAAa;AAAA;AAAA,IAGnC,oBAAoB,OAAO,aAAa;AAAA,IACxC,sBAAsB,OAAO,aAAa;AAAA,IAC1C,wBAAwB,OAAO,aAAa;AAAA,IAC5C,yBAAyB,OAAO,aAAa;AAAA,EAC/C;AAAA,EAEA,UAAU;AAAA;AAAA,IAER,EAAE,SAAS,mBAAmB,SAAS,eAAe,aAAa,EAAE;AAAA,EACvE;AAAA,EAEA,WAAW;AAAA,IACT,YAAY,CAAC,YAAY;AAAA,IACzB,QAAQ,CAAC,QAAQ;AAAA,IACjB,kBAAkB,CAAC,gBAAgB;AAAA,IACnC,QAAQ,CAAC,QAAQ;AAAA,IACjB,mBAAmB,CAAC,iBAAiB;AAAA,IACrC,iBAAiB;AAAA,MACf;AAAA,MAAiB;AAAA,MAAmB;AAAA,MACpC;AAAA,MAAmB;AAAA,MAAmB;AAAA,MAAmB;AAAA,MACzD;AAAA,MAAmB;AAAA,IACrB;AAAA,IACA,mBAAmB,CAAC,mBAAmB,mBAAmB,mBAAmB,mBAAmB,iBAAiB;AAAA,IACjH,mBAAmB,CAAC,mBAAmB,mBAAmB,iBAAiB;AAAA,IAC3E,mBAAmB,CAAC,iBAAiB;AAAA,IACrC,mBAAmB,CAAC,iBAAiB;AAAA,IACrC,mBAAmB,CAAC,iBAAiB;AAAA,IACrC,mBAAmB,CAAC,iBAAiB;AAAA,IACrC,mBAAmB,CAAC,iBAAiB;AAAA,IACrC,mBAAmB,CAAC,iBAAiB;AAAA,IACrC,kBAAkB;AAAA,MAChB;AAAA,MAAkB;AAAA,MAAoB;AAAA,MACtC;AAAA,MAAoB;AAAA,MAAoB;AAAA,MAAoB;AAAA,MAC5D;AAAA,MAAoB;AAAA,IACtB;AAAA,IACA,oBAAoB,CAAC,oBAAoB,oBAAoB,oBAAoB,oBAAoB,kBAAkB;AAAA,IACvH,oBAAoB,CAAC,oBAAoB,oBAAoB,kBAAkB;AAAA,IAC/E,oBAAoB,CAAC,kBAAkB;AAAA,IACvC,oBAAoB,CAAC,kBAAkB;AAAA,IACvC,oBAAoB,CAAC,kBAAkB;AAAA,IACvC,oBAAoB,CAAC,kBAAkB;AAAA,IACvC,oBAAoB,CAAC,kBAAkB;AAAA,IACvC,oBAAoB,CAAC,kBAAkB;AAAA,IACvC,qBAAqB,CAAC,mBAAmB;AAAA,IACzC,oBAAoB,CAAC,kBAAkB;AAAA,IACvC,oBAAoB,CAAC,kBAAkB;AAAA,IACvC,gBAAgB,CAAC,cAAc;AAAA,IAC/B,eAAe,CAAC,aAAa;AAAA,IAC7B,eAAe,CAAC,aAAa;AAAA,EAC/B;AACF;;;ACxIO,IAAM,YAA8B;AAAA,EACzC,UAAU;AAAA;AAAA;AAAA,IAGR,WAAW,OAAO,cAAc;AAAA;AAAA,IAGhC,eAAe,OAAO,YAAY;AAAA;AAAA,IAGlC,gBAAgB,OAAO,aAAa;AAAA;AAAA,IAGpC,gBAAgB,OAAO,aAAa;AAAA;AAAA,IAGpC,kBAAkB,OAAO,eAAe;AAAA;AAAA,IAGxC,iBAAiB,OAAO,cAAc;AAAA;AAAA,IAGtC,mBAAmB,OAAO,gBAAgB;AAAA;AAAA,IAG1C,UAAU,OAAO,aAAa;AAAA;AAAA,IAG9B,WAAW,OAAO,eAAe;AAAA,EACnC;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,mBAAmB,OAAO,YAAY;AAAA,IACtC,oBAAoB,OAAO,YAAY;AAAA,IACvC,qBAAqB,OAAO,YAAY;AAAA;AAAA,IAGxC,qBAAqB,OAAO,aAAa;AAAA,IACzC,qBAAqB,OAAO,aAAa;AAAA,IACzC,qBAAqB,OAAO,aAAa;AAAA;AAAA,IAGzC,gBAAgB,OAAO,aAAa;AAAA,IACpC,gBAAgB,OAAO,aAAa;AAAA,IACpC,cAAc,OAAO,aAAa;AAAA,IAClC,iBAAiB,OAAO,aAAa;AAAA,IACrC,qBAAqB,OAAO,aAAa;AAAA,IACzC,wBAAwB,OAAO,aAAa;AAAA,IAC5C,qBAAqB,OAAO,aAAa;AAAA,IACzC,sBAAsB,OAAO,aAAa;AAAA,IAC1C,wBAAwB,OAAO,aAAa;AAAA,IAC5C,sBAAsB,OAAO,aAAa;AAAA,IAC1C,6BAA6B,OAAO,aAAa;AAAA,IACjD,6BAA6B,OAAO,aAAa;AAAA,IACjD,6BAA6B,OAAO,aAAa;AAAA,IACjD,6BAA6B,OAAO,aAAa;AAAA,IACjD,6BAA6B,OAAO,aAAa;AAAA,IACjD,6BAA6B,OAAO,aAAa;AAAA;AAAA,IAGjD,eAAe,OAAO,eAAe;AAAA,IACrC,6BAA6B,OAAO,eAAe;AAAA,IACnD,2BAA2B,OAAO,eAAe;AAAA,IACjD,uBAAuB,OAAO,eAAe;AAAA,IAC7C,yBAAyB,OAAO,eAAe;AAAA,EACjD;AAAA,EAEA,UAAU;AAAA;AAAA,IAER,EAAE,SAAS,gBAAgB,SAAS,gBAAgB,aAAa,EAAE;AAAA;AAAA,IAEnE,EAAE,SAAS,cAAc,SAAS,gBAAgB,aAAa,EAAE;AAAA;AAAA,IAEjE,EAAE,SAAS,mBAAmB,SAAS,eAAe,aAAa,EAAE;AAAA;AAAA,IAErE,EAAE,SAAS,qBAAqB,SAAS,iBAAiB,aAAa,EAAE;AAAA;AAAA,IAEzE,EAAE,SAAS,oBAAoB,SAAS,gBAAgB,aAAa,EAAE;AAAA;AAAA,IAEvE,EAAE,SAAS,sBAAsB,SAAS,kBAAkB,aAAa,EAAE;AAAA,EAC7E;AAAA,EAEA,WAAW;AAAA,IACT;AAAA,IAAgB;AAAA,IAAc;AAAA,IAAe;AAAA,IAC7C;AAAA,IAAiB;AAAA,IAAgB;AAAA,IACjC;AAAA,IAAe;AAAA,EACjB;AACF;;;ACzFO,IAAM,sBAAwC;AAAA,EACnD,UAAU,CAAC;AAAA,EAEX,cAAc;AAAA;AAAA,IAEZ,WAAW,OAAO,SAAS;AAAA,IAC3B,eAAe,OAAO,SAAS;AAAA;AAAA,IAG/B,4BAA4B,OAAO,qBAAqB;AAAA,IACxD,4BAA4B,OAAO,qBAAqB;AAAA,EAC1D;AAAA,EAEA,UAAU,CAAC;AAAA,EAEX,WAAW;AAAA,IACT,WAAW,CAAC,SAAS;AAAA,IACrB,uBAAuB,CAAC,qBAAqB;AAAA,EAC/C;AACF;;;ACnBO,IAAM,cAAgC;AAAA,EAC3C,UAAU,CAAC;AAAA,EAEX,cAAc;AAAA;AAAA,IAEZ,cAAc,OAAO,cAAc;AAAA,IACnC,eAAe,OAAO,cAAc;AAAA;AAAA,IAGpC,eAAe,OAAO,cAAc;AAAA,IACpC,kBAAkB,OAAO,cAAc;AAAA,EACzC;AAAA,EAEA,UAAU,CAAC;AAAA,EAEX,WAAW;AAAA,IACT,gBAAgB,CAAC,cAAc;AAAA,IAC/B,gBAAgB,CAAC,cAAc;AAAA,EACjC;AACF;;;AClBO,IAAM,aAA+B;AAAA,EAC1C,UAAU;AAAA;AAAA,IAER,SAAS,OAAO,YAAY;AAAA;AAAA,IAG5B,cAAc,OAAO,WAAW;AAAA;AAAA,IAGhC,kBAAkB,OAAO,eAAe;AAAA,EAC1C;AAAA,EAEA,cAAc;AAAA;AAAA,IAEZ,aAAa,OAAO,YAAY;AAAA;AAAA,IAGhC,eAAe,OAAO,YAAY;AAAA,IAClC,gBAAgB,OAAO,YAAY;AAAA,IACnC,gBAAgB,OAAO,WAAW;AAAA;AAAA,IAGlC,yBAAyB,OAAO,YAAY;AAAA,IAC5C,sBAAsB,OAAO,YAAY;AAAA,IACzC,2BAA2B,OAAO,YAAY;AAAA,IAC9C,4BAA4B,OAAO,YAAY;AAAA,IAC/C,yBAAyB,OAAO,YAAY;AAAA,IAC5C,8BAA8B,OAAO,YAAY;AAAA,IACjD,+BAA+B,OAAO,YAAY;AAAA,IAClD,uBAAuB,OAAO,YAAY;AAAA,IAC1C,wBAAwB,OAAO,YAAY;AAAA;AAAA,IAG3C,8BAA8B,OAAO,YAAY;AAAA,IACjD,4BAA4B,OAAO,YAAY;AAAA,IAC/C,+BAA+B,OAAO,YAAY;AAAA,IAClD,6BAA6B,OAAO,YAAY;AAAA;AAAA,IAGhD,YAAY,OAAO,gBAAgB;AAAA,IACnC,iBAAiB,OAAO,gBAAgB;AAAA,IACxC,kBAAkB,OAAO,gBAAgB;AAAA,IACzC,gBAAgB,OAAO,gBAAgB;AAAA;AAAA,IAGvC,cAAc,OAAO,WAAW;AAAA,IAChC,kBAAkB,OAAO,WAAW;AAAA,IACpC,cAAc,OAAO,WAAW;AAAA;AAAA,IAGhC,mBAAmB,OAAO,WAAW;AAAA,IACrC,uBAAuB,OAAO,WAAW;AAAA;AAAA,IAGzC,aAAa,OAAO,WAAW;AAAA,IAC/B,cAAc,OAAO,WAAW;AAAA,IAChC,gBAAgB,OAAO,WAAW;AAAA;AAAA,IAGlC,eAAe,OAAO,eAAe;AAAA,IACrC,YAAY,OAAO,eAAe;AAAA,IAClC,iBAAiB,OAAO,eAAe;AAAA,IACvC,kBAAkB,OAAO,eAAe;AAAA,IACxC,eAAe,OAAO,eAAe;AAAA,IACrC,oBAAoB,OAAO,eAAe;AAAA,IAC1C,qBAAqB,OAAO,eAAe;AAAA,IAC3C,aAAa,OAAO,eAAe;AAAA,IACnC,cAAc,OAAO,eAAe;AAAA;AAAA,IAGpC,eAAe,OAAO,aAAa;AAAA,IACnC,kBAAkB,OAAO,aAAa;AAAA,IACtC,iBAAiB,OAAO,aAAa;AAAA,IACrC,iBAAiB,OAAO,aAAa;AAAA,IACrC,qBAAqB,OAAO,aAAa;AAAA,IACzC,qBAAqB,OAAO,aAAa;AAAA;AAAA,IAGzC,oBAAoB,OAAO,WAAW;AAAA,IACtC,qBAAqB,OAAO,WAAW;AAAA,IACvC,qBAAqB,OAAO,WAAW;AAAA,IACvC,kBAAkB,OAAO,WAAW;AAAA,IACpC,oBAAoB,OAAO,WAAW;AAAA,IACtC,kBAAkB,OAAO,WAAW;AAAA;AAAA,IAGpC,sBAAsB,OAAO,aAAa;AAAA,IAC1C,uBAAuB,OAAO,aAAa;AAAA,IAC3C,uBAAuB,OAAO,aAAa;AAAA,IAC3C,oBAAoB,OAAO,aAAa;AAAA,IACxC,sBAAsB,OAAO,aAAa;AAAA,IAC1C,oBAAoB,OAAO,aAAa;AAAA,EAC1C;AAAA,EAEA,UAAU;AAAA;AAAA,IAER,EAAE,SAAS,YAAY,SAAS,cAAc,aAAa,EAAE;AAAA;AAAA,IAE7D,EAAE,SAAS,iBAAiB,SAAS,cAAc,aAAa,EAAE;AAAA,IAClE,EAAE,SAAS,iBAAiB,SAAS,cAAc,aAAa,EAAE;AAAA,IAClE,EAAE,SAAS,gBAAgB,SAAS,cAAc,aAAa,EAAE;AAAA,EACnE;AAAA,EAEA,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACtGA,IAAI,cAAuC;AAO3C,SAAS,gBAAkC;AACzC,MAAI,gBAAgB,MAAM;AACxB,kBAAc;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAYO,IAAM,aAA+B,IAAI,MAAM,CAAC,GAAuB;AAAA,EAC5E,IAAI,GAAG,MAAM;AACX,WAAO,cAAc,EAAE,IAA8B;AAAA,EACvD;AAAA,EACA,UAAU;AACR,WAAO,QAAQ,QAAQ,cAAc,CAAC;AAAA,EACxC;AAAA,EACA,yBAAyB,GAAG,MAAM;AAChC,WAAO,OAAO,yBAAyB,cAAc,GAAG,IAAI;AAAA,EAC9D;AACF,CAAC;;;AC/CM,IAAM,gBAAkC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACzBA,SAAS,iBAA2B;AAClC,SAAO,EAAE,UAAU,oBAAI,IAAI,GAAG,OAAO,KAAK;AAC5C;AAGA,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACE,SAAQ,OAAiB,eAAe;AAAA;AAAA,EAExC,OAAOA,SAAgB,OAA0B;AAC/C,QAAI,OAAO,KAAK;AAChB,eAAW,QAAQA,SAAQ;AACzB,UAAI,CAAC,KAAK,SAAS,IAAI,IAAI,GAAG;AAC5B,aAAK,SAAS,IAAI,MAAM,eAAe,CAAC;AAAA,MAC1C;AACA,aAAO,KAAK,SAAS,IAAI,IAAI;AAAA,IAC/B;AACA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,iBAAiB,WAAuE;AACtF,QAAI,OAAO,KAAK;AAChB,QAAI,YAAgE;AACpE,QAAI,cAAc;AAGlB,QAAI,KAAK,OAAO;AACd,kBAAY,EAAE,OAAO,KAAK,OAAO,aAAa,EAAE;AAAA,IAClD;AAEA,eAAW,QAAQ,WAAW;AAC5B,YAAM,QAAQ,KAAK,SAAS,IAAI,IAAI;AACpC,UAAI,CAAC,MAAO;AACZ,aAAO;AACP;AACA,UAAI,KAAK,OAAO;AACd,oBAAY,EAAE,OAAO,KAAK,OAAO,YAAY;AAAA,MAC/C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;;;AC9BA,IAAI,QAAyB;AAAA,EAC3B,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,YAAY,IAAI,WAAW;AAAA,EAC3B,cAAc,oBAAI,IAAI;AAAA,EACtB,WAAW,CAAC;AAAA,EACZ,cAAc,oBAAI,IAAI;AAAA,EACtB,aAAa;AACf;AAMA,SAAS,qBAAqB,QAAgC;AAC5D,QAAM,aAAa,IAAI,WAAW;AAClC,QAAM,eAAe,oBAAI,IAAI;AAC7B,QAAM,YAAY,OAAO;AACzB,QAAM,eAAe,oBAAI,IAAI;AAG7B,aAAW,CAACC,SAAQ,KAAK,KAAK,OAAO,QAAQ,OAAO,QAAQ,GAAG;AAC7D,UAAM,WAAW,OAAOA,SAAQ,KAAK;AAAA,EACvC;AAGA,aAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,OAAO,YAAY,GAAG;AACpE,UAAM,aAAa,IAAI,WAAW,KAAK;AAAA,EACzC;AAGA,aAAW,CAAC,SAAS,SAAS,KAAK,OAAO,QAAQ,OAAO,SAAS,GAAG;AACnE,UAAM,aAAa,IAAI,SAAS,IAAI,IAAI,SAAS,CAAC;AAAA,EACpD;AAEA,QAAM,SAAS;AACf,QAAM,cAAc;AACtB;AAMA,SAAS,aAAa,MAAyB;AAC7C,MAAI,SAAS,MAAM,QAAQ,MAAM,aAAa;AAC5C;AAAA,EACF;AAEA,QAAM,OAAO;AAEb,MAAI,SAAS,OAAO;AAElB,UAAM,aAAa,IAAI,WAAW;AAClC,UAAM,eAAe,oBAAI,IAAI;AAC7B,UAAM,YAAY,CAAC;AACnB,UAAM,eAAe,oBAAI,IAAI;AAC7B,UAAM,cAAc;AACpB;AAAA,EACF;AAEA,QAAM,SAAS,SAAS,YAAY,gBAAgB;AACpD,uBAAqB,MAAM;AAC7B;AAMA,SAAS,oBAA0B;AACjC,MAAI,CAAC,MAAM,aAAa;AACtB,iBAAa,MAAM,IAAI;AAAA,EACzB;AACF;AASA,SAAS,cAAc,SAAgE;AACrF,oBAAkB;AAGlB,MAAI,MAAM,SAAS,OAAO;AACxB,WAAO,EAAE,OAAO,MAAM,aAAa,EAAE;AAAA,EACvC;AAGA,QAAM,aAAa,MAAM,aAAa,IAAI,OAAO;AACjD,MAAI,YAAY;AACd,WAAO,EAAE,OAAO,WAAW,SAAS,aAAa,WAAW,YAAY;AAAA,EAC1E;AAGA,QAAM,cAAc,MAAM,WAAW,iBAAiB,OAAO;AAC7D,MAAI,aAAa;AACf,WAAO,EAAE,OAAO,YAAY,MAAM,SAAS,aAAa,YAAY,MAAM,YAAY;AAAA,EACxF;AAGA,aAAW,EAAE,SAAS,SAAS,YAAY,KAAK,MAAM,OAAO,UAAU;AACrE,QAAI,QAAQ,KAAK,OAAO,GAAG;AACzB,aAAO,EAAE,OAAO,SAAS,YAAY;AAAA,IACvC;AAAA,EACF;AAGA,SAAO,EAAE,OAAO,MAAM,aAAa,EAAE;AACvC;AAwBA,SAAS,qBAAqB,SAA2B;AACvD,oBAAkB;AAClB,SAAO,MAAM,UAAU,OAAO,KAAK,CAAC;AACtC;AAMA,SAAS,eAA4B;AACnC,SAAO,MAAM;AACf;AAeA,SAAS,kBAAwB;AAC/B,UAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY,IAAI,WAAW;AAAA,IAC3B,cAAc,oBAAI,IAAI;AAAA,IACtB,WAAW,CAAC;AAAA,IACZ,cAAc,oBAAI,IAAI;AAAA,IACtB,aAAa;AAAA,EACf;AACF;;;AC3KA,SAAS,kBAAkB,OAA2B;AACpD,MAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,SAAS,UAAU,IAAI;AAC5E,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC1D,WAAO,OAAO,KAAK;AAAA,EACrB;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AAExB,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO,kBAAkB,MAAM,CAAC,CAAC;AAAA,IACnC;AAEA,QAAI,SAAS;AACb,eAAW,QAAQ,OAAO;AACxB,YAAM,YAAY,kBAAkB,IAAI;AACxC,UAAI,WAAW;AACb,iBAAS,SAAS,SAAS,MAAM,YAAY;AAAA,MAC/C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAGA,MAAI,OAAO,UAAU,UAAU;AAE7B,QAAI,SAAS;AACb,eAAW,OAAO,OAAO;AACvB,UAAI,OAAO,UAAU,eAAe,KAAK,OAAO,GAAG,KAAK,MAAM,GAAG,GAAG;AAClE,iBAAS,SAAS,SAAS,MAAM,MAAM;AAAA,MACzC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AASA,SAAS,sBAAsB,QAA8B;AAE3D,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,kBAAkB,OAAO,CAAC,CAAC;AAAA,EACpC;AACA,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AAC1B,UAAM,YAAY,kBAAkB,KAAK;AACzC,QAAI,WAAW;AACb,eAAS,SAAS,SAAS,MAAM,YAAY;AAAA,IAC/C;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,oBAAoB;AAC1B,IAAM,wBAAwB;AAC9B,IAAM,0BAA0B;AAGhC,IAAM,uBAAuB;AAC7B,IAAM,yBAAyB;AAC/B,IAAM,sBAAsB;AAU5B,SAAS,aAAa,aAA+B;AACnD,SAAO,YAAY,MAAM,iBAAiB,EAAE,OAAO,OAAO;AAC5D;AAoBA,SAAS,iBAAiB,WAIxB;AAGA,MAAI,CAAC,UAAU,SAAS,GAAG,GAAG;AAC5B,UAAM,aAAa,UAAU,QAAQ,GAAG;AAGxC,QAAI,eAAe,IAAI;AACrB,UAAI,UAAU,WAAW,GAAG,GAAG;AAC7B,eAAO,EAAE,WAAW,CAAC,GAAG,SAAS,UAAU,MAAM,CAAC,GAAG,cAAc,KAAK;AAAA,MAC1E;AACA,aAAO,EAAE,WAAW,CAAC,GAAG,SAAS,WAAW,cAAc,MAAM;AAAA,IAClE;AAGA,UAAMC,SAAQ,UAAU,MAAM,GAAG;AACjC,QAAIC,WAAUD,OAAMA,OAAM,SAAS,CAAC;AACpC,UAAME,aAAYF,OAAM,MAAM,GAAG,EAAE;AACnC,QAAIG,gBAAe;AAGnB,QAAIF,SAAQ,WAAW,GAAG,GAAG;AAC3B,MAAAA,WAAUA,SAAQ,MAAM,CAAC;AACzB,MAAAE,gBAAe;AAAA,IACjB;AAGA,UAAMC,kBAAiBF,WAAU,QAAQ,GAAG;AAC5C,QAAIE,oBAAmB,IAAI;AACzB,MAAAF,WAAU,OAAOE,iBAAgB,CAAC;AAClC,MAAAD,gBAAe;AAAA,IACjB;AAEA,WAAO,EAAE,WAAAD,YAAW,SAAAD,UAAS,cAAAE,cAAa;AAAA,EAC5C;AAIA,QAAM,QAAkB,CAAC;AACzB,MAAI,UAAU;AACd,MAAI,eAAe;AAEnB,aAAW,QAAQ,WAAW;AAC5B,QAAI,SAAS,KAAK;AAChB;AACA,iBAAW;AAAA,IACb,WAAW,SAAS,KAAK;AACvB;AACA,iBAAW;AAAA,IACb,WAAW,SAAS,OAAO,iBAAiB,GAAG;AAC7C,UAAI,SAAS;AACX,cAAM,KAAK,OAAO;AAAA,MACpB;AACA,gBAAU;AAAA,IACZ,OAAO;AACL,iBAAW;AAAA,IACb;AAAA,EACF;AAEA,MAAI,SAAS;AACX,UAAM,KAAK,OAAO;AAAA,EACpB;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,EAAE,WAAW,CAAC,GAAG,SAAS,IAAI,cAAc,MAAM;AAAA,EAC3D;AAEA,MAAI,MAAM,WAAW,GAAG;AAEtB,UAAM,SAAS,MAAM,CAAC;AACtB,QAAI,OAAO,WAAW,GAAG,GAAG;AAC1B,aAAO,EAAE,WAAW,CAAC,GAAG,SAAS,OAAO,MAAM,CAAC,GAAG,cAAc,KAAK;AAAA,IACvE;AACA,WAAO,EAAE,WAAW,CAAC,GAAG,SAAS,QAAQ,cAAc,MAAM;AAAA,EAC/D;AAEA,MAAI,UAAU,MAAM,MAAM,SAAS,CAAC;AACpC,QAAM,YAAY,MAAM,MAAM,GAAG,EAAE;AACnC,MAAI,eAAe;AAGnB,MAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,cAAU,QAAQ,MAAM,CAAC;AACzB,mBAAe;AAAA,EACjB;AAGA,QAAM,iBAAiB,UAAU,QAAQ,GAAG;AAC5C,MAAI,mBAAmB,IAAI;AACzB,cAAU,OAAO,gBAAgB,CAAC;AAClC,mBAAe;AAAA,EACjB;AAEA,SAAO,EAAE,WAAW,SAAS,aAAa;AAC5C;AAYA,SAAS,qBAAqB,SAAyB;AAErD,MAAI,QAAQ,SAAS,GAAG,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,QAAQ,YAAY,GAAG;AAC1C,MAAI,eAAe,IAAI;AACrB,WAAO;AAAA,EACT;AAIA,QAAM,aAAa,QAAQ,MAAM,aAAa,CAAC;AAC/C,MAAI,qBAAqB,KAAK,UAAU,KAAK,uBAAuB,KAAK,UAAU,KAAK,oBAAoB,KAAK,UAAU,GAAG;AAC5H,WAAO,QAAQ,MAAM,GAAG,UAAU;AAAA,EACpC;AAEA,SAAO;AACT;AA2BA,SAAS,eAAe,WAAmB,UAA+B;AACxE,QAAM,EAAE,WAAW,SAAS,aAAa,IAAI,iBAAiB,SAAS;AAGvE,MAAI;AACJ,MAAI,UAAU,WAAW,GAAG;AAC1B,kBAAc;AAAA,EAChB,WAAW,UAAU,WAAW,GAAG;AACjC,kBAAc,UAAU,CAAC;AAAA,EAC3B,OAAO;AACL,kBAAc,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG;AAAA,EAC9C;AAGA,QAAM,2BAA2B,qBAAqB,OAAO;AAG7D,QAAM,cAAc,yBAAyB,MAAM,uBAAuB;AAC1E,MAAI,aAAa;AACf,WAAO;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,mBAAmB,YAAY,CAAC;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,yBAAyB,MAAM,qBAAqB;AAC3E,MAAI,gBAAgB;AAClB,WAAO;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,mBAAmB,eAAe,CAAC;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,EACF;AACF;AAWA,SAAS,WAAW,WAAmB,UAA8B;AACnE,QAAM,OAAO,eAAe,WAAW,QAAQ;AAG/C,MAAI,KAAK,aAAa;AACpB,UAAME,SAAQ,KAAK,mBAAmB,WAAW,IAAI,IACjD,sBACA,aAAa,KAAK,iBAAiB;AACvC,WAAO;AAAA,MACL,KAAK,KAAK;AAAA,MACV,WAAW,KAAK;AAAA,MAChB,aAAa,KAAK;AAAA,MAClB,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,MACd,OAAAA;AAAA,MACA,aAAa;AAAA,MACb,mBAAmB,KAAK;AAAA,MACxB,aAAa,YAAY;AAAA,MACzB,UAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAGA,QAAM,EAAE,OAAO,YAAY,IAAI,cAAc,KAAK,wBAAwB;AAE1E,SAAO;AAAA,IACL,KAAK,KAAK;AAAA,IACV,WAAW,KAAK;AAAA,IAChB,aAAa,KAAK;AAAA,IAClB,cAAc,KAAK;AAAA,IACnB,SAAS,KAAK;AAAA,IACd;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,UAAU,KAAK;AAAA,EACjB;AACF;AAUA,SAAS,aAAa,aAAmC;AACvD,MAAI,CAAC,aAAa;AAChB,WAAO,CAAC;AAAA,EACV;AAGA,QAAM,QAAQ,cAAc;AAC5B,QAAM,SAAS,MAAM,IAAI,WAAW;AACpC,MAAI,WAAW,QAAW;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,aAAa,WAAW;AACxC,QAAM,SAAuB,IAAI,MAAM,QAAQ,MAAM;AACrD,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,WAAO,CAAC,IAAI,WAAW,QAAQ,CAAC,GAAG,CAAC;AAAA,EACtC;AAEA,QAAM,IAAI,aAAa,MAAM;AAC7B,SAAO;AACT;;;AC5YA,SAAS,YACP,QACA,cACA,cAGuC;AACvC,QAAM,OAAO,oBAAI,IAAY;AAE7B,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,EAAE,MAAM,SAAS,eAAe,CAAC,IAAI,KAAK;AAAA,EACnD;AAEA,MAAI,OAAO,WAAW,GAAG;AACvB,SAAK,IAAI,CAAC;AACV,WAAO,EAAE,MAAM,SAAS,eAAe,CAAC,IAAI,KAAK;AAAA,EACnD;AAGA,QAAM,OAAO,eACT,oBAAI,IAAwD,IAC5D,oBAAI,IAAqC;AAE7C,QAAM,UAA0B,eAAe,CAAC,IAAK;AAErD,WAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,UAAM,QAAQ,OAAO,CAAC;AAGtB,QAAI,MAAM,UAAU,MAAM;AACxB,WAAK,IAAI,CAAC;AACV;AAAA,IACF;AAEA,UAAM,UAAU,GAAG,MAAM,eAAe,MAAM,EAAE,GAAG,MAAM,WAAW;AACpE,UAAM,SAAS,UAAU,MAAM;AAC/B,UAAM,WAAW,KAAK,IAAI,MAAM;AAGhC,QAAI,aAAa,QAAW;AAC1B,UAAI,cAAc;AAChB,cAAM,oBAAoB;AAC1B,gBAAQ,KAAK;AAAA,UACX;AAAA,UACA,cAAc,kBAAkB;AAAA,UAChC,QAAQ,iBAAiB,kBAAkB,MAAM,GAAG;AAAA,QACtD,CAAC;AAAA,MACH;AACA;AAAA,IACF;AAGA,QAAI,aAAa;AACjB,QAAI,oBAAuC;AAC3C,UAAM,iBAAiB,aAAa,MAAM,KAAK;AAE/C,eAAW,iBAAiB,gBAAgB;AAC1C,UAAI,kBAAkB,MAAM,MAAO;AAEnC,YAAM,cAAc,UAAU;AAC9B,YAAM,mBAAmB,KAAK,IAAI,WAAW;AAE7C,UAAI,qBAAqB,QAAW;AAElC,YAAI,iBAAiB,cAAc,MAAM,aAAa;AACpD;AAAA,QACF,OAAO;AACL,uBAAa;AACb,cAAI,gBAAgB,WAAW,kBAAkB;AAC/C,gCAAqB,iBAAgE;AAAA,UACvF;AACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,YAAY;AACd,UAAI,gBAAgB,sBAAsB,MAAM;AAC9C,gBAAQ,KAAK;AAAA,UACX;AAAA,UACA,cAAc;AAAA,UACd,QAAQ,iBAAiB,kBAAkB,GAAG;AAAA,QAChD,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,WAAK,IAAI,CAAC;AACV,UAAI,cAAc;AAChB;AAAC,QAAC,KAAiE,IAAI,QAAQ;AAAA,UAC7E;AAAA,UACA,aAAa,MAAM;AAAA,QACrB,CAAC;AAAA,MACH,OAAO;AACL;AAAC,QAAC,KAA8C,IAAI,QAAQ;AAAA,UAC1D,aAAa,MAAM;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,QAAQ;AACzB;AAGA,SAAS,iBAAiB,QAAuC;AAC/D,MAAI,OAAO,WAAW,EAAG,QAAO,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE;AACxD,MAAI,OAAO,WAAW,EAAG,QAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE;AAEjE,QAAM,EAAE,MAAM,QAAQ,IAAI,YAAY,QAAQ,sBAAsB,IAAI;AACxE,SAAO;AAAA,IACL,MAAM,OAAO,OAAO,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;AAAA,IACzC;AAAA,EACF;AACF;AAGA,SAAS,uBAAuB,QAAoC;AAClE,MAAI,OAAO,UAAU,EAAG,QAAO;AAE/B,QAAM,EAAE,KAAK,IAAI,YAAY,QAAQ,sBAAsB,KAAK;AAChE,SAAO,OAAO,OAAO,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;AAC5C;AAOA,SAAS,2BACP,QACA,cACa;AACb,MAAI,OAAO,WAAW,EAAG,QAAO,oBAAI,IAAI;AACxC,MAAI,OAAO,WAAW,EAAG,QAAO,oBAAI,IAAI,CAAC,CAAC,CAAC;AAE3C,QAAM,EAAE,KAAK,IAAI,YAAY,QAAQ,cAAc,KAAK;AACxD,SAAO;AACT;AAOA,SAAS,eAAe,QAA8B;AACpD,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,MAAI,OAAO,WAAW,EAAG,QAAO,OAAO,CAAC,EAAE;AAE1C,MAAI,SAAS,OAAO,CAAC,EAAE;AACvB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,cAAU,MAAM,OAAO,CAAC,EAAE;AAAA,EAC5B;AACA,SAAO;AACT;;;ACtGA,SAAS,SAAS,SAAmB,CAAC,GAAwC;AAE1E,MAAI,OAAO,cAAc,UAAa,OAAO,YAAY,GAAG;AACxD,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC5D;AAEA,QAAM;AAAA,IACF,QAAAC,UAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACJ,IAAI;AAEJ,MAAI,SAAS,OAAO;AAChB,WAAO,SAAS,aAAa,QAA8B;AACvD,aAAO,mBAAmB,GAAG,MAAM;AAAA,IACvC;AAAA,EACJ;AAEA,QAAM,aACF,SAAS,YAAY,gBAAuB;AAChD,QAAM,cAAc,iBAAiB,YAAY,QAAQ,QAAQ;AAEjE,QAAM,OAAO,IAAI,WAAW;AAC5B,QAAM,eAAe,oBAAI,IAAyB;AAElD,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,YAAY,QAAQ,GAAG;AAC7D,SAAK,OAAO,KAAK,KAAK;AAAA,EAC1B;AAEA,aAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,YAAY,YAAY,GAAG;AACvE,iBAAa,IAAI,WAAW,KAAK;AAAA,EACrC;AAEA,QAAM,QACF,YAAY,IAAI,IAAI,SAAyB,SAAS,IAAI;AAM9D,WAAS,gBAAgB,SAGvB;AACE,UAAM,aACFA,WAAU,QAAQ,WAAWA,OAAM,IAC7B,QAAQ,MAAMA,QAAO,MAAM,IAC3B;AAEV,UAAM,QAAQ,aAAa,IAAI,UAAU;AACzC,QAAI,OAAO;AACP,aAAO,EAAE,OAAO,MAAM,SAAS,aAAa,MAAM,YAAY;AAAA,IAClE;AAEA,UAAM,cAAc,KAAK,iBAAiB,UAAU;AACpD,QAAI,aAAa;AACb,aAAO;AAAA,QACH,OAAO,YAAY,MAAM;AAAA,QACzB,aAAa,YAAY,MAAM;AAAA,MACnC;AAAA,IACJ;AAEA,eAAW,EAAE,SAAS,SAAS,YAAY,KAAK,YAAY,UAAU;AAClE,UAAI,QAAQ,KAAK,UAAU,GAAG;AAC1B,eAAO,EAAE,OAAO,SAAS,YAAY;AAAA,MACzC;AAAA,IACJ;AAEA,WAAO,EAAE,OAAO,MAAM,aAAa,EAAE;AAAA,EACzC;AAMA,WAAS,aAAa,SAA2B;AAC7C,WAAO,YAAY,UAAU,OAAO,KAAK,CAAC;AAAA,EAC9C;AAEA,SAAO,SAAS,YAAY,QAA8B;AACtD,QAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,UAAM,cAAc,mBAAmB,GAAG,MAAM;AAChD,QAAI,CAAC,YAAa,QAAO;AACzB,QAAI,CAAC,YAAY,SAAS,GAAG,EAAG,QAAO;AAEvC,QAAI,OAAO;AACP,YAAM,SAAS,MAAM,IAAI,WAAW;AACpC,UAAI,WAAW,OAAW,QAAO;AAAA,IACrC;AAEA,UAAM,UAAU,aAAa,WAAW;AACxC,UAAM,SAAuB,IAAI,MAAM,QAAQ,MAAM;AAErD,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,YAAM,SAAS,eAAe,QAAQ,CAAC,GAAG,CAAC;AAG3C,UAAI,OAAO,aAAa;AACpB,cAAM,QAAQ,OAAO,mBAAmB,WAAW,IAAI,IACjD,sBACA,aAAa,OAAO,iBAAiB;AAC3C,eAAO,CAAC,IAAI;AAAA,UACR,KAAK,OAAO;AAAA,UACZ,WAAW,OAAO;AAAA,UAClB,aAAa,OAAO;AAAA,UACpB,cAAc,OAAO;AAAA,UACrB,SAAS,OAAO;AAAA,UAChB;AAAA,UACA,aAAa;AAAA,UACb,mBAAmB,OAAO;AAAA,UAC1B,aAAa,YAAY;AAAA,UACzB,UAAU,OAAO;AAAA,QACrB;AAAA,MACJ,OAAO;AAEH,cAAM,EAAE,OAAO,YAAY,IAAI;AAAA,UAC3B,OAAO;AAAA,QACX;AACA,eAAO,CAAC,IAAI;AAAA,UACR,KAAK,OAAO;AAAA,UACZ,WAAW,OAAO;AAAA,UAClB,aAAa,OAAO;AAAA,UACpB,cAAc,OAAO;AAAA,UACrB,SAAS,OAAO;AAAA,UAChB;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA,UAAU,OAAO;AAAA,QACrB;AAAA,MACJ;AAAA,IACJ;AAGA,UAAM,OAAO,2BAA2B,QAAQ,YAAY;AAG5D,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,UAAI,KAAK,IAAI,CAAC,GAAG;AACb,iBAAS,SAAS,SAAS,MAAM,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,EAAE;AAAA,MAC/D;AAAA,IACJ;AAEA,QAAI,OAAO;AACP,YAAM,IAAI,aAAa,MAAM;AAAA,IACjC;AAEA,WAAO;AAAA,EACX;AACJ;AAMA,SAAS,eACL,QACA,aACA,iBACI;AACJ,aAAW,CAAC,IAAI,QAAQ,KAAK,OAAO,QAAQ,WAAW,GAAG;AACtD,eAAW,KAAK,UAAU;AACtB,UAAI,aAAa,QAAQ;AACrB,eAAO,SAAS,KAAK;AAAA,UACjB,SAAS;AAAA,UACT,SAAS;AAAA,UACT,aAAa;AAAA,QACjB,CAAC;AAAA,MACL,OAAO;AACH,eAAO,aAAa,CAAC,IAAI,EAAE,SAAS,IAAI,aAAa,EAAE;AAAA,MAC3D;AAAA,IACJ;AACA,QAAI,mBAAmB,OAAO,UAAU,EAAE,MAAM,QAAW;AACvD,aAAO,UAAU,EAAE,IAAI,CAAC,EAAE;AAAA,IAC9B;AAAA,EACJ;AACJ;AAMA,SAAS,iBACL,MACA,QACA,UACgB;AAChB,QAAM,SAA2B;AAAA,IAC7B,UAAU,EAAE,GAAG,KAAK,SAAS;AAAA,IAC7B,cAAc,EAAE,GAAG,KAAK,aAAa;AAAA,IACrC,UAAU,CAAC,GAAG,KAAK,QAAQ;AAAA,IAC3B,WAAW,EAAE,GAAG,KAAK,UAAU;AAAA,EACnC;AAEA,MAAI,UAAU,aAAa;AACvB,mBAAe,QAAQ,SAAS,aAAa,KAAK;AAAA,EACtD;AAEA,MAAI,QAAQ,aAAa;AACrB,mBAAe,QAAQ,OAAO,aAAa,IAAI;AAAA,EACnD;AAEA,MAAI,QAAQ,wBAAwB;AAChC,eAAW,CAAC,IAAI,SAAS,KAAK,OAAO;AAAA,MACjC,OAAO;AAAA,IACX,GAAG;AACC,YAAM,WAAW,OAAO,UAAU,EAAE;AACpC,aAAO,UAAU,EAAE,IACf,aAAa,SACP,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC,IACxC;AAAA,IACd;AAAA,EACJ;AAEA,MAAI,UAAU,wBAAwB;AAClC,WAAO,OAAO,OAAO,WAAW,SAAS,sBAAsB;AAAA,EACnE;AAEA,MAAI,QAAQ,UAAU;AAClB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,QAAQ,GAAG;AACxD,aAAO,SAAS,GAAG,IAAI;AAAA,QACnB,SAAS,MAAM;AAAA,QACf,aAAa,MAAM,eAAe;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;;;ACzRA,IAAM,UAAU,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,SAAS,MAAM,QAA8B;AAE3C,MAAI,aAAa,MAAM,OAAO;AAC5B,WAAO,mBAAmB,GAAG,MAAM;AAAA,EACrC;AACA,SAAO,QAAQ,GAAG,MAAM;AAC1B;;;ACZA,SAAS,UAAU,QAA8B;AAC/C,SAAO,mBAAmB,GAAG,MAAM;AACrC;;;ACTA,SAAS,oCAAoC;AAW7C,IAAI,eAAoC;AACxC,IAAI,cAAoC;AA6BxC,eAAsB,iBAAiB,UAA+B,CAAC,GAAkB;AACvF,MAAI,aAAc;AAClB,MAAI,YAAa,QAAO;AAExB,QAAM,MAAM,QAAQ,OAAO;AAE3B,iBAAe,YAAY;AACzB,mBAAe,MAAM,6BAA6B,GAAG;AAAA,EACvD,GAAG;AAEH,SAAO;AACT;AAGO,SAAS,YAAY,WAAkC;AAC5D,MAAI,CAAC,aAAc,QAAO;AAC1B,QAAM,CAAC,GAAG,IAAI,aAAa,gBAAgB,CAAC,SAAS,CAAC;AACtD,SAAO,OAAO;AAChB;AAGO,SAAS,iBAAiB,YAAyC;AACxE,MAAI,CAAC,aAAc,QAAO,WAAW,IAAI,MAAM,IAAI;AACnD,SAAO,aAAa,gBAAgB,UAAU;AAChD;AAEO,SAAS,gBAAyB;AACvC,SAAO,iBAAiB;AAC1B;AAGO,SAAS,cAAc,MAAkC;AAC9D,MAAI,CAAC,aAAc,QAAO;AAC1B,SAAO,aAAa,kBAAkB,IAAI;AAC5C;AAUO,SAAS,aAAa,WAA4B;AACvD,MAAI,CAAC,aAAc,QAAO;AAC1B,QAAM,CAAC,GAAG,IAAI,aAAa,gBAAgB,CAAC,SAAS,CAAC;AACtD,SAAO,QAAQ;AACjB;AASO,SAAS,gBAAgB,YAAiC;AAC/D,MAAI,CAAC,aAAc,QAAO,WAAW,IAAI,MAAM,KAAK;AACpD,SAAO,aAAa,gBAAgB,UAAU,EAAE,IAAI,SAAO,QAAQ,IAAI;AACzE;AASO,SAAS,cAAc,YAAiD;AAC7E,MAAI,CAAC,aAAc,QAAO,WAAW,IAAI,OAAK,CAAC,GAAG,IAAI,CAAC;AACvD,SAAO,aAAa,cAAc,UAAU;AAC9C;AAYO,SAAS,oBAAoB,YAAgC;AAClE,MAAI,CAAC,aAAc,QAAO;AAC1B,SAAO,aAAa,uBAAuB,UAAU;AACvD;;;ACnIA,IAAI,eAAwC;AAC5C,IAAM,kBAAkB,oBAAI,IAAY;AAIxC,IAAI,eAAiD;AAgB9C,SAAS,6BACZ,SACI;AACJ,iBAAe;AACnB;AAEO,SAAS,kBAA2C;AACvD,MAAI,OAAO,aAAa,YAAa,QAAO;AAE5C,MAAI,CAAC,cAAc;AACf,mBAAe,SAAS,cAAc,OAAO;AAC7C,iBAAa,KAAK;AAClB,aAAS,KAAK,YAAY,YAAY;AAAA,EAC1C;AACA,SAAO;AACX;AAOO,SAAS,UAAU,WAAmB,SAAuB;AAChE,MAAI,gBAAgB,IAAI,SAAS,EAAG;AAEpC,QAAM,QAAQ,gBAAgB;AAC9B,MAAI,CAAC,MAAO;AAGZ,QAAM,QAAQ,MAAM;AACpB,MAAI,OAAO;AACP,QAAI;AACA,YAAM,WAAW,SAAS,MAAM,SAAS,MAAM;AAC/C,sBAAgB,IAAI,SAAS;AAC7B;AAAA,IACJ,SAAS,GAAG;AAER;AAAA,QACI,aAAa,QAAQ,IAAI,IAAI,MAAM,OAAO,CAAC,CAAC;AAAA,QAC5C;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAGA,QAAM,eAAe,UAAU;AAC/B,kBAAgB,IAAI,SAAS;AACjC;AAOO,SAAS,eACZ,YACA,UACI;AACJ,QAAM,QAAQ,gBAAgB;AAC9B,MAAI,CAAC,MAAO;AAEZ,QAAM,QAAQ,MAAM;AACpB,QAAM,gBAAgB,UAAU;AAGhC,QAAM,gBAA0B,CAAC;AACjC,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,UAAM,YAAY,WAAW,CAAC;AAC9B,UAAM,MAAM,SAAS,CAAC;AACtB,QAAI,OAAO,aAAa,CAAC,gBAAgB,IAAI,SAAS,GAAG;AACrD,UAAI,eAAe;AACf,YAAI;AACA,gBAAM,WAAW,KAAK,MAAM,SAAS,MAAM;AAC3C,0BAAgB,IAAI,SAAS;AAAA,QACjC,SAAS,GAAG;AAER;AAAA,YACI,aAAa,QAAQ,IAAI,IAAI,MAAM,OAAO,CAAC,CAAC;AAAA,YAC5C;AAAA,UACJ;AACA,wBAAc,KAAK,GAAG;AACtB,0BAAgB,IAAI,SAAS;AAAA,QACjC;AAAA,MACJ,OAAO;AACH,sBAAc,KAAK,GAAG;AACtB,wBAAgB,IAAI,SAAS;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ;AAGA,MAAI,cAAc,SAAS,GAAG;AAC1B,UAAM,eAAe,cAAc,KAAK,IAAI,IAAI;AAAA,EACpD;AACJ;AAEO,SAAS,iBAAiB,WAA4B;AACzD,SAAO,gBAAgB,IAAI,SAAS;AACxC;AAEO,SAAS,sBAA4B;AACxC,MAAI,cAAc;AAEd,UAAM,QAAQ,aAAa;AAC3B,QAAI,OAAO;AACP,aAAO,MAAM,SAAS,SAAS,GAAG;AAC9B,cAAM,WAAW,CAAC;AAAA,MACtB;AAAA,IACJ;AACA,iBAAa,cAAc;AAAA,EAC/B;AACA,kBAAgB,MAAM;AAC1B;AAEO,SAAS,qBAA+B;AAC3C,SAAO,MAAM,KAAK,eAAe;AACrC;;;ACvFA,IAAMC,qBAAoB;AAI1B,SAAS,SACP,eACA,SACQ;AACR,MAAI;AACJ,MAAI,qBAAsC;AAE1C,MAAI,OAAO,kBAAkB,UAAU;AAErC,UAAM,cAAwB,CAAC;AAC/B,QAAI,SAAS;AACb,eAAW,YAAY,eAAe;AACpC,UAAI,OAAO,UAAU,eAAe,KAAK,eAAe,QAAQ,GAAG;AACjE,cAAM,cAAc,cAAc,QAAQ;AAC1C,YAAI,aAAa;AACf,gBAAM,EAAE,KAAK,WAAW,IAAI,uBAAuB,UAAU,WAAW;AACxE,cAAI,KAAK;AACP,qBAAS,SAAS,SAAS,MAAM,MAAM;AACvC,uBAAW,OAAO,YAAY;AAC5B,0BAAY,KAAK,GAAG;AAAA,YACtB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,eAAW;AACX,yBAAqB;AAAA,EACvB,OAAO;AACL,UAAM,EAAE,KAAK,WAAW,IAAI,uBAAuB,eAAe,WAAW,EAAE;AAC/E,eAAW;AACX,yBAAqB;AAAA,EACvB;AAEA,MAAI,OAAO,WAAW,eAAe,cAAc,KAAK,mBAAmB,SAAS,GAAG;AACrF,UAAM,gBAAgB,mBAAmB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,GAAG,CAAC;AAE/E,QAAI,cAAc,SAAS,GAAG;AAC5B,YAAM,WAAW,iBAAiB,aAAa;AAC/C,qBAAe,eAAe,QAAQ;AAAA,IACxC;AAAA,EACF;AAEA,SAAO;AACT;AAOA,SAAS,uBAAuB,UAAkB,SAAwD;AACxG,QAAM,YAAY,QAAQ,MAAMA,kBAAiB,EAAE,OAAO,OAAO;AACjE,MAAI,UAAU,WAAW,EAAG,QAAO,EAAE,KAAK,IAAI,YAAY,CAAC,EAAE;AAG7D,QAAM,aAAuB,IAAI,MAAM,UAAU,MAAM;AACvD,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,WAAW,WAAW,UAAU,CAAC;AACvC,eAAW,CAAC,IAAI;AAChB,UAAM,MAAM,MAAM,MAAM,WAAW;AAAA,EACrC;AACA,SAAO,EAAE,KAAK,WAAW;AAC3B;;;AC1FA,SAAS,SACP,QACmB;AACnB,QAAM,EAAE,MAAM,UAAU,iBAAiB,iBAAiB,IAAI;AAG9D,QAAM,cAAc,WAAW,OAAO,KAAK,QAAQ,IAAI,CAAC;AAGxD,QAAM,sBAAyC,mBAC3C,iBAAiB,IAAI,CAAC,aAAa;AACjC,UAAM,OAAiB,CAAC;AACxB,eAAW,OAAO,UAAU;AAC1B,UAAI,OAAO,UAAU,eAAe,KAAK,UAAU,GAAG,KAAK,QAAQ,WAAW,QAAQ,aAAa;AACjG,aAAK,KAAK,GAAG;AAAA,MACf;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC,IACD;AAEJ,SAAO,CAAC,QAAQ,CAAC,MAAM;AACrB,UAAM,EAAE,OAAO,gBAAgB,WAAW,GAAG,aAAa,IAAI;AAC9D,UAAM,UAAwB,CAAC;AAE/B,QAAI,MAAM;AACR,cAAQ,KAAK,IAAI;AAAA,IACnB;AAEA,QAAI,UAAU;AACZ,iBAAW,cAAc,aAAa;AACpC,cAAM,QACH,aAAyC,UAAU,KACpD,kBAAkB,UAA0C;AAE9D,YAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,gBAAM,iBAAiB,SAAS,UAAU,EAAE,KAAe;AAC3D,cAAI,gBAAgB;AAClB,oBAAQ,KAAK,cAAc;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,oBAAoB,qBAAqB;AAC3C,eAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAChD,cAAM,WAAW,iBAAiB,CAAC;AACnC,cAAM,OAAO,oBAAoB,CAAC;AAClC,YAAI,2BAA2B,UAAU,MAAM,cAAyC,eAAe,GAAG;AACxG,gBAAM,gBAAgB,SAAS,SAAS,SAAS;AACjD,cAAI,eAAe;AACjB,oBAAQ,KAAK,aAAa;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,gBAAgB;AAClB,cAAQ,KAAK,cAAc;AAAA,IAC7B;AACA,QAAI,WAAW;AACb,cAAQ,KAAK,SAAS;AAAA,IACxB;AAEA,WAAO,GAAG,GAAG,OAAO;AAAA,EACtB;AACF;AAOA,SAAS,2BACP,UACA,MACA,OACA,UACS;AACT,aAAW,OAAO,MAAM;AACtB,UAAM,QAAS,SAAqC,GAAG;AACvD,UAAM,cACJ,MAAM,GAAG,KAAK,WAAW,GAA4B;AAEvD,QAAI,eAAe,WAAW,MAAM,eAAe,KAAK,GAAG;AACzD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,eAAe,OAAyB;AAC/C,MAAI,UAAU,UAAU,UAAU,KAAM,QAAO;AAC/C,MAAI,UAAU,WAAW,UAAU,MAAO,QAAO;AACjD,SAAO;AACT;;;ACrFA,SAAS,WAAW,QAAqC;AACvD,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,EAAE,QAAQ,IAAI,SAAS,CAAC,GAAG,MAAM,CAAC,EAAE;AAAA,EAC7C;AAEA,QAAM,cAAc,mBAAmB,GAAG,MAAM;AAChD,MAAI,CAAC,aAAa;AAChB,WAAO,EAAE,QAAQ,IAAI,SAAS,CAAC,GAAG,MAAM,CAAC,EAAE;AAAA,EAC7C;AAGA,MAAI,CAAC,YAAY,SAAS,GAAG,GAAG;AAC9B,UAAMC,UAAS,aAAa,WAAW;AACvC,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,MAAMA,QAAO,IAAI,CAAC,OAAO;AAAA,QACvB,OAAO,EAAE;AAAA,QACT,OAAO,EAAE;AAAA,MACX,EAAE;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,SAAS,aAAa,WAAW;AACvC,QAAM,EAAE,MAAM,QAAQ,IAAI,iBAAiB,MAAM;AAEjD,QAAM,iBAAwC,QAAQ,IAAI,CAAC,OAAO;AAAA,IAChE,OAAO,EAAE,MAAM;AAAA,IACf,QAAQ,EAAE;AAAA,IACV,eAAe,EAAE,aAAa;AAAA,EAChC,EAAE;AAEF,QAAM,cAAkC,KAAK,IAAI,CAAC,OAAO;AAAA,IACvD,OAAO,EAAE;AAAA,IACT,OAAO,EAAE;AAAA,EACX,EAAE;AAEF,SAAO;AAAA,IACL,QAAQ,eAAe,IAAI;AAAA,IAC3B,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AACF;","names":["prefix","prefix","parts","utility","modifiers","hasImportant","importantIndex","group","prefix","CLASS_SPLIT_REGEX","tokens"]}
1
+ {"version":3,"sources":["../src/groups/types.ts","../src/cache.ts","../src/groups/layout.ts","../src/groups/spacing.ts","../src/groups/sizing.ts","../src/groups/flexbox-grid.ts","../src/groups/typography.ts","../src/groups/colors.ts","../src/groups/backgrounds.ts","../src/groups/borders.ts","../src/groups/effects.ts","../src/groups/transforms.ts","../src/groups/transitions.ts","../src/groups/interactivity.ts","../src/groups/svg.ts","../src/groups/accessibility.ts","../src/groups/tables.ts","../src/groups/masks.ts","../src/groups/full.ts","../src/groups/minimal.ts","../src/trie.ts","../src/class-groups.ts","../src/parser.ts","../src/resolver.ts","../src/create-tw.ts","../src/tw.ts","../src/tw-join.ts","../src/css-generator.ts","../src/tailwind-css.ts","../src/style-injector.ts","../src/tw-prefix.ts","../src/tw-states.ts","../src/tw-debug.ts"],"sourcesContent":["/**\n * Specificity levels for composite class handling.\n * Higher numbers = more specific = won't be overridden by lower.\n */\n\nexport const SPECIFICITY = {\n /** All sides (p-4, m-4, rounded) */\n ALL: 1,\n /** Axis (px-4, my-4, rounded-t) */\n AXIS: 2,\n /** Single side (pt-4, mr-4, rounded-tl) */\n SIDE: 3,\n /** Arbitrary values are highly specific */\n ARBITRARY: 10,\n} as const\n\n/**\n * A prefix entry for the trie-based classifier.\n */\n\nexport interface PrefixEntry {\n /** The group ID this prefix maps to */\n groupId: string\n /** Specificity level for this prefix */\n specificity: number\n}\n\n/**\n * Conflict mapping from a group ID to groups it overrides.\n */\n\nexport type ConflictMap = Record<string, string[]>\n\n/**\n * A complete class group configuration.\n */\n\nexport interface ClassGroupConfig {\n /** Prefix-to-group mappings for trie lookup */\n prefixes: Record<string, PrefixEntry>\n /** Exact match mappings for standalone classes */\n exactMatches: Record<string, PrefixEntry>\n /** Regex patterns for complex matching (fallback) */\n patterns: Array<{ pattern: RegExp; groupId: string; specificity: number }>\n /** Conflict mappings */\n conflicts: ConflictMap\n}\n\n/**\n * Creates a prefix entry with default specificity.\n */\n\nexport function prefix(groupId: string, specificity = 1): PrefixEntry {\n return { groupId, specificity }\n}\n\n/**\n * Merges multiple class group configs into one.\n */\n\nexport function mergeConfigs(...configs: ClassGroupConfig[]): ClassGroupConfig {\n const merged: ClassGroupConfig = {\n prefixes: {},\n exactMatches: {},\n patterns: [],\n conflicts: {},\n }\n\n for (const config of configs) {\n Object.assign(merged.prefixes, config.prefixes)\n Object.assign(merged.exactMatches, config.exactMatches)\n merged.patterns.push(...config.patterns)\n // Merge conflicts, combining arrays for same keys\n for (const [key, values] of Object.entries(config.conflicts)) {\n if (key in merged.conflicts) {\n merged.conflicts[key] = [...new Set([...merged.conflicts[key], ...values])]\n } else {\n merged.conflicts[key] = [...values]\n }\n }\n }\n\n return merged\n}\n\n/**\n * Hierarchy definition for generating bidirectional conflicts.\n * Structure: base -> { axis -> sides[] }\n * Sides can be suffixes (appended as base-side) or full names (used as-is if prefixed with @)\n */\n\nexport interface ConflictHierarchy {\n [base: string]: {\n x?: string[]\n y?: string[]\n [axis: string]: string[] | undefined\n }\n}\n\n/**\n * Auto-generates bidirectional conflict maps from a hierarchy definition.\n * This reduces manual conflict definitions significantly.\n *\n * @param hierarchy - The hierarchy definition\n * @param fullSideNames - If true, sides are used as full group names (not prefixed with base-)\n *\n * @example\n * // Standard: sides are suffixes\n * generateConflicts({ padding: { x: ['l', 'r'], y: ['t', 'b'] } })\n * // → padding-l, padding-r, padding-t, padding-b\n *\n * @example\n * // Full names: sides are complete group names\n * generateConflicts({ inset: { x: ['left', 'right'], y: ['top', 'bottom'] } }, true)\n * // → left, right, top, bottom (not inset-left, inset-right)\n */\n\nexport function generateConflicts(hierarchy: ConflictHierarchy, fullSideNames = false): ConflictMap {\n const conflicts: ConflictMap = {}\n\n for (const [base, axes] of Object.entries(hierarchy)) {\n // Collect all descendant groups\n const allGroups: string[] = [base]\n const sideToAxis = new Map<string, string>()\n\n for (const [axis, sides] of Object.entries(axes)) {\n if (!sides || sides.length === 0) continue\n const axisGroup = `${base}-${axis}`\n allGroups.push(axisGroup)\n\n for (const side of sides) {\n const sideGroup = fullSideNames ? side : `${base}-${side}`\n allGroups.push(sideGroup)\n sideToAxis.set(sideGroup, axisGroup)\n }\n }\n\n // Base conflicts with everything\n conflicts[base] = [...allGroups]\n\n // Each axis conflicts with base, itself, and its sides\n for (const [axis, sides] of Object.entries(axes)) {\n if (!sides || sides.length === 0) continue\n const axisGroup = `${base}-${axis}`\n const sideGroups = sides.map(s => fullSideNames ? s : `${base}-${s}`)\n conflicts[axisGroup] = [base, axisGroup, ...sideGroups]\n }\n\n // Each side conflicts with base, its axis, and itself\n for (const [axis, sides] of Object.entries(axes)) {\n if (!sides || sides.length === 0) continue\n const axisGroup = `${base}-${axis}`\n for (const side of sides) {\n const sideGroup = fullSideNames ? side : `${base}-${side}`\n conflicts[sideGroup] = [base, axisGroup, sideGroup]\n }\n }\n }\n\n return conflicts\n}\n\n/**\n * Creates simple self-referencing conflicts for groups that don't have hierarchy.\n */\n\nexport function simpleConflicts(...groupIds: string[]): ConflictMap {\n const conflicts: ConflictMap = {}\n for (const id of groupIds) {\n conflicts[id] = [id]\n }\n return conflicts\n}\n","import type { Cache, ClassToken } from './types'\n\n/**\n * Simplified LRU (Least Recently Used) cache using ES6 Map's insertion order.\n *\n * ES6 Maps maintain insertion order, so we can implement LRU by:\n * - On get: delete and re-set to move item to end (most recent)\n * - On set: add to end, delete from beginning if over capacity\n *\n * This is simpler than a doubly-linked list implementation and\n * leverages highly optimized native Map operations.\n *\n * - get: O(1) amortized\n * - set: O(1) amortized\n * - has: O(1)\n */\n\nclass LRUCache<K, V> implements Cache<K, V> {\n private cache = new Map<K, V>()\n private readonly maxSize: number\n\n constructor(maxSize = 500) {\n this.maxSize = maxSize\n }\n\n /** Gets a value, moving it to most recently used position. */\n get(key: K): V | undefined {\n const value = this.cache.get(key)\n if (value === undefined) {\n return undefined\n }\n // Move to end (most recently used) by delete + set\n this.cache.delete(key)\n this.cache.set(key, value)\n return value\n }\n\n /** Sets a value, evicting the oldest entry if at capacity. */\n set(key: K, value: V): void {\n // Delete first so re-setting moves existing key to end (no-op if key doesn't exist)\n this.cache.delete(key)\n this.cache.set(key, value)\n\n // Evict oldest (first item) if over capacity\n if (this.cache.size > this.maxSize) {\n // Map.keys().next().value gets the first (oldest) key\n const oldestKey = this.cache.keys().next().value\n if (oldestKey !== undefined) {\n this.cache.delete(oldestKey)\n }\n }\n }\n\n has(key: K): boolean {\n return this.cache.has(key)\n }\n\n clear(): void {\n this.cache.clear()\n }\n\n get size(): number {\n return this.cache.size\n }\n}\n\n// Singleton caches for the default tw() function\nlet parseCache: LRUCache<string, ClassToken[]> | null = null\nlet mergeCache: LRUCache<string, string> | null = null\n\nfunction getParseCache(): LRUCache<string, ClassToken[]> {\n if (parseCache === null) {\n parseCache = new LRUCache<string, ClassToken[]>(1000)\n }\n return parseCache\n}\n\nfunction getMergeCache(): LRUCache<string, string> {\n if (mergeCache === null) {\n mergeCache = new LRUCache<string, string>(500)\n }\n return mergeCache\n}\n\nfunction clearCaches(): void {\n parseCache?.clear()\n mergeCache?.clear()\n}\n\n/**\n * Returns current cache statistics for debugging/monitoring.\n *\n * @example\n * ```ts\n * const stats = getCacheStats()\n * console.log(`Parse cache: ${stats.parseSize}, Merge cache: ${stats.mergeSize}`)\n * ```\n */\n\nfunction getCacheStats(): { parseSize: number; mergeSize: number } {\n return {\n parseSize: parseCache?.size ?? 0,\n mergeSize: mergeCache?.size ?? 0,\n }\n}\n\nexport { LRUCache, getParseCache, getMergeCache, clearCaches, getCacheStats }\n","import type { ClassGroupConfig } from './types'\nimport { prefix, SPECIFICITY, generateConflicts, simpleConflicts } from './types'\n\n// Hierarchies for auto-generating conflicts\nconst LAYOUT_HIERARCHY = {\n overflow: { x: [], y: [] },\n overscroll: { x: [], y: [] },\n}\n\n// Inset uses full side names (top, right, etc.) instead of inset-t, inset-r\nconst INSET_HIERARCHY = {\n inset: { x: ['left', 'right', 'start', 'end'], y: ['top', 'bottom'] },\n}\n\n/**\n * Layout-related class groups: display, position, visibility, float, etc.\n */\n\nexport const layoutGroups: ClassGroupConfig = {\n prefixes: {\n // Aspect ratio\n 'aspect-': prefix('aspect-ratio'),\n\n // Columns\n 'columns-': prefix('columns'),\n\n // Container\n '@container': prefix('container'),\n\n // Position\n 'inset-': prefix('inset', SPECIFICITY.ALL),\n '-inset-': prefix('inset', SPECIFICITY.ALL),\n 'inset-x-': prefix('inset-x', SPECIFICITY.AXIS),\n '-inset-x-': prefix('inset-x', SPECIFICITY.AXIS),\n 'inset-y-': prefix('inset-y', SPECIFICITY.AXIS),\n '-inset-y-': prefix('inset-y', SPECIFICITY.AXIS),\n 'top-': prefix('top', SPECIFICITY.SIDE),\n '-top-': prefix('top', SPECIFICITY.SIDE),\n 'right-': prefix('right', SPECIFICITY.SIDE),\n '-right-': prefix('right', SPECIFICITY.SIDE),\n 'bottom-': prefix('bottom', SPECIFICITY.SIDE),\n '-bottom-': prefix('bottom', SPECIFICITY.SIDE),\n 'left-': prefix('left', SPECIFICITY.SIDE),\n '-left-': prefix('left', SPECIFICITY.SIDE),\n 'start-': prefix('start', SPECIFICITY.SIDE),\n '-start-': prefix('start', SPECIFICITY.SIDE),\n 'end-': prefix('end', SPECIFICITY.SIDE),\n '-end-': prefix('end', SPECIFICITY.SIDE),\n\n // Z-index\n 'z-': prefix('z-index'),\n '-z-': prefix('z-index'),\n\n // Float & Clear\n 'float-': prefix('float'),\n 'clear-': prefix('clear'),\n\n // Object fit/position\n 'object-': prefix('object-fit'), // Will be refined by exact matches\n\n // Overflow\n 'overflow-': prefix('overflow', SPECIFICITY.ALL),\n 'overflow-x-': prefix('overflow-x', SPECIFICITY.AXIS),\n 'overflow-y-': prefix('overflow-y', SPECIFICITY.AXIS),\n\n // Overscroll\n 'overscroll-': prefix('overscroll', SPECIFICITY.ALL),\n 'overscroll-x-': prefix('overscroll-x', SPECIFICITY.AXIS),\n 'overscroll-y-': prefix('overscroll-y', SPECIFICITY.AXIS),\n },\n\n exactMatches: {\n // Aspect ratio\n 'aspect-auto': prefix('aspect-ratio'),\n 'aspect-square': prefix('aspect-ratio'),\n 'aspect-video': prefix('aspect-ratio'),\n\n // Container\n container: prefix('container'),\n '@container': prefix('container'),\n\n // Columns\n 'columns-auto': prefix('columns'),\n\n // CSS Containment\n 'contain-none': prefix('contain'),\n 'contain-content': prefix('contain'),\n 'contain-strict': prefix('contain'),\n 'contain-size': prefix('contain'),\n 'contain-inline-size': prefix('contain'),\n 'contain-layout': prefix('contain'),\n 'contain-style': prefix('contain'),\n 'contain-paint': prefix('contain'),\n\n // Field sizing (new in v4)\n 'field-sizing-content': prefix('field-sizing'),\n 'field-sizing-fixed': prefix('field-sizing'),\n\n // Break before\n 'break-before-auto': prefix('break-before'),\n 'break-before-avoid': prefix('break-before'),\n 'break-before-all': prefix('break-before'),\n 'break-before-avoid-page': prefix('break-before'),\n 'break-before-page': prefix('break-before'),\n 'break-before-left': prefix('break-before'),\n 'break-before-right': prefix('break-before'),\n 'break-before-column': prefix('break-before'),\n\n // Break after\n 'break-after-auto': prefix('break-after'),\n 'break-after-avoid': prefix('break-after'),\n 'break-after-all': prefix('break-after'),\n 'break-after-avoid-page': prefix('break-after'),\n 'break-after-page': prefix('break-after'),\n 'break-after-left': prefix('break-after'),\n 'break-after-right': prefix('break-after'),\n 'break-after-column': prefix('break-after'),\n\n // Break inside\n 'break-inside-auto': prefix('break-inside'),\n 'break-inside-avoid': prefix('break-inside'),\n 'break-inside-avoid-page': prefix('break-inside'),\n 'break-inside-avoid-column': prefix('break-inside'),\n\n // Color scheme\n 'scheme-normal': prefix('color-scheme'),\n 'scheme-dark': prefix('color-scheme'),\n 'scheme-light': prefix('color-scheme'),\n 'scheme-light-dark': prefix('color-scheme'),\n 'scheme-dark-light': prefix('color-scheme'),\n 'scheme-only-dark': prefix('color-scheme'),\n 'scheme-only-light': prefix('color-scheme'),\n\n // Display\n block: prefix('display'),\n 'inline-block': prefix('display'),\n inline: prefix('display'),\n flex: prefix('display'),\n 'inline-flex': prefix('display'),\n table: prefix('display'),\n 'inline-table': prefix('display'),\n 'table-caption': prefix('display'),\n 'table-cell': prefix('display'),\n 'table-column': prefix('display'),\n 'table-column-group': prefix('display'),\n 'table-footer-group': prefix('display'),\n 'table-header-group': prefix('display'),\n 'table-row-group': prefix('display'),\n 'table-row': prefix('display'),\n 'flow-root': prefix('display'),\n grid: prefix('display'),\n 'inline-grid': prefix('display'),\n contents: prefix('display'),\n 'list-item': prefix('display'),\n hidden: prefix('display'),\n\n // Position\n static: prefix('position'),\n fixed: prefix('position'),\n absolute: prefix('position'),\n relative: prefix('position'),\n sticky: prefix('position'),\n\n // Visibility\n visible: prefix('visibility'),\n invisible: prefix('visibility'),\n collapse: prefix('visibility'),\n\n // Isolation\n isolate: prefix('isolation'),\n 'isolation-auto': prefix('isolation'),\n\n // Object fit\n 'object-contain': prefix('object-fit'),\n 'object-cover': prefix('object-fit'),\n 'object-fill': prefix('object-fit'),\n 'object-none': prefix('object-fit'),\n 'object-scale-down': prefix('object-fit'),\n\n // Object position\n 'object-bottom': prefix('object-position'),\n 'object-center': prefix('object-position'),\n 'object-left': prefix('object-position'),\n 'object-left-bottom': prefix('object-position'),\n 'object-left-top': prefix('object-position'),\n 'object-right': prefix('object-position'),\n 'object-right-bottom': prefix('object-position'),\n 'object-right-top': prefix('object-position'),\n 'object-top': prefix('object-position'),\n\n // Overflow exact\n 'overflow-auto': prefix('overflow', SPECIFICITY.ALL),\n 'overflow-hidden': prefix('overflow', SPECIFICITY.ALL),\n 'overflow-clip': prefix('overflow', SPECIFICITY.ALL),\n 'overflow-visible': prefix('overflow', SPECIFICITY.ALL),\n 'overflow-scroll': prefix('overflow', SPECIFICITY.ALL),\n },\n\n patterns: [],\n\n conflicts: {\n ...simpleConflicts(\n 'aspect-ratio', 'columns', 'container', 'display', 'position',\n 'visibility', 'isolation', 'float', 'clear', 'object-fit',\n 'object-position', 'z-index', 'contain', 'field-sizing',\n 'break-before', 'break-after', 'break-inside', 'color-scheme'\n ),\n ...generateConflicts(LAYOUT_HIERARCHY),\n ...generateConflicts(INSET_HIERARCHY, true), // Use full side names\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, SPECIFICITY, generateConflicts, simpleConflicts } from './types'\n\n// Define hierarchy for auto-generating conflicts\nconst SPACING_HIERARCHY = {\n padding: { x: ['l', 'r', 's', 'e'], y: ['t', 'b'] },\n margin: { x: ['l', 'r', 's', 'e'], y: ['t', 'b'] },\n gap: { x: [], y: [] },\n}\n\n/**\n * Spacing-related class groups: padding, margin, gap, space.\n */\n\nexport const spacingGroups: ClassGroupConfig = {\n prefixes: {\n // Padding\n 'p-': prefix('padding', SPECIFICITY.ALL),\n 'px-': prefix('padding-x', SPECIFICITY.AXIS),\n 'py-': prefix('padding-y', SPECIFICITY.AXIS),\n 'pt-': prefix('padding-t', SPECIFICITY.SIDE),\n 'pr-': prefix('padding-r', SPECIFICITY.SIDE),\n 'pb-': prefix('padding-b', SPECIFICITY.SIDE),\n 'pl-': prefix('padding-l', SPECIFICITY.SIDE),\n 'ps-': prefix('padding-s', SPECIFICITY.SIDE),\n 'pe-': prefix('padding-e', SPECIFICITY.SIDE),\n\n // Margin\n 'm-': prefix('margin', SPECIFICITY.ALL),\n '-m-': prefix('margin', SPECIFICITY.ALL),\n 'mx-': prefix('margin-x', SPECIFICITY.AXIS),\n '-mx-': prefix('margin-x', SPECIFICITY.AXIS),\n 'my-': prefix('margin-y', SPECIFICITY.AXIS),\n '-my-': prefix('margin-y', SPECIFICITY.AXIS),\n 'mt-': prefix('margin-t', SPECIFICITY.SIDE),\n '-mt-': prefix('margin-t', SPECIFICITY.SIDE),\n 'mr-': prefix('margin-r', SPECIFICITY.SIDE),\n '-mr-': prefix('margin-r', SPECIFICITY.SIDE),\n 'mb-': prefix('margin-b', SPECIFICITY.SIDE),\n '-mb-': prefix('margin-b', SPECIFICITY.SIDE),\n 'ml-': prefix('margin-l', SPECIFICITY.SIDE),\n '-ml-': prefix('margin-l', SPECIFICITY.SIDE),\n 'ms-': prefix('margin-s', SPECIFICITY.SIDE),\n '-ms-': prefix('margin-s', SPECIFICITY.SIDE),\n 'me-': prefix('margin-e', SPECIFICITY.SIDE),\n '-me-': prefix('margin-e', SPECIFICITY.SIDE),\n\n // Gap\n 'gap-': prefix('gap', SPECIFICITY.ALL),\n 'gap-x-': prefix('gap-x', SPECIFICITY.AXIS),\n 'gap-y-': prefix('gap-y', SPECIFICITY.AXIS),\n\n // Space between\n 'space-x-': prefix('space-x'),\n '-space-x-': prefix('space-x'),\n 'space-y-': prefix('space-y'),\n '-space-y-': prefix('space-y'),\n },\n\n exactMatches: {\n 'space-x-reverse': prefix('space-x-reverse'),\n 'space-y-reverse': prefix('space-y-reverse'),\n },\n\n patterns: [],\n\n conflicts: {\n ...generateConflicts(SPACING_HIERARCHY),\n ...simpleConflicts('space-x', 'space-y', 'space-x-reverse', 'space-y-reverse'),\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, SPECIFICITY } from './types'\n\n/**\n * Sizing-related class groups: width, height, min/max, size.\n */\n\nexport const sizingGroups: ClassGroupConfig = {\n prefixes: {\n // Width\n 'w-': prefix('width'),\n 'min-w-': prefix('min-width'),\n 'max-w-': prefix('max-width'),\n\n // Height\n 'h-': prefix('height'),\n 'min-h-': prefix('min-height'),\n 'max-h-': prefix('max-height'),\n\n // Size (width + height shorthand)\n 'size-': prefix('size', SPECIFICITY.ALL),\n },\n\n exactMatches: {},\n\n patterns: [],\n\n conflicts: {\n width: ['width'],\n 'min-width': ['min-width'],\n 'max-width': ['max-width'],\n height: ['height'],\n 'min-height': ['min-height'],\n 'max-height': ['max-height'],\n size: ['size', 'width', 'height'],\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n/**\n * Flexbox and Grid class groups.\n */\n\nexport const flexboxGridGroups: ClassGroupConfig = {\n prefixes: {\n // Flex basis\n 'basis-': prefix('flex-basis'),\n\n // Order\n 'order-': prefix('order'),\n '-order-': prefix('order'),\n\n // Grid template\n 'grid-cols-': prefix('grid-template-columns'),\n 'grid-rows-': prefix('grid-template-rows'),\n\n // Grid column\n 'col-': prefix('grid-column'),\n 'col-start-': prefix('grid-column-start'),\n 'col-end-': prefix('grid-column-end'),\n\n // Grid row\n 'row-': prefix('grid-row'),\n 'row-start-': prefix('grid-row-start'),\n 'row-end-': prefix('grid-row-end'),\n\n // Grid auto\n 'auto-cols-': prefix('grid-auto-columns'),\n 'auto-rows-': prefix('grid-auto-rows'),\n },\n\n exactMatches: {\n // Flex direction\n 'flex-row': prefix('flex-direction'),\n 'flex-row-reverse': prefix('flex-direction'),\n 'flex-col': prefix('flex-direction'),\n 'flex-col-reverse': prefix('flex-direction'),\n\n // Flex wrap\n 'flex-wrap': prefix('flex-wrap'),\n 'flex-wrap-reverse': prefix('flex-wrap'),\n 'flex-nowrap': prefix('flex-wrap'),\n\n // Flex\n 'flex-1': prefix('flex'),\n 'flex-auto': prefix('flex'),\n 'flex-initial': prefix('flex'),\n 'flex-none': prefix('flex'),\n\n // Grow / Shrink\n grow: prefix('flex-grow'),\n 'grow-0': prefix('flex-grow'),\n shrink: prefix('flex-shrink'),\n 'shrink-0': prefix('flex-shrink'),\n\n // Order\n 'order-none': prefix('order'),\n 'order-first': prefix('order'),\n 'order-last': prefix('order'),\n\n // Grid auto flow\n 'grid-flow-row': prefix('grid-auto-flow'),\n 'grid-flow-col': prefix('grid-auto-flow'),\n 'grid-flow-dense': prefix('grid-auto-flow'),\n 'grid-flow-row-dense': prefix('grid-auto-flow'),\n 'grid-flow-col-dense': prefix('grid-auto-flow'),\n\n // Justify content\n 'justify-normal': prefix('justify-content'),\n 'justify-start': prefix('justify-content'),\n 'justify-end': prefix('justify-content'),\n 'justify-center': prefix('justify-content'),\n 'justify-between': prefix('justify-content'),\n 'justify-around': prefix('justify-content'),\n 'justify-evenly': prefix('justify-content'),\n 'justify-stretch': prefix('justify-content'),\n 'justify-baseline': prefix('justify-content'),\n // Safe alignment\n 'justify-start-safe': prefix('justify-content'),\n 'justify-end-safe': prefix('justify-content'),\n 'justify-center-safe': prefix('justify-content'),\n\n // Justify items\n 'justify-items-start': prefix('justify-items'),\n 'justify-items-end': prefix('justify-items'),\n 'justify-items-center': prefix('justify-items'),\n 'justify-items-stretch': prefix('justify-items'),\n // Safe alignment\n 'justify-items-start-safe': prefix('justify-items'),\n 'justify-items-end-safe': prefix('justify-items'),\n 'justify-items-center-safe': prefix('justify-items'),\n\n // Justify self\n 'justify-self-auto': prefix('justify-self'),\n 'justify-self-start': prefix('justify-self'),\n 'justify-self-end': prefix('justify-self'),\n 'justify-self-center': prefix('justify-self'),\n 'justify-self-stretch': prefix('justify-self'),\n // Safe alignment\n 'justify-self-start-safe': prefix('justify-self'),\n 'justify-self-end-safe': prefix('justify-self'),\n 'justify-self-center-safe': prefix('justify-self'),\n\n // Align content\n 'content-normal': prefix('align-content'),\n 'content-center': prefix('align-content'),\n 'content-start': prefix('align-content'),\n 'content-end': prefix('align-content'),\n 'content-between': prefix('align-content'),\n 'content-around': prefix('align-content'),\n 'content-evenly': prefix('align-content'),\n 'content-baseline': prefix('align-content'),\n 'content-stretch': prefix('align-content'),\n // Safe alignment\n 'content-start-safe': prefix('align-content'),\n 'content-end-safe': prefix('align-content'),\n 'content-center-safe': prefix('align-content'),\n\n // Align items\n 'items-start': prefix('align-items'),\n 'items-end': prefix('align-items'),\n 'items-center': prefix('align-items'),\n 'items-baseline': prefix('align-items'),\n 'items-baseline-last': prefix('align-items'),\n 'items-stretch': prefix('align-items'),\n // Safe alignment\n 'items-start-safe': prefix('align-items'),\n 'items-end-safe': prefix('align-items'),\n 'items-center-safe': prefix('align-items'),\n\n // Align self\n 'self-auto': prefix('align-self'),\n 'self-start': prefix('align-self'),\n 'self-end': prefix('align-self'),\n 'self-center': prefix('align-self'),\n 'self-stretch': prefix('align-self'),\n 'self-baseline': prefix('align-self'),\n // Safe alignment\n 'self-start-safe': prefix('align-self'),\n 'self-end-safe': prefix('align-self'),\n 'self-center-safe': prefix('align-self'),\n\n // Place content\n 'place-content-center': prefix('place-content'),\n 'place-content-start': prefix('place-content'),\n 'place-content-end': prefix('place-content'),\n 'place-content-between': prefix('place-content'),\n 'place-content-around': prefix('place-content'),\n 'place-content-evenly': prefix('place-content'),\n 'place-content-baseline': prefix('place-content'),\n 'place-content-stretch': prefix('place-content'),\n // Safe alignment\n 'place-content-start-safe': prefix('place-content'),\n 'place-content-end-safe': prefix('place-content'),\n 'place-content-center-safe': prefix('place-content'),\n\n // Place items\n 'place-items-start': prefix('place-items'),\n 'place-items-end': prefix('place-items'),\n 'place-items-center': prefix('place-items'),\n 'place-items-baseline': prefix('place-items'),\n 'place-items-stretch': prefix('place-items'),\n // Safe alignment\n 'place-items-start-safe': prefix('place-items'),\n 'place-items-end-safe': prefix('place-items'),\n 'place-items-center-safe': prefix('place-items'),\n\n // Place self\n 'place-self-auto': prefix('place-self'),\n 'place-self-start': prefix('place-self'),\n 'place-self-end': prefix('place-self'),\n 'place-self-center': prefix('place-self'),\n 'place-self-stretch': prefix('place-self'),\n // Safe alignment\n 'place-self-start-safe': prefix('place-self'),\n 'place-self-end-safe': prefix('place-self'),\n 'place-self-center-safe': prefix('place-self'),\n },\n\n patterns: [\n // Arbitrary flex values\n { pattern: /^flex-\\[/, groupId: 'flex', specificity: 1 },\n { pattern: /^grow-\\[/, groupId: 'flex-grow', specificity: 1 },\n { pattern: /^shrink-\\[/, groupId: 'flex-shrink', specificity: 1 },\n ],\n\n conflicts: {\n // Grid column/row have hierarchical conflicts\n 'grid-column': ['grid-column', 'grid-column-start', 'grid-column-end'],\n 'grid-row': ['grid-row', 'grid-row-start', 'grid-row-end'],\n ...simpleConflicts(\n 'flex-basis', 'flex-direction', 'flex-wrap', 'flex', 'flex-grow', 'flex-shrink',\n 'order', 'grid-template-columns', 'grid-template-rows',\n 'grid-column-start', 'grid-column-end', 'grid-row-start', 'grid-row-end',\n 'grid-auto-flow', 'grid-auto-columns', 'grid-auto-rows',\n 'justify-content', 'justify-items', 'justify-self',\n 'align-content', 'align-items', 'align-self',\n 'place-content', 'place-items', 'place-self'\n ),\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix } from './types'\n\n/**\n * Typography-related class groups: font, text, leading, tracking, etc.\n */\n\nexport const typographyGroups: ClassGroupConfig = {\n prefixes: {\n // Letter spacing\n 'tracking-': prefix('letter-spacing'),\n\n // Line height\n 'leading-': prefix('line-height'),\n\n // Line clamp\n 'line-clamp-': prefix('line-clamp'),\n\n // Text indent\n 'indent-': prefix('text-indent'),\n\n // List image\n 'list-image-': prefix('list-image'),\n\n // Text decoration\n 'decoration-': prefix('text-decoration-color'), // Refined by exact matches\n\n // Underline offset\n 'underline-offset-': prefix('text-underline-offset'),\n\n // Content\n 'content-': prefix('content'),\n },\n\n exactMatches: {\n // Font family\n 'font-sans': prefix('font-family'),\n 'font-serif': prefix('font-family'),\n 'font-mono': prefix('font-family'),\n\n // Font size\n 'text-xs': prefix('font-size'),\n 'text-sm': prefix('font-size'),\n 'text-base': prefix('font-size'),\n 'text-lg': prefix('font-size'),\n 'text-xl': prefix('font-size'),\n 'text-2xl': prefix('font-size'),\n 'text-3xl': prefix('font-size'),\n 'text-4xl': prefix('font-size'),\n 'text-5xl': prefix('font-size'),\n 'text-6xl': prefix('font-size'),\n 'text-7xl': prefix('font-size'),\n 'text-8xl': prefix('font-size'),\n 'text-9xl': prefix('font-size'),\n\n // Font smoothing\n antialiased: prefix('font-smoothing'),\n 'subpixel-antialiased': prefix('font-smoothing'),\n\n // Font style\n italic: prefix('font-style'),\n 'not-italic': prefix('font-style'),\n\n // Font weight\n 'font-thin': prefix('font-weight'),\n 'font-extralight': prefix('font-weight'),\n 'font-light': prefix('font-weight'),\n 'font-normal': prefix('font-weight'),\n 'font-medium': prefix('font-weight'),\n 'font-semibold': prefix('font-weight'),\n 'font-bold': prefix('font-weight'),\n 'font-extrabold': prefix('font-weight'),\n 'font-black': prefix('font-weight'),\n\n // Font variant numeric\n 'normal-nums': prefix('font-variant-numeric'),\n ordinal: prefix('font-variant-numeric'),\n 'slashed-zero': prefix('font-variant-numeric'),\n 'lining-nums': prefix('font-variant-numeric'),\n 'oldstyle-nums': prefix('font-variant-numeric'),\n 'proportional-nums': prefix('font-variant-numeric'),\n 'tabular-nums': prefix('font-variant-numeric'),\n 'diagonal-fractions': prefix('font-variant-numeric'),\n 'stacked-fractions': prefix('font-variant-numeric'),\n\n // Font stretch\n 'font-stretch-normal': prefix('font-stretch'),\n 'font-stretch-ultra-condensed': prefix('font-stretch'),\n 'font-stretch-extra-condensed': prefix('font-stretch'),\n 'font-stretch-condensed': prefix('font-stretch'),\n 'font-stretch-semi-condensed': prefix('font-stretch'),\n 'font-stretch-semi-expanded': prefix('font-stretch'),\n 'font-stretch-expanded': prefix('font-stretch'),\n 'font-stretch-extra-expanded': prefix('font-stretch'),\n 'font-stretch-ultra-expanded': prefix('font-stretch'),\n\n // List style position\n 'list-inside': prefix('list-style-position'),\n 'list-outside': prefix('list-style-position'),\n\n // List style type\n 'list-none': prefix('list-style-type'),\n 'list-disc': prefix('list-style-type'),\n 'list-decimal': prefix('list-style-type'),\n\n // Text align\n 'text-left': prefix('text-align'),\n 'text-center': prefix('text-align'),\n 'text-right': prefix('text-align'),\n 'text-justify': prefix('text-align'),\n 'text-start': prefix('text-align'),\n 'text-end': prefix('text-align'),\n\n // Text decoration\n underline: prefix('text-decoration'),\n overline: prefix('text-decoration'),\n 'line-through': prefix('text-decoration'),\n 'no-underline': prefix('text-decoration'),\n\n // Text decoration style\n 'decoration-solid': prefix('text-decoration-style'),\n 'decoration-double': prefix('text-decoration-style'),\n 'decoration-dotted': prefix('text-decoration-style'),\n 'decoration-dashed': prefix('text-decoration-style'),\n 'decoration-wavy': prefix('text-decoration-style'),\n\n // Text decoration thickness\n 'decoration-auto': prefix('text-decoration-thickness'),\n 'decoration-from-font': prefix('text-decoration-thickness'),\n 'decoration-0': prefix('text-decoration-thickness'),\n 'decoration-1': prefix('text-decoration-thickness'),\n 'decoration-2': prefix('text-decoration-thickness'),\n 'decoration-4': prefix('text-decoration-thickness'),\n 'decoration-8': prefix('text-decoration-thickness'),\n\n // Text transform\n uppercase: prefix('text-transform'),\n lowercase: prefix('text-transform'),\n capitalize: prefix('text-transform'),\n 'normal-case': prefix('text-transform'),\n\n // Text overflow\n truncate: prefix('text-overflow'),\n 'text-ellipsis': prefix('text-overflow'),\n 'text-clip': prefix('text-overflow'),\n\n // Text wrap\n 'text-wrap': prefix('text-wrap'),\n 'text-nowrap': prefix('text-wrap'),\n 'text-balance': prefix('text-wrap'),\n 'text-pretty': prefix('text-wrap'),\n\n // Vertical align\n 'align-baseline': prefix('vertical-align'),\n 'align-top': prefix('vertical-align'),\n 'align-middle': prefix('vertical-align'),\n 'align-bottom': prefix('vertical-align'),\n 'align-text-top': prefix('vertical-align'),\n 'align-text-bottom': prefix('vertical-align'),\n 'align-sub': prefix('vertical-align'),\n 'align-super': prefix('vertical-align'),\n\n // Whitespace\n 'whitespace-normal': prefix('whitespace'),\n 'whitespace-nowrap': prefix('whitespace'),\n 'whitespace-pre': prefix('whitespace'),\n 'whitespace-pre-line': prefix('whitespace'),\n 'whitespace-pre-wrap': prefix('whitespace'),\n 'whitespace-break-spaces': prefix('whitespace'),\n\n // Word break\n 'break-normal': prefix('word-break'),\n 'break-words': prefix('word-break'),\n 'break-all': prefix('word-break'),\n 'break-keep': prefix('word-break'),\n\n // Hyphens\n 'hyphens-none': prefix('hyphens'),\n 'hyphens-manual': prefix('hyphens'),\n 'hyphens-auto': prefix('hyphens'),\n\n // Overflow wrap\n 'wrap-normal': prefix('overflow-wrap'),\n 'wrap-break-word': prefix('overflow-wrap'),\n 'wrap-anywhere': prefix('overflow-wrap'),\n },\n\n patterns: [\n // Font family arbitrary\n { pattern: /^font-\\[/, groupId: 'font-family', specificity: 1 },\n // Font weight numeric\n { pattern: /^font-\\d+$/, groupId: 'font-weight', specificity: 1 },\n // Tracking arbitrary\n { pattern: /^tracking-\\[/, groupId: 'letter-spacing', specificity: 1 },\n // Leading arbitrary\n { pattern: /^leading-\\[/, groupId: 'line-height', specificity: 1 },\n // List style arbitrary\n { pattern: /^list-\\[/, groupId: 'list-style-type', specificity: 1 },\n // Decoration arbitrary\n { pattern: /^decoration-\\[/, groupId: 'text-decoration-thickness', specificity: 1 },\n ],\n\n conflicts: {\n 'font-family': ['font-family'],\n 'font-size': ['font-size'],\n 'font-smoothing': ['font-smoothing'],\n 'font-style': ['font-style'],\n 'font-weight': ['font-weight'],\n 'font-variant-numeric': ['font-variant-numeric'],\n 'font-stretch': ['font-stretch'],\n 'letter-spacing': ['letter-spacing'],\n 'line-height': ['line-height'],\n 'line-clamp': ['line-clamp'],\n 'list-image': ['list-image'],\n 'list-style-position': ['list-style-position'],\n 'list-style-type': ['list-style-type'],\n 'text-align': ['text-align'],\n 'text-decoration': ['text-decoration'],\n 'text-decoration-color': ['text-decoration-color'],\n 'text-decoration-style': ['text-decoration-style'],\n 'text-decoration-thickness': ['text-decoration-thickness'],\n 'text-underline-offset': ['text-underline-offset'],\n 'text-transform': ['text-transform'],\n 'text-overflow': ['text-overflow'],\n 'text-wrap': ['text-wrap'],\n 'text-indent': ['text-indent'],\n 'vertical-align': ['vertical-align'],\n whitespace: ['whitespace'],\n 'word-break': ['word-break'],\n hyphens: ['hyphens'],\n 'overflow-wrap': ['overflow-wrap'],\n content: ['content'],\n },\n}\n","import type { ClassGroupConfig, PrefixEntry } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n// Color palette names used in Tailwind\nconst COLOR_NAMES = [\n 'slate', 'gray', 'zinc', 'neutral', 'stone',\n 'red', 'orange', 'amber', 'yellow', 'lime',\n 'green', 'emerald', 'teal', 'cyan', 'sky',\n 'blue', 'indigo', 'violet', 'purple', 'fuchsia',\n 'pink', 'rose',\n]\n\n// Special color values\nconst SPECIAL_COLORS = ['inherit', 'current', 'transparent', 'black', 'white']\n\n/**\n * Creates trie prefixes for all color names with a given prefix.\n * This replaces regex patterns with O(k) trie lookups.\n *\n * @example\n * createColorPrefixes('text-', 'text-color')\n * // → { 'text-red-': {...}, 'text-blue-': {...}, ... }\n */\n\nfunction createColorPrefixes(prefixStr: string, groupId: string): Record<string, PrefixEntry> {\n const prefixes: Record<string, PrefixEntry> = {}\n\n // Add color palette prefixes (e.g., text-red-, text-blue-)\n for (const color of COLOR_NAMES) {\n prefixes[`${prefixStr}${color}-`] = prefix(groupId)\n }\n\n // Add arbitrary value prefix (e.g., text-[)\n prefixes[`${prefixStr}[`] = prefix(groupId)\n\n return prefixes\n}\n\n/**\n * Creates exact matches for special colors.\n */\n\nfunction createSpecialColorMatches(prefixStr: string, groupId: string): Record<string, PrefixEntry> {\n const matches: Record<string, PrefixEntry> = {}\n for (const color of SPECIAL_COLORS) {\n matches[`${prefixStr}${color}`] = prefix(groupId)\n }\n return matches\n}\n\n// Color utility definitions: [prefix, groupId]\nconst COLOR_UTILITIES: [string, string][] = [\n ['text-', 'text-color'],\n ['bg-', 'bg-color'],\n ['border-', 'border-color'],\n ['outline-', 'outline-color'],\n ['ring-', 'ring-color'],\n ['ring-offset-', 'ring-offset-color'],\n ['divide-', 'divide-color'],\n ['accent-', 'accent-color'],\n ['caret-', 'caret-color'],\n ['fill-', 'fill'],\n ['stroke-', 'stroke'],\n ['shadow-', 'box-shadow-color'],\n ['placeholder-', 'placeholder-color'],\n ['from-', 'gradient-from'],\n ['via-', 'gradient-via'],\n ['to-', 'gradient-to'],\n]\n\n// Generate all prefixes from color utilities\nfunction generateAllColorPrefixes(): Record<string, PrefixEntry> {\n const prefixes: Record<string, PrefixEntry> = {}\n for (const [utilityPrefix, groupId] of COLOR_UTILITIES) {\n Object.assign(prefixes, createColorPrefixes(utilityPrefix, groupId))\n }\n return prefixes\n}\n\n// Special color utilities that need exact matches for inherit/current/transparent/black/white\nconst SPECIAL_COLOR_UTILITIES: [string, string][] = [\n ['text-', 'text-color'],\n ['bg-', 'bg-color'],\n ['border-', 'border-color'],\n ['outline-', 'outline-color'],\n ['ring-', 'ring-color'],\n]\n\nfunction generateSpecialColorMatches(): Record<string, PrefixEntry> {\n const matches: Record<string, PrefixEntry> = {}\n for (const [utilityPrefix, groupId] of SPECIAL_COLOR_UTILITIES) {\n Object.assign(matches, createSpecialColorMatches(utilityPrefix, groupId))\n }\n return matches\n}\n\n/**\n * Color-related class groups: text color, background color, border color, etc.\n * Uses trie prefixes for O(k) classification instead of O(n*p) regex matching.\n */\n\nexport const colorGroups: ClassGroupConfig = {\n prefixes: generateAllColorPrefixes(),\n\n exactMatches: {\n ...generateSpecialColorMatches(),\n // Gradient stop reset\n 'via-none': prefix('gradient-via'),\n },\n\n // No patterns needed - all handled by prefixes now\n patterns: [],\n\n conflicts: simpleConflicts(\n 'text-color', 'bg-color', 'border-color', 'outline-color',\n 'ring-color', 'ring-offset-color', 'divide-color', 'accent-color',\n 'caret-color', 'fill', 'stroke', 'box-shadow-color', 'placeholder-color',\n 'gradient-from', 'gradient-via', 'gradient-to'\n ),\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix } from './types'\n\n/**\n * Background-related class groups (non-color): attachment, clip, origin, position, repeat, size, image.\n */\n\nexport const backgroundGroups: ClassGroupConfig = {\n prefixes: {\n // Background image - gradient directions\n 'bg-gradient-to-': prefix('bg-image'),\n\n // Background image - gradient types (v4)\n 'bg-linear-': prefix('bg-image'),\n '-bg-linear-': prefix('bg-image'),\n 'bg-radial-': prefix('bg-image'),\n 'bg-conic-': prefix('bg-image'),\n '-bg-conic-': prefix('bg-image'),\n },\n\n exactMatches: {\n // Background attachment\n 'bg-fixed': prefix('bg-attachment'),\n 'bg-local': prefix('bg-attachment'),\n 'bg-scroll': prefix('bg-attachment'),\n\n // Background clip\n 'bg-clip-border': prefix('bg-clip'),\n 'bg-clip-padding': prefix('bg-clip'),\n 'bg-clip-content': prefix('bg-clip'),\n 'bg-clip-text': prefix('bg-clip'),\n\n // Background origin\n 'bg-origin-border': prefix('bg-origin'),\n 'bg-origin-padding': prefix('bg-origin'),\n 'bg-origin-content': prefix('bg-origin'),\n\n // Background position\n 'bg-bottom': prefix('bg-position'),\n 'bg-center': prefix('bg-position'),\n 'bg-left': prefix('bg-position'),\n 'bg-left-bottom': prefix('bg-position'),\n 'bg-left-top': prefix('bg-position'),\n 'bg-right': prefix('bg-position'),\n 'bg-right-bottom': prefix('bg-position'),\n 'bg-right-top': prefix('bg-position'),\n 'bg-top': prefix('bg-position'),\n\n // Background repeat\n 'bg-repeat': prefix('bg-repeat'),\n 'bg-no-repeat': prefix('bg-repeat'),\n 'bg-repeat-x': prefix('bg-repeat'),\n 'bg-repeat-y': prefix('bg-repeat'),\n 'bg-repeat-round': prefix('bg-repeat'),\n 'bg-repeat-space': prefix('bg-repeat'),\n\n // Background size\n 'bg-auto': prefix('bg-size'),\n 'bg-cover': prefix('bg-size'),\n 'bg-contain': prefix('bg-size'),\n\n // Background image\n 'bg-none': prefix('bg-image'),\n },\n\n patterns: [\n // Background position arbitrary\n { pattern: /^bg-\\[position:/, groupId: 'bg-position', specificity: 1 },\n // Background size arbitrary\n { pattern: /^bg-\\[size:/, groupId: 'bg-size', specificity: 1 },\n // Background image url\n { pattern: /^bg-\\[url/, groupId: 'bg-image', specificity: 1 },\n ],\n\n conflicts: {\n 'bg-attachment': ['bg-attachment'],\n 'bg-clip': ['bg-clip'],\n 'bg-origin': ['bg-origin'],\n 'bg-position': ['bg-position'],\n 'bg-repeat': ['bg-repeat'],\n 'bg-size': ['bg-size'],\n 'bg-image': ['bg-image'],\n },\n}\n","import type { ClassGroupConfig, ConflictMap } from './types'\nimport { prefix, SPECIFICITY, generateConflicts, simpleConflicts } from './types'\n\n// Hierarchies for auto-generating conflicts\nconst BORDER_WIDTH_HIERARCHY = {\n 'border-width': { x: ['l', 'r', 's', 'e'], y: ['t', 'b'] },\n 'border-spacing': { x: [], y: [] },\n}\n\n/**\n * Generates border-radius conflicts with quadrant support.\n * Border radius has a unique pattern: corners conflict with both adjacent sides.\n */\n\nfunction borderRadiusConflicts(): ConflictMap {\n const base = 'border-radius'\n const sides = ['t', 'r', 'b', 'l', 's', 'e']\n const corners: Record<string, string[]> = {\n tl: ['t', 'l'],\n tr: ['t', 'r'],\n br: ['b', 'r'],\n bl: ['b', 'l'],\n ss: ['s'],\n se: ['s', 'e'],\n es: ['e', 's'],\n ee: ['e'],\n }\n\n const allGroups = [base, ...sides.map(s => `${base}-${s}`), ...Object.keys(corners).map(c => `${base}-${c}`)]\n const conflicts: ConflictMap = {}\n\n // Base conflicts with everything\n conflicts[base] = allGroups\n\n // Each side conflicts with base, itself, and its corners\n for (const side of sides) {\n const sideGroup = `${base}-${side}`\n const cornersOnSide = Object.entries(corners)\n .filter(([_, adjSides]) => adjSides.includes(side))\n .map(([corner]) => `${base}-${corner}`)\n conflicts[sideGroup] = [base, sideGroup, ...cornersOnSide]\n }\n\n // Each corner conflicts with base, its adjacent sides, and itself\n for (const [corner, adjSides] of Object.entries(corners)) {\n const cornerGroup = `${base}-${corner}`\n conflicts[cornerGroup] = [base, ...adjSides.map(s => `${base}-${s}`), cornerGroup]\n }\n\n return conflicts\n}\n\n/**\n * Border-related class groups: width, style, radius, divide, outline, ring.\n */\n\nexport const borderGroups: ClassGroupConfig = {\n prefixes: {\n // Border radius\n 'rounded-': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-t-': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-r-': prefix('border-radius-r', SPECIFICITY.AXIS),\n 'rounded-b-': prefix('border-radius-b', SPECIFICITY.AXIS),\n 'rounded-l-': prefix('border-radius-l', SPECIFICITY.AXIS),\n 'rounded-tl-': prefix('border-radius-tl', SPECIFICITY.SIDE),\n 'rounded-tr-': prefix('border-radius-tr', SPECIFICITY.SIDE),\n 'rounded-br-': prefix('border-radius-br', SPECIFICITY.SIDE),\n 'rounded-bl-': prefix('border-radius-bl', SPECIFICITY.SIDE),\n 'rounded-s-': prefix('border-radius-s', SPECIFICITY.AXIS),\n 'rounded-e-': prefix('border-radius-e', SPECIFICITY.AXIS),\n 'rounded-ss-': prefix('border-radius-ss', SPECIFICITY.SIDE),\n 'rounded-se-': prefix('border-radius-se', SPECIFICITY.SIDE),\n 'rounded-es-': prefix('border-radius-es', SPECIFICITY.SIDE),\n 'rounded-ee-': prefix('border-radius-ee', SPECIFICITY.SIDE),\n\n // Border width (handled by exact matches mostly, but prefix for arbitrary)\n 'border-x-': prefix('border-width-x', SPECIFICITY.AXIS),\n 'border-y-': prefix('border-width-y', SPECIFICITY.AXIS),\n 'border-t-': prefix('border-width-t', SPECIFICITY.SIDE),\n 'border-r-': prefix('border-width-r', SPECIFICITY.SIDE),\n 'border-b-': prefix('border-width-b', SPECIFICITY.SIDE),\n 'border-l-': prefix('border-width-l', SPECIFICITY.SIDE),\n 'border-s-': prefix('border-width-s', SPECIFICITY.SIDE),\n 'border-e-': prefix('border-width-e', SPECIFICITY.SIDE),\n\n // Border spacing\n 'border-spacing-': prefix('border-spacing', SPECIFICITY.ALL),\n 'border-spacing-x-': prefix('border-spacing-x', SPECIFICITY.AXIS),\n 'border-spacing-y-': prefix('border-spacing-y', SPECIFICITY.AXIS),\n\n // Divide\n 'divide-x-': prefix('divide-x'),\n 'divide-y-': prefix('divide-y'),\n\n // Outline\n 'outline-offset-': prefix('outline-offset'),\n\n // Ring\n 'ring-offset-': prefix('ring-offset-width'),\n },\n\n exactMatches: {\n // Border radius exact\n rounded: prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-none': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-sm': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-md': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-lg': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-xl': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-2xl': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-3xl': prefix('border-radius', SPECIFICITY.ALL),\n 'rounded-full': prefix('border-radius', SPECIFICITY.ALL),\n\n 'rounded-t': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-none': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-sm': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-md': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-lg': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-xl': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-2xl': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-3xl': prefix('border-radius-t', SPECIFICITY.AXIS),\n 'rounded-t-full': prefix('border-radius-t', SPECIFICITY.AXIS),\n\n 'rounded-r': prefix('border-radius-r', SPECIFICITY.AXIS),\n 'rounded-b': prefix('border-radius-b', SPECIFICITY.AXIS),\n 'rounded-l': prefix('border-radius-l', SPECIFICITY.AXIS),\n 'rounded-s': prefix('border-radius-s', SPECIFICITY.AXIS),\n 'rounded-e': prefix('border-radius-e', SPECIFICITY.AXIS),\n\n 'rounded-tl': prefix('border-radius-tl', SPECIFICITY.SIDE),\n 'rounded-tr': prefix('border-radius-tr', SPECIFICITY.SIDE),\n 'rounded-br': prefix('border-radius-br', SPECIFICITY.SIDE),\n 'rounded-bl': prefix('border-radius-bl', SPECIFICITY.SIDE),\n\n // Border width\n border: prefix('border-width', SPECIFICITY.ALL),\n 'border-0': prefix('border-width', SPECIFICITY.ALL),\n 'border-2': prefix('border-width', SPECIFICITY.ALL),\n 'border-4': prefix('border-width', SPECIFICITY.ALL),\n 'border-8': prefix('border-width', SPECIFICITY.ALL),\n\n 'border-x': prefix('border-width-x', SPECIFICITY.AXIS),\n 'border-x-0': prefix('border-width-x', SPECIFICITY.AXIS),\n 'border-x-2': prefix('border-width-x', SPECIFICITY.AXIS),\n 'border-x-4': prefix('border-width-x', SPECIFICITY.AXIS),\n 'border-x-8': prefix('border-width-x', SPECIFICITY.AXIS),\n\n 'border-y': prefix('border-width-y', SPECIFICITY.AXIS),\n 'border-y-0': prefix('border-width-y', SPECIFICITY.AXIS),\n 'border-y-2': prefix('border-width-y', SPECIFICITY.AXIS),\n 'border-y-4': prefix('border-width-y', SPECIFICITY.AXIS),\n 'border-y-8': prefix('border-width-y', SPECIFICITY.AXIS),\n\n 'border-t': prefix('border-width-t', SPECIFICITY.SIDE),\n 'border-t-0': prefix('border-width-t', SPECIFICITY.SIDE),\n 'border-t-2': prefix('border-width-t', SPECIFICITY.SIDE),\n 'border-t-4': prefix('border-width-t', SPECIFICITY.SIDE),\n 'border-t-8': prefix('border-width-t', SPECIFICITY.SIDE),\n\n 'border-r': prefix('border-width-r', SPECIFICITY.SIDE),\n 'border-b': prefix('border-width-b', SPECIFICITY.SIDE),\n 'border-l': prefix('border-width-l', SPECIFICITY.SIDE),\n 'border-s': prefix('border-width-s', SPECIFICITY.SIDE),\n 'border-e': prefix('border-width-e', SPECIFICITY.SIDE),\n\n // Border style\n 'border-solid': prefix('border-style'),\n 'border-dashed': prefix('border-style'),\n 'border-dotted': prefix('border-style'),\n 'border-double': prefix('border-style'),\n 'border-hidden': prefix('border-style'),\n 'border-none': prefix('border-style'),\n\n // Border collapse\n 'border-collapse': prefix('border-collapse'),\n 'border-separate': prefix('border-collapse'),\n\n // Divide style\n 'divide-solid': prefix('divide-style'),\n 'divide-dashed': prefix('divide-style'),\n 'divide-dotted': prefix('divide-style'),\n 'divide-double': prefix('divide-style'),\n 'divide-none': prefix('divide-style'),\n\n // Divide reverse\n 'divide-x-reverse': prefix('divide-x-reverse'),\n 'divide-y-reverse': prefix('divide-y-reverse'),\n\n // Outline style\n outline: prefix('outline-style'),\n 'outline-none': prefix('outline-style'),\n 'outline-hidden': prefix('outline-style'),\n 'outline-dashed': prefix('outline-style'),\n 'outline-dotted': prefix('outline-style'),\n 'outline-double': prefix('outline-style'),\n\n // Outline width (must be exact to avoid conflicting with outline-color)\n 'outline-0': prefix('outline-width'),\n 'outline-1': prefix('outline-width'),\n 'outline-2': prefix('outline-width'),\n 'outline-4': prefix('outline-width'),\n 'outline-8': prefix('outline-width'),\n\n // Ring width\n ring: prefix('ring-width'),\n 'ring-0': prefix('ring-width'),\n 'ring-1': prefix('ring-width'),\n 'ring-2': prefix('ring-width'),\n 'ring-4': prefix('ring-width'),\n 'ring-8': prefix('ring-width'),\n 'ring-inset': prefix('ring-width'),\n },\n\n patterns: [\n // Border width arbitrary\n { pattern: /^border-\\[\\d/, groupId: 'border-width', specificity: SPECIFICITY.ALL },\n { pattern: /^border-\\d+$/, groupId: 'border-width', specificity: SPECIFICITY.ALL },\n // Rounded arbitrary\n { pattern: /^rounded-\\[/, groupId: 'border-radius', specificity: SPECIFICITY.ALL },\n // Outline width\n { pattern: /^outline-\\d+$/, groupId: 'outline-width', specificity: 1 },\n { pattern: /^outline-\\[.*px/, groupId: 'outline-width', specificity: 1 },\n // Ring arbitrary\n { pattern: /^ring-\\[/, groupId: 'ring-width', specificity: 1 },\n // Ring offset arbitrary\n { pattern: /^ring-offset-\\d+$/, groupId: 'ring-offset-width', specificity: 1 },\n { pattern: /^ring-offset-\\[/, groupId: 'ring-offset-width', specificity: 1 },\n ],\n\n conflicts: {\n ...borderRadiusConflicts(),\n ...generateConflicts(BORDER_WIDTH_HIERARCHY),\n ...simpleConflicts(\n 'border-style', 'border-collapse',\n 'divide-x', 'divide-y', 'divide-style', 'divide-x-reverse', 'divide-y-reverse',\n 'outline-style', 'outline-width', 'outline-offset',\n 'ring-width', 'ring-offset-width'\n ),\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n/**\n * Effects class groups: shadow, opacity, blend modes, filters.\n */\n\nexport const effectsGroups: ClassGroupConfig = {\n prefixes: {\n // Opacity\n 'opacity-': prefix('opacity'),\n\n // Inset shadow (arbitrary)\n 'inset-shadow-': prefix('inset-shadow'),\n\n // Inset ring (arbitrary)\n 'inset-ring-': prefix('inset-ring'),\n\n // Text shadow (arbitrary)\n 'text-shadow-': prefix('text-shadow'),\n\n // Mix blend\n 'mix-blend-': prefix('mix-blend-mode'),\n\n // Background blend\n 'bg-blend-': prefix('bg-blend-mode'),\n\n // Filter values\n 'brightness-': prefix('brightness'),\n 'contrast-': prefix('contrast'),\n 'saturate-': prefix('saturate'),\n 'hue-rotate-': prefix('hue-rotate'),\n '-hue-rotate-': prefix('hue-rotate'),\n\n // Backdrop filter values\n 'backdrop-brightness-': prefix('backdrop-brightness'),\n 'backdrop-contrast-': prefix('backdrop-contrast'),\n 'backdrop-saturate-': prefix('backdrop-saturate'),\n 'backdrop-hue-rotate-': prefix('backdrop-hue-rotate'),\n '-backdrop-hue-rotate-': prefix('backdrop-hue-rotate'),\n 'backdrop-opacity-': prefix('backdrop-opacity'),\n },\n\n exactMatches: {\n // Box shadow\n shadow: prefix('box-shadow'),\n 'shadow-sm': prefix('box-shadow'),\n 'shadow-md': prefix('box-shadow'),\n 'shadow-lg': prefix('box-shadow'),\n 'shadow-xl': prefix('box-shadow'),\n 'shadow-2xl': prefix('box-shadow'),\n 'shadow-inner': prefix('box-shadow'),\n 'shadow-none': prefix('box-shadow'),\n\n // Inset shadow\n 'inset-shadow': prefix('inset-shadow'),\n 'inset-shadow-xs': prefix('inset-shadow'),\n 'inset-shadow-sm': prefix('inset-shadow'),\n 'inset-shadow-md': prefix('inset-shadow'),\n 'inset-shadow-lg': prefix('inset-shadow'),\n 'inset-shadow-none': prefix('inset-shadow'),\n\n // Inset ring\n 'inset-ring': prefix('inset-ring'),\n 'inset-ring-0': prefix('inset-ring'),\n 'inset-ring-1': prefix('inset-ring'),\n 'inset-ring-2': prefix('inset-ring'),\n 'inset-ring-4': prefix('inset-ring'),\n 'inset-ring-8': prefix('inset-ring'),\n\n // Text shadow\n 'text-shadow': prefix('text-shadow'),\n 'text-shadow-sm': prefix('text-shadow'),\n 'text-shadow-md': prefix('text-shadow'),\n 'text-shadow-lg': prefix('text-shadow'),\n 'text-shadow-none': prefix('text-shadow'),\n\n // Box decoration break\n 'box-decoration-clone': prefix('box-decoration-break'),\n 'box-decoration-slice': prefix('box-decoration-break'),\n\n // Filter\n filter: prefix('filter'),\n 'filter-none': prefix('filter'),\n\n // Blur\n blur: prefix('blur'),\n 'blur-none': prefix('blur'),\n 'blur-sm': prefix('blur'),\n 'blur-md': prefix('blur'),\n 'blur-lg': prefix('blur'),\n 'blur-xl': prefix('blur'),\n 'blur-2xl': prefix('blur'),\n 'blur-3xl': prefix('blur'),\n\n // Drop shadow\n 'drop-shadow': prefix('drop-shadow'),\n 'drop-shadow-sm': prefix('drop-shadow'),\n 'drop-shadow-md': prefix('drop-shadow'),\n 'drop-shadow-lg': prefix('drop-shadow'),\n 'drop-shadow-xl': prefix('drop-shadow'),\n 'drop-shadow-2xl': prefix('drop-shadow'),\n 'drop-shadow-none': prefix('drop-shadow'),\n\n // Grayscale\n grayscale: prefix('grayscale'),\n 'grayscale-0': prefix('grayscale'),\n\n // Invert\n invert: prefix('invert'),\n 'invert-0': prefix('invert'),\n\n // Sepia\n sepia: prefix('sepia'),\n 'sepia-0': prefix('sepia'),\n\n // Backdrop filter\n 'backdrop-filter': prefix('backdrop-filter'),\n 'backdrop-filter-none': prefix('backdrop-filter'),\n\n // Backdrop blur\n 'backdrop-blur': prefix('backdrop-blur'),\n 'backdrop-blur-none': prefix('backdrop-blur'),\n 'backdrop-blur-sm': prefix('backdrop-blur'),\n 'backdrop-blur-md': prefix('backdrop-blur'),\n 'backdrop-blur-lg': prefix('backdrop-blur'),\n 'backdrop-blur-xl': prefix('backdrop-blur'),\n 'backdrop-blur-2xl': prefix('backdrop-blur'),\n 'backdrop-blur-3xl': prefix('backdrop-blur'),\n\n // Backdrop grayscale\n 'backdrop-grayscale': prefix('backdrop-grayscale'),\n 'backdrop-grayscale-0': prefix('backdrop-grayscale'),\n\n // Backdrop invert\n 'backdrop-invert': prefix('backdrop-invert'),\n 'backdrop-invert-0': prefix('backdrop-invert'),\n\n // Backdrop sepia\n 'backdrop-sepia': prefix('backdrop-sepia'),\n 'backdrop-sepia-0': prefix('backdrop-sepia'),\n },\n\n patterns: [\n // Shadow arbitrary\n { pattern: /^shadow-\\[/, groupId: 'box-shadow', specificity: 1 },\n // Inset shadow arbitrary\n { pattern: /^inset-shadow-\\[/, groupId: 'inset-shadow', specificity: 1 },\n // Inset ring arbitrary\n { pattern: /^inset-ring-\\[/, groupId: 'inset-ring', specificity: 1 },\n // Text shadow arbitrary\n { pattern: /^text-shadow-\\[/, groupId: 'text-shadow', specificity: 1 },\n // Blur arbitrary\n { pattern: /^blur-\\[/, groupId: 'blur', specificity: 1 },\n // Drop shadow arbitrary\n { pattern: /^drop-shadow-\\[/, groupId: 'drop-shadow', specificity: 1 },\n // Backdrop blur arbitrary\n { pattern: /^backdrop-blur-\\[/, groupId: 'backdrop-blur', specificity: 1 },\n ],\n\n conflicts: simpleConflicts(\n 'box-shadow', 'box-shadow-color',\n 'inset-shadow', 'inset-shadow-color',\n 'inset-ring', 'inset-ring-color',\n 'text-shadow', 'text-shadow-color',\n 'box-decoration-break', 'opacity', 'mix-blend-mode', 'bg-blend-mode',\n 'filter', 'blur', 'brightness', 'contrast', 'drop-shadow',\n 'grayscale', 'hue-rotate', 'invert', 'saturate', 'sepia',\n 'backdrop-filter', 'backdrop-blur', 'backdrop-brightness', 'backdrop-contrast',\n 'backdrop-grayscale', 'backdrop-hue-rotate', 'backdrop-invert',\n 'backdrop-opacity', 'backdrop-saturate', 'backdrop-sepia'\n ),\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, SPECIFICITY, simpleConflicts } from './types'\n\n/**\n * Transform class groups: scale, rotate, translate, skew, origin, perspective.\n * Includes 2D and 3D transforms.\n */\n\nexport const transformGroups: ClassGroupConfig = {\n prefixes: {\n // Scale (2D)\n 'scale-': prefix('scale', SPECIFICITY.ALL),\n '-scale-': prefix('scale', SPECIFICITY.ALL),\n 'scale-x-': prefix('scale-x', SPECIFICITY.AXIS),\n '-scale-x-': prefix('scale-x', SPECIFICITY.AXIS),\n 'scale-y-': prefix('scale-y', SPECIFICITY.AXIS),\n '-scale-y-': prefix('scale-y', SPECIFICITY.AXIS),\n // Scale (3D)\n 'scale-z-': prefix('scale-z', SPECIFICITY.AXIS),\n '-scale-z-': prefix('scale-z', SPECIFICITY.AXIS),\n\n // Rotate (2D - default Z-axis)\n 'rotate-': prefix('rotate'),\n '-rotate-': prefix('rotate'),\n // Rotate (3D axes)\n 'rotate-x-': prefix('rotate-x'),\n '-rotate-x-': prefix('rotate-x'),\n 'rotate-y-': prefix('rotate-y'),\n '-rotate-y-': prefix('rotate-y'),\n 'rotate-z-': prefix('rotate-z'),\n '-rotate-z-': prefix('rotate-z'),\n\n // Translate (2D)\n 'translate-': prefix('translate', SPECIFICITY.ALL),\n '-translate-': prefix('translate', SPECIFICITY.ALL),\n 'translate-x-': prefix('translate-x', SPECIFICITY.AXIS),\n '-translate-x-': prefix('translate-x', SPECIFICITY.AXIS),\n 'translate-y-': prefix('translate-y', SPECIFICITY.AXIS),\n '-translate-y-': prefix('translate-y', SPECIFICITY.AXIS),\n // Translate (3D)\n 'translate-z-': prefix('translate-z', SPECIFICITY.AXIS),\n '-translate-z-': prefix('translate-z', SPECIFICITY.AXIS),\n\n // Skew\n 'skew-x-': prefix('skew-x'),\n '-skew-x-': prefix('skew-x'),\n 'skew-y-': prefix('skew-y'),\n '-skew-y-': prefix('skew-y'),\n\n // Transform origin\n 'origin-': prefix('transform-origin'),\n\n // Perspective\n 'perspective-': prefix('perspective'),\n\n // Perspective origin\n 'perspective-origin-': prefix('perspective-origin'),\n },\n\n exactMatches: {\n // Transform\n transform: prefix('transform'),\n 'transform-cpu': prefix('transform'),\n 'transform-gpu': prefix('transform'),\n 'transform-none': prefix('transform'),\n\n // Transform style (3D)\n 'transform-3d': prefix('transform-style'),\n 'transform-flat': prefix('transform-style'),\n\n // Backface visibility\n 'backface-visible': prefix('backface-visibility'),\n 'backface-hidden': prefix('backface-visibility'),\n\n // Perspective none\n 'perspective-none': prefix('perspective'),\n\n // Transform box\n 'transform-box-content': prefix('transform-box'),\n 'transform-box-border': prefix('transform-box'),\n 'transform-box-fill': prefix('transform-box'),\n 'transform-box-stroke': prefix('transform-box'),\n 'transform-box-view': prefix('transform-box'),\n\n // Scale static\n 'scale-none': prefix('scale', SPECIFICITY.ALL),\n 'scale-3d': prefix('scale', SPECIFICITY.ALL),\n\n // Rotate static\n 'rotate-none': prefix('rotate'),\n\n // Translate static\n 'translate-none': prefix('translate', SPECIFICITY.ALL),\n 'translate-full': prefix('translate', SPECIFICITY.ALL),\n '-translate-full': prefix('translate', SPECIFICITY.ALL),\n\n // Perspective origin positions\n 'perspective-origin-center': prefix('perspective-origin'),\n 'perspective-origin-top': prefix('perspective-origin'),\n 'perspective-origin-top-right': prefix('perspective-origin'),\n 'perspective-origin-right': prefix('perspective-origin'),\n 'perspective-origin-bottom-right': prefix('perspective-origin'),\n 'perspective-origin-bottom': prefix('perspective-origin'),\n 'perspective-origin-bottom-left': prefix('perspective-origin'),\n 'perspective-origin-left': prefix('perspective-origin'),\n 'perspective-origin-top-left': prefix('perspective-origin'),\n },\n\n patterns: [\n // Perspective arbitrary\n { pattern: /^perspective-\\[/, groupId: 'perspective', specificity: 1 },\n ],\n\n conflicts: {\n transform: ['transform'],\n 'transform-style': ['transform-style'],\n 'backface-visibility': ['backface-visibility'],\n perspective: ['perspective'],\n 'perspective-origin': ['perspective-origin'],\n // Scale - 2D bidirectional (scale-z is independent 3D axis)\n scale: ['scale', 'scale-x', 'scale-y'],\n 'scale-x': ['scale', 'scale-x'],\n 'scale-y': ['scale', 'scale-y'],\n 'scale-z': ['scale-z'],\n // Rotate - each axis is independent\n rotate: ['rotate'],\n 'rotate-x': ['rotate-x'],\n 'rotate-y': ['rotate-y'],\n 'rotate-z': ['rotate-z'],\n // Translate - 2D bidirectional (translate-z is independent 3D axis)\n translate: ['translate', 'translate-x', 'translate-y'],\n 'translate-x': ['translate', 'translate-x'],\n 'translate-y': ['translate', 'translate-y'],\n 'translate-z': ['translate-z'],\n ...simpleConflicts('skew-x', 'skew-y', 'transform-origin', 'transform-box'),\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n/**\n * Transition and animation class groups.\n */\n\nexport const transitionGroups: ClassGroupConfig = {\n prefixes: {\n // Duration\n 'duration-': prefix('transition-duration'),\n\n // Delay\n 'delay-': prefix('transition-delay'),\n },\n\n exactMatches: {\n // Transition\n transition: prefix('transition'),\n 'transition-none': prefix('transition'),\n 'transition-all': prefix('transition'),\n 'transition-colors': prefix('transition'),\n 'transition-opacity': prefix('transition'),\n 'transition-shadow': prefix('transition'),\n 'transition-transform': prefix('transition'),\n\n // Timing function\n 'ease-linear': prefix('transition-timing-function'),\n 'ease-in': prefix('transition-timing-function'),\n 'ease-out': prefix('transition-timing-function'),\n 'ease-in-out': prefix('transition-timing-function'),\n\n // Transition behavior (new in v4)\n 'transition-normal': prefix('transition-behavior'),\n 'transition-discrete': prefix('transition-behavior'),\n\n // Animation\n 'animate-none': prefix('animation'),\n 'animate-spin': prefix('animation'),\n 'animate-ping': prefix('animation'),\n 'animate-pulse': prefix('animation'),\n 'animate-bounce': prefix('animation'),\n },\n\n patterns: [\n // Animate arbitrary\n { pattern: /^animate-\\[/, groupId: 'animation', specificity: 1 },\n ],\n\n conflicts: simpleConflicts(\n 'transition', 'transition-duration', 'transition-timing-function',\n 'transition-delay', 'transition-behavior', 'animation'\n ),\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, SPECIFICITY } from './types'\n\n/**\n * Interactivity class groups: cursor, pointer events, resize, scroll, touch, select.\n */\n\nexport const interactivityGroups: ClassGroupConfig = {\n prefixes: {\n // Cursor\n 'cursor-': prefix('cursor'),\n\n // Scroll margin\n 'scroll-m-': prefix('scroll-margin', SPECIFICITY.ALL),\n 'scroll-mx-': prefix('scroll-margin-x', SPECIFICITY.AXIS),\n 'scroll-my-': prefix('scroll-margin-y', SPECIFICITY.AXIS),\n 'scroll-mt-': prefix('scroll-margin-t', SPECIFICITY.SIDE),\n 'scroll-mr-': prefix('scroll-margin-r', SPECIFICITY.SIDE),\n 'scroll-mb-': prefix('scroll-margin-b', SPECIFICITY.SIDE),\n 'scroll-ml-': prefix('scroll-margin-l', SPECIFICITY.SIDE),\n 'scroll-ms-': prefix('scroll-margin-s', SPECIFICITY.SIDE),\n 'scroll-me-': prefix('scroll-margin-e', SPECIFICITY.SIDE),\n\n // Scroll padding\n 'scroll-p-': prefix('scroll-padding', SPECIFICITY.ALL),\n 'scroll-px-': prefix('scroll-padding-x', SPECIFICITY.AXIS),\n 'scroll-py-': prefix('scroll-padding-y', SPECIFICITY.AXIS),\n 'scroll-pt-': prefix('scroll-padding-t', SPECIFICITY.SIDE),\n 'scroll-pr-': prefix('scroll-padding-r', SPECIFICITY.SIDE),\n 'scroll-pb-': prefix('scroll-padding-b', SPECIFICITY.SIDE),\n 'scroll-pl-': prefix('scroll-padding-l', SPECIFICITY.SIDE),\n 'scroll-ps-': prefix('scroll-padding-s', SPECIFICITY.SIDE),\n 'scroll-pe-': prefix('scroll-padding-e', SPECIFICITY.SIDE),\n\n // Will change\n 'will-change-': prefix('will-change'),\n },\n\n exactMatches: {\n // Appearance\n 'appearance-none': prefix('appearance'),\n 'appearance-auto': prefix('appearance'),\n\n // Pointer events\n 'pointer-events-none': prefix('pointer-events'),\n 'pointer-events-auto': prefix('pointer-events'),\n\n // Resize\n resize: prefix('resize'),\n 'resize-none': prefix('resize'),\n 'resize-y': prefix('resize'),\n 'resize-x': prefix('resize'),\n\n // Scroll behavior\n 'scroll-auto': prefix('scroll-behavior'),\n 'scroll-smooth': prefix('scroll-behavior'),\n\n // Scroll snap align\n 'snap-start': prefix('scroll-snap-align'),\n 'snap-end': prefix('scroll-snap-align'),\n 'snap-center': prefix('scroll-snap-align'),\n 'snap-align-none': prefix('scroll-snap-align'),\n\n // Scroll snap stop\n 'snap-normal': prefix('scroll-snap-stop'),\n 'snap-always': prefix('scroll-snap-stop'),\n\n // Scroll snap type\n 'snap-none': prefix('scroll-snap-type'),\n 'snap-x': prefix('scroll-snap-type'),\n 'snap-y': prefix('scroll-snap-type'),\n 'snap-both': prefix('scroll-snap-type'),\n 'snap-mandatory': prefix('scroll-snap-type'),\n 'snap-proximity': prefix('scroll-snap-type'),\n\n // Touch action\n 'touch-auto': prefix('touch-action'),\n 'touch-none': prefix('touch-action'),\n 'touch-pan-x': prefix('touch-action'),\n 'touch-pan-left': prefix('touch-action'),\n 'touch-pan-right': prefix('touch-action'),\n 'touch-pan-y': prefix('touch-action'),\n 'touch-pan-up': prefix('touch-action'),\n 'touch-pan-down': prefix('touch-action'),\n 'touch-pinch-zoom': prefix('touch-action'),\n 'touch-manipulation': prefix('touch-action'),\n\n // User select\n 'select-none': prefix('user-select'),\n 'select-text': prefix('user-select'),\n 'select-all': prefix('user-select'),\n 'select-auto': prefix('user-select'),\n\n // Will change\n 'will-change-auto': prefix('will-change'),\n 'will-change-scroll': prefix('will-change'),\n 'will-change-contents': prefix('will-change'),\n 'will-change-transform': prefix('will-change'),\n },\n\n patterns: [\n // Will change arbitrary\n { pattern: /^will-change-\\[/, groupId: 'will-change', specificity: 1 },\n ],\n\n conflicts: {\n appearance: ['appearance'],\n cursor: ['cursor'],\n 'pointer-events': ['pointer-events'],\n resize: ['resize'],\n 'scroll-behavior': ['scroll-behavior'],\n 'scroll-margin': [\n 'scroll-margin', 'scroll-margin-x', 'scroll-margin-y',\n 'scroll-margin-t', 'scroll-margin-r', 'scroll-margin-b', 'scroll-margin-l',\n 'scroll-margin-s', 'scroll-margin-e',\n ],\n 'scroll-margin-x': ['scroll-margin-x', 'scroll-margin-l', 'scroll-margin-r', 'scroll-margin-s', 'scroll-margin-e'],\n 'scroll-margin-y': ['scroll-margin-y', 'scroll-margin-t', 'scroll-margin-b'],\n 'scroll-margin-t': ['scroll-margin-t'],\n 'scroll-margin-r': ['scroll-margin-r'],\n 'scroll-margin-b': ['scroll-margin-b'],\n 'scroll-margin-l': ['scroll-margin-l'],\n 'scroll-margin-s': ['scroll-margin-s'],\n 'scroll-margin-e': ['scroll-margin-e'],\n 'scroll-padding': [\n 'scroll-padding', 'scroll-padding-x', 'scroll-padding-y',\n 'scroll-padding-t', 'scroll-padding-r', 'scroll-padding-b', 'scroll-padding-l',\n 'scroll-padding-s', 'scroll-padding-e',\n ],\n 'scroll-padding-x': ['scroll-padding-x', 'scroll-padding-l', 'scroll-padding-r', 'scroll-padding-s', 'scroll-padding-e'],\n 'scroll-padding-y': ['scroll-padding-y', 'scroll-padding-t', 'scroll-padding-b'],\n 'scroll-padding-t': ['scroll-padding-t'],\n 'scroll-padding-r': ['scroll-padding-r'],\n 'scroll-padding-b': ['scroll-padding-b'],\n 'scroll-padding-l': ['scroll-padding-l'],\n 'scroll-padding-s': ['scroll-padding-s'],\n 'scroll-padding-e': ['scroll-padding-e'],\n 'scroll-snap-align': ['scroll-snap-align'],\n 'scroll-snap-stop': ['scroll-snap-stop'],\n 'scroll-snap-type': ['scroll-snap-type'],\n 'touch-action': ['touch-action'],\n 'user-select': ['user-select'],\n 'will-change': ['will-change'],\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n/**\n * SVG class groups: fill, stroke, stroke-cap, stroke-join, stroke-dash, stroke-offset,\n * stroke-miter, stroke-opacity, paint-order, vector-effect.\n */\n\nexport const svgGroups: ClassGroupConfig = {\n prefixes: {\n // Stroke width (numeric values like stroke-2)\n // Note: stroke-<color> is handled by colors.ts\n 'stroke-': prefix('stroke-width'),\n\n // Stroke linecap\n 'stroke-cap-': prefix('stroke-cap'),\n\n // Stroke linejoin\n 'stroke-join-': prefix('stroke-join'),\n\n // Stroke dasharray\n 'stroke-dash-': prefix('stroke-dash'),\n\n // Stroke dashoffset\n 'stroke-offset-': prefix('stroke-offset'),\n\n // Stroke miterlimit\n 'stroke-miter-': prefix('stroke-miter'),\n\n // Stroke opacity\n 'stroke-opacity-': prefix('stroke-opacity'),\n\n // Paint order\n 'paint-': prefix('paint-order'),\n\n // Vector effect\n 'vector-': prefix('vector-effect'),\n },\n\n exactMatches: {\n // Stroke linecap exact matches\n 'stroke-cap-butt': prefix('stroke-cap'),\n 'stroke-cap-round': prefix('stroke-cap'),\n 'stroke-cap-square': prefix('stroke-cap'),\n\n // Stroke linejoin exact matches\n 'stroke-join-miter': prefix('stroke-join'),\n 'stroke-join-round': prefix('stroke-join'),\n 'stroke-join-bevel': prefix('stroke-join'),\n\n // Paint order exact matches\n 'paint-normal': prefix('paint-order'),\n 'paint-stroke': prefix('paint-order'),\n 'paint-fill': prefix('paint-order'),\n 'paint-markers': prefix('paint-order'),\n 'paint-stroke-fill': prefix('paint-order'),\n 'paint-stroke-markers': prefix('paint-order'),\n 'paint-fill-stroke': prefix('paint-order'),\n 'paint-fill-markers': prefix('paint-order'),\n 'paint-markers-stroke': prefix('paint-order'),\n 'paint-markers-fill': prefix('paint-order'),\n 'paint-stroke-fill-markers': prefix('paint-order'),\n 'paint-stroke-markers-fill': prefix('paint-order'),\n 'paint-fill-stroke-markers': prefix('paint-order'),\n 'paint-fill-markers-stroke': prefix('paint-order'),\n 'paint-markers-stroke-fill': prefix('paint-order'),\n 'paint-markers-fill-stroke': prefix('paint-order'),\n\n // Vector effect exact matches\n 'vector-none': prefix('vector-effect'),\n 'vector-non-scaling-stroke': prefix('vector-effect'),\n 'vector-non-scaling-size': prefix('vector-effect'),\n 'vector-non-rotation': prefix('vector-effect'),\n 'vector-fixed-position': prefix('vector-effect'),\n },\n\n patterns: [\n // Stroke width numeric\n { pattern: /^stroke-\\d+$/, groupId: 'stroke-width', specificity: 1 },\n // Stroke width arbitrary\n { pattern: /^stroke-\\[/, groupId: 'stroke-width', specificity: 1 },\n // Stroke dasharray arbitrary\n { pattern: /^stroke-dash-\\[/, groupId: 'stroke-dash', specificity: 1 },\n // Stroke dashoffset arbitrary\n { pattern: /^stroke-offset-\\[/, groupId: 'stroke-offset', specificity: 1 },\n // Stroke miterlimit arbitrary\n { pattern: /^stroke-miter-\\[/, groupId: 'stroke-miter', specificity: 1 },\n // Stroke opacity arbitrary\n { pattern: /^stroke-opacity-\\[/, groupId: 'stroke-opacity', specificity: 1 },\n ],\n\n conflicts: simpleConflicts(\n 'stroke-width', 'stroke-cap', 'stroke-join', 'stroke-dash',\n 'stroke-offset', 'stroke-miter', 'stroke-opacity',\n 'paint-order', 'vector-effect'\n ),\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix } from './types'\n\n/**\n * Accessibility class groups: screen reader, forced colors.\n */\n\nexport const accessibilityGroups: ClassGroupConfig = {\n prefixes: {},\n\n exactMatches: {\n // Screen reader\n 'sr-only': prefix('sr-only'),\n 'not-sr-only': prefix('sr-only'),\n\n // Forced color adjust\n 'forced-color-adjust-auto': prefix('forced-color-adjust'),\n 'forced-color-adjust-none': prefix('forced-color-adjust'),\n },\n\n patterns: [],\n\n conflicts: {\n 'sr-only': ['sr-only'],\n 'forced-color-adjust': ['forced-color-adjust'],\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix } from './types'\n\n/**\n * Table class groups: layout, caption.\n */\n\nexport const tableGroups: ClassGroupConfig = {\n prefixes: {},\n\n exactMatches: {\n // Table layout\n 'table-auto': prefix('table-layout'),\n 'table-fixed': prefix('table-layout'),\n\n // Caption side\n 'caption-top': prefix('caption-side'),\n 'caption-bottom': prefix('caption-side'),\n },\n\n patterns: [],\n\n conflicts: {\n 'table-layout': ['table-layout'],\n 'caption-side': ['caption-side'],\n },\n}\n","import type { ClassGroupConfig } from './types'\nimport { prefix, simpleConflicts } from './types'\n\n/**\n * Mask-related class groups for CSS masking.\n * New in Tailwind CSS v4.\n */\n\nexport const maskGroups: ClassGroupConfig = {\n prefixes: {\n // Mask image (arbitrary)\n 'mask-': prefix('mask-image'),\n\n // Mask size (arbitrary)\n 'mask-size-': prefix('mask-size'),\n\n // Mask position (arbitrary)\n 'mask-position-': prefix('mask-position'),\n },\n\n exactMatches: {\n // Mask image\n 'mask-none': prefix('mask-image'),\n\n // Mask shape functions\n 'mask-circle': prefix('mask-image'),\n 'mask-ellipse': prefix('mask-image'),\n 'mask-no-clip': prefix('mask-clip'),\n\n // Mask radial positions\n 'mask-radial-at-center': prefix('mask-image'),\n 'mask-radial-at-top': prefix('mask-image'),\n 'mask-radial-at-top-left': prefix('mask-image'),\n 'mask-radial-at-top-right': prefix('mask-image'),\n 'mask-radial-at-bottom': prefix('mask-image'),\n 'mask-radial-at-bottom-left': prefix('mask-image'),\n 'mask-radial-at-bottom-right': prefix('mask-image'),\n 'mask-radial-at-left': prefix('mask-image'),\n 'mask-radial-at-right': prefix('mask-image'),\n\n // Mask radial sizing\n 'mask-radial-closest-corner': prefix('mask-image'),\n 'mask-radial-closest-side': prefix('mask-image'),\n 'mask-radial-farthest-corner': prefix('mask-image'),\n 'mask-radial-farthest-side': prefix('mask-image'),\n\n // Mask composite\n 'mask-add': prefix('mask-composite'),\n 'mask-subtract': prefix('mask-composite'),\n 'mask-intersect': prefix('mask-composite'),\n 'mask-exclude': prefix('mask-composite'),\n\n // Mask mode\n 'mask-alpha': prefix('mask-mode'),\n 'mask-luminance': prefix('mask-mode'),\n 'mask-match': prefix('mask-mode'),\n\n // Mask type\n 'mask-type-alpha': prefix('mask-type'),\n 'mask-type-luminance': prefix('mask-type'),\n\n // Mask size\n 'mask-auto': prefix('mask-size'),\n 'mask-cover': prefix('mask-size'),\n 'mask-contain': prefix('mask-size'),\n\n // Mask position\n 'mask-center': prefix('mask-position'),\n 'mask-top': prefix('mask-position'),\n 'mask-top-left': prefix('mask-position'),\n 'mask-top-right': prefix('mask-position'),\n 'mask-bottom': prefix('mask-position'),\n 'mask-bottom-left': prefix('mask-position'),\n 'mask-bottom-right': prefix('mask-position'),\n 'mask-left': prefix('mask-position'),\n 'mask-right': prefix('mask-position'),\n\n // Mask repeat\n 'mask-repeat': prefix('mask-repeat'),\n 'mask-no-repeat': prefix('mask-repeat'),\n 'mask-repeat-x': prefix('mask-repeat'),\n 'mask-repeat-y': prefix('mask-repeat'),\n 'mask-repeat-round': prefix('mask-repeat'),\n 'mask-repeat-space': prefix('mask-repeat'),\n\n // Mask clip\n 'mask-clip-border': prefix('mask-clip'),\n 'mask-clip-padding': prefix('mask-clip'),\n 'mask-clip-content': prefix('mask-clip'),\n 'mask-clip-fill': prefix('mask-clip'),\n 'mask-clip-stroke': prefix('mask-clip'),\n 'mask-clip-view': prefix('mask-clip'),\n\n // Mask origin\n 'mask-origin-border': prefix('mask-origin'),\n 'mask-origin-padding': prefix('mask-origin'),\n 'mask-origin-content': prefix('mask-origin'),\n 'mask-origin-fill': prefix('mask-origin'),\n 'mask-origin-stroke': prefix('mask-origin'),\n 'mask-origin-view': prefix('mask-origin'),\n },\n\n patterns: [\n // Mask image arbitrary (gradients, urls, etc.)\n { pattern: /^mask-\\[/, groupId: 'mask-image', specificity: 1 },\n // Mask linear/radial/conic gradients\n { pattern: /^mask-linear-/, groupId: 'mask-image', specificity: 1 },\n { pattern: /^mask-radial-/, groupId: 'mask-image', specificity: 1 },\n { pattern: /^mask-conic-/, groupId: 'mask-image', specificity: 1 },\n ],\n\n conflicts: simpleConflicts(\n 'mask-image',\n 'mask-composite',\n 'mask-mode',\n 'mask-type',\n 'mask-size',\n 'mask-position',\n 'mask-repeat',\n 'mask-clip',\n 'mask-origin'\n ),\n}\n","import type { ClassGroupConfig } from './types'\nimport { mergeConfigs } from './types'\nimport { layoutGroups } from './layout'\nimport { spacingGroups } from './spacing'\nimport { sizingGroups } from './sizing'\nimport { flexboxGridGroups } from './flexbox-grid'\nimport { typographyGroups } from './typography'\nimport { colorGroups } from './colors'\nimport { backgroundGroups } from './backgrounds'\nimport { borderGroups } from './borders'\nimport { effectsGroups } from './effects'\nimport { transformGroups } from './transforms'\nimport { transitionGroups } from './transitions'\nimport { interactivityGroups } from './interactivity'\nimport { svgGroups } from './svg'\nimport { accessibilityGroups } from './accessibility'\nimport { tableGroups } from './tables'\nimport { maskGroups } from './masks'\n\n// Lazy-loaded config to defer computation until first use\nlet _fullConfig: ClassGroupConfig | null = null\n\n/**\n * Gets the full class group configuration.\n * Lazily computed on first access to reduce startup time.\n */\n\nfunction getFullConfig(): ClassGroupConfig {\n if (_fullConfig === null) {\n _fullConfig = mergeConfigs(\n layoutGroups,\n spacingGroups,\n sizingGroups,\n flexboxGridGroups,\n typographyGroups,\n colorGroups,\n backgroundGroups,\n borderGroups,\n effectsGroups,\n transformGroups,\n transitionGroups,\n interactivityGroups,\n svgGroups,\n accessibilityGroups,\n tableGroups,\n maskGroups\n )\n }\n return _fullConfig\n}\n\n/**\n * Full class group configuration.\n * Covers all Tailwind CSS v4 utilities.\n *\n * Bundle size: ~7KB gzipped\n *\n * Uses lazy initialization via a Proxy to defer computation until first access,\n * reducing startup time when the full config is imported but not immediately used.\n */\n\nexport const fullConfig: ClassGroupConfig = new Proxy({} as ClassGroupConfig, {\n get(_, prop) {\n return getFullConfig()[prop as keyof ClassGroupConfig]\n },\n ownKeys() {\n return Reflect.ownKeys(getFullConfig())\n },\n getOwnPropertyDescriptor(_, prop) {\n return Object.getOwnPropertyDescriptor(getFullConfig(), prop)\n },\n})\n\nexport { getFullConfig }\n","import type { ClassGroupConfig } from './types'\nimport { mergeConfigs } from './types'\nimport { layoutGroups } from './layout'\nimport { spacingGroups } from './spacing'\nimport { sizingGroups } from './sizing'\nimport { flexboxGridGroups } from './flexbox-grid'\nimport { typographyGroups } from './typography'\nimport { colorGroups } from './colors'\nimport { borderGroups } from './borders'\n\n/**\n * Minimal class group configuration.\n * Covers the most commonly used Tailwind utilities:\n * - Layout (display, position, visibility)\n * - Spacing (padding, margin, gap)\n * - Sizing (width, height)\n * - Flexbox & Grid\n * - Typography\n * - Colors\n * - Borders\n *\n * Bundle size: ~1.5KB gzipped\n */\n\nexport const minimalConfig: ClassGroupConfig = mergeConfigs(\n layoutGroups,\n spacingGroups,\n sizingGroups,\n flexboxGridGroups,\n typographyGroups,\n colorGroups,\n borderGroups\n)\n","import type { PrefixEntry } from './groups/types'\n\ninterface TrieNode {\n children: Map<string, TrieNode>\n entry: PrefixEntry | null\n}\n\nfunction createTrieNode(): TrieNode {\n return { children: new Map(), entry: null }\n}\n\n/** Prefix trie for O(k) class classification where k is the class name length. */\nclass PrefixTrie {\n private root: TrieNode = createTrieNode()\n\n insert(prefix: string, entry: PrefixEntry): void {\n let node = this.root\n for (const char of prefix) {\n if (!node.children.has(char)) {\n node.children.set(char, createTrieNode())\n }\n node = node.children.get(char)!\n }\n node.entry = entry\n }\n\n findLongestMatch(className: string): { entry: PrefixEntry; matchLength: number } | null {\n let node = this.root\n let lastMatch: { entry: PrefixEntry; matchLength: number } | null = null\n let matchLength = 0\n\n // Check for empty prefix match at root\n if (node.entry) {\n lastMatch = { entry: node.entry, matchLength: 0 }\n }\n\n for (const char of className) {\n const child = node.children.get(char)\n if (!child) break\n node = child\n matchLength++\n if (node.entry) {\n lastMatch = { entry: node.entry, matchLength }\n }\n }\n\n return lastMatch\n }\n}\n\nexport { PrefixTrie }\n","import type { ClassGroupConfig, PrefixEntry, ConflictMap } from './groups/types'\nimport { fullConfig } from './groups/full'\nimport { minimalConfig } from './groups/minimal'\nimport type { TwMergeMode } from './types'\nimport { PrefixTrie } from './trie'\n\ninterface ClassifierState {\n mode: TwMergeMode\n config: ClassGroupConfig\n prefixTrie: PrefixTrie\n exactMatches: Map<string, PrefixEntry>\n conflicts: ConflictMap\n /** Pre-computed conflict sets for O(1) lookups */\n conflictSets: Map<string, Set<string>>\n initialized: boolean\n}\n\n// Default state with full config\nlet state: ClassifierState = {\n mode: 'full',\n config: fullConfig,\n prefixTrie: new PrefixTrie(),\n exactMatches: new Map(),\n conflicts: {},\n conflictSets: new Map(),\n initialized: false,\n}\n\n/**\n * Initializes the classifier with the given configuration.\n */\n\nfunction initializeClassifier(config: ClassGroupConfig): void {\n state.prefixTrie = new PrefixTrie()\n state.exactMatches = new Map()\n state.conflicts = config.conflicts\n state.conflictSets = new Map()\n\n // Insert all prefixes into the trie\n for (const [prefix, entry] of Object.entries(config.prefixes)) {\n state.prefixTrie.insert(prefix, entry)\n }\n\n // Build exact match map\n for (const [className, entry] of Object.entries(config.exactMatches)) {\n state.exactMatches.set(className, entry)\n }\n\n // Pre-compute conflict sets for O(1) lookups\n for (const [groupId, conflicts] of Object.entries(config.conflicts)) {\n state.conflictSets.set(groupId, new Set(conflicts))\n }\n\n state.config = config\n state.initialized = true\n}\n\n/**\n * Sets the merge mode and reinitializes the classifier.\n */\n\nfunction setMergeMode(mode: TwMergeMode): void {\n if (mode === state.mode && state.initialized) {\n return\n }\n\n state.mode = mode\n\n if (mode === false) {\n // Disable merging - clear everything\n state.prefixTrie = new PrefixTrie()\n state.exactMatches = new Map()\n state.conflicts = {}\n state.conflictSets = new Map()\n state.initialized = true\n return\n }\n\n const config = mode === 'minimal' ? minimalConfig : fullConfig\n initializeClassifier(config)\n}\n\n/**\n * Ensures the classifier is initialized with the current mode.\n */\n\nfunction ensureInitialized(): void {\n if (!state.initialized) {\n setMergeMode(state.mode)\n }\n}\n\n/**\n * Classifies a utility class into a group and returns its specificity.\n *\n * @param utility - The utility class (without modifiers)\n * @returns The group ID (or null) and specificity level\n */\n\nfunction classifyClass(utility: string): { group: string | null; specificity: number } {\n ensureInitialized()\n\n // If merging is disabled, return null\n if (state.mode === false) {\n return { group: null, specificity: 1 }\n }\n\n // Fast path: exact match\n const exactMatch = state.exactMatches.get(utility)\n if (exactMatch) {\n return { group: exactMatch.groupId, specificity: exactMatch.specificity }\n }\n\n // Trie-based prefix match\n const prefixMatch = state.prefixTrie.findLongestMatch(utility)\n if (prefixMatch) {\n return { group: prefixMatch.entry.groupId, specificity: prefixMatch.entry.specificity }\n }\n\n // Pattern-based fallback (for complex patterns like arbitrary values)\n for (const { pattern, groupId, specificity } of state.config.patterns) {\n if (pattern.test(utility)) {\n return { group: groupId, specificity }\n }\n }\n\n // Unknown class\n return { group: null, specificity: 1 }\n}\n\n/** Empty set singleton to avoid allocations */\nconst EMPTY_SET: ReadonlySet<string> = new Set()\n\n/**\n * Gets the groups that a given group conflicts with as a Set (O(1) lookups).\n *\n * @param groupId - The group ID to check\n * @returns Set of conflicting group IDs\n */\n\nfunction getConflictingGroupsSet(groupId: string): ReadonlySet<string> {\n ensureInitialized()\n return state.conflictSets.get(groupId) ?? EMPTY_SET\n}\n\n/**\n * Gets the groups that a given group conflicts with.\n *\n * @param groupId - The group ID to check\n * @returns Array of conflicting group IDs\n */\n\nfunction getConflictingGroups(groupId: string): string[] {\n ensureInitialized()\n return state.conflicts[groupId] ?? []\n}\n\n/**\n * Gets the current merge mode.\n */\n\nfunction getMergeMode(): TwMergeMode {\n return state.mode\n}\n\n/**\n * Gets the current configuration.\n */\n\nfunction getConfig(): ClassGroupConfig {\n ensureInitialized()\n return state.config\n}\n\n/**\n * Resets the classifier to default state (Useful for testing).\n */\n\nfunction resetClassifier(): void {\n state = {\n mode: 'full',\n config: fullConfig,\n prefixTrie: new PrefixTrie(),\n exactMatches: new Map(),\n conflicts: {},\n conflictSets: new Map(),\n initialized: false,\n }\n}\n\n/**\n * Class group information for introspection.\n */\n\ninterface ClassGroup {\n id: string\n conflictsWith: string[]\n}\n\n/**\n * Gets all class groups for introspection.\n * Returns array of group IDs and their conflicts.\n */\n\nfunction getClassGroups(): ClassGroup[] {\n ensureInitialized()\n return Object.entries(state.conflicts).map(([id, conflictsWith]) => ({\n id,\n conflictsWith,\n }))\n}\n\n/**\n * Gets a specific class group by ID.\n */\n\nfunction getClassGroup(id: string): ClassGroup | undefined {\n ensureInitialized()\n if (!(id in state.conflicts)) {\n return undefined\n }\n return { id, conflictsWith: state.conflicts[id] }\n}\n\n// Re-export SPECIFICITY for convenience\nexport { SPECIFICITY } from './groups/types'\n\nexport {\n classifyClass,\n getConflictingGroups,\n getConflictingGroupsSet,\n getClassGroups,\n getClassGroup,\n setMergeMode,\n getMergeMode,\n getConfig,\n resetClassifier,\n}\n","import type { ClassToken, ClassValue } from './types'\nimport { getParseCache } from './cache'\nimport { classifyClass, SPECIFICITY } from './class-groups'\n\n/**\n * Flattens ClassValue inputs into a single string.\n * Handles strings, arrays, objects, and nested combinations.\n *\n * @example\n * ```ts\n * flattenClassValue('a b c') // => 'a b c'\n * flattenClassValue(['a', 'b']) // => 'a b'\n * flattenClassValue({ a: true, b: false }) // => 'a'\n * flattenClassValue(['a', { b: true }, ['c', 'd']]) // => 'a b c d'\n * ```\n */\n\nfunction flattenClassValue(value: ClassValue): string {\n if (value === null || value === undefined || value === false || value === '') {\n return ''\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n if (typeof value === 'number' || typeof value === 'bigint') {\n return String(value)\n }\n\n if (Array.isArray(value)) {\n // Optimization: avoid array allocation for single item\n if (value.length === 1) {\n return flattenClassValue(value[0])\n }\n // Optimization: direct string concatenation instead of array join\n let result = ''\n for (const item of value) {\n const flattened = flattenClassValue(item)\n if (flattened) {\n result = result ? result + ' ' + flattened : flattened\n }\n }\n return result\n }\n\n // Object: include keys where value is truthy\n if (typeof value === 'object') {\n // Optimization: direct string concatenation instead of array join\n let result = ''\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key) && value[key]) {\n result = result ? result + ' ' + key : key\n }\n }\n return result\n }\n\n return ''\n}\n\n/**\n * Flattens multiple ClassValue inputs into a single string.\n *\n * @param inputs - ClassValue inputs to flatten\n * @returns Combined class string\n */\n\nfunction flattenClassValues(...inputs: ClassValue[]): string {\n // Optimization: avoid array allocation, use direct concatenation\n if (inputs.length === 1) {\n return flattenClassValue(inputs[0])\n }\n let result = ''\n for (const input of inputs) {\n const flattened = flattenClassValue(input)\n if (flattened) {\n result = result ? result + ' ' + flattened : flattened\n }\n }\n return result\n}\n\nconst CLASS_SPLIT_REGEX = /\\s+/\nconst ARBITRARY_VALUE_REGEX = /^\\[([a-zA-Z-]+):(.+)\\]$/\nconst ARBITRARY_CSS_VAR_REGEX = /^\\[(--[a-zA-Z0-9-]+):(.+)\\]$/\n\n// Pre-compiled regexes for stripPostfixModifier (optimization: moved from inline)\nconst POSTFIX_NUMBER_REGEX = /^[\\d.]+$/\nconst POSTFIX_FRACTION_REGEX = /^\\d+\\/\\d+$/\nconst POSTFIX_NAMED_REGEX = /^[a-z]+$/\n\n/**\n * Splits a class string into individual class names.\n * Handles whitespace and filters empty strings.\n *\n * @param classString - The class string to split\n * @returns Array of individual class names\n */\n\nfunction splitClasses(classString: string): string[] {\n return classString.split(CLASS_SPLIT_REGEX).filter(Boolean)\n}\n\n/**\n * Extracts modifiers and !important flag from a class name.\n * Modifiers are colon-separated prefixes like \"hover:\", \"md:\", etc.\n * !important can appear as \"!\" modifier or \"!\" prefix on utility.\n *\n * @example\n * ```ts\n * extractModifiers('hover:md:text-red-500')\n * // => { modifiers: ['hover', 'md'], utility: 'text-red-500', hasImportant: false }\n *\n * extractModifiers('hover:!bg-red-500')\n * // => { modifiers: ['hover'], utility: 'bg-red-500', hasImportant: true }\n *\n * extractModifiers('!p-4')\n * // => { modifiers: [], utility: 'p-4', hasImportant: true }\n * ```\n */\n\nfunction extractModifiers(className: string): {\n modifiers: string[]\n utility: string\n hasImportant: boolean\n} {\n // Fast path: no brackets means we can use simple split\n // This covers ~95% of Tailwind classes (e.g., \"hover:md:p-4\")\n if (!className.includes('[')) {\n const colonIndex = className.indexOf(':')\n\n // No modifiers at all (e.g., \"p-4\", \"!p-4\")\n if (colonIndex === -1) {\n if (className.startsWith('!')) {\n return { modifiers: [], utility: className.slice(1), hasImportant: true }\n }\n return { modifiers: [], utility: className, hasImportant: false }\n }\n\n // Has modifiers - use simple split\n const parts = className.split(':')\n let utility = parts[parts.length - 1]\n const modifiers = parts.slice(0, -1)\n let hasImportant = false\n\n // Check for ! prefix on utility\n if (utility.startsWith('!')) {\n utility = utility.slice(1)\n hasImportant = true\n }\n\n // Check for standalone ! in modifiers\n const importantIndex = modifiers.indexOf('!')\n if (importantIndex !== -1) {\n modifiers.splice(importantIndex, 1)\n hasImportant = true\n }\n\n return { modifiers, utility, hasImportant }\n }\n\n // Slow path: handle arbitrary values with colons inside brackets\n // e.g., \"hover:[color:red]\" should be { modifiers: ['hover'], utility: '[color:red]' }\n const parts: string[] = []\n let current = ''\n let bracketDepth = 0\n\n for (const char of className) {\n if (char === '[') {\n bracketDepth++\n current += char\n } else if (char === ']') {\n bracketDepth--\n current += char\n } else if (char === ':' && bracketDepth === 0) {\n if (current) {\n parts.push(current)\n }\n current = ''\n } else {\n current += char\n }\n }\n\n if (current) {\n parts.push(current)\n }\n\n if (parts.length === 0) {\n return { modifiers: [], utility: '', hasImportant: false }\n }\n\n if (parts.length === 1) {\n // Single part - check for ! prefix\n const single = parts[0]\n if (single.startsWith('!')) {\n return { modifiers: [], utility: single.slice(1), hasImportant: true }\n }\n return { modifiers: [], utility: single, hasImportant: false }\n }\n\n let utility = parts[parts.length - 1]\n const modifiers = parts.slice(0, -1)\n let hasImportant = false\n\n // Check for ! prefix on utility (e.g., \"hover:!bg-red-500\")\n if (utility.startsWith('!')) {\n utility = utility.slice(1)\n hasImportant = true\n }\n\n // Check for standalone ! in modifiers (e.g., \"hover:!:bg-red-500\" - unusual but valid)\n const importantIndex = modifiers.indexOf('!')\n if (importantIndex !== -1) {\n modifiers.splice(importantIndex, 1)\n hasImportant = true\n }\n\n return { modifiers, utility, hasImportant }\n}\n\n/**\n * Strips postfix modifier from utility (e.g., \"text-lg/7\" → \"text-lg\").\n * Postfix modifiers are used in Tailwind v3.3+ for:\n * - Line height shorthand: text-lg/7\n * - Opacity modifiers: bg-red-500/50\n *\n * @param utility - The utility class\n * @returns Utility without postfix modifier\n */\n\nfunction stripPostfixModifier(utility: string): string {\n // Don't strip from arbitrary values (e.g., [color:red/50])\n if (utility.includes('[')) {\n return utility\n }\n\n const slashIndex = utility.lastIndexOf('/')\n if (slashIndex === -1) {\n return utility\n }\n\n // Check if what follows the slash looks like a postfix modifier\n // (number, fraction like 1/2, or named value)\n const afterSlash = utility.slice(slashIndex + 1)\n if (POSTFIX_NUMBER_REGEX.test(afterSlash) || POSTFIX_FRACTION_REGEX.test(afterSlash) || POSTFIX_NAMED_REGEX.test(afterSlash)) {\n return utility.slice(0, slashIndex)\n }\n\n return utility\n}\n\n/**\n * Base parsing result without classification.\n */\n\ninterface ParsedClass {\n raw: string\n modifiers: string[]\n modifierKey: string\n hasImportant: boolean\n utility: string\n utilityForClassification: string\n isArbitrary: boolean\n arbitraryProperty?: string\n position: number\n}\n\n/**\n * Parses a single class name without classification.\n * Used by createTw() which does its own classification.\n *\n * @param className - The class name to parse\n * @param position - Original position in the input\n * @returns Parsed class info (without group/specificity)\n */\n\nfunction parseClassBase(className: string, position: number): ParsedClass {\n const { modifiers, utility, hasImportant } = extractModifiers(className)\n\n // Pre-compute sorted modifier key for conflict resolution\n let modifierKey: string\n if (modifiers.length === 0) {\n modifierKey = ''\n } else if (modifiers.length === 1) {\n modifierKey = modifiers[0]\n } else {\n modifierKey = [...modifiers].sort().join(':')\n }\n\n // Strip postfix modifier for classification (e.g., \"text-lg/7\" → \"text-lg\")\n const utilityForClassification = stripPostfixModifier(utility)\n\n // Check for arbitrary values\n const cssVarMatch = utilityForClassification.match(ARBITRARY_CSS_VAR_REGEX)\n if (cssVarMatch) {\n return {\n raw: className,\n modifiers,\n modifierKey,\n hasImportant,\n utility,\n utilityForClassification,\n isArbitrary: true,\n arbitraryProperty: cssVarMatch[1],\n position,\n }\n }\n\n const arbitraryMatch = utilityForClassification.match(ARBITRARY_VALUE_REGEX)\n if (arbitraryMatch) {\n return {\n raw: className,\n modifiers,\n modifierKey,\n hasImportant,\n utility,\n utilityForClassification,\n isArbitrary: true,\n arbitraryProperty: arbitraryMatch[1],\n position,\n }\n }\n\n return {\n raw: className,\n modifiers,\n modifierKey,\n hasImportant,\n utility,\n utilityForClassification,\n isArbitrary: false,\n position,\n }\n}\n\n/**\n * Parses a single class name into a ClassToken.\n * Includes classification using the global classifier.\n *\n * @param className - The class name to parse\n * @param position - Original position in the input\n * @returns Parsed ClassToken with group and specificity\n */\n\nfunction parseClass(className: string, position: number): ClassToken {\n const base = parseClassBase(className, position)\n\n // Handle arbitrary values\n if (base.isArbitrary) {\n const group = base.arbitraryProperty?.startsWith('--')\n ? 'arbitrary-css-var'\n : `arbitrary-${base.arbitraryProperty}`\n return {\n raw: base.raw,\n modifiers: base.modifiers,\n modifierKey: base.modifierKey,\n hasImportant: base.hasImportant,\n utility: base.utility,\n group,\n isArbitrary: true,\n arbitraryProperty: base.arbitraryProperty,\n specificity: SPECIFICITY.ARBITRARY,\n position: base.position,\n }\n }\n\n // Classify using class groups\n const { group, specificity } = classifyClass(base.utilityForClassification)\n\n return {\n raw: base.raw,\n modifiers: base.modifiers,\n modifierKey: base.modifierKey,\n hasImportant: base.hasImportant,\n utility: base.utility,\n group,\n isArbitrary: false,\n specificity,\n position: base.position,\n }\n}\n\n/**\n * Parses a class string into an array of ClassTokens.\n * Results are cached for performance.\n *\n * @param classString - The class string to parse\n * @returns Array of ClassTokens\n */\n\nfunction parseClasses(classString: string): ClassToken[] {\n if (!classString) {\n return []\n }\n\n // Check cache first\n const cache = getParseCache()\n const cached = cache.get(classString)\n if (cached !== undefined) {\n return cached\n }\n\n const classes = splitClasses(classString)\n const tokens: ClassToken[] = new Array(classes.length)\n for (let i = 0; i < classes.length; i++) {\n tokens[i] = parseClass(classes[i], i)\n }\n\n cache.set(classString, tokens)\n return tokens\n}\n\nexport {\n flattenClassValue,\n flattenClassValues,\n splitClasses,\n extractModifiers,\n parseClassBase,\n parseClass,\n parseClasses,\n}\nexport type { ParsedClass }\n","import type { ClassToken, ResolvedClasses, RemovedClass } from './types'\nimport { getConflictingGroups } from './class-groups'\n\n/** Type for a function that returns conflicting groups for a group ID */\nexport type ConflictResolver = (groupId: string) => string[]\n\n/**\n * Core O(n) conflict resolution algorithm.\n * Processes tokens in reverse order (later classes win).\n *\n * @param tokens - Array of class tokens to resolve\n * @param getConflicts - Function to get conflicting groups for a group ID\n * @param trackRemoved - Whether to track removed tokens for debugging\n * @returns Object with kept indices and optionally removed info\n */\n\nfunction resolveCore<T extends boolean>(\n tokens: ClassToken[],\n getConflicts: ConflictResolver,\n trackRemoved: T\n): T extends true\n ? { kept: Set<number>; removed: RemovedClass[] }\n : { kept: Set<number>; removed: null } {\n const kept = new Set<number>()\n\n if (tokens.length === 0) {\n return { kept, removed: trackRemoved ? [] : null } as ReturnType<typeof resolveCore<T>>\n }\n\n if (tokens.length === 1) {\n kept.add(0)\n return { kept, removed: trackRemoved ? [] : null } as ReturnType<typeof resolveCore<T>>\n }\n\n // For tracking mode, we need full token info; otherwise just specificity\n const seen = trackRemoved\n ? new Map<string, { token: ClassToken; specificity: number }>()\n : new Map<string, { specificity: number }>()\n\n const removed: RemovedClass[] = trackRemoved ? [] : (null as unknown as RemovedClass[])\n\n for (let i = tokens.length - 1; i >= 0; i--) {\n const token = tokens[i]\n\n // Unknown classes are always kept\n if (token.group === null) {\n kept.add(i)\n continue\n }\n\n const baseKey = `${token.hasImportant ? '!' : ''}${token.modifierKey}:`\n const ownKey = baseKey + token.group\n const existing = seen.get(ownKey)\n\n // Same group already seen - this token is overridden\n if (existing !== undefined) {\n if (trackRemoved) {\n const existingWithToken = existing as { token: ClassToken; specificity: number }\n removed.push({\n token,\n overriddenBy: existingWithToken.token,\n reason: `overridden by ${existingWithToken.token.raw}`,\n })\n }\n continue\n }\n\n // Check if any conflicting group overrides this token\n let overridden = false\n let overriddenByToken: ClassToken | null = null\n const conflictGroups = getConflicts(token.group)\n\n for (const conflictGroup of conflictGroups) {\n if (conflictGroup === token.group) continue\n\n const conflictKey = baseKey + conflictGroup\n const conflictExisting = seen.get(conflictKey)\n\n if (conflictExisting !== undefined) {\n // Only override if conflict has higher or equal specificity\n if (conflictExisting.specificity > token.specificity) {\n continue\n } else {\n overridden = true\n if (trackRemoved && 'token' in conflictExisting) {\n overriddenByToken = (conflictExisting as { token: ClassToken; specificity: number }).token\n }\n break\n }\n }\n }\n\n if (overridden) {\n if (trackRemoved && overriddenByToken !== null) {\n removed.push({\n token,\n overriddenBy: overriddenByToken,\n reason: `overridden by ${overriddenByToken.raw}`,\n })\n }\n } else {\n kept.add(i)\n if (trackRemoved) {\n ;(seen as Map<string, { token: ClassToken; specificity: number }>).set(ownKey, {\n token,\n specificity: token.specificity,\n })\n } else {\n ;(seen as Map<string, { specificity: number }>).set(ownKey, {\n specificity: token.specificity,\n })\n }\n }\n }\n\n return { kept, removed } as ReturnType<typeof resolveCore<T>>\n}\n\n/** Resolves conflicts with full debug info about removed classes. */\nfunction resolveConflicts(tokens: ClassToken[]): ResolvedClasses {\n if (tokens.length === 0) return { kept: [], removed: [] }\n if (tokens.length === 1) return { kept: [tokens[0]], removed: [] }\n\n const { kept, removed } = resolveCore(tokens, getConflictingGroups, true)\n return {\n kept: tokens.filter((_, i) => kept.has(i)),\n removed,\n }\n}\n\n/** Resolves conflicts returning only kept tokens (faster, no debug info). */\nfunction resolveConflictsSimple(tokens: ClassToken[]): ClassToken[] {\n if (tokens.length <= 1) return tokens\n\n const { kept } = resolveCore(tokens, getConflictingGroups, false)\n return tokens.filter((_, i) => kept.has(i))\n}\n\n/**\n * Configurable conflict resolution for custom tw instances.\n * Accepts a custom conflict resolver function.\n */\n\nfunction resolveWithCustomConflicts(\n tokens: ClassToken[],\n getConflicts: ConflictResolver\n): Set<number> {\n if (tokens.length === 0) return new Set()\n if (tokens.length === 1) return new Set([0])\n\n const { kept } = resolveCore(tokens, getConflicts, false)\n return kept\n}\n\n/**\n * Converts tokens back to a space-separated class string.\n * Optimization: Direct string concatenation instead of map + join.\n */\n\nfunction tokensToString(tokens: ClassToken[]): string {\n if (tokens.length === 0) return ''\n if (tokens.length === 1) return tokens[0].raw\n\n let result = tokens[0].raw\n for (let i = 1; i < tokens.length; i++) {\n result += ' ' + tokens[i].raw\n }\n return result\n}\n\nexport {\n resolveConflicts,\n resolveConflictsSimple,\n resolveWithCustomConflicts,\n tokensToString,\n}\n","\"use client\";\n\nimport type { ClassValue, TwConfig, ClassToken } from \"./types\";\nimport type { ClassGroupConfig, PrefixEntry } from \"./groups/types\";\nimport { SPECIFICITY } from \"./groups/types\";\nimport { flattenClassValues, parseClassBase, splitClasses } from \"./parser\";\nimport { LRUCache } from \"./cache\";\nimport { fullConfig as defaultFullConfig } from \"./groups/full\";\nimport { minimalConfig as defaultMinimalConfig } from \"./groups/minimal\";\nimport { PrefixTrie } from \"./trie\";\nimport { resolveWithCustomConflicts } from \"./resolver\";\n\n// ============================================================================\n// Custom tw() Factory\n// ============================================================================\n\n/**\n * Creates a customized tw function with extended or overridden configuration.\n *\n * Use this when you need to:\n * - Add custom class groups for your design system\n * - Change conflict resolution behavior\n * - Add a Tailwind prefix\n * - Adjust cache size\n * - Use minimal mode for smaller bundle\n *\n * @param config - Configuration options\n * @returns A customized tw function\n *\n * @example\n * ```tsx\n * // Add custom class groups\n * const tw = createTw({\n * extend: {\n * classGroups: {\n * 'custom-size': ['size-xs', 'size-sm', 'size-md', 'size-lg', 'size-xl'],\n * },\n * },\n * })\n *\n * tw('size-sm size-lg') // => 'size-lg'\n *\n * // Use minimal mode for smaller bundle\n * const tw = createTw({\n * mode: 'minimal',\n * })\n *\n * // With Tailwind prefix\n * const tw = createTw({\n * prefix: 'tw-',\n * })\n *\n * tw('tw-p-4 tw-p-8') // => 'tw-p-8'\n *\n * // Disable caching\n * const tw = createTw({\n * cacheSize: 0,\n * })\n *\n * // Disable merging entirely (just join classes)\n * const tw = createTw({\n * mode: false,\n * })\n * ```\n */\n\nfunction createTw(config: TwConfig = {}): (...inputs: ClassValue[]) => string {\n // Validate config\n if (config.cacheSize !== undefined && config.cacheSize < 0) {\n throw new Error(\"tw-mrg: cacheSize must be non-negative\");\n }\n\n const {\n prefix = \"\",\n cacheSize = 500,\n mode = \"full\",\n extend,\n override,\n } = config;\n\n if (mode === false) {\n return function noMergeTw(...inputs: ClassValue[]): string {\n return flattenClassValues(...inputs);\n };\n }\n\n const baseConfig =\n mode === \"minimal\" ? defaultMinimalConfig : defaultFullConfig;\n const groupConfig = buildGroupConfig(baseConfig, extend, override);\n\n const trie = new PrefixTrie();\n const exactMatches = new Map<string, PrefixEntry>();\n\n for (const [pfx, entry] of Object.entries(groupConfig.prefixes)) {\n trie.insert(pfx, entry);\n }\n\n for (const [className, entry] of Object.entries(groupConfig.exactMatches)) {\n exactMatches.set(className, entry);\n }\n\n const cache =\n cacheSize > 0 ? new LRUCache<string, string>(cacheSize) : null;\n\n /**\n * Classifies a utility class into a group.\n */\n\n function classifyUtility(utility: string): {\n group: string | null;\n specificity: number;\n } {\n const unprefixed =\n prefix && utility.startsWith(prefix)\n ? utility.slice(prefix.length)\n : utility;\n\n const exact = exactMatches.get(unprefixed);\n if (exact) {\n return { group: exact.groupId, specificity: exact.specificity };\n }\n\n const prefixMatch = trie.findLongestMatch(unprefixed);\n if (prefixMatch) {\n return {\n group: prefixMatch.entry.groupId,\n specificity: prefixMatch.entry.specificity,\n };\n }\n\n for (const { pattern, groupId, specificity } of groupConfig.patterns) {\n if (pattern.test(unprefixed)) {\n return { group: groupId, specificity };\n }\n }\n\n return { group: null, specificity: 1 };\n }\n\n /**\n * Gets conflicting groups for a group ID.\n */\n\n function getConflicts(groupId: string): string[] {\n return groupConfig.conflicts[groupId] ?? [];\n }\n\n return function customTw(...inputs: ClassValue[]): string {\n if (inputs.length === 0) return \"\";\n\n const classString = flattenClassValues(...inputs);\n if (!classString) return \"\";\n if (!classString.includes(\" \")) return classString;\n\n if (cache) {\n const cached = cache.get(classString);\n if (cached !== undefined) return cached;\n }\n\n const classes = splitClasses(classString);\n const tokens: ClassToken[] = new Array(classes.length);\n\n for (let i = 0; i < classes.length; i++) {\n const parsed = parseClassBase(classes[i], i);\n\n // Handle arbitrary values\n if (parsed.isArbitrary) {\n const group = parsed.arbitraryProperty?.startsWith(\"--\")\n ? \"arbitrary-css-var\"\n : `arbitrary-${parsed.arbitraryProperty}`;\n tokens[i] = {\n raw: parsed.raw,\n modifiers: parsed.modifiers,\n modifierKey: parsed.modifierKey,\n hasImportant: parsed.hasImportant,\n utility: parsed.utility,\n group,\n isArbitrary: true,\n arbitraryProperty: parsed.arbitraryProperty,\n specificity: SPECIFICITY.ARBITRARY,\n position: parsed.position,\n };\n } else {\n // Classify using custom classifier\n const { group, specificity } = classifyUtility(\n parsed.utilityForClassification,\n );\n tokens[i] = {\n raw: parsed.raw,\n modifiers: parsed.modifiers,\n modifierKey: parsed.modifierKey,\n hasImportant: parsed.hasImportant,\n utility: parsed.utility,\n group,\n isArbitrary: false,\n specificity,\n position: parsed.position,\n };\n }\n }\n\n // Use shared resolver with custom conflict function\n const kept = resolveWithCustomConflicts(tokens, getConflicts);\n\n // Build result string directly without intermediate array\n let result = \"\";\n for (let i = 0; i < tokens.length; i++) {\n if (kept.has(i)) {\n result = result ? result + \" \" + tokens[i].raw : tokens[i].raw;\n }\n }\n\n if (cache) {\n cache.set(classString, result);\n }\n\n return result;\n };\n}\n\n/**\n * Adds class group patterns to config.\n */\n\nfunction addClassGroups(\n config: ClassGroupConfig,\n classGroups: Record<string, (string | RegExp)[]>,\n addSelfConflict: boolean,\n): void {\n for (const [id, patterns] of Object.entries(classGroups)) {\n for (const p of patterns) {\n if (p instanceof RegExp) {\n config.patterns.push({\n pattern: p,\n groupId: id,\n specificity: 1,\n });\n } else {\n config.exactMatches[p] = { groupId: id, specificity: 1 };\n }\n }\n if (addSelfConflict && config.conflicts[id] === undefined) {\n config.conflicts[id] = [id];\n }\n }\n}\n\n/**\n * Builds group configuration from base + extensions + overrides.\n */\n\nfunction buildGroupConfig(\n base: ClassGroupConfig,\n extend?: TwConfig[\"extend\"],\n override?: TwConfig[\"override\"],\n): ClassGroupConfig {\n const config: ClassGroupConfig = {\n prefixes: { ...base.prefixes },\n exactMatches: { ...base.exactMatches },\n patterns: [...base.patterns],\n conflicts: { ...base.conflicts },\n };\n\n if (override?.classGroups) {\n addClassGroups(config, override.classGroups, false);\n }\n\n if (extend?.classGroups) {\n addClassGroups(config, extend.classGroups, true);\n }\n\n if (extend?.conflictingClassGroups) {\n for (const [id, conflicts] of Object.entries(\n extend.conflictingClassGroups,\n )) {\n const existing = config.conflicts[id] as string[] | undefined;\n config.conflicts[id] =\n existing !== undefined\n ? [...new Set([...existing, ...conflicts])]\n : conflicts;\n }\n }\n\n if (override?.conflictingClassGroups) {\n Object.assign(config.conflicts, override.conflictingClassGroups);\n }\n\n if (extend?.prefixes) {\n for (const [pfx, entry] of Object.entries(extend.prefixes)) {\n config.prefixes[pfx] = {\n groupId: entry.groupId,\n specificity: entry.specificity ?? 1,\n };\n }\n }\n\n return config;\n}\n\nexport { createTw };\n","'use client'\n\nimport type { ClassValue } from './types'\nimport { createTw } from './create-tw'\nimport { getMergeMode } from './class-groups'\nimport { flattenClassValues } from './parser'\n\n/**\n * Default tw() function.\n * Uses the full class group configuration.\n *\n * Respects the global merge mode set by setMergeMode().\n * For customization (prefix, custom groups, etc.), use createTw() instead.\n */\n\n// Create internal merge function for 'full' mode\nconst twMerge = createTw({ mode: 'full' })\n\nfunction tw(...inputs: ClassValue[]): string {\n // Check if merging is disabled globally\n if (getMergeMode() === false) {\n return flattenClassValues(...inputs)\n }\n return twMerge(...inputs)\n}\n\nexport { tw }\n","import type { ClassValue } from './types'\nimport { flattenClassValues } from './parser'\n\n/**\n * Joins class values without conflict resolution (clsx-style).\n * Faster than `tw()` when conflicts don't need resolving.\n *\n * @example\n * twJoin('base', isActive && 'active', { hidden: isHidden })\n * twJoin('p-4', 'p-8') // => 'p-4 p-8' (both preserved, unlike tw)\n */\n\nfunction twJoin(...inputs: ClassValue[]): string {\n return flattenClassValues(...inputs)\n}\n\nexport { twJoin }\n","/**\n * CSS Generator using Tailwind's design system.\n * Works with any Tailwind v4 project - no config required.\n */\n\nimport { __unstable__loadDesignSystem } from 'tailwindcss'\nimport { TAILWIND_CSS_MAP } from './tailwind-css'\n\ninterface DesignSystem {\n candidatesToCss(classes: string[]): (string | null)[]\n resolveThemeValue(path: string, forceInline?: boolean): string | undefined\n /** Returns class order as BigInt (null for invalid classes) */\n getClassOrder(classes: string[]): [string, bigint | null][]\n /** Canonicalizes classes (e.g., mt-2 mr-2 mb-2 ml-2 → m-2) */\n canonicalizeCandidates(candidates: string[], options?: Record<string, unknown>): string[]\n}\n\nlet designSystem: DesignSystem | null = null\nlet initPromise: Promise<void> | null = null\n\nexport interface CSSGeneratorOptions {\n /**\n * Custom CSS to initialize the design system with.\n * Defaults to '@import \"tailwindcss\";' which includes full default theme.\n */\n \n css?: string\n \n /**\n * Base path for resolving relative @import statements.\n * Relative imports like '../public/base.css' will be fetched from the server.\n * @default '/src/' (assumes CSS is in src directory)\n */\n \n basePath?: string\n}\n\n/**\n * Regex patterns for resolving @import statements.\n * Matches: @import \"path\"; or @import 'path';\n * Does NOT match: @import url(...) which are external URLs\n */\n\nconst IMPORT_REGEX = /@import\\s+[\"']([^\"']+)[\"']\\s*;?/g\n\n/**\n * Resolves a relative path against a base path.\n * Handles Vite's public directory (public/* served at root).\n */\n\nfunction resolvePath(basePath: string, relativePath: string): string {\n // Handle './' prefix\n if (relativePath.startsWith('./')) {\n relativePath = relativePath.slice(2)\n }\n\n // Split paths into segments\n const baseSegments = basePath.split('/').filter(Boolean)\n const relativeSegments = relativePath.split('/').filter(Boolean)\n\n // Remove filename from base if it has an extension\n if (baseSegments.length > 0 && baseSegments[baseSegments.length - 1].includes('.')) {\n baseSegments.pop()\n }\n\n // Process relative segments\n for (const segment of relativeSegments) {\n if (segment === '..') {\n baseSegments.pop()\n } else if (segment !== '.') {\n baseSegments.push(segment)\n }\n }\n\n let resolved = '/' + baseSegments.join('/')\n\n // Vite serves public/ directory at root\n if (resolved.startsWith('/public/')) {\n resolved = resolved.slice(7) // Remove '/public' prefix\n }\n\n return resolved\n}\n\n/**\n * Fetches CSS content from a URL, with caching.\n */\n\nconst fetchCache = new Map<string, Promise<string>>()\n\nasync function fetchCSS(url: string): Promise<string> {\n const cached = fetchCache.get(url)\n if (cached) return cached\n\n const promise = fetch(url)\n .then(res => {\n if (!res.ok) throw new Error(`Failed to fetch ${url}: ${res.status}`)\n return res.text()\n })\n .catch(err => {\n console.warn(`[tw-mrg] Failed to fetch CSS: ${url}`, err)\n return `/* [tw-mrg] Failed to fetch: ${url} */`\n })\n\n fetchCache.set(url, promise)\n return promise\n}\n\n/**\n * Resolves @import statements in CSS by inlining bundled Tailwind CSS\n * and fetching relative imports.\n */\n\nasync function resolveImports(css: string, basePath: string): Promise<string> {\n const imports: Array<{ match: string; importPath: string; start: number; end: number }> = []\n\n // Find all imports\n let match\n while ((match = IMPORT_REGEX.exec(css)) !== null) {\n imports.push({\n match: match[0],\n importPath: match[1],\n start: match.index,\n end: match.index + match[0].length\n })\n }\n IMPORT_REGEX.lastIndex = 0 // Reset regex state\n\n if (imports.length === 0) return css\n\n // Process imports in reverse order to preserve indices\n let result = css\n for (let i = imports.length - 1; i >= 0; i--) {\n const { importPath, start, end } = imports[i]\n let replacement: string\n\n // Check bundled Tailwind CSS first\n const tailwindContent = TAILWIND_CSS_MAP[importPath]\n if (tailwindContent) {\n replacement = await resolveImports(tailwindContent, basePath)\n }\n // Skip URL imports (fonts, external resources)\n else if (importPath.startsWith('http') || importPath.startsWith('//') || importPath.startsWith('url(')) {\n replacement = `/* [tw-mrg] Skipped URL import: ${importPath} */`\n }\n // Fetch relative imports\n else if (importPath.startsWith('./') || importPath.startsWith('../') || !importPath.includes(':')) {\n const resolvedUrl = resolvePath(basePath, importPath)\n const content = await fetchCSS(resolvedUrl)\n // Recursively resolve imports in fetched content\n replacement = await resolveImports(content, resolvedUrl)\n }\n else {\n replacement = `/* [tw-mrg] Unknown import: ${importPath} */`\n }\n\n result = result.slice(0, start) + replacement + result.slice(end)\n }\n\n return result\n}\n\n/**\n * Initialize the CSS generator.\n * Call once at app startup before using twPrefix().\n *\n * @example\n * // Basic usage (uses Tailwind defaults)\n * await initCSSGenerator()\n *\n * @example\n * // With custom theme\n * await initCSSGenerator({\n * css: `\n * @import \"tailwindcss\";\n * @theme {\n * --color-brand: #ff6600;\n * }\n * `\n * })\n */\nexport async function initCSSGenerator(options: CSSGeneratorOptions = {}): Promise<void> {\n if (designSystem) return\n if (initPromise) return initPromise\n\n const rawCss = options.css ?? '@import \"tailwindcss\";'\n const basePath = options.basePath ?? '/src/'\n\n initPromise = (async () => {\n // Resolve @import statements before passing to Tailwind\n // This fetches relative imports and inlines bundled Tailwind CSS\n const css = await resolveImports(rawCss, basePath)\n designSystem = await __unstable__loadDesignSystem(css)\n })()\n\n return initPromise\n}\n\n/** Generate CSS for a single Tailwind class. Returns null if invalid or uninitialized. */\nexport function generateCSS(className: string): string | null {\n if (!designSystem) return null\n const [css] = designSystem.candidatesToCss([className])\n return css ?? null\n}\n\n/** Generate CSS for multiple classes at once (more efficient than repeated generateCSS calls). */\nexport function generateCSSBatch(classNames: string[]): (string | null)[] {\n if (!designSystem) return classNames.map(() => null)\n return designSystem.candidatesToCss(classNames)\n}\n\nexport function isInitialized(): boolean {\n return designSystem !== null\n}\n\n/** Get a theme value by path (e.g., '--color-red-500' → 'oklch(63.7% 0.237 25.331)'). */\nexport function getThemeValue(path: string): string | undefined {\n if (!designSystem) return undefined\n return designSystem.resolveThemeValue(path)\n}\n\n/**\n * Validates if a class is a valid Tailwind utility.\n * Returns true if the class produces CSS output.\n *\n * @example\n * isValidClass('p-4') // => true\n * isValidClass('invalid-class') // => false\n */\n\nexport function isValidClass(className: string): boolean {\n if (!designSystem) return false\n const [css] = designSystem.candidatesToCss([className])\n return css !== null\n}\n\n/**\n * Validates multiple classes at once.\n * Returns an array of booleans indicating validity.\n *\n * @example\n * validateClasses(['p-4', 'invalid', 'm-2']) // => [true, false, true]\n */\n\nexport function validateClasses(classNames: string[]): boolean[] {\n if (!designSystem) return classNames.map(() => false)\n return designSystem.candidatesToCss(classNames).map(css => css !== null)\n}\n\n/**\n * Gets the sort order for classes (useful for deterministic ordering).\n * Returns null for invalid classes.\n *\n * @example\n * getClassOrder(['p-4', 'm-2']) // => [['p-4', 123n], ['m-2', 456n]]\n */\n\nexport function getClassOrder(classNames: string[]): [string, bigint | null][] {\n if (!designSystem) return classNames.map(c => [c, null])\n return designSystem.getClassOrder(classNames)\n}\n\n/**\n * Canonicalizes classes by collapsing redundant utilities.\n * For example, mt-2 mr-2 mb-2 ml-2 → m-2\n *\n * Note: Requires the CSS generator to be initialized.\n *\n * @example\n * canonicalizeClasses(['mt-2', 'mr-2', 'mb-2', 'ml-2']) // => ['m-2']\n */\n\nexport function canonicalizeClasses(classNames: string[]): string[] {\n if (!designSystem) return classNames\n return designSystem.canonicalizeCandidates(classNames)\n}\n","// Auto-generated by scripts/bundle-tailwind-css.js\n// Do not edit manually\n\nexport const TAILWIND_INDEX_CSS = \"@layer theme, base, components, utilities;\\n\\n@layer theme {\\n @theme default {\\n --font-sans:\\n ui-sans-serif, system-ui, sans-serif, \\\"Apple Color Emoji\\\",\\n \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\";\\n --font-serif: ui-serif, Georgia, Cambria, \\\"Times New Roman\\\", Times, serif;\\n --font-mono:\\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\",\\n \\\"Courier New\\\", monospace;\\n\\n --color-red-50: oklch(97.1% 0.013 17.38);\\n --color-red-100: oklch(93.6% 0.032 17.717);\\n --color-red-200: oklch(88.5% 0.062 18.334);\\n --color-red-300: oklch(80.8% 0.114 19.571);\\n --color-red-400: oklch(70.4% 0.191 22.216);\\n --color-red-500: oklch(63.7% 0.237 25.331);\\n --color-red-600: oklch(57.7% 0.245 27.325);\\n --color-red-700: oklch(50.5% 0.213 27.518);\\n --color-red-800: oklch(44.4% 0.177 26.899);\\n --color-red-900: oklch(39.6% 0.141 25.723);\\n --color-red-950: oklch(25.8% 0.092 26.042);\\n\\n --color-orange-50: oklch(98% 0.016 73.684);\\n --color-orange-100: oklch(95.4% 0.038 75.164);\\n --color-orange-200: oklch(90.1% 0.076 70.697);\\n --color-orange-300: oklch(83.7% 0.128 66.29);\\n --color-orange-400: oklch(75% 0.183 55.934);\\n --color-orange-500: oklch(70.5% 0.213 47.604);\\n --color-orange-600: oklch(64.6% 0.222 41.116);\\n --color-orange-700: oklch(55.3% 0.195 38.402);\\n --color-orange-800: oklch(47% 0.157 37.304);\\n --color-orange-900: oklch(40.8% 0.123 38.172);\\n --color-orange-950: oklch(26.6% 0.079 36.259);\\n\\n --color-amber-50: oklch(98.7% 0.022 95.277);\\n --color-amber-100: oklch(96.2% 0.059 95.617);\\n --color-amber-200: oklch(92.4% 0.12 95.746);\\n --color-amber-300: oklch(87.9% 0.169 91.605);\\n --color-amber-400: oklch(82.8% 0.189 84.429);\\n --color-amber-500: oklch(76.9% 0.188 70.08);\\n --color-amber-600: oklch(66.6% 0.179 58.318);\\n --color-amber-700: oklch(55.5% 0.163 48.998);\\n --color-amber-800: oklch(47.3% 0.137 46.201);\\n --color-amber-900: oklch(41.4% 0.112 45.904);\\n --color-amber-950: oklch(27.9% 0.077 45.635);\\n\\n --color-yellow-50: oklch(98.7% 0.026 102.212);\\n --color-yellow-100: oklch(97.3% 0.071 103.193);\\n --color-yellow-200: oklch(94.5% 0.129 101.54);\\n --color-yellow-300: oklch(90.5% 0.182 98.111);\\n --color-yellow-400: oklch(85.2% 0.199 91.936);\\n --color-yellow-500: oklch(79.5% 0.184 86.047);\\n --color-yellow-600: oklch(68.1% 0.162 75.834);\\n --color-yellow-700: oklch(55.4% 0.135 66.442);\\n --color-yellow-800: oklch(47.6% 0.114 61.907);\\n --color-yellow-900: oklch(42.1% 0.095 57.708);\\n --color-yellow-950: oklch(28.6% 0.066 53.813);\\n\\n --color-lime-50: oklch(98.6% 0.031 120.757);\\n --color-lime-100: oklch(96.7% 0.067 122.328);\\n --color-lime-200: oklch(93.8% 0.127 124.321);\\n --color-lime-300: oklch(89.7% 0.196 126.665);\\n --color-lime-400: oklch(84.1% 0.238 128.85);\\n --color-lime-500: oklch(76.8% 0.233 130.85);\\n --color-lime-600: oklch(64.8% 0.2 131.684);\\n --color-lime-700: oklch(53.2% 0.157 131.589);\\n --color-lime-800: oklch(45.3% 0.124 130.933);\\n --color-lime-900: oklch(40.5% 0.101 131.063);\\n --color-lime-950: oklch(27.4% 0.072 132.109);\\n\\n --color-green-50: oklch(98.2% 0.018 155.826);\\n --color-green-100: oklch(96.2% 0.044 156.743);\\n --color-green-200: oklch(92.5% 0.084 155.995);\\n --color-green-300: oklch(87.1% 0.15 154.449);\\n --color-green-400: oklch(79.2% 0.209 151.711);\\n --color-green-500: oklch(72.3% 0.219 149.579);\\n --color-green-600: oklch(62.7% 0.194 149.214);\\n --color-green-700: oklch(52.7% 0.154 150.069);\\n --color-green-800: oklch(44.8% 0.119 151.328);\\n --color-green-900: oklch(39.3% 0.095 152.535);\\n --color-green-950: oklch(26.6% 0.065 152.934);\\n\\n --color-emerald-50: oklch(97.9% 0.021 166.113);\\n --color-emerald-100: oklch(95% 0.052 163.051);\\n --color-emerald-200: oklch(90.5% 0.093 164.15);\\n --color-emerald-300: oklch(84.5% 0.143 164.978);\\n --color-emerald-400: oklch(76.5% 0.177 163.223);\\n --color-emerald-500: oklch(69.6% 0.17 162.48);\\n --color-emerald-600: oklch(59.6% 0.145 163.225);\\n --color-emerald-700: oklch(50.8% 0.118 165.612);\\n --color-emerald-800: oklch(43.2% 0.095 166.913);\\n --color-emerald-900: oklch(37.8% 0.077 168.94);\\n --color-emerald-950: oklch(26.2% 0.051 172.552);\\n\\n --color-teal-50: oklch(98.4% 0.014 180.72);\\n --color-teal-100: oklch(95.3% 0.051 180.801);\\n --color-teal-200: oklch(91% 0.096 180.426);\\n --color-teal-300: oklch(85.5% 0.138 181.071);\\n --color-teal-400: oklch(77.7% 0.152 181.912);\\n --color-teal-500: oklch(70.4% 0.14 182.503);\\n --color-teal-600: oklch(60% 0.118 184.704);\\n --color-teal-700: oklch(51.1% 0.096 186.391);\\n --color-teal-800: oklch(43.7% 0.078 188.216);\\n --color-teal-900: oklch(38.6% 0.063 188.416);\\n --color-teal-950: oklch(27.7% 0.046 192.524);\\n\\n --color-cyan-50: oklch(98.4% 0.019 200.873);\\n --color-cyan-100: oklch(95.6% 0.045 203.388);\\n --color-cyan-200: oklch(91.7% 0.08 205.041);\\n --color-cyan-300: oklch(86.5% 0.127 207.078);\\n --color-cyan-400: oklch(78.9% 0.154 211.53);\\n --color-cyan-500: oklch(71.5% 0.143 215.221);\\n --color-cyan-600: oklch(60.9% 0.126 221.723);\\n --color-cyan-700: oklch(52% 0.105 223.128);\\n --color-cyan-800: oklch(45% 0.085 224.283);\\n --color-cyan-900: oklch(39.8% 0.07 227.392);\\n --color-cyan-950: oklch(30.2% 0.056 229.695);\\n\\n --color-sky-50: oklch(97.7% 0.013 236.62);\\n --color-sky-100: oklch(95.1% 0.026 236.824);\\n --color-sky-200: oklch(90.1% 0.058 230.902);\\n --color-sky-300: oklch(82.8% 0.111 230.318);\\n --color-sky-400: oklch(74.6% 0.16 232.661);\\n --color-sky-500: oklch(68.5% 0.169 237.323);\\n --color-sky-600: oklch(58.8% 0.158 241.966);\\n --color-sky-700: oklch(50% 0.134 242.749);\\n --color-sky-800: oklch(44.3% 0.11 240.79);\\n --color-sky-900: oklch(39.1% 0.09 240.876);\\n --color-sky-950: oklch(29.3% 0.066 243.157);\\n\\n --color-blue-50: oklch(97% 0.014 254.604);\\n --color-blue-100: oklch(93.2% 0.032 255.585);\\n --color-blue-200: oklch(88.2% 0.059 254.128);\\n --color-blue-300: oklch(80.9% 0.105 251.813);\\n --color-blue-400: oklch(70.7% 0.165 254.624);\\n --color-blue-500: oklch(62.3% 0.214 259.815);\\n --color-blue-600: oklch(54.6% 0.245 262.881);\\n --color-blue-700: oklch(48.8% 0.243 264.376);\\n --color-blue-800: oklch(42.4% 0.199 265.638);\\n --color-blue-900: oklch(37.9% 0.146 265.522);\\n --color-blue-950: oklch(28.2% 0.091 267.935);\\n\\n --color-indigo-50: oklch(96.2% 0.018 272.314);\\n --color-indigo-100: oklch(93% 0.034 272.788);\\n --color-indigo-200: oklch(87% 0.065 274.039);\\n --color-indigo-300: oklch(78.5% 0.115 274.713);\\n --color-indigo-400: oklch(67.3% 0.182 276.935);\\n --color-indigo-500: oklch(58.5% 0.233 277.117);\\n --color-indigo-600: oklch(51.1% 0.262 276.966);\\n --color-indigo-700: oklch(45.7% 0.24 277.023);\\n --color-indigo-800: oklch(39.8% 0.195 277.366);\\n --color-indigo-900: oklch(35.9% 0.144 278.697);\\n --color-indigo-950: oklch(25.7% 0.09 281.288);\\n\\n --color-violet-50: oklch(96.9% 0.016 293.756);\\n --color-violet-100: oklch(94.3% 0.029 294.588);\\n --color-violet-200: oklch(89.4% 0.057 293.283);\\n --color-violet-300: oklch(81.1% 0.111 293.571);\\n --color-violet-400: oklch(70.2% 0.183 293.541);\\n --color-violet-500: oklch(60.6% 0.25 292.717);\\n --color-violet-600: oklch(54.1% 0.281 293.009);\\n --color-violet-700: oklch(49.1% 0.27 292.581);\\n --color-violet-800: oklch(43.2% 0.232 292.759);\\n --color-violet-900: oklch(38% 0.189 293.745);\\n --color-violet-950: oklch(28.3% 0.141 291.089);\\n\\n --color-purple-50: oklch(97.7% 0.014 308.299);\\n --color-purple-100: oklch(94.6% 0.033 307.174);\\n --color-purple-200: oklch(90.2% 0.063 306.703);\\n --color-purple-300: oklch(82.7% 0.119 306.383);\\n --color-purple-400: oklch(71.4% 0.203 305.504);\\n --color-purple-500: oklch(62.7% 0.265 303.9);\\n --color-purple-600: oklch(55.8% 0.288 302.321);\\n --color-purple-700: oklch(49.6% 0.265 301.924);\\n --color-purple-800: oklch(43.8% 0.218 303.724);\\n --color-purple-900: oklch(38.1% 0.176 304.987);\\n --color-purple-950: oklch(29.1% 0.149 302.717);\\n\\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\\n --color-fuchsia-200: oklch(90.3% 0.076 319.62);\\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\\n --color-fuchsia-400: oklch(74% 0.238 322.16);\\n --color-fuchsia-500: oklch(66.7% 0.295 322.15);\\n --color-fuchsia-600: oklch(59.1% 0.293 322.896);\\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\\n --color-fuchsia-800: oklch(45.2% 0.211 324.591);\\n --color-fuchsia-900: oklch(40.1% 0.17 325.612);\\n --color-fuchsia-950: oklch(29.3% 0.136 325.661);\\n\\n --color-pink-50: oklch(97.1% 0.014 343.198);\\n --color-pink-100: oklch(94.8% 0.028 342.258);\\n --color-pink-200: oklch(89.9% 0.061 343.231);\\n --color-pink-300: oklch(82.3% 0.12 346.018);\\n --color-pink-400: oklch(71.8% 0.202 349.761);\\n --color-pink-500: oklch(65.6% 0.241 354.308);\\n --color-pink-600: oklch(59.2% 0.249 0.584);\\n --color-pink-700: oklch(52.5% 0.223 3.958);\\n --color-pink-800: oklch(45.9% 0.187 3.815);\\n --color-pink-900: oklch(40.8% 0.153 2.432);\\n --color-pink-950: oklch(28.4% 0.109 3.907);\\n\\n --color-rose-50: oklch(96.9% 0.015 12.422);\\n --color-rose-100: oklch(94.1% 0.03 12.58);\\n --color-rose-200: oklch(89.2% 0.058 10.001);\\n --color-rose-300: oklch(81% 0.117 11.638);\\n --color-rose-400: oklch(71.2% 0.194 13.428);\\n --color-rose-500: oklch(64.5% 0.246 16.439);\\n --color-rose-600: oklch(58.6% 0.253 17.585);\\n --color-rose-700: oklch(51.4% 0.222 16.935);\\n --color-rose-800: oklch(45.5% 0.188 13.697);\\n --color-rose-900: oklch(41% 0.159 10.272);\\n --color-rose-950: oklch(27.1% 0.105 12.094);\\n\\n --color-slate-50: oklch(98.4% 0.003 247.858);\\n --color-slate-100: oklch(96.8% 0.007 247.896);\\n --color-slate-200: oklch(92.9% 0.013 255.508);\\n --color-slate-300: oklch(86.9% 0.022 252.894);\\n --color-slate-400: oklch(70.4% 0.04 256.788);\\n --color-slate-500: oklch(55.4% 0.046 257.417);\\n --color-slate-600: oklch(44.6% 0.043 257.281);\\n --color-slate-700: oklch(37.2% 0.044 257.287);\\n --color-slate-800: oklch(27.9% 0.041 260.031);\\n --color-slate-900: oklch(20.8% 0.042 265.755);\\n --color-slate-950: oklch(12.9% 0.042 264.695);\\n\\n --color-gray-50: oklch(98.5% 0.002 247.839);\\n --color-gray-100: oklch(96.7% 0.003 264.542);\\n --color-gray-200: oklch(92.8% 0.006 264.531);\\n --color-gray-300: oklch(87.2% 0.01 258.338);\\n --color-gray-400: oklch(70.7% 0.022 261.325);\\n --color-gray-500: oklch(55.1% 0.027 264.364);\\n --color-gray-600: oklch(44.6% 0.03 256.802);\\n --color-gray-700: oklch(37.3% 0.034 259.733);\\n --color-gray-800: oklch(27.8% 0.033 256.848);\\n --color-gray-900: oklch(21% 0.034 264.665);\\n --color-gray-950: oklch(13% 0.028 261.692);\\n\\n --color-zinc-50: oklch(98.5% 0 0);\\n --color-zinc-100: oklch(96.7% 0.001 286.375);\\n --color-zinc-200: oklch(92% 0.004 286.32);\\n --color-zinc-300: oklch(87.1% 0.006 286.286);\\n --color-zinc-400: oklch(70.5% 0.015 286.067);\\n --color-zinc-500: oklch(55.2% 0.016 285.938);\\n --color-zinc-600: oklch(44.2% 0.017 285.786);\\n --color-zinc-700: oklch(37% 0.013 285.805);\\n --color-zinc-800: oklch(27.4% 0.006 286.033);\\n --color-zinc-900: oklch(21% 0.006 285.885);\\n --color-zinc-950: oklch(14.1% 0.005 285.823);\\n\\n --color-neutral-50: oklch(98.5% 0 0);\\n --color-neutral-100: oklch(97% 0 0);\\n --color-neutral-200: oklch(92.2% 0 0);\\n --color-neutral-300: oklch(87% 0 0);\\n --color-neutral-400: oklch(70.8% 0 0);\\n --color-neutral-500: oklch(55.6% 0 0);\\n --color-neutral-600: oklch(43.9% 0 0);\\n --color-neutral-700: oklch(37.1% 0 0);\\n --color-neutral-800: oklch(26.9% 0 0);\\n --color-neutral-900: oklch(20.5% 0 0);\\n --color-neutral-950: oklch(14.5% 0 0);\\n\\n --color-stone-50: oklch(98.5% 0.001 106.423);\\n --color-stone-100: oklch(97% 0.001 106.424);\\n --color-stone-200: oklch(92.3% 0.003 48.717);\\n --color-stone-300: oklch(86.9% 0.005 56.366);\\n --color-stone-400: oklch(70.9% 0.01 56.259);\\n --color-stone-500: oklch(55.3% 0.013 58.071);\\n --color-stone-600: oklch(44.4% 0.011 73.639);\\n --color-stone-700: oklch(37.4% 0.01 67.558);\\n --color-stone-800: oklch(26.8% 0.007 34.298);\\n --color-stone-900: oklch(21.6% 0.006 56.043);\\n --color-stone-950: oklch(14.7% 0.004 49.25);\\n\\n --color-black: #000;\\n --color-white: #fff;\\n\\n --spacing: 0.25rem;\\n\\n --breakpoint-sm: 40rem;\\n --breakpoint-md: 48rem;\\n --breakpoint-lg: 64rem;\\n --breakpoint-xl: 80rem;\\n --breakpoint-2xl: 96rem;\\n\\n --container-3xs: 16rem;\\n --container-2xs: 18rem;\\n --container-xs: 20rem;\\n --container-sm: 24rem;\\n --container-md: 28rem;\\n --container-lg: 32rem;\\n --container-xl: 36rem;\\n --container-2xl: 42rem;\\n --container-3xl: 48rem;\\n --container-4xl: 56rem;\\n --container-5xl: 64rem;\\n --container-6xl: 72rem;\\n --container-7xl: 80rem;\\n\\n --text-xs: 0.75rem;\\n --text-xs--line-height: calc(1 / 0.75);\\n --text-sm: 0.875rem;\\n --text-sm--line-height: calc(1.25 / 0.875);\\n --text-base: 1rem;\\n --text-base--line-height: calc(1.5 / 1);\\n --text-lg: 1.125rem;\\n --text-lg--line-height: calc(1.75 / 1.125);\\n --text-xl: 1.25rem;\\n --text-xl--line-height: calc(1.75 / 1.25);\\n --text-2xl: 1.5rem;\\n --text-2xl--line-height: calc(2 / 1.5);\\n --text-3xl: 1.875rem;\\n --text-3xl--line-height: calc(2.25 / 1.875);\\n --text-4xl: 2.25rem;\\n --text-4xl--line-height: calc(2.5 / 2.25);\\n --text-5xl: 3rem;\\n --text-5xl--line-height: 1;\\n --text-6xl: 3.75rem;\\n --text-6xl--line-height: 1;\\n --text-7xl: 4.5rem;\\n --text-7xl--line-height: 1;\\n --text-8xl: 6rem;\\n --text-8xl--line-height: 1;\\n --text-9xl: 8rem;\\n --text-9xl--line-height: 1;\\n\\n --font-weight-thin: 100;\\n --font-weight-extralight: 200;\\n --font-weight-light: 300;\\n --font-weight-normal: 400;\\n --font-weight-medium: 500;\\n --font-weight-semibold: 600;\\n --font-weight-bold: 700;\\n --font-weight-extrabold: 800;\\n --font-weight-black: 900;\\n\\n --tracking-tighter: -0.05em;\\n --tracking-tight: -0.025em;\\n --tracking-normal: 0em;\\n --tracking-wide: 0.025em;\\n --tracking-wider: 0.05em;\\n --tracking-widest: 0.1em;\\n\\n --leading-tight: 1.25;\\n --leading-snug: 1.375;\\n --leading-normal: 1.5;\\n --leading-relaxed: 1.625;\\n --leading-loose: 2;\\n\\n --radius-xs: 0.125rem;\\n --radius-sm: 0.25rem;\\n --radius-md: 0.375rem;\\n --radius-lg: 0.5rem;\\n --radius-xl: 0.75rem;\\n --radius-2xl: 1rem;\\n --radius-3xl: 1.5rem;\\n --radius-4xl: 2rem;\\n\\n --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\\n --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\\n --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --shadow-md:\\n 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\\n --shadow-lg:\\n 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --shadow-xl:\\n 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\\n\\n --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\\n --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\\n --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\\n\\n --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\\n --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\\n --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\\n --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\\n --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\\n\\n --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15);\\n --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2);\\n --text-shadow-sm:\\n 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075),\\n 0px 2px 2px rgb(0 0 0 / 0.075);\\n --text-shadow-md:\\n 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1),\\n 0px 2px 4px rgb(0 0 0 / 0.1);\\n --text-shadow-lg:\\n 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1),\\n 0px 4px 8px rgb(0 0 0 / 0.1);\\n\\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\\n\\n --animate-spin: spin 1s linear infinite;\\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\\n --animate-bounce: bounce 1s infinite;\\n\\n @keyframes spin {\\n to {\\n transform: rotate(360deg);\\n }\\n }\\n\\n @keyframes ping {\\n 75%,\\n 100% {\\n transform: scale(2);\\n opacity: 0;\\n }\\n }\\n\\n @keyframes pulse {\\n 50% {\\n opacity: 0.5;\\n }\\n }\\n\\n @keyframes bounce {\\n 0%,\\n 100% {\\n transform: translateY(-25%);\\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n }\\n\\n 50% {\\n transform: none;\\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n }\\n }\\n\\n --blur-xs: 4px;\\n --blur-sm: 8px;\\n --blur-md: 12px;\\n --blur-lg: 16px;\\n --blur-xl: 24px;\\n --blur-2xl: 40px;\\n --blur-3xl: 64px;\\n\\n --perspective-dramatic: 100px;\\n --perspective-near: 300px;\\n --perspective-normal: 500px;\\n --perspective-midrange: 800px;\\n --perspective-distant: 1200px;\\n\\n --aspect-video: 16 / 9;\\n\\n --default-transition-duration: 150ms;\\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n --default-font-family: --theme(--font-sans, initial);\\n --default-font-feature-settings: --theme(\\n --font-sans--font-feature-settings,\\n initial\\n );\\n --default-font-variation-settings: --theme(\\n --font-sans--font-variation-settings,\\n initial\\n );\\n --default-mono-font-family: --theme(--font-mono, initial);\\n --default-mono-font-feature-settings: --theme(\\n --font-mono--font-feature-settings,\\n initial\\n );\\n --default-mono-font-variation-settings: --theme(\\n --font-mono--font-variation-settings,\\n initial\\n );\\n }\\n\\n /* Deprecated */\\n @theme default inline reference {\\n --blur: 8px;\\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\\n --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);\\n --radius: 0.25rem;\\n --max-width-prose: 65ch;\\n }\\n}\\n\\n@layer base {\\n /*\\n 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\\n 2. Remove default margins and padding\\n 3. Reset all borders.\\n*/\\n\\n *,\\n ::after,\\n ::before,\\n ::backdrop,\\n ::file-selector-button {\\n box-sizing: border-box; /* 1 */\\n margin: 0; /* 2 */\\n padding: 0; /* 2 */\\n border: 0 solid; /* 3 */\\n }\\n\\n /*\\n 1. Use a consistent sensible line-height in all browsers.\\n 2. Prevent adjustments of font size after orientation changes in iOS.\\n 3. Use a more readable tab size.\\n 4. Use the user's configured `sans` font-family by default.\\n 5. Use the user's configured `sans` font-feature-settings by default.\\n 6. Use the user's configured `sans` font-variation-settings by default.\\n 7. Disable tap highlights on iOS.\\n*/\\n\\n html,\\n :host {\\n line-height: 1.5; /* 1 */\\n -webkit-text-size-adjust: 100%; /* 2 */\\n tab-size: 4; /* 3 */\\n font-family: --theme(\\n --default-font-family,\\n ui-sans-serif,\\n system-ui,\\n sans-serif,\\n \\\"Apple Color Emoji\\\",\\n \\\"Segoe UI Emoji\\\",\\n \\\"Segoe UI Symbol\\\",\\n \\\"Noto Color Emoji\\\"\\n ); /* 4 */\\n font-feature-settings: --theme(\\n --default-font-feature-settings,\\n normal\\n ); /* 5 */\\n font-variation-settings: --theme(\\n --default-font-variation-settings,\\n normal\\n ); /* 6 */\\n -webkit-tap-highlight-color: transparent; /* 7 */\\n }\\n\\n /*\\n 1. Add the correct height in Firefox.\\n 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\\n 3. Reset the default border style to a 1px solid border.\\n*/\\n\\n hr {\\n height: 0; /* 1 */\\n color: inherit; /* 2 */\\n border-top-width: 1px; /* 3 */\\n }\\n\\n /*\\n Add the correct text decoration in Chrome, Edge, and Safari.\\n*/\\n\\n abbr:where([title]) {\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n }\\n\\n /*\\n Remove the default font size and weight for headings.\\n*/\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n font-size: inherit;\\n font-weight: inherit;\\n }\\n\\n /*\\n Reset links to optimize for opt-in styling instead of opt-out.\\n*/\\n\\n a {\\n color: inherit;\\n -webkit-text-decoration: inherit;\\n text-decoration: inherit;\\n }\\n\\n /*\\n Add the correct font weight in Edge and Safari.\\n*/\\n\\n b,\\n strong {\\n font-weight: bolder;\\n }\\n\\n /*\\n 1. Use the user's configured `mono` font-family by default.\\n 2. Use the user's configured `mono` font-feature-settings by default.\\n 3. Use the user's configured `mono` font-variation-settings by default.\\n 4. Correct the odd `em` font sizing in all browsers.\\n*/\\n\\n code,\\n kbd,\\n samp,\\n pre {\\n font-family: --theme(\\n --default-mono-font-family,\\n ui-monospace,\\n SFMono-Regular,\\n Menlo,\\n Monaco,\\n Consolas,\\n \\\"Liberation Mono\\\",\\n \\\"Courier New\\\",\\n monospace\\n ); /* 1 */\\n font-feature-settings: --theme(\\n --default-mono-font-feature-settings,\\n normal\\n ); /* 2 */\\n font-variation-settings: --theme(\\n --default-mono-font-variation-settings,\\n normal\\n ); /* 3 */\\n font-size: 1em; /* 4 */\\n }\\n\\n /*\\n Add the correct font size in all browsers.\\n*/\\n\\n small {\\n font-size: 80%;\\n }\\n\\n /*\\n Prevent `sub` and `sup` elements from affecting the line height in all browsers.\\n*/\\n\\n sub,\\n sup {\\n font-size: 75%;\\n line-height: 0;\\n position: relative;\\n vertical-align: baseline;\\n }\\n\\n sub {\\n bottom: -0.25em;\\n }\\n\\n sup {\\n top: -0.5em;\\n }\\n\\n /*\\n 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\\n 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\\n 3. Remove gaps between table borders by default.\\n*/\\n\\n table {\\n text-indent: 0; /* 1 */\\n border-color: inherit; /* 2 */\\n border-collapse: collapse; /* 3 */\\n }\\n\\n /*\\n Use the modern Firefox focus style for all focusable elements.\\n*/\\n\\n :-moz-focusring {\\n outline: auto;\\n }\\n\\n /*\\n Add the correct vertical alignment in Chrome and Firefox.\\n*/\\n\\n progress {\\n vertical-align: baseline;\\n }\\n\\n /*\\n Add the correct display in Chrome and Safari.\\n*/\\n\\n summary {\\n display: list-item;\\n }\\n\\n /*\\n Make lists unstyled by default.\\n*/\\n\\n ol,\\n ul,\\n menu {\\n list-style: none;\\n }\\n\\n /*\\n 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\\n 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\\n This can trigger a poorly considered lint error in some tools but is included by design.\\n*/\\n\\n img,\\n svg,\\n video,\\n canvas,\\n audio,\\n iframe,\\n embed,\\n object {\\n display: block; /* 1 */\\n vertical-align: middle; /* 2 */\\n }\\n\\n /*\\n Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\\n*/\\n\\n img,\\n video {\\n max-width: 100%;\\n height: auto;\\n }\\n\\n /*\\n 1. Inherit font styles in all browsers.\\n 2. Remove border radius in all browsers.\\n 3. Remove background color in all browsers.\\n 4. Ensure consistent opacity for disabled states in all browsers.\\n*/\\n\\n button,\\n input,\\n select,\\n optgroup,\\n textarea,\\n ::file-selector-button {\\n font: inherit; /* 1 */\\n font-feature-settings: inherit; /* 1 */\\n font-variation-settings: inherit; /* 1 */\\n letter-spacing: inherit; /* 1 */\\n color: inherit; /* 1 */\\n border-radius: 0; /* 2 */\\n background-color: transparent; /* 3 */\\n opacity: 1; /* 4 */\\n }\\n\\n /*\\n Restore default font weight.\\n*/\\n\\n :where(select:is([multiple], [size])) optgroup {\\n font-weight: bolder;\\n }\\n\\n /*\\n Restore indentation.\\n*/\\n\\n :where(select:is([multiple], [size])) optgroup option {\\n padding-inline-start: 20px;\\n }\\n\\n /*\\n Restore space after button.\\n*/\\n\\n ::file-selector-button {\\n margin-inline-end: 4px;\\n }\\n\\n /*\\n Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\\n*/\\n\\n ::placeholder {\\n opacity: 1;\\n }\\n\\n /*\\n Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not\\n crash when using `color-mix(…)` with `currentcolor`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)\\n*/\\n\\n @supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or\\n (contain-intrinsic-size: 1px) /* Safari 17+ */ {\\n ::placeholder {\\n color: color-mix(in oklab, currentcolor 50%, transparent);\\n }\\n }\\n\\n /*\\n Prevent resizing textareas horizontally by default.\\n*/\\n\\n textarea {\\n resize: vertical;\\n }\\n\\n /*\\n Remove the inner padding in Chrome and Safari on macOS.\\n*/\\n\\n ::-webkit-search-decoration {\\n -webkit-appearance: none;\\n }\\n\\n /*\\n 1. Ensure date/time inputs have the same height when empty in iOS Safari.\\n 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.\\n*/\\n\\n ::-webkit-date-and-time-value {\\n min-height: 1lh; /* 1 */\\n text-align: inherit; /* 2 */\\n }\\n\\n /*\\n Prevent height from changing on date/time inputs in macOS Safari when the input is set to `display: block`.\\n*/\\n\\n ::-webkit-datetime-edit {\\n display: inline-flex;\\n }\\n\\n /*\\n Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.\\n*/\\n\\n ::-webkit-datetime-edit-fields-wrapper {\\n padding: 0;\\n }\\n\\n ::-webkit-datetime-edit,\\n ::-webkit-datetime-edit-year-field,\\n ::-webkit-datetime-edit-month-field,\\n ::-webkit-datetime-edit-day-field,\\n ::-webkit-datetime-edit-hour-field,\\n ::-webkit-datetime-edit-minute-field,\\n ::-webkit-datetime-edit-second-field,\\n ::-webkit-datetime-edit-millisecond-field,\\n ::-webkit-datetime-edit-meridiem-field {\\n padding-block: 0;\\n }\\n\\n /*\\n Center dropdown marker shown on inputs with paired `<datalist>`s in Chrome. (https://github.com/tailwindlabs/tailwindcss/issues/18499)\\n*/\\n\\n ::-webkit-calendar-picker-indicator {\\n line-height: 1;\\n }\\n\\n /*\\n Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\\n*/\\n\\n :-moz-ui-invalid {\\n box-shadow: none;\\n }\\n\\n /*\\n Correct the inability to style the border radius in iOS Safari.\\n*/\\n\\n button,\\n input:where([type=\\\"button\\\"], [type=\\\"reset\\\"], [type=\\\"submit\\\"]),\\n ::file-selector-button {\\n appearance: button;\\n }\\n\\n /*\\n Correct the cursor style of increment and decrement buttons in Safari.\\n*/\\n\\n ::-webkit-inner-spin-button,\\n ::-webkit-outer-spin-button {\\n height: auto;\\n }\\n\\n /*\\n Make elements with the HTML hidden attribute stay hidden by default.\\n*/\\n\\n [hidden]:where(:not([hidden=\\\"until-found\\\"])) {\\n display: none !important;\\n }\\n}\\n\\n@layer utilities {\\n @tailwind utilities;\\n}\\n\"\n\nexport const TAILWIND_PREFLIGHT_CSS = \"/*\\n 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\\n 2. Remove default margins and padding\\n 3. Reset all borders.\\n*/\\n\\n*,\\n::after,\\n::before,\\n::backdrop,\\n::file-selector-button {\\n box-sizing: border-box; /* 1 */\\n margin: 0; /* 2 */\\n padding: 0; /* 2 */\\n border: 0 solid; /* 3 */\\n}\\n\\n/*\\n 1. Use a consistent sensible line-height in all browsers.\\n 2. Prevent adjustments of font size after orientation changes in iOS.\\n 3. Use a more readable tab size.\\n 4. Use the user's configured `sans` font-family by default.\\n 5. Use the user's configured `sans` font-feature-settings by default.\\n 6. Use the user's configured `sans` font-variation-settings by default.\\n 7. Disable tap highlights on iOS.\\n*/\\n\\nhtml,\\n:host {\\n line-height: 1.5; /* 1 */\\n -webkit-text-size-adjust: 100%; /* 2 */\\n tab-size: 4; /* 3 */\\n font-family: --theme(\\n --default-font-family,\\n ui-sans-serif,\\n system-ui,\\n sans-serif,\\n 'Apple Color Emoji',\\n 'Segoe UI Emoji',\\n 'Segoe UI Symbol',\\n 'Noto Color Emoji'\\n ); /* 4 */\\n font-feature-settings: --theme(--default-font-feature-settings, normal); /* 5 */\\n font-variation-settings: --theme(--default-font-variation-settings, normal); /* 6 */\\n -webkit-tap-highlight-color: transparent; /* 7 */\\n}\\n\\n/*\\n 1. Add the correct height in Firefox.\\n 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\\n 3. Reset the default border style to a 1px solid border.\\n*/\\n\\nhr {\\n height: 0; /* 1 */\\n color: inherit; /* 2 */\\n border-top-width: 1px; /* 3 */\\n}\\n\\n/*\\n Add the correct text decoration in Chrome, Edge, and Safari.\\n*/\\n\\nabbr:where([title]) {\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n}\\n\\n/*\\n Remove the default font size and weight for headings.\\n*/\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n font-size: inherit;\\n font-weight: inherit;\\n}\\n\\n/*\\n Reset links to optimize for opt-in styling instead of opt-out.\\n*/\\n\\na {\\n color: inherit;\\n -webkit-text-decoration: inherit;\\n text-decoration: inherit;\\n}\\n\\n/*\\n Add the correct font weight in Edge and Safari.\\n*/\\n\\nb,\\nstrong {\\n font-weight: bolder;\\n}\\n\\n/*\\n 1. Use the user's configured `mono` font-family by default.\\n 2. Use the user's configured `mono` font-feature-settings by default.\\n 3. Use the user's configured `mono` font-variation-settings by default.\\n 4. Correct the odd `em` font sizing in all browsers.\\n*/\\n\\ncode,\\nkbd,\\nsamp,\\npre {\\n font-family: --theme(\\n --default-mono-font-family,\\n ui-monospace,\\n SFMono-Regular,\\n Menlo,\\n Monaco,\\n Consolas,\\n 'Liberation Mono',\\n 'Courier New',\\n monospace\\n ); /* 1 */\\n font-feature-settings: --theme(--default-mono-font-feature-settings, normal); /* 2 */\\n font-variation-settings: --theme(--default-mono-font-variation-settings, normal); /* 3 */\\n font-size: 1em; /* 4 */\\n}\\n\\n/*\\n Add the correct font size in all browsers.\\n*/\\n\\nsmall {\\n font-size: 80%;\\n}\\n\\n/*\\n Prevent `sub` and `sup` elements from affecting the line height in all browsers.\\n*/\\n\\nsub,\\nsup {\\n font-size: 75%;\\n line-height: 0;\\n position: relative;\\n vertical-align: baseline;\\n}\\n\\nsub {\\n bottom: -0.25em;\\n}\\n\\nsup {\\n top: -0.5em;\\n}\\n\\n/*\\n 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\\n 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\\n 3. Remove gaps between table borders by default.\\n*/\\n\\ntable {\\n text-indent: 0; /* 1 */\\n border-color: inherit; /* 2 */\\n border-collapse: collapse; /* 3 */\\n}\\n\\n/*\\n Use the modern Firefox focus style for all focusable elements.\\n*/\\n\\n:-moz-focusring {\\n outline: auto;\\n}\\n\\n/*\\n Add the correct vertical alignment in Chrome and Firefox.\\n*/\\n\\nprogress {\\n vertical-align: baseline;\\n}\\n\\n/*\\n Add the correct display in Chrome and Safari.\\n*/\\n\\nsummary {\\n display: list-item;\\n}\\n\\n/*\\n Make lists unstyled by default.\\n*/\\n\\nol,\\nul,\\nmenu {\\n list-style: none;\\n}\\n\\n/*\\n 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\\n 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\\n This can trigger a poorly considered lint error in some tools but is included by design.\\n*/\\n\\nimg,\\nsvg,\\nvideo,\\ncanvas,\\naudio,\\niframe,\\nembed,\\nobject {\\n display: block; /* 1 */\\n vertical-align: middle; /* 2 */\\n}\\n\\n/*\\n Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\\n*/\\n\\nimg,\\nvideo {\\n max-width: 100%;\\n height: auto;\\n}\\n\\n/*\\n 1. Inherit font styles in all browsers.\\n 2. Remove border radius in all browsers.\\n 3. Remove background color in all browsers.\\n 4. Ensure consistent opacity for disabled states in all browsers.\\n*/\\n\\nbutton,\\ninput,\\nselect,\\noptgroup,\\ntextarea,\\n::file-selector-button {\\n font: inherit; /* 1 */\\n font-feature-settings: inherit; /* 1 */\\n font-variation-settings: inherit; /* 1 */\\n letter-spacing: inherit; /* 1 */\\n color: inherit; /* 1 */\\n border-radius: 0; /* 2 */\\n background-color: transparent; /* 3 */\\n opacity: 1; /* 4 */\\n}\\n\\n/*\\n Restore default font weight.\\n*/\\n\\n:where(select:is([multiple], [size])) optgroup {\\n font-weight: bolder;\\n}\\n\\n/*\\n Restore indentation.\\n*/\\n\\n:where(select:is([multiple], [size])) optgroup option {\\n padding-inline-start: 20px;\\n}\\n\\n/*\\n Restore space after button.\\n*/\\n\\n::file-selector-button {\\n margin-inline-end: 4px;\\n}\\n\\n/*\\n Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\\n*/\\n\\n::placeholder {\\n opacity: 1;\\n}\\n\\n/*\\n Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not\\n crash when using `color-mix(…)` with `currentcolor`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)\\n*/\\n\\n@supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or\\n (contain-intrinsic-size: 1px) /* Safari 17+ */ {\\n ::placeholder {\\n color: color-mix(in oklab, currentcolor 50%, transparent);\\n }\\n}\\n\\n/*\\n Prevent resizing textareas horizontally by default.\\n*/\\n\\ntextarea {\\n resize: vertical;\\n}\\n\\n/*\\n Remove the inner padding in Chrome and Safari on macOS.\\n*/\\n\\n::-webkit-search-decoration {\\n -webkit-appearance: none;\\n}\\n\\n/*\\n 1. Ensure date/time inputs have the same height when empty in iOS Safari.\\n 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.\\n*/\\n\\n::-webkit-date-and-time-value {\\n min-height: 1lh; /* 1 */\\n text-align: inherit; /* 2 */\\n}\\n\\n/*\\n Prevent height from changing on date/time inputs in macOS Safari when the input is set to `display: block`.\\n*/\\n\\n::-webkit-datetime-edit {\\n display: inline-flex;\\n}\\n\\n/*\\n Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.\\n*/\\n\\n::-webkit-datetime-edit-fields-wrapper {\\n padding: 0;\\n}\\n\\n::-webkit-datetime-edit,\\n::-webkit-datetime-edit-year-field,\\n::-webkit-datetime-edit-month-field,\\n::-webkit-datetime-edit-day-field,\\n::-webkit-datetime-edit-hour-field,\\n::-webkit-datetime-edit-minute-field,\\n::-webkit-datetime-edit-second-field,\\n::-webkit-datetime-edit-millisecond-field,\\n::-webkit-datetime-edit-meridiem-field {\\n padding-block: 0;\\n}\\n\\n/*\\n Center dropdown marker shown on inputs with paired `<datalist>`s in Chrome. (https://github.com/tailwindlabs/tailwindcss/issues/18499)\\n*/\\n\\n::-webkit-calendar-picker-indicator {\\n line-height: 1;\\n}\\n\\n/*\\n Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\\n*/\\n\\n:-moz-ui-invalid {\\n box-shadow: none;\\n}\\n\\n/*\\n Correct the inability to style the border radius in iOS Safari.\\n*/\\n\\nbutton,\\ninput:where([type='button'], [type='reset'], [type='submit']),\\n::file-selector-button {\\n appearance: button;\\n}\\n\\n/*\\n Correct the cursor style of increment and decrement buttons in Safari.\\n*/\\n\\n::-webkit-inner-spin-button,\\n::-webkit-outer-spin-button {\\n height: auto;\\n}\\n\\n/*\\n Make elements with the HTML hidden attribute stay hidden by default.\\n*/\\n\\n[hidden]:where(:not([hidden='until-found'])) {\\n display: none !important;\\n}\\n\"\n\nexport const TAILWIND_THEME_CSS = \"@theme default {\\n --font-sans:\\n ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\\n 'Noto Color Emoji';\\n --font-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;\\n --font-mono:\\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',\\n monospace;\\n\\n --color-red-50: oklch(97.1% 0.013 17.38);\\n --color-red-100: oklch(93.6% 0.032 17.717);\\n --color-red-200: oklch(88.5% 0.062 18.334);\\n --color-red-300: oklch(80.8% 0.114 19.571);\\n --color-red-400: oklch(70.4% 0.191 22.216);\\n --color-red-500: oklch(63.7% 0.237 25.331);\\n --color-red-600: oklch(57.7% 0.245 27.325);\\n --color-red-700: oklch(50.5% 0.213 27.518);\\n --color-red-800: oklch(44.4% 0.177 26.899);\\n --color-red-900: oklch(39.6% 0.141 25.723);\\n --color-red-950: oklch(25.8% 0.092 26.042);\\n\\n --color-orange-50: oklch(98% 0.016 73.684);\\n --color-orange-100: oklch(95.4% 0.038 75.164);\\n --color-orange-200: oklch(90.1% 0.076 70.697);\\n --color-orange-300: oklch(83.7% 0.128 66.29);\\n --color-orange-400: oklch(75% 0.183 55.934);\\n --color-orange-500: oklch(70.5% 0.213 47.604);\\n --color-orange-600: oklch(64.6% 0.222 41.116);\\n --color-orange-700: oklch(55.3% 0.195 38.402);\\n --color-orange-800: oklch(47% 0.157 37.304);\\n --color-orange-900: oklch(40.8% 0.123 38.172);\\n --color-orange-950: oklch(26.6% 0.079 36.259);\\n\\n --color-amber-50: oklch(98.7% 0.022 95.277);\\n --color-amber-100: oklch(96.2% 0.059 95.617);\\n --color-amber-200: oklch(92.4% 0.12 95.746);\\n --color-amber-300: oklch(87.9% 0.169 91.605);\\n --color-amber-400: oklch(82.8% 0.189 84.429);\\n --color-amber-500: oklch(76.9% 0.188 70.08);\\n --color-amber-600: oklch(66.6% 0.179 58.318);\\n --color-amber-700: oklch(55.5% 0.163 48.998);\\n --color-amber-800: oklch(47.3% 0.137 46.201);\\n --color-amber-900: oklch(41.4% 0.112 45.904);\\n --color-amber-950: oklch(27.9% 0.077 45.635);\\n\\n --color-yellow-50: oklch(98.7% 0.026 102.212);\\n --color-yellow-100: oklch(97.3% 0.071 103.193);\\n --color-yellow-200: oklch(94.5% 0.129 101.54);\\n --color-yellow-300: oklch(90.5% 0.182 98.111);\\n --color-yellow-400: oklch(85.2% 0.199 91.936);\\n --color-yellow-500: oklch(79.5% 0.184 86.047);\\n --color-yellow-600: oklch(68.1% 0.162 75.834);\\n --color-yellow-700: oklch(55.4% 0.135 66.442);\\n --color-yellow-800: oklch(47.6% 0.114 61.907);\\n --color-yellow-900: oklch(42.1% 0.095 57.708);\\n --color-yellow-950: oklch(28.6% 0.066 53.813);\\n\\n --color-lime-50: oklch(98.6% 0.031 120.757);\\n --color-lime-100: oklch(96.7% 0.067 122.328);\\n --color-lime-200: oklch(93.8% 0.127 124.321);\\n --color-lime-300: oklch(89.7% 0.196 126.665);\\n --color-lime-400: oklch(84.1% 0.238 128.85);\\n --color-lime-500: oklch(76.8% 0.233 130.85);\\n --color-lime-600: oklch(64.8% 0.2 131.684);\\n --color-lime-700: oklch(53.2% 0.157 131.589);\\n --color-lime-800: oklch(45.3% 0.124 130.933);\\n --color-lime-900: oklch(40.5% 0.101 131.063);\\n --color-lime-950: oklch(27.4% 0.072 132.109);\\n\\n --color-green-50: oklch(98.2% 0.018 155.826);\\n --color-green-100: oklch(96.2% 0.044 156.743);\\n --color-green-200: oklch(92.5% 0.084 155.995);\\n --color-green-300: oklch(87.1% 0.15 154.449);\\n --color-green-400: oklch(79.2% 0.209 151.711);\\n --color-green-500: oklch(72.3% 0.219 149.579);\\n --color-green-600: oklch(62.7% 0.194 149.214);\\n --color-green-700: oklch(52.7% 0.154 150.069);\\n --color-green-800: oklch(44.8% 0.119 151.328);\\n --color-green-900: oklch(39.3% 0.095 152.535);\\n --color-green-950: oklch(26.6% 0.065 152.934);\\n\\n --color-emerald-50: oklch(97.9% 0.021 166.113);\\n --color-emerald-100: oklch(95% 0.052 163.051);\\n --color-emerald-200: oklch(90.5% 0.093 164.15);\\n --color-emerald-300: oklch(84.5% 0.143 164.978);\\n --color-emerald-400: oklch(76.5% 0.177 163.223);\\n --color-emerald-500: oklch(69.6% 0.17 162.48);\\n --color-emerald-600: oklch(59.6% 0.145 163.225);\\n --color-emerald-700: oklch(50.8% 0.118 165.612);\\n --color-emerald-800: oklch(43.2% 0.095 166.913);\\n --color-emerald-900: oklch(37.8% 0.077 168.94);\\n --color-emerald-950: oklch(26.2% 0.051 172.552);\\n\\n --color-teal-50: oklch(98.4% 0.014 180.72);\\n --color-teal-100: oklch(95.3% 0.051 180.801);\\n --color-teal-200: oklch(91% 0.096 180.426);\\n --color-teal-300: oklch(85.5% 0.138 181.071);\\n --color-teal-400: oklch(77.7% 0.152 181.912);\\n --color-teal-500: oklch(70.4% 0.14 182.503);\\n --color-teal-600: oklch(60% 0.118 184.704);\\n --color-teal-700: oklch(51.1% 0.096 186.391);\\n --color-teal-800: oklch(43.7% 0.078 188.216);\\n --color-teal-900: oklch(38.6% 0.063 188.416);\\n --color-teal-950: oklch(27.7% 0.046 192.524);\\n\\n --color-cyan-50: oklch(98.4% 0.019 200.873);\\n --color-cyan-100: oklch(95.6% 0.045 203.388);\\n --color-cyan-200: oklch(91.7% 0.08 205.041);\\n --color-cyan-300: oklch(86.5% 0.127 207.078);\\n --color-cyan-400: oklch(78.9% 0.154 211.53);\\n --color-cyan-500: oklch(71.5% 0.143 215.221);\\n --color-cyan-600: oklch(60.9% 0.126 221.723);\\n --color-cyan-700: oklch(52% 0.105 223.128);\\n --color-cyan-800: oklch(45% 0.085 224.283);\\n --color-cyan-900: oklch(39.8% 0.07 227.392);\\n --color-cyan-950: oklch(30.2% 0.056 229.695);\\n\\n --color-sky-50: oklch(97.7% 0.013 236.62);\\n --color-sky-100: oklch(95.1% 0.026 236.824);\\n --color-sky-200: oklch(90.1% 0.058 230.902);\\n --color-sky-300: oklch(82.8% 0.111 230.318);\\n --color-sky-400: oklch(74.6% 0.16 232.661);\\n --color-sky-500: oklch(68.5% 0.169 237.323);\\n --color-sky-600: oklch(58.8% 0.158 241.966);\\n --color-sky-700: oklch(50% 0.134 242.749);\\n --color-sky-800: oklch(44.3% 0.11 240.79);\\n --color-sky-900: oklch(39.1% 0.09 240.876);\\n --color-sky-950: oklch(29.3% 0.066 243.157);\\n\\n --color-blue-50: oklch(97% 0.014 254.604);\\n --color-blue-100: oklch(93.2% 0.032 255.585);\\n --color-blue-200: oklch(88.2% 0.059 254.128);\\n --color-blue-300: oklch(80.9% 0.105 251.813);\\n --color-blue-400: oklch(70.7% 0.165 254.624);\\n --color-blue-500: oklch(62.3% 0.214 259.815);\\n --color-blue-600: oklch(54.6% 0.245 262.881);\\n --color-blue-700: oklch(48.8% 0.243 264.376);\\n --color-blue-800: oklch(42.4% 0.199 265.638);\\n --color-blue-900: oklch(37.9% 0.146 265.522);\\n --color-blue-950: oklch(28.2% 0.091 267.935);\\n\\n --color-indigo-50: oklch(96.2% 0.018 272.314);\\n --color-indigo-100: oklch(93% 0.034 272.788);\\n --color-indigo-200: oklch(87% 0.065 274.039);\\n --color-indigo-300: oklch(78.5% 0.115 274.713);\\n --color-indigo-400: oklch(67.3% 0.182 276.935);\\n --color-indigo-500: oklch(58.5% 0.233 277.117);\\n --color-indigo-600: oklch(51.1% 0.262 276.966);\\n --color-indigo-700: oklch(45.7% 0.24 277.023);\\n --color-indigo-800: oklch(39.8% 0.195 277.366);\\n --color-indigo-900: oklch(35.9% 0.144 278.697);\\n --color-indigo-950: oklch(25.7% 0.09 281.288);\\n\\n --color-violet-50: oklch(96.9% 0.016 293.756);\\n --color-violet-100: oklch(94.3% 0.029 294.588);\\n --color-violet-200: oklch(89.4% 0.057 293.283);\\n --color-violet-300: oklch(81.1% 0.111 293.571);\\n --color-violet-400: oklch(70.2% 0.183 293.541);\\n --color-violet-500: oklch(60.6% 0.25 292.717);\\n --color-violet-600: oklch(54.1% 0.281 293.009);\\n --color-violet-700: oklch(49.1% 0.27 292.581);\\n --color-violet-800: oklch(43.2% 0.232 292.759);\\n --color-violet-900: oklch(38% 0.189 293.745);\\n --color-violet-950: oklch(28.3% 0.141 291.089);\\n\\n --color-purple-50: oklch(97.7% 0.014 308.299);\\n --color-purple-100: oklch(94.6% 0.033 307.174);\\n --color-purple-200: oklch(90.2% 0.063 306.703);\\n --color-purple-300: oklch(82.7% 0.119 306.383);\\n --color-purple-400: oklch(71.4% 0.203 305.504);\\n --color-purple-500: oklch(62.7% 0.265 303.9);\\n --color-purple-600: oklch(55.8% 0.288 302.321);\\n --color-purple-700: oklch(49.6% 0.265 301.924);\\n --color-purple-800: oklch(43.8% 0.218 303.724);\\n --color-purple-900: oklch(38.1% 0.176 304.987);\\n --color-purple-950: oklch(29.1% 0.149 302.717);\\n\\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\\n --color-fuchsia-200: oklch(90.3% 0.076 319.62);\\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\\n --color-fuchsia-400: oklch(74% 0.238 322.16);\\n --color-fuchsia-500: oklch(66.7% 0.295 322.15);\\n --color-fuchsia-600: oklch(59.1% 0.293 322.896);\\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\\n --color-fuchsia-800: oklch(45.2% 0.211 324.591);\\n --color-fuchsia-900: oklch(40.1% 0.17 325.612);\\n --color-fuchsia-950: oklch(29.3% 0.136 325.661);\\n\\n --color-pink-50: oklch(97.1% 0.014 343.198);\\n --color-pink-100: oklch(94.8% 0.028 342.258);\\n --color-pink-200: oklch(89.9% 0.061 343.231);\\n --color-pink-300: oklch(82.3% 0.12 346.018);\\n --color-pink-400: oklch(71.8% 0.202 349.761);\\n --color-pink-500: oklch(65.6% 0.241 354.308);\\n --color-pink-600: oklch(59.2% 0.249 0.584);\\n --color-pink-700: oklch(52.5% 0.223 3.958);\\n --color-pink-800: oklch(45.9% 0.187 3.815);\\n --color-pink-900: oklch(40.8% 0.153 2.432);\\n --color-pink-950: oklch(28.4% 0.109 3.907);\\n\\n --color-rose-50: oklch(96.9% 0.015 12.422);\\n --color-rose-100: oklch(94.1% 0.03 12.58);\\n --color-rose-200: oklch(89.2% 0.058 10.001);\\n --color-rose-300: oklch(81% 0.117 11.638);\\n --color-rose-400: oklch(71.2% 0.194 13.428);\\n --color-rose-500: oklch(64.5% 0.246 16.439);\\n --color-rose-600: oklch(58.6% 0.253 17.585);\\n --color-rose-700: oklch(51.4% 0.222 16.935);\\n --color-rose-800: oklch(45.5% 0.188 13.697);\\n --color-rose-900: oklch(41% 0.159 10.272);\\n --color-rose-950: oklch(27.1% 0.105 12.094);\\n\\n --color-slate-50: oklch(98.4% 0.003 247.858);\\n --color-slate-100: oklch(96.8% 0.007 247.896);\\n --color-slate-200: oklch(92.9% 0.013 255.508);\\n --color-slate-300: oklch(86.9% 0.022 252.894);\\n --color-slate-400: oklch(70.4% 0.04 256.788);\\n --color-slate-500: oklch(55.4% 0.046 257.417);\\n --color-slate-600: oklch(44.6% 0.043 257.281);\\n --color-slate-700: oklch(37.2% 0.044 257.287);\\n --color-slate-800: oklch(27.9% 0.041 260.031);\\n --color-slate-900: oklch(20.8% 0.042 265.755);\\n --color-slate-950: oklch(12.9% 0.042 264.695);\\n\\n --color-gray-50: oklch(98.5% 0.002 247.839);\\n --color-gray-100: oklch(96.7% 0.003 264.542);\\n --color-gray-200: oklch(92.8% 0.006 264.531);\\n --color-gray-300: oklch(87.2% 0.01 258.338);\\n --color-gray-400: oklch(70.7% 0.022 261.325);\\n --color-gray-500: oklch(55.1% 0.027 264.364);\\n --color-gray-600: oklch(44.6% 0.03 256.802);\\n --color-gray-700: oklch(37.3% 0.034 259.733);\\n --color-gray-800: oklch(27.8% 0.033 256.848);\\n --color-gray-900: oklch(21% 0.034 264.665);\\n --color-gray-950: oklch(13% 0.028 261.692);\\n\\n --color-zinc-50: oklch(98.5% 0 0);\\n --color-zinc-100: oklch(96.7% 0.001 286.375);\\n --color-zinc-200: oklch(92% 0.004 286.32);\\n --color-zinc-300: oklch(87.1% 0.006 286.286);\\n --color-zinc-400: oklch(70.5% 0.015 286.067);\\n --color-zinc-500: oklch(55.2% 0.016 285.938);\\n --color-zinc-600: oklch(44.2% 0.017 285.786);\\n --color-zinc-700: oklch(37% 0.013 285.805);\\n --color-zinc-800: oklch(27.4% 0.006 286.033);\\n --color-zinc-900: oklch(21% 0.006 285.885);\\n --color-zinc-950: oklch(14.1% 0.005 285.823);\\n\\n --color-neutral-50: oklch(98.5% 0 0);\\n --color-neutral-100: oklch(97% 0 0);\\n --color-neutral-200: oklch(92.2% 0 0);\\n --color-neutral-300: oklch(87% 0 0);\\n --color-neutral-400: oklch(70.8% 0 0);\\n --color-neutral-500: oklch(55.6% 0 0);\\n --color-neutral-600: oklch(43.9% 0 0);\\n --color-neutral-700: oklch(37.1% 0 0);\\n --color-neutral-800: oklch(26.9% 0 0);\\n --color-neutral-900: oklch(20.5% 0 0);\\n --color-neutral-950: oklch(14.5% 0 0);\\n\\n --color-stone-50: oklch(98.5% 0.001 106.423);\\n --color-stone-100: oklch(97% 0.001 106.424);\\n --color-stone-200: oklch(92.3% 0.003 48.717);\\n --color-stone-300: oklch(86.9% 0.005 56.366);\\n --color-stone-400: oklch(70.9% 0.01 56.259);\\n --color-stone-500: oklch(55.3% 0.013 58.071);\\n --color-stone-600: oklch(44.4% 0.011 73.639);\\n --color-stone-700: oklch(37.4% 0.01 67.558);\\n --color-stone-800: oklch(26.8% 0.007 34.298);\\n --color-stone-900: oklch(21.6% 0.006 56.043);\\n --color-stone-950: oklch(14.7% 0.004 49.25);\\n\\n --color-black: #000;\\n --color-white: #fff;\\n\\n --spacing: 0.25rem;\\n\\n --breakpoint-sm: 40rem;\\n --breakpoint-md: 48rem;\\n --breakpoint-lg: 64rem;\\n --breakpoint-xl: 80rem;\\n --breakpoint-2xl: 96rem;\\n\\n --container-3xs: 16rem;\\n --container-2xs: 18rem;\\n --container-xs: 20rem;\\n --container-sm: 24rem;\\n --container-md: 28rem;\\n --container-lg: 32rem;\\n --container-xl: 36rem;\\n --container-2xl: 42rem;\\n --container-3xl: 48rem;\\n --container-4xl: 56rem;\\n --container-5xl: 64rem;\\n --container-6xl: 72rem;\\n --container-7xl: 80rem;\\n\\n --text-xs: 0.75rem;\\n --text-xs--line-height: calc(1 / 0.75);\\n --text-sm: 0.875rem;\\n --text-sm--line-height: calc(1.25 / 0.875);\\n --text-base: 1rem;\\n --text-base--line-height: calc(1.5 / 1);\\n --text-lg: 1.125rem;\\n --text-lg--line-height: calc(1.75 / 1.125);\\n --text-xl: 1.25rem;\\n --text-xl--line-height: calc(1.75 / 1.25);\\n --text-2xl: 1.5rem;\\n --text-2xl--line-height: calc(2 / 1.5);\\n --text-3xl: 1.875rem;\\n --text-3xl--line-height: calc(2.25 / 1.875);\\n --text-4xl: 2.25rem;\\n --text-4xl--line-height: calc(2.5 / 2.25);\\n --text-5xl: 3rem;\\n --text-5xl--line-height: 1;\\n --text-6xl: 3.75rem;\\n --text-6xl--line-height: 1;\\n --text-7xl: 4.5rem;\\n --text-7xl--line-height: 1;\\n --text-8xl: 6rem;\\n --text-8xl--line-height: 1;\\n --text-9xl: 8rem;\\n --text-9xl--line-height: 1;\\n\\n --font-weight-thin: 100;\\n --font-weight-extralight: 200;\\n --font-weight-light: 300;\\n --font-weight-normal: 400;\\n --font-weight-medium: 500;\\n --font-weight-semibold: 600;\\n --font-weight-bold: 700;\\n --font-weight-extrabold: 800;\\n --font-weight-black: 900;\\n\\n --tracking-tighter: -0.05em;\\n --tracking-tight: -0.025em;\\n --tracking-normal: 0em;\\n --tracking-wide: 0.025em;\\n --tracking-wider: 0.05em;\\n --tracking-widest: 0.1em;\\n\\n --leading-tight: 1.25;\\n --leading-snug: 1.375;\\n --leading-normal: 1.5;\\n --leading-relaxed: 1.625;\\n --leading-loose: 2;\\n\\n --radius-xs: 0.125rem;\\n --radius-sm: 0.25rem;\\n --radius-md: 0.375rem;\\n --radius-lg: 0.5rem;\\n --radius-xl: 0.75rem;\\n --radius-2xl: 1rem;\\n --radius-3xl: 1.5rem;\\n --radius-4xl: 2rem;\\n\\n --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\\n --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\\n --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\\n\\n --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\\n --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\\n --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\\n\\n --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\\n --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\\n --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\\n --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\\n --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\\n\\n --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15);\\n --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2);\\n --text-shadow-sm:\\n 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075), 0px 2px 2px rgb(0 0 0 / 0.075);\\n --text-shadow-md:\\n 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1), 0px 2px 4px rgb(0 0 0 / 0.1);\\n --text-shadow-lg:\\n 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1), 0px 4px 8px rgb(0 0 0 / 0.1);\\n\\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\\n\\n --animate-spin: spin 1s linear infinite;\\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\\n --animate-bounce: bounce 1s infinite;\\n\\n @keyframes spin {\\n to {\\n transform: rotate(360deg);\\n }\\n }\\n\\n @keyframes ping {\\n 75%,\\n 100% {\\n transform: scale(2);\\n opacity: 0;\\n }\\n }\\n\\n @keyframes pulse {\\n 50% {\\n opacity: 0.5;\\n }\\n }\\n\\n @keyframes bounce {\\n 0%,\\n 100% {\\n transform: translateY(-25%);\\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n }\\n\\n 50% {\\n transform: none;\\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n }\\n }\\n\\n --blur-xs: 4px;\\n --blur-sm: 8px;\\n --blur-md: 12px;\\n --blur-lg: 16px;\\n --blur-xl: 24px;\\n --blur-2xl: 40px;\\n --blur-3xl: 64px;\\n\\n --perspective-dramatic: 100px;\\n --perspective-near: 300px;\\n --perspective-normal: 500px;\\n --perspective-midrange: 800px;\\n --perspective-distant: 1200px;\\n\\n --aspect-video: 16 / 9;\\n\\n --default-transition-duration: 150ms;\\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n --default-font-family: --theme(--font-sans, initial);\\n --default-font-feature-settings: --theme(--font-sans--font-feature-settings, initial);\\n --default-font-variation-settings: --theme(--font-sans--font-variation-settings, initial);\\n --default-mono-font-family: --theme(--font-mono, initial);\\n --default-mono-font-feature-settings: --theme(--font-mono--font-feature-settings, initial);\\n --default-mono-font-variation-settings: --theme(--font-mono--font-variation-settings, initial);\\n}\\n\\n/* Deprecated */\\n@theme default inline reference {\\n --blur: 8px;\\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\\n --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);\\n --radius: 0.25rem;\\n --max-width-prose: 65ch;\\n}\\n\"\n\nexport const TAILWIND_UTILITIES_CSS = \"@tailwind utilities;\\n\"\n\n/**\n * Map of import paths to CSS content.\n * Used by loadStylesheet to resolve @import statements.\n */\n\nexport const TAILWIND_CSS_MAP: Record<string, string> = {\n 'tailwindcss': TAILWIND_INDEX_CSS,\n 'tailwindcss/index.css': TAILWIND_INDEX_CSS,\n 'tailwindcss/preflight.css': TAILWIND_PREFLIGHT_CSS,\n 'tailwindcss/theme.css': TAILWIND_THEME_CSS,\n 'tailwindcss/utilities.css': TAILWIND_UTILITIES_CSS,\n}\n","\"use client\";\n\nlet styleElement: HTMLStyleElement | null = null;\nconst injectedClasses = new Set<string>();\nconst injectedProperties = new Set<string>();\n\n/**\n * Splits a CSS string containing multiple rules into individual rules.\n * Tailwind v4 can return multi-rule strings (e.g., class rule + @property rule).\n * Uses brace-counting to handle nested CSS correctly.\n */\n\nfunction splitCSSRules(css: string): string[] {\n // Fast path: no multi-rule indicators\n if (!css.includes(\"}\\n@\") && !css.includes(\"}\\n.\")) {\n return [css];\n }\n\n const rules: string[] = [];\n let braceDepth = 0;\n let ruleStart = 0;\n\n for (let i = 0; i < css.length; i++) {\n const char = css[i];\n if (char === \"{\") {\n braceDepth++;\n } else if (char === \"}\") {\n braceDepth--;\n if (braceDepth === 0) {\n const rule = css.slice(ruleStart, i + 1).trim();\n if (rule) rules.push(rule);\n ruleStart = i + 1;\n while (ruleStart < css.length && /\\s/.test(css[ruleStart])) {\n ruleStart++;\n }\n }\n }\n }\n return rules;\n}\n\n/**\n * Extracts property name from @property rule for deduplication.\n * @property rules should only be injected once per property name.\n */\n\nfunction extractPropertyName(rule: string): string | null {\n if (!rule.startsWith(\"@property \")) return null;\n const match = rule.match(/^@property\\s+(--[\\w-]+)/);\n return match ? match[1] : null;\n}\n\n/** Error handler for CSS injection failures */\ntype StyleInjectorErrorHandler = (error: Error, context: string) => void;\nlet errorHandler: StyleInjectorErrorHandler | null = null;\n\n/**\n * Sets a custom error handler for CSS injection failures.\n * Useful for debugging when CSS injection silently fails.\n *\n * @param handler - Error handler function, or null to disable\n *\n * @example\n * ```ts\n * setStyleInjectorErrorHandler((error, context) => {\n * console.warn(`CSS injection failed in ${context}:`, error)\n * })\n * ```\n */\n\nexport function setStyleInjectorErrorHandler(\n handler: StyleInjectorErrorHandler | null,\n): void {\n errorHandler = handler;\n}\n\nexport function getStyleElement(): HTMLStyleElement | null {\n if (typeof document === \"undefined\") return null;\n\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"tw-mrg-styles\";\n document.head.appendChild(styleElement);\n }\n return styleElement;\n}\n\n/**\n * Injects a CSS rule for a class.\n * Uses insertRule for better performance when available.\n * Handles multi-rule CSS strings from Tailwind v4 (e.g., class + @property rules).\n */\n\nexport function injectCSS(className: string, cssRule: string): void {\n if (injectedClasses.has(className)) return;\n\n const style = getStyleElement();\n if (!style) return;\n\n const sheet = style.sheet;\n const individualRules = splitCSSRules(cssRule);\n const failedRules: string[] = [];\n\n for (const rule of individualRules) {\n // Check for @property rules - dedupe by property name\n const propertyName = extractPropertyName(rule);\n if (propertyName) {\n if (injectedProperties.has(propertyName)) {\n continue; // Skip duplicate @property\n }\n injectedProperties.add(propertyName);\n }\n\n if (sheet) {\n try {\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n // Fall back to textContent if insertRule fails\n errorHandler?.(\n e instanceof Error ? e : new Error(String(e)),\n \"injectCSS\",\n );\n failedRules.push(rule);\n }\n } else {\n failedRules.push(rule);\n }\n }\n\n // Fallback: append failed rules to textContent\n if (failedRules.length > 0) {\n style.textContent += failedRules.join(\"\\n\") + \"\\n\";\n }\n\n injectedClasses.add(className);\n}\n\n/**\n * Batched injection for performance.\n * Uses insertRule when available, falls back to textContent.\n * Handles multi-rule CSS strings from Tailwind v4 (e.g., class + @property rules).\n */\n\nexport function injectCSSBatch(\n classNames: string[],\n cssRules: (string | null)[],\n): void {\n const style = getStyleElement();\n if (!style) return;\n\n const sheet = style.sheet;\n const useInsertRule = sheet !== null;\n\n // Collect rules that need to be injected via textContent fallback\n const rulesToInject: string[] = [];\n\n for (let i = 0; i < classNames.length; i++) {\n const className = classNames[i];\n const css = cssRules[i];\n\n if (css && className && !injectedClasses.has(className)) {\n // Split multi-rule CSS strings (e.g., class rule + @property rule)\n const individualRules = splitCSSRules(css);\n\n for (const rule of individualRules) {\n // Check for @property rules - dedupe by property name\n const propertyName = extractPropertyName(rule);\n if (propertyName) {\n if (injectedProperties.has(propertyName)) {\n continue; // Skip duplicate @property\n }\n injectedProperties.add(propertyName);\n }\n\n if (useInsertRule) {\n try {\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n // If insertRule fails, collect for textContent fallback\n errorHandler?.(\n e instanceof Error ? e : new Error(String(e)),\n \"injectCSSBatch\",\n );\n rulesToInject.push(rule);\n }\n } else {\n rulesToInject.push(rule);\n }\n }\n\n // Mark the class as injected after all its rules are processed\n injectedClasses.add(className);\n }\n }\n\n // Fallback: batch append to textContent\n if (rulesToInject.length > 0) {\n style.textContent += rulesToInject.join(\"\\n\") + \"\\n\";\n }\n}\n\nexport function hasInjectedClass(className: string): boolean {\n return injectedClasses.has(className);\n}\n\nexport function clearInjectedStyles(): void {\n if (styleElement) {\n // Clear both textContent and stylesheet rules\n const sheet = styleElement.sheet;\n if (sheet) {\n while (sheet.cssRules.length > 0) {\n sheet.deleteRule(0);\n }\n }\n styleElement.textContent = \"\";\n }\n injectedClasses.clear();\n injectedProperties.clear();\n}\n\nexport function getInjectedClasses(): string[] {\n return Array.from(injectedClasses);\n}\n\nexport function getInjectedProperties(): string[] {\n return Array.from(injectedProperties);\n}\n\n/**\n * Resets internal state. Only for testing.\n * @internal\n */\n\nexport function __resetForTesting(): void {\n styleElement = null;\n injectedClasses.clear();\n injectedProperties.clear();\n errorHandler = null;\n}\n","'use client'\n\nimport { generateCSSBatch, isInitialized } from './css-generator'\nimport { injectCSSBatch, hasInjectedClass } from './style-injector'\n\n/**\n * Bulk-prefix classes with a modifier.\n * Does not merge - use `tw()` to merge the result if needed.\n *\n * Supports two forms:\n * 1. **Simple form**: `twPrefix(modifier, classes)` - prefix all classes with a single modifier\n * 2. **Object form**: `twPrefix({ modifier: classes, ... })` - prefix multiple sets at once\n *\n * @param modifierOrObject - Either a modifier string (with trailing colon) or an object mapping modifiers to classes\n * @param classes - When using simple form, the classes to prefix\n * @returns Prefixed class string\n *\n * @example\n * ```tsx\n * // Simple form - prefix all classes with a modifier\n * twPrefix(\"hover:\", \"leading-none bg-white p-0\")\n * // => \"hover:leading-none hover:bg-white hover:p-0\"\n *\n * // Complex modifiers (group-hover, data attributes, etc.)\n * twPrefix(\"group-hover:\", \"opacity-100 scale-105\")\n * // => \"group-hover:opacity-100 group-hover:scale-105\"\n *\n * twPrefix(\"data-[state=open]:\", \"rotate-180\")\n * // => \"data-[state=open]:rotate-180\"\n *\n * // Object form - multiple modifiers at once\n * twPrefix({\n * \"hover:\": \"bg-white scale-105\",\n * \"focus:\": \"ring-2 ring-blue-500\",\n * \"group-hover:\": \"opacity-100\"\n * })\n * // => \"hover:bg-white hover:scale-105 focus:ring-2 focus:ring-blue-500 group-hover:opacity-100\"\n *\n * // Compose with tw() for merging\n * tw(\n * \"bg-gray-100\",\n * twPrefix(\"hover:\", \"bg-white\"),\n * twPrefix(\"focus:\", \"ring-2\")\n * )\n * // => \"bg-gray-100 hover:bg-white focus:ring-2\"\n *\n * // Stacked modifiers\n * twPrefix(\"hover:md:\", \"text-lg font-bold\")\n * // => \"hover:md:text-lg hover:md:font-bold\"\n * ```\n */\n\nconst CLASS_SPLIT_REGEX = /\\s+/\n\nlet hasWarnedAboutInit = false\n\nfunction twPrefix(modifier: string, classes: string): string\nfunction twPrefix(modifierMap: Record<string, string>): string\nfunction twPrefix(\n modifierOrMap: string | Record<string, string>,\n classes?: string\n): string {\n let composed: string\n let prefixedClassNames: string[] | null = null\n\n if (typeof modifierOrMap === 'object') {\n // Collect all prefixed class names for CSS injection\n const allPrefixed: string[] = []\n let result = ''\n for (const modifier in modifierOrMap) {\n if (Object.prototype.hasOwnProperty.call(modifierOrMap, modifier)) {\n const classString = modifierOrMap[modifier]\n if (classString) {\n const { str, classNames } = prefixClassesWithNames(modifier, classString)\n if (str) {\n result = result ? result + ' ' + str : str\n for (const cls of classNames) {\n allPrefixed.push(cls)\n }\n }\n }\n }\n }\n composed = result\n prefixedClassNames = allPrefixed\n } else {\n const { str, classNames } = prefixClassesWithNames(modifierOrMap, classes ?? '')\n composed = str\n prefixedClassNames = classNames\n }\n\n if (typeof window !== 'undefined' && prefixedClassNames.length > 0) {\n if (isInitialized()) {\n const newClassNames = prefixedClassNames.filter((cls) => !hasInjectedClass(cls))\n\n if (newClassNames.length > 0) {\n const cssRules = generateCSSBatch(newClassNames)\n injectCSSBatch(newClassNames, cssRules)\n }\n } else if (!hasWarnedAboutInit) {\n hasWarnedAboutInit = true\n console.warn(\n '[tw-mrg] twPrefix() was called but initCSSGenerator() has not been called. ' +\n 'Dynamic CSS injection is disabled. To enable it, call initCSSGenerator() at app startup:\\n\\n' +\n ' import { initCSSGenerator } from \"tw-mrg\";\\n' +\n ' await initCSSGenerator();\\n'\n )\n }\n }\n\n return composed\n}\n\n/**\n * Prefixes classes and returns both the string and class names array.\n * Avoids double splitting by returning both results.\n */\n\nfunction prefixClassesWithNames(modifier: string, classes: string): { str: string; classNames: string[] } {\n const classList = classes.split(CLASS_SPLIT_REGEX).filter(Boolean)\n if (classList.length === 0) return { str: '', classNames: [] }\n\n // Direct concatenation instead of map().join()\n const classNames: string[] = new Array(classList.length)\n let str = ''\n for (let i = 0; i < classList.length; i++) {\n const prefixed = modifier + classList[i]\n classNames[i] = prefixed\n str = str ? str + ' ' + prefixed : prefixed\n }\n return { str, classNames }\n}\n\nexport { twPrefix }\n","'use client'\n\nimport type {\n ClassValue,\n TwStatesConfig,\n VariantsSchema,\n VariantProps,\n TwStatesResult,\n CompoundVariant,\n} from './types'\nimport { tw } from './tw'\n\n/**\n * Creates a variant-based styling function (CVA-like) integrated with tw().\n *\n * @example\n * const button = twStates({\n * base: 'px-4 py-2 rounded',\n * variants: {\n * variant: { primary: 'bg-blue-500', secondary: 'bg-gray-200' },\n * size: { sm: 'text-sm', lg: 'text-lg' },\n * },\n * defaultVariants: { variant: 'primary', size: 'sm' },\n * })\n *\n * button() // uses defaults\n * button({ variant: 'secondary', size: 'lg', className: 'mt-4' })\n */\n\nfunction twStates<V extends VariantsSchema>(\n config: TwStatesConfig<V>\n): TwStatesResult<V> {\n const { base, variants, defaultVariants, compoundVariants } = config\n\n // Pre-compute variant keys to avoid Object.entries/Object.keys in hot path\n const variantKeys = variants ? Object.keys(variants) : []\n\n // Pre-extract compound variant keys (excluding 'class' and 'className')\n const compoundVariantKeys: string[][] | null = compoundVariants\n ? compoundVariants.map((compound) => {\n const keys: string[] = []\n for (const key in compound) {\n if (Object.prototype.hasOwnProperty.call(compound, key) && key !== 'class' && key !== 'className') {\n keys.push(key)\n }\n }\n return keys\n })\n : null\n\n return (props = {}) => {\n const { class: classFromProps, className, ...variantProps } = props\n const classes: ClassValue[] = []\n\n if (base) {\n classes.push(base)\n }\n\n if (variants) {\n for (const variantKey of variantKeys) {\n const value =\n (variantProps as Record<string, unknown>)[variantKey] ??\n defaultVariants?.[variantKey as keyof typeof defaultVariants]\n\n if (value !== null && value !== undefined) {\n const variantClasses = variants[variantKey][value as string]\n if (variantClasses) {\n classes.push(variantClasses)\n }\n }\n }\n }\n\n if (compoundVariants && compoundVariantKeys) {\n for (let i = 0; i < compoundVariants.length; i++) {\n const compound = compoundVariants[i]\n const keys = compoundVariantKeys[i]\n if (matchesCompoundVariantFast(compound, keys, variantProps as Record<string, unknown>, defaultVariants)) {\n const compoundClass = compound.class ?? compound.className\n if (compoundClass) {\n classes.push(compoundClass)\n }\n }\n }\n }\n\n if (classFromProps) {\n classes.push(classFromProps)\n }\n if (className) {\n classes.push(className)\n }\n\n return tw(...classes)\n }\n}\n\n/**\n * Fast compound variant matcher using pre-computed keys.\n * Avoids Object.entries allocation in hot path.\n */\n\nfunction matchesCompoundVariantFast<V extends VariantsSchema>(\n compound: CompoundVariant<V>,\n keys: string[],\n props: Record<string, unknown>,\n defaults?: VariantProps<V>\n): boolean {\n for (const key of keys) {\n const value = (compound as Record<string, unknown>)[key]\n const actualValue =\n props[key] ?? defaults?.[key as keyof typeof defaults]\n\n if (normalizeValue(actualValue) !== normalizeValue(value)) {\n return false\n }\n }\n return true\n}\n\n/** Normalizes boolean-like values ('true'/'false' strings to booleans). */\nfunction normalizeValue(value: unknown): unknown {\n if (value === 'true' || value === true) return true\n if (value === 'false' || value === false) return false\n return value\n}\n\nexport { twStates }\n","'use client'\n\nimport type { ClassValue, TwDebugResult, TwDebugRemovedClass, TwDebugKeptClass } from './types'\nimport { flattenClassValues, parseClasses } from './parser'\nimport { resolveConflicts, tokensToString } from './resolver'\n\n/**\n * Returns detailed information about class merging decisions.\n * Useful for debugging why classes were removed or kept.\n *\n * Unlike `tw()`, this function does not cache results and provides\n * full information about the resolution process.\n *\n * @param inputs - Class strings, objects, arrays, or falsy values\n * @returns Debug result with output, removed, and kept information\n *\n * @example\n * ```tsx\n * const result = twDebug('p-4 px-2 p-8')\n * // => {\n * // output: 'px-2 p-8',\n * // removed: [\n * // { class: 'p-4', reason: 'overridden by p-8', conflictsWith: 'p-8' }\n * // ],\n * // kept: [\n * // { class: 'px-2', group: 'padding-x' },\n * // { class: 'p-8', group: 'padding' }\n * // ]\n * // }\n *\n * // Check why a class was removed\n * const { removed } = twDebug('text-sm text-lg text-red-500')\n * removed.forEach(r => console.log(`${r.class} was ${r.reason}`))\n *\n * // Inspect group assignments\n * const { kept } = twDebug('hover:bg-blue-500 focus:ring-2')\n * kept.forEach(k => console.log(`${k.class} -> ${k.group}`))\n * ```\n */\n\nfunction twDebug(...inputs: ClassValue[]): TwDebugResult {\n if (inputs.length === 0) {\n return { output: '', removed: [], kept: [] }\n }\n\n const classString = flattenClassValues(...inputs)\n if (!classString) {\n return { output: '', removed: [], kept: [] }\n }\n\n // Single class - no conflicts possible\n if (!classString.includes(' ')) {\n const tokens = parseClasses(classString)\n return {\n output: classString,\n removed: [],\n kept: tokens.map((t) => ({\n class: t.raw,\n group: t.group,\n })),\n }\n }\n\n const tokens = parseClasses(classString)\n const { kept, removed } = resolveConflicts(tokens)\n\n const removedClasses: TwDebugRemovedClass[] = removed.map((r) => ({\n class: r.token.raw,\n reason: r.reason,\n conflictsWith: r.overriddenBy.raw,\n }))\n\n const keptClasses: TwDebugKeptClass[] = kept.map((k) => ({\n class: k.raw,\n group: k.group,\n }))\n\n return {\n output: tokensToString(kept),\n removed: removedClasses,\n kept: keptClasses,\n }\n}\n\nexport { twDebug }\n"],"mappings":"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","names":["prefix","prefix","parts","utility","modifiers","hasImportant","importantIndex","group","prefix","CLASS_SPLIT_REGEX","tokens"]}