diff --git a/src/webui/modern/package-lock.json b/src/webui/modern/package-lock.json index c63c599de..3f3c762a2 100644 --- a/src/webui/modern/package-lock.json +++ b/src/webui/modern/package-lock.json @@ -17,10 +17,12 @@ "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^13.5.0", "@types/jest": "^27.5.2", + "@types/marked": "^5.0.2", "@types/node": "^16.18.126", "@types/react": "^19.1.13", "@types/react-dom": "^19.1.9", "@types/react-router-dom": "^5.3.3", + "marked": "^16.3.0", "react": "^19.1.1", "react-dom": "^19.1.1", "react-router-dom": "^7.9.2", @@ -4182,6 +4184,12 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "license": "MIT" }, + "node_modules/@types/marked": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-5.0.2.tgz", + "integrity": "sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg==", + "license": "MIT" + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -11801,6 +11809,18 @@ "tmpl": "1.0.5" } }, + "node_modules/marked": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.3.0.tgz", + "integrity": "sha512-K3UxuKu6l6bmA5FUwYho8CfJBlsUWAooKtdGgMcERSpF7gcBUrCGsLH7wDaaNOzwq18JzSUDyoEb/YsrqMac3w==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", diff --git a/src/webui/modern/package.json b/src/webui/modern/package.json index e1f0201e2..d51f0f513 100644 --- a/src/webui/modern/package.json +++ b/src/webui/modern/package.json @@ -13,10 +13,12 @@ "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^13.5.0", "@types/jest": "^27.5.2", + "@types/marked": "^5.0.2", "@types/node": "^16.18.126", "@types/react": "^19.1.13", "@types/react-dom": "^19.1.9", "@types/react-router-dom": "^5.3.3", + "marked": "^16.3.0", "react": "^19.1.1", "react-dom": "^19.1.1", "react-router-dom": "^7.9.2", diff --git a/src/webui/modern/src/App.tsx b/src/webui/modern/src/App.tsx index 2917bbea3..1351aa3c7 100644 --- a/src/webui/modern/src/App.tsx +++ b/src/webui/modern/src/App.tsx @@ -33,6 +33,10 @@ import DVR from './components/DVR'; import Configuration from './components/Configuration'; import Status from './components/Status'; import About from './components/About'; +import HelpSystem from './components/common/HelpSystem'; + +// Contexts +import { HelpProvider, useHelp } from './contexts/HelpContext'; // Theme matching Tvheadend's blue color scheme const theme = createTheme({ @@ -62,6 +66,7 @@ function AppContent() { const navigate = useNavigate(); const location = useLocation(); const isMobile = useMediaQuery(theme.breakpoints.down('md')); + const { isHelpOpen, helpPageName, closeHelp } = useHelp(); const handleDrawerToggle = () => { setMobileOpen(!mobileOpen); @@ -179,6 +184,13 @@ function AppContent() { } /> } /> + + {/* Global Help System */} + ); @@ -187,9 +199,11 @@ function AppContent() { function App() { return ( - - - + + + + + ); } diff --git a/src/webui/modern/src/components/Configuration.tsx b/src/webui/modern/src/components/Configuration.tsx index 06ef434cf..39e84cf51 100644 --- a/src/webui/modern/src/components/Configuration.tsx +++ b/src/webui/modern/src/components/Configuration.tsx @@ -44,6 +44,7 @@ import { loadLanguages, LanguageOption } from '../utils/api'; +import { useHelp } from '../contexts/HelpContext'; import AccessEntriesSection from './sections/AccessEntriesSection'; import PasswordsSection from './sections/PasswordsSection'; import IPBlockingSection from './sections/IPBlockingSection'; @@ -89,6 +90,7 @@ function Configuration() { const [selectedSection, setSelectedSection] = useState('general'); const [selectedSubsection, setSelectedSubsection] = useState('base'); const [expandedSections, setExpandedSections] = useState(['general']); + const { showHelp } = useHelp(); // Server data const [serverInfo, setServerInfo] = useState(null); @@ -520,6 +522,7 @@ function Configuration() { variant="outlined" size="small" sx={{ mb: 1 }} + onClick={() => showHelp('introduction')} > Help @@ -689,7 +692,12 @@ function Configuration() { - + diff --git a/src/webui/modern/src/components/common/ConfigDataGrid.tsx b/src/webui/modern/src/components/common/ConfigDataGrid.tsx index 5a267cad6..5e111f4fb 100644 --- a/src/webui/modern/src/components/common/ConfigDataGrid.tsx +++ b/src/webui/modern/src/components/common/ConfigDataGrid.tsx @@ -24,6 +24,13 @@ import { Checkbox, FormControlLabel, CircularProgress, + TablePagination, + TableSortLabel, + Menu, + Switch, + Chip, + Tooltip, + Collapse, } from '@mui/material'; import { Add as AddIcon, @@ -32,7 +39,13 @@ import { ArrowUpward as MoveUpIcon, ArrowDownward as MoveDownIcon, Refresh as RefreshIcon, + Help as HelpIcon, + FilterList as FilterIcon, + ViewColumn as ColumnIcon, + ExpandMore as ExpandMoreIcon, + ExpandLess as ExpandLessIcon, } from '@mui/icons-material'; +import { useHelp } from '../../contexts/HelpContext'; export interface GridColumn { key: string; @@ -40,6 +53,9 @@ export interface GridColumn { width?: number; type?: 'text' | 'number' | 'boolean' | 'select'; options?: Array<{key: string | number, val: string}>; + sortable?: boolean; + filterable?: boolean; + hidden?: boolean; } export interface ConfigDataGridProps { @@ -51,7 +67,13 @@ export interface ConfigDataGridProps { canEdit?: boolean; canDelete?: boolean; canMove?: boolean; + canGroup?: boolean; + autoRefresh?: boolean; + autoRefreshInterval?: number; // seconds fields?: string[]; + helpPage?: string; // Help page to show when help button is clicked + pageSize?: number; + supportsPagination?: boolean; } const ConfigDataGrid: React.FC = ({ @@ -63,7 +85,13 @@ const ConfigDataGrid: React.FC = ({ canEdit = true, canDelete = true, canMove = false, + canGroup = false, + autoRefresh = false, + autoRefreshInterval = 30, fields, + helpPage, + pageSize = 50, + supportsPagination = true, }) => { const [data, setData] = useState([]); const [loading, setLoading] = useState(false); @@ -73,31 +101,118 @@ const ConfigDataGrid: React.FC = ({ isNew: false }); const [editData, setEditData] = useState({}); + + // Advanced grid state + const [page, setPage] = useState(0); + const [rowsPerPage, setRowsPerPage] = useState(pageSize); + const [sortBy, setSortBy] = useState(''); + const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc'); + const [filters, setFilters] = useState>({}); + const [visibleColumns, setVisibleColumns] = useState>( + columns.reduce((acc, col) => ({...acc, [col.key]: !col.hidden}), {}) + ); + const [totalCount, setTotalCount] = useState(0); + const [autoRefreshEnabled, setAutoRefreshEnabled] = useState(autoRefresh); + + // UI state for menus and dialogs + const [columnMenuAnchor, setColumnMenuAnchor] = useState(null); + const [filterMenuAnchor, setFilterMenuAnchor] = useState(null); + const [filtersExpanded, setFiltersExpanded] = useState(false); + + const { showHelp } = useHelp(); const loadData = useCallback(async () => { setLoading(true); try { - // Use POST request with grid parameters like the old UI - const response = await fetch(`/api/${url}`, { + // Build parameters like ExtJS interface + const params = new URLSearchParams({ + sort: sortBy || 'prefix', + dir: sortDirection.toUpperCase(), + groupBy: 'false', + groupDir: 'ASC', + start: supportsPagination ? (page * rowsPerPage).toString() : '0', + limit: supportsPagination ? rowsPerPage.toString() : '999999' + }); + + // Add filters + Object.entries(filters).forEach(([key, value]) => { + if (value) { + params.append(`filter[${key}]`, value); + } + }); + + // Use POST request with grid parameters like the old UI + const response = await fetch(`api/${url}`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - body: new URLSearchParams({ - sort: 'prefix', - dir: 'ASC', - groupBy: 'false', - groupDir: 'ASC', - start: '0', - limit: '999999' - }) + body: params }); const result = await response.json(); setData(result.entries || []); + setTotalCount(result.totalCount || result.entries?.length || 0); } catch (error) { console.error(`Failed to load ${title}:`, error); } finally { setLoading(false); } - }, [url, title]); + }, [url, title, page, rowsPerPage, sortBy, sortDirection, filters, supportsPagination]); + + // Auto-refresh functionality + useEffect(() => { + let interval: NodeJS.Timeout; + if (autoRefreshEnabled && autoRefreshInterval > 0) { + interval = setInterval(() => { + loadData(); + }, autoRefreshInterval * 1000); + } + return () => { + if (interval) clearInterval(interval); + }; + }, [autoRefreshEnabled, autoRefreshInterval, loadData]); + + const handleSort = (columnKey: string) => { + const column = columns.find(col => col.key === columnKey); + if (!column?.sortable && column?.sortable !== undefined) return; + + if (sortBy === columnKey) { + setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc'); + } else { + setSortBy(columnKey); + setSortDirection('asc'); + } + setPage(0); // Reset to first page when sorting + }; + + const handleFilter = (columnKey: string, value: string) => { + setFilters(prev => ({ + ...prev, + [columnKey]: value + })); + setPage(0); // Reset to first page when filtering + }; + + const clearFilters = () => { + setFilters({}); + setPage(0); + }; + + const handleChangePage = (event: unknown, newPage: number) => { + setPage(newPage); + }; + + const handleChangeRowsPerPage = (event: React.ChangeEvent) => { + setRowsPerPage(parseInt(event.target.value, 10)); + setPage(0); + }; + + const toggleColumn = (columnKey: string) => { + setVisibleColumns(prev => ({ + ...prev, + [columnKey]: !prev[columnKey] + })); + }; + + const activeFiltersCount = Object.values(filters).filter(v => v).length; useEffect(() => { loadData(); @@ -118,7 +233,7 @@ const ConfigDataGrid: React.FC = ({ try { for (const uuid of selectedRows) { - await fetch('/api/idnode/delete', { + await fetch('api/idnode/delete', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ uuid }), @@ -133,7 +248,7 @@ const ConfigDataGrid: React.FC = ({ const handleSave = async () => { try { - const apiUrl = editDialog.isNew ? `/api/${url}` : '/api/idnode/save'; + const apiUrl = editDialog.isNew ? `api/${url}` : 'api/idnode/save'; const method = 'POST'; const body = editDialog.isNew ? { ...editData } @@ -154,7 +269,7 @@ const ConfigDataGrid: React.FC = ({ const handleMove = async (uuid: string, direction: 'up' | 'down') => { try { - await fetch('/api/idnode/move', { + await fetch('api/idnode/move', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ uuid, dir: direction === 'up' ? -1 : 1 }), @@ -232,9 +347,54 @@ const ConfigDataGrid: React.FC = ({ {title} + + {/* Auto-refresh toggle */} + {autoRefresh && ( + setAutoRefreshEnabled(e.target.checked)} + size="small" + /> + } + label="Auto-refresh" + sx={{ mr: 2 }} + /> + )} + + {/* Filters */} + 0 ? `(${activeFiltersCount})` : ''}`}> + setFilterMenuAnchor(e.currentTarget)} + color={activeFiltersCount > 0 ? 'primary' : 'default'} + > + + {activeFiltersCount > 0 && ( + + )} + + + + {/* Column visibility */} + + setColumnMenuAnchor(e.currentTarget)}> + + + + + {helpPage && ( + showHelp(helpPage)}> + + + )} {canAdd && ( )} + {/* Filter Panel */} + + + + Filters: + + + + {columns.filter(col => col.filterable !== false && visibleColumns[col.key]).map((column) => ( + handleFilter(column.key, e.target.value)} + sx={{ minWidth: 200 }} + /> + ))} + + + + @@ -260,9 +444,19 @@ const ConfigDataGrid: React.FC = ({ }} /> - {columns.map((column) => ( + {columns.filter(col => visibleColumns[col.key]).map((column) => ( - {column.label} + {column.sortable !== false ? ( + handleSort(column.key)} + > + {column.label} + + ) : ( + column.label + )} ))} Actions @@ -271,7 +465,7 @@ const ConfigDataGrid: React.FC = ({ {loading ? ( - + visibleColumns[col.key]).length + 2} align="center"> @@ -289,7 +483,7 @@ const ConfigDataGrid: React.FC = ({ }} /> - {columns.map((column) => ( + {columns.filter(col => visibleColumns[col.key]).map((column) => ( {column.type === 'boolean' ? (row[column.key] ? 'Yes' : 'No') @@ -329,8 +523,87 @@ const ConfigDataGrid: React.FC = ({
+ + {/* Pagination */} + {supportsPagination && ( + + `${from}–${to} of ${count !== -1 ? count : `more than ${to}`}` + } + /> + )} + {/* Column Visibility Menu */} + setColumnMenuAnchor(null)} + > + + Show/Hide Columns + {columns.map((column) => ( + toggleColumn(column.key)} + size="small" + /> + } + label={column.label} + sx={{ display: 'block', mb: 0.5 }} + /> + ))} + + + + {/* Filter Menu */} + setFilterMenuAnchor(null)} + > + + + Filters + + + + + {columns.filter(col => col.filterable !== false && visibleColumns[col.key]).slice(0, 3).map((column) => ( + handleFilter(column.key, e.target.value)} + sx={{ mb: 1 }} + /> + ))} + + + + {/* Edit Dialog */} = ({ {editDialog.isNew ? `Add ${titleSingular}` : `Edit ${titleSingular}`} - {columns.map((column) => ( + {columns.filter(col => visibleColumns[col.key]).map((column) => ( {renderEditField(column)} diff --git a/src/webui/modern/src/components/common/HelpSystem.tsx b/src/webui/modern/src/components/common/HelpSystem.tsx new file mode 100644 index 000000000..31186043c --- /dev/null +++ b/src/webui/modern/src/components/common/HelpSystem.tsx @@ -0,0 +1,357 @@ +import React, { useState, useEffect, useCallback } from 'react'; +import { + Dialog, + DialogContent, + DialogActions, + Button, + Box, + Typography, + CircularProgress, + Alert, + AppBar, + Toolbar, + IconButton, + useTheme, + useMediaQuery, +} from '@mui/material'; +import { + Close as CloseIcon, + KeyboardArrowUp as BackToTopIcon, +} from '@mui/icons-material'; +import { marked } from 'marked'; + +interface HelpSystemProps { + open: boolean; + onClose: () => void; + pageName?: string; + initialPage?: string; +} + +interface HelpPage { + name: string; + title: string; +} + +const HelpSystem: React.FC = ({ + open, + onClose, + pageName, + initialPage = 'introduction' +}) => { + const [loading, setLoading] = useState(false); + const [content, setContent] = useState(''); + const [title, setTitle] = useState('Help'); + const [toc, setToc] = useState(''); + const [error, setError] = useState(''); + const [history, setHistory] = useState([]); + + const theme = useTheme(); + const fullScreen = useMediaQuery(theme.breakpoints.down('md')); + + const parseMarkdown = useCallback((text: string): string => { + // Simple markdown parsing - ensure synchronous operation + let html = marked.parse(text) as string; + + // Post-process the HTML to handle internal links + html = html.replace(/]*)>([^<]*)<\/a>/g, (match, href, attrs, text) => { + const x = href.indexOf('#'); + if (href.indexOf(':/') === -1 && (x === -1 || x > 1)) { + return `${text}`; + } + return match; + }); + + // Handle images + html = html.replace(/]*)>/g, (match, src, attrs) => { + let newSrc = src; + if (src.startsWith('images/')) { + newSrc = '/static/img' + src.substring(6); + } else if (src.startsWith('icons/')) { + newSrc = '/static/' + src; + } + return ``; + }); + + // Handle headings with anchors + html = html.replace(/([^<]*)<\/h[1-6]>/g, (match, level, text) => { + const id = text.toLowerCase().replace(/[^\w]+/g, '-'); + return `${text}`; + }); + + return html; + }, []); + + // Load table of contents + const loadToc = useCallback(async () => { + try { + const response = await fetch('/markdown/toc'); + if (!response.ok) throw new Error('Failed to load table of contents'); + const tocText = await response.text(); + setToc(parseMarkdown(tocText)); + } catch (error) { + console.error('Failed to load TOC:', error); + } + }, [parseMarkdown]); + + const getErrorContent = useCallback((): string => { + const errorMsg = `## Not Available + +There's no documentation available, or there was a problem loading the page. + +**You'll also see this page if you try and view documentation (for a feature) not included with your version of Tvheadend.** + +Please take a look at the other Help pages (Table of Contents), if you still can't find what you're looking for please see the [documentation](http://docs.tvheadend.org/documentation) or join the [IRC channel on libera](https://web.libera.chat/?nick=tvhhelp|?#hts).`; + + return parseMarkdown(errorMsg); + }, [parseMarkdown]); + + // Load initial page + const loadPage = useCallback(async (page: string) => { + setLoading(true); + setError(''); + + try { + const response = await fetch(`/markdown/${page}`); + if (!response.ok) { + throw new Error('Page not found'); + } + + const mdText = await response.text(); + const lines = mdText.split('\n'); + const titleLine = lines[0]; + + // Extract title from first line (should start with #) + let pageTitle = 'Help'; + if (titleLine.startsWith('#')) { + pageTitle = titleLine.replace(/^#+\s*/, ''); + } + + setTitle(pageTitle); + setContent(parseMarkdown(mdText)); + + // Add to history + setHistory(prev => { + const newEntry = { name: page, title: pageTitle }; + const filtered = prev.filter(h => h.name !== page); + return [newEntry, ...filtered].slice(0, 5); // Keep last 5 pages + }); + + } catch (err) { + setError('Failed to load help page. The page may not exist or there was a connection error.'); + setContent(getErrorContent()); + setTitle('Not Available'); + } finally { + setLoading(false); + } + }, [parseMarkdown, getErrorContent]); + + useEffect(() => { + if (open && !toc) { + loadToc(); + } + }, [open, toc, loadToc]); + + // Load initial page + useEffect(() => { + if (open) { + const pageToLoad = pageName || initialPage; + loadPage(pageToLoad); + } + }, [open, pageName, initialPage, loadPage]); + + const handleContentClick = (event: React.MouseEvent) => { + const target = event.target as HTMLElement; + const pageLink = target.getAttribute('data-page'); + + if (pageLink) { + event.preventDefault(); + loadPage(pageLink); + return; + } + + const href = target.getAttribute('href'); + if (href && href.startsWith('#')) { + event.preventDefault(); + const id = 'tvh-doc-hdr-' + href.substring(1); + const element = document.getElementById(id); + if (element) { + element.scrollIntoView({ behavior: 'smooth' }); + } + } + }; + + const scrollToTop = () => { + const contentElement = document.getElementById('help-content'); + if (contentElement) { + contentElement.scrollTo({ top: 0, behavior: 'smooth' }); + } + }; + + const renderHistory = () => { + if (history.length === 0) return null; + + return ( + + Last Help Pages + {history.map((page, index) => ( + + {index + 1}. + + ))} + + ); + }; + + return ( + + + + + {title} + + + + + + + + + {/* Table of Contents Sidebar */} + {!fullScreen && toc && ( + + {renderHistory()} +
+ + )} + + {/* Main Content Area */} + + {fullScreen && toc && ( + + {renderHistory()} +
+ Table of Contents +
+
+
+ )} + + {loading && ( + + + + )} + + {error && ( + + {error} + + )} + + {content && ( +
+ )} + + + + + + + +
+ ); +}; + +export default HelpSystem; \ No newline at end of file diff --git a/src/webui/modern/src/components/sections/AccessEntriesSection.tsx b/src/webui/modern/src/components/sections/AccessEntriesSection.tsx index 0c52e9e80..b0b930e6e 100644 --- a/src/webui/modern/src/components/sections/AccessEntriesSection.tsx +++ b/src/webui/modern/src/components/sections/AccessEntriesSection.tsx @@ -23,7 +23,7 @@ const AccessEntriesSection: React.FC = () => { { const [availableLanguages, setAvailableLanguages] = useState([]); const [selectedLanguages, setSelectedLanguages] = useState([]); const [loading, setLoading] = useState(false); + const { showClassHelp } = useHelp(); // Load languages const loadLanguages = async () => { @@ -151,9 +154,17 @@ const BaseConfigSection: React.FC = () => { variant="contained" onClick={handleSave} disabled={loading} + sx={{ mr: 1 }} > Save Configuration + diff --git a/src/webui/modern/src/components/sections/ChannelsSection.tsx b/src/webui/modern/src/components/sections/ChannelsSection.tsx index 70efa0bf9..4e90fc942 100644 --- a/src/webui/modern/src/components/sections/ChannelsSection.tsx +++ b/src/webui/modern/src/components/sections/ChannelsSection.tsx @@ -3,26 +3,133 @@ import ConfigDataGrid, { GridColumn } from '../common/ConfigDataGrid'; const ChannelsSection: React.FC = () => { const columns: GridColumn[] = [ - { key: 'enabled', label: 'Enabled', type: 'boolean', width: 120 }, - { key: 'name', label: 'Name', type: 'text', width: 250 }, - { key: 'number', label: 'Number', type: 'number', width: 100 }, - { key: 'bouquet', label: 'Bouquet', type: 'text', width: 200 }, - { key: 'epgauto', label: 'Auto EPG', type: 'boolean', width: 120 }, - { key: 'dvr_pre_time', label: 'DVR Pre', type: 'number', width: 100 }, - { key: 'dvr_pst_time', label: 'DVR Post', type: 'number', width: 100 }, - { key: 'autorid', label: 'Auto rid', type: 'boolean', width: 100 }, + { + key: 'enabled', + label: 'Enabled', + type: 'boolean', + width: 80, + sortable: true, + filterable: false + }, + { + key: 'name', + label: 'Name', + type: 'text', + width: 200, + sortable: true, + filterable: true + }, + { + key: 'number', + label: 'Number', + type: 'number', + width: 80, + sortable: true, + filterable: false + }, + { + key: 'icon', + label: 'Icon', + type: 'text', + width: 60, + sortable: false, + filterable: false + }, + { + key: 'epgauto', + label: 'Auto EPG', + type: 'boolean', + width: 100, + sortable: true, + filterable: false + }, + { + key: 'epg_parent', + label: 'EPG Parent', + type: 'text', + width: 150, + sortable: true, + filterable: true + }, + { + key: 'bouquet', + label: 'Bouquet', + type: 'text', + width: 150, + sortable: true, + filterable: true + }, + { + key: 'services', + label: 'Services', + type: 'text', + width: 200, + sortable: false, + filterable: true + }, + { + key: 'tags', + label: 'Tags', + type: 'text', + width: 150, + sortable: false, + filterable: true + }, + { + key: 'dvr_pre_time', + label: 'DVR Pre (min)', + type: 'number', + width: 120, + sortable: true, + filterable: false + }, + { + key: 'dvr_pst_time', + label: 'DVR Post (min)', + type: 'number', + width: 120, + sortable: true, + filterable: false + }, + { + key: 'autorid', + label: 'Auto rid', + type: 'boolean', + width: 100, + sortable: true, + filterable: false + } ]; return ( ); }; diff --git a/src/webui/modern/src/components/sections/NetworksSection.tsx b/src/webui/modern/src/components/sections/NetworksSection.tsx index c169c2eda..8ace2a570 100644 --- a/src/webui/modern/src/components/sections/NetworksSection.tsx +++ b/src/webui/modern/src/components/sections/NetworksSection.tsx @@ -3,14 +3,119 @@ import ConfigDataGrid, { GridColumn } from '../common/ConfigDataGrid'; const NetworksSection: React.FC = () => { const columns: GridColumn[] = [ - { key: 'enabled', label: 'Enabled', type: 'boolean', width: 120 }, - { key: 'networkname', label: 'Network Name', type: 'text', width: 250 }, - { key: 'class', label: 'Type', type: 'text', width: 150 }, - { key: 'nid', label: 'Network ID', type: 'number', width: 100 }, - { key: 'autodiscovery', label: 'Auto discovery', type: 'boolean', width: 120 }, - { key: 'skip_initial_scan', label: 'Skip initial scan', type: 'boolean', width: 140 }, - { key: 'bouquet', label: 'Bouquet', type: 'boolean', width: 100 }, - { key: 'charset', label: 'Character set', type: 'text', width: 120 }, + { + key: 'enabled', + label: 'Enabled', + type: 'boolean', + width: 80, + sortable: true, + filterable: false + }, + { + key: 'networkname', + label: 'Network Name', + type: 'text', + width: 200, + sortable: true, + filterable: true + }, + { + key: 'class', + label: 'Type', + type: 'select', + width: 150, + sortable: true, + filterable: true, + options: [ + { key: 'dvb_network_dvbt', val: 'DVB-T Network' }, + { key: 'dvb_network_dvbs', val: 'DVB-S Network' }, + { key: 'dvb_network_dvbc', val: 'DVB-C Network' }, + { key: 'iptv_network', val: 'IPTV Network' }, + { key: 'atsc_network', val: 'ATSC-T Network' }, + { key: 'satip_network', val: 'SAT>IP Network' }, + { key: 'hdhomerun_network', val: 'HDHomeRun Network' }, + ] + }, + { + key: 'pnetworkname', + label: 'Provider Network Name', + type: 'text', + width: 200, + sortable: true, + filterable: true + }, + { + key: 'nid', + label: 'Network ID', + type: 'number', + width: 100, + sortable: true, + filterable: false + }, + { + key: 'autodiscovery', + label: 'Auto discovery', + type: 'boolean', + width: 120, + sortable: true, + filterable: false + }, + { + key: 'skip_initial_scan', + label: 'Skip initial scan', + type: 'boolean', + width: 140, + sortable: true, + filterable: false + }, + { + key: 'bouquet', + label: 'Bouquet', + type: 'boolean', + width: 100, + sortable: true, + filterable: false + }, + { + key: 'charset', + label: 'Character set', + type: 'text', + width: 120, + sortable: true, + filterable: true + }, + { + key: 'num_mux', + label: 'Muxes', + type: 'number', + width: 80, + sortable: true, + filterable: false + }, + { + key: 'num_svc', + label: 'Services', + type: 'number', + width: 80, + sortable: true, + filterable: false + }, + { + key: 'num_chn', + label: 'Channels', + type: 'number', + width: 80, + sortable: true, + filterable: false + }, + { + key: 'scanstatus', + label: 'Scan Status', + type: 'text', + width: 120, + sortable: true, + filterable: true + } ]; return ( @@ -23,6 +128,26 @@ const NetworksSection: React.FC = () => { canEdit={true} canDelete={true} canMove={false} + autoRefresh={true} + autoRefreshInterval={30} + helpPage="class/mpegts_network" + pageSize={50} + supportsPagination={true} + fields={[ + 'enabled', + 'networkname', + 'class', + 'pnetworkname', + 'nid', + 'autodiscovery', + 'skip_initial_scan', + 'bouquet', + 'charset', + 'num_mux', + 'num_svc', + 'num_chn', + 'scanstatus' + ]} /> ); }; diff --git a/src/webui/modern/src/contexts/HelpContext.tsx b/src/webui/modern/src/contexts/HelpContext.tsx new file mode 100644 index 000000000..f54fd0f30 --- /dev/null +++ b/src/webui/modern/src/contexts/HelpContext.tsx @@ -0,0 +1,57 @@ +import React, { createContext, useContext, useState, ReactNode } from 'react'; + +interface HelpContextType { + showHelp: (pageName: string) => void; + showClassHelp: (className: string) => void; + isHelpOpen: boolean; + helpPageName?: string; + closeHelp: () => void; +} + +const HelpContext = createContext(undefined); + +export const useHelp = () => { + const context = useContext(HelpContext); + if (!context) { + throw new Error('useHelp must be used within a HelpProvider'); + } + return context; +}; + +interface HelpProviderProps { + children: ReactNode; +} + +export const HelpProvider: React.FC = ({ children }) => { + const [isHelpOpen, setIsHelpOpen] = useState(false); + const [helpPageName, setHelpPageName] = useState(); + + const showHelp = (pageName: string) => { + setHelpPageName(pageName); + setIsHelpOpen(true); + }; + + const showClassHelp = (className: string) => { + setHelpPageName(`class/${className}`); + setIsHelpOpen(true); + }; + + const closeHelp = () => { + setIsHelpOpen(false); + setHelpPageName(undefined); + }; + + const value: HelpContextType = { + showHelp, + showClassHelp, + isHelpOpen, + helpPageName, + closeHelp, + }; + + return ( + + {children} + + ); +}; \ No newline at end of file diff --git a/src/webui/modern_ui.c b/src/webui/modern_ui.c index 6941f3d13..b17d5bec6 100644 --- a/src/webui/modern_ui.c +++ b/src/webui/modern_ui.c @@ -39,7 +39,7 @@ modern_ui_main(http_connection_t *hc, const char *remain, void *opaque) htsbuf_append_str(hq, " \n"); htsbuf_append_str(hq, " \n"); htsbuf_append_str(hq, " Tvheadend\n"); - htsbuf_append_str(hq, " \n"); + htsbuf_append_str(hq, " \n"); htsbuf_append_str(hq, " \n"); htsbuf_append_str(hq, "\n"); htsbuf_append_str(hq, "\n"); diff --git a/src/webui/static/modern/asset-manifest.json b/src/webui/static/modern/asset-manifest.json index 72e2bdd31..6b996c2c5 100644 --- a/src/webui/static/modern/asset-manifest.json +++ b/src/webui/static/modern/asset-manifest.json @@ -1,15 +1,15 @@ { "files": { "main.css": "/modern/static/css/main.e6c13ad2.css", - "main.js": "/modern/static/js/main.e026e2ae.js", + "main.js": "/modern/static/js/main.1f6a2731.js", "static/js/453.e1dc4197.chunk.js": "/modern/static/js/453.e1dc4197.chunk.js", "index.html": "/modern/index.html", "main.e6c13ad2.css.map": "/modern/static/css/main.e6c13ad2.css.map", - "main.e026e2ae.js.map": "/modern/static/js/main.e026e2ae.js.map", + "main.1f6a2731.js.map": "/modern/static/js/main.1f6a2731.js.map", "453.e1dc4197.chunk.js.map": "/modern/static/js/453.e1dc4197.chunk.js.map" }, "entrypoints": [ "static/css/main.e6c13ad2.css", - "static/js/main.e026e2ae.js" + "static/js/main.1f6a2731.js" ] } \ No newline at end of file diff --git a/src/webui/static/modern/index.html b/src/webui/static/modern/index.html index 1691aefd0..3d1d4a29d 100644 --- a/src/webui/static/modern/index.html +++ b/src/webui/static/modern/index.html @@ -1 +1 @@ -React App
\ No newline at end of file +React App
\ No newline at end of file diff --git a/src/webui/static/modern/static/js/main.1f6a2731.js b/src/webui/static/modern/static/js/main.1f6a2731.js new file mode 100644 index 000000000..20a2c09e4 --- /dev/null +++ b/src/webui/static/modern/static/js/main.1f6a2731.js @@ -0,0 +1,3 @@ +/*! For license information please see main.1f6a2731.js.LICENSE.txt */ +(()=>{var e={191:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler");Symbol.for("react.provider");var l=Symbol.for("react.consumer"),s=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),d=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),h=Symbol.for("react.view_transition"),m=Symbol.for("react.client.reference");function g(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case o:case i:case a:case c:case d:case h:return e;default:switch(e=e&&e.$$typeof){case s:case u:case f:case p:case l:return e;default:return t}}case r:return t}}}t.vM=u,t.lD=p},219:(e,t,n)=>{"use strict";var r=n(3763),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!==typeof n){if(h){var o=f(n);o&&o!==h&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),m=s(n),g=0;g{"use strict";n.r(t),n.d(t,{default:()=>r.A});var r=n(7868)},579:(e,t,n)=>{"use strict";e.exports=n(2799)},869:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(5043);var r=n(3290),o=n(579);function a(e){const{styles:t,defaultTheme:n={}}=e,a="function"===typeof t?e=>{return t(void 0===(r=e)||null===r||0===Object.keys(r).length?n:e);var r}:t;return(0,o.jsx)(r.mL,{styles:a})}},918:(e,t,n)=>{"use strict";function r(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}n.d(t,{A:()=>r})},1188:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MIN_SAFE_INTEGER,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Number.MAX_SAFE_INTEGER;return Math.max(t,Math.min(e,n))}},1722:(e,t,n)=>{"use strict";n.d(t,{Rk:()=>r,SF:()=>o,sk:()=>a});function r(e,t,n){var r="";return n.split(" ").forEach(function(n){void 0!==e[n]?t.push(e[n]+";"):n&&(r+=n+" ")}),r}var o=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},a=function(e,t,n){o(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+r:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}},2374:(e,t,n)=>{"use strict";t.A=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=a(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var l=o?Object.getOwnPropertyDescriptor(e,i):null;l&&(l.get||l.set)?Object.defineProperty(r,i,l):r[i]=e[i]}return r.default=e,n&&n.set(e,r),r}(n(5043)),o=n(3174);function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(a=function(e){return e?n:t})(e)}t.A=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;const t=r.useContext(o.ThemeContext);return t&&(n=t,0!==Object.keys(n).length)?t:e;var n}},2799:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function o(e,t,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==t.key&&(o=""+t.key),"key"in t)for(var a in r={},t)"key"!==a&&(r[a]=t[a]);else r=t;return t=r.ref,{$$typeof:n,type:e,key:o,ref:void 0!==t?t:null,props:r}}t.Fragment=r,t.jsx=o,t.jsxs=o},3174:(e,t,n)=>{"use strict";n.r(t),n.d(t,{GlobalStyles:()=>F.A,StyledEngineProvider:()=>x,ThemeContext:()=>o.T,css:()=>v.AH,default:()=>C,internal_processStyles:()=>w,internal_serializeStyles:()=>k,keyframes:()=>v.i7});var r=n(8168),o=n(9369),a=n(6598),i=n(9436),l=n(1722),s=n(5043),u=n(918),c=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|popover|popoverTarget|popoverTargetAction|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|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|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|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|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,d=(0,u.A)(function(e){return c.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91}),p=function(e){return"theme"!==e},f=function(e){return"string"===typeof e&&e.charCodeAt(0)>96?d:p},h=function(e,t,n){var r;if(t){var o=t.shouldForwardProp;r=e.__emotion_forwardProp&&o?function(t){return e.__emotion_forwardProp(t)&&o(t)}:o}return"function"!==typeof r&&n&&(r=e.__emotion_forwardProp),r},m=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;return(0,l.SF)(t,n,r),(0,i.s)(function(){return(0,l.sk)(t,n,r)}),null},g=function e(t,n){var i,u,c=t.__emotion_real===t,d=c&&t.__emotion_base||t;void 0!==n&&(i=n.label,u=n.target);var p=h(t,n,c),g=p||f(d),v=!g("as");return function(){var b=arguments,y=c&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==i&&y.push("label:"+i+";"),null==b[0]||void 0===b[0].raw)y.push.apply(y,b);else{var D=b[0];y.push(D[0]);for(var x=b.length,F=1;F{const e="".concat(t,"-").concat(n);if("object"===typeof document&&D.has(e))return D.get(e);const r=function(e,t){const n=(0,b.A)({key:"css",prepend:e});if(t){const e=n.insert;n.insert=function(){for(var t=arguments.length,n=new Array(t),r=0;r{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))},E=[];function k(e){return E[0]=e,(0,a.J)(E)}},3234:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r.A,extendSxProp:()=>o.A,unstable_createStyleFunctionSx:()=>r.k,unstable_defaultSxConfig:()=>a.A});var r=n(8812),o=n(8698),a=n(7758)},3290:(e,t,n)=>{"use strict";n.d(t,{AH:()=>c,i7:()=>d,mL:()=>u});var r=n(9369),o=n(5043),a=n(1722),i=n(9436),l=n(6598),s=(n(3803),n(219),function(e,t){var n=arguments;if(null==t||!r.h.call(t,"css"))return o.createElement.apply(void 0,n);var a=n.length,i=new Array(a);i[0]=r.E,i[1]=(0,r.c)(e,t);for(var l=2;l{"use strict";n.r(t),n.d(t,{default:()=>s,getFunctionName:()=>a});var r=n(191);const o=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function a(e){const t="".concat(e).match(o);return t&&t[1]||""}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e.displayName||e.name||a(e)||t}function l(e,t,n){const r=i(t);return e.displayName||(""!==r?"".concat(n,"(").concat(r,")"):n)}function s(e){if(null!=e){if("string"===typeof e)return e;if("function"===typeof e)return i(e,"Component");if("object"===typeof e)switch(e.$$typeof){case r.vM:return l(e,e.render,"ForwardRef");case r.lD:return l(e,e.type,"memo");default:return}}}},3763:(e,t,n)=>{"use strict";e.exports=n(4983)},3803:(e,t,n)=>{"use strict";n.d(t,{A:()=>oe});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t0?c(D,--b):0,g--,10===y&&(g=1,m--),y}function w(){return y=b2||S(y)>3?"":" "}function T(e,t){for(;--t&&w()&&!(y<48||y>102||y>57&&y<65||y>70&&y<97););return A(e,k()+(t<6&&32==E()&&32==w()))}function M(e){for(;w();)switch(y){case e:return b;case 34:case 39:34!==e&&39!==e&&M(y);break;case 40:41===e&&M(e);break;case 92:w()}return b}function z(e,t){for(;w()&&e+y!==57&&(e+y!==84||47!==E()););return"/*"+A(t,b-1)+"*"+a(47===e?e:w())}function N(e){for(;!S(E());)w();return A(e,b)}var L="-ms-",O="-moz-",I="-webkit-",_="comm",W="rule",H="decl",V="@keyframes";function $(e,t){for(var n="",r=f(e),o=0;o0&&p(O)-v&&h(y>32?Y(O+";",r,n,v-1):Y(s(O," ","")+";",r,n,v-2),f);break;case 59:O+=";";default:if(h(L=X(O,t,n,m,g,o,d,j,B=[],M=[],v),i),123===S)if(0===g)G(O,t,L,L,B,i,v,d,M);else switch(99===b&&110===c(O,3)?100:b){case 100:case 108:case 109:case 115:G(e,L,L,r&&h(X(e,L,L,0,0,o,d,j,o,B=[],v),M),o,M,v,d,r?B:M);break;default:G(O,L,L,L,[""],M,0,d,M)}}m=g=y=0,x=A=1,j=O="",v=l;break;case 58:v=1+p(O),y=D;default:if(x<1)if(123==S)--x;else if(125==S&&0==x++&&125==C())continue;switch(O+=a(S),S*x){case 38:A=g>0?1:(O+="\f",-1);break;case 44:d[m++]=(p(O)-1)*A,A=1;break;case 64:45===E()&&(O+=R(w())),b=E(),g=v=p(j=O+=N(k())),S++;break;case 45:45===D&&2==p(O)&&(x=0)}}return i}function X(e,t,n,r,a,i,u,c,p,h,m){for(var g=a-1,v=0===a?i:[""],b=f(v),y=0,D=0,F=0;y0?v[C]+" "+w:s(w,/&\f/g,v[C])))&&(p[F++]=E);return x(e,t,n,0===a?W:c,p,h,m)}function K(e,t,n){return x(e,t,n,_,a(y),d(e,2,-2),0)}function Y(e,t,n,r){return x(e,t,n,H,d(e,0,r),d(e,r+1,-1),r)}var Q=function(e,t,n){for(var r=0,o=0;r=o,o=E(),38===r&&12===o&&(t[n]=1),!S(o);)w();return A(e,b)},Z=function(e,t){return B(function(e,t){var n=-1,r=44;do{switch(S(r)){case 0:38===r&&12===E()&&(t[n]=1),e[n]+=Q(b-1,t,n);break;case 2:e[n]+=R(r);break;case 4:if(44===r){e[++n]=58===E()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=a(r)}}while(r=w());return e}(j(e),t))},J=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||J.get(n))&&!r){J.set(e,!0);for(var o=[],a=Z(t,o),i=n.props,l=0,s=0;l6)switch(c(e,t+1)){case 109:if(45!==c(e,t+4))break;case 102:return s(e,/(.+:)(.+)-([^]+)/,"$1"+I+"$2-$3$1"+O+(108==c(e,t+3)?"$3":"$2-$3"))+e;case 115:return~u(e,"stretch")?ne(s(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==c(e,t+1))break;case 6444:switch(c(e,p(e)-3-(~u(e,"!important")&&10))){case 107:return s(e,":",":"+I)+e;case 101:return s(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+I+(45===c(e,14)?"inline-":"")+"box$3$1"+I+"$2$3$1"+L+"$2box$3")+e}break;case 5936:switch(c(e,t+11)){case 114:return I+e+L+s(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return I+e+L+s(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return I+e+L+s(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return I+e+L+e+e}return e}var re=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case H:e.return=ne(e.value,e.length);break;case V:return $([F(e,{value:s(e.value,"@","@"+I)})],r);case W:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return $([F(e,{props:[s(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return $([F(e,{props:[s(t,/:(plac\w+)/,":"+I+"input-$1")]}),F(e,{props:[s(t,/:(plac\w+)/,":-moz-$1")]}),F(e,{props:[s(t,/:(plac\w+)/,L+"input-$1")]})],r)}return""})}}],oe=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))})}var o,a,i=e.stylisPlugins||re,l={},s=[];o=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n{"use strict";n.d(t,{A:()=>o});var r=n(9172);const o=function(e,t){return t?(0,r.A)(e,t,{clone:!1}):e}},4288:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),l=Symbol.for("react.consumer"),s=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,g={};function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}function b(){}function y(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if("object"!==typeof e&&"function"!==typeof e&&null!=e)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},b.prototype=v.prototype;var D=y.prototype=new b;D.constructor=y,m(D,v.prototype),D.isPureReactComponent=!0;var x=Array.isArray,F={H:null,A:null,T:null,S:null,V:null},C=Object.prototype.hasOwnProperty;function w(e,t,r,o,a,i){return r=i.ref,{$$typeof:n,type:e,key:t,ref:void 0!==r?r:null,props:i}}function E(e){return"object"===typeof e&&null!==e&&e.$$typeof===n}var k=/\/+/g;function A(e,t){return"object"===typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(e){return t[e]})}(""+e.key):t.toString(36)}function S(){}function j(e,t,o,a,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s,u,c=!1;if(null===e)c=!0;else switch(l){case"bigint":case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case n:case r:c=!0;break;case p:return j((c=e._init)(e._payload),t,o,a,i)}}if(c)return i=i(e),c=""===a?"."+A(e,0):a,x(i)?(o="",null!=c&&(o=c.replace(k,"$&/")+"/"),j(i,t,o,"",function(e){return e})):null!=i&&(E(i)&&(s=i,u=o+(null==i.key||e&&e.key===i.key?"":(""+i.key).replace(k,"$&/")+"/")+c,i=w(s.type,u,void 0,0,0,s.props)),t.push(i)),1;c=0;var d,h=""===a?".":a+":";if(x(e))for(var m=0;m{"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(7004)},4634:e=>{function t(){return e.exports=t=Object.assign?Object.assign.bind():function(e){for(var t=1;t{"use strict";n.d(t,{A:()=>l});var r=n(8587),o=n(8168);const a=["values","unit","step"],i=e=>{const t=Object.keys(e).map(t=>({key:t,val:e[t]}))||[];return t.sort((e,t)=>e.val-t.val),t.reduce((e,t)=>(0,o.A)({},e,{[t.key]:t.val}),{})};function l(e){const{values:t={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:n="px",step:l=5}=e,s=(0,r.A)(e,a),u=i(t),c=Object.keys(u);function d(e){const r="number"===typeof t[e]?t[e]:e;return"@media (min-width:".concat(r).concat(n,")")}function p(e){const r="number"===typeof t[e]?t[e]:e;return"@media (max-width:".concat(r-l/100).concat(n,")")}function f(e,r){const o=c.indexOf(r);return"@media (min-width:".concat("number"===typeof t[e]?t[e]:e).concat(n,") and ")+"(max-width:".concat((-1!==o&&"number"===typeof t[c[o]]?t[c[o]]:r)-l/100).concat(n,")")}return(0,o.A)({keys:c,values:u,up:d,down:p,between:f,only:function(e){return c.indexOf(e)+1{e.exports=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n},e.exports.__esModule=!0,e.exports.default=e.exports},4983:(e,t)=>{"use strict";var n="function"===typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,h=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,D=n?Symbol.for("react.scope"):60119;function x(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case f:return e;default:switch(e=e&&e.$$typeof){case u:case p:case g:case m:case s:return e;default:return t}}case o:return t}}}function F(e){return x(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=m,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return F(e)||x(e)===c},t.isConcurrentMode=F,t.isContextConsumer=function(e){return x(e)===u},t.isContextProvider=function(e){return x(e)===s},t.isElement=function(e){return"object"===typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return x(e)===p},t.isFragment=function(e){return x(e)===a},t.isLazy=function(e){return x(e)===g},t.isMemo=function(e){return x(e)===m},t.isPortal=function(e){return x(e)===o},t.isProfiler=function(e){return x(e)===l},t.isStrictMode=function(e){return x(e)===i},t.isSuspense=function(e){return x(e)===f},t.isValidElementType=function(e){return"string"===typeof e||"function"===typeof e||e===a||e===d||e===l||e===i||e===f||e===h||"object"===typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===m||e.$$typeof===s||e.$$typeof===u||e.$$typeof===p||e.$$typeof===b||e.$$typeof===y||e.$$typeof===D||e.$$typeof===v)},t.typeOf=x},4989:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r.A,private_createBreakpoints:()=>o.A,unstable_applyStyles:()=>a.A});var r=n(8280),o=n(4853),a=n(9703)},4994:e=>{e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},5043:(e,t,n)=>{"use strict";e.exports=n(4288)},5896:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0>>1,o=e[r];if(!(0>>1;ra(s,n))ua(c,s)?(e[r]=c,e[u]=n,r=u):(e[r]=s,e[l]=n,r=l);else{if(!(ua(c,n)))break e;e[r]=c,e[u]=n,r=u}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(t.unstable_now=void 0,"object"===typeof performance&&"function"===typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}var u=[],c=[],d=1,p=null,f=3,h=!1,m=!1,g=!1,v=!1,b="function"===typeof setTimeout?setTimeout:null,y="function"===typeof clearTimeout?clearTimeout:null,D="undefined"!==typeof setImmediate?setImmediate:null;function x(e){for(var t=r(c);null!==t;){if(null===t.callback)o(c);else{if(!(t.startTime<=e))break;o(c),t.sortIndex=t.expirationTime,n(u,t)}t=r(c)}}function F(e){if(g=!1,x(e),!m)if(null!==r(u))m=!0,w||(w=!0,C());else{var t=r(c);null!==t&&P(F,t.startTime-e)}}var C,w=!1,E=-1,k=5,A=-1;function S(){return!!v||!(t.unstable_now()-Ae&&S());){var i=p.callback;if("function"===typeof i){p.callback=null,f=p.priorityLevel;var l=i(p.expirationTime<=e);if(e=t.unstable_now(),"function"===typeof l){p.callback=l,x(e),n=!0;break t}p===r(u)&&o(u),x(e)}else o(u);p=r(u)}if(null!==p)n=!0;else{var s=r(c);null!==s&&P(F,s.startTime-e),n=!1}}break e}finally{p=null,f=a,h=!1}n=void 0}}finally{n?C():w=!1}}}if("function"===typeof D)C=function(){D(j)};else if("undefined"!==typeof MessageChannel){var B=new MessageChannel,R=B.port2;B.port1.onmessage=j,C=function(){R.postMessage(null)}}else C=function(){b(j,0)};function P(e,n){E=b(function(){e(t.unstable_now())},n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_forceFrameRate=function(e){0>e||125i?(e.sortIndex=a,n(c,e),null===r(u)&&e===r(c)&&(g?(y(E),E=-1):g=!0,P(F,a-i))):(e.sortIndex=l,n(u,e),m||h||(m=!0,w||(w=!0,C()))),e},t.unstable_shouldYield=S,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},6531:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r.A});var r=n(1188)},6598:(e,t,n)=>{"use strict";n.d(t,{J:()=>g});var r={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},o=n(918),a=!1,i=/[A-Z]|^ms/g,l=/_EMO_([^_]+?)_([^]*?)_EMO_/g,s=function(e){return 45===e.charCodeAt(1)},u=function(e){return null!=e&&"boolean"!==typeof e},c=(0,o.A)(function(e){return s(e)?e:e.replace(i,"-$&").toLowerCase()}),d=function(e,t){switch(e){case"animation":case"animationName":if("string"===typeof t)return t.replace(l,function(e,t,n){return h={name:t,styles:n,next:h},t})}return 1===r[e]||s(e)||"number"!==typeof t||0===t?t:t+"px"},p="Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";function f(e,t,n){if(null==n)return"";var r=n;if(void 0!==r.__emotion_styles)return r;switch(typeof n){case"boolean":return"";case"object":var o=n;if(1===o.anim)return h={name:o.name,styles:o.styles,next:h},o.name;var i=n;if(void 0!==i.styles){var l=i.next;if(void 0!==l)for(;void 0!==l;)h={name:l.name,styles:l.styles,next:h},l=l.next;return i.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(o)+s;return{name:u,styles:o,next:h}}},6672:(e,t,n)=>{"use strict";var r=n(5043);function o(e){var t="https://react.dev/errors/"+e;if(1{"use strict";var r=n(8853),o=n(5043),a=n(7950);function i(e){var t="https://react.dev/errors/"+e;if(1O||(e.current=L[O],L[O]=null,O--)}function W(e,t){O++,L[O]=e.current,e.current=t}var H=I(null),V=I(null),$=I(null),U=I(null);function q(e,t){switch(W($,t),W(V,e),W(H,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?od(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)e=ad(t=od(t),e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}_(H),W(H,e)}function G(){_(H),_(V),_($)}function X(e){null!==e.memoizedState&&W(U,e);var t=H.current,n=ad(t,e.type);t!==n&&(W(V,e),W(H,n))}function K(e){V.current===e&&(_(H),_(V)),U.current===e&&(_(U),Xd._currentValue=N)}var Y=Object.prototype.hasOwnProperty,Q=r.unstable_scheduleCallback,Z=r.unstable_cancelCallback,J=r.unstable_shouldYield,ee=r.unstable_requestPaint,te=r.unstable_now,ne=r.unstable_getCurrentPriorityLevel,re=r.unstable_ImmediatePriority,oe=r.unstable_UserBlockingPriority,ae=r.unstable_NormalPriority,ie=r.unstable_LowPriority,le=r.unstable_IdlePriority,se=r.log,ue=r.unstable_setDisableYieldValue,ce=null,de=null;function pe(e){if("function"===typeof se&&ue(e),de&&"function"===typeof de.setStrictMode)try{de.setStrictMode(ce,e)}catch(t){}}var fe=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(he(e)/me|0)|0},he=Math.log,me=Math.LN2;var ge=256,ve=4194304;function be(e){var t=42&e;if(0!==t)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 16777216:case 33554432:return 62914560&e;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function ye(e,t,n){var r=e.pendingLanes;if(0===r)return 0;var o=0,a=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var l=134217727&r;return 0!==l?0!==(r=l&~a)?o=be(r):0!==(i&=l)?o=be(i):n||0!==(n=l&~e)&&(o=be(n)):0!==(l=r&~a)?o=be(l):0!==i?o=be(i):n||0!==(n=r&~e)&&(o=be(n)),0===o?0:0!==t&&t!==o&&0===(t&a)&&((a=o&-o)>=(n=t&-t)||32===a&&0!==(4194048&n))?t:o}function De(e,t){return 0===(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)}function xe(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function Fe(){var e=ge;return 0===(4194048&(ge<<=1))&&(ge=256),e}function Ce(){var e=ve;return 0===(62914560&(ve<<=1))&&(ve=4194304),e}function we(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ee(e,t){e.pendingLanes|=t,268435456!==t&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ke(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var r=31-fe(t);e.entangledLanes|=t,e.entanglements[r]=1073741824|e.entanglements[r]|4194090&n}function Ae(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-fe(n),o=1<)":-1--o||s[r]!==u[o]){var c="\n"+s[r].replace(" at new "," at ");return e.displayName&&c.includes("")&&(c=c.replace("",e.displayName)),c}}while(1<=r&&0<=o);break}}}finally{at=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?ot(n):""}function lt(e){switch(e.tag){case 26:case 27:case 5:return ot(e.type);case 16:return ot("Lazy");case 13:return ot("Suspense");case 19:return ot("SuspenseList");case 0:case 15:return it(e.type,!1);case 11:return it(e.type.render,!1);case 1:return it(e.type,!0);case 31:return ot("Activity");default:return""}}function st(e){try{var t="";do{t+=lt(e),e=e.return}while(e);return t}catch(n){return"\nError generating stack: "+n.message+"\n"+n.stack}}function ut(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function ct(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function dt(e){e._valueTracker||(e._valueTracker=function(e){var t=ct(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&"undefined"!==typeof n&&"function"===typeof n.get&&"function"===typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function pt(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ct(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function ft(e){if("undefined"===typeof(e=e||("undefined"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}var ht=/[\n"\\]/g;function mt(e){return e.replace(ht,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function gt(e,t,n,r,o,a,i,l){e.name="",null!=i&&"function"!==typeof i&&"symbol"!==typeof i&&"boolean"!==typeof i?e.type=i:e.removeAttribute("type"),null!=t?"number"===i?(0===t&&""===e.value||e.value!=t)&&(e.value=""+ut(t)):e.value!==""+ut(t)&&(e.value=""+ut(t)):"submit"!==i&&"reset"!==i||e.removeAttribute("value"),null!=t?bt(e,i,ut(t)):null!=n?bt(e,i,ut(n)):null!=r&&e.removeAttribute("value"),null==o&&null!=a&&(e.defaultChecked=!!a),null!=o&&(e.checked=o&&"function"!==typeof o&&"symbol"!==typeof o),null!=l&&"function"!==typeof l&&"symbol"!==typeof l&&"boolean"!==typeof l?e.name=""+ut(l):e.removeAttribute("name")}function vt(e,t,n,r,o,a,i,l){if(null!=a&&"function"!==typeof a&&"symbol"!==typeof a&&"boolean"!==typeof a&&(e.type=a),null!=t||null!=n){if(!("submit"!==a&&"reset"!==a||void 0!==t&&null!==t))return;n=null!=n?""+ut(n):"",t=null!=t?""+ut(t):n,l||t===e.value||(e.value=t),e.defaultValue=t}r="function"!==typeof(r=null!=r?r:o)&&"symbol"!==typeof r&&!!r,e.checked=l?e.checked:!!r,e.defaultChecked=!!r,null!=i&&"function"!==typeof i&&"symbol"!==typeof i&&"boolean"!==typeof i&&(e.name=i)}function bt(e,t,n){"number"===t&&ft(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function yt(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o=Cn),kn=String.fromCharCode(32),An=!1;function Sn(e,t){switch(e){case"keyup":return-1!==xn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function jn(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}var Bn=!1;var Rn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Pn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Rn[e.type]:"textarea"===t}function Tn(e,t,n,r){Pt?Tt?Tt.push(r):Tt=[r]:Pt=r,0<(t=$c(t,"onChange")).length&&(n=new Jt("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Mn=null,zn=null;function Nn(e){Nc(e,0)}function Ln(e){if(pt(Ve(e)))return e}function On(e,t){if("change"===e)return t}var In=!1;if(Ot){var _n;if(Ot){var Wn="oninput"in document;if(!Wn){var Hn=document.createElement("div");Hn.setAttribute("oninput","return;"),Wn="function"===typeof Hn.oninput}_n=Wn}else _n=!1;In=_n&&(!document.documentMode||9=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Qn(r)}}function Jn(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?Jn(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function er(e){for(var t=ft((e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window).document);t instanceof e.HTMLIFrameElement;){try{var n="string"===typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=ft((e=t.contentWindow).document)}return t}function tr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var nr=Ot&&"documentMode"in document&&11>=document.documentMode,rr=null,or=null,ar=null,ir=!1;function lr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;ir||null==rr||rr!==ft(r)||("selectionStart"in(r=rr)&&tr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},ar&&Yn(ar,r)||(ar=r,0<(r=$c(or,"onSelect")).length&&(t=new Jt("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=rr)))}function sr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var ur={animationend:sr("Animation","AnimationEnd"),animationiteration:sr("Animation","AnimationIteration"),animationstart:sr("Animation","AnimationStart"),transitionrun:sr("Transition","TransitionRun"),transitionstart:sr("Transition","TransitionStart"),transitioncancel:sr("Transition","TransitionCancel"),transitionend:sr("Transition","TransitionEnd")},cr={},dr={};function pr(e){if(cr[e])return cr[e];if(!ur[e])return e;var t,n=ur[e];for(t in n)if(n.hasOwnProperty(t)&&t in dr)return cr[e]=n[t];return e}Ot&&(dr=document.createElement("div").style,"AnimationEvent"in window||(delete ur.animationend.animation,delete ur.animationiteration.animation,delete ur.animationstart.animation),"TransitionEvent"in window||delete ur.transitionend.transition);var fr=pr("animationend"),hr=pr("animationiteration"),mr=pr("animationstart"),gr=pr("transitionrun"),vr=pr("transitionstart"),br=pr("transitioncancel"),yr=pr("transitionend"),Dr=new Map,xr="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Fr(e,t){Dr.set(e,t),Xe(t,[e])}xr.push("scrollEnd");var Cr=new WeakMap;function wr(e,t){if("object"===typeof e&&null!==e){var n=Cr.get(e);return void 0!==n?n:(t={value:e,source:t,stack:st(t)},Cr.set(e,t),t)}return{value:e,source:t,stack:st(t)}}var Er=[],kr=0,Ar=0;function Sr(){for(var e=kr,t=Ar=kr=0;t>=i,o-=i,Qr=1<<32-fe(t)+o|n<a?a:8;var i=M.T,l={};M.T=l,Wi(e,!1,t,n);try{var s=o(),u=M.S;if(null!==u&&u(l,s),null!==s&&"object"===typeof s&&"function"===typeof s.then)_i(e,t,function(e,t){var n=[],r={status:"pending",value:null,reason:null,then:function(e){n.push(e)}};return e.then(function(){r.status="fulfilled",r.value=t;for(var e=0;eh?(m=d,d=null):m=d.sibling;var g=f(o,d,l[h],s);if(null===g){null===d&&(d=m);break}e&&d&&null===g.alternate&&t(o,d),i=a(g,i,h),null===c?u=g:c.sibling=g,c=g,d=m}if(h===l.length)return n(o,d),ao&&Jr(o,h),u;if(null===d){for(;hm?(g=h,h=null):g=h.sibling;var y=f(o,h,b.value,u);if(null===y){null===h&&(h=g);break}e&&h&&null===y.alternate&&t(o,h),l=a(y,l,m),null===d?c=y:d.sibling=y,d=y,h=g}if(b.done)return n(o,h),ao&&Jr(o,m),c;if(null===h){for(;!b.done;m++,b=s.next())null!==(b=p(o,b.value,u))&&(l=a(b,l,m),null===d?c=b:d.sibling=b,d=b);return ao&&Jr(o,m),c}for(h=r(h);!b.done;m++,b=s.next())null!==(b=v(h,o,m,b.value,u))&&(e&&null!==b.alternate&&h.delete(null===b.key?m:b.key),l=a(b,l,m),null===d?c=b:d.sibling=b,d=b);return e&&h.forEach(function(e){return t(o,e)}),ao&&Jr(o,m),c}(s,u,c=y.call(c),d)}if("function"===typeof c.then)return b(s,u,Qi(c),d);if(c.$$typeof===x)return b(s,u,So(s,c),d);Ji(s,c)}return"string"===typeof c&&""!==c||"number"===typeof c||"bigint"===typeof c?(c=""+c,null!==u&&6===u.tag?(n(s,u.sibling),(d=o(u,c)).return=s,s=d):(n(s,u),(d=Hr(c,s.mode,d)).return=s,s=d),l(s)):n(s,u)}return function(e,t,n,r){try{Yi=0;var o=b(e,t,n,r);return Ki=null,o}catch(i){if(i===qo||i===Xo)throw i;var a=Nr(29,i,null,e.mode);return a.lanes=r,a.return=e,a}}}var nl=tl(!0),rl=tl(!1),ol=I(null),al=null;function il(e){var t=e.alternate;W(cl,1&cl.current),W(ol,e),null===al&&(null===t||null!==ha.current||null!==t.memoizedState)&&(al=e)}function ll(e){if(22===e.tag){if(W(cl,cl.current),W(ol,e),null===al){var t=e.alternate;null!==t&&null!==t.memoizedState&&(al=e)}}else sl()}function sl(){W(cl,cl.current),W(ol,ol.current)}function ul(e){_(ol),al===e&&(al=null),_(cl)}var cl=I(0);function dl(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||gd(n)))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!==(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function pl(e,t,n,r){n=null===(n=n(r,t=e.memoizedState))||void 0===n?t:p({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var fl={enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Mu(),o=aa(r);o.payload=t,void 0!==n&&null!==n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Nu(t,e,r),la(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Mu(),o=aa(r);o.tag=1,o.payload=t,void 0!==n&&null!==n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Nu(t,e,r),la(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Mu(),r=aa(n);r.tag=2,void 0!==t&&null!==t&&(r.callback=t),null!==(t=ia(e,r,n))&&(Nu(t,e,n),la(t,e,n))}};function hl(e,t,n,r,o,a,i){return"function"===typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!Yn(n,r)||!Yn(o,a))}function ml(e,t,n,r){e=t.state,"function"===typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"===typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&fl.enqueueReplaceState(t,t.state,null)}function gl(e,t){var n=t;if("ref"in t)for(var r in n={},t)"ref"!==r&&(n[r]=t[r]);if(e=e.defaultProps)for(var o in n===t&&(n=p({},n)),e)void 0===n[o]&&(n[o]=e[o]);return n}var vl="function"===typeof reportError?reportError:function(e){if("object"===typeof window&&"function"===typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"===typeof e&&null!==e&&"string"===typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"===typeof process&&"function"===typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function bl(e){vl(e)}function yl(e){console.error(e)}function Dl(e){vl(e)}function xl(e,t){try{(0,e.onUncaughtError)(t.value,{componentStack:t.stack})}catch(n){setTimeout(function(){throw n})}}function Fl(e,t,n){try{(0,e.onCaughtError)(n.value,{componentStack:n.stack,errorBoundary:1===t.tag?t.stateNode:null})}catch(r){setTimeout(function(){throw r})}}function Cl(e,t,n){return(n=aa(n)).tag=3,n.payload={element:null},n.callback=function(){xl(e,t)},n}function wl(e){return(e=aa(e)).tag=3,e}function El(e,t,n,r){var o=n.type.getDerivedStateFromError;if("function"===typeof o){var a=r.value;e.payload=function(){return o(a)},e.callback=function(){Fl(t,n,r)}}var i=n.stateNode;null!==i&&"function"===typeof i.componentDidCatch&&(e.callback=function(){Fl(t,n,r),"function"!==typeof o&&(null===wu?wu=new Set([this]):wu.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:null!==e?e:""})})}var kl=Error(i(461)),Al=!1;function Sl(e,t,n,r){t.child=null===e?rl(t,null,n,r):nl(t,e.child,n,r)}function jl(e,t,n,r,o){n=n.render;var a=t.ref;if("ref"in r){var i={};for(var l in r)"ref"!==l&&(i[l]=r[l])}else i=r;return ko(t),r=Pa(e,t,n,i,a,o),l=Na(),null===e||Al?(ao&&l&&to(t),t.flags|=1,Sl(e,t,r,o),t.child):(La(e,t,o),Kl(e,t,o))}function Bl(e,t,n,r,o){if(null===e){var a=n.type;return"function"!==typeof a||Lr(a)||void 0!==a.defaultProps||null!==n.compare?((e=_r(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Rl(e,t,a,r,o))}if(a=e.child,!Yl(e,o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:Yn)(i,r)&&e.ref===t.ref)return Kl(e,t,o)}return t.flags|=1,(e=Or(a,r)).ref=t.ref,e.return=t,t.child=e}function Rl(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(Yn(a,r)&&e.ref===t.ref){if(Al=!1,t.pendingProps=r=a,!Yl(e,o))return t.lanes=e.lanes,Kl(e,t,o);0!==(131072&e.flags)&&(Al=!0)}}return zl(e,t,n,r,o)}function Pl(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode){if(0!==(128&t.flags)){if(r=null!==a?a.baseLanes|n:n,null!==e){for(o=t.child=e.child,a=0;null!==o;)a=a|o.lanes|o.childLanes,o=o.sibling;t.childLanes=a&~r}else t.childLanes=0,t.child=null;return Tl(e,t,r,n)}if(0===(536870912&n))return t.lanes=t.childLanes=536870912,Tl(e,t,null!==a?a.baseLanes|n:n,n);t.memoizedState={baseLanes:0,cachePool:null},null!==e&&$o(0,null!==a?a.cachePool:null),null!==a?ga(t,a):va(),ll(t)}else null!==a?($o(0,a.cachePool),ga(t,a),sl(),t.memoizedState=null):(null!==e&&$o(0,null),va(),sl());return Sl(e,t,o,n),t.child}function Tl(e,t,n,r){var o=Vo();return o=null===o?null:{parent:To._currentValue,pool:o},t.memoizedState={baseLanes:n,cachePool:o},null!==e&&$o(0,null),va(),ll(t),null!==e&&wo(e,t,r,!0),null}function Ml(e,t){var n=t.ref;if(null===n)null!==e&&null!==e.ref&&(t.flags|=4194816);else{if("function"!==typeof n&&"object"!==typeof n)throw Error(i(284));null!==e&&e.ref===n||(t.flags|=4194816)}}function zl(e,t,n,r,o){return ko(t),n=Pa(e,t,n,r,void 0,o),r=Na(),null===e||Al?(ao&&r&&to(t),t.flags|=1,Sl(e,t,n,o),t.child):(La(e,t,o),Kl(e,t,o))}function Nl(e,t,n,r,o,a){return ko(t),t.updateQueue=null,n=Ma(t,r,n,o),Ta(e),r=Na(),null===e||Al?(ao&&r&&to(t),t.flags|=1,Sl(e,t,n,a),t.child):(La(e,t,a),Kl(e,t,a))}function Ll(e,t,n,r,o){if(ko(t),null===t.stateNode){var a=Mr,i=n.contextType;"object"===typeof i&&null!==i&&(a=Ao(i)),a=new n(r,a),t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,a.updater=fl,t.stateNode=a,a._reactInternals=t,(a=t.stateNode).props=r,a.state=t.memoizedState,a.refs={},ra(t),i=n.contextType,a.context="object"===typeof i&&null!==i?Ao(i):Mr,a.state=t.memoizedState,"function"===typeof(i=n.getDerivedStateFromProps)&&(pl(t,n,i,r),a.state=t.memoizedState),"function"===typeof n.getDerivedStateFromProps||"function"===typeof a.getSnapshotBeforeUpdate||"function"!==typeof a.UNSAFE_componentWillMount&&"function"!==typeof a.componentWillMount||(i=a.state,"function"===typeof a.componentWillMount&&a.componentWillMount(),"function"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),i!==a.state&&fl.enqueueReplaceState(a,a.state,null),da(t,r,a,o),ca(),a.state=t.memoizedState),"function"===typeof a.componentDidMount&&(t.flags|=4194308),r=!0}else if(null===e){a=t.stateNode;var l=t.memoizedProps,s=gl(n,l);a.props=s;var u=a.context,c=n.contextType;i=Mr,"object"===typeof c&&null!==c&&(i=Ao(c));var d=n.getDerivedStateFromProps;c="function"===typeof d||"function"===typeof a.getSnapshotBeforeUpdate,l=t.pendingProps!==l,c||"function"!==typeof a.UNSAFE_componentWillReceiveProps&&"function"!==typeof a.componentWillReceiveProps||(l||u!==i)&&ml(t,a,r,i),na=!1;var p=t.memoizedState;a.state=p,da(t,r,a,o),ca(),u=t.memoizedState,l||p!==u||na?("function"===typeof d&&(pl(t,n,d,r),u=t.memoizedState),(s=na||hl(t,n,s,r,p,u,i))?(c||"function"!==typeof a.UNSAFE_componentWillMount&&"function"!==typeof a.componentWillMount||("function"===typeof a.componentWillMount&&a.componentWillMount(),"function"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"===typeof a.componentDidMount&&(t.flags|=4194308)):("function"===typeof a.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=u),a.props=r,a.state=u,a.context=i,r=s):("function"===typeof a.componentDidMount&&(t.flags|=4194308),r=!1)}else{a=t.stateNode,oa(e,t),c=gl(n,i=t.memoizedProps),a.props=c,d=t.pendingProps,p=a.context,u=n.contextType,s=Mr,"object"===typeof u&&null!==u&&(s=Ao(u)),(u="function"===typeof(l=n.getDerivedStateFromProps)||"function"===typeof a.getSnapshotBeforeUpdate)||"function"!==typeof a.UNSAFE_componentWillReceiveProps&&"function"!==typeof a.componentWillReceiveProps||(i!==d||p!==s)&&ml(t,a,r,s),na=!1,p=t.memoizedState,a.state=p,da(t,r,a,o),ca();var f=t.memoizedState;i!==d||p!==f||na||null!==e&&null!==e.dependencies&&Eo(e.dependencies)?("function"===typeof l&&(pl(t,n,l,r),f=t.memoizedState),(c=na||hl(t,n,c,r,p,f,s)||null!==e&&null!==e.dependencies&&Eo(e.dependencies))?(u||"function"!==typeof a.UNSAFE_componentWillUpdate&&"function"!==typeof a.componentWillUpdate||("function"===typeof a.componentWillUpdate&&a.componentWillUpdate(r,f,s),"function"===typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,f,s)),"function"===typeof a.componentDidUpdate&&(t.flags|=4),"function"===typeof a.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!==typeof a.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!==typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=f),a.props=r,a.state=f,a.context=s,r=c):("function"!==typeof a.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!==typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return a=r,Ml(e,t),r=0!==(128&t.flags),a||r?(a=t.stateNode,n=r&&"function"!==typeof n.getDerivedStateFromError?null:a.render(),t.flags|=1,null!==e&&r?(t.child=nl(t,e.child,null,o),t.child=nl(t,null,n,o)):Sl(e,t,n,o),t.memoizedState=a.state,e=t.child):e=Kl(e,t,o),e}function Ol(e,t,n,r){return ho(),t.flags|=256,Sl(e,t,n,r),t.child}var Il={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function _l(e){return{baseLanes:e,cachePool:Uo()}}function Wl(e,t,n){return e=null!==e?e.childLanes&~n:0,t&&(e|=gu),e}function Hl(e,t,n){var r,o=t.pendingProps,a=!1,l=0!==(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!==(2&cl.current)),r&&(a=!0,t.flags&=-129),r=0!==(32&t.flags),t.flags&=-33,null===e){if(ao){if(a?il(t):sl(),ao){var s,u=oo;if(s=u){e:{for(s=u,u=lo;8!==s.nodeType;){if(!u){u=null;break e}if(null===(s=vd(s.nextSibling))){u=null;break e}}u=s}null!==u?(t.memoizedState={dehydrated:u,treeContext:null!==Yr?{id:Qr,overflow:Zr}:null,retryLane:536870912,hydrationErrors:null},(s=Nr(18,null,null,0)).stateNode=u,s.return=t,t.child=s,ro=t,oo=null,s=!0):s=!1}s||uo(t)}if(null!==(u=t.memoizedState)&&null!==(u=u.dehydrated))return gd(u)?t.lanes=32:t.lanes=536870912,null;ul(t)}return u=o.children,o=o.fallback,a?(sl(),u=$l({mode:"hidden",children:u},a=t.mode),o=Wr(o,a,n,null),u.return=t,o.return=t,u.sibling=o,t.child=u,(a=t.child).memoizedState=_l(n),a.childLanes=Wl(e,r,n),t.memoizedState=Il,o):(il(t),Vl(t,u))}if(null!==(s=e.memoizedState)&&null!==(u=s.dehydrated)){if(l)256&t.flags?(il(t),t.flags&=-257,t=Ul(e,t,n)):null!==t.memoizedState?(sl(),t.child=e.child,t.flags|=128,t=null):(sl(),a=o.fallback,u=t.mode,o=$l({mode:"visible",children:o.children},u),(a=Wr(a,u,n,null)).flags|=2,o.return=t,a.return=t,o.sibling=a,t.child=o,nl(t,e.child,null,n),(o=t.child).memoizedState=_l(n),o.childLanes=Wl(e,r,n),t.memoizedState=Il,t=a);else if(il(t),gd(u)){if(r=u.nextSibling&&u.nextSibling.dataset)var c=r.dgst;r=c,(o=Error(i(419))).stack="",o.digest=r,go({value:o,source:null,stack:null}),t=Ul(e,t,n)}else if(Al||wo(e,t,n,!1),r=0!==(n&e.childLanes),Al||r){if(null!==(r=ru)&&(0!==(o=0!==((o=0!==(42&(o=n&-n))?1:Se(o))&(r.suspendedLanes|n))?0:o)&&o!==s.retryLane))throw s.retryLane=o,Rr(e,o),Nu(r,e,o),kl;"$?"===u.data||Gu(),t=Ul(e,t,n)}else"$?"===u.data?(t.flags|=192,t.child=e.child,t=null):(e=s.treeContext,oo=vd(u.nextSibling),ro=t,ao=!0,io=null,lo=!1,null!==e&&(Xr[Kr++]=Qr,Xr[Kr++]=Zr,Xr[Kr++]=Yr,Qr=e.id,Zr=e.overflow,Yr=t),(t=Vl(t,o.children)).flags|=4096);return t}return a?(sl(),a=o.fallback,u=t.mode,c=(s=e.child).sibling,(o=Or(s,{mode:"hidden",children:o.children})).subtreeFlags=65011712&s.subtreeFlags,null!==c?a=Or(c,a):(a=Wr(a,u,n,null)).flags|=2,a.return=t,o.return=t,o.sibling=a,t.child=o,o=a,a=t.child,null===(u=e.child.memoizedState)?u=_l(n):(null!==(s=u.cachePool)?(c=To._currentValue,s=s.parent!==c?{parent:c,pool:c}:s):s=Uo(),u={baseLanes:u.baseLanes|n,cachePool:s}),a.memoizedState=u,a.childLanes=Wl(e,r,n),t.memoizedState=Il,o):(il(t),e=(n=e.child).sibling,(n=Or(n,{mode:"visible",children:o.children})).return=t,n.sibling=null,null!==e&&(null===(r=t.deletions)?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n)}function Vl(e,t){return(t=$l({mode:"visible",children:t},e.mode)).return=e,e.child=t}function $l(e,t){return(e=Nr(22,e,null,t)).lanes=0,e.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},e}function Ul(e,t,n){return nl(t,e.child,null,n),(e=Vl(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function ql(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),Fo(e.return,t,n)}function Gl(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Xl(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Sl(e,t,r.children,n),0!==(2&(r=cl.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!==(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&ql(e,n,t);else if(19===e.tag)ql(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}switch(W(cl,r),o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===dl(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Gl(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===dl(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Gl(t,!0,n,null,a);break;case"together":Gl(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Kl(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),fu|=t.lanes,0===(n&t.childLanes)){if(null===e)return null;if(wo(e,t,n,!1),0===(n&t.childLanes))return null}if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Or(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Or(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Yl(e,t){return 0!==(e.lanes&t)||!(null===(e=e.dependencies)||!Eo(e))}function Ql(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps)Al=!0;else{if(!Yl(e,n)&&0===(128&t.flags))return Al=!1,function(e,t,n){switch(t.tag){case 3:q(t,t.stateNode.containerInfo),Do(0,To,e.memoizedState.cache),ho();break;case 27:case 5:X(t);break;case 4:q(t,t.stateNode.containerInfo);break;case 10:Do(0,t.type,t.memoizedProps.value);break;case 13:var r=t.memoizedState;if(null!==r)return null!==r.dehydrated?(il(t),t.flags|=128,null):0!==(n&t.child.childLanes)?Hl(e,t,n):(il(t),null!==(e=Kl(e,t,n))?e.sibling:null);il(t);break;case 19:var o=0!==(128&e.flags);if((r=0!==(n&t.childLanes))||(wo(e,t,n,!1),r=0!==(n&t.childLanes)),o){if(r)return Xl(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),W(cl,cl.current),r)break;return null;case 22:case 23:return t.lanes=0,Pl(e,t,n);case 24:Do(0,To,e.memoizedState.cache)}return Kl(e,t,n)}(e,t,n);Al=0!==(131072&e.flags)}else Al=!1,ao&&0!==(1048576&t.flags)&&eo(t,Gr,t.index);switch(t.lanes=0,t.tag){case 16:e:{e=t.pendingProps;var r=t.elementType,o=r._init;if(r=o(r._payload),t.type=r,"function"!==typeof r){if(void 0!==r&&null!==r){if((o=r.$$typeof)===F){t.tag=11,t=jl(null,t,r,e,n);break e}if(o===E){t.tag=14,t=Bl(null,t,r,e,n);break e}}throw t=P(r)||r,Error(i(306,t,""))}Lr(r)?(e=gl(r,e),t.tag=1,t=Ll(null,t,r,e,n)):(t.tag=0,t=zl(null,t,r,e,n))}return t;case 0:return zl(e,t,t.type,t.pendingProps,n);case 1:return Ll(e,t,r=t.type,o=gl(r,t.pendingProps),n);case 3:e:{if(q(t,t.stateNode.containerInfo),null===e)throw Error(i(387));r=t.pendingProps;var a=t.memoizedState;o=a.element,oa(e,t),da(t,r,null,n);var l=t.memoizedState;if(r=l.cache,Do(0,To,r),r!==a.cache&&Co(t,[To],n,!0),ca(),r=l.element,a.isDehydrated){if(a={element:r,isDehydrated:!1,cache:l.cache},t.updateQueue.baseState=a,t.memoizedState=a,256&t.flags){t=Ol(e,t,r,n);break e}if(r!==o){go(o=wr(Error(i(424)),t)),t=Ol(e,t,r,n);break e}if(9===(e=t.stateNode.containerInfo).nodeType)e=e.body;else e="HTML"===e.nodeName?e.ownerDocument.body:e;for(oo=vd(e.firstChild),ro=t,ao=!0,io=null,lo=!0,n=rl(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ho(),r===o){t=Kl(e,t,n);break e}Sl(e,t,r,n)}t=t.child}return t;case 26:return Ml(e,t),null===e?(n=Sd(t.type,null,t.pendingProps,null))?t.memoizedState=n:ao||(n=t.type,e=t.pendingProps,(r=rd($.current).createElement(n))[Pe]=t,r[Te]=e,ed(r,n,e),Ue(r),t.stateNode=r):t.memoizedState=Sd(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return X(t),null===e&&ao&&(r=t.stateNode=Dd(t.type,t.pendingProps,$.current),ro=t,lo=!0,o=oo,fd(t.type)?(bd=o,oo=vd(r.firstChild)):oo=o),Sl(e,t,t.pendingProps.children,n),Ml(e,t),null===e&&(t.flags|=4194304),t.child;case 5:return null===e&&ao&&((o=r=oo)&&(null!==(r=function(e,t,n,r){for(;1===e.nodeType;){var o=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&("INPUT"!==e.nodeName||"hidden"!==e.type))break}else if(r){if(!e[Ie])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if("stylesheet"===(a=e.getAttribute("rel"))&&e.hasAttribute("data-precedence"))break;if(a!==o.rel||e.getAttribute("href")!==(null==o.href||""===o.href?null:o.href)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin)||e.getAttribute("title")!==(null==o.title?null:o.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(((a=e.getAttribute("src"))!==(null==o.src?null:o.src)||e.getAttribute("type")!==(null==o.type?null:o.type)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin))&&a&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else{if("input"!==t||"hidden"!==e.type)return e;var a=null==o.name?null:""+o.name;if("hidden"===o.type&&e.getAttribute("name")===a)return e}if(null===(e=vd(e.nextSibling)))break}return null}(r,t.type,t.pendingProps,lo))?(t.stateNode=r,ro=t,oo=vd(r.firstChild),lo=!1,o=!0):o=!1),o||uo(t)),X(t),o=t.type,a=t.pendingProps,l=null!==e?e.memoizedProps:null,r=a.children,id(o,a)?r=null:null!==l&&id(o,l)&&(t.flags|=32),null!==t.memoizedState&&(o=Pa(e,t,za,null,null,n),Xd._currentValue=o),Ml(e,t),Sl(e,t,r,n),t.child;case 6:return null===e&&ao&&((e=n=oo)&&(null!==(n=function(e,t,n){if(""===t)return null;for(;3!==e.nodeType;){if((1!==e.nodeType||"INPUT"!==e.nodeName||"hidden"!==e.type)&&!n)return null;if(null===(e=vd(e.nextSibling)))return null}return e}(n,t.pendingProps,lo))?(t.stateNode=n,ro=t,oo=null,e=!0):e=!1),e||uo(t)),null;case 13:return Hl(e,t,n);case 4:return q(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=nl(t,null,r,n):Sl(e,t,r,n),t.child;case 11:return jl(e,t,t.type,t.pendingProps,n);case 7:return Sl(e,t,t.pendingProps,n),t.child;case 8:case 12:return Sl(e,t,t.pendingProps.children,n),t.child;case 10:return r=t.pendingProps,Do(0,t.type,r.value),Sl(e,t,r.children,n),t.child;case 9:return o=t.type._context,r=t.pendingProps.children,ko(t),r=r(o=Ao(o)),t.flags|=1,Sl(e,t,r,n),t.child;case 14:return Bl(e,t,t.type,t.pendingProps,n);case 15:return Rl(e,t,t.type,t.pendingProps,n);case 19:return Xl(e,t,n);case 31:return r=t.pendingProps,n=t.mode,r={mode:r.mode,children:r.children},null===e?((n=$l(r,n)).ref=t.ref,t.child=n,n.return=t,t=n):((n=Or(e.child,r)).ref=t.ref,t.child=n,n.return=t,t=n),t;case 22:return Pl(e,t,n);case 24:return ko(t),r=Ao(To),null===e?(null===(o=Vo())&&(o=ru,a=Mo(),o.pooledCache=a,a.refCount++,null!==a&&(o.pooledCacheLanes|=n),o=a),t.memoizedState={parent:r,cache:o},ra(t),Do(0,To,o)):(0!==(e.lanes&n)&&(oa(e,t),da(t,null,null,n),ca()),o=e.memoizedState,a=t.memoizedState,o.parent!==r?(o={parent:r,cache:r},t.memoizedState=o,0===t.lanes&&(t.memoizedState=t.updateQueue.baseState=o),Do(0,To,r)):(r=a.cache,Do(0,To,r),r!==o.cache&&Co(t,[To],n,!0))),Sl(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(i(156,t.tag))}function Zl(e){e.flags|=4}function Jl(e,t){if("stylesheet"!==t.type||0!==(4&t.state.loading))e.flags&=-16777217;else if(e.flags|=16777216,!Wd(t)){if(null!==(t=ol.current)&&((4194048&au)===au?null!==al:(62914560&au)!==au&&0===(536870912&au)||t!==al))throw Jo=Ko,Go;e.flags|=8192}}function es(e,t){null!==t&&(e.flags|=4),16384&e.flags&&(t=22!==e.tag?Ce():536870912,e.lanes|=t,vu|=t)}function ts(e,t){if(!ao)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ns(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=65011712&o.subtreeFlags,r|=65011712&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function rs(e,t,n){var r=t.pendingProps;switch(no(t),t.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:case 1:return ns(t),null;case 3:return n=t.stateNode,r=null,null!==e&&(r=e.memoizedState.cache),t.memoizedState.cache!==r&&(t.flags|=2048),xo(To),G(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||(fo(t)?Zl(t):null===e||e.memoizedState.isDehydrated&&0===(256&t.flags)||(t.flags|=1024,mo())),ns(t),null;case 26:return n=t.memoizedState,null===e?(Zl(t),null!==n?(ns(t),Jl(t,n)):(ns(t),t.flags&=-16777217)):n?n!==e.memoizedState?(Zl(t),ns(t),Jl(t,n)):(ns(t),t.flags&=-16777217):(e.memoizedProps!==r&&Zl(t),ns(t),t.flags&=-16777217),null;case 27:K(t),n=$.current;var o=t.type;if(null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Zl(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return ns(t),null}e=H.current,fo(t)?co(t):(e=Dd(o,r,n),t.stateNode=e,Zl(t))}return ns(t),null;case 5:if(K(t),n=t.type,null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Zl(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return ns(t),null}if(e=H.current,fo(t))co(t);else{switch(o=rd($.current),e){case 1:e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case 2:e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;default:switch(n){case"svg":e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case"math":e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;case"script":(e=o.createElement("div")).innerHTML="