@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,85 @@
|
|
|
1
|
+
"use strict";var H=Object.create;var m=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var L=(e,o)=>{for(var r in o)m(e,r,{get:o[r],enumerable:!0})},w=(e,o,r,c)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of z(o))!S.call(e,a)&&a!==r&&m(e,a,{get:()=>o[a],enumerable:!(c=$(o,a))||c.enumerable});return e};var T=(e,o,r)=>(r=e!=null?H(M(e)):{},w(o||!e||!e.__esModule?m(r,"default",{value:e,enumerable:!0}):r,e)),K=e=>w(m({},"__esModule",{value:!0}),e);var G={};L(G,{FilterInput:()=>q});module.exports=K(G);var n=require("react"),x=require("@ledgerhq/react-ui"),l=T(require("styled-components")),d=require("./inputStyles"),k=require("./useRecentFilters"),i=require("react/jsx-runtime");const P=l.default.div`
|
|
2
|
+
position: absolute;
|
|
3
|
+
top: 100%;
|
|
4
|
+
left: 0;
|
|
5
|
+
right: 0;
|
|
6
|
+
margin-top: 4px;
|
|
7
|
+
background-color: #fff;
|
|
8
|
+
border: 1px solid #ccc;
|
|
9
|
+
border-radius: 4px;
|
|
10
|
+
max-height: 300px;
|
|
11
|
+
overflow-y: auto;
|
|
12
|
+
z-index: 1000;
|
|
13
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
14
|
+
`,X=l.default.div`
|
|
15
|
+
padding: 6px 10px;
|
|
16
|
+
font-size: 10px;
|
|
17
|
+
color: #666;
|
|
18
|
+
text-transform: uppercase;
|
|
19
|
+
border-bottom: 1px solid #eee;
|
|
20
|
+
`,A=l.default.div`
|
|
21
|
+
display: flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
justify-content: space-between;
|
|
24
|
+
padding: 8px 10px;
|
|
25
|
+
font-size: 12px;
|
|
26
|
+
font-family: monospace;
|
|
27
|
+
color: #333;
|
|
28
|
+
cursor: pointer;
|
|
29
|
+
background-color: ${({$highlighted:e})=>e?"#e8f0fe":"transparent"};
|
|
30
|
+
|
|
31
|
+
&:hover {
|
|
32
|
+
background-color: ${({$highlighted:e})=>e?"#e8f0fe":"#f5f5f5"};
|
|
33
|
+
}
|
|
34
|
+
`,N=l.default.span`
|
|
35
|
+
flex: 1;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
text-overflow: ellipsis;
|
|
38
|
+
white-space: nowrap;
|
|
39
|
+
`,W=l.default.button`
|
|
40
|
+
background: none;
|
|
41
|
+
border: none;
|
|
42
|
+
padding: 2px;
|
|
43
|
+
margin-left: 8px;
|
|
44
|
+
cursor: pointer;
|
|
45
|
+
opacity: 0.5;
|
|
46
|
+
color: #666;
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
|
|
50
|
+
&:hover {
|
|
51
|
+
opacity: 1;
|
|
52
|
+
}
|
|
53
|
+
`,j=l.default.div`
|
|
54
|
+
padding: 12px 10px;
|
|
55
|
+
font-size: 12px;
|
|
56
|
+
color: #999;
|
|
57
|
+
text-align: center;
|
|
58
|
+
`,O=l.default.button`
|
|
59
|
+
background: none;
|
|
60
|
+
border: none;
|
|
61
|
+
padding: 4px 8px;
|
|
62
|
+
cursor: pointer;
|
|
63
|
+
display: flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
color: ${({$active:e})=>e?"#333":"#999"};
|
|
66
|
+
|
|
67
|
+
&:hover {
|
|
68
|
+
color: #333;
|
|
69
|
+
}
|
|
70
|
+
`,U=l.default.button`
|
|
71
|
+
background: none;
|
|
72
|
+
border: none;
|
|
73
|
+
padding: 4px;
|
|
74
|
+
cursor: pointer;
|
|
75
|
+
opacity: 0.5;
|
|
76
|
+
color: #666;
|
|
77
|
+
display: flex;
|
|
78
|
+
align-items: center;
|
|
79
|
+
justify-content: center;
|
|
80
|
+
|
|
81
|
+
&:hover {
|
|
82
|
+
opacity: 1;
|
|
83
|
+
}
|
|
84
|
+
`,q=({value:e,onChange:o})=>{const[r,c]=(0,n.useState)(!1),[a,b]=(0,n.useState)(!1),[u,f]=(0,n.useState)(-1),{recentFilters:p,removeFilter:v}=(0,k.useRecentFilters)(e),h=(0,n.useRef)(null),g=(0,n.useRef)(null);(0,n.useEffect)(()=>{const t=s=>{h.current&&!h.current.contains(s.target)&&c(!1)};return document.addEventListener("mousedown",t),()=>{document.removeEventListener("mousedown",t)}},[]);const D=(0,n.useCallback)(()=>{b(!0)},[]),F=(0,n.useCallback)(()=>{c(t=>(t||f(-1),!t))},[]),I=(0,n.useCallback)(()=>{b(!1)},[]),y=(0,n.useCallback)(t=>{o(t),c(!1),f(-1),g.current?.focus()},[o]),C=(0,n.useCallback)(t=>{t.key==="Escape"?r?(c(!1),f(-1)):g.current?.blur():t.key==="ArrowDown"?(t.preventDefault(),r&&p.length>0&&f(s=>s<p.length-1?s+1:s)):t.key==="ArrowUp"?(t.preventDefault(),r&&f(s=>s>-1?s-1:-1)):t.key==="Enter"&&r&&u>=0&&p[u]&&(t.preventDefault(),y(p[u]))},[r,p,u,y]),R=(0,n.useCallback)((t,s)=>{t.stopPropagation(),v(s)},[v]),E=(0,n.useCallback)(()=>{o(""),g.current?.focus()},[o]);return(0,i.jsxs)(d.InputContainer,{ref:h,children:[(0,i.jsxs)(d.InputWrapper,{$focused:a,children:[(0,i.jsx)(d.StyledInput,{ref:g,type:"text",placeholder:"Filter (e.g. error, -debug, /regex/)",value:e,onChange:t=>o(t.target.value),onFocus:D,onBlur:I,onKeyDown:C}),e&&(0,i.jsx)(U,{onClick:E,title:"Clear filter",children:(0,i.jsx)(x.Icons.Close,{size:"XS"})}),(0,i.jsx)(O,{type:"button",onClick:F,$active:r,title:"Recent filters",children:(0,i.jsx)(x.Icons.ChevronBigBottom,{size:"XS"})})]}),r&&(0,i.jsxs)(P,{children:[(0,i.jsx)(X,{children:"Recent filters"}),p.length===0?(0,i.jsx)(j,{children:"No recent filters"}):p.map((t,s)=>(0,i.jsxs)(A,{$highlighted:s===u,onClick:()=>y(t),children:[(0,i.jsx)(N,{children:t}),(0,i.jsx)(W,{onClick:B=>R(B,t),title:"Remove from recent",children:(0,i.jsx)(x.Icons.Close,{size:"XS"})})]},t))]})]})};0&&(module.exports={FilterInput});
|
|
85
|
+
//# sourceMappingURL=FilterInput.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/FilterInput.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Icons } from \"@ledgerhq/react-ui\";\nimport styled from \"styled-components\";\n\nimport { InputContainer, InputWrapper, StyledInput } from \"./inputStyles\";\nimport { useRecentFilters } from \"./useRecentFilters\";\n\nconst Dropdown = styled.div`\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n margin-top: 4px;\n background-color: #fff;\n border: 1px solid #ccc;\n border-radius: 4px;\n max-height: 300px;\n overflow-y: auto;\n z-index: 1000;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n`;\n\nconst DropdownHeader = styled.div`\n padding: 6px 10px;\n font-size: 10px;\n color: #666;\n text-transform: uppercase;\n border-bottom: 1px solid #eee;\n`;\n\nconst DropdownItem = styled.div<{ $highlighted?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 10px;\n font-size: 12px;\n font-family: monospace;\n color: #333;\n cursor: pointer;\n background-color: ${({ $highlighted }) =>\n $highlighted ? \"#e8f0fe\" : \"transparent\"};\n\n &:hover {\n background-color: ${({ $highlighted }) =>\n $highlighted ? \"#e8f0fe\" : \"#f5f5f5\"};\n }\n`;\n\nconst FilterText = styled.span`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst RemoveButton = styled.button`\n background: none;\n border: none;\n padding: 2px;\n margin-left: 8px;\n cursor: pointer;\n opacity: 0.5;\n color: #666;\n display: flex;\n align-items: center;\n\n &:hover {\n opacity: 1;\n }\n`;\n\nconst EmptyMessage = styled.div`\n padding: 12px 10px;\n font-size: 12px;\n color: #999;\n text-align: center;\n`;\n\nconst HistoryButton = styled.button<{ $active?: boolean }>`\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n color: ${({ $active }) => ($active ? \"#333\" : \"#999\")};\n\n &:hover {\n color: #333;\n }\n`;\n\nconst ClearButton = styled.button`\n background: none;\n border: none;\n padding: 4px;\n cursor: pointer;\n opacity: 0.5;\n color: #666;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n opacity: 1;\n }\n`;\n\ntype FilterInputProps = {\n value: string;\n onChange: (value: string) => void;\n};\n\nexport const FilterInput: React.FC<FilterInputProps> = ({\n value,\n onChange,\n}) => {\n const [showDropdown, setShowDropdown] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n const { recentFilters, removeFilter } = useRecentFilters(value);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setShowDropdown(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const toggleDropdown = useCallback(() => {\n setShowDropdown((prev) => {\n if (!prev) {\n setHighlightedIndex(-1);\n }\n return !prev;\n });\n }, []);\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleSelectFilter = useCallback(\n (filter: string) => {\n onChange(filter);\n setShowDropdown(false);\n setHighlightedIndex(-1);\n inputRef.current?.focus();\n },\n [onChange],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n if (showDropdown) {\n setShowDropdown(false);\n setHighlightedIndex(-1);\n } else {\n inputRef.current?.blur();\n }\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (showDropdown && recentFilters.length > 0) {\n setHighlightedIndex((prev) =>\n prev < recentFilters.length - 1 ? prev + 1 : prev,\n );\n }\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n if (showDropdown) {\n setHighlightedIndex((prev) => (prev > -1 ? prev - 1 : -1));\n }\n } else if (e.key === \"Enter\") {\n if (\n showDropdown &&\n highlightedIndex >= 0 &&\n recentFilters[highlightedIndex]\n ) {\n e.preventDefault();\n handleSelectFilter(recentFilters[highlightedIndex]);\n }\n }\n },\n [showDropdown, recentFilters, highlightedIndex, handleSelectFilter],\n );\n\n const handleRemoveFilter = useCallback(\n (e: React.MouseEvent, filter: string) => {\n e.stopPropagation();\n removeFilter(filter);\n },\n [removeFilter],\n );\n\n const handleClear = useCallback(() => {\n onChange(\"\");\n inputRef.current?.focus();\n }, [onChange]);\n\n return (\n <InputContainer ref={containerRef}>\n <InputWrapper $focused={isFocused}>\n <StyledInput\n ref={inputRef}\n type=\"text\"\n placeholder=\"Filter (e.g. error, -debug, /regex/)\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n />\n {value && (\n <ClearButton onClick={handleClear} title=\"Clear filter\">\n <Icons.Close size=\"XS\" />\n </ClearButton>\n )}\n <HistoryButton\n type=\"button\"\n onClick={toggleDropdown}\n $active={showDropdown}\n title=\"Recent filters\"\n >\n <Icons.ChevronBigBottom size=\"XS\" />\n </HistoryButton>\n </InputWrapper>\n {showDropdown && (\n <Dropdown>\n <DropdownHeader>Recent filters</DropdownHeader>\n {recentFilters.length === 0 ? (\n <EmptyMessage>No recent filters</EmptyMessage>\n ) : (\n recentFilters.map((filter, index) => (\n <DropdownItem\n key={filter}\n $highlighted={index === highlightedIndex}\n onClick={() => handleSelectFilter(filter)}\n >\n <FilterText>{filter}</FilterText>\n <RemoveButton\n onClick={(e) => handleRemoveFilter(e, filter)}\n title=\"Remove from recent\"\n >\n <Icons.Close size=\"XS\" />\n </RemoveButton>\n </DropdownItem>\n ))\n )}\n </Dropdown>\n )}\n </InputContainer>\n );\n};\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgE,iBAChEC,EAAsB,8BACtBC,EAAmB,gCAEnBC,EAA0D,yBAC1DC,EAAiC,8BAqN3BC,EAAA,6BAnNN,MAAMC,EAAW,EAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAelBC,EAAiB,EAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxBE,EAAe,EAAAF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBASN,CAAC,CAAE,aAAAG,CAAa,IAClCA,EAAe,UAAY,aAAa;AAAA;AAAA;AAAA,wBAGpB,CAAC,CAAE,aAAAA,CAAa,IAClCA,EAAe,UAAY,SAAS;AAAA;AAAA,EAIpCC,EAAa,EAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpBK,EAAe,EAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBtBM,EAAe,EAAAN,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOtBO,EAAgB,EAAAP,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOlB,CAAC,CAAE,QAAAQ,CAAQ,IAAOA,EAAU,OAAS,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjDC,EAAc,EAAAT,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBdT,EAA0C,CAAC,CACtD,MAAAmB,EACA,SAAAC,CACF,IAAM,CACJ,KAAM,CAACC,EAAcC,CAAe,KAAI,YAAS,EAAK,EAChD,CAACC,EAAWC,CAAY,KAAI,YAAS,EAAK,EAC1C,CAACC,EAAkBC,CAAmB,KAAI,YAAiB,EAAE,EAC7D,CAAE,cAAAC,EAAe,aAAAC,CAAa,KAAI,oBAAiBT,CAAK,EACxDU,KAAe,UAAuB,IAAI,EAC1CC,KAAW,UAAyB,IAAI,KAG9C,aAAU,IAAM,CACd,MAAMC,EAAsBC,GAAsB,CAE9CH,EAAa,SACb,CAACA,EAAa,QAAQ,SAASG,EAAM,MAAc,GAEnDV,EAAgB,EAAK,CAEzB,EAEA,gBAAS,iBAAiB,YAAaS,CAAkB,EAClD,IAAM,CACX,SAAS,oBAAoB,YAAaA,CAAkB,CAC9D,CACF,EAAG,CAAC,CAAC,EAEL,MAAME,KAAc,eAAY,IAAM,CACpCT,EAAa,EAAI,CACnB,EAAG,CAAC,CAAC,EAECU,KAAiB,eAAY,IAAM,CACvCZ,EAAiBa,IACVA,GACHT,EAAoB,EAAE,EAEjB,CAACS,EACT,CACH,EAAG,CAAC,CAAC,EAECC,KAAa,eAAY,IAAM,CACnCZ,EAAa,EAAK,CACpB,EAAG,CAAC,CAAC,EAECa,KAAqB,eACxBC,GAAmB,CAClBlB,EAASkB,CAAM,EACfhB,EAAgB,EAAK,EACrBI,EAAoB,EAAE,EACtBI,EAAS,SAAS,MAAM,CAC1B,EACA,CAACV,CAAQ,CACX,EAEMmB,KAAgB,eACnBC,GAA6C,CACxCA,EAAE,MAAQ,SACRnB,GACFC,EAAgB,EAAK,EACrBI,EAAoB,EAAE,GAEtBI,EAAS,SAAS,KAAK,EAEhBU,EAAE,MAAQ,aACnBA,EAAE,eAAe,EACbnB,GAAgBM,EAAc,OAAS,GACzCD,EAAqBS,GACnBA,EAAOR,EAAc,OAAS,EAAIQ,EAAO,EAAIA,CAC/C,GAEOK,EAAE,MAAQ,WACnBA,EAAE,eAAe,EACbnB,GACFK,EAAqBS,GAAUA,EAAO,GAAKA,EAAO,EAAI,EAAG,GAElDK,EAAE,MAAQ,SAEjBnB,GACAI,GAAoB,GACpBE,EAAcF,CAAgB,IAE9Be,EAAE,eAAe,EACjBH,EAAmBV,EAAcF,CAAgB,CAAC,EAGxD,EACA,CAACJ,EAAcM,EAAeF,EAAkBY,CAAkB,CACpE,EAEMI,KAAqB,eACzB,CAACD,EAAqBF,IAAmB,CACvCE,EAAE,gBAAgB,EAClBZ,EAAaU,CAAM,CACrB,EACA,CAACV,CAAY,CACf,EAEMc,KAAc,eAAY,IAAM,CACpCtB,EAAS,EAAE,EACXU,EAAS,SAAS,MAAM,CAC1B,EAAG,CAACV,CAAQ,CAAC,EAEb,SACE,QAAC,kBAAe,IAAKS,EACnB,qBAAC,gBAAa,SAAUN,EACtB,oBAAC,eACC,IAAKO,EACL,KAAK,OACL,YAAY,uCACZ,MAAOX,EACP,SAAWqB,GAAMpB,EAASoB,EAAE,OAAO,KAAK,EACxC,QAASP,EACT,OAAQG,EACR,UAAWG,EACb,EACCpB,MACC,OAACD,EAAA,CAAY,QAASwB,EAAa,MAAM,eACvC,mBAAC,QAAM,MAAN,CAAY,KAAK,KAAK,EACzB,KAEF,OAAC1B,EAAA,CACC,KAAK,SACL,QAASkB,EACT,QAASb,EACT,MAAM,iBAEN,mBAAC,QAAM,iBAAN,CAAuB,KAAK,KAAK,EACpC,GACF,EACCA,MACC,QAACb,EAAA,CACC,oBAACE,EAAA,CAAe,0BAAc,EAC7BiB,EAAc,SAAW,KACxB,OAACZ,EAAA,CAAa,6BAAiB,EAE/BY,EAAc,IAAI,CAACW,EAAQK,OACzB,QAAChC,EAAA,CAEC,aAAcgC,IAAUlB,EACxB,QAAS,IAAMY,EAAmBC,CAAM,EAExC,oBAACzB,EAAA,CAAY,SAAAyB,EAAO,KACpB,OAACxB,EAAA,CACC,QAAU0B,GAAMC,EAAmBD,EAAGF,CAAM,EAC5C,MAAM,qBAEN,mBAAC,QAAM,MAAN,CAAY,KAAK,KAAK,EACzB,IAVKA,CAWP,CACD,GAEL,GAEJ,CAEJ",
|
|
6
|
+
"names": ["FilterInput_exports", "__export", "FilterInput", "__toCommonJS", "import_react", "import_react_ui", "import_styled_components", "import_inputStyles", "import_useRecentFilters", "import_jsx_runtime", "Dropdown", "styled", "DropdownHeader", "DropdownItem", "$highlighted", "FilterText", "RemoveButton", "EmptyMessage", "HistoryButton", "$active", "ClearButton", "value", "onChange", "showDropdown", "setShowDropdown", "isFocused", "setIsFocused", "highlightedIndex", "setHighlightedIndex", "recentFilters", "removeFilter", "containerRef", "inputRef", "handleClickOutside", "event", "handleFocus", "toggleDropdown", "prev", "handleBlur", "handleSelectFilter", "filter", "handleKeyDown", "e", "handleRemoveFilter", "handleClear", "index"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";var v=Object.create;var i=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var w=(e,r)=>{for(var l in r)i(e,l,{get:r[l],enumerable:!0})},g=(e,r,l,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of u(r))!y.call(e,o)&&o!==l&&i(e,o,{get:()=>r[o],enumerable:!(t=b(r,o))||t.enumerable});return e};var x=(e,r,l)=>(l=e!=null?v(L(e)):{},g(r||!e||!e.__esModule?i(l,"default",{value:e,enumerable:!0}):l,e)),T=e=>g(i({},"__esModule",{value:!0}),e);var O={};w(O,{LoggerOptionsView:()=>C,defaultLoggerOptions:()=>k});module.exports=T(O);var s=require("@ledgerhq/react-ui"),h=require("antd"),c=x(require("styled-components")),a=require("react/jsx-runtime");const k={activeLevels:{debug:!0,info:!0,warning:!0,error:!0,fatal:!0},showTimestamp:!0,showTag:!0,includeTags:new Set,filterText:""},p=(0,c.default)(s.Flex).attrs({flexDirection:"column",alignItems:"flex-start",justifyContent:"flex-start"})``,d=(0,c.default)(h.Typography.Title).attrs({level:5})`
|
|
2
|
+
margin-bottom: 20px;
|
|
3
|
+
`,m=(0,c.default)(s.Flex).attrs({columnGap:4,flexDirection:"row",flexWrap:"wrap",flexGrow:1,overflow:"scroll"})``,n=c.default.input`
|
|
4
|
+
margin-right: 4px;
|
|
5
|
+
`,C=({options:e,setOptions:r,uniqueTags:l})=>(0,a.jsxs)(s.Flex,{flexDirection:"column",borderRadius:8,padding:5,rowGap:5,children:[(0,a.jsxs)(p,{children:[(0,a.jsx)(d,{style:{color:"white",whiteSpace:"nowrap"},children:"Log levels"}),(0,a.jsxs)(m,{children:[(0,a.jsxs)("label",{children:[(0,a.jsx)(n,{type:"checkbox",checked:Object.values(e.activeLevels).every(Boolean),onChange:t=>{const o=Object.fromEntries(Object.keys(e.activeLevels).map(f=>[f,t.target.checked]));r({...e,activeLevels:o})}}),"All"]}),["debug","info","warning","error","fatal"].map(t=>(0,a.jsxs)("label",{children:[(0,a.jsx)(n,{type:"checkbox",checked:e.activeLevels[t],onChange:o=>{r({...e,activeLevels:{...e.activeLevels,[t]:o.target.checked}})}}),t]},t))]})]}),(0,a.jsxs)(p,{children:[(0,a.jsx)(d,{style:{color:"white",whiteSpace:"nowrap"},children:"Tags"}),(0,a.jsxs)(m,{children:[(0,a.jsxs)("label",{children:[(0,a.jsx)(n,{type:"checkbox",checked:l.size===e.includeTags.size,onChange:t=>{t.target.checked?l.forEach(o=>e.includeTags.add(o)):e.includeTags.clear(),r({...e})}}),"All"]}),Array.from(l).map(t=>(0,a.jsxs)("label",{children:[(0,a.jsx)(n,{type:"checkbox",checked:e.includeTags.has(t),onChange:o=>{o.target.checked?e.includeTags.add(t):e.includeTags.delete(t),r({...e})}}),t]},t))]})]})]});0&&(module.exports={LoggerOptionsView,defaultLoggerOptions});
|
|
6
|
+
//# sourceMappingURL=LoggerOptions.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/LoggerOptions.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from \"react\";\nimport { Flex } from \"@ledgerhq/react-ui\";\nimport { Typography } from \"antd\";\nimport styled from \"styled-components\";\n\nimport { type LogData } from \"./types\";\n\nexport type LoggerOptions = {\n activeLevels: Record<LogData[\"verbosity\"], boolean>;\n showTimestamp: boolean;\n showTag: boolean;\n includeTags: Set<string>;\n filterText: string;\n};\n\ntype LoggerProps = {\n options: LoggerOptions;\n setOptions: (options: LoggerOptions) => void;\n uniqueTags: Set<string>;\n};\n\nexport const defaultLoggerOptions: LoggerOptions = {\n activeLevels: {\n debug: true,\n info: true,\n warning: true,\n error: true,\n fatal: true,\n },\n showTimestamp: true,\n showTag: true,\n includeTags: new Set(),\n filterText: \"\",\n};\n\nconst ParamContainer = styled(Flex).attrs({\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n justifyContent: \"flex-start\",\n})``;\n\nconst ParamTitle = styled(Typography.Title).attrs({\n level: 5,\n})`\n margin-bottom: 20px;\n`;\n\nconst OptionsContainer = styled(Flex).attrs({\n columnGap: 4,\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n flexGrow: 1,\n overflow: \"scroll\",\n})``;\n\nconst Input = styled.input`\n margin-right: 4px;\n`;\n\nexport const LoggerOptionsView: React.FC<LoggerProps> = ({\n options,\n setOptions,\n uniqueTags,\n}) => {\n return (\n <Flex flexDirection=\"column\" borderRadius={8} padding={5} rowGap={5}>\n <ParamContainer>\n <ParamTitle style={{ color: \"white\", whiteSpace: \"nowrap\" }}>\n Log levels\n </ParamTitle>\n <OptionsContainer>\n {/** checkbox to select all / unselect all verbosity*/}\n <label>\n <Input\n type=\"checkbox\"\n checked={Object.values(options.activeLevels).every(Boolean)}\n onChange={(e) => {\n const newActiveLevels = Object.fromEntries(\n Object.keys(options.activeLevels).map((level) => [\n level,\n e.target.checked,\n ]),\n );\n // setOptions({ ...options, activeLevels: newActiveLevels });\n setOptions({\n ...options,\n activeLevels:\n newActiveLevels as LoggerOptions[\"activeLevels\"],\n });\n }}\n />\n All\n </label>\n {[\"debug\", \"info\", \"warning\", \"error\", \"fatal\"].map((level) => (\n <label key={level}>\n <Input\n type=\"checkbox\"\n checked={options.activeLevels[level as LogData[\"verbosity\"]]}\n onChange={(e) => {\n setOptions({\n ...options,\n activeLevels: {\n ...options.activeLevels,\n [level as LogData[\"verbosity\"]]: e.target.checked,\n },\n });\n }}\n />\n {level}\n </label>\n ))}\n </OptionsContainer>\n </ParamContainer>\n {/* <ParamContainer>\n <ParamTitle>Columns</ParamTitle>\n <OptionsContainer>\n <label>\n <Input\n type=\"checkbox\"\n checked={options.showTimestamp}\n onChange={(e) => {\n setOptions({ ...options, showTimestamp: e.target.checked });\n }}\n />\n Timestamp\n </label>\n <label>\n <Input\n type=\"checkbox\"\n checked={options.showTag}\n onChange={(e) => {\n setOptions({ ...options, showTag: e.target.checked });\n }}\n />\n Tag\n </label>\n </OptionsContainer>\n </ParamContainer> */}\n <ParamContainer>\n <ParamTitle style={{ color: \"white\", whiteSpace: \"nowrap\" }}>\n Tags\n </ParamTitle>\n <OptionsContainer>\n <label>\n <Input\n type=\"checkbox\"\n checked={uniqueTags.size === options.includeTags.size}\n onChange={(e) => {\n if (e.target.checked) {\n uniqueTags.forEach((tag) => options.includeTags.add(tag));\n } else {\n options.includeTags.clear();\n }\n setOptions({ ...options });\n }}\n />\n All\n </label>\n {Array.from(uniqueTags).map((tag) => (\n <label key={tag}>\n <Input\n type=\"checkbox\"\n checked={options.includeTags.has(tag)}\n onChange={(e) => {\n if (e.target.checked) {\n options.includeTags.add(tag);\n } else {\n options.includeTags.delete(tag);\n }\n setOptions({ ...options });\n }}\n />\n {tag}\n </label>\n ))}\n </OptionsContainer>\n </ParamContainer>\n </Flex>\n );\n};\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,EAAA,yBAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAqB,8BACrBC,EAA2B,gBAC3BC,EAAmB,gCAgEXC,EAAA,6BA9CD,MAAML,EAAsC,CACjD,aAAc,CACZ,MAAO,GACP,KAAM,GACN,QAAS,GACT,MAAO,GACP,MAAO,EACT,EACA,cAAe,GACf,QAAS,GACT,YAAa,IAAI,IACjB,WAAY,EACd,EAEMM,KAAiB,EAAAC,SAAO,MAAI,EAAE,MAAM,CACxC,cAAe,SACf,WAAY,aACZ,eAAgB,YAClB,CAAC,IAEKC,KAAa,EAAAD,SAAO,aAAW,KAAK,EAAE,MAAM,CAChD,MAAO,CACT,CAAC;AAAA;AAAA,EAIKE,KAAmB,EAAAF,SAAO,MAAI,EAAE,MAAM,CAC1C,UAAW,EACX,cAAe,MACf,SAAU,OACV,SAAU,EACV,SAAU,QACZ,CAAC,IAEKG,EAAQ,EAAAH,QAAO;AAAA;AAAA,EAIRR,EAA2C,CAAC,CACvD,QAAAY,EACA,WAAAC,EACA,WAAAC,CACF,OAEI,QAAC,QAAK,cAAc,SAAS,aAAc,EAAG,QAAS,EAAG,OAAQ,EAChE,qBAACP,EAAA,CACC,oBAACE,EAAA,CAAW,MAAO,CAAE,MAAO,QAAS,WAAY,QAAS,EAAG,sBAE7D,KACA,QAACC,EAAA,CAEC,qBAAC,SACC,oBAACC,EAAA,CACC,KAAK,WACL,QAAS,OAAO,OAAOC,EAAQ,YAAY,EAAE,MAAM,OAAO,EAC1D,SAAWG,GAAM,CACf,MAAMC,EAAkB,OAAO,YAC7B,OAAO,KAAKJ,EAAQ,YAAY,EAAE,IAAKK,GAAU,CAC/CA,EACAF,EAAE,OAAO,OACX,CAAC,CACH,EAEAF,EAAW,CACT,GAAGD,EACH,aACEI,CACJ,CAAC,CACH,EACF,EAAE,OAEJ,EACC,CAAC,QAAS,OAAQ,UAAW,QAAS,OAAO,EAAE,IAAKC,MACnD,QAAC,SACC,oBAACN,EAAA,CACC,KAAK,WACL,QAASC,EAAQ,aAAaK,CAA6B,EAC3D,SAAWF,GAAM,CACfF,EAAW,CACT,GAAGD,EACH,aAAc,CACZ,GAAGA,EAAQ,aACX,CAACK,CAA6B,EAAGF,EAAE,OAAO,OAC5C,CACF,CAAC,CACH,EACF,EACCE,IAdSA,CAeZ,CACD,GACH,GACF,KA0BA,QAACV,EAAA,CACC,oBAACE,EAAA,CAAW,MAAO,CAAE,MAAO,QAAS,WAAY,QAAS,EAAG,gBAE7D,KACA,QAACC,EAAA,CACC,qBAAC,SACC,oBAACC,EAAA,CACC,KAAK,WACL,QAASG,EAAW,OAASF,EAAQ,YAAY,KACjD,SAAWG,GAAM,CACXA,EAAE,OAAO,QACXD,EAAW,QAASI,GAAQN,EAAQ,YAAY,IAAIM,CAAG,CAAC,EAExDN,EAAQ,YAAY,MAAM,EAE5BC,EAAW,CAAE,GAAGD,CAAQ,CAAC,CAC3B,EACF,EAAE,OAEJ,EACC,MAAM,KAAKE,CAAU,EAAE,IAAKI,MAC3B,QAAC,SACC,oBAACP,EAAA,CACC,KAAK,WACL,QAASC,EAAQ,YAAY,IAAIM,CAAG,EACpC,SAAWH,GAAM,CACXA,EAAE,OAAO,QACXH,EAAQ,YAAY,IAAIM,CAAG,EAE3BN,EAAQ,YAAY,OAAOM,CAAG,EAEhCL,EAAW,CAAE,GAAGD,CAAQ,CAAC,CAC3B,EACF,EACCM,IAbSA,CAcZ,CACD,GACH,GACF,GACF",
|
|
6
|
+
"names": ["LoggerOptions_exports", "__export", "LoggerOptionsView", "defaultLoggerOptions", "__toCommonJS", "import_react_ui", "import_antd", "import_styled_components", "import_jsx_runtime", "ParamContainer", "styled", "ParamTitle", "OptionsContainer", "Input", "options", "setOptions", "uniqueTags", "e", "newActiveLevels", "level", "tag"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";var y=Object.create;var c=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var k=(o,t)=>{for(var n in t)c(o,n,{get:t[n],enumerable:!0})},p=(o,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of O(t))!b.call(o,i)&&i!==n&&c(o,i,{get:()=>t[i],enumerable:!(a=F(t,i))||a.enumerable});return o};var w=(o,t,n)=>(n=o!=null?y(R(o)):{},p(t||!o||!o.__esModule?c(n,"default",{value:o,enumerable:!0}):n,o)),B=o=>p(c({},"__esModule",{value:!0}),o);var z={};k(z,{LoggerToolbar:()=>q});module.exports=B(z);var r=require("@ledgerhq/react-ui"),u=w(require("styled-components")),g=require("./FilterInput"),l=require("./LoggerOptions"),m=require("./SearchInput"),e=require("react/jsx-runtime");const s=u.default.div`
|
|
2
|
+
opacity: 0.65;
|
|
3
|
+
cursor: pointer;
|
|
4
|
+
flex-shrink: 0;
|
|
5
|
+
&:hover {
|
|
6
|
+
opacity: 1;
|
|
7
|
+
}
|
|
8
|
+
`,q=({clearLogs:o,downloadLogs:t,options:n,setOptions:a,uniqueTags:i,searchQuery:h,onSearchChange:d,matchCount:v,currentMatchIndex:f,onSearchNext:C,onSearchPrevious:S,onSearchFirst:x,onSearchLast:L,searchInputRef:I})=>(0,e.jsxs)(r.Flex,{flexDirection:"row",columnGap:5,alignItems:"center",flex:1,children:[(0,e.jsx)(s,{onClick:o,children:(0,e.jsx)(r.Icons.DeleteStop,{size:"S"})}),(0,e.jsx)(r.Tooltip,{trigger:"click",placement:"bottom",interactive:!0,content:(0,e.jsx)(l.LoggerOptionsView,{options:n,setOptions:a,uniqueTags:i}),children:(0,e.jsx)(s,{children:(0,e.jsx)(r.Icons.Settings,{size:"S"})})}),(0,e.jsx)(s,{onClick:t,children:(0,e.jsx)(r.Icons.Download,{size:"S"})}),(0,e.jsx)(g.FilterInput,{value:n.filterText,onChange:T=>a({...n,filterText:T})}),(0,e.jsx)(m.SearchInput,{value:h,onChange:d,matchCount:v,currentMatchIndex:f,onNext:C,onPrevious:S,onFirst:x,onLast:L,inputRef:I})]});0&&(module.exports={LoggerToolbar});
|
|
9
|
+
//# sourceMappingURL=LoggerToolbar.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/LoggerToolbar.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from \"react\";\nimport { Flex, Icons, Tooltip } from \"@ledgerhq/react-ui\";\nimport styled from \"styled-components\";\n\nimport { FilterInput } from \"./FilterInput\";\nimport { type LoggerOptions, LoggerOptionsView } from \"./LoggerOptions\";\nimport { SearchInput } from \"./SearchInput\";\n\nconst ButtonContainer = styled.div`\n opacity: 0.65;\n cursor: pointer;\n flex-shrink: 0;\n &:hover {\n opacity: 1;\n }\n`;\n\nexport const LoggerToolbar: React.FC<{\n clearLogs: () => void;\n downloadLogs: () => void;\n options: LoggerOptions;\n setOptions: (options: LoggerOptions) => void;\n uniqueTags: Set<string>;\n searchQuery: string;\n onSearchChange: (query: string) => void;\n matchCount: number;\n currentMatchIndex: number;\n onSearchNext: () => void;\n onSearchPrevious: () => void;\n onSearchFirst: () => void;\n onSearchLast: () => void;\n searchInputRef?: React.RefObject<HTMLInputElement>;\n}> = ({\n clearLogs,\n downloadLogs,\n options,\n setOptions,\n uniqueTags,\n searchQuery,\n onSearchChange,\n matchCount,\n currentMatchIndex,\n onSearchNext,\n onSearchPrevious,\n onSearchFirst,\n onSearchLast,\n searchInputRef,\n}) => (\n <Flex flexDirection=\"row\" columnGap={5} alignItems=\"center\" flex={1}>\n <ButtonContainer onClick={clearLogs}>\n <Icons.DeleteStop size=\"S\" />\n </ButtonContainer>\n <Tooltip\n trigger=\"click\"\n placement=\"bottom\"\n interactive\n content={\n <LoggerOptionsView\n options={options}\n setOptions={setOptions}\n uniqueTags={uniqueTags}\n />\n }\n >\n <ButtonContainer>\n <Icons.Settings size=\"S\" />\n </ButtonContainer>\n </Tooltip>\n <ButtonContainer onClick={downloadLogs}>\n <Icons.Download size=\"S\" />\n </ButtonContainer>\n <FilterInput\n value={options.filterText}\n onChange={(filterText) => setOptions({ ...options, filterText })}\n />\n <SearchInput\n value={searchQuery}\n onChange={onSearchChange}\n matchCount={matchCount}\n currentMatchIndex={currentMatchIndex}\n onNext={onSearchNext}\n onPrevious={onSearchPrevious}\n onFirst={onSearchFirst}\n onLast={onSearchLast}\n inputRef={searchInputRef}\n />\n </Flex>\n);\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAqC,8BACrCC,EAAmB,gCAEnBC,EAA4B,yBAC5BC,EAAsD,2BACtDC,EAA4B,yBA0C1BC,EAAA,6BAxCF,MAAMC,EAAkB,EAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASlBT,EAeR,CAAC,CACJ,UAAAU,EACA,aAAAC,EACA,QAAAC,EACA,WAAAC,EACA,WAAAC,EACA,YAAAC,EACA,eAAAC,EACA,WAAAC,EACA,kBAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,aAAAC,EACA,eAAAC,CACF,OACE,QAAC,QAAK,cAAc,MAAM,UAAW,EAAG,WAAW,SAAS,KAAM,EAChE,oBAACf,EAAA,CAAgB,QAASE,EACxB,mBAAC,QAAM,WAAN,CAAiB,KAAK,IAAI,EAC7B,KACA,OAAC,WACC,QAAQ,QACR,UAAU,SACV,YAAW,GACX,WACE,OAAC,qBACC,QAASE,EACT,WAAYC,EACZ,WAAYC,EACd,EAGF,mBAACN,EAAA,CACC,mBAAC,QAAM,SAAN,CAAe,KAAK,IAAI,EAC3B,EACF,KACA,OAACA,EAAA,CAAgB,QAASG,EACxB,mBAAC,QAAM,SAAN,CAAe,KAAK,IAAI,EAC3B,KACA,OAAC,eACC,MAAOC,EAAQ,WACf,SAAWY,GAAeX,EAAW,CAAE,GAAGD,EAAS,WAAAY,CAAW,CAAC,EACjE,KACA,OAAC,eACC,MAAOT,EACP,SAAUC,EACV,WAAYC,EACZ,kBAAmBC,EACnB,OAAQC,EACR,WAAYC,EACZ,QAASC,EACT,OAAQC,EACR,SAAUC,EACZ,GACF",
|
|
6
|
+
"names": ["LoggerToolbar_exports", "__export", "LoggerToolbar", "__toCommonJS", "import_react_ui", "import_styled_components", "import_FilterInput", "import_LoggerOptions", "import_SearchInput", "import_jsx_runtime", "ButtonContainer", "styled", "clearLogs", "downloadLogs", "options", "setOptions", "uniqueTags", "searchQuery", "onSearchChange", "matchCount", "currentMatchIndex", "onSearchNext", "onSearchPrevious", "onSearchFirst", "onSearchLast", "searchInputRef", "filterText"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";var z=Object.create;var f=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var D=(t,o)=>{for(var n in o)f(t,n,{get:o[n],enumerable:!0})},C=(t,o,n,d)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of F(o))!X.call(t,r)&&r!==n&&f(t,r,{get:()=>o[r],enumerable:!(d=E(o,r))||d.enumerable});return t};var T=(t,o,n)=>(n=t!=null?z(M(t)):{},C(o||!t||!t.__esModule?f(n,"default",{value:t,enumerable:!0}):n,t)),L=t=>C(f({},"__esModule",{value:!0}),t);var K={};D(K,{SearchInput:()=>w});module.exports=L(K);var i=require("react"),a=require("@ledgerhq/react-ui"),u=T(require("styled-components")),s=require("./inputStyles"),e=require("react/jsx-runtime");const N=u.default.span`
|
|
2
|
+
font-size: 11px;
|
|
3
|
+
color: #666;
|
|
4
|
+
white-space: nowrap;
|
|
5
|
+
padding: 0 4px;
|
|
6
|
+
`,h=u.default.button`
|
|
7
|
+
background: none;
|
|
8
|
+
border: none;
|
|
9
|
+
border-left: 1px solid #eee;
|
|
10
|
+
padding: 4px 6px;
|
|
11
|
+
cursor: pointer;
|
|
12
|
+
opacity: 0.65;
|
|
13
|
+
color: #333;
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
|
|
18
|
+
&:hover {
|
|
19
|
+
opacity: 1;
|
|
20
|
+
background-color: #f5f5f5;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
&:disabled {
|
|
24
|
+
opacity: 0.3;
|
|
25
|
+
cursor: default;
|
|
26
|
+
&:hover {
|
|
27
|
+
background-color: transparent;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
`,W=u.default.button`
|
|
31
|
+
background: none;
|
|
32
|
+
border: none;
|
|
33
|
+
padding: 4px;
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
opacity: 0.5;
|
|
36
|
+
color: #666;
|
|
37
|
+
display: flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
|
|
41
|
+
&:hover {
|
|
42
|
+
opacity: 1;
|
|
43
|
+
}
|
|
44
|
+
`,b=u.default.span`
|
|
45
|
+
display: flex;
|
|
46
|
+
flex-direction: column;
|
|
47
|
+
align-items: center;
|
|
48
|
+
line-height: 0;
|
|
49
|
+
transform: scale(0.85);
|
|
50
|
+
|
|
51
|
+
svg {
|
|
52
|
+
display: block;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
svg:first-child {
|
|
56
|
+
margin-bottom: -8px;
|
|
57
|
+
}
|
|
58
|
+
`,w=({value:t,onChange:o,matchCount:n,currentMatchIndex:d,onNext:r,onPrevious:v,onFirst:g,onLast:y,inputRef:B})=>{const I=(0,i.useRef)(null),l=B??I,[x,m]=(0,i.useState)(!1),S=(0,i.useCallback)(c=>{c.key==="Enter"?(c.preventDefault(),c.shiftKey?v():r()):c.key==="Escape"&&l.current?.blur()},[r,v,l]),p=n>0,k=p?d+1:0,R=(0,i.useCallback)(()=>{o(""),l.current?.focus()},[o,l]);return(0,e.jsx)(s.InputContainer,{children:(0,e.jsxs)(s.InputWrapper,{$focused:x,children:[(0,e.jsx)(s.StyledInput,{ref:l,type:"text",placeholder:"Search (Ctrl/Cmd+F)",value:t,onChange:c=>o(c.target.value),onFocus:()=>m(!0),onBlur:()=>m(!1),onKeyDown:S}),t&&(0,e.jsx)(W,{onClick:R,title:"Clear search",children:(0,e.jsx)(a.Icons.Close,{size:"XS"})}),t&&(0,e.jsxs)(N,{children:[k,"/",n]}),(0,e.jsx)(h,{onClick:v,disabled:!p,title:"Previous match (Shift+Enter)",children:(0,e.jsx)(a.Icons.ChevronBigTop,{size:"XS"})}),(0,e.jsx)(h,{onClick:r,disabled:!p,title:"Next match (Enter)",children:(0,e.jsx)(a.Icons.ChevronBigBottom,{size:"XS"})}),(0,e.jsx)(h,{onClick:g,disabled:!p,title:"First match",children:(0,e.jsxs)(b,{children:[(0,e.jsx)(a.Icons.ChevronBigTop,{size:"XS"}),(0,e.jsx)(a.Icons.ChevronBigTop,{size:"XS"})]})}),(0,e.jsx)(h,{onClick:y,disabled:!p,title:"Last match",children:(0,e.jsxs)(b,{children:[(0,e.jsx)(a.Icons.ChevronBigBottom,{size:"XS"}),(0,e.jsx)(a.Icons.ChevronBigBottom,{size:"XS"})]})})]})})};0&&(module.exports={SearchInput});
|
|
59
|
+
//# sourceMappingURL=SearchInput.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/SearchInput.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useCallback, useRef, useState } from \"react\";\nimport { Icons } from \"@ledgerhq/react-ui\";\nimport styled from \"styled-components\";\n\nimport { InputContainer, InputWrapper, StyledInput } from \"./inputStyles\";\n\nconst MatchCounter = styled.span`\n font-size: 11px;\n color: #666;\n white-space: nowrap;\n padding: 0 4px;\n`;\n\nconst NavButton = styled.button`\n background: none;\n border: none;\n border-left: 1px solid #eee;\n padding: 4px 6px;\n cursor: pointer;\n opacity: 0.65;\n color: #333;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n opacity: 1;\n background-color: #f5f5f5;\n }\n\n &:disabled {\n opacity: 0.3;\n cursor: default;\n &:hover {\n background-color: transparent;\n }\n }\n`;\n\nconst ClearButton = styled.button`\n background: none;\n border: none;\n padding: 4px;\n cursor: pointer;\n opacity: 0.5;\n color: #666;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n opacity: 1;\n }\n`;\n\nconst DoubleChevronWrapper = styled.span`\n display: flex;\n flex-direction: column;\n align-items: center;\n line-height: 0;\n transform: scale(0.85);\n\n svg {\n display: block;\n }\n\n svg:first-child {\n margin-bottom: -8px;\n }\n`;\n\ntype SearchInputProps = {\n value: string;\n onChange: (value: string) => void;\n matchCount: number;\n currentMatchIndex: number;\n onNext: () => void;\n onPrevious: () => void;\n onFirst: () => void;\n onLast: () => void;\n inputRef?: React.RefObject<HTMLInputElement>;\n};\n\nexport const SearchInput: React.FC<SearchInputProps> = ({\n value,\n onChange,\n matchCount,\n currentMatchIndex,\n onNext,\n onPrevious,\n onFirst,\n onLast,\n inputRef,\n}) => {\n const localRef = useRef<HTMLInputElement>(null);\n const effectiveRef = inputRef ?? localRef;\n const [isFocused, setIsFocused] = useState(false);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n if (e.shiftKey) {\n onPrevious();\n } else {\n onNext();\n }\n } else if (e.key === \"Escape\") {\n effectiveRef.current?.blur();\n }\n },\n [onNext, onPrevious, effectiveRef],\n );\n\n const hasMatches = matchCount > 0;\n const displayIndex = hasMatches ? currentMatchIndex + 1 : 0;\n\n const handleClear = useCallback(() => {\n onChange(\"\");\n effectiveRef.current?.focus();\n }, [onChange, effectiveRef]);\n\n return (\n <InputContainer>\n <InputWrapper $focused={isFocused}>\n <StyledInput\n ref={effectiveRef}\n type=\"text\"\n placeholder=\"Search (Ctrl/Cmd+F)\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n />\n {value && (\n <ClearButton onClick={handleClear} title=\"Clear search\">\n <Icons.Close size=\"XS\" />\n </ClearButton>\n )}\n {value && (\n <MatchCounter>\n {displayIndex}/{matchCount}\n </MatchCounter>\n )}\n <NavButton\n onClick={onPrevious}\n disabled={!hasMatches}\n title=\"Previous match (Shift+Enter)\"\n >\n <Icons.ChevronBigTop size=\"XS\" />\n </NavButton>\n <NavButton\n onClick={onNext}\n disabled={!hasMatches}\n title=\"Next match (Enter)\"\n >\n <Icons.ChevronBigBottom size=\"XS\" />\n </NavButton>\n <NavButton onClick={onFirst} disabled={!hasMatches} title=\"First match\">\n <DoubleChevronWrapper>\n <Icons.ChevronBigTop size=\"XS\" />\n <Icons.ChevronBigTop size=\"XS\" />\n </DoubleChevronWrapper>\n </NavButton>\n <NavButton onClick={onLast} disabled={!hasMatches} title=\"Last match\">\n <DoubleChevronWrapper>\n <Icons.ChevronBigBottom size=\"XS\" />\n <Icons.ChevronBigBottom size=\"XS\" />\n </DoubleChevronWrapper>\n </NavButton>\n </InputWrapper>\n </InputContainer>\n );\n};\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAqD,iBACrDC,EAAsB,8BACtBC,EAAmB,gCAEnBC,EAA0D,yBAyHlDC,EAAA,6BAvHR,MAAMC,EAAe,EAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOtBC,EAAY,EAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BnBE,EAAc,EAAAF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBrBG,EAAuB,EAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BvBR,EAA0C,CAAC,CACtD,MAAAY,EACA,SAAAC,EACA,WAAAC,EACA,kBAAAC,EACA,OAAAC,EACA,WAAAC,EACA,QAAAC,EACA,OAAAC,EACA,SAAAC,CACF,IAAM,CACJ,MAAMC,KAAW,UAAyB,IAAI,EACxCC,EAAeF,GAAYC,EAC3B,CAACE,EAAWC,CAAY,KAAI,YAAS,EAAK,EAE1CC,KAAgB,eACnBC,GAA6C,CACxCA,EAAE,MAAQ,SACZA,EAAE,eAAe,EACbA,EAAE,SACJT,EAAW,EAEXD,EAAO,GAEAU,EAAE,MAAQ,UACnBJ,EAAa,SAAS,KAAK,CAE/B,EACA,CAACN,EAAQC,EAAYK,CAAY,CACnC,EAEMK,EAAab,EAAa,EAC1Bc,EAAeD,EAAaZ,EAAoB,EAAI,EAEpDc,KAAc,eAAY,IAAM,CACpChB,EAAS,EAAE,EACXS,EAAa,SAAS,MAAM,CAC9B,EAAG,CAACT,EAAUS,CAAY,CAAC,EAE3B,SACE,OAAC,kBACC,oBAAC,gBAAa,SAAUC,EACtB,oBAAC,eACC,IAAKD,EACL,KAAK,OACL,YAAY,sBACZ,MAAOV,EACP,SAAWc,GAAMb,EAASa,EAAE,OAAO,KAAK,EACxC,QAAS,IAAMF,EAAa,EAAI,EAChC,OAAQ,IAAMA,EAAa,EAAK,EAChC,UAAWC,EACb,EACCb,MACC,OAACF,EAAA,CAAY,QAASmB,EAAa,MAAM,eACvC,mBAAC,QAAM,MAAN,CAAY,KAAK,KAAK,EACzB,EAEDjB,MACC,QAACL,EAAA,CACE,UAAAqB,EAAa,IAAEd,GAClB,KAEF,OAACL,EAAA,CACC,QAASQ,EACT,SAAU,CAACU,EACX,MAAM,+BAEN,mBAAC,QAAM,cAAN,CAAoB,KAAK,KAAK,EACjC,KACA,OAAClB,EAAA,CACC,QAASO,EACT,SAAU,CAACW,EACX,MAAM,qBAEN,mBAAC,QAAM,iBAAN,CAAuB,KAAK,KAAK,EACpC,KACA,OAAClB,EAAA,CAAU,QAASS,EAAS,SAAU,CAACS,EAAY,MAAM,cACxD,oBAAChB,EAAA,CACC,oBAAC,QAAM,cAAN,CAAoB,KAAK,KAAK,KAC/B,OAAC,QAAM,cAAN,CAAoB,KAAK,KAAK,GACjC,EACF,KACA,OAACF,EAAA,CAAU,QAASU,EAAQ,SAAU,CAACQ,EAAY,MAAM,aACvD,oBAAChB,EAAA,CACC,oBAAC,QAAM,iBAAN,CAAuB,KAAK,KAAK,KAClC,OAAC,QAAM,iBAAN,CAAuB,KAAK,KAAK,GACpC,EACF,GACF,EACF,CAEJ",
|
|
6
|
+
"names": ["SearchInput_exports", "__export", "SearchInput", "__toCommonJS", "import_react", "import_react_ui", "import_styled_components", "import_inputStyles", "import_jsx_runtime", "MatchCounter", "styled", "NavButton", "ClearButton", "DoubleChevronWrapper", "value", "onChange", "matchCount", "currentMatchIndex", "onNext", "onPrevious", "onFirst", "onLast", "inputRef", "localRef", "effectiveRef", "isFocused", "setIsFocused", "handleKeyDown", "e", "hasMatches", "displayIndex", "handleClear"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var a=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var x=(e,t)=>{for(var o in t)a(e,o,{get:t[o],enumerable:!0})},y=(e,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of d(t))!g.call(e,r)&&r!==o&&a(e,r,{get:()=>t[r],enumerable:!(i=p(t,r))||i.enumerable});return e};var h=e=>y(a({},"__esModule",{value:!0}),e);var F={};x(F,{matchesFilter:()=>m,parseFilterQuery:()=>k});module.exports=h(F);function k(e){const t=e.trim();if(!t)return[];const o=[],i=/(-?)\/([^/]+)\/|(\S+)/g;let r;for(;(r=i.exec(t))!==null;)if(r[2]!==void 0){const n=r[1]==="-",c=r[2];try{const s=new RegExp(c,"i");o.push({type:"regex",pattern:s,exclude:n})}catch{const s=r[0],l=s.startsWith("-"),u=l?s.slice(1):s;u&&o.push({type:"keyword",value:u.toLowerCase(),exclude:l})}}else if(r[3]!==void 0){const n=r[3],c=n.startsWith("-"),s=c?n.slice(1):n;s&&o.push({type:"keyword",value:s.toLowerCase(),exclude:c})}return o}function T(e){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function w(e){return[e.tag,e.message,T(e.payload)].join(" ")}function f(e,t){return e.type==="keyword"?t.toLowerCase().includes(e.value):e.pattern.test(t)}function m(e,t){if(t.length===0)return!0;const o=w(e),i=t.filter(n=>!n.exclude),r=t.filter(n=>n.exclude);for(const n of i)if(!f(n,o))return!1;for(const n of r)if(f(n,o))return!1;return!0}0&&(module.exports={matchesFilter,parseFilterQuery});
|
|
2
|
+
//# sourceMappingURL=filterUtils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/filterUtils.ts"],
|
|
4
|
+
"sourcesContent": ["import { type LogData } from \"./types\";\n\n/**\n * Represents a parsed filter token.\n * - keyword: case-insensitive text match\n * - regex: regular expression match\n */\nexport type FilterToken =\n | { type: \"keyword\"; value: string; exclude: boolean }\n | { type: \"regex\"; pattern: RegExp; exclude: boolean };\n\n/**\n * Parses a Chrome DevTools-style filter query into tokens.\n *\n * Supported syntax:\n * - `keyword` - match logs containing \"keyword\" (case-insensitive)\n * - `word1 word2` - match logs containing both words (AND logic)\n * - `-keyword` - exclude logs containing \"keyword\"\n * - `/regex/` - match logs matching the regex pattern\n * - `-/regex/` - exclude logs matching the regex pattern\n *\n * @param query - The filter query string\n * @returns Array of parsed filter tokens\n */\nexport function parseFilterQuery(query: string): FilterToken[] {\n const trimmed = query.trim();\n if (!trimmed) {\n return [];\n }\n\n const tokens: FilterToken[] = [];\n\n // Regex to match tokens: either a regex pattern (/.../) or a word\n // This handles: -/regex/, /regex/, -keyword, keyword\n const tokenRegex = /(-?)\\/([^/]+)\\/|(\\S+)/g;\n let match: RegExpExecArray | null;\n\n while ((match = tokenRegex.exec(trimmed)) !== null) {\n if (match[2] !== undefined) {\n // Regex pattern: match[1] is the optional \"-\", match[2] is the pattern\n const exclude = match[1] === \"-\";\n const patternStr = match[2];\n\n try {\n const pattern = new RegExp(patternStr, \"i\");\n tokens.push({ type: \"regex\", pattern, exclude });\n } catch {\n // Invalid regex - treat the whole thing as a keyword\n const rawToken = match[0];\n const isExclude = rawToken.startsWith(\"-\");\n const value = isExclude ? rawToken.slice(1) : rawToken;\n if (value) {\n tokens.push({\n type: \"keyword\",\n value: value.toLowerCase(),\n exclude: isExclude,\n });\n }\n }\n } else if (match[3] !== undefined) {\n // Keyword: match[3] is the full token\n const token = match[3];\n const exclude = token.startsWith(\"-\");\n const value = exclude ? token.slice(1) : token;\n\n if (value) {\n tokens.push({ type: \"keyword\", value: value.toLowerCase(), exclude });\n }\n }\n }\n\n return tokens;\n}\n\n/**\n * Converts a log's payload to a searchable string.\n */\nfunction payloadToString(payload: LogData[\"payload\"]): string {\n if (typeof payload === \"string\") {\n return payload;\n }\n try {\n return JSON.stringify(payload);\n } catch {\n return \"\";\n }\n}\n\n/**\n * Creates a searchable text from a log entry.\n * Combines tag, message, and payload into a single string for matching.\n */\nfunction logToSearchableText(log: LogData): string {\n const parts = [log.tag, log.message, payloadToString(log.payload)];\n return parts.join(\" \");\n}\n\n/**\n * Tests if a single token matches the log text.\n */\nfunction tokenMatches(token: FilterToken, text: string): boolean {\n if (token.type === \"keyword\") {\n return text.toLowerCase().includes(token.value);\n } else {\n return token.pattern.test(text);\n }\n}\n\n/**\n * Checks if a log entry matches the filter tokens.\n *\n * Matching logic:\n * - All include tokens must match (AND logic)\n * - No exclude tokens must match\n * - If no tokens, returns true (matches all)\n *\n * @param log - The log entry to test\n * @param tokens - The parsed filter tokens\n * @returns true if the log matches the filter\n */\nexport function matchesFilter(log: LogData, tokens: FilterToken[]): boolean {\n if (tokens.length === 0) {\n return true;\n }\n\n const searchText = logToSearchableText(log);\n\n const includeTokens = tokens.filter((t) => !t.exclude);\n const excludeTokens = tokens.filter((t) => t.exclude);\n\n // All include tokens must match\n for (const token of includeTokens) {\n if (!tokenMatches(token, searchText)) {\n return false;\n }\n }\n\n // No exclude tokens must match\n for (const token of excludeTokens) {\n if (tokenMatches(token, searchText)) {\n return false;\n }\n }\n\n return true;\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,qBAAAC,IAAA,eAAAC,EAAAJ,GAwBO,SAASG,EAAiBE,EAA8B,CAC7D,MAAMC,EAAUD,EAAM,KAAK,EAC3B,GAAI,CAACC,EACH,MAAO,CAAC,EAGV,MAAMC,EAAwB,CAAC,EAIzBC,EAAa,yBACnB,IAAIC,EAEJ,MAAQA,EAAQD,EAAW,KAAKF,CAAO,KAAO,MAC5C,GAAIG,EAAM,CAAC,IAAM,OAAW,CAE1B,MAAMC,EAAUD,EAAM,CAAC,IAAM,IACvBE,EAAaF,EAAM,CAAC,EAE1B,GAAI,CACF,MAAMG,EAAU,IAAI,OAAOD,EAAY,GAAG,EAC1CJ,EAAO,KAAK,CAAE,KAAM,QAAS,QAAAK,EAAS,QAAAF,CAAQ,CAAC,CACjD,MAAQ,CAEN,MAAMG,EAAWJ,EAAM,CAAC,EAClBK,EAAYD,EAAS,WAAW,GAAG,EACnCE,EAAQD,EAAYD,EAAS,MAAM,CAAC,EAAIA,EAC1CE,GACFR,EAAO,KAAK,CACV,KAAM,UACN,MAAOQ,EAAM,YAAY,EACzB,QAASD,CACX,CAAC,CAEL,CACF,SAAWL,EAAM,CAAC,IAAM,OAAW,CAEjC,MAAMO,EAAQP,EAAM,CAAC,EACfC,EAAUM,EAAM,WAAW,GAAG,EAC9BD,EAAQL,EAAUM,EAAM,MAAM,CAAC,EAAIA,EAErCD,GACFR,EAAO,KAAK,CAAE,KAAM,UAAW,MAAOQ,EAAM,YAAY,EAAG,QAAAL,CAAQ,CAAC,CAExE,CAGF,OAAOH,CACT,CAKA,SAASU,EAAgBC,EAAqC,CAC5D,GAAI,OAAOA,GAAY,SACrB,OAAOA,EAET,GAAI,CACF,OAAO,KAAK,UAAUA,CAAO,CAC/B,MAAQ,CACN,MAAO,EACT,CACF,CAMA,SAASC,EAAoBC,EAAsB,CAEjD,MADc,CAACA,EAAI,IAAKA,EAAI,QAASH,EAAgBG,EAAI,OAAO,CAAC,EACpD,KAAK,GAAG,CACvB,CAKA,SAASC,EAAaL,EAAoBM,EAAuB,CAC/D,OAAIN,EAAM,OAAS,UACVM,EAAK,YAAY,EAAE,SAASN,EAAM,KAAK,EAEvCA,EAAM,QAAQ,KAAKM,CAAI,CAElC,CAcO,SAASpB,EAAckB,EAAcb,EAAgC,CAC1E,GAAIA,EAAO,SAAW,EACpB,MAAO,GAGT,MAAMgB,EAAaJ,EAAoBC,CAAG,EAEpCI,EAAgBjB,EAAO,OAAQkB,GAAM,CAACA,EAAE,OAAO,EAC/CC,EAAgBnB,EAAO,OAAQkB,GAAMA,EAAE,OAAO,EAGpD,UAAWT,KAASQ,EAClB,GAAI,CAACH,EAAaL,EAAOO,CAAU,EACjC,MAAO,GAKX,UAAWP,KAASU,EAClB,GAAIL,EAAaL,EAAOO,CAAU,EAChC,MAAO,GAIX,MAAO,EACT",
|
|
6
|
+
"names": ["filterUtils_exports", "__export", "matchesFilter", "parseFilterQuery", "__toCommonJS", "query", "trimmed", "tokens", "tokenRegex", "match", "exclude", "patternStr", "pattern", "rawToken", "isExclude", "value", "token", "payloadToString", "payload", "logToSearchableText", "log", "tokenMatches", "text", "searchText", "includeTokens", "t", "excludeTokens"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var o=require("./filterUtils");const s=(t={})=>({timestamp:"2024-01-01T00:00:00.000Z",tag:"TestTag",verbosity:"info",message:"Test message",payload:{},payloadJSON:"{}",...t});describe("filterUtils",()=>{describe("parseFilterQuery",()=>{it("should return empty array for empty string",()=>{const e=(0,o.parseFilterQuery)("");expect(e).toEqual([])}),it("should return empty array for whitespace-only string",()=>{const e=(0,o.parseFilterQuery)(" ");expect(e).toEqual([])}),it("should parse single keyword",()=>{const e=(0,o.parseFilterQuery)("error");expect(e).toEqual([{type:"keyword",value:"error",exclude:!1}])}),it("should parse multiple keywords",()=>{const e=(0,o.parseFilterQuery)("error warning");expect(e).toEqual([{type:"keyword",value:"error",exclude:!1},{type:"keyword",value:"warning",exclude:!1}])}),it("should parse negative keyword",()=>{const e=(0,o.parseFilterQuery)("-debug");expect(e).toEqual([{type:"keyword",value:"debug",exclude:!0}])}),it("should parse regex pattern",()=>{const e=(0,o.parseFilterQuery)("/error\\d+/");expect(e).toHaveLength(1),expect(e[0].type).toBe("regex"),expect(e[0].exclude).toBe(!1),expect(e[0].pattern.source).toBe("error\\d+")}),it("should parse negative regex pattern",()=>{const e=(0,o.parseFilterQuery)("-/test/");expect(e).toHaveLength(1),expect(e[0].type).toBe("regex"),expect(e[0].exclude).toBe(!0),expect(e[0].pattern.source).toBe("test")}),it("should parse mixed tokens",()=>{const e=(0,o.parseFilterQuery)("error -debug /\\d+/");expect(e).toHaveLength(3),expect(e[0]).toEqual({type:"keyword",value:"error",exclude:!1}),expect(e[1]).toEqual({type:"keyword",value:"debug",exclude:!0}),expect(e[2].type).toBe("regex"),expect(e[2].exclude).toBe(!1)}),it("should handle invalid regex gracefully by treating as keyword",()=>{const e=(0,o.parseFilterQuery)("/[invalid/");expect(e).toHaveLength(1),expect(e[0].type).toBe("keyword")}),it("should ignore standalone dash",()=>{const e=(0,o.parseFilterQuery)("error - warning");expect(e).toEqual([{type:"keyword",value:"error",exclude:!1},{type:"keyword",value:"warning",exclude:!1}])}),it("should convert keywords to lowercase",()=>{const e=(0,o.parseFilterQuery)("ERROR Warning");expect(e).toEqual([{type:"keyword",value:"error",exclude:!1},{type:"keyword",value:"warning",exclude:!1}])})}),describe("matchesFilter",()=>{it("should match all logs when no tokens",()=>{const t=s({message:"any message"}),r=(0,o.matchesFilter)(t,[]);expect(r).toBe(!0)}),it("should match log with keyword in message",()=>{const t=s({message:"An error occurred"}),e=(0,o.parseFilterQuery)("error"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!0)}),it("should match log with keyword in tag",()=>{const t=s({tag:"ErrorHandler",message:"Something happened"}),e=(0,o.parseFilterQuery)("error"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!0)}),it("should match log with keyword in payload (object)",()=>{const t=s({message:"Request completed",payload:{status:"error",code:500}}),e=(0,o.parseFilterQuery)("error"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!0)}),it("should match log with keyword in payload (string)",()=>{const t=s({message:"Request completed",payload:"error details here"}),e=(0,o.parseFilterQuery)("error"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!0)}),it("should not match log without keyword",()=>{const t=s({message:"Everything is fine"}),e=(0,o.parseFilterQuery)("error"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!1)}),it("should exclude log with negative keyword",()=>{const t=s({message:"Debug info"}),e=(0,o.parseFilterQuery)("-debug"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!1)}),it("should match log that doesn't contain excluded keyword",()=>{const t=s({message:"Error occurred"}),e=(0,o.parseFilterQuery)("-debug"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!0)}),it("should match log with regex pattern",()=>{const t=s({message:"Error code: 404"}),e=(0,o.parseFilterQuery)("/\\d{3}/"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!0)}),it("should not match log that doesn't match regex",()=>{const t=s({message:"Error occurred"}),e=(0,o.parseFilterQuery)("/\\d{3}/"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!1)}),it("should exclude log with negative regex",()=>{const t=s({message:"Debug: test123"}),e=(0,o.parseFilterQuery)("-/test\\d+/"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!1)}),it("should require ALL include keywords to match (AND logic)",()=>{const t=s({message:"Error in connection"}),e=(0,o.parseFilterQuery)("error connection"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!0)}),it("should not match if one include keyword is missing",()=>{const t=s({message:"Error occurred"}),e=(0,o.parseFilterQuery)("error connection"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!1)}),it("should handle mixed include and exclude filters",()=>{const t=s({message:"Error in production"}),e=(0,o.parseFilterQuery)("error -debug"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!0)}),it("should exclude when include matches but exclude also matches",()=>{const t=s({message:"Error debug info"}),e=(0,o.parseFilterQuery)("error -debug"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!1)}),it("should be case insensitive for keywords",()=>{const t=s({message:"ERROR occurred"}),e=(0,o.parseFilterQuery)("error"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!0)}),it("should be case insensitive for regex (i flag)",()=>{const t=s({message:"ERROR occurred"}),e=(0,o.parseFilterQuery)("/error/"),r=(0,o.matchesFilter)(t,e);expect(r).toBe(!0)})})});
|
|
2
|
+
//# sourceMappingURL=filterUtils.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/filterUtils.test.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type FilterToken,\n matchesFilter,\n parseFilterQuery,\n} from \"./filterUtils\";\nimport { type LogData } from \"./types\";\n\nconst createLog = (overrides: Partial<LogData> = {}): LogData => ({\n timestamp: \"2024-01-01T00:00:00.000Z\",\n tag: \"TestTag\",\n verbosity: \"info\",\n message: \"Test message\",\n payload: {},\n payloadJSON: \"{}\",\n ...overrides,\n});\n\ndescribe(\"filterUtils\", () => {\n describe(\"parseFilterQuery\", () => {\n it(\"should return empty array for empty string\", () => {\n // GIVEN\n const query = \"\";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return empty array for whitespace-only string\", () => {\n // GIVEN\n const query = \" \";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should parse single keyword\", () => {\n // GIVEN\n const query = \"error\";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n expect(result).toEqual([\n { type: \"keyword\", value: \"error\", exclude: false },\n ]);\n });\n\n it(\"should parse multiple keywords\", () => {\n // GIVEN\n const query = \"error warning\";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n expect(result).toEqual([\n { type: \"keyword\", value: \"error\", exclude: false },\n { type: \"keyword\", value: \"warning\", exclude: false },\n ]);\n });\n\n it(\"should parse negative keyword\", () => {\n // GIVEN\n const query = \"-debug\";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n expect(result).toEqual([\n { type: \"keyword\", value: \"debug\", exclude: true },\n ]);\n });\n\n it(\"should parse regex pattern\", () => {\n // GIVEN\n const query = \"/error\\\\d+/\";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n expect(result).toHaveLength(1);\n expect(result[0]!.type).toBe(\"regex\");\n expect(result[0]!.exclude).toBe(false);\n expect((result[0] as { pattern: RegExp }).pattern.source).toBe(\n \"error\\\\d+\",\n );\n });\n\n it(\"should parse negative regex pattern\", () => {\n // GIVEN\n const query = \"-/test/\";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n expect(result).toHaveLength(1);\n expect(result[0]!.type).toBe(\"regex\");\n expect(result[0]!.exclude).toBe(true);\n expect((result[0] as { pattern: RegExp }).pattern.source).toBe(\"test\");\n });\n\n it(\"should parse mixed tokens\", () => {\n // GIVEN\n const query = \"error -debug /\\\\d+/\";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n expect(result).toHaveLength(3);\n expect(result[0]).toEqual({\n type: \"keyword\",\n value: \"error\",\n exclude: false,\n });\n expect(result[1]).toEqual({\n type: \"keyword\",\n value: \"debug\",\n exclude: true,\n });\n expect(result[2]!.type).toBe(\"regex\");\n expect(result[2]!.exclude).toBe(false);\n });\n\n it(\"should handle invalid regex gracefully by treating as keyword\", () => {\n // GIVEN\n const query = \"/[invalid/\";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n expect(result).toHaveLength(1);\n expect(result[0]!.type).toBe(\"keyword\");\n });\n\n it(\"should ignore standalone dash\", () => {\n // GIVEN\n const query = \"error - warning\";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n // The \"-\" alone should be ignored (empty value after removing -)\n expect(result).toEqual([\n { type: \"keyword\", value: \"error\", exclude: false },\n { type: \"keyword\", value: \"warning\", exclude: false },\n ]);\n });\n\n it(\"should convert keywords to lowercase\", () => {\n // GIVEN\n const query = \"ERROR Warning\";\n\n // WHEN\n const result = parseFilterQuery(query);\n\n // THEN\n expect(result).toEqual([\n { type: \"keyword\", value: \"error\", exclude: false },\n { type: \"keyword\", value: \"warning\", exclude: false },\n ]);\n });\n });\n\n describe(\"matchesFilter\", () => {\n it(\"should match all logs when no tokens\", () => {\n // GIVEN\n const log = createLog({ message: \"any message\" });\n const tokens: FilterToken[] = [];\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n\n it(\"should match log with keyword in message\", () => {\n // GIVEN\n const log = createLog({ message: \"An error occurred\" });\n const tokens = parseFilterQuery(\"error\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n\n it(\"should match log with keyword in tag\", () => {\n // GIVEN\n const log = createLog({\n tag: \"ErrorHandler\",\n message: \"Something happened\",\n });\n const tokens = parseFilterQuery(\"error\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n\n it(\"should match log with keyword in payload (object)\", () => {\n // GIVEN\n const log = createLog({\n message: \"Request completed\",\n payload: { status: \"error\", code: 500 },\n });\n const tokens = parseFilterQuery(\"error\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n\n it(\"should match log with keyword in payload (string)\", () => {\n // GIVEN\n const log = createLog({\n message: \"Request completed\",\n payload: \"error details here\",\n });\n const tokens = parseFilterQuery(\"error\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n\n it(\"should not match log without keyword\", () => {\n // GIVEN\n const log = createLog({ message: \"Everything is fine\" });\n const tokens = parseFilterQuery(\"error\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(false);\n });\n\n it(\"should exclude log with negative keyword\", () => {\n // GIVEN\n const log = createLog({ message: \"Debug info\" });\n const tokens = parseFilterQuery(\"-debug\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(false);\n });\n\n it(\"should match log that doesn't contain excluded keyword\", () => {\n // GIVEN\n const log = createLog({ message: \"Error occurred\" });\n const tokens = parseFilterQuery(\"-debug\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n\n it(\"should match log with regex pattern\", () => {\n // GIVEN\n const log = createLog({ message: \"Error code: 404\" });\n const tokens = parseFilterQuery(\"/\\\\d{3}/\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n\n it(\"should not match log that doesn't match regex\", () => {\n // GIVEN\n const log = createLog({ message: \"Error occurred\" });\n const tokens = parseFilterQuery(\"/\\\\d{3}/\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(false);\n });\n\n it(\"should exclude log with negative regex\", () => {\n // GIVEN\n const log = createLog({ message: \"Debug: test123\" });\n const tokens = parseFilterQuery(\"-/test\\\\d+/\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(false);\n });\n\n it(\"should require ALL include keywords to match (AND logic)\", () => {\n // GIVEN\n const log = createLog({ message: \"Error in connection\" });\n const tokens = parseFilterQuery(\"error connection\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n\n it(\"should not match if one include keyword is missing\", () => {\n // GIVEN\n const log = createLog({ message: \"Error occurred\" });\n const tokens = parseFilterQuery(\"error connection\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(false);\n });\n\n it(\"should handle mixed include and exclude filters\", () => {\n // GIVEN\n const log = createLog({ message: \"Error in production\" });\n const tokens = parseFilterQuery(\"error -debug\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n\n it(\"should exclude when include matches but exclude also matches\", () => {\n // GIVEN\n const log = createLog({ message: \"Error debug info\" });\n const tokens = parseFilterQuery(\"error -debug\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(false);\n });\n\n it(\"should be case insensitive for keywords\", () => {\n // GIVEN\n const log = createLog({ message: \"ERROR occurred\" });\n const tokens = parseFilterQuery(\"error\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n\n it(\"should be case insensitive for regex (i flag)\", () => {\n // GIVEN\n const log = createLog({ message: \"ERROR occurred\" });\n const tokens = parseFilterQuery(\"/error/\");\n\n // WHEN\n const result = matchesFilter(log, tokens);\n\n // THEN\n expect(result).toBe(true);\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_filterUtils", "createLog", "overrides", "result", "log", "tokens"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";var H=Object.create;var u=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var G=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var J=(e,t)=>{for(var c in t)u(e,c,{get:t[c],enumerable:!0})},w=(e,t,c,g)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of B(t))!_.call(e,a)&&a!==c&&u(e,a,{get:()=>t[a],enumerable:!(g=Q(t,a))||g.enumerable});return e};var X=(e,t,c)=>(c=e!=null?H(G(e)):{},w(t||!e||!e.__esModule?u(c,"default",{value:e,enumerable:!0}):c,e)),$=e=>w(u({},"__esModule",{value:!0}),e);var W={};J(W,{Logger:()=>V});module.exports=$(W);var n=X(require("react")),l=require("@ledgerhq/react-ui"),x=require("../../shared/NotConnectedMessage"),D=require("./LoggerToolbar"),b=require("./logsTable"),S=require("./useLogsDataAndOptions"),T=require("./useSearchState"),r=require("react/jsx-runtime");const z=`import { DevToolsLogger } from "@ledgerhq/device-management-kit-devtools-core";
|
|
2
|
+
|
|
3
|
+
const dmk = new DeviceManagementKitBuilder()
|
|
4
|
+
.addLogger(new DevToolsLogger(connector))
|
|
5
|
+
.build();`,V=({logs:e,clearLogs:t,isConnected:c=!0})=>{const[g,a]=n.default.useState(0),{options:k,setOptions:E,displayedLogs:i,uniqueTags:I}=(0,S.useLogsDataAndOptions)({logs:e}),R=i,y=(0,n.useRef)(i.length);(0,n.useEffect)(()=>{const s=y.current,o=i.length;y.current=o,(o<s*.5||o<100&&o<s)&&a(d=>d+1)},[i.length]);const{searchQuery:C,setSearchQuery:K,matchIndices:h,currentMatchIndex:M,currentMatchRowIndex:v,goToNext:p,goToPrevious:m,goToFirst:O,goToLast:F}=(0,T.useSearchState)(i),f=(0,n.useRef)(null);(0,n.useEffect)(()=>{const s=o=>{(o.metaKey||o.ctrlKey)&&o.key.toLowerCase()==="f"&&(o.preventDefault(),f.current?.focus(),f.current?.select()),(o.metaKey||o.ctrlKey)&&o.key.toLowerCase()==="g"&&(o.preventDefault(),o.shiftKey?m():p())};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[p,m]);const N=g,P=(0,n.useMemo)(()=>new Set(h),[h]),U=(0,n.useCallback)(()=>{t(),a(s=>s+1)},[t]),j=(0,n.useCallback)(()=>{const s=e.map(q=>{const{payload:Y,...A}=q;return A}),o=new Blob([JSON.stringify(s,null,2)],{type:"application/json"}),d=URL.createObjectURL(o),L=document.createElement("a");L.href=d,L.download=`logs-sdk-${new Date().toISOString()}.json`,L.click(),URL.revokeObjectURL(d)},[e]);return c?(0,r.jsxs)(l.Flex,{flex:1,flexDirection:"column",minHeight:0,overflow:"hidden",children:[(0,r.jsx)(l.Flex,{flexDirection:"column",px:6,py:2,flexShrink:0,children:(0,r.jsx)(D.LoggerToolbar,{clearLogs:U,downloadLogs:j,options:k,setOptions:E,uniqueTags:I,searchQuery:C,onSearchChange:K,matchCount:h.length,currentMatchIndex:M,onSearchNext:p,onSearchPrevious:m,onSearchFirst:O,onSearchLast:F,searchInputRef:f})}),(0,r.jsx)(l.Divider,{mb:3,flexShrink:0}),(0,r.jsx)(b.LogsTable,{data:R,highlightedIndices:P,currentHighlightIndex:v,scrollToIndex:v},N)]}):(0,r.jsx)(x.NotConnectedMessage,{title:"Logger not connected",description:(0,r.jsxs)(r.Fragment,{children:["To enable logging, add ",(0,r.jsx)("code",{children:"DevToolsLogger"})," to your DMK builder:"]}),codeExample:z})};0&&(module.exports={Logger});
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/index.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { Divider, Flex } from \"@ledgerhq/react-ui\";\n\nimport { NotConnectedMessage } from \"../../shared/NotConnectedMessage\";\nimport { LoggerToolbar } from \"./LoggerToolbar\";\nimport { LogsTable } from \"./logsTable\";\nimport { type LogData } from \"./types\";\nimport { useLogsDataAndOptions } from \"./useLogsDataAndOptions\";\nimport { useSearchState } from \"./useSearchState\";\n\ntype Props = {\n logs: Array<LogData>;\n clearLogs: () => void;\n isConnected?: boolean;\n};\n\nconst LOGGER_CODE_EXAMPLE = `import { DevToolsLogger } from \"@ledgerhq/device-management-kit-devtools-core\";\n\nconst dmk = new DeviceManagementKitBuilder()\n .addLogger(new DevToolsLogger(connector))\n .build();`;\n\nexport const Logger: React.FC<Props> = ({\n logs,\n clearLogs,\n isConnected = true,\n}) => {\n const [nonce, setNonce] = React.useState(0);\n const { options, setOptions, displayedLogs, uniqueTags } =\n useLogsDataAndOptions({\n logs,\n });\n\n const data = displayedLogs;\n\n // Track previous displayedLogs length to detect significant shrinking (e.g., from filtering)\n const prevDisplayedLogsLengthRef = useRef(displayedLogs.length);\n\n useEffect(() => {\n const prevLength = prevDisplayedLogsLengthRef.current;\n const currentLength = displayedLogs.length;\n prevDisplayedLogsLengthRef.current = currentLength;\n\n // If data shrunk significantly, increment nonce to force LogsTable remount\n // This resets the virtualizer state which can get corrupted when filtering\n if (\n currentLength < prevLength * 0.5 ||\n (currentLength < 100 && currentLength < prevLength)\n ) {\n setNonce((prev) => prev + 1);\n }\n }, [displayedLogs.length]);\n\n // Search state\n const {\n searchQuery,\n setSearchQuery,\n matchIndices,\n currentMatchIndex,\n currentMatchRowIndex,\n goToNext,\n goToPrevious,\n goToFirst,\n goToLast,\n } = useSearchState(displayedLogs);\n\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n // Keyboard shortcuts (Ctrl/Cmd+F, Ctrl/Cmd+G / Ctrl/Cmd+Shift+G)\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n // Ctrl/Cmd+F to focus search\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"f\") {\n e.preventDefault();\n searchInputRef.current?.focus();\n searchInputRef.current?.select();\n }\n // Ctrl/Cmd+G / Ctrl/Cmd+Shift+G for navigation\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"g\") {\n e.preventDefault();\n if (e.shiftKey) {\n goToPrevious();\n } else {\n goToNext();\n }\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [goToNext, goToPrevious]);\n\n const tableKey = nonce;\n\n // Memoize highlightedIndices to avoid new Set on every render\n const highlightedIndices = useMemo(\n () => new Set(matchIndices),\n [matchIndices],\n );\n\n const onClickClearLogs = useCallback(() => {\n clearLogs();\n setNonce((prevNonce) => prevNonce + 1);\n }, [clearLogs]);\n\n const downloadLogs = useCallback(() => {\n const logsToExport = logs.map((log) => {\n const { payload, ...rest } = log;\n return rest;\n });\n const blob = new Blob([JSON.stringify(logsToExport, null, 2)], {\n type: \"application/json\",\n });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `logs-sdk-${new Date().toISOString()}.json`;\n a.click();\n URL.revokeObjectURL(url);\n }, [logs]);\n\n if (!isConnected) {\n return (\n <NotConnectedMessage\n title=\"Logger not connected\"\n description={\n <>\n To enable logging, add <code>DevToolsLogger</code> to your DMK\n builder:\n </>\n }\n codeExample={LOGGER_CODE_EXAMPLE}\n />\n );\n }\n\n return (\n <Flex flex={1} flexDirection=\"column\" minHeight={0} overflow=\"hidden\">\n <Flex flexDirection=\"column\" px={6} py={2} flexShrink={0}>\n <LoggerToolbar\n clearLogs={onClickClearLogs}\n downloadLogs={downloadLogs}\n options={options}\n setOptions={setOptions}\n uniqueTags={uniqueTags}\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery}\n matchCount={matchIndices.length}\n currentMatchIndex={currentMatchIndex}\n onSearchNext={goToNext}\n onSearchPrevious={goToPrevious}\n onSearchFirst={goToFirst}\n onSearchLast={goToLast}\n searchInputRef={searchInputRef}\n />\n </Flex>\n <Divider mb={3} flexShrink={0} />\n <LogsTable\n data={data}\n key={tableKey}\n highlightedIndices={highlightedIndices}\n currentHighlightIndex={currentMatchRowIndex}\n scrollToIndex={currentMatchRowIndex}\n />\n </Flex>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["logger_exports", "__export", "Logger", "__toCommonJS", "import_react", "import_react_ui", "import_NotConnectedMessage", "import_LoggerToolbar", "import_logsTable", "import_useLogsDataAndOptions", "import_useSearchState", "import_jsx_runtime", "LOGGER_CODE_EXAMPLE", "logs", "clearLogs", "isConnected", "nonce", "setNonce", "React", "options", "setOptions", "displayedLogs", "uniqueTags", "data", "prevDisplayedLogsLengthRef", "prevLength", "currentLength", "prev", "searchQuery", "setSearchQuery", "matchIndices", "currentMatchIndex", "currentMatchRowIndex", "goToNext", "goToPrevious", "goToFirst", "goToLast", "searchInputRef", "handleKeyDown", "e", "tableKey", "highlightedIndices", "onClickClearLogs", "prevNonce", "downloadLogs", "logsToExport", "log", "payload", "rest", "blob", "url", "a"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";var l=Object.create;var t=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var s=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var x=(o,e)=>{for(var n in e)t(o,n,{get:e[n],enumerable:!0})},d=(o,e,n,p)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of a(e))!f.call(o,r)&&r!==n&&t(o,r,{get:()=>e[r],enumerable:!(p=c(e,r))||p.enumerable});return o};var u=(o,e,n)=>(n=o!=null?l(s(o)):{},d(e||!o||!o.__esModule?t(n,"default",{value:o,enumerable:!0}):n,o)),m=o=>d(t({},"__esModule",{value:!0}),o);var v={};x(v,{InputContainer:()=>b,InputWrapper:()=>h,StyledInput:()=>g});module.exports=m(v);var i=u(require("styled-components"));const b=i.default.div`
|
|
2
|
+
position: relative;
|
|
3
|
+
flex: 1;
|
|
4
|
+
min-width: 150px;
|
|
5
|
+
`,h=i.default.div`
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
height: 28px;
|
|
9
|
+
border: 1px solid ${({$focused:o})=>o?"#999":"#ccc"};
|
|
10
|
+
border-radius: 4px;
|
|
11
|
+
background-color: #fff;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
`,g=i.default.input`
|
|
14
|
+
flex: 1;
|
|
15
|
+
padding: 6px 10px;
|
|
16
|
+
border: none;
|
|
17
|
+
font-size: 12px;
|
|
18
|
+
font-family: monospace;
|
|
19
|
+
background-color: transparent;
|
|
20
|
+
color: #333;
|
|
21
|
+
min-width: 0;
|
|
22
|
+
|
|
23
|
+
&:focus {
|
|
24
|
+
outline: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&::placeholder {
|
|
28
|
+
color: #999;
|
|
29
|
+
}
|
|
30
|
+
`;0&&(module.exports={InputContainer,InputWrapper,StyledInput});
|
|
31
|
+
//# sourceMappingURL=inputStyles.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/inputStyles.ts"],
|
|
4
|
+
"sourcesContent": ["import styled from \"styled-components\";\n\n/**\n * Shared container for filter and search inputs.\n * Uses flex: 1 to share available width.\n */\nexport const InputContainer = styled.div`\n position: relative;\n flex: 1;\n min-width: 150px;\n`;\n\n/**\n * Shared wrapper that provides the bordered box appearance.\n * Can contain the input and additional controls (like search nav buttons).\n */\nexport const InputWrapper = styled.div<{ $focused?: boolean }>`\n display: flex;\n align-items: center;\n height: 28px;\n border: 1px solid ${({ $focused }) => ($focused ? \"#999\" : \"#ccc\")};\n border-radius: 4px;\n background-color: #fff;\n overflow: hidden;\n`;\n\n/**\n * Shared styled input used in both FilterInput and SearchInput.\n * Border and background are handled by InputWrapper.\n */\nexport const StyledInput = styled.input`\n flex: 1;\n padding: 6px 10px;\n border: none;\n font-size: 12px;\n font-family: monospace;\n background-color: transparent;\n color: #333;\n min-width: 0;\n\n &:focus {\n outline: none;\n }\n\n &::placeholder {\n color: #999;\n }\n`;\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,EAAA,iBAAAC,EAAA,gBAAAC,IAAA,eAAAC,EAAAL,GAAA,IAAAM,EAAmB,gCAMZ,MAAMJ,EAAiB,EAAAK,QAAO;AAAA;AAAA;AAAA;AAAA,EAUxBJ,EAAe,EAAAI,QAAO;AAAA;AAAA;AAAA;AAAA,sBAIb,CAAC,CAAE,SAAAC,CAAS,IAAOA,EAAW,OAAS,MAAO;AAAA;AAAA;AAAA;AAAA,EAUvDJ,EAAc,EAAAG,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": ["inputStyles_exports", "__export", "InputContainer", "InputWrapper", "StyledInput", "__toCommonJS", "import_styled_components", "styled", "$focused"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";var d=Object.create;var n=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var x=(t,e)=>{for(var r in e)n(t,r,{get:e[r],enumerable:!0})},l=(t,e,r,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of b(e))!v.call(t,i)&&i!==r&&n(t,i,{get:()=>e[i],enumerable:!(c=p(e,i))||c.enumerable});return t};var y=(t,e,r)=>(r=t!=null?d(u(t)):{},l(e||!t||!t.__esModule?n(r,"default",{value:t,enumerable:!0}):r,t)),f=t=>l(n({},"__esModule",{value:!0}),t);var R={};x(R,{LogText:()=>a,MessageCell:()=>w,PayloadCell:()=>S,TagCell:()=>D,TimestampCell:()=>C,VerbosityCell:()=>h});module.exports=f(R);var g=require("react-inspector"),s=y(require("styled-components")),o=require("react/jsx-runtime");const m=t=>{const e={whiteSpace:"nowrap",flexShrink:0,alignSelf:"center",fontSize:12};switch(t){case"debug":return{...e,color:"grey"};case"info":return{...e,color:"black"};case"warning":return{...e,color:"darkorange"};case"error":return{...e,color:"red"};case"fatal":return{...e,color:"red"};default:return{...e,color:"grey"}}},a=s.default.p(({verbosity:t})=>m(t)),T=(0,s.default)(a)`
|
|
2
|
+
font-size: 10px;
|
|
3
|
+
padding-bottom: 2px;
|
|
4
|
+
`,L=(0,s.default)(a)`
|
|
5
|
+
font-weight: bold;
|
|
6
|
+
width: 190px;
|
|
7
|
+
`,C=({timestamp:t,verbosity:e})=>(0,o.jsx)("div",{children:(0,o.jsx)(T,{verbosity:e,children:new Date(t).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:2,hour12:!1})})}),D=({tag:t,verbosity:e})=>(0,o.jsx)("div",{children:(0,o.jsx)(L,{verbosity:e,children:t})}),h=({verbosity:t})=>(0,o.jsx)("div",{children:(0,o.jsx)(a,{verbosity:t,children:t})}),w=({message:t,verbosity:e})=>(0,o.jsx)("div",{children:(0,o.jsx)(a,{verbosity:e,children:t})}),S=({payload:t})=>typeof t!="string"&&Object.entries(t).length===0?null:(0,o.jsx)("div",{children:(0,o.jsx)(g.Inspector,{data:t,expandLevel:0,table:!1})});0&&(module.exports={LogText,MessageCell,PayloadCell,TagCell,TimestampCell,VerbosityCell});
|
|
8
|
+
//# sourceMappingURL=LogTableCells.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/screens/logger/logsTable/LogTableCells.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from \"react\";\nimport { Inspector } from \"react-inspector\";\nimport styled from \"styled-components\";\n\nimport { type LogData } from \"../types\";\n\ntype Verbosity = LogData[\"verbosity\"];\n\nconst mapVerbosityToTextProps = (\n verbosity: LogData[\"verbosity\"],\n): {\n color: string;\n} => {\n const baseStyle = {\n whiteSpace: \"nowrap\",\n flexShrink: 0,\n alignSelf: \"center\",\n fontSize: 12,\n };\n switch (verbosity) {\n case \"debug\":\n return { ...baseStyle, color: \"grey\" };\n case \"info\":\n return { ...baseStyle, color: \"black\" };\n case \"warning\":\n return { ...baseStyle, color: \"darkorange\" };\n case \"error\":\n return { ...baseStyle, color: \"red\" };\n case \"fatal\":\n return { ...baseStyle, color: \"red\" };\n default:\n return { ...baseStyle, color: \"grey\" };\n }\n};\n\nexport const LogText = styled.p<{ verbosity: Verbosity }>(\n ({ verbosity }: { verbosity: Verbosity }) => {\n return mapVerbosityToTextProps(verbosity);\n },\n);\n\nconst TimestampText = styled(LogText)`\n font-size: 10px;\n padding-bottom: 2px;\n`;\n\nconst TagText = styled(LogText)`\n font-weight: bold;\n width: 190px;\n`;\n\nexport const TimestampCell: React.FC<LogData> = ({ timestamp, verbosity }) => {\n return (\n <div>\n <TimestampText verbosity={verbosity}>\n {new Date(timestamp).toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n fractionalSecondDigits: 2,\n hour12: false,\n })}\n </TimestampText>\n </div>\n );\n};\n\nexport const TagCell: React.FC<LogData> = ({ tag, verbosity }) => {\n return (\n <div>\n <TagText verbosity={verbosity}>{tag}</TagText>\n </div>\n );\n};\n\nexport const VerbosityCell: React.FC<LogData> = ({ verbosity }) => {\n return (\n <div>\n <LogText verbosity={verbosity}>{verbosity}</LogText>\n </div>\n );\n};\n\nexport const MessageCell: React.FC<LogData> = ({ message, verbosity }) => {\n return (\n <div>\n <LogText verbosity={verbosity}>{message}</LogText>\n </div>\n );\n};\n\nexport const PayloadCell: React.FC<LogData> = ({ payload }) => {\n if (typeof payload !== \"string\" && Object.entries(payload).length === 0) {\n return null;\n }\n return (\n <div>\n <Inspector data={payload} expandLevel={0} table={false} />\n </div>\n );\n};\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,gBAAAC,EAAA,gBAAAC,EAAA,YAAAC,EAAA,kBAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAR,GACA,IAAAS,EAA0B,2BAC1BC,EAAmB,gCAoDbC,EAAA,6BA9CN,MAAMC,EACJC,GAGG,CACH,MAAMC,EAAY,CAChB,WAAY,SACZ,WAAY,EACZ,UAAW,SACX,SAAU,EACZ,EACA,OAAQD,EAAW,CACjB,IAAK,QACH,MAAO,CAAE,GAAGC,EAAW,MAAO,MAAO,EACvC,IAAK,OACH,MAAO,CAAE,GAAGA,EAAW,MAAO,OAAQ,EACxC,IAAK,UACH,MAAO,CAAE,GAAGA,EAAW,MAAO,YAAa,EAC7C,IAAK,QACH,MAAO,CAAE,GAAGA,EAAW,MAAO,KAAM,EACtC,IAAK,QACH,MAAO,CAAE,GAAGA,EAAW,MAAO,KAAM,EACtC,QACE,MAAO,CAAE,GAAGA,EAAW,MAAO,MAAO,CACzC,CACF,EAEaZ,EAAU,EAAAa,QAAO,EAC5B,CAAC,CAAE,UAAAF,CAAU,IACJD,EAAwBC,CAAS,CAE5C,EAEMG,KAAgB,EAAAD,SAAOb,CAAO;AAAA;AAAA;AAAA,EAK9Be,KAAU,EAAAF,SAAOb,CAAO;AAAA;AAAA;AAAA,EAKjBI,EAAmC,CAAC,CAAE,UAAAY,EAAW,UAAAL,CAAU,OAEpE,OAAC,OACC,mBAACG,EAAA,CAAc,UAAWH,EACvB,aAAI,KAAKK,CAAS,EAAE,mBAAmB,CAAC,EAAG,CAC1C,KAAM,UACN,OAAQ,UACR,OAAQ,UACR,uBAAwB,EACxB,OAAQ,EACV,CAAC,EACH,EACF,EAISb,EAA6B,CAAC,CAAE,IAAAc,EAAK,UAAAN,CAAU,OAExD,OAAC,OACC,mBAACI,EAAA,CAAQ,UAAWJ,EAAY,SAAAM,EAAI,EACtC,EAISZ,EAAmC,CAAC,CAAE,UAAAM,CAAU,OAEzD,OAAC,OACC,mBAACX,EAAA,CAAQ,UAAWW,EAAY,SAAAA,EAAU,EAC5C,EAISV,EAAiC,CAAC,CAAE,QAAAiB,EAAS,UAAAP,CAAU,OAEhE,OAAC,OACC,mBAACX,EAAA,CAAQ,UAAWW,EAAY,SAAAO,EAAQ,EAC1C,EAIShB,EAAiC,CAAC,CAAE,QAAAiB,CAAQ,IACnD,OAAOA,GAAY,UAAY,OAAO,QAAQA,CAAO,EAAE,SAAW,EAC7D,QAGP,OAAC,OACC,mBAAC,aAAU,KAAMA,EAAS,YAAa,EAAG,MAAO,GAAO,EAC1D",
|
|
6
|
+
"names": ["LogTableCells_exports", "__export", "LogText", "MessageCell", "PayloadCell", "TagCell", "TimestampCell", "VerbosityCell", "__toCommonJS", "import_react_inspector", "import_styled_components", "import_jsx_runtime", "mapVerbosityToTextProps", "verbosity", "baseStyle", "styled", "TimestampText", "TagText", "timestamp", "tag", "message", "payload"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";var d=Object.create;var l=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var m=(o,t)=>{for(var n in t)l(o,n,{get:t[n],enumerable:!0})},c=(o,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of u(t))!S.call(o,r)&&r!==n&&l(o,r,{get:()=>t[r],enumerable:!(a=b(t,r))||a.enumerable});return o};var O=(o,t,n)=>(n=o!=null?d(x(o)):{},c(t||!o||!o.__esModule?l(n,"default",{value:o,enumerable:!0}):n,o)),B=o=>c(l({},"__esModule",{value:!0}),o);var T={};m(T,{ScrollDownButton:()=>I});module.exports=B(T);var p=require("@ledgerhq/react-ui"),s=O(require("styled-components")),e=require("./constants"),i=require("react/jsx-runtime");const D=(0,s.default)(p.Flex)`
|
|
2
|
+
position: absolute;
|
|
3
|
+
bottom: ${e.SCROLL_BUTTON_CONFIG.BOTTOM_OFFSET}px;
|
|
4
|
+
right: ${e.SCROLL_BUTTON_CONFIG.RIGHT_OFFSET}px;
|
|
5
|
+
height: ${e.SCROLL_BUTTON_CONFIG.SIZE}px;
|
|
6
|
+
width: ${e.SCROLL_BUTTON_CONFIG.SIZE}px;
|
|
7
|
+
padding-top: ${e.SCROLL_BUTTON_CONFIG.PADDING_TOP}px;
|
|
8
|
+
border-radius: ${e.SCROLL_BUTTON_CONFIG.BORDER_RADIUS}px;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
|
|
11
|
+
transition: opacity 0.3s;
|
|
12
|
+
opacity: ${({enabled:o})=>o?0:1};
|
|
13
|
+
pointer-events: ${({enabled:o})=>o?"none":"auto"};
|
|
14
|
+
`,I=({onClick:o,enabled:t})=>(0,i.jsx)(D,{enabled:t,onClick:o,alignItems:"center",justifyContent:"center",bg:"neutral.c100",children:(0,i.jsx)(p.Icons.ChevronDown,{size:"XL",color:"neutral.c00"})});0&&(module.exports={ScrollDownButton});
|
|
15
|
+
//# sourceMappingURL=ScrollDownButton.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/screens/logger/logsTable/ScrollDownButton.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from \"react\";\nimport { Flex, Icons } from \"@ledgerhq/react-ui\";\nimport styled from \"styled-components\";\n\nimport { SCROLL_BUTTON_CONFIG } from \"./constants\";\n\nconst StyledButton = styled(Flex)`\n position: absolute;\n bottom: ${SCROLL_BUTTON_CONFIG.BOTTOM_OFFSET}px;\n right: ${SCROLL_BUTTON_CONFIG.RIGHT_OFFSET}px;\n height: ${SCROLL_BUTTON_CONFIG.SIZE}px;\n width: ${SCROLL_BUTTON_CONFIG.SIZE}px;\n padding-top: ${SCROLL_BUTTON_CONFIG.PADDING_TOP}px;\n border-radius: ${SCROLL_BUTTON_CONFIG.BORDER_RADIUS}px;\n cursor: pointer;\n box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n transition: opacity 0.3s;\n opacity: ${({ enabled }: { enabled: boolean }) => (enabled ? 0 : 1)};\n pointer-events: ${({ enabled }: { enabled: boolean }) =>\n enabled ? \"none\" : \"auto\"};\n`;\n\ntype ScrollDownButtonProps = {\n onClick: () => void;\n enabled: boolean;\n};\n\nexport const ScrollDownButton: React.FC<ScrollDownButtonProps> = ({\n onClick,\n enabled,\n}) => (\n <StyledButton\n enabled={enabled}\n onClick={onClick}\n alignItems=\"center\"\n justifyContent=\"center\"\n bg=\"neutral.c100\"\n >\n <Icons.ChevronDown size=\"XL\" color=\"neutral.c00\" />\n </StyledButton>\n);\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAA4B,8BAC5BC,EAAmB,gCAEnBC,EAAqC,uBAkCjCC,EAAA,6BAhCJ,MAAMC,KAAe,EAAAC,SAAO,MAAI;AAAA;AAAA,YAEpB,uBAAqB,aAAa;AAAA,WACnC,uBAAqB,YAAY;AAAA,YAChC,uBAAqB,IAAI;AAAA,WAC1B,uBAAqB,IAAI;AAAA,iBACnB,uBAAqB,WAAW;AAAA,mBAC9B,uBAAqB,aAAa;AAAA;AAAA;AAAA;AAAA,aAIxC,CAAC,CAAE,QAAAC,CAAQ,IAA6BA,EAAU,EAAI,CAAE;AAAA,oBACjD,CAAC,CAAE,QAAAA,CAAQ,IAC3BA,EAAU,OAAS,MAAM;AAAA,EAQhBR,EAAoD,CAAC,CAChE,QAAAS,EACA,QAAAD,CACF,OACE,OAACF,EAAA,CACC,QAASE,EACT,QAASC,EACT,WAAW,SACX,eAAe,SACf,GAAG,eAEH,mBAAC,QAAM,YAAN,CAAkB,KAAK,KAAK,MAAM,cAAc,EACnD",
|
|
6
|
+
"names": ["ScrollDownButton_exports", "__export", "ScrollDownButton", "__toCommonJS", "import_react_ui", "import_styled_components", "import_constants", "import_jsx_runtime", "StyledButton", "styled", "enabled", "onClick"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";var S=Object.create;var d=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var D=(e,t)=>{for(var o in t)d(e,o,{get:t[o],enumerable:!0})},f=(e,t,o,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of T(t))!w.call(e,i)&&i!==o&&d(e,i,{get:()=>t[i],enumerable:!(s=z(t,i))||s.enumerable});return e};var E=(e,t,o)=>(o=e!=null?S($(e)):{},f(t||!e||!e.__esModule?d(o,"default",{value:e,enumerable:!0}):o,e)),C=e=>f(d({},"__esModule",{value:!0}),e);var M={};D(M,{TableBody:()=>B});module.exports=C(M);var p=require("@tanstack/react-table"),l=E(require("styled-components")),h=require("./constants"),r=require("react/jsx-runtime");const L=l.default.tbody`
|
|
2
|
+
display: grid;
|
|
3
|
+
height: ${({totalSize:e})=>e}px;
|
|
4
|
+
position: relative;
|
|
5
|
+
`,H=l.default.tr`
|
|
6
|
+
display: flex;
|
|
7
|
+
position: absolute;
|
|
8
|
+
transform: translateY(${({start:e})=>e}px);
|
|
9
|
+
width: 100%;
|
|
10
|
+
overflow-anchor: none;
|
|
11
|
+
`,I=l.default.tr`
|
|
12
|
+
position: absolute;
|
|
13
|
+
top: ${({totalSize:e})=>e}px;
|
|
14
|
+
height: 1px;
|
|
15
|
+
overflow-anchor: auto;
|
|
16
|
+
`,A=l.default.td`
|
|
17
|
+
display: flex;
|
|
18
|
+
flex: ${({flexible:e,size:t,minSize:o})=>e?`${t} 1 ${o}px`:`0 0 ${t}px`};
|
|
19
|
+
min-width: ${({flexible:e,size:t,minSize:o})=>e?o:t}px;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
background-color: ${({isEven:e,isHighlighted:t,isCurrentMatch:o})=>o?"#ffd700":t?"#fff3cd":e?"white":"ghostwhite"};
|
|
22
|
+
padding: ${h.TABLE_STYLES.CELL_PADDING};
|
|
23
|
+
`,B=({virtualizer:e,rows:t,highlightedIndices:o,currentHighlightIndex:s})=>{const i=e.getTotalSize();return(0,r.jsxs)(L,{totalSize:i,children:[e.getVirtualItems().map(a=>{const m=a.index,c=t[a.index];if(!c)return null;const b=o?.has(m)??!1,u=s===m;return(0,r.jsx)(H,{"data-index":a.index,ref:n=>e.measureElement(n),start:a.start,children:c.getVisibleCells().map(n=>{const g=n.column.columnDef.meta?.flexible??!1,x=n.column.getSize(),y=n.column.columnDef.minSize??50;return(0,r.jsx)(A,{size:x,minSize:y,flexible:g,isEven:m%2===0,isHighlighted:b,isCurrentMatch:u,children:(0,p.flexRender)(n.column.columnDef.cell,n.getContext())},n.id)})},c.id)}),(0,r.jsx)(I,{totalSize:i,children:(0,r.jsx)("td",{})})]})};0&&(module.exports={TableBody});
|
|
24
|
+
//# sourceMappingURL=TableBody.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/screens/logger/logsTable/TableBody.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from \"react\";\nimport { flexRender, type Row } from \"@tanstack/react-table\";\nimport { type Virtualizer } from \"@tanstack/react-virtual\";\nimport styled from \"styled-components\";\n\nimport { type LogData } from \"../types\";\nimport { TABLE_STYLES } from \"./constants\";\n\nconst StyledTbody = styled.tbody<{ totalSize: number }>`\n display: grid;\n height: ${({ totalSize }) => totalSize}px;\n position: relative;\n`;\n\nconst StyledTr = styled.tr<{ start: number }>`\n display: flex;\n position: absolute;\n transform: translateY(${({ start }) => start}px);\n width: 100%;\n overflow-anchor: none;\n`;\n\n// Anchor element at the bottom - browser will anchor to this when scrolled to bottom\n// Using tr/td for valid HTML inside tbody\nconst ScrollAnchor = styled.tr<{ totalSize: number }>`\n position: absolute;\n top: ${({ totalSize }) => totalSize}px;\n height: 1px;\n overflow-anchor: auto;\n`;\n\nconst StyledTd = styled.td<{\n size: number;\n minSize: number;\n flexible: boolean;\n isEven: boolean;\n isHighlighted: boolean;\n isCurrentMatch: boolean;\n}>`\n display: flex;\n flex: ${({ flexible, size, minSize }) =>\n flexible ? `${size} 1 ${minSize}px` : `0 0 ${size}px`};\n min-width: ${({ flexible, size, minSize }) => (flexible ? minSize : size)}px;\n overflow: hidden;\n background-color: ${({ isEven, isHighlighted, isCurrentMatch }) =>\n isCurrentMatch\n ? \"#ffd700\"\n : isHighlighted\n ? \"#fff3cd\"\n : isEven\n ? \"white\"\n : \"ghostwhite\"};\n padding: ${TABLE_STYLES.CELL_PADDING};\n`;\n\ntype TableBodyProps = {\n virtualizer: Virtualizer<HTMLDivElement, Element>;\n rows: Row<LogData>[];\n highlightedIndices?: Set<number>;\n currentHighlightIndex?: number;\n};\n\nexport const TableBody: React.FC<TableBodyProps> = ({\n virtualizer,\n rows,\n highlightedIndices,\n currentHighlightIndex,\n}) => {\n const totalSize = virtualizer.getTotalSize();\n return (\n <StyledTbody totalSize={totalSize}>\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const rowIndex = virtualRow.index;\n const row = rows[virtualRow.index];\n // Skip rendering if row doesn't exist (can happen during filter transitions)\n if (!row) return null;\n const isHighlighted = highlightedIndices?.has(rowIndex) ?? false;\n const isCurrentMatch = currentHighlightIndex === rowIndex;\n return (\n <StyledTr\n data-index={virtualRow.index}\n ref={(node) => virtualizer.measureElement(node)}\n key={row.id}\n start={virtualRow.start}\n >\n {row.getVisibleCells().map((cell) => {\n const flexible =\n (cell.column.columnDef.meta as { flexible?: boolean })\n ?.flexible ?? false;\n const size = cell.column.getSize();\n const minSize = cell.column.columnDef.minSize ?? 50;\n return (\n <StyledTd\n key={cell.id}\n size={size}\n minSize={minSize}\n flexible={flexible}\n isEven={rowIndex % 2 === 0}\n isHighlighted={isHighlighted}\n isCurrentMatch={isCurrentMatch}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </StyledTd>\n );\n })}\n </StyledTr>\n );\n })}\n {/* Anchor element at the bottom for overflow-anchor to latch onto */}\n <ScrollAnchor totalSize={totalSize}>\n <td />\n </ScrollAnchor>\n </StyledTbody>\n );\n};\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAqC,iCAErCC,EAAmB,gCAGnBC,EAA6B,uBAgEzBC,EAAA,6BA9DJ,MAAMC,EAAc,EAAAC,QAAO;AAAA;AAAA,YAEf,CAAC,CAAE,UAAAC,CAAU,IAAMA,CAAS;AAAA;AAAA,EAIlCC,EAAW,EAAAF,QAAO;AAAA;AAAA;AAAA,0BAGE,CAAC,CAAE,MAAAG,CAAM,IAAMA,CAAK;AAAA;AAAA;AAAA,EAOxCC,EAAe,EAAAJ,QAAO;AAAA;AAAA,SAEnB,CAAC,CAAE,UAAAC,CAAU,IAAMA,CAAS;AAAA;AAAA;AAAA,EAK/BI,EAAW,EAAAL,QAAO;AAAA;AAAA,UASd,CAAC,CAAE,SAAAM,EAAU,KAAAC,EAAM,QAAAC,CAAQ,IACjCF,EAAW,GAAGC,CAAI,MAAMC,CAAO,KAAO,OAAOD,CAAI,IAAI;AAAA,eAC1C,CAAC,CAAE,SAAAD,EAAU,KAAAC,EAAM,QAAAC,CAAQ,IAAOF,EAAWE,EAAUD,CAAK;AAAA;AAAA,sBAErD,CAAC,CAAE,OAAAE,EAAQ,cAAAC,EAAe,eAAAC,CAAe,IAC3DA,EACI,UACAD,EACE,UACAD,EACE,QACA,YAAY;AAAA,aACX,eAAa,YAAY;AAAA,EAUzBhB,EAAsC,CAAC,CAClD,YAAAmB,EACA,KAAAC,EACA,mBAAAC,EACA,sBAAAC,CACF,IAAM,CACJ,MAAMd,EAAYW,EAAY,aAAa,EAC3C,SACE,QAACb,EAAA,CAAY,UAAWE,EACrB,UAAAW,EAAY,gBAAgB,EAAE,IAAKI,GAAe,CACjD,MAAMC,EAAWD,EAAW,MACtBE,EAAML,EAAKG,EAAW,KAAK,EAEjC,GAAI,CAACE,EAAK,OAAO,KACjB,MAAMR,EAAgBI,GAAoB,IAAIG,CAAQ,GAAK,GACrDN,EAAiBI,IAA0BE,EACjD,SACE,OAACf,EAAA,CACC,aAAYc,EAAW,MACvB,IAAMG,GAASP,EAAY,eAAeO,CAAI,EAE9C,MAAOH,EAAW,MAEjB,SAAAE,EAAI,gBAAgB,EAAE,IAAKE,GAAS,CACnC,MAAMd,EACHc,EAAK,OAAO,UAAU,MACnB,UAAY,GACZb,EAAOa,EAAK,OAAO,QAAQ,EAC3BZ,EAAUY,EAAK,OAAO,UAAU,SAAW,GACjD,SACE,OAACf,EAAA,CAEC,KAAME,EACN,QAASC,EACT,SAAUF,EACV,OAAQW,EAAW,IAAM,EACzB,cAAeP,EACf,eAAgBC,EAEf,0BAAWS,EAAK,OAAO,UAAU,KAAMA,EAAK,WAAW,CAAC,GARpDA,EAAK,EASZ,CAEJ,CAAC,GAtBIF,EAAI,EAuBX,CAEJ,CAAC,KAED,OAACd,EAAA,CAAa,UAAWH,EACvB,mBAAC,OAAG,EACN,GACF,CAEJ",
|
|
6
|
+
"names": ["TableBody_exports", "__export", "TableBody", "__toCommonJS", "import_react_table", "import_styled_components", "import_constants", "import_jsx_runtime", "StyledTbody", "styled", "totalSize", "StyledTr", "start", "ScrollAnchor", "StyledTd", "flexible", "size", "minSize", "isEven", "isHighlighted", "isCurrentMatch", "virtualizer", "rows", "highlightedIndices", "currentHighlightIndex", "virtualRow", "rowIndex", "row", "node", "cell"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var t=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var b=(e,a)=>{for(var s in a)t(e,s,{get:a[s],enumerable:!0})},p=(e,a,s,m)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of g(a))!f.call(e,o)&&o!==s&&t(e,o,{get:()=>a[o],enumerable:!(m=n(a,o))||m.enumerable});return e};var d=e=>p(t({},"__esModule",{value:!0}),e);var z={};b(z,{createColumns:()=>y});module.exports=d(z);var c=require("@tanstack/react-table"),l=require("./LogTableCells"),r=require("react/jsx-runtime");const i=(0,c.createColumnHelper)(),y=()=>[i.accessor("timestamp",{header:"Timestamp",cell:e=>(0,r.jsx)(l.TimestampCell,{...e.row.original}),enableSorting:!0,size:85,meta:{flexible:!1}}),i.accessor("tag",{header:"Tag",cell:e=>(0,r.jsx)(l.TagCell,{...e.row.original}),enableSorting:!1,size:210,meta:{flexible:!1}}),i.accessor("verbosity",{header:"Verbosity",cell:e=>(0,r.jsx)(l.VerbosityCell,{...e.row.original}),enableSorting:!1,size:65,meta:{flexible:!1}}),i.accessor("message",{header:"Message",cell:e=>(0,r.jsx)(l.MessageCell,{...e.row.original}),enableSorting:!1,size:300,minSize:100,meta:{flexible:!0}}),i.accessor("payload",{header:"Payload",cell:e=>(0,r.jsx)(l.PayloadCell,{...e.row.original},e.cell.id),enableSorting:!1,size:200,minSize:100,meta:{flexible:!0}})];0&&(module.exports={createColumns});
|
|
2
|
+
//# sourceMappingURL=TableColumns.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/screens/logger/logsTable/TableColumns.tsx"],
|
|
4
|
+
"sourcesContent": ["// @ts-expect-error marked as unused but it must be in use for JSX\nimport React from \"react\";\nimport { createColumnHelper } from \"@tanstack/react-table\";\n\nimport { type LogData } from \"../types\";\nimport {\n MessageCell,\n PayloadCell,\n TagCell,\n TimestampCell,\n VerbosityCell,\n} from \"./LogTableCells\";\n\nconst columnHelper = createColumnHelper<LogData>();\n\nexport const createColumns = () => [\n columnHelper.accessor(\"timestamp\", {\n header: \"Timestamp\",\n cell: (info) => <TimestampCell {...info.row.original} />,\n enableSorting: true,\n size: 85,\n meta: { flexible: false },\n }),\n columnHelper.accessor(\"tag\", {\n header: \"Tag\",\n cell: (info) => <TagCell {...info.row.original} />,\n enableSorting: false,\n size: 210,\n meta: { flexible: false },\n }),\n columnHelper.accessor(\"verbosity\", {\n header: \"Verbosity\",\n cell: (info) => <VerbosityCell {...info.row.original} />,\n enableSorting: false,\n size: 65,\n meta: { flexible: false },\n }),\n columnHelper.accessor(\"message\", {\n header: \"Message\",\n cell: (info) => <MessageCell {...info.row.original} />,\n enableSorting: false,\n size: 300, // flex-grow weight (proportional)\n minSize: 100,\n meta: { flexible: true },\n }),\n columnHelper.accessor(\"payload\", {\n header: \"Payload\",\n cell: (info) => <PayloadCell key={info.cell.id} {...info.row.original} />,\n enableSorting: false,\n size: 200, // flex-grow weight (proportional)\n minSize: 100,\n meta: { flexible: true },\n }),\n];\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAAmC,iCAGnCC,EAMO,2BAOaC,EAAA,6BALpB,MAAMC,KAAe,sBAA4B,EAEpCL,EAAgB,IAAM,CACjCK,EAAa,SAAS,YAAa,CACjC,OAAQ,YACR,KAAOC,MAAS,OAAC,iBAAe,GAAGA,EAAK,IAAI,SAAU,EACtD,cAAe,GACf,KAAM,GACN,KAAM,CAAE,SAAU,EAAM,CAC1B,CAAC,EACDD,EAAa,SAAS,MAAO,CAC3B,OAAQ,MACR,KAAOC,MAAS,OAAC,WAAS,GAAGA,EAAK,IAAI,SAAU,EAChD,cAAe,GACf,KAAM,IACN,KAAM,CAAE,SAAU,EAAM,CAC1B,CAAC,EACDD,EAAa,SAAS,YAAa,CACjC,OAAQ,YACR,KAAOC,MAAS,OAAC,iBAAe,GAAGA,EAAK,IAAI,SAAU,EACtD,cAAe,GACf,KAAM,GACN,KAAM,CAAE,SAAU,EAAM,CAC1B,CAAC,EACDD,EAAa,SAAS,UAAW,CAC/B,OAAQ,UACR,KAAOC,MAAS,OAAC,eAAa,GAAGA,EAAK,IAAI,SAAU,EACpD,cAAe,GACf,KAAM,IACN,QAAS,IACT,KAAM,CAAE,SAAU,EAAK,CACzB,CAAC,EACDD,EAAa,SAAS,UAAW,CAC/B,OAAQ,UACR,KAAOC,MAAS,OAAC,eAAgC,GAAGA,EAAK,IAAI,UAA3BA,EAAK,KAAK,EAA2B,EACvE,cAAe,GACf,KAAM,IACN,QAAS,IACT,KAAM,CAAE,SAAU,EAAK,CACzB,CAAC,CACH",
|
|
6
|
+
"names": ["TableColumns_exports", "__export", "createColumns", "__toCommonJS", "import_react_table", "import_LogTableCells", "import_jsx_runtime", "columnHelper", "info"]
|
|
7
|
+
}
|