@oxy.so/services 13.0.0 → 13.1.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 (83) hide show
  1. package/lib/commonjs/ui/components/ExpoImage.js +13 -0
  2. package/lib/commonjs/ui/components/ExpoImage.js.map +1 -0
  3. package/lib/commonjs/ui/components/ExpoImage.macos.js +80 -0
  4. package/lib/commonjs/ui/components/ExpoImage.macos.js.map +1 -0
  5. package/lib/commonjs/ui/components/KeyboardBoundary.macos.js +19 -0
  6. package/lib/commonjs/ui/components/KeyboardBoundary.macos.js.map +1 -0
  7. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +3 -3
  8. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  9. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +2 -2
  10. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  11. package/lib/commonjs/ui/oauth/nativeAuthTransport.js +1 -1
  12. package/lib/commonjs/ui/oauth/nativeAuthTransport.js.map +1 -1
  13. package/lib/commonjs/ui/screens/AvatarCropScreen.js +2 -2
  14. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  15. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +2 -2
  16. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  17. package/lib/commonjs/ui/screens/FileManagementScreen.js +4 -4
  18. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  19. package/lib/commonjs/ui/screens/OxyOneScreen.js +2 -2
  20. package/lib/commonjs/ui/screens/OxyOneScreen.js.map +1 -1
  21. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +2 -2
  22. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  23. package/lib/commonjs/ui/utils/imageSize.macos.js +23 -0
  24. package/lib/commonjs/ui/utils/imageSize.macos.js.map +1 -0
  25. package/lib/module/ui/components/ExpoImage.js +14 -0
  26. package/lib/module/ui/components/ExpoImage.js.map +1 -0
  27. package/lib/module/ui/components/ExpoImage.macos.js +76 -0
  28. package/lib/module/ui/components/ExpoImage.macos.js.map +1 -0
  29. package/lib/module/ui/components/KeyboardBoundary.macos.js +14 -0
  30. package/lib/module/ui/components/KeyboardBoundary.macos.js.map +1 -0
  31. package/lib/module/ui/components/fileManagement/FileViewer.js +1 -1
  32. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  33. package/lib/module/ui/components/fileManagement/UploadPreview.js +1 -1
  34. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  35. package/lib/module/ui/oauth/nativeAuthTransport.js +1 -1
  36. package/lib/module/ui/oauth/nativeAuthTransport.js.map +1 -1
  37. package/lib/module/ui/screens/AvatarCropScreen.js +1 -1
  38. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  39. package/lib/module/ui/screens/EditProfileFieldScreen.js +1 -1
  40. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  41. package/lib/module/ui/screens/FileManagementScreen.js +1 -1
  42. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  43. package/lib/module/ui/screens/OxyOneScreen.js +1 -1
  44. package/lib/module/ui/screens/OxyOneScreen.js.map +1 -1
  45. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +1 -1
  46. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  47. package/lib/module/ui/utils/imageSize.macos.js +18 -0
  48. package/lib/module/ui/utils/imageSize.macos.js.map +1 -0
  49. package/lib/typescript/commonjs/ui/components/ExpoImage.d.ts +12 -0
  50. package/lib/typescript/commonjs/ui/components/ExpoImage.d.ts.map +1 -0
  51. package/lib/typescript/commonjs/ui/components/ExpoImage.macos.d.ts +16 -0
  52. package/lib/typescript/commonjs/ui/components/ExpoImage.macos.d.ts.map +1 -0
  53. package/lib/typescript/commonjs/ui/components/KeyboardBoundary.macos.d.ts +10 -0
  54. package/lib/typescript/commonjs/ui/components/KeyboardBoundary.macos.d.ts.map +1 -0
  55. package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts +1 -1
  56. package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts +1 -1
  57. package/lib/typescript/commonjs/ui/oauth/nativeAuthTransport.d.ts.map +1 -1
  58. package/lib/typescript/commonjs/ui/utils/imageSize.macos.d.ts +6 -0
  59. package/lib/typescript/commonjs/ui/utils/imageSize.macos.d.ts.map +1 -0
  60. package/lib/typescript/module/ui/components/ExpoImage.d.ts +12 -0
  61. package/lib/typescript/module/ui/components/ExpoImage.d.ts.map +1 -0
  62. package/lib/typescript/module/ui/components/ExpoImage.macos.d.ts +16 -0
  63. package/lib/typescript/module/ui/components/ExpoImage.macos.d.ts.map +1 -0
  64. package/lib/typescript/module/ui/components/KeyboardBoundary.macos.d.ts +10 -0
  65. package/lib/typescript/module/ui/components/KeyboardBoundary.macos.d.ts.map +1 -0
  66. package/lib/typescript/module/ui/icons/Ionicons.d.ts +1 -1
  67. package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts +1 -1
  68. package/lib/typescript/module/ui/oauth/nativeAuthTransport.d.ts.map +1 -1
  69. package/lib/typescript/module/ui/utils/imageSize.macos.d.ts +6 -0
  70. package/lib/typescript/module/ui/utils/imageSize.macos.d.ts.map +1 -0
  71. package/package.json +33 -32
  72. package/src/ui/components/ExpoImage.macos.tsx +59 -0
  73. package/src/ui/components/ExpoImage.tsx +11 -0
  74. package/src/ui/components/KeyboardBoundary.macos.tsx +8 -0
  75. package/src/ui/components/fileManagement/FileViewer.tsx +1 -1
  76. package/src/ui/components/fileManagement/UploadPreview.tsx +1 -1
  77. package/src/ui/oauth/nativeAuthTransport.ts +5 -1
  78. package/src/ui/screens/AvatarCropScreen.tsx +1 -1
  79. package/src/ui/screens/EditProfileFieldScreen.tsx +1 -1
  80. package/src/ui/screens/FileManagementScreen.tsx +1 -1
  81. package/src/ui/screens/OxyOneScreen.tsx +1 -1
  82. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +1 -1
  83. package/src/ui/utils/imageSize.macos.ts +18 -0
@@ -0,0 +1,10 @@
1
+ import type { FC, ReactNode } from 'react';
2
+ /**
3
+ * react-native-macos fork: react-native-keyboard-controller has no macOS
4
+ * implementation and throws when imported without its native module, and a
5
+ * desktop keyboard never covers the window, so there is nothing to track.
6
+ */
7
+ export declare const KeyboardBoundary: FC<{
8
+ children: ReactNode;
9
+ }>;
10
+ //# sourceMappingURL=KeyboardBoundary.macos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyboardBoundary.macos.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/KeyboardBoundary.macos.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAqC,CAAC"}
@@ -1,4 +1,4 @@
1
1
  /** Glyphs are decorative: hidden from assistive technology (see `decorativeIconSet`). */
