@comergehq/studio 0.1.2 → 0.1.3

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 (172) hide show
  1. package/dist/index.js +255 -245
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.mjs +213 -203
  4. package/dist/index.mjs.map +1 -1
  5. package/package.json +8 -5
  6. package/src/components/chat/ChatComposer.tsx +277 -0
  7. package/src/components/chat/ChatHeader.tsx +31 -0
  8. package/src/components/chat/ChatMessageBubble.tsx +69 -0
  9. package/src/components/chat/ChatMessageList.tsx +137 -0
  10. package/src/components/chat/ChatPage.tsx +69 -0
  11. package/src/components/chat/ForkNoticeBanner.tsx +66 -0
  12. package/src/components/chat/MultilineTextInput.tsx +46 -0
  13. package/src/components/chat/ScrollToBottomButton.tsx +78 -0
  14. package/src/components/chat/TypingIndicator.tsx +54 -0
  15. package/src/components/chat/index.ts +28 -0
  16. package/src/components/comments/AppCommentsSheet.tsx +213 -0
  17. package/src/components/comments/CommentRow.tsx +63 -0
  18. package/src/components/comments/formatTimeAgo.ts +3 -0
  19. package/src/components/comments/index.ts +3 -0
  20. package/src/components/comments/useAppComments.ts +74 -0
  21. package/src/components/comments/useAppDetails.ts +35 -0
  22. package/src/components/comments/useIosKeyboardSnapFix.ts +24 -0
  23. package/src/components/dialogs/ConfirmMergeRequestDialog.tsx +156 -0
  24. package/src/components/dialogs/index.ts +4 -0
  25. package/src/components/draw/DrawColorPicker.tsx +77 -0
  26. package/src/components/draw/DrawModeOverlay.tsx +144 -0
  27. package/src/components/draw/DrawSurface.tsx +127 -0
  28. package/src/components/draw/DrawToolbar.tsx +253 -0
  29. package/src/components/draw/index.ts +15 -0
  30. package/src/components/draw/optionalHaptics.ts +15 -0
  31. package/src/components/draw/strokes.ts +21 -0
  32. package/src/components/draw/types.ts +9 -0
  33. package/src/components/floating-draggable-button/FloatingDraggableButton.tsx +323 -0
  34. package/src/components/floating-draggable-button/constants.ts +17 -0
  35. package/src/components/floating-draggable-button/index.ts +4 -0
  36. package/src/components/floating-draggable-button/types.ts +63 -0
  37. package/src/components/icons/MergeIcon.tsx +14 -0
  38. package/src/components/icons/StudioIcons.tsx +66 -0
  39. package/src/components/index.ts +17 -0
  40. package/src/components/merge-requests/MergeRequestStatusCard.tsx +179 -0
  41. package/src/components/merge-requests/ReviewMergeRequestActionButton.tsx +62 -0
  42. package/src/components/merge-requests/ReviewMergeRequestCard.tsx +192 -0
  43. package/src/components/merge-requests/ReviewMergeRequestCarousel.tsx +132 -0
  44. package/src/components/merge-requests/index.ts +7 -0
  45. package/src/components/merge-requests/mergeRequestStatusDisplay.ts +23 -0
  46. package/src/components/merge-requests/toIsoString.ts +9 -0
  47. package/src/components/merge-requests/useControlledExpansion.ts +16 -0
  48. package/src/components/models/index.ts +9 -0
  49. package/src/components/models/types.ts +43 -0
  50. package/src/components/overlays/EdgeGlowFrame.tsx +105 -0
  51. package/src/components/overlays/index.ts +4 -0
  52. package/src/components/preview/PreviewHeroCard.tsx +58 -0
  53. package/src/components/preview/PreviewImage.tsx +22 -0
  54. package/src/components/preview/PreviewMetaRow.tsx +70 -0
  55. package/src/components/preview/PreviewPage.tsx +36 -0
  56. package/src/components/preview/PreviewPlaceholder.tsx +72 -0
  57. package/src/components/preview/PreviewStatusBadge.tsx +63 -0
  58. package/src/components/preview/StatsBar.tsx +109 -0
  59. package/src/components/preview/index.ts +22 -0
  60. package/src/components/primitives/Avatar.tsx +68 -0
  61. package/src/components/primitives/Button.tsx +102 -0
  62. package/src/components/primitives/Card.tsx +30 -0
  63. package/src/components/primitives/Divider.tsx +17 -0
  64. package/src/components/primitives/Icon.tsx +40 -0
  65. package/src/components/primitives/MarkdownText.tsx +72 -0
  66. package/src/components/primitives/Modal.tsx +53 -0
  67. package/src/components/primitives/Surface.tsx +42 -0
  68. package/src/components/primitives/Text.tsx +83 -0
  69. package/src/components/primitives/index.ts +35 -0
  70. package/src/components/primitives/types.ts +30 -0
  71. package/src/components/studio-sheet/StudioBottomSheet.tsx +114 -0
  72. package/src/components/studio-sheet/StudioSheetBackground.tsx +63 -0
  73. package/src/components/studio-sheet/StudioSheetHeader.tsx +35 -0
  74. package/src/components/studio-sheet/StudioSheetHeaderIconButton.tsx +109 -0
  75. package/src/components/studio-sheet/StudioSheetPager.tsx +66 -0
  76. package/src/components/studio-sheet/index.ts +18 -0
  77. package/src/components/studio-sheet/types.ts +5 -0
  78. package/src/components/utils/color.ts +25 -0
  79. package/src/components/utils/formatTimeAgo.ts +19 -0
  80. package/src/core/logger.ts +42 -0
  81. package/src/core/services/http/baseUrl.ts +3 -0
  82. package/src/core/services/http/index.ts +128 -0
  83. package/src/core/services/http/public.ts +14 -0
  84. package/src/core/services/supabase/auth.ts +41 -0
  85. package/src/core/services/supabase/client.ts +43 -0
  86. package/src/core/services/supabase/index.ts +7 -0
  87. package/src/data/agent/remote.ts +30 -0
  88. package/src/data/agent/repository.ts +34 -0
  89. package/src/data/agent/types.ts +28 -0
  90. package/src/data/apps/bundles/remote.ts +47 -0
  91. package/src/data/apps/bundles/repository.ts +35 -0
  92. package/src/data/apps/bundles/types.ts +27 -0
  93. package/src/data/apps/images/remote.ts +61 -0
  94. package/src/data/apps/images/repository.ts +47 -0
  95. package/src/data/apps/remote.ts +97 -0
  96. package/src/data/apps/repository.ts +185 -0
  97. package/src/data/apps/types.ts +206 -0
  98. package/src/data/attachment/remote.ts +32 -0
  99. package/src/data/attachment/repository.ts +40 -0
  100. package/src/data/attachment/types.ts +42 -0
  101. package/src/data/base-remote.ts +3 -0
  102. package/src/data/base-repository.ts +11 -0
  103. package/src/data/comments/likes/remote.ts +87 -0
  104. package/src/data/comments/likes/repository.ts +61 -0
  105. package/src/data/comments/likes/types.ts +47 -0
  106. package/src/data/comments/remote.ts +71 -0
  107. package/src/data/comments/repository.ts +53 -0
  108. package/src/data/comments/types.ts +60 -0
  109. package/src/data/github/remote.ts +23 -0
  110. package/src/data/github/repository.ts +35 -0
  111. package/src/data/github/types.ts +23 -0
  112. package/src/data/home/remote.ts +24 -0
  113. package/src/data/home/repository.ts +28 -0
  114. package/src/data/home/types.ts +70 -0
  115. package/src/data/index.ts +3 -0
  116. package/src/data/likes/remote.ts +57 -0
  117. package/src/data/likes/repository.ts +47 -0
  118. package/src/data/likes/types.ts +46 -0
  119. package/src/data/me/remote.ts +28 -0
  120. package/src/data/me/repository.ts +30 -0
  121. package/src/data/me/types.ts +14 -0
  122. package/src/data/merge-requests/remote.ts +76 -0
  123. package/src/data/merge-requests/repository.ts +66 -0
  124. package/src/data/merge-requests/types.ts +33 -0
  125. package/src/data/messages/remote.ts +21 -0
  126. package/src/data/messages/repository.ts +104 -0
  127. package/src/data/messages/types.ts +20 -0
  128. package/src/data/public/studio-config/remote.ts +19 -0
  129. package/src/data/public/studio-config/repository.ts +23 -0
  130. package/src/data/public/studio-config/types.ts +6 -0
  131. package/src/data/ratings/remote.ts +76 -0
  132. package/src/data/ratings/repository.ts +63 -0
  133. package/src/data/ratings/types.ts +57 -0
  134. package/src/data/threads/remote.ts +40 -0
  135. package/src/data/threads/repository.ts +41 -0
  136. package/src/data/threads/types.ts +25 -0
  137. package/src/data/types.ts +8 -0
  138. package/src/data/users/remote.ts +31 -0
  139. package/src/data/users/repository.ts +45 -0
  140. package/src/data/users/types.ts +15 -0
  141. package/src/index.ts +6 -0
  142. package/src/studio/ComergeStudio.tsx +246 -0
  143. package/src/studio/bootstrap/StudioBootstrap.tsx +45 -0
  144. package/src/studio/bootstrap/useStudioBootstrap.ts +51 -0
  145. package/src/studio/hooks/useApp.ts +83 -0
  146. package/src/studio/hooks/useAppStats.ts +111 -0
  147. package/src/studio/hooks/useAttachmentUpload.ts +59 -0
  148. package/src/studio/hooks/useBundleManager.ts +389 -0
  149. package/src/studio/hooks/useMergeRequests.ts +173 -0
  150. package/src/studio/hooks/useStudioActions.ts +96 -0
  151. package/src/studio/hooks/useThreadMessages.ts +85 -0
  152. package/src/studio/lib/chat.ts +34 -0
  153. package/src/studio/ui/ChatPanel.tsx +154 -0
  154. package/src/studio/ui/ConfirmMergeFlow.tsx +55 -0
  155. package/src/studio/ui/PreviewPanel.tsx +131 -0
  156. package/src/studio/ui/RuntimeRenderer.tsx +40 -0
  157. package/src/studio/ui/StudioOverlay.tsx +257 -0
  158. package/src/studio/ui/preview-panel/PressableCardRow.tsx +49 -0
  159. package/src/studio/ui/preview-panel/PreviewCollaborateSection.tsx +174 -0
  160. package/src/studio/ui/preview-panel/PreviewCustomizeSection.tsx +160 -0
  161. package/src/studio/ui/preview-panel/PreviewHeroSection.tsx +56 -0
  162. package/src/studio/ui/preview-panel/PreviewMetaSection.tsx +67 -0
  163. package/src/studio/ui/preview-panel/PreviewPanelHeader.tsx +48 -0
  164. package/src/studio/ui/preview-panel/SectionTitle.tsx +31 -0
  165. package/src/studio/ui/preview-panel/usePreviewPanelData.ts +132 -0
  166. package/src/studio/ui/preview-panel/utils.ts +29 -0
  167. package/src/theme/index.ts +5 -0
  168. package/src/theme/tokens.ts +118 -0
  169. package/src/theme/types.ts +90 -0
  170. package/src/theme/useTheme.ts +11 -0
  171. package/dist/assets/images/merge.svg +0 -3
  172. package/dist/merge-72UG27QV.svg +0 -3
