@buoy-gg/shared-ui 7.0.33 → 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 (323) hide show
  1. package/lib/commonjs/JsModal.js +57 -22
  2. package/lib/commonjs/dataViewer/CyberpunkInput.js +3 -2
  3. package/lib/commonjs/dataViewer/DataTreeActionBar.js +3 -2
  4. package/lib/commonjs/dataViewer/DataTreeActionDock.js +2 -1
  5. package/lib/commonjs/dataViewer/DiffSummary.js +4 -3
  6. package/lib/commonjs/dataViewer/LiveExplorer.js +11 -10
  7. package/lib/commonjs/dataViewer/SplitDiffViewer.js +10 -9
  8. package/lib/commonjs/dataViewer/ThemedSplitView.js +12 -11
  9. package/lib/commonjs/dataViewer/ValueEditModal.js +6 -5
  10. package/lib/commonjs/dataViewer/VirtualizedDataExplorer.js +4 -3
  11. package/lib/commonjs/dataViewer/tree/TreeDiffViewer.js +15 -14
  12. package/lib/commonjs/hooks/index.js +26 -0
  13. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  14. package/lib/commonjs/hooks/useChangeLog.js +55 -0
  15. package/lib/commonjs/hooks/useEventStoreEvents.js +65 -0
  16. package/lib/commonjs/hooks/usePersistedState.js +45 -10
  17. package/lib/commonjs/icons/index.js +533 -1
  18. package/lib/commonjs/index.js +143 -0
  19. package/lib/commonjs/license/FreeAccountPrompt.js +2 -1
  20. package/lib/commonjs/license/LicenseEntryModal.js +2 -1
  21. package/lib/commonjs/storage/definePersistedSetting.js +67 -0
  22. package/lib/commonjs/storage/index.js +8 -1
  23. package/lib/commonjs/stores/ChangeLog.js +197 -0
  24. package/lib/commonjs/stores/createToolStore.js +175 -0
  25. package/lib/commonjs/stores/index.js +15 -1
  26. package/lib/commonjs/sync/toolSyncAdapter.js +63 -0
  27. package/lib/commonjs/sync/wireForm.js +172 -0
  28. package/lib/commonjs/tools/defineTool.js +79 -0
  29. package/lib/commonjs/ui/components/ChangeRow.js +111 -0
  30. package/lib/commonjs/ui/components/ChipStrip.js +94 -0
  31. package/lib/commonjs/ui/components/ClipboardHintBanner.js +2 -1
  32. package/lib/commonjs/ui/components/CompactRow.js +3 -2
  33. package/lib/commonjs/ui/components/DataInspector.js +3 -2
  34. package/lib/commonjs/ui/components/DetailView.js +2 -1
  35. package/lib/commonjs/ui/components/DetailViewToggle.js +130 -0
  36. package/lib/commonjs/ui/components/DevToolsCard.js +3 -1
  37. package/lib/commonjs/ui/components/DynamicFilterView.js +8 -7
  38. package/lib/commonjs/ui/components/EntityFilterView.js +355 -0
  39. package/lib/commonjs/ui/components/EventHistoryViewer/CompareBar.js +5 -4
  40. package/lib/commonjs/ui/components/EventHistoryViewer/DiffModeTabs.js +2 -1
  41. package/lib/commonjs/ui/components/EventHistoryViewer/EventPickerModal.js +5 -4
  42. package/lib/commonjs/ui/components/EventStepperFooter.js +4 -3
  43. package/lib/commonjs/ui/components/ExpandablePopover.js +12 -4
  44. package/lib/commonjs/ui/components/ExpandedInfoRow.js +3 -2
  45. package/lib/commonjs/ui/components/ExportPreview.js +174 -0
  46. package/lib/commonjs/ui/components/FilterComponents.js +2 -1
  47. package/lib/commonjs/ui/components/InfoRow.js +91 -0
  48. package/lib/commonjs/ui/components/ModalHeader.js +40 -7
  49. package/lib/commonjs/ui/components/Pill.js +115 -0
  50. package/lib/commonjs/ui/components/ToggleRow.js +116 -0
  51. package/lib/commonjs/ui/components/ToolFooter.js +205 -0
  52. package/lib/commonjs/ui/components/index.js +100 -1
  53. package/lib/commonjs/ui/console/CyberpunkSectionButton.js +3 -2
  54. package/lib/commonjs/ui/fonts.js +12 -0
  55. package/lib/commonjs/ui/gameUI/components/GameUICollapsibleSection.js +4 -3
  56. package/lib/commonjs/ui/gameUI/components/GameUICompactStats.js +12 -11
  57. package/lib/commonjs/ui/gameUI/components/GameUIIssuesList.js +9 -8
  58. package/lib/commonjs/ui/gameUI/components/GameUIStatusHeader.js +4 -3
  59. package/lib/commonjs/ui/index.js +32 -2
  60. package/lib/commonjs/ui/listPresets.js +43 -0
  61. package/lib/commonjs/ui/night/primitives.js +3 -1
  62. package/lib/commonjs/ui/toolTheme.js +4 -3
  63. package/lib/commonjs/utils/snapshotProviderKit.js +167 -0
  64. package/lib/commonjs/utils/stateTools.js +160 -0
  65. package/lib/module/JsModal.js +57 -22
  66. package/lib/module/dataViewer/CyberpunkInput.js +3 -2
  67. package/lib/module/dataViewer/DataTreeActionBar.js +3 -2
  68. package/lib/module/dataViewer/DataTreeActionDock.js +2 -1
  69. package/lib/module/dataViewer/DiffSummary.js +4 -3
  70. package/lib/module/dataViewer/LiveExplorer.js +11 -11
  71. package/lib/module/dataViewer/SplitDiffViewer.js +10 -9
  72. package/lib/module/dataViewer/ThemedSplitView.js +12 -11
  73. package/lib/module/dataViewer/ValueEditModal.js +6 -5
  74. package/lib/module/dataViewer/VirtualizedDataExplorer.js +5 -4
  75. package/lib/module/dataViewer/tree/TreeDiffViewer.js +15 -15
  76. package/lib/module/hooks/index.js +3 -1
  77. package/lib/module/hooks/safe-area-impl.js +1 -1
  78. package/lib/module/hooks/useChangeLog.js +50 -0
  79. package/lib/module/hooks/useEventStoreEvents.js +61 -0
  80. package/lib/module/hooks/usePersistedState.js +44 -10
  81. package/lib/module/icons/index.js +27 -2
  82. package/lib/module/index.js +11 -1
  83. package/lib/module/license/FreeAccountPrompt.js +2 -2
  84. package/lib/module/license/LicenseEntryModal.js +3 -3
  85. package/lib/module/storage/definePersistedSetting.js +63 -0
  86. package/lib/module/storage/index.js +2 -1
  87. package/lib/module/stores/ChangeLog.js +192 -0
  88. package/lib/module/stores/createToolStore.js +171 -0
  89. package/lib/module/stores/index.js +3 -1
  90. package/lib/module/sync/toolSyncAdapter.js +58 -0
  91. package/lib/module/sync/wireForm.js +159 -0
  92. package/lib/module/tools/defineTool.js +74 -0
  93. package/lib/module/ui/components/ChangeRow.js +106 -0
  94. package/lib/module/ui/components/ChipStrip.js +91 -0
  95. package/lib/module/ui/components/ClipboardHintBanner.js +2 -1
  96. package/lib/module/ui/components/CompactRow.js +3 -2
  97. package/lib/module/ui/components/DataInspector.js +3 -2
  98. package/lib/module/ui/components/DetailView.js +2 -1
  99. package/lib/module/ui/components/DetailViewToggle.js +125 -0
  100. package/lib/module/ui/components/DevToolsCard.js +3 -1
  101. package/lib/module/ui/components/DynamicFilterView.js +8 -7
  102. package/lib/module/ui/components/EntityFilterView.js +351 -0
  103. package/lib/module/ui/components/EventHistoryViewer/CompareBar.js +6 -5
  104. package/lib/module/ui/components/EventHistoryViewer/DiffModeTabs.js +3 -2
  105. package/lib/module/ui/components/EventHistoryViewer/EventPickerModal.js +6 -5
  106. package/lib/module/ui/components/EventStepperFooter.js +4 -3
  107. package/lib/module/ui/components/ExpandablePopover.js +12 -4
  108. package/lib/module/ui/components/ExpandedInfoRow.js +3 -2
  109. package/lib/module/ui/components/ExportPreview.js +169 -0
  110. package/lib/module/ui/components/FilterComponents.js +2 -2
  111. package/lib/module/ui/components/InfoRow.js +87 -0
  112. package/lib/module/ui/components/ModalHeader.js +40 -7
  113. package/lib/module/ui/components/Pill.js +111 -0
  114. package/lib/module/ui/components/ToggleRow.js +112 -0
  115. package/lib/module/ui/components/ToolFooter.js +197 -0
  116. package/lib/module/ui/components/index.js +10 -1
  117. package/lib/module/ui/console/CyberpunkSectionButton.js +3 -2
  118. package/lib/module/ui/fonts.js +8 -0
  119. package/lib/module/ui/gameUI/components/GameUICollapsibleSection.js +4 -3
  120. package/lib/module/ui/gameUI/components/GameUICompactStats.js +12 -11
  121. package/lib/module/ui/gameUI/components/GameUIIssuesList.js +9 -8
  122. package/lib/module/ui/gameUI/components/GameUIStatusHeader.js +4 -3
  123. package/lib/module/ui/index.js +7 -1
  124. package/lib/module/ui/listPresets.js +39 -0
  125. package/lib/module/ui/night/primitives.js +3 -1
  126. package/lib/module/ui/toolTheme.js +4 -4
  127. package/lib/module/utils/snapshotProviderKit.js +156 -0
  128. package/lib/module/utils/stateTools.js +154 -0
  129. package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
  130. package/lib/typescript/commonjs/dataViewer/CyberpunkInput.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/dataViewer/DataTreeActionBar.d.ts.map +1 -1
  132. package/lib/typescript/commonjs/dataViewer/DataTreeActionDock.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/dataViewer/DiffSummary.d.ts.map +1 -1
  134. package/lib/typescript/commonjs/dataViewer/LiveExplorer.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/dataViewer/SplitDiffViewer.d.ts.map +1 -1
  136. package/lib/typescript/commonjs/dataViewer/ThemedSplitView.d.ts.map +1 -1
  137. package/lib/typescript/commonjs/dataViewer/ValueEditModal.d.ts.map +1 -1
  138. package/lib/typescript/commonjs/dataViewer/VirtualizedDataExplorer.d.ts.map +1 -1
  139. package/lib/typescript/commonjs/dataViewer/tree/TreeDiffViewer.d.ts.map +1 -1
  140. package/lib/typescript/commonjs/hooks/index.d.ts +3 -1
  141. package/lib/typescript/commonjs/hooks/index.d.ts.map +1 -1
  142. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  143. package/lib/typescript/commonjs/hooks/useChangeLog.d.ts +38 -0
  144. package/lib/typescript/commonjs/hooks/useChangeLog.d.ts.map +1 -0
  145. package/lib/typescript/commonjs/hooks/useEventStoreEvents.d.ts +25 -0
  146. package/lib/typescript/commonjs/hooks/useEventStoreEvents.d.ts.map +1 -0
  147. package/lib/typescript/commonjs/hooks/usePersistedState.d.ts +34 -5
  148. package/lib/typescript/commonjs/hooks/usePersistedState.d.ts.map +1 -1
  149. package/lib/typescript/commonjs/icons/index.d.ts +4 -1
  150. package/lib/typescript/commonjs/icons/index.d.ts.map +1 -1
  151. package/lib/typescript/commonjs/index.d.ts +6 -1
  152. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  153. package/lib/typescript/commonjs/license/FreeAccountPrompt.d.ts.map +1 -1
  154. package/lib/typescript/commonjs/license/LicenseEntryModal.d.ts.map +1 -1
  155. package/lib/typescript/commonjs/storage/definePersistedSetting.d.ts +39 -0
  156. package/lib/typescript/commonjs/storage/definePersistedSetting.d.ts.map +1 -0
  157. package/lib/typescript/commonjs/storage/index.d.ts +1 -0
  158. package/lib/typescript/commonjs/storage/index.d.ts.map +1 -1
  159. package/lib/typescript/commonjs/stores/ChangeLog.d.ts +100 -0
  160. package/lib/typescript/commonjs/stores/ChangeLog.d.ts.map +1 -0
  161. package/lib/typescript/commonjs/stores/createToolStore.d.ts +92 -0
  162. package/lib/typescript/commonjs/stores/createToolStore.d.ts.map +1 -0
  163. package/lib/typescript/commonjs/stores/index.d.ts +2 -0
  164. package/lib/typescript/commonjs/stores/index.d.ts.map +1 -1
  165. package/lib/typescript/commonjs/sync/toolSyncAdapter.d.ts +66 -0
  166. package/lib/typescript/commonjs/sync/toolSyncAdapter.d.ts.map +1 -0
  167. package/lib/typescript/commonjs/sync/wireForm.d.ts +100 -0
  168. package/lib/typescript/commonjs/sync/wireForm.d.ts.map +1 -0
  169. package/lib/typescript/commonjs/tools/defineTool.d.ts +100 -0
  170. package/lib/typescript/commonjs/tools/defineTool.d.ts.map +1 -0
  171. package/lib/typescript/commonjs/ui/components/ChangeRow.d.ts +52 -0
  172. package/lib/typescript/commonjs/ui/components/ChangeRow.d.ts.map +1 -0
  173. package/lib/typescript/commonjs/ui/components/ChipStrip.d.ts +41 -0
  174. package/lib/typescript/commonjs/ui/components/ChipStrip.d.ts.map +1 -0
  175. package/lib/typescript/commonjs/ui/components/ClipboardHintBanner.d.ts.map +1 -1
  176. package/lib/typescript/commonjs/ui/components/CompactRow.d.ts.map +1 -1
  177. package/lib/typescript/commonjs/ui/components/DataInspector.d.ts.map +1 -1
  178. package/lib/typescript/commonjs/ui/components/DetailView.d.ts.map +1 -1
  179. package/lib/typescript/commonjs/ui/components/DetailViewToggle.d.ts +36 -0
  180. package/lib/typescript/commonjs/ui/components/DetailViewToggle.d.ts.map +1 -0
  181. package/lib/typescript/commonjs/ui/components/DevToolsCard.d.ts +8 -1
  182. package/lib/typescript/commonjs/ui/components/DevToolsCard.d.ts.map +1 -1
  183. package/lib/typescript/commonjs/ui/components/DynamicFilterView.d.ts.map +1 -1
  184. package/lib/typescript/commonjs/ui/components/EntityFilterView.d.ts +51 -0
  185. package/lib/typescript/commonjs/ui/components/EntityFilterView.d.ts.map +1 -0
  186. package/lib/typescript/commonjs/ui/components/EventHistoryViewer/CompareBar.d.ts.map +1 -1
  187. package/lib/typescript/commonjs/ui/components/EventHistoryViewer/DiffModeTabs.d.ts.map +1 -1
  188. package/lib/typescript/commonjs/ui/components/EventHistoryViewer/EventPickerModal.d.ts.map +1 -1
  189. package/lib/typescript/commonjs/ui/components/EventStepperFooter.d.ts.map +1 -1
  190. package/lib/typescript/commonjs/ui/components/ExpandablePopover.d.ts +5 -1
  191. package/lib/typescript/commonjs/ui/components/ExpandablePopover.d.ts.map +1 -1
  192. package/lib/typescript/commonjs/ui/components/ExpandedInfoRow.d.ts.map +1 -1
  193. package/lib/typescript/commonjs/ui/components/ExportPreview.d.ts +48 -0
  194. package/lib/typescript/commonjs/ui/components/ExportPreview.d.ts.map +1 -0
  195. package/lib/typescript/commonjs/ui/components/FilterComponents.d.ts.map +1 -1
  196. package/lib/typescript/commonjs/ui/components/InfoRow.d.ts +33 -0
  197. package/lib/typescript/commonjs/ui/components/InfoRow.d.ts.map +1 -0
  198. package/lib/typescript/commonjs/ui/components/ModalHeader.d.ts +31 -1
  199. package/lib/typescript/commonjs/ui/components/ModalHeader.d.ts.map +1 -1
  200. package/lib/typescript/commonjs/ui/components/Pill.d.ts +38 -0
  201. package/lib/typescript/commonjs/ui/components/Pill.d.ts.map +1 -0
  202. package/lib/typescript/commonjs/ui/components/ToggleRow.d.ts +33 -0
  203. package/lib/typescript/commonjs/ui/components/ToggleRow.d.ts.map +1 -0
  204. package/lib/typescript/commonjs/ui/components/ToolFooter.d.ts +69 -0
  205. package/lib/typescript/commonjs/ui/components/ToolFooter.d.ts.map +1 -0
  206. package/lib/typescript/commonjs/ui/components/index.d.ts +9 -0
  207. package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
  208. package/lib/typescript/commonjs/ui/console/CyberpunkSectionButton.d.ts.map +1 -1
  209. package/lib/typescript/commonjs/ui/fonts.d.ts +7 -0
  210. package/lib/typescript/commonjs/ui/fonts.d.ts.map +1 -0
  211. package/lib/typescript/commonjs/ui/gameUI/components/GameUICollapsibleSection.d.ts.map +1 -1
  212. package/lib/typescript/commonjs/ui/gameUI/components/GameUICompactStats.d.ts.map +1 -1
  213. package/lib/typescript/commonjs/ui/gameUI/components/GameUIIssuesList.d.ts.map +1 -1
  214. package/lib/typescript/commonjs/ui/gameUI/components/GameUIStatusHeader.d.ts.map +1 -1
  215. package/lib/typescript/commonjs/ui/index.d.ts +2 -0
  216. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  217. package/lib/typescript/commonjs/ui/listPresets.d.ts +28 -0
  218. package/lib/typescript/commonjs/ui/listPresets.d.ts.map +1 -0
  219. package/lib/typescript/commonjs/ui/night/primitives.d.ts +3 -1
  220. package/lib/typescript/commonjs/ui/night/primitives.d.ts.map +1 -1
  221. package/lib/typescript/commonjs/ui/toolTheme.d.ts.map +1 -1
  222. package/lib/typescript/commonjs/utils/snapshotProviderKit.d.ts +81 -0
  223. package/lib/typescript/commonjs/utils/snapshotProviderKit.d.ts.map +1 -0
  224. package/lib/typescript/commonjs/utils/stateTools.d.ts +44 -0
  225. package/lib/typescript/commonjs/utils/stateTools.d.ts.map +1 -0
  226. package/lib/typescript/module/JsModal.d.ts.map +1 -1
  227. package/lib/typescript/module/dataViewer/CyberpunkInput.d.ts.map +1 -1
  228. package/lib/typescript/module/dataViewer/DataTreeActionBar.d.ts.map +1 -1
  229. package/lib/typescript/module/dataViewer/DataTreeActionDock.d.ts.map +1 -1
  230. package/lib/typescript/module/dataViewer/DiffSummary.d.ts.map +1 -1
  231. package/lib/typescript/module/dataViewer/LiveExplorer.d.ts.map +1 -1
  232. package/lib/typescript/module/dataViewer/SplitDiffViewer.d.ts.map +1 -1
  233. package/lib/typescript/module/dataViewer/ThemedSplitView.d.ts.map +1 -1
  234. package/lib/typescript/module/dataViewer/ValueEditModal.d.ts.map +1 -1
  235. package/lib/typescript/module/dataViewer/VirtualizedDataExplorer.d.ts.map +1 -1
  236. package/lib/typescript/module/dataViewer/tree/TreeDiffViewer.d.ts.map +1 -1
  237. package/lib/typescript/module/hooks/index.d.ts +3 -1
  238. package/lib/typescript/module/hooks/index.d.ts.map +1 -1
  239. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  240. package/lib/typescript/module/hooks/useChangeLog.d.ts +38 -0
  241. package/lib/typescript/module/hooks/useChangeLog.d.ts.map +1 -0
  242. package/lib/typescript/module/hooks/useEventStoreEvents.d.ts +25 -0
  243. package/lib/typescript/module/hooks/useEventStoreEvents.d.ts.map +1 -0
  244. package/lib/typescript/module/hooks/usePersistedState.d.ts +34 -5
  245. package/lib/typescript/module/hooks/usePersistedState.d.ts.map +1 -1
  246. package/lib/typescript/module/icons/index.d.ts +4 -1
  247. package/lib/typescript/module/icons/index.d.ts.map +1 -1
  248. package/lib/typescript/module/index.d.ts +6 -1
  249. package/lib/typescript/module/index.d.ts.map +1 -1
  250. package/lib/typescript/module/license/FreeAccountPrompt.d.ts.map +1 -1
  251. package/lib/typescript/module/license/LicenseEntryModal.d.ts.map +1 -1
  252. package/lib/typescript/module/storage/definePersistedSetting.d.ts +39 -0
  253. package/lib/typescript/module/storage/definePersistedSetting.d.ts.map +1 -0
  254. package/lib/typescript/module/storage/index.d.ts +1 -0
  255. package/lib/typescript/module/storage/index.d.ts.map +1 -1
  256. package/lib/typescript/module/stores/ChangeLog.d.ts +100 -0
  257. package/lib/typescript/module/stores/ChangeLog.d.ts.map +1 -0
  258. package/lib/typescript/module/stores/createToolStore.d.ts +92 -0
  259. package/lib/typescript/module/stores/createToolStore.d.ts.map +1 -0
  260. package/lib/typescript/module/stores/index.d.ts +2 -0
  261. package/lib/typescript/module/stores/index.d.ts.map +1 -1
  262. package/lib/typescript/module/sync/toolSyncAdapter.d.ts +66 -0
  263. package/lib/typescript/module/sync/toolSyncAdapter.d.ts.map +1 -0
  264. package/lib/typescript/module/sync/wireForm.d.ts +100 -0
  265. package/lib/typescript/module/sync/wireForm.d.ts.map +1 -0
  266. package/lib/typescript/module/tools/defineTool.d.ts +100 -0
  267. package/lib/typescript/module/tools/defineTool.d.ts.map +1 -0
  268. package/lib/typescript/module/ui/components/ChangeRow.d.ts +52 -0
  269. package/lib/typescript/module/ui/components/ChangeRow.d.ts.map +1 -0
  270. package/lib/typescript/module/ui/components/ChipStrip.d.ts +41 -0
  271. package/lib/typescript/module/ui/components/ChipStrip.d.ts.map +1 -0
  272. package/lib/typescript/module/ui/components/ClipboardHintBanner.d.ts.map +1 -1
  273. package/lib/typescript/module/ui/components/CompactRow.d.ts.map +1 -1
  274. package/lib/typescript/module/ui/components/DataInspector.d.ts.map +1 -1
  275. package/lib/typescript/module/ui/components/DetailView.d.ts.map +1 -1
  276. package/lib/typescript/module/ui/components/DetailViewToggle.d.ts +36 -0
  277. package/lib/typescript/module/ui/components/DetailViewToggle.d.ts.map +1 -0
  278. package/lib/typescript/module/ui/components/DevToolsCard.d.ts +8 -1
  279. package/lib/typescript/module/ui/components/DevToolsCard.d.ts.map +1 -1
  280. package/lib/typescript/module/ui/components/DynamicFilterView.d.ts.map +1 -1
  281. package/lib/typescript/module/ui/components/EntityFilterView.d.ts +51 -0
  282. package/lib/typescript/module/ui/components/EntityFilterView.d.ts.map +1 -0
  283. package/lib/typescript/module/ui/components/EventHistoryViewer/CompareBar.d.ts.map +1 -1
  284. package/lib/typescript/module/ui/components/EventHistoryViewer/DiffModeTabs.d.ts.map +1 -1
  285. package/lib/typescript/module/ui/components/EventHistoryViewer/EventPickerModal.d.ts.map +1 -1
  286. package/lib/typescript/module/ui/components/EventStepperFooter.d.ts.map +1 -1
  287. package/lib/typescript/module/ui/components/ExpandablePopover.d.ts +5 -1
  288. package/lib/typescript/module/ui/components/ExpandablePopover.d.ts.map +1 -1
  289. package/lib/typescript/module/ui/components/ExpandedInfoRow.d.ts.map +1 -1
  290. package/lib/typescript/module/ui/components/ExportPreview.d.ts +48 -0
  291. package/lib/typescript/module/ui/components/ExportPreview.d.ts.map +1 -0
  292. package/lib/typescript/module/ui/components/FilterComponents.d.ts.map +1 -1
  293. package/lib/typescript/module/ui/components/InfoRow.d.ts +33 -0
  294. package/lib/typescript/module/ui/components/InfoRow.d.ts.map +1 -0
  295. package/lib/typescript/module/ui/components/ModalHeader.d.ts +31 -1
  296. package/lib/typescript/module/ui/components/ModalHeader.d.ts.map +1 -1
  297. package/lib/typescript/module/ui/components/Pill.d.ts +38 -0
  298. package/lib/typescript/module/ui/components/Pill.d.ts.map +1 -0
  299. package/lib/typescript/module/ui/components/ToggleRow.d.ts +33 -0
  300. package/lib/typescript/module/ui/components/ToggleRow.d.ts.map +1 -0
  301. package/lib/typescript/module/ui/components/ToolFooter.d.ts +69 -0
  302. package/lib/typescript/module/ui/components/ToolFooter.d.ts.map +1 -0
  303. package/lib/typescript/module/ui/components/index.d.ts +9 -0
  304. package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
  305. package/lib/typescript/module/ui/console/CyberpunkSectionButton.d.ts.map +1 -1
  306. package/lib/typescript/module/ui/fonts.d.ts +7 -0
  307. package/lib/typescript/module/ui/fonts.d.ts.map +1 -0
  308. package/lib/typescript/module/ui/gameUI/components/GameUICollapsibleSection.d.ts.map +1 -1
  309. package/lib/typescript/module/ui/gameUI/components/GameUICompactStats.d.ts.map +1 -1
  310. package/lib/typescript/module/ui/gameUI/components/GameUIIssuesList.d.ts.map +1 -1
  311. package/lib/typescript/module/ui/gameUI/components/GameUIStatusHeader.d.ts.map +1 -1
  312. package/lib/typescript/module/ui/index.d.ts +2 -0
  313. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  314. package/lib/typescript/module/ui/listPresets.d.ts +28 -0
  315. package/lib/typescript/module/ui/listPresets.d.ts.map +1 -0
  316. package/lib/typescript/module/ui/night/primitives.d.ts +3 -1
  317. package/lib/typescript/module/ui/night/primitives.d.ts.map +1 -1
  318. package/lib/typescript/module/ui/toolTheme.d.ts.map +1 -1
  319. package/lib/typescript/module/utils/snapshotProviderKit.d.ts +81 -0
  320. package/lib/typescript/module/utils/snapshotProviderKit.d.ts.map +1 -0
  321. package/lib/typescript/module/utils/stateTools.d.ts +44 -0
  322. package/lib/typescript/module/utils/stateTools.d.ts.map +1 -0
  323. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"FreeAccountPrompt.d.ts","sourceRoot":"","sources":["../../../../src/license/FreeAccountPrompt.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAaxE,uDAAuD;AACvD,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAE9C,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,iBAAiB,GAAI,oCAI/B,sBAAsB,6BAoFxB,CAAC"}