2
- declare const Ionicons: import("@expo/vector-icons/build/createIconSet").Icon<"push" | "at" | "code" | "business" | "navigate" | "open" | "add" | "search" | "list" | "settings" | "infinite" | "trash" | "wallet" | "link" | "text" | "scale" | "key" | "image" | "alert" | "radio" | "grid" | "warning" | "people" | "ellipse" | "add-circle-outline" | "alert-circle" | "alert-circle-outline" | "apps" | "archive" | "arrow-back" | "arrow-down" | "arrow-forward" | "arrow-undo" | "arrow-up" | "briefcase-outline" | "bug" | "bulb" | "business-outline" | "calendar" | "calendar-outline" | "camera" | "camera-outline" | "card" | "card-outline" | "cart-outline" | "cash-outline" | "chatbubble" | "checkmark" | "checkmark-circle" | "chevron-back" | "chevron-down" | "chevron-forward" | "chevron-up" | "close" | "close-circle" | "cloud-offline-outline" | "cloud-outline" | "cloud-upload" | "cloud-upload-outline" | "cog" | "cog-outline" | "construct-outline" | "copy-outline" | "cube-outline" | "desktop" | "document" | "document-outline" | "document-text" | "documents" | "download" | "download-outline" | "earth" | "ellipse-outline" | "ellipsis-horizontal" | "eye" | "eye-off-outline" | "filter-outline" | "flame" | "flash" | "folder" | "folder-open-outline" | "folder-outline" | "footsteps" | "gift" | "gift-outline" | "hand-left" | "hardware-chip-outline" | "heart" | "heart-outline" | "help-circle" | "help-circle-outline" | "hourglass-outline" | "image-outline" | "images" | "images-outline" | "information" | "information-circle" | "information-outline" | "leaf" | "library" | "link-outline" | "location" | "location-outline" | "lock-closed" | "log-out-outline" | "mail" | "musical-notes" | "pencil-outline" | "people-outline" | "play" | "pricetag-outline" | "pulse" | "qr-code-outline" | "receipt-outline" | "refresh-outline" | "remove" | "repeat-outline" | "resize" | "rocket" | "school-outline" | "search-outline" | "server" | "share-outline" | "shield" | "shield-checkmark" | "shield-checkmark-outline" | "star" | "swap-horizontal-outline" | "swap-vertical-outline" | "sync" | "time-outline" | "trash-outline" | "trophy" | "trophy-outline" | "videocam" | "volume-off" | "wallet-outline" | "watch" | "wifi", "OxyServicesIonicons">;
2
+ declare const Ionicons: import("@expo/vector-icons/build/createIconSet").Icon<"push" | "at" | "code" | "business" | "navigate" | "key" | "open" | "add" | "search" | "list" | "settings" | "infinite" | "trash" | "wallet" | "link" | "text" | "scale" | "image" | "alert" | "radio" | "grid" | "warning" | "people" | "ellipse" | "add-circle-outline" | "alert-circle" | "alert-circle-outline" | "apps" | "archive" | "arrow-back" | "arrow-down" | "arrow-forward" | "arrow-undo" | "arrow-up" | "briefcase-outline" | "bug" | "bulb" | "business-outline" | "calendar" | "calendar-outline" | "camera" | "camera-outline" | "card" | "card-outline" | "cart-outline" | "cash-outline" | "chatbubble" | "checkmark" | "checkmark-circle" | "chevron-back" | "chevron-down" | "chevron-forward" | "chevron-up" | "close" | "close-circle" | "cloud-offline-outline" | "cloud-outline" | "cloud-upload" | "cloud-upload-outline" | "cog" | "cog-outline" | "construct-outline" | "copy-outline" | "cube-outline" | "desktop" | "document" | "document-outline" | "document-text" | "documents" | "download" | "download-outline" | "earth" | "ellipse-outline" | "ellipsis-horizontal" | "eye" | "eye-off-outline" | "filter-outline" | "flame" | "flash" | "folder" | "folder-open-outline" | "folder-outline" | "footsteps" | "gift" | "gift-outline" | "hand-left" | "hardware-chip-outline" | "heart" | "heart-outline" | "help-circle" | "help-circle-outline" | "hourglass-outline" | "image-outline" | "images" | "images-outline" | "information" | "information-circle" | "information-outline" | "leaf" | "library" | "link-outline" | "location" | "location-outline" | "lock-closed" | "log-out-outline" | "mail" | "musical-notes" | "pencil-outline" | "people-outline" | "play" | "pricetag-outline" | "pulse" | "qr-code-outline" | "receipt-outline" | "refresh-outline" | "remove" | "repeat-outline" | "resize" | "rocket" | "school-outline" | "search-outline" | "server" | "share-outline" | "shield" | "shield-checkmark" | "shield-checkmark-outline" | "star" | "swap-horizontal-outline" | "swap-vertical-outline" | "sync" | "time-outline" | "trash-outline" | "trophy" | "trophy-outline" | "videocam" | "volume-off" | "wallet-outline" | "watch" | "wifi", "OxyServicesIonicons">;
3
3
  export default Ionicons;
4
4
  //# sourceMappingURL=Ionicons.d.ts.map
@@ -1,4 +1,4 @@
1
1
  /** Glyphs are decorative: hidden from assistive technology (see `decorativeIconSet`). */