package/dist/index.js CHANGED
@@ -3834,11 +3834,21 @@ var import_react_native28 = require("react-native");
3834
3834
  var import_liquid_glass6 = require("@callstack/liquid-glass");
3835
3835
  var import_lucide_react_native5 = require("lucide-react-native");
3836
3836
 
3837
- // src/assets/images/merge.svg
3838
- var merge_default = "./merge-72UG27QV.svg";
3837
+ // src/components/icons/MergeIcon.tsx
3838
+ var import_react_native_svg2 = __toESM(require("react-native-svg"));
3839
+ var import_jsx_runtime28 = require("react/jsx-runtime");
3840
+ function MergeIcon({ color = "currentColor", width = 24, height = 24, ...props }) {
3841
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native_svg2.default, { viewBox: "0 0 486 486", width, height, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3842
+ import_react_native_svg2.Path,
3843
+ {
3844
+ d: "M237.025 0H243.664C254.876 95.0361 275.236 175.597 304.743 241.684C334.249 307.478 367.002 357.774 403 392.572L389.722 486C361.691 458.22 338.233 429.417 319.349 399.59C300.464 369.764 284.531 335.843 271.548 297.829C258.565 259.522 246.615 214.343 235.697 162.292L237.91 161.415C228.468 214.928 217.993 261.569 206.485 301.338C194.978 341.107 179.634 375.904 160.455 405.731C141.571 435.265 115.752 462.022 83 486L96.278 392.572C124.014 369.179 147.62 336.72 167.094 295.197C186.864 253.381 202.65 206.886 214.452 155.713C226.255 104.247 233.779 52.343 237.025 0Z",
3845
+ fill: color
3846
+ }
3847
+ ) });
3848
+ }
3839
3849
 
3840
3850
  // src/components/preview/StatsBar.tsx
3841
- var import_jsx_runtime28 = require("react/jsx-runtime");
3851
+ var import_jsx_runtime29 = require("react/jsx-runtime");
3842
3852
  function StatsBar({
3843
3853
  likeCount,
3844
3854
  commentCount,
@@ -3852,7 +3862,7 @@ function StatsBar({
3852
3862
  }) {
3853
3863
  const theme = useTheme();
3854
3864
  const statsBgColor = theme.scheme === "dark" ? "rgba(24, 24, 27, 0.5)" : "rgba(255, 255, 255, 0.5)";
3855
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3865
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3856
3866
  import_react_native28.View,
3857
3867
  {
3858
3868
  style: [
@@ -3860,7 +3870,7 @@ function StatsBar({
3860
3870
  centered && { alignItems: "center" },
3861
3871
  style
3862
3872
  ],
3863
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3873
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3864
3874
  import_liquid_glass6.LiquidGlassView,
3865
3875
  {
3866
3876
  style: [
@@ -3869,16 +3879,16 @@ function StatsBar({
3869
3879
  !import_liquid_glass6.isLiquidGlassSupported && { backgroundColor: statsBgColor }
3870
3880
  ],
3871
3881
  effect: "clear",
3872
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_react_native28.View, { style: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", paddingHorizontal: 16 }, children: [
3873
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3882
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native28.View, { style: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", paddingHorizontal: 16 }, children: [
3883
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3874
3884
  import_react_native28.Pressable,
3875
3885
  {
3876
3886
  disabled: !onPressLike,
3877
3887
  onPress: onPressLike,
3878
3888
  hitSlop: 8,
3879
3889
  style: { paddingVertical: 8 },
3880
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_react_native28.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
3881
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3890
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native28.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
3891
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3882
3892
  import_lucide_react_native5.Heart,
3883
3893
  {
3884
3894
  size: 16,
@@ -3887,8 +3897,8 @@ function StatsBar({
3887
3897
  fill: isLiked ? theme.colors.danger : "transparent"
3888
3898
  }
3889
3899
  ),
3890
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native28.View, { style: { width: 4 } }),
3891
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3900
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native28.View, { style: { width: 4 } }),
3901
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3892
3902
  Text,
3893
3903
  {
3894
3904
  variant: "caption",
@@ -3902,24 +3912,24 @@ function StatsBar({
3902
3912
  ] })
3903
3913
  }
3904
3914
  ),
3905
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3915
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3906
3916
  import_react_native28.Pressable,
3907
3917
  {
3908
3918
  disabled: !onPressComments,
3909
3919
  onPress: onPressComments,
3910
3920
  hitSlop: 8,
3911
3921
  style: { paddingVertical: 8 },
3912
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_react_native28.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
3913
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react_native5.MessageCircle, { size: 16, strokeWidth: 2.5, color: "#FFFFFF" }),
3914
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native28.View, { style: { width: 4 } }),
3915
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { variant: "caption", style: { color: "#FFFFFF", fontWeight: theme.typography.fontWeight.bold }, children: commentCount })
3922
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native28.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
3923
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react_native5.MessageCircle, { size: 16, strokeWidth: 2.5, color: "#FFFFFF" }),
3924
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native28.View, { style: { width: 4 } }),
3925
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text, { variant: "caption", style: { color: "#FFFFFF", fontWeight: theme.typography.fontWeight.bold }, children: commentCount })
3916
3926
  ] })
3917
3927
  }
3918
3928
  ),
3919
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_react_native28.View, { style: { flexDirection: "row", alignItems: "center", paddingVertical: 8 }, children: [
3920
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native28.View, { style: { transform: [{ scaleY: -1 }] }, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(merge_default, { width: 14, height: 14, color: "#FFFFFF" }) }),
3921
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native28.View, { style: { width: 4 } }),
3922
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { variant: "caption", style: { color: "#FFFFFF", fontWeight: theme.typography.fontWeight.bold }, children: forkCount })
3929
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native28.View, { style: { flexDirection: "row", alignItems: "center", paddingVertical: 8 }, children: [
3930
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native28.View, { style: { transform: [{ scaleY: -1 }] }, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(MergeIcon, { width: 14, height: 14, color: "#FFFFFF" }) }),
3931
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native28.View, { style: { width: 4 } }),
3932
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text, { variant: "caption", style: { color: "#FFFFFF", fontWeight: theme.typography.fontWeight.bold }, children: forkCount })
3923
3933
  ] })
3924
3934
  ] })
3925
3935
  }
@@ -3944,7 +3954,7 @@ var APP_STATUS_LABEL = {
3944
3954
  };
3945
3955
 
3946
3956
  // src/components/preview/PreviewStatusBadge.tsx
3947
- var import_jsx_runtime29 = require("react/jsx-runtime");
3957
+ var import_jsx_runtime30 = require("react/jsx-runtime");
3948
3958
  var STATUS_BG = {
3949
3959
  ready: "#10B981",
3950
3960
  // emerald-500
@@ -3973,7 +3983,7 @@ var STATUS_ICON = {
3973
3983
  function PreviewStatusBadge({ status }) {
3974
3984
  const IconComp = STATUS_ICON[status];
3975
3985
  const label = APP_STATUS_LABEL[status] ?? status;
3976
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
3986
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
3977
3987
  import_react_native29.View,
3978
3988
  {
3979
3989
  style: {
@@ -3985,15 +3995,15 @@ function PreviewStatusBadge({ status }) {
3985
3995
  backgroundColor: STATUS_BG[status]
3986
3996
  },
3987
3997
  children: [
3988
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(IconComp, { size: 12, color: "#FFFFFF", style: { marginRight: 4 } }),
3989
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text, { style: { color: "#FFFFFF", fontSize: 11, lineHeight: 14 }, children: label })
3998
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(IconComp, { size: 12, color: "#FFFFFF", style: { marginRight: 4 } }),
3999
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text, { style: { color: "#FFFFFF", fontSize: 11, lineHeight: 14 }, children: label })
3990
4000
  ]
3991
4001
  }
3992
4002
  );
3993
4003
  }
3994
4004
 
3995
4005
  // src/studio/ui/preview-panel/PreviewHeroSection.tsx
