@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.
- package/LICENSE.MD +202 -0
- package/lib/build/index.d.ts +2 -0
- package/lib/build/index.d.ts.map +1 -0
- package/lib/build/index.js +2 -0
- package/lib/build/index.js.map +1 -0
- package/lib/build/src/Dashboard.d.ts +5 -0
- package/lib/build/src/Dashboard.d.ts.map +1 -0
- package/lib/build/src/Dashboard.js +50 -0
- package/lib/build/src/Dashboard.js.map +1 -0
- package/lib/build/src/ErrorBoundary.d.ts +15 -0
- package/lib/build/src/ErrorBoundary.d.ts.map +1 -0
- package/lib/build/src/ErrorBoundary.js +23 -0
- package/lib/build/src/ErrorBoundary.js.map +1 -0
- package/lib/build/src/PluginEvents.d.ts +9 -0
- package/lib/build/src/PluginEvents.d.ts.map +1 -0
- package/lib/build/src/PluginEvents.js +2 -0
- package/lib/build/src/PluginEvents.js.map +1 -0
- package/lib/build/src/components/DashboardFooter.d.ts +8 -0
- package/lib/build/src/components/DashboardFooter.d.ts.map +1 -0
- package/lib/build/src/components/DashboardFooter.js +31 -0
- package/lib/build/src/components/DashboardFooter.js.map +1 -0
- package/lib/build/src/components/DashboardNavigationBar.d.ts +16 -0
- package/lib/build/src/components/DashboardNavigationBar.d.ts.map +1 -0
- package/lib/build/src/components/DashboardNavigationBar.js +85 -0
- package/lib/build/src/components/DashboardNavigationBar.js.map +1 -0
- package/lib/build/src/components/DebugDrawer.d.ts +18 -0
- package/lib/build/src/components/DebugDrawer.d.ts.map +1 -0
- package/lib/build/src/components/DebugDrawer.js +69 -0
- package/lib/build/src/components/DebugDrawer.js.map +1 -0
- package/lib/build/src/components/SplitView.d.ts +12 -0
- package/lib/build/src/components/SplitView.d.ts.map +1 -0
- package/lib/build/src/components/SplitView.js +50 -0
- package/lib/build/src/components/SplitView.js.map +1 -0
- package/lib/build/src/hooks/commandDispatcher.d.ts +28 -0
- package/lib/build/src/hooks/commandDispatcher.d.ts.map +1 -0
- package/lib/build/src/hooks/commandDispatcher.js +38 -0
- package/lib/build/src/hooks/commandDispatcher.js.map +1 -0
- package/lib/build/src/hooks/connectorMessageHandlers.d.ts +34 -0
- package/lib/build/src/hooks/connectorMessageHandlers.d.ts.map +1 -0
- package/lib/build/src/hooks/connectorMessageHandlers.js +85 -0
- package/lib/build/src/hooks/connectorMessageHandlers.js.map +1 -0
- package/lib/build/src/hooks/useConnectorMessages.d.ts +60 -0
- package/lib/build/src/hooks/useConnectorMessages.d.ts.map +1 -0
- package/lib/build/src/hooks/useConnectorMessages.js +138 -0
- package/lib/build/src/hooks/useConnectorMessages.js.map +1 -0
- package/lib/build/src/screens/debugDevTools/index.d.ts +17 -0
- package/lib/build/src/screens/debugDevTools/index.d.ts.map +1 -0
- package/lib/build/src/screens/debugDevTools/index.js +48 -0
- package/lib/build/src/screens/debugDevTools/index.js.map +1 -0
- package/lib/build/src/screens/inspector/ApduSender.d.ts +10 -0
- package/lib/build/src/screens/inspector/ApduSender.d.ts.map +1 -0
- package/lib/build/src/screens/inspector/ApduSender.js +118 -0
- package/lib/build/src/screens/inspector/ApduSender.js.map +1 -0
- package/lib/build/src/screens/inspector/DeviceCard.d.ts +13 -0
- package/lib/build/src/screens/inspector/DeviceCard.d.ts.map +1 -0
- package/lib/build/src/screens/inspector/DeviceCard.js +52 -0
- package/lib/build/src/screens/inspector/DeviceCard.js.map +1 -0
- package/lib/build/src/screens/inspector/DeviceDiscoverySection.d.ts +25 -0
- package/lib/build/src/screens/inspector/DeviceDiscoverySection.d.ts.map +1 -0
- package/lib/build/src/screens/inspector/DeviceDiscoverySection.js +8 -0
- package/lib/build/src/screens/inspector/DeviceDiscoverySection.js.map +1 -0
- package/lib/build/src/screens/inspector/DiscoveredDeviceCard.d.ts +12 -0
- package/lib/build/src/screens/inspector/DiscoveredDeviceCard.d.ts.map +1 -0
- package/lib/build/src/screens/inspector/DiscoveredDeviceCard.js +89 -0
- package/lib/build/src/screens/inspector/DiscoveredDeviceCard.js.map +1 -0
- package/lib/build/src/screens/inspector/MyLedgerProviderControl.d.ts +9 -0
- package/lib/build/src/screens/inspector/MyLedgerProviderControl.d.ts.map +1 -0
- package/lib/build/src/screens/inspector/MyLedgerProviderControl.js +78 -0
- package/lib/build/src/screens/inspector/MyLedgerProviderControl.js.map +1 -0
- package/lib/build/src/screens/inspector/SessionsSection.d.ts +20 -0
- package/lib/build/src/screens/inspector/SessionsSection.d.ts.map +1 -0
- package/lib/build/src/screens/inspector/SessionsSection.js +37 -0
- package/lib/build/src/screens/inspector/SessionsSection.js.map +1 -0
- package/lib/build/src/screens/inspector/index.d.ts +34 -0
- package/lib/build/src/screens/inspector/index.d.ts.map +1 -0
- package/lib/build/src/screens/inspector/index.js +26 -0
- package/lib/build/src/screens/inspector/index.js.map +1 -0
- package/lib/build/src/screens/inspector/styles.d.ts +41 -0
- package/lib/build/src/screens/inspector/styles.d.ts.map +1 -0
- package/lib/build/src/screens/inspector/styles.js +266 -0
- package/lib/build/src/screens/inspector/styles.js.map +1 -0
- package/lib/build/src/screens/logger/FilterInput.d.ts +8 -0
- package/lib/build/src/screens/logger/FilterInput.d.ts.map +1 -0
- package/lib/build/src/screens/logger/FilterInput.js +179 -0
- package/lib/build/src/screens/logger/FilterInput.js.map +1 -0
- package/lib/build/src/screens/logger/LoggerOptions.d.ts +18 -0
- package/lib/build/src/screens/logger/LoggerOptions.d.ts.map +1 -0
- package/lib/build/src/screens/logger/LoggerOptions.js +75 -0
- package/lib/build/src/screens/logger/LoggerOptions.js.map +1 -0
- package/lib/build/src/screens/logger/LoggerToolbar.d.ts +19 -0
- package/lib/build/src/screens/logger/LoggerToolbar.d.ts.map +1 -0
- package/lib/build/src/screens/logger/LoggerToolbar.js +16 -0
- package/lib/build/src/screens/logger/LoggerToolbar.js.map +1 -0
- package/lib/build/src/screens/logger/SearchInput.d.ts +15 -0
- package/lib/build/src/screens/logger/SearchInput.d.ts.map +1 -0
- package/lib/build/src/screens/logger/SearchInput.js +93 -0
- package/lib/build/src/screens/logger/SearchInput.js.map +1 -0
- package/lib/build/src/screens/logger/filterUtils.d.ts +43 -0
- package/lib/build/src/screens/logger/filterUtils.d.ts.map +1 -0
- package/lib/build/src/screens/logger/filterUtils.js +125 -0
- package/lib/build/src/screens/logger/filterUtils.js.map +1 -0
- package/lib/build/src/screens/logger/filterUtils.test.d.ts +2 -0
- package/lib/build/src/screens/logger/filterUtils.test.d.ts.map +1 -0
- package/lib/build/src/screens/logger/filterUtils.test.js +300 -0
- package/lib/build/src/screens/logger/filterUtils.test.js.map +1 -0
- package/lib/build/src/screens/logger/index.d.ts +10 -0
- package/lib/build/src/screens/logger/index.d.ts.map +1 -0
- package/lib/build/src/screens/logger/index.js +86 -0
- package/lib/build/src/screens/logger/index.js.map +1 -0
- package/lib/build/src/screens/logger/inputStyles.d.ts +18 -0
- package/lib/build/src/screens/logger/inputStyles.d.ts.map +1 -0
- package/lib/build/src/screens/logger/inputStyles.js +46 -0
- package/lib/build/src/screens/logger/inputStyles.js.map +1 -0
- package/lib/build/src/screens/logger/logsTable/LogTableCells.d.ts +13 -0
- package/lib/build/src/screens/logger/logsTable/LogTableCells.d.ts.map +1 -0
- package/lib/build/src/screens/logger/logsTable/LogTableCells.js +61 -0
- package/lib/build/src/screens/logger/logsTable/LogTableCells.js.map +1 -0
- package/lib/build/src/screens/logger/logsTable/ScrollDownButton.d.ts +8 -0
- package/lib/build/src/screens/logger/logsTable/ScrollDownButton.d.ts.map +1 -0
- package/lib/build/src/screens/logger/logsTable/ScrollDownButton.js +20 -0
- package/lib/build/src/screens/logger/logsTable/ScrollDownButton.js.map +1 -0
- package/lib/build/src/screens/logger/logsTable/TableBody.d.ts +13 -0
- package/lib/build/src/screens/logger/logsTable/TableBody.d.ts.map +1 -0
- package/lib/build/src/screens/logger/logsTable/TableBody.js +58 -0
- package/lib/build/src/screens/logger/logsTable/TableBody.js.map +1 -0
- package/lib/build/src/screens/logger/logsTable/TableColumns.d.ts +3 -0
- package/lib/build/src/screens/logger/logsTable/TableColumns.d.ts.map +1 -0
- package/lib/build/src/screens/logger/logsTable/TableColumns.js +44 -0
- package/lib/build/src/screens/logger/logsTable/TableColumns.js.map +1 -0
- package/lib/build/src/screens/logger/logsTable/TableHeader.d.ts +9 -0
- package/lib/build/src/screens/logger/logsTable/TableHeader.d.ts.map +1 -0
- package/lib/build/src/screens/logger/logsTable/TableHeader.js +53 -0
- package/lib/build/src/screens/logger/logsTable/TableHeader.js.map +1 -0
- package/lib/build/src/screens/logger/logsTable/constants.d.ts +21 -0
- package/lib/build/src/screens/logger/logsTable/constants.d.ts.map +1 -0
- package/lib/build/src/screens/logger/logsTable/constants.js +21 -0
- package/lib/build/src/screens/logger/logsTable/constants.js.map +1 -0
- package/lib/build/src/screens/logger/logsTable/index.d.ts +11 -0
- package/lib/build/src/screens/logger/logsTable/index.d.ts.map +1 -0
- package/lib/build/src/screens/logger/logsTable/index.js +116 -0
- package/lib/build/src/screens/logger/logsTable/index.js.map +1 -0
- package/lib/build/src/screens/logger/logsTable/useColumnSizeVars.d.ts +4 -0
- package/lib/build/src/screens/logger/logsTable/useColumnSizeVars.d.ts.map +1 -0
- package/lib/build/src/screens/logger/logsTable/useColumnSizeVars.js +17 -0
- package/lib/build/src/screens/logger/logsTable/useColumnSizeVars.js.map +1 -0
- package/lib/build/src/screens/logger/logsTable/useResizeObserver.d.ts +2 -0
- package/lib/build/src/screens/logger/logsTable/useResizeObserver.d.ts.map +1 -0
- package/lib/build/src/screens/logger/logsTable/useResizeObserver.js +28 -0
- package/lib/build/src/screens/logger/logsTable/useResizeObserver.js.map +1 -0
- package/lib/build/src/screens/logger/logsTable/useScrollLogic.d.ts +12 -0
- package/lib/build/src/screens/logger/logsTable/useScrollLogic.d.ts.map +1 -0
- package/lib/build/src/screens/logger/logsTable/useScrollLogic.js +86 -0
- package/lib/build/src/screens/logger/logsTable/useScrollLogic.js.map +1 -0
- package/lib/build/src/screens/logger/mapConnectorMessageToLogData.d.ts +6 -0
- package/lib/build/src/screens/logger/mapConnectorMessageToLogData.d.ts.map +1 -0
- package/lib/build/src/screens/logger/mapConnectorMessageToLogData.js +17 -0
- package/lib/build/src/screens/logger/mapConnectorMessageToLogData.js.map +1 -0
- package/lib/build/src/screens/logger/types.d.ts +6 -0
- package/lib/build/src/screens/logger/types.d.ts.map +1 -0
- package/lib/build/src/screens/logger/types.js +2 -0
- package/lib/build/src/screens/logger/types.js.map +1 -0
- package/lib/build/src/screens/logger/useColumnSizeVars.d.ts +4 -0
- package/lib/build/src/screens/logger/useColumnSizeVars.d.ts.map +1 -0
- package/lib/build/src/screens/logger/useColumnSizeVars.js +17 -0
- package/lib/build/src/screens/logger/useColumnSizeVars.js.map +1 -0
- package/lib/build/src/screens/logger/useLogsDataAndOptions.d.ts +12 -0
- package/lib/build/src/screens/logger/useLogsDataAndOptions.d.ts.map +1 -0
- package/lib/build/src/screens/logger/useLogsDataAndOptions.js +36 -0
- package/lib/build/src/screens/logger/useLogsDataAndOptions.js.map +1 -0
- package/lib/build/src/screens/logger/useRecentFilters.d.ts +18 -0
- package/lib/build/src/screens/logger/useRecentFilters.d.ts.map +1 -0
- package/lib/build/src/screens/logger/useRecentFilters.js +96 -0
- package/lib/build/src/screens/logger/useRecentFilters.js.map +1 -0
- package/lib/build/src/screens/logger/useSearchState.d.ts +24 -0
- package/lib/build/src/screens/logger/useSearchState.d.ts.map +1 -0
- package/lib/build/src/screens/logger/useSearchState.js +74 -0
- package/lib/build/src/screens/logger/useSearchState.js.map +1 -0
- package/lib/build/src/shared/NotConnectedMessage.d.ts +9 -0
- package/lib/build/src/shared/NotConnectedMessage.d.ts.map +1 -0
- package/lib/build/src/shared/NotConnectedMessage.js +30 -0
- package/lib/build/src/shared/NotConnectedMessage.js.map +1 -0
- package/lib/build/src/shared/PluginEvents.d.ts +9 -0
- package/lib/build/src/shared/PluginEvents.d.ts.map +1 -0
- package/lib/build/src/shared/PluginEvents.js +2 -0
- package/lib/build/src/shared/PluginEvents.js.map +1 -0
- package/lib/build/tsconfig.build.tsbuildinfo +1 -0
- package/lib/cjs/index.js +2 -0
- package/lib/cjs/index.js.map +7 -0
- package/lib/cjs/package.json +73 -0
- package/lib/cjs/src/Dashboard.js +12 -0
- package/lib/cjs/src/Dashboard.js.map +7 -0
- package/lib/cjs/src/ErrorBoundary.js +2 -0
- package/lib/cjs/src/ErrorBoundary.js.map +7 -0
- package/lib/cjs/src/PluginEvents.js +2 -0
- package/lib/cjs/src/PluginEvents.js.map +7 -0
- package/lib/cjs/src/components/DashboardFooter.js +25 -0
- package/lib/cjs/src/components/DashboardFooter.js.map +7 -0
- package/lib/cjs/src/components/DashboardNavigationBar.js +64 -0
- package/lib/cjs/src/components/DashboardNavigationBar.js.map +7 -0
- package/lib/cjs/src/components/DebugDrawer.js +58 -0
- package/lib/cjs/src/components/DebugDrawer.js.map +7 -0
- package/lib/cjs/src/components/SplitView.js +37 -0
- package/lib/cjs/src/components/SplitView.js.map +7 -0
- package/lib/cjs/src/hooks/commandDispatcher.js +2 -0
- package/lib/cjs/src/hooks/commandDispatcher.js.map +7 -0
- package/lib/cjs/src/hooks/connectorMessageHandlers.js +2 -0
- package/lib/cjs/src/hooks/connectorMessageHandlers.js.map +7 -0
- package/lib/cjs/src/hooks/useConnectorMessages.js +2 -0
- package/lib/cjs/src/hooks/useConnectorMessages.js.map +7 -0
- package/lib/cjs/src/screens/debugDevTools/index.js +2 -0
- package/lib/cjs/src/screens/debugDevTools/index.js.map +7 -0
- package/lib/cjs/src/screens/inspector/ApduSender.js +79 -0
- package/lib/cjs/src/screens/inspector/ApduSender.js.map +7 -0
- package/lib/cjs/src/screens/inspector/DeviceCard.js +2 -0
- package/lib/cjs/src/screens/inspector/DeviceCard.js.map +7 -0
- package/lib/cjs/src/screens/inspector/DeviceDiscoverySection.js +2 -0
- package/lib/cjs/src/screens/inspector/DeviceDiscoverySection.js.map +7 -0
- package/lib/cjs/src/screens/inspector/DiscoveredDeviceCard.js +57 -0
- package/lib/cjs/src/screens/inspector/DiscoveredDeviceCard.js.map +7 -0
- package/lib/cjs/src/screens/inspector/MyLedgerProviderControl.js +40 -0
- package/lib/cjs/src/screens/inspector/MyLedgerProviderControl.js.map +7 -0
- package/lib/cjs/src/screens/inspector/SessionsSection.js +2 -0
- package/lib/cjs/src/screens/inspector/SessionsSection.js.map +7 -0
- package/lib/cjs/src/screens/inspector/index.js +9 -0
- package/lib/cjs/src/screens/inspector/index.js.map +7 -0
- package/lib/cjs/src/screens/inspector/styles.js +179 -0
- package/lib/cjs/src/screens/inspector/styles.js.map +7 -0
- package/lib/cjs/src/screens/logger/FilterInput.js +85 -0
- package/lib/cjs/src/screens/logger/FilterInput.js.map +7 -0
- package/lib/cjs/src/screens/logger/LoggerOptions.js +6 -0
- package/lib/cjs/src/screens/logger/LoggerOptions.js.map +7 -0
- package/lib/cjs/src/screens/logger/LoggerToolbar.js +9 -0
- package/lib/cjs/src/screens/logger/LoggerToolbar.js.map +7 -0
- package/lib/cjs/src/screens/logger/SearchInput.js +59 -0
- package/lib/cjs/src/screens/logger/SearchInput.js.map +7 -0
- package/lib/cjs/src/screens/logger/filterUtils.js +2 -0
- package/lib/cjs/src/screens/logger/filterUtils.js.map +7 -0
- package/lib/cjs/src/screens/logger/filterUtils.test.js +2 -0
- package/lib/cjs/src/screens/logger/filterUtils.test.js.map +7 -0
- package/lib/cjs/src/screens/logger/index.js +6 -0
- package/lib/cjs/src/screens/logger/index.js.map +7 -0
- package/lib/cjs/src/screens/logger/inputStyles.js +31 -0
- package/lib/cjs/src/screens/logger/inputStyles.js.map +7 -0
- package/lib/cjs/src/screens/logger/logsTable/LogTableCells.js +8 -0
- package/lib/cjs/src/screens/logger/logsTable/LogTableCells.js.map +7 -0
- package/lib/cjs/src/screens/logger/logsTable/ScrollDownButton.js +15 -0
- package/lib/cjs/src/screens/logger/logsTable/ScrollDownButton.js.map +7 -0
- package/lib/cjs/src/screens/logger/logsTable/TableBody.js +24 -0
- package/lib/cjs/src/screens/logger/logsTable/TableBody.js.map +7 -0
- package/lib/cjs/src/screens/logger/logsTable/TableColumns.js +2 -0
- package/lib/cjs/src/screens/logger/logsTable/TableColumns.js.map +7 -0
- package/lib/cjs/src/screens/logger/logsTable/TableHeader.js +33 -0
- package/lib/cjs/src/screens/logger/logsTable/TableHeader.js.map +7 -0
- package/lib/cjs/src/screens/logger/logsTable/constants.js +2 -0
- package/lib/cjs/src/screens/logger/logsTable/constants.js.map +7 -0
- package/lib/cjs/src/screens/logger/logsTable/index.js +26 -0
- package/lib/cjs/src/screens/logger/logsTable/index.js.map +7 -0
- package/lib/cjs/src/screens/logger/logsTable/useColumnSizeVars.js +2 -0
- package/lib/cjs/src/screens/logger/logsTable/useColumnSizeVars.js.map +7 -0
- package/lib/cjs/src/screens/logger/logsTable/useResizeObserver.js +2 -0
- package/lib/cjs/src/screens/logger/logsTable/useResizeObserver.js.map +7 -0
- package/lib/cjs/src/screens/logger/logsTable/useScrollLogic.js +2 -0
- package/lib/cjs/src/screens/logger/logsTable/useScrollLogic.js.map +7 -0
- package/lib/cjs/src/screens/logger/mapConnectorMessageToLogData.js +2 -0
- package/lib/cjs/src/screens/logger/mapConnectorMessageToLogData.js.map +7 -0
- package/lib/cjs/src/screens/logger/types.js +2 -0
- package/lib/cjs/src/screens/logger/types.js.map +7 -0
- package/lib/cjs/src/screens/logger/useColumnSizeVars.js +2 -0
- package/lib/cjs/src/screens/logger/useColumnSizeVars.js.map +7 -0
- package/lib/cjs/src/screens/logger/useLogsDataAndOptions.js +2 -0
- package/lib/cjs/src/screens/logger/useLogsDataAndOptions.js.map +7 -0
- package/lib/cjs/src/screens/logger/useRecentFilters.js +2 -0
- package/lib/cjs/src/screens/logger/useRecentFilters.js.map +7 -0
- package/lib/cjs/src/screens/logger/useSearchState.js +2 -0
- package/lib/cjs/src/screens/logger/useSearchState.js.map +7 -0
- package/lib/cjs/src/shared/NotConnectedMessage.js +24 -0
- package/lib/cjs/src/shared/NotConnectedMessage.js.map +7 -0
- package/lib/cjs/src/shared/PluginEvents.js +2 -0
- package/lib/cjs/src/shared/PluginEvents.js.map +7 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/index.js.map +7 -0
- package/lib/esm/package.json +73 -0
- package/lib/esm/src/Dashboard.js +12 -0
- package/lib/esm/src/Dashboard.js.map +7 -0
- package/lib/esm/src/ErrorBoundary.js +2 -0
- package/lib/esm/src/ErrorBoundary.js.map +7 -0
- package/lib/esm/src/PluginEvents.js +1 -0
- package/lib/esm/src/PluginEvents.js.map +7 -0
- package/lib/esm/src/components/DashboardFooter.js +25 -0
- package/lib/esm/src/components/DashboardFooter.js.map +7 -0
- package/lib/esm/src/components/DashboardNavigationBar.js +64 -0
- package/lib/esm/src/components/DashboardNavigationBar.js.map +7 -0
- package/lib/esm/src/components/DebugDrawer.js +58 -0
- package/lib/esm/src/components/DebugDrawer.js.map +7 -0
- package/lib/esm/src/components/SplitView.js +37 -0
- package/lib/esm/src/components/SplitView.js.map +7 -0
- package/lib/esm/src/hooks/commandDispatcher.js +2 -0
- package/lib/esm/src/hooks/commandDispatcher.js.map +7 -0
- package/lib/esm/src/hooks/connectorMessageHandlers.js +2 -0
- package/lib/esm/src/hooks/connectorMessageHandlers.js.map +7 -0
- package/lib/esm/src/hooks/useConnectorMessages.js +2 -0
- package/lib/esm/src/hooks/useConnectorMessages.js.map +7 -0
- package/lib/esm/src/screens/debugDevTools/index.js +2 -0
- package/lib/esm/src/screens/debugDevTools/index.js.map +7 -0
- package/lib/esm/src/screens/inspector/ApduSender.js +79 -0
- package/lib/esm/src/screens/inspector/ApduSender.js.map +7 -0
- package/lib/esm/src/screens/inspector/DeviceCard.js +2 -0
- package/lib/esm/src/screens/inspector/DeviceCard.js.map +7 -0
- package/lib/esm/src/screens/inspector/DeviceDiscoverySection.js +2 -0
- package/lib/esm/src/screens/inspector/DeviceDiscoverySection.js.map +7 -0
- package/lib/esm/src/screens/inspector/DiscoveredDeviceCard.js +57 -0
- package/lib/esm/src/screens/inspector/DiscoveredDeviceCard.js.map +7 -0
- package/lib/esm/src/screens/inspector/MyLedgerProviderControl.js +40 -0
- package/lib/esm/src/screens/inspector/MyLedgerProviderControl.js.map +7 -0
- package/lib/esm/src/screens/inspector/SessionsSection.js +2 -0
- package/lib/esm/src/screens/inspector/SessionsSection.js.map +7 -0
- package/lib/esm/src/screens/inspector/index.js +9 -0
- package/lib/esm/src/screens/inspector/index.js.map +7 -0
- package/lib/esm/src/screens/inspector/styles.js +179 -0
- package/lib/esm/src/screens/inspector/styles.js.map +7 -0
- package/lib/esm/src/screens/logger/FilterInput.js +85 -0
- package/lib/esm/src/screens/logger/FilterInput.js.map +7 -0
- package/lib/esm/src/screens/logger/LoggerOptions.js +6 -0
- package/lib/esm/src/screens/logger/LoggerOptions.js.map +7 -0
- package/lib/esm/src/screens/logger/LoggerToolbar.js +9 -0
- package/lib/esm/src/screens/logger/LoggerToolbar.js.map +7 -0
- package/lib/esm/src/screens/logger/SearchInput.js +59 -0
- package/lib/esm/src/screens/logger/SearchInput.js.map +7 -0
- package/lib/esm/src/screens/logger/filterUtils.js +2 -0
- package/lib/esm/src/screens/logger/filterUtils.js.map +7 -0
- package/lib/esm/src/screens/logger/filterUtils.test.js +2 -0
- package/lib/esm/src/screens/logger/filterUtils.test.js.map +7 -0
- package/lib/esm/src/screens/logger/index.js +6 -0
- package/lib/esm/src/screens/logger/index.js.map +7 -0
- package/lib/esm/src/screens/logger/inputStyles.js +31 -0
- package/lib/esm/src/screens/logger/inputStyles.js.map +7 -0
- package/lib/esm/src/screens/logger/logsTable/LogTableCells.js +8 -0
- package/lib/esm/src/screens/logger/logsTable/LogTableCells.js.map +7 -0
- package/lib/esm/src/screens/logger/logsTable/ScrollDownButton.js +15 -0
- package/lib/esm/src/screens/logger/logsTable/ScrollDownButton.js.map +7 -0
- package/lib/esm/src/screens/logger/logsTable/TableBody.js +24 -0
- package/lib/esm/src/screens/logger/logsTable/TableBody.js.map +7 -0
- package/lib/esm/src/screens/logger/logsTable/TableColumns.js +2 -0
- package/lib/esm/src/screens/logger/logsTable/TableColumns.js.map +7 -0
- package/lib/esm/src/screens/logger/logsTable/TableHeader.js +33 -0
- package/lib/esm/src/screens/logger/logsTable/TableHeader.js.map +7 -0
- package/lib/esm/src/screens/logger/logsTable/constants.js +2 -0
- package/lib/esm/src/screens/logger/logsTable/constants.js.map +7 -0
- package/lib/esm/src/screens/logger/logsTable/index.js +26 -0
- package/lib/esm/src/screens/logger/logsTable/index.js.map +7 -0
- package/lib/esm/src/screens/logger/logsTable/useColumnSizeVars.js +2 -0
- package/lib/esm/src/screens/logger/logsTable/useColumnSizeVars.js.map +7 -0
- package/lib/esm/src/screens/logger/logsTable/useResizeObserver.js +2 -0
- package/lib/esm/src/screens/logger/logsTable/useResizeObserver.js.map +7 -0
- package/lib/esm/src/screens/logger/logsTable/useScrollLogic.js +2 -0
- package/lib/esm/src/screens/logger/logsTable/useScrollLogic.js.map +7 -0
- package/lib/esm/src/screens/logger/mapConnectorMessageToLogData.js +2 -0
- package/lib/esm/src/screens/logger/mapConnectorMessageToLogData.js.map +7 -0
- package/lib/esm/src/screens/logger/types.js +1 -0
- package/lib/esm/src/screens/logger/types.js.map +7 -0
- package/lib/esm/src/screens/logger/useColumnSizeVars.js +2 -0
- package/lib/esm/src/screens/logger/useColumnSizeVars.js.map +7 -0
- package/lib/esm/src/screens/logger/useLogsDataAndOptions.js +2 -0
- package/lib/esm/src/screens/logger/useLogsDataAndOptions.js.map +7 -0
- package/lib/esm/src/screens/logger/useRecentFilters.js +2 -0
- package/lib/esm/src/screens/logger/useRecentFilters.js.map +7 -0
- package/lib/esm/src/screens/logger/useSearchState.js +2 -0
- package/lib/esm/src/screens/logger/useSearchState.js.map +7 -0
- package/lib/esm/src/shared/NotConnectedMessage.js +24 -0
- package/lib/esm/src/shared/NotConnectedMessage.js.map +7 -0
- package/lib/esm/src/shared/PluginEvents.js +1 -0
- package/lib/esm/src/shared/PluginEvents.js.map +7 -0
- 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 "Listen for Devices" to see already-paired devices, or\n "Start Discovery" 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 ▶\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
|
+
}
|