@yahoo/uds 3.171.1 → 3.172.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/automated-config/dist/utils/getConfigVariantProperties.d.cts +2 -2
  2. package/dist/automated-config/dist/utils/getConfigVariantProperties.d.ts +2 -2
  3. package/dist/components/client/Popover/UDSPopoverConfigProvider.d.cts +1 -1
  4. package/dist/components/client/Popover/UDSPopoverConfigProvider.d.ts +1 -1
  5. package/dist/css/dist/purger/optimized/ast/expressions.cjs +278 -278
  6. package/dist/css/dist/purger/optimized/ast/expressions.js +278 -278
  7. package/dist/css/dist/purger/optimized/ast/jsx.cjs +67 -36
  8. package/dist/css/dist/purger/optimized/ast/jsx.js +67 -35
  9. package/dist/css/dist/purger/optimized/ast/oxc.cjs +265 -0
  10. package/dist/css/dist/purger/optimized/ast/oxc.js +253 -0
  11. package/dist/css/dist/purger/optimized/ast/props.cjs +21 -15
  12. package/dist/css/dist/purger/optimized/ast/props.js +21 -14
  13. package/dist/css/dist/purger/optimized/ast/spread.cjs +19 -19
  14. package/dist/css/dist/purger/optimized/ast/spread.js +19 -18
  15. package/dist/css/dist/purger/optimized/purgeFromCode.cjs +86 -101
  16. package/dist/css/dist/purger/optimized/purgeFromCode.js +86 -100
  17. package/dist/tailwind-internal/dist/utils/getShadowStyles.d.cts +2 -2
  18. package/dist/tailwind-internal/dist/utils/getShadowStyles.d.ts +2 -2
  19. package/dist/tailwind-v3/dist/purger/legacy/purgeCSS.cjs +1 -1
  20. package/dist/tailwind-v3/dist/purger/legacy/purgeCSS.js +1 -1
  21. package/dist/uds/generated/componentData.cjs +450 -450
  22. package/dist/uds/generated/componentData.js +450 -450
  23. package/dist/uds/package.cjs +2 -0
  24. package/dist/uds/package.js +2 -0
  25. package/generated/componentData.json +1049 -1049
  26. package/package.json +3 -1
@@ -1,9 +1,9 @@
1
1
  /*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
2
2
  import { isPerfEnabled } from "../../css/perf.js";
3
+ import { getJsxAttributeName, getJsxTagName, getPropertyName, getStringLiteralValue, getText, isStringLiteral, parseSource } from "./ast/oxc.js";
3
4
  import { extractStringLiterals } from "./ast/expressions.js";
4
5
  import { getParentComponentInfo } from "./ast/jsx.js";
5
6
  import { resolveSpreadFromUsages } from "./ast/spread.js";
6
- import { Node, Project, SyntaxKind } from "ts-morph";
7
7
  //#region ../css/dist/purger/optimized/purgeFromCode.mjs
8
8
  /*! © 2026 Yahoo, Inc. UDS CSS v0.0.0-development */
