@yahoo/uds 3.167.0 → 3.168.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.
Files changed (53) hide show
  1. package/dist/automated-config/dist/generated/generatedConfigs.cjs +92 -46
  2. package/dist/automated-config/dist/generated/generatedConfigs.d.cts +46 -0
  3. package/dist/automated-config/dist/generated/generatedConfigs.d.ts +46 -0
  4. package/dist/automated-config/dist/generated/generatedConfigs.js +92 -46
  5. package/dist/automated-config/dist/types/ComponentConfig.d.cts +24 -1
  6. package/dist/automated-config/dist/types/ComponentConfig.d.ts +24 -1
  7. package/dist/automated-config/dist/utils/getConfigVariantProperties.d.cts +2 -2
  8. package/dist/automated-config/dist/utils/getConfigVariantProperties.d.ts +2 -2
  9. package/dist/automated-config/dist/utils/index.cjs +32 -3
  10. package/dist/automated-config/dist/utils/index.d.cts +9 -1
  11. package/dist/automated-config/dist/utils/index.d.ts +9 -1
  12. package/dist/automated-config/dist/utils/index.js +33 -4
  13. package/dist/components/IconSlot.cjs +29 -0
  14. package/dist/components/IconSlot.js +29 -0
  15. package/dist/components/client/Popover/UDSPopoverConfigProvider.d.cts +1 -1
  16. package/dist/components/client/Popover/UDSPopoverConfigProvider.d.ts +1 -1
  17. package/dist/css-tokens/dist/index.cjs +26 -0
  18. package/dist/css-tokens/dist/index.d.cts +25 -1
  19. package/dist/css-tokens/dist/index.d.ts +25 -1
  20. package/dist/css-tokens/dist/index.js +25 -1
  21. package/dist/index.cjs +2 -0
  22. package/dist/index.d.cts +3 -3
  23. package/dist/index.d.ts +3 -3
  24. package/dist/index.js +2 -2
  25. package/dist/styles/styler.d.cts +15 -15
  26. package/dist/styles/styler.d.ts +15 -15
  27. package/dist/tailwind-internal/dist/packages/automated-config/dist/generated/generatedConfigs.cjs +92 -46
  28. package/dist/tailwind-internal/dist/packages/automated-config/dist/generated/generatedConfigs.js +92 -46
  29. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/index.cjs +32 -3
  30. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/index.js +33 -4
  31. package/dist/tailwind-internal/dist/packages/css-tokens/dist/index.cjs +26 -0
  32. package/dist/tailwind-internal/dist/packages/css-tokens/dist/index.js +25 -1
  33. package/dist/tailwind-internal/dist/utils/getShadowStyles.d.cts +2 -2
  34. package/dist/tailwind-internal/dist/utils/getShadowStyles.d.ts +2 -2
  35. package/dist/tokens/consts/cssTokens.cjs +2 -0
  36. package/dist/tokens/consts/cssTokens.d.cts +2 -2
  37. package/dist/tokens/consts/cssTokens.d.ts +2 -2
  38. package/dist/tokens/consts/cssTokens.js +2 -2
  39. package/dist/tokens/index.cjs +2 -0
  40. package/dist/tokens/index.d.cts +3 -3
  41. package/dist/tokens/index.d.ts +3 -3
  42. package/dist/tokens/index.js +2 -2
  43. package/dist/tokens/types.d.cts +2 -2
  44. package/dist/tokens/types.d.ts +2 -2
  45. package/dist/uds/generated/componentData.cjs +2572 -2572
  46. package/dist/uds/generated/componentData.js +2572 -2572
  47. package/dist/uds/generated/tailwindPurge.cjs +2 -1
  48. package/dist/uds/generated/tailwindPurge.js +2 -1
  49. package/dist/uds/package.cjs +1 -1
  50. package/dist/uds/package.js +1 -1
  51. package/generated/componentData.json +3286 -3286
  52. package/generated/tailwindPurge.ts +1 -1
  53. package/package.json +2 -2
@@ -2665,7 +2665,8 @@ const AvatarConfig = {
2665
2665
  "md",
2666
2666
  "lg"
2667
2667
  ]]
2668
- } }
2668
+ } },
2669
+ userOverridableProperties: ["iconSize"]
2669
2670
  },
2670
2671
  root: {
2671
2672
  label: "root",
@@ -2902,7 +2903,8 @@ const BadgeConfig = {
2902
2903
  "md",
2903
2904
  "lg"
2904
2905
  ]]
2905
- } }
2906
+ } },
2907
+ userOverridableProperties: ["iconSize"]
2906
2908
  },
2907
2909
  root: {
2908
2910
  label: "root",
@@ -3503,7 +3505,8 @@ const BadgeConfig = {
3503
3505
  "always/accent"
3504
3506
  ]
3505
3507
  ]
3506
- } }
3508
+ } },
3509
+ userOverridableProperties: ["color"]
3507
3510
  },
