@ledgerhq/device-management-kit-devtools-ui 1.1.1

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 (373) hide show
  1. package/LICENSE.MD +202 -0
  2. package/lib/build/index.d.ts +2 -0
  3. package/lib/build/index.d.ts.map +1 -0
  4. package/lib/build/index.js +2 -0
  5. package/lib/build/index.js.map +1 -0
  6. package/lib/build/src/Dashboard.d.ts +5 -0
  7. package/lib/build/src/Dashboard.d.ts.map +1 -0
  8. package/lib/build/src/Dashboard.js +50 -0
  9. package/lib/build/src/Dashboard.js.map +1 -0
  10. package/lib/build/src/ErrorBoundary.d.ts +15 -0
  11. package/lib/build/src/ErrorBoundary.d.ts.map +1 -0
  12. package/lib/build/src/ErrorBoundary.js +23 -0
  13. package/lib/build/src/ErrorBoundary.js.map +1 -0
  14. package/lib/build/src/PluginEvents.d.ts +9 -0
  15. package/lib/build/src/PluginEvents.d.ts.map +1 -0
  16. package/lib/build/src/PluginEvents.js +2 -0
  17. package/lib/build/src/PluginEvents.js.map +1 -0
  18. package/lib/build/src/components/DashboardFooter.d.ts +8 -0
  19. package/lib/build/src/components/DashboardFooter.d.ts.map +1 -0
  20. package/lib/build/src/components/DashboardFooter.js +31 -0
  21. package/lib/build/src/components/DashboardFooter.js.map +1 -0
  22. package/lib/build/src/components/DashboardNavigationBar.d.ts +16 -0
  23. package/lib/build/src/components/DashboardNavigationBar.d.ts.map +1 -0
  24. package/lib/build/src/components/DashboardNavigationBar.js +85 -0
  25. package/lib/build/src/components/DashboardNavigationBar.js.map +1 -0
  26. package/lib/build/src/components/DebugDrawer.d.ts +18 -0
  27. package/lib/build/src/components/DebugDrawer.d.ts.map +1 -0
  28. package/lib/build/src/components/DebugDrawer.js +69 -0
  29. package/lib/build/src/components/DebugDrawer.js.map +1 -0
  30. package/lib/build/src/components/SplitView.d.ts +12 -0
  31. package/lib/build/src/components/SplitView.d.ts.map +1 -0
  32. package/lib/build/src/components/SplitView.js +50 -0
  33. package/lib/build/src/components/SplitView.js.map +1 -0
  34. package/lib/build/src/hooks/commandDispatcher.d.ts +28 -0
  35. package/lib/build/src/hooks/commandDispatcher.d.ts.map +1 -0
  36. package/lib/build/src/hooks/commandDispatcher.js +38 -0
  37. package/lib/build/src/hooks/commandDispatcher.js.map +1 -0
  38. package/lib/build/src/hooks/connectorMessageHandlers.d.ts +34 -0
  39. package/lib/build/src/hooks/connectorMessageHandlers.d.ts.map +1 -0
  40. package/lib/build/src/hooks/connectorMessageHandlers.js +85 -0
  41. package/lib/build/src/hooks/connectorMessageHandlers.js.map +1 -0
  42. package/lib/build/src/hooks/useConnectorMessages.d.ts +60 -0
  43. package/lib/build/src/hooks/useConnectorMessages.d.ts.map +1 -0
  44. package/lib/build/src/hooks/useConnectorMessages.js +138 -0
  45. package/lib/build/src/hooks/useConnectorMessages.js.map +1 -0
  46. package/lib/build/src/screens/debugDevTools/index.d.ts +17 -0
  47. package/lib/build/src/screens/debugDevTools/index.d.ts.map +1 -0
  48. package/lib/build/src/screens/debugDevTools/index.js +48 -0
  49. package/lib/build/src/screens/debugDevTools/index.js.map +1 -0
  50. package/lib/build/src/screens/inspector/ApduSender.d.ts +10 -0
  51. package/lib/build/src/screens/inspector/ApduSender.d.ts.map +1 -0
  52. package/lib/build/src/screens/inspector/ApduSender.js +118 -0
  53. package/lib/build/src/screens/inspector/ApduSender.js.map +1 -0
  54. package/lib/build/src/screens/inspector/DeviceCard.d.ts +13 -0
  55. package/lib/build/src/screens/inspector/DeviceCard.d.ts.map +1 -0
  56. package/lib/build/src/screens/inspector/DeviceCard.js +52 -0
  57. package/lib/build/src/screens/inspector/DeviceCard.js.map +1 -0
  58. package/lib/build/src/screens/inspector/DeviceDiscoverySection.d.ts +25 -0
  59. package/lib/build/src/screens/inspector/DeviceDiscoverySection.d.ts.map +1 -0
  60. package/lib/build/src/screens/inspector/DeviceDiscoverySection.js +8 -0
  61. package/lib/build/src/screens/inspector/DeviceDiscoverySection.js.map +1 -0
  62. package/lib/build/src/screens/inspector/DiscoveredDeviceCard.d.ts +12 -0
  63. package/lib/build/src/screens/inspector/DiscoveredDeviceCard.d.ts.map +1 -0
  64. package/lib/build/src/screens/inspector/DiscoveredDeviceCard.js +89 -0
  65. package/lib/build/src/screens/inspector/DiscoveredDeviceCard.js.map +1 -0
  66. package/lib/build/src/screens/inspector/MyLedgerProviderControl.d.ts +9 -0
  67. package/lib/build/src/screens/inspector/MyLedgerProviderControl.d.ts.map +1 -0
  68. package/lib/build/src/screens/inspector/MyLedgerProviderControl.js +78 -0
  69. package/lib/build/src/screens/inspector/MyLedgerProviderControl.js.map +1 -0
  70. package/lib/build/src/screens/inspector/SessionsSection.d.ts +20 -0
  71. package/lib/build/src/screens/inspector/SessionsSection.d.ts.map +1 -0
  72. package/lib/build/src/screens/inspector/SessionsSection.js +37 -0
  73. package/lib/build/src/screens/inspector/SessionsSection.js.map +1 -0
  74. package/lib/build/src/screens/inspector/index.d.ts +34 -0
  75. package/lib/build/src/screens/inspector/index.d.ts.map +1 -0
  76. package/lib/build/src/screens/inspector/index.js +26 -0
  77. package/lib/build/src/screens/inspector/index.js.map +1 -0
  78. package/lib/build/src/screens/inspector/styles.d.ts +41 -0
  79. package/lib/build/src/screens/inspector/styles.d.ts.map +1 -0
  80. package/lib/build/src/screens/inspector/styles.js +266 -0
  81. package/lib/build/src/screens/inspector/styles.js.map +1 -0
  82. package/lib/build/src/screens/logger/FilterInput.d.ts +8 -0
  83. package/lib/build/src/screens/logger/FilterInput.d.ts.map +1 -0
  84. package/lib/build/src/screens/logger/FilterInput.js +179 -0
  85. package/lib/build/src/screens/logger/FilterInput.js.map +1 -0
  86. package/lib/build/src/screens/logger/LoggerOptions.d.ts +18 -0
  87. package/lib/build/src/screens/logger/LoggerOptions.d.ts.map +1 -0
  88. package/lib/build/src/screens/logger/LoggerOptions.js +75 -0
  89. package/lib/build/src/screens/logger/LoggerOptions.js.map +1 -0
  90. package/lib/build/src/screens/logger/LoggerToolbar.d.ts +19 -0
  91. package/lib/build/src/screens/logger/LoggerToolbar.d.ts.map +1 -0
  92. package/lib/build/src/screens/logger/LoggerToolbar.js +16 -0
  93. package/lib/build/src/screens/logger/LoggerToolbar.js.map +1 -0
  94. package/lib/build/src/screens/logger/SearchInput.d.ts +15 -0
  95. package/lib/build/src/screens/logger/SearchInput.d.ts.map +1 -0
  96. package/lib/build/src/screens/logger/SearchInput.js +93 -0
  97. package/lib/build/src/screens/logger/SearchInput.js.map +1 -0
  98. package/lib/build/src/screens/logger/filterUtils.d.ts +43 -0
  99. package/lib/build/src/screens/logger/filterUtils.d.ts.map +1 -0
  100. package/lib/build/src/screens/logger/filterUtils.js +125 -0
  101. package/lib/build/src/screens/logger/filterUtils.js.map +1 -0
  102. package/lib/build/src/screens/logger/filterUtils.test.d.ts +2 -0
  103. package/lib/build/src/screens/logger/filterUtils.test.d.ts.map +1 -0
  104. package/lib/build/src/screens/logger/filterUtils.test.js +300 -0
  105. package/lib/build/src/screens/logger/filterUtils.test.js.map +1 -0
  106. package/lib/build/src/screens/logger/index.d.ts +10 -0
  107. package/lib/build/src/screens/logger/index.d.ts.map +1 -0
  108. package/lib/build/src/screens/logger/index.js +86 -0
  109. package/lib/build/src/screens/logger/index.js.map +1 -0
  110. package/lib/build/src/screens/logger/inputStyles.d.ts +18 -0
  111. package/lib/build/src/screens/logger/inputStyles.d.ts.map +1 -0
  112. package/lib/build/src/screens/logger/inputStyles.js +46 -0
  113. package/lib/build/src/screens/logger/inputStyles.js.map +1 -0
  114. package/lib/build/src/screens/logger/logsTable/LogTableCells.d.ts +13 -0
  115. package/lib/build/src/screens/logger/logsTable/LogTableCells.d.ts.map +1 -0
  116. package/lib/build/src/screens/logger/logsTable/LogTableCells.js +61 -0
  117. package/lib/build/src/screens/logger/logsTable/LogTableCells.js.map +1 -0
  118. package/lib/build/src/screens/logger/logsTable/ScrollDownButton.d.ts +8 -0
  119. package/lib/build/src/screens/logger/logsTable/ScrollDownButton.d.ts.map +1 -0
  120. package/lib/build/src/screens/logger/logsTable/ScrollDownButton.js +20 -0
  121. package/lib/build/src/screens/logger/logsTable/ScrollDownButton.js.map +1 -0
  122. package/lib/build/src/screens/logger/logsTable/TableBody.d.ts +13 -0
  123. package/lib/build/src/screens/logger/logsTable/TableBody.d.ts.map +1 -0
  124. package/lib/build/src/screens/logger/logsTable/TableBody.js +58 -0
  125. package/lib/build/src/screens/logger/logsTable/TableBody.js.map +1 -0
  126. package/lib/build/src/screens/logger/logsTable/TableColumns.d.ts +3 -0
  127. package/lib/build/src/screens/logger/logsTable/TableColumns.d.ts.map +1 -0
  128. package/lib/build/src/screens/logger/logsTable/TableColumns.js +44 -0
  129. package/lib/build/src/screens/logger/logsTable/TableColumns.js.map +1 -0
  130. package/lib/build/src/screens/logger/logsTable/TableHeader.d.ts +9 -0
  131. package/lib/build/src/screens/logger/logsTable/TableHeader.d.ts.map +1 -0
  132. package/lib/build/src/screens/logger/logsTable/TableHeader.js +53 -0
  133. package/lib/build/src/screens/logger/logsTable/TableHeader.js.map +1 -0
  134. package/lib/build/src/screens/logger/logsTable/constants.d.ts +21 -0
  135. package/lib/build/src/screens/logger/logsTable/constants.d.ts.map +1 -0
  136. package/lib/build/src/screens/logger/logsTable/constants.js +21 -0
  137. package/lib/build/src/screens/logger/logsTable/constants.js.map +1 -0
  138. package/lib/build/src/screens/logger/logsTable/index.d.ts +11 -0
  139. package/lib/build/src/screens/logger/logsTable/index.d.ts.map +1 -0
  140. package/lib/build/src/screens/logger/logsTable/index.js +116 -0
  141. package/lib/build/src/screens/logger/logsTable/index.js.map +1 -0
  142. package/lib/build/src/screens/logger/logsTable/useColumnSizeVars.d.ts +4 -0
  143. package/lib/build/src/screens/logger/logsTable/useColumnSizeVars.d.ts.map +1 -0
  144. package/lib/build/src/screens/logger/logsTable/useColumnSizeVars.js +17 -0
  145. package/lib/build/src/screens/logger/logsTable/useColumnSizeVars.js.map +1 -0
  146. package/lib/build/src/screens/logger/logsTable/useResizeObserver.d.ts +2 -0
  147. package/lib/build/src/screens/logger/logsTable/useResizeObserver.d.ts.map +1 -0
  148. package/lib/build/src/screens/logger/logsTable/useResizeObserver.js +28 -0
  149. package/lib/build/src/screens/logger/logsTable/useResizeObserver.js.map +1 -0
  150. package/lib/build/src/screens/logger/logsTable/useScrollLogic.d.ts +12 -0
  151. package/lib/build/src/screens/logger/logsTable/useScrollLogic.d.ts.map +1 -0
  152. package/lib/build/src/screens/logger/logsTable/useScrollLogic.js +86 -0
  153. package/lib/build/src/screens/logger/logsTable/useScrollLogic.js.map +1 -0
  154. package/lib/build/src/screens/logger/mapConnectorMessageToLogData.d.ts +6 -0
  155. package/lib/build/src/screens/logger/mapConnectorMessageToLogData.d.ts.map +1 -0
  156. package/lib/build/src/screens/logger/mapConnectorMessageToLogData.js +17 -0
  157. package/lib/build/src/screens/logger/mapConnectorMessageToLogData.js.map +1 -0
  158. package/lib/build/src/screens/logger/types.d.ts +6 -0
  159. package/lib/build/src/screens/logger/types.d.ts.map +1 -0
  160. package/lib/build/src/screens/logger/types.js +2 -0
  161. package/lib/build/src/screens/logger/types.js.map +1 -0
  162. package/lib/build/src/screens/logger/useColumnSizeVars.d.ts +4 -0
  163. package/lib/build/src/screens/logger/useColumnSizeVars.d.ts.map +1 -0
  164. package/lib/build/src/screens/logger/useColumnSizeVars.js +17 -0
  165. package/lib/build/src/screens/logger/useColumnSizeVars.js.map +1 -0
  166. package/lib/build/src/screens/logger/useLogsDataAndOptions.d.ts +12 -0
  167. package/lib/build/src/screens/logger/useLogsDataAndOptions.d.ts.map +1 -0
  168. package/lib/build/src/screens/logger/useLogsDataAndOptions.js +36 -0
  169. package/lib/build/src/screens/logger/useLogsDataAndOptions.js.map +1 -0
  170. package/lib/build/src/screens/logger/useRecentFilters.d.ts +18 -0
  171. package/lib/build/src/screens/logger/useRecentFilters.d.ts.map +1 -0
  172. package/lib/build/src/screens/logger/useRecentFilters.js +96 -0
  173. package/lib/build/src/screens/logger/useRecentFilters.js.map +1 -0
  174. package/lib/build/src/screens/logger/useSearchState.d.ts +24 -0
  175. package/lib/build/src/screens/logger/useSearchState.d.ts.map +1 -0
  176. package/lib/build/src/screens/logger/useSearchState.js +74 -0
  177. package/lib/build/src/screens/logger/useSearchState.js.map +1 -0
  178. package/lib/build/src/shared/NotConnectedMessage.d.ts +9 -0
  179. package/lib/build/src/shared/NotConnectedMessage.d.ts.map +1 -0
  180. package/lib/build/src/shared/NotConnectedMessage.js +30 -0
  181. package/lib/build/src/shared/NotConnectedMessage.js.map +1 -0
  182. package/lib/build/src/shared/PluginEvents.d.ts +9 -0
  183. package/lib/build/src/shared/PluginEvents.d.ts.map +1 -0
  184. package/lib/build/src/shared/PluginEvents.js +2 -0
  185. package/lib/build/src/shared/PluginEvents.js.map +1 -0
  186. package/lib/build/tsconfig.build.tsbuildinfo +1 -0
  187. package/lib/cjs/index.js +2 -0
  188. package/lib/cjs/index.js.map +7 -0
  189. package/lib/cjs/package.json +73 -0
  190. package/lib/cjs/src/Dashboard.js +12 -0
  191. package/lib/cjs/src/Dashboard.js.map +7 -0
  192. package/lib/cjs/src/ErrorBoundary.js +2 -0
  193. package/lib/cjs/src/ErrorBoundary.js.map +7 -0
  194. package/lib/cjs/src/PluginEvents.js +2 -0
  195. package/lib/cjs/src/PluginEvents.js.map +7 -0
  196. package/lib/cjs/src/components/DashboardFooter.js +25 -0
  197. package/lib/cjs/src/components/DashboardFooter.js.map +7 -0
  198. package/lib/cjs/src/components/DashboardNavigationBar.js +64 -0
  199. package/lib/cjs/src/components/DashboardNavigationBar.js.map +7 -0
  200. package/lib/cjs/src/components/DebugDrawer.js +58 -0
  201. package/lib/cjs/src/components/DebugDrawer.js.map +7 -0
  202. package/lib/cjs/src/components/SplitView.js +37 -0
  203. package/lib/cjs/src/components/SplitView.js.map +7 -0
  204. package/lib/cjs/src/hooks/commandDispatcher.js +2 -0
  205. package/lib/cjs/src/hooks/commandDispatcher.js.map +7 -0
  206. package/lib/cjs/src/hooks/connectorMessageHandlers.js +2 -0
  207. package/lib/cjs/src/hooks/connectorMessageHandlers.js.map +7 -0
  208. package/lib/cjs/src/hooks/useConnectorMessages.js +2 -0
  209. package/lib/cjs/src/hooks/useConnectorMessages.js.map +7 -0
  210. package/lib/cjs/src/screens/debugDevTools/index.js +2 -0
  211. package/lib/cjs/src/screens/debugDevTools/index.js.map +7 -0
  212. package/lib/cjs/src/screens/inspector/ApduSender.js +79 -0
  213. package/lib/cjs/src/screens/inspector/ApduSender.js.map +7 -0
  214. package/lib/cjs/src/screens/inspector/DeviceCard.js +2 -0
  215. package/lib/cjs/src/screens/inspector/DeviceCard.js.map +7 -0
  216. package/lib/cjs/src/screens/inspector/DeviceDiscoverySection.js +2 -0
  217. package/lib/cjs/src/screens/inspector/DeviceDiscoverySection.js.map +7 -0
  218. package/lib/cjs/src/screens/inspector/DiscoveredDeviceCard.js +57 -0
  219. package/lib/cjs/src/screens/inspector/DiscoveredDeviceCard.js.map +7 -0
  220. package/lib/cjs/src/screens/inspector/MyLedgerProviderControl.js +40 -0
  221. package/lib/cjs/src/screens/inspector/MyLedgerProviderControl.js.map +7 -0
  222. package/lib/cjs/src/screens/inspector/SessionsSection.js +2 -0
  223. package/lib/cjs/src/screens/inspector/SessionsSection.js.map +7 -0
  224. package/lib/cjs/src/screens/inspector/index.js +9 -0
  225. package/lib/cjs/src/screens/inspector/index.js.map +7 -0
  226. package/lib/cjs/src/screens/inspector/styles.js +179 -0
  227. package/lib/cjs/src/screens/inspector/styles.js.map +7 -0
  228. package/lib/cjs/src/screens/logger/FilterInput.js +85 -0
  229. package/lib/cjs/src/screens/logger/FilterInput.js.map +7 -0
  230. package/lib/cjs/src/screens/logger/LoggerOptions.js +6 -0
  231. package/lib/cjs/src/screens/logger/LoggerOptions.js.map +7 -0
  232. package/lib/cjs/src/screens/logger/LoggerToolbar.js +9 -0
  233. package/lib/cjs/src/screens/logger/LoggerToolbar.js.map +7 -0
  234. package/lib/cjs/src/screens/logger/SearchInput.js +59 -0
  235. package/lib/cjs/src/screens/logger/SearchInput.js.map +7 -0
  236. package/lib/cjs/src/screens/logger/filterUtils.js +2 -0
  237. package/lib/cjs/src/screens/logger/filterUtils.js.map +7 -0
  238. package/lib/cjs/src/screens/logger/filterUtils.test.js +2 -0
  239. package/lib/cjs/src/screens/logger/filterUtils.test.js.map +7 -0
  240. package/lib/cjs/src/screens/logger/index.js +6 -0
  241. package/lib/cjs/src/screens/logger/index.js.map +7 -0
  242. package/lib/cjs/src/screens/logger/inputStyles.js +31 -0
  243. package/lib/cjs/src/screens/logger/inputStyles.js.map +7 -0
  244. package/lib/cjs/src/screens/logger/logsTable/LogTableCells.js +8 -0
  245. package/lib/cjs/src/screens/logger/logsTable/LogTableCells.js.map +7 -0
  246. package/lib/cjs/src/screens/logger/logsTable/ScrollDownButton.js +15 -0
  247. package/lib/cjs/src/screens/logger/logsTable/ScrollDownButton.js.map +7 -0
  248. package/lib/cjs/src/screens/logger/logsTable/TableBody.js +24 -0
  249. package/lib/cjs/src/screens/logger/logsTable/TableBody.js.map +7 -0
  250. package/lib/cjs/src/screens/logger/logsTable/TableColumns.js +2 -0
  251. package/lib/cjs/src/screens/logger/logsTable/TableColumns.js.map +7 -0
  252. package/lib/cjs/src/screens/logger/logsTable/TableHeader.js +33 -0
  253. package/lib/cjs/src/screens/logger/logsTable/TableHeader.js.map +7 -0
  254. package/lib/cjs/src/screens/logger/logsTable/constants.js +2 -0
  255. package/lib/cjs/src/screens/logger/logsTable/constants.js.map +7 -0
  256. package/lib/cjs/src/screens/logger/logsTable/index.js +26 -0
  257. package/lib/cjs/src/screens/logger/logsTable/index.js.map +7 -0
  258. package/lib/cjs/src/screens/logger/logsTable/useColumnSizeVars.js +2 -0
  259. package/lib/cjs/src/screens/logger/logsTable/useColumnSizeVars.js.map +7 -0
  260. package/lib/cjs/src/screens/logger/logsTable/useResizeObserver.js +2 -0
  261. package/lib/cjs/src/screens/logger/logsTable/useResizeObserver.js.map +7 -0
  262. package/lib/cjs/src/screens/logger/logsTable/useScrollLogic.js +2 -0
  263. package/lib/cjs/src/screens/logger/logsTable/useScrollLogic.js.map +7 -0
  264. package/lib/cjs/src/screens/logger/mapConnectorMessageToLogData.js +2 -0
  265. package/lib/cjs/src/screens/logger/mapConnectorMessageToLogData.js.map +7 -0
  266. package/lib/cjs/src/screens/logger/types.js +2 -0
  267. package/lib/cjs/src/screens/logger/types.js.map +7 -0
  268. package/lib/cjs/src/screens/logger/useColumnSizeVars.js +2 -0
  269. package/lib/cjs/src/screens/logger/useColumnSizeVars.js.map +7 -0
  270. package/lib/cjs/src/screens/logger/useLogsDataAndOptions.js +2 -0
  271. package/lib/cjs/src/screens/logger/useLogsDataAndOptions.js.map +7 -0
  272. package/lib/cjs/src/screens/logger/useRecentFilters.js +2 -0
  273. package/lib/cjs/src/screens/logger/useRecentFilters.js.map +7 -0
  274. package/lib/cjs/src/screens/logger/useSearchState.js +2 -0
  275. package/lib/cjs/src/screens/logger/useSearchState.js.map +7 -0
  276. package/lib/cjs/src/shared/NotConnectedMessage.js +24 -0
  277. package/lib/cjs/src/shared/NotConnectedMessage.js.map +7 -0
  278. package/lib/cjs/src/shared/PluginEvents.js +2 -0
  279. package/lib/cjs/src/shared/PluginEvents.js.map +7 -0
  280. package/lib/esm/index.js +2 -0
  281. package/lib/esm/index.js.map +7 -0
  282. package/lib/esm/package.json +73 -0
  283. package/lib/esm/src/Dashboard.js +12 -0
  284. package/lib/esm/src/Dashboard.js.map +7 -0
  285. package/lib/esm/src/ErrorBoundary.js +2 -0
  286. package/lib/esm/src/ErrorBoundary.js.map +7 -0
  287. package/lib/esm/src/PluginEvents.js +1 -0
  288. package/lib/esm/src/PluginEvents.js.map +7 -0
  289. package/lib/esm/src/components/DashboardFooter.js +25 -0
  290. package/lib/esm/src/components/DashboardFooter.js.map +7 -0
  291. package/lib/esm/src/components/DashboardNavigationBar.js +64 -0
  292. package/lib/esm/src/components/DashboardNavigationBar.js.map +7 -0
  293. package/lib/esm/src/components/DebugDrawer.js +58 -0
  294. package/lib/esm/src/components/DebugDrawer.js.map +7 -0
  295. package/lib/esm/src/components/SplitView.js +37 -0
  296. package/lib/esm/src/components/SplitView.js.map +7 -0
  297. package/lib/esm/src/hooks/commandDispatcher.js +2 -0
  298. package/lib/esm/src/hooks/commandDispatcher.js.map +7 -0
  299. package/lib/esm/src/hooks/connectorMessageHandlers.js +2 -0
  300. package/lib/esm/src/hooks/connectorMessageHandlers.js.map +7 -0
  301. package/lib/esm/src/hooks/useConnectorMessages.js +2 -0
  302. package/lib/esm/src/hooks/useConnectorMessages.js.map +7 -0
  303. package/lib/esm/src/screens/debugDevTools/index.js +2 -0
  304. package/lib/esm/src/screens/debugDevTools/index.js.map +7 -0
  305. package/lib/esm/src/screens/inspector/ApduSender.js +79 -0
  306. package/lib/esm/src/screens/inspector/ApduSender.js.map +7 -0
  307. package/lib/esm/src/screens/inspector/DeviceCard.js +2 -0
  308. package/lib/esm/src/screens/inspector/DeviceCard.js.map +7 -0
  309. package/lib/esm/src/screens/inspector/DeviceDiscoverySection.js +2 -0
  310. package/lib/esm/src/screens/inspector/DeviceDiscoverySection.js.map +7 -0
  311. package/lib/esm/src/screens/inspector/DiscoveredDeviceCard.js +57 -0
  312. package/lib/esm/src/screens/inspector/DiscoveredDeviceCard.js.map +7 -0
  313. package/lib/esm/src/screens/inspector/MyLedgerProviderControl.js +40 -0
  314. package/lib/esm/src/screens/inspector/MyLedgerProviderControl.js.map +7 -0
  315. package/lib/esm/src/screens/inspector/SessionsSection.js +2 -0
  316. package/lib/esm/src/screens/inspector/SessionsSection.js.map +7 -0
  317. package/lib/esm/src/screens/inspector/index.js +9 -0
  318. package/lib/esm/src/screens/inspector/index.js.map +7 -0
  319. package/lib/esm/src/screens/inspector/styles.js +179 -0
  320. package/lib/esm/src/screens/inspector/styles.js.map +7 -0
  321. package/lib/esm/src/screens/logger/FilterInput.js +85 -0
  322. package/lib/esm/src/screens/logger/FilterInput.js.map +7 -0
  323. package/lib/esm/src/screens/logger/LoggerOptions.js +6 -0
  324. package/lib/esm/src/screens/logger/LoggerOptions.js.map +7 -0
  325. package/lib/esm/src/screens/logger/LoggerToolbar.js +9 -0
  326. package/lib/esm/src/screens/logger/LoggerToolbar.js.map +7 -0
  327. package/lib/esm/src/screens/logger/SearchInput.js +59 -0
  328. package/lib/esm/src/screens/logger/SearchInput.js.map +7 -0
  329. package/lib/esm/src/screens/logger/filterUtils.js +2 -0
  330. package/lib/esm/src/screens/logger/filterUtils.js.map +7 -0
  331. package/lib/esm/src/screens/logger/filterUtils.test.js +2 -0
  332. package/lib/esm/src/screens/logger/filterUtils.test.js.map +7 -0
  333. package/lib/esm/src/screens/logger/index.js +6 -0
  334. package/lib/esm/src/screens/logger/index.js.map +7 -0
  335. package/lib/esm/src/screens/logger/inputStyles.js +31 -0
  336. package/lib/esm/src/screens/logger/inputStyles.js.map +7 -0
  337. package/lib/esm/src/screens/logger/logsTable/LogTableCells.js +8 -0
  338. package/lib/esm/src/screens/logger/logsTable/LogTableCells.js.map +7 -0
  339. package/lib/esm/src/screens/logger/logsTable/ScrollDownButton.js +15 -0
  340. package/lib/esm/src/screens/logger/logsTable/ScrollDownButton.js.map +7 -0
  341. package/lib/esm/src/screens/logger/logsTable/TableBody.js +24 -0
  342. package/lib/esm/src/screens/logger/logsTable/TableBody.js.map +7 -0
  343. package/lib/esm/src/screens/logger/logsTable/TableColumns.js +2 -0
  344. package/lib/esm/src/screens/logger/logsTable/TableColumns.js.map +7 -0
  345. package/lib/esm/src/screens/logger/logsTable/TableHeader.js +33 -0
  346. package/lib/esm/src/screens/logger/logsTable/TableHeader.js.map +7 -0
  347. package/lib/esm/src/screens/logger/logsTable/constants.js +2 -0
  348. package/lib/esm/src/screens/logger/logsTable/constants.js.map +7 -0
  349. package/lib/esm/src/screens/logger/logsTable/index.js +26 -0
  350. package/lib/esm/src/screens/logger/logsTable/index.js.map +7 -0
  351. package/lib/esm/src/screens/logger/logsTable/useColumnSizeVars.js +2 -0
  352. package/lib/esm/src/screens/logger/logsTable/useColumnSizeVars.js.map +7 -0
  353. package/lib/esm/src/screens/logger/logsTable/useResizeObserver.js +2 -0
  354. package/lib/esm/src/screens/logger/logsTable/useResizeObserver.js.map +7 -0
  355. package/lib/esm/src/screens/logger/logsTable/useScrollLogic.js +2 -0
  356. package/lib/esm/src/screens/logger/logsTable/useScrollLogic.js.map +7 -0
  357. package/lib/esm/src/screens/logger/mapConnectorMessageToLogData.js +2 -0
  358. package/lib/esm/src/screens/logger/mapConnectorMessageToLogData.js.map +7 -0
  359. package/lib/esm/src/screens/logger/types.js +1 -0
  360. package/lib/esm/src/screens/logger/types.js.map +7 -0
  361. package/lib/esm/src/screens/logger/useColumnSizeVars.js +2 -0
  362. package/lib/esm/src/screens/logger/useColumnSizeVars.js.map +7 -0
  363. package/lib/esm/src/screens/logger/useLogsDataAndOptions.js +2 -0
  364. package/lib/esm/src/screens/logger/useLogsDataAndOptions.js.map +7 -0
  365. package/lib/esm/src/screens/logger/useRecentFilters.js +2 -0
  366. package/lib/esm/src/screens/logger/useRecentFilters.js.map +7 -0
  367. package/lib/esm/src/screens/logger/useSearchState.js +2 -0
  368. package/lib/esm/src/screens/logger/useSearchState.js.map +7 -0
  369. package/lib/esm/src/shared/NotConnectedMessage.js +24 -0
  370. package/lib/esm/src/shared/NotConnectedMessage.js.map +7 -0
  371. package/lib/esm/src/shared/PluginEvents.js +1 -0
  372. package/lib/esm/src/shared/PluginEvents.js.map +7 -0
  373. package/package.json +73 -0
