@yahoo/uds-mobile 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/CONTRIBUTING.md +1174 -0
  2. package/README.md +614 -0
  3. package/cli/uds-mobile.js +10 -0
  4. package/dist/_virtual/rolldown_runtime.cjs +30 -0
  5. package/dist/bin/generateTheme.mjs +390 -0
  6. package/dist/bin/mobile/scripts/utils/configToRNMappings.mjs +74 -0
  7. package/dist/bin/uds/dist/fixtures.mjs +404 -0
  8. package/dist/bin/uds/dist/tokens/configs/palette/alwaysPalette.mjs +23 -0
  9. package/dist/bin/uds/dist/tokens/consts/defaultModes.mjs +6 -0
  10. package/dist/bin/uds/dist/tokens/consts/fontDeclarationsMap.mjs +652 -0
  11. package/dist/bin/uds-mobile.mjs +256 -0
  12. package/dist/components/Avatar.cjs +109 -0
  13. package/dist/components/Avatar.d.cts +60 -0
  14. package/dist/components/Avatar.d.cts.map +1 -0
  15. package/dist/components/Avatar.d.mts +60 -0
  16. package/dist/components/Avatar.d.mts.map +1 -0
  17. package/dist/components/Avatar.mjs +109 -0
  18. package/dist/components/Avatar.mjs.map +1 -0
  19. package/dist/components/Badge.cjs +68 -0
  20. package/dist/components/Badge.d.cts +43 -0
  21. package/dist/components/Badge.d.cts.map +1 -0
  22. package/dist/components/Badge.d.mts +43 -0
  23. package/dist/components/Badge.d.mts.map +1 -0
  24. package/dist/components/Badge.mjs +68 -0
  25. package/dist/components/Badge.mjs.map +1 -0
  26. package/dist/components/Box.cjs +114 -0
  27. package/dist/components/Box.d.cts +87 -0
  28. package/dist/components/Box.d.cts.map +1 -0
  29. package/dist/components/Box.d.mts +87 -0
  30. package/dist/components/Box.d.mts.map +1 -0
  31. package/dist/components/Box.mjs +114 -0
  32. package/dist/components/Box.mjs.map +1 -0
  33. package/dist/components/Button.cjs +187 -0
  34. package/dist/components/Button.d.cts +56 -0
  35. package/dist/components/Button.d.cts.map +1 -0
  36. package/dist/components/Button.d.mts +56 -0
  37. package/dist/components/Button.d.mts.map +1 -0
  38. package/dist/components/Button.mjs +186 -0
  39. package/dist/components/Button.mjs.map +1 -0
  40. package/dist/components/Checkbox.cjs +156 -0
  41. package/dist/components/Checkbox.d.cts +48 -0
  42. package/dist/components/Checkbox.d.cts.map +1 -0
  43. package/dist/components/Checkbox.d.mts +48 -0
  44. package/dist/components/Checkbox.d.mts.map +1 -0
  45. package/dist/components/Checkbox.mjs +155 -0
  46. package/dist/components/Checkbox.mjs.map +1 -0
  47. package/dist/components/Chip.cjs +124 -0
  48. package/dist/components/Chip.d.cts +60 -0
  49. package/dist/components/Chip.d.cts.map +1 -0
  50. package/dist/components/Chip.d.mts +60 -0
  51. package/dist/components/Chip.d.mts.map +1 -0
  52. package/dist/components/Chip.mjs +124 -0
  53. package/dist/components/Chip.mjs.map +1 -0
  54. package/dist/components/HStack.cjs +46 -0
  55. package/dist/components/HStack.d.cts +41 -0
  56. package/dist/components/HStack.d.cts.map +1 -0
  57. package/dist/components/HStack.d.mts +41 -0
  58. package/dist/components/HStack.d.mts.map +1 -0
  59. package/dist/components/HStack.mjs +46 -0
  60. package/dist/components/HStack.mjs.map +1 -0
  61. package/dist/components/Icon.cjs +150 -0
  62. package/dist/components/Icon.d.cts +90 -0
  63. package/dist/components/Icon.d.cts.map +1 -0
  64. package/dist/components/Icon.d.mts +90 -0
  65. package/dist/components/Icon.d.mts.map +1 -0
  66. package/dist/components/Icon.mjs +148 -0
  67. package/dist/components/Icon.mjs.map +1 -0
  68. package/dist/components/IconButton.cjs +127 -0
  69. package/dist/components/IconButton.d.cts +46 -0
  70. package/dist/components/IconButton.d.cts.map +1 -0
  71. package/dist/components/IconButton.d.mts +46 -0
  72. package/dist/components/IconButton.d.mts.map +1 -0
  73. package/dist/components/IconButton.mjs +127 -0
  74. package/dist/components/IconButton.mjs.map +1 -0
  75. package/dist/components/IconSlot.cjs +55 -0
  76. package/dist/components/IconSlot.d.cts +45 -0
  77. package/dist/components/IconSlot.d.cts.map +1 -0
  78. package/dist/components/IconSlot.d.mts +45 -0
  79. package/dist/components/IconSlot.d.mts.map +1 -0
  80. package/dist/components/IconSlot.mjs +55 -0
  81. package/dist/components/IconSlot.mjs.map +1 -0
  82. package/dist/components/Image.cjs +104 -0
  83. package/dist/components/Image.d.cts +85 -0
  84. package/dist/components/Image.d.cts.map +1 -0
  85. package/dist/components/Image.d.mts +85 -0
  86. package/dist/components/Image.d.mts.map +1 -0
  87. package/dist/components/Image.mjs +104 -0
  88. package/dist/components/Image.mjs.map +1 -0
  89. package/dist/components/Input.cjs +174 -0
  90. package/dist/components/Input.d.cts +39 -0
  91. package/dist/components/Input.d.cts.map +1 -0
  92. package/dist/components/Input.d.mts +39 -0
  93. package/dist/components/Input.d.mts.map +1 -0
  94. package/dist/components/Input.mjs +174 -0
  95. package/dist/components/Input.mjs.map +1 -0
  96. package/dist/components/Link.cjs +139 -0
  97. package/dist/components/Link.d.cts +45 -0
  98. package/dist/components/Link.d.cts.map +1 -0
  99. package/dist/components/Link.d.mts +45 -0
  100. package/dist/components/Link.d.mts.map +1 -0
  101. package/dist/components/Link.mjs +138 -0
  102. package/dist/components/Link.mjs.map +1 -0
  103. package/dist/components/Pressable.cjs +120 -0
  104. package/dist/components/Pressable.d.cts +90 -0
  105. package/dist/components/Pressable.d.cts.map +1 -0
  106. package/dist/components/Pressable.d.mts +90 -0
  107. package/dist/components/Pressable.d.mts.map +1 -0
  108. package/dist/components/Pressable.mjs +118 -0
  109. package/dist/components/Pressable.mjs.map +1 -0
  110. package/dist/components/Radio.cjs +153 -0
  111. package/dist/components/Radio.d.cts +46 -0
  112. package/dist/components/Radio.d.cts.map +1 -0
  113. package/dist/components/Radio.d.mts +46 -0
  114. package/dist/components/Radio.d.mts.map +1 -0
  115. package/dist/components/Radio.mjs +152 -0
  116. package/dist/components/Radio.mjs.map +1 -0
  117. package/dist/components/Screen.cjs +89 -0
  118. package/dist/components/Screen.d.cts +53 -0
  119. package/dist/components/Screen.d.cts.map +1 -0
  120. package/dist/components/Screen.d.mts +53 -0
  121. package/dist/components/Screen.d.mts.map +1 -0
  122. package/dist/components/Screen.mjs +89 -0
  123. package/dist/components/Screen.mjs.map +1 -0
  124. package/dist/components/Switch.cjs +172 -0
  125. package/dist/components/Switch.d.cts +42 -0
  126. package/dist/components/Switch.d.cts.map +1 -0
  127. package/dist/components/Switch.d.mts +42 -0
  128. package/dist/components/Switch.d.mts.map +1 -0
  129. package/dist/components/Switch.mjs +171 -0
  130. package/dist/components/Switch.mjs.map +1 -0
  131. package/dist/components/Text.cjs +107 -0
  132. package/dist/components/Text.d.cts +96 -0
  133. package/dist/components/Text.d.cts.map +1 -0
  134. package/dist/components/Text.d.mts +96 -0
  135. package/dist/components/Text.d.mts.map +1 -0
  136. package/dist/components/Text.mjs +107 -0
  137. package/dist/components/Text.mjs.map +1 -0
  138. package/dist/components/VStack.cjs +46 -0
  139. package/dist/components/VStack.d.cts +41 -0
  140. package/dist/components/VStack.d.cts.map +1 -0
  141. package/dist/components/VStack.d.mts +41 -0
  142. package/dist/components/VStack.d.mts.map +1 -0
  143. package/dist/components/VStack.mjs +46 -0
  144. package/dist/components/VStack.mjs.map +1 -0
  145. package/dist/icons/dist/glyphMap.cjs +5475 -0
  146. package/dist/icons/dist/glyphMap.d.cts +10 -0
  147. package/dist/icons/dist/glyphMap.d.cts.map +1 -0
  148. package/dist/icons/dist/glyphMap.d.mts +10 -0
  149. package/dist/icons/dist/glyphMap.d.mts.map +1 -0
  150. package/dist/icons/dist/glyphMap.mjs +5474 -0
  151. package/dist/icons/dist/glyphMap.mjs.map +1 -0
  152. package/dist/icons/dist/svgMap.cjs +525 -0
  153. package/dist/icons/dist/svgMap.d.cts +10 -0
  154. package/dist/icons/dist/svgMap.d.cts.map +1 -0
  155. package/dist/icons/dist/svgMap.d.mts +10 -0
  156. package/dist/icons/dist/svgMap.d.mts.map +1 -0
  157. package/dist/icons/dist/svgMap.mjs +524 -0
  158. package/dist/icons/dist/svgMap.mjs.map +1 -0
  159. package/dist/icons/dist/tokens.cjs +13 -0
  160. package/dist/icons/dist/tokens.mjs +13 -0
  161. package/dist/icons/dist/tokens.mjs.map +1 -0
  162. package/dist/icons/dist/types.d.cts +24 -0
  163. package/dist/icons/dist/types.d.cts.map +1 -0
  164. package/dist/icons/dist/types.d.mts +24 -0
  165. package/dist/icons/dist/types.d.mts.map +1 -0
  166. package/dist/motion.cjs +56 -0
  167. package/dist/motion.d.cts +46 -0
  168. package/dist/motion.d.cts.map +1 -0
  169. package/dist/motion.d.mts +46 -0
  170. package/dist/motion.d.mts.map +1 -0
  171. package/dist/motion.mjs +52 -0
  172. package/dist/motion.mjs.map +1 -0
  173. package/dist/types.cjs +1 -0
  174. package/dist/types.d.cts +13 -0
  175. package/dist/types.d.cts.map +1 -0
  176. package/dist/types.d.mts +13 -0
  177. package/dist/types.d.mts.map +1 -0
  178. package/dist/types.mjs +2 -0
  179. package/dist/uds/dist/components/Box.d.cts +3 -0
  180. package/dist/uds/dist/components/Box.d.mts +3 -0
  181. package/dist/uds/dist/components/Divider/Divider.d.cts +3 -0
  182. package/dist/uds/dist/components/Divider/Divider.d.mts +3 -0
  183. package/dist/uds/dist/components/Divider/DividerCore.d.cts +4 -0
  184. package/dist/uds/dist/components/Divider/DividerCore.d.mts +4 -0
  185. package/dist/uds/dist/components/Divider/DividerInternal.d.cts +4 -0
  186. package/dist/uds/dist/components/Divider/DividerInternal.d.mts +4 -0
  187. package/dist/uds/dist/components/Divider/index.d.cts +2 -0
  188. package/dist/uds/dist/components/Divider/index.d.mts +2 -0
  189. package/dist/uds/dist/components/FormLabel.d.cts +3 -0
  190. package/dist/uds/dist/components/FormLabel.d.mts +4 -0
  191. package/dist/uds/dist/components/HStack.d.cts +4 -0
  192. package/dist/uds/dist/components/HStack.d.mts +4 -0
  193. package/dist/uds/dist/components/Icon.d.cts +3 -0
  194. package/dist/uds/dist/components/Icon.d.mts +3 -0
  195. package/dist/uds/dist/components/Image.d.cts +2 -0
  196. package/dist/uds/dist/components/Image.d.mts +3 -0
  197. package/dist/uds/dist/components/Link.d.cts +3 -0
  198. package/dist/uds/dist/components/Link.d.mts +3 -0
  199. package/dist/uds/dist/components/Text.d.cts +3 -0
  200. package/dist/uds/dist/components/Text.d.mts +3 -0
  201. package/dist/uds/dist/components/VStack.d.cts +4 -0
  202. package/dist/uds/dist/components/VStack.d.mts +4 -0
  203. package/dist/uds/dist/components/client/Avatar/Avatar.d.cts +2 -0
  204. package/dist/uds/dist/components/client/Avatar/Avatar.d.mts +3 -0
  205. package/dist/uds/dist/components/client/Avatar/AvatarIcon.d.cts +2 -0
  206. package/dist/uds/dist/components/client/Avatar/AvatarIcon.d.mts +3 -0
  207. package/dist/uds/dist/components/client/Avatar/AvatarImage.d.cts +4 -0
  208. package/dist/uds/dist/components/client/Avatar/AvatarImage.d.mts +5 -0
  209. package/dist/uds/dist/components/client/Avatar/AvatarText.d.cts +3 -0
  210. package/dist/uds/dist/components/client/Avatar/AvatarText.d.mts +4 -0
  211. package/dist/uds/dist/components/client/Avatar/index.d.cts +5 -0
  212. package/dist/uds/dist/components/client/Avatar/index.d.mts +5 -0
  213. package/dist/uds/dist/components/client/Badge.d.cts +3 -0
  214. package/dist/uds/dist/components/client/Badge.d.mts +3 -0
  215. package/dist/uds/dist/components/client/Button.d.cts +3 -0
  216. package/dist/uds/dist/components/client/Button.d.mts +3 -0
  217. package/dist/uds/dist/components/client/Checkbox.d.cts +3 -0
  218. package/dist/uds/dist/components/client/Checkbox.d.mts +3 -0
  219. package/dist/uds/dist/components/client/Chip/Chip.d.cts +4 -0
  220. package/dist/uds/dist/components/client/Chip/Chip.d.mts +4 -0
  221. package/dist/uds/dist/components/client/Chip/ChipBase.d.cts +4 -0
  222. package/dist/uds/dist/components/client/Chip/ChipBase.d.mts +4 -0
  223. package/dist/uds/dist/components/client/Chip/ChipButton.d.cts +4 -0
  224. package/dist/uds/dist/components/client/Chip/ChipButton.d.mts +4 -0
  225. package/dist/uds/dist/components/client/Chip/ChipDismissible.d.cts +4 -0
  226. package/dist/uds/dist/components/client/Chip/ChipDismissible.d.mts +4 -0
  227. package/dist/uds/dist/components/client/Chip/ChipLink.d.cts +4 -0
  228. package/dist/uds/dist/components/client/Chip/ChipLink.d.mts +4 -0
  229. package/dist/uds/dist/components/client/Chip/ChipToggle.d.cts +4 -0
  230. package/dist/uds/dist/components/client/Chip/ChipToggle.d.mts +4 -0
  231. package/dist/uds/dist/components/client/Chip/index.d.cts +6 -0
  232. package/dist/uds/dist/components/client/Chip/index.d.mts +6 -0
  233. package/dist/uds/dist/components/client/IconButton.d.cts +3 -0
  234. package/dist/uds/dist/components/client/IconButton.d.mts +3 -0
  235. package/dist/uds/dist/components/client/Input/Input.d.cts +4 -0
  236. package/dist/uds/dist/components/client/Input/Input.d.mts +4 -0
  237. package/dist/uds/dist/components/client/Input/InputHelpText.d.cts +2 -0
  238. package/dist/uds/dist/components/client/Input/InputHelpText.d.mts +3 -0
  239. package/dist/uds/dist/components/client/Input/InputHelpTextInternal.d.cts +5 -0
  240. package/dist/uds/dist/components/client/Input/InputHelpTextInternal.d.mts +6 -0
  241. package/dist/uds/dist/components/client/Input/index.d.cts +3 -0
  242. package/dist/uds/dist/components/client/Input/index.d.mts +3 -0
  243. package/dist/uds/dist/components/client/Menu/Menu.Content.d.cts +4 -0
  244. package/dist/uds/dist/components/client/Menu/Menu.Content.d.mts +4 -0
  245. package/dist/uds/dist/components/client/Menu/Menu.Divider.d.cts +3 -0
  246. package/dist/uds/dist/components/client/Menu/Menu.Divider.d.mts +3 -0
  247. package/dist/uds/dist/components/client/Menu/Menu.Item.d.cts +4 -0
  248. package/dist/uds/dist/components/client/Menu/Menu.Item.d.mts +4 -0
  249. package/dist/uds/dist/components/client/Menu/Menu.ItemCheckbox.d.cts +4 -0
  250. package/dist/uds/dist/components/client/Menu/Menu.ItemCheckbox.d.mts +4 -0
  251. package/dist/uds/dist/components/client/Menu/Menu.Provider.d.cts +2 -0
  252. package/dist/uds/dist/components/client/Menu/Menu.Provider.d.mts +3 -0
  253. package/dist/uds/dist/components/client/Menu/Menu.Trigger.d.cts +4 -0
  254. package/dist/uds/dist/components/client/Menu/Menu.Trigger.d.mts +4 -0
  255. package/dist/uds/dist/components/client/Menu/Menu.d.cts +2 -0
  256. package/dist/uds/dist/components/client/Menu/Menu.d.mts +2 -0
  257. package/dist/uds/dist/components/client/Menu/Menu.index.d.cts +7 -0
  258. package/dist/uds/dist/components/client/Menu/Menu.index.d.mts +7 -0
  259. package/dist/uds/dist/components/client/Menu/index.d.cts +9 -0
  260. package/dist/uds/dist/components/client/Menu/index.d.mts +9 -0
  261. package/dist/uds/dist/components/client/Pressable.d.cts +3 -0
  262. package/dist/uds/dist/components/client/Pressable.d.mts +3 -0
  263. package/dist/uds/dist/components/client/Radio/Radio.d.cts +3 -0
  264. package/dist/uds/dist/components/client/Radio/Radio.d.mts +3 -0
  265. package/dist/uds/dist/components/client/Radio/RadioGroupProvider.d.cts +3 -0
  266. package/dist/uds/dist/components/client/Radio/RadioGroupProvider.d.mts +3 -0
  267. package/dist/uds/dist/components/client/Radio/index.d.cts +3 -0
  268. package/dist/uds/dist/components/client/Radio/index.d.mts +3 -0
  269. package/dist/uds/dist/components/client/SpringMotionConfig.d.cts +3 -0
  270. package/dist/uds/dist/components/client/SpringMotionConfig.d.mts +3 -0
  271. package/dist/uds/dist/components/client/Switch.d.cts +3 -0
  272. package/dist/uds/dist/components/client/Switch.d.mts +3 -0
  273. package/dist/uds/dist/components/client/index.d.cts +33 -0
  274. package/dist/uds/dist/components/client/index.d.mts +33 -0
  275. package/dist/uds/dist/components/index.d.cts +40 -0
  276. package/dist/uds/dist/components/index.d.mts +40 -0
  277. package/dist/uds/dist/index.d.cts +46 -0
  278. package/dist/uds/dist/index.d.mts +46 -0
  279. package/dist/uds/dist/styles/styler.d.cts +2 -0
  280. package/dist/uds/dist/styles/styler.d.mts +2 -0
  281. package/dist/uds/dist/styles/stylerTypes.d.cts +2 -0
  282. package/dist/uds/dist/styles/stylerTypes.d.mts +2 -0
  283. package/dist/uds/dist/tokens/automation/configs/avatar.d.cts +2 -0
  284. package/dist/uds/dist/tokens/automation/configs/avatar.d.mts +2 -0
  285. package/dist/uds/dist/tokens/automation/properties.d.cts +3 -0
  286. package/dist/uds/dist/tokens/automation/properties.d.mts +3 -0
  287. package/dist/uds/dist/tokens/automation/types/ComponentConfig.d.cts +3 -0
  288. package/dist/uds/dist/tokens/automation/types/ComponentConfig.d.mts +3 -0
  289. package/dist/uds/dist/tokens/configs/motion.cjs +109 -0
  290. package/dist/uds/dist/tokens/configs/motion.d.cts +20 -0
  291. package/dist/uds/dist/tokens/configs/motion.d.cts.map +1 -0
  292. package/dist/uds/dist/tokens/configs/motion.d.mts +20 -0
  293. package/dist/uds/dist/tokens/configs/motion.d.mts.map +1 -0
  294. package/dist/uds/dist/tokens/configs/motion.mjs +108 -0
  295. package/dist/uds/dist/tokens/configs/motion.mjs.map +1 -0
  296. package/dist/uds/dist/tokens/configs/palette/alwaysPalette.d.cts +32 -0
  297. package/dist/uds/dist/tokens/configs/palette/alwaysPalette.d.cts.map +1 -0
  298. package/dist/uds/dist/tokens/configs/palette/alwaysPalette.d.mts +32 -0
  299. package/dist/uds/dist/tokens/configs/palette/alwaysPalette.d.mts.map +1 -0
  300. package/dist/uds/dist/tokens/types.d.cts +426 -0
  301. package/dist/uds/dist/tokens/types.d.cts.map +1 -0
  302. package/dist/uds/dist/tokens/types.d.mts +426 -0
  303. package/dist/uds/dist/tokens/types.d.mts.map +1 -0
  304. package/dist/uds/dist/types.d.cts +2 -0
  305. package/dist/uds/dist/types.d.mts +2 -0
  306. package/fonts/centra-no2-black-italic.otf +0 -0
  307. package/fonts/centra-no2-black.otf +0 -0
  308. package/fonts/centra-no2-bold-italic.otf +0 -0
  309. package/fonts/centra-no2-bold.otf +0 -0
  310. package/fonts/centra-no2-book-italic.otf +0 -0
  311. package/fonts/centra-no2-book.otf +0 -0
  312. package/fonts/centra-no2-extrabold-italic.otf +0 -0
  313. package/fonts/centra-no2-extrabold.otf +0 -0
  314. package/fonts/centra-no2-hairline-italic.otf +0 -0
  315. package/fonts/centra-no2-hairline.otf +0 -0
  316. package/fonts/centra-no2-light-italic.otf +0 -0
  317. package/fonts/centra-no2-light.otf +0 -0
  318. package/fonts/centra-no2-medium-italic.otf +0 -0
  319. package/fonts/centra-no2-medium.otf +0 -0
  320. package/fonts/centra-no2-thin-italic.otf +0 -0
  321. package/fonts/centra-no2-thin.otf +0 -0
  322. package/fonts/gelica-black-italic.otf +0 -0
  323. package/fonts/gelica-black.otf +0 -0
  324. package/fonts/gelica-bold-italic.otf +0 -0
  325. package/fonts/gelica-bold.otf +0 -0
  326. package/fonts/gelica-extra-light-italic.otf +0 -0
  327. package/fonts/gelica-extra-light.otf +0 -0
  328. package/fonts/gelica-light-italic.otf +0 -0
  329. package/fonts/gelica-light.otf +0 -0
  330. package/fonts/gelica-medium-italic.otf +0 -0
  331. package/fonts/gelica-medium.otf +0 -0
  332. package/fonts/gelica-regular-italic.otf +0 -0
  333. package/fonts/gelica-regular.otf +0 -0
  334. package/fonts/gelica-semi-bold-italic.otf +0 -0
  335. package/fonts/gelica-semi-bold.otf +0 -0
  336. package/fonts/index.cjs +270 -0
  337. package/fonts/index.d.ts +10 -0
  338. package/fonts/index.mjs +272 -0
  339. package/fonts/inter-black.ttf +0 -0
  340. package/fonts/inter-bold.ttf +0 -0
  341. package/fonts/inter-extra-bold.ttf +0 -0
  342. package/fonts/inter-extra-light.ttf +0 -0
  343. package/fonts/inter-light.ttf +0 -0
  344. package/fonts/inter-medium.ttf +0 -0
  345. package/fonts/inter-regular.ttf +0 -0
  346. package/fonts/inter-semi-bold.ttf +0 -0
  347. package/fonts/inter-thin.ttf +0 -0
  348. package/fonts/roboto-mono-bold-italic.ttf +0 -0
  349. package/fonts/roboto-mono-bold.ttf +0 -0
  350. package/fonts/roboto-mono-light-italic.ttf +0 -0
  351. package/fonts/roboto-mono-light.ttf +0 -0
  352. package/fonts/roboto-mono-medium-italic.ttf +0 -0
  353. package/fonts/roboto-mono-medium.ttf +0 -0
  354. package/fonts/roboto-mono-regular-italic.ttf +0 -0
  355. package/fonts/roboto-mono-regular.ttf +0 -0
  356. package/fonts/roboto-mono-thin-italic.ttf +0 -0
  357. package/fonts/roboto-mono-thin.ttf +0 -0
  358. package/fonts/uds-icons.ttf +0 -0
  359. package/fonts/yahoo-product-sans-bold.otf +0 -0
  360. package/fonts/yahoo-product-sans-extended-black-italic.ttf +0 -0
  361. package/fonts/yahoo-product-sans-extended-black.ttf +0 -0
  362. package/fonts/yahoo-product-sans-extended-bold-italic.ttf +0 -0
  363. package/fonts/yahoo-product-sans-extended-bold.ttf +0 -0
  364. package/fonts/yahoo-product-sans-extended-light-italic.ttf +0 -0
  365. package/fonts/yahoo-product-sans-extended-light.ttf +0 -0
  366. package/fonts/yahoo-product-sans-extended-medium-italic.ttf +0 -0
  367. package/fonts/yahoo-product-sans-extended-medium.ttf +0 -0
  368. package/fonts/yahoo-product-sans-extended-regular-italic.ttf +0 -0
  369. package/fonts/yahoo-product-sans-extended-regular.ttf +0 -0
  370. package/fonts/yahoo-product-sans-extended-semibold-italic.ttf +0 -0
  371. package/fonts/yahoo-product-sans-extended-semibold.ttf +0 -0
  372. package/fonts/yahoo-product-sans-medium.otf +0 -0
  373. package/fonts/yahoo-product-sans-regular.otf +0 -0
  374. package/fonts/yahoo-sans-beta-bold.otf +0 -0
  375. package/fonts/yahoo-sans-beta-medium.otf +0 -0
  376. package/fonts/yahoo-sans-beta-regular.otf +0 -0
  377. package/fonts/yahoo-sans-black.otf +0 -0
  378. package/fonts/yahoo-sans-bold.otf +0 -0
  379. package/fonts/yahoo-sans-condensed-black.otf +0 -0
  380. package/fonts/yahoo-sans-condensed-bold.otf +0 -0
  381. package/fonts/yahoo-sans-condensed-light.otf +0 -0
  382. package/fonts/yahoo-sans-condensed-medium.otf +0 -0
  383. package/fonts/yahoo-sans-condensed-regular.otf +0 -0
  384. package/fonts/yahoo-sans-condensed-xbold.ttf +0 -0
  385. package/fonts/yahoo-sans-cr4-bold.ttf +0 -0
  386. package/fonts/yahoo-sans-cr4-medium.ttf +0 -0
  387. package/fonts/yahoo-sans-cr4-regular.ttf +0 -0
  388. package/fonts/yahoo-sans-extrabold.otf +0 -0
  389. package/fonts/yahoo-sans-extralight.otf +0 -0
  390. package/fonts/yahoo-sans-italic.otf +0 -0
  391. package/fonts/yahoo-sans-light.otf +0 -0
  392. package/fonts/yahoo-sans-medium.otf +0 -0
  393. package/fonts/yahoo-sans-regular-italic.otf +0 -0
  394. package/fonts/yahoo-sans-regular.otf +0 -0
  395. package/fonts/yahoo-sans-semibold.otf +0 -0
  396. package/fonts/yahoo-serif-display-black.otf +0 -0
  397. package/fonts/yahoo-serif-display-bold.otf +0 -0
  398. package/fonts/yahoo-serif-display-extrabold.otf +0 -0
  399. package/fonts/yahoo-serif-display-light.otf +0 -0
  400. package/fonts/yahoo-serif-display-regular.otf +0 -0
  401. package/fonts/yahoo-serif-text-bold-italic.ttf +0 -0
  402. package/fonts/yahoo-serif-text-bold.otf +0 -0
  403. package/fonts/yahoo-serif-text-italic.otf +0 -0
  404. package/fonts/yahoo-serif-text-regular.otf +0 -0
  405. package/fonts/yas-black-italic.otf +0 -0
  406. package/fonts/yas-black.otf +0 -0
  407. package/fonts/yas-bold-italic.otf +0 -0
  408. package/fonts/yas-bold.otf +0 -0
  409. package/fonts/yas-condensed-black-italic.otf +0 -0
  410. package/fonts/yas-condensed-black.otf +0 -0
  411. package/fonts/yas-condensed-bold-italic.otf +0 -0
  412. package/fonts/yas-condensed-bold.otf +0 -0
  413. package/fonts/yas-condensed-light-italic.otf +0 -0
  414. package/fonts/yas-condensed-light.otf +0 -0
  415. package/fonts/yas-condensed-medium-italic.otf +0 -0
  416. package/fonts/yas-condensed-medium.otf +0 -0
  417. package/fonts/yas-condensed-regular-italic.otf +0 -0
  418. package/fonts/yas-condensed-regular.otf +0 -0
  419. package/fonts/yas-condensed-semibold-italic.otf +0 -0
  420. package/fonts/yas-condensed-semibold.otf +0 -0
  421. package/fonts/yas-extended-black-italic.otf +0 -0
  422. package/fonts/yas-extended-black.otf +0 -0
  423. package/fonts/yas-extended-bold-italic.otf +0 -0
  424. package/fonts/yas-extended-bold.otf +0 -0
  425. package/fonts/yas-extended-light-italic.otf +0 -0
  426. package/fonts/yas-extended-light.otf +0 -0
  427. package/fonts/yas-extended-medium-italic.otf +0 -0
  428. package/fonts/yas-extended-medium.otf +0 -0
  429. package/fonts/yas-extended-regular-italic.otf +0 -0
  430. package/fonts/yas-extended-regular.otf +0 -0
  431. package/fonts/yas-extended-semibold-italic.otf +0 -0
  432. package/fonts/yas-extended-semibold.otf +0 -0
  433. package/fonts/yas-light-italic.otf +0 -0
  434. package/fonts/yas-light.otf +0 -0
  435. package/fonts/yas-medium-italic.otf +0 -0
  436. package/fonts/yas-medium.otf +0 -0
  437. package/fonts/yas-regular-italic.otf +0 -0
  438. package/fonts/yas-regular.otf +0 -0
  439. package/fonts/yas-semibold-italic.otf +0 -0
  440. package/fonts/yas-semibold.otf +0 -0
  441. package/generated/styles.cjs +4510 -0
  442. package/generated/styles.d.cts +1 -0
  443. package/generated/styles.d.mts +1 -0
  444. package/generated/styles.d.ts +2965 -0
  445. package/generated/styles.mjs +4510 -0
  446. package/generated/unistyles.d.ts +4320 -0
  447. package/package.json +308 -0