3508
3511
  root: {
3509
3512
  label: "root",
@@ -4852,7 +4855,8 @@ const BannerConfig = {
4852
4855
  "md",
4853
4856
  "lg"
4854
4857
  ]]
4855
- } }
4858
+ } },
4859
+ userOverridableProperties: ["iconSize"]
4856
4860
  },
4857
4861
  root: {
4858
4862
  label: "root",
@@ -5858,7 +5862,8 @@ const BannerConfig = {
5858
5862
  "always/accent"
5859
5863
  ]
5860
5864
  ]
5861
- } }
5865
+ } },
5866
+ userOverridableProperties: ["color"]
5862
5867
  },
5863
5868
  root: {
5864
5869
  label: "root",
@@ -8812,7 +8817,8 @@ const ButtonConfig = {
8812
8817
  "md",
8813
8818
  "lg"
8814
8819
  ]]
8815
- } }
8820
+ } },
8821
+ userOverridableProperties: ["iconSize"]
8816
8822
  },
8817
8823
  root: {
8818
8824
  label: "root",
@@ -9427,7 +9433,8 @@ const ButtonConfig = {
9427
9433
  "always/accent"
9428
9434
  ]
9429
9435
  ]
9430
- } }
9436
+ } },
9437
+ userOverridableProperties: ["color"]
9431
9438
  },
9432
9439
  root: {
9433
9440
  label: "root",
@@ -13158,7 +13165,8 @@ const ChipConfig = {
13158
13165
  "always/accent"
13159
13166
  ]
13160
13167
  ]
13161
- } }
13168
+ } },
13169
+ userOverridableProperties: ["color"]
13162
13170
  },
13163
13171
  root: {
13164
13172
  label: "root",
@@ -14711,7 +14719,8 @@ const ChipConfig = {
14711
14719
  "always/accent"
14712
14720
  ]
14713
14721
  ]
14714
- } }
14722
+ } },
14723
+ userOverridableProperties: ["color"]
14715
14724
  },
14716
14725
  root: {
14717
14726
  label: "root",
@@ -16263,7 +16272,8 @@ const ChipConfig = {
16263
16272
  "always/accent"
16264
16273
  ]
16265
16274
  ]
16266
- } }
16275
+ } },
16276
+ userOverridableProperties: ["color"]
16267
16277
  },
16268
16278
  root: {
16269
16279
  label: "root",
@@ -17468,7 +17478,8 @@ const ChipConfig = {
17468
17478
  "md",
17469
17479
  "lg"
17470
17480
  ]]
17471
- } }
17481
+ } },
17482
+ userOverridableProperties: ["iconSize"]
17472
17483
  },
17473
17484
  root: {
17474
17485
  label: "root",
@@ -18606,7 +18617,8 @@ const IconButtonConfig = {
18606
18617
  "md",
18607
18618
  "lg"
18608
18619
  ]]
18609
- } }
18620
+ } },
18621
+ userOverridableProperties: ["iconSize"]
18610
18622
  },
18611
18623
  root: {
18612
18624
  label: "root",
@@ -18742,7 +18754,8 @@ const InputConfig = {
18742
18754
  "md",
18743
18755
  "lg"
18744
18756
  ]]
18745
- } }
18757
+ } },
18758
+ userOverridableProperties: ["iconSize"]
18746
18759
  },
18747
18760
  helperIcon: {
18748
18761
  label: "helperIcon",
@@ -18760,7 +18773,8 @@ const InputConfig = {
18760
18773
  "md",
18761
18774
  "lg"
18762
18775
  ]]
18763
- } }
18776
+ } },
18777
+ userOverridableProperties: ["iconSize"]
18764
18778
  },
18765
18779
  helperText: {
18766
18780
  label: "helperText",
@@ -19198,7 +19212,8 @@ const InputConfig = {
19198
19212
  "md",
19199
19213
  "lg"
19200
19214
  ]]
19201
- } }
19215
+ } },
19216
+ userOverridableProperties: ["iconSize"]
19202
19217
  }
19203
19218
  },
19204
19219
  options: ["md", "lg"]
@@ -19580,7 +19595,8 @@ const InputConfig = {
19580
19595
  "always/accent"
19581
19596
  ]
19582
19597
  ]
19583
- } }
19598
+ } },
19599
+ userOverridableProperties: ["color"]
19584
19600
  },
19585
19601
  helperIcon: {
19586
19602
  atomicStates: [
@@ -19950,7 +19966,8 @@ const InputConfig = {
19950
19966
  "always/accent"
19951
19967
  ]
19952
19968
  ]
19953
- } }
19969
+ } },
19970
+ userOverridableProperties: ["color"]
19954
19971
  },
19955
19972
  helperText: {
19956
19973
  atomicStates: [
@@ -22903,7 +22920,8 @@ const InputConfig = {
22903
22920
  "always/accent"
22904
22921
  ]
22905
22922
  ]
22906
- } }
22923
+ } },
22924
+ userOverridableProperties: ["color"]
22907
22925
  }
22908
22926
  },