@@ -0,0 +1,79 @@
1
+ "use strict";var h=Object.create;var l=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var v=(n,o)=>{for(var r in o)l(n,r,{get:o[r],enumerable:!0})},R=(n,o,r,p)=>{if(o&&typeof o=="object"||typeof o=="function")for(let d of A(o))!$.call(n,d)&&d!==r&&l(n,d,{get:()=>o[d],enumerable:!(p=I(o,d))||p.enumerable});return n};var D=(n,o,r)=>(r=n!=null?h(S(n)):{},R(o||!n||!n.__esModule?l(r,"default",{value:n,enumerable:!0}):r,n)),k=n=>R(l({},"__esModule",{value:!0}),n);var F={};v(F,{ApduSender:()=>B});module.exports=k(F);var c=require("react"),t=D(require("styled-components")),e=require("react/jsx-runtime");const w=t.default.div`
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: 8px;
5
+ margin-top: 12px;
6
+ padding-top: 12px;
7
+ border-top: 1px solid #eee;
8
+ `,P=t.default.div`
9
+ display: flex;
10
+ align-items: center;
11
+ gap: 8px;
12
+ cursor: pointer;
13
+ user-select: none;
14
+ `,z=t.default.span`
15
+ font-size: 12px;
16
+ color: #666;
17
+ transition: transform 0.15s ease;
18
+ transform: rotate(${({$expanded:n})=>n?"90deg":"0deg"});
19
+ `,E=t.default.span`
20
+ font-size: 12px;
21
+ font-weight: 600;
22
+ color: #666;
23
+ `,L=t.default.div`
24
+ display: ${({$expanded:n})=>n?"flex":"none"};
25
+ flex-direction: column;
26
+ gap: 8px;
27
+ `,U=t.default.div`
28
+ display: flex;
29
+ gap: 8px;
30
+ align-items: center;
31
+ `,H=t.default.input`
32
+ flex: 1;
33
+ padding: 6px 8px;
34
+ border: 1px solid #ddd;
35
+ border-radius: 4px;
36
+ font-size: 12px;
37
+ font-family: monospace;
38
+
39
+ &:focus {
40
+ outline: none;
41
+ border-color: #2196f3;
42
+ }
43
+
44
+ &::placeholder {
45
+ color: #999;
46
+ }
47
+ `,T=t.default.button`
48
+ padding: 6px 12px;
49
+ border: none;
50
+ border-radius: 4px;
51
+ background: #2196f3;
52
+ color: white;
53
+ font-size: 12px;
54
+ cursor: pointer;
55
+ transition: all 0.15s ease;
56
+
57
+ &:hover:not(:disabled) {
58
+ background: #1976d2;
59
+ }
60
+
61
+ &:disabled {
62
+ opacity: 0.5;
63
+ cursor: not-allowed;
64
+ }
65
+ `,q=t.default.div`
66
+ padding: 8px;
67
+ border-radius: 4px;
68
+ background: ${({$success:n})=>n?"#e8f5e9":"#ffebee"};
69
+ border: 1px solid ${({$success:n})=>n?"#c8e6c9":"#ffcdd2"};
70
+ font-size: 12px;
71
+ font-family: monospace;
72
+ `,x=t.default.span`
73
+ font-weight: 600;
74
+ color: #333;
75
+ `,g=t.default.span`
76
+ color: #555;
77
+ word-break: break-all;
78
+ `,B=({sessionId:n,onSend:o,responses:r})=>{const[p,d]=(0,c.useState)(!1),[i,C]=(0,c.useState)(""),[f,y]=(0,c.useState)(null),b=()=>{if(!i.trim())return;const s=i.replace(/\s/g,"").toUpperCase();if(!/^[0-9A-F]*$/.test(s)||s.length%2!==0){alert("Invalid hex string. Please enter a valid APDU in hex format (e.g., E0C4000000)");return}const u=o(n,s);y(u)},a=f?r.get(f):null,m=s=>!s||!Array.isArray(s)?"":s.map(u=>u.toString(16).padStart(2,"0").toUpperCase()).join(" ");return(0,e.jsxs)(w,{children:[(0,e.jsxs)(P,{onClick:()=>d(!p),children:[(0,e.jsx)(z,{$expanded:p,children:"\u25B6"}),(0,e.jsx)(E,{children:"Send APDU"})]}),(0,e.jsxs)(L,{$expanded:p,children:[(0,e.jsxs)(U,{children:[(0,e.jsx)(H,{type:"text",placeholder:"APDU hex (e.g., E0C4000000)",value:i,onChange:s=>C(s.target.value),onKeyDown:s=>s.key==="Enter"&&b()}),(0,e.jsx)(T,{onClick:b,disabled:!i.trim(),children:"Send"})]}),a&&(0,e.jsx)(q,{$success:a.success,children:a.success?(0,e.jsxs)(e.Fragment,{children:[a.data&&a.data.length>0&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(x,{children:"Data: "}),(0,e.jsx)(g,{children:m(a.data)}),(0,e.jsx)("br",{})]}),(0,e.jsx)(x,{children:"Status: "}),(0,e.jsx)(g,{children:m(a.statusCode)})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(x,{children:"Error: "}),(0,e.jsx)(g,{children:a.error})]})})]})]})};0&&(module.exports={ApduSender});
79
+ //# sourceMappingURL=ApduSender.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/screens/inspector/ApduSender.tsx"],
4
+ "sourcesContent": ["import React, { useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport { type ApduResponse } from \"../../hooks/useConnectorMessages\";\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #eee;\n`;\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n user-select: none;\n`;\n\nconst ToggleIcon = styled.span<{ $expanded: boolean }>`\n font-size: 12px;\n color: #666;\n transition: transform 0.15s ease;\n transform: rotate(${({ $expanded }) => ($expanded ? \"90deg\" : \"0deg\")});\n`;\n\nconst Title = styled.span`\n font-size: 12px;\n font-weight: 600;\n color: #666;\n`;\n\nconst Content = styled.div<{ $expanded: boolean }>`\n display: ${({ $expanded }) => ($expanded ? \"flex\" : \"none\")};\n flex-direction: column;\n gap: 8px;\n`;\n\nconst InputRow = styled.div`\n display: flex;\n gap: 8px;\n align-items: center;\n`;\n\nconst Input = styled.input`\n flex: 1;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 12px;\n font-family: monospace;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n\n &::placeholder {\n color: #999;\n }\n`;\n\nconst Button = styled.button`\n padding: 6px 12px;\n border: none;\n border-radius: 4px;\n background: #2196f3;\n color: white;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s ease;\n\n &:hover:not(:disabled) {\n background: #1976d2;\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst ResponseContainer = styled.div<{ $success: boolean }>`\n padding: 8px;\n border-radius: 4px;\n background: ${({ $success }) => ($success ? \"#e8f5e9\" : \"#ffebee\")};\n border: 1px solid ${({ $success }) => ($success ? \"#c8e6c9\" : \"#ffcdd2\")};\n font-size: 12px;\n font-family: monospace;\n`;\n\nconst ResponseLabel = styled.span`\n font-weight: 600;\n color: #333;\n`;\n\nconst ResponseData = styled.span`\n color: #555;\n word-break: break-all;\n`;\n\ntype ApduSenderProps = {\n sessionId: string;\n onSend: (sessionId: string, apduHex: string) => string;\n responses: Map<string, ApduResponse>;\n};\n\nexport const ApduSender: React.FC<ApduSenderProps> = ({\n sessionId,\n onSend,\n responses,\n}) => {\n const [expanded, setExpanded] = useState(false);\n const [apduInput, setApduInput] = useState(\"\");\n const [lastRequestId, setLastRequestId] = useState<string | null>(null);\n\n const handleSend = () => {\n if (!apduInput.trim()) return;\n // Remove spaces and validate hex\n const cleanHex = apduInput.replace(/\\s/g, \"\").toUpperCase();\n if (!/^[0-9A-F]*$/.test(cleanHex) || cleanHex.length % 2 !== 0) {\n alert(\n \"Invalid hex string. Please enter a valid APDU in hex format (e.g., E0C4000000)\",\n );\n return;\n }\n const requestId = onSend(sessionId, cleanHex);\n setLastRequestId(requestId);\n };\n\n const lastResponse = lastRequestId ? responses.get(lastRequestId) : null;\n\n const formatBytes = (bytes: number[] | undefined): string => {\n if (!bytes || !Array.isArray(bytes)) return \"\";\n return bytes\n .map((b) => b.toString(16).padStart(2, \"0\").toUpperCase())\n .join(\" \");\n };\n\n return (\n <Container>\n <Header onClick={() => setExpanded(!expanded)}>\n <ToggleIcon $expanded={expanded}>\u25B6</ToggleIcon>\n <Title>Send APDU</Title>\n </Header>\n <Content $expanded={expanded}>\n <InputRow>\n <Input\n type=\"text\"\n placeholder=\"APDU hex (e.g., E0C4000000)\"\n value={apduInput}\n onChange={(e) => setApduInput(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && handleSend()}\n />\n <Button onClick={handleSend} disabled={!apduInput.trim()}>\n Send\n </Button>\n </InputRow>\n {lastResponse && (\n <ResponseContainer $success={lastResponse.success}>\n {lastResponse.success ? (\n <>\n {lastResponse.data && lastResponse.data.length > 0 && (\n <>\n <ResponseLabel>Data: </ResponseLabel>\n <ResponseData>\n {formatBytes(lastResponse.data)}\n </ResponseData>\n <br />\n </>\n )}\n <ResponseLabel>Status: </ResponseLabel>\n <ResponseData>\n {formatBytes(lastResponse.statusCode)}\n </ResponseData>\n </>\n ) : (\n <>\n <ResponseLabel>Error: </ResponseLabel>\n <ResponseData>{lastResponse.error}</ResponseData>\n </>\n )}\n </ResponseContainer>\n )}\n </Content>\n </Container>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["ApduSender_exports", "__export", "ApduSender", "__toCommonJS", "import_react", "import_styled_components", "import_jsx_runtime", "Container", "styled", "Header", "ToggleIcon", "$expanded", "Title", "Content", "InputRow", "Input", "Button", "ResponseContainer", "$success", "ResponseLabel", "ResponseData", "sessionId", "onSend", "responses", "expanded", "setExpanded", "apduInput", "setApduInput", "lastRequestId", "setLastRequestId", "handleSend", "cleanHex", "requestId", "lastResponse", "formatBytes", "bytes", "b", "e"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var l=(n,r)=>{for(var s in r)c(n,s,{get:r[s],enumerable:!0})},C=(n,r,s,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of S(r))!p.call(n,a)&&a!==s&&c(n,a,{get:()=>r[a],enumerable:!(o=u(r,a))||o.enumerable});return n};var m=n=>C(c({},"__esModule",{value:!0}),n);var y={};l(y,{DeviceCard:()=>v});module.exports=m(y);var d=require("./ApduSender"),e=require("./styles"),t=require("react/jsx-runtime");const g=n=>n?n.deviceStatus!=="NOT CONNECTED":!0;function f(n){switch(n){case"CONNECTED":return"success";case"LOCKED":return"warning";case"BUSY":return"info";case"NOT CONNECTED":return"error";default:return"neutral"}}function T(n){switch(String(n)){case"ReadyWithSecureChannel":return"success";case"ReadyWithoutSecureChannel":return"info";case"Connected":return"neutral";default:return"neutral"}}function D(n){return String(n).replace(/([a-z])([A-Z])/g,"$1 $2")}const v=({device:n,state:r,onDisconnect:s,onSendApdu:o,apduResponses:a})=>{const i=g(r);return(0,t.jsxs)(e.Card,{$variant:i?"default":"disconnected",children:[(0,t.jsxs)(e.CardHeader,{children:[(0,t.jsxs)(e.CardHeaderLeft,{children:[(0,t.jsx)(e.CardTitle,{children:n.name||"Unknown Device"}),r&&(0,t.jsx)(e.StatusBadge,{$variant:f(r.deviceStatus),children:r.deviceStatus})]}),i&&(0,t.jsx)(e.Button,{$variant:"danger",onClick:s,children:"Disconnect"})]}),(0,t.jsxs)(e.CardBody,{children:[(0,t.jsxs)(e.SmallText,{children:["Session ID: ",n.sessionId]}),(0,t.jsxs)(e.SmallText,{children:["Model: ",n.modelId]}),(0,t.jsxs)(e.SmallText,{children:["Transport: ",n.transport]}),(0,t.jsxs)(e.SmallText,{children:["Type: ",n.type]})]}),r&&(0,t.jsxs)(e.CardSection,{children:[(0,t.jsx)(e.SectionLabel,{children:"Session State"}),(0,t.jsx)(e.BadgeRow,{children:(0,t.jsx)(e.StatusBadge,{$variant:T(r.sessionStateType),children:D(r.sessionStateType)})}),"currentApp"in r&&r.currentApp&&(0,t.jsxs)(e.SmallText,{children:["Current App: ",r.currentApp.name," v",r.currentApp.version]}),"firmwareVersion"in r&&r.firmwareVersion&&(0,t.jsxs)(e.SmallText,{children:["Firmware: ",r.firmwareVersion.os]})]}),i&&(0,t.jsx)(d.ApduSender,{sessionId:n.sessionId,onSend:o,responses:a})]})};0&&(module.exports={DeviceCard});
2
+ //# sourceMappingURL=DeviceCard.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/screens/inspector/DeviceCard.tsx"],
4
+ "sourcesContent": ["import React from \"react\";\nimport {\n type ConnectedDevice,\n type DeviceSessionState,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type ApduResponse } from \"../../hooks/useConnectorMessages\";\nimport { ApduSender } from \"./ApduSender\";\nimport {\n BadgeRow,\n Button,\n Card,\n CardBody,\n CardHeader,\n CardHeaderLeft,\n CardSection,\n CardTitle,\n SectionLabel,\n SmallText,\n StatusBadge,\n} from \"./styles\";\n\ntype DeviceCardProps = {\n device: ConnectedDevice;\n state?: DeviceSessionState;\n onDisconnect: () => void;\n onSendApdu: (sessionId: string, apduHex: string) => string;\n apduResponses: Map<string, ApduResponse>;\n};\n\nconst isConnected = (state?: DeviceSessionState): boolean => {\n if (!state) return true; // Assume connected if no state yet\n return state.deviceStatus !== \"NOT CONNECTED\";\n};\n\n/**\n * Map deviceStatus string to a badge variant.\n */\nfunction getDeviceStatusBadgeVariant(\n status: string,\n): \"success\" | \"warning\" | \"error\" | \"info\" | \"neutral\" {\n switch (status) {\n case \"CONNECTED\":\n return \"success\";\n case \"LOCKED\":\n return \"warning\";\n case \"BUSY\":\n return \"info\";\n case \"NOT CONNECTED\":\n return \"error\";\n default:\n return \"neutral\";\n }\n}\n\n/**\n * Map sessionStateType string to a badge variant.\n */\nfunction getSessionStateBadgeVariant(\n stateType: string | number,\n): \"success\" | \"warning\" | \"error\" | \"info\" | \"neutral\" {\n const stateStr = String(stateType);\n switch (stateStr) {\n case \"ReadyWithSecureChannel\":\n return \"success\";\n case \"ReadyWithoutSecureChannel\":\n return \"info\";\n case \"Connected\":\n return \"neutral\";\n default:\n return \"neutral\";\n }\n}\n\n/**\n * Format sessionStateType for display (add spaces before uppercase letters).\n */\nfunction formatSessionStateType(stateType: string | number): string {\n return String(stateType).replace(/([a-z])([A-Z])/g, \"$1 $2\");\n}\n\nexport const DeviceCard: React.FC<DeviceCardProps> = ({\n device,\n state,\n onDisconnect,\n onSendApdu,\n apduResponses,\n}) => {\n const connected = isConnected(state);\n\n return (\n <Card $variant={connected ? \"default\" : \"disconnected\"}>\n <CardHeader>\n <CardHeaderLeft>\n <CardTitle>{device.name || \"Unknown Device\"}</CardTitle>\n {state && (\n <StatusBadge\n $variant={getDeviceStatusBadgeVariant(state.deviceStatus)}\n >\n {state.deviceStatus}\n </StatusBadge>\n )}\n </CardHeaderLeft>\n {connected && (\n <Button $variant=\"danger\" onClick={onDisconnect}>\n Disconnect\n </Button>\n )}\n </CardHeader>\n\n <CardBody>\n <SmallText>Session ID: {device.sessionId}</SmallText>\n <SmallText>Model: {device.modelId}</SmallText>\n <SmallText>Transport: {device.transport}</SmallText>\n <SmallText>Type: {device.type}</SmallText>\n </CardBody>\n\n {state && (\n <CardSection>\n <SectionLabel>Session State</SectionLabel>\n <BadgeRow>\n <StatusBadge\n $variant={getSessionStateBadgeVariant(state.sessionStateType)}\n >\n {formatSessionStateType(state.sessionStateType)}\n </StatusBadge>\n </BadgeRow>\n {\"currentApp\" in state && state.currentApp && (\n <SmallText>\n Current App: {state.currentApp.name} v{state.currentApp.version}\n </SmallText>\n )}\n {\"firmwareVersion\" in state && state.firmwareVersion && (\n <SmallText>Firmware: {state.firmwareVersion.os}</SmallText>\n )}\n </CardSection>\n )}\n\n {connected && (\n <ApduSender\n sessionId={device.sessionId}\n onSend={onSendApdu}\n responses={apduResponses}\n />\n )}\n </Card>\n );\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,IAAA,eAAAC,EAAAH,GAOA,IAAAI,EAA2B,wBAC3BC,EAYO,oBAyECC,EAAA,6BA/DR,MAAMC,EAAeC,GACdA,EACEA,EAAM,eAAiB,gBADX,GAOrB,SAASC,EACPC,EACsD,CACtD,OAAQA,EAAQ,CACd,IAAK,YACH,MAAO,UACT,IAAK,SACH,MAAO,UACT,IAAK,OACH,MAAO,OACT,IAAK,gBACH,MAAO,QACT,QACE,MAAO,SACX,CACF,CAKA,SAASC,EACPC,EACsD,CAEtD,OADiB,OAAOA,CAAS,EACf,CAChB,IAAK,yBACH,MAAO,UACT,IAAK,4BACH,MAAO,OACT,IAAK,YACH,MAAO,UACT,QACE,MAAO,SACX,CACF,CAKA,SAASC,EAAuBD,EAAoC,CAClE,OAAO,OAAOA,CAAS,EAAE,QAAQ,kBAAmB,OAAO,CAC7D,CAEO,MAAMV,EAAwC,CAAC,CACpD,OAAAY,EACA,MAAAN,EACA,aAAAO,EACA,WAAAC,EACA,cAAAC,CACF,IAAM,CACJ,MAAMC,EAAYX,EAAYC,CAAK,EAEnC,SACE,QAAC,QAAK,SAAUU,EAAY,UAAY,eACtC,qBAAC,cACC,qBAAC,kBACC,oBAAC,aAAW,SAAAJ,EAAO,MAAQ,iBAAiB,EAC3CN,MACC,OAAC,eACC,SAAUC,EAA4BD,EAAM,YAAY,EAEvD,SAAAA,EAAM,aACT,GAEJ,EACCU,MACC,OAAC,UAAO,SAAS,SAAS,QAASH,EAAc,sBAEjD,GAEJ,KAEA,QAAC,YACC,qBAAC,aAAU,yBAAaD,EAAO,WAAU,KACzC,QAAC,aAAU,oBAAQA,EAAO,SAAQ,KAClC,QAAC,aAAU,wBAAYA,EAAO,WAAU,KACxC,QAAC,aAAU,mBAAOA,EAAO,MAAK,GAChC,EAECN,MACC,QAAC,eACC,oBAAC,gBAAa,yBAAa,KAC3B,OAAC,YACC,mBAAC,eACC,SAAUG,EAA4BH,EAAM,gBAAgB,EAE3D,SAAAK,EAAuBL,EAAM,gBAAgB,EAChD,EACF,EACC,eAAgBA,GAASA,EAAM,eAC9B,QAAC,aAAU,0BACKA,EAAM,WAAW,KAAK,KAAGA,EAAM,WAAW,SAC1D,EAED,oBAAqBA,GAASA,EAAM,oBACnC,QAAC,aAAU,uBAAWA,EAAM,gBAAgB,IAAG,GAEnD,EAGDU,MACC,OAAC,cACC,UAAWJ,EAAO,UAClB,OAAQE,EACR,UAAWC,EACb,GAEJ,CAEJ",
6
+ "names": ["DeviceCard_exports", "__export", "DeviceCard", "__toCommonJS", "import_ApduSender", "import_styles", "import_jsx_runtime", "isConnected", "state", "getDeviceStatusBadgeVariant", "status", "getSessionStateBadgeVariant", "stateType", "formatSessionStateType", "device", "onDisconnect", "onSendApdu", "apduResponses", "connected"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var a=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var b=(o,t)=>{for(var r in t)a(o,r,{get:t[r],enumerable:!0})},f=(o,t,r,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of S(t))!y.call(o,n)&&n!==r&&a(o,n,{get:()=>t[n],enumerable:!(c=m(t,n))||c.enumerable});return o};var g=o=>f(a({},"__esModule",{value:!0}),o);var w={};b(w,{DeviceDiscoverySection:()=>h});module.exports=g(w);var v=require("./DiscoveredDeviceCard"),e=require("./styles"),i=require("react/jsx-runtime");const h=({discoveredDevices:o,isListening:t,isActivelyDiscovering:r,startListening:c,stopListening:n,startDiscovering:l,stopDiscovering:p,connectDevice:d})=>{const D=t||r;return(0,i.jsxs)(e.Section,{children:[(0,i.jsx)(e.SectionTitle,{children:"Device Discovery"}),(0,i.jsxs)(e.ButtonGroup,{children:[(0,i.jsx)(e.Button,{$variant:t?"warning":"primary",$size:"medium",onClick:t?n:c,disabled:r,children:t?"Stop Listening":"Listen for Devices"}),(0,i.jsx)(e.Button,{$variant:r?"warning":"success",$size:"medium",onClick:r?p:l,disabled:t,children:r?"Stop Discovery":"Start Discovery"})]}),t&&o.length===0&&(0,i.jsx)(e.SmallText,{children:"Listening for available devices..."}),r&&o.length===0&&(0,i.jsx)(e.SmallText,{children:"Discovering devices..."}),o.length>0&&(0,i.jsx)(e.DeviceList,{children:o.map(s=>(0,i.jsx)(v.DiscoveredDeviceCard,{device:s,onConnect:u=>d(s.id,u)},s.id))}),!D&&o.length===0&&(0,i.jsx)(e.SmallText,{children:'Use "Listen for Devices" to see already-paired devices, or "Start Discovery" to scan for new devices.'}),(0,i.jsx)(e.ItalicNote,{children:"Note: this may not work in web apps due to browser security restrictions. WebHID and WebBLE require a user gesture (click) in the app context to trigger device discovery."})]})};0&&(module.exports={DeviceDiscoverySection});
2
+ //# sourceMappingURL=DeviceDiscoverySection.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/screens/inspector/DeviceDiscoverySection.tsx"],
4
+ "sourcesContent": ["/**\n * @file DeviceDiscoverySection\n *\n * Section of the Inspector that handles device discovery.\n * Provides buttons to start/stop passive listening and active discovery,\n * and displays the list of discovered devices.\n */\n\nimport React from \"react\";\nimport { type DiscoveredDevice } from \"@ledgerhq/device-management-kit\";\n\nimport { DiscoveredDeviceCard } from \"./DiscoveredDeviceCard\";\nimport {\n Button,\n ButtonGroup,\n DeviceList,\n ItalicNote,\n Section,\n SectionTitle,\n SmallText,\n} from \"./styles\";\n\ntype DeviceDiscoverySectionProps = {\n discoveredDevices: DiscoveredDevice[];\n isListening: boolean;\n isActivelyDiscovering: boolean;\n startListening: () => void;\n stopListening: () => void;\n startDiscovering: () => void;\n stopDiscovering: () => void;\n connectDevice: (\n deviceId: string,\n sessionRefresherOptions?: {\n isRefresherDisabled: boolean;\n pollingInterval?: number;\n },\n ) => void;\n};\n\nexport const DeviceDiscoverySection: React.FC<DeviceDiscoverySectionProps> = ({\n discoveredDevices,\n isListening,\n isActivelyDiscovering,\n startListening,\n stopListening,\n startDiscovering,\n stopDiscovering,\n connectDevice,\n}) => {\n const isAnyDiscoveryActive = isListening || isActivelyDiscovering;\n\n return (\n <Section>\n <SectionTitle>Device Discovery</SectionTitle>\n\n <ButtonGroup>\n <Button\n $variant={isListening ? \"warning\" : \"primary\"}\n $size=\"medium\"\n onClick={isListening ? stopListening : startListening}\n disabled={isActivelyDiscovering}\n >\n {isListening ? \"Stop Listening\" : \"Listen for Devices\"}\n </Button>\n\n <Button\n $variant={isActivelyDiscovering ? \"warning\" : \"success\"}\n $size=\"medium\"\n onClick={isActivelyDiscovering ? stopDiscovering : startDiscovering}\n disabled={isListening}\n >\n {isActivelyDiscovering ? \"Stop Discovery\" : \"Start Discovery\"}\n </Button>\n </ButtonGroup>\n\n {isListening && discoveredDevices.length === 0 && (\n <SmallText>Listening for available devices...</SmallText>\n )}\n {isActivelyDiscovering && discoveredDevices.length === 0 && (\n <SmallText>Discovering devices...</SmallText>\n )}\n\n {discoveredDevices.length > 0 && (\n <DeviceList>\n {discoveredDevices.map((device) => (\n <DiscoveredDeviceCard\n key={device.id}\n device={device}\n onConnect={(options) => connectDevice(device.id, options)}\n />\n ))}\n </DeviceList>\n )}\n\n {!isAnyDiscoveryActive && discoveredDevices.length === 0 && (\n <SmallText>\n Use &quot;Listen for Devices&quot; to see already-paired devices, or\n &quot;Start Discovery&quot; to scan for new devices.\n </SmallText>\n )}\n\n <ItalicNote>\n Note: this may not work in web apps due to browser security\n restrictions. WebHID and WebBLE require a user gesture (click) in the\n app context to trigger device discovery.\n </ItalicNote>\n </Section>\n );\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAWA,IAAAI,EAAqC,kCACrCC,EAQO,oBAiCDC,EAAA,6BAdC,MAAMJ,EAAgE,CAAC,CAC5E,kBAAAK,EACA,YAAAC,EACA,sBAAAC,EACA,eAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,cAAAC,CACF,IAAM,CACJ,MAAMC,EAAuBP,GAAeC,EAE5C,SACE,QAAC,WACC,oBAAC,gBAAa,4BAAgB,KAE9B,QAAC,eACC,oBAAC,UACC,SAAUD,EAAc,UAAY,UACpC,MAAM,SACN,QAASA,EAAcG,EAAgBD,EACvC,SAAUD,EAET,SAAAD,EAAc,iBAAmB,qBACpC,KAEA,OAAC,UACC,SAAUC,EAAwB,UAAY,UAC9C,MAAM,SACN,QAASA,EAAwBI,EAAkBD,EACnD,SAAUJ,EAET,SAAAC,EAAwB,iBAAmB,kBAC9C,GACF,EAECD,GAAeD,EAAkB,SAAW,MAC3C,OAAC,aAAU,8CAAkC,EAE9CE,GAAyBF,EAAkB,SAAW,MACrD,OAAC,aAAU,kCAAsB,EAGlCA,EAAkB,OAAS,MAC1B,OAAC,cACE,SAAAA,EAAkB,IAAKS,MACtB,OAAC,wBAEC,OAAQA,EACR,UAAYC,GAAYH,EAAcE,EAAO,GAAIC,CAAO,GAFnDD,EAAO,EAGd,CACD,EACH,EAGD,CAACD,GAAwBR,EAAkB,SAAW,MACrD,OAAC,aAAU,iHAGX,KAGF,OAAC,cAAW,sLAIZ,GACF,CAEJ",
6
+ "names": ["DeviceDiscoverySection_exports", "__export", "DeviceDiscoverySection", "__toCommonJS", "import_DiscoveredDeviceCard", "import_styles", "import_jsx_runtime", "discoveredDevices", "isListening", "isActivelyDiscovering", "startListening", "stopListening", "startDiscovering", "stopDiscovering", "connectDevice", "isAnyDiscoveryActive", "device", "options"]
7
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";var C=Object.create;var c=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var D=(e,l)=>{for(var i in l)c(e,i,{get:l[i],enumerable:!0})},f=(e,l,i,p)=>{if(l&&typeof l=="object"||typeof l=="function")for(let t of v(l))!h.call(e,t)&&t!==i&&c(e,t,{get:()=>l[t],enumerable:!(p=u(l,t))||p.enumerable});return e};var w=(e,l,i)=>(i=e!=null?C(b(e)):{},f(l||!e||!e.__esModule?c(i,"default",{value:e,enumerable:!0}):i,e)),y=e=>f(c({},"__esModule",{value:!0}),e);var $={};D($,{DiscoveredDeviceCard:()=>L});module.exports=y($);var r=require("react"),s=w(require("styled-components")),n=require("./styles"),o=require("react/jsx-runtime");const R=s.default.div`
2
+ display: flex;
3
+ gap: 16px;
4
+ `,I=s.default.div`
5
+ display: flex;
6
+ flex-direction: column;
7
+ flex: 1;
8
+ min-width: 0;
9
+ `,T=s.default.div`
10
+ display: flex;
11
+ flex-direction: column;
12
+ align-items: flex-end;
13
+ gap: 6px;
14
+ flex-shrink: 0;
15
+ `,k=s.default.div`
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: 2px;
19
+ margin-top: 4px;
20
+ `,O=s.default.span`
21
+ font-size: 11px;
22
+ font-weight: 600;
23
+ color: #888;
24
+ `,P=s.default.label`
25
+ display: flex;
26
+ align-items: center;
27
+ gap: 6px;
28
+ font-size: 11px;
29
+ color: #555;
30
+ cursor: pointer;
31
+ white-space: nowrap;
32
+ `,S=s.default.div`
33
+ display: flex;
34
+ align-items: center;
35
+ gap: 6px;
36
+ font-size: 11px;
37
+ color: #555;
38
+ white-space: nowrap;
39
+ `,z=s.default.input`
40
+ width: 60px;
41
+ padding: 2px 6px;
42
+ border: 1px solid #ddd;
43
+ border-radius: 3px;
44
+ font-size: 11px;
45
+ font-family: monospace;
46
+
47
+ &:focus {
48
+ outline: none;
49
+ border-color: #2196f3;
50
+ }
51
+
52
+ &:disabled {
53
+ opacity: 0.4;
54
+ cursor: not-allowed;
55
+ }
56
+ `,L=({device:e,onConnect:l})=>{const[i,p]=(0,r.useState)(!1),[t,x]=(0,r.useState)(!1),[d,m]=(0,r.useState)(""),g=(0,r.useCallback)(()=>{const a=d?parseInt(d,10):void 0;l({isRefresherDisabled:t,pollingInterval:a&&!isNaN(a)?a:void 0})},[l,t,d]);return(0,o.jsx)(n.Card,{$variant:"discovered",children:(0,o.jsxs)(R,{children:[(0,o.jsxs)(I,{children:[(0,o.jsx)(n.CardTitle,{children:e.name||"Unknown Device"}),(0,o.jsxs)(k,{children:[(0,o.jsxs)(n.SmallText,{children:["ID: ",e.id]}),(0,o.jsxs)(n.SmallText,{children:["Model: ",e.deviceModel.name]}),(0,o.jsxs)(n.SmallText,{children:["Transport: ",e.transport]}),e.rssi!==void 0&&e.rssi!==null&&(0,o.jsxs)(n.SmallText,{children:["Signal: ",e.rssi," dBm"]})]})]}),(0,o.jsxs)(T,{children:[(0,o.jsx)(n.Button,{$variant:"success",onClick:g,children:"Connect"}),(0,o.jsxs)(n.CollapsibleHeader,{onClick:()=>p(!i),children:[(0,o.jsx)(n.CollapsibleToggle,{$expanded:i,children:"\u25B6"}),(0,o.jsx)(O,{children:"Options"})]}),(0,o.jsxs)(n.CollapsibleContent,{$expanded:i,children:[(0,o.jsxs)(P,{children:[(0,o.jsx)("input",{type:"checkbox",checked:t,onChange:a=>x(a.target.checked)}),"Disable refresher"]}),(0,o.jsxs)(S,{children:[(0,o.jsx)("span",{children:"Polling (ms):"}),(0,o.jsx)(z,{type:"number",min:"1000",placeholder:"1000",value:d,onChange:a=>m(a.target.value),disabled:t})]})]})]})]})})};0&&(module.exports={DiscoveredDeviceCard});
57
+ //# sourceMappingURL=DiscoveredDeviceCard.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/screens/inspector/DiscoveredDeviceCard.tsx"],
4
+ "sourcesContent": ["import React, { useCallback, useState } from \"react\";\nimport { type DiscoveredDevice } from \"@ledgerhq/device-management-kit\";\nimport styled from \"styled-components\";\n\nimport {\n Button,\n Card,\n CardTitle,\n CollapsibleContent,\n CollapsibleHeader,\n CollapsibleToggle,\n SmallText,\n} from \"./styles\";\n\n// ============================================================================\n// Two-column layout\n// ============================================================================\n\nconst CardColumns = styled.div`\n display: flex;\n gap: 16px;\n`;\n\nconst LeftColumn = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n`;\n\nconst RightColumn = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 6px;\n flex-shrink: 0;\n`;\n\nconst DeviceInfo = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 4px;\n`;\n\n// ============================================================================\n// Compact connect options styled components\n// ============================================================================\n\nconst OptionsLabel = styled.span`\n font-size: 11px;\n font-weight: 600;\n color: #888;\n`;\n\nconst OptionRow = styled.label`\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n color: #555;\n cursor: pointer;\n white-space: nowrap;\n`;\n\nconst PollingRow = styled.div`\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n color: #555;\n white-space: nowrap;\n`;\n\nconst PollingInput = styled.input`\n width: 60px;\n padding: 2px 6px;\n border: 1px solid #ddd;\n border-radius: 3px;\n font-size: 11px;\n font-family: monospace;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n\n &:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n`;\n\n// ============================================================================\n// Component\n// ============================================================================\n\ntype DiscoveredDeviceCardProps = {\n device: DiscoveredDevice;\n onConnect: (sessionRefresherOptions?: {\n isRefresherDisabled: boolean;\n pollingInterval?: number;\n }) => void;\n};\n\nexport const DiscoveredDeviceCard: React.FC<DiscoveredDeviceCardProps> = ({\n device,\n onConnect,\n}) => {\n const [optionsExpanded, setOptionsExpanded] = useState(false);\n const [isRefresherDisabled, setIsRefresherDisabled] = useState(false);\n const [pollingInterval, setPollingInterval] = useState<string>(\"\");\n\n const handleConnect = useCallback(() => {\n const parsedInterval = pollingInterval\n ? parseInt(pollingInterval, 10)\n : undefined;\n onConnect({\n isRefresherDisabled,\n pollingInterval:\n parsedInterval && !isNaN(parsedInterval) ? parsedInterval : undefined,\n });\n }, [onConnect, isRefresherDisabled, pollingInterval]);\n\n return (\n <Card $variant=\"discovered\">\n <CardColumns>\n <LeftColumn>\n <CardTitle>{device.name || \"Unknown Device\"}</CardTitle>\n <DeviceInfo>\n <SmallText>ID: {device.id}</SmallText>\n <SmallText>Model: {device.deviceModel.name}</SmallText>\n <SmallText>Transport: {device.transport}</SmallText>\n {device.rssi !== undefined && device.rssi !== null && (\n <SmallText>Signal: {device.rssi} dBm</SmallText>\n )}\n </DeviceInfo>\n </LeftColumn>\n\n <RightColumn>\n <Button $variant=\"success\" onClick={handleConnect}>\n Connect\n </Button>\n <CollapsibleHeader\n onClick={() => setOptionsExpanded(!optionsExpanded)}\n >\n <CollapsibleToggle $expanded={optionsExpanded}>\n &#9654;\n </CollapsibleToggle>\n <OptionsLabel>Options</OptionsLabel>\n </CollapsibleHeader>\n <CollapsibleContent $expanded={optionsExpanded}>\n <OptionRow>\n <input\n type=\"checkbox\"\n checked={isRefresherDisabled}\n onChange={(e) => setIsRefresherDisabled(e.target.checked)}\n />\n Disable refresher\n </OptionRow>\n <PollingRow>\n <span>Polling (ms):</span>\n <PollingInput\n type=\"number\"\n min=\"1000\"\n placeholder=\"1000\"\n value={pollingInterval}\n onChange={(e) => setPollingInterval(e.target.value)}\n disabled={isRefresherDisabled}\n />\n </PollingRow>\n </CollapsibleContent>\n </RightColumn>\n </CardColumns>\n </Card>\n );\n};\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA6C,iBAE7CC,EAAmB,gCAEnBC,EAQO,oBAoHGC,EAAA,6BA9GV,MAAMC,EAAc,EAAAC,QAAO;AAAA;AAAA;AAAA,EAKrBC,EAAa,EAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpBE,EAAc,EAAAF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQrBG,EAAa,EAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAWpBI,EAAe,EAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA,EAMtBK,EAAY,EAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUnBM,EAAa,EAAAN,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASpBO,EAAe,EAAAP,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+BfP,EAA4D,CAAC,CACxE,OAAAe,EACA,UAAAC,CACF,IAAM,CACJ,KAAM,CAACC,EAAiBC,CAAkB,KAAI,YAAS,EAAK,EACtD,CAACC,EAAqBC,CAAsB,KAAI,YAAS,EAAK,EAC9D,CAACC,EAAiBC,CAAkB,KAAI,YAAiB,EAAE,EAE3DC,KAAgB,eAAY,IAAM,CACtC,MAAMC,EAAiBH,EACnB,SAASA,EAAiB,EAAE,EAC5B,OACJL,EAAU,CACR,oBAAAG,EACA,gBACEK,GAAkB,CAAC,MAAMA,CAAc,EAAIA,EAAiB,MAChE,CAAC,CACH,EAAG,CAACR,EAAWG,EAAqBE,CAAe,CAAC,EAEpD,SACE,OAAC,QAAK,SAAS,aACb,oBAACf,EAAA,CACC,qBAACE,EAAA,CACC,oBAAC,aAAW,SAAAO,EAAO,MAAQ,iBAAiB,KAC5C,QAACL,EAAA,CACC,qBAAC,aAAU,iBAAKK,EAAO,IAAG,KAC1B,QAAC,aAAU,oBAAQA,EAAO,YAAY,MAAK,KAC3C,QAAC,aAAU,wBAAYA,EAAO,WAAU,EACvCA,EAAO,OAAS,QAAaA,EAAO,OAAS,SAC5C,QAAC,aAAU,qBAASA,EAAO,KAAK,QAAI,GAExC,GACF,KAEA,QAACN,EAAA,CACC,oBAAC,UAAO,SAAS,UAAU,QAASc,EAAe,mBAEnD,KACA,QAAC,qBACC,QAAS,IAAML,EAAmB,CAACD,CAAe,EAElD,oBAAC,qBAAkB,UAAWA,EAAiB,kBAE/C,KACA,OAACN,EAAA,CAAa,mBAAO,GACvB,KACA,QAAC,sBAAmB,UAAWM,EAC7B,qBAACL,EAAA,CACC,oBAAC,SACC,KAAK,WACL,QAASO,EACT,SAAWM,GAAML,EAAuBK,EAAE,OAAO,OAAO,EAC1D,EAAE,qBAEJ,KACA,QAACZ,EAAA,CACC,oBAAC,QAAK,yBAAa,KACnB,OAACC,EAAA,CACC,KAAK,SACL,IAAI,OACJ,YAAY,OACZ,MAAOO,EACP,SAAWI,GAAMH,EAAmBG,EAAE,OAAO,KAAK,EAClD,SAAUN,EACZ,GACF,GACF,GACF,GACF,EACF,CAEJ",
6
+ "names": ["DiscoveredDeviceCard_exports", "__export", "DiscoveredDeviceCard", "__toCommonJS", "import_react", "import_styled_components", "import_styles", "import_jsx_runtime", "CardColumns", "styled", "LeftColumn", "RightColumn", "DeviceInfo", "OptionsLabel", "OptionRow", "PollingRow", "PollingInput", "device", "onConnect", "optionsExpanded", "setOptionsExpanded", "isRefresherDisabled", "setIsRefresherDisabled", "pollingInterval", "setPollingInterval", "handleConnect", "parsedInterval", "e"]
7
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";var b=Object.create;var p=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var C=(e,o)=>{for(var n in o)p(e,n,{get:o[n],enumerable:!0})},g=(e,o,n,s)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of h(o))!m.call(e,r)&&r!==n&&p(e,r,{get:()=>o[r],enumerable:!(s=x(o,r))||s.enumerable});return e};var y=(e,o,n)=>(n=e!=null?b(v(e)):{},g(o||!e||!e.__esModule?p(n,"default",{value:e,enumerable:!0}):n,e)),R=e=>g(p({},"__esModule",{value:!0}),e);var S={};C(S,{MyLedgerProviderControl:()=>M});module.exports=R(S);var i=require("react"),d=y(require("styled-components")),t=require("react/jsx-runtime");const L=d.default.div`
2
+ display: flex;
3
+ flex-direction: row;
4
+ align-items: center;
5
+ gap: 8px;
6
+ padding: 12px 16px;
7
+ background: #f5f5f5;
8
+ border-radius: 8px;
9
+ margin-bottom: 16px;
10
+ `,I=d.default.label`
11
+ font-size: 14px;
12
+ font-weight: 500;
13
+ color: #333;
14
+ `,P=d.default.input`
15
+ width: 80px;
16
+ padding: 6px 8px;
17
+ border: 1px solid #ddd;
18
+ border-radius: 4px;
19
+ font-size: 14px;
20
+ font-family: monospace;
21
+
22
+ &:focus {
23
+ outline: none;
24
+ border-color: #2196f3;
25
+ }
26
+ `,E=d.default.button`
27
+ padding: 4px 8px;
28
+ border: 1px solid #ddd;
29
+ border-radius: 4px;
30
+ background: white;
31
+ font-size: 14px;
32
+ cursor: pointer;
33
+ transition: all 0.15s ease;
34
+
35
+ &:hover {
36
+ background: #f0f0f0;
37
+ border-color: #bbb;
38
+ }
39
+ `,M=({currentValue:e,onGet:o,onSet:n})=>{const[s,r]=(0,i.useState)(""),[u,l]=(0,i.useState)(!1);return(0,i.useEffect)(()=>{o()},[o]),(0,i.useEffect)(()=>{e!==null&&!u&&r(String(e))},[e,u]),(0,t.jsxs)(L,{children:[(0,t.jsx)(I,{htmlFor:"provider-input",children:"My Ledger API provider:"}),(0,t.jsx)(P,{id:"provider-input",type:"number",min:"0",value:s,onChange:c=>{const f=c.target.value;r(f),l(!0);const a=parseInt(f,10);!isNaN(a)&&a>=0&&String(a)===f&&n(a)},onBlur:()=>l(!1)}),(0,t.jsx)(E,{onClick:()=>{l(!1),o(),e!==null&&r(String(e))},title:"Refresh",children:"\u{1F504}"})]})};0&&(module.exports={MyLedgerProviderControl});
40
+ //# sourceMappingURL=MyLedgerProviderControl.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/screens/inspector/MyLedgerProviderControl.tsx"],
4
+ "sourcesContent": ["import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\nconst Container = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: #f5f5f5;\n border-radius: 8px;\n margin-bottom: 16px;\n`;\n\nconst Label = styled.label`\n font-size: 14px;\n font-weight: 500;\n color: #333;\n`;\n\nconst Input = styled.input`\n width: 80px;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n font-family: monospace;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n`;\n\nconst RefreshButton = styled.button`\n padding: 4px 8px;\n border: 1px solid #ddd;\n border-radius: 4px;\n background: white;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.15s ease;\n\n &:hover {\n background: #f0f0f0;\n border-color: #bbb;\n }\n`;\n\ntype MyLedgerProviderControlProps = {\n currentValue: number | null;\n onGet: () => void;\n onSet: (value: number) => void;\n};\n\nexport const MyLedgerProviderControl: React.FC<\n MyLedgerProviderControlProps\n> = ({ currentValue, onGet, onSet }) => {\n const [inputValue, setInputValue] = useState<string>(\"\");\n const [isEditing, setIsEditing] = useState(false);\n\n // Fetch provider value on mount\n useEffect(() => {\n onGet();\n }, [onGet]);\n\n // Sync input with current value when it changes from server (only if not actively editing)\n useEffect(() => {\n if (currentValue !== null && !isEditing) {\n setInputValue(String(currentValue));\n }\n }, [currentValue, isEditing]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInputValue(value);\n setIsEditing(true);\n\n const parsed = parseInt(value, 10);\n if (!isNaN(parsed) && parsed >= 0 && String(parsed) === value) {\n onSet(parsed);\n }\n };\n\n const handleRefresh = () => {\n setIsEditing(false);\n onGet();\n // Immediately sync to current value if available\n if (currentValue !== null) {\n setInputValue(String(currentValue));\n }\n };\n\n return (\n <Container>\n <Label htmlFor=\"provider-input\">My Ledger API provider:</Label>\n <Input\n id=\"provider-input\"\n type=\"number\"\n min=\"0\"\n value={inputValue}\n onChange={handleChange}\n onBlur={() => setIsEditing(false)}\n />\n <RefreshButton onClick={handleRefresh} title=\"Refresh\">\n \uD83D\uDD04\n </RefreshButton>\n </Container>\n );\n};\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA2C,iBAC3CC,EAAmB,gCA6FfC,EAAA,6BA3FJ,MAAMC,EAAY,EAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWnBC,EAAQ,EAAAD,QAAO;AAAA;AAAA;AAAA;AAAA,EAMfE,EAAQ,EAAAF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcfG,EAAgB,EAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBhBN,EAET,CAAC,CAAE,aAAAU,EAAc,MAAAC,EAAO,MAAAC,CAAM,IAAM,CACtC,KAAM,CAACC,EAAYC,CAAa,KAAI,YAAiB,EAAE,EACjD,CAACC,EAAWC,CAAY,KAAI,YAAS,EAAK,EAGhD,sBAAU,IAAM,CACdL,EAAM,CACR,EAAG,CAACA,CAAK,CAAC,KAGV,aAAU,IAAM,CACVD,IAAiB,MAAQ,CAACK,GAC5BD,EAAc,OAAOJ,CAAY,CAAC,CAEtC,EAAG,CAACA,EAAcK,CAAS,CAAC,KAuB1B,QAACV,EAAA,CACC,oBAACE,EAAA,CAAM,QAAQ,iBAAiB,mCAAuB,KACvD,OAACC,EAAA,CACC,GAAG,iBACH,KAAK,SACL,IAAI,IACJ,MAAOK,EACP,SA5BgBI,GAA2C,CAC/D,MAAMC,EAAQD,EAAE,OAAO,MACvBH,EAAcI,CAAK,EACnBF,EAAa,EAAI,EAEjB,MAAMG,EAAS,SAASD,EAAO,EAAE,EAC7B,CAAC,MAAMC,CAAM,GAAKA,GAAU,GAAK,OAAOA,CAAM,IAAMD,GACtDN,EAAMO,CAAM,CAEhB,EAoBM,OAAQ,IAAMH,EAAa,EAAK,EAClC,KACA,OAACP,EAAA,CAAc,QApBG,IAAM,CAC1BO,EAAa,EAAK,EAClBL,EAAM,EAEFD,IAAiB,MACnBI,EAAc,OAAOJ,CAAY,CAAC,CAEtC,EAa2C,MAAM,UAAU,qBAEvD,GACF,CAEJ",
6
+ "names": ["MyLedgerProviderControl_exports", "__export", "MyLedgerProviderControl", "__toCommonJS", "import_react", "import_styled_components", "import_jsx_runtime", "Container", "styled", "Label", "Input", "RefreshButton", "currentValue", "onGet", "onSet", "inputValue", "setInputValue", "isEditing", "setIsEditing", "e", "value", "parsed"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var v=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var f=(n,s)=>{for(var i in s)v(n,i,{get:s[i],enumerable:!0})},y=(n,s,i,r)=>{if(s&&typeof s=="object"||typeof s=="function")for(let c of l(s))!C.call(n,c)&&c!==i&&v(n,c,{get:()=>s[c],enumerable:!(r=m(s,c))||r.enumerable});return n};var I=n=>y(v({},"__esModule",{value:!0}),n);var M={};f(M,{SessionsSection:()=>A});module.exports=I(M);var g=require("react"),D=require("./DeviceCard"),o=require("./styles"),e=require("react/jsx-runtime");const h=(n,s)=>{const i=s.get(n.sessionId);return i?i.deviceStatus!=="NOT CONNECTED":!0},A=({devices:n,sessionStates:s,onDisconnect:i,onSendApdu:r,apduResponses:c,isAnyDiscoveryActive:u})=>{const{activeDevices:d,disconnectedDevices:p}=(0,g.useMemo)(()=>{const t=[],S=[];for(const a of n)h(a,s)?t.push(a):S.push(a);return{activeDevices:t,disconnectedDevices:S}},[n,s]);return n.length===0&&!u?(0,e.jsx)(o.CenteredMessage,{children:(0,e.jsx)("p",{children:"No devices connected yet."})}):(0,e.jsxs)(e.Fragment,{children:[d.length>0&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)(o.SectionTitle,{children:["Active Sessions (",d.length,")"]}),(0,e.jsx)(o.DeviceList,{style:{marginBottom:16},children:d.map(t=>(0,e.jsx)(D.DeviceCard,{device:t,state:s.get(t.sessionId),onDisconnect:()=>i(t.sessionId),onSendApdu:r,apduResponses:c},t.sessionId))})]}),p.length>0&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)(o.SubsectionTitle,{children:["Inactive Sessions (",p.length,")"]}),(0,e.jsx)(o.DeviceList,{children:p.map(t=>(0,e.jsx)(D.DeviceCard,{device:t,state:s.get(t.sessionId),onDisconnect:()=>i(t.sessionId),onSendApdu:r,apduResponses:c},t.sessionId))})]})]})};0&&(module.exports={SessionsSection});
2
+ //# sourceMappingURL=SessionsSection.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/screens/inspector/SessionsSection.tsx"],
4
+ "sourcesContent": ["/**\n * @file SessionsSection\n *\n * Section of the Inspector that displays device sessions.\n * Shows active sessions (connected devices) and disconnected sessions separately.\n */\n\nimport React, { useMemo } from \"react\";\nimport {\n type ConnectedDevice,\n type DeviceSessionState,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type ApduResponse } from \"../../hooks/useConnectorMessages\";\nimport { DeviceCard } from \"./DeviceCard\";\nimport {\n CenteredMessage,\n DeviceList,\n SectionTitle,\n SubsectionTitle,\n} from \"./styles\";\n\ntype SessionsSectionProps = {\n devices: ConnectedDevice[];\n sessionStates: Map<string, DeviceSessionState>;\n onDisconnect: (sessionId: string) => void;\n onSendApdu: (sessionId: string, apduHex: string) => string;\n apduResponses: Map<string, ApduResponse>;\n isAnyDiscoveryActive: boolean;\n};\n\nconst isDeviceConnected = (\n device: ConnectedDevice,\n sessionStates: Map<string, DeviceSessionState>,\n): boolean => {\n const state = sessionStates.get(device.sessionId);\n if (!state) return true; // Assume connected if no state yet\n return state.deviceStatus !== \"NOT CONNECTED\";\n};\n\nexport const SessionsSection: React.FC<SessionsSectionProps> = ({\n devices,\n sessionStates,\n onDisconnect,\n onSendApdu,\n apduResponses,\n isAnyDiscoveryActive,\n}) => {\n const { activeDevices, disconnectedDevices } = useMemo(() => {\n const active: ConnectedDevice[] = [];\n const disconnected: ConnectedDevice[] = [];\n\n for (const device of devices) {\n if (isDeviceConnected(device, sessionStates)) {\n active.push(device);\n } else {\n disconnected.push(device);\n }\n }\n\n return { activeDevices: active, disconnectedDevices: disconnected };\n }, [devices, sessionStates]);\n\n // Empty state\n if (devices.length === 0 && !isAnyDiscoveryActive) {\n return (\n <CenteredMessage>\n <p>No devices connected yet.</p>\n </CenteredMessage>\n );\n }\n\n return (\n <>\n {/* Active Sessions */}\n {activeDevices.length > 0 && (\n <>\n <SectionTitle>Active Sessions ({activeDevices.length})</SectionTitle>\n <DeviceList style={{ marginBottom: 16 }}>\n {activeDevices.map((device) => (\n <DeviceCard\n key={device.sessionId}\n device={device}\n state={sessionStates.get(device.sessionId)}\n onDisconnect={() => onDisconnect(device.sessionId)}\n onSendApdu={onSendApdu}\n apduResponses={apduResponses}\n />\n ))}\n </DeviceList>\n </>\n )}\n\n {/* Disconnected Sessions */}\n {disconnectedDevices.length > 0 && (\n <>\n <SubsectionTitle>\n Inactive Sessions ({disconnectedDevices.length})\n </SubsectionTitle>\n <DeviceList>\n {disconnectedDevices.map((device) => (\n <DeviceCard\n key={device.sessionId}\n device={device}\n state={sessionStates.get(device.sessionId)}\n onDisconnect={() => onDisconnect(device.sessionId)}\n onSendApdu={onSendApdu}\n apduResponses={apduResponses}\n />\n ))}\n </DeviceList>\n </>\n )}\n </>\n );\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GAOA,IAAAI,EAA+B,iBAO/BC,EAA2B,wBAC3BC,EAKO,oBA+CCC,EAAA,6BApCR,MAAMC,EAAoB,CACxBC,EACAC,IACY,CACZ,MAAMC,EAAQD,EAAc,IAAID,EAAO,SAAS,EAChD,OAAKE,EACEA,EAAM,eAAiB,gBADX,EAErB,EAEaT,EAAkD,CAAC,CAC9D,QAAAU,EACA,cAAAF,EACA,aAAAG,EACA,WAAAC,EACA,cAAAC,EACA,qBAAAC,CACF,IAAM,CACJ,KAAM,CAAE,cAAAC,EAAe,oBAAAC,CAAoB,KAAI,WAAQ,IAAM,CAC3D,MAAMC,EAA4B,CAAC,EAC7BC,EAAkC,CAAC,EAEzC,UAAWX,KAAUG,EACfJ,EAAkBC,EAAQC,CAAa,EACzCS,EAAO,KAAKV,CAAM,EAElBW,EAAa,KAAKX,CAAM,EAI5B,MAAO,CAAE,cAAeU,EAAQ,oBAAqBC,CAAa,CACpE,EAAG,CAACR,EAASF,CAAa,CAAC,EAG3B,OAAIE,EAAQ,SAAW,GAAK,CAACI,KAEzB,OAAC,mBACC,mBAAC,KAAE,qCAAyB,EAC9B,KAKF,oBAEG,UAAAC,EAAc,OAAS,MACtB,oBACE,qBAAC,gBAAa,8BAAkBA,EAAc,OAAO,KAAC,KACtD,OAAC,cAAW,MAAO,CAAE,aAAc,EAAG,EACnC,SAAAA,EAAc,IAAKR,MAClB,OAAC,cAEC,OAAQA,EACR,MAAOC,EAAc,IAAID,EAAO,SAAS,EACzC,aAAc,IAAMI,EAAaJ,EAAO,SAAS,EACjD,WAAYK,EACZ,cAAeC,GALVN,EAAO,SAMd,CACD,EACH,GACF,EAIDS,EAAoB,OAAS,MAC5B,oBACE,qBAAC,mBAAgB,gCACKA,EAAoB,OAAO,KACjD,KACA,OAAC,cACE,SAAAA,EAAoB,IAAKT,MACxB,OAAC,cAEC,OAAQA,EACR,MAAOC,EAAc,IAAID,EAAO,SAAS,EACzC,aAAc,IAAMI,EAAaJ,EAAO,SAAS,EACjD,WAAYK,EACZ,cAAeC,GALVN,EAAO,SAMd,CACD,EACH,GACF,GAEJ,CAEJ",
6
+ "names": ["SessionsSection_exports", "__export", "SessionsSection", "__toCommonJS", "import_react", "import_DeviceCard", "import_styles", "import_jsx_runtime", "isDeviceConnected", "device", "sessionStates", "state", "devices", "onDisconnect", "onSendApdu", "apduResponses", "isAnyDiscoveryActive", "activeDevices", "disconnectedDevices", "active", "disconnected"]
7
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";var r=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var L=Object.prototype.hasOwnProperty;var T=(i,e)=>{for(var s in e)r(i,s,{get:e[s],enumerable:!0})},h=(i,e,s,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of P(e))!L.call(i,n)&&n!==s&&r(i,n,{get:()=>e[n],enumerable:!(t=E(e,n))||t.enumerable});return i};var N=i=>h(r({},"__esModule",{value:!0}),i);var _={};T(_,{Inspector:()=>k});module.exports=N(_);var c=require("@ledgerhq/device-management-kit-devtools-core"),d=require("../../shared/NotConnectedMessage"),p=require("./DeviceDiscoverySection"),v=require("./MyLedgerProviderControl"),a=require("./SessionsSection"),D=require("./styles"),o=require("react/jsx-runtime");const O=`import { DevToolsDmkInspector } from "@ledgerhq/device-management-kit-devtools-core";
2
+
3
+ const dmk = new DeviceManagementKitBuilder()
4
+ .addLogger(logger)
5
+ .build();
6
+
7
+ // Enable inspector after DMK is built
8
+ new DevToolsDmkInspector(connector, dmk);`,k=({devices:i,sessionStates:e,discoveredDevices:s,isListening:t,isActivelyDiscovering:n,sendMessage:g,isConnected:l,startListening:m,stopListening:u,startDiscovering:y,stopDiscovering:f,connectDevice:S,providerValue:C,getProvider:I,setProvider:b,sendApdu:A,apduResponses:M})=>l?(0,o.jsxs)(D.Container,{children:[(0,o.jsx)(v.MyLedgerProviderControl,{currentValue:C,onGet:I,onSet:b}),(0,o.jsx)(p.DeviceDiscoverySection,{discoveredDevices:s,isListening:t,isActivelyDiscovering:n,startListening:m,stopListening:u,startDiscovering:y,stopDiscovering:f,connectDevice:S}),(0,o.jsx)(a.SessionsSection,{devices:i,sessionStates:e,onDisconnect:R=>{g(c.INSPECTOR_COMMAND_TYPES.DISCONNECT,JSON.stringify({sessionId:R}))},onSendApdu:A,apduResponses:M,isAnyDiscoveryActive:t||n})]}):(0,o.jsx)(d.NotConnectedMessage,{title:"Inspector not connected",description:(0,o.jsxs)(o.Fragment,{children:["To enable the Inspector, add ",(0,o.jsx)("code",{children:"DevToolsDmkInspector"})," to your app after building the DMK:"]}),codeExample:O});0&&(module.exports={Inspector});
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/screens/inspector/index.tsx"],
4
+ "sourcesContent": ["/**\n * @file Inspector screen\n *\n * Main Inspector component that provides device management capabilities.\n * Composes several section components for a clear separation of concerns.\n */\n\nimport React from \"react\";\nimport {\n type ConnectedDevice,\n type DeviceSessionState,\n type DiscoveredDevice,\n} from \"@ledgerhq/device-management-kit\";\nimport { INSPECTOR_COMMAND_TYPES } from \"@ledgerhq/device-management-kit-devtools-core\";\n\nimport { type ApduResponse } from \"../../hooks/useConnectorMessages\";\nimport { NotConnectedMessage } from \"../../shared/NotConnectedMessage\";\nimport { DeviceDiscoverySection } from \"./DeviceDiscoverySection\";\nimport { MyLedgerProviderControl } from \"./MyLedgerProviderControl\";\nimport { SessionsSection } from \"./SessionsSection\";\nimport { Container } from \"./styles\";\n\ntype InspectorProps = {\n devices: ConnectedDevice[];\n sessionStates: Map<string, DeviceSessionState>;\n discoveredDevices: DiscoveredDevice[];\n isListening: boolean;\n isActivelyDiscovering: boolean;\n sendMessage: (type: string, payload: string) => void;\n isConnected: boolean;\n startListening: () => void;\n stopListening: () => void;\n startDiscovering: () => void;\n stopDiscovering: () => void;\n connectDevice: (\n deviceId: string,\n sessionRefresherOptions?: {\n isRefresherDisabled: boolean;\n pollingInterval?: number;\n },\n ) => void;\n providerValue: number | null;\n getProvider: () => void;\n setProvider: (value: number) => void;\n sendApdu: (sessionId: string, apduHex: string) => string;\n apduResponses: Map<string, ApduResponse>;\n};\n\nconst INSPECTOR_CODE_EXAMPLE = `import { DevToolsDmkInspector } from \"@ledgerhq/device-management-kit-devtools-core\";\n\nconst dmk = new DeviceManagementKitBuilder()\n .addLogger(logger)\n .build();\n\n// Enable inspector after DMK is built\nnew DevToolsDmkInspector(connector, dmk);`;\n\nexport const Inspector: React.FC<InspectorProps> = ({\n devices,\n sessionStates,\n discoveredDevices,\n isListening,\n isActivelyDiscovering,\n sendMessage,\n isConnected,\n startListening,\n stopListening,\n startDiscovering,\n stopDiscovering,\n connectDevice,\n providerValue,\n getProvider,\n setProvider,\n sendApdu,\n apduResponses,\n}) => {\n if (!isConnected) {\n return (\n <NotConnectedMessage\n title=\"Inspector not connected\"\n description={\n <>\n To enable the Inspector, add <code>DevToolsDmkInspector</code> to\n your app after building the DMK:\n </>\n }\n codeExample={INSPECTOR_CODE_EXAMPLE}\n />\n );\n }\n\n const handleDisconnect = (sessionId: string) => {\n sendMessage(\n INSPECTOR_COMMAND_TYPES.DISCONNECT,\n JSON.stringify({ sessionId }),\n );\n };\n\n const isAnyDiscoveryActive = isListening || isActivelyDiscovering;\n\n return (\n <Container>\n <MyLedgerProviderControl\n currentValue={providerValue}\n onGet={getProvider}\n onSet={setProvider}\n />\n\n <DeviceDiscoverySection\n discoveredDevices={discoveredDevices}\n isListening={isListening}\n isActivelyDiscovering={isActivelyDiscovering}\n startListening={startListening}\n stopListening={stopListening}\n startDiscovering={startDiscovering}\n stopDiscovering={stopDiscovering}\n connectDevice={connectDevice}\n />\n\n <SessionsSection\n devices={devices}\n sessionStates={sessionStates}\n onDisconnect={handleDisconnect}\n onSendApdu={sendApdu}\n apduResponses={apduResponses}\n isAnyDiscoveryActive={isAnyDiscoveryActive}\n />\n </Container>\n );\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,IAAA,eAAAC,EAAAH,GAaA,IAAAI,EAAwC,yDAGxCC,EAAoC,4CACpCC,EAAuC,oCACvCC,EAAwC,qCACxCC,EAAgC,6BAChCC,EAA0B,oBA6DhBC,EAAA,6BAjCV,MAAMC,EAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CASlBT,EAAsC,CAAC,CAClD,QAAAU,EACA,cAAAC,EACA,kBAAAC,EACA,YAAAC,EACA,sBAAAC,EACA,YAAAC,EACA,YAAAC,EACA,eAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,cAAAC,EACA,YAAAC,EACA,YAAAC,EACA,SAAAC,EACA,cAAAC,CACF,IACOV,KAyBH,QAAC,aACC,oBAAC,2BACC,aAAcM,EACd,MAAOC,EACP,MAAOC,EACT,KAEA,OAAC,0BACC,kBAAmBZ,EACnB,YAAaC,EACb,sBAAuBC,EACvB,eAAgBG,EAChB,cAAeC,EACf,iBAAkBC,EAClB,gBAAiBC,EACjB,cAAeC,EACjB,KAEA,OAAC,mBACC,QAASX,EACT,cAAeC,EACf,aA/BoBgB,GAAsB,CAC9CZ,EACE,0BAAwB,WACxB,KAAK,UAAU,CAAE,UAAAY,CAAU,CAAC,CAC9B,CACF,EA2BM,WAAYF,EACZ,cAAeC,EACf,qBA3BuBb,GAAeC,EA4BxC,GACF,KAjDE,OAAC,uBACC,MAAM,0BACN,eACE,oBAAE,6CAC6B,OAAC,QAAK,gCAAoB,EAAO,wCAEhE,EAEF,YAAaL,EACf",
6
+ "names": ["inspector_exports", "__export", "Inspector", "__toCommonJS", "import_device_management_kit_devtools_core", "import_NotConnectedMessage", "import_DeviceDiscoverySection", "import_MyLedgerProviderControl", "import_SessionsSection", "import_styles", "import_jsx_runtime", "INSPECTOR_CODE_EXAMPLE", "devices", "sessionStates", "discoveredDevices", "isListening", "isActivelyDiscovering", "sendMessage", "isConnected", "startListening", "stopListening", "startDiscovering", "stopDiscovering", "connectDevice", "providerValue", "getProvider", "setProvider", "sendApdu", "apduResponses", "sessionId"]
7
+ }
@@ -0,0 +1,179 @@
1
+ "use strict";var s=Object.create;var i=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var g=(e,o)=>{for(var n in o)i(e,n,{get:o[n],enumerable:!0})},p=(e,o,n,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of x(o))!f.call(e,r)&&r!==n&&i(e,r,{get:()=>o[r],enumerable:!(a=c(o,r))||a.enumerable});return e};var u=(e,o,n)=>(n=e!=null?s(l(e)):{},p(o||!e||!e.__esModule?i(n,"default",{value:e,enumerable:!0}):n,e)),b=e=>p(i({},"__esModule",{value:!0}),e);var O={};g(O,{BadgeRow:()=>M,Button:()=>y,ButtonGroup:()=>H,Card:()=>w,CardBody:()=>$,CardHeader:()=>h,CardHeaderLeft:()=>v,CardSection:()=>z,CardTitle:()=>C,CenteredMessage:()=>A,CodeBlock:()=>K,CollapsibleContent:()=>I,CollapsibleHeader:()=>R,CollapsibleToggle:()=>G,Container:()=>V,DeviceList:()=>L,ItalicNote:()=>S,MutedText:()=>k,NotConnectedContainer:()=>q,NotConnectedDescription:()=>J,NotConnectedTitle:()=>E,Section:()=>j,SectionLabel:()=>T,SectionTitle:()=>F,SmallText:()=>B,StatusBadge:()=>D,SubsectionTitle:()=>N});module.exports=b(O);var t=u(require("styled-components"));const m=t.css`
2
+ color: white;
3
+ border: none;
4
+ border-radius: 4px;
5
+ padding: 4px 12px;
6
+ cursor: pointer;
7
+ font-size: 14px;
8
+
9
+ &:disabled {
10
+ cursor: not-allowed;
11
+ opacity: 0.6;
12
+ }
13
+ `,y=t.default.button`
14
+ ${m}
15
+ background: ${({$variant:e})=>{switch(e){case"danger":return"#ff4444";case"success":return"#4CAF50";case"warning":return"#ff9800";case"primary":default:return"#2196F3"}}};
16
+ padding: ${({$size:e})=>e==="medium"?"8px 16px":"4px 12px"};
17
+
18
+ &:disabled {
19
+ background: #ccc;
20
+ }
21
+ `,w=t.default.div`
22
+ display: flex;
23
+ flex-direction: column;
24
+ padding: 16px;
25
+ border-radius: 8px;
26
+ border: 1px solid
27
+ ${({$variant:e})=>{switch(e){case"discovered":return"#cce5ff";case"disconnected":return"#ddd";default:return"#ddd"}}};
28
+ background: ${({$variant:e})=>{switch(e){case"discovered":return"#f0f7ff";case"disconnected":return"#f0f0f0";default:return"#fafafa"}}};
29
+ opacity: ${({$variant:e})=>e==="disconnected"?.6:1};
30
+ `,h=t.default.div`
31
+ display: flex;
32
+ justify-content: space-between;
33
+ align-items: center;
34
+ margin-bottom: 8px;
35
+ `,v=t.default.div`
36
+ display: flex;
37
+ align-items: center;
38
+ gap: 8px;
39
+ `,C=t.default.h5`
40
+ margin: 0;
41
+ font-size: 16px;
42
+ font-weight: 600;
43
+ `,$=t.default.div`
44
+ display: flex;
45
+ flex-direction: column;
46
+ gap: 4px;
47
+ `,z=t.default.div`
48
+ display: flex;
49
+ flex-direction: column;
50
+ margin-top: 12px;
51
+ padding-top: 12px;
52
+ border-top: 1px solid #eee;
53
+ `,B=t.default.p`
54
+ font-size: 12px;
55
+ color: #666;
56
+ margin: 0;
57
+ `,k=t.default.span`
58
+ font-size: 12px;
59
+ color: #999;
60
+ `,S=t.default.p`
61
+ font-size: 12px;
62
+ color: #999;
63
+ font-style: italic;
64
+ margin: 12px 0 0 0;
65
+ `,T=t.default.p`
66
+ font-size: 12px;
67
+ color: #666;
68
+ font-weight: 600;
69
+ margin: 0 0 4px 0;
70
+ `,j=t.default.div`
71
+ display: flex;
72
+ flex-direction: column;
73
+ margin-bottom: 16px;
74
+ padding-bottom: 16px;
75
+ border-bottom: 1px solid #eee;
76
+ `,F=t.default.h4`
77
+ margin: 0 0 12px 0;
78
+ font-size: 18px;
79
+ font-weight: 600;
80
+ `,N=t.default.h5`
81
+ margin: 0 0 12px 0;
82
+ font-size: 16px;
83
+ font-weight: 500;
84
+ color: #666;
85
+ `,H=t.default.div`
86
+ display: flex;
87
+ gap: 12px;
88
+ margin-bottom: 12px;
89
+ `,L=t.default.div`
90
+ display: flex;
91
+ flex-direction: column;
92
+ gap: 12px;
93
+ `,V=t.default.div`
94
+ display: flex;
95
+ flex-direction: column;
96
+ flex: 1;
97
+ padding: 16px;
98
+ overflow: auto;
99
+ `,A=t.default.div`
100
+ display: flex;
101
+ flex-direction: column;
102
+ align-items: center;
103
+ justify-content: center;
104
+ flex: 1;
105
+ padding: 24px;
106
+ opacity: 0.6;
107
+ `,d={success:{bg:"#e8f5e9",border:"#c8e6c9",text:"#2e7d32",dot:"#4CAF50"},warning:{bg:"#fff3e0",border:"#ffe0b2",text:"#e65100",dot:"#ff9800"},error:{bg:"#ffebee",border:"#ffcdd2",text:"#c62828",dot:"#ff4444"},info:{bg:"#e3f2fd",border:"#bbdefb",text:"#1565c0",dot:"#2196F3"},neutral:{bg:"#f5f5f5",border:"#e0e0e0",text:"#616161",dot:"#9e9e9e"}},D=t.default.span`
108
+ display: inline-flex;
109
+ align-items: center;
110
+ gap: 6px;
111
+ padding: 2px 10px;
112
+ border-radius: 12px;
113
+ font-size: 11px;
114
+ font-weight: 600;
115
+ text-transform: uppercase;
116
+ letter-spacing: 0.3px;
117
+ line-height: 18px;
118
+ white-space: nowrap;
119
+ background: ${({$variant:e})=>d[e].bg};
120
+ border: 1px solid ${({$variant:e})=>d[e].border};
121
+ color: ${({$variant:e})=>d[e].text};
122
+
123
+ &::before {
124
+ content: "";
125
+ display: inline-block;
126
+ width: 6px;
127
+ height: 6px;
128
+ border-radius: 50%;
129
+ background: ${({$variant:e})=>d[e].dot};
130
+ }
131
+ `,M=t.default.div`
132
+ display: flex;
133
+ flex-wrap: wrap;
134
+ gap: 6px;
135
+ align-items: center;
136
+ `,R=t.default.div`
137
+ display: flex;
138
+ align-items: center;
139
+ gap: 8px;
140
+ cursor: pointer;
141
+ user-select: none;
142
+ `,G=t.default.span`
143
+ font-size: 10px;
144
+ color: #666;
145
+ transition: transform 0.15s ease;
146
+ transform: rotate(${({$expanded:e})=>e?"90deg":"0deg"});
147
+ display: inline-flex;
148
+ align-items: center;
149
+ justify-content: center;
150
+ width: 16px;
151
+ height: 16px;
152
+ `,I=t.default.div`
153
+ display: ${({$expanded:e})=>e?"flex":"none"};
154
+ flex-direction: column;
155
+ gap: 8px;
156
+ `,q=t.default.div`
157
+ display: flex;
158
+ flex-direction: column;
159
+ align-items: center;
160
+ justify-content: center;
161
+ flex: 1;
162
+ padding: 24px;
163
+ opacity: 0.6;
164
+ `,E=t.default.h3`
165
+ margin: 0 0 16px 0;
166
+ font-size: 24px;
167
+ `,J=t.default.p`
168
+ text-align: center;
169
+ max-width: 500px;
170
+ margin: 0;
171
+ `,K=t.default.pre`
172
+ background: #f5f5f5;
173
+ padding: 16px;
174
+ border-radius: 8px;
175
+ margin-top: 16px;
176
+ font-size: 12px;
177
+ overflow: auto;
178
+ `;0&&(module.exports={BadgeRow,Button,ButtonGroup,Card,CardBody,CardHeader,CardHeaderLeft,CardSection,CardTitle,CenteredMessage,CodeBlock,CollapsibleContent,CollapsibleHeader,CollapsibleToggle,Container,DeviceList,ItalicNote,MutedText,NotConnectedContainer,NotConnectedDescription,NotConnectedTitle,Section,SectionLabel,SectionTitle,SmallText,StatusBadge,SubsectionTitle});
179
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/screens/inspector/styles.ts"],
4
+ "sourcesContent": ["import styled, { css } from \"styled-components\";\n\n// Shared button styles\nconst buttonBase = css`\n color: white;\n border: none;\n border-radius: 4px;\n padding: 4px 12px;\n cursor: pointer;\n font-size: 14px;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n`;\n\nexport const Button = styled.button<{\n $variant?: \"danger\" | \"success\" | \"primary\" | \"warning\";\n $size?: \"small\" | \"medium\";\n}>`\n ${buttonBase}\n background: ${({ $variant }) => {\n switch ($variant) {\n case \"danger\":\n return \"#ff4444\";\n case \"success\":\n return \"#4CAF50\";\n case \"warning\":\n return \"#ff9800\";\n case \"primary\":\n default:\n return \"#2196F3\";\n }\n }};\n padding: ${({ $size }) => ($size === \"medium\" ? \"8px 16px\" : \"4px 12px\")};\n\n &:disabled {\n background: #ccc;\n }\n`;\n\n// Card styles\nexport const Card = styled.div<{\n $variant?: \"default\" | \"discovered\" | \"disconnected\";\n}>`\n display: flex;\n flex-direction: column;\n padding: 16px;\n border-radius: 8px;\n border: 1px solid\n ${({ $variant }) => {\n switch ($variant) {\n case \"discovered\":\n return \"#cce5ff\";\n case \"disconnected\":\n return \"#ddd\";\n default:\n return \"#ddd\";\n }\n }};\n background: ${({ $variant }) => {\n switch ($variant) {\n case \"discovered\":\n return \"#f0f7ff\";\n case \"disconnected\":\n return \"#f0f0f0\";\n default:\n return \"#fafafa\";\n }\n }};\n opacity: ${({ $variant }) => ($variant === \"disconnected\" ? 0.6 : 1)};\n`;\n\nexport const CardHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n`;\n\nexport const CardHeaderLeft = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const CardTitle = styled.h5`\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n`;\n\nexport const CardBody = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n`;\n\nexport const CardSection = styled.div`\n display: flex;\n flex-direction: column;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #eee;\n`;\n\n// Text styles\nexport const SmallText = styled.p`\n font-size: 12px;\n color: #666;\n margin: 0;\n`;\n\nexport const MutedText = styled.span`\n font-size: 12px;\n color: #999;\n`;\n\nexport const ItalicNote = styled.p`\n font-size: 12px;\n color: #999;\n font-style: italic;\n margin: 12px 0 0 0;\n`;\n\nexport const SectionLabel = styled.p`\n font-size: 12px;\n color: #666;\n font-weight: 600;\n margin: 0 0 4px 0;\n`;\n\n// Section styles\nexport const Section = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #eee;\n`;\n\nexport const SectionTitle = styled.h4`\n margin: 0 0 12px 0;\n font-size: 18px;\n font-weight: 600;\n`;\n\nexport const SubsectionTitle = styled.h5`\n margin: 0 0 12px 0;\n font-size: 16px;\n font-weight: 500;\n color: #666;\n`;\n\nexport const ButtonGroup = styled.div`\n display: flex;\n gap: 12px;\n margin-bottom: 12px;\n`;\n\nexport const DeviceList = styled.div`\n display: flex;\n flex-direction: column;\n gap: 12px;\n`;\n\n// Container styles\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 16px;\n overflow: auto;\n`;\n\nexport const CenteredMessage = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: 24px;\n opacity: 0.6;\n`;\n\n// Status badge styles\ntype BadgeVariant = \"success\" | \"warning\" | \"error\" | \"info\" | \"neutral\";\n\nconst badgeColors: Record<\n BadgeVariant,\n { bg: string; border: string; text: string; dot: string }\n> = {\n success: {\n bg: \"#e8f5e9\",\n border: \"#c8e6c9\",\n text: \"#2e7d32\",\n dot: \"#4CAF50\",\n },\n warning: {\n bg: \"#fff3e0\",\n border: \"#ffe0b2\",\n text: \"#e65100\",\n dot: \"#ff9800\",\n },\n error: { bg: \"#ffebee\", border: \"#ffcdd2\", text: \"#c62828\", dot: \"#ff4444\" },\n info: { bg: \"#e3f2fd\", border: \"#bbdefb\", text: \"#1565c0\", dot: \"#2196F3\" },\n neutral: {\n bg: \"#f5f5f5\",\n border: \"#e0e0e0\",\n text: \"#616161\",\n dot: \"#9e9e9e\",\n },\n};\n\nexport const StatusBadge = styled.span<{ $variant: BadgeVariant }>`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 18px;\n white-space: nowrap;\n background: ${({ $variant }) => badgeColors[$variant].bg};\n border: 1px solid ${({ $variant }) => badgeColors[$variant].border};\n color: ${({ $variant }) => badgeColors[$variant].text};\n\n &::before {\n content: \"\";\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: ${({ $variant }) => badgeColors[$variant].dot};\n }\n`;\n\nexport const BadgeRow = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n align-items: center;\n`;\n\n// Collapsible section styles\nexport const CollapsibleHeader = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n user-select: none;\n`;\n\nexport const CollapsibleToggle = styled.span<{ $expanded: boolean }>`\n font-size: 10px;\n color: #666;\n transition: transform 0.15s ease;\n transform: rotate(${({ $expanded }) => ($expanded ? \"90deg\" : \"0deg\")});\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n`;\n\nexport const CollapsibleContent = styled.div<{ $expanded: boolean }>`\n display: ${({ $expanded }) => ($expanded ? \"flex\" : \"none\")};\n flex-direction: column;\n gap: 8px;\n`;\n\n// NotConnected styles\nexport const NotConnectedContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: 24px;\n opacity: 0.6;\n`;\n\nexport const NotConnectedTitle = styled.h3`\n margin: 0 0 16px 0;\n font-size: 24px;\n`;\n\nexport const NotConnectedDescription = styled.p`\n text-align: center;\n max-width: 500px;\n margin: 0;\n`;\n\nexport const CodeBlock = styled.pre`\n background: #f5f5f5;\n padding: 16px;\n border-radius: 8px;\n margin-top: 16px;\n font-size: 12px;\n overflow: auto;\n`;\n"],
5
+ "mappings": "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",
6
+ "names": ["styles_exports", "__export", "BadgeRow", "Button", "ButtonGroup", "Card", "CardBody", "CardHeader", "CardHeaderLeft", "CardSection", "CardTitle", "CenteredMessage", "CodeBlock", "CollapsibleContent", "CollapsibleHeader", "CollapsibleToggle", "Container", "DeviceList", "ItalicNote", "MutedText", "NotConnectedContainer", "NotConnectedDescription", "NotConnectedTitle", "Section", "SectionLabel", "SectionTitle", "SmallText", "StatusBadge", "SubsectionTitle", "__toCommonJS", "import_styled_components", "buttonBase", "styled", "$variant", "$size", "badgeColors", "$expanded"]
7
+ }