tw-mrg 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +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":"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","names":["prefix","prefix","parts","utility","modifiers","hasImportant","importantIndex","group","prefix","CLASS_SPLIT_REGEX","tokens"]}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "tw-mrg",
3
+ "version": "1.0.0",
4
+ "description": "Intelligent Tailwind CSS v4 class merging with conflict resolution, CVA-like variants, and runtime CSS injection",
5
+ "author": "Milo Aguera <me@milo.ag>",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "sideEffects": false,
20
+ "scripts": {
21
+ "build": "tsup",
22
+ "dev": "tsup --watch",
23
+ "typecheck": "tsc --noEmit",
24
+ "clean": "rm -rf dist",
25
+ "test": "vitest run",
26
+ "test:watch": "vitest --watch",
27
+ "test:coverage": "vitest --coverage",
28
+ "prepublishOnly": "pnpm test && pnpm typecheck && pnpm build"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/miloag/tw-mrg.git"
33
+ },
34
+ "homepage": "https://github.com/miloag/tw-mrg#readme",
35
+ "bugs": {
36
+ "url": "https://github.com/miloag/tw-mrg/issues"
37
+ },
38
+ "engines": {
39
+ "node": ">=18"
40
+ },
41
+ "peerDependencies": {
42
+ "tailwindcss": "^4.0.0"
43
+ },
44
+ "devDependencies": {
45
+ "tailwindcss": "^4.1.18",
46
+ "tsup": "^8.0.0",
47
+ "typescript": "^5.0.0",
48
+ "vitest": "^1.0.0",
49
+ "@vitest/coverage-v8": "^1.0.0"
50
+ },
51
+ "keywords": [
52
+ "tailwind",
53
+ "tailwindcss",
54
+ "tailwind-merge",
55
+ "tw",
56
+ "tw-mrg",
57
+ "tw-merge",
58
+ "merge",
59
+ "class",
60
+ "className",
61
+ "clsx",
62
+ "classnames",
63
+ "cva",
64
+ "variants",
65
+ "css",
66
+ "utility",
67
+ "conflict-resolution"
68
+ ],
69
+ "license": "MIT"
70
+ }