@frontfriend/tailwind 3.0.4 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -1
- package/dist/browser.mjs +2 -0
- package/dist/browser.mjs.map +7 -0
- package/dist/cli.js +47 -41
- package/dist/components-config-schema.d.ts +2 -0
- package/dist/components-config-schema.js +2 -0
- package/dist/components-config-schema.js.map +7 -0
- package/dist/ffdc.d.ts +3 -1
- package/dist/ffdc.js +1 -1
- package/dist/ffdc.js.map +4 -4
- package/dist/index.js +3 -3
- package/dist/index.js.map +4 -4
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +3 -3
- package/dist/lib/core/api-client.js +2 -1
- package/dist/lib/core/api-client.js.map +4 -4
- package/dist/lib/core/cache-manager.js +11 -2
- package/dist/lib/core/component-downloader.js +3 -2
- package/dist/lib/core/component-downloader.js.map +4 -4
- package/dist/lib/core/components-config-schema.js +2 -0
- package/dist/lib/core/components-config-schema.js.map +7 -0
- package/dist/lib/core/constants.js +1 -1
- package/dist/lib/core/constants.js.map +2 -2
- package/dist/lib/core/credentials.js +3 -0
- package/dist/lib/core/credentials.js.map +7 -0
- package/dist/lib/core/default-config-data.js +2 -0
- package/dist/lib/core/default-config-data.js.map +7 -0
- package/dist/lib/core/default-config.js +2 -0
- package/dist/lib/core/default-config.js.map +7 -0
- package/dist/lib/core/env-utils.js +1 -1
- package/dist/lib/core/env-utils.js.map +3 -3
- package/dist/lib/core/file-utils.js +1 -1
- package/dist/lib/core/file-utils.js.map +3 -3
- package/dist/lib/core/local-token-reader.js +1 -1
- package/dist/lib/core/local-token-reader.js.map +3 -3
- package/dist/lib/core/path-utils.js +1 -1
- package/dist/lib/core/path-utils.js.map +3 -3
- package/dist/lib/core/token-processor.js +3 -1
- package/dist/lib/core/token-processor.js.map +3 -3
- package/dist/next.js +1 -1
- package/dist/next.js.map +4 -4
- package/dist/types/index.d.ts +107 -11
- package/dist/vite.js +13 -8
- package/dist/vite.js.map +4 -4
- package/dist/vite.mjs +6 -1
- package/dist/vite.mjs.map +3 -3
- package/package.json +15 -5
- package/scripts/build.js +21 -4
- package/scripts/master-components-config.json +953 -0
- package/scripts/update-default-config-data.js +690 -0
- package/src/theme.css +9 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../lib/core/errors.js", "../../../lib/core/token-processor.js"],
|
|
4
|
-
"sourcesContent": ["class APIError extends Error {\n constructor(message, statusCode, url) {\n super(message);\n this.name = 'APIError';\n this.statusCode = statusCode;\n this.url = url;\n this.code = `API_${statusCode}`;\n }\n}\n\nclass CacheError extends Error {\n constructor(message, operation) {\n super(message);\n this.name = 'CacheError';\n this.operation = operation;\n this.code = `CACHE_${operation.toUpperCase()}`;\n }\n}\n\nclass ConfigError extends Error {\n constructor(message, field) {\n super(message);\n this.name = 'ConfigError';\n this.field = field;\n this.code = `CONFIG_${field.toUpperCase()}`;\n }\n}\n\nclass ProcessingError extends Error {\n constructor(message, token) {\n super(message);\n this.name = 'ProcessingError';\n this.token = token;\n this.code = 'PROCESSING_ERROR';\n }\n}\n\nmodule.exports = {\n APIError,\n CacheError,\n ConfigError,\n ProcessingError\n};", "const Color = require('color');\nconst https = require('https');\nconst { ProcessingError } = require('./errors');\n\nclass TokenProcessor {\n /**\n * Convert hex color to HSL format for Tailwind CSS\n * @param {string} hex - Hex color value\n * @returns {string} HSL string in format \"H S% L%\"\n */\n hexToHsl(hex) {\n try {\n const color = Color(hex);\n const hsl = color.hsl();\n \n // Get HSL values\n const h = Math.round(hsl.hue());\n const s = Math.round(hsl.saturationl());\n const l = Math.round(hsl.lightness());\n \n // Handle alpha channel if present\n const alpha = color.alpha();\n if (alpha < 1) {\n // Round alpha to 2 decimal places\n const roundedAlpha = Math.round(alpha * 100) / 100;\n return `${h} ${s}% ${l}% / ${roundedAlpha}`;\n }\n \n return `${h} ${s}% ${l}%`;\n } catch (error) {\n throw new ProcessingError(`Failed to convert color ${hex}: ${error.message}`, hex);\n }\n }\n\n /**\n * Process color tokens into CSS variables\n * @param {Object} colorsData - Color tokens data\n * @returns {Object} Processed variables and color map\n */\n processColors(colorsData) {\n const variables = {};\n const colorMap = {};\n const utilities = {\n backgroundColor: {},\n textColor: {},\n borderColor: {}\n };\n\n // Check if we have valid color data\n if (!colorsData || typeof colorsData !== 'object') {\n console.log(' \u26A0\uFE0F No valid color data to process');\n return { variables, colorMap, utilities };\n }\n\n // Recursive function to process nested color structures\n const processColorGroup = (obj, prefix = '') => {\n for (const [key, value] of Object.entries(obj)) {\n if (value && typeof value === 'object') {\n if (value.$value) {\n // This is a color value\n const colorName = prefix ? `${prefix}-${key}` : key;\n const varName = `--color-${colorName}`;\n \n // Convert hex to HSL\n const hslValue = this.hexToHsl(value.$value);\n variables[varName] = hslValue;\n colorMap[colorName] = varName;\n \n // Generate Tailwind utilities\n utilities.backgroundColor[colorName] = `hsl(var(${varName}))`;\n utilities.textColor[colorName] = `hsl(var(${varName}))`;\n utilities.borderColor[colorName] = `hsl(var(${varName}))`;\n } else {\n // Nested structure, recurse\n const newPrefix = prefix ? `${prefix}-${key}` : key;\n processColorGroup(value, newPrefix);\n }\n }\n }\n };\n\n // Process colors - handle both nested and flat structures\n if (colorsData) {\n if (colorsData.colors) {\n processColorGroup(colorsData.colors);\n } else {\n // Direct color structure\n processColorGroup(colorsData);\n }\n }\n\n return {\n variables,\n colorMap,\n utilities\n };\n }\n\n /**\n * Process semantic tokens that reference other tokens\n * @param {Object} semanticData - Semantic tokens data\n * @param {Object} colorMap - Map of color names to CSS variables\n * @returns {Object} Semantic CSS variables and token utilities\n */\n processSemanticTokens(semanticData, colorMap) {\n const semanticVariables = {};\n const tokens = {\n backgroundColor: {},\n textColor: {},\n borderColor: {}\n };\n\n // Format token name (similar to current plugin)\n const formatTokenName = (name) => {\n return name.replace(/ /g, '').replace(/\\./g, '-').toLowerCase();\n };\n\n // Extract token reference from string like \"{colors.primary.500}\"\n const extractReference = (refString) => {\n // Handle non-string values\n if (typeof refString !== 'string') return null;\n \n const match = refString.match(/^\\{(.+)\\}$/);\n if (!match) return null;\n \n // Split the reference path and remove the first part if it's \"colors\"\n const parts = match[1].split('.');\n if (parts[0] === 'colors' && parts.length > 1) {\n // Check if second part is also \"colors\" (nested structure)\n if (parts[1] === 'colors' && parts.length > 2) {\n return parts.slice(2).join('-');\n }\n return parts.slice(1).join('-');\n }\n return parts.join('-');\n };\n\n // Process semantic category (bg, text, border)\n const processCategory = (category, outputCategory) => {\n if (!semanticData[category]) return;\n\n for (const [key, value] of Object.entries(semanticData[category])) {\n if (key === 'disabled') {\n // Handle disabled state specially\n const reference = extractReference(value.$value);\n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n const varName = `--${category}-disabled`;\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens[outputCategory]['disabled'] = `var(${varName})`;\n }\n }\n continue;\n }\n\n // Process nested structure (e.g., neutral -> low -> default)\n for (const [mainKey, mainValue] of Object.entries(value)) {\n for (const [stateKey, stateValue] of Object.entries(mainValue)) {\n let tokenKey = formatTokenName(`${key}-${mainKey}-${stateKey}`);\n \n // Remove '-default' suffix for cleaner class names\n if (tokenKey.endsWith('-default')) {\n tokenKey = tokenKey.slice(0, -8);\n }\n\n const varName = `--${category}-${tokenKey}`;\n \n // Check if it's a reference\n const reference = extractReference(stateValue.$value);\n if (reference) {\n // Look up the referenced color variable\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens[outputCategory][tokenKey] = `var(${varName})`;\n }\n } else if (stateValue.$value) {\n // Direct hex value - convert to HSL\n const hslValue = this.hexToHsl(stateValue.$value);\n semanticVariables[varName] = hslValue;\n tokens[outputCategory][tokenKey] = `hsl(var(${varName}))`;\n }\n }\n }\n }\n };\n\n // Process semantic categories\n processCategory('bg', 'backgroundColor');\n processCategory('text', 'textColor');\n processCategory('border', 'borderColor');\n\n // Process layer tokens\n if (semanticData.layer) {\n for (const [layerKey, layerValue] of Object.entries(semanticData.layer)) {\n const varName = `--layer-${layerKey}`;\n const reference = extractReference(layerValue.$value);\n \n if (reference) {\n // Format the reference to match semantic token naming\n let formattedRef = reference.replace(/\\./g, '-').toLowerCase();\n \n // Remove -default suffix if present\n if (formattedRef.endsWith('-default')) {\n formattedRef = formattedRef.slice(0, -8);\n }\n \n // Check if it's a semantic reference (e.g., bg-neutral-subtle)\n if (formattedRef.startsWith('bg-') || formattedRef.startsWith('text-') || formattedRef.startsWith('border-')) {\n // It's referencing a semantic token\n const semanticVar = `--${formattedRef}`;\n semanticVariables[varName] = `var(${semanticVar})`;\n tokens.backgroundColor[`layer-${layerKey}`] = `var(${varName})`;\n } else {\n // It's referencing a color token\n const referencedVar = colorMap[formattedRef];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.backgroundColor[`layer-${layerKey}`] = `var(${varName})`;\n }\n }\n } else if (layerValue.$value) {\n // Direct value\n const hslValue = this.hexToHsl(layerValue.$value);\n semanticVariables[varName] = hslValue;\n tokens.backgroundColor[`layer-${layerKey}`] = `hsl(var(${varName}))`;\n }\n }\n }\n\n // Process overlay tokens\n if (semanticData.overlay) {\n for (const [overlayKey, overlayValue] of Object.entries(semanticData.overlay)) {\n const varName = `--overlay-${overlayKey}`;\n \n if (overlayValue.$value) {\n // Overlay values are hex colors with alpha, keep them as-is\n semanticVariables[varName] = overlayValue.$value;\n tokens.backgroundColor[`overlay-${overlayKey}`] = `var(${varName})`;\n }\n }\n }\n\n // Process icon tokens (map to text and fill colors)\n if (semanticData.icon) {\n // Ensure fill property exists\n if (!tokens.fill) {\n tokens.fill = {};\n }\n \n for (const [iconKey, iconValue] of Object.entries(semanticData.icon)) {\n if (iconKey === 'disabled') {\n const reference = extractReference(iconValue.$value);\n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n const varName = `--icon-disabled`;\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.textColor['icon-disabled'] = `var(${varName})`;\n tokens.fill['icon-disabled'] = `var(${varName})`;\n }\n }\n continue;\n }\n\n for (const [mainKey, mainValue] of Object.entries(iconValue)) {\n for (const [stateKey, stateValue] of Object.entries(mainValue)) {\n let tokenKey = formatTokenName(`icon-${iconKey}-${mainKey}-${stateKey}`);\n if (tokenKey.endsWith('-default')) {\n tokenKey = tokenKey.slice(0, -8);\n }\n\n const varName = `--${tokenKey}`;\n const reference = extractReference(stateValue.$value);\n \n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.textColor[tokenKey] = `var(${varName})`;\n tokens.fill[tokenKey] = `var(${varName})`;\n }\n }\n }\n }\n }\n }\n\n return { semanticVariables, tokens };\n }\n\n /**\n * Fetch CSS from URL and parse font-face rules\n * @param {string} url - Font CSS URL\n * @returns {Promise<string>} Font face CSS\n */\n async fetchFontCss(url) {\n return new Promise((resolve, reject) => {\n https.get(url, (response) => {\n let data = '';\n \n if (response.statusCode !== 200) {\n reject(new Error(`Failed to fetch font CSS: ${response.statusCode}`));\n return;\n }\n\n response.on('data', (chunk) => {\n data += chunk;\n });\n\n response.on('end', () => {\n resolve(data);\n });\n\n response.on('error', (error) => {\n reject(error);\n });\n }).on('error', (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Parse font-face CSS into structured objects\n * @param {string} css - CSS text containing @font-face rules\n * @returns {Array} Array of font-face objects\n */\n parseFontFaces(css) {\n const fontFaceRegex = /@font-face\\s*{([^}]+)}/g;\n const fontFaces = [];\n let match;\n\n while ((match = fontFaceRegex.exec(css)) !== null) {\n const fontProperties = match[1].trim().split(';').filter(Boolean);\n const fontObj = {};\n\n fontProperties.forEach(prop => {\n const colonIndex = prop.indexOf(':');\n if (colonIndex !== -1) {\n const key = prop.slice(0, colonIndex).trim();\n const value = prop.slice(colonIndex + 1).trim();\n \n // Clean up quotes from font-family\n if (key === 'font-family') {\n fontObj[key] = value.replace(/[\"']/g, '');\n } else {\n fontObj[key] = value;\n }\n }\n });\n\n // Ensure src URLs are properly quoted\n if (fontObj['src']) {\n fontObj['src'] = fontObj['src']\n .replace(/url\\([\"']?/, 'url(\\'')\n .replace(/[\"']?\\)/, '\\')');\n }\n\n fontFaces.push(fontObj);\n }\n\n return fontFaces;\n }\n\n /**\n * Process fonts data\n * @param {Object} fontData - Font URLs object\n * @returns {Promise<Array>} Array of font-face objects\n */\n async processFonts(fontData) {\n const fontFaces = [];\n\n if (!fontData || typeof fontData !== 'object') {\n return fontFaces;\n }\n\n // Process each font URL (font, font2, etc.)\n const fontFields = Object.keys(fontData).filter(key => key.startsWith('font'));\n \n for (const field of fontFields) {\n const url = fontData[field];\n if (typeof url === 'string' && url.startsWith('http')) {\n try {\n const css = await this.fetchFontCss(url);\n const parsedFonts = this.parseFontFaces(css);\n \n if (parsedFonts.length > 0) {\n fontFaces.push(...parsedFonts);\n }\n } catch (error) {\n console.warn(`Failed to process font ${field}:`, error.message);\n }\n }\n }\n\n return fontFaces;\n }\n\n /**\n * Process font family tokens\n * @param {Object} globalTokens - Global tokens data containing font families\n * @returns {Object} Font family utilities\n */\n processFontFamilies(globalTokens) {\n const fontFamilyUtilities = {};\n \n if (!globalTokens || !globalTokens.font || !globalTokens.font.family) {\n return fontFamilyUtilities;\n }\n\n const fontFamilies = globalTokens.font.family;\n \n // Process each font family (primary, secondary, etc.)\n for (const [key, value] of Object.entries(fontFamilies)) {\n if (value && value.$value) {\n // Format the key (e.g., primary -> primary)\n const fontKey = key.toLowerCase();\n \n // Extract font family value\n let fontFamilyValue = value.$value;\n \n // If it's a reference, extract it\n if (typeof fontFamilyValue === 'string' && fontFamilyValue.startsWith('{') && fontFamilyValue.endsWith('}')) {\n // This is a reference, but for font families we usually have direct values\n fontFamilyValue = fontFamilyValue.slice(1, -1);\n }\n \n // Store the font family utility\n // Store the font family utility - ensure proper quoting for multi-word fonts\n // For Tailwind, we need to format font families properly\n \n // Capitalize the first letter of each word in font names for proper rendering\n const capitalizeFontName = (name) => {\n return name.split(' ').map(word => \n word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n ).join(' ');\n };\n \n // Check if it's already a font stack or needs quoting\n if (fontFamilyValue.includes(',')) {\n // It's already a font stack, use as is\n fontFamilyUtilities[fontKey] = fontFamilyValue;\n } else {\n // Capitalize the font name\n const capitalizedFont = capitalizeFontName(fontFamilyValue);\n \n if (capitalizedFont.includes(' ') && !capitalizedFont.startsWith('\"') && !capitalizedFont.startsWith(\"'\")) {\n // Multi-word font needs quotes, add generic fallback\n fontFamilyUtilities[fontKey] = `\"${capitalizedFont}\", sans-serif`;\n } else {\n // Single word font, add generic fallback\n fontFamilyUtilities[fontKey] = `${capitalizedFont}, sans-serif`;\n }\n }\n }\n }\n \n return fontFamilyUtilities;\n }\n\n /**\n * Process animations data\n * @param {Object} animationData - Animation definitions\n * @returns {Object} Keyframes and animation utilities\n */\n processAnimations(animationData) {\n const keyframes = {};\n const animations = {};\n\n if (!animationData || typeof animationData !== 'object') {\n return { keyframes, animations };\n }\n\n // Process each animation\n for (const [name, definition] of Object.entries(animationData)) {\n if (definition && typeof definition === 'object') {\n // Generate keyframe name\n const keyframeName = `${name}`;\n \n // Process keyframe steps\n if (definition.keyframes) {\n const keyframeSteps = {};\n \n for (const [step, props] of Object.entries(definition.keyframes)) {\n if (props && typeof props === 'object') {\n keyframeSteps[step] = props;\n }\n }\n \n keyframes[keyframeName] = keyframeSteps;\n }\n\n // Create animation utility\n const animationValue = [\n keyframeName,\n definition.duration || '1s',\n definition.easing || 'ease',\n definition.delay || '0s',\n definition.iterations || '1',\n definition.direction || 'normal',\n definition.fillMode || 'none'\n ].join(' ');\n\n animations[name] = animationValue;\n }\n }\n\n return { keyframes, animations };\n }\n\n /**\n * Generate safelist classes for Tailwind\n * @param {Object} tokens - All processed tokens\n * @returns {Array} Safelist patterns\n */\n generateSafelistClasses(tokens) {\n const safelist = [];\n\n // Add semantic token utilities (bg-, text-, border-)\n // Note: Only base classes are added to safelist. Variants (hover:, focus:, etc.)\n // are detected by Tailwind's JIT when actually used in components.\n // This prevents generation of invalid CSS selector combinations with Turbopack.\n if (tokens.backgroundColor) {\n for (const tokenName of Object.keys(tokens.backgroundColor)) {\n safelist.push(`bg-${tokenName}`);\n }\n }\n\n if (tokens.textColor) {\n for (const tokenName of Object.keys(tokens.textColor)) {\n safelist.push(`text-${tokenName}`);\n }\n }\n\n if (tokens.borderColor) {\n for (const tokenName of Object.keys(tokens.borderColor)) {\n safelist.push(`border-${tokenName}`);\n }\n }\n\n // Add fill utilities (for icons)\n if (tokens.fill) {\n for (const tokenName of Object.keys(tokens.fill)) {\n safelist.push(`fill-${tokenName}`);\n \n // Also add text-icon-* classes\n if (tokenName.startsWith('icon-')) {\n safelist.push(`text-${tokenName}`);\n }\n }\n }\n\n // Add font family utilities\n if (tokens.fontFamily) {\n for (const fontName of Object.keys(tokens.fontFamily)) {\n safelist.push(`font-${fontName}`);\n }\n }\n\n // Add animation classes\n if (tokens.animations) {\n for (const animationName of Object.keys(tokens.animations)) {\n safelist.push(`animate-${animationName}`);\n }\n }\n\n return safelist;\n }\n\n /**\n * Extract unique classes from components configuration\n * @param {Object} componentsConfig - Components configuration object\n * @returns {Array} Array of unique class names\n */\n extractClassesFromComponentsConfig(componentsConfig) {\n const classSet = new Set();\n\n // Helper function to extract classes from a string\n const extractClasses = (classString) => {\n if (typeof classString === 'string') {\n // Split by spaces and filter out empty strings\n const classes = classString.split(/\\s+/).filter(c => c.length > 0);\n classes.forEach(cls => {\n // Skip variant selectors like [&>svg]:absolute\n classSet.add(cls);\n });\n }\n };\n\n // Recursive function to traverse the config object\n const traverse = (obj) => {\n if (!obj || typeof obj !== 'object') return;\n\n for (const key in obj) {\n const value = obj[key];\n \n if (typeof value === 'string') {\n extractClasses(value);\n } else if (typeof value === 'object') {\n traverse(value);\n }\n }\n };\n\n // Process the components config\n if (componentsConfig) {\n traverse(componentsConfig);\n }\n\n // Convert set to array, filter out file: variant classes (they produce invalid\n // chained pseudo-element CSS like ::placeholder::file-selector-button), and sort\n return Array.from(classSet).filter(cls => !cls.startsWith('file:')).sort();\n }\n\n /**\n * Process custom CSS into a format compatible with Tailwind's addBase\n * @param {string} css - Raw CSS string\n * @returns {Object} CSS rules as object for Tailwind addBase\n */\n processCustomCss(css) {\n if (!css || typeof css !== 'string') {\n return {};\n }\n\n // Simply return the raw CSS as a string that can be added via addBase\n return { raw: css };\n }\n\n /**\n * Main orchestration method to process all token data\n * @param {Object} data - Complete token data from API\n * @returns {Promise<Object>} Processed token data\n */\n async process(data) {\n try {\n const result = {\n variables: {},\n semanticVariables: {},\n semanticDarkVariables: {},\n utilities: {},\n fontFaces: [],\n keyframes: {},\n animations: {},\n safelist: [],\n metadata: {},\n custom: data.customCss ? this.processCustomCss(data.customCss) : {}\n };\n\n // Handle different token formats (new vs legacy)\n let colorData = null;\n \n // Check if we have tokens in the new format\n if (data.tokens && typeof data.tokens === 'object') {\n // New format from processed-tokens endpoint\n const tokens = data.tokens;\n \n // Extract color data from various possible locations\n colorData = tokens['Global Colors/Default'] || \n tokens['Global Colors'] || \n tokens['colors'] ||\n tokens;\n } else if (data.colors) {\n // Legacy format or direct colors data\n colorData = data.colors;\n }\n\n // Process colors\n if (colorData) {\n const colorResult = this.processColors(colorData);\n result.variables = { ...result.variables, ...colorResult.variables };\n result.utilities = { ...result.utilities, ...colorResult.utilities };\n result.colorMap = colorResult.colorMap || {};\n } else {\n result.colorMap = {};\n }\n\n // Process semantic tokens (light mode)\n if (data.semantic && result.colorMap) {\n const semanticResult = this.processSemanticTokens(data.semantic, result.colorMap);\n result.semanticVariables = semanticResult.semanticVariables;\n // Merge tokens into utilities\n if (semanticResult.tokens) {\n result.tokens = semanticResult.tokens;\n // Replace color utilities with semantic token utilities\n result.utilities = semanticResult.tokens;\n }\n }\n\n // Process semantic tokens (dark mode)\n if (data.semanticDark && result.colorMap) {\n const semanticDarkResult = this.processSemanticTokens(data.semanticDark, result.colorMap);\n result.semanticDarkVariables = semanticDarkResult.semanticVariables;\n }\n\n // Process fonts\n if (data.fonts) {\n result.fontFaces = await this.processFonts(data.fonts);\n }\n\n // Process font families from global tokens\n if (data.globalTokens) {\n result.fontFamilies = this.processFontFamilies(data.globalTokens);\n \n // Add font family utilities\n if (result.fontFamilies) {\n if (!result.utilities.fontFamily) {\n result.utilities.fontFamily = {};\n }\n Object.assign(result.utilities.fontFamily, result.fontFamilies);\n }\n }\n\n // Process animations\n if (data.animations) {\n const animationResult = this.processAnimations(data.animations);\n result.keyframes = animationResult.keyframes;\n result.animations = animationResult.animations;\n }\n\n // Generate safelist from semantic tokens (not colorMap)\n // Pass the tokens object that contains backgroundColor, textColor, etc.\n result.safelist = this.generateSafelistClasses(result.tokens || result.utilities);\n\n // Add metadata\n result.metadata = {\n timestamp: new Date().toISOString(),\n version: data.version || '2.0.0',\n ffId: data.ffId\n };\n\n return result;\n } catch (error) {\n console.error('Error processing tokens:', error);\n throw error;\n }\n }\n}\n\nmodule.exports = TokenProcessor;"],
|
|
5
|
-
"mappings": "8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,KAAMC,EAAN,cAAuB,KAAM,CAC3B,YAAYC,EAASC,EAAYC,EAAK,CACpC,MAAMF,CAAO,EACb,KAAK,KAAO,WACZ,KAAK,WAAaC,EAClB,KAAK,IAAMC,EACX,KAAK,KAAO,OAAOD,CAAU,EAC/B,CACF,EAEME,EAAN,cAAyB,KAAM,CAC7B,YAAYH,EAASI,EAAW,CAC9B,MAAMJ,CAAO,EACb,KAAK,KAAO,aACZ,KAAK,UAAYI,EACjB,KAAK,KAAO,SAASA,EAAU,YAAY,CAAC,EAC9C,CACF,EAEMC,EAAN,cAA0B,KAAM,CAC9B,YAAYL,EAASM,EAAO,CAC1B,MAAMN,CAAO,EACb,KAAK,KAAO,cACZ,KAAK,MAAQM,EACb,KAAK,KAAO,UAAUA,EAAM,YAAY,CAAC,EAC3C,CACF,EAEMC,EAAN,cAA8B,KAAM,CAClC,YAAYP,EAASQ,EAAO,CAC1B,MAAMR,CAAO,EACb,KAAK,KAAO,kBACZ,KAAK,MAAQQ,EACb,KAAK,KAAO,kBACd,CACF,EAEAV,EAAO,QAAU,CACf,SAAAC,EACA,WAAAI,EACA,YAAAE,EACA,gBAAAE,CACF,IC1CA,IAAME,EAAQ,QAAQ,OAAO,EACvBC,EAAQ,QAAQ,OAAO,EACvB,CAAE,gBAAAC,CAAgB,EAAI,IAEtBC,EAAN,KAAqB,CAMnB,SAASC,EAAK,CACZ,GAAI,CACF,IAAMC,EAAQL,EAAMI,CAAG,EACjBE,EAAMD,EAAM,IAAI,EAGhBE,EAAI,KAAK,MAAMD,EAAI,IAAI,CAAC,EACxBE,EAAI,KAAK,MAAMF,EAAI,YAAY,CAAC,EAChCG,EAAI,KAAK,MAAMH,EAAI,UAAU,CAAC,EAG9BI,EAAQL,EAAM,MAAM,EAC1B,GAAIK,EAAQ,EAAG,CAEb,IAAMC,EAAe,KAAK,MAAMD,EAAQ,GAAG,EAAI,IAC/C,MAAO,GAAGH,CAAC,IAAIC,CAAC,KAAKC,CAAC,OAAOE,CAAY,EAC3C,CAEA,MAAO,GAAGJ,CAAC,IAAIC,CAAC,KAAKC,CAAC,GACxB,OAASG,EAAO,CACd,MAAM,IAAIV,EAAgB,2BAA2BE,CAAG,KAAKQ,EAAM,OAAO,GAAIR,CAAG,CACnF,CACF,CAOA,cAAcS,EAAY,CACxB,IAAMC,EAAY,CAAC,EACbC,EAAW,CAAC,EACZC,EAAY,CAChB,gBAAiB,CAAC,EAClB,UAAW,CAAC,EACZ,YAAa,CAAC,CAChB,EAGA,GAAI,CAACH,GAAc,OAAOA,GAAe,SACvC,eAAQ,IAAI,iDAAuC,EAC5C,CAAE,UAAAC,EAAW,SAAAC,EAAU,UAAAC,CAAU,EAI1C,IAAMC,EAAoB,CAACC,EAAKC,EAAS,KAAO,CAC9C,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQH,CAAG,EAC3C,GAAIG,GAAS,OAAOA,GAAU,SAC5B,GAAIA,EAAM,OAAQ,CAEhB,IAAMC,EAAYH,EAAS,GAAGA,CAAM,IAAIC,CAAG,GAAKA,EAC1CG,EAAU,WAAWD,CAAS,GAG9BE,EAAW,KAAK,SAASH,EAAM,MAAM,EAC3CP,EAAUS,CAAO,EAAIC,EACrBT,EAASO,CAAS,EAAIC,EAGtBP,EAAU,gBAAgBM,CAAS,EAAI,WAAWC,CAAO,KACzDP,EAAU,UAAUM,CAAS,EAAI,WAAWC,CAAO,KACnDP,EAAU,YAAYM,CAAS,EAAI,WAAWC,CAAO,IACvD,KAAO,CAEL,IAAME,EAAYN,EAAS,GAAGA,CAAM,IAAIC,CAAG,GAAKA,EAChDH,EAAkBI,EAAOI,CAAS,CACpC,CAGN,EAGA,OAAIZ,IACEA,EAAW,OACbI,EAAkBJ,EAAW,MAAM,EAGnCI,EAAkBJ,CAAU,GAIzB,CACL,UAAAC,EACA,SAAAC,EACA,UAAAC,CACF,CACF,CAQA,sBAAsBU,EAAcX,EAAU,CAC5C,IAAMY,EAAoB,CAAC,EACrBC,EAAS,CACb,gBAAiB,CAAC,EAClB,UAAW,CAAC,EACZ,YAAa,CAAC,CAChB,EAGMC,EAAmBC,GAChBA,EAAK,QAAQ,KAAM,EAAE,EAAE,QAAQ,MAAO,GAAG,EAAE,YAAY,EAI1DC,EAAoBC,GAAc,CAEtC,GAAI,OAAOA,GAAc,SAAU,OAAO,KAE1C,IAAMC,EAAQD,EAAU,MAAM,YAAY,EAC1C,GAAI,CAACC,EAAO,OAAO,KAGnB,IAAMC,EAAQD,EAAM,CAAC,EAAE,MAAM,GAAG,EAChC,OAAIC,EAAM,CAAC,IAAM,UAAYA,EAAM,OAAS,EAEtCA,EAAM,CAAC,IAAM,UAAYA,EAAM,OAAS,EACnCA,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG,EAEzBA,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG,EAEzBA,EAAM,KAAK,GAAG,CACvB,EAGMC,EAAkB,CAACC,EAAUC,IAAmB,CACpD,GAAKX,EAAaU,CAAQ,EAE1B,OAAW,CAAChB,EAAKC,CAAK,IAAK,OAAO,QAAQK,EAAaU,CAAQ,CAAC,EAAG,CACjE,GAAIhB,IAAQ,WAAY,CAEtB,IAAMkB,EAAYP,EAAiBV,EAAM,MAAM,EAC/C,GAAIiB,EAAW,CACb,IAAMC,EAAgBxB,EAASuB,CAAS,EACxC,GAAIC,EAAe,CACjB,IAAMhB,EAAU,KAAKa,CAAQ,YAC7BT,EAAkBJ,CAAO,EAAI,OAAOgB,CAAa,IACjDX,EAAOS,CAAc,EAAE,SAAc,OAAOd,CAAO,GACrD,CACF,CACA,QACF,CAGA,OAAW,CAACiB,EAASC,CAAS,IAAK,OAAO,QAAQpB,CAAK,EACrD,OAAW,CAACqB,EAAUC,CAAU,IAAK,OAAO,QAAQF,CAAS,EAAG,CAC9D,IAAIG,EAAWf,EAAgB,GAAGT,CAAG,IAAIoB,CAAO,IAAIE,CAAQ,EAAE,EAG1DE,EAAS,SAAS,UAAU,IAC9BA,EAAWA,EAAS,MAAM,EAAG,EAAE,GAGjC,IAAMrB,EAAU,KAAKa,CAAQ,IAAIQ,CAAQ,GAGnCN,EAAYP,EAAiBY,EAAW,MAAM,EACpD,GAAIL,EAAW,CAEb,IAAMC,EAAgBxB,EAASuB,CAAS,EACpCC,IACFZ,EAAkBJ,CAAO,EAAI,OAAOgB,CAAa,IACjDX,EAAOS,CAAc,EAAEO,CAAQ,EAAI,OAAOrB,CAAO,IAErD,SAAWoB,EAAW,OAAQ,CAE5B,IAAMnB,EAAW,KAAK,SAASmB,EAAW,MAAM,EAChDhB,EAAkBJ,CAAO,EAAIC,EAC7BI,EAAOS,CAAc,EAAEO,CAAQ,EAAI,WAAWrB,CAAO,IACvD,CACF,CAEJ,CACF,EAQA,GALAY,EAAgB,KAAM,iBAAiB,EACvCA,EAAgB,OAAQ,WAAW,EACnCA,EAAgB,SAAU,aAAa,EAGnCT,EAAa,MACf,OAAW,CAACmB,EAAUC,CAAU,IAAK,OAAO,QAAQpB,EAAa,KAAK,EAAG,CACvE,IAAMH,EAAU,WAAWsB,CAAQ,GAC7BP,EAAYP,EAAiBe,EAAW,MAAM,EAEpD,GAAIR,EAAW,CAEb,IAAIS,EAAeT,EAAU,QAAQ,MAAO,GAAG,EAAE,YAAY,EAQ7D,GALIS,EAAa,SAAS,UAAU,IAClCA,EAAeA,EAAa,MAAM,EAAG,EAAE,GAIrCA,EAAa,WAAW,KAAK,GAAKA,EAAa,WAAW,OAAO,GAAKA,EAAa,WAAW,SAAS,EAAG,CAE5G,IAAMC,EAAc,KAAKD,CAAY,GACrCpB,EAAkBJ,CAAO,EAAI,OAAOyB,CAAW,IAC/CpB,EAAO,gBAAgB,SAASiB,CAAQ,EAAE,EAAI,OAAOtB,CAAO,GAC9D,KAAO,CAEL,IAAMgB,EAAgBxB,EAASgC,CAAY,EACvCR,IACFZ,EAAkBJ,CAAO,EAAI,OAAOgB,CAAa,IACjDX,EAAO,gBAAgB,SAASiB,CAAQ,EAAE,EAAI,OAAOtB,CAAO,IAEhE,CACF,SAAWuB,EAAW,OAAQ,CAE5B,IAAMtB,EAAW,KAAK,SAASsB,EAAW,MAAM,EAChDnB,EAAkBJ,CAAO,EAAIC,EAC7BI,EAAO,gBAAgB,SAASiB,CAAQ,EAAE,EAAI,WAAWtB,CAAO,IAClE,CACF,CAIF,GAAIG,EAAa,QACf,OAAW,CAACuB,EAAYC,CAAY,IAAK,OAAO,QAAQxB,EAAa,OAAO,EAAG,CAC7E,IAAMH,EAAU,aAAa0B,CAAU,GAEnCC,EAAa,SAEfvB,EAAkBJ,CAAO,EAAI2B,EAAa,OAC1CtB,EAAO,gBAAgB,WAAWqB,CAAU,EAAE,EAAI,OAAO1B,CAAO,IAEpE,CAIF,GAAIG,EAAa,KAAM,CAEhBE,EAAO,OACVA,EAAO,KAAO,CAAC,GAGjB,OAAW,CAACuB,EAASC,CAAS,IAAK,OAAO,QAAQ1B,EAAa,IAAI,EAAG,CACpE,GAAIyB,IAAY,WAAY,CAC1B,IAAMb,EAAYP,EAAiBqB,EAAU,MAAM,EACnD,GAAId,EAAW,CACb,IAAMC,EAAgBxB,EAASuB,CAAS,EACxC,GAAIC,EAAe,CACjB,IAAMhB,EAAU,kBAChBI,EAAkBJ,CAAO,EAAI,OAAOgB,CAAa,IACjDX,EAAO,UAAU,eAAe,EAAI,OAAOL,CAAO,IAClDK,EAAO,KAAK,eAAe,EAAI,OAAOL,CAAO,GAC/C,CACF,CACA,QACF,CAEA,OAAW,CAACiB,EAASC,CAAS,IAAK,OAAO,QAAQW,CAAS,EACzD,OAAW,CAACV,EAAUC,CAAU,IAAK,OAAO,QAAQF,CAAS,EAAG,CAC9D,IAAIG,EAAWf,EAAgB,QAAQsB,CAAO,IAAIX,CAAO,IAAIE,CAAQ,EAAE,EACnEE,EAAS,SAAS,UAAU,IAC9BA,EAAWA,EAAS,MAAM,EAAG,EAAE,GAGjC,IAAMrB,EAAU,KAAKqB,CAAQ,GACvBN,EAAYP,EAAiBY,EAAW,MAAM,EAEpD,GAAIL,EAAW,CACb,IAAMC,EAAgBxB,EAASuB,CAAS,EACpCC,IACFZ,EAAkBJ,CAAO,EAAI,OAAOgB,CAAa,IACjDX,EAAO,UAAUgB,CAAQ,EAAI,OAAOrB,CAAO,IAC3CK,EAAO,KAAKgB,CAAQ,EAAI,OAAOrB,CAAO,IAE1C,CACF,CAEJ,CACF,CAEA,MAAO,CAAE,kBAAAI,EAAmB,OAAAC,CAAO,CACrC,CAOA,MAAM,aAAayB,EAAK,CACtB,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtCtD,EAAM,IAAIoD,EAAMG,GAAa,CAC3B,IAAIC,EAAO,GAEX,GAAID,EAAS,aAAe,IAAK,CAC/BD,EAAO,IAAI,MAAM,6BAA6BC,EAAS,UAAU,EAAE,CAAC,EACpE,MACF,CAEAA,EAAS,GAAG,OAASE,GAAU,CAC7BD,GAAQC,CACV,CAAC,EAEDF,EAAS,GAAG,MAAO,IAAM,CACvBF,EAAQG,CAAI,CACd,CAAC,EAEDD,EAAS,GAAG,QAAU5C,GAAU,CAC9B2C,EAAO3C,CAAK,CACd,CAAC,CACH,CAAC,EAAE,GAAG,QAAUA,GAAU,CACxB2C,EAAO3C,CAAK,CACd,CAAC,CACH,CAAC,CACH,CAOA,eAAe+C,EAAK,CAClB,IAAMC,EAAgB,0BAChBC,EAAY,CAAC,EACf5B,EAEJ,MAAQA,EAAQ2B,EAAc,KAAKD,CAAG,KAAO,MAAM,CACjD,IAAMG,EAAiB7B,EAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO,EAC1D8B,EAAU,CAAC,EAEjBD,EAAe,QAAQE,GAAQ,CAC7B,IAAMC,EAAaD,EAAK,QAAQ,GAAG,EACnC,GAAIC,IAAe,GAAI,CACrB,IAAM7C,EAAM4C,EAAK,MAAM,EAAGC,CAAU,EAAE,KAAK,EACrC5C,EAAQ2C,EAAK,MAAMC,EAAa,CAAC,EAAE,KAAK,EAG1C7C,IAAQ,cACV2C,EAAQ3C,CAAG,EAAIC,EAAM,QAAQ,QAAS,EAAE,EAExC0C,EAAQ3C,CAAG,EAAIC,CAEnB,CACF,CAAC,EAGG0C,EAAQ,MACVA,EAAQ,IAASA,EAAQ,IACtB,QAAQ,aAAc,OAAQ,EAC9B,QAAQ,UAAW,IAAK,GAG7BF,EAAU,KAAKE,CAAO,CACxB,CAEA,OAAOF,CACT,CAOA,MAAM,aAAaK,EAAU,CAC3B,IAAML,EAAY,CAAC,EAEnB,GAAI,CAACK,GAAY,OAAOA,GAAa,SACnC,OAAOL,EAIT,IAAMM,EAAa,OAAO,KAAKD,CAAQ,EAAE,OAAO9C,GAAOA,EAAI,WAAW,MAAM,CAAC,EAE7E,QAAWgD,KAASD,EAAY,CAC9B,IAAMd,EAAMa,EAASE,CAAK,EAC1B,GAAI,OAAOf,GAAQ,UAAYA,EAAI,WAAW,MAAM,EAClD,GAAI,CACF,IAAMM,EAAM,MAAM,KAAK,aAAaN,CAAG,EACjCgB,EAAc,KAAK,eAAeV,CAAG,EAEvCU,EAAY,OAAS,GACvBR,EAAU,KAAK,GAAGQ,CAAW,CAEjC,OAASzD,EAAO,CACd,QAAQ,KAAK,0BAA0BwD,CAAK,IAAKxD,EAAM,OAAO,CAChE,CAEJ,CAEA,OAAOiD,CACT,CAOA,oBAAoBS,EAAc,CAChC,IAAMC,EAAsB,CAAC,EAE7B,GAAI,CAACD,GAAgB,CAACA,EAAa,MAAQ,CAACA,EAAa,KAAK,OAC5D,OAAOC,EAGT,IAAMC,EAAeF,EAAa,KAAK,OAGvC,OAAW,CAAClD,EAAKC,CAAK,IAAK,OAAO,QAAQmD,CAAY,EACpD,GAAInD,GAASA,EAAM,OAAQ,CAEzB,IAAMoD,EAAUrD,EAAI,YAAY,EAG5BsD,EAAkBrD,EAAM,OAGxB,OAAOqD,GAAoB,UAAYA,EAAgB,WAAW,GAAG,GAAKA,EAAgB,SAAS,GAAG,IAExGA,EAAkBA,EAAgB,MAAM,EAAG,EAAE,GAQ/C,IAAMC,EAAsB7C,GACnBA,EAAK,MAAM,GAAG,EAAE,IAAI8C,GACzBA,EAAK,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,EAAE,YAAY,CAC3D,EAAE,KAAK,GAAG,EAIZ,GAAIF,EAAgB,SAAS,GAAG,EAE9BH,EAAoBE,CAAO,EAAIC,MAC1B,CAEL,IAAMG,EAAkBF,EAAmBD,CAAe,EAEtDG,EAAgB,SAAS,GAAG,GAAK,CAACA,EAAgB,WAAW,GAAG,GAAK,CAACA,EAAgB,WAAW,GAAG,EAEtGN,EAAoBE,CAAO,EAAI,IAAII,CAAe,gBAGlDN,EAAoBE,CAAO,EAAI,GAAGI,CAAe,cAErD,CACF,CAGF,OAAON,CACT,CAOA,kBAAkBO,EAAe,CAC/B,IAAMC,EAAY,CAAC,EACbC,EAAa,CAAC,EAEpB,GAAI,CAACF,GAAiB,OAAOA,GAAkB,SAC7C,MAAO,CAAE,UAAAC,EAAW,WAAAC,CAAW,EAIjC,OAAW,CAAClD,EAAMmD,CAAU,IAAK,OAAO,QAAQH,CAAa,EAC3D,GAAIG,GAAc,OAAOA,GAAe,SAAU,CAEhD,IAAMC,EAAe,GAAGpD,CAAI,GAG5B,GAAImD,EAAW,UAAW,CACxB,IAAME,EAAgB,CAAC,EAEvB,OAAW,CAACC,EAAMC,CAAK,IAAK,OAAO,QAAQJ,EAAW,SAAS,EACzDI,GAAS,OAAOA,GAAU,WAC5BF,EAAcC,CAAI,EAAIC,GAI1BN,EAAUG,CAAY,EAAIC,CAC5B,CAGA,IAAMG,EAAiB,CACrBJ,EACAD,EAAW,UAAY,KACvBA,EAAW,QAAU,OACrBA,EAAW,OAAS,KACpBA,EAAW,YAAc,IACzBA,EAAW,WAAa,SACxBA,EAAW,UAAY,MACzB,EAAE,KAAK,GAAG,EAEVD,EAAWlD,CAAI,EAAIwD,CACrB,CAGF,MAAO,CAAE,UAAAP,EAAW,WAAAC,CAAW,CACjC,CAOA,wBAAwBpD,EAAQ,CAC9B,IAAM2D,EAAW,CAAC,EAMlB,GAAI3D,EAAO,gBACT,QAAW4D,KAAa,OAAO,KAAK5D,EAAO,eAAe,EACxD2D,EAAS,KAAK,MAAMC,CAAS,EAAE,EAInC,GAAI5D,EAAO,UACT,QAAW4D,KAAa,OAAO,KAAK5D,EAAO,SAAS,EAClD2D,EAAS,KAAK,QAAQC,CAAS,EAAE,EAIrC,GAAI5D,EAAO,YACT,QAAW4D,KAAa,OAAO,KAAK5D,EAAO,WAAW,EACpD2D,EAAS,KAAK,UAAUC,CAAS,EAAE,EAKvC,GAAI5D,EAAO,KACT,QAAW4D,KAAa,OAAO,KAAK5D,EAAO,IAAI,EAC7C2D,EAAS,KAAK,QAAQC,CAAS,EAAE,EAG7BA,EAAU,WAAW,OAAO,GAC9BD,EAAS,KAAK,QAAQC,CAAS,EAAE,EAMvC,GAAI5D,EAAO,WACT,QAAW6D,KAAY,OAAO,KAAK7D,EAAO,UAAU,EAClD2D,EAAS,KAAK,QAAQE,CAAQ,EAAE,EAKpC,GAAI7D,EAAO,WACT,QAAW8D,KAAiB,OAAO,KAAK9D,EAAO,UAAU,EACvD2D,EAAS,KAAK,WAAWG,CAAa,EAAE,EAI5C,OAAOH,CACT,CAOA,mCAAmCI,EAAkB,CACnD,IAAMC,EAAW,IAAI,IAGfC,EAAkBC,GAAgB,CAClC,OAAOA,GAAgB,UAETA,EAAY,MAAM,KAAK,EAAE,OAAOC,GAAKA,EAAE,OAAS,CAAC,EACzD,QAAQC,GAAO,CAErBJ,EAAS,IAAII,CAAG,CAClB,CAAC,CAEL,EAGMC,EAAY/E,GAAQ,CACxB,GAAI,GAACA,GAAO,OAAOA,GAAQ,UAE3B,QAAWE,KAAOF,EAAK,CACrB,IAAMG,EAAQH,EAAIE,CAAG,EAEjB,OAAOC,GAAU,SACnBwE,EAAexE,CAAK,EACX,OAAOA,GAAU,UAC1B4E,EAAS5E,CAAK,CAElB,CACF,EAGA,OAAIsE,GACFM,EAASN,CAAgB,EAKpB,MAAM,KAAKC,CAAQ,EAAE,OAAOI,GAAO,CAACA,EAAI,WAAW,OAAO,CAAC,EAAE,KAAK,CAC3E,CAOA,iBAAiBrC,EAAK,CACpB,MAAI,CAACA,GAAO,OAAOA,GAAQ,SAClB,CAAC,EAIH,CAAE,IAAKA,CAAI,CACpB,CAOA,MAAM,QAAQF,EAAM,CAClB,GAAI,CACF,IAAMyC,EAAS,CACb,UAAW,CAAC,EACZ,kBAAmB,CAAC,EACpB,sBAAuB,CAAC,EACxB,UAAW,CAAC,EACZ,UAAW,CAAC,EACZ,UAAW,CAAC,EACZ,WAAY,CAAC,EACb,SAAU,CAAC,EACX,SAAU,CAAC,EACX,OAAQzC,EAAK,UAAY,KAAK,iBAAiBA,EAAK,SAAS,EAAI,CAAC,CACpE,EAGI0C,EAAY,KAGhB,GAAI1C,EAAK,QAAU,OAAOA,EAAK,QAAW,SAAU,CAElD,IAAM7B,EAAS6B,EAAK,OAGpB0C,EAAYvE,EAAO,uBAAuB,GAC/BA,EAAO,eAAe,GACtBA,EAAO,QACPA,CACb,MAAW6B,EAAK,SAEd0C,EAAY1C,EAAK,QAInB,GAAI0C,EAAW,CACb,IAAMC,EAAc,KAAK,cAAcD,CAAS,EAChDD,EAAO,UAAY,CAAE,GAAGA,EAAO,UAAW,GAAGE,EAAY,SAAU,EACnEF,EAAO,UAAY,CAAE,GAAGA,EAAO,UAAW,GAAGE,EAAY,SAAU,EACnEF,EAAO,SAAWE,EAAY,UAAY,CAAC,CAC7C,MACEF,EAAO,SAAW,CAAC,EAIrB,GAAIzC,EAAK,UAAYyC,EAAO,SAAU,CACpC,IAAMG,EAAiB,KAAK,sBAAsB5C,EAAK,SAAUyC,EAAO,QAAQ,EAChFA,EAAO,kBAAoBG,EAAe,kBAEtCA,EAAe,SACjBH,EAAO,OAASG,EAAe,OAE/BH,EAAO,UAAYG,EAAe,OAEtC,CAGA,GAAI5C,EAAK,cAAgByC,EAAO,SAAU,CACxC,IAAMI,EAAqB,KAAK,sBAAsB7C,EAAK,aAAcyC,EAAO,QAAQ,EACxFA,EAAO,sBAAwBI,EAAmB,iBACpD,CAqBA,GAlBI7C,EAAK,QACPyC,EAAO,UAAY,MAAM,KAAK,aAAazC,EAAK,KAAK,GAInDA,EAAK,eACPyC,EAAO,aAAe,KAAK,oBAAoBzC,EAAK,YAAY,EAG5DyC,EAAO,eACJA,EAAO,UAAU,aACpBA,EAAO,UAAU,WAAa,CAAC,GAEjC,OAAO,OAAOA,EAAO,UAAU,WAAYA,EAAO,YAAY,IAK9DzC,EAAK,WAAY,CACnB,IAAM8C,EAAkB,KAAK,kBAAkB9C,EAAK,UAAU,EAC9DyC,EAAO,UAAYK,EAAgB,UACnCL,EAAO,WAAaK,EAAgB,UACtC,CAIA,OAAAL,EAAO,SAAW,KAAK,wBAAwBA,EAAO,QAAUA,EAAO,SAAS,EAGhFA,EAAO,SAAW,CAChB,UAAW,IAAI,KAAK,EAAE,YAAY,EAClC,QAASzC,EAAK,SAAW,QACzB,KAAMA,EAAK,IACb,EAEOyC,CACT,OAAStF,EAAO,CACd,cAAQ,MAAM,2BAA4BA,CAAK,EACzCA,CACR,CACF,CACF,EAEA,OAAO,QAAUT",
|
|
6
|
-
"names": ["require_errors", "__commonJSMin", "exports", "module", "APIError", "message", "statusCode", "url", "CacheError", "operation", "ConfigError", "field", "ProcessingError", "token", "Color", "https", "ProcessingError", "TokenProcessor", "hex", "color", "hsl", "h", "s", "l", "alpha", "roundedAlpha", "error", "
|
|
4
|
+
"sourcesContent": ["class APIError extends Error {\n constructor(message, statusCode, url) {\n super(message);\n this.name = 'APIError';\n this.statusCode = statusCode;\n this.url = url;\n this.code = `API_${statusCode}`;\n }\n}\n\nclass CacheError extends Error {\n constructor(message, operation) {\n super(message);\n this.name = 'CacheError';\n this.operation = operation;\n this.code = `CACHE_${operation.toUpperCase()}`;\n }\n}\n\nclass ConfigError extends Error {\n constructor(message, field) {\n super(message);\n this.name = 'ConfigError';\n this.field = field;\n this.code = `CONFIG_${field.toUpperCase()}`;\n }\n}\n\nclass ProcessingError extends Error {\n constructor(message, token) {\n super(message);\n this.name = 'ProcessingError';\n this.token = token;\n this.code = 'PROCESSING_ERROR';\n }\n}\n\nmodule.exports = {\n APIError,\n CacheError,\n ConfigError,\n ProcessingError\n};", "const Color = require('color');\nconst https = require('https');\nconst fs = require('fs');\nconst path = require('path');\nconst { ProcessingError } = require('./errors');\n\n\nconst SHADCN_THEME_FALLBACKS = {\n '--background': 'oklch(1 0 0)',\n '--foreground': 'oklch(0.145 0 0)',\n '--card': 'oklch(1 0 0)',\n '--card-foreground': 'oklch(0.145 0 0)',\n '--popover': 'oklch(1 0 0)',\n '--popover-foreground': 'oklch(0.145 0 0)',\n '--primary': 'oklch(0.205 0 0)',\n '--primary-foreground': 'oklch(0.985 0 0)',\n '--secondary': 'oklch(0.97 0 0)',\n '--secondary-foreground': 'oklch(0.205 0 0)',\n '--muted': 'oklch(0.97 0 0)',\n '--muted-foreground': 'oklch(0.556 0 0)',\n '--accent': 'oklch(0.97 0 0)',\n '--accent-foreground': 'oklch(0.205 0 0)',\n '--destructive': 'oklch(0.577 0.245 27.325)',\n '--destructive-foreground': 'oklch(0.985 0 0)',\n '--border': 'oklch(0.922 0 0)',\n '--input': 'oklch(0.922 0 0)',\n '--ring': 'oklch(0.708 0 0)',\n '--sidebar': 'oklch(0.985 0 0)',\n '--sidebar-foreground': 'oklch(0.145 0 0)',\n '--sidebar-primary': 'oklch(0.205 0 0)',\n '--sidebar-primary-foreground': 'oklch(0.985 0 0)',\n '--sidebar-accent': 'oklch(0.97 0 0)',\n '--sidebar-accent-foreground': 'oklch(0.205 0 0)',\n '--sidebar-border': 'oklch(0.922 0 0)',\n '--sidebar-ring': 'oklch(0.708 0 0)',\n '--chart-1': 'oklch(0.646 0.222 41.116)',\n '--chart-2': 'oklch(0.6 0.118 184.704)',\n '--chart-3': 'oklch(0.398 0.07 227.392)',\n '--chart-4': 'oklch(0.828 0.189 84.429)',\n '--chart-5': 'oklch(0.769 0.188 70.08)'\n};\n\nconst SHADCN_THEME_MAP = {\n '--background': ['--bg-default', '--bg-neutral-low', '--layer-base'],\n '--foreground': ['--text-neutral-strong', '--text-default'],\n '--card': ['--layer-1', '--bg-neutral-low', '--bg-default'],\n '--card-foreground': ['--text-neutral-strong', '--text-default'],\n '--popover': ['--layer-1', '--bg-neutral-low', '--bg-default'],\n '--popover-foreground': ['--text-neutral-strong', '--text-default'],\n '--primary': ['--bg-brand-mid', '--bg-brand-strong'],\n '--primary-foreground': ['--text-onbrand-strong', '--text-inverse-low'],\n '--secondary': ['--bg-interactive-subtle', '--bg-neutral-low'],\n '--secondary-foreground': ['--text-oninteractive-subtle', '--text-neutral-strong'],\n '--muted': ['--bg-neutral-low', '--bg-disabled'],\n '--muted-foreground': ['--text-neutral-subtle', '--text-disabled'],\n '--accent': ['--bg-interactive-low', '--bg-brand-low', '--bg-neutral-low'],\n '--accent-foreground': ['--text-oninteractive-low', '--text-brand-strong', '--text-neutral-strong'],\n '--destructive': ['--bg-negative-mid', '--bg-negative-subtle'],\n '--destructive-foreground': ['--text-onnegative-subtle', '--text-inverse-low'],\n '--border': ['--border-neutral-subtle', '--border-default'],\n '--input': ['--border-neutral-subtle', '--border-default'],\n '--ring': ['--border-brand-mid', '--bg-brand-mid'],\n '--sidebar': ['--layer-1', '--bg-neutral-low', '--bg-default'],\n '--sidebar-foreground': ['--text-neutral-strong', '--text-default'],\n '--sidebar-primary': ['--bg-brand-mid', '--bg-brand-strong'],\n '--sidebar-primary-foreground': ['--text-onbrand-strong', '--text-inverse-low'],\n '--sidebar-accent': ['--bg-interactive-low', '--bg-neutral-low'],\n '--sidebar-accent-foreground': ['--text-oninteractive-low', '--text-neutral-strong'],\n '--sidebar-border': ['--border-neutral-subtle', '--border-default'],\n '--sidebar-ring': ['--border-brand-mid', '--bg-brand-mid'],\n '--chart-1': ['--bg-brand-mid', '--bg-brand-strong'],\n '--chart-2': ['--bg-interactive-mid', '--bg-interactive-low'],\n '--chart-3': ['--bg-positive-mid', '--bg-positive-subtle'],\n '--chart-4': ['--bg-warning-mid', '--bg-warning-subtle'],\n '--chart-5': ['--bg-negative-mid', '--bg-negative-subtle']\n};\n\nfunction resolveFirst(source, names, fallback) {\n for (const name of names || []) {\n if (source[name]) return source[name];\n }\n return fallback;\n}\n\nfunction buildShadcnThemeContract(semanticVariables = {}, utilities = {}) {\n const contract = {};\n\n for (const [cssVar, candidates] of Object.entries(SHADCN_THEME_MAP)) {\n contract[cssVar] = resolveFirst(\n semanticVariables,\n candidates,\n SHADCN_THEME_FALLBACKS[cssVar]\n );\n }\n\n const radius = utilities.borderRadius || {};\n contract['--radius'] = radius.default || radius.md || radius.lg || '0.625rem';\n contract['--radius-sm'] = radius.sm || 'calc(var(--radius) - 4px)';\n contract['--radius-md'] = radius.md || 'calc(var(--radius) - 2px)';\n contract['--radius-lg'] = radius.lg || 'var(--radius)';\n contract['--radius-xl'] = radius.xl || 'calc(var(--radius) + 4px)';\n\n return contract;\n}\n\nclass TokenProcessor {\n constructor() {\n this.useTailwindV4 = this.detectTailwindVersion();\n }\n\n /**\n * Detect whether the consuming project uses Tailwind CSS v4.\n *\n * Defaults to v3 behavior for backward compatibility when detection fails.\n *\n * @returns {boolean}\n */\n detectTailwindVersion() {\n try {\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n if (!fs.existsSync(packageJsonPath)) {\n return false;\n }\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n const tailwindVersion =\n packageJson.devDependencies?.tailwindcss ||\n packageJson.dependencies?.tailwindcss ||\n packageJson.peerDependencies?.tailwindcss;\n\n const majorVersion = tailwindVersion?.match(/(\\d+)\\./)?.[1];\n return majorVersion ? Number(majorVersion) >= 4 : false;\n } catch (error) {\n console.warn('[FrontFriend] Could not detect Tailwind version, defaulting to v3 (hex/HSL plugin mode)');\n return false;\n }\n }\n\n /**\n * Convert hex color to HSL format for Tailwind CSS\n * @param {string} hex - Hex color value\n * @returns {string} HSL string in format \"H S% L%\"\n */\n hexToHsl(hex) {\n try {\n const color = Color(hex);\n const hsl = color.hsl();\n \n // Get HSL values\n const h = Math.round(hsl.hue());\n const s = Math.round(hsl.saturationl());\n const l = Math.round(hsl.lightness());\n \n // Handle alpha channel if present\n const alpha = color.alpha();\n if (alpha < 1) {\n // Round alpha to 2 decimal places\n const roundedAlpha = Math.round(alpha * 100) / 100;\n return `${h} ${s}% ${l}% / ${roundedAlpha}`;\n }\n \n return `${h} ${s}% ${l}%`;\n } catch (error) {\n throw new ProcessingError(`Failed to convert color ${hex}: ${error.message}`, hex);\n }\n }\n\n /**\n * Convert a color to OKLCH format for Tailwind CSS v4 theme variables.\n *\n * @param {string} colorValue - Any color value supported by the color package\n * @returns {string} OKLCH color function\n */\n hexToOklch(colorValue) {\n try {\n const color = Color(colorValue);\n const rgb = color.rgb();\n const r = rgb.red() / 255;\n const g = rgb.green() / 255;\n const b = rgb.blue() / 255;\n\n const toLinear = (value) => (\n value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4)\n );\n\n const rLin = toLinear(r);\n const gLin = toLinear(g);\n const bLin = toLinear(b);\n\n const x = rLin * 0.4124564 + gLin * 0.3575761 + bLin * 0.1804375;\n const y = rLin * 0.2126729 + gLin * 0.7151522 + bLin * 0.0721750;\n const z = rLin * 0.0193339 + gLin * 0.1191920 + bLin * 0.9503041;\n\n const l = Math.cbrt(0.8189330101 * x + 0.3618667424 * y - 0.1288597137 * z);\n const m = Math.cbrt(0.0329845436 * x + 0.9293118715 * y + 0.0361456387 * z);\n const s = Math.cbrt(0.0482003018 * x + 0.2643662691 * y + 0.6338517070 * z);\n\n const L = 0.2104542553 * l + 0.7936177850 * m - 0.0040720468 * s;\n const a = 1.9779984951 * l - 2.4285922050 * m + 0.4505937099 * s;\n const bAxis = 0.0259040371 * l + 0.7827717662 * m - 0.8086757660 * s;\n\n const C = Math.sqrt(a * a + bAxis * bAxis);\n let H = Math.atan2(bAxis, a) * 180 / Math.PI;\n if (H < 0) H += 360;\n\n const roundedL = Math.round(L * 1000) / 1000;\n const roundedC = Math.round(C * 1000) / 1000;\n const roundedH = Math.round(H * 100) / 100;\n const alpha = color.alpha();\n\n if (alpha < 1) {\n const roundedAlpha = Math.round(alpha * 100) / 100;\n return `oklch(${roundedL} ${roundedC} ${roundedH} / ${roundedAlpha})`;\n }\n\n return `oklch(${roundedL} ${roundedC} ${roundedH})`;\n } catch (error) {\n throw new ProcessingError(`Failed to convert color ${colorValue}: ${error.message}`, colorValue);\n }\n }\n\n /**\n * Process color tokens into CSS variables\n * @param {Object} colorsData - Color tokens data\n * @returns {Object} Processed variables and color map\n */\n processColors(colorsData) {\n const variables = {};\n const colorMap = {};\n const utilities = {\n backgroundColor: {},\n textColor: {},\n borderColor: {}\n };\n\n // Check if we have valid color data\n if (!colorsData || typeof colorsData !== 'object') {\n console.log(' \u26A0\uFE0F No valid color data to process');\n return { variables, colorMap, utilities };\n }\n\n // Recursive function to process nested color structures\n const processColorGroup = (obj, prefix = '') => {\n for (const [key, value] of Object.entries(obj)) {\n if (value && typeof value === 'object') {\n if (value.$value) {\n // This is a color value\n const colorName = prefix ? `${prefix}-${key}` : key;\n const varName = `--color-${colorName}`;\n \n const colorValue = this.useTailwindV4\n ? this.hexToOklch(value.$value)\n : this.hexToHsl(value.$value);\n\n variables[varName] = colorValue;\n colorMap[colorName] = varName;\n \n // Generate Tailwind utilities\n const utilityValue = this.useTailwindV4 ? `var(${varName})` : `hsl(var(${varName}))`;\n utilities.backgroundColor[colorName] = utilityValue;\n utilities.textColor[colorName] = utilityValue;\n utilities.borderColor[colorName] = utilityValue;\n } else {\n // Nested structure, recurse\n const newPrefix = prefix ? `${prefix}-${key}` : key;\n processColorGroup(value, newPrefix);\n }\n }\n }\n };\n\n // Process colors - handle both nested and flat structures\n if (colorsData) {\n if (colorsData.colors) {\n processColorGroup(colorsData.colors);\n } else {\n // Direct color structure\n processColorGroup(colorsData);\n }\n }\n\n return {\n variables,\n colorMap,\n utilities\n };\n }\n\n /**\n * Process semantic tokens that reference other tokens\n * @param {Object} semanticData - Semantic tokens data\n * @param {Object} colorMap - Map of color names to CSS variables\n * @returns {Object} Semantic CSS variables and token utilities\n */\n processSemanticTokens(semanticData, colorMap) {\n const semanticVariables = {};\n const tokens = {\n backgroundColor: {},\n textColor: {},\n borderColor: {}\n };\n\n // Format token name (similar to current plugin)\n const formatTokenName = (name) => {\n return name.replace(/ /g, '').replace(/\\./g, '-').toLowerCase();\n };\n\n // Extract token reference from string like \"{colors.primary.500}\"\n const extractReference = (refString) => {\n // Handle non-string values\n if (typeof refString !== 'string') return null;\n \n const match = refString.match(/^\\{(.+)\\}$/);\n if (!match) return null;\n \n // Split the reference path and remove the first part if it's \"colors\"\n const parts = match[1].split('.');\n if (parts[0] === 'colors' && parts.length > 1) {\n // Check if second part is also \"colors\" (nested structure)\n if (parts[1] === 'colors' && parts.length > 2) {\n return parts.slice(2).join('-');\n }\n return parts.slice(1).join('-');\n }\n return parts.join('-');\n };\n\n // Process semantic category (bg, text, border)\n const processCategory = (category, outputCategory) => {\n if (!semanticData[category]) return;\n\n for (const [key, value] of Object.entries(semanticData[category])) {\n if (key === 'disabled') {\n // Handle disabled state specially\n const reference = extractReference(value.$value);\n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n const varName = `--${category}-disabled`;\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens[outputCategory]['disabled'] = `var(${varName})`;\n }\n }\n continue;\n }\n\n // Process nested structure (e.g., neutral -> low -> default)\n for (const [mainKey, mainValue] of Object.entries(value)) {\n for (const [stateKey, stateValue] of Object.entries(mainValue)) {\n let tokenKey = formatTokenName(`${key}-${mainKey}-${stateKey}`);\n \n // Remove '-default' suffix for cleaner class names\n if (tokenKey.endsWith('-default')) {\n tokenKey = tokenKey.slice(0, -8);\n }\n\n const varName = `--${category}-${tokenKey}`;\n \n // Check if it's a reference\n const reference = extractReference(stateValue.$value);\n if (reference) {\n // Look up the referenced color variable\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens[outputCategory][tokenKey] = `var(${varName})`;\n }\n } else if (stateValue.$value) {\n // Direct color value\n const colorValue = this.useTailwindV4\n ? this.hexToOklch(stateValue.$value)\n : this.hexToHsl(stateValue.$value);\n semanticVariables[varName] = colorValue;\n tokens[outputCategory][tokenKey] = this.useTailwindV4\n ? `var(${varName})`\n : `hsl(var(${varName}))`;\n }\n }\n }\n }\n };\n\n // Process semantic categories\n processCategory('bg', 'backgroundColor');\n processCategory('text', 'textColor');\n processCategory('border', 'borderColor');\n\n // Process layer tokens\n if (semanticData.layer) {\n for (const [layerKey, layerValue] of Object.entries(semanticData.layer)) {\n const varName = `--layer-${layerKey}`;\n const reference = extractReference(layerValue.$value);\n \n if (reference) {\n // Format the reference to match semantic token naming\n let formattedRef = reference.replace(/\\./g, '-').toLowerCase();\n \n // Remove -default suffix if present\n if (formattedRef.endsWith('-default')) {\n formattedRef = formattedRef.slice(0, -8);\n }\n \n // Check if it's a semantic reference (e.g., bg-neutral-subtle)\n if (formattedRef.startsWith('bg-') || formattedRef.startsWith('text-') || formattedRef.startsWith('border-')) {\n // It's referencing a semantic token\n const semanticVar = `--${formattedRef}`;\n semanticVariables[varName] = `var(${semanticVar})`;\n tokens.backgroundColor[`layer-${layerKey}`] = `var(${varName})`;\n } else {\n // It's referencing a color token\n const referencedVar = colorMap[formattedRef];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.backgroundColor[`layer-${layerKey}`] = `var(${varName})`;\n }\n }\n } else if (layerValue.$value) {\n // Direct value\n const colorValue = this.useTailwindV4\n ? this.hexToOklch(layerValue.$value)\n : this.hexToHsl(layerValue.$value);\n semanticVariables[varName] = colorValue;\n tokens.backgroundColor[`layer-${layerKey}`] = this.useTailwindV4\n ? `var(${varName})`\n : `hsl(var(${varName}))`;\n }\n }\n }\n\n // Process overlay tokens\n if (semanticData.overlay) {\n for (const [overlayKey, overlayValue] of Object.entries(semanticData.overlay)) {\n const varName = `--overlay-${overlayKey}`;\n \n if (overlayValue.$value) {\n // Overlay values are hex colors with alpha, keep them as-is\n semanticVariables[varName] = overlayValue.$value;\n tokens.backgroundColor[`overlay-${overlayKey}`] = `var(${varName})`;\n }\n }\n }\n\n // Process icon tokens (map to text and fill colors)\n if (semanticData.icon) {\n // Ensure fill property exists\n if (!tokens.fill) {\n tokens.fill = {};\n }\n \n for (const [iconKey, iconValue] of Object.entries(semanticData.icon)) {\n if (iconKey === 'disabled') {\n const reference = extractReference(iconValue.$value);\n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n const varName = `--icon-disabled`;\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.textColor['icon-disabled'] = `var(${varName})`;\n tokens.fill['icon-disabled'] = `var(${varName})`;\n }\n }\n continue;\n }\n\n for (const [mainKey, mainValue] of Object.entries(iconValue)) {\n for (const [stateKey, stateValue] of Object.entries(mainValue)) {\n let tokenKey = formatTokenName(`icon-${iconKey}-${mainKey}-${stateKey}`);\n if (tokenKey.endsWith('-default')) {\n tokenKey = tokenKey.slice(0, -8);\n }\n\n const varName = `--${tokenKey}`;\n const reference = extractReference(stateValue.$value);\n \n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.textColor[tokenKey] = `var(${varName})`;\n tokens.fill[tokenKey] = `var(${varName})`;\n }\n }\n }\n }\n }\n }\n\n return { semanticVariables, tokens };\n }\n\n /**\n * Fetch CSS from URL and parse font-face rules\n * @param {string} url - Font CSS URL\n * @returns {Promise<string>} Font face CSS\n */\n async fetchFontCss(url) {\n return new Promise((resolve, reject) => {\n https.get(url, (response) => {\n let data = '';\n \n if (response.statusCode !== 200) {\n reject(new Error(`Failed to fetch font CSS: ${response.statusCode}`));\n return;\n }\n\n response.on('data', (chunk) => {\n data += chunk;\n });\n\n response.on('end', () => {\n resolve(data);\n });\n\n response.on('error', (error) => {\n reject(error);\n });\n }).on('error', (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Parse font-face CSS into structured objects\n * @param {string} css - CSS text containing @font-face rules\n * @returns {Array} Array of font-face objects\n */\n parseFontFaces(css) {\n const fontFaceRegex = /@font-face\\s*{([^}]+)}/g;\n const fontFaces = [];\n let match;\n\n while ((match = fontFaceRegex.exec(css)) !== null) {\n const fontProperties = match[1].trim().split(';').filter(Boolean);\n const fontObj = {};\n\n fontProperties.forEach(prop => {\n const colonIndex = prop.indexOf(':');\n if (colonIndex !== -1) {\n const key = prop.slice(0, colonIndex).trim();\n const value = prop.slice(colonIndex + 1).trim();\n \n // Clean up quotes from font-family\n if (key === 'font-family') {\n fontObj[key] = value.replace(/[\"']/g, '');\n } else {\n fontObj[key] = value;\n }\n }\n });\n\n // Ensure src URLs are properly quoted\n if (fontObj['src']) {\n fontObj['src'] = fontObj['src']\n .replace(/url\\([\"']?/, 'url(\\'')\n .replace(/[\"']?\\)/, '\\')');\n }\n\n fontFaces.push(fontObj);\n }\n\n return fontFaces;\n }\n\n /**\n * Process fonts data\n * @param {Object} fontData - Font URLs object\n * @returns {Promise<Array>} Array of font-face objects\n */\n async processFonts(fontData) {\n const fontFaces = [];\n\n if (!fontData || typeof fontData !== 'object') {\n return fontFaces;\n }\n\n // Process each font URL (font, font2, etc.)\n const fontFields = Object.keys(fontData).filter(key => key.startsWith('font'));\n \n for (const field of fontFields) {\n const url = fontData[field];\n if (typeof url === 'string' && url.startsWith('http')) {\n try {\n const css = await this.fetchFontCss(url);\n const parsedFonts = this.parseFontFaces(css);\n \n if (parsedFonts.length > 0) {\n fontFaces.push(...parsedFonts);\n }\n } catch (error) {\n console.warn(`Failed to process font ${field}:`, error.message);\n }\n }\n }\n\n return fontFaces;\n }\n\n /**\n * Process font family tokens\n * @param {Object} globalTokens - Global tokens data containing font families\n * @returns {Object} Font family utilities\n */\n processFontFamilies(globalTokens) {\n const fontFamilyUtilities = {};\n \n if (!globalTokens || !globalTokens.font || !globalTokens.font.family) {\n return fontFamilyUtilities;\n }\n\n const fontFamilies = globalTokens.font.family;\n \n // Process each font family (primary, secondary, etc.)\n for (const [key, value] of Object.entries(fontFamilies)) {\n if (value && value.$value) {\n // Format the key (e.g., primary -> primary)\n const fontKey = key.toLowerCase();\n \n // Extract font family value\n let fontFamilyValue = value.$value;\n \n // If it's a reference, extract it\n if (typeof fontFamilyValue === 'string' && fontFamilyValue.startsWith('{') && fontFamilyValue.endsWith('}')) {\n // This is a reference, but for font families we usually have direct values\n fontFamilyValue = fontFamilyValue.slice(1, -1);\n }\n \n // Store the font family utility\n // Store the font family utility - ensure proper quoting for multi-word fonts\n // For Tailwind, we need to format font families properly\n \n // Capitalize the first letter of each word in font names for proper rendering\n const capitalizeFontName = (name) => {\n return name.split(' ').map(word => \n word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n ).join(' ');\n };\n \n // Check if it's already a font stack or needs quoting\n if (fontFamilyValue.includes(',')) {\n // It's already a font stack, use as is\n fontFamilyUtilities[fontKey] = fontFamilyValue;\n } else {\n // Capitalize the font name\n const capitalizedFont = capitalizeFontName(fontFamilyValue);\n \n if (capitalizedFont.includes(' ') && !capitalizedFont.startsWith('\"') && !capitalizedFont.startsWith(\"'\")) {\n // Multi-word font needs quotes, add generic fallback\n fontFamilyUtilities[fontKey] = `\"${capitalizedFont}\", sans-serif`;\n } else {\n // Single word font, add generic fallback\n fontFamilyUtilities[fontKey] = `${capitalizedFont}, sans-serif`;\n }\n }\n }\n }\n \n return fontFamilyUtilities;\n }\n\n /**\n * Process animations data\n * @param {Object} animationData - Animation definitions\n * @returns {Object} Keyframes and animation utilities\n */\n processAnimations(animationData) {\n const keyframes = {};\n const animations = {};\n\n if (!animationData || typeof animationData !== 'object') {\n return { keyframes, animations };\n }\n\n // Process each animation\n for (const [name, definition] of Object.entries(animationData)) {\n if (definition && typeof definition === 'object') {\n // Generate keyframe name\n const keyframeName = `${name}`;\n \n // Process keyframe steps\n if (definition.keyframes) {\n const keyframeSteps = {};\n \n for (const [step, props] of Object.entries(definition.keyframes)) {\n if (props && typeof props === 'object') {\n keyframeSteps[step] = props;\n }\n }\n \n keyframes[keyframeName] = keyframeSteps;\n }\n\n // Create animation utility\n const animationValue = [\n keyframeName,\n definition.duration || '1s',\n definition.easing || 'ease',\n definition.delay || '0s',\n definition.iterations || '1',\n definition.direction || 'normal',\n definition.fillMode || 'none'\n ].join(' ');\n\n animations[name] = animationValue;\n }\n }\n\n return { keyframes, animations };\n }\n\n /**\n * Generate safelist classes for Tailwind\n * @param {Object} tokens - All processed tokens\n * @returns {Array} Safelist patterns\n */\n generateSafelistClasses(tokens) {\n const safelist = [];\n\n // Add semantic token utilities (bg-, text-, border-)\n // Note: Only base classes are added to safelist. Variants (hover:, focus:, etc.)\n // are detected by Tailwind's JIT when actually used in components.\n // This prevents generation of invalid CSS selector combinations with Turbopack.\n if (tokens.backgroundColor) {\n for (const tokenName of Object.keys(tokens.backgroundColor)) {\n safelist.push(`bg-${tokenName}`);\n }\n }\n\n if (tokens.textColor) {\n for (const tokenName of Object.keys(tokens.textColor)) {\n safelist.push(`text-${tokenName}`);\n }\n }\n\n if (tokens.borderColor) {\n for (const tokenName of Object.keys(tokens.borderColor)) {\n safelist.push(`border-${tokenName}`);\n }\n }\n\n // Add fill utilities (for icons)\n if (tokens.fill) {\n for (const tokenName of Object.keys(tokens.fill)) {\n safelist.push(`fill-${tokenName}`);\n \n // Also add text-icon-* classes\n if (tokenName.startsWith('icon-')) {\n safelist.push(`text-${tokenName}`);\n }\n }\n }\n\n // Add font family utilities\n if (tokens.fontFamily) {\n for (const fontName of Object.keys(tokens.fontFamily)) {\n safelist.push(`font-${fontName}`);\n }\n }\n\n // Add animation classes\n if (tokens.animations) {\n for (const animationName of Object.keys(tokens.animations)) {\n safelist.push(`animate-${animationName}`);\n }\n }\n\n return safelist;\n }\n\n /**\n * Extract unique classes from components configuration\n * @param {Object} componentsConfig - Components configuration object\n * @returns {Array} Array of unique class names\n */\n extractClassesFromComponentsConfig(componentsConfig) {\n const classSet = new Set();\n\n // Helper function to extract classes from a string\n const extractClasses = (classString) => {\n if (typeof classString === 'string') {\n // Split by spaces and filter out empty strings\n const classes = classString.split(/\\s+/).filter(c => c.length > 0);\n classes.forEach(cls => {\n // Skip variant selectors like [&>svg]:absolute\n classSet.add(cls);\n });\n }\n };\n\n // Recursive function to traverse the config object\n const traverse = (obj) => {\n if (!obj || typeof obj !== 'object') return;\n\n for (const key in obj) {\n const value = obj[key];\n \n if (typeof value === 'string') {\n extractClasses(value);\n } else if (typeof value === 'object') {\n traverse(value);\n }\n }\n };\n\n // Process the components config\n if (componentsConfig) {\n traverse(componentsConfig);\n }\n\n // Convert set to array, filter out file: variant classes (they produce invalid\n // chained pseudo-element CSS like ::placeholder::file-selector-button), and sort\n return Array.from(classSet).filter(cls => !cls.startsWith('file:')).sort();\n }\n\n /**\n * Generate a CSS source file containing component classes for Tailwind v4 @source\n * scanning. Classes stay in comments because Tailwind only needs to discover the\n * strings; actual readable utilities are emitted by generateThemeCSS().\n *\n * @param {Array<string>} classes - Unique component classes\n * @returns {string}\n */\n generateClassesContent(classes = []) {\n const lines = [\n '/*',\n ' * Frontfriend Component Classes',\n ' *',\n ' * This file contains all classes used in Frontfriend component configs.',\n ' * Tailwind v4 scans this file via @source to generate utilities.',\n ' * DO NOT EDIT - Auto-generated by frontfriend CLI',\n ' */',\n '',\n '/*',\n ' * Classes:'\n ];\n\n let currentLine = ' * ';\n for (const cls of [...new Set(classes)].sort()) {\n if (currentLine.length + cls.length + 1 > 100) {\n lines.push(currentLine);\n currentLine = ` * ${cls}`;\n } else {\n currentLine += (currentLine === ' * ' ? '' : ' ') + cls;\n }\n }\n\n if (currentLine !== ' * ') {\n lines.push(currentLine);\n }\n\n lines.push(' */');\n\n return lines.join('\\n');\n }\n\n /**\n * Process custom CSS into a format compatible with Tailwind's addBase\n * @param {string} css - Raw CSS string\n * @returns {Object} CSS rules as object for Tailwind addBase\n */\n processCustomCss(css) {\n if (!css || typeof css !== 'string') {\n return {};\n }\n\n // Simply return the raw CSS as a string that can be added via addBase\n return { raw: css };\n }\n\n /**\n * Main orchestration method to process all token data\n * @param {Object} data - Complete token data from API\n * @returns {Promise<Object>} Processed token data\n */\n async process(data) {\n try {\n const result = {\n variables: {},\n semanticVariables: {},\n semanticDarkVariables: {},\n utilities: {},\n fontFaces: [],\n keyframes: {},\n animations: {},\n safelist: [],\n metadata: {},\n custom: data.customCss ? this.processCustomCss(data.customCss) : {}\n };\n\n // Handle different token formats (new vs legacy)\n let colorData = null;\n \n // Check if we have tokens in the new format\n if (data.tokens && typeof data.tokens === 'object') {\n // New format from processed-tokens endpoint\n const tokens = data.tokens;\n \n // Extract color data from various possible locations\n colorData = tokens['Global Colors/Default'] || \n tokens['Global Colors'] || \n tokens['colors'] ||\n tokens;\n } else if (data.colors) {\n // Legacy format or direct colors data\n colorData = data.colors;\n }\n\n // Process colors\n if (colorData) {\n const colorResult = this.processColors(colorData);\n result.variables = { ...result.variables, ...colorResult.variables };\n result.utilities = { ...result.utilities, ...colorResult.utilities };\n result.colorMap = colorResult.colorMap || {};\n } else {\n result.colorMap = {};\n }\n\n // Process semantic tokens (light mode)\n if (data.semantic && result.colorMap) {\n const semanticResult = this.processSemanticTokens(data.semantic, result.colorMap);\n result.semanticVariables = semanticResult.semanticVariables;\n // Merge tokens into utilities\n if (semanticResult.tokens) {\n result.tokens = semanticResult.tokens;\n // Replace color utilities with semantic token utilities\n result.utilities = semanticResult.tokens;\n }\n }\n\n // Process semantic tokens (dark mode)\n if (data.semanticDark && result.colorMap) {\n const semanticDarkResult = this.processSemanticTokens(data.semanticDark, result.colorMap);\n result.semanticDarkVariables = semanticDarkResult.semanticVariables;\n }\n\n // Process fonts\n if (data.fonts) {\n result.fontFaces = await this.processFonts(data.fonts);\n }\n\n // Process font families from global tokens\n if (data.globalTokens) {\n result.fontFamilies = this.processFontFamilies(data.globalTokens);\n \n // Add font family utilities\n if (result.fontFamilies) {\n if (!result.utilities.fontFamily) {\n result.utilities.fontFamily = {};\n }\n Object.assign(result.utilities.fontFamily, result.fontFamilies);\n }\n }\n\n // Process animations\n if (data.animations) {\n const animationResult = this.processAnimations(data.animations);\n result.keyframes = animationResult.keyframes;\n result.animations = animationResult.animations;\n }\n\n // Generate safelist from semantic tokens (not colorMap)\n // Pass the tokens object that contains backgroundColor, textColor, etc.\n result.safelist = this.generateSafelistClasses(result.tokens || result.utilities);\n\n // Add metadata\n result.metadata = {\n timestamp: new Date().toISOString(),\n version: data.version || '2.0.0',\n ffId: data.ffId\n };\n\n return result;\n } catch (error) {\n console.error('Error processing tokens:', error);\n throw error;\n }\n }\n\n /**\n * Generate Tailwind CSS v4 theme CSS while preserving Frontfriend's readable\n * semantic class names through @utility directives.\n *\n * @param {Object} processedData - Output from process()\n * @returns {string}\n */\n generateThemeCSS(processedData) {\n const lines = [\n '@import \"tw-animate-css\";',\n '',\n '@theme {'\n ];\n\n for (const [cssVar, value] of Object.entries(processedData.variables || {})) {\n lines.push(` ${cssVar}: ${value};`);\n }\n\n for (const [name, value] of Object.entries(processedData.fontFamilies || {})) {\n const cssVar = name.startsWith('--') ? name : `--font-${name}`;\n const fontValue = Array.isArray(value) ? value.join(', ') : value;\n lines.push(` ${cssVar}: ${fontValue};`);\n }\n\n for (const [name, value] of Object.entries(processedData.utilities?.spacing || {})) {\n const cssVar = name.startsWith('--') ? name : `--spacing-${name}`;\n lines.push(` ${cssVar}: ${value};`);\n }\n\n for (const [name, value] of Object.entries(processedData.utilities?.borderRadius || {})) {\n const cssVar = name.startsWith('--') ? name : `--radius-${name}`;\n lines.push(` ${cssVar}: ${value};`);\n }\n\n lines.push('}', '');\n\n const semanticVariables = processedData.semanticVariables || {};\n const lightShadcnContract = buildShadcnThemeContract(\n semanticVariables,\n processedData.utilities || {}\n );\n\n lines.push(':root:not(.dark) {');\n for (const [cssVar, value] of Object.entries(lightShadcnContract)) {\n lines.push(` ${cssVar}: ${value};`);\n }\n for (const [cssVar, value] of Object.entries(semanticVariables)) {\n lines.push(` ${cssVar}: ${value};`);\n }\n lines.push('}');\n\n if (processedData.semanticDarkVariables && Object.keys(processedData.semanticDarkVariables).length > 0) {\n const darkSemanticVariables = {\n ...semanticVariables,\n ...processedData.semanticDarkVariables\n };\n const darkShadcnContract = buildShadcnThemeContract(\n darkSemanticVariables,\n processedData.utilities || {}\n );\n\n lines.push('', ':root:not(.light) {');\n for (const [cssVar, value] of Object.entries(darkShadcnContract)) {\n lines.push(` ${cssVar}: ${value};`);\n }\n for (const [cssVar, value] of Object.entries(processedData.semanticDarkVariables)) {\n lines.push(` ${cssVar}: ${value};`);\n }\n lines.push('}');\n }\n\n const tokenGroups = {\n bg: [],\n text: [],\n border: [],\n icon: [],\n layer: [],\n overlay: []\n };\n\n for (const cssVar of Object.keys(processedData.semanticVariables || {})) {\n if (cssVar.startsWith('--bg-')) tokenGroups.bg.push(cssVar.slice('--bg-'.length));\n if (cssVar.startsWith('--text-')) tokenGroups.text.push(cssVar.slice('--text-'.length));\n if (cssVar.startsWith('--border-')) tokenGroups.border.push(cssVar.slice('--border-'.length));\n if (cssVar.startsWith('--icon-')) tokenGroups.icon.push(cssVar.slice('--icon-'.length));\n if (cssVar.startsWith('--layer-')) tokenGroups.layer.push(cssVar.slice('--layer-'.length));\n if (cssVar.startsWith('--overlay-')) tokenGroups.overlay.push(cssVar.slice('--overlay-'.length));\n }\n\n const addUtility = (className, declarations) => {\n lines.push('', `@utility ${className} {`);\n for (const declaration of declarations) {\n lines.push(` ${declaration}`);\n }\n lines.push('}');\n };\n\n for (const tokenName of tokenGroups.bg) {\n addUtility(`bg-${tokenName}`, [`background-color: var(--bg-${tokenName});`]);\n }\n\n for (const tokenName of tokenGroups.layer) {\n addUtility(`bg-layer-${tokenName}`, [`background-color: var(--layer-${tokenName});`]);\n }\n\n for (const tokenName of tokenGroups.overlay) {\n addUtility(`bg-overlay-${tokenName}`, [`background-color: var(--overlay-${tokenName});`]);\n }\n\n for (const tokenName of tokenGroups.text) {\n addUtility(`text-${tokenName}`, [`color: var(--text-${tokenName});`]);\n }\n\n for (const tokenName of tokenGroups.border) {\n addUtility(`border-${tokenName}`, [`border-color: var(--border-${tokenName});`]);\n }\n\n for (const tokenName of tokenGroups.icon) {\n addUtility(`icon-${tokenName}`, [`color: var(--icon-${tokenName});`]);\n addUtility(`text-icon-${tokenName}`, [`color: var(--icon-${tokenName});`]);\n }\n\n for (const fontFace of processedData.fontFaces || []) {\n lines.push('', '@font-face {');\n for (const [property, value] of Object.entries(fontFace)) {\n const cssProperty = property.replace(/([A-Z])/g, '-$1').toLowerCase();\n const cssValue = Array.isArray(value) ? value.join(', ') : value;\n lines.push(` ${cssProperty}: ${cssValue};`);\n }\n lines.push('}');\n }\n\n for (const [name, steps] of Object.entries(processedData.keyframes || {})) {\n lines.push('', `@keyframes ${name} {`);\n for (const [step, declarations] of Object.entries(steps)) {\n lines.push(` ${step} {`);\n for (const [property, value] of Object.entries(declarations)) {\n const cssProperty = property.replace(/([A-Z])/g, '-$1').toLowerCase();\n lines.push(` ${cssProperty}: ${value};`);\n }\n lines.push(' }');\n }\n lines.push('}');\n }\n\n for (const [name, value] of Object.entries(processedData.animations || {})) {\n addUtility(`animate-${name}`, [`animation: ${value};`]);\n }\n\n if (processedData.custom?.raw) {\n lines.push('', '/* Custom CSS */', processedData.custom.raw);\n }\n\n lines.push('', '/* Component classes for Tailwind scanning */', '@source \\'./classes.css\\';');\n\n return lines.join('\\n');\n }\n}\n\nmodule.exports = TokenProcessor;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["require_errors", "__commonJSMin", "exports", "module", "APIError", "message", "statusCode", "url", "CacheError", "operation", "ConfigError", "field", "ProcessingError", "token", "Color", "https", "fs", "path", "ProcessingError", "SHADCN_THEME_FALLBACKS", "SHADCN_THEME_MAP", "resolveFirst", "source", "names", "fallback", "name", "buildShadcnThemeContract", "semanticVariables", "utilities", "contract", "cssVar", "candidates", "radius", "TokenProcessor", "_a", "_b", "_c", "_d", "packageJsonPath", "packageJson", "tailwindVersion", "majorVersion", "hex", "color", "hsl", "h", "s", "l", "alpha", "roundedAlpha", "error", "colorValue", "rgb", "r", "g", "b", "toLinear", "value", "rLin", "gLin", "bLin", "x", "y", "z", "L", "a", "bAxis", "C", "H", "roundedL", "roundedC", "roundedH", "colorsData", "variables", "colorMap", "processColorGroup", "obj", "prefix", "key", "colorName", "varName", "utilityValue", "newPrefix", "semanticData", "tokens", "formatTokenName", "extractReference", "refString", "match", "parts", "processCategory", "category", "outputCategory", "reference", "referencedVar", "mainKey", "mainValue", "stateKey", "stateValue", "tokenKey", "layerKey", "layerValue", "formattedRef", "semanticVar", "overlayKey", "overlayValue", "iconKey", "iconValue", "url", "resolve", "reject", "response", "data", "chunk", "css", "fontFaceRegex", "fontFaces", "fontProperties", "fontObj", "prop", "colonIndex", "fontData", "fontFields", "field", "parsedFonts", "globalTokens", "fontFamilyUtilities", "fontFamilies", "fontKey", "fontFamilyValue", "capitalizeFontName", "word", "capitalizedFont", "animationData", "keyframes", "animations", "definition", "keyframeName", "keyframeSteps", "step", "props", "animationValue", "safelist", "tokenName", "fontName", "animationName", "componentsConfig", "classSet", "extractClasses", "classString", "c", "cls", "traverse", "classes", "lines", "currentLine", "result", "colorData", "colorResult", "semanticResult", "semanticDarkResult", "animationResult", "processedData", "fontValue", "lightShadcnContract", "darkSemanticVariables", "darkShadcnContract", "tokenGroups", "addUtility", "className", "declarations", "declaration", "fontFace", "property", "cssProperty", "cssValue", "steps"]
|
|
7
7
|
}
|
package/dist/next.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var u=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var S=u((W,_)=>{var L="https://app.frontfriend.dev",T="https://tokens-studio-donux.up.railway.app/api",k=".cache/frontfriend",P={JS:["tokens.js","variables.js","semanticVariables.js","semanticDarkVariables.js","safelist.js","custom.js"],JSON:["fonts.json","icons.json","components-config.json","version.json","metadata.json"]},b={FF_ID:"FF_ID",FF_API_URL:"FF_API_URL",FF_USE_LOCAL:"FF_USE_LOCAL"};_.exports={DEFAULT_API_URL:L,LEGACY_API_URL:T,CACHE_DIR_NAME:k,CACHE_TTL_DAYS:7,CACHE_TTL_MS:6048e5,CACHE_FILES:P,ENV_VARS:b}});var E=u((Z,y)=>{var h=class extends Error{constructor(e,t,s){super(e),this.name="APIError",this.statusCode=t,this.url=s,this.code=`API_${t}`}},d=class extends Error{constructor(e,t){super(e),this.name="CacheError",this.operation=t,this.code=`CACHE_${t.toUpperCase()}`}},p=class extends Error{constructor(e,t){super(e),this.name="ConfigError",this.field=t,this.code=`CONFIG_${t.toUpperCase()}`}},F=class extends Error{constructor(e,t){super(e),this.name="ProcessingError",this.token=t,this.code="PROCESSING_ERROR"}};y.exports={APIError:h,CacheError:d,ConfigError:p,ProcessingError:F}});var A=u((ee,C)=>{var c=require("fs");function J(n){try{let e=c.readFileSync(n,"utf8");return JSON.parse(e)}catch(e){if(e.code==="ENOENT")return null;throw e}}function U(n){try{return c.readFileSync(n,"utf8").replace(/^\uFEFF/,"")}catch(e){if(e.code==="ENOENT")return null;throw e}}function H(n,e,t=2){let s=JSON.stringify(e,null,t);c.writeFileSync(n,s,"utf8")}function R(n,e){if(e==null||typeof e=="object"&&Object.keys(e).length===0||Array.isArray(e)&&e.length===0){let s=`module.exports = ${Array.isArray(e)?"[]":"{}"};`;c.writeFileSync(n,s,"utf8")}else{let t=`module.exports = ${JSON.stringify(e,null,2)};`;c.writeFileSync(n,t,"utf8")}}function $(n){return c.existsSync(n)}function M(n){c.mkdirSync(n,{recursive:!0})}function V(n){c.rmSync(n,{recursive:!0,force:!0})}C.exports={readJsonFileSafe:J,readFileSafe:U,writeJsonFile:H,writeModuleExportsFile:R,fileExists:$,ensureDirectoryExists:M,removeDirectory:V}});var O=u((te,I)=>{var a=require("path"),{CACHE_DIR_NAME:q,CACHE_TTL_MS:G,CACHE_FILES:j}=S(),{CacheError:w}=E(),{readJsonFileSafe:x,readFileSafe:Y,writeJsonFile:D,writeModuleExportsFile:g,fileExists:N,ensureDirectoryExists:B,removeDirectory:X}=A(),m=class{constructor(e=process.cwd()){this.appRoot=e,this.cacheDir=a.join(e,"node_modules",q),this.metadataFile=a.join(this.cacheDir,"metadata.json"),this.maxAge=G}getCacheDir(){return this.cacheDir}exists(){return N(this.cacheDir)}isValid(){if(!this.exists())return!1;try{let e=x(this.metadataFile);if(!e)return!1;let t=new Date(e.timestamp).getTime();return Date.now()-t<this.maxAge}catch{return!1}}load(){if(!this.exists())return null;try{let e={};for(let t of j.JS){let s=a.join(this.cacheDir,t);if(N(s)){let i=t.replace(".js","");try{let r=Y(s);if(r!==null){let l={},o={exports:l};new Function("module","exports",r)(o,l),e[i]=o.exports}}catch(r){console.warn(`[Frontfriend] Failed to load ${t}: ${r.message}`),(r.message.includes("Unexpected token")||r.message.includes("Invalid character"))&&console.warn("[Frontfriend] This might be a BOM or encoding issue. Try deleting node_modules/.cache/frontfriend and running `npx frontfriend init` again.")}}}for(let t of j.JSON){let s=a.join(this.cacheDir,t),i=t.replace(".json",""),r=x(s);r!==null&&(e[i]=r)}return e["components-config"]&&(e.componentsConfig=e["components-config"],delete e["components-config"]),e.cls&&!e.safelist&&(e.safelist=e.cls,delete e.cls),e}catch(e){throw new w(`Failed to load cache: ${e.message}`,"read")}}save(e){var t,s;try{B(this.cacheDir);let i={timestamp:new Date().toISOString(),version:((t=e.metadata)==null?void 0:t.version)||"2.0.0",ffId:(s=e.metadata)==null?void 0:s.ffId};D(this.metadataFile,i);let r=["tokens","variables","semanticVariables","semanticDarkVariables","safelist","custom"];for(let o of r)if(e[o]!==void 0){let f=a.join(this.cacheDir,`${o}.js`);g(f,e[o])}if(e.safelist&&Array.isArray(e.safelist)){let o=a.join(this.cacheDir,"safelist.js");g(o,e.safelist)}let l={fonts:e.fonts,icons:e.icons||e.iconSet,"components-config":e.componentsConfig,version:e.version};for(let[o,f]of Object.entries(l))if(f!==void 0){let v=a.join(this.cacheDir,`${o}.json`);D(v,f)}}catch(i){throw new w(`Failed to save cache: ${i.message}`,"write")}}clear(){this.exists()&&X(this.cacheDir)}};I.exports=m});var z=O();function K(n={}){let e=new z(process.cwd()),t=null;return e.exists()?t=e.load():console.warn('[FrontFriend Next.js] No cache found. Please run "npx frontfriend init" first.'),{...n,env:{...n.env,NEXT_PUBLIC_FF_CONFIG:t?JSON.stringify(t.componentsConfig||null):"null",NEXT_PUBLIC_FF_ICONS:t?JSON.stringify(t.icons||null):"null"},webpack:(s,i)=>{if(typeof n.webpack=="function"&&(s=n.webpack(s,i)),!t)return s;let{webpack:r}=i,l=r.DefinePlugin,o={__FF_CONFIG__:JSON.stringify(t.componentsConfig||null),__FF_ICONS__:JSON.stringify(t.icons||null)};return s.plugins=s.plugins||[],s.plugins.push(new l(o)),i.dev&&!i.isServer&&console.log("[FrontFriend Next.js] Injected configuration and icons into client build"),s}}}module.exports=K;
|
|
1
|
+
var f=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var k=f((be,v)=>{var M="https://app.frontfriend.dev",B="https://registry-legacy.frontfriend.dev",$=".cache/frontfriend",W={JS:["tokens.js","variables.js","semanticVariables.js","semanticDarkVariables.js","safelist.js","custom.js"],JSON:["fonts.json","icons.json","components-config.json","version.json","metadata.json"]},G={FF_ID:"FF_ID",FF_API_URL:"FF_API_URL",FF_USE_LOCAL:"FF_USE_LOCAL",FF_AUTH_TOKEN:"FF_AUTH_TOKEN"};v.exports={DEFAULT_API_URL:M,LEGACY_API_URL:B,CACHE_DIR_NAME:$,CACHE_TTL_DAYS:7,CACHE_TTL_MS:6048e5,CACHE_FILES:W,ENV_VARS:G}});var _=f((me,j)=>{var g=class extends Error{constructor(e,r,o){super(e),this.name="APIError",this.statusCode=r,this.url=o,this.code=`API_${r}`}},b=class extends Error{constructor(e,r){super(e),this.name="CacheError",this.operation=r,this.code=`CACHE_${r.toUpperCase()}`}},m=class extends Error{constructor(e,r){super(e),this.name="ConfigError",this.field=r,this.code=`CONFIG_${r.toUpperCase()}`}},x=class extends Error{constructor(e,r){super(e),this.name="ProcessingError",this.token=r,this.code="PROCESSING_ERROR"}};j.exports={APIError:g,CacheError:b,ConfigError:m,ProcessingError:x}});var S=f((xe,z)=>{var s=require("fs");function Y(t){try{let e=s.readFileSync(t,"utf8");return JSON.parse(e)}catch(e){if(e.code==="ENOENT")return null;throw e}}function K(t){try{return s.readFileSync(t,"utf8").replace(/^\uFEFF/,"")}catch(e){if(e.code==="ENOENT")return null;throw e}}function X(t,e,r=2){let o=JSON.stringify(e,null,r);s.writeFileSync(t,o,"utf8")}function Q(t,e){s.writeFileSync(t,e,"utf8")}function Z(t,e){if(e==null||typeof e=="object"&&Object.keys(e).length===0||Array.isArray(e)&&e.length===0){let o=`module.exports = ${Array.isArray(e)?"[]":"{}"};`;s.writeFileSync(t,o,"utf8")}else{let r=`module.exports = ${JSON.stringify(e,null,2)};`;s.writeFileSync(t,r,"utf8")}}function ee(t){return s.existsSync(t)}function te(t){s.mkdirSync(t,{recursive:!0})}function re(t){s.rmSync(t,{recursive:!0,force:!0})}z.exports={readJsonFileSafe:Y,readFileSafe:K,writeJsonFile:X,writeTextFile:Q,writeModuleExportsFile:Z,fileExists:ee,ensureDirectoryExists:te,removeDirectory:re}});var T=f((he,N)=>{var l=require("path"),{CACHE_DIR_NAME:oe,CACHE_TTL_MS:ae,CACHE_FILES:C}=k(),{CacheError:F}=_(),{readJsonFileSafe:I,readFileSafe:ne,writeJsonFile:A,writeTextFile:D,writeModuleExportsFile:E,fileExists:O,ensureDirectoryExists:ie,removeDirectory:de}=S(),h=class{constructor(e=process.cwd()){this.appRoot=e,this.cacheDir=l.join(e,"node_modules",oe),this.metadataFile=l.join(this.cacheDir,"metadata.json"),this.maxAge=ae}getCacheDir(){return this.cacheDir}exists(){return O(this.cacheDir)}isValid(){if(!this.exists())return!1;try{let e=I(this.metadataFile);if(!e)return!1;let r=new Date(e.timestamp).getTime();return Date.now()-r<this.maxAge}catch{return!1}}load(){if(!this.exists())return null;try{let e={};for(let r of C.JS){let o=l.join(this.cacheDir,r);if(O(o)){let d=r.replace(".js","");try{let i=ne(o);if(i!==null){let a={},n={exports:a};new Function("module","exports",i)(n,a),e[d]=n.exports}}catch(i){console.warn(`[Frontfriend] Failed to load ${r}: ${i.message}`),(i.message.includes("Unexpected token")||i.message.includes("Invalid character"))&&console.warn("[Frontfriend] This might be a BOM or encoding issue. Try deleting node_modules/.cache/frontfriend and running `npx frontfriend init` again.")}}}for(let r of C.JSON){let o=l.join(this.cacheDir,r),d=r.replace(".json",""),i=I(o);i!==null&&(e[d]=i)}return e["components-config"]&&(e.componentsConfig=e["components-config"],delete e["components-config"]),e.cls&&!e.safelist&&(e.safelist=e.cls,delete e.cls),e}catch(e){throw new F(`Failed to load cache: ${e.message}`,"read")}}save(e){var r,o;try{ie(this.cacheDir);let d={timestamp:new Date().toISOString(),version:((r=e.metadata)==null?void 0:r.version)||"2.0.0",ffId:(o=e.metadata)==null?void 0:o.ffId};A(this.metadataFile,d);let i=["tokens","variables","semanticVariables","semanticDarkVariables","safelist","custom"];for(let n of i)if(e[n]!==void 0){let p=l.join(this.cacheDir,`${n}.js`);E(p,e[n])}if(e.safelist&&Array.isArray(e.safelist)){let n=l.join(this.cacheDir,"safelist.js");E(n,e.safelist)}let a={fonts:e.fonts,icons:e.icons||e.iconSet,"components-config":e.componentsConfig,version:e.version};for(let[n,p]of Object.entries(a))if(p!==void 0){let c=l.join(this.cacheDir,`${n}.json`);A(c,p)}e.themeCSS!==void 0&&D(l.join(this.cacheDir,"theme.css"),e.themeCSS),e.classesContent!==void 0&&D(l.join(this.cacheDir,"classes.css"),e.classesContent)}catch(d){throw new F(`Failed to save cache: ${d.message}`,"write")}}clear(){this.exists()&&de(this.cacheDir)}};N.exports=h});var P=f((ye,L)=>{L.exports={accordion:{root:"border border-border rounded-md [&>*:last-child]:border-b-0 font-primary",font:"font-primary text-primary",last:"[&>*]:border-b-0",header:"flex",item:"border-b border-border",trigger:{root:"flex flex-1 items-center text-primary active:text-primary/90 justify-between p-4 font-semibold transition-all [&[data-state=open]>svg]:rotate-180",icon:"shrink-0 transition-transform duration-200"},content:{root:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down text-foreground",wrapper:"p-4 pt-0"}},actionbar:{root:"pb-safe-bottom w-full justify-center border-t border-border z-20 bg-card items-center absolute bottom-0 left-1/2 transform -translate-x-1/2 flex",content:"gap-3 lg:gap-8 flex flex-row w-full",compact:"py-4 px-4",relaxed:"px-6 py-6",maxWidth:"max-w-2xl",align:{start:"justify-start",end:"justify-end",center:"justify-center",justify:"justify-between",stretch:"[&>*]:flex-1"}},alert:{root:"relative w-full rounded-md min-h-12 border gap-2 p-4 [&>svg~*]:pl-7 flex flex-col justify-center [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 font-primary shadow-sm",variant:{default:"bg-muted border border-transparent [&>svg]:text-muted-foreground text-foreground [&>div]:text-muted-foreground",destructive:"bg-destructive border border-transparent [&>svg]:text-destructive-foreground text-destructive-foreground",info:"bg-primary border border-transparent [&>svg]:text-primary-foreground text-primary-foreground",success:"bg-primary border border-transparent [&>svg]:text-primary-foreground text-primary-foreground",warning:"bg-primary border border-transparent [&>svg]:text-primary-foreground text-primary-foreground",brand:"bg-primary border border-transparent [&>svg]:text-primary-foreground text-primary-foreground"},title:"text-base leading-none tracking-tight font-semibold mb-0",description:"text-sm [&_p]:leading-relaxed leading-relaxed font-normal"},alertDialog:{overlay:"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",content:"font-primary border border-border fixed left-[50%] top-[50%] z-50 max-w-[90vw] grid w-full lg:max-w-lg translate-x-[-50%] translate-y-[-50%] gap-6 border border-border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg shadow-2xl",header:"flex flex-col space-y-2 gap-0.5 text-left",footer:"flex flex-row justify-end gap-4",title:"text-lg font-semibold text-foreground",description:"text-sm text-muted-foreground font-medium",cancel:"sm:mt-0"},avatar:{root:"font-primary relative border-border flex h-10 w-10 shrink-0 overflow-hidden rounded-full",image:"aspect-square h-full w-full",fallback:"bg-primary flex h-full w-full items-center justify-center rounded-full text-primary text-[40cqw]"},badge:{root:"font-primary inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive [&>svg]:pointer-events-none [&>svg]:size-3",variant:{main:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",secondary:"bg-secondary border-transparent text-secondary-foreground [&>svg]:text-secondary-foreground",destructive:"bg-destructive border-transparent text-white [&>svg]:text-white",success:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",tertiary:"bg-transparent border-border text-foreground [&>svg]:text-foreground",warning:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",brand:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",informative:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",highlight:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",subtle:{main:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",secondary:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",destructive:"bg-destructive border-transparent text-destructive-foreground [&>svg]:text-destructive-foreground",success:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",warning:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",tertiary:"bg-muted border-transparent text-foreground [&>svg]:text-foreground",brand:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",informative:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground",highlight:"bg-primary border-transparent text-primary-foreground [&>svg]:text-primary-foreground"}},dismissable:"hover:opacity-80",icon:"cursor-pointer",bullet:"p-0.5 w-5 h-5"},button:{root:"font-primary group inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20",variant:{main:"bg-primary text-primary-foreground hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",tertiary:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20",ghost:"hover:bg-accent hover:text-accent-foreground",ghostmain:"text-primary hover:bg-accent hover:text-primary/90",link:"text-primary underline-offset-4 hover:underline",linkdestructive:"text-destructive underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 gap-1.5 px-3",lg:"h-10 px-6",xs:"h-6 gap-1 px-2 text-xs",icon:"size-9"},icon:{root:"gap-2",size:{sm:"4",default:"4",lg:"4"},color:{main:"text-primary-foreground",secondary:"text-secondary-foreground",destructive:"text-white",ghost:"text-foreground group-hover:text-accent-foreground",tertiary:"text-foreground group-hover:text-accent-foreground",ghostmain:"text-primary",link:"text-primary",linkdestructive:"text-destructive"}},iconPosition:{prefix:{small:"pl-2",default:"pl-3",large:"pl-3"},suffix:{small:"pr-2",default:"pr-3",large:"pr-3"},default:{small:"w-8 px-0",default:"w-9 px-0",large:"w-10 px-0"}},fullwidth:{false:"",true:"w-full"},defaultVariants:{variant:"main",size:"default"},compoundVariants:{links:"p-0 text-sm font-medium tracking-0 h-fit"}},calendar:{root:"p-3 rounded-md font-primary",caption:{root:"flex justify-center pt-1 relative items-center",label:"text-sm text-foreground leading-snug font-medium"},months:"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",month:"space-y-4",nav:{root:"space-x-1 flex items-center",button:{root:"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100",previous:"absolute left-1",next:"absolute right-1"}},row:"flex w-full mt-2 cursor-not-allowed",table:"w-full border-collapse space-y-1",head:{row:"flex",cell:"text-muted-foreground leading-snug w-9 font-normal text-sm"},cell:"text-center text-sm p-0 relative [&:has([aria-selected])]:bg-muted/80 first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20",day:{root:"h-9 w-9 p-0 font-normal text-foreground aria-selected:opacity-100 inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background hover:bg-muted/80 aria-selected:hover:bg-primary/90",range:{end:"day-range-end",middle:"aria-selected:bg-muted/80 aria-selected:text-foreground aria-selected:hover:bg-muted/80"},selected:"bg-primary text-primary-foreground hover:bg-primary/90 hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",today:"bg-primary text-primary-foreground aria-selected:bg-primary/90 aria-selected:text-primary-foreground aria-selected:hover:bg-primary/90 aria-selected:focus:bg-primary/90",outside:"opacity-50 opacity-50 aria-selected:text-foreground day-outside aria-selected:bg-muted/80 aria-selected:hover:bg-muted/80 aria-selected:hover:text-foreground aria-selected:focus:bg-muted/80 aria-selected:focus:text-foreground",disabled:"text-muted-foreground opacity-50",hidden:"invisible"},customRoot:"p-3 rounded-md font-primary",header:"flex justify-center pt-1 relative items-center",content:"grid grid-cols-3 gap-2",options:"cursor-pointer",selectGroup:"flex items-center gap-2",nativeSelect:"h-8 rounded-md border border-input bg-background px-2 text-sm",range:{root:"p-3 rounded-md font-primary",container:"flex flex-col gap-4 sm:flex-row",row:"flex w-full mt-2",navSpacer:"h-7 w-7"}},card:{root:"rounded-2xl font-primary gap-0 border bg-card text-foreground border-border relative shadow-sm",title:"text-base text-foreground font-semibold leading-normal",description:"text-xs font-medium text-muted-foreground",header:"flex flex-col space-y-1.5 p-4 pb-0 rounded-t-2xl",content:"p-4 gap-4",footer:"flex gap-4 items-center p-4 bg-muted rounded-b-2xl",footerAlign:{justify:"flex justify-between",end:"flex justify-end",start:"flex justify-start",stretch:"flex [&>*]:flex-1"},outside:"absolute w-full pt-8 mt-[-16px] -z-10",noContent:"p-4"},chart:{container:"font-primary flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line-line]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",dot:{indicator:{root:"items-center",size:"h-2.5 w-2.5"}},line:{indicator:{size:"w-1"}},dashed:{indicator:{root:"w-0 border-[1.5px] border-dashed bg-transparent",label:"my-0.5"}},tooltip:{root:"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",label:{root:"font-mono font-medium tabular-nums text-foreground",wrapper:"font-medium"},payload:{root:"flex w-full items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",wrapper:"grid gap-1.5"},indicator:"shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",value:"font-mono font-medium tabular-nums text-foreground"},legend:{content:{root:"flex items-center justify-center gap-4",wrapper:"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"},align:{true:"pb-3",false:"pt-3"},item:"h-2 w-2 shrink-0 rounded-[2px]"},nest:{label:{false:"items-center",true:"items-end",container:"grid gap-1.5",text:"text-muted-foreground"}}},checkbox:{root:"peer rounded-md border w-5 h-5 disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-accent disabled:opacity-50 border-border hover:border-border bg-background hover:bg-muted/80 data-[state=checked]:border-primary/80 data-[state=checked]:hover:border-primary/80 data-[state=checked]:bg-primary/90 data-[state=checked]:hover:bg-primary/90 shrink-0 shadow-sm",icon:"text-foreground hover:text-foreground flex items-center justify-center"},checkboxField:{root:"flex items-center gap-2 font-primary w-fit",disabled:"opacity-5"},command:{root:"flex h-full flex-col overflow-hidden rounded-2xl bg-background text-popover-foreground py-1 font-primary",dialog:{content:"overflow-hidden p-0 shadow-lg",root:"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5"},input:{root:"flex h-11 py-1.5 border-0 w-full border-border rounded-sm text-foreground font-normal leading-normal bg-transparent px-1 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",wrapper:"flex items-center border-b border-border px-3 text-muted-foreground",icon:"h-4 w-4 shrink-0"},list:"max-h-[300px] overflow-y-auto overflow-x-hidden",empty:"py-6 text-center text-sm leading-normal font-normal",group:"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",separator:"-mx-1 h-px bg-muted",item:"relative flex justify-between cursor-base data-[highlighted]:bg-muted/80 data-[highlighted]:text-foreground hover:bg-muted/80 bg-transparent border-transparent hover:text-foreground disabled:opacity-50 text-foreground select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[selected=true]:bg-muted/80 data-[selected=true]:text-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50",shortcut:"ml-auto text-xs text-muted-foreground",combobox:{label:"px-2 py-1.5 text-xs font-medium text-muted-foreground"}},datePicker:{root:"w-[280px] justify-start text-left font-normal gap-y-0 [&>span]:truncate font-primary",button:"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-normal ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-sm font-medium tracking-0 pl-4 pr-4 h-10 bg-muted hover:bg-accent/80 active:bg-accent/80 disabled:opacity-50 border-border hover:border-border active:border-border disabled:opacity-50 border border-t border-b border-r border-l",isSelected:{true:"pointer-events-none",false:"w-full justify-start"},trigger:{popover:"w-fit justify-start font-normal text-sm leading-none",text:"truncate text-default-mid",select:"w-full mx-auto mb-2"},popover:{content:{root:"flex p-0 items-start gap-6 w-auto flex-col h-[563px] bg-popover z-50",relaxed:"flex p-0 items-start gap-6 w-auto flex-col lg:flex-row h-[522px] lg:h-auto bg-popover z-50",range:"w-auto p-0 z-50"}},presets:{relaxed:"flex flex-col items-sart gap-2 w-[150px]"},separator:{root:"hidden",relaxed:"h-[397px] shrink-0 hidden lg:flex"},dateInput:{relaxed:"lg:flex-row",root:"flex justify-between gap-6 w-full flex-col",wrapper:"flex gap-2 w-full",control:"w-full justify-center",separator:"py-1"},calendar:{container:{wrapper:"h-[457px]",root:"flex flex-col gap-2 items-start justify-between",relaxed:"lg:w-[544px] h-[397px]"}},buttons:{root:"flex-1",relaxed:"lg:flex-initial",trigger:"w-fit justify-start",container:{root:"flex gap-2",relaxed:"lg:pr-4"}},selectContent:"z-50",fullWidth:"w-full"},dateInput:{arrowUp:"ArrowUp",arrowDown:"ArrowDown",arrowLeft:"ArrowLeft",arrowRight:"ArrowRight",delete:"Delete",tab:"Tab",backspace:"Backspace",enter:"Enter",root:"flex border rounded-lg items-center text-sm px-1 font-medium leading-5 font-primary text-default-subtle h-10 border-border shadow-sm",inputs:{month:"p-0 outline-none w-6 border-none text-center bg-background",day:"p-0 outline-none w-7 border-none text-center bg-background",year:"p-0 outline-none w-12 border-none text-center bg-background"},span:"opacity-20 -mx-px"},dialog:{overlay:"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",content:"fixed flex flex-col lg:max-h-[90vh] max-h-[100vh] bg-background font-primary left-[50%] overflow-clip top-[50%] z-50 w-full translate-x-[-50%] translate-y-[-50%] data-[state=open]:animate-in data-[state=closed]:animate-out duration-200 border border-border data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-2xl shadow-2xl",body:"gap-0 flex flex-col h-full w-full overflow-y-auto mb-20 text-foreground",close:"absolute right-4 top-4 opacity-70 transition-opacity hover:opacity-100 disabled:pointer-events-none",header:"flex gap-0.5 flex-col p-6 pr-14 space-y-1.5 text-left bg-card sticky top-0",footer:"bg-card gap-4 h-20 px-6 items-center fixed bottom-0 w-full flex",footerAlign:{justify:"flex justify-between",end:"flex justify-end",start:"flex justify-start",stretch:"flex [&>*]:flex-1"},title:"text-2xl font-semibold leading-normal tracking-tight text-foreground",description:"text-sm text-muted-foreground leading-normal font-semibold",width:{xs:"max-w-sm",sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg","3xl":"max-w-3xl","5xl":"max-w-5xl",full:"max-w-full",fit:"max-w-fit"},isSm:"w-full",height:{full:"h-full",auto:"h-auto",else:"h-auto lg:h-full"},padding:{true:"px-6",false:"px-0"}},drawer:{overlay:"fixed inset-0 z-50 bg-black/80",content:{root:"overflow-clip fixed font-primary z-50 w-full",wrapper:"w-full h-full flex flex-col rounded-lg border border-border bg-background overflow-clip shadow-2xl"},header:"grid gap-0.5 text-left bg-card p-6 pr-14 sticky top-0 self-stretch",footer:"flex h-20 gap-4 bg-card items-center p-6 sticky bottom-0 w-full",title:"text-2xl font-semibold leading-none tracking-tight text-foreground",description:"text-sm font-semibold text-muted-foreground",footerAlign:{justify:"flex justify-between",end:"flex justify-end",start:"flex justify-start",stretch:"flex [&>*]:flex-1"},close:"absolute right-4 top-4 z-51",body:"gap-6 flex flex-col h-full w-full overflow-y-auto text-foreground max-h-[calc(100vh-160px)]",width:{xs:"max-w-sm",sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg","3xl":"max-w-3xl","5xl":"max-w-5xl",full:"max-w-full",fit:"max-w-fit"},isSm:"w-full",height:{full:"h-full",auto:"h-auto",else:"h-auto lg:h-full"},side:{left:"left-0 bottom-0",right:"right-0 bottom-0",bottom:"bottom-0",top:"top-0"},lgSide:{left:"lg:left-0 lg:bottom-0 lg:top-auto lg:right-auto",right:"lg:right-0 lg:bottom-0 lg:top-auto lg:left-auto",bottom:"lg:bottom-0 lg:inset-x-auto lg:top-auto",top:"lg:top-0 lg:inset-x-auto lg:bottom-auto"},padding:{true:"px-6",false:"px-0"},portal:{overlay:"no-after",content:"no_after p-2 max-h-screen"}},dropdown:{subTrigger:{root:"flex cursor-base select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none text-foreground data-[highlighted]:bg-accent/80 data-[highlighted]:border-transparent data-[highlighted]:text-foreground",icon:"ml-auto"},subContent:"font-primary z-30 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",content:"font-primary z-30 min-w-[8rem] gap-y-1 overflow-hidden border-border rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",item:"group relative leading-snug font-normal border-0 border-transparent gap-x-2 hover:bg-muted/80 hover:border-transparent data-[disabled]:bg-transparent data-[disabled]:border-transparent text-foreground hover:text-foreground data-[disabled]:opacity-50 flex cursor-base select-none bg-transparent items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-muted/80 data-[highlighted]:border-transparent data-[highlighted]:text-foreground",destructive:{item:"group relative leading-snug font-normal border-0 border-transparent gap-x-2 hover:bg-muted/80 hover:border-transparent data-[disabled]:bg-transparent data-[disabled]:border-transparent text-destructive hover:text-destructive data-[disabled]:text-destructive flex cursor-base select-none bg-transparent items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-muted/80 data-[highlighted]:border-transparent data-[highlighted]:text-destructive",shortcut:"ml-auto tracking-widest text-destructive"},checkbox:{item:"group relative leading-snug font-normal border-0 border-transparent gap-x-2 hover:bg-accent/80 hover:border-transparent data-[disabled]:bg-transparent data-[disabled]:border-transparent text-foreground hover:text-foreground data-[disabled]:opacity-50 flex cursor-base select-none bg-transparent items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-accent/80 data-[highlighted]:border-transparent data-[highlighted]:text-foreground",icon:"h-4 w-4 shrink-0 justify-center"},radio:{item:"relative flex cursor-base select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 text-foreground data-[highlighted]:bg-accent/80 data-[highlighted]:border-transparent data-[highlighted]:text-foreground",icon:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",indicator:"fill-current"},label:"bg-transparent border-transparent text-foreground px-2 py-1.5 rounded-sm text-sm leading-snug font-semibold",separator:"-mx-1 my-1 bg-muted h-px",inset:"pl-8",trigger:"outline-none",shortcut:"ml-auto tracking-widest text-muted-foreground group-hover:text-muted-foreground disabled:opacity-50"},fileupload:{root:"flex flex-col gap-4 items-center w-[343px] relative",uploader:"w-full relative shadow-sm shadow-sm rounded-md",card:"p-4 w-full min-h-[144px] flex flex-col justify-center items-center gap-0 border-border bg-muted shadow-sm",dragging:"bg-muted",container:"flex flex-col justify-center items-center gap-1 self-stretch relative",name:"text-center text-foreground font-primary text-lg w-full truncate font-semibold h-[27px]",description:"text-center font-primary text-muted-foreground text-sm w-full truncate font-medium h-[27px]",list:{title:"w-full flex justify-between items-center",root:"w-full font-primary",icon:{positive:"[&>svg]:text-primary",negative:"[&>svg]:text-destructive"}},spinner:"text-primary",button:"absolute z-20 top-4 right-4",cursor:"cursor-pointer",borderless:"border-0"},form:{label:{error:"text-destructive font-primary"},description:"text-sm text-muted-foreground font-primary",message:"text-sm font-medium text-destructive font-primary",item:{vertical:"flex flex-col gap-2 w-full",horizontal:"flex flex-row gap-2 items-center"}},input:{root:"font-primary flex h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base md:text-sm shadow-xs transition-[color,box-shadow] outline-none text-foreground placeholder:text-muted-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive disabled:cursor-not-allowed disabled:opacity-50",file:"text-muted-foreground",container:"relative w-full text-foreground",prefixIcon:{root:"absolute left-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed",props:{size:"4"}},prefix:"absolute left-3 top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",prefixSlot:"absolute left-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",suffixIcon:{root:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed",props:{size:"4"}},suffix:"absolute right-3 top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",suffixSlot:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",clearable:{root:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed cursor-pointer w-5 h-5 text-primary hover:text-primary/90 active:text-primary/90 p-0 hover:bg-transparent active:bg-transparent",props:{size:"default"}},passwordIcon:"absolute right-3 cursor-pointer top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",clearableIconSuffix:"right-12",textCenter:"text-center"},inputOTP:{root:"flex items-center gap-x-2 has-[:disabled]:opacity-50 font-primary",group:"flex items-center",input:"disabled:cursor-not-allowed",slot:{root:"p-3 font-medium relative flex h-10 w-10 bg-background text-muted-foreground items-center justify-center border-y border-r border-border text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md text-center shadow-sm",active:"z-10 ring-2"},fakeCaret:{wrapper:"pointer-events-none absolute inset-0 flex items-center justify-center",root:"h-4 w-px animate-caret-blink bg-foreground duration-1000"}},label:{root:"gap-y-1 gap-x-0 text-xs font-medium disable:opacity-70 font-primary",main:"text-muted-foreground disable:opacity-50",secondary:"text-muted-foreground disable:opacity-50",disabled:"opacity-50"},list:{root:"gap-y-2 flex flex-col rounded-2xl font-primary text-foreground",naked:{false:"[&>*:last-child]:[&>*:last-child]:border-b-0 [&>*:first-child]:[&>*:last-child]:rounded-t-2xl [&>*:last-child]:[&>*:last-child]:rounded-b-2xl",true:"[&>*:last-child]:bg-transparent border-0 [&>*:last-child]:border-transparent rounded-none [&>*:last-child>*]:px-0"},content:"border border-border rounded-2xl bg-card",shadow:{true:"[&>*:last-child]:shadow-none",false:"[&>*:last-child]:shadow-sm"},item:"p-3 px-4 gap-x-3 border-border border-b gap-y-0.5 min-h-14 flex items-center justify-between",interactive:"hover:bg-primary/90 cursor-pointer",wrapper:"justify-between flex items-center gap-x-3 w-full",inverted:"[&>*]:flex-col-reverse",attribute:"flex flex-col gap-x-1 justify-center",first:"text-base leading-normal font-medium text-foreground text-right whitespace-nowrap",second:"text-sm leading-normal font-medium text-muted-foreground text-right whitespace-nowrap",itemTitle:{root:"flex flex-col",title:"text-base leading-normal font-semibold text-foreground",description:"text-sm leading-normal font-medium text-muted-foreground"},title:{root:"text-primary p-0",main:"text-base leading-normal font-semibold",secondary:"text-xs leading-normal font-medium",justify:"flex justify-between",end:"flex justify-end",start:"flex justify-start",stretch:"flex [&>*]:flex-1"}},navbar:{wrapper:"font-primary font-medium flex flex-col w-full z-20 absolute w-full top-0 left-1/2 transform -translate-x-1/2 text-sm text-foreground px-6 bg-transparent lg:bg-transparent",root:"flex flex-col w-full items-center z-20",container:"flex w-full flex-col items-start z-20 justify-center flex-1",relaxed:"py-5 px-0 gap-4 gap-y-1",compact:"py-3 px-0 gap-2",content:"h-10 flex w-full relative gap-4",isTitle:"h-auto items-center",centerTitle:"flex-col items-center",external:"w-full hidden lg:flex",center:{root:"font-semibold h-full flex items-center max-w-full min-w-0 flex-[2] flex-col justify-center text-center",relaxed:"text-lg leading-normal",text:"line-clamp-1 w-full",compact:"text-lg"},left:"flex flex-1 justify-start items-center h-full gap-2 shrink-0",right:"flex flex-1 justify-end items-center h-full shrink-0 gap-4"},page:{root:"ff-page bg-background lg:bg-card h-screen text-foreground font-primary",focus:"bg-background lg:bg-background h-auto min-h-screen",focusOld:"bg-card lg:bg-card",inset:"bg-background lg:bg-background","focus-inset":"bg-background lg:bg-background","inset-2col":"bg-background lg:bg-background","inset-max-w":"bg-background lg:bg-background","inset-no-bg":"bg-muted lg:bg-muted",side:{root:"ff-pageSide px-4 py-4 lg:px-8 lg:py-8 pb-1 lg:pb-8 lg:border-border lg:border-r lg:w-80 w-full flex flex-col items-center lg:h-full h-fit lg:min-w-80",focus:"lg:py-10 lg:px-11 px-5 py-4 pb-4 lg:pb-10 gap-8 min-w-0 lg:min-w-0 lg:rounded-l-3xl rounded-t-3xl lg:rounded-t-none w-full lg:w-full bg-primary flex-col items-start overflow-hidden"},container:{root:"ff-pageContainer flex flex-col items-center w-full h-full lg:h-full min-h-full lg:max-w-7xl bg-transparent",focus:"max-w-5xl min-h-0 h-full lg:h-fit",focusOld:"bg-transparent lg:bg-transparent max-w-[9999px] lg:max-w-7xl rounded-t-none rounded-b-none border-0 border-border","focus-inset":"max-w-[358px] lg:max-w-3xl lg:min-h-[536px] min-h-[576px] h-fit lg:h-fit min-h-none rounded-lg border border-border bg-card lg:bg-card shadow-sm relative overflow-hidden pb-18 lg:pb-[88px]",inset:"max-w-[9999px] lg:max-w-[9999px] rounded-lg border border-border bg-card lg:bg-card shadow-sm relative overflow-hidden shadow-sm pb-18 lg:pb-[88px]","inset-max-w":"max-w-[9999px] lg:max-w-[9999px] rounded-lg border border-border bg-card lg:bg-card shadow-sm relative overflow-hidden shadow-sm pb-18 lg:pb-[88px]","inset-2col":"max-w-[9999px] lg:max-w-[1216px] rounded-lg border lg:min-h-0 lg:max-h-[800px] border-border bg-card lg:bg-card shadow-sm relative overflow-hidden shadow-sm","inset-no-bg":"max-w-[9999px] lg:max-w-[1440px] bg-transparent lg:bg-transparent shadow-sm relative overflow-hidden shadow-sm"},wrap:{root:"ff-pageWrap pt-16 pb-0 lg:pb-0 lg:pt-20 flex items-center flex-col self-stretch h-full bg-transparent lg:bg-transparent",focusOld:"pt-16 pb-28 lg:pt-24 lg:pb-28 h-full",focus:"lg:pt-0 pt-0 pb-0 lg:pb-0 min-h-screen","focus-inset":"pt-16 pb-4 lg:pt-20 lg:pb-0 bg-transparent lg:bg-transparent",inset:"px-0 pb-0 pt-16 lg:pt-20 bg-transparent lg:bg-transparent","inset-max-w":"px-0 pb-0 pt-16 lg:pt-20 bg-transparent lg:bg-transparent","inset-2col":"px-0 py-0 lg:px-0 lg:py-0 bg-transparent lg:bg-transparent","inset-no-bg":"px-0 pb-0 pt-16 lg:pt-20 bg-transparent lg:bg-transparent"},content:{root:"ff-pageContent flex gap-16 w-full self-stretch items-start h-full",focus:"lg:pt-0 pt-0 pb-0 lg:pb-0 border border-border overflow-hidden","focus-inset":"lg:gap-16 gap-0 justify-center items-start self-stretch w-full",focusOld:"justify-center",inset:"gap-16 self-stretch w-full","inset-max-w":"gap-16 self-stretch w-full justify-center overflow-x-auto lg:overflow-x-hidden","inset-2col":"lg:gap-16 gap-0 self-stretch w-full justify-center","inset-no-bg":"lg:gap-16 gap-0 self-stretch w-full items-start"},main:{root:"ff-pageMain h-full w-full bg-transparent max-w-none gap-y-6 flex flex-col items-start lg:py-6 lg:px-6 px-4 py-4 max-w-[9999px] flex-1 self-stretch overflow-x-auto lg:overflow-x-hidden",focus:"lg:px-10 lg:py-10 px-4 ly-4 w-full flex-col justify-center items-start gap-0 lg:min-h-0",focusOld:"bg-transparent lg:bg-transparent border-transparent lg:border-transparent px-0 py-0 lg:px-0 lg:py-0 max-w-[9999px] lg:max-w-3xl","focus-inset":"lg:max-w-3xl max-w-[9999px] lg:py-6 lg:px-6 px-4 py-4 lg:gap-6 gap-4 bg-transparent items-start w-full",noPadding:"lg:px-0 lg:py-0 py-0 px-0",inset:"lg:min-h-[536px] min-h-[576px] max-w-[9999px] lg:py-6 lg:px-6 px-4 py-4 lg:gap-6 gap-4 bg-transparent lg:items-center items-start","inset-2col":"lg:min-h-[536px] min-h-[576px] max-w-[9999px] lg:flex-row flex-col-reverse lg:py-0 lg:px-0 px-0 py-0 lg:gap-0 gap-0 bg-transparent lg:items-start items-start","inset-no-bg":"lg:min-h-[536px] min-h-[576px] max-w-[9999px] lg:py-6 lg:px-6 px-4 py-4 lg:gap-6 gap-4 bg-transparent lg:items-center items-start","inset-max-w":"lg:min-h-[536px] min-h-[576px] lg:h-fit h-fit lg:max-w-3xl max-w-[9999px] self-stretch lg:py-6 lg:px-6 px-4 py-4 lg:gap-6 gap-4 bg-transparent lg:items-center items-start"},inner:{root:"ff-pageInner flex flex-col items-center w-full h-full min-h-full self-stretch bg-card",focus:"lg:py-6 lg:px-6 px-2 py-2 h-full items-center justify-center min-h-screen bg-transparent",noPadding:"lg:px-0 lg:py-0 py-0 px-0",inset:"lg:px-6 px-4 pt-0 lg:pb-6 pb-4 bg-transparent","inset-max-w":"lg:px-6 px-4 pt-0 lg:pb-6 pb-4 bg-transparent","inset-2col":"lg:px-6 px-4 lg:pb-6 pb-6 lg:pt-6 pt-4 bg-transparent lg:justify-center","focus-inset":"lg:px-0 px-0 lg:pt-6 pt-2 lg:pb-12 pb-4 bg-transparent","inset-no-bg":"lg:px-0 px-0 pt-0 lg:pb-0 pb-0 bg-transparent"}},multiSelect:{trigger:"flex w-full items-center bg-background h-auto min-h-10 max-h-auto p-3 px-4 justify-between [&_svg]:pointer-events-auto rounded-md font-normal",selected:"flex justify-between items-center w-full",wrapper:"flex flex-wrap items-center gap-2",optionIcon:"mr-2",controls:"flex items-center justify-between gap-2",separator:"flex min-h-6 h-full",noValue:"flex items-center justify-between w-full mx-auto",placeholder:"text-sm text-muted-foreground mx-3",item:"cursor-pointer justify-normal gap-1",noClearable:"ml-2",createNew:"flex flex-col gap-2 items-center",createNewButton:"w-fit",error:"px-3 py-1.5 text-destructive text-xs",empty:"px-2 py-1.5 text-xs text-muted-foreground"},pdfViewer:{root:"w-full h-full font-primary",worker:{root:"rpv-core__viewer flex h-full relative border",wrapper:"w-full h-full"},toolbar:{root:"items-center rounded-sm bottom-6 flex left-1/2 p-1 absolute z-[1] bg-muted translate-x-[-50%]",icon:{root:"px-0 py-0.5",center:"px-0 py-0.5 ml-auto"}},input:"w-[40px] mr-2",viewer:"flex-1 overflow-hidden"},phoneInput:{root:"font-primary focus:placeholder:text-muted-foreground w-full text-foreground file:disabled:placeholder:opacity-50 gap-x-2 file:disabled:opacity-50 file:disabled:opacity-50 file:disabled:opacity-50 leading-relaxed font-medium font-primary text-sm disabled:opacity-100 h-10 file:h-full gap-x-2 px-3 py-2 bg-background border-border placeholder:text-muted-foreground rounded-md focus:ring border focus:ring-blue-600 focus:ring-2 focus:ring-offset-1 focus:bg-muted focus-visible:outline-none focus:border-border focus:text-foreground disabled:opacity-50 disabled:border-border file:border-0 disabled:placeholder:opacity-50 disabled:opacity-50 disabled:opacity-50 file:bg-transparent file:border-border file:placeholder:text-muted-foreground file:text-foreground disabled:cursor-not-allowed [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden shadow-sm",file:"text-muted-foreground",container:"relative w-full text-foreground",prefixIcon:{root:"absolute left-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed",props:{size:"4"}},prefix:"absolute left-3 top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",prefixSlot:"absolute left-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",suffixIcon:{root:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed",props:{size:"4"}},suffix:"absolute right-3 top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",suffixSlot:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",clearable:{root:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed cursor-pointer w-5 h-5 text-primary hover:text-primary/90 active:text-primary/90 p-0 hover:bg-transparent active:bg-transparent",props:{size:"default"}},passwordIcon:"absolute right-3 cursor-pointer top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",clearableIconSuffix:"right-12",wrapper:"flex gap-4",selectorWrapper:"flex items-center",nativeSelect:"base-select",trigger:{layout:"flex items-center"},dialCode:"ml-2",triggerIcon:"ml-2 h-4 w-4",flagIcon:"-mr-2 h-5 w-5",content:"w-[300px] p-0",item:"gap-2",itemLabel:"flex-1 text-sm",input:"w-full",flag:"bg-muted flex h-4 w-6 overflow-hidden rounded-sm"},popover:{root:"z-30 font-primary w-72 rounded-md border gap-0 border-border bg-popover text-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 shadow-md",padding:{true:"p-4",false:"p-0"},trigger:"rounded-md"},progress:{root:"relative h-2 w-full overflow-hidden rounded-full bg-muted",indicator:"h-full w-full rounded-full flex-1 bg-primary transition-all"},radiogroup:{groupe:"grid gap-2 font-primary text-foreground",item:"aspect-square group h-6 w-6 bg-background aria-checked:bg-muted/80 hover:bg-muted/80 aria-checked:hover:bg-muted/80 disabled:opacity-50 aria-checked:disabled:opacity-50 border-border aria-checked:border-border hover:border-border aria-checked:hover:border-border disabled:opacity-50 aria-checked:disabled:opacity-50 rounded-full border focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 shadow-sm",indicator:"flex items-center justify-center",icon:"h-3.5 w-3.5 rounded-full",color:{root:"text-primary",disabled:"opacity-50"}},radiogroupeField:{root:"flex gap-2 font-primary self-stretch p-px",disabled:"opacity-50"},segmented:{root:"relative",active:"[&>svg]:text-primary",icon:"text-primary",trigger:"tab-trigger",activeTrigger:"tab-trigger-active",disabled:"pointer-events-none opacity-50"},select:{trigger:"disabled:opacity-50 [&>span]:truncate disabled:cursor-not-allowed focus:outline-none flex w-full items-center justify-between font-primary h rounded-md p-3 border bg-background disabled:opacity-50 border-border text-muted-foreground text-sm leading-normal font-medium disabled:opacity-50 shadow-sm h-10",scrollButton:"flex cursor-base items-center justify-center py-1",content:{root:"font-primary p-1 max-h-96 min-w-32 relative bg-muted border-border gap-y-1 border rounded-md z-30 overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 shadow-sm",popper:"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1"},label:"text-sm leading-snug font-semibold bg-transparent border-transparent text-foreground pl-8 pr-2 pt-1.5 pb-1.5",item:{root:"select-none focus:outline-none relative flex w-full items-center data-[disabled]:opacity-50 data-[disabled]:opacity-50 rounded-sm pl-8 pr-2 pt-1.5 pb-1.5 font-normal text-sm leading-snug border-0 bg-transparent border-transparent hover:bg-muted/80 hover:border-transparent data-[disabled]:bg-transparent data-[disabled]:border-transparent text-foreground hover:text-foreground data-[highlighted]:text-foreground data-[highlighted]:bg-muted/80 data-[highlighted]:border-transparent",icon:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},separator:"-mx-1 my-1 h-px bg-muted rounded-full",viewport:"",group:"w-full",icon:"opacity-50"},separator:{container:{root:"flex gap-2 font-primary text-foreground",horizontal:"flex-row items-center w-full",vertical:"flex-col items-center h-full"},root:"bg-transparent border-border border-b text-foreground rounded-full font-normal",vertical:"h-full w-[1px] border-b-0 border-l",horizontal:"h-[1px] w-full",padding:{horizontal:"py-4",vertical:"px-4"}},sheet:{overlay:"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",content:{base:"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out",variants:{top:"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",bottom:"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",left:"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",right:"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"}},closeButton:"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-muted",header:"flex flex-col space-y-2 text-center sm:text-left",footer:"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",title:"text-lg font-semibold text-foreground",description:"text-sm text-muted-foreground",srOnly:"sr-only"},sidebar:{sheet:{root:"w-[--sidebar-width] bg-background p-0 text-sidebar-foreground [&>button]:hidden"},provider:{wrapper:"group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar"},root:{base:"flex h-full w-[--sidebar-width] flex-col bg-background text-sidebar-foreground",props:{width:{root:"16rem",icon:"88px",mobile:"18rem"},shortcut:""},container:"flex h-full w-full flex-col",default:"group peer hidden lg:block",wrapper:{base:"duration-200 relative h-svh w-[--sidebar-width] bg-transparent transition-[width] ease-linear",collapsibleOffcanvas:"group-data-[collapsible=offcanvas]:w-0",flipped:"group-data-[side=right]:rotate-180",variants:{floating:"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]",inset:"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]",default:"group-data-[collapsible=icon]:w-[--sidebar-width-icon]"}},fixed:{base:"duration-200 fixed inset-y-0 z-10 hidden h-svh w-[--sidebar-width] transition-[left,right,width] ease-linear :flex border-border",side:{left:"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]",right:"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]"},variants:{floatingOrInset:"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]",default:"group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l"},inner:"flex h-full w-full flex-col text-sidebar-foreground bg-background group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-border group-data-[variant=floating]:shadow"},foreground:"text-sidebar-foreground"},rail:"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-muted/80 group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex [[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize [[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar [[data-side=left][data-collapsible=offcanvas]_&]:-right-2 [[data-side=right][data-collapsible=offcanvas]_&]:-left-2",trigger:"p-1 flex items-center border-border justify-center bg-card [&>svg]:text-foreground [&>svg]:size-4 [&>svg]:shrink-0",separator:"mx-2 w-auto bg-muted",content:"flex min-h-0 flex-1 flex-col gap-3 overflow-auto group-data-[collapsible=icon]:overflow-hidden px-2 py-3",header:"flex flex-col gap-2 pt-6 px-6 pb-0",footer:"flex flex-col gap-2 px-4 py-4",input:"h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-teal-600",inset:"relative flex min-h-svh flex-1 flex-col bg-background peer-data-[variant=inset]:min-h-[calc(100svh-theme(spacing.4))] lg:peer-data-[variant=inset]:m-2 lg:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 lg:peer-data-[variant=inset]:ml-0 lg:peer-data-[variant=inset]:rounded-xl lg:peer-data-[variant=inset]:shadow min-h-full relative overflow-hidden",group:{root:"relative flex w-full min-w-0 flex-col px-2 py-3",label:"duration-200 flex h-8 shrink-0 items-center font-primary rounded-md px-4 text-xs font-normal text-muted-foreground outline-none transition-[margin,opa] ease-linear [&>svg]:text-foreground [&>svg]:size-4 [&>svg]:shrink-0 group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",content:"w-full text-sm",action:"absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-teal-600 transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0 after:absolute after:-inset-2 after:lg:hidden group-data-[collapsible=icon]:hidden"},menu:{root:"flex w-full min-w-0 flex-col gap-2 py-2 px-2",item:"group/menu-item relative rounded-md font-primary font-medium",badge:"absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground select-none pointer-events-none peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground peer-data-[size=sm]/menu-button:top-1 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 group-data-[collapsible=icon]:hidden",action:"absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-teal-600 transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground after:absolute after:-inset-2 after:lg:hidden peer-data-[size=sm]/menu-button:top-1 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 group-data-[collapsible=icon]:hidden",actionHover:"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground lg:opacity-0",skeleton:{root:"rounded-md h-8 flex gap-2 px-2 items-center",icon:"size-4 rounded-md",text:"h-4 flex-1 max-w-[--skeleton-width]"},button:{root:"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md py-2 px-3 text-left text-sm outline-none transition-[width,height,padding] focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]: group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 font-medium",variant:{default:"items-center gap-2 overflow-hidden rounded-md font-primary font-medium px-2 py-1.5 text-muted-foreground aria-disabled:bg-transparent hover:text-foreground hover:bg-muted/80 aria-expanded:bg-background aria-expanded:text-foreground [&>svg]:aria-expanded:text-foreground aria-disabled:[&>svg]:opacity-50 aria-disabled:opacity-50 [&>svg]:hover:text-foreground [&>svg]:text-muted-foreground data-[active=true]:bg-background [&>svg]:data-[active=true]:text-foreground data-[active=true]:text-foreground",outline:"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"h-11 text-base",sm:"h-7 text-xs",lg:"h-12 text-sm p-0"},defaultVariants:{variant:"default",size:"default"}},sub:{list:"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 px-2.5 py-0.5 group-data-[collapsible=icon]:hidden",button:"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md font-primary font-medium px-3 py-2 text-muted-foreground aria-disabled:bg-transparent hover:text-foreground hover:bg-muted/80 focus-visible:ring-2 active:bg-background active:text-foreground active:[&>svg]:text-foreground aria-disabled:[&>svg]:opacity-50 aria-disabled:opacity-50 [&>svg]:hover:text-foreground [&>svg]:text-muted-foreground data-[active=true]:bg-background data-[active=true]:text-foreground group-data-[collapsible=icon]:hidden",buttonSize:{sm:"text-xs",default:"text-base",md:"text-sm"}}},srOnly:"sr-only"},skeleton:{root:"animate-pulse rounded-md bg-muted"},spinner:{root:"animate-spin",track:"opacity-20"},switch:{root:"peer p-0.5 inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-0 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed data-[state=checked]:bg-primary/90 data-[state=unchecked]:bg-accent/80 disabled:data-[state=unchecked]:opacity-50 disabled:data-[state=checked]:opacity-50",trigger:"border-transparent disabled:opacity-50 border-0 pointer-events-none block h-5 w-5 rounded-full data-[state=unchecked]:bg-background data-[state=checked]:bg-background shadow ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"},table:{root:"w-full overflow-clip caption-bottom text-sm bg-background rounded-md font-primary text-foreground",header:"[&_tr]:border-b h-12 bg-background border-border w-full",body:"[&_tr:last-child]:border-0",footer:"border-t bg-background font-medium [&>tr]:last:border-b-0",row:"items-center border-b [&>*:first-child]:pl-4 [&>*:last-child]:pr-4 border-border group transition-colors bg-background data-[state=selected]:bg-muted/80",head:"px-2 py-[10px] bg-transparent text-left align-middle font-medium text-muted-foreground text-xs",cell:"truncate px-2 h-12 align-middle [&:has([role=checkbox])]:pr-0 font-medium text-foreground text-sm",caption:"mt-4 text-sm text-muted-foreground",container:"w-full",empty:"flex items-center justify-center py-10"},tabs:{list:{root:"inline-flex h-[34px] gap-1 items-center justify-center rounded-md p-0.5 font-primary bg-background border border-border",line:"bg-transparent p-0 rounded-none border-border border-none border-b gap-0 h-auto relative",indicator:"absolute bottom-0 h-[1px] z-10 bg-primary transition-all duration-300 disabled:opacity-50",solidActive:"absolute transition-all duration-300 disabled:opacity-50 h-8 rounded-md bottom-auto bg-primary left-0 shadow",solidRoot:"relative"},trigger:{root:"gap-1 font-sm leading-snug font-medium inline-flex items-center justify-center whitespace-nowrap bg-transparent transition-all disabled:cursor-not-allowed disabled:opacity-50 disabled:opacity-50",solid:"font-primary text-sm font-semibold [&>svg]:text-muted-foreground rounded-md px-3 py-1.5 text-muted-foreground data-[state=active]:text-primary-foreground data-[state=active]:[&>svg]:text-primary-foreground z-0",line:"text-muted-foreground text-base font-semibold px-4 py-2 rounded-none bg-transparent z-0 data-[state=active]:text-primary/90 data-[state=active]:[&>svg]:text-primary/90 [&>svg]:text-muted-foreground border-border border-b font-semibold"},content:"font-primary mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"},textarea:{root:"flex gap-y-1.5 w-full leading-snug font-medium font-primary rounded-md border border-border bg-background focus-visible:border-primary focus-visible:bg-muted px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:placeholder:text-muted-foreground text-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 disabled:opacity-50 disabled:opacity-50 disabled:opacity-50 shadow-sm",noResize:"resize-none"},toast:{variant:{root:"flex w-full font-primary p-4 items-center gap-2 rounded-md border shadow-lg group",neutral:"bg-muted border-transparent",destructive:"bg-destructive border-transparent",warning:"bg-primary border-border",success:"bg-primary border-border",info:"bg-primary border-border"},description:{variant:{root:"leading-4 text-xs font-normal",neutral:"!text-muted-foreground flex",destructive:"!text-destructive-foreground",warning:"!text-muted-foreground",success:"!text-muted-foreground",info:"!text-muted-foreground"}},title:{variant:{root:"text-sm leading-4 font-medium",neutral:"text-foreground",destructive:"text-destructive-foreground",warning:"text-primary-foreground",success:"text-primary-foreground",info:"text-primary-foreground"}},icon:{variant:{neutral:"text-foreground",destructive:"text-destructive-foreground",warning:"text-primary-foreground",success:"text-primary-foreground",info:"text-primary-foreground"}},root:"lg:max-w-md justify-end flex",content:"flex gap-1 items-start flex-col flex-1",toaster:"toaster group"},tooltip:{content:"z-30 overflow-hidden rounded-md font-normal font-primary border gap-1 bg-primary px-3 py-1.5 text-sm text-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"},alertdialog:{overlay:"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",content:"font-primary border border-border fixed left-[50%] top-[50%] z-50 max-w-[90vw] grid w-full lg:max-w-lg translate-x-[-50%] translate-y-[-50%] gap-6 border border-border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg shadow-2xl",header:"flex flex-col space-y-2 gap-0.5 text-left",footer:"flex flex-row justify-end gap-4",title:"text-lg font-semibold text-foreground",description:"text-sm text-muted-foreground font-medium",cancel:"sm:mt-0"},checkboxfield:{root:"flex items-center gap-2 font-primary w-fit",disabled:"opacity-5"},datepicker:{root:"w-[280px] justify-start text-left font-normal gap-y-0 [&>span]:truncate font-primary",button:"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-normal ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-sm font-medium tracking-0 pl-4 pr-4 h-10 bg-muted hover:bg-accent/80 active:bg-accent/80 disabled:opacity-50 border-border hover:border-border active:border-border disabled:opacity-50 border border-t border-b border-r border-l",isSelected:{true:"pointer-events-none",false:"w-full justify-start"},trigger:{popover:"w-fit justify-start font-normal text-sm leading-none",text:"truncate text-default-mid",select:"w-full mx-auto mb-2"},popover:{content:{root:"flex p-0 items-start gap-6 w-auto flex-col h-[563px] bg-popover z-50",relaxed:"flex p-0 items-start gap-6 w-auto flex-col lg:flex-row h-[522px] lg:h-auto bg-popover z-50",range:"w-auto p-0 z-50"}},presets:{relaxed:"flex flex-col items-sart gap-2 w-[150px]"},separator:{root:"hidden",relaxed:"h-[397px] shrink-0 hidden lg:flex"},dateInput:{relaxed:"lg:flex-row",root:"flex justify-between gap-6 w-full flex-col",wrapper:"flex gap-2 w-full",control:"w-full justify-center",separator:"py-1"},calendar:{container:{wrapper:"h-[457px]",root:"flex flex-col gap-2 items-start justify-between",relaxed:"lg:w-[544px] h-[397px]"}},buttons:{root:"flex-1",relaxed:"lg:flex-initial",trigger:"w-fit justify-start",container:{root:"flex gap-2",relaxed:"lg:pr-4"}},selectContent:"z-50",fullWidth:"w-full"},dateinput:{arrowUp:"ArrowUp",arrowDown:"ArrowDown",arrowLeft:"ArrowLeft",arrowRight:"ArrowRight",delete:"Delete",tab:"Tab",backspace:"Backspace",enter:"Enter",root:"flex border rounded-lg items-center text-sm px-1 font-medium leading-5 font-primary text-default-subtle h-10 border-border shadow-sm",inputs:{month:"p-0 outline-none w-6 border-none text-center bg-background",day:"p-0 outline-none w-7 border-none text-center bg-background",year:"p-0 outline-none w-12 border-none text-center bg-background"},span:"opacity-20 -mx-px"},dropdownmenu:{subTrigger:{root:"flex cursor-base select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none text-foreground data-[highlighted]:bg-accent/80 data-[highlighted]:border-transparent data-[highlighted]:text-foreground",icon:"ml-auto"},subContent:"font-primary z-30 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",content:"font-primary z-30 min-w-[8rem] gap-y-1 overflow-hidden border-border rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",item:"group relative leading-snug font-normal border-0 border-transparent gap-x-2 hover:bg-muted/80 hover:border-transparent data-[disabled]:bg-transparent data-[disabled]:border-transparent text-foreground hover:text-foreground data-[disabled]:opacity-50 flex cursor-base select-none bg-transparent items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-muted/80 data-[highlighted]:border-transparent data-[highlighted]:text-foreground",destructive:{item:"group relative leading-snug font-normal border-0 border-transparent gap-x-2 hover:bg-muted/80 hover:border-transparent data-[disabled]:bg-transparent data-[disabled]:border-transparent text-destructive hover:text-destructive data-[disabled]:text-destructive flex cursor-base select-none bg-transparent items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-muted/80 data-[highlighted]:border-transparent data-[highlighted]:text-destructive",shortcut:"ml-auto tracking-widest text-destructive"},checkbox:{item:"group relative leading-snug font-normal border-0 border-transparent gap-x-2 hover:bg-accent/80 hover:border-transparent data-[disabled]:bg-transparent data-[disabled]:border-transparent text-foreground hover:text-foreground data-[disabled]:opacity-50 flex cursor-base select-none bg-transparent items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-accent/80 data-[highlighted]:border-transparent data-[highlighted]:text-foreground",icon:"h-4 w-4 shrink-0 justify-center"},radio:{item:"relative flex cursor-base select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 text-foreground data-[highlighted]:bg-accent/80 data-[highlighted]:border-transparent data-[highlighted]:text-foreground",icon:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",indicator:"fill-current"},label:"bg-transparent border-transparent text-foreground px-2 py-1.5 rounded-sm text-sm leading-snug font-semibold",separator:"-mx-1 my-1 bg-muted h-px",inset:"pl-8",trigger:"outline-none",shortcut:"ml-auto tracking-widest text-muted-foreground group-hover:text-muted-foreground disabled:opacity-50"},multiselect:{trigger:"flex w-full items-center bg-background h-auto min-h-10 max-h-auto p-3 px-4 justify-between [&_svg]:pointer-events-auto rounded-md font-normal",selected:"flex justify-between items-center w-full",wrapper:"flex flex-wrap items-center gap-2",optionIcon:"mr-2",controls:"flex items-center justify-between gap-2",separator:"flex min-h-6 h-full",noValue:"flex items-center justify-between w-full mx-auto",placeholder:"text-sm text-muted-foreground mx-3",item:"cursor-pointer justify-normal gap-1",noClearable:"ml-2",createNew:"flex flex-col gap-2 items-center",createNewButton:"w-fit",error:"px-3 py-1.5 text-destructive text-xs",empty:"px-2 py-1.5 text-xs text-muted-foreground"},pdfviewer:{root:"w-full h-full font-primary",worker:{root:"rpv-core__viewer flex h-full relative border",wrapper:"w-full h-full"},toolbar:{root:"items-center rounded-sm bottom-6 flex left-1/2 p-1 absolute z-[1] bg-muted translate-x-[-50%]",icon:{root:"px-0 py-0.5",center:"px-0 py-0.5 ml-auto"}},input:"w-[40px] mr-2",viewer:"flex-1 overflow-hidden"},radiogroupfield:{root:"flex gap-2 font-primary self-stretch p-px",disabled:"opacity-50"},inputotp:{root:"flex items-center gap-x-2 has-[:disabled]:opacity-50 font-primary",group:"flex items-center",input:"disabled:cursor-not-allowed",slot:{root:"p-3 font-medium relative flex h-10 w-10 bg-background text-muted-foreground items-center justify-center border-y border-r border-border text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md text-center shadow-sm",active:"z-10 ring-2"},fakeCaret:{wrapper:"pointer-events-none absolute inset-0 flex items-center justify-center",root:"h-4 w-px animate-caret-blink bg-foreground duration-1000"}},phoneinput:{root:"font-primary focus:placeholder:text-muted-foreground w-full text-foreground file:disabled:placeholder:opacity-50 gap-x-2 file:disabled:opacity-50 file:disabled:opacity-50 file:disabled:opacity-50 leading-relaxed font-medium font-primary text-sm disabled:opacity-100 h-10 file:h-full gap-x-2 px-3 py-2 bg-background border-border placeholder:text-muted-foreground rounded-md focus:ring border focus:ring-blue-600 focus:ring-2 focus:ring-offset-1 focus:bg-muted focus-visible:outline-none focus:border-border focus:text-foreground disabled:opacity-50 disabled:border-border file:border-0 disabled:placeholder:opacity-50 disabled:opacity-50 disabled:opacity-50 file:bg-transparent file:border-border file:placeholder:text-muted-foreground file:text-foreground disabled:cursor-not-allowed [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden shadow-sm",file:"text-muted-foreground",container:"relative w-full text-foreground",prefixIcon:{root:"absolute left-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed",props:{size:"4"}},prefix:"absolute left-3 top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",prefixSlot:"absolute left-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",suffixIcon:{root:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed",props:{size:"4"}},suffix:"absolute right-3 top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",suffixSlot:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",clearable:{root:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed cursor-pointer w-5 h-5 text-primary hover:text-primary/90 active:text-primary/90 p-0 hover:bg-transparent active:bg-transparent",props:{size:"default"}},passwordIcon:"absolute right-3 cursor-pointer top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",clearableIconSuffix:"right-12",wrapper:"flex gap-4",selectorWrapper:"flex items-center",nativeSelect:"base-select",trigger:{layout:"flex items-center"},dialCode:"ml-2",triggerIcon:"ml-2 h-4 w-4",flagIcon:"-mr-2 h-5 w-5",content:"w-[300px] p-0",item:"gap-2",itemLabel:"flex-1 text-sm",input:"w-full",flag:"bg-muted flex h-4 w-6 overflow-hidden rounded-sm"},inputNumber:{root:"font-primary focus:placeholder:text-muted-foreground w-full text-foreground file:disabled:placeholder:opacity-50 gap-x-2 file:disabled:opacity-50 file:disabled:opacity-50 file:disabled:opacity-50 leading-relaxed font-medium font-primary text-sm disabled:opacity-100 h-10 file:h-full gap-x-2 px-3 py-2 bg-background border-border placeholder:text-muted-foreground rounded-md focus:ring border focus:ring-blue-600 focus:ring-2 focus:ring-offset-1 focus:bg-muted focus-visible:outline-none focus:border-border focus:text-foreground disabled:opacity-50 disabled:border-border file:border-0 disabled:placeholder:opacity-50 disabled:opacity-50 disabled:opacity-50 file:bg-transparent file:border-border file:placeholder:text-muted-foreground file:text-foreground disabled:cursor-not-allowed [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden shadow-sm",file:"text-muted-foreground",container:"relative w-full text-foreground",prefixIcon:{root:"absolute left-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed",props:{size:"4"}},prefix:"absolute left-3 top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",prefixSlot:"absolute left-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",suffixIcon:{root:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed",props:{size:"4"}},suffix:"absolute right-3 top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",suffixSlot:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",clearable:{root:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed cursor-pointer w-5 h-5 text-primary hover:text-primary/90 active:text-primary/90 p-0 hover:bg-transparent active:bg-transparent",props:{size:"default"}},passwordIcon:"absolute right-3 cursor-pointer top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",clearableIconSuffix:"right-12",textCenter:"text-center"},inputnumber:{root:"font-primary focus:placeholder:text-muted-foreground w-full text-foreground file:disabled:placeholder:opacity-50 gap-x-2 file:disabled:opacity-50 file:disabled:opacity-50 file:disabled:opacity-50 leading-relaxed font-medium font-primary text-sm disabled:opacity-100 h-10 file:h-full gap-x-2 px-3 py-2 bg-background border-border placeholder:text-muted-foreground rounded-md focus:ring border focus:ring-blue-600 focus:ring-2 focus:ring-offset-1 focus:bg-muted focus-visible:outline-none focus:border-border focus:text-foreground disabled:opacity-50 disabled:border-border file:border-0 disabled:placeholder:opacity-50 disabled:opacity-50 disabled:opacity-50 file:bg-transparent file:border-border file:placeholder:text-muted-foreground file:text-foreground disabled:cursor-not-allowed [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden shadow-sm",file:"text-muted-foreground",container:"relative w-full text-foreground",prefixIcon:{root:"absolute left-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed",props:{size:"4"}},prefix:"absolute left-3 top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",prefixSlot:"absolute left-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",suffixIcon:{root:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed",props:{size:"4"}},suffix:"absolute right-3 top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",suffixSlot:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",clearable:{root:"absolute right-3 top-1/2 transform -translate-y-1/2 disabled:opacity-100 disabled:cursor-not-allowed cursor-pointer w-5 h-5 text-primary hover:text-primary/90 active:text-primary/90 p-0 hover:bg-transparent active:bg-transparent",props:{size:"default"}},passwordIcon:"absolute right-3 cursor-pointer top-1/2 transform -translate-y-1/2 font-medium text-sm font-primary disabled:opacity-100 disabled:opacity-50 disabled:opacity-50 disabled:cursor-not-allowed",clearableIconSuffix:"right-12",textCenter:"text-center"},dateSlider:{root:"p-3 rounded-md font-primary",caption:{root:"flex justify-center pt-1 relative items-center",label:"text-sm text-foreground leading-snug font-medium"},months:"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",month:"space-y-4",nav:{root:"space-x-1 flex items-center",button:{root:"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100",previous:"absolute left-1",next:"absolute right-1"}},row:"flex w-full mt-2 cursor-not-allowed",table:"w-full border-collapse space-y-1",head:{row:"flex",cell:"text-muted-foreground leading-snug w-9 font-normal text-sm"},cell:"text-center text-sm p-0 relative",day:{root:"h-9 w-9 p-0 font-normal text-foreground aria-selected:opacity-100 inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background hover:bg-muted/80 aria-selected:hover:bg-primary/90",range:{end:"day-range-end",middle:"aria-selected:bg-muted/80 aria-selected:text-foreground aria-selected:hover:bg-muted/80"},selected:"bg-primary text-primary-foreground hover:bg-primary/90 hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",today:"bg-primary text-primary-foreground aria-selected:bg-primary/90 aria-selected:text-primary-foreground aria-selected:hover:bg-primary/90 aria-selected:focus:bg-primary/90",outside:"opacity-50 opacity-50 aria-selected:text-foreground day-outside aria-selected:bg-muted/80 aria-selected:hover:bg-muted/80 aria-selected:hover:text-foreground aria-selected:focus:bg-muted/80 aria-selected:focus:text-foreground",disabled:"text-muted-foreground opacity-50",hidden:"invisible"},customRootSlider:"w-full",header:"flex justify-center pt-1 relative items-center",selectContent:"z-50",buttons:{props:{variant:"ghost"}},dialog:{false:"hidden",content:"grid gap-4",body:"grid gap-4",range:"grid gap-4"}},dateslider:{root:"p-3 rounded-md font-primary",caption:{root:"flex justify-center pt-1 relative items-center",label:"text-sm text-foreground leading-snug font-medium"},months:"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",month:"space-y-4",nav:{root:"space-x-1 flex items-center",button:{root:"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100",previous:"absolute left-1",next:"absolute right-1"}},row:"flex w-full mt-2 cursor-not-allowed",table:"w-full border-collapse space-y-1",head:{row:"flex",cell:"text-muted-foreground leading-snug w-9 font-normal text-sm"},cell:"text-center text-sm p-0 relative",day:{root:"h-9 w-9 p-0 font-normal text-foreground aria-selected:opacity-100 inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background hover:bg-muted/80 aria-selected:hover:bg-primary/90",range:{end:"day-range-end",middle:"aria-selected:bg-muted/80 aria-selected:text-foreground aria-selected:hover:bg-muted/80"},selected:"bg-primary text-primary-foreground hover:bg-primary/90 hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",today:"bg-primary text-primary-foreground aria-selected:bg-primary/90 aria-selected:text-primary-foreground aria-selected:hover:bg-primary/90 aria-selected:focus:bg-primary/90",outside:"opacity-50 opacity-50 aria-selected:text-foreground day-outside aria-selected:bg-muted/80 aria-selected:hover:bg-muted/80 aria-selected:hover:text-foreground aria-selected:focus:bg-muted/80 aria-selected:focus:text-foreground",disabled:"text-muted-foreground opacity-50",hidden:"invisible"},customRootSlider:"w-full",header:"flex justify-center pt-1 relative items-center",selectContent:"z-50",buttons:{props:{variant:"ghost"}},dialog:{false:"hidden",content:"grid gap-4",body:"grid gap-4",range:"grid gap-4"}},tabBar:{root:"pb-safe-bottom w-full justify-center border-t border-border z-20 bg-card items-center absolute bottom-0 left-1/2 transform -translate-x-1/2 flex",content:"gap-3 lg:gap-8 flex flex-row w-full",compact:"py-4 px-4",relaxed:"px-6 py-6",maxWidth:"max-w-2xl",align:{start:"justify-start",end:"justify-end",center:"justify-center",justify:"justify-between",stretch:"[&>*]:flex-1"}},tabbar:{root:"pb-safe-bottom w-full justify-center border-t border-border z-20 bg-card items-center absolute bottom-0 left-1/2 transform -translate-x-1/2 flex",content:"gap-3 lg:gap-8 flex flex-row w-full",compact:"py-4 px-4",relaxed:"px-6 py-6",maxWidth:"max-w-2xl",align:{start:"justify-start",end:"justify-end",center:"justify-center",justify:"justify-between",stretch:"[&>*]:flex-1"}},avatarGroup:{root:"flex flex-row relative h-10 w-full font-primary",avatar:"relative -ml-2 first:ml-0"},avatargroup:{root:"flex flex-row relative h-10 w-full font-primary",avatar:"relative -ml-2 first:ml-0"},timePicker:{trigger:"w-full",input:"w-full",wrapper:"grid gap-4",popover:{content:"w-auto p-4"},select:{root:"grid gap-2",label:"text-sm font-medium text-foreground",container:"flex flex-col gap-2",content:"max-h-48 overflow-y-auto"}},timepicker:{trigger:"w-full",input:"w-full",wrapper:"grid gap-4",popover:{content:"w-auto p-4"},select:{root:"grid gap-2",label:"text-sm font-medium text-foreground",container:"flex flex-col gap-2",content:"max-h-48 overflow-y-auto"}},collapsible:{root:"w-full",trigger:"inline-flex items-center justify-between gap-2",content:"overflow-hidden"},icon:{root:"shrink-0"},resizable:{root:"flex",panel:"relative",handle:"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center"},stepper:{root:"flex gap-2",item:"flex items-center gap-2",trigger:"inline-flex items-center gap-2",indicator:"flex size-8 items-center justify-center rounded-full border border-border",separator:"bg-border h-px flex-1",title:"font-medium text-foreground",description:"text-muted-foreground text-sm"},themeprovider:{root:"contents",themePicker:{srOnly:"sr-only"}},themepicker:{root:"inline-flex items-center gap-2 rounded-md border border-border bg-background p-1",icon:{light:"h-[1.2rem] w-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90",dark:"absolute h-[1.2rem] w-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0"},srOnly:"sr-only"},toggle:{root:"inline-flex items-center justify-center rounded-md text-sm font-medium hover:bg-accent hover:text-accent-foreground",variant:{default:"bg-transparent",outline:"border border-input bg-transparent"},size:{default:"h-9 px-3",sm:"h-8 px-2",lg:"h-10 px-4"}},fileuploader:{cursor:"cursor-pointer",borderless:"border-0"}}});var V=f((we,J)=>{var se=P(),le={button:{root:"font-sans group inline-flex shrink-0 items-center justify-center gap-2 rounded-md border border-transparent font-medium transition-colors disabled:pointer-events-none disabled:opacity-50",variants:{variant:{main:"bg-primary text-primary-foreground hover:bg-primary/90",default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",tertiary:"border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground",outline:"border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground",ghostmain:"bg-transparent text-primary hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline",linkDestructive:"text-destructive underline-offset-4 hover:underline",linkdestructive:"text-destructive underline-offset-4 hover:underline"},size:{xs:"h-8 px-2 text-xs",small:"h-9 px-3 text-sm",default:"h-10 px-4 py-2 text-sm",sm:"h-9 px-3 text-sm",icon:"h-10 w-10 px-0",lg:"h-11 px-8 text-base",large:"h-11 px-8 text-base"},iconPosition:{prefix:{sm:"pl-2",default:"pl-3",lg:"pl-4",small:"pl-2",large:"pl-4"},suffix:{sm:"pr-2",default:"pr-3",lg:"pr-4",small:"pr-2",large:"pr-4"},default:{sm:"h-9 w-9 px-0",default:"h-10 w-10 px-0",lg:"h-11 w-11 px-0",small:"h-9 w-9 px-0",large:"h-11 w-11 px-0"}}},slots:{icon:{root:"gap-2",variants:{size:{xs:"3",small:"4",sm:"4",default:"4",lg:"5",large:"5",icon:"4"},color:{main:"text-primary-foreground",default:"text-primary-foreground",destructive:"text-destructive-foreground",tertiary:"text-foreground",outline:"text-foreground",secondary:"text-secondary-foreground",ghost:"text-foreground",ghostmain:"text-primary",link:"text-primary",linkDestructive:"text-destructive",linkdestructive:"text-destructive"}}}},compoundVariants:{links:"h-auto p-0 text-sm font-medium"},defaultVariants:{variant:"main",size:"default"}},spinner:{root:"animate-spin text-primary"}},U=u(se,le);function R(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function u(t,e){if(e===void 0)return y(t);if(!R(t)||!R(e))return y(e);let r=y(t);for(let[o,d]of Object.entries(e))r[o]=u(t[o],d);return r}function y(t){if(t!==void 0)return JSON.parse(JSON.stringify(t))}function pe(t){return u(U,t||{})}J.exports={bundledDefaultConfig:U,deepMerge:u,mergeComponentsConfig:pe}});var fe=T(),{mergeComponentsConfig:q}=V(),ue=require("path");function ce(t={}){let e=new fe(process.cwd()),r=null,o=q(null),d={},i=!1;return e.exists()?(r=e.load(),r&&(i=!0,o=q(r.componentsConfig),d=r.icons||{})):console.warn('[FrontFriend Next.js] No cache found. Using bundled defaults. Run "npx frontfriend init" to fetch cloud config.'),{...t,env:{...t.env,NEXT_PUBLIC_FF_CONFIG:JSON.stringify(o),NEXT_PUBLIC_FF_ICONS:JSON.stringify(d)},webpack:(a,n)=>{if(typeof t.webpack=="function"&&(a=t.webpack(a,n)),i&&typeof e.getCacheDir=="function"){let w=ue.join(e.getCacheDir(),"theme.css");a.resolve=a.resolve||{},a.resolve.alias=a.resolve.alias||{},a.resolve.alias["@frontfriend/tailwind/theme"]=w,a.resolve.alias["@frontfriend/tailwind/theme.css"]=w}let{webpack:p}=n,c=p.DefinePlugin,H={__FF_CONFIG__:JSON.stringify(o),__FF_ICONS__:JSON.stringify(d)};return a.plugins=a.plugins||[],a.plugins.push(new c(H)),n.dev&&!n.isServer&&console.log("[FrontFriend Next.js] Injected configuration and icons into client build"),a}}}module.exports=ce;
|
|
2
2
|
//# sourceMappingURL=next.js.map
|