@peers-app/peers-ui 0.14.0 → 0.15.0

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 (438) hide show
  1. package/.github/workflows/publish.yml +8 -5
  2. package/babel.config.js +4 -4
  3. package/biome.json +191 -0
  4. package/dist/command-palette/command-palette-ui.d.ts +1 -2
  5. package/dist/command-palette/command-palette-ui.js +175 -244
  6. package/dist/command-palette/command-palette.js +65 -64
  7. package/dist/components/chat-overlay.d.ts +2 -2
  8. package/dist/components/chat-overlay.js +160 -217
  9. package/dist/components/checkbox.d.ts +5 -4
  10. package/dist/components/checkbox.js +4 -7
  11. package/dist/components/group-switcher.d.ts +1 -2
  12. package/dist/components/group-switcher.js +119 -159
  13. package/dist/components/input-date.d.ts +3 -3
  14. package/dist/components/input-date.js +6 -6
  15. package/dist/components/input-number.d.ts +7 -6
  16. package/dist/components/input-number.js +25 -20
  17. package/dist/components/input.d.ts +5 -4
  18. package/dist/components/input.js +4 -7
  19. package/dist/components/inverse-lazy-list.d.ts +3 -3
  20. package/dist/components/inverse-lazy-list.js +13 -47
  21. package/dist/components/io-schema-values.d.ts +5 -6
  22. package/dist/components/io-schema-values.js +28 -65
  23. package/dist/components/io-schema.d.ts +4 -5
  24. package/dist/components/io-schema.js +42 -79
  25. package/dist/components/lazy-list.d.ts +3 -3
  26. package/dist/components/lazy-list.js +38 -58
  27. package/dist/components/list-screen.d.ts +3 -8
  28. package/dist/components/list-screen.js +28 -23
  29. package/dist/components/loading-indicator.d.ts +1 -2
  30. package/dist/components/loading-indicator.js +2 -6
  31. package/dist/components/markdown-editor/autolink-plugin.js +5 -8
  32. package/dist/components/markdown-editor/editor-inline.d.ts +2 -3
  33. package/dist/components/markdown-editor/editor-inline.js +2 -6
  34. package/dist/components/markdown-editor/editor.d.ts +6 -6
  35. package/dist/components/markdown-editor/editor.js +9 -19
  36. package/dist/components/markdown-editor/markdown-plugin.d.ts +1 -1
  37. package/dist/components/markdown-editor/markdown-plugin.js +20 -21
  38. package/dist/components/markdown-editor/mention-node.d.ts +2 -2
  39. package/dist/components/markdown-editor/mention-node.js +24 -24
  40. package/dist/components/markdown-editor/mentions-plugin.d.ts +2 -2
  41. package/dist/components/markdown-editor/mentions-plugin.js +61 -62
  42. package/dist/components/markdown-editor/theme.js +28 -28
  43. package/dist/components/markdown-editor/toolbar.d.ts +2 -3
  44. package/dist/components/markdown-editor/toolbar.js +32 -49
  45. package/dist/components/markdown-with-mentions.d.ts +1 -1
  46. package/dist/components/markdown-with-mentions.js +43 -43
  47. package/dist/components/message-logs/message-logs.d.ts +1 -2
  48. package/dist/components/message-logs/message-logs.js +91 -116
  49. package/dist/components/messages/avatar.d.ts +3 -4
  50. package/dist/components/messages/avatar.js +37 -46
  51. package/dist/components/messages/channel-message-list.d.ts +5 -6
  52. package/dist/components/messages/channel-message-list.js +34 -34
  53. package/dist/components/messages/channel-view.d.ts +1 -2
  54. package/dist/components/messages/channel-view.js +23 -57
  55. package/dist/components/messages/message-compose.d.ts +3 -4
  56. package/dist/components/messages/message-compose.js +27 -38
  57. package/dist/components/messages/message-display.d.ts +2 -3
  58. package/dist/components/messages/message-display.js +42 -95
  59. package/dist/components/messages/thread-message-list.d.ts +4 -5
  60. package/dist/components/messages/thread-message-list.js +29 -29
  61. package/dist/components/router.d.ts +1 -2
  62. package/dist/components/router.js +58 -66
  63. package/dist/components/save-button.d.ts +3 -3
  64. package/dist/components/save-button.js +23 -33
  65. package/dist/components/sortable-list.d.ts +11 -12
  66. package/dist/components/sortable-list.js +42 -22
  67. package/dist/components/tabs.d.ts +3 -3
  68. package/dist/components/tabs.js +16 -47
  69. package/dist/components/tooltip.d.ts +4 -4
  70. package/dist/components/tooltip.js +4 -9
  71. package/dist/components/trust-level-badge.d.ts +2 -3
  72. package/dist/components/trust-level-badge.js +16 -16
  73. package/dist/components/trust-level-dropdown.d.ts +3 -4
  74. package/dist/components/trust-level-dropdown.js +32 -55
  75. package/dist/components/typeahead.d.ts +3 -3
  76. package/dist/components/typeahead.js +48 -89
  77. package/dist/components/voice-indicator.d.ts +2 -2
  78. package/dist/components/voice-indicator.js +93 -106
  79. package/dist/components/voice-subscribe-events.d.ts +32 -0
  80. package/dist/components/voice-subscribe-events.js +2 -0
  81. package/dist/globals.d.ts +3 -5
  82. package/dist/globals.js +22 -33
  83. package/dist/hooks.d.ts +5 -5
  84. package/dist/hooks.js +22 -12
  85. package/dist/hooks.test.js +129 -145
  86. package/dist/index.d.ts +9 -8
  87. package/dist/index.js +13 -12
  88. package/dist/mention-configs.d.ts +2 -2
  89. package/dist/mention-configs.js +55 -42
  90. package/dist/screens/assistants/assistant-config.d.ts +2 -3
  91. package/dist/screens/assistants/assistant-config.js +9 -22
  92. package/dist/screens/assistants/assistant-details.d.ts +1 -2
  93. package/dist/screens/assistants/assistant-details.js +13 -28
  94. package/dist/screens/assistants/assistant-info.d.ts +2 -3
  95. package/dist/screens/assistants/assistant-info.js +3 -17
  96. package/dist/screens/assistants/assistant-list.d.ts +1 -2
  97. package/dist/screens/assistants/assistant-list.js +15 -56
  98. package/dist/screens/assistants/assistant-tools.d.ts +2 -3
  99. package/dist/screens/assistants/assistant-tools.js +10 -24
  100. package/dist/screens/console-logs/console-logs-list.d.ts +1 -2
  101. package/dist/screens/console-logs/console-logs-list.js +130 -134
  102. package/dist/screens/console-logs/log-display.d.ts +2 -3
  103. package/dist/screens/console-logs/log-display.js +40 -42
  104. package/dist/screens/console-logs/log-filters.d.ts +1 -2
  105. package/dist/screens/console-logs/log-filters.js +2 -24
  106. package/dist/screens/console-logs/mobile-log-card.d.ts +2 -3
  107. package/dist/screens/console-logs/mobile-log-card.js +64 -67
  108. package/dist/screens/console-logs/resizable-table-header.d.ts +1 -2
  109. package/dist/screens/console-logs/resizable-table-header.js +31 -67
  110. package/dist/screens/contacts/contact-details.d.ts +1 -2
  111. package/dist/screens/contacts/contact-details.js +16 -46
  112. package/dist/screens/contacts/contact-list.d.ts +1 -2
  113. package/dist/screens/contacts/contact-list.js +44 -103
  114. package/dist/screens/contacts/index.d.ts +4 -4
  115. package/dist/screens/contacts/index.js +1 -1
  116. package/dist/screens/contacts/user-connect.d.ts +1 -2
  117. package/dist/screens/contacts/user-connect.js +85 -186
  118. package/dist/screens/data-explorer/data-explorer.d.ts +1 -2
  119. package/dist/screens/data-explorer/data-explorer.js +61 -181
  120. package/dist/screens/data-explorer/index.d.ts +2 -2
  121. package/dist/screens/data-explorer/query-executor.d.ts +1 -2
  122. package/dist/screens/data-explorer/query-executor.js +56 -166
  123. package/dist/screens/groups/group-details.d.ts +1 -2
  124. package/dist/screens/groups/group-details.js +27 -122
  125. package/dist/screens/groups/group-invite-listener.d.ts +2 -3
  126. package/dist/screens/groups/group-invite-listener.js +8 -104
  127. package/dist/screens/groups/group-list.d.ts +1 -2
  128. package/dist/screens/groups/group-list.js +56 -133
  129. package/dist/screens/groups/group-members.d.ts +2 -3
  130. package/dist/screens/groups/group-members.js +62 -132
  131. package/dist/screens/groups/index.d.ts +4 -4
  132. package/dist/screens/groups/index.js +1 -1
  133. package/dist/screens/join-group/index.d.ts +2 -2
  134. package/dist/screens/join-group/join-group.d.ts +1 -2
  135. package/dist/screens/join-group/join-group.js +9 -109
  136. package/dist/screens/network-viewer/connection-troubleshooter.d.ts +2 -3
  137. package/dist/screens/network-viewer/connection-troubleshooter.js +89 -193
  138. package/dist/screens/network-viewer/cpu-usage-graph.d.ts +1 -2
  139. package/dist/screens/network-viewer/cpu-usage-graph.js +60 -99
  140. package/dist/screens/network-viewer/device-details-modal.d.ts +1 -2
  141. package/dist/screens/network-viewer/device-details-modal.js +25 -177
  142. package/dist/screens/network-viewer/group-details-modal.d.ts +1 -2
  143. package/dist/screens/network-viewer/group-details-modal.js +31 -142
  144. package/dist/screens/network-viewer/index.d.ts +4 -4
  145. package/dist/screens/network-viewer/index.js +3 -3
  146. package/dist/screens/network-viewer/network-viewer-ipc.d.ts +22 -0
  147. package/dist/screens/network-viewer/network-viewer-ipc.js +6 -0
  148. package/dist/screens/network-viewer/network-viewer.d.ts +1 -2
  149. package/dist/screens/network-viewer/network-viewer.js +91 -296
  150. package/dist/screens/network-viewer/usage-graph.d.ts +1 -2
  151. package/dist/screens/network-viewer/usage-graph.js +78 -110
  152. package/dist/screens/packages/package-details.d.ts +1 -2
  153. package/dist/screens/packages/package-details.js +35 -41
  154. package/dist/screens/packages/package-info.d.ts +2 -2
  155. package/dist/screens/packages/package-info.js +33 -86
  156. package/dist/screens/packages/package-list.d.ts +1 -2
  157. package/dist/screens/packages/package-list.js +42 -106
  158. package/dist/screens/packages/package-new-local.d.ts +1 -2
  159. package/dist/screens/packages/package-new-local.js +13 -19
  160. package/dist/screens/packages/package-versions.d.ts +2 -3
  161. package/dist/screens/packages/package-versions.js +29 -96
  162. package/dist/screens/peer-types/peer-type-details.d.ts +3 -4
  163. package/dist/screens/peer-types/peer-type-details.js +26 -78
  164. package/dist/screens/peer-types/peer-type-list.d.ts +1 -2
  165. package/dist/screens/peer-types/peer-type-list.js +13 -24
  166. package/dist/screens/search/global-search.d.ts +1 -2
  167. package/dist/screens/search/global-search.js +104 -182
  168. package/dist/screens/settings/color-mode-dropdown.d.ts +3 -4
  169. package/dist/screens/settings/color-mode-dropdown.js +18 -37
  170. package/dist/screens/settings/settings-page.d.ts +1 -1
  171. package/dist/screens/settings/settings-page.js +86 -213
  172. package/dist/screens/settings/voice-settings-agent.d.ts +1 -1
  173. package/dist/screens/settings/voice-settings-agent.js +7 -44
  174. package/dist/screens/settings/voice-settings-api-keys.d.ts +2 -2
  175. package/dist/screens/settings/voice-settings-api-keys.js +2 -29
  176. package/dist/screens/settings/voice-settings-output.d.ts +2 -2
  177. package/dist/screens/settings/voice-settings-output.js +2 -40
  178. package/dist/screens/settings/voice-settings-providers.d.ts +2 -2
  179. package/dist/screens/settings/voice-settings-providers.js +2 -19
  180. package/dist/screens/settings/voice-settings-types.d.ts +4 -4
  181. package/dist/screens/settings/voice-settings-types.js +31 -31
  182. package/dist/screens/settings/voice-settings-wake-word.d.ts +2 -2
  183. package/dist/screens/settings/voice-settings-wake-word.js +2 -33
  184. package/dist/screens/settings/voice-settings.d.ts +1 -1
  185. package/dist/screens/settings/voice-settings.js +35 -112
  186. package/dist/screens/setup-user.d.ts +1 -2
  187. package/dist/screens/setup-user.js +38 -116
  188. package/dist/screens/tools/tool-code.d.ts +2 -3
  189. package/dist/screens/tools/tool-code.js +9 -13
  190. package/dist/screens/tools/tool-details.d.ts +1 -2
  191. package/dist/screens/tools/tool-details.js +26 -39
  192. package/dist/screens/tools/tool-info.d.ts +2 -3
  193. package/dist/screens/tools/tool-info.js +9 -48
  194. package/dist/screens/tools/tool-list.d.ts +1 -2
  195. package/dist/screens/tools/tool-list.js +33 -65
  196. package/dist/screens/tools/tool-schema.d.ts +2 -3
  197. package/dist/screens/tools/tool-schema.js +2 -13
  198. package/dist/screens/tools/tool-test-details.d.ts +1 -2
  199. package/dist/screens/tools/tool-test-details.js +12 -28
  200. package/dist/screens/tools/tool-test-list.d.ts +1 -2
  201. package/dist/screens/tools/tool-test-list.js +17 -56
  202. package/dist/screens/variables/variable-details.d.ts +1 -2
  203. package/dist/screens/variables/variable-details.js +19 -86
  204. package/dist/screens/variables/variable-list.d.ts +1 -2
  205. package/dist/screens/variables/variable-list.js +16 -27
  206. package/dist/screens/welcome-modal.d.ts +1 -2
  207. package/dist/screens/welcome-modal.js +44 -111
  208. package/dist/screens/workflows/workflow-details.d.ts +1 -2
  209. package/dist/screens/workflows/workflow-details.js +17 -31
  210. package/dist/screens/workflows/workflow-info.d.ts +2 -3
  211. package/dist/screens/workflows/workflow-info.js +2 -9
  212. package/dist/screens/workflows/workflow-instructions.d.ts +2 -3
  213. package/dist/screens/workflows/workflow-instructions.js +23 -55
  214. package/dist/screens/workflows/workflow-list.d.ts +1 -2
  215. package/dist/screens/workflows/workflow-list.js +23 -62
  216. package/dist/setupTests.d.ts +1 -1
  217. package/dist/setupTests.js +10 -11
  218. package/dist/system-apps/assistants.app.d.ts +1 -1
  219. package/dist/system-apps/assistants.app.js +3 -3
  220. package/dist/system-apps/console-logs.app.d.ts +1 -1
  221. package/dist/system-apps/console-logs.app.js +3 -3
  222. package/dist/system-apps/contacts.app.d.ts +1 -1
  223. package/dist/system-apps/contacts.app.js +4 -4
  224. package/dist/system-apps/data-explorer.app.d.ts +1 -1
  225. package/dist/system-apps/data-explorer.app.js +4 -4
  226. package/dist/system-apps/groups.app.d.ts +1 -1
  227. package/dist/system-apps/groups.app.js +4 -4
  228. package/dist/system-apps/index.d.ts +17 -17
  229. package/dist/system-apps/index.js +52 -52
  230. package/dist/system-apps/join-group.app.d.ts +1 -1
  231. package/dist/system-apps/join-group.app.js +4 -4
  232. package/dist/system-apps/mobile-settings.app.d.ts +1 -1
  233. package/dist/system-apps/mobile-settings.app.js +3 -3
  234. package/dist/system-apps/network-viewer.app.d.ts +1 -1
  235. package/dist/system-apps/network-viewer.app.js +4 -4
  236. package/dist/system-apps/packages.app.d.ts +1 -1
  237. package/dist/system-apps/packages.app.js +3 -3
  238. package/dist/system-apps/search.app.d.ts +1 -1
  239. package/dist/system-apps/search.app.js +4 -4
  240. package/dist/system-apps/settings.app.d.ts +1 -1
  241. package/dist/system-apps/settings.app.js +3 -3
  242. package/dist/system-apps/threads.app.d.ts +1 -1
  243. package/dist/system-apps/threads.app.js +3 -3
  244. package/dist/system-apps/tools.app.d.ts +1 -1
  245. package/dist/system-apps/tools.app.js +3 -3
  246. package/dist/system-apps/types.app.d.ts +1 -1
  247. package/dist/system-apps/types.app.js +3 -3
  248. package/dist/system-apps/variables.app.d.ts +1 -1
  249. package/dist/system-apps/variables.app.js +3 -3
  250. package/dist/system-apps/workflows.app.d.ts +1 -1
  251. package/dist/system-apps/workflows.app.js +3 -3
  252. package/dist/tabs-layout/tabs-layout.d.ts +2 -3
  253. package/dist/tabs-layout/tabs-layout.js +215 -246
  254. package/dist/tabs-layout/tabs-state.d.ts +2 -2
  255. package/dist/tabs-layout/tabs-state.js +73 -61
  256. package/dist/ui-defaults/index.d.ts +2 -2
  257. package/dist/ui-defaults/list-screen.d.ts +2 -3
  258. package/dist/ui-defaults/list-screen.js +33 -37
  259. package/dist/ui-defaults/markdown-field.js +24 -56
  260. package/dist/ui-router/routes-loader.d.ts +1 -1
  261. package/dist/ui-router/routes-loader.js +17 -13
  262. package/dist/ui-router/ui-loader.d.ts +6 -6
  263. package/dist/ui-router/ui-loader.js +172 -268
  264. package/dist/utils.js +49 -39
  265. package/jest.config.js +16 -16
  266. package/package.json +16 -14
  267. package/src/command-palette/command-palette-ui.tsx +261 -237
  268. package/src/command-palette/command-palette.ts +81 -78
  269. package/src/components/chat-overlay.tsx +366 -261
  270. package/src/components/checkbox.tsx +15 -12
  271. package/src/components/group-switcher.tsx +150 -105
  272. package/src/components/input-date.tsx +17 -16
  273. package/src/components/input-number.tsx +47 -31
  274. package/src/components/input.tsx +15 -12
  275. package/src/components/inverse-lazy-list.tsx +14 -13
  276. package/src/components/io-schema-values.tsx +51 -69
  277. package/src/components/io-schema.tsx +94 -69
  278. package/src/components/lazy-list.tsx +51 -34
  279. package/src/components/list-screen.tsx +51 -35
  280. package/src/components/loading-indicator.tsx +2 -4
  281. package/src/components/markdown-editor/autolink-plugin.tsx +4 -11
  282. package/src/components/markdown-editor/editor-inline.tsx +3 -4
  283. package/src/components/markdown-editor/editor.tsx +53 -51
  284. package/src/components/markdown-editor/markdown-plugin.tsx +48 -40
  285. package/src/components/markdown-editor/mention-node.ts +39 -38
  286. package/src/components/markdown-editor/mentions-plugin.tsx +99 -101
  287. package/src/components/markdown-editor/theme.ts +28 -29
  288. package/src/components/markdown-editor/toolbar.tsx +53 -47
  289. package/src/components/markdown-with-mentions.tsx +56 -46
  290. package/src/components/message-logs/message-logs.tsx +225 -165
  291. package/src/components/messages/avatar.tsx +70 -52
  292. package/src/components/messages/channel-message-list.tsx +80 -68
  293. package/src/components/messages/channel-view.tsx +34 -33
  294. package/src/components/messages/message-compose.tsx +84 -67
  295. package/src/components/messages/message-display.tsx +103 -89
  296. package/src/components/messages/thread-message-list.tsx +53 -44
  297. package/src/components/router.tsx +42 -43
  298. package/src/components/save-button.tsx +43 -39
  299. package/src/components/sortable-list.tsx +77 -49
  300. package/src/components/tabs.tsx +31 -31
  301. package/src/components/tooltip.tsx +21 -28
  302. package/src/components/trust-level-badge.tsx +15 -11
  303. package/src/components/trust-level-dropdown.tsx +49 -19
  304. package/src/components/typeahead.tsx +57 -59
  305. package/src/components/voice-indicator.tsx +158 -141
  306. package/src/components/voice-subscribe-events.ts +20 -0
  307. package/src/globals.tsx +42 -40
  308. package/src/hooks.test.tsx +141 -134
  309. package/src/hooks.ts +80 -48
  310. package/src/index.tsx +17 -10
  311. package/src/mention-configs.ts +122 -68
  312. package/src/screens/assistants/assistant-config.tsx +28 -18
  313. package/src/screens/assistants/assistant-details.tsx +35 -36
  314. package/src/screens/assistants/assistant-info.tsx +16 -11
  315. package/src/screens/assistants/assistant-list.tsx +37 -34
  316. package/src/screens/assistants/assistant-tools.tsx +41 -20
  317. package/src/screens/console-logs/console-logs-list.tsx +173 -140
  318. package/src/screens/console-logs/log-display.tsx +65 -38
  319. package/src/screens/console-logs/log-filters.tsx +4 -3
  320. package/src/screens/console-logs/mobile-log-card.tsx +78 -71
  321. package/src/screens/console-logs/resizable-table-header.tsx +29 -21
  322. package/src/screens/contacts/contact-details.tsx +29 -30
  323. package/src/screens/contacts/contact-list.tsx +71 -60
  324. package/src/screens/contacts/index.ts +5 -5
  325. package/src/screens/contacts/user-connect.tsx +177 -171
  326. package/src/screens/data-explorer/data-explorer.tsx +134 -98
  327. package/src/screens/data-explorer/index.ts +2 -3
  328. package/src/screens/data-explorer/query-executor.tsx +90 -80
  329. package/src/screens/groups/group-details.tsx +120 -101
  330. package/src/screens/groups/group-invite-listener.tsx +34 -37
  331. package/src/screens/groups/group-list.tsx +119 -103
  332. package/src/screens/groups/group-members.tsx +225 -164
  333. package/src/screens/groups/index.ts +5 -6
  334. package/src/screens/join-group/index.ts +2 -2
  335. package/src/screens/join-group/join-group.tsx +41 -39
  336. package/src/screens/network-viewer/connection-troubleshooter.tsx +145 -104
  337. package/src/screens/network-viewer/cpu-usage-graph.tsx +39 -43
  338. package/src/screens/network-viewer/device-details-modal.tsx +46 -59
  339. package/src/screens/network-viewer/group-details-modal.tsx +68 -49
  340. package/src/screens/network-viewer/index.ts +4 -5
  341. package/src/screens/network-viewer/network-viewer-ipc.ts +23 -0
  342. package/src/screens/network-viewer/network-viewer.tsx +261 -236
  343. package/src/screens/network-viewer/usage-graph.tsx +57 -49
  344. package/src/screens/packages/package-details.tsx +43 -35
  345. package/src/screens/packages/package-info.tsx +107 -66
  346. package/src/screens/packages/package-list.tsx +175 -98
  347. package/src/screens/packages/package-new-local.tsx +28 -26
  348. package/src/screens/packages/package-versions.tsx +102 -77
  349. package/src/screens/peer-types/peer-type-details.tsx +60 -50
  350. package/src/screens/peer-types/peer-type-list.tsx +20 -30
  351. package/src/screens/search/global-search.tsx +153 -137
  352. package/src/screens/settings/color-mode-dropdown.tsx +52 -35
  353. package/src/screens/settings/settings-page.tsx +215 -141
  354. package/src/screens/settings/voice-settings-agent.tsx +13 -12
  355. package/src/screens/settings/voice-settings-api-keys.tsx +14 -12
  356. package/src/screens/settings/voice-settings-output.tsx +12 -11
  357. package/src/screens/settings/voice-settings-providers.tsx +7 -3
  358. package/src/screens/settings/voice-settings-types.ts +52 -49
  359. package/src/screens/settings/voice-settings-wake-word.tsx +25 -9
  360. package/src/screens/settings/voice-settings.tsx +66 -43
  361. package/src/screens/setup-user.tsx +88 -41
  362. package/src/screens/tools/tool-code.tsx +12 -17
  363. package/src/screens/tools/tool-details.tsx +28 -28
  364. package/src/screens/tools/tool-info.tsx +14 -19
  365. package/src/screens/tools/tool-list.tsx +58 -40
  366. package/src/screens/tools/tool-schema.tsx +16 -9
  367. package/src/screens/tools/tool-test-details.tsx +11 -22
  368. package/src/screens/tools/tool-test-list.tsx +29 -30
  369. package/src/screens/variables/variable-details.tsx +63 -51
  370. package/src/screens/variables/variable-list.tsx +29 -30
  371. package/src/screens/welcome-modal.tsx +68 -48
  372. package/src/screens/workflows/workflow-details.tsx +40 -30
  373. package/src/screens/workflows/workflow-info.tsx +4 -11
  374. package/src/screens/workflows/workflow-instructions.tsx +35 -28
  375. package/src/screens/workflows/workflow-list.tsx +50 -40
  376. package/src/setupTests.ts +14 -13
  377. package/src/system-apps/assistants.app.ts +5 -5
  378. package/src/system-apps/console-logs.app.ts +4 -4
  379. package/src/system-apps/contacts.app.ts +6 -6
  380. package/src/system-apps/data-explorer.app.ts +5 -5
  381. package/src/system-apps/groups.app.ts +6 -6
  382. package/src/system-apps/index.ts +49 -49
  383. package/src/system-apps/join-group.app.ts +5 -5
  384. package/src/system-apps/mobile-settings.app.ts +4 -5
  385. package/src/system-apps/network-viewer.app.ts +5 -5
  386. package/src/system-apps/packages.app.ts +5 -5
  387. package/src/system-apps/search.app.ts +6 -6
  388. package/src/system-apps/settings.app.ts +5 -5
  389. package/src/system-apps/threads.app.ts +5 -5
  390. package/src/system-apps/tools.app.ts +5 -5
  391. package/src/system-apps/types.app.ts +5 -5
  392. package/src/system-apps/variables.app.ts +5 -5
  393. package/src/system-apps/workflows.app.ts +5 -5
  394. package/src/tabs-layout/tabs-layout.tsx +345 -254
  395. package/src/tabs-layout/tabs-state.ts +100 -81
  396. package/src/ui-defaults/index.ts +2 -3
  397. package/src/ui-defaults/list-screen.tsx +45 -40
  398. package/src/ui-defaults/markdown-field.tsx +22 -26
  399. package/src/ui-router/routes-loader.ts +40 -24
  400. package/src/ui-router/ui-loader.tsx +312 -214
  401. package/src/utils.ts +68 -81
  402. package/tsconfig.json +5 -10
  403. package/dist/components/input-datetime.d.ts +0 -7
  404. package/dist/components/input-datetime.js +0 -35
  405. package/dist/components/lazy-sortable-list.d.ts +0 -29
  406. package/dist/components/lazy-sortable-list.js +0 -12
  407. package/dist/components/left-bar.d.ts +0 -5
  408. package/dist/components/left-bar.js +0 -207
  409. package/dist/components/main-content-container.d.ts +0 -2
  410. package/dist/components/main-content-container.js +0 -92
  411. package/dist/components/messages/thread-view.d.ts +0 -6
  412. package/dist/components/messages/thread-view.js +0 -174
  413. package/dist/components/off-canvas.d.ts +0 -13
  414. package/dist/components/off-canvas.js +0 -89
  415. package/dist/components/text-list-editor.tsx/text-list-editor.d.ts +0 -6
  416. package/dist/components/text-list-editor.tsx/text-list-editor.js +0 -13
  417. package/dist/components/top-bar.d.ts +0 -2
  418. package/dist/components/top-bar.js +0 -51
  419. package/dist/components/typeahead/mentions-plugin.d.ts +0 -7
  420. package/dist/components/typeahead/mentions-plugin.js +0 -203
  421. package/dist/components/typeahead/typeahead-editor.d.ts +0 -15
  422. package/dist/components/typeahead/typeahead-editor.js +0 -134
  423. package/dist/components/typeahead/typeahead.d.ts +0 -12
  424. package/dist/components/typeahead/typeahead.js +0 -94
  425. package/dist/screens/profile.d.ts +0 -2
  426. package/dist/screens/profile.js +0 -76
  427. package/src/components/input-datetime.tsx +0 -41
  428. package/src/components/lazy-sortable-list.tsx +0 -51
  429. package/src/components/left-bar.tsx +0 -322
  430. package/src/components/main-content-container.tsx +0 -79
  431. package/src/components/messages/thread-view.tsx +0 -214
  432. package/src/components/off-canvas.tsx +0 -83
  433. package/src/components/text-list-editor.tsx/text-list-editor.tsx +0 -13
  434. package/src/components/top-bar.tsx +0 -119
  435. package/src/components/typeahead/mentions-plugin.tsx +0 -265
  436. package/src/components/typeahead/typeahead-editor.tsx +0 -140
  437. package/src/components/typeahead/typeahead.tsx +0 -77
  438. package/src/screens/profile.tsx +0 -75
