@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
@@ -14,6 +14,7 @@ import { ChevronLeft, ChevronRight } from "../../icons/lucide-icons.js";
14
14
  import { macOSColors } from "../gameUI/constants/macOSDesignSystemColors.js";
15
15
  import { night } from "../night/nightTheme.js";
16
16
  import { useSafeAreaInsets } from "../../hooks/useSafeAreaInsets.js";
17
+ import { monoFont } from "../fonts.js";
17
18
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
18
19
  /**
19
20
  * A footer component for navigating through a list of events/items.
@@ -132,7 +133,7 @@ const styles = StyleSheet.create({
132
133
  fontSize: 12,
133
134
  fontWeight: "600",
134
135
  color: macOSColors.text.primary,
135
- fontFamily: "monospace",
136
+ fontFamily: monoFont,
136
137
  textTransform: "uppercase"
137
138
  },
138
139
  navButtonTextDisabled: {
@@ -145,13 +146,13 @@ const styles = StyleSheet.create({
145
146
  fontSize: 14,
146
147
  fontWeight: "700",
147
148
  color: macOSColors.text.primary,
148
- fontFamily: "monospace",
149
+ fontFamily: monoFont,
149
150
  textTransform: "uppercase"
150
151
  },
151
152
  subtitleText: {
152
153
  fontSize: 11,
153
154
  color: macOSColors.text.secondary,
154
- fontFamily: "monospace",
155
+ fontFamily: monoFont,
155
156
  marginTop: 2
156
157
  },
157
158
  // ── Night variant (see ui/night/nightTheme.ts): near-black glass bar with
@@ -28,7 +28,8 @@ function CollapsedPeek({
28
28
  width,
29
29
  height,
30
30
  customContent,
31
- label
31
+ label,
32
+ testID
32
33
  }) {
33
34
  // When progress=0 (collapsed): peek is visible (opacity=1, scale=1)
34
35
  // When progress=1 (expanded): peek is hidden (opacity=0, scale=0.9)
@@ -57,6 +58,7 @@ function CollapsedPeek({
57
58
  }],
58
59
  accessibilityLabel: label || `Expand options`,
59
60
  accessibilityRole: "button",
61
+ testID: testID,
60
62
  children: customContent || /*#__PURE__*/_jsxs(_Fragment, {
61
63
  children: [/*#__PURE__*/_jsx(ChevronUp, {
62
64
  size: 12,
@@ -82,7 +84,8 @@ function ExpandedWrapper({
82
84
  width,
83
85
  expandedHeight,
84
86
  isExpanded,
85
- style
87
+ style,
88
+ collapseTestID
86
89
  }) {
87
90
  // Animate height from 0 to full height
88
91
  const animatedHeight = progress.interpolate({
@@ -105,6 +108,7 @@ function ExpandedWrapper({
105
108
  style: styles.collapseButton,
106
109
  accessibilityLabel: "Collapse",
107
110
  accessibilityRole: "button",
111
+ testID: collapseTestID,
108
112
  children: /*#__PURE__*/_jsx(ChevronUp, {
109
113
  size: 12,
110
114
  color: buoyColors.textMuted,
@@ -137,7 +141,9 @@ export function ExpandablePopover({
137
141
  expandedStyle,
138
142
  persistState = false,
139
143
  storageKey,
140
- peekHeight = DEFAULT_PEEK_HEIGHT
144
+ peekHeight = DEFAULT_PEEK_HEIGHT,
145
+ testID,
146
+ collapseTestID
141
147
  }) {
142
148
  const [isExpanded, setIsExpanded] = useState(defaultExpanded);
143
149
  const [isStateRestored, setIsStateRestored] = useState(!persistState);
@@ -240,6 +246,7 @@ export function ExpandablePopover({
240
246
  style: styles.expandedWrapper,
241
247
  pointerEvents: isExpanded ? "box-none" : "none",
242
248
  children: /*#__PURE__*/_jsx(ExpandedWrapper, {
249
+ collapseTestID: collapseTestID,
243
250
  onCollapse: handleCollapse,
244
251
  progress: progress,
245
252
  width: width,
@@ -259,7 +266,8 @@ export function ExpandablePopover({
259
266
  width: width,
260
267
  height: peekHeight,
261
268
  customContent: collapsedContent,
262
- label: collapsedLabel
269
+ label: collapsedLabel,
270
+ testID: testID
263
271
  })
264
272
  })]
265
273
  });
@@ -17,6 +17,7 @@
17
17
 
18
18
  import { View, Text, StyleSheet } from "react-native";
19
19
  import { macOSColors } from "../gameUI/constants/macOSDesignSystemColors.js";
20
+ import { monoFont } from "../fonts.js";
20
21
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
21
22
  export function ExpandedInfoRow({
22
23
  label,
@@ -72,7 +73,7 @@ const styles = StyleSheet.create({
72
73
  color: macOSColors.text.muted,
73
74
  fontWeight: "600",
74
75
  minWidth: 70,
75
- fontFamily: "monospace"
76
+ fontFamily: monoFont
76
77
  },
77
78
  pill: {
78
79
  flexDirection: "row",
@@ -92,7 +93,7 @@ const styles = StyleSheet.create({
92
93
  pillText: {
93
94
  fontSize: 10,
94
95
  fontWeight: "700",
95
- fontFamily: "monospace",
96
+ fontFamily: monoFont,
96
97
  letterSpacing: 0.5
97
98
  },
98
99
  pillTextSm: {
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * ExportPreview — the collapsible "what will be copied" panel at the bottom
5
+ * of a copy-settings screen.
6
+ *
7
+ * Collapsed, it is a card: an eye icon, "Show Preview", a one-line summary
8
+ * ("14 events · ~12.3 KB (mock data)"), a chevron — and, when the estimated
9
+ * payload is big, an amber or red size warning under it. Expanded, it is a
10
+ * "Hide Preview" bar over whatever the tool renders (a DataViewer for JSON,
11
+ * a mono text block otherwise).
12
+ *
13
+ * network, events and highlight-updates each drew this (~120 lines apiece).
14
+ * Tools keep their own summary string, warning copy and body; the chrome
15
+ * and the size-threshold ladder live here.
16
+ */
17
+
18
+ import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
19
+ import { AlertTriangle, ChevronDown, ChevronUp, Eye } from "../../icons/index.js";
20
+ import { night } from "../night/nightTheme.js";
21
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
+ /** The two-step ladder every copy view used (thresholds differ per tool). */
23
+ export function sizeWarningLevel(bytes, thresholds) {
24
+ if (bytes >= thresholds.danger) return "danger";
25
+ if (bytes >= thresholds.warning) return "warning";
26
+ return "none";
27
+ }
28
+ const DEFAULT_WARNING = {
29
+ warning: "Large payload — preview may be slow",
30
+ danger: "Very large payload — may cause performance issues"
31
+ };
32
+ export function ExportPreview({
33
+ expanded,
34
+ onExpandedChange,
35
+ summary,
36
+ warningLevel = "none",
37
+ warningText = DEFAULT_WARNING,
38
+ testIDs,
39
+ renderBody
40
+ }) {
41
+ if (!expanded) {
42
+ const warningColor = warningLevel === "danger" ? night.color.danger : warningLevel === "warning" ? night.color.warning : night.color.textSecondary;
43
+ return /*#__PURE__*/_jsxs(View, {
44
+ style: styles.collapsed,
45
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
46
+ style: styles.expandButton,
47
+ onPress: () => onExpandedChange(true),
48
+ testID: testIDs?.expand,
49
+ accessibilityRole: "button",
50
+ accessibilityLabel: "Show export preview",
51
+ children: /*#__PURE__*/_jsxs(View, {
52
+ style: styles.expandButtonContent,
53
+ children: [/*#__PURE__*/_jsx(Eye, {
54
+ size: 16,
55
+ color: night.color.info
56
+ }), /*#__PURE__*/_jsxs(View, {
57
+ style: styles.expandButtonTextContainer,
58
+ children: [/*#__PURE__*/_jsx(Text, {
59
+ style: styles.expandButtonTitle,
60
+ children: "Show Preview"
61
+ }), /*#__PURE__*/_jsx(Text, {
62
+ style: styles.expandButtonSubtitle,
63
+ testID: testIDs?.summary,
64
+ children: summary
65
+ })]
66
+ }), /*#__PURE__*/_jsx(ChevronDown, {
67
+ size: 16,
68
+ color: night.color.textTertiary
69
+ })]
70
+ })
71
+ }), warningLevel !== "none" ? /*#__PURE__*/_jsxs(View, {
72
+ style: [styles.sizeWarning, warningLevel === "danger" && styles.sizeWarningDanger],
73
+ testID: testIDs?.warning,
74
+ children: [/*#__PURE__*/_jsx(AlertTriangle, {
75
+ size: 12,
76
+ color: warningColor
77
+ }), /*#__PURE__*/_jsx(Text, {
78
+ style: [styles.sizeWarningText, {
79
+ color: warningColor
80
+ }],
81
+ children: warningLevel === "danger" ? warningText.danger : warningText.warning
82
+ })]
83
+ }) : null]
84
+ });
85
+ }
86
+ return /*#__PURE__*/_jsxs(View, {
87
+ children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
88
+ style: styles.collapseButton,
89
+ onPress: () => onExpandedChange(false),
90
+ testID: testIDs?.collapse,
91
+ accessibilityRole: "button",
92
+ accessibilityLabel: "Hide export preview",
93
+ children: [/*#__PURE__*/_jsx(Text, {
94
+ style: styles.collapseButtonText,
95
+ children: "Hide Preview"
96
+ }), /*#__PURE__*/_jsx(ChevronUp, {
97
+ size: 14,
98
+ color: night.color.textSecondary
99
+ })]
100
+ }), renderBody()]
101
+ });
102
+ }
103
+ const styles = StyleSheet.create({
104
+ collapsed: {
105
+ gap: 8
106
+ },
107
+ expandButton: {
108
+ backgroundColor: night.color.surfaceElevated,
109
+ borderRadius: 8,
110
+ borderWidth: 1,
111
+ borderColor: night.color.border,
112
+ padding: 12
113
+ },
114
+ expandButtonContent: {
115
+ flexDirection: "row",
116
+ alignItems: "center",
117
+ gap: 10
118
+ },
119
+ expandButtonTextContainer: {
120
+ flex: 1
121
+ },
122
+ expandButtonTitle: {
123
+ fontSize: 13,
124
+ fontWeight: "600",
125
+ color: night.color.text
126
+ },
127
+ expandButtonSubtitle: {
128
+ fontSize: 11,
129
+ color: night.color.textSecondary,
130
+ marginTop: 2
131
+ },
132
+ collapseButton: {
133
+ flexDirection: "row",
134
+ alignItems: "center",
135
+ justifyContent: "center",
136
+ gap: 6,
137
+ paddingVertical: 8,
138
+ marginBottom: 8,
139
+ backgroundColor: night.color.surfaceElevated,
140
+ borderRadius: 6,
141
+ borderWidth: 1,
142
+ borderColor: night.color.border
143
+ },
144
+ collapseButtonText: {
145
+ fontSize: 12,
146
+ fontWeight: "500",
147
+ color: night.color.textSecondary
148
+ },
149
+ sizeWarning: {
150
+ flexDirection: "row",
151
+ alignItems: "center",
152
+ gap: 6,
153
+ paddingHorizontal: 10,
154
+ paddingVertical: 6,
155
+ backgroundColor: night.color.warningSoft,
156
+ borderRadius: 6,
157
+ borderWidth: 1,
158
+ borderColor: night.color.warning + "30"
159
+ },
160
+ sizeWarningDanger: {
161
+ backgroundColor: night.color.dangerSoft,
162
+ borderColor: night.color.danger + "30"
163
+ },
164
+ sizeWarningText: {
165
+ fontSize: 11,
166
+ fontWeight: "500",
167
+ flex: 1
168
+ }
169
+ });
@@ -3,7 +3,7 @@
3
3
  import { View, Text, TouchableOpacity, TextInput, StyleSheet } from "react-native";
4
4
  import { X, Plus } from "../../icons/index.js";
5
5
  import { night } from "../night/nightTheme.js";
6
-
6
+ import { monoFont } from "../fonts.js";
7
7
  // Container for filter section
8
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
9
  export function FilterSection({
@@ -272,7 +272,7 @@ const styles = StyleSheet.create({
272
272
  filterItemText: {
273
273
  flex: 1,
274
274
  fontSize: 12,
275
- fontFamily: "monospace",
275
+ fontFamily: monoFont,
276
276
  marginRight: 8,
277
277
  color: night.color.text
278
278
  },
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * InfoRow — the label / value line of every detail screen.
5
+ *
6
+ * Thirteen tools hand-rolled this (redux and zustand byte-for-byte). The
7
+ * night-theme recipe below is theirs: 11 px, tertiary label on the left,
8
+ * right-aligned value that truncates in the MIDDLE so both ends of an id or
9
+ * a path stay readable, optional monospace, optional color.
10
+ *
11
+ * `ellipsizeMode="middle"` truncates the RENDERED text and iOS reports the
12
+ * truncated string back, so anything a test reads off one of these rows has
13
+ * to be short enough to fit on the line.
14
+ */
15
+
16
+ import { StyleSheet, Text, View } from "react-native";
17
+ import { night } from "../night/nightTheme.js";
18
+ import { CopyButton } from "./CopyButton.js";
19
+ import { monoFont } from "../fonts.js";
20
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
21
+ export function InfoRow({
22
+ label,
23
+ value,
24
+ valueColor,
25
+ mono = false,
26
+ copyable = false,
27
+ numberOfLines = 1,
28
+ testID,
29
+ style,
30
+ labelStyle,
31
+ valueStyle
32
+ }) {
33
+ const isText = typeof value === "string" || typeof value === "number";
34
+ return /*#__PURE__*/_jsxs(View, {
35
+ style: [styles.row, style],
36
+ children: [/*#__PURE__*/_jsx(Text, {
37
+ style: [styles.label, labelStyle],
38
+ numberOfLines: 1,
39
+ children: label
40
+ }), isText ? /*#__PURE__*/_jsx(Text, {
41
+ testID: testID,
42
+ style: [styles.value, mono && styles.valueMono, valueColor ? {
43
+ color: valueColor
44
+ } : undefined, valueStyle],
45
+ numberOfLines: numberOfLines,
46
+ ellipsizeMode: "middle",
47
+ children: String(value)
48
+ }) : /*#__PURE__*/_jsx(View, {
49
+ style: styles.valueNode,
50
+ testID: testID,
51
+ children: value
52
+ }), copyable && isText ? /*#__PURE__*/_jsx(CopyButton, {
53
+ value: String(value),
54
+ size: 12
55
+ }) : null]
56
+ });
57
+ }
58
+ const styles = StyleSheet.create({
59
+ row: {
60
+ flexDirection: "row",
61
+ alignItems: "center",
62
+ justifyContent: "space-between"
63
+ },
64
+ label: {
65
+ fontSize: 11,
66
+ color: night.color.textTertiary,
67
+ fontWeight: "500"
68
+ },
69
+ value: {
70
+ fontSize: 11,
71
+ color: night.color.text,
72
+ fontWeight: "500",
73
+ flex: 1,
74
+ textAlign: "right",
75
+ marginLeft: 12
76
+ },
77
+ valueMono: {
78
+ fontFamily: monoFont
79
+ },
80
+ valueNode: {
81
+ flex: 1,
82
+ flexDirection: "row",
83
+ justifyContent: "flex-end",
84
+ alignItems: "center",
85
+ marginLeft: 12
86
+ }
87
+ });
@@ -139,16 +139,32 @@ export function HeaderSearch({
139
139
  onCancel,
140
140
  placeholder = "Search...",
141
141
  autoFocus = true,
142
- testID
142
+ testID,
143
+ containerTestID,
144
+ clearTestID,
145
+ accessibilityLabel,
146
+ onBlur,
147
+ iconSize = 12,
148
+ dismissOnBlur = false,
149
+ onDismiss,
150
+ clearOnlyWhenText = false,
151
+ inputProps,
152
+ containerNativeID
143
153
  }) {
144
154
  const inputRef = useRef(null);
155
+ // Set while the ✕ is pressed so the blur it causes doesn't dismiss first.
156
+ const clearPressRef = useRef(false);
145
157
  useEffect(() => {
146
158
  if (autoFocus) inputRef.current?.focus();
147
159
  }, [autoFocus]);
160
+ const dismiss = onDismiss ?? onCancel;
161
+ const showClear = !clearOnlyWhenText || value.length > 0;
148
162
  return /*#__PURE__*/_jsxs(View, {
149
163
  style: styles.searchContainer,
164
+ testID: containerTestID,
165
+ nativeID: containerNativeID,
150
166
  children: [/*#__PURE__*/_jsx(SearchIcon, {
151
- size: 12,
167
+ size: iconSize,
152
168
  color: night.color.textSecondary
153
169
  }), /*#__PURE__*/_jsx(TextInput, {
154
170
  ref: inputRef,
@@ -157,21 +173,38 @@ export function HeaderSearch({
157
173
  placeholderTextColor: night.color.placeholder,
158
174
  value: value,
159
175
  onChangeText: onChangeText,
176
+ onSubmitEditing: () => dismissOnBlur ? dismiss() : inputRef.current?.blur(),
177
+ onBlur: () => {
178
+ if (dismissOnBlur && !clearPressRef.current) dismiss();
179
+ onBlur?.();
180
+ },
160
181
  autoCorrect: false,
161
182
  autoCapitalize: "none",
183
+ returnKeyType: "search",
162
184
  testID: testID,
163
- accessibilityLabel: placeholder
164
- }), /*#__PURE__*/_jsx(TouchableOpacity, {
165
- onPress: onCancel,
185
+ accessibilityLabel: accessibilityLabel ?? placeholder,
186
+ ...inputProps
187
+ }), showClear ? /*#__PURE__*/_jsx(TouchableOpacity, {
188
+ onPress: onCancel
189
+ // react-native-web delays press-in ~50ms by default (native fires it
190
+ // immediately), which would put it AFTER the blur.
191
+ ,
192
+ delayPressIn: 0,
193
+ onPressIn: () => {
194
+ clearPressRef.current = true;
195
+ },
196
+ onPressOut: () => {
197
+ clearPressRef.current = false;
198
+ },
166
199
  style: styles.searchCancelButton,
167
200
  accessibilityRole: "button",
168
201
  accessibilityLabel: "Clear search",
169
- testID: testID ? `${testID}-clear` : undefined,
202
+ testID: clearTestID ?? (testID ? `${testID}-clear` : undefined),
170
203
  children: /*#__PURE__*/_jsx(X, {
171
204
  size: 12,
172
205
  color: night.color.textSecondary
173
206
  })
174
- })]
207
+ }) : null]
175
208
  });
176
209
  }
177
210
 
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Pill — the small caption chip every tool draws next to a row: a verdict
5
+ * ("UNUSED", "OVERSIZE"), a kind ("event", "transaction"), a link ("↔ 2"),
6
+ * a source ("MMKV"). Sixteen packages defined 150+ local pill styles that
7
+ * fall into five looks; those are the `variant`s here. Text is always in
8
+ * the pill's color (or the muted ink for `quiet`), never the series color
9
+ * of anything else.
10
+ *
11
+ * - `tinted` — color fill at 15% + border at 40% (scenarios, react-query chips)
12
+ * - `soft` — color fill at 20%, rounded, no border (events correlation badge)
13
+ * - `outline` — color border only (sentry envelope types)
14
+ * - `quiet` — neutral 6% white fill, muted text, optional color dot (assets)
15
+ * - `text` — bare colored caption, no chrome (images row badges)
16
+ */
17
+
18
+ import { StyleSheet, Text, View } from "react-native";
19
+ import { night } from "../night/nightTheme.js";
20
+ import { monoFont } from "../fonts.js";
21
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
+ export function Pill({
23
+ label,
24
+ color = night.color.textSecondary,
25
+ variant = "tinted",
26
+ size = "xs",
27
+ mono = false,
28
+ uppercase,
29
+ dot = false,
30
+ icon,
31
+ testID,
32
+ style
33
+ }) {
34
+ const upper = uppercase ?? (variant === "tinted" || variant === "quiet" || variant === "text");
35
+ const textColor = variant === "quiet" ? night.color.textSecondary : color;
36
+ const chrome = variant === "tinted" ? {
37
+ backgroundColor: `${color}15`,
38
+ borderColor: `${color}40`,
39
+ borderWidth: 1
40
+ } : variant === "soft" ? {
41
+ backgroundColor: `${color}20`
42
+ } : variant === "outline" ? {
43
+ borderColor: color,
44
+ borderWidth: 1
45
+ } : variant === "quiet" ? {
46
+ backgroundColor: "rgba(255,255,255,0.06)"
47
+ } : {};
48
+ if (variant === "text") {
49
+ return /*#__PURE__*/_jsx(Text, {
50
+ style: [styles.text, size === "sm" && styles.textSm, mono && styles.mono, upper && styles.upper, {
51
+ color: textColor
52
+ }],
53
+ testID: testID,
54
+ children: label
55
+ });
56
+ }
57
+ return /*#__PURE__*/_jsxs(View, {
58
+ style: [styles.pill, variant === "soft" && styles.pillSoft, size === "sm" && styles.pillSm, chrome, style],
59
+ children: [icon, dot && variant === "quiet" ? /*#__PURE__*/_jsx(View, {
60
+ style: [styles.dot, {
61
+ backgroundColor: color
62
+ }]
63
+ }) : null, /*#__PURE__*/_jsx(Text, {
64
+ style: [styles.text, size === "sm" && styles.textSm, mono && styles.mono, upper && styles.upper, {
65
+ color: textColor
66
+ }],
67
+ testID: testID,
68
+ children: label
69
+ })]
70
+ });
71
+ }
72
+ const styles = StyleSheet.create({
73
+ pill: {
74
+ flexDirection: "row",
75
+ alignItems: "center",
76
+ alignSelf: "flex-start",
77
+ gap: 4,
78
+ paddingHorizontal: 6,
79
+ paddingVertical: 2,
80
+ borderRadius: 4
81
+ },
82
+ pillSoft: {
83
+ paddingHorizontal: 8,
84
+ borderRadius: 10
85
+ },
86
+ pillSm: {
87
+ paddingHorizontal: 8,
88
+ paddingVertical: 3
89
+ },
90
+ dot: {
91
+ width: 5,
92
+ height: 5,
93
+ borderRadius: 2.5
94
+ },
95
+ text: {
96
+ fontSize: 10,
97
+ fontWeight: "600",
98
+ letterSpacing: 0.3
99
+ },
100
+ textSm: {
101
+ fontSize: 11
102
+ },
103
+ mono: {
104
+ fontFamily: monoFont
105
+ },
106
+ upper: {
107
+ textTransform: "uppercase",
108
+ letterSpacing: 0.5,
109
+ fontWeight: "700"
110
+ }
111
+ });
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * ToggleRow — a labeled switch row for a tool's settings surface.
5
+ *
6
+ * Every settings screen (impersonate, image-overlay, highlight-updates,
7
+ * perf-monitor, scenarios, storage, ask-buoy) drew its own `toggleRow` +
8
+ * `<Switch>` pair with the same night track colors. The native switch stays
9
+ * (a custom control would be a visible design change); the row chrome,
10
+ * the label/description stack and the accent/warning tone are shared.
11
+ *
12
+ * - `variant="card"` — an elevated bordered pill row (image-overlay)
13
+ * - `variant="plain"` — a bare list row for use inside a card (impersonate)
14
+ */
15
+
16
+ import { StyleSheet, Switch, Text, View } from "react-native";
17
+ import { night } from "../night/nightTheme.js";
18
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
+ export function ToggleRow({
20
+ label,
21
+ description,
22
+ value,
23
+ onValueChange,
24
+ disabled = false,
25
+ tone = "accent",
26
+ accessory,
27
+ variant = "card",
28
+ emphasizeLabel = false,
29
+ testID,
30
+ style
31
+ }) {
32
+ const onColor = tone === "warning" ? night.color.warning : night.color.accent;
33
+ const isCard = variant === "card";
34
+ return /*#__PURE__*/_jsxs(View, {
35
+ style: [styles.row, isCard ? styles.rowCard : styles.rowPlain, style],
36
+ children: [/*#__PURE__*/_jsxs(View, {
37
+ style: styles.info,
38
+ children: [/*#__PURE__*/_jsxs(View, {
39
+ style: styles.header,
40
+ children: [/*#__PURE__*/_jsx(Text, {
41
+ style: [isCard ? styles.labelCard : styles.labelPlain, emphasizeLabel && {
42
+ color: onColor
43
+ }],
44
+ numberOfLines: 2,
45
+ children: label
46
+ }), accessory]
47
+ }), description ? /*#__PURE__*/_jsx(Text, {
48
+ style: styles.description,
49
+ children: description
50
+ }) : null]
51
+ }), /*#__PURE__*/_jsx(Switch, {
52
+ value: value,
53
+ onValueChange: onValueChange,
54
+ disabled: disabled,
55
+ testID: testID,
56
+ accessibilityLabel: label,
57
+ trackColor: isCard ? {
58
+ false: night.color.surfaceElevated,
59
+ true: onColor
60
+ } : {
61
+ false: night.color.border,
62
+ true: `${onColor}50`
63
+ },
64
+ thumbColor: isCard ? undefined : value ? onColor : night.color.knob
65
+ })]
66
+ });
67
+ }
68
+ const styles = StyleSheet.create({
69
+ row: {
70
+ flexDirection: "row",
71
+ alignItems: "center",
72
+ justifyContent: "space-between"
73
+ },
74
+ rowCard: {
75
+ backgroundColor: night.color.surfaceElevated,
76
+ borderRadius: 8,
77
+ borderWidth: 1,
78
+ borderColor: night.color.border,
79
+ paddingHorizontal: 12,
80
+ paddingVertical: 8
81
+ },
82
+ rowPlain: {
83
+ paddingVertical: 12,
84
+ paddingHorizontal: 12
85
+ },
86
+ info: {
87
+ flex: 1,
88
+ marginRight: 12
89
+ },
90
+ header: {
91
+ flexDirection: "row",
92
+ alignItems: "center",
93
+ gap: 8,
94
+ flexWrap: "wrap"
95
+ },
96
+ labelCard: {
97
+ fontSize: 13,
98
+ fontWeight: "500",
99
+ color: night.color.textSecondary
100
+ },
101
+ labelPlain: {
102
+ fontSize: 14,
103
+ fontWeight: "500",
104
+ color: night.color.text
105
+ },
106
+ description: {
107
+ fontSize: 12,
108
+ color: night.color.textTertiary,
109
+ lineHeight: 16,
110
+ marginTop: 3
111
+ }
112
+ });