@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.mjs CHANGED
@@ -3852,11 +3852,21 @@ import { Pressable as Pressable7, View as View21 } from "react-native";
3852
3852
  import { LiquidGlassView as LiquidGlassView6, isLiquidGlassSupported as isLiquidGlassSupported6 } from "@callstack/liquid-glass";
3853
3853
  import { Heart, MessageCircle } from "lucide-react-native";
3854
3854
 
3855
- // src/assets/images/merge.svg
3856
- var merge_default = "./merge-72UG27QV.svg";
3855
+ // src/components/icons/MergeIcon.tsx
3856
+ import Svg2, { Path as Path2 } from "react-native-svg";
3857
+ import { jsx as jsx28 } from "react/jsx-runtime";
3858
+ function MergeIcon({ color = "currentColor", width = 24, height = 24, ...props }) {
3859
+ return /* @__PURE__ */ jsx28(Svg2, { viewBox: "0 0 486 486", width, height, ...props, children: /* @__PURE__ */ jsx28(
3860
+ Path2,
3861
+ {
3862
+ 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",
3863
+ fill: color
3864
+ }
3865
+ ) });
3866
+ }
3857
3867
 
3858
3868
  // src/components/preview/StatsBar.tsx
3859
- import { jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
3869
+ import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
3860
3870
  function StatsBar({
3861
3871
  likeCount,
3862
3872
  commentCount,
@@ -3870,7 +3880,7 @@ function StatsBar({
3870
3880
  }) {
3871
3881
  const theme = useTheme();
3872
3882
  const statsBgColor = theme.scheme === "dark" ? "rgba(24, 24, 27, 0.5)" : "rgba(255, 255, 255, 0.5)";
3873
- return /* @__PURE__ */ jsx28(
3883
+ return /* @__PURE__ */ jsx29(
3874
3884
  View21,
3875
3885
  {
3876
3886
  style: [
@@ -3878,7 +3888,7 @@ function StatsBar({
3878
3888
  centered && { alignItems: "center" },
3879
3889
  style
3880
3890
  ],
3881
- children: /* @__PURE__ */ jsx28(
3891
+ children: /* @__PURE__ */ jsx29(
3882
3892
  LiquidGlassView6,
3883
3893
  {
3884
3894
  style: [
@@ -3888,7 +3898,7 @@ function StatsBar({
3888
3898
  ],
3889
3899
  effect: "clear",
3890
3900
  children: /* @__PURE__ */ jsxs16(View21, { style: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", paddingHorizontal: 16 }, children: [
3891
- /* @__PURE__ */ jsx28(
3901
+ /* @__PURE__ */ jsx29(
3892
3902
  Pressable7,
3893
3903
  {
3894
3904
  disabled: !onPressLike,
@@ -3896,7 +3906,7 @@ function StatsBar({
3896
3906
  hitSlop: 8,
3897
3907
  style: { paddingVertical: 8 },
3898
3908
  children: /* @__PURE__ */ jsxs16(View21, { style: { flexDirection: "row", alignItems: "center" }, children: [
3899
- /* @__PURE__ */ jsx28(
3909
+ /* @__PURE__ */ jsx29(
3900
3910
  Heart,
3901
3911
  {
3902
3912
  size: 16,
@@ -3905,8 +3915,8 @@ function StatsBar({
3905
3915
  fill: isLiked ? theme.colors.danger : "transparent"
3906
3916
  }
3907
3917
  ),
3908
- /* @__PURE__ */ jsx28(View21, { style: { width: 4 } }),
3909
- /* @__PURE__ */ jsx28(
3918
+ /* @__PURE__ */ jsx29(View21, { style: { width: 4 } }),
3919
+ /* @__PURE__ */ jsx29(
3910
3920
  Text,
3911
3921
  {
3912
3922
  variant: "caption",
@@ -3920,7 +3930,7 @@ function StatsBar({
3920
3930
  ] })
3921
3931
  }
3922
3932
  ),
3923
- /* @__PURE__ */ jsx28(
3933
+ /* @__PURE__ */ jsx29(
3924
3934
  Pressable7,
3925
3935
  {
3926
3936
  disabled: !onPressComments,
@@ -3928,16 +3938,16 @@ function StatsBar({
3928
3938
  hitSlop: 8,
3929
3939
  style: { paddingVertical: 8 },
3930
3940
  children: /* @__PURE__ */ jsxs16(View21, { style: { flexDirection: "row", alignItems: "center" }, children: [
3931
- /* @__PURE__ */ jsx28(MessageCircle, { size: 16, strokeWidth: 2.5, color: "#FFFFFF" }),
3932
- /* @__PURE__ */ jsx28(View21, { style: { width: 4 } }),
3933
- /* @__PURE__ */ jsx28(Text, { variant: "caption", style: { color: "#FFFFFF", fontWeight: theme.typography.fontWeight.bold }, children: commentCount })
3941
+ /* @__PURE__ */ jsx29(MessageCircle, { size: 16, strokeWidth: 2.5, color: "#FFFFFF" }),
3942
+ /* @__PURE__ */ jsx29(View21, { style: { width: 4 } }),
3943
+ /* @__PURE__ */ jsx29(Text, { variant: "caption", style: { color: "#FFFFFF", fontWeight: theme.typography.fontWeight.bold }, children: commentCount })
3934
3944
  ] })
3935
3945
  }
3936
3946
  ),
3937
3947
  /* @__PURE__ */ jsxs16(View21, { style: { flexDirection: "row", alignItems: "center", paddingVertical: 8 }, children: [
3938
- /* @__PURE__ */ jsx28(View21, { style: { transform: [{ scaleY: -1 }] }, children: /* @__PURE__ */ jsx28(merge_default, { width: 14, height: 14, color: "#FFFFFF" }) }),
3939
- /* @__PURE__ */ jsx28(View21, { style: { width: 4 } }),
3940
- /* @__PURE__ */ jsx28(Text, { variant: "caption", style: { color: "#FFFFFF", fontWeight: theme.typography.fontWeight.bold }, children: forkCount })
3948
+ /* @__PURE__ */ jsx29(View21, { style: { transform: [{ scaleY: -1 }] }, children: /* @__PURE__ */ jsx29(MergeIcon, { width: 14, height: 14, color: "#FFFFFF" }) }),
3949
+ /* @__PURE__ */ jsx29(View21, { style: { width: 4 } }),
3950
+ /* @__PURE__ */ jsx29(Text, { variant: "caption", style: { color: "#FFFFFF", fontWeight: theme.typography.fontWeight.bold }, children: forkCount })
3941
3951
  ] })
3942
3952
  ] })
3943
3953
  }
@@ -3970,7 +3980,7 @@ var APP_STATUS_LABEL = {
3970
3980
  };
3971
3981
 
3972
3982
  // src/components/preview/PreviewStatusBadge.tsx
3973
- import { jsx as jsx29, jsxs as jsxs17 } from "react/jsx-runtime";
3983
+ import { jsx as jsx30, jsxs as jsxs17 } from "react/jsx-runtime";
3974
3984
  var STATUS_BG = {
3975
3985
  ready: "#10B981",
3976
3986
  // emerald-500
@@ -4011,15 +4021,15 @@ function PreviewStatusBadge({ status }) {
4011
4021
  backgroundColor: STATUS_BG[status]
4012
4022
  },
4013
4023
  children: [
4014
- /* @__PURE__ */ jsx29(IconComp, { size: 12, color: "#FFFFFF", style: { marginRight: 4 } }),
4015
- /* @__PURE__ */ jsx29(Text, { style: { color: "#FFFFFF", fontSize: 11, lineHeight: 14 }, children: label })
4024
+ /* @__PURE__ */ jsx30(IconComp, { size: 12, color: "#FFFFFF", style: { marginRight: 4 } }),
4025
+ /* @__PURE__ */ jsx30(Text, { style: { color: "#FFFFFF", fontSize: 11, lineHeight: 14 }, children: label })
4016
4026
  ]
4017
4027
  }
4018
4028
  );
4019
4029
  }
4020
4030
 
4021
4031
  // src/studio/ui/preview-panel/PreviewHeroSection.tsx
4022
- import { jsx as jsx30 } from "react/jsx-runtime";
4032
+ import { jsx as jsx31 } from "react/jsx-runtime";
4023
4033
  function PreviewHeroSection({
4024
4034
  appStatus,
4025
4035
  showProcessing,
@@ -4028,13 +4038,13 @@ function PreviewHeroSection({
4028
4038
  onImageLoad,
4029
4039
  stats
4030
4040
  }) {
4031
- return /* @__PURE__ */ jsx30(
4041
+ return /* @__PURE__ */ jsx31(
4032
4042
  PreviewHeroCard,
4033
4043
  {
4034
- overlayTopLeft: showProcessing ? /* @__PURE__ */ jsx30(PreviewStatusBadge, { status: appStatus }) : null,
4035
- background: /* @__PURE__ */ jsx30(PreviewPlaceholder, { visible: !imageLoaded }),
4036
- image: /* @__PURE__ */ jsx30(PreviewImage, { uri: imageUrl, onLoad: onImageLoad }),
4037
- overlayBottom: /* @__PURE__ */ jsx30(
4044
+ overlayTopLeft: showProcessing ? /* @__PURE__ */ jsx31(PreviewStatusBadge, { status: appStatus }) : null,
4045
+ background: /* @__PURE__ */ jsx31(PreviewPlaceholder, { visible: !imageLoaded }),
4046
+ image: /* @__PURE__ */ jsx31(PreviewImage, { uri: imageUrl, onLoad: onImageLoad }),
4047
+ overlayBottom: /* @__PURE__ */ jsx31(
4038
4048
  StatsBar,
4039
4049
  {
4040
4050
  likeCount: stats.likeCount,
@@ -4057,7 +4067,7 @@ import { View as View24 } from "react-native";
4057
4067
 
4058
4068
  // src/components/preview/PreviewMetaRow.tsx
4059
4069
  import { View as View23 } from "react-native";
4060
- import { jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
4070
+ import { jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
4061
4071
  function PreviewMetaRow({
4062
4072
  avatarUri,
4063
4073
  creatorName,
@@ -4070,9 +4080,9 @@ function PreviewMetaRow({
4070
4080
  const theme = useTheme();
4071
4081
  return /* @__PURE__ */ jsxs18(View23, { style: [{ alignSelf: "stretch" }, style], children: [
4072
4082
  /* @__PURE__ */ jsxs18(View23, { style: { flexDirection: "row", alignItems: "center" }, children: [
4073
- /* @__PURE__ */ jsx31(Avatar, { uri: avatarUri, name: creatorName, size: 24, style: { marginRight: theme.spacing.sm } }),
4083
+ /* @__PURE__ */ jsx32(Avatar, { uri: avatarUri, name: creatorName, size: 24, style: { marginRight: theme.spacing.sm } }),
4074
4084
  /* @__PURE__ */ jsxs18(View23, { style: { flexDirection: "row", alignItems: "center", flex: 1, minWidth: 0, marginRight: theme.spacing.sm }, children: [
4075
- /* @__PURE__ */ jsx31(
4085
+ /* @__PURE__ */ jsx32(
4076
4086
  Text,
4077
4087
  {
4078
4088
  numberOfLines: 1,
@@ -4086,11 +4096,11 @@ function PreviewMetaRow({
4086
4096
  children: title
4087
4097
  }
4088
4098
  ),
4089
- tag ? /* @__PURE__ */ jsx31(View23, { style: { marginLeft: theme.spacing.sm }, children: tag }) : null
4099
+ tag ? /* @__PURE__ */ jsx32(View23, { style: { marginLeft: theme.spacing.sm }, children: tag }) : null
4090
4100
  ] }),
4091
- rightMetric ? /* @__PURE__ */ jsx31(View23, { children: rightMetric }) : null
4101
+ rightMetric ? /* @__PURE__ */ jsx32(View23, { children: rightMetric }) : null
4092
4102
  ] }),
4093
- subtitle ? /* @__PURE__ */ jsx31(
4103
+ subtitle ? /* @__PURE__ */ jsx32(
4094
4104
  Text,
4095
4105
  {
4096
4106
  numberOfLines: 2,
@@ -4133,18 +4143,18 @@ function statusDescription(status, statusError) {
4133
4143
  }
4134
4144
 
4135
4145
  // src/studio/ui/preview-panel/PreviewMetaSection.tsx
4136
- import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
4146
+ import { jsx as jsx33, jsxs as jsxs19 } from "react/jsx-runtime";
4137
4147
  function PreviewMetaSection({ app, isOwner, creator, downloadsCount }) {
4138
4148
  var _a;
4139
4149
  const theme = useTheme();
4140
- return /* @__PURE__ */ jsx32(
4150
+ return /* @__PURE__ */ jsx33(
4141
4151
  PreviewMetaRow,
4142
4152
  {
4143
4153
  title: app.name,
4144
4154
  subtitle: app.description,
4145
4155
  avatarUri: (creator == null ? void 0 : creator.avatar) ?? null,
4146
4156
  creatorName: (creator == null ? void 0 : creator.name) ?? null,
4147
- tag: isOwner || app.forkedFromAppId ? /* @__PURE__ */ jsx32(View24, { style: { paddingHorizontal: 8, paddingVertical: 2, borderRadius: 999, backgroundColor: "#3700B3" }, children: /* @__PURE__ */ jsx32(Text, { variant: "caption", style: { color: "#fff", fontWeight: theme.typography.fontWeight.semibold }, children: app.forkedFromAppId ? "Remix" : "Owner" }) }) : null,
4157
+ tag: isOwner || app.forkedFromAppId ? /* @__PURE__ */ jsx33(View24, { style: { paddingHorizontal: 8, paddingVertical: 2, borderRadius: 999, backgroundColor: "#3700B3" }, children: /* @__PURE__ */ jsx33(Text, { variant: "caption", style: { color: "#fff", fontWeight: theme.typography.fontWeight.semibold }, children: app.forkedFromAppId ? "Remix" : "Owner" }) }) : null,
4148
4158
  rightMetric: /* @__PURE__ */ jsxs19(
4149
4159
  View24,
4150
4160
  {
@@ -4157,7 +4167,7 @@ function PreviewMetaSection({ app, isOwner, creator, downloadsCount }) {
4157
4167
  backgroundColor: withAlpha(theme.colors.neutral, 0.3)
4158
4168
  },
4159
4169
  children: [
4160
- /* @__PURE__ */ jsx32(
4170
+ /* @__PURE__ */ jsx33(
4161
4171
  Text,
4162
4172
  {
4163
4173
  style: {
@@ -4170,7 +4180,7 @@ function PreviewMetaSection({ app, isOwner, creator, downloadsCount }) {
4170
4180
  children: formatCount(downloadsCount ?? ((_a = app.insights) == null ? void 0 : _a.totalDownloads) ?? 0)
4171
4181
  }
4172
4182
  ),
4173
- /* @__PURE__ */ jsx32(IconPlay, { size: 14, colorToken: "textMuted", fill: theme.colors.textMuted })
4183
+ /* @__PURE__ */ jsx33(IconPlay, { size: 14, colorToken: "textMuted", fill: theme.colors.textMuted })
4174
4184
  ]
4175
4185
  }
4176
4186
  ),
@@ -4184,7 +4194,7 @@ import { ActivityIndicator as ActivityIndicator4, View as View26 } from "react-n
4184
4194
 
4185
4195
  // src/studio/ui/preview-panel/PressableCardRow.tsx
4186
4196
  import { Pressable as Pressable8, View as View25 } from "react-native";
4187
- import { jsx as jsx33, jsxs as jsxs20 } from "react/jsx-runtime";
4197
+ import { jsx as jsx34, jsxs as jsxs20 } from "react/jsx-runtime";
4188
4198
  function PressableCardRow({
4189
4199
  accessibilityLabel,
4190
4200
  onPress,
@@ -4195,7 +4205,7 @@ function PressableCardRow({
4195
4205
  right,
4196
4206
  style
4197
4207
  }) {
4198
- return /* @__PURE__ */ jsx33(
4208
+ return /* @__PURE__ */ jsx34(
4199
4209
  Pressable8,
4200
4210
  {
4201
4211
  accessibilityRole: "button",
@@ -4203,23 +4213,23 @@ function PressableCardRow({
4203
4213
  disabled,
4204
4214
  onPress,
4205
4215
  style: ({ pressed }) => ({ opacity: disabled ? 0.6 : pressed ? 0.85 : 1 }),
4206
- children: /* @__PURE__ */ jsx33(Card, { padded: false, border: false, style, children: /* @__PURE__ */ jsxs20(View25, { style: { flexDirection: "row", alignItems: "center" }, children: [
4216
+ children: /* @__PURE__ */ jsx34(Card, { padded: false, border: false, style, children: /* @__PURE__ */ jsxs20(View25, { style: { flexDirection: "row", alignItems: "center" }, children: [
4207
4217
  left,
4208
4218
  /* @__PURE__ */ jsxs20(View25, { style: { flex: 1, minWidth: 0 }, children: [
4209
4219
  title,
4210
4220
  subtitle ? subtitle : null
4211
4221
  ] }),
4212
- right ? /* @__PURE__ */ jsx33(View25, { style: { marginLeft: 16 }, children: right }) : null
4222
+ right ? /* @__PURE__ */ jsx34(View25, { style: { marginLeft: 16 }, children: right }) : null
4213
4223
  ] }) })
4214
4224
  }
4215
4225
  );
4216
4226
  }
4217
4227
 
4218
4228
  // src/studio/ui/preview-panel/SectionTitle.tsx
4219
- import { jsx as jsx34 } from "react/jsx-runtime";
4229
+ import { jsx as jsx35 } from "react/jsx-runtime";
4220
4230
  function SectionTitle({ children, marginTop }) {
4221
4231
  const theme = useTheme();
4222
- return /* @__PURE__ */ jsx34(
4232
+ return /* @__PURE__ */ jsx35(
4223
4233
  Text,
4224
4234
  {
4225
4235
  style: {
@@ -4238,7 +4248,7 @@ function SectionTitle({ children, marginTop }) {
4238
4248
  }
4239
4249
 
4240
4250
  // src/studio/ui/preview-panel/PreviewCustomizeSection.tsx
4241
- import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs21 } from "react/jsx-runtime";
4251
+ import { Fragment as Fragment4, jsx as jsx36, jsxs as jsxs21 } from "react/jsx-runtime";
4242
4252
  function PreviewCustomizeSection({
4243
4253
  app,
4244
4254
  isOwner,
@@ -4249,7 +4259,7 @@ function PreviewCustomizeSection({
4249
4259
  }) {
4250
4260
  const theme = useTheme();
4251
4261
  return /* @__PURE__ */ jsxs21(Fragment4, { children: [
4252
- /* @__PURE__ */ jsx35(SectionTitle, { children: "Customize" }),
4262
+ /* @__PURE__ */ jsx36(SectionTitle, { children: "Customize" }),
4253
4263
  showProcessing ? /* @__PURE__ */ jsxs21(
4254
4264
  View26,
4255
4265
  {
@@ -4264,7 +4274,7 @@ function PreviewCustomizeSection({
4264
4274
  marginBottom: theme.spacing.sm
4265
4275
  },
4266
4276
  children: [
4267
- /* @__PURE__ */ jsx35(
4277
+ /* @__PURE__ */ jsx36(
4268
4278
  View26,
4269
4279
  {
4270
4280
  style: {
@@ -4276,17 +4286,17 @@ function PreviewCustomizeSection({
4276
4286
  backgroundColor: withAlpha(theme.colors.warning, 0.1),
4277
4287
  marginRight: theme.spacing.lg
4278
4288
  },
4279
- children: /* @__PURE__ */ jsx35(ActivityIndicator4, { color: theme.colors.warning, size: "small" })
4289
+ children: /* @__PURE__ */ jsx36(ActivityIndicator4, { color: theme.colors.warning, size: "small" })
4280
4290
  }
4281
4291
  ),
4282
4292
  /* @__PURE__ */ jsxs21(View26, { style: { flex: 1, minWidth: 0 }, children: [
4283
- /* @__PURE__ */ jsx35(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: app.status === "error" ? "Error" : "Processing" }),
4284
- /* @__PURE__ */ jsx35(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: statusDescription(app.status, app.statusError) })
4293
+ /* @__PURE__ */ jsx36(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: app.status === "error" ? "Error" : "Processing" }),
4294
+ /* @__PURE__ */ jsx36(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: statusDescription(app.status, app.statusError) })
4285
4295
  ] })
4286
4296
  ]
4287
4297
  }
4288
4298
  ) : null,
4289
- /* @__PURE__ */ jsx35(
4299
+ /* @__PURE__ */ jsx36(
4290
4300
  PressableCardRow,
4291
4301
  {
4292
4302
  accessibilityLabel: isOwner ? "Edit app" : "Remix app",
@@ -4299,7 +4309,7 @@ function PreviewCustomizeSection({
4299
4309
  borderColor: withAlpha(theme.colors.primary, 0.1),
4300
4310
  marginBottom: theme.spacing.sm
4301
4311
  },
4302
- left: /* @__PURE__ */ jsx35(
4312
+ left: /* @__PURE__ */ jsx36(
4303
4313
  View26,
4304
4314
  {
4305
4315
  style: {
@@ -4311,15 +4321,15 @@ function PreviewCustomizeSection({
4311
4321
  backgroundColor: withAlpha(theme.colors.primary, 0.1),
4312
4322
  marginRight: theme.spacing.lg
4313
4323
  },
4314
- children: /* @__PURE__ */ jsx35(IconChat, { size: 20, colorToken: "primary" })
4324
+ children: /* @__PURE__ */ jsx36(IconChat, { size: 20, colorToken: "primary" })
4315
4325
  }
4316
4326
  ),
4317
- title: /* @__PURE__ */ jsx35(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" }),
4318
- subtitle: /* @__PURE__ */ jsx35(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" }),
4319
- right: /* @__PURE__ */ jsx35(IconChevronRight, { size: 20, colorToken: "textMuted" })
4327
+ title: /* @__PURE__ */ jsx36(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" }),
4328
+ subtitle: /* @__PURE__ */ jsx36(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" }),
4329
+ right: /* @__PURE__ */ jsx36(IconChevronRight, { size: 20, colorToken: "textMuted" })
4320
4330
  }
4321
4331
  ),
4322
- isOwner && onStartDraw ? /* @__PURE__ */ jsx35(
4332
+ isOwner && onStartDraw ? /* @__PURE__ */ jsx36(
4323
4333
  PressableCardRow,
4324
4334
  {
4325
4335
  accessibilityLabel: "Draw changes",
@@ -4332,7 +4342,7 @@ function PreviewCustomizeSection({
4332
4342
  borderColor: withAlpha(theme.colors.danger, 0.1),
4333
4343
  marginBottom: theme.spacing.sm
4334
4344
  },
4335
- left: /* @__PURE__ */ jsx35(
4345
+ left: /* @__PURE__ */ jsx36(
4336
4346
  View26,
4337
4347
  {
4338
4348
  style: {
@@ -4344,12 +4354,12 @@ function PreviewCustomizeSection({
4344
4354
  backgroundColor: withAlpha(theme.colors.danger, 0.1),
4345
4355
  marginRight: theme.spacing.lg
4346
4356
  },
4347
- children: /* @__PURE__ */ jsx35(IconDraw, { size: 20, colorToken: "danger" })
4357
+ children: /* @__PURE__ */ jsx36(IconDraw, { size: 20, colorToken: "danger" })
4348
4358
  }
4349
4359
  ),
4350
- title: /* @__PURE__ */ jsx35(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: "Draw Changes" }),
4351
- subtitle: /* @__PURE__ */ jsx35(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: "Annotate the app with drawings" }),
4352
- right: /* @__PURE__ */ jsx35(IconChevronRight, { size: 20, colorToken: "textMuted" })
4360
+ title: /* @__PURE__ */ jsx36(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: "Draw Changes" }),
4361
+ subtitle: /* @__PURE__ */ jsx36(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: "Annotate the app with drawings" }),
4362
+ right: /* @__PURE__ */ jsx36(IconChevronRight, { size: 20, colorToken: "textMuted" })
4353
4363
  }
4354
4364
  ) : null
4355
4365
  ] });
@@ -4368,7 +4378,7 @@ import { Ban, Check as Check3, CheckCheck, ChevronDown as ChevronDown2 } from "l
4368
4378
  // src/components/primitives/MarkdownText.tsx
4369
4379
  import { Platform as Platform4, View as View27 } from "react-native";
4370
4380
  import Markdown from "react-native-markdown-display";
4371
- import { jsx as jsx36 } from "react/jsx-runtime";
4381
+ import { jsx as jsx37 } from "react/jsx-runtime";
4372
4382
  function MarkdownText({ markdown, variant = "chat", bodyColor, style }) {
4373
4383
  const theme = useTheme();
4374
4384
  const isDark = theme.scheme === "dark";
@@ -4379,7 +4389,7 @@ function MarkdownText({ markdown, variant = "chat", bodyColor, style }) {
4379
4389
  const codeTextColor = isDark ? "#FFFFFF" : theme.colors.text;
4380
4390
  const paragraphBottom = variant === "mergeRequest" ? 8 : 6;
4381
4391
  const baseLineHeight = variant === "mergeRequest" ? 22 : 20;
4382
- return /* @__PURE__ */ jsx36(View27, { style, children: /* @__PURE__ */ jsx36(
4392
+ return /* @__PURE__ */ jsx37(View27, { style, children: /* @__PURE__ */ jsx37(
4383
4393
  Markdown,
4384
4394
  {
4385
4395
  style: {
@@ -4459,7 +4469,7 @@ function useControlledExpansion(props) {
4459
4469
  }
4460
4470
 
4461
4471
  // src/components/merge-requests/MergeRequestStatusCard.tsx
4462
- import { jsx as jsx37, jsxs as jsxs22 } from "react/jsx-runtime";
4472
+ import { jsx as jsx38, jsxs as jsxs22 } from "react/jsx-runtime";
4463
4473
  function MergeRequestStatusCard({
4464
4474
  mergeRequest,
4465
4475
  expanded: expandedProp,
@@ -4512,7 +4522,7 @@ function MergeRequestStatusCard({
4512
4522
  useNativeDriver: true
4513
4523
  }).start();
4514
4524
  }, [expanded, rotate]);
4515
- return /* @__PURE__ */ jsx37(Pressable9, { onPress: () => setExpanded(!expanded), style: ({ pressed }) => [{ opacity: pressed ? 0.95 : 1 }], children: /* @__PURE__ */ jsxs22(
4525
+ return /* @__PURE__ */ jsx38(Pressable9, { onPress: () => setExpanded(!expanded), style: ({ pressed }) => [{ opacity: pressed ? 0.95 : 1 }], children: /* @__PURE__ */ jsxs22(
4516
4526
  Card,
4517
4527
  {
4518
4528
  padded: false,
@@ -4526,10 +4536,10 @@ function MergeRequestStatusCard({
4526
4536
  ],
4527
4537
  children: [
4528
4538
  /* @__PURE__ */ jsxs22(View28, { style: { flexDirection: "row", alignItems: "center", gap: theme.spacing.lg }, children: [
4529
- /* @__PURE__ */ jsx37(View28, { style: { width: 40, height: 40, borderRadius: 999, alignItems: "center", justifyContent: "center", backgroundColor: bgColor }, children: /* @__PURE__ */ jsx37(StatusIcon, { size: 20, color: iconColor }) }),
4539
+ /* @__PURE__ */ jsx38(View28, { style: { width: 40, height: 40, borderRadius: 999, alignItems: "center", justifyContent: "center", backgroundColor: bgColor }, children: /* @__PURE__ */ jsx38(StatusIcon, { size: 20, color: iconColor }) }),
4530
4540
  /* @__PURE__ */ jsxs22(View28, { style: { flex: 1, minWidth: 0 }, children: [
4531
4541
  /* @__PURE__ */ jsxs22(View28, { style: { flexDirection: "row", alignItems: "center", justifyContent: "space-between" }, children: [
4532
- /* @__PURE__ */ jsx37(
4542
+ /* @__PURE__ */ jsx38(
4533
4543
  Text,
4534
4544
  {
4535
4545
  style: {
@@ -4543,11 +4553,11 @@ function MergeRequestStatusCard({
4543
4553
  children: statusText
4544
4554
  }
4545
4555
  ),
4546
- headerTimeAgo ? /* @__PURE__ */ jsx37(Text, { style: { fontSize: 10, lineHeight: 14, marginLeft: theme.spacing.sm, color: withAlpha(theme.colors.textMuted, 0.6) }, children: headerTimeAgo }) : null
4556
+ headerTimeAgo ? /* @__PURE__ */ jsx38(Text, { style: { fontSize: 10, lineHeight: 14, marginLeft: theme.spacing.sm, color: withAlpha(theme.colors.textMuted, 0.6) }, children: headerTimeAgo }) : null
4547
4557
  ] }),
4548
- /* @__PURE__ */ jsx37(Text, { style: { fontSize: 12, lineHeight: 16, color: theme.colors.textMuted }, numberOfLines: 1, children: mergeRequest.title ?? "Untitled merge request" })
4558
+ /* @__PURE__ */ jsx38(Text, { style: { fontSize: 12, lineHeight: 16, color: theme.colors.textMuted }, numberOfLines: 1, children: mergeRequest.title ?? "Untitled merge request" })
4549
4559
  ] }),
4550
- headerRight ? /* @__PURE__ */ jsx37(View28, { children: headerRight }) : /* @__PURE__ */ jsx37(
4560
+ headerRight ? /* @__PURE__ */ jsx38(View28, { children: headerRight }) : /* @__PURE__ */ jsx38(
4551
4561
  Animated7.View,
4552
4562
  {
4553
4563
  style: {
@@ -4557,12 +4567,12 @@ function MergeRequestStatusCard({
4557
4567
  }
4558
4568
  ]
4559
4569
  },
4560
- children: /* @__PURE__ */ jsx37(ChevronDown2, { size: 20, color: withAlpha(theme.colors.textMuted, 0.4) })
4570
+ children: /* @__PURE__ */ jsx38(ChevronDown2, { size: 20, color: withAlpha(theme.colors.textMuted, 0.4) })
4561
4571
  }
4562
4572
  )
4563
4573
  ] }),
4564
4574
  expanded ? /* @__PURE__ */ jsxs22(View28, { style: { marginTop: 16, marginLeft: 56 }, children: [
4565
- /* @__PURE__ */ jsx37(
4575
+ /* @__PURE__ */ jsx38(
4566
4576
  Text,
4567
4577
  {
4568
4578
  style: {
@@ -4576,7 +4586,7 @@ function MergeRequestStatusCard({
4576
4586
  children: status.text
4577
4587
  }
4578
4588
  ),
4579
- createdTimeAgo ? /* @__PURE__ */ jsx37(
4589
+ createdTimeAgo ? /* @__PURE__ */ jsx38(
4580
4590
  Text,
4581
4591
  {
4582
4592
  style: {
@@ -4587,8 +4597,8 @@ function MergeRequestStatusCard({
4587
4597
  children: createdTimeAgo
4588
4598
  }
4589
4599
  ) : null,
4590
- /* @__PURE__ */ jsx37(Text, { style: { fontSize: 16, fontWeight: "600", color: textColor, marginBottom: 8 }, children: mergeRequest.title ?? "Untitled merge request" }),
4591
- mergeRequest.description ? /* @__PURE__ */ jsx37(MarkdownText, { markdown: mergeRequest.description, variant: "mergeRequest" }) : null
4600
+ /* @__PURE__ */ jsx38(Text, { style: { fontSize: 16, fontWeight: "600", color: textColor, marginBottom: 8 }, children: mergeRequest.title ?? "Untitled merge request" }),
4601
+ mergeRequest.description ? /* @__PURE__ */ jsx38(MarkdownText, { markdown: mergeRequest.description, variant: "mergeRequest" }) : null
4592
4602
  ] }) : null
4593
4603
  ]
4594
4604
  }
@@ -4607,7 +4617,7 @@ import { Check as Check4, ChevronDown as ChevronDown3, Play as Play3, X as X3 }
4607
4617
  // src/components/merge-requests/ReviewMergeRequestActionButton.tsx
4608
4618
  import * as React25 from "react";
4609
4619
  import { Pressable as Pressable10, View as View29 } from "react-native";
4610
- import { jsx as jsx38 } from "react/jsx-runtime";
4620
+ import { jsx as jsx39 } from "react/jsx-runtime";
4611
4621
  function ReviewMergeRequestActionButton({
4612
4622
  accessibilityLabel,
4613
4623
  backgroundColor,
@@ -4622,7 +4632,7 @@ function ReviewMergeRequestActionButton({
4622
4632
  const paddingHorizontal = iconOnly ? 0 : 16;
4623
4633
  const paddingVertical = iconOnly ? 0 : 8;
4624
4634
  const opacity = disabled ? 0.5 : pressed ? 0.9 : 1;
4625
- return /* @__PURE__ */ jsx38(
4635
+ return /* @__PURE__ */ jsx39(
4626
4636
  View29,
4627
4637
  {
4628
4638
  style: {
@@ -4637,7 +4647,7 @@ function ReviewMergeRequestActionButton({
4637
4647
  paddingVertical,
4638
4648
  justifyContent: "center"
4639
4649
  },
4640
- children: /* @__PURE__ */ jsx38(
4650
+ children: /* @__PURE__ */ jsx39(
4641
4651
  Pressable10,
4642
4652
  {
4643
4653
  accessibilityRole: "button",
@@ -4661,7 +4671,7 @@ function ReviewMergeRequestActionButton({
4661
4671
  }
4662
4672
 
4663
4673
  // src/components/merge-requests/ReviewMergeRequestCard.tsx
4664
- import { jsx as jsx39, jsxs as jsxs23 } from "react/jsx-runtime";
4674
+ import { jsx as jsx40, jsxs as jsxs23 } from "react/jsx-runtime";
4665
4675
  function ReviewMergeRequestCard({
4666
4676
  mr,
4667
4677
  index,
@@ -4685,7 +4695,7 @@ function ReviewMergeRequestCard({
4685
4695
  Animated8.timing(rotate, { toValue: isExpanded ? 1 : 0, duration: 200, useNativeDriver: true }).start();
4686
4696
  }, [isExpanded, rotate]);
4687
4697
  const position = total > 1 ? `${index + 1}/${total}` : "Merge request";
4688
- return /* @__PURE__ */ jsx39(Pressable11, { onPress: onToggle, style: ({ pressed }) => ({ opacity: pressed ? 0.95 : 1 }), children: /* @__PURE__ */ jsxs23(
4698
+ return /* @__PURE__ */ jsx40(Pressable11, { onPress: onToggle, style: ({ pressed }) => ({ opacity: pressed ? 0.95 : 1 }), children: /* @__PURE__ */ jsxs23(
4689
4699
  Card,
4690
4700
  {
4691
4701
  padded: false,
@@ -4699,9 +4709,9 @@ function ReviewMergeRequestCard({
4699
4709
  ],
4700
4710
  children: [
4701
4711
  /* @__PURE__ */ jsxs23(View30, { style: { flexDirection: "row", alignItems: "center", gap: 12 }, children: [
4702
- /* @__PURE__ */ jsx39(Avatar, { size: 40, uri: (creator == null ? void 0 : creator.avatar) ?? null, name: (creator == null ? void 0 : creator.name) ?? void 0 }),
4712
+ /* @__PURE__ */ jsx40(Avatar, { size: 40, uri: (creator == null ? void 0 : creator.avatar) ?? null, name: (creator == null ? void 0 : creator.name) ?? void 0 }),
4703
4713
  /* @__PURE__ */ jsxs23(View30, { style: { flex: 1, minWidth: 0 }, children: [
4704
- /* @__PURE__ */ jsx39(
4714
+ /* @__PURE__ */ jsx40(
4705
4715
  Text,
4706
4716
  {
4707
4717
  style: { fontWeight: theme.typography.fontWeight.semibold, color: theme.colors.text, fontSize: 16, lineHeight: 20 },
@@ -4715,18 +4725,18 @@ function ReviewMergeRequestCard({
4715
4725
  position
4716
4726
  ] })
4717
4727
  ] }),
4718
- /* @__PURE__ */ jsx39(
4728
+ /* @__PURE__ */ jsx40(
4719
4729
  Animated8.View,
4720
4730
  {
4721
4731
  style: {
4722
4732
  transform: [{ rotate: rotate.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "180deg"] }) }]
4723
4733
  },
4724
- children: /* @__PURE__ */ jsx39(ChevronDown3, { size: 20, color: withAlpha(theme.colors.textMuted, 0.4) })
4734
+ children: /* @__PURE__ */ jsx40(ChevronDown3, { size: 20, color: withAlpha(theme.colors.textMuted, 0.4) })
4725
4735
  }
4726
4736
  )
4727
4737
  ] }),
4728
4738
  isExpanded ? /* @__PURE__ */ jsxs23(View30, { style: { marginTop: 16 }, children: [
4729
- /* @__PURE__ */ jsx39(
4739
+ /* @__PURE__ */ jsx40(
4730
4740
  Text,
4731
4741
  {
4732
4742
  style: {
@@ -4740,13 +4750,13 @@ function ReviewMergeRequestCard({
4740
4750
  children: status.text
4741
4751
  }
4742
4752
  ),
4743
- /* @__PURE__ */ jsx39(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginBottom: 12 }, children: creator ? `${creator.approvedOpenedMergeRequests} approved merge${creator.approvedOpenedMergeRequests !== 1 ? "s" : ""}` : "Loading stats..." }),
4744
- mr.description ? /* @__PURE__ */ jsx39(MarkdownText, { markdown: mr.description, variant: "mergeRequest" }) : null
4753
+ /* @__PURE__ */ jsx40(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginBottom: 12 }, children: creator ? `${creator.approvedOpenedMergeRequests} approved merge${creator.approvedOpenedMergeRequests !== 1 ? "s" : ""}` : "Loading stats..." }),
4754
+ mr.description ? /* @__PURE__ */ jsx40(MarkdownText, { markdown: mr.description, variant: "mergeRequest" }) : null
4745
4755
  ] }) : null,
4746
- /* @__PURE__ */ jsx39(View30, { style: { height: 1, backgroundColor: withAlpha(theme.colors.borderStrong, 0.5), marginTop: 12, marginBottom: 12 } }),
4756
+ /* @__PURE__ */ jsx40(View30, { style: { height: 1, backgroundColor: withAlpha(theme.colors.borderStrong, 0.5), marginTop: 12, marginBottom: 12 } }),
4747
4757
  /* @__PURE__ */ jsxs23(View30, { style: { flexDirection: "row", alignItems: "center", justifyContent: "space-between" }, children: [
4748
4758
  /* @__PURE__ */ jsxs23(View30, { style: { flexDirection: "row", gap: 8 }, children: [
4749
- /* @__PURE__ */ jsx39(
4759
+ /* @__PURE__ */ jsx40(
4750
4760
  ReviewMergeRequestActionButton,
4751
4761
  {
4752
4762
  accessibilityLabel: "Reject",
@@ -4755,12 +4765,12 @@ function ReviewMergeRequestCard({
4755
4765
  onPress: onReject,
4756
4766
  iconOnly: !isExpanded,
4757
4767
  children: /* @__PURE__ */ jsxs23(View30, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4758
- /* @__PURE__ */ jsx39(X3, { size: 18, color: "#FFFFFF" }),
4759
- isExpanded ? /* @__PURE__ */ jsx39(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Reject" }) : null
4768
+ /* @__PURE__ */ jsx40(X3, { size: 18, color: "#FFFFFF" }),
4769
+ isExpanded ? /* @__PURE__ */ jsx40(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Reject" }) : null
4760
4770
  ] })
4761
4771
  }
4762
4772
  ),
4763
- /* @__PURE__ */ jsx39(
4773
+ /* @__PURE__ */ jsx40(
4764
4774
  ReviewMergeRequestActionButton,
4765
4775
  {
4766
4776
  accessibilityLabel: !canAct ? "Not actionable" : isProcessing ? "Processing" : "Approve",
@@ -4769,16 +4779,16 @@ function ReviewMergeRequestCard({
4769
4779
  onPress: onApprove,
4770
4780
  iconOnly: !isExpanded,
4771
4781
  children: isProcessing ? /* @__PURE__ */ jsxs23(View30, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4772
- /* @__PURE__ */ jsx39(ActivityIndicator5, { size: "small", color: "#FFFFFF" }),
4773
- isExpanded ? /* @__PURE__ */ jsx39(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Processing" }) : null
4782
+ /* @__PURE__ */ jsx40(ActivityIndicator5, { size: "small", color: "#FFFFFF" }),
4783
+ isExpanded ? /* @__PURE__ */ jsx40(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Processing" }) : null
4774
4784
  ] }) : /* @__PURE__ */ jsxs23(View30, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4775
- /* @__PURE__ */ jsx39(Check4, { size: 18, color: "#FFFFFF" }),
4776
- isExpanded ? /* @__PURE__ */ jsx39(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Approve" }) : null
4785
+ /* @__PURE__ */ jsx40(Check4, { size: 18, color: "#FFFFFF" }),
4786
+ isExpanded ? /* @__PURE__ */ jsx40(Text, { style: { fontSize: 13, color: "#FFFFFF", fontWeight: theme.typography.fontWeight.semibold }, children: "Approve" }) : null
4777
4787
  ] })
4778
4788
  }
4779
4789
  )
4780
4790
  ] }),
4781
- /* @__PURE__ */ jsx39(
4791
+ /* @__PURE__ */ jsx40(
4782
4792
  ReviewMergeRequestActionButton,
4783
4793
  {
4784
4794
  accessibilityLabel: "Test",
@@ -4786,9 +4796,9 @@ function ReviewMergeRequestCard({
4786
4796
  disabled: isBuilding || isTestingThis,
4787
4797
  onPress: onTest,
4788
4798
  iconOnly: !isExpanded,
4789
- children: isTestingThis ? /* @__PURE__ */ jsx39(ActivityIndicator5, { size: "small", color: "#888" }) : /* @__PURE__ */ jsxs23(View30, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4790
- /* @__PURE__ */ jsx39(Play3, { size: 14, color: theme.colors.text }),
4791
- isExpanded ? /* @__PURE__ */ jsx39(Text, { style: { fontSize: 13, color: theme.colors.text, fontWeight: theme.typography.fontWeight.semibold }, children: "Test" }) : null
4799
+ children: isTestingThis ? /* @__PURE__ */ jsx40(ActivityIndicator5, { size: "small", color: "#888" }) : /* @__PURE__ */ jsxs23(View30, { style: { flexDirection: "row", alignItems: "center", gap: isExpanded ? 4 : 0 }, children: [
4800
+ /* @__PURE__ */ jsx40(Play3, { size: 14, color: theme.colors.text }),
4801
+ isExpanded ? /* @__PURE__ */ jsx40(Text, { style: { fontSize: 13, color: theme.colors.text, fontWeight: theme.typography.fontWeight.semibold }, children: "Test" }) : null
4792
4802
  ] })
4793
4803
  }
4794
4804
  )
@@ -4799,7 +4809,7 @@ function ReviewMergeRequestCard({
4799
4809
  }
4800
4810
 
4801
4811
  // src/components/merge-requests/ReviewMergeRequestCarousel.tsx
4802
- import { jsx as jsx40, jsxs as jsxs24 } from "react/jsx-runtime";
4812
+ import { jsx as jsx41, jsxs as jsxs24 } from "react/jsx-runtime";
4803
4813
  function ReviewMergeRequestCarousel({
4804
4814
  mergeRequests,
4805
4815
  creatorStatsById,
@@ -4822,7 +4832,7 @@ function ReviewMergeRequestCarousel({
4822
4832
  const dotColor = theme.scheme === "dark" ? "#FFFFFF" : "#000000";
4823
4833
  if (mergeRequests.length === 0) return null;
4824
4834
  return /* @__PURE__ */ jsxs24(View31, { style: [{ marginHorizontal: -theme.spacing.lg }, style], children: [
4825
- /* @__PURE__ */ jsx40(
4835
+ /* @__PURE__ */ jsx41(
4826
4836
  FlatList,
4827
4837
  {
4828
4838
  horizontal: true,
@@ -4830,13 +4840,13 @@ function ReviewMergeRequestCarousel({
4830
4840
  keyExtractor: (mr) => mr.id,
4831
4841
  showsHorizontalScrollIndicator: false,
4832
4842
  contentContainerStyle: { paddingHorizontal: theme.spacing.lg, paddingVertical: theme.spacing.sm },
4833
- ItemSeparatorComponent: () => /* @__PURE__ */ jsx40(View31, { style: { width: gap } }),
4843
+ ItemSeparatorComponent: () => /* @__PURE__ */ jsx41(View31, { style: { width: gap } }),
4834
4844
  snapToAlignment: "start",
4835
4845
  decelerationRate: "fast",
4836
4846
  snapToInterval: snapInterval,
4837
4847
  disableIntervalMomentum: true,
4838
4848
  style: { paddingRight: peekAmount },
4839
- ListFooterComponent: /* @__PURE__ */ jsx40(View31, { style: { width: peekAmount } }),
4849
+ ListFooterComponent: /* @__PURE__ */ jsx41(View31, { style: { width: peekAmount } }),
4840
4850
  onScroll: Animated9.event([{ nativeEvent: { contentOffset: { x: carouselScrollX } } }], {
4841
4851
  useNativeDriver: false
4842
4852
  }),
@@ -4848,7 +4858,7 @@ function ReviewMergeRequestCarousel({
4848
4858
  const isProcessing = Boolean(processingMrId && processingMrId === item.id);
4849
4859
  const isAnyProcessing = Boolean(processingMrId);
4850
4860
  const isTestingThis = Boolean(testingMrId && testingMrId === item.id);
4851
- return /* @__PURE__ */ jsx40(View31, { style: { width: cardWidth }, children: /* @__PURE__ */ jsx40(
4861
+ return /* @__PURE__ */ jsx41(View31, { style: { width: cardWidth }, children: /* @__PURE__ */ jsx41(
4852
4862
  ReviewMergeRequestCard,
4853
4863
  {
4854
4864
  mr: item,
@@ -4869,7 +4879,7 @@ function ReviewMergeRequestCarousel({
4869
4879
  }
4870
4880
  }
4871
4881
  ),
4872
- mergeRequests.length >= 1 ? /* @__PURE__ */ jsx40(View31, { style: { flexDirection: "row", justifyContent: "center", columnGap: 8, marginTop: theme.spacing.md }, children: mergeRequests.map((mr, index) => {
4882
+ mergeRequests.length >= 1 ? /* @__PURE__ */ jsx41(View31, { style: { flexDirection: "row", justifyContent: "center", columnGap: 8, marginTop: theme.spacing.md }, children: mergeRequests.map((mr, index) => {
4873
4883
  const inputRange = [(index - 1) * snapInterval, index * snapInterval, (index + 1) * snapInterval];
4874
4884
  const scale = carouselScrollX.interpolate({
4875
4885
  inputRange,
@@ -4881,7 +4891,7 @@ function ReviewMergeRequestCarousel({
4881
4891
  outputRange: [0.4, 1, 0.4],
4882
4892
  extrapolate: "clamp"
4883
4893
  });
4884
- return /* @__PURE__ */ jsx40(
4894
+ return /* @__PURE__ */ jsx41(
4885
4895
  Animated9.View,
4886
4896
  {
4887
4897
  style: {
@@ -4900,7 +4910,7 @@ function ReviewMergeRequestCarousel({
4900
4910
  }
4901
4911
 
4902
4912
  // src/studio/ui/preview-panel/PreviewCollaborateSection.tsx
4903
- import { Fragment as Fragment5, jsx as jsx41, jsxs as jsxs25 } from "react/jsx-runtime";
4913
+ import { Fragment as Fragment5, jsx as jsx42, jsxs as jsxs25 } from "react/jsx-runtime";
4904
4914
  function PreviewCollaborateSection({
4905
4915
  canSubmitMergeRequest,
4906
4916
  incomingMergeRequests,
@@ -4921,8 +4931,8 @@ function PreviewCollaborateSection({
4921
4931
  if (!hasSection) return null;
4922
4932
  const showActionsSubtitle = canSubmitMergeRequest && onSubmitMergeRequest || onTestMr && incomingMergeRequests.length > 0;
4923
4933
  return /* @__PURE__ */ jsxs25(Fragment5, { children: [
4924
- /* @__PURE__ */ jsx41(SectionTitle, { marginTop: theme.spacing.xl, children: "Collaborate" }),
4925
- showActionsSubtitle ? /* @__PURE__ */ jsx41(
4934
+ /* @__PURE__ */ jsx42(SectionTitle, { marginTop: theme.spacing.xl, children: "Collaborate" }),
4935
+ showActionsSubtitle ? /* @__PURE__ */ jsx42(
4926
4936
  Text,
4927
4937
  {
4928
4938
  style: {
@@ -4937,7 +4947,7 @@ function PreviewCollaborateSection({
4937
4947
  children: "Actions"
4938
4948
  }
4939
4949
  ) : null,
4940
- canSubmitMergeRequest && onSubmitMergeRequest ? /* @__PURE__ */ jsx41(
4950
+ canSubmitMergeRequest && onSubmitMergeRequest ? /* @__PURE__ */ jsx42(
4941
4951
  PressableCardRow,
4942
4952
  {
4943
4953
  accessibilityLabel: "Submit merge request",
@@ -4968,7 +4978,7 @@ function PreviewCollaborateSection({
4968
4978
  borderColor: withAlpha("#03DAC6", 0.2),
4969
4979
  marginBottom: theme.spacing.sm
4970
4980
  },
4971
- left: /* @__PURE__ */ jsx41(
4981
+ left: /* @__PURE__ */ jsx42(
4972
4982
  View32,
4973
4983
  {
4974
4984
  style: {
@@ -4980,15 +4990,15 @@ function PreviewCollaborateSection({
4980
4990
  backgroundColor: withAlpha("#03DAC6", 0.1),
4981
4991
  marginRight: theme.spacing.lg
4982
4992
  },
4983
- children: submittingMr ? /* @__PURE__ */ jsx41(ActivityIndicator6, { color: "#03DAC6", size: "small" }) : /* @__PURE__ */ jsx41(merge_default, { width: 20, height: 20, color: "#03DAC6" })
4993
+ children: submittingMr ? /* @__PURE__ */ jsx42(ActivityIndicator6, { color: "#03DAC6", size: "small" }) : /* @__PURE__ */ jsx42(MergeIcon, { width: 20, height: 20, color: "#03DAC6" })
4984
4994
  }
4985
4995
  ),
4986
- title: /* @__PURE__ */ jsx41(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: "Submit your new changes" }),
4987
- subtitle: /* @__PURE__ */ jsx41(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: "Ask to merge this remix to the original app" }),
4988
- right: /* @__PURE__ */ jsx41(Send2, { size: 16, color: "#03DAC6" })
4996
+ title: /* @__PURE__ */ jsx42(Text, { style: { color: theme.colors.text, fontSize: 16, lineHeight: 20, fontWeight: theme.typography.fontWeight.semibold }, children: "Submit your new changes" }),
4997
+ subtitle: /* @__PURE__ */ jsx42(Text, { style: { color: theme.colors.textMuted, fontSize: 12, lineHeight: 16, marginTop: 2 }, children: "Ask to merge this remix to the original app" }),
4998
+ right: /* @__PURE__ */ jsx42(Send2, { size: 16, color: "#03DAC6" })
4989
4999
  }
4990
5000
  ) : null,
4991
- onTestMr && incomingMergeRequests.length > 0 ? /* @__PURE__ */ jsx41(
5001
+ onTestMr && incomingMergeRequests.length > 0 ? /* @__PURE__ */ jsx42(
4992
5002
  ReviewMergeRequestCarousel,
4993
5003
  {
4994
5004
  mergeRequests: incomingMergeRequests,
@@ -5002,7 +5012,7 @@ function PreviewCollaborateSection({
5002
5012
  }
5003
5013
  ) : null,
5004
5014
  outgoingMergeRequests.length > 0 ? /* @__PURE__ */ jsxs25(Fragment5, { children: [
5005
- /* @__PURE__ */ jsx41(
5015
+ /* @__PURE__ */ jsx42(
5006
5016
  Text,
5007
5017
  {
5008
5018
  style: {
@@ -5018,7 +5028,7 @@ function PreviewCollaborateSection({
5018
5028
  children: "History"
5019
5029
  }
5020
5030
  ),
5021
- outgoingMergeRequests.map((mr) => /* @__PURE__ */ jsx41(View32, { style: { marginBottom: theme.spacing.sm }, children: /* @__PURE__ */ jsx41(MergeRequestStatusCard, { mergeRequest: toMergeRequestSummary(mr) }) }, mr.id))
5031
+ outgoingMergeRequests.map((mr) => /* @__PURE__ */ jsx42(View32, { style: { marginBottom: theme.spacing.sm }, children: /* @__PURE__ */ jsx42(MergeRequestStatusCard, { mergeRequest: toMergeRequestSummary(mr) }) }, mr.id))
5022
5032
  ] }) : null
5023
5033
  ] });
5024
5034
  }
@@ -5309,7 +5319,7 @@ function usePreviewPanelData(params) {
5309
5319
  }
5310
5320
 
5311
5321
  // src/studio/ui/PreviewPanel.tsx
5312
- import { jsx as jsx42, jsxs as jsxs26 } from "react/jsx-runtime";
5322
+ import { jsx as jsx43, jsxs as jsxs26 } from "react/jsx-runtime";
5313
5323
  function PreviewPanel({
5314
5324
  app,
5315
5325
  loading,
@@ -5340,16 +5350,16 @@ function PreviewPanel({
5340
5350
  onOpenComments,
5341
5351
  commentCountOverride
5342
5352
  });
5343
- const header = /* @__PURE__ */ jsx42(PreviewPanelHeader, { isOwner, onClose, onNavigateHome, onGoToChat });
5353
+ const header = /* @__PURE__ */ jsx43(PreviewPanelHeader, { isOwner, onClose, onNavigateHome, onGoToChat });
5344
5354
  if (loading || !app) {
5345
- return /* @__PURE__ */ jsx42(PreviewPage, { header, children: /* @__PURE__ */ jsxs26(View33, { style: { flex: 1, justifyContent: "center", alignItems: "center", padding: 24 }, children: [
5346
- /* @__PURE__ */ jsx42(ActivityIndicator7, {}),
5347
- /* @__PURE__ */ jsx42(View33, { style: { height: 12 } }),
5348
- /* @__PURE__ */ jsx42(Text, { variant: "bodyMuted", children: "Loading app\u2026" })
5355
+ return /* @__PURE__ */ jsx43(PreviewPage, { header, children: /* @__PURE__ */ jsxs26(View33, { style: { flex: 1, justifyContent: "center", alignItems: "center", padding: 24 }, children: [
5356
+ /* @__PURE__ */ jsx43(ActivityIndicator7, {}),
5357
+ /* @__PURE__ */ jsx43(View33, { style: { height: 12 } }),
5358
+ /* @__PURE__ */ jsx43(Text, { variant: "bodyMuted", children: "Loading app\u2026" })
5349
5359
  ] }) });
5350
5360
  }
5351
5361
  return /* @__PURE__ */ jsxs26(PreviewPage, { header, children: [
5352
- /* @__PURE__ */ jsx42(
5362
+ /* @__PURE__ */ jsx43(
5353
5363
  PreviewHeroSection,
5354
5364
  {
5355
5365
  appStatus: app.status,
@@ -5367,8 +5377,8 @@ function PreviewPanel({
5367
5377
  }
5368
5378
  }
5369
5379
  ),
5370
- /* @__PURE__ */ jsx42(PreviewMetaSection, { app, isOwner, creator, downloadsCount: insights.downloads }),
5371
- /* @__PURE__ */ jsx42(
5380
+ /* @__PURE__ */ jsx43(PreviewMetaSection, { app, isOwner, creator, downloadsCount: insights.downloads }),
5381
+ /* @__PURE__ */ jsx43(
5372
5382
  PreviewCustomizeSection,
5373
5383
  {
5374
5384
  app,
@@ -5379,7 +5389,7 @@ function PreviewPanel({
5379
5389
  onStartDraw
5380
5390
  }
5381
5391
  ),
5382
- /* @__PURE__ */ jsx42(
5392
+ /* @__PURE__ */ jsx43(
5383
5393
  PreviewCollaborateSection,
5384
5394
  {
5385
5395
  canSubmitMergeRequest,
@@ -5415,7 +5425,7 @@ import { BottomSheetFlatList } from "@gorhom/bottom-sheet";
5415
5425
  // src/components/chat/ChatMessageBubble.tsx
5416
5426
  import { View as View34 } from "react-native";
5417
5427
  import { CheckCheck as CheckCheck2, GitMerge as GitMerge2 } from "lucide-react-native";
5418
- import { jsx as jsx43, jsxs as jsxs27 } from "react/jsx-runtime";
5428
+ import { jsx as jsx44, jsxs as jsxs27 } from "react/jsx-runtime";
5419
5429
  function ChatMessageBubble({ message, renderContent, style }) {
5420
5430
  var _a, _b;
5421
5431
  const theme = useTheme();
@@ -5429,7 +5439,7 @@ function ChatMessageBubble({ message, renderContent, style }) {
5429
5439
  const bubbleVariant = isHuman ? "surface" : "surfaceRaised";
5430
5440
  const cornerStyle = isHuman ? { borderTopRightRadius: 0 } : { borderTopLeftRadius: 0 };
5431
5441
  const bodyColor = metaStatus === "success" ? theme.colors.success : metaStatus === "error" ? theme.colors.danger : void 0;
5432
- return /* @__PURE__ */ jsx43(View34, { style: [align, style], children: /* @__PURE__ */ jsx43(
5442
+ return /* @__PURE__ */ jsx44(View34, { style: [align, style], children: /* @__PURE__ */ jsx44(
5433
5443
  Surface,
5434
5444
  {
5435
5445
  variant: bubbleVariant,
@@ -5445,9 +5455,9 @@ function ChatMessageBubble({ message, renderContent, style }) {
5445
5455
  cornerStyle
5446
5456
  ],
5447
5457
  children: /* @__PURE__ */ jsxs27(View34, { style: { flexDirection: "row", alignItems: "center" }, children: [
5448
- isMergeCompleted ? /* @__PURE__ */ jsx43(CheckCheck2, { size: 16, color: theme.colors.success, style: { marginRight: theme.spacing.sm } }) : null,
5449
- isMergeApproved ? /* @__PURE__ */ jsx43(GitMerge2, { size: 16, color: theme.colors.text, style: { marginRight: theme.spacing.sm } }) : null,
5450
- /* @__PURE__ */ jsx43(View34, { style: { flexShrink: 1, minWidth: 0 }, children: renderContent ? renderContent(message) : /* @__PURE__ */ jsx43(MarkdownText, { markdown: message.content, variant: "chat", bodyColor }) })
5458
+ isMergeCompleted ? /* @__PURE__ */ jsx44(CheckCheck2, { size: 16, color: theme.colors.success, style: { marginRight: theme.spacing.sm } }) : null,
5459
+ isMergeApproved ? /* @__PURE__ */ jsx44(GitMerge2, { size: 16, color: theme.colors.text, style: { marginRight: theme.spacing.sm } }) : null,
5460
+ /* @__PURE__ */ jsx44(View34, { style: { flexShrink: 1, minWidth: 0 }, children: renderContent ? renderContent(message) : /* @__PURE__ */ jsx44(MarkdownText, { markdown: message.content, variant: "chat", bodyColor }) })
5451
5461
  ] })
5452
5462
  }
5453
5463
  ) });
@@ -5456,7 +5466,7 @@ function ChatMessageBubble({ message, renderContent, style }) {
5456
5466
  // src/components/chat/TypingIndicator.tsx
5457
5467
  import * as React31 from "react";
5458
5468
  import { Animated as Animated10, View as View35 } from "react-native";
5459
- import { jsx as jsx44 } from "react/jsx-runtime";
5469
+ import { jsx as jsx45 } from "react/jsx-runtime";
5460
5470
  function TypingIndicator({ style }) {
5461
5471
  const theme = useTheme();
5462
5472
  const dotColor = theme.colors.textSubtle;
@@ -5479,7 +5489,7 @@ function TypingIndicator({ style }) {
5479
5489
  loops.forEach((l) => l.stop());
5480
5490
  };
5481
5491
  }, [anims]);
5482
- return /* @__PURE__ */ jsx44(View35, { style: [{ flexDirection: "row", alignItems: "center" }, style], children: anims.map((a, i) => /* @__PURE__ */ jsx44(
5492
+ return /* @__PURE__ */ jsx45(View35, { style: [{ flexDirection: "row", alignItems: "center" }, style], children: anims.map((a, i) => /* @__PURE__ */ jsx45(
5483
5493
  Animated10.View,
5484
5494
  {
5485
5495
  style: {
@@ -5497,7 +5507,7 @@ function TypingIndicator({ style }) {
5497
5507
  }
5498
5508
 
5499
5509
  // src/components/chat/ChatMessageList.tsx
5500
- import { jsx as jsx45 } from "react/jsx-runtime";
5510
+ import { jsx as jsx46 } from "react/jsx-runtime";
5501
5511
  var ChatMessageList = React32.forwardRef(
5502
5512
  ({
5503
5513
  messages,
@@ -5556,7 +5566,7 @@ var ChatMessageList = React32.forwardRef(
5556
5566
  }
5557
5567
  return void 0;
5558
5568
  }, [showTypingIndicator, scrollToBottom]);
5559
- return /* @__PURE__ */ jsx45(
5569
+ return /* @__PURE__ */ jsx46(
5560
5570
  BottomSheetFlatList,
5561
5571
  {
5562
5572
  ref: listRef,
@@ -5573,8 +5583,8 @@ var ChatMessageList = React32.forwardRef(
5573
5583
  },
5574
5584
  contentStyle
5575
5585
  ],
5576
- renderItem: ({ item, index }) => /* @__PURE__ */ jsx45(View36, { style: { marginTop: index === 0 ? 0 : theme.spacing.sm }, children: /* @__PURE__ */ jsx45(ChatMessageBubble, { message: item, renderContent: renderMessageContent }) }),
5577
- ListFooterComponent: showTypingIndicator ? /* @__PURE__ */ jsx45(View36, { style: { marginTop: theme.spacing.sm, alignSelf: "flex-start", paddingHorizontal: theme.spacing.lg }, children: /* @__PURE__ */ jsx45(TypingIndicator, {}) }) : null,
5586
+ renderItem: ({ item, index }) => /* @__PURE__ */ jsx46(View36, { style: { marginTop: index === 0 ? 0 : theme.spacing.sm }, children: /* @__PURE__ */ jsx46(ChatMessageBubble, { message: item, renderContent: renderMessageContent }) }),
5587
+ ListFooterComponent: showTypingIndicator ? /* @__PURE__ */ jsx46(View36, { style: { marginTop: theme.spacing.sm, alignSelf: "flex-start", paddingHorizontal: theme.spacing.lg }, children: /* @__PURE__ */ jsx46(TypingIndicator, {}) }) : null,
5578
5588
  maintainVisibleContentPosition: { minIndexForVisible: 0, autoscrollToTopThreshold: nearBottomThreshold }
5579
5589
  }
5580
5590
  );
@@ -5583,7 +5593,7 @@ var ChatMessageList = React32.forwardRef(
5583
5593
  ChatMessageList.displayName = "ChatMessageList";
5584
5594
 
5585
5595
  // src/components/chat/ChatPage.tsx
5586
- import { jsx as jsx46, jsxs as jsxs28 } from "react/jsx-runtime";
5596
+ import { jsx as jsx47, jsxs as jsxs28 } from "react/jsx-runtime";
5587
5597
  function ChatPage({
5588
5598
  header,
5589
5599
  messages,
@@ -5599,10 +5609,10 @@ function ChatPage({
5599
5609
  const theme = useTheme();
5600
5610
  const [composerHeight, setComposerHeight] = React33.useState(0);
5601
5611
  return /* @__PURE__ */ jsxs28(View37, { style: [{ flex: 1 }, style], children: [
5602
- header ? /* @__PURE__ */ jsx46(View37, { children: header }) : null,
5603
- topBanner ? /* @__PURE__ */ jsx46(View37, { style: { paddingHorizontal: theme.spacing.lg, paddingTop: theme.spacing.sm }, children: topBanner }) : null,
5612
+ header ? /* @__PURE__ */ jsx47(View37, { children: header }) : null,
5613
+ topBanner ? /* @__PURE__ */ jsx47(View37, { style: { paddingHorizontal: theme.spacing.lg, paddingTop: theme.spacing.sm }, children: topBanner }) : null,
5604
5614
  /* @__PURE__ */ jsxs28(View37, { style: { flex: 1 }, children: [
5605
- /* @__PURE__ */ jsx46(
5615
+ /* @__PURE__ */ jsx47(
5606
5616
  ChatMessageList,
5607
5617
  {
5608
5618
  ref: listRef,
@@ -5615,7 +5625,7 @@ function ChatPage({
5615
5625
  ),
5616
5626
  overlay
5617
5627
  ] }),
5618
- /* @__PURE__ */ jsx46(
5628
+ /* @__PURE__ */ jsx47(
5619
5629
  ChatComposer,
5620
5630
  {
5621
5631
  ...composer,
@@ -5630,7 +5640,7 @@ function ChatPage({
5630
5640
  import * as React34 from "react";
5631
5641
  import { Pressable as Pressable12, View as View38 } from "react-native";
5632
5642
  import Animated11, { Easing as Easing2, useAnimatedStyle as useAnimatedStyle2, useSharedValue as useSharedValue2, withTiming as withTiming2 } from "react-native-reanimated";
5633
- import { jsx as jsx47 } from "react/jsx-runtime";
5643
+ import { jsx as jsx48 } from "react/jsx-runtime";
5634
5644
  function ScrollToBottomButton({ visible, onPress, children, style }) {
5635
5645
  const theme = useTheme();
5636
5646
  const progress = useSharedValue2(visible ? 1 : 0);
@@ -5644,7 +5654,7 @@ function ScrollToBottomButton({ visible, onPress, children, style }) {
5644
5654
  }));
5645
5655
  const bg = theme.scheme === "dark" ? "rgba(39,39,42,0.9)" : "rgba(244,244,245,0.95)";
5646
5656
  const border = theme.scheme === "dark" ? withAlpha("#FFFFFF", 0.12) : withAlpha("#000000", 0.08);
5647
- return /* @__PURE__ */ jsx47(
5657
+ return /* @__PURE__ */ jsx48(
5648
5658
  Animated11.View,
5649
5659
  {
5650
5660
  pointerEvents: visible ? "auto" : "none",
@@ -5658,7 +5668,7 @@ function ScrollToBottomButton({ visible, onPress, children, style }) {
5658
5668
  style,
5659
5669
  animStyle
5660
5670
  ],
5661
- children: /* @__PURE__ */ jsx47(
5671
+ children: /* @__PURE__ */ jsx48(
5662
5672
  View38,
5663
5673
  {
5664
5674
  style: {
@@ -5677,7 +5687,7 @@ function ScrollToBottomButton({ visible, onPress, children, style }) {
5677
5687
  elevation: 5,
5678
5688
  opacity: pressed ? 0.85 : 1
5679
5689
  },
5680
- children: /* @__PURE__ */ jsx47(
5690
+ children: /* @__PURE__ */ jsx48(
5681
5691
  Pressable12,
5682
5692
  {
5683
5693
  onPress,
@@ -5696,7 +5706,7 @@ function ScrollToBottomButton({ visible, onPress, children, style }) {
5696
5706
 
5697
5707
  // src/components/chat/ChatHeader.tsx
5698
5708
  import { StyleSheet as StyleSheet4 } from "react-native";
5699
- import { jsx as jsx48 } from "react/jsx-runtime";
5709
+ import { jsx as jsx49 } from "react/jsx-runtime";
5700
5710
  function ChatHeader({ left, right, center, style }) {
5701
5711
  const flattenedStyle = StyleSheet4.flatten([
5702
5712
  {
@@ -5704,7 +5714,7 @@ function ChatHeader({ left, right, center, style }) {
5704
5714
  },
5705
5715
  style
5706
5716
  ]);
5707
- return /* @__PURE__ */ jsx48(
5717
+ return /* @__PURE__ */ jsx49(
5708
5718
  StudioSheetHeader,
5709
5719
  {
5710
5720
  left,
@@ -5717,12 +5727,12 @@ function ChatHeader({ left, right, center, style }) {
5717
5727
 
5718
5728
  // src/components/chat/ForkNoticeBanner.tsx
5719
5729
  import { View as View40 } from "react-native";
5720
- import { jsx as jsx49, jsxs as jsxs29 } from "react/jsx-runtime";
5730
+ import { jsx as jsx50, jsxs as jsxs29 } from "react/jsx-runtime";
5721
5731
  function ForkNoticeBanner({ isOwner = true, title, description, style }) {
5722
5732
  const theme = useTheme();
5723
5733
  const resolvedTitle = title ?? (isOwner ? "Remixed app" : "Remix app");
5724
5734
  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.");
5725
- return /* @__PURE__ */ jsx49(
5735
+ return /* @__PURE__ */ jsx50(
5726
5736
  Card,
5727
5737
  {
5728
5738
  variant: "surfaceRaised",
@@ -5738,7 +5748,7 @@ function ForkNoticeBanner({ isOwner = true, title, description, style }) {
5738
5748
  style
5739
5749
  ],
5740
5750
  children: /* @__PURE__ */ jsxs29(View40, { style: { minWidth: 0 }, children: [
5741
- /* @__PURE__ */ jsx49(
5751
+ /* @__PURE__ */ jsx50(
5742
5752
  Text,
5743
5753
  {
5744
5754
  style: {
@@ -5752,7 +5762,7 @@ function ForkNoticeBanner({ isOwner = true, title, description, style }) {
5752
5762
  children: resolvedTitle
5753
5763
  }
5754
5764
  ),
5755
- /* @__PURE__ */ jsx49(
5765
+ /* @__PURE__ */ jsx50(
5756
5766
  Text,
5757
5767
  {
5758
5768
  style: {
@@ -5770,7 +5780,7 @@ function ForkNoticeBanner({ isOwner = true, title, description, style }) {
5770
5780
  }
5771
5781
 
5772
5782
  // src/studio/ui/ChatPanel.tsx
5773
- import { jsx as jsx50, jsxs as jsxs30 } from "react/jsx-runtime";
5783
+ import { jsx as jsx51, jsxs as jsxs30 } from "react/jsx-runtime";
5774
5784
  function ChatPanel({
5775
5785
  title = "Chat",
5776
5786
  autoFocusComposer = false,
@@ -5808,21 +5818,21 @@ function ChatPanel({
5808
5818
  var _a;
5809
5819
  (_a = listRef.current) == null ? void 0 : _a.scrollToBottom({ animated: true });
5810
5820
  }, []);
5811
- const header = /* @__PURE__ */ jsx50(
5821
+ const header = /* @__PURE__ */ jsx51(
5812
5822
  ChatHeader,
5813
5823
  {
5814
5824
  left: /* @__PURE__ */ jsxs30(View41, { style: { flexDirection: "row", alignItems: "center" }, children: [
5815
- /* @__PURE__ */ jsx50(StudioSheetHeaderIconButton, { onPress: onBack, accessibilityLabel: "Back", style: { marginRight: 8 }, children: /* @__PURE__ */ jsx50(IconBack, { size: 20, colorToken: "floatingContent" }) }),
5816
- onNavigateHome ? /* @__PURE__ */ jsx50(StudioSheetHeaderIconButton, { onPress: onNavigateHome, accessibilityLabel: "Home", children: /* @__PURE__ */ jsx50(IconHome, { size: 20, colorToken: "floatingContent" }) }) : null
5825
+ /* @__PURE__ */ jsx51(StudioSheetHeaderIconButton, { onPress: onBack, accessibilityLabel: "Back", style: { marginRight: 8 }, children: /* @__PURE__ */ jsx51(IconBack, { size: 20, colorToken: "floatingContent" }) }),
5826
+ onNavigateHome ? /* @__PURE__ */ jsx51(StudioSheetHeaderIconButton, { onPress: onNavigateHome, accessibilityLabel: "Home", children: /* @__PURE__ */ jsx51(IconHome, { size: 20, colorToken: "floatingContent" }) }) : null
5817
5827
  ] }),
5818
5828
  right: /* @__PURE__ */ jsxs30(View41, { style: { flexDirection: "row", alignItems: "center" }, children: [
5819
- onStartDraw ? /* @__PURE__ */ jsx50(StudioSheetHeaderIconButton, { onPress: onStartDraw, accessibilityLabel: "Draw", intent: "danger", style: { marginRight: 8 }, children: /* @__PURE__ */ jsx50(IconDraw, { size: 20, colorToken: "onDanger" }) }) : null,
5820
- /* @__PURE__ */ jsx50(StudioSheetHeaderIconButton, { onPress: onClose, accessibilityLabel: "Close", children: /* @__PURE__ */ jsx50(IconClose, { size: 20, colorToken: "floatingContent" }) })
5829
+ onStartDraw ? /* @__PURE__ */ jsx51(StudioSheetHeaderIconButton, { onPress: onStartDraw, accessibilityLabel: "Draw", intent: "danger", style: { marginRight: 8 }, children: /* @__PURE__ */ jsx51(IconDraw, { size: 20, colorToken: "onDanger" }) }) : null,
5830
+ /* @__PURE__ */ jsx51(StudioSheetHeaderIconButton, { onPress: onClose, accessibilityLabel: "Close", children: /* @__PURE__ */ jsx51(IconClose, { size: 20, colorToken: "floatingContent" }) })
5821
5831
  ] }),
5822
5832
  center: null
5823
5833
  }
5824
5834
  );
5825
- const topBanner = shouldForkOnEdit ? /* @__PURE__ */ jsx50(
5835
+ const topBanner = shouldForkOnEdit ? /* @__PURE__ */ jsx51(
5826
5836
  ForkNoticeBanner,
5827
5837
  {
5828
5838
  isOwner: !shouldForkOnEdit,
@@ -5832,16 +5842,16 @@ function ChatPanel({
5832
5842
  const showMessagesLoading = Boolean(loading) && messages.length === 0 || forking;
5833
5843
  if (showMessagesLoading) {
5834
5844
  return /* @__PURE__ */ jsxs30(View41, { style: { flex: 1 }, children: [
5835
- /* @__PURE__ */ jsx50(View41, { children: header }),
5836
- topBanner ? /* @__PURE__ */ jsx50(View41, { style: { paddingHorizontal: 16, paddingTop: 8 }, children: topBanner }) : null,
5845
+ /* @__PURE__ */ jsx51(View41, { children: header }),
5846
+ topBanner ? /* @__PURE__ */ jsx51(View41, { style: { paddingHorizontal: 16, paddingTop: 8 }, children: topBanner }) : null,
5837
5847
  /* @__PURE__ */ jsxs30(View41, { style: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 24, paddingVertical: 12 }, children: [
5838
- /* @__PURE__ */ jsx50(ActivityIndicator8, {}),
5839
- /* @__PURE__ */ jsx50(View41, { style: { height: 12 } }),
5840
- /* @__PURE__ */ jsx50(Text, { variant: "bodyMuted", children: forking ? "Creating your copy\u2026" : "Loading messages\u2026" })
5848
+ /* @__PURE__ */ jsx51(ActivityIndicator8, {}),
5849
+ /* @__PURE__ */ jsx51(View41, { style: { height: 12 } }),
5850
+ /* @__PURE__ */ jsx51(Text, { variant: "bodyMuted", children: forking ? "Creating your copy\u2026" : "Loading messages\u2026" })
5841
5851
  ] })
5842
5852
  ] });
5843
5853
  }
5844
- return /* @__PURE__ */ jsx50(
5854
+ return /* @__PURE__ */ jsx51(
5845
5855
  ChatPage,
5846
5856
  {
5847
5857
  header,
@@ -5850,13 +5860,13 @@ function ChatPanel({
5850
5860
  topBanner,
5851
5861
  listRef,
5852
5862
  onNearBottomChange: setNearBottom,
5853
- overlay: /* @__PURE__ */ jsx50(
5863
+ overlay: /* @__PURE__ */ jsx51(
5854
5864
  ScrollToBottomButton,
5855
5865
  {
5856
5866
  visible: !nearBottom,
5857
5867
  onPress: handleScrollToBottom,
5858
5868
  style: { bottom: 80 },
5859
- children: /* @__PURE__ */ jsx50(IconArrowDown, { size: 20, colorToken: "floatingContent" })
5869
+ children: /* @__PURE__ */ jsx51(IconArrowDown, { size: 20, colorToken: "floatingContent" })
5860
5870
  }
5861
5871
  ),
5862
5872
  composer: {
@@ -5883,7 +5893,7 @@ import {
5883
5893
  Pressable as Pressable13,
5884
5894
  View as View42
5885
5895
  } from "react-native";
5886
- import { jsx as jsx51, jsxs as jsxs31 } from "react/jsx-runtime";
5896
+ import { jsx as jsx52, jsxs as jsxs31 } from "react/jsx-runtime";
5887
5897
  function Modal({
5888
5898
  visible,
5889
5899
  onRequestClose,
@@ -5892,7 +5902,7 @@ function Modal({
5892
5902
  contentStyle
5893
5903
  }) {
5894
5904
  const theme = useTheme();
5895
- return /* @__PURE__ */ jsx51(
5905
+ return /* @__PURE__ */ jsx52(
5896
5906
  RNModal,
5897
5907
  {
5898
5908
  visible,
@@ -5900,7 +5910,7 @@ function Modal({
5900
5910
  animationType: "fade",
5901
5911
  onRequestClose,
5902
5912
  children: /* @__PURE__ */ jsxs31(View42, { style: { flex: 1, backgroundColor: theme.colors.backdrop, justifyContent: "center", padding: theme.spacing.lg }, children: [
5903
- /* @__PURE__ */ jsx51(
5913
+ /* @__PURE__ */ jsx52(
5904
5914
  Pressable13,
5905
5915
  {
5906
5916
  accessibilityRole: "button",
@@ -5908,14 +5918,14 @@ function Modal({
5908
5918
  style: { position: "absolute", inset: 0 }
5909
5919
  }
5910
5920
  ),
5911
- /* @__PURE__ */ jsx51(Card, { variant: "surfaceRaised", padded: true, style: [{ borderRadius: theme.radii.xl }, contentStyle], children })
5921
+ /* @__PURE__ */ jsx52(Card, { variant: "surfaceRaised", padded: true, style: [{ borderRadius: theme.radii.xl }, contentStyle], children })
5912
5922
  ] })
5913
5923
  }
5914
5924
  );
5915
5925
  }
5916
5926
 
5917
5927
  // src/components/dialogs/ConfirmMergeRequestDialog.tsx
5918
- import { jsx as jsx52, jsxs as jsxs32 } from "react/jsx-runtime";
5928
+ import { jsx as jsx53, jsxs as jsxs32 } from "react/jsx-runtime";
5919
5929
  function ConfirmMergeRequestDialog({
5920
5930
  visible,
5921
5931
  onOpenChange,
@@ -5956,7 +5966,7 @@ function ConfirmMergeRequestDialog({
5956
5966
  backgroundColor: theme.colors.background
5957
5967
  },
5958
5968
  children: [
5959
- /* @__PURE__ */ jsx52(View43, { children: /* @__PURE__ */ jsx52(
5969
+ /* @__PURE__ */ jsx53(View43, { children: /* @__PURE__ */ jsx53(
5960
5970
  Text,
5961
5971
  {
5962
5972
  style: {
@@ -5969,7 +5979,7 @@ function ConfirmMergeRequestDialog({
5969
5979
  }
5970
5980
  ) }),
5971
5981
  /* @__PURE__ */ jsxs32(View43, { style: { marginTop: 16 }, children: [
5972
- /* @__PURE__ */ jsx52(
5982
+ /* @__PURE__ */ jsx53(
5973
5983
  View43,
5974
5984
  {
5975
5985
  style: [
@@ -5979,7 +5989,7 @@ function ConfirmMergeRequestDialog({
5979
5989
  opacity: canConfirm ? 1 : 0.5
5980
5990
  }
5981
5991
  ],
5982
- children: /* @__PURE__ */ jsx52(
5992
+ children: /* @__PURE__ */ jsx53(
5983
5993
  Pressable14,
5984
5994
  {
5985
5995
  accessibilityRole: "button",
@@ -5987,13 +5997,13 @@ function ConfirmMergeRequestDialog({
5987
5997
  disabled: !canConfirm,
5988
5998
  onPress: handleConfirm,
5989
5999
  style: [fullWidthButtonBase, { flex: 1 }],
5990
- children: /* @__PURE__ */ jsx52(Text, { style: { textAlign: "center", color: theme.colors.onPrimary }, children: "Approve Merge" })
6000
+ children: /* @__PURE__ */ jsx53(Text, { style: { textAlign: "center", color: theme.colors.onPrimary }, children: "Approve Merge" })
5991
6001
  }
5992
6002
  )
5993
6003
  }
5994
6004
  ),
5995
- /* @__PURE__ */ jsx52(View43, { style: { height: 8 } }),
5996
- /* @__PURE__ */ jsx52(
6005
+ /* @__PURE__ */ jsx53(View43, { style: { height: 8 } }),
6006
+ /* @__PURE__ */ jsx53(
5997
6007
  View43,
5998
6008
  {
5999
6009
  style: [
@@ -6005,7 +6015,7 @@ function ConfirmMergeRequestDialog({
6005
6015
  opacity: isBuilding || !mergeRequest ? 0.5 : 1
6006
6016
  }
6007
6017
  ],
6008
- children: /* @__PURE__ */ jsx52(
6018
+ children: /* @__PURE__ */ jsx53(
6009
6019
  Pressable14,
6010
6020
  {
6011
6021
  accessibilityRole: "button",
@@ -6013,13 +6023,13 @@ function ConfirmMergeRequestDialog({
6013
6023
  disabled: isBuilding || !mergeRequest,
6014
6024
  onPress: handleTestFirst,
6015
6025
  style: [fullWidthButtonBase, { flex: 1 }],
6016
- children: /* @__PURE__ */ jsx52(Text, { style: { textAlign: "center", color: theme.colors.text }, children: isBuilding ? "Preparing\u2026" : "Test edits first" })
6026
+ children: /* @__PURE__ */ jsx53(Text, { style: { textAlign: "center", color: theme.colors.text }, children: isBuilding ? "Preparing\u2026" : "Test edits first" })
6017
6027
  }
6018
6028
  )
6019
6029
  }
6020
6030
  ),
6021
- /* @__PURE__ */ jsx52(View43, { style: { height: 8 } }),
6022
- /* @__PURE__ */ jsx52(
6031
+ /* @__PURE__ */ jsx53(View43, { style: { height: 8 } }),
6032
+ /* @__PURE__ */ jsx53(
6023
6033
  View43,
6024
6034
  {
6025
6035
  style: [
@@ -6030,14 +6040,14 @@ function ConfirmMergeRequestDialog({
6030
6040
  borderColor: theme.colors.border
6031
6041
  }
6032
6042
  ],
6033
- children: /* @__PURE__ */ jsx52(
6043
+ children: /* @__PURE__ */ jsx53(
6034
6044
  Pressable14,
6035
6045
  {
6036
6046
  accessibilityRole: "button",
6037
6047
  accessibilityLabel: "Cancel",
6038
6048
  onPress: close,
6039
6049
  style: [fullWidthButtonBase, { flex: 1 }],
6040
- children: /* @__PURE__ */ jsx52(Text, { style: { textAlign: "center", color: theme.colors.text }, children: "Cancel" })
6050
+ children: /* @__PURE__ */ jsx53(Text, { style: { textAlign: "center", color: theme.colors.text }, children: "Cancel" })
6041
6051
  }
6042
6052
  )
6043
6053
  }
@@ -6049,7 +6059,7 @@ function ConfirmMergeRequestDialog({
6049
6059
  }
6050
6060
 
6051
6061
  // src/studio/ui/ConfirmMergeFlow.tsx
6052
- import { jsx as jsx53 } from "react/jsx-runtime";
6062
+ import { jsx as jsx54 } from "react/jsx-runtime";
6053
6063
  function ConfirmMergeFlow({
6054
6064
  visible,
6055
6065
  onOpenChange,
@@ -6060,7 +6070,7 @@ function ConfirmMergeFlow({
6060
6070
  onConfirm,
6061
6071
  onTestFirst
6062
6072
  }) {
6063
- return /* @__PURE__ */ jsx53(
6073
+ return /* @__PURE__ */ jsx54(
6064
6074
  ConfirmMergeRequestDialog,
6065
6075
  {
6066
6076
  visible,
@@ -6082,7 +6092,7 @@ function ConfirmMergeFlow({
6082
6092
  }
6083
6093
 
6084
6094
  // src/studio/ui/StudioOverlay.tsx
6085
- import { Fragment as Fragment6, jsx as jsx54, jsxs as jsxs33 } from "react/jsx-runtime";
6095
+ import { Fragment as Fragment6, jsx as jsx55, jsxs as jsxs33 } from "react/jsx-runtime";
6086
6096
  function StudioOverlay({
6087
6097
  captureTargetRef,
6088
6098
  app,
@@ -6171,13 +6181,13 @@ function StudioOverlay({
6171
6181
  [closeSheet, onTestMr]
6172
6182
  );
6173
6183
  return /* @__PURE__ */ jsxs33(Fragment6, { children: [
6174
- /* @__PURE__ */ jsx54(EdgeGlowFrame, { visible: isTesting, role: "accent", thickness: 40, intensity: 1 }),
6175
- /* @__PURE__ */ jsx54(StudioBottomSheet, { open: sheetOpen, onOpenChange: setSheetOpen, children: /* @__PURE__ */ jsx54(
6184
+ /* @__PURE__ */ jsx55(EdgeGlowFrame, { visible: isTesting, role: "accent", thickness: 40, intensity: 1 }),
6185
+ /* @__PURE__ */ jsx55(StudioBottomSheet, { open: sheetOpen, onOpenChange: setSheetOpen, children: /* @__PURE__ */ jsx55(
6176
6186
  StudioSheetPager,
6177
6187
  {
6178
6188
  activePage,
6179
6189
  width,
6180
- preview: /* @__PURE__ */ jsx54(
6190
+ preview: /* @__PURE__ */ jsx55(
6181
6191
  PreviewPanel,
6182
6192
  {
6183
6193
  app,
@@ -6203,7 +6213,7 @@ function StudioOverlay({
6203
6213
  commentCountOverride: commentsCount ?? void 0
6204
6214
  }
6205
6215
  ),
6206
- chat: /* @__PURE__ */ jsx54(
6216
+ chat: /* @__PURE__ */ jsx55(
6207
6217
  ChatPanel,
6208
6218
  {
6209
6219
  messages: chatMessages,
@@ -6226,7 +6236,7 @@ function StudioOverlay({
6226
6236
  )
6227
6237
  }
6228
6238
  ) }),
6229
- /* @__PURE__ */ jsx54(
6239
+ /* @__PURE__ */ jsx55(
6230
6240
  FloatingDraggableButton,
6231
6241
  {
6232
6242
  visible: !sheetOpen && !drawing,
@@ -6234,10 +6244,10 @@ function StudioOverlay({
6234
6244
  badgeCount: incomingMergeRequests.length,
6235
6245
  onPress: toggleSheet,
6236
6246
  isLoading: (app == null ? void 0 : app.status) === "editing",
6237
- children: /* @__PURE__ */ jsx54(View44, { style: { width: 28, height: 28, alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsx54(merge_default, { width: 24, height: 24, color: theme.colors.floatingContent }) })
6247
+ children: /* @__PURE__ */ jsx55(View44, { style: { width: 28, height: 28, alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsx55(MergeIcon, { width: 24, height: 24, color: theme.colors.floatingContent }) })
6238
6248
  }
6239
6249
  ),
6240
- /* @__PURE__ */ jsx54(
6250
+ /* @__PURE__ */ jsx55(
6241
6251
  DrawModeOverlay,
6242
6252
  {
6243
6253
  visible: drawing,
@@ -6246,7 +6256,7 @@ function StudioOverlay({
6246
6256
  onCapture: handleDrawCapture
6247
6257
  }
6248
6258
  ),
6249
- /* @__PURE__ */ jsx54(
6259
+ /* @__PURE__ */ jsx55(
6250
6260
  ConfirmMergeFlow,
6251
6261
  {
6252
6262
  visible: Boolean(confirmMr),
@@ -6259,7 +6269,7 @@ function StudioOverlay({
6259
6269
  onTestFirst: handleTestMr
6260
6270
  }
6261
6271
  ),
6262
- /* @__PURE__ */ jsx54(
6272
+ /* @__PURE__ */ jsx55(
6263
6273
  AppCommentsSheet,
6264
6274
  {
6265
6275
  appId: commentsAppId,
@@ -6272,7 +6282,7 @@ function StudioOverlay({
6272
6282
  }
6273
6283
 
6274
6284
  // src/studio/ComergeStudio.tsx
6275
- import { jsx as jsx55, jsxs as jsxs34 } from "react/jsx-runtime";
6285
+ import { jsx as jsx56, jsxs as jsxs34 } from "react/jsx-runtime";
6276
6286
  function ComergeStudio({
6277
6287
  appId,
6278
6288
  appKey = "MicroMain",
@@ -6289,7 +6299,7 @@ function ComergeStudio({
6289
6299
  setPendingRuntimeTargetAppId(null);
6290
6300
  }, [appId]);
6291
6301
  const captureTargetRef = React38.useRef(null);
6292
- return /* @__PURE__ */ jsx55(StudioBootstrap, { children: ({ userId }) => /* @__PURE__ */ jsx55(BottomSheetModalProvider, { children: /* @__PURE__ */ jsx55(
6302
+ return /* @__PURE__ */ jsx56(StudioBootstrap, { children: ({ userId }) => /* @__PURE__ */ jsx56(BottomSheetModalProvider, { children: /* @__PURE__ */ jsx56(
6293
6303
  ComergeStudioInner,
6294
6304
  {
6295
6305
  userId,
@@ -6382,9 +6392,9 @@ function ComergeStudioInner({
6382
6392
  const payloadType = typeof ((_a = last.payload) == null ? void 0 : _a.type) === "string" ? String(last.payload.type) : void 0;
6383
6393
  return payloadType !== "outcome";
6384
6394
  }, [thread.raw]);
6385
- return /* @__PURE__ */ jsx55(View45, { style: [{ flex: 1 }, style], children: /* @__PURE__ */ jsxs34(View45, { ref: captureTargetRef, style: { flex: 1 }, collapsable: false, children: [
6386
- /* @__PURE__ */ jsx55(RuntimeRenderer, { appKey, bundlePath: bundle.bundlePath, renderToken: bundle.renderToken }),
6387
- /* @__PURE__ */ jsx55(
6395
+ return /* @__PURE__ */ jsx56(View45, { style: [{ flex: 1 }, style], children: /* @__PURE__ */ jsxs34(View45, { ref: captureTargetRef, style: { flex: 1 }, collapsable: false, children: [
6396
+ /* @__PURE__ */ jsx56(RuntimeRenderer, { appKey, bundlePath: bundle.bundlePath, renderToken: bundle.renderToken }),
6397
+ /* @__PURE__ */ jsx56(
6388
6398
  StudioOverlay,
6389
6399
  {
6390
6400
  captureTargetRef,