@buoy-gg/ask-buoy 7.0.34 → 7.0.35

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 (239) hide show
  1. package/README.md +1 -1
  2. package/lib/commonjs/blocks/AskBlocks.js +338 -1
  3. package/lib/commonjs/blocks/AskBlocks.js.map +1 -0
  4. package/lib/commonjs/blocks/BlockRenderer.js +250 -1
  5. package/lib/commonjs/blocks/BlockRenderer.js.map +1 -0
  6. package/lib/commonjs/blocks/ChromePrototypes.js +514 -1
  7. package/lib/commonjs/blocks/ChromePrototypes.js.map +1 -0
  8. package/lib/commonjs/blocks/DataBlocks.js +688 -1
  9. package/lib/commonjs/blocks/DataBlocks.js.map +1 -0
  10. package/lib/commonjs/blocks/ExtraBlocks.js +1854 -1
  11. package/lib/commonjs/blocks/ExtraBlocks.js.map +1 -0
  12. package/lib/commonjs/blocks/MediaBlocks.js +140 -1
  13. package/lib/commonjs/blocks/MediaBlocks.js.map +1 -0
  14. package/lib/commonjs/blocks/ReceiptBlocks.js +586 -1
  15. package/lib/commonjs/blocks/ReceiptBlocks.js.map +1 -0
  16. package/lib/commonjs/blocks/context.js +42 -1
  17. package/lib/commonjs/blocks/context.js.map +1 -0
  18. package/lib/commonjs/blocks/icons.js +96 -1
  19. package/lib/commonjs/blocks/icons.js.map +1 -0
  20. package/lib/commonjs/blocks/index.js +95 -1
  21. package/lib/commonjs/blocks/index.js.map +1 -0
  22. package/lib/commonjs/blocks/listRow.test.js +55 -0
  23. package/lib/commonjs/blocks/listRow.test.js.map +1 -0
  24. package/lib/commonjs/blocks/pageState.js +34 -0
  25. package/lib/commonjs/blocks/pageState.js.map +1 -0
  26. package/lib/commonjs/blocks/pageState.test.js +57 -0
  27. package/lib/commonjs/blocks/pageState.test.js.map +1 -0
  28. package/lib/commonjs/blocks/primitives.js +401 -1
  29. package/lib/commonjs/blocks/primitives.js.map +1 -0
  30. package/lib/commonjs/blocks/primitivesIndex.js +62 -1
  31. package/lib/commonjs/blocks/primitivesIndex.js.map +1 -0
  32. package/lib/commonjs/components/ApprovalCard.js +140 -1
  33. package/lib/commonjs/components/ApprovalCard.js.map +1 -0
  34. package/lib/commonjs/components/AskBuoyHeader.js +164 -1
  35. package/lib/commonjs/components/AskBuoyHeader.js.map +1 -0
  36. package/lib/commonjs/components/AskBuoyIcon.js +19 -1
  37. package/lib/commonjs/components/AskBuoyIcon.js.map +1 -0
  38. package/lib/commonjs/components/AskBuoyModal.js +353 -1
  39. package/lib/commonjs/components/AskBuoyModal.js.map +1 -0
  40. package/lib/commonjs/components/AskBuoySettings.js +69 -0
  41. package/lib/commonjs/components/AskBuoySettings.js.map +1 -0
  42. package/lib/commonjs/components/ChangesBar.js +211 -1
  43. package/lib/commonjs/components/ChangesBar.js.map +1 -0
  44. package/lib/commonjs/components/Composer.js +175 -1
  45. package/lib/commonjs/components/Composer.js.map +1 -0
  46. package/lib/commonjs/components/EmptyState.js +154 -1
  47. package/lib/commonjs/components/EmptyState.js.map +1 -0
  48. package/lib/commonjs/components/Markdown.js +252 -1
  49. package/lib/commonjs/components/Markdown.js.map +1 -0
  50. package/lib/commonjs/components/MessageList.js +683 -1
  51. package/lib/commonjs/components/MessageList.js.map +1 -0
  52. package/lib/commonjs/components/ThinkingStrip.js +223 -0
  53. package/lib/commonjs/components/ThinkingStrip.js.map +1 -0
  54. package/lib/commonjs/components/TypingDots.js +63 -1
  55. package/lib/commonjs/components/TypingDots.js.map +1 -0
  56. package/lib/commonjs/components/useCopyAction.js +50 -0
  57. package/lib/commonjs/components/useCopyAction.js.map +1 -0
  58. package/lib/commonjs/index.js +252 -1
  59. package/lib/commonjs/index.js.map +1 -0
  60. package/lib/commonjs/preset.js +90 -1
  61. package/lib/commonjs/preset.js.map +1 -0
  62. package/lib/commonjs/store/askBuoySettings.js +67 -0
  63. package/lib/commonjs/store/askBuoySettings.js.map +1 -0
  64. package/lib/commonjs/store/askBuoyStore.js +365 -1
  65. package/lib/commonjs/store/askBuoyStore.js.map +1 -0
  66. package/lib/commonjs/store/restoredIds.test.js +47 -0
  67. package/lib/commonjs/store/restoredIds.test.js.map +1 -0
  68. package/lib/commonjs/store/traceText.js +81 -0
  69. package/lib/commonjs/store/traceText.js.map +1 -0
  70. package/lib/commonjs/store/traceText.test.js +112 -0
  71. package/lib/commonjs/store/traceText.test.js.map +1 -0
  72. package/lib/commonjs/store/transcriptPersistence.js +208 -0
  73. package/lib/commonjs/store/transcriptPersistence.js.map +1 -0
  74. package/lib/commonjs/store/transcriptPersistence.test.js +185 -0
  75. package/lib/commonjs/store/transcriptPersistence.test.js.map +1 -0
  76. package/lib/commonjs/store/useAskBuoy.js +400 -1
  77. package/lib/commonjs/store/useAskBuoy.js.map +1 -0
  78. package/lib/commonjs/store/useAskBuoySettings.js +14 -0
  79. package/lib/commonjs/store/useAskBuoySettings.js.map +1 -0
  80. package/lib/commonjs/sync/askBuoySyncAdapter.js +119 -1
  81. package/lib/commonjs/sync/askBuoySyncAdapter.js.map +1 -0
  82. package/lib/commonjs/sync/askBuoySyncAdapter.test.js +141 -1
  83. package/lib/commonjs/sync/askBuoySyncAdapter.test.js.map +1 -0
  84. package/lib/commonjs/sync/wire.js +58 -1
  85. package/lib/commonjs/sync/wire.js.map +1 -0
  86. package/lib/commonjs/types.js +6 -1
  87. package/lib/commonjs/types.js.map +1 -0
  88. package/lib/module/blocks/AskBlocks.js +331 -1
  89. package/lib/module/blocks/AskBlocks.js.map +1 -0
  90. package/lib/module/blocks/BlockRenderer.js +245 -1
  91. package/lib/module/blocks/BlockRenderer.js.map +1 -0
  92. package/lib/module/blocks/ChromePrototypes.js +503 -1
  93. package/lib/module/blocks/ChromePrototypes.js.map +1 -0
  94. package/lib/module/blocks/DataBlocks.js +674 -1
  95. package/lib/module/blocks/DataBlocks.js.map +1 -0
  96. package/lib/module/blocks/ExtraBlocks.js +1827 -1
  97. package/lib/module/blocks/ExtraBlocks.js.map +1 -0
  98. package/lib/module/blocks/MediaBlocks.js +135 -1
  99. package/lib/module/blocks/MediaBlocks.js.map +1 -0
  100. package/lib/module/blocks/ReceiptBlocks.js +574 -1
  101. package/lib/module/blocks/ReceiptBlocks.js.map +1 -0
  102. package/lib/module/blocks/context.js +35 -1
  103. package/lib/module/blocks/context.js.map +1 -0
  104. package/lib/module/blocks/icons.js +91 -1
  105. package/lib/module/blocks/icons.js.map +1 -0
  106. package/lib/module/blocks/index.js +8 -1
  107. package/lib/module/blocks/index.js.map +1 -0
  108. package/lib/module/blocks/listRow.test.js +56 -0
  109. package/lib/module/blocks/listRow.test.js.map +1 -0
  110. package/lib/module/blocks/pageState.js +30 -0
  111. package/lib/module/blocks/pageState.js.map +1 -0
  112. package/lib/module/blocks/pageState.test.js +56 -0
  113. package/lib/module/blocks/pageState.test.js.map +1 -0
  114. package/lib/module/blocks/primitives.js +389 -1
  115. package/lib/module/blocks/primitives.js.map +1 -0
  116. package/lib/module/blocks/primitivesIndex.js +5 -1
  117. package/lib/module/blocks/primitivesIndex.js.map +1 -0
  118. package/lib/module/components/ApprovalCard.js +135 -1
  119. package/lib/module/components/ApprovalCard.js.map +1 -0
  120. package/lib/module/components/AskBuoyHeader.js +161 -1
  121. package/lib/module/components/AskBuoyHeader.js.map +1 -0
  122. package/lib/module/components/AskBuoyIcon.js +8 -1
  123. package/lib/module/components/AskBuoyIcon.js.map +1 -0
  124. package/lib/module/components/AskBuoyModal.js +348 -1
  125. package/lib/module/components/AskBuoyModal.js.map +1 -0
  126. package/lib/module/components/AskBuoySettings.js +64 -0
  127. package/lib/module/components/AskBuoySettings.js.map +1 -0
  128. package/lib/module/components/ChangesBar.js +206 -1
  129. package/lib/module/components/ChangesBar.js.map +1 -0
  130. package/lib/module/components/Composer.js +170 -1
  131. package/lib/module/components/Composer.js.map +1 -0
  132. package/lib/module/components/EmptyState.js +149 -1
  133. package/lib/module/components/EmptyState.js.map +1 -0
  134. package/lib/module/components/Markdown.js +246 -1
  135. package/lib/module/components/Markdown.js.map +1 -0
  136. package/lib/module/components/MessageList.js +677 -1
  137. package/lib/module/components/MessageList.js.map +1 -0
  138. package/lib/module/components/ThinkingStrip.js +218 -0
  139. package/lib/module/components/ThinkingStrip.js.map +1 -0
  140. package/lib/module/components/TypingDots.js +58 -1
  141. package/lib/module/components/TypingDots.js.map +1 -0
  142. package/lib/module/components/useCopyAction.js +46 -0
  143. package/lib/module/components/useCopyAction.js.map +1 -0
  144. package/lib/module/index.js +34 -1
  145. package/lib/module/index.js.map +1 -0
  146. package/lib/module/preset.js +73 -1
  147. package/lib/module/preset.js.map +1 -0
  148. package/lib/module/store/askBuoySettings.js +62 -0
  149. package/lib/module/store/askBuoySettings.js.map +1 -0
  150. package/lib/module/store/askBuoyStore.js +361 -1
  151. package/lib/module/store/askBuoyStore.js.map +1 -0
  152. package/lib/module/store/restoredIds.test.js +46 -0
  153. package/lib/module/store/restoredIds.test.js.map +1 -0
  154. package/lib/module/store/traceText.js +75 -0
  155. package/lib/module/store/traceText.js.map +1 -0
  156. package/lib/module/store/traceText.test.js +111 -0
  157. package/lib/module/store/traceText.test.js.map +1 -0
  158. package/lib/module/store/transcriptPersistence.js +198 -0
  159. package/lib/module/store/transcriptPersistence.js.map +1 -0
  160. package/lib/module/store/transcriptPersistence.test.js +184 -0
  161. package/lib/module/store/transcriptPersistence.test.js.map +1 -0
  162. package/lib/module/store/useAskBuoy.js +394 -1
  163. package/lib/module/store/useAskBuoy.js.map +1 -0
  164. package/lib/module/store/useAskBuoySettings.js +9 -0
  165. package/lib/module/store/useAskBuoySettings.js.map +1 -0
  166. package/lib/module/sync/askBuoySyncAdapter.js +114 -1
  167. package/lib/module/sync/askBuoySyncAdapter.js.map +1 -0
  168. package/lib/module/sync/askBuoySyncAdapter.test.js +140 -1
  169. package/lib/module/sync/askBuoySyncAdapter.test.js.map +1 -0
  170. package/lib/module/sync/wire.js +47 -1
  171. package/lib/module/sync/wire.js.map +1 -0
  172. package/lib/module/types.js +4 -1
  173. package/lib/module/types.js.map +1 -0
  174. package/lib/typescript/blocks/AskBlocks.d.ts.map +1 -0
  175. package/lib/typescript/blocks/BlockRenderer.d.ts.map +1 -0
  176. package/lib/typescript/blocks/ChromePrototypes.d.ts.map +1 -0
  177. package/lib/typescript/blocks/DataBlocks.d.ts +31 -0
  178. package/lib/typescript/blocks/DataBlocks.d.ts.map +1 -0
  179. package/lib/typescript/blocks/ExtraBlocks.d.ts +11 -0
  180. package/lib/typescript/blocks/ExtraBlocks.d.ts.map +1 -0
  181. package/lib/typescript/blocks/MediaBlocks.d.ts.map +1 -0
  182. package/lib/typescript/blocks/ReceiptBlocks.d.ts.map +1 -0
  183. package/lib/typescript/blocks/context.d.ts.map +1 -0
  184. package/lib/typescript/blocks/icons.d.ts.map +1 -0
  185. package/lib/typescript/blocks/index.d.ts.map +1 -0
  186. package/lib/typescript/blocks/listRow.test.d.ts +2 -0
  187. package/lib/typescript/blocks/listRow.test.d.ts.map +1 -0
  188. package/lib/typescript/blocks/pageState.d.ts +23 -0
  189. package/lib/typescript/blocks/pageState.d.ts.map +1 -0
  190. package/lib/typescript/blocks/pageState.test.d.ts +2 -0
  191. package/lib/typescript/blocks/pageState.test.d.ts.map +1 -0
  192. package/lib/typescript/blocks/primitives.d.ts +39 -9
  193. package/lib/typescript/blocks/primitives.d.ts.map +1 -0
  194. package/lib/typescript/blocks/primitivesIndex.d.ts +2 -1
  195. package/lib/typescript/blocks/primitivesIndex.d.ts.map +1 -0
  196. package/lib/typescript/components/ApprovalCard.d.ts.map +1 -0
  197. package/lib/typescript/components/AskBuoyHeader.d.ts +11 -1
  198. package/lib/typescript/components/AskBuoyHeader.d.ts.map +1 -0
  199. package/lib/typescript/components/AskBuoyIcon.d.ts.map +1 -0
  200. package/lib/typescript/components/AskBuoyModal.d.ts.map +1 -0
  201. package/lib/typescript/components/AskBuoySettings.d.ts +2 -0
  202. package/lib/typescript/components/AskBuoySettings.d.ts.map +1 -0
  203. package/lib/typescript/components/ChangesBar.d.ts.map +1 -0
  204. package/lib/typescript/components/Composer.d.ts.map +1 -0
  205. package/lib/typescript/components/EmptyState.d.ts.map +1 -0
  206. package/lib/typescript/components/Markdown.d.ts.map +1 -0
  207. package/lib/typescript/components/MessageList.d.ts +12 -5
  208. package/lib/typescript/components/MessageList.d.ts.map +1 -0
  209. package/lib/typescript/components/ThinkingStrip.d.ts +5 -0
  210. package/lib/typescript/components/ThinkingStrip.d.ts.map +1 -0
  211. package/lib/typescript/components/TypingDots.d.ts.map +1 -0
  212. package/lib/typescript/components/useCopyAction.d.ts +5 -0
  213. package/lib/typescript/components/useCopyAction.d.ts.map +1 -0
  214. package/lib/typescript/index.d.ts +5 -0
  215. package/lib/typescript/index.d.ts.map +1 -0
  216. package/lib/typescript/preset.d.ts.map +1 -0
  217. package/lib/typescript/store/askBuoySettings.d.ts +22 -0
  218. package/lib/typescript/store/askBuoySettings.d.ts.map +1 -0
  219. package/lib/typescript/store/askBuoyStore.d.ts +74 -13
  220. package/lib/typescript/store/askBuoyStore.d.ts.map +1 -0
  221. package/lib/typescript/store/restoredIds.test.d.ts +2 -0
  222. package/lib/typescript/store/restoredIds.test.d.ts.map +1 -0
  223. package/lib/typescript/store/traceText.d.ts +33 -0
  224. package/lib/typescript/store/traceText.d.ts.map +1 -0
  225. package/lib/typescript/store/traceText.test.d.ts +2 -0
  226. package/lib/typescript/store/traceText.test.d.ts.map +1 -0
  227. package/lib/typescript/store/transcriptPersistence.d.ts +40 -0
  228. package/lib/typescript/store/transcriptPersistence.d.ts.map +1 -0
  229. package/lib/typescript/store/transcriptPersistence.test.d.ts +2 -0
  230. package/lib/typescript/store/transcriptPersistence.test.d.ts.map +1 -0
  231. package/lib/typescript/store/useAskBuoy.d.ts.map +1 -0
  232. package/lib/typescript/store/useAskBuoySettings.d.ts +3 -0
  233. package/lib/typescript/store/useAskBuoySettings.d.ts.map +1 -0
  234. package/lib/typescript/sync/askBuoySyncAdapter.d.ts.map +1 -0
  235. package/lib/typescript/sync/askBuoySyncAdapter.test.d.ts.map +1 -0
  236. package/lib/typescript/sync/wire.d.ts.map +1 -0
  237. package/lib/typescript/types.d.ts +24 -1
  238. package/lib/typescript/types.d.ts.map +1 -0
  239. package/package.json +8 -8
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AskBuoySettings = AskBuoySettings;
7
+ var _reactNative = require("react-native");
8
+ var _sharedUi = require("@buoy-gg/shared-ui");
9
+ var _useAskBuoySettings = require("../store/useAskBuoySettings");
10
+ var _askBuoySettings = require("../store/askBuoySettings");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ /**
13
+ * The sheet's settings, reached from the header.
14
+ *
15
+ * A view inside the sheet rather than a second modal: a settings panel that
16
+ * covers the conversation you are configuring makes the effect of a toggle
17
+ * invisible until you dismiss it. Back returns to the chat with the
18
+ * transcript exactly where it was.
19
+ *
20
+ * Sections are by subject, not by implementation. "Chat" is what a tester
21
+ * calls the thing they are looking at.
22
+ */
23
+
24
+ function AskBuoySettings() {
25
+ const settings = (0, _useAskBuoySettings.useAskBuoySettings)();
26
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
27
+ style: styles.scroll,
28
+ contentContainerStyle: styles.content,
29
+ testID: "buoy-ask-buoy-settings",
30
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
31
+ style: styles.section,
32
+ children: "CHAT"
33
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToggleRow, {
34
+ testID: "buoy-ask-buoy-setting-thinking",
35
+ label: "Show agent thinking",
36
+ description: "Adds a collapsed strip under each answer: the model's reasoning, and every step it ran with its parameters, result, duration and token cost. Copy includes the steps and reasoning while this is on, so you can read the run outside the app.",
37
+ value: settings.showThinking,
38
+ onValueChange: next => _askBuoySettings.askBuoySettings.set("showThinking", next)
39
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
40
+ style: styles.note,
41
+ children: "Not every model reports reasoning. Claude thinks by default; most OpenAI models return none, and the strip then shows the steps alone."
42
+ })]
43
+ });
44
+ }
45
+ const styles = _reactNative.StyleSheet.create({
46
+ scroll: {
47
+ flex: 1
48
+ },
49
+ content: {
50
+ padding: _sharedUi.night.gutter,
51
+ gap: 10,
52
+ paddingBottom: 32
53
+ },
54
+ section: {
55
+ color: _sharedUi.night.color.textTertiary,
56
+ fontSize: 10,
57
+ fontWeight: "700",
58
+ letterSpacing: 0.6,
59
+ paddingHorizontal: 4,
60
+ paddingTop: 4
61
+ },
62
+ note: {
63
+ color: _sharedUi.night.color.textTertiary,
64
+ fontSize: _sharedUi.night.font.micro,
65
+ lineHeight: 16,
66
+ paddingHorizontal: 4
67
+ }
68
+ });
69
+ //# sourceMappingURL=AskBuoySettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_sharedUi","_useAskBuoySettings","_askBuoySettings","_jsxRuntime","AskBuoySettings","settings","useAskBuoySettings","jsxs","ScrollView","style","styles","scroll","contentContainerStyle","content","testID","children","jsx","Text","section","ToggleRow","label","description","value","showThinking","onValueChange","next","askBuoySettings","set","note","StyleSheet","create","flex","padding","night","gutter","gap","paddingBottom","color","textTertiary","fontSize","fontWeight","letterSpacing","paddingHorizontal","paddingTop","font","micro","lineHeight"],"sourceRoot":"../../../src","sources":["components/AskBuoySettings.tsx"],"mappings":";;;;;;AAWA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAEA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AAA2D,IAAAI,WAAA,GAAAJ,OAAA;AAf3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOO,SAASK,eAAeA,CAAA,EAAG;EAChC,MAAMC,QAAQ,GAAG,IAAAC,sCAAkB,EAAC,CAAC;EACrC,oBACE,IAAAH,WAAA,CAAAI,IAAA,EAACT,YAAA,CAAAU,UAAU;IACTC,KAAK,EAAEC,MAAM,CAACC,MAAO;IACrBC,qBAAqB,EAAEF,MAAM,CAACG,OAAQ;IACtCC,MAAM,EAAC,wBAAwB;IAAAC,QAAA,gBAE/B,IAAAZ,WAAA,CAAAa,GAAA,EAAClB,YAAA,CAAAmB,IAAI;MAACR,KAAK,EAAEC,MAAM,CAACQ,OAAQ;MAAAH,QAAA,EAAC;IAAI,CAAM,CAAC,eACxC,IAAAZ,WAAA,CAAAa,GAAA,EAAChB,SAAA,CAAAmB,SAAS;MACRL,MAAM,EAAC,gCAAgC;MACvCM,KAAK,EAAC,qBAAqB;MAC3BC,WAAW,EAAC,+OAA+O;MAC3PC,KAAK,EAAEjB,QAAQ,CAACkB,YAAa;MAC7BC,aAAa,EAAGC,IAAI,IAAKC,gCAAe,CAACC,GAAG,CAAC,cAAc,EAAEF,IAAI;IAAE,CACpE,CAAC,eACF,IAAAtB,WAAA,CAAAa,GAAA,EAAClB,YAAA,CAAAmB,IAAI;MAACR,KAAK,EAAEC,MAAM,CAACkB,IAAK;MAAAb,QAAA,EAAC;IAG1B,CAAM,CAAC;EAAA,CACG,CAAC;AAEjB;AAEA,MAAML,MAAM,GAAGmB,uBAAU,CAACC,MAAM,CAAC;EAC/BnB,MAAM,EAAE;IAAEoB,IAAI,EAAE;EAAE,CAAC;EACnBlB,OAAO,EAAE;IAAEmB,OAAO,EAAEC,eAAK,CAACC,MAAM;IAAEC,GAAG,EAAE,EAAE;IAAEC,aAAa,EAAE;EAAG,CAAC;EAC9DlB,OAAO,EAAE;IACPmB,KAAK,EAAEJ,eAAK,CAACI,KAAK,CAACC,YAAY;IAC/BC,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,KAAK;IACjBC,aAAa,EAAE,GAAG;IAClBC,iBAAiB,EAAE,CAAC;IACpBC,UAAU,EAAE;EACd,CAAC;EACDf,IAAI,EAAE;IACJS,KAAK,EAAEJ,eAAK,CAACI,KAAK,CAACC,YAAY;IAC/BC,QAAQ,EAAEN,eAAK,CAACW,IAAI,CAACC,KAAK;IAC1BC,UAAU,EAAE,EAAE;IACdJ,iBAAiB,EAAE;EACrB;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1 +1,211 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChangesBar=ChangesBar;var _react=require("react"),_reactNative=require("react-native"),_sharedUi=require("@buoy-gg/shared-ui"),_agentCore=require("@buoy-gg/agent-core"),_jsxRuntime=require("react/jsx-runtime");const EMPTY=[];function useLedgerEntries(e){return(0,_react.useSyncExternalStore)(t=>e?.subscribe(t)??(()=>{}),()=>e?.list()??EMPTY,()=>e?.list()??EMPTY)}function ChangesBar({ledger:e,onUndoAll:t,expanded:r,onToggle:i}){const n=useLedgerEntries(e).filter(e=>!e.undoneAt),s=n.filter(e=>"transient"!==e.effect.kind);if(0===s.length)return null;const o=s.filter(e=>(0,_agentCore.isReversible)(e.effect)),a=s.length-o.length,l=n.length-s.length,c=r?_sharedUi.ChevronDown:_sharedUi.ChevronRight,d=[o.length>0?`${o.length} undoable`:null,a>0?`${a} permanent`:null].filter(Boolean).join(" · ");return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.wrap,children:[(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{testID:"buoy-ask-buoy-changes-bar",accessibilityRole:"button",accessibilityState:{expanded:r},onPress:i,style:styles.bar,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.dot}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.summary,numberOfLines:1,children:"Changed this app"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.counts,numberOfLines:1,children:d}),(0,_jsxRuntime.jsx)(c,{size:12,color:_sharedUi.night.color.textSecondary})]}),r&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.panel,children:[(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{style:styles.panelScroll,testID:"buoy-ask-buoy-changes-scroll",keyboardShouldPersistTaps:"handled",children:[s.map(e=>{const t=!(0,_agentCore.isReversible)(e.effect);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.row,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:e.effect.label}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.rowTag,t&&styles.rowTagMuted],children:t?"Permanent":"Undoable"})]},e.id)}),l>0&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.row,children:(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[styles.rowLabel,styles.rowLabelMuted],children:["Also did ",l," one-shot action",1===l?"":"s"," (navigation, taps) — nothing to undo."]})})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.footer,children:[o.length>0&&(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:"buoy-ask-buoy-undo-all",accessibilityRole:"button",onPress:t,style:({pressed:e})=>[styles.undo,e&&styles.pressed],children:(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.undoText,children:["Undo ",o.length," change",1===o.length?"":"s"]})}),a>0&&(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.footnote,children:"Permanent changes can't be undone from here."})]})]})]})}const styles=_reactNative.StyleSheet.create({wrap:{borderBottomWidth:_reactNative.StyleSheet.hairlineWidth,borderBottomColor:_sharedUi.night.color.border,backgroundColor:_sharedUi.night.color.warningSoft},bar:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:_sharedUi.night.gutter,paddingVertical:10},dot:{width:7,height:7,borderRadius:4,backgroundColor:_sharedUi.night.color.warning},summary:{color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.caption,fontWeight:"600"},counts:{flex:1,color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.caption},panel:{paddingHorizontal:_sharedUi.night.gutter,paddingBottom:12,gap:10},panelScroll:{maxHeight:180},row:{flexDirection:"row",alignItems:"flex-start",gap:10,paddingVertical:8,borderTopWidth:_reactNative.StyleSheet.hairlineWidth,borderTopColor:_sharedUi.night.color.separator},rowLabel:{flex:1,color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.caption,lineHeight:18},rowTag:{color:_sharedUi.night.color.accent,fontSize:_sharedUi.night.font.micro,fontWeight:"600",letterSpacing:.6,textTransform:"uppercase",paddingTop:2},rowTagMuted:{color:_sharedUi.night.color.textTertiary},rowLabelMuted:{color:_sharedUi.night.color.textTertiary},footer:{flexDirection:"row",alignItems:"center",gap:12,flexWrap:"wrap"},undo:{paddingHorizontal:14,paddingVertical:8,borderRadius:_sharedUi.night.radius.row,backgroundColor:_sharedUi.night.color.button},undoText:{color:_sharedUi.night.color.accent,fontSize:_sharedUi.night.font.caption,fontWeight:"600"},footnote:{flex:1,color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro},pressed:{opacity:.7}});
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ChangesBar = ChangesBar;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _sharedUi = require("@buoy-gg/shared-ui");
10
+ var _agentCore = require("@buoy-gg/agent-core");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ /**
13
+ * "The agent changed things" — the bar, and the list behind it.
14
+ *
15
+ * Ask Buoy mutates without asking, so this is what keeps the user in control:
16
+ * if reality has been bent, you can never not know it. Same principle as the
17
+ * impersonate and override banners.
18
+ *
19
+ * It counts REVERSIBLE and ONE-SHOT effects separately, which is the one place
20
+ * this deliberately differs from the Scenarios banner. That one folds
21
+ * transients into a single "N changes" total and then silently no-ops on them
22
+ * at revert — a user who taps Undo, sees "4 changes", and finds three of them
23
+ * still in place learns not to trust the bar. Better to say "1 undoable ·
24
+ * 1 permanent" and be believed.
25
+ */
26
+
27
+ const EMPTY = [];
28
+ function useLedgerEntries(ledger) {
29
+ return (0, _react.useSyncExternalStore)(fn => ledger?.subscribe(fn) ?? (() => {}), () => ledger?.list() ?? EMPTY, () => ledger?.list() ?? EMPTY);
30
+ }
31
+ function ChangesBar({
32
+ ledger,
33
+ onUndoAll,
34
+ expanded,
35
+ onToggle
36
+ }) {
37
+ const entries = useLedgerEntries(ledger);
38
+ const outstanding = entries.filter(e => !e.undoneAt);
39
+ // Transients — navigation, taps — are one-shot ACTIONS, not changes. Counting
40
+ // them here read "Changed this app · 9 permanent" after a read-only tour,
41
+ // which is the bar lying in the alarming direction. They still appear in the
42
+ // expanded panel's footnote, because honesty, but they raise no banner.
43
+ const changes = outstanding.filter(e => e.effect.kind !== "transient");
44
+ if (changes.length === 0) return null;
45
+ const reversible = changes.filter(e => (0, _agentCore.isReversible)(e.effect));
46
+ const permanent = changes.length - reversible.length;
47
+ const transients = outstanding.length - changes.length;
48
+ const Chevron = expanded ? _sharedUi.ChevronDown : _sharedUi.ChevronRight;
49
+ const counts = [reversible.length > 0 ? `${reversible.length} undoable` : null, permanent > 0 ? `${permanent} permanent` : null].filter(Boolean).join(" · ");
50
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
51
+ style: styles.wrap,
52
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
53
+ testID: "buoy-ask-buoy-changes-bar",
54
+ accessibilityRole: "button",
55
+ accessibilityState: {
56
+ expanded
57
+ },
58
+ onPress: onToggle,
59
+ style: styles.bar,
60
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
61
+ style: styles.dot
62
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
63
+ style: styles.summary,
64
+ numberOfLines: 1,
65
+ children: "Changed this app"
66
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
67
+ style: styles.counts,
68
+ numberOfLines: 1,
69
+ children: counts
70
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Chevron, {
71
+ size: 12,
72
+ color: _sharedUi.night.color.textSecondary
73
+ })]
74
+ }), expanded && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
75
+ style: styles.panel,
76
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
77
+ style: styles.panelScroll,
78
+ testID: "buoy-ask-buoy-changes-scroll",
79
+ keyboardShouldPersistTaps: "handled",
80
+ children: [changes.map(entry => {
81
+ const oneOff = !(0, _agentCore.isReversible)(entry.effect);
82
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
83
+ style: styles.row,
84
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
85
+ style: styles.rowLabel,
86
+ children: entry.effect.label
87
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
88
+ style: [styles.rowTag, oneOff && styles.rowTagMuted],
89
+ children: oneOff ? "Permanent" : "Undoable"
90
+ })]
91
+ }, entry.id);
92
+ }), transients > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
93
+ style: styles.row,
94
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
95
+ style: [styles.rowLabel, styles.rowLabelMuted],
96
+ children: ["Also did ", transients, " one-shot action", transients === 1 ? "" : "s", " (navigation, taps) \u2014 nothing to undo."]
97
+ })
98
+ })]
99
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
100
+ style: styles.footer,
101
+ children: [reversible.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
102
+ testID: "buoy-ask-buoy-undo-all",
103
+ accessibilityRole: "button",
104
+ onPress: onUndoAll,
105
+ style: ({
106
+ pressed
107
+ }) => [styles.undo, pressed && styles.pressed],
108
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
109
+ style: styles.undoText,
110
+ children: ["Undo ", reversible.length, " change", reversible.length === 1 ? "" : "s"]
111
+ })
112
+ }), permanent > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
113
+ style: styles.footnote,
114
+ children: "Permanent changes can't be undone from here."
115
+ })]
116
+ })]
117
+ })]
118
+ });
119
+ }
120
+ const styles = _reactNative.StyleSheet.create({
121
+ wrap: {
122
+ borderBottomWidth: _reactNative.StyleSheet.hairlineWidth,
123
+ borderBottomColor: _sharedUi.night.color.border,
124
+ backgroundColor: _sharedUi.night.color.warningSoft
125
+ },
126
+ bar: {
127
+ flexDirection: "row",
128
+ alignItems: "center",
129
+ gap: 8,
130
+ paddingHorizontal: _sharedUi.night.gutter,
131
+ paddingVertical: 10
132
+ },
133
+ dot: {
134
+ width: 7,
135
+ height: 7,
136
+ borderRadius: 4,
137
+ backgroundColor: _sharedUi.night.color.warning
138
+ },
139
+ summary: {
140
+ color: _sharedUi.night.color.text,
141
+ fontSize: _sharedUi.night.font.caption,
142
+ fontWeight: "600"
143
+ },
144
+ counts: {
145
+ flex: 1,
146
+ color: _sharedUi.night.color.textSecondary,
147
+ fontSize: _sharedUi.night.font.caption
148
+ },
149
+ panel: {
150
+ paddingHorizontal: _sharedUi.night.gutter,
151
+ paddingBottom: 12,
152
+ gap: 10
153
+ },
154
+ panelScroll: {
155
+ maxHeight: 180
156
+ },
157
+ row: {
158
+ flexDirection: "row",
159
+ alignItems: "flex-start",
160
+ gap: 10,
161
+ paddingVertical: 8,
162
+ borderTopWidth: _reactNative.StyleSheet.hairlineWidth,
163
+ borderTopColor: _sharedUi.night.color.separator
164
+ },
165
+ rowLabel: {
166
+ flex: 1,
167
+ color: _sharedUi.night.color.text,
168
+ fontSize: _sharedUi.night.font.caption,
169
+ lineHeight: 18
170
+ },
171
+ rowTag: {
172
+ color: _sharedUi.night.color.accent,
173
+ fontSize: _sharedUi.night.font.micro,
174
+ fontWeight: "600",
175
+ letterSpacing: 0.6,
176
+ textTransform: "uppercase",
177
+ paddingTop: 2
178
+ },
179
+ rowTagMuted: {
180
+ color: _sharedUi.night.color.textTertiary
181
+ },
182
+ rowLabelMuted: {
183
+ color: _sharedUi.night.color.textTertiary
184
+ },
185
+ footer: {
186
+ flexDirection: "row",
187
+ alignItems: "center",
188
+ gap: 12,
189
+ flexWrap: "wrap"
190
+ },
191
+ undo: {
192
+ paddingHorizontal: 14,
193
+ paddingVertical: 8,
194
+ borderRadius: _sharedUi.night.radius.row,
195
+ backgroundColor: _sharedUi.night.color.button
196
+ },
197
+ undoText: {
198
+ color: _sharedUi.night.color.accent,
199
+ fontSize: _sharedUi.night.font.caption,
200
+ fontWeight: "600"
201
+ },
202
+ footnote: {
203
+ flex: 1,
204
+ color: _sharedUi.night.color.textTertiary,
205
+ fontSize: _sharedUi.night.font.micro
206
+ },
207
+ pressed: {
208
+ opacity: 0.7
209
+ }
210
+ });
211
+ //# sourceMappingURL=ChangesBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_sharedUi","_agentCore","_jsxRuntime","EMPTY","useLedgerEntries","ledger","useSyncExternalStore","fn","subscribe","list","ChangesBar","onUndoAll","expanded","onToggle","entries","outstanding","filter","e","undoneAt","changes","effect","kind","length","reversible","isReversible","permanent","transients","Chevron","ChevronDown","ChevronRight","counts","Boolean","join","jsxs","View","style","styles","wrap","children","Pressable","testID","accessibilityRole","accessibilityState","onPress","bar","jsx","dot","Text","summary","numberOfLines","size","color","night","textSecondary","panel","ScrollView","panelScroll","keyboardShouldPersistTaps","map","entry","oneOff","row","rowLabel","label","rowTag","rowTagMuted","id","rowLabelMuted","footer","pressed","undo","undoText","footnote","StyleSheet","create","borderBottomWidth","hairlineWidth","borderBottomColor","border","backgroundColor","warningSoft","flexDirection","alignItems","gap","paddingHorizontal","gutter","paddingVertical","width","height","borderRadius","warning","text","fontSize","font","caption","fontWeight","flex","paddingBottom","maxHeight","borderTopWidth","borderTopColor","separator","lineHeight","accent","micro","letterSpacing","textTransform","paddingTop","textTertiary","flexWrap","radius","button","opacity"],"sourceRoot":"../../../src","sources":["components/ChangesBar.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1,175 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Composer=Composer;var _react=require("react"),_reactNative=require("react-native"),_sharedUi=require("@buoy-gg/shared-ui"),_jsxRuntime=require("react/jsx-runtime");function Composer({onSend:e,onStop:t,busy:i,disabled:r,placeholder:s}){const[o,a]=(0,_react.useState)(""),l=(0,_react.useCallback)(()=>{const t=o.trim();t&&(a(""),e(t))},[o,e]),n=o.trim().length>0&&!i&&!r;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.wrap,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.field,r&&styles.fieldDisabled],children:(0,_jsxRuntime.jsx)(_reactNative.TextInput,{testID:"buoy-ask-buoy-input",style:styles.input,value:o,onChangeText:a,placeholder:s??(r?"Ask Buoy isn't set up yet":"Ask, or tell it what to change…"),placeholderTextColor:_sharedUi.night.color.placeholder,multiline:!0,editable:!r,keyboardType:"ascii-capable",autoCorrect:!0,autoCapitalize:"sentences",blurOnSubmit:!1,onSubmitEditing:l,returnKeyType:"send",maxLength:4e3})}),i?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:"buoy-ask-buoy-stop",accessibilityRole:"button",accessibilityLabel:"Stop",onPress:t,style:({pressed:e})=>[styles.button,styles.stop,e&&styles.pressed],children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.stopGlyph})}):(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:"buoy-ask-buoy-send",accessibilityRole:"button",accessibilityLabel:"Send",disabled:!n,onPress:l,style:({pressed:e})=>[styles.button,n?styles.sendOn:styles.sendOff,e&&n&&styles.pressed],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.sendGlyph,{color:n?_sharedUi.night.color.onAccent:_sharedUi.night.color.textTertiary}],children:"↑"})})]})}const styles=_reactNative.StyleSheet.create({wrap:{flexDirection:"row",alignItems:"flex-end",gap:8,paddingHorizontal:_sharedUi.night.gutter,paddingTop:10,paddingBottom:6,borderTopWidth:_reactNative.StyleSheet.hairlineWidth,borderTopColor:_sharedUi.night.color.border,backgroundColor:_sharedUi.night.color.bg},field:{flex:1,minHeight:40,justifyContent:"center",borderRadius:20,borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:_sharedUi.night.color.border,backgroundColor:_sharedUi.night.color.surfaceElevated},fieldDisabled:{opacity:.6},input:{maxHeight:120,paddingHorizontal:16,paddingTop:"ios"===_reactNative.Platform.OS?10:6,paddingBottom:"ios"===_reactNative.Platform.OS?10:6,color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.row,lineHeight:20},button:{width:40,height:40,borderRadius:20,alignItems:"center",justifyContent:"center"},sendGlyph:{fontSize:20,fontWeight:"700",lineHeight:22},sendOn:{backgroundColor:_sharedUi.night.color.accent},sendOff:{backgroundColor:_sharedUi.night.color.fill},stop:{backgroundColor:_sharedUi.night.color.fillTertiary},stopGlyph:{width:12,height:12,borderRadius:2,backgroundColor:_sharedUi.night.color.text},pressed:{opacity:.7}});
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Composer = Composer;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _sharedUi = require("@buoy-gg/shared-ui");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ /**
12
+ * The message box.
13
+ *
14
+ * This is the first keyboard-safe BOTTOM input in Buoy, and the reason none
15
+ * existed before is that JsModal has no keyboard handling at all: the sheet is
16
+ * `position:absolute; bottom:0` inside the app tree, not an RN `Modal`, so on
17
+ * iOS the keyboard simply draws over it. Two other tools hit this and chose to
18
+ * dodge it — NetworkNumberPrompt and StorageValueEditModal both say so in
19
+ * comments and pin their inputs to the TOP of the screen. A chat cannot.
20
+ *
21
+ * What makes it work:
22
+ * - `KeyboardAvoidingView` with `behavior="padding"`, iOS only. On Android
23
+ * Expo's default `softwareKeyboardLayoutMode: "resize"` shrinks the window
24
+ * and a bottom-anchored view rides up for free; adding padding there would
25
+ * lift it twice.
26
+ * - The parent list carries `keyboardShouldPersistTaps="handled"`. Without it
27
+ * the first tap after typing only dismisses the keyboard and Send never
28
+ * fires — a real shipped bug in Time Machine, and invisible to Detox because
29
+ * `replaceText` opens no keyboard.
30
+ * - `keyboardType="ascii-capable"`, because iOS Smart Punctuation rewrites
31
+ * straight quotes as curly ones. That permanently broke the raw-JSON editor
32
+ * in Storage, and a tester pasting a JSON blob here would hit the same wall.
33
+ *
34
+ * While the agent is working the send button becomes a STOP button — a
35
+ * square, the universal glyph — rather than a spinner in a circle, which
36
+ * looked like a disabled control and gave no hint it was tappable.
37
+ */
38
+
39
+ function Composer({
40
+ onSend,
41
+ onStop,
42
+ busy,
43
+ disabled,
44
+ placeholder
45
+ }) {
46
+ const [text, setText] = (0, _react.useState)("");
47
+ const submit = (0, _react.useCallback)(() => {
48
+ const value = text.trim();
49
+ if (!value) return;
50
+ setText("");
51
+ onSend(value);
52
+ }, [text, onSend]);
53
+ const canSend = text.trim().length > 0 && !busy && !disabled;
54
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
55
+ style: styles.wrap,
56
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
57
+ style: [styles.field, disabled && styles.fieldDisabled],
58
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
59
+ testID: "buoy-ask-buoy-input",
60
+ style: styles.input,
61
+ value: text,
62
+ onChangeText: setText,
63
+ placeholder: placeholder ?? (disabled ? "Ask Buoy isn't set up yet" : "Ask, or tell it what to change…"),
64
+ placeholderTextColor: _sharedUi.night.color.placeholder,
65
+ multiline: true,
66
+ editable: !disabled
67
+ // Straight quotes only — see the header note.
68
+ ,
69
+ keyboardType: "ascii-capable",
70
+ autoCorrect: true,
71
+ autoCapitalize: "sentences"
72
+ // Enter sends; Shift-Enter is not a thing on a phone keyboard, and a
73
+ // multiline box with no submit affordance strands people.
74
+ ,
75
+ blurOnSubmit: false,
76
+ onSubmitEditing: submit,
77
+ returnKeyType: "send",
78
+ maxLength: 4000
79
+ })
80
+ }), busy ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
81
+ testID: "buoy-ask-buoy-stop",
82
+ accessibilityRole: "button",
83
+ accessibilityLabel: "Stop",
84
+ onPress: onStop,
85
+ style: ({
86
+ pressed
87
+ }) => [styles.button, styles.stop, pressed && styles.pressed],
88
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
89
+ style: styles.stopGlyph
90
+ })
91
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
92
+ testID: "buoy-ask-buoy-send",
93
+ accessibilityRole: "button",
94
+ accessibilityLabel: "Send",
95
+ disabled: !canSend,
96
+ onPress: submit,
97
+ style: ({
98
+ pressed
99
+ }) => [styles.button, canSend ? styles.sendOn : styles.sendOff, pressed && canSend && styles.pressed],
100
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
101
+ style: [styles.sendGlyph, {
102
+ color: canSend ? _sharedUi.night.color.onAccent : _sharedUi.night.color.textTertiary
103
+ }],
104
+ children: "\u2191"
105
+ })
106
+ })]
107
+ });
108
+ }
109
+ const styles = _reactNative.StyleSheet.create({
110
+ wrap: {
111
+ flexDirection: "row",
112
+ alignItems: "flex-end",
113
+ gap: 8,
114
+ paddingHorizontal: _sharedUi.night.gutter,
115
+ paddingTop: 10,
116
+ paddingBottom: 6,
117
+ borderTopWidth: _reactNative.StyleSheet.hairlineWidth,
118
+ borderTopColor: _sharedUi.night.color.border,
119
+ // Opaque: messages scroll UNDER the composer, and a translucent bar over
120
+ // moving text is unreadable.
121
+ backgroundColor: _sharedUi.night.color.bg
122
+ },
123
+ field: {
124
+ flex: 1,
125
+ minHeight: 40,
126
+ justifyContent: "center",
127
+ borderRadius: 20,
128
+ borderWidth: _reactNative.StyleSheet.hairlineWidth,
129
+ borderColor: _sharedUi.night.color.border,
130
+ backgroundColor: _sharedUi.night.color.surfaceElevated
131
+ },
132
+ fieldDisabled: {
133
+ opacity: 0.6
134
+ },
135
+ input: {
136
+ maxHeight: 120,
137
+ paddingHorizontal: 16,
138
+ paddingTop: _reactNative.Platform.OS === "ios" ? 10 : 6,
139
+ paddingBottom: _reactNative.Platform.OS === "ios" ? 10 : 6,
140
+ color: _sharedUi.night.color.text,
141
+ fontSize: _sharedUi.night.font.row,
142
+ lineHeight: 20
143
+ },
144
+ button: {
145
+ width: 40,
146
+ height: 40,
147
+ borderRadius: 20,
148
+ alignItems: "center",
149
+ justifyContent: "center"
150
+ },
151
+ sendGlyph: {
152
+ fontSize: 20,
153
+ fontWeight: "700",
154
+ lineHeight: 22
155
+ },
156
+ sendOn: {
157
+ backgroundColor: _sharedUi.night.color.accent
158
+ },
159
+ sendOff: {
160
+ backgroundColor: _sharedUi.night.color.fill
161
+ },
162
+ stop: {
163
+ backgroundColor: _sharedUi.night.color.fillTertiary
164
+ },
165
+ stopGlyph: {
166
+ width: 12,
167
+ height: 12,
168
+ borderRadius: 2,
169
+ backgroundColor: _sharedUi.night.color.text
170
+ },
171
+ pressed: {
172
+ opacity: 0.7
173
+ }
174
+ });
175
+ //# sourceMappingURL=Composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_sharedUi","_jsxRuntime","Composer","onSend","onStop","busy","disabled","placeholder","text","setText","useState","submit","useCallback","value","trim","canSend","length","jsxs","View","style","styles","wrap","children","jsx","field","fieldDisabled","TextInput","testID","input","onChangeText","placeholderTextColor","night","color","multiline","editable","keyboardType","autoCorrect","autoCapitalize","blurOnSubmit","onSubmitEditing","returnKeyType","maxLength","Pressable","accessibilityRole","accessibilityLabel","onPress","pressed","button","stop","stopGlyph","sendOn","sendOff","Text","sendGlyph","onAccent","textTertiary","StyleSheet","create","flexDirection","alignItems","gap","paddingHorizontal","gutter","paddingTop","paddingBottom","borderTopWidth","hairlineWidth","borderTopColor","border","backgroundColor","bg","flex","minHeight","justifyContent","borderRadius","borderWidth","borderColor","surfaceElevated","opacity","maxHeight","Platform","OS","fontSize","font","row","lineHeight","width","height","fontWeight","accent","fill","fillTertiary"],"sourceRoot":"../../../src","sources":["components/Composer.tsx"],"mappings":"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","ignoreList":[]}