2
- declare const MaterialCommunityIcons: import("@expo/vector-icons/build/createIconSet").Icon<"function" | "android" | "web" | "devices" | "at" | "security" | "account" | "message" | "email" | "bio" | "phone" | "network" | "logout" | "label" | "history" | "wallet" | "link" | "text" | "translate" | "scale" | "solid" | "wrap" | "key" | "image" | "alert" | "radio" | "switch" | "grid" | "numeric" | "loading" | "decimal" | "contacts" | "ellipse" | "alert-circle" | "alert-circle-outline" | "apps" | "archive" | "arrow-down" | "arrow-up" | "briefcase-outline" | "bug" | "calendar" | "calendar-outline" | "camera" | "camera-outline" | "card" | "card-outline" | "cart-outline" | "chevron-down" | "chevron-up" | "close" | "close-circle" | "cloud-outline" | "cloud-upload" | "cloud-upload-outline" | "cog" | "cog-outline" | "cube-outline" | "download" | "download-outline" | "earth" | "ellipse-outline" | "eye" | "eye-off-outline" | "filter-outline" | "flash" | "folder" | "folder-open-outline" | "folder-outline" | "gift" | "gift-outline" | "heart" | "heart-outline" | "help-circle" | "help-circle-outline" | "image-outline" | "information" | "information-outline" | "leaf" | "library" | "mail" | "pencil-outline" | "play" | "pulse" | "receipt-outline" | "resize" | "rocket" | "school-outline" | "server" | "share-outline" | "shield" | "star" | "sync" | "trophy" | "trophy-outline" | "volume-off" | "wallet-outline" | "watch" | "wifi" | "delete" | "forward" | "account-circle" | "account-cog-outline" | "account-eye-outline" | "account-group" | "account-multiple" | "account-outline" | "account-plus" | "account-search" | "account-switch" | "archive-arrow-down" | "arrow-left" | "bell" | "bell-outline" | "bullhorn" | "cake-variant" | "cake-variant-outline" | "cancel" | "cellphone" | "cellphone-basic" | "cellphone-message" | "cellphone-screenshot" | "chart-line" | "check-all" | "check-circle" | "chip" | "circle-outline" | "clock" | "clock-outline" | "code-tags" | "contain" | "content-copy" | "controller" | "cookie" | "credit-card" | "database-outline" | "delete-outline" | "dots-horizontal" | "email-outline" | "file" | "file-document" | "file-document-edit-outline" | "file-document-outline" | "file-excel-outline" | "file-outline" | "file-pdf-box" | "folder-image" | "folder-zip-outline" | "ghost" | "image-multiple-outline" | "inbox" | "link-variant" | "lock-outline" | "magnify" | "map-marker" | "map-marker-multiple" | "map-marker-outline" | "message-outline" | "minus-circle" | "motion" | "music-note-outline" | "null" | "open-in-app" | "openid" | "palette" | "palette-outline" | "pan" | "phone-outline" | "plus" | "plus-circle" | "post" | "presentation" | "react" | "read" | "shield-account-outline" | "shield-check" | "shield-search" | "signature" | "sort-alphabetical-variant" | "sort-numeric-variant" | "store" | "tag" | "tag-outline" | "text-box-outline" | "theme-light-dark" | "transfer" | "trash-can-outline" | "tray-arrow-down" | "update" | "upload" | "video-outline" | "wifi-off" | "wrench" | "xml", "OxyServicesMaterialCommunityIcons">;
2
+ declare const MaterialCommunityIcons: import("@expo/vector-icons/build/createIconSet").Icon<"function" | "android" | "web" | "devices" | "at" | "security" | "account" | "message" | "email" | "bio" | "phone" | "key" | "network" | "logout" | "label" | "history" | "wallet" | "link" | "text" | "translate" | "scale" | "solid" | "wrap" | "image" | "alert" | "radio" | "switch" | "grid" | "numeric" | "loading" | "decimal" | "contacts" | "ellipse" | "alert-circle" | "alert-circle-outline" | "apps" | "archive" | "arrow-down" | "arrow-up" | "briefcase-outline" | "bug" | "calendar" | "calendar-outline" | "camera" | "camera-outline" | "card" | "card-outline" | "cart-outline" | "chevron-down" | "chevron-up" | "close" | "close-circle" | "cloud-outline" | "cloud-upload" | "cloud-upload-outline" | "cog" | "cog-outline" | "cube-outline" | "download" | "download-outline" | "earth" | "ellipse-outline" | "eye" | "eye-off-outline" | "filter-outline" | "flash" | "folder" | "folder-open-outline" | "folder-outline" | "gift" | "gift-outline" | "heart" | "heart-outline" | "help-circle" | "help-circle-outline" | "image-outline" | "information" | "information-outline" | "leaf" | "library" | "mail" | "pencil-outline" | "play" | "pulse" | "receipt-outline" | "resize" | "rocket" | "school-outline" | "server" | "share-outline" | "shield" | "star" | "sync" | "trophy" | "trophy-outline" | "volume-off" | "wallet-outline" | "watch" | "wifi" | "delete" | "forward" | "account-circle" | "account-cog-outline" | "account-eye-outline" | "account-group" | "account-multiple" | "account-outline" | "account-plus" | "account-search" | "account-switch" | "archive-arrow-down" | "arrow-left" | "bell" | "bell-outline" | "bullhorn" | "cake-variant" | "cake-variant-outline" | "cancel" | "cellphone" | "cellphone-basic" | "cellphone-message" | "cellphone-screenshot" | "chart-line" | "check-all" | "check-circle" | "chip" | "circle-outline" | "clock" | "clock-outline" | "code-tags" | "contain" | "content-copy" | "controller" | "cookie" | "credit-card" | "database-outline" | "delete-outline" | "dots-horizontal" | "email-outline" | "file" | "file-document" | "file-document-edit-outline" | "file-document-outline" | "file-excel-outline" | "file-outline" | "file-pdf-box" | "folder-image" | "folder-zip-outline" | "ghost" | "image-multiple-outline" | "inbox" | "link-variant" | "lock-outline" | "magnify" | "map-marker" | "map-marker-multiple" | "map-marker-outline" | "message-outline" | "minus-circle" | "motion" | "music-note-outline" | "null" | "open-in-app" | "openid" | "palette" | "palette-outline" | "pan" | "phone-outline" | "plus" | "plus-circle" | "post" | "presentation" | "react" | "read" | "shield-account-outline" | "shield-check" | "shield-search" | "signature" | "sort-alphabetical-variant" | "sort-numeric-variant" | "store" | "tag" | "tag-outline" | "text-box-outline" | "theme-light-dark" | "transfer" | "trash-can-outline" | "tray-arrow-down" | "update" | "upload" | "video-outline" | "wifi-off" | "wrench" | "xml", "OxyServicesMaterialCommunityIcons">;
3
3
  export default MaterialCommunityIcons;
4
4
  //# sourceMappingURL=MaterialCommunityIcons.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nativeAuthTransport.d.ts","sourceRoot":"","sources":["../../../../../src/ui/oauth/nativeAuthTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC5C,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,MAAM,uBAAuB,GAC/B;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,sBAAsB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;CAC7F,GACD;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EACF,sBAAsB,GACtB,0BAA0B,GAC1B,yBAAyB,GACzB,gBAAgB,GAChB,iBAAiB,GACjB,qBAAqB,CAAC;CAC3B,CAAC;AACN,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAkBD,qFAAqF;AACrF,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CA8DlC"}
