@yahoo/uds-mobile 2.24.0-beta.3 → 2.24.0-beta.5

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 (120) hide show
  1. package/dist/components/Avatar/AvatarIcon.cjs +8 -2
  2. package/dist/components/Avatar/AvatarIcon.d.cts.map +1 -1
  3. package/dist/components/Avatar/AvatarIcon.d.ts.map +1 -1
  4. package/dist/components/Avatar/AvatarIcon.js +9 -3
  5. package/dist/components/Avatar/AvatarIcon.js.map +1 -1
  6. package/dist/components/Avatar/AvatarImage.cjs +9 -2
  7. package/dist/components/Avatar/AvatarImage.d.cts.map +1 -1
  8. package/dist/components/Avatar/AvatarImage.d.ts.map +1 -1
  9. package/dist/components/Avatar/AvatarImage.js +10 -3
  10. package/dist/components/Avatar/AvatarImage.js.map +1 -1
  11. package/dist/components/Avatar/AvatarText.cjs +8 -2
  12. package/dist/components/Avatar/AvatarText.d.cts.map +1 -1
  13. package/dist/components/Avatar/AvatarText.d.ts.map +1 -1
  14. package/dist/components/Avatar/AvatarText.js +9 -3
  15. package/dist/components/Avatar/AvatarText.js.map +1 -1
  16. package/dist/components/Avatar/types.d.cts +7 -3
  17. package/dist/components/Avatar/types.d.cts.map +1 -1
  18. package/dist/components/Avatar/types.d.ts +7 -3
  19. package/dist/components/Avatar/types.d.ts.map +1 -1
  20. package/dist/components/Avatar/utils.cjs +9 -6
  21. package/dist/components/Avatar/utils.d.cts +2 -2
  22. package/dist/components/Avatar/utils.d.cts.map +1 -1
  23. package/dist/components/Avatar/utils.d.ts +2 -2
  24. package/dist/components/Avatar/utils.d.ts.map +1 -1
  25. package/dist/components/Avatar/utils.js +9 -6
  26. package/dist/components/Avatar/utils.js.map +1 -1
  27. package/dist/components/Button.cjs +5 -1
  28. package/dist/components/Button.d.cts.map +1 -1
  29. package/dist/components/Button.d.ts.map +1 -1
  30. package/dist/components/Button.js +5 -1
  31. package/dist/components/Button.js.map +1 -1
  32. package/dist/components/Checkbox.cjs +3 -1
  33. package/dist/components/Checkbox.js +3 -1
  34. package/dist/components/Checkbox.js.map +1 -1
  35. package/dist/components/Icon.cjs +4 -3
  36. package/dist/components/Icon.d.cts.map +1 -1
  37. package/dist/components/Icon.d.ts.map +1 -1
  38. package/dist/components/Icon.js +4 -3
  39. package/dist/components/Icon.js.map +1 -1
  40. package/dist/components/Input.cjs +54 -18
  41. package/dist/components/Input.d.cts +5 -0
  42. package/dist/components/Input.d.cts.map +1 -1
  43. package/dist/components/Input.d.ts +5 -0
  44. package/dist/components/Input.d.ts.map +1 -1
  45. package/dist/components/Input.js +54 -18
  46. package/dist/components/Input.js.map +1 -1
  47. package/dist/components/InputHelpText.cjs +6 -1
  48. package/dist/components/InputHelpText.d.cts +2 -0
  49. package/dist/components/InputHelpText.d.cts.map +1 -1
  50. package/dist/components/InputHelpText.d.ts +2 -0
  51. package/dist/components/InputHelpText.d.ts.map +1 -1
  52. package/dist/components/InputHelpText.js +6 -1
  53. package/dist/components/InputHelpText.js.map +1 -1
  54. package/dist/components/Select/Select.cjs +11 -2
  55. package/dist/components/Select/Select.d.cts +2 -0
  56. package/dist/components/Select/Select.d.cts.map +1 -1
  57. package/dist/components/Select/Select.d.ts +2 -0
  58. package/dist/components/Select/Select.d.ts.map +1 -1
  59. package/dist/components/Select/Select.js +11 -2
  60. package/dist/components/Select/Select.js.map +1 -1
  61. package/dist/components/Select/SelectItem.cjs +23 -12
  62. package/dist/components/Select/SelectItem.d.cts.map +1 -1
  63. package/dist/components/Select/SelectItem.d.ts.map +1 -1
  64. package/dist/components/Select/SelectItem.js +23 -12
  65. package/dist/components/Select/SelectItem.js.map +1 -1
  66. package/dist/components/Select/SelectTrigger.cjs +28 -13
  67. package/dist/components/Select/SelectTrigger.d.cts.map +1 -1
  68. package/dist/components/Select/SelectTrigger.d.ts.map +1 -1
  69. package/dist/components/Select/SelectTrigger.js +28 -13
  70. package/dist/components/Select/SelectTrigger.js.map +1 -1
  71. package/dist/components/Select/types.d.cts +2 -0
  72. package/dist/components/Select/types.d.cts.map +1 -1
  73. package/dist/components/Select/types.d.ts +2 -0
  74. package/dist/components/Select/types.d.ts.map +1 -1
  75. package/dist/components/Switch.cjs +2 -2
  76. package/dist/components/Switch.d.cts.map +1 -1
  77. package/dist/components/Switch.d.ts.map +1 -1
  78. package/dist/components/Switch.js +2 -2
  79. package/dist/components/Switch.js.map +1 -1
  80. package/dist/components/Tabs/Tab.cjs +5 -1
  81. package/dist/components/Tabs/Tab.d.cts.map +1 -1
  82. package/dist/components/Tabs/Tab.d.ts.map +1 -1
  83. package/dist/components/Tabs/Tab.js +5 -1
  84. package/dist/components/Tabs/Tab.js.map +1 -1
  85. package/dist/components/Text.cjs +4 -0
  86. package/dist/components/Text.d.cts.map +1 -1
  87. package/dist/components/Text.d.ts.map +1 -1
  88. package/dist/components/Text.js +4 -0
  89. package/dist/components/Text.js.map +1 -1
  90. package/dist/components/UDSProvider.cjs +1 -1
  91. package/dist/components/UDSProvider.js +1 -1
  92. package/dist/fontScaling/FontScalingContext.cjs +14 -0
  93. package/dist/fontScaling/FontScalingContext.d.cts +7 -1
  94. package/dist/fontScaling/FontScalingContext.d.cts.map +1 -1
  95. package/dist/fontScaling/FontScalingContext.d.ts +7 -1
  96. package/dist/fontScaling/FontScalingContext.d.ts.map +1 -1
  97. package/dist/fontScaling/FontScalingContext.js +15 -2
  98. package/dist/fontScaling/FontScalingContext.js.map +1 -1
  99. package/dist/fontScaling/constants.cjs +33 -0
  100. package/dist/fontScaling/constants.d.cts +11 -1
  101. package/dist/fontScaling/constants.d.cts.map +1 -1
  102. package/dist/fontScaling/constants.d.ts +11 -1
  103. package/dist/fontScaling/constants.d.ts.map +1 -1
  104. package/dist/fontScaling/constants.js +33 -1
  105. package/dist/fontScaling/constants.js.map +1 -1
  106. package/dist/fontScaling/index.cjs +2 -1
  107. package/dist/fontScaling/index.d.cts +2 -2
  108. package/dist/fontScaling/index.d.ts +2 -2
  109. package/dist/fontScaling/index.js +3 -3
  110. package/dist/jest/mocks/styles.cjs +13 -1
  111. package/dist/jest/mocks/styles.d.cts.map +1 -1
  112. package/dist/jest/mocks/styles.d.ts.map +1 -1
  113. package/dist/jest/mocks/styles.js +13 -1
  114. package/dist/jest/mocks/styles.js.map +1 -1
  115. package/dist/portal.cjs +8 -2
  116. package/dist/portal.d.cts.map +1 -1
  117. package/dist/portal.d.ts.map +1 -1
  118. package/dist/portal.js +8 -2
  119. package/dist/portal.js.map +1 -1
  120. package/package.json +1 -1
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  require("../../_virtual/_rolldown/runtime.cjs");
4
4
  const require_components_Box = require("../Box.cjs");
5
+ const require_fontScaling_useFontScale = require("../../fontScaling/useFontScale.cjs");
6
+ const require_fontScaling_useMaxFontSizeMultiplier = require("../../fontScaling/useMaxFontSizeMultiplier.cjs");
5
7
  const require_components_IconSlot = require("../IconSlot.cjs");
6
8
  const require_components_Avatar_utils = require("./utils.cjs");
7
9
  let react = require("react");
@@ -9,7 +11,9 @@ let react_native = require("react-native");
9
11
  let react_jsx_runtime = require("react/jsx-runtime");
10
12
  let generated_styles = require("../../../generated/styles");
11
13
  //#region src/components/Avatar/AvatarIcon.tsx
