-
{worker.label || worker.account_id}
-
pid {worker.pid}
+
{worker.label || worker.account_id}
+
pid {worker.pid}
-
+
{formatBytes(worker.rss_bytes)} · {worker.cpu_percent.toFixed(1)}%
@@ -494,7 +494,7 @@ function ResourcesCard({ resources, t }: { resources: SystemResources | null; t:
>
)}
+
{server?.goroutines ?? 0} {t('resGoroutines')}
@@ -542,7 +542,7 @@ function RankList({
}, [signature])
if (!items.length) {
- return {empty}
+ return {empty}
}
return (
@@ -551,9 +551,9 @@ function RankList({
{item.mark ?
: null}
-
{item.label}
+
{item.label}
-
+
{item.meta ? `${item.count} · ${item.meta}` : item.count}
diff --git a/frontend/src/pages/ProvidersPage.tsx b/frontend/src/pages/ProvidersPage.tsx
index 58293625..bb3ddcf8 100644
--- a/frontend/src/pages/ProvidersPage.tsx
+++ b/frontend/src/pages/ProvidersPage.tsx
@@ -73,7 +73,7 @@ function HintLabel({ label, hint }: { label: string; hint: string }) {
return (
- {label}
+ {label}
{hint}
@@ -135,7 +135,7 @@ function ModelContextControls({
) : (model.reasoning_options || []).length === 1 ? (
) : model.reasoning_type ? (
- {t('reasoningFixed', { type: model.reasoning_type })}
+ {t('reasoningFixed', { type: model.reasoning_type })}
) : provider === 'trae' && !model.supports_max_mode ? (
) : null}
@@ -325,10 +325,10 @@ export function ProvidersPage() {
return (
-
+
-
{t('availableModels')}
-
+
{t('availableModels')}
+
{models.length ? shownLabel : t('noModelsYet')}
@@ -362,7 +362,7 @@ export function ProvidersPage() {
-
{t('providerCatalog')}
+
{t('providerCatalog')}
{t('contextConfigHint')}
@@ -397,10 +397,10 @@ export function ProvidersPage() {
{model.display_name || model.id}
{free ?
{t('modelFree')} : null}
- {credits ?
{credits} : null}
+ {credits ?
{credits} : null}
- {model.id}
- {routedModelName(model) ? {t('routedTo', { model: routedModelName(model) })}
: null}
+ {model.id}
+ {routedModelName(model) ? {t('routedTo', { model: routedModelName(model) })}
: null}
@@ -460,9 +460,9 @@ export function ProvidersPage() {
{model.display_name || model.id}
{free ?
{t('modelFree')} : null}
- {credits ?
{credits} : null}
+ {credits ?
{credits} : null}
- {routedModelName(model) ? {t('routedTo', { model: routedModelName(model) })}
: null}
+ {routedModelName(model) ? {t('routedTo', { model: routedModelName(model) })}
: null}
diff --git a/frontend/src/pages/SystemPage.tsx b/frontend/src/pages/SystemPage.tsx
index 4df7de85..801568c3 100644
--- a/frontend/src/pages/SystemPage.tsx
+++ b/frontend/src/pages/SystemPage.tsx
@@ -1,19 +1,22 @@
import { copyText } from '@/lib/clipboard'
-import { useCallback, useEffect, useMemo, useState } from 'react'
-import { Button, Card, Chip, Description, Input, Label, ListBox, Modal, Select } from '@heroui/react'
+import { useEffect, useMemo, useState } from 'react'
+import { Button, Card, Chip, Description, Input, Label, ListBox, Modal, Select, Tab, Tabs } from '@heroui/react'
+import { useSearchParams } from 'react-router-dom'
import {
ArrowClockwise,
ArrowCircleUp,
+ ArrowsSplit,
CheckCircle,
Copy,
Database,
+ GearSix,
Key,
ShieldCheck,
SlidersHorizontal,
X,
} from '@phosphor-icons/react'
import { fetchConsoleKey, rotateConsoleKey, type ConsoleKeyView } from '@/api/keys'
-import { applyPreparedSystemUpdate, cancelSystemUpdate, fetchSystemSettings, fetchSystemUpdate, rollbackSystemUpdate, startSystemUpdate, updateSystemSettings, type StartUpdateResult, type SystemSettings, type SystemUpdateInfo } from '@/api/system'
+import { fetchSystemSettings, updateSystemSettings, type SystemSettings } from '@/api/system'
import { useApiKey } from '@/hooks/useApiKey'
import { PageAlert } from '@/components/ui/PageAlert'
import { ConfirmDialog } from '@/components/ui/ConfirmDialog'
@@ -22,18 +25,22 @@ import { SystemPageSkeleton } from '@/components/ui/PageSkeletons'
import { useI18n } from '@/hooks/useI18n'
import { CompactSwitch } from '@/components/ui/CompactSwitch'
import { CheckinDefaults } from '@/components/checkin/CheckinDefaults'
+import { UpdateControls } from '@/components/system/UpdateControls'
+import { useSystemUpdate } from '@/hooks/useSystemUpdate'
import { VersionHistory } from '@/components/VersionHistory'
import { buildVersionHistory } from '@/lib/versionHistory'
-const busyStates = new Set(['preparing', 'preparing_image', 'checking', 'backing_up', 'submitting', 'running', 'queued', 'pulling', 'host_binary', 'image_ready', 'recreating', 'rolling_back'])
-const applyJobStates = new Set(['backing_up', 'running'])
-const applyAgentStates = new Set(['recreating', 'rolling_back'])
-const progressAgentStates = new Set(['queued', 'pulling', 'host_binary', 'image_ready', 'preparing', 'recreating', 'checking', 'rolling_back'])
+
+type SettingsTab = 'general' | 'routing' | 'security' | 'updates'
+const SETTINGS_TABS: readonly SettingsTab[] = ['general', 'routing', 'security', 'updates']
export function SystemPage() {
const { t } = useI18n()
+ const [searchParams, setSearchParams] = useSearchParams()
+ const tabParam = searchParams.get('tab') as SettingsTab | null
+ const tab: SettingsTab = tabParam && SETTINGS_TABS.includes(tabParam) ? tabParam : 'general'
+ const selectTab = (next: SettingsTab) => setSearchParams(next === 'general' ? {} : { tab: next }, { replace: true })
const { setApiKey } = useApiKey()
- const [info, setInfo] = useState
(null)
const [consoleKey, setConsoleKey] = useState(null)
const [settings, setSettings] = useState(null)
const [proxyDraft, setProxyDraft] = useState('')
@@ -42,39 +49,18 @@ export function SystemPage() {
const [rotateOpen, setRotateOpen] = useState(false)
const [rotatedSecret, setRotatedSecret] = useState('')
const [copied, setCopied] = useState(false)
- const [loading, setLoading] = useState(true)
- const [checking, setChecking] = useState(false)
- const [submitting, setSubmitting] = useState(false)
- const [error, setError] = useState('')
- const [started, setStarted] = useState(null)
- const [reloadIn, setReloadIn] = useState(null)
- const [now, setNow] = useState(() => Date.now())
- const [initialVersion, setInitialVersion] = useState('')
const [restoreTarget, setRestoreTarget] = useState('')
+ const update = useSystemUpdate()
+ const { info, loading, checking, submitting, error, setError, load, canRollback, rollbackTo } = update
+ const historyReleases = useMemo(
+ () => buildVersionHistory(info?.current_version || '', info?.next_version, info?.release, info?.recent_releases, info?.rollback_versions),
+ [info?.current_version, info?.next_version, info?.release, info?.recent_releases, info?.rollback_versions],
+ )
+ const rollbackTags = useMemo(() => (info?.rollback_versions || []).map((release) => release.tag_name), [info?.rollback_versions])
- const load = useCallback(async (force = false, quiet = false) => {
- if (force && !quiet) setChecking(true)
- try {
- const result = await fetchSystemUpdate(force)
- setInfo(result)
- setInitialVersion((current) => current || result.current_version || '')
- const failed = result.update?.state === 'failed' || result.update?.state === 'rolled_back' || result.agent?.state === 'failed' || result.agent?.state === 'rolled_back'
- if (failed) {
- setError(result.update?.error || result.agent?.error || t('updateFailedHint'))
- } else if (!quiet) {
- setError('')
- }
- } catch (err) {
- if (!quiet) setError(err instanceof Error ? err.message : t('updateCheckFailedHint'))
- } finally {
- setLoading(false)
- if (force && !quiet) setChecking(false)
- }
- }, [t])
useEffect(() => {
const timer = window.setTimeout(() => {
- void load(false)
void fetchConsoleKey().then(setConsoleKey).catch(() => undefined)
void fetchSystemSettings().then((result) => {
setSettings(result)
@@ -82,140 +68,8 @@ export function SystemPage() {
}).catch((err) => setError(err instanceof Error ? err.message : String(err)))
}, 0)
return () => window.clearTimeout(timer)
- }, [load])
-
- const agentState = info?.agent?.state || 'unavailable'
- const preparationState = info?.update?.state || ''
- const applying = applyJobStates.has(preparationState) || applyAgentStates.has(agentState) || Boolean(info?.update?.backup_path && busyStates.has(preparationState))
- const readyToApply = !applying && (preparationState === 'ready_to_apply' || agentState === 'ready_to_apply')
- const waitingForJob = Boolean(started?.job_id) && info?.update?.job_id !== started?.job_id && !readyToApply && !applying
- const preparing = !applying && !readyToApply && (busyStates.has(preparationState) || busyStates.has(agentState) || waitingForJob)
- const busy = preparing || applying
- const succeeded = preparationState === 'succeeded' || agentState === 'succeeded'
- const justUpdated = Boolean(succeeded && initialVersion && info?.current_version && info.current_version !== initialVersion)
- if (justUpdated && reloadIn == null) setReloadIn(3)
- const targetVersion = info?.update?.target_version || info?.agent?.target_version || ''
- const newerThanPrepared = Boolean(readyToApply && info?.next_version && targetVersion && info.next_version !== targetVersion)
- const startedAt = info?.update?.started_at || info?.agent?.started_at
- const elapsed = startedAt && busy ? Math.max(0, Math.round((now - Date.parse(startedAt)) / 1000)) : 0
- const visibleState = justUpdated
- ? 'succeeded'
- : readyToApply
- ? 'ready_to_apply'
- : busy && progressAgentStates.has(agentState)
- ? agentState
- : (preparationState || agentState)
- const updateStateLabel = visibleState ? t(`updateState_${visibleState}`) : ''
- const updateStateText = updateStateLabel.startsWith('updateState_') ? visibleState : updateStateLabel
- useEffect(() => {
- if (reloadIn != null || (!busy && !justUpdated)) return
- const timer = window.setInterval(() => void load(false, true), 2000)
- return () => window.clearInterval(timer)
- }, [busy, justUpdated, load, reloadIn])
-
- useEffect(() => {
- if (!busy) return
- const timer = window.setInterval(() => setNow(Date.now()), 1000)
- return () => window.clearInterval(timer)
- }, [busy])
-
- useEffect(() => {
- if (reloadIn == null) return
- if (reloadIn <= 0) {
- window.location.reload()
- return
- }
- const timer = window.setTimeout(() => setReloadIn((current) => (current == null ? current : current - 1)), 1000)
- return () => window.clearTimeout(timer)
- }, [reloadIn])
-
- const canPrepare = Boolean(info?.managed && info?.has_update && info?.next_version && info?.agent?.available && !readyToApply && !busy && !submitting && reloadIn == null)
- const canApply = Boolean(readyToApply && info?.agent?.available && !applying && !submitting && reloadIn == null)
- const canCancel = Boolean(info?.agent?.available && (preparing || readyToApply) && !applying && !submitting && reloadIn == null)
- const canRollback = Boolean(info?.managed && info?.agent?.available && (info.rollback_versions?.length ?? 0) > 0 && !readyToApply && !busy && !submitting && reloadIn == null)
- const historyReleases = useMemo(
- () => buildVersionHistory(info?.current_version || '', info?.next_version, info?.release, info?.recent_releases, info?.rollback_versions),
- [info?.current_version, info?.next_version, info?.release, info?.recent_releases, info?.rollback_versions],
- )
- const rollbackTags = useMemo(() => (info?.rollback_versions || []).map((release) => release.tag_name), [info?.rollback_versions])
- const primaryLabel = reloadIn != null
- ? t('updateReloadingIn', { seconds: reloadIn })
- : canApply
- ? t('applyUpdateNow')
- : applying
- ? t('updateInProgress')
- : preparing || submitting
- ? t('updatePreparingImage')
- : t('updateNow')
- const statusHint = reloadIn != null
- ? t('updateReloadingHint')
- : readyToApply
- ? t('updateReadyTargetHint', { version: targetVersion || info?.next_version || '' })
- : applying
- ? t('updateApplyingHint')
- : t('updatePreparingImageHint')
-
- async function prepareUpdate() {
- setSubmitting(true)
- setStarted(null)
- setError('')
- try {
- const result = await startSystemUpdate()
- setStarted(result)
- await load(false, true)
- } catch (err) {
- setError(err instanceof Error ? err.message : t('updateFailedHint'))
- await load(false, true)
- } finally {
- setSubmitting(false)
- }
- }
-
- async function confirmUpdate() {
- setSubmitting(true)
- setError('')
- try {
- const result = await applyPreparedSystemUpdate()
- setStarted(result)
- await load(false, true)
- } catch (err) {
- setError(err instanceof Error ? err.message : t('updateFailedHint'))
- await load(false, true)
- } finally {
- setSubmitting(false)
- }
- }
-
- async function rollbackTo(version: string) {
- setSubmitting(true)
- setStarted(null)
- setError('')
- try {
- const result = await rollbackSystemUpdate(version)
- setStarted(result)
- await load(false, true)
- } catch (err) {
- setError(err instanceof Error ? err.message : t('updateFailedHint'))
- await load(false, true)
- } finally {
- setSubmitting(false)
- }
- }
+ }, [setError])
- async function cancelPreparedUpdate() {
- setSubmitting(true)
- setError('')
- try {
- await cancelSystemUpdate()
- setStarted(null)
- await load(true, true)
- } catch (err) {
- setError(err instanceof Error ? err.message : t('updateFailedHint'))
- await load(false, true)
- } finally {
- setSubmitting(false)
- }
- }
async function updateCrossProviderModelPool(enabled: boolean) {
const previous = settings?.cross_provider_model_pool ?? true
@@ -292,10 +146,10 @@ export function SystemPage() {
return (
-
+
-
{t('systemSettingsTitle')}
-
{t('systemSettingsLead')}
+
{t('systemSettingsTitle')}
+
{t('systemSettingsLead')}
void load(true)}>
{t('checkUpdates')}
@@ -304,89 +158,29 @@ export function SystemPage() {
{error ? : null}
-
-
-
-
-
{t('versionUpdate')}
-
{t('latestVersionHint')}
-
-
- {info?.has_update ? t('updateAvailable') : t('upToDate')}
-
-
-
-
-
-
-
{t('currentVersion')}
-
{info?.current_version || '—'}
-
-
-
-
{t('latestVersion')}
-
{info?.next_version || '—'}
-
-
-
-
- {canCancel ? (
-
void cancelPreparedUpdate()}>
- {readyToApply ? t('discardPreparedImage') : t('cancelUpdate')}
-
- ) : null}
-
void (canApply ? confirmUpdate() : prepareUpdate())}>
-
- {primaryLabel}
-
-
- {!info?.agent?.available && !busy ?
{t('updateUnavailableHint')}
: null}
- {info?.agent?.available && !info.agent.staged_update && !busy ?
{t('updateLegacyOneShotHint')}
: null}
- {readyToApply || busy || reloadIn != null || justUpdated ? (
-
- {updateStateText ?
{updateStateText}{targetVersion ? ` · ${targetVersion}` : ''}{elapsed ? ` · ${t('updateElapsed', { seconds: elapsed })}` : ''}
: null}
-
{statusHint}
- {newerThanPrepared ?
{t('updateNewerReleaseHint', { latest: info?.next_version || '' })}
: null}
- {info?.update?.error || info?.agent?.error ?
{info?.update?.error || info?.agent?.error}
: null}
-
- ) : null}
-
-
-
-
-
-
-
-
-
-
-
{t('crossProviderModelPoolTitle')}
-
{t('crossProviderModelPoolHint')}
-
-
-
void updateCrossProviderModelPool(selected)}
- />
-
-
- {t('crossProviderModelPoolStatus')}
- {settings?.cross_provider_model_pool ? t('enabled') : t('disabled')}
-
-
-
+
selectTab(String(key) as SettingsTab)}>
+
+
+
+
+ {t('settingsTabGeneral')}
+
+
+
+ {t('settingsTabRouting')}
+
+
+
+ {t('settingsTabSecurity')}
+
+
+
+ {t('settingsTabUpdates')}
+
+
+
+
+
@@ -396,7 +190,7 @@ export function SystemPage() {
- {t('proxyUrl')}
+ {t('proxyUrl')}
setProxyDraft(event.target.value)}
@@ -407,9 +201,6 @@ export function SystemPage() {
{t('proxyUrlHint')}
-
-
-
@@ -426,12 +217,16 @@ export function SystemPage() {
onChange={(selected) => void updateCheckinDisabledAccounts(selected)}
/>
-
+
{t('checkinDisabledAccountsStatus')}
{settings?.checkin_disabled_accounts ? t('enabled') : t('disabled')}
-
+
+
+
+
+
@@ -440,7 +235,7 @@ export function SystemPage() {
{t('routingStrategyHint')}
-
+
-
-
{settings?.session_affinity?.ttl_seconds ? `${Math.round(settings.session_affinity.ttl_seconds / 60)}m` : '—'} {t('sessionAffinityTTL')}
-
{settings?.session_affinity?.hits ?? 0} {t('sessionAffinityHits')}
-
{settings?.session_affinity?.misses ?? 0} {t('sessionAffinityMisses')}
-
{settings?.session_affinity?.escapes ?? 0} {t('sessionAffinityEscapes')}
+
+
{settings?.session_affinity?.ttl_seconds ? `${Math.round(settings.session_affinity.ttl_seconds / 60)}m` : '—'} {t('sessionAffinityTTL')}
+
{settings?.session_affinity?.hits ?? 0} {t('sessionAffinityHits')}
+
{settings?.session_affinity?.misses ?? 0} {t('sessionAffinityMisses')}
+
{settings?.session_affinity?.escapes ?? 0} {t('sessionAffinityEscapes')}
{settings?.session_affinity?.last_escape_reason ?
{t('lastSessionEscape')}: {settings.session_affinity.last_escape_reason} : null}
{settings?.session_affinity?.last_miss_reason ?
{t('lastSessionMiss')}: {settings.session_affinity.last_miss_reason} : null}
-
-
+
-
{t('sqliteProtection')}
-
{t('sqliteProtectionHint')}
+
{t('crossProviderModelPoolTitle')}
+
{t('crossProviderModelPoolHint')}
-
+
void updateCrossProviderModelPool(selected)}
+ />
- /data
-
-
{t('sqliteBackupBeforeUpdate')}
-
{t('sqliteKeepFive')}
-
{t('sqliteRollbackTogether')}
+
+ {t('crossProviderModelPoolStatus')}
+ {settings?.cross_provider_model_pool ? t('enabled') : t('disabled')}
-
+
+
+
+
@@ -510,9 +310,55 @@ export function SystemPage() {
setRotateOpen(true)}>{t('consoleKeyRotate')}
+
+
+
+
+
+
{t('sqliteProtection')}
+
{t('sqliteProtectionHint')}
+
+
+
+
+ /data
+
+
{t('sqliteBackupBeforeUpdate')}
+
{t('sqliteKeepFive')}
+
{t('sqliteRollbackTogether')}
+
+
+
+
+
+
+
+
+
+
{t('versionUpdate')}
+
{t('latestVersionHint')}
+
+
+ {info?.has_update ? t('updateAvailable') : t('upToDate')}
+
+
-
-
+
+
+
+
+
+
+
+
-
{t('consoleKeyRotate')}
+
{t('consoleKeyRotate')}
{t('consoleKeyRotateHint')}
@@ -568,13 +414,13 @@ export function SystemPage() {
-
{t('consoleKeySecretTitle')}
-
{t('consoleKeySecretHint')}
+
{t('consoleKeySecretTitle')}
+
{t('consoleKeySecretHint')}
- {rotatedSecret}
+ {rotatedSecret}
setRotatedSecret('')}>{t('close')}
diff --git a/internal/webui/static/assets/TrafficChart-Coc8DRxt.js b/internal/webui/static/assets/TrafficChart-Bmt4ahMy.js
similarity index 98%
rename from internal/webui/static/assets/TrafficChart-Coc8DRxt.js
rename to internal/webui/static/assets/TrafficChart-Bmt4ahMy.js
index ab0cbbc1..90cc62de 100644
--- a/internal/webui/static/assets/TrafficChart-Coc8DRxt.js
+++ b/internal/webui/static/assets/TrafficChart-Bmt4ahMy.js
@@ -1,4 +1,4 @@
-import{a as e,c as t,d as n,i as r,l as i,n as a,o,r as s,s as c,t as l,u}from"./index-Cw2HWBTj.js";var d=`dangerouslySetInnerHTML.onCopy.onCopyCapture.onCut.onCutCapture.onPaste.onPasteCapture.onCompositionEnd.onCompositionEndCapture.onCompositionStart.onCompositionStartCapture.onCompositionUpdate.onCompositionUpdateCapture.onFocus.onFocusCapture.onBlur.onBlurCapture.onChange.onChangeCapture.onBeforeInput.onBeforeInputCapture.onInput.onInputCapture.onReset.onResetCapture.onSubmit.onSubmitCapture.onInvalid.onInvalidCapture.onLoad.onLoadCapture.onError.onErrorCapture.onKeyDown.onKeyDownCapture.onKeyPress.onKeyPressCapture.onKeyUp.onKeyUpCapture.onAbort.onAbortCapture.onCanPlay.onCanPlayCapture.onCanPlayThrough.onCanPlayThroughCapture.onDurationChange.onDurationChangeCapture.onEmptied.onEmptiedCapture.onEncrypted.onEncryptedCapture.onEnded.onEndedCapture.onLoadedData.onLoadedDataCapture.onLoadedMetadata.onLoadedMetadataCapture.onLoadStart.onLoadStartCapture.onPause.onPauseCapture.onPlay.onPlayCapture.onPlaying.onPlayingCapture.onProgress.onProgressCapture.onRateChange.onRateChangeCapture.onSeeked.onSeekedCapture.onSeeking.onSeekingCapture.onStalled.onStalledCapture.onSuspend.onSuspendCapture.onTimeUpdate.onTimeUpdateCapture.onVolumeChange.onVolumeChangeCapture.onWaiting.onWaitingCapture.onAuxClick.onAuxClickCapture.onClick.onClickCapture.onContextMenu.onContextMenuCapture.onDoubleClick.onDoubleClickCapture.onDrag.onDragCapture.onDragEnd.onDragEndCapture.onDragEnter.onDragEnterCapture.onDragExit.onDragExitCapture.onDragLeave.onDragLeaveCapture.onDragOver.onDragOverCapture.onDragStart.onDragStartCapture.onDrop.onDropCapture.onMouseDown.onMouseDownCapture.onMouseEnter.onMouseLeave.onMouseMove.onMouseMoveCapture.onMouseOut.onMouseOutCapture.onMouseOver.onMouseOverCapture.onMouseUp.onMouseUpCapture.onSelect.onSelectCapture.onTouchCancel.onTouchCancelCapture.onTouchEnd.onTouchEndCapture.onTouchMove.onTouchMoveCapture.onTouchStart.onTouchStartCapture.onPointerDown.onPointerDownCapture.onPointerMove.onPointerMoveCapture.onPointerUp.onPointerUpCapture.onPointerCancel.onPointerCancelCapture.onPointerEnter.onPointerEnterCapture.onPointerLeave.onPointerLeaveCapture.onPointerOver.onPointerOverCapture.onPointerOut.onPointerOutCapture.onGotPointerCapture.onGotPointerCaptureCapture.onLostPointerCapture.onLostPointerCaptureCapture.onScroll.onScrollCapture.onWheel.onWheelCapture.onAnimationStart.onAnimationStartCapture.onAnimationEnd.onAnimationEndCapture.onAnimationIteration.onAnimationIterationCapture.onTransitionEnd.onTransitionEndCapture`.split(`.`);function f(e){return typeof e==`string`&&d.includes(e)}var p=n(t()),m=new Set(`aria-activedescendant.aria-atomic.aria-autocomplete.aria-busy.aria-checked.aria-colcount.aria-colindex.aria-colspan.aria-controls.aria-current.aria-describedby.aria-details.aria-disabled.aria-errormessage.aria-expanded.aria-flowto.aria-haspopup.aria-hidden.aria-invalid.aria-keyshortcuts.aria-label.aria-labelledby.aria-level.aria-live.aria-modal.aria-multiline.aria-multiselectable.aria-orientation.aria-owns.aria-placeholder.aria-posinset.aria-pressed.aria-readonly.aria-relevant.aria-required.aria-roledescription.aria-rowcount.aria-rowindex.aria-rowspan.aria-selected.aria-setsize.aria-sort.aria-valuemax.aria-valuemin.aria-valuenow.aria-valuetext.className.color.height.id.lang.max.media.method.min.name.style.target.width.role.tabIndex.accentHeight.accumulate.additive.alignmentBaseline.allowReorder.alphabetic.amplitude.arabicForm.ascent.attributeName.attributeType.autoReverse.azimuth.baseFrequency.baselineShift.baseProfile.bbox.begin.bias.by.calcMode.capHeight.clip.clipPath.clipPathUnits.clipRule.colorInterpolation.colorInterpolationFilters.colorProfile.colorRendering.contentScriptType.contentStyleType.cursor.cx.cy.d.decelerate.descent.diffuseConstant.direction.display.divisor.dominantBaseline.dur.dx.dy.edgeMode.elevation.enableBackground.end.exponent.externalResourcesRequired.fill.fillOpacity.fillRule.filter.filterRes.filterUnits.floodColor.floodOpacity.focusable.fontFamily.fontSize.fontSizeAdjust.fontStretch.fontStyle.fontVariant.fontWeight.format.from.fx.fy.g1.g2.glyphName.glyphOrientationHorizontal.glyphOrientationVertical.glyphRef.gradientTransform.gradientUnits.hanging.horizAdvX.horizOriginX.href.ideographic.imageRendering.in2.in.intercept.k1.k2.k3.k4.k.kernelMatrix.kernelUnitLength.kerning.keyPoints.keySplines.keyTimes.lengthAdjust.letterSpacing.lightingColor.limitingConeAngle.local.markerEnd.markerHeight.markerMid.markerStart.markerUnits.markerWidth.mask.maskContentUnits.maskUnits.mathematical.mode.numOctaves.offset.opacity.operator.order.orient.orientation.origin.overflow.overlinePosition.overlineThickness.paintOrder.panose1.pathLength.patternContentUnits.patternTransform.patternUnits.pointerEvents.pointsAtX.pointsAtY.pointsAtZ.preserveAlpha.preserveAspectRatio.primitiveUnits.r.radius.refX.refY.renderingIntent.repeatCount.repeatDur.requiredExtensions.requiredFeatures.restart.result.rotate.rx.ry.seed.shapeRendering.slope.spacing.specularConstant.specularExponent.speed.spreadMethod.startOffset.stdDeviation.stemh.stemv.stitchTiles.stopColor.stopOpacity.strikethroughPosition.strikethroughThickness.string.stroke.strokeDasharray.strokeDashoffset.strokeLinecap.strokeLinejoin.strokeMiterlimit.strokeOpacity.strokeWidth.surfaceScale.systemLanguage.tableValues.targetX.targetY.textAnchor.textDecoration.textLength.textRendering.to.transform.u1.u2.underlinePosition.underlineThickness.unicode.unicodeBidi.unicodeRange.unitsPerEm.vAlphabetic.values.vectorEffect.version.vertAdvY.vertOriginX.vertOriginY.vHanging.vIdeographic.viewTarget.visibility.vMathematical.widths.wordSpacing.writingMode.x1.x2.x.xChannelSelector.xHeight.xlinkActuate.xlinkArcrole.xlinkHref.xlinkRole.xlinkShow.xlinkTitle.xlinkType.xmlBase.xmlLang.xmlns.xmlnsXlink.xmlSpace.y1.y2.y.yChannelSelector.z.zoomAndPan.ref.key.angle`.split(`.`));function h(e){return typeof e==`string`&&m.has(e)}function g(e){return typeof e==`string`&&e.startsWith(`data-`)}function _(e){if(typeof e!=`object`||!e)return{};var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(h(n)||g(n))&&(t[n]=e[n]);return t}function v(e){if(e==null)return null;if((0,p.isValidElement)(e)&&typeof e.props==`object`&&e.props!==null){var t=e.props;return _(t)}return typeof e==`object`&&!Array.isArray(e)?_(e):null}function y(e){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(h(n)||g(n)||f(n))&&(t[n]=e[n]);return t}function b(e){return e==null?null:(0,p.isValidElement)(e)?y(e.props):typeof e==`object`&&!Array.isArray(e)?y(e):null}var x=[`children`,`width`,`height`,`viewBox`,`className`,`style`,`title`,`desc`];function S(){return S=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var n=e.children,r=e.width,i=e.height,a=e.viewBox,s=e.className,c=e.style,l=e.title,u=e.desc,d=C(e,x),f=a||{width:r,height:i,x:0,y:0},m=o(`recharts-surface`,s);return p.createElement(`svg`,S({},y(d),{className:m,width:r,height:i,style:c,viewBox:`${f.x} ${f.y} ${f.width} ${f.height}`,ref:t}),p.createElement(`title`,null,l),p.createElement(`desc`,null,u),n)}),E=[`children`,`className`];function D(){return D=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var n=e.children,r=e.className,i=O(e,E),a=o(`recharts-layer`,r);return p.createElement(`g`,D({className:a},y(i),{ref:t}),n)});function j(e){return e===`__proto__`}var M=/\.|(\[(?:[^[\]]*|(["'])(?:(?!\2)[^\\]|\\.)*?\2)\])/;function N(e){switch(typeof e){case`number`:case`symbol`:return!1;case`string`:return e===``||e.startsWith(`.`)||e.endsWith(`.`)?!1:M.test(e);default:return!1}}function ee(e){return typeof e==`string`||typeof e==`symbol`?e:Object.is(e?.valueOf?.(),-0)?`-0`:String(e)}function te(e){return typeof e==`symbol`||e instanceof Symbol}function ne(e){return e==null?``:re(e)}function re(e){if(typeof e==`string`)return e;if(Array.isArray(e))return e.map(re).join(`,`);if(te(e))return e.toString();let t=e+``;return t===`0`&&Object.is(Number(e),-0)?`-0`:t}function ie(e){if(Array.isArray(e))return e.map(ee);if(typeof e==`symbol`)return[e];e=ne(e);let t=[],n=e.length;if(n===0)return t;let r=0,i=``,a=``,o=!1,s=!1,c=/^-?\d+(?:\.\d+)?$/;for(e.charCodeAt(0)===46&&t.push(``);r1&&arguments[1]!==void 0?arguments[1]:se),n=Math.round(e*t)/t;return Object.is(n,-0)?0:n}function P(e){var t=[...arguments].slice(1);return e.reduce((e,n,r)=>{var i=t[r-1];return typeof i==`string`?e+i+n:i===void 0?e+n:e+ce(i)+n},``)}var le=e=>e===0?0:e>0?1:-1,ue=e=>typeof e==`number`&&e!=+e,de=e=>typeof e==`string`&&e.length>1&&e.indexOf(`%`)===e.length-1,F=e=>(typeof e==`number`||e instanceof Number)&&!ue(e),fe=e=>F(e)||typeof e==`string`,pe=0,me=e=>{var t=++pe;return`${e||``}${t}`},he=function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(!F(e)&&typeof e!=`string`)return n;var i;if(de(e)){if(t==null)return n;var a=e.indexOf(`%`);i=t*parseFloat(e.slice(0,a))/100}else i=+e;return ue(i)&&(i=n),r&&t!=null&&i>t&&(i=t),i},ge=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,n={},r=0;re&&(typeof t==`function`?t(e):ae(e,t))===n)}var I=e=>e==null,ye=e=>I(e)?e:`${e.charAt(0).toUpperCase()}${e.slice(1)}`;function be(e){return e!=null}function xe(){}function Se(e){if(e)return{x:e.x,y:e.y,upperWidth:`upperWidth`in e?e.upperWidth:e.width,lowerWidth:`lowerWidth`in e?e.lowerWidth:e.width,width:e.width,height:e.height}}function Ce(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function we(e){for(var t=1;t{var t=e.viewBox,n=e.position,r=e.offset,i=r===void 0?0:r,a=e.parentViewBox,o=e.clamp,s=Se(t),c=s.x,l=s.y,u=s.height,d=s.upperWidth,f=s.lowerWidth,p=c,m=c+(d-f)/2,h=(p+m)/2,g=(d+f)/2,_=p+d/2,v=u>=0?1:-1,y=v*i,b=v>0?`end`:`start`,x=v>0?`start`:`end`,S=d>=0?1:-1,C=S*i,w=S>0?`end`:`start`,T=S>0?`start`:`end`,E=a;if(n===`top`){var D={x:p+d/2,y:l-y,horizontalAnchor:`middle`,verticalAnchor:b};return o&&E&&(D.height=Math.max(l-E.y,0),D.width=d),D}if(n===`bottom`){var O={x:m+f/2,y:l+u+y,horizontalAnchor:`middle`,verticalAnchor:x};return o&&E&&(O.height=Math.max(E.y+E.height-(l+u),0),O.width=f),O}if(n===`left`){var k={x:h-C,y:l+u/2,horizontalAnchor:w,verticalAnchor:`middle`};return o&&E&&(k.width=Math.max(k.x-E.x,0),k.height=u),k}if(n===`right`){var A={x:h+g+C,y:l+u/2,horizontalAnchor:T,verticalAnchor:`middle`};return o&&E&&(A.width=Math.max(E.x+E.width-A.x,0),A.height=u),A}var j=o&&E?{width:g,height:u}:{};return n===`insideLeft`?we({x:h+C,y:l+u/2,horizontalAnchor:T,verticalAnchor:`middle`},j):n===`insideRight`?we({x:h+g-C,y:l+u/2,horizontalAnchor:w,verticalAnchor:`middle`},j):n===`insideTop`?we({x:p+d/2,y:l+y,horizontalAnchor:`middle`,verticalAnchor:x},j):n===`insideBottom`?we({x:m+f/2,y:l+u-y,horizontalAnchor:`middle`,verticalAnchor:b},j):n===`insideTopLeft`?we({x:p+C,y:l+y,horizontalAnchor:T,verticalAnchor:x},j):n===`insideTopRight`?we({x:p+d-C,y:l+y,horizontalAnchor:w,verticalAnchor:x},j):n===`insideBottomLeft`?we({x:m+C,y:l+u-y,horizontalAnchor:T,verticalAnchor:b},j):n===`insideBottomRight`?we({x:m+f-C,y:l+u-y,horizontalAnchor:w,verticalAnchor:b},j):n&&typeof n==`object`&&(F(n.x)||de(n.x))&&(F(n.y)||de(n.y))?we({x:c+he(n.x,g),y:l+he(n.y,u),horizontalAnchor:`end`,verticalAnchor:`end`},j):we({x:_,y:l+u/2,horizontalAnchor:`middle`,verticalAnchor:`middle`},j)},ke=[`top`,`left`,`right`,`bottom`];function Ae(e){return e==null?!1:typeof e==`object`||ke.includes(e)}var je=(0,p.createContext)(null);function L(e){return function(){return e}}var Me=Math.PI,Ne=2*Me,Pe=1e-6,Fe=Ne-Pe;function Ie(e){this._+=e[0];for(let t=1,n=e.length;t=0))throw Error(`invalid digits: ${e}`);if(t>15)return Ie;let n=10**t;return function(e){this._+=e[0];for(let t=1,r=e.length;tPe){if(!(Math.abs(u*s-c*l)>Pe)||!i)this._append`L${this._x1=e},${this._y1=t}`;else{let f=n-a,p=r-o,m=s*s+c*c,h=f*f+p*p,g=Math.sqrt(m),_=Math.sqrt(d),v=i*Math.tan((Me-Math.acos((m+d-h)/(2*g*_)))/2),y=v/_,b=v/g;Math.abs(y-1)>Pe&&this._append`L${e+y*l},${t+y*u}`,this._append`A${i},${i},0,0,${+(u*f>l*p)},${this._x1=e+b*s},${this._y1=t+b*c}`}}}arc(e,t,n,r,i,a){if(e=+e,t=+t,n=+n,a=!!a,n<0)throw Error(`negative radius: ${n}`);let o=n*Math.cos(r),s=n*Math.sin(r),c=e+o,l=t+s,u=1^a,d=a?r-i:i-r;this._x1===null?this._append`M${c},${l}`:(Math.abs(this._x1-c)>Pe||Math.abs(this._y1-l)>Pe)&&this._append`L${c},${l}`,n&&(d<0&&(d=d%Ne+Ne),d>Fe?this._append`A${n},${n},0,1,${u},${e-o},${t-s}A${n},${n},0,1,${u},${this._x1=c},${this._y1=l}`:d>Pe&&this._append`A${n},${n},0,${+(d>=Me)},${u},${this._x1=e+n*Math.cos(i)},${this._y1=t+n*Math.sin(i)}`)}rect(e,t,n,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+t}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}};Re.prototype;function ze(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(n==null)t=null;else{let e=Math.floor(n);if(!(e>=0))throw RangeError(`invalid digits: ${n}`);t=e}return e},()=>new Re(t)}Array.prototype.slice;function Be(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function Ve(e){this._context=e}Ve.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};function He(e){return new Ve(e)}function Ue(e){return e[0]}function We(e){return e[1]}function Ge(e,t){var n=L(!0),r=null,i=He,a=null,o=ze(s);e=typeof e==`function`?e:e===void 0?Ue:L(e),t=typeof t==`function`?t:t===void 0?We:L(t);function s(s){var c,l=(s=Be(s)).length,u,d=!1,f;for(r??(a=i(f=o())),c=0;c<=l;++c)!(c=d;--f)s.point(_[f],v[f]);s.lineEnd(),s.areaEnd()}}h&&(_[u]=+e(m,u,l),v[u]=+t(m,u,l),s.point(r?+r(m,u,l):_[u],n?+n(m,u,l):v[u]))}if(g)return s=null,g+``||null}function u(){return Ge().defined(i).curve(o).context(a)}return l.x=function(t){return arguments.length?(e=typeof t==`function`?t:L(+t),r=null,l):e},l.x0=function(t){return arguments.length?(e=typeof t==`function`?t:L(+t),l):e},l.x1=function(e){return arguments.length?(r=e==null?null:typeof e==`function`?e:L(+e),l):r},l.y=function(e){return arguments.length?(t=typeof e==`function`?e:L(+e),n=null,l):t},l.y0=function(e){return arguments.length?(t=typeof e==`function`?e:L(+e),l):t},l.y1=function(e){return arguments.length?(n=e==null?null:typeof e==`function`?e:L(+e),l):n},l.lineX0=l.lineY0=function(){return u().x(e).y(t)},l.lineY1=function(){return u().x(e).y(n)},l.lineX1=function(){return u().x(r).y(t)},l.defined=function(e){return arguments.length?(i=typeof e==`function`?e:L(!!e),l):i},l.curve=function(e){return arguments.length?(o=e,a!=null&&(s=o(a)),l):o},l.context=function(e){return arguments.length?(e==null?a=s=null:s=o(a=e),l):a},l}var qe=class{constructor(e,t){this._context=e,this._x=t}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,t,e,t):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+t)/2,e,this._y0,e,t)}this._x0=e,this._y0=t}};function Je(e){return new qe(e,!0)}function Ye(e){return new qe(e,!1)}function Xe(){}function Ze(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Qe(e){this._context=e}Qe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ze(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ze(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function $e(e){return new Qe(e)}function et(e){this._context=e}et.prototype={areaStart:Xe,areaEnd:Xe,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Ze(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function tt(e){return new et(e)}function nt(e){this._context=e}nt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Ze(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function rt(e){return new nt(e)}function it(e){this._context=e}it.prototype={areaStart:Xe,areaEnd:Xe,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function at(e){return new it(e)}function ot(e){return e<0?-1:1}function st(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(ot(a)+ot(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function ct(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function lt(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,s=(a-r)/3;e._context.bezierCurveTo(r+s,i+s*t,a-s,o-s*n,a,o)}function ut(e){this._context=e}ut.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:lt(this,this._t0,ct(this,this._t0))}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(e=+e,t=+t,e!==this._x1||t!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,lt(this,ct(this,n=st(this,e,t)),n);break;default:lt(this,this._t0,n=st(this,e,t))}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};function dt(e){this._context=new ft(e)}(dt.prototype=Object.create(ut.prototype)).point=function(e,t){ut.prototype.point.call(this,t,e)};function ft(e){this._context=e}ft.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,i,a){this._context.bezierCurveTo(t,e,r,n,a,i)}};function pt(e){return new ut(e)}function mt(e){return new dt(e)}function ht(e){this._context=e}ht.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,n=e.length;if(n){if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),n===2)this._context.lineTo(e[1],t[1]);else for(var r=gt(e),i=gt(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[n-1]=(e[n]+i[n-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};function yt(e){return new vt(e,.5)}function bt(e){return new vt(e,0)}function xt(e){return new vt(e,1)}function St(e,t){if((o=e.length)>1)for(var n=1,r,i,a=e[t[0]],o,s=a.length;n=0;)n[t]=t;return n}function wt(e,t){return e[t]}function Tt(e){let t=[];return t.key=e,t}function Et(){var e=L([]),t=Ct,n=St,r=wt;function i(i){var a=Array.from(e.apply(this,arguments),Tt),o,s=a.length,c=-1,l;for(let e of i)for(o=0,++c;o0){for(var n,r,i=0,a=e[0].length,o;i0){for(var n=0,r=e[t[0]],i,a=r.length;n 0)||!((a=(i=e[t[0]]).length)>0))){for(var n=0,r=1,i,a,o;r `radius`in e&&`startAngle`in e&&`endAngle`in e,jt=(e,t)=>{if(!e||typeof e==`function`||typeof e==`boolean`)return null;var n=e;if((0,p.isValidElement)(e)&&(n=e.props),typeof n!=`object`&&typeof n!=`function`)return null;var r={};return Object.keys(n).forEach(e=>{f(e)&&typeof n[e]==`function`&&(r[e]=t||(t=>n[e](n,t)))}),r},Mt=(e,t,n)=>r=>(e(t,n,r),null),Nt=(e,t,n)=>{if(e===null||typeof e!=`object`&&typeof e!=`function`)return null;var r=null;return Object.keys(e).forEach(i=>{var a=e[i];f(i)&&typeof a==`function`&&(r||={},r[i]=Mt(a,t,n))}),r};function Pt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ft(e){for(var t=1;t(e[t]===void 0&&r[t]!==void 0&&(e[t]=r[t]),e),n)}function Bt(e,t){let n=new Map;for(let r=0;r=0}function Wt(e){return e!=null&&typeof e!=`function`&&Ut(e.length)}function Gt(e){return function(t){return ae(t,e)}}function Kt(e){return e==null||typeof e!=`object`&&typeof e!=`function`}function qt(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Jt(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}function Yt(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}var Xt=`[object RegExp]`,Zt=`[object String]`,Qt=`[object Number]`,$t=`[object Boolean]`,en=`[object Arguments]`,tn=`[object Symbol]`,nn=`[object Date]`,rn=`[object Map]`,an=`[object Set]`,on=`[object Array]`,sn=`[object Function]`,cn=`[object ArrayBuffer]`,ln=`[object Object]`,un=`[object Error]`,dn=`[object DataView]`,fn=`[object Uint8Array]`,pn=`[object Uint8ClampedArray]`,mn=`[object Uint16Array]`,hn=`[object Uint32Array]`,gn=`[object BigUint64Array]`,_n=`[object Int8Array]`,vn=`[object Int16Array]`,yn=`[object Int32Array]`,bn=`[object BigInt64Array]`,xn=`[object Float32Array]`,Sn=`[object Float64Array]`,Cn=typeof globalThis==`object`&&globalThis||typeof window==`object`&&window||typeof self==`object`&&self||typeof global==`object`&&global||(function(){return this})();function wn(e){return Cn.Buffer!==void 0&&Cn.Buffer.isBuffer(e)}function Tn(e,t){return En(e,void 0,e,new Map,t)}function En(e,t,n,r=new Map,i=void 0){let a=i?.(e,t,n,r);if(a!==void 0)return a;if(Kt(e))return e;if(r.has(e))return r.get(e);if(Array.isArray(e)){let t=Array(e.length);r.set(e,t);for(let a=0;avoid 0)}function Nn(e,t,n,r,i=!1){if(t===e)return!0;switch(typeof t){case`object`:return Pn(e,t,n,r,i);case`function`:return Object.keys(t).length>0?Nn(e,{...t},n,r,i):An(e,t);default:return jn(e)&&i?typeof t!=`string`||t===``:An(e,t)}}function Pn(e,t,n,r,i=!1){if(t==null)return!0;if(Array.isArray(t))return In(e,t,n,r);if(t instanceof Map)return Fn(e,t,n,r);if(t instanceof Set)return Ln(e,t,n,r);let a=Object.keys(t);if(e==null)return i&&a.length===0;if(i)Kt(e)&&(e=Object(e));else{let t=Yt(e);if(t!==`[object Object]`&&t!==`[object Arguments]`)return!1}if(a.length===0)return!0;if(r?.has(t))return r.get(t)===e;r?.set(t,e);try{for(let i=0;ivoid 0)}function zn(e){return e=kn(e),t=>Rn(t,e)}function Bn(e,t){return Tn(e,(n,r,i,a)=>{let o=t?.(n,r,i,a);if(o!==void 0)return o;if(typeof e==`object`){if(Yt(e)===`[object Object]`&&typeof e.constructor!=`function`){let t={};return a.set(e,t),Dn(t,e,i,a),t}switch(Object.prototype.toString.call(e)){case Qt:case Zt:case $t:{let t=new e.constructor(e?.valueOf());return Dn(t,e),t}case en:{let t={};return Dn(t,e),t.length=e.length,t[Symbol.iterator]=e[Symbol.iterator],t}default:return}}})}function Vn(e){return Bn(e)}var Hn=/^(?:0|[1-9]\d*)$/;function Un(e,t=2**53-1){switch(typeof e){case`number`:return Number.isInteger(e)&&e>=0&&e{var n=t(),i=r();function a(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var o=typeof Object.is==`function`?Object.is:a,s=i.useSyncExternalStore,c=n.useRef,l=n.useEffect,u=n.useMemo,d=n.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var a=c(null);if(a.current===null){var f={hasValue:!1,value:null};a.current=f}else f=a.current;a=u(function(){function e(e){if(!a){if(a=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,o(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var a=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=s(e,a[0],a[1]);return l(function(){f.hasValue=!0,f.value=p},[p]),d(p),p}})),Qn=i(((e,t)=>{t.exports=Zn()})),$n=(0,p.createContext)(null),er=Qn(),tr=e=>e,R=()=>{var e=(0,p.useContext)($n);return e?e.store.dispatch:tr},nr=()=>{},rr=()=>nr,ir=(e,t)=>e===t;function z(e){var t=(0,p.useContext)($n),n=(0,p.useMemo)(()=>t?t=>{if(t!=null)return e(t)}:nr,[t,e]);return(0,er.useSyncExternalStoreWithSelector)(t?t.subscription.addNestedSub:rr,t?t.store.getState:nr,t?t.store.getState:nr,n,ir)}function ar(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!=`function`)throw TypeError(t)}function or(e,t=`expected all items to be functions, instead received the following types: `){if(!e.every(e=>typeof e==`function`)){let n=e.map(e=>typeof e==`function`?`function ${e.name||`unnamed`}()`:typeof e).join(`, `);throw TypeError(`${t}[${n}]`)}}var sr=e=>Array.isArray(e)?e:[e];function cr(e){let t=Array.isArray(e[0])?e[0]:e;return or(t,`createSelector expects all input-selectors to be functions, but received the following types: `),t}function lr(e,t){let n=[],{length:r}=e;for(let i=0;i`u`?ur:WeakRef,fr=0,pr=1;function mr(){return{s:fr,v:void 0,o:null,p:null}}function hr(e){return e instanceof dr?e.deref():e}function gr(e,t={}){let n=mr(),{resultEqualityCheck:r}=t,i,a=0;function o(){let t=n,{length:o}=arguments;for(let e=0,n=o;e{n=mr(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function _r(e,...t){let n=typeof e==`function`?{memoize:e,memoizeOptions:t}:e,r=(...e)=>{let t=0,r=0,i,a={},o=e.pop();typeof o==`object`&&(a=o,o=e.pop()),ar(o,`createSelector expects an output function after the inputs, but received: [${typeof o}]`);let{memoize:s,memoizeOptions:c=[],argsMemoize:l=gr,argsMemoizeOptions:u=[]}={...n,...a},d=sr(c),f=sr(u),p=cr(e),m=s(function(){return t++,o.apply(null,arguments)},...d),h=l(function(){r++;let e=lr(p,arguments);return i=m.apply(null,e),i},...f);return Object.assign(h,{resultFunc:o,memoizedResultFunc:m,dependencies:p,dependencyRecomputations:()=>r,resetDependencyRecomputations:()=>{r=0},lastResult:()=>i,recomputations:()=>t,resetRecomputations:()=>{t=0},memoize:s,argsMemoize:l})};return Object.assign(r,{withTypes:()=>r}),r}var B=_r(gr);function vr(e,t=1){let n=[],r=Math.floor(t),i=(e,t)=>{for(let a=0;a{if(e!==t){let r=br(e),i=br(t);if(r===i&&r===0){if(et)return n===`desc`?-1:1}return n===`desc`?i-r:r-i}return 0},Sr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Cr=/^\w*$/;function wr(e,t){return Array.isArray(e)?!1:typeof e==`number`||typeof e==`boolean`||e==null||te(e)?!0:typeof e==`string`&&(Cr.test(e)||!Sr.test(e))||t!=null&&Object.hasOwn(t,e)}function Tr(e,t,n,r){if(e==null)return[];n=r?void 0:n,Array.isArray(e)||(e=Wt(e)?Array.from(e):Object.values(e)),Array.isArray(t)||(t=t==null?[null]:[t]),t.length===0&&(t=[null]),Array.isArray(n)||(n=n==null?[]:[n]),n=n.map(e=>String(e));let i=(e,t)=>{let n=e,r=0;for(;r0&&r===t.length?n:void 0},a=(e,t)=>{if(e==null)return t;if(t!=null)return typeof e==`object`&&`key`in e?Object.hasOwn(t,e.key)?t[e.key]:i(t,e.path):typeof e==`function`?e(t):Array.isArray(e)?i(t,e):t[e]},o=t.map(e=>(Array.isArray(e)&&e.length===1&&(e=e[0]),e==null||typeof e==`function`||Array.isArray(e)||wr(e)?e:{key:e,path:ie(e)}));return e.map(e=>({original:e,criteria:o.map(t=>a(t,e))})).slice().sort((e,t)=>{for(let r=0;re.original)}function Er(e,...t){let n=t.length;return n>1&&yr(e,t[0],t[1])?t=[]:n>2&&yr(t[0],t[1],t[2])&&(t=[t[0]]),Tr(e,vr(t),[`asc`])}var Dr=e=>e.legend.settings,Or=e=>e.legend.size;B([e=>e.legend.payload,Dr],(e,t)=>{var n=t.itemSorter,r=e.flat(1);return n?Er(r,n):r});function kr(e,t){return Pr(e)||Nr(e,t)||jr(e,t)||Ar()}function Ar(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
+import{a as e,c as t,d as n,i as r,l as i,n as a,o,r as s,s as c,t as l,u}from"./index-uMr9hDfZ.js";var d=`dangerouslySetInnerHTML.onCopy.onCopyCapture.onCut.onCutCapture.onPaste.onPasteCapture.onCompositionEnd.onCompositionEndCapture.onCompositionStart.onCompositionStartCapture.onCompositionUpdate.onCompositionUpdateCapture.onFocus.onFocusCapture.onBlur.onBlurCapture.onChange.onChangeCapture.onBeforeInput.onBeforeInputCapture.onInput.onInputCapture.onReset.onResetCapture.onSubmit.onSubmitCapture.onInvalid.onInvalidCapture.onLoad.onLoadCapture.onError.onErrorCapture.onKeyDown.onKeyDownCapture.onKeyPress.onKeyPressCapture.onKeyUp.onKeyUpCapture.onAbort.onAbortCapture.onCanPlay.onCanPlayCapture.onCanPlayThrough.onCanPlayThroughCapture.onDurationChange.onDurationChangeCapture.onEmptied.onEmptiedCapture.onEncrypted.onEncryptedCapture.onEnded.onEndedCapture.onLoadedData.onLoadedDataCapture.onLoadedMetadata.onLoadedMetadataCapture.onLoadStart.onLoadStartCapture.onPause.onPauseCapture.onPlay.onPlayCapture.onPlaying.onPlayingCapture.onProgress.onProgressCapture.onRateChange.onRateChangeCapture.onSeeked.onSeekedCapture.onSeeking.onSeekingCapture.onStalled.onStalledCapture.onSuspend.onSuspendCapture.onTimeUpdate.onTimeUpdateCapture.onVolumeChange.onVolumeChangeCapture.onWaiting.onWaitingCapture.onAuxClick.onAuxClickCapture.onClick.onClickCapture.onContextMenu.onContextMenuCapture.onDoubleClick.onDoubleClickCapture.onDrag.onDragCapture.onDragEnd.onDragEndCapture.onDragEnter.onDragEnterCapture.onDragExit.onDragExitCapture.onDragLeave.onDragLeaveCapture.onDragOver.onDragOverCapture.onDragStart.onDragStartCapture.onDrop.onDropCapture.onMouseDown.onMouseDownCapture.onMouseEnter.onMouseLeave.onMouseMove.onMouseMoveCapture.onMouseOut.onMouseOutCapture.onMouseOver.onMouseOverCapture.onMouseUp.onMouseUpCapture.onSelect.onSelectCapture.onTouchCancel.onTouchCancelCapture.onTouchEnd.onTouchEndCapture.onTouchMove.onTouchMoveCapture.onTouchStart.onTouchStartCapture.onPointerDown.onPointerDownCapture.onPointerMove.onPointerMoveCapture.onPointerUp.onPointerUpCapture.onPointerCancel.onPointerCancelCapture.onPointerEnter.onPointerEnterCapture.onPointerLeave.onPointerLeaveCapture.onPointerOver.onPointerOverCapture.onPointerOut.onPointerOutCapture.onGotPointerCapture.onGotPointerCaptureCapture.onLostPointerCapture.onLostPointerCaptureCapture.onScroll.onScrollCapture.onWheel.onWheelCapture.onAnimationStart.onAnimationStartCapture.onAnimationEnd.onAnimationEndCapture.onAnimationIteration.onAnimationIterationCapture.onTransitionEnd.onTransitionEndCapture`.split(`.`);function f(e){return typeof e==`string`&&d.includes(e)}var p=n(t()),m=new Set(`aria-activedescendant.aria-atomic.aria-autocomplete.aria-busy.aria-checked.aria-colcount.aria-colindex.aria-colspan.aria-controls.aria-current.aria-describedby.aria-details.aria-disabled.aria-errormessage.aria-expanded.aria-flowto.aria-haspopup.aria-hidden.aria-invalid.aria-keyshortcuts.aria-label.aria-labelledby.aria-level.aria-live.aria-modal.aria-multiline.aria-multiselectable.aria-orientation.aria-owns.aria-placeholder.aria-posinset.aria-pressed.aria-readonly.aria-relevant.aria-required.aria-roledescription.aria-rowcount.aria-rowindex.aria-rowspan.aria-selected.aria-setsize.aria-sort.aria-valuemax.aria-valuemin.aria-valuenow.aria-valuetext.className.color.height.id.lang.max.media.method.min.name.style.target.width.role.tabIndex.accentHeight.accumulate.additive.alignmentBaseline.allowReorder.alphabetic.amplitude.arabicForm.ascent.attributeName.attributeType.autoReverse.azimuth.baseFrequency.baselineShift.baseProfile.bbox.begin.bias.by.calcMode.capHeight.clip.clipPath.clipPathUnits.clipRule.colorInterpolation.colorInterpolationFilters.colorProfile.colorRendering.contentScriptType.contentStyleType.cursor.cx.cy.d.decelerate.descent.diffuseConstant.direction.display.divisor.dominantBaseline.dur.dx.dy.edgeMode.elevation.enableBackground.end.exponent.externalResourcesRequired.fill.fillOpacity.fillRule.filter.filterRes.filterUnits.floodColor.floodOpacity.focusable.fontFamily.fontSize.fontSizeAdjust.fontStretch.fontStyle.fontVariant.fontWeight.format.from.fx.fy.g1.g2.glyphName.glyphOrientationHorizontal.glyphOrientationVertical.glyphRef.gradientTransform.gradientUnits.hanging.horizAdvX.horizOriginX.href.ideographic.imageRendering.in2.in.intercept.k1.k2.k3.k4.k.kernelMatrix.kernelUnitLength.kerning.keyPoints.keySplines.keyTimes.lengthAdjust.letterSpacing.lightingColor.limitingConeAngle.local.markerEnd.markerHeight.markerMid.markerStart.markerUnits.markerWidth.mask.maskContentUnits.maskUnits.mathematical.mode.numOctaves.offset.opacity.operator.order.orient.orientation.origin.overflow.overlinePosition.overlineThickness.paintOrder.panose1.pathLength.patternContentUnits.patternTransform.patternUnits.pointerEvents.pointsAtX.pointsAtY.pointsAtZ.preserveAlpha.preserveAspectRatio.primitiveUnits.r.radius.refX.refY.renderingIntent.repeatCount.repeatDur.requiredExtensions.requiredFeatures.restart.result.rotate.rx.ry.seed.shapeRendering.slope.spacing.specularConstant.specularExponent.speed.spreadMethod.startOffset.stdDeviation.stemh.stemv.stitchTiles.stopColor.stopOpacity.strikethroughPosition.strikethroughThickness.string.stroke.strokeDasharray.strokeDashoffset.strokeLinecap.strokeLinejoin.strokeMiterlimit.strokeOpacity.strokeWidth.surfaceScale.systemLanguage.tableValues.targetX.targetY.textAnchor.textDecoration.textLength.textRendering.to.transform.u1.u2.underlinePosition.underlineThickness.unicode.unicodeBidi.unicodeRange.unitsPerEm.vAlphabetic.values.vectorEffect.version.vertAdvY.vertOriginX.vertOriginY.vHanging.vIdeographic.viewTarget.visibility.vMathematical.widths.wordSpacing.writingMode.x1.x2.x.xChannelSelector.xHeight.xlinkActuate.xlinkArcrole.xlinkHref.xlinkRole.xlinkShow.xlinkTitle.xlinkType.xmlBase.xmlLang.xmlns.xmlnsXlink.xmlSpace.y1.y2.y.yChannelSelector.z.zoomAndPan.ref.key.angle`.split(`.`));function h(e){return typeof e==`string`&&m.has(e)}function g(e){return typeof e==`string`&&e.startsWith(`data-`)}function _(e){if(typeof e!=`object`||!e)return{};var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(h(n)||g(n))&&(t[n]=e[n]);return t}function v(e){if(e==null)return null;if((0,p.isValidElement)(e)&&typeof e.props==`object`&&e.props!==null){var t=e.props;return _(t)}return typeof e==`object`&&!Array.isArray(e)?_(e):null}function y(e){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(h(n)||g(n)||f(n))&&(t[n]=e[n]);return t}function b(e){return e==null?null:(0,p.isValidElement)(e)?y(e.props):typeof e==`object`&&!Array.isArray(e)?y(e):null}var x=[`children`,`width`,`height`,`viewBox`,`className`,`style`,`title`,`desc`];function S(){return S=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var n=e.children,r=e.width,i=e.height,a=e.viewBox,s=e.className,c=e.style,l=e.title,u=e.desc,d=C(e,x),f=a||{width:r,height:i,x:0,y:0},m=o(`recharts-surface`,s);return p.createElement(`svg`,S({},y(d),{className:m,width:r,height:i,style:c,viewBox:`${f.x} ${f.y} ${f.width} ${f.height}`,ref:t}),p.createElement(`title`,null,l),p.createElement(`desc`,null,u),n)}),E=[`children`,`className`];function D(){return D=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var n=e.children,r=e.className,i=O(e,E),a=o(`recharts-layer`,r);return p.createElement(`g`,D({className:a},y(i),{ref:t}),n)});function j(e){return e===`__proto__`}var M=/\.|(\[(?:[^[\]]*|(["'])(?:(?!\2)[^\\]|\\.)*?\2)\])/;function N(e){switch(typeof e){case`number`:case`symbol`:return!1;case`string`:return e===``||e.startsWith(`.`)||e.endsWith(`.`)?!1:M.test(e);default:return!1}}function ee(e){return typeof e==`string`||typeof e==`symbol`?e:Object.is(e?.valueOf?.(),-0)?`-0`:String(e)}function te(e){return typeof e==`symbol`||e instanceof Symbol}function ne(e){return e==null?``:re(e)}function re(e){if(typeof e==`string`)return e;if(Array.isArray(e))return e.map(re).join(`,`);if(te(e))return e.toString();let t=e+``;return t===`0`&&Object.is(Number(e),-0)?`-0`:t}function ie(e){if(Array.isArray(e))return e.map(ee);if(typeof e==`symbol`)return[e];e=ne(e);let t=[],n=e.length;if(n===0)return t;let r=0,i=``,a=``,o=!1,s=!1,c=/^-?\d+(?:\.\d+)?$/;for(e.charCodeAt(0)===46&&t.push(``);r1&&arguments[1]!==void 0?arguments[1]:se),n=Math.round(e*t)/t;return Object.is(n,-0)?0:n}function P(e){var t=[...arguments].slice(1);return e.reduce((e,n,r)=>{var i=t[r-1];return typeof i==`string`?e+i+n:i===void 0?e+n:e+ce(i)+n},``)}var le=e=>e===0?0:e>0?1:-1,ue=e=>typeof e==`number`&&e!=+e,de=e=>typeof e==`string`&&e.length>1&&e.indexOf(`%`)===e.length-1,F=e=>(typeof e==`number`||e instanceof Number)&&!ue(e),fe=e=>F(e)||typeof e==`string`,pe=0,me=e=>{var t=++pe;return`${e||``}${t}`},he=function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(!F(e)&&typeof e!=`string`)return n;var i;if(de(e)){if(t==null)return n;var a=e.indexOf(`%`);i=t*parseFloat(e.slice(0,a))/100}else i=+e;return ue(i)&&(i=n),r&&t!=null&&i>t&&(i=t),i},ge=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,n={},r=0;r