1
+ {"version":3,"file":"nativeAuthTransport.d.ts","sourceRoot":"","sources":["../../../../../src/ui/oauth/nativeAuthTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC5C,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,MAAM,uBAAuB,GAC/B;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,sBAAsB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;CAC7F,GACD;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EACF,sBAAsB,GACtB,0BAA0B,GAC1B,yBAAyB,GACzB,gBAAgB,GAChB,iBAAiB,GACjB,qBAAqB,CAAC;CAC3B,CAAC;AACN,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAkBD,qFAAqF;AACrF,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CAkElC"}
@@ -0,0 +1,6 @@
1
+ export interface ImageSize {
2
+ width: number;
3
+ height: number;
4
+ }
5
+ export declare function getImageSize(uri: string): Promise<ImageSize>;
6
+ //# sourceMappingURL=imageSize.macos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageSize.macos.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/imageSize.macos.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAI5D"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The image every SDK surface draws with: expo-image's `Image` (Glide on
3
+ * Android, SDWebImage on iOS, an `<img>` on web), never react-native's
4
+ * (`__tests__/packaging/rnImageBoundary.test.ts`).
5
+ *
6
+ * Its one fork, `ExpoImage.macos.tsx`, exists because expo-image has no macOS
7
+ * implementation: its module calls `requireNativeModule('ExpoImage')` when it
8
+ * is first imported, so on react-native-macos merely importing this file's
9
+ * target would throw and take the whole SDK down with it.
10
+ */
11
+ export { Image as ExpoImage } from 'expo-image';
12
+ //# sourceMappingURL=ExpoImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoImage.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ExpoImage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * react-native-macos fork of `ExpoImage.tsx`. expo-image ships no macOS
3
+ * podspec, and importing it throws there (`requireNativeModule('ExpoImage')`
4
+ * runs at import), so on macOS the SDK draws with react-native's `Image`,
5
+ * which react-native-macos backs with NSImage. Fresco, the reason the other
6
+ * platforms avoid react-native's `Image`, is Android-only.
7
+ *
8
+ * It accepts expo-image's props, so every call site typechecks once against the
9
+ * default fork, and maps the ones the SDK uses; the rest (transition, cache
10
+ * policy, placeholders) have no macOS equivalent here and are dropped.
11
+ */
12
+ import type { ImageProps } from 'expo-image';
13
+ export declare function ExpoImage({ source, contentFit, onError, style, blurRadius, accessible, accessibilityLabel, testID, className, }: ImageProps & {
14
+ className?: string;
15
+ }): import("react").JSX.Element;
16
+ //# sourceMappingURL=ExpoImage.macos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoImage.macos.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ExpoImage.macos.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAmB,UAAU,EAAe,MAAM,YAAY,CAAC;AAuB3E,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,UAAoB,EACpB,OAAO,EACP,KAAK,EACL,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,MAAM,EACN,SAAS,GACV,EAAE,UAAU,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAcrC"}
@@ -0,0 +1,10 @@
1
+ import type { FC, ReactNode } from 'react';
2
+ /**
3
+ * react-native-macos fork: react-native-keyboard-controller has no macOS
4
+ * implementation and throws when imported without its native module, and a
5
+ * desktop keyboard never covers the window, so there is nothing to track.
6
+ */
7
+ export declare const KeyboardBoundary: FC<{
8
+ children: ReactNode;
9
+ }>;
10
+ //# sourceMappingURL=KeyboardBoundary.macos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyboardBoundary.macos.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/KeyboardBoundary.macos.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAqC,CAAC"}
@@ -1,4 +1,4 @@
1
1
  /** Glyphs are decorative: hidden from assistive technology (see `decorativeIconSet`). */
2
- declare const Ionicons: import("@expo/vector-icons/build/createIconSet").Icon<"push" | "at" | "code" | "business" | "navigate" | "open" | "add" | "search" | "list" | "settings" | "infinite" | "trash" | "wallet" | "link" | "text" | "scale" | "key" | "image" | "alert" | "radio" | "grid" | "warning" | "people" | "ellipse" | "add-circle-outline" | "alert-circle" | "alert-circle-outline" | "apps" | "archive" | "arrow-back" | "arrow-down" | "arrow-forward" | "arrow-undo" | "arrow-up" | "briefcase-outline" | "bug" | "bulb" | "business-outline" | "calendar" | "calendar-outline" | "camera" | "camera-outline" | "card" | "card-outline" | "cart-outline" | "cash-outline" | "chatbubble" | "checkmark" | "checkmark-circle" | "chevron-back" | "chevron-down" | "chevron-forward" | "chevron-up" | "close" | "close-circle" | "cloud-offline-outline" | "cloud-outline" | "cloud-upload" | "cloud-upload-outline" | "cog" | "cog-outline" | "construct-outline" | "copy-outline" | "cube-outline" | "desktop" | "document" | "document-outline" | "document-text" | "documents" | "download" | "download-outline" | "earth" | "ellipse-outline" | "ellipsis-horizontal" | "eye" | "eye-off-outline" | "filter-outline" | "flame" | "flash" | "folder" | "folder-open-outline" | "folder-outline" | "footsteps" | "gift" | "gift-outline" | "hand-left" | "hardware-chip-outline" | "heart" | "heart-outline" | "help-circle" | "help-circle-outline" | "hourglass-outline" | "image-outline" | "images" | "images-outline" | "information" | "information-circle" | "information-outline" | "leaf" | "library" | "link-outline" | "location" | "location-outline" | "lock-closed" | "log-out-outline" | "mail" | "musical-notes" | "pencil-outline" | "people-outline" | "play" | "pricetag-outline" | "pulse" | "qr-code-outline" | "receipt-outline" | "refresh-outline" | "remove" | "repeat-outline" | "resize" | "rocket" | "school-outline" | "search-outline" | "server" | "share-outline" | "shield" | "shield-checkmark" | "shield-checkmark-outline" | "star" | "swap-horizontal-outline" | "swap-vertical-outline" | "sync" | "time-outline" | "trash-outline" | "trophy" | "trophy-outline" | "videocam" | "volume-off" | "wallet-outline" | "watch" | "wifi", "OxyServicesIonicons">;
2
+ declare const Ionicons: import("@expo/vector-icons/build/createIconSet").Icon<"push" | "at" | "code" | "business" | "navigate" | "key" | "open" | "add" | "search" | "list" | "settings" | "infinite" | "trash" | "wallet" | "link" | "text" | "scale" | "image" | "alert" | "radio" | "grid" | "warning" | "people" | "ellipse" | "add-circle-outline" | "alert-circle" | "alert-circle-outline" | "apps" | "archive" | "arrow-back" | "arrow-down" | "arrow-forward" | "arrow-undo" | "arrow-up" | "briefcase-outline" | "bug" | "bulb" | "business-outline" | "calendar" | "calendar-outline" | "camera" | "camera-outline" | "card" | "card-outline" | "cart-outline" | "cash-outline" | "chatbubble" | "checkmark" | "checkmark-circle" | "chevron-back" | "chevron-down" | "chevron-forward" | "chevron-up" | "close" | "close-circle" | "cloud-offline-outline" | "cloud-outline" | "cloud-upload" | "cloud-upload-outline" | "cog" | "cog-outline" | "construct-outline" | "copy-outline" | "cube-outline" | "desktop" | "document" | "document-outline" | "document-text" | "documents" | "download" | "download-outline" | "earth" | "ellipse-outline" | "ellipsis-horizontal" | "eye" | "eye-off-outline" | "filter-outline" | "flame" | "flash" | "folder" | "folder-open-outline" | "folder-outline" | "footsteps" | "gift" | "gift-outline" | "hand-left" | "hardware-chip-outline" | "heart" | "heart-outline" | "help-circle" | "help-circle-outline" | "hourglass-outline" | "image-outline" | "images" | "images-outline" | "information" | "information-circle" | "information-outline" | "leaf" | "library" | "link-outline" | "location" | "location-outline" | "lock-closed" | "log-out-outline" | "mail" | "musical-notes" | "pencil-outline" | "people-outline" | "play" | "pricetag-outline" | "pulse" | "qr-code-outline" | "receipt-outline" | "refresh-outline" | "remove" | "repeat-outline" | "resize" | "rocket" | "school-outline" | "search-outline" | "server" | "share-outline" | "shield" | "shield-checkmark" | "shield-checkmark-outline" | "star" | "swap-horizontal-outline" | "swap-vertical-outline" | "sync" | "time-outline" | "trash-outline" | "trophy" | "trophy-outline" | "videocam" | "volume-off" | "wallet-outline" | "watch" | "wifi", "OxyServicesIonicons">;
3
3
  export default Ionicons;