@@ -1,56 +1,29 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.QueryExecutor = QueryExecutor;
37
- const react_1 = __importStar(require("react"));
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const peers_sdk_1 = require("@peers-app/peers-sdk");
6
+ const react_1 = require("react");
38
7
  const loading_indicator_1 = require("../../components/loading-indicator");
39
- const ui_loader_1 = require("../../ui-router/ui-loader");
40
8
  const globals_1 = require("../../globals");
41
- const peers_sdk_1 = require("@peers-app/peers-sdk");
42
9
  const hooks_1 = require("../../hooks");
43
- const defaultQuery = 'SELECT * FROM sqlite_master WHERE type=\'table\' LIMIT 10';
10
+ const ui_loader_1 = require("../../ui-router/ui-loader");
11
+ function getDataExplorerQueryApi() {
12
+ return window.electronAPI?.dataExplorer;
13
+ }
14
+ const defaultQuery = "SELECT * FROM sqlite_master WHERE type='table' LIMIT 10";
44
15
  // Persistent vars at module level
45
- const queryTabs = (0, peers_sdk_1.groupDeviceVar)('dataExplorerQueryTabs', {
46
- defaultValue: [{
16
+ const queryTabs = (0, peers_sdk_1.groupDeviceVar)("dataExplorerQueryTabs", {
17
+ defaultValue: [
18
+ {
47
19
  id: (0, peers_sdk_1.newid)(),
48
- name: 'Query 1',
49
- query: defaultQuery
50
- }]
20
+ name: "Query 1",
21
+ query: defaultQuery,
22
+ },
23
+ ],
51
24
  });
52
- const activeQueryTabId = (0, peers_sdk_1.groupDeviceVar)('dataExplorerActiveQueryTab', {
53
- defaultValue: ''
25
+ const activeQueryTabId = (0, peers_sdk_1.groupDeviceVar)("dataExplorerActiveQueryTab", {
26
+ defaultValue: "",
54
27
  });
55
28
  function QueryExecutor() {
56
29
  (0, hooks_1.useObservable)(queryTabs);
@@ -60,25 +33,25 @@ function QueryExecutor() {
60
33
  const [loading, setLoading] = (0, react_1.useState)({});
61
34
  const [writeEnabled, setWriteEnabled] = (0, react_1.useState)(false);
62
35
  // Local state for query input to avoid locking up on fast typing
63
- const [localQuery, setLocalQuery] = (0, react_1.useState)('');
36
+ const [localQuery, setLocalQuery] = (0, react_1.useState)("");
64
37
  const debounceTimeoutRef = (0, react_1.useRef)();
65
- const lastSavedQueryRef = (0, react_1.useRef)('');
38
+ const lastSavedQueryRef = (0, react_1.useRef)("");
66
39
  const tabs = queryTabs();
67
40
  const activeTabId = activeQueryTabId();
68
- const activeTab = tabs.find(t => t.id === activeTabId);
41
+ const activeTab = tabs.find((t) => t.id === activeTabId);
69
42
  // Sync local query with persisted query when tab changes
70
43
  (0, react_1.useEffect)(() => {
71
- const persistedQuery = activeTab?.query || '';
44
+ const persistedQuery = activeTab?.query || "";
72
45
  setLocalQuery(persistedQuery);
73
46
  lastSavedQueryRef.current = persistedQuery;
74
- }, [activeTabId, activeTab?.id]);
47
+ }, [activeTab?.query]);
75
48
  // Subscribe to tab changes
76
49
  (0, react_1.useEffect)(() => {
77
50
  // Initialize activeTabId if not set
78
51
  if (!activeQueryTabId() && queryTabs().length > 0) {
79
52
  activeQueryTabId(queryTabs()[0].id);
80
53
  }
81
- }, [queryTabs()]);
54
+ }, []);
82
55
  const query = localQuery;
83
56
  const result = activeTab ? results[activeTab.id] : null;
84
57
  const error = activeTab ? errors[activeTab.id] : null;
@@ -90,7 +63,7 @@ function QueryExecutor() {
90
63
  if (newQuery === lastSavedQueryRef.current)
91
64
  return; // Skip if unchanged
92
65
  const currentTabs = queryTabs();
93
- queryTabs(currentTabs.map(t => t.id === activeTab.id ? { ...t, query: newQuery } : t));
66
+ queryTabs(currentTabs.map((t) => (t.id === activeTab.id ? { ...t, query: newQuery } : t)));
94
67
  lastSavedQueryRef.current = newQuery;
95
68
  };
96
69
  const setQuery = (newQuery) => {
@@ -124,7 +97,7 @@ function QueryExecutor() {
124
97
  const setResult = (result) => {
125
98
  if (!activeTab)
126
99
  return;
127
- setResults(prev => {
100
+ setResults((prev) => {
128
101
  const newResults = { ...prev };
129
102
  if (result === null) {
130
103
  delete newResults[activeTab.id];
@@ -138,7 +111,7 @@ function QueryExecutor() {
138
111
  const setError = (error) => {
139
112
  if (!activeTab)
140
113
  return;
141
- setErrors(prev => {
114
+ setErrors((prev) => {
142
115
  const newErrors = { ...prev };
143
116
  if (error === null) {
144
117
  delete newErrors[activeTab.id];
@@ -152,11 +125,11 @@ function QueryExecutor() {
152
125
  const setLoadingState = (isLoading) => {
153
126
  if (!activeTab)
154
127
  return;
155
- setLoading(prev => ({ ...prev, [activeTab.id]: isLoading }));
128
+ setLoading((prev) => ({ ...prev, [activeTab.id]: isLoading }));
156
129
  };
157
130
  const executeQuery = async () => {
158
131
  if (!query.trim()) {
159
- setError('Please enter a query');
132
+ setError("Please enter a query");
160
133
  return;
161
134
  }
162
135
  // Save the current query immediately before execution (in case debounce hasn't fired yet)
@@ -169,16 +142,16 @@ function QueryExecutor() {
169
142
  setLoadingState(true);
170
143
  setError(null);
171
144
  setResult(null);
172
- const api = window.electronAPI?.dataExplorer;
145
+ const api = getDataExplorerQueryApi();
173
146
  if (!api) {
174
- setError('Data Explorer API not available');
147
+ setError("Data Explorer API not available");
175
148
  return;
176
149
  }
177
150
  const queryResult = await api.executeQuery(query, writeEnabled);
178
151
  setResult(queryResult);
179
152
  }
180
153
  catch (err) {
181
- setError(err.message || 'Query execution failed');
154
+ setError(err instanceof Error ? err.message : "Query execution failed");
182
155
  }
183
156
  finally {
184
157
  setLoadingState(false);
@@ -189,7 +162,7 @@ function QueryExecutor() {
189
162
  const newTab = {
190
163
  id: (0, peers_sdk_1.newid)(),
191
164
  name: `Query ${currentTabs.length + 1}`,
192
- query: defaultQuery
165
+ query: defaultQuery,
193
166
  };
194
167
  queryTabs([...currentTabs, newTab]);
195
168
  activeQueryTabId(newTab.id);
@@ -198,8 +171,8 @@ function QueryExecutor() {
198
171
  const currentTabs = queryTabs();
199
172
  if (currentTabs.length === 1)
200
173
  return; // Don't close the last tab
201
- const tabIndex = currentTabs.findIndex(t => t.id === tabId);
202
- const newTabs = currentTabs.filter(t => t.id !== tabId);
174
+ const tabIndex = currentTabs.findIndex((t) => t.id === tabId);
175
+ const newTabs = currentTabs.filter((t) => t.id !== tabId);
203
176
  queryTabs(newTabs);
204
177
  // If we're closing the active tab, switch to another one
205
178
  if (tabId === activeQueryTabId()) {
@@ -207,133 +180,50 @@ function QueryExecutor() {
207
180
  activeQueryTabId(newTabs[newIndex].id);
208
181
  }
209
182
  // Clean up results and errors for closed tab
210
- setResults(prev => {
183
+ setResults((prev) => {
211
184
  const newResults = { ...prev };
212
185
  delete newResults[tabId];
213
186
  return newResults;
214
187
  });
215
- setErrors(prev => {
188
+ setErrors((prev) => {
216
189
  const newErrors = { ...prev };
217
190
  delete newErrors[tabId];
218
191
  return newErrors;
219
192
  });
220
193
  };
221
- const renameTab = (tabId, newName) => {
194
+ const _renameTab = (tabId, newName) => {
222
195
  const currentTabs = queryTabs();
223
- queryTabs(currentTabs.map(t => t.id === tabId ? { ...t, name: newName } : t));
196
+ queryTabs(currentTabs.map((t) => (t.id === tabId ? { ...t, name: newName } : t)));
224
197
  };
225
198
  const handleKeyDown = (e) => {
226
199
  // Execute on Cmd/Ctrl + Enter
227
- if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {
200
+ if ((e.metaKey || e.ctrlKey) && e.key === "Enter") {
228
201
  e.preventDefault();
229
202
  executeQuery();
230
203
  }
231
204
  };
232
205
  if (!(0, globals_1.isDesktop)()) {
233
- return (react_1.default.createElement("div", { className: "container-fluid p-4" },
234
- react_1.default.createElement("div", { className: "alert alert-info" }, "Query Executor is only available in the desktop application.")));
206
+ return ((0, jsx_runtime_1.jsx)("div", { className: "container-fluid p-4", children: (0, jsx_runtime_1.jsx)("div", { className: "alert alert-info", children: "Query Executor is only available in the desktop application." }) }));
235
207
  }
236
- return (react_1.default.createElement("div", { className: "container-fluid p-4" },
237
- react_1.default.createElement("ul", { className: "nav nav-tabs mb-4" },
238
- react_1.default.createElement("li", { className: "nav-item" },
239
- react_1.default.createElement("a", { className: "nav-link", href: "#/data-explorer" },
240
- react_1.default.createElement("i", { className: "bi bi-table" }),
241
- " Tables")),
242
- react_1.default.createElement("li", { className: "nav-item" },
243
- react_1.default.createElement("a", { className: "nav-link active", href: "#/data-explorer/query" },
244
- react_1.default.createElement("i", { className: "bi bi-terminal" }),
245
- " Query"))),
246
- react_1.default.createElement("h2", { className: "mb-3" }, "SQL Query Executor"),
247
- react_1.default.createElement("div", { className: "mb-3" },
248
- react_1.default.createElement("ul", { className: "nav nav-tabs" },
249
- tabs.map((tab) => (react_1.default.createElement("li", { key: tab.id, className: "nav-item" },
250
- react_1.default.createElement("div", { className: `nav-link ${tab.id === activeTabId ? 'active' : ''}`, style: { cursor: 'pointer', display: 'flex', alignItems: 'center', gap: '8px' } },
251
- react_1.default.createElement("span", { onClick: () => activeQueryTabId(tab.id), style: { flex: 1 } }, tab.name),
252
- tabs.length > 1 && (react_1.default.createElement("button", { className: "btn btn-sm p-0", onClick: (e) => {
253
- e.stopPropagation();
254
- closeTab(tab.id);
255
- }, style: {
256
- border: 'none',
257
- background: 'none',
258
- fontSize: '1.2em',
259
- lineHeight: 1,
260
- opacity: 0.6
261
- }, title: "Close tab" }, "\u00D7")))))),
262
- react_1.default.createElement("li", { className: "nav-item" },
263
- react_1.default.createElement("button", { className: "nav-link", onClick: addNewTab, style: { border: 'none', background: 'none' }, title: "New query tab" },
264
- react_1.default.createElement("i", { className: "bi bi-plus-lg" }))))),
265
- react_1.default.createElement("div", { className: "card mb-4" },
266
- react_1.default.createElement("div", { className: "card-body" },
267
- react_1.default.createElement("div", { className: "d-flex justify-content-between align-items-center" },
268
- react_1.default.createElement("label", { htmlFor: "query-input", className: "form-label mb-0" },
269
- react_1.default.createElement("strong", null, "SQL Query")),
270
- react_1.default.createElement("div", { className: "form-check form-switch" },
271
- react_1.default.createElement("input", { className: "form-check-input", type: "checkbox", id: "enable-writes", checked: writeEnabled, onChange: (e) => setWriteEnabled(e.target.checked) }),
272
- react_1.default.createElement("label", { className: "form-check-label small", htmlFor: "enable-writes" }, "Enable Writes"))),
273
- react_1.default.createElement("textarea", { id: "query-input", className: "form-control font-monospace", rows: 6, value: query, onChange: (e) => setQuery(e.target.value), onBlur: handleBlur, onKeyDown: handleKeyDown, placeholder: "Enter your SQL query here..." }),
274
- react_1.default.createElement("div", { className: "mt-3 d-flex justify-content-between align-items-center" },
275
- react_1.default.createElement("button", { className: "btn btn-primary", onClick: executeQuery, disabled: isLoading || !query.trim() }, isLoading ? (react_1.default.createElement(react_1.default.Fragment, null,
276
- react_1.default.createElement("span", { className: "spinner-border spinner-border-sm me-2", role: "status", "aria-hidden": "true" }),
277
- "Executing...")) : (react_1.default.createElement(react_1.default.Fragment, null,
278
- react_1.default.createElement("i", { className: "bi bi-play-fill" }),
279
- " Execute Query"))),
280
- react_1.default.createElement("small", { className: "text-muted" },
281
- react_1.default.createElement("i", { className: "bi bi-info-circle" }),
282
- " Press Cmd/Ctrl + Enter to execute")))),
283
- error && (react_1.default.createElement("div", { className: "alert alert-danger", role: "alert" },
284
- react_1.default.createElement("i", { className: "bi bi-exclamation-triangle-fill me-2" }),
285
- react_1.default.createElement("strong", null, "Error:"),
286
- " ",
287
- error)),
288
- isLoading && (react_1.default.createElement("div", { className: "text-center py-5" },
289
- react_1.default.createElement(loading_indicator_1.LoadingIndicator, null))),
290
- result && !isLoading && (react_1.default.createElement("div", { className: "card" },
291
- react_1.default.createElement("div", { className: "card-body" },
292
- react_1.default.createElement("div", { className: "d-flex justify-content-between align-items-center mb-3" },
293
- react_1.default.createElement("h5", { className: "card-title mb-0" },
294
- result.isWriteOperation ? 'Write Result' : 'Query Results',
295
- result.isWriteOperation ? (react_1.default.createElement("span", { className: "badge bg-success ms-2" },
296
- result.changesCount,
297
- " row",
298
- result.changesCount !== 1 ? 's' : '',
299
- " affected")) : (react_1.default.createElement("span", { className: "badge bg-primary ms-2" },
300
- result.rowCount,
301
- " rows"))),
302
- react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary", onClick: () => setResult(null) },
303
- react_1.default.createElement("i", { className: "bi bi-x" }),
304
- " Clear")),
305
- result.isWriteOperation ? (react_1.default.createElement("div", { className: "alert alert-success mb-0" },
306
- react_1.default.createElement("i", { className: "bi bi-check-circle-fill me-2" }),
307
- "Query executed successfully. ",
308
- result.changesCount,
309
- " row",
310
- result.changesCount !== 1 ? 's' : '',
311
- " affected.")) : result.rowCount === 0 ? (react_1.default.createElement("div", { className: "alert alert-info mb-0" }, "Query executed successfully but returned no rows.")) : (react_1.default.createElement("div", { className: "table-responsive" },
312
- react_1.default.createElement("table", { className: "table table-sm table-hover table-bordered" },
313
- react_1.default.createElement("thead", { className: "table-light" },
314
- react_1.default.createElement("tr", null, result.columns.map((col, idx) => (react_1.default.createElement("th", { key: idx, className: "font-monospace small" }, col))))),
315
- react_1.default.createElement("tbody", null, result.rows.map((row, rowIdx) => (react_1.default.createElement("tr", { key: rowIdx }, row.map((cell, cellIdx) => (react_1.default.createElement("td", { key: cellIdx, className: "font-monospace small" }, cell === null ? (react_1.default.createElement("span", { className: "text-muted fst-italic" }, "null")) : typeof cell === 'object' ? (react_1.default.createElement("pre", { className: "mb-0", style: { fontSize: '0.7rem' } }, JSON.stringify(cell, null, 2))) : (String(cell))))))))))))))),
316
- !result && !isLoading && !error && (react_1.default.createElement("div", { className: "card" },
317
- react_1.default.createElement("div", { className: "card-body" },
318
- react_1.default.createElement("h5", { className: "card-title" }, "Example Queries"),
319
- react_1.default.createElement("ul", { className: "list-unstyled mb-0" },
320
- react_1.default.createElement("li", { className: "mb-2" },
321
- react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery('SELECT * FROM sqlite_master WHERE type=\'table\'') }, "List all tables")),
322
- react_1.default.createElement("li", { className: "mb-2" },
323
- react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery('PRAGMA table_info(Users)') }, "Show Users table schema")),
324
- react_1.default.createElement("li", { className: "mb-2" },
325
- react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery('SELECT name, sql FROM sqlite_master WHERE type=\'index\'') }, "List all indexes")),
326
- react_1.default.createElement("li", { className: "mb-2" },
327
- react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery('PRAGMA database_list') }, "Show attached databases"))))))));
208
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "container-fluid p-4", children: [(0, jsx_runtime_1.jsxs)("ul", { className: "nav nav-tabs mb-4", children: [(0, jsx_runtime_1.jsx)("li", { className: "nav-item", children: (0, jsx_runtime_1.jsxs)("a", { className: "nav-link", href: "#/data-explorer", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-table" }), " Tables"] }) }), (0, jsx_runtime_1.jsx)("li", { className: "nav-item", children: (0, jsx_runtime_1.jsxs)("a", { className: "nav-link active", href: "#/data-explorer/query", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-terminal" }), " Query"] }) })] }), (0, jsx_runtime_1.jsx)("h2", { className: "mb-3", children: "SQL Query Executor" }), (0, jsx_runtime_1.jsx)("div", { className: "mb-3", children: (0, jsx_runtime_1.jsxs)("ul", { className: "nav nav-tabs", children: [tabs.map((tab) => ((0, jsx_runtime_1.jsx)("li", { className: "nav-item", children: (0, jsx_runtime_1.jsxs)("div", { className: `nav-link ${tab.id === activeTabId ? "active" : ""}`, style: { cursor: "pointer", display: "flex", alignItems: "center", gap: "8px" }, children: [(0, jsx_runtime_1.jsx)("span", { onClick: () => activeQueryTabId(tab.id), style: { flex: 1 }, children: tab.name }), tabs.length > 1 && ((0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm p-0", onClick: (e) => {
209
+ e.stopPropagation();
210
+ closeTab(tab.id);
211
+ }, style: {
212
+ border: "none",
213
+ background: "none",
214
+ fontSize: "1.2em",
215
+ lineHeight: 1,
216
+ opacity: 0.6,
217
+ }, title: "Close tab", children: "\u00D7" }))] }) }, tab.id))), (0, jsx_runtime_1.jsx)("li", { className: "nav-item", children: (0, jsx_runtime_1.jsx)("button", { className: "nav-link", onClick: addNewTab, style: { border: "none", background: "none" }, title: "New query tab", children: (0, jsx_runtime_1.jsx)("i", { className: "bi bi-plus-lg" }) }) })] }) }), (0, jsx_runtime_1.jsx)("div", { className: "card mb-4", children: (0, jsx_runtime_1.jsxs)("div", { className: "card-body", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between align-items-center", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "query-input", className: "form-label mb-0", children: (0, jsx_runtime_1.jsx)("strong", { children: "SQL Query" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "form-check form-switch", children: [(0, jsx_runtime_1.jsx)("input", { className: "form-check-input", type: "checkbox", id: "enable-writes", checked: writeEnabled, onChange: (e) => setWriteEnabled(e.target.checked) }), (0, jsx_runtime_1.jsx)("label", { className: "form-check-label small", htmlFor: "enable-writes", children: "Enable Writes" })] })] }), (0, jsx_runtime_1.jsx)("textarea", { id: "query-input", className: "form-control font-monospace", rows: 6, value: query, onChange: (e) => setQuery(e.target.value), onBlur: handleBlur, onKeyDown: handleKeyDown, placeholder: "Enter your SQL query here..." }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-3 d-flex justify-content-between align-items-center", children: [(0, jsx_runtime_1.jsx)("button", { className: "btn btn-primary", onClick: executeQuery, disabled: isLoading || !query.trim(), children: isLoading ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "spinner-border spinner-border-sm me-2", role: "status", "aria-hidden": "true" }), "Executing..."] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-play-fill" }), " Execute Query"] })) }), (0, jsx_runtime_1.jsxs)("small", { className: "text-muted", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-info-circle" }), " Press Cmd/Ctrl + Enter to execute"] })] })] }) }), error && ((0, jsx_runtime_1.jsxs)("div", { className: "alert alert-danger", role: "alert", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-exclamation-triangle-fill me-2" }), (0, jsx_runtime_1.jsx)("strong", { children: "Error:" }), " ", error] })), isLoading && ((0, jsx_runtime_1.jsx)("div", { className: "text-center py-5", children: (0, jsx_runtime_1.jsx)(loading_indicator_1.LoadingIndicator, {}) })), result && !isLoading && ((0, jsx_runtime_1.jsx)("div", { className: "card", children: (0, jsx_runtime_1.jsxs)("div", { className: "card-body", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between align-items-center mb-3", children: [(0, jsx_runtime_1.jsxs)("h5", { className: "card-title mb-0", children: [result.isWriteOperation ? "Write Result" : "Query Results", result.isWriteOperation ? ((0, jsx_runtime_1.jsxs)("span", { className: "badge bg-success ms-2", children: [result.changesCount, " row", result.changesCount !== 1 ? "s" : "", " affected"] })) : ((0, jsx_runtime_1.jsxs)("span", { className: "badge bg-primary ms-2", children: [result.rowCount, " rows"] }))] }), (0, jsx_runtime_1.jsxs)("button", { className: "btn btn-sm btn-outline-secondary", onClick: () => setResult(null), children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-x" }), " Clear"] })] }), result.isWriteOperation ? ((0, jsx_runtime_1.jsxs)("div", { className: "alert alert-success mb-0", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-check-circle-fill me-2" }), "Query executed successfully. ", result.changesCount, " row", result.changesCount !== 1 ? "s" : "", " affected."] })) : result.rowCount === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "alert alert-info mb-0", children: "Query executed successfully but returned no rows." })) : ((0, jsx_runtime_1.jsx)("div", { className: "table-responsive", children: (0, jsx_runtime_1.jsxs)("table", { className: "table table-sm table-hover table-bordered", children: [(0, jsx_runtime_1.jsx)("thead", { className: "table-light", children: (0, jsx_runtime_1.jsx)("tr", { children: result.columns.map((col, idx) => ((0, jsx_runtime_1.jsx)("th", { className: "font-monospace small", children: col }, idx))) }) }), (0, jsx_runtime_1.jsx)("tbody", { children: result.rows.map((row, rowIdx) => ((0, jsx_runtime_1.jsx)("tr", { children: row.map((cell, cellIdx) => ((0, jsx_runtime_1.jsx)("td", { className: "font-monospace small", children: cell === null ? ((0, jsx_runtime_1.jsx)("span", { className: "text-muted fst-italic", children: "null" })) : typeof cell === "object" ? ((0, jsx_runtime_1.jsx)("pre", { className: "mb-0", style: { fontSize: "0.7rem" }, children: JSON.stringify(cell, null, 2) })) : (String(cell)) }, cellIdx))) }, rowIdx))) })] }) }))] }) })), !result && !isLoading && !error && ((0, jsx_runtime_1.jsx)("div", { className: "card", children: (0, jsx_runtime_1.jsxs)("div", { className: "card-body", children: [(0, jsx_runtime_1.jsx)("h5", { className: "card-title", children: "Example Queries" }), (0, jsx_runtime_1.jsxs)("ul", { className: "list-unstyled mb-0", children: [(0, jsx_runtime_1.jsx)("li", { className: "mb-2", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery("SELECT * FROM sqlite_master WHERE type='table'"), children: "List all tables" }) }), (0, jsx_runtime_1.jsx)("li", { className: "mb-2", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery("PRAGMA table_info(Users)"), children: "Show Users table schema" }) }), (0, jsx_runtime_1.jsx)("li", { className: "mb-2", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery("SELECT name, sql FROM sqlite_master WHERE type='index'"), children: "List all indexes" }) }), (0, jsx_runtime_1.jsx)("li", { className: "mb-2", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery("PRAGMA database_list"), children: "Show attached databases" }) })] })] }) }))] }));
328
218
  }