3996
- var import_jsx_runtime30 = require("react/jsx-runtime");
4006
+ var import_jsx_runtime31 = require("react/jsx-runtime");
3997
4007
  function PreviewHeroSection({
3998
4008
  appStatus,
3999
4009
  showProcessing,
@@ -4002,13 +4012,13 @@ function PreviewHeroSection({
4002
4012
  onImageLoad,
4003
4013
  stats
4004
4014
  }) {
4005
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4015
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4006
4016
  PreviewHeroCard,
4007
4017
  {
4008
- overlayTopLeft: showProcessing ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(PreviewStatusBadge, { status: appStatus }) : null,
4009
- background: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(PreviewPlaceholder, { visible: !imageLoaded }),
4010
- image: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(PreviewImage, { uri: imageUrl, onLoad: onImageLoad }),
4011
- overlayBottom: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4018
+ overlayTopLeft: showProcessing ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PreviewStatusBadge, { status: appStatus }) : null,
4019
+ background: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PreviewPlaceholder, { visible: !imageLoaded }),
4020
+ image: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PreviewImage, { uri: imageUrl, onLoad: onImageLoad }),
4021
+ overlayBottom: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4012
4022
  StatsBar,
4013
4023
  {
4014
4024
  likeCount: stats.likeCount,
@@ -4031,7 +4041,7 @@ var import_react_native31 = require("react-native");
4031
4041
 
4032
4042
  // src/components/preview/PreviewMetaRow.tsx
4033
4043
  var import_react_native30 = require("react-native");
4034
- var import_jsx_runtime31 = require("react/jsx-runtime");
4044
+ var import_jsx_runtime32 = require("react/jsx-runtime");
4035
4045
  function PreviewMetaRow({
4036
4046
  avatarUri,
4037
4047
  creatorName,
@@ -4042,11 +4052,11 @@ function PreviewMetaRow({
4042
4052
  style
4043
4053
  }) {
4044
4054
  const theme = useTheme();
4045
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native30.View, { style: [{ alignSelf: "stretch" }, style], children: [
4046
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native30.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
4047
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Avatar, { uri: avatarUri, name: creatorName, size: 24, style: { marginRight: theme.spacing.sm } }),
4048
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native30.View, { style: { flexDirection: "row", alignItems: "center", flex: 1, minWidth: 0, marginRight: theme.spacing.sm }, children: [
4049
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4055
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_react_native30.View, { style: [{ alignSelf: "stretch" }, style], children: [
4056
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_react_native30.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
4057
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Avatar, { uri: avatarUri, name: creatorName, size: 24, style: { marginRight: theme.spacing.sm } }),
4058
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_react_native30.View, { style: { flexDirection: "row", alignItems: "center", flex: 1, minWidth: 0, marginRight: theme.spacing.sm }, children: [
4059
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4050
4060
  Text,
4051
4061
  {
4052
4062
  numberOfLines: 1,
@@ -4060,11 +4070,11 @@ function PreviewMetaRow({
4060
4070
  children: title
4061
4071
  }
4062
4072
  ),
4063
- tag ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_native30.View, { style: { marginLeft: theme.spacing.sm }, children: tag }) : null
4073
+ tag ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_native30.View, { style: { marginLeft: theme.spacing.sm }, children: tag }) : null
4064
4074
  ] }),
4065
- rightMetric ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_native30.View, { children: rightMetric }) : null
4075
+ rightMetric ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_native30.View, { children: rightMetric }) : null
4066
4076
  ] }),
4067
- subtitle ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4077
+ subtitle ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4068
4078
  Text,
4069
4079
  {
4070
4080
  numberOfLines: 2,
@@ -4107,19 +4117,19 @@ function statusDescription(status, statusError) {
4107
4117
  }
4108
4118
 
4109
4119
  // src/studio/ui/preview-panel/PreviewMetaSection.tsx
4110
- var import_jsx_runtime32 = require("react/jsx-runtime");
4120
+ var import_jsx_runtime33 = require("react/jsx-runtime");
4111
4121
  function PreviewMetaSection({ app, isOwner, creator, downloadsCount }) {
4112
4122
  var _a;
4113
4123
  const theme = useTheme();
4114
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4124
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4115
4125
  PreviewMetaRow,
4116
4126
  {
4117
4127
  title: app.name,
4118
4128
  subtitle: app.description,
4119
4129
  avatarUri: (creator == null ? void 0 : creator.avatar) ?? null,
4120
4130
  creatorName: (creator == null ? void 0 : creator.name) ?? null,
4121
- tag: isOwner || app.forkedFromAppId ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_native31.View, { style: { paddingHorizontal: 8, paddingVertical: 2, borderRadius: 999, backgroundColor: "#3700B3" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Text, { variant: "caption", style: { color: "#fff", fontWeight: theme.typography.fontWeight.semibold }, children: app.forkedFromAppId ? "Remix" : "Owner" }) }) : null,
4122
- rightMetric: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
4131
+ tag: isOwner || app.forkedFromAppId ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_native31.View, { style: { paddingHorizontal: 8, paddingVertical: 2, borderRadius: 999, backgroundColor: "#3700B3" }, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Text, { variant: "caption", style: { color: "#fff", fontWeight: theme.typography.fontWeight.semibold }, children: app.forkedFromAppId ? "Remix" : "Owner" }) }) : null,
4132
+ rightMetric: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
4123
4133
  import_react_native31.View,
4124
4134
  {
4125
4135
  style: {
@@ -4131,7 +4141,7 @@ function PreviewMetaSection({ app, isOwner, creator, downloadsCount }) {
4131
4141
  backgroundColor: withAlpha(theme.colors.neutral, 0.3)
4132
4142
  },
4133
4143
  children: [
4134
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4144
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4135
4145
  Text,
4136
4146
  {
4137
4147
  style: {
@@ -4144,7 +4154,7 @@ function PreviewMetaSection({ app, isOwner, creator, downloadsCount }) {
4144
4154
  children: formatCount(downloadsCount ?? ((_a = app.insights) == null ? void 0 : _a.totalDownloads) ?? 0)
4145
4155
  }
4146
4156
  ),
4147
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(IconPlay, { size: 14, colorToken: "textMuted", fill: theme.colors.textMuted })
4157
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(IconPlay, { size: 14, colorToken: "textMuted", fill: theme.colors.textMuted })
4148
4158
  ]
4149
4159
  }
4150
4160
  ),
@@ -4158,7 +4168,7 @@ var import_react_native33 = require("react-native");
4158
4168
 
4159
4169
  // src/studio/ui/preview-panel/PressableCardRow.tsx
4160
4170
  var import_react_native32 = require("react-native");
4161
- var import_jsx_runtime33 = require("react/jsx-runtime");
4171
+ var import_jsx_runtime34 = require("react/jsx-runtime");
4162
4172
  function PressableCardRow({
4163
4173
  accessibilityLabel,
4164
4174
  onPress,
@@ -4169,7 +4179,7 @@ function PressableCardRow({
4169
4179
  right,
4170
4180
  style
4171
4181
  }) {
4172
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4182
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4173
4183
  import_react_native32.Pressable,
4174
4184
  {
4175
4185
  accessibilityRole: "button",
@@ -4177,23 +4187,23 @@ function PressableCardRow({
4177
4187
  disabled,
4178
4188
  onPress,
4179
4189
  style: ({ pressed }) => ({ opacity: disabled ? 0.6 : pressed ? 0.85 : 1 }),
4180
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Card, { padded: false, border: false, style, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native32.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
4190
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Card, { padded: false, border: false, style, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native32.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
4181
4191
  left,
4182
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native32.View, { style: { flex: 1, minWidth: 0 }, children: [
4192
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native32.View, { style: { flex: 1, minWidth: 0 }, children: [
4183
4193
  title,
4184
4194
  subtitle ? subtitle : null
4185
4195
  ] }),
4186
- right ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_native32.View, { style: { marginLeft: 16 }, children: right }) : null
4196
+ right ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_native32.View, { style: { marginLeft: 16 }, children: right }) : null
4187
4197
  ] }) })
4188
4198
  }
4189
4199
  );
4190
4200
  }
4191
4201
 
4192
4202
  // src/studio/ui/preview-panel/SectionTitle.tsx
4193
- var import_jsx_runtime34 = require("react/jsx-runtime");
4203
+ var import_jsx_runtime35 = require("react/jsx-runtime");
4194
4204
  function SectionTitle({ children, marginTop }) {
4195
4205
  const theme = useTheme();
4196
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4206
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4197
4207
  Text,
4198
4208
  {
4199
4209
  style: {
@@ -4212,7 +4222,7 @@ function SectionTitle({ children, marginTop }) {
4212
4222
  }
4213
4223
 
4214
4224
  // src/studio/ui/preview-panel/PreviewCustomizeSection.tsx
4215
- var import_jsx_runtime35 = require("react/jsx-runtime");
4225
+ var import_jsx_runtime36 = require("react/jsx-runtime");
4216
4226
  function PreviewCustomizeSection({
4217
4227
  app,
4218
4228
  isOwner,
@@ -4222,9 +4232,9 @@ function PreviewCustomizeSection({
4222
4232
  onStartDraw
4223
4233
  }) {
4224
4234
  const theme = useTheme();
4225
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
4226
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SectionTitle, { children: "Customize" }),
4227
- showProcessing ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
4235
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
4236
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SectionTitle, { children: "Customize" }),
4237
+ showProcessing ? /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
4228
4238
  import_react_native33.View,
4229
4239
  {
4230
4240
  style: {
@@ -4238,7 +4248,7 @@ function PreviewCustomizeSection({
4238
4248
  marginBottom: theme.spacing.sm
4239
4249
  },
4240
4250
  children: [
4241
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4251
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4242
4252
  import_react_native33.View,
4243
4253
  {
4244
4254
  style: {
@@ -4250,17 +4260,17 @@ function PreviewCustomizeSection({
4250
4260
  backgroundColor: withAlpha(theme.colors.warning, 0.1),
4251
4261
  marginRight: theme.spacing.lg
4252
4262
  },
4253
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_native33.ActivityIndicator, { color: theme.colors.warning, size: "small" })
4263
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_native33.ActivityIndicator, { color: theme.colors.warning, size: "small" })
4254
4264
  }
4255
4265
  ),
4256
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_react_native33.View, { style: { flex: 1, minWidth: 0 }, children: [
4257
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: app.status === "error" ? "Error" : "Processing" }),
4258
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: statusDescription(app.status, app.statusError) })
4266
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_native33.View, { style: { flex: 1, minWidth: 0 }, children: [
4267
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: app.status === "error" ? "Error" : "Processing" }),
4268
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: statusDescription(app.status, app.statusError) })
4259
4269
  ] })
4260
4270
  ]
4261
4271
  }
4262
4272
  ) : null,
4263
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4273
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4264
4274
  PressableCardRow,
4265
4275
  {
4266
4276
  accessibilityLabel: isOwner ? "Edit app" : "Remix app",
@@ -4273,7 +4283,7 @@ function PreviewCustomizeSection({
4273
4283
  borderColor: withAlpha(theme.colors.primary, 0.1),
4274
4284
  marginBottom: theme.spacing.sm
4275
4285
  },
4276
- left: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4286
+ left: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4277
4287
  import_react_native33.View,
4278
4288
  {
4279
4289
  style: {
@@ -4285,15 +4295,15 @@ function PreviewCustomizeSection({
4285
4295
  backgroundColor: withAlpha(theme.colors.primary, 0.1),
4286
4296
  marginRight: theme.spacing.lg
4287
4297
  },
4288
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(IconChat, { size: 20, colorToken: "primary" })
4298
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(IconChat, { size: 20, colorToken: "primary" })
4289
4299
  }
4290
4300
  ),
4291
- title: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: isOwner ? app.forkedFromAppId ? "Edit your Remix" : "Edit Your App" : "Remix App" }),
4292
- subtitle: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: isOwner && app.forkedFromAppId ? "Make changes to your remix with chat" : shouldForkOnEdit ? "Chat to create your own copy and edit it" : "Chat to apply changes" }),
4293
- right: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(IconChevronRight, { size: 20, colorToken: "textMuted" })
4301
+ title: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: isOwner ? app.forkedFromAppId ? "Edit your Remix" : "Edit Your App" : "Remix App" }),
4302
+ subtitle: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: isOwner && app.forkedFromAppId ? "Make changes to your remix with chat" : shouldForkOnEdit ? "Chat to create your own copy and edit it" : "Chat to apply changes" }),
4303
+ right: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(IconChevronRight, { size: 20, colorToken: "textMuted" })
4294
4304
  }
4295
4305
  ),
4296
- isOwner && onStartDraw ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4306
+ isOwner && onStartDraw ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4297
4307
  PressableCardRow,
4298
4308
  {
4299
4309
  accessibilityLabel: "Draw changes",
@@ -4306,7 +4316,7 @@ function PreviewCustomizeSection({
4306
4316
  borderColor: withAlpha(theme.colors.danger, 0.1),
4307
4317
  marginBottom: theme.spacing.sm
4308
4318
  },
4309
- left: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4319
+ left: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4310
4320
  import_react_native33.View,
4311
4321
  {
4312
4322
  style: {
@@ -4318,12 +4328,12 @@ function PreviewCustomizeSection({
4318
4328
  backgroundColor: withAlpha(theme.colors.danger, 0.1),
4319
4329
  marginRight: theme.spacing.lg
4320
4330
  },
4321
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(IconDraw, { size: 20, colorToken: "danger" })
4331
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(IconDraw, { size: 20, colorToken: "danger" })
4322
4332
  }
4323
4333
  ),
4324
- title: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: "Draw Changes" }),
4325
- subtitle: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: "Annotate the app with drawings" }),
4326
- right: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(IconChevronRight, { size: 20, colorToken: "textMuted" })
4334
+ title: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: "Draw Changes" }),
4335
+ subtitle: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: "Annotate the app with drawings" }),
4336
+ right: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(IconChevronRight, { size: 20, colorToken: "textMuted" })
4327
4337
  }
4328
4338
  ) : null
4329
4339
  ] });
@@ -4342,7 +4352,7 @@ var import_lucide_react_native7 = require("lucide-react-native");
4342
4352
  // src/components/primitives/MarkdownText.tsx
4343
4353
  var import_react_native34 = require("react-native");
4344
4354
  var import_react_native_markdown_display = __toESM(require("react-native-markdown-display"));