4
4
  //# sourceMappingURL=Ionicons.d.ts.map
@@ -1,4 +1,4 @@
1
1
  /** Glyphs are decorative: hidden from assistive technology (see `decorativeIconSet`). */
2
- declare const MaterialCommunityIcons: import("@expo/vector-icons/build/createIconSet").Icon<"function" | "android" | "web" | "devices" | "at" | "security" | "account" | "message" | "email" | "bio" | "phone" | "network" | "logout" | "label" | "history" | "wallet" | "link" | "text" | "translate" | "scale" | "solid" | "wrap" | "key" | "image" | "alert" | "radio" | "switch" | "grid" | "numeric" | "loading" | "decimal" | "contacts" | "ellipse" | "alert-circle" | "alert-circle-outline" | "apps" | "archive" | "arrow-down" | "arrow-up" | "briefcase-outline" | "bug" | "calendar" | "calendar-outline" | "camera" | "camera-outline" | "card" | "card-outline" | "cart-outline" | "chevron-down" | "chevron-up" | "close" | "close-circle" | "cloud-outline" | "cloud-upload" | "cloud-upload-outline" | "cog" | "cog-outline" | "cube-outline" | "download" | "download-outline" | "earth" | "ellipse-outline" | "eye" | "eye-off-outline" | "filter-outline" | "flash" | "folder" | "folder-open-outline" | "folder-outline" | "gift" | "gift-outline" | "heart" | "heart-outline" | "help-circle" | "help-circle-outline" | "image-outline" | "information" | "information-outline" | "leaf" | "library" | "mail" | "pencil-outline" | "play" | "pulse" | "receipt-outline" | "resize" | "rocket" | "school-outline" | "server" | "share-outline" | "shield" | "star" | "sync" | "trophy" | "trophy-outline" | "volume-off" | "wallet-outline" | "watch" | "wifi" | "delete" | "forward" | "account-circle" | "account-cog-outline" | "account-eye-outline" | "account-group" | "account-multiple" | "account-outline" | "account-plus" | "account-search" | "account-switch" | "archive-arrow-down" | "arrow-left" | "bell" | "bell-outline" | "bullhorn" | "cake-variant" | "cake-variant-outline" | "cancel" | "cellphone" | "cellphone-basic" | "cellphone-message" | "cellphone-screenshot" | "chart-line" | "check-all" | "check-circle" | "chip" | "circle-outline" | "clock" | "clock-outline" | "code-tags" | "contain" | "content-copy" | "controller" | "cookie" | "credit-card" | "database-outline" | "delete-outline" | "dots-horizontal" | "email-outline" | "file" | "file-document" | "file-document-edit-outline" | "file-document-outline" | "file-excel-outline" | "file-outline" | "file-pdf-box" | "folder-image" | "folder-zip-outline" | "ghost" | "image-multiple-outline" | "inbox" | "link-variant" | "lock-outline" | "magnify" | "map-marker" | "map-marker-multiple" | "map-marker-outline" | "message-outline" | "minus-circle" | "motion" | "music-note-outline" | "null" | "open-in-app" | "openid" | "palette" | "palette-outline" | "pan" | "phone-outline" | "plus" | "plus-circle" | "post" | "presentation" | "react" | "read" | "shield-account-outline" | "shield-check" | "shield-search" | "signature" | "sort-alphabetical-variant" | "sort-numeric-variant" | "store" | "tag" | "tag-outline" | "text-box-outline" | "theme-light-dark" | "transfer" | "trash-can-outline" | "tray-arrow-down" | "update" | "upload" | "video-outline" | "wifi-off" | "wrench" | "xml", "OxyServicesMaterialCommunityIcons">;
2
+ declare const MaterialCommunityIcons: import("@expo/vector-icons/build/createIconSet").Icon<"function" | "android" | "web" | "devices" | "at" | "security" | "account" | "message" | "email" | "bio" | "phone" | "key" | "network" | "logout" | "label" | "history" | "wallet" | "link" | "text" | "translate" | "scale" | "solid" | "wrap" | "image" | "alert" | "radio" | "switch" | "grid" | "numeric" | "loading" | "decimal" | "contacts" | "ellipse" | "alert-circle" | "alert-circle-outline" | "apps" | "archive" | "arrow-down" | "arrow-up" | "briefcase-outline" | "bug" | "calendar" | "calendar-outline" | "camera" | "camera-outline" | "card" | "card-outline" | "cart-outline" | "chevron-down" | "chevron-up" | "close" | "close-circle" | "cloud-outline" | "cloud-upload" | "cloud-upload-outline" | "cog" | "cog-outline" | "cube-outline" | "download" | "download-outline" | "earth" | "ellipse-outline" | "eye" | "eye-off-outline" | "filter-outline" | "flash" | "folder" | "folder-open-outline" | "folder-outline" | "gift" | "gift-outline" | "heart" | "heart-outline" | "help-circle" | "help-circle-outline" | "image-outline" | "information" | "information-outline" | "leaf" | "library" | "mail" | "pencil-outline" | "play" | "pulse" | "receipt-outline" | "resize" | "rocket" | "school-outline" | "server" | "share-outline" | "shield" | "star" | "sync" | "trophy" | "trophy-outline" | "volume-off" | "wallet-outline" | "watch" | "wifi" | "delete" | "forward" | "account-circle" | "account-cog-outline" | "account-eye-outline" | "account-group" | "account-multiple" | "account-outline" | "account-plus" | "account-search" | "account-switch" | "archive-arrow-down" | "arrow-left" | "bell" | "bell-outline" | "bullhorn" | "cake-variant" | "cake-variant-outline" | "cancel" | "cellphone" | "cellphone-basic" | "cellphone-message" | "cellphone-screenshot" | "chart-line" | "check-all" | "check-circle" | "chip" | "circle-outline" | "clock" | "clock-outline" | "code-tags" | "contain" | "content-copy" | "controller" | "cookie" | "credit-card" | "database-outline" | "delete-outline" | "dots-horizontal" | "email-outline" | "file" | "file-document" | "file-document-edit-outline" | "file-document-outline" | "file-excel-outline" | "file-outline" | "file-pdf-box" | "folder-image" | "folder-zip-outline" | "ghost" | "image-multiple-outline" | "inbox" | "link-variant" | "lock-outline" | "magnify" | "map-marker" | "map-marker-multiple" | "map-marker-outline" | "message-outline" | "minus-circle" | "motion" | "music-note-outline" | "null" | "open-in-app" | "openid" | "palette" | "palette-outline" | "pan" | "phone-outline" | "plus" | "plus-circle" | "post" | "presentation" | "react" | "read" | "shield-account-outline" | "shield-check" | "shield-search" | "signature" | "sort-alphabetical-variant" | "sort-numeric-variant" | "store" | "tag" | "tag-outline" | "text-box-outline" | "theme-light-dark" | "transfer" | "trash-can-outline" | "tray-arrow-down" | "update" | "upload" | "video-outline" | "wifi-off" | "wrench" | "xml", "OxyServicesMaterialCommunityIcons">;
3
3
  export default MaterialCommunityIcons;