9
9
  /**
@@ -51,13 +51,6 @@ const resolveComponentInfo = (name) => {
51
51
  const mappedName = componentNameLookup?.[normalized];
52
52
  if (mappedName && componentCache) return componentCache[mappedName];
53
53
  };
54
- const getModuleSpecifierValue = (importDecl) => {
55
- return importDecl.getModuleSpecifierValue() ?? importDecl.getModuleSpecifier().getText().replace(/^['"]|['"]$/g, "");
56
- };
57
- const isTypeOnlyNamedImport = (importDecl, importName) => {
58
- if (importDecl.isTypeOnly()) return true;
59
- return importDecl.getNamedImports().find((namedImport) => namedImport.getName() === importName)?.isTypeOnly() ?? false;
60
- };
61
54
  const isUdsComponentModule = (moduleSpecifier) => {
62
55
  const cleaned = moduleSpecifier.replace(/^['"]|['"]$/g, "");
63
56
  return cleaned === "@yahoo/uds" || cleaned.startsWith("@yahoo/uds/");
@@ -133,27 +126,27 @@ const resolveRuntimeSelectorValues = (selectorTemplate, componentInfo, userProps
133
126
  return value === void 0 ? [] : [String(value)];
134
127
  });
135
128
  };
136
- const extractClassNamePrimitives = (sourceFile) => {
129
+ const extractClassNamePrimitives = (source) => {
137
130
  const classes = [];
138
- sourceFile.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach((attr) => {
139
- if (attr.getNameNode().getText() !== "className") return;
140
- const initializer = attr.getInitializer();
131
+ source.jsxAttributes.forEach((attr) => {
132
+ if (getJsxAttributeName(source, attr) !== "className") return;
133
+ const initializer = attr.value;
141
134
  if (!initializer) return;
142
135
  const values = [];
143
- if (Node.isStringLiteral(initializer)) values.push(initializer.getLiteralText());
144
- else if (Node.isJsxExpression(initializer)) {
145
- const expr = initializer.getExpression();
146
- if (expr) values.push(...extractStringLiterals(expr));
136
+ if (isStringLiteral(initializer)) values.push(getStringLiteralValue(initializer));
137
+ else if (initializer.type === "JSXExpressionContainer") {
138
+ const expr = initializer.expression;
139
+ if (expr && expr.type !== "JSXEmptyExpression") values.push(...extractStringLiterals(expr, source));
147
140
  }
148
141
  values.forEach((raw) => {
149
142
  classes.push(...raw.split(/\s+/).filter(Boolean));
150
143
  });
151
144
  });
152
- sourceFile.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach((prop) => {
153
- if (prop.getName() !== "className") return;
154
- const initializer = prop.getInitializer();
145
+ source.objectProperties.forEach((prop) => {
146
+ if (prop.shorthand || getPropertyName(source, prop) !== "className") return;
147
+ const initializer = prop.value;
155
148
  if (!initializer) return;
156
- extractStringLiterals(initializer).forEach((raw) => {
149
+ extractStringLiterals(initializer, source).forEach((raw) => {
157
150
  classes.push(...raw.split(/\s+/).filter(Boolean));
158
151
  });
159
152
  });
@@ -183,8 +176,7 @@ const purgeFromCodeOptimized = async (code, options) => {
183
176
  unresolvedWrapperSpreads: []
184
177
  };
185
178
  const projectCreateStart = performance.now();
186
- const project = new Project({ useInMemoryFileSystem: true });
187
- const sourceFile = project.createSourceFile(options.filePath ?? "input.tsx", code, { overwrite: true });
179
+ const source = parseSource(options.filePath ?? "input.tsx", code);
188
180
  const projectCreateMs = performance.now() - projectCreateStart;
189
181
  const stats = {
190
182
  filesScanned: 1,
@@ -195,17 +187,16 @@ const purgeFromCodeOptimized = async (code, options) => {
195
187
  expressionsResolved: 0
196
188
  };
197
189
  const purgeContext = {
198
- project,
190
+ sources: [source],
199
191
  componentUsageCache: /* @__PURE__ */ new Map(),
200
192
  spreadCache: /* @__PURE__ */ new Map(),
201
- udsImportingFiles: /* @__PURE__ */ new Set(),
202
193
  stats
203
194
  };
204
195
  const importParseStart = performance.now();
205
196
  const imports = [];