4345
- var import_jsx_runtime36 = require("react/jsx-runtime");
4355
+ var import_jsx_runtime37 = require("react/jsx-runtime");
4346
4356
  function MarkdownText({ markdown, variant = "chat", bodyColor, style }) {
4347
4357
  const theme = useTheme();
4348
4358
  const isDark = theme.scheme === "dark";
@@ -4353,7 +4363,7 @@ function MarkdownText({ markdown, variant = "chat", bodyColor, style }) {
4353
4363
  const codeTextColor = isDark ? "#FFFFFF" : theme.colors.text;
4354
4364
  const paragraphBottom = variant === "mergeRequest" ? 8 : 6;
4355
4365
  const baseLineHeight = variant === "mergeRequest" ? 22 : 20;
4356
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_native34.View, { style, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4366
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native34.View, { style, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4357
4367
  import_react_native_markdown_display.default,
4358
4368
  {
4359
4369
  style: {
@@ -4433,7 +4443,7 @@ function useControlledExpansion(props) {
4433
4443
  }
4434
4444
 
4435
4445
  // src/components/merge-requests/MergeRequestStatusCard.tsx
4436
- var import_jsx_runtime37 = require("react/jsx-runtime");
4446
+ var import_jsx_runtime38 = require("react/jsx-runtime");
4437
4447
  function MergeRequestStatusCard({
4438
4448
  mergeRequest,
4439
4449
  expanded: expandedProp,
@@ -4486,7 +4496,7 @@ function MergeRequestStatusCard({
4486
4496
  useNativeDriver: true
4487
4497
  }).start();
4488
4498
  }, [expanded, rotate]);
4489
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native35.Pressable, { onPress: () => setExpanded(!expanded), style: ({ pressed }) => [{ opacity: pressed ? 0.95 : 1 }], children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
4499
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native35.Pressable, { onPress: () => setExpanded(!expanded), style: ({ pressed }) => [{ opacity: pressed ? 0.95 : 1 }], children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
4490
4500
  Card,
4491
4501
  {
4492
4502
  padded: false,
@@ -4499,11 +4509,11 @@ function MergeRequestStatusCard({
4499
4509
  style
4500
4510
  ],
4501
4511
  children: [
4502
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react_native35.View, { style: { flexDirection: "row", alignItems: "center", gap: theme.spacing.lg }, children: [
4503
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native35.View, { style: { width: 40, height: 40, borderRadius: 999, alignItems: "center", justifyContent: "center", backgroundColor: bgColor }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(StatusIcon, { size: 20, color: iconColor }) }),
4504
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react_native35.View, { style: { flex: 1, minWidth: 0 }, children: [
4505
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react_native35.View, { style: { flexDirection: "row", alignItems: "center", justifyContent: "space-between" }, children: [
4506
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4512
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_native35.View, { style: { flexDirection: "row", alignItems: "center", gap: theme.spacing.lg }, children: [
4513
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native35.View, { style: { width: 40, height: 40, borderRadius: 999, alignItems: "center", justifyContent: "center", backgroundColor: bgColor }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(StatusIcon, { size: 20, color: iconColor }) }),
4514
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_native35.View, { style: { flex: 1, minWidth: 0 }, children: [
4515
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_native35.View, { style: { flexDirection: "row", alignItems: "center", justifyContent: "space-between" }, children: [
4516
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4507
4517
  Text,
4508
4518
  {
4509
4519
  style: {
@@ -4517,11 +4527,11 @@ function MergeRequestStatusCard({
4517
4527
  children: statusText
4518
4528
  }
4519
4529
  ),
4520
- headerTimeAgo ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Text, { style: { fontSize: 10, lineHeight: 14, marginLeft: theme.spacing.sm, color: withAlpha(theme.colors.textMuted, 0.6) }, children: headerTimeAgo }) : null
4530
+ headerTimeAgo ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Text, { style: { fontSize: 10, lineHeight: 14, marginLeft: theme.spacing.sm, color: withAlpha(theme.colors.textMuted, 0.6) }, children: headerTimeAgo }) : null
4521
4531
  ] }),
4522
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Text, { style: { fontSize: 12, lineHeight: 16, color: theme.colors.textMuted }, numberOfLines: 1, children: mergeRequest.title ?? "Untitled merge request" })
4532
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Text, { style: { fontSize: 12, lineHeight: 16, color: theme.colors.textMuted }, numberOfLines: 1, children: mergeRequest.title ?? "Untitled merge request" })
4523
4533
  ] }),
4524
- headerRight ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native35.View, { children: headerRight }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4534
+ headerRight ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native35.View, { children: headerRight }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4525
4535
  import_react_native35.Animated.View,
4526
4536
  {
4527
4537
  style: {
@@ -4531,12 +4541,12 @@ function MergeRequestStatusCard({
4531
4541
  }
4532
4542
  ]
4533
4543
  },
4534
- children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react_native7.ChevronDown, { size: 20, color: withAlpha(theme.colors.textMuted, 0.4) })
4544
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react_native7.ChevronDown, { size: 20, color: withAlpha(theme.colors.textMuted, 0.4) })
4535
4545
  }
4536
4546
  )
4537
4547
  ] }),
4538
- expanded ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react_native35.View, { style: { marginTop: 16, marginLeft: 56 }, children: [
4539
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4548
+ expanded ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_native35.View, { style: { marginTop: 16, marginLeft: 56 }, children: [
4549
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4540
4550
  Text,
4541
4551
  {
4542
4552
  style: {
@@ -4550,7 +4560,7 @@ function MergeRequestStatusCard({
4550
4560
  children: status.text
4551
4561
  }
4552
4562
  ),
4553
- createdTimeAgo ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4563
+ createdTimeAgo ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4554
4564
  Text,
4555
4565
  {
4556
4566
  style: {
@@ -4561,8 +4571,8 @@ function MergeRequestStatusCard({
4561
4571
  children: createdTimeAgo
4562
4572
  }
4563
4573
  ) : null,
4564
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Text, { style: { fontSize: 16, fontWeight: "600", color: textColor, marginBottom: 8 }, children: mergeRequest.title ?? "Untitled merge request" }),
4565
- mergeRequest.description ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(MarkdownText, { markdown: mergeRequest.description, variant: "mergeRequest" }) : null
4574
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Text, { style: { fontSize: 16, fontWeight: "600", color: textColor, marginBottom: 8 }, children: mergeRequest.title ?? "Untitled merge request" }),
4575
+ mergeRequest.description ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(MarkdownText, { markdown: mergeRequest.description, variant: "mergeRequest" }) : null
4566
4576
  ] }) : null
4567
4577
  ]
4568
4578
  }
@@ -4581,7 +4591,7 @@ var import_lucide_react_native8 = require("lucide-react-native");
4581
4591
  // src/components/merge-requests/ReviewMergeRequestActionButton.tsx
4582
4592
  var React25 = __toESM(require("react"));
4583
4593
  var import_react_native36 = require("react-native");
4584
- var import_jsx_runtime38 = require("react/jsx-runtime");
4594
+ var import_jsx_runtime39 = require("react/jsx-runtime");
4585
4595
  function ReviewMergeRequestActionButton({
4586
4596
  accessibilityLabel,
4587
4597
  backgroundColor,
@@ -4596,7 +4606,7 @@ function ReviewMergeRequestActionButton({
4596
4606
  const paddingHorizontal = iconOnly ? 0 : 16;
4597
4607
  const paddingVertical = iconOnly ? 0 : 8;
4598
4608
  const opacity = disabled ? 0.5 : pressed ? 0.9 : 1;
4599
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4609
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4600
4610
  import_react_native36.View,
4601
4611
  {
4602
4612
  style: {
@@ -4611,7 +4621,7 @@ function ReviewMergeRequestActionButton({
4611
4621
  paddingVertical,
4612
4622
  justifyContent: "center"
4613
4623
  },
4614
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4624
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4615
4625
  import_react_native36.Pressable,
4616
4626
  {
4617
4627
  accessibilityRole: "button",
@@ -4635,7 +4645,7 @@ function ReviewMergeRequestActionButton({
4635
4645
  }
4636
4646
 
4637
4647
  // src/components/merge-requests/ReviewMergeRequestCard.tsx
4638
- var import_jsx_runtime39 = require("react/jsx-runtime");
4648
+ var import_jsx_runtime40 = require("react/jsx-runtime");
4639
4649
  function ReviewMergeRequestCard({
4640
4650
  mr,
4641
4651
  index,
@@ -4659,7 +4669,7 @@ function ReviewMergeRequestCard({
4659
4669
  import_react_native37.Animated.timing(rotate, { toValue: isExpanded ? 1 : 0, duration: 200, useNativeDriver: true }).start();
4660
4670
  }, [isExpanded, rotate]);
4661
4671
  const position = total > 1 ? `${index + 1}/${total}` : "Merge request";
4662
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_native37.Pressable, { onPress: onToggle, style: ({ pressed }) => ({ opacity: pressed ? 0.95 : 1 }), children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
4672
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native37.Pressable, { onPress: onToggle, style: ({ pressed }) => ({ opacity: pressed ? 0.95 : 1 }), children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
4663
4673
  Card,
4664
4674
  {
4665
4675
  padded: false,
@@ -4672,10 +4682,10 @@ function ReviewMergeRequestCard({
4672
4682
  }
4673
4683
  ],
4674
4684
  children: [
4675
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", gap: 12 }, children: [
4676
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Avatar, { size: 40, uri: (creator == null ? void 0 : creator.avatar) ?? null, name: (creator == null ? void 0 : creator.name) ?? void 0 }),
4677
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native37.View, { style: { flex: 1, minWidth: 0 }, children: [
4678
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4685
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", gap: 12 }, children: [
4686
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Avatar, { size: 40, uri: (creator == null ? void 0 : creator.avatar) ?? null, name: (creator == null ? void 0 : creator.name) ?? void 0 }),
4687
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native37.View, { style: { flex: 1, minWidth: 0 }, children: [
4688
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4679
4689
  Text,
4680
4690
  {
4681
4691
  style: { fontWeight: theme.typography.fontWeight.semibold, color: theme.colors.text, fontSize: 16, lineHeight: 20 },
@@ -4683,24 +4693,24 @@ function ReviewMergeRequestCard({
4683
4693
  children: mr.title ?? "Untitled merge request"
4684
4694
  }
4685
4695
  ),
4686
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16 }, numberOfLines: 1, children: [
4696
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16 }, numberOfLines: 1, children: [
4687
4697
  (creator == null ? void 0 : creator.name) ?? "Loading...",
4688
4698
  " \xB7 ",
4689
4699
  position
4690
4700
  ] })
4691
4701
  ] }),
4692
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4702
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4693
4703
  import_react_native37.Animated.View,
4694
4704
  {
4695
4705
  style: {
4696
4706
  transform: [{ rotate: rotate.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "180deg"] }) }]
4697
4707
  },
4698
- children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react_native8.ChevronDown, { size: 20, color: withAlpha(theme.colors.textMuted, 0.4) })
4708
+ children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react_native8.ChevronDown, { size: 20, color: withAlpha(theme.colors.textMuted, 0.4) })
4699
4709
  }
4700
4710
  )
4701
4711
  ] }),
4702
- isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native37.View, { style: { marginTop: 16 }, children: [
4703
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4712
+ isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native37.View, { style: { marginTop: 16 }, children: [
4713
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4704
4714
  Text,
4705
4715
  {
4706
4716
  style: {
@@ -4714,13 +4724,13 @@ function ReviewMergeRequestCard({
4714
4724
  children: status.text
4715
4725
  }
4716
4726
  ),
4717
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginBottom: 12 }, children: creator ? `${creator.approvedOpenedMergeRequests} approved merge${creator.approvedOpenedMergeRequests !== 1 ? "s" : ""}` : "Loading stats..." }),
4718
- mr.description ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(MarkdownText, { markdown: mr.description, variant: "mergeRequest" }) : null
4727
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginBottom: 12 }, children: creator ? `${creator.approvedOpenedMergeRequests} approved merge${creator.approvedOpenedMergeRequests !== 1 ? "s" : ""}` : "Loading stats..." }),
4728
+ mr.description ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(MarkdownText, { markdown: mr.description, variant: "mergeRequest" }) : null
4719
4729
  ] }) : null,
4720
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_native37.View, { style: { height: 1, backgroundColor: withAlpha(theme.colors.borderStrong, 0.5), marginTop: 12, marginBottom: 12 } }),
4721
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", justifyContent: "space-between" }, children: [
4722
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native37.View, { style: { flexDirection: "row", gap: 8 }, children: [
4723
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4730
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native37.View, { style: { height: 1, backgroundColor: withAlpha(theme.colors.borderStrong, 0.5), marginTop: 12, marginBottom: 12 } }),
4731
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", justifyContent: "space-between" }, children: [
4732
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native37.View, { style: { flexDirection: "row", gap: 8 }, children: [
4733
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4724
4734
  ReviewMergeRequestActionButton,
4725
4735
  {
4726
4736
  accessibilityLabel: "Reject",
@@ -4728,13 +4738,13 @@ function ReviewMergeRequestCard({
4728
4738
  disabled: !canAct || isAnyProcessing,
4729
4739
  onPress: onReject,
4730
4740
  iconOnly: !isExpanded,
4731
- children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4732
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react_native8.X, { size: 18, color: "#FFFFFF" }),
4733
- isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Reject" }) : null
4741
+ children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4742
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react_native8.X, { size: 18, color: "#FFFFFF" }),
4743
+ isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Reject" }) : null
4734
4744
  ] })
4735
4745
  }
4736
4746
  ),
4737
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4747
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4738
4748
  ReviewMergeRequestActionButton,
4739
4749
  {
4740
4750
  accessibilityLabel: !canAct ? "Not actionable" : isProcessing ? "Processing" : "Approve",
@@ -4742,17 +4752,17 @@ function ReviewMergeRequestCard({
4742
4752
  disabled: !canAct || isAnyProcessing,
4743
4753
  onPress: onApprove,
4744
4754
  iconOnly: !isExpanded,
4745
- children: isProcessing ? /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4746
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_native37.ActivityIndicator, { size: "small", color: "#FFFFFF" }),
4747
- isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Processing" }) : null
4748
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4749
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react_native8.Check, { size: 18, color: "#FFFFFF" }),
4750
- isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Approve" }) : null
4755
+ children: isProcessing ? /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4756
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native37.ActivityIndicator, { size: "small", color: "#FFFFFF" }),
4757
+ isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Processing" }) : null
4758
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4759
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react_native8.Check, { size: 18, color: "#FFFFFF" }),
4760
+ isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Approve" }) : null
4751
4761
  ] })
4752
4762
  }
4753
4763
  )
