@yahoo/uds 3.142.0 → 3.143.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/client/Popover/UDSPopoverConfigProvider.d.cts +1 -1
- package/dist/components/client/Popover/UDSPopoverConfigProvider.d.ts +1 -1
- package/dist/styles/styler.d.cts +3 -3
- package/dist/styles/styler.d.ts +3 -3
- package/dist/tailwind/dist/automated-config/dist/mapTextVariantFixtureToValue.js.map +1 -1
- package/dist/tailwind/dist/automated-config/dist/properties.js.map +1 -1
- package/dist/tailwind/dist/automated-config/dist/utils/assertUnreachable.js.map +1 -1
- package/dist/tailwind/dist/automated-config/dist/utils/generateDefaultClassName.js.map +1 -1
- package/dist/tailwind/dist/automated-config/dist/utils/generateSchemaKey.js.map +1 -1
- package/dist/tailwind/dist/automated-config/dist/utils/index.js.map +1 -1
- package/dist/tailwind/dist/automated-config/dist/utils/mapColorFixtureToValue.js.map +1 -1
- package/dist/tailwind/dist/cli/dist/lib/logger.js.map +1 -1
- package/dist/tailwind/dist/cli/dist/lib/print.js.map +1 -1
- package/dist/tailwind/dist/cli/dist/lib/spinner.js.map +1 -1
- package/dist/tailwind/dist/commands/css.helpers.js.map +1 -1
- package/dist/tailwind/dist/commands/css.js.map +1 -1
- package/dist/tailwind/dist/commands/generateComponentData.js.map +1 -1
- package/dist/tailwind/dist/commands/generatePurgeCSSData.js.map +1 -1
- package/dist/tailwind/dist/commands/purge.js.map +1 -1
- package/dist/tailwind/dist/css/generate.helpers.js.map +1 -1
- package/dist/tailwind/dist/css/generate.js.map +1 -1
- package/dist/tailwind/dist/css/nodeUtils.js.map +1 -1
- package/dist/tailwind/dist/css/perf.js.map +1 -1
- package/dist/tailwind/dist/css/postcss.helpers.js.map +1 -1
- package/dist/tailwind/dist/css/postcss.js.map +1 -1
- package/dist/tailwind/dist/css/purgeWorker.js.map +1 -1
- package/dist/tailwind/dist/css/runner.helpers.js.map +1 -1
- package/dist/tailwind/dist/css/runner.js.map +1 -1
- package/dist/tailwind/dist/css/utils.js.map +1 -1
- package/dist/tailwind/dist/css/workerPool.js.map +1 -1
- package/dist/tailwind/dist/css-tokens/dist/index.js.map +1 -1
- package/dist/tailwind/dist/fixtures/dist/index.cjs +0 -10
- package/dist/tailwind/dist/fixtures/dist/index.js +0 -10
- package/dist/tailwind/dist/fixtures/dist/index.js.map +1 -1
- package/dist/tailwind/dist/modes/dist/index.cjs +1 -0
- package/dist/tailwind/dist/modes/dist/index.js +1 -0
- package/dist/tailwind/dist/modes/dist/index.js.map +1 -1
- package/dist/tailwind/dist/plugin.js.map +1 -1
- package/dist/tailwind/dist/purger/legacy/purgeCSS.js.map +1 -1
- package/dist/tailwind/dist/purger/legacy/purgeFromCode.js.map +1 -1
- package/dist/tailwind/dist/purger/optimized/ast/expressions.js.map +1 -1
- package/dist/tailwind/dist/purger/optimized/purge.js.map +1 -1
- package/dist/tailwind/dist/purger/optimized/purgeFromCode.js.map +1 -1
- package/dist/tailwind/dist/purger/optimized/utils/componentAnalyzer.js.map +1 -1
- package/dist/tailwind/dist/purger/optimized/utils/files.js.map +1 -1
- package/dist/tailwind/dist/purger/optimized/utils/safelist.js.map +1 -1
- package/dist/tailwind/dist/runtimeConfig/hookMetadata.js.map +1 -1
- package/dist/tailwind/dist/tailwind/base/addColorModeVars.js.map +1 -1
- package/dist/tailwind/dist/tailwind/base/addColorModeVarsV2.js.map +1 -1
- package/dist/tailwind/dist/tailwind/base/addFontFaceDeclarations.js.map +1 -1
- package/dist/tailwind/dist/tailwind/base/addFontVars.js.map +1 -1
- package/dist/tailwind/dist/tailwind/base/addMotionVars.js.map +1 -1
- package/dist/tailwind/dist/tailwind/base/addScaleModeVars.js.map +1 -1
- package/dist/tailwind/dist/tailwind/components/getFocusRingStyles.js.map +1 -1
- package/dist/tailwind/dist/tailwind/components/getHitTargetStyles.js.map +1 -1
- package/dist/tailwind/dist/tailwind/components/getIconStyles.js.map +1 -1
- package/dist/tailwind/dist/tailwind/components/getInputStyles.js.map +1 -1
- package/dist/tailwind/dist/tailwind/components/getResponsiveTextStyles.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/a11y.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/blurBgFallback.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/borderRadius.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/borderWidth.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/breakpoints.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/colors.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/components.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/elevation.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/getTailwindAsUdsColors.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/icons.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/input.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/motion.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/nestedBorderRadius.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/scaleMode.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/shadows.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/sizing.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/typography.js.map +1 -1
- package/dist/tailwind/dist/tailwind/theme/getFontFamilyTheme.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/addFontsPlugin.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/composeTailwindPlugins.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/getColorModeStyles.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/getElevationStyles.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/getFontFaceDeclarations.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/getFontStyles.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/getMotionStyles.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/getNestedBorderRadiusUtilities.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/getScaleModeStyles.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/getShadowPresetValues.js.map +1 -1
- package/dist/tailwind/dist/tailwind/utils/getShadowStyles.js.map +1 -1
- package/dist/tailwind/dist/utils/assertUnreachable.js.map +1 -1
- package/dist/tailwind/dist/utils/entries.js.map +1 -1
- package/dist/tailwind/dist/utils/entryPoints.js.map +1 -1
- package/dist/tailwind/dist/utils/fromEntries.js.map +1 -1
- package/dist/tailwind/dist/utils/generatePurgeCSSData.js.map +1 -1
- package/dist/tailwind/dist/utils/mapValues.js.map +1 -1
- package/dist/tailwind/dist/utils/opacity.js.map +1 -1
- package/dist/tailwind/dist/utils/optimizeCSS.js.map +1 -1
- package/dist/tailwind/dist/utils/parseTokens.js.map +1 -1
- package/dist/tailwind/dist/utils/postcssPreserveVars.js.map +1 -1
- package/dist/tailwind/dist/utils/tsMorph.js.map +1 -1
- package/dist/uds/generated/componentData.cjs +1311 -1311
- package/dist/uds/generated/componentData.js +1311 -1311
- package/dist/uds/generated/tailwindPurge.cjs +3 -0
- package/dist/uds/generated/tailwindPurge.js +3 -0
- package/dist/uds/package.cjs +2 -2
- package/dist/uds/package.js +2 -2
- package/generated/componentData.json +1692 -1692
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","names":[],"sources":["../../src/css/runner.ts"],"sourcesContent":["import fs from 'node:fs';\n\nimport { createLogger, gray, green, magenta, print, spinStart, spinStop } from '@yahoo/uds-cli/lib';\nimport type { UniversalTokensConfig } from '@yahoo/uds-config';\nimport { defaultTokensConfig } from '@yahoo/uds-config';\n\nimport type { SerializedComponentInfo } from '../commands/generateComponentData';\nimport {\n deduplicateSafelist,\n getInternalSafelistClasses,\n getThemeAndScaleClasses,\n} from '../purger/optimized/utils/safelist';\nimport type { EntryValue, ResolvedEntryPath } from '../utils/entryPoints';\nimport { DEFAULT_ENTRY, resolveEntryPaths } from '../utils/entryPoints';\nimport { generateCSS, generateSimpleModeCSS } from './generate';\nimport { getPruneVarSafelist } from './generate.helpers';\nimport {\n findPackageRoot,\n findPackageSourceDir,\n getPackageUdsScope,\n loadConfigFile,\n scanDirectoriesForSafelist,\n scanDirectoryForSafelist,\n} from './nodeUtils';\nimport { captureMemory, clearTimings, measureAsync, printPerfSummary } from './perf';\nimport {\n formatCssDuration,\n getMainCssSummaryMessage,\n getOutputFileSection,\n getScanSummaryMessage,\n getScopedCssSummaryMessage,\n getVerboseScanFileList,\n getWatchDirectoryGroups,\n} from './runner.helpers';\nimport type {\n UDSScopedPackageConfig,\n UDSScopedPackageValue,\n UDSThemeConfig,\n UDSThemeConfigInput,\n UDSThemeContext,\n} from './theme';\nimport {\n extractRuntimeConfigValues,\n extractVariantDefaults,\n formatBytes,\n getConfigurableCssVariables,\n getMotionVarPrefixes,\n} from './utils';\nimport { createWorkerPool } from './workerPool';\n\ntype CssCommandContext = {\n variants: Record<string, Record<string, string>>;\n autoVariants: Record<string, Record<string, string>>;\n componentData: Record<string, SerializedComponentInfo>;\n};\n\ntype CssCommandOptions = {\n workspaceDir: string;\n outFile: string;\n themeConfigPath: string;\n scope?: string;\n entryOption?: EntryValue;\n configOption?: string;\n watch: boolean;\n silent: boolean;\n verbose?: boolean;\n workers?: number;\n};\n\ntype ThemeModeSetup = {\n themeConfig: UDSThemeConfig;\n colorModes: ('dark' | 'light')[];\n entries: ResolvedEntryPath[];\n appConfig: UniversalTokensConfig;\n appVariantDefaults: ReturnType<typeof extractVariantDefaults>;\n runtimeConfigValues: ReturnType<typeof extractRuntimeConfigValues>;\n effectiveSilent: boolean;\n};\n\ntype ScopedPackageBuildTarget = {\n packageName: string;\n packageRoot: string;\n packageDir: string;\n entryDirs: string[];\n scopeClass: string;\n config: UDSScopedPackageConfig;\n};\n\ntype GeneratedCssOutput = {\n label: string;\n outputPath: string;\n sizeGzipBytes: number;\n optimizationStats?: {\n originalSizeGzip: number;\n fontFacesRemoved: number;\n emptyRulesRemoved: number;\n };\n};\n\nconst getScopedPackageOutputPath = (packageName: string, outFile?: string): string => {\n if (typeof outFile === 'string' && outFile.trim().length > 0) {\n return outFile;\n }\n\n const packageLeafName = packageName.split('/').pop() ?? packageName;\n return `dist/${packageLeafName}.css`;\n};\n\nconst normalizeScopedPackageConfig = (\n scopedPackageValue: UDSScopedPackageValue,\n): UDSScopedPackageConfig => {\n if (typeof scopedPackageValue === 'string') {\n return { config: scopedPackageValue };\n }\n\n return scopedPackageValue;\n};\n\nconst resolveScopedEntryDirs = (\n packageRoot: string,\n packageDir: string,\n entry: string | string[] | undefined,\n): string[] => {\n if (entry === undefined) {\n return [packageDir];\n }\n\n return resolveEntryPaths(entry, packageRoot).map((resolvedEntry) => resolvedEntry.absolutePath);\n};\n\nconst PATH_SEPARATOR = '/';\n\nconst normalizePath = (value: string): string => value.replace(/\\\\/g, PATH_SEPARATOR);\n\nconst isAbsolutePath = (value: string): boolean => {\n const normalizedValue = normalizePath(value);\n return normalizedValue.startsWith(PATH_SEPARATOR) || /^[A-Za-z]:\\//.test(normalizedValue);\n};\n\nconst joinPath = (...parts: string[]): string => {\n const filteredParts = parts.filter((part) => part.length > 0);\n if (filteredParts.length === 0) {\n return '';\n }\n\n const normalizedParts = filteredParts.map((part, index) => {\n const normalizedPart = normalizePath(part);\n if (index === 0) {\n return normalizedPart.replace(/\\/+$/g, '');\n }\n return normalizedPart.replace(/^\\/+|\\/+$/g, '');\n });\n\n return normalizedParts\n .join(PATH_SEPARATOR)\n .replace(/\\/+/g, PATH_SEPARATOR)\n .replace(/\\/\\.\\//g, PATH_SEPARATOR);\n};\n\nconst dirnamePath = (value: string): string => {\n const normalizedValue = normalizePath(value).replace(/\\/+$/g, '');\n const lastSeparatorIndex = normalizedValue.lastIndexOf(PATH_SEPARATOR);\n if (lastSeparatorIndex <= 0) {\n return lastSeparatorIndex === 0 ? PATH_SEPARATOR : '.';\n }\n\n return normalizedValue.slice(0, lastSeparatorIndex);\n};\n\nconst basenamePath = (value: string): string => {\n const normalizedValue = normalizePath(value).replace(/\\/+$/g, '');\n const lastSeparatorIndex = normalizedValue.lastIndexOf(PATH_SEPARATOR);\n return lastSeparatorIndex >= 0 ? normalizedValue.slice(lastSeparatorIndex + 1) : normalizedValue;\n};\n\nconst resolveOutputPath = (workspaceDir: string, outFile: string): string =>\n isAbsolutePath(outFile) ? outFile : joinPath(workspaceDir, outFile);\n\nconst ensureOutputDirectory = (outputPath: string): void => {\n const outputDir = dirnamePath(outputPath);\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n};\n\nconst SOURCE_FILE_PATTERN = /\\.(jsx?|tsx?)$/i;\n\ntype WatchTarget = {\n watchPath: string;\n recursive: boolean;\n fileNames?: string[];\n};\n\nconst getWatchDirs = (dirs: string[]): string[] => [\n ...new Set(\n dirs.filter((dir) => !normalizePath(dir).split(PATH_SEPARATOR).includes('node_modules')),\n ),\n];\n\nconst isCoveredByRecursiveWatch = (watchPath: string, targetPath: string): boolean =>\n targetPath === watchPath || targetPath.startsWith(`${watchPath}${PATH_SEPARATOR}`);\n\nconst getEntryWatchTargets = (entries: ResolvedEntryPath[]): WatchTarget[] => {\n const directoryTargets = getWatchDirs(\n entries.filter((entry) => entry.kind === 'directory').map((entry) => entry.absolutePath),\n ).map((watchPath) => ({ watchPath, recursive: true }));\n\n const fileNamesByDirectory = new Map<string, Set<string>>();\n\n entries\n .filter(\n (entry): entry is ResolvedEntryPath & { kind: 'file'; fileName: string } =>\n entry.kind === 'file' && typeof entry.fileName === 'string',\n )\n .forEach((entry) => {\n if (\n directoryTargets.some((target) =>\n isCoveredByRecursiveWatch(target.watchPath, entry.absolutePath),\n )\n ) {\n return;\n }\n\n const fileNames = fileNamesByDirectory.get(entry.watchDirectory) ?? new Set<string>();\n fileNames.add(entry.fileName);\n fileNamesByDirectory.set(entry.watchDirectory, fileNames);\n });\n\n const fileTargets = [...fileNamesByDirectory.entries()].map(([watchPath, fileNames]) => ({\n watchPath,\n recursive: false,\n fileNames: [...fileNames],\n }));\n\n return [...directoryTargets, ...fileTargets];\n};\n\nconst watchSourceFiles = (targets: WatchTarget[], onFileChange: () => void): void => {\n targets.forEach((target) => {\n fs.watch(target.watchPath, { recursive: target.recursive }, (_eventType, filename) => {\n if (!filename || !SOURCE_FILE_PATTERN.test(filename)) {\n return;\n }\n\n if (target.fileNames && !target.fileNames.includes(basenamePath(String(filename)))) {\n return;\n }\n\n onFileChange();\n });\n });\n};\n\nconst createDebouncedAction = (action: () => void, delayMs: number): (() => void) => {\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n return () => {\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n debounceTimer = setTimeout(action, delayMs);\n };\n};\n\nconst createQueuedRegenerator = <T>(options: {\n onStart?: () => void;\n onSuccess?: (result: T) => void;\n onError: (message: string) => void;\n regenerateOnce: () => Promise<T>;\n}): (() => Promise<void>) => {\n let isGenerating = false;\n let pendingRegenerate = false;\n\n const regenerate = async (): Promise<void> => {\n if (isGenerating) {\n pendingRegenerate = true;\n return;\n }\n\n isGenerating = true;\n try {\n options.onStart?.();\n const result = await options.regenerateOnce();\n options.onSuccess?.(result);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'CSS generation failed';\n options.onError(message);\n } finally {\n isGenerating = false;\n\n if (pendingRegenerate) {\n pendingRegenerate = false;\n await regenerate();\n }\n }\n };\n\n return regenerate;\n};\n\nconst printVerboseScanFiles = (\n log: ReturnType<typeof createLogger>,\n workspaceDir: string,\n filePaths: string[],\n): void => {\n getVerboseScanFileList(workspaceDir, filePaths).forEach((filePath) => {\n log.listItem(filePath);\n });\n};\n\nconst runCssCommand = async (\n options: CssCommandOptions,\n context: CssCommandContext,\n): Promise<void> => {\n const themeConfigExists = fs.existsSync(\n joinPath(options.workspaceDir, String(options.themeConfigPath)),\n );\n\n if (!themeConfigExists) {\n await runSimpleMode(options, context);\n return;\n }\n\n await runThemeMode(options, context);\n};\n\nconst runSimpleMode = async (\n options: CssCommandOptions,\n context: CssCommandContext,\n): Promise<void> => {\n const entry = options.entryOption ?? DEFAULT_ENTRY;\n const configPath = typeof options.configOption === 'string' ? options.configOption : undefined;\n\n if (!options.watch && !options.silent) {\n spinStart('Generating CSS...');\n }\n\n try {\n const result = await generateSimpleModeCSS({\n workspaceDir: options.workspaceDir,\n entry,\n outFile: String(options.outFile),\n variants: context.variants,\n autoVariants: context.autoVariants,\n componentData: context.componentData,\n scope: options.scope,\n configPath,\n isWatch: options.watch,\n silent: options.silent,\n verbose: options.verbose,\n });\n\n if (options.watch) {\n await runSimpleModeWatch(options, context, entry, configPath, result.packageDirs ?? []);\n }\n } catch (error) {\n spinStop('❌', error instanceof Error ? error.message : 'CSS generation failed');\n process.exitCode = 1;\n }\n};\n\nconst runSimpleModeWatch = async (\n options: CssCommandOptions,\n context: CssCommandContext,\n entry: EntryValue,\n configPath: string | undefined,\n packageDirs: string[],\n): Promise<void> => {\n const resolvedEntries = resolveEntryPaths(entry, options.workspaceDir);\n const entryWatchTargets = getEntryWatchTargets(resolvedEntries);\n const fallbackTargets = getWatchDirs(packageDirs).map((watchPath) => ({\n watchPath,\n recursive: true,\n }));\n const watchTargets = packageDirs.length > 0 ? fallbackTargets : entryWatchTargets;\n\n if (!options.silent) {\n print('');\n print(`${magenta('Watching for changes...')}`);\n watchTargets.forEach((target) => print(` ${gray('•')} ${target.watchPath}`));\n print(`${gray('Press Ctrl+C to stop')}`);\n print('');\n }\n\n const regenerate = createQueuedRegenerator({\n onStart: () => {\n if (!options.silent) {\n const timestamp = new Date().toLocaleTimeString();\n print(`${gray(`[${timestamp}]`)} Change detected, regenerating...`);\n }\n },\n regenerateOnce: async () => {\n await generateSimpleModeCSS({\n workspaceDir: options.workspaceDir,\n entry,\n outFile: String(options.outFile),\n variants: context.variants,\n autoVariants: context.autoVariants,\n componentData: context.componentData,\n scope: options.scope,\n configPath,\n isWatch: true,\n silent: true,\n });\n },\n onSuccess: () => {\n if (!options.silent) {\n const updatedAt = new Date().toLocaleTimeString();\n print(`${gray(`[${updatedAt}]`)} ${green('CSS updated')}`);\n print('');\n }\n },\n onError: (message) => {\n print(`Error: ${message}`);\n },\n });\n\n watchSourceFiles(\n watchTargets,\n createDebouncedAction(() => {\n void regenerate();\n }, 100),\n );\n\n await new Promise(() => {});\n};\n\nconst loadThemeModeSetup = async (options: CssCommandOptions): Promise<ThemeModeSetup | null> => {\n const themeConfigInput = await loadConfigFile<UDSThemeConfigInput>(\n String(options.themeConfigPath),\n );\n if (!themeConfigInput) {\n return null;\n }\n\n const themeContext: UDSThemeContext = {\n cwd: options.workspaceDir,\n watch: options.watch,\n };\n const themeConfig: UDSThemeConfig =\n typeof themeConfigInput === 'function'\n ? await themeConfigInput(themeContext)\n : themeConfigInput;\n\n let appConfig: UniversalTokensConfig = defaultTokensConfig;\n if (themeConfig.config) {\n const loadedConfig = await loadConfigFile<UniversalTokensConfig>(themeConfig.config);\n if (loadedConfig) {\n appConfig = loadedConfig;\n }\n }\n\n return {\n themeConfig,\n colorModes: themeConfig.colorModes ?? ['dark'],\n entries: resolveEntryPaths(themeConfig.entry, options.workspaceDir),\n appConfig,\n appVariantDefaults: extractVariantDefaults(appConfig),\n runtimeConfigValues: extractRuntimeConfigValues(appConfig),\n effectiveSilent: options.silent || themeConfig.silent === true,\n };\n};\n\nconst runThemeMode = async (\n options: CssCommandOptions,\n context: CssCommandContext,\n): Promise<void> => {\n const workspaceDir = options.workspaceDir;\n const outputPath = resolveOutputPath(workspaceDir, String(options.outFile));\n let effectiveSilent = options.silent;\n let log = createLogger({ silent: effectiveSilent });\n\n log.spinStart('Loading theme configuration...');\n\n try {\n const setup = await loadThemeModeSetup(options);\n if (!setup) {\n log.spinStop('❌', `Theme config not found: ${options.themeConfigPath}`);\n process.exitCode = 1;\n return;\n }\n\n const { themeConfig, colorModes, entries, appConfig, appVariantDefaults, runtimeConfigValues } =\n setup;\n effectiveSilent = setup.effectiveSilent;\n log = createLogger({ silent: effectiveSilent });\n const entryDirs = entries.map((entry) => entry.absolutePath);\n\n if (!effectiveSilent) {\n log.spinStop('✅', 'Theme configuration loaded');\n }\n\n if (themeConfig.config && appConfig === defaultTokensConfig) {\n log.warn(`App config not found: ${themeConfig.config}, using defaults`);\n }\n const packageDirs: string[] = [];\n\n const generateThemeModeCSS = async (opts?: { isWatch?: boolean }) => {\n clearTimings();\n captureMemory('start');\n const genStartTime = performance.now();\n const genLog = opts?.isWatch ? createLogger({ silent: true }) : log;\n const scopedCssOutputs: GeneratedCssOutput[] = [];\n\n // Create worker pool for parallel file processing\n const pool = await createWorkerPool(\n {\n variants: context.variants,\n autoVariants: context.autoVariants,\n componentData: context.componentData,\n },\n options.workers,\n );\n\n try {\n genLog.spinStart(\n `Scanning app and packages... (${pool.workerCount} worker${pool.workerCount === 1 ? '' : 's'})`,\n );\n\n const scopedPackageTargets: ScopedPackageBuildTarget[] = [];\n\n const processInheritedPackage = async (packageName: string) => {\n const packageDir = findPackageSourceDir(packageName);\n if (!packageDir) {\n return { packageName, status: 'not-found' as const };\n }\n\n if (!packageDirs.includes(packageDir)) {\n packageDirs.push(packageDir);\n }\n\n const packageScanResult = await scanDirectoryForSafelist(\n packageDir,\n colorModes,\n context.variants,\n context.autoVariants,\n context.componentData,\n appVariantDefaults,\n runtimeConfigValues,\n true,\n pool,\n );\n\n return {\n packageName,\n status: 'ok' as const,\n scanResult: packageScanResult,\n };\n };\n\n const processScopedPackage = async (\n packageName: string,\n scopedPackageValue: UDSScopedPackageValue,\n ) => {\n const scopedPackageConfig = normalizeScopedPackageConfig(scopedPackageValue);\n\n const packageRoot = findPackageRoot(packageName);\n const packageDir = findPackageSourceDir(packageName);\n if (!packageRoot || !packageDir) {\n return;\n }\n\n const scopeClass = getPackageUdsScope(packageName);\n if (!scopeClass) {\n return;\n }\n\n const entryDirs = resolveScopedEntryDirs(\n packageRoot,\n packageDir,\n scopedPackageConfig.entry,\n );\n entryDirs.forEach((entryDir) => {\n if (!packageDirs.includes(entryDir)) {\n packageDirs.push(entryDir);\n }\n });\n\n scopedPackageTargets.push({\n packageName,\n packageRoot,\n packageDir,\n entryDirs,\n scopeClass,\n config: scopedPackageConfig,\n });\n };\n\n // Run app scan, inherited package scans, and scoped package resolution in parallel\n const [appScanResult, inheritedResults] = await Promise.all([\n measureAsync('scan', () =>\n scanDirectoriesForSafelist(\n entryDirs,\n colorModes,\n context.variants,\n context.autoVariants,\n context.componentData,\n appVariantDefaults,\n runtimeConfigValues,\n false,\n pool,\n ),\n ),\n Promise.all(\n (themeConfig.inherit ?? []).map((packageName) =>\n measureAsync(`scan:inherit:${packageName}`, () =>\n processInheritedPackage(packageName),\n ),\n ),\n ),\n Promise.all(\n Object.entries(themeConfig.scoped ?? {}).map(([packageName, scopedPackageConfig]) =>\n processScopedPackage(packageName, scopedPackageConfig),\n ),\n ),\n ]);\n\n // Print app scan results\n genLog.spinStop(\n '✅',\n getScanSummaryMessage({\n label: 'app',\n filesScanned: appScanResult.filesScanned,\n filesWithComponents: appScanResult.filesWithComponents,\n componentCount: appScanResult.components.length,\n mode: 'app',\n }),\n );\n if (options.verbose) {\n printVerboseScanFiles(genLog, workspaceDir, appScanResult.filePaths);\n }\n\n // Print inherited package results\n for (const result of inheritedResults) {\n if (result.status === 'not-found') {\n genLog.spinStop('⚠️', `Package not found: ${result.packageName}`);\n } else {\n genLog.spinStop(\n '✅',\n getScanSummaryMessage({\n label: result.packageName,\n filesScanned: result.scanResult.filesScanned,\n filesWithComponents: result.scanResult.filesWithComponents,\n componentCount: result.scanResult.components.length,\n mode: 'inherit',\n }),\n );\n if (options.verbose) {\n printVerboseScanFiles(genLog, workspaceDir, result.scanResult.filePaths);\n }\n }\n }\n\n // Merge results from all scans\n const inheritedClasses: string[] = [...appScanResult.safelist];\n const inheritedComponents = new Set<string>(appScanResult.components);\n for (const result of inheritedResults) {\n if (result.status === 'ok') {\n inheritedClasses.push(...result.scanResult.safelist);\n result.scanResult.components.forEach((comp) => inheritedComponents.add(comp));\n }\n }\n\n genLog.spinStart('Generating main CSS...');\n\n const mainSafelist = deduplicateSafelist([\n ...inheritedClasses,\n ...getThemeAndScaleClasses(colorModes),\n ...getInternalSafelistClasses(),\n ]);\n\n const allMotionComponents: string[] = [...inheritedComponents];\n\n captureMemory('before-gen');\n const mainCssResult = await measureAsync('gen', () =>\n generateCSS([...(themeConfig.css?.safelist ?? []), ...mainSafelist], appConfig, {\n scope: options.scope,\n contentDir: entryDirs,\n cssOptions: themeConfig.css,\n safeVarPrefixes: [\n ...getMotionVarPrefixes(context.componentData, allMotionComponents),\n ...getConfigurableCssVariables(),\n ...getPruneVarSafelist(themeConfig.css),\n ],\n }),\n );\n captureMemory('after-gen');\n\n ensureOutputDirectory(outputPath);\n fs.writeFileSync(outputPath, mainCssResult.css);\n\n for (const scopedPackageTarget of scopedPackageTargets) {\n const packageConfigPath = isAbsolutePath(scopedPackageTarget.config.config)\n ? scopedPackageTarget.config.config\n : joinPath(scopedPackageTarget.packageRoot, scopedPackageTarget.config.config);\n const packageConfig =\n (await loadConfigFile<UniversalTokensConfig>(packageConfigPath)) ?? defaultTokensConfig;\n const packageVariantDefaults = extractVariantDefaults(packageConfig);\n const packageRuntimeConfigValues = extractRuntimeConfigValues(packageConfig);\n const packageScanResult = await scanDirectoriesForSafelist(\n scopedPackageTarget.entryDirs,\n colorModes,\n context.variants,\n context.autoVariants,\n context.componentData,\n packageVariantDefaults,\n packageRuntimeConfigValues,\n true,\n pool,\n );\n genLog.spinStop(\n '✅',\n getScanSummaryMessage({\n label: scopedPackageTarget.packageName,\n filesScanned: packageScanResult.filesScanned,\n filesWithComponents: packageScanResult.filesWithComponents,\n componentCount: packageScanResult.components.length,\n mode: 'scoped',\n }),\n );\n if (options.verbose) {\n printVerboseScanFiles(genLog, workspaceDir, packageScanResult.filePaths);\n }\n const packageSafelist = deduplicateSafelist([\n ...packageScanResult.safelist,\n ...getThemeAndScaleClasses(colorModes),\n ...getInternalSafelistClasses(),\n ]);\n const scopedCssResult = await generateCSS(\n [...(themeConfig.css?.safelist ?? []), ...packageSafelist],\n packageConfig,\n {\n scope: scopedPackageTarget.scopeClass,\n contentDir: scopedPackageTarget.entryDirs,\n cssOptions: themeConfig.css,\n referenceCss:\n themeConfig.css?.optimization?.deduplicateScopedCss === false\n ? undefined\n : mainCssResult.css,\n safeVarPrefixes: [\n ...getMotionVarPrefixes(context.componentData, [...packageScanResult.components]),\n ...getConfigurableCssVariables(),\n ...getPruneVarSafelist(themeConfig.css),\n ],\n },\n );\n\n const scopedOutputPath = resolveOutputPath(\n workspaceDir,\n getScopedPackageOutputPath(\n scopedPackageTarget.packageName,\n scopedPackageTarget.config.outFile,\n ),\n );\n ensureOutputDirectory(scopedOutputPath);\n fs.writeFileSync(scopedOutputPath, scopedCssResult.css);\n scopedCssOutputs.push({\n label: scopedPackageTarget.packageName,\n outputPath: scopedOutputPath,\n sizeGzipBytes: scopedCssResult.sizeGzipBytes,\n optimizationStats: scopedCssResult.optimizationStats,\n });\n }\n\n const mainCssSummary = getMainCssSummaryMessage({\n sizeGzipBytes: mainCssResult.sizeGzipBytes,\n optimizationStats: mainCssResult.optimizationStats,\n formatBytes,\n });\n genLog.spinStop('✅', mainCssSummary.summaryLine);\n mainCssSummary.detailLines.forEach((detailLine) => {\n genLog.print(detailLine);\n });\n\n scopedCssOutputs.forEach((scopedCssOutput) => {\n const scopedCssSummary = getScopedCssSummaryMessage(scopedCssOutput.label, {\n sizeGzipBytes: scopedCssOutput.sizeGzipBytes,\n optimizationStats: scopedCssOutput.optimizationStats,\n formatBytes,\n });\n genLog.spinStop('✅', scopedCssSummary.summaryLine);\n scopedCssSummary.detailLines.forEach((detailLine) => {\n genLog.print(detailLine);\n });\n });\n\n const duration = Math.round(performance.now() - genStartTime);\n const outputFileSection = getOutputFileSection(workspaceDir, [\n outputPath,\n ...scopedCssOutputs.map((scopedCssOutput) => scopedCssOutput.outputPath),\n ]);\n\n genLog.newline();\n genLog.print(outputFileSection.label);\n outputFileSection.paths.forEach((filePath) => {\n genLog.listItem(filePath);\n });\n genLog.newline();\n genLog.print(`${magenta('Total time:')} ${formatCssDuration(duration)}`);\n printPerfSummary(duration);\n\n return {\n duration,\n outputPath,\n outputPaths: outputFileSection.paths,\n packageDirs,\n };\n } finally {\n await pool.destroy();\n }\n };\n\n await generateThemeModeCSS();\n\n if (options.watch) {\n const entryWatchTargets = getEntryWatchTargets(entries);\n const entryWatchDirs = getWatchDirs(entryWatchTargets.map((target) => target.watchPath));\n const { filteredPackageDirs } = getWatchDirectoryGroups(entryWatchDirs, [\n ...entryDirs,\n ...packageDirs,\n ]);\n\n if (!effectiveSilent) {\n log.newline();\n log.print(`${magenta('Watching for changes...')}`);\n entryDirs.forEach((entryDir) => {\n log.listItem(`App: ${entryDir}`);\n });\n filteredPackageDirs.forEach((dir) => {\n log.listItem(`Package: ${dir}`);\n });\n log.print(`${gray('Press Ctrl+C to stop')}`);\n log.newline();\n }\n\n const regenerate = createQueuedRegenerator({\n onStart: () => {\n if (!effectiveSilent) {\n const timestamp = new Date().toLocaleTimeString();\n log.print(`${gray(`[${timestamp}]`)} Change detected, regenerating...`);\n }\n },\n regenerateOnce: async () => generateThemeModeCSS({ isWatch: true }),\n onSuccess: (result) => {\n if (!effectiveSilent) {\n const updatedAt = new Date().toLocaleTimeString();\n const updatedMessage =\n result?.duration == null\n ? 'CSS updated'\n : `CSS updated (${formatCssDuration(result.duration)})`;\n log.print(`${gray(`[${updatedAt}]`)} ${green(updatedMessage)}`);\n log.newline();\n }\n },\n onError: (message) => {\n log.print(message);\n },\n });\n\n const watchDebounce = themeConfig.css?.watchDebounce ?? 100;\n\n watchSourceFiles(\n [\n ...entryWatchTargets,\n ...filteredPackageDirs\n .filter(\n (packageDir) =>\n !entryWatchTargets.some((target) =>\n isCoveredByRecursiveWatch(target.watchPath, packageDir),\n ),\n )\n .map((watchPath) => ({ watchPath, recursive: true })),\n ],\n createDebouncedAction(() => {\n void regenerate();\n }, watchDebounce),\n );\n\n await new Promise(() => {});\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'CSS generation failed';\n if (effectiveSilent) {\n spinStop('❌', message);\n } else {\n log.spinStop('❌', message);\n }\n process.exitCode = 1;\n }\n};\n\nexport { runCssCommand };\nexport type { CssCommandContext, CssCommandOptions };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","names":[],"sources":["../../src/css/runner.ts"],"sourcesContent":["import fs from 'node:fs';\n\nimport { createLogger, gray, green, magenta, print, spinStart, spinStop } from '@yahoo/uds-cli/lib';\nimport type { UniversalTokensConfig } from '@yahoo/uds-config';\nimport { defaultTokensConfig } from '@yahoo/uds-config';\n\nimport type { SerializedComponentInfo } from '../commands/generateComponentData';\nimport {\n deduplicateSafelist,\n getInternalSafelistClasses,\n getThemeAndScaleClasses,\n} from '../purger/optimized/utils/safelist';\nimport type { EntryValue, ResolvedEntryPath } from '../utils/entryPoints';\nimport { DEFAULT_ENTRY, resolveEntryPaths } from '../utils/entryPoints';\nimport { generateCSS, generateSimpleModeCSS } from './generate';\nimport { getPruneVarSafelist } from './generate.helpers';\nimport {\n findPackageRoot,\n findPackageSourceDir,\n getPackageUdsScope,\n loadConfigFile,\n scanDirectoriesForSafelist,\n scanDirectoryForSafelist,\n} from './nodeUtils';\nimport { captureMemory, clearTimings, measureAsync, printPerfSummary } from './perf';\nimport {\n formatCssDuration,\n getMainCssSummaryMessage,\n getOutputFileSection,\n getScanSummaryMessage,\n getScopedCssSummaryMessage,\n getVerboseScanFileList,\n getWatchDirectoryGroups,\n} from './runner.helpers';\nimport type {\n UDSScopedPackageConfig,\n UDSScopedPackageValue,\n UDSThemeConfig,\n UDSThemeConfigInput,\n UDSThemeContext,\n} from './theme';\nimport {\n extractRuntimeConfigValues,\n extractVariantDefaults,\n formatBytes,\n getConfigurableCssVariables,\n getMotionVarPrefixes,\n} from './utils';\nimport { createWorkerPool } from './workerPool';\n\ntype CssCommandContext = {\n variants: Record<string, Record<string, string>>;\n autoVariants: Record<string, Record<string, string>>;\n componentData: Record<string, SerializedComponentInfo>;\n};\n\ntype CssCommandOptions = {\n workspaceDir: string;\n outFile: string;\n themeConfigPath: string;\n scope?: string;\n entryOption?: EntryValue;\n configOption?: string;\n watch: boolean;\n silent: boolean;\n verbose?: boolean;\n workers?: number;\n};\n\ntype ThemeModeSetup = {\n themeConfig: UDSThemeConfig;\n colorModes: ('dark' | 'light')[];\n entries: ResolvedEntryPath[];\n appConfig: UniversalTokensConfig;\n appVariantDefaults: ReturnType<typeof extractVariantDefaults>;\n runtimeConfigValues: ReturnType<typeof extractRuntimeConfigValues>;\n effectiveSilent: boolean;\n};\n\ntype ScopedPackageBuildTarget = {\n packageName: string;\n packageRoot: string;\n packageDir: string;\n entryDirs: string[];\n scopeClass: string;\n config: UDSScopedPackageConfig;\n};\n\ntype GeneratedCssOutput = {\n label: string;\n outputPath: string;\n sizeGzipBytes: number;\n optimizationStats?: {\n originalSizeGzip: number;\n fontFacesRemoved: number;\n emptyRulesRemoved: number;\n };\n};\n\nconst getScopedPackageOutputPath = (packageName: string, outFile?: string): string => {\n if (typeof outFile === 'string' && outFile.trim().length > 0) {\n return outFile;\n }\n\n const packageLeafName = packageName.split('/').pop() ?? packageName;\n return `dist/${packageLeafName}.css`;\n};\n\nconst normalizeScopedPackageConfig = (\n scopedPackageValue: UDSScopedPackageValue,\n): UDSScopedPackageConfig => {\n if (typeof scopedPackageValue === 'string') {\n return { config: scopedPackageValue };\n }\n\n return scopedPackageValue;\n};\n\nconst resolveScopedEntryDirs = (\n packageRoot: string,\n packageDir: string,\n entry: string | string[] | undefined,\n): string[] => {\n if (entry === undefined) {\n return [packageDir];\n }\n\n return resolveEntryPaths(entry, packageRoot).map((resolvedEntry) => resolvedEntry.absolutePath);\n};\n\nconst PATH_SEPARATOR = '/';\n\nconst normalizePath = (value: string): string => value.replace(/\\\\/g, PATH_SEPARATOR);\n\nconst isAbsolutePath = (value: string): boolean => {\n const normalizedValue = normalizePath(value);\n return normalizedValue.startsWith(PATH_SEPARATOR) || /^[A-Za-z]:\\//.test(normalizedValue);\n};\n\nconst joinPath = (...parts: string[]): string => {\n const filteredParts = parts.filter((part) => part.length > 0);\n if (filteredParts.length === 0) {\n return '';\n }\n\n const normalizedParts = filteredParts.map((part, index) => {\n const normalizedPart = normalizePath(part);\n if (index === 0) {\n return normalizedPart.replace(/\\/+$/g, '');\n }\n return normalizedPart.replace(/^\\/+|\\/+$/g, '');\n });\n\n return normalizedParts\n .join(PATH_SEPARATOR)\n .replace(/\\/+/g, PATH_SEPARATOR)\n .replace(/\\/\\.\\//g, PATH_SEPARATOR);\n};\n\nconst dirnamePath = (value: string): string => {\n const normalizedValue = normalizePath(value).replace(/\\/+$/g, '');\n const lastSeparatorIndex = normalizedValue.lastIndexOf(PATH_SEPARATOR);\n if (lastSeparatorIndex <= 0) {\n return lastSeparatorIndex === 0 ? PATH_SEPARATOR : '.';\n }\n\n return normalizedValue.slice(0, lastSeparatorIndex);\n};\n\nconst basenamePath = (value: string): string => {\n const normalizedValue = normalizePath(value).replace(/\\/+$/g, '');\n const lastSeparatorIndex = normalizedValue.lastIndexOf(PATH_SEPARATOR);\n return lastSeparatorIndex >= 0 ? normalizedValue.slice(lastSeparatorIndex + 1) : normalizedValue;\n};\n\nconst resolveOutputPath = (workspaceDir: string, outFile: string): string =>\n isAbsolutePath(outFile) ? outFile : joinPath(workspaceDir, outFile);\n\nconst ensureOutputDirectory = (outputPath: string): void => {\n const outputDir = dirnamePath(outputPath);\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n};\n\nconst SOURCE_FILE_PATTERN = /\\.(jsx?|tsx?)$/i;\n\ntype WatchTarget = {\n watchPath: string;\n recursive: boolean;\n fileNames?: string[];\n};\n\nconst getWatchDirs = (dirs: string[]): string[] => [\n ...new Set(\n dirs.filter((dir) => !normalizePath(dir).split(PATH_SEPARATOR).includes('node_modules')),\n ),\n];\n\nconst isCoveredByRecursiveWatch = (watchPath: string, targetPath: string): boolean =>\n targetPath === watchPath || targetPath.startsWith(`${watchPath}${PATH_SEPARATOR}`);\n\nconst getEntryWatchTargets = (entries: ResolvedEntryPath[]): WatchTarget[] => {\n const directoryTargets = getWatchDirs(\n entries.filter((entry) => entry.kind === 'directory').map((entry) => entry.absolutePath),\n ).map((watchPath) => ({ watchPath, recursive: true }));\n\n const fileNamesByDirectory = new Map<string, Set<string>>();\n\n entries\n .filter(\n (entry): entry is ResolvedEntryPath & { kind: 'file'; fileName: string } =>\n entry.kind === 'file' && typeof entry.fileName === 'string',\n )\n .forEach((entry) => {\n if (\n directoryTargets.some((target) =>\n isCoveredByRecursiveWatch(target.watchPath, entry.absolutePath),\n )\n ) {\n return;\n }\n\n const fileNames = fileNamesByDirectory.get(entry.watchDirectory) ?? new Set<string>();\n fileNames.add(entry.fileName);\n fileNamesByDirectory.set(entry.watchDirectory, fileNames);\n });\n\n const fileTargets = [...fileNamesByDirectory.entries()].map(([watchPath, fileNames]) => ({\n watchPath,\n recursive: false,\n fileNames: [...fileNames],\n }));\n\n return [...directoryTargets, ...fileTargets];\n};\n\nconst watchSourceFiles = (targets: WatchTarget[], onFileChange: () => void): void => {\n targets.forEach((target) => {\n fs.watch(target.watchPath, { recursive: target.recursive }, (_eventType, filename) => {\n if (!filename || !SOURCE_FILE_PATTERN.test(filename)) {\n return;\n }\n\n if (target.fileNames && !target.fileNames.includes(basenamePath(String(filename)))) {\n return;\n }\n\n onFileChange();\n });\n });\n};\n\nconst createDebouncedAction = (action: () => void, delayMs: number): (() => void) => {\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n return () => {\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n debounceTimer = setTimeout(action, delayMs);\n };\n};\n\nconst createQueuedRegenerator = <T>(options: {\n onStart?: () => void;\n onSuccess?: (result: T) => void;\n onError: (message: string) => void;\n regenerateOnce: () => Promise<T>;\n}): (() => Promise<void>) => {\n let isGenerating = false;\n let pendingRegenerate = false;\n\n const regenerate = async (): Promise<void> => {\n if (isGenerating) {\n pendingRegenerate = true;\n return;\n }\n\n isGenerating = true;\n try {\n options.onStart?.();\n const result = await options.regenerateOnce();\n options.onSuccess?.(result);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'CSS generation failed';\n options.onError(message);\n } finally {\n isGenerating = false;\n\n if (pendingRegenerate) {\n pendingRegenerate = false;\n await regenerate();\n }\n }\n };\n\n return regenerate;\n};\n\nconst printVerboseScanFiles = (\n log: ReturnType<typeof createLogger>,\n workspaceDir: string,\n filePaths: string[],\n): void => {\n getVerboseScanFileList(workspaceDir, filePaths).forEach((filePath) => {\n log.listItem(filePath);\n });\n};\n\nconst runCssCommand = async (\n options: CssCommandOptions,\n context: CssCommandContext,\n): Promise<void> => {\n const themeConfigExists = fs.existsSync(\n joinPath(options.workspaceDir, String(options.themeConfigPath)),\n );\n\n if (!themeConfigExists) {\n await runSimpleMode(options, context);\n return;\n }\n\n await runThemeMode(options, context);\n};\n\nconst runSimpleMode = async (\n options: CssCommandOptions,\n context: CssCommandContext,\n): Promise<void> => {\n const entry = options.entryOption ?? DEFAULT_ENTRY;\n const configPath = typeof options.configOption === 'string' ? options.configOption : undefined;\n\n if (!options.watch && !options.silent) {\n spinStart('Generating CSS...');\n }\n\n try {\n const result = await generateSimpleModeCSS({\n workspaceDir: options.workspaceDir,\n entry,\n outFile: String(options.outFile),\n variants: context.variants,\n autoVariants: context.autoVariants,\n componentData: context.componentData,\n scope: options.scope,\n configPath,\n isWatch: options.watch,\n silent: options.silent,\n verbose: options.verbose,\n });\n\n if (options.watch) {\n await runSimpleModeWatch(options, context, entry, configPath, result.packageDirs ?? []);\n }\n } catch (error) {\n spinStop('❌', error instanceof Error ? error.message : 'CSS generation failed');\n process.exitCode = 1;\n }\n};\n\nconst runSimpleModeWatch = async (\n options: CssCommandOptions,\n context: CssCommandContext,\n entry: EntryValue,\n configPath: string | undefined,\n packageDirs: string[],\n): Promise<void> => {\n const resolvedEntries = resolveEntryPaths(entry, options.workspaceDir);\n const entryWatchTargets = getEntryWatchTargets(resolvedEntries);\n const fallbackTargets = getWatchDirs(packageDirs).map((watchPath) => ({\n watchPath,\n recursive: true,\n }));\n const watchTargets = packageDirs.length > 0 ? fallbackTargets : entryWatchTargets;\n\n if (!options.silent) {\n print('');\n print(`${magenta('Watching for changes...')}`);\n watchTargets.forEach((target) => print(` ${gray('•')} ${target.watchPath}`));\n print(`${gray('Press Ctrl+C to stop')}`);\n print('');\n }\n\n const regenerate = createQueuedRegenerator({\n onStart: () => {\n if (!options.silent) {\n const timestamp = new Date().toLocaleTimeString();\n print(`${gray(`[${timestamp}]`)} Change detected, regenerating...`);\n }\n },\n regenerateOnce: async () => {\n await generateSimpleModeCSS({\n workspaceDir: options.workspaceDir,\n entry,\n outFile: String(options.outFile),\n variants: context.variants,\n autoVariants: context.autoVariants,\n componentData: context.componentData,\n scope: options.scope,\n configPath,\n isWatch: true,\n silent: true,\n });\n },\n onSuccess: () => {\n if (!options.silent) {\n const updatedAt = new Date().toLocaleTimeString();\n print(`${gray(`[${updatedAt}]`)} ${green('CSS updated')}`);\n print('');\n }\n },\n onError: (message) => {\n print(`Error: ${message}`);\n },\n });\n\n watchSourceFiles(\n watchTargets,\n createDebouncedAction(() => {\n void regenerate();\n }, 100),\n );\n\n await new Promise(() => {});\n};\n\nconst loadThemeModeSetup = async (options: CssCommandOptions): Promise<ThemeModeSetup | null> => {\n const themeConfigInput = await loadConfigFile<UDSThemeConfigInput>(\n String(options.themeConfigPath),\n );\n if (!themeConfigInput) {\n return null;\n }\n\n const themeContext: UDSThemeContext = {\n cwd: options.workspaceDir,\n watch: options.watch,\n };\n const themeConfig: UDSThemeConfig =\n typeof themeConfigInput === 'function'\n ? await themeConfigInput(themeContext)\n : themeConfigInput;\n\n let appConfig: UniversalTokensConfig = defaultTokensConfig;\n if (themeConfig.config) {\n const loadedConfig = await loadConfigFile<UniversalTokensConfig>(themeConfig.config);\n if (loadedConfig) {\n appConfig = loadedConfig;\n }\n }\n\n return {\n themeConfig,\n colorModes: themeConfig.colorModes ?? ['dark'],\n entries: resolveEntryPaths(themeConfig.entry, options.workspaceDir),\n appConfig,\n appVariantDefaults: extractVariantDefaults(appConfig),\n runtimeConfigValues: extractRuntimeConfigValues(appConfig),\n effectiveSilent: options.silent || themeConfig.silent === true,\n };\n};\n\nconst runThemeMode = async (\n options: CssCommandOptions,\n context: CssCommandContext,\n): Promise<void> => {\n const workspaceDir = options.workspaceDir;\n const outputPath = resolveOutputPath(workspaceDir, String(options.outFile));\n let effectiveSilent = options.silent;\n let log = createLogger({ silent: effectiveSilent });\n\n log.spinStart('Loading theme configuration...');\n\n try {\n const setup = await loadThemeModeSetup(options);\n if (!setup) {\n log.spinStop('❌', `Theme config not found: ${options.themeConfigPath}`);\n process.exitCode = 1;\n return;\n }\n\n const { themeConfig, colorModes, entries, appConfig, appVariantDefaults, runtimeConfigValues } =\n setup;\n effectiveSilent = setup.effectiveSilent;\n log = createLogger({ silent: effectiveSilent });\n const entryDirs = entries.map((entry) => entry.absolutePath);\n\n if (!effectiveSilent) {\n log.spinStop('✅', 'Theme configuration loaded');\n }\n\n if (themeConfig.config && appConfig === defaultTokensConfig) {\n log.warn(`App config not found: ${themeConfig.config}, using defaults`);\n }\n const packageDirs: string[] = [];\n\n const generateThemeModeCSS = async (opts?: { isWatch?: boolean }) => {\n clearTimings();\n captureMemory('start');\n const genStartTime = performance.now();\n const genLog = opts?.isWatch ? createLogger({ silent: true }) : log;\n const scopedCssOutputs: GeneratedCssOutput[] = [];\n\n // Create worker pool for parallel file processing\n const pool = await createWorkerPool(\n {\n variants: context.variants,\n autoVariants: context.autoVariants,\n componentData: context.componentData,\n },\n options.workers,\n );\n\n try {\n genLog.spinStart(\n `Scanning app and packages... (${pool.workerCount} worker${pool.workerCount === 1 ? '' : 's'})`,\n );\n\n const scopedPackageTargets: ScopedPackageBuildTarget[] = [];\n\n const processInheritedPackage = async (packageName: string) => {\n const packageDir = findPackageSourceDir(packageName);\n if (!packageDir) {\n return { packageName, status: 'not-found' as const };\n }\n\n if (!packageDirs.includes(packageDir)) {\n packageDirs.push(packageDir);\n }\n\n const packageScanResult = await scanDirectoryForSafelist(\n packageDir,\n colorModes,\n context.variants,\n context.autoVariants,\n context.componentData,\n appVariantDefaults,\n runtimeConfigValues,\n true,\n pool,\n );\n\n return {\n packageName,\n status: 'ok' as const,\n scanResult: packageScanResult,\n };\n };\n\n const processScopedPackage = async (\n packageName: string,\n scopedPackageValue: UDSScopedPackageValue,\n ) => {\n const scopedPackageConfig = normalizeScopedPackageConfig(scopedPackageValue);\n\n const packageRoot = findPackageRoot(packageName);\n const packageDir = findPackageSourceDir(packageName);\n if (!packageRoot || !packageDir) {\n return;\n }\n\n const scopeClass = getPackageUdsScope(packageName);\n if (!scopeClass) {\n return;\n }\n\n const entryDirs = resolveScopedEntryDirs(\n packageRoot,\n packageDir,\n scopedPackageConfig.entry,\n );\n entryDirs.forEach((entryDir) => {\n if (!packageDirs.includes(entryDir)) {\n packageDirs.push(entryDir);\n }\n });\n\n scopedPackageTargets.push({\n packageName,\n packageRoot,\n packageDir,\n entryDirs,\n scopeClass,\n config: scopedPackageConfig,\n });\n };\n\n // Run app scan, inherited package scans, and scoped package resolution in parallel\n const [appScanResult, inheritedResults] = await Promise.all([\n measureAsync('scan', () =>\n scanDirectoriesForSafelist(\n entryDirs,\n colorModes,\n context.variants,\n context.autoVariants,\n context.componentData,\n appVariantDefaults,\n runtimeConfigValues,\n false,\n pool,\n ),\n ),\n Promise.all(\n (themeConfig.inherit ?? []).map((packageName) =>\n measureAsync(`scan:inherit:${packageName}`, () =>\n processInheritedPackage(packageName),\n ),\n ),\n ),\n Promise.all(\n Object.entries(themeConfig.scoped ?? {}).map(([packageName, scopedPackageConfig]) =>\n processScopedPackage(packageName, scopedPackageConfig),\n ),\n ),\n ]);\n\n // Print app scan results\n genLog.spinStop(\n '✅',\n getScanSummaryMessage({\n label: 'app',\n filesScanned: appScanResult.filesScanned,\n filesWithComponents: appScanResult.filesWithComponents,\n componentCount: appScanResult.components.length,\n mode: 'app',\n }),\n );\n if (options.verbose) {\n printVerboseScanFiles(genLog, workspaceDir, appScanResult.filePaths);\n }\n\n // Print inherited package results\n for (const result of inheritedResults) {\n if (result.status === 'not-found') {\n genLog.spinStop('⚠️', `Package not found: ${result.packageName}`);\n } else {\n genLog.spinStop(\n '✅',\n getScanSummaryMessage({\n label: result.packageName,\n filesScanned: result.scanResult.filesScanned,\n filesWithComponents: result.scanResult.filesWithComponents,\n componentCount: result.scanResult.components.length,\n mode: 'inherit',\n }),\n );\n if (options.verbose) {\n printVerboseScanFiles(genLog, workspaceDir, result.scanResult.filePaths);\n }\n }\n }\n\n // Merge results from all scans\n const inheritedClasses: string[] = [...appScanResult.safelist];\n const inheritedComponents = new Set<string>(appScanResult.components);\n for (const result of inheritedResults) {\n if (result.status === 'ok') {\n inheritedClasses.push(...result.scanResult.safelist);\n result.scanResult.components.forEach((comp) => inheritedComponents.add(comp));\n }\n }\n\n genLog.spinStart('Generating main CSS...');\n\n const mainSafelist = deduplicateSafelist([\n ...inheritedClasses,\n ...getThemeAndScaleClasses(colorModes),\n ...getInternalSafelistClasses(),\n ]);\n\n const allMotionComponents: string[] = [...inheritedComponents];\n\n captureMemory('before-gen');\n const mainCssResult = await measureAsync('gen', () =>\n generateCSS([...(themeConfig.css?.safelist ?? []), ...mainSafelist], appConfig, {\n scope: options.scope,\n contentDir: entryDirs,\n cssOptions: themeConfig.css,\n safeVarPrefixes: [\n ...getMotionVarPrefixes(context.componentData, allMotionComponents),\n ...getConfigurableCssVariables(),\n ...getPruneVarSafelist(themeConfig.css),\n ],\n }),\n );\n captureMemory('after-gen');\n\n ensureOutputDirectory(outputPath);\n fs.writeFileSync(outputPath, mainCssResult.css);\n\n for (const scopedPackageTarget of scopedPackageTargets) {\n const packageConfigPath = isAbsolutePath(scopedPackageTarget.config.config)\n ? scopedPackageTarget.config.config\n : joinPath(scopedPackageTarget.packageRoot, scopedPackageTarget.config.config);\n const packageConfig =\n (await loadConfigFile<UniversalTokensConfig>(packageConfigPath)) ?? defaultTokensConfig;\n const packageVariantDefaults = extractVariantDefaults(packageConfig);\n const packageRuntimeConfigValues = extractRuntimeConfigValues(packageConfig);\n const packageScanResult = await scanDirectoriesForSafelist(\n scopedPackageTarget.entryDirs,\n colorModes,\n context.variants,\n context.autoVariants,\n context.componentData,\n packageVariantDefaults,\n packageRuntimeConfigValues,\n true,\n pool,\n );\n genLog.spinStop(\n '✅',\n getScanSummaryMessage({\n label: scopedPackageTarget.packageName,\n filesScanned: packageScanResult.filesScanned,\n filesWithComponents: packageScanResult.filesWithComponents,\n componentCount: packageScanResult.components.length,\n mode: 'scoped',\n }),\n );\n if (options.verbose) {\n printVerboseScanFiles(genLog, workspaceDir, packageScanResult.filePaths);\n }\n const packageSafelist = deduplicateSafelist([\n ...packageScanResult.safelist,\n ...getThemeAndScaleClasses(colorModes),\n ...getInternalSafelistClasses(),\n ]);\n const scopedCssResult = await generateCSS(\n [...(themeConfig.css?.safelist ?? []), ...packageSafelist],\n packageConfig,\n {\n scope: scopedPackageTarget.scopeClass,\n contentDir: scopedPackageTarget.entryDirs,\n cssOptions: themeConfig.css,\n referenceCss:\n themeConfig.css?.optimization?.deduplicateScopedCss === false\n ? undefined\n : mainCssResult.css,\n safeVarPrefixes: [\n ...getMotionVarPrefixes(context.componentData, [...packageScanResult.components]),\n ...getConfigurableCssVariables(),\n ...getPruneVarSafelist(themeConfig.css),\n ],\n },\n );\n\n const scopedOutputPath = resolveOutputPath(\n workspaceDir,\n getScopedPackageOutputPath(\n scopedPackageTarget.packageName,\n scopedPackageTarget.config.outFile,\n ),\n );\n ensureOutputDirectory(scopedOutputPath);\n fs.writeFileSync(scopedOutputPath, scopedCssResult.css);\n scopedCssOutputs.push({\n label: scopedPackageTarget.packageName,\n outputPath: scopedOutputPath,\n sizeGzipBytes: scopedCssResult.sizeGzipBytes,\n optimizationStats: scopedCssResult.optimizationStats,\n });\n }\n\n const mainCssSummary = getMainCssSummaryMessage({\n sizeGzipBytes: mainCssResult.sizeGzipBytes,\n optimizationStats: mainCssResult.optimizationStats,\n formatBytes,\n });\n genLog.spinStop('✅', mainCssSummary.summaryLine);\n mainCssSummary.detailLines.forEach((detailLine) => {\n genLog.print(detailLine);\n });\n\n scopedCssOutputs.forEach((scopedCssOutput) => {\n const scopedCssSummary = getScopedCssSummaryMessage(scopedCssOutput.label, {\n sizeGzipBytes: scopedCssOutput.sizeGzipBytes,\n optimizationStats: scopedCssOutput.optimizationStats,\n formatBytes,\n });\n genLog.spinStop('✅', scopedCssSummary.summaryLine);\n scopedCssSummary.detailLines.forEach((detailLine) => {\n genLog.print(detailLine);\n });\n });\n\n const duration = Math.round(performance.now() - genStartTime);\n const outputFileSection = getOutputFileSection(workspaceDir, [\n outputPath,\n ...scopedCssOutputs.map((scopedCssOutput) => scopedCssOutput.outputPath),\n ]);\n\n genLog.newline();\n genLog.print(outputFileSection.label);\n outputFileSection.paths.forEach((filePath) => {\n genLog.listItem(filePath);\n });\n genLog.newline();\n genLog.print(`${magenta('Total time:')} ${formatCssDuration(duration)}`);\n printPerfSummary(duration);\n\n return {\n duration,\n outputPath,\n outputPaths: outputFileSection.paths,\n packageDirs,\n };\n } finally {\n await pool.destroy();\n }\n };\n\n await generateThemeModeCSS();\n\n if (options.watch) {\n const entryWatchTargets = getEntryWatchTargets(entries);\n const entryWatchDirs = getWatchDirs(entryWatchTargets.map((target) => target.watchPath));\n const { filteredPackageDirs } = getWatchDirectoryGroups(entryWatchDirs, [\n ...entryDirs,\n ...packageDirs,\n ]);\n\n if (!effectiveSilent) {\n log.newline();\n log.print(`${magenta('Watching for changes...')}`);\n entryDirs.forEach((entryDir) => {\n log.listItem(`App: ${entryDir}`);\n });\n filteredPackageDirs.forEach((dir) => {\n log.listItem(`Package: ${dir}`);\n });\n log.print(`${gray('Press Ctrl+C to stop')}`);\n log.newline();\n }\n\n const regenerate = createQueuedRegenerator({\n onStart: () => {\n if (!effectiveSilent) {\n const timestamp = new Date().toLocaleTimeString();\n log.print(`${gray(`[${timestamp}]`)} Change detected, regenerating...`);\n }\n },\n regenerateOnce: async () => generateThemeModeCSS({ isWatch: true }),\n onSuccess: (result) => {\n if (!effectiveSilent) {\n const updatedAt = new Date().toLocaleTimeString();\n const updatedMessage =\n result?.duration == null\n ? 'CSS updated'\n : `CSS updated (${formatCssDuration(result.duration)})`;\n log.print(`${gray(`[${updatedAt}]`)} ${green(updatedMessage)}`);\n log.newline();\n }\n },\n onError: (message) => {\n log.print(message);\n },\n });\n\n const watchDebounce = themeConfig.css?.watchDebounce ?? 100;\n\n watchSourceFiles(\n [\n ...entryWatchTargets,\n ...filteredPackageDirs\n .filter(\n (packageDir) =>\n !entryWatchTargets.some((target) =>\n isCoveredByRecursiveWatch(target.watchPath, packageDir),\n ),\n )\n .map((watchPath) => ({ watchPath, recursive: true })),\n ],\n createDebouncedAction(() => {\n void regenerate();\n }, watchDebounce),\n );\n\n await new Promise(() => {});\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'CSS generation failed';\n if (effectiveSilent) {\n spinStop('❌', message);\n } else {\n log.spinStop('❌', message);\n }\n process.exitCode = 1;\n }\n};\n\nexport { runCssCommand };\nexport type { CssCommandContext, CssCommandOptions };\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../src/css/utils.ts"],"sourcesContent":["import { configurableProperties } from '@yahoo/uds-automated-config/properties';\nimport type { UniversalTokensConfig } from '@yahoo/uds-config';\n\nimport type { SerializedComponentInfo } from '../commands/generateComponentData';\nimport type { RuntimeConfigValues, VariantDefaults } from '../purger/optimized/purgeFromCode';\nimport {\n getRuntimeDefaultPropSelector,\n getRuntimeDefaultPropValue,\n getRuntimeFieldSelector,\n getRuntimeFieldStaticValue,\n getRuntimeFieldTokenValue,\n getRuntimeSelectorParamValues,\n} from '../runtimeConfig/hookMetadata';\n\n/**\n * Extract variant defaults from a UniversalTokensConfig.\n * Converts from config structure to a simpler lookup format.\n * e.g., { button: { defaults: { size: 'md' } } } -> { Button: { size: 'md' } }\n */\nconst extractVariantDefaults = (config: UniversalTokensConfig): VariantDefaults => {\n // Component names in config are lowercase, but we need PascalCase for matching\n const componentNameMap: Record<string, string> = {\n avatar: 'Avatar',\n badge: 'Badge',\n button: 'Button',\n checkbox: 'Checkbox',\n chip: 'Chip',\n divider: 'Divider',\n iconButton: 'IconButton',\n input: 'Input',\n link: 'Link',\n menu: 'Menu',\n radio: 'Radio',\n switch: 'Switch',\n tab: 'Tab',\n tabs: 'Tabs',\n };\n\n // Extract defaults from each component in the config\n return Object.entries(config).reduce<VariantDefaults>((acc, [configKey, componentConfig]) => {\n const pascalName = componentNameMap[configKey];\n if (!pascalName || !componentConfig || typeof componentConfig !== 'object') {\n return acc;\n }\n\n const configWithDefaults = componentConfig as { defaults?: Record<string, string> };\n return configWithDefaults.defaults\n ? { ...acc, [pascalName]: configWithDefaults.defaults }\n : acc;\n }, {});\n};\n\nconst extractRuntimeConfigValues = (config: UniversalTokensConfig): RuntimeConfigValues => {\n const values: RuntimeConfigValues = {};\n\n const setRuntimeValue = (\n selector: string | null,\n value: string | number | boolean | undefined,\n ) => {\n if (!selector || value === undefined) {\n return;\n }\n\n values[selector] = value;\n };\n\n const bottomSheetBackgroundColor = getRuntimeFieldTokenValue(\n config,\n 'useBottomSheetConfig',\n 'backgroundColor',\n { variant: 'default' },\n );\n\n if (bottomSheetBackgroundColor !== undefined) {\n setRuntimeValue(\n getRuntimeFieldSelector('useBottomSheetConfig', 'backgroundColor', { variant: 'default' }),\n bottomSheetBackgroundColor,\n );\n }\n\n if (config.toast?.variables && config.toast?.defaults) {\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'autoClose'),\n getRuntimeFieldStaticValue('useToastConfig', 'autoClose') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'position'),\n getRuntimeFieldStaticValue('useToastConfig', 'position') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeDefaultPropSelector('useToastConfig', 'size'),\n getRuntimeDefaultPropValue(config, 'useToastConfig', 'size'),\n );\n setRuntimeValue(\n getRuntimeDefaultPropSelector('useToastConfig', 'variant'),\n getRuntimeDefaultPropValue(config, 'useToastConfig', 'variant'),\n );\n\n getRuntimeSelectorParamValues('useToastConfig', 'size').forEach((size) => {\n const textVariant = getRuntimeFieldTokenValue(config, 'useToastConfig', 'textVariant', {\n size,\n });\n const iconSize = getRuntimeFieldTokenValue(config, 'useToastConfig', 'iconSize', { size });\n const buttonSize = getRuntimeFieldTokenValue(config, 'useToastConfig', 'buttonSize', {\n size,\n });\n\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'textVariant', { size }),\n textVariant,\n );\n setRuntimeValue(getRuntimeFieldSelector('useToastConfig', 'iconSize', { size }), iconSize);\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'buttonSize', { size }),\n buttonSize,\n );\n });\n\n getRuntimeSelectorParamValues('useToastConfig', 'variant').forEach((variant) => {\n const textColor = getRuntimeFieldTokenValue(config, 'useToastConfig', 'textColor', {\n variant,\n });\n const buttonVariant = getRuntimeFieldTokenValue(config, 'useToastConfig', 'buttonVariant', {\n variant,\n });\n const iconVariant = getRuntimeFieldTokenValue(config, 'useToastConfig', 'iconVariant', {\n variant,\n });\n const backgroundColor = getRuntimeFieldTokenValue(\n config,\n 'useToastConfig',\n 'backgroundColor',\n { variant },\n );\n\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'textColor', { variant }),\n textColor,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'buttonVariant', { variant }),\n buttonVariant,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'iconVariant', { variant }),\n iconVariant,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'backgroundColor', { variant }),\n backgroundColor,\n );\n });\n }\n\n const tooltipBorderRadius = getRuntimeFieldTokenValue(\n config,\n 'useTooltipConfig',\n 'borderRadius',\n {\n size: 'default',\n },\n );\n\n if (tooltipBorderRadius !== undefined) {\n setRuntimeValue(\n getRuntimeFieldSelector('useTooltipConfig', 'animationDuration'),\n getRuntimeFieldStaticValue('useTooltipConfig', 'animationDuration') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useTooltipConfig', 'placement'),\n getRuntimeFieldStaticValue('useTooltipConfig', 'placement') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useTooltipConfig', 'borderRadius', { size: 'default' }),\n tooltipBorderRadius,\n );\n }\n\n if (config.popover?.variables && config.scaleMode?.medium) {\n setRuntimeValue(\n getRuntimeDefaultPropSelector('usePopoverConfig', 'size'),\n getRuntimeDefaultPropValue(config, 'usePopoverConfig', 'size') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeDefaultPropSelector('usePopoverConfig', 'variant'),\n getRuntimeDefaultPropValue(config, 'usePopoverConfig', 'variant') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'animationDuration'),\n getRuntimeFieldStaticValue('usePopoverConfig', 'animationDuration') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'placement'),\n getRuntimeFieldStaticValue('usePopoverConfig', 'placement') ?? undefined,\n );\n\n getRuntimeSelectorParamValues('usePopoverConfig', 'size').forEach((size) => {\n const borderRadius = getRuntimeFieldTokenValue(config, 'usePopoverConfig', 'borderRadius', {\n size,\n });\n const gap = getRuntimeFieldTokenValue(config, 'usePopoverConfig', 'gap', { size });\n const spacingHorizontal = getRuntimeFieldTokenValue(\n config,\n 'usePopoverConfig',\n 'spacingHorizontal',\n { size },\n );\n const spacingVertical = getRuntimeFieldTokenValue(\n config,\n 'usePopoverConfig',\n 'spacingVertical',\n { size },\n );\n const dismissButtonSpacing = getRuntimeFieldTokenValue(\n config,\n 'usePopoverConfig',\n 'dismissButtonSpacing',\n { size },\n );\n const dismissIconSize = getRuntimeFieldTokenValue(\n config,\n 'usePopoverConfig',\n 'dismissIconSize',\n { size },\n );\n\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'borderRadius', { size }),\n borderRadius,\n );\n setRuntimeValue(getRuntimeFieldSelector('usePopoverConfig', 'gap', { size }), gap);\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'spacingHorizontal', { size }),\n spacingHorizontal,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'spacingVertical', { size }),\n spacingVertical,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'dismissButtonSpacing', { size }),\n dismissButtonSpacing,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'dismissIconSize', { size }),\n dismissIconSize,\n );\n });\n }\n\n if (config.modal?.variables) {\n setRuntimeValue(\n getRuntimeDefaultPropSelector('useModalConfig', 'size'),\n getRuntimeDefaultPropValue(config, 'useModalConfig', 'size') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeDefaultPropSelector('useModalConfig', 'variant'),\n getRuntimeDefaultPropValue(config, 'useModalConfig', 'variant') ?? undefined,\n );\n\n getRuntimeSelectorParamValues('useModalConfig', 'size').forEach((size) => {\n const gutter = getRuntimeFieldTokenValue(config, 'useModalConfig', 'gutter', { size });\n\n setRuntimeValue(getRuntimeFieldSelector('useModalConfig', 'gutter', { size }), gutter);\n });\n }\n\n return values;\n};\n\n/**\n * Format bytes to human readable string\n */\nconst formatBytes = (bytes: number): string => {\n if (bytes < 1024) {\n return `${bytes} B`;\n }\n const kb = bytes / 1024;\n if (kb < 1024) {\n return `${kb.toFixed(1)} KB`;\n }\n const mb = kb / 1024;\n return `${mb.toFixed(2)} MB`;\n};\n\n/**\n * Get motion CSS variable prefixes needed by a set of components.\n * Looks up motionVarPrefixes from componentData.json for each component.\n */\nconst getMotionVarPrefixes = (\n componentData: Record<string, SerializedComponentInfo>,\n components: string[],\n): string[] => {\n const prefixes = components.flatMap((componentName) => {\n const info = (componentData as Record<string, { motionVarPrefixes?: string[] }>)[componentName];\n return info?.motionVarPrefixes ?? [];\n });\n\n return [...new Set(prefixes)];\n};\n\n/**\n * Collect css variable names exposed by configurable properties.\n */\nconst getConfigurableCssVariables = (): string[] => {\n const udsVarPrefix = '--uds';\n const cssVars = Object.values(configurableProperties).flatMap(({ cssProperties }) => {\n if (typeof cssProperties === 'string') {\n return cssProperties.startsWith(udsVarPrefix) ? [cssProperties] : [];\n }\n\n if (Array.isArray(cssProperties)) {\n return cssProperties.filter(\n (cssProperty): cssProperty is string =>\n typeof cssProperty === 'string' && cssProperty.startsWith(udsVarPrefix),\n );\n }\n\n return [];\n });\n\n return [...new Set(['--uds-button-gap', ...cssVars])];\n};\n\nexport {\n extractRuntimeConfigValues,\n extractVariantDefaults,\n formatBytes,\n getConfigurableCssVariables,\n getMotionVarPrefixes,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../src/css/utils.ts"],"sourcesContent":["import { configurableProperties } from '@yahoo/uds-automated-config/properties';\nimport type { UniversalTokensConfig } from '@yahoo/uds-config';\n\nimport type { SerializedComponentInfo } from '../commands/generateComponentData';\nimport type { RuntimeConfigValues, VariantDefaults } from '../purger/optimized/purgeFromCode';\nimport {\n getRuntimeDefaultPropSelector,\n getRuntimeDefaultPropValue,\n getRuntimeFieldSelector,\n getRuntimeFieldStaticValue,\n getRuntimeFieldTokenValue,\n getRuntimeSelectorParamValues,\n} from '../runtimeConfig/hookMetadata';\n\n/**\n * Extract variant defaults from a UniversalTokensConfig.\n * Converts from config structure to a simpler lookup format.\n * e.g., { button: { defaults: { size: 'md' } } } -> { Button: { size: 'md' } }\n */\nconst extractVariantDefaults = (config: UniversalTokensConfig): VariantDefaults => {\n // Component names in config are lowercase, but we need PascalCase for matching\n const componentNameMap: Record<string, string> = {\n avatar: 'Avatar',\n badge: 'Badge',\n button: 'Button',\n checkbox: 'Checkbox',\n chip: 'Chip',\n divider: 'Divider',\n iconButton: 'IconButton',\n input: 'Input',\n link: 'Link',\n menu: 'Menu',\n radio: 'Radio',\n switch: 'Switch',\n tab: 'Tab',\n tabs: 'Tabs',\n };\n\n // Extract defaults from each component in the config\n return Object.entries(config).reduce<VariantDefaults>((acc, [configKey, componentConfig]) => {\n const pascalName = componentNameMap[configKey];\n if (!pascalName || !componentConfig || typeof componentConfig !== 'object') {\n return acc;\n }\n\n const configWithDefaults = componentConfig as { defaults?: Record<string, string> };\n return configWithDefaults.defaults\n ? { ...acc, [pascalName]: configWithDefaults.defaults }\n : acc;\n }, {});\n};\n\nconst extractRuntimeConfigValues = (config: UniversalTokensConfig): RuntimeConfigValues => {\n const values: RuntimeConfigValues = {};\n\n const setRuntimeValue = (\n selector: string | null,\n value: string | number | boolean | undefined,\n ) => {\n if (!selector || value === undefined) {\n return;\n }\n\n values[selector] = value;\n };\n\n const bottomSheetBackgroundColor = getRuntimeFieldTokenValue(\n config,\n 'useBottomSheetConfig',\n 'backgroundColor',\n { variant: 'default' },\n );\n\n if (bottomSheetBackgroundColor !== undefined) {\n setRuntimeValue(\n getRuntimeFieldSelector('useBottomSheetConfig', 'backgroundColor', { variant: 'default' }),\n bottomSheetBackgroundColor,\n );\n }\n\n if (config.toast?.variables && config.toast?.defaults) {\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'autoClose'),\n getRuntimeFieldStaticValue('useToastConfig', 'autoClose') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'position'),\n getRuntimeFieldStaticValue('useToastConfig', 'position') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeDefaultPropSelector('useToastConfig', 'size'),\n getRuntimeDefaultPropValue(config, 'useToastConfig', 'size'),\n );\n setRuntimeValue(\n getRuntimeDefaultPropSelector('useToastConfig', 'variant'),\n getRuntimeDefaultPropValue(config, 'useToastConfig', 'variant'),\n );\n\n getRuntimeSelectorParamValues('useToastConfig', 'size').forEach((size) => {\n const textVariant = getRuntimeFieldTokenValue(config, 'useToastConfig', 'textVariant', {\n size,\n });\n const iconSize = getRuntimeFieldTokenValue(config, 'useToastConfig', 'iconSize', { size });\n const buttonSize = getRuntimeFieldTokenValue(config, 'useToastConfig', 'buttonSize', {\n size,\n });\n\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'textVariant', { size }),\n textVariant,\n );\n setRuntimeValue(getRuntimeFieldSelector('useToastConfig', 'iconSize', { size }), iconSize);\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'buttonSize', { size }),\n buttonSize,\n );\n });\n\n getRuntimeSelectorParamValues('useToastConfig', 'variant').forEach((variant) => {\n const textColor = getRuntimeFieldTokenValue(config, 'useToastConfig', 'textColor', {\n variant,\n });\n const buttonVariant = getRuntimeFieldTokenValue(config, 'useToastConfig', 'buttonVariant', {\n variant,\n });\n const iconVariant = getRuntimeFieldTokenValue(config, 'useToastConfig', 'iconVariant', {\n variant,\n });\n const backgroundColor = getRuntimeFieldTokenValue(\n config,\n 'useToastConfig',\n 'backgroundColor',\n { variant },\n );\n\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'textColor', { variant }),\n textColor,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'buttonVariant', { variant }),\n buttonVariant,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'iconVariant', { variant }),\n iconVariant,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useToastConfig', 'backgroundColor', { variant }),\n backgroundColor,\n );\n });\n }\n\n const tooltipBorderRadius = getRuntimeFieldTokenValue(\n config,\n 'useTooltipConfig',\n 'borderRadius',\n {\n size: 'default',\n },\n );\n\n if (tooltipBorderRadius !== undefined) {\n setRuntimeValue(\n getRuntimeFieldSelector('useTooltipConfig', 'animationDuration'),\n getRuntimeFieldStaticValue('useTooltipConfig', 'animationDuration') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useTooltipConfig', 'placement'),\n getRuntimeFieldStaticValue('useTooltipConfig', 'placement') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('useTooltipConfig', 'borderRadius', { size: 'default' }),\n tooltipBorderRadius,\n );\n }\n\n if (config.popover?.variables && config.scaleMode?.medium) {\n setRuntimeValue(\n getRuntimeDefaultPropSelector('usePopoverConfig', 'size'),\n getRuntimeDefaultPropValue(config, 'usePopoverConfig', 'size') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeDefaultPropSelector('usePopoverConfig', 'variant'),\n getRuntimeDefaultPropValue(config, 'usePopoverConfig', 'variant') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'animationDuration'),\n getRuntimeFieldStaticValue('usePopoverConfig', 'animationDuration') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'placement'),\n getRuntimeFieldStaticValue('usePopoverConfig', 'placement') ?? undefined,\n );\n\n getRuntimeSelectorParamValues('usePopoverConfig', 'size').forEach((size) => {\n const borderRadius = getRuntimeFieldTokenValue(config, 'usePopoverConfig', 'borderRadius', {\n size,\n });\n const gap = getRuntimeFieldTokenValue(config, 'usePopoverConfig', 'gap', { size });\n const spacingHorizontal = getRuntimeFieldTokenValue(\n config,\n 'usePopoverConfig',\n 'spacingHorizontal',\n { size },\n );\n const spacingVertical = getRuntimeFieldTokenValue(\n config,\n 'usePopoverConfig',\n 'spacingVertical',\n { size },\n );\n const dismissButtonSpacing = getRuntimeFieldTokenValue(\n config,\n 'usePopoverConfig',\n 'dismissButtonSpacing',\n { size },\n );\n const dismissIconSize = getRuntimeFieldTokenValue(\n config,\n 'usePopoverConfig',\n 'dismissIconSize',\n { size },\n );\n\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'borderRadius', { size }),\n borderRadius,\n );\n setRuntimeValue(getRuntimeFieldSelector('usePopoverConfig', 'gap', { size }), gap);\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'spacingHorizontal', { size }),\n spacingHorizontal,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'spacingVertical', { size }),\n spacingVertical,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'dismissButtonSpacing', { size }),\n dismissButtonSpacing,\n );\n setRuntimeValue(\n getRuntimeFieldSelector('usePopoverConfig', 'dismissIconSize', { size }),\n dismissIconSize,\n );\n });\n }\n\n if (config.modal?.variables) {\n setRuntimeValue(\n getRuntimeDefaultPropSelector('useModalConfig', 'size'),\n getRuntimeDefaultPropValue(config, 'useModalConfig', 'size') ?? undefined,\n );\n setRuntimeValue(\n getRuntimeDefaultPropSelector('useModalConfig', 'variant'),\n getRuntimeDefaultPropValue(config, 'useModalConfig', 'variant') ?? undefined,\n );\n\n getRuntimeSelectorParamValues('useModalConfig', 'size').forEach((size) => {\n const gutter = getRuntimeFieldTokenValue(config, 'useModalConfig', 'gutter', { size });\n\n setRuntimeValue(getRuntimeFieldSelector('useModalConfig', 'gutter', { size }), gutter);\n });\n }\n\n return values;\n};\n\n/**\n * Format bytes to human readable string\n */\nconst formatBytes = (bytes: number): string => {\n if (bytes < 1024) {\n return `${bytes} B`;\n }\n const kb = bytes / 1024;\n if (kb < 1024) {\n return `${kb.toFixed(1)} KB`;\n }\n const mb = kb / 1024;\n return `${mb.toFixed(2)} MB`;\n};\n\n/**\n * Get motion CSS variable prefixes needed by a set of components.\n * Looks up motionVarPrefixes from componentData.json for each component.\n */\nconst getMotionVarPrefixes = (\n componentData: Record<string, SerializedComponentInfo>,\n components: string[],\n): string[] => {\n const prefixes = components.flatMap((componentName) => {\n const info = (componentData as Record<string, { motionVarPrefixes?: string[] }>)[componentName];\n return info?.motionVarPrefixes ?? [];\n });\n\n return [...new Set(prefixes)];\n};\n\n/**\n * Collect css variable names exposed by configurable properties.\n */\nconst getConfigurableCssVariables = (): string[] => {\n const udsVarPrefix = '--uds';\n const cssVars = Object.values(configurableProperties).flatMap(({ cssProperties }) => {\n if (typeof cssProperties === 'string') {\n return cssProperties.startsWith(udsVarPrefix) ? [cssProperties] : [];\n }\n\n if (Array.isArray(cssProperties)) {\n return cssProperties.filter(\n (cssProperty): cssProperty is string =>\n typeof cssProperty === 'string' && cssProperty.startsWith(udsVarPrefix),\n );\n }\n\n return [];\n });\n\n return [...new Set(['--uds-button-gap', ...cssVars])];\n};\n\nexport {\n extractRuntimeConfigValues,\n extractVariantDefaults,\n formatBytes,\n getConfigurableCssVariables,\n getMotionVarPrefixes,\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workerPool.js","names":[],"sources":["../../src/css/workerPool.ts"],"sourcesContent":["import { cpus } from 'node:os';\nimport { Worker } from 'node:worker_threads';\n\nimport type { PurgeFromCodeOptions, PurgeFromCodeResult } from '../purger/optimized/purgeFromCode';\n\ntype SharedConfig = Pick<PurgeFromCodeOptions, 'variants' | 'autoVariants' | 'componentData'>;\n\ninterface TaskOptions {\n code: string;\n filePath: string;\n colorModes?: ('dark' | 'light')[];\n variantDefaults?: PurgeFromCodeOptions['variantDefaults'];\n runtimeConfigValues?: PurgeFromCodeOptions['runtimeConfigValues'];\n includeAllClassNamePrimitives?: boolean;\n}\n\ninterface PendingTask {\n resolve: (result: PurgeFromCodeResult) => void;\n reject: (error: Error) => void;\n}\n\nexport interface WorkerPool {\n processFile: (options: TaskOptions) => Promise<PurgeFromCodeResult>;\n destroy: () => Promise<void>;\n workerCount: number;\n}\n\nexport const createWorkerPool = async (\n config: SharedConfig,\n numWorkers?: number,\n): Promise<WorkerPool> => {\n const workerCount = numWorkers ?? Math.max(1, cpus().length - 1);\n const workerUrl = new URL('./purgeWorker.js', import.meta.url);\n\n const workers: Worker[] = [];\n const available: Worker[] = [];\n const pending = new Map<number, PendingTask>();\n const queue: Array<{ msg: Record<string, unknown>; task: PendingTask }> = [];\n let nextId = 0;\n\n // Create workers, init with shared config, and set up message handlers\n await Promise.all(\n Array.from({ length: workerCount }, () => {\n return new Promise<void>((resolve, reject) => {\n const worker = new Worker(workerUrl);\n let initialized = false;\n\n worker.on(\n 'message',\n (msg: { type: string; id?: number; result?: PurgeFromCodeResult; error?: string }) => {\n if (msg.type === 'ready') {\n initialized = true;\n workers.push(worker);\n available.push(worker);\n resolve();\n return;\n }\n\n if (msg.type === 'result' || msg.type === 'error') {\n const task = msg.id != null ? pending.get(msg.id) : undefined;\n if (task) {\n pending.delete(msg.id!);\n if (msg.type === 'result') {\n task.resolve(msg.result!);\n } else {\n task.reject(new Error(msg.error ?? 'Unknown worker error'));\n }\n }\n\n available.push(worker);\n\n // Drain queue\n if (queue.length > 0 && available.length > 0) {\n const next = queue.shift()!;\n const nextWorker = available.pop()!;\n pending.set(next.msg.id as number, next.task);\n nextWorker.postMessage(next.msg);\n }\n }\n },\n );\n\n worker.on('error', (err) => {\n if (!initialized) {\n reject(err);\n }\n });\n\n // JSON round-trip ensures config is a plain object (ES module namespaces can't be cloned)\n worker.postMessage({ type: 'init', config: JSON.parse(JSON.stringify(config)) });\n });\n }),\n );\n\n const processFile = (options: TaskOptions): Promise<PurgeFromCodeResult> => {\n return new Promise((resolve, reject) => {\n const id = nextId++;\n const msg = {\n type: 'task' as const,\n id,\n code: options.code,\n filePath: options.filePath,\n colorModes: options.colorModes,\n variantDefaults: options.variantDefaults,\n runtimeConfigValues: options.runtimeConfigValues,\n includeAllClassNamePrimitives: options.includeAllClassNamePrimitives,\n };\n const task = { resolve, reject };\n\n if (available.length > 0) {\n const worker = available.pop()!;\n pending.set(id, task);\n worker.postMessage(msg);\n } else {\n queue.push({ msg, task });\n }\n });\n };\n\n const destroy = async () => {\n for (const worker of workers) {\n worker.postMessage({ type: 'done' });\n }\n await Promise.all(workers.map((w) => new Promise<void>((res) => w.on('exit', () => res()))));\n };\n\n return { processFile, destroy, workerCount };\n};\n"],"mappings":";;;;AA2BA,MAAa,mBAAmB,OAC9B,QACA,eACwB;CACxB,MAAM,cAAc,cAAc,KAAK,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE;CAChE,MAAM,YAAY,IAAI,IAAI,oBAAoB,OAAO,KAAK,IAAI;CAE9D,MAAM,UAAoB,EAAE;CAC5B,MAAM,YAAsB,EAAE;CAC9B,MAAM,0BAAU,IAAI,KAA0B;CAC9C,MAAM,QAAoE,EAAE;CAC5E,IAAI,SAAS;
|
|
1
|
+
{"version":3,"file":"workerPool.js","names":[],"sources":["../../src/css/workerPool.ts"],"sourcesContent":["import { cpus } from 'node:os';\nimport { Worker } from 'node:worker_threads';\n\nimport type { PurgeFromCodeOptions, PurgeFromCodeResult } from '../purger/optimized/purgeFromCode';\n\ntype SharedConfig = Pick<PurgeFromCodeOptions, 'variants' | 'autoVariants' | 'componentData'>;\n\ninterface TaskOptions {\n code: string;\n filePath: string;\n colorModes?: ('dark' | 'light')[];\n variantDefaults?: PurgeFromCodeOptions['variantDefaults'];\n runtimeConfigValues?: PurgeFromCodeOptions['runtimeConfigValues'];\n includeAllClassNamePrimitives?: boolean;\n}\n\ninterface PendingTask {\n resolve: (result: PurgeFromCodeResult) => void;\n reject: (error: Error) => void;\n}\n\nexport interface WorkerPool {\n processFile: (options: TaskOptions) => Promise<PurgeFromCodeResult>;\n destroy: () => Promise<void>;\n workerCount: number;\n}\n\nexport const createWorkerPool = async (\n config: SharedConfig,\n numWorkers?: number,\n): Promise<WorkerPool> => {\n const workerCount = numWorkers ?? Math.max(1, cpus().length - 1);\n const workerUrl = new URL('./purgeWorker.js', import.meta.url);\n\n const workers: Worker[] = [];\n const available: Worker[] = [];\n const pending = new Map<number, PendingTask>();\n const queue: Array<{ msg: Record<string, unknown>; task: PendingTask }> = [];\n let nextId = 0;\n\n // Create workers, init with shared config, and set up message handlers\n await Promise.all(\n Array.from({ length: workerCount }, () => {\n return new Promise<void>((resolve, reject) => {\n const worker = new Worker(workerUrl);\n let initialized = false;\n\n worker.on(\n 'message',\n (msg: { type: string; id?: number; result?: PurgeFromCodeResult; error?: string }) => {\n if (msg.type === 'ready') {\n initialized = true;\n workers.push(worker);\n available.push(worker);\n resolve();\n return;\n }\n\n if (msg.type === 'result' || msg.type === 'error') {\n const task = msg.id != null ? pending.get(msg.id) : undefined;\n if (task) {\n pending.delete(msg.id!);\n if (msg.type === 'result') {\n task.resolve(msg.result!);\n } else {\n task.reject(new Error(msg.error ?? 'Unknown worker error'));\n }\n }\n\n available.push(worker);\n\n // Drain queue\n if (queue.length > 0 && available.length > 0) {\n const next = queue.shift()!;\n const nextWorker = available.pop()!;\n pending.set(next.msg.id as number, next.task);\n nextWorker.postMessage(next.msg);\n }\n }\n },\n );\n\n worker.on('error', (err) => {\n if (!initialized) {\n reject(err);\n }\n });\n\n // JSON round-trip ensures config is a plain object (ES module namespaces can't be cloned)\n worker.postMessage({ type: 'init', config: JSON.parse(JSON.stringify(config)) });\n });\n }),\n );\n\n const processFile = (options: TaskOptions): Promise<PurgeFromCodeResult> => {\n return new Promise((resolve, reject) => {\n const id = nextId++;\n const msg = {\n type: 'task' as const,\n id,\n code: options.code,\n filePath: options.filePath,\n colorModes: options.colorModes,\n variantDefaults: options.variantDefaults,\n runtimeConfigValues: options.runtimeConfigValues,\n includeAllClassNamePrimitives: options.includeAllClassNamePrimitives,\n };\n const task = { resolve, reject };\n\n if (available.length > 0) {\n const worker = available.pop()!;\n pending.set(id, task);\n worker.postMessage(msg);\n } else {\n queue.push({ msg, task });\n }\n });\n };\n\n const destroy = async () => {\n for (const worker of workers) {\n worker.postMessage({ type: 'done' });\n }\n await Promise.all(workers.map((w) => new Promise<void>((res) => w.on('exit', () => res()))));\n };\n\n return { processFile, destroy, workerCount };\n};\n"],"mappings":";;;;AA2BA,MAAa,mBAAmB,OAC9B,QACA,eACwB;CACxB,MAAM,cAAc,cAAc,KAAK,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE;CAChE,MAAM,YAAY,IAAI,IAAI,oBAAoB,OAAO,KAAK,IAAI;CAE9D,MAAM,UAAoB,EAAE;CAC5B,MAAM,YAAsB,EAAE;CAC9B,MAAM,0BAAU,IAAI,KAA0B;CAC9C,MAAM,QAAoE,EAAE;CAC5E,IAAI,SAAS;CAGb,MAAM,QAAQ,IACZ,MAAM,KAAK,EAAE,QAAQ,aAAa,QAAQ;EACxC,OAAO,IAAI,SAAe,SAAS,WAAW;GAC5C,MAAM,SAAS,IAAI,OAAO,UAAU;GACpC,IAAI,cAAc;GAElB,OAAO,GACL,YACC,QAAqF;IACpF,IAAI,IAAI,SAAS,SAAS;KACxB,cAAc;KACd,QAAQ,KAAK,OAAO;KACpB,UAAU,KAAK,OAAO;KACtB,SAAS;KACT;;IAGF,IAAI,IAAI,SAAS,YAAY,IAAI,SAAS,SAAS;KACjD,MAAM,OAAO,IAAI,MAAM,OAAO,QAAQ,IAAI,IAAI,GAAG,GAAG,KAAA;KACpD,IAAI,MAAM;MACR,QAAQ,OAAO,IAAI,GAAI;MACvB,IAAI,IAAI,SAAS,UACf,KAAK,QAAQ,IAAI,OAAQ;WAEzB,KAAK,OAAO,IAAI,MAAM,IAAI,SAAS,uBAAuB,CAAC;;KAI/D,UAAU,KAAK,OAAO;KAGtB,IAAI,MAAM,SAAS,KAAK,UAAU,SAAS,GAAG;MAC5C,MAAM,OAAO,MAAM,OAAO;MAC1B,MAAM,aAAa,UAAU,KAAK;MAClC,QAAQ,IAAI,KAAK,IAAI,IAAc,KAAK,KAAK;MAC7C,WAAW,YAAY,KAAK,IAAI;;;KAIvC;GAED,OAAO,GAAG,UAAU,QAAQ;IAC1B,IAAI,CAAC,aACH,OAAO,IAAI;KAEb;GAGF,OAAO,YAAY;IAAE,MAAM;IAAQ,QAAQ,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;IAAE,CAAC;IAChF;GACF,CACH;CAED,MAAM,eAAe,YAAuD;EAC1E,OAAO,IAAI,SAAS,SAAS,WAAW;GACtC,MAAM,KAAK;GACX,MAAM,MAAM;IACV,MAAM;IACN;IACA,MAAM,QAAQ;IACd,UAAU,QAAQ;IAClB,YAAY,QAAQ;IACpB,iBAAiB,QAAQ;IACzB,qBAAqB,QAAQ;IAC7B,+BAA+B,QAAQ;IACxC;GACD,MAAM,OAAO;IAAE;IAAS;IAAQ;GAEhC,IAAI,UAAU,SAAS,GAAG;IACxB,MAAM,SAAS,UAAU,KAAK;IAC9B,QAAQ,IAAI,IAAI,KAAK;IACrB,OAAO,YAAY,IAAI;UAEvB,MAAM,KAAK;IAAE;IAAK;IAAM,CAAC;IAE3B;;CAGJ,MAAM,UAAU,YAAY;EAC1B,KAAK,MAAM,UAAU,SACnB,OAAO,YAAY,EAAE,MAAM,QAAQ,CAAC;EAEtC,MAAM,QAAQ,IAAI,QAAQ,KAAK,MAAM,IAAI,SAAe,QAAQ,EAAE,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC;;CAG9F,OAAO;EAAE;EAAa;EAAS;EAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../css-tokens/dist/index.js"],"sourcesContent":["/*! © 2026 Yahoo, Inc. UDS Motion Tokens v0.0.0-development */\nimport { shadowOffsetMap, shadowSpreadRadiusMap, spacingMap } from \"@yahoo/uds-fixtures\";\nimport { newAlwaysPalette } from \"@yahoo/uds-palette\";\n//#region src/index.ts\nconst UDS_PREFIX = \"uds\";\nconst AVATAR_SIZE_PREFIX = `uds-avatar-size`;\nconst BACKGROUND_COLOR_PREFIX = `uds-background-color`;\nconst BORDER_RADIUS_PREFIX = `uds-border-radius`;\nconst BORDER_WIDTH_PREFIX = `uds-border-width`;\nconst DROP_SHADOW_PREFIX = `uds-drop-shadow`;\nconst INSET_SHADOW_PREFIX = `uds-inset-shadow`;\nconst BACKGROUND_BLUR_RADIUS_PREFIX = `uds-background-blur-radius`;\nconst BACKGROUND_BLUR_COLOR_PREFIX = `uds-background-blur-color`;\nconst BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX = `uds-background-blur-fallback-color`;\nconst FONT_FAMILY_PREFIX = `uds-font`;\nconst FONT_SIZE_PREFIX = `uds-font-size`;\nconst FONT_WEIGHT_PREFIX = `uds-font-weight`;\nconst FONT_SLANT_PREFIX = `uds-font-slant`;\nconst FONT_WIDTH_PREFIX = `uds-font-width`;\nconst ICON_SIZE_PREFIX = `uds-icon-size`;\nconst LINE_COLOR_PREFIX = `uds-line-color`;\nconst LINE_HEIGHT_PREFIX = `uds-line-height`;\nconst LETTER_SPACING_PREFIX = `uds-letter-spacing`;\nconst MOTION_PREFIX = `uds-motion`;\nconst OUTLINE_PREFIX = `uds-outline`;\nconst SPECTRUM_COLOR_PREFIX = `uds-spectrum-color`;\nconst TEXT_TRANSFORM_PREFIX = `uds-text-transform`;\nconst DARK_COLOR_MODE_CLASSNAME = `uds-color-mode-dark`;\nconst LIGHT_COLOR_MODE_CLASSNAME = `uds-color-mode-light`;\nconst SYSTEM_COLOR_MODE_CLASSNAME = `uds-color-mode-system`;\nconst INVERT_COLOR_MODE_CLASSNAME = `uds-color-mode-invert`;\nconst XSMALL_SCALE_MODE_CLASSNAME = `uds-scale-mode-xsmall`;\nconst SMALL_SCALE_MODE_CLASSNAME = `uds-scale-mode-small`;\nconst MEDIUM_SCALE_MODE_CLASSNAME = `uds-scale-mode-medium`;\nconst LARGE_SCALE_MODE_CLASSNAME = `uds-scale-mode-large`;\nconst XLARGE_SCALE_MODE_CLASSNAME = `uds-scale-mode-xlarge`;\nconst XXLARGE_SCALE_MODE_CLASSNAME = `uds-scale-mode-xxlarge`;\nconst XXXLARGE_SCALE_MODE_CLASSNAME = `uds-scale-mode-xxxlarge`;\nconst DEFAULT_COLOR_MODE_CLASSNAME = LIGHT_COLOR_MODE_CLASSNAME;\nconst DEFAULT_SCALE_MODE_CLASSNAME = LARGE_SCALE_MODE_CLASSNAME;\nconst TEXT_RESPONSIVE_CLASSNAME = \"uds-text-responsive\";\nconst TEXT_RESPONSIVE_BREAKPOINT_CLASSNAMES = {\n\tdefaultBreakpoint: \"uds-text-default\",\n\tbase: \"uds-text-base\",\n\tsm: \"uds-text-sm\",\n\tmd: \"uds-text-md\",\n\tlg: \"uds-text-lg\",\n\txl: \"uds-text-xl\",\n\t\"2xl\": \"uds-text-2xl\"\n};\nconst BUTTON_GAP_VAR = `--uds-button-gap`;\nconst BUTTON_SCALE_EFFECT = `--uds-button-scale-effect`;\nconst BUTTON_SCALE_EFFECT_REST = `${BUTTON_SCALE_EFFECT}-rest`;\nconst BUTTON_SCALE_EFFECT_HOVER = `${BUTTON_SCALE_EFFECT}-hover`;\nconst BUTTON_SCALE_EFFECT_PRESSED = `${BUTTON_SCALE_EFFECT}-pressed`;\nconst PSEUDO_STYLE_SELECTOR_MAP = {\n\thover: \":hover:not([disabled])\",\n\tpressed: \":active:not([disabled])\",\n\tdisabled: \":disabled\",\n\tfocused: \":focus-visible\",\n\tfocusedWithin: \":has(:focus-visible)\",\n\tnotDisabled: \":not(:has(:disabled))\"\n};\n/**\n* These CSS utilities are temporarily housed here because they are shared\n* dependencies between:\n* - @yahoo/uds-automated-config (component automation/styling generation)\n* - @yahoo/uds (tailwind plugin for shadow generation)\n*\n* Placing them in css-tokens avoids circular dependencies between these packages.\n* TODO: Consider creating a dedicated shared utilities package if this grows.\n*/\nconst textVariantsSafe = (variant) => variant.replace(\"/\", \"-\");\nfunction hexToRgb(hex) {\n\thex = hex.replace(\"#\", \"\");\n\tif (hex.length === 3) hex = hex.split(\"\").map((char) => char + char).join(\"\");\n\treturn `${parseInt(hex.substring(0, 2), 16)} ${parseInt(hex.substring(2, 4), 16)} ${parseInt(hex.substring(4, 6), 16)}`;\n}\nconst RGB = {\n\twhite: hexToRgb(newAlwaysPalette[\"always/white\"]),\n\tblack: hexToRgb(newAlwaysPalette[\"always/black\"]),\n\tbrand: hexToRgb(newAlwaysPalette[\"always/brand\"]),\n\taccent: hexToRgb(newAlwaysPalette[\"always/accent\"])\n};\nconst ALWAYS_AS_RGB = {\n\tblack: RGB.black,\n\twhite: RGB.white,\n\t\"always/black\": RGB.black,\n\t\"always/white\": RGB.white,\n\t\"always/brand\": RGB.brand,\n\t\"always/accent\": RGB.accent\n};\n/**\n* Generate a single shadow value from a shadow preset configuration\n*\n* @param preset - The shadow preset configuration\n* @param index - Optional index for numbered shadows (2-5)\n* @param shadowType - The type of shadow (drop or inset)\n* @returns A CSS box-shadow value string\n*/\nfunction getShadowLayerValue({ preset, prefix, shadowType, cssVarPrefix }) {\n\tconst varPrefix = cssVarPrefix ?? `--uds-${shadowType}-shadow-`;\n\tconst isPaletteColor = preset.color?.type === \"palette\";\n\tconst isAlwaysColor = preset.color?.type === \"always\";\n\tlet shadowColor = `var(--uds-${isPaletteColor ? \"shadow\" : \"spectrum\"}-color-${preset?.color?.value})`;\n\tif (isAlwaysColor) shadowColor = ALWAYS_AS_RGB[preset.color.value];\n\tconst defaultColor = `var(${varPrefix}${prefix ? `${prefix}-` : \"\"}color, ${shadowColor})`;\n\tconst cssValues = [\n\t\t`${shadowOffsetMap[preset.offsetX]}px`,\n\t\t`${shadowOffsetMap[preset.offsetY]}px`,\n\t\t`${spacingMap[preset.blur]}px`,\n\t\t`${shadowSpreadRadiusMap[preset.spread]}px`\n\t].map((value) => value).join(\" \");\n\tconst colorValue = `rgb(${defaultColor} / var(${varPrefix}${prefix ? `${prefix}-` : \"\"}opacity, ${Number(preset.opacity) / 100}))`;\n\treturn `${shadowType === \"inset\" ? \"inset \" : \"\"}${cssValues} ${colorValue}`;\n}\nfunction getMotionVar({ variant, speed, control }) {\n\treturn `${[\n\t\t`--${MOTION_PREFIX}`,\n\t\tvariant,\n\t\tspeed,\n\t\tcontrol\n\t].join(\"-\")}`;\n}\n//#endregion\nexport { AVATAR_SIZE_PREFIX, BACKGROUND_BLUR_COLOR_PREFIX, BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX, BACKGROUND_BLUR_RADIUS_PREFIX, BACKGROUND_COLOR_PREFIX, BORDER_RADIUS_PREFIX, BORDER_WIDTH_PREFIX, BUTTON_GAP_VAR, BUTTON_SCALE_EFFECT, BUTTON_SCALE_EFFECT_HOVER, BUTTON_SCALE_EFFECT_PRESSED, BUTTON_SCALE_EFFECT_REST, DARK_COLOR_MODE_CLASSNAME, DEFAULT_COLOR_MODE_CLASSNAME, DEFAULT_SCALE_MODE_CLASSNAME, DROP_SHADOW_PREFIX, FONT_FAMILY_PREFIX, FONT_SIZE_PREFIX, FONT_SLANT_PREFIX, FONT_WEIGHT_PREFIX, FONT_WIDTH_PREFIX, ICON_SIZE_PREFIX, INSET_SHADOW_PREFIX, INVERT_COLOR_MODE_CLASSNAME, LARGE_SCALE_MODE_CLASSNAME, LETTER_SPACING_PREFIX, LIGHT_COLOR_MODE_CLASSNAME, LINE_COLOR_PREFIX, LINE_HEIGHT_PREFIX, MEDIUM_SCALE_MODE_CLASSNAME, MOTION_PREFIX, OUTLINE_PREFIX, PSEUDO_STYLE_SELECTOR_MAP, SMALL_SCALE_MODE_CLASSNAME, SPECTRUM_COLOR_PREFIX, SYSTEM_COLOR_MODE_CLASSNAME, TEXT_RESPONSIVE_BREAKPOINT_CLASSNAMES, TEXT_RESPONSIVE_CLASSNAME, TEXT_TRANSFORM_PREFIX, UDS_PREFIX, XLARGE_SCALE_MODE_CLASSNAME, XSMALL_SCALE_MODE_CLASSNAME, XXLARGE_SCALE_MODE_CLASSNAME, XXXLARGE_SCALE_MODE_CLASSNAME, getMotionVar, getShadowLayerValue, textVariantsSafe };\n\n//# sourceMappingURL=index.js.map"],"mappings":";;;;;AAKA,MAAM,qBAAqB;AAC3B,MAAM,0BAA0B;AAChC,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,MAAM,gCAAgC;AACtC,MAAM,+BAA+B;AACrC,MAAM,wCAAwC;AAC9C,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAC3B,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAC1B,MAAM,mBAAmB;AACzB,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAC3B,MAAM,wBAAwB;AAC9B,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AACvB,MAAM,wBAAwB;AAC9B,MAAM,wBAAwB;AAC9B,MAAM,4BAA4B;AAClC,MAAM,6BAA6B;AACnC,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM,6BAA6B;AACnC,MAAM,8BAA8B;AACpC,MAAM,6BAA6B;AACnC,MAAM,8BAA8B;AACpC,MAAM,+BAA+B;AACrC,MAAM,gCAAgC;AAGtC,MAAM,4BAA4B;AAClC,MAAM,wCAAwC;CAC7C,mBAAmB;CACnB,MAAM;CACN,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP;AACD,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,2BAA2B,GAAG,oBAAoB;AACxD,MAAM,4BAA4B,GAAG,oBAAoB;AACzD,MAAM,8BAA8B,GAAG,oBAAoB;AAC3D,MAAM,4BAA4B;CACjC,OAAO;CACP,SAAS;CACT,UAAU;CACV,SAAS;CACT,eAAe;CACf,aAAa;CACb;;;;;;;;;;AAUD,MAAM,oBAAoB,YAAY,QAAQ,QAAQ,KAAK,IAAI;AAC/D,SAAS,SAAS,KAAK;
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../css-tokens/dist/index.js"],"sourcesContent":["/*! © 2026 Yahoo, Inc. UDS Motion Tokens v0.0.0-development */\nimport { shadowOffsetMap, shadowSpreadRadiusMap, spacingMap } from \"@yahoo/uds-fixtures\";\nimport { newAlwaysPalette } from \"@yahoo/uds-palette\";\n//#region src/index.ts\nconst UDS_PREFIX = \"uds\";\nconst AVATAR_SIZE_PREFIX = `uds-avatar-size`;\nconst BACKGROUND_COLOR_PREFIX = `uds-background-color`;\nconst BORDER_RADIUS_PREFIX = `uds-border-radius`;\nconst BORDER_WIDTH_PREFIX = `uds-border-width`;\nconst DROP_SHADOW_PREFIX = `uds-drop-shadow`;\nconst INSET_SHADOW_PREFIX = `uds-inset-shadow`;\nconst BACKGROUND_BLUR_RADIUS_PREFIX = `uds-background-blur-radius`;\nconst BACKGROUND_BLUR_COLOR_PREFIX = `uds-background-blur-color`;\nconst BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX = `uds-background-blur-fallback-color`;\nconst FONT_FAMILY_PREFIX = `uds-font`;\nconst FONT_SIZE_PREFIX = `uds-font-size`;\nconst FONT_WEIGHT_PREFIX = `uds-font-weight`;\nconst FONT_SLANT_PREFIX = `uds-font-slant`;\nconst FONT_WIDTH_PREFIX = `uds-font-width`;\nconst ICON_SIZE_PREFIX = `uds-icon-size`;\nconst LINE_COLOR_PREFIX = `uds-line-color`;\nconst LINE_HEIGHT_PREFIX = `uds-line-height`;\nconst LETTER_SPACING_PREFIX = `uds-letter-spacing`;\nconst MOTION_PREFIX = `uds-motion`;\nconst OUTLINE_PREFIX = `uds-outline`;\nconst SPECTRUM_COLOR_PREFIX = `uds-spectrum-color`;\nconst TEXT_TRANSFORM_PREFIX = `uds-text-transform`;\nconst DARK_COLOR_MODE_CLASSNAME = `uds-color-mode-dark`;\nconst LIGHT_COLOR_MODE_CLASSNAME = `uds-color-mode-light`;\nconst SYSTEM_COLOR_MODE_CLASSNAME = `uds-color-mode-system`;\nconst INVERT_COLOR_MODE_CLASSNAME = `uds-color-mode-invert`;\nconst XSMALL_SCALE_MODE_CLASSNAME = `uds-scale-mode-xsmall`;\nconst SMALL_SCALE_MODE_CLASSNAME = `uds-scale-mode-small`;\nconst MEDIUM_SCALE_MODE_CLASSNAME = `uds-scale-mode-medium`;\nconst LARGE_SCALE_MODE_CLASSNAME = `uds-scale-mode-large`;\nconst XLARGE_SCALE_MODE_CLASSNAME = `uds-scale-mode-xlarge`;\nconst XXLARGE_SCALE_MODE_CLASSNAME = `uds-scale-mode-xxlarge`;\nconst XXXLARGE_SCALE_MODE_CLASSNAME = `uds-scale-mode-xxxlarge`;\nconst DEFAULT_COLOR_MODE_CLASSNAME = LIGHT_COLOR_MODE_CLASSNAME;\nconst DEFAULT_SCALE_MODE_CLASSNAME = LARGE_SCALE_MODE_CLASSNAME;\nconst TEXT_RESPONSIVE_CLASSNAME = \"uds-text-responsive\";\nconst TEXT_RESPONSIVE_BREAKPOINT_CLASSNAMES = {\n\tdefaultBreakpoint: \"uds-text-default\",\n\tbase: \"uds-text-base\",\n\tsm: \"uds-text-sm\",\n\tmd: \"uds-text-md\",\n\tlg: \"uds-text-lg\",\n\txl: \"uds-text-xl\",\n\t\"2xl\": \"uds-text-2xl\"\n};\nconst BUTTON_GAP_VAR = `--uds-button-gap`;\nconst BUTTON_SCALE_EFFECT = `--uds-button-scale-effect`;\nconst BUTTON_SCALE_EFFECT_REST = `${BUTTON_SCALE_EFFECT}-rest`;\nconst BUTTON_SCALE_EFFECT_HOVER = `${BUTTON_SCALE_EFFECT}-hover`;\nconst BUTTON_SCALE_EFFECT_PRESSED = `${BUTTON_SCALE_EFFECT}-pressed`;\nconst PSEUDO_STYLE_SELECTOR_MAP = {\n\thover: \":hover:not([disabled])\",\n\tpressed: \":active:not([disabled])\",\n\tdisabled: \":disabled\",\n\tfocused: \":focus-visible\",\n\tfocusedWithin: \":has(:focus-visible)\",\n\tnotDisabled: \":not(:has(:disabled))\"\n};\n/**\n* These CSS utilities are temporarily housed here because they are shared\n* dependencies between:\n* - @yahoo/uds-automated-config (component automation/styling generation)\n* - @yahoo/uds (tailwind plugin for shadow generation)\n*\n* Placing them in css-tokens avoids circular dependencies between these packages.\n* TODO: Consider creating a dedicated shared utilities package if this grows.\n*/\nconst textVariantsSafe = (variant) => variant.replace(\"/\", \"-\");\nfunction hexToRgb(hex) {\n\thex = hex.replace(\"#\", \"\");\n\tif (hex.length === 3) hex = hex.split(\"\").map((char) => char + char).join(\"\");\n\treturn `${parseInt(hex.substring(0, 2), 16)} ${parseInt(hex.substring(2, 4), 16)} ${parseInt(hex.substring(4, 6), 16)}`;\n}\nconst RGB = {\n\twhite: hexToRgb(newAlwaysPalette[\"always/white\"]),\n\tblack: hexToRgb(newAlwaysPalette[\"always/black\"]),\n\tbrand: hexToRgb(newAlwaysPalette[\"always/brand\"]),\n\taccent: hexToRgb(newAlwaysPalette[\"always/accent\"])\n};\nconst ALWAYS_AS_RGB = {\n\tblack: RGB.black,\n\twhite: RGB.white,\n\t\"always/black\": RGB.black,\n\t\"always/white\": RGB.white,\n\t\"always/brand\": RGB.brand,\n\t\"always/accent\": RGB.accent\n};\n/**\n* Generate a single shadow value from a shadow preset configuration\n*\n* @param preset - The shadow preset configuration\n* @param index - Optional index for numbered shadows (2-5)\n* @param shadowType - The type of shadow (drop or inset)\n* @returns A CSS box-shadow value string\n*/\nfunction getShadowLayerValue({ preset, prefix, shadowType, cssVarPrefix }) {\n\tconst varPrefix = cssVarPrefix ?? `--uds-${shadowType}-shadow-`;\n\tconst isPaletteColor = preset.color?.type === \"palette\";\n\tconst isAlwaysColor = preset.color?.type === \"always\";\n\tlet shadowColor = `var(--uds-${isPaletteColor ? \"shadow\" : \"spectrum\"}-color-${preset?.color?.value})`;\n\tif (isAlwaysColor) shadowColor = ALWAYS_AS_RGB[preset.color.value];\n\tconst defaultColor = `var(${varPrefix}${prefix ? `${prefix}-` : \"\"}color, ${shadowColor})`;\n\tconst cssValues = [\n\t\t`${shadowOffsetMap[preset.offsetX]}px`,\n\t\t`${shadowOffsetMap[preset.offsetY]}px`,\n\t\t`${spacingMap[preset.blur]}px`,\n\t\t`${shadowSpreadRadiusMap[preset.spread]}px`\n\t].map((value) => value).join(\" \");\n\tconst colorValue = `rgb(${defaultColor} / var(${varPrefix}${prefix ? `${prefix}-` : \"\"}opacity, ${Number(preset.opacity) / 100}))`;\n\treturn `${shadowType === \"inset\" ? \"inset \" : \"\"}${cssValues} ${colorValue}`;\n}\nfunction getMotionVar({ variant, speed, control }) {\n\treturn `${[\n\t\t`--${MOTION_PREFIX}`,\n\t\tvariant,\n\t\tspeed,\n\t\tcontrol\n\t].join(\"-\")}`;\n}\n//#endregion\nexport { AVATAR_SIZE_PREFIX, BACKGROUND_BLUR_COLOR_PREFIX, BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX, BACKGROUND_BLUR_RADIUS_PREFIX, BACKGROUND_COLOR_PREFIX, BORDER_RADIUS_PREFIX, BORDER_WIDTH_PREFIX, BUTTON_GAP_VAR, BUTTON_SCALE_EFFECT, BUTTON_SCALE_EFFECT_HOVER, BUTTON_SCALE_EFFECT_PRESSED, BUTTON_SCALE_EFFECT_REST, DARK_COLOR_MODE_CLASSNAME, DEFAULT_COLOR_MODE_CLASSNAME, DEFAULT_SCALE_MODE_CLASSNAME, DROP_SHADOW_PREFIX, FONT_FAMILY_PREFIX, FONT_SIZE_PREFIX, FONT_SLANT_PREFIX, FONT_WEIGHT_PREFIX, FONT_WIDTH_PREFIX, ICON_SIZE_PREFIX, INSET_SHADOW_PREFIX, INVERT_COLOR_MODE_CLASSNAME, LARGE_SCALE_MODE_CLASSNAME, LETTER_SPACING_PREFIX, LIGHT_COLOR_MODE_CLASSNAME, LINE_COLOR_PREFIX, LINE_HEIGHT_PREFIX, MEDIUM_SCALE_MODE_CLASSNAME, MOTION_PREFIX, OUTLINE_PREFIX, PSEUDO_STYLE_SELECTOR_MAP, SMALL_SCALE_MODE_CLASSNAME, SPECTRUM_COLOR_PREFIX, SYSTEM_COLOR_MODE_CLASSNAME, TEXT_RESPONSIVE_BREAKPOINT_CLASSNAMES, TEXT_RESPONSIVE_CLASSNAME, TEXT_TRANSFORM_PREFIX, UDS_PREFIX, XLARGE_SCALE_MODE_CLASSNAME, XSMALL_SCALE_MODE_CLASSNAME, XXLARGE_SCALE_MODE_CLASSNAME, XXXLARGE_SCALE_MODE_CLASSNAME, getMotionVar, getShadowLayerValue, textVariantsSafe };\n\n//# sourceMappingURL=index.js.map"],"mappings":"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"}
|
|
@@ -1,14 +1,4 @@
|
|
|
1
1
|
/*! © 2026 Yahoo, Inc. UDS Tailwind and Purger v0.0.0-development */
|
|
2
|
-
//#region ../fixtures/dist/index.js
|
|
3
|
-
function createArbitraryFixture(fixture) {
|
|
4
|
-
return fixture;
|
|
5
|
-
}
|
|
6
|
-
createArbitraryFixture({
|
|
7
|
-
type: "arbitraryFixture",
|
|
8
|
-
valueType: "integer",
|
|
9
|
-
min: 0,
|
|
10
|
-
step: 1
|
|
11
|
-
});
|
|
12
2
|
var elevationAliases = [
|
|
13
3
|
"elevation-0",
|
|
14
4
|
"elevation-1",
|
|
@@ -1,14 +1,4 @@
|
|
|
1
1
|
/*! © 2026 Yahoo, Inc. UDS Tailwind and Purger v0.0.0-development */
|
|
2
|
-
//#region ../fixtures/dist/index.js
|
|
3
|
-
function createArbitraryFixture(fixture) {
|
|
4
|
-
return fixture;
|
|
5
|
-
}
|
|
6
|
-
createArbitraryFixture({
|
|
7
|
-
type: "arbitraryFixture",
|
|
8
|
-
valueType: "integer",
|
|
9
|
-
min: 0,
|
|
10
|
-
step: 1
|
|
11
|
-
});
|
|
12
2
|
var elevationAliases = [
|
|
13
3
|
"elevation-0",
|
|
14
4
|
"elevation-1",
|