22909
22927
  options: ["default"]
@@ -22955,7 +22973,8 @@ const LinkConfig = {
22955
22973
  "md",
22956
22974
  "lg"
22957
22975
  ]]
22958
- } }
22976
+ } },
22977
+ userOverridableProperties: ["iconSize"]
22959
22978
  },
22960
22979
  root: {
22961
22980
  label: "root",
@@ -23426,7 +23445,8 @@ const LinkConfig = {
23426
23445
  "always/accent"
23427
23446
  ]
23428
23447
  ]
23429
- } }
23448
+ } },
23449
+ userOverridableProperties: ["color"]
23430
23450
  },
23431
23451
  iconStart: {
23432
23452
  label: "iconStart",
@@ -23795,7 +23815,8 @@ const LinkConfig = {
23795
23815
  "always/accent"
23796
23816
  ]
23797
23817
  ]
23798
- } }
23818
+ } },
23819
+ userOverridableProperties: ["color"]
23799
23820
  },
23800
23821
  root: {
23801
23822
  label: "root",
@@ -25994,7 +26015,8 @@ const MenuItemConfig = {
25994
26015
  "always/accent"
25995
26016
  ]
25996
26017
  ]
25997
- } }
26018
+ } },
26019
+ userOverridableProperties: ["color"]
25998
26020
  },
25999
26021
  root: {
26000
26022
  label: "root",
@@ -27099,7 +27121,8 @@ const MenuItemConfig = {
27099
27121
  "always/accent"
27100
27122
  ]
27101
27123
  ]
27102
- } }
27124
+ } },
27125
+ userOverridableProperties: ["color"]
27103
27126
  },
27104
27127
  root: {
27105
27128
  label: "root",
@@ -27824,7 +27847,8 @@ const MenuItemConfig = {
27824
27847
  "always/accent"
27825
27848
  ]
27826
27849
  ]
27827
- } }
27850
+ } },
27851
+ userOverridableProperties: ["color"]
27828
27852
  },
27829
27853
  text: {
27830
27854
  label: "text",
@@ -28273,7 +28297,8 @@ const MenuItemConfig = {
28273
28297
  "md",
28274
28298
  "lg"
28275
28299
  ]]
28276
- } }
28300
+ } },
28301
+ userOverridableProperties: ["iconSize"]
28277
28302
  },
28278
28303
  root: {
28279
28304
  label: "root",
@@ -28292,7 +28317,8 @@ const MenuItemConfig = {
28292
28317
  "md",
28293
28318
  "lg"
28294
28319
  ]]
28295
- } }
28320
+ } },
28321
+ userOverridableProperties: ["iconSize"]
28296
28322
  },
28297
28323
  text: {
28298
28324
  label: "text",
@@ -28470,7 +28496,8 @@ const ModalConfig = {
28470
28496
  "md",
28471
28497
  "lg"
28472
28498
  ]]
28473
- } }
28499
+ } },
28500
+ userOverridableProperties: ["iconSize"]
28474
28501
  },
28475
28502
  closeIconContainer: {
28476
28503
  label: "closeIconContainer",
@@ -29298,7 +29325,8 @@ const ModalConfig = {
29298
29325
  "always/accent"
29299
29326
  ]
29300
29327
  ]
29301
- } }
29328
+ } },
29329
+ userOverridableProperties: ["color"]
29302
29330
  },
29303
29331
  description: {
29304
29332
  label: "description",
@@ -31175,7 +31203,8 @@ const PaddleNavConfig = {
31175
31203
  "md",
31176
31204
  "lg"
31177
31205
  ]]
31178
- } }
31206
+ } },
31207
+ userOverridableProperties: ["iconSize"]
31179
31208
  },
31180
31209
  root: {
31181
31210
  label: "root",
@@ -32186,7 +32215,8 @@ const PaddleNavConfig = {
32186
32215
  "always/accent"
32187
32216
  ]
32188
32217
  ]
32189
- } }
32218
+ } },
32219
+ userOverridableProperties: ["color"]
32190
32220
  },
32191
32221
  root: {
32192
32222
  label: "root",
@@ -32628,7 +32658,8 @@ const PaginationConfig = {
32628
32658
  "md",
32629
32659
  "lg"
32630
32660
  ]]
32631
- } }
32661
+ } },
32662
+ userOverridableProperties: ["iconSize"]
32632
32663
  },
32633
32664
  item: {
32634
32665
  label: "item",
@@ -34002,7 +34033,8 @@ const PopoverConfig = {
34002
34033
  "md",
34003
34034
  "lg"
34004
34035
  ]]
34005
- } }
34036
+ } },
34037
+ userOverridableProperties: ["iconSize"]
34006
34038
  },
34007
34039
  closeIconContainer: {
34008
34040
  label: "closeIconContainer",
@@ -34641,7 +34673,8 @@ const PopoverConfig = {
34641
34673
  "always/accent"
34642
34674
  ]
34643
34675
  ]