4
4
  //# sourceMappingURL=MaterialCommunityIcons.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nativeAuthTransport.d.ts","sourceRoot":"","sources":["../../../../../src/ui/oauth/nativeAuthTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAS,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC5C,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,MAAM,uBAAuB,GAC/B;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,sBAAsB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;CAC7F,GACD;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EACF,sBAAsB,GACtB,0BAA0B,GAC1B,yBAAyB,GACzB,gBAAgB,GAChB,iBAAiB,GACjB,qBAAqB,CAAC;CAC3B,CAAC;AACN,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAkBD,qFAAqF;AACrF,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CA8DlC"}
1
+ {"version":3,"file":"nativeAuthTransport.d.ts","sourceRoot":"","sources":["../../../../../src/ui/oauth/nativeAuthTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAS,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC5C,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,MAAM,uBAAuB,GAC/B;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,sBAAsB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;CAC7F,GACD;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EACF,sBAAsB,GACtB,0BAA0B,GAC1B,yBAAyB,GACzB,gBAAgB,GAChB,iBAAiB,GACjB,qBAAqB,CAAC;CAC3B,CAAC;AACN,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAkBD,qFAAqF;AACrF,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CAkElC"}
@@ -0,0 +1,6 @@
1
+ export interface ImageSize {
2
+ width: number;
3
+ height: number;
4
+ }
5
+ export declare function getImageSize(uri: string): Promise<ImageSize>;
6
+ //# sourceMappingURL=imageSize.macos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageSize.macos.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/imageSize.macos.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAI5D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxy.so/services",
3
- "version": "13.0.0",
3
+ "version": "13.1.0",
4
4
  "description": "OxyHQ Expo/React Native SDK — UI components, screens, and native features",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -140,6 +140,7 @@
140
140
  "verify:package": "node scripts/verify-package.mjs",
141
141
  "generate:icon-fonts": "node scripts/generate-icon-font-subsets.mjs",
142
142
  "check:icon-fonts": "node scripts/check-icon-font-subsets.mjs",
143
+ "check:compat-expo-54": "bun compat/expo-54/check.mjs",
143
144
  "build:js": "bun x react-native-builder-bob build --target commonjs && bun x react-native-builder-bob build --target module && bun run copy-assets",
144
145
  "test": "jest --passWithNoTests",
145
146
  "test:watch": "jest --watch",
@@ -159,11 +160,10 @@
159
160
  "@commitlint/config-conventional": "^21.2.0",
160
161
  "@expo/app-integrity": "~58.0.2",
161
162
  "@expo/vector-icons": "^15.0.3",
162
- "@oxy.so/core": "7.0.0",
163
+ "@oxy.so/core": "7.1.0",
163
164
  "@react-native-async-storage/async-storage": "^2.0.0",
164
165
  "@react-native-community/netinfo": "^12.0.1",
165
166
  "@react-native/babel-preset": "^0.88.0",
166
- "@release-it/conventional-changelog": "^12.0.2",
167
167
  "@tanstack/query-async-storage-persister": "^5.101",
168
168
  "@tanstack/query-sync-storage-persister": "^5.101",
169
169
  "@tanstack/react-query": "^5.101",
@@ -176,26 +176,26 @@
176
176
  "@types/react": "*",
177
177
  "@oxy.so/bloom": "15.18.0",
178
178
  "copyfiles": "^2.4.1",
179
- "expo-clipboard": "~58.0.3",
180
- "expo-constants": "~58.0.12",
181
- "expo-file-system": "~58.0.9",
179
+ "expo-clipboard": "~58.0.4",
180
+ "expo-constants": "~58.0.13",
181
+ "expo-file-system": "~58.0.11",
182
182
  "expo-haptics": "~58.0.7",
183
- "expo-image": "~58.0.15",
184
- "expo-image-manipulator": "~58.0.14",
183
+ "expo-image": "~58.0.17",
184
+ "expo-image-manipulator": "~58.0.15",
185
185
  "expo-linear-gradient": "~58.0.3",
186
- "expo-notifications": "~58.1.5",
187
- "expo-modules-core": "~58.0.22",
186
+ "expo-notifications": "~58.1.6",
187
+ "expo-modules-core": "~58.0.26",
188
188
  "expo-secure-store": "~58.0.2",
189
189
  "expo-web-browser": "~58.0.6",
190
190
  "husky": "^4.3.8",
191
191
  "jest": "^30.5.1",
192
192
  "lint-staged": "^15.2.4",
193
- "nativewind": "5.0.0-preview.3",
193
+ "nativewind": "5.0.0-rc.0",
194
194
  "react": "19.3.0",
195
195
  "react-dom": "19.3.0",
196
196
  "react-native": "0.88.0",
197
197
  "react-native-builder-bob": "^0.43.0",
198
- "react-native-css": "^3.0.6",
198
+ "react-native-css": "3.1.0-rc.0",
199
199
  "react-native-gesture-handler": "~3.3.0",
200
200
  "react-native-keyboard-controller": "1.22.7",
201
201
  "react-native-qrcode-svg": "^6.3.0",
@@ -206,12 +206,13 @@
206
206
  "ts-jest": "^29.4.12",
207
207
  "typescript": "^5.9.2",
208
208
  "zustand": "^5.0.14",
209
- "expo-video": "~58.0.11"
209
+ "expo-video": "~58.0.12"
210
210
  },
211
211
  "//@oxy.so/bloom": "Bloom 11.1.0 adds the shared grouped sections, usage card, subscription plans, frame appearance and overlay navigation APIs used by this SDK. First-party Bloom peers remain open above this tested minimum.",
212
212
  "//@oxy.so/core": "Core 6.16.0 supplies `requireServerVerdict` and `onHolderRejected`, with which the cold boot checks a session it painted from the cache; 6.13.0 supplies the `accounts.settings.*` strings (picture, categories) the account settings speak in every language; 6.12.0 supplies `fileManagement.contentLost` and the `lost` file status a lost file is listed with; 6.11.0 supplies the `follow.errors.*` strings the follow error codes are worded with; 6.4.0 the `follow.*` strings the follow buttons read for every verb and language; 6.1.0 the `oxy.auth.email.{startChange,change,remove}` and `oxy.auth.password.remove` the sign-in & security panels call. Keep one Core instance per app; raise this floor with the root catalogue when new runtime APIs are required.",