329
219
  (0, ui_loader_1.registerInternalPeersUI)({
330
- peersUIId: 'data-explorer-query-ui',
220
+ peersUIId: "data-explorer-query-ui",
331
221
  component: QueryExecutor,
332
222
  routes: [
333
223
  {
334
- isMatch: (_props, context) => context.path === 'data-explorer/query',
335
- uiCategory: 'screen',
336
- priority: 2
337
- }
338
- ]
224
+ isMatch: (_props, context) => context.path === "data-explorer/query",
225
+ uiCategory: "screen",
226
+ priority: 2,
227
+ },
228
+ ],
339
229
  });
@@ -1,6 +1,5 @@
1
- import React from "react";
2
1
  interface IProps {
3
2
  groupId: string;
4
3
  }
5
- export declare const GroupDetails: (props: IProps) => React.JSX.Element;
4
+ export declare const GroupDetails: (props: IProps) => import("react/jsx-runtime").JSX.Element;
6
5
  export {};
@@ -1,41 +1,9 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.GroupDetails = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
37
5
  const peers_sdk_1 = require("@peers-app/peers-sdk");
38
- const react_1 = __importStar(require("react"));
6
+ const react_1 = require("react");
39
7
  const checkbox_1 = require("../../components/checkbox");
40
8
  const input_1 = require("../../components/input");