12
- const AvatarIcon = (0, react.memo)(function AvatarIcon({ size = "md", variant = require_components_Avatar_utils.DEFAULT_AVATAR_VARIANT, icon, customSize, style, accessibilityLabel, alt, ref, ...viewProps }) {
14
+ const AvatarIcon = (0, react.memo)(function AvatarIcon({ size = "md", variant = require_components_Avatar_utils.DEFAULT_AVATAR_VARIANT, icon, customSize, maxFontSizeMultiplier, style, accessibilityLabel, alt, ref, ...viewProps }) {
15
+ const resolvedMaxFontSizeMultiplier = require_fontScaling_useMaxFontSizeMultiplier.useMaxFontSizeMultiplier("control", maxFontSizeMultiplier) ?? 0;
16
+ const fontScaleFactor = require_fontScaling_useFontScale.useFontScale(resolvedMaxFontSizeMultiplier);
13
17
  generated_styles.avatarStyles.useVariants({
14
18
  size,
15
19
  icon: variant
@@ -17,11 +21,12 @@ const AvatarIcon = (0, react.memo)(function AvatarIcon({ size = "md", variant =
17
21
  const rootStyle = (0, react.useMemo)(() => [
18
22
  generated_styles.avatarStyles.root,
19
23
  avatarStaticStyles.root,
20
- require_components_Avatar_utils.getAvatarCustomSizeStyle(customSize),
24
+ require_components_Avatar_utils.getAvatarSizeStyle(generated_styles.avatarStyles.root, customSize, fontScaleFactor),
21
25
  style
22
26
  ], [
23
27
  generated_styles.avatarStyles.root,
24
28
  customSize,
29
+ fontScaleFactor,
25
30
  style
26
31
  ]);
27
32
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Box.Box, {
@@ -33,6 +38,7 @@ const AvatarIcon = (0, react.memo)(function AvatarIcon({ size = "md", variant =
33
38
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
34
39
  icon: icon ?? require_components_Avatar_utils.getDefaultAvatarIcon(variant),
35
40
  variant: "fill",
41
+ maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
36
42
  style: generated_styles.avatarStyles.icon
37
43
  })
38
44
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarIcon.d.cts","names":[],"sources":["../../../src/components/Avatar/AvatarIcon.tsx"],"mappings":";;;;;cAcM,UAAA,EAAU,OAAA,CAAA,oBAAA,CAAA,eAAA"}
1
+ {"version":3,"file":"AvatarIcon.d.cts","names":[],"sources":["../../../src/components/Avatar/AvatarIcon.tsx"],"mappings":";;;;;cAgBM,UAAA,EAAU,OAAA,CAAA,oBAAA,CAAA,eAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarIcon.d.ts","names":[],"sources":["../../../src/components/Avatar/AvatarIcon.tsx"],"mappings":";;;;;cAcM,UAAA,EAAU,OAAA,CAAA,oBAAA,CAAA,eAAA"}
1
+ {"version":3,"file":"AvatarIcon.d.ts","names":[],"sources":["../../../src/components/Avatar/AvatarIcon.tsx"],"mappings":";;;;;cAgBM,UAAA,EAAU,OAAA,CAAA,oBAAA,CAAA,eAAA"}
@@ -1,13 +1,17 @@
1
1
  /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
2
  import { Box } from "../Box.js";
3
+ import { useFontScale } from "../../fontScaling/useFontScale.js";
4
+ import { useMaxFontSizeMultiplier } from "../../fontScaling/useMaxFontSizeMultiplier.js";
3
5
  import { IconSlot } from "../IconSlot.js";
4
- import { DEFAULT_AVATAR_VARIANT, getAvatarCustomSizeStyle, getDefaultAvatarIcon } from "./utils.js";
6
+ import { DEFAULT_AVATAR_VARIANT, getAvatarSizeStyle, getDefaultAvatarIcon } from "./utils.js";
5
7
  import { memo, useMemo } from "react";
6
8
  import { StyleSheet } from "react-native";
7
9
  import { jsx } from "react/jsx-runtime";
8
10
  import { avatarStyles } from "../../../generated/styles";
9
11
  //#region src/components/Avatar/AvatarIcon.tsx
10
- const AvatarIcon = memo(function AvatarIcon({ size = "md", variant = DEFAULT_AVATAR_VARIANT, icon, customSize, style, accessibilityLabel, alt, ref, ...viewProps }) {
12
+ const AvatarIcon = memo(function AvatarIcon({ size = "md", variant = DEFAULT_AVATAR_VARIANT, icon, customSize, maxFontSizeMultiplier, style, accessibilityLabel, alt, ref, ...viewProps }) {
13
+ const resolvedMaxFontSizeMultiplier = useMaxFontSizeMultiplier("control", maxFontSizeMultiplier) ?? 0;
14
+ const fontScaleFactor = useFontScale(resolvedMaxFontSizeMultiplier);
11
15
  avatarStyles.useVariants({
12
16
  size,
13
17
  icon: variant
@@ -15,11 +19,12 @@ const AvatarIcon = memo(function AvatarIcon({ size = "md", variant = DEFAULT_AVA
15
19
  const rootStyle = useMemo(() => [
16
20
  avatarStyles.root,
17
21
  avatarStaticStyles.root,
18
- getAvatarCustomSizeStyle(customSize),
22
+ getAvatarSizeStyle(avatarStyles.root, customSize, fontScaleFactor),
19
23
  style
20
24
  ], [
21
25
  avatarStyles.root,
22
26
  customSize,
27
+ fontScaleFactor,
23
28
  style
24
29
  ]);
25
30
  return /* @__PURE__ */ jsx(Box, {
@@ -31,6 +36,7 @@ const AvatarIcon = memo(function AvatarIcon({ size = "md", variant = DEFAULT_AVA
31
36
  children: /* @__PURE__ */ jsx(IconSlot, {
32
37
  icon: icon ?? getDefaultAvatarIcon(variant),
33
38
  variant: "fill",
39
+ maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
34
40
  style: avatarStyles.icon
35
41
  })
36
42
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarIcon.js","names":[],"sources":["../../../src/components/Avatar/AvatarIcon.tsx"],"sourcesContent":["import { memo, useMemo } from 'react';\nimport { StyleSheet } from 'react-native';\n\nimport { avatarStyles } from '../../../generated/styles';\nimport { Box } from '../Box';\nimport { IconSlot } from '../IconSlot';\nimport type { AvatarIconProps } from './types';\nimport {\n DEFAULT_AVATAR_SIZE,\n DEFAULT_AVATAR_VARIANT,\n getAvatarCustomSizeStyle,\n getDefaultAvatarIcon,\n} from './utils';\n\nconst AvatarIcon = memo(function AvatarIcon({\n size = DEFAULT_AVATAR_SIZE,\n variant = DEFAULT_AVATAR_VARIANT,\n icon,\n customSize,\n style,\n accessibilityLabel,\n alt,\n ref,\n ...viewProps\n}: AvatarIconProps) {\n avatarStyles.useVariants({ size, icon: variant });\n\n const rootStyle = useMemo(\n () => [avatarStyles.root, avatarStaticStyles.root, getAvatarCustomSizeStyle(customSize), style],\n [avatarStyles.root, customSize, style],\n );\n\n return (\n <Box\n ref={ref}\n accessibilityRole=\"image\"\n accessibilityLabel={accessibilityLabel ?? alt}\n {...viewProps}\n style={rootStyle}\n >\n <IconSlot\n icon={icon ?? getDefaultAvatarIcon(variant)}\n variant=\"fill\"\n style={avatarStyles.icon}\n />\n </Box>\n );\n});\n\nAvatarIcon.displayName = 'AvatarIcon';\n\nconst avatarStaticStyles = StyleSheet.create({\n root: {\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n});\n\nexport { AvatarIcon };\n"],"mappings":";;;;;;;;;AAcA,MAAM,aAAa,KAAK,SAAS,WAAW,EAC1C,OAAA,MACA,UAAU,wBACV,MACA,YACA,OACA,oBACA,KACA,KACA,GAAG,aACe;CAClB,aAAa,YAAY;EAAE;EAAM,MAAM;EAAS,CAAC;CAEjD,MAAM,YAAY,cACV;EAAC,aAAa;EAAM,mBAAmB;EAAM,yBAAyB,WAAW;EAAE;EAAM,EAC/F;EAAC,aAAa;EAAM;EAAY;EAAM,CACvC;CAED,OACE,oBAAC,KAAD;EACO;EACL,mBAAkB;EAClB,oBAAoB,sBAAsB;EAC1C,GAAI;EACJ,OAAO;YAEP,oBAAC,UAAD;GACE,MAAM,QAAQ,qBAAqB,QAAQ;GAC3C,SAAQ;GACR,OAAO,aAAa;GACpB,CAAA;EACE,CAAA;EAER;AAEF,WAAW,cAAc;AAEzB,MAAM,qBAAqB,WAAW,OAAO,EAC3C,MAAM;CACJ,YAAY;CACZ,gBAAgB;CAChB,UAAU;CACX,EACF,CAAC"}
1
+ {"version":3,"file":"AvatarIcon.js","names":[],"sources":["../../../src/components/Avatar/AvatarIcon.tsx"],"sourcesContent":["import { memo, useMemo } from 'react';\nimport { StyleSheet } from 'react-native';\n\nimport { avatarStyles } from '../../../generated/styles';\nimport { useFontScale } from '../../fontScaling/useFontScale';\nimport { useMaxFontSizeMultiplier } from '../../fontScaling/useMaxFontSizeMultiplier';\nimport { Box } from '../Box';\nimport { IconSlot } from '../IconSlot';\nimport type { AvatarIconProps } from './types';\nimport {\n DEFAULT_AVATAR_SIZE,\n DEFAULT_AVATAR_VARIANT,\n getAvatarSizeStyle,\n getDefaultAvatarIcon,\n} from './utils';\n\nconst AvatarIcon = memo(function AvatarIcon({\n size = DEFAULT_AVATAR_SIZE,\n variant = DEFAULT_AVATAR_VARIANT,\n icon,\n customSize,\n maxFontSizeMultiplier,\n style,\n accessibilityLabel,\n alt,\n ref,\n ...viewProps\n}: AvatarIconProps) {\n const resolvedMaxFontSizeMultiplier =\n useMaxFontSizeMultiplier('control', maxFontSizeMultiplier) ?? 0;\n const fontScaleFactor = useFontScale(resolvedMaxFontSizeMultiplier);\n avatarStyles.useVariants({ size, icon: variant });\n\n const rootStyle = useMemo(\n () => [\n avatarStyles.root,\n avatarStaticStyles.root,\n getAvatarSizeStyle(avatarStyles.root, customSize, fontScaleFactor),\n style,\n ],\n [avatarStyles.root, customSize, fontScaleFactor, style],\n );\n\n return (\n <Box\n ref={ref}\n accessibilityRole=\"image\"\n accessibilityLabel={accessibilityLabel ?? alt}\n {...viewProps}\n style={rootStyle}\n >\n <IconSlot\n icon={icon ?? getDefaultAvatarIcon(variant)}\n variant=\"fill\"\n maxFontSizeMultiplier={resolvedMaxFontSizeMultiplier}\n style={avatarStyles.icon}\n />\n </Box>\n );\n});\n\nAvatarIcon.displayName = 'AvatarIcon';\n\nconst avatarStaticStyles = StyleSheet.create({\n root: {\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n});\n\nexport { AvatarIcon };\n"],"mappings":";;;;;;;;;;;AAgBA,MAAM,aAAa,KAAK,SAAS,WAAW,EAC1C,OAAA,MACA,UAAU,wBACV,MACA,YACA,uBACA,OACA,oBACA,KACA,KACA,GAAG,aACe;CAClB,MAAM,gCACJ,yBAAyB,WAAW,sBAAsB,IAAI;CAChE,MAAM,kBAAkB,aAAa,8BAA8B;CACnE,aAAa,YAAY;EAAE;EAAM,MAAM;EAAS,CAAC;CAEjD,MAAM,YAAY,cACV;EACJ,aAAa;EACb,mBAAmB;EACnB,mBAAmB,aAAa,MAAM,YAAY,gBAAgB;EAClE;EACD,EACD;EAAC,aAAa;EAAM;EAAY;EAAiB;EAAM,CACxD;CAED,OACE,oBAAC,KAAD;EACO;EACL,mBAAkB;EAClB,oBAAoB,sBAAsB;EAC1C,GAAI;EACJ,OAAO;YAEP,oBAAC,UAAD;GACE,MAAM,QAAQ,qBAAqB,QAAQ;GAC3C,SAAQ;GACR,uBAAuB;GACvB,OAAO,aAAa;GACpB,CAAA;EACE,CAAA;EAER;AAEF,WAAW,cAAc;AAEzB,MAAM,qBAAqB,WAAW,OAAO,EAC3C,MAAM;CACJ,YAAY;CACZ,gBAAgB;CAChB,UAAU;CACX,EACF,CAAC"}
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  require("../../_virtual/_rolldown/runtime.cjs");
4
4
  const require_components_Box = require("../Box.cjs");
5
+ const require_fontScaling_useFontScale = require("../../fontScaling/useFontScale.cjs");
6
+ const require_fontScaling_useMaxFontSizeMultiplier = require("../../fontScaling/useMaxFontSizeMultiplier.cjs");
5
7
  const require_components_Avatar_utils = require("./utils.cjs");
6
8
  const require_components_Avatar_AvatarIcon = require("./AvatarIcon.cjs");
7
9
  const require_components_Avatar_AvatarText = require("./AvatarText.cjs");
@@ -10,7 +12,9 @@ let react_native = require("react-native");
10
12
  let react_jsx_runtime = require("react/jsx-runtime");
11
13
  let generated_styles = require("../../../generated/styles");
12
14
  //#region src/components/Avatar/AvatarImage.tsx
13
- const AvatarImage = (0, react.memo)(function AvatarImage({ size = "md", variant = require_components_Avatar_utils.DEFAULT_AVATAR_VARIANT, src, alt, fallback, icon, abbreviationStrategy, customSize, style, accessibilityLabel, ref, ...viewProps }) {
15
+ const AvatarImage = (0, react.memo)(function AvatarImage({ size = "md", variant = require_components_Avatar_utils.DEFAULT_AVATAR_VARIANT, src, alt, fallback, icon, abbreviationStrategy, customSize, maxFontSizeMultiplier, style, accessibilityLabel, ref, ...viewProps }) {
16
+ const resolvedMaxFontSizeMultiplier = require_fontScaling_useMaxFontSizeMultiplier.useMaxFontSizeMultiplier("control", maxFontSizeMultiplier) ?? 0;
17
+ const fontScaleFactor = require_fontScaling_useFontScale.useFontScale(resolvedMaxFontSizeMultiplier);
14
18
  const [imageError, setImageError] = (0, react.useState)(false);
15
19
  const shouldShowImage = Boolean(src) && !imageError;
16
20
  generated_styles.avatarStyles.useVariants({
@@ -20,11 +24,12 @@ const AvatarImage = (0, react.memo)(function AvatarImage({ size = "md", variant
20
24
  const rootStyle = (0, react.useMemo)(() => [
21
25
  generated_styles.avatarStyles.root,
22
26
  avatarStaticStyles.root,
23
- require_components_Avatar_utils.getAvatarCustomSizeStyle(customSize),
27
+ require_components_Avatar_utils.getAvatarSizeStyle(generated_styles.avatarStyles.root, customSize, fontScaleFactor),
24
28
  style
25
29
  ], [
26
30
  generated_styles.avatarStyles.root,
27
31
  customSize,
32
+ fontScaleFactor,
28
33
  style
29
34
  ]);
30
35
  if (!shouldShowImage) {
@@ -36,6 +41,7 @@ const AvatarImage = (0, react.memo)(function AvatarImage({ size = "md", variant
36
41
  initials: fallback,
37
42
  abbreviationStrategy,
38
43
  customSize,
44
+ maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
39
45
  accessibilityLabel: accessibilityLabel ?? alt ?? fallback,
40
46
  style,
41
47
  ...viewProps
@@ -46,6 +52,7 @@ const AvatarImage = (0, react.memo)(function AvatarImage({ size = "md", variant
46
52
  variant,
47
53
  icon,
48
54
  customSize,
55
+ maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
49
56
  accessibilityLabel: accessibilityLabel ?? alt,
50
57
  style,
51
58
  ...viewProps
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarImage.d.cts","names":[],"sources":["../../../src/components/Avatar/AvatarImage.tsx"],"mappings":";;;;;cAUM,WAAA,EAAW,OAAA,CAAA,oBAAA,CAAA,gBAAA"}
1
+ {"version":3,"file":"AvatarImage.d.cts","names":[],"sources":["../../../src/components/Avatar/AvatarImage.tsx"],"mappings":";;;;;cAYM,WAAA,EAAW,OAAA,CAAA,oBAAA,CAAA,gBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarImage.d.ts","names":[],"sources":["../../../src/components/Avatar/AvatarImage.tsx"],"mappings":";;;;;cAUM,WAAA,EAAW,OAAA,CAAA,oBAAA,CAAA,gBAAA"}
1
+ {"version":3,"file":"AvatarImage.d.ts","names":[],"sources":["../../../src/components/Avatar/AvatarImage.tsx"],"mappings":";;;;;cAYM,WAAA,EAAW,OAAA,CAAA,oBAAA,CAAA,gBAAA"}
@@ -1,6 +1,8 @@
1
1
  /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
2
  import { Box } from "../Box.js";
3
- import { DEFAULT_AVATAR_VARIANT, getAvatarCustomSizeStyle } from "./utils.js";
3
+ import { useFontScale } from "../../fontScaling/useFontScale.js";
4
+ import { useMaxFontSizeMultiplier } from "../../fontScaling/useMaxFontSizeMultiplier.js";
5
+ import { DEFAULT_AVATAR_VARIANT, getAvatarSizeStyle } from "./utils.js";
4
6
  import { AvatarIcon } from "./AvatarIcon.js";
5
7
  import { AvatarText } from "./AvatarText.js";
6
8
  import { memo, useMemo, useState } from "react";
@@ -8,7 +10,9 @@ import { Image, StyleSheet } from "react-native";
8
10
  import { jsx } from "react/jsx-runtime";
9
11
  import { avatarStyles } from "../../../generated/styles";
10
12
  //#region src/components/Avatar/AvatarImage.tsx
11
- const AvatarImage = memo(function AvatarImage({ size = "md", variant = DEFAULT_AVATAR_VARIANT, src, alt, fallback, icon, abbreviationStrategy, customSize, style, accessibilityLabel, ref, ...viewProps }) {
13
+ const AvatarImage = memo(function AvatarImage({ size = "md", variant = DEFAULT_AVATAR_VARIANT, src, alt, fallback, icon, abbreviationStrategy, customSize, maxFontSizeMultiplier, style, accessibilityLabel, ref, ...viewProps }) {
14
+ const resolvedMaxFontSizeMultiplier = useMaxFontSizeMultiplier("control", maxFontSizeMultiplier) ?? 0;
15
+ const fontScaleFactor = useFontScale(resolvedMaxFontSizeMultiplier);
12
16
  const [imageError, setImageError] = useState(false);
13
17
  const shouldShowImage = Boolean(src) && !imageError;
14
18
  avatarStyles.useVariants({
@@ -18,11 +22,12 @@ const AvatarImage = memo(function AvatarImage({ size = "md", variant = DEFAULT_A
18
22
  const rootStyle = useMemo(() => [
19
23
  avatarStyles.root,
20
24
  avatarStaticStyles.root,
21
- getAvatarCustomSizeStyle(customSize),
25
+ getAvatarSizeStyle(avatarStyles.root, customSize, fontScaleFactor),
22
26
  style
23
27
  ], [
24
28
  avatarStyles.root,
25
29
  customSize,
30
+ fontScaleFactor,
26
31
  style
27
32
  ]);
28
33
  if (!shouldShowImage) {
@@ -34,6 +39,7 @@ const AvatarImage = memo(function AvatarImage({ size = "md", variant = DEFAULT_A
34
39
  initials: fallback,
35
40
  abbreviationStrategy,
36
41
  customSize,
42
+ maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
37
43
  accessibilityLabel: accessibilityLabel ?? alt ?? fallback,
38
44
  style,
39
45
  ...viewProps
@@ -44,6 +50,7 @@ const AvatarImage = memo(function AvatarImage({ size = "md", variant = DEFAULT_A
44
50
  variant,
45
51
  icon,
46
52
  customSize,
53
+ maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
47
54
  accessibilityLabel: accessibilityLabel ?? alt,
48
55
  style,
49
56
  ...viewProps
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarImage.js","names":["RNImage"],"sources":["../../../src/components/Avatar/AvatarImage.tsx"],"sourcesContent":["import { memo, useMemo, useState } from 'react';\nimport { Image as RNImage, StyleSheet } from 'react-native';\n\nimport { avatarStyles } from '../../../generated/styles';\nimport { Box } from '../Box';\nimport { AvatarIcon } from './AvatarIcon';\nimport { AvatarText } from './AvatarText';\nimport type { AvatarImageProps } from './types';\nimport { DEFAULT_AVATAR_SIZE, DEFAULT_AVATAR_VARIANT, getAvatarCustomSizeStyle } from './utils';\n\nconst AvatarImage = memo(function AvatarImage({\n size = DEFAULT_AVATAR_SIZE,\n variant = DEFAULT_AVATAR_VARIANT,\n src,\n alt,\n fallback,\n icon,\n abbreviationStrategy,\n customSize,\n style,\n accessibilityLabel,\n ref,\n ...viewProps\n}: AvatarImageProps) {\n const [imageError, setImageError] = useState(false);\n const shouldShowImage = Boolean(src) && !imageError;\n\n avatarStyles.useVariants({ size, image: variant });\n\n const rootStyle = useMemo(\n () => [avatarStyles.root, avatarStaticStyles.root, getAvatarCustomSizeStyle(customSize), style],\n [avatarStyles.root, customSize, style],\n );\n\n if (!shouldShowImage) {\n if (fallback || alt) {\n return (\n <AvatarText\n ref={ref}\n size={size}\n variant={variant}\n name={alt}\n initials={fallback}\n abbreviationStrategy={abbreviationStrategy}\n customSize={customSize}\n accessibilityLabel={accessibilityLabel ?? alt ?? fallback}\n style={style}\n {...viewProps}\n />\n );\n }\n\n return (\n <AvatarIcon\n ref={ref}\n size={size}\n variant={variant}\n icon={icon}\n customSize={customSize}\n accessibilityLabel={accessibilityLabel ?? alt}\n style={style}\n {...viewProps}\n />\n );\n }\n\n return (\n <Box\n ref={ref}\n accessibilityRole=\"image\"\n accessibilityLabel={accessibilityLabel ?? alt}\n {...viewProps}\n style={rootStyle}\n >\n <RNImage\n source={{ uri: src }}\n accessibilityLabel={alt}\n onError={() => setImageError(true)}\n style={avatarStaticStyles.image}\n />\n </Box>\n );\n});\n\nAvatarImage.displayName = 'AvatarImage';\n\nconst avatarStaticStyles = StyleSheet.create({\n root: {\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n image: {\n height: '100%',\n width: '100%',\n },\n});\n\nexport { AvatarImage };\n"],"mappings":";;;;;;;;;;AAUA,MAAM,cAAc,KAAK,SAAS,YAAY,EAC5C,OAAA,MACA,UAAU,wBACV,KACA,KACA,UACA,MACA,sBACA,YACA,OACA,oBACA,KACA,GAAG,aACgB;CACnB,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;CACnD,MAAM,kBAAkB,QAAQ,IAAI,IAAI,CAAC;CAEzC,aAAa,YAAY;EAAE;EAAM,OAAO;EAAS,CAAC;CAElD,MAAM,YAAY,cACV;EAAC,aAAa;EAAM,mBAAmB;EAAM,yBAAyB,WAAW;EAAE;EAAM,EAC/F;EAAC,aAAa;EAAM;EAAY;EAAM,CACvC;CAED,IAAI,CAAC,iBAAiB;EACpB,IAAI,YAAY,KACd,OACE,oBAAC,YAAD;GACO;GACC;GACG;GACT,MAAM;GACN,UAAU;GACY;GACV;GACZ,oBAAoB,sBAAsB,OAAO;GAC1C;GACP,GAAI;GACJ,CAAA;EAIN,OACE,oBAAC,YAAD;GACO;GACC;GACG;GACH;GACM;GACZ,oBAAoB,sBAAsB;GACnC;GACP,GAAI;GACJ,CAAA;;CAIN,OACE,oBAAC,KAAD;EACO;EACL,mBAAkB;EAClB,oBAAoB,sBAAsB;EAC1C,GAAI;EACJ,OAAO;YAEP,oBAACA,OAAD;GACE,QAAQ,EAAE,KAAK,KAAK;GACpB,oBAAoB;GACpB,eAAe,cAAc,KAAK;GAClC,OAAO,mBAAmB;GAC1B,CAAA;EACE,CAAA;EAER;AAEF,YAAY,cAAc;AAE1B,MAAM,qBAAqB,WAAW,OAAO;CAC3C,MAAM;EACJ,YAAY;EACZ,gBAAgB;EAChB,UAAU;EACX;CACD,OAAO;EACL,QAAQ;EACR,OAAO;EACR;CACF,CAAC"}
1
+ {"version":3,"file":"AvatarImage.js","names":["RNImage"],"sources":["../../../src/components/Avatar/AvatarImage.tsx"],"sourcesContent":["import { memo, useMemo, useState } from 'react';\nimport { Image as RNImage, StyleSheet } from 'react-native';\n\nimport { avatarStyles } from '../../../generated/styles';\nimport { useFontScale } from '../../fontScaling/useFontScale';\nimport { useMaxFontSizeMultiplier } from '../../fontScaling/useMaxFontSizeMultiplier';\nimport { Box } from '../Box';\nimport { AvatarIcon } from './AvatarIcon';\nimport { AvatarText } from './AvatarText';\nimport type { AvatarImageProps } from './types';\nimport { DEFAULT_AVATAR_SIZE, DEFAULT_AVATAR_VARIANT, getAvatarSizeStyle } from './utils';\n\nconst AvatarImage = memo(function AvatarImage({\n size = DEFAULT_AVATAR_SIZE,\n variant = DEFAULT_AVATAR_VARIANT,\n src,\n alt,\n fallback,\n icon,\n abbreviationStrategy,\n customSize,\n maxFontSizeMultiplier,\n style,\n accessibilityLabel,\n ref,\n ...viewProps\n}: AvatarImageProps) {\n const resolvedMaxFontSizeMultiplier =\n useMaxFontSizeMultiplier('control', maxFontSizeMultiplier) ?? 0;\n const fontScaleFactor = useFontScale(resolvedMaxFontSizeMultiplier);\n const [imageError, setImageError] = useState(false);\n const shouldShowImage = Boolean(src) && !imageError;\n\n avatarStyles.useVariants({ size, image: variant });\n\n const rootStyle = useMemo(\n () => [\n avatarStyles.root,\n avatarStaticStyles.root,\n getAvatarSizeStyle(avatarStyles.root, customSize, fontScaleFactor),\n style,\n ],\n [avatarStyles.root, customSize, fontScaleFactor, style],\n );\n\n if (!shouldShowImage) {\n if (fallback || alt) {\n return (\n <AvatarText\n ref={ref}\n size={size}\n variant={variant}\n name={alt}\n initials={fallback}\n abbreviationStrategy={abbreviationStrategy}\n customSize={customSize}\n maxFontSizeMultiplier={resolvedMaxFontSizeMultiplier}\n accessibilityLabel={accessibilityLabel ?? alt ?? fallback}\n style={style}\n {...viewProps}\n />\n );\n }\n\n return (\n <AvatarIcon\n ref={ref}\n size={size}\n variant={variant}\n icon={icon}\n customSize={customSize}\n maxFontSizeMultiplier={resolvedMaxFontSizeMultiplier}\n accessibilityLabel={accessibilityLabel ?? alt}\n style={style}\n {...viewProps}\n />\n );\n }\n\n return (\n <Box\n ref={ref}\n accessibilityRole=\"image\"\n accessibilityLabel={accessibilityLabel ?? alt}\n {...viewProps}\n style={rootStyle}\n >\n <RNImage\n source={{ uri: src }}\n accessibilityLabel={alt}\n onError={() => setImageError(true)}\n style={avatarStaticStyles.image}\n />\n </Box>\n );\n});\n\nAvatarImage.displayName = 'AvatarImage';\n\nconst avatarStaticStyles = StyleSheet.create({\n root: {\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n image: {\n height: '100%',\n width: '100%',\n },\n});\n\nexport { AvatarImage };\n"],"mappings":";;;;;;;;;;;;AAYA,MAAM,cAAc,KAAK,SAAS,YAAY,EAC5C,OAAA,MACA,UAAU,wBACV,KACA,KACA,UACA,MACA,sBACA,YACA,uBACA,OACA,oBACA,KACA,GAAG,aACgB;CACnB,MAAM,gCACJ,yBAAyB,WAAW,sBAAsB,IAAI;CAChE,MAAM,kBAAkB,aAAa,8BAA8B;CACnE,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;CACnD,MAAM,kBAAkB,QAAQ,IAAI,IAAI,CAAC;CAEzC,aAAa,YAAY;EAAE;EAAM,OAAO;EAAS,CAAC;CAElD,MAAM,YAAY,cACV;EACJ,aAAa;EACb,mBAAmB;EACnB,mBAAmB,aAAa,MAAM,YAAY,gBAAgB;EAClE;EACD,EACD;EAAC,aAAa;EAAM;EAAY;EAAiB;EAAM,CACxD;CAED,IAAI,CAAC,iBAAiB;EACpB,IAAI,YAAY,KACd,OACE,oBAAC,YAAD;GACO;GACC;GACG;GACT,MAAM;GACN,UAAU;GACY;GACV;GACZ,uBAAuB;GACvB,oBAAoB,sBAAsB,OAAO;GAC1C;GACP,GAAI;GACJ,CAAA;EAIN,OACE,oBAAC,YAAD;GACO;GACC;GACG;GACH;GACM;GACZ,uBAAuB;GACvB,oBAAoB,sBAAsB;GACnC;GACP,GAAI;GACJ,CAAA;;CAIN,OACE,oBAAC,KAAD;EACO;EACL,mBAAkB;EAClB,oBAAoB,sBAAsB;EAC1C,GAAI;EACJ,OAAO;YAEP,oBAACA,OAAD;GACE,QAAQ,EAAE,KAAK,KAAK;GACpB,oBAAoB;GACpB,eAAe,cAAc,KAAK;GAClC,OAAO,mBAAmB;GAC1B,CAAA;EACE,CAAA;EAER;AAEF,YAAY,cAAc;AAE1B,MAAM,qBAAqB,WAAW,OAAO;CAC3C,MAAM;EACJ,YAAY;EACZ,gBAAgB;EAChB,UAAU;EACX;CACD,OAAO;EACL,QAAQ;EACR,OAAO;EACR;CACF,CAAC"}
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  require("../../_virtual/_rolldown/runtime.cjs");
4
4
  const require_components_Box = require("../Box.cjs");
5
+ const require_fontScaling_useFontScale = require("../../fontScaling/useFontScale.cjs");
6
+ const require_fontScaling_useMaxFontSizeMultiplier = require("../../fontScaling/useMaxFontSizeMultiplier.cjs");
5
7
  const require_components_Text = require("../Text.cjs");
6
8
  const require_components_Avatar_utils = require("./utils.cjs");
7
9
  let react = require("react");
@@ -9,7 +11,9 @@ let react_native = require("react-native");
9
11
  let react_jsx_runtime = require("react/jsx-runtime");
10
12
  let generated_styles = require("../../../generated/styles");
11
13
  //#region src/components/Avatar/AvatarText.tsx
12
- const AvatarText = (0, react.memo)(function AvatarText({ size = "md", variant = require_components_Avatar_utils.DEFAULT_AVATAR_VARIANT, name, initials, abbreviationStrategy, customSize, style, accessibilityLabel, ref, ...viewProps }) {
14
+ const AvatarText = (0, react.memo)(function AvatarText({ size = "md", variant = require_components_Avatar_utils.DEFAULT_AVATAR_VARIANT, name, initials, abbreviationStrategy, customSize, maxFontSizeMultiplier, style, accessibilityLabel, ref, ...viewProps }) {
15
+ const resolvedMaxFontSizeMultiplier = require_fontScaling_useMaxFontSizeMultiplier.useMaxFontSizeMultiplier("control", maxFontSizeMultiplier) ?? 0;
16
+ const fontScaleFactor = require_fontScaling_useFontScale.useFontScale(resolvedMaxFontSizeMultiplier);
13
17
  generated_styles.avatarStyles.useVariants({
14
18
  size,
15
19
  text: variant
@@ -17,11 +21,12 @@ const AvatarText = (0, react.memo)(function AvatarText({ size = "md", variant =
17
21
  const rootStyle = (0, react.useMemo)(() => [
18
22
  generated_styles.avatarStyles.root,
19
23
  avatarStaticStyles.root,
20
- require_components_Avatar_utils.getAvatarCustomSizeStyle(customSize),
24
+ require_components_Avatar_utils.getAvatarSizeStyle(generated_styles.avatarStyles.root, customSize, fontScaleFactor),
21
25
  style
22
26
  ], [
23
27
  generated_styles.avatarStyles.root,
24
28
  customSize,
29
+ fontScaleFactor,
25
30
  style
26
31
  ]);
27
32
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Box.Box, {
@@ -34,6 +39,7 @@ const AvatarText = (0, react.memo)(function AvatarText({ size = "md", variant =
34
39
  color: "inherit",
35
40
  variant: "inherit",
36
41
  numberOfLines: 1,
42
+ maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
37
43
  style: generated_styles.avatarStyles.text,
38
44
  children: initials || require_components_Avatar_utils.generateAvatarAbbreviation(name, abbreviationStrategy)
39
45
  })
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarText.d.cts","names":[],"sources":["../../../src/components/Avatar/AvatarText.tsx"],"mappings":";;;;;cAcM,UAAA,EAAU,OAAA,CAAA,oBAAA,CAAA,eAAA"}
1
+ {"version":3,"file":"AvatarText.d.cts","names":[],"sources":["../../../src/components/Avatar/AvatarText.tsx"],"mappings":";;;;;cAgBM,UAAA,EAAU,OAAA,CAAA,oBAAA,CAAA,eAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarText.d.ts","names":[],"sources":["../../../src/components/Avatar/AvatarText.tsx"],"mappings":";;;;;cAcM,UAAA,EAAU,OAAA,CAAA,oBAAA,CAAA,eAAA"}
1
+ {"version":3,"file":"AvatarText.d.ts","names":[],"sources":["../../../src/components/Avatar/AvatarText.tsx"],"mappings":";;;;;cAgBM,UAAA,EAAU,OAAA,CAAA,oBAAA,CAAA,eAAA"}
@@ -1,13 +1,17 @@
1
1
  /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
2
  import { Box } from "../Box.js";
3
+ import { useFontScale } from "../../fontScaling/useFontScale.js";
4
+ import { useMaxFontSizeMultiplier } from "../../fontScaling/useMaxFontSizeMultiplier.js";
3
5
  import { Text as Text$1 } from "../Text.js";
4
- import { DEFAULT_AVATAR_VARIANT, generateAvatarAbbreviation, getAvatarCustomSizeStyle } from "./utils.js";
6
+ import { DEFAULT_AVATAR_VARIANT, generateAvatarAbbreviation, getAvatarSizeStyle } from "./utils.js";
5
7
  import { memo, useMemo } from "react";
6
8
  import { StyleSheet } from "react-native";
7
9
  import { jsx } from "react/jsx-runtime";
8
10
  import { avatarStyles } from "../../../generated/styles";
9
11
  //#region src/components/Avatar/AvatarText.tsx
10
- const AvatarText = memo(function AvatarText({ size = "md", variant = DEFAULT_AVATAR_VARIANT, name, initials, abbreviationStrategy, customSize, style, accessibilityLabel, ref, ...viewProps }) {
12
+ const AvatarText = memo(function AvatarText({ size = "md", variant = DEFAULT_AVATAR_VARIANT, name, initials, abbreviationStrategy, customSize, maxFontSizeMultiplier, style, accessibilityLabel, ref, ...viewProps }) {
13
+ const resolvedMaxFontSizeMultiplier = useMaxFontSizeMultiplier("control", maxFontSizeMultiplier) ?? 0;
14
+ const fontScaleFactor = useFontScale(resolvedMaxFontSizeMultiplier);
11
15
  avatarStyles.useVariants({
12
16
  size,
13
17
  text: variant
@@ -15,11 +19,12 @@ const AvatarText = memo(function AvatarText({ size = "md", variant = DEFAULT_AVA
15
19
  const rootStyle = useMemo(() => [
16
20
  avatarStyles.root,
17
21
  avatarStaticStyles.root,
18
- getAvatarCustomSizeStyle(customSize),
22
+ getAvatarSizeStyle(avatarStyles.root, customSize, fontScaleFactor),
19
23
  style
20
24
  ], [
21
25
  avatarStyles.root,
22
26
  customSize,
27
+ fontScaleFactor,
23
28
  style
24
29
  ]);
25
30
  return /* @__PURE__ */ jsx(Box, {
@@ -32,6 +37,7 @@ const AvatarText = memo(function AvatarText({ size = "md", variant = DEFAULT_AVA
32
37
  color: "inherit",
33
38
  variant: "inherit",
34
39
  numberOfLines: 1,
40
+ maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
35
41
  style: avatarStyles.text,
36
42
  children: initials || generateAvatarAbbreviation(name, abbreviationStrategy)
37
43
  })
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarText.js","names":["Text"],"sources":["../../../src/components/Avatar/AvatarText.tsx"],"sourcesContent":["import { memo, useMemo } from 'react';\nimport { StyleSheet } from 'react-native';\n\nimport { avatarStyles } from '../../../generated/styles';\nimport { Box } from '../Box';\nimport { Text } from '../Text';\nimport type { AvatarTextProps } from './types';\nimport {\n DEFAULT_AVATAR_SIZE,\n DEFAULT_AVATAR_VARIANT,\n generateAvatarAbbreviation,\n getAvatarCustomSizeStyle,\n} from './utils';\n\nconst AvatarText = memo(function AvatarText({\n size = DEFAULT_AVATAR_SIZE,\n variant = DEFAULT_AVATAR_VARIANT,\n name,\n initials,\n abbreviationStrategy,\n customSize,\n style,\n accessibilityLabel,\n ref,\n ...viewProps\n}: AvatarTextProps) {\n avatarStyles.useVariants({ size, text: variant });\n\n const rootStyle = useMemo(\n () => [avatarStyles.root, avatarStaticStyles.root, getAvatarCustomSizeStyle(customSize), style],\n [avatarStyles.root, customSize, style],\n );\n\n return (\n <Box\n ref={ref}\n accessibilityRole=\"image\"\n accessibilityLabel={accessibilityLabel ?? name ?? initials}\n {...viewProps}\n style={rootStyle}\n >\n <Text color=\"inherit\" variant=\"inherit\" numberOfLines={1} style={avatarStyles.text}>\n {initials || generateAvatarAbbreviation(name, abbreviationStrategy)}\n </Text>\n </Box>\n );\n});\n\nAvatarText.displayName = 'AvatarText';\n\nconst avatarStaticStyles = StyleSheet.create({\n root: {\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n});\n\nexport { AvatarText };\n"],"mappings":";;;;;;;;;AAcA,MAAM,aAAa,KAAK,SAAS,WAAW,EAC1C,OAAA,MACA,UAAU,wBACV,MACA,UACA,sBACA,YACA,OACA,oBACA,KACA,GAAG,aACe;CAClB,aAAa,YAAY;EAAE;EAAM,MAAM;EAAS,CAAC;CAEjD,MAAM,YAAY,cACV;EAAC,aAAa;EAAM,mBAAmB;EAAM,yBAAyB,WAAW;EAAE;EAAM,EAC/F;EAAC,aAAa;EAAM;EAAY;EAAM,CACvC;CAED,OACE,oBAAC,KAAD;EACO;EACL,mBAAkB;EAClB,oBAAoB,sBAAsB,QAAQ;EAClD,GAAI;EACJ,OAAO;YAEP,oBAACA,QAAD;GAAM,OAAM;GAAU,SAAQ;GAAU,eAAe;GAAG,OAAO,aAAa;aAC3E,YAAY,2BAA2B,MAAM,qBAAqB;GAC9D,CAAA;EACH,CAAA;EAER;AAEF,WAAW,cAAc;AAEzB,MAAM,qBAAqB,WAAW,OAAO,EAC3C,MAAM;CACJ,YAAY;CACZ,gBAAgB;CAChB,UAAU;CACX,EACF,CAAC"}
1
+ {"version":3,"file":"AvatarText.js","names":["Text"],"sources":["../../../src/components/Avatar/AvatarText.tsx"],"sourcesContent":["import { memo, useMemo } from 'react';\nimport { StyleSheet } from 'react-native';\n\nimport { avatarStyles } from '../../../generated/styles';\nimport { useFontScale } from '../../fontScaling/useFontScale';\nimport { useMaxFontSizeMultiplier } from '../../fontScaling/useMaxFontSizeMultiplier';\nimport { Box } from '../Box';\nimport { Text } from '../Text';\nimport type { AvatarTextProps } from './types';\nimport {\n DEFAULT_AVATAR_SIZE,\n DEFAULT_AVATAR_VARIANT,\n generateAvatarAbbreviation,\n getAvatarSizeStyle,\n} from './utils';\n\nconst AvatarText = memo(function AvatarText({\n size = DEFAULT_AVATAR_SIZE,\n variant = DEFAULT_AVATAR_VARIANT,\n name,\n initials,\n abbreviationStrategy,\n customSize,\n maxFontSizeMultiplier,\n style,\n accessibilityLabel,\n ref,\n ...viewProps\n}: AvatarTextProps) {\n const resolvedMaxFontSizeMultiplier =\n useMaxFontSizeMultiplier('control', maxFontSizeMultiplier) ?? 0;\n const fontScaleFactor = useFontScale(resolvedMaxFontSizeMultiplier);\n avatarStyles.useVariants({ size, text: variant });\n\n const rootStyle = useMemo(\n () => [\n avatarStyles.root,\n avatarStaticStyles.root,\n getAvatarSizeStyle(avatarStyles.root, customSize, fontScaleFactor),\n style,\n ],\n [avatarStyles.root, customSize, fontScaleFactor, style],\n );\n\n return (\n <Box\n ref={ref}\n accessibilityRole=\"image\"\n accessibilityLabel={accessibilityLabel ?? name ?? initials}\n {...viewProps}\n style={rootStyle}\n >\n <Text\n color=\"inherit\"\n variant=\"inherit\"\n numberOfLines={1}\n maxFontSizeMultiplier={resolvedMaxFontSizeMultiplier}\n style={avatarStyles.text}\n >\n {initials || generateAvatarAbbreviation(name, abbreviationStrategy)}\n </Text>\n </Box>\n );\n});\n\nAvatarText.displayName = 'AvatarText';\n\nconst avatarStaticStyles = StyleSheet.create({\n root: {\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n});\n\nexport { AvatarText };\n"],"mappings":";;;;;;;;;;;AAgBA,MAAM,aAAa,KAAK,SAAS,WAAW,EAC1C,OAAA,MACA,UAAU,wBACV,MACA,UACA,sBACA,YACA,uBACA,OACA,oBACA,KACA,GAAG,aACe;CAClB,MAAM,gCACJ,yBAAyB,WAAW,sBAAsB,IAAI;CAChE,MAAM,kBAAkB,aAAa,8BAA8B;CACnE,aAAa,YAAY;EAAE;EAAM,MAAM;EAAS,CAAC;CAEjD,MAAM,YAAY,cACV;EACJ,aAAa;EACb,mBAAmB;EACnB,mBAAmB,aAAa,MAAM,YAAY,gBAAgB;EAClE;EACD,EACD;EAAC,aAAa;EAAM;EAAY;EAAiB;EAAM,CACxD;CAED,OACE,oBAAC,KAAD;EACO;EACL,mBAAkB;EAClB,oBAAoB,sBAAsB,QAAQ;EAClD,GAAI;EACJ,OAAO;YAEP,oBAACA,QAAD;GACE,OAAM;GACN,SAAQ;GACR,eAAe;GACf,uBAAuB;GACvB,OAAO,aAAa;aAEnB,YAAY,2BAA2B,MAAM,qBAAqB;GAC9D,CAAA;EACH,CAAA;EAER;AAEF,WAAW,cAAc;AAEzB,MAAM,qBAAqB,WAAW,OAAO,EAC3C,MAAM;CACJ,YAAY;CACZ,gBAAgB;CAChB,UAAU;CACX,EACF,CAAC"}
@@ -5,17 +5,21 @@ import { Ref } from "react";
5
5
  import { View, ViewProps } from "react-native";
6
6
 
7
7
  //#region src/components/Avatar/types.d.ts
8
- interface AvatarImageProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarImageProps, 'className' | 'srcSet'> {
8
+ interface AvatarFontScalingProps {
9
+ /** Caps avatar content and geometry at the control scale. Set null to remove the cap. @default 2 */
10
+ maxFontSizeMultiplier?: number | null;
11
+ }
12
+ interface AvatarImageProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarImageProps, 'className' | 'srcSet'>, AvatarFontScalingProps {
9
13
  /** Ref to the underlying View. */
10
14
  ref?: Ref<View>;
11
15
  /** Custom icon to display if the image fails and no text fallback is available. */
12
16
  icon?: IconSlotType;
13
17
  }
14
- interface AvatarTextProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarTextProps, 'className'> {
18
+ interface AvatarTextProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarTextProps, 'className'>, AvatarFontScalingProps {
15
19
  /** Ref to the underlying View. */
16
20
  ref?: Ref<View>;
17
21
  }
18
- interface AvatarIconProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarIconProps<IconSlotType>, 'className'> {
22
+ interface AvatarIconProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarIconProps<IconSlotType>, 'className'>, AvatarFontScalingProps {
19
23
  /** Ref to the underlying View. */
20
24
  ref?: Ref<View>;
21
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/components/Avatar/types.ts"],"mappings":";;;;;;;UAaU,gBAAA,SACA,IAAA,CAAK,SAAA,eAAwB,IAAA,CAAK,yBAAA;;EAE1C,GAAA,GAAM,GAAA,CAAI,IAAA;EAFV;EAIA,IAAA,GAAO,YAAA;AAAA;AAAA,UAGC,eAAA,SACA,IAAA,CAAK,SAAA,eAAwB,IAAA,CAAK,wBAAA;EANhC;EAQV,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;AAAA,UAGF,eAAA,SACA,IAAA,CAAK,SAAA,eAAwB,IAAA,CAAK,wBAAA,CAAyB,YAAA;EAd9B;EAgBrC,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;AAAA,UAGF,WAAA,SAAoB,IAAA,CAAK,gBAAA;EAnBpB;EAqBb,GAAA;AAAA"}
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/components/Avatar/types.ts"],"mappings":";;;;;;;UAaU,sBAAA;;EAER,qBAAA;AAAA;AAAA,UAGQ,gBAAA,SAEN,IAAA,CAAK,SAAA,eACL,IAAA,CAAK,yBAAA,2BACL,sBAAA;EAPF;EASA,GAAA,GAAM,GAAA,CAAI,IAAA;EANF;EAQR,IAAA,GAAO,YAAA;AAAA;AAAA,UAGC,eAAA,SAEN,IAAA,CAAK,SAAA,eACL,IAAA,CAAK,wBAAA,gBACL,sBAAA;EAZK;EAcP,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;AAAA,UAGF,eAAA,SAEN,IAAA,CAAK,SAAA,eACL,IAAA,CAAK,wBAAA,CAAyB,YAAA,iBAC9B,sBAAA;EAtBA;EAwBF,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;AAAA,UAGF,WAAA,SAAoB,IAAA,CAAK,gBAAA;EAzBT;EA2BxB,GAAA;AAAA"}
@@ -5,17 +5,21 @@ import { Ref } from "react";
5
5
  import { View, ViewProps } from "react-native";
6
6
 
7
7
  //#region src/components/Avatar/types.d.ts
8
- interface AvatarImageProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarImageProps, 'className' | 'srcSet'> {
8
+ interface AvatarFontScalingProps {
9
+ /** Caps avatar content and geometry at the control scale. Set null to remove the cap. @default 2 */
10
+ maxFontSizeMultiplier?: number | null;
11
+ }
12
+ interface AvatarImageProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarImageProps, 'className' | 'srcSet'>, AvatarFontScalingProps {
9
13
  /** Ref to the underlying View. */
10
14
  ref?: Ref<View>;
11
15
  /** Custom icon to display if the image fails and no text fallback is available. */
12
16
  icon?: IconSlotType;
13
17
  }
14
- interface AvatarTextProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarTextProps, 'className'> {
18
+ interface AvatarTextProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarTextProps, 'className'>, AvatarFontScalingProps {
15
19
  /** Ref to the underlying View. */
16
20
  ref?: Ref<View>;
17
21
  }
18
- interface AvatarIconProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarIconProps<IconSlotType>, 'className'> {
22
+ interface AvatarIconProps extends Omit<ViewProps, 'children'>, Omit<UniversalAvatarIconProps<IconSlotType>, 'className'>, AvatarFontScalingProps {
19
23
  /** Ref to the underlying View. */
20
24
  ref?: Ref<View>;
21
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/components/Avatar/types.ts"],"mappings":";;;;;;;UAaU,gBAAA,SACA,IAAA,CAAK,SAAA,eAAwB,IAAA,CAAK,yBAAA;;EAE1C,GAAA,GAAM,GAAA,CAAI,IAAA;EAFV;EAIA,IAAA,GAAO,YAAA;AAAA;AAAA,UAGC,eAAA,SACA,IAAA,CAAK,SAAA,eAAwB,IAAA,CAAK,wBAAA;EANhC;EAQV,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;AAAA,UAGF,eAAA,SACA,IAAA,CAAK,SAAA,eAAwB,IAAA,CAAK,wBAAA,CAAyB,YAAA;EAd9B;EAgBrC,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;AAAA,UAGF,WAAA,SAAoB,IAAA,CAAK,gBAAA;EAnBpB;EAqBb,GAAA;AAAA"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/components/Avatar/types.ts"],"mappings":";;;;;;;UAaU,sBAAA;;EAER,qBAAA;AAAA;AAAA,UAGQ,gBAAA,SAEN,IAAA,CAAK,SAAA,eACL,IAAA,CAAK,yBAAA,2BACL,sBAAA;EAPF;EASA,GAAA,GAAM,GAAA,CAAI,IAAA;EANF;EAQR,IAAA,GAAO,YAAA;AAAA;AAAA,UAGC,eAAA,SAEN,IAAA,CAAK,SAAA,eACL,IAAA,CAAK,wBAAA,gBACL,sBAAA;EAZK;EAcP,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;AAAA,UAGF,eAAA,SAEN,IAAA,CAAK,SAAA,eACL,IAAA,CAAK,wBAAA,CAAyB,YAAA,iBAC9B,sBAAA;EAtBA;EAwBF,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;AAAA,UAGF,WAAA,SAAoB,IAAA,CAAK,gBAAA;EAzBT;EA2BxB,GAAA;AAAA"}
@@ -21,11 +21,14 @@ function generateAvatarAbbreviation(name, strategy = "firstAndLast") {
21
21
  const initials = name.trim().split(/\s+/).filter(Boolean).map((word) => word[0]?.toUpperCase() ?? "");
22
22
  return abbreviationStrategies[strategy](initials);
23
23
  }
24
- function getAvatarCustomSizeStyle(customSize) {
25
- return customSize === void 0 ? void 0 : {
26
- width: customSize,
27
- height: customSize
28
- };
24
+ function getAvatarSizeStyle(rootStyle, customSize, fontScaleFactor) {
25
+ if (customSize === void 0 && fontScaleFactor === 1) return;
26
+ const width = customSize ?? rootStyle.width;
27
+ const height = customSize ?? rootStyle.height;
28
+ return typeof width === "number" && typeof height === "number" ? {
29
+ width: Math.round(width * fontScaleFactor),
30
+ height: Math.round(height * fontScaleFactor)
31
+ } : void 0;
29
32
  }
30
33
  function getDefaultAvatarIcon(variant) {
31
34
  return DEFAULT_AVATAR_ICON[variant];
@@ -34,5 +37,5 @@ function getDefaultAvatarIcon(variant) {
34
37
  exports.DEFAULT_AVATAR_SIZE = DEFAULT_AVATAR_SIZE;
35
38
  exports.DEFAULT_AVATAR_VARIANT = DEFAULT_AVATAR_VARIANT;
36
39
  exports.generateAvatarAbbreviation = generateAvatarAbbreviation;
37
- exports.getAvatarCustomSizeStyle = getAvatarCustomSizeStyle;
40
+ exports.getAvatarSizeStyle = getAvatarSizeStyle;
38
41
  exports.getDefaultAvatarIcon = getDefaultAvatarIcon;
@@ -7,8 +7,8 @@ import { ViewStyle } from "react-native";
7
7
  declare const DEFAULT_AVATAR_SIZE: AvatarSize;
8
8
  declare const DEFAULT_AVATAR_VARIANT: AvatarVariant;
9
9
  declare function generateAvatarAbbreviation(name?: string, strategy?: AvatarAbbreviationStrategy): string;
10
- declare function getAvatarCustomSizeStyle(customSize?: number): ViewStyle | undefined;
10
+ declare function getAvatarSizeStyle(rootStyle: ViewStyle, customSize: number | undefined, fontScaleFactor: number): ViewStyle | undefined;
11
11
  declare function getDefaultAvatarIcon(variant: AvatarVariant): IconSlotType;
12
12
  //#endregion
13
- export { DEFAULT_AVATAR_SIZE, DEFAULT_AVATAR_VARIANT, generateAvatarAbbreviation, getAvatarCustomSizeStyle, getDefaultAvatarIcon };
13
+ export { DEFAULT_AVATAR_SIZE, DEFAULT_AVATAR_VARIANT, generateAvatarAbbreviation, getAvatarSizeStyle, getDefaultAvatarIcon };
14
14
  //# sourceMappingURL=utils.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.cts","names":[],"sources":["../../../src/components/Avatar/utils.ts"],"mappings":";;;;;;cAKM,mBAAA,EAAqB,UAAA;AAAA,cACrB,sBAAA,EAAwB,aAAA;AAAA,iBAoBrB,0BAAA,CACP,IAAA,WACA,QAAA,GAAU,0BAAA;AAAA,iBAgBH,wBAAA,CAAyB,UAAA,YAAsB,SAAA;AAAA,iBAI/C,oBAAA,CAAqB,OAAA,EAAS,aAAA,GAAgB,YAAA"}
1
+ {"version":3,"file":"utils.d.cts","names":[],"sources":["../../../src/components/Avatar/utils.ts"],"mappings":";;;;;;cAKM,mBAAA,EAAqB,UAAA;AAAA,cACrB,sBAAA,EAAwB,aAAA;AAAA,iBAoBrB,0BAAA,CACP,IAAA,WACA,QAAA,GAAU,0BAAA;AAAA,iBAgBH,kBAAA,CACP,SAAA,EAAW,SAAA,EACX,UAAA,sBACA,eAAA,WACC,SAAA;AAAA,iBAgBM,oBAAA,CAAqB,OAAA,EAAS,aAAA,GAAgB,YAAA"}
@@ -7,8 +7,8 @@ import { ViewStyle } from "react-native";
7
7
  declare const DEFAULT_AVATAR_SIZE: AvatarSize;
8
8
  declare const DEFAULT_AVATAR_VARIANT: AvatarVariant;
9
9
  declare function generateAvatarAbbreviation(name?: string, strategy?: AvatarAbbreviationStrategy): string;
10
- declare function getAvatarCustomSizeStyle(customSize?: number): ViewStyle | undefined;
10
+ declare function getAvatarSizeStyle(rootStyle: ViewStyle, customSize: number | undefined, fontScaleFactor: number): ViewStyle | undefined;
11
11
  declare function getDefaultAvatarIcon(variant: AvatarVariant): IconSlotType;
12
12
  //#endregion
13
- export { DEFAULT_AVATAR_SIZE, DEFAULT_AVATAR_VARIANT, generateAvatarAbbreviation, getAvatarCustomSizeStyle, getDefaultAvatarIcon };
13
+ export { DEFAULT_AVATAR_SIZE, DEFAULT_AVATAR_VARIANT, generateAvatarAbbreviation, getAvatarSizeStyle, getDefaultAvatarIcon };
14
14
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/components/Avatar/utils.ts"],"mappings":";;;;;;cAKM,mBAAA,EAAqB,UAAA;AAAA,cACrB,sBAAA,EAAwB,aAAA;AAAA,iBAoBrB,0BAAA,CACP,IAAA,WACA,QAAA,GAAU,0BAAA;AAAA,iBAgBH,wBAAA,CAAyB,UAAA,YAAsB,SAAA;AAAA,iBAI/C,oBAAA,CAAqB,OAAA,EAAS,aAAA,GAAgB,YAAA"}
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/components/Avatar/utils.ts"],"mappings":";;;;;;cAKM,mBAAA,EAAqB,UAAA;AAAA,cACrB,sBAAA,EAAwB,aAAA;AAAA,iBAoBrB,0BAAA,CACP,IAAA,WACA,QAAA,GAAU,0BAAA;AAAA,iBAgBH,kBAAA,CACP,SAAA,EAAW,SAAA,EACX,UAAA,sBACA,eAAA,WACC,SAAA;AAAA,iBAgBM,oBAAA,CAAqB,OAAA,EAAS,aAAA,GAAgB,YAAA"}
@@ -20,16 +20,19 @@ function generateAvatarAbbreviation(name, strategy = "firstAndLast") {
20
20
  const initials = name.trim().split(/\s+/).filter(Boolean).map((word) => word[0]?.toUpperCase() ?? "");
21
21
  return abbreviationStrategies[strategy](initials);
22
22
  }
23
- function getAvatarCustomSizeStyle(customSize) {
24
- return customSize === void 0 ? void 0 : {
25
- width: customSize,
26
- height: customSize
27
- };
23
+ function getAvatarSizeStyle(rootStyle, customSize, fontScaleFactor) {
24
+ if (customSize === void 0 && fontScaleFactor === 1) return;
25
+ const width = customSize ?? rootStyle.width;
26
+ const height = customSize ?? rootStyle.height;
27
+ return typeof width === "number" && typeof height === "number" ? {
28
+ width: Math.round(width * fontScaleFactor),
29
+ height: Math.round(height * fontScaleFactor)
30
+ } : void 0;
28
31
  }
29
32
  function getDefaultAvatarIcon(variant) {
30
33
  return DEFAULT_AVATAR_ICON[variant];
31
34
  }
32
35
  //#endregion
33
- export { DEFAULT_AVATAR_SIZE, DEFAULT_AVATAR_VARIANT, generateAvatarAbbreviation, getAvatarCustomSizeStyle, getDefaultAvatarIcon };
36
+ export { DEFAULT_AVATAR_SIZE, DEFAULT_AVATAR_VARIANT, generateAvatarAbbreviation, getAvatarSizeStyle, getDefaultAvatarIcon };
34
37
 
35
38
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../../src/components/Avatar/utils.ts"],"sourcesContent":["import type { AvatarAbbreviationStrategy, AvatarSize, AvatarVariant } from '@yahoo/uds-types';\nimport type { ViewStyle } from 'react-native';\n\nimport type { IconSlotType } from '../IconSlot';\n\nconst DEFAULT_AVATAR_SIZE: AvatarSize = 'md';\nconst DEFAULT_AVATAR_VARIANT: AvatarVariant = 'primary';\n\nconst DEFAULT_AVATAR_ICON: Record<AvatarVariant, IconSlotType> = {\n primary: 'Person',\n secondary: 'Building',\n};\n\nconst abbreviationStrategies: Record<\n Exclude<AvatarAbbreviationStrategy, (name: string) => string>,\n (initials: string[]) => string\n> = {\n first: (initials) => initials[0] ?? '',\n last: (initials) => initials[initials.length - 1] ?? '',\n firstAndLast: (initials) =>\n initials.length === 1 ? (initials[0] ?? '') : `${initials[0]}${initials[initials.length - 1]}`,\n firstTwo: (initials) => initials.slice(0, 2).join(''),\n firstThree: (initials) => initials.slice(0, 3).join(''),\n firstOfEach: (initials) => initials.join(''),\n};\n\nfunction generateAvatarAbbreviation(\n name?: string,\n strategy: AvatarAbbreviationStrategy = 'firstAndLast',\n): string {\n if (!name) {\n return '';\n }\n\n if (typeof strategy === 'function') {\n return strategy(name);\n }\n\n const words = name.trim().split(/\\s+/).filter(Boolean);\n const initials = words.map((word) => word[0]?.toUpperCase() ?? '');\n\n return abbreviationStrategies[strategy](initials);\n}\n\nfunction getAvatarCustomSizeStyle(customSize?: number): ViewStyle | undefined {\n return customSize === undefined ? undefined : { width: customSize, height: customSize };\n}\n\nfunction getDefaultAvatarIcon(variant: AvatarVariant): IconSlotType {\n return DEFAULT_AVATAR_ICON[variant];\n}\n\nexport {\n DEFAULT_AVATAR_SIZE,\n DEFAULT_AVATAR_VARIANT,\n generateAvatarAbbreviation,\n getAvatarCustomSizeStyle,\n getDefaultAvatarIcon,\n};\n"],"mappings":";;AAKA,MAAM,sBAAkC;AACxC,MAAM,yBAAwC;AAE9C,MAAM,sBAA2D;CAC/D,SAAS;CACT,WAAW;CACZ;AAED,MAAM,yBAGF;CACF,QAAQ,aAAa,SAAS,MAAM;CACpC,OAAO,aAAa,SAAS,SAAS,SAAS,MAAM;CACrD,eAAe,aACb,SAAS,WAAW,IAAK,SAAS,MAAM,KAAM,GAAG,SAAS,KAAK,SAAS,SAAS,SAAS;CAC5F,WAAW,aAAa,SAAS,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG;CACrD,aAAa,aAAa,SAAS,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG;CACvD,cAAc,aAAa,SAAS,KAAK,GAAG;CAC7C;AAED,SAAS,2BACP,MACA,WAAuC,gBAC/B;CACR,IAAI,CAAC,MACH,OAAO;CAGT,IAAI,OAAO,aAAa,YACtB,OAAO,SAAS,KAAK;CAIvB,MAAM,WADQ,KAAK,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,QACxB,CAAC,KAAK,SAAS,KAAK,IAAI,aAAa,IAAI,GAAG;CAElE,OAAO,uBAAuB,UAAU,SAAS;;AAGnD,SAAS,yBAAyB,YAA4C;CAC5E,OAAO,eAAe,KAAA,IAAY,KAAA,IAAY;EAAE,OAAO;EAAY,QAAQ;EAAY;;AAGzF,SAAS,qBAAqB,SAAsC;CAClE,OAAO,oBAAoB"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../src/components/Avatar/utils.ts"],"sourcesContent":["import type { AvatarAbbreviationStrategy, AvatarSize, AvatarVariant } from '@yahoo/uds-types';\nimport type { ViewStyle } from 'react-native';\n\nimport type { IconSlotType } from '../IconSlot';\n\nconst DEFAULT_AVATAR_SIZE: AvatarSize = 'md';\nconst DEFAULT_AVATAR_VARIANT: AvatarVariant = 'primary';\n\nconst DEFAULT_AVATAR_ICON: Record<AvatarVariant, IconSlotType> = {\n primary: 'Person',\n secondary: 'Building',\n};\n\nconst abbreviationStrategies: Record<\n Exclude<AvatarAbbreviationStrategy, (name: string) => string>,\n (initials: string[]) => string\n> = {\n first: (initials) => initials[0] ?? '',\n last: (initials) => initials[initials.length - 1] ?? '',\n firstAndLast: (initials) =>\n initials.length === 1 ? (initials[0] ?? '') : `${initials[0]}${initials[initials.length - 1]}`,\n firstTwo: (initials) => initials.slice(0, 2).join(''),\n firstThree: (initials) => initials.slice(0, 3).join(''),\n firstOfEach: (initials) => initials.join(''),\n};\n\nfunction generateAvatarAbbreviation(\n name?: string,\n strategy: AvatarAbbreviationStrategy = 'firstAndLast',\n): string {\n if (!name) {\n return '';\n }\n\n if (typeof strategy === 'function') {\n return strategy(name);\n }\n\n const words = name.trim().split(/\\s+/).filter(Boolean);\n const initials = words.map((word) => word[0]?.toUpperCase() ?? '');\n\n return abbreviationStrategies[strategy](initials);\n}\n\nfunction getAvatarSizeStyle(\n rootStyle: ViewStyle,\n customSize: number | undefined,\n fontScaleFactor: number,\n): ViewStyle | undefined {\n if (customSize === undefined && fontScaleFactor === 1) {\n return undefined;\n }\n\n const width = customSize ?? rootStyle.width;\n const height = customSize ?? rootStyle.height;\n\n return typeof width === 'number' && typeof height === 'number'\n ? {\n width: Math.round(width * fontScaleFactor),\n height: Math.round(height * fontScaleFactor),\n }\n : undefined;\n}\n\nfunction getDefaultAvatarIcon(variant: AvatarVariant): IconSlotType {\n return DEFAULT_AVATAR_ICON[variant];\n}\n\nexport {\n DEFAULT_AVATAR_SIZE,\n DEFAULT_AVATAR_VARIANT,\n generateAvatarAbbreviation,\n getAvatarSizeStyle,\n getDefaultAvatarIcon,\n};\n"],"mappings":";;AAKA,MAAM,sBAAkC;AACxC,MAAM,yBAAwC;AAE9C,MAAM,sBAA2D;CAC/D,SAAS;CACT,WAAW;CACZ;AAED,MAAM,yBAGF;CACF,QAAQ,aAAa,SAAS,MAAM;CACpC,OAAO,aAAa,SAAS,SAAS,SAAS,MAAM;CACrD,eAAe,aACb,SAAS,WAAW,IAAK,SAAS,MAAM,KAAM,GAAG,SAAS,KAAK,SAAS,SAAS,SAAS;CAC5F,WAAW,aAAa,SAAS,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG;CACrD,aAAa,aAAa,SAAS,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG;CACvD,cAAc,aAAa,SAAS,KAAK,GAAG;CAC7C;AAED,SAAS,2BACP,MACA,WAAuC,gBAC/B;CACR,IAAI,CAAC,MACH,OAAO;CAGT,IAAI,OAAO,aAAa,YACtB,OAAO,SAAS,KAAK;CAIvB,MAAM,WADQ,KAAK,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,QACxB,CAAC,KAAK,SAAS,KAAK,IAAI,aAAa,IAAI,GAAG;CAElE,OAAO,uBAAuB,UAAU,SAAS;;AAGnD,SAAS,mBACP,WACA,YACA,iBACuB;CACvB,IAAI,eAAe,KAAA,KAAa,oBAAoB,GAClD;CAGF,MAAM,QAAQ,cAAc,UAAU;CACtC,MAAM,SAAS,cAAc,UAAU;CAEvC,OAAO,OAAO,UAAU,YAAY,OAAO,WAAW,WAClD;EACE,OAAO,KAAK,MAAM,QAAQ,gBAAgB;EAC1C,QAAQ,KAAK,MAAM,SAAS,gBAAgB;EAC7C,GACD,KAAA;;AAGN,SAAS,qBAAqB,SAAsC;CAClE,OAAO,oBAAoB"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
4
4
  const require_index = require("../motion-tokens/dist/index.cjs");
5
5
  const require_motion = require("../motion.cjs");
6
+ const require_fontScaling_FontScalingContext = require("../fontScaling/FontScalingContext.cjs");
6
7
  const require_fontScaling_useFontScale = require("../fontScaling/useFontScale.cjs");
7
8
  const require_fontScaling_useMaxFontSizeMultiplier = require("../fontScaling/useMaxFontSizeMultiplier.cjs");
8
9
  const require_components_Button_buttonTheme = require("./Button/buttonTheme.cjs");
@@ -125,7 +126,10 @@ const Button = (0, react.memo)(function Button({ variant = "primary", size = "md
125
126
  scale,
126
127
  onPressOut
127
128
  ]);
128
- const childrenNode = children && ((0, react.isValidElement)(children) ? children : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Text.Text, {
129
+ const childrenNode = children && ((0, react.isValidElement)(children) ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_fontScaling_FontScalingContext.ResolvedControlFontScalingProvider, {
130
+ maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
131
+ children
132
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Text.Text, {
129
133
  numberOfLines: 1,
130
134
  textAlign: "center",
131
135
  maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.cts","names":[],"sources":["../../src/components/Button.tsx"],"mappings":";;;;;;;;;UAuHU,WAAA,SAAoB,IAAA,CAAK,gBAAA;;EAEjC,OAAA,GAAU,iBAAA;EAFF;EAIR,IAAA,GAAO,UAAA;;EAEP,WAAA,GAAc,WAAA;EAJJ;EAMV,SAAA,GAAY,YAAA;EAFE;EAId,OAAA,GAAU,YAAA;EAAA;EAEV,OAAA;EAkBU;EAhBV,QAAA;EAd4B;EAgB5B,QAAA,GAAW,KAAA,CAAM,SAAA;EAhBe;;;;EAqBhC,cAAA;EAjBA;;;;;;EAwBA,qBAAA;EAlBU;EAoBV,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;;;;;;;;;;;AAAI;;;;;;;;;;;;;;;;;;;;;;cAuCV,MAAA,EAAM,OAAA,CAAA,oBAAA,CAAA,WAAA"}
1
+ {"version":3,"file":"Button.d.cts","names":[],"sources":["../../src/components/Button.tsx"],"mappings":";;;;;;;;;UAwHU,WAAA,SAAoB,IAAA,CAAK,gBAAA;;EAEjC,OAAA,GAAU,iBAAA;EAFF;EAIR,IAAA,GAAO,UAAA;;EAEP,WAAA,GAAc,WAAA;EAJJ;EAMV,SAAA,GAAY,YAAA;EAFE;EAId,OAAA,GAAU,YAAA;EAAA;EAEV,OAAA;EAkBU;EAhBV,QAAA;EAd4B;EAgB5B,QAAA,GAAW,KAAA,CAAM,SAAA;EAhBe;;;;EAqBhC,cAAA;EAjBA;;;;;;EAwBA,qBAAA;EAlBU;EAoBV,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;;;;;;;;;;;AAAI;;;;;;;;;;;;;;;;;;;;;;cAuCV,MAAA,EAAM,OAAA,CAAA,oBAAA,CAAA,WAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","names":[],"sources":["../../src/components/Button.tsx"],"mappings":";;;;;;;;;UAuHU,WAAA,SAAoB,IAAA,CAAK,gBAAA;;EAEjC,OAAA,GAAU,iBAAA;EAFF;EAIR,IAAA,GAAO,UAAA;;EAEP,WAAA,GAAc,WAAA;EAJJ;EAMV,SAAA,GAAY,YAAA;EAFE;EAId,OAAA,GAAU,YAAA;EAAA;EAEV,OAAA;EAkBU;EAhBV,QAAA;EAd4B;EAgB5B,QAAA,GAAW,KAAA,CAAM,SAAA;EAhBe;;;;EAqBhC,cAAA;EAjBA;;;;;;EAwBA,qBAAA;EAlBU;EAoBV,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;;;;;;;;;;;AAAI;;;;;;;;;;;;;;;;;;;;;;cAuCV,MAAA,EAAM,OAAA,CAAA,oBAAA,CAAA,WAAA"}
1
+ {"version":3,"file":"Button.d.ts","names":[],"sources":["../../src/components/Button.tsx"],"mappings":";;;;;;;;;UAwHU,WAAA,SAAoB,IAAA,CAAK,gBAAA;;EAEjC,OAAA,GAAU,iBAAA;EAFF;EAIR,IAAA,GAAO,UAAA;;EAEP,WAAA,GAAc,WAAA;EAJJ;EAMV,SAAA,GAAY,YAAA;EAFE;EAId,OAAA,GAAU,YAAA;EAAA;EAEV,OAAA;EAkBU;EAhBV,QAAA;EAd4B;EAgB5B,QAAA,GAAW,KAAA,CAAM,SAAA;EAhBe;;;;EAqBhC,cAAA;EAjBA;;;;;;EAwBA,qBAAA;EAlBU;EAoBV,GAAA,GAAM,GAAA,CAAI,IAAA;AAAA;;;;;;;;;;;AAAI;;;;;;;;;;;;;;;;;;;;;;cAuCV,MAAA,EAAM,OAAA,CAAA,oBAAA,CAAA,WAAA"}
@@ -1,6 +1,7 @@
1
1
  /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
2
  import { SCALE_EFFECTS } from "../motion-tokens/dist/index.js";
3
3
  import { BUTTON_SPRING_CONFIG } from "../motion.js";
4
+ import { ResolvedControlFontScalingProvider } from "../fontScaling/FontScalingContext.js";
4
5
  import { useFontScale } from "../fontScaling/useFontScale.js";
5
6
  import { useMaxFontSizeMultiplier } from "../fontScaling/useMaxFontSizeMultiplier.js";
6
7
  import { getButtonControlMetrics, getButtonTextStyle } from "./Button/buttonTheme.js";
@@ -122,7 +123,10 @@ const Button = memo(function Button({ variant = "primary", size = "md", iconVari
122
123
  scale,
123
124
  onPressOut
124
125
  ]);
125
- const childrenNode = children && (isValidElement(children) ? children : /* @__PURE__ */ jsx(Text$1, {
126
+ const childrenNode = children && (isValidElement(children) ? /* @__PURE__ */ jsx(ResolvedControlFontScalingProvider, {
127
+ maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,
128
+ children
129
+ }) : /* @__PURE__ */ jsx(Text$1, {
126
130
  numberOfLines: 1,
127
131
  textAlign: "center",
128
132
  maxFontSizeMultiplier: resolvedMaxFontSizeMultiplier,