@yahoo/uds-mobile 2.3.4 → 2.4.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 (195) hide show
  1. package/android/build.gradle +39 -0
  2. package/android/src/main/AndroidManifest.xml +1 -0
  3. package/android/src/main/java/com/yahoo/uds/screencornerradius/UDSScreenCornerRadiusModule.kt +44 -0
  4. package/dist/bin/generateTheme.mjs +10 -0
  5. package/dist/bin/mobile/scripts/utils/configToRNMappings.mjs +4 -1
  6. package/dist/components/AndroidBackHandler.cjs +31 -0
  7. package/dist/components/AndroidBackHandler.d.cts +21 -0
  8. package/dist/components/AndroidBackHandler.d.cts.map +1 -0
  9. package/dist/components/AndroidBackHandler.d.ts +21 -0
  10. package/dist/components/AndroidBackHandler.d.ts.map +1 -0
  11. package/dist/components/AndroidBackHandler.js +30 -0
  12. package/dist/components/AndroidBackHandler.js.map +1 -0
  13. package/dist/components/Avatar.cjs +1 -1
  14. package/dist/components/Avatar.js +1 -1
  15. package/dist/components/Badge.cjs +1 -1
  16. package/dist/components/Badge.js +1 -1
  17. package/dist/components/BottomSheet/BottomSheet.cjs +336 -0
  18. package/dist/components/BottomSheet/BottomSheet.d.cts +33 -0
  19. package/dist/components/BottomSheet/BottomSheet.d.cts.map +1 -0
  20. package/dist/components/BottomSheet/BottomSheet.d.ts +33 -0
  21. package/dist/components/BottomSheet/BottomSheet.d.ts.map +1 -0
  22. package/dist/components/BottomSheet/BottomSheet.js +334 -0
  23. package/dist/components/BottomSheet/BottomSheet.js.map +1 -0
  24. package/dist/components/BottomSheet/BottomSheetContent.cjs +65 -0
  25. package/dist/components/BottomSheet/BottomSheetContent.d.cts +22 -0
  26. package/dist/components/BottomSheet/BottomSheetContent.d.cts.map +1 -0
  27. package/dist/components/BottomSheet/BottomSheetContent.d.ts +22 -0
  28. package/dist/components/BottomSheet/BottomSheetContent.d.ts.map +1 -0
  29. package/dist/components/BottomSheet/BottomSheetContent.js +63 -0
  30. package/dist/components/BottomSheet/BottomSheetContent.js.map +1 -0
  31. package/dist/components/BottomSheet/BottomSheetDismiss.cjs +28 -0
  32. package/dist/components/BottomSheet/BottomSheetDismiss.d.cts +25 -0
  33. package/dist/components/BottomSheet/BottomSheetDismiss.d.cts.map +1 -0
  34. package/dist/components/BottomSheet/BottomSheetDismiss.d.ts +25 -0
  35. package/dist/components/BottomSheet/BottomSheetDismiss.d.ts.map +1 -0
  36. package/dist/components/BottomSheet/BottomSheetDismiss.js +27 -0
  37. package/dist/components/BottomSheet/BottomSheetDismiss.js.map +1 -0
  38. package/dist/components/BottomSheet/BottomSheetHandle.cjs +56 -0
  39. package/dist/components/BottomSheet/BottomSheetHandle.d.cts +14 -0
  40. package/dist/components/BottomSheet/BottomSheetHandle.d.cts.map +1 -0
  41. package/dist/components/BottomSheet/BottomSheetHandle.d.ts +14 -0
  42. package/dist/components/BottomSheet/BottomSheetHandle.d.ts.map +1 -0
  43. package/dist/components/BottomSheet/BottomSheetHandle.js +55 -0
  44. package/dist/components/BottomSheet/BottomSheetHandle.js.map +1 -0
  45. package/dist/components/BottomSheet/BottomSheetHeader.cjs +69 -0
  46. package/dist/components/BottomSheet/BottomSheetHeader.d.cts +16 -0
  47. package/dist/components/BottomSheet/BottomSheetHeader.d.cts.map +1 -0
  48. package/dist/components/BottomSheet/BottomSheetHeader.d.ts +16 -0
  49. package/dist/components/BottomSheet/BottomSheetHeader.d.ts.map +1 -0
  50. package/dist/components/BottomSheet/BottomSheetHeader.js +68 -0
  51. package/dist/components/BottomSheet/BottomSheetHeader.js.map +1 -0
  52. package/dist/components/BottomSheet/BottomSheetInternalProvider.cjs +26 -0
  53. package/dist/components/BottomSheet/BottomSheetInternalProvider.d.cts +23 -0
  54. package/dist/components/BottomSheet/BottomSheetInternalProvider.d.cts.map +1 -0
  55. package/dist/components/BottomSheet/BottomSheetInternalProvider.d.ts +23 -0
  56. package/dist/components/BottomSheet/BottomSheetInternalProvider.d.ts.map +1 -0
  57. package/dist/components/BottomSheet/BottomSheetInternalProvider.js +24 -0
  58. package/dist/components/BottomSheet/BottomSheetInternalProvider.js.map +1 -0
  59. package/dist/components/BottomSheet/BottomSheetProvider.cjs +33 -0
  60. package/dist/components/BottomSheet/BottomSheetProvider.d.cts +24 -0
  61. package/dist/components/BottomSheet/BottomSheetProvider.d.cts.map +1 -0
  62. package/dist/components/BottomSheet/BottomSheetProvider.d.ts +24 -0
  63. package/dist/components/BottomSheet/BottomSheetProvider.d.ts.map +1 -0
  64. package/dist/components/BottomSheet/BottomSheetProvider.js +31 -0
  65. package/dist/components/BottomSheet/BottomSheetProvider.js.map +1 -0
  66. package/dist/components/BottomSheet/BottomSheetTrigger.cjs +28 -0
  67. package/dist/components/BottomSheet/BottomSheetTrigger.d.cts +25 -0
  68. package/dist/components/BottomSheet/BottomSheetTrigger.d.cts.map +1 -0
  69. package/dist/components/BottomSheet/BottomSheetTrigger.d.ts +25 -0
  70. package/dist/components/BottomSheet/BottomSheetTrigger.d.ts.map +1 -0
  71. package/dist/components/BottomSheet/BottomSheetTrigger.js +27 -0
  72. package/dist/components/BottomSheet/BottomSheetTrigger.js.map +1 -0
  73. package/dist/components/BottomSheet/index.cjs +19 -0
  74. package/dist/components/BottomSheet/index.d.cts +11 -0
  75. package/dist/components/BottomSheet/index.d.ts +11 -0
  76. package/dist/components/BottomSheet/index.js +11 -0
  77. package/dist/components/BottomSheet/types.cjs +1 -0
  78. package/dist/components/BottomSheet/types.d.cts +173 -0
  79. package/dist/components/BottomSheet/types.d.cts.map +1 -0
  80. package/dist/components/BottomSheet/types.d.ts +173 -0
  81. package/dist/components/BottomSheet/types.d.ts.map +1 -0
  82. package/dist/components/BottomSheet/types.js +1 -0
  83. package/dist/components/BottomSheet/useBottomSheetDrag.cjs +191 -0
  84. package/dist/components/BottomSheet/useBottomSheetDrag.d.cts +69 -0
  85. package/dist/components/BottomSheet/useBottomSheetDrag.d.cts.map +1 -0
  86. package/dist/components/BottomSheet/useBottomSheetDrag.d.ts +69 -0
  87. package/dist/components/BottomSheet/useBottomSheetDrag.d.ts.map +1 -0
  88. package/dist/components/BottomSheet/useBottomSheetDrag.js +190 -0
  89. package/dist/components/BottomSheet/useBottomSheetDrag.js.map +1 -0
  90. package/dist/components/BottomSheet/useBottomSheetScroll.cjs +61 -0
  91. package/dist/components/BottomSheet/useBottomSheetScroll.d.cts +48 -0
  92. package/dist/components/BottomSheet/useBottomSheetScroll.d.cts.map +1 -0
  93. package/dist/components/BottomSheet/useBottomSheetScroll.d.ts +48 -0
  94. package/dist/components/BottomSheet/useBottomSheetScroll.d.ts.map +1 -0
  95. package/dist/components/BottomSheet/useBottomSheetScroll.js +60 -0
  96. package/dist/components/BottomSheet/useBottomSheetScroll.js.map +1 -0
  97. package/dist/components/BottomSheet/useBottomSheetSnapModel.cjs +142 -0
  98. package/dist/components/BottomSheet/useBottomSheetSnapModel.d.cts +79 -0
  99. package/dist/components/BottomSheet/useBottomSheetSnapModel.d.cts.map +1 -0
  100. package/dist/components/BottomSheet/useBottomSheetSnapModel.d.ts +79 -0
  101. package/dist/components/BottomSheet/useBottomSheetSnapModel.d.ts.map +1 -0
  102. package/dist/components/BottomSheet/useBottomSheetSnapModel.js +140 -0
  103. package/dist/components/BottomSheet/useBottomSheetSnapModel.js.map +1 -0
  104. package/dist/components/BottomSheet/useBottomSheetStore.cjs +79 -0
  105. package/dist/components/BottomSheet/useBottomSheetStore.d.cts +45 -0
  106. package/dist/components/BottomSheet/useBottomSheetStore.d.cts.map +1 -0
  107. package/dist/components/BottomSheet/useBottomSheetStore.d.ts +45 -0
  108. package/dist/components/BottomSheet/useBottomSheetStore.d.ts.map +1 -0
  109. package/dist/components/BottomSheet/useBottomSheetStore.js +77 -0
  110. package/dist/components/BottomSheet/useBottomSheetStore.js.map +1 -0
  111. package/dist/components/BottomSheet/useExpansionMargins.cjs +57 -0
  112. package/dist/components/BottomSheet/useExpansionMargins.d.cts +59 -0
  113. package/dist/components/BottomSheet/useExpansionMargins.d.cts.map +1 -0
  114. package/dist/components/BottomSheet/useExpansionMargins.d.ts +59 -0
  115. package/dist/components/BottomSheet/useExpansionMargins.d.ts.map +1 -0
  116. package/dist/components/BottomSheet/useExpansionMargins.js +56 -0
  117. package/dist/components/BottomSheet/useExpansionMargins.js.map +1 -0
  118. package/dist/components/BottomSheet/useKeyboardAvoidance.cjs +53 -0
  119. package/dist/components/BottomSheet/useKeyboardAvoidance.d.cts +31 -0
  120. package/dist/components/BottomSheet/useKeyboardAvoidance.d.cts.map +1 -0
  121. package/dist/components/BottomSheet/useKeyboardAvoidance.d.ts +31 -0
  122. package/dist/components/BottomSheet/useKeyboardAvoidance.d.ts.map +1 -0
  123. package/dist/components/BottomSheet/useKeyboardAvoidance.js +52 -0
  124. package/dist/components/BottomSheet/useKeyboardAvoidance.js.map +1 -0
  125. package/dist/components/BottomSheet/utils.cjs +77 -0
  126. package/dist/components/BottomSheet/utils.d.cts +50 -0
  127. package/dist/components/BottomSheet/utils.d.cts.map +1 -0
  128. package/dist/components/BottomSheet/utils.d.ts +50 -0
  129. package/dist/components/BottomSheet/utils.d.ts.map +1 -0
  130. package/dist/components/BottomSheet/utils.js +72 -0
  131. package/dist/components/BottomSheet/utils.js.map +1 -0
  132. package/dist/components/Box.cjs +1 -1
  133. package/dist/components/Box.js +1 -1
  134. package/dist/components/Button.cjs +1 -1
  135. package/dist/components/Button.js +1 -1
  136. package/dist/components/Checkbox.cjs +1 -1
  137. package/dist/components/Checkbox.js +1 -1
  138. package/dist/components/Chip.cjs +1 -1
  139. package/dist/components/Chip.js +1 -1
  140. package/dist/components/Icon.cjs +1 -1
  141. package/dist/components/Icon.js +1 -1
  142. package/dist/components/IconButton.cjs +1 -1
  143. package/dist/components/IconButton.js +1 -1
  144. package/dist/components/Image.cjs +1 -1
  145. package/dist/components/Image.js +1 -1
  146. package/dist/components/Input.cjs +1 -1
  147. package/dist/components/Input.js +1 -1
  148. package/dist/components/Link.cjs +1 -1
  149. package/dist/components/Link.js +1 -1
  150. package/dist/components/Pressable.cjs +1 -1
  151. package/dist/components/Pressable.js +1 -1
  152. package/dist/components/Radio.cjs +1 -1
  153. package/dist/components/Radio.js +1 -1
  154. package/dist/components/Screen.cjs +1 -1
  155. package/dist/components/Screen.js +1 -1
  156. package/dist/components/Scrim.cjs +73 -0
  157. package/dist/components/Scrim.d.cts +43 -0
  158. package/dist/components/Scrim.d.cts.map +1 -0
  159. package/dist/components/Scrim.d.ts +43 -0
  160. package/dist/components/Scrim.d.ts.map +1 -0
  161. package/dist/components/Scrim.js +71 -0
  162. package/dist/components/Scrim.js.map +1 -0
  163. package/dist/components/Switch.cjs +1 -1
  164. package/dist/components/Switch.js +1 -1
  165. package/dist/components/Text.cjs +1 -1
  166. package/dist/components/Text.js +1 -1
  167. package/dist/components/UDSProvider.cjs +38 -0
  168. package/dist/components/UDSProvider.d.cts +30 -0
  169. package/dist/components/UDSProvider.d.cts.map +1 -0
  170. package/dist/components/UDSProvider.d.ts +30 -0
  171. package/dist/components/UDSProvider.d.ts.map +1 -0
  172. package/dist/components/UDSProvider.js +37 -0
  173. package/dist/components/UDSProvider.js.map +1 -0
  174. package/dist/native/UDSScreenCornerRadiusModule.cjs +30 -0
  175. package/dist/native/UDSScreenCornerRadiusModule.d.cts +12 -0
  176. package/dist/native/UDSScreenCornerRadiusModule.d.cts.map +1 -0
  177. package/dist/native/UDSScreenCornerRadiusModule.d.ts +12 -0
  178. package/dist/native/UDSScreenCornerRadiusModule.d.ts.map +1 -0
  179. package/dist/native/UDSScreenCornerRadiusModule.js +17 -0
  180. package/dist/native/UDSScreenCornerRadiusModule.js.map +1 -0
  181. package/dist/portal.cjs +81 -0
  182. package/dist/portal.d.cts +18 -0
  183. package/dist/portal.d.cts.map +1 -0
  184. package/dist/portal.d.ts +18 -0
  185. package/dist/portal.d.ts.map +1 -0
  186. package/dist/portal.js +79 -0
  187. package/dist/portal.js.map +1 -0
  188. package/expo-module.config.json +9 -0
  189. package/generated/styles.cjs +10 -0
  190. package/generated/styles.d.ts +15 -2
  191. package/generated/styles.mjs +10 -0
  192. package/generated/unistyles.d.ts +21 -0
  193. package/ios/UDSMobile.podspec +25 -0
  194. package/ios/UDSScreenCornerRadiusModule.swift +218 -0
  195. package/package.json +40 -1