41
9
  const loading_indicator_1 = require("../../components/loading-indicator");
@@ -52,7 +20,7 @@ const GroupDetails = (props) => {
52
20
  const userGroupTable = (0, peers_sdk_1.Groups)(userContext.userDataContext);
53
21
  const group = await userGroupTable.get(props.groupId);
54
22
  if (!group) {
55
- throw new Error('Group not found');
23
+ throw new Error("Group not found");
56
24
  }
57
25
  (0, tabs_state_1.updateActiveTabTitle)(group.name || "Group");
58
26
  const groupDoc = userGroupTable.initDoc(group);
@@ -77,48 +45,24 @@ const GroupDetails = (props) => {
77
45
  return groupDoc;
78
46
  }, undefined, [props.groupId]);
79
47
  if (!group) {
80
- return react_1.default.createElement(loading_indicator_1.LoadingIndicator, null);
48
+ return (0, jsx_runtime_1.jsx)(loading_indicator_1.LoadingIndicator, {});
81
49
  }
82
- return (react_1.default.createElement("div", { className: "container-fluid p-3" },
83
- react_1.default.createElement("div", { className: "d-flex" },
84
- react_1.default.createElement("div", null,
85
- react_1.default.createElement("h4", null,
86
- react_1.default.createElement("i", { className: `${(0, peers_sdk_1.getIconClassName)((0, peers_sdk_1.Groups)())} me-2` }))),
87
- react_1.default.createElement("div", { className: "flex-grow-1" },
88
- react_1.default.createElement("h4", null,
89
- react_1.default.createElement(input_1.Input, { key: group.groupId, className: 'border border-0', style: { width: '100%', outline: 'none', backgroundColor: 'transparent' }, value: group.qs.name }))),
90
- react_1.default.createElement("div", { className: "d-flex gap-2" },
91
- react_1.default.createElement(ShareButton, { groupId: props.groupId }),
92
- react_1.default.createElement(save_button_1.SaveButton, { key: group.groupId, doc: group }))),
93
- react_1.default.createElement(tabs_1.Tabs, { key: group.groupId, tabs: [
94
- {
95
- name: 'Info', content: react_1.default.createElement(tabs_1.ScreenTabBody, null,
96
- react_1.default.createElement(GroupInfo, { group: group }))
97
- },
98
- {
99
- name: 'Members', content: react_1.default.createElement(tabs_1.ScreenTabBody, null,
100
- react_1.default.createElement(GroupMembersWrapper, { groupId: props.groupId }))
101
- },
102
- ] })));
50
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "container-fluid p-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex", children: [(0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("h4", { children: (0, jsx_runtime_1.jsx)("i", { className: `${(0, peers_sdk_1.getIconClassName)((0, peers_sdk_1.Groups)())} me-2` }) }) }), (0, jsx_runtime_1.jsx)("div", { className: "flex-grow-1", children: (0, jsx_runtime_1.jsx)("h4", { children: (0, jsx_runtime_1.jsx)(input_1.Input, { className: "border border-0", style: { width: "100%", outline: "none", backgroundColor: "transparent" }, value: group.qs.name }, group.groupId) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "d-flex gap-2", children: [(0, jsx_runtime_1.jsx)(ShareButton, { groupId: props.groupId }), (0, jsx_runtime_1.jsx)(save_button_1.SaveButton, { doc: group }, group.groupId)] })] }), (0, jsx_runtime_1.jsx)(tabs_1.Tabs, { tabs: [
51
+ {
52
+ name: "Info",
53
+ content: ((0, jsx_runtime_1.jsx)(tabs_1.ScreenTabBody, { children: (0, jsx_runtime_1.jsx)(GroupInfo, { group: group }) })),
54
+ },
55
+ {
56
+ name: "Members",
57
+ content: ((0, jsx_runtime_1.jsx)(tabs_1.ScreenTabBody, { children: (0, jsx_runtime_1.jsx)(GroupMembersWrapper, { groupId: props.groupId }) })),
58
+ },
59
+ ] }, group.groupId)] }));
103
60
  };