213
+ "//react-native": "React Native 0.81 to 0.88, React 19.1+ and Expo SDK 54 to 58. The floors are the Expo SDK 54 stack (react-native 0.81.6, react 19.1.4, react-native-web 0.21.4, expo 54.0.38 and the module versions its bundledNativeModules.json pins), which compat/expo-54 installs as an external consumer and checks on every CI run (`bun check.mjs`): every peer here admits that stack, services' published src typechecks against its types, and <OxyProvider> mounts and settles its cold boot on iOS (React Native 0.81), web (react-native-web 0.21) and react-native-macos 0.81 with the native modules macOS lacks absent. Astro, Oxy's browser, runs react-native-macos 0.81 (0.83 is its latest release), which is why the floor is not 0.85. The SDK 56 floors these replaced were the versions current when the ranges were first written, not measurements.",
213
214
  "peerDependencies": {
214
- "@expo/app-integrity": ">=56.0.0 <59.0.0",
215
+ "@expo/app-integrity": ">=0.1.10 <59.0.0",
215
216
  "@expo/vector-icons": "^15.0.3",
216
217
  "@oxy.so/bloom": ">=11.1.0",
217
218
  "@oxy.so/core": "^7.0.0",
@@ -223,31 +224,31 @@
223
224
  "@tanstack/react-query-persist-client": "^5.101",
224
225
  "@types/react": "<20.0.0",
225
226
  "@types/react-native": "<1.0.0",
226
- "expo": ">=56.0.0 <59.0.0",
227
- "expo-clipboard": ">=56.0.0 <59.0.0",
228
- "expo-constants": ">=56.0.0 <59.0.0",
229
- "expo-document-picker": ">=56.0.0 <59.0.0",
230
- "expo-file-system": ">=56.0.0 <59.0.0",
231
- "expo-haptics": ">=56.0.0 <59.0.0",
227
+ "expo": ">=54.0.0 <59.0.0",
228
+ "expo-clipboard": ">=8.0.0 <59.0.0",
229
+ "expo-constants": ">=18.0.0 <59.0.0",
230
+ "expo-document-picker": ">=14.0.0 <59.0.0",
231
+ "expo-file-system": ">=19.0.0 <59.0.0",
232
+ "expo-haptics": ">=15.0.0 <59.0.0",
232
233
  "expo-image": ">=2.0.0 <59.0.0",
233
- "expo-image-manipulator": ">=56.0.0 <59.0.0",
234
- "expo-image-picker": ">=56.0.0 <59.0.0",
235
- "expo-linear-gradient": ">=56.0.0 <59.0.0",
234
+ "expo-image-manipulator": ">=14.0.0 <59.0.0",
235
+ "expo-image-picker": ">=17.0.0 <59.0.0",
236
+ "expo-linear-gradient": ">=15.0.0 <59.0.0",
236
237
  "expo-modules-core": "<59.0.0",
237
- "expo-notifications": ">=56.0.0 <59.0.0",
238
- "expo-web-browser": ">=56.0.0 <59.0.0",
238
+ "expo-notifications": ">=0.32.0 <59.0.0",
239
+ "expo-web-browser": ">=15.0.0 <59.0.0",
239
240
  "nativewind": ">=5.0.0-preview.3 <6.0.0",
240
241
  "react-native-css": "^3.0.6 || 3.1.0-rc.0",
241
242
  "react": ">=18.0.0 <20.0.0",
242
- "react-native": ">=0.85.0 <0.89.0",
243
- "react-native-gesture-handler": ">=2.31.1 <4.0.0",
244
- "react-native-keyboard-controller": ">=1.21.0 <2.0.0",
243
+ "react-native": ">=0.81.0 <0.89.0",
244
+ "react-native-gesture-handler": ">=2.28.0 <4.0.0",
245
+ "react-native-keyboard-controller": ">=1.18.5 <2.0.0",
245
246
  "react-native-qrcode-svg": "^6.3.0",
246
- "react-native-reanimated": ">=4.3.0 <5.0.0",
247
- "react-native-safe-area-context": ">=5.7.0 <6.0.0",
248
- "react-native-svg": ">=15.15.0 <16.0.0",
247
+ "react-native-reanimated": ">=4.1.0 <5.0.0",
248
+ "react-native-safe-area-context": ">=5.6.0 <6.0.0",
249
+ "react-native-svg": ">=15.12.1 <16.0.0",
249
250
  "zustand": "^5.0.0",
250
- "expo-video": ">=57.0.0 <59.0.0"
251
+ "expo-video": ">=3.0.0 <59.0.0"
251
252
  },