34644
- } }
34676
+ } },
34677
+ userOverridableProperties: ["color"]
34645
34678
  },
34646
34679
  root: {
34647
34680
  label: "root",
@@ -39963,7 +39996,8 @@ const SelectItemConfig = {
39963
39996
  "always/accent"
39964
39997
  ]
39965
39998
  ]
39966
- } }
39999
+ } },
40000
+ userOverridableProperties: ["color"]
39967
40001
  },
39968
40002
  root: {
39969
40003
  label: "root",
@@ -40726,7 +40760,8 @@ const SelectItemConfig = {
40726
40760
  "md",
40727
40761
  "lg"
40728
40762
  ]]
40729
- } }
40763
+ } },
40764
+ userOverridableProperties: ["iconSize"]
40730
40765
  },
40731
40766
  root: {
40732
40767
  label: "root",
@@ -40745,7 +40780,8 @@ const SelectItemConfig = {
40745
40780
  "md",
40746
40781
  "lg"
40747
40782
  ]]
40748
- } }
40783
+ } },
40784
+ userOverridableProperties: ["iconSize"]
40749
40785
  },
40750
40786
  text: {
40751
40787
  label: "text",
@@ -40932,7 +40968,8 @@ const SwitchConfig = {
40932
40968
  "md",
40933
40969
  "lg"
40934
40970
  ]]
40935
- } }
40971
+ } },
40972
+ userOverridableProperties: ["iconSize"]
40936
40973
  },
40937
40974
  root: {
40938
40975
  label: "root",
@@ -42063,7 +42100,8 @@ const SwitchConfig = {
42063
42100
  "muted",
42064
42101
  "on-color"
42065
42102
  ]]
42066
- } }
42103
+ } },
42104
+ userOverridableProperties: ["color"]
42067
42105
  },
42068
42106
  root: {
42069
42107
  label: "root",
@@ -43224,7 +43262,8 @@ const TabConfig = {
43224
43262
  "md",
43225
43263
  "lg"
43226
43264
  ]]
43227
- } }
43265
+ } },
43266
+ userOverridableProperties: ["iconSize"]
43228
43267
  },
43229
43268
  root: {
43230
43269
  label: "root",
@@ -43790,7 +43829,8 @@ const TabConfig = {
43790
43829
  "always/accent"
43791
43830
  ]
43792
43831
  ]
43793
- } }
43832
+ } },
43833
+ userOverridableProperties: ["color"]
43794
43834
  },
43795
43835
  root: {
43796
43836
  label: "root",
@@ -46418,7 +46458,8 @@ const ToastConfig = {
46418
46458
  "md",
46419
46459
  "lg"
46420
46460
  ]]
46421
- } }
46461
+ } },
46462
+ userOverridableProperties: ["iconSize"]
46422
46463
  },
46423
46464
  icon: {
46424
46465
  label: "icon",
@@ -46433,7 +46474,8 @@ const ToastConfig = {
46433
46474
  "md",
46434
46475
  "lg"
46435
46476
  ]]
46436
- } }
46477
+ } },
46478
+ userOverridableProperties: ["iconSize"]
46437
46479
  },
46438
46480
  label: {
46439
46481
  label: "label",
@@ -47100,7 +47142,8 @@ const ToastConfig = {
47100
47142
  "always/accent"
47101
47143
  ]
47102
47144
  ]
47103
- } }
47145
+ } },
47146
+ userOverridableProperties: ["color"]
47104
47147
  },
47105
47148
  icon: {
47106
47149
  label: "icon",
@@ -47488,7 +47531,8 @@ const ToastConfig = {
47488
47531
  "multicolor"
47489
47532
  ]]
47490
47533
  }
47491
- }
47534
+ },
47535
+ userOverridableProperties: ["color"]
47492
47536
  },
47493
47537
  root: {
47494
47538
  label: "root",
@@ -48421,7 +48465,8 @@ const TooltipConfig = {
48421
48465
  "md",
48422
48466
  "lg"
48423
48467
  ]]
48424
- } }
48468
+ } },
48469
+ userOverridableProperties: ["iconSize"]
48425
48470
  },
48426
48471
  root: {
48427
48472
  label: "root",
@@ -49056,7 +49101,8 @@ const TooltipConfig = {
49056
49101
  "always/accent"
49057
49102
  ]
49058
49103
  ]
49059
- } }
49104
+ } },
49105
+ userOverridableProperties: ["color"]
49060
49106
  },