104
61
  exports.GroupDetails = GroupDetails;
105
62
  const GroupInfo = (props) => {
106
63
  const { group } = props;
107
- group.description = group.description || '';
108
- return (react_1.default.createElement("div", null,
109
- react_1.default.createElement("small", null, "Name:"),
110
- react_1.default.createElement(input_1.Input, { value: group.qs.name, className: "form-control mb-3 p-0 ps-2", placeholder: "Group name", title: "Group name" }),
111
- react_1.default.createElement("small", null, "Icon Class Name:"),
112
- react_1.default.createElement(input_1.Input, { value: group.qs.iconClassName, className: "form-control mb-3 p-0 ps-2", placeholder: "bi-people-fill", title: "Icon class name (e.g., bi-people-fill, bi-house-fill, bi-star-fill)" }),
113
- react_1.default.createElement("small", null, "Group ID:"),
114
- react_1.default.createElement("div", { className: "form-control mb-3 p-2 bg-body-secondary text-body-secondary", style: { fontFamily: 'monospace', fontSize: '0.9em' } }, group.groupId),
115
- react_1.default.createElement("div", { className: "d-flex flex-row" },
116
- react_1.default.createElement("div", { className: "ms-2" },
117
- react_1.default.createElement("label", { className: "form-label small mt-2 me-2" }, "Disabled:"),
118
- react_1.default.createElement(checkbox_1.Checkbox, { className: "form-check-input mt-2", checked: group.qs.disabled }))),
119
- react_1.default.createElement("br", null),
120
- react_1.default.createElement("small", { className: "mt-2" }, "Description:"),
121
- react_1.default.createElement(editor_inline_1.MarkdownEditorInline, { value: group.qs.description })));
64
+ group.description = group.description || "";
65
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("small", { children: "Name:" }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: group.qs.name, className: "form-control mb-3 p-0 ps-2", placeholder: "Group name", title: "Group name" }), (0, jsx_runtime_1.jsx)("small", { children: "Icon Class Name:" }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: group.qs.iconClassName, className: "form-control mb-3 p-0 ps-2", placeholder: "bi-people-fill", title: "Icon class name (e.g., bi-people-fill, bi-house-fill, bi-star-fill)" }), (0, jsx_runtime_1.jsx)("small", { children: "Group ID:" }), (0, jsx_runtime_1.jsx)("div", { className: "form-control mb-3 p-2 bg-body-secondary text-body-secondary", style: { fontFamily: "monospace", fontSize: "0.9em" }, children: group.groupId }), (0, jsx_runtime_1.jsx)("div", { className: "d-flex flex-row", children: (0, jsx_runtime_1.jsxs)("div", { className: "ms-2", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label small mt-2 me-2", children: "Disabled:" }), (0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { className: "form-check-input mt-2", checked: group.qs.disabled })] }) }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("small", { className: "mt-2", children: "Description:" }), (0, jsx_runtime_1.jsx)(editor_inline_1.MarkdownEditorInline, { value: group.qs.description })] }));
122
66
  };
123
67
  const ShareButton = ({ groupId }) => {
124
68
  const [isSharing, setIsSharing] = (0, react_1.useState)(false);
@@ -139,76 +83,37 @@ const ShareButton = ({ groupId }) => {
139
83
  setShareResult({
140
84
  success: true,
141
85
  message: `Group share data copied to clipboard! (${qrInfo.size} chars, ${qrInfo.memberCount} admin members)`,
142
- qrInfo
86
+ qrInfo,
143
87
  });
144
88
  }
145
89
  else {
146
90
  setShareResult({
147
91
  success: false,
148
- message: 'Failed to copy to clipboard. Please copy manually from the modal.',
149
- qrInfo
92
+ message: "Failed to copy to clipboard. Please copy manually from the modal.",
93
+ qrInfo,
150
94
  });
151
95
  }
152
96
  }
153
97
  catch (error) {
154
98
  setShareResult({
155
99
  success: false,
156
- message: `Error generating share: ${error.message}`,
100
+ message: `Error generating share: ${error instanceof Error ? error.message : String(error)}`,
157
101
  });
158
102
  }
159
103
  finally {
160
104
  setIsSharing(false);
161
105
  }
162
106
  };
163
- return (react_1.default.createElement(react_1.default.Fragment, null,
164
- react_1.default.createElement("button", { className: "btn btn-secondary btn-sm", onClick: handleShare, disabled: isSharing, title: "Share group with admin members" }, isSharing ? (react_1.default.createElement(react_1.default.Fragment, null,
165
- react_1.default.createElement("span", { className: "spinner-border spinner-border-sm me-1", role: "status", "aria-hidden": "true" }),
166
- "Sharing...")) : (react_1.default.createElement(react_1.default.Fragment, null,
167
- react_1.default.createElement("i", { className: "bi-share me-1" }),
168
- "Share"))),
169
- shareResult && (react_1.default.createElement("div", { className: "position-fixed top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center", style: { backgroundColor: 'rgba(0,0,0,0.5)', zIndex: 1050 } },
170
- react_1.default.createElement("div", { className: "card", style: { maxWidth: '500px', width: '90%' } },
171
- react_1.default.createElement("div", { className: "card-header d-flex justify-content-between align-items-center" },
172
- react_1.default.createElement("h6", { className: "mb-0" },
173
- react_1.default.createElement("i", { className: `bi-${shareResult.success ? 'check-circle text-success' : 'exclamation-triangle text-warning'} me-2` }),
174
- "Group Share ",
175
- shareResult.success ? 'Ready' : 'Error'),
176
- react_1.default.createElement("button", { className: "btn-close", onClick: () => setShareResult(null), "aria-label": "Close" })),
177
- react_1.default.createElement("div", { className: "card-body" },
178
- react_1.default.createElement("p", { className: "mb-3" }, shareResult.message),
179
- shareResult.qrInfo && (react_1.default.createElement("div", { className: "mb-3" },
180
- react_1.default.createElement("h6", null, "QR Code Compatibility"),
181
- react_1.default.createElement("div", { className: "row g-2" },
182
- react_1.default.createElement("div", { className: "col-6" },
183
- react_1.default.createElement("small", { className: "text-muted" }, "Size:"),
184
- react_1.default.createElement("br", null),
185
- react_1.default.createElement("strong", null,
186
- shareResult.qrInfo.size,
187
- " chars")),
188
- react_1.default.createElement("div", { className: "col-6" },
189
- react_1.default.createElement("small", { className: "text-muted" }, "QR Version 20:"),
190
- react_1.default.createElement("br", null),
191
- react_1.default.createElement("span", { className: `badge bg-${shareResult.qrInfo.fits ? 'success' : 'warning'}` },
192
- shareResult.qrInfo.fits ? '✓ Fits' : '⚠ Too Large',
193
- " (",
194
- shareResult.qrInfo.usagePercent,
195
- "%)"))),
196
- !shareResult.qrInfo.fits && (react_1.default.createElement("div", { className: "alert alert-warning mt-2 mb-0" },
197
- react_1.default.createElement("small", null,
198
- react_1.default.createElement("i", { className: "bi-exclamation-triangle me-1" }),
199
- "Data may be too large for standard QR codes. Consider reducing admin members or use text sharing."))))),
200
- react_1.default.createElement("div", { className: "text-end" },
201
- react_1.default.createElement("button", { className: "btn btn-secondary me-2", onClick: () => setShareResult(null) }, "Close"),
202
- shareResult.success && (react_1.default.createElement("button", { className: "btn btn-primary", onClick: handleShare }, "Copy Again")))))))));
107
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("button", { className: "btn btn-secondary btn-sm", onClick: handleShare, disabled: isSharing, title: "Share group with admin members", children: isSharing ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "spinner-border spinner-border-sm me-1", role: "status", "aria-hidden": "true" }), "Sharing..."] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("i", { className: "bi-share me-1" }), "Share"] })) }), shareResult && ((0, jsx_runtime_1.jsx)("div", { className: "position-fixed top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center", style: { backgroundColor: "rgba(0,0,0,0.5)", zIndex: 1050 }, children: (0, jsx_runtime_1.jsxs)("div", { className: "card", style: { maxWidth: "500px", width: "90%" }, children: [(0, jsx_runtime_1.jsxs)("div", { className: "card-header d-flex justify-content-between align-items-center", children: [(0, jsx_runtime_1.jsxs)("h6", { className: "mb-0", children: [(0, jsx_runtime_1.jsx)("i", { className: `bi-${shareResult.success ? "check-circle text-success" : "exclamation-triangle text-warning"} me-2` }), "Group Share ", shareResult.success ? "Ready" : "Error"] }), (0, jsx_runtime_1.jsx)("button", { className: "btn-close", onClick: () => setShareResult(null), "aria-label": "Close" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "card-body", children: [(0, jsx_runtime_1.jsx)("p", { className: "mb-3", children: shareResult.message }), shareResult.qrInfo && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsx)("h6", { children: "QR Code Compatibility" }), (0, jsx_runtime_1.jsxs)("div", { className: "row g-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "col-6", children: [(0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "Size:" }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("strong", { children: [shareResult.qrInfo.size, " chars"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "col-6", children: [(0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "QR Version 20:" }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("span", { className: `badge bg-${shareResult.qrInfo.fits ? "success" : "warning"}`, children: [shareResult.qrInfo.fits ? "✓ Fits" : "⚠ Too Large", " (", shareResult.qrInfo.usagePercent, "%)"] })] })] }), !shareResult.qrInfo.fits && ((0, jsx_runtime_1.jsx)("div", { className: "alert alert-warning mt-2 mb-0", children: (0, jsx_runtime_1.jsxs)("small", { children: [(0, jsx_runtime_1.jsx)("i", { className: "bi-exclamation-triangle me-1" }), "Data may be too large for standard QR codes. Consider reducing admin members or use text sharing."] }) }))] })), (0, jsx_runtime_1.jsxs)("div", { className: "text-end", children: [(0, jsx_runtime_1.jsx)("button", { className: "btn btn-secondary me-2", onClick: () => setShareResult(null), children: "Close" }), shareResult.success && ((0, jsx_runtime_1.jsx)("button", { className: "btn btn-primary", onClick: handleShare, children: "Copy Again" }))] })] })] }) }))] }));
203
108
  };
204
109
  const GroupMembersWrapper = (props) => {
205
110
  const userContext = (0, hooks_1.usePromise)(() => (0, peers_sdk_1.getUserContext)());
206
111
  if (!userContext)
207
112
  return null;
208
- return react_1.default.createElement(group_members_1.GroupMembersUI, { groupId: props.groupId, userContext: userContext });
113
+ return (0, jsx_runtime_1.jsx)(group_members_1.GroupMembersUI, { groupId: props.groupId, userContext: userContext });
209
114
  };
210
115
  (0, ui_loader_1.registerInternalPeersUI)({
211
- peersUIId: '00group00details00component',
116
+ peersUIId: "00group00details00component",
212
117
  component: exports.GroupDetails,
213
118
  routes: [
214
119
  {
@@ -220,8 +125,8 @@ const GroupMembersWrapper = (props) => {
220
125
  }
221
126
  return false;
222
127
  },
223
- uiCategory: 'screen',
224
- priority: 2
225
- }
226
- ]
128
+ uiCategory: "screen",
129
+ priority: 2,
130
+ },
131
+ ],
227
132
  });
@@ -5,11 +5,10 @@
5
5
  *
6
6
  * Communicates with device layer through pvars (not direct imports).
7
7
  */
8
- import React from "react";
9
- import { UserContext } from "@peers-app/peers-sdk";
8
+ import { type UserContext } from "@peers-app/peers-sdk";
10
9
  interface GroupInviteListenerProps {
11
10
  groupId: string;
12
11
  userContext: UserContext;
13
12
  }
14
- export declare const GroupInviteListener: (props: GroupInviteListenerProps) => React.JSX.Element;
13
+ export declare const GroupInviteListener: (props: GroupInviteListenerProps) => import("react/jsx-runtime").JSX.Element;
15
14
  export {};