1
+ {"version":3,"file":"FreeAccountPrompt.d.ts","sourceRoot":"","sources":["../../../../src/license/FreeAccountPrompt.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAcxE,uDAAuD;AACvD,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAE9C,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,iBAAiB,GAAI,oCAI/B,sBAAsB,6BAoFxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"LicenseEntryModal.d.ts","sourceRoot":"","sources":["../../../../src/license/LicenseEntryModal.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAsB,MAAM,OAAO,CAAC;AA4B3C,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAQD,eAAO,MAAM,iBAAiB,GAAI,oCAI/B,sBAAsB,sBAuHxB,CAAC"}
1
+ {"version":3,"file":"LicenseEntryModal.d.ts","sourceRoot":"","sources":["../../../../src/license/LicenseEntryModal.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAsB,MAAM,OAAO,CAAC;AA6B3C,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAQD,eAAO,MAAM,iBAAiB,GAAI,oCAI/B,sBAAsB,sBAuHxB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * definePersistedSetting — the `load / save / clear` triple every tool wrote
3
+ * for its module-level settings (copy settings, HUD prefs, JS TOP prefs, …).
4
+ *
5
+ * Contract, the same one all of them followed:
6
+ * - `load()` never throws and never returns a partial object: the stored
7
+ * value is merged OVER the defaults so fields added in a later release
8
+ * get their default instead of `undefined`, then `sanitize` gets the last
9
+ * word (drop values the UI no longer offers, coerce types).
10
+ * - `save()` and `clear()` are best-effort; persistence is optional.
11
+ * - `loadOrNull()` distinguishes "nothing saved yet" from the defaults, for
12
+ * callers that treat first launch differently.
13
+ */
14
+ export interface PersistedSettingOptions<T> {
15
+ /** Merge-then-validate. Receives `{ ...defaults, ...stored }`; returns the value to use. */
16
+ sanitize?: (merged: T, stored: unknown) => T;
17
+ /** Default: `JSON.parse`. */
18
+ parse?: (raw: string) => unknown;
19
+ /** Default: `JSON.stringify`. */
20
+ serialize?: (value: T) => string;
21
+ /** Default: `persistentStorage`. */
22
+ storage?: {
23
+ getItem(key: string): Promise<string | null>;
24
+ setItem(key: string, value: string): Promise<void>;
25
+ removeItem(key: string): Promise<void>;
26
+ };
27
+ }
28
+ export interface PersistedSetting<T> {
29
+ readonly key: string;
30
+ readonly defaults: T;
31
+ /** The stored value merged over the defaults, or the defaults. Never throws. */
32
+ load(): Promise<T>;
33
+ /** Like `load()`, but `null` when nothing is stored (or it is unreadable). */
34
+ loadOrNull(): Promise<T | null>;
35
+ save(value: T): Promise<void>;
36
+ clear(): Promise<void>;
37
+ }
38
+ export declare function definePersistedSetting<T>(key: string, defaults: T, options?: PersistedSettingOptions<T>): PersistedSetting<T>;
39
+ //# sourceMappingURL=definePersistedSetting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definePersistedSetting.d.ts","sourceRoot":"","sources":["../../../../src/storage/definePersistedSetting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC;IAC7C,6BAA6B;IAC7B,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACjC,iCAAiC;IACjC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IACjC,oCAAoC;IACpC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACxC,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrB,gFAAgF;IAChF,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACnB,8EAA8E;IAC9E,UAAU,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAMD,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,CAAC,EACX,OAAO,GAAE,uBAAuB,CAAC,CAAC,CAAM,GACvC,gBAAgB,CAAC,CAAC,CAAC,CA6CrB"}
@@ -1,2 +1,3 @@
1
1
  export { devToolsStorageKeys, isDevToolsStorageKey } from './devToolsStorageKeys';
2
+ export { definePersistedSetting, type PersistedSetting, type PersistedSettingOptions, } from "./definePersistedSetting";
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElF,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * ChangeLog — the class-shaped event log the state tools share.
3
+ *
4
+ * redux (`ReduxActionStore`), zustand (`ZustandStateStore`), jotai
5
+ * (`JotaiStateStore`) and react-query (`ReactQueryEventStore`) each carried
6
+ * the same ~120 lines: a newest-first ring buffer, a `Set` of array listeners
7
+ * (`(items) => void`), a `Set` of clear listeners for the desktop's mirror
8
+ * mode, an `enabled` flag (the UI's pause button), a `captureSuppressed` flag
9
+ * (the dashboard must never record its own traffic), a monotonic id counter,
10
+ * `getById`, and hydrate-by-id for lazily fetched detail payloads.
11
+ *
12
+ * This is that core. Tool stores `extend` it and keep their public method
13
+ * names (`addStateChange`, `getActions`, `clearAtomChanges`, …) as thin
14
+ * wrappers, so no call site — including Buoy Desktop — has to change.
15
+ *
16
+ * Semantics preserved from the originals, deliberately:
17
+ * - `getAll()` returns a COPY (`[...items]`) — consumers seed React state
18
+ * from it and rely on a fresh identity per notification.
19
+ * - `clear()` always notifies, even when already empty, then fires the clear
20
+ * listeners (the dashboard forwards the clear to the device either way).
21
+ * - `replaceAll()` respects `enabled`: the pause button freezes a mirror.
22
+ * - `disableCapture()` is permanent for the store's lifetime.
23
+ */
24
+ export type ChangeLogListener<T> = (items: T[]) => void;
25
+ export interface ChangeLogOptions {
26
+ /** Ring-buffer depth. Default 200 — what all four stores shipped with. */
27
+ max?: number;
28
+ }
29
+ export interface Identified {
30
+ id: string;
31
+ }
32
+ export declare class ChangeLog<T extends Identified> {
33
+ /** Newest first. Subclasses may read; mutate only through the helpers. */
34
+ protected items: T[];
35
+ protected max: number;
36
+ private readonly itemListeners;
37
+ private readonly clearListeners;
38
+ private idCounter;
39
+ private enabled;
40
+ private captureSuppressed;
41
+ constructor(options?: ChangeLogOptions);
42
+ /** True when a new item should be recorded (not paused, not a mirror). */
43
+ protected canRecord(): boolean;
44
+ /** `${Date.now()}-${n}` — unique per store instance, sorts by time. */
45
+ protected nextId(): string;
46
+ /**
47
+ * Prepend one item and trim to `max`. Does NOT notify — subclasses often
48
+ * touch companion state (per-entity counters, raw-state eviction) before
49
+ * they notify. Call `notifyListeners()` when done, or use `record()`.
50
+ */
51
+ protected push(item: T): void;
52
+ /** `push()` + notify. The common case. */
53
+ protected record(item: T): void;
54
+ /** Replace the buffer wholesale (already merged/hydrated by the caller) and notify. */
55
+ protected setItems(next: T[]): void;
56
+ /** All items, newest first. Fresh array each call. */
57
+ getAll(): T[];
58
+ getById(id: string): T | undefined;
59
+ get size(): number;
60
+ /**
61
+ * Empty the buffer, notify, then fire clear listeners. Always notifies —
62
+ * a clear is a user action and the list must repaint even if nothing was
63
+ * in it. Subclasses that keep companion counters reset them first.
64
+ */
65
+ clear(): void;
66
+ /**
67
+ * Listen for `clear()` calls. Used in remote mirror mode to forward a
68
+ * clear performed in the dashboard UI to the synced device.
69
+ */
70
+ onClear(listener: () => void): () => void;
71
+ /**
72
+ * Permanently suppress local capture. Use when this store acts as a mirror
73
+ * of a remote device (the desktop dashboard): data arrives via
74
+ * `replaceAll()` / a subclass snapshot method and local instrumentation
75
+ * must never record.
76
+ */
77
+ disableCapture(): void;
78
+ /** Whether the store is in remote mirror mode (capture suppressed). */
79
+ isCaptureSuppressed(): boolean;
80
+ /**
81
+ * Replace the whole list from a remote snapshot and notify. Respects the
82
+ * enabled flag so the UI's pause button freezes the mirror. Returns false
83
+ * when skipped. Subclasses with hydration-preserving merges compute the
84
+ * merged list themselves and call `setItems()`.
85
+ */
86
+ replaceAll(next: T[]): boolean;
87
+ /**
88
+ * Patch one item in place (by id) and notify. Used to hydrate a mirrored
89
+ * item with detail payloads fetched on demand from the device.
90
+ */
91
+ hydrateById(id: string, patch: Partial<T>): void;
92
+ setEnabled(enabled: boolean): void;
93
+ getEnabled(): boolean;
94
+ setMax(max: number): void;
95
+ getMax(): number;
96
+ subscribe(listener: ChangeLogListener<T>): () => void;
97
+ protected notifyListeners(): void;
98
+ protected get listenerCount(): number;
99
+ }
100
+ //# sourceMappingURL=ChangeLog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeLog.d.ts","sourceRoot":"","sources":["../../../../src/stores/ChangeLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,SAAS,CAAC,CAAC,SAAS,UAAU;IACzC,0EAA0E;IAC1E,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAM;IAC1B,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IACjE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,OAAO,GAAE,gBAAqB;IAM1C,0EAA0E;IAC1E,SAAS,CAAC,SAAS,IAAI,OAAO;IAI9B,uEAAuE;IACvE,SAAS,CAAC,MAAM,IAAI,MAAM;IAI1B;;;;OAIG;IACH,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAI7B,0CAA0C;IAC1C,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAK/B,uFAAuF;IACvF,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI;IAOnC,sDAAsD;IACtD,MAAM,IAAI,CAAC,EAAE;IAIb,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIlC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAID;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAYb;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IASzC;;;;;OAKG;IACH,cAAc,IAAI,IAAI;IAItB,uEAAuE;IACvE,mBAAmB,IAAI,OAAO;IAI9B;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO;IAM9B;;;OAGG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAahD,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,UAAU,IAAI,OAAO;IAIrB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQzB,MAAM,IAAI,MAAM;IAMhB,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAOrD,SAAS,CAAC,eAAe,IAAI,IAAI;IAKjC,SAAS,KAAK,aAAa,IAAI,MAAM,CAEpC;CACF"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * createToolStore — the one bounded, subscribable buffer every tool used to
3
+ * hand-roll.
4
+ *
5
+ * Before this existed, console, sentry, images, assets, focus-inspector,
6
+ * tv-remote, redux, zustand, jotai and react-query each carried their own copy
7
+ * of the same ~100 lines: a `Set` of listeners, a `Set` of clear listeners
8
+ * (so the desktop dashboard can forward a clear to the device in mirror
9
+ * mode), a ring buffer with a max, an optional frame-coalesced emit, and the
10
+ * `__buoyFlushToolSync` escape hatch that pushes a tool's snapshot to the
11
+ * dashboard NOW (a crash's last words must not wait on the sync throttle).
12
+ *
13
+ * This is a plain function, not a class, on purpose: every consumer exposes a
14
+ * module-level functional API (`subscribe`, `getSnapshot`, `clearX`) and
15
+ * feeds `useSyncExternalStore`, so the store is a value the module wraps
16
+ * rather than something it extends. `BaseEventStore` stays for the
17
+ * class-based, auto-start/stop capture stores (network, storage, routes).
18
+ *
19
+ * Contract:
20
+ * - `getSnapshot()` returns the SAME array reference until the next
21
+ * mutation, so `useSyncExternalStore` never re-renders for nothing.
22
+ * - `order: "append"` keeps the newest item LAST (console-style scrollback);
23
+ * `order: "prepend"` keeps it FIRST (event-log style). Trimming drops from
24
+ * the opposite end. Consumers never have to `.reverse()`.
25
+ * - `clear()` fires `onClear` listeners even when the buffer is already
26
+ * empty — the dashboard's forwarded clear must reach the device regardless.
27
+ * - `set()` (mirror mode) never fires clear listeners; it is a replacement.
28
+ */
29
+ /** Listener signature: change-only, read the snapshot yourself. */
30
+ export type ToolStoreListener = () => void;
31
+ export type ToolStoreOrder = "append" | "prepend";
32
+ export interface ToolStoreOptions {
33
+ /** Tool id, as the sync layer knows it (`"console"`, `"sentry"`, …). Used by
34
+ * `flushSync()` so the dashboard pushes THIS tool's snapshot. */
35
+ id: string;
36
+ /** Ring-buffer depth. */
37
+ max: number;
38
+ /** Where new items land. Default `"append"` (newest last). */
39
+ order?: ToolStoreOrder;
40
+ /**
41
+ * `"frame"`: coalesce listener notifications onto one animation frame so a
42
+ * burst (a log loop, a navigation's several envelopes) is one React commit.
43
+ * `"sync"` (default): notify immediately.
44
+ */
45
+ coalesce?: "frame" | "sync";
46
+ /** Floor between opportunistic (non-forced) `flushSync()` calls. Default 150 ms. */
47
+ flushMinIntervalMs?: number;
48
+ /** First id `allocId()` hands out. Default 1. */
49
+ firstId?: number;
50
+ }
51
+ export interface ToolStore<T> {
52
+ /** Subscribe to any change (items, or a `notify()` from companion state). */
53
+ subscribe(listener: ToolStoreListener): () => void;
54
+ /** Current items. Stable reference between mutations. */
55
+ getSnapshot(): T[];
56
+ /** Number of items. */
57
+ size(): number;
58
+ /** Add one item at the configured end, trimming from the other. No-op while paused. */
59
+ add(item: T): void;
60
+ /** Replace all items (remote mirror mode, restore-from-disk). Trims to `max`. */
61
+ set(next: T[]): void;
62
+ /** Functional replace: `update(items => items.filter(...))`. Trims to `max`. */
63
+ update(fn: (items: T[]) => T[]): void;
64
+ /** Empty the buffer. Fires `onClear` listeners FIRST, always. */
65
+ clear(): void;
66
+ /** Listen for `clear()`. The dashboard uses this to forward a clear to the device. */
67
+ onClear(listener: ToolStoreListener): () => void;
68
+ /** Notify subscribers without touching items (companion state changed). */
69
+ notify(): void;
70
+ /**
71
+ * Push this tool's snapshot to any connected dashboard now, via the
72
+ * `__buoyFlushToolSync` global (@buoy-gg/external-sync `crashFlush`).
73
+ * Rate-limited unless `force` — a fatal is the app's last word and always goes out.
74
+ */
75
+ flushSync(force?: boolean): void;
76
+ /** While paused, `add()` is dropped. `set`/`update`/`clear` still apply. */
77
+ setPaused(paused: boolean): void;
78
+ isPaused(): boolean;
79
+ /** Change the ring-buffer depth; trims immediately if shrinking. */
80
+ setMax(max: number): void;
81
+ getMax(): number;
82
+ /** Monotonic id counter for items that need one. */
83
+ allocId(): number;
84
+ /** Raise the id floor (after restoring persisted items that carry ids). */
85
+ bumpIdAbove(id: number): void;
86
+ /** How many `subscribe` listeners are attached. */
87
+ listenerCount(): number;
88
+ /** The tool id this store was created with. */
89
+ readonly id: string;
90
+ }
91
+ export declare function createToolStore<T>(options: ToolStoreOptions): ToolStore<T>;
92
+ //# sourceMappingURL=createToolStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createToolStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/createToolStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,mEAAmE;AACnE,MAAM,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B;qEACiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,yBAAyB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,oFAAoF;IACpF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,6EAA6E;IAC7E,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAAC;IACnD,yDAAyD;IACzD,WAAW,IAAI,CAAC,EAAE,CAAC;IACnB,uBAAuB;IACvB,IAAI,IAAI,MAAM,CAAC;IACf,uFAAuF;IACvF,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACnB,iFAAiF;IACjF,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IACrB,gFAAgF;IAChF,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;IACtC,iEAAiE;IACjE,KAAK,IAAI,IAAI,CAAC;IACd,sFAAsF;IACtF,OAAO,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAAC;IACjD,2EAA2E;IAC3E,MAAM,IAAI,IAAI,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,4EAA4E;IAC5E,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,QAAQ,IAAI,OAAO,CAAC;IACpB,oEAAoE;IACpE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,IAAI,MAAM,CAAC;IACjB,oDAAoD;IACpD,OAAO,IAAI,MAAM,CAAC;IAClB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mDAAmD;IACnD,aAAa,IAAI,MAAM,CAAC;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAYD,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,CA6J1E"}
@@ -3,4 +3,6 @@
3
3
  */
4
4
  export { BaseEventStore, type ArrayListener, type EventCallback, type BaseEventStoreOptions, } from "./BaseEventStore";
5
5
  export { ignoredPatternsStore, useIgnoredPatterns, urlMatchesIgnoredPattern, isUrlIgnored, type IgnoredPattern, type IgnoredPatternMatchMode, type UseIgnoredPatternsResult, } from "./ignoredPatternsStore";
6
+ export { createToolStore, type ToolStore, type ToolStoreOptions, type ToolStoreOrder, type ToolStoreListener, } from "./createToolStore";
7
+ export { ChangeLog, type ChangeLogListener, type ChangeLogOptions, type Identified, } from "./ChangeLog";
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/stores/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC9B,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/stores/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,SAAS,EACT,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * ToolSyncAdapter — the contract a tool implements to sync to Buoy Desktop /
3
+ * the MCP server, plus `createSyncAdapter`, the one way to build one.
4
+ *
5
+ * Every tool package used to declare its adapter as a bare object literal
6
+ * with the comment "structurally matches external-sync's ToolSyncAdapter so
7
+ * this package doesn't need a dependency on it". That kept the packages
8
+ * decoupled but left the contract unchecked: storage shipped `version: 3`
9
+ * while every sibling was on 2 and nothing noticed. The type now lives here,
10
+ * in shared (which every tool already depends on), and external-sync
11
+ * re-exports it — one definition, checked everywhere.
12
+ *
13
+ * `createSyncAdapter` is deliberately thin. It:
14
+ * - type-checks the literal against the contract (a wrong `subscribe`
15
+ * signature or a non-function action fails at compile time),
16
+ * - keeps the CONCRETE `actions` type, so `adapter.actions.getChangeDetail()`
17
+ * stays typed for tests and callers,
18
+ * - merges several change sources into one `subscribe` (a store plus its
19
+ * registry, envelopes plus drops) — the second most-copied block.
20
+ */
21
+ /** A remote-invocable action. Thrown errors are reported back to the dashboard. */
22
+ export type ToolAction = (params: unknown) => unknown | Promise<unknown>;
23
+ /** Anything that can tell the bridge "something changed". */
24
+ export type ChangeSource = (onChange: () => void) => () => void;
25
+ /**
26
+ * The contract each dev tool implements to become remotely syncable.
27
+ * Works with BaseEventStore, ChangeLog, createToolStore, or any pattern
28
+ * exposing subscribe + getSnapshot.
29
+ *
30
+ * Payloads (snapshots and action results) must be JSON-serializable —
31
+ * no functions, circular references, or class instances.
32
+ */
33
+ export interface ToolSyncAdapter {
34
+ /** Version of this tool's payload shape. Bump on breaking changes. */
35
+ version: number;
36
+ /** Current full state — sent when a dashboard starts watching or requests state. */
37
+ getSnapshot: () => unknown;
38
+ /**
39
+ * Fires on state changes. Only called while at least one dashboard is
40
+ * watching this tool; the bridge subscribes/unsubscribes on demand so
41
+ * stores with auto start/stop lifecycles stay idle when unwatched.
42
+ */
43
+ subscribe: ChangeSource;
44
+ /** Remote-invocable actions, keyed by action name. */
45
+ actions?: Record<string, ToolAction>;
46
+ }
47
+ export interface SyncAdapterDefinition<TSnapshot, TActions extends Record<string, ToolAction> | undefined> {
48
+ version: number;
49
+ getSnapshot: () => TSnapshot;
50
+ /** One source, or several that are merged into a single subscription. */
51
+ subscribe: ChangeSource | ChangeSource[];
52
+ actions?: TActions;
53
+ }
54
+ export type SyncAdapter<TSnapshot, TActions extends Record<string, ToolAction> | undefined> = {
55
+ version: number;
56
+ getSnapshot: () => TSnapshot;
57
+ subscribe: ChangeSource;
58
+ } & (TActions extends undefined ? {
59
+ actions?: undefined;
60
+ } : {
61
+ actions: TActions;
62
+ });
63
+ /** Subscribe to every source; the returned function unsubscribes from all. */
64
+ export declare function mergeChangeSources(sources: ChangeSource[]): ChangeSource;
65
+ export declare function createSyncAdapter<TSnapshot, TActions extends Record<string, ToolAction> | undefined = undefined>(definition: SyncAdapterDefinition<TSnapshot, TActions>): SyncAdapter<TSnapshot, TActions>;
66
+ //# sourceMappingURL=toolSyncAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../src/sync/toolSyncAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,mFAAmF;AACnF,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEzE,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B;;;;OAIG;IACH,SAAS,EAAE,YAAY,CAAC;IACxB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB,CACpC,SAAS,EACT,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS;IAEvD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,SAAS,CAAC;IAC7B,yEAAyE;IACzE,SAAS,EAAE,YAAY,GAAG,YAAY,EAAE,CAAC;IACzC,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,CACrB,SAAS,EACT,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,IACrD;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,SAAS,CAAC;IAC7B,SAAS,EAAE,YAAY,CAAC;CACzB,GAAG,CAAC,QAAQ,SAAS,SAAS,GAAG;IAAE,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAEnF,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,CAQxE;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EACT,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,GAAG,SAAS,EACnE,UAAU,EAAE,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAW1F"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * wireForm — how a tool turns what it holds into what it may put on the wire.
3
+ *
4
+ * Every adapter that ships large values faces the same four problems, and
5
+ * nine of them solved each one separately:
6
+ *
7
+ * 1. A per-item cap on the snapshot stream (16 KB), with a MARKER left in
8
+ * the value's place so the dashboard knows to fetch it on demand.
9
+ * 2. A much larger cap on that on-demand detail fetch (8 MB), with a
10
+ * TRUNCATION NOTE when even that is exceeded.
11
+ * 3. An identity-keyed cache for the wire form, because a snapshot is
12
+ * rebuilt ~5×/sec while a dashboard watches and stores never mutate a
13
+ * recorded item — so converting each item once is correct and cheap.
14
+ * 4. For tools whose items are individually fat (console, sentry), a
15
+ * newest-first walk that keeps as many items as fit a snapshot budget.
16
+ *
17
+ * Marker KEY NAMES are part of the wire protocol — Buoy Desktop and the
18
+ * tool stores test for `__buoyStateOnDevice`, `__buoyPayloadOnDevice`,
19
+ * `__buoyValueOnDevice` — so the factory builds exactly those keys.
20
+ */
21
+ /** Per-item budget on the snapshot stream. Anything larger stays on-device. */
22
+ export declare const WIRE_INLINE_LIMIT_BYTES: number;
23
+ /**
24
+ * Upper bound for one on-demand detail response. Generous — this is a single
25
+ * explicit fetch, not a per-item stream — but still guarded so a pathological
26
+ * tree can't OOM the device through the reply emit.
27
+ */
28
+ export declare const WIRE_DETAIL_LIMIT_BYTES: number;
29
+ /** A frozen `{ __buoy<Kind>OnDevice: true, note }` marker. */
30
+ export type OnDeviceMarker<K extends string> = Readonly<{
31
+ [P in `__buoy${K}OnDevice`]: true;
32
+ } & {
33
+ note: string;
34
+ }>;
35
+ /**
36
+ * Build the sentinel a wire-form snapshot carries in place of a value that
37
+ * stays on the device. `kind` names the value ("State", "Payload", "Value",
38
+ * "Params", "Data", …) and becomes the key the reader tests for.
39
+ */
40
+ export declare function onDeviceMarker<K extends string>(kind: K, note: string): OnDeviceMarker<K>;
41
+ /** True when `value` is the on-device marker for `kind`. */
42
+ export declare function isOnDeviceMarker(value: unknown, kind: string): boolean;
43
+ /** The note a detail fetch returns when a single field exceeds the detail cap. */
44
+ export declare function truncatedNote(limitBytes?: number): {
45
+ __buoyTruncated: true;
46
+ note: string;
47
+ };
48
+ /**
49
+ * The value itself if it fits `limit` (and is serializable), else `marker`.
50
+ * `undefined` passes through untouched: an absent field must stay absent.
51
+ */
52
+ export declare function toWire<T>(value: unknown, marker: T, limit?: number): unknown;
53
+ /** Detail-fetch cap: the value, or a truncation note when it is too big. */
54
+ export declare function capDetail(value: unknown, limit?: number): unknown;
55
+ /**
56
+ * Memoize a wire-form conversion by item identity. Correct for any store
57
+ * that prepends and never mutates a recorded item — the cache self-invalidates
58
+ * when the item is dropped from the buffer.
59
+ */
60
+ export declare function memoByIdentity<T extends object, R>(convert: (item: T) => R): (item: T) => R;
61
+ export interface WireSized<T> {
62
+ value: T;
63
+ bytes: number;
64
+ }
65
+ export interface NewestFittingOptions<T, W> {
66
+ /** Convert one item to its wire form and its byte cost. Memoize with `memoByIdentity`. */
67
+ toWire: (item: T) => WireSized<W>;
68
+ /** Snapshot byte budget. */
69
+ budget: number;
70
+ /** Bytes the envelope around the list costs (`{"entries":[]}` ≈ 16). */
71
+ baseBytes?: number;
72
+ }
73
+ /**
74
+ * Walk `items` (oldest-first) from the newest end, keeping every item until
75
+ * the budget is spent. Always keeps at least one so an over-budget newest
76
+ * item still reaches the dashboard as a stub rather than an empty panel.
77
+ * Returns oldest-first, matching the input.
78
+ */
79
+ export declare function newestFitting<T, W>(items: T[], options: NewestFittingOptions<T, W>): W[];
80
+ /**
81
+ * Size one wire-form item against a per-item cap, substituting a stub when it
82
+ * is too fat. One walk decides both "too big?" and "what does it cost".
83
+ */
84
+ export declare function sizeOrStub<W>(wired: W, limit: number, stub: () => W): WireSized<W>;
85
+ /** `(params as T | undefined) ?? {}` — the first line of every action. */
86
+ export declare function readParams<T extends object>(params: unknown): Partial<T>;
87
+ export type DetailResult<R extends object> = {
88
+ found: false;
89
+ reason: "missing id" | "unknown id";
90
+ } | ({
91
+ found: true;
92
+ id: string;
93
+ } & R);
94
+ /**
95
+ * The on-demand detail action every change-log tool exposes: look one item
96
+ * up by id, and return its detail fields size-capped. Replaces the
97
+ * `missing id` / `unknown id` boilerplate copied into each adapter.
98
+ */
99
+ export declare function detailByIdAction<T, R extends object>(lookup: (id: string) => T | undefined, detail: (item: T, cap: (value: unknown) => unknown) => R, limit?: number): (params?: unknown) => DetailResult<R>;
100
+ //# sourceMappingURL=wireForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wireForm.d.ts","sourceRoot":"","sources":["../../../../src/sync/wireForm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * defineToolPreset / createToolFactory — the typed way to declare a tool.
3
+ *
4
+ * Every tool package exports a `xToolPreset` object literal and a
5
+ * `createXTool(options)` factory that restates the same literal with
6
+ * `options?.name || default` on each field. None of the 23 presets was
7
+ * annotated with core's `InstalledApp`, so a preset that drifted from the
8
+ * contract (a bad `slot`, a missing `component`) failed at runtime in the
9
+ * dial, not at compile time.
10
+ *
11
+ * `ToolPreset` is that contract, declared here in shared (which every tool
12
+ * already depends on) and structurally identical to core's `InstalledApp`.
13
+ * `defineToolPreset` is an identity function that type-checks the literal;
14
+ * `createToolFactory` derives the `createXTool` function from the preset so
15
+ * the defaults live in exactly one place.
16
+ *
17
+ * Auto-discovery (core's `autoDiscoverPresets` / `autoExternalSync`) stays
18
+ * as hand-written `require()` blocks on purpose: Metro needs each package
19
+ * name as a static string lexically inside its own try, so a manifest can't
20
+ * replace them.
21
+ */
22
+ import type { ComponentType, ReactNode } from "react";
23
+ import type { ToolSyncAdapter } from "../sync/toolSyncAdapter";
24
+ /** Where a tool should render within the floating menu surface. */
25
+ export type ToolSlot = "row" | "dial" | "both";
26
+ /** What an icon renderer receives. Mirrors core's `FloatingMenuRenderCtx`. */
27
+ export interface ToolIconContext {
28
+ slot: ToolSlot;
29
+ size: number;
30
+ color?: string;
31
+ state?: Record<string, unknown>;
32
+ actions?: Record<string, (...args: any[]) => void>;
33
+ }
34
+ /** Declarative modal chrome for a body-only tool. Mirrors core's `ToolModalConfig`. */
35
+ export interface ToolModalChrome {
36
+ title?: string;
37
+ subtitle?: string;
38
+ searchable?: boolean;
39
+ searchPlaceholder?: string;
40
+ headerActions?: ReactNode;
41
+ initialMode?: "bottomSheet" | "floating";
42
+ }
43
+ export type ToolLaunchMode = "self-modal" | "host-modal" | "inline" | "toggle-only";
44
+ /**
45
+ * The shape the floating menu installs. Structurally identical to core's
46
+ * `InstalledApp`; declared here so tool packages can type their presets
47
+ * without depending on core.
48
+ */
49
+ export interface ToolPreset<P extends Record<string, unknown> | undefined = Record<string, unknown> | undefined> {
50
+ /** Unique identifier used for persistence and settings. */
51
+ id: string;
52
+ /** Human readable name shown in accessibility labels and modal headers. */
53
+ name: string;
54
+ /** Brief description of what this tool does, shown in settings. */
55
+ description?: string;
56
+ /** A text icon, a node, or a renderer that adapts to slot and size. */
57
+ icon: ReactNode | ((ctx: ToolIconContext) => ReactNode);
58
+ /** Preferred layout slot; defaults to `"both"`. */
59
+ slot?: ToolSlot;
60
+ /** Optional accent color for the tool. */
61
+ color?: string;
62
+ /** The launched component. */
63
+ component: ComponentType<any>;
64
+ /** When set, `component` is a body rendered inside the shared modal shell. */
65
+ modal?: ToolModalChrome;
66
+ /** Sync adapter: the tool syncs to Buoy Desktop and is drivable over MCP. */
67
+ sync?: ToolSyncAdapter;
68
+ /** Props passed to the launched component. */
69
+ props?: P;
70
+ launchMode?: ToolLaunchMode;
71
+ /** Prevent more than one instance of this app at a time. */
72
+ singleton?: boolean;
73
+ onPress?: (actions?: Record<string, (...args: any[]) => void>) => void;
74
+ }
75
+ /** Identity with a type check: the literal must satisfy `ToolPreset`. */
76
+ export declare function defineToolPreset<T extends ToolPreset<Record<string, unknown> | undefined>>(preset: T): T;
77
+ /** The overrides every `createXTool` accepted. */
78
+ export interface ToolPresetOverrides {
79
+ /** Custom tool ID. */
80
+ id?: string;
81
+ /** Tool name shown in the menu. */
82
+ name?: string;
83
+ /** Tool description. */
84
+ description?: string;
85
+ }
86
+ /**
87
+ * Derive `createXTool(options)` from a preset: id/name/description overrides
88
+ * apply on top, and `mapProps` turns tool-specific options into `props`
89
+ * (merged over the preset's defaults).
90
+ *
91
+ * ```ts
92
+ * export const createNetworkTool = createToolFactory(networkToolPreset, (o: { enableSharedModalDimensions?: boolean }) => ({
93
+ * enableSharedModalDimensions: o.enableSharedModalDimensions ?? false,
94
+ * }));
95
+ * ```
96
+ */
97
+ export declare function createToolFactory<T extends ToolPreset<Record<string, unknown> | undefined>, O extends object = Record<never, never>>(preset: T, mapProps?: (options: O) => Partial<NonNullable<T["props"]>>,
98
+ /** Last word on any other preset field (a recolored icon, say). */
99
+ extend?: (options: O, preset: T) => Partial<T>): (options?: O & ToolPresetOverrides) => T;
100
+ //# sourceMappingURL=defineTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/defineTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * ChangeRow — one recorded change in a state tool's history list.
3
+ *
4
+ * redux, zustand and jotai each drew the same row on top of `CompactRow`:
5
+ * a colored status word (the slice / store / atom), a sublabel ("1.2ms ·
6
+ * 3 keys changed"), the primary line (changed keys or a value preview), a
7
+ * relative timestamp, and a right-hand badge made of a mono verb (SET,
8
+ * WRITE, ADDITEM) plus an icon — a lightning bolt when state actually
9
+ * changed, a clock when the update was slow. The three copies differed
10
+ * only in how they computed those strings. This component owns the drawing;
11
+ * tools own the strings.
12
+ *
13
+ * testID convention (unchanged from the originals): `${testID}-badge`,
14
+ * `${testID}-change`, `${testID}-slow`, `${testID}-status`,
15
+ * `${testID}-sublabel`, `${testID}-keys`.
16
+ */
17
+ import React, { type ReactNode } from "react";
18
+ export interface ChangeRowProps {
19
+ /** Status dot + status word color (a category color or the entity's color). */
20
+ statusColor: string;
21
+ /** The status word: "Cart", "Replace", "Pending", … */
22
+ statusLabel: string;
23
+ /** Line under the status word: duration and diff summary. */
24
+ sublabel?: string;
25
+ /** The row's main line: changed keys, a preview, an action type. */
26
+ primaryText: string;
27
+ /** Capture time; rendered as a self-ticking relative time. */
28
+ timestamp: number;
29
+ /** Mono verb drawn in `statusColor` on the right: "SET", "WRITE", "ADDITEM". */
30
+ badgeText?: string;
31
+ /** Draws the ⚡ indicator (state actually changed). */
32
+ changed?: boolean;
33
+ /** Draws the 🕒 indicator instead of ⚡ (update exceeded the frame budget). */
34
+ slow?: boolean;
35
+ /**
36
+ * Tool-specific badge content drawn BEFORE the verb (redux's async
37
+ * "1/2 #3" sequence chip). When set together with `badgeText`, both render.
38
+ */
39
+ badgePrefix?: ReactNode;
40
+ /** Replace the whole badge. Wins over badgeText / changed / slow. */
41
+ customBadge?: ReactNode;
42
+ /**
43
+ * Let CompactRow draw its own plain badge with this text when there is
44
+ * nothing else to show (no verb, no indicator, no custom badge).
45
+ */
46
+ plainBadgeText?: string;
47
+ onPress?: () => void;
48
+ testID?: string;
49
+ accessibilityLabel?: string;
50
+ }
51
+ export declare function ChangeRow({ statusColor, statusLabel, sublabel, primaryText, timestamp, badgeText, changed, slow, badgePrefix, customBadge, plainBadgeText, onPress, testID, accessibilityLabel, }: ChangeRowProps): React.JSX.Element;
52
+ //# sourceMappingURL=ChangeRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeRow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ChangeRow.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQ9C,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,qEAAqE;IACrE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,SAAS,CAAC,EACxB,WAAW,EACX,WAAW,EACX,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAe,EACf,IAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,EACd,OAAO,EACP,MAAM,EACN,kBAAkB,GACnB,EAAE,cAAc,qBAiDhB"}