@@ -0,0 +1,18 @@
1
+
2
+ import * as react from "react";
3
+ import { ReactNode } from "react";
4
+
5
+ //#region src/portal.d.ts
6
+ declare function Portal({
7
+ children
8
+ }: {
9
+ children: ReactNode;
10
+ }): null;
11
+ declare function PortalProvider({
12
+ children
13
+ }: {
14
+ children: ReactNode;
15
+ }): react.JSX.Element;
16
+ //#endregion
17
+ export { Portal, PortalProvider };
18
+ //# sourceMappingURL=portal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.d.ts","names":[],"sources":["../src/portal.tsx"],"mappings":";;;;;iBAoFS,MAAA,CAAA;EAAS;AAAA;EAAc,QAAA,EAAU,SAAA;AAAA;AAAA,iBAmBjC,cAAA,CAAA;EAAiB;AAAA;EAAc,QAAA,EAAU,SAAA;AAAA,IAAW,KAAA,CAAA,GAAA,CAAA,OAAA"}
package/dist/portal.js ADDED
@@ -0,0 +1,79 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ import { createContext, memo, useCallback, useContext, useEffect, useId, useMemo, useReducer } from "react";
3
+ import { StyleSheet, View } from "react-native";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+
6
+ //#region src/portal.tsx
7
+ function portalReducer(state, action) {
8
+ switch (action.type) {
9
+ case "register": {
10
+ const next = new Map(state);
11
+ next.set(action.id, action.node);
12
+ return next;
13
+ }
14
+ case "unregister": {
15
+ if (!state.has(action.id)) return state;
16
+ const next = new Map(state);
17
+ next.delete(action.id);
18
+ return next;
19
+ }
20
+ }
21
+ }
22
+ const PortalContext = createContext(null);
23
+ function usePortalContext() {
24
+ const ctx = useContext(PortalContext);
25
+ if (!ctx) throw new Error("Portal must be used within a UDSProvider.");
26
+ return ctx;
27
+ }
28
+ const PortalHost = memo(function PortalHost({ state }) {
29
+ if (state.size === 0) return null;
30
+ const nodes = [];
31
+ state.forEach((node, id) => {
32
+ nodes.push(/* @__PURE__ */ jsx(View, {
33
+ style: styles.overlay,
34
+ pointerEvents: "box-none",
35
+ children: node
36
+ }, id));
37
+ });
38
+ return nodes;
39
+ });
40
+ function Portal({ children }) {
41
+ const id = useId();
42
+ const { register, unregister } = usePortalContext();
43
+ useEffect(() => {
44
+ register(id, children);
45
+ }, [
46
+ id,
47
+ children,
48
+ register
49
+ ]);
50
+ useEffect(() => {
51
+ return () => unregister(id);
52
+ }, [id, unregister]);
53
+ return null;
54
+ }
55
+ function PortalProvider({ children }) {
56
+ const [state, dispatch] = useReducer(portalReducer, /* @__PURE__ */ new Map());
57
+ const register = useCallback((id, node) => dispatch({
58
+ type: "register",
59
+ id,
60
+ node
61
+ }), []);
62
+ const unregister = useCallback((id) => dispatch({
63
+ type: "unregister",
64
+ id
65
+ }), []);
66
+ const contextValue = useMemo(() => ({
67
+ register,
68
+ unregister
69
+ }), [register, unregister]);
70
+ return /* @__PURE__ */ jsxs(PortalContext.Provider, {
71
+ value: contextValue,
72
+ children: [children, /* @__PURE__ */ jsx(PortalHost, { state })]
73
+ });
74
+ }
75
+ const styles = StyleSheet.create({ overlay: { ...StyleSheet.absoluteFill } });
76
+
77
+ //#endregion
78
+ export { Portal, PortalProvider };
79
+ //# sourceMappingURL=portal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.js","names":[],"sources":["../src/portal.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport {\n createContext,\n memo,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useReducer,\n} from 'react';\nimport { StyleSheet, View } from 'react-native';\n\n// ---------------------------------------------------------------------------\n// State\n// ---------------------------------------------------------------------------\n\ntype PortalState = Map<string, ReactNode>;\n\ntype PortalAction =\n | { type: 'register'; id: string; node: ReactNode }\n | { type: 'unregister'; id: string };\n\nfunction portalReducer(state: PortalState, action: PortalAction): PortalState {\n switch (action.type) {\n case 'register': {\n const next = new Map(state);\n next.set(action.id, action.node);\n return next;\n }\n case 'unregister': {\n if (!state.has(action.id)) {\n return state;\n }\n const next = new Map(state);\n next.delete(action.id);\n return next;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface PortalContextValue {\n register: (id: string, node: ReactNode) => void;\n unregister: (id: string) => void;\n}\n\nconst PortalContext = createContext<PortalContextValue | null>(null);\n\nfunction usePortalContext(): PortalContextValue {\n const ctx = useContext(PortalContext);\n if (!ctx) {\n throw new Error('Portal must be used within a UDSProvider.');\n }\n return ctx;\n}\n\n// ---------------------------------------------------------------------------\n// PortalHost — renders registered portals. Place after children for z-order.\n// ---------------------------------------------------------------------------\n\nconst PortalHost = memo(function PortalHost({ state }: { state: PortalState }) {\n if (state.size === 0) {\n return null;\n }\n\n const nodes: ReactNode[] = [];\n state.forEach((node, id) => {\n nodes.push(\n <View key={id} style={styles.overlay} pointerEvents=\"box-none\">\n {node}\n </View>,\n );\n });\n return nodes;\n});\n\n// ---------------------------------------------------------------------------\n// Portal — registers children with the host. Renders nothing itself.\n// ---------------------------------------------------------------------------\n\nfunction Portal({ children }: { children: ReactNode }) {\n const id = useId();\n const { register, unregister } = usePortalContext();\n\n useEffect(() => {\n register(id, children);\n }, [id, children, register]);\n\n useEffect(() => {\n return () => unregister(id);\n }, [id, unregister]);\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// PortalProvider — sets up the portal context and host.\n// ---------------------------------------------------------------------------\n\nfunction PortalProvider({ children }: { children: ReactNode }) {\n const [state, dispatch] = useReducer(portalReducer, new Map() as PortalState);\n\n const register = useCallback(\n (id: string, node: ReactNode) => dispatch({ type: 'register', id, node }),\n [],\n );\n const unregister = useCallback((id: string) => dispatch({ type: 'unregister', id }), []);\n\n const contextValue = useMemo(() => ({ register, unregister }), [register, unregister]);\n\n return (\n <PortalContext.Provider value={contextValue}>\n {children}\n <PortalHost state={state} />\n </PortalContext.Provider>\n );\n}\n\nconst styles = StyleSheet.create({\n overlay: {\n ...StyleSheet.absoluteFill,\n },\n});\n\nexport { Portal, PortalProvider };\n"],"mappings":";;;;;;AAuBA,SAAS,cAAc,OAAoB,QAAmC;AAC5E,SAAQ,OAAO,MAAf;EACE,KAAK,YAAY;GACf,MAAM,OAAO,IAAI,IAAI,MAAM;AAC3B,QAAK,IAAI,OAAO,IAAI,OAAO,KAAK;AAChC,UAAO;;EAET,KAAK,cAAc;AACjB,OAAI,CAAC,MAAM,IAAI,OAAO,GAAG,CACvB,QAAO;GAET,MAAM,OAAO,IAAI,IAAI,MAAM;AAC3B,QAAK,OAAO,OAAO,GAAG;AACtB,UAAO;;;;AAcb,MAAM,gBAAgB,cAAyC,KAAK;AAEpE,SAAS,mBAAuC;CAC9C,MAAM,MAAM,WAAW,cAAc;AACrC,KAAI,CAAC,IACH,OAAM,IAAI,MAAM,4CAA4C;AAE9D,QAAO;;AAOT,MAAM,aAAa,KAAK,SAAS,WAAW,EAAE,SAAiC;AAC7E,KAAI,MAAM,SAAS,EACjB,QAAO;CAGT,MAAM,QAAqB,EAAE;AAC7B,OAAM,SAAS,MAAM,OAAO;AAC1B,QAAM,KACJ,oBAAC;GAAc,OAAO,OAAO;GAAS,eAAc;aACjD;KADQ,GAEJ,CACR;GACD;AACF,QAAO;EACP;AAMF,SAAS,OAAO,EAAE,YAAqC;CACrD,MAAM,KAAK,OAAO;CAClB,MAAM,EAAE,UAAU,eAAe,kBAAkB;AAEnD,iBAAgB;AACd,WAAS,IAAI,SAAS;IACrB;EAAC;EAAI;EAAU;EAAS,CAAC;AAE5B,iBAAgB;AACd,eAAa,WAAW,GAAG;IAC1B,CAAC,IAAI,WAAW,CAAC;AAEpB,QAAO;;AAOT,SAAS,eAAe,EAAE,YAAqC;CAC7D,MAAM,CAAC,OAAO,YAAY,WAAW,+BAAe,IAAI,KAAK,CAAgB;CAE7E,MAAM,WAAW,aACd,IAAY,SAAoB,SAAS;EAAE,MAAM;EAAY;EAAI;EAAM,CAAC,EACzE,EAAE,CACH;CACD,MAAM,aAAa,aAAa,OAAe,SAAS;EAAE,MAAM;EAAc;EAAI,CAAC,EAAE,EAAE,CAAC;CAExF,MAAM,eAAe,eAAe;EAAE;EAAU;EAAY,GAAG,CAAC,UAAU,WAAW,CAAC;AAEtF,QACE,qBAAC,cAAc;EAAS,OAAO;aAC5B,UACD,oBAAC,cAAkB,QAAS;GACL;;AAI7B,MAAM,SAAS,WAAW,OAAO,EAC/B,SAAS,EACP,GAAG,WAAW,cACf,EACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ {
2
+ "platforms": ["apple", "android"],
3
+ "apple": {
4
+ "modules": ["UDSScreenCornerRadiusModule"]
5
+ },
6
+ "android": {
7
+ "modules": ["com.yahoo.uds.screencornerradius.UDSScreenCornerRadiusModule"]
8
+ }
9
+ }
@@ -4293,6 +4293,11 @@ const popoverStyles = StyleSheet.create((theme) => ({
4293
4293
  size: { default: theme.components['popover/size/default/root/rest'] },
4294
4294
  },
4295
4295
  },
4296
+ blur: {
4297
+ variants: {
4298
+ variant: { default: theme.components['popover/variant/default/blur/rest'] },
4299
+ },
4300
+ },
4296
4301
  closeIcon: {
4297
4302
  variants: {
4298
4303
  size: { default: theme.components['popover/size/default/closeIcon/rest'] },
@@ -4856,6 +4861,11 @@ const tooltipStyles = StyleSheet.create((theme) => ({
4856
4861
  variant: { default: theme.components['tooltip/variant/default/icon/rest'] },
4857
4862
  },
4858
4863
  },
4864
+ blur: {
4865
+ variants: {
4866
+ variant: { default: theme.components['tooltip/variant/default/blur/rest'] },
4867
+ },
4868
+ },
4859
4869
  body: {
4860
4870
  variants: {
4861
4871
  size: { default: theme.components['tooltip/size/default/body/rest'] },
@@ -1365,6 +1365,8 @@ export declare const bottomSheetStyles: {
1365
1365
  borderRadius: number;
1366
1366
  borderWidth: number;
1367
1367
  boxShadow: string;
1368
+ marginBottom: number;
1369
+ marginHorizontal: number;
1368
1370
  paddingHorizontal: number;
1369
1371
  paddingVertical: number;
1370
1372
  };
@@ -1853,14 +1855,21 @@ export declare const menuItemStyles: {
1853
1855
 
1854
1856
  export declare const popoverStyles: {
1855
1857
  root: { boxShadow: string };
1858
+ blur: { backgroundBlurRadius: number };
1856
1859
  closeIcon: { fontSize: number; iconSizeToken: 'sm'; lineHeight: number; color: string };
1857
1860
  closeIconContainer: { padding: number };
1858
1861
  contentWrapper: { gap: number; paddingHorizontal: number; paddingVertical: number };
1859
- svgBase: { borderRadius: number; backgroundColor: string };
1862
+ svgBase: {
1863
+ borderRadius: number;
1864
+ backgroundBlurColor: string;
1865
+ backgroundBlurRadius: number;
1866
+ backgroundColor: string;
1867
+ };
1860
1868
  } & {
1861
1869
  useVariants: (
1862
1870
  variants:
1863
1871
  | { size?: undefined }
1872
+ | { variant?: undefined }
1864
1873
  | { size?: undefined; variant?: undefined }
1865
1874
  | { size?: undefined }
1866
1875
  | { size?: undefined }
@@ -1911,7 +1920,7 @@ export declare const radioStyles: {
1911
1920
  };
1912
1921
 
1913
1922
  export declare const scrimStyles: {
1914
- root: { backgroundColor: string; opacity: number };
1923
+ root: { backgroundBlurRadius: number; backgroundColor: string; opacity: number };
1915
1924
  } & {
1916
1925
  useVariants: (variants: { variant?: undefined }) => void;
1917
1926
  };
@@ -1953,6 +1962,8 @@ export declare const toastStyles: {
1953
1962
  gap: number;
1954
1963
  paddingHorizontal: number;
1955
1964
  paddingVertical: number;
1965
+ backgroundBlurColor: string;
1966
+ backgroundBlurRadius: number;
1956
1967
  backgroundColor: string;
1957
1968
  borderColor: string;
1958
1969
  };
@@ -1989,6 +2000,7 @@ export declare const tooltipStyles: {
1989
2000
  root: { gap: number; paddingHorizontal: number; paddingVertical: number };
1990
2001
  text: { color: string };
1991
2002
  icon: { fontSize: number; iconSizeToken: 'xs'; lineHeight: number; color: string };
2003
+ blur: { backgroundBlurRadius: number };
1992
2004
  body: {
1993
2005
  fontFamily: 'YahooProductSans-Medium';
1994
2006
  fontSize: number;
@@ -2014,6 +2026,7 @@ export declare const tooltipStyles: {
2014
2026
  | { size?: undefined }
2015
2027
  | { variant?: undefined }
2016
2028
  | { size?: undefined; variant?: undefined }
2029
+ | { variant?: undefined }
2017
2030
  | { size?: undefined }
2018
2031
  | { size?: undefined }
2019
2032
  | { size?: undefined; variant?: undefined }
@@ -4293,6 +4293,11 @@ const popoverStyles = StyleSheet.create((theme) => ({
4293
4293
  size: { default: theme.components['popover/size/default/root/rest'] },
4294
4294
  },
4295
4295
  },
4296
+ blur: {
4297
+ variants: {
4298
+ variant: { default: theme.components['popover/variant/default/blur/rest'] },
4299
+ },
4300
+ },
4296
4301
  closeIcon: {
4297
4302
  variants: {
4298
4303
  size: { default: theme.components['popover/size/default/closeIcon/rest'] },
@@ -4856,6 +4861,11 @@ const tooltipStyles = StyleSheet.create((theme) => ({
4856
4861
  variant: { default: theme.components['tooltip/variant/default/icon/rest'] },
4857
4862
  },
4858
4863
  },
4864
+ blur: {
4865
+ variants: {
4866
+ variant: { default: theme.components['tooltip/variant/default/blur/rest'] },
4867
+ },
4868
+ },
4859
4869
  body: {
4860
4870
  variants: {
4861
4871
  size: { default: theme.components['tooltip/size/default/body/rest'] },
@@ -360,6 +360,8 @@ interface ComponentTheme {
360
360
  borderRadius: number;
361
361
  borderWidth: number;
362
362
  boxShadow: string;
363
+ marginBottom: number;
364
+ marginHorizontal: number;
363
365
  paddingHorizontal: number;
364
366
  paddingVertical: number;
365
367
  };
@@ -3718,10 +3720,15 @@ interface ComponentTheme {
3718
3720
  'popover/size/default/svgBase/rest': {
3719
3721
  borderRadius: number;
3720
3722
  };
3723
+ 'popover/variant/default/blur/rest': {
3724
+ backgroundBlurRadius: number;
3725
+ };
3721
3726
  'popover/variant/default/closeIcon/rest': {
3722
3727
  color: string;
3723
3728
  };
3724
3729
  'popover/variant/default/svgBase/rest': {
3730
+ backgroundBlurColor: string;
3731
+ backgroundBlurRadius: number;
3725
3732
  backgroundColor: string;
3726
3733
  };
3727
3734
  'radio/size/md/radio/rest': {
@@ -3921,6 +3928,7 @@ interface ComponentTheme {
3921
3928
  color: string;
3922
3929
  };
3923
3930
  'scrim/variant/default/root/rest': {
3931
+ backgroundBlurRadius: number;
3924
3932
  backgroundColor: string;
3925
3933
  opacity: number;
3926
3934
  };
@@ -4029,6 +4037,8 @@ interface ComponentTheme {
4029
4037
  color: string;
4030
4038
  };
4031
4039
  'toast/variant/error/root/rest': {
4040
+ backgroundBlurColor: string;
4041
+ backgroundBlurRadius: number;
4032
4042
  backgroundColor: string;
4033
4043
  borderColor: string;
4034
4044
  };
@@ -4042,6 +4052,8 @@ interface ComponentTheme {
4042
4052
  color: string;
4043
4053
  };
4044
4054
  'toast/variant/info/root/rest': {
4055
+ backgroundBlurColor: string;
4056
+ backgroundBlurRadius: number;
4045
4057
  backgroundColor: string;
4046
4058
  borderColor: string;
4047
4059
  };
@@ -4055,6 +4067,8 @@ interface ComponentTheme {
4055
4067
  color: string;
4056
4068
  };
4057
4069
  'toast/variant/loading/root/rest': {
4070
+ backgroundBlurColor: string;
4071
+ backgroundBlurRadius: number;
4058
4072
  backgroundColor: string;
4059
4073
  borderColor: string;
4060
4074
  };
@@ -4068,6 +4082,8 @@ interface ComponentTheme {
4068
4082
  color: string;
4069
4083
  };
4070
4084
  'toast/variant/success/root/rest': {
4085
+ backgroundBlurColor: string;
4086
+ backgroundBlurRadius: number;
4071
4087
  backgroundColor: string;
4072
4088
  borderColor: string;
4073
4089
  };
@@ -4081,6 +4097,8 @@ interface ComponentTheme {
4081
4097
  color: string;
4082
4098
  };
4083
4099
  'toast/variant/warning/root/rest': {
4100
+ backgroundBlurColor: string;
4101
+ backgroundBlurRadius: number;
4084
4102
  backgroundColor: string;
4085
4103
  borderColor: string;
4086
4104
  };
@@ -4118,6 +4136,9 @@ interface ComponentTheme {
4118
4136
  letterSpacing: number;
4119
4137
  lineHeight: number;
4120
4138
  };
4139
+ 'tooltip/variant/default/blur/rest': {
4140
+ backgroundBlurRadius: number;
4141
+ };
4121
4142
  'tooltip/variant/default/icon/rest': {
4122
4143
  color: string;
4123
4144
  };
@@ -0,0 +1,25 @@
1
+ require 'json'
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = 'UDSMobile'
7
+ s.version = '0.1.0'
8
+ s.summary = package['description'] || 'UDS Mobile native modules'
9
+ s.description = package['description'] || 'UDS Mobile native modules'
10
+ s.license = package['license'] || 'MIT'
11
+ s.author = 'Yahoo'
12
+ s.homepage = 'https://github.com/yahoo-uds/uds'
13
+ s.platforms = { :ios => '15.1' }
14
+ s.swift_version = '5.9'
15
+ s.source = { git: 'https://github.com/yahoo-uds/uds' }
16
+ s.static_framework = true
17
+
18
+ s.dependency 'ExpoModulesCore'
19
+
20
+ s.pod_target_xcconfig = {
21
+ 'DEFINES_MODULE' => 'YES',
22
+ }
23
+
24
+ s.source_files = "**/*.{h,m,mm,swift,hpp,cpp}"
25
+ end
@@ -0,0 +1,218 @@
1
+ import ExpoModulesCore
2
+ import UIKit
3
+
4
+ public class UDSScreenCornerRadiusModule: Module {
5
+ public func definition() -> ModuleDefinition {
6
+ Name("UDSScreenCornerRadius")
7
+
8
+ Function("getCornerRadiusSync") { () -> Double? in
9
+ return Self.cornerRadius()
10
+ }
11
+
12
+ AsyncFunction("getCornerRadius") { () -> Double? in
13
+ return Self.cornerRadius()
14
+ }
15
+ }
16
+
17
+ private static func cornerRadius() -> Double? {
18
+ let model = deviceModelIdentifier()
19
+ let idiom = UIDevice.current.userInterfaceIdiom
20
+
21
+ if idiom == .phone {
22
+ return iphoneRadii[model]
23
+ } else if idiom == .pad {
24
+ return ipadRadii[model]
25
+ }
26
+ return 0
27
+ }
28
+
29
+ private static func deviceModelIdentifier() -> String {
30
+ var systemInfo = utsname()
31
+ uname(&systemInfo)
32
+ let identifier = Mirror(reflecting: systemInfo.machine).children.reduce("") { acc, element in
33
+ guard let value = element.value as? Int8, value != 0 else { return acc }
34
+ return acc + String(UnicodeScalar(UInt8(value)))
35
+ }
36
+
37
+ if let simModel = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] {
38
+ return simModel
39
+ }
40
+
41
+ return identifier
42
+ }
43
+ }
44
+
45
+ // Source: BezelKit (https://github.com/markbattistella/BezelKit)
46
+ // Corner radius values in points for each device model identifier.
47
+
48
+ private let iphoneRadii: [String: Double] = [
49
+ "iPhone1,1": 0,
50
+ "iPhone1,2": 0,
51
+ "iPhone2,1": 0,
52
+ "iPhone3,1": 0,
53
+ "iPhone3,2": 0,
54
+ "iPhone3,3": 0,
55
+ "iPhone4,1": 0,
56
+ "iPhone5,1": 0,
57
+ "iPhone5,2": 0,
58
+ "iPhone5,3": 0,
59
+ "iPhone5,4": 0,
60
+ "iPhone6,1": 0,
61
+ "iPhone6,2": 0,
62
+ "iPhone7,1": 0,
63
+ "iPhone7,2": 0,
64
+ "iPhone8,1": 0,
65
+ "iPhone8,2": 0,
66
+ "iPhone8,4": 0,
67
+ "iPhone9,1": 0,
68
+ "iPhone9,2": 0,
69
+ "iPhone9,3": 0,
70
+ "iPhone9,4": 0,
71
+ "iPhone10,1": 0,
72
+ "iPhone10,2": 0,
73
+ "iPhone10,3": 39,
74
+ "iPhone10,4": 0,
75
+ "iPhone10,5": 0,
76
+ "iPhone10,6": 39,
77
+ "iPhone11,2": 39,
78
+ "iPhone11,4": 39,
79
+ "iPhone11,6": 39,
80
+ "iPhone11,8": 41.5,
81
+ "iPhone12,1": 41.5,
82
+ "iPhone12,3": 39,
83
+ "iPhone12,5": 39,
84
+ "iPhone12,8": 0,
85
+ "iPhone13,1": 44,
86
+ "iPhone13,2": 47.33,
87
+ "iPhone13,3": 47.33,
88
+ "iPhone13,4": 53.33,
89
+ "iPhone14,2": 47.33,
90
+ "iPhone14,3": 53.33,
91
+ "iPhone14,4": 44,
92
+ "iPhone14,5": 47.33,
93
+ "iPhone14,6": 0,
94
+ "iPhone14,7": 47.33,
95
+ "iPhone14,8": 53.33,
96
+ "iPhone15,2": 55,
97
+ "iPhone15,3": 55,
98
+ "iPhone15,4": 55,
99
+ "iPhone15,5": 55,
100
+ "iPhone16,1": 55,
101
+ "iPhone16,2": 55,
102
+ "iPhone17,1": 62,
103
+ "iPhone17,2": 62,
104
+ "iPhone17,3": 55,
105
+ "iPhone17,4": 55,
106
+ "iPhone17,5": 47.33,
107
+ "iPhone18,1": 62,
108
+ "iPhone18,2": 62,
109
+ "iPhone18,3": 62,
110
+ "iPhone18,4": 62,
111
+ "iPhone18,5": 47.33,
112
+ ]
113
+
114
+ private let ipadRadii: [String: Double] = [
115
+ "iPad1,1": 0,
116
+ "iPad2,1": 0,
117
+ "iPad2,2": 0,
118
+ "iPad2,3": 0,
119
+ "iPad2,4": 0,
120
+ "iPad2,5": 0,
121
+ "iPad2,6": 0,
122
+ "iPad2,7": 0,
123
+ "iPad3,1": 0,
124
+ "iPad3,2": 0,
125
+ "iPad3,3": 0,
126
+ "iPad3,4": 0,
127
+ "iPad3,5": 0,
128
+ "iPad3,6": 0,
129
+ "iPad4,1": 0,
130
+ "iPad4,2": 0,
131
+ "iPad4,3": 0,
132
+ "iPad4,4": 0,
133
+ "iPad4,5": 0,
134
+ "iPad4,6": 0,
135
+ "iPad4,7": 0,
136
+ "iPad4,8": 0,
137
+ "iPad4,9": 0,
138
+ "iPad5,1": 0,
139
+ "iPad5,2": 0,
140
+ "iPad5,3": 0,
141
+ "iPad5,4": 0,
142
+ "iPad6,11": 0,
143
+ "iPad6,12": 0,
144
+ "iPad6,3": 0,
145
+ "iPad6,4": 0,
146
+ "iPad7,1": 0,
147
+ "iPad7,11": 0,
148
+ "iPad7,12": 0,
149
+ "iPad7,2": 0,
150
+ "iPad7,3": 0,
151
+ "iPad7,4": 0,
152
+ "iPad7,5": 0,
153
+ "iPad7,6": 0,
154
+ "iPad8,1": 18,
155
+ "iPad8,10": 18,
156
+ "iPad8,11": 18,
157
+ "iPad8,12": 18,
158
+ "iPad8,2": 18,
159
+ "iPad8,3": 18,
160
+ "iPad8,4": 18,
161
+ "iPad8,5": 18,
162
+ "iPad8,6": 18,
163
+ "iPad8,7": 18,
164
+ "iPad8,8": 18,
165
+ "iPad8,9": 18,
166
+ "iPad11,1": 0,
167
+ "iPad11,2": 0,
168
+ "iPad11,3": 0,
169
+ "iPad11,4": 0,
170
+ "iPad11,6": 0,
171
+ "iPad11,7": 0,
172
+ "iPad12,1": 0,
173
+ "iPad12,2": 0,
174
+ "iPad13,1": 18,
175
+ "iPad13,10": 18,
176
+ "iPad13,11": 18,
177
+ "iPad13,12": 18,
178
+ "iPad13,16": 18,
179
+ "iPad13,17": 18,
180
+ "iPad13,18": 25,
181
+ "iPad13,19": 25,
182
+ "iPad13,2": 18,
183
+ "iPad13,4": 18,
184
+ "iPad13,5": 18,
185
+ "iPad13,6": 18,
186
+ "iPad13,7": 18,
187
+ "iPad13,8": 18,
188
+ "iPad13,9": 18,
189
+ "iPad14,1": 21.5,
190
+ "iPad14,10": 18,
191
+ "iPad14,11": 18,
192
+ "iPad14,2": 21.5,
193
+ "iPad14,3": 18,
194
+ "iPad14,4": 18,
195
+ "iPad14,5": 18,
196
+ "iPad14,6": 18,
197
+ "iPad14,8": 18,
198
+ "iPad14,9": 18,
199
+ "iPad15,3": 18,
200
+ "iPad15,5": 18,
201
+ "iPad15,7": 25,
202
+ "iPad15,8": 25,
203
+ "iPad16,1": 21.5,
204
+ "iPad16,10": 18,
205
+ "iPad16,11": 18,
206
+ "iPad16,2": 21.5,
207
+ "iPad16,3": 30,
208
+ "iPad16,4": 30,
209
+ "iPad16,5": 30,
210
+ "iPad16,6": 30,
211
+ "iPad16,7": 0,
212
+ "iPad16,8": 0,
213
+ "iPad16,9": 18,
214
+ "iPad17,1": 30,
215
+ "iPad17,2": 30,
216
+ "iPad17,3": 30,
217
+ "iPad17,4": 30,
218
+ ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yahoo/uds-mobile",
3
- "version": "2.3.4",
3
+ "version": "2.4.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "uds-mobile": "./cli/uds-mobile.js"
@@ -10,6 +10,9 @@
10
10
  "cli/**",
11
11
  "fonts/**",
12
12
  "generated/**",
13
+ "android/**",
14
+ "ios/**",
15
+ "expo-module.config.json",
13
16
  "README.md",
14
17
  "CONTRIBUTING.md",
15
18
  "CHANGELOG.md",
@@ -47,6 +50,16 @@
47
50
  "default": "./dist/components/BlurTarget.cjs"
48
51
  }
49
52
  },
53
+ "./BottomSheet": {
54
+ "import": {
55
+ "types": "./dist/components/BottomSheet/index.d.ts",
56
+ "default": "./dist/components/BottomSheet/index.js"
57
+ },
58
+ "require": {
59
+ "types": "./dist/components/BottomSheet/index.d.cts",
60
+ "default": "./dist/components/BottomSheet/index.cjs"
61
+ }
62
+ },
50
63
  "./Box": {
51
64
  "import": {
52
65
  "types": "./dist/components/Box.d.ts",
@@ -207,6 +220,16 @@
207
220
  "default": "./dist/components/Text.cjs"
208
221
  }
209
222
  },
223
+ "./UDSProvider": {
224
+ "import": {
225
+ "types": "./dist/components/UDSProvider.d.ts",
226
+ "default": "./dist/components/UDSProvider.js"
227
+ },
228
+ "require": {
229
+ "types": "./dist/components/UDSProvider.d.cts",
230
+ "default": "./dist/components/UDSProvider.cjs"
231
+ }
232
+ },
210
233
  "./VStack": {
211
234
  "import": {
212
235
  "types": "./dist/components/VStack.d.ts",
@@ -257,11 +280,15 @@
257
280
  "@yahoo/uds-icons": ">=2.0.0",
258
281
  "expo-blur": "~55.0.0",
259
282
  "expo-font": "~55.0.0",
283
+ "expo-modules-core": ">=2.0.0",
260
284
  "react": "*",
261
285
  "react-native": ">=0.83.0",
262
286
  "react-native-edge-to-edge": ">=1.0.0",
287
+ "react-native-gesture-handler": ">=2.20.0",
263
288
  "react-native-nitro-modules": ">=0.32.0",
264
289
  "react-native-reanimated": ">=4.0.0",
290
+ "react-native-safe-area-context": ">=5.0.0",
291
+ "react-native-screens": ">=4.0.0",
265
292
  "react-native-svg": ">=15.0.0",
266
293
  "react-native-unistyles": ">=3.0.0"
267
294
  },
@@ -275,6 +302,9 @@
275
302
  "expo-font": {
276
303
  "optional": true
277
304
  },
305
+ "expo-modules-core": {
306
+ "optional": true
307
+ },
278
308
  "react": {
279
309
  "optional": false
280
310
  },
@@ -287,9 +317,18 @@
287
317
  "react-native-nitro-modules": {
288
318
  "optional": false
289
319
  },
320
+ "react-native-gesture-handler": {
321
+ "optional": false
322
+ },
290
323
  "react-native-reanimated": {
291
324
  "optional": false
292
325
  },
326
+ "react-native-safe-area-context": {
327
+ "optional": false
328
+ },
329
+ "react-native-screens": {
330
+ "optional": false
331
+ },
293
332
  "react-native-svg": {
294
333
  "optional": false
295
334
  },