@yahoo/uds 3.133.3 → 3.134.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/automated-config/dist/generated/autoVariants.cjs +14 -0
- package/dist/automated-config/dist/generated/autoVariants.d.cts +14 -0
- package/dist/automated-config/dist/generated/autoVariants.d.ts +14 -0
- package/dist/automated-config/dist/generated/autoVariants.js +14 -0
- package/dist/automated-config/dist/generated/generatedConfigs.cjs +2796 -1
- package/dist/automated-config/dist/generated/generatedConfigs.d.cts +288 -2
- package/dist/automated-config/dist/generated/generatedConfigs.d.ts +288 -2
- package/dist/automated-config/dist/generated/generatedConfigs.js +2796 -2
- package/dist/automated-config/dist/generated/universalTokensConfigAuto.cjs +119 -0
- package/dist/automated-config/dist/generated/universalTokensConfigAuto.d.cts +2 -1
- package/dist/automated-config/dist/generated/universalTokensConfigAuto.d.ts +2 -1
- package/dist/automated-config/dist/generated/universalTokensConfigAuto.js +119 -0
- package/dist/automated-config/dist/properties.cjs +15 -1
- package/dist/automated-config/dist/properties.d.cts +4 -0
- package/dist/automated-config/dist/properties.d.ts +4 -0
- package/dist/automated-config/dist/properties.js +15 -1
- package/dist/automated-config/dist/utils/getConfigVariantProperties.d.cts +2 -2
- package/dist/automated-config/dist/utils/getConfigVariantProperties.d.ts +2 -2
- package/dist/cli/commands/sync.cjs +4 -0
- package/dist/cli/commands/sync.js +4 -0
- package/dist/cli/dist/lib/args.cjs +7 -3
- package/dist/cli/dist/lib/args.js +7 -3
- package/dist/components/client/Menu/Menu.ItemCheckbox.d.cts +1 -1
- package/dist/components/client/Menu/Menu.ItemCheckbox.d.ts +1 -1
- package/dist/components/client/Modal/Modal.cjs +193 -0
- package/dist/components/client/Modal/Modal.d.cts +51 -0
- package/dist/components/client/Modal/Modal.d.ts +52 -0
- package/dist/components/client/Modal/Modal.js +191 -0
- package/dist/components/client/Modal/ModalActions.cjs +54 -0
- package/dist/components/client/Modal/ModalActions.d.cts +27 -0
- package/dist/components/client/Modal/ModalActions.d.ts +28 -0
- package/dist/components/client/Modal/ModalActions.js +52 -0
- package/dist/components/client/Modal/ModalContent.cjs +37 -0
- package/dist/components/client/Modal/ModalContent.d.cts +24 -0
- package/dist/components/client/Modal/ModalContent.d.ts +25 -0
- package/dist/components/client/Modal/ModalContent.js +35 -0
- package/dist/components/client/Modal/ModalContext.cjs +15 -0
- package/dist/components/client/Modal/ModalContext.d.cts +13 -0
- package/dist/components/client/Modal/ModalContext.d.ts +14 -0
- package/dist/components/client/Modal/ModalContext.js +12 -0
- package/dist/components/client/Modal/ModalDescription.cjs +29 -0
- package/dist/components/client/Modal/ModalDescription.d.cts +23 -0
- package/dist/components/client/Modal/ModalDescription.d.ts +24 -0
- package/dist/components/client/Modal/ModalDescription.js +27 -0
- package/dist/components/client/Modal/ModalTitle.cjs +29 -0
- package/dist/components/client/Modal/ModalTitle.d.cts +23 -0
- package/dist/components/client/Modal/ModalTitle.d.ts +24 -0
- package/dist/components/client/Modal/ModalTitle.js +27 -0
- package/dist/components/client/Modal/UDSModalConfigProvider.cjs +42 -0
- package/dist/components/client/Modal/UDSModalConfigProvider.d.cts +35 -0
- package/dist/components/client/Modal/UDSModalConfigProvider.d.ts +36 -0
- package/dist/components/client/Modal/UDSModalConfigProvider.js +39 -0
- package/dist/components/client/Modal/index.cjs +16 -0
- package/dist/components/client/Modal/index.d.cts +8 -0
- package/dist/components/client/Modal/index.d.ts +9 -0
- package/dist/components/client/Modal/index.js +9 -0
- package/dist/components/client/Modal/useScrollFade.cjs +38 -0
- package/dist/components/client/Modal/useScrollFade.d.cts +13 -0
- package/dist/components/client/Modal/useScrollFade.d.ts +14 -0
- package/dist/components/client/Modal/useScrollFade.js +36 -0
- package/dist/components/client/Modal/utils.cjs +32 -0
- package/dist/components/client/Modal/utils.d.cts +13 -0
- package/dist/components/client/Modal/utils.d.ts +14 -0
- package/dist/components/client/Modal/utils.js +30 -0
- package/dist/components/client/Popover/index.d.cts +1 -1
- package/dist/components/client/Popover/index.d.ts +1 -1
- package/dist/components/client/Toast/UDSToastConfigProvider.d.cts +1 -1
- package/dist/components/client/Toast/UDSToastConfigProvider.d.ts +1 -1
- package/dist/components/client/index.cjs +13 -0
- package/dist/components/client/index.d.cts +8 -2
- package/dist/components/client/index.d.ts +8 -2
- package/dist/components/client/index.js +7 -1
- package/dist/components/client/providers/UDSConfigProvider.cjs +6 -2
- package/dist/components/client/providers/UDSConfigProvider.d.cts +2 -1
- package/dist/components/client/providers/UDSConfigProvider.d.ts +2 -1
- package/dist/components/client/providers/UDSConfigProvider.js +6 -2
- package/dist/components/experimental/client/index.cjs +0 -5
- package/dist/components/experimental/client/index.d.cts +1 -2
- package/dist/components/experimental/client/index.d.ts +1 -2
- package/dist/components/experimental/client/index.js +1 -2
- package/dist/components/experimental/index.cjs +1 -10
- package/dist/components/experimental/index.d.cts +1 -2
- package/dist/components/experimental/index.d.ts +1 -2
- package/dist/components/experimental/index.js +2 -7
- package/dist/components/index.cjs +20 -0
- package/dist/components/index.d.cts +8 -2
- package/dist/components/index.d.ts +8 -2
- package/dist/components/index.js +14 -1
- package/dist/config/dist/index.cjs +129 -4
- package/dist/config/dist/index.js +129 -4
- package/dist/index.cjs +16 -0
- package/dist/index.d.cts +11 -4
- package/dist/index.d.ts +11 -4
- package/dist/index.js +9 -2
- package/dist/runtime/index.cjs +2 -0
- package/dist/runtime/index.d.cts +2 -1
- package/dist/runtime/index.d.ts +2 -1
- package/dist/runtime/index.js +2 -1
- package/dist/runtime/modalConfig.cjs +22 -0
- package/dist/runtime/modalConfig.d.cts +22 -0
- package/dist/runtime/modalConfig.d.ts +22 -0
- package/dist/runtime/modalConfig.js +21 -0
- package/dist/runtime/udsConfig.cjs +4 -2
- package/dist/runtime/udsConfig.d.cts +2 -0
- package/dist/runtime/udsConfig.d.ts +2 -0
- package/dist/runtime/udsConfig.js +4 -2
- package/dist/styles/styler.d.cts +35 -21
- package/dist/styles/styler.d.ts +35 -21
- package/dist/styles/variants.d.cts +42 -0
- package/dist/styles/variants.d.ts +42 -0
- package/dist/tailwind/dist/automated-config/dist/generated/autoVariants.cjs +14 -0
- package/dist/tailwind/dist/automated-config/dist/generated/autoVariants.js +14 -0
- package/dist/tailwind/dist/automated-config/dist/generated/autoVariants.js.map +1 -1
- package/dist/tailwind/dist/automated-config/dist/generated/generatedConfigs.cjs +2796 -1
- package/dist/tailwind/dist/automated-config/dist/generated/generatedConfigs.js +2796 -2
- package/dist/tailwind/dist/automated-config/dist/generated/generatedConfigs.js.map +1 -1
- package/dist/tailwind/dist/automated-config/dist/properties.cjs +15 -1
- package/dist/tailwind/dist/automated-config/dist/properties.js +15 -1
- package/dist/tailwind/dist/automated-config/dist/properties.js.map +1 -1
- package/dist/tailwind/dist/commands/css.cjs +1 -0
- package/dist/tailwind/dist/commands/css.d.cts.map +1 -1
- package/dist/tailwind/dist/commands/css.d.ts.map +1 -1
- package/dist/tailwind/dist/commands/css.helpers.cjs +8 -1
- package/dist/tailwind/dist/commands/css.helpers.js +8 -1
- package/dist/tailwind/dist/commands/css.helpers.js.map +1 -1
- package/dist/tailwind/dist/commands/css.js +1 -0
- package/dist/tailwind/dist/commands/css.js.map +1 -1
- package/dist/tailwind/dist/config/dist/index.cjs +129 -4
- package/dist/tailwind/dist/config/dist/index.js +129 -4
- package/dist/tailwind/dist/config/dist/index.js.map +1 -1
- package/dist/tailwind/dist/css/generate.cjs +7 -4
- package/dist/tailwind/dist/css/generate.d.cts.map +1 -1
- package/dist/tailwind/dist/css/generate.d.ts.map +1 -1
- package/dist/tailwind/dist/css/generate.js +7 -4
- package/dist/tailwind/dist/css/generate.js.map +1 -1
- package/dist/tailwind/dist/css/nodeUtils.cjs +19 -8
- package/dist/tailwind/dist/css/nodeUtils.js +19 -8
- package/dist/tailwind/dist/css/nodeUtils.js.map +1 -1
- package/dist/tailwind/dist/css/perf.cjs +92 -0
- package/dist/tailwind/dist/css/perf.js +89 -0
- package/dist/tailwind/dist/css/perf.js.map +1 -0
- package/dist/tailwind/dist/css/purgeWorker.cjs +47 -0
- package/dist/tailwind/dist/css/purgeWorker.d.cts +2 -0
- package/dist/tailwind/dist/css/purgeWorker.d.ts +2 -0
- package/dist/tailwind/dist/css/purgeWorker.js +48 -0
- package/dist/tailwind/dist/css/purgeWorker.js.map +1 -0
- package/dist/tailwind/dist/css/runner.cjs +158 -145
- package/dist/tailwind/dist/css/runner.js +158 -145
- package/dist/tailwind/dist/css/runner.js.map +1 -1
- package/dist/tailwind/dist/css/utils.cjs +8 -0
- package/dist/tailwind/dist/css/utils.js +8 -0
- package/dist/tailwind/dist/css/utils.js.map +1 -1
- package/dist/tailwind/dist/css/workerPool.cjs +89 -0
- package/dist/tailwind/dist/css/workerPool.js +90 -0
- package/dist/tailwind/dist/css/workerPool.js.map +1 -0
- package/dist/tailwind/dist/purger/optimized/ast/expressions.cjs +95 -15
- package/dist/tailwind/dist/purger/optimized/ast/expressions.js +95 -15
- package/dist/tailwind/dist/purger/optimized/ast/expressions.js.map +1 -1
- package/dist/tailwind/dist/purger/optimized/purgeFromCode.cjs +38 -14
- package/dist/tailwind/dist/purger/optimized/purgeFromCode.d.cts.map +1 -1
- package/dist/tailwind/dist/purger/optimized/purgeFromCode.d.ts.map +1 -1
- package/dist/tailwind/dist/purger/optimized/purgeFromCode.js +39 -15
- package/dist/tailwind/dist/purger/optimized/purgeFromCode.js.map +1 -1
- package/dist/tailwind/dist/purger/optimized/types.d.cts +10 -0
- package/dist/tailwind/dist/purger/optimized/types.d.cts.map +1 -1
- package/dist/tailwind/dist/purger/optimized/types.d.ts +10 -0
- package/dist/tailwind/dist/purger/optimized/types.d.ts.map +1 -1
- package/dist/tailwind/dist/runtimeConfig/hookMetadata.cjs +34 -0
- package/dist/tailwind/dist/runtimeConfig/hookMetadata.js +34 -0
- package/dist/tailwind/dist/runtimeConfig/hookMetadata.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/blurBgFallback.cjs +3 -0
- package/dist/tailwind/dist/tailwind/plugins/blurBgFallback.js +3 -0
- package/dist/tailwind/dist/tailwind/plugins/blurBgFallback.js.map +1 -1
- package/dist/tailwind/dist/tailwind/plugins/components.cjs +1 -0
- package/dist/tailwind/dist/tailwind/plugins/components.js +2 -1
- package/dist/tailwind/dist/tailwind/plugins/components.js.map +1 -1
- package/dist/tailwind/dist/types/dist/index.d.cts.map +1 -1
- package/dist/tailwind/dist/types/dist/index.d.ts.map +1 -1
- package/dist/tokens/automation/configs/index.cjs +1 -0
- package/dist/tokens/automation/configs/index.d.cts +2 -2
- package/dist/tokens/automation/configs/index.d.ts +2 -2
- package/dist/tokens/automation/configs/index.js +2 -2
- package/dist/tokens/automation/index.cjs +1 -0
- package/dist/tokens/automation/index.d.cts +2 -2
- package/dist/tokens/automation/index.d.ts +2 -2
- package/dist/tokens/automation/index.js +2 -2
- package/dist/tokens/index.cjs +1 -0
- package/dist/tokens/index.d.cts +3 -3
- package/dist/tokens/index.d.ts +3 -3
- package/dist/tokens/index.js +2 -2
- package/dist/tokens/types.d.cts +2 -2
- package/dist/tokens/types.d.ts +2 -2
- package/dist/types/dist/index.d.cts +68 -2
- package/dist/types/dist/index.d.ts +68 -2
- package/dist/uds/generated/componentData.cjs +1024 -833
- package/dist/uds/generated/componentData.js +995 -840
- package/dist/uds/generated/tailwindPurge.cjs +137 -96
- package/dist/uds/generated/tailwindPurge.js +137 -96
- package/dist/utils/exposeAriakitScrollbarWidth.cjs +17 -0
- package/dist/utils/exposeAriakitScrollbarWidth.d.cts +13 -0
- package/dist/utils/exposeAriakitScrollbarWidth.d.ts +13 -0
- package/dist/utils/exposeAriakitScrollbarWidth.js +16 -0
- package/generated/componentData.json +1761 -1550
- package/generated/tailwindPurge.ts +4 -4
- package/package.json +1 -1
- package/dist/components/experimental/client/Modal.cjs +0 -60
- package/dist/components/experimental/client/Modal.d.cts +0 -27
- package/dist/components/experimental/client/Modal.d.ts +0 -28
- package/dist/components/experimental/client/Modal.js +0 -55
- package/dist/tailwind/dist/purger/optimized/ast/jsx.cjs +0 -16
- package/dist/tailwind/dist/purger/optimized/ast/jsx.js +0 -17
- package/dist/tailwind/dist/purger/optimized/ast/jsx.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purgeFromCode.js","names":[],"sources":["../../../src/purger/optimized/purgeFromCode.ts"],"sourcesContent":["import type { ImportDeclaration, ObjectLiteralExpression } from 'ts-morph';\nimport { Node, Project, SyntaxKind, ts } from 'ts-morph';\n\nimport { extractStringLiterals, findJsxReferences } from './ast';\nimport type { JsxElementWithAttributes, PurgeStats } from './types';\n\ninterface PurgeFromCodeResult {\n safelist: string[];\n imports: string[];\n components: string[];\n stats: PurgeStats;\n}\n\ntype RuntimeConfigValues = Record<string, string | number | boolean>;\n\n/**\n * Serialized component info from pre-generated data\n */\ninterface SerializedComponentInfo {\n name: string;\n defaultProps: Record<string, string>;\n getStylesLiterals: Record<string, string>;\n cxLiterals?: string[];\n internalComponents: string[];\n internalComponentProps: Record<string, Record<string, string[]>>;\n propToVariantKeys: Record<string, string[]>;\n runtimeConfigDefaultProps?: Record<string, string>;\n runtimeConfigGetStyles?: Record<string, string[]>;\n runtimeConfigInternalComponentProps?: Record<string, Record<string, string[]>>;\n}\n\n/**\n * Get component info with all its dependencies (using pre-generated data)\n */\nconst getComponentWithDeps = (componentName: string): SerializedComponentInfo[] => {\n const visited = new Set<string>();\n const result: SerializedComponentInfo[] = [];\n\n const collect = (name: string): void => {\n if (visited.has(name)) {\n return;\n }\n visited.add(name);\n\n const info = resolveComponentInfo(name);\n if (!info) {\n return;\n }\n\n result.push(info);\n\n // Recursively collect internal component dependencies\n info.internalComponents.forEach((depName) => collect(depName));\n };\n\n collect(componentName);\n return result;\n};\n\n/**\n * Optimized purge from code string.\n *\n * This is a standalone implementation that:\n * - Analyzes UDS component source files to get accurate default props\n * - Includes defaults from internally used components\n * - Only depends on variants from src/styles/variants.ts (source of truth)\n * - Uses ts-morph for AST analysis\n *\n * Key behaviors:\n * - Includes classes for component default props (analyzed from source)\n * - Includes defaults for internal component dependencies\n * - Includes classes for explicitly used prop values\n * - Resolves ternary/logical expressions to extract all possible values\n * - Traces spreads to const objects in the same file\n * - Does NOT fall back to type properties for unresolved spreads\n */\n/**\n * Variant defaults per component from consumer's config\n * e.g., { Button: { size: 'md', variant: 'primary' }, Avatar: { size: 'md' } }\n */\ntype VariantDefaults = Record<string, Record<string, string>>;\n\ninterface PurgeFromCodeOptions {\n colorModes?: ('dark' | 'light')[];\n /** Variant defaults from consumer's config - used to include default CSS when prop not specified */\n variantDefaults?: VariantDefaults;\n runtimeConfigValues?: RuntimeConfigValues;\n variants: Record<string, Record<string, string>>;\n autoVariants: Record<string, Record<string, string>>;\n componentData: Record<string, SerializedComponentInfo>;\n includeAllClassNamePrimitives?: boolean;\n filePath?: string;\n}\n\n/**\n * Auto-variants lookup (loaded at module init)\n */\nlet autoVariantsCache = null as unknown as Record<string, Record<string, string>>;\n\n/**\n * Pre-generated component data (loaded at module init)\n */\nlet componentCache = null as unknown as Record<string, SerializedComponentInfo>;\n\n/**\n * Map of normalized component name -> actual component cache key\n * Useful when internal components are imported without namespace separators\n * (e.g., MenuItemBase vs Menu.ItemBase).\n */\nlet componentNameLookup: Record<string, string> | null = null;\n\nconst buildComponentNameLookup = (\n data: Record<string, SerializedComponentInfo>,\n): Record<string, string> => {\n const lookup: Record<string, string> = {};\n\n Object.keys(data).forEach((key) => {\n const normalized = normalizeComponentName(key);\n // Keep the first match to avoid arbitrary overwrites on collisions\n if (!lookup[normalized]) {\n lookup[normalized] = key;\n }\n });\n\n return lookup;\n};\n\nconst resolveComponentInfo = (name: string): SerializedComponentInfo | undefined => {\n if (componentCache && componentCache[name]) {\n return componentCache[name];\n }\n\n const normalized = normalizeComponentName(name);\n const mappedName = componentNameLookup?.[normalized];\n if (mappedName && componentCache) {\n return componentCache[mappedName];\n }\n\n return undefined;\n};\n\nconst getModuleSpecifierValue = (importDecl: ImportDeclaration): string => {\n return (\n importDecl.getModuleSpecifierValue() ??\n importDecl\n .getModuleSpecifier()\n .getText()\n .replace(/^['\"]|['\"]$/g, '')\n );\n};\n\nconst isTypeOnlyNamedImport = (importDecl: ImportDeclaration, importName: string): boolean => {\n if (importDecl.isTypeOnly()) {\n return true;\n }\n\n return (\n importDecl\n .getNamedImports()\n .find((namedImport) => namedImport.getName() === importName)\n ?.isTypeOnly() ?? false\n );\n};\n\nconst isUdsComponentModule = (moduleSpecifier: string): boolean => {\n const cleaned = moduleSpecifier.replace(/^['\"]|['\"]$/g, '');\n return cleaned === '@yahoo/uds' || cleaned.startsWith('@yahoo/uds/');\n};\n\n/**\n * Normalize component name to match autoVariants keys (lower camel, no punctuation).\n */\nconst normalizeComponentName = (name: string): string => {\n const cleaned = name.replace(/\\W/g, '');\n return cleaned.charAt(0).toLowerCase() + cleaned.slice(1);\n};\n\n/**\n * Fallback: infer prop -> variant key mapping from autoVariants when the\n * generated component data misses it (e.g., helpers like buildAvatarRootClasses).\n */\nconst getAutoVariantKeysForProp = (componentName: string, propName: string): string[] => {\n if (!autoVariantsCache) {\n return [];\n }\n\n const segments = componentName.match(/[A-Z][a-z0-9]*/g) ?? [];\n const candidates = new Set<string>([normalizeComponentName(componentName)]);\n\n // Add progressively shorter prefixes (e.g., AvatarImage -> avatar, avatarimage)\n if (segments.length > 0) {\n Array.from({ length: segments.length }, (_, index) => index + 1).forEach((i) => {\n const partial = segments.slice(0, i).join('');\n candidates.add(normalizeComponentName(partial));\n });\n }\n\n const propLower = propName.toLowerCase();\n\n return Object.keys(autoVariantsCache).filter((key) => {\n const keyLower = key.toLowerCase();\n return Array.from(candidates).some(\n (candidate) => keyLower.startsWith(candidate) && keyLower.includes(propLower),\n );\n });\n};\n\nconst getVariantKeysForProp = (\n componentInfo: SerializedComponentInfo,\n propName: string,\n): string[] => {\n const keys = new Set(componentInfo.propToVariantKeys?.[propName] ?? []);\n\n getAutoVariantKeysForProp(componentInfo.name, propName).forEach((inferred) => keys.add(inferred));\n\n return [...keys];\n};\n\nconst addVariantGroupClasses = (\n variantGroup: Record<string, string> | undefined,\n safelist: string[],\n): void => {\n if (!variantGroup) {\n return;\n }\n\n Object.values(variantGroup).forEach((cls) => {\n safelist.push(cls.replaceAll('\\\\', ''));\n });\n};\n\nconst getRuntimeDefaultPropValues = (\n componentInfo: SerializedComponentInfo,\n propName: string,\n runtimeConfigValues?: RuntimeConfigValues,\n): string[] => {\n const selector = componentInfo.runtimeConfigDefaultProps?.[propName];\n if (!selector || !runtimeConfigValues) {\n return [];\n }\n\n const value = runtimeConfigValues[selector];\n return value === undefined ? [] : [String(value)];\n};\n\nconst getPropCandidateValues = (\n componentInfo: SerializedComponentInfo,\n propName: string,\n userProps: Map<string, Set<string>>,\n options: PurgeFromCodeOptions,\n): string[] => {\n const explicitValues = userProps.get(propName);\n if (explicitValues && explicitValues.size > 0) {\n return [...explicitValues];\n }\n\n const configuredDefault = options.variantDefaults?.[componentInfo.name]?.[propName];\n if (configuredDefault) {\n return [configuredDefault];\n }\n\n if (componentInfo.defaultProps[propName]) {\n return [componentInfo.defaultProps[propName]];\n }\n\n return getRuntimeDefaultPropValues(componentInfo, propName, options.runtimeConfigValues);\n};\n\nconst resolveRuntimeSelectorValues = (\n selectorTemplate: string,\n componentInfo: SerializedComponentInfo,\n userProps: Map<string, Set<string>>,\n options: PurgeFromCodeOptions,\n): string[] => {\n const runtimeConfigValues = options.runtimeConfigValues;\n if (!runtimeConfigValues) {\n return [];\n }\n\n const placeholders = [...selectorTemplate.matchAll(/\\$\\{(\\w+)\\}/g)].map((match) => match[1]);\n const selectors = placeholders.reduce<string[]>(\n (acc, propName) => {\n const propValues = getPropCandidateValues(componentInfo, propName, userProps, options);\n if (propValues.length === 0) {\n return [];\n }\n\n return acc.flatMap((selector) =>\n propValues.map((value) => selector.replaceAll('$' + '{' + propName + '}', value)),\n );\n },\n [selectorTemplate],\n );\n\n return selectors.flatMap((selector) => {\n const value = runtimeConfigValues[selector];\n return value === undefined ? [] : [String(value)];\n });\n};\n\nconst extractClassNamePrimitives = (\n sourceFile: ReturnType<Project['createSourceFile']>,\n): string[] => {\n const classes: string[] = [];\n\n // JSX className attributes\n sourceFile.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach((attr) => {\n if (attr.getNameNode().getText() !== 'className') {\n return;\n }\n\n const initializer = attr.getInitializer();\n if (!initializer) {\n return;\n }\n\n const values: string[] = [];\n\n if (Node.isStringLiteral(initializer)) {\n values.push(initializer.getLiteralText());\n } else if (Node.isJsxExpression(initializer)) {\n const expr = initializer.getExpression();\n if (expr) {\n values.push(...extractStringLiterals(expr));\n }\n }\n\n values.forEach((raw) => {\n classes.push(...raw.split(/\\s+/).filter(Boolean));\n });\n });\n\n // Plain object property assignments like const props = { className: '...' }\n sourceFile.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach((prop) => {\n if (prop.getName() !== 'className') {\n return;\n }\n\n const initializer = prop.getInitializer();\n if (!initializer) {\n return;\n }\n\n const rawValues = extractStringLiterals(initializer);\n rawValues.forEach((raw) => {\n classes.push(...raw.split(/\\s+/).filter(Boolean));\n });\n });\n\n return classes;\n};\n\nconst purgeFromCodeOptimized = async (\n code: string,\n options: PurgeFromCodeOptions,\n): Promise<PurgeFromCodeResult> => {\n const { variants, autoVariants, componentData } = options;\n\n if (!autoVariantsCache) {\n autoVariantsCache = autoVariants;\n }\n\n if (!componentCache) {\n componentCache = componentData;\n componentNameLookup = buildComponentNameLookup(componentData);\n }\n\n const startTime = performance.now();\n\n const project = new Project({ useInMemoryFileSystem: true });\n const sourceFile = project.createSourceFile(options.filePath ?? 'input.tsx', code, {\n overwrite: true,\n });\n\n const stats: PurgeStats = {\n filesScanned: 1,\n timeMs: 0,\n classesGenerated: 0,\n spreadsTraced: 0,\n expressionsResolved: 0,\n };\n\n // Parse UDS imports\n const imports: string[] = [];\n sourceFile.getImportDeclarations().forEach((importDecl) => {\n const moduleSpec = getModuleSpecifierValue(importDecl);\n if (isUdsComponentModule(moduleSpec)) {\n importDecl.getNamedImports().forEach((namedImport) => {\n if (!namedImport.isTypeOnly() && !importDecl.isTypeOnly()) {\n imports.push(namedImport.getName());\n }\n });\n }\n });\n\n // Track all resolved prop values per component\n const componentProps = new Map<string, Map<string, Set<string>>>();\n const componentUnresolvedSpreadProps = new Map<string, Set<string>>();\n const referencedComponents = new Set<string>();\n\n // Extract props from getStyles() calls in user code\n const getStylesProps = extractGetStylesCalls(sourceFile, stats, variants);\n\n // Find all JSX elements that use UDS components\n imports.forEach((imp) => {\n const references = findComponentReferences(sourceFile, imp);\n\n references.forEach((reference) => {\n const tagName = reference.getTagNameNode().getText();\n const componentName = tagName || imp;\n\n referencedComponents.add(componentName);\n\n const propsMap = componentProps.get(componentName) ?? new Map<string, Set<string>>();\n const unresolvedSpreadProps = componentUnresolvedSpreadProps.get(componentName) ?? new Set();\n const props = extractPropsFromReference(reference, stats, sourceFile);\n\n props.forEach(({ propName, values, fromSpread }) => {\n if (values.length > 0) {\n const existing = propsMap.get(propName) ?? new Set();\n values.forEach((val) => existing.add(val));\n propsMap.set(propName, existing);\n return;\n }\n\n if (fromSpread) {\n unresolvedSpreadProps.add(propName);\n }\n });\n\n componentProps.set(componentName, propsMap);\n componentUnresolvedSpreadProps.set(componentName, unresolvedSpreadProps);\n });\n\n if (!componentProps.has(imp)) {\n componentProps.set(imp, new Map());\n }\n\n if (!componentUnresolvedSpreadProps.has(imp)) {\n componentUnresolvedSpreadProps.set(imp, new Set());\n }\n });\n\n // Collect all components (including dependencies)\n const allComponents: SerializedComponentInfo[] = [];\n const seenComponents = new Set<string>();\n\n const componentsToProcess = new Set<string>([...imports, ...referencedComponents]);\n\n componentsToProcess.forEach((componentName) => {\n const componentsWithDeps = getComponentWithDeps(componentName);\n componentsWithDeps.forEach((comp) => {\n if (!seenComponents.has(comp.name)) {\n seenComponents.add(comp.name);\n allComponents.push(comp);\n }\n });\n });\n\n // Generate safelist\n const safelist: string[] = [];\n\n // Add classes from getStyles() calls in user code\n [...getStylesProps.entries()].forEach(([propName, values]) => {\n const variantGroup = variants[propName as keyof typeof variants];\n if (variantGroup) {\n values.forEach((value) => {\n const cls = (variantGroup as Record<string, string>)[value];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n });\n }\n });\n\n // Add defaults from all components (including internal dependencies)\n allComponents.forEach((componentInfo) => {\n const userProps = componentProps.get(componentInfo.name) ?? new Map();\n const unresolvedSpreadProps =\n componentUnresolvedSpreadProps.get(componentInfo.name) ?? new Set();\n\n // Add default classes (only for props not explicitly set by user)\n Object.entries(componentInfo.defaultProps).forEach(([propName, propValue]) => {\n // Skip if user set this prop explicitly\n if (userProps.has(propName)) {\n return;\n }\n\n // Try direct lookup first\n const variantGroup = variants[propName as keyof typeof variants];\n if (variantGroup) {\n const cls = (variantGroup as Record<string, string>)[propValue];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n }\n\n // Also check propToVariantKeys mapping (e.g., Text's variant -> fontFamily, fontSize, etc.)\n const variantKeys = getVariantKeysForProp(componentInfo, propName);\n if (variantKeys.length > 0) {\n variantKeys.forEach((variantKey) => {\n const mappedVariantGroup =\n variants[variantKey as keyof typeof variants] ?? autoVariantsCache[variantKey];\n if (mappedVariantGroup) {\n const cls = (mappedVariantGroup as Record<string, string>)[propValue];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n }\n });\n }\n });\n\n // Add hardcoded literals from getStyles() calls in component source\n Object.entries(componentInfo.getStylesLiterals).forEach(([propName, propValue]) => {\n // Strip indexed suffix (e.g., \"variantKey:1\" -> \"variantKey\")\n // This handles ternary expressions that generate multiple values per key\n const basePropName = propName.replace(/:\\d+$/, '');\n const variantGroup = variants[basePropName as keyof typeof variants];\n if (variantGroup) {\n const cls = (variantGroup as Record<string, string>)[propValue];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n }\n });\n\n Object.entries(componentInfo.runtimeConfigGetStyles ?? {}).forEach(([propName, selectors]) => {\n const variantGroup =\n variants[propName as keyof typeof variants] ?? autoVariantsCache[propName];\n if (!variantGroup) {\n return;\n }\n\n selectors.forEach((selector) => {\n resolveRuntimeSelectorValues(selector, componentInfo, userProps, options).forEach(\n (value) => {\n const cls = (variantGroup as Record<string, string>)[value];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n },\n );\n });\n });\n\n // Add raw Tailwind classes from cx() calls in component source\n if (componentInfo.cxLiterals) {\n componentInfo.cxLiterals.forEach((cls) => safelist.push(cls));\n }\n\n // Add default-variant classes for props not explicitly set\n // The component uses \"uds-button-size-default-root\" at runtime when no size prop is specified\n // The CSS generator creates rules like: .uds-button-size-md-root, .uds-button-size-default-root { ... }\n // We need BOTH classes: the default (runtime) and the actual value (triggers CSS generation)\n if (componentInfo.propToVariantKeys) {\n // Get defaults from consumer config if provided\n const componentDefaults = options.variantDefaults?.[componentInfo.name] ?? {};\n\n Object.keys(componentInfo.propToVariantKeys).forEach((propName) => {\n // Skip if user set this prop explicitly\n if (userProps.has(propName)) {\n return;\n }\n\n // Get the default value from consumer's config\n const defaultValues = componentDefaults[propName]\n ? [componentDefaults[propName]]\n : getRuntimeDefaultPropValues(componentInfo, propName, options.runtimeConfigValues);\n const variantKeys = getVariantKeysForProp(componentInfo, propName);\n\n variantKeys.forEach((variantKey) => {\n const variantGroup = autoVariantsCache[variantKey];\n if (variantGroup) {\n // Add the \"default\" class (used by component at runtime)\n if (variantGroup['default']) {\n safelist.push(variantGroup['default']);\n }\n // Add the actual value class (triggers CSS generation with the alias)\n defaultValues.forEach((defaultValue) => {\n if (variantGroup[defaultValue]) {\n safelist.push(variantGroup[defaultValue]);\n }\n });\n }\n });\n });\n }\n\n // Add classes for props passed to internal components with literal values\n Object.entries(componentInfo.internalComponentProps).forEach(\n ([_internalCompName, propsRecord]) => {\n Object.entries(propsRecord).forEach(([propName, propValues]) => {\n if (propName === 'className') {\n propValues.forEach((propValue) => {\n propValue\n .split(/\\s+/)\n .filter(Boolean)\n .forEach((cls) => safelist.push(cls));\n });\n return;\n }\n\n const variantGroup = variants[propName as keyof typeof variants];\n if (variantGroup) {\n propValues.forEach((propValue) => {\n const cls = (variantGroup as Record<string, string>)[propValue];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n });\n }\n });\n },\n );\n\n Object.entries(componentInfo.runtimeConfigInternalComponentProps ?? {}).forEach(\n ([_internalCompName, propsRecord]) => {\n Object.entries(propsRecord).forEach(([propName, selectors]) => {\n const variantGroup = variants[propName as keyof typeof variants];\n if (!variantGroup) {\n return;\n }\n\n selectors.forEach((selector) => {\n resolveRuntimeSelectorValues(selector, componentInfo, userProps, options).forEach(\n (value) => {\n const cls = (variantGroup as Record<string, string>)[value];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n },\n );\n });\n });\n },\n );\n\n // Add classes for explicitly used props\n [...userProps.entries()].forEach(([propName, usedValues]) => {\n if (propName === 'className') {\n [...usedValues].forEach((value) => {\n value\n .split(/\\s+/)\n .filter(Boolean)\n .forEach((cls: string) => safelist.push(cls));\n });\n return;\n }\n\n // First try direct lookup (for Box-style props like backgroundColor)\n const variantGroup = variants[propName as keyof typeof variants];\n if (variantGroup) {\n [...usedValues].forEach((value) => {\n const cls = (variantGroup as Record<string, string>)[value];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n });\n }\n\n // Check if this prop maps to variant keys in this component or its internal components\n // This handles cases like Avatar where size prop mapping is in internal AvatarIcon,\n // and Text where variant -> fontFamily, fontSize, fontWeight, lineHeight, etc.\n const componentsToCheck = [\n componentInfo,\n ...getComponentWithDeps(componentInfo.name).slice(1),\n ];\n componentsToCheck.forEach((comp) => {\n const variantKeys = getVariantKeysForProp(comp, propName);\n if (variantKeys.length > 0) {\n variantKeys.forEach((variantKey) => {\n const mappedVariantGroup =\n variants[variantKey as keyof typeof variants] ?? autoVariantsCache[variantKey];\n if (mappedVariantGroup) {\n [...usedValues].forEach((value) => {\n const cls = (mappedVariantGroup as Record<string, string>)[value];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n });\n }\n });\n }\n });\n });\n\n unresolvedSpreadProps.forEach((propName) => {\n addVariantGroupClasses(\n variants[propName as keyof typeof variants] ?? autoVariantsCache[propName],\n safelist,\n );\n\n const componentsToCheck = [\n componentInfo,\n ...getComponentWithDeps(componentInfo.name).slice(1),\n ];\n componentsToCheck.forEach((comp) => {\n const variantKeys = getVariantKeysForProp(comp, propName);\n variantKeys.forEach((variantKey) => {\n addVariantGroupClasses(\n variants[variantKey as keyof typeof variants] ?? autoVariantsCache[variantKey],\n safelist,\n );\n });\n });\n });\n });\n\n if (options.includeAllClassNamePrimitives) {\n safelist.push(...extractClassNamePrimitives(sourceFile));\n }\n\n // Deduplicate\n const finalSafelist = [...new Set(safelist)];\n\n stats.timeMs = Math.round(performance.now() - startTime);\n stats.classesGenerated = finalSafelist.length;\n\n return {\n safelist: finalSafelist,\n imports,\n components: [...seenComponents],\n stats,\n };\n};\n\n/**\n * Find JSX references for a component in the source file\n */\nconst findComponentReferences = (\n sourceFile: ReturnType<Project['createSourceFile']>,\n componentName: string,\n): JsxElementWithAttributes[] => {\n const references: JsxElementWithAttributes[] = [];\n const seenTags = new Set<string>();\n\n const collectMatchingTags = (localName: string): void => {\n sourceFile\n .getDescendants()\n .filter(\n (node): node is JsxElementWithAttributes =>\n Node.isJsxOpeningElement(node) || Node.isJsxSelfClosingElement(node),\n )\n .forEach((node) => {\n const tagName = node.getTagNameNode().getText();\n if (tagName === localName || tagName.startsWith(`${localName}.`)) {\n const key = `${tagName}:${node.getStart()}`;\n if (!seenTags.has(key)) {\n seenTags.add(key);\n references.push(node);\n }\n }\n });\n };\n\n sourceFile.getImportDeclarations().forEach((importDecl) => {\n const moduleSpec = getModuleSpecifierValue(importDecl);\n if (!isUdsComponentModule(moduleSpec)) {\n return;\n }\n\n importDecl.getNamedImports().forEach((namedImport) => {\n if (\n namedImport.getName() !== componentName ||\n isTypeOnlyNamedImport(importDecl, componentName)\n ) {\n return;\n }\n\n const localName = namedImport.getAliasNode()?.getText() ?? componentName;\n const identifier = namedImport.getFirstDescendantByKindOrThrow(ts.SyntaxKind.Identifier);\n\n findJsxReferences(identifier).forEach((reference) => {\n const key = `${reference.getTagNameNode().getText()}:${reference.getStart()}`;\n if (!seenTags.has(key)) {\n seenTags.add(key);\n references.push(reference);\n }\n });\n\n collectMatchingTags(localName);\n });\n });\n\n return references;\n};\n\n/**\n * Extract props from a JSX reference.\n */\nconst extractPropsFromReference = (\n reference: JsxElementWithAttributes,\n stats: PurgeStats,\n sourceFile: ReturnType<Project['createSourceFile']>,\n): Array<{ propName: string; values: string[]; fromSpread: boolean }> => {\n const props: Array<{ propName: string; values: string[]; fromSpread: boolean }> = [];\n const attributes = reference.getAttributes();\n\n attributes.forEach((attr) => {\n if (attr.asKind(SyntaxKind.JsxAttribute)) {\n const jsxAttr = attr.asKindOrThrow(SyntaxKind.JsxAttribute);\n const propName = jsxAttr.getNameNode().getText();\n const values: string[] = [];\n\n const initializer = jsxAttr.getInitializer();\n\n // Direct string literal: prop=\"value\"\n if (initializer && Node.isStringLiteral(initializer)) {\n values.push(initializer.getLiteralText());\n stats.expressionsResolved++;\n } else if (initializer && initializer.asKind(SyntaxKind.JsxExpression)) {\n // JSX expression: prop={expression}\n // Use extractStringLiterals to handle ternaries, nullish, OR, etc.\n const jsxExpr = initializer.asKindOrThrow(SyntaxKind.JsxExpression);\n const expression = jsxExpr.getExpression();\n if (expression) {\n const resolved = extractStringLiterals(expression);\n values.push(...resolved);\n if (resolved.length > 0) {\n stats.expressionsResolved++;\n }\n }\n }\n\n props.push({ propName, values, fromSpread: false });\n }\n\n if (attr.asKind(SyntaxKind.JsxSpreadAttribute)) {\n stats.spreadsTraced++;\n\n const spreadAttr = attr.asKindOrThrow(SyntaxKind.JsxSpreadAttribute);\n const expression = spreadAttr.getExpression();\n const spreadName = expression.getText();\n\n const resolvedSpreadProps = traceSpreadInFile(spreadName, sourceFile);\n\n resolvedSpreadProps.forEach(([propName, values]) => {\n props.push({ propName, values, fromSpread: true });\n });\n }\n });\n\n return props;\n};\n\n/**\n * Trace spread props to their source within the same file.\n */\nconst traceSpreadInFile = (\n spreadName: string,\n sourceFile: ReturnType<Project['createSourceFile']>,\n): Array<[string, string[]]> => {\n const props = new Map<string, Set<string>>();\n\n const varDecl = sourceFile\n .getDescendantsOfKind(SyntaxKind.VariableDeclaration)\n .find((declaration) => declaration.getName() === spreadName);\n if (!varDecl) {\n return [];\n }\n\n const initializer = varDecl.getInitializer();\n if (!initializer) {\n return [];\n }\n\n getSpreadObjectLiteralCandidates(initializer).forEach((objLiteral) => {\n objLiteral.getProperties().forEach((prop) => {\n if (!prop.asKind(SyntaxKind.PropertyAssignment)) {\n return;\n }\n\n const propAssign = prop.asKindOrThrow(SyntaxKind.PropertyAssignment);\n const propName = propAssign.getName();\n const propInit = propAssign.getInitializer();\n const values = propInit ? extractStringLiterals(propInit) : [];\n const existingValues = props.get(propName) ?? new Set<string>();\n\n values.forEach((value) => existingValues.add(value));\n props.set(propName, existingValues);\n });\n });\n\n return [...props.entries()].map(([propName, values]) => [propName, [...values]]);\n};\n\nconst getSpreadObjectLiteralCandidates = (node: Node): ObjectLiteralExpression[] => {\n if (Node.isObjectLiteralExpression(node)) {\n return [node];\n }\n\n if (Node.isParenthesizedExpression(node)) {\n return getSpreadObjectLiteralCandidates(node.getExpression());\n }\n\n if (Node.isAsExpression(node) || Node.isTypeAssertion(node) || Node.isSatisfiesExpression(node)) {\n return getSpreadObjectLiteralCandidates(node.getExpression());\n }\n\n if (Node.isConditionalExpression(node)) {\n return [\n ...getSpreadObjectLiteralCandidates(node.getWhenTrue()),\n ...getSpreadObjectLiteralCandidates(node.getWhenFalse()),\n ];\n }\n\n return [];\n};\n\n/**\n * Extract props from getStyles() calls in user code.\n * This handles cases like:\n * const styles = getStyles({ backgroundColor: 'brand', spacing: '4' });\n */\nconst extractGetStylesCalls = (\n sourceFile: ReturnType<Project['createSourceFile']>,\n stats: PurgeStats,\n\n variants: Record<string, Record<string, string>>,\n): Map<string, Set<string>> => {\n const props = new Map<string, Set<string>>();\n\n const VALID_VARIANTS = new Set(Object.keys(variants));\n\n // Find all getStyles() call expressions\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);\n\n callExpressions.forEach((call) => {\n const expression = call.getExpression();\n if (expression.getText() !== 'getStyles') {\n return;\n }\n\n const args = call.getArguments();\n if (args.length === 0) {\n return;\n }\n\n const firstArg = args[0];\n if (!firstArg.asKind(SyntaxKind.ObjectLiteralExpression)) {\n return;\n }\n\n const objLiteral = firstArg.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);\n\n objLiteral.getProperties().forEach((prop) => {\n if (prop.asKind(SyntaxKind.PropertyAssignment)) {\n const propAssign = prop.asKindOrThrow(SyntaxKind.PropertyAssignment);\n const propName = propAssign.getName();\n const propInit = propAssign.getInitializer();\n\n if (propInit && VALID_VARIANTS.has(propName)) {\n const values = extractStringLiterals(propInit);\n if (values.length > 0) {\n const existing = props.get(propName) ?? new Set();\n values.forEach((v) => existing.add(v));\n props.set(propName, existing);\n stats.expressionsResolved++;\n }\n }\n } else if (prop.asKind(SyntaxKind.ShorthandPropertyAssignment)) {\n // Handle shorthand like { backgroundColor } where backgroundColor is a variable\n const shorthand = prop.asKindOrThrow(SyntaxKind.ShorthandPropertyAssignment);\n const propName = shorthand.getName();\n\n if (VALID_VARIANTS.has(propName)) {\n // Try to trace the variable\n const nameNode = shorthand.getNameNode();\n const values = extractStringLiterals(nameNode);\n if (values.length > 0) {\n const existing = props.get(propName) ?? new Set();\n values.forEach((v) => existing.add(v));\n props.set(propName, existing);\n stats.expressionsResolved++;\n }\n }\n }\n });\n });\n\n return props;\n};\n\nexport type { PurgeFromCodeOptions, PurgeFromCodeResult, RuntimeConfigValues, VariantDefaults };\nexport { purgeFromCodeOptimized };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"purgeFromCode.js","names":[],"sources":["../../../src/purger/optimized/purgeFromCode.ts"],"sourcesContent":["import type { ImportDeclaration, ObjectLiteralExpression } from 'ts-morph';\nimport { Node, Project, SyntaxKind } from 'ts-morph';\n\nimport { isPerfEnabled } from '../../css/perf';\nimport { extractStringLiterals } from './ast';\nimport type { JsxElementWithAttributes, PurgeStats } from './types';\n\ninterface PurgeFromCodeResult {\n safelist: string[];\n imports: string[];\n components: string[];\n stats: PurgeStats;\n}\n\ntype RuntimeConfigValues = Record<string, string | number | boolean>;\n\n/**\n * Serialized component info from pre-generated data\n */\ninterface SerializedComponentInfo {\n name: string;\n defaultProps: Record<string, string>;\n getStylesLiterals: Record<string, string>;\n cxLiterals?: string[];\n internalComponents: string[];\n internalComponentProps: Record<string, Record<string, string[]>>;\n propToVariantKeys: Record<string, string[]>;\n runtimeConfigDefaultProps?: Record<string, string>;\n runtimeConfigGetStyles?: Record<string, string[]>;\n runtimeConfigInternalComponentProps?: Record<string, Record<string, string[]>>;\n}\n\n/**\n * Get component info with all its dependencies (using pre-generated data)\n */\nconst getComponentWithDeps = (componentName: string): SerializedComponentInfo[] => {\n const visited = new Set<string>();\n const result: SerializedComponentInfo[] = [];\n\n const collect = (name: string): void => {\n if (visited.has(name)) {\n return;\n }\n visited.add(name);\n\n const info = resolveComponentInfo(name);\n if (!info) {\n return;\n }\n\n result.push(info);\n\n // Recursively collect internal component dependencies\n info.internalComponents.forEach((depName) => collect(depName));\n };\n\n collect(componentName);\n return result;\n};\n\n/**\n * Optimized purge from code string.\n *\n * This is a standalone implementation that:\n * - Analyzes UDS component source files to get accurate default props\n * - Includes defaults from internally used components\n * - Only depends on variants from src/styles/variants.ts (source of truth)\n * - Uses ts-morph for AST analysis\n *\n * Key behaviors:\n * - Includes classes for component default props (analyzed from source)\n * - Includes defaults for internal component dependencies\n * - Includes classes for explicitly used prop values\n * - Resolves ternary/logical expressions to extract all possible values\n * - Traces spreads to const objects in the same file\n * - Does NOT fall back to type properties for unresolved spreads\n */\n/**\n * Variant defaults per component from consumer's config\n * e.g., { Button: { size: 'md', variant: 'primary' }, Avatar: { size: 'md' } }\n */\ntype VariantDefaults = Record<string, Record<string, string>>;\n\ninterface PurgeFromCodeOptions {\n colorModes?: ('dark' | 'light')[];\n /** Variant defaults from consumer's config - used to include default CSS when prop not specified */\n variantDefaults?: VariantDefaults;\n runtimeConfigValues?: RuntimeConfigValues;\n variants: Record<string, Record<string, string>>;\n autoVariants: Record<string, Record<string, string>>;\n componentData: Record<string, SerializedComponentInfo>;\n includeAllClassNamePrimitives?: boolean;\n filePath?: string;\n}\n\n/**\n * Auto-variants lookup (loaded at module init)\n */\nlet autoVariantsCache = null as unknown as Record<string, Record<string, string>>;\n\n/**\n * Pre-generated component data (loaded at module init)\n */\nlet componentCache = null as unknown as Record<string, SerializedComponentInfo>;\n\n/**\n * Map of normalized component name -> actual component cache key\n * Useful when internal components are imported without namespace separators\n * (e.g., MenuItemBase vs Menu.ItemBase).\n */\nlet componentNameLookup: Record<string, string> | null = null;\n\nconst buildComponentNameLookup = (\n data: Record<string, SerializedComponentInfo>,\n): Record<string, string> => {\n const lookup: Record<string, string> = {};\n\n Object.keys(data).forEach((key) => {\n const normalized = normalizeComponentName(key);\n // Keep the first match to avoid arbitrary overwrites on collisions\n if (!lookup[normalized]) {\n lookup[normalized] = key;\n }\n });\n\n return lookup;\n};\n\nconst resolveComponentInfo = (name: string): SerializedComponentInfo | undefined => {\n if (componentCache && componentCache[name]) {\n return componentCache[name];\n }\n\n const normalized = normalizeComponentName(name);\n const mappedName = componentNameLookup?.[normalized];\n if (mappedName && componentCache) {\n return componentCache[mappedName];\n }\n\n return undefined;\n};\n\nconst getModuleSpecifierValue = (importDecl: ImportDeclaration): string => {\n return (\n importDecl.getModuleSpecifierValue() ??\n importDecl\n .getModuleSpecifier()\n .getText()\n .replace(/^['\"]|['\"]$/g, '')\n );\n};\n\nconst isTypeOnlyNamedImport = (importDecl: ImportDeclaration, importName: string): boolean => {\n if (importDecl.isTypeOnly()) {\n return true;\n }\n\n return (\n importDecl\n .getNamedImports()\n .find((namedImport) => namedImport.getName() === importName)\n ?.isTypeOnly() ?? false\n );\n};\n\nconst isUdsComponentModule = (moduleSpecifier: string): boolean => {\n const cleaned = moduleSpecifier.replace(/^['\"]|['\"]$/g, '');\n return cleaned === '@yahoo/uds' || cleaned.startsWith('@yahoo/uds/');\n};\n\n/**\n * Normalize component name to match autoVariants keys (lower camel, no punctuation).\n */\nconst normalizeComponentName = (name: string): string => {\n const cleaned = name.replace(/\\W/g, '');\n return cleaned.charAt(0).toLowerCase() + cleaned.slice(1);\n};\n\n/**\n * Fallback: infer prop -> variant key mapping from autoVariants when the\n * generated component data misses it (e.g., helpers like buildAvatarRootClasses).\n */\nconst getAutoVariantKeysForProp = (componentName: string, propName: string): string[] => {\n if (!autoVariantsCache) {\n return [];\n }\n\n const segments = componentName.match(/[A-Z][a-z0-9]*/g) ?? [];\n const candidates = new Set<string>([normalizeComponentName(componentName)]);\n\n // Add progressively shorter prefixes (e.g., AvatarImage -> avatar, avatarimage)\n if (segments.length > 0) {\n Array.from({ length: segments.length }, (_, index) => index + 1).forEach((i) => {\n const partial = segments.slice(0, i).join('');\n candidates.add(normalizeComponentName(partial));\n });\n }\n\n const propLower = propName.toLowerCase();\n\n return Object.keys(autoVariantsCache).filter((key) => {\n const keyLower = key.toLowerCase();\n return Array.from(candidates).some(\n (candidate) => keyLower.startsWith(candidate) && keyLower.includes(propLower),\n );\n });\n};\n\nconst getVariantKeysForProp = (\n componentInfo: SerializedComponentInfo,\n propName: string,\n): string[] => {\n const keys = new Set(componentInfo.propToVariantKeys?.[propName] ?? []);\n\n getAutoVariantKeysForProp(componentInfo.name, propName).forEach((inferred) => keys.add(inferred));\n\n return [...keys];\n};\n\nconst addVariantGroupClasses = (\n variantGroup: Record<string, string> | undefined,\n safelist: string[],\n): void => {\n if (!variantGroup) {\n return;\n }\n\n Object.values(variantGroup).forEach((cls) => {\n safelist.push(cls.replaceAll('\\\\', ''));\n });\n};\n\nconst getRuntimeDefaultPropValues = (\n componentInfo: SerializedComponentInfo,\n propName: string,\n runtimeConfigValues?: RuntimeConfigValues,\n): string[] => {\n const selector = componentInfo.runtimeConfigDefaultProps?.[propName];\n if (!selector || !runtimeConfigValues) {\n return [];\n }\n\n const value = runtimeConfigValues[selector];\n return value === undefined ? [] : [String(value)];\n};\n\nconst getPropCandidateValues = (\n componentInfo: SerializedComponentInfo,\n propName: string,\n userProps: Map<string, Set<string>>,\n options: PurgeFromCodeOptions,\n): string[] => {\n const explicitValues = userProps.get(propName);\n if (explicitValues && explicitValues.size > 0) {\n return [...explicitValues];\n }\n\n const configuredDefault = options.variantDefaults?.[componentInfo.name]?.[propName];\n if (configuredDefault) {\n return [configuredDefault];\n }\n\n if (componentInfo.defaultProps[propName]) {\n return [componentInfo.defaultProps[propName]];\n }\n\n return getRuntimeDefaultPropValues(componentInfo, propName, options.runtimeConfigValues);\n};\n\nconst resolveRuntimeSelectorValues = (\n selectorTemplate: string,\n componentInfo: SerializedComponentInfo,\n userProps: Map<string, Set<string>>,\n options: PurgeFromCodeOptions,\n): string[] => {\n const runtimeConfigValues = options.runtimeConfigValues;\n if (!runtimeConfigValues) {\n return [];\n }\n\n const placeholders = [...selectorTemplate.matchAll(/\\$\\{(\\w+)\\}/g)].map((match) => match[1]);\n const selectors = placeholders.reduce<string[]>(\n (acc, propName) => {\n const propValues = getPropCandidateValues(componentInfo, propName, userProps, options);\n if (propValues.length === 0) {\n return [];\n }\n\n return acc.flatMap((selector) =>\n propValues.map((value) => selector.replaceAll('$' + '{' + propName + '}', value)),\n );\n },\n [selectorTemplate],\n );\n\n return selectors.flatMap((selector) => {\n const value = runtimeConfigValues[selector];\n return value === undefined ? [] : [String(value)];\n });\n};\n\nconst extractClassNamePrimitives = (\n sourceFile: ReturnType<Project['createSourceFile']>,\n): string[] => {\n const classes: string[] = [];\n\n // JSX className attributes\n sourceFile.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach((attr) => {\n if (attr.getNameNode().getText() !== 'className') {\n return;\n }\n\n const initializer = attr.getInitializer();\n if (!initializer) {\n return;\n }\n\n const values: string[] = [];\n\n if (Node.isStringLiteral(initializer)) {\n values.push(initializer.getLiteralText());\n } else if (Node.isJsxExpression(initializer)) {\n const expr = initializer.getExpression();\n if (expr) {\n values.push(...extractStringLiterals(expr));\n }\n }\n\n values.forEach((raw) => {\n classes.push(...raw.split(/\\s+/).filter(Boolean));\n });\n });\n\n // Plain object property assignments like const props = { className: '...' }\n sourceFile.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach((prop) => {\n if (prop.getName() !== 'className') {\n return;\n }\n\n const initializer = prop.getInitializer();\n if (!initializer) {\n return;\n }\n\n const rawValues = extractStringLiterals(initializer);\n rawValues.forEach((raw) => {\n classes.push(...raw.split(/\\s+/).filter(Boolean));\n });\n });\n\n return classes;\n};\n\nconst purgeFromCodeOptimized = async (\n code: string,\n options: PurgeFromCodeOptions,\n): Promise<PurgeFromCodeResult> => {\n const { variants, autoVariants, componentData } = options;\n\n if (!autoVariantsCache) {\n autoVariantsCache = autoVariants;\n }\n\n if (!componentCache) {\n componentCache = componentData;\n componentNameLookup = buildComponentNameLookup(componentData);\n }\n\n const startTime = performance.now();\n const perf = isPerfEnabled();\n\n // Fast pre-check: skip AST analysis entirely for files without UDS imports\n if (!/@yahoo\\/uds\\b/.test(code) && !options.includeAllClassNamePrimitives) {\n return {\n safelist: [],\n imports: [],\n components: [],\n stats: {\n filesScanned: 1,\n timeMs: 0,\n classesGenerated: 0,\n spreadsTraced: 0,\n expressionsResolved: 0,\n },\n };\n }\n\n const projectCreateStart = performance.now();\n const project = new Project({ useInMemoryFileSystem: true });\n const sourceFile = project.createSourceFile(options.filePath ?? 'input.tsx', code, {\n overwrite: true,\n });\n const projectCreateMs = performance.now() - projectCreateStart;\n\n const stats: PurgeStats = {\n filesScanned: 1,\n timeMs: 0,\n classesGenerated: 0,\n spreadsTraced: 0,\n expressionsResolved: 0,\n };\n\n // Parse UDS imports\n const importParseStart = performance.now();\n const imports: string[] = [];\n sourceFile.getImportDeclarations().forEach((importDecl) => {\n const moduleSpec = getModuleSpecifierValue(importDecl);\n if (isUdsComponentModule(moduleSpec)) {\n importDecl.getNamedImports().forEach((namedImport) => {\n if (!namedImport.isTypeOnly() && !importDecl.isTypeOnly()) {\n imports.push(namedImport.getName());\n }\n });\n }\n });\n const importParseMs = performance.now() - importParseStart;\n\n // Track all resolved prop values per component\n const componentProps = new Map<string, Map<string, Set<string>>>();\n const componentUnresolvedSpreadProps = new Map<string, Set<string>>();\n const referencedComponents = new Set<string>();\n\n // Extract props from getStyles() calls in user code\n const getStylesExtractStart = performance.now();\n const getStylesProps = extractGetStylesCalls(sourceFile, stats, variants);\n const getStylesExtractMs = performance.now() - getStylesExtractStart;\n\n // Find all JSX elements that use UDS components\n const jsxAnalysisStart = performance.now();\n\n // Cache JSX elements once for all component lookups (avoids repeated AST traversals)\n const jsxElementsCache = sourceFile\n .getDescendants()\n .filter(\n (node): node is JsxElementWithAttributes =>\n Node.isJsxOpeningElement(node) || Node.isJsxSelfClosingElement(node),\n );\n\n imports.forEach((imp) => {\n const references = findComponentReferences(sourceFile, imp, jsxElementsCache);\n\n references.forEach((reference) => {\n const tagName = reference.getTagNameNode().getText();\n const componentName = tagName || imp;\n\n referencedComponents.add(componentName);\n\n const propsMap = componentProps.get(componentName) ?? new Map<string, Set<string>>();\n const unresolvedSpreadProps = componentUnresolvedSpreadProps.get(componentName) ?? new Set();\n const props = extractPropsFromReference(reference, stats, sourceFile);\n\n props.forEach(({ propName, values, fromSpread }) => {\n if (values.length > 0) {\n const existing = propsMap.get(propName) ?? new Set();\n values.forEach((val) => existing.add(val));\n propsMap.set(propName, existing);\n return;\n }\n\n if (fromSpread) {\n unresolvedSpreadProps.add(propName);\n }\n });\n\n componentProps.set(componentName, propsMap);\n componentUnresolvedSpreadProps.set(componentName, unresolvedSpreadProps);\n });\n\n if (!componentProps.has(imp)) {\n componentProps.set(imp, new Map());\n }\n\n if (!componentUnresolvedSpreadProps.has(imp)) {\n componentUnresolvedSpreadProps.set(imp, new Set());\n }\n });\n\n const jsxAnalysisMs = performance.now() - jsxAnalysisStart;\n\n // Collect all components (including dependencies)\n const safelistGenStart = performance.now();\n const allComponents: SerializedComponentInfo[] = [];\n const seenComponents = new Set<string>();\n\n const componentsToProcess = new Set<string>([...imports, ...referencedComponents]);\n\n componentsToProcess.forEach((componentName) => {\n const componentsWithDeps = getComponentWithDeps(componentName);\n componentsWithDeps.forEach((comp) => {\n if (!seenComponents.has(comp.name)) {\n seenComponents.add(comp.name);\n allComponents.push(comp);\n }\n });\n });\n\n // Generate safelist\n const safelist: string[] = [];\n\n // Add classes from getStyles() calls in user code\n [...getStylesProps.entries()].forEach(([propName, values]) => {\n const variantGroup = variants[propName as keyof typeof variants];\n if (variantGroup) {\n values.forEach((value) => {\n const cls = (variantGroup as Record<string, string>)[value];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n });\n }\n });\n\n // Add defaults from all components (including internal dependencies)\n allComponents.forEach((componentInfo) => {\n const userProps = componentProps.get(componentInfo.name) ?? new Map();\n const unresolvedSpreadProps =\n componentUnresolvedSpreadProps.get(componentInfo.name) ?? new Set();\n\n // Add default classes (only for props not explicitly set by user)\n Object.entries(componentInfo.defaultProps).forEach(([propName, propValue]) => {\n // Skip if user set this prop explicitly\n if (userProps.has(propName)) {\n return;\n }\n\n // Try direct lookup first\n const variantGroup = variants[propName as keyof typeof variants];\n if (variantGroup) {\n const cls = (variantGroup as Record<string, string>)[propValue];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n }\n\n // Also check propToVariantKeys mapping (e.g., Text's variant -> fontFamily, fontSize, etc.)\n const variantKeys = getVariantKeysForProp(componentInfo, propName);\n if (variantKeys.length > 0) {\n variantKeys.forEach((variantKey) => {\n const mappedVariantGroup =\n variants[variantKey as keyof typeof variants] ?? autoVariantsCache[variantKey];\n if (mappedVariantGroup) {\n const cls = (mappedVariantGroup as Record<string, string>)[propValue];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n }\n });\n }\n });\n\n // Add hardcoded literals from getStyles() calls in component source\n Object.entries(componentInfo.getStylesLiterals).forEach(([propName, propValue]) => {\n // Strip indexed suffix (e.g., \"variantKey:1\" -> \"variantKey\")\n // This handles ternary expressions that generate multiple values per key\n const basePropName = propName.replace(/:\\d+$/, '');\n const variantGroup = variants[basePropName as keyof typeof variants];\n if (variantGroup) {\n const cls = (variantGroup as Record<string, string>)[propValue];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n }\n });\n\n Object.entries(componentInfo.runtimeConfigGetStyles ?? {}).forEach(([propName, selectors]) => {\n const variantGroup =\n variants[propName as keyof typeof variants] ?? autoVariantsCache[propName];\n if (!variantGroup) {\n return;\n }\n\n selectors.forEach((selector) => {\n resolveRuntimeSelectorValues(selector, componentInfo, userProps, options).forEach(\n (value) => {\n const cls = (variantGroup as Record<string, string>)[value];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n },\n );\n });\n });\n\n // Add raw Tailwind classes from cx() calls in component source\n if (componentInfo.cxLiterals) {\n componentInfo.cxLiterals.forEach((cls) => safelist.push(cls));\n }\n\n // Add default-variant classes for props not explicitly set\n // The component uses \"uds-button-size-default-root\" at runtime when no size prop is specified\n // The CSS generator creates rules like: .uds-button-size-md-root, .uds-button-size-default-root { ... }\n // We need BOTH classes: the default (runtime) and the actual value (triggers CSS generation)\n if (componentInfo.propToVariantKeys) {\n // Get defaults from consumer config if provided\n const componentDefaults = options.variantDefaults?.[componentInfo.name] ?? {};\n\n Object.keys(componentInfo.propToVariantKeys).forEach((propName) => {\n // Skip if user set this prop explicitly\n if (userProps.has(propName)) {\n return;\n }\n\n // Get the default value from consumer's config\n const defaultValues = componentDefaults[propName]\n ? [componentDefaults[propName]]\n : getRuntimeDefaultPropValues(componentInfo, propName, options.runtimeConfigValues);\n const variantKeys = getVariantKeysForProp(componentInfo, propName);\n\n variantKeys.forEach((variantKey) => {\n const variantGroup = autoVariantsCache[variantKey];\n if (variantGroup) {\n // Add the \"default\" class (used by component at runtime)\n if (variantGroup['default']) {\n safelist.push(variantGroup['default']);\n }\n // Add the actual value class (triggers CSS generation with the alias)\n defaultValues.forEach((defaultValue) => {\n if (variantGroup[defaultValue]) {\n safelist.push(variantGroup[defaultValue]);\n }\n });\n }\n });\n });\n }\n\n // Add classes for props passed to internal components with literal values\n Object.entries(componentInfo.internalComponentProps).forEach(\n ([_internalCompName, propsRecord]) => {\n Object.entries(propsRecord).forEach(([propName, propValues]) => {\n if (propName === 'className') {\n propValues.forEach((propValue) => {\n propValue\n .split(/\\s+/)\n .filter(Boolean)\n .forEach((cls) => safelist.push(cls));\n });\n return;\n }\n\n const variantGroup = variants[propName as keyof typeof variants];\n if (variantGroup) {\n propValues.forEach((propValue) => {\n const cls = (variantGroup as Record<string, string>)[propValue];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n });\n }\n });\n },\n );\n\n Object.entries(componentInfo.runtimeConfigInternalComponentProps ?? {}).forEach(\n ([_internalCompName, propsRecord]) => {\n Object.entries(propsRecord).forEach(([propName, selectors]) => {\n const variantGroup = variants[propName as keyof typeof variants];\n if (!variantGroup) {\n return;\n }\n\n selectors.forEach((selector) => {\n resolveRuntimeSelectorValues(selector, componentInfo, userProps, options).forEach(\n (value) => {\n const cls = (variantGroup as Record<string, string>)[value];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n },\n );\n });\n });\n },\n );\n\n // Add classes for explicitly used props\n [...userProps.entries()].forEach(([propName, usedValues]) => {\n if (propName === 'className') {\n [...usedValues].forEach((value) => {\n value\n .split(/\\s+/)\n .filter(Boolean)\n .forEach((cls: string) => safelist.push(cls));\n });\n return;\n }\n\n // First try direct lookup (for Box-style props like backgroundColor)\n const variantGroup = variants[propName as keyof typeof variants];\n if (variantGroup) {\n [...usedValues].forEach((value) => {\n const cls = (variantGroup as Record<string, string>)[value];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n });\n }\n\n // Check if this prop maps to variant keys in this component or its internal components\n // This handles cases like Avatar where size prop mapping is in internal AvatarIcon,\n // and Text where variant -> fontFamily, fontSize, fontWeight, lineHeight, etc.\n const componentsToCheck = [\n componentInfo,\n ...getComponentWithDeps(componentInfo.name).slice(1),\n ];\n componentsToCheck.forEach((comp) => {\n const variantKeys = getVariantKeysForProp(comp, propName);\n if (variantKeys.length > 0) {\n variantKeys.forEach((variantKey) => {\n const mappedVariantGroup =\n variants[variantKey as keyof typeof variants] ?? autoVariantsCache[variantKey];\n if (mappedVariantGroup) {\n [...usedValues].forEach((value) => {\n const cls = (mappedVariantGroup as Record<string, string>)[value];\n if (cls) {\n safelist.push(cls.replaceAll('\\\\', ''));\n }\n });\n }\n });\n }\n });\n });\n\n unresolvedSpreadProps.forEach((propName) => {\n addVariantGroupClasses(\n variants[propName as keyof typeof variants] ?? autoVariantsCache[propName],\n safelist,\n );\n\n const componentsToCheck = [\n componentInfo,\n ...getComponentWithDeps(componentInfo.name).slice(1),\n ];\n componentsToCheck.forEach((comp) => {\n const variantKeys = getVariantKeysForProp(comp, propName);\n variantKeys.forEach((variantKey) => {\n addVariantGroupClasses(\n variants[variantKey as keyof typeof variants] ?? autoVariantsCache[variantKey],\n safelist,\n );\n });\n });\n });\n });\n\n if (options.includeAllClassNamePrimitives) {\n safelist.push(...extractClassNamePrimitives(sourceFile));\n }\n\n // Deduplicate\n const finalSafelist = [...new Set(safelist)];\n\n const safelistGenerationMs = performance.now() - safelistGenStart;\n\n stats.timeMs = Math.round(performance.now() - startTime);\n stats.classesGenerated = finalSafelist.length;\n\n if (perf) {\n stats.projectCreateMs = Math.round(projectCreateMs * 100) / 100;\n stats.importParseMs = Math.round(importParseMs * 100) / 100;\n stats.getStylesExtractMs = Math.round(getStylesExtractMs * 100) / 100;\n stats.jsxAnalysisMs = Math.round(jsxAnalysisMs * 100) / 100;\n stats.safelistGenerationMs = Math.round(safelistGenerationMs * 100) / 100;\n }\n\n return {\n safelist: finalSafelist,\n imports,\n components: [...seenComponents],\n stats,\n };\n};\n\n/**\n * Find JSX references for a component in the source file\n */\nconst findComponentReferences = (\n sourceFile: ReturnType<Project['createSourceFile']>,\n componentName: string,\n jsxElementsCache?: JsxElementWithAttributes[],\n): JsxElementWithAttributes[] => {\n const references: JsxElementWithAttributes[] = [];\n const seenTags = new Set<string>();\n\n // Use cached JSX elements if provided, otherwise compute them\n const allJsxElements =\n jsxElementsCache ??\n (sourceFile\n .getDescendants()\n .filter(\n (node): node is JsxElementWithAttributes =>\n Node.isJsxOpeningElement(node) || Node.isJsxSelfClosingElement(node),\n ) as JsxElementWithAttributes[]);\n\n const collectMatchingTags = (localName: string): void => {\n for (const node of allJsxElements) {\n const tagName = node.getTagNameNode().getText();\n if (tagName === localName || tagName.startsWith(`${localName}.`)) {\n const key = `${tagName}:${node.getStart()}`;\n if (!seenTags.has(key)) {\n seenTags.add(key);\n references.push(node);\n }\n }\n }\n };\n\n sourceFile.getImportDeclarations().forEach((importDecl) => {\n const moduleSpec = getModuleSpecifierValue(importDecl);\n if (!isUdsComponentModule(moduleSpec)) {\n return;\n }\n\n importDecl.getNamedImports().forEach((namedImport) => {\n if (\n namedImport.getName() !== componentName ||\n isTypeOnlyNamedImport(importDecl, componentName)\n ) {\n return;\n }\n\n const localName = namedImport.getAliasNode()?.getText() ?? componentName;\n collectMatchingTags(localName);\n });\n });\n\n return references;\n};\n\n/**\n * Extract props from a JSX reference.\n */\nconst extractPropsFromReference = (\n reference: JsxElementWithAttributes,\n stats: PurgeStats,\n sourceFile: ReturnType<Project['createSourceFile']>,\n): Array<{ propName: string; values: string[]; fromSpread: boolean }> => {\n const props: Array<{ propName: string; values: string[]; fromSpread: boolean }> = [];\n const attributes = reference.getAttributes();\n\n attributes.forEach((attr) => {\n if (attr.asKind(SyntaxKind.JsxAttribute)) {\n const jsxAttr = attr.asKindOrThrow(SyntaxKind.JsxAttribute);\n const propName = jsxAttr.getNameNode().getText();\n const values: string[] = [];\n\n const initializer = jsxAttr.getInitializer();\n\n // Direct string literal: prop=\"value\"\n if (initializer && Node.isStringLiteral(initializer)) {\n values.push(initializer.getLiteralText());\n stats.expressionsResolved++;\n } else if (initializer && initializer.asKind(SyntaxKind.JsxExpression)) {\n // JSX expression: prop={expression}\n // Use extractStringLiterals to handle ternaries, nullish, OR, etc.\n const jsxExpr = initializer.asKindOrThrow(SyntaxKind.JsxExpression);\n const expression = jsxExpr.getExpression();\n if (expression) {\n const resolved = extractStringLiterals(expression);\n values.push(...resolved);\n if (resolved.length > 0) {\n stats.expressionsResolved++;\n }\n }\n }\n\n props.push({ propName, values, fromSpread: false });\n }\n\n if (attr.asKind(SyntaxKind.JsxSpreadAttribute)) {\n stats.spreadsTraced++;\n\n const spreadAttr = attr.asKindOrThrow(SyntaxKind.JsxSpreadAttribute);\n const expression = spreadAttr.getExpression();\n const spreadName = expression.getText();\n\n const resolvedSpreadProps = traceSpreadInFile(spreadName, sourceFile);\n\n resolvedSpreadProps.forEach(([propName, values]) => {\n props.push({ propName, values, fromSpread: true });\n });\n }\n });\n\n return props;\n};\n\n/**\n * Trace spread props to their source within the same file.\n */\nconst traceSpreadInFile = (\n spreadName: string,\n sourceFile: ReturnType<Project['createSourceFile']>,\n): Array<[string, string[]]> => {\n const props = new Map<string, Set<string>>();\n\n const varDecl = sourceFile\n .getDescendantsOfKind(SyntaxKind.VariableDeclaration)\n .find((declaration) => declaration.getName() === spreadName);\n if (!varDecl) {\n return [];\n }\n\n const initializer = varDecl.getInitializer();\n if (!initializer) {\n return [];\n }\n\n getSpreadObjectLiteralCandidates(initializer).forEach((objLiteral) => {\n objLiteral.getProperties().forEach((prop) => {\n if (!prop.asKind(SyntaxKind.PropertyAssignment)) {\n return;\n }\n\n const propAssign = prop.asKindOrThrow(SyntaxKind.PropertyAssignment);\n const propName = propAssign.getName();\n const propInit = propAssign.getInitializer();\n const values = propInit ? extractStringLiterals(propInit) : [];\n const existingValues = props.get(propName) ?? new Set<string>();\n\n values.forEach((value) => existingValues.add(value));\n props.set(propName, existingValues);\n });\n });\n\n return [...props.entries()].map(([propName, values]) => [propName, [...values]]);\n};\n\nconst getSpreadObjectLiteralCandidates = (node: Node): ObjectLiteralExpression[] => {\n if (Node.isObjectLiteralExpression(node)) {\n return [node];\n }\n\n if (Node.isParenthesizedExpression(node)) {\n return getSpreadObjectLiteralCandidates(node.getExpression());\n }\n\n if (Node.isAsExpression(node) || Node.isTypeAssertion(node) || Node.isSatisfiesExpression(node)) {\n return getSpreadObjectLiteralCandidates(node.getExpression());\n }\n\n if (Node.isConditionalExpression(node)) {\n return [\n ...getSpreadObjectLiteralCandidates(node.getWhenTrue()),\n ...getSpreadObjectLiteralCandidates(node.getWhenFalse()),\n ];\n }\n\n return [];\n};\n\n/**\n * Extract props from getStyles() calls in user code.\n * This handles cases like:\n * const styles = getStyles({ backgroundColor: 'brand', spacing: '4' });\n */\nconst extractGetStylesCalls = (\n sourceFile: ReturnType<Project['createSourceFile']>,\n stats: PurgeStats,\n\n variants: Record<string, Record<string, string>>,\n): Map<string, Set<string>> => {\n const props = new Map<string, Set<string>>();\n\n const VALID_VARIANTS = new Set(Object.keys(variants));\n\n // Find all getStyles() call expressions\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);\n\n callExpressions.forEach((call) => {\n const expression = call.getExpression();\n if (expression.getText() !== 'getStyles') {\n return;\n }\n\n const args = call.getArguments();\n if (args.length === 0) {\n return;\n }\n\n const firstArg = args[0];\n if (!firstArg.asKind(SyntaxKind.ObjectLiteralExpression)) {\n return;\n }\n\n const objLiteral = firstArg.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);\n\n objLiteral.getProperties().forEach((prop) => {\n if (prop.asKind(SyntaxKind.PropertyAssignment)) {\n const propAssign = prop.asKindOrThrow(SyntaxKind.PropertyAssignment);\n const propName = propAssign.getName();\n const propInit = propAssign.getInitializer();\n\n if (propInit && VALID_VARIANTS.has(propName)) {\n const values = extractStringLiterals(propInit);\n if (values.length > 0) {\n const existing = props.get(propName) ?? new Set();\n values.forEach((v) => existing.add(v));\n props.set(propName, existing);\n stats.expressionsResolved++;\n }\n }\n } else if (prop.asKind(SyntaxKind.ShorthandPropertyAssignment)) {\n // Handle shorthand like { backgroundColor } where backgroundColor is a variable\n const shorthand = prop.asKindOrThrow(SyntaxKind.ShorthandPropertyAssignment);\n const propName = shorthand.getName();\n\n if (VALID_VARIANTS.has(propName)) {\n // Try to trace the variable\n const nameNode = shorthand.getNameNode();\n const values = extractStringLiterals(nameNode);\n if (values.length > 0) {\n const existing = props.get(propName) ?? new Set();\n values.forEach((v) => existing.add(v));\n props.set(propName, existing);\n stats.expressionsResolved++;\n }\n }\n }\n });\n });\n\n return props;\n};\n\nexport type { PurgeFromCodeOptions, PurgeFromCodeResult, RuntimeConfigValues, VariantDefaults };\nexport { purgeFromCodeOptimized };\n"],"mappings":"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"}
|
|
@@ -16,6 +16,16 @@ interface PurgeStats {
|
|
|
16
16
|
spreadsTraced: number;
|
|
17
17
|
/** Number of expressions resolved */
|
|
18
18
|
expressionsResolved: number;
|
|
19
|
+
/** Time to create ts-morph Project + parse source (ms) */
|
|
20
|
+
projectCreateMs?: number;
|
|
21
|
+
/** Time to parse import declarations (ms) */
|
|
22
|
+
importParseMs?: number;
|
|
23
|
+
/** Time to extract getStyles() calls (ms) */
|
|
24
|
+
getStylesExtractMs?: number;
|
|
25
|
+
/** Time for JSX reference finding + prop extraction (ms) */
|
|
26
|
+
jsxAnalysisMs?: number;
|
|
27
|
+
/** Time to generate safelist from component data (ms) */
|
|
28
|
+
safelistGenerationMs?: number;
|
|
19
29
|
}
|
|
20
30
|
//#endregion
|
|
21
31
|
export { PurgeStats };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/purger/optimized/types.ts"],"mappings":";;;;;;;UAoCiB,UAAA;;EAEf,YAAA;;EAEA,MAAA;;EAEA,gBAAA;;EAEA,aAAA;;EAEA,mBAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/purger/optimized/types.ts"],"mappings":";;;;;;;UAoCiB,UAAA;;EAEf,YAAA;;EAEA,MAAA;;EAEA,gBAAA;;EAEA,aAAA;;EAEA,mBAAA;;EAEA,eAAA;;EAEA,aAAA;;EAEA,kBAAA;;EAEA,aAAA;;EAEA,oBAAA;AAAA"}
|
|
@@ -16,6 +16,16 @@ interface PurgeStats {
|
|
|
16
16
|
spreadsTraced: number;
|
|
17
17
|
/** Number of expressions resolved */
|
|
18
18
|
expressionsResolved: number;
|
|
19
|
+
/** Time to create ts-morph Project + parse source (ms) */
|
|
20
|
+
projectCreateMs?: number;
|
|
21
|
+
/** Time to parse import declarations (ms) */
|
|
22
|
+
importParseMs?: number;
|
|
23
|
+
/** Time to extract getStyles() calls (ms) */
|
|
24
|
+
getStylesExtractMs?: number;
|
|
25
|
+
/** Time for JSX reference finding + prop extraction (ms) */
|
|
26
|
+
jsxAnalysisMs?: number;
|
|
27
|
+
/** Time to generate safelist from component data (ms) */
|
|
28
|
+
safelistGenerationMs?: number;
|
|
19
29
|
}
|
|
20
30
|
//#endregion
|
|
21
31
|
export { PurgeStats };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/purger/optimized/types.ts"],"mappings":";;;;;;;UAoCiB,UAAA;;EAEf,YAAA;;EAEA,MAAA;;EAEA,gBAAA;;EAEA,aAAA;;EAEA,mBAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/purger/optimized/types.ts"],"mappings":";;;;;;;UAoCiB,UAAA;;EAEf,YAAA;;EAEA,MAAA;;EAEA,gBAAA;;EAEA,aAAA;;EAEA,mBAAA;;EAEA,eAAA;;EAEA,aAAA;;EAEA,kBAAA;;EAEA,aAAA;;EAEA,oBAAA;AAAA"}
|
|
@@ -299,6 +299,40 @@ const runtimeHookMetadata = defineRuntimeHookMetadata({
|
|
|
299
299
|
}
|
|
300
300
|
}
|
|
301
301
|
}
|
|
302
|
+
},
|
|
303
|
+
useModalConfig: {
|
|
304
|
+
defaultProps: {
|
|
305
|
+
size: "modal.defaultSize",
|
|
306
|
+
variant: "modal.defaultVariant"
|
|
307
|
+
},
|
|
308
|
+
defaultPropValues: {
|
|
309
|
+
size: "default",
|
|
310
|
+
variant: "default"
|
|
311
|
+
},
|
|
312
|
+
selectorParamValues: { size: ["default"] },
|
|
313
|
+
tokenConfigPath: ["modal", "variables"],
|
|
314
|
+
fields: {
|
|
315
|
+
size: {
|
|
316
|
+
bindingSelector: "modal.defaultSize",
|
|
317
|
+
selectorTemplates: ["modal.defaultSize"]
|
|
318
|
+
},
|
|
319
|
+
variant: {
|
|
320
|
+
bindingSelector: "modal.defaultVariant",
|
|
321
|
+
selectorTemplates: ["modal.defaultVariant"]
|
|
322
|
+
},
|
|
323
|
+
gutter: {
|
|
324
|
+
bindingSelector: "modal.gutter.${size}",
|
|
325
|
+
selectorTemplates: ["modal.gutter.${size}"],
|
|
326
|
+
tokenSource: {
|
|
327
|
+
variableTemplate: "size/${size}/scrim",
|
|
328
|
+
valuePath: [
|
|
329
|
+
"spacing",
|
|
330
|
+
"rest",
|
|
331
|
+
"value"
|
|
332
|
+
]
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
302
336
|
}
|
|
303
337
|
});
|
|
304
338
|
const getNestedValue = (value, path) => {
|
|
@@ -299,6 +299,40 @@ const runtimeHookMetadata = defineRuntimeHookMetadata({
|
|
|
299
299
|
}
|
|
300
300
|
}
|
|
301
301
|
}
|
|
302
|
+
},
|
|
303
|
+
useModalConfig: {
|
|
304
|
+
defaultProps: {
|
|
305
|
+
size: "modal.defaultSize",
|
|
306
|
+
variant: "modal.defaultVariant"
|
|
307
|
+
},
|
|
308
|
+
defaultPropValues: {
|
|
309
|
+
size: "default",
|
|
310
|
+
variant: "default"
|
|
311
|
+
},
|
|
312
|
+
selectorParamValues: { size: ["default"] },
|
|
313
|
+
tokenConfigPath: ["modal", "variables"],
|
|
314
|
+
fields: {
|
|
315
|
+
size: {
|
|
316
|
+
bindingSelector: "modal.defaultSize",
|
|
317
|
+
selectorTemplates: ["modal.defaultSize"]
|
|
318
|
+
},
|
|
319
|
+
variant: {
|
|
320
|
+
bindingSelector: "modal.defaultVariant",
|
|
321
|
+
selectorTemplates: ["modal.defaultVariant"]
|
|
322
|
+
},
|
|
323
|
+
gutter: {
|
|
324
|
+
bindingSelector: "modal.gutter.${size}",
|
|
325
|
+
selectorTemplates: ["modal.gutter.${size}"],
|
|
326
|
+
tokenSource: {
|
|
327
|
+
variableTemplate: "size/${size}/scrim",
|
|
328
|
+
valuePath: [
|
|
329
|
+
"spacing",
|
|
330
|
+
"rest",
|
|
331
|
+
"value"
|
|
332
|
+
]
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
302
336
|
}
|
|
303
337
|
});
|
|
304
338
|
const getNestedValue = (value, path) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hookMetadata.js","names":[],"sources":["../../src/runtimeConfig/hookMetadata.ts"],"sourcesContent":["import type { UniversalTokensConfig } from '@yahoo/uds-config';\n\ninterface RuntimeHookFieldTokenSource {\n variableTemplate: string;\n valuePath: readonly string[];\n transformConfigPath?: readonly string[];\n}\n\ninterface RuntimeHookFieldMetadata {\n bindingSelector: string;\n selectorTemplates: string[];\n staticValue?: string | number | boolean;\n tokenSource?: RuntimeHookFieldTokenSource;\n}\n\ninterface RuntimeHookMetadata {\n defaultProps: Record<string, string>;\n defaultPropSources?: Record<string, readonly string[]>;\n defaultPropValues?: Record<string, string | number | boolean>;\n selectorParamValues?: Record<string, readonly string[]>;\n tokenConfigPath?: readonly string[];\n fields: Record<string, RuntimeHookFieldMetadata>;\n}\n\ntype RuntimeSelectorParams = Record<string, string>;\n\nconst defineRuntimeHookMetadata = <const T extends Record<string, RuntimeHookMetadata>>(\n metadata: T,\n): T => metadata;\n\nconst runtimeHookMetadata = defineRuntimeHookMetadata({\n useBottomSheetConfig: {\n defaultProps: {},\n selectorParamValues: {\n variant: ['default'],\n },\n tokenConfigPath: ['bottomSheet', 'variables'],\n fields: {\n backgroundColor: {\n bindingSelector: 'bottomSheet.backgroundColor',\n selectorTemplates: ['bottomSheet.backgroundColor.${variant}'],\n tokenSource: {\n variableTemplate: 'variant/${variant}/root',\n valuePath: ['backgroundColor', 'rest', 'value'],\n },\n },\n },\n },\n useToastConfig: {\n defaultProps: {\n size: 'toast.defaultSize',\n variant: 'toast.defaultVariant',\n },\n defaultPropSources: {\n size: ['toast', 'defaults', 'size'],\n variant: ['toast', 'defaults', 'variant'],\n },\n selectorParamValues: {\n size: ['default'],\n variant: ['success', 'error', 'info', 'warning', 'loading'],\n },\n tokenConfigPath: ['toast', 'variables'],\n fields: {\n autoClose: {\n bindingSelector: 'toast.autoClose',\n selectorTemplates: ['toast.autoClose'],\n staticValue: 6_000,\n },\n position: {\n bindingSelector: 'toast.position',\n selectorTemplates: ['toast.position'],\n staticValue: 'bottom-center',\n },\n size: {\n bindingSelector: 'toast.defaultSize',\n selectorTemplates: ['toast.defaultSize'],\n },\n variant: {\n bindingSelector: 'toast.defaultVariant',\n selectorTemplates: ['toast.defaultVariant'],\n },\n textVariant: {\n bindingSelector: 'toast.textVariant.${size}',\n selectorTemplates: ['toast.textVariant.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/label',\n valuePath: ['textVariant', 'rest', 'value'],\n },\n },\n textColor: {\n bindingSelector: 'toast.textColor.${variant}',\n selectorTemplates: ['toast.textColor.${variant}'],\n tokenSource: {\n variableTemplate: 'variant/${variant}/root',\n valuePath: ['color', 'rest', 'value'],\n },\n },\n iconSize: {\n bindingSelector: 'toast.iconSize.${size}',\n selectorTemplates: ['toast.iconSize.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/icon',\n valuePath: ['size', 'rest', 'value'],\n },\n },\n buttonSize: {\n bindingSelector: 'toast.buttonSize.${size}',\n selectorTemplates: ['toast.buttonSize.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/actionButton',\n valuePath: ['buttonSize', 'rest', 'value'],\n },\n },\n buttonVariant: {\n bindingSelector: 'toast.buttonVariant.${variant}',\n selectorTemplates: ['toast.buttonVariant.${variant}'],\n tokenSource: {\n variableTemplate: 'variant/${variant}/actionButton',\n valuePath: ['buttonVariant', 'rest', 'value'],\n },\n },\n iconVariant: {\n bindingSelector: 'toast.iconVariant.${variant}',\n selectorTemplates: ['toast.iconVariant.${variant}'],\n tokenSource: {\n variableTemplate: 'variant/${variant}/icon',\n valuePath: ['iconVariant', 'rest', 'value'],\n },\n },\n backgroundColor: {\n bindingSelector: 'toast.backgroundColor',\n selectorTemplates: ['toast.backgroundColor.${variant}'],\n tokenSource: {\n variableTemplate: 'variant/${variant}/root',\n valuePath: ['backgroundColor', 'rest', 'value'],\n },\n },\n },\n },\n useTooltipConfig: {\n defaultProps: {},\n selectorParamValues: {\n size: ['default'],\n },\n tokenConfigPath: ['tooltip', 'variables'],\n fields: {\n animationDuration: {\n bindingSelector: 'tooltip.animationDuration',\n selectorTemplates: ['tooltip.animationDuration'],\n staticValue: 200,\n },\n placement: {\n bindingSelector: 'tooltip.placement',\n selectorTemplates: ['tooltip.placement'],\n staticValue: 'top',\n },\n borderRadius: {\n bindingSelector: 'tooltip.borderRadius',\n selectorTemplates: ['tooltip.borderRadius.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/svg',\n valuePath: ['borderRadius', 'rest', 'value'],\n transformConfigPath: ['scaleMode', 'medium', 'borderRadius'],\n },\n },\n },\n },\n usePopoverConfig: {\n defaultProps: {\n size: 'popover.defaultSize',\n variant: 'popover.defaultVariant',\n },\n defaultPropValues: {\n size: 'default',\n variant: 'default',\n },\n selectorParamValues: {\n size: ['default'],\n },\n tokenConfigPath: ['popover', 'variables'],\n fields: {\n animationDuration: {\n bindingSelector: 'popover.animationDuration',\n selectorTemplates: ['popover.animationDuration'],\n staticValue: 200,\n },\n placement: {\n bindingSelector: 'popover.placement',\n selectorTemplates: ['popover.placement'],\n staticValue: 'top',\n },\n size: {\n bindingSelector: 'popover.defaultSize',\n selectorTemplates: ['popover.defaultSize'],\n },\n variant: {\n bindingSelector: 'popover.defaultVariant',\n selectorTemplates: ['popover.defaultVariant'],\n },\n borderRadius: {\n bindingSelector: 'popover.borderRadius.${size}',\n selectorTemplates: ['popover.borderRadius.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/svgBase',\n valuePath: ['borderRadius', 'rest', 'value'],\n transformConfigPath: ['scaleMode', 'medium', 'borderRadius'],\n },\n },\n gap: {\n bindingSelector: 'popover.gap.${size}',\n selectorTemplates: ['popover.gap.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/contentWrapper',\n valuePath: ['gap', 'rest', 'value'],\n },\n },\n spacingHorizontal: {\n bindingSelector: 'popover.spacingHorizontal.${size}',\n selectorTemplates: ['popover.spacingHorizontal.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/contentWrapper',\n valuePath: ['spacingHorizontal', 'rest', 'value'],\n },\n },\n spacingVertical: {\n bindingSelector: 'popover.spacingVertical.${size}',\n selectorTemplates: ['popover.spacingVertical.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/contentWrapper',\n valuePath: ['spacingVertical', 'rest', 'value'],\n },\n },\n dismissButtonSpacing: {\n bindingSelector: 'popover.dismissButtonSpacing.${size}',\n selectorTemplates: ['popover.dismissButtonSpacing.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/closeIconContainer',\n valuePath: ['spacing', 'rest', 'value'],\n },\n },\n dismissIconSize: {\n bindingSelector: 'popover.dismissIconSize.${size}',\n selectorTemplates: ['popover.dismissIconSize.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/closeIcon',\n valuePath: ['size', 'rest', 'value'],\n transformConfigPath: ['scaleMode', 'medium', 'iconSizes'],\n },\n },\n },\n },\n});\n\ntype RuntimeHookName = keyof typeof runtimeHookMetadata;\ntype RuntimeHookSelectorParamMap<T extends RuntimeHookName> =\n (typeof runtimeHookMetadata)[T] extends { selectorParamValues: infer P } ? NonNullable<P> : never;\ntype RuntimeHookSelectorParamName<T extends RuntimeHookName> = keyof RuntimeHookSelectorParamMap<T>;\ntype RuntimeHookSelectorParamValue<\n T extends RuntimeHookName,\n P extends RuntimeHookSelectorParamName<T>,\n> = RuntimeHookSelectorParamMap<T>[P] extends readonly (infer V)[] ? V : never;\n\nconst getNestedValue = (value: unknown, path: readonly string[]): unknown => {\n return path.reduce<unknown>((currentValue, segment) => {\n if (typeof currentValue !== 'object' || currentValue === null) {\n return undefined;\n }\n\n return (currentValue as Record<string, unknown>)[segment];\n }, value);\n};\n\nconst isRuntimeConfigValue = (value: unknown): value is string | number | boolean => {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\n};\n\nconst getRuntimeHookConfig = (hookName: string): RuntimeHookMetadata | null => {\n return runtimeHookMetadata[hookName as RuntimeHookName] ?? null;\n};\n\nconst getRuntimeConfigHookNames = (): RuntimeHookName[] => {\n return Object.keys(runtimeHookMetadata) as RuntimeHookName[];\n};\n\nconst getRuntimeConfigSelectorTemplates = (): string[] => {\n return [\n ...new Set(\n Object.values(runtimeHookMetadata).flatMap((hookMetadata) => [\n ...Object.values(hookMetadata.defaultProps),\n ...Object.values(hookMetadata.fields).flatMap(({ selectorTemplates }) => selectorTemplates),\n ]),\n ),\n ];\n};\n\nconst getRuntimeSelectorParamValues = <\n T extends RuntimeHookName,\n P extends RuntimeHookSelectorParamName<T>,\n>(\n hookName: T,\n paramName: P,\n): RuntimeHookSelectorParamValue<T, P>[] => {\n const selectorParamValues = runtimeHookMetadata[hookName].selectorParamValues as\n | Record<string, readonly string[]>\n | undefined;\n const values = selectorParamValues?.[paramName as string] ?? [];\n return [...values] as RuntimeHookSelectorParamValue<T, P>[];\n};\n\nconst expandRuntimeSelectorTemplate = (\n template: string,\n params: RuntimeSelectorParams = {},\n): string => {\n return template.replace(/\\$\\{(\\w+)\\}/g, (match, paramName: string) => params[paramName] ?? match);\n};\n\nconst expandRuntimeSelectors = (hookName: string, template: string): string[] => {\n const placeholders = [...template.matchAll(/\\$\\{(\\w+)\\}/g)].map((match) => match[1]);\n\n if (placeholders.length === 0) {\n return [template];\n }\n\n return placeholders\n .reduce<RuntimeSelectorParams[]>(\n (combinations, placeholder) => {\n const values = getRuntimeSelectorParamValues(\n hookName as RuntimeHookName,\n placeholder as RuntimeHookSelectorParamName<RuntimeHookName>,\n ) as string[];\n if (values.length === 0) {\n return combinations;\n }\n\n return combinations.flatMap((combination) =>\n values.map((value) => ({ ...combination, [placeholder]: value })),\n );\n },\n [{} as RuntimeSelectorParams],\n )\n .map((params) => expandRuntimeSelectorTemplate(template, params));\n};\n\nconst getRuntimeConfigSelectors = (): string[] => {\n return [\n ...new Set(\n getRuntimeConfigHookNames().flatMap((hookName) => {\n const hookConfig = getRuntimeHookConfig(hookName);\n if (!hookConfig) {\n return [];\n }\n\n return [\n ...Object.values(hookConfig.defaultProps),\n ...Object.values(hookConfig.fields).flatMap(({ selectorTemplates }) =>\n selectorTemplates.flatMap((template) => expandRuntimeSelectors(hookName, template)),\n ),\n ];\n }),\n ),\n ];\n};\n\nconst getRuntimeDefaultPropSelector = (\n hookName: string,\n propName: string,\n params: RuntimeSelectorParams = {},\n): string | null => {\n const selector = getRuntimeHookConfig(hookName)?.defaultProps[propName];\n return selector ? expandRuntimeSelectorTemplate(selector, params) : null;\n};\n\nconst getRuntimeDefaultPropValue = (\n config: UniversalTokensConfig,\n hookName: string,\n propName: string,\n): string | number | boolean | undefined => {\n const hookConfig = getRuntimeHookConfig(hookName);\n const configuredValue = getNestedValue(config, hookConfig?.defaultPropSources?.[propName] ?? []);\n\n if (isRuntimeConfigValue(configuredValue)) {\n return configuredValue;\n }\n\n const staticValue = hookConfig?.defaultPropValues?.[propName];\n return staticValue === undefined ? undefined : staticValue;\n};\n\nconst getRuntimeFieldSelector = (\n hookName: string,\n fieldName: string,\n params: RuntimeSelectorParams = {},\n): string | null => {\n const selectorTemplate = getRuntimeHookConfig(hookName)?.fields[fieldName]?.selectorTemplates[0];\n return selectorTemplate ? expandRuntimeSelectorTemplate(selectorTemplate, params) : null;\n};\n\nconst getRuntimeFieldStaticValue = (\n hookName: string,\n fieldName: string,\n): string | number | boolean | null => {\n return getRuntimeHookConfig(hookName)?.fields[fieldName]?.staticValue ?? null;\n};\n\nconst getRuntimeFieldTokenValue = (\n config: UniversalTokensConfig,\n hookName: string,\n fieldName: string,\n params: RuntimeSelectorParams = {},\n): string | number | boolean | undefined => {\n const hookConfig = getRuntimeHookConfig(hookName);\n const tokenConfigPath = hookConfig?.tokenConfigPath;\n const tokenSource = hookConfig?.fields[fieldName]?.tokenSource;\n\n if (!tokenConfigPath || !tokenSource) {\n return undefined;\n }\n\n const variableTemplate = expandRuntimeSelectorTemplate(tokenSource.variableTemplate, params);\n const tokenValue = getNestedValue(config, [...tokenConfigPath, variableTemplate]);\n const rawValue = getNestedValue(tokenValue, tokenSource.valuePath);\n\n if (rawValue === undefined) {\n return undefined;\n }\n\n if (!tokenSource.transformConfigPath) {\n return isRuntimeConfigValue(rawValue) ? rawValue : undefined;\n }\n\n const transformedValue = getNestedValue(\n tokenSource.transformConfigPath.reduce<unknown>((currentValue, segment) => {\n if (typeof currentValue !== 'object' || currentValue === null) {\n return undefined;\n }\n\n return (currentValue as Record<string, unknown>)[segment];\n }, config),\n [String(rawValue)],\n );\n\n return isRuntimeConfigValue(transformedValue) ? transformedValue : undefined;\n};\n\nexport {\n expandRuntimeSelectorTemplate,\n getRuntimeConfigHookNames,\n getRuntimeConfigSelectors,\n getRuntimeConfigSelectorTemplates,\n getRuntimeDefaultPropSelector,\n getRuntimeDefaultPropValue,\n getRuntimeFieldSelector,\n getRuntimeFieldStaticValue,\n getRuntimeFieldTokenValue,\n getRuntimeHookConfig,\n getRuntimeSelectorParamValues,\n};\nexport type {\n RuntimeHookFieldMetadata,\n RuntimeHookFieldTokenSource,\n RuntimeHookMetadata,\n RuntimeSelectorParams,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hookMetadata.js","names":[],"sources":["../../src/runtimeConfig/hookMetadata.ts"],"sourcesContent":["import type { UniversalTokensConfig } from '@yahoo/uds-config';\n\ninterface RuntimeHookFieldTokenSource {\n variableTemplate: string;\n valuePath: readonly string[];\n transformConfigPath?: readonly string[];\n}\n\ninterface RuntimeHookFieldMetadata {\n bindingSelector: string;\n selectorTemplates: string[];\n staticValue?: string | number | boolean;\n tokenSource?: RuntimeHookFieldTokenSource;\n}\n\ninterface RuntimeHookMetadata {\n defaultProps: Record<string, string>;\n defaultPropSources?: Record<string, readonly string[]>;\n defaultPropValues?: Record<string, string | number | boolean>;\n selectorParamValues?: Record<string, readonly string[]>;\n tokenConfigPath?: readonly string[];\n fields: Record<string, RuntimeHookFieldMetadata>;\n}\n\ntype RuntimeSelectorParams = Record<string, string>;\n\nconst defineRuntimeHookMetadata = <const T extends Record<string, RuntimeHookMetadata>>(\n metadata: T,\n): T => metadata;\n\nconst runtimeHookMetadata = defineRuntimeHookMetadata({\n useBottomSheetConfig: {\n defaultProps: {},\n selectorParamValues: {\n variant: ['default'],\n },\n tokenConfigPath: ['bottomSheet', 'variables'],\n fields: {\n backgroundColor: {\n bindingSelector: 'bottomSheet.backgroundColor',\n selectorTemplates: ['bottomSheet.backgroundColor.${variant}'],\n tokenSource: {\n variableTemplate: 'variant/${variant}/root',\n valuePath: ['backgroundColor', 'rest', 'value'],\n },\n },\n },\n },\n useToastConfig: {\n defaultProps: {\n size: 'toast.defaultSize',\n variant: 'toast.defaultVariant',\n },\n defaultPropSources: {\n size: ['toast', 'defaults', 'size'],\n variant: ['toast', 'defaults', 'variant'],\n },\n selectorParamValues: {\n size: ['default'],\n variant: ['success', 'error', 'info', 'warning', 'loading'],\n },\n tokenConfigPath: ['toast', 'variables'],\n fields: {\n autoClose: {\n bindingSelector: 'toast.autoClose',\n selectorTemplates: ['toast.autoClose'],\n staticValue: 6_000,\n },\n position: {\n bindingSelector: 'toast.position',\n selectorTemplates: ['toast.position'],\n staticValue: 'bottom-center',\n },\n size: {\n bindingSelector: 'toast.defaultSize',\n selectorTemplates: ['toast.defaultSize'],\n },\n variant: {\n bindingSelector: 'toast.defaultVariant',\n selectorTemplates: ['toast.defaultVariant'],\n },\n textVariant: {\n bindingSelector: 'toast.textVariant.${size}',\n selectorTemplates: ['toast.textVariant.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/label',\n valuePath: ['textVariant', 'rest', 'value'],\n },\n },\n textColor: {\n bindingSelector: 'toast.textColor.${variant}',\n selectorTemplates: ['toast.textColor.${variant}'],\n tokenSource: {\n variableTemplate: 'variant/${variant}/root',\n valuePath: ['color', 'rest', 'value'],\n },\n },\n iconSize: {\n bindingSelector: 'toast.iconSize.${size}',\n selectorTemplates: ['toast.iconSize.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/icon',\n valuePath: ['size', 'rest', 'value'],\n },\n },\n buttonSize: {\n bindingSelector: 'toast.buttonSize.${size}',\n selectorTemplates: ['toast.buttonSize.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/actionButton',\n valuePath: ['buttonSize', 'rest', 'value'],\n },\n },\n buttonVariant: {\n bindingSelector: 'toast.buttonVariant.${variant}',\n selectorTemplates: ['toast.buttonVariant.${variant}'],\n tokenSource: {\n variableTemplate: 'variant/${variant}/actionButton',\n valuePath: ['buttonVariant', 'rest', 'value'],\n },\n },\n iconVariant: {\n bindingSelector: 'toast.iconVariant.${variant}',\n selectorTemplates: ['toast.iconVariant.${variant}'],\n tokenSource: {\n variableTemplate: 'variant/${variant}/icon',\n valuePath: ['iconVariant', 'rest', 'value'],\n },\n },\n backgroundColor: {\n bindingSelector: 'toast.backgroundColor',\n selectorTemplates: ['toast.backgroundColor.${variant}'],\n tokenSource: {\n variableTemplate: 'variant/${variant}/root',\n valuePath: ['backgroundColor', 'rest', 'value'],\n },\n },\n },\n },\n useTooltipConfig: {\n defaultProps: {},\n selectorParamValues: {\n size: ['default'],\n },\n tokenConfigPath: ['tooltip', 'variables'],\n fields: {\n animationDuration: {\n bindingSelector: 'tooltip.animationDuration',\n selectorTemplates: ['tooltip.animationDuration'],\n staticValue: 200,\n },\n placement: {\n bindingSelector: 'tooltip.placement',\n selectorTemplates: ['tooltip.placement'],\n staticValue: 'top',\n },\n borderRadius: {\n bindingSelector: 'tooltip.borderRadius',\n selectorTemplates: ['tooltip.borderRadius.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/svg',\n valuePath: ['borderRadius', 'rest', 'value'],\n transformConfigPath: ['scaleMode', 'medium', 'borderRadius'],\n },\n },\n },\n },\n usePopoverConfig: {\n defaultProps: {\n size: 'popover.defaultSize',\n variant: 'popover.defaultVariant',\n },\n defaultPropValues: {\n size: 'default',\n variant: 'default',\n },\n selectorParamValues: {\n size: ['default'],\n },\n tokenConfigPath: ['popover', 'variables'],\n fields: {\n animationDuration: {\n bindingSelector: 'popover.animationDuration',\n selectorTemplates: ['popover.animationDuration'],\n staticValue: 200,\n },\n placement: {\n bindingSelector: 'popover.placement',\n selectorTemplates: ['popover.placement'],\n staticValue: 'top',\n },\n size: {\n bindingSelector: 'popover.defaultSize',\n selectorTemplates: ['popover.defaultSize'],\n },\n variant: {\n bindingSelector: 'popover.defaultVariant',\n selectorTemplates: ['popover.defaultVariant'],\n },\n borderRadius: {\n bindingSelector: 'popover.borderRadius.${size}',\n selectorTemplates: ['popover.borderRadius.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/svgBase',\n valuePath: ['borderRadius', 'rest', 'value'],\n transformConfigPath: ['scaleMode', 'medium', 'borderRadius'],\n },\n },\n gap: {\n bindingSelector: 'popover.gap.${size}',\n selectorTemplates: ['popover.gap.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/contentWrapper',\n valuePath: ['gap', 'rest', 'value'],\n },\n },\n spacingHorizontal: {\n bindingSelector: 'popover.spacingHorizontal.${size}',\n selectorTemplates: ['popover.spacingHorizontal.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/contentWrapper',\n valuePath: ['spacingHorizontal', 'rest', 'value'],\n },\n },\n spacingVertical: {\n bindingSelector: 'popover.spacingVertical.${size}',\n selectorTemplates: ['popover.spacingVertical.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/contentWrapper',\n valuePath: ['spacingVertical', 'rest', 'value'],\n },\n },\n dismissButtonSpacing: {\n bindingSelector: 'popover.dismissButtonSpacing.${size}',\n selectorTemplates: ['popover.dismissButtonSpacing.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/closeIconContainer',\n valuePath: ['spacing', 'rest', 'value'],\n },\n },\n dismissIconSize: {\n bindingSelector: 'popover.dismissIconSize.${size}',\n selectorTemplates: ['popover.dismissIconSize.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/closeIcon',\n valuePath: ['size', 'rest', 'value'],\n transformConfigPath: ['scaleMode', 'medium', 'iconSizes'],\n },\n },\n },\n },\n useModalConfig: {\n defaultProps: {\n size: 'modal.defaultSize',\n variant: 'modal.defaultVariant',\n },\n defaultPropValues: {\n size: 'default',\n variant: 'default',\n },\n selectorParamValues: {\n size: ['default'],\n },\n tokenConfigPath: ['modal', 'variables'],\n fields: {\n size: {\n bindingSelector: 'modal.defaultSize',\n selectorTemplates: ['modal.defaultSize'],\n },\n variant: {\n bindingSelector: 'modal.defaultVariant',\n selectorTemplates: ['modal.defaultVariant'],\n },\n gutter: {\n bindingSelector: 'modal.gutter.${size}',\n selectorTemplates: ['modal.gutter.${size}'],\n tokenSource: {\n variableTemplate: 'size/${size}/scrim',\n valuePath: ['spacing', 'rest', 'value'],\n },\n },\n },\n },\n});\n\ntype RuntimeHookName = keyof typeof runtimeHookMetadata;\ntype RuntimeHookSelectorParamMap<T extends RuntimeHookName> =\n (typeof runtimeHookMetadata)[T] extends { selectorParamValues: infer P } ? NonNullable<P> : never;\ntype RuntimeHookSelectorParamName<T extends RuntimeHookName> = keyof RuntimeHookSelectorParamMap<T>;\ntype RuntimeHookSelectorParamValue<\n T extends RuntimeHookName,\n P extends RuntimeHookSelectorParamName<T>,\n> = RuntimeHookSelectorParamMap<T>[P] extends readonly (infer V)[] ? V : never;\n\nconst getNestedValue = (value: unknown, path: readonly string[]): unknown => {\n return path.reduce<unknown>((currentValue, segment) => {\n if (typeof currentValue !== 'object' || currentValue === null) {\n return undefined;\n }\n\n return (currentValue as Record<string, unknown>)[segment];\n }, value);\n};\n\nconst isRuntimeConfigValue = (value: unknown): value is string | number | boolean => {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\n};\n\nconst getRuntimeHookConfig = (hookName: string): RuntimeHookMetadata | null => {\n return runtimeHookMetadata[hookName as RuntimeHookName] ?? null;\n};\n\nconst getRuntimeConfigHookNames = (): RuntimeHookName[] => {\n return Object.keys(runtimeHookMetadata) as RuntimeHookName[];\n};\n\nconst getRuntimeConfigSelectorTemplates = (): string[] => {\n return [\n ...new Set(\n Object.values(runtimeHookMetadata).flatMap((hookMetadata) => [\n ...Object.values(hookMetadata.defaultProps),\n ...Object.values(hookMetadata.fields).flatMap(({ selectorTemplates }) => selectorTemplates),\n ]),\n ),\n ];\n};\n\nconst getRuntimeSelectorParamValues = <\n T extends RuntimeHookName,\n P extends RuntimeHookSelectorParamName<T>,\n>(\n hookName: T,\n paramName: P,\n): RuntimeHookSelectorParamValue<T, P>[] => {\n const selectorParamValues = runtimeHookMetadata[hookName].selectorParamValues as\n | Record<string, readonly string[]>\n | undefined;\n const values = selectorParamValues?.[paramName as string] ?? [];\n return [...values] as RuntimeHookSelectorParamValue<T, P>[];\n};\n\nconst expandRuntimeSelectorTemplate = (\n template: string,\n params: RuntimeSelectorParams = {},\n): string => {\n return template.replace(/\\$\\{(\\w+)\\}/g, (match, paramName: string) => params[paramName] ?? match);\n};\n\nconst expandRuntimeSelectors = (hookName: string, template: string): string[] => {\n const placeholders = [...template.matchAll(/\\$\\{(\\w+)\\}/g)].map((match) => match[1]);\n\n if (placeholders.length === 0) {\n return [template];\n }\n\n return placeholders\n .reduce<RuntimeSelectorParams[]>(\n (combinations, placeholder) => {\n const values = getRuntimeSelectorParamValues(\n hookName as RuntimeHookName,\n placeholder as RuntimeHookSelectorParamName<RuntimeHookName>,\n ) as string[];\n if (values.length === 0) {\n return combinations;\n }\n\n return combinations.flatMap((combination) =>\n values.map((value) => ({ ...combination, [placeholder]: value })),\n );\n },\n [{} as RuntimeSelectorParams],\n )\n .map((params) => expandRuntimeSelectorTemplate(template, params));\n};\n\nconst getRuntimeConfigSelectors = (): string[] => {\n return [\n ...new Set(\n getRuntimeConfigHookNames().flatMap((hookName) => {\n const hookConfig = getRuntimeHookConfig(hookName);\n if (!hookConfig) {\n return [];\n }\n\n return [\n ...Object.values(hookConfig.defaultProps),\n ...Object.values(hookConfig.fields).flatMap(({ selectorTemplates }) =>\n selectorTemplates.flatMap((template) => expandRuntimeSelectors(hookName, template)),\n ),\n ];\n }),\n ),\n ];\n};\n\nconst getRuntimeDefaultPropSelector = (\n hookName: string,\n propName: string,\n params: RuntimeSelectorParams = {},\n): string | null => {\n const selector = getRuntimeHookConfig(hookName)?.defaultProps[propName];\n return selector ? expandRuntimeSelectorTemplate(selector, params) : null;\n};\n\nconst getRuntimeDefaultPropValue = (\n config: UniversalTokensConfig,\n hookName: string,\n propName: string,\n): string | number | boolean | undefined => {\n const hookConfig = getRuntimeHookConfig(hookName);\n const configuredValue = getNestedValue(config, hookConfig?.defaultPropSources?.[propName] ?? []);\n\n if (isRuntimeConfigValue(configuredValue)) {\n return configuredValue;\n }\n\n const staticValue = hookConfig?.defaultPropValues?.[propName];\n return staticValue === undefined ? undefined : staticValue;\n};\n\nconst getRuntimeFieldSelector = (\n hookName: string,\n fieldName: string,\n params: RuntimeSelectorParams = {},\n): string | null => {\n const selectorTemplate = getRuntimeHookConfig(hookName)?.fields[fieldName]?.selectorTemplates[0];\n return selectorTemplate ? expandRuntimeSelectorTemplate(selectorTemplate, params) : null;\n};\n\nconst getRuntimeFieldStaticValue = (\n hookName: string,\n fieldName: string,\n): string | number | boolean | null => {\n return getRuntimeHookConfig(hookName)?.fields[fieldName]?.staticValue ?? null;\n};\n\nconst getRuntimeFieldTokenValue = (\n config: UniversalTokensConfig,\n hookName: string,\n fieldName: string,\n params: RuntimeSelectorParams = {},\n): string | number | boolean | undefined => {\n const hookConfig = getRuntimeHookConfig(hookName);\n const tokenConfigPath = hookConfig?.tokenConfigPath;\n const tokenSource = hookConfig?.fields[fieldName]?.tokenSource;\n\n if (!tokenConfigPath || !tokenSource) {\n return undefined;\n }\n\n const variableTemplate = expandRuntimeSelectorTemplate(tokenSource.variableTemplate, params);\n const tokenValue = getNestedValue(config, [...tokenConfigPath, variableTemplate]);\n const rawValue = getNestedValue(tokenValue, tokenSource.valuePath);\n\n if (rawValue === undefined) {\n return undefined;\n }\n\n if (!tokenSource.transformConfigPath) {\n return isRuntimeConfigValue(rawValue) ? rawValue : undefined;\n }\n\n const transformedValue = getNestedValue(\n tokenSource.transformConfigPath.reduce<unknown>((currentValue, segment) => {\n if (typeof currentValue !== 'object' || currentValue === null) {\n return undefined;\n }\n\n return (currentValue as Record<string, unknown>)[segment];\n }, config),\n [String(rawValue)],\n );\n\n return isRuntimeConfigValue(transformedValue) ? transformedValue : undefined;\n};\n\nexport {\n expandRuntimeSelectorTemplate,\n getRuntimeConfigHookNames,\n getRuntimeConfigSelectors,\n getRuntimeConfigSelectorTemplates,\n getRuntimeDefaultPropSelector,\n getRuntimeDefaultPropValue,\n getRuntimeFieldSelector,\n getRuntimeFieldStaticValue,\n getRuntimeFieldTokenValue,\n getRuntimeHookConfig,\n getRuntimeSelectorParamValues,\n};\nexport type {\n RuntimeHookFieldMetadata,\n RuntimeHookFieldTokenSource,\n RuntimeHookMetadata,\n RuntimeSelectorParams,\n};\n"],"mappings":"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"}
|
|
@@ -7,9 +7,11 @@ tailwindcss_plugin_js = require_runtime.__toESM(tailwindcss_plugin_js, 1);
|
|
|
7
7
|
const blurBgFallbackPlugin = tailwindcss_plugin_js.default.withOptions(() => ({ addUtilities }) => {
|
|
8
8
|
addUtilities({
|
|
9
9
|
".uds-bgBlurFillFallback": { fill: `var(--${require_index.BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})` },
|
|
10
|
+
".uds-bgBlurFallback": { backgroundColor: `var(--${require_index.BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})` },
|
|
10
11
|
"@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))": {
|
|
11
12
|
".uds-bgBlurFillFallback": { fill: `var(--${require_index.BACKGROUND_BLUR_COLOR_PREFIX})` },
|
|
12
13
|
".uds-bgBlurFallback": {
|
|
14
|
+
backgroundColor: `var(--${require_index.BACKGROUND_BLUR_COLOR_PREFIX})`,
|
|
13
15
|
WebkitBackdropFilter: "var(--uds-backdrop-blur)",
|
|
14
16
|
backdropFilter: "var(--uds-backdrop-blur)"
|
|
15
17
|
}
|
|
@@ -17,6 +19,7 @@ const blurBgFallbackPlugin = tailwindcss_plugin_js.default.withOptions(() => ({
|
|
|
17
19
|
"@media (prefers-reduced-transparency)": {
|
|
18
20
|
".uds-bgBlurFillFallback": { fill: `var(--${require_index.BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})` },
|
|
19
21
|
".uds-bgBlurFallback": {
|
|
22
|
+
backgroundColor: `var(--${require_index.BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})`,
|
|
20
23
|
WebkitBackdropFilter: "none",
|
|
21
24
|
backdropFilter: "none"
|
|
22
25
|
}
|
|
@@ -5,9 +5,11 @@ import plugin from "tailwindcss/plugin.js";
|
|
|
5
5
|
const blurBgFallbackPlugin = plugin.withOptions(() => ({ addUtilities }) => {
|
|
6
6
|
addUtilities({
|
|
7
7
|
".uds-bgBlurFillFallback": { fill: `var(--${BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})` },
|
|
8
|
+
".uds-bgBlurFallback": { backgroundColor: `var(--${BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})` },
|
|
8
9
|
"@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))": {
|
|
9
10
|
".uds-bgBlurFillFallback": { fill: `var(--${BACKGROUND_BLUR_COLOR_PREFIX})` },
|
|
10
11
|
".uds-bgBlurFallback": {
|
|
12
|
+
backgroundColor: `var(--${BACKGROUND_BLUR_COLOR_PREFIX})`,
|
|
11
13
|
WebkitBackdropFilter: "var(--uds-backdrop-blur)",
|
|
12
14
|
backdropFilter: "var(--uds-backdrop-blur)"
|
|
13
15
|
}
|
|
@@ -15,6 +17,7 @@ const blurBgFallbackPlugin = plugin.withOptions(() => ({ addUtilities }) => {
|
|
|
15
17
|
"@media (prefers-reduced-transparency)": {
|
|
16
18
|
".uds-bgBlurFillFallback": { fill: `var(--${BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})` },
|
|
17
19
|
".uds-bgBlurFallback": {
|
|
20
|
+
backgroundColor: `var(--${BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})`,
|
|
18
21
|
WebkitBackdropFilter: "none",
|
|
19
22
|
backdropFilter: "none"
|
|
20
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blurBgFallback.js","names":[],"sources":["../../../src/tailwind/plugins/blurBgFallback.ts"],"sourcesContent":["import {\n BACKGROUND_BLUR_COLOR_PREFIX,\n BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX,\n} from '@yahoo/uds-css-tokens';\nimport plugin from 'tailwindcss/plugin.js';\n\nimport type { TailwindPluginOptions } from '../utils/composeTailwindPlugins';\n\n// .uds-bgBlurFillFallback — for the element that has the fill property\n// .uds-bgBlurFallback — for the element that has the backdrop-filter property\n\nconst blurBgFallbackPlugin = plugin.withOptions<TailwindPluginOptions>(\n () =>\n ({ addUtilities }) => {\n addUtilities({\n '.uds-bgBlurFillFallback': {\n fill: `var(--${BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})`,\n },\n\n '@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))': {\n '.uds-bgBlurFillFallback': {\n fill: `var(--${BACKGROUND_BLUR_COLOR_PREFIX})`,\n },\n '.uds-bgBlurFallback': {\n WebkitBackdropFilter: 'var(--uds-backdrop-blur)',\n backdropFilter: 'var(--uds-backdrop-blur)',\n },\n },\n\n '@media (prefers-reduced-transparency)': {\n '.uds-bgBlurFillFallback': {\n fill: `var(--${BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})`,\n },\n '.uds-bgBlurFallback': {\n WebkitBackdropFilter: 'none',\n backdropFilter: 'none',\n },\n },\n });\n },\n\n () => ({\n safelist: ['uds-bgBlurFillFallback', 'uds-bgBlurFallback'],\n }),\n);\n\nexport { blurBgFallbackPlugin };\n"],"mappings":";;;;AAWA,MAAM,uBAAuB,OAAO,mBAE/B,EAAE,mBAAmB;AACpB,cAAa;EACX,2BAA2B,EACzB,MAAM,SAAS,sCAAsC,IACtD;EAED,kFAAkF;GAChF,2BAA2B,EACzB,MAAM,SAAS,6BAA6B,IAC7C;GACD,uBAAuB;IACrB,sBAAsB;IACtB,gBAAgB;IACjB;GACF;EAED,yCAAyC;GACvC,2BAA2B,EACzB,MAAM,SAAS,sCAAsC,IACtD;GACD,uBAAuB;IACrB,sBAAsB;IACtB,gBAAgB;IACjB;GACF;EACF,CAAC;UAGC,EACL,UAAU,CAAC,0BAA0B,qBAAqB,EAC3D,EACF"}
|
|
1
|
+
{"version":3,"file":"blurBgFallback.js","names":[],"sources":["../../../src/tailwind/plugins/blurBgFallback.ts"],"sourcesContent":["import {\n BACKGROUND_BLUR_COLOR_PREFIX,\n BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX,\n} from '@yahoo/uds-css-tokens';\nimport plugin from 'tailwindcss/plugin.js';\n\nimport type { TailwindPluginOptions } from '../utils/composeTailwindPlugins';\n\n// .uds-bgBlurFillFallback — for the element that has the fill property\n// .uds-bgBlurFallback — for the element that has the backdrop-filter property\n\nconst blurBgFallbackPlugin = plugin.withOptions<TailwindPluginOptions>(\n () =>\n ({ addUtilities }) => {\n addUtilities({\n '.uds-bgBlurFillFallback': {\n fill: `var(--${BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})`,\n },\n\n '.uds-bgBlurFallback': {\n backgroundColor: `var(--${BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})`,\n },\n\n '@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))': {\n '.uds-bgBlurFillFallback': {\n fill: `var(--${BACKGROUND_BLUR_COLOR_PREFIX})`,\n },\n '.uds-bgBlurFallback': {\n backgroundColor: `var(--${BACKGROUND_BLUR_COLOR_PREFIX})`,\n WebkitBackdropFilter: 'var(--uds-backdrop-blur)',\n backdropFilter: 'var(--uds-backdrop-blur)',\n },\n },\n\n '@media (prefers-reduced-transparency)': {\n '.uds-bgBlurFillFallback': {\n fill: `var(--${BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})`,\n },\n '.uds-bgBlurFallback': {\n backgroundColor: `var(--${BACKGROUND_BLUR_FALLBACK_COLOR_PREFIX})`,\n WebkitBackdropFilter: 'none',\n backdropFilter: 'none',\n },\n },\n });\n },\n\n () => ({\n safelist: ['uds-bgBlurFillFallback', 'uds-bgBlurFallback'],\n }),\n);\n\nexport { blurBgFallbackPlugin };\n"],"mappings":";;;;AAWA,MAAM,uBAAuB,OAAO,mBAE/B,EAAE,mBAAmB;AACpB,cAAa;EACX,2BAA2B,EACzB,MAAM,SAAS,sCAAsC,IACtD;EAED,uBAAuB,EACrB,iBAAiB,SAAS,sCAAsC,IACjE;EAED,kFAAkF;GAChF,2BAA2B,EACzB,MAAM,SAAS,6BAA6B,IAC7C;GACD,uBAAuB;IACrB,iBAAiB,SAAS,6BAA6B;IACvD,sBAAsB;IACtB,gBAAgB;IACjB;GACF;EAED,yCAAyC;GACvC,2BAA2B,EACzB,MAAM,SAAS,sCAAsC,IACtD;GACD,uBAAuB;IACrB,iBAAiB,SAAS,sCAAsC;IAChE,sBAAsB;IACtB,gBAAgB;IACjB;GACF;EACF,CAAC;UAGC,EACL,UAAU,CAAC,0BAA0B,qBAAqB,EAC3D,EACF"}
|
|
@@ -30,6 +30,7 @@ const componentsPlugin = tailwindcss_plugin_js.default.withOptions(({ config, pr
|
|
|
30
30
|
addComponents(require_index$1.generateStyles(require_generatedConfigs.BannerConfig, config.banner, theme, previewOptions));
|
|
31
31
|
addComponents(require_index$1.generateStyles(require_generatedConfigs.TabConfig, config.tab, theme, previewOptions));
|
|
32
32
|
addComponents(require_index$1.generateStyles(require_generatedConfigs.TabsConfig, config.tabs, theme, previewOptions));
|
|
33
|
+
addComponents(require_index$1.generateStyles(require_generatedConfigs.ModalConfig, config.modal, theme, previewOptions));
|
|
33
34
|
}, () => ({ theme: { extend: { opacity: require_index.opacityMap } } }));
|
|
34
35
|
//#endregion
|
|
35
36
|
exports.componentsPlugin = componentsPlugin;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! © 2026 Yahoo, Inc. UDS Tailwind and Purger v0.0.0-development */
|
|
2
2
|
import { opacityMap } from "../../fixtures/dist/index.js";
|
|
3
|
-
import { AvatarConfig, BadgeConfig, BannerConfig, BottomSheetConfig, ButtonConfig, CheckboxConfig, ChipConfig, DividerConfig, IconButtonConfig, InputConfig, LinkConfig, MenuContentConfig, MenuItemConfig, PopoverConfig, RadioConfig, ScrimConfig, SwitchConfig, TabConfig, TabsConfig, ToastConfig, TooltipConfig } from "../../automated-config/dist/generated/generatedConfigs.js";
|
|
3
|
+
import { AvatarConfig, BadgeConfig, BannerConfig, BottomSheetConfig, ButtonConfig, CheckboxConfig, ChipConfig, DividerConfig, IconButtonConfig, InputConfig, LinkConfig, MenuContentConfig, MenuItemConfig, ModalConfig, PopoverConfig, RadioConfig, ScrimConfig, SwitchConfig, TabConfig, TabsConfig, ToastConfig, TooltipConfig } from "../../automated-config/dist/generated/generatedConfigs.js";
|
|
4
4
|
import { generateStyles } from "../../automated-config/dist/utils/index.js";
|
|
5
5
|
import plugin from "tailwindcss/plugin.js";
|
|
6
6
|
//#region src/tailwind/plugins/components.ts
|
|
@@ -28,6 +28,7 @@ const componentsPlugin = plugin.withOptions(({ config, previewOptions = { genera
|
|
|
28
28
|
addComponents(generateStyles(BannerConfig, config.banner, theme, previewOptions));
|
|
29
29
|
addComponents(generateStyles(TabConfig, config.tab, theme, previewOptions));
|
|
30
30
|
addComponents(generateStyles(TabsConfig, config.tabs, theme, previewOptions));
|
|
31
|
+
addComponents(generateStyles(ModalConfig, config.modal, theme, previewOptions));
|
|
31
32
|
}, () => ({ theme: { extend: { opacity: opacityMap } } }));
|
|
32
33
|
//#endregion
|
|
33
34
|
export { componentsPlugin };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","names":[],"sources":["../../../src/tailwind/plugins/components.ts"],"sourcesContent":["import {\n AvatarConfig,\n BadgeConfig,\n BannerConfig,\n BottomSheetConfig,\n ButtonConfig,\n CheckboxConfig,\n ChipConfig,\n DividerConfig,\n IconButtonConfig,\n InputConfig,\n LinkConfig,\n MenuContentConfig,\n MenuItemConfig,\n PopoverConfig,\n RadioConfig,\n ScrimConfig,\n SwitchConfig,\n TabConfig,\n TabsConfig,\n ToastConfig,\n TooltipConfig,\n} from '@yahoo/uds-automated-config/generatedConfigs';\nimport { generateStyles } from '@yahoo/uds-automated-config/utils';\nimport { opacityMap } from '@yahoo/uds-fixtures';\nimport plugin from 'tailwindcss/plugin.js';\n\nimport type { TailwindPluginOptions } from '../utils/composeTailwindPlugins';\n\nconst componentsPlugin = plugin.withOptions<TailwindPluginOptions>(\n ({\n config,\n previewOptions = {\n generatePseudoStateClassModifier: false,\n },\n }) =>\n ({ addComponents, theme }) => {\n // IconButton inherits Button variant styles\n if (config.button || config.iconButton) {\n const buttonStyles = generateStyles(ButtonConfig, config.button, theme, previewOptions);\n addComponents(buttonStyles);\n\n if (config.iconButton) {\n const iconButtonStyles = generateStyles(\n IconButtonConfig,\n config.iconButton,\n theme,\n previewOptions,\n );\n addComponents(iconButtonStyles);\n }\n }\n\n if (config.divider) {\n const dividerStyles = generateStyles(DividerConfig, config.divider, theme, previewOptions);\n addComponents(dividerStyles);\n }\n\n if (config.link) {\n const linkStyles = generateStyles(LinkConfig, config.link, theme, previewOptions);\n addComponents(linkStyles);\n }\n\n if (config.badge) {\n const badgeStyles = generateStyles(BadgeConfig, config.badge, theme, previewOptions);\n addComponents(badgeStyles);\n }\n\n if (config.radio) {\n const radioStyles = generateStyles(RadioConfig, config.radio, theme, previewOptions);\n addComponents(radioStyles);\n }\n\n if (config.avatar) {\n const avatarStyles = generateStyles(AvatarConfig, config.avatar, theme, previewOptions);\n addComponents(avatarStyles);\n }\n\n if (config.chip) {\n const chipStyles = generateStyles(ChipConfig, config.chip, theme, previewOptions);\n addComponents(chipStyles);\n }\n\n if (config.switch) {\n const switchStyles = generateStyles(SwitchConfig, config.switch, theme, previewOptions);\n addComponents(switchStyles);\n }\n\n if (config.checkbox) {\n const checkboxStyles = generateStyles(\n CheckboxConfig,\n config.checkbox,\n theme,\n previewOptions,\n );\n addComponents(checkboxStyles);\n }\n\n // TODO: May need to ensure portal is inside a importNamespace class\n if (config.menuItem) {\n const menuStyles = generateStyles(MenuItemConfig, config.menuItem, theme, previewOptions);\n addComponents(menuStyles);\n }\n\n if (config.menuContent) {\n const menuContentStyles = generateStyles(\n MenuContentConfig,\n config.menuContent,\n theme,\n previewOptions,\n );\n addComponents(menuContentStyles);\n }\n\n if (config.input) {\n const inputStyles = generateStyles(InputConfig, config.input, theme, previewOptions);\n addComponents(inputStyles);\n }\n\n if (config?.toast) {\n const toastStyles = generateStyles(ToastConfig, config.toast, theme, previewOptions);\n addComponents(toastStyles);\n }\n\n if (config.tooltip) {\n const tooltipStyles = generateStyles(TooltipConfig, config.tooltip, theme, previewOptions);\n addComponents(tooltipStyles);\n }\n\n if (config?.bottomSheet) {\n const bottomSheetStyles = generateStyles(\n BottomSheetConfig,\n config.bottomSheet,\n theme,\n previewOptions,\n );\n addComponents(bottomSheetStyles);\n }\n\n if (config?.scrim) {\n const scrimStyles = generateStyles(ScrimConfig, config.scrim, theme, previewOptions);\n addComponents(scrimStyles);\n }\n\n if (config.popover) {\n const popoverStyles = generateStyles(PopoverConfig, config.popover, theme, previewOptions);\n addComponents(popoverStyles);\n }\n\n const bannerStyles = generateStyles(BannerConfig, config.banner, theme, previewOptions);\n addComponents(bannerStyles);\n\n const tabStyles = generateStyles(TabConfig, config.tab, theme, previewOptions);\n addComponents(tabStyles);\n\n const tabsStyles = generateStyles(TabsConfig, config.tabs, theme, previewOptions);\n addComponents(tabsStyles);\n },\n () => ({\n theme: {\n extend: {\n // Added to route configurable opacity steps through to button opacity/disabled property rendering.\n opacity: opacityMap,\n },\n },\n }),\n);\n\nexport { componentsPlugin };\n"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"components.js","names":[],"sources":["../../../src/tailwind/plugins/components.ts"],"sourcesContent":["import {\n AvatarConfig,\n BadgeConfig,\n BannerConfig,\n BottomSheetConfig,\n ButtonConfig,\n CheckboxConfig,\n ChipConfig,\n DividerConfig,\n IconButtonConfig,\n InputConfig,\n LinkConfig,\n MenuContentConfig,\n MenuItemConfig,\n ModalConfig,\n PopoverConfig,\n RadioConfig,\n ScrimConfig,\n SwitchConfig,\n TabConfig,\n TabsConfig,\n ToastConfig,\n TooltipConfig,\n} from '@yahoo/uds-automated-config/generatedConfigs';\nimport { generateStyles } from '@yahoo/uds-automated-config/utils';\nimport { opacityMap } from '@yahoo/uds-fixtures';\nimport plugin from 'tailwindcss/plugin.js';\n\nimport type { TailwindPluginOptions } from '../utils/composeTailwindPlugins';\n\nconst componentsPlugin = plugin.withOptions<TailwindPluginOptions>(\n ({\n config,\n previewOptions = {\n generatePseudoStateClassModifier: false,\n },\n }) =>\n ({ addComponents, theme }) => {\n // IconButton inherits Button variant styles\n if (config.button || config.iconButton) {\n const buttonStyles = generateStyles(ButtonConfig, config.button, theme, previewOptions);\n addComponents(buttonStyles);\n\n if (config.iconButton) {\n const iconButtonStyles = generateStyles(\n IconButtonConfig,\n config.iconButton,\n theme,\n previewOptions,\n );\n addComponents(iconButtonStyles);\n }\n }\n\n if (config.divider) {\n const dividerStyles = generateStyles(DividerConfig, config.divider, theme, previewOptions);\n addComponents(dividerStyles);\n }\n\n if (config.link) {\n const linkStyles = generateStyles(LinkConfig, config.link, theme, previewOptions);\n addComponents(linkStyles);\n }\n\n if (config.badge) {\n const badgeStyles = generateStyles(BadgeConfig, config.badge, theme, previewOptions);\n addComponents(badgeStyles);\n }\n\n if (config.radio) {\n const radioStyles = generateStyles(RadioConfig, config.radio, theme, previewOptions);\n addComponents(radioStyles);\n }\n\n if (config.avatar) {\n const avatarStyles = generateStyles(AvatarConfig, config.avatar, theme, previewOptions);\n addComponents(avatarStyles);\n }\n\n if (config.chip) {\n const chipStyles = generateStyles(ChipConfig, config.chip, theme, previewOptions);\n addComponents(chipStyles);\n }\n\n if (config.switch) {\n const switchStyles = generateStyles(SwitchConfig, config.switch, theme, previewOptions);\n addComponents(switchStyles);\n }\n\n if (config.checkbox) {\n const checkboxStyles = generateStyles(\n CheckboxConfig,\n config.checkbox,\n theme,\n previewOptions,\n );\n addComponents(checkboxStyles);\n }\n\n // TODO: May need to ensure portal is inside a importNamespace class\n if (config.menuItem) {\n const menuStyles = generateStyles(MenuItemConfig, config.menuItem, theme, previewOptions);\n addComponents(menuStyles);\n }\n\n if (config.menuContent) {\n const menuContentStyles = generateStyles(\n MenuContentConfig,\n config.menuContent,\n theme,\n previewOptions,\n );\n addComponents(menuContentStyles);\n }\n\n if (config.input) {\n const inputStyles = generateStyles(InputConfig, config.input, theme, previewOptions);\n addComponents(inputStyles);\n }\n\n if (config?.toast) {\n const toastStyles = generateStyles(ToastConfig, config.toast, theme, previewOptions);\n addComponents(toastStyles);\n }\n\n if (config.tooltip) {\n const tooltipStyles = generateStyles(TooltipConfig, config.tooltip, theme, previewOptions);\n addComponents(tooltipStyles);\n }\n\n if (config?.bottomSheet) {\n const bottomSheetStyles = generateStyles(\n BottomSheetConfig,\n config.bottomSheet,\n theme,\n previewOptions,\n );\n addComponents(bottomSheetStyles);\n }\n\n if (config?.scrim) {\n const scrimStyles = generateStyles(ScrimConfig, config.scrim, theme, previewOptions);\n addComponents(scrimStyles);\n }\n\n if (config.popover) {\n const popoverStyles = generateStyles(PopoverConfig, config.popover, theme, previewOptions);\n addComponents(popoverStyles);\n }\n\n const bannerStyles = generateStyles(BannerConfig, config.banner, theme, previewOptions);\n addComponents(bannerStyles);\n\n const tabStyles = generateStyles(TabConfig, config.tab, theme, previewOptions);\n addComponents(tabStyles);\n\n const tabsStyles = generateStyles(TabsConfig, config.tabs, theme, previewOptions);\n addComponents(tabsStyles);\n\n const modalStyles = generateStyles(ModalConfig, config.modal, theme, previewOptions);\n addComponents(modalStyles);\n },\n () => ({\n theme: {\n extend: {\n // Added to route configurable opacity steps through to button opacity/disabled property rendering.\n opacity: opacityMap,\n },\n },\n }),\n);\n\nexport { componentsPlugin };\n"],"mappings":";;;;;;AA8BA,MAAM,mBAAmB,OAAO,aAC7B,EACC,QACA,iBAAiB,EACf,kCAAkC,OACnC,QAEA,EAAE,eAAe,YAAY;AAE5B,KAAI,OAAO,UAAU,OAAO,YAAY;AAEtC,gBADqB,eAAe,cAAc,OAAO,QAAQ,OAAO,eAC9C,CAAC;AAE3B,MAAI,OAAO,WAOT,eANyB,eACvB,kBACA,OAAO,YACP,OACA,eAE4B,CAAC;;AAInC,KAAI,OAAO,QAET,eADsB,eAAe,eAAe,OAAO,SAAS,OAAO,eAChD,CAAC;AAG9B,KAAI,OAAO,KAET,eADmB,eAAe,YAAY,OAAO,MAAM,OAAO,eAC1C,CAAC;AAG3B,KAAI,OAAO,MAET,eADoB,eAAe,aAAa,OAAO,OAAO,OAAO,eAC5C,CAAC;AAG5B,KAAI,OAAO,MAET,eADoB,eAAe,aAAa,OAAO,OAAO,OAAO,eAC5C,CAAC;AAG5B,KAAI,OAAO,OAET,eADqB,eAAe,cAAc,OAAO,QAAQ,OAAO,eAC9C,CAAC;AAG7B,KAAI,OAAO,KAET,eADmB,eAAe,YAAY,OAAO,MAAM,OAAO,eAC1C,CAAC;AAG3B,KAAI,OAAO,OAET,eADqB,eAAe,cAAc,OAAO,QAAQ,OAAO,eAC9C,CAAC;AAG7B,KAAI,OAAO,SAOT,eANuB,eACrB,gBACA,OAAO,UACP,OACA,eAE0B,CAAC;AAI/B,KAAI,OAAO,SAET,eADmB,eAAe,gBAAgB,OAAO,UAAU,OAAO,eAClD,CAAC;AAG3B,KAAI,OAAO,YAOT,eAN0B,eACxB,mBACA,OAAO,aACP,OACA,eAE6B,CAAC;AAGlC,KAAI,OAAO,MAET,eADoB,eAAe,aAAa,OAAO,OAAO,OAAO,eAC5C,CAAC;AAG5B,KAAI,QAAQ,MAEV,eADoB,eAAe,aAAa,OAAO,OAAO,OAAO,eAC5C,CAAC;AAG5B,KAAI,OAAO,QAET,eADsB,eAAe,eAAe,OAAO,SAAS,OAAO,eAChD,CAAC;AAG9B,KAAI,QAAQ,YAOV,eAN0B,eACxB,mBACA,OAAO,aACP,OACA,eAE6B,CAAC;AAGlC,KAAI,QAAQ,MAEV,eADoB,eAAe,aAAa,OAAO,OAAO,OAAO,eAC5C,CAAC;AAG5B,KAAI,OAAO,QAET,eADsB,eAAe,eAAe,OAAO,SAAS,OAAO,eAChD,CAAC;AAI9B,eADqB,eAAe,cAAc,OAAO,QAAQ,OAAO,eAC9C,CAAC;AAG3B,eADkB,eAAe,WAAW,OAAO,KAAK,OAAO,eACxC,CAAC;AAGxB,eADmB,eAAe,YAAY,OAAO,MAAM,OAAO,eAC1C,CAAC;AAGzB,eADoB,eAAe,aAAa,OAAO,OAAO,OAAO,eAC5C,CAAC;UAEvB,EACL,OAAO,EACL,QAAQ,EAEN,SAAS,YACV,EACF,EACF,EACF"}
|