@xopcai/xopc 0.0.77 → 0.0.78
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/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agents-DN3vr8pb.js → agents-Bh_9-1KB.js} +2 -2
- package/dist/gateway/static/root/assets/{agents-DN3vr8pb.js.map → agents-Bh_9-1KB.js.map} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BUn41aPi.js → apps-page-CB5anZpc.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-BUn41aPi.js.map → apps-page-CB5anZpc.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-CYMmWDtP.js → channels-settings-Bt1sprhC.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-settings-CYMmWDtP.js.map → channels-settings-Bt1sprhC.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-status-swr-sJj4ueTp.js → channels-status-swr-Crgak3fg.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-status-swr-sJj4ueTp.js.map → channels-status-swr-Crgak3fg.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-api-CLxnaHdq.js → cron-api-CzJGvQQ7.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-api-CLxnaHdq.js.map → cron-api-CzJGvQQ7.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js → cron-page-BoNRJNVV.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js.map → cron-page-BoNRJNVV.js.map} +1 -1
- package/dist/gateway/static/root/assets/{dist-BfJYxiK5.js → dist-a-eaOUvs.js} +2 -2
- package/dist/gateway/static/root/assets/{dist-BfJYxiK5.js.map → dist-a-eaOUvs.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-bgvVs-Sy.js → extension-debug-page-D-O1XjAa.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-bgvVs-Sy.js.map → extension-debug-page-D-O1XjAa.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-SG4TVv-u.js → extension-page-B2VpqBTH.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-SG4TVv-u.js.map → extension-page-B2VpqBTH.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CJZRTsjF.js → extension-settings-page-CmBcQfeO.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-CJZRTsjF.js.map → extension-settings-page-CmBcQfeO.js.map} +1 -1
- package/dist/gateway/static/root/assets/{fetch-K_0JRCXU.js → fetch-EGO9T3MN.js} +3 -3
- package/dist/gateway/static/root/assets/{fetch-K_0JRCXU.js.map → fetch-EGO9T3MN.js.map} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-Z76hyBYS.js → field-primitives-Bh7G1y4D.js} +2 -2
- package/dist/gateway/static/root/assets/{field-primitives-Z76hyBYS.js.map → field-primitives-Bh7G1y4D.js.map} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BqfDabSI.js → heartbeat-config-api-DxpIEZNs.js} +2 -2
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BqfDabSI.js.map → heartbeat-config-api-DxpIEZNs.js.map} +1 -1
- package/dist/gateway/static/root/assets/{index-ChiUhJAs.js → index-Dxy9ZCtC.js} +5 -5
- package/dist/gateway/static/root/assets/{index-ChiUhJAs.js.map → index-Dxy9ZCtC.js.map} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js → logs-page-Dw58E2GE.js} +2 -2
- package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js.map → logs-page-Dw58E2GE.js.map} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-B-RGO3N0.js → sessions-page-CPkhCy57.js} +2 -2
- package/dist/gateway/static/root/assets/{sessions-page-B-RGO3N0.js.map → sessions-page-CPkhCy57.js.map} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-Csvl1iL6.js → settings-form-section-DLZDVMEf.js} +2 -2
- package/dist/gateway/static/root/assets/{settings-form-section-Csvl1iL6.js.map → settings-form-section-DLZDVMEf.js.map} +1 -1
- package/dist/gateway/static/root/assets/settings-page-CVPCa0PE.js +4 -0
- package/dist/gateway/static/root/assets/settings-page-CVPCa0PE.js.map +1 -0
- package/dist/gateway/static/root/assets/{skills-page-dHwx2vh0.js → skills-page-DueZ9Qfg.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-dHwx2vh0.js.map → skills-page-DueZ9Qfg.js.map} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js → theme-store-CWPq9gW1.js} +2 -2
- package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js.map → theme-store-CWPq9gW1.js.map} +1 -1
- package/dist/gateway/static/root/assets/{utils-COYrNFF7.js → utils-Cnix55r9.js} +2 -2
- package/dist/gateway/static/root/assets/{utils-COYrNFF7.js.map → utils-Cnix55r9.js.map} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-5WZZaxH3.js → voice-api-key-field-BR3Ut06g.js} +2 -2
- package/dist/gateway/static/root/assets/{voice-api-key-field-5WZZaxH3.js.map → voice-api-key-field-BR3Ut06g.js.map} +1 -1
- package/dist/gateway/static/root/index.html +3 -3
- package/dist/package.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +23 -4
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/cli/commands/tunnel.js +4 -5
- package/dist/src/cli/commands/tunnel.js.map +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/rules.js +0 -5
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +0 -27
- package/dist/src/config/schema.js +4 -18
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/gateway/auth-rate-limit.d.ts +2 -0
- package/dist/src/gateway/auth-rate-limit.js +9 -3
- package/dist/src/gateway/auth-rate-limit.js.map +1 -1
- package/dist/src/gateway/hono/app.js +19 -13
- package/dist/src/gateway/hono/app.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -2
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +32 -30
- package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
- package/dist/src/gateway/host.d.ts +24 -0
- package/dist/src/gateway/host.js +33 -1
- package/dist/src/gateway/host.js.map +1 -1
- package/dist/src/gateway/index.d.ts +1 -1
- package/dist/src/gateway/index.js +2 -2
- package/dist/src/gateway/runtime-config.js +1 -8
- package/dist/src/gateway/runtime-config.js.map +1 -1
- package/dist/src/gateway/security/audit.js +4 -4
- package/dist/src/gateway/security/audit.js.map +1 -1
- package/dist/src/gateway/server.js +2 -3
- package/dist/src/gateway/server.js.map +1 -1
- package/dist/src/gateway/service/types.d.ts +2 -0
- package/dist/src/gateway/service.d.ts +2 -0
- package/dist/src/gateway/service.js +7 -2
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/tunnel/frp-subdomain-host.d.ts +2 -0
- package/dist/src/tunnel/frp-subdomain-host.js +15 -0
- package/dist/src/tunnel/frp-subdomain-host.js.map +1 -0
- package/dist/src/tunnel/gateway-lifecycle.d.ts +0 -4
- package/dist/src/tunnel/gateway-lifecycle.js +9 -11
- package/dist/src/tunnel/gateway-lifecycle.js.map +1 -1
- package/dist/src/tunnel/index.d.ts +2 -4
- package/dist/src/tunnel/index.js +2 -4
- package/dist/src/tunnel/pair-url.js +7 -1
- package/dist/src/tunnel/pair-url.js.map +1 -1
- package/dist/src/tunnel/pairing.d.ts +13 -0
- package/dist/src/tunnel/pairing.js +48 -1
- package/dist/src/tunnel/pairing.js.map +1 -1
- package/dist/src/tunnel/tunnel-config.js +2 -16
- package/dist/src/tunnel/tunnel-config.js.map +1 -1
- package/dist/src/tunnel/tunnel-service.d.ts +1 -10
- package/dist/src/tunnel/tunnel-service.js +7 -60
- package/dist/src/tunnel/tunnel-service.js.map +1 -1
- package/dist/src/tunnel/tunnel-types.d.ts +3 -18
- package/dist/src/tunnel/well-known.d.ts +5 -0
- package/dist/src/tunnel/well-known.js +2 -1
- package/dist/src/tunnel/well-known.js.map +1 -1
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/settings-page-nxAc0ta1.js +0 -4
- package/dist/gateway/static/root/assets/settings-page-nxAc0ta1.js.map +0 -1
- package/dist/src/tunnel/acme-cert-store.d.ts +0 -34
- package/dist/src/tunnel/acme-cert-store.js +0 -184
- package/dist/src/tunnel/acme-cert-store.js.map +0 -1
- package/dist/src/tunnel/acme-client.d.ts +0 -50
- package/dist/src/tunnel/acme-client.js +0 -473
- package/dist/src/tunnel/acme-client.js.map +0 -1
- package/dist/src/tunnel/acme-crypto.d.ts +0 -25
- package/dist/src/tunnel/acme-crypto.js +0 -58
- package/dist/src/tunnel/acme-crypto.js.map +0 -1
- package/dist/src/tunnel/acme-csr.d.ts +0 -5
- package/dist/src/tunnel/acme-csr.js +0 -48
- package/dist/src/tunnel/acme-csr.js.map +0 -1
- package/dist/src/tunnel/tls-server.d.ts +0 -14
- package/dist/src/tunnel/tls-server.js +0 -126
- package/dist/src/tunnel/tls-server.js.map +0 -1
- package/dist/src/tunnel/tunnel-e2e-config.d.ts +0 -11
- package/dist/src/tunnel/tunnel-e2e-config.js +0 -29
- package/dist/src/tunnel/tunnel-e2e-config.js.map +0 -1
package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js.map → logs-page-Dw58E2GE.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs-page-DrIMhDE2.js","names":["fetchJson","apiUrl","LogEntry","LogFile","LogQuery","LogStats","buildQueryString","query","params","URLSearchParams","level","length","set","join","from","to","q","module","limit","String","offset","qs","toString","queryLogs","Promise","logs","count","getLogFiles","result","files","getLogModules","modules","getLogStats","raw","Partial","byLevel","getLogDir","dir","LogLevel","LOG_LEVELS","LogEntry","timestamp","level","message","module","prefix","service","extension","requestId","sessionId","userId","meta","Record","key","LogQuery","from","to","q","limit","offset","LogFile","name","size","modified","LogStats","byLevel","Partial","LOG_LEVELS","LogEntry","LogLevel","logEntryTimeMs","entry","t","Date","String","timestamp","getTime","Number","isFinite","sortLogsByTimeDesc","entries","toSorted","a","b","PAGE_LIMIT","REFRESH_MS","LOG_LEVEL_SET","Set","LevelPreset","LevelSegmentValue","Exclude","PRESET_ERRORS","PRESET_WARN_PLUS","PRESET_INFO_PLUS","parseLogLevelsParam","raw","out","part","split","level","trim","has","add","isSameLogLevelSet","size","setMatchesLevels","s","levels","length","every","l","derivePreset","segmentValueFromLevels","p","levelsForPreset","preset","interpolate","template","params","Record","replace","_","key","moduleLabel","log","module","prefix","service","extension","messagePreview","message","JSON","stringify","formatTimeCompact","date","toLocaleTimeString","undefined","hour","minute","second","hour12","formatTimestampFull","toLocaleString","formatFileSize","bytes","toFixed","requestIdPreview","id","slice","levelLabel","toLowerCase","formatStatsLine","byLevel","Partial","labels","parts","lv","n","push","join","useCallback","useEffect","useMemo","useReducer","useRef","useState","useSearchParams","getLogDir","getLogFiles","getLogModules","getLogStats","queryLogs","LogEntry","LogFile","LogLevel","LevelSegmentValue","isSameLogLevelSet","levelsForPreset","PAGE_LIMIT","parseLogLevelsParam","REFRESH_MS","segmentValueFromLevels","sortLogsByTimeDesc","messages","StoredLanguage","useGatewayStore","Stats","Awaited","ReturnType","Filters","searchInput","debouncedSearch","selectedLevels","Set","moduleFilter","dateFrom","dateTo","autoRefresh","FiltersAction","type","value","level","payload","Omit","filtersReducer","state","action","next","has","delete","add","p","same","Data","logs","loading","error","hasMore","modules","files","stats","logDir","DataAction","message","resetLogs","initialData","dataReducer","useLogsPage","language","L","token","st","hasToken","Boolean","searchParams","setSearchParams","searchParamsInitRef","filters","dispatchFilters","undefined","sp","current","initialSearch","get","trim","data","dispatchData","selectedLog","setSelectedLog","filesOpen","setFilesOpen","filtersOpen","setFiltersOpen","copiedDetail","setCopiedDetail","setSearchInput","setSelectedLevels","setModuleFilter","setDateFrom","setDateTo","setAutoRefresh","levelSegment","handleLevelSegment","hasActiveFilters","length","size","activeFilterCount","t","setTimeout","clearTimeout","nextQ","params","URLSearchParams","set","Array","from","sort","join","toString","replace","queryParams","q","module","to","limit","cancelled","result","offset","e","Error","loadError","mods","fileList","Promise","all","list","dir","id","window","setInterval","clearInterval","clearFilters","toggleDialogLevel","handleLoadMore","refreshAll","LogEntry","levelLabel","moduleLabel","LogsMessages","LogDetailLabels","Pick","Props","log","labels","LogDetailBody","t0","$","_c","lv","level","rid","requestId","sid","sessionId","t1","message","t2","t3","t4","t5","time","t6","timestamp","t7","t8","t9","t10","module","t11","t12","t13","t14","t15","t16","metadata","meta","Object","keys","length","JSON","stringify","t17","Dialog","ClipboardCopy","X","Button","LogDetailBody","LogEntry","LogsMessages","cn","copyTextToClipboard","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","log","onClose","copiedDetail","onCopiedMessage","onCopiedJson","LogsDetailDrawer","t0","$","_c","t1","t2","open","t3","Symbol","for","t4","t5","details","t6","copied","copyJson","copyMessage","text","message","then","ok","JSON","stringify","ok_0","t7","t8","close","t9","t10","t11","level","metadata","module","requestId","sessionId","time","t12","t13","undefined","t14","Dialog","Folder","X","Button","LogFile","formatFileSize","formatTimestampFull","LogsMessages","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","open","onOpenChange","files","logDir","LogsFilesDialog","t0","$","_c","t1","Symbol","for","t2","t3","t4","logFiles","t5","t6","close","t7","t8","filesEmpty","length","map","_temp","t9","t10","t11","f","name","size","modified","Dialog","X","Button","LOG_LEVELS","LogLevel","LogsMessages","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","open","onOpenChange","dateFrom","onDateFromChange","v","dateTo","onDateToChange","selectedLevels","Set","onToggleLevel","level","LogsFiltersDialog","t0","$","_c","t1","Symbol","for","t2","t3","filtersDialogTitle","t4","t5","close","t6","t7","filtersDialogDesc","t8","timeRange","t9","from","t10","e","target","value","t11","t12","t13","to","t14","e_0","t15","t16","t17","t18","levelCustom","t19","levelCustomHint","t20","t21","levelNames","map","active","has","t22","t23","t24","t25","filtersDone","t26","t27","ListFilter","Search","X","SlidingSegmented","Button","bareInputFocusClass","selectControlBaseClass","cn","LevelSegmentValue","LogsMessages","Props","L","levelSegment","onLevelSegment","v","searchInput","onSearchInputChange","moduleFilter","onModuleFilterChange","modules","onOpenFilters","activeFilterCount","hasActiveFilters","onClearFilters","autoRefresh","LogsFiltersSection","t0","$","_c","t1","filters","t2","presetAll","value","label","t3","presetErrors","t4","presetWarnPlus","t5","presetInfoPlus","t6","presetVerbose","t7","presetOther","t8","t9","levelPresetAria","t10","searchPlaceholder","t11","Symbol","for","t12","e","target","t13","t14","t15","t16","t17","e_0","t18","module","t19","t20","t21","allModules","t22","map","_temp","t23","t24","t25","t26","filtersMore","t27","clear","t28","t29","t30","liveHint","t31","mod","ChevronDown","FileText","RefreshCw","Button","cn","LogEntry","interpolate","levelLabel","messagePreview","moduleLabel","requestIdPreview","formatTimeCompact","LogsMessages","Props","L","logs","loading","hasMore","onSelectLog","log","onLoadMore","onRefreshAll","LogsListSection","t0","$","_c","t1","length","Array","from","map","_temp","t2","noLogs","noLogsDescription","refresh","t3","showingCount","count","String","moreAvailable","lv","level","rid","requestId","trim","timestamp","message","undefined","loadMore","t4","_","i","Terminal","LogsMessages","Props","L","LogsNoToken","t0","$","_c","t1","Symbol","for","t2","title","t3","needToken","t4","Folder","RefreshCw","SlidingSegmented","Button","cn","LogsMessages","Props","L","autoRefresh","onAutoRefreshChange","live","fileCount","onOpenFiles","loading","onRefreshAll","LogsPageHeader","t0","$","_c","t1","title","t2","subtitle","t3","t4","t5","v","t6","refreshManual","value","label","t7","refreshLive","t8","t9","refreshModeAria","t10","Symbol","for","t11","t12","logFiles","t13","refresh","t14","t15","t16","t17","t18","t19","t20","t21","Popover","formatStatsLine","LOG_LEVELS","LogStats","LogsMessages","cn","SETTINGS_SHELL_POPOVER_Z","Props","L","stats","LogsStatsPopover","t0","$","_c","t1","byLevel","t2","levelNames","statsLine","t3","statsRegion","t4","Symbol","for","t5","t6","t7","t8","statsDetailTitle","t9","statsHint","t10","map","lv","n","t11","t12","t13","useLogsPage","LogsDetailDrawer","LogsFilesDialog","LogsFiltersDialog","LogsFiltersSection","LogsListSection","LogsNoToken","LogsPageHeader","LogsStatsPopover","useLocaleStore","LogsPage","$","_c","language","_temp","L","hasToken","logs","loading","error","hasMore","searchInput","setSearchInput","selectedLevels","moduleFilter","setModuleFilter","dateFrom","setDateFrom","dateTo","setDateTo","modules","files","stats","selectedLog","setSelectedLog","filesOpen","setFilesOpen","filtersOpen","setFiltersOpen","logDir","autoRefresh","setAutoRefresh","copiedDetail","setCopiedDetail","hasActiveFilters","activeFilterCount","clearFilters","toggleDialogLevel","handleLoadMore","refreshAll","levelSegment","handleLevelSegment","t0","t1","length","t2","t3","t4","t5","t6","t7","t8","t10","t9","t11","t12","t13","s"],"sources":["../../../../../web/src/features/logs/log-api.ts","../../../../../web/src/features/logs/log.types.ts","../../../../../web/src/features/logs/logs-page-lib.ts","../../../../../web/src/features/logs/hooks/use-logs-page.ts","../../../../../web/src/features/logs/log-detail-body.tsx","../../../../../web/src/features/logs/logs-detail-drawer.tsx","../../../../../web/src/features/logs/logs-files-dialog.tsx","../../../../../web/src/features/logs/logs-filters-dialog.tsx","../../../../../web/src/features/logs/logs-filters-section.tsx","../../../../../web/src/features/logs/logs-list-section.tsx","../../../../../web/src/features/logs/logs-no-token.tsx","../../../../../web/src/features/logs/logs-page-header.tsx","../../../../../web/src/features/logs/logs-stats-popover.tsx","../../../../../web/src/features/logs/logs-page.tsx"],"sourcesContent":["import { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nimport type { LogEntry, LogFile, LogQuery, LogStats } from '@/features/logs/log.types';\n\nfunction buildQueryString(query?: LogQuery): string {\n const params = new URLSearchParams();\n if (!query) return '';\n if (query.level?.length) params.set('level', query.level.join(','));\n if (query.from) params.set('from', query.from);\n if (query.to) params.set('to', query.to);\n if (query.q) params.set('q', query.q);\n if (query.module) params.set('module', query.module);\n if (query.limit != null) params.set('limit', String(query.limit));\n if (query.offset != null) params.set('offset', String(query.offset));\n const qs = params.toString();\n return qs ? `?${qs}` : '';\n}\n\nexport async function queryLogs(query?: LogQuery): Promise<{ logs: LogEntry[]; count: number }> {\n return fetchJson<{ logs: LogEntry[]; count: number }>(apiUrl(`/api/logs${buildQueryString(query)}`));\n}\n\nexport async function getLogFiles(): Promise<LogFile[]> {\n const result = await fetchJson<{ files: LogFile[] }>(apiUrl('/api/logs/files'));\n return result.files ?? [];\n}\n\nexport async function getLogModules(): Promise<string[]> {\n const result = await fetchJson<{ modules: string[] }>(apiUrl('/api/logs/modules'));\n return result.modules ?? [];\n}\n\nexport async function getLogStats(): Promise<LogStats> {\n const raw = await fetchJson<Partial<LogStats>>(apiUrl('/api/logs/stats'));\n return { byLevel: raw.byLevel ?? {} };\n}\n\nexport async function getLogDir(): Promise<string> {\n const result = await fetchJson<{ dir: string }>(apiUrl('/api/logs/dir'));\n return result.dir ?? '';\n}\n","export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nexport const LOG_LEVELS: LogLevel[] = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n message: string;\n module?: string;\n prefix?: string;\n service?: string;\n extension?: string;\n requestId?: string;\n sessionId?: string;\n userId?: string;\n meta?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface LogQuery {\n level?: string[];\n from?: string;\n to?: string;\n q?: string;\n module?: string;\n limit?: number;\n offset?: number;\n}\n\nexport interface LogFile {\n name: string;\n size: number;\n modified: string;\n}\n\nexport interface LogStats {\n byLevel: Partial<Record<LogLevel | 'silent', number>>;\n}\n","import { LOG_LEVELS, type LogEntry, type LogLevel } from '@/features/logs/log.types';\n\nfunction logEntryTimeMs(entry: LogEntry): number {\n const t = new Date(String(entry.timestamp)).getTime();\n return Number.isFinite(t) ? t : 0;\n}\n\n/** Newest first (descending by timestamp). */\nexport function sortLogsByTimeDesc(entries: readonly LogEntry[]): LogEntry[] {\n return entries.toSorted((a, b) => logEntryTimeMs(b) - logEntryTimeMs(a));\n}\n\nexport const PAGE_LIMIT = 50;\nexport const REFRESH_MS = 5000;\n\nconst LOG_LEVEL_SET = new Set<LogLevel>(LOG_LEVELS);\n\nexport type LevelPreset = 'all' | 'errors' | 'warnPlus' | 'infoPlus' | 'verbose' | 'custom';\nexport type LevelSegmentValue = Exclude<LevelPreset, 'custom'> | 'other';\n\nconst PRESET_ERRORS: LogLevel[] = ['error', 'fatal'];\nconst PRESET_WARN_PLUS: LogLevel[] = ['warn', 'error', 'fatal'];\nconst PRESET_INFO_PLUS: LogLevel[] = ['info', 'warn', 'error', 'fatal'];\n\nexport function parseLogLevelsParam(raw: string | null): Set<LogLevel> {\n if (!raw) return new Set<LogLevel>();\n const out = new Set<LogLevel>();\n for (const part of raw.split(',')) {\n const level = part.trim() as LogLevel;\n if (LOG_LEVEL_SET.has(level)) out.add(level);\n }\n return out;\n}\n\nexport function isSameLogLevelSet(a: Set<LogLevel>, b: Set<LogLevel>): boolean {\n if (a.size !== b.size) return false;\n for (const level of a) {\n if (!b.has(level)) return false;\n }\n return true;\n}\n\nfunction setMatchesLevels(s: Set<LogLevel>, levels: readonly LogLevel[]): boolean {\n if (s.size !== levels.length) return false;\n return levels.every((l) => s.has(l));\n}\n\nfunction derivePreset(levels: Set<LogLevel>): LevelPreset {\n if (levels.size === 0) return 'all';\n if (setMatchesLevels(levels, PRESET_ERRORS)) return 'errors';\n if (setMatchesLevels(levels, PRESET_WARN_PLUS)) return 'warnPlus';\n if (setMatchesLevels(levels, PRESET_INFO_PLUS)) return 'infoPlus';\n if (levels.size === LOG_LEVELS.length && LOG_LEVELS.every((l) => levels.has(l))) return 'verbose';\n return 'custom';\n}\n\nexport function segmentValueFromLevels(levels: Set<LogLevel>): LevelSegmentValue {\n const p = derivePreset(levels);\n return p === 'custom' ? 'other' : p;\n}\n\nexport function levelsForPreset(preset: Exclude<LevelPreset, 'custom'>): Set<LogLevel> {\n switch (preset) {\n case 'all':\n return new Set();\n case 'errors':\n return new Set(PRESET_ERRORS);\n case 'warnPlus':\n return new Set(PRESET_WARN_PLUS);\n case 'infoPlus':\n return new Set(PRESET_INFO_PLUS);\n case 'verbose':\n return new Set(LOG_LEVELS);\n }\n}\n\nexport function interpolate(template: string, params: Record<string, string | number>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => String(params[key] ?? ''));\n}\n\nexport function moduleLabel(log: LogEntry): string {\n return String(log.module || log.prefix || log.service || log.extension || '—');\n}\n\nexport function messagePreview(log: LogEntry): string {\n if (typeof log.message === 'string' && log.message) return log.message;\n try {\n return JSON.stringify(log);\n } catch {\n return '';\n }\n}\n\nexport function formatTimeCompact(timestamp: string): string {\n try {\n const date = new Date(timestamp);\n return date.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n } catch {\n return timestamp;\n }\n}\n\nexport function formatTimestampFull(timestamp: string): string {\n try {\n return new Date(timestamp).toLocaleString();\n } catch {\n return timestamp;\n }\n}\n\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function requestIdPreview(id: string): string {\n const t = id.trim();\n if (t.length <= 10) return t;\n return `${t.slice(0, 8)}…`;\n}\n\nexport function levelLabel(level: string): string {\n return String(level).toLowerCase();\n}\n\nexport function formatStatsLine(\n byLevel: Partial<Record<LogLevel | 'silent', number>>,\n labels: Record<LogLevel, string>,\n): string {\n const parts: string[] = [];\n for (const lv of LOG_LEVELS) {\n const n = byLevel[lv] ?? 0;\n if (n > 0) parts.push(`${labels[lv]} ${n}`);\n }\n return parts.join(' · ');\n}\n","import { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nimport {\n getLogDir,\n getLogFiles,\n getLogModules,\n getLogStats,\n queryLogs,\n} from '@/features/logs/log-api';\nimport type { LogEntry, LogFile, LogLevel } from '@/features/logs/log.types';\nimport type { LevelSegmentValue } from '@/features/logs/logs-page-lib';\nimport {\n isSameLogLevelSet,\n levelsForPreset,\n PAGE_LIMIT,\n parseLogLevelsParam,\n REFRESH_MS,\n segmentValueFromLevels,\n sortLogsByTimeDesc,\n} from '@/features/logs/logs-page-lib';\nimport { messages } from '@/i18n/messages';\nimport type { StoredLanguage } from '@/lib/storage';\nimport { useGatewayStore } from '@/stores/gateway-store';\n\ntype Stats = Awaited<ReturnType<typeof getLogStats>>;\n\ntype Filters = {\n searchInput: string;\n debouncedSearch: string;\n selectedLevels: Set<LogLevel>;\n moduleFilter: string;\n dateFrom: string;\n dateTo: string;\n autoRefresh: boolean;\n};\n\ntype FiltersAction =\n | { type: 'setSearchInput'; value: string }\n | { type: 'setDebouncedSearch'; value: string }\n | { type: 'setLevels'; value: Set<LogLevel> }\n | { type: 'toggleLevel'; level: LogLevel }\n | { type: 'setModule'; value: string }\n | { type: 'setDateFrom'; value: string }\n | { type: 'setDateTo'; value: string }\n | { type: 'setAutoRefresh'; value: boolean }\n | { type: 'syncFromUrl'; payload: Omit<Filters, 'debouncedSearch'> & { debouncedSearch: string } }\n | { type: 'clearAll' };\n\nfunction filtersReducer(state: Filters, action: FiltersAction): Filters {\n switch (action.type) {\n case 'setSearchInput':\n return state.searchInput === action.value ? state : { ...state, searchInput: action.value };\n case 'setDebouncedSearch':\n return state.debouncedSearch === action.value ? state : { ...state, debouncedSearch: action.value };\n case 'setLevels':\n return isSameLogLevelSet(state.selectedLevels, action.value) ? state : { ...state, selectedLevels: action.value };\n case 'toggleLevel': {\n const next = new Set(state.selectedLevels);\n if (next.has(action.level)) next.delete(action.level);\n else next.add(action.level);\n return { ...state, selectedLevels: next };\n }\n case 'setModule':\n return state.moduleFilter === action.value ? state : { ...state, moduleFilter: action.value };\n case 'setDateFrom':\n return state.dateFrom === action.value ? state : { ...state, dateFrom: action.value };\n case 'setDateTo':\n return state.dateTo === action.value ? state : { ...state, dateTo: action.value };\n case 'setAutoRefresh':\n return state.autoRefresh === action.value ? state : { ...state, autoRefresh: action.value };\n case 'syncFromUrl': {\n const p = action.payload;\n const same =\n state.searchInput === p.searchInput &&\n state.debouncedSearch === p.debouncedSearch &&\n isSameLogLevelSet(state.selectedLevels, p.selectedLevels) &&\n state.moduleFilter === p.moduleFilter &&\n state.dateFrom === p.dateFrom &&\n state.dateTo === p.dateTo &&\n state.autoRefresh === p.autoRefresh;\n return same ? state : { ...state, ...p };\n }\n case 'clearAll':\n return {\n searchInput: '',\n debouncedSearch: '',\n selectedLevels: new Set(),\n moduleFilter: '',\n dateFrom: '',\n dateTo: '',\n autoRefresh: state.autoRefresh,\n };\n }\n}\n\ntype Data = {\n logs: LogEntry[];\n loading: boolean;\n error: string | null;\n hasMore: boolean;\n modules: string[];\n files: LogFile[];\n stats: Stats | null;\n logDir: string | null;\n};\n\ntype DataAction =\n | { type: 'queryStart' }\n | { type: 'querySuccess'; logs: LogEntry[]; hasMore: boolean }\n | { type: 'queryError'; message: string; resetLogs?: boolean }\n | { type: 'appendSuccess'; logs: LogEntry[]; hasMore: boolean }\n | { type: 'metaSuccess'; modules: string[]; stats: Stats; files: LogFile[] }\n | { type: 'filesSuccess'; files: LogFile[]; logDir: string | null }\n | { type: 'filesClear' }\n | { type: 'liveTick'; logs: LogEntry[]; hasMore: boolean; stats: Stats }\n | { type: 'refreshAllSuccess'; logs: LogEntry[]; hasMore: boolean; stats: Stats; files: LogFile[] };\n\nconst initialData: Data = {\n logs: [],\n loading: false,\n error: null,\n hasMore: false,\n modules: [],\n files: [],\n stats: null,\n logDir: null,\n};\n\nfunction dataReducer(state: Data, action: DataAction): Data {\n switch (action.type) {\n case 'queryStart':\n return { ...state, loading: true, error: null, logs: [] };\n case 'querySuccess':\n return { ...state, loading: false, logs: sortLogsByTimeDesc(action.logs), hasMore: action.hasMore };\n case 'queryError':\n return action.resetLogs\n ? { ...state, loading: false, error: action.message, logs: [], hasMore: false }\n : { ...state, loading: false, error: action.message };\n case 'appendSuccess':\n return {\n ...state,\n loading: false,\n logs: sortLogsByTimeDesc([...state.logs, ...action.logs]),\n hasMore: action.hasMore,\n };\n case 'metaSuccess':\n return { ...state, modules: action.modules, stats: action.stats, files: action.files };\n case 'filesSuccess':\n return { ...state, files: action.files, logDir: action.logDir };\n case 'filesClear':\n return { ...state, files: [] };\n case 'liveTick':\n return {\n ...state,\n logs: sortLogsByTimeDesc(action.logs),\n hasMore: action.hasMore,\n stats: action.stats,\n };\n case 'refreshAllSuccess':\n return {\n ...state,\n loading: false,\n logs: sortLogsByTimeDesc(action.logs),\n hasMore: action.hasMore,\n stats: action.stats,\n files: action.files,\n };\n }\n}\n\nexport function useLogsPage(language: StoredLanguage) {\n const L = messages(language).logs;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const searchParamsInitRef = useRef(searchParams);\n const [filters, dispatchFilters] = useReducer(filtersReducer, undefined as never, (): Filters => {\n const sp = searchParamsInitRef.current;\n const initialSearch = sp.get('q') ?? '';\n return {\n searchInput: initialSearch,\n debouncedSearch: initialSearch.trim(),\n selectedLevels: parseLogLevelsParam(sp.get('level')),\n moduleFilter: sp.get('module') ?? '',\n dateFrom: sp.get('from') ?? '',\n dateTo: sp.get('to') ?? '',\n autoRefresh: sp.get('live') === '1',\n };\n });\n const [data, dispatchData] = useReducer(dataReducer, initialData);\n\n const [selectedLog, setSelectedLog] = useState<LogEntry | null>(null);\n const [filesOpen, setFilesOpen] = useState(false);\n const [filtersOpen, setFiltersOpen] = useState(false);\n const [copiedDetail, setCopiedDetail] = useState<'json' | 'message' | null>(null);\n\n const { searchInput, debouncedSearch, selectedLevels, moduleFilter, dateFrom, dateTo, autoRefresh } = filters;\n const { logs, loading, error, hasMore, modules, files, stats, logDir } = data;\n\n const setSearchInput = useCallback((value: string) => dispatchFilters({ type: 'setSearchInput', value }), []);\n const setSelectedLevels = useCallback(\n (value: Set<LogLevel>) => dispatchFilters({ type: 'setLevels', value }),\n [],\n );\n const setModuleFilter = useCallback((value: string) => dispatchFilters({ type: 'setModule', value }), []);\n const setDateFrom = useCallback((value: string) => dispatchFilters({ type: 'setDateFrom', value }), []);\n const setDateTo = useCallback((value: string) => dispatchFilters({ type: 'setDateTo', value }), []);\n const setAutoRefresh = useCallback((value: boolean) => dispatchFilters({ type: 'setAutoRefresh', value }), []);\n\n const levelSegment = useMemo(() => segmentValueFromLevels(selectedLevels), [selectedLevels]);\n\n const handleLevelSegment = (value: LevelSegmentValue) => {\n if (value === 'other') {\n setFiltersOpen(true);\n return;\n }\n dispatchFilters({ type: 'setLevels', value: levelsForPreset(value) });\n };\n\n const hasActiveFilters =\n debouncedSearch.length > 0 ||\n selectedLevels.size > 0 ||\n Boolean(moduleFilter) ||\n Boolean(dateFrom) ||\n Boolean(dateTo);\n\n const activeFilterCount =\n (debouncedSearch.length > 0 ? 1 : 0) +\n (selectedLevels.size > 0 ? 1 : 0) +\n (moduleFilter ? 1 : 0) +\n (dateFrom || dateTo ? 1 : 0);\n\n useEffect(() => {\n const t = setTimeout(() => dispatchFilters({ type: 'setDebouncedSearch', value: searchInput.trim() }), 300);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n useEffect(() => {\n const nextQ = searchParams.get('q') ?? '';\n dispatchFilters({\n type: 'syncFromUrl',\n payload: {\n searchInput: nextQ,\n debouncedSearch: nextQ.trim(),\n selectedLevels: parseLogLevelsParam(searchParams.get('level')),\n moduleFilter: searchParams.get('module') ?? '',\n dateFrom: searchParams.get('from') ?? '',\n dateTo: searchParams.get('to') ?? '',\n autoRefresh: searchParams.get('live') === '1',\n },\n });\n }, [searchParams]);\n\n useEffect(() => {\n const params = new URLSearchParams(searchParams);\n const nextQ = debouncedSearch.trim();\n if (nextQ) params.set('q', nextQ);\n else params.delete('q');\n\n if (selectedLevels.size > 0) {\n params.set('level', Array.from(selectedLevels).sort().join(','));\n } else {\n params.delete('level');\n }\n\n if (moduleFilter) params.set('module', moduleFilter);\n else params.delete('module');\n if (dateFrom) params.set('from', dateFrom);\n else params.delete('from');\n if (dateTo) params.set('to', dateTo);\n else params.delete('to');\n if (autoRefresh) params.set('live', '1');\n else params.delete('live');\n\n const next = params.toString();\n if (next !== searchParams.toString()) {\n setSearchParams(params, { replace: true });\n }\n }, [\n autoRefresh,\n dateFrom,\n dateTo,\n debouncedSearch,\n moduleFilter,\n searchParams,\n selectedLevels,\n setSearchParams,\n ]);\n\n const queryParams = useMemo(\n () => ({\n q: debouncedSearch || undefined,\n level: selectedLevels.size > 0 ? Array.from(selectedLevels) : undefined,\n module: moduleFilter || undefined,\n from: dateFrom || undefined,\n to: dateTo || undefined,\n limit: PAGE_LIMIT,\n }),\n [debouncedSearch, selectedLevels, moduleFilter, dateFrom, dateTo],\n );\n\n useEffect(() => {\n if (!hasToken) return;\n let cancelled = false;\n dispatchData({ type: 'queryStart' });\n (async () => {\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n if (cancelled) return;\n dispatchData({ type: 'querySuccess', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT });\n } catch (e) {\n if (!cancelled) {\n dispatchData({\n type: 'queryError',\n message: e instanceof Error ? e.message : L.loadError,\n resetLogs: true,\n });\n }\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken, queryParams, L.loadError]);\n\n useEffect(() => {\n if (!hasToken) return;\n let cancelled = false;\n (async () => {\n try {\n const [mods, st, fileList] = await Promise.all([getLogModules(), getLogStats(), getLogFiles()]);\n if (!cancelled) dispatchData({ type: 'metaSuccess', modules: mods, stats: st, files: fileList });\n } catch {\n /* optional */\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken]);\n\n useEffect(() => {\n if (!hasToken || !filesOpen) return;\n let cancelled = false;\n (async () => {\n try {\n const [list, dir] = await Promise.all([getLogFiles(), getLogDir()]);\n if (!cancelled) dispatchData({ type: 'filesSuccess', files: list, logDir: dir });\n } catch {\n if (!cancelled) dispatchData({ type: 'filesClear' });\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken, filesOpen]);\n\n useEffect(() => {\n if (!autoRefresh || !hasToken) return;\n const id = window.setInterval(() => {\n void (async () => {\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n const st = await getLogStats();\n dispatchData({ type: 'liveTick', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT, stats: st });\n } catch {\n /* ignore */\n }\n })();\n }, REFRESH_MS);\n return () => clearInterval(id);\n }, [autoRefresh, hasToken, queryParams]);\n\n useEffect(() => {\n if (!copiedDetail) return;\n const t = window.setTimeout(() => setCopiedDetail(null), 2000);\n return () => clearTimeout(t);\n }, [copiedDetail]);\n\n const clearFilters = () => dispatchFilters({ type: 'clearAll' });\n const toggleDialogLevel = (level: LogLevel) => dispatchFilters({ type: 'toggleLevel', level });\n\n const handleLoadMore = () => {\n if (loading || !hasMore) return;\n void (async () => {\n dispatchData({ type: 'queryStart' });\n try {\n const result = await queryLogs({ ...queryParams, offset: logs.length });\n dispatchData({ type: 'appendSuccess', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT });\n } catch (e) {\n dispatchData({ type: 'queryError', message: e instanceof Error ? e.message : L.loadError });\n }\n })();\n };\n\n const refreshAll = () => {\n void (async () => {\n dispatchData({ type: 'queryStart' });\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n const [st, fileList] = await Promise.all([getLogStats(), getLogFiles()]);\n dispatchData({\n type: 'refreshAllSuccess',\n logs: result.logs,\n hasMore: result.logs.length === PAGE_LIMIT,\n stats: st,\n files: fileList,\n });\n } catch (e) {\n dispatchData({ type: 'queryError', message: e instanceof Error ? e.message : L.loadError });\n }\n })();\n };\n\n return {\n L,\n hasToken,\n logs,\n loading,\n error,\n hasMore,\n searchInput,\n setSearchInput,\n selectedLevels,\n setSelectedLevels,\n moduleFilter,\n setModuleFilter,\n dateFrom,\n setDateFrom,\n dateTo,\n setDateTo,\n modules,\n files,\n stats,\n selectedLog,\n setSelectedLog,\n filesOpen,\n setFilesOpen,\n filtersOpen,\n setFiltersOpen,\n logDir,\n autoRefresh,\n setAutoRefresh,\n copiedDetail,\n setCopiedDetail,\n hasActiveFilters,\n activeFilterCount,\n clearFilters,\n toggleDialogLevel,\n handleLoadMore,\n refreshAll,\n levelSegment,\n handleLevelSegment,\n };\n}\n","import type { LogEntry } from '@/features/logs/log.types';\nimport { levelLabel, moduleLabel } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\nexport type LogDetailLabels = Pick<\n LogsMessages,\n 'time' | 'level' | 'module' | 'message' | 'metadata' | 'requestId' | 'sessionId'\n>;\n\ntype Props = {\n log: LogEntry;\n labels: LogDetailLabels;\n};\n\nexport function LogDetailBody({ log, labels }: Props) {\n const lv = log.level ?? 'info';\n const rid = typeof log.requestId === 'string' ? log.requestId : '';\n const sid = typeof log.sessionId === 'string' ? log.sessionId : '';\n return (\n <div className=\"flex flex-col gap-8\">\n <div>\n <span className=\"text-xs font-sans font-medium text-fg-muted\">{labels.message}</span>\n <pre className=\"mt-2 whitespace-pre-wrap break-words border border-edge bg-surface-base p-3 text-xs leading-relaxed text-fg dark:border-edge\">\n {log.message || '—'}\n </pre>\n </div>\n <div className=\"grid grid-cols-[5.5rem_1fr] gap-x-3 gap-y-2 text-xs\">\n <span className=\"font-sans text-fg-muted\">{labels.time}</span>\n <code className=\"break-all text-fg\">{log.timestamp}</code>\n <span className=\"font-sans text-fg-muted\">{labels.level}</span>\n <span className=\"text-fg\">{levelLabel(lv)}</span>\n <span className=\"font-sans text-fg-muted\">{labels.module}</span>\n <code className=\"break-all text-fg\">{moduleLabel(log)}</code>\n {rid ? (\n <>\n <span className=\"font-sans text-fg-muted\">{labels.requestId}</span>\n <code className=\"break-all text-fg\">{rid}</code>\n </>\n ) : null}\n {sid ? (\n <>\n <span className=\"font-sans text-fg-muted\">{labels.sessionId}</span>\n <code className=\"break-all text-fg\">{sid}</code>\n </>\n ) : null}\n </div>\n {log.meta && Object.keys(log.meta).length > 0 ? (\n <div>\n <span className=\"text-xs font-sans font-medium text-fg-muted\">{labels.metadata}</span>\n <pre className=\"mt-2 overflow-x-auto whitespace-pre-wrap break-words border border-edge bg-surface-base p-3 text-xs leading-relaxed text-fg dark:border-edge\">\n {JSON.stringify(log.meta, null, 2)}\n </pre>\n </div>\n ) : null}\n </div>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { ClipboardCopy, X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { LogDetailBody } from '@/features/logs/log-detail-body';\nimport type { LogEntry } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { copyTextToClipboard } from '@/lib/copy-to-clipboard';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n log: LogEntry | null;\n onClose: () => void;\n copiedDetail: 'json' | 'message' | null;\n onCopiedMessage: () => void;\n onCopiedJson: () => void;\n};\n\nexport function LogsDetailDrawer({ L, log, onClose, copiedDetail, onCopiedMessage, onCopiedJson }: Props) {\n return (\n <Dialog.Root open={log !== null} onOpenChange={(open) => !open && onClose()}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-drawer-right fixed right-0 top-0 flex size-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none',\n SETTINGS_SHELL_CONTENT_Z,\n 'dark:border-edge',\n )}\n aria-describedby={undefined}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"text-base font-semibold tracking-tight text-fg\">{L.details}</Dialog.Title>\n <div className=\"flex min-w-0 items-center gap-1\">\n {log ? (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 shrink-0 gap-1 px-2 text-xs\"\n onClick={() => {\n const text = typeof log.message === 'string' ? log.message : '';\n void copyTextToClipboard(text).then((ok) => {\n if (ok) onCopiedMessage();\n });\n }}\n >\n <ClipboardCopy className=\"size-3.5 shrink-0\" strokeWidth={1.75} />\n <span className=\"hidden sm:inline\">{copiedDetail === 'message' ? L.copied : L.copyMessage}</span>\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 shrink-0 gap-1 px-2 text-xs\"\n onClick={() => {\n void copyTextToClipboard(JSON.stringify(log, null, 2)).then((ok) => {\n if (ok) onCopiedJson();\n });\n }}\n >\n <ClipboardCopy className=\"size-3.5 shrink-0\" strokeWidth={1.75} />\n <span className=\"hidden sm:inline\">{copiedDetail === 'json' ? L.copied : L.copyJson}</span>\n </Button>\n </>\n ) : null}\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4 font-mono text-sm leading-relaxed\">\n {log ? (\n <LogDetailBody\n log={log}\n labels={{\n time: L.time,\n level: L.level,\n module: L.module,\n message: L.message,\n metadata: L.metadata,\n requestId: L.requestId,\n sessionId: L.sessionId,\n }}\n />\n ) : null}\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { Folder, X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { LogFile } from '@/features/logs/log.types';\nimport { formatFileSize, formatTimestampFull } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n files: LogFile[];\n logDir: string | null;\n};\n\nexport function LogsFilesDialog({ L, open, onOpenChange, files, logDir }: Props) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 flex max-h-[min(32rem,85vh)] w-[min(100%-2rem,24rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none',\n SETTINGS_SHELL_CONTENT_Z,\n 'dark:border-edge',\n )}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"flex items-center gap-2 text-base font-semibold tracking-tight text-fg\">\n <Folder className=\"size-4 text-fg-muted\" strokeWidth={1.75} />\n {L.logFiles}\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n {files.length === 0 ? (\n <p className=\"text-sm text-fg-muted\">{L.filesEmpty}</p>\n ) : (\n <ul className=\"flex flex-col gap-2\">\n {files.map((f) => (\n <li\n key={f.name}\n className=\"flex flex-col gap-1 rounded-lg border border-edge-subtle bg-surface-base px-3 py-2 dark:border-edge\"\n >\n <span className=\"break-all font-mono text-xs text-fg\">{f.name}</span>\n <span className=\"flex flex-wrap gap-x-2 text-xs text-fg-subtle\">\n <span>{formatFileSize(f.size)}</span>\n <span>{formatTimestampFull(f.modified)}</span>\n </span>\n </li>\n ))}\n </ul>\n )}\n </div>\n {logDir ? (\n <div className=\"shrink-0 border-t border-edge-subtle px-4 py-2 text-xs text-fg-subtle dark:border-edge\">\n <span className=\"font-medium text-fg-muted\">{L.logDir}: </span>\n <code className=\"break-all text-fg-subtle\">{logDir}</code>\n </div>\n ) : null}\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { LOG_LEVELS, type LogLevel } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n dateFrom: string;\n onDateFromChange: (v: string) => void;\n dateTo: string;\n onDateToChange: (v: string) => void;\n selectedLevels: Set<LogLevel>;\n onToggleLevel: (level: LogLevel) => void;\n};\n\nexport function LogsFiltersDialog({\n L,\n open,\n onOpenChange,\n dateFrom,\n onDateFromChange,\n dateTo,\n onDateToChange,\n selectedLevels,\n onToggleLevel,\n}: Props) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 flex max-h-[min(32rem,90vh)] w-[min(100%-2rem,22rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none',\n SETTINGS_SHELL_CONTENT_Z,\n 'dark:border-edge',\n )}\n aria-describedby=\"log-filters-desc\"\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"text-base font-semibold tracking-tight text-fg\">{L.filtersDialogTitle}</Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div id=\"log-filters-desc\" className=\"sr-only\">\n {L.filtersDialogDesc}\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n <p className=\"text-xs font-medium text-fg-muted\">{L.timeRange}</p>\n <div className=\"mt-2 flex flex-col gap-3\">\n <div>\n <label htmlFor=\"log-from-d\" className=\"mb-1 block text-xs text-fg-muted\">\n {L.from}\n </label>\n <input\n id=\"log-from-d\"\n type=\"datetime-local\"\n value={dateFrom}\n onChange={(e) => onDateFromChange(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base p-2 text-sm text-fg dark:border-edge\"\n />\n </div>\n <div>\n <label htmlFor=\"log-to-d\" className=\"mb-1 block text-xs text-fg-muted\">\n {L.to}\n </label>\n <input\n id=\"log-to-d\"\n type=\"datetime-local\"\n value={dateTo}\n onChange={(e) => onDateToChange(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base p-2 text-sm text-fg dark:border-edge\"\n />\n </div>\n </div>\n <p className=\"mt-6 text-xs font-medium text-fg-muted\">{L.levelCustom}</p>\n <p className=\"mt-1 text-xs leading-5 text-fg-subtle\">{L.levelCustomHint}</p>\n <div className=\"mt-3 flex flex-wrap gap-2\" role=\"group\" aria-label={L.level}>\n {LOG_LEVELS.map((level) => {\n const active = selectedLevels.has(level);\n return (\n <button\n key={level}\n type=\"button\"\n className={cn(\n 'rounded-full border px-3 py-1.5 text-xs font-medium capitalize transition-[color,background-color,border-color] duration-150 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n active\n ? 'border-edge bg-surface-active text-fg dark:border-edge'\n : 'border-edge-subtle bg-surface-base text-fg-muted hover:bg-surface-hover dark:border-edge',\n )}\n onClick={() => onToggleLevel(level)}\n >\n {L.levelNames[level]}\n </button>\n );\n })}\n </div>\n </div>\n <div className=\"shrink-0 border-t border-edge-subtle px-4 py-3 dark:border-edge\">\n <Button type=\"button\" className=\"w-full rounded-xl\" onClick={() => onOpenChange(false)}>\n {L.filtersDone}\n </Button>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { ListFilter, Search, X } from 'lucide-react';\n\nimport { SlidingSegmented } from '@/components/ui/sliding-segmented';\nimport { Button } from '@/components/ui/button';\nimport { bareInputFocusClass, selectControlBaseClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport type { LevelSegmentValue } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n levelSegment: LevelSegmentValue;\n onLevelSegment: (v: LevelSegmentValue) => void;\n searchInput: string;\n onSearchInputChange: (v: string) => void;\n moduleFilter: string;\n onModuleFilterChange: (v: string) => void;\n modules: string[];\n onOpenFilters: () => void;\n activeFilterCount: number;\n hasActiveFilters: boolean;\n onClearFilters: () => void;\n autoRefresh: boolean;\n};\n\nexport function LogsFiltersSection({\n L,\n levelSegment,\n onLevelSegment,\n searchInput,\n onSearchInputChange,\n moduleFilter,\n onModuleFilterChange,\n modules,\n onOpenFilters,\n activeFilterCount,\n hasActiveFilters,\n onClearFilters,\n autoRefresh,\n}: Props) {\n return (\n <section className=\"flex flex-col gap-3\" aria-label={L.filters}>\n <div className=\"overflow-x-auto pb-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n <div className=\"min-w-[min(100%,36rem)]\">\n <SlidingSegmented<LevelSegmentValue>\n aria-label={L.levelPresetAria}\n value={levelSegment}\n onChange={onLevelSegment}\n options={[\n { value: 'all', label: L.presetAll },\n { value: 'errors', label: L.presetErrors },\n { value: 'warnPlus', label: L.presetWarnPlus },\n { value: 'infoPlus', label: L.presetInfoPlus },\n { value: 'verbose', label: L.presetVerbose },\n { value: 'other', label: L.presetOther },\n ]}\n buttonClassName=\"h-8 px-1.5 text-[11px] sm:px-2 sm:text-xs\"\n />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2 sm:flex-row sm:flex-wrap sm:items-center\">\n <label className=\"relative min-w-0 flex-1 sm:min-w-[12rem]\">\n <span className=\"sr-only\">{L.searchPlaceholder}</span>\n <Search\n className=\"pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle\"\n strokeWidth={1.75}\n aria-hidden\n />\n <input\n type=\"search\"\n value={searchInput}\n onChange={(e) => onSearchInputChange(e.target.value)}\n placeholder={L.searchPlaceholder}\n autoComplete=\"off\"\n spellCheck={false}\n className={cn(\n 'h-10 w-full rounded-md border border-edge bg-surface-panel py-0 pl-10 pr-3 text-sm leading-5 text-fg placeholder:text-fg-subtle dark:border-edge',\n bareInputFocusClass,\n )}\n />\n </label>\n\n <select\n id=\"log-module\"\n value={moduleFilter}\n onChange={(e) => onModuleFilterChange(e.target.value)}\n aria-label={L.module}\n title={L.module}\n className={cn(\n selectControlBaseClass,\n 'h-10 w-full min-w-0 rounded-md py-0 sm:w-[min(100%,14rem)] sm:shrink-0',\n )}\n >\n <option value=\"\">{L.allModules}</option>\n {modules.map((mod) => (\n <option key={mod} value={mod}>\n {mod}\n </option>\n ))}\n </select>\n\n <div className=\"flex min-w-0 shrink-0 items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"h-10 min-h-[44px] gap-2 rounded-md sm:min-h-10\"\n onClick={onOpenFilters}\n >\n <ListFilter className=\"size-4\" strokeWidth={1.75} />\n {L.filtersMore}\n {activeFilterCount > 0 ? (\n <span className=\"rounded-md bg-surface-hover px-1.5 text-xs tabular-nums text-fg-muted\">\n {activeFilterCount}\n </span>\n ) : null}\n </Button>\n {hasActiveFilters ? (\n <Button type=\"button\" variant=\"ghost\" className=\"h-10 min-h-[44px] gap-1 sm:min-h-10\" onClick={onClearFilters}>\n <X className=\"size-4\" strokeWidth={1.75} />\n {L.clear}\n </Button>\n ) : null}\n </div>\n </div>\n\n {autoRefresh ? <p className=\"text-xs leading-5 text-fg-subtle\">{L.liveHint}</p> : null}\n </section>\n );\n}","import { ChevronDown, FileText, RefreshCw } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport type { LogEntry } from '@/features/logs/log.types';\nimport {\n interpolate,\n levelLabel,\n messagePreview,\n moduleLabel,\n requestIdPreview,\n formatTimeCompact,\n} from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n logs: LogEntry[];\n loading: boolean;\n hasMore: boolean;\n onSelectLog: (log: LogEntry) => void;\n onLoadMore: () => void;\n onRefreshAll: () => void;\n};\n\nexport function LogsListSection({ L, logs, loading, hasMore, onSelectLog, onLoadMore, onRefreshAll }: Props) {\n return (\n <>\n {loading && logs.length === 0 ? (\n <div\n className=\"divide-y divide-edge-subtle overflow-hidden rounded-xl border border-edge bg-surface-panel dark:divide-edge dark:border-edge\"\n aria-busy=\"true\"\n >\n {Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"flex gap-3 px-3 py-2.5\">\n <div className=\"h-4 w-16 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 w-12 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 w-20 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 min-w-0 flex-1 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n </div>\n ))}\n </div>\n ) : null}\n\n {!loading && logs.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center gap-2 rounded-xl border border-edge-subtle bg-surface-base py-16 text-center dark:border-edge\">\n <FileText className=\"size-12 text-fg-subtle\" strokeWidth={1.5} aria-hidden />\n <h2 className=\"text-base font-semibold tracking-tight text-fg\">{L.noLogs}</h2>\n <p className=\"max-w-sm text-sm leading-relaxed text-fg-muted\">{L.noLogsDescription}</p>\n <Button type=\"button\" variant=\"secondary\" className=\"mt-4 gap-2\" onClick={onRefreshAll}>\n <RefreshCw className=\"size-4\" strokeWidth={1.75} />\n {L.refresh}\n </Button>\n </div>\n ) : null}\n\n {logs.length > 0 ? (\n <div className=\"flex flex-col gap-2\">\n <p className=\"text-xs leading-5 text-fg-muted\">\n {interpolate(L.showingCount, { count: String(logs.length) })}\n {hasMore ? <span className=\"text-fg-subtle\"> · {L.moreAvailable}</span> : null}\n </p>\n <ul\n className=\"divide-y divide-edge-subtle overflow-hidden rounded-xl border border-edge bg-surface-panel font-mono text-sm leading-6 dark:divide-edge dark:border-edge\"\n >\n {logs.map((log) => {\n const lv = log.level ?? 'info';\n const rid = typeof log.requestId === 'string' ? log.requestId.trim() : '';\n return (\n <li key={`${log.timestamp}-${log.requestId ?? log.message ?? ''}`}>\n <button\n type=\"button\"\n onClick={() => onSelectLog(log)}\n className={cn(\n 'flex w-full min-w-0 items-center gap-3 px-3 py-2.5 text-left transition-colors duration-150 ease-out',\n 'hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n )}\n >\n <span className=\"w-[5.25rem] shrink-0 tabular-nums text-fg-subtle\">\n {formatTimeCompact(log.timestamp)}\n </span>\n <span className=\"w-[4.5rem] shrink-0 truncate text-fg-muted\" title={lv}>\n {levelLabel(lv)}\n </span>\n <span\n className=\"w-[4.5rem] shrink-0 truncate text-fg-subtle sm:w-[5.25rem]\"\n title={rid ? `${L.requestId}: ${rid}` : undefined}\n >\n {rid ? requestIdPreview(rid) : '—'}\n </span>\n <span\n className=\"hidden max-w-[7rem] shrink-0 truncate text-fg-muted lg:inline\"\n title={moduleLabel(log)}\n >\n {moduleLabel(log)}\n </span>\n <span className=\"min-w-0 flex-1 truncate text-fg\">{messagePreview(log)}</span>\n </button>\n </li>\n );\n })}\n </ul>\n {hasMore ? (\n <div className=\"flex justify-center pt-1\">\n <Button type=\"button\" variant=\"secondary\" className=\"gap-2\" disabled={loading} onClick={onLoadMore}>\n {loading ? (\n <RefreshCw className=\"size-4 animate-spin motion-reduce:animate-none\" strokeWidth={1.75} />\n ) : (\n <ChevronDown className=\"size-4\" strokeWidth={1.75} />\n )}\n {L.loadMore}\n </Button>\n </div>\n ) : null}\n </div>\n ) : null}\n </>\n );\n}\n","import { Terminal } from 'lucide-react';\n\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = { L: LogsMessages };\n\nexport function LogsNoToken({ L }: Props) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10\">\n <div className=\"flex items-start gap-3 rounded-2xl border border-edge-subtle bg-surface-base p-6 dark:border-edge\">\n <Terminal className=\"mt-0.5 size-5 shrink-0 text-fg-subtle\" strokeWidth={1.75} aria-hidden />\n <div>\n <h1 className=\"text-base font-semibold tracking-tight text-fg\">{L.title}</h1>\n <p className=\"mt-1 text-sm leading-relaxed text-fg-muted\">{L.needToken}</p>\n </div>\n </div>\n </div>\n );\n}\n","import { Folder, RefreshCw } from 'lucide-react';\n\nimport { SlidingSegmented } from '@/components/ui/sliding-segmented';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n autoRefresh: boolean;\n onAutoRefreshChange: (live: boolean) => void;\n fileCount: number;\n onOpenFiles: () => void;\n loading: boolean;\n onRefreshAll: () => void;\n};\n\nexport function LogsPageHeader({\n L,\n autoRefresh,\n onAutoRefreshChange,\n fileCount,\n onOpenFiles,\n loading,\n onRefreshAll,\n}: Props) {\n return (\n <header className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"text-xl font-semibold tracking-tight text-fg\">{L.title}</h1>\n <p className=\"mt-0.5 text-sm leading-relaxed text-fg-muted\">{L.subtitle}</p>\n </div>\n <div className=\"flex w-full shrink-0 flex-col gap-2 sm:w-auto sm:max-w-md sm:flex-row sm:items-center sm:justify-end\">\n <div className=\"w-full sm:w-48\">\n <SlidingSegmented\n aria-label={L.refreshModeAria}\n value={autoRefresh ? 'live' : 'paused'}\n onChange={(v) => onAutoRefreshChange(v === 'live')}\n options={[\n { value: 'paused', label: L.refreshManual },\n { value: 'live', label: L.refreshLive },\n ]}\n buttonClassName=\"h-8\"\n />\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 min-h-[44px] min-w-[44px] px-2 sm:min-h-9 sm:min-w-0\"\n title={L.logFiles}\n aria-label={L.logFiles}\n onClick={onOpenFiles}\n >\n <Folder className=\"size-4\" strokeWidth={1.75} />\n {fileCount > 0 ? (\n <span className=\"rounded-full bg-surface-hover px-1.5 text-xs text-fg-muted\">{fileCount}</span>\n ) : null}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 min-h-[44px] min-w-[44px] px-2 sm:min-h-9 sm:min-w-0\"\n title={L.refresh}\n aria-label={L.refresh}\n onClick={onRefreshAll}\n >\n <RefreshCw\n className={cn(\n 'size-4 transition-transform duration-150 ease-out motion-reduce:transition-none',\n loading && 'animate-spin motion-reduce:animate-none',\n )}\n strokeWidth={1.75}\n />\n </Button>\n </div>\n </div>\n </header>\n );\n}\n","import * as Popover from '@radix-ui/react-popover';\n\nimport { formatStatsLine } from '@/features/logs/logs-page-lib';\nimport { LOG_LEVELS, type LogStats } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_POPOVER_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n stats: LogStats;\n};\n\nexport function LogsStatsPopover({ L, stats }: Props) {\n const statsLine = formatStatsLine(stats.byLevel ?? {}, L.levelNames);\n if (!statsLine) return null;\n\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"max-w-full truncate rounded-lg border border-transparent px-1 py-0.5 text-left text-xs leading-5 text-fg-subtle transition-colors duration-150 ease-out hover:border-edge-subtle hover:bg-surface-hover hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel dark:hover:border-edge\"\n >\n <span className=\"font-medium text-fg-muted\">{L.statsRegion}</span>\n <span className=\"mx-1.5 text-fg-subtle\">·</span>\n <span className=\"tabular-nums\">{statsLine}</span>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={6}\n className={cn(\n 'w-[min(calc(100vw-2rem),20rem)] rounded-xl border border-edge bg-surface-panel p-3 shadow-popover outline-none',\n SETTINGS_SHELL_POPOVER_Z,\n 'dark:border-edge',\n )}\n >\n <p className=\"text-xs font-medium text-fg\">{L.statsDetailTitle}</p>\n <p className=\"mt-1 text-xs leading-5 text-fg-muted\">{L.statsHint}</p>\n <ul className=\"mt-3 flex flex-col gap-1.5\">\n {LOG_LEVELS.map((lv) => {\n const n = stats.byLevel?.[lv] ?? 0;\n if (n === 0) return null;\n return (\n <li\n key={lv}\n className=\"flex items-center justify-between gap-2 rounded-md border border-edge-subtle bg-surface-base px-2 py-1 text-xs dark:border-edge\"\n >\n <span className=\"font-medium capitalize text-fg\">{L.levelNames[lv]}</span>\n <span className=\"tabular-nums text-fg-muted\">{n}</span>\n </li>\n );\n })}\n </ul>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n );\n}\n","import { useLogsPage } from '@/features/logs/hooks/use-logs-page';\nimport { LogsDetailDrawer } from '@/features/logs/logs-detail-drawer';\nimport { LogsFilesDialog } from '@/features/logs/logs-files-dialog';\nimport { LogsFiltersDialog } from '@/features/logs/logs-filters-dialog';\nimport { LogsFiltersSection } from '@/features/logs/logs-filters-section';\nimport { LogsListSection } from '@/features/logs/logs-list-section';\nimport { LogsNoToken } from '@/features/logs/logs-no-token';\nimport { LogsPageHeader } from '@/features/logs/logs-page-header';\nimport { LogsStatsPopover } from '@/features/logs/logs-stats-popover';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nexport function LogsPage() {\n const language = useLocaleStore((s) => s.language);\n const {\n L,\n hasToken,\n logs,\n loading,\n error,\n hasMore,\n searchInput,\n setSearchInput,\n selectedLevels,\n moduleFilter,\n setModuleFilter,\n dateFrom,\n setDateFrom,\n dateTo,\n setDateTo,\n modules,\n files,\n stats,\n selectedLog,\n setSelectedLog,\n filesOpen,\n setFilesOpen,\n filtersOpen,\n setFiltersOpen,\n logDir,\n autoRefresh,\n setAutoRefresh,\n copiedDetail,\n setCopiedDetail,\n hasActiveFilters,\n activeFilterCount,\n clearFilters,\n toggleDialogLevel,\n handleLoadMore,\n refreshAll,\n levelSegment,\n handleLevelSegment,\n } = useLogsPage(language);\n\n if (!hasToken) {\n return <LogsNoToken L={L} />;\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <LogsPageHeader\n L={L}\n autoRefresh={autoRefresh}\n onAutoRefreshChange={setAutoRefresh}\n fileCount={files.length}\n onOpenFiles={() => setFilesOpen(true)}\n loading={loading}\n onRefreshAll={refreshAll}\n />\n\n {error ? (\n <div\n className=\"rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg dark:border-edge\"\n role=\"alert\"\n >\n {error}\n </div>\n ) : null}\n\n {stats ? <LogsStatsPopover L={L} stats={stats} /> : null}\n\n <LogsFiltersSection\n L={L}\n levelSegment={levelSegment}\n onLevelSegment={handleLevelSegment}\n searchInput={searchInput}\n onSearchInputChange={setSearchInput}\n moduleFilter={moduleFilter}\n onModuleFilterChange={setModuleFilter}\n modules={modules}\n onOpenFilters={() => setFiltersOpen(true)}\n activeFilterCount={activeFilterCount}\n hasActiveFilters={hasActiveFilters}\n onClearFilters={clearFilters}\n autoRefresh={autoRefresh}\n />\n\n <LogsListSection\n L={L}\n logs={logs}\n loading={loading}\n hasMore={hasMore}\n onSelectLog={setSelectedLog}\n onLoadMore={handleLoadMore}\n onRefreshAll={refreshAll}\n />\n\n <LogsFiltersDialog\n L={L}\n open={filtersOpen}\n onOpenChange={setFiltersOpen}\n dateFrom={dateFrom}\n onDateFromChange={setDateFrom}\n dateTo={dateTo}\n onDateToChange={setDateTo}\n selectedLevels={selectedLevels}\n onToggleLevel={toggleDialogLevel}\n />\n\n <LogsDetailDrawer\n L={L}\n log={selectedLog}\n onClose={() => setSelectedLog(null)}\n copiedDetail={copiedDetail}\n onCopiedMessage={() => setCopiedDetail('message')}\n onCopiedJson={() => setCopiedDetail('json')}\n />\n\n <LogsFilesDialog L={L} open={filesOpen} onOpenChange={setFilesOpen} files={files} logDir={logDir} />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logs-page-Dw58E2GE.js","names":["fetchJson","apiUrl","LogEntry","LogFile","LogQuery","LogStats","buildQueryString","query","params","URLSearchParams","level","length","set","join","from","to","q","module","limit","String","offset","qs","toString","queryLogs","Promise","logs","count","getLogFiles","result","files","getLogModules","modules","getLogStats","raw","Partial","byLevel","getLogDir","dir","LogLevel","LOG_LEVELS","LogEntry","timestamp","level","message","module","prefix","service","extension","requestId","sessionId","userId","meta","Record","key","LogQuery","from","to","q","limit","offset","LogFile","name","size","modified","LogStats","byLevel","Partial","LOG_LEVELS","LogEntry","LogLevel","logEntryTimeMs","entry","t","Date","String","timestamp","getTime","Number","isFinite","sortLogsByTimeDesc","entries","toSorted","a","b","PAGE_LIMIT","REFRESH_MS","LOG_LEVEL_SET","Set","LevelPreset","LevelSegmentValue","Exclude","PRESET_ERRORS","PRESET_WARN_PLUS","PRESET_INFO_PLUS","parseLogLevelsParam","raw","out","part","split","level","trim","has","add","isSameLogLevelSet","size","setMatchesLevels","s","levels","length","every","l","derivePreset","segmentValueFromLevels","p","levelsForPreset","preset","interpolate","template","params","Record","replace","_","key","moduleLabel","log","module","prefix","service","extension","messagePreview","message","JSON","stringify","formatTimeCompact","date","toLocaleTimeString","undefined","hour","minute","second","hour12","formatTimestampFull","toLocaleString","formatFileSize","bytes","toFixed","requestIdPreview","id","slice","levelLabel","toLowerCase","formatStatsLine","byLevel","Partial","labels","parts","lv","n","push","join","useCallback","useEffect","useMemo","useReducer","useRef","useState","useSearchParams","getLogDir","getLogFiles","getLogModules","getLogStats","queryLogs","LogEntry","LogFile","LogLevel","LevelSegmentValue","isSameLogLevelSet","levelsForPreset","PAGE_LIMIT","parseLogLevelsParam","REFRESH_MS","segmentValueFromLevels","sortLogsByTimeDesc","messages","StoredLanguage","useGatewayStore","Stats","Awaited","ReturnType","Filters","searchInput","debouncedSearch","selectedLevels","Set","moduleFilter","dateFrom","dateTo","autoRefresh","FiltersAction","type","value","level","payload","Omit","filtersReducer","state","action","next","has","delete","add","p","same","Data","logs","loading","error","hasMore","modules","files","stats","logDir","DataAction","message","resetLogs","initialData","dataReducer","useLogsPage","language","L","token","st","hasToken","Boolean","searchParams","setSearchParams","searchParamsInitRef","filters","dispatchFilters","undefined","sp","current","initialSearch","get","trim","data","dispatchData","selectedLog","setSelectedLog","filesOpen","setFilesOpen","filtersOpen","setFiltersOpen","copiedDetail","setCopiedDetail","setSearchInput","setSelectedLevels","setModuleFilter","setDateFrom","setDateTo","setAutoRefresh","levelSegment","handleLevelSegment","hasActiveFilters","length","size","activeFilterCount","t","setTimeout","clearTimeout","nextQ","params","URLSearchParams","set","Array","from","sort","join","toString","replace","queryParams","q","module","to","limit","cancelled","result","offset","e","Error","loadError","mods","fileList","Promise","all","list","dir","id","window","setInterval","clearInterval","clearFilters","toggleDialogLevel","handleLoadMore","refreshAll","LogEntry","levelLabel","moduleLabel","LogsMessages","LogDetailLabels","Pick","Props","log","labels","LogDetailBody","t0","$","_c","lv","level","rid","requestId","sid","sessionId","t1","message","t2","t3","t4","t5","time","t6","timestamp","t7","t8","t9","t10","module","t11","t12","t13","t14","t15","t16","metadata","meta","Object","keys","length","JSON","stringify","t17","Dialog","ClipboardCopy","X","Button","LogDetailBody","LogEntry","LogsMessages","cn","copyTextToClipboard","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","log","onClose","copiedDetail","onCopiedMessage","onCopiedJson","LogsDetailDrawer","t0","$","_c","t1","t2","open","t3","Symbol","for","t4","t5","details","t6","copied","copyJson","copyMessage","text","message","then","ok","JSON","stringify","ok_0","t7","t8","close","t9","t10","t11","level","metadata","module","requestId","sessionId","time","t12","t13","undefined","t14","Dialog","Folder","X","Button","LogFile","formatFileSize","formatTimestampFull","LogsMessages","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","open","onOpenChange","files","logDir","LogsFilesDialog","t0","$","_c","t1","Symbol","for","t2","t3","t4","logFiles","t5","t6","close","t7","t8","filesEmpty","length","map","_temp","t9","t10","t11","f","name","size","modified","Dialog","X","Button","LOG_LEVELS","LogLevel","LogsMessages","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","open","onOpenChange","dateFrom","onDateFromChange","v","dateTo","onDateToChange","selectedLevels","Set","onToggleLevel","level","LogsFiltersDialog","t0","$","_c","t1","Symbol","for","t2","t3","filtersDialogTitle","t4","t5","close","t6","t7","filtersDialogDesc","t8","timeRange","t9","from","t10","e","target","value","t11","t12","t13","to","t14","e_0","t15","t16","t17","t18","levelCustom","t19","levelCustomHint","t20","t21","levelNames","map","active","has","t22","t23","t24","t25","filtersDone","t26","t27","ListFilter","Search","X","SlidingSegmented","Button","bareInputFocusClass","selectControlBaseClass","cn","LevelSegmentValue","LogsMessages","Props","L","levelSegment","onLevelSegment","v","searchInput","onSearchInputChange","moduleFilter","onModuleFilterChange","modules","onOpenFilters","activeFilterCount","hasActiveFilters","onClearFilters","autoRefresh","LogsFiltersSection","t0","$","_c","t1","filters","t2","presetAll","value","label","t3","presetErrors","t4","presetWarnPlus","t5","presetInfoPlus","t6","presetVerbose","t7","presetOther","t8","t9","levelPresetAria","t10","searchPlaceholder","t11","Symbol","for","t12","e","target","t13","t14","t15","t16","t17","e_0","t18","module","t19","t20","t21","allModules","t22","map","_temp","t23","t24","t25","t26","filtersMore","t27","clear","t28","t29","t30","liveHint","t31","mod","ChevronDown","FileText","RefreshCw","Button","cn","LogEntry","interpolate","levelLabel","messagePreview","moduleLabel","requestIdPreview","formatTimeCompact","LogsMessages","Props","L","logs","loading","hasMore","onSelectLog","log","onLoadMore","onRefreshAll","LogsListSection","t0","$","_c","t1","length","Array","from","map","_temp","t2","noLogs","noLogsDescription","refresh","t3","showingCount","count","String","moreAvailable","lv","level","rid","requestId","trim","timestamp","message","undefined","loadMore","t4","_","i","Terminal","LogsMessages","Props","L","LogsNoToken","t0","$","_c","t1","Symbol","for","t2","title","t3","needToken","t4","Folder","RefreshCw","SlidingSegmented","Button","cn","LogsMessages","Props","L","autoRefresh","onAutoRefreshChange","live","fileCount","onOpenFiles","loading","onRefreshAll","LogsPageHeader","t0","$","_c","t1","title","t2","subtitle","t3","t4","t5","v","t6","refreshManual","value","label","t7","refreshLive","t8","t9","refreshModeAria","t10","Symbol","for","t11","t12","logFiles","t13","refresh","t14","t15","t16","t17","t18","t19","t20","t21","Popover","formatStatsLine","LOG_LEVELS","LogStats","LogsMessages","cn","SETTINGS_SHELL_POPOVER_Z","Props","L","stats","LogsStatsPopover","t0","$","_c","t1","byLevel","t2","levelNames","statsLine","t3","statsRegion","t4","Symbol","for","t5","t6","t7","t8","statsDetailTitle","t9","statsHint","t10","map","lv","n","t11","t12","t13","useLogsPage","LogsDetailDrawer","LogsFilesDialog","LogsFiltersDialog","LogsFiltersSection","LogsListSection","LogsNoToken","LogsPageHeader","LogsStatsPopover","useLocaleStore","LogsPage","$","_c","language","_temp","L","hasToken","logs","loading","error","hasMore","searchInput","setSearchInput","selectedLevels","moduleFilter","setModuleFilter","dateFrom","setDateFrom","dateTo","setDateTo","modules","files","stats","selectedLog","setSelectedLog","filesOpen","setFilesOpen","filtersOpen","setFiltersOpen","logDir","autoRefresh","setAutoRefresh","copiedDetail","setCopiedDetail","hasActiveFilters","activeFilterCount","clearFilters","toggleDialogLevel","handleLoadMore","refreshAll","levelSegment","handleLevelSegment","t0","t1","length","t2","t3","t4","t5","t6","t7","t8","t10","t9","t11","t12","t13","s"],"sources":["../../../../../web/src/features/logs/log-api.ts","../../../../../web/src/features/logs/log.types.ts","../../../../../web/src/features/logs/logs-page-lib.ts","../../../../../web/src/features/logs/hooks/use-logs-page.ts","../../../../../web/src/features/logs/log-detail-body.tsx","../../../../../web/src/features/logs/logs-detail-drawer.tsx","../../../../../web/src/features/logs/logs-files-dialog.tsx","../../../../../web/src/features/logs/logs-filters-dialog.tsx","../../../../../web/src/features/logs/logs-filters-section.tsx","../../../../../web/src/features/logs/logs-list-section.tsx","../../../../../web/src/features/logs/logs-no-token.tsx","../../../../../web/src/features/logs/logs-page-header.tsx","../../../../../web/src/features/logs/logs-stats-popover.tsx","../../../../../web/src/features/logs/logs-page.tsx"],"sourcesContent":["import { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nimport type { LogEntry, LogFile, LogQuery, LogStats } from '@/features/logs/log.types';\n\nfunction buildQueryString(query?: LogQuery): string {\n const params = new URLSearchParams();\n if (!query) return '';\n if (query.level?.length) params.set('level', query.level.join(','));\n if (query.from) params.set('from', query.from);\n if (query.to) params.set('to', query.to);\n if (query.q) params.set('q', query.q);\n if (query.module) params.set('module', query.module);\n if (query.limit != null) params.set('limit', String(query.limit));\n if (query.offset != null) params.set('offset', String(query.offset));\n const qs = params.toString();\n return qs ? `?${qs}` : '';\n}\n\nexport async function queryLogs(query?: LogQuery): Promise<{ logs: LogEntry[]; count: number }> {\n return fetchJson<{ logs: LogEntry[]; count: number }>(apiUrl(`/api/logs${buildQueryString(query)}`));\n}\n\nexport async function getLogFiles(): Promise<LogFile[]> {\n const result = await fetchJson<{ files: LogFile[] }>(apiUrl('/api/logs/files'));\n return result.files ?? [];\n}\n\nexport async function getLogModules(): Promise<string[]> {\n const result = await fetchJson<{ modules: string[] }>(apiUrl('/api/logs/modules'));\n return result.modules ?? [];\n}\n\nexport async function getLogStats(): Promise<LogStats> {\n const raw = await fetchJson<Partial<LogStats>>(apiUrl('/api/logs/stats'));\n return { byLevel: raw.byLevel ?? {} };\n}\n\nexport async function getLogDir(): Promise<string> {\n const result = await fetchJson<{ dir: string }>(apiUrl('/api/logs/dir'));\n return result.dir ?? '';\n}\n","export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nexport const LOG_LEVELS: LogLevel[] = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n message: string;\n module?: string;\n prefix?: string;\n service?: string;\n extension?: string;\n requestId?: string;\n sessionId?: string;\n userId?: string;\n meta?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface LogQuery {\n level?: string[];\n from?: string;\n to?: string;\n q?: string;\n module?: string;\n limit?: number;\n offset?: number;\n}\n\nexport interface LogFile {\n name: string;\n size: number;\n modified: string;\n}\n\nexport interface LogStats {\n byLevel: Partial<Record<LogLevel | 'silent', number>>;\n}\n","import { LOG_LEVELS, type LogEntry, type LogLevel } from '@/features/logs/log.types';\n\nfunction logEntryTimeMs(entry: LogEntry): number {\n const t = new Date(String(entry.timestamp)).getTime();\n return Number.isFinite(t) ? t : 0;\n}\n\n/** Newest first (descending by timestamp). */\nexport function sortLogsByTimeDesc(entries: readonly LogEntry[]): LogEntry[] {\n return entries.toSorted((a, b) => logEntryTimeMs(b) - logEntryTimeMs(a));\n}\n\nexport const PAGE_LIMIT = 50;\nexport const REFRESH_MS = 5000;\n\nconst LOG_LEVEL_SET = new Set<LogLevel>(LOG_LEVELS);\n\nexport type LevelPreset = 'all' | 'errors' | 'warnPlus' | 'infoPlus' | 'verbose' | 'custom';\nexport type LevelSegmentValue = Exclude<LevelPreset, 'custom'> | 'other';\n\nconst PRESET_ERRORS: LogLevel[] = ['error', 'fatal'];\nconst PRESET_WARN_PLUS: LogLevel[] = ['warn', 'error', 'fatal'];\nconst PRESET_INFO_PLUS: LogLevel[] = ['info', 'warn', 'error', 'fatal'];\n\nexport function parseLogLevelsParam(raw: string | null): Set<LogLevel> {\n if (!raw) return new Set<LogLevel>();\n const out = new Set<LogLevel>();\n for (const part of raw.split(',')) {\n const level = part.trim() as LogLevel;\n if (LOG_LEVEL_SET.has(level)) out.add(level);\n }\n return out;\n}\n\nexport function isSameLogLevelSet(a: Set<LogLevel>, b: Set<LogLevel>): boolean {\n if (a.size !== b.size) return false;\n for (const level of a) {\n if (!b.has(level)) return false;\n }\n return true;\n}\n\nfunction setMatchesLevels(s: Set<LogLevel>, levels: readonly LogLevel[]): boolean {\n if (s.size !== levels.length) return false;\n return levels.every((l) => s.has(l));\n}\n\nfunction derivePreset(levels: Set<LogLevel>): LevelPreset {\n if (levels.size === 0) return 'all';\n if (setMatchesLevels(levels, PRESET_ERRORS)) return 'errors';\n if (setMatchesLevels(levels, PRESET_WARN_PLUS)) return 'warnPlus';\n if (setMatchesLevels(levels, PRESET_INFO_PLUS)) return 'infoPlus';\n if (levels.size === LOG_LEVELS.length && LOG_LEVELS.every((l) => levels.has(l))) return 'verbose';\n return 'custom';\n}\n\nexport function segmentValueFromLevels(levels: Set<LogLevel>): LevelSegmentValue {\n const p = derivePreset(levels);\n return p === 'custom' ? 'other' : p;\n}\n\nexport function levelsForPreset(preset: Exclude<LevelPreset, 'custom'>): Set<LogLevel> {\n switch (preset) {\n case 'all':\n return new Set();\n case 'errors':\n return new Set(PRESET_ERRORS);\n case 'warnPlus':\n return new Set(PRESET_WARN_PLUS);\n case 'infoPlus':\n return new Set(PRESET_INFO_PLUS);\n case 'verbose':\n return new Set(LOG_LEVELS);\n }\n}\n\nexport function interpolate(template: string, params: Record<string, string | number>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => String(params[key] ?? ''));\n}\n\nexport function moduleLabel(log: LogEntry): string {\n return String(log.module || log.prefix || log.service || log.extension || '—');\n}\n\nexport function messagePreview(log: LogEntry): string {\n if (typeof log.message === 'string' && log.message) return log.message;\n try {\n return JSON.stringify(log);\n } catch {\n return '';\n }\n}\n\nexport function formatTimeCompact(timestamp: string): string {\n try {\n const date = new Date(timestamp);\n return date.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n } catch {\n return timestamp;\n }\n}\n\nexport function formatTimestampFull(timestamp: string): string {\n try {\n return new Date(timestamp).toLocaleString();\n } catch {\n return timestamp;\n }\n}\n\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function requestIdPreview(id: string): string {\n const t = id.trim();\n if (t.length <= 10) return t;\n return `${t.slice(0, 8)}…`;\n}\n\nexport function levelLabel(level: string): string {\n return String(level).toLowerCase();\n}\n\nexport function formatStatsLine(\n byLevel: Partial<Record<LogLevel | 'silent', number>>,\n labels: Record<LogLevel, string>,\n): string {\n const parts: string[] = [];\n for (const lv of LOG_LEVELS) {\n const n = byLevel[lv] ?? 0;\n if (n > 0) parts.push(`${labels[lv]} ${n}`);\n }\n return parts.join(' · ');\n}\n","import { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nimport {\n getLogDir,\n getLogFiles,\n getLogModules,\n getLogStats,\n queryLogs,\n} from '@/features/logs/log-api';\nimport type { LogEntry, LogFile, LogLevel } from '@/features/logs/log.types';\nimport type { LevelSegmentValue } from '@/features/logs/logs-page-lib';\nimport {\n isSameLogLevelSet,\n levelsForPreset,\n PAGE_LIMIT,\n parseLogLevelsParam,\n REFRESH_MS,\n segmentValueFromLevels,\n sortLogsByTimeDesc,\n} from '@/features/logs/logs-page-lib';\nimport { messages } from '@/i18n/messages';\nimport type { StoredLanguage } from '@/lib/storage';\nimport { useGatewayStore } from '@/stores/gateway-store';\n\ntype Stats = Awaited<ReturnType<typeof getLogStats>>;\n\ntype Filters = {\n searchInput: string;\n debouncedSearch: string;\n selectedLevels: Set<LogLevel>;\n moduleFilter: string;\n dateFrom: string;\n dateTo: string;\n autoRefresh: boolean;\n};\n\ntype FiltersAction =\n | { type: 'setSearchInput'; value: string }\n | { type: 'setDebouncedSearch'; value: string }\n | { type: 'setLevels'; value: Set<LogLevel> }\n | { type: 'toggleLevel'; level: LogLevel }\n | { type: 'setModule'; value: string }\n | { type: 'setDateFrom'; value: string }\n | { type: 'setDateTo'; value: string }\n | { type: 'setAutoRefresh'; value: boolean }\n | { type: 'syncFromUrl'; payload: Omit<Filters, 'debouncedSearch'> & { debouncedSearch: string } }\n | { type: 'clearAll' };\n\nfunction filtersReducer(state: Filters, action: FiltersAction): Filters {\n switch (action.type) {\n case 'setSearchInput':\n return state.searchInput === action.value ? state : { ...state, searchInput: action.value };\n case 'setDebouncedSearch':\n return state.debouncedSearch === action.value ? state : { ...state, debouncedSearch: action.value };\n case 'setLevels':\n return isSameLogLevelSet(state.selectedLevels, action.value) ? state : { ...state, selectedLevels: action.value };\n case 'toggleLevel': {\n const next = new Set(state.selectedLevels);\n if (next.has(action.level)) next.delete(action.level);\n else next.add(action.level);\n return { ...state, selectedLevels: next };\n }\n case 'setModule':\n return state.moduleFilter === action.value ? state : { ...state, moduleFilter: action.value };\n case 'setDateFrom':\n return state.dateFrom === action.value ? state : { ...state, dateFrom: action.value };\n case 'setDateTo':\n return state.dateTo === action.value ? state : { ...state, dateTo: action.value };\n case 'setAutoRefresh':\n return state.autoRefresh === action.value ? state : { ...state, autoRefresh: action.value };\n case 'syncFromUrl': {\n const p = action.payload;\n const same =\n state.searchInput === p.searchInput &&\n state.debouncedSearch === p.debouncedSearch &&\n isSameLogLevelSet(state.selectedLevels, p.selectedLevels) &&\n state.moduleFilter === p.moduleFilter &&\n state.dateFrom === p.dateFrom &&\n state.dateTo === p.dateTo &&\n state.autoRefresh === p.autoRefresh;\n return same ? state : { ...state, ...p };\n }\n case 'clearAll':\n return {\n searchInput: '',\n debouncedSearch: '',\n selectedLevels: new Set(),\n moduleFilter: '',\n dateFrom: '',\n dateTo: '',\n autoRefresh: state.autoRefresh,\n };\n }\n}\n\ntype Data = {\n logs: LogEntry[];\n loading: boolean;\n error: string | null;\n hasMore: boolean;\n modules: string[];\n files: LogFile[];\n stats: Stats | null;\n logDir: string | null;\n};\n\ntype DataAction =\n | { type: 'queryStart' }\n | { type: 'querySuccess'; logs: LogEntry[]; hasMore: boolean }\n | { type: 'queryError'; message: string; resetLogs?: boolean }\n | { type: 'appendSuccess'; logs: LogEntry[]; hasMore: boolean }\n | { type: 'metaSuccess'; modules: string[]; stats: Stats; files: LogFile[] }\n | { type: 'filesSuccess'; files: LogFile[]; logDir: string | null }\n | { type: 'filesClear' }\n | { type: 'liveTick'; logs: LogEntry[]; hasMore: boolean; stats: Stats }\n | { type: 'refreshAllSuccess'; logs: LogEntry[]; hasMore: boolean; stats: Stats; files: LogFile[] };\n\nconst initialData: Data = {\n logs: [],\n loading: false,\n error: null,\n hasMore: false,\n modules: [],\n files: [],\n stats: null,\n logDir: null,\n};\n\nfunction dataReducer(state: Data, action: DataAction): Data {\n switch (action.type) {\n case 'queryStart':\n return { ...state, loading: true, error: null, logs: [] };\n case 'querySuccess':\n return { ...state, loading: false, logs: sortLogsByTimeDesc(action.logs), hasMore: action.hasMore };\n case 'queryError':\n return action.resetLogs\n ? { ...state, loading: false, error: action.message, logs: [], hasMore: false }\n : { ...state, loading: false, error: action.message };\n case 'appendSuccess':\n return {\n ...state,\n loading: false,\n logs: sortLogsByTimeDesc([...state.logs, ...action.logs]),\n hasMore: action.hasMore,\n };\n case 'metaSuccess':\n return { ...state, modules: action.modules, stats: action.stats, files: action.files };\n case 'filesSuccess':\n return { ...state, files: action.files, logDir: action.logDir };\n case 'filesClear':\n return { ...state, files: [] };\n case 'liveTick':\n return {\n ...state,\n logs: sortLogsByTimeDesc(action.logs),\n hasMore: action.hasMore,\n stats: action.stats,\n };\n case 'refreshAllSuccess':\n return {\n ...state,\n loading: false,\n logs: sortLogsByTimeDesc(action.logs),\n hasMore: action.hasMore,\n stats: action.stats,\n files: action.files,\n };\n }\n}\n\nexport function useLogsPage(language: StoredLanguage) {\n const L = messages(language).logs;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const searchParamsInitRef = useRef(searchParams);\n const [filters, dispatchFilters] = useReducer(filtersReducer, undefined as never, (): Filters => {\n const sp = searchParamsInitRef.current;\n const initialSearch = sp.get('q') ?? '';\n return {\n searchInput: initialSearch,\n debouncedSearch: initialSearch.trim(),\n selectedLevels: parseLogLevelsParam(sp.get('level')),\n moduleFilter: sp.get('module') ?? '',\n dateFrom: sp.get('from') ?? '',\n dateTo: sp.get('to') ?? '',\n autoRefresh: sp.get('live') === '1',\n };\n });\n const [data, dispatchData] = useReducer(dataReducer, initialData);\n\n const [selectedLog, setSelectedLog] = useState<LogEntry | null>(null);\n const [filesOpen, setFilesOpen] = useState(false);\n const [filtersOpen, setFiltersOpen] = useState(false);\n const [copiedDetail, setCopiedDetail] = useState<'json' | 'message' | null>(null);\n\n const { searchInput, debouncedSearch, selectedLevels, moduleFilter, dateFrom, dateTo, autoRefresh } = filters;\n const { logs, loading, error, hasMore, modules, files, stats, logDir } = data;\n\n const setSearchInput = useCallback((value: string) => dispatchFilters({ type: 'setSearchInput', value }), []);\n const setSelectedLevels = useCallback(\n (value: Set<LogLevel>) => dispatchFilters({ type: 'setLevels', value }),\n [],\n );\n const setModuleFilter = useCallback((value: string) => dispatchFilters({ type: 'setModule', value }), []);\n const setDateFrom = useCallback((value: string) => dispatchFilters({ type: 'setDateFrom', value }), []);\n const setDateTo = useCallback((value: string) => dispatchFilters({ type: 'setDateTo', value }), []);\n const setAutoRefresh = useCallback((value: boolean) => dispatchFilters({ type: 'setAutoRefresh', value }), []);\n\n const levelSegment = useMemo(() => segmentValueFromLevels(selectedLevels), [selectedLevels]);\n\n const handleLevelSegment = (value: LevelSegmentValue) => {\n if (value === 'other') {\n setFiltersOpen(true);\n return;\n }\n dispatchFilters({ type: 'setLevels', value: levelsForPreset(value) });\n };\n\n const hasActiveFilters =\n debouncedSearch.length > 0 ||\n selectedLevels.size > 0 ||\n Boolean(moduleFilter) ||\n Boolean(dateFrom) ||\n Boolean(dateTo);\n\n const activeFilterCount =\n (debouncedSearch.length > 0 ? 1 : 0) +\n (selectedLevels.size > 0 ? 1 : 0) +\n (moduleFilter ? 1 : 0) +\n (dateFrom || dateTo ? 1 : 0);\n\n useEffect(() => {\n const t = setTimeout(() => dispatchFilters({ type: 'setDebouncedSearch', value: searchInput.trim() }), 300);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n useEffect(() => {\n const nextQ = searchParams.get('q') ?? '';\n dispatchFilters({\n type: 'syncFromUrl',\n payload: {\n searchInput: nextQ,\n debouncedSearch: nextQ.trim(),\n selectedLevels: parseLogLevelsParam(searchParams.get('level')),\n moduleFilter: searchParams.get('module') ?? '',\n dateFrom: searchParams.get('from') ?? '',\n dateTo: searchParams.get('to') ?? '',\n autoRefresh: searchParams.get('live') === '1',\n },\n });\n }, [searchParams]);\n\n useEffect(() => {\n const params = new URLSearchParams(searchParams);\n const nextQ = debouncedSearch.trim();\n if (nextQ) params.set('q', nextQ);\n else params.delete('q');\n\n if (selectedLevels.size > 0) {\n params.set('level', Array.from(selectedLevels).sort().join(','));\n } else {\n params.delete('level');\n }\n\n if (moduleFilter) params.set('module', moduleFilter);\n else params.delete('module');\n if (dateFrom) params.set('from', dateFrom);\n else params.delete('from');\n if (dateTo) params.set('to', dateTo);\n else params.delete('to');\n if (autoRefresh) params.set('live', '1');\n else params.delete('live');\n\n const next = params.toString();\n if (next !== searchParams.toString()) {\n setSearchParams(params, { replace: true });\n }\n }, [\n autoRefresh,\n dateFrom,\n dateTo,\n debouncedSearch,\n moduleFilter,\n searchParams,\n selectedLevels,\n setSearchParams,\n ]);\n\n const queryParams = useMemo(\n () => ({\n q: debouncedSearch || undefined,\n level: selectedLevels.size > 0 ? Array.from(selectedLevels) : undefined,\n module: moduleFilter || undefined,\n from: dateFrom || undefined,\n to: dateTo || undefined,\n limit: PAGE_LIMIT,\n }),\n [debouncedSearch, selectedLevels, moduleFilter, dateFrom, dateTo],\n );\n\n useEffect(() => {\n if (!hasToken) return;\n let cancelled = false;\n dispatchData({ type: 'queryStart' });\n (async () => {\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n if (cancelled) return;\n dispatchData({ type: 'querySuccess', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT });\n } catch (e) {\n if (!cancelled) {\n dispatchData({\n type: 'queryError',\n message: e instanceof Error ? e.message : L.loadError,\n resetLogs: true,\n });\n }\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken, queryParams, L.loadError]);\n\n useEffect(() => {\n if (!hasToken) return;\n let cancelled = false;\n (async () => {\n try {\n const [mods, st, fileList] = await Promise.all([getLogModules(), getLogStats(), getLogFiles()]);\n if (!cancelled) dispatchData({ type: 'metaSuccess', modules: mods, stats: st, files: fileList });\n } catch {\n /* optional */\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken]);\n\n useEffect(() => {\n if (!hasToken || !filesOpen) return;\n let cancelled = false;\n (async () => {\n try {\n const [list, dir] = await Promise.all([getLogFiles(), getLogDir()]);\n if (!cancelled) dispatchData({ type: 'filesSuccess', files: list, logDir: dir });\n } catch {\n if (!cancelled) dispatchData({ type: 'filesClear' });\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken, filesOpen]);\n\n useEffect(() => {\n if (!autoRefresh || !hasToken) return;\n const id = window.setInterval(() => {\n void (async () => {\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n const st = await getLogStats();\n dispatchData({ type: 'liveTick', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT, stats: st });\n } catch {\n /* ignore */\n }\n })();\n }, REFRESH_MS);\n return () => clearInterval(id);\n }, [autoRefresh, hasToken, queryParams]);\n\n useEffect(() => {\n if (!copiedDetail) return;\n const t = window.setTimeout(() => setCopiedDetail(null), 2000);\n return () => clearTimeout(t);\n }, [copiedDetail]);\n\n const clearFilters = () => dispatchFilters({ type: 'clearAll' });\n const toggleDialogLevel = (level: LogLevel) => dispatchFilters({ type: 'toggleLevel', level });\n\n const handleLoadMore = () => {\n if (loading || !hasMore) return;\n void (async () => {\n dispatchData({ type: 'queryStart' });\n try {\n const result = await queryLogs({ ...queryParams, offset: logs.length });\n dispatchData({ type: 'appendSuccess', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT });\n } catch (e) {\n dispatchData({ type: 'queryError', message: e instanceof Error ? e.message : L.loadError });\n }\n })();\n };\n\n const refreshAll = () => {\n void (async () => {\n dispatchData({ type: 'queryStart' });\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n const [st, fileList] = await Promise.all([getLogStats(), getLogFiles()]);\n dispatchData({\n type: 'refreshAllSuccess',\n logs: result.logs,\n hasMore: result.logs.length === PAGE_LIMIT,\n stats: st,\n files: fileList,\n });\n } catch (e) {\n dispatchData({ type: 'queryError', message: e instanceof Error ? e.message : L.loadError });\n }\n })();\n };\n\n return {\n L,\n hasToken,\n logs,\n loading,\n error,\n hasMore,\n searchInput,\n setSearchInput,\n selectedLevels,\n setSelectedLevels,\n moduleFilter,\n setModuleFilter,\n dateFrom,\n setDateFrom,\n dateTo,\n setDateTo,\n modules,\n files,\n stats,\n selectedLog,\n setSelectedLog,\n filesOpen,\n setFilesOpen,\n filtersOpen,\n setFiltersOpen,\n logDir,\n autoRefresh,\n setAutoRefresh,\n copiedDetail,\n setCopiedDetail,\n hasActiveFilters,\n activeFilterCount,\n clearFilters,\n toggleDialogLevel,\n handleLoadMore,\n refreshAll,\n levelSegment,\n handleLevelSegment,\n };\n}\n","import type { LogEntry } from '@/features/logs/log.types';\nimport { levelLabel, moduleLabel } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\nexport type LogDetailLabels = Pick<\n LogsMessages,\n 'time' | 'level' | 'module' | 'message' | 'metadata' | 'requestId' | 'sessionId'\n>;\n\ntype Props = {\n log: LogEntry;\n labels: LogDetailLabels;\n};\n\nexport function LogDetailBody({ log, labels }: Props) {\n const lv = log.level ?? 'info';\n const rid = typeof log.requestId === 'string' ? log.requestId : '';\n const sid = typeof log.sessionId === 'string' ? log.sessionId : '';\n return (\n <div className=\"flex flex-col gap-8\">\n <div>\n <span className=\"text-xs font-sans font-medium text-fg-muted\">{labels.message}</span>\n <pre className=\"mt-2 whitespace-pre-wrap break-words border border-edge bg-surface-base p-3 text-xs leading-relaxed text-fg dark:border-edge\">\n {log.message || '—'}\n </pre>\n </div>\n <div className=\"grid grid-cols-[5.5rem_1fr] gap-x-3 gap-y-2 text-xs\">\n <span className=\"font-sans text-fg-muted\">{labels.time}</span>\n <code className=\"break-all text-fg\">{log.timestamp}</code>\n <span className=\"font-sans text-fg-muted\">{labels.level}</span>\n <span className=\"text-fg\">{levelLabel(lv)}</span>\n <span className=\"font-sans text-fg-muted\">{labels.module}</span>\n <code className=\"break-all text-fg\">{moduleLabel(log)}</code>\n {rid ? (\n <>\n <span className=\"font-sans text-fg-muted\">{labels.requestId}</span>\n <code className=\"break-all text-fg\">{rid}</code>\n </>\n ) : null}\n {sid ? (\n <>\n <span className=\"font-sans text-fg-muted\">{labels.sessionId}</span>\n <code className=\"break-all text-fg\">{sid}</code>\n </>\n ) : null}\n </div>\n {log.meta && Object.keys(log.meta).length > 0 ? (\n <div>\n <span className=\"text-xs font-sans font-medium text-fg-muted\">{labels.metadata}</span>\n <pre className=\"mt-2 overflow-x-auto whitespace-pre-wrap break-words border border-edge bg-surface-base p-3 text-xs leading-relaxed text-fg dark:border-edge\">\n {JSON.stringify(log.meta, null, 2)}\n </pre>\n </div>\n ) : null}\n </div>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { ClipboardCopy, X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { LogDetailBody } from '@/features/logs/log-detail-body';\nimport type { LogEntry } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { copyTextToClipboard } from '@/lib/copy-to-clipboard';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n log: LogEntry | null;\n onClose: () => void;\n copiedDetail: 'json' | 'message' | null;\n onCopiedMessage: () => void;\n onCopiedJson: () => void;\n};\n\nexport function LogsDetailDrawer({ L, log, onClose, copiedDetail, onCopiedMessage, onCopiedJson }: Props) {\n return (\n <Dialog.Root open={log !== null} onOpenChange={(open) => !open && onClose()}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-drawer-right fixed right-0 top-0 flex size-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none',\n SETTINGS_SHELL_CONTENT_Z,\n 'dark:border-edge',\n )}\n aria-describedby={undefined}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"text-base font-semibold tracking-tight text-fg\">{L.details}</Dialog.Title>\n <div className=\"flex min-w-0 items-center gap-1\">\n {log ? (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 shrink-0 gap-1 px-2 text-xs\"\n onClick={() => {\n const text = typeof log.message === 'string' ? log.message : '';\n void copyTextToClipboard(text).then((ok) => {\n if (ok) onCopiedMessage();\n });\n }}\n >\n <ClipboardCopy className=\"size-3.5 shrink-0\" strokeWidth={1.75} />\n <span className=\"hidden sm:inline\">{copiedDetail === 'message' ? L.copied : L.copyMessage}</span>\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 shrink-0 gap-1 px-2 text-xs\"\n onClick={() => {\n void copyTextToClipboard(JSON.stringify(log, null, 2)).then((ok) => {\n if (ok) onCopiedJson();\n });\n }}\n >\n <ClipboardCopy className=\"size-3.5 shrink-0\" strokeWidth={1.75} />\n <span className=\"hidden sm:inline\">{copiedDetail === 'json' ? L.copied : L.copyJson}</span>\n </Button>\n </>\n ) : null}\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4 font-mono text-sm leading-relaxed\">\n {log ? (\n <LogDetailBody\n log={log}\n labels={{\n time: L.time,\n level: L.level,\n module: L.module,\n message: L.message,\n metadata: L.metadata,\n requestId: L.requestId,\n sessionId: L.sessionId,\n }}\n />\n ) : null}\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { Folder, X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { LogFile } from '@/features/logs/log.types';\nimport { formatFileSize, formatTimestampFull } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n files: LogFile[];\n logDir: string | null;\n};\n\nexport function LogsFilesDialog({ L, open, onOpenChange, files, logDir }: Props) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 flex max-h-[min(32rem,85vh)] w-[min(100%-2rem,24rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none',\n SETTINGS_SHELL_CONTENT_Z,\n 'dark:border-edge',\n )}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"flex items-center gap-2 text-base font-semibold tracking-tight text-fg\">\n <Folder className=\"size-4 text-fg-muted\" strokeWidth={1.75} />\n {L.logFiles}\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n {files.length === 0 ? (\n <p className=\"text-sm text-fg-muted\">{L.filesEmpty}</p>\n ) : (\n <ul className=\"flex flex-col gap-2\">\n {files.map((f) => (\n <li\n key={f.name}\n className=\"flex flex-col gap-1 rounded-lg border border-edge-subtle bg-surface-base px-3 py-2 dark:border-edge\"\n >\n <span className=\"break-all font-mono text-xs text-fg\">{f.name}</span>\n <span className=\"flex flex-wrap gap-x-2 text-xs text-fg-subtle\">\n <span>{formatFileSize(f.size)}</span>\n <span>{formatTimestampFull(f.modified)}</span>\n </span>\n </li>\n ))}\n </ul>\n )}\n </div>\n {logDir ? (\n <div className=\"shrink-0 border-t border-edge-subtle px-4 py-2 text-xs text-fg-subtle dark:border-edge\">\n <span className=\"font-medium text-fg-muted\">{L.logDir}: </span>\n <code className=\"break-all text-fg-subtle\">{logDir}</code>\n </div>\n ) : null}\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { LOG_LEVELS, type LogLevel } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n dateFrom: string;\n onDateFromChange: (v: string) => void;\n dateTo: string;\n onDateToChange: (v: string) => void;\n selectedLevels: Set<LogLevel>;\n onToggleLevel: (level: LogLevel) => void;\n};\n\nexport function LogsFiltersDialog({\n L,\n open,\n onOpenChange,\n dateFrom,\n onDateFromChange,\n dateTo,\n onDateToChange,\n selectedLevels,\n onToggleLevel,\n}: Props) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 flex max-h-[min(32rem,90vh)] w-[min(100%-2rem,22rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none',\n SETTINGS_SHELL_CONTENT_Z,\n 'dark:border-edge',\n )}\n aria-describedby=\"log-filters-desc\"\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"text-base font-semibold tracking-tight text-fg\">{L.filtersDialogTitle}</Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div id=\"log-filters-desc\" className=\"sr-only\">\n {L.filtersDialogDesc}\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n <p className=\"text-xs font-medium text-fg-muted\">{L.timeRange}</p>\n <div className=\"mt-2 flex flex-col gap-3\">\n <div>\n <label htmlFor=\"log-from-d\" className=\"mb-1 block text-xs text-fg-muted\">\n {L.from}\n </label>\n <input\n id=\"log-from-d\"\n type=\"datetime-local\"\n value={dateFrom}\n onChange={(e) => onDateFromChange(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base p-2 text-sm text-fg dark:border-edge\"\n />\n </div>\n <div>\n <label htmlFor=\"log-to-d\" className=\"mb-1 block text-xs text-fg-muted\">\n {L.to}\n </label>\n <input\n id=\"log-to-d\"\n type=\"datetime-local\"\n value={dateTo}\n onChange={(e) => onDateToChange(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base p-2 text-sm text-fg dark:border-edge\"\n />\n </div>\n </div>\n <p className=\"mt-6 text-xs font-medium text-fg-muted\">{L.levelCustom}</p>\n <p className=\"mt-1 text-xs leading-5 text-fg-subtle\">{L.levelCustomHint}</p>\n <div className=\"mt-3 flex flex-wrap gap-2\" role=\"group\" aria-label={L.level}>\n {LOG_LEVELS.map((level) => {\n const active = selectedLevels.has(level);\n return (\n <button\n key={level}\n type=\"button\"\n className={cn(\n 'rounded-full border px-3 py-1.5 text-xs font-medium capitalize transition-[color,background-color,border-color] duration-150 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n active\n ? 'border-edge bg-surface-active text-fg dark:border-edge'\n : 'border-edge-subtle bg-surface-base text-fg-muted hover:bg-surface-hover dark:border-edge',\n )}\n onClick={() => onToggleLevel(level)}\n >\n {L.levelNames[level]}\n </button>\n );\n })}\n </div>\n </div>\n <div className=\"shrink-0 border-t border-edge-subtle px-4 py-3 dark:border-edge\">\n <Button type=\"button\" className=\"w-full rounded-xl\" onClick={() => onOpenChange(false)}>\n {L.filtersDone}\n </Button>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { ListFilter, Search, X } from 'lucide-react';\n\nimport { SlidingSegmented } from '@/components/ui/sliding-segmented';\nimport { Button } from '@/components/ui/button';\nimport { bareInputFocusClass, selectControlBaseClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport type { LevelSegmentValue } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n levelSegment: LevelSegmentValue;\n onLevelSegment: (v: LevelSegmentValue) => void;\n searchInput: string;\n onSearchInputChange: (v: string) => void;\n moduleFilter: string;\n onModuleFilterChange: (v: string) => void;\n modules: string[];\n onOpenFilters: () => void;\n activeFilterCount: number;\n hasActiveFilters: boolean;\n onClearFilters: () => void;\n autoRefresh: boolean;\n};\n\nexport function LogsFiltersSection({\n L,\n levelSegment,\n onLevelSegment,\n searchInput,\n onSearchInputChange,\n moduleFilter,\n onModuleFilterChange,\n modules,\n onOpenFilters,\n activeFilterCount,\n hasActiveFilters,\n onClearFilters,\n autoRefresh,\n}: Props) {\n return (\n <section className=\"flex flex-col gap-3\" aria-label={L.filters}>\n <div className=\"overflow-x-auto pb-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n <div className=\"min-w-[min(100%,36rem)]\">\n <SlidingSegmented<LevelSegmentValue>\n aria-label={L.levelPresetAria}\n value={levelSegment}\n onChange={onLevelSegment}\n options={[\n { value: 'all', label: L.presetAll },\n { value: 'errors', label: L.presetErrors },\n { value: 'warnPlus', label: L.presetWarnPlus },\n { value: 'infoPlus', label: L.presetInfoPlus },\n { value: 'verbose', label: L.presetVerbose },\n { value: 'other', label: L.presetOther },\n ]}\n buttonClassName=\"h-8 px-1.5 text-[11px] sm:px-2 sm:text-xs\"\n />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2 sm:flex-row sm:flex-wrap sm:items-center\">\n <label className=\"relative min-w-0 flex-1 sm:min-w-[12rem]\">\n <span className=\"sr-only\">{L.searchPlaceholder}</span>\n <Search\n className=\"pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle\"\n strokeWidth={1.75}\n aria-hidden\n />\n <input\n type=\"search\"\n value={searchInput}\n onChange={(e) => onSearchInputChange(e.target.value)}\n placeholder={L.searchPlaceholder}\n autoComplete=\"off\"\n spellCheck={false}\n className={cn(\n 'h-10 w-full rounded-md border border-edge bg-surface-panel py-0 pl-10 pr-3 text-sm leading-5 text-fg placeholder:text-fg-subtle dark:border-edge',\n bareInputFocusClass,\n )}\n />\n </label>\n\n <select\n id=\"log-module\"\n value={moduleFilter}\n onChange={(e) => onModuleFilterChange(e.target.value)}\n aria-label={L.module}\n title={L.module}\n className={cn(\n selectControlBaseClass,\n 'h-10 w-full min-w-0 rounded-md py-0 sm:w-[min(100%,14rem)] sm:shrink-0',\n )}\n >\n <option value=\"\">{L.allModules}</option>\n {modules.map((mod) => (\n <option key={mod} value={mod}>\n {mod}\n </option>\n ))}\n </select>\n\n <div className=\"flex min-w-0 shrink-0 items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"h-10 min-h-[44px] gap-2 rounded-md sm:min-h-10\"\n onClick={onOpenFilters}\n >\n <ListFilter className=\"size-4\" strokeWidth={1.75} />\n {L.filtersMore}\n {activeFilterCount > 0 ? (\n <span className=\"rounded-md bg-surface-hover px-1.5 text-xs tabular-nums text-fg-muted\">\n {activeFilterCount}\n </span>\n ) : null}\n </Button>\n {hasActiveFilters ? (\n <Button type=\"button\" variant=\"ghost\" className=\"h-10 min-h-[44px] gap-1 sm:min-h-10\" onClick={onClearFilters}>\n <X className=\"size-4\" strokeWidth={1.75} />\n {L.clear}\n </Button>\n ) : null}\n </div>\n </div>\n\n {autoRefresh ? <p className=\"text-xs leading-5 text-fg-subtle\">{L.liveHint}</p> : null}\n </section>\n );\n}","import { ChevronDown, FileText, RefreshCw } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport type { LogEntry } from '@/features/logs/log.types';\nimport {\n interpolate,\n levelLabel,\n messagePreview,\n moduleLabel,\n requestIdPreview,\n formatTimeCompact,\n} from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n logs: LogEntry[];\n loading: boolean;\n hasMore: boolean;\n onSelectLog: (log: LogEntry) => void;\n onLoadMore: () => void;\n onRefreshAll: () => void;\n};\n\nexport function LogsListSection({ L, logs, loading, hasMore, onSelectLog, onLoadMore, onRefreshAll }: Props) {\n return (\n <>\n {loading && logs.length === 0 ? (\n <div\n className=\"divide-y divide-edge-subtle overflow-hidden rounded-xl border border-edge bg-surface-panel dark:divide-edge dark:border-edge\"\n aria-busy=\"true\"\n >\n {Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"flex gap-3 px-3 py-2.5\">\n <div className=\"h-4 w-16 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 w-12 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 w-20 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 min-w-0 flex-1 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n </div>\n ))}\n </div>\n ) : null}\n\n {!loading && logs.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center gap-2 rounded-xl border border-edge-subtle bg-surface-base py-16 text-center dark:border-edge\">\n <FileText className=\"size-12 text-fg-subtle\" strokeWidth={1.5} aria-hidden />\n <h2 className=\"text-base font-semibold tracking-tight text-fg\">{L.noLogs}</h2>\n <p className=\"max-w-sm text-sm leading-relaxed text-fg-muted\">{L.noLogsDescription}</p>\n <Button type=\"button\" variant=\"secondary\" className=\"mt-4 gap-2\" onClick={onRefreshAll}>\n <RefreshCw className=\"size-4\" strokeWidth={1.75} />\n {L.refresh}\n </Button>\n </div>\n ) : null}\n\n {logs.length > 0 ? (\n <div className=\"flex flex-col gap-2\">\n <p className=\"text-xs leading-5 text-fg-muted\">\n {interpolate(L.showingCount, { count: String(logs.length) })}\n {hasMore ? <span className=\"text-fg-subtle\"> · {L.moreAvailable}</span> : null}\n </p>\n <ul\n className=\"divide-y divide-edge-subtle overflow-hidden rounded-xl border border-edge bg-surface-panel font-mono text-sm leading-6 dark:divide-edge dark:border-edge\"\n >\n {logs.map((log) => {\n const lv = log.level ?? 'info';\n const rid = typeof log.requestId === 'string' ? log.requestId.trim() : '';\n return (\n <li key={`${log.timestamp}-${log.requestId ?? log.message ?? ''}`}>\n <button\n type=\"button\"\n onClick={() => onSelectLog(log)}\n className={cn(\n 'flex w-full min-w-0 items-center gap-3 px-3 py-2.5 text-left transition-colors duration-150 ease-out',\n 'hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n )}\n >\n <span className=\"w-[5.25rem] shrink-0 tabular-nums text-fg-subtle\">\n {formatTimeCompact(log.timestamp)}\n </span>\n <span className=\"w-[4.5rem] shrink-0 truncate text-fg-muted\" title={lv}>\n {levelLabel(lv)}\n </span>\n <span\n className=\"w-[4.5rem] shrink-0 truncate text-fg-subtle sm:w-[5.25rem]\"\n title={rid ? `${L.requestId}: ${rid}` : undefined}\n >\n {rid ? requestIdPreview(rid) : '—'}\n </span>\n <span\n className=\"hidden max-w-[7rem] shrink-0 truncate text-fg-muted lg:inline\"\n title={moduleLabel(log)}\n >\n {moduleLabel(log)}\n </span>\n <span className=\"min-w-0 flex-1 truncate text-fg\">{messagePreview(log)}</span>\n </button>\n </li>\n );\n })}\n </ul>\n {hasMore ? (\n <div className=\"flex justify-center pt-1\">\n <Button type=\"button\" variant=\"secondary\" className=\"gap-2\" disabled={loading} onClick={onLoadMore}>\n {loading ? (\n <RefreshCw className=\"size-4 animate-spin motion-reduce:animate-none\" strokeWidth={1.75} />\n ) : (\n <ChevronDown className=\"size-4\" strokeWidth={1.75} />\n )}\n {L.loadMore}\n </Button>\n </div>\n ) : null}\n </div>\n ) : null}\n </>\n );\n}\n","import { Terminal } from 'lucide-react';\n\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = { L: LogsMessages };\n\nexport function LogsNoToken({ L }: Props) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10\">\n <div className=\"flex items-start gap-3 rounded-2xl border border-edge-subtle bg-surface-base p-6 dark:border-edge\">\n <Terminal className=\"mt-0.5 size-5 shrink-0 text-fg-subtle\" strokeWidth={1.75} aria-hidden />\n <div>\n <h1 className=\"text-base font-semibold tracking-tight text-fg\">{L.title}</h1>\n <p className=\"mt-1 text-sm leading-relaxed text-fg-muted\">{L.needToken}</p>\n </div>\n </div>\n </div>\n );\n}\n","import { Folder, RefreshCw } from 'lucide-react';\n\nimport { SlidingSegmented } from '@/components/ui/sliding-segmented';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n autoRefresh: boolean;\n onAutoRefreshChange: (live: boolean) => void;\n fileCount: number;\n onOpenFiles: () => void;\n loading: boolean;\n onRefreshAll: () => void;\n};\n\nexport function LogsPageHeader({\n L,\n autoRefresh,\n onAutoRefreshChange,\n fileCount,\n onOpenFiles,\n loading,\n onRefreshAll,\n}: Props) {\n return (\n <header className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"text-xl font-semibold tracking-tight text-fg\">{L.title}</h1>\n <p className=\"mt-0.5 text-sm leading-relaxed text-fg-muted\">{L.subtitle}</p>\n </div>\n <div className=\"flex w-full shrink-0 flex-col gap-2 sm:w-auto sm:max-w-md sm:flex-row sm:items-center sm:justify-end\">\n <div className=\"w-full sm:w-48\">\n <SlidingSegmented\n aria-label={L.refreshModeAria}\n value={autoRefresh ? 'live' : 'paused'}\n onChange={(v) => onAutoRefreshChange(v === 'live')}\n options={[\n { value: 'paused', label: L.refreshManual },\n { value: 'live', label: L.refreshLive },\n ]}\n buttonClassName=\"h-8\"\n />\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 min-h-[44px] min-w-[44px] px-2 sm:min-h-9 sm:min-w-0\"\n title={L.logFiles}\n aria-label={L.logFiles}\n onClick={onOpenFiles}\n >\n <Folder className=\"size-4\" strokeWidth={1.75} />\n {fileCount > 0 ? (\n <span className=\"rounded-full bg-surface-hover px-1.5 text-xs text-fg-muted\">{fileCount}</span>\n ) : null}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 min-h-[44px] min-w-[44px] px-2 sm:min-h-9 sm:min-w-0\"\n title={L.refresh}\n aria-label={L.refresh}\n onClick={onRefreshAll}\n >\n <RefreshCw\n className={cn(\n 'size-4 transition-transform duration-150 ease-out motion-reduce:transition-none',\n loading && 'animate-spin motion-reduce:animate-none',\n )}\n strokeWidth={1.75}\n />\n </Button>\n </div>\n </div>\n </header>\n );\n}\n","import * as Popover from '@radix-ui/react-popover';\n\nimport { formatStatsLine } from '@/features/logs/logs-page-lib';\nimport { LOG_LEVELS, type LogStats } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_POPOVER_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n stats: LogStats;\n};\n\nexport function LogsStatsPopover({ L, stats }: Props) {\n const statsLine = formatStatsLine(stats.byLevel ?? {}, L.levelNames);\n if (!statsLine) return null;\n\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"max-w-full truncate rounded-lg border border-transparent px-1 py-0.5 text-left text-xs leading-5 text-fg-subtle transition-colors duration-150 ease-out hover:border-edge-subtle hover:bg-surface-hover hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel dark:hover:border-edge\"\n >\n <span className=\"font-medium text-fg-muted\">{L.statsRegion}</span>\n <span className=\"mx-1.5 text-fg-subtle\">·</span>\n <span className=\"tabular-nums\">{statsLine}</span>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={6}\n className={cn(\n 'w-[min(calc(100vw-2rem),20rem)] rounded-xl border border-edge bg-surface-panel p-3 shadow-popover outline-none',\n SETTINGS_SHELL_POPOVER_Z,\n 'dark:border-edge',\n )}\n >\n <p className=\"text-xs font-medium text-fg\">{L.statsDetailTitle}</p>\n <p className=\"mt-1 text-xs leading-5 text-fg-muted\">{L.statsHint}</p>\n <ul className=\"mt-3 flex flex-col gap-1.5\">\n {LOG_LEVELS.map((lv) => {\n const n = stats.byLevel?.[lv] ?? 0;\n if (n === 0) return null;\n return (\n <li\n key={lv}\n className=\"flex items-center justify-between gap-2 rounded-md border border-edge-subtle bg-surface-base px-2 py-1 text-xs dark:border-edge\"\n >\n <span className=\"font-medium capitalize text-fg\">{L.levelNames[lv]}</span>\n <span className=\"tabular-nums text-fg-muted\">{n}</span>\n </li>\n );\n })}\n </ul>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n );\n}\n","import { useLogsPage } from '@/features/logs/hooks/use-logs-page';\nimport { LogsDetailDrawer } from '@/features/logs/logs-detail-drawer';\nimport { LogsFilesDialog } from '@/features/logs/logs-files-dialog';\nimport { LogsFiltersDialog } from '@/features/logs/logs-filters-dialog';\nimport { LogsFiltersSection } from '@/features/logs/logs-filters-section';\nimport { LogsListSection } from '@/features/logs/logs-list-section';\nimport { LogsNoToken } from '@/features/logs/logs-no-token';\nimport { LogsPageHeader } from '@/features/logs/logs-page-header';\nimport { LogsStatsPopover } from '@/features/logs/logs-stats-popover';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nexport function LogsPage() {\n const language = useLocaleStore((s) => s.language);\n const {\n L,\n hasToken,\n logs,\n loading,\n error,\n hasMore,\n searchInput,\n setSearchInput,\n selectedLevels,\n moduleFilter,\n setModuleFilter,\n dateFrom,\n setDateFrom,\n dateTo,\n setDateTo,\n modules,\n files,\n stats,\n selectedLog,\n setSelectedLog,\n filesOpen,\n setFilesOpen,\n filtersOpen,\n setFiltersOpen,\n logDir,\n autoRefresh,\n setAutoRefresh,\n copiedDetail,\n setCopiedDetail,\n hasActiveFilters,\n activeFilterCount,\n clearFilters,\n toggleDialogLevel,\n handleLoadMore,\n refreshAll,\n levelSegment,\n handleLevelSegment,\n } = useLogsPage(language);\n\n if (!hasToken) {\n return <LogsNoToken L={L} />;\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <LogsPageHeader\n L={L}\n autoRefresh={autoRefresh}\n onAutoRefreshChange={setAutoRefresh}\n fileCount={files.length}\n onOpenFiles={() => setFilesOpen(true)}\n loading={loading}\n onRefreshAll={refreshAll}\n />\n\n {error ? (\n <div\n className=\"rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg dark:border-edge\"\n role=\"alert\"\n >\n {error}\n </div>\n ) : null}\n\n {stats ? <LogsStatsPopover L={L} stats={stats} /> : null}\n\n <LogsFiltersSection\n L={L}\n levelSegment={levelSegment}\n onLevelSegment={handleLevelSegment}\n searchInput={searchInput}\n onSearchInputChange={setSearchInput}\n moduleFilter={moduleFilter}\n onModuleFilterChange={setModuleFilter}\n modules={modules}\n onOpenFilters={() => setFiltersOpen(true)}\n activeFilterCount={activeFilterCount}\n hasActiveFilters={hasActiveFilters}\n onClearFilters={clearFilters}\n autoRefresh={autoRefresh}\n />\n\n <LogsListSection\n L={L}\n logs={logs}\n loading={loading}\n hasMore={hasMore}\n onSelectLog={setSelectedLog}\n onLoadMore={handleLoadMore}\n onRefreshAll={refreshAll}\n />\n\n <LogsFiltersDialog\n L={L}\n open={filtersOpen}\n onOpenChange={setFiltersOpen}\n dateFrom={dateFrom}\n onDateFromChange={setDateFrom}\n dateTo={dateTo}\n onDateToChange={setDateTo}\n selectedLevels={selectedLevels}\n onToggleLevel={toggleDialogLevel}\n />\n\n <LogsDetailDrawer\n L={L}\n log={selectedLog}\n onClose={() => setSelectedLog(null)}\n copiedDetail={copiedDetail}\n onCopiedMessage={() => setCopiedDetail('message')}\n onCopiedJson={() => setCopiedDetail('json')}\n />\n\n <LogsFilesDialog L={L} open={filesOpen} onOpenChange={setFilesOpen} files={files} logDir={logDir} />\n </div>\n );\n}\n"],"mappings":"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"}
|