@@ -0,0 +1,187 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
3
+ const require_motion = require('../uds/dist/tokens/configs/motion.cjs');
4
+ const require_motion$1 = require('../motion.cjs');
5
+ const require_components_IconSlot = require('./IconSlot.cjs');
6
+ const require_components_Text = require('./Text.cjs');
7
+ const require_components_Pressable = require('./Pressable.cjs');
8
+ let react = require("react");
9
+ let react_native = require("react-native");
10
+ let generated_styles = require("../../generated/styles");
11
+ let react_jsx_runtime = require("react/jsx-runtime");
12
+ let react_native_reanimated = require("react-native-reanimated");
13
+ react_native_reanimated = require_rolldown_runtime.__toESM(react_native_reanimated);
14
+ let react_native_unistyles_reanimated = require("react-native-unistyles/reanimated");
15
+
16
+ //#region src/components/Button.tsx
17
+ /**
18
+ * Interpolates a boxShadow string by scaling the alpha of all colors.
19
+ * This allows smooth fade-in/out of shadows.
20
+ */
21
+ function interpolateShadowAlpha(shadow, alpha) {
22
+ "worklet";
23
+ if (!shadow || alpha >= 1) return shadow;
24
+ if (alpha <= 0) return "";
25
+ return shadow.replace(/rgba\(([^,]+),\s*([^,]+),\s*([^,]+),\s*([^)]+)\)/g, (_, r, g, b, a) => {
26
+ return `rgba(${r}, ${g}, ${b}, ${(parseFloat(a) * alpha).toFixed(3)})`;
27
+ });
28
+ }
29
+ /**
30
+ * Animated wrapper for icon/loading content.
31
+ * Matches web Button icon animation: scale 0.7→1, opacity 0→1, width 0→auto
32
+ * Uses staggered animation: opacity waits until halfway through width animation.
33
+ */
34
+ function AnimatedIconSlot({ children, visible, iconSize, gap }) {
35
+ const progress = (0, react_native_reanimated.useDerivedValue)(() => (0, react_native_reanimated.withSpring)(visible ? 1 : 0, require_motion$1.BUTTON_SPRING_CONFIG), [visible]);
36
+ const animatedStyle = (0, react_native_reanimated.useAnimatedStyle)(() => {
37
+ const totalWidth = iconSize + gap;
38
+ return {
39
+ width: (0, react_native_reanimated.interpolate)(progress.value, [0, 1], [0, totalWidth]),
40
+ opacity: (0, react_native_reanimated.interpolate)(progress.value, [.5, 1], [0, 1], "clamp"),
41
+ transform: [{ scale: (0, react_native_reanimated.interpolate)(progress.value, [.5, 1], [.7, 1], "clamp") }],
42
+ overflow: "hidden"
43
+ };
44
+ });
45
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native_reanimated.default.View, {
46
+ style: animatedStyle,
47
+ children
48
+ });
49
+ }
50
+ /**
51
+ * **🖲️ A button element that can be used to trigger an action**
52
+ *
53
+ * @description
54
+ * A button is a fundamental component used to trigger an action or event.
55
+ * Buttons are interactive elements that users can click, tap, or otherwise
56
+ * engage with to submit forms, open dialogues, or perform any other interaction.
57
+ *
58
+ * Features animated scale effect on press and smooth icon transitions matching
59
+ * the web UDS Button behavior.
60
+ *
61
+ * @example
62
+ * ```tsx
63
+ * import { Button } from '@yahoo/uds-mobile';
64
+ *
65
+ * <Button onPress={() => console.log('pressed')}>Save</Button>
66
+ * <Button variant="secondary">Cancel</Button>
67
+ * <Button startIcon="Add" variant="brand">Add Item</Button>
68
+ * <Button loading>Saving...</Button>
69
+ * ```
70
+ *
71
+ * @see The {@link https://uds.build/docs/components/button Button Docs} for more info
72
+ */
73
+ const Button = (0, react.memo)(function Button$1({ variant = "primary", size = "md", iconVariant = "outline", startIcon, endIcon, loading, disabled, width, children, style, accessibilityLabel, accessibilityHint, disableEffects = false, onPressIn, onPressOut, ref, ...props }) {
74
+ const shouldAnimate = !disableEffects;
75
+ const [pressed, setPressed] = (0, react.useState)(false);
76
+ generated_styles.buttonStyles.useVariants({
77
+ size,
78
+ variant,
79
+ disabled,
80
+ pressed
81
+ });
82
+ const buttonGap = generated_styles.buttonStyles.root.gap;
83
+ const iconSize = generated_styles.buttonStyles.icon.fontSize;
84
+ const animatedTheme = (0, react_native_unistyles_reanimated.useAnimatedTheme)();
85
+ const scale = (0, react_native_reanimated.useSharedValue)(require_motion.SCALE_EFFECTS.none);
86
+ const handlePressIn = (0, react.useCallback)((event) => {
87
+ setPressed(true);
88
+ if (shouldAnimate) scale.value = (0, react_native_reanimated.withSpring)(require_motion.SCALE_EFFECTS.down, require_motion$1.BUTTON_SPRING_CONFIG);
89
+ onPressIn?.(event);
90
+ }, [
91
+ shouldAnimate,
92
+ scale,
93
+ onPressIn
94
+ ]);
95
+ const handlePressOut = (0, react.useCallback)((event) => {
96
+ setPressed(false);
97
+ if (shouldAnimate) scale.value = (0, react_native_reanimated.withSpring)(require_motion.SCALE_EFFECTS.none, require_motion$1.BUTTON_SPRING_CONFIG);
98
+ onPressOut?.(event);
99
+ }, [
100
+ shouldAnimate,
101
+ scale,
102
+ onPressOut
103
+ ]);
104
+ const childrenNode = children && ((0, react.isValidElement)(children) ? children : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Text.Text, {
105
+ numberOfLines: 1,
106
+ textAlign: "center",
107
+ style: generated_styles.buttonStyles.text,
108
+ children
109
+ }));
110
+ const a11yState = (0, react.useMemo)(() => ({
111
+ disabled,
112
+ busy: loading
113
+ }), [disabled, loading]);
114
+ const pressProgress = (0, react_native_reanimated.useDerivedValue)(() => (0, react_native_reanimated.withTiming)(pressed ? 1 : 0, {
115
+ duration: 220,
116
+ easing: react_native_reanimated.Easing.bezier(0, 0, .2, 1)
117
+ }), [pressed]);
118
+ const animatedStyles = (0, react_native_reanimated.useAnimatedStyle)(() => {
119
+ const shadowPressed = animatedTheme.value.components[`button/variant/${variant}/root/pressed`].boxShadow;
120
+ return {
121
+ transform: [{ scale: scale.value }],
122
+ boxShadow: interpolateShadowAlpha(shadowPressed, pressProgress.value)
123
+ };
124
+ });
125
+ const showLoading = !!loading;
126
+ const showStartIcon = !!startIcon && !loading;
127
+ const showEndIcon = !!endIcon && !loading;
128
+ const startContent = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedIconSlot, {
129
+ visible: showLoading || showStartIcon,
130
+ iconSize,
131
+ gap: buttonGap,
132
+ children: showLoading ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.ActivityIndicator, {
133
+ size: generated_styles.buttonStyles.icon.fontSize,
134
+ color: generated_styles.buttonStyles.icon.color
135
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
136
+ icon: startIcon,
137
+ variant: iconVariant,
138
+ style: generated_styles.buttonStyles.icon
139
+ })
140
+ });
141
+ const endContent = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedIconSlot, {
142
+ visible: showEndIcon,
143
+ iconSize,
144
+ gap: buttonGap,
145
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
146
+ icon: endIcon,
147
+ variant: iconVariant,
148
+ style: generated_styles.buttonStyles.icon
149
+ })
150
+ });
151
+ const rootStyles = (0, react.useMemo)(() => [
152
+ generated_styles.buttonStyles.root,
153
+ animatedStyles,
154
+ typeof style === "function" ? style({ pressed }) : style
155
+ ], [
156
+ generated_styles.buttonStyles.root,
157
+ animatedStyles,
158
+ style,
159
+ pressed
160
+ ]);
161
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_components_Pressable.AnimatedPressable, {
162
+ ref,
163
+ disabled,
164
+ onPressIn: handlePressIn,
165
+ onPressOut: handlePressOut,
166
+ flexDirection: "row",
167
+ alignItems: "center",
168
+ justifyContent: "center",
169
+ overflow: "hidden",
170
+ accessibilityLabel: loading ? `${accessibilityLabel ?? ""}, loading` : accessibilityLabel,
171
+ accessibilityHint,
172
+ accessibilityRole: "button",
173
+ accessibilityState: a11yState,
174
+ alignContent: "center",
175
+ style: rootStyles,
176
+ ...props,
177
+ children: [
178
+ startContent,
179
+ childrenNode,
180
+ endContent
181
+ ]
182
+ });
183
+ });
184
+ Button.displayName = "Button";
185
+
186
+ //#endregion
187
+ exports.Button = Button;
@@ -0,0 +1,56 @@
1
+
2
+ import { IconVariant } from "../icons/dist/types.cjs";
3
+ import { ButtonSize, ButtonVariantFlat } from "../uds/dist/tokens/types.cjs";
4
+ import { IconSlotType } from "./IconSlot.cjs";
5
+ import { PressableProps as PressableProps$1 } from "./Pressable.cjs";
6
+ import * as react13 from "react";
7
+ import { Ref } from "react";
8
+ import { View } from "react-native";
9
+
10
+ //#region src/components/Button.d.ts
11
+ interface ButtonProps extends Omit<PressableProps$1, 'children' | 'disabled'> {
12
+ /** @default 'primary' */
13
+ variant?: ButtonVariantFlat;
14
+ /** @default 'md' */
15
+ size?: ButtonSize;
16
+ /** @default 'outline' */
17
+ iconVariant?: IconVariant;
18
+ startIcon?: IconSlotType;
19
+ endIcon?: IconSlotType;
20
+ loading?: boolean;
21
+ disabled?: boolean;
22
+ children?: React.ReactNode;
23
+ /**
24
+ * Disable motion effects (scale on press, icon animations)
25
+ * @default false
26
+ */
27
+ disableEffects?: boolean;
28
+ ref?: Ref<View>;
29
+ }
30
+ /**
31
+ * **🖲️ A button element that can be used to trigger an action**
32
+ *
33
+ * @description
34
+ * A button is a fundamental component used to trigger an action or event.
35
+ * Buttons are interactive elements that users can click, tap, or otherwise
36
+ * engage with to submit forms, open dialogues, or perform any other interaction.
37
+ *
38
+ * Features animated scale effect on press and smooth icon transitions matching
39
+ * the web UDS Button behavior.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * import { Button } from '@yahoo/uds-mobile';
44
+ *
45
+ * <Button onPress={() => console.log('pressed')}>Save</Button>
46
+ * <Button variant="secondary">Cancel</Button>
47
+ * <Button startIcon="Add" variant="brand">Add Item</Button>
48
+ * <Button loading>Saving...</Button>
49
+ * ```
50
+ *
51
+ * @see The {@link https://uds.build/docs/components/button Button Docs} for more info
52
+ */
53
+ declare const Button: react13.NamedExoticComponent<ButtonProps>;
54
+ //#endregion
55
+ export { Button, type ButtonProps };
56
+ //# sourceMappingURL=Button.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.cts","names":[],"sources":["../../src/components/Button.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;UA2GU,WAAA,SAAoB,KAAK;;YAEvB;;EAFF,IAAA,CAAA,EAID,UAJa;EAAa;EAEvB,WAAA,CAAA,EAII,WAJJ;EAEH,SAAA,CAAA,EAGK,YAHL;EAEO,OAAA,CAAA,EAEJ,YAFI;EACF,OAAA,CAAA,EAAA,OAAA;EACF,QAAA,CAAA,EAAA,OAAA;EAGC,QAAM,CAAA,EAAN,KAAA,CAAM,SAAA;EAMP;;;;EA8BN,cA4JJ,CAAA,EAAA,OA5JU;QA9BJ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;cA8BN,QAAM,OAAA,CAAA,qBAAA"}
@@ -0,0 +1,56 @@
1
+
2
+ import { IconVariant } from "../icons/dist/types.mjs";
3
+ import { ButtonSize, ButtonVariantFlat } from "../uds/dist/tokens/types.mjs";
4
+ import { IconSlotType } from "./IconSlot.mjs";
5
+ import { PressableProps as PressableProps$1 } from "./Pressable.mjs";
6
+ import * as react17 from "react";
7
+ import { Ref } from "react";
8
+ import { View } from "react-native";
9
+
10
+ //#region src/components/Button.d.ts
11
+ interface ButtonProps extends Omit<PressableProps$1, 'children' | 'disabled'> {
12
+ /** @default 'primary' */
13
+ variant?: ButtonVariantFlat;
14
+ /** @default 'md' */
15
+ size?: ButtonSize;
16
+ /** @default 'outline' */
17
+ iconVariant?: IconVariant;
18
+ startIcon?: IconSlotType;
19
+ endIcon?: IconSlotType;
20
+ loading?: boolean;
21
+ disabled?: boolean;
22
+ children?: React.ReactNode;
23
+ /**
24
+ * Disable motion effects (scale on press, icon animations)
25
+ * @default false
26
+ */
27
+ disableEffects?: boolean;
28
+ ref?: Ref<View>;
29
+ }
30
+ /**
31
+ * **🖲️ A button element that can be used to trigger an action**
32
+ *
33
+ * @description
34
+ * A button is a fundamental component used to trigger an action or event.
35
+ * Buttons are interactive elements that users can click, tap, or otherwise
36
+ * engage with to submit forms, open dialogues, or perform any other interaction.
37
+ *
38
+ * Features animated scale effect on press and smooth icon transitions matching
39
+ * the web UDS Button behavior.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * import { Button } from '@yahoo/uds-mobile';
44
+ *
45
+ * <Button onPress={() => console.log('pressed')}>Save</Button>
46
+ * <Button variant="secondary">Cancel</Button>
47
+ * <Button startIcon="Add" variant="brand">Add Item</Button>
48
+ * <Button loading>Saving...</Button>
49
+ * ```
50
+ *
51
+ * @see The {@link https://uds.build/docs/components/button Button Docs} for more info
52
+ */
53
+ declare const Button: react17.NamedExoticComponent<ButtonProps>;
54
+ //#endregion
55
+ export { Button, type ButtonProps };
56
+ //# sourceMappingURL=Button.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.mts","names":[],"sources":["../../src/components/Button.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;UA2GU,WAAA,SAAoB,KAAK;;YAEvB;;EAFF,IAAA,CAAA,EAID,UAJa;EAAa;EAEvB,WAAA,CAAA,EAII,WAJJ;EAEH,SAAA,CAAA,EAGK,YAHL;EAEO,OAAA,CAAA,EAEJ,YAFI;EACF,OAAA,CAAA,EAAA,OAAA;EACF,QAAA,CAAA,EAAA,OAAA;EAGC,QAAM,CAAA,EAAN,KAAA,CAAM,SAAA;EAMP;;;;EA8BN,cA4JJ,CAAA,EAAA,OA5JU;QA9BJ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;cA8BN,QAAM,OAAA,CAAA,qBAAA"}
@@ -0,0 +1,186 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ import { SCALE_EFFECTS } from "../uds/dist/tokens/configs/motion.mjs";
3
+ import { BUTTON_SPRING_CONFIG } from "../motion.mjs";
4
+ import { IconSlot } from "./IconSlot.mjs";
5
+ import { Text as Text$1 } from "./Text.mjs";
6
+ import { AnimatedPressable } from "./Pressable.mjs";
7
+ import { isValidElement, memo, useCallback, useMemo, useState } from "react";
8
+ import { ActivityIndicator } from "react-native";
9
+ import { buttonStyles } from "../../generated/styles";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ import Animated, { Easing, interpolate, useAnimatedStyle, useDerivedValue, useSharedValue, withSpring, withTiming } from "react-native-reanimated";
12
+ import { useAnimatedTheme } from "react-native-unistyles/reanimated";
13
+
14
+ //#region src/components/Button.tsx
15
+ /**
16
+ * Interpolates a boxShadow string by scaling the alpha of all colors.
17
+ * This allows smooth fade-in/out of shadows.
18
+ */
19
+ function interpolateShadowAlpha(shadow, alpha) {
20
+ "worklet";
21
+ if (!shadow || alpha >= 1) return shadow;
22
+ if (alpha <= 0) return "";
23
+ return shadow.replace(/rgba\(([^,]+),\s*([^,]+),\s*([^,]+),\s*([^)]+)\)/g, (_, r, g, b, a) => {
24
+ return `rgba(${r}, ${g}, ${b}, ${(parseFloat(a) * alpha).toFixed(3)})`;
25
+ });
26
+ }
27
+ /**
28
+ * Animated wrapper for icon/loading content.
29
+ * Matches web Button icon animation: scale 0.7→1, opacity 0→1, width 0→auto
30
+ * Uses staggered animation: opacity waits until halfway through width animation.
31
+ */
32
+ function AnimatedIconSlot({ children, visible, iconSize, gap }) {
33
+ const progress = useDerivedValue(() => withSpring(visible ? 1 : 0, BUTTON_SPRING_CONFIG), [visible]);
34
+ const animatedStyle = useAnimatedStyle(() => {
35
+ const totalWidth = iconSize + gap;
36
+ return {
37
+ width: interpolate(progress.value, [0, 1], [0, totalWidth]),
38
+ opacity: interpolate(progress.value, [.5, 1], [0, 1], "clamp"),
39
+ transform: [{ scale: interpolate(progress.value, [.5, 1], [.7, 1], "clamp") }],
40
+ overflow: "hidden"
41
+ };
42
+ });
43
+ return /* @__PURE__ */ jsx(Animated.View, {
44
+ style: animatedStyle,
45
+ children
46
+ });
47
+ }
48
+ /**
49
+ * **🖲️ A button element that can be used to trigger an action**
50
+ *
51
+ * @description
52
+ * A button is a fundamental component used to trigger an action or event.
53
+ * Buttons are interactive elements that users can click, tap, or otherwise
54
+ * engage with to submit forms, open dialogues, or perform any other interaction.
55
+ *
56
+ * Features animated scale effect on press and smooth icon transitions matching
57
+ * the web UDS Button behavior.
58
+ *
59
+ * @example
60
+ * ```tsx
61
+ * import { Button } from '@yahoo/uds-mobile';
62
+ *
63
+ * <Button onPress={() => console.log('pressed')}>Save</Button>
64
+ * <Button variant="secondary">Cancel</Button>
65
+ * <Button startIcon="Add" variant="brand">Add Item</Button>
66
+ * <Button loading>Saving...</Button>
67
+ * ```
68
+ *
69
+ * @see The {@link https://uds.build/docs/components/button Button Docs} for more info
70
+ */
71
+ const Button = memo(function Button$1({ variant = "primary", size = "md", iconVariant = "outline", startIcon, endIcon, loading, disabled, width, children, style, accessibilityLabel, accessibilityHint, disableEffects = false, onPressIn, onPressOut, ref, ...props }) {
72
+ const shouldAnimate = !disableEffects;
73
+ const [pressed, setPressed] = useState(false);
74
+ buttonStyles.useVariants({
75
+ size,
76
+ variant,
77
+ disabled,
78
+ pressed
79
+ });
80
+ const buttonGap = buttonStyles.root.gap;
81
+ const iconSize = buttonStyles.icon.fontSize;
82
+ const animatedTheme = useAnimatedTheme();
83
+ const scale = useSharedValue(SCALE_EFFECTS.none);
84
+ const handlePressIn = useCallback((event) => {
85
+ setPressed(true);
86
+ if (shouldAnimate) scale.value = withSpring(SCALE_EFFECTS.down, BUTTON_SPRING_CONFIG);
87
+ onPressIn?.(event);
88
+ }, [
89
+ shouldAnimate,
90
+ scale,
91
+ onPressIn
92
+ ]);
93
+ const handlePressOut = useCallback((event) => {
94
+ setPressed(false);
95
+ if (shouldAnimate) scale.value = withSpring(SCALE_EFFECTS.none, BUTTON_SPRING_CONFIG);
96
+ onPressOut?.(event);
97
+ }, [
98
+ shouldAnimate,
99
+ scale,
100
+ onPressOut
101
+ ]);
102
+ const childrenNode = children && (isValidElement(children) ? children : /* @__PURE__ */ jsx(Text$1, {
103
+ numberOfLines: 1,
104
+ textAlign: "center",
105
+ style: buttonStyles.text,
106
+ children
107
+ }));
108
+ const a11yState = useMemo(() => ({
109
+ disabled,
110
+ busy: loading
111
+ }), [disabled, loading]);
112
+ const pressProgress = useDerivedValue(() => withTiming(pressed ? 1 : 0, {
113
+ duration: 220,
114
+ easing: Easing.bezier(0, 0, .2, 1)
115
+ }), [pressed]);
116
+ const animatedStyles = useAnimatedStyle(() => {
117
+ const shadowPressed = animatedTheme.value.components[`button/variant/${variant}/root/pressed`].boxShadow;
118
+ return {
119
+ transform: [{ scale: scale.value }],
120
+ boxShadow: interpolateShadowAlpha(shadowPressed, pressProgress.value)
121
+ };
122
+ });
123
+ const showLoading = !!loading;
124
+ const showStartIcon = !!startIcon && !loading;
125
+ const showEndIcon = !!endIcon && !loading;
126
+ const startContent = /* @__PURE__ */ jsx(AnimatedIconSlot, {
127
+ visible: showLoading || showStartIcon,
128
+ iconSize,
129
+ gap: buttonGap,
130
+ children: showLoading ? /* @__PURE__ */ jsx(ActivityIndicator, {
131
+ size: buttonStyles.icon.fontSize,
132
+ color: buttonStyles.icon.color
133
+ }) : /* @__PURE__ */ jsx(IconSlot, {
134
+ icon: startIcon,
135
+ variant: iconVariant,
136
+ style: buttonStyles.icon
137
+ })
138
+ });
139
+ const endContent = /* @__PURE__ */ jsx(AnimatedIconSlot, {
140
+ visible: showEndIcon,
141
+ iconSize,
142
+ gap: buttonGap,
143
+ children: /* @__PURE__ */ jsx(IconSlot, {
144
+ icon: endIcon,
145
+ variant: iconVariant,
146
+ style: buttonStyles.icon
147
+ })
148
+ });
149
+ const rootStyles = useMemo(() => [
150
+ buttonStyles.root,
151
+ animatedStyles,
152
+ typeof style === "function" ? style({ pressed }) : style
153
+ ], [
154
+ buttonStyles.root,
155
+ animatedStyles,
156
+ style,
157
+ pressed
158
+ ]);
159
+ return /* @__PURE__ */ jsxs(AnimatedPressable, {
160
+ ref,
161
+ disabled,
162
+ onPressIn: handlePressIn,
163
+ onPressOut: handlePressOut,
164
+ flexDirection: "row",
165
+ alignItems: "center",
166
+ justifyContent: "center",
167
+ overflow: "hidden",
168
+ accessibilityLabel: loading ? `${accessibilityLabel ?? ""}, loading` : accessibilityLabel,
169
+ accessibilityHint,
170
+ accessibilityRole: "button",
171
+ accessibilityState: a11yState,
172
+ alignContent: "center",
173
+ style: rootStyles,
174
+ ...props,
175
+ children: [
176
+ startContent,
177
+ childrenNode,
178
+ endContent
179
+ ]
180
+ });
181
+ });
182
+ Button.displayName = "Button";
183
+
184
+ //#endregion
185
+ export { Button };
186
+ //# sourceMappingURL=Button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.mjs","names":["Button","Text"],"sources":["../../src/components/Button.tsx"],"sourcesContent":["import type { ButtonSize, ButtonVariantFlat, IconVariant } from '@yahoo/uds/tokens';\nimport type { Ref } from 'react';\nimport { isValidElement, memo, useCallback, useMemo, useState } from 'react';\nimport type { View } from 'react-native';\nimport { ActivityIndicator } from 'react-native';\nimport Animated, {\n Easing,\n interpolate,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withSpring,\n withTiming,\n} from 'react-native-reanimated';\nimport { useAnimatedTheme } from 'react-native-unistyles/reanimated';\n\nimport { buttonStyles } from '../../generated/styles';\nimport { BUTTON_SPRING_CONFIG, SCALE_EFFECTS } from '../motion';\nimport type { IconSlotType } from './IconSlot';\nimport { IconSlot } from './IconSlot';\nimport type { PressableProps } from './Pressable';\nimport { AnimatedPressable } from './Pressable';\nimport { Text } from './Text';\n\n/* -------------------------------------------------------------------------- */\n/* Animation Helpers */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Interpolates a boxShadow string by scaling the alpha of all colors.\n * This allows smooth fade-in/out of shadows.\n */\nfunction interpolateShadowAlpha(shadow: string, alpha: number): string {\n 'worklet';\n if (!shadow || alpha >= 1) {\n return shadow;\n }\n if (alpha <= 0) {\n return '';\n }\n\n return shadow.replace(/rgba\\(([^,]+),\\s*([^,]+),\\s*([^,]+),\\s*([^)]+)\\)/g, (_, r, g, b, a) => {\n const newAlpha = parseFloat(a) * alpha;\n return `rgba(${r}, ${g}, ${b}, ${newAlpha.toFixed(3)})`;\n });\n}\n\n/* -------------------------------------------------------------------------- */\n/* Animated Icon Slot */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Animated wrapper for icon/loading content.\n * Matches web Button icon animation: scale 0.7→1, opacity 0→1, width 0→auto\n * Uses staggered animation: opacity waits until halfway through width animation.\n */\nfunction AnimatedIconSlot({\n children,\n visible,\n iconSize,\n gap,\n}: {\n children: React.ReactNode;\n visible: boolean;\n iconSize: number;\n gap: number;\n}) {\n // Use useDerivedValue instead of useEffect + useSharedValue\n // This is the idiomatic Reanimated pattern for deriving animated values from React state\n const progress = useDerivedValue(\n () => withSpring(visible ? 1 : 0, BUTTON_SPRING_CONFIG),\n [visible],\n );\n\n const animatedStyle = useAnimatedStyle(() => {\n // Total width includes icon + gap when visible\n const totalWidth = iconSize + gap;\n const width = interpolate(progress.value, [0, 1], [0, totalWidth]);\n\n // Staggered animation: opacity starts at 50% of width animation\n // On enter: width expands first, then icon fades in\n // On exit: icon fades out first, then width collapses\n const opacity = interpolate(progress.value, [0.5, 1], [0, 1], 'clamp');\n const scale = interpolate(progress.value, [0.5, 1], [0.7, 1], 'clamp');\n\n return {\n width,\n opacity,\n transform: [{ scale }],\n overflow: 'hidden' as const,\n };\n });\n\n return <Animated.View style={animatedStyle}>{children}</Animated.View>;\n}\n\n// function LoadingIcon({ size, variant }: { size: ButtonSize, variant: ButtonVariantFlat }) {\n// const { theme } = useUnistyles();\n// const themeKey = `buttonVariant${variantToCapitalMap[variant]}IconRest` as const;\n// const iconSize = theme.components.buttonSizeLgIconRest.fontSize;\n// return <ActivityIndicator size={iconSize} color={theme.colors.text.primary} />;\n// }\n\n/* -------------------------------------------------------------------------- */\n/* Button Props */\n/* -------------------------------------------------------------------------- */\n\ninterface ButtonProps extends Omit<PressableProps, 'children' | 'disabled'> {\n /** @default 'primary' */\n variant?: ButtonVariantFlat;\n /** @default 'md' */\n size?: ButtonSize;\n /** @default 'outline' */\n iconVariant?: IconVariant;\n startIcon?: IconSlotType;\n endIcon?: IconSlotType;\n loading?: boolean;\n disabled?: boolean;\n children?: React.ReactNode;\n /**\n * Disable motion effects (scale on press, icon animations)\n * @default false\n */\n disableEffects?: boolean;\n ref?: Ref<View>;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Button Component */\n/* -------------------------------------------------------------------------- */\n\n/**\n * **🖲️ A button element that can be used to trigger an action**\n *\n * @description\n * A button is a fundamental component used to trigger an action or event.\n * Buttons are interactive elements that users can click, tap, or otherwise\n * engage with to submit forms, open dialogues, or perform any other interaction.\n *\n * Features animated scale effect on press and smooth icon transitions matching\n * the web UDS Button behavior.\n *\n * @example\n * ```tsx\n * import { Button } from '@yahoo/uds-mobile';\n *\n * <Button onPress={() => console.log('pressed')}>Save</Button>\n * <Button variant=\"secondary\">Cancel</Button>\n * <Button startIcon=\"Add\" variant=\"brand\">Add Item</Button>\n * <Button loading>Saving...</Button>\n * ```\n *\n * @see The {@link https://uds.build/docs/components/button Button Docs} for more info\n */\nconst Button = memo(function Button({\n variant = 'primary',\n size = 'md',\n iconVariant = 'outline',\n startIcon,\n endIcon,\n loading,\n disabled,\n width,\n children,\n style,\n accessibilityLabel,\n accessibilityHint,\n disableEffects = false,\n onPressIn,\n onPressOut,\n ref,\n ...props\n}: ButtonProps) {\n const shouldAnimate = !disableEffects;\n\n /* --------------------------------- State ---------------------------------- */\n const [pressed, setPressed] = useState(false);\n\n buttonStyles.useVariants({ size, variant, disabled, pressed });\n\n // Get gap and icon size from current variant styles\n const buttonGap = buttonStyles.root.gap;\n const iconSize = buttonStyles.icon.fontSize;\n\n // Get animated theme for boxShadow (useAnimatedVariantColor doesn't support non-color props)\n const animatedTheme = useAnimatedTheme();\n\n /* ------------------------------- Animation -------------------------------- */\n const scale = useSharedValue<number>(SCALE_EFFECTS.none);\n\n const handlePressIn = useCallback(\n (event: Parameters<NonNullable<PressableProps['onPressIn']>>[0]) => {\n setPressed(true);\n if (shouldAnimate) {\n scale.value = withSpring(SCALE_EFFECTS.down, BUTTON_SPRING_CONFIG);\n }\n onPressIn?.(event);\n },\n [shouldAnimate, scale, onPressIn],\n );\n\n const handlePressOut = useCallback(\n (event: Parameters<NonNullable<PressableProps['onPressOut']>>[0]) => {\n setPressed(false);\n if (shouldAnimate) {\n scale.value = withSpring(SCALE_EFFECTS.none, BUTTON_SPRING_CONFIG);\n }\n onPressOut?.(event);\n },\n [shouldAnimate, scale, onPressOut],\n );\n\n /* -------------------------------- Content --------------------------------- */\n const childrenNode =\n children &&\n (isValidElement(children) ? (\n children\n ) : (\n <Text numberOfLines={1} textAlign=\"center\" style={buttonStyles.text}>\n {children}\n </Text>\n ));\n\n const a11yState = useMemo(() => ({ disabled, busy: loading }), [disabled, loading]);\n\n /* --------------------------------- Styles --------------------------------- */\n // Animate pressed state for shadow (0 = rest, 1 = pressed)\n const pressProgress = useDerivedValue(\n () => withTiming(pressed ? 1 : 0, { duration: 220, easing: Easing.bezier(0, 0, 0.2, 1) }),\n [pressed],\n );\n\n // Animate using Unistyles' variant color system + boxShadow from theme\n const animatedStyles = useAnimatedStyle(() => {\n // Get boxShadow from theme using flattened path (no camelCase conversion needed!)\n const components = animatedTheme.value.components;\n const buttonVariantPath = `button/variant/${variant}/root/pressed` as const;\n const shadowPressed = components[buttonVariantPath].boxShadow;\n\n return {\n transform: [{ scale: scale.value }],\n // backgroundColor: withTiming(backgroundColor.value, {\n // duration: 220,\n // easing: Easing.bezier(0, 0, 0.2, 1),\n // }),\n // borderColor: withTiming(borderColor.value, {\n // duration: 220,\n // easing: Easing.bezier(0, 0, 0.2, 1),\n // }),\n // Animate shadow by interpolating its color alpha\n boxShadow: interpolateShadowAlpha(shadowPressed, pressProgress.value),\n };\n });\n\n // Determine what should be visible in start slot\n const showLoading = !!loading;\n const showStartIcon = !!startIcon && !loading;\n const showEndIcon = !!endIcon && !loading;\n\n // Start slot: either loading spinner or start icon\n const startContent = (\n <AnimatedIconSlot visible={showLoading || showStartIcon} iconSize={iconSize} gap={buttonGap}>\n {showLoading ? (\n <ActivityIndicator size={buttonStyles.icon.fontSize} color={buttonStyles.icon.color} />\n ) : (\n <IconSlot icon={startIcon} variant={iconVariant} style={buttonStyles.icon} />\n )}\n </AnimatedIconSlot>\n );\n\n // End slot: only end icon (no loading here)\n const endContent = (\n <AnimatedIconSlot visible={showEndIcon} iconSize={iconSize} gap={buttonGap}>\n <IconSlot icon={endIcon} variant={iconVariant} style={buttonStyles.icon} />\n </AnimatedIconSlot>\n );\n\n const rootStyles = useMemo(\n () => [\n buttonStyles.root,\n animatedStyles,\n typeof style === 'function' ? style({ pressed }) : style,\n ],\n [buttonStyles.root, animatedStyles, style, pressed],\n );\n\n /* --------------------------------- Render --------------------------------- */\n return (\n <AnimatedPressable\n ref={ref}\n disabled={disabled}\n onPressIn={handlePressIn}\n onPressOut={handlePressOut}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n overflow=\"hidden\"\n accessibilityLabel={loading ? `${accessibilityLabel ?? ''}, loading` : accessibilityLabel}\n accessibilityHint={accessibilityHint}\n accessibilityRole=\"button\"\n accessibilityState={a11yState}\n alignContent=\"center\"\n style={rootStyles}\n {...props}\n >\n {startContent}\n {childrenNode}\n {endContent}\n </AnimatedPressable>\n );\n});\n\nButton.displayName = 'Button';\n\nexport { Button, type ButtonProps };\n"],"mappings":"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"}