4754
4764
  ] }),
4755
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4765
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4756
4766
  ReviewMergeRequestActionButton,
4757
4767
  {
4758
4768
  accessibilityLabel: "Test",
@@ -4760,9 +4770,9 @@ function ReviewMergeRequestCard({
4760
4770
  disabled: isBuilding || isTestingThis,
4761
4771
  onPress: onTest,
4762
4772
  iconOnly: !isExpanded,
4763
- children: isTestingThis ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_native37.ActivityIndicator, { size: "small", color: "#888" }) : /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4764
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react_native8.Play, { size: 14, color: theme.colors.text }),
4765
- isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Text, { style: { fontSize: 13, color: theme.colors.text, fontWeight: theme.typography.fontWeight.semibold }, children: "Test" }) : null
4773
+ children: isTestingThis ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native37.ActivityIndicator, { size: "small", color: "#888" }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native37.View, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4774
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react_native8.Play, { size: 14, color: theme.colors.text }),
4775
+ isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Text, { style: { fontSize: 13, color: theme.colors.text, fontWeight: theme.typography.fontWeight.semibold }, children: "Test" }) : null
4766
4776
  ] })
4767
4777
  }
4768
4778
  )
@@ -4773,7 +4783,7 @@ function ReviewMergeRequestCard({
4773
4783
  }
4774
4784
 
4775
4785
  // src/components/merge-requests/ReviewMergeRequestCarousel.tsx
4776
- var import_jsx_runtime40 = require("react/jsx-runtime");
4786
+ var import_jsx_runtime41 = require("react/jsx-runtime");
4777
4787
  function ReviewMergeRequestCarousel({
4778
4788
  mergeRequests,
4779
4789
  creatorStatsById,
@@ -4795,8 +4805,8 @@ function ReviewMergeRequestCarousel({
4795
4805
  const snapInterval = cardWidth + gap;
4796
4806
  const dotColor = theme.scheme === "dark" ? "#FFFFFF" : "#000000";
4797
4807
  if (mergeRequests.length === 0) return null;
4798
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native38.View, { style: [{ marginHorizontal: -theme.spacing.lg }, style], children: [
4799
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4808
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_react_native38.View, { style: [{ marginHorizontal: -theme.spacing.lg }, style], children: [
4809
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4800
4810
  import_react_native38.FlatList,
4801
4811
  {
4802
4812
  horizontal: true,
@@ -4804,13 +4814,13 @@ function ReviewMergeRequestCarousel({
4804
4814
  keyExtractor: (mr) => mr.id,
4805
4815
  showsHorizontalScrollIndicator: false,
4806
4816
  contentContainerStyle: { paddingHorizontal: theme.spacing.lg, paddingVertical: theme.spacing.sm },
4807
- ItemSeparatorComponent: () => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native38.View, { style: { width: gap } }),
4817
+ ItemSeparatorComponent: () => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_native38.View, { style: { width: gap } }),
4808
4818
  snapToAlignment: "start",
4809
4819
  decelerationRate: "fast",
4810
4820
  snapToInterval: snapInterval,
4811
4821
  disableIntervalMomentum: true,
4812
4822
  style: { paddingRight: peekAmount },
4813
- ListFooterComponent: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native38.View, { style: { width: peekAmount } }),
4823
+ ListFooterComponent: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_native38.View, { style: { width: peekAmount } }),
4814
4824
  onScroll: import_react_native38.Animated.event([{ nativeEvent: { contentOffset: { x: carouselScrollX } } }], {
4815
4825
  useNativeDriver: false
4816
4826
  }),
@@ -4822,7 +4832,7 @@ function ReviewMergeRequestCarousel({
4822
4832
  const isProcessing = Boolean(processingMrId && processingMrId === item.id);
4823
4833
  const isAnyProcessing = Boolean(processingMrId);
4824
4834
  const isTestingThis = Boolean(testingMrId && testingMrId === item.id);
4825
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native38.View, { style: { width: cardWidth }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4835
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_native38.View, { style: { width: cardWidth }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4826
4836
  ReviewMergeRequestCard,
4827
4837
  {
4828
4838
  mr: item,
@@ -4843,7 +4853,7 @@ function ReviewMergeRequestCarousel({
4843
4853
  }
4844
4854
  }
4845
4855
  ),
4846
- mergeRequests.length >= 1 ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native38.View, { style: { flexDirection: "row", justifyContent: "center", columnGap: 8, marginTop: theme.spacing.md }, children: mergeRequests.map((mr, index) => {
4856
+ mergeRequests.length >= 1 ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_native38.View, { style: { flexDirection: "row", justifyContent: "center", columnGap: 8, marginTop: theme.spacing.md }, children: mergeRequests.map((mr, index) => {
4847
4857
  const inputRange = [(index - 1) * snapInterval, index * snapInterval, (index + 1) * snapInterval];
4848
4858
  const scale = carouselScrollX.interpolate({
4849
4859
  inputRange,
@@ -4855,7 +4865,7 @@ function ReviewMergeRequestCarousel({
4855
4865
  outputRange: [0.4, 1, 0.4],
4856
4866
  extrapolate: "clamp"
4857
4867
  });
4858
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4868
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4859
4869
  import_react_native38.Animated.View,
4860
4870
  {
4861
4871
  style: {
@@ -4874,7 +4884,7 @@ function ReviewMergeRequestCarousel({
4874
4884
  }
4875
4885
 
4876
4886
  // src/studio/ui/preview-panel/PreviewCollaborateSection.tsx
4877
- var import_jsx_runtime41 = require("react/jsx-runtime");
4887
+ var import_jsx_runtime42 = require("react/jsx-runtime");
4878
4888
  function PreviewCollaborateSection({
4879
4889
  canSubmitMergeRequest,
4880
4890
  incomingMergeRequests,
@@ -4894,9 +4904,9 @@ function PreviewCollaborateSection({
4894
4904
  const hasSection = canSubmitMergeRequest || incomingMergeRequests.length > 0 || outgoingMergeRequests.length > 0;
4895
4905
  if (!hasSection) return null;
4896
4906
  const showActionsSubtitle = canSubmitMergeRequest && onSubmitMergeRequest || onTestMr && incomingMergeRequests.length > 0;
4897
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
4898
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(SectionTitle, { marginTop: theme.spacing.xl, children: "Collaborate" }),
4899
- showActionsSubtitle ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4907
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
4908
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(SectionTitle, { marginTop: theme.spacing.xl, children: "Collaborate" }),
4909
+ showActionsSubtitle ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4900
4910
  Text,
4901
4911
  {
4902
4912
  style: {
@@ -4911,7 +4921,7 @@ function PreviewCollaborateSection({
4911
4921
  children: "Actions"
4912
4922
  }
4913
4923
  ) : null,
4914
- canSubmitMergeRequest && onSubmitMergeRequest ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4924
+ canSubmitMergeRequest && onSubmitMergeRequest ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4915
4925
  PressableCardRow,
4916
4926
  {
4917
4927
  accessibilityLabel: "Submit merge request",
@@ -4942,7 +4952,7 @@ function PreviewCollaborateSection({
4942
4952
  borderColor: withAlpha("#03DAC6", 0.2),
4943
4953
  marginBottom: theme.spacing.sm
4944
4954
  },
4945
- left: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4955
+ left: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4946
4956
  import_react_native39.View,
4947
4957
  {
4948
4958
  style: {
@@ -4954,15 +4964,15 @@ function PreviewCollaborateSection({
4954
4964
  backgroundColor: withAlpha("#03DAC6", 0.1),
4955
4965
  marginRight: theme.spacing.lg
4956
4966
  },
4957
- children: submittingMr ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_native39.ActivityIndicator, { color: "#03DAC6", size: "small" }) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(merge_default, { width: 20, height: 20, color: "#03DAC6" })
4967
+ children: submittingMr ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_native39.ActivityIndicator, { color: "#03DAC6", size: "small" }) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(MergeIcon, { width: 20, height: 20, color: "#03DAC6" })
4958
4968
  }
4959
4969
  ),
4960
- title: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: "Submit your new changes" }),
4961
- subtitle: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: "Ask to merge this remix to the original app" }),
4962
- right: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react_native9.Send, { size: 16, color: "#03DAC6" })
4970
+ title: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: "Submit your new changes" }),
4971
+ subtitle: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: "Ask to merge this remix to the original app" }),
4972
+ right: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react_native9.Send, { size: 16, color: "#03DAC6" })
4963
4973
  }
4964
4974
  ) : null,
4965
- onTestMr && incomingMergeRequests.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4975
+ onTestMr && incomingMergeRequests.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4966
4976
  ReviewMergeRequestCarousel,
4967
4977
  {
4968
4978
  mergeRequests: incomingMergeRequests,
@@ -4975,8 +4985,8 @@ function PreviewCollaborateSection({
4975
4985
  onTest: (mr) => onTestMr ? onTestMr(mr) : void 0
4976
4986
  }
4977
4987
  ) : null,
4978
- outgoingMergeRequests.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
4979
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4988
+ outgoingMergeRequests.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
4989
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4980
4990
  Text,
4981
4991
  {
4982
4992
  style: {
@@ -4992,7 +5002,7 @@ function PreviewCollaborateSection({
4992
5002
  children: "History"
4993
5003
  }
4994
5004
  ),
4995
- outgoingMergeRequests.map((mr) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_native39.View, { style: { marginBottom: theme.spacing.sm }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(MergeRequestStatusCard, { mergeRequest: toMergeRequestSummary(mr) }) }, mr.id))
5005
+ outgoingMergeRequests.map((mr) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_native39.View, { style: { marginBottom: theme.spacing.sm }, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(MergeRequestStatusCard, { mergeRequest: toMergeRequestSummary(mr) }) }, mr.id))
4996
5006
  ] }) : null
4997
5007
  ] });
4998
5008
  }
@@ -5283,7 +5293,7 @@ function usePreviewPanelData(params) {
5283
5293
  }
5284
5294
 
5285
5295
  // src/studio/ui/PreviewPanel.tsx
5286
- var import_jsx_runtime42 = require("react/jsx-runtime");
5296
+ var import_jsx_runtime43 = require("react/jsx-runtime");
5287
5297
  function PreviewPanel({
5288
5298
  app,
5289
5299
  loading,
@@ -5314,16 +5324,16 @@ function PreviewPanel({
5314
5324
  onOpenComments,
5315
5325
  commentCountOverride
5316
5326
  });
5317
- const header = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(PreviewPanelHeader, { isOwner, onClose, onNavigateHome, onGoToChat });
5327
+ const header = /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(PreviewPanelHeader, { isOwner, onClose, onNavigateHome, onGoToChat });
5318
5328
  if (loading || !app) {
5319
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(PreviewPage, { header, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_react_native40.View, { style: { flex: 1, justifyContent: "center", alignItems: "center", padding: 24 }, children: [
5320
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_native40.ActivityIndicator, {}),
5321
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_native40.View, { style: { height: 12 } }),
5322
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Text, { variant: "bodyMuted", children: "Loading app\u2026" })
5329
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(PreviewPage, { header, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_react_native40.View, { style: { flex: 1, justifyContent: "center", alignItems: "center", padding: 24 }, children: [
5330
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native40.ActivityIndicator, {}),
5331
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native40.View, { style: { height: 12 } }),
5332
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Text, { variant: "bodyMuted", children: "Loading app\u2026" })
5323
5333
  ] }) });
5324
5334
  }
5325
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(PreviewPage, { header, children: [
5326
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
5335
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(PreviewPage, { header, children: [
5336
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
5327
5337
  PreviewHeroSection,
5328
5338
  {
5329
5339
  appStatus: app.status,
@@ -5341,8 +5351,8 @@ function PreviewPanel({
5341
5351
  }
5342
5352
  }
5343
5353
  ),
5344
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(PreviewMetaSection, { app, isOwner, creator, downloadsCount: insights.downloads }),
5345
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
5354
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(PreviewMetaSection, { app, isOwner, creator, downloadsCount: insights.downloads }),
5355
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
5346
5356
  PreviewCustomizeSection,
5347
5357
  {
5348
5358
  app,
@@ -5353,7 +5363,7 @@ function PreviewPanel({
5353
5363
  onStartDraw
5354
5364
  }
5355
5365
  ),
5356
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
5366
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
5357
5367
  PreviewCollaborateSection,
5358
5368
  {
5359
5369
  canSubmitMergeRequest,
@@ -5389,7 +5399,7 @@ var import_bottom_sheet5 = require("@gorhom/bottom-sheet");
5389
5399
  // src/components/chat/ChatMessageBubble.tsx
5390
5400
  var import_react_native41 = require("react-native");
5391
5401
  var import_lucide_react_native10 = require("lucide-react-native");
5392
- var import_jsx_runtime43 = require("react/jsx-runtime");
5402
+ var import_jsx_runtime44 = require("react/jsx-runtime");
5393
5403
  function ChatMessageBubble({ message, renderContent, style }) {
5394
5404
  var _a, _b;
5395
5405
  const theme = useTheme();
@@ -5403,7 +5413,7 @@ function ChatMessageBubble({ message, renderContent, style }) {
5403
5413
  const bubbleVariant = isHuman ? "surface" : "surfaceRaised";
5404
5414
  const cornerStyle = isHuman ? { borderTopRightRadius: 0 } : { borderTopLeftRadius: 0 };
5405
5415
  const bodyColor = metaStatus === "success" ? theme.colors.success : metaStatus === "error" ? theme.colors.danger : void 0;
5406
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native41.View, { style: [align, style], children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
5416
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_react_native41.View, { style: [align, style], children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
5407
5417
  Surface,
5408
5418
  {
5409
5419
  variant: bubbleVariant,
@@ -5418,10 +5428,10 @@ function ChatMessageBubble({ message, renderContent, style }) {
5418
5428
  },
5419
5429
  cornerStyle
5420
5430
  ],
5421
- children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_react_native41.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
5422
- isMergeCompleted ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react_native10.CheckCheck, { size: 16, color: theme.colors.success, style: { marginRight: theme.spacing.sm } }) : null,
5423
- isMergeApproved ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react_native10.GitMerge, { size: 16, color: theme.colors.text, style: { marginRight: theme.spacing.sm } }) : null,
5424
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native41.View, { style: { flexShrink: 1, minWidth: 0 }, children: renderContent ? renderContent(message) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(MarkdownText, { markdown: message.content, variant: "chat", bodyColor }) })
5431
+ children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_react_native41.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
5432
+ isMergeCompleted ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react_native10.CheckCheck, { size: 16, color: theme.colors.success, style: { marginRight: theme.spacing.sm } }) : null,
5433
+ isMergeApproved ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react_native10.GitMerge, { size: 16, color: theme.colors.text, style: { marginRight: theme.spacing.sm } }) : null,
5434
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_react_native41.View, { style: { flexShrink: 1, minWidth: 0 }, children: renderContent ? renderContent(message) : /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(MarkdownText, { markdown: message.content, variant: "chat", bodyColor }) })
5425
5435
  ] })
5426
5436
  }
5427
5437
  ) });
@@ -5430,7 +5440,7 @@ function ChatMessageBubble({ message, renderContent, style }) {
5430
5440
  // src/components/chat/TypingIndicator.tsx
5431
5441
  var React31 = __toESM(require("react"));
5432
5442
  var import_react_native42 = require("react-native");
5433
- var import_jsx_runtime44 = require("react/jsx-runtime");
5443
+ var import_jsx_runtime45 = require("react/jsx-runtime");
5434
5444
  function TypingIndicator({ style }) {
5435
5445
  const theme = useTheme();
5436
5446
  const dotColor = theme.colors.textSubtle;
@@ -5453,7 +5463,7 @@ function TypingIndicator({ style }) {
5453
5463
  loops.forEach((l) => l.stop());
5454
5464
  };
5455
5465
  }, [anims]);
5456
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_react_native42.View, { style: [{ flexDirection: "row", alignItems: "center" }, style], children: anims.map((a, i) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
5466
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_react_native42.View, { style: [{ flexDirection: "row", alignItems: "center" }, style], children: anims.map((a, i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
5457
5467
  import_react_native42.Animated.View,
5458
5468
  {
5459
5469
  style: {
@@ -5471,7 +5481,7 @@ function TypingIndicator({ style }) {
5471
5481
  }
5472
5482
 
5473
5483
  // src/components/chat/ChatMessageList.tsx
5474
- var import_jsx_runtime45 = require("react/jsx-runtime");
5484
+ var import_jsx_runtime46 = require("react/jsx-runtime");
5475
5485
  var ChatMessageList = React32.forwardRef(
5476
5486
  ({
5477
5487
  messages,
@@ -5530,7 +5540,7 @@ var ChatMessageList = React32.forwardRef(
5530
5540
  }
5531
5541
  return void 0;
5532
5542
  }, [showTypingIndicator, scrollToBottom]);
5533
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
5543
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
5534
5544
  import_bottom_sheet5.BottomSheetFlatList,
5535
5545
  {
5536
5546
  ref: listRef,
@@ -5547,8 +5557,8 @@ var ChatMessageList = React32.forwardRef(
5547
5557
  },
5548
5558
  contentStyle
5549
5559
  ],
5550
- renderItem: ({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_react_native43.View, { style: { marginTop: index === 0 ? 0 : theme.spacing.sm }, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ChatMessageBubble, { message: item, renderContent: renderMessageContent }) }),
5551
- ListFooterComponent: showTypingIndicator ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_react_native43.View, { style: { marginTop: theme.spacing.sm, alignSelf: "flex-start", paddingHorizontal: theme.spacing.lg }, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(TypingIndicator, {}) }) : null,
5560
+ renderItem: ({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_react_native43.View, { style: { marginTop: index === 0 ? 0 : theme.spacing.sm }, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ChatMessageBubble, { message: item, renderContent: renderMessageContent }) }),
5561
+ ListFooterComponent: showTypingIndicator ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_react_native43.View, { style: { marginTop: theme.spacing.sm, alignSelf: "flex-start", paddingHorizontal: theme.spacing.lg }, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TypingIndicator, {}) }) : null,
5552
5562
  maintainVisibleContentPosition: { minIndexForVisible: 0, autoscrollToTopThreshold: nearBottomThreshold }
5553
5563
  }
5554
5564
  );
@@ -5557,7 +5567,7 @@ var ChatMessageList = React32.forwardRef(
5557
5567
  ChatMessageList.displayName = "ChatMessageList";
5558
5568
 
5559
5569
  // src/components/chat/ChatPage.tsx
5560
- var import_jsx_runtime46 = require("react/jsx-runtime");
5570
+ var import_jsx_runtime47 = require("react/jsx-runtime");
5561
5571
  function ChatPage({
5562
5572
  header,
5563
5573
  messages,
@@ -5572,11 +5582,11 @@ function ChatPage({
5572
5582
  }) {
5573
5583
  const theme = useTheme();
5574
5584
  const [composerHeight, setComposerHeight] = React33.useState(0);
5575
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_react_native44.View, { style: [{ flex: 1 }, style], children: [
5576
- header ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_react_native44.View, { children: header }) : null,
5577
- topBanner ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_react_native44.View, { style: { paddingHorizontal: theme.spacing.lg, paddingTop: theme.spacing.sm }, children: topBanner }) : null,
5578
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_react_native44.View, { style: { flex: 1 }, children: [
5579
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
5585
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_react_native44.View, { style: [{ flex: 1 }, style], children: [
5586
+ header ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_react_native44.View, { children: header }) : null,
5587
+ topBanner ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_react_native44.View, { style: { paddingHorizontal: theme.spacing.lg, paddingTop: theme.spacing.sm }, children: topBanner }) : null,
5588
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_react_native44.View, { style: { flex: 1 }, children: [
5589
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5580
5590
  ChatMessageList,
5581
5591
  {
5582
5592
  ref: listRef,
@@ -5589,7 +5599,7 @@ function ChatPage({
5589
5599
  ),
5590
5600
  overlay
5591
5601
  ] }),
5592
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
5602
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5593
5603
  ChatComposer,
5594
5604
  {
5595
5605
  ...composer,
@@ -5604,7 +5614,7 @@ function ChatPage({
5604
5614
  var React34 = __toESM(require("react"));
5605
5615
  var import_react_native45 = require("react-native");
5606
5616
  var import_react_native_reanimated2 = __toESM(require("react-native-reanimated"));
5607
- var import_jsx_runtime47 = require("react/jsx-runtime");
5617
+ var import_jsx_runtime48 = require("react/jsx-runtime");
5608
5618
  function ScrollToBottomButton({ visible, onPress, children, style }) {
5609
5619
  const theme = useTheme();
5610
5620
  const progress = (0, import_react_native_reanimated2.useSharedValue)(visible ? 1 : 0);
@@ -5618,7 +5628,7 @@ function ScrollToBottomButton({ visible, onPress, children, style }) {
5618
5628
  }));
5619
5629
  const bg = theme.scheme === "dark" ? "rgba(39,39,42,0.9)" : "rgba(244,244,245,0.95)";
5620
5630
  const border = theme.scheme === "dark" ? withAlpha("#FFFFFF", 0.12) : withAlpha("#000000", 0.08);
5621
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5631
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5622
5632
  import_react_native_reanimated2.default.View,
5623
5633
  {
5624
5634
  pointerEvents: visible ? "auto" : "none",
@@ -5632,7 +5642,7 @@ function ScrollToBottomButton({ visible, onPress, children, style }) {
5632
5642
  style,
5633
5643
  animStyle
5634
5644
  ],
5635
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5645
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5636
5646
  import_react_native45.View,
5637
5647
  {
5638
5648
  style: {
@@ -5651,7 +5661,7 @@ function ScrollToBottomButton({ visible, onPress, children, style }) {
5651
5661
  elevation: 5,
5652
5662
  opacity: pressed ? 0.85 : 1
5653
5663
  },
5654
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5664
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5655
5665
  import_react_native45.Pressable,
5656
5666
  {
5657
5667
  onPress,
@@ -5670,7 +5680,7 @@ function ScrollToBottomButton({ visible, onPress, children, style }) {
5670
5680
 
5671
5681
  // src/components/chat/ChatHeader.tsx
5672
5682
  var import_react_native46 = require("react-native");
5673
- var import_jsx_runtime48 = require("react/jsx-runtime");
5683
+ var import_jsx_runtime49 = require("react/jsx-runtime");
5674
5684
  function ChatHeader({ left, right, center, style }) {
5675
5685
  const flattenedStyle = import_react_native46.StyleSheet.flatten([
5676
5686
  {
@@ -5678,7 +5688,7 @@ function ChatHeader({ left, right, center, style }) {
5678
5688
  },
5679
5689
  style
5680
5690
  ]);
5681
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5691
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
5682
5692
  StudioSheetHeader,
5683
5693
  {
5684
5694
  left,
@@ -5691,12 +5701,12 @@ function ChatHeader({ left, right, center, style }) {
5691
5701
 
5692
5702
  // src/components/chat/ForkNoticeBanner.tsx
5693
5703
  var import_react_native47 = require("react-native");
5694
- var import_jsx_runtime49 = require("react/jsx-runtime");
5704
+ var import_jsx_runtime50 = require("react/jsx-runtime");
5695
5705
  function ForkNoticeBanner({ isOwner = true, title, description, style }) {
5696
5706
  const theme = useTheme();
5697
5707
  const resolvedTitle = title ?? (isOwner ? "Remixed app" : "Remix app");
5698
5708
  const resolvedDescription = description ?? (isOwner ? "Any changes you make will be a remix of the original app. You can view the edited version in the Remix tab in your apps page." : "Once you make edits, this remixed version will appear on your Remixed apps page.");
5699
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
5709
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5700
5710
  Card,
5701
5711
  {
5702
5712
  variant: "surfaceRaised",
@@ -5711,8 +5721,8 @@ function ForkNoticeBanner({ isOwner = true, title, description, style }) {
5711
5721
  },
5712
5722
  style
5713
5723
  ],
5714
- children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_react_native47.View, { style: { minWidth: 0 }, children: [
5715
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
5724
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native47.View, { style: { minWidth: 0 }, children: [
5725
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5716
5726
  Text,
5717
5727
  {
5718
5728
  style: {
@@ -5726,7 +5736,7 @@ function ForkNoticeBanner({ isOwner = true, title, description, style }) {
5726
5736
  children: resolvedTitle
5727
5737
  }
5728
5738
  ),
5729
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
5739
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5730
5740
  Text,
5731
5741
  {
5732
5742
  style: {
@@ -5744,7 +5754,7 @@ function ForkNoticeBanner({ isOwner = true, title, description, style }) {
5744
5754
  }
5745
5755
 
5746
5756
  // src/studio/ui/ChatPanel.tsx
5747
- var import_jsx_runtime50 = require("react/jsx-runtime");
5757
+ var import_jsx_runtime51 = require("react/jsx-runtime");
5748
5758
  function ChatPanel({
5749
5759
  title = "Chat",
5750
5760
  autoFocusComposer = false,
@@ -5782,21 +5792,21 @@ function ChatPanel({
5782
5792
  var _a;
5783
5793
  (_a = listRef.current) == null ? void 0 : _a.scrollToBottom({ animated: true });
5784
5794
  }, []);
5785
- const header = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5795
+ const header = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
5786
5796
  ChatHeader,
5787
5797
  {
5788
- left: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native48.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
5789
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(StudioSheetHeaderIconButton, { onPress: onBack, accessibilityLabel: "Back", style: { marginRight: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(IconBack, { size: 20, colorToken: "floatingContent" }) }),
5790
- onNavigateHome ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(StudioSheetHeaderIconButton, { onPress: onNavigateHome, accessibilityLabel: "Home", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(IconHome, { size: 20, colorToken: "floatingContent" }) }) : null
5798
+ left: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_react_native48.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
5799
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(StudioSheetHeaderIconButton, { onPress: onBack, accessibilityLabel: "Back", style: { marginRight: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(IconBack, { size: 20, colorToken: "floatingContent" }) }),
5800
+ onNavigateHome ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(StudioSheetHeaderIconButton, { onPress: onNavigateHome, accessibilityLabel: "Home", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(IconHome, { size: 20, colorToken: "floatingContent" }) }) : null
5791
5801
  ] }),
5792
- right: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native48.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
5793
- onStartDraw ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(StudioSheetHeaderIconButton, { onPress: onStartDraw, accessibilityLabel: "Draw", intent: "danger", style: { marginRight: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(IconDraw, { size: 20, colorToken: "onDanger" }) }) : null,
5794
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(StudioSheetHeaderIconButton, { onPress: onClose, accessibilityLabel: "Close", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(IconClose, { size: 20, colorToken: "floatingContent" }) })
5802
+ right: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_react_native48.View, { style: { flexDirection: "row", alignItems: "center" }, children: [
5803
+ onStartDraw ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(StudioSheetHeaderIconButton, { onPress: onStartDraw, accessibilityLabel: "Draw", intent: "danger", style: { marginRight: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(IconDraw, { size: 20, colorToken: "onDanger" }) }) : null,
5804
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(StudioSheetHeaderIconButton, { onPress: onClose, accessibilityLabel: "Close", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(IconClose, { size: 20, colorToken: "floatingContent" }) })
5795
5805
  ] }),
5796
5806
  center: null
5797
5807
  }
5798
5808
  );
5799
- const topBanner = shouldForkOnEdit ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5809
+ const topBanner = shouldForkOnEdit ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
5800
5810
  ForkNoticeBanner,
5801
5811
  {
5802
5812
  isOwner: !shouldForkOnEdit,
@@ -5805,17 +5815,17 @@ function ChatPanel({
5805
5815
  ) : null;
5806
5816
  const showMessagesLoading = Boolean(loading) && messages.length === 0 || forking;
5807
5817
  if (showMessagesLoading) {
5808
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native48.View, { style: { flex: 1 }, children: [
5809
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native48.View, { children: header }),
5810
- topBanner ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native48.View, { style: { paddingHorizontal: 16, paddingTop: 8 }, children: topBanner }) : null,
5811
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native48.View, { style: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 24, paddingVertical: 12 }, children: [
5812
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native48.ActivityIndicator, {}),
5813
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native48.View, { style: { height: 12 } }),
5814
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Text, { variant: "bodyMuted", children: forking ? "Creating your copy\u2026" : "Loading messages\u2026" })
5818
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_react_native48.View, { style: { flex: 1 }, children: [
5819
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react_native48.View, { children: header }),
5820
+ topBanner ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react_native48.View, { style: { paddingHorizontal: 16, paddingTop: 8 }, children: topBanner }) : null,
5821
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_react_native48.View, { style: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 24, paddingVertical: 12 }, children: [
5822
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react_native48.ActivityIndicator, {}),
5823
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react_native48.View, { style: { height: 12 } }),
5824
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Text, { variant: "bodyMuted", children: forking ? "Creating your copy\u2026" : "Loading messages\u2026" })
5815
5825
  ] })
5816
5826
  ] });
5817
5827
  }
5818
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5828
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
5819
5829
  ChatPage,
5820
5830
  {
5821
5831
  header,
@@ -5824,13 +5834,13 @@ function ChatPanel({
5824
5834
  topBanner,
5825
5835
  listRef,
5826
5836
  onNearBottomChange: setNearBottom,
5827
- overlay: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5837
+ overlay: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
5828
5838
  ScrollToBottomButton,
5829
5839
  {
5830
5840
  visible: !nearBottom,
5831
5841
  onPress: handleScrollToBottom,
5832
5842
  style: { bottom: 80 },
5833
- children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(IconArrowDown, { size: 20, colorToken: "floatingContent" })
5843
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(IconArrowDown, { size: 20, colorToken: "floatingContent" })
5834
5844
  }
5835
5845
  ),
5836
5846
  composer: {
@@ -5853,7 +5863,7 @@ var import_react_native50 = require("react-native");
5853
5863
 
5854
5864
  // src/components/primitives/Modal.tsx
5855
5865
  var import_react_native49 = require("react-native");
5856
- var import_jsx_runtime51 = require("react/jsx-runtime");
5866
+ var import_jsx_runtime52 = require("react/jsx-runtime");
5857
5867
  function Modal({
5858
5868
  visible,
5859
5869
  onRequestClose,
@@ -5862,15 +5872,15 @@ function Modal({
5862
5872
  contentStyle
5863
5873
  }) {
5864
5874
  const theme = useTheme();
5865
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
5875
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5866
5876
  import_react_native49.Modal,
5867
5877
  {
5868
5878
  visible,
5869
5879
  transparent: true,
5870
5880
  animationType: "fade",
5871
5881
  onRequestClose,
5872
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_react_native49.View, { style: { flex: 1, backgroundColor: theme.colors.backdrop, justifyContent: "center", padding: theme.spacing.lg }, children: [
5873
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
5882
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react_native49.View, { style: { flex: 1, backgroundColor: theme.colors.backdrop, justifyContent: "center", padding: theme.spacing.lg }, children: [
5883
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5874
5884
  import_react_native49.Pressable,
5875
5885
  {
5876
5886
  accessibilityRole: "button",
@@ -5878,14 +5888,14 @@ function Modal({
5878
5888
  style: { position: "absolute", inset: 0 }
5879
5889
  }
5880
5890
  ),
5881
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Card, { variant: "surfaceRaised", padded: true, style: [{ borderRadius: theme.radii.xl }, contentStyle], children })
5891
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Card, { variant: "surfaceRaised", padded: true, style: [{ borderRadius: theme.radii.xl }, contentStyle], children })
5882
5892
  ] })
5883
5893
  }
5884
5894
  );
5885
5895
  }
5886
5896
 
5887
5897
  // src/components/dialogs/ConfirmMergeRequestDialog.tsx
5888
- var import_jsx_runtime52 = require("react/jsx-runtime");
5898
+ var import_jsx_runtime53 = require("react/jsx-runtime");
5889
5899
  function ConfirmMergeRequestDialog({
5890
5900
  visible,
5891
5901
  onOpenChange,
@@ -5915,7 +5925,7 @@ function ConfirmMergeRequestDialog({
5915
5925
  justifyContent: "center",
5916
5926
  alignSelf: "stretch"
5917
5927
  };
5918
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
5928
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
5919
5929
  Modal,
5920
5930
  {
5921
5931
  visible,
@@ -5926,7 +5936,7 @@ function ConfirmMergeRequestDialog({
5926
5936
  backgroundColor: theme.colors.background
5927
5937
  },
5928
5938
  children: [
5929
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.View, { children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5939
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_native50.View, { children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
5930
5940
  Text,
5931
5941
  {
5932
5942
  style: {
@@ -5938,8 +5948,8 @@ function ConfirmMergeRequestDialog({
5938
5948
  children: "Are you sure you want to approve this merge request?"
5939
5949
  }
5940
5950
  ) }),
5941
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react_native50.View, { style: { marginTop: 16 }, children: [
5942
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5951
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_react_native50.View, { style: { marginTop: 16 }, children: [
5952
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
5943
5953
  import_react_native50.View,
5944
5954
  {
5945
5955
  style: [
@@ -5949,7 +5959,7 @@ function ConfirmMergeRequestDialog({
5949
5959
  opacity: canConfirm ? 1 : 0.5
5950
5960
  }
5951
5961
  ],
5952
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5962
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
5953
5963
  import_react_native50.Pressable,
5954
5964
  {
5955
5965
  accessibilityRole: "button",
@@ -5957,13 +5967,13 @@ function ConfirmMergeRequestDialog({
5957
5967
  disabled: !canConfirm,
5958
5968
  onPress: handleConfirm,
5959
5969
  style: [fullWidthButtonBase, { flex: 1 }],
5960
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Text, { style: { textAlign: "center", color: theme.colors.onPrimary }, children: "Approve Merge" })
5970
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Text, { style: { textAlign: "center", color: theme.colors.onPrimary }, children: "Approve Merge" })
5961
5971
  }
5962
5972
  )
5963
5973
  }
5964
5974
  ),
5965
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.View, { style: { height: 8 } }),
5966
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5975
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_native50.View, { style: { height: 8 } }),
5976
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
5967
5977
  import_react_native50.View,
5968
5978
  {
5969
5979
  style: [
@@ -5975,7 +5985,7 @@ function ConfirmMergeRequestDialog({
5975
5985
  opacity: isBuilding || !mergeRequest ? 0.5 : 1
5976
5986
  }
5977
5987
  ],
5978
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5988
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
5979
5989
  import_react_native50.Pressable,
5980
5990
  {
5981
5991
  accessibilityRole: "button",
@@ -5983,13 +5993,13 @@ function ConfirmMergeRequestDialog({
5983
5993
  disabled: isBuilding || !mergeRequest,
5984
5994
  onPress: handleTestFirst,
5985
5995
  style: [fullWidthButtonBase, { flex: 1 }],
5986
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Text, { style: { textAlign: "center", color: theme.colors.text }, children: isBuilding ? "Preparing\u2026" : "Test edits first" })
5996
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Text, { style: { textAlign: "center", color: theme.colors.text }, children: isBuilding ? "Preparing\u2026" : "Test edits first" })
5987
5997
  }
5988
5998
  )
5989
5999
  }
5990
6000
  ),
5991
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.View, { style: { height: 8 } }),
5992
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
6001
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_native50.View, { style: { height: 8 } }),
6002
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
5993
6003
  import_react_native50.View,
5994
6004
  {
5995
6005
  style: [
@@ -6000,14 +6010,14 @@ function ConfirmMergeRequestDialog({
6000
6010
  borderColor: theme.colors.border
6001
6011
  }
6002
6012
  ],
6003
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
6013
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
6004
6014
  import_react_native50.Pressable,
6005
6015
  {
6006
6016
  accessibilityRole: "button",
6007
6017
  accessibilityLabel: "Cancel",
6008
6018
  onPress: close,
6009
6019
  style: [fullWidthButtonBase, { flex: 1 }],
6010
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Text, { style: { textAlign: "center", color: theme.colors.text }, children: "Cancel" })
6020
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Text, { style: { textAlign: "center", color: theme.colors.text }, children: "Cancel" })
6011
6021
  }
6012
6022
  )
6013
6023
  }
@@ -6019,7 +6029,7 @@ function ConfirmMergeRequestDialog({
6019
6029
  }
6020
6030
 
6021
6031
  // src/studio/ui/ConfirmMergeFlow.tsx
6022
- var import_jsx_runtime53 = require("react/jsx-runtime");
6032
+ var import_jsx_runtime54 = require("react/jsx-runtime");
6023
6033
  function ConfirmMergeFlow({
6024
6034
  visible,
6025
6035
  onOpenChange,
@@ -6030,7 +6040,7 @@ function ConfirmMergeFlow({
6030
6040
  onConfirm,
6031
6041
  onTestFirst
6032
6042
  }) {
6033
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
6043
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6034
6044
  ConfirmMergeRequestDialog,
6035
6045
  {
6036
6046
  visible,
@@ -6052,7 +6062,7 @@ function ConfirmMergeFlow({
6052
6062
  }
6053
6063
 
6054
6064
  // src/studio/ui/StudioOverlay.tsx
6055
- var import_jsx_runtime54 = require("react/jsx-runtime");
6065
+ var import_jsx_runtime55 = require("react/jsx-runtime");
6056
6066
  function StudioOverlay({
6057
6067
  captureTargetRef,
6058
6068
  app,
@@ -6140,14 +6150,14 @@ function StudioOverlay({
6140
6150
  },
6141
6151
  [closeSheet, onTestMr]
6142
6152
  );
6143
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
6144
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(EdgeGlowFrame, { visible: isTesting, role: "accent", thickness: 40, intensity: 1 }),
6145
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(StudioBottomSheet, { open: sheetOpen, onOpenChange: setSheetOpen, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6153
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment, { children: [
6154
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(EdgeGlowFrame, { visible: isTesting, role: "accent", thickness: 40, intensity: 1 }),
6155
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(StudioBottomSheet, { open: sheetOpen, onOpenChange: setSheetOpen, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6146
6156
  StudioSheetPager,
6147
6157
  {
6148
6158
  activePage,
6149
6159
  width,
6150
- preview: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6160
+ preview: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6151
6161
  PreviewPanel,
6152
6162
  {
6153
6163
  app,
@@ -6173,7 +6183,7 @@ function StudioOverlay({
6173
6183
  commentCountOverride: commentsCount ?? void 0
6174
6184
  }
6175
6185
  ),
6176
- chat: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6186
+ chat: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6177
6187
  ChatPanel,
6178
6188
  {
6179
6189
  messages: chatMessages,
@@ -6196,7 +6206,7 @@ function StudioOverlay({
6196
6206
  )
6197
6207
  }
6198
6208
  ) }),
6199
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6209
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6200
6210
  FloatingDraggableButton,
6201
6211
  {
6202
6212
  visible: !sheetOpen && !drawing,
@@ -6204,10 +6214,10 @@ function StudioOverlay({
6204
6214
  badgeCount: incomingMergeRequests.length,
6205
6215
  onPress: toggleSheet,
6206
6216
  isLoading: (app == null ? void 0 : app.status) === "editing",
6207
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native51.View, { style: { width: 28, height: 28, alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(merge_default, { width: 24, height: 24, color: theme.colors.floatingContent }) })
6217
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react_native51.View, { style: { width: 28, height: 28, alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(MergeIcon, { width: 24, height: 24, color: theme.colors.floatingContent }) })
6208
6218
  }
6209
6219
  ),
6210
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6220
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6211
6221
  DrawModeOverlay,
6212
6222
  {
6213
6223
  visible: drawing,
@@ -6216,7 +6226,7 @@ function StudioOverlay({
6216
6226
  onCapture: handleDrawCapture
6217
6227
  }
6218
6228
  ),
6219
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6229
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6220
6230
  ConfirmMergeFlow,
6221
6231
  {
6222
6232
  visible: Boolean(confirmMr),
@@ -6229,7 +6239,7 @@ function StudioOverlay({
6229
6239
  onTestFirst: handleTestMr
6230
6240
  }
6231
6241
  ),
6232
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6242
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6233
6243
  AppCommentsSheet,
6234
6244
  {
6235
6245
  appId: commentsAppId,
@@ -6242,7 +6252,7 @@ function StudioOverlay({
6242
6252
  }
6243
6253
 
6244
6254
  // src/studio/ComergeStudio.tsx
6245
- var import_jsx_runtime55 = require("react/jsx-runtime");
6255
+ var import_jsx_runtime56 = require("react/jsx-runtime");
6246
6256
  function ComergeStudio({
6247
6257
  appId,
6248
6258
  appKey = "MicroMain",
@@ -6259,7 +6269,7 @@ function ComergeStudio({
6259
6269
  setPendingRuntimeTargetAppId(null);
6260
6270
  }, [appId]);
6261
6271
  const captureTargetRef = React38.useRef(null);
6262
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(StudioBootstrap, { children: ({ userId }) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_bottom_sheet6.BottomSheetModalProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6272
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(StudioBootstrap, { children: ({ userId }) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_bottom_sheet6.BottomSheetModalProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
6263
6273
  ComergeStudioInner,
6264
6274
  {
6265
6275
  userId,
@@ -6352,9 +6362,9 @@ function ComergeStudioInner({
6352
6362
  const payloadType = typeof ((_a = last.payload) == null ? void 0 : _a.type) === "string" ? String(last.payload.type) : void 0;
6353
6363
  return payloadType !== "outcome";
6354
6364
  }, [thread.raw]);
6355
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react_native52.View, { style: [{ flex: 1 }, style], children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_react_native52.View, { ref: captureTargetRef, style: { flex: 1 }, collapsable: false, children: [
6356
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(RuntimeRenderer, { appKey, bundlePath: bundle.bundlePath, renderToken: bundle.renderToken }),
6357
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6365
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native52.View, { style: [{ flex: 1 }, style], children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_react_native52.View, { ref: captureTargetRef, style: { flex: 1 }, collapsable: false, children: [
6366
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(RuntimeRenderer, { appKey, bundlePath: bundle.bundlePath, renderToken: bundle.renderToken }),
6367
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
6358
6368
  StudioOverlay,
6359
6369
  {
6360
6370
  captureTargetRef,