252
253
  "peerDependenciesMeta": {
253
254
  "nativewind": {
@@ -0,0 +1,59 @@
1
+ /**
2
+ * react-native-macos fork of `ExpoImage.tsx`. expo-image ships no macOS
3
+ * podspec, and importing it throws there (`requireNativeModule('ExpoImage')`
4
+ * runs at import), so on macOS the SDK draws with react-native's `Image`,
5
+ * which react-native-macos backs with NSImage. Fresco, the reason the other
6
+ * platforms avoid react-native's `Image`, is Android-only.
7
+ *
8
+ * It accepts expo-image's props, so every call site typechecks once against the
9
+ * default fork, and maps the ones the SDK uses; the rest (transition, cache
10
+ * policy, placeholders) have no macOS equivalent here and are dropped.
11
+ */
12
+ import type { ImageContentFit, ImageProps, ImageSource } from 'expo-image';
13
+ import { Image, type ImageResizeMode, type ImageSourcePropType } from 'react-native';
14
+
15
+ const RESIZE_MODE: Record<ImageContentFit, ImageResizeMode> = {
16
+ cover: 'cover',
17
+ contain: 'contain',
18
+ fill: 'stretch',
19
+ none: 'center',
20
+ 'scale-down': 'contain',
21
+ };
22
+
23
+ function toImageSource(source: ImageProps['source']): ImageSourcePropType | undefined {
24
+ if (source == null) return undefined;
25
+ if (typeof source === 'number') return source;
26
+ if (typeof source === 'string') return { uri: source };
27
+ if (Array.isArray(source)) return source.length > 0 ? toImageSource(source[0]) : undefined;
28
+ if (typeof source === 'object' && 'uri' in source) {
29
+ const { uri, headers, width, height } = source as ImageSource;
30
+ return { uri, headers, width: width ?? undefined, height: height ?? undefined };
31
+ }
32
+ return undefined;
33
+ }
34
+
35
+ export function ExpoImage({
36
+ source,
37
+ contentFit = 'cover',
38
+ onError,
39
+ style,
40
+ blurRadius,
41
+ accessible,
42
+ accessibilityLabel,
43
+ testID,
44
+ className,
45
+ }: ImageProps & { className?: string }) {
46
+ return (
47
+ <Image
48
+ source={toImageSource(source) ?? { uri: '' }}
49
+ resizeMode={RESIZE_MODE[contentFit]}
50
+ onError={onError ? () => onError({ error: 'The image could not be loaded' }) : undefined}
51
+ style={style}
52
+ blurRadius={blurRadius}
53
+ accessible={accessible}
54
+ accessibilityLabel={accessibilityLabel}
55
+ testID={testID}
56
+ {...(className ? { className } : null)}
57
+ />
58
+ );
59
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The image every SDK surface draws with: expo-image's `Image` (Glide on
3
+ * Android, SDWebImage on iOS, an `<img>` on web), never react-native's
4
+ * (`__tests__/packaging/rnImageBoundary.test.ts`).
5
+ *
6
+ * Its one fork, `ExpoImage.macos.tsx`, exists because expo-image has no macOS
7
+ * implementation: its module calls `requireNativeModule('ExpoImage')` when it
8
+ * is first imported, so on react-native-macos merely importing this file's
9
+ * target would throw and take the whole SDK down with it.
10
+ */
11
+ export { Image as ExpoImage } from 'expo-image';
@@ -0,0 +1,8 @@
1
+ import type { FC, ReactNode } from 'react';
2
+
3
+ /**
4
+ * react-native-macos fork: react-native-keyboard-controller has no macOS
5
+ * implementation and throws when imported without its native module, and a
6
+ * desktop keyboard never covers the window, so there is nothing to track.
7
+ */
8
+ export const KeyboardBoundary: FC<{ children: ReactNode }> = ({ children }) => <>{children}</>;
@@ -4,7 +4,7 @@ import { useMemo, useState, useEffect } from 'react';
4
4
  import { View, ScrollView, StyleSheet } from 'react-native';
5
5
  import { Button } from '@oxy.so/bloom/button';
6
6
  import { Text } from '@oxy.so/bloom/typography';
7
- import { Image as ExpoImage } from 'expo-image';
7
+ import { ExpoImage } from '../ExpoImage';
8
8
  import MaterialCommunityIcons from '../../icons/MaterialCommunityIcons';
9
9
  import { useTheme } from '@oxy.so/bloom/theme';
10
10
  import type { FileMetadata } from '@oxy.so/core';
@@ -3,7 +3,7 @@ import { View, ScrollView, StyleSheet } from 'react-native';
3
3
  import { Button } from '@oxy.so/bloom/button';
4
4
  import { Card } from '@oxy.so/bloom/card';
5
5
  import { Text } from '@oxy.so/bloom/typography';
6
- import { Image as ExpoImage } from 'expo-image';
6
+ import { ExpoImage } from '../ExpoImage';
7
7
  import Ionicons from '../../icons/Ionicons';
8
8
  import { Dialog, type DialogControlProps } from '@oxy.so/bloom/dialog';
9
9
  import { useTheme } from '@oxy.so/bloom/theme';
@@ -87,7 +87,11 @@ export async function startNativeOAuthSignIn(
87
87
  if (!redirectUrl.startsWith(prefix) || redirectUrl.includes('#'))
88
88
  return { status: 'failed', reason: 'native-callback-invalid' };
89
89
  const parameters = new URLSearchParams(redirectUrl.slice(prefix.length));
90
- if ([...new URL(options.redirectUri).searchParams.keys()].some((key) => parameters.has(key)))
90
+ if (
91
+ Array.from(new URL(options.redirectUri).searchParams, ([key]) => key).some((key) =>
92
+ parameters.has(key),
93
+ )
94
+ )
91
95
  return { status: 'failed', reason: 'native-callback-invalid' };
92
96
  if (
93
97
  ['code', 'state', 'error', 'error_description'].some(
@@ -46,7 +46,7 @@ import Animated, {
46
46
  withTiming,
47
47
  } from 'react-native-reanimated';
48
48
  import { useQuery, keepPreviousData } from '@tanstack/react-query';
49
- import { Image as ExpoImage } from 'expo-image';
49
+ import { ExpoImage } from '../components/ExpoImage';
50
50
  import { useTheme } from '@oxy.so/bloom/theme';
51
51
  import { logger } from '@oxy.so/core';
52
52
  import { useOxy } from '../context/oxyRuntimeContext';
@@ -1,6 +1,6 @@
1
1
  import React, { useState, useCallback, useMemo } from 'react';
2
2
  import { View, StyleSheet, type TextInputProps } from 'react-native';
3
- import { Image as ExpoImage } from 'expo-image';
3
+ import { ExpoImage } from '../components/ExpoImage';
4
4
  import Ionicons from '../icons/Ionicons';
5
5
  import type { BaseScreenProps } from '../types/navigation';
6
6
  import { useTheme } from '@oxy.so/bloom/theme';
@@ -8,7 +8,7 @@ import { type ComponentRef, useState, useCallback, useMemo, useRef } from 'react
8
8
  import { View, StyleSheet, ScrollView, RefreshControl, useWindowDimensions } from 'react-native';
9
9
  import { Text } from '@oxy.so/bloom/typography';
10
10
  import { useQueryClient } from '@tanstack/react-query';
11
- import { Image as ExpoImage } from 'expo-image';
11
+ import { ExpoImage } from '../components/ExpoImage';
12
12
  import type { FileManagementScreenProps } from '../types/fileManagement';
13
13
  import { toast } from '@oxy.so/bloom/toast';
14
14
  import { surfaces } from '@oxy.so/bloom/surfaces';
@@ -1,6 +1,6 @@
1
1
  import { useContext, useState } from 'react';
2
2
  import { Linking, View } from 'react-native';
3
- import { Image as ExpoImage } from 'expo-image';
3
+ import { ExpoImage } from '../components/ExpoImage';
4
4
  import { SubscriptionPlans } from '@oxy.so/bloom/subscription-plans';
5
5
  import {
6
6
  SegmentedControl,
@@ -12,7 +12,7 @@ import {
12
12
  type LayoutChangeEvent,
13
13
  } from 'react-native';
14
14
  import { Text } from '@oxy.so/bloom/typography';
15
- import { Image as ExpoImage } from 'expo-image';
15
+ import { ExpoImage } from '../../components/ExpoImage';
16
16
  import Ionicons from '../../icons/Ionicons';
17
17
  import MaterialCommunityIcons from '../../icons/MaterialCommunityIcons';
18
18
  import type { FileMetadata } from '@oxy.so/core';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * react-native-macos fork of `imageSize.ts`: expo-image has no macOS
3
+ * implementation (see `components/ExpoImage.macos.tsx`), so the size comes
4
+ * from react-native's `Image.getSize`, which react-native-macos answers through
5
+ * NSImage. Fresco, the reason the Android fork avoids it, is Android-only.
6
+ */
7
+ import { Image } from 'react-native';
8
+
9
+ export interface ImageSize {
10
+ width: number;
11
+ height: number;
12
+ }
13
+
14
+ export function getImageSize(uri: string): Promise<ImageSize> {
15
+ return new Promise<ImageSize>((resolve, reject) => {
16
+ Image.getSize(uri, (width, height) => resolve({ width, height }), reject);
17
+ });
18
+ }