@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,2 @@
|
|
|
1
|
+
import{matchesFilter as s,parseFilterQuery as r}from"./filterUtils";const c=(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=r("");expect(e).toEqual([])}),it("should return empty array for whitespace-only string",()=>{const e=r(" ");expect(e).toEqual([])}),it("should parse single keyword",()=>{const e=r("error");expect(e).toEqual([{type:"keyword",value:"error",exclude:!1}])}),it("should parse multiple keywords",()=>{const e=r("error warning");expect(e).toEqual([{type:"keyword",value:"error",exclude:!1},{type:"keyword",value:"warning",exclude:!1}])}),it("should parse negative keyword",()=>{const e=r("-debug");expect(e).toEqual([{type:"keyword",value:"debug",exclude:!0}])}),it("should parse regex pattern",()=>{const e=r("/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=r("-/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=r("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=r("/[invalid/");expect(e).toHaveLength(1),expect(e[0].type).toBe("keyword")}),it("should ignore standalone dash",()=>{const e=r("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=r("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=c({message:"any message"}),o=s(t,[]);expect(o).toBe(!0)}),it("should match log with keyword in message",()=>{const t=c({message:"An error occurred"}),e=r("error"),o=s(t,e);expect(o).toBe(!0)}),it("should match log with keyword in tag",()=>{const t=c({tag:"ErrorHandler",message:"Something happened"}),e=r("error"),o=s(t,e);expect(o).toBe(!0)}),it("should match log with keyword in payload (object)",()=>{const t=c({message:"Request completed",payload:{status:"error",code:500}}),e=r("error"),o=s(t,e);expect(o).toBe(!0)}),it("should match log with keyword in payload (string)",()=>{const t=c({message:"Request completed",payload:"error details here"}),e=r("error"),o=s(t,e);expect(o).toBe(!0)}),it("should not match log without keyword",()=>{const t=c({message:"Everything is fine"}),e=r("error"),o=s(t,e);expect(o).toBe(!1)}),it("should exclude log with negative keyword",()=>{const t=c({message:"Debug info"}),e=r("-debug"),o=s(t,e);expect(o).toBe(!1)}),it("should match log that doesn't contain excluded keyword",()=>{const t=c({message:"Error occurred"}),e=r("-debug"),o=s(t,e);expect(o).toBe(!0)}),it("should match log with regex pattern",()=>{const t=c({message:"Error code: 404"}),e=r("/\\d{3}/"),o=s(t,e);expect(o).toBe(!0)}),it("should not match log that doesn't match regex",()=>{const t=c({message:"Error occurred"}),e=r("/\\d{3}/"),o=s(t,e);expect(o).toBe(!1)}),it("should exclude log with negative regex",()=>{const t=c({message:"Debug: test123"}),e=r("-/test\\d+/"),o=s(t,e);expect(o).toBe(!1)}),it("should require ALL include keywords to match (AND logic)",()=>{const t=c({message:"Error in connection"}),e=r("error connection"),o=s(t,e);expect(o).toBe(!0)}),it("should not match if one include keyword is missing",()=>{const t=c({message:"Error occurred"}),e=r("error connection"),o=s(t,e);expect(o).toBe(!1)}),it("should handle mixed include and exclude filters",()=>{const t=c({message:"Error in production"}),e=r("error -debug"),o=s(t,e);expect(o).toBe(!0)}),it("should exclude when include matches but exclude also matches",()=>{const t=c({message:"Error debug info"}),e=r("error -debug"),o=s(t,e);expect(o).toBe(!1)}),it("should be case insensitive for keywords",()=>{const t=c({message:"ERROR occurred"}),e=r("error"),o=s(t,e);expect(o).toBe(!0)}),it("should be case insensitive for regex (i flag)",()=>{const t=c({message:"ERROR occurred"}),e=r("/error/"),o=s(t,e);expect(o).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": ["matchesFilter", "parseFilterQuery", "createLog", "overrides", "result", "log", "tokens"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import U,{useCallback as m,useEffect as f,useMemo as j,useRef as L}from"react";import{Divider as q,Flex as y}from"@ledgerhq/react-ui";import{NotConnectedMessage as A}from"../../shared/NotConnectedMessage";import{LoggerToolbar as H}from"./LoggerToolbar";import{LogsTable as Q}from"./logsTable";import{useLogsDataAndOptions as B}from"./useLogsDataAndOptions";import{useSearchState as G}from"./useSearchState";import{Fragment as J,jsx as t,jsxs as v}from"react/jsx-runtime";const _=`import { DevToolsLogger } from "@ledgerhq/device-management-kit-devtools-core";
|
|
2
|
+
|
|
3
|
+
const dmk = new DeviceManagementKitBuilder()
|
|
4
|
+
.addLogger(new DevToolsLogger(connector))
|
|
5
|
+
.build();`,oe=({logs:c,clearLogs:d,isConnected:w=!0})=>{const[x,u]=U.useState(0),{options:D,setOptions:b,displayedLogs:n,uniqueTags:S}=B({logs:c}),T=n,h=L(n.length);f(()=>{const o=h.current,e=n.length;h.current=e,(e<o*.5||e<100&&e<o)&&u(r=>r+1)},[n.length]);const{searchQuery:k,setSearchQuery:E,matchIndices:s,currentMatchIndex:I,currentMatchRowIndex:p,goToNext:a,goToPrevious:i,goToFirst:R,goToLast:C}=G(n),l=L(null);f(()=>{const o=e=>{(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="f"&&(e.preventDefault(),l.current?.focus(),l.current?.select()),(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="g"&&(e.preventDefault(),e.shiftKey?i():a())};return window.addEventListener("keydown",o),()=>window.removeEventListener("keydown",o)},[a,i]);const K=x,M=j(()=>new Set(s),[s]),O=m(()=>{d(),u(o=>o+1)},[d]),F=m(()=>{const o=c.map(N=>{const{payload:X,...P}=N;return P}),e=new Blob([JSON.stringify(o,null,2)],{type:"application/json"}),r=URL.createObjectURL(e),g=document.createElement("a");g.href=r,g.download=`logs-sdk-${new Date().toISOString()}.json`,g.click(),URL.revokeObjectURL(r)},[c]);return w?v(y,{flex:1,flexDirection:"column",minHeight:0,overflow:"hidden",children:[t(y,{flexDirection:"column",px:6,py:2,flexShrink:0,children:t(H,{clearLogs:O,downloadLogs:F,options:D,setOptions:b,uniqueTags:S,searchQuery:k,onSearchChange:E,matchCount:s.length,currentMatchIndex:I,onSearchNext:a,onSearchPrevious:i,onSearchFirst:R,onSearchLast:C,searchInputRef:l})}),t(q,{mb:3,flexShrink:0}),t(Q,{data:T,highlightedIndices:M,currentHighlightIndex:p,scrollToIndex:p},K)]}):t(A,{title:"Logger not connected",description:v(J,{children:["To enable logging, add ",t("code",{children:"DevToolsLogger"})," to your DMK builder:"]}),codeExample:_})};export{oe as 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": ["React", "useCallback", "useEffect", "useMemo", "useRef", "Divider", "Flex", "NotConnectedMessage", "LoggerToolbar", "LogsTable", "useLogsDataAndOptions", "useSearchState", "Fragment", "jsx", "jsxs", "LOGGER_CODE_EXAMPLE", "Logger", "logs", "clearLogs", "isConnected", "nonce", "setNonce", "options", "setOptions", "displayedLogs", "uniqueTags", "data", "prevDisplayedLogsLengthRef", "prevLength", "currentLength", "prev", "searchQuery", "setSearchQuery", "matchIndices", "currentMatchIndex", "currentMatchRowIndex", "goToNext", "goToPrevious", "goToFirst", "goToLast", "searchInputRef", "handleKeyDown", "tableKey", "highlightedIndices", "onClickClearLogs", "prevNonce", "downloadLogs", "logsToExport", "log", "payload", "rest", "blob", "url", "a"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import o from"styled-components";const r=o.div`
|
|
2
|
+
position: relative;
|
|
3
|
+
flex: 1;
|
|
4
|
+
min-width: 150px;
|
|
5
|
+
`,t=o.div`
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
height: 28px;
|
|
9
|
+
border: 1px solid ${({$focused:e})=>e?"#999":"#ccc"};
|
|
10
|
+
border-radius: 4px;
|
|
11
|
+
background-color: #fff;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
`,i=o.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
|
+
`;export{r as InputContainer,t as InputWrapper,i as 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": "AAAA,OAAOA,MAAY,oBAMZ,MAAMC,EAAiBD,EAAO;AAAA;AAAA;AAAA;AAAA,EAUxBE,EAAeF,EAAO;AAAA;AAAA;AAAA;AAAA,sBAIb,CAAC,CAAE,SAAAG,CAAS,IAAOA,EAAW,OAAS,MAAO;AAAA;AAAA;AAAA;AAAA,EAUvDC,EAAcJ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": ["styled", "InputContainer", "InputWrapper", "$focused", "StyledInput"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{Inspector as a}from"react-inspector";import i from"styled-components";import{jsx as o}from"react/jsx-runtime";const n=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"}}},r=i.p(({verbosity:t})=>n(t)),s=i(r)`
|
|
2
|
+
font-size: 10px;
|
|
3
|
+
padding-bottom: 2px;
|
|
4
|
+
`,c=i(r)`
|
|
5
|
+
font-weight: bold;
|
|
6
|
+
width: 190px;
|
|
7
|
+
`,d=({timestamp:t,verbosity:e})=>o("div",{children:o(s,{verbosity:e,children:new Date(t).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:2,hour12:!1})})}),p=({tag:t,verbosity:e})=>o("div",{children:o(c,{verbosity:e,children:t})}),b=({verbosity:t})=>o("div",{children:o(r,{verbosity:t,children:t})}),u=({message:t,verbosity:e})=>o("div",{children:o(r,{verbosity:e,children:t})}),v=({payload:t})=>typeof t!="string"&&Object.entries(t).length===0?null:o("div",{children:o(a,{data:t,expandLevel:0,table:!1})});export{r as LogText,u as MessageCell,v as PayloadCell,p as TagCell,d as TimestampCell,b as 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": "AACA,OAAS,aAAAA,MAAiB,kBAC1B,OAAOC,MAAY,oBAoDb,cAAAC,MAAA,oBA9CN,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,EAEaC,EAAUL,EAAO,EAC5B,CAAC,CAAE,UAAAG,CAAU,IACJD,EAAwBC,CAAS,CAE5C,EAEMG,EAAgBN,EAAOK,CAAO;AAAA;AAAA;AAAA,EAK9BE,EAAUP,EAAOK,CAAO;AAAA;AAAA;AAAA,EAKjBG,EAAmC,CAAC,CAAE,UAAAC,EAAW,UAAAN,CAAU,IAEpEF,EAAC,OACC,SAAAA,EAACK,EAAA,CAAc,UAAWH,EACvB,aAAI,KAAKM,CAAS,EAAE,mBAAmB,CAAC,EAAG,CAC1C,KAAM,UACN,OAAQ,UACR,OAAQ,UACR,uBAAwB,EACxB,OAAQ,EACV,CAAC,EACH,EACF,EAISC,EAA6B,CAAC,CAAE,IAAAC,EAAK,UAAAR,CAAU,IAExDF,EAAC,OACC,SAAAA,EAACM,EAAA,CAAQ,UAAWJ,EAAY,SAAAQ,EAAI,EACtC,EAISC,EAAmC,CAAC,CAAE,UAAAT,CAAU,IAEzDF,EAAC,OACC,SAAAA,EAACI,EAAA,CAAQ,UAAWF,EAAY,SAAAA,EAAU,EAC5C,EAISU,EAAiC,CAAC,CAAE,QAAAC,EAAS,UAAAX,CAAU,IAEhEF,EAAC,OACC,SAAAA,EAACI,EAAA,CAAQ,UAAWF,EAAY,SAAAW,EAAQ,EAC1C,EAISC,EAAiC,CAAC,CAAE,QAAAC,CAAQ,IACnD,OAAOA,GAAY,UAAY,OAAO,QAAQA,CAAO,EAAE,SAAW,EAC7D,KAGPf,EAAC,OACC,SAAAA,EAACF,EAAA,CAAU,KAAMiB,EAAS,YAAa,EAAG,MAAO,GAAO,EAC1D",
|
|
6
|
+
"names": ["Inspector", "styled", "jsx", "mapVerbosityToTextProps", "verbosity", "baseStyle", "LogText", "TimestampText", "TagText", "TimestampCell", "timestamp", "TagCell", "tag", "VerbosityCell", "MessageCell", "message", "PayloadCell", "payload"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import{Flex as r,Icons as l}from"@ledgerhq/react-ui";import p from"styled-components";import{SCROLL_BUTTON_CONFIG as o}from"./constants";import{jsx as n}from"react/jsx-runtime";const i=p(r)`
|
|
2
|
+
position: absolute;
|
|
3
|
+
bottom: ${o.BOTTOM_OFFSET}px;
|
|
4
|
+
right: ${o.RIGHT_OFFSET}px;
|
|
5
|
+
height: ${o.SIZE}px;
|
|
6
|
+
width: ${o.SIZE}px;
|
|
7
|
+
padding-top: ${o.PADDING_TOP}px;
|
|
8
|
+
border-radius: ${o.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:t})=>t?0:1};
|
|
13
|
+
pointer-events: ${({enabled:t})=>t?"none":"auto"};
|
|
14
|
+
`,d=({onClick:t,enabled:e})=>n(i,{enabled:e,onClick:t,alignItems:"center",justifyContent:"center",bg:"neutral.c100",children:n(l.ChevronDown,{size:"XL",color:"neutral.c00"})});export{d as 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": "AACA,OAAS,QAAAA,EAAM,SAAAC,MAAa,qBAC5B,OAAOC,MAAY,oBAEnB,OAAS,wBAAAC,MAA4B,cAkCjC,cAAAC,MAAA,oBAhCJ,MAAMC,EAAeH,EAAOF,CAAI;AAAA;AAAA,YAEpBG,EAAqB,aAAa;AAAA,WACnCA,EAAqB,YAAY;AAAA,YAChCA,EAAqB,IAAI;AAAA,WAC1BA,EAAqB,IAAI;AAAA,iBACnBA,EAAqB,WAAW;AAAA,mBAC9BA,EAAqB,aAAa;AAAA;AAAA;AAAA;AAAA,aAIxC,CAAC,CAAE,QAAAG,CAAQ,IAA6BA,EAAU,EAAI,CAAE;AAAA,oBACjD,CAAC,CAAE,QAAAA,CAAQ,IAC3BA,EAAU,OAAS,MAAM;AAAA,EAQhBC,EAAoD,CAAC,CAChE,QAAAC,EACA,QAAAF,CACF,IACEF,EAACC,EAAA,CACC,QAASC,EACT,QAASE,EACT,WAAW,SACX,eAAe,SACf,GAAG,eAEH,SAAAJ,EAACH,EAAM,YAAN,CAAkB,KAAK,KAAK,MAAM,cAAc,EACnD",
|
|
6
|
+
"names": ["Flex", "Icons", "styled", "SCROLL_BUTTON_CONFIG", "jsx", "StyledButton", "enabled", "ScrollDownButton", "onClick"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import{flexRender as u}from"@tanstack/react-table";import l from"styled-components";import{TABLE_STYLES as g}from"./constants";import{jsx as r,jsxs as T}from"react/jsx-runtime";const x=l.tbody`
|
|
2
|
+
display: grid;
|
|
3
|
+
height: ${({totalSize:e})=>e}px;
|
|
4
|
+
position: relative;
|
|
5
|
+
`,y=l.tr`
|
|
6
|
+
display: flex;
|
|
7
|
+
position: absolute;
|
|
8
|
+
transform: translateY(${({start:e})=>e}px);
|
|
9
|
+
width: 100%;
|
|
10
|
+
overflow-anchor: none;
|
|
11
|
+
`,S=l.tr`
|
|
12
|
+
position: absolute;
|
|
13
|
+
top: ${({totalSize:e})=>e}px;
|
|
14
|
+
height: 1px;
|
|
15
|
+
overflow-anchor: auto;
|
|
16
|
+
`,z=l.td`
|
|
17
|
+
display: flex;
|
|
18
|
+
flex: ${({flexible:e,size:t,minSize:i})=>e?`${t} 1 ${i}px`:`0 0 ${t}px`};
|
|
19
|
+
min-width: ${({flexible:e,size:t,minSize:i})=>e?i:t}px;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
background-color: ${({isEven:e,isHighlighted:t,isCurrentMatch:i})=>i?"#ffd700":t?"#fff3cd":e?"white":"ghostwhite"};
|
|
22
|
+
padding: ${g.CELL_PADDING};
|
|
23
|
+
`,E=({virtualizer:e,rows:t,highlightedIndices:i,currentHighlightIndex:m})=>{const d=e.getTotalSize();return T(x,{totalSize:d,children:[e.getVirtualItems().map(n=>{const s=n.index,a=t[n.index];if(!a)return null;const c=i?.has(s)??!1,f=m===s;return r(y,{"data-index":n.index,ref:o=>e.measureElement(o),start:n.start,children:a.getVisibleCells().map(o=>{const p=o.column.columnDef.meta?.flexible??!1,h=o.column.getSize(),b=o.column.columnDef.minSize??50;return r(z,{size:h,minSize:b,flexible:p,isEven:s%2===0,isHighlighted:c,isCurrentMatch:f,children:u(o.column.columnDef.cell,o.getContext())},o.id)})},a.id)}),r(S,{totalSize:d,children:r("td",{})})]})};export{E as 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": "AACA,OAAS,cAAAA,MAA4B,wBAErC,OAAOC,MAAY,oBAGnB,OAAS,gBAAAC,MAAoB,cAgEzB,OAsBY,OAAAC,EAtBZ,QAAAC,MAAA,oBA9DJ,MAAMC,EAAcJ,EAAO;AAAA;AAAA,YAEf,CAAC,CAAE,UAAAK,CAAU,IAAMA,CAAS;AAAA;AAAA,EAIlCC,EAAWN,EAAO;AAAA;AAAA;AAAA,0BAGE,CAAC,CAAE,MAAAO,CAAM,IAAMA,CAAK;AAAA;AAAA;AAAA,EAOxCC,EAAeR,EAAO;AAAA;AAAA,SAEnB,CAAC,CAAE,UAAAK,CAAU,IAAMA,CAAS;AAAA;AAAA;AAAA,EAK/BI,EAAWT,EAAO;AAAA;AAAA,UASd,CAAC,CAAE,SAAAU,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,aACXZ,EAAa,YAAY;AAAA,EAUzBe,EAAsC,CAAC,CAClD,YAAAC,EACA,KAAAC,EACA,mBAAAC,EACA,sBAAAC,CACF,IAAM,CACJ,MAAMf,EAAYY,EAAY,aAAa,EAC3C,OACEd,EAACC,EAAA,CAAY,UAAWC,EACrB,UAAAY,EAAY,gBAAgB,EAAE,IAAKI,GAAe,CACjD,MAAMC,EAAWD,EAAW,MACtBE,EAAML,EAAKG,EAAW,KAAK,EAEjC,GAAI,CAACE,EAAK,OAAO,KACjB,MAAMT,EAAgBK,GAAoB,IAAIG,CAAQ,GAAK,GACrDP,EAAiBK,IAA0BE,EACjD,OACEpB,EAACI,EAAA,CACC,aAAYe,EAAW,MACvB,IAAMG,GAASP,EAAY,eAAeO,CAAI,EAE9C,MAAOH,EAAW,MAEjB,SAAAE,EAAI,gBAAgB,EAAE,IAAKE,GAAS,CACnC,MAAMf,EACHe,EAAK,OAAO,UAAU,MACnB,UAAY,GACZd,EAAOc,EAAK,OAAO,QAAQ,EAC3Bb,EAAUa,EAAK,OAAO,UAAU,SAAW,GACjD,OACEvB,EAACO,EAAA,CAEC,KAAME,EACN,QAASC,EACT,SAAUF,EACV,OAAQY,EAAW,IAAM,EACzB,cAAeR,EACf,eAAgBC,EAEf,SAAAhB,EAAW0B,EAAK,OAAO,UAAU,KAAMA,EAAK,WAAW,CAAC,GARpDA,EAAK,EASZ,CAEJ,CAAC,GAtBIF,EAAI,EAuBX,CAEJ,CAAC,EAEDrB,EAACM,EAAA,CAAa,UAAWH,EACvB,SAAAH,EAAC,OAAG,EACN,GACF,CAEJ",
|
|
6
|
+
"names": ["flexRender", "styled", "TABLE_STYLES", "jsx", "jsxs", "StyledTbody", "totalSize", "StyledTr", "start", "ScrollAnchor", "StyledTd", "flexible", "size", "minSize", "isEven", "isHighlighted", "isCurrentMatch", "TableBody", "virtualizer", "rows", "highlightedIndices", "currentHighlightIndex", "virtualRow", "rowIndex", "row", "node", "cell"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createColumnHelper as r}from"@tanstack/react-table";import{MessageCell as o,PayloadCell as i,TagCell as s,TimestampCell as t,VerbosityCell as m}from"./LogTableCells";import{jsx as a}from"react/jsx-runtime";const l=r(),g=()=>[l.accessor("timestamp",{header:"Timestamp",cell:e=>a(t,{...e.row.original}),enableSorting:!0,size:85,meta:{flexible:!1}}),l.accessor("tag",{header:"Tag",cell:e=>a(s,{...e.row.original}),enableSorting:!1,size:210,meta:{flexible:!1}}),l.accessor("verbosity",{header:"Verbosity",cell:e=>a(m,{...e.row.original}),enableSorting:!1,size:65,meta:{flexible:!1}}),l.accessor("message",{header:"Message",cell:e=>a(o,{...e.row.original}),enableSorting:!1,size:300,minSize:100,meta:{flexible:!0}}),l.accessor("payload",{header:"Payload",cell:e=>a(i,{...e.row.original},e.cell.id),enableSorting:!1,size:200,minSize:100,meta:{flexible:!0}})];export{g as 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": "AAEA,OAAS,sBAAAA,MAA0B,wBAGnC,OACE,eAAAC,EACA,eAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,iBAAAC,MACK,kBAOa,cAAAC,MAAA,oBALpB,MAAMC,EAAeP,EAA4B,EAEpCQ,EAAgB,IAAM,CACjCD,EAAa,SAAS,YAAa,CACjC,OAAQ,YACR,KAAOE,GAASH,EAACF,EAAA,CAAe,GAAGK,EAAK,IAAI,SAAU,EACtD,cAAe,GACf,KAAM,GACN,KAAM,CAAE,SAAU,EAAM,CAC1B,CAAC,EACDF,EAAa,SAAS,MAAO,CAC3B,OAAQ,MACR,KAAOE,GAASH,EAACH,EAAA,CAAS,GAAGM,EAAK,IAAI,SAAU,EAChD,cAAe,GACf,KAAM,IACN,KAAM,CAAE,SAAU,EAAM,CAC1B,CAAC,EACDF,EAAa,SAAS,YAAa,CACjC,OAAQ,YACR,KAAOE,GAASH,EAACD,EAAA,CAAe,GAAGI,EAAK,IAAI,SAAU,EACtD,cAAe,GACf,KAAM,GACN,KAAM,CAAE,SAAU,EAAM,CAC1B,CAAC,EACDF,EAAa,SAAS,UAAW,CAC/B,OAAQ,UACR,KAAOE,GAASH,EAACL,EAAA,CAAa,GAAGQ,EAAK,IAAI,SAAU,EACpD,cAAe,GACf,KAAM,IACN,QAAS,IACT,KAAM,CAAE,SAAU,EAAK,CACzB,CAAC,EACDF,EAAa,SAAS,UAAW,CAC/B,OAAQ,UACR,KAAOE,GAASH,EAACJ,EAAA,CAAgC,GAAGO,EAAK,IAAI,UAA3BA,EAAK,KAAK,EAA2B,EACvE,cAAe,GACf,KAAM,IACN,QAAS,IACT,KAAM,CAAE,SAAU,EAAK,CACzB,CAAC,CACH",
|
|
6
|
+
"names": ["createColumnHelper", "MessageCell", "PayloadCell", "TagCell", "TimestampCell", "VerbosityCell", "jsx", "columnHelper", "createColumns", "info"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import{flexRender as d}from"@tanstack/react-table";import n from"styled-components";import{TABLE_STYLES as l}from"./constants";import{jsx as i,jsxs as r}from"react/jsx-runtime";const m=n.thead`
|
|
2
|
+
display: grid;
|
|
3
|
+
position: sticky;
|
|
4
|
+
top: 0;
|
|
5
|
+
z-index: 1;
|
|
6
|
+
background-color: white;
|
|
7
|
+
`,u=n.tr`
|
|
8
|
+
display: flex;
|
|
9
|
+
width: 100%;
|
|
10
|
+
background-color: ghostwhite;
|
|
11
|
+
`,p=n.th`
|
|
12
|
+
display: flex;
|
|
13
|
+
flex: ${({flexible:o,size:t,minSize:e})=>o?`${t} 1 ${e}px`:`0 0 ${t}px`};
|
|
14
|
+
min-width: ${({flexible:o,size:t,minSize:e})=>o?e:t}px;
|
|
15
|
+
position: relative;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
`,g=n.div`
|
|
18
|
+
font-size: ${l.HEADER_FONT_SIZE}px;
|
|
19
|
+
cursor: ${({canSort:o})=>o?"pointer":"default"};
|
|
20
|
+
user-select: ${({canSort:o})=>o?"none":"auto"};
|
|
21
|
+
`,S=n.div`
|
|
22
|
+
position: absolute;
|
|
23
|
+
right: 0;
|
|
24
|
+
top: 0;
|
|
25
|
+
width: ${l.RESIZER_WIDTH};
|
|
26
|
+
margin-right: ${l.RESIZER_MARGIN};
|
|
27
|
+
height: 100%;
|
|
28
|
+
cursor: col-resize;
|
|
29
|
+
background-color: lightgrey;
|
|
30
|
+
touch-action: none;
|
|
31
|
+
user-select: none;
|
|
32
|
+
`,x=({headerGroups:o})=>i(m,{children:o.map(t=>i(u,{children:t.headers.map(e=>{const s=e.column.columnDef.meta?.flexible??!1,c=e.getSize(),a=e.column.columnDef.minSize??50;return r(p,{size:c,minSize:a,flexible:s,children:[r(g,{canSort:e.column.getCanSort(),onClick:e.column.getToggleSortingHandler(),children:[d(e.column.columnDef.header,e.getContext()),{asc:" \u{1F53C}",desc:" \u{1F53D}"}[e.column.getIsSorted()]??null]}),i(S,{onDoubleClick:()=>e.column.resetSize(),onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler()})]},e.id)})},t.id))});export{x as TableHeader};
|
|
33
|
+
//# sourceMappingURL=TableHeader.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/screens/logger/logsTable/TableHeader.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from \"react\";\nimport { flexRender, type HeaderGroup } from \"@tanstack/react-table\";\nimport styled from \"styled-components\";\n\nimport { type LogData } from \"../types\";\nimport { TABLE_STYLES } from \"./constants\";\n\nconst StyledThead = styled.thead`\n display: grid;\n position: sticky;\n top: 0;\n z-index: 1;\n background-color: white;\n`;\n\nconst StyledTr = styled.tr`\n display: flex;\n width: 100%;\n background-color: ghostwhite;\n`;\n\nconst StyledTh = styled.th<{\n size: number;\n minSize: number;\n flexible: 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 position: relative;\n overflow: hidden;\n`;\n\nconst HeaderContent = styled.div<{ canSort: boolean }>`\n font-size: ${TABLE_STYLES.HEADER_FONT_SIZE}px;\n cursor: ${({ canSort }) => (canSort ? \"pointer\" : \"default\")};\n user-select: ${({ canSort }) => (canSort ? \"none\" : \"auto\")};\n`;\n\nconst Resizer = styled.div`\n position: absolute;\n right: 0;\n top: 0;\n width: ${TABLE_STYLES.RESIZER_WIDTH};\n margin-right: ${TABLE_STYLES.RESIZER_MARGIN};\n height: 100%;\n cursor: col-resize;\n background-color: lightgrey;\n touch-action: none;\n user-select: none;\n`;\n\ntype TableHeaderProps = {\n headerGroups: HeaderGroup<LogData>[];\n};\n\nexport const TableHeader: React.FC<TableHeaderProps> = ({ headerGroups }) => {\n return (\n <StyledThead>\n {headerGroups.map((headerGroup) => (\n <StyledTr key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n const flexible =\n (header.column.columnDef.meta as { flexible?: boolean })\n ?.flexible ?? false;\n const size = header.getSize();\n const minSize = header.column.columnDef.minSize ?? 50;\n return (\n <StyledTh\n key={header.id}\n size={size}\n minSize={minSize}\n flexible={flexible}\n >\n <HeaderContent\n canSort={header.column.getCanSort()}\n onClick={header.column.getToggleSortingHandler()}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n {{\n asc: \" \uD83D\uDD3C\",\n desc: \" \uD83D\uDD3D\",\n }[header.column.getIsSorted() as string] ?? null}\n </HeaderContent>\n <Resizer\n onDoubleClick={() => header.column.resetSize()}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n />\n </StyledTh>\n );\n })}\n </StyledTr>\n ))}\n </StyledThead>\n );\n};\n"],
|
|
5
|
+
"mappings": "AACA,OAAS,cAAAA,MAAoC,wBAC7C,OAAOC,MAAY,oBAGnB,OAAS,gBAAAC,MAAoB,cAsEb,OAaA,OAAAC,EAbA,QAAAC,MAAA,oBApEhB,MAAMC,EAAcJ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQrBK,EAAWL,EAAO;AAAA;AAAA;AAAA;AAAA,EAMlBM,EAAWN,EAAO;AAAA;AAAA,UAMd,CAAC,CAAE,SAAAO,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;AAAA,EAKrEE,EAAgBV,EAAO;AAAA,eACdC,EAAa,gBAAgB;AAAA,YAChC,CAAC,CAAE,QAAAU,CAAQ,IAAOA,EAAU,UAAY,SAAU;AAAA,iBAC7C,CAAC,CAAE,QAAAA,CAAQ,IAAOA,EAAU,OAAS,MAAO;AAAA,EAGvDC,EAAUZ,EAAO;AAAA;AAAA;AAAA;AAAA,WAIZC,EAAa,aAAa;AAAA,kBACnBA,EAAa,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYhCY,EAA0C,CAAC,CAAE,aAAAC,CAAa,IAEnEZ,EAACE,EAAA,CACE,SAAAU,EAAa,IAAKC,GACjBb,EAACG,EAAA,CACE,SAAAU,EAAY,QAAQ,IAAKC,GAAW,CACnC,MAAMT,EACHS,EAAO,OAAO,UAAU,MACrB,UAAY,GACZR,EAAOQ,EAAO,QAAQ,EACtBP,EAAUO,EAAO,OAAO,UAAU,SAAW,GACnD,OACEb,EAACG,EAAA,CAEC,KAAME,EACN,QAASC,EACT,SAAUF,EAEV,UAAAJ,EAACO,EAAA,CACC,QAASM,EAAO,OAAO,WAAW,EAClC,QAASA,EAAO,OAAO,wBAAwB,EAE9C,UAAAjB,EACCiB,EAAO,OAAO,UAAU,OACxBA,EAAO,WAAW,CACpB,EACC,CACC,IAAK,aACL,KAAM,YACR,EAAEA,EAAO,OAAO,YAAY,CAAW,GAAK,MAC9C,EACAd,EAACU,EAAA,CACC,cAAe,IAAMI,EAAO,OAAO,UAAU,EAC7C,YAAaA,EAAO,iBAAiB,EACrC,aAAcA,EAAO,iBAAiB,EACxC,IAtBKA,EAAO,EAuBd,CAEJ,CAAC,GAlCYD,EAAY,EAmC3B,CACD,EACH",
|
|
6
|
+
"names": ["flexRender", "styled", "TABLE_STYLES", "jsx", "jsxs", "StyledThead", "StyledTr", "StyledTh", "flexible", "size", "minSize", "HeaderContent", "canSort", "Resizer", "TableHeader", "headerGroups", "headerGroup", "header"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const E={ROW_HEIGHT_ESTIMATE:42,OVERSCAN:5,MIN_COLUMN_SIZE:50,MAX_COLUMN_SIZE:500},_={SIZE:50,BOTTOM_OFFSET:25,RIGHT_OFFSET:25,BORDER_RADIUS:25,PADDING_TOP:4},I=1,O={HEADER_FONT_SIZE:12,CELL_PADDING:"3px 0px",RESIZER_WIDTH:"3px",RESIZER_MARGIN:"2px"};export{_ as SCROLL_BUTTON_CONFIG,I as SCROLL_THRESHOLD,E as TABLE_CONFIG,O as TABLE_STYLES};
|
|
2
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/screens/logger/logsTable/constants.ts"],
|
|
4
|
+
"sourcesContent": ["export const TABLE_CONFIG = {\n ROW_HEIGHT_ESTIMATE: 42,\n OVERSCAN: 5,\n MIN_COLUMN_SIZE: 50,\n MAX_COLUMN_SIZE: 500,\n} as const;\n\nexport const SCROLL_BUTTON_CONFIG = {\n SIZE: 50,\n BOTTOM_OFFSET: 25,\n RIGHT_OFFSET: 25,\n BORDER_RADIUS: 25,\n PADDING_TOP: 4,\n} as const;\n\nexport const SCROLL_THRESHOLD = 1;\n\nexport const TABLE_STYLES = {\n HEADER_FONT_SIZE: 12,\n CELL_PADDING: \"3px 0px\",\n RESIZER_WIDTH: \"3px\",\n RESIZER_MARGIN: \"2px\",\n} as const;\n"],
|
|
5
|
+
"mappings": "AAAO,MAAMA,EAAe,CAC1B,oBAAqB,GACrB,SAAU,EACV,gBAAiB,GACjB,gBAAiB,GACnB,EAEaC,EAAuB,CAClC,KAAM,GACN,cAAe,GACf,aAAc,GACd,cAAe,GACf,YAAa,CACf,EAEaC,EAAmB,EAEnBC,EAAe,CAC1B,iBAAkB,GAClB,aAAc,UACd,cAAe,MACf,eAAgB,KAClB",
|
|
6
|
+
"names": ["TABLE_CONFIG", "SCROLL_BUTTON_CONFIG", "SCROLL_THRESHOLD", "TABLE_STYLES"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import{useEffect as u,useLayoutEffect as y,useMemo as v}from"react";import{getCoreRowModel as z,getSortedRowModel as E,useReactTable as I}from"@tanstack/react-table";import{useVirtualizer as M}from"@tanstack/react-virtual";import l from"styled-components";import{TABLE_CONFIG as c}from"./constants";import{ScrollDownButton as x}from"./ScrollDownButton";import{TableBody as L}from"./TableBody";import{createColumns as O}from"./TableColumns";import{TableHeader as A}from"./TableHeader";import{useScrollLogic as H}from"./useScrollLogic";import{jsx as r,jsxs as h}from"react/jsx-runtime";const N=l.div`
|
|
2
|
+
height: ${({height:t})=>t}px;
|
|
3
|
+
overflow: ${({disableScroll:t})=>t?"hidden":"auto"};
|
|
4
|
+
overflow-anchor: auto;
|
|
5
|
+
position: relative;
|
|
6
|
+
width: 100%;
|
|
7
|
+
`,_=l.div`
|
|
8
|
+
width: 100%;
|
|
9
|
+
min-width: fit-content;
|
|
10
|
+
`,B=l.table`
|
|
11
|
+
display: grid;
|
|
12
|
+
`,p=l.div`
|
|
13
|
+
flex: 1;
|
|
14
|
+
position: relative;
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
min-height: 0;
|
|
18
|
+
`,F=l.div`
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
flex: 1;
|
|
23
|
+
color: #999;
|
|
24
|
+
font-size: 14px;
|
|
25
|
+
`,X=({data:t,highlightedIndices:b,currentHighlightIndex:S,scrollToIndex:a})=>{const{autoScrollEnabled:C,onScroll:T,scrollContainerRef:s,scrollZoneHeight:g,scrollToBottom:R,scrollZoneRef:d}=H({data:t}),w=v(()=>O(),[]),i=I({data:t,columns:w,defaultColumn:{minSize:c.MIN_COLUMN_SIZE,maxSize:c.MAX_COLUMN_SIZE},columnResizeMode:"onChange",getCoreRowModel:z(),getSortedRowModel:E(),debugTable:!0,getRowId:o=>`${o.timestamp}-${o.message}`}),{rows:n}=i.getRowModel(),e=M({count:n.length,estimateSize:()=>c.ROW_HEIGHT_ESTIMATE,getScrollElement:()=>s.current,getItemKey:o=>n[o]?.id??String(o),measureElement:typeof window<"u"&&navigator.userAgent.indexOf("Firefox")===-1?o=>o?.getBoundingClientRect().height:void 0,overscan:c.OVERSCAN}),m=i.getState().columnSizingInfo.isResizingColumn;return u(()=>{m||e.measure()},[g,e,m]),u(()=>{const o=s.current;if(!o)return;const f=new ResizeObserver(()=>{i.getState().columnSizingInfo.isResizingColumn||requestAnimationFrame(()=>{e.measure()})});return f.observe(o),()=>{f.disconnect()}},[e,s,i]),u(()=>{a!==void 0&&a>=0&&e.scrollToIndex(a,{align:"center"})},[a,e]),y(()=>{n.length<100&&n.length>0&&(e.scrollToOffset(0),e.measure())},[n.length,e]),t.length===0?r(p,{ref:d,children:r(F,{children:"No logs to display"})}):h(p,{ref:d,children:[r(N,{className:"container",ref:s,onScroll:T,height:g,disableScroll:!!m,children:r(_,{children:h(B,{children:[r(A,{headerGroups:i.getHeaderGroups()}),r(L,{virtualizer:e,rows:n,highlightedIndices:b,currentHighlightIndex:S})]})})}),r(x,{enabled:C,onClick:R})]})};export{X as LogsTable};
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/screens/logger/logsTable/index.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useEffect, useLayoutEffect, useMemo } from \"react\";\nimport {\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport styled from \"styled-components\";\n\nimport { type LogData } from \"../types\";\nimport { TABLE_CONFIG } from \"./constants\";\nimport { ScrollDownButton } from \"./ScrollDownButton\";\nimport { TableBody } from \"./TableBody\";\nimport { createColumns } from \"./TableColumns\";\nimport { TableHeader } from \"./TableHeader\";\nimport { useScrollLogic } from \"./useScrollLogic\";\n\nconst ScrollContainer = styled.div<{ height: number; disableScroll: boolean }>`\n height: ${({ height }) => height}px;\n overflow: ${({ disableScroll }) => (disableScroll ? \"hidden\" : \"auto\")};\n overflow-anchor: auto;\n position: relative;\n width: 100%;\n`;\n\nconst TableWrapper = styled.div`\n width: 100%;\n min-width: fit-content;\n`;\n\nconst StyledTable = styled.table`\n display: grid;\n`;\n\nconst TableContainer = styled.div`\n flex: 1;\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: 0;\n`;\n\nconst EmptyState = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n color: #999;\n font-size: 14px;\n`;\n\ntype ScrollableLogTableProps = {\n data: Array<LogData>;\n highlightedIndices?: Set<number>;\n currentHighlightIndex?: number;\n scrollToIndex?: number;\n};\n\nexport const LogsTable: React.FC<ScrollableLogTableProps> = ({\n data,\n highlightedIndices,\n currentHighlightIndex,\n scrollToIndex,\n}) => {\n const {\n autoScrollEnabled,\n onScroll,\n scrollContainerRef,\n scrollZoneHeight,\n scrollToBottom,\n scrollZoneRef,\n } = useScrollLogic({ data });\n\n const columns = useMemo(() => createColumns(), []);\n\n const table = useReactTable({\n data,\n columns,\n defaultColumn: {\n minSize: TABLE_CONFIG.MIN_COLUMN_SIZE,\n maxSize: TABLE_CONFIG.MAX_COLUMN_SIZE,\n },\n columnResizeMode: \"onChange\",\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n debugTable: true,\n getRowId: (originalRow) =>\n `${originalRow.timestamp}-${originalRow.message}`,\n });\n\n const { rows } = table.getRowModel();\n\n const rowVirtualizer = useVirtualizer({\n count: rows.length,\n estimateSize: () => TABLE_CONFIG.ROW_HEIGHT_ESTIMATE,\n getScrollElement: () => scrollContainerRef.current,\n getItemKey: (index) => rows[index]?.id ?? String(index),\n measureElement:\n typeof window !== \"undefined\" &&\n navigator.userAgent.indexOf(\"Firefox\") === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n overscan: TABLE_CONFIG.OVERSCAN,\n });\n\n // Skip during column resize to avoid scroll position jumping\n const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;\n\n // Notify virtualizer when container height changes\n useEffect(() => {\n if (isResizingColumn) return;\n rowVirtualizer.measure();\n }, [scrollZoneHeight, rowVirtualizer, isResizingColumn]);\n\n // Observe the scroll container for size changes\n useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const observer = new ResizeObserver(() => {\n // Skip measure during column resize\n if (table.getState().columnSizingInfo.isResizingColumn) return;\n requestAnimationFrame(() => {\n rowVirtualizer.measure();\n });\n });\n\n observer.observe(container);\n\n return () => {\n observer.disconnect();\n };\n }, [rowVirtualizer, scrollContainerRef, table]);\n\n // Scroll to current search match\n useEffect(() => {\n if (scrollToIndex !== undefined && scrollToIndex >= 0) {\n rowVirtualizer.scrollToIndex(scrollToIndex, { align: \"center\" });\n }\n }, [scrollToIndex, rowVirtualizer]);\n\n // Reset virtualizer when data changes and is small (helps with filter transitions)\n // Scroll to top first to avoid invalid scroll position, then recalculate\n // Use useLayoutEffect to run synchronously before browser paints\n useLayoutEffect(() => {\n if (rows.length < 100 && rows.length > 0) {\n rowVirtualizer.scrollToOffset(0);\n rowVirtualizer.measure();\n }\n }, [rows.length, rowVirtualizer]);\n\n // Show empty state when there are no logs to display\n if (data.length === 0) {\n return (\n <TableContainer ref={scrollZoneRef}>\n <EmptyState>No logs to display</EmptyState>\n </TableContainer>\n );\n }\n\n return (\n <TableContainer ref={scrollZoneRef}>\n <ScrollContainer\n className=\"container\"\n ref={scrollContainerRef}\n onScroll={onScroll}\n height={scrollZoneHeight}\n disableScroll={!!isResizingColumn}\n >\n <TableWrapper>\n <StyledTable>\n <TableHeader headerGroups={table.getHeaderGroups()} />\n <TableBody\n virtualizer={rowVirtualizer}\n rows={rows}\n highlightedIndices={highlightedIndices}\n currentHighlightIndex={currentHighlightIndex}\n />\n </StyledTable>\n </TableWrapper>\n </ScrollContainer>\n <ScrollDownButton enabled={autoScrollEnabled} onClick={scrollToBottom} />\n </TableContainer>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["useEffect", "useLayoutEffect", "useMemo", "getCoreRowModel", "getSortedRowModel", "useReactTable", "useVirtualizer", "styled", "TABLE_CONFIG", "ScrollDownButton", "TableBody", "createColumns", "TableHeader", "useScrollLogic", "jsx", "jsxs", "ScrollContainer", "height", "disableScroll", "TableWrapper", "StyledTable", "TableContainer", "EmptyState", "LogsTable", "data", "highlightedIndices", "currentHighlightIndex", "scrollToIndex", "autoScrollEnabled", "onScroll", "scrollContainerRef", "scrollZoneHeight", "scrollToBottom", "scrollZoneRef", "columns", "table", "originalRow", "rows", "rowVirtualizer", "index", "element", "isResizingColumn", "container", "observer"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useMemo as i}from"react";const s=e=>i(()=>{const r=e.getFlatHeaders(),t={};for(const o of r)t[`--header-${o.id}-size`]=o.getSize(),t[`--col-${o.column.id}-size`]=o.column.getSize();return t},[e.getState().columnSizingInfo,e.getFlatHeaders(),e.getState().columnSizing]);export{s as useColumnSizeVars};
|
|
2
|
+
//# sourceMappingURL=useColumnSizeVars.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/screens/logger/logsTable/useColumnSizeVars.ts"],
|
|
4
|
+
"sourcesContent": ["import { useMemo } from \"react\";\nimport { type Table } from \"@tanstack/react-table\";\n\nimport { type LogData } from \"../types\";\n\nexport const useColumnSizeVars = (table: Table<LogData>) => {\n return useMemo(() => {\n const headers = table.getFlatHeaders();\n const colSizes: Record<string, number> = {};\n\n for (const header of headers) {\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n\n return colSizes;\n }, [\n table.getState().columnSizingInfo,\n table.getFlatHeaders(),\n table.getState().columnSizing,\n ]);\n};\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,WAAAA,MAAe,QAKjB,MAAMC,EAAqBC,GACzBF,EAAQ,IAAM,CACnB,MAAMG,EAAUD,EAAM,eAAe,EAC/BE,EAAmC,CAAC,EAE1C,UAAWC,KAAUF,EACnBC,EAAS,YAAYC,EAAO,EAAE,OAAO,EAAIA,EAAO,QAAQ,EACxDD,EAAS,SAASC,EAAO,OAAO,EAAE,OAAO,EAAIA,EAAO,OAAO,QAAQ,EAGrE,OAAOD,CACT,EAAG,CACDF,EAAM,SAAS,EAAE,iBACjBA,EAAM,eAAe,EACrBA,EAAM,SAAS,EAAE,YACnB,CAAC",
|
|
6
|
+
"names": ["useMemo", "useColumnSizeVars", "table", "headers", "colSizes", "header"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useLayoutEffect as u,useRef as c}from"react";function b(e){const t=c(null),n=c(e);return u(()=>{n.current=e},[e]),u(()=>{const r=t?.current;if(!r)return;const s=new ResizeObserver(f=>{const o=f[0];o&&n.current(r,o)});return s.observe(r,{box:"border-box"}),()=>{s.disconnect()}},[]),t}export{b as useResizeObserver};
|
|
2
|
+
//# sourceMappingURL=useResizeObserver.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/screens/logger/logsTable/useResizeObserver.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useLayoutEffect, useRef } from \"react\";\n\nexport function useResizeObserver<T extends HTMLElement>(\n callback: (target: T, entry: ResizeObserverEntry) => void,\n) {\n const ref = useRef<T>(null);\n const callbackRef = useRef(callback);\n\n // Keep callback ref up to date\n useLayoutEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useLayoutEffect(() => {\n const element = ref?.current;\n\n if (!element) {\n return;\n }\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n callbackRef.current(element, entry);\n }\n });\n\n // Observe border box to catch all size changes including padding/borders\n observer.observe(element, { box: \"border-box\" });\n\n return () => {\n observer.disconnect();\n };\n }, []); // Empty dependency array - observer is created once\n\n return ref;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,mBAAAA,EAAiB,UAAAC,MAAc,QAEjC,SAASC,EACdC,EACA,CACA,MAAMC,EAAMH,EAAU,IAAI,EACpBI,EAAcJ,EAAOE,CAAQ,EAGnC,OAAAH,EAAgB,IAAM,CACpBK,EAAY,QAAUF,CACxB,EAAG,CAACA,CAAQ,CAAC,EAEbH,EAAgB,IAAM,CACpB,MAAMM,EAAUF,GAAK,QAErB,GAAI,CAACE,EACH,OAGF,MAAMC,EAAW,IAAI,eAAgBC,GAAY,CAC/C,MAAMC,EAAQD,EAAQ,CAAC,EACnBC,GACFJ,EAAY,QAAQC,EAASG,CAAK,CAEtC,CAAC,EAGD,OAAAF,EAAS,QAAQD,EAAS,CAAE,IAAK,YAAa,CAAC,EAExC,IAAM,CACXC,EAAS,WAAW,CACtB,CACF,EAAG,CAAC,CAAC,EAEEH,CACT",
|
|
6
|
+
"names": ["useLayoutEffect", "useRef", "useResizeObserver", "callback", "ref", "callbackRef", "element", "observer", "entries", "entry"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import u,{useCallback as a,useEffect as h,useLayoutEffect as p,useState as m}from"react";import{SCROLL_THRESHOLD as S}from"./constants";import{useResizeObserver as v}from"./useResizeObserver";const A=({data:n})=>{const t=u.useRef(null),[o,l]=m(!0),s=u.useRef(!1),f=u.useRef(n.length),i=a(()=>{t.current&&(s.current=!0,l(!0),t.current.scrollTo({top:t.current.scrollHeight,behavior:"instant"}),requestAnimationFrame(()=>{requestAnimationFrame(()=>{s.current=!1})}))},[]);h(()=>{o&&t.current&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{t.current&&o&&i()})})},[n.length,o,i]),h(()=>{const e=f.current,r=n.length;f.current=r,(r<e*.5||r<=3)&&(t.current?.scrollTo({top:0,behavior:"instant"}),l(!0))},[n.length]);const[R,g]=m(0),H=a((e,r)=>{g(r.contentRect.height)},[]),c=v(H);p(()=>{if(c.current){const e=c.current.getBoundingClientRect().height;e>0&&g(e)}},[c]);const L=a(()=>{const e=t.current;if(!e||s.current)return;const r=e.scrollTop+e.clientHeight>=e.scrollHeight-S;l(r)},[]);return{autoScrollEnabled:o,onScroll:L,scrollContainerRef:t,scrollZoneHeight:R,scrollToBottom:i,scrollZoneRef:c}};export{A as useScrollLogic};
|
|
2
|
+
//# sourceMappingURL=useScrollLogic.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/screens/logger/logsTable/useScrollLogic.ts"],
|
|
4
|
+
"sourcesContent": ["import React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useState,\n} from \"react\";\n\nimport { SCROLL_THRESHOLD } from \"./constants\";\nimport { useResizeObserver } from \"./useResizeObserver\";\n\nexport const useScrollLogic = ({ data }: { data: unknown[] }) => {\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n const [autoScrollEnabled, setAutoScrollEnabled] = useState(true);\n const isScrollingProgrammaticallyRef = React.useRef(false);\n const prevDataLengthRef = React.useRef(data.length);\n\n const scrollToBottom = useCallback(() => {\n if (scrollContainerRef.current) {\n isScrollingProgrammaticallyRef.current = true;\n setAutoScrollEnabled(true);\n scrollContainerRef.current.scrollTo({\n top: scrollContainerRef.current.scrollHeight,\n behavior: \"instant\",\n });\n // Reset the flag after a brief delay to allow scroll to complete\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n isScrollingProgrammaticallyRef.current = false;\n });\n });\n }\n }, []);\n\n // Auto-scroll when new data arrives (not on container resize)\n useEffect(() => {\n if (autoScrollEnabled && scrollContainerRef.current) {\n // Use double requestAnimationFrame to ensure DOM has updated and virtualizer has recalculated\n // This is necessary when content starts overflowing as the virtualizer needs time to measure\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (scrollContainerRef.current && autoScrollEnabled) {\n scrollToBottom();\n }\n });\n });\n }\n }, [data.length, autoScrollEnabled, scrollToBottom]);\n\n // Reset scroll position when data shrinks significantly (e.g., filter applied)\n // This prevents the virtualizer from being in an invalid scroll state\n useEffect(() => {\n const prevLength = prevDataLengthRef.current;\n const currentLength = data.length;\n prevDataLengthRef.current = currentLength;\n\n // If data shrunk significantly (more than 50% reduction or to near-empty)\n if (currentLength < prevLength * 0.5 || currentLength <= 3) {\n scrollContainerRef.current?.scrollTo({ top: 0, behavior: \"instant\" });\n setAutoScrollEnabled(true);\n }\n }, [data.length]);\n\n const [scrollZoneHeight, setScrollZoneHeight] = useState(0);\n const updateScrollZoneHeight = useCallback(\n (_: HTMLDivElement, entry: ResizeObserverEntry) => {\n setScrollZoneHeight(entry.contentRect.height);\n },\n [],\n );\n const scrollZoneRef = useResizeObserver<HTMLDivElement>(\n updateScrollZoneHeight,\n );\n\n // Calculate initial height on mount\n useLayoutEffect(() => {\n if (scrollZoneRef.current) {\n const height = scrollZoneRef.current.getBoundingClientRect().height;\n if (height > 0) {\n setScrollZoneHeight(height);\n }\n }\n }, [scrollZoneRef]);\n\n const onScroll = useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n // Only update autoScrollEnabled for manual user scrolls\n if (isScrollingProgrammaticallyRef.current) {\n return;\n }\n\n const isNearBottom =\n container.scrollTop + container.clientHeight >=\n container.scrollHeight - SCROLL_THRESHOLD;\n\n setAutoScrollEnabled(isNearBottom);\n }, []);\n\n return {\n autoScrollEnabled,\n onScroll,\n scrollContainerRef,\n scrollZoneHeight,\n scrollToBottom,\n scrollZoneRef,\n };\n};\n"],
|
|
5
|
+
"mappings": "AAAA,OAAOA,GACL,eAAAC,EACA,aAAAC,EACA,mBAAAC,EACA,YAAAC,MACK,QAEP,OAAS,oBAAAC,MAAwB,cACjC,OAAS,qBAAAC,MAAyB,sBAE3B,MAAMC,EAAiB,CAAC,CAAE,KAAAC,CAAK,IAA2B,CAC/D,MAAMC,EAAqBT,EAAM,OAAuB,IAAI,EACtD,CAACU,EAAmBC,CAAoB,EAAIP,EAAS,EAAI,EACzDQ,EAAiCZ,EAAM,OAAO,EAAK,EACnDa,EAAoBb,EAAM,OAAOQ,EAAK,MAAM,EAE5CM,EAAiBb,EAAY,IAAM,CACnCQ,EAAmB,UACrBG,EAA+B,QAAU,GACzCD,EAAqB,EAAI,EACzBF,EAAmB,QAAQ,SAAS,CAClC,IAAKA,EAAmB,QAAQ,aAChC,SAAU,SACZ,CAAC,EAED,sBAAsB,IAAM,CAC1B,sBAAsB,IAAM,CAC1BG,EAA+B,QAAU,EAC3C,CAAC,CACH,CAAC,EAEL,EAAG,CAAC,CAAC,EAGLV,EAAU,IAAM,CACVQ,GAAqBD,EAAmB,SAG1C,sBAAsB,IAAM,CAC1B,sBAAsB,IAAM,CACtBA,EAAmB,SAAWC,GAChCI,EAAe,CAEnB,CAAC,CACH,CAAC,CAEL,EAAG,CAACN,EAAK,OAAQE,EAAmBI,CAAc,CAAC,EAInDZ,EAAU,IAAM,CACd,MAAMa,EAAaF,EAAkB,QAC/BG,EAAgBR,EAAK,OAC3BK,EAAkB,QAAUG,GAGxBA,EAAgBD,EAAa,IAAOC,GAAiB,KACvDP,EAAmB,SAAS,SAAS,CAAE,IAAK,EAAG,SAAU,SAAU,CAAC,EACpEE,EAAqB,EAAI,EAE7B,EAAG,CAACH,EAAK,MAAM,CAAC,EAEhB,KAAM,CAACS,EAAkBC,CAAmB,EAAId,EAAS,CAAC,EACpDe,EAAyBlB,EAC7B,CAACmB,EAAmBC,IAA+B,CACjDH,EAAoBG,EAAM,YAAY,MAAM,CAC9C,EACA,CAAC,CACH,EACMC,EAAgBhB,EACpBa,CACF,EAGAhB,EAAgB,IAAM,CACpB,GAAImB,EAAc,QAAS,CACzB,MAAMC,EAASD,EAAc,QAAQ,sBAAsB,EAAE,OACzDC,EAAS,GACXL,EAAoBK,CAAM,CAE9B,CACF,EAAG,CAACD,CAAa,CAAC,EAElB,MAAME,EAAWvB,EAAY,IAAM,CACjC,MAAMwB,EAAYhB,EAAmB,QAIrC,GAHI,CAACgB,GAGDb,EAA+B,QACjC,OAGF,MAAMc,EACJD,EAAU,UAAYA,EAAU,cAChCA,EAAU,aAAepB,EAE3BM,EAAqBe,CAAY,CACnC,EAAG,CAAC,CAAC,EAEL,MAAO,CACL,kBAAAhB,EACA,SAAAc,EACA,mBAAAf,EACA,iBAAAQ,EACA,eAAAH,EACA,cAAAQ,CACF,CACF",
|
|
6
|
+
"names": ["React", "useCallback", "useEffect", "useLayoutEffect", "useState", "SCROLL_THRESHOLD", "useResizeObserver", "useScrollLogic", "data", "scrollContainerRef", "autoScrollEnabled", "setAutoScrollEnabled", "isScrollingProgrammaticallyRef", "prevDataLengthRef", "scrollToBottom", "prevLength", "currentLength", "scrollZoneHeight", "setScrollZoneHeight", "updateScrollZoneHeight", "_", "entry", "scrollZoneRef", "height", "onScroll", "container", "isNearBottom"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{LOGGER_MESSAGE_TYPES as p}from"@ledgerhq/device-management-kit-devtools-core";function g(o){if(o.type!==p.ADD_LOG)return null;const{timestamp:t,tag:r,verbosity:e,message:s,payloadJSON:a}=JSON.parse(o.payload);return{timestamp:t,tag:r,verbosity:e,message:s,payloadJSON:a,payload:JSON.parse(a)}}export{g as mapConnectorMessageToLogData};
|
|
2
|
+
//# sourceMappingURL=mapConnectorMessageToLogData.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/mapConnectorMessageToLogData.ts"],
|
|
4
|
+
"sourcesContent": ["import { LOGGER_MESSAGE_TYPES } from \"@ledgerhq/device-management-kit-devtools-core\";\n\nimport type { DevToolsLog, LogData } from \"./types\";\n\nexport function mapConnectorMessageToLogData(connectorMessage: {\n type: string;\n payload: string;\n}): LogData | null {\n if (connectorMessage.type !== LOGGER_MESSAGE_TYPES.ADD_LOG) {\n return null;\n }\n const { timestamp, tag, verbosity, message, payloadJSON } = JSON.parse(\n connectorMessage.payload,\n ) as DevToolsLog;\n return {\n timestamp,\n tag,\n verbosity,\n message,\n payloadJSON,\n // TODO: fix this type\n payload: JSON.parse(payloadJSON) as string | Record<string, unknown>,\n };\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,wBAAAA,MAA4B,gDAI9B,SAASC,EAA6BC,EAG1B,CACjB,GAAIA,EAAiB,OAASF,EAAqB,QACjD,OAAO,KAET,KAAM,CAAE,UAAAG,EAAW,IAAAC,EAAK,UAAAC,EAAW,QAAAC,EAAS,YAAAC,CAAY,EAAI,KAAK,MAC/DL,EAAiB,OACnB,EACA,MAAO,CACL,UAAAC,EACA,IAAAC,EACA,UAAAC,EACA,QAAAC,EACA,YAAAC,EAEA,QAAS,KAAK,MAAMA,CAAW,CACjC,CACF",
|
|
6
|
+
"names": ["LOGGER_MESSAGE_TYPES", "mapConnectorMessageToLogData", "connectorMessage", "timestamp", "tag", "verbosity", "message", "payloadJSON"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useMemo as i}from"react";const s=e=>i(()=>{const r=e.getFlatHeaders(),t={};for(const o of r)t[`--header-${o.id}-size`]=o.getSize(),t[`--col-${o.column.id}-size`]=o.column.getSize();return t},[e.getState().columnSizingInfo,e.getFlatHeaders(),e.getState().columnSizing]);export{s as useColumnSizeVars};
|
|
2
|
+
//# sourceMappingURL=useColumnSizeVars.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/useColumnSizeVars.ts"],
|
|
4
|
+
"sourcesContent": ["import { useMemo } from \"react\";\nimport { type Table } from \"@tanstack/react-table\";\n\nimport { type LogData } from \"./types\";\n\nexport const useColumnSizeVars = (table: Table<LogData>) => {\n return useMemo(() => {\n const headers = table.getFlatHeaders();\n const colSizes: Record<string, number> = {};\n\n for (const header of headers) {\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n\n return colSizes;\n }, [\n table.getState().columnSizingInfo,\n table.getFlatHeaders(),\n table.getState().columnSizing,\n ]);\n};\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,WAAAA,MAAe,QAKjB,MAAMC,EAAqBC,GACzBF,EAAQ,IAAM,CACnB,MAAMG,EAAUD,EAAM,eAAe,EAC/BE,EAAmC,CAAC,EAE1C,UAAWC,KAAUF,EACnBC,EAAS,YAAYC,EAAO,EAAE,OAAO,EAAIA,EAAO,QAAQ,EACxDD,EAAS,SAASC,EAAO,OAAO,EAAE,OAAO,EAAIA,EAAO,OAAO,QAAQ,EAGrE,OAAOD,CACT,EAAG,CACDF,EAAM,SAAS,EAAE,iBACjBA,EAAM,eAAe,EACrBA,EAAM,SAAS,EAAE,YACnB,CAAC",
|
|
6
|
+
"names": ["useMemo", "useColumnSizeVars", "table", "headers", "colSizes", "header"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import i,{useMemo as a}from"react";import{matchesFilter as p,parseFilterQuery as l}from"./filterUtils";import{defaultLoggerOptions as m}from"./LoggerOptions";const u=Number.POSITIVE_INFINITY,y=({logs:t})=>{const[e,f]=i.useState(m),c=a(()=>{const r=l(e.filterText),s=t.filter(n=>!(!e.activeLevels[n.verbosity]||e.includeTags.size>0&&!e.includeTags.has(n.tag)||r.length>0&&!p(n,r)));return s.length>u?s.slice(-u):s},[t,e]),o=i.useRef(new Set),g=a(()=>(t.forEach(r=>{o.current.add(r.tag)}),o.current),[t]);return{displayedLogs:c,options:e,setOptions:f,uniqueTags:g}};export{y as useLogsDataAndOptions};
|
|
2
|
+
//# sourceMappingURL=useLogsDataAndOptions.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/useLogsDataAndOptions.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useMemo } from \"react\";\n\nimport { matchesFilter, parseFilterQuery } from \"./filterUtils\";\nimport { defaultLoggerOptions, type LoggerOptions } from \"./LoggerOptions\";\nimport { type LogData } from \"./types\";\n\nconst maxDisplayedLogs = Number.POSITIVE_INFINITY;\n\nexport const useLogsDataAndOptions = ({ logs }: { logs: LogData[] }) => {\n const [options, setOptions] =\n React.useState<LoggerOptions>(defaultLoggerOptions);\n\n const displayedLogs = useMemo(() => {\n const filterTokens = parseFilterQuery(options.filterText);\n\n const filteredLogs = logs.filter((log) => {\n if (!options.activeLevels[log.verbosity]) {\n return false;\n }\n if (options.includeTags.size > 0) {\n if (!options.includeTags.has(log.tag)) {\n return false;\n }\n }\n if (filterTokens.length > 0 && !matchesFilter(log, filterTokens)) {\n return false;\n }\n return true;\n });\n return filteredLogs.length > maxDisplayedLogs\n ? filteredLogs.slice(-maxDisplayedLogs)\n : filteredLogs;\n }, [logs, options]);\n\n const uniqueTagsRef = React.useRef<Set<string>>(new Set());\n const uniqueTags = useMemo(() => {\n logs.forEach((log) => {\n uniqueTagsRef.current.add(log.tag);\n });\n return uniqueTagsRef.current;\n }, [logs]);\n\n return { displayedLogs, options, setOptions, uniqueTags };\n};\n"],
|
|
5
|
+
"mappings": "AAAA,OAAOA,GAAS,WAAAC,MAAe,QAE/B,OAAS,iBAAAC,EAAe,oBAAAC,MAAwB,gBAChD,OAAS,wBAAAC,MAAgD,kBAGzD,MAAMC,EAAmB,OAAO,kBAEnBC,EAAwB,CAAC,CAAE,KAAAC,CAAK,IAA2B,CACtE,KAAM,CAACC,EAASC,CAAU,EACxBT,EAAM,SAAwBI,CAAoB,EAE9CM,EAAgBT,EAAQ,IAAM,CAClC,MAAMU,EAAeR,EAAiBK,EAAQ,UAAU,EAElDI,EAAeL,EAAK,OAAQM,GAC5B,GAACL,EAAQ,aAAaK,EAAI,SAAS,GAGnCL,EAAQ,YAAY,KAAO,GACzB,CAACA,EAAQ,YAAY,IAAIK,EAAI,GAAG,GAIlCF,EAAa,OAAS,GAAK,CAACT,EAAcW,EAAKF,CAAY,EAIhE,EACD,OAAOC,EAAa,OAASP,EACzBO,EAAa,MAAM,CAACP,CAAgB,EACpCO,CACN,EAAG,CAACL,EAAMC,CAAO,CAAC,EAEZM,EAAgBd,EAAM,OAAoB,IAAI,GAAK,EACnDe,EAAad,EAAQ,KACzBM,EAAK,QAASM,GAAQ,CACpBC,EAAc,QAAQ,IAAID,EAAI,GAAG,CACnC,CAAC,EACMC,EAAc,SACpB,CAACP,CAAI,CAAC,EAET,MAAO,CAAE,cAAAG,EAAe,QAAAF,EAAS,WAAAC,EAAY,WAAAM,CAAW,CAC1D",
|
|
6
|
+
"names": ["React", "useMemo", "matchesFilter", "parseFilterQuery", "defaultLoggerOptions", "maxDisplayedLogs", "useLogsDataAndOptions", "logs", "options", "setOptions", "displayedLogs", "filterTokens", "filteredLogs", "log", "uniqueTagsRef", "uniqueTags"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useCallback as u,useEffect as m,useRef as F,useState as R}from"react";const f="devtools-logger-recent-filters",S=10,E=15e3;function p(){try{const e=localStorage.getItem(f);if(e){const s=JSON.parse(e);if(Array.isArray(s))return s.filter(n=>typeof n=="string")}}catch{}return[]}function a(e){try{localStorage.setItem(f,JSON.stringify(e))}catch{}}const v=e=>{const[s,n]=R(()=>p()),l=F(""),c=u(t=>{t.trim()&&n(r=>{const i=r.filter(g=>g!==t),o=[t,...i].slice(0,S);return a(o),o})},[]),d=u(t=>{n(r=>{const i=r.filter(o=>o!==t);return a(i),i})},[]);return m(()=>{const t=e.trim();if(!t||t===l.current)return;const r=setTimeout(()=>{c(t),l.current=t},E);return()=>{clearTimeout(r)}},[e,c]),{recentFilters:s,addFilter:c,removeFilter:d}};export{v as useRecentFilters};
|
|
2
|
+
//# sourceMappingURL=useRecentFilters.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/useRecentFilters.ts"],
|
|
4
|
+
"sourcesContent": ["import { useCallback, useEffect, useRef, useState } from \"react\";\n\nconst STORAGE_KEY = \"devtools-logger-recent-filters\";\nconst MAX_RECENT_FILTERS = 10;\nconst DEBOUNCE_MS = 15000; // 15 seconds\n\n/**\n * Loads recent filters from localStorage.\n */\nfunction loadRecentFilters(): string[] {\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n const parsed: unknown = JSON.parse(stored);\n if (Array.isArray(parsed)) {\n return parsed.filter(\n (item): item is string => typeof item === \"string\",\n );\n }\n }\n } catch {\n // Ignore errors, return empty array\n }\n return [];\n}\n\n/**\n * Saves recent filters to localStorage.\n */\nfunction saveRecentFilters(filters: string[]): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(filters));\n } catch {\n // Ignore errors (e.g., storage full, private mode)\n }\n}\n\n/**\n * Hook to manage recent filters with localStorage persistence.\n *\n * Features:\n * - Loads recent filters from localStorage on mount\n * - Auto-saves current filter after 15 seconds of no changes (debounced)\n * - Provides manual add/remove functions\n * - Caps at MAX_RECENT_FILTERS items\n *\n * @param currentFilter - The current filter value (used for debounced auto-save)\n * @returns Object with recentFilters array and add/remove functions\n */\nexport const useRecentFilters = (currentFilter: string) => {\n const [recentFilters, setRecentFilters] = useState<string[]>(() =>\n loadRecentFilters(),\n );\n\n // Track the last saved filter to avoid duplicate saves\n const lastSavedFilterRef = useRef<string>(\"\");\n\n /**\n * Adds a filter to the recent list.\n * - Moves to top if already exists\n * - Caps at MAX_RECENT_FILTERS\n */\n const addFilter = useCallback((filter: string) => {\n if (!filter.trim()) return;\n\n setRecentFilters((prev) => {\n // Remove if already exists\n const filtered = prev.filter((f) => f !== filter);\n // Add to beginning\n const updated = [filter, ...filtered].slice(0, MAX_RECENT_FILTERS);\n // Persist\n saveRecentFilters(updated);\n return updated;\n });\n }, []);\n\n /**\n * Removes a filter from the recent list.\n */\n const removeFilter = useCallback((filter: string) => {\n setRecentFilters((prev) => {\n const updated = prev.filter((f) => f !== filter);\n // Persist\n saveRecentFilters(updated);\n return updated;\n });\n }, []);\n\n // Auto-save with debounce\n useEffect(() => {\n const trimmedFilter = currentFilter.trim();\n\n // Don't save empty filters or if already saved\n if (!trimmedFilter || trimmedFilter === lastSavedFilterRef.current) {\n return;\n }\n\n const timeoutId = setTimeout(() => {\n addFilter(trimmedFilter);\n lastSavedFilterRef.current = trimmedFilter;\n }, DEBOUNCE_MS);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [currentFilter, addFilter]);\n\n return { recentFilters, addFilter, removeFilter };\n};\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,UAAAC,EAAQ,YAAAC,MAAgB,QAEzD,MAAMC,EAAc,iCACdC,EAAqB,GACrBC,EAAc,KAKpB,SAASC,GAA8B,CACrC,GAAI,CACF,MAAMC,EAAS,aAAa,QAAQJ,CAAW,EAC/C,GAAII,EAAQ,CACV,MAAMC,EAAkB,KAAK,MAAMD,CAAM,EACzC,GAAI,MAAM,QAAQC,CAAM,EACtB,OAAOA,EAAO,OACXC,GAAyB,OAAOA,GAAS,QAC5C,CAEJ,CACF,MAAQ,CAER,CACA,MAAO,CAAC,CACV,CAKA,SAASC,EAAkBC,EAAyB,CAClD,GAAI,CACF,aAAa,QAAQR,EAAa,KAAK,UAAUQ,CAAO,CAAC,CAC3D,MAAQ,CAER,CACF,CAcO,MAAMC,EAAoBC,GAA0B,CACzD,KAAM,CAACC,EAAeC,CAAgB,EAAIb,EAAmB,IAC3DI,EAAkB,CACpB,EAGMU,EAAqBf,EAAe,EAAE,EAOtCgB,EAAYlB,EAAamB,GAAmB,CAC3CA,EAAO,KAAK,GAEjBH,EAAkBI,GAAS,CAEzB,MAAMC,EAAWD,EAAK,OAAQE,GAAMA,IAAMH,CAAM,EAE1CI,EAAU,CAACJ,EAAQ,GAAGE,CAAQ,EAAE,MAAM,EAAGhB,CAAkB,EAEjE,OAAAM,EAAkBY,CAAO,EAClBA,CACT,CAAC,CACH,EAAG,CAAC,CAAC,EAKCC,EAAexB,EAAamB,GAAmB,CACnDH,EAAkBI,GAAS,CACzB,MAAMG,EAAUH,EAAK,OAAQE,GAAMA,IAAMH,CAAM,EAE/C,OAAAR,EAAkBY,CAAO,EAClBA,CACT,CAAC,CACH,EAAG,CAAC,CAAC,EAGL,OAAAtB,EAAU,IAAM,CACd,MAAMwB,EAAgBX,EAAc,KAAK,EAGzC,GAAI,CAACW,GAAiBA,IAAkBR,EAAmB,QACzD,OAGF,MAAMS,EAAY,WAAW,IAAM,CACjCR,EAAUO,CAAa,EACvBR,EAAmB,QAAUQ,CAC/B,EAAGnB,CAAW,EAEd,MAAO,IAAM,CACX,aAAaoB,CAAS,CACxB,CACF,EAAG,CAACZ,EAAeI,CAAS,CAAC,EAEtB,CAAE,cAAAH,EAAe,UAAAG,EAAW,aAAAM,CAAa,CAClD",
|
|
6
|
+
"names": ["useCallback", "useEffect", "useRef", "useState", "STORAGE_KEY", "MAX_RECENT_FILTERS", "DEBOUNCE_MS", "loadRecentFilters", "stored", "parsed", "item", "saveRecentFilters", "filters", "useRecentFilters", "currentFilter", "recentFilters", "setRecentFilters", "lastSavedFilterRef", "addFilter", "filter", "prev", "filtered", "f", "updated", "removeFilter", "trimmedFilter", "timeoutId"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useCallback as o,useEffect as p,useMemo as x,useState as l}from"react";import{matchesFilter as y,parseFilterQuery as I}from"./filterUtils";const T=c=>{const[s,u]=l(""),[r,n]=l(0),t=x(()=>{const e=s.trim();if(!e)return[];const g=I(e);return g.length===0?[]:c.map((h,d)=>y(h,g)?d:-1).filter(h=>h!==-1)},[c,s]);p(()=>{t.length===0?n(0):r>=t.length&&n(t.length-1)},[t.length,r]);const a=o(()=>{t.length!==0&&n(e=>e>=t.length-1?0:e+1)},[t.length]),i=o(()=>{t.length!==0&&n(e=>e<=0?t.length-1:e-1)},[t.length]),f=o(()=>{t.length!==0&&n(0)},[t.length]),m=o(()=>{t.length!==0&&n(t.length-1)},[t.length]);return{searchQuery:s,setSearchQuery:u,matchIndices:t,currentMatchIndex:r,currentMatchRowIndex:t[r],goToNext:a,goToPrevious:i,goToFirst:f,goToLast:m}};export{T as useSearchState};
|
|
2
|
+
//# sourceMappingURL=useSearchState.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/screens/logger/useSearchState.ts"],
|
|
4
|
+
"sourcesContent": ["import { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { matchesFilter, parseFilterQuery } from \"./filterUtils\";\nimport { type LogData } from \"./types\";\n\n/**\n * Hook to manage search state and compute matches.\n *\n * Features:\n * - Computes matching row indices using filterUtils\n * - Tracks current match index for navigation\n * - Provides navigation functions (next/previous) with wraparound\n *\n * @param logs - The logs to search through (typically displayedLogs after filtering)\n * @returns Search state and navigation functions\n */\nexport const useSearchState = (logs: LogData[]) => {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [currentMatchIndex, setCurrentMatchIndex] = useState(0);\n\n // Compute matching row indices using filterUtils\n const matchIndices = useMemo(() => {\n const trimmed = searchQuery.trim();\n if (!trimmed) return [];\n\n const tokens = parseFilterQuery(trimmed);\n if (tokens.length === 0) return [];\n\n return logs\n .map((log, index) => (matchesFilter(log, tokens) ? index : -1))\n .filter((i) => i !== -1);\n }, [logs, searchQuery]);\n\n // Reset current match index when matches change\n useEffect(() => {\n if (matchIndices.length === 0) {\n setCurrentMatchIndex(0);\n } else if (currentMatchIndex >= matchIndices.length) {\n setCurrentMatchIndex(matchIndices.length - 1);\n }\n }, [matchIndices.length, currentMatchIndex]);\n\n // Navigate to next match (wraps around)\n const goToNext = useCallback(() => {\n if (matchIndices.length === 0) return;\n setCurrentMatchIndex((prev) =>\n prev >= matchIndices.length - 1 ? 0 : prev + 1,\n );\n }, [matchIndices.length]);\n\n // Navigate to previous match (wraps around)\n const goToPrevious = useCallback(() => {\n if (matchIndices.length === 0) return;\n setCurrentMatchIndex((prev) =>\n prev <= 0 ? matchIndices.length - 1 : prev - 1,\n );\n }, [matchIndices.length]);\n\n // Navigate to first match\n const goToFirst = useCallback(() => {\n if (matchIndices.length === 0) return;\n setCurrentMatchIndex(0);\n }, [matchIndices.length]);\n\n // Navigate to last match\n const goToLast = useCallback(() => {\n if (matchIndices.length === 0) return;\n setCurrentMatchIndex(matchIndices.length - 1);\n }, [matchIndices.length]);\n\n return {\n searchQuery,\n setSearchQuery,\n matchIndices,\n currentMatchIndex,\n currentMatchRowIndex: matchIndices[currentMatchIndex],\n goToNext,\n goToPrevious,\n goToFirst,\n goToLast,\n };\n};\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,WAAAC,EAAS,YAAAC,MAAgB,QAE1D,OAAS,iBAAAC,EAAe,oBAAAC,MAAwB,gBAczC,MAAMC,EAAkBC,GAAoB,CACjD,KAAM,CAACC,EAAaC,CAAc,EAAIN,EAAS,EAAE,EAC3C,CAACO,EAAmBC,CAAoB,EAAIR,EAAS,CAAC,EAGtDS,EAAeV,EAAQ,IAAM,CACjC,MAAMW,EAAUL,EAAY,KAAK,EACjC,GAAI,CAACK,EAAS,MAAO,CAAC,EAEtB,MAAMC,EAAST,EAAiBQ,CAAO,EACvC,OAAIC,EAAO,SAAW,EAAU,CAAC,EAE1BP,EACJ,IAAI,CAACQ,EAAKC,IAAWZ,EAAcW,EAAKD,CAAM,EAAIE,EAAQ,EAAG,EAC7D,OAAQC,GAAMA,IAAM,EAAE,CAC3B,EAAG,CAACV,EAAMC,CAAW,CAAC,EAGtBP,EAAU,IAAM,CACVW,EAAa,SAAW,EAC1BD,EAAqB,CAAC,EACbD,GAAqBE,EAAa,QAC3CD,EAAqBC,EAAa,OAAS,CAAC,CAEhD,EAAG,CAACA,EAAa,OAAQF,CAAiB,CAAC,EAG3C,MAAMQ,EAAWlB,EAAY,IAAM,CAC7BY,EAAa,SAAW,GAC5BD,EAAsBQ,GACpBA,GAAQP,EAAa,OAAS,EAAI,EAAIO,EAAO,CAC/C,CACF,EAAG,CAACP,EAAa,MAAM,CAAC,EAGlBQ,EAAepB,EAAY,IAAM,CACjCY,EAAa,SAAW,GAC5BD,EAAsBQ,GACpBA,GAAQ,EAAIP,EAAa,OAAS,EAAIO,EAAO,CAC/C,CACF,EAAG,CAACP,EAAa,MAAM,CAAC,EAGlBS,EAAYrB,EAAY,IAAM,CAC9BY,EAAa,SAAW,GAC5BD,EAAqB,CAAC,CACxB,EAAG,CAACC,EAAa,MAAM,CAAC,EAGlBU,EAAWtB,EAAY,IAAM,CAC7BY,EAAa,SAAW,GAC5BD,EAAqBC,EAAa,OAAS,CAAC,CAC9C,EAAG,CAACA,EAAa,MAAM,CAAC,EAExB,MAAO,CACL,YAAAJ,EACA,eAAAC,EACA,aAAAG,EACA,kBAAAF,EACA,qBAAsBE,EAAaF,CAAiB,EACpD,SAAAQ,EACA,aAAAE,EACA,UAAAC,EACA,SAAAC,CACF,CACF",
|
|
6
|
+
"names": ["useCallback", "useEffect", "useMemo", "useState", "matchesFilter", "parseFilterQuery", "useSearchState", "logs", "searchQuery", "setSearchQuery", "currentMatchIndex", "setCurrentMatchIndex", "matchIndices", "trimmed", "tokens", "log", "index", "i", "goToNext", "prev", "goToPrevious", "goToFirst", "goToLast"]
|
|
7
|
+
}
|