206
- sourceFile.getImportDeclarations().forEach((importDecl) => {
207
- if (isUdsComponentModule(getModuleSpecifierValue(importDecl))) importDecl.getNamedImports().forEach((namedImport) => {
208
- if (!namedImport.isTypeOnly() && !importDecl.isTypeOnly()) imports.push(namedImport.getName());
197
+ source.staticImports.forEach((staticImport) => {
198
+ if (isUdsComponentModule(staticImport.moduleRequest.value)) staticImport.entries.forEach((entry) => {
199
+ if (entry.importName.kind === "Name" && entry.importName.name && !entry.isType) imports.push(entry.importName.name);
209
200
  });
210
201
  });
211
202
  const importParseMs = performance.now() - importParseStart;
@@ -215,17 +206,16 @@ const purgeFromCodeOptimized = async (code, options) => {
215
206
  const unresolvedWrapperSpreads = [];
216
207
  const referencedComponents = /* @__PURE__ */ new Set();
217
208
  const getStylesExtractStart = performance.now();
218
- const getStylesProps = extractGetStylesCalls(sourceFile, stats, variants);
209
+ const getStylesProps = extractGetStylesCalls(source, stats, variants);
219
210
  const getStylesExtractMs = performance.now() - getStylesExtractStart;
220
211
  const jsxAnalysisStart = performance.now();
221
- const jsxElementsCache = sourceFile.getDescendants().filter((node) => Node.isJsxOpeningElement(node) || Node.isJsxSelfClosingElement(node));
222
212
  imports.forEach((imp) => {
223
- findComponentReferences(sourceFile, imp, jsxElementsCache).forEach((reference) => {
224
- const componentName = reference.getTagNameNode().getText() || imp;
213
+ findComponentReferences(source, imp).forEach((reference) => {
214
+ const componentName = getJsxTagName(source, reference) || imp;
225
215
  referencedComponents.add(componentName);
226
216
  const propsMap = componentProps.get(componentName) ?? /* @__PURE__ */ new Map();
227
217
  const unresolvedSpreadProps = componentUnresolvedSpreadProps.get(componentName) ?? /* @__PURE__ */ new Set();
228
- const { props, unknownSpreadWrappers } = extractPropsFromReference(reference, stats, sourceFile, purgeContext);
218
+ const { props, unknownSpreadWrappers } = extractPropsFromReference(reference, stats, source, purgeContext);
229
219
  props.forEach(({ propName, values, fromSpread }) => {
230
220
  if (values.length > 0) {
231
221
  const existing = propsMap.get(propName) ?? /* @__PURE__ */ new Set();
@@ -381,7 +371,7 @@ const purgeFromCodeOptimized = async (code, options) => {
381
371
  });
382
372
  });
383
373
  });
384
- if (options.includeAllClassNamePrimitives) safelist.push(...extractClassNamePrimitives(sourceFile));
374
+ if (options.includeAllClassNamePrimitives) safelist.push(...extractClassNamePrimitives(source));
385
375
  const finalSafelist = [...new Set(safelist)].sort();
386
376
  const safelistGenerationMs = performance.now() - safelistGenStart;
387
377
  stats.timeMs = Math.round(performance.now() - startTime);
@@ -404,15 +394,14 @@ const purgeFromCodeOptimized = async (code, options) => {
404
394
  /**
405
395
  * Find JSX references for a component in the source file
406
396
  */
407
- const findComponentReferences = (sourceFile, componentName, jsxElementsCache) => {
397
+ const findComponentReferences = (source, componentName) => {
408
398
  const references = [];
409
399
  const seenTags = /* @__PURE__ */ new Set();
410
- const allJsxElements = jsxElementsCache ?? sourceFile.getDescendants().filter((node) => Node.isJsxOpeningElement(node) || Node.isJsxSelfClosingElement(node));
411
400
  const collectMatchingTags = (localName) => {
412
- for (const node of allJsxElements) {
413
- const tagName = node.getTagNameNode().getText();
401
+ for (const node of source.jsxElements) {
402
+ const tagName = getJsxTagName(source, node);
414
403
  if (tagName === localName || tagName.startsWith(`${localName}.`)) {
415
- const key = `${tagName}:${node.getStart()}`;
404
+ const key = `${tagName}:${node.start}`;
416
405
  if (!seenTags.has(key)) {
417
406
  seenTags.add(key);
418
407
  references.push(node);
@@ -420,11 +409,11 @@ const findComponentReferences = (sourceFile, componentName, jsxElementsCache) =>
420
409
  }
421
410
  }
422
411
  };
423
- sourceFile.getImportDeclarations().forEach((importDecl) => {
424
- if (!isUdsComponentModule(getModuleSpecifierValue(importDecl))) return;
425
- importDecl.getNamedImports().forEach((namedImport) => {
426
- if (namedImport.getName() !== componentName || isTypeOnlyNamedImport(importDecl, componentName)) return;
427
- collectMatchingTags(namedImport.getAliasNode()?.getText() ?? componentName);
412
+ source.staticImports.forEach((staticImport) => {
413
+ if (!isUdsComponentModule(staticImport.moduleRequest.value)) return;
414
+ staticImport.entries.forEach((entry) => {
415
+ if (entry.importName.kind !== "Name" || entry.importName.name !== componentName || entry.isType) return;
416
+ collectMatchingTags(entry.localName.value);
428
417
  });
429
418
  });
430
419
  return references;
@@ -438,22 +427,21 @@ const findComponentReferences = (sourceFile, componentName, jsxElementsCache) =>
438
427
  * 3. Otherwise the spread is unknown: reported via `unknownSpreadWrappers` so the
439
428
  * caller can over-include variant classes and emit cross-file metadata.
440
429
  */
441
- const extractPropsFromReference = (reference, stats, sourceFile, purgeContext) => {
430
+ const extractPropsFromReference = (reference, stats, source, purgeContext) => {
442
431
  const props = [];
443
432
  const unknownSpreadWrappers = [];
444
- reference.getAttributes().forEach((attr) => {
445
- if (attr.asKind(SyntaxKind.JsxAttribute)) {
446
- const jsxAttr = attr.asKindOrThrow(SyntaxKind.JsxAttribute);
447
- const propName = jsxAttr.getNameNode().getText();
433
+ reference.attributes.forEach((attr) => {
434
+ if (attr.type === "JSXAttribute") {
435
+ const propName = getJsxAttributeName(source, attr);
448
436
  const values = [];
449
- const initializer = jsxAttr.getInitializer();
450
- if (initializer && Node.isStringLiteral(initializer)) {
451
- values.push(initializer.getLiteralText());
437
+ const initializer = attr.value;
438
+ if (initializer && isStringLiteral(initializer)) {
439
+ values.push(getStringLiteralValue(initializer));
452
440
  stats.expressionsResolved++;
453
- } else if (initializer && initializer.asKind(SyntaxKind.JsxExpression)) {
454
- const expression = initializer.asKindOrThrow(SyntaxKind.JsxExpression).getExpression();
455
- if (expression) {
456
- const resolved = extractStringLiterals(expression);
441
+ } else if (initializer && initializer.type === "JSXExpressionContainer") {
442
+ const expression = initializer.expression;
443
+ if (expression && expression.type !== "JSXEmptyExpression") {
444
+ const resolved = extractStringLiterals(expression, source);
457
445
  values.push(...resolved);
458
446
  if (resolved.length > 0) stats.expressionsResolved++;
459
447
  }
@@ -464,9 +452,10 @@ const extractPropsFromReference = (reference, stats, sourceFile, purgeContext) =
464
452
  fromSpread: false
465
453
  });
466
454
  }
467
- if (attr.asKind(SyntaxKind.JsxSpreadAttribute)) {
468
- const spreadName = attr.asKindOrThrow(SyntaxKind.JsxSpreadAttribute).getExpression().getText();
469
- const resolvedSpreadProps = traceSpreadInFile(spreadName, sourceFile);
455
+ if (attr.type === "JSXSpreadAttribute") {
456
+ const expression = attr.argument;
457
+ const spreadName = getText(source, expression);
458
+ const resolvedSpreadProps = traceSpreadInFile(spreadName, source);
470
459
  if (resolvedSpreadProps.length > 0) {
471
460
  stats.spreadsTraced++;
472
461
  resolvedSpreadProps.forEach(([propName, values]) => {
@@ -478,7 +467,7 @@ const extractPropsFromReference = (reference, stats, sourceFile, purgeContext) =
478
467
  });
479
468
  return;
480
469
  }
481
- const usageResolved = resolveSpreadFromUsages(reference, spreadName, purgeContext);
470
+ const usageResolved = resolveSpreadFromUsages(reference, spreadName, source, purgeContext);
482
471
  if (usageResolved) {
483
472
  usageResolved.forEach((values, propName) => {
484
473
  props.push({
@@ -490,7 +479,7 @@ const extractPropsFromReference = (reference, stats, sourceFile, purgeContext) =
490
479
  return;
491
480
  }
492
481
  stats.spreadsUnresolved++;
493
- const parentInfo = getParentComponentInfo(reference);
482
+ const parentInfo = getParentComponentInfo(reference, source);
494
483
  const isWrapperParamSpread = parentInfo && (parentInfo.spreadRestIdentifier === spreadName || parentInfo.paramIdentifier === spreadName);
495
484
  unknownSpreadWrappers.push(isWrapperParamSpread ? parentInfo.componentName : void 0);
496
485
  }
@@ -503,19 +492,18 @@ const extractPropsFromReference = (reference, stats, sourceFile, purgeContext) =
503
492
  /**
504
493
  * Trace spread props to their source within the same file.
505
494
  */
506
- const traceSpreadInFile = (spreadName, sourceFile) => {
495
+ const traceSpreadInFile = (spreadName, source) => {
507
496
  const props = /* @__PURE__ */ new Map();
508
- const varDecl = sourceFile.getDescendantsOfKind(SyntaxKind.VariableDeclaration).find((declaration) => declaration.getName() === spreadName);
497
+ const varDecl = source.variableDeclarators.find((declaration) => declaration.id.type === "Identifier" && declaration.id.name === spreadName);
509
498
  if (!varDecl) return [];
510
- const initializer = varDecl.getInitializer();
499
+ const initializer = varDecl.init;
511
500
  if (!initializer) return [];
512
501
  getSpreadObjectLiteralCandidates(initializer).forEach((objLiteral) => {
513
- objLiteral.getProperties().forEach((prop) => {
514
- if (!prop.asKind(SyntaxKind.PropertyAssignment)) return;
515
- const propAssign = prop.asKindOrThrow(SyntaxKind.PropertyAssignment);
516
- const propName = propAssign.getName();
517
- const propInit = propAssign.getInitializer();
518
- const values = propInit ? extractStringLiterals(propInit) : [];
502
+ objLiteral.properties.forEach((prop) => {
503
+ if (prop.type !== "Property" || prop.shorthand) return;
504
+ const propName = getPropertyName(source, prop);
505
+ const propInit = prop.value;
506
+ const values = propInit ? extractStringLiterals(propInit, source) : [];
519
507
  const existingValues = props.get(propName) ?? /* @__PURE__ */ new Set();
520
508
  values.forEach((value) => existingValues.add(value));
521
509
  props.set(propName, existingValues);
@@ -524,10 +512,10 @@ const traceSpreadInFile = (spreadName, sourceFile) => {
524
512
  return [...props.entries()].map(([propName, values]) => [propName, [...values]]);
525
513
  };
526
514
  const getSpreadObjectLiteralCandidates = (node) => {
527
- if (Node.isObjectLiteralExpression(node)) return [node];
528
- if (Node.isParenthesizedExpression(node)) return getSpreadObjectLiteralCandidates(node.getExpression());
529
- if (Node.isAsExpression(node) || Node.isTypeAssertion(node) || Node.isSatisfiesExpression(node)) return getSpreadObjectLiteralCandidates(node.getExpression());
530
- if (Node.isConditionalExpression(node)) return [...getSpreadObjectLiteralCandidates(node.getWhenTrue()), ...getSpreadObjectLiteralCandidates(node.getWhenFalse())];
515
+ if (node.type === "ObjectExpression") return [node];
516
+ if (node.type === "ParenthesizedExpression") return getSpreadObjectLiteralCandidates(node.expression);
517
+ if (node.type === "TSAsExpression" || node.type === "TSTypeAssertion" || node.type === "TSSatisfiesExpression") return getSpreadObjectLiteralCandidates(node.expression);
518
+ if (node.type === "ConditionalExpression") return [...getSpreadObjectLiteralCandidates(node.consequent), ...getSpreadObjectLiteralCandidates(node.alternate)];
531
519
  return [];
532
520
  };
533
521
  /**
@@ -535,22 +523,22 @@ const getSpreadObjectLiteralCandidates = (node) => {
535
523
  * This handles cases like:
536
524
  * const styles = getStyles({ backgroundColor: 'brand', spacing: '4' });
537
525
  */
538
- const extractGetStylesCalls = (sourceFile, stats, variants) => {
526
+ const extractGetStylesCalls = (source, stats, variants) => {
539
527
  const props = /* @__PURE__ */ new Map();
540
528
  const VALID_VARIANTS = new Set(Object.keys(variants));
541
- sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression).forEach((call) => {
542
- if (call.getExpression().getText() !== "getStyles") return;
543
- const args = call.getArguments();
529
+ source.callExpressions.forEach((call) => {
530
+ if (getText(source, call.callee) !== "getStyles") return;
531
+ const args = call.arguments;
544
532
  if (args.length === 0) return;
545
533
  const firstArg = args[0];
546
- if (!firstArg.asKind(SyntaxKind.ObjectLiteralExpression)) return;
547
- firstArg.asKindOrThrow(SyntaxKind.ObjectLiteralExpression).getProperties().forEach((prop) => {
548
- if (prop.asKind(SyntaxKind.PropertyAssignment)) {
549
- const propAssign = prop.asKindOrThrow(SyntaxKind.PropertyAssignment);
550
- const propName = propAssign.getName();
551
- const propInit = propAssign.getInitializer();
534
+ if (firstArg.type !== "ObjectExpression") return;
535
+ firstArg.properties.forEach((prop) => {
536
+ if (prop.type !== "Property") return;
537
+ if (!prop.shorthand) {
538
+ const propName = getPropertyName(source, prop);
539
+ const propInit = prop.value;
552
540
  if (propInit && VALID_VARIANTS.has(propName)) {
553
- const values = extractStringLiterals(propInit);
541
+ const values = extractStringLiterals(propInit, source);
554
542
  if (values.length > 0) {
555
543
  const existing = props.get(propName) ?? /* @__PURE__ */ new Set();
556
544
  values.forEach((v) => existing.add(v));
@@ -558,11 +546,10 @@ const extractGetStylesCalls = (sourceFile, stats, variants) => {
558
546
  stats.expressionsResolved++;
559
547
  }
560
548
  }
561
- } else if (prop.asKind(SyntaxKind.ShorthandPropertyAssignment)) {
562
- const shorthand = prop.asKindOrThrow(SyntaxKind.ShorthandPropertyAssignment);
563
- const propName = shorthand.getName();
549
+ } else {
550
+ const propName = getPropertyName(source, prop);
564
551
  if (VALID_VARIANTS.has(propName)) {
565
- const values = extractStringLiterals(shorthand.getNameNode());
552
+ const values = extractStringLiterals(prop.value, source);
566
553
  if (values.length > 0) {
567
554
  const existing = props.get(propName) ?? /* @__PURE__ */ new Set();
568
555
  values.forEach((v) => existing.add(v));
@@ -618,21 +605,20 @@ const resolveWrapperSpreadSafelist = (wrapperSpreads, sources, variants) => {
618
605
  const wrapperNames = [...targetsByWrapper.keys()];
619
606
  const usageProps = /* @__PURE__ */ new Map();
620
607
  sources.filter((code) => wrapperNames.some((name) => code.includes(`<${name}`))).forEach((code) => {
621
- new Project({ useInMemoryFileSystem: true }).createSourceFile("wrapper-usage.tsx", code, { overwrite: true }).getDescendants().forEach((node) => {
622
- if (!Node.isJsxOpeningElement(node) && !Node.isJsxSelfClosingElement(node)) return;
623
- const tagName = node.getTagNameNode().getText();
608
+ const source = parseSource("wrapper-usage.tsx", code);
609
+ source.jsxElements.forEach((node) => {
610
+ const tagName = getJsxTagName(source, node);
624
611
  if (!targetsByWrapper.has(tagName)) return;
625
612
  const propsMap = usageProps.get(tagName) ?? /* @__PURE__ */ new Map();
626
- node.getAttributes().forEach((attr) => {
627
- const jsxAttr = attr.asKind(SyntaxKind.JsxAttribute);
628
- if (!jsxAttr) return;
629
- const propName = jsxAttr.getNameNode().getText();
613
+ node.attributes.forEach((attr) => {
614
+ if (attr.type !== "JSXAttribute") return;
615
+ const propName = getJsxAttributeName(source, attr);
630
616
  const values = [];
631
- const initializer = jsxAttr.getInitializer();
632
- if (initializer && Node.isStringLiteral(initializer)) values.push(initializer.getLiteralText());
633
- else if (initializer && Node.isJsxExpression(initializer)) {
634
- const expression = initializer.getExpression();
635
- if (expression) values.push(...extractStringLiterals(expression));
617
+ const initializer = attr.value;
618
+ if (initializer && isStringLiteral(initializer)) values.push(getStringLiteralValue(initializer));
619
+ else if (initializer && initializer.type === "JSXExpressionContainer") {
620
+ const expression = initializer.expression;
621
+ if (expression && expression.type !== "JSXEmptyExpression") values.push(...extractStringLiterals(expression, source));
636
622
  }
637
623
  if (values.length === 0) return;
638
624
  const existing = propsMap.get(propName) ?? /* @__PURE__ */ new Set();
@@ -10,8 +10,8 @@ declare function getShadowStyles({
10
10
  }: {
11
11
  config: UniversalTokensConfig;
12
12
  shadowType: ShadowType;
13
- }): Record<".uds-inset-shadow-sm" | ".uds-inset-shadow-md" | ".uds-inset-shadow-lg" | ".uds-inset-shadow-xl" | ".uds-inset-shadow-2xl" | ".uds-inset-shadow-none" | ".uds-inset-shadow-xs" | ".uds-inset-shadow-elevation-0" | ".uds-inset-shadow-elevation-1" | ".uds-inset-shadow-elevation-2" | ".uds-inset-shadow-elevation-3" | ".uds-inset-shadow-elevation-4" | ".uds-inset-shadow-elevation-5" | ".uds-drop-shadow-sm" | ".uds-drop-shadow-md" | ".uds-drop-shadow-lg" | ".uds-drop-shadow-xl" | ".uds-drop-shadow-2xl" | ".uds-drop-shadow-none" | ".uds-drop-shadow-xs" | ".uds-drop-shadow-elevation-0" | ".uds-drop-shadow-elevation-1" | ".uds-drop-shadow-elevation-2" | ".uds-drop-shadow-elevation-3" | ".uds-drop-shadow-elevation-4" | ".uds-drop-shadow-elevation-5", {
14
- readonly [x: string]: "var(--uds-inset-shadow-sm)" | "var(--uds-inset-shadow-md)" | "var(--uds-inset-shadow-lg)" | "var(--uds-inset-shadow-xl)" | "var(--uds-inset-shadow-2xl)" | "var(--uds-inset-shadow-none)" | "var(--uds-inset-shadow-xs)" | "var(--uds-inset-shadow-elevation-0)" | "var(--uds-inset-shadow-elevation-1)" | "var(--uds-inset-shadow-elevation-2)" | "var(--uds-inset-shadow-elevation-3)" | "var(--uds-inset-shadow-elevation-4)" | "var(--uds-inset-shadow-elevation-5)" | "var(--uds-drop-shadow-sm)" | "var(--uds-drop-shadow-md)" | "var(--uds-drop-shadow-lg)" | "var(--uds-drop-shadow-xl)" | "var(--uds-drop-shadow-2xl)" | "var(--uds-drop-shadow-none)" | "var(--uds-drop-shadow-xs)" | "var(--uds-drop-shadow-elevation-0)" | "var(--uds-drop-shadow-elevation-1)" | "var(--uds-drop-shadow-elevation-2)" | "var(--uds-drop-shadow-elevation-3)" | "var(--uds-drop-shadow-elevation-4)" | "var(--uds-drop-shadow-elevation-5)" | "var(--uds-drop-shadow, 0 0 transparent), var(--uds-inset-shadow, 0 0 transparent), var(--tw-ring-offset-shadow, 0 0 transparent), var(--tw-ring-shadow, 0 0 transparent), var(--tw-shadow, 0 0 transparent)";
13
+ }): Record<".uds-inset-shadow-none" | ".uds-inset-shadow-xs" | ".uds-inset-shadow-sm" | ".uds-inset-shadow-md" | ".uds-inset-shadow-lg" | ".uds-inset-shadow-xl" | ".uds-inset-shadow-2xl" | ".uds-inset-shadow-elevation-0" | ".uds-inset-shadow-elevation-1" | ".uds-inset-shadow-elevation-2" | ".uds-inset-shadow-elevation-3" | ".uds-inset-shadow-elevation-4" | ".uds-inset-shadow-elevation-5" | ".uds-drop-shadow-none" | ".uds-drop-shadow-xs" | ".uds-drop-shadow-sm" | ".uds-drop-shadow-md" | ".uds-drop-shadow-lg" | ".uds-drop-shadow-xl" | ".uds-drop-shadow-2xl" | ".uds-drop-shadow-elevation-0" | ".uds-drop-shadow-elevation-1" | ".uds-drop-shadow-elevation-2" | ".uds-drop-shadow-elevation-3" | ".uds-drop-shadow-elevation-4" | ".uds-drop-shadow-elevation-5", {
14
+ readonly [x: string]: "var(--uds-inset-shadow-none)" | "var(--uds-inset-shadow-xs)" | "var(--uds-inset-shadow-sm)" | "var(--uds-inset-shadow-md)" | "var(--uds-inset-shadow-lg)" | "var(--uds-inset-shadow-xl)" | "var(--uds-inset-shadow-2xl)" | "var(--uds-inset-shadow-elevation-0)" | "var(--uds-inset-shadow-elevation-1)" | "var(--uds-inset-shadow-elevation-2)" | "var(--uds-inset-shadow-elevation-3)" | "var(--uds-inset-shadow-elevation-4)" | "var(--uds-inset-shadow-elevation-5)" | "var(--uds-drop-shadow-none)" | "var(--uds-drop-shadow-xs)" | "var(--uds-drop-shadow-sm)" | "var(--uds-drop-shadow-md)" | "var(--uds-drop-shadow-lg)" | "var(--uds-drop-shadow-xl)" | "var(--uds-drop-shadow-2xl)" | "var(--uds-drop-shadow-elevation-0)" | "var(--uds-drop-shadow-elevation-1)" | "var(--uds-drop-shadow-elevation-2)" | "var(--uds-drop-shadow-elevation-3)" | "var(--uds-drop-shadow-elevation-4)" | "var(--uds-drop-shadow-elevation-5)" | "var(--uds-drop-shadow, 0 0 transparent), var(--uds-inset-shadow, 0 0 transparent), var(--tw-ring-offset-shadow, 0 0 transparent), var(--tw-ring-shadow, 0 0 transparent), var(--tw-shadow, 0 0 transparent)";
15
15
  readonly boxShadow: "var(--uds-drop-shadow, 0 0 transparent), var(--uds-inset-shadow, 0 0 transparent), var(--tw-ring-offset-shadow, 0 0 transparent), var(--tw-ring-shadow, 0 0 transparent), var(--tw-shadow, 0 0 transparent)";
16
16
  }>; //#endregion
17
17
  //#endregion
@@ -10,8 +10,8 @@ declare function getShadowStyles({
10
10
  }: {
11
11
  config: UniversalTokensConfig;
12
12
  shadowType: ShadowType;
13
- }): Record<".uds-inset-shadow-sm" | ".uds-inset-shadow-md" | ".uds-inset-shadow-lg" | ".uds-inset-shadow-xl" | ".uds-inset-shadow-2xl" | ".uds-inset-shadow-none" | ".uds-inset-shadow-xs" | ".uds-inset-shadow-elevation-0" | ".uds-inset-shadow-elevation-1" | ".uds-inset-shadow-elevation-2" | ".uds-inset-shadow-elevation-3" | ".uds-inset-shadow-elevation-4" | ".uds-inset-shadow-elevation-5" | ".uds-drop-shadow-sm" | ".uds-drop-shadow-md" | ".uds-drop-shadow-lg" | ".uds-drop-shadow-xl" | ".uds-drop-shadow-2xl" | ".uds-drop-shadow-none" | ".uds-drop-shadow-xs" | ".uds-drop-shadow-elevation-0" | ".uds-drop-shadow-elevation-1" | ".uds-drop-shadow-elevation-2" | ".uds-drop-shadow-elevation-3" | ".uds-drop-shadow-elevation-4" | ".uds-drop-shadow-elevation-5", {
14
- readonly [x: string]: "var(--uds-inset-shadow-sm)" | "var(--uds-inset-shadow-md)" | "var(--uds-inset-shadow-lg)" | "var(--uds-inset-shadow-xl)" | "var(--uds-inset-shadow-2xl)" | "var(--uds-inset-shadow-none)" | "var(--uds-inset-shadow-xs)" | "var(--uds-inset-shadow-elevation-0)" | "var(--uds-inset-shadow-elevation-1)" | "var(--uds-inset-shadow-elevation-2)" | "var(--uds-inset-shadow-elevation-3)" | "var(--uds-inset-shadow-elevation-4)" | "var(--uds-inset-shadow-elevation-5)" | "var(--uds-drop-shadow-sm)" | "var(--uds-drop-shadow-md)" | "var(--uds-drop-shadow-lg)" | "var(--uds-drop-shadow-xl)" | "var(--uds-drop-shadow-2xl)" | "var(--uds-drop-shadow-none)" | "var(--uds-drop-shadow-xs)" | "var(--uds-drop-shadow-elevation-0)" | "var(--uds-drop-shadow-elevation-1)" | "var(--uds-drop-shadow-elevation-2)" | "var(--uds-drop-shadow-elevation-3)" | "var(--uds-drop-shadow-elevation-4)" | "var(--uds-drop-shadow-elevation-5)" | "var(--uds-drop-shadow, 0 0 transparent), var(--uds-inset-shadow, 0 0 transparent), var(--tw-ring-offset-shadow, 0 0 transparent), var(--tw-ring-shadow, 0 0 transparent), var(--tw-shadow, 0 0 transparent)";
13
+ }): Record<".uds-inset-shadow-none" | ".uds-inset-shadow-xs" | ".uds-inset-shadow-sm" | ".uds-inset-shadow-md" | ".uds-inset-shadow-lg" | ".uds-inset-shadow-xl" | ".uds-inset-shadow-2xl" | ".uds-inset-shadow-elevation-0" | ".uds-inset-shadow-elevation-1" | ".uds-inset-shadow-elevation-2" | ".uds-inset-shadow-elevation-3" | ".uds-inset-shadow-elevation-4" | ".uds-inset-shadow-elevation-5" | ".uds-drop-shadow-none" | ".uds-drop-shadow-xs" | ".uds-drop-shadow-sm" | ".uds-drop-shadow-md" | ".uds-drop-shadow-lg" | ".uds-drop-shadow-xl" | ".uds-drop-shadow-2xl" | ".uds-drop-shadow-elevation-0" | ".uds-drop-shadow-elevation-1" | ".uds-drop-shadow-elevation-2" | ".uds-drop-shadow-elevation-3" | ".uds-drop-shadow-elevation-4" | ".uds-drop-shadow-elevation-5", {
14
+ readonly [x: string]: "var(--uds-inset-shadow-none)" | "var(--uds-inset-shadow-xs)" | "var(--uds-inset-shadow-sm)" | "var(--uds-inset-shadow-md)" | "var(--uds-inset-shadow-lg)" | "var(--uds-inset-shadow-xl)" | "var(--uds-inset-shadow-2xl)" | "var(--uds-inset-shadow-elevation-0)" | "var(--uds-inset-shadow-elevation-1)" | "var(--uds-inset-shadow-elevation-2)" | "var(--uds-inset-shadow-elevation-3)" | "var(--uds-inset-shadow-elevation-4)" | "var(--uds-inset-shadow-elevation-5)" | "var(--uds-drop-shadow-none)" | "var(--uds-drop-shadow-xs)" | "var(--uds-drop-shadow-sm)" | "var(--uds-drop-shadow-md)" | "var(--uds-drop-shadow-lg)" | "var(--uds-drop-shadow-xl)" | "var(--uds-drop-shadow-2xl)" | "var(--uds-drop-shadow-elevation-0)" | "var(--uds-drop-shadow-elevation-1)" | "var(--uds-drop-shadow-elevation-2)" | "var(--uds-drop-shadow-elevation-3)" | "var(--uds-drop-shadow-elevation-4)" | "var(--uds-drop-shadow-elevation-5)" | "var(--uds-drop-shadow, 0 0 transparent), var(--uds-inset-shadow, 0 0 transparent), var(--tw-ring-offset-shadow, 0 0 transparent), var(--tw-ring-shadow, 0 0 transparent), var(--tw-shadow, 0 0 transparent)";
15
15
  readonly boxShadow: "var(--uds-drop-shadow, 0 0 transparent), var(--uds-inset-shadow, 0 0 transparent), var(--tw-ring-offset-shadow, 0 0 transparent), var(--tw-ring-shadow, 0 0 transparent), var(--tw-shadow, 0 0 transparent)";
16
16
  }>; //#endregion
17
17
  //#endregion
@@ -8,9 +8,9 @@ const require_index = require("../../packages/css-tokens/dist/index.cjs");
8
8
  let node_fs = require("node:fs");
9
9
  let node_path = require("node:path");
10
10
  node_path = require_runtime.__toESM(node_path, 1);
11
- let ts_morph = require("ts-morph");
12
11
  let fast_glob = require("fast-glob");
13
12
  fast_glob = require_runtime.__toESM(fast_glob, 1);
13
+ let ts_morph = require("ts-morph");
14
14
  //#region ../tailwind-v3/dist/purger/legacy/purgeCSS.mjs
15
15
  /*! © 2026 Yahoo, Inc. UDS Tailwind and Purger v0.0.0-development */
16
16
  const scaleModeToClass = {
@@ -6,8 +6,8 @@ import { findReferencesAsJsxElements, getUsedPropsInReference } from "../../util
6
6
  import { DARK_COLOR_MODE_CLASSNAME, LARGE_SCALE_MODE_CLASSNAME, LIGHT_COLOR_MODE_CLASSNAME, MEDIUM_SCALE_MODE_CLASSNAME, SMALL_SCALE_MODE_CLASSNAME, XLARGE_SCALE_MODE_CLASSNAME, XSMALL_SCALE_MODE_CLASSNAME, XXLARGE_SCALE_MODE_CLASSNAME, XXXLARGE_SCALE_MODE_CLASSNAME } from "../../packages/css-tokens/dist/index.js";
7
7
  import { mkdirSync, writeFileSync } from "node:fs";
8
8
  import path from "node:path";
9
- import { Node, Project, SyntaxKind, ts } from "ts-morph";
10
9
  import fg from "fast-glob";
10
+ import { Node, Project, SyntaxKind, ts } from "ts-morph";
11
11
  //#region ../tailwind-v3/dist/purger/legacy/purgeCSS.mjs
12
12
  /*! © 2026 Yahoo, Inc. UDS Tailwind and Purger v0.0.0-development */
13
13
  const scaleModeToClass = {