49061
49107
  root: {
49062
49108
  label: "root",
@@ -249,6 +249,28 @@ function generateClassName({ componentName, subComponentName, variantKey, varian
249
249
  function getLayerClassSelector(layer, className, componentName, propertyStateSelector) {
250
250
  return componentName === "input" && (layer === "inputWrapperDynamic" || layer === "inputWrapper") && propertyStateSelector.includes("focus-within") ? `.${className}:not(.uds-ring):not(.uds-select-field-trigger)` : `.${className}`;
251
251
  }
252
+ /**
253
+ * Zero-specificity guards for `userOverridableProperties` layers: exclude
254
+ * elements the runtime marked with the matching attribute (set by `IconSlot`
255
+ * when a custom slot icon carries the explicit prop — non-`inherit` `color`
256
+ * or explicit `size`). `:where()` contributes (0,0,0), so the rule's
257
+ * class-count specificity tier — which the whole state cascade relies on — is
258
+ * unchanged; the rule simply stops matching, letting the consumer's own
259
+ * styling win.
260
+ */
261
+ const USER_OVERRIDE_GUARDS = {
262
+ color: `:where(:not([${require_index.ICON_COLOR_OVERRIDE_ATTRIBUTE}]))`,
263
+ iconSize: `:where(:not([${require_index.ICON_SIZE_OVERRIDE_ATTRIBUTE}]))`
264
+ };
265
+ /**
266
+ * Appends a {@link USER_OVERRIDE_GUARDS} guard to a layer class selector,
267
+ * inserting before a pseudo-element (e.g. `::placeholder`) if the layer
268
+ * carries one — a pseudo-class after a pseudo-element is invalid CSS.
269
+ */
270
+ function appendUserOverrideGuard(layerClassSelector, guard) {
271
+ const pseudoElementIndex = layerClassSelector.indexOf("::");
272
+ return pseudoElementIndex === -1 ? `${layerClassSelector}${guard}` : `${layerClassSelector.slice(0, pseudoElementIndex)}${guard}${layerClassSelector.slice(pseudoElementIndex)}`;
273
+ }
252
274
  const getTheCssPropertyValue = (schema, theme, propertyName, schemaStateValue, existingValue, originalPropertyDefinition) => {
253
275
  const { value, type } = schemaStateValue;
254
276
  const propertyConfig = require_properties.configurableProperties[propertyName];
@@ -310,9 +332,10 @@ function selectiveEmittedStates(stateMap, orderedStateKeys, emittableStates) {
310
332
  }
311
333
  return emitted;
312
334
  }
313
- function generateDeclaration({ componentName, subComponentName, variantKey, variantValue, layer, layerOptionalPseudoSelector, componentStateKey, componentStateValue, schema, propertyKey, originalPropertyDefinition, declaredStates, layerUsesAtomicStates, theme, currentStyles, previewOptions, excludedPseudoStates = [], emit, fallbackStateMap, bumpRootSpecificity, buttonHeightReferenceSchema }) {
335
+ function generateDeclaration({ componentName, subComponentName, variantKey, variantValue, layer, layerOptionalPseudoSelector, componentStateKey, componentStateValue, schema, propertyKey, originalPropertyDefinition, declaredStates, layerUsesAtomicStates, userOverridableProperties, theme, currentStyles, previewOptions, excludedPseudoStates = [], emit, fallbackStateMap, bumpRootSpecificity, buttonHeightReferenceSchema }) {
314
336
  const shouldUseExhaustive = (emit ?? "exhaustive") === "exhaustive" && layerUsesAtomicStates;
315
337
  const { cssProperties: configuredCssProperties, extendedProperties: configuredExtendedGetter } = require_properties.configurableProperties[originalPropertyDefinition.name];
338
+ const userOverrideGuard = userOverridableProperties?.includes(originalPropertyDefinition.name) ? USER_OVERRIDE_GUARDS[originalPropertyDefinition.name] : void 0;
316
339
  const configuredExtendedProperties = (0, lodash_es.isFunction)(configuredExtendedGetter) ? configuredExtendedGetter({
317
340
  componentName,
318
341
  subComponentName,
@@ -409,7 +432,8 @@ function generateDeclaration({ componentName, subComponentName, variantKey, vari
409
432
  subComponentName
410
433
  });
411
434
  const layerClassSelector = getLayerClassSelector(layer, className, componentName, propertyStateSelector);
412
- fullClassName = `.${rootVariantClassName}${propertyStateSelector}.${rootVariantClassNameWithComponentState} ${layerClassSelector}`;
435
+ const guardedLayerClassSelector = userOverrideGuard ? appendUserOverrideGuard(layerClassSelector, userOverrideGuard) : layerClassSelector;
436
+ fullClassName = `.${rootVariantClassName}${propertyStateSelector}.${rootVariantClassNameWithComponentState} ${guardedLayerClassSelector}`;
413
437
  } else {
414
438
  className = generateClassName({
415
439
  componentName,
@@ -420,7 +444,8 @@ function generateDeclaration({ componentName, subComponentName, variantKey, vari
420
444
  subComponentName
421
445
  });
422
446
  const layerClassSelector = getLayerClassSelector(layer, className, componentName, propertyStateSelector);
423
- fullClassName = bumpRootSpecificity ? `.${rootVariantClassName}.${rootVariantClassName}${propertyStateSelector} ${layerClassSelector}` : `.${rootVariantClassName}${propertyStateSelector} ${layerClassSelector}`;
447
+ const guardedLayerClassSelector = userOverrideGuard ? appendUserOverrideGuard(layerClassSelector, userOverrideGuard) : layerClassSelector;
448
+ fullClassName = bumpRootSpecificity ? `.${rootVariantClassName}.${rootVariantClassName}${propertyStateSelector} ${guardedLayerClassSelector}` : `.${rootVariantClassName}${propertyStateSelector} ${guardedLayerClassSelector}`;
424
449
  }
425
450
  }
426
451
  const { cssProperties, extendedProperties: extendedPropertiesGetter } = require_properties.configurableProperties[originalPropertyDefinition.name];
@@ -678,6 +703,7 @@ function emitSchemaOverrideStyles({ componentName, subComponentName, variantKey,
678
703
  originalPropertyDefinition,
679
704
  declaredStates: new Set(require_resolvePropertyStates.resolvePropertyStates(universalLayer, originalPropertyDefinition)),
680
705
  layerUsesAtomicStates: (universalLayer.atomicStates?.length ?? 0) > 0,
706
+ userOverridableProperties: universalLayer.userOverridableProperties,
681
707
  theme,
682
708
  schema,
683
709
  currentStyles: styles,
@@ -724,6 +750,7 @@ function emitUniversalLayers({ componentName, subComponentName, variantKey, vari
724
750
  originalPropertyDefinition,
725
751
  declaredStates: new Set(require_resolvePropertyStates.resolvePropertyStates(layer, originalPropertyDefinition)),
726
752
  layerUsesAtomicStates: (layer.atomicStates?.length ?? 0) > 0,
753
+ userOverridableProperties: layer.userOverridableProperties,
727
754
  theme,
728
755
  schema,
729
756
  currentStyles: styles,
@@ -779,6 +806,7 @@ function generateConfigStyles(config, schema, theme, previewOptions, emit, gener
779
806
  originalPropertyDefinition,
780
807
  declaredStates: new Set(require_resolvePropertyStates.resolvePropertyStates(layer, originalPropertyDefinition)),
781
808
  layerUsesAtomicStates: (layer.atomicStates?.length ?? 0) > 0,
809
+ userOverridableProperties: layer.userOverridableProperties,
782
810
  theme,
783
811
  schema,
784
812
  currentStyles: styles,
@@ -859,6 +887,7 @@ function generateConfigStyles(config, schema, theme, previewOptions, emit, gener
859
887
  originalPropertyDefinition,
860
888
  declaredStates: new Set(require_resolvePropertyStates.resolvePropertyStates(layer, originalPropertyDefinition)),
861
889
  layerUsesAtomicStates: (layer.atomicStates?.length ?? 0) > 0,
890
+ userOverridableProperties: layer.userOverridableProperties,
862
891
  theme,
863
892
  schema,
864
893
  currentStyles: styles,
@@ -1,5 +1,5 @@
1
1
  /*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
2
- import { BUTTON_GAP_VAR, BUTTON_SCALE_EFFECT_HOVER, BUTTON_SCALE_EFFECT_PRESSED, BUTTON_SCALE_EFFECT_REST } from "../../../css-tokens/dist/index.js";
2
+ import { BUTTON_GAP_VAR, BUTTON_SCALE_EFFECT_HOVER, BUTTON_SCALE_EFFECT_PRESSED, BUTTON_SCALE_EFFECT_REST, ICON_COLOR_OVERRIDE_ATTRIBUTE, ICON_SIZE_OVERRIDE_ATTRIBUTE } from "../../../css-tokens/dist/index.js";
3
3
  import { mapTextVariantFixtureToValue } from "../mapTextVariantFixtureToValue.js";
4
4
  import { configurableProperties } from "../properties.js";
5
5
  import { INTERACTIVE_ATOMICS, MODIFIER_ATOMICS, comparePriority } from "../types/StateAxis.js";
@@ -248,6 +248,28 @@ function generateClassName({ componentName, subComponentName, variantKey, varian
248
248
  function getLayerClassSelector(layer, className, componentName, propertyStateSelector) {
249
249
  return componentName === "input" && (layer === "inputWrapperDynamic" || layer === "inputWrapper") && propertyStateSelector.includes("focus-within") ? `.${className}:not(.uds-ring):not(.uds-select-field-trigger)` : `.${className}`;
250
250
  }
251
+ /**
252
+ * Zero-specificity guards for `userOverridableProperties` layers: exclude
253
+ * elements the runtime marked with the matching attribute (set by `IconSlot`
254
+ * when a custom slot icon carries the explicit prop — non-`inherit` `color`
255
+ * or explicit `size`). `:where()` contributes (0,0,0), so the rule's
256
+ * class-count specificity tier — which the whole state cascade relies on — is
257
+ * unchanged; the rule simply stops matching, letting the consumer's own
258
+ * styling win.
259
+ */
260
+ const USER_OVERRIDE_GUARDS = {
261
+ color: `:where(:not([${ICON_COLOR_OVERRIDE_ATTRIBUTE}]))`,
262
+ iconSize: `:where(:not([${ICON_SIZE_OVERRIDE_ATTRIBUTE}]))`
263
+ };
264
+ /**
265
+ * Appends a {@link USER_OVERRIDE_GUARDS} guard to a layer class selector,
266
+ * inserting before a pseudo-element (e.g. `::placeholder`) if the layer
267
+ * carries one — a pseudo-class after a pseudo-element is invalid CSS.
268
+ */
269
+ function appendUserOverrideGuard(layerClassSelector, guard) {
270
+ const pseudoElementIndex = layerClassSelector.indexOf("::");
271
+ return pseudoElementIndex === -1 ? `${layerClassSelector}${guard}` : `${layerClassSelector.slice(0, pseudoElementIndex)}${guard}${layerClassSelector.slice(pseudoElementIndex)}`;
272
+ }
251
273
  const getTheCssPropertyValue = (schema, theme, propertyName, schemaStateValue, existingValue, originalPropertyDefinition) => {
252
274
  const { value, type } = schemaStateValue;
253
275
  const propertyConfig = configurableProperties[propertyName];
@@ -309,9 +331,10 @@ function selectiveEmittedStates(stateMap, orderedStateKeys, emittableStates) {
309
331
  }
310
332
  return emitted;
311
333
  }
312
- function generateDeclaration({ componentName, subComponentName, variantKey, variantValue, layer, layerOptionalPseudoSelector, componentStateKey, componentStateValue, schema, propertyKey, originalPropertyDefinition, declaredStates, layerUsesAtomicStates, theme, currentStyles, previewOptions, excludedPseudoStates = [], emit, fallbackStateMap, bumpRootSpecificity, buttonHeightReferenceSchema }) {
334
+ function generateDeclaration({ componentName, subComponentName, variantKey, variantValue, layer, layerOptionalPseudoSelector, componentStateKey, componentStateValue, schema, propertyKey, originalPropertyDefinition, declaredStates, layerUsesAtomicStates, userOverridableProperties, theme, currentStyles, previewOptions, excludedPseudoStates = [], emit, fallbackStateMap, bumpRootSpecificity, buttonHeightReferenceSchema }) {
313
335
  const shouldUseExhaustive = (emit ?? "exhaustive") === "exhaustive" && layerUsesAtomicStates;
314
336
  const { cssProperties: configuredCssProperties, extendedProperties: configuredExtendedGetter } = configurableProperties[originalPropertyDefinition.name];
337
+ const userOverrideGuard = userOverridableProperties?.includes(originalPropertyDefinition.name) ? USER_OVERRIDE_GUARDS[originalPropertyDefinition.name] : void 0;
315
338
  const configuredExtendedProperties = isFunction(configuredExtendedGetter) ? configuredExtendedGetter({
316
339
  componentName,
317
340
  subComponentName,
@@ -408,7 +431,8 @@ function generateDeclaration({ componentName, subComponentName, variantKey, vari
408
431
  subComponentName
409
432
  });
410
433
  const layerClassSelector = getLayerClassSelector(layer, className, componentName, propertyStateSelector);
411
- fullClassName = `.${rootVariantClassName}${propertyStateSelector}.${rootVariantClassNameWithComponentState} ${layerClassSelector}`;
434
+ const guardedLayerClassSelector = userOverrideGuard ? appendUserOverrideGuard(layerClassSelector, userOverrideGuard) : layerClassSelector;
435
+ fullClassName = `.${rootVariantClassName}${propertyStateSelector}.${rootVariantClassNameWithComponentState} ${guardedLayerClassSelector}`;
412
436
  } else {
413
437
  className = generateClassName({
414
438
  componentName,
@@ -419,7 +443,8 @@ function generateDeclaration({ componentName, subComponentName, variantKey, vari
419
443
  subComponentName
420
444
  });
421
445
  const layerClassSelector = getLayerClassSelector(layer, className, componentName, propertyStateSelector);
422
- fullClassName = bumpRootSpecificity ? `.${rootVariantClassName}.${rootVariantClassName}${propertyStateSelector} ${layerClassSelector}` : `.${rootVariantClassName}${propertyStateSelector} ${layerClassSelector}`;
446
+ const guardedLayerClassSelector = userOverrideGuard ? appendUserOverrideGuard(layerClassSelector, userOverrideGuard) : layerClassSelector;
447
+ fullClassName = bumpRootSpecificity ? `.${rootVariantClassName}.${rootVariantClassName}${propertyStateSelector} ${guardedLayerClassSelector}` : `.${rootVariantClassName}${propertyStateSelector} ${guardedLayerClassSelector}`;
423
448
  }
424
449
  }
425
450
  const { cssProperties, extendedProperties: extendedPropertiesGetter } = configurableProperties[originalPropertyDefinition.name];
@@ -677,6 +702,7 @@ function emitSchemaOverrideStyles({ componentName, subComponentName, variantKey,
677
702
  originalPropertyDefinition,
678
703
  declaredStates: new Set(resolvePropertyStates(universalLayer, originalPropertyDefinition)),
679
704
  layerUsesAtomicStates: (universalLayer.atomicStates?.length ?? 0) > 0,
705
+ userOverridableProperties: universalLayer.userOverridableProperties,
680
706
  theme,
681
707
  schema,
682
708
  currentStyles: styles,
@@ -723,6 +749,7 @@ function emitUniversalLayers({ componentName, subComponentName, variantKey, vari
723
749
  originalPropertyDefinition,
724
750
  declaredStates: new Set(resolvePropertyStates(layer, originalPropertyDefinition)),
725
751
  layerUsesAtomicStates: (layer.atomicStates?.length ?? 0) > 0,
752
+ userOverridableProperties: layer.userOverridableProperties,
726
753
  theme,
727
754
  schema,
728
755
  currentStyles: styles,
@@ -778,6 +805,7 @@ function generateConfigStyles(config, schema, theme, previewOptions, emit, gener
778
805
  originalPropertyDefinition,
779
806
  declaredStates: new Set(resolvePropertyStates(layer, originalPropertyDefinition)),
780
807
  layerUsesAtomicStates: (layer.atomicStates?.length ?? 0) > 0,
808
+ userOverridableProperties: layer.userOverridableProperties,
781
809
  theme,
782
810
  schema,
783
811
  currentStyles: styles,
@@ -858,6 +886,7 @@ function generateConfigStyles(config, schema, theme, previewOptions, emit, gener
858
886
  originalPropertyDefinition,
859
887
  declaredStates: new Set(resolvePropertyStates(layer, originalPropertyDefinition)),
860
888
  layerUsesAtomicStates: (layer.atomicStates?.length ?? 0) > 0,
889
+ userOverridableProperties: layer.userOverridableProperties,
861
890
  theme,
862
891
  schema,
863
892
  currentStyles: styles,
@@ -47,6 +47,30 @@ const TEXT_RESPONSIVE_BREAKPOINT_CLASSNAMES = {
47
47
  xl: "uds-text-xl",
48
48
  "2xl": "uds-text-2xl"
49
49
  };
50
+ /**
51
+ * Set by `IconSlot` (@yahoo/uds) when a consumer passes an explicit,
52
+ * non-`inherit` `color` on a custom slot icon element (e.g.
53
+ * `<Input endIcon={<Icon name={Check} color="positive" />} />`).
54
+ *
55
+ * Config-generated icon color rules for layers that list `color` in
56
+ * `userOverridableProperties` exclude elements carrying this attribute via a
57
+ * zero-specificity `:where(:not([data-uds-icon-color]))` guard, so the
58
+ * consumer's explicit color wins over the configured value without
59
+ * `!important`.
60
+ */
61
+ const ICON_COLOR_OVERRIDE_ATTRIBUTE = `data-uds-icon-color`;
62
+ /**
63
+ * Set by `IconSlot` (@yahoo/uds) when a consumer passes an explicit `size`
64
+ * on a custom slot icon element (e.g.
65
+ * `<Input endIcon={<Icon name={Check} size="lg" />} />`).
66
+ *
67
+ * Config-generated icon size (width/height) rules for layers that list
68
+ * `iconSize` in `userOverridableProperties` exclude elements carrying this
69
+ * attribute via a zero-specificity `:where(:not([data-uds-icon-size]))`
70
+ * guard, so the svg's own width/height attributes (matching the explicit
71
+ * size's artwork and viewBox) govern instead of the configured box.
72
+ */
73
+ const ICON_SIZE_OVERRIDE_ATTRIBUTE = `data-uds-icon-size`;
50
74
  const BUTTON_GAP_VAR = `--uds-button-gap`;
51
75
  const BUTTON_CONTROL_HEIGHT_VAR = `--uds-button-control-height`;
52
76
  const BUTTON_SCALE_EFFECT = `--uds-button-scale-effect`;
@@ -143,6 +167,8 @@ exports.FONT_SIZE_PREFIX = FONT_SIZE_PREFIX;
143
167
  exports.FONT_SLANT_PREFIX = FONT_SLANT_PREFIX;
144
168
  exports.FONT_WEIGHT_PREFIX = FONT_WEIGHT_PREFIX;
145
169
  exports.FONT_WIDTH_PREFIX = FONT_WIDTH_PREFIX;
170
+ exports.ICON_COLOR_OVERRIDE_ATTRIBUTE = ICON_COLOR_OVERRIDE_ATTRIBUTE;
171
+ exports.ICON_SIZE_OVERRIDE_ATTRIBUTE = ICON_SIZE_OVERRIDE_ATTRIBUTE;
146
172
  exports.ICON_SIZE_PREFIX = ICON_SIZE_PREFIX;
147
173
  exports.INSET_SHADOW_PREFIX = INSET_SHADOW_PREFIX;
148
174
  exports.INVERT_COLOR_MODE_CLASSNAME = INVERT_COLOR_MODE_CLASSNAME;