diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 0000000..d8d6f0f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,111 @@ +name: Bug 反馈 +description: 有一个 bug 需要解决 +title: "发现bug:" +labels: + - bug +body: + - type: markdown + attributes: + value: | + # 提 ISSUE 须知 + + 请先阅读文档: + - [epusdt 文档](https://epusdt.com/) + + 如果仍有问题,请先在 issue 列表中搜索是否已有相同问题: + - [Issue 列表](https://github.com/GMWalletApp/epusdt/issues) + + 如果没有找到相关问题,请按下面格式尽量完整填写,便于我们快速排查。 + + - type: checkboxes + id: checks + attributes: + label: 提交前检查 + options: + - label: 我已阅读文档并检查常见问题 + required: true + - label: 我已搜索现有 issue,确认不是重复问题 + required: true + - label: 我已尽量提供可复现信息(代码、配置、日志) + required: true + + - type: textarea + id: epusdt_version + attributes: + label: 1. epusdt 版本 + description: 请提供版本号或 commit hash,避免只写“最新版” + placeholder: | + 例如: + - v1.2.3 + - commit: abcdef1 + validations: + required: true + + - type: textarea + id: runtime + attributes: + label: 2. 运行环境版本 + description: 请提供语言/运行时及相关依赖版本 + placeholder: | + 例如: + - Go/Python/Node 版本: + - 数据库及版本: + - Docker 版本(如有): + validations: + required: true + + - type: textarea + id: os_info + attributes: + label: 3. 操作系统信息 + description: Windows / Linux / macOS 或其他系统,请写明版本 + placeholder: | + 例如: + - Ubuntu 22.04 + - macOS 14.6 + - Windows Server 2022 + validations: + required: true + + - type: textarea + id: repro_code + attributes: + label: 4. 可复现代码/配置 + description: 请提供最小可复现代码、请求参数或配置(敏感信息请脱敏) + render: shell + placeholder: | + # 最小复现步骤 + 1. ... + 2. ... + 3. ... + + # 关键请求/配置(脱敏后) + curl -X POST https://xxx/api/... + -H "Authorization: Bearer ***" + -d '{"amount":100,"order_id":"test-001"}' + validations: + required: true + + - type: textarea + id: stacktrace + attributes: + label: 5. 错误日志 / 堆栈信息 + description: 请粘贴完整报错信息、状态码、关键日志 + render: shell + placeholder: | + 例如: + - HTTP 状态码: + - 错误码: + - 错误堆栈: + - 关键日志片段: + validations: + required: true + + - type: textarea + id: extra + attributes: + label: 补充信息 + description: 可补充截图、发生时间、复现概率、已尝试修复动作等 + placeholder: 其他你认为有帮助的信息(可选) + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..2edda99 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: 安全漏洞报告 + url: https://github.com/ginta/epusdt/security/advisories/new + about: 请不要公开提交安全漏洞,请通过 GitHub Security Advisory 私下报告 diff --git a/.github/workflows/docker-alpine.yml b/.github/workflows/docker-alpine.yml index 8616180..de834e5 100644 --- a/.github/workflows/docker-alpine.yml +++ b/.github/workflows/docker-alpine.yml @@ -5,28 +5,40 @@ on: push: branches: - "main" + - "master" + tags: + - "v*" env: + DOCKERHUB_NAMESPACE: gmwallet IMAGE_NAME: epusdt jobs: push-docker-hub: runs-on: ubuntu-latest - env: - TZ: Asia/Shanghai steps: - uses: actions/checkout@v6 - - name: Compute Build Metadata - id: meta - shell: bash - run: | - echo "version=main-${GITHUB_SHA}" >> "$GITHUB_OUTPUT" - echo "commit=${GITHUB_SHA}" >> "$GITHUB_OUTPUT" - echo "date=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_OUTPUT" + - name: Set Up QEMU + uses: docker/setup-qemu-action@v3 - - name: Login + - name: Set Up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker Metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.DOCKERHUB_NAMESPACE }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=alpine + type=raw,value=latest,enable={{is_default_branch}} + type=ref,event=branch,suffix=-alpine + type=ref,event=tag + type=sha,prefix=sha-,suffix=-alpine + + - name: Login To Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} @@ -38,9 +50,8 @@ jobs: context: . file: ./Dockerfile push: true + platforms: linux/amd64,linux/arm64 build-args: | - VERSION=${{ steps.meta.outputs.version }} - COMMIT=${{ steps.meta.outputs.commit }} - DATE=${{ steps.meta.outputs.date }} - tags: | - ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:alpine + API_RATE_URL=${{ vars.API_RATE_URL }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2bdd67a..5d8ad8e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,6 +4,12 @@ on: push: tags: - "v*" + workflow_dispatch: + inputs: + release_tag: + description: "要发布的 tag(例如 v1.2.3,必须已存在)" + required: true + type: string permissions: contents: write @@ -25,6 +31,7 @@ jobs: uses: actions/checkout@v6 with: fetch-depth: 0 + ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.release_tag || github.ref }} - name: Ensure Tag Commit Is On Default Branch env: diff --git a/Dockerfile b/Dockerfile index b2b1100..a70b81a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ ENV CGO_ENABLED=0 WORKDIR /app -RUN git clone https://github.com/GMwalletApp/epusdt.git . +COPY . /app WORKDIR /app/src RUN go mod download @@ -14,10 +14,15 @@ RUN go build -o /app/epusdt . FROM alpine:latest AS runner ENV TZ=Asia/Shanghai RUN apk --no-cache add ca-certificates tzdata +ARG API_RATE_URL="" WORKDIR /app COPY --from=builder /app/src/static /app/static COPY --from=builder /app/src/static /static +COPY --from=builder /app/src/.env.example /app/.env +RUN if [ -n "$API_RATE_URL" ]; then \ + sed -i "s|^api_rate_url=.*$|api_rate_url=${API_RATE_URL}|" /app/.env; \ + fi COPY --from=builder /app/epusdt . VOLUME /app/conf diff --git a/README.md b/README.md index 234ca93..cc755b8 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,10 @@

- GitHub Stars 3000+ + GitHub Stars 3000+ GPLv3 License Go 1.16+ - Latest Release + Latest Release

--- @@ -37,11 +37,12 @@ Deploy it privately, integrate via HTTP API, and start receiving **crypto paymen |------|------| | **TRC20** (Tron) | USDT、TRX| | **ERC20** (Ethereum) | USDT、USDC、ETH | +| **Solana** | USDT、USDC | | **BEP20** (BSC) | USDT、USDC、BNB | | **Polygon** | USDT、USDC | | **更多** | 持续扩展中… | -> 💡 具体支持的链与代币以 [最新版本](https://github.com/assimon/epusdt/releases) 及 [官方文档](https://epusdt.com) 为准。 +> 💡 具体支持的链与代币以 [最新版本](https://github.com/GMWalletApp/epusdt/releases) 及 [官方文档](https://epusdt.com) 为准。 --- @@ -122,7 +123,7 @@ Epusdt 通过监听多条区块链网络(TRC20、ERC20、BEP20、Polygon 等 ## 💬 社区与支持 -**遇到问题?** 请优先在 GitHub 提交 [Issue](https://github.com/assimon/epusdt/issues),我们会**优先处理** Issue 中的反馈。 +**遇到问题?** 请优先在 GitHub 提交 [Issue](https://github.com/GMWalletApp/epusdt/issues),我们会**优先处理** Issue 中的反馈。 加入 Telegram 社区,获取最新开发动态,参与需求调研,与超过5000名活跃用户交流使用经验,对接商业资源: diff --git a/docker-compose.yaml b/docker-compose.yaml index 2f53aed..6586b37 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,6 +1,6 @@ services: epusdt: - image: gmwallet/epusdt:alpine + image: gmwallet/epusdt:latest restart: always build: context: . diff --git a/plugins/dujiaoka/app/Http/Controllers/Pay/EpusdtController.php b/plugins/dujiaoka/app/Http/Controllers/Pay/EpusdtController.php index 37a7d14..e18aa85 100644 --- a/plugins/dujiaoka/app/Http/Controllers/Pay/EpusdtController.php +++ b/plugins/dujiaoka/app/Http/Controllers/Pay/EpusdtController.php @@ -2,8 +2,8 @@ /** * The file was created by Assimon. * - * @author assimon - * @copyright assimon + * @author GMWalletApp + * @copyright GMWalletApp * @link http://utf8.hk/ */ diff --git a/plugins/dujiaoka/routes/common/pay.php b/plugins/dujiaoka/routes/common/pay.php index b4f27ed..9dc3a8e 100644 --- a/plugins/dujiaoka/routes/common/pay.php +++ b/plugins/dujiaoka/routes/common/pay.php @@ -2,8 +2,8 @@ /** * The file was created by Assimon. * - * @author assimon - * @copyright assimon + * @author GMWalletApp + * @copyright GMWalletApp * @link http://utf8.hk/ */ use Illuminate\Support\Facades\Route; diff --git a/src/.env.example b/src/.env.example index b595454..3cf527e 100644 --- a/src/.env.example +++ b/src/.env.example @@ -1,14 +1,14 @@ app_name=epusdt -app_uri=https://dujiaoka.com +app_uri=https://epusdt.com log_level=info http_access_log=false sql_debug=false http_listen=:8000 static_path=/static -runtime_root_path=/runtime +runtime_root_path=./runtime -log_save_path=/logs +log_save_path=./logs log_max_size=32 log_max_age=7 max_backups=3 @@ -50,22 +50,10 @@ queue_concurrency=10 queue_poll_interval_ms=1000 callback_retry_base_seconds=5 -tg_bot_token= -tg_proxy= -tg_manage= - -api_auth_token= - order_expiration_time=10 order_notice_max_retry=0 -forced_usdt_rate= + api_rate_url= -tron_grid_api_key= -solana_rpc_url= -ethereum_ws_url=wss://ethereum.publicnode.com - - -# epay -epay_pid= -epay_key= +# Set to true to re-run the install wizard on next startup. +install=true diff --git a/src/bootstrap/bootstrap.go b/src/bootstrap/bootstrap.go index 5452ee3..2b09723 100644 --- a/src/bootstrap/bootstrap.go +++ b/src/bootstrap/bootstrap.go @@ -3,12 +3,15 @@ package bootstrap import ( "sync" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/model/dao" - "github.com/assimon/luuu/mq" - "github.com/assimon/luuu/task" - "github.com/assimon/luuu/telegram" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/mq" + "github.com/GMWalletApp/epusdt/task" + "github.com/GMWalletApp/epusdt/telegram" + appjwt "github.com/GMWalletApp/epusdt/util/jwt" + "github.com/GMWalletApp/epusdt/util/log" + "github.com/gookit/color" ) var initOnce sync.Once @@ -18,6 +21,43 @@ func InitApp() { config.Init() log.Init() dao.Init() + // Wire settings-table lookups into the config package so + // GetRateApiUrl / GetUsdtRate can consult admin-configured values. + config.SettingsGetString = func(key string) string { + return data.GetSettingString(key, "") + } + // Seed rate.api_url from .env into the settings table on first run + // so the admin UI can display and change it without a code restart. + // Only written if the key is not already present in the DB. + if data.GetSettingString("rate.api_url", "") == "" { + if envURL := config.GetRateApiUrlFromEnv(); envURL != "" { + if err := data.SetSetting("rate", "rate.api_url", envURL, "string"); err != nil { + color.Red.Printf("[bootstrap] seed rate.api_url err=%s\n", err) + } + } + } + // Seed admin account and JWT secret so the management console is + // immediately usable on a fresh install. Both are idempotent. + _, isNew, err := data.EnsureDefaultAdmin() + if err != nil { + color.Red.Printf("[bootstrap] ensure default admin err=%s\n", err) + } + if isNew { + color.Yellow.Println("╔════════════════════════════════════════════════════════════════════════╗") + color.Yellow.Println("║ Default admin account created. Fetch one-time password via API first!║") + color.Yellow.Printf("║ Username: admin ║\n") + color.Yellow.Println("║ GET /admin/api/v1/auth/init-password (one-time) ║") + color.Yellow.Println("╚════════════════════════════════════════════════════════════════════════╝") + } + if _, err := appjwt.EnsureSecret(); err != nil { + color.Red.Printf("[bootstrap] ensure jwt secret err=%s\n", err) + } + // Seed one universal default API key on fresh installs. The seeded + // key (PID=1000) works for all three gateway flows. + _, err = data.EnsureDefaultApiKey() + if err != nil { + color.Red.Printf("[bootstrap] ensure default api key err=%s\n", err) + } mq.Start() go telegram.BotStart() go task.Start() diff --git a/src/command/banner.go b/src/command/banner.go index bbbf8d7..3b307c1 100644 --- a/src/command/banner.go +++ b/src/command/banner.go @@ -1,7 +1,7 @@ package command import ( - "github.com/assimon/luuu/config" + "github.com/GMWalletApp/epusdt/config" "github.com/gookit/color" ) diff --git a/src/command/http_server.go b/src/command/http_server.go index 411b06e..7e3bf02 100644 --- a/src/command/http_server.go +++ b/src/command/http_server.go @@ -5,15 +5,18 @@ import ( "net/http" "os" "os/signal" + "path/filepath" + "strings" "time" - "github.com/assimon/luuu/bootstrap" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/middleware" - "github.com/assimon/luuu/route" - "github.com/assimon/luuu/util/constant" - luluHttp "github.com/assimon/luuu/util/http" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/bootstrap" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/install" + "github.com/GMWalletApp/epusdt/middleware" + "github.com/GMWalletApp/epusdt/route" + "github.com/GMWalletApp/epusdt/util/constant" + luluHttp "github.com/GMWalletApp/epusdt/util/http" + "github.com/GMWalletApp/epusdt/util/log" "github.com/labstack/echo/v4" echoMiddleware "github.com/labstack/echo/v4/middleware" "github.com/spf13/cobra" @@ -37,6 +40,14 @@ var startCmd = &cobra.Command{ Short: "start", Long: "start http service", Run: func(cmd *cobra.Command, args []string) { + // If no config file exists, or if install=true is set in the config, + // run the first-run install API on the same port as the main server. + // The wizard writes the .env (with install=false) and shuts itself + // down so bootstrap.InitApp() can read it normally on the same port. + if config.NeedsInstall() { + envPath, _ := config.ResolveConfigPath() + install.RunInstallServer(install.DefaultInstallAddr, envPath) + } bootstrap.InitApp() printBanner() HttpServerStart() @@ -53,6 +64,29 @@ func HttpServerStart() { route.RegisterRoute(e) e.Static(config.StaticPath, config.StaticFilePath) + // Resolve www/ relative to the executable so SPA routes work regardless + // of the working directory. main.go extracts www/ next to the binary. + wwwRoot := "./www" + if exePath, err := os.Executable(); err == nil { + if exePath, err = filepath.EvalSymlinks(exePath); err == nil { + wwwRoot = filepath.Join(filepath.Dir(exePath), "www") + } + } + e.Use(echoMiddleware.StaticWithConfig(echoMiddleware.StaticConfig{ + Skipper: func(c echo.Context) bool { + path := c.Request().URL.Path + if path == "/install" || strings.HasPrefix(path, "/install/") { + // The install wizard is only served by install.RunInstallServer + // before bootstrap. Once main server starts, block /install. + return true + } + return luluHttp.ShouldSkipSPAFallback(path) + }, + HTML5: true, + Index: "index.html", + Root: wwwRoot, + })) + httpListen := viper.GetString("http_listen") go func() { if err = e.Start(httpListen); err != http.ErrServerClosed { @@ -86,13 +120,28 @@ func customHTTPErrorHandler(err error, e echo.Context) { Message: msg, RequestID: e.Request().Header.Get(echo.HeaderXRequestID), } + // echo.HTTPError carries a real HTTP status (401 for auth failures, + // 404 for missing routes, etc.). Propagate it instead of flattening + // everything to 200 — clients rely on the status code. if he, ok := err.(*echo.HTTPError); ok { - e.String(http.StatusOK, he.Message.(string)) + resp.StatusCode = he.Code + if s, ok := he.Message.(string); ok { + resp.Message = s + } else if he.Message != nil { + resp.Message = http.StatusText(he.Code) + } + _ = e.JSON(he.Code, resp) return } + // Internal RspError: propagate Code as both the JSON status_code and + // the real HTTP status when it maps to one (400/401/...); business + // codes (>=1000) map to HTTP 400 so clients get a proper 4xx while + // still reading the granular code from the body. if he, ok := err.(*constant.RspError); ok { resp.StatusCode = he.Code resp.Message = he.Msg + _ = e.JSON(he.HttpStatus(), resp) + return } - _ = e.JSON(http.StatusOK, resp) + _ = e.JSON(http.StatusInternalServerError, resp) } diff --git a/src/command/root.go b/src/command/root.go index 3502187..fa56a51 100644 --- a/src/command/root.go +++ b/src/command/root.go @@ -1,7 +1,7 @@ package command import ( - "github.com/assimon/luuu/config" + "github.com/GMWalletApp/epusdt/config" "github.com/spf13/cobra" ) diff --git a/src/command/version.go b/src/command/version.go index 6394222..de91e63 100644 --- a/src/command/version.go +++ b/src/command/version.go @@ -3,7 +3,7 @@ package command import ( "fmt" - "github.com/assimon/luuu/config" + "github.com/GMWalletApp/epusdt/config" "github.com/spf13/cobra" ) diff --git a/src/config/config.go b/src/config/config.go index fa96b18..c8852d9 100644 --- a/src/config/config.go +++ b/src/config/config.go @@ -7,14 +7,21 @@ import ( "net/url" "os" "path/filepath" + "strconv" "strings" "time" - "github.com/assimon/luuu/util/http_client" + "github.com/GMWalletApp/epusdt/util/http_client" "github.com/spf13/viper" "github.com/tidwall/gjson" ) +// parseFloat is the minimal helper used by the settings bridge; kept +// here so settings_bridge.go stays import-free. +func parseFloat(s string) (float64, error) { + return strconv.ParseFloat(strings.TrimSpace(s), 64) +} + var ( HTTPAccessLog bool SQLDebug bool @@ -27,9 +34,6 @@ var ( TgBotToken string TgProxy string TgManage int64 - UsdtRate float64 - RateApiUrl string - TRON_GRID_API_KEY string BuildVersion = "0.0.0-dev" BuildCommit = "none" BuildDate = "unknown" @@ -70,9 +74,6 @@ func Init() { TgBotToken = viper.GetString("tg_bot_token") TgProxy = viper.GetString("tg_proxy") TgManage = viper.GetInt64("tg_manage") - - RateApiUrl = GetRateApiUrl() - TRON_GRID_API_KEY = viper.GetString("tron_grid_api_key") } func mustMkdir(path string) { @@ -124,6 +125,57 @@ func resolveConfigFilePath() (string, error) { return normalizeConfiguredPath(".env") } +// NeedsInstall returns true when the first-run install wizard should run. +// It returns true if the config file does not exist yet, or if the file +// exists and contains install=true (an explicit reset flag). +// Existing installs that have no install key are NOT affected. +func NeedsInstall() bool { + envPath, exists := ResolveConfigPath() + if !exists { + return true + } + // Read just the install key without triggering full Init(). + v := viper.New() + v.SetConfigFile(envPath) + if err := v.ReadInConfig(); err != nil { + // Unreadable config → treat as needing install. + return true + } + return strings.EqualFold(strings.TrimSpace(v.GetString("install")), "true") +} + +// ResolveConfigPath returns the absolute path to the .env file and whether +// it currently exists on disk. Unlike resolveConfigFilePath it does not +// return an error when the file is absent — callers (e.g. the install +// wizard) need the target path even before the file is written. +func ResolveConfigPath() (path string, exists bool) { + candidate := explicitConfigPath + if candidate == "" { + if e := strings.TrimSpace(os.Getenv("EPUSDT_CONFIG")); e != "" { + candidate = e + } else { + candidate = ".env" + } + } + // Resolve relative paths against cwd. + p := strings.TrimSpace(candidate) + if !filepath.IsAbs(p) { + cwd, err := os.Getwd() + if err == nil { + p = filepath.Join(cwd, p) + } + } + info, err := os.Stat(p) + if err == nil && info.IsDir() { + p = filepath.Join(p, ".env") + info, err = os.Stat(p) + } + if err != nil { + return p, false + } + return p, true +} + func normalizeConfiguredPath(input string) (string, error) { path := strings.TrimSpace(input) if path == "" { @@ -178,11 +230,19 @@ func GetAppUri() string { return viper.GetString("app_uri") } -func GetApiAuthToken() string { - return viper.GetString("api_auth_token") +func GetRateApiUrl() string { + // settings table wins (admin-configurable); .env and env var remain + // as fallbacks for smooth migration from the old layout. + if db := settingsRateApiUrl(); db != "" { + return db + } + return GetRateApiUrlFromEnv() } -func GetRateApiUrl() string { +// GetRateApiUrlFromEnv returns the rate API URL read only from the +// .env / environment variables, bypassing the settings table. Used +// by bootstrap to seed the settings table from the initial .env value. +func GetRateApiUrlFromEnv() string { rateURL := viper.GetString("api_rate_url") if rateURL == "" { rateURL = os.Getenv("API_RATE_URL") @@ -190,7 +250,6 @@ func GetRateApiUrl() string { if rateURL == "" { log.Println("api_rate_url is empty") } - RateApiUrl = rateURL return rateURL } @@ -212,13 +271,14 @@ func GetRateForCoin(coin string, base string) float64 { if usdtRate > 0 { return 1 / usdtRate } + return 0 } } + return getRateForCoinFromAPI(coin, base) +} - baseURL := RateApiUrl - if baseURL == "" { - baseURL = GetRateApiUrl() - } +func getRateForCoinFromAPI(coin string, base string) float64 { + baseURL := GetRateApiUrl() if baseURL == "" { log.Printf("rate api url is empty") return 0.0 @@ -250,14 +310,18 @@ func GetRateForCoin(coin string, base string) float64 { } func GetUsdtRate() float64 { - forcedUsdtRate := viper.GetFloat64("forced_usdt_rate") - if forcedUsdtRate > 0 { - return forcedUsdtRate + // Only the admin setting can force the USDT/CNY rate. When the + // setting is unset, zero, or negative, fall back to the rate API. + if forced := settingsForcedUsdtRate(); forced > 0 { + return forced } - if UsdtRate <= 0 { - return 6.4 + + apiRate := getRateForCoinFromAPI("usdt", "cny") + if apiRate > 0 { + return 1 / apiRate } - return UsdtRate + log.Printf("usdt/cny rate unavailable: rate.forced_usdt_rate <= 0 and rate api returned no data") + return 0 } func GetOrderExpirationTime() int { @@ -328,23 +392,3 @@ func GetCallbackRetryBaseDuration() time.Duration { } return time.Duration(seconds) * time.Second } - -func GetSolanaRpcUrl() string { - rpcUrl := viper.GetString("solana_rpc_url") - if rpcUrl == "" { - return "https://api.mainnet-beta.solana.com" - } - return rpcUrl -} - -func GetEthereumWsUrl() string { - return strings.TrimSpace(viper.GetString("ethereum_ws_url")) -} - -func GetEpayPid() int { - return viper.GetInt("epay_pid") -} - -func GetEpayKey() string { - return viper.GetString("epay_key") -} diff --git a/src/config/config_test.go b/src/config/config_test.go index cce5c79..2b8e880 100644 --- a/src/config/config_test.go +++ b/src/config/config_test.go @@ -1,11 +1,52 @@ package config import ( + "io" + "math" + "net/http" "os" "path/filepath" + "strings" "testing" + "time" + + "github.com/GMWalletApp/epusdt/util/http_client" + "github.com/go-resty/resty/v2" + "github.com/spf13/viper" ) +func installSettingsGetter(t *testing.T, values map[string]string) { + t.Helper() + + oldGetter := SettingsGetString + SettingsGetString = func(key string) string { + return values[key] + } + t.Cleanup(func() { + SettingsGetString = oldGetter + }) +} + +type roundTripFunc func(*http.Request) (*http.Response, error) + +func (f roundTripFunc) RoundTrip(req *http.Request) (*http.Response, error) { + return f(req) +} + +func installMockHTTPClient(t *testing.T, handler roundTripFunc) { + t.Helper() + + oldFactory := http_client.ClientFactory + http_client.ClientFactory = func() *resty.Client { + client := resty.NewWithClient(&http.Client{Transport: handler}) + client.SetTimeout(10 * time.Second) + return client + } + t.Cleanup(func() { + http_client.ClientFactory = oldFactory + }) +} + func TestNormalizeConfiguredPathUsesExplicitFile(t *testing.T) { t.Helper() @@ -135,3 +176,127 @@ func TestResolveConfigFilePathPrefersExplicitOverEnv(t *testing.T) { t.Fatalf("config path = %s, want %s", got, flagPath) } } + +func TestGetUsdtRatePrefersPositiveAdminOverride(t *testing.T) { + viper.Reset() + t.Cleanup(viper.Reset) + t.Setenv("API_RATE_URL", "") + + apiCalled := false + installMockHTTPClient(t, func(r *http.Request) (*http.Response, error) { + apiCalled = true + return &http.Response{ + StatusCode: http.StatusInternalServerError, + Status: http.StatusText(http.StatusInternalServerError), + Header: make(http.Header), + Body: io.NopCloser(strings.NewReader("")), + Request: r, + }, nil + }) + + installSettingsGetter(t, map[string]string{ + "rate.forced_usdt_rate": "7.25", + "rate.api_url": "https://rate.example.test", + }) + + got := GetUsdtRate() + if got != 7.25 { + t.Fatalf("GetUsdtRate() = %v, want 7.25", got) + } + if apiCalled { + t.Fatalf("rate API should not be called when rate.forced_usdt_rate > 0") + } +} + +func TestGetUsdtRateUsesAPIWhenAdminOverrideIsNotPositive(t *testing.T) { + viper.Reset() + t.Cleanup(viper.Reset) + t.Setenv("API_RATE_URL", "") + + installMockHTTPClient(t, func(r *http.Request) (*http.Response, error) { + if r.URL.Path != "/cny.json" { + t.Fatalf("rate api path = %s, want /cny.json", r.URL.Path) + } + return &http.Response{ + StatusCode: http.StatusOK, + Status: "200 OK", + Header: http.Header{"Content-Type": []string{"application/json"}}, + Body: io.NopCloser(strings.NewReader(`{"cny":{"usdt":0.14635}}`)), + Request: r, + }, nil + }) + + installSettingsGetter(t, map[string]string{ + "rate.forced_usdt_rate": "-1", + "rate.api_url": "https://rate.example.test", + }) + + got := GetUsdtRate() + want := 1 / 0.14635 + if math.Abs(got-want) > 1e-9 { + t.Fatalf("GetUsdtRate() = %v, want %v", got, want) + } + + rate := GetRateForCoin("usdt", "cny") + if math.Abs(rate-0.14635) > 1e-9 { + t.Fatalf("GetRateForCoin(usdt, cny) = %v, want 0.14635", rate) + } +} + +func TestGetUsdtRateReturnsZeroWhenAPIUnavailableWithoutAdminOverride(t *testing.T) { + viper.Reset() + t.Cleanup(viper.Reset) + t.Setenv("API_RATE_URL", "") + + installMockHTTPClient(t, func(r *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusBadGateway, + Status: "502 Bad Gateway", + Header: make(http.Header), + Body: io.NopCloser(strings.NewReader("")), + Request: r, + }, nil + }) + + installSettingsGetter(t, map[string]string{ + "rate.forced_usdt_rate": "0", + "rate.api_url": "https://rate.example.test", + }) + + if got := GetUsdtRate(); got != 0 { + t.Fatalf("GetUsdtRate() = %v, want 0", got) + } + if got := GetRateForCoin("usdt", "cny"); got != 0 { + t.Fatalf("GetRateForCoin(usdt, cny) = %v, want 0", got) + } +} + +func TestGetRateForCoinCallsRateAPIOnceForUsdtCnyFailure(t *testing.T) { + viper.Reset() + t.Cleanup(viper.Reset) + t.Setenv("API_RATE_URL", "") + + callCount := 0 + installMockHTTPClient(t, func(r *http.Request) (*http.Response, error) { + callCount++ + return &http.Response{ + StatusCode: http.StatusBadGateway, + Status: "502 Bad Gateway", + Header: make(http.Header), + Body: io.NopCloser(strings.NewReader("")), + Request: r, + }, nil + }) + + installSettingsGetter(t, map[string]string{ + "rate.forced_usdt_rate": "0", + "rate.api_url": "https://rate.example.test", + }) + + if got := GetRateForCoin("usdt", "cny"); got != 0 { + t.Fatalf("GetRateForCoin(usdt, cny) = %v, want 0", got) + } + if callCount != 1 { + t.Fatalf("rate api call count = %d, want 1", callCount) + } +} diff --git a/src/config/settings_bridge.go b/src/config/settings_bridge.go new file mode 100644 index 0000000..98f9997 --- /dev/null +++ b/src/config/settings_bridge.go @@ -0,0 +1,34 @@ +package config + +// Settings lookups are injected at runtime by bootstrap (after DB init) +// to keep the config package free of a `model/data` import, which would +// create a cycle via `model/dao -> config`. +// +// If unset (e.g. during early startup or tests) the getters return the +// zero string / 0 and callers apply their own fallback behavior. + +// SettingsGetString is installed by bootstrap.Init with a closure that +// reads from the settings table. Runtime-only. +var SettingsGetString func(key string) string + +func settingsRateApiUrl() string { + if SettingsGetString == nil { + return "" + } + return SettingsGetString("rate.api_url") +} + +func settingsForcedUsdtRate() float64 { + if SettingsGetString == nil { + return 0 + } + raw := SettingsGetString("rate.forced_usdt_rate") + if raw == "" { + return 0 + } + f, err := parseFloat(raw) + if err != nil { + return 0 + } + return f +} diff --git a/src/controller/admin/api_key_controller.go b/src/controller/admin/api_key_controller.go new file mode 100644 index 0000000..06384ab --- /dev/null +++ b/src/controller/admin/api_key_controller.go @@ -0,0 +1,310 @@ +package admin + +import ( + "crypto/rand" + "encoding/hex" + "errors" + "strconv" + "strings" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/labstack/echo/v4" +) + +// CreateApiKeyRequest is the payload for creating an API key. +// A single key is valid for both gateway flows (epay/gmpay); there is +// no gateway_type. PID is auto-generated (incrementing from 1000); +// no manual override. +type CreateApiKeyRequest struct { + Name string `json:"name" validate:"required|maxLen:128" example:"My API Key"` + IpWhitelist string `json:"ip_whitelist" example:""` + NotifyUrl string `json:"notify_url" example:"https://example.com/notify"` +} + +// CreateApiKeyResponse is the response for a newly created API key. +type CreateApiKeyResponse struct { + ID uint64 `json:"id" example:"1"` + Name string `json:"name" example:"My API Key"` + Pid string `json:"pid" example:"1003"` + // SecretKey is returned ONCE on creation. After that, fetch via + // GET /api-keys/:id/secret or rotate to generate a new one. + SecretKey string `json:"secret_key" example:"secret123abc456"` +} + +// UpdateApiKeyRequest is the payload for updating an API key. +type UpdateApiKeyRequest struct { + Name *string `json:"name" example:"Updated Key Name"` + IpWhitelist *string `json:"ip_whitelist" example:"10.0.0.1,192.168.0.0/24"` + NotifyUrl *string `json:"notify_url" example:"https://example.com/notify"` +} + +// ChangeApiKeyStatusRequest is the payload for toggling API key status. +type ChangeApiKeyStatusRequest struct { + // 状态 1=启用 2=禁用 + Status int `json:"status" validate:"required|in:1,2" enums:"1,2" example:"1"` +} + +// ListApiKeys returns all api_keys rows. SecretKey is stripped by the +// mdb.ApiKey json tag (`json:"-"`). +// @Summary List API keys +// @Description Returns all API keys +// @Tags Admin API Keys +// @Security AdminJWT +// @Produce json +// @Success 200 {object} response.ApiResponse{data=[]mdb.ApiKey} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/api-keys [get] +func (c *BaseAdminController) ListApiKeys(ctx echo.Context) error { + rows, err := data.ListApiKeys() + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, rows) +} + +// CreateApiKey mints a new universal key. PID is auto-incremented from +// the highest existing numeric PID (starting at 1000). Secret is +// randomly generated and returned once. +// @Summary Create API key +// @Description Create a new universal API key. Usable for both gateway flows (epay/gmpay). PID auto-incremented; secret returned once. +// @Tags Admin API Keys +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param request body admin.CreateApiKeyRequest true "API key payload" +// @Success 200 {object} response.ApiResponse{data=admin.CreateApiKeyResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/api-keys [post] +func (c *BaseAdminController) CreateApiKey(ctx echo.Context) error { + req := new(CreateApiKeyRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + + // Retry on unique-index violation: two concurrent creates could + // both see the same max PID from NextPid() and race on INSERT. + // The loser re-reads and retries with the now-higher max. + const maxAttempts = 5 + secret := randomHex(32) + var row *mdb.ApiKey + for attempt := 0; attempt < maxAttempts; attempt++ { + pid, err := data.NextPid() + if err != nil { + return c.FailJson(ctx, err) + } + row = &mdb.ApiKey{ + Name: req.Name, + Pid: strconv.Itoa(pid), + SecretKey: secret, + IpWhitelist: req.IpWhitelist, + NotifyUrl: req.NotifyUrl, + Status: mdb.ApiKeyStatusEnable, + } + err = data.CreateApiKey(row) + if err == nil { + break + } + if attempt == maxAttempts-1 || !isUniqueViolation(err) { + return c.FailJson(ctx, err) + } + } + return c.SucJson(ctx, CreateApiKeyResponse{ + ID: row.ID, + Name: row.Name, + Pid: row.Pid, + SecretKey: secret, + }) +} + +// isUniqueViolation matches the driver-specific strings for a unique- +// index collision across SQLite / MySQL / PostgreSQL. Good enough for +// the PID retry loop; a cleaner approach would be a typed error but +// GORM doesn't surface one portably. +func isUniqueViolation(err error) bool { + if err == nil { + return false + } + msg := strings.ToLower(err.Error()) + return strings.Contains(msg, "unique") || + strings.Contains(msg, "duplicate") || + strings.Contains(msg, "constraint failed") +} + +// UpdateApiKey patches name / ip_whitelist / notify_url. Secret rotation +// and enable/disable have their own endpoints. +// @Summary Update API key +// @Description Patch API key name / ip_whitelist / notify_url +// @Tags Admin API Keys +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param id path int true "API key ID" +// @Param request body admin.UpdateApiKeyRequest true "Fields to update" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/api-keys/{id} [patch] +func (c *BaseAdminController) UpdateApiKey(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + req := new(UpdateApiKeyRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + fields := map[string]interface{}{} + if req.Name != nil { + fields["name"] = *req.Name + } + if req.IpWhitelist != nil { + fields["ip_whitelist"] = *req.IpWhitelist + } + if req.NotifyUrl != nil { + fields["notify_url"] = *req.NotifyUrl + } + if err := data.UpdateApiKeyFields(id, fields); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// ChangeApiKeyStatus toggles enable/disable. +// @Summary Change API key status +// @Description Toggle enable/disable for an API key (1=enabled, 2=disabled) +// @Tags Admin API Keys +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param id path int true "API key ID" +// @Param request body admin.ChangeApiKeyStatusRequest true "Status payload" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/api-keys/{id}/status [post] +func (c *BaseAdminController) ChangeApiKeyStatus(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + req := new(ChangeApiKeyStatusRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + if err := data.UpdateApiKeyFields(id, map[string]interface{}{"status": req.Status}); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// RotateApiKeySecret issues a fresh secret_key. Returned only this time. +// @Summary Rotate API key secret +// @Description Generate a new secret_key. Returned only once. +// @Tags Admin API Keys +// @Security AdminJWT +// @Produce json +// @Param id path int true "API key ID" +// @Success 200 {object} response.ApiResponse{data=admin.RotateSecretResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/api-keys/{id}/rotate-secret [post] +func (c *BaseAdminController) RotateApiKeySecret(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + secret := randomHex(32) + if err := data.UpdateApiKeyFields(id, map[string]interface{}{"secret_key": secret}); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, map[string]string{"secret_key": secret}) +} + +// DeleteApiKey soft-deletes a row. Orders created with this key will +// fail to callback (resolveOrderApiKey returns a clear error) — prefer +// disabling via /status over deletion if there are live orders. +// @Summary Delete API key +// @Description Soft-delete an API key +// @Tags Admin API Keys +// @Security AdminJWT +// @Produce json +// @Param id path int true "API key ID" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/api-keys/{id} [delete] +func (c *BaseAdminController) DeleteApiKey(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + if err := data.DeleteApiKeyByID(id); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// GetApiKeyStats returns usage stats for one key. Currently thin — just +// the stored call_count and last_used_at — since we don't persist per- +// call telemetry. Expanded later if/when we add a request log table. +// @Summary Get API key stats +// @Description Returns usage stats (call_count, last_used_at) for an API key +// @Tags Admin API Keys +// @Security AdminJWT +// @Produce json +// @Param id path int true "API key ID" +// @Success 200 {object} response.ApiResponse{data=admin.ApiKeyStatsResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/api-keys/{id}/stats [get] +func (c *BaseAdminController) GetApiKeyStats(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + row, err := data.GetApiKeyByID(id) + if err != nil { + return c.FailJson(ctx, err) + } + if row.ID == 0 { + return c.FailJson(ctx, errors.New("api key not found")) + } + return c.SucJson(ctx, map[string]interface{}{ + "call_count": row.CallCount, + "last_used_at": row.LastUsedAt, + }) +} + +// GetApiKeySecret returns the secret_key for one API key. Requires +// admin JWT authentication. +// @Summary View API key secret +// @Description Returns the secret_key for an API key (admin only) +// @Tags Admin API Keys +// @Security AdminJWT +// @Produce json +// @Param id path int true "API key ID" +// @Success 200 {object} response.ApiResponse{data=map[string]string} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/api-keys/{id}/secret [get] +func (c *BaseAdminController) GetApiKeySecret(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + row, err := data.GetApiKeyByID(id) + if err != nil { + return c.FailJson(ctx, err) + } + if row.ID == 0 { + return c.FailJson(ctx, errors.New("api key not found")) + } + return c.SucJson(ctx, map[string]string{"secret_key": row.SecretKey}) +} + +func randomHex(n int) string { + b := make([]byte, n) + _, _ = rand.Read(b) + return hex.EncodeToString(b) +} diff --git a/src/controller/admin/auth_controller.go b/src/controller/admin/auth_controller.go new file mode 100644 index 0000000..1df4e75 --- /dev/null +++ b/src/controller/admin/auth_controller.go @@ -0,0 +1,199 @@ +package admin + +import ( + "errors" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + appjwt "github.com/GMWalletApp/epusdt/util/jwt" + "github.com/labstack/echo/v4" +) + +// LoginRequest is the payload for admin login. +type LoginRequest struct { + Username string `json:"username" validate:"required" example:"admin"` + Password string `json:"password" validate:"required" example:"password123"` +} + +// LoginResponse is the response for a successful login. +type LoginResponse struct { + Token string `json:"token" example:"eyJhbGciOiJIUzI1NiIs..."` + Username string `json:"username" example:"admin"` + UserID uint64 `json:"user_id" example:"1"` +} + +// ChangePasswordRequest is the payload for changing admin password. +type ChangePasswordRequest struct { + OldPassword string `json:"old_password" validate:"required" example:"old_pass"` + NewPassword string `json:"new_password" validate:"required|minLen:6" example:"new_pass123"` +} + +// MeResponse wraps AdminUser with a default-password flag. +type MeResponse struct { + mdb.AdminUser + PasswordIsDefault bool `json:"password_is_default" example:"true"` +} + +// InitialPasswordResponse is returned by the one-time initial password API. +type InitialPasswordResponse struct { + Username string `json:"username" example:"admin"` + Password string `json:"password" example:"a1b2c3d4e5f6"` +} + +// Login verifies credentials, stamps last_login_at, returns a signed JWT. +// @Summary Admin login +// @Description Verify credentials and return a signed JWT token +// @Tags Admin Auth +// @Accept json +// @Produce json +// @Param request body admin.LoginRequest true "Login credentials" +// @Success 200 {object} response.ApiResponse{data=admin.LoginResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/auth/login [post] +func (c *BaseAdminController) Login(ctx echo.Context) error { + req := new(LoginRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + user, err := data.GetAdminUserByUsername(req.Username) + if err != nil { + return c.FailJson(ctx, err) + } + if user.ID == 0 || !data.VerifyPassword(user.PasswordHash, req.Password) { + return c.FailJson(ctx, errors.New("invalid username or password")) + } + if user.Status != mdb.AdminUserStatusEnable { + return c.FailJson(ctx, errors.New("user disabled")) + } + token, err := appjwt.Sign(user.ID, user.Username) + if err != nil { + return c.FailJson(ctx, err) + } + err = data.TouchAdminUserLastLogin(user.ID) + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, LoginResponse{ + Token: token, + Username: user.Username, + UserID: user.ID, + }) +} + +// GetInitialPassword returns the one-time initial admin password. +// @Summary Get initial admin password (one-time) +// @Description Returns the initial random admin password once, then invalidates it. +// @Tags Admin Auth +// @Produce json +// @Success 200 {object} response.ApiResponse{data=admin.InitialPasswordResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/auth/init-password [get] +func (c *BaseAdminController) GetInitialPassword(ctx echo.Context) error { + password, err := data.ConsumeInitialAdminPassword() + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, InitialPasswordResponse{ + Username: "admin", + Password: password, + }) +} + +// GetInitialPasswordHash returns the initial-password fingerprint so the +// frontend can warn until the password is changed. +// @Summary Get initial admin password hash +// @Description Returns the initial password hash and password-changed flag. +// @Tags Admin Auth +// @Produce json +// @Success 200 {object} response.ApiResponse{data=data.InitialAdminPasswordHashInfo} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/auth/init-password-hash [get] +func (c *BaseAdminController) GetInitialPasswordHash(ctx echo.Context) error { + info, err := data.GetInitialAdminPasswordHashInfo() + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, info) +} + +// Logout is a no-op stub — tokens are stateless and the frontend +// discards them. Kept for API symmetry with the documented spec. +// @Summary Admin logout +// @Description Logout (no-op, frontend discards token) +// @Tags Admin Auth +// @Security AdminJWT +// @Produce json +// @Success 200 {object} response.ApiResponse +// @Router /admin/api/v1/auth/logout [post] +func (c *BaseAdminController) Logout(ctx echo.Context) error { + return c.SucJson(ctx, nil) +} + +// Me returns the currently authenticated admin user profile. +// @Summary Get current admin profile +// @Description Returns the currently authenticated admin user +// @Tags Admin Auth +// @Security AdminJWT +// @Produce json +// @Success 200 {object} response.ApiResponse{data=admin.MeResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/auth/me [get] +func (c *BaseAdminController) Me(ctx echo.Context) error { + uid := currentAdminUserID(ctx) + if uid == 0 { + return c.FailJson(ctx, errors.New("unauthorized")) + } + user, err := data.GetAdminUserByID(uid) + if err != nil { + return c.FailJson(ctx, err) + } + if user.ID == 0 { + return c.FailJson(ctx, errors.New("user not found")) + } + // Warn the frontend when the operator hasn't changed the seeded + // initial password. + isDefault := data.IsUsingInitialAdminPassword() + return c.SucJson(ctx, MeResponse{ + AdminUser: *user, + PasswordIsDefault: isDefault, + }) +} + +// ChangePassword requires the old password, updates to the new one. +// @Summary Change admin password +// @Description Change the current admin user's password +// @Tags Admin Auth +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param request body admin.ChangePasswordRequest true "Password payload" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/auth/password [post] +func (c *BaseAdminController) ChangePassword(ctx echo.Context) error { + uid := currentAdminUserID(ctx) + if uid == 0 { + return c.FailJson(ctx, errors.New("unauthorized")) + } + req := new(ChangePasswordRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + user, err := data.GetAdminUserByID(uid) + if err != nil { + return c.FailJson(ctx, err) + } + if user.ID == 0 || !data.VerifyPassword(user.PasswordHash, req.OldPassword) { + return c.FailJson(ctx, errors.New("old password incorrect")) + } + if err := data.UpdateAdminUserPassword(uid, req.NewPassword); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} diff --git a/src/controller/admin/base.go b/src/controller/admin/base.go new file mode 100644 index 0000000..80f770c --- /dev/null +++ b/src/controller/admin/base.go @@ -0,0 +1,26 @@ +package admin + +import ( + "github.com/GMWalletApp/epusdt/controller" + "github.com/GMWalletApp/epusdt/middleware" + "github.com/labstack/echo/v4" +) + +// Ctrl is the singleton admin controller. Keeps parity with comm.Ctrl. +var Ctrl = &BaseAdminController{} + +// BaseAdminController aggregates admin-domain handlers. Split across +// *_controller.go files in this package; all receive methods hang off +// this type so a single router registration is enough. +type BaseAdminController struct { + controller.BaseController +} + +// currentAdminUserID returns the admin user id injected by CheckAdminJWT. +// Returns 0 if the middleware is missing (treat as auth bug upstream). +func currentAdminUserID(ctx echo.Context) uint64 { + if v, ok := ctx.Get(middleware.AdminUserIDKey).(uint64); ok { + return v + } + return 0 +} diff --git a/src/controller/admin/chain_controller.go b/src/controller/admin/chain_controller.go new file mode 100644 index 0000000..2db08c4 --- /dev/null +++ b/src/controller/admin/chain_controller.go @@ -0,0 +1,71 @@ +package admin + +import ( + "github.com/GMWalletApp/epusdt/model/data" + "github.com/labstack/echo/v4" +) + +// UpdateChainRequest is the payload for updating chain settings. +type UpdateChainRequest struct { + Enabled *bool `json:"enabled" example:"true"` + MinConfirmations *int `json:"min_confirmations" example:"20"` + ScanIntervalSec *int `json:"scan_interval_sec" example:"5"` + DisplayName *string `json:"display_name" example:"Tron"` +} + +// ListChains returns the chains table (tron/ethereum/solana seeded; new +// networks like bsc/polygon inserted manually once supported). +// @Summary List chains +// @Description Returns all supported blockchain networks +// @Tags Admin Chains +// @Security AdminJWT +// @Produce json +// @Success 200 {object} response.ApiResponse{data=[]mdb.Chain} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/chains [get] +func (c *BaseAdminController) ListChains(ctx echo.Context) error { + rows, err := data.ListChains() + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, rows) +} + +// UpdateChain toggles enabled / tweaks scan params. Scanners re-read the +// chains table on every poll tick, so changes take effect within one +// cycle without a restart. +// @Summary Update chain +// @Description Toggle enabled / tweak scan params for a chain +// @Tags Admin Chains +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param network path string true "Network name (e.g. tron, ethereum, solana)" +// @Param request body admin.UpdateChainRequest true "Chain settings" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/chains/{network} [patch] +func (c *BaseAdminController) UpdateChain(ctx echo.Context) error { + network := ctx.Param("network") + req := new(UpdateChainRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + fields := map[string]interface{}{} + if req.Enabled != nil { + fields["enabled"] = *req.Enabled + } + if req.MinConfirmations != nil { + fields["min_confirmations"] = *req.MinConfirmations + } + if req.ScanIntervalSec != nil { + fields["scan_interval_sec"] = *req.ScanIntervalSec + } + if req.DisplayName != nil { + fields["display_name"] = *req.DisplayName + } + if err := data.UpdateChainFields(network, fields); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} diff --git a/src/controller/admin/chain_token_controller.go b/src/controller/admin/chain_token_controller.go new file mode 100644 index 0000000..034db84 --- /dev/null +++ b/src/controller/admin/chain_token_controller.go @@ -0,0 +1,181 @@ +package admin + +import ( + "strconv" + "strings" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/labstack/echo/v4" +) + +// CreateChainTokenRequest is the payload for creating a chain token. +type CreateChainTokenRequest struct { + Network string `json:"network" validate:"required" example:"tron"` + Symbol string `json:"symbol" validate:"required|maxLen:32" example:"USDT"` + ContractAddress string `json:"contract_address" example:"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"` + Decimals int `json:"decimals" example:"6"` + Enabled *bool `json:"enabled" example:"true"` + MinAmount float64 `json:"min_amount" example:"1.0"` +} + +// UpdateChainTokenRequest is the payload for updating a chain token. +type UpdateChainTokenRequest struct { + ContractAddress *string `json:"contract_address" example:"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"` + Decimals *int `json:"decimals" example:"6"` + Enabled *bool `json:"enabled" example:"true"` + MinAmount *float64 `json:"min_amount" example:"1.0"` +} + +// ChangeChainTokenStatusRequest is the payload for toggling chain token status. +type ChangeChainTokenStatusRequest struct { + Enabled bool `json:"enabled" example:"true"` +} + +// ListChainTokens returns rows, optionally filtered by network. +// @Summary List chain tokens +// @Description Returns chain tokens, optionally filtered by network +// @Tags Admin Chain Tokens +// @Security AdminJWT +// @Produce json +// @Param network query string false "Network filter" +// @Success 200 {object} response.ApiResponse{data=[]mdb.ChainToken} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/chain-tokens [get] +func (c *BaseAdminController) ListChainTokens(ctx echo.Context) error { + network := strings.ToLower(strings.TrimSpace(ctx.QueryParam("network"))) + rows, err := data.ListChainTokens(network) + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, rows) +} + +// CreateChainToken inserts a new row. Default decimals=6 when 0 passed. +// @Summary Create chain token +// @Description Create a new chain token entry +// @Tags Admin Chain Tokens +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param request body admin.CreateChainTokenRequest true "Chain token payload" +// @Success 200 {object} response.ApiResponse{data=mdb.ChainToken} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/chain-tokens [post] +func (c *BaseAdminController) CreateChainToken(ctx echo.Context) error { + req := new(CreateChainTokenRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + decimals := req.Decimals + if decimals == 0 { + decimals = 6 + } + enabled := true + if req.Enabled != nil { + enabled = *req.Enabled + } + row := &mdb.ChainToken{ + Network: strings.ToLower(strings.TrimSpace(req.Network)), + Symbol: strings.ToUpper(strings.TrimSpace(req.Symbol)), + ContractAddress: strings.TrimSpace(req.ContractAddress), + Decimals: decimals, + Enabled: enabled, + MinAmount: req.MinAmount, + } + if err := data.CreateChainToken(row); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, row) +} + +// UpdateChainToken patches mutable columns. +// @Summary Update chain token +// @Description Patch chain token fields +// @Tags Admin Chain Tokens +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param id path int true "Chain token ID" +// @Param request body admin.UpdateChainTokenRequest true "Fields to update" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/chain-tokens/{id} [patch] +func (c *BaseAdminController) UpdateChainToken(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + req := new(UpdateChainTokenRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + fields := map[string]interface{}{} + if req.ContractAddress != nil { + fields["contract_address"] = *req.ContractAddress + } + if req.Decimals != nil { + fields["decimals"] = *req.Decimals + } + if req.Enabled != nil { + fields["enabled"] = *req.Enabled + } + if req.MinAmount != nil { + fields["min_amount"] = *req.MinAmount + } + if err := data.UpdateChainTokenFields(id, fields); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// ChangeChainTokenStatus toggles enable/disable. +// @Summary Change chain token status +// @Description Toggle enable/disable for a chain token +// @Tags Admin Chain Tokens +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param id path int true "Chain token ID" +// @Param request body admin.ChangeChainTokenStatusRequest true "Status payload" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/chain-tokens/{id}/status [post] +func (c *BaseAdminController) ChangeChainTokenStatus(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + req := new(ChangeChainTokenStatusRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := data.UpdateChainTokenFields(id, map[string]interface{}{"enabled": req.Enabled}); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// DeleteChainToken soft-deletes the row. +// @Summary Delete chain token +// @Description Soft-delete a chain token +// @Tags Admin Chain Tokens +// @Security AdminJWT +// @Produce json +// @Param id path int true "Chain token ID" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/chain-tokens/{id} [delete] +func (c *BaseAdminController) DeleteChainToken(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + if err := data.DeleteChainTokenByID(id); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} diff --git a/src/controller/admin/dashboard_controller.go b/src/controller/admin/dashboard_controller.go new file mode 100644 index 0000000..ea2ff07 --- /dev/null +++ b/src/controller/admin/dashboard_controller.go @@ -0,0 +1,288 @@ +package admin + +import ( + "strconv" + "strings" + "time" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/labstack/echo/v4" +) + +// OverviewResponse is the dashboard top-card response. +type OverviewResponse struct { + TotalAsset float64 `json:"total_asset" example:"12345.6789"` + Volume float64 `json:"volume" example:"100.5"` + OrderCount int64 `json:"order_count" example:"42"` + SuccessRate float64 `json:"success_rate" example:"0.85"` + SevenDayVolume float64 `json:"seven_day_volume" example:"700.25"` + ActiveAddresses int64 `json:"active_addresses" example:"5"` + OnlineChains int64 `json:"online_chains" example:"3"` +} + +// OrderStatsResponse is the order statistics response. +type OrderStatsResponse struct { + OrderCount int64 `json:"order_count" example:"100"` + SuccessCount int64 `json:"success_count" example:"85"` + SuccessRate float64 `json:"success_rate" example:"0.85"` + AvgPaymentSeconds float64 `json:"avg_payment_seconds" example:"120.5"` + ExpiredUnpaidCount int64 `json:"expired_unpaid_count" example:"10"` +} + +// RpcHealthCheckResponse is the response for a health check probe. +type RpcHealthCheckResponse struct { + // 健康状态 unknown=未知 ok=正常 down=异常 + Status string `json:"status" example:"ok" enums:"unknown,ok,down"` + LastLatencyMs int `json:"last_latency_ms" example:"120"` +} + +// ApiKeyStatsResponse is the response for API key usage stats. +type ApiKeyStatsResponse struct { + CallCount int64 `json:"call_count" example:"342"` + LastUsedAt string `json:"last_used_at" example:"2026-04-14T08:30:00+00:00"` +} + +// RotateSecretResponse is returned when rotating an API key secret. +type RotateSecretResponse struct { + SecretKey string `json:"secret_key" example:"newSecret123abc456"` +} + +// BatchImportResult is one row in the batch import response. +type BatchImportResult struct { + Address string `json:"address" example:"TTestTronAddress001"` + OK bool `json:"ok" example:"true"` + Error string `json:"error,omitempty" example:""` +} + +// SettingsUpsertResult is one row in the settings upsert response. +type SettingsUpsertResult struct { + Key string `json:"key" example:"rate.api_url"` + OK bool `json:"ok" example:"true"` + Error string `json:"error,omitempty" example:""` +} + +// Overview returns the top-card numbers for the dashboard landing page. +// All values are computed with on-demand SQL — no cache — per the design. +// The selected time range (range / start_at / end_at) is applied to +// volume, order_count, success_rate and active_addresses. +// seven_day_volume always covers the rolling past 7 days. +// total_asset and online_chains are time-independent. +// @Summary Dashboard overview +// @Description Returns top-card numbers: total asset, volume, success rate, active addresses, etc. Supports ?range= for filtering. +// @Tags Admin Dashboard +// @Security AdminJWT +// @Produce json +// @Param range query string false "Time range: today, 7d, 30d, custom" default(today) +// @Param start_at query int false "Start time (Unix seconds, for custom range)" +// @Param end_at query int false "End time (Unix seconds, for custom range)" +// @Success 200 {object} response.ApiResponse{data=admin.OverviewResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/dashboard/overview [get] +func (c *BaseAdminController) Overview(ctx echo.Context) error { + start, end := parseRange(ctx) + + now := time.Now() + sevenDaysAgo := startOfDay(now).AddDate(0, 0, -6) + + totalActual, _ := data.SumPaidActualAmount() + + orderCount, successCount, volume, _ := data.PaidStatsInRange(start, end) + var successRate float64 + if orderCount > 0 { + successRate = float64(successCount) / float64(orderCount) + } + + _, _, sevenDayActual, _ := data.PaidStatsInRange(sevenDaysAgo, now) + + activeAddr, _ := data.ActiveAddressCountInRange(start, end) + onlineChains, _ := data.CountEnabledChains() + + return c.SucJson(ctx, map[string]interface{}{ + "total_asset": totalActual, + "volume": volume, + "order_count": orderCount, + "success_rate": successRate, + "seven_day_volume": sevenDayActual, + "active_addresses": activeAddr, + "online_chains": onlineChains, + }) +} + +// isHourlyRange returns true when the time window spans ≤ 1 day, +// so callers can choose hourly vs daily granularity. +func isHourlyRange(start, end time.Time) bool { + return end.Sub(start) <= 24*time.Hour +} + +// AssetTrend returns per-day actual_amount for paid orders. group_by= +// "total" yields one series; "address" yields rows keyed by +// receive_address for the stacked chart. +// Granularity: hourly when range ≤ 1 day, daily otherwise. +// Missing buckets are always zero-filled. +// @Summary Asset trend +// @Description Returns per-period actual_amount for paid orders. Hourly for ≤1-day ranges, daily otherwise. Missing buckets are zero-filled. +// @Tags Admin Dashboard +// @Security AdminJWT +// @Produce json +// @Param range query string false "Time range: today, 7d, 30d, custom" default(today) +// @Param start_at query int false "Start time (Unix seconds, for custom range)" +// @Param end_at query int false "End time (Unix seconds, for custom range)" +// @Param group_by query string false "Group by: total or address" default(total) +// @Success 200 {object} response.ApiResponse{data=[]data.DailyStat} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/dashboard/asset-trend [get] +func (c *BaseAdminController) AssetTrend(ctx echo.Context) error { + start, end := parseRange(ctx) + groupBy := strings.ToLower(strings.TrimSpace(ctx.QueryParam("group_by"))) + hourly := isHourlyRange(start, end) + if groupBy == "address" { + var rows interface{} + var err error + if hourly { + rows, err = data.HourlyAssetByAddress(start, end) + } else { + rows, err = data.DailyAssetByAddress(start, end) + } + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, rows) + } + var rows interface{} + var err error + if hourly { + rows, err = data.HourlyOrderStats(start, end) + } else { + rows, err = data.DailyOrderStats(start, end) + } + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, rows) +} + +// RevenueTrend mirrors the daily stats view used for revenue charts. +// Same data shape as AssetTrend(group_by=total) but kept as its own +// endpoint so the frontend can evolve each chart independently. +// Granularity: hourly when range ≤ 1 day, daily otherwise. +// Missing buckets are always zero-filled. +// @Summary Revenue trend +// @Description Returns per-period revenue stats for charts. Hourly for ≤1-day ranges, daily otherwise. Missing buckets are zero-filled. +// @Tags Admin Dashboard +// @Security AdminJWT +// @Produce json +// @Param range query string false "Time range: today, 7d, 30d, custom" default(today) +// @Param start_at query int false "Start time (Unix seconds, for custom range)" +// @Param end_at query int false "End time (Unix seconds, for custom range)" +// @Success 200 {object} response.ApiResponse{data=[]data.DailyStat} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/dashboard/revenue-trend [get] +func (c *BaseAdminController) RevenueTrend(ctx echo.Context) error { + start, end := parseRange(ctx) + var rows interface{} + var err error + if isHourlyRange(start, end) { + rows, err = data.HourlyOrderStats(start, end) + } else { + rows, err = data.DailyOrderStats(start, end) + } + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, rows) +} + +// OrderStats returns aggregate order figures for the selected window: +// total count, success rate, average payment duration (seconds), and +// expired-unpaid count. +// @Summary Order statistics +// @Description Returns aggregate order figures: count, success rate, avg payment time, expired count +// @Tags Admin Dashboard +// @Security AdminJWT +// @Produce json +// @Param range query string false "Time range: today, 7d, 30d, custom" default(today) +// @Param start_at query int false "Start time (Unix seconds, for custom range)" +// @Param end_at query int false "End time (Unix seconds, for custom range)" +// @Success 200 {object} response.ApiResponse{data=admin.OrderStatsResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/dashboard/order-stats [get] +func (c *BaseAdminController) OrderStats(ctx echo.Context) error { + start, end := parseRange(ctx) + total, success, _, err := data.PaidStatsInRange(start, end) + if err != nil { + return c.FailJson(ctx, err) + } + avg, _ := data.AveragePaymentDurationSeconds(start, end) + expired, _ := data.CountExpiredInRange(start, end) + + var rate float64 + if total > 0 { + rate = float64(success) / float64(total) + } + return c.SucJson(ctx, map[string]interface{}{ + "order_count": total, + "success_count": success, + "success_rate": rate, + "avg_payment_seconds": avg, + "expired_unpaid_count": expired, + }) +} + +// RecentOrders returns the last N orders for the dashboard list card. +// @Summary Recent orders +// @Description Returns the last N orders for the dashboard +// @Tags Admin Dashboard +// @Security AdminJWT +// @Produce json +// @Param limit query int false "Number of orders to return" default(20) +// @Success 200 {object} response.ApiResponse{data=[]mdb.Orders} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/dashboard/recent-orders [get] +func (c *BaseAdminController) RecentOrders(ctx echo.Context) error { + limit := 20 + if s := ctx.QueryParam("limit"); s != "" { + if n, err := strconv.Atoi(s); err == nil { + limit = n + } + } + rows, err := data.RecentOrders(limit) + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, rows) +} + +// parseRange maps the ?range=... shorthand to a concrete [start, end]. +// Accepted: today / 7d / 30d / custom (with start_at/end_at Unix secs). +// Defaults to today. +func parseRange(ctx echo.Context) (time.Time, time.Time) { + rng := strings.ToLower(strings.TrimSpace(ctx.QueryParam("range"))) + now := time.Now() + todayStart := startOfDay(now) + switch rng { + case "7d": + return todayStart.AddDate(0, 0, -6), now + case "30d": + return todayStart.AddDate(0, 0, -29), now + case "custom": + start := todayStart + end := now + if s := ctx.QueryParam("start_at"); s != "" { + if n, err := strconv.ParseInt(s, 10, 64); err == nil { + start = time.Unix(n, 0) + } + } + if s := ctx.QueryParam("end_at"); s != "" { + if n, err := strconv.ParseInt(s, 10, 64); err == nil { + end = time.Unix(n, 0) + } + } + return start, end + default: + return todayStart, now + } +} + +func startOfDay(t time.Time) time.Time { + return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()) +} diff --git a/src/controller/admin/notification_controller.go b/src/controller/admin/notification_controller.go new file mode 100644 index 0000000..ac7e18a --- /dev/null +++ b/src/controller/admin/notification_controller.go @@ -0,0 +1,314 @@ +package admin + +import ( + "encoding/json" + "errors" + "strconv" + "strings" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/notify" + "github.com/GMWalletApp/epusdt/telegram" + "github.com/labstack/echo/v4" +) + +// CreateNotificationChannelRequest is the payload for creating a notification channel. +type CreateNotificationChannelRequest struct { + Type string `json:"type" validate:"required|in:telegram,webhook,email" enums:"telegram,webhook,email" example:"telegram"` + Name string `json:"name" validate:"required|maxLen:128" example:"主通知群"` + Config map[string]interface{} `json:"config" validate:"required"` + Events interface{} `json:"events"` + Enabled *bool `json:"enabled" example:"true"` +} + +// UpdateNotificationChannelRequest is the payload for updating a notification channel. +type UpdateNotificationChannelRequest struct { + Name *string `json:"name" example:"更新后的名称"` + Config map[string]interface{} `json:"config"` + Events interface{} `json:"events"` + Enabled *bool `json:"enabled" example:"true"` +} + +// ChangeChannelStatusRequest is the payload for toggling notification channel status. +type ChangeChannelStatusRequest struct { + Enabled bool `json:"enabled" example:"true"` +} + +// ListNotificationChannels lists rows, optionally filtered by type. +// @Summary List notification channels +// @Description Returns notification channels, optionally filtered by type +// @Tags Admin Notifications +// @Security AdminJWT +// @Produce json +// @Param type query string false "Channel type: telegram, webhook, email" +// @Success 200 {object} response.ApiResponse{data=[]mdb.NotificationChannel} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/notification-channels [get] +func (c *BaseAdminController) ListNotificationChannels(ctx echo.Context) error { + channelType := strings.ToLower(strings.TrimSpace(ctx.QueryParam("type"))) + rows, err := data.ListNotificationChannels(channelType) + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, rows) +} + +// CreateNotificationChannel validates Config shape per type (only +// telegram is strongly validated today) and inserts a row. +// @Summary Create notification channel +// @Description Create a new notification channel +// @Tags Admin Notifications +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param request body admin.CreateNotificationChannelRequest true "Channel payload" +// @Success 200 {object} response.ApiResponse{data=mdb.NotificationChannel} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/notification-channels [post] +func (c *BaseAdminController) CreateNotificationChannel(ctx echo.Context) error { + req := new(CreateNotificationChannelRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + req.Type = strings.ToLower(strings.TrimSpace(req.Type)) + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + if err := validateChannelConfig(req.Type, req.Config); err != nil { + return c.FailJson(ctx, err) + } + eventsMap, err := normalizeChannelEvents(req.Events) + if err != nil { + return c.FailJson(ctx, err) + } + configJSON, _ := json.Marshal(req.Config) + eventsJSON, _ := json.Marshal(eventsMap) + + enabled := true + if req.Enabled != nil { + enabled = *req.Enabled + } + row := &mdb.NotificationChannel{ + Type: req.Type, + Name: req.Name, + Config: string(configJSON), + Events: string(eventsJSON), + Enabled: enabled, + } + if err := data.CreateNotificationChannel(row); err != nil { + return c.FailJson(ctx, err) + } + if strings.ToLower(strings.TrimSpace(row.Type)) == mdb.NotificationTypeTelegram { + telegram.ReloadBotAsync("admin create telegram channel") + } + return c.SucJson(ctx, row) +} + +// UpdateNotificationChannel patches name/config/events/enabled. +// @Summary Update notification channel +// @Description Patch notification channel fields +// @Tags Admin Notifications +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param id path int true "Channel ID" +// @Param request body admin.UpdateNotificationChannelRequest true "Fields to update" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/notification-channels/{id} [patch] +func (c *BaseAdminController) UpdateNotificationChannel(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + existing, err := data.GetNotificationChannelByID(id) + if err != nil { + return c.FailJson(ctx, err) + } + isTelegram := existing != nil && existing.ID > 0 && strings.ToLower(strings.TrimSpace(existing.Type)) == mdb.NotificationTypeTelegram + + req := new(UpdateNotificationChannelRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + fields := map[string]interface{}{} + if req.Name != nil { + fields["name"] = *req.Name + } + if req.Config != nil { + configJSON, _ := json.Marshal(req.Config) + fields["config"] = string(configJSON) + } + if req.Events != nil { + eventsMap, err := normalizeChannelEvents(req.Events) + if err != nil { + return c.FailJson(ctx, err) + } + eventsJSON, _ := json.Marshal(eventsMap) + fields["events"] = string(eventsJSON) + } + if req.Enabled != nil { + fields["enabled"] = *req.Enabled + } + if err := data.UpdateNotificationChannelFields(id, fields); err != nil { + return c.FailJson(ctx, err) + } + if isTelegram { + telegram.ReloadBotAsync("admin update telegram channel") + } + return c.SucJson(ctx, nil) +} + +// ChangeNotificationChannelStatus toggles enabled. +// @Summary Change notification channel status +// @Description Toggle enable/disable for a notification channel +// @Tags Admin Notifications +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param id path int true "Channel ID" +// @Param request body admin.ChangeChannelStatusRequest true "Status payload" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/notification-channels/{id}/status [post] +func (c *BaseAdminController) ChangeNotificationChannelStatus(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + existing, err := data.GetNotificationChannelByID(id) + if err != nil { + return c.FailJson(ctx, err) + } + isTelegram := existing != nil && existing.ID > 0 && strings.ToLower(strings.TrimSpace(existing.Type)) == mdb.NotificationTypeTelegram + + req := new(ChangeChannelStatusRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := data.UpdateNotificationChannelFields(id, map[string]interface{}{"enabled": req.Enabled}); err != nil { + return c.FailJson(ctx, err) + } + if isTelegram { + telegram.ReloadBotAsync("admin change telegram channel status") + } + return c.SucJson(ctx, nil) +} + +// DeleteNotificationChannel soft-deletes the row. +// @Summary Delete notification channel +// @Description Soft-delete a notification channel +// @Tags Admin Notifications +// @Security AdminJWT +// @Produce json +// @Param id path int true "Channel ID" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/notification-channels/{id} [delete] +func (c *BaseAdminController) DeleteNotificationChannel(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + existing, err := data.GetNotificationChannelByID(id) + if err != nil { + return c.FailJson(ctx, err) + } + isTelegram := existing != nil && existing.ID > 0 && strings.ToLower(strings.TrimSpace(existing.Type)) == mdb.NotificationTypeTelegram + + if err := data.DeleteNotificationChannelByID(id); err != nil { + return c.FailJson(ctx, err) + } + if isTelegram { + telegram.ReloadBotAsync("admin delete telegram channel") + } + return c.SucJson(ctx, nil) +} + +// validateChannelConfig enforces minimum shape. Telegram needs bot_token +// + chat_id; webhook/email kept loose until those senders exist. +func validateChannelConfig(channelType string, cfg map[string]interface{}) error { + if cfg == nil { + return errors.New("config required") + } + if channelType == mdb.NotificationTypeTelegram { + configJSON, _ := json.Marshal(cfg) + if _, err := notify.ParseTelegramConfig(string(configJSON)); err != nil { + return err + } + } + return nil +} + +func normalizeChannelEvents(raw interface{}) (map[string]bool, error) { + if raw == nil { + return map[string]bool{}, nil + } + + toFlag := func(v interface{}) (bool, error) { + switch t := v.(type) { + case bool: + return t, nil + case float64: + return t != 0, nil + case string: + s := strings.ToLower(strings.TrimSpace(t)) + switch s { + case "", "0", "false", "off", "no": + return false, nil + case "1", "true", "on", "yes": + return true, nil + default: + return false, errors.New("invalid boolean string") + } + default: + return false, errors.New("invalid event value type") + } + } + + trimKey := func(s string) string { + return strings.TrimSpace(s) + } + + out := make(map[string]bool) + switch t := raw.(type) { + case map[string]bool: + for k, v := range t { + k = trimKey(k) + if k == "" { + continue + } + out[k] = v + } + return out, nil + case map[string]interface{}: + for k, v := range t { + k = trimKey(k) + if k == "" { + continue + } + flag, err := toFlag(v) + if err != nil { + return nil, err + } + out[k] = flag + } + return out, nil + case []interface{}: + for _, v := range t { + s, ok := v.(string) + if !ok { + return nil, errors.New("events array must contain strings") + } + s = trimKey(s) + if s == "" { + continue + } + out[s] = true + } + return out, nil + default: + return nil, errors.New("events must be object or string array") + } +} diff --git a/src/controller/admin/order_controller.go b/src/controller/admin/order_controller.go new file mode 100644 index 0000000..82fafbc --- /dev/null +++ b/src/controller/admin/order_controller.go @@ -0,0 +1,393 @@ +package admin + +import ( + "encoding/csv" + "errors" + "fmt" + "net/http" + "strconv" + "strings" + "time" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/request" + "github.com/GMWalletApp/epusdt/model/service" + "github.com/labstack/echo/v4" +) + +// MarkPaidRequest is the payload for manually marking an order as paid. +type MarkPaidRequest struct { + BlockTransactionId string `json:"block_transaction_id" validate:"required" example:"0xabc123def456..."` +} + +// OrderListResponse wraps the paginated order list. +type OrderListResponse struct { + List []mdb.Orders `json:"list"` + Total int64 `json:"total" example:"100"` + Page int `json:"page" example:"1"` + PageSize int `json:"page_size" example:"20"` +} + +// OrderWithSub embeds a parent order together with its child orders. +type OrderWithSub struct { + mdb.Orders + SubOrders []mdb.Orders `json:"sub_orders"` +} + +// OrderWithSubListResponse wraps the paginated list-with-sub result. +type OrderWithSubListResponse struct { + List []OrderWithSub `json:"list"` + Total int64 `json:"total" example:"100"` + Page int `json:"page" example:"1"` + PageSize int `json:"page_size" example:"20"` +} + +// ListOrders handles the admin order list with filters + pagination. +// @Summary List orders +// @Description Returns paginated orders with optional filters +// @Tags Admin Orders +// @Security AdminJWT +// @Produce json +// @Param network query string false "Network filter" +// @Param token query string false "Token filter" +// @Param address query string false "Receive address filter" +// @Param keyword query string false "Keyword search (trade_id or order_id)" +// @Param status query int false "Order status filter" +// @Param start_at query int false "Start time (Unix seconds)" +// @Param end_at query int false "End time (Unix seconds)" +// @Param page query int false "Page number" default(1) +// @Param page_size query int false "Page size" default(20) +// @Success 200 {object} response.ApiResponse{data=admin.OrderListResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/orders [get] +func (c *BaseAdminController) ListOrders(ctx echo.Context) error { + f := parseOrderFilter(ctx) + rows, total, err := data.ListOrders(f) + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, map[string]interface{}{ + "list": rows, + "total": total, + "page": f.Page, + "page_size": f.PageSize, + }) +} + +// GetOrder returns full order detail by trade_id. +// @Summary Get order +// @Description Returns full order detail by trade_id +// @Tags Admin Orders +// @Security AdminJWT +// @Produce json +// @Param trade_id path string true "Trade ID" +// @Success 200 {object} response.ApiResponse{data=mdb.Orders} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/orders/{trade_id} [get] +func (c *BaseAdminController) GetOrder(ctx echo.Context) error { + tradeID := ctx.Param("trade_id") + order, err := data.GetOrderInfoByTradeId(tradeID) + if err != nil { + return c.FailJson(ctx, err) + } + if order.ID == 0 { + return c.FailJson(ctx, errors.New("order not found")) + } + return c.SucJson(ctx, order) +} + +// CloseOrder flips a waiting order to expired and releases its lock. +// @Summary Close order +// @Description Manually close a waiting order (mark as expired) +// @Tags Admin Orders +// @Security AdminJWT +// @Produce json +// @Param trade_id path string true "Trade ID" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/orders/{trade_id}/close [post] +func (c *BaseAdminController) CloseOrder(ctx echo.Context) error { + tradeID := ctx.Param("trade_id") + order, err := data.GetOrderInfoByTradeId(tradeID) + if err != nil { + return c.FailJson(ctx, err) + } + if order.ID == 0 { + return c.FailJson(ctx, errors.New("order not found")) + } + if order.Status != mdb.StatusWaitPay { + return c.FailJson(ctx, errors.New("order is not waiting payment")) + } + ok, err := data.CloseOrderManually(tradeID) + if err != nil { + return c.FailJson(ctx, err) + } + if !ok { + return c.FailJson(ctx, errors.New("close failed (concurrent state change)")) + } + // Release the transaction lock so the amount slot becomes reusable. + _ = data.UnLockTransaction(order.Network, order.ReceiveAddress, order.Token, order.ActualAmount) + return c.SucJson(ctx, nil) +} + +// MarkOrderPaid manually marks an order paid (operator补单). Uses the +// same OrderProcessing path as on-chain confirmation so downstream +// callback + notification fire normally. +// @Summary Mark order paid +// @Description Manually mark a waiting order as paid (operator补单) +// @Tags Admin Orders +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param trade_id path string true "Trade ID" +// @Param request body admin.MarkPaidRequest true "Block transaction ID" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/orders/{trade_id}/mark-paid [post] +func (c *BaseAdminController) MarkOrderPaid(ctx echo.Context) error { + tradeID := ctx.Param("trade_id") + req := new(MarkPaidRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + order, err := data.GetOrderInfoByTradeId(tradeID) + if err != nil { + return c.FailJson(ctx, err) + } + if order.ID == 0 { + return c.FailJson(ctx, errors.New("order not found")) + } + if order.Status != mdb.StatusWaitPay { + return c.FailJson(ctx, errors.New("order is not waiting payment")) + } + err = service.OrderProcessing(&request.OrderProcessingRequest{ + ReceiveAddress: order.ReceiveAddress, + Currency: order.Currency, + Token: order.Token, + Network: order.Network, + Amount: order.ActualAmount, + TradeId: order.TradeId, + BlockTransactionId: req.BlockTransactionId, + }) + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// ResendCallback requeues the order callback by flipping +// callback_confirm back to NO. The mq worker will grab it on the +// next poll tick. +// @Summary Resend callback +// @Description Re-queue the order callback notification +// @Tags Admin Orders +// @Security AdminJWT +// @Produce json +// @Param trade_id path string true "Trade ID" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/orders/{trade_id}/resend-callback [post] +func (c *BaseAdminController) ResendCallback(ctx echo.Context) error { + tradeID := ctx.Param("trade_id") + ok, err := data.ReopenOrderCallback(tradeID) + if err != nil { + return c.FailJson(ctx, err) + } + if !ok { + return c.FailJson(ctx, errors.New("order is not paid (callback not applicable)")) + } + return c.SucJson(ctx, nil) +} + +// ExportOrders streams matching orders as CSV. No pagination — the +// caller drives what rows to include via filter params. Capped at +// 10k rows to keep the response bounded. +// @Summary Export orders as CSV +// @Description Stream matching orders as a CSV file (max 10k rows) +// @Tags Admin Orders +// @Security AdminJWT +// @Produce text/csv +// @Param network query string false "Network filter" +// @Param token query string false "Token filter" +// @Param address query string false "Receive address filter" +// @Param keyword query string false "Keyword search" +// @Param status query int false "Order status filter" +// @Param start_at query int false "Start time (Unix seconds)" +// @Param end_at query int false "End time (Unix seconds)" +// @Success 200 {string} string "CSV file" +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/orders/export [get] +func (c *BaseAdminController) ExportOrders(ctx echo.Context) error { + f := parseOrderFilter(ctx) + f.Page = 1 + f.PageSize = 10000 + rows, _, err := data.ListOrders(f) + if err != nil { + return c.FailJson(ctx, err) + } + resp := ctx.Response() + resp.Header().Set(echo.HeaderContentType, "text/csv; charset=utf-8") + resp.Header().Set(echo.HeaderContentDisposition, "attachment; filename=orders.csv") + resp.WriteHeader(http.StatusOK) + + w := csv.NewWriter(resp.Writer) + _ = w.Write([]string{"trade_id", "order_id", "amount", "actual_amount", "currency", "token", "network", "receive_address", "status", "block_transaction_id", "created_at"}) + for _, r := range rows { + _ = w.Write([]string{ + r.TradeId, + r.OrderId, + fmt.Sprintf("%.4f", r.Amount), + fmt.Sprintf("%.4f", r.ActualAmount), + r.Currency, + r.Token, + r.Network, + r.ReceiveAddress, + strconv.Itoa(r.Status), + r.BlockTransactionId, + r.CreatedAt.ToDateTimeString(), + }) + } + w.Flush() + return nil +} + +// parseOrderFilter extracts filter + pagination values from the query +// string. Time params are Unix seconds. +func parseOrderFilter(ctx echo.Context) data.OrderListFilter { + f := data.OrderListFilter{ + Network: strings.ToLower(strings.TrimSpace(ctx.QueryParam("network"))), + Token: strings.ToUpper(strings.TrimSpace(ctx.QueryParam("token"))), + Address: strings.TrimSpace(ctx.QueryParam("address")), + Keyword: strings.TrimSpace(ctx.QueryParam("keyword")), + } + if s := ctx.QueryParam("status"); s != "" { + if n, err := strconv.Atoi(s); err == nil { + f.Status = n + } + } + if s := ctx.QueryParam("start_at"); s != "" { + if n, err := strconv.ParseInt(s, 10, 64); err == nil { + t := time.Unix(n, 0) + f.StartAt = &t + } + } + if s := ctx.QueryParam("end_at"); s != "" { + if n, err := strconv.ParseInt(s, 10, 64); err == nil { + t := time.Unix(n, 0) + f.EndAt = &t + } + } + if s := ctx.QueryParam("page"); s != "" { + if n, err := strconv.Atoi(s); err == nil { + f.Page = n + } + } + if s := ctx.QueryParam("page_size"); s != "" { + if n, err := strconv.Atoi(s); err == nil { + f.PageSize = n + } + } + if f.Page < 1 { + f.Page = 1 + } + if f.PageSize < 1 { + f.PageSize = 20 + } + return f +} + +// ListOrdersWithSub returns the same paginated order list as ListOrders but +// each row has a sub_orders field containing all child orders under it. +// @Summary List orders with sub-orders +// @Description Returns paginated orders; each item embeds its child orders in sub_orders +// @Tags Admin Orders +// @Security AdminJWT +// @Produce json +// @Param network query string false "Network filter" +// @Param token query string false "Token filter" +// @Param address query string false "Receive address filter" +// @Param keyword query string false "Keyword search (trade_id or order_id)" +// @Param status query int false "Order status filter" +// @Param start_at query int false "Start time (Unix seconds)" +// @Param end_at query int false "End time (Unix seconds)" +// @Param page query int false "Page number" default(1) +// @Param page_size query int false "Page size" default(20) +// @Success 200 {object} response.ApiResponse{data=admin.OrderWithSubListResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/orders/list-with-sub [get] +func (c *BaseAdminController) ListOrdersWithSub(ctx echo.Context) error { + f := parseOrderFilter(ctx) + // Only parent orders at the top level; sub-orders appear nested inside sub_orders. + f.ParentOnly = true + rows, total, err := data.ListOrders(f) + if err != nil { + return c.FailJson(ctx, err) + } + + // Batch-fetch all sub-orders for the current page in one query. + tradeIds := make([]string, 0, len(rows)) + for _, r := range rows { + tradeIds = append(tradeIds, r.TradeId) + } + subs, err := data.GetSubOrdersByParentTradeIds(tradeIds) + if err != nil { + return c.FailJson(ctx, err) + } + + // Group sub-orders by parent_trade_id. + subMap := make(map[string][]mdb.Orders, len(subs)) + for _, s := range subs { + subMap[s.ParentTradeId] = append(subMap[s.ParentTradeId], s) + } + + list := make([]OrderWithSub, 0, len(rows)) + for _, r := range rows { + children := subMap[r.TradeId] + if children == nil { + children = []mdb.Orders{} + } + list = append(list, OrderWithSub{Orders: r, SubOrders: children}) + } + + return c.SucJson(ctx, OrderWithSubListResponse{ + List: list, + Total: total, + Page: f.Page, + PageSize: f.PageSize, + }) +} + +// GetOrderWithSub returns a single parent order together with all its child +// orders (any status), regardless of whether the caller passes a parent or +// child trade_id — if it is a child, the parent is resolved first. +// @Summary Get order with sub-orders +// @Description Returns an order and its child orders embedded in sub_orders +// @Tags Admin Orders +// @Security AdminJWT +// @Produce json +// @Param trade_id path string true "Trade ID" +// @Success 200 {object} response.ApiResponse{data=admin.OrderWithSub} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/orders/{trade_id}/with-sub [get] +func (c *BaseAdminController) GetOrderWithSub(ctx echo.Context) error { + tradeID := ctx.Param("trade_id") + order, err := data.GetOrderInfoByTradeId(tradeID) + if err != nil { + return c.FailJson(ctx, err) + } + if order.ID == 0 { + return c.FailJson(ctx, errors.New("order not found")) + } + subOrders, err := data.GetAllSubOrders(tradeID) + if err != nil { + return c.FailJson(ctx, err) + } + if subOrders == nil { + subOrders = []mdb.Orders{} + } + return c.SucJson(ctx, OrderWithSub{Orders: *order, SubOrders: subOrders}) +} diff --git a/src/controller/admin/rpc_controller.go b/src/controller/admin/rpc_controller.go new file mode 100644 index 0000000..c57848b --- /dev/null +++ b/src/controller/admin/rpc_controller.go @@ -0,0 +1,190 @@ +package admin + +import ( + "errors" + "strconv" + "strings" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/task" + "github.com/labstack/echo/v4" +) + +// CreateRpcNodeRequest is the payload for creating an RPC node. +type CreateRpcNodeRequest struct { + Network string `json:"network" validate:"required" example:"tron"` + Url string `json:"url" validate:"required" example:"https://api.trongrid.io"` + // 连接类型 http=HTTP请求 ws=WebSocket长连接 + Type string `json:"type" validate:"required|in:http,ws" enums:"http,ws" example:"http"` + Weight int `json:"weight" example:"1"` + ApiKey string `json:"api_key" example:""` + Enabled *bool `json:"enabled" example:"true"` +} + +// UpdateRpcNodeRequest is the payload for updating an RPC node. +type UpdateRpcNodeRequest struct { + Url *string `json:"url" example:"https://api.trongrid.io"` + Weight *int `json:"weight" example:"1"` + ApiKey *string `json:"api_key" example:"your-api-key"` + Enabled *bool `json:"enabled" example:"true"` +} + +// ListRpcNodes returns rows optionally filtered by network. +// @Summary List RPC nodes +// @Description Returns RPC nodes, optionally filtered by network +// @Tags Admin RPC Nodes +// @Security AdminJWT +// @Produce json +// @Param network query string false "Network filter" +// @Success 200 {object} response.ApiResponse{data=[]mdb.RpcNode} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/rpc-nodes [get] +func (c *BaseAdminController) ListRpcNodes(ctx echo.Context) error { + network := strings.ToLower(strings.TrimSpace(ctx.QueryParam("network"))) + rows, err := data.ListRpcNodes(network) + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, rows) +} + +// CreateRpcNode inserts a row. Status starts as "unknown" until the +// health-check task runs. +// @Summary Create RPC node +// @Description Create a new RPC node +// @Tags Admin RPC Nodes +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param request body admin.CreateRpcNodeRequest true "RPC node payload" +// @Success 200 {object} response.ApiResponse{data=mdb.RpcNode} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/rpc-nodes [post] +func (c *BaseAdminController) CreateRpcNode(ctx echo.Context) error { + req := new(CreateRpcNodeRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + weight := req.Weight + if weight < 1 { + weight = 1 + } + enabled := true + if req.Enabled != nil { + enabled = *req.Enabled + } + row := &mdb.RpcNode{ + Network: strings.ToLower(strings.TrimSpace(req.Network)), + Url: strings.TrimSpace(req.Url), + Type: strings.ToLower(strings.TrimSpace(req.Type)), + Weight: weight, + ApiKey: req.ApiKey, + Enabled: enabled, + Status: mdb.RpcNodeStatusUnknown, + LastLatencyMs: -1, + } + if err := data.CreateRpcNode(row); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, row) +} + +// UpdateRpcNode patches url/weight/api_key/enabled. +// @Summary Update RPC node +// @Description Patch RPC node fields +// @Tags Admin RPC Nodes +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param id path int true "RPC node ID" +// @Param request body admin.UpdateRpcNodeRequest true "Fields to update" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/rpc-nodes/{id} [patch] +func (c *BaseAdminController) UpdateRpcNode(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + req := new(UpdateRpcNodeRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + fields := map[string]interface{}{} + if req.Url != nil { + fields["url"] = *req.Url + } + if req.Weight != nil { + fields["weight"] = *req.Weight + } + if req.ApiKey != nil { + fields["api_key"] = *req.ApiKey + } + if req.Enabled != nil { + fields["enabled"] = *req.Enabled + } + if err := data.UpdateRpcNodeFields(id, fields); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// DeleteRpcNode soft-deletes the row. +// @Summary Delete RPC node +// @Description Soft-delete an RPC node +// @Tags Admin RPC Nodes +// @Security AdminJWT +// @Produce json +// @Param id path int true "RPC node ID" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/rpc-nodes/{id} [delete] +func (c *BaseAdminController) DeleteRpcNode(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + if err := data.DeleteRpcNodeByID(id); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// HealthCheckRpcNode performs an on-demand probe and writes the result. +// For HTTP endpoints this is a GET to the URL with a short timeout; for +// WS we just attempt a TCP-level check via the same HTTP client (the +// handshake URL resolves the host identically). +// @Summary Health check RPC node +// @Description Perform an on-demand health probe on an RPC node +// @Tags Admin RPC Nodes +// @Security AdminJWT +// @Produce json +// @Param id path int true "RPC node ID" +// @Success 200 {object} response.ApiResponse{data=admin.RpcHealthCheckResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/rpc-nodes/{id}/health-check [post] +func (c *BaseAdminController) HealthCheckRpcNode(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + row, err := data.GetRpcNodeByID(id) + if err != nil { + return c.FailJson(ctx, err) + } + if row.ID == 0 { + return c.FailJson(ctx, errors.New("node not found")) + } + status, latency := task.ProbeNode(row.Url) + if err := data.UpdateRpcNodeHealth(id, status, latency); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, map[string]interface{}{ + "status": status, + "last_latency_ms": latency, + }) +} diff --git a/src/controller/admin/settings_controller.go b/src/controller/admin/settings_controller.go new file mode 100644 index 0000000..cacb8fe --- /dev/null +++ b/src/controller/admin/settings_controller.go @@ -0,0 +1,159 @@ +package admin + +import ( + "strings" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/telegram" + "github.com/labstack/echo/v4" +) + +// SettingUpsertItem is a single setting entry for batch upsert. +// Supported groups and keys: +// +// - group=rate: +// rate.forced_usdt_rate (float) — override USDT/CNY when > 0; <= 0 uses rate.api_url +// rate.api_url (string) — external rate API URL used when rate.forced_usdt_rate <= 0 +// rate.adjust_percent (float) — rate adjustment percentage +// rate.okx_c2c_enabled (bool) — use OKX C2C rate feed +// +// - group=epay: +// epay.default_token (string) — token for EPAY orders, e.g. "usdt" (default) +// epay.default_currency (string) — fiat currency for EPAY orders, e.g. "cny" (default) +// epay.default_network (string) — blockchain network for EPAY orders, e.g. "tron" (default) +// +// - group=brand: +// brand.site_name (string) — site display name +// brand.logo_url (string) — logo image URL +// brand.page_title (string) — payment page title +// brand.pay_success_text (string) — text shown on payment success +// brand.support_url (string) — support / help URL +// +// - group=system: +// system.order_expiration_time (int) — order expiry in minutes +type SettingUpsertItem struct { + Group string `json:"group" enums:"brand,rate,system,epay" example:"epay"` + Key string `json:"key" example:"epay.default_network"` + Value string `json:"value" example:"tron"` + Type string `json:"type" enums:"string,int,bool,json" example:"string"` +} + +// SettingsUpsertRequest is the payload for batch upserting settings. +type SettingsUpsertRequest struct { + Items []SettingUpsertItem `json:"items" validate:"required"` +} + +// ListSettings returns all rows, optionally filtered by group. +// @Summary List settings +// @Description Returns all settings, optionally filtered by group. +// @Description Available groups: brand, rate, system, epay. +// @Description See SettingUpsertItem for the full list of supported keys per group. +// @Tags Admin Settings +// @Security AdminJWT +// @Produce json +// @Param group query string false "Group filter (brand|rate|system|epay)" +// @Success 200 {object} response.ApiResponse{data=[]mdb.Setting} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/settings [get] +func (c *BaseAdminController) ListSettings(ctx echo.Context) error { + group := strings.ToLower(strings.TrimSpace(ctx.QueryParam("group"))) + rows, err := data.ListSettingsByGroup(group) + if err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, rows) +} + +// UpsertSettings batch-inserts / updates rows. Each item is treated +// independently so a malformed row in the middle doesn't drop earlier +// ones. Errors are returned per-key so the UI can surface them. +// @Summary Upsert settings +// @Description Batch insert/update settings. Returns per-key status. +// @Description Supported groups: brand, rate, system, epay. +// @Description epay group keys: epay.default_token (e.g. "usdt"), epay.default_currency (e.g. "cny"), epay.default_network (e.g. "tron"). +// @Description rate group keys: rate.forced_usdt_rate (>0 overrides USDT/CNY; <=0 uses rate.api_url), rate.api_url, rate.adjust_percent, rate.okx_c2c_enabled. +// @Description brand group keys: brand.site_name, brand.logo_url, brand.page_title, brand.pay_success_text, brand.support_url. +// @Description system group keys: system.order_expiration_time. +// @Tags Admin Settings +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param request body admin.SettingsUpsertRequest true "Settings payload" +// @Success 200 {object} response.ApiResponse{data=[]admin.SettingsUpsertResult} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/settings [put] +func (c *BaseAdminController) UpsertSettings(ctx echo.Context) error { + req := new(SettingsUpsertRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + type result struct { + Key string `json:"key"` + OK bool `json:"ok"` + Error string `json:"error,omitempty"` + } + out := make([]result, 0, len(req.Items)) + for _, item := range req.Items { + key := strings.TrimSpace(item.Key) + if key == "" { + out = append(out, result{Key: item.Key, OK: false, Error: "key required"}) + continue + } + if err := data.SetSetting(item.Group, key, item.Value, item.Type); err != nil { + out = append(out, result{Key: key, OK: false, Error: err.Error()}) + continue + } + out = append(out, result{Key: key, OK: true}) + } + + // When telegram credentials are updated via settings, reload the + // command bot so operators don't need to restart the process, and + // sync the notification_channels row so the notify dispatcher picks + // up the new values immediately. + telegramKeys := map[string]bool{ + "system.telegram_bot_token": true, + "system.telegram_chat_id": true, + "system.telegram_payment_notice_enabled": true, + "system.telegram_abnormal_notice_enabled": true, + } + for _, item := range req.Items { + if telegramKeys[strings.TrimSpace(item.Key)] { + telegram.ReloadBotAsync("settings upsert") + go dao.SyncTelegramChannelFromSettings() + break + } + } + + return c.SucJson(ctx, out) +} + +// DeleteSetting removes one row. The next read of that key will fall +// back to the hardcoded default (see settings_data.GetSetting*). +// @Summary Delete setting +// @Description Remove a setting by key (falls back to default) +// @Tags Admin Settings +// @Security AdminJWT +// @Produce json +// @Param key path string true "Setting key" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/settings/{key} [delete] +func (c *BaseAdminController) DeleteSetting(ctx echo.Context) error { + key := strings.TrimSpace(ctx.Param("key")) + if key == "" { + return c.SucJson(ctx, nil) + } + if err := data.DeleteSetting(key); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// Public helper for the rate/usdt overrides — used by config package to +// read settings-backed values without importing the controller package. +var _ = mdb.SettingKeyRateForcedUsdt // ensure key constants remain referenced diff --git a/src/controller/admin/wallet_controller.go b/src/controller/admin/wallet_controller.go new file mode 100644 index 0000000..3e938ea --- /dev/null +++ b/src/controller/admin/wallet_controller.go @@ -0,0 +1,279 @@ +package admin + +import ( + "errors" + "strconv" + "strings" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/labstack/echo/v4" +) + +// AdminAddWalletRequest is the payload for adding a wallet via admin. +type AdminAddWalletRequest struct { + Network string `json:"network" validate:"required" example:"tron"` + Address string `json:"address" validate:"required" example:"TTestTronAddress001"` + Remark string `json:"remark" example:"主钱包"` +} + +// AdminUpdateWalletRequest is the payload for updating a wallet remark. +type AdminUpdateWalletRequest struct { + Remark *string `json:"remark" example:"已更新的备注"` +} + +// AdminChangeWalletStatusRequest is the payload for toggling wallet status. +type AdminChangeWalletStatusRequest struct { + // 状态 1=启用 2=禁用 + Status int `json:"status" validate:"required|in:1,2" enums:"1,2" example:"1"` +} + +// AdminBatchImportRequest is the payload for batch importing wallets. +type AdminBatchImportRequest struct { + Network string `json:"network" validate:"required" example:"tron"` + // Addresses listed as observation-only wallets. Private-key import + // and API-managed modes are out of scope for v1. + Addresses []string `json:"addresses" validate:"required" example:"TAddr001,TAddr002,TAddr003"` +} + +// WalletListItem extends WalletAddress with order count. +type WalletListItem struct { + mdb.WalletAddress + OrderCount int64 `json:"order_count" example:"5"` +} + +// AdminListWallets extends the read model with per-wallet order counts +// so the UI can render the "订单数" column without an N+1 follow-up. +// @Summary List wallets (admin) +// @Description Returns wallets with per-wallet order counts +// @Tags Admin Wallets +// @Security AdminJWT +// @Produce json +// @Param network query string false "Network filter" +// @Param status query int false "Status filter (1=enabled, 2=disabled)" +// @Param keyword query string false "Search by address or remark" +// @Success 200 {object} response.ApiResponse{data=[]admin.WalletListItem} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/wallets [get] +func (c *BaseAdminController) AdminListWallets(ctx echo.Context) error { + network := strings.ToLower(strings.TrimSpace(ctx.QueryParam("network"))) + status := strings.TrimSpace(ctx.QueryParam("status")) + keyword := strings.TrimSpace(ctx.QueryParam("keyword")) + + tx := dao.Mdb.Model(&mdb.WalletAddress{}) + if network != "" { + tx = tx.Where("network = ?", network) + } + if status != "" { + if s, err := strconv.Atoi(status); err == nil { + tx = tx.Where("status = ?", s) + } + } + if keyword != "" { + kw := "%" + keyword + "%" + tx = tx.Where("address LIKE ? OR remark LIKE ?", kw, kw) + } + var rows []mdb.WalletAddress + if err := tx.Order("id DESC").Find(&rows).Error; err != nil { + return c.FailJson(ctx, err) + } + + counts, err := data.CountOrdersByAddress() + if err != nil { + return c.FailJson(ctx, err) + } + out := make([]WalletListItem, 0, len(rows)) + for _, r := range rows { + out = append(out, WalletListItem{WalletAddress: r, OrderCount: counts[r.Address]}) + } + return c.SucJson(ctx, out) +} + +// AdminAddWallet wraps the existing create with admin-exposed Remark + +// Source=manual so audit fields are populated. +// @Summary Add wallet (admin) +// @Description Create a wallet with admin-specific fields (remark, source=manual) +// @Tags Admin Wallets +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param request body admin.AdminAddWalletRequest true "Wallet payload" +// @Success 200 {object} response.ApiResponse{data=mdb.WalletAddress} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/wallets [post] +func (c *BaseAdminController) AdminAddWallet(ctx echo.Context) error { + req := new(AdminAddWalletRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + row, err := data.AddWalletAddressWithNetwork(req.Network, req.Address) + if err != nil { + return c.FailJson(ctx, err) + } + // Patch remark/source separately to avoid changing the existing + // package-level AddWalletAddressWithNetwork signature (used by + // Telegram bot + legacy endpoint). + fields := map[string]interface{}{"source": mdb.WalletSourceManual} + if req.Remark != "" { + fields["remark"] = req.Remark + } + _ = dao.Mdb.Model(&mdb.WalletAddress{}).Where("id = ?", row.ID).Updates(fields).Error + row.Remark = req.Remark + row.Source = mdb.WalletSourceManual + return c.SucJson(ctx, row) +} + +// AdminGetWallet returns detail including order count for one wallet. +// @Summary Get wallet (admin) +// @Description Returns wallet detail with order count +// @Tags Admin Wallets +// @Security AdminJWT +// @Produce json +// @Param id path int true "Wallet ID" +// @Success 200 {object} response.ApiResponse{data=admin.WalletListItem} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/wallets/{id} [get] +func (c *BaseAdminController) AdminGetWallet(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + wallet, err := data.GetWalletAddressById(id) + if err != nil { + return c.FailJson(ctx, err) + } + if wallet.ID == 0 { + return c.FailJson(ctx, errors.New("wallet not found")) + } + counts, _ := data.CountOrdersByAddress() + return c.SucJson(ctx, WalletListItem{WalletAddress: *wallet, OrderCount: counts[wallet.Address]}) +} + +// AdminUpdateWallet only patches remark (status has its own endpoint). +// @Summary Update wallet (admin) +// @Description Patch wallet remark +// @Tags Admin Wallets +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param id path int true "Wallet ID" +// @Param request body admin.AdminUpdateWalletRequest true "Fields to update" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/wallets/{id} [patch] +func (c *BaseAdminController) AdminUpdateWallet(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + req := new(AdminUpdateWalletRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + fields := map[string]interface{}{} + if req.Remark != nil { + fields["remark"] = *req.Remark + } + if len(fields) == 0 { + return c.SucJson(ctx, nil) + } + if err := dao.Mdb.Model(&mdb.WalletAddress{}).Where("id = ?", id).Updates(fields).Error; err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// AdminChangeWalletStatus reuses existing helper. +// @Summary Change wallet status (admin) +// @Description Toggle enable/disable for a wallet (1=enabled, 2=disabled) +// @Tags Admin Wallets +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param id path int true "Wallet ID" +// @Param request body admin.AdminChangeWalletStatusRequest true "Status payload" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/wallets/{id}/status [post] +func (c *BaseAdminController) AdminChangeWalletStatus(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + req := new(AdminChangeWalletStatusRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + if err := data.ChangeWalletAddressStatus(id, req.Status); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// AdminDeleteWallet soft-deletes the wallet. +// @Summary Delete wallet (admin) +// @Description Soft-delete a wallet +// @Tags Admin Wallets +// @Security AdminJWT +// @Produce json +// @Param id path int true "Wallet ID" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/wallets/{id} [delete] +func (c *BaseAdminController) AdminDeleteWallet(ctx echo.Context) error { + id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) + if err != nil { + return c.FailJson(ctx, err) + } + if err := data.DeleteWalletAddressById(id); err != nil { + return c.FailJson(ctx, err) + } + return c.SucJson(ctx, nil) +} + +// AdminBatchImportWallets accepts a list of addresses and creates +// them all as observation wallets. Per-row failures are collected and +// returned so the UI can surface which addresses already existed. +// @Summary Batch import wallets +// @Description Import multiple wallet addresses at once. Per-row status is returned. +// @Tags Admin Wallets +// @Security AdminJWT +// @Accept json +// @Produce json +// @Param request body admin.AdminBatchImportRequest true "Batch import payload" +// @Success 200 {object} response.ApiResponse{data=[]admin.BatchImportResult} +// @Failure 400 {object} response.ApiResponse +// @Router /admin/api/v1/wallets/batch-import [post] +func (c *BaseAdminController) AdminBatchImportWallets(ctx echo.Context) error { + req := new(AdminBatchImportRequest) + if err := ctx.Bind(req); err != nil { + return c.FailJson(ctx, err) + } + if err := c.ValidateStruct(ctx, req); err != nil { + return c.FailJson(ctx, err) + } + type result struct { + Address string `json:"address"` + OK bool `json:"ok"` + Error string `json:"error,omitempty"` + } + out := make([]result, 0, len(req.Addresses)) + for _, addr := range req.Addresses { + row, err := data.AddWalletAddressWithNetwork(req.Network, addr) + if err != nil { + out = append(out, result{Address: addr, OK: false, Error: err.Error()}) + continue + } + _ = dao.Mdb.Model(&mdb.WalletAddress{}).Where("id = ?", row.ID). + Update("source", mdb.WalletSourceImport).Error + out = append(out, result{Address: addr, OK: true}) + } + return c.SucJson(ctx, out) +} diff --git a/src/controller/base.go b/src/controller/base.go index fb25bba..928eec9 100644 --- a/src/controller/base.go +++ b/src/controller/base.go @@ -2,7 +2,7 @@ package controller import ( "errors" - "github.com/assimon/luuu/util/http" + "github.com/GMWalletApp/epusdt/util/http" "github.com/gookit/validate" "github.com/gookit/validate/locales/zhcn" "github.com/gookit/validate/locales/zhtw" diff --git a/src/controller/comm/base.go b/src/controller/comm/base.go index b0b18a3..bd649d9 100644 --- a/src/controller/comm/base.go +++ b/src/controller/comm/base.go @@ -1,6 +1,6 @@ package comm -import "github.com/assimon/luuu/controller" +import "github.com/GMWalletApp/epusdt/controller" var Ctrl = &BaseCommController{} diff --git a/src/controller/comm/order_controller.go b/src/controller/comm/order_controller.go index 4c58c4d..208b060 100644 --- a/src/controller/comm/order_controller.go +++ b/src/controller/comm/order_controller.go @@ -2,16 +2,47 @@ package comm import ( "encoding/json" - "fmt" - "log" + "net/http" - "github.com/assimon/luuu/model/request" - "github.com/assimon/luuu/model/service" - "github.com/assimon/luuu/util/constant" + "github.com/GMWalletApp/epusdt/middleware" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/request" + "github.com/GMWalletApp/epusdt/model/service" + "github.com/GMWalletApp/epusdt/util/constant" + "github.com/GMWalletApp/epusdt/util/log" "github.com/labstack/echo/v4" ) +// apiKeyFromContext returns the api_keys row stamped by CheckApiSign. +// Returns nil when the middleware didn't run (should not happen on authed routes). +func apiKeyFromContext(ctx echo.Context) *mdb.ApiKey { + if v, ok := ctx.Get(middleware.ApiKeyRowKey).(*mdb.ApiKey); ok { + return v + } + return nil +} + // CreateTransaction 创建交易 +// @Summary Create transaction +// @Description Create a payment transaction order. Accepts JSON body (application/json) or form-encoded body (application/x-www-form-urlencoded). +// @Tags Payment +// @Accept json +// @Accept x-www-form-urlencoded +// @Produce json +// @Param request body request.CreateTransactionRequest false "Transaction payload (JSON)" +// @Param order_id formData string false "Merchant order ID" +// @Param currency formData string false "Fiat currency (e.g. cny)" +// @Param token formData string false "Crypto token (e.g. usdt)" +// @Param network formData string false "Network (e.g. tron)" +// @Param amount formData number false "Amount" +// @Param notify_url formData string false "Callback URL" +// @Param signature formData string false "MD5 signature" +// @Param redirect_url formData string false "Redirect URL" +// @Param name formData string false "Order name" +// @Param payment_type formData string false "Payment type" +// @Success 200 {object} response.ApiResponse{data=response.CreateTransactionResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /payments/gmpay/v1/order/create-transaction [post] func (c *BaseCommController) CreateTransaction(ctx echo.Context) (err error) { req := new(request.CreateTransactionRequest) if err = ctx.Bind(req); err != nil { @@ -20,7 +51,7 @@ func (c *BaseCommController) CreateTransaction(ctx echo.Context) (err error) { if err = c.ValidateStruct(ctx, req); err != nil { return c.FailJson(ctx, err) } - resp, err := service.CreateTransaction(req) + resp, err := service.CreateTransaction(req, apiKeyFromContext(ctx)) if err != nil { return c.FailJson(ctx, err) } @@ -28,6 +59,15 @@ func (c *BaseCommController) CreateTransaction(ctx echo.Context) (err error) { } // SwitchNetwork 切换支付网络,创建或返回子订单 +// @Summary Switch payment network +// @Description Switch to a different payment network, creating or returning a sub-order +// @Tags Payment +// @Accept json +// @Produce json +// @Param request body request.SwitchNetworkRequest true "Switch network payload" +// @Success 200 {object} response.ApiResponse +// @Failure 400 {object} response.ApiResponse +// @Router /pay/switch-network [post] func (c *BaseCommController) SwitchNetwork(ctx echo.Context) (err error) { req := new(request.SwitchNetworkRequest) if err = ctx.Bind(req); err != nil { @@ -46,33 +86,60 @@ func (c *BaseCommController) SwitchNetwork(ctx echo.Context) (err error) { return c.FailJson(ctx, err) } - fmt.Printf("switch network response: \n%s", string(jsonBytes)) + log.Sugar.Debugf("switch network response: \n%s", string(jsonBytes)) return c.SucJson(ctx, resp) } +// CreateTransactionAndRedirect creates a transaction and redirects to +// the checkout counter. The route accepts BOTH GET (query string) and +// POST (form) per the legacy EPAY protocol; swagger documents POST as +// the canonical form — the GET variant is identical save the transport. +// @Summary Create transaction and redirect (EPAY compat) +// @Description Legacy EPAY-style endpoint. Accepts GET (querystring) and POST (form). On success, 302 redirects to /pay/checkout-counter/{trade_id}. Signature uses MD5 of sorted params + secret_key of the api_keys row matching the submitted pid. +// @Tags Payment +// @Accept x-www-form-urlencoded +// @Produce html +// @Param pid query integer false "API key PID (GET query)" +// @Param money query number false "Amount (fiat, GET query)" +// @Param out_trade_no query string false "Merchant order ID (GET query)" +// @Param notify_url query string false "Callback URL (GET query)" +// @Param return_url query string false "Redirect URL after payment (GET query)" +// @Param name query string false "Order name (GET query)" +// @Param type query string false "Payment type (e.g. alipay, GET query)" +// @Param sign query string false "MD5 signature (GET query)" +// @Param sign_type query string false "Signature type (MD5, GET query)" +// @Param pid formData integer true "API key PID" +// @Param money formData number true "Amount (fiat)" +// @Param out_trade_no formData string true "Merchant order ID" +// @Param notify_url formData string true "Callback URL" +// @Param return_url formData string false "Redirect URL after payment" +// @Param name formData string false "Order name" +// @Param type formData string false "Payment type (e.g. alipay)" +// @Param sign formData string true "MD5 signature" +// @Param sign_type formData string false "Signature type (MD5)" +// @Success 302 "Redirect to checkout counter" +// @Failure 400 {object} response.ApiResponse +// @Router /payments/epay/v1/order/create-transaction/submit.php [post] +// @Router /payments/epay/v1/order/create-transaction/submit.php [get] func (c *BaseCommController) CreateTransactionAndRedirect(ctx echo.Context) (err error) { req := new(request.CreateTransactionRequest) if err = ctx.Bind(req); err != nil { - log.Println("bind request error:", err) + log.Sugar.Errorf("bind request error: %v", err) return c.FailJson(ctx, constant.ParamsMarshalErr) } if err = c.ValidateStruct(ctx, req); err != nil { - log.Println("validate request error:", err) + log.Sugar.Errorf("validate request error: %v", err) return c.FailJson(ctx, err) } - resp, err := service.CreateTransaction(req) + resp, err := service.CreateTransaction(req, apiKeyFromContext(ctx)) if err != nil { - log.Println("create transaction error:", err) + log.Sugar.Errorf("create transaction error: %v", err) return c.FailJson(ctx, err) } - fmt.Printf("create transaction response: %+v\n", resp) + log.Sugar.Debugf("create transaction response: %+v", resp) tradeID := resp.TradeId - - ctx.Redirect(302, "/pay/checkout-counter/"+tradeID) - - return nil - + return ctx.Redirect(http.StatusFound, "/pay/checkout-counter/"+tradeID) } diff --git a/src/controller/comm/pay_controller.go b/src/controller/comm/pay_controller.go index 66e6850..46aad94 100644 --- a/src/controller/comm/pay_controller.go +++ b/src/controller/comm/pay_controller.go @@ -1,48 +1,58 @@ package comm import ( - "encoding/json" - "fmt" "html/template" "net/http" "path/filepath" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/model/response" - "github.com/assimon/luuu/model/service" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/model/response" + "github.com/GMWalletApp/epusdt/model/service" "github.com/labstack/echo/v4" ) // CheckoutCounter 收银台 +// @Summary Checkout counter page +// @Description Render the payment checkout counter HTML page for a given trade +// @Tags Payment +// @Produce html +// @Param trade_id path string true "Trade ID" +// @Success 200 {string} string "HTML page" +// @Router /pay/checkout-counter/{trade_id} [get] func (c *BaseCommController) CheckoutCounter(ctx echo.Context) (err error) { tradeId := ctx.Param("trade_id") resp, err := service.GetCheckoutCounterByTradeId(tradeId) if err != nil { if err == service.ErrOrder { - tmpl, err := template.ParseFiles(filepath.Join(config.StaticFilePath, "index.html")) - if err != nil { - return ctx.String(http.StatusOK, err.Error()) + // Unknown trade id: render the page with empty payload + // (client side shows a friendly "order not found" screen). + tmpl, tmplErr := template.ParseFiles(filepath.Join(config.StaticFilePath, "index.html")) + if tmplErr != nil { + return ctx.String(http.StatusInternalServerError, tmplErr.Error()) } + ctx.Response().Status = http.StatusNotFound emptyResp := response.CheckoutCounterResponse{} return tmpl.Execute(ctx.Response(), emptyResp) } - return ctx.String(http.StatusOK, err.Error()) + return ctx.String(http.StatusInternalServerError, err.Error()) } tmpl, err := template.ParseFiles(filepath.Join(config.StaticFilePath, "index.html")) if err != nil { - return ctx.String(http.StatusOK, err.Error()) + return ctx.String(http.StatusInternalServerError, err.Error()) } - jsonByte, err := json.MarshalIndent(resp, "", " ") - if err != nil { - return ctx.String(http.StatusOK, err.Error()) - } - fmt.Printf("%v\n", string(jsonByte)) - return tmpl.Execute(ctx.Response(), resp) } // CheckStatus 支付状态检测 +// @Summary Check payment status +// @Description Check the payment status of an order by trade ID +// @Tags Payment +// @Produce json +// @Param trade_id path string true "Trade ID" +// @Success 200 {object} response.ApiResponse{data=response.CheckStatusResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /pay/check-status/{trade_id} [get] func (c *BaseCommController) CheckStatus(ctx echo.Context) (err error) { tradeId := ctx.Param("trade_id") order, err := service.GetOrderInfoByTradeId(tradeId) diff --git a/src/controller/comm/supported_asset_controller.go b/src/controller/comm/supported_asset_controller.go index 72325d9..0ad4063 100644 --- a/src/controller/comm/supported_asset_controller.go +++ b/src/controller/comm/supported_asset_controller.go @@ -3,28 +3,29 @@ package comm import ( "sort" "strconv" + "strings" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/response" - "github.com/assimon/luuu/util/constant" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/response" + "github.com/GMWalletApp/epusdt/util/constant" "github.com/labstack/echo/v4" ) -type addSupportedAssetRequest struct { - Network string `json:"network" validate:"required"` - Token string `json:"token" validate:"required"` - Status int64 `json:"status" validate:"required|in:1,2"` -} - -type updateSupportedAssetRequest struct { - Network string `json:"network" validate:"required"` - Token string `json:"token" validate:"required"` - Status int64 `json:"status" validate:"required|in:1,2"` -} - -// GetSupportedAssets 对外公开可用链与 token 列表(无需鉴权,仅返回已启用项)。 +// GetSupportedAssets 对外公开可用链与 token 列表。数据源是管理后台 +// 的 chains + chain_tokens + wallet_address 三张表的实时查询,admin +// 启用/禁用链或代币后,这个接口在下次调用时就会反映新状态(无缓存)。 +// 仅返回:链 enabled=true、代币 enabled=true、且该链上至少有一个可用 +// 钱包地址的组合。 +// @Summary List supported (network, tokens) groupings +// @Description Public endpoint, Auth required in /admin/api/v1/supported-assets +// @Tags Supported Assets +// @Produce json +// @Success 200 {object} response.ApiResponse{data=response.SupportedAssetsResponse} +// @Failure 400 {object} response.ApiResponse +// @Router /payments/gmpay/v1/supported-assets [get] +// @Router /admin/api/v1/supported-assets [get] func (c *BaseCommController) GetSupportedAssets(ctx echo.Context) error { - list, err := data.ListEnabledSupportedAssets() + chains, err := data.ListEnabledChains() if err != nil { return c.FailJson(ctx, err) } @@ -33,32 +34,42 @@ func (c *BaseCommController) GetSupportedAssets(ctx echo.Context) error { return c.FailJson(ctx, err) } - networkSet := make(map[string]struct{}) + // A chain only qualifies if it has at least one wallet available — + // without a recipient address, payments on that chain can't be + // processed even if the chain + token config says "enabled". + networkHasWallet := make(map[string]struct{}) for _, w := range wallets { - networkSet[w.Network] = struct{}{} + networkHasWallet[strings.ToLower(w.Network)] = struct{}{} } - grouped := make(map[string][]string) - for _, item := range list { - if _, ok := networkSet[item.Network]; !ok { + supports := make([]response.NetworkTokenSupport, 0, len(chains)) + for _, ch := range chains { + network := strings.ToLower(ch.Network) + if _, ok := networkHasWallet[network]; !ok { continue } - grouped[item.Network] = append(grouped[item.Network], item.Token) - } - - networks := make([]string, 0, len(grouped)) - for network := range grouped { - networks = append(networks, network) - } - sort.Strings(networks) - - supports := make([]response.NetworkTokenSupport, 0, len(networks)) - for _, network := range networks { - tokens := grouped[network] - sort.Strings(tokens) + tokens, err := data.ListEnabledChainTokensByNetwork(network) + if err != nil { + return c.FailJson(ctx, err) + } + if len(tokens) == 0 { + continue + } + symbols := make([]string, 0, len(tokens)) + for _, t := range tokens { + sym := strings.ToUpper(strings.TrimSpace(t.Symbol)) + if sym == "" { + continue + } + symbols = append(symbols, sym) + } + if len(symbols) == 0 { + continue + } + sort.Strings(symbols) supports = append(supports, response.NetworkTokenSupport{ Network: network, - Tokens: tokens, + Tokens: symbols, }) } @@ -66,9 +77,17 @@ func (c *BaseCommController) GetSupportedAssets(ctx echo.Context) error { } // ListSupportedAssetRecords 查询支持项明细(无需鉴权)。 +// @Summary List supported asset records +// @Description Public endpoint. Returns enabled chain_tokens, optionally filtered by network. +// @Tags Supported Assets +// @Produce json +// @Param network query string false "Network filter (e.g. tron, ethereum)" +// @Success 200 {object} response.ApiResponse{data=[]mdb.ChainToken} +// @Failure 400 {object} response.ApiResponse +// @Router /payments/gmpay/v1/supported-assets/records [get] func (c *BaseCommController) ListSupportedAssetRecords(ctx echo.Context) error { network := ctx.QueryParam("network") - list, err := data.ListSupportedAssets(network) + list, err := data.ListEnabledChainTokens(network) if err != nil { return c.FailJson(ctx, err) } @@ -76,72 +95,25 @@ func (c *BaseCommController) ListSupportedAssetRecords(ctx echo.Context) error { } // GetSupportedAsset 查询单条支持项(无需鉴权)。 +// @Summary Get a supported asset +// @Description Public endpoint. Returns one chain_token row by ID. Returns 404 if the token is disabled. +// @Tags Supported Assets +// @Produce json +// @Param id path int true "ChainToken ID" +// @Success 200 {object} response.ApiResponse{data=mdb.ChainToken} +// @Failure 400 {object} response.ApiResponse +// @Router /payments/gmpay/v1/supported-assets/{id} [get] func (c *BaseCommController) GetSupportedAsset(ctx echo.Context) error { id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) if err != nil { return c.FailJson(ctx, constant.ParamsMarshalErr) } - asset, err := data.GetSupportedAssetByID(id) + token, err := data.GetChainTokenByID(id) if err != nil { return c.FailJson(ctx, err) } - if asset.ID <= 0 { + if token.ID <= 0 || !token.Enabled { return c.FailJson(ctx, constant.SupportedAssetNotFound) } - return c.SucJson(ctx, asset) -} - -// AddSupportedAsset 新增支持项(鉴权)。 -func (c *BaseCommController) AddSupportedAsset(ctx echo.Context) error { - req := new(addSupportedAssetRequest) - if err := ctx.Bind(req); err != nil { - return c.FailJson(ctx, constant.ParamsMarshalErr) - } - if err := c.ValidateStruct(ctx, req); err != nil { - return c.FailJson(ctx, err) - } - asset, err := data.AddSupportedAsset(req.Network, req.Token, req.Status) - if err != nil { - return c.FailJson(ctx, err) - } - return c.SucJson(ctx, asset) -} - -// UpdateSupportedAsset 修改支持项(鉴权)。 -func (c *BaseCommController) UpdateSupportedAsset(ctx echo.Context) error { - id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) - if err != nil { - return c.FailJson(ctx, constant.ParamsMarshalErr) - } - req := new(updateSupportedAssetRequest) - if err := ctx.Bind(req); err != nil { - return c.FailJson(ctx, constant.ParamsMarshalErr) - } - if err := c.ValidateStruct(ctx, req); err != nil { - return c.FailJson(ctx, err) - } - asset, err := data.UpdateSupportedAsset(id, req.Network, req.Token, req.Status) - if err != nil { - return c.FailJson(ctx, err) - } - return c.SucJson(ctx, asset) -} - -// DeleteSupportedAsset 删除支持项(鉴权)。 -func (c *BaseCommController) DeleteSupportedAsset(ctx echo.Context) error { - id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) - if err != nil { - return c.FailJson(ctx, constant.ParamsMarshalErr) - } - asset, err := data.GetSupportedAssetByID(id) - if err != nil { - return c.FailJson(ctx, err) - } - if asset.ID <= 0 { - return c.FailJson(ctx, constant.SupportedAssetNotFound) - } - if err := data.DeleteSupportedAssetByID(id); err != nil { - return c.FailJson(ctx, err) - } - return c.SucJson(ctx, nil) + return c.SucJson(ctx, token) } diff --git a/src/controller/comm/wallet_controller.go b/src/controller/comm/wallet_controller.go deleted file mode 100644 index 71ca5a7..0000000 --- a/src/controller/comm/wallet_controller.go +++ /dev/null @@ -1,98 +0,0 @@ -package comm - -import ( - "strconv" - - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/util/constant" - "github.com/labstack/echo/v4" -) - -type addWalletRequest struct { - Network string `json:"network" validate:"required"` - Address string `json:"address" validate:"required"` -} - -type changeStatusRequest struct { - Status int `json:"status" validate:"required|in:1,2"` -} - -// AddWallet 添加钱包地址 -func (c *BaseCommController) AddWallet(ctx echo.Context) error { - req := new(addWalletRequest) - if err := ctx.Bind(req); err != nil { - return c.FailJson(ctx, constant.ParamsMarshalErr) - } - if err := c.ValidateStruct(ctx, req); err != nil { - return c.FailJson(ctx, err) - } - wallet, err := data.AddWalletAddressWithNetwork(req.Network, req.Address) - if err != nil { - return c.FailJson(ctx, err) - } - return c.SucJson(ctx, wallet) -} - -// ListWallets 获取钱包列表 -func (c *BaseCommController) ListWallets(ctx echo.Context) error { - network := ctx.QueryParam("network") - var wallets []mdb.WalletAddress - var err error - if network != "" { - wallets, err = data.GetAllWalletAddressByNetwork(network) - } else { - wallets, err = data.GetAllWalletAddress() - } - if err != nil { - return c.FailJson(ctx, err) - } - return c.SucJson(ctx, wallets) -} - -// GetWallet 获取单个钱包 -func (c *BaseCommController) GetWallet(ctx echo.Context) error { - id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) - if err != nil { - return c.FailJson(ctx, constant.ParamsMarshalErr) - } - wallet, err := data.GetWalletAddressById(id) - if err != nil { - return c.FailJson(ctx, err) - } - if wallet.ID <= 0 { - return c.FailJson(ctx, constant.NotAvailableWalletAddress) - } - return c.SucJson(ctx, wallet) -} - -// ChangeWalletStatus 启用/禁用钱包 -func (c *BaseCommController) ChangeWalletStatus(ctx echo.Context) error { - id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) - if err != nil { - return c.FailJson(ctx, constant.ParamsMarshalErr) - } - req := new(changeStatusRequest) - if err := ctx.Bind(req); err != nil { - return c.FailJson(ctx, constant.ParamsMarshalErr) - } - if err := c.ValidateStruct(ctx, req); err != nil { - return c.FailJson(ctx, err) - } - if err := data.ChangeWalletAddressStatus(id, req.Status); err != nil { - return c.FailJson(ctx, err) - } - return c.SucJson(ctx, nil) -} - -// DeleteWallet 删除钱包 -func (c *BaseCommController) DeleteWallet(ctx echo.Context) error { - id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) - if err != nil { - return c.FailJson(ctx, constant.ParamsMarshalErr) - } - if err := data.DeleteWalletAddressById(id); err != nil { - return c.FailJson(ctx, err) - } - return c.SucJson(ctx, nil) -} diff --git a/src/go.mod b/src/go.mod index 9bb4db4..bce7967 100644 --- a/src/go.mod +++ b/src/go.mod @@ -1,4 +1,4 @@ -module github.com/assimon/luuu +module github.com/GMWalletApp/epusdt go 1.25.0 @@ -8,6 +8,7 @@ require ( github.com/ethereum/go-ethereum v1.15.11 github.com/gagliardetto/solana-go v1.16.0 github.com/go-resty/resty/v2 v2.11.0 + github.com/golang-jwt/jwt/v4 v4.5.1 github.com/gookit/color v1.5.0 github.com/gookit/goutil v0.4.6 github.com/gookit/validate v1.3.1 @@ -23,6 +24,7 @@ require ( github.com/spf13/viper v1.20.1 github.com/tidwall/gjson v1.18.0 go.uber.org/zap v1.27.0 + golang.org/x/crypto v0.48.0 gopkg.in/telebot.v3 v3.0.0 gorm.io/driver/mysql v1.5.1 gorm.io/driver/postgres v1.5.2 @@ -99,12 +101,11 @@ require ( github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect go.mongodb.org/mongo-driver v1.17.3 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.47.0 // indirect - golang.org/x/net v0.49.0 // indirect + golang.org/x/net v0.50.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.42.0 // indirect - golang.org/x/term v0.39.0 // indirect - golang.org/x/text v0.33.0 // indirect + golang.org/x/term v0.40.0 // indirect + golang.org/x/text v0.34.0 // indirect golang.org/x/time v0.14.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect modernc.org/libc v1.70.0 // indirect diff --git a/src/go.sum b/src/go.sum index e8a5339..e30804d 100644 --- a/src/go.sum +++ b/src/go.sum @@ -375,8 +375,8 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= -golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY= golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -397,8 +397,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= -golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -440,8 +440,8 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= -golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -450,8 +450,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= diff --git a/src/install/installer.go b/src/install/installer.go new file mode 100644 index 0000000..15f8fa9 --- /dev/null +++ b/src/install/installer.go @@ -0,0 +1,364 @@ +// Package install provides a first-run setup REST API. +// +// When the .env config file is absent (or has install=true) the HTTP start +// command calls RunInstallServer, which listens on the same address the main +// server will eventually use (default :8000) and mounts two JSON endpoints +// under /install consumed by the frontend install UI: +// +// GET /install/defaults — default field values for the form +// POST /install — validate + write .env, then shut down +// +// The HTTP listen address is submitted as two separate fields (http_bind_addr +// and http_bind_port) and combined internally as "ADDR:PORT" before writing +// the http_listen key in .env. This makes the form easier for users who only +// want to change the port without touching the bind address. +// +// Once the .env is written the install server stops and normal bootstrap +// proceeds on the same port without a restart. +package install + +import ( + "bytes" + "context" + "fmt" + "net/http" + "os" + "path/filepath" + "strings" + "text/template" + "time" + + luluHttp "github.com/GMWalletApp/epusdt/util/http" + "github.com/gookit/color" + "github.com/labstack/echo/v4" + "github.com/labstack/echo/v4/middleware" +) + +// DefaultInstallAddr is the listen address used by the install API. +// Matches the default http_listen so no extra port is needed. +const DefaultInstallAddr = ":8000" + +// InstallRequest is the payload submitted by the install form. +// All fields are optional except AppURI; omitted fields fall back to InstallDefaults(). +type InstallRequest struct { + // Application display name (default: epusdt) + AppName string `json:"app_name" form:"app_name" example:"epusdt"` + // Public base URL of the service, e.g. https://pay.example.com (required) + AppURI string `json:"app_uri" form:"app_uri" example:"https://pay.example.com"` + // Bind address for the HTTP server (default: 127.0.0.1) + HttpBindAddr string `json:"http_bind_addr" form:"http_bind_addr" example:"127.0.0.1"` + // Bind port for the HTTP server (default: 8000) + HttpBindPort int `json:"http_bind_port" form:"http_bind_port" example:"8000"` + // Runtime directory for SQLite DB and temp files (default: ./runtime) + RuntimeRootPath string `json:"runtime_root_path" form:"runtime_root_path" example:"./runtime"` + // Directory for application log files (default: ./logs) + LogSavePath string `json:"log_save_path" form:"log_save_path" example:"./logs"` + // Minutes before an unpaid order expires (default: 10) + OrderExpirationTime int `json:"order_expiration_time" form:"order_expiration_time" example:"10"` + // Maximum webhook retry attempts (default: 1) + OrderNoticeMaxRetry int `json:"order_notice_max_retry" form:"order_notice_max_retry" example:"1"` +} + +// InstallDefaults returns sensible default values for the install form. +func InstallDefaults() InstallRequest { + return InstallRequest{ + AppName: "epusdt", + AppURI: "", + HttpBindAddr: "127.0.0.1", + HttpBindPort: 8000, + RuntimeRootPath: "./runtime", + LogSavePath: "./logs", + OrderExpirationTime: 10, + OrderNoticeMaxRetry: 1, + } +} + +// installHandler holds the per-invocation state shared between handlers. +type installHandler struct { + envFilePath string + done chan struct{} +} + +func installRootRedirectMiddleware(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + if c.Request().Method == http.MethodGet && c.Request().URL.Path == "/" { + return c.Redirect(http.StatusFound, "/install") + } + return next(c) + } +} + +func resolveInstallWWWRoot() string { + // Resolve www/ relative to the executable so SPA routes work regardless + // of the working directory. main.go extracts www/ next to the binary. + wwwRoot := "./www" + if exePath, err := os.Executable(); err == nil { + if exePath, err = filepath.EvalSymlinks(exePath); err == nil { + wwwRoot = filepath.Join(filepath.Dir(exePath), "www") + } + } + return wwwRoot +} + +func newInstallServer(envFilePath, wwwRoot string) (*echo.Echo, *installHandler) { + h := &installHandler{ + envFilePath: envFilePath, + done: make(chan struct{}), + } + + e := echo.New() + e.HideBanner = true + e.HidePort = true + + // api routes for the install frontend + api := e.Group("/api") + + api.GET("/install/defaults", h.GetDefaults) + api.POST("/install", h.Submit) + + // Redirect browser visits on root to /install so first-run users land + // on the wizard directly. This must run before the static middleware, + // otherwise "/" is intercepted by the SPA index.html fallback. + e.Use(installRootRedirectMiddleware) + + e.Use(middleware.StaticWithConfig(middleware.StaticConfig{ + Skipper: func(c echo.Context) bool { + return luluHttp.ShouldSkipSPAFallback(c.Request().URL.Path) + }, + HTML5: true, + Index: "index.html", + Root: wwwRoot, + })) + + return e, h +} + +// GetDefaults returns default values for the install form. +// +// @Summary Install — get default values +// @Description Returns sensible default field values for the first-run install form. +// +// Available only before the .env config file has been written. +// After installation completes this route is no longer served. +// +// @Tags Install +// @Produce json +// @Success 200 {object} InstallRequest "Default install values" +// @Router /api/install/defaults [get] +func (h *installHandler) GetDefaults(c echo.Context) error { + return c.JSON(http.StatusOK, InstallDefaults()) +} + +// Submit validates the install payload, writes the .env file, and signals +// the install server to shut down so the main bootstrap can proceed. +// http_bind_addr and http_bind_port are combined as "ADDR:PORT" to produce +// the http_listen config key (e.g. 0.0.0.0:8000). +// +// @Summary Install — submit configuration +// @Description Validates the submitted configuration and writes the .env file. +// +// http_bind_addr + http_bind_port are joined internally as "ADDR:PORT" for +// the http_listen config key (defaults: 127.0.0.1 and 8000 respectively). +// http_bind_port must be in the range 1–65535 if provided. +// app_uri is required. All other fields are optional and fall back to +// the defaults returned by GET /api/install/defaults. +// Sets install=false in the written .env, then shuts down the install +// server so that normal application bootstrap starts on the same port. +// After installation completes this route is no longer served. +// +// @Tags Install +// @Accept json +// @Produce json +// @Param body body InstallRequest true "Install configuration" +// @Success 200 {object} map[string]string "message" +// @Failure 400 {object} map[string]string "error" +// @Failure 500 {object} map[string]string "error" +// @Router /api/install [post] +func (h *installHandler) Submit(c echo.Context) error { + req := new(InstallRequest) + if err := c.Bind(req); err != nil { + return c.JSON(http.StatusBadRequest, map[string]interface{}{"error": err.Error()}) + } + + req.AppURI = strings.TrimSpace(req.AppURI) + if req.AppURI == "" { + return c.JSON(http.StatusBadRequest, map[string]interface{}{"error": "app_uri is required"}) + } + if req.HttpBindPort != 0 && (req.HttpBindPort < 1 || req.HttpBindPort > 65535) { + return c.JSON(http.StatusBadRequest, map[string]interface{}{"error": "http_bind_port must be between 1 and 65535"}) + } + d := InstallDefaults() + if strings.TrimSpace(req.AppName) == "" { + req.AppName = d.AppName + } + if strings.TrimSpace(req.HttpBindAddr) == "" { + req.HttpBindAddr = d.HttpBindAddr + } + if req.HttpBindPort <= 0 { + req.HttpBindPort = d.HttpBindPort + } + if strings.TrimSpace(req.RuntimeRootPath) == "" { + req.RuntimeRootPath = d.RuntimeRootPath + } + if strings.TrimSpace(req.LogSavePath) == "" { + req.LogSavePath = d.LogSavePath + } + if req.OrderExpirationTime <= 0 { + req.OrderExpirationTime = d.OrderExpirationTime + } + if req.OrderNoticeMaxRetry < 0 { + req.OrderNoticeMaxRetry = d.OrderNoticeMaxRetry + } + + if err := writeEnvFile(h.envFilePath, req); err != nil { + return c.JSON(http.StatusInternalServerError, map[string]interface{}{"error": err.Error()}) + } + + go func() { close(h.done) }() + return c.JSON(http.StatusOK, map[string]interface{}{"message": "install complete, starting server…"}) +} + +// RunInstallServer starts the install REST API on listenAddr (default :8000) +// under the /install path and blocks until the .env file has been written. +// The caller should then proceed with normal app initialisation (bootstrap.InitApp). +func RunInstallServer(listenAddr, envFilePath string) { + if listenAddr == "" { + listenAddr = DefaultInstallAddr + } + + e, h := newInstallServer(envFilePath, resolveInstallWWWRoot()) + + // Build a human-readable URL for the console hint. + installHost := listenAddr + if strings.HasPrefix(installHost, ":") { + installHost = "localhost" + installHost + } + color.Green.Printf("[install] no config found — install API available at http://%s/install\n", installHost) + + go func() { + <-h.done + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) + defer cancel() + _ = e.Shutdown(ctx) + }() + + if err := e.Start(listenAddr); err != nil && err != http.ErrServerClosed { + color.Red.Printf("[install] server error: %s\n", err) + os.Exit(1) + } + + color.Green.Printf("[install] configuration saved to %s, starting…\n", envFilePath) +} + +// formControlledKeys are keys whose values always come from the install form +// (or are set unconditionally by the template). Existing config values for +// these keys must NOT be preserved — the form submission takes precedence. +var formControlledKeys = map[string]bool{ + "app_name": true, + "app_uri": true, + "http_listen": true, + "runtime_root_path": true, + "log_save_path": true, + "order_expiration_time": true, + "order_notice_max_retry": true, + "install": true, +} + +// writeEnvFile renders and writes a minimal .env file. +// If the file already exists, values for keys that are NOT controlled by the +// install form are preserved from the existing file so that operator-specific +// settings (tg_bot_token, db_type, etc.) survive a re-install. +// Keys that the form controls (app_uri, http_listen, …) always use the +// submitted values. +func writeEnvFile(path string, r *InstallRequest) error { + // Collect existing non-empty key→value pairs for non-form keys. + existingValues := map[string]string{} + if data, err := os.ReadFile(path); err == nil { + for _, line := range strings.Split(string(data), "\n") { + line = strings.TrimSpace(line) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + if idx := strings.IndexByte(line, '='); idx >= 0 { + k := strings.TrimSpace(line[:idx]) + v := strings.TrimSpace(line[idx+1:]) + if v != "" && !formControlledKeys[k] { + existingValues[k] = v + } + } + } + } + + if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { + return fmt.Errorf("create config directory: %w", err) + } + + // Render the template into a buffer first. + var buf bytes.Buffer + if err := envTemplate.Execute(&buf, r); err != nil { + return fmt.Errorf("render env template: %w", err) + } + + // For non-form keys that already had a value, substitute the existing value + // so the template default does not clobber operator configuration. + lines := strings.Split(buf.String(), "\n") + for i, line := range lines { + trimmed := strings.TrimSpace(line) + if trimmed == "" || strings.HasPrefix(trimmed, "#") { + continue + } + if idx := strings.IndexByte(trimmed, '='); idx >= 0 { + k := strings.TrimSpace(trimmed[:idx]) + if existing, ok := existingValues[k]; ok { + lines[i] = k + "=" + existing + } + } + } + + f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o600) + if err != nil { + return fmt.Errorf("open config file: %w", err) + } + defer f.Close() + _, err = fmt.Fprint(f, strings.Join(lines, "\n")) + return err +} + +var envTemplate = template.Must(template.New("env").Parse(`app_name={{.AppName}} +app_uri={{.AppURI}} +log_level=info +http_access_log=false +sql_debug=false +http_listen={{.HttpBindAddr}}:{{.HttpBindPort}} + +static_path=/static +runtime_root_path={{.RuntimeRootPath}} + +log_save_path={{.LogSavePath}} +log_max_size=32 +log_max_age=7 +max_backups=3 + +# supported values: postgres,mysql,sqlite +db_type=sqlite + +# sqlite primary database config +sqlite_database_filename= +sqlite_table_prefix= + +# sqlite runtime store config +runtime_sqlite_filename=epusdt-runtime.db + +# background scheduler config +queue_concurrency=10 +queue_poll_interval_ms=1000 +callback_retry_base_seconds=5 + +order_expiration_time={{.OrderExpirationTime}} +order_notice_max_retry={{.OrderNoticeMaxRetry}} + +api_rate_url= + +# Set to true to re-run the install wizard on next startup. +install=false +`)) diff --git a/src/install/installer_test.go b/src/install/installer_test.go new file mode 100644 index 0000000..48d1589 --- /dev/null +++ b/src/install/installer_test.go @@ -0,0 +1,224 @@ +package install + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/labstack/echo/v4" +) + +func TestInstallDefaults(t *testing.T) { + d := InstallDefaults() + if d.AppName != "epusdt" { + t.Errorf("AppName = %q, want epusdt", d.AppName) + } + if d.HttpBindAddr != "127.0.0.1" { + t.Errorf("HttpBindAddr = %q, want 127.0.0.1", d.HttpBindAddr) + } + if d.HttpBindPort != 8000 { + t.Errorf("HttpBindPort = %d, want 8000", d.HttpBindPort) + } + if d.OrderExpirationTime != 10 { + t.Errorf("OrderExpirationTime = %d, want 10", d.OrderExpirationTime) + } +} + +func TestWriteEnvFile(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, ".env") + + req := &InstallRequest{ + AppName: "myapp", + AppURI: "http://1.2.3.4:8000", + HttpBindAddr: "0.0.0.0", + HttpBindPort: 9000, + RuntimeRootPath: "./runtime", + LogSavePath: "./logs", + OrderExpirationTime: 15, + OrderNoticeMaxRetry: 3, + } + if err := writeEnvFile(path, req); err != nil { + t.Fatalf("writeEnvFile: %v", err) + } + + data, err := os.ReadFile(path) + if err != nil { + t.Fatalf("read env: %v", err) + } + content := string(data) + + for _, want := range []string{ + "app_name=myapp", + "app_uri=http://1.2.3.4:8000", + "http_listen=0.0.0.0:9000", + "order_expiration_time=15", + "order_notice_max_retry=3", + "db_type=sqlite", + "install=false", + } { + if !strings.Contains(content, want) { + t.Errorf("env file missing %q\ncontent:\n%s", want, content) + } + } +} + +func TestInstallAPIDefaults(t *testing.T) { + h := &installHandler{done: make(chan struct{})} + e := echo.New() + e.GET("/install/defaults", h.GetDefaults) + + req := httptest.NewRequest(http.MethodGet, "/install/defaults", nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("status = %d, want 200", rec.Code) + } + var body map[string]interface{} + if err := json.Unmarshal(rec.Body.Bytes(), &body); err != nil { + t.Fatalf("decode body: %v", err) + } + if body["app_name"] != "epusdt" { + t.Errorf("app_name = %v, want epusdt", body["app_name"]) + } + if body["http_bind_addr"] != "127.0.0.1" { + t.Errorf("http_bind_addr = %v, want 127.0.0.1", body["http_bind_addr"]) + } + if body["http_bind_port"] != float64(8000) { + t.Errorf("http_bind_port = %v, want 8000", body["http_bind_port"]) + } +} + +func TestInstallServerRootRedirectsToInstall(t *testing.T) { + dir := t.TempDir() + wwwRoot := filepath.Join(dir, "www") + if err := os.MkdirAll(wwwRoot, 0o755); err != nil { + t.Fatalf("mkdir www root: %v", err) + } + if err := os.WriteFile(filepath.Join(wwwRoot, "index.html"), []byte("install-ui"), 0o644); err != nil { + t.Fatalf("write index.html: %v", err) + } + + e, _ := newInstallServer(filepath.Join(dir, ".env"), wwwRoot) + + req := httptest.NewRequest(http.MethodGet, "/", nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + + if rec.Code != http.StatusFound { + t.Fatalf("status = %d, want 302; body: %s", rec.Code, rec.Body.String()) + } + if got := rec.Header().Get("Location"); got != "/install" { + t.Fatalf("Location = %q, want /install", got) + } +} + +func TestInstallServerServesSPAOnInstallRoute(t *testing.T) { + dir := t.TempDir() + wwwRoot := filepath.Join(dir, "www") + if err := os.MkdirAll(wwwRoot, 0o755); err != nil { + t.Fatalf("mkdir www root: %v", err) + } + const wantBody = "install-ui" + if err := os.WriteFile(filepath.Join(wwwRoot, "index.html"), []byte(wantBody), 0o644); err != nil { + t.Fatalf("write index.html: %v", err) + } + + e, _ := newInstallServer(filepath.Join(dir, ".env"), wwwRoot) + + req := httptest.NewRequest(http.MethodGet, "/install", nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("status = %d, want 200; body: %s", rec.Code, rec.Body.String()) + } + if body := rec.Body.String(); body != wantBody { + t.Fatalf("body = %q, want %q", body, wantBody) + } +} + +func TestInstallAPISubmit(t *testing.T) { + dir := t.TempDir() + envPath := filepath.Join(dir, ".env") + + h := &installHandler{envFilePath: envPath, done: make(chan struct{})} + e := echo.New() + e.POST("/install", h.Submit) + + payload := `{"app_name":"testapp","app_uri":"http://10.0.0.1:8000","http_bind_addr":"0.0.0.0","http_bind_port":8000,"order_expiration_time":10,"order_notice_max_retry":1}` + req := httptest.NewRequest(http.MethodPost, "/install", strings.NewReader(payload)) + req.Header.Set("Content-Type", "application/json") + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("status = %d, want 200; body: %s", rec.Code, rec.Body.String()) + } + // done channel should be closed after successful submit + select { + case <-h.done: + case <-time.After(500 * time.Millisecond): + t.Fatal("handler did not close done channel within timeout") + } + data, err := os.ReadFile(envPath) + if err != nil { + t.Fatalf("env file not written: %v", err) + } + content := string(data) + if !strings.Contains(content, "app_uri=http://10.0.0.1:8000") { + t.Errorf("env file missing app_uri; content:\n%s", content) + } + if !strings.Contains(content, "http_listen=0.0.0.0:8000") { + t.Errorf("env file missing http_listen; content:\n%s", content) + } +} + +func TestInstallAPISubmitMissingURI(t *testing.T) { + dir := t.TempDir() + envPath := filepath.Join(dir, ".env") + + h := &installHandler{envFilePath: envPath, done: make(chan struct{})} + e := echo.New() + e.POST("/install", h.Submit) + + req := httptest.NewRequest(http.MethodPost, "/install", strings.NewReader(`{"app_name":"x"}`)) + req.Header.Set("Content-Type", "application/json") + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + + if rec.Code != http.StatusBadRequest { + t.Fatalf("status = %d, want 400", rec.Code) + } + if _, err := os.Stat(envPath); err == nil { + t.Error("env file should not have been written for invalid request") + } +} + +func TestInstallAPISubmitInvalidPort(t *testing.T) { + dir := t.TempDir() + envPath := filepath.Join(dir, ".env") + + h := &installHandler{envFilePath: envPath, done: make(chan struct{})} + e := echo.New() + e.POST("/install", h.Submit) + + payload := `{"app_uri":"http://example.com","http_bind_port":99999}` + req := httptest.NewRequest(http.MethodPost, "/install", strings.NewReader(payload)) + req.Header.Set("Content-Type", "application/json") + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + + if rec.Code != http.StatusBadRequest { + t.Fatalf("status = %d, want 400; body: %s", rec.Code, rec.Body.String()) + } + if _, err := os.Stat(envPath); err == nil { + t.Error("env file should not have been written for invalid port") + } +} diff --git a/src/internal/testutil/testdb.go b/src/internal/testutil/testdb.go index 7c68ea2..091da30 100644 --- a/src/internal/testutil/testdb.go +++ b/src/internal/testutil/testdb.go @@ -4,10 +4,10 @@ import ( "path/filepath" "testing" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/model/dao" - "github.com/assimon/luuu/model/mdb" - appLog "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" + appLog "github.com/GMWalletApp/epusdt/util/log" "github.com/libtnb/sqlite" "github.com/spf13/viper" "go.uber.org/zap" @@ -20,35 +20,83 @@ func SetupTestDatabases(t testing.TB) func() { t.Helper() viper.Reset() - viper.Set("forced_usdt_rate", 1.0) viper.Set("app_uri", "https://example.com") viper.Set("order_expiration_time", 10) viper.Set("order_notice_max_retry", 2) viper.Set("callback_retry_base_seconds", 1) viper.Set("queue_concurrency", 4) viper.Set("queue_poll_interval_ms", 50) - viper.Set("api_auth_token", "test-token") config.HTTPAccessLog = false config.SQLDebug = false config.LogLevel = "error" - config.UsdtRate = 0 appLog.Sugar = zap.NewNop().Sugar() mainDB := mustOpenSQLite(t, filepath.Join(t.TempDir(), "main.db")) runtimeDB := mustOpenSQLite(t, filepath.Join(t.TempDir(), "runtime.db")) - mustMigrate(t, mainDB, &mdb.Orders{}, &mdb.WalletAddress{}) + mustMigrate(t, mainDB, + &mdb.Orders{}, + &mdb.WalletAddress{}, + &mdb.ApiKey{}, + &mdb.Setting{}, + &mdb.NotificationChannel{}, + &mdb.Chain{}, + &mdb.ChainToken{}, + &mdb.RpcNode{}, + &mdb.AdminUser{}, + ) mustMigrate(t, runtimeDB, &mdb.TransactionLock{}) dao.Mdb = mainDB dao.RuntimeDB = runtimeDB + config.SettingsGetString = func(key string) string { + if dao.Mdb == nil { + return "" + } + var row mdb.Setting + if err := dao.Mdb.Where("`key` = ?", key).Take(&row).Error; err != nil { + return "" + } + return row.Value + } + + // Seed all standard chains as enabled so IsChainEnabled checks pass. + for _, network := range []string{ + mdb.NetworkTron, mdb.NetworkSolana, mdb.NetworkEthereum, + mdb.NetworkBsc, mdb.NetworkPolygon, mdb.NetworkPlasma, + } { + mainDB.Create(&mdb.Chain{Network: network, Enabled: true}) + } + + // Seed two universal api_keys rows. Both usable for EPAY/GMPAY + // flows; the numeric PID 1001 row lets legacy tests that submit + // `pid=1001` still match. + mainDB.Create(&mdb.ApiKey{ + Name: "test-default", + Pid: "test-token", SecretKey: "test-token", + Status: mdb.ApiKeyStatusEnable, + }) + mainDB.Create(&mdb.ApiKey{ + Name: "test-pid-1001", + Pid: "1001", SecretKey: "test-token", + Status: mdb.ApiKeyStatusEnable, + }) + if err := dao.Mdb.Create(&mdb.Setting{ + Group: "rate", + Key: "rate.forced_usdt_rate", + Value: "1.0", + Type: "string", + }).Error; err != nil { + t.Fatalf("seed rate.forced_usdt_rate: %v", err) + } return func() { closeDB(t, runtimeDB) closeDB(t, mainDB) dao.Mdb = nil dao.RuntimeDB = nil + config.SettingsGetString = nil viper.Reset() } } diff --git a/src/main.go b/src/main.go index 522e672..b5b62a4 100644 --- a/src/main.go +++ b/src/main.go @@ -1,11 +1,110 @@ package main import ( - "github.com/assimon/luuu/command" + "embed" + "fmt" + "io" + "io/fs" + "os" + "path/filepath" + + "github.com/GMWalletApp/epusdt/command" "github.com/gookit/color" ) +//go:embed all:static +var staticDir embed.FS + +//go:embed all:www +var wwwDir embed.FS + +func executableDir() (string, error) { + exePath, err := os.Executable() + if err != nil { + return "", err + } + exePath, err = filepath.EvalSymlinks(exePath) + if err != nil { + return "", err + } + return filepath.Dir(exePath), nil +} + +func extractEmbeddedDir(src embed.FS, embeddedRoot, dstRoot string) error { + sub, err := fs.Sub(src, embeddedRoot) + if err != nil { + return err + } + + return fs.WalkDir(sub, ".", func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + + dstPath := filepath.Join(dstRoot, path) + + if d.IsDir() { + return os.MkdirAll(dstPath, 0o755) + } + + if err := os.MkdirAll(filepath.Dir(dstPath), 0o755); err != nil { + return err + } + + in, err := sub.Open(path) + if err != nil { + return err + } + defer in.Close() + + out, err := os.OpenFile(dstPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o644) + if err != nil { + return err + } + defer out.Close() + + _, err = io.Copy(out, in) + return err + }) +} + +func releaseStatic(fs embed.FS, target string) (string, error) { + baseDir, err := executableDir() + if err != nil { + return "", err + } + + targetDir := filepath.Join(baseDir, target) + + if err := os.RemoveAll(targetDir); err != nil { + return "", err + } + + if err := os.MkdirAll(targetDir, 0o755); err != nil { + return "", err + } + + if err := extractEmbeddedDir(fs, target, targetDir); err != nil { + return "", err + } + + return targetDir, nil +} + func main() { + staticPath, err := releaseStatic(staticDir, "static") + if err != nil { + panic(err) + } + fmt.Println("static released to:", staticPath) + + wwwwPath, err := releaseStatic(wwwDir, "www") + if err != nil { + panic(err) + } + + fmt.Println("www released to:", wwwwPath) + defer func() { if err := recover(); err != nil { color.Error.Println("[Start Server Err!!!] ", err) diff --git a/src/middleware/check_jwt.go b/src/middleware/check_jwt.go new file mode 100644 index 0000000..9428d81 --- /dev/null +++ b/src/middleware/check_jwt.go @@ -0,0 +1,50 @@ +package middleware + +import ( + "net/http" + "strings" + + appjwt "github.com/GMWalletApp/epusdt/util/jwt" + "github.com/labstack/echo/v4" +) + +const ( + // AdminUserIDKey is the echo.Context key holding the authenticated + // admin user's ID after successful JWT validation. + AdminUserIDKey = "admin_user_id" + // AdminUsernameKey mirrors the username for convenience. + AdminUsernameKey = "admin_username" +) + +// CheckAdminJWT validates an Authorization: Bearer header against +// the HS256 secret stored in system.jwt_secret. On success it injects +// the admin user ID and username into the echo context. +// +// Accepts both "Authorization: Bearer " and a bare "" for +// developer convenience (curl / postman). The token itself is always +// cryptographically validated — the relaxed header parsing doesn't +// widen the trust surface. +func CheckAdminJWT() echo.MiddlewareFunc { + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(ctx echo.Context) error { + raw := strings.TrimSpace(ctx.Request().Header.Get("Authorization")) + if raw == "" { + return echo.NewHTTPError(http.StatusUnauthorized, "missing authorization header") + } + if !strings.HasPrefix(raw, "Bearer ") { + return echo.NewHTTPError(http.StatusUnauthorized, "authorization header must use Bearer scheme") + } + token := strings.TrimSpace(raw[len("Bearer "):]) + if token == "" { + return echo.NewHTTPError(http.StatusUnauthorized, "empty token") + } + claims, err := appjwt.Parse(token) + if err != nil { + return echo.NewHTTPError(http.StatusUnauthorized, "invalid token") + } + ctx.Set(AdminUserIDKey, claims.AdminUserID) + ctx.Set(AdminUsernameKey, claims.Username) + return next(ctx) + } + } +} diff --git a/src/middleware/check_sign.go b/src/middleware/check_sign.go index af562f9..8cb3331 100644 --- a/src/middleware/check_sign.go +++ b/src/middleware/check_sign.go @@ -2,37 +2,142 @@ package middleware import ( "bytes" - "io/ioutil" + "crypto/subtle" + "io" + "net" + "net/url" + "strconv" + "strings" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/util/constant" - "github.com/assimon/luuu/util/json" - "github.com/assimon/luuu/util/sign" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/util/constant" + "github.com/GMWalletApp/epusdt/util/json" + "github.com/GMWalletApp/epusdt/util/sign" "github.com/labstack/echo/v4" ) +// Context keys populated by CheckApiSign after successful verification. +// Handlers (pay/order creation) pull ApiKeyIDKey to stamp order.api_key_id. +const ( + ApiKeyIDKey = "api_key_id" + ApiKeyRowKey = "api_key_row" +) + +// CheckApiSign validates the body signature against the secret_key of +// the api_keys row matching the submitted "pid" field. A single row is +// valid for all gateway flows — identification is always by pid. +// +// Flow: +// 1. Extract the pid from the request body. +// 2. Look up the enabled row by pid; if missing, return signature error. +// 3. Verify signature == MD5(sorted_params + secret_key). +// 4. Enforce IP whitelist (empty = allow any). +// 5. Bump call_count / last_used_at (best-effort). +// 6. Stash api_key_id + row in context and rewind the body. func CheckApiSign() echo.MiddlewareFunc { return func(next echo.HandlerFunc) echo.HandlerFunc { return func(ctx echo.Context) error { - params, err := ioutil.ReadAll(ctx.Request().Body) + params, err := io.ReadAll(ctx.Request().Body) if err != nil { return constant.SignatureErr } + // Rewind the body for downstream bindings regardless of outcome. + ctx.Request().Body = io.NopCloser(bytes.NewBuffer(params)) + m := make(map[string]interface{}) - err = json.Cjson.Unmarshal(params, &m) + contentType := ctx.Request().Header.Get("Content-Type") + if strings.Contains(contentType, "application/x-www-form-urlencoded") { + values, parseErr := url.ParseQuery(string(params)) + if parseErr != nil { + return constant.SignatureErr + } + for k, vs := range values { + if len(vs) > 0 { + m[k] = vs[0] + } + } + } else { + if err = json.Cjson.Unmarshal(params, &m); err != nil { + return constant.SignatureErr + } + } signature, ok := m["signature"] if !ok { return constant.SignatureErr } - checkSignature, err := sign.Get(m, config.GetApiAuthToken()) + identifier := extractPid(m) + if identifier == "" { + return constant.SignatureErr + } + + row, err := data.GetEnabledApiKey(identifier) + if err != nil || row.ID == 0 { + return constant.SignatureErr + } + + checkSignature, err := sign.Get(m, row.SecretKey) if err != nil { return constant.SignatureErr } - if checkSignature != signature { + signatureStr, _ := signature.(string) + if subtle.ConstantTimeCompare([]byte(checkSignature), []byte(signatureStr)) != 1 { return constant.SignatureErr } - ctx.Request().Body = ioutil.NopCloser(bytes.NewBuffer(params)) + + if !IsIPWhitelisted(row.IpWhitelist, ctx.RealIP()) { + return constant.SignatureErr + } + + _ = data.TouchApiKeyUsage(row.ID) + + ctx.Set(ApiKeyIDKey, row.ID) + ctx.Set(ApiKeyRowKey, row) return next(ctx) } } } + +// extractPid reads the "pid" field from the request body. JSON numbers +// unmarshal to float64 (EPAY merchants typically send numeric pid); we +// format with -1 precision to drop trailing zeros so "1000" matches +// regardless of whether the client sent a string or a number. +func extractPid(m map[string]interface{}) string { + v, ok := m["pid"] + if !ok || v == nil { + return "" + } + switch t := v.(type) { + case string: + return strings.TrimSpace(t) + case float64: + return strconv.FormatFloat(t, 'f', -1, 64) + } + return "" +} + +// IsIPWhitelisted checks the CSV IP list. Empty list = open. +// Entries may be single IPs or CIDR blocks. +func IsIPWhitelisted(csv, remote string) bool { + csv = strings.TrimSpace(csv) + if csv == "" { + return true + } + remoteIP := net.ParseIP(remote) + for _, raw := range strings.Split(csv, ",") { + entry := strings.TrimSpace(raw) + if entry == "" { + continue + } + if strings.Contains(entry, "/") { + _, cidr, err := net.ParseCIDR(entry) + if err == nil && remoteIP != nil && cidr.Contains(remoteIP) { + return true + } + continue + } + if entry == remote { + return true + } + } + return false +} diff --git a/src/middleware/check_token.go b/src/middleware/check_token.go deleted file mode 100644 index a679736..0000000 --- a/src/middleware/check_token.go +++ /dev/null @@ -1,24 +0,0 @@ -package middleware - -import ( - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/util/constant" - "github.com/labstack/echo/v4" -) - -// CheckApiToken validates the Authorization header against the configured api_auth_token. -// Use this for management APIs (GET/POST) where body-based signature is not practical. -func CheckApiToken() echo.MiddlewareFunc { - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(ctx echo.Context) error { - token := ctx.Request().Header.Get("Authorization") - if token == "" { - token = ctx.QueryParam("api_token") - } - if token == "" || token != config.GetApiAuthToken() { - return constant.SignatureErr - } - return next(ctx) - } - } -} diff --git a/src/model/dao/mdb_mysql.go b/src/model/dao/mdb_mysql.go index a522971..bacc186 100644 --- a/src/model/dao/mdb_mysql.go +++ b/src/model/dao/mdb_mysql.go @@ -3,8 +3,8 @@ package dao import ( "time" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/util/log" "github.com/gookit/color" "github.com/spf13/viper" "gorm.io/driver/mysql" diff --git a/src/model/dao/mdb_postgres.go b/src/model/dao/mdb_postgres.go index 98a9ea1..85b9680 100644 --- a/src/model/dao/mdb_postgres.go +++ b/src/model/dao/mdb_postgres.go @@ -4,8 +4,8 @@ import ( "fmt" "time" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/util/log" "github.com/gookit/color" "github.com/spf13/viper" "gorm.io/driver/postgres" diff --git a/src/model/dao/mdb_sqlite.go b/src/model/dao/mdb_sqlite.go index 9fc48f6..b14d7c9 100644 --- a/src/model/dao/mdb_sqlite.go +++ b/src/model/dao/mdb_sqlite.go @@ -4,8 +4,8 @@ import ( "os" "path/filepath" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/util/log" "github.com/gookit/color" "github.com/spf13/viper" diff --git a/src/model/dao/mdb_table_init.go b/src/model/dao/mdb_table_init.go index c63bdec..2d482ad 100644 --- a/src/model/dao/mdb_table_init.go +++ b/src/model/dao/mdb_table_init.go @@ -1,60 +1,250 @@ package dao import ( + "encoding/json" + "strconv" + "strings" "sync" - "github.com/assimon/luuu/model/mdb" + "github.com/GMWalletApp/epusdt/model/mdb" "github.com/gookit/color" + "gorm.io/gorm/clause" ) var once sync.Once -// 自动建表 +// MdbTableInit performs AutoMigrate for all primary DB tables and seeds +// the minimum static rows: chains, chain tokens, default settings, and +// a Telegram notification channel migrated from legacy settings keys. +// Called by dao.Init (via bootstrap.InitApp) after the DB connection is +// established. The install wizard (see install/installer.go) writes the +// .env file before bootstrap runs, so this function always finds the DB +// available. func MdbTableInit() { once.Do(func() { - if err := Mdb.AutoMigrate(&mdb.Orders{}); err != nil { - color.Red.Printf("[store_db] AutoMigrate DB(Orders),err=%s\n", err) - // panic(err) - return + migrations := []struct { + name string + model interface{} + }{ + {"Orders", &mdb.Orders{}}, + {"WalletAddress", &mdb.WalletAddress{}}, + {"AdminUser", &mdb.AdminUser{}}, + {"ApiKey", &mdb.ApiKey{}}, + {"Setting", &mdb.Setting{}}, + {"NotificationChannel", &mdb.NotificationChannel{}}, + {"Chain", &mdb.Chain{}}, + {"ChainToken", &mdb.ChainToken{}}, + {"RpcNode", &mdb.RpcNode{}}, } - if err := Mdb.AutoMigrate(&mdb.WalletAddress{}); err != nil { - color.Red.Printf("[store_db] AutoMigrate DB(Orders),err=%s\n", err) - // panic(err) - return - } - if err := Mdb.AutoMigrate(&mdb.SupportedAsset{}); err != nil { - color.Red.Printf("[store_db] AutoMigrate DB(SupportedAsset),err=%s\n", err) - return + for _, m := range migrations { + if err := Mdb.AutoMigrate(m.model); err != nil { + color.Red.Printf("[store_db] AutoMigrate DB(%s),err=%s\n", m.name, err) + return + } } - seedSupportedAssets() + seedChains() + seedRpcNodes() + seedChainTokens() + seedDefaultSettings() + seedTelegramChannelFromSettings() }) } -func seedSupportedAssets() { - var cnt int64 - if err := Mdb.Model(&mdb.SupportedAsset{}).Count(&cnt).Error; err != nil { - color.Red.Printf("[store_db] Count SupportedAsset,err=%s\n", err) - return +// seedChains inserts the built-in networks as enabled rows. Uses +// ON CONFLICT DO NOTHING so re-runs are no-ops and admin edits persist. +func seedChains() { + defaults := []mdb.Chain{ + {Network: mdb.NetworkTron, DisplayName: "TRON", Enabled: true, MinConfirmations: 1, ScanIntervalSec: 5}, + {Network: mdb.NetworkEthereum, DisplayName: "Ethereum", Enabled: true, MinConfirmations: 3, ScanIntervalSec: 5}, + {Network: mdb.NetworkSolana, DisplayName: "Solana", Enabled: true, MinConfirmations: 1, ScanIntervalSec: 5}, + {Network: mdb.NetworkBsc, DisplayName: "BSC", Enabled: true, MinConfirmations: 3, ScanIntervalSec: 5}, + {Network: mdb.NetworkPolygon, DisplayName: "Polygon", Enabled: true, MinConfirmations: 3, ScanIntervalSec: 5}, + {Network: mdb.NetworkPlasma, DisplayName: "Plasma", Enabled: true, MinConfirmations: 1, ScanIntervalSec: 5}, } - if cnt > 0 { - return - } - defaults := []mdb.SupportedAsset{ - {Network: mdb.NetworkTron, Token: "TRX", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkTron, Token: "USDT", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkSolana, Token: "SOL", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkSolana, Token: "USDT", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkSolana, Token: "USDC", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkEthereum, Token: "USDT", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkEthereum, Token: "USDC", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkBsc, Token: "USDT", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkBsc, Token: "USDC", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkPolygon, Token: "USDT", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkPolygon, Token: "USDC", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkPlasma, Token: "USDT", Status: mdb.TokenStatusEnable}, - } - if err := Mdb.Create(&defaults).Error; err != nil { - color.Red.Printf("[store_db] Seed SupportedAsset,err=%s\n", err) + if err := Mdb.Clauses(clause.OnConflict{DoNothing: true}).Create(&defaults).Error; err != nil { + color.Red.Printf("[store_db] seed chains err=%s\n", err) + } +} + +// seedChainTokens inserts default token configurations for each chain. +// ON CONFLICT DO NOTHING on the (network, symbol) unique index so +// re-runs are no-ops and admin edits to contract_address / decimals / +// min_amount persist across restarts. +func seedChainTokens() { + // Contract-address rows are matched by scanners via exact contract + // lookup. Native-token rows (empty contract_address) are matched by + // symbol — these act as admin toggles for the native payment path. + defaults := []mdb.ChainToken{ + // TRON + {Network: mdb.NetworkTron, Symbol: "USDT", ContractAddress: "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", Decimals: 6, Enabled: true}, + {Network: mdb.NetworkTron, Symbol: "TRX", ContractAddress: "", Decimals: 6, Enabled: true}, + // Ethereum + {Network: mdb.NetworkEthereum, Symbol: "USDT", ContractAddress: "0xdAC17F958D2ee523a2206206994597C13D831ec7", Decimals: 6, Enabled: true}, + {Network: mdb.NetworkEthereum, Symbol: "USDC", ContractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", Decimals: 6, Enabled: true}, + // Solana + {Network: mdb.NetworkSolana, Symbol: "USDT", ContractAddress: "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", Decimals: 6, Enabled: true}, + {Network: mdb.NetworkSolana, Symbol: "USDC", ContractAddress: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", Decimals: 6, Enabled: true}, + {Network: mdb.NetworkSolana, Symbol: "SOL", ContractAddress: "", Decimals: 9, Enabled: true}, + // BSC (BEP20 USDT/USDC are 18 decimals, unlike their Ethereum counterparts) + {Network: mdb.NetworkBsc, Symbol: "USDT", ContractAddress: "0x55d398326f99059fF775485246999027B3197955", Decimals: 18, Enabled: true}, + {Network: mdb.NetworkBsc, Symbol: "USDC", ContractAddress: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", Decimals: 18, Enabled: true}, + // Polygon + {Network: mdb.NetworkPolygon, Symbol: "USDT", ContractAddress: "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", Decimals: 6, Enabled: true}, + {Network: mdb.NetworkPolygon, Symbol: "USDC", ContractAddress: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359", Decimals: 6, Enabled: true}, + {Network: mdb.NetworkPolygon, Symbol: "USDC.e", ContractAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", Decimals: 6, Enabled: true}, + // Plasma + {Network: mdb.NetworkPlasma, Symbol: "USDT", ContractAddress: "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb", Decimals: 6, Enabled: true}, + } + if err := Mdb.Clauses(clause.OnConflict{DoNothing: true}).Create(&defaults).Error; err != nil { + color.Red.Printf("[store_db] seed chain_tokens err=%s\n", err) + } +} + +// seedRpcNodes inserts default RPC endpoints for each chain. Checks per +// (network, url) so re-runs are idempotent and admin edits persist. +func seedRpcNodes() { + defaults := []mdb.RpcNode{ + {Network: mdb.NetworkTron, Url: "https://api.trongrid.io", Type: mdb.RpcNodeTypeHttp, Weight: 1, Enabled: true, Status: mdb.RpcNodeStatusUnknown}, + {Network: mdb.NetworkEthereum, Url: "wss://ethereum.publicnode.com", Type: mdb.RpcNodeTypeWs, Weight: 1, Enabled: true, Status: mdb.RpcNodeStatusUnknown}, + {Network: mdb.NetworkSolana, Url: "https://api.mainnet-beta.solana.com", Type: mdb.RpcNodeTypeHttp, Weight: 1, Enabled: true, Status: mdb.RpcNodeStatusUnknown}, + {Network: mdb.NetworkBsc, Url: "wss://bsc.drpc.org", Type: mdb.RpcNodeTypeWs, Weight: 1, Enabled: true, Status: mdb.RpcNodeStatusUnknown}, + {Network: mdb.NetworkPolygon, Url: "wss://polygon-bor-rpc.publicnode.com", Type: mdb.RpcNodeTypeWs, Weight: 1, Enabled: true, Status: mdb.RpcNodeStatusUnknown}, + {Network: mdb.NetworkPlasma, Url: "wss://rpc.plasma.to", Type: mdb.RpcNodeTypeWs, Weight: 1, Enabled: true, Status: mdb.RpcNodeStatusUnknown}, + } + for _, d := range defaults { + var count int64 + if err := Mdb.Model(&mdb.RpcNode{}). + Where("network = ? AND url = ?", d.Network, d.Url). + Count(&count).Error; err != nil { + color.Red.Printf("[store_db] seed rpc_nodes check err=%s\n", err) + continue + } + if count > 0 { + continue + } + if err := Mdb.Create(&d).Error; err != nil { + color.Red.Printf("[store_db] seed rpc_nodes err=%s\n", err) + } + } +} + +// seedDefaultSettings inserts built-in default settings. +// Uses ON CONFLICT DO NOTHING so admin edits persist across restarts. +func seedDefaultSettings() { + defaults := []mdb.Setting{ + {Group: mdb.SettingGroupEpay, Key: mdb.SettingKeyEpayDefaultToken, Value: "usdt", Type: mdb.SettingTypeString}, + {Group: mdb.SettingGroupEpay, Key: mdb.SettingKeyEpayDefaultCurrency, Value: "cny", Type: mdb.SettingTypeString}, + {Group: mdb.SettingGroupEpay, Key: mdb.SettingKeyEpayDefaultNetwork, Value: "tron", Type: mdb.SettingTypeString}, + } + if err := Mdb.Clauses(clause.OnConflict{DoNothing: true}).Create(&defaults).Error; err != nil { + color.Red.Printf("[store_db] seed default settings err=%s\n", err) + } +} + +// seedTelegramChannelFromSettings auto-migrates the legacy settings-table +// Telegram config into a notification_channels row so the notify dispatcher +// can use it. Idempotent: no-op when any telegram channel already exists. +// +// Legacy keys read from settings: +// +// system.telegram_bot_token → TelegramConfig.BotToken +// system.telegram_chat_id → TelegramConfig.ChatID +// system.telegram_payment_notice_enabled → events.pay_success +// system.telegram_abnormal_notice_enabled → events.order_expired +func seedTelegramChannelFromSettings() { + var count int64 + if err := Mdb.Model(&mdb.NotificationChannel{}). + Where("type = ?", mdb.NotificationTypeTelegram). + Count(&count).Error; err != nil { + color.Red.Printf("[store_db] seed telegram channel check err=%s\n", err) + return + } + if count > 0 { + return + } + SyncTelegramChannelFromSettings() +} + +// SyncTelegramChannelFromSettings reads the four Telegram keys from the +// settings table and upserts the matching notification_channels row: +// - creates a new row when none exists yet +// - updates config+events on the first existing row when settings change +// +// This is called at startup (via seedTelegramChannelFromSettings) and by +// the settings controller whenever any Telegram key is changed at runtime. +func SyncTelegramChannelFromSettings() { + keys := []string{ + "system.telegram_bot_token", + "system.telegram_chat_id", + "system.telegram_payment_notice_enabled", + "system.telegram_abnormal_notice_enabled", + } + var rows []mdb.Setting + if err := Mdb.Where("key IN ?", keys).Find(&rows).Error; err != nil { + color.Red.Printf("[store_db] sync telegram channel: read settings err=%s\n", err) + return + } + m := make(map[string]string, len(rows)) + for _, r := range rows { + m[r.Key] = r.Value + } + + botToken := strings.TrimSpace(m["system.telegram_bot_token"]) + chatIDStr := strings.TrimSpace(m["system.telegram_chat_id"]) + if botToken == "" || chatIDStr == "" { + return // No telegram config to sync. + } + + chatID, err := strconv.ParseInt(chatIDStr, 10, 64) + if err != nil { + color.Red.Printf("[store_db] sync telegram channel: invalid chat_id=%q\n", chatIDStr) + return + } + + paymentEnabled, _ := strconv.ParseBool(m["system.telegram_payment_notice_enabled"]) + abnormalEnabled, _ := strconv.ParseBool(m["system.telegram_abnormal_notice_enabled"]) + + configJSON, _ := json.Marshal(map[string]interface{}{ + "bot_token": botToken, + "chat_id": chatID, + "proxy": "", + }) + eventsJSON, _ := json.Marshal(map[string]bool{ + mdb.NotifyEventPaySuccess: paymentEnabled, + mdb.NotifyEventOrderExpired: abnormalEnabled, + mdb.NotifyEventDailyReport: false, + }) + + // Try to update an existing row first. + // Use Find (not First) to avoid GORM printing a spurious + // "record not found" log when the table is empty on first boot. + var existing mdb.NotificationChannel + Mdb.Model(&mdb.NotificationChannel{}). + Where("type = ?", mdb.NotificationTypeTelegram). + Order("id ASC").Limit(1).Find(&existing) + if existing.ID != 0 { + // Row exists — patch config and events. + if err2 := Mdb.Model(&existing).Updates(map[string]interface{}{ + "config": string(configJSON), + "events": string(eventsJSON), + }).Error; err2 != nil { + color.Red.Printf("[store_db] sync telegram channel update err=%s\n", err2) + } + return + } + + // No row yet — create one. + ch := mdb.NotificationChannel{ + Type: mdb.NotificationTypeTelegram, + Name: "Telegram", + Config: string(configJSON), + Events: string(eventsJSON), + Enabled: true, + } + if err := Mdb.Create(&ch).Error; err != nil { + color.Red.Printf("[store_db] sync telegram channel create err=%s\n", err) + } else { + color.Green.Printf("[store_db] created telegram notification_channel from settings (id=%d)\n", ch.ID) } } diff --git a/src/model/dao/runtime_sqlite.go b/src/model/dao/runtime_sqlite.go index 291a518..2b23e46 100644 --- a/src/model/dao/runtime_sqlite.go +++ b/src/model/dao/runtime_sqlite.go @@ -1,9 +1,9 @@ package dao import ( - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/util/log" "github.com/gookit/color" "gorm.io/gorm" "gorm.io/gorm/logger" diff --git a/src/model/data/admin_user_data.go b/src/model/data/admin_user_data.go new file mode 100644 index 0000000..ba4d86c --- /dev/null +++ b/src/model/data/admin_user_data.go @@ -0,0 +1,304 @@ +package data + +import ( + "crypto/rand" + "crypto/sha256" + "crypto/subtle" + "encoding/hex" + "errors" + "fmt" + "strings" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/dromara/carbon/v2" + "golang.org/x/crypto/bcrypt" + "gorm.io/gorm" + "gorm.io/gorm/clause" +) + +const defaultAdminUsername = "admin" +const InitialAdminPasswordHashAlgorithm = "sha256" + +var ( + ErrInitAdminPasswordUnavailable = errors.New("initial password unavailable") + ErrInitAdminPasswordAlreadyFetched = errors.New("initial password already fetched") +) + +// InitialAdminPasswordHashInfo is returned by the hash query endpoint +// so the frontend can detect whether the operator is still using the +// initial password. +type InitialAdminPasswordHashInfo struct { + Algorithm string `json:"algorithm" example:"sha256"` + PasswordHash string `json:"password_hash" example:"3f79bb7b435b05321651daefd374cdc9f5f72c467ea3f9f3c5f6e6d7e8f9a0b1"` + PasswordChanged bool `json:"password_changed" example:"false"` + Available bool `json:"available" example:"true"` +} + +// EnsureDefaultAdmin seeds an initial admin account when no admin user +// exists. The password is randomly generated and returned so the caller +// can print it to the console. Idempotent — subsequent calls return +// ("", false, nil). +func EnsureDefaultAdmin() (password string, created bool, err error) { + var count int64 + if err := dao.Mdb.Model(&mdb.AdminUser{}).Count(&count).Error; err != nil { + return "", false, err + } + if count > 0 { + return "", false, nil + } + password = randomAdminPassword() + hash, err := HashPassword(password) + if err != nil { + return "", false, err + } + user := &mdb.AdminUser{ + Username: defaultAdminUsername, + PasswordHash: hash, + Status: mdb.AdminUserStatusEnable, + } + if err := dao.Mdb.Create(user).Error; err != nil { + return "", false, err + } + if err := initAdminPasswordState(password); err != nil { + // Account was already created; surface both for visibility while + // preserving created=true and password for emergency fallback. + return password, true, err + } + return password, true, nil +} + +func randomAdminPassword() string { + b := make([]byte, 16) + _, _ = rand.Read(b) + return hex.EncodeToString(b) +} + +// HashInitialAdminPassword fingerprints the initial plaintext password so +// the frontend can compare user input locally without exposing plaintext. +func HashInitialAdminPassword(plain string) string { + sum := sha256.Sum256([]byte(plain)) + return fmt.Sprintf("%x", sum[:]) +} + +func initAdminPasswordState(plain string) error { + hash := HashInitialAdminPassword(plain) + settings := []mdb.Setting{ + { + Group: mdb.SettingGroupSystem, Key: mdb.SettingKeyInitAdminPasswordPlain, + Value: plain, Type: mdb.SettingTypeString, + Description: "One-time readable initial admin password", + }, + { + Group: mdb.SettingGroupSystem, Key: mdb.SettingKeyInitAdminPasswordHash, + Value: hash, Type: mdb.SettingTypeString, + Description: "SHA-256 fingerprint for initial admin password", + }, + { + Group: mdb.SettingGroupSystem, Key: mdb.SettingKeyInitAdminPasswordFetched, + Value: "false", Type: mdb.SettingTypeBool, + Description: "Whether initial admin password has been fetched", + }, + { + Group: mdb.SettingGroupSystem, Key: mdb.SettingKeyInitAdminPasswordChanged, + Value: "false", Type: mdb.SettingTypeBool, + Description: "Whether initial admin password has been changed", + }, + } + for _, row := range settings { + if err := upsertSettingRow(dao.Mdb, row); err != nil { + return err + } + } + // Keep in-process cache coherent for the current process. + settingsCacheMu.Lock() + settingsCache[mdb.SettingKeyInitAdminPasswordPlain] = plain + settingsCache[mdb.SettingKeyInitAdminPasswordHash] = hash + settingsCache[mdb.SettingKeyInitAdminPasswordFetched] = "false" + settingsCache[mdb.SettingKeyInitAdminPasswordChanged] = "false" + settingsCacheMu.Unlock() + return nil +} + +func upsertSettingRow(tx *gorm.DB, row mdb.Setting) error { + return tx.Clauses(clause.OnConflict{ + Columns: []clause.Column{{Name: "key"}}, + DoUpdates: clause.AssignmentColumns([]string{"group", "value", "type", "description", "updated_at"}), + }).Create(&row).Error +} + +// ConsumeInitialAdminPassword returns the one-time initial admin password. +// After a successful read, the plaintext is deleted and cannot be fetched +// again. +func ConsumeInitialAdminPassword() (string, error) { + var password string + err := dao.Mdb.Transaction(func(tx *gorm.DB) error { + row := new(mdb.Setting) + if err := tx.Model(&mdb.Setting{}). + Where("`key` = ?", mdb.SettingKeyInitAdminPasswordPlain). + Limit(1). + Find(row).Error; err != nil { + return err + } + if row.ID == 0 || row.Value == "" { + var fetched mdb.Setting + if err := tx.Model(&mdb.Setting{}). + Where("`key` = ?", mdb.SettingKeyInitAdminPasswordFetched). + Limit(1). + Find(&fetched).Error; err != nil { + return err + } + if strings.EqualFold(strings.TrimSpace(fetched.Value), "true") { + return ErrInitAdminPasswordAlreadyFetched + } + return ErrInitAdminPasswordUnavailable + } + password = row.Value + res := tx.Where("`key` = ?", mdb.SettingKeyInitAdminPasswordPlain).Delete(&mdb.Setting{}) + if res.Error != nil { + return res.Error + } + if res.RowsAffected == 0 { + return ErrInitAdminPasswordAlreadyFetched + } + return upsertSettingRow(tx, mdb.Setting{ + Group: mdb.SettingGroupSystem, + Key: mdb.SettingKeyInitAdminPasswordFetched, + Value: "true", + Type: mdb.SettingTypeBool, + Description: "Whether initial admin password has been fetched", + }) + }) + if err != nil { + return "", err + } + settingsCacheMu.Lock() + delete(settingsCache, mdb.SettingKeyInitAdminPasswordPlain) + settingsCache[mdb.SettingKeyInitAdminPasswordFetched] = "true" + settingsCacheMu.Unlock() + return password, nil +} + +// GetInitialAdminPasswordHashInfo returns the initial-password fingerprint +// and the changed-state flag used by the admin frontend. +func GetInitialAdminPasswordHashInfo() (*InitialAdminPasswordHashInfo, error) { + hash := strings.TrimSpace(GetSettingString(mdb.SettingKeyInitAdminPasswordHash, "")) + if hash == "" { + return &InitialAdminPasswordHashInfo{ + Algorithm: InitialAdminPasswordHashAlgorithm, + PasswordHash: "", + PasswordChanged: true, + Available: false, + }, nil + } + return &InitialAdminPasswordHashInfo{ + Algorithm: InitialAdminPasswordHashAlgorithm, + PasswordHash: hash, + PasswordChanged: GetSettingBool(mdb.SettingKeyInitAdminPasswordChanged, false), + Available: true, + }, nil +} + +// IsUsingInitialAdminPassword reports whether the current admin password is +// still considered the seeded initial password. +func IsUsingInitialAdminPassword() bool { + hash := strings.TrimSpace(GetSettingString(mdb.SettingKeyInitAdminPasswordHash, "")) + if hash == "" { + return false + } + return !GetSettingBool(mdb.SettingKeyInitAdminPasswordChanged, false) +} + +// HashPassword bcrypts a plaintext password. +func HashPassword(plain string) (string, error) { + b, err := bcrypt.GenerateFromPassword([]byte(plain), bcrypt.DefaultCost) + if err != nil { + return "", err + } + return string(b), nil +} + +// VerifyPassword compares a plaintext password against a bcrypt hash. +func VerifyPassword(hash, plain string) bool { + return bcrypt.CompareHashAndPassword([]byte(hash), []byte(plain)) == nil +} + +// GetAdminUserByUsername returns the row for a username (case-insensitive). +func GetAdminUserByUsername(username string) (*mdb.AdminUser, error) { + u := new(mdb.AdminUser) + err := dao.Mdb.Model(u). + Where("username = ?", strings.ToLower(strings.TrimSpace(username))). + Limit(1).Find(u).Error + return u, err +} + +// GetAdminUserByID returns the row for an ID. +func GetAdminUserByID(id uint64) (*mdb.AdminUser, error) { + u := new(mdb.AdminUser) + err := dao.Mdb.Model(u).Limit(1).Find(u, id).Error + return u, err +} + +// UpdateAdminUserPassword rehashes and persists a new password. +func UpdateAdminUserPassword(id uint64, newPlain string) error { + hash, err := HashPassword(newPlain) + if err != nil { + return err + } + changedCacheValue := "" + err = dao.Mdb.Transaction(func(tx *gorm.DB) error { + if err := tx.Model(&mdb.AdminUser{}). + Where("id = ?", id). + Update("password_hash", hash).Error; err != nil { + return err + } + + // Old installs may not have initial-password metadata; skip in + // that case to keep password updates backward compatible. + var initHashRow mdb.Setting + if err := tx.Model(&mdb.Setting{}). + Where("`key` = ?", mdb.SettingKeyInitAdminPasswordHash). + Limit(1). + Find(&initHashRow).Error; err != nil { + return err + } + initHash := strings.TrimSpace(initHashRow.Value) + if initHash == "" { + return nil + } + + newHash := HashInitialAdminPassword(newPlain) + changed := subtle.ConstantTimeCompare([]byte(initHash), []byte(newHash)) != 1 + changedValue := "true" + if !changed { + changedValue = "false" + } + if err := upsertSettingRow(tx, mdb.Setting{ + Group: mdb.SettingGroupSystem, + Key: mdb.SettingKeyInitAdminPasswordChanged, + Value: changedValue, + Type: mdb.SettingTypeBool, + Description: "Whether initial admin password has been changed", + }); err != nil { + return err + } + changedCacheValue = changedValue + return nil + }) + if err != nil { + return err + } + if changedCacheValue != "" { + settingsCacheMu.Lock() + settingsCache[mdb.SettingKeyInitAdminPasswordChanged] = changedCacheValue + settingsCacheMu.Unlock() + } + return nil +} + +// TouchAdminUserLastLogin stamps last_login_at to now. +func TouchAdminUserLastLogin(id uint64) error { + return dao.Mdb.Model(&mdb.AdminUser{}). + Where("id = ?", id). + Update("last_login_at", carbon.Now().StdTime()).Error +} diff --git a/src/model/data/api_key_data.go b/src/model/data/api_key_data.go new file mode 100644 index 0000000..1f14ed5 --- /dev/null +++ b/src/model/data/api_key_data.go @@ -0,0 +1,137 @@ +package data + +import ( + "crypto/rand" + "encoding/hex" + "strconv" + "strings" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/dromara/carbon/v2" + "gorm.io/gorm" +) + +// GetEnabledApiKey looks up an enabled merchant credential row by PID. +// A single row is valid for both EPAY and GMPAY flows; the route +// determines the flow. Returns (row, nil) on success; (zero row, nil) +// when no match; error only on true DB failure. +func GetEnabledApiKey(pid string) (*mdb.ApiKey, error) { + row := new(mdb.ApiKey) + err := dao.Mdb.Model(row). + Where("pid = ?", strings.TrimSpace(pid)). + Where("status = ?", mdb.ApiKeyStatusEnable). + Limit(1).Find(row).Error + return row, err +} + +// GetApiKeyByID fetches a row by primary key (including disabled). +func GetApiKeyByID(id uint64) (*mdb.ApiKey, error) { + row := new(mdb.ApiKey) + err := dao.Mdb.Model(row).Limit(1).Find(row, id).Error + return row, err +} + +// ListApiKeys returns all rows ordered by ID descending. +func ListApiKeys() ([]mdb.ApiKey, error) { + var rows []mdb.ApiKey + err := dao.Mdb.Model(&mdb.ApiKey{}).Order("id DESC").Find(&rows).Error + return rows, err +} + +// CreateApiKey persists a new row. +func CreateApiKey(row *mdb.ApiKey) error { + return dao.Mdb.Create(row).Error +} + +// UpdateApiKeyFields updates a whitelist of mutable fields on a row. +func UpdateApiKeyFields(id uint64, fields map[string]interface{}) error { + if len(fields) == 0 { + return nil + } + return dao.Mdb.Model(&mdb.ApiKey{}).Where("id = ?", id).Updates(fields).Error +} + +// DeleteApiKeyByID removes (soft-deletes) a row. +func DeleteApiKeyByID(id uint64) error { + return dao.Mdb.Where("id = ?", id).Delete(&mdb.ApiKey{}).Error +} + +// TouchApiKeyUsage increments call_count and stamps last_used_at. +// Called from the signature middleware after a successful verify. +func TouchApiKeyUsage(id uint64) error { + return dao.Mdb.Model(&mdb.ApiKey{}). + Where("id = ?", id). + Updates(map[string]interface{}{ + "call_count": gorm.Expr("call_count + 1"), + "last_used_at": carbon.Now().StdTime(), + }).Error +} + +// basePid is the starting PID value for api_keys. +const basePid = 1000 + +// NextPid returns the next available numeric PID for api_keys. Scans +// ALL rows (including soft-deleted) to avoid reusing a PID whose row +// is still in the table with a non-null deleted_at — the unique index +// on pid doesn't know about soft deletes, so reuse would trigger a +// DB-level unique violation on Create. +func NextPid() (int, error) { + var rows []mdb.ApiKey + err := dao.Mdb.Unscoped().Model(&mdb.ApiKey{}).Select("pid").Find(&rows).Error + if err != nil { + return basePid, err + } + maxPid := basePid - 1 + for _, r := range rows { + if pid, err := strconv.Atoi(strings.TrimSpace(r.Pid)); err == nil && pid > maxPid { + maxPid = pid + } + } + return maxPid + 1, nil +} + +// SeededApiKey carries the details of a newly created default key so +// the caller can print them to the console (secret is never surfaced +// again via the admin API — it has to be viewed via /api-keys/:id/secret +// after login). +type SeededApiKey struct { + Pid string + Name string + SecretKey string +} + +// EnsureDefaultApiKey seeds ONE universal API key on a fresh install. +// The seeded key is valid for all three gateway flows — the admin can +// create additional keys later, each also universal. Idempotent: if +// any api_keys row already exists, returns nil without seeding. +func EnsureDefaultApiKey() (*SeededApiKey, error) { + var count int64 + if err := dao.Mdb.Model(&mdb.ApiKey{}).Count(&count).Error; err != nil { + return nil, err + } + if count > 0 { + return nil, nil + } + secret := generateHex(32) + row := &mdb.ApiKey{ + Name: "default", + Pid: strconv.Itoa(basePid), + SecretKey: secret, + Status: mdb.ApiKeyStatusEnable, + } + if err := dao.Mdb.Create(row).Error; err != nil { + return nil, err + } + return &SeededApiKey{ + Pid: row.Pid, + Name: row.Name, + SecretKey: secret, + }, nil +} + +func generateHex(n int) string { + b := make([]byte, n) + _, _ = rand.Read(b) + return hex.EncodeToString(b) +} diff --git a/src/model/data/chain_data.go b/src/model/data/chain_data.go new file mode 100644 index 0000000..173fa05 --- /dev/null +++ b/src/model/data/chain_data.go @@ -0,0 +1,54 @@ +package data + +import ( + "strings" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" +) + +// ListChains returns all chain rows ordered by id. +func ListChains() ([]mdb.Chain, error) { + var rows []mdb.Chain + err := dao.Mdb.Model(&mdb.Chain{}).Order("id ASC").Find(&rows).Error + return rows, err +} + +// ListEnabledChains returns only rows with Enabled=true. +func ListEnabledChains() ([]mdb.Chain, error) { + var rows []mdb.Chain + err := dao.Mdb.Model(&mdb.Chain{}). + Where("enabled = ?", true). + Order("id ASC").Find(&rows).Error + return rows, err +} + +// GetChainByNetwork fetches one row by network key. +func GetChainByNetwork(network string) (*mdb.Chain, error) { + row := new(mdb.Chain) + err := dao.Mdb.Model(row). + Where("network = ?", strings.ToLower(strings.TrimSpace(network))). + Limit(1).Find(row).Error + return row, err +} + +// IsChainEnabled returns whether the row exists and Enabled=true. A +// missing row is treated as disabled — scanners must be able to +// short-circuit even before the admin creates the chain entry. +func IsChainEnabled(network string) bool { + row, err := GetChainByNetwork(network) + if err != nil || row.ID == 0 { + return false + } + return row.Enabled +} + +// UpdateChainFields patches mutable columns. +func UpdateChainFields(network string, fields map[string]interface{}) error { + if len(fields) == 0 { + return nil + } + return dao.Mdb.Model(&mdb.Chain{}). + Where("network = ?", strings.ToLower(strings.TrimSpace(network))). + Updates(fields).Error +} diff --git a/src/model/data/chain_token_data.go b/src/model/data/chain_token_data.go new file mode 100644 index 0000000..6c5b2c5 --- /dev/null +++ b/src/model/data/chain_token_data.go @@ -0,0 +1,125 @@ +package data + +import ( + "strings" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" +) + +// ListEnabledChainTokens returns enabled tokens, optionally filtered by network. +// An empty network returns all enabled tokens across all networks. +func ListEnabledChainTokens(network string) ([]mdb.ChainToken, error) { + var rows []mdb.ChainToken + tx := dao.Mdb.Model(&mdb.ChainToken{}).Where("enabled = ?", true) + if n := strings.ToLower(strings.TrimSpace(network)); n != "" { + tx = tx.Where("network = ?", n) + } + err := tx.Order("network ASC, id ASC").Find(&rows).Error + return rows, err +} + +// ListChainTokens returns rows optionally filtered by network. +func ListChainTokens(network string) ([]mdb.ChainToken, error) { + var rows []mdb.ChainToken + tx := dao.Mdb.Model(&mdb.ChainToken{}) + if network != "" { + tx = tx.Where("network = ?", strings.ToLower(network)) + } + err := tx.Order("id ASC").Find(&rows).Error + return rows, err +} + +// ListEnabledChainTokensByNetwork returns the enabled tokens for a network. +// Scanners call this to learn which contract addresses to subscribe to. +func ListEnabledChainTokensByNetwork(network string) ([]mdb.ChainToken, error) { + var rows []mdb.ChainToken + err := dao.Mdb.Model(&mdb.ChainToken{}). + Where("network = ?", strings.ToLower(network)). + Where("enabled = ?", true). + Find(&rows).Error + return rows, err +} + +// GetEnabledChainTokenByContract finds one enabled token by (network, +// contract_address). Used by EVM/TRON scanners to resolve the symbol +// and decimals of an incoming transfer. Returns (zero row, nil) if no +// match. The contract address match is case-insensitive. +func GetEnabledChainTokenByContract(network, contractAddress string) (*mdb.ChainToken, error) { + row := new(mdb.ChainToken) + addr := strings.TrimSpace(contractAddress) + if addr == "" { + return row, nil + } + err := dao.Mdb.Model(row). + Where("network = ?", strings.ToLower(strings.TrimSpace(network))). + Where("enabled = ?", true). + Where("LOWER(contract_address) = ?", strings.ToLower(addr)). + Limit(1).Find(row).Error + return row, err +} + +// GetEnabledChainTokenBySymbol finds one enabled token by (network, symbol). +// Used by Solana native-SOL path where there's no contract address. +func GetEnabledChainTokenBySymbol(network, symbol string) (*mdb.ChainToken, error) { + row := new(mdb.ChainToken) + sym := strings.TrimSpace(symbol) + if sym == "" { + return row, nil + } + err := dao.Mdb.Model(row). + Where("network = ?", strings.ToLower(strings.TrimSpace(network))). + Where("enabled = ?", true). + Where("UPPER(symbol) = ?", strings.ToUpper(sym)). + Limit(1).Find(row).Error + return row, err +} + +// GetChainTokenByID fetches by primary key. +func GetChainTokenByID(id uint64) (*mdb.ChainToken, error) { + row := new(mdb.ChainToken) + err := dao.Mdb.Model(row).Limit(1).Find(row, id).Error + return row, err +} + +// CreateChainToken inserts a row. +// If a soft-deleted row with the same (network, symbol) exists it is +// restored with the incoming field values rather than creating a duplicate +// that would violate the unique index. +func CreateChainToken(row *mdb.ChainToken) error { + deleted := new(mdb.ChainToken) + err := dao.Mdb.Unscoped(). + Where("network = ? AND symbol = ? AND deleted_at IS NOT NULL", row.Network, row.Symbol). + Limit(1).Find(deleted).Error + if err != nil { + return err + } + if deleted.ID > 0 { + err = dao.Mdb.Unscoped().Model(deleted).Updates(map[string]interface{}{ + "deleted_at": nil, + "contract_address": row.ContractAddress, + "decimals": row.Decimals, + "enabled": row.Enabled, + "min_amount": row.MinAmount, + }).Error + if err != nil { + return err + } + row.ID = deleted.ID + return nil + } + return dao.Mdb.Create(row).Error +} + +// UpdateChainTokenFields patches mutable columns. +func UpdateChainTokenFields(id uint64, fields map[string]interface{}) error { + if len(fields) == 0 { + return nil + } + return dao.Mdb.Model(&mdb.ChainToken{}).Where("id = ?", id).Updates(fields).Error +} + +// DeleteChainTokenByID soft-deletes the row. +func DeleteChainTokenByID(id uint64) error { + return dao.Mdb.Where("id = ?", id).Delete(&mdb.ChainToken{}).Error +} diff --git a/src/model/data/notification_channel_data.go b/src/model/data/notification_channel_data.go new file mode 100644 index 0000000..ede52ac --- /dev/null +++ b/src/model/data/notification_channel_data.go @@ -0,0 +1,81 @@ +package data + +import ( + "encoding/json" + "strings" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" +) + +// ListNotificationChannels returns all rows, optionally filtered by type. +func ListNotificationChannels(channelType string) ([]mdb.NotificationChannel, error) { + var rows []mdb.NotificationChannel + tx := dao.Mdb.Model(&mdb.NotificationChannel{}) + if channelType != "" { + tx = tx.Where("type = ?", strings.ToLower(channelType)) + } + err := tx.Order("id DESC").Find(&rows).Error + return rows, err +} + +// ListEnabledChannelsByEvent returns enabled rows whose Events JSON has +// the named event key set to true. Done in Go (rather than JSON_EXTRACT) +// because the runtime DB is DB-agnostic (MySQL/Postgres/SQLite). +func ListEnabledChannelsByEvent(event string) ([]mdb.NotificationChannel, error) { + var rows []mdb.NotificationChannel + if err := dao.Mdb.Model(&mdb.NotificationChannel{}). + Where("enabled = ?", true). + Find(&rows).Error; err != nil { + return nil, err + } + out := rows[:0] + for _, r := range rows { + events := map[string]bool{} + if r.Events != "" { + _ = json.Unmarshal([]byte(r.Events), &events) + } + if events[event] { + out = append(out, r) + } + } + return out, nil +} + +// GetFirstEnabledTelegramChannel returns the oldest enabled telegram +// row, or nil ID if none. Telegram bot startup uses this as the primary +// instance backing /start and command handlers. +func GetFirstEnabledTelegramChannel() (*mdb.NotificationChannel, error) { + row := new(mdb.NotificationChannel) + err := dao.Mdb.Model(row). + Where("type = ?", mdb.NotificationTypeTelegram). + Where("enabled = ?", true). + Order("id ASC"). + Limit(1).Find(row).Error + return row, err +} + +// GetNotificationChannelByID fetches by PK. +func GetNotificationChannelByID(id uint64) (*mdb.NotificationChannel, error) { + row := new(mdb.NotificationChannel) + err := dao.Mdb.Model(row).Limit(1).Find(row, id).Error + return row, err +} + +// CreateNotificationChannel inserts a new row. +func CreateNotificationChannel(row *mdb.NotificationChannel) error { + return dao.Mdb.Create(row).Error +} + +// UpdateNotificationChannelFields patches mutable columns. +func UpdateNotificationChannelFields(id uint64, fields map[string]interface{}) error { + if len(fields) == 0 { + return nil + } + return dao.Mdb.Model(&mdb.NotificationChannel{}).Where("id = ?", id).Updates(fields).Error +} + +// DeleteNotificationChannelByID soft-deletes a row. +func DeleteNotificationChannelByID(id uint64) error { + return dao.Mdb.Where("id = ?", id).Delete(&mdb.NotificationChannel{}).Error +} diff --git a/src/model/data/order_admin_data.go b/src/model/data/order_admin_data.go new file mode 100644 index 0000000..f64d006 --- /dev/null +++ b/src/model/data/order_admin_data.go @@ -0,0 +1,151 @@ +package data + +import ( + "strings" + "time" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" + "gorm.io/gorm" +) + +// OrderListFilter bundles every filter supported by the admin orders +// list page. Zero values are ignored so callers can pass only what the +// user actually filtered on. +type OrderListFilter struct { + Status int + Network string + Token string + Address string + Keyword string // matches trade_id / order_id / block_transaction_id + StartAt *time.Time + EndAt *time.Time + Page int + PageSize int + // ParentOnly restricts the result to top-level orders only + // (parent_trade_id = ''). Sub-orders are excluded from the listing. + ParentOnly bool +} + +// ListOrders returns a paginated order slice plus the total count under +// the same filter (for the UI pagination bar). +func ListOrders(f OrderListFilter) ([]mdb.Orders, int64, error) { + tx := buildOrderListQuery(f) + var total int64 + if err := tx.Count(&total).Error; err != nil { + return nil, 0, err + } + page := f.Page + if page < 1 { + page = 1 + } + size := f.PageSize + if size < 1 { + size = 20 + } + if size > 200 { + size = 200 + } + var rows []mdb.Orders + err := tx.Order("id DESC"). + Offset((page - 1) * size).Limit(size). + Find(&rows).Error + return rows, total, err +} + +func buildOrderListQuery(f OrderListFilter) *gorm.DB { + tx := dao.Mdb.Model(&mdb.Orders{}) + if f.ParentOnly { + tx = tx.Where("parent_trade_id = ?", "") + } + if f.Status > 0 { + tx = tx.Where("status = ?", f.Status) + } + if f.Network != "" { + tx = tx.Where("network = ?", strings.ToLower(f.Network)) + } + if f.Token != "" { + tx = tx.Where("token = ?", strings.ToUpper(f.Token)) + } + if f.Address != "" { + tx = tx.Where("receive_address = ?", f.Address) + } + if f.Keyword != "" { + kw := "%" + strings.TrimSpace(f.Keyword) + "%" + tx = tx.Where("trade_id LIKE ? OR order_id LIKE ? OR block_transaction_id LIKE ?", kw, kw, kw) + } + if f.StartAt != nil { + tx = tx.Where("created_at >= ?", *f.StartAt) + } + if f.EndAt != nil { + tx = tx.Where("created_at <= ?", *f.EndAt) + } + return tx +} + +// CountOrdersByStatus returns how many orders exist in each status. +// Used by the dashboard overview card. +func CountOrdersByStatus() (map[int]int64, error) { + type row struct { + Status int + Total int64 + } + var rows []row + err := dao.Mdb.Model(&mdb.Orders{}). + Select("status, COUNT(*) AS total"). + Group("status"). + Scan(&rows).Error + if err != nil { + return nil, err + } + out := map[int]int64{} + for _, r := range rows { + out[r.Status] = r.Total + } + return out, nil +} + +// CloseOrderManually transitions a pending order to expired. Only +// touches rows currently in StatusWaitPay so idempotent / safe. +func CloseOrderManually(tradeID string) (bool, error) { + result := dao.Mdb.Model(&mdb.Orders{}). + Where("trade_id = ?", tradeID). + Where("status = ?", mdb.StatusWaitPay). + Update("status", mdb.StatusExpired) + return result.RowsAffected > 0, result.Error +} + +// ReopenOrderCallback flips callback_confirm back to NO so the mq +// worker picks it up on the next tick. Used by "resend callback". +func ReopenOrderCallback(tradeID string) (bool, error) { + result := dao.Mdb.Model(&mdb.Orders{}). + Where("trade_id = ?", tradeID). + Where("status = ?", mdb.StatusPaySuccess). + Updates(map[string]interface{}{ + "callback_confirm": mdb.CallBackConfirmNo, + "callback_num": 0, + }) + return result.RowsAffected > 0, result.Error +} + +// CountOrdersByAddress returns order counts grouped by receive_address. +// The admin wallet list annotates each wallet row with this number. +func CountOrdersByAddress() (map[string]int64, error) { + type row struct { + Address string `gorm:"column:receive_address"` + Total int64 + } + var rows []row + err := dao.Mdb.Model(&mdb.Orders{}). + Select("receive_address, COUNT(*) AS total"). + Group("receive_address"). + Scan(&rows).Error + if err != nil { + return nil, err + } + out := map[string]int64{} + for _, r := range rows { + out[r.Address] = r.Total + } + return out, nil +} diff --git a/src/model/data/order_data.go b/src/model/data/order_data.go index 430264b..3528aae 100644 --- a/src/model/data/order_data.go +++ b/src/model/data/order_data.go @@ -5,9 +5,9 @@ import ( "strings" "time" - "github.com/assimon/luuu/model/dao" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/request" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/request" "github.com/dromara/carbon/v2" "github.com/shopspring/decimal" "gorm.io/gorm" @@ -28,10 +28,31 @@ func normalizeLockAmount(amount float64) (int64, string) { return value.Shift(2).IntPart(), value.StringFixed(2) } +func normalizeLockNetwork(network string) string { + return strings.ToLower(strings.TrimSpace(network)) +} + +func normalizeLockAddress(network, address string) string { + address = strings.TrimSpace(address) + if isEVMNetwork(normalizeLockNetwork(network)) { + return strings.ToLower(address) + } + return address +} + func normalizeLockToken(token string) string { return strings.ToUpper(strings.TrimSpace(token)) } +func applyLockAddressFilter(tx *gorm.DB, network, address string) *gorm.DB { + network = normalizeLockNetwork(network) + address = normalizeLockAddress(network, address) + if isEVMNetwork(network) { + return tx.Where("lower(address) = ?", address) + } + return tx.Where("address = ?", address) +} + // GetOrderInfoByOrderId fetches an order by merchant order id. func GetOrderInfoByOrderId(orderId string) (*mdb.Orders, error) { order := new(mdb.Orders) @@ -142,22 +163,38 @@ func GetSiblingSubOrders(parentTradeId string, excludeTradeId string) ([]mdb.Ord return orders, err } -// MarkParentOrderSuccess updates the parent order with the sub-order's payment details. -// Token and network are NOT overwritten — the parent keeps its original values. +// MarkParentOrderSuccess marks the parent order as paid and records which sub-order +// settled it. Only the status, callback_confirm, and pay_by_sub_id fields are updated; +// the parent's own block_transaction_id, actual_amount, and receive_address are +// intentionally left unchanged because the parent was not directly paid. func MarkParentOrderSuccess(parentTradeId string, sub *mdb.Orders) (bool, error) { - result := dao.Mdb.Model(&mdb.Orders{}). + return MarkParentOrderSuccessWithTransaction(dao.Mdb, parentTradeId, sub) +} + +// MarkParentOrderSuccessWithTransaction is the transactional variant of +// MarkParentOrderSuccess. +func MarkParentOrderSuccessWithTransaction(tx *gorm.DB, parentTradeId string, sub *mdb.Orders) (bool, error) { + result := tx.Model(&mdb.Orders{}). Where("trade_id = ?", parentTradeId). Where("status = ?", mdb.StatusWaitPay). Updates(map[string]interface{}{ - "status": mdb.StatusPaySuccess, - "block_transaction_id": sub.BlockTransactionId, - "callback_confirm": mdb.CallBackConfirmNo, - "actual_amount": sub.ActualAmount, - "receive_address": sub.ReceiveAddress, + "status": mdb.StatusPaySuccess, + "callback_confirm": mdb.CallBackConfirmNo, + "pay_by_sub_id": sub.ID, }) return result.RowsAffected > 0, result.Error } +// ExpireSiblingSubOrdersWithTransaction expires all waiting sibling +// sub-orders under the same parent in one statement. +func ExpireSiblingSubOrdersWithTransaction(tx *gorm.DB, parentTradeId string, excludeTradeId string) error { + return tx.Model(&mdb.Orders{}). + Where("parent_trade_id = ?", parentTradeId). + Where("trade_id != ?", excludeTradeId). + Where("status = ?", mdb.StatusWaitPay). + Update("status", mdb.StatusExpired).Error +} + // MarkOrderSelected sets is_selected=true for the given trade_id. func MarkOrderSelected(tradeId string) error { return dao.Mdb.Model(&mdb.Orders{}). @@ -191,6 +228,32 @@ func GetActiveSubOrders(parentTradeId string) ([]mdb.Orders, error) { return orders, err } +// GetAllSubOrders returns all sub-orders (any status) under a parent order, +// ordered by creation time ascending. +func GetAllSubOrders(parentTradeId string) ([]mdb.Orders, error) { + var orders []mdb.Orders + err := dao.Mdb.Model(&mdb.Orders{}). + Where("parent_trade_id = ?", parentTradeId). + Order("created_at ASC"). + Find(&orders).Error + return orders, err +} + +// GetSubOrdersByParentTradeIds batch-fetches all sub-orders (any status) +// whose parent_trade_id is in the given set. Ordered by parent_trade_id +// then created_at ASC so callers can build a grouped map in one pass. +func GetSubOrdersByParentTradeIds(parentTradeIds []string) ([]mdb.Orders, error) { + if len(parentTradeIds) == 0 { + return nil, nil + } + var orders []mdb.Orders + err := dao.Mdb.Model(&mdb.Orders{}). + Where("parent_trade_id IN ?", parentTradeIds). + Order("parent_trade_id ASC, created_at ASC"). + Find(&orders).Error + return orders, err +} + // ExpireOrderByTradeId marks a single order as expired if still waiting. func ExpireOrderByTradeId(tradeId string) error { return dao.Mdb.Model(&mdb.Orders{}). @@ -201,16 +264,17 @@ func ExpireOrderByTradeId(tradeId string) error { // GetTradeIdByWalletAddressAndAmountAndToken resolves the reserved trade id by network, address, token and amount. func GetTradeIdByWalletAddressAndAmountAndToken(network string, address string, token string, amount float64) (string, error) { + network = normalizeLockNetwork(network) + address = normalizeLockAddress(network, address) scaledAmount, _ := normalizeLockAmount(amount) var lock mdb.TransactionLock - err := dao.RuntimeDB.Model(&mdb.TransactionLock{}). + query := dao.RuntimeDB.Model(&mdb.TransactionLock{}). Where("network = ?", network). - Where("address = ?", address). Where("token = ?", normalizeLockToken(token)). Where("amount_scaled = ?", scaledAmount). - Where("expires_at > ?", time.Now()). - Limit(1). - Find(&lock).Error + Where("expires_at > ?", time.Now()) + query = applyLockAddressFilter(query, network, address) + err := query.Limit(1).Find(&lock).Error if err != nil { return "", err } @@ -222,6 +286,8 @@ func GetTradeIdByWalletAddressAndAmountAndToken(network string, address string, // LockTransaction reserves a network+address+token+amount pair in sqlite until expiration. func LockTransaction(network, address, token, tradeID string, amount float64, expirationTime time.Duration) error { + network = normalizeLockNetwork(network) + address = normalizeLockAddress(network, address) scaledAmount, amountText := normalizeLockAmount(amount) normalizedToken := normalizeLockToken(token) now := time.Now() @@ -236,12 +302,12 @@ func LockTransaction(network, address, token, tradeID string, amount float64, ex } return dao.RuntimeDB.Transaction(func(tx *gorm.DB) error { - if err := tx.Where("network = ?", network). - Where("address = ?", address). + expiredQuery := tx.Where("network = ?", network). Where("token = ?", normalizedToken). Where("amount_scaled = ?", scaledAmount). - Where("expires_at <= ?", now). - Delete(&mdb.TransactionLock{}).Error; err != nil { + Where("expires_at <= ?", now) + expiredQuery = applyLockAddressFilter(expiredQuery, network, address) + if err := expiredQuery.Delete(&mdb.TransactionLock{}).Error; err != nil { return err } if err := tx.Where("trade_id = ?", tradeID).Delete(&mdb.TransactionLock{}).Error; err != nil { @@ -261,13 +327,15 @@ func LockTransaction(network, address, token, tradeID string, amount float64, ex // UnLockTransaction releases the reservation for network+address+token+amount. func UnLockTransaction(network string, address string, token string, amount float64) error { + network = normalizeLockNetwork(network) + address = normalizeLockAddress(network, address) scaledAmount, _ := normalizeLockAmount(amount) - return dao.RuntimeDB. + query := dao.RuntimeDB. Where("network = ?", network). - Where("address = ?", address). Where("token = ?", normalizeLockToken(token)). - Where("amount_scaled = ?", scaledAmount). - Delete(&mdb.TransactionLock{}).Error + Where("amount_scaled = ?", scaledAmount) + query = applyLockAddressFilter(query, network, address) + return query.Delete(&mdb.TransactionLock{}).Error } func UnLockTransactionByTradeId(tradeID string) error { diff --git a/src/model/data/order_data_stats.go b/src/model/data/order_data_stats.go new file mode 100644 index 0000000..cf75d39 --- /dev/null +++ b/src/model/data/order_data_stats.go @@ -0,0 +1,319 @@ +package data + +import ( + "time" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" +) + +// DailyStat is one bucket of day-level aggregation used by the +// dashboard trend charts. +// Field "Day" holds "YYYY-MM-DD" for daily buckets and +// "YYYY-MM-DD HH:00" for hourly buckets. +type DailyStat struct { + Day string `json:"day"` // "YYYY-MM-DD" (daily) or "YYYY-MM-DD HH:00" (hourly) + OrderCount int64 `json:"order_count"` + SuccessCount int64 `json:"success_count"` + TotalAmount float64 `json:"total_amount"` // sum of amount (fiat) + ActualAmount float64 `json:"actual_amount"` // sum of actual_amount (token) +} + +// AddressDailyStat buckets actual_amount by (day, receive_address) for +// the stacked asset-trend chart. +// Field "Day" holds "YYYY-MM-DD" (daily) or "YYYY-MM-DD HH:00" (hourly). +type AddressDailyStat struct { + Day string `json:"day"` + Address string `json:"address"` + ActualAmount float64 `json:"actual_amount"` +} + +// DailyOrderStats returns per-day counts/amounts within [start, end], +// zero-filling any days in the range that have no orders. +// Only orders in StatusPaySuccess contribute to Amount sums — that's +// what the user means by "流水". Pending orders count toward OrderCount +// to keep成交率 computable. +func DailyOrderStats(start, end time.Time) ([]DailyStat, error) { + var rows []DailyStat + err := dao.Mdb.Model(&mdb.Orders{}). + Select(`DATE(created_at) AS day, + COUNT(*) AS order_count, + SUM(CASE WHEN status = ? THEN 1 ELSE 0 END) AS success_count, + SUM(CASE WHEN status = ? THEN amount ELSE 0 END) AS total_amount, + SUM(CASE WHEN status = ? THEN actual_amount ELSE 0 END) AS actual_amount`, + mdb.StatusPaySuccess, mdb.StatusPaySuccess, mdb.StatusPaySuccess). + Where("created_at >= ?", start). + Where("created_at <= ?", end). + Group("DATE(created_at)"). + Order("day ASC"). + Scan(&rows).Error + if err != nil { + return nil, err + } + return fillDailyStats(start, end, rows), nil +} + +// HourlyOrderStats returns per-hour counts/amounts within [start, end], +// zero-filling any hours that have no orders. +func HourlyOrderStats(start, end time.Time) ([]DailyStat, error) { + var rows []DailyStat + err := dao.Mdb.Model(&mdb.Orders{}). + Select(`strftime('%Y-%m-%d %H:00', created_at) AS day, + COUNT(*) AS order_count, + SUM(CASE WHEN status = ? THEN 1 ELSE 0 END) AS success_count, + SUM(CASE WHEN status = ? THEN amount ELSE 0 END) AS total_amount, + SUM(CASE WHEN status = ? THEN actual_amount ELSE 0 END) AS actual_amount`, + mdb.StatusPaySuccess, mdb.StatusPaySuccess, mdb.StatusPaySuccess). + Where("created_at >= ?", start). + Where("created_at <= ?", end). + Group("strftime('%Y-%m-%d %H:00', created_at)"). + Order("day ASC"). + Scan(&rows).Error + if err != nil { + return nil, err + } + return fillHourlyStats(start, end, rows), nil +} + +// fillDailyStats generates a zero-filled slice covering every calendar +// day in [start, end]. Days present in rows overwrite the zero entries. +func fillDailyStats(start, end time.Time, rows []DailyStat) []DailyStat { + byDay := make(map[string]DailyStat, len(rows)) + for _, r := range rows { + byDay[r.Day] = r + } + var out []DailyStat + cur := time.Date(start.Year(), start.Month(), start.Day(), 0, 0, 0, 0, start.Location()) + last := time.Date(end.Year(), end.Month(), end.Day(), 0, 0, 0, 0, end.Location()) + for !cur.After(last) { + key := cur.Format("2006-01-02") + if r, ok := byDay[key]; ok { + out = append(out, r) + } else { + out = append(out, DailyStat{Day: key}) + } + cur = cur.AddDate(0, 0, 1) + } + return out +} + +// fillHourlyStats generates a zero-filled slice covering every whole +// hour in [start, end]. Hours present in rows overwrite the zero entries. +func fillHourlyStats(start, end time.Time, rows []DailyStat) []DailyStat { + byHour := make(map[string]DailyStat, len(rows)) + for _, r := range rows { + byHour[r.Day] = r + } + var out []DailyStat + cur := time.Date(start.Year(), start.Month(), start.Day(), start.Hour(), 0, 0, 0, start.Location()) + endHour := time.Date(end.Year(), end.Month(), end.Day(), end.Hour(), 0, 0, 0, end.Location()) + for !cur.After(endHour) { + key := cur.Format("2006-01-02 15:00") + if r, ok := byHour[key]; ok { + out = append(out, r) + } else { + out = append(out, DailyStat{Day: key}) + } + cur = cur.Add(time.Hour) + } + return out +} + +// DailyAssetByAddress groups paid actual_amount by (day, receive_address) +// for the per-address stacked chart, zero-filling missing days. +func DailyAssetByAddress(start, end time.Time) ([]AddressDailyStat, error) { + var rows []AddressDailyStat + err := dao.Mdb.Model(&mdb.Orders{}). + Select("DATE(created_at) AS day, receive_address AS address, SUM(actual_amount) AS actual_amount"). + Where("status = ?", mdb.StatusPaySuccess). + Where("created_at >= ?", start). + Where("created_at <= ?", end). + Group("DATE(created_at), receive_address"). + Order("day ASC"). + Scan(&rows).Error + if err != nil { + return nil, err + } + return fillAddressDailyStats(start, end, rows), nil +} + +// HourlyAssetByAddress groups paid actual_amount by (hour, receive_address) +// for the per-address stacked chart, zero-filling missing hours. +func HourlyAssetByAddress(start, end time.Time) ([]AddressDailyStat, error) { + var rows []AddressDailyStat + err := dao.Mdb.Model(&mdb.Orders{}). + Select("strftime('%Y-%m-%d %H:00', created_at) AS day, receive_address AS address, SUM(actual_amount) AS actual_amount"). + Where("status = ?", mdb.StatusPaySuccess). + Where("created_at >= ?", start). + Where("created_at <= ?", end). + Group("strftime('%Y-%m-%d %H:00', created_at), receive_address"). + Order("day ASC"). + Scan(&rows).Error + if err != nil { + return nil, err + } + return fillAddressHourlyStats(start, end, rows), nil +} + +// fillAddressDailyStats zero-fills missing day×address combinations. +// All addresses that appear in rows are represented for every day in range. +func fillAddressDailyStats(start, end time.Time, rows []AddressDailyStat) []AddressDailyStat { + return fillAddressStats(start, end, rows, false) +} + +// fillAddressHourlyStats zero-fills missing hour×address combinations. +func fillAddressHourlyStats(start, end time.Time, rows []AddressDailyStat) []AddressDailyStat { + return fillAddressStats(start, end, rows, true) +} + +func fillAddressStats(start, end time.Time, rows []AddressDailyStat, hourly bool) []AddressDailyStat { + type key struct{ day, addr string } + byKey := make(map[key]float64, len(rows)) + addrSet := make(map[string]struct{}, 4) + for _, r := range rows { + byKey[key{r.Day, r.Address}] = r.ActualAmount + addrSet[r.Address] = struct{}{} + } + if len(addrSet) == 0 { + return rows + } + var periods []string + if hourly { + cur := time.Date(start.Year(), start.Month(), start.Day(), start.Hour(), 0, 0, 0, start.Location()) + endH := time.Date(end.Year(), end.Month(), end.Day(), end.Hour(), 0, 0, 0, end.Location()) + for !cur.After(endH) { + periods = append(periods, cur.Format("2006-01-02 15:00")) + cur = cur.Add(time.Hour) + } + } else { + cur := time.Date(start.Year(), start.Month(), start.Day(), 0, 0, 0, 0, start.Location()) + last := time.Date(end.Year(), end.Month(), end.Day(), 0, 0, 0, 0, end.Location()) + for !cur.After(last) { + periods = append(periods, cur.Format("2006-01-02")) + cur = cur.AddDate(0, 0, 1) + } + } + var out []AddressDailyStat + for _, day := range periods { + for addr := range addrSet { + out = append(out, AddressDailyStat{ + Day: day, + Address: addr, + ActualAmount: byKey[key{day, addr}], + }) + } + } + return out +} + +// SumPaidActualAmount returns the total paid actual_amount across all +// time. Used by the overview "total asset" card. +func SumPaidActualAmount() (float64, error) { + var sum float64 + err := dao.Mdb.Model(&mdb.Orders{}). + Select("COALESCE(SUM(actual_amount), 0)"). + Where("status = ?", mdb.StatusPaySuccess). + Scan(&sum).Error + return sum, err +} + +// PaidStatsInRange returns (order_count, success_count, actual_sum) for +// a given time range. Caller chooses the range (today / last 7 days). +func PaidStatsInRange(start, end time.Time) (int64, int64, float64, error) { + type row struct { + OrderCount int64 + SuccessCount int64 + ActualSum float64 + } + var r row + err := dao.Mdb.Model(&mdb.Orders{}). + Select(`COUNT(*) AS order_count, + SUM(CASE WHEN status = ? THEN 1 ELSE 0 END) AS success_count, + SUM(CASE WHEN status = ? THEN actual_amount ELSE 0 END) AS actual_sum`, + mdb.StatusPaySuccess, mdb.StatusPaySuccess). + Where("created_at >= ?", start). + Where("created_at <= ?", end). + Scan(&r).Error + return r.OrderCount, r.SuccessCount, r.ActualSum, err +} + +// ActiveAddressCountInRange returns the number of distinct wallet addresses +// that appear in at least one order within [start, end]. +func ActiveAddressCountInRange(start, end time.Time) (int64, error) { + var count int64 + err := dao.Mdb.Model(&mdb.Orders{}). + Where("created_at >= ?", start). + Where("created_at <= ?", end). + Distinct("receive_address"). + Count(&count).Error + return count, err +} + +// AveragePaymentDurationSeconds returns the mean elapsed time between +// created_at and updated_at for orders that reached StatusPaySuccess +// in the given range. Zero-safe when no rows match. +func AveragePaymentDurationSeconds(start, end time.Time) (float64, error) { + type row struct { + Avg float64 + } + var r row + // Using TIMESTAMPDIFF would be MySQL-specific. Fetch the raw + // columns and compute in Go — trend windows are small enough. + type pair struct { + CreatedAt time.Time + UpdatedAt time.Time + } + var pairs []pair + err := dao.Mdb.Model(&mdb.Orders{}). + Select("created_at, updated_at"). + Where("status = ?", mdb.StatusPaySuccess). + Where("created_at >= ?", start). + Where("created_at <= ?", end). + Scan(&pairs).Error + if err != nil { + return 0, err + } + if len(pairs) == 0 { + return 0, nil + } + total := 0.0 + for _, p := range pairs { + total += p.UpdatedAt.Sub(p.CreatedAt).Seconds() + } + r.Avg = total / float64(len(pairs)) + return r.Avg, nil +} + +// CountExpiredInRange returns the number of StatusExpired orders in range. +func CountExpiredInRange(start, end time.Time) (int64, error) { + var n int64 + err := dao.Mdb.Model(&mdb.Orders{}). + Where("status = ?", mdb.StatusExpired). + Where("created_at >= ?", start). + Where("created_at <= ?", end). + Count(&n).Error + return n, err +} + +// RecentOrders returns the latest N orders regardless of status. +func RecentOrders(limit int) ([]mdb.Orders, error) { + if limit < 1 { + limit = 20 + } + if limit > 100 { + limit = 100 + } + var rows []mdb.Orders + err := dao.Mdb.Model(&mdb.Orders{}). + Order("id DESC"). + Limit(limit). + Find(&rows).Error + return rows, err +} + +// CountEnabledChains counts chains where Enabled=true. +func CountEnabledChains() (int64, error) { + var n int64 + err := dao.Mdb.Model(&mdb.Chain{}).Where("enabled = ?", true).Count(&n).Error + return n, err +} diff --git a/src/model/data/order_data_test.go b/src/model/data/order_data_test.go new file mode 100644 index 0000000..c42c393 --- /dev/null +++ b/src/model/data/order_data_test.go @@ -0,0 +1,62 @@ +package data + +import ( + "strings" + "testing" + "time" + + "github.com/GMWalletApp/epusdt/internal/testutil" + "github.com/GMWalletApp/epusdt/model/mdb" +) + +func TestEvmTransactionLockAddressIsCaseInsensitive(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + tradeID := "trade-evm-case" + address := "0xA1B2c3D4e5F60718293aBcDeF001122334455667" + + if err := LockTransaction("Ethereum", address, "usdt", tradeID, 1.23, time.Hour); err != nil { + t.Fatalf("lock transaction: %v", err) + } + + gotTradeID, err := GetTradeIdByWalletAddressAndAmountAndToken(mdb.NetworkEthereum, strings.ToLower(address), "USDT", 1.23) + if err != nil { + t.Fatalf("lookup transaction lock: %v", err) + } + if gotTradeID != tradeID { + t.Fatalf("trade id = %q, want %q", gotTradeID, tradeID) + } + + if err := UnLockTransaction(mdb.NetworkEthereum, strings.ToUpper(address), "USDT", 1.23); err != nil { + t.Fatalf("unlock transaction: %v", err) + } + + gotTradeID, err = GetTradeIdByWalletAddressAndAmountAndToken(mdb.NetworkEthereum, address, "USDT", 1.23) + if err != nil { + t.Fatalf("lookup after unlock: %v", err) + } + if gotTradeID != "" { + t.Fatalf("expected lock to be released, got trade id %q", gotTradeID) + } +} + +func TestNonEvmTransactionLockAddressRemainsCaseSensitive(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + tradeID := "trade-tron-case" + address := "TCaseSensitiveAddress001" + + if err := LockTransaction(mdb.NetworkTron, address, "USDT", tradeID, 1.00, time.Hour); err != nil { + t.Fatalf("lock transaction: %v", err) + } + + gotTradeID, err := GetTradeIdByWalletAddressAndAmountAndToken(mdb.NetworkTron, strings.ToLower(address), "USDT", 1.00) + if err != nil { + t.Fatalf("lookup transaction lock: %v", err) + } + if gotTradeID != "" { + t.Fatalf("tron address lookup should remain case-sensitive, got trade id %q", gotTradeID) + } +} diff --git a/src/model/data/rpc_node_data.go b/src/model/data/rpc_node_data.go new file mode 100644 index 0000000..84a0acb --- /dev/null +++ b/src/model/data/rpc_node_data.go @@ -0,0 +1,124 @@ +package data + +import ( + "math/rand" + "strings" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/dromara/carbon/v2" +) + +// ListRpcNodes returns rows optionally filtered by network. +func ListRpcNodes(network string) ([]mdb.RpcNode, error) { + var rows []mdb.RpcNode + tx := dao.Mdb.Model(&mdb.RpcNode{}) + if network != "" { + tx = tx.Where("network = ?", strings.ToLower(network)) + } + err := tx.Order("id ASC").Find(&rows).Error + return rows, err +} + +// GetRpcNodeByID fetches one row. +func GetRpcNodeByID(id uint64) (*mdb.RpcNode, error) { + row := new(mdb.RpcNode) + err := dao.Mdb.Model(row).Limit(1).Find(row, id).Error + return row, err +} + +// CreateRpcNode inserts a row. +func CreateRpcNode(row *mdb.RpcNode) error { + return dao.Mdb.Create(row).Error +} + +// UpdateRpcNodeFields patches mutable columns. +func UpdateRpcNodeFields(id uint64, fields map[string]interface{}) error { + if len(fields) == 0 { + return nil + } + return dao.Mdb.Model(&mdb.RpcNode{}).Where("id = ?", id).Updates(fields).Error +} + +// DeleteRpcNodeByID soft-deletes the row. +func DeleteRpcNodeByID(id uint64) error { + return dao.Mdb.Where("id = ?", id).Delete(&mdb.RpcNode{}).Error +} + +// SelectRpcNode picks a healthy RPC endpoint for a (network, type) pair. +// Strategy: weighted random among rows where enabled=true AND status=ok. +// Falls back to enabled rows with status=unknown when no health check has +// run yet. Explicitly down rows are not selected. +func SelectRpcNode(network, nodeType string) (*mdb.RpcNode, error) { + var rows []mdb.RpcNode + err := dao.Mdb.Model(&mdb.RpcNode{}). + Where("network = ?", strings.ToLower(network)). + Where("type = ?", strings.ToLower(nodeType)). + Where("enabled = ?", true). + Find(&rows).Error + if err != nil { + return nil, err + } + if len(rows) == 0 { + return nil, nil + } + healthy := make([]mdb.RpcNode, 0, len(rows)) + bootstrap := make([]mdb.RpcNode, 0, len(rows)) + for _, r := range rows { + switch r.Status { + case mdb.RpcNodeStatusOk: + healthy = append(healthy, r) + case "", mdb.RpcNodeStatusUnknown: + bootstrap = append(bootstrap, r) + } + } + candidates := healthy + if len(candidates) == 0 { + candidates = bootstrap + } + if len(candidates) == 0 { + return nil, nil + } + return pickWeighted(candidates), nil +} + +// pickWeighted chooses one row using the Weight column. Weights < 1 are +// coerced to 1 so an admin-zeroed row still has a chance (use Enabled=false +// to truly disable). +func pickWeighted(rows []mdb.RpcNode) *mdb.RpcNode { + total := 0 + for i := range rows { + w := rows[i].Weight + if w < 1 { + w = 1 + } + total += w + } + if total <= 0 { + return &rows[0] + } + pick := rand.Intn(total) + acc := 0 + for i := range rows { + w := rows[i].Weight + if w < 1 { + w = 1 + } + acc += w + if pick < acc { + return &rows[i] + } + } + return &rows[len(rows)-1] +} + +// UpdateRpcNodeHealth stamps status/latency + last_checked_at. +func UpdateRpcNodeHealth(id uint64, status string, latencyMs int) error { + return dao.Mdb.Model(&mdb.RpcNode{}). + Where("id = ?", id). + Updates(map[string]interface{}{ + "status": status, + "last_latency_ms": latencyMs, + "last_checked_at": carbon.Now().StdTime(), + }).Error +} diff --git a/src/model/data/rpc_node_data_test.go b/src/model/data/rpc_node_data_test.go new file mode 100644 index 0000000..b981455 --- /dev/null +++ b/src/model/data/rpc_node_data_test.go @@ -0,0 +1,101 @@ +package data + +import ( + "testing" + + "github.com/GMWalletApp/epusdt/internal/testutil" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" +) + +func TestSelectRpcNodeUsesHealthyRow(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if err := dao.Mdb.Create(&mdb.RpcNode{ + Network: mdb.NetworkSolana, + Url: "https://unknown.example.com", + Type: mdb.RpcNodeTypeHttp, + Weight: 1, + Enabled: true, + Status: mdb.RpcNodeStatusUnknown, + }).Error; err != nil { + t.Fatalf("seed unknown rpc_node: %v", err) + } + if err := dao.Mdb.Create(&mdb.RpcNode{ + Network: mdb.NetworkSolana, + Url: "https://ok.example.com", + Type: mdb.RpcNodeTypeHttp, + Weight: 1, + Enabled: true, + Status: mdb.RpcNodeStatusOk, + }).Error; err != nil { + t.Fatalf("seed ok rpc_node: %v", err) + } + + got, err := SelectRpcNode(mdb.NetworkSolana, mdb.RpcNodeTypeHttp) + if err != nil { + t.Fatalf("SelectRpcNode(): %v", err) + } + if got == nil || got.Url != "https://ok.example.com" { + t.Fatalf("SelectRpcNode() = %#v, want ok row", got) + } +} + +func TestSelectRpcNodeFallsBackToUnknownOnly(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if err := dao.Mdb.Create(&mdb.RpcNode{ + Network: mdb.NetworkSolana, + Url: "https://unknown.example.com", + Type: mdb.RpcNodeTypeHttp, + Weight: 1, + Enabled: true, + Status: mdb.RpcNodeStatusUnknown, + }).Error; err != nil { + t.Fatalf("seed unknown rpc_node: %v", err) + } + if err := dao.Mdb.Create(&mdb.RpcNode{ + Network: mdb.NetworkSolana, + Url: "https://down.example.com", + Type: mdb.RpcNodeTypeHttp, + Weight: 1, + Enabled: true, + Status: mdb.RpcNodeStatusDown, + }).Error; err != nil { + t.Fatalf("seed down rpc_node: %v", err) + } + + got, err := SelectRpcNode(mdb.NetworkSolana, mdb.RpcNodeTypeHttp) + if err != nil { + t.Fatalf("SelectRpcNode(): %v", err) + } + if got == nil || got.Url != "https://unknown.example.com" { + t.Fatalf("SelectRpcNode() = %#v, want unknown row", got) + } +} + +func TestSelectRpcNodeIgnoresDownRows(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if err := dao.Mdb.Create(&mdb.RpcNode{ + Network: mdb.NetworkSolana, + Url: "https://down.example.com", + Type: mdb.RpcNodeTypeHttp, + Weight: 1, + Enabled: true, + Status: mdb.RpcNodeStatusDown, + }).Error; err != nil { + t.Fatalf("seed down rpc_node: %v", err) + } + + got, err := SelectRpcNode(mdb.NetworkSolana, mdb.RpcNodeTypeHttp) + if err != nil { + t.Fatalf("SelectRpcNode(): %v", err) + } + if got != nil { + t.Fatalf("SelectRpcNode() = %#v, want nil", got) + } +} diff --git a/src/model/data/settings_data.go b/src/model/data/settings_data.go new file mode 100644 index 0000000..86fa84e --- /dev/null +++ b/src/model/data/settings_data.go @@ -0,0 +1,170 @@ +package data + +import ( + "strconv" + "strings" + "sync" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" + "gorm.io/gorm/clause" +) + +// Simple in-process cache. Settings are read frequently (on every order +// create, every scanner tick, etc.); the DB round-trip isn't free. Cache +// is invalidated explicitly via SetString/Delete and expires on process +// restart — that's enough for admin-edit semantics without TTL complexity. +var ( + settingsCache = map[string]string{} + settingsCacheMu sync.RWMutex + settingsLoadMu sync.Mutex // serializes the lazy bootstrap load + settingsLoaded bool +) + +func loadAllSettings() error { + var rows []mdb.Setting + if err := dao.Mdb.Find(&rows).Error; err != nil { + return err + } + settingsCacheMu.Lock() + defer settingsCacheMu.Unlock() + settingsCache = make(map[string]string, len(rows)) + for _, r := range rows { + settingsCache[r.Key] = r.Value + } + settingsLoaded = true + return nil +} + +// ensureLoaded performs a thread-safe lazy bootstrap of the cache. Uses +// a dedicated mutex + double-checked flag so two concurrent callers +// don't both hit the DB. Can't use sync.Once because ReloadSettings +// needs to be able to rebuild after a failed initial load. +func ensureLoaded() { + settingsCacheMu.RLock() + loaded := settingsLoaded + settingsCacheMu.RUnlock() + if loaded { + return + } + settingsLoadMu.Lock() + defer settingsLoadMu.Unlock() + // Recheck under the load mutex — another goroutine may have loaded + // while we were blocked. + settingsCacheMu.RLock() + loaded = settingsLoaded + settingsCacheMu.RUnlock() + if loaded { + return + } + _ = loadAllSettings() +} + +// ReloadSettings forces a refresh from DB. Call after external writes. +func ReloadSettings() error { + settingsLoadMu.Lock() + defer settingsLoadMu.Unlock() + return loadAllSettings() +} + +// GetSettingString returns the string value for key, or fallback if unset. +func GetSettingString(key, fallback string) string { + ensureLoaded() + settingsCacheMu.RLock() + defer settingsCacheMu.RUnlock() + v, ok := settingsCache[key] + if !ok || strings.TrimSpace(v) == "" { + return fallback + } + return v +} + +// GetSettingInt returns the int value for key, or fallback on miss/parse fail. +func GetSettingInt(key string, fallback int) int { + v := GetSettingString(key, "") + if v == "" { + return fallback + } + n, err := strconv.Atoi(v) + if err != nil { + return fallback + } + return n +} + +// GetSettingFloat returns the float value for key, or fallback on miss/parse fail. +func GetSettingFloat(key string, fallback float64) float64 { + v := GetSettingString(key, "") + if v == "" { + return fallback + } + f, err := strconv.ParseFloat(v, 64) + if err != nil { + return fallback + } + return f +} + +// GetSettingBool returns the bool value for key, or fallback on miss/parse fail. +func GetSettingBool(key string, fallback bool) bool { + v := GetSettingString(key, "") + if v == "" { + return fallback + } + b, err := strconv.ParseBool(v) + if err != nil { + return fallback + } + return b +} + +// SetSetting upserts a setting row and refreshes the cache entry. +func SetSetting(group, key, value, valueType string) error { + if valueType == "" { + valueType = mdb.SettingTypeString + } + row := mdb.Setting{Group: group, Key: key, Value: value, Type: valueType} + err := dao.Mdb.Clauses(clause.OnConflict{ + Columns: []clause.Column{{Name: "key"}}, + DoUpdates: clause.AssignmentColumns([]string{"group", "value", "type", "updated_at"}), + }).Create(&row).Error + if err != nil { + return err + } + settingsCacheMu.Lock() + settingsCache[key] = value + settingsCacheMu.Unlock() + return nil +} + +// DeleteSetting removes a setting row and drops the cache entry. +func DeleteSetting(key string) error { + if err := dao.Mdb.Where("key = ?", key).Delete(&mdb.Setting{}).Error; err != nil { + return err + } + settingsCacheMu.Lock() + delete(settingsCache, key) + settingsCacheMu.Unlock() + return nil +} + +// sensitiveSettingKeys lists keys that must never be returned to API callers. +var sensitiveSettingKeys = []string{ + mdb.SettingKeyJwtSecret, + mdb.SettingKeyInitAdminPasswordPlain, + mdb.SettingKeyInitAdminPasswordHash, + mdb.SettingKeyInitAdminPasswordFetched, + mdb.SettingKeyInitAdminPasswordChanged, +} + +// ListSettingsByGroup returns all rows for a given group (empty group = all), +// excluding any keys in sensitiveSettingKeys. +func ListSettingsByGroup(group string) ([]mdb.Setting, error) { + var rows []mdb.Setting + tx := dao.Mdb.Model(&mdb.Setting{}).Not("`key`", sensitiveSettingKeys) + if group != "" { + tx = tx.Where("`group` = ?", group) + } + err := tx.Order("`key` ASC").Find(&rows).Error + return rows, err +} diff --git a/src/model/data/supported_asset_data.go b/src/model/data/supported_asset_data.go deleted file mode 100644 index e691fba..0000000 --- a/src/model/data/supported_asset_data.go +++ /dev/null @@ -1,123 +0,0 @@ -package data - -import ( - "strings" - - "github.com/assimon/luuu/model/dao" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/util/constant" -) - -func normalizeNetworkToken(network, token string) (string, string) { - return strings.ToLower(strings.TrimSpace(network)), strings.ToUpper(strings.TrimSpace(token)) -} - -func AddSupportedAsset(network, token string, status int64) (*mdb.SupportedAsset, error) { - network, token = normalizeNetworkToken(network, token) - exist, err := GetSupportedAssetByNetworkAndToken(network, token) - if err != nil { - return nil, err - } - if exist.ID > 0 { - return nil, constant.SupportedAssetAlreadyExists - } - - deleted, err := getSupportedAssetByNetworkAndTokenUnscoped(network, token) - if err != nil { - return nil, err - } - if deleted.ID > 0 && deleted.DeletedAt.Valid { - deleted.Status = status - deleted.DeletedAt.Valid = false - if err := dao.Mdb.Unscoped().Save(deleted).Error; err != nil { - return nil, err - } - return deleted, nil - } - - asset := &mdb.SupportedAsset{ - Network: network, - Token: token, - Status: status, - } - err = dao.Mdb.Create(asset).Error - return asset, err -} - -func getSupportedAssetByNetworkAndTokenUnscoped(network, token string) (*mdb.SupportedAsset, error) { - network, token = normalizeNetworkToken(network, token) - asset := new(mdb.SupportedAsset) - err := dao.Mdb.Unscoped().Model(asset). - Where("network = ?", network). - Where("token = ?", token). - Limit(1).Find(asset).Error - return asset, err -} - -func GetSupportedAssetByNetworkAndToken(network, token string) (*mdb.SupportedAsset, error) { - network, token = normalizeNetworkToken(network, token) - asset := new(mdb.SupportedAsset) - err := dao.Mdb.Model(asset). - Where("network = ?", network). - Where("token = ?", token). - Limit(1).Find(asset).Error - return asset, err -} - -func GetSupportedAssetByID(id uint64) (*mdb.SupportedAsset, error) { - asset := new(mdb.SupportedAsset) - err := dao.Mdb.Model(asset).Limit(1).Find(asset, id).Error - return asset, err -} - -func UpdateSupportedAsset(id uint64, network, token string, status int64) (*mdb.SupportedAsset, error) { - network, token = normalizeNetworkToken(network, token) - - asset, err := GetSupportedAssetByID(id) - if err != nil { - return nil, err - } - if asset.ID <= 0 { - return nil, constant.SupportedAssetNotFound - } - - exist, err := GetSupportedAssetByNetworkAndToken(network, token) - if err != nil { - return nil, err - } - if exist.ID > 0 && exist.ID != id { - return nil, constant.SupportedAssetAlreadyExists - } - - asset.Network = network - asset.Token = token - asset.Status = status - if err := dao.Mdb.Save(asset).Error; err != nil { - return nil, err - } - return asset, nil -} - -func DeleteSupportedAssetByID(id uint64) error { - return dao.Mdb.Where("id = ?", id).Delete(&mdb.SupportedAsset{}).Error -} - -func ListSupportedAssets(network string) ([]mdb.SupportedAsset, error) { - network = strings.ToLower(strings.TrimSpace(network)) - var list []mdb.SupportedAsset - tx := dao.Mdb.Model(&mdb.SupportedAsset{}) - if network != "" { - tx = tx.Where("network = ?", network) - } - err := tx.Order("network asc, token asc").Find(&list).Error - return list, err -} - -func ListEnabledSupportedAssets() ([]mdb.SupportedAsset, error) { - var list []mdb.SupportedAsset - err := dao.Mdb.Model(&mdb.SupportedAsset{}). - Where("status = ?", mdb.TokenStatusEnable). - Order("network asc, token asc"). - Find(&list).Error - return list, err -} diff --git a/src/model/data/wallet_address_data.go b/src/model/data/wallet_address_data.go index add0a83..0c562b5 100644 --- a/src/model/data/wallet_address_data.go +++ b/src/model/data/wallet_address_data.go @@ -3,9 +3,9 @@ package data import ( "strings" - "github.com/assimon/luuu/model/dao" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/util/constant" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/util/constant" ) // AddWalletAddress 创建钱包 (默认 tron 网络,用于 Telegram 添加) @@ -22,15 +22,22 @@ func isEVMNetwork(network string) bool { return false } +func normalizeWalletNetwork(network string) string { + return strings.ToLower(strings.TrimSpace(network)) +} + +func normalizeWalletAddressByNetwork(network, address string) string { + address = strings.TrimSpace(address) + if isEVMNetwork(normalizeWalletNetwork(network)) { + return strings.ToLower(address) + } + return address +} + // AddWalletAddressWithNetwork 创建指定网络的钱包地址 func AddWalletAddressWithNetwork(network, address string) (*mdb.WalletAddress, error) { - network = strings.ToLower(strings.TrimSpace(network)) - address = strings.TrimSpace(address) - - // evm 网络地址统一小写,tron 和 solana 保持原样 - if isEVMNetwork(network) { - address = strings.ToLower(address) - } + network = normalizeWalletNetwork(network) + address = normalizeWalletAddressByNetwork(network, address) exist, err := GetWalletAddressByNetworkAndAddress(network, address) if err != nil { @@ -39,6 +46,23 @@ func AddWalletAddressWithNetwork(network, address string) (*mdb.WalletAddress, e if exist.ID > 0 { return nil, constant.WalletAddressAlreadyExists } + + // Check for a soft-deleted record with the same (network, address) and restore it. + deleted := new(mdb.WalletAddress) + err = dao.Mdb.Unscoped(). + Where("network = ? AND address = ? AND deleted_at IS NOT NULL", network, address). + Limit(1).Find(deleted).Error + if err != nil { + return nil, err + } + if deleted.ID > 0 { + err = dao.Mdb.Unscoped().Model(deleted).Updates(map[string]interface{}{ + "deleted_at": nil, + "status": mdb.TokenStatusEnable, + }).Error + return deleted, err + } + walletAddress := &mdb.WalletAddress{ Network: network, Address: address, @@ -50,6 +74,8 @@ func AddWalletAddressWithNetwork(network, address string) (*mdb.WalletAddress, e // GetWalletAddressByNetworkAndAddress 通过网络和地址查询 func GetWalletAddressByNetworkAndAddress(network, address string) (*mdb.WalletAddress, error) { + network = normalizeWalletNetwork(network) + address = normalizeWalletAddressByNetwork(network, address) walletAddress := new(mdb.WalletAddress) err := dao.Mdb.Model(walletAddress). Where("network = ?", network). @@ -87,11 +113,20 @@ func GetAvailableWalletAddress() ([]mdb.WalletAddress, error) { // GetAvailableWalletAddressByNetwork 获得指定网络的所有可用钱包地址 func GetAvailableWalletAddressByNetwork(network string) ([]mdb.WalletAddress, error) { + network = normalizeWalletNetwork(network) var list []mdb.WalletAddress err := dao.Mdb.Model(list). Where("status = ?", mdb.TokenStatusEnable). Where("network = ?", network). Find(&list).Error + if err != nil { + return nil, err + } + if isEVMNetwork(network) { + for i := range list { + list[i].Address = strings.ToLower(strings.TrimSpace(list[i].Address)) + } + } return list, err } @@ -104,8 +139,17 @@ func GetAllWalletAddress() ([]mdb.WalletAddress, error) { // GetAllWalletAddressByNetwork 获得指定网络的所有钱包地址 func GetAllWalletAddressByNetwork(network string) ([]mdb.WalletAddress, error) { + network = normalizeWalletNetwork(network) var list []mdb.WalletAddress err := dao.Mdb.Model(list).Where("network = ?", network).Find(&list).Error + if err != nil { + return nil, err + } + if isEVMNetwork(network) { + for i := range list { + list[i].Address = strings.ToLower(strings.TrimSpace(list[i].Address)) + } + } return list, err } diff --git a/src/model/data/wallet_address_data_test.go b/src/model/data/wallet_address_data_test.go new file mode 100644 index 0000000..fb9149e --- /dev/null +++ b/src/model/data/wallet_address_data_test.go @@ -0,0 +1,83 @@ +package data + +import ( + "strings" + "testing" + + "github.com/GMWalletApp/epusdt/internal/testutil" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" +) + +func TestAddWalletAddressWithNetworkNormalizesEvmAddressToLowercase(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + input := "0xA1B2c3D4e5F60718293aBcDeF001122334455667" + row, err := AddWalletAddressWithNetwork(mdb.NetworkEthereum, input) + if err != nil { + t.Fatalf("add wallet: %v", err) + } + if row.Address != strings.ToLower(input) { + t.Fatalf("wallet address = %q, want %q", row.Address, strings.ToLower(input)) + } + + loaded, err := GetWalletAddressByNetworkAndAddress(mdb.NetworkEthereum, strings.ToUpper(input)) + if err != nil { + t.Fatalf("load wallet by mixed-case address: %v", err) + } + if loaded.ID == 0 { + t.Fatal("expected to find wallet by mixed-case query") + } + if loaded.Address != strings.ToLower(input) { + t.Fatalf("stored wallet address = %q, want lowercase", loaded.Address) + } +} + +func TestGetAvailableWalletAddressByNetworkReturnsLowercaseForEvm(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + mixed := "0xA1B2c3D4e5F60718293aBcDeF001122334455667" + if err := dao.Mdb.Create(&mdb.WalletAddress{ + Network: mdb.NetworkEthereum, + Address: mixed, + Status: mdb.TokenStatusEnable, + }).Error; err != nil { + t.Fatalf("seed mixed-case wallet: %v", err) + } + + rows, err := GetAvailableWalletAddressByNetwork("Ethereum") + if err != nil { + t.Fatalf("list wallets: %v", err) + } + if len(rows) != 1 { + t.Fatalf("wallet count = %d, want 1", len(rows)) + } + if rows[0].Address != strings.ToLower(mixed) { + t.Fatalf("listed wallet address = %q, want %q", rows[0].Address, strings.ToLower(mixed)) + } +} + +func TestAddWalletAddressWithNetworkKeepsOriginalCaseForNonEvm(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + tronAddress := "TCaseSensitiveTronAddress001" + tronRow, err := AddWalletAddressWithNetwork(mdb.NetworkTron, tronAddress) + if err != nil { + t.Fatalf("add tron wallet: %v", err) + } + if tronRow.Address != tronAddress { + t.Fatalf("tron wallet address = %q, want %q", tronRow.Address, tronAddress) + } + + solAddress := "SoLAnACaseSensitiveAddress111111111111111111" + solRow, err := AddWalletAddressWithNetwork(mdb.NetworkSolana, solAddress) + if err != nil { + t.Fatalf("add solana wallet: %v", err) + } + if solRow.Address != solAddress { + t.Fatalf("solana wallet address = %q, want %q", solRow.Address, solAddress) + } +} diff --git a/src/model/mdb/admin_user.go b/src/model/mdb/admin_user.go new file mode 100644 index 0000000..f695e96 --- /dev/null +++ b/src/model/mdb/admin_user.go @@ -0,0 +1,21 @@ +package mdb + +import "github.com/dromara/carbon/v2" + +const ( + AdminUserStatusEnable = 1 + AdminUserStatusDisable = 2 +) + +type AdminUser struct { + Username string `gorm:"column:username;uniqueIndex:admin_users_username_uindex;size:64" json:"username" example:"admin"` + PasswordHash string `gorm:"column:password_hash;size:255" json:"-"` + // 状态 1=启用 2=禁用 + Status int `gorm:"column:status;default:1" json:"status" enums:"1,2" example:"1"` + LastLoginAt carbon.Time `gorm:"column:last_login_at" json:"last_login_at" example:"2026-04-16 12:00:00"` + BaseModel +} + +func (a *AdminUser) TableName() string { + return "admin_users" +} diff --git a/src/model/mdb/api_key.go b/src/model/mdb/api_key.go new file mode 100644 index 0000000..30c5a61 --- /dev/null +++ b/src/model/mdb/api_key.go @@ -0,0 +1,29 @@ +package mdb + +import "github.com/dromara/carbon/v2" + +const ( + ApiKeyStatusEnable = 1 + ApiKeyStatusDisable = 2 +) + +// ApiKey stores a universal merchant credential (PID + secret) that is +// valid for both EPAY and GMPAY payment flows. Identification at +// request time is always by PID; the gateway flow is chosen by the +// route (not by any property of the row). +type ApiKey struct { + Name string `gorm:"column:name;size:128" json:"name" example:"My API Key"` + Pid string `gorm:"column:pid;size:128;uniqueIndex:api_keys_pid_uindex" json:"pid" example:"1000"` + SecretKey string `gorm:"column:secret_key;size:255" json:"-"` + IpWhitelist string `gorm:"column:ip_whitelist;type:text" json:"ip_whitelist" example:"192.168.1.0/24,10.0.0.1"` + NotifyUrl string `gorm:"column:notify_url;size:512" json:"notify_url" example:"https://example.com/notify"` + // 状态 1=启用 2=禁用 + Status int `gorm:"column:status;default:1" json:"status" enums:"1,2" example:"1"` + CallCount int64 `gorm:"column:call_count;default:0" json:"call_count" example:"342"` + LastUsedAt carbon.Time `gorm:"column:last_used_at" json:"last_used_at" example:"2026-04-16 12:00:00"` + BaseModel +} + +func (a *ApiKey) TableName() string { + return "api_keys" +} diff --git a/src/model/mdb/base.go b/src/model/mdb/base.go index 0de7992..3fe1391 100644 --- a/src/model/mdb/base.go +++ b/src/model/mdb/base.go @@ -6,8 +6,8 @@ import ( ) type BaseModel struct { - ID uint64 `gorm:"column:id;primary_key;autoIncrement" json:"id"` - CreatedAt carbon.Time `gorm:"column:created_at" json:"created_at"` - UpdatedAt carbon.Time `gorm:"column:updated_at" json:"updated_at"` + ID uint64 `gorm:"column:id;primary_key;autoIncrement" json:"id" example:"1"` + CreatedAt carbon.Time `gorm:"column:created_at" json:"created_at" example:"2026-04-16 12:00:00"` + UpdatedAt carbon.Time `gorm:"column:updated_at" json:"updated_at" example:"2026-04-16 12:00:00"` DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"` } diff --git a/src/model/mdb/chain.go b/src/model/mdb/chain.go new file mode 100644 index 0000000..c98ce20 --- /dev/null +++ b/src/model/mdb/chain.go @@ -0,0 +1,19 @@ +package mdb + +// Chain represents an enabled blockchain network. +// Scanner tasks read this table on each polling tick to decide whether to +// process the network. When Enabled=false the scanner skips the chain +// entirely without restarting. +type Chain struct { + Network string `gorm:"column:network;uniqueIndex:chains_network_uindex;size:32" json:"network" example:"tron"` + DisplayName string `gorm:"column:display_name;size:64" json:"display_name" example:"Tron"` + Enabled bool `gorm:"column:enabled;default:true" json:"enabled" example:"true"` + MinConfirmations int `gorm:"column:min_confirmations;default:1" json:"min_confirmations" example:"20"` + ScanIntervalSec int `gorm:"column:scan_interval_sec;default:5" json:"scan_interval_sec" example:"5"` + Extra string `gorm:"column:extra;type:text" json:"extra" example:"{}"` + BaseModel +} + +func (c *Chain) TableName() string { + return "chains" +} diff --git a/src/model/mdb/chain_token.go b/src/model/mdb/chain_token.go new file mode 100644 index 0000000..5698563 --- /dev/null +++ b/src/model/mdb/chain_token.go @@ -0,0 +1,24 @@ +package mdb + +const ( + ChainTokenStatusEnable = 1 + ChainTokenStatusDisable = 2 +) + +// ChainToken describes a token to watch on a given chain. Replaces the +// hardcoded USDT/USDC contract addresses in task/listen_eth.go. Scanners +// load this table on startup (and refresh periodically) to learn which +// contracts to subscribe to. +type ChainToken struct { + Network string `gorm:"column:network;size:32;uniqueIndex:chain_tokens_network_symbol_uindex,priority:1" json:"network" example:"tron"` + Symbol string `gorm:"column:symbol;size:32;uniqueIndex:chain_tokens_network_symbol_uindex,priority:2" json:"symbol" example:"USDT"` + ContractAddress string `gorm:"column:contract_address;size:128" json:"contract_address" example:"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"` + Decimals int `gorm:"column:decimals;default:6" json:"decimals" example:"6"` + Enabled bool `gorm:"column:enabled;default:true" json:"enabled" example:"true"` + MinAmount float64 `gorm:"column:min_amount;default:0" json:"min_amount" example:"1.0"` + BaseModel +} + +func (c *ChainToken) TableName() string { + return "chain_tokens" +} diff --git a/src/model/mdb/notification_channel.go b/src/model/mdb/notification_channel.go new file mode 100644 index 0000000..d4a6f77 --- /dev/null +++ b/src/model/mdb/notification_channel.go @@ -0,0 +1,36 @@ +package mdb + +const ( + NotificationTypeTelegram = "telegram" + NotificationTypeWebhook = "webhook" + NotificationTypeEmail = "email" +) + +const ( + NotificationStatusEnable = 1 + NotificationStatusDisable = 2 +) + +// Notification events (JSON keys in Events column). +const ( + NotifyEventPaySuccess = "pay_success" + NotifyEventOrderExpired = "order_expired" + NotifyEventDailyReport = "daily_report" +) + +// NotificationChannel represents one push target instance. +// Config/Events are JSON strings consumed by the notify dispatcher. +// For telegram, Config = {"bot_token":"...","chat_id":"...","proxy":"..."}. +// For webhook, Config = {"url":"...","headers":{...},"secret":"..."}. +type NotificationChannel struct { + Type string `gorm:"column:type;size:32;index:notification_channels_type_enabled_index,priority:1" json:"type" enums:"telegram,webhook,email" example:"telegram"` + Name string `gorm:"column:name;size:128" json:"name" example:"主通知群"` + Config string `gorm:"column:config;type:text" json:"config" example:"{\"bot_token\":\"123:ABC\",\"chat_id\":\"456\"}"` + Events string `gorm:"column:events;type:text" json:"events" example:"{\"pay_success\":true,\"order_expired\":true}"` + Enabled bool `gorm:"column:enabled;default:true;index:notification_channels_type_enabled_index,priority:2" json:"enabled" example:"true"` + BaseModel +} + +func (n *NotificationChannel) TableName() string { + return "notification_channels" +} diff --git a/src/model/mdb/orders_mdb.go b/src/model/mdb/orders_mdb.go index 9350b2c..afa87e7 100644 --- a/src/model/mdb/orders_mdb.go +++ b/src/model/mdb/orders_mdb.go @@ -13,24 +13,30 @@ const ( ) type Orders struct { - TradeId string `gorm:"column:trade_id;uniqueIndex:orders_trade_id_uindex" json:"trade_id"` - OrderId string `gorm:"column:order_id;uniqueIndex:orders_order_id_uindex" json:"order_id"` // the order id is generated by client, and will notify client when order is paid + TradeId string `gorm:"column:trade_id;uniqueIndex:orders_trade_id_uindex" json:"trade_id" example:"T2026041612345678"` + OrderId string `gorm:"column:order_id;uniqueIndex:orders_order_id_uindex" json:"order_id" example:"ORD20260416001"` ParentTradeId string `gorm:"column:parent_trade_id;index:idx_orders_parent_trade_id;default:''" json:"parent_trade_id"` - BlockTransactionId string `gorm:"index:orders_block_transaction_id_index;column:block_transaction_id" json:"block_transaction_id"` - Amount float64 `gorm:"column:amount" json:"amount"` - Currency string `gorm:"column:currency" json:"currency"` - ActualAmount float64 `gorm:"column:actual_amount" json:"actual_amount"` - ReceiveAddress string `gorm:"column:receive_address" json:"receive_address"` - Token string `gorm:"column:token" json:"token"` - Network string `gorm:"column:network" json:"network"` - Status int `gorm:"column:status;default:1" json:"status"` - NotifyUrl string `gorm:"column:notify_url" json:"notify_url"` - RedirectUrl string `gorm:"column:redirect_url" json:"redirect_url"` - Name string `gorm:"column:name" json:"name"` - CallbackNum int `gorm:"column:callback_num;default:0" json:"callback_num"` - CallBackConfirm int `gorm:"column:callback_confirm;default:2" json:"callback_confirm"` - IsSelected bool `gorm:"column:is_selected;default:false" json:"is_selected"` - PaymentType string `gorm:"column:payment_type" json:"payment_type"` + BlockTransactionId string `gorm:"index:orders_block_transaction_id_index;column:block_transaction_id" json:"block_transaction_id" example:"0xabc123..."` + Amount float64 `gorm:"column:amount" json:"amount" example:"100.0000"` + Currency string `gorm:"column:currency" json:"currency" example:"CNY"` + ActualAmount float64 `gorm:"column:actual_amount" json:"actual_amount" example:"14.2857"` + ReceiveAddress string `gorm:"column:receive_address" json:"receive_address" example:"TTestTronAddress001"` + Token string `gorm:"column:token" json:"token" example:"USDT"` + Network string `gorm:"column:network" json:"network" example:"tron"` + // 订单状态 1=等待支付 2=支付成功 3=已过期 + Status int `gorm:"column:status;default:1" json:"status" enums:"1,2,3" example:"1"` + NotifyUrl string `gorm:"column:notify_url" json:"notify_url" example:"https://example.com/notify"` + RedirectUrl string `gorm:"column:redirect_url" json:"redirect_url" example:"https://example.com/success"` + Name string `gorm:"column:name" json:"name" example:"VIP月卡"` + CallbackNum int `gorm:"column:callback_num;default:0" json:"callback_num" example:"0"` + // 回调确认状态 1=回调成功 2=未回调/回调失败 + CallBackConfirm int `gorm:"column:callback_confirm;default:2" json:"callback_confirm" enums:"1,2" example:"2"` + IsSelected bool `gorm:"column:is_selected;default:false" json:"is_selected" example:"false"` + PaymentType string `gorm:"column:payment_type" json:"payment_type" example:"Epay"` + ApiKeyID uint64 `gorm:"column:api_key_id;default:0;index:orders_api_key_id_index" json:"api_key_id" example:"1"` + // PayBySubId holds the primary-key ID of the sub-order that settled this parent order. + // Zero when the parent order was paid directly (no sub-order involved). + PayBySubId uint64 `gorm:"column:pay_by_sub_id;default:0" json:"pay_by_sub_id" example:"0"` BaseModel } diff --git a/src/model/mdb/rpc_node.go b/src/model/mdb/rpc_node.go new file mode 100644 index 0000000..51ec7f7 --- /dev/null +++ b/src/model/mdb/rpc_node.go @@ -0,0 +1,36 @@ +package mdb + +import "github.com/dromara/carbon/v2" + +const ( + RpcNodeTypeHttp = "http" + RpcNodeTypeWs = "ws" +) + +const ( + RpcNodeStatusUnknown = "unknown" + RpcNodeStatusOk = "ok" + RpcNodeStatusDown = "down" +) + +// RpcNode records one RPC endpoint for a network. Clients select a node +// by weight among rows where Enabled=true AND Status=ok. A periodic +// task/rpc_health_job writes Status/LastLatencyMs/LastCheckedAt. +type RpcNode struct { + Network string `gorm:"column:network;size:32;index:rpc_nodes_network_status_index,priority:1" json:"network" example:"tron"` + Url string `gorm:"column:url;size:512" json:"url" example:"https://api.trongrid.io"` + // 连接类型 http=HTTP请求 ws=WebSocket长连接 + Type string `gorm:"column:type;size:16" json:"type" enums:"http,ws" example:"http"` + Weight int `gorm:"column:weight;default:1" json:"weight" example:"1"` + ApiKey string `gorm:"column:api_key;size:255" json:"api_key" example:"your-api-key"` + Enabled bool `gorm:"column:enabled;default:true" json:"enabled" example:"true"` + // 健康状态 unknown=未知 ok=正常 down=异常 + Status string `gorm:"column:status;size:16;default:unknown;index:rpc_nodes_network_status_index,priority:2" json:"status" enums:"unknown,ok,down" example:"ok"` + LastLatencyMs int `gorm:"column:last_latency_ms;default:-1" json:"last_latency_ms" example:"120"` + LastCheckedAt carbon.Time `gorm:"column:last_checked_at" json:"last_checked_at" example:"2026-04-16 12:00:00"` + BaseModel +} + +func (r *RpcNode) TableName() string { + return "rpc_nodes" +} diff --git a/src/model/mdb/settings.go b/src/model/mdb/settings.go new file mode 100644 index 0000000..4074a92 --- /dev/null +++ b/src/model/mdb/settings.go @@ -0,0 +1,58 @@ +package mdb + +// Setting stores non-credential runtime configuration as key/value pairs. +// Groups: brand, rate, system, epay. Merchant credentials (pid + secret_key) +// live in the api_keys table; notification configs live in NotificationChannel. +// Default rows for the epay group are seeded on first startup (see +// model/dao/mdb_table_init.go seedDefaultSettings). All other groups start +// empty and fall back to hardcoded defaults until an admin sets them. +// Only exception: system.jwt_secret is auto-generated on first startup. +const ( + SettingGroupBrand = "brand" + SettingGroupRate = "rate" + SettingGroupSystem = "system" + SettingGroupEpay = "epay" +) + +const ( + SettingTypeString = "string" + SettingTypeInt = "int" + SettingTypeBool = "bool" + SettingTypeJSON = "json" +) + +const ( + SettingKeyJwtSecret = "system.jwt_secret" + SettingKeyInitAdminPasswordPlain = "system.init_admin_password_plain" + SettingKeyInitAdminPasswordHash = "system.init_admin_password_hash" + SettingKeyInitAdminPasswordFetched = "system.init_admin_password_fetched" + SettingKeyInitAdminPasswordChanged = "system.init_admin_password_changed" + SettingKeyOrderExpiration = "system.order_expiration_time" + SettingKeyBrandSiteName = "brand.site_name" + SettingKeyBrandLogoUrl = "brand.logo_url" + SettingKeyBrandPageTitle = "brand.page_title" + SettingKeyBrandPaySuccess = "brand.pay_success_text" + SettingKeyBrandSupportUrl = "brand.support_url" + SettingKeyRateForcedUsdt = "rate.forced_usdt_rate" + SettingKeyRateAdjustPercent = "rate.adjust_percent" + SettingKeyRateOkxC2cEnabled = "rate.okx_c2c_enabled" + SettingKeyRateApiUrl = "rate.api_url" + + // EPAY route defaults — can be overridden via admin settings. + SettingKeyEpayDefaultToken = "epay.default_token" + SettingKeyEpayDefaultCurrency = "epay.default_currency" + SettingKeyEpayDefaultNetwork = "epay.default_network" +) + +type Setting struct { + Group string `gorm:"column:group;size:32;index:settings_group_index" json:"group" enums:"brand,rate,system" example:"rate"` + Key string `gorm:"column:key;uniqueIndex:settings_key_uindex;size:128" json:"key" example:"rate.forced_usdt_rate"` + Value string `gorm:"column:value;type:text" json:"value" example:"7.2"` + Type string `gorm:"column:type;size:16;default:string" json:"type" enums:"string,int,bool,json" example:"string"` + Description string `gorm:"column:description;size:255" json:"description" example:"强制USDT汇率"` + BaseModel +} + +func (s *Setting) TableName() string { + return "settings" +} diff --git a/src/model/mdb/supported_asset_mdb.go b/src/model/mdb/supported_asset_mdb.go deleted file mode 100644 index 1698a67..0000000 --- a/src/model/mdb/supported_asset_mdb.go +++ /dev/null @@ -1,12 +0,0 @@ -package mdb - -type SupportedAsset struct { - Network string `gorm:"column:network;uniqueIndex:supported_asset_network_token_uindex,priority:1" json:"network"` - Token string `gorm:"column:token;uniqueIndex:supported_asset_network_token_uindex,priority:2" json:"token"` - Status int64 `gorm:"column:status;default:1" json:"status"` - BaseModel -} - -func (s *SupportedAsset) TableName() string { - return "supported_asset" -} diff --git a/src/model/mdb/wallet_address_mdb.go b/src/model/mdb/wallet_address_mdb.go index c9a7dc1..23c2fea 100644 --- a/src/model/mdb/wallet_address_mdb.go +++ b/src/model/mdb/wallet_address_mdb.go @@ -14,10 +14,18 @@ const ( NetworkPlasma = "plasma" ) +const ( + WalletSourceManual = "manual" + WalletSourceImport = "import" +) + type WalletAddress struct { - Network string `gorm:"column:network;uniqueIndex:wallet_address_network_address_uindex" json:"network"` - Address string `gorm:"column:address;uniqueIndex:wallet_address_network_address_uindex" json:"address"` - Status int64 `gorm:"column:status;default:1" json:"status"` + Network string `gorm:"column:network;uniqueIndex:wallet_address_network_address_uindex" json:"network" example:"tron"` + Address string `gorm:"column:address;uniqueIndex:wallet_address_network_address_uindex" json:"address" example:"TTestTronAddress001"` + // 状态 1=启用 2=禁用 + Status int64 `gorm:"column:status;default:1" json:"status" enums:"1,2" example:"1"` + Remark string `gorm:"column:remark;size:255" json:"remark" example:"主钱包"` + Source string `gorm:"column:source;size:16;default:manual" json:"source" enums:"manual,import" example:"manual"` BaseModel } diff --git a/src/model/request/base.go b/src/model/request/base.go index d49c51e..733abb4 100644 --- a/src/model/request/base.go +++ b/src/model/request/base.go @@ -8,8 +8,8 @@ const ( var OrderByFuncList = []string{OrderByFuncDesc, OrderByFuncAsc} type BaseRequest struct { - Page int `json:"page"` // 页数 - PageSize int `json:"page_size"` // 每页条数 - OrderField string `json:"order_field"` // 排序字段 - OrderFunc string `json:"order_func"` // 排序方法 + Page int `json:"page" example:"1"` // 页数 + PageSize int `json:"page_size" example:"20"` // 每页条数 + OrderField string `json:"order_field" example:"created_at"` // 排序字段 + OrderFunc string `json:"order_func" enums:"DESC,ASC" example:"DESC"` // 排序方法 } diff --git a/src/model/request/order_request.go b/src/model/request/order_request.go index b42e38e..37d3766 100644 --- a/src/model/request/order_request.go +++ b/src/model/request/order_request.go @@ -4,16 +4,16 @@ import "github.com/gookit/validate" // CreateTransactionRequest 创建交易请求 type CreateTransactionRequest struct { - OrderId string `json:"order_id" validate:"required|maxLen:32"` - Currency string `json:"currency" validate:"required"` // 法币 如:cny - Token string `json:"token" validate:"required"` // 币种 如:usdt - Network string `json:"network" validate:"required"` // 网络 如:TRON - Amount float64 `json:"amount" validate:"required|isFloat|gt:0.01"` - NotifyUrl string `json:"notify_url" validate:"required"` - Signature string `json:"signature" validate:"required"` - RedirectUrl string `json:"redirect_url"` - Name string `json:"name"` - PaymentType string `json:"payment_type"` + OrderId string `json:"order_id" form:"order_id" validate:"required|maxLen:32" example:"ORD20260416001"` + Currency string `json:"currency" form:"currency" validate:"required" example:"cny"` // 法币 如:cny + Token string `json:"token" form:"token" validate:"required" example:"usdt"` // 币种 如:usdt + Network string `json:"network" form:"network" validate:"required" example:"tron"` // 网络 如:tron + Amount float64 `json:"amount" form:"amount" validate:"required|isFloat|gt:0.01" example:"100.00"` + NotifyUrl string `json:"notify_url" form:"notify_url" validate:"required" example:"https://example.com/notify"` + Signature string `json:"signature" form:"signature" validate:"required" example:"a1b2c3d4e5f6..."` + RedirectUrl string `json:"redirect_url" form:"redirect_url" example:"https://example.com/success"` + Name string `json:"name" form:"name" example:"VIP月卡"` + PaymentType string `json:"payment_type" form:"payment_type" example:"Epay"` } func (r CreateTransactionRequest) Translates() map[string]string { @@ -41,9 +41,9 @@ type OrderProcessingRequest struct { // SwitchNetworkRequest 切换支付网络 type SwitchNetworkRequest struct { - TradeId string `json:"trade_id" validate:"required"` - Token string `json:"token" validate:"required"` - Network string `json:"network" validate:"required"` + TradeId string `json:"trade_id" validate:"required" example:"T2026041612345678"` + Token string `json:"token" validate:"required" example:"USDT"` + Network string `json:"network" validate:"required" example:"ethereum"` } func (r SwitchNetworkRequest) Translates() map[string]string { diff --git a/src/model/response/base.go b/src/model/response/base.go new file mode 100644 index 0000000..9fbdfac --- /dev/null +++ b/src/model/response/base.go @@ -0,0 +1,11 @@ +package response + +// ApiResponse is the standard JSON envelope used by all API endpoints. +// Used for swagger documentation only — the actual response is built +// by util/http.Resp. +type ApiResponse struct { + StatusCode int `json:"status_code" example:"200"` + Message string `json:"message" example:"success"` + Data interface{} `json:"data"` + RequestID string `json:"request_id" example:"req-123456"` +} diff --git a/src/model/response/order_response.go b/src/model/response/order_response.go index 729ab7d..8522eef 100644 --- a/src/model/response/order_response.go +++ b/src/model/response/order_response.go @@ -2,39 +2,41 @@ package response // CreateTransactionResponse 创建订单成功返回 type CreateTransactionResponse struct { - TradeId string `json:"trade_id"` // epusdt订单号 - OrderId string `json:"order_id"` // 客户交易id - Amount float64 `json:"amount"` // 订单金额,保留4位小数 - Currency string `json:"currency"` // 订单货币类型 CNY USD...... - ActualAmount float64 `json:"actual_amount"` // 订单实际需要支付的金额,保留4位小数 - ReceiveAddress string `json:"receive_address"` // 收款钱包地址 - Token string `json:"token"` // 所属币种 TRX USDT...... - ExpirationTime int64 `json:"expiration_time"` // 过期时间 时间戳 - PaymentUrl string `json:"payment_url"` // 收银台地址 + TradeId string `json:"trade_id" example:"T2026041612345678"` // epusdt订单号 + OrderId string `json:"order_id" example:"ORD20260416001"` // 客户交易id + Amount float64 `json:"amount" example:"100.0000"` // 订单金额,保留4位小数 + Currency string `json:"currency" example:"CNY"` // 订单货币类型 CNY USD...... + ActualAmount float64 `json:"actual_amount" example:"14.2857"` // 订单实际需要支付的金额,保留4位小数 + ReceiveAddress string `json:"receive_address" example:"TTestTronAddress001"` // 收款钱包地址 + Token string `json:"token" example:"USDT"` // 所属币种 TRX USDT...... + ExpirationTime int64 `json:"expiration_time" example:"1713264600"` // 过期时间 时间戳 + PaymentUrl string `json:"payment_url" example:"https://pay.example.com/checkout/T2026041612345678"` // 收银台地址 } // OrderNotifyResponse 订单异步回调结构体 type OrderNotifyResponse struct { - TradeId string `json:"trade_id"` // epusdt订单号 - OrderId string `json:"order_id"` // 客户交易id - Amount float64 `json:"amount"` // 订单金额,保留4位小数 - ActualAmount float64 `json:"actual_amount"` // 订单实际需要支付的金额,保留4位小数 - ReceiveAddress string `json:"receive_address"` // 收款钱包地址 - Token string `json:"token"` // 所属币种 TRX USDT...... - BlockTransactionId string `json:"block_transaction_id"` // 区块id - Signature string `json:"signature"` // 签名 - Status int `json:"status"` // 1:等待支付,2:支付成功,3:已过期 + Pid string `json:"pid" example:"1000"` // 签名使用的商户 PID,商户据此查本地 secret 验签 + TradeId string `json:"trade_id" example:"T2026041612345678"` // epusdt订单号 + OrderId string `json:"order_id" example:"ORD20260416001"` // 客户交易id + Amount float64 `json:"amount" example:"100.0000"` // 订单金额,保留4位小数 + ActualAmount float64 `json:"actual_amount" example:"14.2857"` // 订单实际需要支付的金额,保留4位小数 + ReceiveAddress string `json:"receive_address" example:"TTestTronAddress001"` // 收款钱包地址 + Token string `json:"token" example:"USDT"` // 所属币种 TRX USDT...... + BlockTransactionId string `json:"block_transaction_id" example:"0xabc123..."` // 区块id + Signature string `json:"signature" example:"a1b2c3d4e5f6..."` // 签名 MD5(sorted_params + secret_key) + // 订单状态 1=等待支付 2=支付成功 3=已过期 + Status int `json:"status" enums:"1,2,3" example:"2"` } // OrderNotifyResponseEpay epay订单异步回调结构体 type OrderNotifyResponseEpay struct { - PID int `json:"pid"` // 商户ID - TradeNo string `json:"trade_no"` // 平台订单号 - OutTradeNo string `json:"out_trade_no"` // 商户订单号 - Type string `json:"type"` // 订单类型 - Name string `json:"name"` // 商品名称 - Money string `json:"money"` // 订单金额,保留4位小数 - Sign string `json:"sign"` // 签名 - SignType string `json:"sign_type"` // 签名类型 // MD5 - TradeStatus string `json:"trade_status"` // 订单状态 // only has "TRADE_SUCCESS" for now + PID int `json:"pid" example:"1001"` // 商户ID + TradeNo string `json:"trade_no" example:"T2026041612345678"` // 平台订单号 + OutTradeNo string `json:"out_trade_no" example:"ORD20260416001"` // 商户订单号 + Type string `json:"type" example:"usdt"` // 订单类型 + Name string `json:"name" example:"VIP月卡"` // 商品名称 + Money string `json:"money" example:"100.0000"` // 订单金额,保留4位小数 + Sign string `json:"sign" example:"a1b2c3d4..."` // 签名 + SignType string `json:"sign_type" example:"MD5"` // 签名类型 + TradeStatus string `json:"trade_status" example:"TRADE_SUCCESS"` // 订单状态 } diff --git a/src/model/response/pay_response.go b/src/model/response/pay_response.go index 190194e..4432f59 100644 --- a/src/model/response/pay_response.go +++ b/src/model/response/pay_response.go @@ -1,20 +1,21 @@ package response type CheckoutCounterResponse struct { - TradeId string `json:"trade_id"` // epusdt订单号 - Amount float64 `json:"amount"` // 订单金额,保留4位小数 法币金额 - ActualAmount float64 `json:"actual_amount"` // 订单实际需要支付的金额,保留4位小数 加密货币金额 - Token string `json:"token"` // 所属币种 TRX USDT...... - Currency string `json:"currency"` // 法币币种 CNY USD ... - ReceiveAddress string `json:"receive_address"` // 收款钱包地址 - Network string `json:"network"` // 网络 TRON ETH ... - ExpirationTime int64 `json:"expiration_time"` // 过期时间 时间戳 - RedirectUrl string `json:"redirect_url"` - CreatedAt int64 `json:"created_at"` // 订单创建时间 时间戳 - IsSelected bool `json:"is_selected"` + TradeId string `json:"trade_id" example:"T2026041612345678"` // epusdt订单号 + Amount float64 `json:"amount" example:"100.0000"` // 订单金额,保留4位小数 法币金额 + ActualAmount float64 `json:"actual_amount" example:"14.2857"` // 订单实际需要支付的金额,保留4位小数 加密货币金额 + Token string `json:"token" example:"USDT"` // 所属币种 TRX USDT...... + Currency string `json:"currency" example:"CNY"` // 法币币种 CNY USD ... + ReceiveAddress string `json:"receive_address" example:"TTestTronAddress001"` // 收款钱包地址 + Network string `json:"network" example:"tron"` // 网络 TRON ETH ... + ExpirationTime int64 `json:"expiration_time" example:"1713264600"` // 过期时间 时间戳 + RedirectUrl string `json:"redirect_url" example:"https://example.com/success"` + CreatedAt int64 `json:"created_at" example:"1713264000"` // 订单创建时间 时间戳 + IsSelected bool `json:"is_selected" example:"false"` } type CheckStatusResponse struct { - TradeId string `json:"trade_id"` // epusdt订单号 - Status int `json:"status"` + TradeId string `json:"trade_id" example:"T2026041612345678"` // epusdt订单号 + // 订单状态 1=等待支付 2=支付成功 3=已过期 + Status int `json:"status" enums:"1,2,3" example:"1"` } diff --git a/src/model/response/support_response.go b/src/model/response/support_response.go index b78855d..1317aa9 100644 --- a/src/model/response/support_response.go +++ b/src/model/response/support_response.go @@ -1,8 +1,8 @@ package response type NetworkTokenSupport struct { - Network string `json:"network"` - Tokens []string `json:"tokens"` + Network string `json:"network" example:"tron"` + Tokens []string `json:"tokens" example:"USDT,USDC"` } type SupportedAssetsResponse struct { diff --git a/src/model/service/order_service.go b/src/model/service/order_service.go index 27aced1..5e721fb 100644 --- a/src/model/service/order_service.go +++ b/src/model/service/order_service.go @@ -8,15 +8,15 @@ import ( "sync" "time" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/model/dao" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/request" - "github.com/assimon/luuu/model/response" - "github.com/assimon/luuu/util/constant" - "github.com/assimon/luuu/util/log" - "github.com/assimon/luuu/util/math" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/request" + "github.com/GMWalletApp/epusdt/model/response" + "github.com/GMWalletApp/epusdt/util/constant" + "github.com/GMWalletApp/epusdt/util/log" + "github.com/GMWalletApp/epusdt/util/math" "github.com/dromara/carbon/v2" "github.com/shopspring/decimal" ) @@ -33,8 +33,28 @@ var ( gOrderProcessingLock sync.Mutex ) +// apiKeyID safely extracts the primary key from an ApiKey row. +// Returns 0 when apiKey is nil (middleware didn't run — shouldn't happen on authed routes). +func apiKeyID(apiKey *mdb.ApiKey) uint64 { + if apiKey == nil { + return 0 + } + return apiKey.ID +} + +func normalizeOrderAddressByNetwork(network, address string) string { + network = strings.ToLower(strings.TrimSpace(network)) + address = strings.TrimSpace(address) + switch network { + case mdb.NetworkEthereum, mdb.NetworkBsc, mdb.NetworkPolygon, mdb.NetworkPlasma: + return strings.ToLower(address) + default: + return address + } +} + // CreateTransaction creates a new payment order. -func CreateTransaction(req *request.CreateTransactionRequest) (*response.CreateTransactionResponse, error) { +func CreateTransaction(req *request.CreateTransactionRequest, apiKey *mdb.ApiKey) (*response.CreateTransactionResponse, error) { gCreateTransactionLock.Lock() defer gCreateTransactionLock.Unlock() @@ -64,6 +84,9 @@ func CreateTransaction(req *request.CreateTransactionRequest) (*response.CreateT return nil, constant.OrderAlreadyExists } + if !data.IsChainEnabled(network) { + return nil, constant.ChainNotEnabled + } walletAddress, err := data.GetAvailableWalletAddressByNetwork(network) if err != nil { return nil, err @@ -97,6 +120,7 @@ func CreateTransaction(req *request.CreateTransactionRequest) (*response.CreateT RedirectUrl: req.RedirectUrl, Name: req.Name, PaymentType: req.PaymentType, + ApiKeyID: apiKeyID(apiKey), } if err = data.CreateOrderWithTransaction(tx, order); err != nil { tx.Rollback() @@ -161,7 +185,7 @@ func OrderProcessing(req *request.OrderProcessingRequest) error { // Load order to check parent-child relationship order, err := data.GetOrderInfoByTradeId(req.TradeId) if err != nil { - return nil + return fmt.Errorf("load paid order failed, trade_id=%s: %w", req.TradeId, err) } // Parent order paid directly: expire all sub-orders and release their locks @@ -169,7 +193,7 @@ func OrderProcessing(req *request.OrderProcessingRequest) error { subs, subErr := data.GetActiveSubOrders(order.TradeId) if subErr != nil { log.Sugar.Errorf("[order] get sub-orders for parent failed, trade_id=%s, err=%v", order.TradeId, subErr) - return nil + return fmt.Errorf("load sub-orders failed, parent_trade_id=%s: %w", order.TradeId, subErr) } for _, sub := range subs { if err = data.ExpireOrderByTradeId(sub.TradeId); err != nil { @@ -182,22 +206,48 @@ func OrderProcessing(req *request.OrderProcessingRequest) error { return nil } - // Sub-order should not trigger its own callback (notify_url is empty). - // OrderSuccessWithTransaction unconditionally sets callback_confirm=No, - // reset it here to prevent the callback worker from retrying an empty URL. - if err = data.ResetCallbackConfirmOk(order.TradeId); err != nil { - log.Sugar.Warnf("[order] reset sub-order callback_confirm failed, trade_id=%s, err=%v", order.TradeId, err) - } - parent, err := data.GetOrderInfoByTradeId(order.ParentTradeId) if err != nil { log.Sugar.Errorf("[order] load parent order failed, parent_trade_id=%s, err=%v", order.ParentTradeId, err) - return nil + return fmt.Errorf("load parent order failed, parent_trade_id=%s: %w", order.ParentTradeId, err) } + // Snapshot siblings for lock release after DB state transition commits. + siblings, err := data.GetSiblingSubOrders(parent.TradeId, order.TradeId) + if err != nil { + log.Sugar.Errorf("[order] get sibling sub-orders failed, parent_trade_id=%s, err=%v", parent.TradeId, err) + return fmt.Errorf("load sibling sub-orders failed, parent_trade_id=%s: %w", parent.TradeId, err) + } + + finalizeTx := dao.Mdb.Begin() + // Mark parent as paid with sub-order's payment details - if _, err = data.MarkParentOrderSuccess(parent.TradeId, order); err != nil { - log.Sugar.Errorf("[order] mark parent success failed, parent_trade_id=%s, err=%v", parent.TradeId, err) + updatedParent, markErr := data.MarkParentOrderSuccessWithTransaction(finalizeTx, parent.TradeId, order) + if markErr != nil { + finalizeTx.Rollback() + log.Sugar.Errorf("[order] mark parent success failed, parent_trade_id=%s, err=%v", parent.TradeId, markErr) + return fmt.Errorf("mark parent success failed, parent_trade_id=%s: %w", parent.TradeId, markErr) + } + if !updatedParent { + finalizeTx.Rollback() + return fmt.Errorf("parent order not updated, trade_id=%s is not in wait-pay status", parent.TradeId) + } + + if err = data.ExpireSiblingSubOrdersWithTransaction(finalizeTx, parent.TradeId, order.TradeId); err != nil { + finalizeTx.Rollback() + return fmt.Errorf("expire sibling sub-orders failed, parent_trade_id=%s: %w", parent.TradeId, err) + } + + if err = finalizeTx.Commit().Error; err != nil { + finalizeTx.Rollback() + return fmt.Errorf("commit parent finalize tx failed, parent_trade_id=%s: %w", parent.TradeId, err) + } + + // Sub-order should not trigger its own callback (notify_url is empty). + // OrderSuccessWithTransaction unconditionally sets callback_confirm=No, + // reset it only after the parent order is successfully finalized. + if err = data.ResetCallbackConfirmOk(order.TradeId); err != nil { + log.Sugar.Warnf("[order] reset sub-order callback_confirm failed, trade_id=%s, err=%v", order.TradeId, err) } // Release parent's own wallet lock @@ -205,16 +255,8 @@ func OrderProcessing(req *request.OrderProcessingRequest) error { log.Sugar.Warnf("[order] unlock parent transaction failed, parent_trade_id=%s, err=%v", parent.TradeId, err) } - // Expire sibling sub-orders and release their locks - siblings, err := data.GetSiblingSubOrders(parent.TradeId, order.TradeId) - if err != nil { - log.Sugar.Errorf("[order] get sibling sub-orders failed, parent_trade_id=%s, err=%v", parent.TradeId, err) - return nil - } + // Release sibling locks after their status transitions commit. for _, sib := range siblings { - if err = data.ExpireOrderByTradeId(sib.TradeId); err != nil { - log.Sugar.Warnf("[order] expire sibling failed, trade_id=%s, err=%v", sib.TradeId, err) - } if err = data.UnLockTransaction(sib.Network, sib.ReceiveAddress, sib.Token, sib.ActualAmount); err != nil { log.Sugar.Warnf("[order] unlock sibling transaction failed, trade_id=%s, err=%v", sib.TradeId, err) } @@ -230,9 +272,10 @@ func ReserveAvailableWalletAndAmount(tradeID string, network string, token strin tryLockWalletFunc := func(targetAmount float64) (string, error) { for _, address := range walletAddress { - err := data.LockTransaction(network, address.Address, token, tradeID, targetAmount, config.GetOrderExpirationTimeDuration()) + normalizedAddress := normalizeOrderAddressByNetwork(network, address.Address) + err := data.LockTransaction(network, normalizedAddress, token, tradeID, targetAmount, config.GetOrderExpirationTimeDuration()) if err == nil { - return address.Address, nil + return normalizedAddress, nil } if errors.Is(err, data.ErrTransactionLocked) { continue @@ -344,6 +387,9 @@ func SwitchNetwork(req *request.SwitchNetworkRequest) (*response.CheckoutCounter } // 6. Find and lock wallet + if !data.IsChainEnabled(network) { + return nil, constant.ChainNotEnabled + } walletAddress, err := data.GetAvailableWalletAddressByNetwork(network) if err != nil { return nil, err @@ -381,6 +427,7 @@ func SwitchNetwork(req *request.SwitchNetworkRequest) (*response.CheckoutCounter Name: parent.Name, CallBackConfirm: mdb.CallBackConfirmOk, // don't trigger callback on sub-order PaymentType: parent.PaymentType, + ApiKeyID: parent.ApiKeyID, // inherit from parent so resolveOrderApiKey never fails } if err = data.CreateOrderWithTransaction(tx, subOrder); err != nil { tx.Rollback() diff --git a/src/model/service/order_service_test.go b/src/model/service/order_service_test.go index 99d73b3..c1e7086 100644 --- a/src/model/service/order_service_test.go +++ b/src/model/service/order_service_test.go @@ -2,15 +2,21 @@ package service import ( "fmt" + "io" + "net/http" + "strings" "sync" "testing" + "time" - "github.com/assimon/luuu/internal/testutil" - "github.com/assimon/luuu/model/dao" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/request" - "github.com/assimon/luuu/util/constant" + "github.com/GMWalletApp/epusdt/internal/testutil" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/request" + "github.com/GMWalletApp/epusdt/util/constant" + "github.com/GMWalletApp/epusdt/util/http_client" + "github.com/go-resty/resty/v2" ) func newCreateTransactionRequest(orderID string, amount float64) *request.CreateTransactionRequest { @@ -24,6 +30,26 @@ func newCreateTransactionRequest(orderID string, amount float64) *request.Create } } +type roundTripFunc func(*http.Request) (*http.Response, error) + +func (f roundTripFunc) RoundTrip(req *http.Request) (*http.Response, error) { + return f(req) +} + +func installMockHTTPClient(t *testing.T, handler roundTripFunc) { + t.Helper() + + oldFactory := http_client.ClientFactory + http_client.ClientFactory = func() *resty.Client { + client := resty.NewWithClient(&http.Client{Transport: handler}) + client.SetTimeout(10 * time.Second) + return client + } + t.Cleanup(func() { + http_client.ClientFactory = oldFactory + }) +} + func TestCreateTransactionAssignsIncrementedAmountsAndLocks(t *testing.T) { cleanup := testutil.SetupTestDatabases(t) defer cleanup() @@ -32,11 +58,11 @@ func TestCreateTransactionAssignsIncrementedAmountsAndLocks(t *testing.T) { t.Fatalf("add wallet: %v", err) } - resp1, err := CreateTransaction(newCreateTransactionRequest("order_1", 1)) + resp1, err := CreateTransaction(newCreateTransactionRequest("order_1", 1), nil) if err != nil { t.Fatalf("create first transaction: %v", err) } - resp2, err := CreateTransaction(newCreateTransactionRequest("order_2", 1)) + resp2, err := CreateTransaction(newCreateTransactionRequest("order_2", 1), nil) if err != nil { t.Fatalf("create second transaction: %v", err) } @@ -71,6 +97,102 @@ func TestCreateTransactionAssignsIncrementedAmountsAndLocks(t *testing.T) { } } +func TestCreateTransactionUsesRateAPIWhenForcedSettingIsNotPositive(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + installMockHTTPClient(t, func(r *http.Request) (*http.Response, error) { + if r.URL.Path != "/cny.json" { + t.Fatalf("rate api path = %s, want /cny.json", r.URL.Path) + } + return &http.Response{ + StatusCode: http.StatusOK, + Status: "200 OK", + Header: http.Header{"Content-Type": []string{"application/json"}}, + Body: io.NopCloser(strings.NewReader(`{"cny":{"usdt":0.14635}}`)), + Request: r, + }, nil + }) + + if err := data.SetSetting("rate", "rate.forced_usdt_rate", "0", "string"); err != nil { + t.Fatalf("set rate.forced_usdt_rate: %v", err) + } + if err := data.SetSetting("rate", "rate.api_url", "https://rate.example.test", "string"); err != nil { + t.Fatalf("set rate.api_url: %v", err) + } + if _, err := data.AddWalletAddress("wallet_1"); err != nil { + t.Fatalf("add wallet: %v", err) + } + + resp, err := CreateTransaction(newCreateTransactionRequest("order_api_rate_1", 10), nil) + if err != nil { + t.Fatalf("create transaction: %v", err) + } + if got := fmt.Sprintf("%.2f", resp.ActualAmount); got != "1.46" { + t.Fatalf("actual amount = %s, want 1.46", got) + } +} + +func TestCreateTransactionFailsWhenRateAPIUnavailableAndForcedSettingIsNotPositive(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if err := data.SetSetting("rate", "rate.forced_usdt_rate", "0", "string"); err != nil { + t.Fatalf("set rate.forced_usdt_rate: %v", err) + } + if err := data.SetSetting("rate", "rate.api_url", "", "string"); err != nil { + t.Fatalf("clear rate.api_url: %v", err) + } + + _, err := CreateTransaction(newCreateTransactionRequest("order_missing_rate_1", 10), nil) + if err != constant.RateAmountErr { + t.Fatalf("create transaction error = %v, want %v", err, constant.RateAmountErr) + } +} + +func TestCreateTransactionNormalizesEvmReceiveAddressToLowercase(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + mixedAddress := "0xA1B2c3D4e5F60718293aBcDeF001122334455667" + if err := dao.Mdb.Create(&mdb.WalletAddress{ + Network: mdb.NetworkEthereum, + Address: mixedAddress, + Status: mdb.TokenStatusEnable, + }).Error; err != nil { + t.Fatalf("seed mixed-case wallet: %v", err) + } + + req := newCreateTransactionRequest("order_evm_1", 1) + req.Network = mdb.NetworkEthereum + + resp, err := CreateTransaction(req, nil) + if err != nil { + t.Fatalf("create transaction: %v", err) + } + + expectedAddress := strings.ToLower(mixedAddress) + if resp.ReceiveAddress != expectedAddress { + t.Fatalf("receive address = %q, want %q", resp.ReceiveAddress, expectedAddress) + } + + order, err := data.GetOrderInfoByTradeId(resp.TradeId) + if err != nil { + t.Fatalf("load order: %v", err) + } + if order.ReceiveAddress != expectedAddress { + t.Fatalf("stored order address = %q, want %q", order.ReceiveAddress, expectedAddress) + } + + tradeID, err := data.GetTradeIdByWalletAddressAndAmountAndToken(mdb.NetworkEthereum, strings.ToUpper(mixedAddress), resp.Token, resp.ActualAmount) + if err != nil { + t.Fatalf("lookup runtime lock: %v", err) + } + if tradeID != resp.TradeId { + t.Fatalf("runtime lock trade_id = %q, want %q", tradeID, resp.TradeId) + } +} + func TestOrderProcessingMarksPaidAndReleasesLock(t *testing.T) { cleanup := testutil.SetupTestDatabases(t) defer cleanup() @@ -79,7 +201,7 @@ func TestOrderProcessingMarksPaidAndReleasesLock(t *testing.T) { t.Fatalf("add wallet: %v", err) } - resp, err := CreateTransaction(newCreateTransactionRequest("order_1", 1)) + resp, err := CreateTransaction(newCreateTransactionRequest("order_1", 1), nil) if err != nil { t.Fatalf("create transaction: %v", err) } @@ -127,7 +249,7 @@ func TestOrderProcessingRejectsDuplicateBlockForSameOrder(t *testing.T) { t.Fatalf("add wallet: %v", err) } - resp, err := CreateTransaction(newCreateTransactionRequest("order_1", 1)) + resp, err := CreateTransaction(newCreateTransactionRequest("order_1", 1), nil) if err != nil { t.Fatalf("create transaction: %v", err) } @@ -169,7 +291,7 @@ func TestOrderProcessingDoesNotReviveExpiredOrder(t *testing.T) { t.Fatalf("add wallet: %v", err) } - resp, err := CreateTransaction(newCreateTransactionRequest("order_1", 1)) + resp, err := CreateTransaction(newCreateTransactionRequest("order_1", 1), nil) if err != nil { t.Fatalf("create transaction: %v", err) } @@ -215,11 +337,11 @@ func TestOrderProcessingOnlyOneOrderClaimsABlockTransaction(t *testing.T) { t.Fatalf("add wallet: %v", err) } - resp1, err := CreateTransaction(newCreateTransactionRequest("order_1", 1)) + resp1, err := CreateTransaction(newCreateTransactionRequest("order_1", 1), nil) if err != nil { t.Fatalf("create first transaction: %v", err) } - resp2, err := CreateTransaction(newCreateTransactionRequest("order_2", 2)) + resp2, err := CreateTransaction(newCreateTransactionRequest("order_2", 2), nil) if err != nil { t.Fatalf("create second transaction: %v", err) } @@ -303,3 +425,285 @@ func TestOrderProcessingOnlyOneOrderClaimsABlockTransaction(t *testing.T) { t.Fatalf("paid=%d pending=%d, want 1 and 1", paidCount, pendingCount) } } + +func TestOrderProcessingSubOrderReturnsErrorWhenParentNotWaitPay(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if _, err := data.AddWalletAddress("TTestTronAddress001"); err != nil { + t.Fatalf("add tron wallet: %v", err) + } + if _, err := data.AddWalletAddressWithNetwork(mdb.NetworkEthereum, "0xA1B2c3D4e5F60718293aBcDeF001122334455667"); err != nil { + t.Fatalf("add ethereum wallet: %v", err) + } + + parentReq := newCreateTransactionRequest("order_parent_for_sub", 1) + parentReq.Network = mdb.NetworkTron + parentResp, err := CreateTransaction(parentReq, nil) + if err != nil { + t.Fatalf("create parent order: %v", err) + } + + subResp, err := SwitchNetwork(&request.SwitchNetworkRequest{ + TradeId: parentResp.TradeId, + Token: "usdt", + Network: mdb.NetworkEthereum, + }) + if err != nil { + t.Fatalf("switch network create sub-order: %v", err) + } + + if err := dao.Mdb.Model(&mdb.Orders{}). + Where("trade_id = ?", parentResp.TradeId). + Update("status", mdb.StatusExpired).Error; err != nil { + t.Fatalf("force parent expired: %v", err) + } + + err = OrderProcessing(&request.OrderProcessingRequest{ + ReceiveAddress: subResp.ReceiveAddress, + Token: strings.ToUpper(subResp.Token), + Network: strings.ToLower(subResp.Network), + TradeId: subResp.TradeId, + Amount: subResp.ActualAmount, + BlockTransactionId: "block_sub_parent_not_wait", + }) + if err == nil { + t.Fatal("expected error when parent order is not wait-pay") + } +} + +func TestOrderProcessingSubOrderReturnsErrorWhenParentMissing(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if _, err := data.AddWalletAddress("TTestTronAddress001"); err != nil { + t.Fatalf("add tron wallet: %v", err) + } + if _, err := data.AddWalletAddressWithNetwork(mdb.NetworkEthereum, "0xA1B2c3D4e5F60718293aBcDeF001122334455667"); err != nil { + t.Fatalf("add ethereum wallet: %v", err) + } + + parentReq := newCreateTransactionRequest("order_parent_missing", 1) + parentReq.Network = mdb.NetworkTron + parentResp, err := CreateTransaction(parentReq, nil) + if err != nil { + t.Fatalf("create parent order: %v", err) + } + + subResp, err := SwitchNetwork(&request.SwitchNetworkRequest{ + TradeId: parentResp.TradeId, + Token: "usdt", + Network: mdb.NetworkEthereum, + }) + if err != nil { + t.Fatalf("switch network create sub-order: %v", err) + } + + if err := dao.Mdb.Where("trade_id = ?", parentResp.TradeId).Delete(&mdb.Orders{}).Error; err != nil { + t.Fatalf("delete parent order: %v", err) + } + + err = OrderProcessing(&request.OrderProcessingRequest{ + ReceiveAddress: subResp.ReceiveAddress, + Token: strings.ToUpper(subResp.Token), + Network: strings.ToLower(subResp.Network), + TradeId: subResp.TradeId, + Amount: subResp.ActualAmount, + BlockTransactionId: "block_sub_parent_missing", + }) + if err == nil { + t.Fatal("expected error when parent order is missing") + } +} + +// TestOrderProcessingSubOrderPaidParentKeepsOwnFields verifies the new behavior: +// when a sub-order is paid, the parent order is marked as paid but its own +// block_transaction_id, actual_amount, and receive_address are NOT overwritten. +// The sub-order's primary-key ID is recorded in the parent's pay_by_sub_id field. +// Also verifies: parent callback_confirm=No (callback queued), sub-order callback_confirm=Ok. +func TestOrderProcessingSubOrderPaidParentKeepsOwnFields(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if _, err := data.AddWalletAddress("TTestTronAddress001"); err != nil { + t.Fatalf("add tron wallet: %v", err) + } + if _, err := data.AddWalletAddressWithNetwork(mdb.NetworkEthereum, "0xA1B2c3D4e5F60718293aBcDeF001122334455667"); err != nil { + t.Fatalf("add ethereum wallet: %v", err) + } + + parentReq := newCreateTransactionRequest("order_sub_pay_test", 1) + parentReq.Network = mdb.NetworkTron + parentResp, err := CreateTransaction(parentReq, nil) + if err != nil { + t.Fatalf("create parent order: %v", err) + } + + // Snapshot the parent's original fields before any payment. + originalParent, err := data.GetOrderInfoByTradeId(parentResp.TradeId) + if err != nil { + t.Fatalf("load original parent: %v", err) + } + + subResp, err := SwitchNetwork(&request.SwitchNetworkRequest{ + TradeId: parentResp.TradeId, + Token: "usdt", + Network: mdb.NetworkEthereum, + }) + if err != nil { + t.Fatalf("switch network create sub-order: %v", err) + } + + // Load the sub-order to get its DB primary-key ID. + subOrder, err := data.GetOrderInfoByTradeId(subResp.TradeId) + if err != nil { + t.Fatalf("load sub-order: %v", err) + } + + err = OrderProcessing(&request.OrderProcessingRequest{ + ReceiveAddress: subResp.ReceiveAddress, + Token: strings.ToUpper(subResp.Token), + Network: strings.ToLower(subResp.Network), + TradeId: subResp.TradeId, + Amount: subResp.ActualAmount, + BlockTransactionId: "block_sub_paid", + }) + if err != nil { + t.Fatalf("order processing sub-order: %v", err) + } + + // Sub-order must be paid with the block hash and no pending callback. + sub, err := data.GetOrderInfoByTradeId(subResp.TradeId) + if err != nil { + t.Fatalf("reload sub-order: %v", err) + } + if sub.Status != mdb.StatusPaySuccess { + t.Fatalf("sub-order status = %d, want %d", sub.Status, mdb.StatusPaySuccess) + } + if sub.BlockTransactionId != "block_sub_paid" { + t.Fatalf("sub-order block_transaction_id = %q, want %q", sub.BlockTransactionId, "block_sub_paid") + } + if sub.CallBackConfirm != mdb.CallBackConfirmOk { + t.Fatalf("sub-order callback_confirm = %d, want %d (no callback for sub-order)", sub.CallBackConfirm, mdb.CallBackConfirmOk) + } + + // Parent must be paid but its own fields must be unchanged. + parent, err := data.GetOrderInfoByTradeId(parentResp.TradeId) + if err != nil { + t.Fatalf("reload parent order: %v", err) + } + if parent.Status != mdb.StatusPaySuccess { + t.Fatalf("parent status = %d, want %d", parent.Status, mdb.StatusPaySuccess) + } + if parent.BlockTransactionId != "" { + t.Fatalf("parent block_transaction_id = %q, want empty (parent was not directly paid)", parent.BlockTransactionId) + } + if parent.ReceiveAddress != originalParent.ReceiveAddress { + t.Fatalf("parent receive_address changed: got %q, want %q", parent.ReceiveAddress, originalParent.ReceiveAddress) + } + if parent.ActualAmount != originalParent.ActualAmount { + t.Fatalf("parent actual_amount changed: got %v, want %v", parent.ActualAmount, originalParent.ActualAmount) + } + if parent.PayBySubId != subOrder.ID { + t.Fatalf("parent pay_by_sub_id = %d, want %d (sub-order ID)", parent.PayBySubId, subOrder.ID) + } + if parent.CallBackConfirm != mdb.CallBackConfirmNo { + t.Fatalf("parent callback_confirm = %d, want %d (callback must be queued)", parent.CallBackConfirm, mdb.CallBackConfirmNo) + } +} + +// TestOrderProcessingSubOrderExpiresSiblingsAndReleasesLocks verifies that when one +// sub-order is paid all sibling sub-orders are expired and their runtime locks (as +// well as the parent's lock) are released. +func TestOrderProcessingSubOrderExpiresSiblingsAndReleasesLocks(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if _, err := data.AddWalletAddress("TTestTronAddress001"); err != nil { + t.Fatalf("add tron wallet: %v", err) + } + if _, err := data.AddWalletAddressWithNetwork(mdb.NetworkEthereum, "0xA1B2c3D4e5F60718293aBcDeF001122334455667"); err != nil { + t.Fatalf("add ethereum wallet: %v", err) + } + if _, err := data.AddWalletAddressWithNetwork(mdb.NetworkBsc, "0xBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"); err != nil { + t.Fatalf("add bsc wallet: %v", err) + } + + parentReq := newCreateTransactionRequest("order_sib_expiry_test", 1) + parentReq.Network = mdb.NetworkTron + parentResp, err := CreateTransaction(parentReq, nil) + if err != nil { + t.Fatalf("create parent order: %v", err) + } + + // Create two sub-orders on different networks. + subEthResp, err := SwitchNetwork(&request.SwitchNetworkRequest{ + TradeId: parentResp.TradeId, + Token: "usdt", + Network: mdb.NetworkEthereum, + }) + if err != nil { + t.Fatalf("switch to ethereum sub-order: %v", err) + } + + subBscResp, err := SwitchNetwork(&request.SwitchNetworkRequest{ + TradeId: parentResp.TradeId, + Token: "usdt", + Network: mdb.NetworkBsc, + }) + if err != nil { + t.Fatalf("switch to bsc sub-order: %v", err) + } + + // Pay the Ethereum sub-order. + err = OrderProcessing(&request.OrderProcessingRequest{ + ReceiveAddress: subEthResp.ReceiveAddress, + Token: strings.ToUpper(subEthResp.Token), + Network: strings.ToLower(subEthResp.Network), + TradeId: subEthResp.TradeId, + Amount: subEthResp.ActualAmount, + BlockTransactionId: "block_sib_eth", + }) + if err != nil { + t.Fatalf("order processing eth sub-order: %v", err) + } + + // BSC sibling must be expired. + subBsc, err := data.GetOrderInfoByTradeId(subBscResp.TradeId) + if err != nil { + t.Fatalf("reload bsc sub-order: %v", err) + } + if subBsc.Status != mdb.StatusExpired { + t.Fatalf("bsc sibling status = %d, want %d (expired)", subBsc.Status, mdb.StatusExpired) + } + + // Parent runtime lock must be released. + parentLock, err := data.GetTradeIdByWalletAddressAndAmountAndToken( + mdb.NetworkTron, parentResp.ReceiveAddress, parentResp.Token, parentResp.ActualAmount) + if err != nil { + t.Fatalf("check parent runtime lock: %v", err) + } + if parentLock != "" { + t.Fatalf("parent runtime lock still held: trade_id=%s", parentLock) + } + + // BSC sibling runtime lock must be released. + sibLock, err := data.GetTradeIdByWalletAddressAndAmountAndToken( + mdb.NetworkBsc, subBscResp.ReceiveAddress, subBscResp.Token, subBscResp.ActualAmount) + if err != nil { + t.Fatalf("check bsc sibling runtime lock: %v", err) + } + if sibLock != "" { + t.Fatalf("bsc sibling runtime lock still held: trade_id=%s", sibLock) + } + + // Ethereum sub-order runtime lock must also be released. + ethLock, err := data.GetTradeIdByWalletAddressAndAmountAndToken( + mdb.NetworkEthereum, subEthResp.ReceiveAddress, subEthResp.Token, subEthResp.ActualAmount) + if err != nil { + t.Fatalf("check eth sub-order runtime lock: %v", err) + } + if ethLock != "" { + t.Fatalf("eth sub-order runtime lock still held: trade_id=%s", ethLock) + } +} diff --git a/src/model/service/pay_service.go b/src/model/service/pay_service.go index 011707d..1e20e9f 100644 --- a/src/model/service/pay_service.go +++ b/src/model/service/pay_service.go @@ -3,10 +3,10 @@ package service import ( "errors" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/response" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/response" ) var ErrOrder = errors.New("不存在待支付订单或已过期") diff --git a/src/model/service/sol_task.go b/src/model/service/sol_task.go index 06731f9..afad6b7 100644 --- a/src/model/service/sol_task.go +++ b/src/model/service/sol_task.go @@ -10,13 +10,13 @@ import ( "sync" "time" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/request" - "github.com/assimon/luuu/util/constant" - "github.com/assimon/luuu/util/log" - "github.com/assimon/luuu/util/math" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/request" + "github.com/GMWalletApp/epusdt/util/constant" + "github.com/GMWalletApp/epusdt/util/log" + "github.com/GMWalletApp/epusdt/util/math" "github.com/gagliardetto/solana-go" "github.com/go-resty/resty/v2" "github.com/shopspring/decimal" @@ -45,6 +45,33 @@ func SolCallBack(address string, wg *sync.WaitGroup) { } }() + // Load enabled Solana tokens from chain_tokens. The contract_address + // column holds the mint for SPL tokens; a special entry with + // symbol=SOL and empty contract_address enables native SOL payments. + tokens, err := data.ListEnabledChainTokensByNetwork(mdb.NetworkSolana) + if err != nil { + log.Sugar.Errorf("[SOL][%s] load chain_tokens err=%v", address, err) + return + } + if len(tokens) == 0 { + log.Sugar.Debugf("[SOL][%s] no enabled chain_tokens, skipping", address) + return + } + mintTokens := make(map[string]*mdb.ChainToken, len(tokens)) + var nativeSolToken *mdb.ChainToken + for i := range tokens { + sym := strings.ToUpper(strings.TrimSpace(tokens[i].Symbol)) + mint := strings.TrimSpace(tokens[i].ContractAddress) + if sym == "SOL" && mint == "" { + nativeSolToken = &tokens[i] + continue + } + if mint == "" { + continue + } + mintTokens[mint] = &tokens[i] + } + // Clean up old entries from processed cache (older than 1 hour) cleanupCutoff := time.Now().Add(-1 * time.Hour).Unix() gProcessedSignatures.Range(func(key, value interface{}) bool { @@ -56,17 +83,15 @@ func SolCallBack(address string, wg *sync.WaitGroup) { limit := 1000 - // 查询钱包地址 + USDT ATA + USDC ATA 三个地址的签名 + // 查询钱包地址 + 每个已启用 SPL 代币 ATA 的签名 queryAddrs := []string{address} - if usdtAta, err := FindATAAddress(address, USDT_Mint); err == nil { - queryAddrs = append(queryAddrs, usdtAta) - } else { - log.Sugar.Errorf("[SOL][%s] failed to derive USDT ATA: %v", address, err) - } - if usdcAta, err := FindATAAddress(address, USDC_Mint); err == nil { - queryAddrs = append(queryAddrs, usdcAta) - } else { - log.Sugar.Errorf("[SOL][%s] failed to derive USDC ATA: %v", address, err) + for mint := range mintTokens { + ata, err := FindATAAddress(address, mint) + if err != nil { + log.Sugar.Errorf("[SOL][%s] failed to derive ATA for mint %s: %v", address, mint, err) + continue + } + queryAddrs = append(queryAddrs, ata) } // 拉取签名并去重 @@ -177,7 +202,7 @@ func SolCallBack(address string, wg *sync.WaitGroup) { continue } - token, amount := getTokenTypeAndAmount(transferInfo) + token, amount := resolveSolTokenAndAmount(transferInfo, mintTokens, nativeSolToken) if token == "" || amount <= 0 { continue } @@ -256,6 +281,21 @@ type solSignatureResult struct { BlockTime *int64 `json:"blockTime"` } +func resolveSolanaRpcURL() (string, error) { + node, err := data.SelectRpcNode(mdb.NetworkSolana, mdb.RpcNodeTypeHttp) + if err != nil { + return "", err + } + if node == nil || node.ID == 0 { + return "", fmt.Errorf("no enabled %s %s RPC node configured in rpc_nodes", mdb.NetworkSolana, mdb.RpcNodeTypeHttp) + } + rpcURL := strings.TrimSpace(node.Url) + if rpcURL == "" { + return "", fmt.Errorf("rpc_nodes id=%d has empty url", node.ID) + } + return rpcURL, nil +} + // SolRetryClient 发送 Solana JSON-RPC 请求,自动重试 func SolRetryClient(method string, params []interface{}) ([]byte, error) { client := resty.New() @@ -272,7 +312,10 @@ func SolRetryClient(method string, params []interface{}) ([]byte, error) { return false }) - rpcUrl := config.GetSolanaRpcUrl() + rpcUrl, err := resolveSolanaRpcURL() + if err != nil { + return nil, err + } resp, err := client.R(). SetHeader("Content-Type", "application/json"). @@ -363,35 +406,42 @@ func isTransferToAddress(transfer *TransferInfo, targetAddress string) bool { return MatchAtaAddress(targetAddress, transfer.Mint, transfer.Destination) } -// getTokenTypeAndAmount 根据 mint 识别代币类型并计算可读金额 -func getTokenTypeAndAmount(transfer *TransferInfo) (string, float64) { +// resolveSolTokenAndAmount identifies the token from a transfer using +// the admin-configured chain_tokens list. mintTokens maps SPL mint +// addresses to their ChainToken config; nativeSolToken is non-nil when a +// native SOL entry exists in chain_tokens. Returns ("", 0) for +// transfers whose mint is not configured or below min_amount. +func resolveSolTokenAndAmount(transfer *TransferInfo, mintTokens map[string]*mdb.ChainToken, nativeSolToken *mdb.ChainToken) (string, float64) { mint := transfer.Mint // Native SOL if mint == "SOL" { - return "SOL", transfer.Amount + if nativeSolToken == nil { + return "", 0 + } + amount := transfer.Amount + if nativeSolToken.MinAmount > 0 && amount < nativeSolToken.MinAmount { + return "", 0 + } + return strings.ToUpper(strings.TrimSpace(nativeSolToken.Symbol)), amount } - // SPL Tokens - switch mint { - case USDT_Mint: - decimals := USDT_Decimals - if transfer.Decimals != nil { - decimals = int(*transfer.Decimals) - } - return "USDT", ADJustAmount(transfer.RawAmount, decimals) - - case USDC_Mint: - decimals := USDC_Decimals - if transfer.Decimals != nil { - decimals = int(*transfer.Decimals) - } - return "USDC", ADJustAmount(transfer.RawAmount, decimals) - - default: - // Unsupported token + cfg, ok := mintTokens[mint] + if !ok || cfg == nil { return "", 0 } + decimals := cfg.Decimals + if transfer.Decimals != nil { + decimals = int(*transfer.Decimals) + } + if decimals <= 0 { + decimals = 6 + } + amount := ADJustAmount(transfer.RawAmount, decimals) + if cfg.MinAmount > 0 && amount < cfg.MinAmount { + return "", 0 + } + return strings.ToUpper(strings.TrimSpace(cfg.Symbol)), amount } const ( @@ -437,7 +487,7 @@ func ADJustAmount(amount uint64, decimals int) float64 { func MatchUsdtAtaAddress(address string, ataTo string) bool { ata, err := FindATAAddress(address, USDT_Mint) if err != nil { - fmt.Printf("FindATAAddress failed: %v\n", err) + log.Sugar.Errorf("FindATAAddress failed: %v", err) return false } @@ -447,7 +497,7 @@ func MatchUsdtAtaAddress(address string, ataTo string) bool { func MatchUsdcAtaAddress(address string, ataTo string) bool { ata, err := FindATAAddress(address, USDC_Mint) if err != nil { - fmt.Printf("FindATAAddress failed: %v\n", err) + log.Sugar.Errorf("FindATAAddress failed: %v", err) return false } @@ -457,7 +507,7 @@ func MatchUsdcAtaAddress(address string, ataTo string) bool { func MatchAtaAddress(address string, mint string, ataTo string) bool { ata, err := FindATAAddress(address, mint) if err != nil { - fmt.Printf("FindATAAddress failed: %v\n", err) + log.Sugar.Errorf("FindATAAddress failed: %v", err) return false } diff --git a/src/model/service/sol_task_test.go b/src/model/service/sol_task_test.go index 924a2a6..61c19fe 100644 --- a/src/model/service/sol_task_test.go +++ b/src/model/service/sol_task_test.go @@ -2,13 +2,59 @@ package service import ( "encoding/json" - "fmt" + "os" "testing" + "github.com/GMWalletApp/epusdt/internal/testutil" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" "github.com/tidwall/gjson" ) +func setupSolanaRPCNode(t *testing.T, url string) func() { + t.Helper() + + cleanup := testutil.SetupTestDatabases(t) + node := &mdb.RpcNode{ + Network: mdb.NetworkSolana, + Url: url, + Type: mdb.RpcNodeTypeHttp, + Weight: 1, + Enabled: true, + Status: mdb.RpcNodeStatusOk, + } + if err := dao.Mdb.Create(node).Error; err != nil { + cleanup() + t.Fatalf("seed solana rpc_node: %v", err) + } + return cleanup +} + +func TestResolveSolanaRpcURLRequiresRpcNode(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if got, err := resolveSolanaRpcURL(); err == nil { + t.Fatalf("resolveSolanaRpcURL() = %q, nil; want error", got) + } +} + +func TestResolveSolanaRpcURLWithRow(t *testing.T) { + cleanup := setupSolanaRPCNode(t, " https://solana.example.com ") + defer cleanup() + + got, err := resolveSolanaRpcURL() + if err != nil { + t.Fatalf("resolveSolanaRpcURL(): %v", err) + } + if got != "https://solana.example.com" { + t.Fatalf("resolveSolanaRpcURL() = %q, want https://solana.example.com", got) + } +} + func TestSolClientHealthy(t *testing.T) { + requireSolanaIntegration(t) + bodyData, err := SolRetryClient("getHealth", nil) if err != nil { t.Fatalf("SolRetryClient failed: %v", err) @@ -33,6 +79,8 @@ func TestSolClientHealthy(t *testing.T) { } func TestSolClientGetSignaturesForAddress(t *testing.T) { + requireSolanaIntegration(t) + // Example wallet address (replace with actual test address) address := "2uFTf9TZ8gd7Kg6hkb79TxfaeNpaAgpJ8uVHguv2Yweu" @@ -57,6 +105,8 @@ func TestSolClientGetSignaturesForAddress(t *testing.T) { } func TestSolClientGetTransaction(t *testing.T) { + requireSolanaIntegration(t) + // Example transaction signature (replace with actual test signature) sig := "2aEoNykk4ZJ27C3y7EDJiQUc7GFnnsMe7ofFzB73swGL8kTxSBFCnwzWw3jzr3BND7k8hx15fZHUUAbG1XemNFe5" @@ -64,7 +114,6 @@ func TestSolClientGetTransaction(t *testing.T) { if err != nil { t.Fatalf("SolRetryClient failed: %v", err) } - fmt.Printf("%v\n", string(txData)) var result map[string]interface{} err = json.Unmarshal(txData, &result) @@ -80,6 +129,15 @@ func TestSolClientGetTransaction(t *testing.T) { t.Logf("Transaction Info for signature %s: %v", sig, txInfo) } +func requireSolanaIntegration(t *testing.T) { + t.Helper() + if testing.Short() || os.Getenv("RUN_SOLANA_INTEGRATION_TESTS") == "" { + t.Skip("set RUN_SOLANA_INTEGRATION_TESTS=1 to run Solana public RPC integration tests") + } + cleanup := setupSolanaRPCNode(t, "https://api.mainnet-beta.solana.com") + t.Cleanup(cleanup) +} + func TestFindATAAddress(t *testing.T) { tests := []struct { name string @@ -219,9 +277,7 @@ func TestAdjustAmount(t *testing.T) { } func TestParseTransferInfoFromInstruction_SplTransfer(t *testing.T) { - if testing.Short() { - t.Skip("Skipping integration test") - } + requireSolanaIntegration(t) // SPL Token "transfer" (no mint in instruction, must look up from postTokenBalances) sig := "3tZTwLrvmiZ59h4UzyMHPd7DPux7t9eXZgkUvEfquaoSuERrPSRNzWuSHKQM2fbiCWFDGNqoLpu2kLZnfoegVpqN" @@ -261,9 +317,7 @@ func TestParseTransferInfoFromInstruction_SplTransfer(t *testing.T) { } func TestParseTransferInfoFromInstruction_TransferChecked(t *testing.T) { - if testing.Short() { - t.Skip("Skipping integration test") - } + requireSolanaIntegration(t) // SPL Token "transferChecked" (has mint and tokenAmount in instruction) sig := "2aEoNykk4ZJ27C3y7EDJiQUc7GFnnsMe7ofFzB73swGL8kTxSBFCnwzWw3jzr3BND7k8hx15fZHUUAbG1XemNFe5" @@ -306,9 +360,7 @@ func TestParseTransferInfoFromInstruction_TransferChecked(t *testing.T) { } func TestParseTransferInfoFromInstruction_SystemTransfer(t *testing.T) { - if testing.Short() { - t.Skip("Skipping integration test") - } + requireSolanaIntegration(t) // System program SOL transfer sig := "5pNMonUBvLVpxXTmyd5CGVBs49W6781g2ACnrCXhbmtz58KENYA7HSqu6hQkQweg3qQboRd8WAscphNAtiq9UtZZ" diff --git a/src/model/service/task_service.go b/src/model/service/task_service.go index 833e928..3b4f8a4 100644 --- a/src/model/service/task_service.go +++ b/src/model/service/task_service.go @@ -3,20 +3,36 @@ package service import ( "errors" "fmt" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/request" - "github.com/assimon/luuu/telegram" - "github.com/assimon/luuu/util/constant" - "github.com/assimon/luuu/util/log" - "github.com/assimon/luuu/util/math" + "math/big" + "strings" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/request" + "github.com/GMWalletApp/epusdt/notify" + "github.com/GMWalletApp/epusdt/util/constant" + "github.com/GMWalletApp/epusdt/util/log" + "github.com/GMWalletApp/epusdt/util/math" "github.com/dromara/carbon/v2" "github.com/ethereum/go-ethereum/common" "github.com/shopspring/decimal" - "math/big" - "strings" ) +func resolveTronNode() (string, string, error) { + node, err := data.SelectRpcNode(mdb.NetworkTron, mdb.RpcNodeTypeHttp) + if err != nil { + return "", "", err + } + if node == nil || node.ID == 0 { + return "", "", fmt.Errorf("no enabled %s %s RPC node configured in rpc_nodes", mdb.NetworkTron, mdb.RpcNodeTypeHttp) + } + rpcURL := strings.TrimRight(strings.TrimSpace(node.Url), "/") + if rpcURL == "" { + return "", "", fmt.Errorf("rpc_nodes id=%d has empty url", node.ID) + } + return rpcURL, node.ApiKey, nil +} + func TryProcessTronTRC20Transfer(toAddr string, rawValue *big.Int, txHash string, blockTsMs int64) { defer func() { if err := recover(); err != nil { @@ -277,7 +293,7 @@ func sendPaymentNotification(order *mdb.Orders) { order.CreatedAt.ToDateTimeString(), carbon.Now().ToDateTimeString(), ) - telegram.SendToBot(msg) + notify.Dispatch(mdb.NotifyEventPaySuccess, msg) } func networkDisplay(n string) string { diff --git a/src/model/service/task_tron_test.go b/src/model/service/task_tron_test.go new file mode 100644 index 0000000..b5dc7a2 --- /dev/null +++ b/src/model/service/task_tron_test.go @@ -0,0 +1,79 @@ +package service + +import ( + "testing" + + "github.com/GMWalletApp/epusdt/internal/testutil" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" +) + +// TestResolveTronNode_NoRow verifies that resolveTronNode requires an enabled +// TRON row from rpc_nodes. +func TestResolveTronNode_NoRow(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if gotURL, gotKey, err := resolveTronNode(); err == nil { + t.Fatalf("resolveTronNode() = (%q, %q, nil), want error", gotURL, gotKey) + } +} + +// TestResolveTronNode_WithRow verifies that resolveTronNode uses the DB row +// when an enabled TRON HTTP node is present. +func TestResolveTronNode_WithRow(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + // Insert an enabled TRON http node. + node := &mdb.RpcNode{ + Network: mdb.NetworkTron, + Url: "https://custom-tron.example.com", + Type: mdb.RpcNodeTypeHttp, + ApiKey: "db-api-key", + Weight: 1, + Enabled: true, + Status: mdb.RpcNodeStatusOk, + } + if err := dao.Mdb.Create(node).Error; err != nil { + t.Fatalf("seed rpc_node: %v", err) + } + + gotURL, gotKey, err := resolveTronNode() + if err != nil { + t.Fatalf("resolveTronNode(): %v", err) + } + if gotURL != "https://custom-tron.example.com" { + t.Errorf("url = %q, want https://custom-tron.example.com", gotURL) + } + if gotKey != "db-api-key" { + t.Errorf("apiKey = %q, want \"db-api-key\"", gotKey) + } +} + +// TestResolveTronNode_DisabledRow verifies that a disabled row is ignored. +func TestResolveTronNode_DisabledRow(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + node := &mdb.RpcNode{ + Network: mdb.NetworkTron, + Url: "https://disabled-tron.example.com", + Type: mdb.RpcNodeTypeHttp, + ApiKey: "disabled-key", + Weight: 1, + Enabled: true, // start enabled, then disable below + Status: mdb.RpcNodeStatusOk, + } + if err := dao.Mdb.Create(node).Error; err != nil { + t.Fatalf("seed rpc_node: %v", err) + } + // Explicitly disable — GORM does not save bool zero-value on Create. + if err := dao.Mdb.Model(node).Update("enabled", false).Error; err != nil { + t.Fatalf("disable rpc_node: %v", err) + } + + if gotURL, gotKey, err := resolveTronNode(); err == nil { + t.Fatalf("resolveTronNode() = (%q, %q, nil), want error", gotURL, gotKey) + } +} diff --git a/src/mq/queue.go b/src/mq/queue.go index 8d350e5..275711d 100644 --- a/src/mq/queue.go +++ b/src/mq/queue.go @@ -3,7 +3,7 @@ package mq import ( "sync" - "github.com/assimon/luuu/config" + "github.com/GMWalletApp/epusdt/config" ) var ( diff --git a/src/mq/worker.go b/src/mq/worker.go index 3797c92..dfcb829 100644 --- a/src/mq/worker.go +++ b/src/mq/worker.go @@ -3,22 +3,44 @@ package mq import ( "errors" "fmt" - "io" "net/http" - "net/url" + "strconv" "strings" "time" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/model/dao" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/response" - "github.com/assimon/luuu/util/http_client" - "github.com/assimon/luuu/util/log" - "github.com/assimon/luuu/util/sign" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/response" + "github.com/GMWalletApp/epusdt/util/http_client" + "github.com/GMWalletApp/epusdt/util/log" + "github.com/GMWalletApp/epusdt/util/sign" ) +// resolveOrderApiKey returns the api_keys row that signed the order. +// Every order must carry an ApiKeyID (the default key is always seeded +// at bootstrap, and the middleware/EPAY inline flow always stamps it). +// If the row is missing or disabled, we return an error — using any +// other secret would produce a signature the merchant can't verify. +// The admin can resend the callback after fixing the key. +func resolveOrderApiKey(order *mdb.Orders) (*mdb.ApiKey, error) { + if order.ApiKeyID == 0 { + return nil, fmt.Errorf("order trade_id=%s has no api_key_id", order.TradeId) + } + row, err := data.GetApiKeyByID(order.ApiKeyID) + if err != nil { + return nil, fmt.Errorf("lookup api_key_id=%d: %w", order.ApiKeyID, err) + } + if row.ID == 0 { + return nil, fmt.Errorf("api_key_id=%d not found (deleted?)", order.ApiKeyID) + } + if row.Status != mdb.ApiKeyStatusEnable { + return nil, fmt.Errorf("api_key_id=%d is disabled", order.ApiKeyID) + } + return row, nil +} + const batchSize = 100 const sqliteBusyRetryAttempts = 3 @@ -165,56 +187,62 @@ func processCallback(tradeID string) { } func sendOrderCallback(order *mdb.Orders) error { + apiKeyRow, err := resolveOrderApiKey(order) + if err != nil || apiKeyRow == nil || apiKeyRow.ID == 0 { + return errors.New("no api key row available for callback") + } switch order.PaymentType { case mdb.PaymentTypeEpay: - // 构造 EPay 标准回调参数 + // EPAY uses pid (integer) and secret_key as "key". + pidInt, convErr := strconv.Atoi(apiKeyRow.Pid) + if convErr != nil { + return fmt.Errorf("epay pid not numeric: %s", apiKeyRow.Pid) + } notifyData := response.OrderNotifyResponseEpay{ - PID: config.GetEpayPid(), - TradeNo: order.TradeId, // epusdt 订单号作为 EPay 平台订单号 - OutTradeNo: order.OrderId, // 注意:EPay 回调要求商户订单号使用 out_trade_no 参数 - + PID: pidInt, + TradeNo: order.TradeId, + OutTradeNo: order.OrderId, Type: "alipay", Name: order.Name, Money: fmt.Sprintf("%.4f", order.Amount), TradeStatus: "TRADE_SUCCESS", } - signstr2, err := sign.Get(notifyData, config.GetEpayKey()) + signstr2, err := sign.Get(notifyData, apiKeyRow.SecretKey) if err != nil { return err } - // 使用 form-encoded POST(EPay 标准协议格式) - formData := url.Values{ - "pid": {fmt.Sprintf("%d", notifyData.PID)}, - "trade_no": {notifyData.TradeNo}, - "out_trade_no": {notifyData.OutTradeNo}, - "type": {notifyData.Type}, - "name": {notifyData.Name}, - "money": {notifyData.Money}, - "trade_status": {notifyData.TradeStatus}, - "sign": {signstr2}, - "sign_type": {"MD5"}, + formData := map[string]string{ + "pid": fmt.Sprintf("%d", notifyData.PID), + "trade_no": notifyData.TradeNo, + "out_trade_no": notifyData.OutTradeNo, + "type": notifyData.Type, + "name": notifyData.Name, + "money": notifyData.Money, + "trade_status": notifyData.TradeStatus, + "sign": signstr2, + "sign_type": "MD5", } - resp, err := http.PostForm(order.NotifyUrl, formData) + epayResp, err := http_client.GetHttpClient().R().SetQueryParams(formData).Get(order.NotifyUrl) if err != nil { return err } - defer resp.Body.Close() - - responseBody, err := io.ReadAll(resp.Body) - if err != nil { - return err + log.Sugar.Infof("[mq] epay notify_url response status: %d, body: %s", epayResp.StatusCode(), string(epayResp.Body())) + if epayResp.StatusCode() != http.StatusOK { + return errors.New(epayResp.Status()) + } + if !isCallbackAck(epayResp.Body()) { + return errors.New("not ok") } - - fmt.Printf("notify_url response status: %d, body: %s\n", resp.StatusCode, string(responseBody)) default: client := http_client.GetHttpClient() orderResp := response.OrderNotifyResponse{ + Pid: apiKeyRow.Pid, TradeId: order.TradeId, OrderId: order.OrderId, Amount: order.Amount, @@ -224,7 +252,7 @@ func sendOrderCallback(order *mdb.Orders) error { BlockTransactionId: order.BlockTransactionId, Status: mdb.StatusPaySuccess, } - signature, err := sign.Get(orderResp, config.GetApiAuthToken()) + signature, err := sign.Get(orderResp, apiKeyRow.SecretKey) if err != nil { return err } @@ -240,7 +268,7 @@ func sendOrderCallback(order *mdb.Orders) error { if resp.StatusCode() != http.StatusOK { return errors.New(resp.Status()) } - if string(resp.Body()) != "ok" { + if !isCallbackAck(resp.Body()) { return errors.New("not ok") } } @@ -248,6 +276,11 @@ func sendOrderCallback(order *mdb.Orders) error { return nil } +func isCallbackAck(body []byte) bool { + ack := strings.ToLower(strings.TrimSpace(string(body))) + return ack == "ok" || ack == "success" +} + func cleanupExpiredTransactionLocks() { if err := data.CleanupExpiredTransactionLocks(); err != nil { log.Sugar.Errorf("[mq] cleanup expired transaction locks failed: %v", err) diff --git a/src/mq/worker_test.go b/src/mq/worker_test.go index e3813c9..4ed9549 100644 --- a/src/mq/worker_test.go +++ b/src/mq/worker_test.go @@ -1,6 +1,7 @@ package mq import ( + "encoding/json" "io" "net/http" "net/http/httptest" @@ -9,10 +10,11 @@ import ( "testing" "time" - "github.com/assimon/luuu/internal/testutil" - "github.com/assimon/luuu/model/dao" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" + "github.com/GMWalletApp/epusdt/internal/testutil" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/util/sign" ) func TestProcessExpiredOrdersExpiresWaitingOrdersAndReleasesLocks(t *testing.T) { @@ -158,6 +160,7 @@ func TestDispatchPendingCallbacksHonorsBackoffAndPersistsSuccess(t *testing.T) { BlockTransactionId: "block_callback", CallbackNum: 1, CallBackConfirm: mdb.CallBackConfirmNo, + ApiKeyID: 1, // seeded by testutil.SetupTestDatabases } if err := dao.Mdb.Create(order).Error; err != nil { t.Fatalf("create callback order: %v", err) @@ -218,6 +221,7 @@ func TestDispatchPendingCallbacksResumesRetryAfterRestart(t *testing.T) { BlockTransactionId: "block_callback_restart", CallbackNum: 0, CallBackConfirm: mdb.CallBackConfirmNo, + ApiKeyID: 1, // seeded by testutil.SetupTestDatabases } if err := dao.Mdb.Create(order).Error; err != nil { t.Fatalf("create callback order: %v", err) @@ -259,6 +263,403 @@ func TestDispatchPendingCallbacksResumesRetryAfterRestart(t *testing.T) { } } +func TestDispatchPendingCallbacksEpayRequiresAck(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + callbackLimiter = make(chan struct{}, 1) + callbackInflight = sync.Map{} + + epayKey, err := data.GetEnabledApiKey("1001") + if err != nil || epayKey == nil || epayKey.ID == 0 { + t.Fatalf("load epay key: %v", err) + } + + var requestCount int32 + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + atomic.AddInt32(&requestCount, 1) + http.Error(w, "fail", http.StatusInternalServerError) + })) + defer server.Close() + + order := &mdb.Orders{ + TradeId: "trade_callback_epay_fail", + OrderId: "order_callback_epay_fail", + Amount: 1, + Currency: "CNY", + ActualAmount: 1, + ReceiveAddress: "wallet_epay_fail", + Token: "USDT", + Status: mdb.StatusPaySuccess, + NotifyUrl: server.URL, + BlockTransactionId: "block_callback_epay_fail", + CallbackNum: 0, + CallBackConfirm: mdb.CallBackConfirmNo, + PaymentType: mdb.PaymentTypeEpay, + ApiKeyID: epayKey.ID, + } + if err := dao.Mdb.Create(order).Error; err != nil { + t.Fatalf("create callback order: %v", err) + } + + dispatchPendingCallbacks() + + waitFor(t, 3*time.Second, func() bool { + current, innerErr := data.GetOrderInfoByTradeId(order.TradeId) + if innerErr != nil || current.ID <= 0 { + return false + } + return current.CallBackConfirm == mdb.CallBackConfirmNo && current.CallbackNum == 1 + }) + + if got := atomic.LoadInt32(&requestCount); got != 1 { + t.Fatalf("callback request count = %d, want 1", got) + } +} + +func TestDispatchPendingCallbacksEpayAcceptsTrimmedOk(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + callbackLimiter = make(chan struct{}, 1) + callbackInflight = sync.Map{} + + epayKey, err := data.GetEnabledApiKey("1001") + if err != nil || epayKey == nil || epayKey.ID == 0 { + t.Fatalf("load epay key: %v", err) + } + + var requestCount int32 + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + atomic.AddInt32(&requestCount, 1) + _, _ = io.WriteString(w, " ok\n") + })) + defer server.Close() + + order := &mdb.Orders{ + TradeId: "trade_callback_epay_ok", + OrderId: "order_callback_epay_ok", + Amount: 1, + Currency: "CNY", + ActualAmount: 1, + ReceiveAddress: "wallet_epay_ok", + Token: "USDT", + Status: mdb.StatusPaySuccess, + NotifyUrl: server.URL, + BlockTransactionId: "block_callback_epay_ok", + CallbackNum: 0, + CallBackConfirm: mdb.CallBackConfirmNo, + PaymentType: mdb.PaymentTypeEpay, + ApiKeyID: epayKey.ID, + } + if err := dao.Mdb.Create(order).Error; err != nil { + t.Fatalf("create callback order: %v", err) + } + + dispatchPendingCallbacks() + + waitFor(t, 3*time.Second, func() bool { + current, innerErr := data.GetOrderInfoByTradeId(order.TradeId) + if innerErr != nil || current.ID <= 0 { + return false + } + return current.CallBackConfirm == mdb.CallBackConfirmOk && current.CallbackNum == 1 + }) + + if got := atomic.LoadInt32(&requestCount); got != 1 { + t.Fatalf("callback request count = %d, want 1", got) + } +} + +// Orders must always carry an ApiKeyID (the default key is seeded at +// bootstrap and the signing middleware / EPAY inline flow always +// stamps it). If ApiKeyID is 0, resolveOrderApiKey returns an error — +// the callback won't sign with a guess. +func TestResolveOrderApiKeyRejectsZeroApiKeyID(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + order := &mdb.Orders{ + TradeId: "no-api-key-id", + ApiKeyID: 0, + } + if _, err := resolveOrderApiKey(order); err == nil { + t.Fatal("expected error for ApiKeyID=0") + } +} + +// Happy path: when ApiKeyID points at an enabled row, resolveOrderApiKey +// returns it. +func TestResolveOrderApiKeyReturnsEnabledRow(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + row := &mdb.ApiKey{ + Name: "target", + Pid: "target-key", + SecretKey: "target-secret", + Status: mdb.ApiKeyStatusEnable, + } + if err := dao.Mdb.Create(row).Error; err != nil { + t.Fatalf("create api key: %v", err) + } + order := &mdb.Orders{ + TradeId: "happy-path", + ApiKeyID: row.ID, + } + got, err := resolveOrderApiKey(order) + if err != nil { + t.Fatalf("resolve: %v", err) + } + if got == nil || got.ID != row.ID { + t.Fatalf("resolved row = %+v, want id=%d", got, row.ID) + } +} + +func TestSendOrderCallbackGmpayUsesApiKeySecretByPid(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + key := &mdb.ApiKey{ + Name: "gmpay-key", + Pid: "9001", + SecretKey: "gmpay-secret-9001", + Status: mdb.ApiKeyStatusEnable, + } + if err := dao.Mdb.Create(key).Error; err != nil { + t.Fatalf("create gmpay api key: %v", err) + } + + warningKey := &mdb.ApiKey{ + Name: "wrong-key", + Pid: "9002", + SecretKey: "wrong-secret-9002", + Status: mdb.ApiKeyStatusEnable, + } + if err := dao.Mdb.Create(warningKey).Error; err != nil { + t.Fatalf("create wrong api key: %v", err) + } + + var received map[string]interface{} + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + defer r.Body.Close() + body, _ := io.ReadAll(r.Body) + _ = json.Unmarshal(body, &received) + _, _ = io.WriteString(w, "ok") + })) + defer server.Close() + + order := &mdb.Orders{ + TradeId: "trade_gmpay_sign", + OrderId: "order_gmpay_sign", + Amount: 1, + Currency: "CNY", + ActualAmount: 1, + ReceiveAddress: "wallet_gmpay", + Token: "USDT", + Status: mdb.StatusPaySuccess, + NotifyUrl: server.URL, + BlockTransactionId: "block_gmpay_sign", + ApiKeyID: key.ID, + } + + if err := sendOrderCallback(order); err != nil { + t.Fatalf("send callback: %v", err) + } + + if received == nil { + t.Fatal("expected callback payload") + } + if gotPid, _ := received["pid"].(string); gotPid != key.Pid { + t.Fatalf("payload pid = %q, want %q", gotPid, key.Pid) + } + + recvSig, _ := received["signature"].(string) + if recvSig == "" { + t.Fatal("payload signature is empty") + } + delete(received, "signature") + + calcSig, err := sign.Get(received, key.SecretKey) + if err != nil { + t.Fatalf("calc signature with target secret: %v", err) + } + if recvSig != calcSig { + t.Fatalf("signature mismatch: got %q want %q", recvSig, calcSig) + } + + wrongSig, err := sign.Get(received, warningKey.SecretKey) + if err != nil { + t.Fatalf("calc signature with wrong secret: %v", err) + } + if recvSig == wrongSig { + t.Fatal("signature should not match wrong api key secret") + } +} + +func TestSendOrderCallbackEpayUsesApiKeySecretByPid(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + key := &mdb.ApiKey{ + Name: "epay-key", + Pid: "9101", + SecretKey: "epay-secret-9101", + Status: mdb.ApiKeyStatusEnable, + } + if err := dao.Mdb.Create(key).Error; err != nil { + t.Fatalf("create epay api key: %v", err) + } + + warningKey := &mdb.ApiKey{ + Name: "wrong-epay-key", + Pid: "9102", + SecretKey: "wrong-epay-secret-9102", + Status: mdb.ApiKeyStatusEnable, + } + if err := dao.Mdb.Create(warningKey).Error; err != nil { + t.Fatalf("create wrong epay api key: %v", err) + } + + formPayload := map[string]string{} + callbackMethod := "" + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + callbackMethod = r.Method + if err := r.ParseForm(); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + for k, v := range r.Form { + if len(v) > 0 { + formPayload[k] = v[0] + } + } + _, _ = io.WriteString(w, "ok") + })) + defer server.Close() + + order := &mdb.Orders{ + TradeId: "trade_epay_sign", + OrderId: "order_epay_sign", + Amount: 1, + Currency: "CNY", + ActualAmount: 1, + ReceiveAddress: "wallet_epay", + Token: "USDT", + Name: "VIP", + Status: mdb.StatusPaySuccess, + NotifyUrl: server.URL, + BlockTransactionId: "block_epay_sign", + PaymentType: mdb.PaymentTypeEpay, + ApiKeyID: key.ID, + } + + if err := sendOrderCallback(order); err != nil { + t.Fatalf("send epay callback: %v", err) + } + + if callbackMethod != http.MethodGet { + t.Fatalf("callback method = %s, want %s", callbackMethod, http.MethodGet) + } + if formPayload["sign_type"] != "MD5" { + t.Fatalf("sign_type = %q, want MD5", formPayload["sign_type"]) + } + if formPayload["type"] != "alipay" { + t.Fatalf("type = %q, want alipay", formPayload["type"]) + } + if formPayload["trade_status"] != "TRADE_SUCCESS" { + t.Fatalf("trade_status = %q, want TRADE_SUCCESS", formPayload["trade_status"]) + } + + if formPayload["pid"] != key.Pid { + t.Fatalf("form pid = %q, want %q", formPayload["pid"], key.Pid) + } + recvSig := formPayload["sign"] + if recvSig == "" { + t.Fatal("epay sign is empty") + } + + signParams := map[string]interface{}{ + "pid": formPayload["pid"], + "trade_no": formPayload["trade_no"], + "out_trade_no": formPayload["out_trade_no"], + "type": formPayload["type"], + "name": formPayload["name"], + "money": formPayload["money"], + "trade_status": formPayload["trade_status"], + } + + calcSig, err := sign.Get(signParams, key.SecretKey) + if err != nil { + t.Fatalf("calc epay signature with target secret: %v", err) + } + if recvSig != calcSig { + t.Fatalf("epay signature mismatch: got %q want %q", recvSig, calcSig) + } + + wrongSig, err := sign.Get(signParams, warningKey.SecretKey) + if err != nil { + t.Fatalf("calc epay signature with wrong secret: %v", err) + } + if recvSig == wrongSig { + t.Fatal("epay signature should not match wrong api key secret") + } +} + +func TestDispatchPendingCallbacksEpayAcceptsSuccessAck(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + callbackLimiter = make(chan struct{}, 1) + callbackInflight = sync.Map{} + + epayKey, err := data.GetEnabledApiKey("1001") + if err != nil || epayKey == nil || epayKey.ID == 0 { + t.Fatalf("load epay key: %v", err) + } + + var requestCount int32 + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + atomic.AddInt32(&requestCount, 1) + _, _ = io.WriteString(w, "success") + })) + defer server.Close() + + order := &mdb.Orders{ + TradeId: "trade_callback_epay_success", + OrderId: "order_callback_epay_success", + Amount: 1, + Currency: "CNY", + ActualAmount: 1, + ReceiveAddress: "wallet_epay_success", + Token: "USDT", + Status: mdb.StatusPaySuccess, + NotifyUrl: server.URL, + BlockTransactionId: "block_callback_epay_success", + CallbackNum: 0, + CallBackConfirm: mdb.CallBackConfirmNo, + PaymentType: mdb.PaymentTypeEpay, + ApiKeyID: epayKey.ID, + } + if err := dao.Mdb.Create(order).Error; err != nil { + t.Fatalf("create callback order: %v", err) + } + + dispatchPendingCallbacks() + + waitFor(t, 3*time.Second, func() bool { + current, innerErr := data.GetOrderInfoByTradeId(order.TradeId) + if innerErr != nil || current.ID <= 0 { + return false + } + return current.CallBackConfirm == mdb.CallBackConfirmOk && current.CallbackNum == 1 + }) + + if got := atomic.LoadInt32(&requestCount); got != 1 { + t.Fatalf("callback request count = %d, want 1", got) + } +} + func waitFor(t *testing.T, timeout time.Duration, fn func() bool) { t.Helper() diff --git a/src/notify/dispatcher.go b/src/notify/dispatcher.go new file mode 100644 index 0000000..eee34d3 --- /dev/null +++ b/src/notify/dispatcher.go @@ -0,0 +1,70 @@ +// Package notify fans out domain events (order paid, order expired, +// etc.) to every NotificationChannel subscribed to the event. Senders +// are type-keyed (telegram/webhook/email/...) so adding a new push +// method means registering one function; no callers change. +package notify + +import ( + "encoding/json" + "sync" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/util/log" +) + +// Sender delivers an already-rendered text message via a channel row. +// Config is the channel's Config JSON string (type-specific shape). +type Sender func(config, text string) error + +var ( + sendersMu sync.RWMutex + senders = map[string]Sender{} +) + +// RegisterSender wires a Sender for a channel type. Called once at +// package init of each sender file (e.g. telegram_sender.go). +func RegisterSender(channelType string, s Sender) { + sendersMu.Lock() + senders[channelType] = s + sendersMu.Unlock() +} + +func getSender(channelType string) (Sender, bool) { + sendersMu.RLock() + defer sendersMu.RUnlock() + s, ok := senders[channelType] + return s, ok +} + +// Dispatch delivers text to every enabled channel subscribed to event. +// Per-channel failures are logged but don't abort the fan-out — one +// broken TG token shouldn't prevent webhook delivery. +func Dispatch(event, text string) { + channels, err := data.ListEnabledChannelsByEvent(event) + if err != nil { + log.Sugar.Errorf("[notify] list channels failed: %v", err) + return + } + for _, ch := range channels { + sender, ok := getSender(ch.Type) + if !ok { + log.Sugar.Warnf("[notify] no sender registered for type=%s (channel_id=%d)", ch.Type, ch.ID) + continue + } + go func(c mdb.NotificationChannel) { + if err := sender(c.Config, text); err != nil { + log.Sugar.Errorf("[notify] send failed type=%s channel_id=%d: %v", c.Type, c.ID, err) + } + }(ch) + } +} + +// ParseConfig helper for senders: unmarshal channel Config JSON into +// an arbitrary struct, returning a typed error on invalid JSON. +func ParseConfig(raw string, out interface{}) error { + if raw == "" { + return ErrEmptyConfig + } + return json.Unmarshal([]byte(raw), out) +} diff --git a/src/notify/errors.go b/src/notify/errors.go new file mode 100644 index 0000000..d05a1b6 --- /dev/null +++ b/src/notify/errors.go @@ -0,0 +1,8 @@ +package notify + +import "errors" + +var ( + ErrNoSender = errors.New("no sender registered for channel type") + ErrEmptyConfig = errors.New("channel config is empty") +) diff --git a/src/notify/telegram_sender.go b/src/notify/telegram_sender.go new file mode 100644 index 0000000..3397af9 --- /dev/null +++ b/src/notify/telegram_sender.go @@ -0,0 +1,147 @@ +package notify + +import ( + "encoding/json" + "fmt" + "strconv" + "strings" + "sync" + "time" + + tb "gopkg.in/telebot.v3" +) + +// TelegramConfig mirrors the Config JSON of a telegram channel row. +type TelegramConfig struct { + BotToken string `json:"bot_token"` + ChatID int64 `json:"chat_id"` + Proxy string `json:"proxy"` +} + +func init() { + RegisterSender("telegram", sendTelegram) +} + +// botCache caches *tb.Bot instances keyed by bot_token so we don't +// create a new Bot (and call getMe) on every notification. +var ( + botCacheMu sync.RWMutex + botCache = map[string]*tb.Bot{} +) + +func getOrCreateBot(cfg *TelegramConfig) (*tb.Bot, error) { + botCacheMu.RLock() + bot, ok := botCache[cfg.BotToken] + botCacheMu.RUnlock() + if ok { + return bot, nil + } + + settings := tb.Settings{ + Token: cfg.BotToken, + Poller: &tb.LongPoller{Timeout: 1 * time.Second}, + Synchronous: true, + Offline: true, + } + if cfg.Proxy != "" { + settings.URL = cfg.Proxy + } + bot, err := tb.NewBot(settings) + if err != nil { + return nil, err + } + + botCacheMu.Lock() + botCache[cfg.BotToken] = bot + botCacheMu.Unlock() + return bot, nil +} + +// ParseTelegramConfig decodes telegram channel config and supports +// chat_id in either numeric or string form so API clients can send +// both JSON number and quoted text. +func ParseTelegramConfig(raw string) (*TelegramConfig, error) { + if strings.TrimSpace(raw) == "" { + return nil, ErrEmptyConfig + } + + var payload map[string]interface{} + if err := json.Unmarshal([]byte(raw), &payload); err != nil { + return nil, err + } + + cfg := &TelegramConfig{} + cfg.BotToken = pickFirstString(payload, "bot_token", "botToken", "bot-token") + if cfg.BotToken == "" { + return nil, fmt.Errorf("telegram config.bot_token required") + } + + chatRaw, ok := pickFirstValue(payload, "chat_id", "chatId", "chat-id") + if !ok { + return nil, fmt.Errorf("telegram config.chat_id required") + } + chatID, err := parseTelegramChatID(chatRaw) + if err != nil { + return nil, err + } + cfg.ChatID = chatID + + cfg.Proxy = pickFirstString(payload, "proxy", "proxy_url", "proxyUrl") + + return cfg, nil +} + +func pickFirstString(payload map[string]interface{}, keys ...string) string { + for _, k := range keys { + if v, ok := payload[k].(string); ok { + s := strings.TrimSpace(v) + if s != "" { + return s + } + } + } + return "" +} + +func pickFirstValue(payload map[string]interface{}, keys ...string) (interface{}, bool) { + for _, k := range keys { + if v, ok := payload[k]; ok { + return v, true + } + } + return nil, false +} + +func parseTelegramChatID(v interface{}) (int64, error) { + switch t := v.(type) { + case float64: + return int64(t), nil + case json.Number: + return t.Int64() + case string: + s := strings.TrimSpace(t) + if s == "" { + return 0, fmt.Errorf("telegram config.chat_id required") + } + id, err := strconv.ParseInt(s, 10, 64) + if err != nil { + return 0, fmt.Errorf("telegram config.chat_id invalid: %w", err) + } + return id, nil + default: + return 0, fmt.Errorf("telegram config.chat_id invalid type") + } +} + +func sendTelegram(configJSON, text string) error { + cfg, err := ParseTelegramConfig(configJSON) + if err != nil { + return err + } + bot, err := getOrCreateBot(cfg) + if err != nil { + return err + } + _, err = bot.Send(&tb.User{ID: cfg.ChatID}, text, &tb.SendOptions{ParseMode: tb.ModeHTML}) + return err +} diff --git a/src/notify/telegram_sender_test.go b/src/notify/telegram_sender_test.go new file mode 100644 index 0000000..111a553 --- /dev/null +++ b/src/notify/telegram_sender_test.go @@ -0,0 +1,53 @@ +package notify + +import "testing" + +func TestParseTelegramConfigAcceptsNumericChatID(t *testing.T) { + raw := `{"bot_token":"123:ABC","chat_id":123456789}` + cfg, err := ParseTelegramConfig(raw) + if err != nil { + t.Fatalf("parse config: %v", err) + } + if cfg.BotToken != "123:ABC" { + t.Fatalf("bot token = %q, want %q", cfg.BotToken, "123:ABC") + } + if cfg.ChatID != 123456789 { + t.Fatalf("chat id = %d, want %d", cfg.ChatID, 123456789) + } +} + +func TestParseTelegramConfigAcceptsStringChatID(t *testing.T) { + raw := `{"bot_token":"123:ABC","chat_id":"-1001234567890"}` + cfg, err := ParseTelegramConfig(raw) + if err != nil { + t.Fatalf("parse config: %v", err) + } + if cfg.ChatID != -1001234567890 { + t.Fatalf("chat id = %d, want %d", cfg.ChatID, int64(-1001234567890)) + } +} + +func TestParseTelegramConfigRejectsInvalidChatID(t *testing.T) { + raw := `{"bot_token":"123:ABC","chat_id":"not-a-number"}` + _, err := ParseTelegramConfig(raw) + if err == nil { + t.Fatal("expected parse error for invalid chat_id") + } +} + +func TestParseTelegramConfigAcceptsCamelCaseKeys(t *testing.T) { + raw := `{"botToken":"123:ABC","chatId":"-1001234567890","proxyUrl":"http://127.0.0.1:7890"}` + cfg, err := ParseTelegramConfig(raw) + if err != nil { + t.Fatalf("parse config: %v", err) + } + if cfg.BotToken != "123:ABC" { + t.Fatalf("bot token = %q, want %q", cfg.BotToken, "123:ABC") + } + if cfg.ChatID != -1001234567890 { + t.Fatalf("chat id = %d, want %d", cfg.ChatID, int64(-1001234567890)) + } + if cfg.Proxy != "http://127.0.0.1:7890" { + t.Fatalf("proxy = %q, want %q", cfg.Proxy, "http://127.0.0.1:7890") + } +} diff --git a/src/route/admin_router_test.go b/src/route/admin_router_test.go new file mode 100644 index 0000000..ea1c50f --- /dev/null +++ b/src/route/admin_router_test.go @@ -0,0 +1,892 @@ +package route + +import ( + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/labstack/echo/v4" +) + +const ( + testAdminUsername = "admin" + testAdminPassword = "test-admin-pass-123" +) + +// setupAdminTestEnv sets up the test environment with a seeded admin user +// and returns the echo instance and a valid JWT token. +func setupAdminTestEnv(t *testing.T) (*echo.Echo, string) { + t.Helper() + e := setupTestEnv(t) + + // Seed admin user with a known password. + hash, err := data.HashPassword(testAdminPassword) + if err != nil { + t.Fatalf("HashPassword: %v", err) + } + dao.Mdb.Create(&mdb.AdminUser{ + Username: testAdminUsername, + PasswordHash: hash, + Status: mdb.AdminUserStatusEnable, + }) + + // Login to obtain a JWT for subsequent authenticated requests. + token := adminLogin(t, e, testAdminUsername, testAdminPassword) + return e, token +} + +// adminLogin performs a login request and returns the JWT token. +func adminLogin(t *testing.T, e *echo.Echo, username, password string) string { + t.Helper() + body := map[string]interface{}{ + "username": username, + "password": password, + } + rec := doPost(e, "/admin/api/v1/auth/login", body) + if rec.Code != http.StatusOK { + t.Fatalf("login failed: status=%d body=%s", rec.Code, rec.Body.String()) + } + var resp map[string]interface{} + if err := json.Unmarshal(rec.Body.Bytes(), &resp); err != nil { + t.Fatalf("login unmarshal: %v", err) + } + dataObj, ok := resp["data"].(map[string]interface{}) + if !ok { + t.Fatalf("login response missing data field: %s", rec.Body.String()) + } + token, ok := dataObj["token"].(string) + if !ok || token == "" { + t.Fatalf("login response missing token: %s", rec.Body.String()) + } + return token +} + +// doGetAdmin sends an authenticated GET request with a Bearer JWT. +func doGetAdmin(e *echo.Echo, path, token string) *httptest.ResponseRecorder { + req := httptest.NewRequest(http.MethodGet, path, nil) + req.Header.Set(echo.HeaderAuthorization, "Bearer "+token) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + return rec +} + +// doPostAdmin sends an authenticated POST request with a Bearer JWT. +func doPostAdmin(e *echo.Echo, path string, body map[string]interface{}, token string) *httptest.ResponseRecorder { + jsonBytes, _ := json.Marshal(body) + req := httptest.NewRequest(http.MethodPost, path, strings.NewReader(string(jsonBytes))) + req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON) + req.Header.Set(echo.HeaderAuthorization, "Bearer "+token) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + return rec +} + +// doPatchAdmin sends an authenticated PATCH request with a Bearer JWT. +func doPatchAdmin(e *echo.Echo, path string, body map[string]interface{}, token string) *httptest.ResponseRecorder { + jsonBytes, _ := json.Marshal(body) + req := httptest.NewRequest(http.MethodPatch, path, strings.NewReader(string(jsonBytes))) + req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON) + req.Header.Set(echo.HeaderAuthorization, "Bearer "+token) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + return rec +} + +// doDeleteAdmin sends an authenticated DELETE request with a Bearer JWT. +func doDeleteAdmin(e *echo.Echo, path, token string) *httptest.ResponseRecorder { + req := httptest.NewRequest(http.MethodDelete, path, nil) + req.Header.Set(echo.HeaderAuthorization, "Bearer "+token) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + return rec +} + +// doPutAdmin sends an authenticated PUT request with a Bearer JWT. +func doPutAdmin(e *echo.Echo, path string, body map[string]interface{}, token string) *httptest.ResponseRecorder { + jsonBytes, _ := json.Marshal(body) + req := httptest.NewRequest(http.MethodPut, path, strings.NewReader(string(jsonBytes))) + req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON) + req.Header.Set(echo.HeaderAuthorization, "Bearer "+token) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + return rec +} + +// doGet sends an unauthenticated GET request. +func doGet(e *echo.Echo, path string) *httptest.ResponseRecorder { + req := httptest.NewRequest(http.MethodGet, path, nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + return rec +} + +// assertOK asserts the response status is 200 and the status_code field is 200. +func assertOK(t *testing.T, rec *httptest.ResponseRecorder) map[string]interface{} { + t.Helper() + if rec.Code != http.StatusOK { + t.Fatalf("expected 200, got %d: %s", rec.Code, rec.Body.String()) + } + var resp map[string]interface{} + if err := json.Unmarshal(rec.Body.Bytes(), &resp); err != nil { + t.Fatalf("unmarshal response: %v", err) + } + code, _ := resp["status_code"].(float64) + if code != 200 { + t.Fatalf("expected status_code=200, got %v: %s", code, rec.Body.String()) + } + return resp +} + +// assertUnauthorized asserts that a request without a valid JWT returns 401. +func assertUnauthorized(t *testing.T, rec *httptest.ResponseRecorder) { + t.Helper() + if rec.Code != http.StatusUnauthorized { + t.Fatalf("expected 401, got %d: %s", rec.Code, rec.Body.String()) + } +} + +// TestAdminLogin_Success verifies correct credentials return 200 + JWT. +func TestAdminLogin_Success(t *testing.T) { + e := setupTestEnv(t) + hash, _ := data.HashPassword(testAdminPassword) + dao.Mdb.Create(&mdb.AdminUser{ + Username: testAdminUsername, + PasswordHash: hash, + Status: mdb.AdminUserStatusEnable, + }) + + rec := doPost(e, "/admin/api/v1/auth/login", map[string]interface{}{ + "username": testAdminUsername, + "password": testAdminPassword, + }) + t.Logf("Login response: %s", rec.Body.String()) + + resp := assertOK(t, rec) + dataObj, _ := resp["data"].(map[string]interface{}) + if dataObj["token"] == "" || dataObj["token"] == nil { + t.Fatal("expected non-empty token in login response") + } +} + +// TestAdminLogin_WrongPassword verifies wrong credentials return 4xx. +func TestAdminLogin_WrongPassword(t *testing.T) { + e := setupTestEnv(t) + hash, _ := data.HashPassword(testAdminPassword) + dao.Mdb.Create(&mdb.AdminUser{ + Username: testAdminUsername, + PasswordHash: hash, + Status: mdb.AdminUserStatusEnable, + }) + + rec := doPost(e, "/admin/api/v1/auth/login", map[string]interface{}{ + "username": testAdminUsername, + "password": "wrong-password", + }) + t.Logf("Login wrong-password response: status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code == http.StatusOK { + var resp map[string]interface{} + json.Unmarshal(rec.Body.Bytes(), &resp) + if code, _ := resp["code"].(float64); code == 200 { + t.Fatal("expected failure for wrong password, got 200") + } + } +} + +// TestAdminLogin_MissingFields verifies missing required fields return 4xx. +func TestAdminLogin_MissingFields(t *testing.T) { + e := setupTestEnv(t) + rec := doPost(e, "/admin/api/v1/auth/login", map[string]interface{}{ + "username": testAdminUsername, + // password missing + }) + t.Logf("Login missing-fields response: status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code == http.StatusOK { + var resp map[string]interface{} + json.Unmarshal(rec.Body.Bytes(), &resp) + if code, _ := resp["code"].(float64); code == 200 { + t.Fatal("expected validation failure, got code=200") + } + } +} + +// TestAdminProtectedRoute_NoToken verifies protected routes reject unauthenticated requests. +func TestAdminProtectedRoute_NoToken(t *testing.T) { + e := setupTestEnv(t) + protectedRoutes := []string{ + "/admin/api/v1/auth/me", + "/admin/api/v1/api-keys", + "/admin/api/v1/chains", + "/admin/api/v1/wallets", + "/admin/api/v1/orders", + "/admin/api/v1/dashboard/overview", + "/admin/api/v1/settings", + "/admin/api/v1/rpc-nodes", + "/admin/api/v1/notification-channels", + } + for _, path := range protectedRoutes { + req := httptest.NewRequest(http.MethodGet, path, nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + t.Logf("GET %s → %d", path, rec.Code) + assertUnauthorized(t, rec) + } +} + +// TestAdminMe verifies the /auth/me route returns current user info. +func TestAdminMe(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doGetAdmin(e, "/admin/api/v1/auth/me", token) + t.Logf("Me response: %s", rec.Body.String()) + resp := assertOK(t, rec) + dataObj, _ := resp["data"].(map[string]interface{}) + if dataObj["username"] != testAdminUsername { + t.Fatalf("expected username=%s, got %v", testAdminUsername, dataObj["username"]) + } +} + +// TestAdminLogout verifies the /auth/logout route succeeds with a valid token. +func TestAdminLogout(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doPostAdmin(e, "/admin/api/v1/auth/logout", nil, token) + t.Logf("Logout response: %s", rec.Body.String()) + assertOK(t, rec) +} + +// TestAdminChangePassword verifies the change-password route works correctly. +func TestAdminChangePassword(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doPostAdmin(e, "/admin/api/v1/auth/password", map[string]interface{}{ + "old_password": testAdminPassword, + "new_password": "new-pass-456", + }, token) + t.Logf("ChangePassword response: %s", rec.Body.String()) + assertOK(t, rec) + + // Verify old password no longer works. + rec2 := doPost(e, "/admin/api/v1/auth/login", map[string]interface{}{ + "username": testAdminUsername, + "password": testAdminPassword, + }) + var resp2 map[string]interface{} + json.Unmarshal(rec2.Body.Bytes(), &resp2) + code2, _ := resp2["code"].(float64) + if code2 == 200 { + t.Fatal("old password should no longer work after change") + } +} + +// TestAdminInitPasswordFlow verifies the one-time initial password endpoint +// and hash-based "password changed" detection flow. +func TestAdminInitPasswordFlow(t *testing.T) { + e := setupTestEnv(t) + const initPassword = "init-pass-123456" + + adminHash, err := data.HashPassword(initPassword) + if err != nil { + t.Fatalf("HashPassword: %v", err) + } + dao.Mdb.Create(&mdb.AdminUser{ + Username: testAdminUsername, + PasswordHash: adminHash, + Status: mdb.AdminUserStatusEnable, + }) + _ = data.SetSetting(mdb.SettingGroupSystem, mdb.SettingKeyInitAdminPasswordPlain, initPassword, mdb.SettingTypeString) + _ = data.SetSetting(mdb.SettingGroupSystem, mdb.SettingKeyInitAdminPasswordHash, data.HashInitialAdminPassword(initPassword), mdb.SettingTypeString) + _ = data.SetSetting(mdb.SettingGroupSystem, mdb.SettingKeyInitAdminPasswordFetched, "false", mdb.SettingTypeBool) + _ = data.SetSetting(mdb.SettingGroupSystem, mdb.SettingKeyInitAdminPasswordChanged, "false", mdb.SettingTypeBool) + + recHash := doGet(e, "/admin/api/v1/auth/init-password-hash") + respHash := assertOK(t, recHash) + hashData, _ := respHash["data"].(map[string]interface{}) + if got := hashData["password_hash"]; got != data.HashInitialAdminPassword(initPassword) { + t.Fatalf("expected init hash %s, got %v", data.HashInitialAdminPassword(initPassword), got) + } + if got, _ := hashData["password_changed"].(bool); got { + t.Fatalf("expected password_changed=false before change, got true") + } + + recFetch := doGet(e, "/admin/api/v1/auth/init-password") + respFetch := assertOK(t, recFetch) + fetchData, _ := respFetch["data"].(map[string]interface{}) + if fetchData["username"] != testAdminUsername { + t.Fatalf("expected username=%s, got %v", testAdminUsername, fetchData["username"]) + } + if fetchData["password"] != initPassword { + t.Fatalf("expected initial password %s, got %v", initPassword, fetchData["password"]) + } + + recFetch2 := doGet(e, "/admin/api/v1/auth/init-password") + if recFetch2.Code != http.StatusBadRequest { + t.Fatalf("second fetch should fail with 400, got %d body=%s", recFetch2.Code, recFetch2.Body.String()) + } + if !strings.Contains(strings.ToLower(recFetch2.Body.String()), "already fetched") { + t.Fatalf("expected already fetched error, got: %s", recFetch2.Body.String()) + } + + token := adminLogin(t, e, testAdminUsername, initPassword) + + recMe1 := doGetAdmin(e, "/admin/api/v1/auth/me", token) + respMe1 := assertOK(t, recMe1) + meData1, _ := respMe1["data"].(map[string]interface{}) + if got, _ := meData1["password_is_default"].(bool); !got { + t.Fatalf("expected password_is_default=true before change, got %v", got) + } + + recChange := doPostAdmin(e, "/admin/api/v1/auth/password", map[string]interface{}{ + "old_password": initPassword, + "new_password": "new-pass-789", + }, token) + assertOK(t, recChange) + + recHash2 := doGet(e, "/admin/api/v1/auth/init-password-hash") + respHash2 := assertOK(t, recHash2) + hashData2, _ := respHash2["data"].(map[string]interface{}) + if got, _ := hashData2["password_changed"].(bool); !got { + t.Fatalf("expected password_changed=true after change, got %v", got) + } + + recMe2 := doGetAdmin(e, "/admin/api/v1/auth/me", token) + respMe2 := assertOK(t, recMe2) + meData2, _ := respMe2["data"].(map[string]interface{}) + if got, _ := meData2["password_is_default"].(bool); got { + t.Fatalf("expected password_is_default=false after change, got %v", got) + } +} + +// ─── API Keys ──────────────────────────────────────────────────────────────── + +// TestAdminApiKeys_CRUD verifies list, create, update, status change, secret, +// stats, rotate, and delete for API keys. +func TestAdminApiKeys_CRUD(t *testing.T) { + e, token := setupAdminTestEnv(t) + + // List — should contain seeded keys from setupTestEnv. + rec := doGetAdmin(e, "/admin/api/v1/api-keys", token) + t.Logf("ListApiKeys: %s", rec.Body.String()) + assertOK(t, rec) + + // Create a new key. + rec = doPostAdmin(e, "/admin/api/v1/api-keys", map[string]interface{}{ + "name": "test-created-key", + }, token) + t.Logf("CreateApiKey: %s", rec.Body.String()) + resp := assertOK(t, rec) + dataObj, _ := resp["data"].(map[string]interface{}) + keyID := dataObj["id"] + if keyID == nil { + t.Fatal("CreateApiKey response missing id") + } + keyIDStr := fmt.Sprintf("%.0f", keyID.(float64)) + + // Update. + rec = doPatchAdmin(e, "/admin/api/v1/api-keys/"+keyIDStr, map[string]interface{}{ + "name": "renamed-key", + }, token) + t.Logf("UpdateApiKey: %s", rec.Body.String()) + assertOK(t, rec) + + // Get secret. + rec = doGetAdmin(e, "/admin/api/v1/api-keys/"+keyIDStr+"/secret", token) + t.Logf("GetApiKeySecret: %s", rec.Body.String()) + assertOK(t, rec) + + // Get stats. + rec = doGetAdmin(e, "/admin/api/v1/api-keys/"+keyIDStr+"/stats", token) + t.Logf("GetApiKeyStats: %s", rec.Body.String()) + assertOK(t, rec) + + // Change status. + rec = doPostAdmin(e, "/admin/api/v1/api-keys/"+keyIDStr+"/status", map[string]interface{}{ + "status": 2, // disable + }, token) + t.Logf("ChangeApiKeyStatus: %s", rec.Body.String()) + assertOK(t, rec) + + // Rotate secret. + rec = doPostAdmin(e, "/admin/api/v1/api-keys/"+keyIDStr+"/rotate-secret", nil, token) + t.Logf("RotateApiKeySecret: %s", rec.Body.String()) + assertOK(t, rec) + + // Delete. + rec = doDeleteAdmin(e, "/admin/api/v1/api-keys/"+keyIDStr, token) + t.Logf("DeleteApiKey: %s", rec.Body.String()) + assertOK(t, rec) +} + +// ─── Chains ────────────────────────────────────────────────────────────────── + +// TestAdminChains_ListAndUpdate verifies listing and updating chains. +func TestAdminChains_ListAndUpdate(t *testing.T) { + e, token := setupAdminTestEnv(t) + + // List chains — seeded in setupTestEnv. + rec := doGetAdmin(e, "/admin/api/v1/chains", token) + t.Logf("ListChains: %s", rec.Body.String()) + assertOK(t, rec) + + // Update the tron chain display name. + rec = doPatchAdmin(e, "/admin/api/v1/chains/tron", map[string]interface{}{ + "display_name": "TRON Updated", + }, token) + t.Logf("UpdateChain: %s", rec.Body.String()) + assertOK(t, rec) +} + +// ─── Chain Tokens ───────────────────────────────────────────────────────────── + +// TestAdminChainTokens_CRUD verifies CRUD operations for chain tokens. +func TestAdminChainTokens_CRUD(t *testing.T) { + e, token := setupAdminTestEnv(t) + + // List — seeded chain tokens. + rec := doGetAdmin(e, "/admin/api/v1/chain-tokens", token) + t.Logf("ListChainTokens: %s", rec.Body.String()) + assertOK(t, rec) + + // Create. + rec = doPostAdmin(e, "/admin/api/v1/chain-tokens", map[string]interface{}{ + "network": "ethereum", + "symbol": "TEST", + "contract_address": "0xTESTADDRESS", + "decimals": 18, + }, token) + t.Logf("CreateChainToken: %s", rec.Body.String()) + resp := assertOK(t, rec) + dataObj, _ := resp["data"].(map[string]interface{}) + tokenID := dataObj["id"] + if tokenID == nil { + t.Fatal("CreateChainToken missing id") + } + tokenIDStr := fmt.Sprintf("%.0f", tokenID.(float64)) + + // Update. + rec = doPatchAdmin(e, "/admin/api/v1/chain-tokens/"+tokenIDStr, map[string]interface{}{ + "symbol": "TEST2", + }, token) + t.Logf("UpdateChainToken: %s", rec.Body.String()) + assertOK(t, rec) + + // Change status. + rec = doPostAdmin(e, "/admin/api/v1/chain-tokens/"+tokenIDStr+"/status", map[string]interface{}{ + "enabled": false, + }, token) + t.Logf("ChangeChainTokenStatus: %s", rec.Body.String()) + assertOK(t, rec) + + // Delete. + rec = doDeleteAdmin(e, "/admin/api/v1/chain-tokens/"+tokenIDStr, token) + t.Logf("DeleteChainToken: %s", rec.Body.String()) + assertOK(t, rec) +} + +// ─── RPC Nodes ──────────────────────────────────────────────────────────────── + +// TestAdminRpcNodes_CRUD verifies CRUD operations for RPC nodes. +func TestAdminRpcNodes_CRUD(t *testing.T) { + e, token := setupAdminTestEnv(t) + + // List — empty initially. + rec := doGetAdmin(e, "/admin/api/v1/rpc-nodes", token) + t.Logf("ListRpcNodes: %s", rec.Body.String()) + assertOK(t, rec) + + // Create. + rec = doPostAdmin(e, "/admin/api/v1/rpc-nodes", map[string]interface{}{ + "network": "ethereum", + "url": "https://eth-mainnet.example.com", + "type": "http", + }, token) + t.Logf("CreateRpcNode: %s", rec.Body.String()) + resp := assertOK(t, rec) + dataObj, _ := resp["data"].(map[string]interface{}) + nodeID := dataObj["id"] + if nodeID == nil { + t.Fatal("CreateRpcNode missing id") + } + nodeIDStr := fmt.Sprintf("%.0f", nodeID.(float64)) + + // Update. + rec = doPatchAdmin(e, "/admin/api/v1/rpc-nodes/"+nodeIDStr, map[string]interface{}{ + "url": "https://eth-mainnet2.example.com", + }, token) + t.Logf("UpdateRpcNode: %s", rec.Body.String()) + assertOK(t, rec) + + // Health check — network likely unreachable in test, but route must not 404/500. + rec = doPostAdmin(e, "/admin/api/v1/rpc-nodes/"+nodeIDStr+"/health-check", nil, token) + t.Logf("HealthCheckRpcNode: status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code == http.StatusNotFound { + t.Fatalf("health-check route returned 404") + } + + // Delete. + rec = doDeleteAdmin(e, "/admin/api/v1/rpc-nodes/"+nodeIDStr, token) + t.Logf("DeleteRpcNode: %s", rec.Body.String()) + assertOK(t, rec) +} + +// ─── Wallets ───────────────────────────────────────────────────────────────── + +// TestAdminWallets_CRUD verifies wallet management routes. +func TestAdminWallets_CRUD(t *testing.T) { + e, token := setupAdminTestEnv(t) + + // List — two wallets seeded in setupTestEnv. + rec := doGetAdmin(e, "/admin/api/v1/wallets", token) + t.Logf("ListWallets: %s", rec.Body.String()) + resp := assertOK(t, rec) + _ = resp + + // Add a new wallet. + rec = doPostAdmin(e, "/admin/api/v1/wallets", map[string]interface{}{ + "network": "ethereum", + "address": "0xTestEthAddress001", + }, token) + t.Logf("AddWallet: %s", rec.Body.String()) + resp2 := assertOK(t, rec) + dataObj, _ := resp2["data"].(map[string]interface{}) + walletID := dataObj["id"] + if walletID == nil { + t.Fatal("AddWallet missing id") + } + walletIDStr := fmt.Sprintf("%.0f", walletID.(float64)) + + // Get single wallet. + rec = doGetAdmin(e, "/admin/api/v1/wallets/"+walletIDStr, token) + t.Logf("GetWallet: %s", rec.Body.String()) + assertOK(t, rec) + + // Update. + rec = doPatchAdmin(e, "/admin/api/v1/wallets/"+walletIDStr, map[string]interface{}{ + "address": "0xTestEthAddress002", + }, token) + t.Logf("UpdateWallet: %s", rec.Body.String()) + assertOK(t, rec) + + // Change status. + rec = doPostAdmin(e, "/admin/api/v1/wallets/"+walletIDStr+"/status", map[string]interface{}{ + "status": 2, // disable + }, token) + t.Logf("ChangeWalletStatus: %s", rec.Body.String()) + assertOK(t, rec) + + // Delete. + rec = doDeleteAdmin(e, "/admin/api/v1/wallets/"+walletIDStr, token) + t.Logf("DeleteWallet: %s", rec.Body.String()) + assertOK(t, rec) +} + +// TestAdminWallets_BatchImport verifies batch wallet import. +func TestAdminWallets_BatchImport(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doPostAdmin(e, "/admin/api/v1/wallets/batch-import", map[string]interface{}{ + "network": "ethereum", + "addresses": []string{"0xBatchAddr001", "0xBatchAddr002"}, + }, token) + t.Logf("BatchImportWallets: %s", rec.Body.String()) + assertOK(t, rec) +} + +// ─── Orders ────────────────────────────────────────────────────────────────── + +// TestAdminOrders_List verifies listing orders (empty initially). +func TestAdminOrders_List(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doGetAdmin(e, "/admin/api/v1/orders", token) + t.Logf("ListOrders: %s", rec.Body.String()) + assertOK(t, rec) +} + +// TestAdminOrders_Export verifies the export endpoint is accessible. +func TestAdminOrders_Export(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doGetAdmin(e, "/admin/api/v1/orders/export", token) + t.Logf("ExportOrders: status=%d", rec.Code) + // Should return 200 (even with empty result set). + if rec.Code != http.StatusOK { + t.Fatalf("expected 200, got %d: %s", rec.Code, rec.Body.String()) + } +} + +// TestAdminOrders_GetNotFound verifies a non-existent trade_id returns a +// non-200 business code (not a 404 or 500 HTTP error). +func TestAdminOrders_GetNotFound(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doGetAdmin(e, "/admin/api/v1/orders/nonexistent-trade-id", token) + t.Logf("GetOrder (not found): status=%d body=%s", rec.Code, rec.Body.String()) + // Should not be a server error. + if rec.Code >= 500 { + t.Fatalf("unexpected server error: %d %s", rec.Code, rec.Body.String()) + } +} + +// TestAdminOrders_CloseNotFound verifies closing a non-existent order returns +// a graceful error (not 500). +func TestAdminOrders_CloseNotFound(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doPostAdmin(e, "/admin/api/v1/orders/nonexistent-trade-id/close", nil, token) + t.Logf("CloseOrder (not found): status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code >= 500 { + t.Fatalf("unexpected server error: %d %s", rec.Code, rec.Body.String()) + } +} + +// TestAdminOrders_MarkPaidNotFound verifies mark-paid on non-existent order. +func TestAdminOrders_MarkPaidNotFound(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doPostAdmin(e, "/admin/api/v1/orders/nonexistent-trade-id/mark-paid", nil, token) + t.Logf("MarkOrderPaid (not found): status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code >= 500 { + t.Fatalf("unexpected server error: %d %s", rec.Code, rec.Body.String()) + } +} + +// TestAdminOrders_ResendCallbackNotFound verifies resend-callback graceful error. +func TestAdminOrders_ResendCallbackNotFound(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doPostAdmin(e, "/admin/api/v1/orders/nonexistent-trade-id/resend-callback", nil, token) + t.Logf("ResendCallback (not found): status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code >= 500 { + t.Fatalf("unexpected server error: %d %s", rec.Code, rec.Body.String()) + } +} + +// ─── Dashboard ─────────────────────────────────────────────────────────────── + +// TestAdminDashboard_AllRoutes verifies all dashboard endpoints return 200. +func TestAdminDashboard_AllRoutes(t *testing.T) { + e, token := setupAdminTestEnv(t) + routes := []string{ + "/admin/api/v1/dashboard/overview", + "/admin/api/v1/dashboard/asset-trend", + "/admin/api/v1/dashboard/revenue-trend", + "/admin/api/v1/dashboard/order-stats", + "/admin/api/v1/dashboard/recent-orders", + } + for _, path := range routes { + rec := doGetAdmin(e, path, token) + t.Logf("GET %s → %d: %s", path, rec.Code, rec.Body.String()) + assertOK(t, rec) + } +} + +// ─── Settings ──────────────────────────────────────────────────────────────── + +// TestAdminSettings_ListAndUpsert verifies listing and upserting settings. +func TestAdminSettings_ListAndUpsert(t *testing.T) { + e, token := setupAdminTestEnv(t) + + // List settings. + rec := doGetAdmin(e, "/admin/api/v1/settings", token) + t.Logf("ListSettings: %s", rec.Body.String()) + assertOK(t, rec) + + // Upsert a setting. + rec = doPutAdmin(e, "/admin/api/v1/settings", map[string]interface{}{ + "items": []map[string]interface{}{ + {"group": "rate", "key": "rate.forced_usdt_rate", "value": "7.5", "type": "string"}, + }, + }, token) + t.Logf("UpsertSettings: %s", rec.Body.String()) + assertOK(t, rec) +} + +// TestAdminSettings_DeleteNonExistent verifies deleting a non-existent setting. +func TestAdminSettings_DeleteNonExistent(t *testing.T) { + e, token := setupAdminTestEnv(t) + rec := doDeleteAdmin(e, "/admin/api/v1/settings/nonexistent.key", token) + t.Logf("DeleteSetting (nonexistent): status=%d body=%s", rec.Code, rec.Body.String()) + // Should not be a server error. + if rec.Code >= 500 { + t.Fatalf("unexpected server error: %d %s", rec.Code, rec.Body.String()) + } +} + +// ─── Notification Channels ─────────────────────────────────────────────────── + +// TestAdminNotificationChannels_CRUD verifies notification channel routes. +func TestAdminNotificationChannels_CRUD(t *testing.T) { + e, token := setupAdminTestEnv(t) + + // List — empty initially. + rec := doGetAdmin(e, "/admin/api/v1/notification-channels", token) + t.Logf("ListNotificationChannels: %s", rec.Body.String()) + assertOK(t, rec) + + // Create a webhook channel. + rec = doPostAdmin(e, "/admin/api/v1/notification-channels", map[string]interface{}{ + "name": "test-webhook", + "type": "webhook", + "config": map[string]interface{}{"url": "http://localhost/webhook"}, + "events": map[string]bool{"order.paid": true}, + }, token) + t.Logf("CreateNotificationChannel: %s", rec.Body.String()) + resp := assertOK(t, rec) + dataObj, _ := resp["data"].(map[string]interface{}) + chanID := dataObj["id"] + if chanID == nil { + t.Fatal("CreateNotificationChannel missing id") + } + chanIDStr := fmt.Sprintf("%.0f", chanID.(float64)) + + // Update. + rec = doPatchAdmin(e, "/admin/api/v1/notification-channels/"+chanIDStr, map[string]interface{}{ + "name": "renamed-webhook", + }, token) + t.Logf("UpdateNotificationChannel: %s", rec.Body.String()) + assertOK(t, rec) + + // Change status. + rec = doPostAdmin(e, "/admin/api/v1/notification-channels/"+chanIDStr+"/status", map[string]interface{}{ + "enabled": false, + }, token) + t.Logf("ChangeNotificationChannelStatus: %s", rec.Body.String()) + assertOK(t, rec) + + // Delete. + rec = doDeleteAdmin(e, "/admin/api/v1/notification-channels/"+chanIDStr, token) + t.Logf("DeleteNotificationChannel: %s", rec.Body.String()) + assertOK(t, rec) +} + +// TestAdminNotificationChannels_TelegramFrontendPayloadCompatibility verifies +// the admin API accepts common frontend telegram payload variants: +// - type in mixed case ("Telegram") +// - config in camelCase keys (botToken/chatId) +// - events as string array +func TestAdminNotificationChannels_TelegramFrontendPayloadCompatibility(t *testing.T) { + e, token := setupAdminTestEnv(t) + + rec := doPostAdmin(e, "/admin/api/v1/notification-channels", map[string]interface{}{ + "name": "frontend-telegram", + "type": "Telegram", + "config": map[string]interface{}{ + "botToken": "123:ABC", + "chatId": "-1001234567890", + }, + "events": []string{"order.paid", "order.expired"}, + }, token) + t.Logf("CreateFrontendStyleTelegramChannel: %s", rec.Body.String()) + resp := assertOK(t, rec) + + dataObj, ok := resp["data"].(map[string]interface{}) + if !ok { + t.Fatalf("missing data object: %s", rec.Body.String()) + } + + eventsRaw, _ := dataObj["events"].(string) + if eventsRaw == "" { + t.Fatalf("missing events json in response data: %s", rec.Body.String()) + } + var events map[string]bool + if err := json.Unmarshal([]byte(eventsRaw), &events); err != nil { + t.Fatalf("unmarshal events: %v", err) + } + if !events["order.paid"] || !events["order.expired"] { + t.Fatalf("events not normalized as expected: %+v", events) + } +} + +// ─── Orders list-with-sub ───────────────────────────────────────────────────── + +// TestAdminOrders_ListWithSubExcludesSubOrdersFromTopLevel verifies that +// sub-orders do NOT appear at the top level of /orders/list-with-sub and are +// instead nested inside their parent's sub_orders array. +func TestAdminOrders_ListWithSubExcludesSubOrdersFromTopLevel(t *testing.T) { + e, token := setupAdminTestEnv(t) + + // Seed Ethereum wallet and chain_token so SwitchNetwork can allocate + // a sub-order on that network. The chain record is already seeded by + // MdbTableInit; only the wallet address and token are needed here. + dao.Mdb.Create(&mdb.WalletAddress{ + Network: mdb.NetworkEthereum, + Address: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + Status: mdb.TokenStatusEnable, + }) + if err := dao.Mdb.Where(mdb.ChainToken{Network: mdb.NetworkEthereum, Symbol: "USDT"}). + FirstOrCreate(&mdb.ChainToken{ + Network: mdb.NetworkEthereum, Symbol: "USDT", + ContractAddress: "0xdAC17F958D2ee523a2206206994597C13D831ec7", + Decimals: 6, Enabled: true, + }).Error; err != nil { + t.Fatalf("seed ethereum USDT token: %v", err) + } + + // Create a parent order via the gmpay API. + parentBody := signBody(map[string]interface{}{ + "order_id": "listsubtest-parent", + "amount": 5.0, + "currency": "CNY", + "token": "USDT", + "network": "tron", + "notify_url": "https://merchant.example/callback", + "redirect_url": "https://merchant.example/redirect", + }) + rec := doPost(e, "/payments/gmpay/v1/order/create-transaction", parentBody) + t.Logf("CreateParent: %s", rec.Body.String()) + if rec.Code != http.StatusOK { + t.Fatalf("create parent: got %d: %s", rec.Code, rec.Body.String()) + } + var parentResp map[string]interface{} + json.Unmarshal(rec.Body.Bytes(), &parentResp) + parentTradeId := parentResp["data"].(map[string]interface{})["trade_id"].(string) + + // Switch to Ethereum to create a sub-order (no signature required). + rec = doPost(e, "/pay/switch-network", map[string]interface{}{ + "trade_id": parentTradeId, + "token": "USDT", + "network": "ethereum", + }) + t.Logf("SwitchNetwork: %s", rec.Body.String()) + if rec.Code != http.StatusOK { + t.Fatalf("switch network: got %d: %s", rec.Code, rec.Body.String()) + } + var switchResp map[string]interface{} + json.Unmarshal(rec.Body.Bytes(), &switchResp) + subTradeId := switchResp["data"].(map[string]interface{})["trade_id"].(string) + + // Fetch list-with-sub. + rec = doGetAdmin(e, "/admin/api/v1/orders/list-with-sub", token) + t.Logf("ListWithSub: %s", rec.Body.String()) + resp := assertOK(t, rec) + + dataObj, ok := resp["data"].(map[string]interface{}) + if !ok { + t.Fatalf("missing data object: %s", rec.Body.String()) + } + listRaw, _ := dataObj["list"].([]interface{}) + + // Collect all trade_ids at the top level and in sub_orders. + topLevelIds := map[string]bool{} + subOrderIds := map[string]bool{} + for _, item := range listRaw { + entry := item.(map[string]interface{}) + tradeId := entry["trade_id"].(string) + topLevelIds[tradeId] = true + if subs, ok := entry["sub_orders"].([]interface{}); ok { + for _, s := range subs { + sub := s.(map[string]interface{}) + subOrderIds[sub["trade_id"].(string)] = true + } + } + } + + // Sub-order must NOT appear at the top level. + if topLevelIds[subTradeId] { + t.Fatalf("sub-order trade_id=%s appears at top level — should be nested only", subTradeId) + } + // Parent must appear at the top level. + if !topLevelIds[parentTradeId] { + t.Fatalf("parent trade_id=%s missing from top level", parentTradeId) + } + // Sub-order must appear under the parent's sub_orders. + if !subOrderIds[subTradeId] { + t.Fatalf("sub-order trade_id=%s not found in any sub_orders array", subTradeId) + } +} diff --git a/src/route/router.go b/src/route/router.go index d332acc..27b845b 100644 --- a/src/route/router.go +++ b/src/route/router.go @@ -2,24 +2,27 @@ package route import ( "bytes" + "crypto/subtle" "encoding/json" "fmt" "io" "net/http" "strconv" - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/controller/comm" - "github.com/assimon/luuu/middleware" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/util/constant" - "github.com/assimon/luuu/util/sign" + "github.com/GMWalletApp/epusdt/controller/admin" + "github.com/GMWalletApp/epusdt/controller/comm" + "github.com/GMWalletApp/epusdt/middleware" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/util/constant" + "github.com/GMWalletApp/epusdt/util/sign" "github.com/labstack/echo/v4" + echoMiddleware "github.com/labstack/echo/v4/middleware" ) // RegisterRoute 路由注册 func RegisterRoute(e *echo.Echo) { - e.Any("/", func(c echo.Context) error { + e.POST("/", func(c echo.Context) error { return c.String(http.StatusOK, "hello epusdt, https://github.com/GMwalletApp/epusdt") }) @@ -31,55 +34,20 @@ func RegisterRoute(e *echo.Echo) { // payment routes paymentRoute := e.Group("/payments") - // for epusdt - epusdtV1 := paymentRoute.Group("/epusdt/v1") - epusdtV1.POST("/order/create-transaction", func(ctx echo.Context) error { - // add default token and currency for old plugin - - body := make(map[string]interface{}) - if err := ctx.Bind(&body); err != nil { - return comm.Ctrl.FailJson(ctx, err) - } - if _, ok := body["token"]; !ok { - body["token"] = "usdt" - } - if _, ok := body["currency"]; !ok { - body["currency"] = "cny" - } - if _, ok := body["network"]; !ok { - body["network"] = "tron" - } - ctx.Set("request_body", body) - - jsonBytes, err := json.Marshal(body) - if err != nil { - return comm.Ctrl.FailJson(ctx, err) - } - ctx.Request().Body = io.NopCloser(bytes.NewBuffer(jsonBytes)) - ctx.Request().ContentLength = int64(len(jsonBytes)) - - return comm.Ctrl.CreateTransaction(ctx) - }, middleware.CheckApiSign()) - // gmpay v1 routes gmpayV1 := paymentRoute.Group("/gmpay/v1") gmpayV1.POST("/order/create-transaction", comm.Ctrl.CreateTransaction, middleware.CheckApiSign()) gmpayV1.GET("/supported-assets", comm.Ctrl.GetSupportedAssets) - gmpayV1.GET("/supported-assets/records", comm.Ctrl.ListSupportedAssetRecords) - gmpayV1.GET("/supported-assets/:id", comm.Ctrl.GetSupportedAsset) - gmpayV1.POST("/supported-assets/add", comm.Ctrl.AddSupportedAsset, middleware.CheckApiToken()) - gmpayV1.POST("/supported-assets/:id/update", comm.Ctrl.UpdateSupportedAsset, middleware.CheckApiToken()) - gmpayV1.POST("/supported-assets/:id/delete", comm.Ctrl.DeleteSupportedAsset, middleware.CheckApiToken()) - - // wallet management routes - walletV1 := gmpayV1.Group("/wallet", middleware.CheckApiToken()) - walletV1.POST("/add", comm.Ctrl.AddWallet) - walletV1.GET("/list", comm.Ctrl.ListWallets) - walletV1.GET("/:id", comm.Ctrl.GetWallet) - walletV1.POST("/:id/status", comm.Ctrl.ChangeWalletStatus) - walletV1.POST("/:id/delete", comm.Ctrl.DeleteWallet) + // gmpayV1.GET("/supported-assets/records", comm.Ctrl.ListSupportedAssetRecords) + // gmpayV1.GET("/supported-assets/:id", comm.Ctrl.GetSupportedAsset) // epay v1 routes + // + // Signature uses the pid from the request as the api_keys lookup + // key; the matching row's secret_key plays the role of the legacy + // EPAY "key" value. Env-based (EPAY_PID/EPAY_KEY) fallback was + // removed — the default seeded api_key is always available, and + // having two sources of truth led to inbound/outbound sig mismatch. epayV1 := paymentRoute.Group("/epay/v1") epayV1.Match([]string{http.MethodPost, http.MethodGet}, "/order/create-transaction/submit.php", func(ctx echo.Context) error { params := make(map[string]interface{}) @@ -107,11 +75,11 @@ func RegisterRoute(e *echo.Echo) { if !ok { return "" } - s, ok := v.(string) - if !ok { - return "" + switch t := v.(type) { + case string: + return t } - return s + return "" } signstr := getString(params, "sign") @@ -122,17 +90,29 @@ func RegisterRoute(e *echo.Echo) { delete(params, "sign") delete(params, "sign_type") - // we need to add pid to params for signature verification - params["pid"] = config.GetEpayPid() + pidStr := getString(params, "pid") + if pidStr == "" { + return constant.SignatureErr + } + apiKeyRow, err := data.GetEnabledApiKey(pidStr) + if err != nil || apiKeyRow == nil || apiKeyRow.ID == 0 { + return constant.SignatureErr + } - checkSignature, err := sign.Get(params, config.GetApiAuthToken()) + checkSignature, err := sign.Get(params, apiKeyRow.SecretKey) if err != nil { return constant.SignatureErr } - if checkSignature != signstr { + if subtle.ConstantTimeCompare([]byte(checkSignature), []byte(signstr)) != 1 { return constant.SignatureErr } + if !middleware.IsIPWhitelisted(apiKeyRow.IpWhitelist, ctx.RealIP()) { + return constant.SignatureErr + } + + _ = data.TouchApiKeyUsage(apiKeyRow.ID) + money := getString(params, "money") name := getString(params, "name") notifyURL := getString(params, "notify_url") @@ -145,9 +125,9 @@ func RegisterRoute(e *echo.Echo) { } body := map[string]interface{}{ - "token": "usdt", - "currency": "cny", - "network": "tron", + "token": data.GetSettingString(mdb.SettingKeyEpayDefaultToken, "usdt"), + "currency": data.GetSettingString(mdb.SettingKeyEpayDefaultCurrency, "cny"), + "network": data.GetSettingString(mdb.SettingKeyEpayDefaultNetwork, "tron"), "amount": amountFloat, "notify_url": notifyURL, "order_id": outTradeNo, @@ -158,6 +138,8 @@ func RegisterRoute(e *echo.Echo) { } ctx.Set("request_body", body) + ctx.Set(middleware.ApiKeyIDKey, apiKeyRow.ID) + ctx.Set(middleware.ApiKeyRowKey, apiKeyRow) jsonBytes, err := json.Marshal(body) if err != nil { @@ -170,6 +152,117 @@ func RegisterRoute(e *echo.Echo) { ctx.Request().Header.Set("Content-Type", "application/json") return comm.Ctrl.CreateTransactionAndRedirect(ctx) - }) + + registerAdminRoutes(e) +} + +// registerAdminRoutes wires the management console API surface under +// /admin/api/v1. Everything except /auth/login requires a valid JWT. +func registerAdminRoutes(e *echo.Echo) { + // CORS for the management console. The admin SPA is commonly served + // from a different origin (local dev, CDN, etc.), so allow any origin + // but require explicit echoing — browsers refuse wildcard + credentials. + adminCORS := echoMiddleware.CORSWithConfig(echoMiddleware.CORSConfig{ + AllowOriginFunc: func(origin string) (bool, error) { return true, nil }, + AllowMethods: []string{ + http.MethodGet, + http.MethodPost, + http.MethodPatch, + http.MethodPut, + http.MethodDelete, + http.MethodOptions, + }, + AllowHeaders: []string{ + echo.HeaderOrigin, + echo.HeaderContentType, + echo.HeaderAuthorization, + echo.HeaderAccept, + echo.HeaderXRequestedWith, + }, + AllowCredentials: true, + MaxAge: 86400, + }) + + adminV1 := e.Group("/admin/api/v1", adminCORS) + + // Public (no JWT) + adminV1.POST("/auth/login", admin.Ctrl.Login) + adminV1.GET("/auth/init-password", admin.Ctrl.GetInitialPassword) + adminV1.GET("/auth/init-password-hash", admin.Ctrl.GetInitialPasswordHash) + + // Authenticated + authed := adminV1.Group("", middleware.CheckAdminJWT()) + authed.POST("/auth/logout", admin.Ctrl.Logout) + authed.GET("/auth/me", admin.Ctrl.Me) + authed.POST("/auth/password", admin.Ctrl.ChangePassword) + + // API key management + authed.GET("/api-keys", admin.Ctrl.ListApiKeys) + authed.POST("/api-keys", admin.Ctrl.CreateApiKey) + authed.PATCH("/api-keys/:id", admin.Ctrl.UpdateApiKey) + authed.POST("/api-keys/:id/status", admin.Ctrl.ChangeApiKeyStatus) + authed.POST("/api-keys/:id/rotate-secret", admin.Ctrl.RotateApiKeySecret) + authed.DELETE("/api-keys/:id", admin.Ctrl.DeleteApiKey) + authed.GET("/api-keys/:id/stats", admin.Ctrl.GetApiKeyStats) + authed.GET("/api-keys/:id/secret", admin.Ctrl.GetApiKeySecret) + + // Notification channels + authed.GET("/notification-channels", admin.Ctrl.ListNotificationChannels) + authed.POST("/notification-channels", admin.Ctrl.CreateNotificationChannel) + authed.PATCH("/notification-channels/:id", admin.Ctrl.UpdateNotificationChannel) + authed.POST("/notification-channels/:id/status", admin.Ctrl.ChangeNotificationChannelStatus) + authed.DELETE("/notification-channels/:id", admin.Ctrl.DeleteNotificationChannel) + + // gmpayV1.GET("/supported-assets", comm.Ctrl.GetSupportedAssets) + authed.GET("/supported-assets", comm.Ctrl.GetSupportedAssets) // wrap for admin console, same handler as public endpoint + + // Chains + authed.GET("/chains", admin.Ctrl.ListChains) + authed.PATCH("/chains/:network", admin.Ctrl.UpdateChain) + + // Chain tokens (per-chain token catalog) + authed.GET("/chain-tokens", admin.Ctrl.ListChainTokens) + authed.POST("/chain-tokens", admin.Ctrl.CreateChainToken) + authed.PATCH("/chain-tokens/:id", admin.Ctrl.UpdateChainToken) + authed.POST("/chain-tokens/:id/status", admin.Ctrl.ChangeChainTokenStatus) + authed.DELETE("/chain-tokens/:id", admin.Ctrl.DeleteChainToken) + + // RPC nodes + authed.GET("/rpc-nodes", admin.Ctrl.ListRpcNodes) + authed.POST("/rpc-nodes", admin.Ctrl.CreateRpcNode) + authed.PATCH("/rpc-nodes/:id", admin.Ctrl.UpdateRpcNode) + authed.DELETE("/rpc-nodes/:id", admin.Ctrl.DeleteRpcNode) + authed.POST("/rpc-nodes/:id/health-check", admin.Ctrl.HealthCheckRpcNode) + + // Wallet (address) management + authed.GET("/wallets", admin.Ctrl.AdminListWallets) + authed.POST("/wallets", admin.Ctrl.AdminAddWallet) + authed.GET("/wallets/:id", admin.Ctrl.AdminGetWallet) + authed.PATCH("/wallets/:id", admin.Ctrl.AdminUpdateWallet) + authed.POST("/wallets/:id/status", admin.Ctrl.AdminChangeWalletStatus) + authed.DELETE("/wallets/:id", admin.Ctrl.AdminDeleteWallet) + authed.POST("/wallets/batch-import", admin.Ctrl.AdminBatchImportWallets) + + // Orders + authed.GET("/orders", admin.Ctrl.ListOrders) + authed.GET("/orders/export", admin.Ctrl.ExportOrders) + authed.GET("/orders/list-with-sub", admin.Ctrl.ListOrdersWithSub) + authed.GET("/orders/:trade_id", admin.Ctrl.GetOrder) + authed.GET("/orders/:trade_id/with-sub", admin.Ctrl.GetOrderWithSub) + authed.POST("/orders/:trade_id/close", admin.Ctrl.CloseOrder) + authed.POST("/orders/:trade_id/mark-paid", admin.Ctrl.MarkOrderPaid) + authed.POST("/orders/:trade_id/resend-callback", admin.Ctrl.ResendCallback) + + // Dashboard + authed.GET("/dashboard/overview", admin.Ctrl.Overview) + authed.GET("/dashboard/asset-trend", admin.Ctrl.AssetTrend) + authed.GET("/dashboard/revenue-trend", admin.Ctrl.RevenueTrend) + authed.GET("/dashboard/order-stats", admin.Ctrl.OrderStats) + authed.GET("/dashboard/recent-orders", admin.Ctrl.RecentOrders) + + // Settings + authed.GET("/settings", admin.Ctrl.ListSettings) + authed.PUT("/settings", admin.Ctrl.UpsertSettings) + authed.DELETE("/settings/:key", admin.Ctrl.DeleteSetting) } diff --git a/src/route/router_test.go b/src/route/router_test.go index 350d098..5d09c7f 100644 --- a/src/route/router_test.go +++ b/src/route/router_test.go @@ -10,12 +10,15 @@ import ( "strings" "testing" - "github.com/assimon/luuu/model/dao" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/util/log" - "github.com/assimon/luuu/util/sign" + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/util/log" + "github.com/GMWalletApp/epusdt/util/sign" "github.com/labstack/echo/v4" "github.com/spf13/viper" + "gorm.io/gorm/clause" ) const testAPIToken = "test-secret-token" @@ -28,12 +31,9 @@ func setupTestEnv(t *testing.T) *echo.Echo { // minimal viper config viper.Reset() viper.Set("db_type", "sqlite") - viper.Set("api_auth_token", testAPIToken) - viper.Set("epay_pid", 1) viper.Set("app_uri", "http://localhost:8080") viper.Set("order_expiration_time", 10) viper.Set("api_rate_url", "") - viper.Set("forced_usdt_rate", 7.0) viper.Set("runtime_root_path", tmpDir) viper.Set("log_save_path", tmpDir) viper.Set("sqlite_database_filename", tmpDir+"/test.db") @@ -54,30 +54,71 @@ func setupTestEnv(t *testing.T) *echo.Echo { } // ensure tables exist (MdbTableInit uses sync.Once, so migrate directly) - dao.Mdb.AutoMigrate(&mdb.Orders{}, &mdb.WalletAddress{}, &mdb.SupportedAsset{}) + dao.Mdb.AutoMigrate( + &mdb.Orders{}, + &mdb.WalletAddress{}, + &mdb.AdminUser{}, + &mdb.ApiKey{}, + &mdb.Setting{}, + &mdb.NotificationChannel{}, + &mdb.Chain{}, + &mdb.ChainToken{}, + &mdb.RpcNode{}, + ) + + // reset the settings cache so stale entries from a prior test don't leak + _ = data.ReloadSettings() + config.SettingsGetString = func(key string) string { + return data.GetSettingString(key, "") + } + t.Cleanup(func() { + config.SettingsGetString = nil + }) + if err := data.SetSetting("rate", "rate.forced_usdt_rate", "7.0", "string"); err != nil { + t.Fatalf("seed rate.forced_usdt_rate: %v", err) + } // seed wallet addresses dao.Mdb.Create(&mdb.WalletAddress{Network: mdb.NetworkTron, Address: "TTestTronAddress001", Status: mdb.TokenStatusEnable}) dao.Mdb.Create(&mdb.WalletAddress{Network: mdb.NetworkSolana, Address: "SolTestAddress001", Status: mdb.TokenStatusEnable}) - // seed supported assets if empty - var supportCnt int64 - dao.Mdb.Model(&mdb.SupportedAsset{}).Count(&supportCnt) - if supportCnt == 0 { - dao.Mdb.Create(&[]mdb.SupportedAsset{ - {Network: mdb.NetworkTron, Token: "TRX", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkTron, Token: "USDT", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkSolana, Token: "SOL", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkSolana, Token: "USDT", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkSolana, Token: "USDC", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkEthereum, Token: "USDT", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkEthereum, Token: "USDC", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkBsc, Token: "USDT", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkBsc, Token: "USDC", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkPolygon, Token: "USDT", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkPolygon, Token: "USDC", Status: mdb.TokenStatusEnable}, - {Network: mdb.NetworkPlasma, Token: "USDT", Status: mdb.TokenStatusEnable}, - }) - } + // seed chains so scanners know the test networks are "enabled". + // Use ON CONFLICT DO NOTHING: MdbTableInit (called via DBInit) uses sync.Once + // and may have already seeded these rows into this DB on the first test run. + dao.Mdb.Clauses(clause.OnConflict{DoNothing: true}).Create(&[]mdb.Chain{ + {Network: mdb.NetworkTron, DisplayName: "TRON", Enabled: true}, + {Network: mdb.NetworkSolana, DisplayName: "Solana", Enabled: true}, + {Network: mdb.NetworkEthereum, DisplayName: "Ethereum", Enabled: true}, + {Network: mdb.NetworkBsc, DisplayName: "BSC", Enabled: true}, + {Network: mdb.NetworkPolygon, DisplayName: "Polygon", Enabled: true}, + {Network: mdb.NetworkPlasma, DisplayName: "Plasma", Enabled: true}, + }) + + // seed chain_tokens — GetSupportedAssets now reads from this table. + // Same idempotency rationale as above. + dao.Mdb.Clauses(clause.OnConflict{DoNothing: true}).Create(&[]mdb.ChainToken{ + {Network: mdb.NetworkTron, Symbol: "USDT", ContractAddress: "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", Decimals: 6, Enabled: true}, + {Network: mdb.NetworkTron, Symbol: "TRX", ContractAddress: "", Decimals: 6, Enabled: true}, + {Network: mdb.NetworkSolana, Symbol: "USDT", ContractAddress: "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", Decimals: 6, Enabled: true}, + {Network: mdb.NetworkSolana, Symbol: "USDC", ContractAddress: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", Decimals: 6, Enabled: true}, + {Network: mdb.NetworkSolana, Symbol: "SOL", ContractAddress: "", Decimals: 9, Enabled: true}, + }) + + // Seed one universal api_keys row. The test's testAPIToken doubles + // as both pid and secret_key so sign.Get(body, testAPIToken) calls + // stay valid. + dao.Mdb.Create(&mdb.ApiKey{ + Name: "test-universal", + Pid: testAPIToken, + SecretKey: testAPIToken, + Status: mdb.ApiKeyStatusEnable, + }) + // Additional numeric-PID row for EPAY tests (EPAY pid must be numeric). + dao.Mdb.Create(&mdb.ApiKey{ + Name: "test-epay-pid-1", + Pid: "1", + SecretKey: testAPIToken, + Status: mdb.ApiKeyStatusEnable, + }) e := echo.New() RegisterRoute(e) @@ -85,6 +126,11 @@ func setupTestEnv(t *testing.T) *echo.Echo { } func signBody(body map[string]interface{}) map[string]interface{} { + // Signature middleware looks up api_keys by the "pid" field and + // uses that row's secret_key as the signing bizKey. + if _, ok := body["pid"]; !ok { + body["pid"] = testAPIToken + } sig, _ := sign.Get(body, testAPIToken) body["signature"] = sig return body @@ -121,40 +167,19 @@ func doFormPost(e *echo.Echo, path string, values url.Values) *httptest.Response return rec } -// TestCreateOrderEpusdtDefaultTron tests the epusdt compatibility route defaults to tron network. -func TestCreateOrderEpusdtDefaultTron(t *testing.T) { +func TestRootPostRoute(t *testing.T) { e := setupTestEnv(t) - body := signBody(map[string]interface{}{ - "order_id": "test-tron-001", - "amount": 1.00, - "notify_url": "http://localhost/notify", - }) - - rec := doPost(e, "/payments/epusdt/v1/order/create-transaction", body) - t.Logf("Status: %d, Body: %s", rec.Code, rec.Body.String()) + req := httptest.NewRequest(http.MethodPost, "/", nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) if rec.Code != http.StatusOK { t.Fatalf("expected 200, got %d", rec.Code) } - - var resp map[string]interface{} - if err := json.Unmarshal(rec.Body.Bytes(), &resp); err != nil { - t.Fatalf("unmarshal: %v", err) + if body := rec.Body.String(); body != "hello epusdt, https://github.com/GMwalletApp/epusdt" { + t.Fatalf("unexpected body: %q", body) } - - data, ok := resp["data"].(map[string]interface{}) - if !ok { - t.Fatalf("expected data in response, got: %v", resp) - } - - if data["trade_id"] == nil || data["trade_id"] == "" { - t.Error("expected trade_id in response") - } - if data["receive_address"] != "TTestTronAddress001" { - t.Errorf("expected tron address, got: %v", data["receive_address"]) - } - t.Logf("Order created: trade_id=%v address=%v amount=%v", data["trade_id"], data["receive_address"], data["actual_amount"]) } // TestCreateOrderGmpayV1Solana tests the gmpay route with solana network. @@ -223,24 +248,6 @@ func TestCreateOrderGmpayV1SolNative(t *testing.T) { } } -func doGet(e *echo.Echo, path string) *httptest.ResponseRecorder { - req := httptest.NewRequest(http.MethodGet, path, nil) - req.Header.Set("Authorization", testAPIToken) - rec := httptest.NewRecorder() - e.ServeHTTP(rec, req) - return rec -} - -func doPostWithToken(e *echo.Echo, path string, body map[string]interface{}) *httptest.ResponseRecorder { - jsonBytes, _ := json.Marshal(body) - req := httptest.NewRequest(http.MethodPost, path, strings.NewReader(string(jsonBytes))) - req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON) - req.Header.Set("Authorization", testAPIToken) - rec := httptest.NewRecorder() - e.ServeHTTP(rec, req) - return rec -} - func parseResp(t *testing.T, rec *httptest.ResponseRecorder) map[string]interface{} { t.Helper() var resp map[string]interface{} @@ -250,6 +257,183 @@ func parseResp(t *testing.T, rec *httptest.ResponseRecorder) map[string]interfac return resp } +// signGmpayFormValues builds a signed url.Values for the GMPAY create-transaction endpoint. +// The GMPAY middleware uses "signature" (not "sign") and "pid" (not numeric pid from EPAY). +func signGmpayFormValues(values url.Values) url.Values { + if values.Get("pid") == "" { + values.Set("pid", testAPIToken) + } + params := make(map[string]interface{}) + for k, vs := range values { + if k == "signature" || len(vs) == 0 { + continue + } + params[k] = vs[0] + } + sig, _ := sign.Get(params, testAPIToken) + values.Set("signature", sig) + return values +} + +// TestCreateOrderGmpayV1FormData verifies that the GMPAY create-transaction endpoint +// accepts application/x-www-form-urlencoded in addition to JSON. +func TestCreateOrderGmpayV1FormData(t *testing.T) { + e := setupTestEnv(t) + + values := signGmpayFormValues(url.Values{ + "order_id": {"test-form-001"}, + "amount": {"1.00"}, + "token": {"usdt"}, + "currency": {"cny"}, + "network": {"solana"}, + "notify_url": {"http://localhost/notify"}, + }) + + rec := doFormPost(e, "/payments/gmpay/v1/order/create-transaction", values) + t.Logf("Status: %d, Body: %s", rec.Code, rec.Body.String()) + + if rec.Code != http.StatusOK { + t.Fatalf("expected 200, got %d: %s", rec.Code, rec.Body.String()) + } + + var resp map[string]interface{} + if err := json.Unmarshal(rec.Body.Bytes(), &resp); err != nil { + t.Fatalf("unmarshal: %v", err) + } + + data, ok := resp["data"].(map[string]interface{}) + if !ok { + t.Fatalf("expected data in response, got: %v", resp) + } + if data["trade_id"] == nil || data["trade_id"] == "" { + t.Error("expected trade_id in response") + } + t.Logf("Form-data order created: trade_id=%v", data["trade_id"]) +} + +// getSupportedNetworks is a helper that calls GET /payments/gmpay/v1/supported-assets +// and returns a map of network → []token for easy assertions. +func getSupportedNetworks(t *testing.T, e *echo.Echo) map[string][]string { + t.Helper() + req := httptest.NewRequest(http.MethodGet, "/payments/gmpay/v1/supported-assets", nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + if rec.Code != http.StatusOK { + t.Fatalf("getSupportedNetworks: status=%d body=%s", rec.Code, rec.Body.String()) + } + resp := parseResp(t, rec) + rawData, _ := resp["data"].(map[string]interface{}) + rawSupports, _ := rawData["supports"].([]interface{}) + result := make(map[string][]string, len(rawSupports)) + for _, item := range rawSupports { + row := item.(map[string]interface{}) + network := row["network"].(string) + rawTokens, _ := row["tokens"].([]interface{}) + tokens := make([]string, 0, len(rawTokens)) + for _, tok := range rawTokens { + tokens = append(tokens, tok.(string)) + } + result[network] = tokens + } + return result +} + +// TestGetSupportedAssets_ChainTokenToggle verifies that: +// - disabling a chain_token removes that token (and possibly the whole network) +// from the /supported-assets response +// - re-enabling it brings it back +func TestGetSupportedAssets_ChainTokenToggle(t *testing.T) { + e := setupTestEnv(t) + + // Baseline: tron should appear with USDT and TRX. + before := getSupportedNetworks(t, e) + if _, ok := before["tron"]; !ok { + t.Fatal("expected tron in baseline supported-assets") + } + + // Disable the tron USDT chain_token. + dao.Mdb.Model(&mdb.ChainToken{}). + Where("network = ? AND symbol = ?", "tron", "USDT"). + Update("enabled", false) + + after := getSupportedNetworks(t, e) + tronTokens := after["tron"] + for _, tok := range tronTokens { + if tok == "USDT" { + t.Fatal("USDT should be absent after disabling tron USDT chain_token") + } + } + t.Logf("After disabling tron USDT: tron tokens = %v", tronTokens) + + // Disable the tron TRX chain_token as well — now tron has no tokens → network disappears. + dao.Mdb.Model(&mdb.ChainToken{}). + Where("network = ? AND symbol = ?", "tron", "TRX"). + Update("enabled", false) + + afterAllDisabled := getSupportedNetworks(t, e) + if _, ok := afterAllDisabled["tron"]; ok { + t.Fatal("tron should disappear from supported-assets when all its chain_tokens are disabled") + } + t.Logf("After disabling all tron tokens: networks = %v", afterAllDisabled) + + // Re-enable tron USDT — tron reappears with only USDT. + dao.Mdb.Model(&mdb.ChainToken{}). + Where("network = ? AND symbol = ?", "tron", "USDT"). + Update("enabled", true) + + restored := getSupportedNetworks(t, e) + tronRestored, ok := restored["tron"] + if !ok { + t.Fatal("tron should reappear after re-enabling USDT chain_token") + } + found := false + for _, tok := range tronRestored { + if tok == "USDT" { + found = true + } + } + if !found { + t.Fatalf("expected USDT in restored tron tokens, got %v", tronRestored) + } + t.Logf("After re-enabling tron USDT: tron tokens = %v", tronRestored) +} + +// TestGetSupportedAssets_WalletAddressToggle verifies that: +// - disabling ALL wallet addresses for a network removes that network from +// the /supported-assets response (even if chain + tokens are still enabled) +// - re-enabling any address brings the network back +func TestGetSupportedAssets_WalletAddressToggle(t *testing.T) { + e := setupTestEnv(t) + + // Baseline: solana should be present. + before := getSupportedNetworks(t, e) + if _, ok := before["solana"]; !ok { + t.Fatal("expected solana in baseline supported-assets") + } + + // Disable the only solana wallet address. + dao.Mdb.Model(&mdb.WalletAddress{}). + Where("network = ?", mdb.NetworkSolana). + Update("status", mdb.TokenStatusDisable) + + after := getSupportedNetworks(t, e) + if _, ok := after["solana"]; ok { + t.Fatal("solana should disappear from supported-assets when all its wallet addresses are disabled") + } + t.Logf("After disabling solana wallets: networks = %v", after) + + // Re-enable the solana wallet. + dao.Mdb.Model(&mdb.WalletAddress{}). + Where("network = ?", mdb.NetworkSolana). + Update("status", mdb.TokenStatusEnable) + + restored := getSupportedNetworks(t, e) + if _, ok := restored["solana"]; !ok { + t.Fatal("solana should reappear after re-enabling its wallet address") + } + t.Logf("After re-enabling solana wallets: solana tokens = %v", restored["solana"]) +} + func TestGetSupportedAssetsPublic(t *testing.T) { e := setupTestEnv(t) @@ -291,239 +475,6 @@ func TestGetSupportedAssetsPublic(t *testing.T) { } } -func TestSupportedAssetCRUD(t *testing.T) { - e := setupTestEnv(t) - - // public query list (no auth) - req := httptest.NewRequest(http.MethodGet, "/payments/gmpay/v1/supported-assets/records", nil) - rec := httptest.NewRecorder() - e.ServeHTTP(rec, req) - resp := parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("public list failed: %v", resp) - } - - // create requires auth - rec = doPostWithToken(e, "/payments/gmpay/v1/supported-assets/add", map[string]interface{}{ - "network": "arb", - "token": "usdt", - "status": 1, - }) - resp = parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("add supported asset failed: %v", resp) - } - created := resp["data"].(map[string]interface{}) - assetID := fmt.Sprintf("%.0f", created["id"].(float64)) - - // get by id is public - req = httptest.NewRequest(http.MethodGet, "/payments/gmpay/v1/supported-assets/"+assetID, nil) - rec = httptest.NewRecorder() - e.ServeHTTP(rec, req) - resp = parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("public get by id failed: %v", resp) - } - - // update requires auth - rec = doPostWithToken(e, "/payments/gmpay/v1/supported-assets/"+assetID+"/update", map[string]interface{}{ - "network": "arbitrum", - "token": "usdc", - "status": 1, - }) - resp = parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("update supported asset failed: %v", resp) - } - updated := resp["data"].(map[string]interface{}) - if updated["network"] != "arbitrum" || updated["token"] != "USDC" { - t.Fatalf("unexpected updated data: %v", updated) - } - - // delete requires auth - rec = doPostWithToken(e, "/payments/gmpay/v1/supported-assets/"+assetID+"/delete", nil) - resp = parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("delete supported asset failed: %v", resp) - } - - // recreate after delete should restore soft-deleted row, not unique-conflict - rec = doPostWithToken(e, "/payments/gmpay/v1/supported-assets/add", map[string]interface{}{ - "network": "arbitrum", - "token": "usdc", - "status": 1, - }) - resp = parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("recreate after delete failed: %v", resp) - } -} - -// TestWalletAddAndList tests adding wallets via API and listing them. -func TestWalletAddAndList(t *testing.T) { - e := setupTestEnv(t) - - // Add a solana wallet - rec := doPostWithToken(e, "/payments/gmpay/v1/wallet/add", map[string]interface{}{ - "network": "solana", - "address": "NewSolWallet001", - }) - t.Logf("Add: %s", rec.Body.String()) - resp := parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("add wallet failed: %v", resp) - } - - // Add a tron wallet - rec = doPostWithToken(e, "/payments/gmpay/v1/wallet/add", map[string]interface{}{ - "network": "tron", - "address": "NewTronWallet001", - }) - resp = parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("add tron wallet failed: %v", resp) - } - - // List all wallets - rec = doGet(e, "/payments/gmpay/v1/wallet/list") - resp = parseResp(t, rec) - wallets := resp["data"].([]interface{}) - // 2 seeded + 2 added = 4 - if len(wallets) != 4 { - t.Fatalf("expected 4 wallets, got %d: %v", len(wallets), wallets) - } - - // List by network - rec = doGet(e, "/payments/gmpay/v1/wallet/list?network=solana") - resp = parseResp(t, rec) - wallets = resp["data"].([]interface{}) - if len(wallets) != 2 { - t.Fatalf("expected 2 solana wallets, got %d", len(wallets)) - } - - rec = doGet(e, "/payments/gmpay/v1/wallet/list?network=tron") - resp = parseResp(t, rec) - wallets = resp["data"].([]interface{}) - if len(wallets) != 2 { - t.Fatalf("expected 2 tron wallets, got %d", len(wallets)) - } -} - -// TestWalletDuplicateRejected tests that adding the same network+address twice fails. -func TestWalletDuplicateRejected(t *testing.T) { - e := setupTestEnv(t) - - body := map[string]interface{}{"network": "solana", "address": "DupWallet001"} - rec := doPostWithToken(e, "/payments/gmpay/v1/wallet/add", body) - resp := parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("first add failed: %v", resp) - } - - // Same network+address should fail - rec = doPostWithToken(e, "/payments/gmpay/v1/wallet/add", body) - resp = parseResp(t, rec) - if resp["status_code"].(float64) == 200 { - t.Fatal("expected duplicate to be rejected") - } - t.Logf("Duplicate rejected: %v", resp["message"]) - - // Same address, different network should succeed - rec = doPostWithToken(e, "/payments/gmpay/v1/wallet/add", map[string]interface{}{ - "network": "tron", - "address": "DupWallet001", - }) - resp = parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("same address on different network should succeed: %v", resp) - } -} - -// TestWalletStatusAndDelete tests enable/disable/delete operations. -func TestWalletStatusAndDelete(t *testing.T) { - e := setupTestEnv(t) - - // Add a wallet - rec := doPostWithToken(e, "/payments/gmpay/v1/wallet/add", map[string]interface{}{ - "network": "solana", - "address": "StatusTestWallet", - }) - resp := parseResp(t, rec) - wallet := resp["data"].(map[string]interface{}) - walletID := fmt.Sprintf("%.0f", wallet["id"].(float64)) - - // Get wallet - rec = doGet(e, "/payments/gmpay/v1/wallet/"+walletID) - resp = parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("get wallet failed: %v", resp) - } - - // Disable wallet - rec = doPostWithToken(e, "/payments/gmpay/v1/wallet/"+walletID+"/status", map[string]interface{}{ - "status": 2, - }) - resp = parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("disable wallet failed: %v", resp) - } - - // Verify disabled — should not appear in available list - rec = doGet(e, "/payments/gmpay/v1/wallet/list?network=solana") - resp = parseResp(t, rec) - wallets := resp["data"].([]interface{}) - for _, w := range wallets { - wm := w.(map[string]interface{}) - if wm["address"] == "StatusTestWallet" && wm["status"].(float64) != 2 { - t.Error("wallet should be disabled") - } - } - - // Delete wallet - rec = doPostWithToken(e, "/payments/gmpay/v1/wallet/"+walletID+"/delete", nil) - resp = parseResp(t, rec) - if resp["status_code"].(float64) != 200 { - t.Fatalf("delete wallet failed: %v", resp) - } - - // Verify deleted - rec = doGet(e, "/payments/gmpay/v1/wallet/"+walletID) - resp = parseResp(t, rec) - // Should return not found - if resp["status_code"].(float64) == 200 { - data := resp["data"].(map[string]interface{}) - if data["id"].(float64) > 0 { - t.Error("wallet should be deleted") - } - } -} - -// TestWalletAuthRequired tests that wallet APIs require auth token. -func TestWalletAuthRequired(t *testing.T) { - e := setupTestEnv(t) - - // No auth header — should not return success - req := httptest.NewRequest(http.MethodGet, "/payments/gmpay/v1/wallet/list", nil) - rec := httptest.NewRecorder() - e.ServeHTTP(rec, req) - - // The response should indicate auth failure (not 200 success) - var resp map[string]interface{} - if err := json.Unmarshal(rec.Body.Bytes(), &resp); err != nil { - // echo may return plain text error - if rec.Code == http.StatusOK { - t.Error("expected auth failure without token") - } - t.Logf("Auth rejected (non-JSON): status=%d body=%s", rec.Code, rec.Body.String()) - return - } - statusCode, _ := resp["status_code"].(float64) - if statusCode == 200 { - t.Error("expected auth failure without token") - } - t.Logf("Auth rejected: %v", resp) -} - // TestCreateOrderNetworkIsolation verifies tron and solana wallets don't mix. func TestCreateOrderNetworkIsolation(t *testing.T) { e := setupTestEnv(t) @@ -602,3 +553,159 @@ func TestEpaySubmitPhpPostFormCompatible(t *testing.T) { t.Fatalf("expected checkout redirect, got %q", rec.Header().Get("Location")) } } + +// TestCheckStatus_NotFound verifies that /pay/check-status/:trade_id returns a +// graceful JSON error (not 500) when the trade_id doesn't exist. +func TestCheckStatus_NotFound(t *testing.T) { + e := setupTestEnv(t) + req := httptest.NewRequest(http.MethodGet, "/pay/check-status/nonexistent-trade-id", nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + t.Logf("CheckStatus(not found): status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code >= 500 { + t.Fatalf("unexpected server error: %d %s", rec.Code, rec.Body.String()) + } + if rec.Code == http.StatusNotFound && rec.Body.Len() == 0 { + t.Fatalf("route returned 404 with empty body — route may not be registered") + } +} + +// TestCheckStatus_WithOrder verifies /pay/check-status/:trade_id returns 200 +// and a status field when the order exists. +func TestCheckStatus_WithOrder(t *testing.T) { + e := setupTestEnv(t) + + // Create an order first via the GMPAY route. + body := signBody(map[string]interface{}{ + "order_id": "check-status-001", + "amount": 1.00, + "token": "usdt", + "currency": "cny", + "network": "tron", + "notify_url": "http://localhost/notify", + }) + createRec := doPost(e, "/payments/gmpay/v1/order/create-transaction", body) + if createRec.Code != http.StatusOK { + t.Fatalf("create order failed: %d %s", createRec.Code, createRec.Body.String()) + } + var createResp map[string]interface{} + json.Unmarshal(createRec.Body.Bytes(), &createResp) + tradeId, _ := createResp["data"].(map[string]interface{})["trade_id"].(string) + if tradeId == "" { + t.Fatal("no trade_id in create response") + } + + // Now check status. + req := httptest.NewRequest(http.MethodGet, "/pay/check-status/"+tradeId, nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + t.Logf("CheckStatus: status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code != http.StatusOK { + t.Fatalf("expected 200, got %d: %s", rec.Code, rec.Body.String()) + } + var resp map[string]interface{} + json.Unmarshal(rec.Body.Bytes(), &resp) + if resp["data"] == nil { + t.Fatal("expected data in check-status response") + } +} + +// TestCheckoutCounter_NotFound verifies that /pay/checkout-counter/:trade_id +// with an unknown trade_id does not return an empty 404 (which would mean the +// route is not registered). When the static HTML template is present the +// controller renders it with a 404 status; when it is absent (test env) the +// controller returns a 500 with a descriptive body — both outcomes are +// acceptable because the route IS registered and functional. +func TestCheckoutCounter_NotFound(t *testing.T) { + e := setupTestEnv(t) + req := httptest.NewRequest(http.MethodGet, "/pay/checkout-counter/nonexistent-trade-id", nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + t.Logf("CheckoutCounter(not found): status=%d content-type=%s body=%s", + rec.Code, rec.Header().Get("Content-Type"), rec.Body.String()) + // A completely empty 404 means the route is not registered at all. + if rec.Code == http.StatusNotFound && rec.Body.Len() == 0 { + t.Fatalf("route not registered (404 with empty body)") + } + // A 500 whose body mentions a missing file is expected in test environments + // where the static directory is not present. + if rec.Code >= 500 && rec.Body.Len() == 0 { + t.Fatalf("unexpected server error with empty body: %d", rec.Code) + } +} + +// TestSwitchNetwork_MissingFields verifies that /pay/switch-network validates +// required fields and returns a graceful error when they are missing. +func TestSwitchNetwork_MissingFields(t *testing.T) { + e := setupTestEnv(t) + rec := doPost(e, "/pay/switch-network", map[string]interface{}{ + // trade_id, token, network are all missing + }) + t.Logf("SwitchNetwork(missing fields): status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code >= 500 { + t.Fatalf("unexpected server error: %d %s", rec.Code, rec.Body.String()) + } + // Must return a non-200 business code for validation failure. + var resp map[string]interface{} + json.Unmarshal(rec.Body.Bytes(), &resp) + if code, _ := resp["code"].(float64); code == 200 { + t.Fatal("expected validation error for missing fields, got code=200") + } +} + +// TestSwitchNetwork_OrderNotFound verifies that /pay/switch-network returns a +// graceful error when the referenced trade_id doesn't exist. +func TestSwitchNetwork_OrderNotFound(t *testing.T) { + e := setupTestEnv(t) + rec := doPost(e, "/pay/switch-network", map[string]interface{}{ + "trade_id": "nonexistent-trade-id", + "token": "USDT", + "network": "tron", + }) + t.Logf("SwitchNetwork(not found): status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code >= 500 { + t.Fatalf("unexpected server error: %d %s", rec.Code, rec.Body.String()) + } +} + +// TestSwitchNetwork_WithOrder verifies /pay/switch-network can create a +// sub-order when given a valid parent trade_id. +func TestSwitchNetwork_WithOrder(t *testing.T) { + e := setupTestEnv(t) + + // Create a parent order on solana. + createBody := signBody(map[string]interface{}{ + "order_id": "switch-net-parent-001", + "amount": 1.00, + "token": "usdt", + "currency": "cny", + "network": "solana", + "notify_url": "http://localhost/notify", + }) + createRec := doPost(e, "/payments/gmpay/v1/order/create-transaction", createBody) + if createRec.Code != http.StatusOK { + t.Fatalf("create parent order failed: %d %s", createRec.Code, createRec.Body.String()) + } + var createResp map[string]interface{} + json.Unmarshal(createRec.Body.Bytes(), &createResp) + tradeId, _ := createResp["data"].(map[string]interface{})["trade_id"].(string) + if tradeId == "" { + t.Fatal("no trade_id in create response") + } + + // Switch to tron. + rec := doPost(e, "/pay/switch-network", map[string]interface{}{ + "trade_id": tradeId, + "token": "USDT", + "network": "tron", + }) + t.Logf("SwitchNetwork(valid): status=%d body=%s", rec.Code, rec.Body.String()) + if rec.Code != http.StatusOK { + t.Fatalf("expected 200, got %d: %s", rec.Code, rec.Body.String()) + } + var resp map[string]interface{} + json.Unmarshal(rec.Body.Bytes(), &resp) + if resp["data"] == nil { + t.Fatal("expected data in switch-network response") + } +} diff --git a/src/task/listen.go b/src/task/listen.go index d7881f0..36b4a05 100644 --- a/src/task/listen.go +++ b/src/task/listen.go @@ -1,12 +1,14 @@ package task import ( - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/util/log" "github.com/robfig/cron/v3" ) func Start() { log.Sugar.Info("[task] Starting task scheduler...") + // The ETH listener short-circuits internally when chain is disabled + // or no tokens are configured, so always launch the goroutine. go StartEthereumWebSocketListener() go StartBscWebSocketListener() go StartPolygonWebSocketListener() @@ -14,13 +16,13 @@ func Start() { go StartTronBlockScannerListener() c := cron.New() - // solana钱包监听 - _, err := c.AddJob("@every 5s", ListenSolJob{}) + // RPC node health checks + _, err := c.AddJob("@every 30s", RpcHealthJob{}) if err != nil { - log.Sugar.Errorf("[task] Failed to add ListenSolJob: %v", err) + log.Sugar.Errorf("[task] Failed to add RpcHealthJob: %v", err) return } - log.Sugar.Info("[task] ListenSolJob scheduled successfully (@every 5s)") + log.Sugar.Info("[task] RpcHealthJob scheduled successfully (@every 30s)") c.Start() log.Sugar.Info("[task] Task scheduler started") } diff --git a/src/task/listen_bsc.go b/src/task/listen_bsc.go index 4990c7e..13e568b 100644 --- a/src/task/listen_bsc.go +++ b/src/task/listen_bsc.go @@ -7,10 +7,10 @@ import ( "sync/atomic" "time" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/service" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/service" + "github.com/GMWalletApp/epusdt/util/log" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" @@ -18,19 +18,30 @@ import ( "github.com/ethereum/go-ethereum/ethclient" ) -var ( - // USDT / USDC 合约地址(BSC 主网) - bscUsdtContract = common.HexToAddress("0x55d398326f99059fF775485246999027B3197955") - bscUsdcContract = common.HexToAddress("0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d") -) - type bscRecipientSnapshot struct { addrs map[string]struct{} } var bscWatchedRecipients atomic.Pointer[bscRecipientSnapshot] +// StartBscWebSocketListener drives the BSC listener. Checks chain +// enable status and reloads contract addresses from chain_tokens every +// 10s so admin-side toggles take effect without a restart. func StartBscWebSocketListener() { + for { + if data.IsChainEnabled(mdb.NetworkBsc) { + if contracts := loadChainTokenContracts(mdb.NetworkBsc, "[BSC-WS]"); len(contracts) > 0 { + runBscListener(contracts) + } + } + time.Sleep(10 * time.Second) + } +} + +func runBscListener(contracts []common.Address) { + ctx, cancel := chainEnabledWatchdog(mdb.NetworkBsc, "[BSC-WS]", chainTokenFingerprint(mdb.NetworkBsc)) + defer cancel() + wallets, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkBsc) if err != nil { log.Sugar.Errorf("[BSC-WS] Failed to get wallet addresses: %v", err) @@ -40,25 +51,33 @@ func StartBscWebSocketListener() { go func() { ticker := time.NewTicker(5 * time.Second) defer ticker.Stop() - for range ticker.C { - w, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkBsc) - if err != nil { - log.Sugar.Warnf("[BSC-WS] refresh wallet addresses: %v", err) - continue + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + w, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkBsc) + if err != nil { + log.Sugar.Warnf("[BSC-WS] refresh wallet addresses: %v", err) + continue + } + storeBscRecipientsFromWallets(w) } - storeBscRecipientsFromWallets(w) } }() - wsURL := "wss://bsc.drpc.org" + + wsURL, ok := resolveChainWsURL(mdb.NetworkBsc, "[BSC-WS]") + if !ok { + return + } + log.Sugar.Infof("[BSC-WS] connecting to %s watching %d contract(s)", wsURL, len(contracts)) + query := ethereum.FilterQuery{ - Addresses: []common.Address{ - bscUsdtContract, - bscUsdcContract, - }, - Topics: [][]common.Hash{}, + Addresses: contracts, + Topics: [][]common.Hash{}, } - runEvmWsLogListener("[BSC-WS]", wsURL, query, func(client *ethclient.Client, vLog types.Log) { + runEvmWsLogListener(ctx, "[BSC-WS]", wsURL, query, func(client *ethclient.Client, vLog types.Log) { if len(vLog.Topics) < 3 { return } diff --git a/src/task/listen_chain_common.go b/src/task/listen_chain_common.go new file mode 100644 index 0000000..1c93447 --- /dev/null +++ b/src/task/listen_chain_common.go @@ -0,0 +1,111 @@ +package task + +import ( + "context" + "sort" + "strings" + "time" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/util/log" + + "github.com/ethereum/go-ethereum/common" +) + +// chainEnabledWatchdog returns a cancellable context whose cancel() is +// invoked when either: +// 1. IsChainEnabled(network) returns false — admin disabled the chain +// 2. The enabled-token fingerprint changes — admin added/removed/ +// toggled a chain_tokens row for this network +// +// Both cases need the listener to exit so the outer loop can reconnect +// with the fresh token set (EVM WebSocket subscriptions are fixed at +// connect time; to pick up a new contract we must re-subscribe). +// +// initialFingerprint is the fingerprint computed BEFORE connecting; the +// watchdog compares every 10s tick against this baseline. Caller must +// defer the returned cancel func to release the goroutine. +func chainEnabledWatchdog(network, logPrefix, initialFingerprint string) (context.Context, context.CancelFunc) { + ctx, cancel := context.WithCancel(context.Background()) + go func() { + ticker := time.NewTicker(10 * time.Second) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + if !data.IsChainEnabled(network) { + log.Sugar.Infof("%s chain disabled, stopping listener", logPrefix) + cancel() + return + } + if fp := chainTokenFingerprint(network); fp != initialFingerprint { + log.Sugar.Infof("%s chain_tokens changed (was %q → now %q), reconnecting", logPrefix, initialFingerprint, fp) + cancel() + return + } + } + } + }() + return ctx, cancel +} + +// chainTokenFingerprint returns a stable string representing the +// enabled-token set for a network. Used by chainEnabledWatchdog to +// detect admin changes between polls. +func chainTokenFingerprint(network string) string { + tokens, err := data.ListEnabledChainTokensByNetwork(network) + if err != nil { + return "" + } + parts := make([]string, 0, len(tokens)) + for _, t := range tokens { + parts = append(parts, strings.ToLower(strings.TrimSpace(t.ContractAddress))+"|"+strings.ToUpper(strings.TrimSpace(t.Symbol))) + } + sort.Strings(parts) + return strings.Join(parts, ",") +} + +// loadChainTokenContracts reads enabled tokens for a network and returns +// their contract addresses as ethereum-go common.Address values. Rows +// with blank contract_address (e.g. Solana native SOL marker) are +// skipped. Callers use the length to decide whether to connect or idle. +func loadChainTokenContracts(network, logPrefix string) []common.Address { + tokens, err := data.ListEnabledChainTokensByNetwork(network) + if err != nil { + log.Sugar.Errorf("%s load chain_tokens err=%v", logPrefix, err) + return nil + } + addrs := make([]common.Address, 0, len(tokens)) + for _, t := range tokens { + c := strings.TrimSpace(t.ContractAddress) + if c == "" { + continue + } + addrs = append(addrs, common.HexToAddress(c)) + } + return addrs +} + +// resolveChainWsURL picks a healthy WS endpoint from rpc_nodes for the +// given network. If no enabled node is configured, the caller skips the +// current listener run so admin-side disabled/deleted rows are respected. +func resolveChainWsURL(network, logPrefix string) (string, bool) { + node, err := data.SelectRpcNode(network, mdb.RpcNodeTypeWs) + if err == nil && node != nil && node.ID > 0 { + rpcURL := strings.TrimSpace(node.Url) + if rpcURL != "" { + return rpcURL, true + } + log.Sugar.Errorf("%s rpc_nodes id=%d has empty url", logPrefix, node.ID) + return "", false + } + if err != nil { + log.Sugar.Errorf("%s resolve rpc_nodes err=%v", logPrefix, err) + } else { + log.Sugar.Warnf("%s no enabled %s WS RPC node configured in rpc_nodes", logPrefix, network) + } + return "", false +} diff --git a/src/task/listen_chain_common_test.go b/src/task/listen_chain_common_test.go new file mode 100644 index 0000000..90e08e0 --- /dev/null +++ b/src/task/listen_chain_common_test.go @@ -0,0 +1,67 @@ +package task + +import ( + "testing" + + "github.com/GMWalletApp/epusdt/internal/testutil" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/mdb" +) + +func TestResolveChainWsURLRequiresEnabledRpcNode(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + if got, ok := resolveChainWsURL(mdb.NetworkEthereum, "[TEST]"); ok { + t.Fatalf("resolveChainWsURL() = (%q, true), want false", got) + } +} + +func TestResolveChainWsURLWithRow(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + node := &mdb.RpcNode{ + Network: mdb.NetworkEthereum, + Url: " wss://ethereum.example.com ", + Type: mdb.RpcNodeTypeWs, + Weight: 1, + Enabled: true, + Status: mdb.RpcNodeStatusOk, + } + if err := dao.Mdb.Create(node).Error; err != nil { + t.Fatalf("seed rpc_node: %v", err) + } + + got, ok := resolveChainWsURL(mdb.NetworkEthereum, "[TEST]") + if !ok { + t.Fatalf("resolveChainWsURL() ok=false, want true") + } + if got != "wss://ethereum.example.com" { + t.Fatalf("resolveChainWsURL() = %q, want wss://ethereum.example.com", got) + } +} + +func TestResolveChainWsURLDisabledRow(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + node := &mdb.RpcNode{ + Network: mdb.NetworkEthereum, + Url: "wss://disabled.example.com", + Type: mdb.RpcNodeTypeWs, + Weight: 1, + Enabled: true, + Status: mdb.RpcNodeStatusOk, + } + if err := dao.Mdb.Create(node).Error; err != nil { + t.Fatalf("seed rpc_node: %v", err) + } + if err := dao.Mdb.Model(node).Update("enabled", false).Error; err != nil { + t.Fatalf("disable rpc_node: %v", err) + } + + if got, ok := resolveChainWsURL(mdb.NetworkEthereum, "[TEST]"); ok { + t.Fatalf("resolveChainWsURL() = (%q, true), want false", got) + } +} diff --git a/src/task/listen_eth.go b/src/task/listen_eth.go index d04bada..b39e69a 100644 --- a/src/task/listen_eth.go +++ b/src/task/listen_eth.go @@ -7,10 +7,10 @@ import ( "sync/atomic" "time" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/service" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/service" + "github.com/GMWalletApp/epusdt/util/log" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" @@ -18,15 +18,8 @@ import ( "github.com/ethereum/go-ethereum/ethclient" ) -var ( - - // USDT / USDC 合约地址(ETH 主网) - usdtContract = common.HexToAddress("0xdAC17F958D2ee523a2206206994597C13D831ec7") - usdcContract = common.HexToAddress("0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48") - - // Transfer 事件签名 - transferEventHash = common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef") -) +// Transfer 事件签名 — ERC-20 signature, same on every EVM chain. +var transferEventHash = common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef") type ethRecipientSnapshot struct { addrs map[string]struct{} @@ -35,47 +28,71 @@ type ethRecipientSnapshot struct { var ethWatchedRecipients atomic.Pointer[ethRecipientSnapshot] func StartEthereumWebSocketListener() { + // Wait until the chain is enabled AND at least one token contract + // is configured. Polls every 10s so admin-side toggles kick in + // without a restart. Once conditions are met we proceed to connect; + // if the websocket later drops we exit the loop and rely on the + // process-level restart to reconnect (same as before this refactor). + for { + if data.IsChainEnabled(mdb.NetworkEthereum) { + if contracts := loadChainTokenContracts(mdb.NetworkEthereum, "[ETH-WS]"); len(contracts) > 0 { + runEthereumListener(contracts) + } + } + time.Sleep(10 * time.Second) + } +} + +func runEthereumListener(contracts []common.Address) { + ctx, cancel := chainEnabledWatchdog(mdb.NetworkEthereum, "[ETH-WS]", chainTokenFingerprint(mdb.NetworkEthereum)) + defer cancel() + wallets, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkEthereum) if err != nil { - log.Sugar.Errorf("Failed to get wallet addresses: %v", err) + log.Sugar.Errorf("[ETH-WS] Failed to get wallet addresses: %v", err) return } StoreEthRecipientsFromWallets(wallets) go func() { ticker := time.NewTicker(5 * time.Second) defer ticker.Stop() - for range ticker.C { - w, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkEthereum) - if err != nil { - log.Sugar.Warnf("[ETH-WS] refresh wallet addresses: %v", err) - continue + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + w, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkEthereum) + if err != nil { + log.Sugar.Warnf("[ETH-WS] refresh wallet addresses: %v", err) + continue + } + StoreEthRecipientsFromWallets(w) } - StoreEthRecipientsFromWallets(w) } }() - wsURL := "wss://ethereum.publicnode.com" + + wsURL, ok := resolveChainWsURL(mdb.NetworkEthereum, "[ETH-WS]") + if !ok { + return + } + log.Sugar.Infof("[ETH-WS] connecting to %s watching %d contract(s)", wsURL, len(contracts)) + query := ethereum.FilterQuery{ - Addresses: []common.Address{ - usdtContract, - usdcContract, - }, - Topics: [][]common.Hash{}, + Addresses: contracts, + Topics: [][]common.Hash{}, } - runEvmWsLogListener("[ETH-WS]", wsURL, query, func(client *ethclient.Client, vLog types.Log) { + runEvmWsLogListener(ctx, "[ETH-WS]", wsURL, query, func(client *ethclient.Client, vLog types.Log) { if len(vLog.Topics) < 3 { return } - event := vLog.Topics[0].String() if event != transferEventHash.String() { return } amount := new(big.Int).SetBytes(vLog.Data) - toAddr := common.HexToAddress(vLog.Topics[2].Hex()) - if !isWatchedEthRecipient(toAddr) { return } @@ -114,19 +131,3 @@ func isWatchedEthRecipient(to common.Address) bool { _, ok := snap.addrs[strings.ToLower(to.Hex())] return ok } - -func formatAmount(amount *big.Int, decimals int) string { - f := new(big.Float).SetInt(amount) - divisor := new(big.Float).SetFloat64(float64Pow(10, decimals)) - result := new(big.Float).Quo(f, divisor) - - return result.Text('f', 6) -} - -func float64Pow(a, b int) float64 { - result := 1.0 - for i := 0; i < b; i++ { - result *= float64(a) - } - return result -} diff --git a/src/task/listen_evm_ws.go b/src/task/listen_evm_ws.go index 087b1f7..ad62e47 100644 --- a/src/task/listen_evm_ws.go +++ b/src/task/listen_evm_ws.go @@ -4,14 +4,19 @@ import ( "context" "time" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/util/log" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" ) -func runEvmWsLogListener(logPrefix, wsURL string, query ethereum.FilterQuery, handleLog func(*ethclient.Client, types.Log)) { +// runEvmWsLogListener connects to wsURL, subscribes to Transfer logs, +// and dispatches each log to handleLog. It retries on transient errors +// with exponential backoff. The ctx lets the caller trigger a clean +// exit — e.g. when admin disables the chain, the caller cancels the +// context and the function returns instead of reconnecting forever. +func runEvmWsLogListener(ctx context.Context, logPrefix, wsURL string, query ethereum.FilterQuery, handleLog func(*ethclient.Client, types.Log)) { const ( minBackoff = 2 * time.Second maxBackoff = 60 * time.Second @@ -20,34 +25,47 @@ func runEvmWsLogListener(logPrefix, wsURL string, query ethereum.FilterQuery, ha failWait := minBackoff for { + if ctx.Err() != nil { + return + } + client, err := ethclient.Dial(wsURL) if err != nil { log.Sugar.Warnf("%s dial: %v, retry in %s", logPrefix, err, failWait) - time.Sleep(failWait) + if !sleepOrDone(ctx, failWait) { + return + } failWait = nextBackoff(failWait, maxBackoff) continue } logsCh := make(chan types.Log) - sub, err := client.SubscribeFilterLogs(context.Background(), query, logsCh) + sub, err := client.SubscribeFilterLogs(ctx, query, logsCh) if err != nil { client.Close() log.Sugar.Warnf("%s subscribe: %v, retry in %s", logPrefix, err, failWait) - time.Sleep(failWait) + if !sleepOrDone(ctx, failWait) { + return + } failWait = nextBackoff(failWait, maxBackoff) continue } failWait = minBackoff - log.Sugar.Infof("%s connected, subscribed to USDT/USDC Transfer logs", logPrefix) + log.Sugar.Infof("%s connected, subscribed to Transfer logs", logPrefix) - recvLoop(client, sub, logsCh, logPrefix, handleLog) + recvLoop(ctx, client, sub, logsCh, logPrefix, handleLog) - time.Sleep(rejoinWait) + if ctx.Err() != nil { + return + } + if !sleepOrDone(ctx, rejoinWait) { + return + } } } -func recvLoop(client *ethclient.Client, sub ethereum.Subscription, logsCh <-chan types.Log, logPrefix string, handleLog func(*ethclient.Client, types.Log)) { +func recvLoop(ctx context.Context, client *ethclient.Client, sub ethereum.Subscription, logsCh <-chan types.Log, logPrefix string, handleLog func(*ethclient.Client, types.Log)) { defer func() { sub.Unsubscribe() client.Close() @@ -55,6 +73,9 @@ func recvLoop(client *ethclient.Client, sub ethereum.Subscription, logsCh <-chan for { select { + case <-ctx.Done(): + log.Sugar.Infof("%s context cancelled, stopping", logPrefix) + return case err := <-sub.Err(): if err != nil { log.Sugar.Warnf("%s subscription error: %v, reconnecting", logPrefix, err) @@ -72,6 +93,20 @@ func recvLoop(client *ethclient.Client, sub ethereum.Subscription, logsCh <-chan } } +// sleepOrDone waits for d or for ctx cancellation, whichever comes +// first. Returns true if the sleep completed normally, false if ctx +// was cancelled (caller should exit). +func sleepOrDone(ctx context.Context, d time.Duration) bool { + t := time.NewTimer(d) + defer t.Stop() + select { + case <-ctx.Done(): + return false + case <-t.C: + return true + } +} + func nextBackoff(cur, max time.Duration) time.Duration { n := cur * 2 if n > max { diff --git a/src/task/listen_plasma.go b/src/task/listen_plasma.go index 9b44703..09fce31 100644 --- a/src/task/listen_plasma.go +++ b/src/task/listen_plasma.go @@ -7,10 +7,10 @@ import ( "sync/atomic" "time" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/service" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/service" + "github.com/GMWalletApp/epusdt/util/log" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" @@ -18,17 +18,29 @@ import ( "github.com/ethereum/go-ethereum/ethclient" ) -var ( - plasmaUsdt0Contract = common.HexToAddress("0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb") -) - type plasmaRecipientSnapshot struct { addrs map[string]struct{} } var plasmaWatchedRecipients atomic.Pointer[plasmaRecipientSnapshot] +// StartPlasmaWebSocketListener drives the Plasma listener with dynamic +// chain/token config reload every 10s. func StartPlasmaWebSocketListener() { + for { + if data.IsChainEnabled(mdb.NetworkPlasma) { + if contracts := loadChainTokenContracts(mdb.NetworkPlasma, "[PLASMA-WS]"); len(contracts) > 0 { + runPlasmaListener(contracts) + } + } + time.Sleep(10 * time.Second) + } +} + +func runPlasmaListener(contracts []common.Address) { + ctx, cancel := chainEnabledWatchdog(mdb.NetworkPlasma, "[PLASMA-WS]", chainTokenFingerprint(mdb.NetworkPlasma)) + defer cancel() + wallets, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkPlasma) if err != nil { log.Sugar.Errorf("[PLASMA-WS] Failed to get wallet addresses: %v", err) @@ -38,23 +50,33 @@ func StartPlasmaWebSocketListener() { go func() { ticker := time.NewTicker(5 * time.Second) defer ticker.Stop() - for range ticker.C { - w, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkPlasma) - if err != nil { - log.Sugar.Warnf("[PLASMA-WS] refresh wallet addresses: %v", err) - continue + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + w, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkPlasma) + if err != nil { + log.Sugar.Warnf("[PLASMA-WS] refresh wallet addresses: %v", err) + continue + } + storePlasmaRecipientsFromWallets(w) } - storePlasmaRecipientsFromWallets(w) } }() - // 文档提供 https://rpc.plasma.to;常见实现同主机 wss - wsURL := "wss://rpc.plasma.to" + + wsURL, ok := resolveChainWsURL(mdb.NetworkPlasma, "[PLASMA-WS]") + if !ok { + return + } + log.Sugar.Infof("[PLASMA-WS] connecting to %s watching %d contract(s)", wsURL, len(contracts)) + query := ethereum.FilterQuery{ - Addresses: []common.Address{plasmaUsdt0Contract}, + Addresses: contracts, Topics: [][]common.Hash{}, } - runEvmWsLogListener("[PLASMA-WS]", wsURL, query, func(client *ethclient.Client, vLog types.Log) { + runEvmWsLogListener(ctx, "[PLASMA-WS]", wsURL, query, func(client *ethclient.Client, vLog types.Log) { if len(vLog.Topics) < 3 { return } diff --git a/src/task/listen_polygon.go b/src/task/listen_polygon.go index 90aba84..5685e07 100644 --- a/src/task/listen_polygon.go +++ b/src/task/listen_polygon.go @@ -7,10 +7,10 @@ import ( "sync/atomic" "time" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/service" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/service" + "github.com/GMWalletApp/epusdt/util/log" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" @@ -18,20 +18,29 @@ import ( "github.com/ethereum/go-ethereum/ethclient" ) -var ( - // Polygon PoS 主网 USDT / USDC(原生)/ USDC.e(桥接) - polygonUsdtContract = common.HexToAddress("0xc2132D05D31c914a87C6611C10748AEb04B58e8F") - polygonUsdcContract = common.HexToAddress("0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359") - polygonUsdcEContract = common.HexToAddress("0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174") -) - type polygonRecipientSnapshot struct { addrs map[string]struct{} } var polygonWatchedRecipients atomic.Pointer[polygonRecipientSnapshot] +// StartPolygonWebSocketListener drives the Polygon listener with +// dynamic chain/token config reload every 10s. func StartPolygonWebSocketListener() { + for { + if data.IsChainEnabled(mdb.NetworkPolygon) { + if contracts := loadChainTokenContracts(mdb.NetworkPolygon, "[POLYGON-WS]"); len(contracts) > 0 { + runPolygonListener(contracts) + } + } + time.Sleep(10 * time.Second) + } +} + +func runPolygonListener(contracts []common.Address) { + ctx, cancel := chainEnabledWatchdog(mdb.NetworkPolygon, "[POLYGON-WS]", chainTokenFingerprint(mdb.NetworkPolygon)) + defer cancel() + wallets, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkPolygon) if err != nil { log.Sugar.Errorf("[POLYGON-WS] Failed to get wallet addresses: %v", err) @@ -41,26 +50,33 @@ func StartPolygonWebSocketListener() { go func() { ticker := time.NewTicker(5 * time.Second) defer ticker.Stop() - for range ticker.C { - w, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkPolygon) - if err != nil { - log.Sugar.Warnf("[POLYGON-WS] refresh wallet addresses: %v", err) - continue + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + w, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkPolygon) + if err != nil { + log.Sugar.Warnf("[POLYGON-WS] refresh wallet addresses: %v", err) + continue + } + storePolygonRecipientsFromWallets(w) } - storePolygonRecipientsFromWallets(w) } }() - wsURL := "wss://polygon-bor-rpc.publicnode.com" + + wsURL, ok := resolveChainWsURL(mdb.NetworkPolygon, "[POLYGON-WS]") + if !ok { + return + } + log.Sugar.Infof("[POLYGON-WS] connecting to %s watching %d contract(s)", wsURL, len(contracts)) + query := ethereum.FilterQuery{ - Addresses: []common.Address{ - polygonUsdtContract, - polygonUsdcContract, - polygonUsdcEContract, - }, - Topics: [][]common.Hash{}, + Addresses: contracts, + Topics: [][]common.Hash{}, } - runEvmWsLogListener("[POLYGON-WS]", wsURL, query, func(client *ethclient.Client, vLog types.Log) { + runEvmWsLogListener(ctx, "[POLYGON-WS]", wsURL, query, func(client *ethclient.Client, vLog types.Log) { if len(vLog.Topics) < 3 { return } diff --git a/src/task/listen_sol_job.go b/src/task/listen_sol_job.go index ee05549..cc2fd45 100644 --- a/src/task/listen_sol_job.go +++ b/src/task/listen_sol_job.go @@ -3,10 +3,10 @@ package task import ( "sync" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" - "github.com/assimon/luuu/model/service" - "github.com/assimon/luuu/util/log" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/model/service" + "github.com/GMWalletApp/epusdt/util/log" ) type ListenSolJob struct{} @@ -17,6 +17,10 @@ func (r ListenSolJob) Run() { gListenSolJobLock.Lock() defer gListenSolJobLock.Unlock() log.Sugar.Debug("[ListenSolJob] Job triggered") + if !data.IsChainEnabled(mdb.NetworkSolana) { + log.Sugar.Debug("[ListenSolJob] chain disabled, skipping") + return + } walletAddress, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkSolana) if err != nil { log.Sugar.Errorf("[ListenSolJob] Failed to get wallet addresses: %v", err) diff --git a/src/task/listen_trc20_block.go b/src/task/listen_trc20_block.go index 0497fa3..0536184 100644 --- a/src/task/listen_trc20_block.go +++ b/src/task/listen_trc20_block.go @@ -11,10 +11,9 @@ import ( "strings" "time" - "github.com/assimon/luuu/config" - tron "github.com/assimon/luuu/crypto" - "github.com/assimon/luuu/model/service" - "github.com/assimon/luuu/util/log" + tron "github.com/GMWalletApp/epusdt/crypto" + "github.com/GMWalletApp/epusdt/model/service" + "github.com/GMWalletApp/epusdt/util/log" ) const ( @@ -124,9 +123,6 @@ func doPost(url string, body interface{}) ([]byte, error) { } req.Header.Set("Content-Type", "application/json") req.Header.Set("Accept", "application/json") - if k := strings.TrimSpace(config.TRON_GRID_API_KEY); k != "" { - req.Header.Set("TRON-PRO-API-KEY", k) - } resp, err := httpClient.Do(req) if err != nil { diff --git a/src/task/rpc_health_job.go b/src/task/rpc_health_job.go new file mode 100644 index 0000000..34ed4d9 --- /dev/null +++ b/src/task/rpc_health_job.go @@ -0,0 +1,97 @@ +package task + +import ( + "net" + "net/url" + "strings" + "sync" + "time" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/GMWalletApp/epusdt/util/log" +) + +const rpcProbeTimeout = 5 * time.Second + +// RpcHealthJob periodically probes every enabled rpc_nodes row and +// writes status/last_latency_ms. Results drive SelectRpcNode weighted +// picking at runtime. +type RpcHealthJob struct{} + +var gRpcHealthJobLock sync.Mutex + +func (r RpcHealthJob) Run() { + gRpcHealthJobLock.Lock() + defer gRpcHealthJobLock.Unlock() + + nodes, err := data.ListRpcNodes("") + if err != nil { + log.Sugar.Errorf("[rpc-health] list nodes err=%v", err) + return + } + var wg sync.WaitGroup + for i := range nodes { + if !nodes[i].Enabled { + continue + } + wg.Add(1) + go func(n mdb.RpcNode) { + defer wg.Done() + status, latency := ProbeNode(n.Url) + if err := data.UpdateRpcNodeHealth(n.ID, status, latency); err != nil { + log.Sugar.Warnf("[rpc-health] update node %d err=%v", n.ID, err) + } + }(nodes[i]) + } + wg.Wait() +} + +// ProbeNode does a TCP dial to the RPC URL and returns (status, latencyMs). +// Exported so the admin controller can reuse it without duplicating logic. +func ProbeNode(rawURL string) (string, int) { + addr, err := ParseAddress(rawURL) + if err != nil { + return mdb.RpcNodeStatusDown, -1 + } + dur, err := MeasureTCPDial(addr, rpcProbeTimeout) + if err != nil { + return mdb.RpcNodeStatusDown, -1 + } + return mdb.RpcNodeStatusOk, int(dur.Milliseconds()) +} + +func ParseAddress(raw string) (string, error) { + if !strings.Contains(raw, "://") { + raw = "tcp://" + raw + } + + u, err := url.Parse(raw) + if err != nil { + return "", err + } + + host := u.Hostname() + port := u.Port() + if port == "" { + switch u.Scheme { + case "https", "wss": + port = "443" + default: + port = "80" + } + } + + return host + ":" + port, nil +} + +func MeasureTCPDial(addr string, timeout time.Duration) (time.Duration, error) { + start := time.Now() + conn, err := net.DialTimeout("tcp", addr, timeout) + if err != nil { + return 0, err + } + defer conn.Close() + + return time.Since(start), nil +} diff --git a/src/task/rpc_health_job_test.go b/src/task/rpc_health_job_test.go new file mode 100644 index 0000000..7ae2f71 --- /dev/null +++ b/src/task/rpc_health_job_test.go @@ -0,0 +1,194 @@ +package task + +import ( + "net" + "strconv" + "testing" + "time" + + "github.com/GMWalletApp/epusdt/model/mdb" +) + +// --------------- ParseAddress --------------- + +func TestParseAddress_HttpWithPort(t *testing.T) { + got, err := ParseAddress("http://api.trongrid.io:8090") + if err != nil { + t.Fatal(err) + } + if got != "api.trongrid.io:8090" { + t.Fatalf("want api.trongrid.io:8090, got %s", got) + } +} + +func TestParseAddress_HttpDefaultPort(t *testing.T) { + got, err := ParseAddress("http://api.trongrid.io") + if err != nil { + t.Fatal(err) + } + if got != "api.trongrid.io:80" { + t.Fatalf("want api.trongrid.io:80, got %s", got) + } +} + +func TestParseAddress_HttpsDefaultPort(t *testing.T) { + got, err := ParseAddress("https://api.trongrid.io") + if err != nil { + t.Fatal(err) + } + if got != "api.trongrid.io:443" { + t.Fatalf("want api.trongrid.io:443, got %s", got) + } +} + +func TestParseAddress_WssDefaultPort(t *testing.T) { + got, err := ParseAddress("wss://bsc-ws-node.nariox.org") + if err != nil { + t.Fatal(err) + } + if got != "bsc-ws-node.nariox.org:443" { + t.Fatalf("want bsc-ws-node.nariox.org:443, got %s", got) + } +} + +func TestParseAddress_WsDefaultPort(t *testing.T) { + got, err := ParseAddress("ws://localhost") + if err != nil { + t.Fatal(err) + } + if got != "localhost:80" { + t.Fatalf("want localhost:80, got %s", got) + } +} + +func TestParseAddress_WsWithPort(t *testing.T) { + got, err := ParseAddress("ws://localhost:9650") + if err != nil { + t.Fatal(err) + } + if got != "localhost:9650" { + t.Fatalf("want localhost:9650, got %s", got) + } +} + +func TestParseAddress_BareHostPort(t *testing.T) { + got, err := ParseAddress("10.0.0.1:8545") + if err != nil { + t.Fatal(err) + } + if got != "10.0.0.1:8545" { + t.Fatalf("want 10.0.0.1:8545, got %s", got) + } +} + +func TestParseAddress_BareHostNoPort(t *testing.T) { + got, err := ParseAddress("example.com") + if err != nil { + t.Fatal(err) + } + if got != "example.com:80" { + t.Fatalf("want example.com:80, got %s", got) + } +} + +func TestParseAddress_WithPath(t *testing.T) { + got, err := ParseAddress("https://mainnet.infura.io/v3/KEY123") + if err != nil { + t.Fatal(err) + } + if got != "mainnet.infura.io:443" { + t.Fatalf("want mainnet.infura.io:443, got %s", got) + } +} + +// --------------- MeasureTCPDial --------------- + +func TestMeasureTCPDial_Success(t *testing.T) { + // start a local TCP listener + ln, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + defer ln.Close() + + dur, err := MeasureTCPDial(ln.Addr().String(), 2*time.Second) + if err != nil { + t.Fatalf("dial should succeed: %v", err) + } + if dur <= 0 { + t.Fatalf("duration should be positive, got %v", dur) + } +} + +func TestMeasureTCPDial_Refused(t *testing.T) { + // pick a port that is almost certainly not listening + _, err := MeasureTCPDial("127.0.0.1:1", 500*time.Millisecond) + if err == nil { + t.Fatal("dial to closed port should fail") + } +} + +func TestMeasureTCPDial_RespectsTimeout(t *testing.T) { + // Start a listener but never accept — the dial handshake will hang + // until the timeout fires. + ln, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + defer ln.Close() + + // Set backlog to 0 by not calling Accept and filling the queue. + // Connect once to fill the backlog, then the next dial should stall. + conn, err := net.Dial("tcp", ln.Addr().String()) + if err != nil { + t.Skip("could not saturate backlog, skipping") + } + defer conn.Close() + + // Use a very short timeout to verify it doesn't hang forever. + _, dialErr := MeasureTCPDial(ln.Addr().String(), 100*time.Millisecond) + // This may succeed (kernel allows queued connections) or timeout — both + // are acceptable. We just verify it returns within a sane window. + _ = dialErr +} + +// --------------- ProbeNode --------------- + +func TestProbeNode_Reachable(t *testing.T) { + ln, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + defer ln.Close() + + port := ln.Addr().(*net.TCPAddr).Port + url := "http://127.0.0.1:" + strconv.Itoa(port) + + status, latency := ProbeNode(url) + if status != mdb.RpcNodeStatusOk { + t.Fatalf("want ok, got %s", status) + } + if latency < 0 { + t.Fatalf("latency should be >= 0, got %d", latency) + } +} + +func TestProbeNode_Unreachable(t *testing.T) { + status, latency := ProbeNode("http://127.0.0.1:1") + if status != mdb.RpcNodeStatusDown { + t.Fatalf("want down, got %s", status) + } + if latency != -1 { + t.Fatalf("want -1, got %d", latency) + } +} + +func TestProbeNode_InvalidURL(t *testing.T) { + status, latency := ProbeNode("://bad") + if status != mdb.RpcNodeStatusDown { + t.Fatalf("want down, got %s", status) + } + if latency != -1 { + t.Fatalf("want -1, got %d", latency) + } +} diff --git a/src/telegram/handle.go b/src/telegram/handle.go index 95522df..f622634 100644 --- a/src/telegram/handle.go +++ b/src/telegram/handle.go @@ -7,8 +7,8 @@ import ( "sync" "time" - "github.com/assimon/luuu/model/data" - "github.com/assimon/luuu/model/mdb" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" "github.com/gookit/goutil/mathutil" "github.com/gookit/goutil/strutil" tb "gopkg.in/telebot.v3" @@ -122,7 +122,9 @@ func WalletList(c tb.Context) error { InlineKeyboard: rows, }) }) - btnList = append(btnList, []tb.InlineButton{addBtn}) + refreshBtn := tb.InlineButton{Text: "刷新列表", Unique: "WalletRefresh"} + bots.Handle(&refreshBtn, WalletList) + btnList = append(btnList, []tb.InlineButton{addBtn, refreshBtn}) return c.EditOrSend("请选择钱包继续操作", &tb.ReplyMarkup{ InlineKeyboard: btnList, @@ -257,21 +259,15 @@ func getPendingWalletAddressState(userID int64) (pendingWalletAddressState, bool } func getEnabledSupportedNetworks() ([]string, error) { - assets, err := data.ListEnabledSupportedAssets() + chains, err := data.ListEnabledChains() if err != nil { return nil, err } - set := make(map[string]struct{}) - for _, a := range assets { - n := strings.ToLower(strings.TrimSpace(a.Network)) - if n == "" { - continue + networks := make([]string, 0, len(chains)) + for _, ch := range chains { + if n := strings.ToLower(strings.TrimSpace(ch.Network)); n != "" { + networks = append(networks, n) } - set[n] = struct{}{} - } - networks := make([]string, 0, len(set)) - for n := range set { - networks = append(networks, n) } sort.Strings(networks) return networks, nil diff --git a/src/telegram/telegram.go b/src/telegram/telegram.go index 7410a55..cf8c165 100644 --- a/src/telegram/telegram.go +++ b/src/telegram/telegram.go @@ -1,66 +1,120 @@ package telegram import ( - "github.com/assimon/luuu/config" - "github.com/assimon/luuu/util/log" + "fmt" + "strconv" + "strings" + "sync" + "time" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/util/log" tb "gopkg.in/telebot.v3" "gopkg.in/telebot.v3/middleware" - "time" ) -var bots *tb.Bot +// bots is the single bot instance backing slash-command handlers +// (/start, WalletList, add-wallet dialog). Config is read from the +// settings table (system.telegram_bot_token + system.telegram_chat_id). +// Decoupled from notification_channels — that table drives push +// notifications only (via notify/dispatcher.go). +var ( + bots *tb.Bot + adminChatID int64 + reloadMu sync.Mutex +) -// BotStart 机器人启动 +// BotStart connects the command bot. If no telegram channel is +// configured yet it logs and returns; the service otherwise runs fine +// and notifications still fan out as soon as a channel is added (those +// use their own per-request bot; see notify/telegram_sender.go). func BotStart() { - var err error - botSetting := tb.Settings{ - Token: config.TgBotToken, - Poller: &tb.LongPoller{Timeout: 50 * time.Second}, - Synchronous: true, + if err := reloadBot("bootstrap"); err != nil { + log.Sugar.Errorf("[telegram] bot start failed: %v", err) } - if config.TgProxy != "" { - botSetting.URL = config.TgProxy - } - bots, err = tb.NewBot(botSetting) - if err != nil { - log.Sugar.Error(err.Error()) - return - } - err = bots.SetCommands(Cmds) - if err != nil { - log.Sugar.Error(err.Error()) - return - } - RegisterHandle() - bots.Start() } -// RegisterHandle 注册处理器 -func RegisterHandle() { - adminOnly := bots.Group() - adminOnly.Use(middleware.Whitelist(config.TgManage)) - adminOnly.Handle(START_CMD, WalletList) - adminOnly.Handle(tb.OnText, OnTextMessageHandle) -} - -// SendToBot 主动发送消息机器人消息 -func SendToBot(msg string) { +// ReloadBotAsync refreshes the command bot from notification_channels. +// It is used by admin API handlers after telegram channel create/update/ +// status/delete so operators don't need to restart the service. +func ReloadBotAsync(reason string) { go func() { - if bots == nil { - log.Sugar.Error("[Telegram] bots实例为nil,无法发送消息") - return - } - user := tb.User{ - ID: config.TgManage, - } - log.Sugar.Infof("[Telegram] 正在发送消息给用户ID=%d", config.TgManage) - _, err := bots.Send(&user, msg, &tb.SendOptions{ - ParseMode: tb.ModeHTML, - }) - if err != nil { - log.Sugar.Errorf("[Telegram] 发送消息失败: userID=%d, err=%v", config.TgManage, err) - } else { - log.Sugar.Infof("[Telegram] 发送消息成功: userID=%d", config.TgManage) + if err := reloadBot(reason); err != nil { + log.Sugar.Errorf("[telegram] reload failed, reason=%s err=%v", reason, err) } }() } + +// loadCommandBotConfig reads the command-bot config from the settings +// table (system.telegram_bot_token + system.telegram_chat_id). +// Returns (nil, "", nil) when the keys are absent so the caller can +// log and return gracefully — bot stays disabled until settings are set. +func loadCommandBotConfig() (*botConfig, string, error) { + botToken := strings.TrimSpace(data.GetSettingString("system.telegram_bot_token", "")) + chatIDStr := strings.TrimSpace(data.GetSettingString("system.telegram_chat_id", "")) + if botToken == "" || chatIDStr == "" { + return nil, "", nil + } + chatID, err := strconv.ParseInt(chatIDStr, 10, 64) + if err != nil { + return nil, "", fmt.Errorf("invalid telegram chat_id in settings: %w", err) + } + return &botConfig{BotToken: botToken, ChatID: chatID}, "settings", nil +} + +// botConfig holds the minimal fields needed to start the command bot. +type botConfig struct { + BotToken string + ChatID int64 +} + +func reloadBot(reason string) error { + reloadMu.Lock() + defer reloadMu.Unlock() + + if bots != nil { + bots.Stop() + bots = nil + } + + cfg, source, err := loadCommandBotConfig() + if err != nil { + return err + } + if cfg == nil { + log.Sugar.Infof("[telegram] no enabled telegram channel configured; command bot disabled (reason=%s)", reason) + return nil + } + adminChatID = cfg.ChatID + + botSetting := tb.Settings{ + Token: cfg.BotToken, + Poller: &tb.LongPoller{Timeout: 50 * time.Second}, + Synchronous: true, + } + newBot, err := tb.NewBot(botSetting) + if err != nil { + return fmt.Errorf("new bot: %w", err) + } + if err = newBot.SetCommands(Cmds); err != nil { + return fmt.Errorf("set commands: %w", err) + } + bots = newBot + RegisterHandle() + go bots.Start() + + log.Sugar.Infof("[telegram] command bot started, reason=%s, source=%s", reason, source) + return nil +} + +// RegisterHandle wires slash-command and text-message routes. The +// admin whitelist uses the chat_id from the same channel row. +func RegisterHandle() { + if bots == nil { + return + } + adminOnly := bots.Group() + adminOnly.Use(middleware.Whitelist(adminChatID)) + adminOnly.Handle(START_CMD, WalletList) + adminOnly.Handle(tb.OnText, OnTextMessageHandle) +} diff --git a/src/telegram/telegram_test.go b/src/telegram/telegram_test.go new file mode 100644 index 0000000..42227c9 --- /dev/null +++ b/src/telegram/telegram_test.go @@ -0,0 +1,135 @@ +package telegram + +import ( + "testing" + + "github.com/GMWalletApp/epusdt/config" + "github.com/GMWalletApp/epusdt/internal/testutil" + "github.com/GMWalletApp/epusdt/model/dao" + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" +) + +func withTelegramEnv(token, proxy string, manage int64, fn func()) { + origToken := config.TgBotToken + origProxy := config.TgProxy + origManage := config.TgManage + defer func() { + config.TgBotToken = origToken + config.TgProxy = origProxy + config.TgManage = origManage + }() + + config.TgBotToken = token + config.TgProxy = proxy + config.TgManage = manage + fn() +} + +func TestLoadCommandBotConfig_DoesNotUseEnvFallbackWhenNoChannel(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + // Env config is present but settings table is empty — + // the bot must NOT fall back to config.TgBotToken. + withTelegramEnv("env-token", "http://127.0.0.1:7890", 123456789, func() { + cfg, source, err := loadCommandBotConfig() + if err != nil { + t.Fatalf("loadCommandBotConfig err: %v", err) + } + if cfg != nil { + t.Fatalf("expected nil config when settings table has no telegram keys, got %+v", cfg) + } + if source != "" { + t.Fatalf("source = %q, want empty", source) + } + }) +} + +func TestLoadCommandBotConfig_PrefersEnabledTelegramChannel(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + // Seed settings table with telegram credentials. + dao.Mdb.Create(&mdb.Setting{Group: "system", Key: "system.telegram_bot_token", Value: "db-token", Type: "string"}) + dao.Mdb.Create(&mdb.Setting{Group: "system", Key: "system.telegram_chat_id", Value: "987654321", Type: "string"}) + _ = data.ReloadSettings() + + withTelegramEnv("env-token", "", 123456789, func() { + cfg, source, err := loadCommandBotConfig() + if err != nil { + t.Fatalf("loadCommandBotConfig err: %v", err) + } + if cfg == nil { + t.Fatal("expected non-nil config") + } + if source != "settings" { + t.Fatalf("source = %q, want %q", source, "settings") + } + if cfg.BotToken != "db-token" { + t.Fatalf("bot token = %q, want %q", cfg.BotToken, "db-token") + } + if cfg.ChatID != 987654321 { + t.Fatalf("chat id = %d, want %d", cfg.ChatID, int64(987654321)) + } + }) +} + +func TestLoadCommandBotConfig_ReturnsNilWhenNoChannelAndNoEnv(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + // Fresh DB — ensure the cache doesn't carry over values from a previous test. + _ = data.ReloadSettings() + + withTelegramEnv("", "", 0, func() { + cfg, source, err := loadCommandBotConfig() + if err != nil { + t.Fatalf("loadCommandBotConfig err: %v", err) + } + if cfg != nil { + t.Fatalf("expected nil config, got %+v", cfg) + } + if source != "" { + t.Fatalf("source = %q, want empty", source) + } + }) +} + +func TestLoadCommandBotConfig_SkipsEmptyConfigChannel(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + // Only chat_id present, no bot_token → should return nil. + dao.Mdb.Create(&mdb.Setting{Group: "system", Key: "system.telegram_chat_id", Value: "987654321", Type: "string"}) + _ = data.ReloadSettings() + + cfg, source, err := loadCommandBotConfig() + if err != nil { + t.Fatalf("loadCommandBotConfig err: %v", err) + } + if cfg != nil { + t.Fatalf("expected nil config when bot_token is absent, got %+v", cfg) + } + if source != "" { + t.Fatalf("source = %q, want empty", source) + } +} + +func TestLoadCommandBotConfig_SkipsInvalidAndUsesNextValid(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + // bot_token present but chat_id is not a valid int → should return error. + dao.Mdb.Create(&mdb.Setting{Group: "system", Key: "system.telegram_bot_token", Value: "db-token", Type: "string"}) + dao.Mdb.Create(&mdb.Setting{Group: "system", Key: "system.telegram_chat_id", Value: "not-a-number", Type: "string"}) + _ = data.ReloadSettings() + + cfg, _, err := loadCommandBotConfig() + if err == nil { + t.Fatal("expected error for invalid chat_id, got nil") + } + if cfg != nil { + t.Fatalf("expected nil config on parse error, got %+v", cfg) + } +} diff --git a/src/telegram/utils.go b/src/telegram/utils.go index fde9c66..2c94a52 100644 --- a/src/telegram/utils.go +++ b/src/telegram/utils.go @@ -5,7 +5,7 @@ import ( "encoding/hex" "strings" - "github.com/assimon/luuu/model/mdb" + "github.com/GMWalletApp/epusdt/model/mdb" "github.com/btcsuite/btcutil/base58" "github.com/gagliardetto/solana-go" ) diff --git a/src/util/constant/errno.go b/src/util/constant/errno.go index d38ca17..5945bf8 100644 --- a/src/util/constant/errno.go +++ b/src/util/constant/errno.go @@ -16,8 +16,8 @@ var Errno = map[int]string{ 10011: "exceeded maximum sub-order limit", 10012: "cannot switch network on a sub-order", 10013: "order is not awaiting payment", - 10014: "supported asset already exists", - 10015: "supported asset not found", + 10014: "chain is not enabled", + 10016: "supported asset not found", } var ( @@ -36,8 +36,8 @@ var ( SubOrderLimitExceeded = Err(10011) CannotSwitchSubOrder = Err(10012) OrderNotWaitPay = Err(10013) - SupportedAssetAlreadyExists = Err(10014) - SupportedAssetNotFound = Err(10015) + ChainNotEnabled = Err(10014) + SupportedAssetNotFound = Err(10016) ) type RspError struct { @@ -60,3 +60,19 @@ func Err(code int) (err error) { func (re *RspError) Render() (code int, msg string) { return re.Code, re.Msg } + +// HttpStatus maps a RspError code to the HTTP status the handler +// should use on the wire. Small codes (< 1000) are treated as real +// HTTP status codes (e.g. 400 system error, 401 signature failure) so +// clients see the right status. Business codes (>= 1000) are all +// client-side problems that map to HTTP 400; the specific code still +// lives in the body's `status_code` field for the frontend to branch on. +func (re *RspError) HttpStatus() int { + if re == nil { + return 500 + } + if re.Code >= 400 && re.Code < 600 { + return re.Code + } + return 400 +} diff --git a/src/util/http/response.go b/src/util/http/response.go index f2bc788..f2aa544 100644 --- a/src/util/http/response.go +++ b/src/util/http/response.go @@ -1,8 +1,8 @@ package http import ( - "github.com/assimon/luuu/util/constant" - "github.com/assimon/luuu/util/page" + "github.com/GMWalletApp/epusdt/util/constant" + "github.com/GMWalletApp/epusdt/util/page" "github.com/labstack/echo/v4" "net/http" ) @@ -58,16 +58,21 @@ func (r *Resp) SucJsonPage(e echo.Context, data interface{}, pagination page.Pag return r.SucJson(e, pageDate, message...) } -// FailJson 失败json +// FailJson 失败json — Propagates semantic HTTP status codes to the +// wire. RspError.Code in the 4xx/5xx range is used directly; business +// codes (>=1000) map to HTTP 400 with the specific code still visible +// in the body's status_code field. func (r *Resp) FailJson(e echo.Context, err error) error { rr := new(Response) - switch err.(type) { + httpStatus := http.StatusBadRequest + switch t := err.(type) { case *constant.RspError: - rr.StatusCode, rr.Message = err.(*constant.RspError).Render() + rr.StatusCode, rr.Message = t.Render() + httpStatus = t.HttpStatus() default: - rr.StatusCode = 400 + rr.StatusCode = http.StatusBadRequest rr.Message = err.Error() } rr.RequestID = e.Request().Header.Get(echo.HeaderXRequestID) - return r.Json(e, http.StatusOK, &rr) + return r.Json(e, httpStatus, &rr) } diff --git a/src/util/http/spa.go b/src/util/http/spa.go new file mode 100644 index 0000000..bf2c54f --- /dev/null +++ b/src/util/http/spa.go @@ -0,0 +1,49 @@ +package http + +import ( + "os" + "path/filepath" + "strings" +) + +var spaFallbackDenyPrefixes = []string{ + "/api", + "/admin/api", + "/payments", + "/pay", +} + +// ShouldSkipSPAFallback reports whether a request path should bypass +// server-side SPA fallback to index.html and continue normal backend routing. +func ShouldSkipSPAFallback(requestPath string) bool { + for _, prefix := range spaFallbackDenyPrefixes { + if requestPath == prefix || strings.HasPrefix(requestPath, prefix+"/") { + return true + } + } + + return false +} + +// ResolveSPAFilePath normalizes a wildcard SPA path and maps it under wwwRoot. +// It strips any leading slash and blocks path traversal outside wwwRoot. +// The second return value indicates whether the caller should try os.Stat +// against the returned path (true) or directly fall back to index.html (false). +func ResolveSPAFilePath(wwwRoot, wildcard string) (string, bool) { + indexPath := filepath.Join(wwwRoot, "index.html") + + cleaned := strings.TrimPrefix(filepath.Clean(wildcard), "/") + if cleaned == "" || cleaned == "." { + return indexPath, false + } + + requestedPath := filepath.Join(wwwRoot, cleaned) + base := filepath.Clean(wwwRoot) + resolved := filepath.Clean(requestedPath) + + if resolved != base && !strings.HasPrefix(resolved, base+string(os.PathSeparator)) { + return indexPath, false + } + + return requestedPath, true +} diff --git a/src/util/http/spa_test.go b/src/util/http/spa_test.go new file mode 100644 index 0000000..bd93286 --- /dev/null +++ b/src/util/http/spa_test.go @@ -0,0 +1,97 @@ +package http + +import ( + "path/filepath" + "testing" +) + +func TestResolveSPAFilePath(t *testing.T) { + root := filepath.Join("tmp", "www") + indexPath := filepath.Join(root, "index.html") + + tests := []struct { + name string + wildcard string + wantPath string + wantTryStat bool + }{ + { + name: "relative asset path", + wildcard: "assets/app.js", + wantPath: filepath.Join(root, "assets", "app.js"), + wantTryStat: true, + }, + { + name: "absolute style asset path", + wildcard: "/assets/app.js", + wantPath: filepath.Join(root, "assets", "app.js"), + wantTryStat: true, + }, + { + name: "empty wildcard", + wildcard: "", + wantPath: indexPath, + wantTryStat: false, + }, + { + name: "dot wildcard", + wildcard: ".", + wantPath: indexPath, + wantTryStat: false, + }, + { + name: "directory traversal fallback", + wildcard: "../../etc/passwd", + wantPath: indexPath, + wantTryStat: false, + }, + { + name: "absolute directory traversal fallback", + wildcard: "/../../etc/passwd", + wantPath: filepath.Join(root, "etc", "passwd"), + wantTryStat: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + gotPath, gotTryStat := ResolveSPAFilePath(root, tt.wildcard) + + if gotTryStat != tt.wantTryStat { + t.Fatalf("tryStat = %v, want %v", gotTryStat, tt.wantTryStat) + } + if gotPath != tt.wantPath { + t.Fatalf("path = %q, want %q", gotPath, tt.wantPath) + } + }) + } +} + +func TestShouldSkipSPAFallback(t *testing.T) { + tests := []struct { + name string + path string + want bool + }{ + {name: "api root", path: "/api", want: true}, + {name: "api sub path", path: "/api/install/defaults", want: true}, + {name: "admin api root", path: "/admin/api", want: true}, + {name: "admin api sub path", path: "/admin/api/v1/orders", want: true}, + {name: "payments root", path: "/payments", want: true}, + {name: "payments sub path", path: "/payments/gmpay/v1/order/create-transaction", want: true}, + {name: "pay root", path: "/pay", want: true}, + {name: "pay sub path", path: "/pay/checkout-counter/abc", want: true}, + {name: "not exact prefix", path: "/apiary", want: false}, + {name: "normal spa route", path: "/install", want: false}, + {name: "normal asset route", path: "/assets/index.js", want: false}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := ShouldSkipSPAFallback(tt.path) + if got != tt.want { + t.Fatalf("ShouldSkipSPAFallback(%q) = %v, want %v", tt.path, got, tt.want) + } + }) + } +} diff --git a/src/util/http_client/client.go b/src/util/http_client/client.go index af440bc..9a39cf8 100644 --- a/src/util/http_client/client.go +++ b/src/util/http_client/client.go @@ -6,9 +6,12 @@ import ( "github.com/go-resty/resty/v2" ) +// ClientFactory is overridden in tests to stub outbound HTTP calls. +var ClientFactory = resty.New + // GetHttpClient 获取请求客户端 func GetHttpClient(proxys ...string) *resty.Client { - client := resty.New() + client := ClientFactory() // 如果有代理 if len(proxys) > 0 { proxy := proxys[0] diff --git a/src/util/jwt/jwt.go b/src/util/jwt/jwt.go new file mode 100644 index 0000000..ce61665 --- /dev/null +++ b/src/util/jwt/jwt.go @@ -0,0 +1,78 @@ +package jwt + +import ( + "crypto/rand" + "encoding/hex" + "errors" + "time" + + "github.com/GMWalletApp/epusdt/model/data" + "github.com/GMWalletApp/epusdt/model/mdb" + "github.com/golang-jwt/jwt/v4" +) + +// DefaultExpiration is the token lifetime for admin sessions. +const DefaultExpiration = 24 * time.Hour + +// AdminClaims is the JWT payload for admin sessions. +type AdminClaims struct { + AdminUserID uint64 `json:"uid"` + Username string `json:"usr"` + jwt.RegisteredClaims +} + +// EnsureSecret reads system.jwt_secret from settings; if absent, +// generates a new 32-byte random hex string and persists it. Called once +// at startup so subsequent sign/verify can assume the secret exists. +func EnsureSecret() (string, error) { + secret := data.GetSettingString(mdb.SettingKeyJwtSecret, "") + if secret != "" { + return secret, nil + } + buf := make([]byte, 32) + if _, err := rand.Read(buf); err != nil { + return "", err + } + secret = hex.EncodeToString(buf) + if err := data.SetSetting(mdb.SettingGroupSystem, mdb.SettingKeyJwtSecret, secret, mdb.SettingTypeString); err != nil { + return "", err + } + return secret, nil +} + +// Sign returns a signed JWT for the given admin user. +func Sign(userID uint64, username string) (string, error) { + secret, err := EnsureSecret() + if err != nil { + return "", err + } + claims := AdminClaims{ + AdminUserID: userID, + Username: username, + RegisteredClaims: jwt.RegisteredClaims{ + ExpiresAt: jwt.NewNumericDate(time.Now().Add(DefaultExpiration)), + IssuedAt: jwt.NewNumericDate(time.Now()), + }, + } + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + return token.SignedString([]byte(secret)) +} + +// Parse validates a token string and returns its claims. +func Parse(tokenStr string) (*AdminClaims, error) { + secret, err := EnsureSecret() + if err != nil { + return nil, err + } + claims := &AdminClaims{} + _, err = jwt.ParseWithClaims(tokenStr, claims, func(t *jwt.Token) (interface{}, error) { + if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, errors.New("unexpected signing method") + } + return []byte(secret), nil + }) + if err != nil { + return nil, err + } + return claims, nil +} diff --git a/src/util/log/log.go b/src/util/log/log.go index 58e148d..5de38f0 100644 --- a/src/util/log/log.go +++ b/src/util/log/log.go @@ -2,7 +2,7 @@ package log import ( "fmt" - "github.com/assimon/luuu/config" + "github.com/GMWalletApp/epusdt/config" "github.com/natefinch/lumberjack" "github.com/spf13/viper" "go.uber.org/zap" diff --git a/src/util/sign/sign.go b/src/util/sign/sign.go index 22881d8..8359d20 100644 --- a/src/util/sign/sign.go +++ b/src/util/sign/sign.go @@ -2,7 +2,7 @@ package sign import ( "errors" - "github.com/assimon/luuu/util/json" + "github.com/GMWalletApp/epusdt/util/json" "github.com/gookit/goutil/strutil" "reflect" "sort" diff --git a/src/www/apple-touch-icon.png b/src/www/apple-touch-icon.png new file mode 100644 index 0000000..e75652f Binary files /dev/null and b/src/www/apple-touch-icon.png differ diff --git a/src/www/assets/401-kzzPZFna.js b/src/www/assets/401-kzzPZFna.js new file mode 100644 index 0000000..84e3cc7 --- /dev/null +++ b/src/www/assets/401-kzzPZFna.js @@ -0,0 +1 @@ +import{t as e}from"./unauthorized-error-9CwofmD6.js";var t=e;export{t as component}; \ No newline at end of file diff --git a/src/www/assets/403-Cpy7v32n.js b/src/www/assets/403-Cpy7v32n.js new file mode 100644 index 0000000..a0f0299 --- /dev/null +++ b/src/www/assets/403-Cpy7v32n.js @@ -0,0 +1 @@ +import{t as e}from"./forbidden-B-WSRpe6.js";var t=e;export{t as component}; \ No newline at end of file diff --git a/src/www/assets/404-BsLbhv_m.js b/src/www/assets/404-BsLbhv_m.js new file mode 100644 index 0000000..b4c0ccc --- /dev/null +++ b/src/www/assets/404-BsLbhv_m.js @@ -0,0 +1 @@ +import{t as e}from"./not-found-error-mxpXcTRa.js";var t=e;export{t as component}; \ No newline at end of file diff --git a/src/www/assets/500-CiuhDp_H.js b/src/www/assets/500-CiuhDp_H.js new file mode 100644 index 0000000..3c0122d --- /dev/null +++ b/src/www/assets/500-CiuhDp_H.js @@ -0,0 +1 @@ +import{t as e}from"./general-error-ruXTchhS.js";var t=e;export{t as component}; \ No newline at end of file diff --git a/src/www/assets/503-C8GhfezX.js b/src/www/assets/503-C8GhfezX.js new file mode 100644 index 0000000..422553b --- /dev/null +++ b/src/www/assets/503-C8GhfezX.js @@ -0,0 +1 @@ +import{t as e}from"./maintenance-error-yQ4OJvXf.js";var t=e;export{t as component}; \ No newline at end of file diff --git a/src/www/assets/ClientOnly-COESZSX_.js b/src/www/assets/ClientOnly-COESZSX_.js new file mode 100644 index 0000000..4ab5a34 --- /dev/null +++ b/src/www/assets/ClientOnly-COESZSX_.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{m as r,n as i}from"./useStore-pgHsvR0E.js";function a(e){let t=new Map,n,r,i=e=>{e.next&&(e.prev?(e.prev.next=e.next,e.next.prev=e.prev,e.next=void 0,r&&(r.next=e,e.prev=r)):(e.next.prev=void 0,n=e.next,e.next=void 0,r&&(e.prev=r,r.next=e)),r=e)};return{get(e){let n=t.get(e);if(n)return i(n),n.value},set(a,o){if(t.size>=e&&n){let e=n;t.delete(e.key),e.next&&(n=e.next,e.next.prev=void 0),e===r&&(r=void 0)}let s=t.get(a);if(s)s.value=o,i(s);else{let e={key:a,value:o,prev:r};r&&(r.next=e),r=e,n||=e,t.set(a,e)}},clear(){t.clear(),n=void 0,r=void 0}}}var o=4,s=5;function c(e){let t=e.indexOf(`{`);if(t===-1)return null;let n=e.indexOf(`}`,t);return n===-1||t+1>=e.length?null:[t,n]}function l(e,t,n=new Uint16Array(6)){let r=e.indexOf(`/`,t),i=r===-1?e.length:r,a=e.substring(t,i);if(!a||!a.includes(`$`))return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n;if(a===`$`){let r=e.length;return n[0]=2,n[1]=t,n[2]=t,n[3]=r,n[4]=r,n[5]=r,n}if(a.charCodeAt(0)===36)return n[0]=1,n[1]=t,n[2]=t+1,n[3]=i,n[4]=i,n[5]=i,n;let o=c(a);if(o){let[r,s]=o,c=a.charCodeAt(r+1);if(c===45){if(r+2!e.skipOnParamError&&e.caseSensitive===d&&e.prefix===p&&e.suffix===h);if(g)o=g;else{let e=m(1,n.fullPath??n.from,d,p,h);o=e,e.depth=a,e.parent=i,i.dynamic??=[],i.dynamic.push(e)}break}case 3:{let t=r.substring(s,e[1]),l=r.substring(e[4],c),d=u&&!!(t||l),p=t?d?t:t.toLowerCase():void 0,h=l?d?l:l.toLowerCase():void 0,g=!f&&i.optional?.find(e=>!e.skipOnParamError&&e.caseSensitive===d&&e.prefix===p&&e.suffix===h);if(g)o=g;else{let e=m(3,n.fullPath??n.from,d,p,h);o=e,e.parent=i,e.depth=a,i.optional??=[],i.optional.push(e)}break}case 2:{let t=r.substring(s,e[1]),l=r.substring(e[4],c),d=u&&!!(t||l),f=t?d?t:t.toLowerCase():void 0,p=l?d?l:l.toLowerCase():void 0,h=m(2,n.fullPath??n.from,d,f,p);o=h,h.parent=i,h.depth=a,i.wildcard??=[],i.wildcard.push(h)}}i=o}if(f&&n.children&&!n.isRoot&&n.id&&n.id.charCodeAt(n.id.lastIndexOf(`/`)+1)===95){let e=p(n.fullPath??n.from);e.kind=s,e.parent=i,a++,e.depth=a,i.pathless??=[],i.pathless.push(e),i=e}let h=(n.path||!n.children)&&!n.isRoot;if(h&&r.endsWith(`/`)){let e=p(n.fullPath??n.from);e.kind=o,e.parent=i,a++,e.depth=a,i.index=e,i=e}i.parse=n.options?.params?.parse??null,i.skipOnParamError=f,i.parsingPriority=n.options?.skipRouteOnParseError?.priority??0,h&&!i.route&&(i.route=n,i.fullPath=n.fullPath??n.from)}if(n.children)for(let r of n.children)u(e,t,r,d,i,a,c)}function d(e,t){if(e.skipOnParamError&&!t.skipOnParamError)return-1;if(!e.skipOnParamError&&t.skipOnParamError)return 1;if(e.skipOnParamError&&t.skipOnParamError&&(e.parsingPriority||t.parsingPriority))return t.parsingPriority-e.parsingPriority;if(e.prefix&&t.prefix&&e.prefix!==t.prefix){if(e.prefix.startsWith(t.prefix))return-1;if(t.prefix.startsWith(e.prefix))return 1}if(e.suffix&&t.suffix&&e.suffix!==t.suffix){if(e.suffix.endsWith(t.suffix))return-1;if(t.suffix.endsWith(e.suffix))return 1}return e.prefix&&!t.prefix?-1:!e.prefix&&t.prefix?1:e.suffix&&!t.suffix?-1:!e.suffix&&t.suffix?1:e.caseSensitive&&!t.caseSensitive?-1:!e.caseSensitive&&t.caseSensitive?1:0}function f(e){if(e.pathless)for(let t of e.pathless)f(t);if(e.static)for(let t of e.static.values())f(t);if(e.staticInsensitive)for(let t of e.staticInsensitive.values())f(t);if(e.dynamic?.length){e.dynamic.sort(d);for(let t of e.dynamic)f(t)}if(e.optional?.length){e.optional.sort(d);for(let t of e.optional)f(t)}if(e.wildcard?.length){e.wildcard.sort(d);for(let t of e.wildcard)f(t)}}function p(e){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:e,parent:null,parse:null,skipOnParamError:!1,parsingPriority:0}}function m(e,t,n,r,i){return{kind:e,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:t,parent:null,parse:null,skipOnParamError:!1,parsingPriority:0,caseSensitive:n,prefix:r,suffix:i}}function h(e,t){let n=p(`/`),r=new Uint16Array(6);for(let t of e)u(!1,r,t,1,n,0);f(n),t.masksTree=n,t.flatCache=a(1e3)}function g(e,t){e||=`/`;let n=t.flatCache.get(e);if(n)return n;let r=x(e,t.masksTree);return t.flatCache.set(e,r),r}function _(e,t,n,r,i){e||=`/`,r||=`/`;let a=t?`case\0${e}`:e,o=i.singleCache.get(a);return o||(o=p(`/`),u(t,new Uint16Array(6),{from:e},1,o,0),i.singleCache.set(a,o)),x(r,o,n)}function v(e,t,n=!1){let r=n?e:`nofuzz\0${e}`,i=t.matchCache.get(r);if(i!==void 0)return i;e||=`/`;let a;try{a=x(e,t.segmentTree,n)}catch(e){if(e instanceof URIError)a=null;else throw e}return a&&(a.branch=C(a.route)),t.matchCache.set(r,a),a}function y(e){return e===`/`?e:e.replace(/\/{1,}$/,``)}function b(e,t=!1,n){let r=p(e.fullPath),o=new Uint16Array(6),s={},c={},l=0;return u(t,o,e,1,r,0,e=>{if(n?.(e,l),e.id in s&&i(),s[e.id]=e,l!==0&&e.path){let t=y(e.fullPath);(!c[t]||e.fullPath.endsWith(`/`))&&(c[t]=e)}l++}),f(r),{processedTree:{segmentTree:r,singleCache:a(1e3),matchCache:a(1e3),flatCache:null,masksTree:null},routesById:s,routesByPath:c}}function x(e,t,n=!1){let r=e.split(`/`),i=T(e,r,t,n);if(!i)return null;let[a]=S(e,r,i);return{route:i.node.route,rawParams:a,parsedParams:i.parsedParams}}function S(e,t,n){let r=w(n.node),i=null,a=Object.create(null),c=n.extract?.part??0,l=n.extract?.node??0,u=n.extract?.path??0,d=n.extract?.segment??0;for(;l=0;n--){let i=r.optional[n];l.push({node:i,index:a,skipped:e,depth:t,statics:h,dynamics:g,optionals:_,extract:v,rawParams:y,parsedParams:b})}if(!x)for(let e=r.optional.length-1;e>=0;e--){let n=r.optional[e],{prefix:i,suffix:o}=n;if(i||o){let e=n.caseSensitive?S:C??=S.toLowerCase();if(i&&!e.startsWith(i)||o&&!e.endsWith(o))continue}l.push({node:n,index:a+1,skipped:p,depth:t,statics:h,dynamics:g,optionals:_+1,extract:v,rawParams:y,parsedParams:b})}}if(!x&&r.dynamic&&S)for(let e=r.dynamic.length-1;e>=0;e--){let t=r.dynamic[e],{prefix:n,suffix:i}=t;if(n||i){let e=t.caseSensitive?S:C??=S.toLowerCase();if(n&&!e.startsWith(n)||i&&!e.endsWith(i))continue}l.push({node:t,index:a+1,skipped:p,depth:m+1,statics:h,dynamics:g+1,optionals:_,extract:v,rawParams:y,parsedParams:b})}if(!x&&r.staticInsensitive){let e=r.staticInsensitive.get(C??=S.toLowerCase());e&&l.push({node:e,index:a+1,skipped:p,depth:m+1,statics:h+1,dynamics:g,optionals:_,extract:v,rawParams:y,parsedParams:b})}if(!x&&r.static){let e=r.static.get(S);e&&l.push({node:e,index:a+1,skipped:p,depth:m+1,statics:h+1,dynamics:g,optionals:_,extract:v,rawParams:y,parsedParams:b})}if(r.pathless){let e=m+1;for(let t=r.pathless.length-1;t>=0;t--){let n=r.pathless[t];l.push({node:n,index:a,skipped:p,depth:e,statics:h,dynamics:g,optionals:_,extract:v,rawParams:y,parsedParams:b})}}}if(f&&u)return D(u,f)?f:u;if(f)return f;if(u)return u;if(i&&d){let n=d.index;for(let e=0;ee.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===o)>(e.node.kind===o)||t.node.kind===o==(e.node.kind===o)&&t.depth>e.depth))):!0}function O(e){return k(e.filter(e=>e!==void 0).join(`/`))}function k(e){return e.replace(/\/{2,}/g,`/`)}function A(e){return e===`/`?e:e.replace(/^\/{1,}/,``)}function j(e){let t=e.length;return t>1&&e[t-1]===`/`?e.replace(/\/{1,}$/,``):e}function M(e){return j(A(e))}function N(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function P(e,t,n){return N(e,n)===N(t,n)}function F({base:e,to:t,trailingSlash:n=`never`,cache:i}){let a=t.startsWith(`/`),o=!a&&t===`.`,s;if(i){s=a?t:o?e:e+`\0`+t;let n=i.get(s);if(n)return n}let c;if(o)c=e.split(`/`);else if(a)c=t.split(`/`);else{for(c=e.split(`/`);c.length>1&&r(c)===``;)c.pop();let n=t.split(`/`);for(let e=0,t=n.length;e1&&(r(c)===``?n===`never`&&c.pop():n===`always`&&c.push(``));let u,d=``;for(let e=0;e0&&(d+=`/`);let t=c[e];if(!t)continue;u=l(t,0,u);let n=u[0];if(n===0){d+=t;continue}let r=u[5],i=t.substring(0,u[1]),a=t.substring(u[4],r),o=t.substring(u[2],u[3]);n===1?d+=i||a?`${i}{$${o}}${a}`:`$${o}`:n===2?d+=i||a?`${i}{$}${a}`:`$`:d+=`${i}{-$${o}}${a}`}d=k(d);let f=d||`/`;return s&&i&&i.set(s,f),f}function I(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=Array.from(t.keys()).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),r=new RegExp(n,`g`);return e=>e.replace(r,e=>t.get(e)??e)}function L(e,t,n){let r=t[e];return typeof r==`string`?e===`_splat`?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split(`/`).map(e=>z(e,n)).join(`/`):z(r,n):r}function R({path:e,params:t,decoder:n,...r}){let i=!1,a=Object.create(null);if(!e||e===`/`)return{interpolatedPath:`/`,usedParams:a,isMissingParams:i};if(!e.includes(`$`))return{interpolatedPath:e,usedParams:a,isMissingParams:i};let o=e.length,s=0,c,u=``;for(;s!0,()=>!1)}function W(){return()=>{}}export{b as _,P as a,N as c,A as d,j as f,h as g,_ as h,I as i,F as l,v as m,U as n,R as o,g as p,k as r,O as s,H as t,M as u,a as v}; \ No newline at end of file diff --git a/src/www/assets/Match-Bdr6F13c.js b/src/www/assets/Match-Bdr6F13c.js new file mode 100644 index 0000000..10146d1 --- /dev/null +++ b/src/www/assets/Match-Bdr6F13c.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{o as r,t as i}from"./useRouter-DS97kuA5.js";import{a,c as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y}from"./useStore-pgHsvR0E.js";import{_ as b,f as x,g as S,h as C,i as w,l as T,m as E,o as D,p as O,r as k,s as A,t as ee,u as te,v as ne}from"./ClientOnly-COESZSX_.js";import{i as j,r as re,t as M}from"./redirect-dE0wk0WH.js";import{n as ie}from"./matchContext-BJCpOvLW.js";function ae(){try{return typeof window<`u`&&typeof window.sessionStorage==`object`?window.sessionStorage:void 0}catch{return}}var oe=`tsr-scroll-restoration-v1_3`;function se(){let e=ae();if(!e)return null;let t={};try{let n=JSON.parse(e.getItem(`tsr-scroll-restoration-v1_3`)||`{}`);s(n)&&(t=n)}catch{}return{get state(){return t},set:e=>{t=d(e,t)||t},persist:()=>{try{e.setItem(oe,JSON.stringify(t))}catch{}}}}var ce=se(),le=e=>e.state.__TSR_key||e.href;function ue(e){let t=[],n;for(;n=e.parentNode;)t.push(`${e.tagName}:nth-child(${Array.prototype.indexOf.call(n.children,e)+1})`),e=n;return`${t.reverse().join(` > `)}`.toLowerCase()}var N=!1,P=`window`,de=`data-scroll-restoration-id`;function fe(e,t){if(!ce)return;let n=ce;if((t??e.options.scrollRestoration??!1)&&(e.isScrollRestoring=!0),e.isScrollRestorationSetup||!n)return;e.isScrollRestorationSetup=!0,N=!1;let r=e.options.getScrollRestorationKey||le,i=new Map;window.history.scrollRestoration=`manual`;let a=t=>{if(!(N||!e.isScrollRestoring))if(t.target===document||t.target===window)i.set(P,{scrollX:window.scrollX||0,scrollY:window.scrollY||0});else{let e=t.target;i.set(e,{scrollX:e.scrollLeft||0,scrollY:e.scrollTop||0})}},o=t=>{if(!e.isScrollRestoring||!t||i.size===0||!n)return;let r=n.state[t]||={};for(let[e,t]of i){let n;if(e===P)n=P;else if(e.isConnected){let t=e.getAttribute(de);n=t?`[${de}="${t}"]`:ue(e)}n&&(r[n]=t)}};document.addEventListener(`scroll`,a,!0),e.subscribe(`onBeforeLoad`,e=>{o(e.fromLocation?r(e.fromLocation):void 0),i.clear()}),window.addEventListener(`pagehide`,()=>{o(r(e.stores.resolvedLocation.get()??e.stores.location.get())),n.persist()}),e.subscribe(`onRendered`,t=>{let a=r(t.toLocation),o=e.options.scrollRestorationBehavior,c=e.options.scrollToTopSelectors;if(i.clear(),!e.resetNextScroll){e.resetNextScroll=!0;return}if(!(typeof e.options.scrollRestoration==`function`&&!e.options.scrollRestoration({location:e.latestLocation}))){N=!0;try{let t=e.isScrollRestoring?n.state[a]:void 0,r=!1;if(t)for(let e in t){let n=t[e];if(!s(n))continue;let{scrollX:i,scrollY:a}=n;if(!(!Number.isFinite(i)||!Number.isFinite(a))){if(e===P)window.scrollTo({top:a,left:i,behavior:o}),r=!0;else if(e){let t;try{t=document.querySelector(e)}catch{continue}t&&(t.scrollLeft=i,t.scrollTop=a,r=!0)}}}if(!r){let t=e.history.location.hash.slice(1);if(t){let e=window.history.state?.__hashScrollIntoViewOptions??!0;if(e){let n=document.getElementById(t);n&&n.scrollIntoView(e)}}else{let e={top:0,left:0,behavior:o};if(window.scrollTo(e),c)for(let t of c){if(t===P)continue;let n=typeof t==`function`?t():document.querySelector(t);n&&n.scrollTo(e)}}}}finally{N=!1}e.isScrollRestoring&&n.set(e=>(e[a]||={},e))}})}function pe(e,t=String){let n=new URLSearchParams;for(let r in e){let i=e[r];i!==void 0&&n.set(r,t(i))}return n.toString()}function me(e){return e?e===`false`?!1:e===`true`?!0:e*0==0&&+e+``===e?+e:e:``}function he(e){let t=new URLSearchParams(e),n=Object.create(null);for(let[e,r]of t.entries()){let t=n[e];t==null?n[e]=me(r):Array.isArray(t)?t.push(me(r)):n[e]=[t,me(r)]}return n}var ge=ve(JSON.parse),_e=ye(JSON.stringify,JSON.parse);function ve(e){return t=>{t[0]===`?`&&(t=t.substring(1));let n=he(t);for(let t in n){let r=n[t];if(typeof r==`string`)try{n[t]=e(r)}catch{}}return n}}function ye(e,t){let n=typeof t==`function`;function r(r){if(typeof r==`object`&&r)try{return e(r)}catch{}else if(n&&typeof r==`string`)try{return t(r),e(r)}catch{}return r}return e=>{let t=pe(e,r);return t?`?${t}`:``}}function be(e){return{input:({url:t})=>{for(let n of e)t=F(n,t);return t},output:({url:t})=>{for(let n=e.length-1;n>=0;n--)t=Se(e[n],t);return t}}}function xe(e){let t=te(e.basepath),n=`/${t}`,r=`${n}/`,i=e.caseSensitive?n:n.toLowerCase(),a=e.caseSensitive?r:r.toLowerCase();return{input:({url:t})=>{let r=e.caseSensitive?t.pathname:t.pathname.toLowerCase();return r===i?t.pathname=`/`:r.startsWith(a)&&(t.pathname=t.pathname.slice(n.length)),t},output:({url:e})=>(e.pathname=A([`/`,t,e.pathname]),e)}}function F(e,t){let n=e?.input?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function Se(e,t){let n=e?.output?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function Ce(e){let t=e;return{get(){return t},set(e){t=d(e,t)}}}function we(e){return{get(){return e()}}}function Te(e,t){let{createMutableStore:n,createReadonlyStore:r,batch:i,init:a}=t,o=new Map,s=new Map,c=new Map,l=n(e.status),u=n(e.loadedAt),d=n(e.isLoading),f=n(e.isTransitioning),p=n(e.location),m=n(e.resolvedLocation),h=n(e.statusCode),g=n(e.redirect),_=n([]),v=n([]),y=n([]),b=r(()=>I(o,_.get())),x=r(()=>I(s,v.get())),S=r(()=>I(c,y.get())),C=r(()=>_.get()[0]),w=r(()=>_.get().some(e=>o.get(e)?.get().status===`pending`)),T=r(()=>({locationHref:p.get().href,resolvedLocationHref:m.get()?.href,status:l.get()})),E=r(()=>({status:l.get(),loadedAt:u.get(),isLoading:d.get(),isTransitioning:f.get(),matches:b.get(),location:p.get(),resolvedLocation:m.get(),statusCode:h.get(),redirect:g.get()})),D=ne(64);function O(e){let t=D.get(e);return t||(t=r(()=>{let t=_.get();for(let n of t){let t=o.get(n);if(t&&t.routeId===e)return t.get()}}),D.set(e,t)),t}let k={status:l,loadedAt:u,isLoading:d,isTransitioning:f,location:p,resolvedLocation:m,statusCode:h,redirect:g,matchesId:_,pendingIds:v,cachedIds:y,matches:b,pendingMatches:x,cachedMatches:S,firstId:C,hasPending:w,matchRouteDeps:T,matchStores:o,pendingMatchStores:s,cachedMatchStores:c,__store:E,getRouteMatchStore:O,setMatches:A,setPending:ee,setCached:te};A(e.matches),a?.(k);function A(e){L(e,o,_,n,i)}function ee(e){L(e,s,v,n,i)}function te(e){L(e,c,y,n,i)}return k}function I(e,t){let n=[];for(let r of t){let t=e.get(r);t&&n.push(t.get())}return n}function L(e,t,n,r,i){let a=e.map(e=>e.id),o=new Set(a);i(()=>{for(let e of t.keys())o.has(e)||t.delete(e);for(let n of e){let e=t.get(n.id);if(!e){let e=r(n);e.routeId=n.routeId,t.set(n.id,e);continue}e.routeId=n.routeId,e.get()!==n&&e.set(n)}u(n.get(),a)||n.set(a)})}var R=e=>{if(!e.rendered)return e.rendered=!0,e.onReady?.()},Ee=e=>e.stores.matchesId.get().some(t=>e.stores.matchStores.get(t)?.get()._forcePending),z=(e,t)=>!!(e.preload&&!e.router.stores.matchStores.has(t)),B=(e,t,n=!0)=>{let r={...e.router.options.context??{}},i=n?t:t-1;for(let t=0;t<=i;t++){let n=e.matches[t];if(!n)continue;let i=e.router.getMatch(n.id);i&&Object.assign(r,i.__routeContext,i.__beforeLoadContext)}return r},De=(e,t)=>{if(!e.matches.length)return;let n=t.routeId,r=e.matches.findIndex(t=>t.routeId===e.router.routeTree.id),i=r>=0?r:0,a=n?e.matches.findIndex(e=>e.routeId===n):e.firstBadMatchIndex??e.matches.length-1;a<0&&(a=i);for(let t=a;t>=0;t--){let n=e.matches[t];if(e.router.looseRoutesById[n.routeId].options.notFoundComponent)return t}return n?a:i},V=(e,t,n)=>{if(!(!M(n)&&!j(n)))throw M(n)&&n.redirectHandled&&!n.options.reloadDocument?n:(t&&(t._nonReactive.beforeLoadPromise?.resolve(),t._nonReactive.loaderPromise?.resolve(),t._nonReactive.beforeLoadPromise=void 0,t._nonReactive.loaderPromise=void 0,t._nonReactive.error=n,e.updateMatch(t.id,r=>({...r,status:M(n)?`redirected`:r.status===`pending`?`success`:r.status,context:B(e,t.index),isFetching:!1,error:n})),j(n)&&!n.routeId&&(n.routeId=t.routeId),t._nonReactive.loadPromise?.resolve()),M(n)&&(e.rendered=!0,n.options._fromLocation=e.location,n.redirectHandled=!0,n=e.router.resolveRedirect(n)),n)},Oe=(e,t)=>{let n=e.router.getMatch(t);return!!(!n||n._nonReactive.dehydrated)},ke=(e,t,n)=>{let r=B(e,n);e.updateMatch(t,e=>({...e,context:r}))},H=(e,t,n,r)=>{let{id:i,routeId:a}=e.matches[t],o=e.router.looseRoutesById[a];if(n instanceof Promise)throw n;n.routerCode=r,e.firstBadMatchIndex??=t,V(e,e.router.getMatch(i),n);try{o.options.onError?.(n)}catch(t){n=t,V(e,e.router.getMatch(i),n)}e.updateMatch(i,e=>(e._nonReactive.beforeLoadPromise?.resolve(),e._nonReactive.beforeLoadPromise=void 0,e._nonReactive.loadPromise?.resolve(),{...e,error:n,status:`error`,isFetching:!1,updatedAt:Date.now(),abortController:new AbortController})),!e.preload&&!M(n)&&!j(n)&&(e.serialError??=n)},Ae=(e,t,n,r)=>{if(r._nonReactive.pendingTimeout!==void 0)return;let i=n.options.pendingMs??e.router.options.defaultPendingMs;if(e.onReady&&!z(e,t)&&(n.options.loader||n.options.beforeLoad||Be(n))&&typeof i==`number`&&i!==1/0&&(n.options.pendingComponent??e.router.options?.defaultPendingComponent)){let t=setTimeout(()=>{R(e)},i);r._nonReactive.pendingTimeout=t}},je=(e,t,n)=>{let r=e.router.getMatch(t);if(!r._nonReactive.beforeLoadPromise&&!r._nonReactive.loaderPromise)return;Ae(e,t,n,r);let i=()=>{let n=e.router.getMatch(t);n.preload&&(n.status===`redirected`||n.status===`notFound`)&&V(e,n,n.error)};return r._nonReactive.beforeLoadPromise?r._nonReactive.beforeLoadPromise.then(i):i()},Me=(e,t,n,r)=>{let i=e.router.getMatch(t),o=i._nonReactive.loadPromise;i._nonReactive.loadPromise=a(()=>{o?.resolve(),o=void 0});let{paramsError:s,searchError:c}=i;s&&H(e,n,s,`PARSE_PARAMS`),c&&H(e,n,c,`VALIDATE_SEARCH`),Ae(e,t,r,i);let l=new AbortController,u=!1,d=()=>{u||(u=!0,e.updateMatch(t,e=>({...e,isFetching:`beforeLoad`,fetchCount:e.fetchCount+1,abortController:l})))},f=()=>{i._nonReactive.beforeLoadPromise?.resolve(),i._nonReactive.beforeLoadPromise=void 0,e.updateMatch(t,e=>({...e,isFetching:!1}))};if(!r.options.beforeLoad){e.router.batch(()=>{d(),f()});return}i._nonReactive.beforeLoadPromise=a();let p={...B(e,n,!1),...i.__routeContext},{search:m,params:g,cause:_}=i,v=z(e,t),y={search:m,abortController:l,params:g,preload:v,context:p,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),buildLocation:e.router.buildLocation,cause:v?`preload`:_,matches:e.matches,routeId:r.id,...e.router.options.additionalContext},b=r=>{if(r===void 0){e.router.batch(()=>{d(),f()});return}(M(r)||j(r))&&(d(),H(e,n,r,`BEFORE_LOAD`)),e.router.batch(()=>{d(),e.updateMatch(t,e=>({...e,__beforeLoadContext:r})),f()})},x;try{if(x=r.options.beforeLoad(y),h(x))return d(),x.catch(t=>{H(e,n,t,`BEFORE_LOAD`)}).then(b)}catch(t){d(),H(e,n,t,`BEFORE_LOAD`)}b(x)},Ne=(e,t)=>{let{id:n,routeId:r}=e.matches[t],i=e.router.looseRoutesById[r],a=()=>s(),o=()=>Me(e,n,t,i),s=()=>{if(Oe(e,n))return;let t=je(e,n,i);return h(t)?t.then(o):o()};return a()},Pe=(e,t,n)=>{let r=e.router.getMatch(t);if(!r||!n.options.head&&!n.options.scripts&&!n.options.headers)return;let i={ssr:e.router.options.ssr,matches:e.matches,match:r,params:r.params,loaderData:r.loaderData};return Promise.all([n.options.head?.(i),n.options.scripts?.(i),n.options.headers?.(i)]).then(([e,t,n])=>({meta:e?.meta,links:e?.links,headScripts:e?.scripts,headers:n,scripts:t,styles:e?.styles}))},Fe=(e,t,n,r,i)=>{let a=t[r-1],{params:o,loaderDeps:s,abortController:c,cause:l}=e.router.getMatch(n),u=B(e,r),d=z(e,n);return{params:o,deps:s,preload:!!d,parentMatchPromise:a,abortController:c,context:u,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),cause:d?`preload`:l,route:i,...e.router.options.additionalContext}},Ie=async(e,t,n,r,i)=>{try{let a=e.router.getMatch(n);try{U(i);let o=i.options.loader,s=typeof o==`function`?o:o?.handler,c=s?.(Fe(e,t,n,r,i)),l=!!s&&h(c);if((l||i._lazyPromise||i._componentsPromise||i.options.head||i.options.scripts||i.options.headers||a._nonReactive.minPendingPromise)&&e.updateMatch(n,e=>({...e,isFetching:`loader`})),s){let t=l?await c:c;V(e,e.router.getMatch(n),t),t!==void 0&&e.updateMatch(n,e=>({...e,loaderData:t}))}i._lazyPromise&&await i._lazyPromise;let u=a._nonReactive.minPendingPromise;u&&await u,i._componentsPromise&&await i._componentsPromise,e.updateMatch(n,t=>({...t,error:void 0,context:B(e,r),status:`success`,isFetching:!1,updatedAt:Date.now()}))}catch(t){let o=t;if(o?.name===`AbortError`){if(a.abortController.signal.aborted){a._nonReactive.loaderPromise?.resolve(),a._nonReactive.loaderPromise=void 0;return}e.updateMatch(n,t=>({...t,status:t.status===`pending`?`success`:t.status,isFetching:!1,context:B(e,r)}));return}let s=a._nonReactive.minPendingPromise;s&&await s,j(t)&&await i.options.notFoundComponent?.preload?.(),V(e,e.router.getMatch(n),t);try{i.options.onError?.(t)}catch(t){o=t,V(e,e.router.getMatch(n),t)}!M(o)&&!j(o)&&await U(i,[`errorComponent`]),e.updateMatch(n,t=>({...t,error:o,context:B(e,r),status:`error`,isFetching:!1}))}}catch(t){let r=e.router.getMatch(n);r&&(r._nonReactive.loaderPromise=void 0),V(e,r,t)}},Le=async(e,t,n)=>{async function r(r,a,o,l,u){let f=Date.now()-a.updatedAt,p=r?u.options.preloadStaleTime??e.router.options.defaultPreloadStaleTime??3e4:u.options.staleTime??e.router.options.defaultStaleTime??0,m=u.options.shouldReload,h=typeof m==`function`?m(Fe(e,t,i,n,u)):m,{status:g,invalid:_}=l,v=f>=p&&(!!e.forceStaleReload||l.cause===`enter`||o!==void 0&&o!==l.id);s=g===`success`&&(_||(h??v)),r&&u.options.preload===!1||(s&&!e.sync&&d?(c=!0,(async()=>{try{await Ie(e,t,i,n,u);let r=e.router.getMatch(i);r._nonReactive.loaderPromise?.resolve(),r._nonReactive.loadPromise?.resolve(),r._nonReactive.loaderPromise=void 0,r._nonReactive.loadPromise=void 0}catch(t){M(t)&&await e.router.navigate(t.options)}})()):g!==`success`||s?await Ie(e,t,i,n,u):ke(e,i,n))}let{id:i,routeId:o}=e.matches[n],s=!1,c=!1,l=e.router.looseRoutesById[o],u=l.options.loader,d=((typeof u==`function`?void 0:u?.staleReloadMode)??e.router.options.defaultStaleReloadMode)!==`blocking`;if(Oe(e,i)){if(!e.router.getMatch(i))return e.matches[n];ke(e,i,n)}else{let t=e.router.getMatch(i),s=e.router.stores.matchesId.get()[n],c=(s&&e.router.stores.matchStores.get(s)||null)?.routeId===o?s:e.router.stores.matches.get().find(e=>e.routeId===o)?.id,u=z(e,i);if(t._nonReactive.loaderPromise){if(t.status===`success`&&!e.sync&&!t.preload&&d)return t;await t._nonReactive.loaderPromise;let n=e.router.getMatch(i),a=n._nonReactive.error||n.error;a&&V(e,n,a),n.status===`pending`&&await r(u,t,c,n,l)}else{let n=u&&!e.router.stores.matchStores.has(i),o=e.router.getMatch(i);o._nonReactive.loaderPromise=a(),n!==o.preload&&e.updateMatch(i,e=>({...e,preload:n})),await r(u,t,c,o,l)}}let f=e.router.getMatch(i);c||(f._nonReactive.loaderPromise?.resolve(),f._nonReactive.loadPromise?.resolve(),f._nonReactive.loadPromise=void 0),clearTimeout(f._nonReactive.pendingTimeout),f._nonReactive.pendingTimeout=void 0,c||(f._nonReactive.loaderPromise=void 0),f._nonReactive.dehydrated=void 0;let p=c?f.isFetching:!1;return p!==f.isFetching||f.invalid!==!1?(e.updateMatch(i,e=>({...e,isFetching:p,invalid:!1})),e.router.getMatch(i)):f};async function Re(e){let t=e,n=[];Ee(t.router)&&R(t);let r;for(let e=0;e({...e,...a?{status:`success`,globalNotFound:!0,error:void 0}:{status:`notFound`,error:l},isFetching:!1})),u=e,await U(r,[`notFoundComponent`])}else if(!t.preload){let e=t.matches[0];e.globalNotFound||t.router.getMatch(e.id)?.globalNotFound&&t.updateMatch(e.id,e=>({...e,globalNotFound:!1,error:void 0}))}if(t.serialError&&t.firstBadMatchIndex!==void 0){let e=t.router.looseRoutesById[t.matches[t.firstBadMatchIndex].routeId];await U(e,[`errorComponent`])}for(let e=0;e<=u;e++){let{id:n,routeId:r}=t.matches[e],i=t.router.looseRoutesById[r];try{let e=Pe(t,n,i);if(e){let r=await e;t.updateMatch(n,e=>({...e,...r}))}}catch(e){console.error(`Error executing head for route ${r}:`,e)}}let d=R(t);if(h(d)&&await d,l)throw l;if(t.serialError&&!t.preload&&!t.onReady)throw t.serialError;return t.matches}function ze(e,t){let n=t.map(t=>e.options[t]?.preload?.()).filter(Boolean);if(n.length!==0)return Promise.all(n)}function U(e,t=W){!e._lazyLoaded&&e._lazyPromise===void 0&&(e.lazyFn?e._lazyPromise=e.lazyFn().then(t=>{let{id:n,...r}=t.options;Object.assign(e.options,r),e._lazyLoaded=!0,e._lazyPromise=void 0}):e._lazyLoaded=!0);let n=()=>e._componentsLoaded?void 0:t===W?(()=>{if(e._componentsPromise===void 0){let t=ze(e,W);t?e._componentsPromise=t.then(()=>{e._componentsLoaded=!0,e._componentsPromise=void 0}):e._componentsLoaded=!0}return e._componentsPromise})():ze(e,t);return e._lazyPromise?e._lazyPromise.then(n):n()}function Be(e){for(let t of W)if(e.options[t]?.preload)return!0;return!1}var W=[`component`,`errorComponent`,`pendingComponent`,`notFoundComponent`],G=`__TSR_index`,Ve=`popstate`,He=`beforeunload`;function Ue(e){let t=e.getLocation(),n=new Set,r=r=>{t=e.getLocation(),n.forEach(e=>e({location:t,action:r}))},i=n=>{e.notifyOnIndexChange??!0?r(n):t=e.getLocation()},a=async({task:n,navigateOpts:r,...i})=>{if(r?.ignoreBlocker??!1){n();return}let a=e.getBlockers?.()??[],o=i.type===`PUSH`||i.type===`REPLACE`;if(typeof document<`u`&&a.length&&o)for(let n of a){let r=K(i.path,i.state);if(await n.blockerFn({currentLocation:t,nextLocation:r,action:i.type})){e.onBlocked?.();return}}n()};return{get location(){return t},get length(){return e.getLength()},subscribers:n,subscribe:e=>(n.add(e),()=>{n.delete(e)}),push:(n,i,o)=>{let s=t.state[G];i=We(s+1,i),a({task:()=>{e.pushState(n,i),r({type:`PUSH`})},navigateOpts:o,type:`PUSH`,path:n,state:i})},replace:(n,i,o)=>{let s=t.state[G];i=We(s,i),a({task:()=>{e.replaceState(n,i),r({type:`REPLACE`})},navigateOpts:o,type:`REPLACE`,path:n,state:i})},go:(t,n)=>{a({task:()=>{e.go(t),i({type:`GO`,index:t})},navigateOpts:n,type:`GO`})},back:t=>{a({task:()=>{e.back(t?.ignoreBlocker??!1),i({type:`BACK`})},navigateOpts:t,type:`BACK`})},forward:t=>{a({task:()=>{e.forward(t?.ignoreBlocker??!1),i({type:`FORWARD`})},navigateOpts:t,type:`FORWARD`})},canGoBack:()=>t.state[G]!==0,createHref:t=>e.createHref(t),block:t=>{if(!e.setBlockers)return()=>{};let n=e.getBlockers?.()??[];return e.setBlockers([...n,t]),()=>{let n=e.getBlockers?.()??[];e.setBlockers?.(n.filter(e=>e!==t))}},flush:()=>e.flush?.(),destroy:()=>e.destroy?.(),notify:r}}function We(e,t){t||={};let n=q();return{...t,key:n,__TSR_key:n,[G]:e}}function Ge(e){let t=e?.window??(typeof document<`u`?window:void 0),n=t.history.pushState,r=t.history.replaceState,i=[],a=()=>i,o=e=>i=e,s=e?.createHref??(e=>e),c=e?.parseLocation??(()=>K(`${t.location.pathname}${t.location.search}${t.location.hash}`,t.history.state));if(!t.history.state?.__TSR_key&&!t.history.state?.key){let e=q();t.history.replaceState({[G]:0,key:e,__TSR_key:e},``)}let l=c(),u,d=!1,f=!1,p=!1,m=!1,h=()=>l,g,_,v=()=>{g&&(C._ignoreSubscribers=!0,(g.isPush?t.history.pushState:t.history.replaceState)(g.state,``,g.href),C._ignoreSubscribers=!1,g=void 0,_=void 0,u=void 0)},y=(e,t,n)=>{let r=s(t);_||(u=l),l=K(t,n),g={href:r,state:n,isPush:g?.isPush||e===`push`},_||=Promise.resolve().then(()=>v())},b=e=>{l=c(),C.notify({type:e})},x=async()=>{if(f){f=!1;return}let e=c(),n=e.state[G]-l.state[G],r=n===1,i=n===-1,o=!r&&!i||d;d=!1;let s=o?`GO`:i?`BACK`:`FORWARD`,u=o?{type:`GO`,index:n}:{type:i?`BACK`:`FORWARD`};if(p)p=!1;else{let n=a();if(typeof document<`u`&&n.length){for(let r of n)if(await r.blockerFn({currentLocation:l,nextLocation:e,action:s})){f=!0,t.history.go(1),C.notify(u);return}}}l=c(),C.notify(u)},S=e=>{if(m){m=!1;return}let t=!1,n=a();if(typeof document<`u`&&n.length)for(let e of n){let n=e.enableBeforeUnload??!0;if(n===!0){t=!0;break}if(typeof n==`function`&&n()===!0){t=!0;break}}if(t)return e.preventDefault(),e.returnValue=``},C=Ue({getLocation:h,getLength:()=>t.history.length,pushState:(e,t)=>y(`push`,e,t),replaceState:(e,t)=>y(`replace`,e,t),back:e=>(e&&(p=!0),m=!0,t.history.back()),forward:e=>{e&&(p=!0),m=!0,t.history.forward()},go:e=>{d=!0,t.history.go(e)},createHref:e=>s(e),flush:v,destroy:()=>{t.history.pushState=n,t.history.replaceState=r,t.removeEventListener(He,S,{capture:!0}),t.removeEventListener(Ve,x)},onBlocked:()=>{u&&l!==u&&(l=u)},getBlockers:a,setBlockers:o,notifyOnIndexChange:!1});return t.addEventListener(He,S,{capture:!0}),t.addEventListener(Ve,x),t.history.pushState=function(...e){let r=n.apply(t.history,e);return C._ignoreSubscribers||b(`PUSH`),r},t.history.replaceState=function(...e){let n=r.apply(t.history,e);return C._ignoreSubscribers||b(`REPLACE`),n},C}function Ke(e){let t=e.replace(/[\x00-\x1f\x7f]/g,``);return t.startsWith(`//`)&&(t=`/`+t.replace(/^\/+/,``)),t}function K(e,t){let n=Ke(e),r=n.indexOf(`#`),i=n.indexOf(`?`),a=q();return{href:n,pathname:n.substring(0,r>0?i>0?Math.min(r,i):r:i>0?i:n.length),hash:r>-1?n.substring(r):``,search:i>-1?n.slice(i,r===-1?void 0:r):``,state:t||{[G]:0,key:a,__TSR_key:a}}}function q(){return(Math.random()+1).toString(36).substring(7)}function J(e,t){let n=t,r=e;return{fromLocation:n,toLocation:r,pathChanged:n?.pathname!==r.pathname,hrefChanged:n?.href!==r.href,hashChanged:n?.hash!==r.hash}}var qe=class{constructor(e,t){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this.resetNextScroll=!0,this.shouldViewTransition=void 0,this.isViewTransitionTypesSupported=void 0,this.subscribers=new Set,this.isScrollRestoring=!1,this.isScrollRestorationSetup=!1,this.startTransition=e=>e(),this.update=e=>{let t=this.options,n=this.basepath??t?.basepath??`/`,r=this.basepath===void 0,i=t?.rewrite;if(this.options={...t,...e},this.isServer=this.options.isServer??typeof document>`u`,this.protocolAllowlist=new Set(this.options.protocolAllowlist),this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=w(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.options.history?this.history=this.options.history:this.history=Ge()),this.origin=this.options.origin,this.origin||(window?.origin&&window.origin!==`null`?this.origin=window.origin:this.origin=`http://localhost`),this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let e;this.resolvePathCache=ne(1e3),e=this.buildRouteTree(),this.setRoutes(e)}if(!this.stores&&this.latestLocation){let e=this.getStoreConfig(this);this.batch=e.batch,this.stores=Te(Ye(this.latestLocation),e),fe(this)}let a=!1,o=this.options.basepath??`/`,s=this.options.rewrite;if(r||n!==o||i!==s){this.basepath=o;let e=[],t=te(o);t&&t!==`/`&&e.push(xe({basepath:o})),s&&e.push(s),this.rewrite=e.length===0?void 0:e.length===1?e[0]:be(e),this.history&&this.updateLatestLocation(),a=!0}a&&this.stores&&this.stores.location.set(this.latestLocation),typeof window<`u`&&`CSS`in window&&typeof window.CSS?.supports==`function`&&(this.isViewTransitionTypesSupported=window.CSS.supports(`selector(:active-view-transition-type(a)`))},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{let e=b(this.routeTree,this.options.caseSensitive,(e,t)=>{e.init({originalIndex:t})});return this.options.routeMasks&&S(this.options.routeMasks,e.processedTree),e},this.subscribe=(e,t)=>{let n={eventType:e,fn:t};return this.subscribers.add(n),()=>{this.subscribers.delete(n)}},this.emit=e=>{this.subscribers.forEach(t=>{t.eventType===e.type&&t.fn(e)})},this.parseLocation=(e,t)=>{let n=({pathname:e,search:n,hash:r,href:i,state:a})=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(e)){let i=this.options.parseSearch(n),o=this.options.stringifySearch(i);return{href:e+o+r,publicHref:e+o+r,pathname:m(e).path,external:!1,searchStr:o,search:l(t?.search,i),hash:m(r.slice(1)).path,state:c(t?.state,a)}}let o=new URL(i,this.origin),s=F(this.rewrite,o),u=this.options.parseSearch(s.search),d=this.options.stringifySearch(u);return s.search=d,{href:s.href.replace(s.origin,``),publicHref:i,pathname:m(s.pathname).path,external:!!this.rewrite&&s.origin!==this.origin,searchStr:d,search:l(t?.search,u),hash:m(s.hash.slice(1)).path,state:c(t?.state,a)}},r=n(e),{__tempLocation:i,__tempKey:a}=r.state;if(i&&(!a||a===this.tempLocationKey)){let e=n(i);return e.state.key=r.state.key,e.state.__TSR_key=r.state.__TSR_key,delete e.state.__tempLocation,{...e,maskedLocation:r}}return r},this.resolvePathWithBase=(e,t)=>T({base:e,to:k(t),trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(e,t,n)=>typeof e==`string`?this.matchRoutesInternal({pathname:e,search:t},n):this.matchRoutesInternal(e,t),this.getMatchedRoutes=e=>Xe({pathname:e,routesById:this.routesById,processedTree:this.processedTree}),this.cancelMatch=e=>{let t=this.getMatch(e);t&&(t.abortController.abort(),clearTimeout(t._nonReactive.pendingTimeout),t._nonReactive.pendingTimeout=void 0)},this.cancelMatches=()=>{this.stores.pendingIds.get().forEach(e=>{this.cancelMatch(e)}),this.stores.matchesId.get().forEach(e=>{if(this.stores.pendingMatchStores.has(e))return;let t=this.stores.matchStores.get(e)?.get();t&&(t.status===`pending`||t.isFetching===`loader`)&&this.cancelMatch(e)})},this.buildLocation=e=>{let t=(t={})=>{let n=t._fromLocation||this.pendingBuiltLocation||this.latestLocation,r=this.matchRoutesLightweight(n);t.from;let i=t.unsafeRelative===`path`?n.pathname:t.from??r.fullPath,a=this.resolvePathWithBase(i,`.`),s=r.search,u=Object.assign(Object.create(null),r.params),f=t.to?this.resolvePathWithBase(a,`${t.to}`):this.resolvePathWithBase(a,`.`),p=t.params===!1||t.params===null?Object.create(null):(t.params??!0)===!0?u:Object.assign(u,d(t.params,u)),h=this.getMatchedRoutes(f),g=h.matchedRoutes;if((!h.foundRoute||h.foundRoute.path!==`/`&&h.routeParams[`**`])&&this.options.notFoundRoute&&(g=[...g,this.options.notFoundRoute]),Object.keys(p).length>0)for(let e of g){let t=e.options.params?.stringify??e.options.stringifyParams;if(t)try{Object.assign(p,t(p))}catch{}}let _=e.leaveParams?f:m(D({path:f,params:p,decoder:this.pathParamsDecoder,server:this.isServer}).interpolatedPath).path,v=s;if(e._includeValidateSearch&&this.options.search?.strict){let e={};g.forEach(t=>{if(t.options.validateSearch)try{Object.assign(e,X(t.options.validateSearch,{...e,...v}))}catch{}}),v=e}v=Ze({search:v,dest:t,destRoutes:g,_includeValidateSearch:e._includeValidateSearch}),v=l(s,v);let y=this.options.stringifySearch(v),b=t.hash===!0?n.hash:t.hash?d(t.hash,n.hash):void 0,x=b?`#${b}`:``,S=t.state===!0?n.state:t.state?d(t.state,n.state):{};S=c(n.state,S);let C=`${_}${y}${x}`,w,T,E=!1;if(this.rewrite){let e=new URL(C,this.origin),t=Se(this.rewrite,e);w=e.href.replace(e.origin,``),t.origin===this.origin?T=t.pathname+t.search+t.hash:(T=t.href,E=!0)}else w=o(C),T=w;return{publicHref:T,href:w,pathname:_,search:v,searchStr:y,state:S,hash:b??``,external:E,unmaskOnReload:t.unmaskOnReload}},n=(n={},r)=>{let i=t(n),a=r?t(r):void 0;if(!a){let n=Object.create(null);if(this.options.routeMasks){let o=O(i.pathname,this.processedTree);if(o){Object.assign(n,o.rawParams);let{from:i,params:s,...c}=o.route,l=s===!1||s===null?Object.create(null):(s??!0)===!0?n:Object.assign(n,d(s,n));r={from:e.from,...c,params:l},a=t(r)}}}return a&&(i.maskedLocation=a),i};return e.mask?n(e,{from:e.from,...e.mask}):n(e)},this.commitLocation=async({viewTransition:e,ignoreBlocker:t,...n})=>{let r=()=>{let e=[`key`,`__TSR_key`,`__TSR_index`,`__hashScrollIntoViewOptions`];e.forEach(e=>{n.state[e]=this.latestLocation.state[e]});let t=_(n.state,this.latestLocation.state);return e.forEach(e=>{delete n.state[e]}),t},i=x(this.latestLocation.href)===x(n.href),o=this.commitLocationPromise;if(this.commitLocationPromise=a(()=>{o?.resolve(),o=void 0}),i&&r())this.load();else{let{maskedLocation:r,hashScrollIntoView:i,...a}=n;r&&(a={...r,state:{...r.state,__tempKey:void 0,__tempLocation:{...a,search:a.searchStr,state:{...a.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(a.unmaskOnReload??this.options.unmaskOnReload??!1)&&(a.state.__tempKey=this.tempLocationKey)),a.state.__hashScrollIntoViewOptions=i??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=e,this.history[n.replace?`replace`:`push`](a.publicHref,a.state,{ignoreBlocker:t})}return this.resetNextScroll=n.resetScroll??!0,this.history.subscribers.size||this.load(),this.commitLocationPromise},this.buildAndCommitLocation=({replace:e,resetScroll:t,hashScrollIntoView:n,viewTransition:r,ignoreBlocker:i,href:a,...o}={})=>{if(a){let t=this.history.location.state.__TSR_index,n=K(a,{__TSR_index:e?t:t+1}),r=new URL(n.pathname,this.origin);o.to=F(this.rewrite,r).pathname,o.search=this.options.parseSearch(n.search),o.hash=n.hash.slice(1)}let s=this.buildLocation({...o,_includeValidateSearch:!0});this.pendingBuiltLocation=s;let c=this.commitLocation({...s,viewTransition:r,replace:e,resetScroll:t,hashScrollIntoView:n,ignoreBlocker:i});return Promise.resolve().then(()=>{this.pendingBuiltLocation===s&&(this.pendingBuiltLocation=void 0)}),c},this.navigate=async({to:e,reloadDocument:t,href:n,publicHref:r,...i})=>{let a=!1;if(n)try{new URL(`${n}`),a=!0}catch{}if(a&&!t&&(t=!0),t){if(e!==void 0||!n){let t=this.buildLocation({to:e,...i});n??=t.publicHref,r??=t.publicHref}let t=!a&&r?r:n;if(y(t,this.protocolAllowlist))return Promise.resolve();if(!i.ignoreBlocker){let e=this.history.getBlockers?.()??[];for(let t of e)if(t?.blockerFn&&await t.blockerFn({currentLocation:this.latestLocation,nextLocation:this.latestLocation,action:`PUSH`}))return Promise.resolve()}return i.replace?window.location.replace(t):window.location.href=t,Promise.resolve()}return this.buildAndCommitLocation({...i,href:n,to:e,_isNavigate:!0})},this.beforeLoad=()=>{this.cancelMatches(),this.updateLatestLocation();let e=this.matchRoutes(this.latestLocation),t=this.stores.cachedMatches.get().filter(t=>!e.some(e=>e.id===t.id));this.batch(()=>{this.stores.status.set(`pending`),this.stores.statusCode.set(200),this.stores.isLoading.set(!0),this.stores.location.set(this.latestLocation),this.stores.setPending(e),this.stores.setCached(t)})},this.load=async e=>{let t,n,r,i=this.stores.resolvedLocation.get()??this.stores.location.get();for(r=new Promise(a=>{this.startTransition(async()=>{try{this.beforeLoad();let t=this.latestLocation,n=J(t,this.stores.resolvedLocation.get());this.stores.redirect.get()||this.emit({type:`onBeforeNavigate`,...n}),this.emit({type:`onBeforeLoad`,...n}),await Re({router:this,sync:e?.sync,forceStaleReload:i.href===t.href,matches:this.stores.pendingMatches.get(),location:t,updateMatch:this.updateMatch,onReady:async()=>{this.startTransition(()=>{this.startViewTransition(async()=>{let e=null,t=null,n=null,r=null;this.batch(()=>{let i=this.stores.pendingMatches.get(),a=i.length,o=this.stores.matches.get();e=a?o.filter(e=>!this.stores.pendingMatchStores.has(e.id)):null;let s=new Set;for(let e of this.stores.pendingMatchStores.values())e.routeId&&s.add(e.routeId);let c=new Set;for(let e of this.stores.matchStores.values())e.routeId&&c.add(e.routeId);t=a?o.filter(e=>!s.has(e.routeId)):null,n=a?i.filter(e=>!c.has(e.routeId)):null,r=a?i.filter(e=>c.has(e.routeId)):o,this.stores.isLoading.set(!1),this.stores.loadedAt.set(Date.now()),a&&(this.stores.setMatches(i),this.stores.setPending([]),this.stores.setCached([...this.stores.cachedMatches.get(),...e.filter(e=>e.status!==`error`&&e.status!==`notFound`&&e.status!==`redirected`)]),this.clearExpiredCache())});for(let[e,i]of[[t,`onLeave`],[n,`onEnter`],[r,`onStay`]])if(e)for(let t of e)this.looseRoutesById[t.routeId].options[i]?.(t)})})}})}catch(e){M(e)?(t=e,this.navigate({...t.options,replace:!0,ignoreBlocker:!0})):j(e)&&(n=e);let r=t?t.status:n?404:this.stores.matches.get().some(e=>e.status===`error`)?500:200;this.batch(()=>{this.stores.statusCode.set(r),this.stores.redirect.set(t)})}this.latestLoadPromise===r&&(this.commitLocationPromise?.resolve(),this.latestLoadPromise=void 0,this.commitLocationPromise=void 0),a()})}),this.latestLoadPromise=r,await r;this.latestLoadPromise&&r!==this.latestLoadPromise;)await this.latestLoadPromise;let a;this.hasNotFoundMatch()?a=404:this.stores.matches.get().some(e=>e.status===`error`)&&(a=500),a!==void 0&&this.stores.statusCode.set(a)},this.startViewTransition=e=>{let t=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,t&&typeof document<`u`&&`startViewTransition`in document&&typeof document.startViewTransition==`function`){let n;if(typeof t==`object`&&this.isViewTransitionTypesSupported){let r=this.latestLocation,i=this.stores.resolvedLocation.get(),a=typeof t.types==`function`?t.types(J(r,i)):t.types;if(a===!1){e();return}n={update:e,types:a}}else n=e;document.startViewTransition(n)}else e()},this.updateMatch=(e,t)=>{this.startTransition(()=>{let n=this.stores.pendingMatchStores.get(e);if(n){n.set(t);return}let r=this.stores.matchStores.get(e);if(r){r.set(t);return}let i=this.stores.cachedMatchStores.get(e);if(i){let n=t(i.get());n.status===`redirected`?this.stores.cachedMatchStores.delete(e)&&this.stores.cachedIds.set(t=>t.filter(t=>t!==e)):i.set(n)}})},this.getMatch=e=>this.stores.cachedMatchStores.get(e)?.get()??this.stores.pendingMatchStores.get(e)?.get()??this.stores.matchStores.get(e)?.get(),this.invalidate=e=>{let t=t=>e?.filter?.(t)??!0?{...t,invalid:!0,...e?.forcePending||t.status===`error`||t.status===`notFound`?{status:`pending`,error:void 0}:void 0}:t;return this.batch(()=>{this.stores.setMatches(this.stores.matches.get().map(t)),this.stores.setCached(this.stores.cachedMatches.get().map(t)),this.stores.setPending(this.stores.pendingMatches.get().map(t))}),this.shouldViewTransition=!1,this.load({sync:e?.sync})},this.getParsedLocationHref=e=>e.publicHref||`/`,this.resolveRedirect=e=>{let t=e.headers.get(`Location`);if(!e.options.href||e.options._builtLocation){let t=e.options._builtLocation??this.buildLocation(e.options),n=this.getParsedLocationHref(t);e.options.href=n,e.headers.set(`Location`,n)}else if(t)try{let n=new URL(t);if(this.origin&&n.origin===this.origin){let t=n.pathname+n.search+n.hash;e.options.href=t,e.headers.set(`Location`,t)}}catch{}if(e.options.href&&!e.options._builtLocation&&y(e.options.href,this.protocolAllowlist))throw Error(`Redirect blocked: unsafe protocol`);return e.headers.get(`Location`)||e.headers.set(`Location`,e.options.href),e},this.clearCache=e=>{let t=e?.filter;t===void 0?this.stores.setCached([]):this.stores.setCached(this.stores.cachedMatches.get().filter(e=>!t(e)))},this.clearExpiredCache=()=>{let e=Date.now();this.clearCache({filter:t=>{let n=this.looseRoutesById[t.routeId];if(!n.options.loader)return!0;let r=(t.preload?n.options.preloadGcTime??this.options.defaultPreloadGcTime:n.options.gcTime??this.options.defaultGcTime)??300*1e3;return t.status===`error`?!0:e-t.updatedAt>=r}})},this.loadRouteChunk=U,this.preloadRoute=async e=>{let t=e._builtLocation??this.buildLocation(e),n=this.matchRoutes(t,{throwOnError:!0,preload:!0,dest:e}),r=new Set([...this.stores.matchesId.get(),...this.stores.pendingIds.get()]),i=new Set([...r,...this.stores.cachedIds.get()]),a=n.filter(e=>!i.has(e.id));if(a.length){let e=this.stores.cachedMatches.get();this.stores.setCached([...e,...a])}try{return n=await Re({router:this,matches:n,location:t,preload:!0,updateMatch:(e,t)=>{r.has(e)?n=n.map(n=>n.id===e?t(n):n):this.updateMatch(e,t)}}),n}catch(e){if(M(e))return e.options.reloadDocument?void 0:await this.preloadRoute({...e.options,_fromLocation:t});j(e)||console.error(e);return}},this.matchRoute=(e,t)=>{let n={...e,to:e.to?this.resolvePathWithBase(e.from||``,e.to):void 0,params:e.params||{},leaveParams:!0},r=this.buildLocation(n);if(t?.pending&&this.stores.status.get()!==`pending`)return!1;let i=(t?.pending===void 0?!this.stores.isLoading.get():t.pending)?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),a=C(r.pathname,t?.caseSensitive??!1,t?.fuzzy??!1,i.pathname,this.processedTree);return!a||e.params&&!_(a.rawParams,e.params,{partial:!0})?!1:t?.includeSearch??!0?_(i.search,r.search,{partial:!0})?a.rawParams:!1:a.rawParams},this.hasNotFoundMatch=()=>this.stores.matches.get().some(e=>e.status===`notFound`||e.globalNotFound),this.getStoreConfig=t,this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...e,caseSensitive:e.caseSensitive??!1,notFoundMode:e.notFoundMode??`fuzzy`,stringifySearch:e.stringifySearch??_e,parseSearch:e.parseSearch??ge,protocolAllowlist:e.protocolAllowlist??g}),typeof document<`u`&&(self.__TSR_ROUTER__=this)}isShell(){return!!this.options.isShell}isPrerendering(){return!!this.options.isPrerendering}get state(){return this.stores.__store.get()}setRoutes({routesById:e,routesByPath:t,processedTree:n}){this.routesById=e,this.routesByPath=t,this.processedTree=n;let r=this.options.notFoundRoute;r&&(r.init({originalIndex:99999999999}),this.routesById[r.id]=r)}get looseRoutesById(){return this.routesById}getParentContext(e){return e?.id?e.context??this.options.context??void 0:this.options.context??void 0}matchRoutesInternal(e,t){let n=this.getMatchedRoutes(e.pathname),{foundRoute:r,routeParams:i,parsedParams:o}=n,{matchedRoutes:s}=n,u=!1;(r?r.path!==`/`&&i[`**`]:x(e.pathname))&&(this.options.notFoundRoute?s=[...s,this.options.notFoundRoute]:u=!0);let d=u?$e(this.options.notFoundMode,s):void 0,f=Array(s.length),p=new Map;for(let e of this.stores.matchStores.values())e.routeId&&p.set(e.routeId,e.get());for(let n=0;nthis.navigate({...t,_fromLocation:e}),buildLocation:this.buildLocation,cause:n.cause,abortController:n.abortController,preload:!!n.preload,matches:f,routeId:r.id};n.__routeContext=r.options.context(t)??void 0}n.context={...a,...n.__routeContext,...n.__beforeLoadContext}}}return f}matchRoutesLightweight(e){let{matchedRoutes:t,routeParams:n,parsedParams:r}=this.getMatchedRoutes(e.pathname),i=f(t),a={...e.search};for(let e of t)try{Object.assign(a,X(e.options.validateSearch,a))}catch{}let o=f(this.stores.matchesId.get()),s=o&&this.stores.matchStores.get(o)?.get(),c=s&&s.routeId===i.id&&s.pathname===e.pathname,l;if(c)l=s.params;else{let e=Object.assign(Object.create(null),n);for(let i of t)try{et(i,n,r??{},e)}catch{}l=e}return{matchedRoutes:t,fullPath:i.fullPath,search:a,params:l}}},Y=class extends Error{},Je=class extends Error{};function Ye(e){return{loadedAt:0,isLoading:!1,isTransitioning:!1,status:`idle`,resolvedLocation:void 0,location:e,matches:[],statusCode:200}}function X(e,t){if(e==null)return{};if(`~standard`in e){let n=e[`~standard`].validate(t);if(n instanceof Promise)throw new Y(`Async validation not supported`);if(n.issues)throw new Y(JSON.stringify(n.issues,void 0,2),{cause:n});return n.value}return`parse`in e?e.parse(t):typeof e==`function`?e(t):{}}function Xe({pathname:e,routesById:t,processedTree:n}){let r=Object.create(null),i=x(e),a,o,s=E(i,n,!0);return s&&(a=s.route,Object.assign(r,s.rawParams),o=Object.assign(Object.create(null),s.parsedParams)),{matchedRoutes:s?.branch||[t.__root__],routeParams:r,foundRoute:a,parsedParams:o}}function Ze({search:e,dest:t,destRoutes:n,_includeValidateSearch:r}){return Qe(n)(e,t,r??!1)}function Qe(e){let t={dest:null,_includeValidateSearch:!1,middlewares:[]};for(let n of e)`search`in n.options?n.options.search?.middlewares&&t.middlewares.push(...n.options.search.middlewares):(n.options.preSearchFilters||n.options.postSearchFilters)&&t.middlewares.push(({search:e,next:t})=>{let r=e;`preSearchFilters`in n.options&&n.options.preSearchFilters&&(r=n.options.preSearchFilters.reduce((e,t)=>t(e),e));let i=t(r);return`postSearchFilters`in n.options&&n.options.postSearchFilters?n.options.postSearchFilters.reduce((e,t)=>t(e),i):i}),n.options.validateSearch&&t.middlewares.push(({search:e,next:r})=>{let i=r(e);if(!t._includeValidateSearch)return i;try{return{...i,...X(n.options.validateSearch,i)??void 0}}catch{return i}});t.middlewares.push(({search:e})=>{let n=t.dest;return n.search?n.search===!0?e:d(n.search,e):{}});let n=(e,t,r)=>{if(e>=r.length)return t;let i=r[e];return i({search:t,next:t=>n(e+1,t,r)})};return function(e,r,i){return t.dest=r,t._includeValidateSearch=i,n(0,e,t.middlewares)}}function $e(e,t){if(e!==`root`)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.children)return n.id}return re}function et(e,t,n,r){let i=e.options.params?.parse??e.options.parseParams;if(i)if(e.options.skipRouteOnParseError)for(let e in t)e in n&&(r[e]=n[e]);else{let e=i(r);Object.assign(r,e)}}var Z=n(e(),1),Q=t();function tt(e){let t=e.errorComponent??rt;return(0,Q.jsx)(nt,{getResetKey:e.getResetKey,onCatch:e.onCatch,children:({error:n,reset:r})=>n?Z.createElement(t,{error:n,reset:r}):e.children})}var nt=class extends Z.Component{constructor(...e){super(...e),this.state={error:null}}static getDerivedStateFromProps(e,t){let n=e.getResetKey();return t.error&&t.resetKey!==n?{resetKey:n,error:null}:{resetKey:n}}static getDerivedStateFromError(e){return{error:e}}reset(){this.setState({error:null})}componentDidCatch(e,t){this.props.onCatch&&this.props.onCatch(e,t)}render(){return this.props.children({error:this.state.error,reset:()=>{this.reset()}})}};function rt({error:e}){let[t,n]=Z.useState(!1);return(0,Q.jsxs)(`div`,{style:{padding:`.5rem`,maxWidth:`100%`},children:[(0,Q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`.5rem`},children:[(0,Q.jsx)(`strong`,{style:{fontSize:`1rem`},children:`Something went wrong!`}),(0,Q.jsx)(`button`,{style:{appearance:`none`,fontSize:`.6em`,border:`1px solid currentColor`,padding:`.1rem .2rem`,fontWeight:`bold`,borderRadius:`.25rem`},onClick:()=>n(e=>!e),children:t?`Hide Error`:`Show Error`})]}),(0,Q.jsx)(`div`,{style:{height:`.25rem`}}),t?(0,Q.jsx)(`div`,{children:(0,Q.jsx)(`pre`,{style:{fontSize:`.7em`,border:`1px solid red`,borderRadius:`.25rem`,padding:`.3rem`,color:`red`,overflow:`auto`},children:e.message?(0,Q.jsx)(`code`,{children:e.message}):null})}):null]})}function it(e){let t=i(),n=`not-found-${v(t.stores.location,e=>e.pathname)}-${v(t.stores.status,e=>e)}`;return(0,Q.jsx)(tt,{getResetKey:()=>n,onCatch:(t,n)=>{if(j(t))e.onCatch?.(t,n);else throw t},errorComponent:({error:t})=>{if(j(t))return e.fallback?.(t);throw t},children:e.children})}function at(){return(0,Q.jsx)(`p`,{children:`Not Found`})}function $(e){return(0,Q.jsx)(Q.Fragment,{children:e.children})}function ot(e,t,n){return t.options.notFoundComponent?(0,Q.jsx)(t.options.notFoundComponent,{...n}):e.options.defaultNotFoundComponent?(0,Q.jsx)(e.options.defaultNotFoundComponent,{...n}):(0,Q.jsx)(at,{})}var st=Z.memo(function({matchId:e}){let t=i(),n=t.stores.matchStores.get(e);n||p();let r=v(t.stores.loadedAt,e=>e),a=v(n,e=>e);return(0,Q.jsx)(ct,{router:t,matchId:e,resetKey:r,matchState:Z.useMemo(()=>{let e=a.routeId,n=t.routesById[e].parentRoute?.id;return{routeId:e,ssr:a.ssr,_displayPending:a._displayPending,parentRouteId:n}},[a._displayPending,a.routeId,a.ssr,t.routesById])})});function ct({router:e,matchId:t,resetKey:n,matchState:r}){let i=e.routesById[r.routeId],a=i.options.pendingComponent??e.options.defaultPendingComponent,o=a?(0,Q.jsx)(a,{}):null,s=i.options.errorComponent??e.options.defaultErrorComponent,c=i.options.onCatch??e.options.defaultOnCatch,l=i.isRoot?i.options.notFoundComponent??e.options.notFoundRoute?.options.component:i.options.notFoundComponent,u=r.ssr===!1||r.ssr===`data-only`,d=(!i.isRoot||i.options.wrapInSuspense||u)&&(i.options.wrapInSuspense??a??(i.options.errorComponent?.preload||u))?Z.Suspense:$,f=s?tt:$,p=l?it:$;return(0,Q.jsxs)(i.isRoot?i.options.shellComponent??$:$,{children:[(0,Q.jsx)(ie.Provider,{value:t,children:(0,Q.jsx)(d,{fallback:o,children:(0,Q.jsx)(f,{getResetKey:()=>n,errorComponent:s||rt,onCatch:(e,t)=>{if(j(e))throw e.routeId??=r.routeId,e;c?.(e,t)},children:(0,Q.jsx)(p,{fallback:e=>{if(e.routeId??=r.routeId,!l||e.routeId&&e.routeId!==r.routeId||!e.routeId&&!i.isRoot)throw e;return Z.createElement(l,e)},children:u||r._displayPending?(0,Q.jsx)(ee,{fallback:o,children:(0,Q.jsx)(ut,{matchId:t})}):(0,Q.jsx)(ut,{matchId:t})})})})}),r.parentRouteId===`__root__`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(lt,{resetKey:n}),(e.options.scrollRestoration,null)]}):null]})}function lt({resetKey:e}){let t=i(),n=Z.useRef(void 0);return r(()=>{let e=t.latestLocation.href;(n.current===void 0||n.current!==e)&&(t.emit({type:`onRendered`,...J(t.stores.location.get(),t.stores.resolvedLocation.get())}),n.current=e)},[t.latestLocation.state.__TSR_key,e,t]),null}var ut=Z.memo(function({matchId:e}){let t=i(),n=(e,n)=>t.getMatch(e.id)?._nonReactive[n]??e._nonReactive[n],r=t.stores.matchStores.get(e);r||p();let o=v(r,e=>e),s=o.routeId,c=t.routesById[s],l=Z.useMemo(()=>{let e=(t.routesById[s].options.remountDeps??t.options.defaultRemountDeps)?.({routeId:s,loaderDeps:o.loaderDeps,params:o._strictParams,search:o._strictSearch});return e?JSON.stringify(e):void 0},[s,o.loaderDeps,o._strictParams,o._strictSearch,t.options.defaultRemountDeps,t.routesById]),u=Z.useMemo(()=>{let e=c.options.component??t.options.defaultComponent;return e?(0,Q.jsx)(e,{},l):(0,Q.jsx)(dt,{})},[l,c.options.component,t.options.defaultComponent]);if(o._displayPending)throw n(o,`displayPendingPromise`);if(o._forcePending)throw n(o,`minPendingPromise`);if(o.status===`pending`){let e=c.options.pendingMinMs??t.options.defaultPendingMinMs;if(e){let n=t.getMatch(o.id);if(n&&!n._nonReactive.minPendingPromise){let t=a();n._nonReactive.minPendingPromise=t,setTimeout(()=>{t.resolve(),n._nonReactive.minPendingPromise=void 0},e)}}throw n(o,`loadPromise`)}if(o.status===`notFound`)return j(o.error)||p(),ot(t,c,o.error);if(o.status===`redirected`)throw M(o.error)||p(),n(o,`loadPromise`);if(o.status===`error`)throw o.error;return u}),dt=Z.memo(function(){let e=i(),t=Z.useContext(ie),n,r=!1,a;{let i=t?e.stores.matchStores.get(t):void 0;[n,r]=v(i,e=>[e?.routeId,e?.globalNotFound??!1]),a=v(e.stores.matchesId,e=>e[e.findIndex(e=>e===t)+1])}let o=n?e.routesById[n]:void 0,s=e.options.defaultPendingComponent?(0,Q.jsx)(e.options.defaultPendingComponent,{}):null;if(r)return o||p(),ot(e,o,void 0);if(!a)return null;let c=(0,Q.jsx)(st,{matchId:a});return n===`__root__`?(0,Q.jsx)(Z.Suspense,{fallback:s,children:c}):c});export{rt as a,Ce as c,tt as i,we as l,dt as n,qe as o,$ as r,J as s,st as t}; \ No newline at end of file diff --git a/src/www/assets/Matches-C_9WN1ag.js b/src/www/assets/Matches-C_9WN1ag.js new file mode 100644 index 0000000..5d61d94 --- /dev/null +++ b/src/www/assets/Matches-C_9WN1ag.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{o as r,s as i,t as a}from"./useRouter-DS97kuA5.js";import{t as o}from"./useStore-pgHsvR0E.js";import{f as s}from"./ClientOnly-COESZSX_.js";import"./redirect-dE0wk0WH.js";import{a as c,i as l,r as u,s as d,t as f}from"./Match-Bdr6F13c.js";import{n as p}from"./matchContext-BJCpOvLW.js";import{t as m}from"./atom-DI1Bn-1s.js";function h(e){if(typeof document<`u`&&document.querySelector){let t=e.stores.location.get(),n=t.state.__hashScrollIntoViewOptions??!0;if(n&&t.hash!==``){let e=document.getElementById(t.hash);e&&e.scrollIntoView(n)}}}var g=n(e(),1);function _(){let e=a(),t=g.useRef({router:e,mounted:!1}),[n,c]=g.useState(!1),l=o(e.stores.isLoading,e=>e),u=o(e.stores.hasPending,e=>e),f=i(l),p=l||n||u,_=i(p),v=l||u,y=i(v);return e.startTransition=e=>{c(!0),g.startTransition(()=>{e(),c(!1)})},g.useEffect(()=>{let t=e.history.subscribe(e.load),n=e.buildLocation({to:e.latestLocation.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});return s(e.latestLocation.publicHref)!==s(n.publicHref)&&e.commitLocation({...n,replace:!0}),()=>{t()}},[e,e.history]),r(()=>{typeof window<`u`&&e.ssr||t.current.router===e&&t.current.mounted||(t.current={router:e,mounted:!0},(async()=>{try{await e.load()}catch(e){console.error(e)}})())},[e]),r(()=>{f&&!l&&e.emit({type:`onLoad`,...d(e.stores.location.get(),e.stores.resolvedLocation.get())})},[f,e,l]),r(()=>{y&&!v&&e.emit({type:`onBeforeRouteMount`,...d(e.stores.location.get(),e.stores.resolvedLocation.get())})},[v,y,e]),r(()=>{if(_&&!p){let t=d(e.stores.location.get(),e.stores.resolvedLocation.get());e.emit({type:`onResolved`,...t}),m(()=>{e.stores.status.set(`idle`),e.stores.resolvedLocation.set(e.stores.location.get())}),t.hrefChanged&&h(e)}},[p,_,e]),null}var v=t();function y(){let e=a(),t=e.routesById.__root__.options.pendingComponent??e.options.defaultPendingComponent,n=t?(0,v.jsx)(t,{}):null,r=(0,v.jsxs)(typeof document<`u`&&e.ssr?u:g.Suspense,{fallback:n,children:[(0,v.jsx)(_,{}),(0,v.jsx)(b,{})]});return e.options.InnerWrap?(0,v.jsx)(e.options.InnerWrap,{children:r}):r}function b(){let e=a(),t=o(e.stores.firstId,e=>e),n=o(e.stores.loadedAt,e=>e),r=t?(0,v.jsx)(f,{matchId:t}):null;return(0,v.jsx)(p.Provider,{value:t,children:e.options.disableGlobalCatchBoundary?r:(0,v.jsx)(l,{getResetKey:()=>n,errorComponent:c,onCatch:void 0,children:r})})}function x(){let e=a();return o(e.stores.matchRouteDeps,e=>e),g.useCallback(t=>{let{pending:n,caseSensitive:r,fuzzy:i,includeSearch:a,...o}=t;return e.matchRoute(o,{pending:n,caseSensitive:r,fuzzy:i,includeSearch:a})},[e])}export{x as n,y as t}; \ No newline at end of file diff --git a/src/www/assets/_error-Ct843SHu.js b/src/www/assets/_error-Ct843SHu.js new file mode 100644 index 0000000..bb6c99c --- /dev/null +++ b/src/www/assets/_error-Ct843SHu.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_error-DUUb7pi1.js","assets/messages-BOl-zx8S.js","assets/search-provider-D-fTfilE.js","assets/skeleton-gJOqI-7w.js","assets/button-D-oR8d6w.js","assets/createLucideIcon-DMX28cCu.js","assets/dist-DzENW8NP.js","assets/confirm-dialog-DyK21C4Z.js","assets/dist-C3yOG_Qz.js","assets/dist-BPKZF5GI.js","assets/dist-oydJxq9L.js","assets/dist-DJhZSa1-.js","assets/es2015-DRmlSfkW.js","assets/dist-BZg_Jfik.js","assets/dist-BeVKhAtj.js","assets/dist-CML2zK1G.js","assets/dist-CT2DjA94.js","assets/dist-QGW08nls.js","assets/dist-Bh3bGrZa.js","assets/separator-Dw-mNGCy.js","assets/tooltip-m5xmPGQe.js","assets/dist-Ck6_E5T6.js","assets/auth-store-D_jr_Pei.js","assets/dist-BNiRpK39.js","assets/with-selector-CQzBqoHI.js","assets/cookies-D0aVbsDr.js","assets/useRouter-DS97kuA5.js","assets/useNavigate-BNrwOhV8.js","assets/useStore-pgHsvR0E.js","assets/command-yFHhtFiR.js","assets/circle-check-nos3opMb.js","assets/logo-BVdckS6R.js","assets/shield-check-NJ5V92SM.js","assets/wallet-C1oxpYOh.js","assets/input-CZHXycLK.js","assets/font-provider-BBeIKmOK.js","assets/theme-provider-Dmxgp34D.js","assets/theme-switch-BVGTp-bE.js","assets/dropdown-menu-HbmfecEg.js","assets/check-DH6qIczM.js","assets/header-B5Qx5Y9m.js","assets/link-Du-u9SDI.js","assets/ClientOnly-COESZSX_.js","assets/forbidden-B-WSRpe6.js","assets/general-error-ruXTchhS.js","assets/maintenance-error-yQ4OJvXf.js","assets/not-found-error-mxpXcTRa.js","assets/unauthorized-error-9CwofmD6.js"])))=>i.map(i=>d[i]); +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";import{r as n}from"./useRouter-DS97kuA5.js";import{d as r}from"./useStore-pgHsvR0E.js";import{n as i}from"./route-C5Xnq6N2.js";function a(e){return new o(e,{silent:!0}).createRoute}var o=class{constructor(e,t){this.path=e,this.createRoute=e=>{let t=i(e);return t.isRoot=!1,t},this.silent=t?.silent}},s=t(e(),1);function c(e,t){let i,a,o,c,l=()=>(i||=e().then(e=>{i=void 0,a=e[t??`default`]}).catch(e=>{if(o=e,r(o)&&o instanceof Error&&typeof window<`u`&&typeof sessionStorage<`u`){let e=`tanstack_router_reload:${o.message}`;sessionStorage.getItem(e)||(sessionStorage.setItem(e,`1`),c=!0)}}),i),u=function(e){if(c)throw window.location.reload(),new Promise(()=>{});if(o)throw o;if(!a)if(n)n(l());else throw l();return s.createElement(a,e)};return u.preload=l,u}var l=`modulepreload`,u=function(e){return`/`+e},d={},f=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=u(t,n),t in d)return;d[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:l,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},p=a(`/_authenticated/errors/$error`)({component:c(()=>f(()=>import(`./_error-DUUb7pi1.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47])),`component`)});export{a as i,f as n,c as r,p as t}; \ No newline at end of file diff --git a/src/www/assets/_error-DUUb7pi1.js b/src/www/assets/_error-DUUb7pi1.js new file mode 100644 index 0000000..31e6a3b --- /dev/null +++ b/src/www/assets/_error-DUUb7pi1.js @@ -0,0 +1 @@ +import{Qu as e}from"./messages-BOl-zx8S.js";import{t}from"./_error-Ct843SHu.js";import{m as n}from"./search-provider-D-fTfilE.js";import{n as r,t as i}from"./theme-switch-BVGTp-bE.js";import{t as a}from"./general-error-ruXTchhS.js";import{t as o}from"./not-found-error-mxpXcTRa.js";import{t as s}from"./unauthorized-error-9CwofmD6.js";import{t as c}from"./forbidden-B-WSRpe6.js";import{t as l}from"./maintenance-error-yQ4OJvXf.js";import{n as u,r as d,t as f}from"./header-B5Qx5Y9m.js";var p=e();function m(){let{error:e}=t.useParams(),m={unauthorized:s,forbidden:c,"not-found":o,"internal-server-error":a,"maintenance-error":l}[e]||o;return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(f,{className:`border-b`,fixed:!0,children:[(0,p.jsx)(u,{}),(0,p.jsxs)(`div`,{className:`ms-auto flex items-center space-x-4`,children:[(0,p.jsx)(r,{}),(0,p.jsx)(i,{}),(0,p.jsx)(n,{}),(0,p.jsx)(d,{})]})]}),(0,p.jsx)(`div`,{className:`flex-1 [&>div]:h-full`,children:(0,p.jsx)(m,{})})]})}export{m as component}; \ No newline at end of file diff --git a/src/www/assets/addresses-Pwy1cHVj.js b/src/www/assets/addresses-Pwy1cHVj.js new file mode 100644 index 0000000..7c5df6c --- /dev/null +++ b/src/www/assets/addresses-Pwy1cHVj.js @@ -0,0 +1,3 @@ +import{$i as e,$u as t,Ai as n,Bi as r,Di as i,Ei as a,Fi as o,Gi as s,Hi as c,Ii as l,Ji as u,Ki as d,Li as f,Mi as p,Ni as m,Oi as h,Pi as g,Qi as _,Qu as v,Ri as y,Ui as b,Vi as x,Wi as S,Xi as C,Yi as w,Zi as ee,_a as te,aa as ne,ba as re,ca as ie,da as ae,ea as oe,fa as se,ga as ce,ha as le,ia as T,ji as ue,ki as de,la as fe,ma as pe,na as me,nd as he,oa as ge,pa as _e,qi as E,ra as D,sa as ve,ta as O,ua as ye,va as be,xa as xe,ya as k,zi as Se}from"./messages-BOl-zx8S.js";import{a as A}from"./auth-store-D_jr_Pei.js";import{r as Ce,t as we}from"./router-D0lu_-Oq.js";import{r as Te}from"./route-C5Xnq6N2.js";import{o as j}from"./search-provider-D-fTfilE.js";import{i as M,t as N}from"./button-D-oR8d6w.js";import{t as Ee}from"./confirm-dialog-DyK21C4Z.js";import{a as P,c as F,l as De,r as Oe,s as ke,t as Ae}from"./dropdown-menu-HbmfecEg.js";import{t as I}from"./label-B2Q8_O-h.js";import{a as L,i as R,n as z,r as B,t as V}from"./select-CvMpqpz9.js";import{t as je}from"./switch-m0XBbPWc.js";import{_ as Me,d as H,f as Ne,g as Pe,h as Fe,n as Ie,p as Le,r as Re,t as ze,v as Be,y as Ve}from"./data-table-C3uNvchK.js";import{t as He}from"./download-BhpqmSj0.js";import{t as Ue}from"./ellipsis-DvvxWQuy.js";import{t as We}from"./eye-off-BBTW1z_J.js";import{t as Ge}from"./eye-CJkHHosh.js";import{n as Ke,t as qe}from"./main-DvsnNI3V.js";import{n as Je,t as Ye}from"./chains-store-DnSbj0Yy.js";import{n as Xe,t as Ze}from"./trash-2-CaT-Drvx.js";import{d as Qe,f as $e,l as et,m as tt,p as nt,u as rt}from"./command-yFHhtFiR.js";import{n as U}from"./dist-BNiRpK39.js";import{c as W,s as it}from"./zod-DzRgHmfz.js";import{a as G,c as at,i as K,l as ot,n as q,o as J,s as Y,t as st}from"./form-uKra2bmF.js";import{t as X}from"./input-CZHXycLK.js";import{t as ct}from"./page-header-BRM1dngJ.js";import{t as lt}from"./textarea-Cp-VCvek.js";import{t as ut}from"./use-table-url-state-BYcGNz1q.js";import{t as dt}from"./long-text-XqSY0a1g.js";var Z=he(t(),1),Q=v(),ft=it({address:W().min(8,i()),network:W().min(1,a()),remark:W().max(50).optional()});function pt({open:e,onOpenChange:t,currentRow:r,onSuccess:i}){let{chains:a,loading:s}=Ye(),c=ot({resolver:at(ft),defaultValues:{address:``,network:``,remark:``}}),u=A.useMutation(`post`,`/admin/api/v1/wallets`),d=A.useMutation(`patch`,`/admin/api/v1/wallets/{id}`),_=(0,Z.useMemo)(()=>a.map(e=>e.network).filter(e=>!!e),[a]);(0,Z.useEffect)(()=>{e&&c.reset({address:r?.address??``,network:r?.network??``,remark:r?.remark??``})},[e,r,c]);function v(e){if(r?.id){d.mutate({params:{path:{id:r.id}},body:{remark:e.remark||void 0}},{onSuccess:()=>{U.success(de()),t(!1),i?.()}});return}u.mutate({body:{address:e.address,network:e.network,remark:e.remark??``}},{onSuccess:()=>{U.success(h()),t(!1),i?.()}})}let b=u.isPending||d.isPending,x=_.length>0,C=s?Se():y(),[w,ee]=(0,Z.useState)(!1);return(0,Q.jsx)(et,{onOpenChange:t,open:e,children:(0,Q.jsxs)(rt,{children:[(0,Q.jsxs)(nt,{children:[(0,Q.jsx)(tt,{children:r?f():l()}),(0,Q.jsx)(Qe,{children:r?o():g()})]}),(0,Q.jsx)(st,{...c,children:(0,Q.jsxs)(`form`,{className:`space-y-4`,onSubmit:c.handleSubmit(v),children:[(0,Q.jsx)(K,{control:c.control,name:`network`,render:({field:e})=>(0,Q.jsxs)(G,{children:[(0,Q.jsx)(J,{children:T()}),(0,Q.jsxs)(V,{disabled:!!r||!x,onValueChange:e.onChange,value:e.value,children:[(0,Q.jsx)(q,{children:(0,Q.jsx)(R,{className:`w-full`,children:(0,Q.jsx)(L,{placeholder:x?D():C})})}),(0,Q.jsx)(z,{children:x?_.map(e=>(0,Q.jsx)(B,{value:e,children:e},e)):(0,Q.jsx)(`div`,{className:`px-2 py-1.5 text-muted-foreground text-sm`,children:C})})]}),(0,Q.jsx)(Y,{})]})}),(0,Q.jsx)(K,{control:c.control,name:`address`,render:({field:e})=>(0,Q.jsxs)(G,{children:[(0,Q.jsx)(J,{children:O()}),(0,Q.jsx)(q,{children:(0,Q.jsxs)(`div`,{className:`relative`,children:[(0,Q.jsx)(X,{...e,className:`pr-10`,disabled:!!r,placeholder:m(),type:w?`text`:`password`}),(0,Q.jsx)(`button`,{className:`absolute inset-y-0 right-3 flex items-center text-muted-foreground hover:text-foreground`,onClick:()=>ee(e=>!e),type:`button`,children:w?(0,Q.jsx)(We,{className:`h-4 w-4`}):(0,Q.jsx)(Ge,{className:`h-4 w-4`})})]})}),(0,Q.jsx)(Y,{})]})}),(0,Q.jsx)(K,{control:c.control,name:`remark`,render:({field:e})=>(0,Q.jsxs)(G,{children:[(0,Q.jsx)(J,{children:S()}),(0,Q.jsx)(q,{children:(0,Q.jsx)(X,{...e,placeholder:p()})}),(0,Q.jsx)(Y,{})]})}),(0,Q.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,Q.jsx)(N,{onClick:()=>t(!1),type:`button`,variant:`outline`,children:oe()}),(0,Q.jsx)(N,{disabled:b,type:`submit`,children:b?ue():n()})]})]})})]})})}function mt(e){return[{id:`status-switch`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:u()}),cell:({row:t})=>(0,Q.jsx)(je,{checked:t.original.status===1,onCheckedChange:()=>e(t.original.status===1?`disable`:`enable`,t.original)}),enableSorting:!1,enableHiding:!1,meta:{label:u(),skeleton:`switch`,sticky:`left`,th:{className:M(`rounded-tl-[inherit]`)}}},{accessorKey:`address`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:E()}),cell:({row:e})=>(0,Q.jsx)(dt,{className:`font-medium`,children:e.original.address}),enableHiding:!1,meta:{label:E(),skeleton:`long`}},{accessorKey:`network`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:T()}),meta:{label:T(),skeleton:`short`}},{accessorKey:`order_count`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:d()}),meta:{label:d(),skeleton:`id`}},{accessorKey:`source`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:s()}),cell:({row:e})=>e.original.source??`-`,meta:{label:s(),skeleton:`short`}},{accessorKey:`remark`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:S()}),meta:{label:S(),skeleton:`long`}},{accessorKey:`created_at`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:b()}),cell:({row:e})=>j(e.original.created_at),meta:{label:b(),skeleton:`date`}},{accessorKey:`updated_at`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:c()}),cell:({row:e})=>j(e.original.updated_at),meta:{label:c(),skeleton:`date`}},{id:`actions`,enableHiding:!1,meta:{label:x(),skeleton:`action`,sticky:`right`,className:M(`w-12`)},cell:({row:t})=>(0,Q.jsxs)(Ae,{modal:!1,children:[(0,Q.jsx)(De,{asChild:!0,children:(0,Q.jsxs)(N,{className:`flex h-8 w-8 p-0 data-[state=open]:bg-muted`,variant:`ghost`,children:[(0,Q.jsx)(Ue,{className:`h-4 w-4`}),(0,Q.jsx)(`span`,{className:`sr-only`,children:`Open menu`})]})}),(0,Q.jsxs)(Oe,{align:`end`,className:`w-40`,children:[(0,Q.jsxs)(P,{onClick:()=>e(`edit`,t.original),children:[r(),(0,Q.jsx)(F,{children:(0,Q.jsx)(Je,{size:16})})]}),(0,Q.jsx)(ke,{}),(0,Q.jsxs)(P,{onClick:()=>e(`delete`,t.original),variant:`destructive`,children:[se(),(0,Q.jsx)(F,{children:(0,Q.jsx)(Ze,{size:16})})]})]})]})}]}var $=Te(`/_authenticated/addresses/`);function ht({data:e,isLoading:t,onAction:n,onRefresh:r}){let[i,a]=(0,Z.useState)([]),{globalFilter:o,onGlobalFilterChange:s,columnFilters:c,onColumnFiltersChange:l,pagination:u,onPaginationChange:d,ensurePageInRange:f}=ut({search:$.useSearch(),navigate:$.useNavigate(),pagination:{defaultPage:1,defaultPageSize:10},globalFilter:{enabled:!0,key:`address`},columnFilters:[{columnId:`status`,searchKey:`status`,type:`array`},{columnId:`network`,searchKey:`network`,type:`array`}]}),p=Ne({data:e,columns:(0,Z.useMemo)(()=>mt(n),[n]),state:{sorting:i,columnFilters:c,globalFilter:o,pagination:u},onSortingChange:a,onColumnFiltersChange:l,onGlobalFilterChange:s,onPaginationChange:d,globalFilterFn:(e,t,n)=>{let r=String(n).toLowerCase();return(e.original.address??``).toLowerCase().includes(r)||(e.original.remark??``).toLowerCase().includes(r)},getCoreRowModel:Le(),getFilteredRowModel:Me(),getPaginationRowModel:Be(),getSortedRowModel:Ve(),getFacetedRowModel:Fe(),getFacetedUniqueValues:Pe()});(0,Z.useEffect)(()=>{f(p.getPageCount())},[p,f]);let m=[...new Set(e.map(e=>e.network).filter(Boolean))].map(e=>({label:e,value:e}));return(0,Q.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,Q.jsx)(ze,{filters:[{columnId:`status`,title:w(),options:[...Ce]},{columnId:`network`,title:T(),options:m}],onRefresh:r,searchPlaceholder:ee(),table:p}),(0,Q.jsx)(Re,{className:`min-w-[900px]`,emptyText:C(),loading:t,table:p}),(0,Q.jsx)(Ie,{className:`mt-auto`,table:p})]})}function gt(){let{chains:t}=Ye(),n=A.useQuery(`get`,`/admin/api/v1/wallets`),r=A.useMutation(`delete`,`/admin/api/v1/wallets/{id}`),i=A.useMutation(`post`,`/admin/api/v1/wallets/{id}/status`),a=A.useMutation(`post`,`/admin/api/v1/wallets/batch-import`),[o,s]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)(!1),[u,d]=(0,Z.useState)(``),[f,p]=(0,Z.useState)(``),[m,h]=(0,Z.useState)(null),[g,v]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{if(!t.length){u&&d(``);return}t.some(e=>e.network&&e.network===u)||d(t[0]?.network??``)},[t,u]);async function y(){await we.invalidateQueries({queryKey:[`get`,`/admin/api/v1/wallets`]})}async function b(){if(!g?.row.id)return;let e=Number(g.row.id);g.action===`delete`?(await r.mutateAsync({params:{path:{id:e}}}),U.success(xe())):(g.action===`enable`||g.action===`disable`)&&(await i.mutateAsync({params:{path:{id:e}},body:{status:g.action===`enable`?1:2}}),U.success(re())),await y(),v(null)}async function x(e,t){if(e===`edit`){h(t),s(!0);return}if(e===`enable`||e===`disable`){if(!t.id)return;await i.mutateAsync({params:{path:{id:Number(t.id)}},body:{status:e===`enable`?1:2}}),U.success(re()),await y();return}v({action:e,row:t})}async function S(){if(!u){U.error(k());return}let e=f.split(/\r?\n/).map(e=>e.trim()).filter(Boolean);if(!e.length){U.error(be());return}let t=((await a.mutateAsync({body:{addresses:e,network:u}})).data??[]).filter(e=>e.ok).length;U.success(te({success:String(t),total:String(e.length)})),l(!1),p(``),await y()}return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Ke,{fixed:!0}),(0,Q.jsxs)(qe,{className:`flex flex-1 flex-col gap-4 sm:gap-6`,children:[(0,Q.jsx)(ct,{actions:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(N,{onClick:()=>l(!0),variant:`outline`,children:[(0,Q.jsx)(He,{className:`mr-2 h-4 w-4`}),ce()]}),(0,Q.jsxs)(N,{onClick:()=>{h(null),s(!0)},children:[(0,Q.jsx)(Xe,{className:`mr-2 h-4 w-4`}),le()]})]}),description:pe(),title:_e()}),(0,Q.jsx)(ht,{data:n.data?.data??[],isLoading:n.isLoading,onAction:x,onRefresh:()=>n.refetch()})]}),(0,Q.jsx)(pt,{currentRow:m,onOpenChange:s,onSuccess:()=>n.refetch(),open:o}),g&&(0,Q.jsx)(Ee,{confirmText:g.action===`delete`?se():ae(),desc:(0,Q.jsx)(`span`,{children:ye({address:String(g.row.address),action:g.action})}),destructive:g.action===`delete`,handleConfirm:b,onOpenChange:()=>v(null),open:!0,title:g.action===`delete`?fe():ie()}),(0,Q.jsx)(et,{onOpenChange:l,open:c,children:(0,Q.jsxs)(rt,{children:[(0,Q.jsxs)(nt,{children:[(0,Q.jsx)(tt,{children:ve()}),(0,Q.jsx)(Qe,{children:ge()})]}),(0,Q.jsxs)(`div`,{className:`space-y-4`,children:[(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(I,{children:ne()}),(0,Q.jsxs)(V,{onValueChange:d,value:u,children:[(0,Q.jsx)(R,{children:(0,Q.jsx)(L,{placeholder:D()})}),(0,Q.jsx)(z,{children:t.some(e=>e.network)?t.filter(e=>!!e.network).map(e=>(0,Q.jsx)(B,{value:e.network,children:e.display_name??e.network??me()},e.network)):(0,Q.jsx)(`div`,{className:`px-2 py-1.5 text-muted-foreground text-sm`,children:k()})})]})]}),(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(I,{children:O()}),(0,Q.jsx)(lt,{className:`min-h-40`,onChange:e=>p(e.target.value),placeholder:`TAddr001 +TAddr002 +TAddr003`,value:f})]})]}),(0,Q.jsxs)($e,{children:[(0,Q.jsx)(N,{onClick:()=>l(!1),variant:`outline`,children:oe()}),(0,Q.jsx)(N,{disabled:a.isPending||!t.some(e=>e.network),onClick:S,children:a.isPending?e():_()})]})]})})]})}var _t=gt;export{_t as component}; \ No newline at end of file diff --git a/src/www/assets/appearance-Qiu8JKX7.js b/src/www/assets/appearance-Qiu8JKX7.js new file mode 100644 index 0000000..d691d22 --- /dev/null +++ b/src/www/assets/appearance-Qiu8JKX7.js @@ -0,0 +1 @@ +import{Bu as e,Qu as t,Vu as n,ct as r,dt as i,ft as a,lt as o,pt as s,st as c,ut as l}from"./messages-BOl-zx8S.js";import{i as u,n as d,t as f}from"./button-D-oR8d6w.js";import{n as p,r as m}from"./font-provider-BBeIKmOK.js";import{n as h}from"./theme-provider-Dmxgp34D.js";import{t as g}from"./chevron-down-uSXLUPEl.js";import{n as _,t as v}from"./radio-group-8QacflxY.js";import{r as y,s as b}from"./zod-DzRgHmfz.js";import{a as x,c as S,i as C,l as w,n as T,o as E,r as D,s as O,t as k}from"./form-uKra2bmF.js";import{t as A}from"./page-header-BRM1dngJ.js";import{t as j}from"./show-submitted-data-sbgXi_a9.js";var M=t(),N=b({theme:y([`light`,`dark`]),font:y(m)});function P(){let{font:t,setFont:a}=p(),{theme:s,setTheme:y}=h(),b={theme:s,font:t},A=w({resolver:S(N),defaultValues:b});function P(e){e.font!==t&&a(e.font),e.theme!==s&&y(e.theme),j(e)}return(0,M.jsx)(k,{...A,children:(0,M.jsxs)(`form`,{className:`space-y-8`,onSubmit:A.handleSubmit(P),children:[(0,M.jsx)(C,{control:A.control,name:`font`,render:({field:e})=>(0,M.jsxs)(x,{children:[(0,M.jsx)(E,{children:i()}),(0,M.jsxs)(`div`,{className:`relative w-max`,children:[(0,M.jsx)(T,{children:(0,M.jsx)(`select`,{className:u(d({variant:`outline`}),`w-50 appearance-none font-normal capitalize`,`dark:bg-background dark:hover:bg-background`),...e,children:m.map(e=>(0,M.jsx)(`option`,{value:e,children:e},e))})}),(0,M.jsx)(g,{className:`absolute inset-e-3 top-2.5 h-4 w-4 opacity-50`})]}),(0,M.jsx)(D,{className:`font-manrope`,children:l()}),(0,M.jsx)(O,{})]})}),(0,M.jsx)(C,{control:A.control,name:`theme`,render:({field:t})=>(0,M.jsxs)(x,{children:[(0,M.jsx)(E,{children:o()}),(0,M.jsx)(D,{children:r()}),(0,M.jsx)(O,{}),(0,M.jsxs)(v,{className:`grid max-w-md grid-cols-2 gap-8 pt-2`,defaultValue:t.value,onValueChange:t.onChange,children:[(0,M.jsx)(x,{children:(0,M.jsxs)(E,{className:`[&:has([data-state=checked])>div]:border-primary`,children:[(0,M.jsx)(T,{children:(0,M.jsx)(_,{className:`sr-only`,value:`light`})}),(0,M.jsx)(`div`,{className:`items-center rounded-md border-2 border-muted p-1 hover:border-accent`,children:(0,M.jsxs)(`div`,{className:`space-y-2 rounded-sm bg-[#ecedef] p-2`,children:[(0,M.jsxs)(`div`,{className:`space-y-2 rounded-md bg-white p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-2 w-20 rounded-lg bg-[#ecedef]`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-[#ecedef]`})]}),(0,M.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md bg-white p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-[#ecedef]`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-[#ecedef]`})]}),(0,M.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md bg-white p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-[#ecedef]`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-[#ecedef]`})]})]})}),(0,M.jsx)(`span`,{className:`block w-full p-2 text-center font-normal`,children:n()})]})}),(0,M.jsx)(x,{children:(0,M.jsxs)(E,{className:`[&:has([data-state=checked])>div]:border-primary`,children:[(0,M.jsx)(T,{children:(0,M.jsx)(_,{className:`sr-only`,value:`dark`})}),(0,M.jsx)(`div`,{className:`items-center rounded-md border-2 border-muted bg-popover p-1 hover:bg-accent hover:text-accent-foreground`,children:(0,M.jsxs)(`div`,{className:`space-y-2 rounded-sm bg-slate-950 p-2`,children:[(0,M.jsxs)(`div`,{className:`space-y-2 rounded-md bg-slate-800 p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-2 w-20 rounded-lg bg-slate-400`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-slate-400`})]}),(0,M.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md bg-slate-800 p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-slate-400`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-slate-400`})]}),(0,M.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md bg-slate-800 p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-slate-400`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-slate-400`})]})]})}),(0,M.jsx)(`span`,{className:`block w-full p-2 text-center font-normal`,children:e()})]})})]})]})}),(0,M.jsx)(f,{type:`submit`,children:c()})]})})}function F(){return(0,M.jsx)(A,{description:a(),title:s(),variant:`section`,children:(0,M.jsx)(P,{})})}var I=F;export{I as component}; \ No newline at end of file diff --git a/src/www/assets/arrow-left-BQ3rygWM.js b/src/www/assets/arrow-left-BQ3rygWM.js new file mode 100644 index 0000000..e006291 --- /dev/null +++ b/src/www/assets/arrow-left-BQ3rygWM.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/atom-DI1Bn-1s.js b/src/www/assets/atom-DI1Bn-1s.js new file mode 100644 index 0000000..5bf8225 --- /dev/null +++ b/src/www/assets/atom-DI1Bn-1s.js @@ -0,0 +1 @@ +var e=(e=>(e[e.None=0]=`None`,e[e.Mutable=1]=`Mutable`,e[e.Watching=2]=`Watching`,e[e.RecursedCheck=4]=`RecursedCheck`,e[e.Recursed=8]=`Recursed`,e[e.Dirty=16]=`Dirty`,e[e.Pending=32]=`Pending`,e))(e||{});function t({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(!0)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(!0)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function n(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var r=[],i=0,{link:a,unlink:o,propagate:s,checkDirty:c,shallowPropagate:l}=t({update(e){return e._update()},notify(t){r[d++]=t,t.flags&=~e.Watching},unwatched(t){t.depsTail!==void 0&&(t.depsTail=void 0,t.flags=e.Mutable|e.Dirty,h(t))}}),u=0,d=0,f,p=0;function m(e){try{++p,e()}finally{--p||g()}}function h(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=o(n,e)}function g(){if(!(p>0)){for(;u{d.get(),r.current?t.next?.(d._snapshot):r.current=!0});return{unsubscribe:()=>{i.stop()}}},_update(t){let n=f,a=r?.compare??Object.is;if(o)f=d,++i,d.depsTail=void 0;else if(t===void 0)return!1;o&&(d.flags=e.Mutable|e.RecursedCheck);try{let e=d._snapshot,n=typeof t==`function`?t(e):t===void 0&&o?u(e):t;return e===void 0||!a(e,n)?(d._snapshot=n,!0):!1}finally{f=n,o&&(d.flags&=~e.RecursedCheck),h(d)}}};return o?(d.flags=e.Mutable|e.Dirty,d.get=function(){let t=d.flags;if(t&e.Dirty||t&e.Pending&&c(d.deps,d)){if(d._update()){let e=d.subs;e!==void 0&&l(e)}}else t&e.Pending&&(d.flags=t&~e.Pending);return f!==void 0&&a(d,f,i),d._snapshot}):d.set=function(e){if(d._update(e)){let e=d.subs;e!==void 0&&(s(e),l(e),g())}},d}function v(t){let n=()=>{let n=f;f=r,++i,r.depsTail=void 0,r.flags=e.Watching|e.RecursedCheck;try{return t()}finally{f=n,r.flags&=~e.RecursedCheck,h(r)}},r={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:e.Watching|e.RecursedCheck,notify(){let t=this.flags;t&e.Dirty||t&e.Pending&&c(this.deps,this)?n():this.flags=e.Watching},stop(){this.flags=e.None,this.depsTail=void 0,h(this)}};return n(),r}export{_ as n,m as t}; \ No newline at end of file diff --git a/src/www/assets/auth-animation-context-CciMPPP0.js b/src/www/assets/auth-animation-context-CciMPPP0.js new file mode 100644 index 0000000..58935b2 --- /dev/null +++ b/src/www/assets/auth-animation-context-CciMPPP0.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";var r=n(e(),1),i=t(),a=(0,r.createContext)({isTyping:!1,passwordLength:0,setIsTyping:()=>void 0,setPasswordLength:()=>void 0,setShowPassword:()=>void 0,showPassword:!1});function o({children:e}){let[t,n]=(0,r.useState)(!1),[o,s]=(0,r.useState)(!1),[c,l]=(0,r.useState)(0);return(0,i.jsx)(a.Provider,{value:{isTyping:t,passwordLength:c,setIsTyping:n,setPasswordLength:l,setShowPassword:s,showPassword:o},children:e})}function s(){return(0,r.useContext)(a)}export{s as n,o as t}; \ No newline at end of file diff --git a/src/www/assets/auth-store-D_jr_Pei.js b/src/www/assets/auth-store-D_jr_Pei.js new file mode 100644 index 0000000..0bbfaeb --- /dev/null +++ b/src/www/assets/auth-store-D_jr_Pei.js @@ -0,0 +1 @@ +import{$u as e,Cl as t,El as n,Qu as r,Sl as i,Tl as a,_l as o,bl as s,cl as c,dl as l,fl as u,gl as d,hl as f,ll as p,ml as m,nd as h,pl as g,ul as _,vl as v,wl as y,xl as b,yl as x}from"./messages-BOl-zx8S.js";import{t as ee}from"./with-selector-CQzBqoHI.js";import{n as S,r as te,t as C}from"./cookies-D0aVbsDr.js";import{n as w}from"./dist-BNiRpK39.js";var T=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},E=new class extends T{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},D={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},O=new class{#e=D;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function k(e){setTimeout(e,0)}var A=typeof window>`u`||`Deno`in globalThis;function j(){}function M(e,t){return typeof e==`function`?e(t):e}function N(e){return typeof e==`number`&&e>=0&&e!==1/0}function P(e,t){return Math.max(e+(t||0)-Date.now(),0)}function F(e,t){return typeof e==`function`?e(t):e}function I(e,t){return typeof e==`function`?e(t):e}function ne(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==ie(o,t.options))return!1}else if(!ae(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function re(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(L(t.options.mutationKey)!==L(a))return!1}else if(!ae(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function ie(e,t){return(t?.queryKeyHashFn||L)(e)}function L(e){return JSON.stringify(e,(e,t)=>le(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function ae(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>ae(e[n],t[n])):!1}var oe=Object.prototype.hasOwnProperty;function se(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=ce(e)&&ce(t);if(!r&&!(le(e)&&le(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{O.setTimeout(t,e)})}function fe(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:se(e,t)}function pe(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function me(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var he=Symbol();function ge(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===he?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function _e(e,t){return typeof e==`function`?e(...t):!!e}function ve(e,t,n){let r=!1,i;return Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var z=(()=>{let e=()=>A;return{isServer(){return e()},setIsServer(t){e=t}}})();function ye(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var be=k;function xe(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=be,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var B=xe(),Se=new class extends T{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function Ce(e){return Math.min(1e3*2**e,3e4)}function we(e){return(e??`online`)===`online`?Se.isOnline():!0}var Te=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function Ee(e){let t=!1,n=0,r,i=ye(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new Te(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>E.isFocused()&&(e.networkMode===`always`||Se.isOnline())&&e.canRun(),u=()=>we(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(z.isServer()?0:3),o=e.retryDelay??Ce,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var De=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),N(this.gcTime)&&(this.#e=O.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(z.isServer()?1/0:300*1e3))}clearGcTimeout(){this.#e!==void 0&&(O.clearTimeout(this.#e),this.#e=void 0)}},Oe=class extends De{#e;#t;#n;#r;#i;#a;#o;constructor(e){super(),this.#o=!1,this.#a=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#r=e.client,this.#n=this.#r.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=je(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#i?.promise}setOptions(e){if(this.options={...this.#a,...e},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=je(this.options);e.data!==void 0&&(this.setState(Ae(e.data,e.dataUpdatedAt)),this.#e=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#n.remove(this)}setData(e,t){let n=fe(this.state.data,e,this.options);return this.#c({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#c({type:`setState`,state:e,setStateOptions:t})}cancel(e){let t=this.#i?.promise;return this.#i?.cancel(e),t?t.then(j).catch(j):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#e}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>I(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===he||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>F(e.options.staleTime,this)===`static`):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!P(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#i?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#i?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#i&&(this.#o||this.#s()?this.#i.cancel({revert:!0}):this.#i.cancelRetry()),this.scheduleGc()),this.#n.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#s(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#c({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#i?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#i)return this.#i.continueRetry(),this.#i.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(this.#o=!0,n.signal)})},i=()=>{let e=ge(this.options,t),n=(()=>{let e={client:this.#r,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#o=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#r,state:this.state,fetchFn:i};return r(e),e})();this.options.behavior?.onFetch(a,this),this.#t=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#c({type:`fetch`,meta:a.fetchOptions?.meta}),this.#i=Ee({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof Te&&e.revert&&this.setState({...this.#t,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#c({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#c({type:`pause`})},onContinue:()=>{this.#c({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#i.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#n.config.onSuccess?.(e,this),this.#n.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof Te){if(e.silent)return this.#i.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#c({type:`error`,error:e}),this.#n.config.onError?.(e,this),this.#n.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#c(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...ke(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...Ae(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#t=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}})(this.state),B.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#n.notify({query:this,type:`updated`,action:e})})}};function ke(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:we(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function Ae(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function je(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Me=class extends T{constructor(e,t){super(),this.options=t,this.#e=e,this.#s=null,this.#o=ye(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),Pe(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Fe(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Fe(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof I(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!R(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&Ie(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||I(this.options.enabled,this.#t)!==I(t.enabled,this.#t)||F(this.options.staleTime,this.#t)!==F(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||I(this.options.enabled,this.#t)!==I(t.enabled,this.#t)||i!==this.#p)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return Re(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),n===`promise`&&(this.trackProp(`data`),!this.options.experimental_prefetchInRender&&this.#o.status===`pending`&&this.#o.reject(Error(`experimental_prefetchInRender feature flag is not enabled`))),Reflect.get(e,n))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(j)),t}#g(){this.#b();let e=F(this.options.staleTime,this.#t);if(z.isServer()||this.#r.isStale||!N(e))return;let t=P(this.#r.dataUpdatedAt,e)+1;this.#d=O.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#x(),this.#p=e,!(z.isServer()||I(this.options.enabled,this.#t)===!1||!N(this.#p)||this.#p===0)&&(this.#f=O.setInterval(()=>{(this.options.refetchIntervalInBackground||E.isFocused())&&this.#h()},this.#p))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#d!==void 0&&(O.clearTimeout(this.#d),this.#d=void 0)}#x(){this.#f!==void 0&&(O.clearInterval(this.#f),this.#f=void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&Pe(e,t),o=i&&Ie(e,n,t,r);(a||o)&&(l={...l,...ke(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#u?.state.data,this.#u):t.placeholderData,e!==void 0&&(m=`success`,d=fe(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h)if(i&&d===a?.data&&t.select===this.#c)d=this.#l;else try{this.#c=t.select,d=t.select(d),d=fe(i?.data,d,t),this.#l=d,this.#s=null}catch(e){this.#s=e}this.#s&&(f=this.#s,d=this.#l,p=Date.now(),m=`error`);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0,x={status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:Le(e,t),refetch:this.refetch,promise:this.#o,isEnabled:I(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){let t=x.data!==void 0,r=x.status===`error`&&!t,i=e=>{r?e.reject(x.error):t&&e.resolve(x.data)},a=()=>{i(this.#o=x.promise=ye())},o=this.#o;switch(o.status){case`pending`:e.queryHash===n.queryHash&&i(o);break;case`fulfilled`:(r||x.data!==o.value)&&a();break;case`rejected`:(!r||x.error!==o.reason)&&a();break}}return x}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#u=this.#t),!R(t,e)&&(this.#r=t,this.#C({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#m.size)return!0;let r=new Set(n??this.#m);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){B.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function Ne(e,t){return I(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status===`error`&&t.retryOnMount===!1)}function Pe(e,t){return Ne(e,t)||e.state.data!==void 0&&Fe(e,t,t.refetchOnMount)}function Fe(e,t,n){if(I(t.enabled,e)!==!1&&F(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&Le(e,t)}return!1}function Ie(e,t,n,r){return(e!==t||I(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&Le(e,n)}function Le(e,t){return I(t.enabled,e)!==!1&&e.isStaleByTime(F(t.staleTime,e))}function Re(e,t){return!R(e.getCurrentResult(),t)}function ze(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{ve(e,()=>t.signal,()=>n=!0)},u=ge(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject();if(r==null&&e.pages.length)return Promise.resolve(e);let a=await u((()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})()),{maxPages:o}=t.options,s=i?me:pe;return{pages:s(e.pages,a,o),pageParams:s(e.pageParams,r,o)}};if(i&&a.length){let e=i===`backward`,t=e?Ve:Be,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:Be(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function Be(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function Ve(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}function He(e,t){return t?Be(e,t)!=null:!1}function Ue(e,t){return!t||!e.getPreviousPageParam?!1:Ve(e,t)!=null}var We=class extends Me{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){super.setOptions({...e,behavior:ze()})}getOptimisticResult(e){return e.behavior=ze(),super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`backward`}}})}createResult(e,t){let{state:n}=e,r=super.createResult(e,t),{isFetching:i,isRefetching:a,isError:o,isRefetchError:s}=r,c=n.fetchMeta?.fetchMore?.direction,l=o&&c===`forward`,u=i&&c===`forward`,d=o&&c===`backward`,f=i&&c===`backward`;return{...r,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:He(t,n.data),hasPreviousPage:Ue(t,n.data),isFetchNextPageError:l,isFetchingNextPage:u,isFetchPreviousPageError:d,isFetchingPreviousPage:f,isRefetchError:s&&!l&&!d,isRefetching:a&&!u&&!f}}},Ge=class extends De{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||Ke(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=Ee({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}})(this.state),B.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function Ke(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var qe=class extends T{#e;#t=void 0;#n;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),R(this.options,t)||this.#e.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&L(t.mutationKey)!==L(this.options.mutationKey)?this.reset():this.#n?.state.status===`pending`&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#i(){let e=this.#n?.state??Ke();this.#t={...e,isPending:e.status===`pending`,isSuccess:e.status===`success`,isError:e.status===`error`,isIdle:e.status===`idle`,mutate:this.mutate,reset:this.reset}}#a(e){B.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,n=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type===`success`){try{this.#r.onSuccess?.(e.data,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,n,r)}catch(e){Promise.reject(e)}}else if(e?.type===`error`){try{this.#r.onError?.(e.error,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,n,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},V=h(e(),1),Je=r(),Ye=V.createContext(void 0),Xe=e=>{let t=V.useContext(Ye);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},Ze=({client:e,children:t})=>(V.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,Je.jsx)(Ye.Provider,{value:e,children:t})),Qe=V.createContext(!1),$e=()=>V.useContext(Qe);Qe.Provider;function et(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var tt=V.createContext(et()),nt=()=>V.useContext(tt),rt=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?_e(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},it=e=>{V.useEffect(()=>{e.clearReset()},[e])},at=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||_e(n,[e.error,r])),ot=(e,t)=>t.state.data===void 0,st=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},ct=(e,t)=>e.isLoading&&e.isFetching&&!t,lt=(e,t)=>e?.suspense&&t.isPending,ut=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function dt(e,t,n){let r=$e(),i=nt(),a=Xe(n),o=a.defaultQueryOptions(e);a.getDefaultOptions().queries?._experimental_beforeQuery?.(o);let s=a.getQueryCache().get(o.queryHash);o._optimisticResults=r?`isRestoring`:`optimistic`,st(o),rt(o,i,s),it(i);let c=!a.getQueryCache().get(o.queryHash),[l]=V.useState(()=>new t(a,o)),u=l.getOptimisticResult(o),d=!r&&e.subscribed!==!1;if(V.useSyncExternalStore(V.useCallback(e=>{let t=d?l.subscribe(B.batchCalls(e)):j;return l.updateResult(),t},[l,d]),()=>l.getCurrentResult(),()=>l.getCurrentResult()),V.useEffect(()=>{l.setOptions(o)},[o,l]),lt(o,u))throw ut(o,l,i);if(at({result:u,errorResetBoundary:i,throwOnError:o.throwOnError,query:s,suspense:o.suspense}))throw u.error;return a.getDefaultOptions().queries?._experimental_afterQuery?.(o,u),o.experimental_prefetchInRender&&!z.isServer()&&ct(u,r)&&(c?ut(o,l,i):s?.promise)?.catch(j).finally(()=>{l.updateResult()}),o.notifyOnChangeProps?u:l.trackResult(u)}function ft(e,t){return dt(e,Me,t)}function pt(e,t){return dt({...e,enabled:!0,suspense:!0,throwOnError:ot,placeholderData:void 0},Me,t)}function mt(e,t){let n=Xe(t),[r]=V.useState(()=>new qe(n,e));V.useEffect(()=>{r.setOptions(e)},[r,e]);let i=V.useSyncExternalStore(V.useCallback(e=>r.subscribe(B.batchCalls(e)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),a=V.useCallback((e,t)=>{r.mutate(e,t).catch(j)},[r]);if(i.error&&_e(r.options.throwOnError,[i.error]))throw i.error;return{...i,mutate:a,mutateAsync:i.mutate}}function ht(e,t){return dt(e,We,t)}var gt=ee();function _t(e,t){return e===t}function vt(e,t,n=_t){let r=(0,V.useCallback)(t=>{if(!e)return()=>{};let{unsubscribe:n}=e.subscribe(t);return n},[e]),i=(0,V.useCallback)(()=>e?.get(),[e]);return(0,gt.useSyncExternalStoreWithSelector)(r,i,i,t,n)}var H=function(e){return e[e.None=0]=`None`,e[e.Mutable=1]=`Mutable`,e[e.Watching=2]=`Watching`,e[e.RecursedCheck=4]=`RecursedCheck`,e[e.Recursed=8]=`Recursed`,e[e.Dirty=16]=`Dirty`,e[e.Pending=32]=`Pending`,e}({});function yt({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&(H.RecursedCheck|H.Recursed|H.Dirty|H.Pending)?a&(H.RecursedCheck|H.Recursed)?a&H.RecursedCheck?!(a&(H.Dirty|H.Pending))&&c(e,i)?(i.flags=a|(H.Recursed|H.Pending),a&=H.Mutable):a=H.None:i.flags=a&~H.Recursed|H.Pending:a=H.None:i.flags=a|H.Pending,a&H.Watching&&t(i),a&H.Mutable){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(!0)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&H.Dirty)a=!0;else if((c&(H.Mutable|H.Dirty))===(H.Mutable|H.Dirty)){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&(H.Mutable|H.Pending))===(H.Mutable|H.Pending)){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=~H.Pending;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(!0)}function s(e){do{let n=e.sub,r=n.flags;(r&(H.Pending|H.Dirty))===H.Pending&&(n.flags=r|H.Dirty,(r&(H.Watching|H.RecursedCheck))===H.Watching&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function bt(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var xt=[],U=0,{link:St,unlink:Ct,propagate:wt,checkDirty:Tt,shallowPropagate:Et}=yt({update(e){return e._update()},notify(e){xt[Dt++]=e,e.flags&=~H.Watching},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=H.Mutable|H.Dirty,K(e))}}),W=0,Dt=0,G,Ot=0;function K(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Ct(n,e)}function kt(){if(!(Ot>0)){for(;W{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=G,o=t?.compare??Object.is;if(n)G=i,++U,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=H.Mutable|H.RecursedCheck);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{G=a,n&&(i.flags&=~H.RecursedCheck),K(i)}}};return n?(i.flags=H.Mutable|H.Dirty,i.get=function(){let e=i.flags;if(e&H.Dirty||e&H.Pending&&Tt(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Et(e)}}else e&H.Pending&&(i.flags=e&~H.Pending);return G!==void 0&&St(i,G,U),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(wt(e),Et(e),kt())}},i}function jt(e){let t=()=>{let t=G;G=n,++U,n.depsTail=void 0,n.flags=H.Watching|H.RecursedCheck;try{return e()}finally{G=t,n.flags&=~H.RecursedCheck,K(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:H.Watching|H.RecursedCheck,notify(){let e=this.flags;e&H.Dirty||e&H.Pending&&Tt(this.deps,this)?t():this.flags=H.Watching},stop(){this.flags=H.None,this.depsTail=void 0,K(this)}};return t(),n}var Mt=class{constructor(e){this.atom=At(e)}setState(e){this.atom.set(e)}get state(){return this.atom.get()}get(){return this.state}subscribe(e){return this.atom.subscribe(bt(e))}},q=`access_token`,Nt=`auth_user`,Pt=`sidebar_state`,Ft=3600*24*7,It=/\{[^{}]+\}/g,Lt=()=>typeof process==`object`&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function Rt(){return Math.random().toString(36).slice(2,11)}function zt(e){let{baseUrl:t=``,Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:i,bodySerializer:a,pathSerializer:o,headers:s,requestInitExt:c=void 0,...l}={...e};c=Lt()?c:void 0,t=qt(t);let u=[];async function d(e,d){let{baseUrl:f,fetch:p=r,Request:m=n,headers:h,params:g={},parseAs:_=`json`,querySerializer:v,bodySerializer:y=a??Wt,pathSerializer:b,body:x,middleware:ee=[],...S}=d||{},te=t;f&&(te=qt(f)??t);let C=typeof i==`function`?i:Ht(i);v&&(C=typeof v==`function`?v:Ht({...typeof i==`object`?i:{},...v}));let w=b||o||Ut,T=x===void 0?void 0:y(x,Kt(s,h,g.header)),E=Kt(T===void 0||T instanceof FormData?{}:{"Content-Type":`application/json`},s,h,g.header),D=[...u,...ee],O={redirect:`follow`,...l,...S,body:T,headers:E},k,A,j=new m(Gt(e,{baseUrl:te,params:g,querySerializer:C,pathSerializer:w}),O),M;for(let e in S)e in j||(j[e]=S[e]);if(D.length){k=Rt(),A=Object.freeze({baseUrl:te,fetch:p,parseAs:_,querySerializer:C,bodySerializer:y,pathSerializer:w});for(let t of D)if(t&&typeof t==`object`&&typeof t.onRequest==`function`){let n=await t.onRequest({request:j,schemaPath:e,params:g,options:A,id:k});if(n)if(n instanceof m)j=n;else if(n instanceof Response){M=n;break}else throw Error(`onRequest: must return new Request() or Response() when modifying the request`)}}if(!M){try{M=await p(j,c)}catch(t){let n=t;if(D.length)for(let t=D.length-1;t>=0;t--){let r=D[t];if(r&&typeof r==`object`&&typeof r.onError==`function`){let t=await r.onError({request:j,error:n,schemaPath:e,params:g,options:A,id:k});if(t){if(t instanceof Response){n=void 0,M=t;break}if(t instanceof Error){n=t;continue}throw Error(`onError: must return new Response() or instance of Error`)}}}if(n)throw n}if(D.length)for(let t=D.length-1;t>=0;t--){let n=D[t];if(n&&typeof n==`object`&&typeof n.onResponse==`function`){let t=await n.onResponse({request:j,response:M,schemaPath:e,params:g,options:A,id:k});if(t){if(!(t instanceof Response))throw Error(`onResponse: must return new Response() when modifying the response`);M=t}}}}let N=M.headers.get(`Content-Length`);if(M.status===204||j.method===`HEAD`||N===`0`&&!M.headers.get(`Transfer-Encoding`)?.includes(`chunked`))return M.ok?{data:void 0,response:M}:{error:void 0,response:M};if(M.ok)return{data:await(async()=>{if(_===`stream`)return M.body;if(_===`json`&&!N){let e=await M.text();return e?JSON.parse(e):void 0}return await M[_]()})(),response:M};let P=await M.text();try{P=JSON.parse(P)}catch{}return{error:P,response:M}}return{request(e,t,n){return d(t,{...n,method:e.toUpperCase()})},GET(e,t){return d(e,{...t,method:`GET`})},PUT(e,t){return d(e,{...t,method:`PUT`})},POST(e,t){return d(e,{...t,method:`POST`})},DELETE(e,t){return d(e,{...t,method:`DELETE`})},OPTIONS(e,t){return d(e,{...t,method:`OPTIONS`})},HEAD(e,t){return d(e,{...t,method:`HEAD`})},PATCH(e,t){return d(e,{...t,method:`PATCH`})},TRACE(e,t){return d(e,{...t,method:`TRACE`})},use(...e){for(let t of e)if(t){if(typeof t!=`object`||!(`onRequest`in t||`onResponse`in t||`onError`in t))throw Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");u.push(t)}},eject(...e){for(let t of e){let e=u.indexOf(t);e!==-1&&u.splice(e,1)}}}}function J(e,t,n){if(t==null)return``;if(typeof t==`object`)throw Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${e}=${n?.allowReserved===!0?t:encodeURIComponent(t)}`}function Bt(e,t,n){if(!t||typeof t!=`object`)return``;let r=[],i={simple:`,`,label:`.`,matrix:`;`}[n.style]||`&`;if(n.style!==`deepObject`&&n.explode===!1){for(let e in t)r.push(e,n.allowReserved===!0?t[e]:encodeURIComponent(t[e]));let i=r.join(`,`);switch(n.style){case`form`:return`${e}=${i}`;case`label`:return`.${i}`;case`matrix`:return`;${e}=${i}`;default:return i}}for(let i in t){let a=n.style===`deepObject`?`${e}[${i}]`:i;r.push(J(a,t[i],n))}let a=r.join(i);return n.style===`label`||n.style===`matrix`?`${i}${a}`:a}function Vt(e,t,n){if(!Array.isArray(t))return``;if(n.explode===!1){let r={form:`,`,spaceDelimited:`%20`,pipeDelimited:`|`}[n.style]||`,`,i=(n.allowReserved===!0?t:t.map(e=>encodeURIComponent(e))).join(r);switch(n.style){case`simple`:return i;case`label`:return`.${i}`;case`matrix`:return`;${e}=${i}`;default:return`${e}=${i}`}}let r={simple:`,`,label:`.`,matrix:`;`}[n.style]||`&`,i=[];for(let r of t)n.style===`simple`||n.style===`label`?i.push(n.allowReserved===!0?r:encodeURIComponent(r)):i.push(J(e,r,n));return n.style===`label`||n.style===`matrix`?`${r}${i.join(r)}`:i.join(r)}function Ht(e){return function(t){let n=[];if(t&&typeof t==`object`)for(let r in t){let i=t[r];if(i!=null){if(Array.isArray(i)){if(i.length===0)continue;n.push(Vt(r,i,{style:`form`,explode:!0,...e?.array,allowReserved:e?.allowReserved||!1}));continue}if(typeof i==`object`){n.push(Bt(r,i,{style:`deepObject`,explode:!0,...e?.object,allowReserved:e?.allowReserved||!1}));continue}n.push(J(r,i,e))}}return n.join(`&`)}}function Ut(e,t){let n=e;for(let r of e.match(It)??[]){let e=r.substring(1,r.length-1),i=!1,a=`simple`;if(e.endsWith(`*`)&&(i=!0,e=e.substring(0,e.length-1)),e.startsWith(`.`)?(a=`label`,e=e.substring(1)):e.startsWith(`;`)&&(a=`matrix`,e=e.substring(1)),!t||t[e]===void 0||t[e]===null)continue;let o=t[e];if(Array.isArray(o)){n=n.replace(r,Vt(e,o,{style:a,explode:i}));continue}if(typeof o==`object`){n=n.replace(r,Bt(e,o,{style:a,explode:i}));continue}if(a===`matrix`){n=n.replace(r,`;${J(e,o)}`);continue}n=n.replace(r,a===`label`?`.${encodeURIComponent(o)}`:encodeURIComponent(o))}return n}function Wt(e,t){return e instanceof FormData?e:t&&(t.get instanceof Function?t.get(`Content-Type`)??t.get(`content-type`):t[`Content-Type`]??t[`content-type`])===`application/x-www-form-urlencoded`?new URLSearchParams(e).toString():JSON.stringify(e)}function Gt(e,t){let n=`${t.baseUrl}${e}`;t.params?.path&&(n=t.pathSerializer(n,t.params.path));let r=t.querySerializer(t.params.query??{});return r.startsWith(`?`)&&(r=r.substring(1)),r&&(n+=`?${r}`),n}function Kt(...e){let t=new Headers;for(let n of e){if(!n||typeof n!=`object`)continue;let e=n instanceof Headers?n.entries():Object.entries(n);for(let[n,r]of e)if(r===null)t.delete(n);else if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.set(n,r)}return t}function qt(e){return e.endsWith(`/`)?e.substring(0,e.length-1):e}function Jt(e){let t=async({queryKey:[t,n,r],signal:i})=>{let a=e[t.toUpperCase()],{data:o,error:s,response:c}=await a(n,{signal:i,...r});if(s)throw s;return c.status===204||c.headers.get(`Content-Length`)===`0`?o??null:o},n=(e,n,...[r,i])=>({queryKey:r===void 0?[e,n]:[e,n,r],queryFn:t,...i});return{queryOptions:n,useQuery:(e,t,...[r,i,a])=>ft(n(e,t,r,i),a),useSuspenseQuery:(e,t,...[r,i,a])=>pt(n(e,t,r,i),a),useInfiniteQuery:(t,r,i,a,o)=>{let{pageParamName:s=`cursor`,...c}=a,{queryKey:l}=n(t,r,i);return ht({queryKey:l,queryFn:async({queryKey:[t,n,r],pageParam:i=0,signal:a})=>{let o=e[t.toUpperCase()],{data:c,error:l}=await o(n,{...r,signal:a,params:{...r?.params||{},query:{...r?.params?.query,[s]:i}}});if(l)throw l;return c},...c},o)},useMutation:(t,n,r,i)=>mt({mutationKey:[t,n],mutationFn:async r=>{let i=e[t.toUpperCase()],{data:a,error:o}=await i(n,r);if(o)throw o;return a},...r},i)}}var Yt={0:p,400:n,500:c,10001:a,10002:y,10003:t,10004:i,10005:b,10006:s,10007:x,10008:v,10009:o,10010:d,10011:f,10012:m,10013:g,10014:u,10015:l,10016:_};function Y(e){return Yt[e]?.()??Yt[0]()}var Xt={onRequest({request:e}){let t=C(q);if(t)try{let n=JSON.parse(t);n&&e.headers.set(`Authorization`,`Bearer ${n}`)}catch{}return e},async onResponse({response:e}){if(e.status===401){sn();let t=encodeURIComponent(window.location.pathname+window.location.search);return window.location.replace(`/sign-in?redirect=${t}`),e}if(e.status===400)try{let t=await e.clone().json(),n=t.status_code&&Y(t.status_code)||t.message||Y(0);w.error(n)}catch{w.error(Y(0))}return e.status>=500&&w.error(Y(500)),e}},X=zt({baseUrl:`/`});X.use(Xt);var Zt=Jt(X);function Qt(e,t){try{return JSON.parse(e)}catch{return t}}function $t(){if(typeof window>`u`)return null;try{return window.localStorage}catch{return null}}function en(e){return $t()?.getItem(e)??void 0}function tn(e,t){$t()?.setItem(e,t)}function nn(e){$t()?.removeItem(e)}var Z={getToken:()=>Qt(C(`access_token`)||``,``),getUser:()=>Qt(en(`auth_user`)||``,null),setToken:e=>e?te(q,JSON.stringify(e)):S(q),setUser:e=>e?tn(Nt,JSON.stringify(e)):nn(Nt),clear:()=>{S(q),nn(Nt)}},rn=Z.getToken(),Q=new Mt({accessToken:rn,user:rn?Z.getUser():null}),$=null;function an(e){Z.setUser(e),Q.setState(t=>({...t,user:e}))}function on(e){let t=Q.state.accessToken;Z.setToken(e);let n=t!==e;n&&(Z.setUser(null),$=null),Q.setState(t=>({...t,accessToken:e,user:n?null:t.user})),e&&cn()}function sn(){Z.clear(),$=null,Q.setState(()=>({accessToken:``,user:null}))}function cn(){let{user:e,accessToken:t}=Q.state;return e?Promise.resolve(e):t?$||($=X.GET(`/admin/api/v1/auth/me`).then(({data:e})=>{let t=e?.data??null;return t&&an(t),t}).catch(()=>(sn(),null)).finally(()=>{$=null}),$):Promise.resolve(null)}function ln(){return vt(Q,e=>e)}export{j as C,E as D,he as E,T as O,ne as S,F as T,B as _,Zt as a,ie as b,Ft as c,vt as d,Ze as f,Se as g,Oe as h,ln as i,Pt as l,ze as m,sn as n,X as o,Ge as p,on as r,q as s,Q as t,Mt as u,M as v,ae as w,re as x,L as y}; \ No newline at end of file diff --git a/src/www/assets/badge-D-FAREMY.js b/src/www/assets/badge-D-FAREMY.js new file mode 100644 index 0000000..54c290e --- /dev/null +++ b/src/www/assets/badge-D-FAREMY.js @@ -0,0 +1 @@ +import{Qu as e}from"./messages-BOl-zx8S.js";import{i as t,r as n,s as r}from"./button-D-oR8d6w.js";var i=e(),a=n(`inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden whitespace-nowrap rounded-full border border-transparent px-2 py-0.5 font-medium text-xs transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3`,{variants:{variant:{default:`bg-primary text-primary-foreground [a&]:hover:bg-primary/90`,secondary:`bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90`,destructive:`bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90`,outline:`border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground`,ghost:`[a&]:hover:bg-accent [a&]:hover:text-accent-foreground`,link:`text-primary underline-offset-4 [a&]:hover:underline`}},defaultVariants:{variant:`default`}});function o({className:e,variant:n=`default`,asChild:o=!1,...s}){return(0,i.jsx)(o?r:`span`,{className:t(a({variant:n}),e),"data-slot":`badge`,"data-variant":n,...s})}export{o as t}; \ No newline at end of file diff --git a/src/www/assets/button-D-oR8d6w.js b/src/www/assets/button-D-oR8d6w.js new file mode 100644 index 0000000..983cade --- /dev/null +++ b/src/www/assets/button-D-oR8d6w.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";var r=n(e(),1);function i(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function a(...e){return t=>{let n=!1,r=e.map(e=>{let r=i(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t{let{children:i,...a}=e,o=r.Children.toArray(i),c=o.find(f);if(c){let e=c.props.children,i=o.map(t=>t===c?r.Children.count(e)>1?r.Children.only(null):r.isValidElement(e)?e.props.children:null:t);return(0,s.jsx)(t,{...a,ref:n,children:r.isValidElement(e)?r.cloneElement(e,void 0,i):null})}return(0,s.jsx)(t,{...a,ref:n,children:i})});return n.displayName=`${e}.Slot`,n}var l=c(`Slot`);function u(e){let t=r.forwardRef((e,t)=>{let{children:n,...i}=e;if(r.isValidElement(n)){let e=m(n),o=p(i,n.props);return n.type!==r.Fragment&&(o.ref=t?a(t,e):e),r.cloneElement(n,o)}return r.Children.count(n)>1?r.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var ee=Symbol(`radix.slottable`);function d(e){let t=({children:e})=>(0,s.jsx)(s.Fragment,{children:e});return t.displayName=`${e}.Slottable`,t.__radixId=ee,t}function f(e){return r.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===ee}function p(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function m(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function h(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),v=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),y=`-`,b=[],x=`arbitrary..`,S=e=>{let t=re(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return ne(e);let n=e.split(y);return C(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?te(i,t):t:i||b}return n[e]||b}}},C=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=C(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(y):e.slice(t).join(y),s=a.length;for(let e=0;ee.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?x+r:void 0})(),re=e=>{let{theme:t,classGroups:n}=e;return w(n,t)},w=(e,t)=>{let n=v();for(let r in e){let i=e[r];T(i,n,r,t)}return n},T=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){D(e,t,n);return}if(typeof e==`function`){O(e,t,n,r);return}k(e,t,n,r)},D=(e,t,n)=>{let r=e===``?t:A(t,e);r.classGroupId=n},O=(e,t,n,r)=>{if(ie(e)){T(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(_(n,e))},k=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(y),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,j=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},M=`!`,N=`:`,ae=[],P=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),F=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return P(t,l,c,u)};if(t){let e=t+N,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):P(ae,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},I=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},L=e=>({cache:j(e.cacheSize),parseClassName:F(e),sortModifiers:I(e),...S(e)}),oe=/\s+/,R=(e,t)=>{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a}=t,o=[],s=e.trim().split(oe),c=``;for(let e=s.length-1;e>=0;--e){let t=s[e],{isExternal:l,modifiers:u,hasImportantModifier:ee,baseClassName:d,maybePostfixModifierPosition:f}=n(t);if(l){c=t+(c.length>0?` `+c:c);continue}let p=!!f,m=r(p?d.substring(0,f):d);if(!m){if(!p){c=t+(c.length>0?` `+c:c);continue}if(m=r(d),!m){c=t+(c.length>0?` `+c:c);continue}p=!1}let h=u.length===0?``:u.length===1?u[0]:a(u).join(`:`),g=ee?h+M:h,te=g+m;if(o.indexOf(te)>-1)continue;o.push(te);let _=i(m,p);for(let e=0;e<_.length;++e){let t=_[e];o.push(g+t)}c=t+(c.length>0?` `+c:c)}return c},se=(...e)=>{let t=0,n,r,i=``;for(;t{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r{let n,r,i,a,o=o=>(n=L(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=R(e,n);return i(e,a),a};return a=o,(...e)=>a(se(...e))},V=[],H=e=>{let t=t=>t[e]||V;return t.isThemeGetter=!0,t},U=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,ce=/^\((?:(\w[\w-]*):)?(.+)\)$/i,le=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,ue=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,de=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,fe=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,pe=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,me=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,W=e=>le.test(e),G=e=>!!e&&!Number.isNaN(Number(e)),K=e=>!!e&&Number.isInteger(Number(e)),he=e=>e.endsWith(`%`)&&G(e.slice(0,-1)),q=e=>ue.test(e),ge=()=>!0,_e=e=>de.test(e)&&!fe.test(e),ve=()=>!1,ye=e=>pe.test(e),be=e=>me.test(e),xe=e=>!J(e)&&!X(e),Se=e=>Q(e,Le,ve),J=e=>U.test(e),Y=e=>Q(e,Re,_e),Ce=e=>Q(e,ze,G),we=e=>Q(e,Ve,ge),Te=e=>Q(e,Be,ve),Ee=e=>Q(e,Fe,ve),De=e=>Q(e,Ie,be),Oe=e=>Q(e,He,ye),X=e=>ce.test(e),Z=e=>$(e,Re),ke=e=>$(e,Be),Ae=e=>$(e,Fe),je=e=>$(e,Le),Me=e=>$(e,Ie),Ne=e=>$(e,He,!0),Pe=e=>$(e,Ve,!0),Q=(e,t,n)=>{let r=U.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},$=(e,t,n=!1)=>{let r=ce.exec(e);return r?r[1]?t(r[1]):n:!1},Fe=e=>e===`position`||e===`percentage`,Ie=e=>e===`image`||e===`url`,Le=e=>e===`length`||e===`size`||e===`bg-size`,Re=e=>e===`length`,ze=e=>e===`number`,Be=e=>e===`family-name`,Ve=e=>e===`number`||e===`weight`,He=e=>e===`shadow`,Ue=B(()=>{let e=H(`color`),t=H(`font`),n=H(`text`),r=H(`font-weight`),i=H(`tracking`),a=H(`leading`),o=H(`breakpoint`),s=H(`container`),c=H(`spacing`),l=H(`radius`),u=H(`shadow`),ee=H(`inset-shadow`),d=H(`text-shadow`),f=H(`drop-shadow`),p=H(`blur`),m=H(`perspective`),h=H(`aspect`),g=H(`ease`),te=H(`animate`),_=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],v=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],y=()=>[...v(),X,J],b=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],x=()=>[`auto`,`contain`,`none`],S=()=>[X,J,c],C=()=>[W,`full`,`auto`,...S()],ne=()=>[K,`none`,`subgrid`,X,J],re=()=>[`auto`,{span:[`full`,K,X,J]},K,X,J],w=()=>[K,`auto`,X,J],T=()=>[`auto`,`min`,`max`,`fr`,X,J],E=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],D=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],O=()=>[`auto`,...S()],k=()=>[W,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...S()],A=()=>[W,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...S()],ie=()=>[W,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...S()],j=()=>[e,X,J],M=()=>[...v(),Ae,Ee,{position:[X,J]}],N=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ae=()=>[`auto`,`cover`,`contain`,je,Se,{size:[X,J]}],P=()=>[he,Z,Y],F=()=>[``,`none`,`full`,l,X,J],I=()=>[``,G,Z,Y],L=()=>[`solid`,`dashed`,`dotted`,`double`],oe=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],R=()=>[G,he,Ae,Ee],se=()=>[``,`none`,p,X,J],z=()=>[`none`,G,X,J],B=()=>[`none`,G,X,J],V=()=>[G,X,J],U=()=>[W,`full`,...S()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[q],breakpoint:[q],color:[ge],container:[q],"drop-shadow":[q],ease:[`in`,`out`,`in-out`],font:[xe],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[q],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[q],shadow:[q],spacing:[`px`,G],text:[q],"text-shadow":[q],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,W,J,X,h]}],container:[`container`],columns:[{columns:[G,J,X,s]}],"break-after":[{"break-after":_()}],"break-before":[{"break-before":_()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:y()}],overflow:[{overflow:b()}],"overflow-x":[{"overflow-x":b()}],"overflow-y":[{"overflow-y":b()}],overscroll:[{overscroll:x()}],"overscroll-x":[{"overscroll-x":x()}],"overscroll-y":[{"overscroll-y":x()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:C()}],"inset-x":[{"inset-x":C()}],"inset-y":[{"inset-y":C()}],start:[{"inset-s":C(),start:C()}],end:[{"inset-e":C(),end:C()}],"inset-bs":[{"inset-bs":C()}],"inset-be":[{"inset-be":C()}],top:[{top:C()}],right:[{right:C()}],bottom:[{bottom:C()}],left:[{left:C()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[K,`auto`,X,J]}],basis:[{basis:[W,`full`,`auto`,s,...S()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[G,W,`auto`,`initial`,`none`,J]}],grow:[{grow:[``,G,X,J]}],shrink:[{shrink:[``,G,X,J]}],order:[{order:[K,`first`,`last`,`none`,X,J]}],"grid-cols":[{"grid-cols":ne()}],"col-start-end":[{col:re()}],"col-start":[{"col-start":w()}],"col-end":[{"col-end":w()}],"grid-rows":[{"grid-rows":ne()}],"row-start-end":[{row:re()}],"row-start":[{"row-start":w()}],"row-end":[{"row-end":w()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":T()}],"auto-rows":[{"auto-rows":T()}],gap:[{gap:S()}],"gap-x":[{"gap-x":S()}],"gap-y":[{"gap-y":S()}],"justify-content":[{justify:[...E(),`normal`]}],"justify-items":[{"justify-items":[...D(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...D()]}],"align-content":[{content:[`normal`,...E()]}],"align-items":[{items:[...D(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...D(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":E()}],"place-items":[{"place-items":[...D(),`baseline`]}],"place-self":[{"place-self":[`auto`,...D()]}],p:[{p:S()}],px:[{px:S()}],py:[{py:S()}],ps:[{ps:S()}],pe:[{pe:S()}],pbs:[{pbs:S()}],pbe:[{pbe:S()}],pt:[{pt:S()}],pr:[{pr:S()}],pb:[{pb:S()}],pl:[{pl:S()}],m:[{m:O()}],mx:[{mx:O()}],my:[{my:O()}],ms:[{ms:O()}],me:[{me:O()}],mbs:[{mbs:O()}],mbe:[{mbe:O()}],mt:[{mt:O()}],mr:[{mr:O()}],mb:[{mb:O()}],ml:[{ml:O()}],"space-x":[{"space-x":S()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":S()}],"space-y-reverse":[`space-y-reverse`],size:[{size:k()}],"inline-size":[{inline:[`auto`,...A()]}],"min-inline-size":[{"min-inline":[`auto`,...A()]}],"max-inline-size":[{"max-inline":[`none`,...A()]}],"block-size":[{block:[`auto`,...ie()]}],"min-block-size":[{"min-block":[`auto`,...ie()]}],"max-block-size":[{"max-block":[`none`,...ie()]}],w:[{w:[s,`screen`,...k()]}],"min-w":[{"min-w":[s,`screen`,`none`,...k()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...k()]}],h:[{h:[`screen`,`lh`,...k()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...k()]}],"max-h":[{"max-h":[`screen`,`lh`,...k()]}],"font-size":[{text:[`base`,n,Z,Y]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,Pe,we]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,he,J]}],"font-family":[{font:[ke,Te,t]}],"font-features":[{"font-features":[J]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,X,J]}],"line-clamp":[{"line-clamp":[G,`none`,X,Ce]}],leading:[{leading:[a,...S()]}],"list-image":[{"list-image":[`none`,X,J]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,X,J]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:j()}],"text-color":[{text:j()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...L(),`wavy`]}],"text-decoration-thickness":[{decoration:[G,`from-font`,`auto`,X,Y]}],"text-decoration-color":[{decoration:j()}],"underline-offset":[{"underline-offset":[G,`auto`,X,J]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:S()}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,X,J]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,X,J]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:M()}],"bg-repeat":[{bg:N()}],"bg-size":[{bg:ae()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},K,X,J],radial:[``,X,J],conic:[K,X,J]},Me,De]}],"bg-color":[{bg:j()}],"gradient-from-pos":[{from:P()}],"gradient-via-pos":[{via:P()}],"gradient-to-pos":[{to:P()}],"gradient-from":[{from:j()}],"gradient-via":[{via:j()}],"gradient-to":[{to:j()}],rounded:[{rounded:F()}],"rounded-s":[{"rounded-s":F()}],"rounded-e":[{"rounded-e":F()}],"rounded-t":[{"rounded-t":F()}],"rounded-r":[{"rounded-r":F()}],"rounded-b":[{"rounded-b":F()}],"rounded-l":[{"rounded-l":F()}],"rounded-ss":[{"rounded-ss":F()}],"rounded-se":[{"rounded-se":F()}],"rounded-ee":[{"rounded-ee":F()}],"rounded-es":[{"rounded-es":F()}],"rounded-tl":[{"rounded-tl":F()}],"rounded-tr":[{"rounded-tr":F()}],"rounded-br":[{"rounded-br":F()}],"rounded-bl":[{"rounded-bl":F()}],"border-w":[{border:I()}],"border-w-x":[{"border-x":I()}],"border-w-y":[{"border-y":I()}],"border-w-s":[{"border-s":I()}],"border-w-e":[{"border-e":I()}],"border-w-bs":[{"border-bs":I()}],"border-w-be":[{"border-be":I()}],"border-w-t":[{"border-t":I()}],"border-w-r":[{"border-r":I()}],"border-w-b":[{"border-b":I()}],"border-w-l":[{"border-l":I()}],"divide-x":[{"divide-x":I()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":I()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...L(),`hidden`,`none`]}],"divide-style":[{divide:[...L(),`hidden`,`none`]}],"border-color":[{border:j()}],"border-color-x":[{"border-x":j()}],"border-color-y":[{"border-y":j()}],"border-color-s":[{"border-s":j()}],"border-color-e":[{"border-e":j()}],"border-color-bs":[{"border-bs":j()}],"border-color-be":[{"border-be":j()}],"border-color-t":[{"border-t":j()}],"border-color-r":[{"border-r":j()}],"border-color-b":[{"border-b":j()}],"border-color-l":[{"border-l":j()}],"divide-color":[{divide:j()}],"outline-style":[{outline:[...L(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[G,X,J]}],"outline-w":[{outline:[``,G,Z,Y]}],"outline-color":[{outline:j()}],shadow:[{shadow:[``,`none`,u,Ne,Oe]}],"shadow-color":[{shadow:j()}],"inset-shadow":[{"inset-shadow":[`none`,ee,Ne,Oe]}],"inset-shadow-color":[{"inset-shadow":j()}],"ring-w":[{ring:I()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:j()}],"ring-offset-w":[{"ring-offset":[G,Y]}],"ring-offset-color":[{"ring-offset":j()}],"inset-ring-w":[{"inset-ring":I()}],"inset-ring-color":[{"inset-ring":j()}],"text-shadow":[{"text-shadow":[`none`,d,Ne,Oe]}],"text-shadow-color":[{"text-shadow":j()}],opacity:[{opacity:[G,X,J]}],"mix-blend":[{"mix-blend":[...oe(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":oe()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[G]}],"mask-image-linear-from-pos":[{"mask-linear-from":R()}],"mask-image-linear-to-pos":[{"mask-linear-to":R()}],"mask-image-linear-from-color":[{"mask-linear-from":j()}],"mask-image-linear-to-color":[{"mask-linear-to":j()}],"mask-image-t-from-pos":[{"mask-t-from":R()}],"mask-image-t-to-pos":[{"mask-t-to":R()}],"mask-image-t-from-color":[{"mask-t-from":j()}],"mask-image-t-to-color":[{"mask-t-to":j()}],"mask-image-r-from-pos":[{"mask-r-from":R()}],"mask-image-r-to-pos":[{"mask-r-to":R()}],"mask-image-r-from-color":[{"mask-r-from":j()}],"mask-image-r-to-color":[{"mask-r-to":j()}],"mask-image-b-from-pos":[{"mask-b-from":R()}],"mask-image-b-to-pos":[{"mask-b-to":R()}],"mask-image-b-from-color":[{"mask-b-from":j()}],"mask-image-b-to-color":[{"mask-b-to":j()}],"mask-image-l-from-pos":[{"mask-l-from":R()}],"mask-image-l-to-pos":[{"mask-l-to":R()}],"mask-image-l-from-color":[{"mask-l-from":j()}],"mask-image-l-to-color":[{"mask-l-to":j()}],"mask-image-x-from-pos":[{"mask-x-from":R()}],"mask-image-x-to-pos":[{"mask-x-to":R()}],"mask-image-x-from-color":[{"mask-x-from":j()}],"mask-image-x-to-color":[{"mask-x-to":j()}],"mask-image-y-from-pos":[{"mask-y-from":R()}],"mask-image-y-to-pos":[{"mask-y-to":R()}],"mask-image-y-from-color":[{"mask-y-from":j()}],"mask-image-y-to-color":[{"mask-y-to":j()}],"mask-image-radial":[{"mask-radial":[X,J]}],"mask-image-radial-from-pos":[{"mask-radial-from":R()}],"mask-image-radial-to-pos":[{"mask-radial-to":R()}],"mask-image-radial-from-color":[{"mask-radial-from":j()}],"mask-image-radial-to-color":[{"mask-radial-to":j()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":v()}],"mask-image-conic-pos":[{"mask-conic":[G]}],"mask-image-conic-from-pos":[{"mask-conic-from":R()}],"mask-image-conic-to-pos":[{"mask-conic-to":R()}],"mask-image-conic-from-color":[{"mask-conic-from":j()}],"mask-image-conic-to-color":[{"mask-conic-to":j()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:M()}],"mask-repeat":[{mask:N()}],"mask-size":[{mask:ae()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,X,J]}],filter:[{filter:[``,`none`,X,J]}],blur:[{blur:se()}],brightness:[{brightness:[G,X,J]}],contrast:[{contrast:[G,X,J]}],"drop-shadow":[{"drop-shadow":[``,`none`,f,Ne,Oe]}],"drop-shadow-color":[{"drop-shadow":j()}],grayscale:[{grayscale:[``,G,X,J]}],"hue-rotate":[{"hue-rotate":[G,X,J]}],invert:[{invert:[``,G,X,J]}],saturate:[{saturate:[G,X,J]}],sepia:[{sepia:[``,G,X,J]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,X,J]}],"backdrop-blur":[{"backdrop-blur":se()}],"backdrop-brightness":[{"backdrop-brightness":[G,X,J]}],"backdrop-contrast":[{"backdrop-contrast":[G,X,J]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,G,X,J]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[G,X,J]}],"backdrop-invert":[{"backdrop-invert":[``,G,X,J]}],"backdrop-opacity":[{"backdrop-opacity":[G,X,J]}],"backdrop-saturate":[{"backdrop-saturate":[G,X,J]}],"backdrop-sepia":[{"backdrop-sepia":[``,G,X,J]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":S()}],"border-spacing-x":[{"border-spacing-x":S()}],"border-spacing-y":[{"border-spacing-y":S()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,X,J]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[G,`initial`,X,J]}],ease:[{ease:[`linear`,`initial`,g,X,J]}],delay:[{delay:[G,X,J]}],animate:[{animate:[`none`,te,X,J]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[m,X,J]}],"perspective-origin":[{"perspective-origin":y()}],rotate:[{rotate:z()}],"rotate-x":[{"rotate-x":z()}],"rotate-y":[{"rotate-y":z()}],"rotate-z":[{"rotate-z":z()}],scale:[{scale:B()}],"scale-x":[{"scale-x":B()}],"scale-y":[{"scale-y":B()}],"scale-z":[{"scale-z":B()}],"scale-3d":[`scale-3d`],skew:[{skew:V()}],"skew-x":[{"skew-x":V()}],"skew-y":[{"skew-y":V()}],transform:[{transform:[X,J,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:y()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:U()}],"translate-x":[{"translate-x":U()}],"translate-y":[{"translate-y":U()}],"translate-z":[{"translate-z":U()}],"translate-none":[`translate-none`],accent:[{accent:j()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:j()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,X,J]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scroll-m":[{"scroll-m":S()}],"scroll-mx":[{"scroll-mx":S()}],"scroll-my":[{"scroll-my":S()}],"scroll-ms":[{"scroll-ms":S()}],"scroll-me":[{"scroll-me":S()}],"scroll-mbs":[{"scroll-mbs":S()}],"scroll-mbe":[{"scroll-mbe":S()}],"scroll-mt":[{"scroll-mt":S()}],"scroll-mr":[{"scroll-mr":S()}],"scroll-mb":[{"scroll-mb":S()}],"scroll-ml":[{"scroll-ml":S()}],"scroll-p":[{"scroll-p":S()}],"scroll-px":[{"scroll-px":S()}],"scroll-py":[{"scroll-py":S()}],"scroll-ps":[{"scroll-ps":S()}],"scroll-pe":[{"scroll-pe":S()}],"scroll-pbs":[{"scroll-pbs":S()}],"scroll-pbe":[{"scroll-pbe":S()}],"scroll-pt":[{"scroll-pt":S()}],"scroll-pr":[{"scroll-pr":S()}],"scroll-pb":[{"scroll-pb":S()}],"scroll-pl":[{"scroll-pl":S()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,X,J]}],fill:[{fill:[`none`,...j()]}],"stroke-w":[{stroke:[G,Z,Y,Ce]}],stroke:[{stroke:[`none`,...j()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`right`,`left`],"inset-y":[`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`pr`,`pl`],py:[`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`mr`,`ml`],my:[`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-r`,`border-w-l`],"border-w-y":[`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-r`,`border-color-l`],"border-color-y":[`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function We(...e){return Ue(g(e))}function Ge(e,t){let n=[];if(t<=5)for(let e=1;e<=t;e++)n.push(e);else if(n.push(1),e<=3){for(let e=2;e<=4;e++)n.push(e);n.push(`...`,t)}else if(e>=t-2){n.push(`...`);for(let e=t-3;e<=t;e++)n.push(e)}else{n.push(`...`);for(let t=e-1;t<=e+1;t++)n.push(t);n.push(`...`,t)}return n}var Ke=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,qe=g,Je=(e,t)=>n=>{if(t?.variants==null)return qe(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=Ke(t)||Ke(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return qe(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},Ye=Je(`inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-sm outline-none transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary/90`,destructive:`bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40`,outline:`border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-9 px-4 py-2 has-[>svg]:px-3`,xs:`h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3`,sm:`h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5`,lg:`h-10 rounded-md px-6 has-[>svg]:px-4`,icon:`size-9`,"icon-xs":`size-6 rounded-md [&_svg:not([class*='size-'])]:size-3`,"icon-sm":`size-8`,"icon-lg":`size-10`}},defaultVariants:{variant:`default`,size:`default`}});function Xe({className:e,variant:t=`default`,size:n=`default`,asChild:r=!1,...i}){return(0,s.jsx)(r?l:`button`,{className:We(Ye({variant:t,size:n,className:e})),"data-size":n,"data-slot":`button`,"data-variant":t,...i})}export{Ge as a,c,o as d,We as i,d as l,Ye as n,g as o,Je as r,l as s,Xe as t,a as u}; \ No newline at end of file diff --git a/src/www/assets/card-LDLQwVm3.js b/src/www/assets/card-LDLQwVm3.js new file mode 100644 index 0000000..7cf0127 --- /dev/null +++ b/src/www/assets/card-LDLQwVm3.js @@ -0,0 +1 @@ +import{Qu as e}from"./messages-BOl-zx8S.js";import{i as t}from"./button-D-oR8d6w.js";var n=e();function r({className:e,...r}){return(0,n.jsx)(`div`,{className:t(`flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm`,e),"data-slot":`card`,...r})}function i({className:e,...r}){return(0,n.jsx)(`div`,{className:t(`@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6`,e),"data-slot":`card-header`,...r})}function a({className:e,...r}){return(0,n.jsx)(`div`,{className:t(`font-semibold leading-none`,e),"data-slot":`card-title`,...r})}function o({className:e,...r}){return(0,n.jsx)(`div`,{className:t(`text-muted-foreground text-sm`,e),"data-slot":`card-description`,...r})}function s({className:e,...r}){return(0,n.jsx)(`div`,{className:t(`px-6`,e),"data-slot":`card-content`,...r})}export{a,i,s as n,o as r,r as t}; \ No newline at end of file diff --git a/src/www/assets/chains-a6BmCl-8.js b/src/www/assets/chains-a6BmCl-8.js new file mode 100644 index 0000000..009f843 --- /dev/null +++ b/src/www/assets/chains-a6BmCl-8.js @@ -0,0 +1 @@ +import{$r as e,$u as t,Ci as n,Gr as r,Hi as i,Ji as a,Jr as o,Kr as s,Qr as c,Qu as l,Si as u,Ti as d,Ui as f,Vi as p,Xr as m,Yr as h,Zr as g,_i as _,ai as v,bi as y,ci as b,di as ee,ea as te,ei as x,fi as ne,gi as re,hi as ie,ia as S,ii as C,ji as w,li as T,mi as ae,nd as oe,ni as se,oi as E,pi as ce,qr as D,ra as le,ri as ue,si as de,ti as fe,ui as pe,vi as me,wi as he,xi as ge,yi as _e}from"./messages-BOl-zx8S.js";import{a as O,d as k,u as ve}from"./auth-store-D_jr_Pei.js";import{t as A}from"./router-D0lu_-Oq.js";import{B as ye,V as be,o as j,r as xe}from"./search-provider-D-fTfilE.js";import{i as M,t as N}from"./button-D-oR8d6w.js";import{t as Se}from"./checkbox-D_bL2Pt-.js";import{a as P,c as F,l as Ce,r as we,s as Te,t as Ee}from"./dropdown-menu-HbmfecEg.js";import{t as I}from"./skeleton-gJOqI-7w.js";import{a as De,i as Oe,n as ke,r as Ae,t as je}from"./select-CvMpqpz9.js";import{t as L}from"./separator-Dw-mNGCy.js";import{t as R}from"./switch-m0XBbPWc.js";import{_ as Me,d as z,f as Ne,g as Pe,h as Fe,n as Ie,p as Le,r as Re,t as ze,v as Be,y as Ve}from"./data-table-C3uNvchK.js";import{t as He}from"./arrow-left-BQ3rygWM.js";import{t as Ue}from"./ellipsis-DvvxWQuy.js";import{t as We}from"./empty-state-BelJgFUf.js";import{n as Ge,t as Ke}from"./main-DvsnNI3V.js";import{n as qe,t as Je}from"./chains-store-DnSbj0Yy.js";import{n as Ye,t as Xe}from"./trash-2-CaT-Drvx.js";import{d as Ze,g as Qe,l as $e,m as et,p as tt,u as nt}from"./command-yFHhtFiR.js";import{n as B}from"./dist-BNiRpK39.js";import{a as rt,c as V,n as H,s as it}from"./zod-DzRgHmfz.js";import{a as U,c as at,i as W,l as ot,n as G,o as K,s as q,t as st}from"./form-uKra2bmF.js";import{t as J}from"./input-CZHXycLK.js";import{t as ct}from"./page-header-BRM1dngJ.js";import{t as Y}from"./badge-D-FAREMY.js";import{t as lt}from"./coming-soon-dialog-DIE5FD4U.js";var X=oe(t(),1),Z=l(),ut=it({network:V().min(1,o()),symbol:V().min(1,D()),contract_address:V().optional().default(``),decimals:H().min(0,s()).default(6),min_amount:H().min(0,r()).default(0),enabled:rt().default(!0)});function dt({open:t,onOpenChange:n,currentRow:r,onSuccess:i,defaultNetwork:o,onCreate:s,onUpdate:l,chains:u}){let d=ot({resolver:at(ut),defaultValues:{network:``,symbol:``,contract_address:``,decimals:6,min_amount:0,enabled:!0}}),f;f=u?.length?u:o?[{network:o,display_name:o}]:[],(0,X.useEffect)(()=>{t&&d.reset({network:r?.network??o??f[0]?.network??``,symbol:r?.symbol??``,contract_address:r?.contract_address??``,decimals:r?.decimals??6,min_amount:r?.min_amount??0,enabled:r?.enabled??!0})},[t,r,o,f,d]);async function p(e){r?.id?await l(e):await s(e),n(!1),await i?.()}let _=d.formState.isSubmitting;return(0,Z.jsx)($e,{onOpenChange:n,open:t,children:(0,Z.jsxs)(nt,{children:[(0,Z.jsxs)(tt,{children:[(0,Z.jsx)(et,{children:r?v():C()}),(0,Z.jsx)(Ze,{children:r?ue():se()})]}),(0,Z.jsx)(st,{...d,children:(0,Z.jsxs)(`form`,{className:`space-y-4`,onSubmit:d.handleSubmit(p),children:[(0,Z.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,Z.jsx)(W,{control:d.control,name:`network`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:S()}),(0,Z.jsxs)(je,{disabled:!!r,onValueChange:e.onChange,value:e.value,children:[(0,Z.jsx)(G,{children:(0,Z.jsx)(Oe,{className:`w-full`,children:(0,Z.jsx)(De,{placeholder:le()})})}),(0,Z.jsx)(ke,{children:f.map(e=>(0,Z.jsx)(Ae,{value:e.network,children:e.display_name??e.network},e.network))})]}),(0,Z.jsx)(q,{})]})}),(0,Z.jsx)(W,{control:d.control,name:`symbol`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:fe()}),(0,Z.jsx)(G,{children:(0,Z.jsx)(J,{placeholder:`USDT`,...e,disabled:!!r})}),(0,Z.jsx)(q,{})]})})]}),(0,Z.jsx)(`div`,{className:`rounded-md border border-dashed p-3 text-muted-foreground text-sm`,children:x()}),(0,Z.jsx)(W,{control:d.control,name:`contract_address`,render:({field:t})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:e()}),(0,Z.jsx)(G,{children:(0,Z.jsx)(J,{placeholder:`TR7NHqje...`,...t})}),(0,Z.jsx)(q,{})]})}),(0,Z.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,Z.jsx)(W,{control:d.control,name:`decimals`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:c()}),(0,Z.jsx)(G,{children:(0,Z.jsx)(J,{name:e.name,onBlur:e.onBlur,onChange:t=>e.onChange(t.target.value),ref:e.ref,type:`number`,value:String(e.value??``)})}),(0,Z.jsx)(q,{})]})}),(0,Z.jsx)(W,{control:d.control,name:`min_amount`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:g()}),(0,Z.jsx)(G,{children:(0,Z.jsx)(J,{name:e.name,onBlur:e.onBlur,onChange:t=>e.onChange(t.target.value),ref:e.ref,step:`0.000001`,type:`number`,value:String(e.value??``)})}),(0,Z.jsx)(q,{})]})})]}),(0,Z.jsx)(W,{control:d.control,name:`enabled`,render:({field:e})=>(0,Z.jsxs)(U,{className:`flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4 rtl:space-x-reverse`,children:[(0,Z.jsx)(G,{children:(0,Z.jsx)(Se,{checked:e.value,onCheckedChange:t=>e.onChange(!!t)})}),(0,Z.jsx)(`div`,{className:`space-y-1 leading-none`,children:(0,Z.jsx)(K,{children:a()})})]})}),(0,Z.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,Z.jsx)(N,{onClick:()=>n(!1),type:`button`,variant:`outline`,children:te()}),(0,Z.jsx)(N,{disabled:_,type:`submit`,children:_?w():r?h():m()})]})]})})]})})}function ft(e){return[{id:`switch`,header:({column:e})=>(0,Z.jsx)(z,{column:e,title:a()}),cell:({row:t})=>(0,Z.jsx)(R,{checked:t.original.enabled===!0,onCheckedChange:()=>e(t.original.enabled?`disable`:`enable`,t.original)}),enableSorting:!1,enableHiding:!1,meta:{label:a(),skeleton:`switch`,sticky:`left`,th:{className:M(`rounded-tl-[inherit]`)}}},{accessorKey:`symbol`,header:({column:e})=>(0,Z.jsx)(z,{column:e,title:b()}),cell:({row:e})=>(0,Z.jsx)(`div`,{className:`font-medium`,children:e.original.symbol??`-`}),enableHiding:!1,meta:{label:b(),skeleton:`short`}},{accessorKey:`network`,header:({column:e})=>(0,Z.jsx)(z,{column:e,title:S()}),meta:{label:S(),skeleton:`short`}},{accessorKey:`created_at`,header:({column:e})=>(0,Z.jsx)(z,{column:e,title:f()}),cell:({row:e})=>j(e.original.created_at),meta:{label:f(),skeleton:`date`}},{accessorKey:`updated_at`,header:({column:e})=>(0,Z.jsx)(z,{column:e,title:i()}),cell:({row:e})=>j(e.original.updated_at),meta:{label:i(),skeleton:`date`}},{id:`actions`,enableHiding:!1,meta:{label:p(),skeleton:`action`,sticky:`right`},cell:({row:t})=>(0,Z.jsxs)(Ee,{modal:!1,children:[(0,Z.jsx)(Ce,{asChild:!0,children:(0,Z.jsxs)(N,{className:`flex h-8 w-8 p-0 data-[state=open]:bg-muted`,variant:`ghost`,children:[(0,Z.jsx)(Ue,{className:`h-4 w-4`}),(0,Z.jsx)(`span`,{className:`sr-only`,children:`Open menu`})]})}),(0,Z.jsxs)(we,{align:`end`,className:`w-40`,children:[(0,Z.jsxs)(P,{onClick:()=>e(`edit`,t.original),children:[de(),(0,Z.jsx)(F,{children:(0,Z.jsx)(qe,{size:16})})]}),(0,Z.jsx)(Te,{}),(0,Z.jsxs)(P,{onClick:()=>e(`delete`,t.original),variant:`destructive`,children:[E(),(0,Z.jsx)(F,{children:(0,Z.jsx)(Xe,{size:16})})]})]})]})}]}function pt({data:e,isLoading:t,onAction:n,onRefresh:r}){let[i,a]=(0,X.useState)([]),[o,s]=(0,X.useState)(``),[c,l]=(0,X.useState)([]),[u,d]=(0,X.useState)({pageIndex:0,pageSize:10}),f=Ne({data:e,columns:(0,X.useMemo)(()=>ft(n),[n]),state:{sorting:i,columnFilters:c,globalFilter:o,pagination:u},onSortingChange:a,onColumnFiltersChange:l,onGlobalFilterChange:s,onPaginationChange:d,globalFilterFn:(e,t,n)=>{let r=String(n).toLowerCase();return(e.original.symbol??``).toLowerCase().includes(r)||(e.original.contract_address??``).toLowerCase().includes(r)},getCoreRowModel:Le(),getFilteredRowModel:Me(),getPaginationRowModel:Be(),getSortedRowModel:Ve(),getFacetedRowModel:Fe(),getFacetedUniqueValues:Pe()});return(0,X.useEffect)(()=>{let e=f.getPageCount();e>0&&u.pageIndex>e-1&&d(e=>({...e,pageIndex:0}))},[f,u.pageIndex]),(0,Z.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,Z.jsx)(ze,{onRefresh:r,searchKey:`symbol`,searchPlaceholder:pe(),table:f}),(0,Z.jsx)(Re,{emptyText:T(),loading:t,table:f}),(0,Z.jsx)(Ie,{className:`mt-auto`,table:f})]})}var Q=new ve({chainTokens:[],loading:!1});function mt(e){Q.setState(t=>({...t,chainTokens:e}))}function ht(e){Q.setState(t=>({...t,loading:e}))}function gt(){let e=k(Q,e=>e.chainTokens),t=k(Q,e=>e.loading),n=O.useQuery(`get`,`/admin/api/v1/chain-tokens`);return(0,X.useEffect)(()=>{ht(n.isLoading)},[n.isLoading]),(0,X.useEffect)(()=>{n.data?.data&&mt(n.data.data)},[n.data?.data]),{chainTokens:e,loading:t,refetch:n.refetch}}var _t=[`chain-1`,`chain-2`,`chain-3`,`chain-4`,`chain-5`];function $({active:e,children:t,onClick:n}){return(0,Z.jsx)(`button`,{className:M(`w-full cursor-pointer rounded-lg px-3 py-3 text-left transition-colors hover:bg-accent hover:text-accent-foreground`,e&&`bg-muted`),onClick:n,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n())},type:`button`,children:t})}function vt({chains:e,isLoading:t,keyword:r,onKeywordChange:i,selectedPanel:a,onSelect:o,onToggle:s,totalTokens:c,hiddenOnMobile:l}){return(0,Z.jsxs)(`div`,{className:M(`flex w-full flex-col gap-2 sm:w-56 lg:w-72 2xl:w-80`,l&&`hidden sm:flex`),children:[(0,Z.jsxs)(`div`,{className:`sticky top-0 z-10 -mx-4 bg-background px-4 pb-3 shadow-md sm:static sm:z-auto sm:mx-0 sm:p-0 sm:shadow-none`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between py-2`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(`h1`,{className:`font-bold text-2xl`,children:d()}),(0,Z.jsx)(ye,{size:20})]}),(0,Z.jsx)(Y,{variant:`secondary`,children:he({count:String(e.length)})})]}),(0,Z.jsxs)(`div`,{className:`relative block`,children:[(0,Z.jsx)(Qe,{className:`pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground`}),(0,Z.jsx)(J,{className:`pl-9`,onChange:e=>i(e.target.value),placeholder:n(),value:r})]})]}),(0,Z.jsxs)(xe,{className:`-mx-3 h-full overflow-auto p-3`,children:[(0,Z.jsx)($,{active:a===`overview`,onClick:()=>o(`overview`),children:(0,Z.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`div`,{className:`font-medium`,children:u()}),(0,Z.jsx)(`div`,{className:`mt-1 text-muted-foreground text-xs`,children:ge({chains:String(e.length),tokens:String(c)})})]}),(0,Z.jsx)(be,{className:`mt-0.5 size-4 text-muted-foreground`})]})}),(0,Z.jsx)(L,{className:`my-1`}),t?_t.map(e=>(0,Z.jsxs)(`div`,{className:`px-3 py-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Z.jsx)(I,{className:`h-4 w-24`}),(0,Z.jsx)(I,{className:`h-5 w-9 rounded-full`})]}),(0,Z.jsxs)(`div`,{className:`mt-2 flex items-center justify-between gap-2`,children:[(0,Z.jsx)(I,{className:`h-3 w-28`}),(0,Z.jsx)(I,{className:`h-5 w-12 rounded-full`})]})]},e)):e.map((t,n)=>(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)($,{active:a===t.network,onClick:()=>o(t.network??`overview`),children:(0,Z.jsx)(`div`,{className:`flex items-start gap-3`,children:(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Z.jsx)(`div`,{className:`min-w-0`,children:(0,Z.jsx)(`div`,{className:`truncate font-medium`,children:t.display_name})}),(0,Z.jsx)(R,{checked:t.enabled===!0,onCheckedChange:e=>s(t,e),onClick:e=>e.stopPropagation()})]}),(0,Z.jsxs)(`div`,{className:`mt-1 flex items-center justify-between gap-2`,children:[(0,Z.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:y()}),(0,Z.jsx)(Y,{className:`shrink-0 text-xs`,variant:`outline`,children:t.network})]})]})})}),n{let t=u.trim().toLowerCase();return t?e.filter(e=>[e.display_name,e.network].filter(Boolean).some(e=>String(e).toLowerCase().includes(t))):e},[e,u]),w=(0,X.useMemo)(()=>f===`overview`?r:r.filter(e=>e.network===f),[r,f]);async function T(){await Promise.all([A.invalidateQueries({queryKey:[`get`,`/admin/api/v1/chains`]}),A.invalidateQueries({queryKey:[`get`,`/admin/api/v1/chain-tokens`]})])}async function oe(e,t){e.network&&(await l.mutateAsync({params:{path:{network:e.network}},body:{display_name:e.display_name,enabled:t,min_confirmations:e.min_confirmations,scan_interval_sec:e.scan_interval_sec}}),B.success(re({status:t?ie():ae()})),await T())}async function se(e,t){if(e===`edit`||e===`delete`){y(!0);return}if(e===`enable`||e===`disable`){if(!t.id)return;await c.mutateAsync({params:{path:{id:t.id}},body:{enabled:e===`enable`}}),B.success(ce()),await T();return}}let E=m!==null,D=t||i;return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(Ge,{fixed:!0}),(0,Z.jsx)(Ke,{fixed:!0,children:(0,Z.jsxs)(`section`,{className:`flex h-full gap-6`,children:[(0,Z.jsx)(vt,{chains:C,hiddenOnMobile:E,isLoading:D,keyword:u,onKeywordChange:d,onSelect:e=>{p(e),h(e)},onToggle:oe,selectedPanel:f,totalTokens:r.length}),(0,Z.jsx)(`div`,{className:M(`absolute inset-0 start-full z-50 hidden w-full flex-1 flex-col border bg-background shadow-xs sm:static sm:z-auto sm:flex sm:min-w-0 sm:rounded-md sm:border-0 sm:bg-transparent sm:shadow-none`,E&&`inset-s-0 flex`),children:(0,Z.jsx)(yt,{isLoading:D,onAction:se,onBack:()=>h(null),onCreate:()=>y(!0),onRefresh:()=>{n(),a()},tokens:w})})]})}),(0,Z.jsx)(dt,{chains:e.filter(e=>!!e.network).map(e=>({network:e.network,display_name:e.display_name})),currentRow:x,defaultNetwork:b,onCreate:async e=>{await o.mutateAsync({body:{network:e.network,symbol:e.symbol,contract_address:e.contract_address||void 0,decimals:e.decimals,min_amount:e.min_amount,enabled:e.enabled}})},onOpenChange:e=>{_(e),e||(S(null),te(``))},onSuccess:async()=>{B.success(x?ne():ee()),await T()},onUpdate:async e=>{x?.id&&await s.mutateAsync({params:{path:{id:x.id}},body:{contract_address:e.contract_address||void 0,decimals:e.decimals,min_amount:e.min_amount,enabled:e.enabled}})},open:g}),(0,Z.jsx)(lt,{onOpenChange:y,open:v})]})}var xt=bt;export{xt as component}; \ No newline at end of file diff --git a/src/www/assets/chains-store-DnSbj0Yy.js b/src/www/assets/chains-store-DnSbj0Yy.js new file mode 100644 index 0000000..29024f4 --- /dev/null +++ b/src/www/assets/chains-store-DnSbj0Yy.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";import{a as n,d as r,u as i}from"./auth-store-D_jr_Pei.js";import{t as a}from"./createLucideIcon-DMX28cCu.js";var o=a(`pen-line`,[[`path`,{d:`M13 21h8`,key:`1jsn5i`}],[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}]]),s=t(e(),1),c=new i({chains:[],loading:!1});function l(e){c.setState(t=>({...t,chains:e}))}function u(e){c.setState(t=>({...t,loading:e}))}function d(){let e=r(c,e=>e.chains),t=r(c,e=>e.loading),i=n.useQuery(`get`,`/admin/api/v1/chains`);return(0,s.useEffect)(()=>{u(i.isLoading)},[i.isLoading]),(0,s.useEffect)(()=>{i.data?.data&&l(i.data.data)},[i.data?.data]),{chains:e,loading:t,refetch:i.refetch}}export{o as n,d as t}; \ No newline at end of file diff --git a/src/www/assets/check-DH6qIczM.js b/src/www/assets/check-DH6qIczM.js new file mode 100644 index 0000000..bfc879a --- /dev/null +++ b/src/www/assets/check-DH6qIczM.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/checkbox-D_bL2Pt-.js b/src/www/assets/checkbox-D_bL2Pt-.js new file mode 100644 index 0000000..618fb02 --- /dev/null +++ b/src/www/assets/checkbox-D_bL2Pt-.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{d as i,i as a}from"./button-D-oR8d6w.js";import{a as o,r as s,t as c}from"./dist-DzENW8NP.js";import{t as l}from"./dist-BZg_Jfik.js";import{t as u}from"./dist-QGW08nls.js";import{t as d}from"./dist-Bh3bGrZa.js";import{t as f}from"./check-DH6qIczM.js";var p=n(e(),1),m=t(),h=`Checkbox`,[g,_]=o(h),[v,y]=g(h);function b(e){let{__scopeCheckbox:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:l,required:u,value:d=`on`,internal_do_not_use_render:f}=e,[g,_]=c({prop:n,defaultProp:i??!1,onChange:l,caller:h}),[y,b]=p.useState(null),[x,S]=p.useState(null),C=p.useRef(!1),w=y?!!o||!!y.closest(`form`):!0,T={checked:g,disabled:a,setChecked:_,control:y,setControl:b,name:s,form:o,value:d,hasConsumerStoppedPropagationRef:C,required:u,defaultChecked:k(i)?!1:i,isFormControl:w,bubbleInput:x,setBubbleInput:S};return(0,m.jsx)(v,{scope:t,...T,children:O(f)?f(T):r})}var x=`CheckboxTrigger`,S=p.forwardRef(({__scopeCheckbox:e,onKeyDown:t,onClick:n,...a},o)=>{let{control:c,value:l,disabled:u,checked:d,required:f,setControl:h,setChecked:g,hasConsumerStoppedPropagationRef:_,isFormControl:v,bubbleInput:b}=y(x,e),S=i(o,h),C=p.useRef(d);return p.useEffect(()=>{let e=c?.form;if(e){let t=()=>g(C.current);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[c,g]),(0,m.jsx)(r.button,{type:`button`,role:`checkbox`,"aria-checked":k(d)?`mixed`:d,"aria-required":f,"data-state":A(d),"data-disabled":u?``:void 0,disabled:u,value:l,...a,ref:S,onKeyDown:s(t,e=>{e.key===`Enter`&&e.preventDefault()}),onClick:s(n,e=>{g(e=>k(e)?!0:!e),b&&v&&(_.current=e.isPropagationStopped(),_.current||e.stopPropagation())})})});S.displayName=x;var C=p.forwardRef((e,t)=>{let{__scopeCheckbox:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,m.jsx)(b,{__scopeCheckbox:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(S,{...d,ref:t,__scopeCheckbox:n}),e&&(0,m.jsx)(D,{__scopeCheckbox:n})]})})});C.displayName=h;var w=`CheckboxIndicator`,T=p.forwardRef((e,t)=>{let{__scopeCheckbox:n,forceMount:i,...a}=e,o=y(w,n);return(0,m.jsx)(l,{present:i||k(o.checked)||o.checked===!0,children:(0,m.jsx)(r.span,{"data-state":A(o.checked),"data-disabled":o.disabled?``:void 0,...a,ref:t,style:{pointerEvents:`none`,...e.style}})})});T.displayName=w;var E=`CheckboxBubbleInput`,D=p.forwardRef(({__scopeCheckbox:e,...t},n)=>{let{control:a,hasConsumerStoppedPropagationRef:o,checked:s,defaultChecked:c,required:l,disabled:f,name:h,value:g,form:_,bubbleInput:v,setBubbleInput:b}=y(E,e),x=i(n,b),S=u(s),C=d(a);p.useEffect(()=>{let e=v;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!o.current;if(S!==s&&n){let t=new Event(`click`,{bubbles:r});e.indeterminate=k(s),n.call(e,k(s)?!1:s),e.dispatchEvent(t)}},[v,S,s,o]);let w=p.useRef(k(s)?!1:s);return(0,m.jsx)(r.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:c??w.current,required:l,disabled:f,name:h,value:g,form:_,...t,tabIndex:-1,ref:x,style:{...t.style,...C,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})});D.displayName=E;function O(e){return typeof e==`function`}function k(e){return e===`indeterminate`}function A(e){return k(e)?`indeterminate`:e?`checked`:`unchecked`}function j({className:e,...t}){return(0,m.jsx)(C,{className:a(`peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs outline-none transition-shadow focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:data-[state=checked]:bg-primary dark:aria-invalid:ring-destructive/40`,e),"data-slot":`checkbox`,...t,children:(0,m.jsx)(T,{className:`grid place-content-center text-current transition-none`,"data-slot":`checkbox-indicator`,children:(0,m.jsx)(f,{className:`size-3.5`})})})}export{j as t}; \ No newline at end of file diff --git a/src/www/assets/chevron-down-uSXLUPEl.js b/src/www/assets/chevron-down-uSXLUPEl.js new file mode 100644 index 0000000..44768ac --- /dev/null +++ b/src/www/assets/chevron-down-uSXLUPEl.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/chevrons-up-down-C1Q-XIDV.js b/src/www/assets/chevrons-up-down-C1Q-XIDV.js new file mode 100644 index 0000000..8b3a4f7 --- /dev/null +++ b/src/www/assets/chevrons-up-down-C1Q-XIDV.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`chevrons-up-down`,[[`path`,{d:`m7 15 5 5 5-5`,key:`1hf1tw`}],[`path`,{d:`m7 9 5-5 5 5`,key:`sgt6xg`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/circle-check-nos3opMb.js b/src/www/assets/circle-check-nos3opMb.js new file mode 100644 index 0000000..821db1b --- /dev/null +++ b/src/www/assets/circle-check-nos3opMb.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/clock-3-TWJWgy8T.js b/src/www/assets/clock-3-TWJWgy8T.js new file mode 100644 index 0000000..fbe87a8 --- /dev/null +++ b/src/www/assets/clock-3-TWJWgy8T.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`clock-3`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6h4`,key:`135r8i`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/coming-soon-dialog-DIE5FD4U.js b/src/www/assets/coming-soon-dialog-DIE5FD4U.js new file mode 100644 index 0000000..ccf02a4 --- /dev/null +++ b/src/www/assets/coming-soon-dialog-DIE5FD4U.js @@ -0,0 +1 @@ +import{Fu as e,Nu as t,Pu as n,Qu as r}from"./messages-BOl-zx8S.js";import{d as i,l as a,m as o,p as s,u as c}from"./command-yFHhtFiR.js";import{t as l}from"./telescope-CH8QonjS.js";var u=r();function d({open:r,onOpenChange:d}){return(0,u.jsx)(a,{onOpenChange:d,open:r,children:(0,u.jsx)(c,{className:`sm:max-w-sm`,children:(0,u.jsxs)(s,{className:`items-center text-center`,children:[(0,u.jsx)(l,{className:`mb-2 size-12 text-muted-foreground`}),(0,u.jsx)(o,{children:e()}),(0,u.jsxs)(i,{children:[n(),(0,u.jsx)(`br`,{}),(0,u.jsx)(`p`,{className:`mt-2 text-center`,children:t()})]})]})})})}export{d as t}; \ No newline at end of file diff --git a/src/www/assets/command-yFHhtFiR.js b/src/www/assets/command-yFHhtFiR.js new file mode 100644 index 0000000..834a041 --- /dev/null +++ b/src/www/assets/command-yFHhtFiR.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{i,t as a,u as o}from"./button-D-oR8d6w.js";import{n as s}from"./dist-oydJxq9L.js";import{a as c,i as l,n as u,o as d,r as f,s as p,t as m}from"./dist-C3yOG_Qz.js";import{t as h}from"./createLucideIcon-DMX28cCu.js";var g=h(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),_=h(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),v=1,y=.9,b=.8,ee=.17,x=.1,S=.999,C=.9999,w=.99,T=/[\\\/_+.#"@\[\(\{&]/,E=/[\\\/_+.#"@\[\(\{&]/g,D=/[\s-]/,O=/[\s-]/g;function k(e,t,n,r,i,a,o){if(a===t.length)return i===e.length?v:w;var s=`${i},${a}`;if(o[s]!==void 0)return o[s];for(var c=r.charAt(a),l=n.indexOf(c,i),u=0,d,f,p,m;l>=0;)d=k(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=v:T.test(e.charAt(l-1))?(d*=b,p=e.slice(i,l-1).match(E),p&&i>0&&(d*=S**+p.length)):D.test(e.charAt(l-1))?(d*=y,m=e.slice(i,l-1).match(O),m&&i>0&&(d*=S**+m.length)):(d*=ee,i>0&&(d*=S**+(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=C)),(dd&&(d=f*x)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function A(e){return e.toLowerCase().replace(O,` `)}function j(e,t,n){return e=n&&n.length>0?`${e+` `+n.join(` `)}`:e,k(e,t,A(e),A(t),0,0,{})}var M=n(e(),1),N=`[cmdk-group=""]`,P=`[cmdk-group-items=""]`,te=`[cmdk-group-heading=""]`,F=`[cmdk-item=""]`,I=`${F}:not([aria-disabled="true"])`,L=`cmdk-item-select`,R=`data-value`,ne=(e,t,n)=>j(e,t,n),z=M.createContext(void 0),B=()=>M.useContext(z),V=M.createContext(void 0),H=()=>M.useContext(V),U=M.createContext(void 0),W=M.forwardRef((e,t)=>{let n=X(()=>({search:``,value:e.value??e.defaultValue??``,selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),i=X(()=>new Set),a=X(()=>new Map),o=X(()=>new Map),c=X(()=>new Set),l=ue(e),{label:u,children:d,value:f,onValueChange:p,filter:m,shouldFilter:h,loop:g,disablePointerSelection:_=!1,vimBindings:v=!0,...y}=e,b=s(),ee=s(),x=s(),S=M.useRef(null),C=fe();Y(()=>{if(f!==void 0){let e=f.trim();n.current.value=e,w.emit()}},[f]),Y(()=>{C(6,A)},[]);let w=M.useMemo(()=>({subscribe:e=>(c.current.add(e),()=>c.current.delete(e)),snapshot:()=>n.current,setState:(e,t,r)=>{var i,a,o;if(!Object.is(n.current[e],t)){if(n.current[e]=t,e===`search`)k(),D(),C(1,O);else if(e===`value`){if(document.activeElement.hasAttribute(`cmdk-input`)||document.activeElement.hasAttribute(`cmdk-root`)){let e=document.getElementById(x);e?e.focus():(i=document.getElementById(b))==null||i.focus()}if(C(7,()=>{n.current.selectedItemId=j()?.id,w.emit()}),r||C(5,A),l.current?.value!==void 0){let e=t??``;(o=(a=l.current).onValueChange)==null||o.call(a,e);return}}w.emit()}},emit:()=>{c.current.forEach(e=>e())}}),[]),T=M.useMemo(()=>({value:(e,t,r)=>{t!==o.current.get(e)?.value&&(o.current.set(e,{value:t,keywords:r}),n.current.filtered.items.set(e,E(t,r)),C(2,()=>{D(),w.emit()}))},item:(e,t)=>(i.current.add(e),t&&(a.current.has(t)?a.current.get(t).add(e):a.current.set(t,new Set([e]))),C(3,()=>{k(),D(),n.current.value||O(),w.emit()}),()=>{o.current.delete(e),i.current.delete(e),n.current.filtered.items.delete(e);let t=j();C(4,()=>{k(),t?.getAttribute(`id`)===e&&O(),w.emit()})}),group:e=>(a.current.has(e)||a.current.set(e,new Set),()=>{o.current.delete(e),a.current.delete(e)}),filter:()=>l.current.shouldFilter,label:u||e[`aria-label`],getDisablePointerSelection:()=>l.current.disablePointerSelection,listId:b,inputId:x,labelId:ee,listInnerRef:S}),[]);function E(e,t){let r=l.current?.filter??ne;return e?r(e,n.current.search,t):0}function D(){if(!n.current.search||l.current.shouldFilter===!1)return;let e=n.current.filtered.items,t=[];n.current.filtered.groups.forEach(n=>{let r=a.current.get(n),i=0;r.forEach(t=>{let n=e.get(t);i=Math.max(n,i)}),t.push([n,i])});let r=S.current;B().sort((t,n)=>{let r=t.getAttribute(`id`),i=n.getAttribute(`id`);return(e.get(i)??0)-(e.get(r)??0)}).forEach(e=>{let t=e.closest(P);t?t.appendChild(e.parentElement===t?e:e.closest(`${P} > *`)):r.appendChild(e.parentElement===r?e:e.closest(`${P} > *`))}),t.sort((e,t)=>t[1]-e[1]).forEach(e=>{let t=S.current?.querySelector(`${N}[${R}="${encodeURIComponent(e[0])}"]`);t?.parentElement.appendChild(t)})}function O(){let e=B().find(e=>e.getAttribute(`aria-disabled`)!==`true`)?.getAttribute(R);w.setState(`value`,e||void 0)}function k(){if(!n.current.search||l.current.shouldFilter===!1){n.current.filtered.count=i.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let t of i.current){let r=E(o.current.get(t)?.value??``,o.current.get(t)?.keywords??[]);n.current.filtered.items.set(t,r),r>0&&e++}for(let[e,t]of a.current)for(let r of t)if(n.current.filtered.items.get(r)>0){n.current.filtered.groups.add(e);break}n.current.filtered.count=e}function A(){var e;let t=j();t&&(t.parentElement?.firstChild===t&&((e=t.closest(N)?.querySelector(te))==null||e.scrollIntoView({block:`nearest`})),t.scrollIntoView({block:`nearest`}))}function j(){return S.current?.querySelector(`${F}[aria-selected="true"]`)}function B(){return Array.from(S.current?.querySelectorAll(I)||[])}function H(e){let t=B()[e];t&&w.setState(`value`,t.getAttribute(R))}function U(e){var t;let n=j(),r=B(),i=r.findIndex(e=>e===n),a=r[i+e];(t=l.current)!=null&&t.loop&&(a=i+e<0?r[r.length-1]:i+e===r.length?r[0]:r[i+e]),a&&w.setState(`value`,a.getAttribute(R))}function W(e){let t=j()?.closest(N),n;for(;t&&!n;)t=e>0?ce(t,N):le(t,N),n=t?.querySelector(I);n?w.setState(`value`,n.getAttribute(R)):U(e)}let G=()=>H(B().length-1),K=e=>{e.preventDefault(),e.metaKey?G():e.altKey?W(1):U(1)},q=e=>{e.preventDefault(),e.metaKey?H(0):e.altKey?W(-1):U(-1)};return M.createElement(r.div,{ref:t,tabIndex:-1,...y,"cmdk-root":``,onKeyDown:e=>{var t;(t=y.onKeyDown)==null||t.call(y,e);let n=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||n))switch(e.key){case`n`:case`j`:v&&e.ctrlKey&&K(e);break;case`ArrowDown`:K(e);break;case`p`:case`k`:v&&e.ctrlKey&&q(e);break;case`ArrowUp`:q(e);break;case`Home`:e.preventDefault(),H(0);break;case`End`:e.preventDefault(),G();break;case`Enter`:{e.preventDefault();let t=j();if(t){let e=new Event(L);t.dispatchEvent(e)}}}}},M.createElement(`label`,{"cmdk-label":``,htmlFor:T.inputId,id:T.labelId,style:me},u),Q(e,e=>M.createElement(V.Provider,{value:w},M.createElement(z.Provider,{value:T},e))))}),G=M.forwardRef((e,t)=>{let n=s(),i=M.useRef(null),a=M.useContext(U),c=B(),l=ue(e),u=l.current?.forceMount??a?.forceMount;Y(()=>{if(!u)return c.item(n,a?.id)},[u]);let d=de(n,i,[e.value,e.children,i],e.keywords),f=H(),p=Z(e=>e.value&&e.value===d.current),m=Z(e=>u||c.filter()===!1?!0:e.search?e.filtered.items.get(n)>0:!0);M.useEffect(()=>{let t=i.current;if(!(!t||e.disabled))return t.addEventListener(L,h),()=>t.removeEventListener(L,h)},[m,e.onSelect,e.disabled]);function h(){var e,t;g(),(t=(e=l.current).onSelect)==null||t.call(e,d.current)}function g(){f.setState(`value`,d.current,!0)}if(!m)return null;let{disabled:_,value:v,onSelect:y,forceMount:b,keywords:ee,...x}=e;return M.createElement(r.div,{ref:o(i,t),...x,id:n,"cmdk-item":``,role:`option`,"aria-disabled":!!_,"aria-selected":!!p,"data-disabled":!!_,"data-selected":!!p,onPointerMove:_||c.getDisablePointerSelection()?void 0:g,onClick:_?void 0:h},e.children)}),K=M.forwardRef((e,t)=>{let{heading:n,children:i,forceMount:a,...c}=e,l=s(),u=M.useRef(null),d=M.useRef(null),f=s(),p=B(),m=Z(e=>a||p.filter()===!1?!0:e.search?e.filtered.groups.has(l):!0);Y(()=>p.group(l),[]),de(l,u,[e.value,e.heading,d]);let h=M.useMemo(()=>({id:l,forceMount:a}),[a]);return M.createElement(r.div,{ref:o(u,t),...c,"cmdk-group":``,role:`presentation`,hidden:m?void 0:!0},n&&M.createElement(`div`,{ref:d,"cmdk-group-heading":``,"aria-hidden":!0,id:f},n),Q(e,e=>M.createElement(`div`,{"cmdk-group-items":``,role:`group`,"aria-labelledby":n?f:void 0},M.createElement(U.Provider,{value:h},e))))}),q=M.forwardRef((e,t)=>{let{alwaysRender:n,...i}=e,a=M.useRef(null),s=Z(e=>!e.search);return!n&&!s?null:M.createElement(r.div,{ref:o(a,t),...i,"cmdk-separator":``,role:`separator`})}),re=M.forwardRef((e,t)=>{let{onValueChange:n,...i}=e,a=e.value!=null,o=H(),s=Z(e=>e.search),c=Z(e=>e.selectedItemId),l=B();return M.useEffect(()=>{e.value!=null&&o.setState(`search`,e.value)},[e.value]),M.createElement(r.input,{ref:t,...i,"cmdk-input":``,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,"aria-autocomplete":`list`,role:`combobox`,"aria-expanded":!0,"aria-controls":l.listId,"aria-labelledby":l.labelId,"aria-activedescendant":c,id:l.inputId,type:`text`,value:a?e.value:s,onChange:e=>{a||o.setState(`search`,e.target.value),n?.(e.target.value)}})}),ie=M.forwardRef((e,t)=>{let{children:n,label:i=`Suggestions`,...a}=e,s=M.useRef(null),c=M.useRef(null),l=Z(e=>e.selectedItemId),u=B();return M.useEffect(()=>{if(c.current&&s.current){let e=c.current,t=s.current,n,r=new ResizeObserver(()=>{n=requestAnimationFrame(()=>{let n=e.offsetHeight;t.style.setProperty(`--cmdk-list-height`,n.toFixed(1)+`px`)})});return r.observe(e),()=>{cancelAnimationFrame(n),r.unobserve(e)}}},[]),M.createElement(r.div,{ref:o(s,t),...a,"cmdk-list":``,role:`listbox`,tabIndex:-1,"aria-activedescendant":l,"aria-label":i,id:u.listId},Q(e,e=>M.createElement(`div`,{ref:o(c,u.listInnerRef),"cmdk-list-sizer":``},e)))}),ae=M.forwardRef((e,t)=>{let{open:n,onOpenChange:r,overlayClassName:i,contentClassName:a,container:o,...s}=e;return M.createElement(d,{open:n,onOpenChange:r},M.createElement(c,{container:o},M.createElement(l,{"cmdk-overlay":``,className:i}),M.createElement(u,{"aria-label":e.label,"cmdk-dialog":``,className:a},M.createElement(W,{ref:t,...s}))))}),oe=M.forwardRef((e,t)=>Z(e=>e.filtered.count===0)?M.createElement(r.div,{ref:t,...e,"cmdk-empty":``,role:`presentation`}):null),se=M.forwardRef((e,t)=>{let{progress:n,children:i,label:a=`Loading...`,...o}=e;return M.createElement(r.div,{ref:t,...o,"cmdk-loading":``,role:`progressbar`,"aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":a},Q(e,e=>M.createElement(`div`,{"aria-hidden":!0},e)))}),J=Object.assign(W,{List:ie,Item:G,Input:re,Group:K,Separator:q,Dialog:ae,Empty:oe,Loading:se});function ce(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return n;n=n.nextElementSibling}}function le(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling}}function ue(e){let t=M.useRef(e);return Y(()=>{t.current=e}),t}var Y=typeof window>`u`?M.useEffect:M.useLayoutEffect;function X(e){let t=M.useRef();return t.current===void 0&&(t.current=e()),t}function Z(e){let t=H(),n=()=>e(t.snapshot());return M.useSyncExternalStore(t.subscribe,n,n)}function de(e,t,n,r=[]){let i=M.useRef(),a=B();return Y(()=>{var o;let s=(()=>{for(let e of n){if(typeof e==`string`)return e.trim();if(typeof e==`object`&&`current`in e)return e.current?e.current.textContent?.trim():i.current}})(),c=r.map(e=>e.trim());a.value(e,s,c),(o=t.current)==null||o.setAttribute(R,s),i.current=s}),i}var fe=()=>{let[e,t]=M.useState(),n=X(()=>new Map);return Y(()=>{n.current.forEach(e=>e()),n.current=new Map},[e]),(e,r)=>{n.current.set(e,r),t({})}};function pe(e){let t=e.type;return typeof t==`function`?t(e.props):`render`in t?t.render(e.props):e}function Q({asChild:e,children:t},n){return e&&M.isValidElement(t)?M.cloneElement(pe(t),{ref:t.ref},n(t.props.children)):n(t)}var me={position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,borderWidth:`0`},$=t();function he({...e}){return(0,$.jsx)(d,{"data-slot":`dialog`,...e})}function ge({...e}){return(0,$.jsx)(c,{"data-slot":`dialog-portal`,...e})}function _e({className:e,...t}){return(0,$.jsx)(l,{className:i(`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=open]:animate-in`,e),"data-slot":`dialog-overlay`,...t})}function ve({className:e,children:t,showCloseButton:n=!0,...r}){return(0,$.jsxs)(ge,{"data-slot":`dialog-portal`,children:[(0,$.jsx)(_e,{}),(0,$.jsxs)(u,{className:i(`data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg outline-none duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-lg`,e),"data-slot":`dialog-content`,...r,children:[t,n&&(0,$.jsxs)(m,{className:`absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0`,"data-slot":`dialog-close`,children:[(0,$.jsx)(_,{}),(0,$.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function ye({className:e,...t}){return(0,$.jsx)(`div`,{className:i(`flex flex-col gap-2 text-center sm:text-left`,e),"data-slot":`dialog-header`,...t})}function be({className:e,showCloseButton:t=!1,children:n,...r}){return(0,$.jsxs)(`div`,{className:i(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,e),"data-slot":`dialog-footer`,...r,children:[n,t&&(0,$.jsx)(m,{asChild:!0,children:(0,$.jsx)(a,{variant:`outline`,children:`Close`})})]})}function xe({className:e,...t}){return(0,$.jsx)(p,{className:i(`font-semibold text-lg leading-none`,e),"data-slot":`dialog-title`,...t})}function Se({className:e,...t}){return(0,$.jsx)(f,{className:i(`text-muted-foreground text-sm`,e),"data-slot":`dialog-description`,...t})}function Ce({className:e,...t}){return(0,$.jsx)(J,{className:i(`flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground`,e),"data-slot":`command`,...t})}function we({title:e=`Command Palette`,description:t=`Search for a command to run...`,children:n,className:r,showCloseButton:a=!0,...o}){return(0,$.jsxs)(he,{...o,children:[(0,$.jsxs)(ye,{className:`sr-only`,children:[(0,$.jsx)(xe,{children:e}),(0,$.jsx)(Se,{children:t})]}),(0,$.jsx)(ve,{className:i(`overflow-hidden p-0`,r),showCloseButton:a,children:(0,$.jsx)(Ce,{className:`**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5`,children:n})})]})}function Te({className:e,...t}){return(0,$.jsxs)(`div`,{className:`flex h-9 items-center gap-2 border-b px-3`,"data-slot":`command-input-wrapper`,children:[(0,$.jsx)(g,{className:`size-4 shrink-0 opacity-50`}),(0,$.jsx)(J.Input,{className:i(`flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50`,e),"data-slot":`command-input`,...t})]})}function Ee({className:e,...t}){return(0,$.jsx)(J.List,{className:i(`max-h-[300px] scroll-py-1 overflow-y-auto overflow-x-hidden`,e),"data-slot":`command-list`,...t})}function De({...e}){return(0,$.jsx)(J.Empty,{className:`py-6 text-center text-sm`,"data-slot":`command-empty`,...e})}function Oe({className:e,...t}){return(0,$.jsx)(J.Group,{className:i(`overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:text-xs`,e),"data-slot":`command-group`,...t})}function ke({className:e,...t}){return(0,$.jsx)(J.Separator,{className:i(`-mx-1 h-px bg-border`,e),"data-slot":`command-separator`,...t})}function Ae({className:e,...t}){return(0,$.jsx)(J.Item,{className:i(`relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0`,e),"data-slot":`command-item`,...t})}export{Te as a,ke as c,Se as d,be as f,g,_ as h,Oe as i,he as l,xe as m,we as n,Ae as o,ye as p,De as r,Ee as s,Ce as t,ve as u}; \ No newline at end of file diff --git a/src/www/assets/confirm-dialog-DyK21C4Z.js b/src/www/assets/confirm-dialog-DyK21C4Z.js new file mode 100644 index 0000000..ae59ebf --- /dev/null +++ b/src/www/assets/confirm-dialog-DyK21C4Z.js @@ -0,0 +1,7 @@ +import{$u as e,Ku as t,Qu as n,nd as r,qu as i}from"./messages-BOl-zx8S.js";import{d as a,i as o,l as s,t as c}from"./button-D-oR8d6w.js";import{a as l,r as u}from"./dist-DzENW8NP.js";import{a as d,c as f,i as p,l as m,n as h,o as g,r as _,s as ee,t as v,u as y}from"./dist-C3yOG_Qz.js";var b=r(e(),1),x=n(),S=`AlertDialog`,[C,te]=l(S,[y]),w=y(),T=e=>{let{__scopeAlertDialog:t,...n}=e,r=w(t);return(0,x.jsx)(g,{...r,...n,modal:!0})};T.displayName=S;var E=`AlertDialogTrigger`,D=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(f,{...i,...r,ref:t})});D.displayName=E;var O=`AlertDialogPortal`,k=e=>{let{__scopeAlertDialog:t,...n}=e,r=w(t);return(0,x.jsx)(d,{...r,...n})};k.displayName=O;var A=`AlertDialogOverlay`,j=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(p,{...i,...r,ref:t})});j.displayName=A;var M=`AlertDialogContent`,[N,P]=C(M),F=s(`AlertDialogContent`),I=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,children:r,...i}=e,o=w(n),s=b.useRef(null),c=a(t,s),l=b.useRef(null);return(0,x.jsx)(m,{contentName:M,titleName:L,docsSlug:`alert-dialog`,children:(0,x.jsx)(N,{scope:n,cancelRef:l,children:(0,x.jsxs)(h,{role:`alertdialog`,...o,...i,ref:c,onOpenAutoFocus:u(i.onOpenAutoFocus,e=>{e.preventDefault(),l.current?.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,x.jsx)(F,{children:r}),(0,x.jsx)(G,{contentRef:s})]})})})});I.displayName=M;var L=`AlertDialogTitle`,R=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(ee,{...i,...r,ref:t})});R.displayName=L;var z=`AlertDialogDescription`,B=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(_,{...i,...r,ref:t})});B.displayName=z;var V=`AlertDialogAction`,H=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(v,{...i,...r,ref:t})});H.displayName=V;var U=`AlertDialogCancel`,W=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=P(U,n),o=w(n),s=a(t,i);return(0,x.jsx)(v,{...o,...r,ref:s})});W.displayName=U;var G=({contentRef:e})=>{let t=`\`${M}\` requires a description for the component to be accessible for screen reader users. + +You can add a description to the \`${M}\` by passing a \`${z}\` component as a child, which also benefits sighted users by adding visible context to the dialog. + +Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${M}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. + +For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return b.useEffect(()=>{document.getElementById(e.current?.getAttribute(`aria-describedby`))||console.warn(t)},[t,e]),null},K=T,q=k,J=j,Y=I,X=W,Z=R,Q=B;function ne({...e}){return(0,x.jsx)(K,{"data-slot":`alert-dialog`,...e})}function re({...e}){return(0,x.jsx)(q,{"data-slot":`alert-dialog-portal`,...e})}function ie({className:e,...t}){return(0,x.jsx)(J,{className:o(`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=open]:animate-in`,e),"data-slot":`alert-dialog-overlay`,...t})}function ae({className:e,size:t=`default`,...n}){return(0,x.jsxs)(re,{children:[(0,x.jsx)(ie,{}),(0,x.jsx)(Y,{className:o(`group/alert-dialog-content data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=open]:animate-in data-[size=default]:sm:max-w-lg`,e),"data-size":t,"data-slot":`alert-dialog-content`,...n})]})}function oe({className:e,...t}){return(0,x.jsx)(`div`,{className:o(`grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,e),"data-slot":`alert-dialog-header`,...t})}function $({className:e,...t}){return(0,x.jsx)(`div`,{className:o(`flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,e),"data-slot":`alert-dialog-footer`,...t})}function se({className:e,...t}){return(0,x.jsx)(Z,{className:o(`font-semibold text-lg sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,e),"data-slot":`alert-dialog-title`,...t})}function ce({className:e,...t}){return(0,x.jsx)(Q,{className:o(`text-muted-foreground text-sm`,e),"data-slot":`alert-dialog-description`,...t})}function le({className:e,variant:t=`outline`,size:n=`default`,...r}){return(0,x.jsx)(c,{asChild:!0,size:n,variant:t,children:(0,x.jsx)(X,{className:o(e),"data-slot":`alert-dialog-cancel`,...r})})}function ue(e){let{title:n,desc:r,children:a,className:s,confirmText:l,cancelBtnText:u,destructive:d,isLoading:f,disabled:p=!1,form:m,handleConfirm:h,...g}=e;return(0,x.jsx)(ne,{...g,children:(0,x.jsxs)(ae,{className:o(s&&s),children:[(0,x.jsxs)(oe,{className:`text-start`,children:[(0,x.jsx)(se,{children:n}),(0,x.jsx)(ce,{asChild:!0,children:(0,x.jsx)(`div`,{children:r})})]}),a,(0,x.jsxs)($,{children:[(0,x.jsx)(le,{disabled:f,children:u??i()}),(0,x.jsx)(c,{disabled:p||f,form:m,onClick:h,type:m?`submit`:`button`,variant:d?`destructive`:`default`,children:l??t()})]})]})})}export{ue as t}; \ No newline at end of file diff --git a/src/www/assets/cookies-D0aVbsDr.js b/src/www/assets/cookies-D0aVbsDr.js new file mode 100644 index 0000000..c7421ec --- /dev/null +++ b/src/www/assets/cookies-D0aVbsDr.js @@ -0,0 +1 @@ +var e=3600*24*7;function t(e){typeof document<`u`&&(document.cookie=e)}function n(e){if(typeof document>`u`)return;let t=`; ${document.cookie}`.split(`; ${encodeURIComponent(e)}=`);if(t.length===2){let e=t.pop()?.split(`;`).shift();return e?decodeURIComponent(e):void 0}}function r(n,r,i=e){t(`${encodeURIComponent(n)}=${encodeURIComponent(r)}; path=/; max-age=${i}; SameSite=Lax`)}function i(e){t(`${encodeURIComponent(e)}=; path=/; max-age=0; SameSite=Lax`)}export{i as n,r,n as t}; \ No newline at end of file diff --git a/src/www/assets/copy-to-clipboard-DeFustsS.js b/src/www/assets/copy-to-clipboard-DeFustsS.js new file mode 100644 index 0000000..657b1e2 --- /dev/null +++ b/src/www/assets/copy-to-clipboard-DeFustsS.js @@ -0,0 +1 @@ +import{ed as e}from"./messages-BOl-zx8S.js";import{t}from"./createLucideIcon-DMX28cCu.js";var n=t(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),r=e(((e,t)=>{t.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],r=0;r{var n=r(),i={"text/plain":`Text`,"text/html":`Url`,default:`Text`},a=`Copy to clipboard: #{key}, Enter`;function o(e){var t=(/mac os x/i.test(navigator.userAgent)?`⌘`:`Ctrl`)+`+C`;return e.replace(/#{\s*key\s*}/g,t)}function s(e,t){var r,s,c,l,u,d,f=!1;t||={},r=t.debug||!1;try{if(c=n(),l=document.createRange(),u=document.getSelection(),d=document.createElement(`span`),d.textContent=e,d.ariaHidden=`true`,d.style.all=`unset`,d.style.position=`fixed`,d.style.top=0,d.style.clip=`rect(0, 0, 0, 0)`,d.style.whiteSpace=`pre`,d.style.webkitUserSelect=`text`,d.style.MozUserSelect=`text`,d.style.msUserSelect=`text`,d.style.userSelect=`text`,d.addEventListener(`copy`,function(n){if(n.stopPropagation(),t.format)if(n.preventDefault(),n.clipboardData===void 0){r&&console.warn(`unable to use e.clipboardData`),r&&console.warn(`trying IE specific stuff`),window.clipboardData.clearData();var a=i[t.format]||i.default;window.clipboardData.setData(a,e)}else n.clipboardData.clearData(),n.clipboardData.setData(t.format,e);t.onCopy&&(n.preventDefault(),t.onCopy(n.clipboardData))}),document.body.appendChild(d),l.selectNodeContents(d),u.addRange(l),!document.execCommand(`copy`))throw Error(`copy command was unsuccessful`);f=!0}catch(n){r&&console.error(`unable to copy using execCommand: `,n),r&&console.warn(`trying IE specific stuff`);try{window.clipboardData.setData(t.format||`text`,e),t.onCopy&&t.onCopy(window.clipboardData),f=!0}catch(n){r&&console.error(`unable to copy using clipboardData: `,n),r&&console.error(`falling back to prompt`),s=o(`message`in t?t.message:a),window.prompt(s,e)}}finally{u&&(typeof u.removeRange==`function`?u.removeRange(l):u.removeAllRanges()),d&&document.body.removeChild(d),c()}return f}t.exports=s}));export{n,i as t}; \ No newline at end of file diff --git a/src/www/assets/createLucideIcon-DMX28cCu.js b/src/www/assets/createLucideIcon-DMX28cCu.js new file mode 100644 index 0000000..03964b2 --- /dev/null +++ b/src/www/assets/createLucideIcon-DMX28cCu.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";var n=t(e()),r=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),i=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),a=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),o=e=>{let t=a(e);return t.charAt(0).toUpperCase()+t.slice(1)},s={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},c=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},l=(0,n.createContext)({}),u=()=>(0,n.useContext)(l),d=(0,n.forwardRef)(({color:e,size:t,strokeWidth:i,absoluteStrokeWidth:a,className:o=``,children:l,iconNode:d,...f},p)=>{let{size:m=24,strokeWidth:h=2,absoluteStrokeWidth:g=!1,color:_=`currentColor`,className:v=``}=u()??{},y=a??g?Number(i??h)*24/Number(t??m):i??h;return(0,n.createElement)(`svg`,{ref:p,...s,width:t??m??s.width,height:t??m??s.height,stroke:e??_,strokeWidth:y,className:r(`lucide`,v,o),...!l&&!c(f)&&{"aria-hidden":`true`},...f},[...d.map(([e,t])=>(0,n.createElement)(e,t)),...Array.isArray(l)?l:[l]])}),f=(e,t)=>{let a=(0,n.forwardRef)(({className:a,...s},c)=>(0,n.createElement)(d,{ref:c,iconNode:t,className:r(`lucide-${i(o(e))}`,`lucide-${e}`,a),...s}));return a.displayName=o(e),a};export{f as t}; \ No newline at end of file diff --git a/src/www/assets/dashboard-DETe9Zpn.js b/src/www/assets/dashboard-DETe9Zpn.js new file mode 100644 index 0000000..49797ed --- /dev/null +++ b/src/www/assets/dashboard-DETe9Zpn.js @@ -0,0 +1,42 @@ +import{$l as e,$o as t,$u as n,As as r,Bs as i,Cs as a,Ds as o,Es as s,Fs as c,Gs as l,Hs as u,Is as d,Jl as f,Jo as p,Js as m,Ks as h,Ls as g,Ms as _,Ns as v,Os as y,Ps as b,Ql as x,Qo as S,Qu as C,Rs as w,Ss as T,Ts as E,Us as D,Vs as O,Ws as k,Xl as ee,Xo as te,Xs as A,Yl as j,Yo as ne,Ys as re,Yu as ie,Zl as ae,Zo as oe,_s as se,as as ce,bs as le,cs as ue,ds as de,ed as M,es as fe,eu as pe,fs as me,gs as he,hs as ge,is as _e,js as ve,ks as ye,ls as be,ms as xe,nd as Se,ns as Ce,os as we,ps as Te,qo as Ee,qs as De,rs as Oe,ss as ke,td as Ae,ts as je,us as Me,vs as Ne,ws as Pe,xs as Fe,ys as Ie,zs as Le}from"./messages-BOl-zx8S.js";import{a as Re}from"./auth-store-D_jr_Pei.js";import{t as ze}from"./with-selector-CQzBqoHI.js";import{t as Be}from"./useNavigate-BNrwOhV8.js";import{r as Ve,t as He}from"./dist-DJhZSa1-.js";import{a as Ue,c as We,o as Ge,s as Ke}from"./search-provider-D-fTfilE.js";import{i as N,n as qe,o as P,r as Je,t as Ye}from"./button-D-oR8d6w.js";import{i as Xe,n as Ze,r as Qe,t as $e}from"./tooltip-m5xmPGQe.js";import{a as et,r as tt,t as nt}from"./dist-DzENW8NP.js";import{n as rt,r as it,t as at}from"./dist-CT2DjA94.js";import{t as ot}from"./dist-BZg_Jfik.js";import{n as st}from"./dist-oydJxq9L.js";import{n as ct}from"./dist-BeVKhAtj.js";import{n as lt,t as ut}from"./skeleton-gJOqI-7w.js";import{n as dt,r as ft,t as pt}from"./popover-M5uqmgyK.js";import{t as mt}from"./createLucideIcon-DMX28cCu.js";import{a as ht,b as gt,c as _t,i as vt,l as yt,o as bt,s as xt,u as St}from"./data-table-C3uNvchK.js";import{t as Ct}from"./check-DH6qIczM.js";import{t as wt}from"./chevron-down-uSXLUPEl.js";import{t as Tt}from"./clock-3-TWJWgy8T.js";import{n as Et,t as Dt}from"./main-DvsnNI3V.js";import{c as Ot,i as kt,o as At,r as jt,s as Mt,t as Nt}from"./command-yFHhtFiR.js";import{t as Pt}from"./page-header-BRM1dngJ.js";import{t as Ft}from"./badge-D-FAREMY.js";import{a as It,i as Lt,n as Rt,r as zt,t as Bt}from"./card-LDLQwVm3.js";var F=Se(n(),1),I=C(),Vt=`Tabs`,[Ht,Ut]=et(Vt,[it]),Wt=it(),[Gt,Kt]=Ht(Vt),qt=F.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,onValueChange:i,defaultValue:a,orientation:o=`horizontal`,dir:s,activationMode:c=`automatic`,...l}=e,u=ct(s),[d,f]=nt({prop:r,onChange:i,defaultProp:a??``,caller:Vt});return(0,I.jsx)(Gt,{scope:n,baseId:st(),value:d,onValueChange:f,orientation:o,dir:u,activationMode:c,children:(0,I.jsx)(He.div,{dir:u,"data-orientation":o,...l,ref:t})})});qt.displayName=Vt;var Jt=`TabsList`,Yt=F.forwardRef((e,t)=>{let{__scopeTabs:n,loop:r=!0,...i}=e,a=Kt(Jt,n),o=Wt(n);return(0,I.jsx)(rt,{asChild:!0,...o,orientation:a.orientation,dir:a.dir,loop:r,children:(0,I.jsx)(He.div,{role:`tablist`,"aria-orientation":a.orientation,...i,ref:t})})});Yt.displayName=Jt;var Xt=`TabsTrigger`,Zt=F.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,disabled:i=!1,...a}=e,o=Kt(Xt,n),s=Wt(n),c=en(o.baseId,r),l=tn(o.baseId,r),u=r===o.value;return(0,I.jsx)(at,{asChild:!0,...s,focusable:!i,active:u,children:(0,I.jsx)(He.button,{type:`button`,role:`tab`,"aria-selected":u,"aria-controls":l,"data-state":u?`active`:`inactive`,"data-disabled":i?``:void 0,disabled:i,id:c,...a,ref:t,onMouseDown:tt(e.onMouseDown,e=>{!i&&e.button===0&&e.ctrlKey===!1?o.onValueChange(r):e.preventDefault()}),onKeyDown:tt(e.onKeyDown,e=>{[` `,`Enter`].includes(e.key)&&o.onValueChange(r)}),onFocus:tt(e.onFocus,()=>{let e=o.activationMode!==`manual`;!u&&!i&&e&&o.onValueChange(r)})})})});Zt.displayName=Xt;var Qt=`TabsContent`,$t=F.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,forceMount:i,children:a,...o}=e,s=Kt(Qt,n),c=en(s.baseId,r),l=tn(s.baseId,r),u=r===s.value,d=F.useRef(u);return F.useEffect(()=>{let e=requestAnimationFrame(()=>d.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,I.jsx)(ot,{present:i||u,children:({present:n})=>(0,I.jsx)(He.div,{"data-state":u?`active`:`inactive`,"data-orientation":s.orientation,role:`tabpanel`,"aria-labelledby":c,hidden:!n,id:l,tabIndex:0,...o,ref:t,style:{...e.style,animationDuration:d.current?`0s`:void 0},children:n&&a})})});$t.displayName=Qt;function en(e,t){return`${e}-trigger-${t}`}function tn(e,t){return`${e}-content-${t}`}var nn=qt,rn=Yt,an=Zt,on=mt(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),sn=mt(`calendar`,[[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`,key:`1hopcy`}],[`path`,{d:`M3 10h18`,key:`8toen8`}]]),cn=mt(`dollar-sign`,[[`line`,{x1:`12`,x2:`12`,y1:`2`,y2:`22`,key:`7eqyqh`}],[`path`,{d:`M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6`,key:`1b0p4s`}]]),ln=mt(`layers`,[[`path`,{d:`M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z`,key:`zw3jo`}],[`path`,{d:`M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12`,key:`1wduqc`}],[`path`,{d:`M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17`,key:`kqbvx6`}]]),un=mt(`list-filter`,[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]),dn=mt(`network`,[[`rect`,{x:`16`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`4q2zg0`}],[`rect`,{x:`2`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`8cvhb9`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`6`,rx:`1`,key:`1egb70`}],[`path`,{d:`M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3`,key:`1jsf9p`}],[`path`,{d:`M12 12V8`,key:`2874zd`}]]),fn=mt(`piggy-bank`,[[`path`,{d:`M11 17h3v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-3a3.16 3.16 0 0 0 2-2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1h-1a5 5 0 0 0-2-4V3a4 4 0 0 0-3.2 1.6l-.3.4H11a6 6 0 0 0-6 6v1a5 5 0 0 0 2 4v3a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z`,key:`1piglc`}],[`path`,{d:`M16 10h.01`,key:`1m94wz`}],[`path`,{d:`M2 8v1a2 2 0 0 0 2 2h1`,key:`1env43`}]]),pn=mt(`receipt-text`,[[`path`,{d:`M13 16H8`,key:`wsln4y`}],[`path`,{d:`M14 8H8`,key:`1l3xfs`}],[`path`,{d:`M16 12H8`,key:`1fr5h0`}],[`path`,{d:`M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z`,key:`ycz6yz`}]]),mn=mt(`trending-up`,[[`path`,{d:`M16 7h6v6`,key:`box55l`}],[`path`,{d:`m22 7-8.5 8.5-5-5L2 17`,key:`1t1m79`}]]),hn=365.2425,gn=6048e5,_n=864e5,vn=3600*24;vn*7,vn*hn/12*3;var yn=Symbol.for(`constructDateFrom`);function bn(e,t){return typeof e==`function`?e(t):e&&typeof e==`object`&&yn in e?e[yn](t):e instanceof Date?new e.constructor(t):new Date(t)}function L(e,t){return bn(t||e,e)}function xn(e,t,n){let r=L(e,n?.in);return isNaN(t)?bn(n?.in||e,NaN):(t&&r.setDate(r.getDate()+t),r)}function Sn(e,t,n){let r=L(e,n?.in);if(isNaN(t))return bn(n?.in||e,NaN);if(!t)return r;let i=r.getDate(),a=bn(n?.in||e,r.getTime());return a.setMonth(r.getMonth()+t+1,0),i>=a.getDate()?a:(r.setFullYear(a.getFullYear(),a.getMonth(),i),r)}var Cn={};function wn(){return Cn}function Tn(e,t){let n=wn(),r=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??n.weekStartsOn??n.locale?.options?.weekStartsOn??0,i=L(e,t?.in),a=i.getDay(),o=(a=a.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function On(e){let t=L(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),e-+n}function kn(e,...t){let n=bn.bind(null,e||t.find(e=>typeof e==`object`));return t.map(n)}function An(e,t){let n=L(e,t?.in);return n.setHours(0,0,0,0),n}function jn(e,t,n){let[r,i]=kn(n?.in,e,t),a=An(r),o=An(i),s=+a-On(a),c=+o-On(o);return Math.round((s-c)/_n)}function Mn(e,t){let n=Dn(e,t),r=bn(t?.in||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),En(r)}function Nn(e,t,n){return xn(e,t*7,n)}function Pn(e,t,n){return Sn(e,t*12,n)}function Fn(e,t){let n,r=t?.in;return e.forEach(e=>{!r&&typeof e==`object`&&(r=bn.bind(null,e));let t=L(e,r);(!n||n{!r&&typeof e==`object`&&(r=bn.bind(null,e));let t=L(e,r);(!n||n>t||isNaN(+t))&&(n=t)}),bn(r,n||NaN)}function Ln(e,t,n){let[r,i]=kn(n?.in,e,t);return+An(r)==+An(i)}function Rn(e){return e instanceof Date||typeof e==`object`&&Object.prototype.toString.call(e)===`[object Date]`}function zn(e){return!(!Rn(e)&&typeof e!=`number`||isNaN(+L(e)))}function Bn(e,t,n){let[r,i]=kn(n?.in,e,t),a=r.getFullYear()-i.getFullYear(),o=r.getMonth()-i.getMonth();return a*12+o}function Vn(e,t){let n=L(e,t?.in),r=n.getMonth();return n.setFullYear(n.getFullYear(),r+1,0),n.setHours(23,59,59,999),n}function Hn(e,t){let[n,r]=kn(e,t.start,t.end);return{start:n,end:r}}function Un(e,t){let{start:n,end:r}=Hn(t?.in,e),i=+n>+r,a=i?+n:+r,o=i?r:n;o.setHours(0,0,0,0),o.setDate(1);let s=t?.step??1;if(!s)return[];s<0&&(s=-s,i=!i);let c=[];for(;+o<=a;)c.push(bn(n,o)),o.setMonth(o.getMonth()+s);return i?c.reverse():c}function Wn(e,t){let n=L(e,t?.in);return n.setDate(1),n.setHours(0,0,0,0),n}function Gn(e,t){let n=L(e,t?.in),r=n.getFullYear();return n.setFullYear(r+1,0,0),n.setHours(23,59,59,999),n}function Kn(e,t){let n=L(e,t?.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function qn(e,t){let{start:n,end:r}=Hn(t?.in,e),i=+n>+r,a=i?+n:+r,o=i?r:n;o.setHours(0,0,0,0),o.setMonth(0,1);let s=t?.step??1;if(!s)return[];s<0&&(s=-s,i=!i);let c=[];for(;+o<=a;)c.push(bn(n,o)),o.setFullYear(o.getFullYear()+s);return i?c.reverse():c}function Jn(e,t){let n=wn(),r=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??n.weekStartsOn??n.locale?.options?.weekStartsOn??0,i=L(e,t?.in),a=i.getDay(),o=(a{let r,i=Xn[e];return r=typeof i==`string`?i:t===1?i.one:i.other.replace(`{{count}}`,t.toString()),n?.addSuffix?n.comparison&&n.comparison>0?`in `+r:r+` ago`:r};function Qn(e){return(t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var $n={date:Qn({formats:{full:`EEEE, MMMM do, y`,long:`MMMM do, y`,medium:`MMM d, y`,short:`MM/dd/yyyy`},defaultWidth:`full`}),time:Qn({formats:{full:`h:mm:ss a zzzz`,long:`h:mm:ss a z`,medium:`h:mm:ss a`,short:`h:mm a`},defaultWidth:`full`}),dateTime:Qn({formats:{full:`{{date}} 'at' {{time}}`,long:`{{date}} 'at' {{time}}`,medium:`{{date}}, {{time}}`,short:`{{date}}, {{time}}`},defaultWidth:`full`})},er={lastWeek:`'last' eeee 'at' p`,yesterday:`'yesterday at' p`,today:`'today at' p`,tomorrow:`'tomorrow at' p`,nextWeek:`eeee 'at' p`,other:`P`},tr=(e,t,n,r)=>er[e];function nr(e){return(t,n)=>{let r=n?.context?String(n.context):`standalone`,i;if(r===`formatting`&&e.formattingValues){let t=e.defaultFormattingWidth||e.defaultWidth,r=n?.width?String(n.width):t;i=e.formattingValues[r]||e.formattingValues[t]}else{let t=e.defaultWidth,r=n?.width?String(n.width):e.defaultWidth;i=e.values[r]||e.values[t]}let a=e.argumentCallback?e.argumentCallback(t):t;return i[a]}}var rr={ordinalNumber:(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+`st`;case 2:return n+`nd`;case 3:return n+`rd`}return n+`th`},era:nr({values:{narrow:[`B`,`A`],abbreviated:[`BC`,`AD`],wide:[`Before Christ`,`Anno Domini`]},defaultWidth:`wide`}),quarter:nr({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`Q1`,`Q2`,`Q3`,`Q4`],wide:[`1st quarter`,`2nd quarter`,`3rd quarter`,`4th quarter`]},defaultWidth:`wide`,argumentCallback:e=>e-1}),month:nr({values:{narrow:[`J`,`F`,`M`,`A`,`M`,`J`,`J`,`A`,`S`,`O`,`N`,`D`],abbreviated:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],wide:[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`]},defaultWidth:`wide`}),day:nr({values:{narrow:[`S`,`M`,`T`,`W`,`T`,`F`,`S`],short:[`Su`,`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`],abbreviated:[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],wide:[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`]},defaultWidth:`wide`}),dayPeriod:nr({values:{narrow:{am:`a`,pm:`p`,midnight:`mi`,noon:`n`,morning:`morning`,afternoon:`afternoon`,evening:`evening`,night:`night`},abbreviated:{am:`AM`,pm:`PM`,midnight:`midnight`,noon:`noon`,morning:`morning`,afternoon:`afternoon`,evening:`evening`,night:`night`},wide:{am:`a.m.`,pm:`p.m.`,midnight:`midnight`,noon:`noon`,morning:`morning`,afternoon:`afternoon`,evening:`evening`,night:`night`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`a`,pm:`p`,midnight:`mi`,noon:`n`,morning:`in the morning`,afternoon:`in the afternoon`,evening:`in the evening`,night:`at night`},abbreviated:{am:`AM`,pm:`PM`,midnight:`midnight`,noon:`noon`,morning:`in the morning`,afternoon:`in the afternoon`,evening:`in the evening`,night:`at night`},wide:{am:`a.m.`,pm:`p.m.`,midnight:`midnight`,noon:`noon`,morning:`in the morning`,afternoon:`in the afternoon`,evening:`in the evening`,night:`at night`}},defaultFormattingWidth:`wide`})};function ir(e){return(t,n={})=>{let r=n.width,i=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],a=t.match(i);if(!a)return null;let o=a[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],c=Array.isArray(s)?or(s,e=>e.test(o)):ar(s,e=>e.test(o)),l;l=e.valueCallback?e.valueCallback(c):c,l=n.valueCallback?n.valueCallback(l):l;let u=t.slice(o.length);return{value:l,rest:u}}}function ar(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function or(e,t){for(let n=0;n{let r=t.match(e.matchPattern);if(!r)return null;let i=r[0],a=t.match(e.parsePattern);if(!a)return null;let o=e.valueCallback?e.valueCallback(a[0]):a[0];o=n.valueCallback?n.valueCallback(o):o;let s=t.slice(i.length);return{value:o,rest:s}}}var cr={code:`en-US`,formatDistance:Zn,formatLong:$n,formatRelative:tr,localize:rr,match:{ordinalNumber:sr({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:ir({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:`any`}),quarter:ir({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:`any`,valueCallback:e=>e+1}),month:ir({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:`any`}),day:ir({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:`any`}),dayPeriod:ir({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:`any`,parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:`any`})},options:{weekStartsOn:0,firstWeekContainsDate:1}};function lr(e,t){let n=L(e,t?.in);return jn(n,Kn(n))+1}function ur(e,t){let n=L(e,t?.in),r=En(n)-+Mn(n);return Math.round(r/gn)+1}function dr(e,t){let n=L(e,t?.in),r=n.getFullYear(),i=wn(),a=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??i.firstWeekContainsDate??i.locale?.options?.firstWeekContainsDate??1,o=bn(t?.in||e,0);o.setFullYear(r+1,0,a),o.setHours(0,0,0,0);let s=Tn(o,t),c=bn(t?.in||e,0);c.setFullYear(r,0,a),c.setHours(0,0,0,0);let l=Tn(c,t);return+n>=+s?r+1:+n>=+l?r:r-1}function fr(e,t){let n=wn(),r=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,i=dr(e,t),a=bn(t?.in||e,0);return a.setFullYear(i,0,r),a.setHours(0,0,0,0),Tn(a,t)}function pr(e,t){let n=L(e,t?.in),r=Tn(n,t)-+fr(n,t);return Math.round(r/gn)+1}function R(e,t){return(e<0?`-`:``)+Math.abs(e).toString().padStart(t,`0`)}var mr={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return R(t===`yy`?r%100:r,t.length)},M(e,t){let n=e.getMonth();return t===`M`?String(n+1):R(n+1,2)},d(e,t){return R(e.getDate(),t.length)},a(e,t){let n=e.getHours()/12>=1?`pm`:`am`;switch(t){case`a`:case`aa`:return n.toUpperCase();case`aaa`:return n;case`aaaaa`:return n[0];default:return n===`am`?`a.m.`:`p.m.`}},h(e,t){return R(e.getHours()%12||12,t.length)},H(e,t){return R(e.getHours(),t.length)},m(e,t){return R(e.getMinutes(),t.length)},s(e,t){return R(e.getSeconds(),t.length)},S(e,t){let n=t.length,r=e.getMilliseconds();return R(Math.trunc(r*10**(n-3)),t.length)}},hr={am:`am`,pm:`pm`,midnight:`midnight`,noon:`noon`,morning:`morning`,afternoon:`afternoon`,evening:`evening`,night:`night`},gr={G:function(e,t,n){let r=+(e.getFullYear()>0);switch(t){case`G`:case`GG`:case`GGG`:return n.era(r,{width:`abbreviated`});case`GGGGG`:return n.era(r,{width:`narrow`});default:return n.era(r,{width:`wide`})}},y:function(e,t,n){if(t===`yo`){let t=e.getFullYear(),r=t>0?t:1-t;return n.ordinalNumber(r,{unit:`year`})}return mr.y(e,t)},Y:function(e,t,n,r){let i=dr(e,r),a=i>0?i:1-i;return t===`YY`?R(a%100,2):t===`Yo`?n.ordinalNumber(a,{unit:`year`}):R(a,t.length)},R:function(e,t){return R(Dn(e),t.length)},u:function(e,t){return R(e.getFullYear(),t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case`Q`:return String(r);case`QQ`:return R(r,2);case`Qo`:return n.ordinalNumber(r,{unit:`quarter`});case`QQQ`:return n.quarter(r,{width:`abbreviated`,context:`formatting`});case`QQQQQ`:return n.quarter(r,{width:`narrow`,context:`formatting`});default:return n.quarter(r,{width:`wide`,context:`formatting`})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case`q`:return String(r);case`qq`:return R(r,2);case`qo`:return n.ordinalNumber(r,{unit:`quarter`});case`qqq`:return n.quarter(r,{width:`abbreviated`,context:`standalone`});case`qqqqq`:return n.quarter(r,{width:`narrow`,context:`standalone`});default:return n.quarter(r,{width:`wide`,context:`standalone`})}},M:function(e,t,n){let r=e.getMonth();switch(t){case`M`:case`MM`:return mr.M(e,t);case`Mo`:return n.ordinalNumber(r+1,{unit:`month`});case`MMM`:return n.month(r,{width:`abbreviated`,context:`formatting`});case`MMMMM`:return n.month(r,{width:`narrow`,context:`formatting`});default:return n.month(r,{width:`wide`,context:`formatting`})}},L:function(e,t,n){let r=e.getMonth();switch(t){case`L`:return String(r+1);case`LL`:return R(r+1,2);case`Lo`:return n.ordinalNumber(r+1,{unit:`month`});case`LLL`:return n.month(r,{width:`abbreviated`,context:`standalone`});case`LLLLL`:return n.month(r,{width:`narrow`,context:`standalone`});default:return n.month(r,{width:`wide`,context:`standalone`})}},w:function(e,t,n,r){let i=pr(e,r);return t===`wo`?n.ordinalNumber(i,{unit:`week`}):R(i,t.length)},I:function(e,t,n){let r=ur(e);return t===`Io`?n.ordinalNumber(r,{unit:`week`}):R(r,t.length)},d:function(e,t,n){return t===`do`?n.ordinalNumber(e.getDate(),{unit:`date`}):mr.d(e,t)},D:function(e,t,n){let r=lr(e);return t===`Do`?n.ordinalNumber(r,{unit:`dayOfYear`}):R(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case`E`:case`EE`:case`EEE`:return n.day(r,{width:`abbreviated`,context:`formatting`});case`EEEEE`:return n.day(r,{width:`narrow`,context:`formatting`});case`EEEEEE`:return n.day(r,{width:`short`,context:`formatting`});default:return n.day(r,{width:`wide`,context:`formatting`})}},e:function(e,t,n,r){let i=e.getDay(),a=(i-r.weekStartsOn+8)%7||7;switch(t){case`e`:return String(a);case`ee`:return R(a,2);case`eo`:return n.ordinalNumber(a,{unit:`day`});case`eee`:return n.day(i,{width:`abbreviated`,context:`formatting`});case`eeeee`:return n.day(i,{width:`narrow`,context:`formatting`});case`eeeeee`:return n.day(i,{width:`short`,context:`formatting`});default:return n.day(i,{width:`wide`,context:`formatting`})}},c:function(e,t,n,r){let i=e.getDay(),a=(i-r.weekStartsOn+8)%7||7;switch(t){case`c`:return String(a);case`cc`:return R(a,t.length);case`co`:return n.ordinalNumber(a,{unit:`day`});case`ccc`:return n.day(i,{width:`abbreviated`,context:`standalone`});case`ccccc`:return n.day(i,{width:`narrow`,context:`standalone`});case`cccccc`:return n.day(i,{width:`short`,context:`standalone`});default:return n.day(i,{width:`wide`,context:`standalone`})}},i:function(e,t,n){let r=e.getDay(),i=r===0?7:r;switch(t){case`i`:return String(i);case`ii`:return R(i,t.length);case`io`:return n.ordinalNumber(i,{unit:`day`});case`iii`:return n.day(r,{width:`abbreviated`,context:`formatting`});case`iiiii`:return n.day(r,{width:`narrow`,context:`formatting`});case`iiiiii`:return n.day(r,{width:`short`,context:`formatting`});default:return n.day(r,{width:`wide`,context:`formatting`})}},a:function(e,t,n){let r=e.getHours()/12>=1?`pm`:`am`;switch(t){case`a`:case`aa`:return n.dayPeriod(r,{width:`abbreviated`,context:`formatting`});case`aaa`:return n.dayPeriod(r,{width:`abbreviated`,context:`formatting`}).toLowerCase();case`aaaaa`:return n.dayPeriod(r,{width:`narrow`,context:`formatting`});default:return n.dayPeriod(r,{width:`wide`,context:`formatting`})}},b:function(e,t,n){let r=e.getHours(),i;switch(i=r===12?hr.noon:r===0?hr.midnight:r/12>=1?`pm`:`am`,t){case`b`:case`bb`:return n.dayPeriod(i,{width:`abbreviated`,context:`formatting`});case`bbb`:return n.dayPeriod(i,{width:`abbreviated`,context:`formatting`}).toLowerCase();case`bbbbb`:return n.dayPeriod(i,{width:`narrow`,context:`formatting`});default:return n.dayPeriod(i,{width:`wide`,context:`formatting`})}},B:function(e,t,n){let r=e.getHours(),i;switch(i=r>=17?hr.evening:r>=12?hr.afternoon:r>=4?hr.morning:hr.night,t){case`B`:case`BB`:case`BBB`:return n.dayPeriod(i,{width:`abbreviated`,context:`formatting`});case`BBBBB`:return n.dayPeriod(i,{width:`narrow`,context:`formatting`});default:return n.dayPeriod(i,{width:`wide`,context:`formatting`})}},h:function(e,t,n){if(t===`ho`){let t=e.getHours()%12;return t===0&&(t=12),n.ordinalNumber(t,{unit:`hour`})}return mr.h(e,t)},H:function(e,t,n){return t===`Ho`?n.ordinalNumber(e.getHours(),{unit:`hour`}):mr.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return t===`Ko`?n.ordinalNumber(r,{unit:`hour`}):R(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t===`ko`?n.ordinalNumber(r,{unit:`hour`}):R(r,t.length)},m:function(e,t,n){return t===`mo`?n.ordinalNumber(e.getMinutes(),{unit:`minute`}):mr.m(e,t)},s:function(e,t,n){return t===`so`?n.ordinalNumber(e.getSeconds(),{unit:`second`}):mr.s(e,t)},S:function(e,t){return mr.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(r===0)return`Z`;switch(t){case`X`:return vr(r);case`XXXX`:case`XX`:return yr(r);default:return yr(r,`:`)}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case`x`:return vr(r);case`xxxx`:case`xx`:return yr(r);default:return yr(r,`:`)}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case`O`:case`OO`:case`OOO`:return`GMT`+_r(r,`:`);default:return`GMT`+yr(r,`:`)}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case`z`:case`zz`:case`zzz`:return`GMT`+_r(r,`:`);default:return`GMT`+yr(r,`:`)}},t:function(e,t,n){return R(Math.trunc(e/1e3),t.length)},T:function(e,t,n){return R(+e,t.length)}};function _r(e,t=``){let n=e>0?`-`:`+`,r=Math.abs(e),i=Math.trunc(r/60),a=r%60;return a===0?n+String(i):n+String(i)+t+R(a,2)}function vr(e,t){return e%60==0?(e>0?`-`:`+`)+R(Math.abs(e)/60,2):yr(e,t)}function yr(e,t=``){let n=e>0?`-`:`+`,r=Math.abs(e),i=R(Math.trunc(r/60),2),a=R(r%60,2);return n+i+t+a}var br=(e,t)=>{switch(e){case`P`:return t.date({width:`short`});case`PP`:return t.date({width:`medium`});case`PPP`:return t.date({width:`long`});default:return t.date({width:`full`})}},xr=(e,t)=>{switch(e){case`p`:return t.time({width:`short`});case`pp`:return t.time({width:`medium`});case`ppp`:return t.time({width:`long`});default:return t.time({width:`full`})}},Sr={p:xr,P:(e,t)=>{let n=e.match(/(P+)(p+)?/)||[],r=n[1],i=n[2];if(!i)return br(e,t);let a;switch(r){case`P`:a=t.dateTime({width:`short`});break;case`PP`:a=t.dateTime({width:`medium`});break;case`PPP`:a=t.dateTime({width:`long`});break;default:a=t.dateTime({width:`full`});break}return a.replace(`{{date}}`,br(r,t)).replace(`{{time}}`,xr(i,t))}},Cr=/^D+$/,wr=/^Y+$/,Tr=[`D`,`DD`,`YY`,`YYYY`];function Er(e){return Cr.test(e)}function Dr(e){return wr.test(e)}function Or(e,t,n){let r=kr(e,t,n);if(console.warn(r),Tr.includes(e))throw RangeError(r)}function kr(e,t,n){let r=e[0]===`Y`?`years`:`days of the month`;return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var Ar=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,jr=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Mr=/^'([^]*?)'?$/,Nr=/''/g,Pr=/[a-zA-Z]/;function Fr(e,t,n){let r=wn(),i=n?.locale??r.locale??cr,a=n?.firstWeekContainsDate??n?.locale?.options?.firstWeekContainsDate??r.firstWeekContainsDate??r.locale?.options?.firstWeekContainsDate??1,o=n?.weekStartsOn??n?.locale?.options?.weekStartsOn??r.weekStartsOn??r.locale?.options?.weekStartsOn??0,s=L(e,n?.in);if(!zn(s))throw RangeError(`Invalid time value`);let c=t.match(jr).map(e=>{let t=e[0];if(t===`p`||t===`P`){let n=Sr[t];return n(e,i.formatLong)}return e}).join(``).match(Ar).map(e=>{if(e===`''`)return{isToken:!1,value:`'`};let t=e[0];if(t===`'`)return{isToken:!1,value:Ir(e)};if(gr[t])return{isToken:!0,value:e};if(t.match(Pr))throw RangeError("Format string contains an unescaped latin alphabet character `"+t+"`");return{isToken:!1,value:e}});i.localize.preprocessor&&(c=i.localize.preprocessor(s,c));let l={firstWeekContainsDate:a,weekStartsOn:o,locale:i};return c.map(r=>{if(!r.isToken)return r.value;let a=r.value;(!n?.useAdditionalWeekYearTokens&&Dr(a)||!n?.useAdditionalDayOfYearTokens&&Er(a))&&Or(a,t,String(e));let o=gr[a[0]];return o(s,a,i.localize,l)}).join(``)}function Ir(e){let t=e.match(Mr);return t?t[1].replace(Nr,`'`):e}function Lr(e,t){let n=L(e,t?.in),r=n.getFullYear(),i=n.getMonth(),a=bn(n,0);return a.setFullYear(r,i+1,0),a.setHours(0,0,0,0),a.getDate()}function Rr(e,t){return L(e,t?.in).getMonth()}function zr(e,t){return L(e,t?.in).getFullYear()}function Br(e,t){return+L(e)>+L(t)}function Vr(e,t){return+L(e)<+L(t)}function Hr(e,t,n){let[r,i]=kn(n?.in,e,t);return r.getFullYear()===i.getFullYear()&&r.getMonth()===i.getMonth()}function Ur(e,t,n){let[r,i]=kn(n?.in,e,t);return r.getFullYear()===i.getFullYear()}function Wr(e,t,n){return xn(e,-t,n)}function Gr(e,t,n){let r=L(e,n?.in),i=r.getFullYear(),a=r.getDate(),o=bn(n?.in||e,0);o.setFullYear(i,t,15),o.setHours(0,0,0,0);let s=Lr(o);return r.setMonth(t,Math.min(a,s)),r}function Kr(e,t,n){let r=L(e,n?.in);return isNaN(+r)?bn(n?.in||e,NaN):(r.setFullYear(t),r)}function qr(e,t,n){return Sn(e,-t,n)}var Jr={lessThanXSeconds:{one:`少於 1 秒`,other:`少於 {{count}} 秒`},xSeconds:{one:`1 秒`,other:`{{count}} 秒`},halfAMinute:`半分鐘`,lessThanXMinutes:{one:`少於 1 分鐘`,other:`少於 {{count}} 分鐘`},xMinutes:{one:`1 分鐘`,other:`{{count}} 分鐘`},xHours:{one:`1 小時`,other:`{{count}} 小時`},aboutXHours:{one:`大約 1 小時`,other:`大約 {{count}} 小時`},xDays:{one:`1 天`,other:`{{count}} 天`},aboutXWeeks:{one:`大約 1 個星期`,other:`大約 {{count}} 個星期`},xWeeks:{one:`1 個星期`,other:`{{count}} 個星期`},aboutXMonths:{one:`大約 1 個月`,other:`大約 {{count}} 個月`},xMonths:{one:`1 個月`,other:`{{count}} 個月`},aboutXYears:{one:`大約 1 年`,other:`大約 {{count}} 年`},xYears:{one:`1 年`,other:`{{count}} 年`},overXYears:{one:`超過 1 年`,other:`超過 {{count}} 年`},almostXYears:{one:`將近 1 年`,other:`將近 {{count}} 年`}},Yr=(e,t,n)=>{let r,i=Jr[e];return r=typeof i==`string`?i:t===1?i.one:i.other.replace(`{{count}}`,String(t)),n?.addSuffix?n.comparison&&n.comparison>0?r+`內`:r+`前`:r},Xr={date:Qn({formats:{full:`y'年'M'月'd'日' EEEE`,long:`y'年'M'月'd'日'`,medium:`yyyy-MM-dd`,short:`yy-MM-dd`},defaultWidth:`full`}),time:Qn({formats:{full:`zzzz a h:mm:ss`,long:`z a h:mm:ss`,medium:`a h:mm:ss`,short:`a h:mm`},defaultWidth:`full`}),dateTime:Qn({formats:{full:`{{date}} {{time}}`,long:`{{date}} {{time}}`,medium:`{{date}} {{time}}`,short:`{{date}} {{time}}`},defaultWidth:`full`})},Zr={lastWeek:`'上個'eeee p`,yesterday:`'昨天' p`,today:`'今天' p`,tomorrow:`'明天' p`,nextWeek:`'下個'eeee p`,other:`P`},Qr={code:`zh-TW`,formatDistance:Yr,formatLong:Xr,formatRelative:(e,t,n,r)=>Zr[e],localize:{ordinalNumber:(e,t)=>{let n=Number(e);switch(t?.unit){case`date`:return n+`日`;case`hour`:return n+`時`;case`minute`:return n+`分`;case`second`:return n+`秒`;default:return`第 `+n}},era:nr({values:{narrow:[`前`,`公元`],abbreviated:[`前`,`公元`],wide:[`公元前`,`公元`]},defaultWidth:`wide`}),quarter:nr({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`第一刻`,`第二刻`,`第三刻`,`第四刻`],wide:[`第一刻鐘`,`第二刻鐘`,`第三刻鐘`,`第四刻鐘`]},defaultWidth:`wide`,argumentCallback:e=>e-1}),month:nr({values:{narrow:[`一`,`二`,`三`,`四`,`五`,`六`,`七`,`八`,`九`,`十`,`十一`,`十二`],abbreviated:[`1月`,`2月`,`3月`,`4月`,`5月`,`6月`,`7月`,`8月`,`9月`,`10月`,`11月`,`12月`],wide:[`一月`,`二月`,`三月`,`四月`,`五月`,`六月`,`七月`,`八月`,`九月`,`十月`,`十一月`,`十二月`]},defaultWidth:`wide`}),day:nr({values:{narrow:[`日`,`一`,`二`,`三`,`四`,`五`,`六`],short:[`日`,`一`,`二`,`三`,`四`,`五`,`六`],abbreviated:[`週日`,`週一`,`週二`,`週三`,`週四`,`週五`,`週六`],wide:[`星期日`,`星期一`,`星期二`,`星期三`,`星期四`,`星期五`,`星期六`]},defaultWidth:`wide`}),dayPeriod:nr({values:{narrow:{am:`上`,pm:`下`,midnight:`凌晨`,noon:`午`,morning:`早`,afternoon:`下午`,evening:`晚`,night:`夜`},abbreviated:{am:`上午`,pm:`下午`,midnight:`凌晨`,noon:`中午`,morning:`早晨`,afternoon:`中午`,evening:`晚上`,night:`夜間`},wide:{am:`上午`,pm:`下午`,midnight:`凌晨`,noon:`中午`,morning:`早晨`,afternoon:`中午`,evening:`晚上`,night:`夜間`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`上`,pm:`下`,midnight:`凌晨`,noon:`午`,morning:`早`,afternoon:`下午`,evening:`晚`,night:`夜`},abbreviated:{am:`上午`,pm:`下午`,midnight:`凌晨`,noon:`中午`,morning:`早晨`,afternoon:`中午`,evening:`晚上`,night:`夜間`},wide:{am:`上午`,pm:`下午`,midnight:`凌晨`,noon:`中午`,morning:`早晨`,afternoon:`中午`,evening:`晚上`,night:`夜間`}},defaultFormattingWidth:`wide`})},match:{ordinalNumber:sr({matchPattern:/^(第\s*)?\d+(日|時|分|秒)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:ir({matchPatterns:{narrow:/^(前)/i,abbreviated:/^(前)/i,wide:/^(公元前|公元)/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/^(前)/i,/^(公元)/i]},defaultParseWidth:`any`}),quarter:ir({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^第[一二三四]刻/i,wide:/^第[一二三四]刻鐘/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/(1|一)/i,/(2|二)/i,/(3|三)/i,/(4|四)/i]},defaultParseWidth:`any`,valueCallback:e=>e+1}),month:ir({matchPatterns:{narrow:/^(一|二|三|四|五|六|七|八|九|十[二一])/i,abbreviated:/^(一|二|三|四|五|六|七|八|九|十[二一]|\d|1[12])月/i,wide:/^(一|二|三|四|五|六|七|八|九|十[二一])月/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^一/i,/^二/i,/^三/i,/^四/i,/^五/i,/^六/i,/^七/i,/^八/i,/^九/i,/^十(?!(一|二))/i,/^十一/i,/^十二/i],any:[/^一|1/i,/^二|2/i,/^三|3/i,/^四|4/i,/^五|5/i,/^六|6/i,/^七|7/i,/^八|8/i,/^九|9/i,/^十(?!(一|二))|10/i,/^十一|11/i,/^十二|12/i]},defaultParseWidth:`any`}),day:ir({matchPatterns:{narrow:/^[一二三四五六日]/i,short:/^[一二三四五六日]/i,abbreviated:/^週[一二三四五六日]/i,wide:/^星期[一二三四五六日]/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/日/i,/一/i,/二/i,/三/i,/四/i,/五/i,/六/i]},defaultParseWidth:`any`}),dayPeriod:ir({matchPatterns:{any:/^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨)/i},defaultMatchWidth:`any`,parsePatterns:{any:{am:/^上午?/i,pm:/^下午?/i,midnight:/^午夜/i,noon:/^[中正]午/i,morning:/^早上/i,afternoon:/^下午/i,evening:/^晚上?/i,night:/^凌晨/i}},defaultParseWidth:`any`})},options:{weekStartsOn:1,firstWeekContainsDate:4}};function $r(e,t,n=`long`){return new Intl.DateTimeFormat(`en-US`,{hour:`numeric`,timeZone:e,timeZoneName:n}).format(t).split(/\s/g).slice(2).join(` `)}var ei={},ti={};function ni(e,t){try{let n=(ei[e]||=new Intl.DateTimeFormat(`en-US`,{timeZone:e,timeZoneName:`longOffset`}).format)(t).split(`GMT`)[1];return n in ti?ti[n]:ii(n,n.split(`:`))}catch{if(e in ti)return ti[e];let t=e?.match(ri);return t?ii(e,t.slice(1)):NaN}}var ri=/([+-]\d\d):?(\d\d)?/;function ii(e,t){let n=+(t[0]||0),r=+(t[1]||0),i=(t[2]||0)/60;return ti[e]=n*60+r>0?n*60+r+i:n*60-r-i}var ai=class e extends Date{constructor(...e){super(),e.length>1&&typeof e[e.length-1]==`string`&&(this.timeZone=e.pop()),this.internal=new Date,isNaN(ni(this.timeZone,this))?this.setTime(NaN):e.length?typeof e[0]==`number`&&(e.length===1||e.length===2&&typeof e[1]!=`number`)?this.setTime(e[0]):typeof e[0]==`string`?this.setTime(+new Date(e[0])):e[0]instanceof Date?this.setTime(+e[0]):(this.setTime(+new Date(...e)),li(this,NaN),si(this)):this.setTime(Date.now())}static tz(t,...n){return n.length?new e(...n,t):new e(Date.now(),t)}withTimeZone(t){return new e(+this,t)}getTimezoneOffset(){let e=-ni(this.timeZone,this);return e>0?Math.floor(e):Math.ceil(e)}setTime(e){return Date.prototype.setTime.apply(this,arguments),si(this),+this}[Symbol.for(`constructDateFrom`)](t){return new e(+new Date(t),this.timeZone)}},oi=/^(get|set)(?!UTC)/;Object.getOwnPropertyNames(Date.prototype).forEach(e=>{if(!oi.test(e))return;let t=e.replace(oi,`$1UTC`);ai.prototype[t]&&(e.startsWith(`get`)?ai.prototype[e]=function(){return this.internal[t]()}:(ai.prototype[e]=function(){return Date.prototype[t].apply(this.internal,arguments),ci(this),+this},ai.prototype[t]=function(){return Date.prototype[t].apply(this,arguments),si(this),+this}))});function si(e){e.internal.setTime(+e),e.internal.setUTCSeconds(e.internal.getUTCSeconds()-Math.round(-ni(e.timeZone,e)*60))}function ci(e){Date.prototype.setFullYear.call(e,e.internal.getUTCFullYear(),e.internal.getUTCMonth(),e.internal.getUTCDate()),Date.prototype.setHours.call(e,e.internal.getUTCHours(),e.internal.getUTCMinutes(),e.internal.getUTCSeconds(),e.internal.getUTCMilliseconds()),li(e)}function li(e){let t=ni(e.timeZone,e),n=t>0?Math.floor(t):Math.ceil(t),r=new Date(+e);r.setUTCHours(r.getUTCHours()-1);let i=-new Date(+e).getTimezoneOffset(),a=i- -new Date(+r).getTimezoneOffset(),o=Date.prototype.getHours.apply(e)!==e.internal.getUTCHours();a&&o&&e.internal.setUTCMinutes(e.internal.getUTCMinutes()+a);let s=i-n;s&&Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+s);let c=new Date(+e);c.setUTCSeconds(0);let l=i>0?c.getSeconds():(c.getSeconds()-60)%60,u=Math.round(-(ni(e.timeZone,e)*60))%60;(u||l)&&(e.internal.setUTCSeconds(e.internal.getUTCSeconds()+u),Date.prototype.setUTCSeconds.call(e,Date.prototype.getUTCSeconds.call(e)+u+l));let d=ni(e.timeZone,e),f=d>0?Math.floor(d):Math.ceil(d),p=-new Date(+e).getTimezoneOffset()-f,m=f!==n,h=p-s;if(m&&h){Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+h);let t=ni(e.timeZone,e),n=f-(t>0?Math.floor(t):Math.ceil(t));n&&(e.internal.setUTCMinutes(e.internal.getUTCMinutes()+n),Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+n))}}var ui=class e extends ai{static tz(t,...n){return n.length?new e(...n,t):new e(Date.now(),t)}toISOString(){let[e,t,n]=this.tzComponents(),r=`${e}${t}:${n}`;return this.internal.toISOString().slice(0,-1)+r}toString(){return`${this.toDateString()} ${this.toTimeString()}`}toDateString(){let[e,t,n,r]=this.internal.toUTCString().split(` `);return`${e?.slice(0,-1)} ${n} ${t} ${r}`}toTimeString(){let e=this.internal.toUTCString().split(` `)[4],[t,n,r]=this.tzComponents();return`${e} GMT${t}${n}${r} (${$r(this.timeZone,this)})`}toLocaleString(e,t){return Date.prototype.toLocaleString.call(this,e,{...t,timeZone:t?.timeZone||this.timeZone})}toLocaleDateString(e,t){return Date.prototype.toLocaleDateString.call(this,e,{...t,timeZone:t?.timeZone||this.timeZone})}toLocaleTimeString(e,t){return Date.prototype.toLocaleTimeString.call(this,e,{...t,timeZone:t?.timeZone||this.timeZone})}tzComponents(){let e=this.getTimezoneOffset();return[e>0?`-`:`+`,String(Math.floor(Math.abs(e)/60)).padStart(2,`0`),String(Math.abs(e)%60).padStart(2,`0`)]}withTimeZone(t){return new e(+this,t)}[Symbol.for(`constructDateFrom`)](t){return new e(+new Date(t),this.timeZone)}},di=5,fi=4;function pi(e,t){let n=t.startOfMonth(e),r=n.getDay()>0?n.getDay():7,i=t.addDays(e,-r+1),a=t.addDays(i,di*7-1);return t.getMonth(e)===t.getMonth(a)?di:fi}function mi(e,t){let n=t.startOfMonth(e),r=n.getDay();return r===1?n:r===0?t.addDays(n,-6):t.addDays(n,-1*(r-1))}function hi(e,t){let n=mi(e,t),r=pi(e,t);return t.addDays(n,r*7-1)}var gi={...cr,labels:{labelDayButton:(e,t,n,r)=>{let i;i=r&&typeof r.format==`function`?r.format.bind(r):(e,t)=>Fr(e,t,{locale:cr,...n});let a=i(e,`PPPP`);return t.today&&(a=`Today, ${a}`),t.selected&&(a=`${a}, selected`),a},labelMonthDropdown:`Choose the Month`,labelNext:`Go to the Next Month`,labelPrevious:`Go to the Previous Month`,labelWeekNumber:e=>`Week ${e}`,labelYearDropdown:`Choose the Year`,labelGrid:(e,t,n)=>{let r;return r=n&&typeof n.format==`function`?n.format.bind(n):(e,n)=>Fr(e,n,{locale:cr,...t}),r(e,`LLLL yyyy`)},labelGridcell:(e,t,n,r)=>{let i;i=r&&typeof r.format==`function`?r.format.bind(r):(e,t)=>Fr(e,t,{locale:cr,...n});let a=i(e,`PPPP`);return t?.today&&(a=`Today, ${a}`),a},labelNav:`Navigation bar`,labelWeekNumberHeader:`Week Number`,labelWeekday:(e,t,n)=>{let r;return r=n&&typeof n.format==`function`?n.format.bind(n):(e,n)=>Fr(e,n,{locale:cr,...t}),r(e,`cccc`)}}},_i=class e{constructor(e,t){this.Date=Date,this.today=()=>this.overrides?.today?this.overrides.today():this.options.timeZone?ui.tz(this.options.timeZone):new this.Date,this.newDate=(e,t,n)=>this.overrides?.newDate?this.overrides.newDate(e,t,n):this.options.timeZone?new ui(e,t,n,this.options.timeZone):new Date(e,t,n),this.addDays=(e,t)=>this.overrides?.addDays?this.overrides.addDays(e,t):xn(e,t),this.addMonths=(e,t)=>this.overrides?.addMonths?this.overrides.addMonths(e,t):Sn(e,t),this.addWeeks=(e,t)=>this.overrides?.addWeeks?this.overrides.addWeeks(e,t):Nn(e,t),this.addYears=(e,t)=>this.overrides?.addYears?this.overrides.addYears(e,t):Pn(e,t),this.differenceInCalendarDays=(e,t)=>this.overrides?.differenceInCalendarDays?this.overrides.differenceInCalendarDays(e,t):jn(e,t),this.differenceInCalendarMonths=(e,t)=>this.overrides?.differenceInCalendarMonths?this.overrides.differenceInCalendarMonths(e,t):Bn(e,t),this.eachMonthOfInterval=e=>this.overrides?.eachMonthOfInterval?this.overrides.eachMonthOfInterval(e):Un(e),this.eachYearOfInterval=e=>{let t=this.overrides?.eachYearOfInterval?this.overrides.eachYearOfInterval(e):qn(e),n=new Set(t.map(e=>this.getYear(e)));if(n.size===t.length)return t;let r=[];return n.forEach(e=>{r.push(new Date(e,0,1))}),r},this.endOfBroadcastWeek=e=>this.overrides?.endOfBroadcastWeek?this.overrides.endOfBroadcastWeek(e):hi(e,this),this.endOfISOWeek=e=>this.overrides?.endOfISOWeek?this.overrides.endOfISOWeek(e):Yn(e),this.endOfMonth=e=>this.overrides?.endOfMonth?this.overrides.endOfMonth(e):Vn(e),this.endOfWeek=(e,t)=>this.overrides?.endOfWeek?this.overrides.endOfWeek(e,t):Jn(e,this.options),this.endOfYear=e=>this.overrides?.endOfYear?this.overrides.endOfYear(e):Gn(e),this.format=(e,t,n)=>{let r=this.overrides?.format?this.overrides.format(e,t,this.options):Fr(e,t,this.options);return this.options.numerals&&this.options.numerals!==`latn`?this.replaceDigits(r):r},this.getISOWeek=e=>this.overrides?.getISOWeek?this.overrides.getISOWeek(e):ur(e),this.getMonth=(e,t)=>this.overrides?.getMonth?this.overrides.getMonth(e,this.options):Rr(e,this.options),this.getYear=(e,t)=>this.overrides?.getYear?this.overrides.getYear(e,this.options):zr(e,this.options),this.getWeek=(e,t)=>this.overrides?.getWeek?this.overrides.getWeek(e,this.options):pr(e,this.options),this.isAfter=(e,t)=>this.overrides?.isAfter?this.overrides.isAfter(e,t):Br(e,t),this.isBefore=(e,t)=>this.overrides?.isBefore?this.overrides.isBefore(e,t):Vr(e,t),this.isDate=e=>this.overrides?.isDate?this.overrides.isDate(e):Rn(e),this.isSameDay=(e,t)=>this.overrides?.isSameDay?this.overrides.isSameDay(e,t):Ln(e,t),this.isSameMonth=(e,t)=>this.overrides?.isSameMonth?this.overrides.isSameMonth(e,t):Hr(e,t),this.isSameYear=(e,t)=>this.overrides?.isSameYear?this.overrides.isSameYear(e,t):Ur(e,t),this.max=e=>this.overrides?.max?this.overrides.max(e):Fn(e),this.min=e=>this.overrides?.min?this.overrides.min(e):In(e),this.setMonth=(e,t)=>this.overrides?.setMonth?this.overrides.setMonth(e,t):Gr(e,t),this.setYear=(e,t)=>this.overrides?.setYear?this.overrides.setYear(e,t):Kr(e,t),this.startOfBroadcastWeek=(e,t)=>this.overrides?.startOfBroadcastWeek?this.overrides.startOfBroadcastWeek(e,this):mi(e,this),this.startOfDay=e=>this.overrides?.startOfDay?this.overrides.startOfDay(e):An(e),this.startOfISOWeek=e=>this.overrides?.startOfISOWeek?this.overrides.startOfISOWeek(e):En(e),this.startOfMonth=e=>this.overrides?.startOfMonth?this.overrides.startOfMonth(e):Wn(e),this.startOfWeek=(e,t)=>this.overrides?.startOfWeek?this.overrides.startOfWeek(e,this.options):Tn(e,this.options),this.startOfYear=e=>this.overrides?.startOfYear?this.overrides.startOfYear(e):Kn(e),this.options={locale:gi,...e},this.overrides=t}getDigitMap(){let{numerals:e=`latn`}=this.options,t=new Intl.NumberFormat(`en-US`,{numberingSystem:e}),n={};for(let e=0;e<10;e++)n[e.toString()]=t.format(e);return n}replaceDigits(e){let t=this.getDigitMap();return e.replace(/\d/g,e=>t[e]||e)}formatNumber(e){return this.replaceDigits(e.toString())}getMonthYearOrder(){let t=this.options.locale?.code;return t&&e.yearFirstLocales.has(t)?`year-first`:`month-first`}formatMonthYear(t){let{locale:n,timeZone:r,numerals:i}=this.options,a=n?.code;if(a&&e.yearFirstLocales.has(a))try{return new Intl.DateTimeFormat(a,{month:`long`,year:`numeric`,timeZone:r,numberingSystem:i}).format(t)}catch{}let o=this.getMonthYearOrder()===`year-first`?`y LLLL`:`LLLL y`;return this.format(t,o)}};_i.yearFirstLocales=new Set([`eu`,`hu`,`ja`,`ja-Hira`,`ja-JP`,`ko`,`ko-KR`,`lt`,`lt-LT`,`lv`,`lv-LV`,`mn`,`mn-MN`,`zh`,`zh-CN`,`zh-HK`,`zh-TW`]);var vi=new _i,yi=class{constructor(e,t,n=vi){this.date=e,this.displayMonth=t,this.outside=!!(t&&!n.isSameMonth(e,t)),this.dateLib=n,this.isoDate=n.format(e,`yyyy-MM-dd`),this.displayMonthId=n.format(t,`yyyy-MM`),this.dateMonthId=n.format(e,`yyyy-MM`)}isEqualTo(e){return this.dateLib.isSameDay(e.date,this.date)&&this.dateLib.isSameMonth(e.displayMonth,this.displayMonth)}},bi=class{constructor(e,t){this.date=e,this.weeks=t}},xi=class{constructor(e,t){this.days=t,this.weekNumber=e}};function Si(e){return F.createElement(`button`,{...e})}function Ci(e){return F.createElement(`span`,{...e})}function wi(e){let{size:t=24,orientation:n=`left`,className:r}=e;return F.createElement(`svg`,{className:r,width:t,height:t,viewBox:`0 0 24 24`},n===`up`&&F.createElement(`polygon`,{points:`6.77 17 12.5 11.43 18.24 17 20 15.28 12.5 8 5 15.28`}),n===`down`&&F.createElement(`polygon`,{points:`6.77 8 12.5 13.57 18.24 8 20 9.72 12.5 17 5 9.72`}),n===`left`&&F.createElement(`polygon`,{points:`16 18.112 9.81111111 12 16 5.87733333 14.0888889 4 6 12 14.0888889 20`}),n===`right`&&F.createElement(`polygon`,{points:`8 18.112 14.18888889 12 8 5.87733333 9.91111111 4 18 12 9.91111111 20`}))}function Ti(e){let{day:t,modifiers:n,...r}=e;return F.createElement(`td`,{...r})}function Ei(e){let{day:t,modifiers:n,...r}=e,i=F.useRef(null);return F.useEffect(()=>{n.focused&&i.current?.focus()},[n.focused]),F.createElement(`button`,{ref:i,...r})}var z;(function(e){e.Root=`root`,e.Chevron=`chevron`,e.Day=`day`,e.DayButton=`day_button`,e.CaptionLabel=`caption_label`,e.Dropdowns=`dropdowns`,e.Dropdown=`dropdown`,e.DropdownRoot=`dropdown_root`,e.Footer=`footer`,e.MonthGrid=`month_grid`,e.MonthCaption=`month_caption`,e.MonthsDropdown=`months_dropdown`,e.Month=`month`,e.Months=`months`,e.Nav=`nav`,e.NextMonthButton=`button_next`,e.PreviousMonthButton=`button_previous`,e.Week=`week`,e.Weeks=`weeks`,e.Weekday=`weekday`,e.Weekdays=`weekdays`,e.WeekNumber=`week_number`,e.WeekNumberHeader=`week_number_header`,e.YearsDropdown=`years_dropdown`})(z||={});var Di;(function(e){e.disabled=`disabled`,e.hidden=`hidden`,e.outside=`outside`,e.focused=`focused`,e.today=`today`})(Di||={});var Oi;(function(e){e.range_end=`range_end`,e.range_middle=`range_middle`,e.range_start=`range_start`,e.selected=`selected`})(Oi||={});var ki;(function(e){e.weeks_before_enter=`weeks_before_enter`,e.weeks_before_exit=`weeks_before_exit`,e.weeks_after_enter=`weeks_after_enter`,e.weeks_after_exit=`weeks_after_exit`,e.caption_after_enter=`caption_after_enter`,e.caption_after_exit=`caption_after_exit`,e.caption_before_enter=`caption_before_enter`,e.caption_before_exit=`caption_before_exit`})(ki||={});function Ai(e){let{options:t,className:n,components:r,classNames:i,...a}=e,o=[i[z.Dropdown],n].join(` `),s=t?.find(({value:e})=>e===a.value);return F.createElement(`span`,{"data-disabled":a.disabled,className:i[z.DropdownRoot]},F.createElement(r.Select,{className:o,...a},t?.map(({value:e,label:t,disabled:n})=>F.createElement(r.Option,{key:e,value:e,disabled:n},t))),F.createElement(`span`,{className:i[z.CaptionLabel],"aria-hidden":!0},s?.label,F.createElement(r.Chevron,{orientation:`down`,size:18,className:i[z.Chevron]})))}function ji(e){return F.createElement(`div`,{...e})}function Mi(e){return F.createElement(`div`,{...e})}function Ni(e){let{calendarMonth:t,displayIndex:n,...r}=e;return F.createElement(`div`,{...r},e.children)}function Pi(e){let{calendarMonth:t,displayIndex:n,...r}=e;return F.createElement(`div`,{...r})}function Fi(e){return F.createElement(`table`,{...e})}function Ii(e){return F.createElement(`div`,{...e})}var Li=(0,F.createContext)(void 0);function Ri(){let e=(0,F.useContext)(Li);if(e===void 0)throw Error(`useDayPicker() must be used within a custom component.`);return e}function zi(e){let{components:t}=Ri();return F.createElement(t.Dropdown,{...e})}function Bi(e){let{onPreviousClick:t,onNextClick:n,previousMonth:r,nextMonth:i,...a}=e,{components:o,classNames:s,labels:{labelPrevious:c,labelNext:l}}=Ri(),u=(0,F.useCallback)(e=>{i&&n?.(e)},[i,n]),d=(0,F.useCallback)(e=>{r&&t?.(e)},[r,t]);return F.createElement(`nav`,{...a},F.createElement(o.PreviousMonthButton,{type:`button`,className:s[z.PreviousMonthButton],tabIndex:r?void 0:-1,"aria-disabled":r?void 0:!0,"aria-label":c(r),onClick:d},F.createElement(o.Chevron,{disabled:r?void 0:!0,className:s[z.Chevron],orientation:`left`})),F.createElement(o.NextMonthButton,{type:`button`,className:s[z.NextMonthButton],tabIndex:i?void 0:-1,"aria-disabled":i?void 0:!0,"aria-label":l(i),onClick:u},F.createElement(o.Chevron,{disabled:i?void 0:!0,orientation:`right`,className:s[z.Chevron]})))}function Vi(e){let{components:t}=Ri();return F.createElement(t.Button,{...e})}function Hi(e){return F.createElement(`option`,{...e})}function Ui(e){let{components:t}=Ri();return F.createElement(t.Button,{...e})}function Wi(e){let{rootRef:t,...n}=e;return F.createElement(`div`,{...n,ref:t})}function Gi(e){return F.createElement(`select`,{...e})}function Ki(e){let{week:t,...n}=e;return F.createElement(`tr`,{...n})}function qi(e){return F.createElement(`th`,{...e})}function Ji(e){return F.createElement(`thead`,{"aria-hidden":!0},F.createElement(`tr`,{...e}))}function Yi(e){let{week:t,...n}=e;return F.createElement(`th`,{...n})}function Xi(e){return F.createElement(`th`,{...e})}function Zi(e){return F.createElement(`tbody`,{...e})}function Qi(e){let{components:t}=Ri();return F.createElement(t.Dropdown,{...e})}var $i=Ae({Button:()=>Si,CaptionLabel:()=>Ci,Chevron:()=>wi,Day:()=>Ti,DayButton:()=>Ei,Dropdown:()=>Ai,DropdownNav:()=>ji,Footer:()=>Mi,Month:()=>Ni,MonthCaption:()=>Pi,MonthGrid:()=>Fi,Months:()=>Ii,MonthsDropdown:()=>zi,Nav:()=>Bi,NextMonthButton:()=>Vi,Option:()=>Hi,PreviousMonthButton:()=>Ui,Root:()=>Wi,Select:()=>Gi,Week:()=>Ki,WeekNumber:()=>Yi,WeekNumberHeader:()=>Xi,Weekday:()=>qi,Weekdays:()=>Ji,Weeks:()=>Zi,YearsDropdown:()=>Qi});function ea(e,t,n=!1,r=vi){let{from:i,to:a}=e,{differenceInCalendarDays:o,isSameDay:s}=r;return i&&a?(o(a,i)<0&&([i,a]=[a,i]),o(t,i)>=+!!n&&o(a,t)>=+!!n):!n&&a?s(a,t):!n&&i?s(i,t):!1}function ta(e){return!!(e&&typeof e==`object`&&`before`in e&&`after`in e)}function na(e){return!!(e&&typeof e==`object`&&`from`in e)}function ra(e){return!!(e&&typeof e==`object`&&`after`in e)}function ia(e){return!!(e&&typeof e==`object`&&`before`in e)}function aa(e){return!!(e&&typeof e==`object`&&`dayOfWeek`in e)}function oa(e,t){return Array.isArray(e)&&e.every(t.isDate)}function sa(e,t,n=vi){let r=Array.isArray(t)?t:[t],{isSameDay:i,differenceInCalendarDays:a,isAfter:o}=n;return r.some(t=>{if(typeof t==`boolean`)return t;if(n.isDate(t))return i(e,t);if(oa(t,n))return t.some(t=>i(e,t));if(na(t))return ea(t,e,!1,n);if(aa(t))return Array.isArray(t.dayOfWeek)?t.dayOfWeek.includes(e.getDay()):t.dayOfWeek===e.getDay();if(ta(t)){let n=a(t.before,e),r=a(t.after,e),i=n>0,s=r<0;return o(t.before,t.after)?s&&i:i||s}return ra(t)?a(e,t.after)>0:ia(t)?a(t.before,e)>0:typeof t==`function`?t(e):!1})}function ca(e,t,n,r,i){let{disabled:a,hidden:o,modifiers:s,showOutsideDays:c,broadcastCalendar:l,today:u=i.today()}=t,{isSameDay:d,isSameMonth:f,startOfMonth:p,isBefore:m,endOfMonth:h,isAfter:g}=i,_=n&&p(n),v=r&&h(r),y={[Di.focused]:[],[Di.outside]:[],[Di.disabled]:[],[Di.hidden]:[],[Di.today]:[]},b={};for(let t of e){let{date:e,displayMonth:n}=t,r=!!(n&&!f(e,n)),p=!!(_&&m(e,_)),h=!!(v&&g(e,v)),x=!!(a&&sa(e,a,i)),S=!!(o&&sa(e,o,i))||p||h||!l&&!c&&r||l&&c===!1&&r,C=d(e,u);r&&y.outside.push(t),x&&y.disabled.push(t),S&&y.hidden.push(t),C&&y.today.push(t),s&&Object.keys(s).forEach(n=>{let r=s?.[n];r&&sa(e,r,i)&&(b[n]?b[n].push(t):b[n]=[t])})}return e=>{let t={[Di.focused]:!1,[Di.disabled]:!1,[Di.hidden]:!1,[Di.outside]:!1,[Di.today]:!1},n={};for(let n in y)t[n]=y[n].some(t=>t===e);for(let t in b)n[t]=b[t].some(t=>t===e);return{...t,...n}}}function la(e,t,n={}){return Object.entries(e).filter(([,e])=>e===!0).reduce((e,[r])=>(n[r]?e.push(n[r]):t[Di[r]]?e.push(t[Di[r]]):t[Oi[r]]&&e.push(t[Oi[r]]),e),[t[z.Day]])}function ua(e){return{...$i,...e}}function da(e){let t={"data-mode":e.mode??void 0,"data-required":`required`in e?e.required:void 0,"data-multiple-months":e.numberOfMonths&&e.numberOfMonths>1||void 0,"data-week-numbers":e.showWeekNumber||void 0,"data-broadcast-calendar":e.broadcastCalendar||void 0,"data-nav-layout":e.navLayout||void 0};return Object.entries(e).forEach(([e,n])=>{e.startsWith(`data-`)&&(t[e]=n)}),t}function fa(){let e={};for(let t in z)e[z[t]]=`rdp-${z[t]}`;for(let t in Di)e[Di[t]]=`rdp-${Di[t]}`;for(let t in Oi)e[Oi[t]]=`rdp-${Oi[t]}`;for(let t in ki)e[ki[t]]=`rdp-${ki[t]}`;return e}function pa(e,t,n){return(n??new _i(t)).formatMonthYear(e)}var ma=pa;function ha(e,t,n){return(n??new _i(t)).format(e,`d`)}function ga(e,t=vi){return t.format(e,`LLLL`)}function _a(e,t,n){return(n??new _i(t)).format(e,`cccccc`)}function va(e,t=vi){return e<10?t.formatNumber(`0${e.toLocaleString()}`):t.formatNumber(`${e.toLocaleString()}`)}function ya(){return``}function ba(e,t=vi){return t.format(e,`yyyy`)}var xa=ba,Sa=Ae({formatCaption:()=>pa,formatDay:()=>ha,formatMonthCaption:()=>ma,formatMonthDropdown:()=>ga,formatWeekNumber:()=>va,formatWeekNumberHeader:()=>ya,formatWeekdayName:()=>_a,formatYearCaption:()=>xa,formatYearDropdown:()=>ba});function Ca(e){return e?.formatMonthCaption&&!e.formatCaption&&(e.formatCaption=e.formatMonthCaption),e?.formatYearCaption&&!e.formatYearDropdown&&(e.formatYearDropdown=e.formatYearCaption),{...Sa,...e}}function wa(e,t,n,r){let i=(r??new _i(n)).format(e,`PPPP`);return t.today&&(i=`Today, ${i}`),t.selected&&(i=`${i}, selected`),i}var Ta=wa;function Ea(e,t,n){return(n??new _i(t)).formatMonthYear(e)}var Da=Ea;function Oa(e,t,n,r){let i=(r??new _i(n)).format(e,`PPPP`);return t?.today&&(i=`Today, ${i}`),i}function ka(e){return`Choose the Month`}function Aa(){return``}var ja=`Go to the Next Month`;function Ma(e,t){return ja}function Na(e){return`Go to the Previous Month`}function Pa(e,t,n){return(n??new _i(t)).format(e,`cccc`)}function Fa(e,t){return`Week ${e}`}function Ia(e){return`Week Number`}function La(e){return`Choose the Year`}var Ra=Ae({labelCaption:()=>Da,labelDay:()=>Ta,labelDayButton:()=>wa,labelGrid:()=>Ea,labelGridcell:()=>Oa,labelMonthDropdown:()=>ka,labelNav:()=>Aa,labelNext:()=>Ma,labelPrevious:()=>Na,labelWeekNumber:()=>Fa,labelWeekNumberHeader:()=>Ia,labelWeekday:()=>Pa,labelYearDropdown:()=>La}),za=(e,t,n)=>t||(n?typeof n==`function`?n:(...e)=>n:e);function Ba(e,t){let n=t.locale?.labels??{};return{...Ra,...e??{},labelDayButton:za(wa,e?.labelDayButton,n.labelDayButton),labelMonthDropdown:za(ka,e?.labelMonthDropdown,n.labelMonthDropdown),labelNext:za(Ma,e?.labelNext,n.labelNext),labelPrevious:za(Na,e?.labelPrevious,n.labelPrevious),labelWeekNumber:za(Fa,e?.labelWeekNumber,n.labelWeekNumber),labelYearDropdown:za(La,e?.labelYearDropdown,n.labelYearDropdown),labelGrid:za(Ea,e?.labelGrid,n.labelGrid),labelGridcell:za(Oa,e?.labelGridcell,n.labelGridcell),labelNav:za(Aa,e?.labelNav,n.labelNav),labelWeekNumberHeader:za(Ia,e?.labelWeekNumberHeader,n.labelWeekNumberHeader),labelWeekday:za(Pa,e?.labelWeekday,n.labelWeekday)}}function Va(e,t,n,r,i){let{startOfMonth:a,startOfYear:o,endOfYear:s,eachMonthOfInterval:c,getMonth:l}=i;return c({start:o(e),end:s(e)}).map(e=>{let o=r.formatMonthDropdown(e,i);return{value:l(e),label:o,disabled:t&&ea(n)||!1}})}function Ha(e,t={},n={}){let r={...t?.[z.Day]};return Object.entries(e).filter(([,e])=>e===!0).forEach(([e])=>{r={...r,...n?.[e]}}),r}function Ua(e,t,n,r){let i=r??e.today(),a=n?e.startOfBroadcastWeek(i,e):t?e.startOfISOWeek(i):e.startOfWeek(i),o=[];for(let t=0;t<7;t++){let n=e.addDays(a,t);o.push(n)}return o}function Wa(e,t,n,r,i=!1){if(!e||!t)return;let{startOfYear:a,endOfYear:o,eachYearOfInterval:s,getYear:c}=r,l=s({start:a(e),end:o(t)});return i&&l.reverse(),l.map(e=>{let t=n.formatYearDropdown(e,r);return{value:c(e),label:t,disabled:!1}})}function Ga(e,t={}){let{weekStartsOn:n,locale:r}=t,i=n??r?.options?.weekStartsOn??0,a=t=>{let n=typeof t==`number`||typeof t==`string`?new Date(t):t;return new ui(n.getFullYear(),n.getMonth(),n.getDate(),12,0,0,e)},o=e=>{let t=a(e);return new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0,0)};return{today:()=>a(ui.tz(e)),newDate:(t,n,r)=>new ui(t,n,r,12,0,0,e),startOfDay:e=>a(e),startOfWeek:(e,t)=>{let n=a(e),r=t?.weekStartsOn??i,o=(n.getDay()-r+7)%7;return n.setDate(n.getDate()-o),n},startOfISOWeek:e=>{let t=a(e),n=(t.getDay()-1+7)%7;return t.setDate(t.getDate()-n),t},startOfMonth:e=>{let t=a(e);return t.setDate(1),t},startOfYear:e=>{let t=a(e);return t.setMonth(0,1),t},endOfWeek:(e,t)=>{let n=a(e),r=(((t?.weekStartsOn??i)+6)%7-n.getDay()+7)%7;return n.setDate(n.getDate()+r),n},endOfISOWeek:e=>{let t=a(e),n=(7-t.getDay())%7;return t.setDate(t.getDate()+n),t},endOfMonth:e=>{let t=a(e);return t.setMonth(t.getMonth()+1,0),t},endOfYear:e=>{let t=a(e);return t.setMonth(11,31),t},eachMonthOfInterval:t=>{let n=a(t.start),r=a(t.end),i=[],o=new ui(n.getFullYear(),n.getMonth(),1,12,0,0,e),s=r.getFullYear()*12+r.getMonth();for(;o.getFullYear()*12+o.getMonth()<=s;)i.push(new ui(o,e)),o.setMonth(o.getMonth()+1,1);return i},addDays:(e,t)=>{let n=a(e);return n.setDate(n.getDate()+t),n},addWeeks:(e,t)=>{let n=a(e);return n.setDate(n.getDate()+t*7),n},addMonths:(e,t)=>{let n=a(e);return n.setMonth(n.getMonth()+t),n},addYears:(e,t)=>{let n=a(e);return n.setFullYear(n.getFullYear()+t),n},eachYearOfInterval:t=>{let n=a(t.start),r=a(t.end),i=[],o=new ui(n.getFullYear(),0,1,12,0,0,e);for(;o.getFullYear()<=r.getFullYear();)i.push(new ui(o,e)),o.setFullYear(o.getFullYear()+1,0,1);return i},getWeek:(e,t)=>pr(o(e),{weekStartsOn:t?.weekStartsOn??i,firstWeekContainsDate:t?.firstWeekContainsDate??r?.options?.firstWeekContainsDate??1}),getISOWeek:e=>ur(o(e)),differenceInCalendarDays:(e,t)=>jn(o(e),o(t)),differenceInCalendarMonths:(e,t)=>Bn(o(e),o(t))}}var Ka=e=>e instanceof HTMLElement?e:null,qa=e=>[...e.querySelectorAll(`[data-animated-month]`)??[]],Ja=e=>Ka(e.querySelector(`[data-animated-month]`)),Ya=e=>Ka(e.querySelector(`[data-animated-caption]`)),Xa=e=>Ka(e.querySelector(`[data-animated-weeks]`)),Za=e=>Ka(e.querySelector(`[data-animated-nav]`)),Qa=e=>Ka(e.querySelector(`[data-animated-weekdays]`));function $a(e,t,{classNames:n,months:r,focused:i,dateLib:a}){let o=(0,F.useRef)(null),s=(0,F.useRef)(r),c=(0,F.useRef)(!1);(0,F.useLayoutEffect)(()=>{let l=s.current;if(s.current=r,!t||!e.current||!(e.current instanceof HTMLElement)||r.length===0||l.length===0||r.length!==l.length)return;let u=a.isSameMonth(r[0].date,l[0].date),d=a.isAfter(r[0].date,l[0].date),f=d?n[ki.caption_after_enter]:n[ki.caption_before_enter],p=d?n[ki.weeks_after_enter]:n[ki.weeks_before_enter],m=o.current,h=e.current.cloneNode(!0);if(h instanceof HTMLElement?(qa(h).forEach(e=>{if(!(e instanceof HTMLElement))return;let t=Ja(e);t&&e.contains(t)&&e.removeChild(t);let n=Ya(e);n&&n.classList.remove(f);let r=Xa(e);r&&r.classList.remove(p)}),o.current=h):o.current=null,c.current||u||i)return;let g=m instanceof HTMLElement?qa(m):[],_=qa(e.current);if(_?.every(e=>e instanceof HTMLElement)&&g&&g.every(e=>e instanceof HTMLElement)){c.current=!0;let t=[];e.current.style.isolation=`isolate`;let r=Za(e.current);r&&(r.style.zIndex=`1`),_.forEach((i,a)=>{let o=g[a];if(!o)return;i.style.position=`relative`,i.style.overflow=`hidden`;let s=Ya(i);s&&s.classList.add(f);let l=Xa(i);l&&l.classList.add(p);let u=()=>{c.current=!1,e.current&&(e.current.style.isolation=``),r&&(r.style.zIndex=``),s&&s.classList.remove(f),l&&l.classList.remove(p),i.style.position=``,i.style.overflow=``,i.contains(o)&&i.removeChild(o)};t.push(u),o.style.pointerEvents=`none`,o.style.position=`absolute`,o.style.overflow=`hidden`,o.setAttribute(`aria-hidden`,`true`);let m=Qa(o);m&&(m.style.opacity=`0`);let h=Ya(o);h&&(h.classList.add(d?n[ki.caption_before_exit]:n[ki.caption_after_exit]),h.addEventListener(`animationend`,u));let _=Xa(o);_&&_.classList.add(d?n[ki.weeks_before_exit]:n[ki.weeks_after_exit]),i.insertBefore(o,i.firstChild)})}})}function eo(e,t,n,r){let i=e[0],a=e[e.length-1],{ISOWeek:o,fixedWeeks:s,broadcastCalendar:c}=n??{},{addDays:l,differenceInCalendarDays:u,differenceInCalendarMonths:d,endOfBroadcastWeek:f,endOfISOWeek:p,endOfMonth:m,endOfWeek:h,isAfter:g,startOfBroadcastWeek:_,startOfISOWeek:v,startOfWeek:y}=r,b=c?_(i,r):o?v(i):y(i),x=c?f(a):o?p(m(a)):h(m(a)),S=t&&(c?f(t):o?p(t):h(t)),C=u(S&&g(x,S)?S:x,b),w=d(a,i)+1,T=[];for(let e=0;e<=C;e++){let t=l(b,e);T.push(t)}let E=(c?35:42)*w;if(s&&T.length{let r=n.weeks.reduce((e,t)=>e.concat(t.days.slice()),t.slice());return e.concat(r.slice())},t.slice())}function no(e,t,n,r){let{numberOfMonths:i=1}=n,a=[];for(let n=0;nt)break;a.push(i)}return a}function ro(e,t,n,r){let{month:i,defaultMonth:a,today:o=r.today(),numberOfMonths:s=1}=e,c=i||a||o,{differenceInCalendarMonths:l,addMonths:u,startOfMonth:d}=r;return n&&l(n,c){let h=n.broadcastCalendar?d(m,r):n.ISOWeek?f(m):p(m),g=n.broadcastCalendar?a(m):n.ISOWeek?o(s(m)):c(s(m)),_=t.filter(e=>e>=h&&e<=g),v=n.broadcastCalendar?35:42;if(n.fixedWeeks&&_.length{let t=v-_.length;return e>g&&e<=i(g,t)});_.push(...e)}let y=new bi(m,_.reduce((e,t)=>{let i=n.ISOWeek?l(t):u(t),a=e.find(e=>e.weekNumber===i),o=new yi(t,m,r);return a?a.days.push(o):e.push(new xi(i,[o])),e},[]));return e.push(y),e},[]);return n.reverseMonths?m.reverse():m}function ao(e,t){let{startMonth:n,endMonth:r}=e,{startOfYear:i,startOfDay:a,startOfMonth:o,endOfMonth:s,addYears:c,endOfYear:l,newDate:u,today:d}=t,{fromYear:f,toYear:p,fromMonth:m,toMonth:h}=e;!n&&m&&(n=m),!n&&f&&(n=t.newDate(f,0,1)),!r&&h&&(r=h),!r&&p&&(r=u(p,11,31));let g=e.captionLayout===`dropdown`||e.captionLayout===`dropdown-years`;return n?n=o(n):f?n=u(f,0,1):!n&&g&&(n=i(c(e.today??d(),-100))),r?r=s(r):p?r=u(p,11,31):!r&&g&&(r=l(e.today??d())),[n&&a(n),r&&a(r)]}function oo(e,t,n,r){if(n.disableNavigation)return;let{pagedNavigation:i,numberOfMonths:a=1}=n,{startOfMonth:o,addMonths:s,differenceInCalendarMonths:c}=r,l=i?a:1,u=o(e);if(!t||!(c(t,e)e.concat(t.weeks.slice()),[].slice())}function lo(e,t){let[n,r]=(0,F.useState)(e);return[t===void 0?n:t,r]}function uo(e,t){let[n,r]=ao(e,t),{startOfMonth:i,endOfMonth:a}=t,o=ro(e,n,r,t),[s,c]=lo(o,e.month?o:void 0);(0,F.useEffect)(()=>{c(ro(e,n,r,t))},[e.timeZone]);let{months:l,weeks:u,days:d,previousMonth:f,nextMonth:p}=(0,F.useMemo)(()=>{let i=no(s,r,{numberOfMonths:e.numberOfMonths},t),o=io(i,eo(i,e.endMonth?a(e.endMonth):void 0,{ISOWeek:e.ISOWeek,fixedWeeks:e.fixedWeeks,broadcastCalendar:e.broadcastCalendar},t),{broadcastCalendar:e.broadcastCalendar,fixedWeeks:e.fixedWeeks,ISOWeek:e.ISOWeek,reverseMonths:e.reverseMonths},t);return{months:o,weeks:co(o),days:to(o),previousMonth:so(s,n,e,t),nextMonth:oo(s,r,e,t)}},[t,s.getTime(),r?.getTime(),n?.getTime(),e.disableNavigation,e.broadcastCalendar,e.endMonth?.getTime(),e.fixedWeeks,e.ISOWeek,e.numberOfMonths,e.pagedNavigation,e.reverseMonths]),{disableNavigation:m,onMonthChange:h}=e,g=e=>u.some(t=>t.days.some(t=>t.isEqualTo(e))),_=e=>{if(m)return;let t=i(e);n&&ti(r)&&(t=i(r)),c(t),h?.(t)};return{months:l,weeks:u,days:d,navStart:n,navEnd:r,previousMonth:f,nextMonth:p,goToMonth:_,goToDay:e=>{g(e)||_(e.date)}}}var fo;(function(e){e[e.Today=0]=`Today`,e[e.Selected=1]=`Selected`,e[e.LastFocused=2]=`LastFocused`,e[e.FocusedModifier=3]=`FocusedModifier`})(fo||={});function po(e){return!e[Di.disabled]&&!e[Di.hidden]&&!e[Di.outside]}function mo(e,t,n,r){let i,a=-1;for(let o of e){let e=t(o);po(e)&&(e[Di.focused]&&apo(t(e))),i}function ho(e,t,n,r,i,a,o){let{ISOWeek:s,broadcastCalendar:c}=a,{addDays:l,addMonths:u,addWeeks:d,addYears:f,endOfBroadcastWeek:p,endOfISOWeek:m,endOfWeek:h,max:g,min:_,startOfBroadcastWeek:v,startOfISOWeek:y,startOfWeek:b}=o,x={day:l,week:d,month:u,year:f,startOfWeek:e=>c?v(e,o):s?y(e):b(e),endOfWeek:e=>c?p(e):s?m(e):h(e)}[e](n,t===`after`?1:-1);return t===`before`&&r?x=g([r,x]):t===`after`&&i&&(x=_([i,x])),x}function go(e,t,n,r,i,a,o,s=0){if(s>365)return;let c=ho(e,t,n.date,r,i,a,o),l=!!(a.disabled&&sa(c,a.disabled,o)),u=!!(a.hidden&&sa(c,a.hidden,o)),d=new yi(c,c,o);return!l&&!u?d:go(e,t,d,r,i,a,o,s+1)}function _o(e,t,n,r,i){let{autoFocus:a}=e,[o,s]=(0,F.useState)(),c=mo(t.days,n,r||(()=>!1),o),[l,u]=(0,F.useState)(a?c:void 0);return{isFocusTarget:e=>!!c?.isEqualTo(e),setFocused:u,focused:l,blur:()=>{s(l),u(void 0)},moveFocus:(n,r)=>{if(!l)return;let a=go(n,r,l,t.navStart,t.navEnd,e,i);a&&(e.disableNavigation&&!t.days.some(e=>e.isEqualTo(a))||(t.goToDay(a),u(a)))}}}function vo(e,t){let{selected:n,required:r,onSelect:i}=e,[a,o]=lo(n,i?n:void 0),s=i?n:a,{isSameDay:c}=t,l=e=>s?.some(t=>c(t,e))??!1,{min:u,max:d}=e;return{selected:s,select:(e,t,n)=>{let a=[...s??[]];if(l(e)){if(s?.length===u||r&&s?.length===1)return;a=s?.filter(t=>!c(t,e))}else a=s?.length===d?[e]:[...a,e];return i||o(a),i?.(a,e,t,n),a},isSelected:l}}function yo(e,t,n=0,r=0,i=!1,a=vi){let{from:o,to:s}=t||{},{isSameDay:c,isAfter:l,isBefore:u}=a,d;if(!o&&!s)d={from:e,to:n>0?void 0:e};else if(o&&!s)d=c(o,e)?n===0?{from:o,to:e}:i?{from:o,to:void 0}:void 0:u(e,o)?{from:e,to:o}:{from:o,to:e};else if(o&&s)if(c(o,e)&&c(s,e))d=i?{from:o,to:s}:void 0;else if(c(o,e))d={from:o,to:n>0?void 0:e};else if(c(s,e))d={from:e,to:n>0?void 0:e};else if(u(e,o))d={from:e,to:s};else if(l(e,o))d={from:o,to:e};else if(l(e,s))d={from:o,to:e};else throw Error(`Invalid range`);if(d?.from&&d?.to){let t=a.differenceInCalendarDays(d.to,d.from);(r>0&&t>r||n>1&&ttypeof e!=`function`).some(t=>typeof t==`boolean`?t:n.isDate(t)?ea(e,t,!1,n):oa(t,n)?t.some(t=>ea(e,t,!1,n)):na(t)?t.from&&t.to?xo(e,{from:t.from,to:t.to},n):!1:aa(t)?bo(e,t.dayOfWeek,n):ta(t)?n.isAfter(t.before,t.after)?xo(e,{from:n.addDays(t.after,1),to:n.addDays(t.before,-1)},n):sa(e.from,t,n)||sa(e.to,t,n):ra(t)||ia(t)?sa(e.from,t,n)||sa(e.to,t,n):!1))return!0;let i=r.filter(e=>typeof e==`function`);if(i.length){let t=e.from,r=n.differenceInCalendarDays(e.to,e.from);for(let e=0;e<=r;e++){if(i.some(e=>e(t)))return!0;t=n.addDays(t,1)}}return!1}function Co(e,t){let{disabled:n,excludeDisabled:r,resetOnSelect:i,selected:a,required:o,onSelect:s}=e,[c,l]=lo(a,s?a:void 0),u=s?a:c;return{selected:u,select:(a,c,d)=>{let{min:f,max:p}=e,m;if(a){let e=u?.from,n=u?.to,r=!!e&&!!n,s=!!e&&!!n&&t.isSameDay(e,n)&&t.isSameDay(a,e);m=i&&(r||!u?.from)?!o&&s?void 0:{from:a,to:void 0}:yo(a,u,f,p,o,t)}return r&&n&&m?.from&&m.to&&So({from:m.from,to:m.to},n,t)&&(m.from=a,m.to=void 0),s||l(m),s?.(m,a,c,d),m},isSelected:e=>u&&ea(u,e,!1,t)}}function wo(e,t){let{selected:n,required:r,onSelect:i}=e,[a,o]=lo(n,i?n:void 0),s=i?n:a,{isSameDay:c}=t;return{selected:s,select:(e,t,n)=>{let a=e;return!r&&s&&s&&c(e,s)&&(a=void 0),i||o(a),i?.(a,e,t,n),a},isSelected:e=>s?c(s,e):!1}}function To(e,t){let n=wo(e,t),r=vo(e,t),i=Co(e,t);switch(e.mode){case`single`:return n;case`multiple`:return r;case`range`:return i;default:return}}function Eo(e,t){return e instanceof ui&&e.timeZone===t?e:new ui(e,t)}function Do(e,t,n){if(!n)return Eo(e,t);let r=Eo(e,t),i=new ui(r.getFullYear(),r.getMonth(),r.getDate(),12,0,0,t);return new Date(i.getTime())}function Oo(e,t,n){return typeof e==`boolean`||typeof e==`function`?e:e instanceof Date?Do(e,t,n):Array.isArray(e)?e.map(e=>e instanceof Date?Do(e,t,n):e):na(e)?{...e,from:e.from?Eo(e.from,t):e.from,to:e.to?Eo(e.to,t):e.to}:ta(e)?{before:Do(e.before,t,n),after:Do(e.after,t,n)}:ra(e)?{after:Do(e.after,t,n)}:ia(e)?{before:Do(e.before,t,n)}:e}function ko(e,t,n){return e&&(Array.isArray(e)?e.map(e=>Oo(e,t,n)):Oo(e,t,n))}function Ao(e){let t=e,n=t.timeZone;if(n&&(t={...e,timeZone:n},t.today&&=Eo(t.today,n),t.month&&=Eo(t.month,n),t.defaultMonth&&=Eo(t.defaultMonth,n),t.startMonth&&=Eo(t.startMonth,n),t.endMonth&&=Eo(t.endMonth,n),t.mode===`single`&&t.selected?t.selected=Eo(t.selected,n):t.mode===`multiple`&&t.selected?t.selected=t.selected?.map(e=>Eo(e,n)):t.mode===`range`&&t.selected&&(t.selected={from:t.selected.from?Eo(t.selected.from,n):t.selected.from,to:t.selected.to?Eo(t.selected.to,n):t.selected.to}),t.disabled!==void 0&&(t.disabled=ko(t.disabled,n)),t.hidden!==void 0&&(t.hidden=ko(t.hidden,n)),t.modifiers)){let e={};Object.keys(t.modifiers).forEach(r=>{e[r]=ko(t.modifiers?.[r],n)}),t.modifiers=e}let{components:r,formatters:i,labels:a,dateLib:o,locale:s,classNames:c}=(0,F.useMemo)(()=>{let e={...gi,...t.locale},n=t.broadcastCalendar?1:t.weekStartsOn,r=t.noonSafe&&t.timeZone?Ga(t.timeZone,{weekStartsOn:n,locale:e}):void 0,i=t.dateLib&&r?{...r,...t.dateLib}:t.dateLib??r,a=new _i({locale:e,weekStartsOn:n,firstWeekContainsDate:t.firstWeekContainsDate,useAdditionalWeekYearTokens:t.useAdditionalWeekYearTokens,useAdditionalDayOfYearTokens:t.useAdditionalDayOfYearTokens,timeZone:t.timeZone,numerals:t.numerals},i);return{dateLib:a,components:ua(t.components),formatters:Ca(t.formatters),labels:Ba(t.labels,a.options),locale:e,classNames:{...fa(),...t.classNames}}},[t.locale,t.broadcastCalendar,t.weekStartsOn,t.firstWeekContainsDate,t.useAdditionalWeekYearTokens,t.useAdditionalDayOfYearTokens,t.timeZone,t.numerals,t.dateLib,t.noonSafe,t.components,t.formatters,t.labels,t.classNames]);t.today||(t={...t,today:o.today()});let{captionLayout:l,mode:u,navLayout:d,numberOfMonths:f=1,onDayBlur:p,onDayClick:m,onDayFocus:h,onDayKeyDown:g,onDayMouseEnter:_,onDayMouseLeave:v,onNextClick:y,onPrevClick:b,showWeekNumber:x,styles:S}=t,{formatCaption:C,formatDay:w,formatMonthDropdown:T,formatWeekNumber:E,formatWeekNumberHeader:D,formatWeekdayName:O,formatYearDropdown:k}=i,ee=uo(t,o),{days:te,months:A,navStart:j,navEnd:ne,previousMonth:re,nextMonth:ie,goToMonth:ae}=ee,oe=ca(te,t,j,ne,o),{isSelected:se,select:ce,selected:le}=To(t,o)??{},{blur:ue,focused:de,isFocusTarget:M,moveFocus:fe,setFocused:pe}=_o(t,ee,oe,se??(()=>!1),o),{labelDayButton:me,labelGridcell:he,labelGrid:ge,labelMonthDropdown:_e,labelNav:ve,labelPrevious:ye,labelNext:be,labelWeekday:xe,labelWeekNumber:Se,labelWeekNumberHeader:Ce,labelYearDropdown:we}=a,Te=(0,F.useMemo)(()=>Ua(o,t.ISOWeek,t.broadcastCalendar,t.today),[o,t.ISOWeek,t.broadcastCalendar,t.today]),Ee=u!==void 0||m!==void 0,De=(0,F.useCallback)(()=>{re&&(ae(re),b?.(re))},[re,ae,b]),Oe=(0,F.useCallback)(()=>{ie&&(ae(ie),y?.(ie))},[ae,ie,y]),ke=(0,F.useCallback)((e,t)=>n=>{n.preventDefault(),n.stopPropagation(),pe(e),!t.disabled&&(ce?.(e.date,t,n),m?.(e.date,t,n))},[ce,m,pe]),Ae=(0,F.useCallback)((e,t)=>n=>{pe(e),h?.(e.date,t,n)},[h,pe]),je=(0,F.useCallback)((e,t)=>n=>{ue(),p?.(e.date,t,n)},[ue,p]),Me=(0,F.useCallback)((e,n)=>r=>{let i={ArrowLeft:[r.shiftKey?`month`:`day`,t.dir===`rtl`?`after`:`before`],ArrowRight:[r.shiftKey?`month`:`day`,t.dir===`rtl`?`before`:`after`],ArrowDown:[r.shiftKey?`year`:`week`,`after`],ArrowUp:[r.shiftKey?`year`:`week`,`before`],PageUp:[r.shiftKey?`year`:`month`,`before`],PageDown:[r.shiftKey?`year`:`month`,`after`],Home:[`startOfWeek`,`before`],End:[`endOfWeek`,`after`]};if(i[r.key]){r.preventDefault(),r.stopPropagation();let[e,t]=i[r.key];fe(e,t)}g?.(e.date,n,r)},[fe,g,t.dir]),Ne=(0,F.useCallback)((e,t)=>n=>{_?.(e.date,t,n)},[_]),Pe=(0,F.useCallback)((e,t)=>n=>{v?.(e.date,t,n)},[v]),Fe=(0,F.useCallback)(e=>t=>{let n=Number(t.target.value);ae(o.setMonth(o.startOfMonth(e),n))},[o,ae]),Ie=(0,F.useCallback)(e=>t=>{let n=Number(t.target.value);ae(o.setYear(o.startOfMonth(e),n))},[o,ae]),{className:Le,style:Re}=(0,F.useMemo)(()=>({className:[c[z.Root],t.className].filter(Boolean).join(` `),style:{...S?.[z.Root],...t.style}}),[c,t.className,t.style,S]),ze=da(t),Be=(0,F.useRef)(null);$a(Be,!!t.animate,{classNames:c,months:A,focused:de,dateLib:o});let Ve={dayPickerProps:t,selected:le,select:ce,isSelected:se,months:A,nextMonth:ie,previousMonth:re,goToMonth:ae,getModifiers:oe,components:r,classNames:c,styles:S,labels:a,formatters:i};return F.createElement(Li.Provider,{value:Ve},F.createElement(r.Root,{rootRef:t.animate?Be:void 0,className:Le,style:Re,dir:t.dir,id:t.id,lang:t.lang??s.code,nonce:t.nonce,title:t.title,role:t.role,"aria-label":t[`aria-label`],"aria-labelledby":t[`aria-labelledby`],...ze},F.createElement(r.Months,{className:c[z.Months],style:S?.[z.Months]},!t.hideNavigation&&!d&&F.createElement(r.Nav,{"data-animated-nav":t.animate?`true`:void 0,className:c[z.Nav],style:S?.[z.Nav],"aria-label":ve(),onPreviousClick:De,onNextClick:Oe,previousMonth:re,nextMonth:ie}),A.map((e,n)=>F.createElement(r.Month,{"data-animated-month":t.animate?`true`:void 0,className:c[z.Month],style:S?.[z.Month],key:n,displayIndex:n,calendarMonth:e},d===`around`&&!t.hideNavigation&&n===0&&F.createElement(r.PreviousMonthButton,{type:`button`,className:c[z.PreviousMonthButton],tabIndex:re?void 0:-1,"aria-disabled":re?void 0:!0,"aria-label":ye(re),onClick:De,"data-animated-button":t.animate?`true`:void 0},F.createElement(r.Chevron,{disabled:re?void 0:!0,className:c[z.Chevron],orientation:t.dir===`rtl`?`right`:`left`})),F.createElement(r.MonthCaption,{"data-animated-caption":t.animate?`true`:void 0,className:c[z.MonthCaption],style:S?.[z.MonthCaption],calendarMonth:e,displayIndex:n},l?.startsWith(`dropdown`)?F.createElement(r.DropdownNav,{className:c[z.Dropdowns],style:S?.[z.Dropdowns]},(()=>{let n=l===`dropdown`||l===`dropdown-months`?F.createElement(r.MonthsDropdown,{key:`month`,className:c[z.MonthsDropdown],"aria-label":_e(),classNames:c,components:r,disabled:!!t.disableNavigation,onChange:Fe(e.date),options:Va(e.date,j,ne,i,o),style:S?.[z.Dropdown],value:o.getMonth(e.date)}):F.createElement(`span`,{key:`month`},T(e.date,o)),a=l===`dropdown`||l===`dropdown-years`?F.createElement(r.YearsDropdown,{key:`year`,className:c[z.YearsDropdown],"aria-label":we(o.options),classNames:c,components:r,disabled:!!t.disableNavigation,onChange:Ie(e.date),options:Wa(j,ne,i,o,!!t.reverseYears),style:S?.[z.Dropdown],value:o.getYear(e.date)}):F.createElement(`span`,{key:`year`},k(e.date,o));return o.getMonthYearOrder()===`year-first`?[a,n]:[n,a]})(),F.createElement(`span`,{role:`status`,"aria-live":`polite`,style:{border:0,clip:`rect(0 0 0 0)`,height:`1px`,margin:`-1px`,overflow:`hidden`,padding:0,position:`absolute`,width:`1px`,whiteSpace:`nowrap`,wordWrap:`normal`}},C(e.date,o.options,o))):F.createElement(r.CaptionLabel,{className:c[z.CaptionLabel],role:`status`,"aria-live":`polite`},C(e.date,o.options,o))),d===`around`&&!t.hideNavigation&&n===f-1&&F.createElement(r.NextMonthButton,{type:`button`,className:c[z.NextMonthButton],tabIndex:ie?void 0:-1,"aria-disabled":ie?void 0:!0,"aria-label":be(ie),onClick:Oe,"data-animated-button":t.animate?`true`:void 0},F.createElement(r.Chevron,{disabled:ie?void 0:!0,className:c[z.Chevron],orientation:t.dir===`rtl`?`left`:`right`})),n===f-1&&d===`after`&&!t.hideNavigation&&F.createElement(r.Nav,{"data-animated-nav":t.animate?`true`:void 0,className:c[z.Nav],style:S?.[z.Nav],"aria-label":ve(),onPreviousClick:De,onNextClick:Oe,previousMonth:re,nextMonth:ie}),F.createElement(r.MonthGrid,{role:`grid`,"aria-multiselectable":u===`multiple`||u===`range`,"aria-label":ge(e.date,o.options,o)||void 0,className:c[z.MonthGrid],style:S?.[z.MonthGrid]},!t.hideWeekdays&&F.createElement(r.Weekdays,{"data-animated-weekdays":t.animate?`true`:void 0,className:c[z.Weekdays],style:S?.[z.Weekdays]},x&&F.createElement(r.WeekNumberHeader,{"aria-label":Ce(o.options),className:c[z.WeekNumberHeader],style:S?.[z.WeekNumberHeader],scope:`col`},D()),Te.map(e=>F.createElement(r.Weekday,{"aria-label":xe(e,o.options,o),className:c[z.Weekday],key:String(e),style:S?.[z.Weekday],scope:`col`},O(e,o.options,o)))),F.createElement(r.Weeks,{"data-animated-weeks":t.animate?`true`:void 0,className:c[z.Weeks],style:S?.[z.Weeks]},e.weeks.map(e=>F.createElement(r.Week,{className:c[z.Week],key:e.weekNumber,style:S?.[z.Week],week:e},x&&F.createElement(r.WeekNumber,{week:e,style:S?.[z.WeekNumber],"aria-label":Se(e.weekNumber,{locale:s}),className:c[z.WeekNumber],scope:`row`,role:`rowheader`},E(e.weekNumber,o)),e.days.map(e=>{let{date:n}=e,i=oe(e);if(i[Di.focused]=!i.hidden&&!!de?.isEqualTo(e),i[Oi.selected]=se?.(n)||i.selected,na(le)){let{from:e,to:t}=le;i[Oi.range_start]=!!(e&&t&&o.isSameDay(n,e)),i[Oi.range_end]=!!(e&&t&&o.isSameDay(n,t)),i[Oi.range_middle]=ea(le,n,!0,o)}let a=Ha(i,S,t.modifiersStyles),s=la(i,c,t.modifiersClassNames),l=!Ee&&!i.hidden?he(n,i,o.options,o):void 0;return F.createElement(r.Day,{key:`${e.isoDate}_${e.displayMonthId}`,day:e,modifiers:i,className:s.join(` `),style:a,role:`gridcell`,"aria-selected":i.selected||void 0,"aria-label":l,"data-day":e.isoDate,"data-month":e.outside?e.dateMonthId:void 0,"data-selected":i.selected||void 0,"data-disabled":i.disabled||void 0,"data-hidden":i.hidden||void 0,"data-outside":e.outside||void 0,"data-focused":i.focused||void 0,"data-today":i.today||void 0},!i.hidden&&Ee?F.createElement(r.DayButton,{className:c[z.DayButton],style:S?.[z.DayButton],type:`button`,day:e,modifiers:i,disabled:!i.focused&&i.disabled||void 0,"aria-disabled":i.focused&&i.disabled||void 0,tabIndex:M(e)?0:-1,"aria-label":me(n,i,o.options,o),onClick:ke(e,i),onBlur:je(e,i),onFocus:Ae(e,i),onKeyDown:Me(e,i),onMouseEnter:Ne(e,i),onMouseLeave:Pe(e,i)},w(n,o.options,o)):!i.hidden&&w(e.date,o.options,o))})))))))),t.footer&&F.createElement(r.Footer,{className:c[z.Footer],style:S?.[z.Footer],role:`status`,"aria-live":`polite`},t.footer)))}function jo({className:e,classNames:t,showOutsideDays:n=!0,captionLayout:r=`label`,buttonVariant:i=`ghost`,formatters:a,components:o,...s}){let c=fa();return(0,I.jsx)(Ao,{captionLayout:r,className:N(`group/calendar bg-background p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent`,String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,e),classNames:{root:N(`w-fit`,c.root),months:N(`relative flex flex-col gap-4 md:flex-row`,c.months),month:N(`flex w-full flex-col gap-4`,c.month),nav:N(`absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1`,c.nav),button_previous:N(qe({variant:i}),`size-(--cell-size) select-none p-0 aria-disabled:opacity-50`,c.button_previous),button_next:N(qe({variant:i}),`size-(--cell-size) select-none p-0 aria-disabled:opacity-50`,c.button_next),month_caption:N(`flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)`,c.month_caption),dropdowns:N(`flex h-(--cell-size) w-full items-center justify-center gap-1.5 font-medium text-sm`,c.dropdowns),dropdown_root:N(`relative rounded-md border border-input shadow-xs has-focus:border-ring has-focus:ring-[3px] has-focus:ring-ring/50`,c.dropdown_root),dropdown:N(`absolute inset-0 bg-popover opacity-0`,c.dropdown),caption_label:N(`select-none font-medium`,r===`label`?`text-sm`:`flex h-8 items-center gap-1 rounded-md pr-1 pl-2 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground`,c.caption_label),table:`w-full border-collapse`,weekdays:N(`flex`,c.weekdays),weekday:N(`flex-1 select-none rounded-md font-normal text-[0.8rem] text-muted-foreground`,c.weekday),week:N(`mt-2 flex w-full`,c.week),week_number_header:N(`w-(--cell-size) select-none`,c.week_number_header),week_number:N(`select-none text-[0.8rem] text-muted-foreground`,c.week_number),day:N(`group/day relative aspect-square h-full w-full select-none p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md`,s.showWeekNumber?`[&:nth-child(2)[data-selected=true]_button]:rounded-l-md`:`[&:first-child[data-selected=true]_button]:rounded-l-md`,c.day),range_start:N(`rounded-l-md bg-accent`,c.range_start),range_middle:N(`rounded-none`,c.range_middle),range_end:N(`rounded-r-md bg-accent`,c.range_end),today:N(`rounded-md bg-accent text-accent-foreground data-[selected=true]:rounded-none`,c.today),outside:N(`text-muted-foreground aria-selected:text-muted-foreground`,c.outside),disabled:N(`text-muted-foreground opacity-50`,c.disabled),hidden:N(`invisible`,c.hidden),...t},components:{Root:({className:e,rootRef:t,...n})=>(0,I.jsx)(`div`,{className:N(e),"data-slot":`calendar`,ref:t,...n}),Chevron:({className:e,orientation:t,...n})=>t===`left`?(0,I.jsx)(gt,{className:N(`size-4`,e),...n}):t===`right`?(0,I.jsx)(lt,{className:N(`size-4`,e),...n}):(0,I.jsx)(wt,{className:N(`size-4`,e),...n}),DayButton:Mo,WeekNumber:({children:e,...t})=>(0,I.jsx)(`td`,{...t,children:(0,I.jsx)(`div`,{className:`flex size-(--cell-size) items-center justify-center text-center`,children:e})}),...o},formatters:{formatMonthDropdown:e=>e.toLocaleString(`default`,{month:`short`}),...a},showOutsideDays:n,...s})}function Mo({className:e,day:t,modifiers:n,...r}){let i=fa(),a=F.useRef(null);return F.useEffect(()=>{n.focused&&a.current?.focus()},[n.focused]),(0,I.jsx)(Ye,{className:N(`flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-start=true]:rounded-l-md data-[range-end=true]:bg-primary data-[range-middle=true]:bg-accent data-[range-start=true]:bg-primary data-[selected-single=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:text-accent-foreground data-[range-start=true]:text-primary-foreground data-[selected-single=true]:text-primary-foreground group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground [&>span]:text-xs [&>span]:opacity-70`,i.day,e),"data-day":t.date.toLocaleDateString(),"data-range-end":n.range_end,"data-range-middle":n.range_middle,"data-range-start":n.range_start,"data-selected-single":n.selected&&!n.range_start&&!n.range_end&&!n.range_middle,ref:a,size:`icon`,variant:`ghost`,...r})}function No({selected:t,onSelect:n}){let r=ie()===`zh-TW`?Qr:cr,i=new Date,a=[{label:e(),range:{from:i,to:i}},{label:x(),range:{from:Wr(i,1),to:Wr(i,1)}},{label:ae(),range:{from:Wr(i,6),to:i}},{label:ee(),range:{from:Wr(i,29),to:i}},{label:j(),range:{from:Wn(i),to:i}},{label:f(),range:{from:Wn(qr(i,1)),to:Vn(qr(i,1))}}],o;return t?.from&&t?.to?o=`${Fr(t.from,`PP`,{locale:r})} – ${Fr(t.to,`PP`,{locale:r})}`:t?.from&&(o=Fr(t.from,`PP`,{locale:r})),(0,I.jsxs)(pt,{children:[(0,I.jsx)(ft,{asChild:!0,children:(0,I.jsxs)(Ye,{className:`w-auto justify-start text-start font-normal data-[empty=true]:text-muted-foreground`,"data-empty":!o,size:`sm`,variant:`outline`,children:[o??(0,I.jsx)(`span`,{children:pe()}),(0,I.jsx)(sn,{className:`ms-2 h-4 w-4 opacity-50`})]})}),(0,I.jsxs)(dt,{align:`end`,className:`flex w-auto gap-0 p-0`,children:[(0,I.jsx)(`div`,{className:`flex flex-col gap-1 border-r p-3`,children:a.map(e=>(0,I.jsx)(Ye,{className:`justify-start`,onClick:()=>n(e.range),size:`sm`,variant:`ghost`,children:e.label},e.label))}),(0,I.jsx)(jo,{captionLayout:`dropdown`,disabled:e=>e>new Date||e{var{children:n,width:r,height:i,viewBox:a,className:o,style:s,title:c,desc:l}=e,u=Yo(e,qo),d=a||{width:r,height:i,x:0,y:0},f=P(`recharts-surface`,o);return F.createElement(`svg`,Jo({},Go(u),{className:f,width:r,height:i,style:s,viewBox:`${d.x} ${d.y} ${d.width} ${d.height}`,ref:t}),F.createElement(`title`,null,c),F.createElement(`desc`,null,l),n)}),Qo=[`children`,`className`];function $o(){return $o=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:n,className:r}=e,i=es(e,Qo),a=P(`recharts-layer`,r);return F.createElement(`g`,$o({className:a},Go(i),{ref:t}),n)}),rs=(0,F.createContext)(null),is=()=>(0,F.useContext)(rs);function B(e){return function(){return e}}var as=Math.cos,os=Math.sin,ss=Math.sqrt,cs=Math.PI;cs/2;var ls=2*cs,us=Math.PI,ds=2*us,fs=1e-6,ps=ds-fs;function ms(e){this._+=e[0];for(let t=1,n=e.length;t=0))throw Error(`invalid digits: ${e}`);if(t>15)return ms;let n=10**t;return function(e){this._+=e[0];for(let t=1,r=e.length;tfs)if(!(Math.abs(u*s-c*l)>fs)||!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((us-Math.acos((m+d-h)/(2*g*_)))/2),y=v/_,b=v/g;Math.abs(y-1)>fs&&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)>fs||Math.abs(this._y1-l)>fs)&&this._append`L${c},${l}`,n&&(d<0&&(d=d%ds+ds),d>ps?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>fs&&this._append`A${n},${n},0,${+(d>=us)},${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._}};function _s(){return new gs}_s.prototype=gs.prototype;function vs(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 gs(t)}Array.prototype.slice;function ys(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function bs(e){this._context=e}bs.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);break}}};function xs(e){return new bs(e)}function Ss(e){return e[0]}function Cs(e){return e[1]}function ws(e,t){var n=B(!0),r=null,i=xs,a=null,o=vs(s);e=typeof e==`function`?e:e===void 0?Ss:B(e),t=typeof t==`function`?t:t===void 0?Cs:B(t);function s(s){var c,l=(s=ys(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 ws().defined(i).curve(o).context(a)}return l.x=function(t){return arguments.length?(e=typeof t==`function`?t:B(+t),r=null,l):e},l.x0=function(t){return arguments.length?(e=typeof t==`function`?t:B(+t),l):e},l.x1=function(e){return arguments.length?(r=e==null?null:typeof e==`function`?e:B(+e),l):r},l.y=function(e){return arguments.length?(t=typeof e==`function`?e:B(+e),n=null,l):t},l.y0=function(e){return arguments.length?(t=typeof e==`function`?e:B(+e),l):t},l.y1=function(e){return arguments.length?(n=e==null?null:typeof e==`function`?e:B(+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:B(!!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 Es=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);break}this._x0=e,this._y0=t}};function Ds(e){return new Es(e,!0)}function Os(e){return new Es(e,!1)}var ks={draw(e,t){let n=ss(t/cs);e.moveTo(n,0),e.arc(0,0,n,0,ls)}},As={draw(e,t){let n=ss(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},js=ss(1/3),Ms=js*2,Ns={draw(e,t){let n=ss(t/Ms),r=n*js;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},Ps={draw(e,t){let n=ss(t),r=-n/2;e.rect(r,r,n,n)}},Fs=.8908130915292852,Is=os(cs/10)/os(7*cs/10),Ls=os(ls/10)*Is,Rs=-as(ls/10)*Is,zs={draw(e,t){let n=ss(t*Fs),r=Ls*n,i=Rs*n;e.moveTo(0,-n),e.lineTo(r,i);for(let t=1;t<5;++t){let a=ls*t/5,o=as(a),s=os(a);e.lineTo(s*n,-o*n),e.lineTo(o*r-s*i,s*r+o*i)}e.closePath()}},Bs=ss(3),Vs={draw(e,t){let n=-ss(t/(Bs*3));e.moveTo(0,n*2),e.lineTo(-Bs*n,-n),e.lineTo(Bs*n,-n),e.closePath()}},Hs=-.5,Us=ss(3)/2,Ws=1/ss(12),Gs=(Ws/2+1)*3,Ks={draw(e,t){let n=ss(t/Gs),r=n/2,i=n*Ws,a=r,o=n*Ws+n,s=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(s,c),e.lineTo(Hs*r-Us*i,Us*r+Hs*i),e.lineTo(Hs*a-Us*o,Us*a+Hs*o),e.lineTo(Hs*s-Us*c,Us*s+Hs*c),e.lineTo(Hs*r+Us*i,Hs*i-Us*r),e.lineTo(Hs*a+Us*o,Hs*o-Us*a),e.lineTo(Hs*s+Us*c,Hs*c-Us*s),e.closePath()}};function qs(e,t){let n=null,r=vs(i);e=typeof e==`function`?e:B(e||ks),t=typeof t==`function`?t:B(t===void 0?64:+t);function i(){let i;if(n||=i=r(),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),i)return n=null,i+``||null}return i.type=function(t){return arguments.length?(e=typeof t==`function`?t:B(t),i):e},i.size=function(e){return arguments.length?(t=typeof e==`function`?e:B(+e),i):t},i.context=function(e){return arguments.length?(n=e??null,i):n},i}function Js(){}function Ys(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 Xs(e){this._context=e}Xs.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:Ys(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(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:Ys(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Zs(e){return new Xs(e)}function Qs(e){this._context=e}Qs.prototype={areaStart:Js,areaEnd:Js,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);break}},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:Ys(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function $s(e){return new Qs(e)}function ec(e){this._context=e}ec.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:Ys(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function tc(e){return new ec(e)}function nc(e){this._context=e}nc.prototype={areaStart:Js,areaEnd:Js,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 rc(e){return new nc(e)}function ic(e){return e<0?-1:1}function ac(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(ic(a)+ic(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function oc(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function sc(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 cc(e){this._context=e}cc.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:sc(this,this._t0,oc(this,this._t0));break}(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,sc(this,oc(this,n=ac(this,e,t)),n);break;default:sc(this,this._t0,n=ac(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};function lc(e){this._context=new uc(e)}(lc.prototype=Object.create(cc.prototype)).point=function(e,t){cc.prototype.point.call(this,t,e)};function uc(e){this._context=e}uc.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 dc(e){return new cc(e)}function fc(e){return new lc(e)}function pc(e){this._context=e}pc.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=mc(e),i=mc(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)}break}this._x=e,this._y=t}};function _c(e){return new gc(e,.5)}function vc(e){return new gc(e,0)}function yc(e){return new gc(e,1)}function bc(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 Sc(e,t){return e[t]}function Cc(e){let t=[];return t.key=e,t}function wc(){var e=B([]),t=xc,n=bc,r=Sc;function i(i){var a=Array.from(e.apply(this,arguments),Cc),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;n0)||!((a=(i=e[t[0]]).length)>0))){for(var n=0,r=1,i,a,o;r{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return e===`__proto__`}e.isUnsafeProperty=t})),kc=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){switch(typeof e){case`number`:case`symbol`:return!1;case`string`:return e.includes(`.`)||e.includes(`[`)||e.includes(`]`)}}e.isDeepKey=t})),Ac=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return typeof e==`string`||typeof e==`symbol`?e:Object.is(e?.valueOf?.(),-0)?`-0`:String(e)}e.toKey=t})),jc=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){if(e==null)return``;if(typeof e==`string`)return e;if(Array.isArray(e))return e.map(t).join(`,`);let n=String(e);return n===`0`&&Object.is(Number(e),-0)?`-0`:n}e.toString=t})),Mc=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=jc(),n=Ac();function r(e){if(Array.isArray(e))return e.map(n.toKey);if(typeof e==`symbol`)return[e];e=t.toString(e);let r=[],i=e.length;if(i===0)return r;let a=0,o=``,s=``,c=!1;for(e.charCodeAt(0)===46&&(r.push(``),a++);a{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Oc(),n=kc(),r=Ac(),i=Mc();function a(e,s,c){if(e==null)return c;switch(typeof s){case`string`:{if(t.isUnsafeProperty(s))return c;let r=e[s];return r===void 0?n.isDeepKey(s)?a(e,i.toPath(s),c):c:r}case`number`:case`symbol`:{typeof s==`number`&&(s=r.toKey(s));let t=e[s];return t===void 0?c:t}default:{if(Array.isArray(s))return o(e,s,c);if(s=Object.is(s?.valueOf(),-0)?`-0`:String(s),t.isUnsafeProperty(s))return c;let n=e[s];return n===void 0?c:n}}}function o(e,n,r){if(n.length===0)return r;let i=e;for(let e=0;e{t.exports=Nc().get})),Fc=4;function Ic(e){var t=10**(arguments.length>1&&arguments[1]!==void 0?arguments[1]:Fc),n=Math.round(e*t)/t;return Object.is(n,-0)?0:n}function Lc(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+Ic(i)+n},``)}var Rc=Se(Pc()),zc=e=>e===0?0:e>0?1:-1,Bc=e=>typeof e==`number`&&e!=+e,Vc=e=>typeof e==`string`&&e.indexOf(`%`)===e.length-1,V=e=>(typeof e==`number`||e instanceof Number)&&!Bc(e),Hc=e=>V(e)||typeof e==`string`,Uc=0,Wc=e=>{var t=++Uc;return`${e||``}${t}`},Gc=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]:!1;if(!V(e)&&typeof e!=`string`)return n;var i;if(Vc(e)){if(t==null)return n;var a=e.indexOf(`%`);i=t*parseFloat(e.slice(0,a))/100}else i=+e;return Bc(i)&&(i=n),r&&t!=null&&i>t&&(i=t),i},Kc=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,n={},r=0;re&&(typeof t==`function`?t(e):(0,Rc.default)(e,t))===n)}var U=e=>e==null,Jc=e=>U(e)?e:`${e.charAt(0).toUpperCase()}${e.slice(1)}`;function Yc(e){return e!=null}function Xc(){}var Zc=[`type`,`size`,`sizeType`];function Qc(){return Qc=Object.assign?Object.assign.bind():function(e){for(var t=1;tol[`symbol${Jc(e)}`]||ks,ll=(e,t,n)=>{if(t===`area`)return e;switch(n){case`cross`:return 5*e*e/9;case`diamond`:return .5*e*e/Math.sqrt(3);case`square`:return e*e;case`star`:var r=18*sl;return 1.25*e*e*(Math.tan(r)-Math.tan(r*2)*Math.tan(r)**2);case`triangle`:return Math.sqrt(3)*e*e/4;case`wye`:return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}},ul=(e,t)=>{ol[`symbol${Jc(e)}`]=t},dl=e=>{var{type:t=`circle`,size:n=64,sizeType:r=`area`}=e,i=el(el({},il(e,Zc)),{},{type:t,size:n,sizeType:r}),a=`circle`;typeof t==`string`&&(a=t);var o=()=>{var e=cl(a),t=qs().type(e).size(ll(n,r,a))();if(t!==null)return t},{className:s,cx:c,cy:l}=i,u=Go(i);return V(c)&&V(l)&&V(n)?F.createElement(`path`,Qc({},u,{className:P(`recharts-symbols`,s),transform:`translate(${c}, ${l})`,d:o()})):null};dl.registerSymbol=ul;var fl=e=>`radius`in e&&`startAngle`in e&&`endAngle`in e,pl=(e,t)=>{if(!e||typeof e==`function`||typeof e==`boolean`)return null;var n=e;if((0,F.isValidElement)(e)&&(n=e.props),typeof n!=`object`&&typeof n!=`function`)return null;var r={};return Object.keys(n).forEach(e=>{zo(e)&&typeof n[e]==`function`&&(r[e]=t||(t=>n[e](n,t)))}),r},ml=(e,t,n)=>r=>(e(t,n,r),null),hl=(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];zo(i)&&typeof a==`function`&&(r||={},r[i]=ml(a,t,n))}),r};function gl(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 _l(e){for(var t=1;t(e[t]===void 0&&r[t]!==void 0&&(e[t]=r[t]),e),n)}function Sl(){return Sl=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var d=t.formatter||i,f=P({"recharts-legend-item":!0,[`legend-item-${r}`]:!0,inactive:t.inactive});if(t.type===`none`)return null;var p=typeof s==`object`?wl({},s):{};p.color=t.inactive?a:p.color||t.color;var m=d?d(t.value,t,r):t.value;return F.createElement(`li`,Sl({className:f,style:l,key:`legend-item-${r}`},hl(e,t,r)),F.createElement(Zo,{width:n,height:n,viewBox:c,style:u,"aria-label":`${t.value} legend icon`},F.createElement(jl,{data:t,iconType:o,inactiveColor:a})),F.createElement(`span`,{className:`recharts-legend-item-text`,style:p},m))})}var Nl=e=>{var t=xl(e,kl),{payload:n,layout:r,align:i}=t;if(!n||!n.length)return null;var a={padding:0,margin:0,textAlign:r===`horizontal`?i:`left`};return F.createElement(`ul`,{className:`recharts-default-legend`,style:a},F.createElement(Ml,Sl({},t,{payload:n})))},Pl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e,t){let n=new Map;for(let r=0;r{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e,t){return function(...n){return e.apply(this,n.slice(0,t))}}e.ary=t})),Il=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return e}e.identity=t})),Ll=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return Number.isSafeInteger(e)&&e>=0}e.isLength=t})),Rl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Ll();function n(e){return e!=null&&typeof e!=`function`&&t.isLength(e.length)}e.isArrayLike=n})),zl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return typeof e==`object`&&!!e}e.isObjectLike=t})),Bl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Rl(),n=zl();function r(e){return n.isObjectLike(e)&&t.isArrayLike(e)}e.isArrayLikeObject=r})),Vl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Nc();function n(e){return function(n){return t.get(n,e)}}e.property=n})),Hl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return e!==null&&(typeof e==`object`||typeof e==`function`)}e.isObject=t})),Ul=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return e==null||typeof e!=`object`&&typeof e!=`function`}e.isPrimitive=t})),Wl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}e.isEqualsSameValueZero=t})),Gl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Hl(),n=Ul(),r=Wl();function i(e,t,n){return typeof n==`function`?a(e,t,function e(t,r,i,o,s,c){let l=n(t,r,i,o,s,c);return l===void 0?a(t,r,e,c):!!l},new Map):i(e,t,()=>void 0)}function a(e,n,i,s){if(n===e)return!0;switch(typeof n){case`object`:return o(e,n,i,s);case`function`:return Object.keys(n).length>0?a(e,{...n},i,s):r.isEqualsSameValueZero(e,n);default:return t.isObject(e)?typeof n==`string`?n===``:!0:r.isEqualsSameValueZero(e,n)}}function o(e,t,r,i){if(t==null)return!0;if(Array.isArray(t))return c(e,t,r,i);if(t instanceof Map)return s(e,t,r,i);if(t instanceof Set)return l(e,t,r,i);let a=Object.keys(t);if(e==null||n.isPrimitive(e))return a.length===0;if(a.length===0)return!0;if(i?.has(t))return i.get(t)===e;i?.set(t,e);try{for(let o=0;o{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Gl();function n(e,n){return t.isMatchWith(e,n,()=>void 0)}e.isMatch=n})),ql=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}e.getSymbols=t})),Jl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}e.getTag=t})),Yl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`}),e.argumentsTag=`[object Arguments]`,e.arrayBufferTag=`[object ArrayBuffer]`,e.arrayTag=`[object Array]`,e.bigInt64ArrayTag=`[object BigInt64Array]`,e.bigUint64ArrayTag=`[object BigUint64Array]`,e.booleanTag=`[object Boolean]`,e.dataViewTag=`[object DataView]`,e.dateTag=`[object Date]`,e.errorTag=`[object Error]`,e.float32ArrayTag=`[object Float32Array]`,e.float64ArrayTag=`[object Float64Array]`,e.functionTag=`[object Function]`,e.int16ArrayTag=`[object Int16Array]`,e.int32ArrayTag=`[object Int32Array]`,e.int8ArrayTag=`[object Int8Array]`,e.mapTag=`[object Map]`,e.numberTag=`[object Number]`,e.objectTag=`[object Object]`,e.regexpTag=`[object RegExp]`,e.setTag=`[object Set]`,e.stringTag=`[object String]`,e.symbolTag=`[object Symbol]`,e.uint16ArrayTag=`[object Uint16Array]`,e.uint32ArrayTag=`[object Uint32Array]`,e.uint8ArrayTag=`[object Uint8Array]`,e.uint8ClampedArrayTag=`[object Uint8ClampedArray]`})),Xl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}e.isTypedArray=t})),Zl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=ql(),n=Jl(),r=Yl(),i=Ul(),a=Xl();function o(e,t){return s(e,void 0,e,new Map,t)}function s(e,t,n,r=new Map,o=void 0){let u=o?.(e,t,n,r);if(u!==void 0)return u;if(i.isPrimitive(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 i=0;i{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Zl();function n(e){return t.cloneDeepWithImpl(e,void 0,e,new Map,void 0)}e.cloneDeep=n})),$l=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Kl(),n=Ql();function r(e){return e=n.cloneDeep(e),n=>t.isMatch(n,e)}e.matches=r})),eu=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Zl(),n=Jl(),r=Yl();function i(e,i){return t.cloneDeepWith(e,(a,o,s,c)=>{let l=i?.(a,o,s,c);if(l!==void 0)return l;if(typeof e==`object`){if(n.getTag(e)===r.objectTag&&typeof e.constructor!=`function`){let n={};return c.set(e,n),t.copyProperties(n,e,s,c),n}switch(Object.prototype.toString.call(e)){case r.numberTag:case r.stringTag:case r.booleanTag:{let n=new e.constructor(e?.valueOf());return t.copyProperties(n,e),n}case r.argumentsTag:{let n={};return t.copyProperties(n,e),n.length=e.length,n[Symbol.iterator]=e[Symbol.iterator],n}default:return}}})}e.cloneDeepWith=i})),tu=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=eu();function n(e){return t.cloneDeepWith(e)}e.cloneDeep=n})),nu=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=/^(?:0|[1-9]\d*)$/;function n(e,n=2**53-1){switch(typeof e){case`number`:return Number.isInteger(e)&&e>=0&&e{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Jl();function n(e){return typeof e==`object`&&!!e&&t.getTag(e)===`[object Arguments]`}e.isArguments=n})),iu=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=kc(),n=nu(),r=ru(),i=Mc();function a(e,a){let o;if(o=Array.isArray(a)?a:typeof a==`string`&&t.isDeepKey(a)&&e?.[a]==null?i.toPath(a):[a],o.length===0)return!1;let s=e;for(let e=0;e{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Kl(),n=Ac(),r=tu(),i=Nc(),a=iu();function o(e,o){switch(typeof e){case`object`:Object.is(e?.valueOf(),-0)&&(e=`-0`);break;case`number`:e=n.toKey(e);break}return o=r.cloneDeep(o),function(n){let r=i.get(n,e);return r===void 0?a.has(n,e):o===void 0?r===void 0:t.isMatch(r,o)}}e.matchesProperty=o})),ou=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Il(),n=Vl(),r=$l(),i=au();function a(e){if(e==null)return t.identity;switch(typeof e){case`function`:return e;case`object`:return Array.isArray(e)&&e.length===2?i.matchesProperty(e[0],e[1]):r.matches(e);case`string`:case`symbol`:case`number`:return n.property(e)}}e.iteratee=a})),su=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Pl(),n=Fl(),r=Il(),i=Bl(),a=ou();function o(e,o=r.identity){return i.isArrayLikeObject(e)?t.uniqBy(Array.from(e),n.ary(a.iteratee(o),1)):[]}e.uniqBy=o})),cu=Se(M(((e,t)=>{t.exports=su().uniqBy}))());function lu(e,t,n){return t===!0?(0,cu.default)(e,n):typeof t==`function`?(0,cu.default)(e,t):e}var uu=(0,F.createContext)(null),du=ze(),fu=e=>e,W=()=>{var e=(0,F.useContext)(uu);return e?e.store.dispatch:fu},pu=()=>{},mu=()=>pu,hu=(e,t)=>e===t;function G(e){var t=(0,F.useContext)(uu),n=(0,F.useMemo)(()=>t?t=>{if(t!=null)return e(t)}:pu,[t,e]);return(0,du.useSyncExternalStoreWithSelector)(t?t.subscription.addNestedSub:mu,t?t.store.getState:pu,t?t.store.getState:pu,n,hu)}function gu(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!=`function`)throw TypeError(t)}function _u(e,t=`expected an object, instead received ${typeof e}`){if(typeof e!=`object`)throw TypeError(t)}function vu(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 yu=e=>Array.isArray(e)?e:[e];function bu(e){let t=Array.isArray(e[0])?e[0]:e;return vu(t,`createSelector expects all input-selectors to be functions, but received the following types: `),t}function xu(e,t){let n=[],{length:r}=e;for(let i=0;i{n=Eu(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function Ou(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()),gu(o,`createSelector expects an output function after the inputs, but received: [${typeof o}]`);let{memoize:s,memoizeOptions:c=[],argsMemoize:l=Du,argsMemoizeOptions:u=[],devModeChecks:d={}}={...n,...a},f=yu(c),p=yu(u),m=bu(e),h=s(function(){return t++,o.apply(null,arguments)},...f),g=l(function(){r++;let e=xu(m,arguments);return i=h.apply(null,e),i},...p);return Object.assign(g,{resultFunc:o,memoizedResultFunc:h,dependencies:m,dependencyRecomputations:()=>r,resetDependencyRecomputations:()=>{r=0},lastResult:()=>i,recomputations:()=>t,resetRecomputations:()=>{t=0},memoize:s,argsMemoize:l})};return Object.assign(r,{withTypes:()=>r}),r}var K=Ou(Du),ku=Object.assign((e,t=K)=>{_u(e,`createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof e}`);let n=Object.keys(e);return t(n.map(t=>e[t]),(...e)=>e.reduce((e,t,r)=>(e[n[r]]=t,e),{}))},{withTypes:()=>ku}),Au=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return typeof e==`symbol`?1:e===null?2:e===void 0?3:e===e?0:4}e.compareValues=(e,n,r)=>{if(e!==n){let i=t(e),a=t(n);if(i===a&&i===0){if(en)return r===`desc`?-1:1}return r===`desc`?a-i:i-a}return 0}})),ju=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return typeof e==`symbol`||e instanceof Symbol}e.isSymbol=t})),Mu=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=ju(),n=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,r=/^\w*$/;function i(e,i){return Array.isArray(e)?!1:typeof e==`number`||typeof e==`boolean`||e==null||t.isSymbol(e)?!0:typeof e==`string`&&(r.test(e)||!n.test(e))||i!=null&&Object.hasOwn(i,e)}e.isKey=i})),Nu=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Au(),n=Mu(),r=Mc();function i(e,i,a,o){if(e==null)return[];a=o?void 0:a,Array.isArray(e)||(e=Object.values(e)),Array.isArray(i)||(i=i==null?[null]:[i]),i.length===0&&(i=[null]),Array.isArray(a)||(a=a==null?[]:[a]),a=a.map(e=>String(e));let s=(e,t)=>{let n=e;for(let e=0;et==null||e==null?t:typeof e==`object`&&`key`in e?Object.hasOwn(t,e.key)?t[e.key]:s(t,e.path):typeof e==`function`?e(t):Array.isArray(e)?s(t,e):typeof t==`object`?t[e]:t,l=i.map(e=>(Array.isArray(e)&&e.length===1&&(e=e[0]),e==null||typeof e==`function`||Array.isArray(e)||n.isKey(e)?e:{key:e,path:r.toPath(e)}));return e.map(e=>({original:e,criteria:l.map(t=>c(t,e))})).slice().sort((e,n)=>{for(let r=0;re.original)}e.orderBy=i})),Pu=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e,t=1){let n=[],r=Math.floor(t),i=(e,t)=>{for(let a=0;a{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=nu(),n=Rl(),r=Hl(),i=Wl();function a(e,a,o){return r.isObject(o)&&(typeof a==`number`&&n.isArrayLike(o)&&t.isIndex(a)&&a{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Nu(),n=Pu(),r=Fu();function i(e,...i){let a=i.length;return a>1&&r.isIterateeCall(e,i[0],i[1])?i=[]:a>2&&r.isIterateeCall(i[0],i[1],i[2])&&(i=[i[0]]),t.orderBy(e,n.flatten(i),[`asc`])}e.sortBy=i})),Lu=Se(M(((e,t)=>{t.exports=Iu().sortBy}))()),Ru=e=>e.legend.settings,zu=e=>e.legend.size,Bu=K([e=>e.legend.payload,Ru],(e,t)=>{var{itemSorter:n}=t,r=e.flat(1);return n?(0,Lu.default)(r,n):r});function Vu(){return G(Bu)}var Hu=1;function Uu(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],[t,n]=(0,F.useState)({height:0,left:0,top:0,width:0});return[t,(0,F.useCallback)(e=>{if(e!=null){var r=e.getBoundingClientRect(),i={height:r.height,left:r.left,top:r.top,width:r.width};(Math.abs(i.height-t.height)>Hu||Math.abs(i.left-t.left)>Hu||Math.abs(i.top-t.top)>Hu||Math.abs(i.width-t.width)>Hu)&&n({height:i.height,left:i.left,top:i.top,width:i.width})}},[t.width,t.height,t.top,t.left,...e])]}function Wu(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Gu=typeof Symbol==`function`&&Symbol.observable||`@@observable`,Ku=()=>Math.random().toString(36).substring(7).split(``).join(`.`),qu={INIT:`@@redux/INIT${Ku()}`,REPLACE:`@@redux/REPLACE${Ku()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${Ku()}`};function Ju(e){if(typeof e!=`object`||!e)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function Yu(e,t,n){if(typeof e!=`function`)throw Error(Wu(2));if(typeof t==`function`&&typeof n==`function`||typeof n==`function`&&typeof arguments[3]==`function`)throw Error(Wu(0));if(typeof t==`function`&&n===void 0&&(n=t,t=void 0),n!==void 0){if(typeof n!=`function`)throw Error(Wu(1));return n(Yu)(e,t)}let r=e,i=t,a=new Map,o=a,s=0,c=!1;function l(){o===a&&(o=new Map,a.forEach((e,t)=>{o.set(t,e)}))}function u(){if(c)throw Error(Wu(3));return i}function d(e){if(typeof e!=`function`)throw Error(Wu(4));if(c)throw Error(Wu(5));let t=!0;l();let n=s++;return o.set(n,e),function(){if(t){if(c)throw Error(Wu(6));t=!1,l(),o.delete(n),a=null}}}function f(e){if(!Ju(e))throw Error(Wu(7));if(e.type===void 0)throw Error(Wu(8));if(typeof e.type!=`string`)throw Error(Wu(17));if(c)throw Error(Wu(9));try{c=!0,i=r(i,e)}finally{c=!1}return(a=o).forEach(e=>{e()}),e}function p(e){if(typeof e!=`function`)throw Error(Wu(10));r=e,f({type:qu.REPLACE})}function m(){let e=d;return{subscribe(t){if(typeof t!=`object`||!t)throw Error(Wu(11));function n(){let e=t;e.next&&e.next(u())}return n(),{unsubscribe:e(n)}},[Gu](){return this}}}return f({type:qu.INIT}),{dispatch:f,subscribe:d,getState:u,replaceReducer:p,[Gu]:m}}function Xu(e){Object.keys(e).forEach(t=>{let n=e[t];if(n(void 0,{type:qu.INIT})===void 0)throw Error(Wu(12));if(n(void 0,{type:qu.PROBE_UNKNOWN_ACTION()})===void 0)throw Error(Wu(13))})}function Zu(e){let t=Object.keys(e),n={};for(let r=0;re:e.length===1?e[0]:e.reduce((e,t)=>(...n)=>e(t(...n)))}function $u(...e){return t=>(n,r)=>{let i=t(n,r),a=()=>{throw Error(Wu(15))},o={getState:i.getState,dispatch:(e,...t)=>a(e,...t)};return a=Qu(...e.map(e=>e(o)))(i.dispatch),{...i,dispatch:a}}}function ed(e){return Ju(e)&&`type`in e&&typeof e.type==`string`}var td=Symbol.for(`immer-nothing`),nd=Symbol.for(`immer-draftable`),rd=Symbol.for(`immer-state`);function id(e,...t){throw Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var ad=Object,od=ad.getPrototypeOf,sd=`constructor`,cd=`prototype`,ld=`configurable`,ud=`enumerable`,dd=`writable`,fd=`value`,pd=e=>!!e&&!!e[rd];function md(e){return e?_d(e)||wd(e)||!!e[nd]||!!e[sd]?.[nd]||Td(e)||Ed(e):!1}var hd=ad[cd][sd].toString(),gd=new WeakMap;function _d(e){if(!e||!Dd(e))return!1;let t=od(e);if(t===null||t===ad[cd])return!0;let n=ad.hasOwnProperty.call(t,sd)&&t[sd];if(n===Object)return!0;if(!Od(n))return!1;let r=gd.get(n);return r===void 0&&(r=Function.toString.call(n),gd.set(n,r)),r===hd}function vd(e,t,n=!0){yd(e)===0?(n?Reflect.ownKeys(e):ad.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function yd(e){let t=e[rd];return t?t.type_:wd(e)?1:Td(e)?2:Ed(e)?3:0}var bd=(e,t,n=yd(e))=>n===2?e.has(t):ad[cd].hasOwnProperty.call(e,t),xd=(e,t,n=yd(e))=>n===2?e.get(t):e[t],Sd=(e,t,n,r=yd(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function Cd(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var wd=Array.isArray,Td=e=>e instanceof Map,Ed=e=>e instanceof Set,Dd=e=>typeof e==`object`,Od=e=>typeof e==`function`,kd=e=>typeof e==`boolean`;function Ad(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var jd=e=>e.copy_||e.base_,Md=e=>e.modified_?e.copy_:e.base_;function Nd(e,t){if(Td(e))return new Map(e);if(Ed(e))return new Set(e);if(wd(e))return Array[cd].slice.call(e);let n=_d(e);if(t===!0||t===`class_only`&&!n){let t=ad.getOwnPropertyDescriptors(e);delete t[rd];let n=Reflect.ownKeys(t);for(let r=0;r1&&ad.defineProperties(e,{set:Id,add:Id,clear:Id,delete:Id}),ad.freeze(e),t&&vd(e,(e,t)=>{Pd(t,!0)},!1),e)}function Fd(){id(2)}var Id={[fd]:Fd};function Ld(e){return e===null||!Dd(e)?!0:ad.isFrozen(e)}var Rd=`MapSet`,zd=`Patches`,Bd=`ArrayMethods`,Vd={};function Hd(e){let t=Vd[e];return t||id(0,e),t}var Ud=e=>!!Vd[e],Wd,Gd=()=>Wd,Kd=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:Ud(Rd)?Hd(Rd):void 0,arrayMethodsPlugin_:Ud(Bd)?Hd(Bd):void 0});function qd(e,t){t&&(e.patchPlugin_=Hd(zd),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Jd(e){Yd(e),e.drafts_.forEach(Zd),e.drafts_=null}function Yd(e){e===Wd&&(Wd=e.parent_)}var Xd=e=>Wd=Kd(Wd,e);function Zd(e){let t=e[rd];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function Qd(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[rd].modified_&&(Jd(t),id(4)),md(e)&&(e=$d(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[rd].base_,e,t)}else e=$d(t,n);return ef(t,e,!0),Jd(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===td?void 0:e}function $d(e,t){if(Ld(t))return t;let n=t[rd];if(!n)return lf(t,e.handledSet_,e);if(!nf(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:t}=n;if(t)for(;t.length>0;)t.pop()(e);sf(n,e)}return n.copy_}function ef(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Pd(t,n)}function tf(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var nf=(e,t)=>e.scope_===t,rf=[];function af(e,t,n,r){let i=jd(e),a=e.type_;if(r!==void 0&&xd(i,r,a)===t){Sd(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;vd(i,(e,n)=>{if(pd(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??rf;for(let e of o)Sd(i,e,n,a)}function of(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!nf(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Md(i);af(e,i.draft_??i,a,n),sf(i,r)})}function sf(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let r=n.getPath(e);r&&n.generatePatches_(e,r,t)}tf(e)}}function cf(e,t,n){let{scope_:r}=e;if(pd(n)){let i=n[rd];nf(i,r)&&i.callbacks_.push(function(){_f(e),af(e,n,Md(i),t)})}else md(n)&&e.callbacks_.push(function(){let i=jd(e);e.type_===3?i.has(n)&&lf(n,r.handledSet_,r):xd(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&lf(xd(e.copy_,t,e.type_),r.handledSet_,r)})}function lf(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||pd(e)||t.has(e)||!md(e)||Ld(e)?e:(t.add(e),vd(e,(r,i)=>{if(pd(i)){let t=i[rd];nf(t,n)&&(Sd(e,r,Md(t),e.type_),tf(t))}else md(i)&&lf(i,t,n)}),e)}function uf(e,t){let n=wd(e),r={type_:+!!n,scope_:t?t.scope_:Gd(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},i=r,a=df;n&&(i=[r],a=ff);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var df={get(e,t){if(t===rd)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t==`string`;if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let i=jd(e);if(!bd(i,t,e.type_))return mf(e,i,t);let a=i[t];if(e.finalized_||!md(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Ad(t))return a;if(a===pf(e.base_,t)){_f(e);let n=e.type_===1?+t:t,r=yf(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in jd(e)},ownKeys(e){return Reflect.ownKeys(jd(e))},set(e,t,n){let r=hf(jd(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=pf(jd(e),t),i=r?.[rd];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.set(t,!1),!0;if(Cd(n,r)&&(n!==void 0||bd(e.base_,t,e.type_)))return!0;_f(e),gf(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),cf(e,t,n),!0)},deleteProperty(e,t){return _f(e),pf(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),gf(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=jd(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[dd]:!0,[ld]:e.type_!==1||t!==`length`,[ud]:r[ud],[fd]:n[t]}},defineProperty(){id(11)},getPrototypeOf(e){return od(e.base_)},setPrototypeOf(){id(12)}},ff={};for(let e in df){let t=df[e];ff[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}ff.deleteProperty=function(e,t){return ff.set.call(this,e,t,void 0)},ff.set=function(e,t,n){return df.set.call(this,e[0],t,n,e[0])};function pf(e,t){let n=e[rd];return(n?jd(n):e)[t]}function mf(e,t,n){let r=hf(t,n);return r?fd in r?r[fd]:r.get?.call(e.draft_):void 0}function hf(e,t){if(!(t in e))return;let n=od(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=od(n)}}function gf(e){e.modified_||(e.modified_=!0,e.parent_&&gf(e.parent_))}function _f(e){e.copy_||=(e.assigned_=new Map,Nd(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var vf=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(Od(e)&&!Od(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}Od(t)||id(6),n!==void 0&&!Od(n)&&id(7);let r;if(md(e)){let i=Xd(this),a=yf(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Jd(i):Yd(i)}return qd(i,n),Qd(r,i)}else if(!e||!Dd(e)){if(r=t(e),r===void 0&&(r=e),r===td&&(r=void 0),this.autoFreeze_&&Pd(r,!0),n){let t=[],i=[];Hd(zd).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}else id(1,e)},this.produceWithPatches=(e,t)=>{if(Od(e))return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},kd(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),kd(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),kd(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){md(e)||id(8),pd(e)&&(e=bf(e));let t=Xd(this),n=yf(t,e,void 0);return n[rd].isManual_=!0,Yd(t),n}finishDraft(e,t){let n=e&&e[rd];(!n||!n.isManual_)&&id(9);let{scope_:r}=n;return qd(r,t),Qd(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=Hd(zd).applyPatches_;return pd(e)?r(e,t):this.produce(e,e=>r(e,t))}};function yf(e,t,n,r){let[i,a]=Td(t)?Hd(Rd).proxyMap_(t,n):Ed(t)?Hd(Rd).proxySet_(t,n):uf(t,n);return(n?.scope_??Gd()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?of(n,a,r):a.callbacks_.push(function(e){e.mapSetPlugin_?.fixSetContents(a);let{patchPlugin_:t}=e;a.modified_&&t&&t.generatePatches_(a,[],e)}),i}function bf(e){return pd(e)||id(10,e),xf(e)}function xf(e){if(!md(e)||Ld(e))return e;let t=e[rd],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Nd(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Nd(e,!0);return vd(n,(e,t)=>{Sd(n,e,xf(t))},r),t&&(t.finalized_=!1),n}var Sf=new vf().produce;function Cf(e){return({dispatch:t,getState:n})=>r=>i=>typeof i==`function`?i(t,n,e):r(i)}var wf=Cf(),Tf=Cf,Ef=typeof window<`u`&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]==`object`?Qu:Qu.apply(null,arguments)};typeof window<`u`&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__;function Df(e,t){function n(...n){if(t){let r=t(...n);if(!r)throw Error(Pp(0));return{type:e,payload:r.payload,...`meta`in r&&{meta:r.meta},...`error`in r&&{error:r.error}}}return{type:e,payload:n[0]}}return n.toString=()=>`${e}`,n.type=e,n.match=t=>ed(t)&&t.type===e,n}var Of=class e extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,e.prototype)}static get[Symbol.species](){return e}concat(...e){return super.concat.apply(this,e)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new e(...t[0].concat(this)):new e(...t.concat(this))}};function kf(e){return md(e)?Sf(e,()=>{}):e}function Af(e,t,n){return e.has(t)?e.get(t):e.set(t,n(t)).get(t)}function jf(e){return typeof e==`boolean`}var Mf=()=>function(e){let{thunk:t=!0,immutableCheck:n=!0,serializableCheck:r=!0,actionCreatorCheck:i=!0}=e??{},a=new Of;return t&&(jf(t)?a.push(wf):a.push(Tf(t.extraArgument))),a},Nf=`RTK_autoBatch`,q=()=>e=>({payload:e,meta:{[Nf]:!0}}),Pf=e=>t=>{setTimeout(t,e)},Ff=(e={type:`raf`})=>t=>(...n)=>{let r=t(...n),i=!0,a=!1,o=!1,s=new Set,c=e.type===`tick`?queueMicrotask:e.type===`raf`?typeof window<`u`&&window.requestAnimationFrame?window.requestAnimationFrame:Pf(10):e.type===`callback`?e.queueNotification:Pf(e.timeout),l=()=>{o=!1,a&&(a=!1,s.forEach(e=>e()))};return Object.assign({},r,{subscribe(e){let t=r.subscribe(()=>i&&e());return s.add(e),()=>{t(),s.delete(e)}},dispatch(e){try{return i=!e?.meta?.[Nf],a=!i,a&&(o||(o=!0,c(l))),r.dispatch(e)}finally{i=!0}}})},If=e=>function(t){let{autoBatch:n=!0}=t??{},r=new Of(e);return n&&r.push(Ff(typeof n==`object`?n:void 0)),r};function Lf(e){let t=Mf(),{reducer:n=void 0,middleware:r,devTools:i=!0,duplicateMiddlewareCheck:a=!0,preloadedState:o=void 0,enhancers:s=void 0}=e||{},c;if(typeof n==`function`)c=n;else if(Ju(n))c=Zu(n);else throw Error(Pp(1));let l;l=typeof r==`function`?r(t):t();let u=Qu;i&&(u=Ef({trace:!1,...typeof i==`object`&&i}));let d=If($u(...l)),f=typeof s==`function`?s(d):d(),p=u(...f);return Yu(c,o,p)}function Rf(e){let t={},n=[],r,i={addCase(e,n){let r=typeof e==`string`?e:e.type;if(!r)throw Error(Pp(28));if(r in t)throw Error(Pp(29));return t[r]=n,i},addAsyncThunk(e,r){return r.pending&&(t[e.pending.type]=r.pending),r.rejected&&(t[e.rejected.type]=r.rejected),r.fulfilled&&(t[e.fulfilled.type]=r.fulfilled),r.settled&&n.push({matcher:e.settled,reducer:r.settled}),i},addMatcher(e,t){return n.push({matcher:e,reducer:t}),i},addDefaultCase(e){return r=e,i}};return e(i),[t,n,r]}function zf(e){return typeof e==`function`}function Bf(e,t){let[n,r,i]=Rf(t),a;if(zf(e))a=()=>kf(e());else{let t=kf(e);a=()=>t}function o(e=a(),t){let o=[n[t.type],...r.filter(({matcher:e})=>e(t)).map(({reducer:e})=>e)];return o.filter(e=>!!e).length===0&&(o=[i]),o.reduce((e,n)=>{if(n)if(pd(e)){let r=n(e,t);return r===void 0?e:r}else if(md(e))return Sf(e,e=>n(e,t));else{let r=n(e,t);if(r===void 0){if(e===null)return e;throw Error(`A case reducer on a non-draftable value must not return undefined`)}return r}return e},e)}return o.getInitialState=a,o}var Vf=`ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW`,Hf=(e=21)=>{let t=``,n=e;for(;n--;)t+=Vf[Math.random()*64|0];return t},Uf=Symbol.for(`rtk-slice-createasyncthunk`);function Wf(e,t){return`${e}/${t}`}function Gf({creators:e}={}){let t=e?.asyncThunk?.[Uf];return function(e){let{name:n,reducerPath:r=n}=e;if(!n)throw Error(Pp(11));let i=(typeof e.reducers==`function`?e.reducers(Jf()):e.reducers)||{},a=Object.keys(i),o={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},s={addCase(e,t){let n=typeof e==`string`?e:e.type;if(!n)throw Error(Pp(12));if(n in o.sliceCaseReducersByType)throw Error(Pp(13));return o.sliceCaseReducersByType[n]=t,s},addMatcher(e,t){return o.sliceMatchers.push({matcher:e,reducer:t}),s},exposeAction(e,t){return o.actionCreators[e]=t,s},exposeCaseReducer(e,t){return o.sliceCaseReducersByName[e]=t,s}};a.forEach(r=>{let a=i[r],o={reducerName:r,type:Wf(n,r),createNotation:typeof e.reducers==`function`};Xf(a)?Qf(o,a,s,t):Yf(o,a,s)});function c(){let[t={},n=[],r=void 0]=typeof e.extraReducers==`function`?Rf(e.extraReducers):[e.extraReducers],i={...t,...o.sliceCaseReducersByType};return Bf(e.initialState,e=>{for(let t in i)e.addCase(t,i[t]);for(let t of o.sliceMatchers)e.addMatcher(t.matcher,t.reducer);for(let t of n)e.addMatcher(t.matcher,t.reducer);r&&e.addDefaultCase(r)})}let l=e=>e,u=new Map,d=new WeakMap,f;function p(e,t){return f||=c(),f(e,t)}function m(){return f||=c(),f.getInitialState()}function h(t,n=!1){function r(e){let i=e[t];return i===void 0&&n&&(i=Af(d,r,m)),i}function i(t=l){return Af(Af(u,n,()=>new WeakMap),t,()=>{let r={};for(let[i,a]of Object.entries(e.selectors??{}))r[i]=Kf(a,t,()=>Af(d,t,m),n);return r})}return{reducerPath:t,getSelectors:i,get selectors(){return i(r)},selectSlice:r}}let g={name:n,reducer:p,actions:o.actionCreators,caseReducers:o.sliceCaseReducersByName,getInitialState:m,...h(r),injectInto(e,{reducerPath:t,...n}={}){let i=t??r;return e.inject({reducerPath:i,reducer:p},n),{...g,...h(i,!0)}}};return g}}function Kf(e,t,n,r){function i(i,...a){let o=t(i);return o===void 0&&r&&(o=n()),e(o,...a)}return i.unwrapped=e,i}var qf=Gf();function Jf(){function e(e,t){return{_reducerDefinitionType:`asyncThunk`,payloadCreator:e,...t}}return e.withTypes=()=>e,{reducer(e){return Object.assign({[e.name](...t){return e(...t)}}[e.name],{_reducerDefinitionType:`reducer`})},preparedReducer(e,t){return{_reducerDefinitionType:`reducerWithPrepare`,prepare:e,reducer:t}},asyncThunk:e}}function Yf({type:e,reducerName:t,createNotation:n},r,i){let a,o;if(`reducer`in r){if(n&&!Zf(r))throw Error(Pp(17));a=r.reducer,o=r.prepare}else a=r;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?Df(e,o):Df(e))}function Xf(e){return e._reducerDefinitionType===`asyncThunk`}function Zf(e){return e._reducerDefinitionType===`reducerWithPrepare`}function Qf({type:e,reducerName:t},n,r,i){if(!i)throw Error(Pp(18));let{payloadCreator:a,fulfilled:o,pending:s,rejected:c,settled:l,options:u}=n,d=i(e,a,u);r.exposeAction(t,d),o&&r.addCase(d.fulfilled,o),s&&r.addCase(d.pending,s),c&&r.addCase(d.rejected,c),l&&r.addMatcher(d.settled,l),r.exposeCaseReducer(t,{fulfilled:o||$f,pending:s||$f,rejected:c||$f,settled:l||$f})}function $f(){}var ep=`task`,tp=`listener`,np=`completed`,rp=`cancelled`,ip=`task-${rp}`,ap=`task-${np}`,op=`${tp}-${rp}`,sp=`${tp}-${np}`,cp=class{constructor(e){this.code=e,this.message=`${ep} ${rp} (reason: ${e})`}name=`TaskAbortError`;message},lp=(e,t)=>{if(typeof e!=`function`)throw TypeError(Pp(32))},up=()=>{},dp=(e,t=up)=>(e.catch(t),e),fp=(e,t)=>(e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t)),pp=e=>{if(e.aborted)throw new cp(e.reason)};function mp(e,t){let n=up;return new Promise((r,i)=>{let a=()=>i(new cp(e.reason));if(e.aborted){a();return}n=fp(e,a),t.finally(()=>n()).then(r,i)}).finally(()=>{n=up})}var hp=async(e,t)=>{try{return await Promise.resolve(),{status:`ok`,value:await e()}}catch(e){return{status:e instanceof cp?`cancelled`:`rejected`,error:e}}finally{t?.()}},gp=e=>t=>dp(mp(e,t).then(t=>(pp(e),t))),_p=e=>{let t=gp(e);return e=>t(new Promise(t=>setTimeout(t,e)))},{assign:vp}=Object,yp={},bp=`listenerMiddleware`,xp=(e,t)=>{let n=t=>fp(e,()=>t.abort(e.reason));return(r,i)=>{lp(r,`taskExecutor`);let a=new AbortController;n(a);let o=hp(async()=>{pp(e),pp(a.signal);let t=await r({pause:gp(a.signal),delay:_p(a.signal),signal:a.signal});return pp(a.signal),t},()=>a.abort(ap));return i?.autoJoin&&t.push(o.catch(up)),{result:gp(e)(o),cancel(){a.abort(ip)}}}},Sp=(e,t)=>{let n=async(n,r)=>{pp(t);let i=()=>{},a=[new Promise((t,r)=>{let a=e({predicate:n,effect:(e,n)=>{n.unsubscribe(),t([e,n.getState(),n.getOriginalState()])}});i=()=>{a(),r()}})];r!=null&&a.push(new Promise(e=>setTimeout(e,r,null)));try{let e=await mp(t,Promise.race(a));return pp(t),e}finally{i()}};return(e,t)=>dp(n(e,t))},Cp=e=>{let{type:t,actionCreator:n,matcher:r,predicate:i,effect:a}=e;if(t)i=Df(t).match;else if(n)t=n.type,i=n.match;else if(r)i=r;else if(!i)throw Error(Pp(21));return lp(a,`options.listener`),{predicate:i,type:t,effect:a}},wp=vp(e=>{let{type:t,predicate:n,effect:r}=Cp(e);return{id:Hf(),effect:r,type:t,predicate:n,pending:new Set,unsubscribe:()=>{throw Error(Pp(22))}}},{withTypes:()=>wp}),Tp=(e,t)=>{let{type:n,effect:r,predicate:i}=Cp(t);return Array.from(e.values()).find(e=>(typeof n==`string`?e.type===n:e.predicate===i)&&e.effect===r)},Ep=e=>{e.pending.forEach(e=>{e.abort(op)})},Dp=(e,t)=>()=>{for(let e of t.keys())Ep(e);e.clear()},Op=(e,t,n)=>{try{e(t,n)}catch(e){setTimeout(()=>{throw e},0)}},kp=vp(Df(`${bp}/add`),{withTypes:()=>kp}),Ap=Df(`${bp}/removeAll`),jp=vp(Df(`${bp}/remove`),{withTypes:()=>jp}),Mp=(...e)=>{console.error(`${bp}/error`,...e)},Np=(e={})=>{let t=new Map,n=new Map,r=e=>{let t=n.get(e)??0;n.set(e,t+1)},i=e=>{let t=n.get(e)??1;t===1?n.delete(e):n.set(e,t-1)},{extra:a,onError:o=Mp}=e;lp(o,`onError`);let s=e=>(e.unsubscribe=()=>t.delete(e.id),t.set(e.id,e),t=>{e.unsubscribe(),t?.cancelActive&&Ep(e)}),c=e=>s(Tp(t,e)??wp(e));vp(c,{withTypes:()=>c});let l=e=>{let n=Tp(t,e);return n&&(n.unsubscribe(),e.cancelActive&&Ep(n)),!!n};vp(l,{withTypes:()=>l});let u=async(e,n,s,l)=>{let u=new AbortController,d=Sp(c,u.signal),f=[];try{e.pending.add(u),r(e),await Promise.resolve(e.effect(n,vp({},s,{getOriginalState:l,condition:(e,t)=>d(e,t).then(Boolean),take:d,delay:_p(u.signal),pause:gp(u.signal),extra:a,signal:u.signal,fork:xp(u.signal,f),unsubscribe:e.unsubscribe,subscribe:()=>{t.set(e.id,e)},cancelActiveListeners:()=>{e.pending.forEach((e,t,n)=>{e!==u&&(e.abort(op),n.delete(e))})},cancel:()=>{u.abort(op),e.pending.delete(u)},throwIfCancelled:()=>{pp(u.signal)}})))}catch(e){e instanceof cp||Op(o,e,{raisedBy:`effect`})}finally{await Promise.all(f),u.abort(sp),i(e),e.pending.delete(u)}},d=Dp(t,n);return{middleware:e=>n=>r=>{if(!ed(r))return n(r);if(kp.match(r))return c(r.payload);if(Ap.match(r)){d();return}if(jp.match(r))return l(r.payload);let i=e.getState(),a=()=>{if(i===yp)throw Error(Pp(23));return i},s;try{if(s=n(r),t.size>0){let n=e.getState(),s=Array.from(t.values());for(let t of s){let s=!1;try{s=t.predicate(r,n,i)}catch(e){s=!1,Op(o,e,{raisedBy:`predicate`})}s&&u(t,r,e,a)}}}finally{i=yp}return s},startListening:c,stopListening:l,clearListeners:d}};function Pp(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Fp=qf({name:`chartLayout`,initialState:{layoutType:`horizontal`,width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){e.margin.top=t.payload.top??0,e.margin.right=t.payload.right??0,e.margin.bottom=t.payload.bottom??0,e.margin.left=t.payload.left??0},setScale(e,t){e.scale=t.payload}}}),{setMargin:Ip,setLayout:Lp,setChartSize:Rp,setScale:zp}=Fp.actions,Bp=Fp.reducer;function Vp(e,t,n){return Array.isArray(e)&&e&&t+n!==0?e.slice(t,n+1):e}function J(e){return Number.isFinite(e)}function Hp(e){return typeof e==`number`&&e>0&&Number.isFinite(e)}function Up(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 Wp(e){for(var t=1;t{if(t&&n){var{width:r,height:i}=n,{align:a,verticalAlign:o,layout:s}=t;if((s===`vertical`||s===`horizontal`&&o===`middle`)&&a!==`center`&&V(e[a]))return Wp(Wp({},e),{},{[a]:e[a]+(r||0)});if((s===`horizontal`||s===`vertical`&&a===`center`)&&o!==`middle`&&V(e[o]))return Wp(Wp({},e),{},{[o]:e[o]+(i||0)})}return e},Yp=(e,t)=>e===`horizontal`&&t===`xAxis`||e===`vertical`&&t===`yAxis`||e===`centric`&&t===`angleAxis`||e===`radial`&&t===`radiusAxis`,Xp=(e,t,n,r)=>{if(r)return e.map(e=>e.coordinate);var i,a,o=e.map(e=>(e.coordinate===t&&(i=!0),e.coordinate===n&&(a=!0),e.coordinate));return i||o.push(t),a||o.push(n),o},Zp=(e,t,n)=>{if(!e)return null;var{duplicateDomain:r,type:i,range:a,scale:o,realScaleType:s,isCategorical:c,categoricalDomain:l,tickCount:u,ticks:d,niceTicks:f,axisType:p}=e;if(!o)return null;var m=s===`scaleBand`&&o.bandwidth?o.bandwidth()/2:2,h=(t||n)&&i===`category`&&o.bandwidth?o.bandwidth()/m:0;return h=p===`angleAxis`&&a&&a.length>=2?zc(a[0]-a[1])*2*h:h,t&&(d||f)?(d||f||[]).map((e,t)=>{var n=r?r.indexOf(e):e,i=o.map(n);return J(i)?{coordinate:i+h,value:e,offset:h,index:t}:null}).filter(Yc):c&&l?l.map((e,t)=>{var n=o.map(e);return J(n)?{coordinate:n+h,value:e,index:t,offset:h}:null}).filter(Yc):o.ticks&&!n&&u!=null?o.ticks(u).map((e,t)=>{var n=o.map(e);return J(n)?{coordinate:n+h,value:e,index:t,offset:h}:null}).filter(Yc):o.domain().map((e,t)=>{var n=o.map(e);return J(n)?{coordinate:n+h,value:r?r[e]:e,index:t,offset:h}:null}).filter(Yc)},Qp=(e,t)=>{if(!t||t.length!==2||!V(t[0])||!V(t[1]))return e;var n=Math.min(t[0],t[1]),r=Math.max(t[0],t[1]),i=[e[0],e[1]];return(!V(e[0])||e[0]r)&&(i[1]=r),i[0]>r&&(i[0]=r),i[1]{var t=e.length;if(!(t<=0)){var n=e[0]?.length;if(!(n==null||n<=0))for(var r=0;r=0?(s[0]=i,i+=u,s[1]=i):(s[0]=a,a+=u,s[1]=a)}}}},expand:Tc,none:bc,silhouette:Ec,wiggle:Dc,positive:e=>{var t=e.length;if(!(t<=0)){var n=e[0]?.length;if(!(n==null||n<=0))for(var r=0;r=0?(o[0]=i,i+=s,o[1]=i):(o[0]=0,o[1]=0)}}}}},em=(e,t,n)=>{var r=$p[n]??bc,i=wc().keys(t).value((e,t)=>Number(Y(e,t,0))).order(xc).offset(r)(e);return i.forEach((n,r)=>{n.forEach((n,i)=>{var a=Y(e[i],t[r],0);Array.isArray(a)&&a.length===2&&V(a[0])&&V(a[1])&&(n[0]=a[0],n[1]=a[1])})}),i};function tm(e){return e==null?void 0:String(e)}function nm(e){var{axis:t,ticks:n,bandSize:r,entry:i,index:a,dataKey:o}=e;if(t.type===`category`){if(!t.allowDuplicatedCategory&&t.dataKey&&!U(i[t.dataKey])){var s=qc(n,`value`,i[t.dataKey]);if(s)return s.coordinate+r/2}return n!=null&&n[a]?n[a].coordinate+r/2:null}var c=Y(i,U(o)?t.dataKey:o),l=t.scale.map(c);return V(l)?l:null}var rm=e=>{var{axis:t,ticks:n,offset:r,bandSize:i,entry:a,index:o}=e;if(t.type===`category`)return n[o]?n[o].coordinate+r:null;var s=Y(a,t.dataKey,t.scale.domain()[o]);if(U(s))return null;var c=t.scale.map(s);return V(c)?c-i/2+r:null},im=e=>{var{numericAxis:t}=e,n=t.scale.domain();if(t.type===`number`){var r=Math.min(n[0],n[1]),i=Math.max(n[0],n[1]);return r<=0&&i>=0?0:i<0?i:r}return n[0]},am=e=>{var t=e.flat(2).filter(V);return[Math.min(...t),Math.max(...t)]},om=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],sm=(e,t,n)=>{if(e!=null)return om(Object.keys(e).reduce((r,i)=>{var a=e[i];if(!a)return r;var{stackedData:o}=a,s=o.reduce((e,r)=>{var i=am(Vp(r,t,n));return!J(i[0])||!J(i[1])?e:[Math.min(e[0],i[0]),Math.max(e[1],i[1])]},[1/0,-1/0]);return[Math.min(s[0],r[0]),Math.max(s[1],r[1])]},[1/0,-1/0]))},cm=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,lm=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,um=(e,t,n)=>{if(e&&e.scale&&e.scale.bandwidth){var r=e.scale.bandwidth();if(!n||r>0)return r}if(e&&t&&t.length>=2){for(var i=(0,Lu.default)(t,e=>e.coordinate),a=1/0,o=1,s=i.length;o{if(t===`horizontal`)return e.relativeX;if(t===`vertical`)return e.relativeY},mm=(e,t)=>t===`centric`?e.angle:e.radius,hm=e=>e.layout.width,gm=e=>e.layout.height,_m=e=>e.layout.scale,vm=e=>e.layout.margin,ym=K(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),bm=K(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),xm=`data-recharts-item-index`;function Sm(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 Cm(e){for(var t=1;te.brush.height;function Om(e){return bm(e).reduce((e,t)=>t.orientation===`left`&&!t.mirror&&!t.hide?e+(typeof t.width==`number`?t.width:60):e,0)}function km(e){return bm(e).reduce((e,t)=>t.orientation===`right`&&!t.mirror&&!t.hide?e+(typeof t.width==`number`?t.width:60):e,0)}function Am(e){return ym(e).reduce((e,t)=>t.orientation===`top`&&!t.mirror&&!t.hide?e+t.height:e,0)}function jm(e){return ym(e).reduce((e,t)=>t.orientation===`bottom`&&!t.mirror&&!t.hide?e+t.height:e,0)}var Mm=K([hm,gm,vm,Dm,Om,km,Am,jm,Ru,zu],(e,t,n,r,i,a,o,s,c,l)=>{var u={left:(n.left||0)+i,right:(n.right||0)+a},d=Cm(Cm({},{top:(n.top||0)+o,bottom:(n.bottom||0)+s}),u),f=d.bottom;d.bottom+=r,d=Jp(d,c,l);var p=e-d.left-d.right,m=t-d.top-d.bottom;return Cm(Cm({brushBottom:f},d),{},{width:Math.max(p,0),height:Math.max(m,0)})}),Nm=K(Mm,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),Pm=K(hm,gm,(e,t)=>({x:0,y:0,width:e,height:t})),Fm=(0,F.createContext)(null),Im=()=>(0,F.useContext)(Fm)!=null,Lm=e=>e.brush,Rm=K([Lm,Mm,vm],(e,t,n)=>({height:e.height,x:V(e.x)?e.x:t.left,y:V(e.y)?e.y:t.top+t.height+t.brushBottom-(n?.bottom||0),width:V(e.width)?e.width:t.width})),zm=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e,t,{signal:n,edges:r}={}){let i,a=null,o=r!=null&&r.includes(`leading`),s=r==null||r.includes(`trailing`),c=()=>{a!==null&&(e.apply(i,a),i=void 0,a=null)},l=()=>{s&&c(),p()},u=null,d=()=>{u!=null&&clearTimeout(u),u=setTimeout(()=>{u=null,l()},t)},f=()=>{u!==null&&(clearTimeout(u),u=null)},p=()=>{f(),i=void 0,a=null},m=()=>{c()},h=function(...e){if(n?.aborted)return;i=this,a=e;let t=u==null;d(),o&&t&&c()};return h.schedule=d,h.cancel=p,h.flush=m,n?.addEventListener(`abort`,p,{once:!0}),h}e.debounce=t})),Bm=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=zm();function n(e,n=0,r={}){typeof r!=`object`&&(r={});let{leading:i=!1,trailing:a=!0,maxWait:o}=r,s=[,,];i&&(s[0]=`leading`),a&&(s[1]=`trailing`);let c,l=null,u=t.debounce(function(...t){c=e.apply(this,t),l=null},n,{edges:s}),d=function(...t){return o!=null&&(l===null&&(l=Date.now()),Date.now()-l>=o)?(c=e.apply(this,t),l=Date.now(),u.cancel(),u.schedule(),c):(u.apply(this,t),c)};return d.cancel=u.cancel,d.flush=()=>(u.flush(),c),d}e.debounce=n})),Vm=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Bm();function n(e,n=0,r={}){let{leading:i=!0,trailing:a=!0}=r;return t.debounce(e,n,{leading:i,maxWait:n,trailing:a})}e.throttle=n})),Hm=M(((e,t)=>{t.exports=Vm().throttle})),Um=!0,Wm=function(e,t){var n=[...arguments].slice(2);if(Um&&typeof console<`u`&&console.warn&&(t===void 0&&console.warn(`LogUtils requires an error message argument`),!e))if(t===void 0)console.warn(`Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.`);else{var r=0;console.warn(t.replace(/%s/g,()=>n[r++]))}},Gm={width:`100%`,height:`100%`,debounce:0,minWidth:0,initialDimension:{width:-1,height:-1}},Km=(e,t,n)=>{var{width:r=Gm.width,height:i=Gm.height,aspect:a,maxHeight:o}=n,s=Vc(r)?e:Number(r),c=Vc(i)?t:Number(i);return a&&a>0&&(s?c=s/a:c&&(s=c*a),o&&c!=null&&c>o&&(c=o)),{calculatedWidth:s,calculatedHeight:c}},qm={width:0,height:0,overflow:`visible`},Jm={width:0,overflowX:`visible`},Ym={height:0,overflowY:`visible`},Xm={},Zm=e=>{var{width:t,height:n}=e,r=Vc(t),i=Vc(n);return r&&i?qm:r?Jm:i?Ym:Xm};function Qm(e){var{width:t,height:n,aspect:r}=e,i=t,a=n;return i===void 0&&a===void 0?(i=Gm.width,a=Gm.height):i===void 0?i=r&&r>0?void 0:Gm.width:a===void 0&&(a=r&&r>0?void 0:Gm.height),{width:i,height:a}}var $m=Se(Hm());function eh(){return eh=Object.assign?Object.assign.bind():function(e){for(var t=1;t({width:n,height:r}),[n,r]);return sh(i)?F.createElement(oh.Provider,{value:i},t):null}var lh=()=>(0,F.useContext)(oh),uh=(0,F.forwardRef)((e,t)=>{var{aspect:n,initialDimension:r=Gm.initialDimension,width:i,height:a,minWidth:o=Gm.minWidth,minHeight:s,maxHeight:c,children:l,debounce:u=Gm.debounce,id:d,className:f,onResize:p,style:m={}}=e,h=(0,F.useRef)(null),g=(0,F.useRef)();g.current=p,(0,F.useImperativeHandle)(t,()=>h.current);var[_,v]=(0,F.useState)({containerWidth:r.width,containerHeight:r.height}),y=(0,F.useCallback)((e,t)=>{v(n=>{var r=Math.round(e),i=Math.round(t);return n.containerWidth===r&&n.containerHeight===i?n:{containerWidth:r,containerHeight:i}})},[]);(0,F.useEffect)(()=>{if(h.current==null||typeof ResizeObserver>`u`)return Xc;var e=e=>{var t,n=e[0];if(n!=null){var{width:r,height:i}=n.contentRect;y(r,i),(t=g.current)==null||t.call(g,r,i)}};u>0&&(e=(0,$m.default)(e,u,{trailing:!0,leading:!1}));var t=new ResizeObserver(e),{width:n,height:r}=h.current.getBoundingClientRect();return y(n,r),t.observe(h.current),()=>{t.disconnect()}},[y,u]);var{containerWidth:b,containerHeight:x}=_;Wm(!n||n>0,`The aspect(%s) must be greater than zero.`,n);var{calculatedWidth:S,calculatedHeight:C}=Km(b,x,{width:i,height:a,aspect:n,maxHeight:c});return Wm(S!=null&&S>0||C!=null&&C>0,`The width(%s) and height(%s) of chart should be greater than 0, + please check the style of container, or the props width(%s) and height(%s), + or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the + height and width.`,S,C,i,a,o,s,n),F.createElement(`div`,{id:d?`${d}`:void 0,className:P(`recharts-responsive-container`,f),style:nh(nh({},m),{},{width:i,height:a,minWidth:o,minHeight:s,maxHeight:c}),ref:h},F.createElement(`div`,{style:Zm({width:i,height:a})},F.createElement(ch,{width:S,height:C},l)))}),dh=(0,F.forwardRef)((e,t)=>{var n=lh();if(Hp(n.width)&&Hp(n.height))return e.children;var{width:r,height:i}=Qm({width:e.width,height:e.height,aspect:e.aspect}),{calculatedWidth:a,calculatedHeight:o}=Km(void 0,void 0,{width:r,height:i,aspect:e.aspect,maxHeight:e.maxHeight});return V(a)&&V(o)?F.createElement(ch,{width:a,height:o},e.children):F.createElement(uh,eh({},e,{width:r,height:i,ref:t}))});function fh(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}}var ph=()=>{var e=Im(),t=G(Nm),n=G(Rm),r=G(Lm)?.padding;return!e||!n||!r?t:{width:n.width-r.left-r.right,height:n.height-r.top-r.bottom,x:r.left,y:r.top}},mh={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},hh=()=>G(Mm)??mh,gh=()=>G(hm),_h=()=>G(gm),vh=()=>G(e=>e.layout.margin),X=e=>e.layout.layoutType,yh=()=>G(X),bh=()=>{var e=yh();if(e===`horizontal`||e===`vertical`)return e},xh=e=>{var t=e.layout.layoutType;if(t===`centric`||t===`radial`)return t},Sh=()=>yh()!==void 0,Ch=e=>{var t=W(),n=Im(),{width:r,height:i}=e,a=lh(),o=r,s=i;return a&&(o=a.width>0?a.width:r,s=a.height>0?a.height:i),(0,F.useEffect)(()=>{!n&&Hp(o)&&Hp(s)&&t(Rp({width:o,height:s}))},[t,n,o,s]),null},wh=Symbol.for(`immer-nothing`),Th=Symbol.for(`immer-draftable`),Eh=Symbol.for(`immer-state`);function Dh(e,...t){throw Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Oh=Object.getPrototypeOf;function kh(e){return!!e&&!!e[Eh]}function Ah(e){return e?Nh(e)||Array.isArray(e)||!!e[Th]||!!e.constructor?.[Th]||zh(e)||Bh(e):!1}var jh=Object.prototype.constructor.toString(),Mh=new WeakMap;function Nh(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);if(t===null||t===Object.prototype)return!0;let n=Object.hasOwnProperty.call(t,`constructor`)&&t.constructor;if(n===Object)return!0;if(typeof n!=`function`)return!1;let r=Mh.get(n);return r===void 0&&(r=Function.toString.call(n),Mh.set(n,r)),r===jh}function Ph(e,t,n=!0){Fh(e)===0?(n?Reflect.ownKeys(e):Object.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function Fh(e){let t=e[Eh];return t?t.type_:Array.isArray(e)?1:zh(e)?2:Bh(e)?3:0}function Ih(e,t){return Fh(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Lh(e,t,n){let r=Fh(e);r===2?e.set(t,n):r===3?e.add(n):e[t]=n}function Rh(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}function zh(e){return e instanceof Map}function Bh(e){return e instanceof Set}function Vh(e){return e.copy_||e.base_}function Hh(e,t){if(zh(e))return new Map(e);if(Bh(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);let n=Nh(e);if(t===!0||t===`class_only`&&!n){let t=Object.getOwnPropertyDescriptors(e);delete t[Eh];let n=Reflect.ownKeys(t);for(let r=0;r1&&Object.defineProperties(e,{set:Gh,add:Gh,clear:Gh,delete:Gh}),Object.freeze(e),t&&Object.values(e).forEach(e=>Uh(e,!0)),e)}function Wh(){Dh(2)}var Gh={value:Wh};function Kh(e){return typeof e!=`object`||!e?!0:Object.isFrozen(e)}var qh={};function Jh(e){let t=qh[e];return t||Dh(0,e),t}var Yh;function Xh(){return Yh}function Zh(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Qh(e,t){t&&(Jh(`Patches`),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function $h(e){eg(e),e.drafts_.forEach(ng),e.drafts_=null}function eg(e){e===Yh&&(Yh=e.parent_)}function tg(e){return Yh=Zh(Yh,e)}function ng(e){let t=e[Eh];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function rg(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];return e!==void 0&&e!==n?(n[Eh].modified_&&($h(t),Dh(4)),Ah(e)&&(e=ig(t,e),t.parent_||og(t,e)),t.patches_&&Jh(`Patches`).generateReplacementPatches_(n[Eh].base_,e,t.patches_,t.inversePatches_)):e=ig(t,n,[]),$h(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===wh?void 0:e}function ig(e,t,n){if(Kh(t))return t;let r=e.immer_.shouldUseStrictIteration(),i=t[Eh];if(!i)return Ph(t,(r,a)=>ag(e,i,t,r,a,n),r),t;if(i.scope_!==e)return t;if(!i.modified_)return og(e,i.base_,!0),i.base_;if(!i.finalized_){i.finalized_=!0,i.scope_.unfinalizedDrafts_--;let t=i.copy_,a=t,o=!1;i.type_===3&&(a=new Set(t),t.clear(),o=!0),Ph(a,(r,a)=>ag(e,i,t,r,a,n,o),r),og(e,t,!1),n&&e.patches_&&Jh(`Patches`).generatePatches_(i,n,e.patches_,e.inversePatches_)}return i.copy_}function ag(e,t,n,r,i,a,o){if(i==null||typeof i!=`object`&&!o)return;let s=Kh(i);if(!(s&&!o)){if(kh(i)){let o=ig(e,i,a&&t&&t.type_!==3&&!Ih(t.assigned_,r)?a.concat(r):void 0);if(Lh(n,r,o),kh(o))e.canAutoFreeze_=!1;else return}else o&&n.add(i);if(Ah(i)&&!s){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1||t&&t.base_&&t.base_[r]===i&&s)return;ig(e,i),(!t||!t.scope_.parent_)&&typeof r!=`symbol`&&(zh(n)?n.has(r):Object.prototype.propertyIsEnumerable.call(n,r))&&og(e,i)}}}function og(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Uh(t,n)}function sg(e,t){let n=Array.isArray(e),r={type_:+!!n,scope_:t?t.scope_:Xh(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1},i=r,a=cg;n&&(i=[r],a=lg);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,s}var cg={get(e,t){if(t===Eh)return e;let n=Vh(e);if(!Ih(n,t))return dg(e,n,t);let r=n[t];return e.finalized_||!Ah(r)?r:r===ug(e.base_,t)?(mg(e),e.copy_[t]=gg(r,e)):r},has(e,t){return t in Vh(e)},ownKeys(e){return Reflect.ownKeys(Vh(e))},set(e,t,n){let r=fg(Vh(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=ug(Vh(e),t),i=r?.[Eh];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_[t]=!1,!0;if(Rh(n,r)&&(n!==void 0||Ih(e.base_,t)))return!0;mg(e),pg(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_[t]=!0,!0)},deleteProperty(e,t){return ug(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,mg(e),pg(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=Vh(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.type_!==1||t!==`length`,enumerable:r.enumerable,value:n[t]}},defineProperty(){Dh(11)},getPrototypeOf(e){return Oh(e.base_)},setPrototypeOf(){Dh(12)}},lg={};Ph(cg,(e,t)=>{lg[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),lg.deleteProperty=function(e,t){return lg.set.call(this,e,t,void 0)},lg.set=function(e,t,n){return cg.set.call(this,e[0],t,n,e[0])};function ug(e,t){let n=e[Eh];return(n?Vh(n):e)[t]}function dg(e,t,n){let r=fg(t,n);return r?`value`in r?r.value:r.get?.call(e.draft_):void 0}function fg(e,t){if(!(t in e))return;let n=Oh(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=Oh(n)}}function pg(e){e.modified_||(e.modified_=!0,e.parent_&&pg(e.parent_))}function mg(e){e.copy_||=Hh(e.base_,e.scope_.immer_.useStrictShallowCopy_)}var hg=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(e,t,n)=>{if(typeof e==`function`&&typeof t!=`function`){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}typeof t!=`function`&&Dh(6),n!==void 0&&typeof n!=`function`&&Dh(7);let r;if(Ah(e)){let i=tg(this),a=gg(e,void 0),o=!0;try{r=t(a),o=!1}finally{o?$h(i):eg(i)}return Qh(i,n),rg(r,i)}else if(!e||typeof e!=`object`){if(r=t(e),r===void 0&&(r=e),r===wh&&(r=void 0),this.autoFreeze_&&Uh(r,!0),n){let t=[],i=[];Jh(`Patches`).generateReplacementPatches_(e,r,t,i),n(t,i)}return r}else Dh(1,e)},this.produceWithPatches=(e,t)=>{if(typeof e==`function`)return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},typeof e?.autoFreeze==`boolean`&&this.setAutoFreeze(e.autoFreeze),typeof e?.useStrictShallowCopy==`boolean`&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),typeof e?.useStrictIteration==`boolean`&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){Ah(e)||Dh(8),kh(e)&&(e=_g(e));let t=tg(this),n=gg(e,void 0);return n[Eh].isManual_=!0,eg(t),n}finishDraft(e,t){let n=e&&e[Eh];(!n||!n.isManual_)&&Dh(9);let{scope_:r}=n;return Qh(r,t),rg(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=Jh(`Patches`).applyPatches_;return kh(e)?r(e,t):this.produce(e,e=>r(e,t))}};function gg(e,t){let n=zh(e)?Jh(`MapSet`).proxyMap_(e,t):Bh(e)?Jh(`MapSet`).proxySet_(e,t):sg(e,t);return(t?t.scope_:Xh()).drafts_.push(n),n}function _g(e){return kh(e)||Dh(10,e),vg(e)}function vg(e){if(!Ah(e)||Kh(e))return e;let t=e[Eh],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Hh(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Hh(e,!0);return Ph(n,(e,t)=>{Lh(n,e,vg(t))},r),t&&(t.finalized_=!1),n}new hg().produce;function Z(e){return e}var yg=qf({name:`legend`,initialState:{settings:{layout:`horizontal`,align:`center`,verticalAlign:`middle`,itemSorter:`value`},size:{width:0,height:0},payload:[]},reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload:{reducer(e,t){e.payload.push(Z(t.payload))},prepare:q()},replaceLegendPayload:{reducer(e,t){var{prev:n,next:r}=t.payload,i=bf(e).payload.indexOf(Z(n));i>-1&&(e.payload[i]=Z(r))},prepare:q()},removeLegendPayload:{reducer(e,t){var n=bf(e).payload.indexOf(Z(t.payload));n>-1&&e.payload.splice(n,1)},prepare:q()}}}),{setLegendSize:bg,setLegendSettings:xg,addLegendPayload:Sg,replaceLegendPayload:Cg,removeLegendPayload:wg}=yg.actions,Tg=yg.reducer,Eg=M((e=>{var t=n();t.useSyncExternalStore,t.useRef,t.useEffect,t.useMemo,t.useDebugValue}));M(((e,t)=>{t.exports=Eg()}))();function Dg(e){e()}function Og(){let e=null,t=null;return{clear(){e=null,t=null},notify(){Dg(()=>{let t=e;for(;t;)t.callback(),t=t.next})},get(){let t=[],n=e;for(;n;)t.push(n),n=n.next;return t},subscribe(n){let r=!0,i=t={callback:n,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!r||e===null||(r=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var kg={notify(){},get:()=>[]};function Ag(e,t){let n,r=kg,i=0,a=!1;function o(e){u();let t=r.subscribe(e),n=!1;return()=>{n||(n=!0,t(),d())}}function s(){r.notify()}function c(){m.onStateChange&&m.onStateChange()}function l(){return a}function u(){i++,n||(n=t?t.addNestedSub(c):e.subscribe(c),r=Og())}function d(){i--,n&&i===0&&(n(),n=void 0,r.clear(),r=kg)}function f(){a||(a=!0,u())}function p(){a&&(a=!1,d())}let m={addNestedSub:o,notifyNestedSubs:s,handleChangeWrapper:c,isSubscribed:l,trySubscribe:f,tryUnsubscribe:p,getListeners:()=>r};return m}var jg=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0,Mg=typeof navigator<`u`&&navigator.product===`ReactNative`,Ng=jg||Mg?F.useLayoutEffect:F.useEffect;function Pg(e,t){return e===t?e!==0||t!==0||1/e==1/t:e!==e&&t!==t}function Fg(e,t){if(Pg(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r=0;r({store:i,subscription:Ag(i),getServerState:r?()=>r:void 0}),[i,r]),o=F.useMemo(()=>i.getState(),[i]);Ng(()=>{let{subscription:e}=a;return e.onStateChange=e.notifyNestedSubs,e.trySubscribe(),o!==i.getState()&&e.notifyNestedSubs(),()=>{e.tryUnsubscribe(),e.onStateChange=void 0}},[a,o]);let s=n||zg;return F.createElement(s.Provider,{value:a},t)}var Vg=Bg,Hg=new Set([`axisLine`,`tickLine`,`activeBar`,`activeDot`,`activeLabel`,`activeShape`,`allowEscapeViewBox`,`background`,`cursor`,`dot`,`label`,`line`,`margin`,`padding`,`position`,`shape`,`style`,`tick`,`wrapperStyle`,`radius`,`throttledEvents`]);function Ug(e,t){return e==null&&t==null?!0:typeof e==`number`&&typeof t==`number`?e===t||e!==e&&t!==t:e===t}function Wg(e,t){for(var n of new Set([...Object.keys(e),...Object.keys(t)]))if(Hg.has(n)){if(e[n]==null&&t[n]==null)continue;if(!Fg(e[n],t[n]))return!1}else if(!Ug(e[n],t[n]))return!1;return!0}var Gg=Se(Ve()),Kg=[`contextPayload`];function qg(){return qg=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t(xg(e))},[t,e]),null}function a_(e){var t=W();return(0,F.useEffect)(()=>(t(bg(e)),()=>{t(bg({width:0,height:0}))}),[t,e]),null}function o_(e,t,n,r){return e===`vertical`&&t!=null?{height:t}:e===`horizontal`?{width:n||r}:null}var s_={align:`center`,iconSize:14,inactiveColor:`#ccc`,itemSorter:`value`,layout:`horizontal`,verticalAlign:`bottom`};function c_(e){var t=xl(e,s_),n=Vu(),r=is(),i=vh(),{width:a,height:o,wrapperStyle:s,portal:c}=t,[l,u]=Uu([n]),d=gh(),f=_h();if(d==null||f==null)return null;var p=d-(i?.left||0)-(i?.right||0),m=o_(t.layout,o,a,p),h=c?s:Yg(Yg({position:`absolute`,width:m?.width||a||`auto`,height:m?.height||o||`auto`},r_(s,t,i,d,f,l)),s),g=c??r;return g==null||n==null?null:(0,Gg.createPortal)(F.createElement(`div`,{className:`recharts-legend-wrapper`,style:h,ref:u},F.createElement(i_,{layout:t.layout,align:t.align,verticalAlign:t.verticalAlign,itemSorter:t.itemSorter}),!c&&F.createElement(a_,{width:l.width,height:l.height}),F.createElement(n_,qg({},t,m,{margin:i,chartWidth:d,chartHeight:f,contextPayload:n}))),g)}var l_=F.memo(c_,Wg);l_.displayName=`Legend`;function u_(){return u_=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{separator:t=__.separator,contentStyle:n,itemStyle:r,labelStyle:i=__.labelStyle,payload:a,formatter:o,itemSorter:s,wrapperClassName:c,labelClassName:l,label:u,labelFormatter:d,accessibilityLayer:f=__.accessibilityLayer}=e,p=()=>{if(a&&a.length){var e={padding:0,margin:0},n=v_(a,s).map((e,n)=>{if(!e||e.type===`none`)return null;var i=e.formatter||o||g_,{value:s,name:c}=e,l=s,u=c;if(i){var d=i(s,c,e,n,a);if(Array.isArray(d))[l,u]=d;else if(d!=null)l=d;else return null}var f=f_(f_({},__.itemStyle),{},{color:e.color||__.itemStyle.color},r);return F.createElement(`li`,{className:`recharts-tooltip-item`,key:`tooltip-item-${n}`,style:f},Hc(u)?F.createElement(`span`,{className:`recharts-tooltip-item-name`},u):null,Hc(u)?F.createElement(`span`,{className:`recharts-tooltip-item-separator`},t):null,F.createElement(`span`,{className:`recharts-tooltip-item-value`},l),F.createElement(`span`,{className:`recharts-tooltip-item-unit`},e.unit||``))});return F.createElement(`ul`,{className:`recharts-tooltip-item-list`,style:e},n)}return null},m=f_(f_({},__.contentStyle),n),h=f_({margin:0},i),g=!U(u),_=g?u:``,v=P(`recharts-default-tooltip`,c),y=P(`recharts-tooltip-label`,l);g&&d&&a!=null&&(_=d(u,a));var b=f?{role:`status`,"aria-live":`assertive`}:{};return F.createElement(`div`,u_({className:v,style:m},b),F.createElement(`p`,{className:y,style:h},F.isValidElement(_)?_:`${_}`),p())},b_=`recharts-tooltip-wrapper`,x_={visibility:`hidden`};function S_(e){var{coordinate:t,translateX:n,translateY:r}=e;return P(b_,{[`${b_}-right`]:V(n)&&t&&V(t.x)&&n>=t.x,[`${b_}-left`]:V(n)&&t&&V(t.x)&&n=t.y,[`${b_}-top`]:V(r)&&t&&V(t.y)&&r0?i:0),d=n[r]+i;if(t[r])return o[r]?u:d;var f=c[r];return f==null?0:o[r]?Math.max(uf+l?Math.max(u,f):Math.max(d,f)}function w_(e){var{translateX:t,translateY:n,useTranslate3d:r}=e;return{transform:r?`translate3d(${t}px, ${n}px, 0)`:`translate(${t}px, ${n}px)`}}function T_(e){var{allowEscapeViewBox:t,coordinate:n,offsetTop:r,offsetLeft:i,position:a,reverseDirection:o,tooltipBox:s,useTranslate3d:c,viewBox:l}=e,u,d,f;return s.height>0&&s.width>0&&n?(d=C_({allowEscapeViewBox:t,coordinate:n,key:`x`,offset:i,position:a,reverseDirection:o,tooltipDimension:s.width,viewBox:l,viewBoxDimension:l.width}),f=C_({allowEscapeViewBox:t,coordinate:n,key:`y`,offset:r,position:a,reverseDirection:o,tooltipDimension:s.height,viewBox:l,viewBoxDimension:l.height}),u=w_({translateX:d,translateY:f,useTranslate3d:c})):u=x_,{cssProperties:u,cssClasses:S_({translateX:d,translateY:f,coordinate:n})}}var E_={devToolsEnabled:!0,isSsr:!(typeof window<`u`&&window.document&&window.document.createElement&&window.setTimeout)};function D_(){var[e,t]=(0,F.useState)(()=>E_.isSsr||!window.matchMedia?!1:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches);return(0,F.useEffect)(()=>{if(window.matchMedia){var e=window.matchMedia(`(prefers-reduced-motion: reduce)`),n=()=>{t(e.matches)};return e.addEventListener(`change`,n),()=>{e.removeEventListener(`change`,n)}}},[]),e}function O_(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 k_(e){for(var t=1;t({dismissed:!1,dismissedAtCoordinate:{x:0,y:0}}));F.useEffect(()=>{var t=t=>{t.key===`Escape`&&r({dismissed:!0,dismissedAtCoordinate:{x:e.coordinate?.x??0,y:e.coordinate?.y??0}})};return document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`keydown`,t)}},[e.coordinate?.x,e.coordinate?.y]),n.dismissed&&((e.coordinate?.x??0)!==n.dismissedAtCoordinate.x||(e.coordinate?.y??0)!==n.dismissedAtCoordinate.y)&&r(k_(k_({},n),{},{dismissed:!1}));var{cssClasses:i,cssProperties:a}=T_({allowEscapeViewBox:e.allowEscapeViewBox,coordinate:e.coordinate,offsetLeft:typeof e.offset==`number`?e.offset:e.offset.x,offsetTop:typeof e.offset==`number`?e.offset:e.offset.y,position:e.position,reverseDirection:e.reverseDirection,tooltipBox:{height:e.lastBoundingBox.height,width:e.lastBoundingBox.width},useTranslate3d:e.useTranslate3d,viewBox:e.viewBox}),o=k_(k_({},e.hasPortalFromProps?{}:k_(k_({transition:N_({prefersReducedMotion:t,isAnimationActive:e.isAnimationActive,active:e.active,animationDuration:e.animationDuration,animationEasing:e.animationEasing})},a),{},{pointerEvents:`none`,position:`absolute`,top:0,left:0})),{},{visibility:!n.dismissed&&e.active&&e.hasPayload?`visible`:`hidden`},e.wrapperStyle);return F.createElement(`div`,{xmlns:`http://www.w3.org/1999/xhtml`,tabIndex:-1,className:i,style:o,ref:e.innerRef},e.children)}var F_=F.memo(P_),I_=()=>G(e=>e.rootProps.accessibilityLayer)??!0;function L_(){return L_=Object.assign?Object.assign.bind():function(e){for(var t=1;tJ(e.x)&&J(e.y),G_=e=>e.base!=null&&W_(e.base)&&W_(e),K_=e=>e.x,q_=e=>e.y,J_=(e,t)=>{if(typeof e==`function`)return e;var n=`curve${Jc(e)}`;if((n===`curveMonotone`||n===`curveBump`)&&t){var r=U_[`${n}${t===`vertical`?`Y`:`X`}`];if(r)return r}return U_[n]||xs},Y_={connectNulls:!1,type:`linear`},X_=e=>{var{type:t=Y_.type,points:n=[],baseLine:r,layout:i,connectNulls:a=Y_.connectNulls}=e,o=J_(t,i),s=a?n.filter(W_):n;if(Array.isArray(r)){var c,l=n.map((e,t)=>z_(z_({},e),{},{base:r[t]}));return c=i===`vertical`?Ts().y(q_).x1(K_).x0(e=>e.base.x):Ts().x(K_).y1(q_).y0(e=>e.base.y),c.defined(G_).curve(o)(a?l.filter(G_):l)}return(i===`vertical`&&V(r)?Ts().y(q_).x1(K_).x0(r):V(r)?Ts().x(K_).y1(q_).y0(r):ws().x(K_).y(q_)).defined(W_).curve(o)(s)},Z_=e=>{var{className:t,points:n,path:r,pathRef:i}=e,a=yh();if((!n||!n.length)&&!r)return null;var o={type:e.type,points:e.points,baseLine:e.baseLine,layout:e.layout||a,connectNulls:e.connectNulls},s=n&&n.length?X_(o):r;return F.createElement(`path`,L_({},Uo(e),pl(e),{className:P(`recharts-curve`,t),d:s===null?void 0:s,ref:i}))},Q_=[`x`,`y`,`top`,`left`,`width`,`height`,`className`];function $_(){return $_=Object.assign?Object.assign.bind():function(e){for(var t=1;t`M${e},${i}v${r}M${a},${t}h${n}`,cv=e=>{var{x:t=0,y:n=0,top:r=0,left:i=0,width:a=0,height:o=0,className:s}=e,c=av(e,Q_),l=tv({x:t,y:n,top:r,left:i,width:a,height:o},c);return!V(t)||!V(n)||!V(a)||!V(o)||!V(r)||!V(i)?null:F.createElement(`path`,$_({},Go(l),{className:P(`recharts-cross`,s),d:sv(t,n,a,o,r,i)}))};function lv(e,t,n,r){var i=r/2;return{stroke:`none`,fill:`#ccc`,x:e===`horizontal`?t.x-i:n.left+.5,y:e===`horizontal`?n.top+.5:t.y-i,width:e===`horizontal`?r:n.width-1,height:e===`horizontal`?n.height-1:r}}function uv(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 dv(e){for(var t=1;te.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`),gv=(e,t,n)=>e.map(e=>`${hv(e)} ${t}ms ${n}`).join(`,`),_v=(e,t)=>[Object.keys(e),Object.keys(t)].reduce((e,t)=>e.filter(e=>t.includes(e))),vv=(e,t)=>Object.keys(t).reduce((n,r)=>dv(dv({},n),{},{[r]:e(r,t[r])}),{});function yv(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 bv(e){for(var t=1;te+(t-e)*n,Tv=e=>{var{from:t,to:n}=e;return t!==n},Ev=(e,t,n)=>{var r=vv((t,n)=>{if(Tv(n)){var[r,i]=e(n.from,n.to,n.velocity);return bv(bv({},n),{},{from:r,velocity:i})}return n},t);return n<1?vv((e,t)=>Tv(t)&&r[e]!=null?bv(bv({},t),{},{velocity:wv(t.velocity,r[e].velocity,n),from:wv(t.from,r[e].from,n)}):t,t):Ev(e,r,n-1)};function Dv(e,t,n,r,i,a){var o,s=r.reduce((n,r)=>bv(bv({},n),{},{[r]:{from:e[r],velocity:0,to:t[r]}}),{}),c=()=>vv((e,t)=>t.from,s),l=()=>!Object.values(s).filter(Tv).length,u=null,d=r=>{o||=r;var f=(r-o)/n.dt;s=Ev(n,s,f),i(bv(bv(bv({},e),t),c())),o=r,l()||(u=a.setTimeout(d))};return()=>(u=a.setTimeout(d),()=>{var e;(e=u)==null||e()})}function Ov(e,t,n,r,i,a,o){var s=null,c=i.reduce((n,r)=>{var i=e[r],a=t[r];return i==null||a==null?n:bv(bv({},n),{},{[r]:[i,a]})},{}),l,u=i=>{l||=i;var d=(i-l)/r,f=vv((e,t)=>wv(...t,n(d)),c);if(a(bv(bv(bv({},e),t),f)),d<1)s=o.setTimeout(u);else{var p=vv((e,t)=>wv(...t,n(1)),c);a(bv(bv(bv({},e),t),p))}};return()=>(s=o.setTimeout(u),()=>{var e;(e=s)==null||e()})}var kv=(e,t,n,r,i,a)=>{var o=_v(e,t);return n==null?()=>(i(bv(bv({},e),t)),()=>{}):n.isStepper===!0?Dv(e,t,n,o,i,a):Ov(e,t,n,r,o,i,a)},Av=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],jv=(e,t)=>e.map((e,n)=>e*t**n).reduce((e,t)=>e+t),Mv=(e,t)=>n=>jv(Av(e,t),n),Nv=(e,t)=>n=>jv([...Av(e,t).map((e,t)=>e*t).slice(1),0],n),Pv=e=>{var t,n=e.split(`(`);if(n.length!==2||n[0]!==`cubic-bezier`)return null;var r=(t=n[1])==null||(t=t.split(`)`)[0])==null?void 0:t.split(`,`);if(r==null||r.length!==4)return null;var i=r.map(e=>parseFloat(e));return[i[0],i[1],i[2],i[3]]},Fv=function(){var e=[...arguments];if(e.length===1)switch(e[0]){case`linear`:return[0,0,1,1];case`ease`:return[.25,.1,.25,1];case`ease-in`:return[.42,0,1,1];case`ease-out`:return[.42,0,.58,1];case`ease-in-out`:return[0,0,.58,1];default:var t=Pv(e[0]);if(t)return t}return e.length===4?e:[0,0,1,1]},Iv=(e,t,n,r)=>{var i=Mv(e,n),a=Mv(t,r),o=Nv(e,n),s=e=>e>1?1:e<0?0:e,c=e=>{for(var t=e>1?1:e,n=t,r=0;r<8;++r){var c=i(n)-t,l=o(n);if(Math.abs(c-t)<1e-4||l<1e-4)return a(n);n=s(n-c/l)}return a(n)};return c.isStepper=!1,c},Lv=function(){return Iv(...Fv(...arguments))},Rv=function(){var{stiff:e=100,damping:t=8,dt:n=17}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=(r,i,a)=>{var o=a+(-(r-i)*e-a*t)*n/1e3,s=a*n/1e3+r;return Math.abs(s-i)<1e-4&&Math.abs(o)<1e-4?[i,0]:[s,o]};return r.isStepper=!0,r.dt=n,r},zv=e=>{if(typeof e==`string`)switch(e){case`ease`:case`ease-in-out`:case`ease-out`:case`ease-in`:case`linear`:return Lv(e);case`spring`:return Rv();default:if(e.split(`(`)[0]===`cubic-bezier`)return Lv(e)}return typeof e==`function`?e:null};function Bv(e){var t,n=()=>null,r=!1,i=null,a=o=>{if(!r){if(Array.isArray(o)){if(!o.length)return;var[s,...c]=o;if(typeof s==`number`){i=e.setTimeout(a.bind(null,c),s);return}a(s),i=e.setTimeout(a.bind(null,c));return}typeof o==`string`&&(t=o,n(t)),typeof o==`object`&&(t=o,n(t)),typeof o==`function`&&o()}};return{stop:()=>{r=!0},start:e=>{r=!1,i&&=(i(),null),a(e)},subscribe:e=>(n=e,()=>{n=()=>null}),getTimeoutController:()=>e}}var Vv=class{setTimeout(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),r=null,i=a=>{a-n>=t?e(a):typeof requestAnimationFrame==`function`&&(r=requestAnimationFrame(i))};return r=requestAnimationFrame(i),()=>{r!=null&&cancelAnimationFrame(r)}}};function Hv(){return Bv(new Vv)}var Uv=(0,F.createContext)(Hv);function Wv(e,t){var n=(0,F.useContext)(Uv);return(0,F.useMemo)(()=>t??n(e),[e,t,n])}var Gv={begin:0,duration:1e3,easing:`ease`,isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}},Kv={t:0},qv={t:1};function Jv(e){var t=xl(e,Gv),{isActive:n,canBegin:r,duration:i,easing:a,begin:o,onAnimationEnd:s,onAnimationStart:c,children:l}=t,u=D_(),d=n===`auto`?!E_.isSsr&&!u:n,f=Wv(t.animationId,t.animationManager),[p,m]=(0,F.useState)(d?Kv:qv),h=(0,F.useRef)(null);return(0,F.useEffect)(()=>{d||m(qv)},[d]),(0,F.useEffect)(()=>{if(!d||!r)return Xc;var e=kv(Kv,qv,zv(a),i,m,f.getTimeoutController());return f.start([c,o,()=>{h.current=e()},i,s]),()=>{f.stop(),h.current&&h.current(),s()}},[d,r,i,a,o,c,s,f]),l(p.t)}function Yv(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`animation-`,n=(0,F.useRef)(Wc(t)),r=(0,F.useRef)(e);return r.current!==e&&(n.current=Wc(t),r.current=e),n.current}var Xv=[`radius`],Zv=[`radius`],Qv,$v,ey,ty,ny,ry,iy,ay,oy,sy;function cy(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 ly(e){for(var t=1;t{var a=Ic(n),o=Ic(r),s=Math.min(Math.abs(a)/2,Math.abs(o)/2),c=o>=0?1:-1,l=a>=0?1:-1,u=+(o>=0&&a>=0||o<0&&a<0),d;if(s>0&&Array.isArray(i)){for(var f=[0,0,0,0],p=0,m=4;ps?s:h}d=Lc(Qv||=gy([`M`,`,`,``]),e,t+c*f[0]),f[0]>0&&(d+=Lc($v||=gy([`A `,`,`,`,0,0,`,`,`,`,`,``]),f[0],f[0],u,e+l*f[0],t)),d+=Lc(ey||=gy([`L `,`,`,``]),e+n-l*f[1],t),f[1]>0&&(d+=Lc(ty||=gy([`A `,`,`,`,0,0,`,`, + `,`,`,``]),f[1],f[1],u,e+n,t+c*f[1])),d+=Lc(ny||=gy([`L `,`,`,``]),e+n,t+r-c*f[2]),f[2]>0&&(d+=Lc(ry||=gy([`A `,`,`,`,0,0,`,`, + `,`,`,``]),f[2],f[2],u,e+n-l*f[2],t+r)),d+=Lc(iy||=gy([`L `,`,`,``]),e+l*f[3],t+r),f[3]>0&&(d+=Lc(ay||=gy([`A `,`,`,`,0,0,`,`, + `,`,`,``]),f[3],f[3],u,e,t+r-c*f[3])),d+=`Z`}else if(s>0&&i===+i&&i>0){var g=Math.min(s,i);d=Lc(oy||=gy(`M .,. + A .,.,0,0,.,.,. + L .,. + A .,.,0,0,.,.,. + L .,. + A .,.,0,0,.,.,. + L .,. + A .,.,0,0,.,.,. Z`.split(`.`)),e,t+c*g,g,g,u,e+l*g,t,e+n-l*g,t,g,g,u,e+n,t+c*g,e+n,t+r-c*g,g,g,u,e+n-l*g,t+r,e+l*g,t+r,g,g,u,e,t+r-c*g)}else d=Lc(sy||=gy([`M `,`,`,` h `,` v `,` h `,` Z`]),e,t,n,r,-n);return d},vy={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:`ease`},yy=e=>{var t=xl(e,vy),n=(0,F.useRef)(null),[r,i]=(0,F.useState)(-1);(0,F.useEffect)(()=>{if(n.current&&n.current.getTotalLength)try{var e=n.current.getTotalLength();e&&i(e)}catch{}},[]);var{x:a,y:o,width:s,height:c,radius:l,className:u}=t,{animationEasing:d,animationDuration:f,animationBegin:p,isAnimationActive:m,isUpdateAnimationActive:h}=t,g=(0,F.useRef)(s),_=(0,F.useRef)(c),v=(0,F.useRef)(a),y=(0,F.useRef)(o),b=Yv((0,F.useMemo)(()=>({x:a,y:o,width:s,height:c,radius:l}),[a,o,s,c,l]),`rectangle-`);if(a!==+a||o!==+o||s!==+s||c!==+c||s===0||c===0)return null;var x=P(`recharts-rectangle`,u);if(!h){var S=Go(t),{radius:C}=S,w=my(S,Xv);return F.createElement(`path`,py({},w,{x:Ic(a),y:Ic(o),width:Ic(s),height:Ic(c),radius:typeof l==`number`?l:void 0,className:x,d:_y(a,o,s,c,l)}))}var T=g.current,E=_.current,D=v.current,O=y.current,k=`0px ${r===-1?1:r}px`,ee=`${r}px ${r}px`,te=gv([`strokeDasharray`],f,typeof d==`string`?d:vy.animationEasing);return F.createElement(Jv,{animationId:b,key:b,canBegin:r>0,duration:f,easing:d,isActive:h,begin:p},e=>{var r=H(T,s,e),i=H(E,c,e),u=H(D,a,e),d=H(O,o,e);n.current&&(g.current=r,_.current=i,v.current=u,y.current=d);var f=m?e>0?{transition:te,strokeDasharray:ee}:{strokeDasharray:k}:{strokeDasharray:ee},p=Go(t),{radius:h}=p,b=my(p,Zv);return F.createElement(`path`,py({},b,{radius:typeof l==`number`?l:void 0,className:x,d:_y(u,d,r,i,l),ref:n,style:ly(ly({},f),t.style)}))})};function by(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 xy(e){for(var t=1;te*180/Math.PI,Dy=(e,t,n,r)=>({x:e+Math.cos(-Ty*r)*n,y:t+Math.sin(-Ty*r)*n}),Oy=function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0,width:0,height:0,brushBottom:0};return Math.min(Math.abs(e-(n.left||0)-(n.right||0)),Math.abs(t-(n.top||0)-(n.bottom||0)))/2},ky=(e,t)=>{var{x:n,y:r}=e,{x:i,y:a}=t;return Math.sqrt((n-i)**2+(r-a)**2)},Ay=(e,t)=>{var{x:n,y:r}=e,{cx:i,cy:a}=t,o=ky({x:n,y:r},{x:i,y:a});if(o<=0)return{radius:o,angle:0};var s=(n-i)/o,c=Math.acos(s);return r>a&&(c=2*Math.PI-c),{radius:o,angle:Ey(c),angleInRadian:c}},jy=e=>{var{startAngle:t,endAngle:n}=e,r=Math.floor(t/360),i=Math.floor(n/360),a=Math.min(r,i);return{startAngle:t-a*360,endAngle:n-a*360}},My=(e,t)=>{var{startAngle:n,endAngle:r}=t,i=Math.floor(n/360),a=Math.floor(r/360);return e+Math.min(i,a)*360},Ny=(e,t)=>{var{relativeX:n,relativeY:r}=e,{radius:i,angle:a}=Ay({x:n,y:r},t),{innerRadius:o,outerRadius:s}=t;if(is||i===0)return null;var{startAngle:c,endAngle:l}=jy(t),u=a,d;if(c<=l){for(;u>l;)u-=360;for(;u=c&&u<=l}else{for(;u>c;)u-=360;for(;u=l&&u<=c}return d?xy(xy({},t),{},{radius:i,angle:My(u,t)}):null};function Py(e){var{cx:t,cy:n,radius:r,startAngle:i,endAngle:a}=e;return{points:[Dy(t,n,r,i),Dy(t,n,r,a)],cx:t,cy:n,radius:r,startAngle:i,endAngle:a}}var Fy,Iy,Ly,Ry,zy,By,Vy;function Hy(){return Hy=Object.assign?Object.assign.bind():function(e){for(var t=1;tzc(t-e)*Math.min(Math.abs(t-e),359.999),Gy=e=>{var{cx:t,cy:n,radius:r,angle:i,sign:a,isExternal:o,cornerRadius:s,cornerIsExternal:c}=e,l=s*(o?1:-1)+r,u=Math.asin(s/l)/Ty,d=c?i:i+a*u,f=Dy(t,n,l,d),p=Dy(t,n,r,d),m=c?i-a*u:i;return{center:f,circleTangency:p,lineTangency:Dy(t,n,l*Math.cos(u*Ty),m),theta:u}},Ky=e=>{var{cx:t,cy:n,innerRadius:r,outerRadius:i,startAngle:a,endAngle:o}=e,s=Wy(a,o),c=a+s,l=Dy(t,n,i,a),u=Dy(t,n,i,c),d=Lc(Fy||=Uy([`M `,`,`,` + A `,`,`,`,0, + `,`,`,`, + `,`,`,` + `]),l.x,l.y,i,i,+(Math.abs(s)>180),+(a>c),u.x,u.y);if(r>0){var f=Dy(t,n,r,a),p=Dy(t,n,r,c);d+=Lc(Iy||=Uy([`L `,`,`,` + A `,`,`,`,0, + `,`,`,`, + `,`,`,` Z`]),p.x,p.y,r,r,+(Math.abs(s)>180),+(a<=c),f.x,f.y)}else d+=Lc(Ly||=Uy([`L `,`,`,` Z`]),t,n);return d},qy=e=>{var{cx:t,cy:n,innerRadius:r,outerRadius:i,cornerRadius:a,forceCornerRadius:o,cornerIsExternal:s,startAngle:c,endAngle:l}=e,u=zc(l-c),{circleTangency:d,lineTangency:f,theta:p}=Gy({cx:t,cy:n,radius:i,angle:c,sign:u,cornerRadius:a,cornerIsExternal:s}),{circleTangency:m,lineTangency:h,theta:g}=Gy({cx:t,cy:n,radius:i,angle:l,sign:-u,cornerRadius:a,cornerIsExternal:s}),_=s?Math.abs(c-l):Math.abs(c-l)-p-g;if(_<0)return o?Lc(Ry||=Uy([`M `,`,`,` + a`,`,`,`,0,0,1,`,`,0 + a`,`,`,`,0,0,1,`,`,0 + `]),f.x,f.y,a,a,a*2,a,a,-a*2):Ky({cx:t,cy:n,innerRadius:r,outerRadius:i,startAngle:c,endAngle:l});var v=Lc(zy||=Uy([`M `,`,`,` + A`,`,`,`,0,0,`,`,`,`,`,` + A`,`,`,`,0,`,`,`,`,`,`,`,` + A`,`,`,`,0,0,`,`,`,`,`,` + `]),f.x,f.y,a,a,+(u<0),d.x,d.y,i,i,+(_>180),+(u<0),m.x,m.y,a,a,+(u<0),h.x,h.y);if(r>0){var{circleTangency:y,lineTangency:b,theta:x}=Gy({cx:t,cy:n,radius:r,angle:c,sign:u,isExternal:!0,cornerRadius:a,cornerIsExternal:s}),{circleTangency:S,lineTangency:C,theta:w}=Gy({cx:t,cy:n,radius:r,angle:l,sign:-u,isExternal:!0,cornerRadius:a,cornerIsExternal:s}),T=s?Math.abs(c-l):Math.abs(c-l)-x-w;if(T<0&&a===0)return`${v}L${t},${n}Z`;v+=Lc(By||=Uy([`L`,`,`,` + A`,`,`,`,0,0,`,`,`,`,`,` + A`,`,`,`,0,`,`,`,`,`,`,`,` + A`,`,`,`,0,0,`,`,`,`,`,`Z`]),C.x,C.y,a,a,+(u<0),S.x,S.y,r,r,+(T>180),+(u>0),y.x,y.y,a,a,+(u<0),b.x,b.y)}else v+=Lc(Vy||=Uy([`L`,`,`,`Z`]),t,n);return v},Jy={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},Yy=e=>{var t=xl(e,Jy),{cx:n,cy:r,innerRadius:i,outerRadius:a,cornerRadius:o,forceCornerRadius:s,cornerIsExternal:c,startAngle:l,endAngle:u,className:d}=t;if(a0&&Math.abs(l-u)<360?qy({cx:n,cy:r,innerRadius:i,outerRadius:a,cornerRadius:Math.min(m,p/2),forceCornerRadius:s,cornerIsExternal:c,startAngle:l,endAngle:u}):Ky({cx:n,cy:r,innerRadius:i,outerRadius:a,startAngle:l,endAngle:u});return F.createElement(`path`,Hy({},Go(t),{className:f,d:h}))};function Xy(e,t,n){if(e===`horizontal`)return[{x:t.x,y:n.top},{x:t.x,y:n.top+n.height}];if(e===`vertical`)return[{x:n.left,y:t.y},{x:n.left+n.width,y:t.y}];if(fl(t)){if(e===`centric`){var{cx:r,cy:i,innerRadius:a,outerRadius:o,angle:s}=t,c=Dy(r,i,a,s),l=Dy(r,i,o,s);return[{x:c.x,y:c.y},{x:l.x,y:l.y}]}return Py(t)}}var Zy=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=ju();function n(e){return t.isSymbol(e)?NaN:Number(e)}e.toNumber=n})),Qy=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Zy();function n(e){return e?(e=t.toNumber(e),e===1/0||e===-1/0?(e<0?-1:1)*Number.MAX_VALUE:e===e?e:0):e===0?e:0}e.toFinite=n})),$y=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Fu(),n=Qy();function r(e,r,i){i&&typeof i!=`number`&&t.isIterateeCall(e,r,i)&&(r=i=void 0),e=n.toFinite(e),r===void 0?(r=e,e=0):r=n.toFinite(r),i=i===void 0?e{t.exports=$y().range})),tb=e=>e.chartData,nb=K([tb],e=>{var t=e.chartData==null?0:e.chartData.length-1;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),rb=(e,t,n,r)=>r?nb(e):tb(e),ib=(e,t,n)=>n?nb(e):tb(e),ab=K([rb],e=>{var{chartData:t,dataStartIndex:n,dataEndIndex:r}=e;return t==null?[]:t.slice(n,r+1)});K([nb],e=>{var{chartData:t,dataStartIndex:n,dataEndIndex:r}=e;return t==null?[]:t.slice(n,r+1)});var ob=K([tb],e=>{var{chartData:t,dataStartIndex:n,dataEndIndex:r}=e;return t==null?[]:t.slice(n,r+1)});function sb(e){if(Array.isArray(e)&&e.length===2){var[t,n]=e;if(J(t)&&J(n))return!0}return!1}function cb(e,t,n){return n?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}function lb(e,t){if(t&&typeof e!=`function`&&Array.isArray(e)&&e.length===2){var[n,r]=e,i,a;if(J(n))i=n;else if(typeof n==`function`)return;if(J(r))a=r;else if(typeof r==`function`)return;var o=[i,a];if(sb(o))return o}}function ub(e,t,n){if(!(!n&&t==null)){if(typeof e==`function`&&t!=null)try{var r=e(t,n);if(sb(r))return cb(r,t,n)}catch{}if(Array.isArray(e)&&e.length===2){var[i,a]=e,o,s;if(i===`auto`)t!=null&&(o=Math.min(...t));else if(V(i))o=i;else if(typeof i==`function`)try{t!=null&&(o=i(t?.[0]))}catch{}else if(typeof i==`string`&&cm.test(i)){var c=cm.exec(i);if(c==null||c[1]==null||t==null)o=void 0;else{var l=+c[1];o=t[0]-l}}else o=t?.[0];if(a===`auto`)t!=null&&(s=Math.max(...t));else if(V(a))s=a;else if(typeof a==`function`)try{t!=null&&(s=a(t?.[1]))}catch{}else if(typeof a==`string`&&lm.test(a)){var u=lm.exec(a);if(u==null||u[1]==null||t==null)s=void 0;else{var d=+u[1];s=t[1]+d}}else s=t?.[1];var f=[o,s];if(sb(f))return t==null?f:cb(f,t,n)}}}var Q=Se(M(((e,t)=>{(function(e){var n=1e9,r={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:`2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286`},i=!0,a=`[DecimalError] `,o=a+`Invalid argument: `,s=a+`Exponent out of range: `,c=Math.floor,l=Math.pow,u=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d,f=1e7,p=7,m=9007199254740991,h=c(m/p),g={};g.absoluteValue=g.abs=function(){var e=new this.constructor(this);return e.s&&=1,e},g.comparedTo=g.cmp=function(e){var t,n,r,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(r=a.d.length,i=e.d.length,t=0,n=re.d[t]^a.s<0?1:-1;return r===i?0:r>i^a.s<0?1:-1},g.decimalPlaces=g.dp=function(){var e=this,t=e.d.length-1,n=(t-e.e)*p;if(t=e.d[t],t)for(;t%10==0;t/=10)n--;return n<0?0:n},g.dividedBy=g.div=function(e){return b(this,new this.constructor(e))},g.dividedToIntegerBy=g.idiv=function(e){var t=this,n=t.constructor;return D(b(t,new n(e),0,1),n.precision)},g.equals=g.eq=function(e){return!this.cmp(e)},g.exponent=function(){return S(this)},g.greaterThan=g.gt=function(e){return this.cmp(e)>0},g.greaterThanOrEqualTo=g.gte=function(e){return this.cmp(e)>=0},g.isInteger=g.isint=function(){return this.e>this.d.length-2},g.isNegative=g.isneg=function(){return this.s<0},g.isPositive=g.ispos=function(){return this.s>0},g.isZero=function(){return this.s===0},g.lessThan=g.lt=function(e){return this.cmp(e)<0},g.lessThanOrEqualTo=g.lte=function(e){return this.cmp(e)<1},g.logarithm=g.log=function(e){var t,n=this,r=n.constructor,o=r.precision,s=o+5;if(e===void 0)e=new r(10);else if(e=new r(e),e.s<1||e.eq(d))throw Error(a+`NaN`);if(n.s<1)throw Error(a+(n.s?`NaN`:`-Infinity`));return n.eq(d)?new r(0):(i=!1,t=b(T(n,s),T(e,s),s),i=!0,D(t,o))},g.minus=g.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?O(t,e):_(t,(e.s=-e.s,e))},g.modulo=g.mod=function(e){var t,n=this,r=n.constructor,o=r.precision;if(e=new r(e),!e.s)throw Error(a+`NaN`);return n.s?(i=!1,t=b(n,e,0,1).times(e),i=!0,n.minus(t)):D(new r(n),o)},g.naturalExponential=g.exp=function(){return x(this)},g.naturalLogarithm=g.ln=function(){return T(this)},g.negated=g.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e},g.plus=g.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?_(t,e):O(t,(e.s=-e.s,e))},g.precision=g.sd=function(e){var t,n,r,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(o+e);if(t=S(i)+1,r=i.d.length-1,n=r*p+1,r=i.d[r],r){for(;r%10==0;r/=10)n--;for(r=i.d[0];r>=10;r/=10)n++}return e&&t>n?t:n},g.squareRoot=g.sqrt=function(){var e,t,n,r,o,s,l,u=this,d=u.constructor;if(u.s<1){if(!u.s)return new d(0);throw Error(a+`NaN`)}for(e=S(u),i=!1,o=Math.sqrt(+u),o==0||o==1/0?(t=y(u.d),(t.length+e)%2==0&&(t+=`0`),o=Math.sqrt(t),e=c((e+1)/2)-(e<0||e%2),o==1/0?t=`5e`+e:(t=o.toExponential(),t=t.slice(0,t.indexOf(`e`)+1)+e),r=new d(t)):r=new d(o.toString()),n=d.precision,o=l=n+3;;)if(s=r,r=s.plus(b(u,s,l+2)).times(.5),y(s.d).slice(0,l)===(t=y(r.d)).slice(0,l)){if(t=t.slice(l-3,l+1),o==l&&t==`4999`){if(D(s,n+1,0),s.times(s).eq(u)){r=s;break}}else if(t!=`9999`)break;l+=4}return i=!0,D(r,n)},g.times=g.mul=function(e){var t,n,r,a,o,s,c,l,u,d=this,p=d.constructor,m=d.d,h=(e=new p(e)).d;if(!d.s||!e.s)return new p(0);for(e.s*=d.s,n=d.e+e.e,l=m.length,u=h.length,l=0;){for(t=0,a=l+r;a>r;)c=o[a]+h[r]*m[a-r-1]+t,o[a--]=c%f|0,t=c/f|0;o[a]=(o[a]+t)%f|0}for(;!o[--s];)o.pop();return t?++n:o.shift(),e.d=o,e.e=n,i?D(e,p.precision):e},g.toDecimalPlaces=g.todp=function(e,t){var r=this,i=r.constructor;return r=new i(r),e===void 0?r:(v(e,0,n),t===void 0?t=i.rounding:v(t,0,8),D(r,e+S(r)+1,t))},g.toExponential=function(e,t){var r,i=this,a=i.constructor;return e===void 0?r=k(i,!0):(v(e,0,n),t===void 0?t=a.rounding:v(t,0,8),i=D(new a(i),e+1,t),r=k(i,!0,e+1)),r},g.toFixed=function(e,t){var r,i,a=this,o=a.constructor;return e===void 0?k(a):(v(e,0,n),t===void 0?t=o.rounding:v(t,0,8),i=D(new o(a),e+S(a)+1,t),r=k(i.abs(),!1,e+S(i)+1),a.isneg()&&!a.isZero()?`-`+r:r)},g.toInteger=g.toint=function(){var e=this,t=e.constructor;return D(new t(e),S(e)+1,t.rounding)},g.toNumber=function(){return+this},g.toPower=g.pow=function(e){var t,n,r,o,s,l,u=this,f=u.constructor,h=12,g=+(e=new f(e));if(!e.s)return new f(d);if(u=new f(u),!u.s){if(e.s<1)throw Error(a+`Infinity`);return u}if(u.eq(d))return u;if(r=f.precision,e.eq(d))return D(u,r);if(t=e.e,n=e.d.length-1,l=t>=n,s=u.s,!l){if(s<0)throw Error(a+`NaN`)}else if((n=g<0?-g:g)<=m){for(o=new f(d),t=Math.ceil(r/p+4),i=!1;n%2&&(o=o.times(u),ee(o.d,t)),n=c(n/2),n!==0;)u=u.times(u),ee(u.d,t);return i=!0,e.s<0?new f(d).div(o):D(o,r)}return s=s<0&&e.d[Math.max(t,n)]&1?-1:1,u.s=1,i=!1,o=e.times(T(u,r+h)),i=!0,o=x(o),o.s=s,o},g.toPrecision=function(e,t){var r,i,a=this,o=a.constructor;return e===void 0?(r=S(a),i=k(a,r<=o.toExpNeg||r>=o.toExpPos)):(v(e,1,n),t===void 0?t=o.rounding:v(t,0,8),a=D(new o(a),e,t),r=S(a),i=k(a,e<=r||r<=o.toExpNeg,e)),i},g.toSignificantDigits=g.tosd=function(e,t){var r=this,i=r.constructor;return e===void 0?(e=i.precision,t=i.rounding):(v(e,1,n),t===void 0?t=i.rounding:v(t,0,8)),D(new i(r),e,t)},g.toString=g.valueOf=g.val=g.toJSON=function(){var e=this,t=S(e),n=e.constructor;return k(e,t<=n.toExpNeg||t>=n.toExpPos)};function _(e,t){var n,r,a,o,s,c,l,u,d=e.constructor,m=d.precision;if(!e.s||!t.s)return t.s||(t=new d(e)),i?D(t,m):t;if(l=e.d,u=t.d,s=e.e,a=t.e,l=l.slice(),o=s-a,o){for(o<0?(r=l,o=-o,c=u.length):(r=u,a=s,c=l.length),s=Math.ceil(m/p),c=s>c?s+1:c+1,o>c&&(o=c,r.length=1),r.reverse();o--;)r.push(0);r.reverse()}for(c=l.length,o=u.length,c-o<0&&(o=c,r=u,u=l,l=r),n=0;o;)n=(l[--o]=l[o]+u[o]+n)/f|0,l[o]%=f;for(n&&(l.unshift(n),++a),c=l.length;l[--c]==0;)l.pop();return t.d=l,t.e=a,i?D(t,m):t}function v(e,t,n){if(e!==~~e||en)throw Error(o+e)}function y(e){var t,n,r,i=e.length-1,a=``,o=e[0];if(i>0){for(a+=o,t=1;tr?1:-1;else for(i=a=0;it[i]?1:-1;break}return a}function n(e,t,n){for(var r=0;n--;)e[n]-=r,r=+(e[n]1;)e.shift()}return function(r,i,o,s){var c,l,u,d,m,h,g,_,v,y,b,x,C,w,T,E,O,k,ee=r.constructor,te=r.s==i.s?1:-1,A=r.d,j=i.d;if(!r.s)return new ee(r);if(!i.s)throw Error(a+`Division by zero`);for(l=r.e-i.e,O=j.length,T=A.length,g=new ee(te),_=g.d=[],u=0;j[u]==(A[u]||0);)++u;if(j[u]>(A[u]||0)&&--l,x=o==null?o=ee.precision:s?o+(S(r)-S(i))+1:o,x<0)return new ee(0);if(x=x/p+2|0,u=0,O==1)for(d=0,j=j[0],x++;(u1&&(j=e(j,d),A=e(A,d),O=j.length,T=A.length),w=O,v=A.slice(0,O),y=v.length;y=f/2&&++E;do d=0,c=t(j,v,O,y),c<0?(b=v[0],O!=y&&(b=b*f+(v[1]||0)),d=b/E|0,d>1?(d>=f&&(d=f-1),m=e(j,d),h=m.length,y=v.length,c=t(m,v,h,y),c==1&&(d--,n(m,O16)throw Error(s+S(e));if(!e.s)return new m(d);for(t==null?(i=!1,u=h):u=t,c=new m(.03125);e.abs().gte(.1);)e=e.times(c),p+=5;for(r=Math.log(l(2,p))/Math.LN10*2+5|0,u+=r,n=a=o=new m(d),m.precision=u;;){if(a=D(a.times(e),u),n=n.times(++f),c=o.plus(b(a,n,u)),y(c.d).slice(0,u)===y(o.d).slice(0,u)){for(;p--;)o=D(o.times(o),u);return m.precision=h,t==null?(i=!0,D(o,h)):o}o=c}}function S(e){for(var t=e.e*p,n=e.d[0];n>=10;n/=10)t++;return t}function C(e,t,n){if(t>e.LN10.sd())throw i=!0,n&&(e.precision=n),Error(a+`LN10 precision limit exceeded`);return D(new e(e.LN10),t)}function w(e){for(var t=``;e--;)t+=`0`;return t}function T(e,t){var n,r,o,s,c,l,u,f,p,m=1,h=10,g=e,_=g.d,v=g.constructor,x=v.precision;if(g.s<1)throw Error(a+(g.s?`NaN`:`-Infinity`));if(g.eq(d))return new v(0);if(t==null?(i=!1,f=x):f=t,g.eq(10))return t??(i=!0),C(v,f);if(f+=h,v.precision=f,n=y(_),r=n.charAt(0),s=S(g),Math.abs(s)<0x5543df729c000){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)g=g.times(e),n=y(g.d),r=n.charAt(0),m++;s=S(g),r>1?(g=new v(`0.`+n),s++):g=new v(r+`.`+n.slice(1))}else return u=C(v,f+2,x).times(s+``),g=T(new v(r+`.`+n.slice(1)),f-h).plus(u),v.precision=x,t==null?(i=!0,D(g,x)):g;for(l=c=g=b(g.minus(d),g.plus(d),f),p=D(g.times(g),f),o=3;;){if(c=D(c.times(p),f),u=l.plus(b(c,new v(o),f)),y(u.d).slice(0,f)===y(l.d).slice(0,f))return l=l.times(2),s!==0&&(l=l.plus(C(v,f+2,x).times(s+``))),l=b(l,new v(m),f),v.precision=x,t==null?(i=!0,D(l,x)):l;l=u,o+=2}}function E(e,t){var n,r,a;for((n=t.indexOf(`.`))>-1&&(t=t.replace(`.`,``)),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;t.charCodeAt(r)===48;)++r;for(a=t.length;t.charCodeAt(a-1)===48;)--a;if(t=t.slice(r,a),t){if(a-=r,n=n-r-1,e.e=c(n/p),e.d=[],r=(n+1)%p,n<0&&(r+=p),rh||e.e<-h))throw Error(s+n)}else e.s=0,e.e=0,e.d=[0];return e}function D(e,t,n){var r,a,o,u,d,m,g,_,v=e.d;for(u=1,o=v[0];o>=10;o/=10)u++;if(r=t-u,r<0)r+=p,a=t,g=v[_=0];else{if(_=Math.ceil((r+1)/p),o=v.length,_>=o)return e;for(g=o=v[_],u=1;o>=10;o/=10)u++;r%=p,a=r-p+u}if(n!==void 0&&(o=l(10,u-a-1),d=g/o%10|0,m=t<0||v[_+1]!==void 0||g%o,m=n<4?(d||m)&&(n==0||n==(e.s<0?3:2)):d>5||d==5&&(n==4||m||n==6&&(r>0?a>0?g/l(10,u-a):0:v[_-1])%10&1||n==(e.s<0?8:7))),t<1||!v[0])return m?(o=S(e),v.length=1,t=t-o-1,v[0]=l(10,(p-t%p)%p),e.e=c(-t/p)||0):(v.length=1,v[0]=e.e=e.s=0),e;if(r==0?(v.length=_,o=1,_--):(v.length=_+1,o=l(10,p-r),v[_]=a>0?(g/l(10,u-a)%l(10,a)|0)*o:0),m)for(;;)if(_==0){(v[0]+=o)==f&&(v[0]=1,++e.e);break}else{if(v[_]+=o,v[_]!=f)break;v[_--]=0,o=1}for(r=v.length;v[--r]===0;)v.pop();if(i&&(e.e>h||e.e<-h))throw Error(s+S(e));return e}function O(e,t){var n,r,a,o,s,c,l,u,d,m,h=e.constructor,g=h.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new h(e),i?D(t,g):t;if(l=e.d,m=t.d,r=t.e,u=e.e,l=l.slice(),s=u-r,s){for(d=s<0,d?(n=l,s=-s,c=m.length):(n=m,r=u,c=l.length),a=Math.max(Math.ceil(g/p),c)+2,s>a&&(s=a,n.length=1),n.reverse(),a=s;a--;)n.push(0);n.reverse()}else{for(a=l.length,c=m.length,d=a0;--a)l[c++]=0;for(a=m.length;a>s;){if(l[--a]0?a=a.charAt(0)+`.`+a.slice(1)+w(r):o>1&&(a=a.charAt(0)+`.`+a.slice(1)),a=a+(i<0?`e`:`e+`)+i):i<0?(a=`0.`+w(-i-1)+a,n&&(r=n-o)>0&&(a+=w(r))):i>=o?(a+=w(i+1-o),n&&(r=n-i-1)>0&&(a=a+`.`+w(r))):((r=i+1)0&&(i+1===o&&(a+=`.`),a+=w(r))),e.s<0?`-`+a:a}function ee(e,t){if(e.length>t)return e.length=t,!0}function te(e){var t,n,r;function i(e){var t=this;if(!(t instanceof i))return new i(e);if(t.constructor=i,e instanceof i){t.s=e.s,t.e=e.e,t.d=(e=e.d)?e.slice():e;return}if(typeof e==`number`){if(e*0!=0)throw Error(o+e);if(e>0)t.s=1;else if(e<0)e=-e,t.s=-1;else{t.s=0,t.e=0,t.d=[0];return}if(e===~~e&&e<1e7){t.e=0,t.d=[e];return}return E(t,e.toString())}else if(typeof e!=`string`)throw Error(o+e);if(e.charCodeAt(0)===45?(e=e.slice(1),t.s=-1):t.s=1,u.test(e))E(t,e);else throw Error(o+e)}if(i.prototype=g,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=te,i.config=i.set=A,e===void 0&&(e={}),e)for(r=[`precision`,`rounding`,`toExpNeg`,`toExpPos`,`LN10`],t=0;t=s[t+1]&&i<=s[t+2])this[r]=i;else throw Error(o+r+`: `+i);if((i=e[r=`LN10`])!==void 0)if(i==Math.LN10)this[r]=new this(i);else throw Error(o+r+`: `+i);return this}r=te(r),r.default=r.Decimal=r,d=new r(1),typeof define==`function`&&define.amd?define(function(){return r}):t!==void 0&&t.exports?t.exports=r:(e||=typeof self<`u`&&self&&self.self==self?self:Function(`return this`)(),e.Decimal=r)})(e)}))());function db(e){return e===0?1:Math.floor(new Q.default(e).abs().log(10).toNumber())+1}function fb(e,t,n){for(var r=new Q.default(e),i=0,a=[];r.lt(t)&&i<1e5;)a.push(r.toNumber()),r=r.add(n),i++;return a}var pb=e=>{var[t,n]=e,[r,i]=[t,n];return t>n&&([r,i]=[n,t]),[r,i]},mb=(e,t,n)=>{if(e.lte(0))return new Q.default(0);var r=db(e.toNumber()),i=new Q.default(10).pow(r),a=e.div(i),o=r===1?.1:.05,s=new Q.default(Math.ceil(a.div(o).toNumber())).add(n).mul(o).mul(i);return t?new Q.default(s.toNumber()):new Q.default(Math.ceil(s.toNumber()))},hb=(e,t,n)=>{if(e.lte(0))return new Q.default(0);var r=[1,2,2.5,5],i=e.toNumber(),a=Math.floor(new Q.default(i).abs().log(10).toNumber()),o=new Q.default(10).pow(a),s=e.div(o).toNumber(),c=r.findIndex(e=>e>=s-1e-10);if(c===-1&&(o=o.mul(10),c=0),c+=n,c>=r.length){var l=Math.floor(c/r.length);c%=r.length,o=o.mul(new Q.default(10).pow(l))}var u=new Q.default(r[c]??1).mul(o);return t?u:new Q.default(Math.ceil(u.toNumber()))},gb=(e,t,n)=>{var r=new Q.default(1),i=new Q.default(e);if(!i.isint()&&n){var a=Math.abs(e);a<1?(r=new Q.default(10).pow(db(e)-1),i=new Q.default(Math.floor(i.div(r).toNumber())).mul(r)):a>1&&(i=new Q.default(Math.floor(e)))}else e===0?i=new Q.default(Math.floor((t-1)/2)):n||(i=new Q.default(Math.floor(e)));for(var o=Math.floor((t-1)/2),s=[],c=0;c4&&arguments[4]!==void 0?arguments[4]:0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:mb;if(!Number.isFinite((t-e)/(n-1)))return{step:new Q.default(0),tickMin:new Q.default(0),tickMax:new Q.default(0)};var o=a(new Q.default(t).sub(e).div(n-1),r,i),s;e<=0&&t>=0?s=new Q.default(0):(s=new Q.default(e).add(t).div(2),s=s.sub(new Q.default(s).mod(o)));var c=Math.ceil(s.sub(e).div(o).toNumber()),l=Math.ceil(new Q.default(t).sub(s).div(o).toNumber()),u=c+l+1;return u>n?_b(e,t,n,r,i+1,a):(u0?l+(n-u):l,c=t>0?c:c+(n-u)),{step:o,tickMin:s.sub(new Q.default(c).mul(o)),tickMax:s.add(new Q.default(l).mul(o))})},vb=function(e){var[t,n]=e,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:`auto`,o=Math.max(r,2),[s,c]=pb([t,n]);if(s===-1/0||c===1/0){var l=c===1/0?[s,...Array(r-1).fill(1/0)]:[...Array(r-1).fill(-1/0),c];return t>n?l.reverse():l}if(s===c)return gb(s,r,i);var{step:u,tickMin:d,tickMax:f}=_b(s,c,o,i,0,a===`snap125`?hb:mb),p=fb(d,f.add(new Q.default(.1).mul(u)),u);return t>n?p.reverse():p},yb=function(e,t){var[n,r]=e,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:`auto`,[o,s]=pb([n,r]);if(o===-1/0||s===1/0)return[n,r];if(o===s)return[o];var c=a===`snap125`?hb:mb,l=Math.max(t,2),u=c(new Q.default(s).sub(o).div(l-1),i,0),d=[...fb(new Q.default(o),new Q.default(s),u),s];return i===!1&&(d=d.map(e=>Math.round(e))),n>r?d.reverse():d},bb=e=>e.rootProps.maxBarSize,xb=e=>e.rootProps.barGap,Sb=e=>e.rootProps.barCategoryGap,Cb=e=>e.rootProps.barSize,wb=e=>e.rootProps.stackOffset,Tb=e=>e.rootProps.reverseStackOrder,Eb=e=>e.options.chartName,Db=e=>e.rootProps.syncId,Ob=e=>e.rootProps.syncMethod,kb=e=>e.options.eventEmitter,Ab=e=>e.rootProps.baseValue,jb={grid:-100,barBackground:-50,area:100,cursorRectangle:200,bar:300,line:400,axis:500,scatter:600,activeBar:1e3,cursorLine:1100,activeDot:1200,label:2e3},Mb={allowDecimals:!1,allowDuplicatedCategory:!0,allowDataOverflow:!1,angle:0,angleAxisId:0,axisLine:!0,axisLineType:`polygon`,cx:0,cy:0,hide:!1,includeHidden:!1,label:!1,niceTicks:`auto`,orientation:`outer`,reversed:!1,scale:`auto`,tick:!0,tickLine:!0,tickSize:8,type:`auto`,zIndex:jb.axis},Nb={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!0,angle:0,axisLine:!0,includeHidden:!1,hide:!1,niceTicks:`auto`,label:!1,orientation:`right`,radiusAxisId:0,reversed:!1,scale:`auto`,stroke:`#ccc`,tick:!0,tickCount:5,tickLine:!0,type:`auto`,zIndex:jb.axis},Pb=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t};function Fb(e,t,n){if(n!==`auto`)return n;if(e!=null)return Yp(e,t)?`category`:`number`}function Ib(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 Lb(e){for(var t=1;t{if(t!=null)return e.polarAxis.angleAxis[t]},xh],(e,t)=>{if(e!=null)return e;var n=Fb(t,`angleAxis`,Vb.type)??`category`;return Lb(Lb({},Vb),{},{type:n})}),Wb=K([(e,t)=>e.polarAxis.radiusAxis[t],xh],(e,t)=>{if(e!=null)return e;var n=Fb(t,`radiusAxis`,Hb.type)??`category`;return Lb(Lb({},Hb),{},{type:n})}),Gb=e=>e.polarOptions,Kb=K([hm,gm,Mm],Oy),qb=K([Gb,Kb],(e,t)=>{if(e!=null)return Gc(e.innerRadius,t,0)}),Jb=K([Gb,Kb],(e,t)=>{if(e!=null)return Gc(e.outerRadius,t,t*.8)}),Yb=K([Gb],e=>{if(e==null)return[0,0];var{startAngle:t,endAngle:n}=e;return[t,n]});K([Ub,Yb],Pb);var Xb=K([Kb,qb,Jb],(e,t,n)=>{if(!(e==null||t==null||n==null))return[t,n]});K([Wb,Xb],Pb);var Zb=K([X,Gb,qb,Jb,hm,gm],(e,t,n,r,i,a)=>{if(!(e!==`centric`&&e!==`radial`||t==null||n==null||r==null)){var{cx:o,cy:s,startAngle:c,endAngle:l}=t;return{cx:Gc(o,i,i/2),cy:Gc(s,a,a/2),innerRadius:n,outerRadius:r,startAngle:c,endAngle:l,clockWise:!1}}}),Qb=(e,t)=>t,$b=(e,t,n)=>n;function ex(e){return e?.id}function tx(e,t,n){var{chartData:r=[]}=t,{allowDuplicatedCategory:i,dataKey:a}=n,o=new Map;return e.forEach(e=>{var t=e.data??r;if(!(t==null||t.length===0)){var n=ex(e);t.forEach((t,r)=>{var s=a==null||i?r:String(Y(t,a,null)),c=Y(t,e.dataKey,0),l=o.has(s)?o.get(s):{};Object.assign(l,{[n]:c}),o.set(s,l)})}}),Array.from(o.values())}function nx(e){return`stackId`in e&&e.stackId!=null&&e.dataKey!=null}var rx=(e,t)=>e===t?!0:e==null||t==null?!1:e[0]===t[0]&&e[1]===t[1];function ix(e,t){return Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t}function ax(e,t){if(e.length===t.length){for(var n=0;n{var t=X(e);return t===`horizontal`?`xAxis`:t===`vertical`?`yAxis`:t===`centric`?`angleAxis`:`radiusAxis`},sx=e=>e.tooltip.settings.axisId;function cx(e){if(e!=null){var t=e.ticks,n=e.bandwidth,r=e.range(),i=[Math.min(...r),Math.max(...r)];return{domain:()=>e.domain(),range:function(e){function t(){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(()=>i),rangeMin:()=>i[0],rangeMax:()=>i[1],isInRange(e){var t=i[0],n=i[1];return t<=n?e>=t&&e<=n:e>=n&&e<=t},bandwidth:n?()=>n.call(e):void 0,ticks:t?n=>t.call(e,n):void 0,map:(t,n)=>{var r=e(t);if(r!=null){if(e.bandwidth&&n!=null&&n.position){var i=e.bandwidth();switch(n.position){case`middle`:r+=i/2;break;case`end`:r+=i;break;default:break}}return r}}}}}var lx=(e,t)=>{if(t!=null)switch(e){case`linear`:if(!sb(t)){for(var n,r,i=0;ir)&&(r=a))}return n!==void 0&&r!==void 0?[n,r]:void 0}return t;default:return t}};function ux(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function dx(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function fx(e){let t,n,r;e.length===2?(t=e===ux||e===dx?e:px,n=e,r=e):(t=ux,n=(t,n)=>ux(e(t),n),r=(t,n)=>e(t)-n);function i(e,r,i=0,a=e.length){if(i>>1;n(e[t],r)<0?i=t+1:a=t}while(i>>1;n(e[t],r)<=0?i=t+1:a=t}while(in&&r(e[o-1],t)>-r(e[o],t)?o-1:o}return{left:i,center:o,right:a}}function px(){return 0}function mx(e){return e===null?NaN:+e}function*hx(e,t){if(t===void 0)for(let t of e)t!=null&&(t=+t)>=t&&(yield t);else{let n=-1;for(let r of e)(r=t(r,++n,e))!=null&&(r=+r)>=r&&(yield r)}}var gx=fx(ux),_x=gx.right;gx.left,fx(mx).center;var vx=class extends Map{constructor(e,t=Sx){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),e!=null)for(let[t,n]of e)this.set(t,n)}get(e){return super.get(yx(this,e))}has(e){return super.has(yx(this,e))}set(e,t){return super.set(bx(this,e),t)}delete(e){return super.delete(xx(this,e))}};function yx({_intern:e,_key:t},n){let r=t(n);return e.has(r)?e.get(r):n}function bx({_intern:e,_key:t},n){let r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function xx({_intern:e,_key:t},n){let r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function Sx(e){return typeof e==`object`&&e?e.valueOf():e}function Cx(e=ux){if(e===ux)return wx;if(typeof e!=`function`)throw TypeError(`compare is not a function`);return(t,n)=>{let r=e(t,n);return r||r===0?r:(e(n,n)===0)-(e(t,t)===0)}}function wx(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et))}var Tx=Math.sqrt(50),Ex=Math.sqrt(10),Dx=Math.sqrt(2);function Ox(e,t,n){let r=(t-e)/Math.max(0,n),i=Math.floor(Math.log10(r)),a=r/10**i,o=a>=Tx?10:a>=Ex?5:a>=Dx?2:1,s,c,l;return i<0?(l=10**-i/o,s=Math.round(e*l),c=Math.round(t*l),s/lt&&--c,l=-l):(l=10**i*o,s=Math.round(e/l),c=Math.round(t/l),s*lt&&--c),c0))return[];if(e===t)return[e];let r=t=i))return[];let s=a-i+1,c=Array(s);if(r)if(o<0)for(let e=0;e=t)&&(n=t);else{let r=-1;for(let i of e)(i=t(i,++r,e))!=null&&(n=i)&&(n=i)}return n}function Nx(e,t){let n;if(t===void 0)for(let t of e)t!=null&&(n>t||n===void 0&&t>=t)&&(n=t);else{let r=-1;for(let i of e)(i=t(i,++r,e))!=null&&(n>i||n===void 0&&i>=i)&&(n=i)}return n}function Px(e,t,n=0,r=1/0,i){if(t=Math.floor(t),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(e.length-1,r)),!(n<=t&&t<=r))return e;for(i=i===void 0?wx:Cx(i);r>n;){if(r-n>600){let a=r-n+1,o=t-n+1,s=Math.log(a),c=.5*Math.exp(2*s/3),l=.5*Math.sqrt(s*c*(a-c)/a)*(o-a/2<0?-1:1),u=Math.max(n,Math.floor(t-o*c/a+l)),d=Math.min(r,Math.floor(t+(a-o)*c/a+l));Px(e,t,u,d,i)}let a=e[t],o=n,s=r;for(Fx(e,n,t),i(e[r],a)>0&&Fx(e,n,r);o0;)--s}i(e[n],a)===0?Fx(e,n,s):(++s,Fx(e,s,r)),s<=t&&(n=s+1),t<=s&&(r=s-1)}return e}function Fx(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function Ix(e,t,n){if(e=Float64Array.from(hx(e,n)),!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return Nx(e);if(t>=1)return Mx(e);var r,i=(r-1)*t,a=Math.floor(i),o=Mx(Px(e,a).subarray(0,a+1));return o+(Nx(e.subarray(a+1))-o)*(i-a)}}function Lx(e,t,n=mx){if(!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return+n(e[0],0,e);if(t>=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}}function Rx(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((t-e)/n))|0,a=Array(i);++r>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?mS(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?mS(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=tS.exec(e))?new _S(t[1],t[2],t[3],1):(t=nS.exec(e))?new _S(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=rS.exec(e))?mS(t[1],t[2],t[3],t[4]):(t=iS.exec(e))?mS(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=aS.exec(e))?wS(t[1],t[2]/100,t[3]/100,1):(t=oS.exec(e))?wS(t[1],t[2]/100,t[3]/100,t[4]):sS.hasOwnProperty(e)?pS(sS[e]):e===`transparent`?new _S(NaN,NaN,NaN,0):null}function pS(e){return new _S(e>>16&255,e>>8&255,e&255,1)}function mS(e,t,n,r){return r<=0&&(e=t=n=NaN),new _S(e,t,n,r)}function hS(e){return e instanceof Jx||(e=fS(e)),e?(e=e.rgb(),new _S(e.r,e.g,e.b,e.opacity)):new _S}function gS(e,t,n,r){return arguments.length===1?hS(e):new _S(e,t,n,r??1)}function _S(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Kx(_S,gS,qx(Jx,{brighter(e){return e=e==null?Xx:Xx**+e,new _S(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Yx:Yx**+e,new _S(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new _S(SS(this.r),SS(this.g),SS(this.b),xS(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:vS,formatHex:vS,formatHex8:yS,formatRgb:bS,toString:bS}));function vS(){return`#${CS(this.r)}${CS(this.g)}${CS(this.b)}`}function yS(){return`#${CS(this.r)}${CS(this.g)}${CS(this.b)}${CS((isNaN(this.opacity)?1:this.opacity)*255)}`}function bS(){let e=xS(this.opacity);return`${e===1?`rgb(`:`rgba(`}${SS(this.r)}, ${SS(this.g)}, ${SS(this.b)}${e===1?`)`:`, ${e})`}`}function xS(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function SS(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function CS(e){return e=SS(e),(e<16?`0`:``)+e.toString(16)}function wS(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new DS(e,t,n,r)}function TS(e){if(e instanceof DS)return new DS(e.h,e.s,e.l,e.opacity);if(e instanceof Jx||(e=fS(e)),!e)return new DS;if(e instanceof DS)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n0&&c<1?0:o,new DS(o,s,c,e.opacity)}function ES(e,t,n,r){return arguments.length===1?TS(e):new DS(e,t,n,r??1)}function DS(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Kx(DS,ES,qx(Jx,{brighter(e){return e=e==null?Xx:Xx**+e,new DS(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Yx:Yx**+e,new DS(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new _S(AS(e>=240?e-240:e+120,i,r),AS(e,i,r),AS(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new DS(OS(this.h),kS(this.s),kS(this.l),xS(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=xS(this.opacity);return`${e===1?`hsl(`:`hsla(`}${OS(this.h)}, ${kS(this.s)*100}%, ${kS(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function OS(e){return e=(e||0)%360,e<0?e+360:e}function kS(e){return Math.max(0,Math.min(1,e||0))}function AS(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var jS=e=>()=>e;function MS(e,t){return function(n){return e+n*t}}function NS(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function PS(e){return(e=+e)==1?FS:function(t,n){return n-t?NS(t,n,e):jS(isNaN(t)?n:t)}}function FS(e,t){var n=t-e;return n?MS(e,n):jS(isNaN(e)?t:e)}var IS=(function e(t){var n=PS(t);function r(e,t){var r=n((e=gS(e)).r,(t=gS(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=FS(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function LS(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;in&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:VS(r,i)})),n=WS.lastIndex;return nt&&(n=e,e=t,t=n),function(n){return Math.max(e,Math.min(t,n))}}function rC(e,t,n){var r=e[0],i=e[1],a=t[0],o=t[1];return i2?iC:rC,c=l=null,d}function d(i){return i==null||isNaN(i=+i)?a:(c||=s(e.map(r),t,n))(r(o(i)))}return d.invert=function(n){return o(i((l||=s(t,e.map(r),VS))(n)))},d.domain=function(t){return arguments.length?(e=Array.from(t,QS),u()):e.slice()},d.range=function(e){return arguments.length?(t=Array.from(e),u()):t.slice()},d.rangeRound=function(e){return t=Array.from(e),n=YS,u()},d.clamp=function(e){return arguments.length?(o=e?!0:eC,u()):o!==eC},d.interpolate=function(e){return arguments.length?(n=e,u()):n},d.unknown=function(e){return arguments.length?(a=e,d):a},function(e,t){return r=e,i=t,u()}}function sC(){return oC()(eC,eC)}function cC(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString(`en`).replace(/,/g,``):e.toString(10)}function lC(e,t){if(!isFinite(e)||e===0)return null;var n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf(`e`),r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function uC(e){return e=lC(Math.abs(e)),e?e[1]:NaN}function dC(e,t){return function(n,r){for(var i=n.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(n.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(t)}}function fC(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}var pC=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function mC(e){if(!(t=pC.exec(e)))throw Error(`invalid format: `+e);var t;return new hC({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}mC.prototype=hC.prototype;function hC(e){this.fill=e.fill===void 0?` `:e.fill+``,this.align=e.align===void 0?`>`:e.align+``,this.sign=e.sign===void 0?`-`:e.sign+``,this.symbol=e.symbol===void 0?``:e.symbol+``,this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?``:e.type+``}hC.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?`0`:``)+(this.width===void 0?``:Math.max(1,this.width|0))+(this.comma?`,`:``)+(this.precision===void 0?``:`.`+Math.max(0,this.precision|0))+(this.trim?`~`:``)+this.type};function gC(e){out:for(var t=e.length,n=1,r=-1,i;n0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(i+1):e}var _C;function vC(e,t){var n=lC(e,t);if(!n)return _C=void 0,e.toPrecision(t);var r=n[0],i=n[1],a=i-(_C=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return a===o?r:a>o?r+Array(a-o+1).join(`0`):a>0?r.slice(0,a)+`.`+r.slice(a):`0.`+Array(1-a).join(`0`)+lC(e,Math.max(0,t+a-1))[0]}function yC(e,t){var n=lC(e,t);if(!n)return e+``;var r=n[0],i=n[1];return i<0?`0.`+Array(-i).join(`0`)+r:r.length>i+1?r.slice(0,i+1)+`.`+r.slice(i+1):r+Array(i-r.length+2).join(`0`)}var bC={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+``,d:cC,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>yC(e*100,t),r:yC,s:vC,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function xC(e){return e}var SC=Array.prototype.map,CC=[`y`,`z`,`a`,`f`,`p`,`n`,`µ`,`m`,``,`k`,`M`,`G`,`T`,`P`,`E`,`Z`,`Y`];function wC(e){var t=e.grouping===void 0||e.thousands===void 0?xC:dC(SC.call(e.grouping,Number),e.thousands+``),n=e.currency===void 0?``:e.currency[0]+``,r=e.currency===void 0?``:e.currency[1]+``,i=e.decimal===void 0?`.`:e.decimal+``,a=e.numerals===void 0?xC:fC(SC.call(e.numerals,String)),o=e.percent===void 0?`%`:e.percent+``,s=e.minus===void 0?`−`:e.minus+``,c=e.nan===void 0?`NaN`:e.nan+``;function l(e,l){e=mC(e);var u=e.fill,d=e.align,f=e.sign,p=e.symbol,m=e.zero,h=e.width,g=e.comma,_=e.precision,v=e.trim,y=e.type;y===`n`?(g=!0,y=`g`):bC[y]||(_===void 0&&(_=12),v=!0,y=`g`),(m||u===`0`&&d===`=`)&&(m=!0,u=`0`,d=`=`);var b=(l&&l.prefix!==void 0?l.prefix:``)+(p===`$`?n:p===`#`&&/[boxX]/.test(y)?`0`+y.toLowerCase():``),x=(p===`$`?r:/[%p]/.test(y)?o:``)+(l&&l.suffix!==void 0?l.suffix:``),S=bC[y],C=/[defgprs%]/.test(y);_=_===void 0?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,_)):Math.max(0,Math.min(20,_));function w(e){var n=b,r=x,o,l,p;if(y===`c`)r=S(e)+r,e=``;else{e=+e;var w=e<0||1/e<0;if(e=isNaN(e)?c:S(Math.abs(e),_),v&&(e=gC(e)),w&&+e==0&&f!==`+`&&(w=!1),n=(w?f===`(`?f:s:f===`-`||f===`(`?``:f)+n,r=(y===`s`&&!isNaN(e)&&_C!==void 0?CC[8+_C/3]:``)+r+(w&&f===`(`?`)`:``),C){for(o=-1,l=e.length;++op||p>57){r=(p===46?i+e.slice(o+1):e.slice(o))+r,e=e.slice(0,o);break}}}g&&!m&&(e=t(e,1/0));var T=n.length+e.length+r.length,E=T>1)+n+e+r+E.slice(T);break;default:e=E+n+e+r;break}return a(e)}return w.toString=function(){return e+``},w}function u(e,t){var n=Math.max(-8,Math.min(8,Math.floor(uC(t)/3)))*3,r=10**-n,i=l((e=mC(e),e.type=`f`,e),{suffix:CC[8+n/3]});return function(e){return i(r*e)}}return{format:l,formatPrefix:u}}var TC,EC,DC;OC({thousands:`,`,grouping:[3],currency:[`$`,``]});function OC(e){return TC=wC(e),EC=TC.format,DC=TC.formatPrefix,TC}function kC(e){return Math.max(0,-uC(Math.abs(e)))}function AC(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(uC(t)/3)))*3-uC(Math.abs(e)))}function jC(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,uC(t)-uC(e))+1}function MC(e,t,n,r){var i=jx(e,t,n),a;switch(r=mC(r??`,f`),r.type){case`s`:var o=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(a=AC(i,o))&&(r.precision=a),DC(r,o);case``:case`e`:case`g`:case`p`:case`r`:r.precision==null&&!isNaN(a=jC(i,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=a-(r.type===`e`));break;case`f`:case`%`:r.precision==null&&!isNaN(a=kC(i))&&(r.precision=a-(r.type===`%`)*2);break}return EC(r)}function NC(e){var t=e.domain;return e.ticks=function(e){var n=t();return kx(n[0],n[n.length-1],e??10)},e.tickFormat=function(e,n){var r=t();return MC(r[0],r[r.length-1],e??10,n)},e.nice=function(n){n??=10;var r=t(),i=0,a=r.length-1,o=r[i],s=r[a],c,l,u=10;for(s0;){if(l=Ax(o,s,n),l===c)return r[i]=o,r[a]=s,t(r);if(l>0)o=Math.floor(o/l)*l,s=Math.ceil(s/l)*l;else if(l<0)o=Math.ceil(o*l)/l,s=Math.floor(s*l)/l;else break;c=l}return e},e}function PC(){var e=sC();return e.copy=function(){return aC(e,PC())},zx.apply(e,arguments),NC(e)}function FC(e){var t;function n(e){return e==null||isNaN(e=+e)?t:e}return n.invert=n,n.domain=n.range=function(t){return arguments.length?(e=Array.from(t,QS),n):e.slice()},n.unknown=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return FC(e).unknown(t)},e=arguments.length?Array.from(e,QS):[0,1],NC(n)}function IC(e,t){e=e.slice();var n=0,r=e.length-1,i=e[n],a=e[r],o;return ae**+t}function UC(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function WC(e){return(t,n)=>-e(-t,n)}function GC(e){let t=e(LC,RC),n=t.domain,r=10,i,a;function o(){return i=UC(r),a=HC(r),n()[0]<0?(i=WC(i),a=WC(a),e(zC,BC)):e(LC,RC),t}return t.base=function(e){return arguments.length?(r=+e,o()):r},t.domain=function(e){return arguments.length?(n(e),o()):n()},t.ticks=e=>{let t=n(),o=t[0],s=t[t.length-1],c=s0){for(;l<=u;++l)for(d=1;ds)break;m.push(f)}}else for(;l<=u;++l)for(d=r-1;d>=1;--d)if(f=l>0?d/a(-l):d*a(l),!(fs)break;m.push(f)}m.length*2{if(e??=10,n??=r===10?`s`:`,`,typeof n!=`function`&&(!(r%1)&&(n=mC(n)).precision==null&&(n.trim=!0),n=EC(n)),e===1/0)return n;let o=Math.max(1,r*e/t.ticks().length);return e=>{let t=e/a(Math.round(i(e)));return t*rn(IC(n(),{floor:e=>a(Math.floor(i(e))),ceil:e=>a(Math.ceil(i(e)))})),t}function KC(){let e=GC(oC()).domain([1,10]);return e.copy=()=>aC(e,KC()).base(e.base()),zx.apply(e,arguments),e}function qC(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function JC(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function YC(e){var t=1,n=e(qC(t),JC(t));return n.constant=function(n){return arguments.length?e(qC(t=+n),JC(t)):t},NC(n)}function XC(){var e=YC(oC());return e.copy=function(){return aC(e,XC()).constant(e.constant())},zx.apply(e,arguments)}function ZC(e){return function(t){return t<0?-((-t)**+e):t**+e}}function QC(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function $C(e){return e<0?-e*e:e*e}function ew(e){var t=e(eC,eC),n=1;function r(){return n===1?e(eC,eC):n===.5?e(QC,$C):e(ZC(n),ZC(1/n))}return t.exponent=function(e){return arguments.length?(n=+e,r()):n},NC(t)}function tw(){var e=ew(oC());return e.copy=function(){return aC(e,tw()).exponent(e.exponent())},zx.apply(e,arguments),e}function nw(){return tw.apply(null,arguments).exponent(.5)}function rw(e){return Math.sign(e)*e*e}function iw(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function aw(){var e=sC(),t=[0,1],n=!1,r;function i(t){var i=iw(e(t));return isNaN(i)?r:n?Math.round(i):i}return i.invert=function(t){return e.invert(rw(t))},i.domain=function(t){return arguments.length?(e.domain(t),i):e.domain()},i.range=function(n){return arguments.length?(e.range((t=Array.from(n,QS)).map(rw)),i):t.slice()},i.rangeRound=function(e){return i.range(e).round(!0)},i.round=function(e){return arguments.length?(n=!!e,i):n},i.clamp=function(t){return arguments.length?(e.clamp(t),i):e.clamp()},i.unknown=function(e){return arguments.length?(r=e,i):r},i.copy=function(){return aw(e.domain(),t).round(n).clamp(e.clamp()).unknown(r)},zx.apply(i,arguments),NC(i)}function ow(){var e=[],t=[],n=[],r;function i(){var r=0,i=Math.max(1,t.length);for(n=Array(i-1);++r0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},o.unknown=function(e){return arguments.length&&(a=e),o},o.thresholds=function(){return r.slice()},o.copy=function(){return sw().domain([e,t]).range(i).unknown(a)},zx.apply(NC(o),arguments)}function cw(){var e=[.5],t=[0,1],n,r=1;function i(i){return i!=null&&i<=i?t[_x(e,i,0,r)]:n}return i.domain=function(n){return arguments.length?(e=Array.from(n),r=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(n){return arguments.length?(t=Array.from(n),r=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(n=e,i):n},i.copy=function(){return cw().domain(e).range(t).unknown(n)},zx.apply(i,arguments)}var lw=new Date,uw=new Date;function dw(e,t,n,r){function i(t){return e(t=arguments.length===0?new Date:new Date(+t)),t}return i.floor=t=>(e(t=new Date(+t)),t),i.ceil=n=>(e(n=new Date(n-1)),t(n,1),e(n),n),i.round=e=>{let t=i(e),n=i.ceil(e);return e-t(t(e=new Date(+e),n==null?1:Math.floor(n)),e),i.range=(n,r,a)=>{let o=[];if(n=i.ceil(n),a=a==null?1:Math.floor(a),!(n0))return o;let s;do o.push(s=new Date(+n)),t(n,a),e(n);while(sdw(t=>{if(t>=t)for(;e(t),!n(t);)t.setTime(t-1)},(e,r)=>{if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););}),n&&(i.count=(t,r)=>(lw.setTime(+t),uw.setTime(+r),e(lw),e(uw),Math.floor(n(lw,uw))),i.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?i.filter(r?t=>r(t)%e===0:t=>i.count(0,t)%e===0):i)),i}var fw=dw(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);fw.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?dw(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):fw),fw.range;var pw=1e3,mw=pw*60,hw=mw*60,gw=hw*24,_w=gw*7,vw=gw*30,yw=gw*365,bw=dw(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*pw)},(e,t)=>(t-e)/pw,e=>e.getUTCSeconds());bw.range;var xw=dw(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*pw)},(e,t)=>{e.setTime(+e+t*mw)},(e,t)=>(t-e)/mw,e=>e.getMinutes());xw.range;var Sw=dw(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*mw)},(e,t)=>(t-e)/mw,e=>e.getUTCMinutes());Sw.range;var Cw=dw(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*pw-e.getMinutes()*mw)},(e,t)=>{e.setTime(+e+t*hw)},(e,t)=>(t-e)/hw,e=>e.getHours());Cw.range;var ww=dw(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*hw)},(e,t)=>(t-e)/hw,e=>e.getUTCHours());ww.range;var Tw=dw(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*mw)/gw,e=>e.getDate()-1);Tw.range;var Ew=dw(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/gw,e=>e.getUTCDate()-1);Ew.range;var Dw=dw(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/gw,e=>Math.floor(e/gw));Dw.range;function Ow(e){return dw(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(e,t)=>{e.setDate(e.getDate()+t*7)},(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*mw)/_w)}var kw=Ow(0),Aw=Ow(1),jw=Ow(2),Mw=Ow(3),Nw=Ow(4),Pw=Ow(5),Fw=Ow(6);kw.range,Aw.range,jw.range,Mw.range,Nw.range,Pw.range,Fw.range;function Iw(e){return dw(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t*7)},(e,t)=>(t-e)/_w)}var Lw=Iw(0),Rw=Iw(1),zw=Iw(2),Bw=Iw(3),Vw=Iw(4),Hw=Iw(5),Uw=Iw(6);Lw.range,Rw.range,zw.range,Bw.range,Vw.range,Hw.range,Uw.range;var Ww=dw(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());Ww.range;var Gw=dw(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Gw.range;var Kw=dw(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Kw.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:dw(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)}),Kw.range;var qw=dw(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());qw.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:dw(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)}),qw.range;function Jw(e,t,n,r,i,a){let o=[[bw,1,pw],[bw,5,5*pw],[bw,15,15*pw],[bw,30,30*pw],[a,1,mw],[a,5,5*mw],[a,15,15*mw],[a,30,30*mw],[i,1,hw],[i,3,3*hw],[i,6,6*hw],[i,12,12*hw],[r,1,gw],[r,2,2*gw],[n,1,_w],[t,1,vw],[t,3,3*vw],[e,1,yw]];function s(e,t,n){let r=te).right(o,i);if(a===o.length)return e.every(jx(t/yw,n/yw,r));if(a===0)return fw.every(Math.max(jx(t,n,r),1));let[s,c]=o[i/o[a-1][2]53)return null;`w`in r||(r.w=1),`Z`in r?(a=eT(tT(r.y,0,1)),o=a.getUTCDay(),a=o>4||o===0?Rw.ceil(a):Rw(a),a=Ew.offset(a,(r.V-1)*7),r.y=a.getUTCFullYear(),r.m=a.getUTCMonth(),r.d=a.getUTCDate()+(r.w+6)%7):(a=$w(tT(r.y,0,1)),o=a.getDay(),a=o>4||o===0?Aw.ceil(a):Aw(a),a=Tw.offset(a,(r.V-1)*7),r.y=a.getFullYear(),r.m=a.getMonth(),r.d=a.getDate()+(r.w+6)%7)}else (`W`in r||`U`in r)&&(`w`in r||(r.w=`u`in r?r.u%7:+(`W`in r)),o=`Z`in r?eT(tT(r.y,0,1)).getUTCDay():$w(tT(r.y,0,1)).getDay(),r.m=0,r.d=`W`in r?(r.w+6)%7+r.W*7-(o+5)%7:r.w+r.U*7-(o+6)%7);return`Z`in r?(r.H+=r.Z/100|0,r.M+=r.Z%100,eT(r)):$w(r)}}function w(e,t,n,r){for(var i=0,a=t.length,o=n.length,s,c;i=o)return-1;if(s=t.charCodeAt(i++),s===37){if(s=t.charAt(i++),c=x[s in rT?t.charAt(i++):s],!c||(r=c(e,n,r))<0)return-1}else if(s!=n.charCodeAt(r++))return-1}return r}function T(e,t,n){var r=l.exec(t.slice(n));return r?(e.p=u.get(r[0].toLowerCase()),n+r[0].length):-1}function E(e,t,n){var r=p.exec(t.slice(n));return r?(e.w=m.get(r[0].toLowerCase()),n+r[0].length):-1}function D(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=f.get(r[0].toLowerCase()),n+r[0].length):-1}function O(e,t,n){var r=_.exec(t.slice(n));return r?(e.m=v.get(r[0].toLowerCase()),n+r[0].length):-1}function k(e,t,n){var r=h.exec(t.slice(n));return r?(e.m=g.get(r[0].toLowerCase()),n+r[0].length):-1}function ee(e,n,r){return w(e,t,n,r)}function te(e,t,r){return w(e,n,t,r)}function A(e,t,n){return w(e,r,t,n)}function j(e){return o[e.getDay()]}function ne(e){return a[e.getDay()]}function re(e){return c[e.getMonth()]}function ie(e){return s[e.getMonth()]}function ae(e){return i[+(e.getHours()>=12)]}function oe(e){return 1+~~(e.getMonth()/3)}function se(e){return o[e.getUTCDay()]}function ce(e){return a[e.getUTCDay()]}function le(e){return c[e.getUTCMonth()]}function ue(e){return s[e.getUTCMonth()]}function de(e){return i[+(e.getUTCHours()>=12)]}function M(e){return 1+~~(e.getUTCMonth()/3)}return{format:function(e){var t=S(e+=``,y);return t.toString=function(){return e},t},parse:function(e){var t=C(e+=``,!1);return t.toString=function(){return e},t},utcFormat:function(e){var t=S(e+=``,b);return t.toString=function(){return e},t},utcParse:function(e){var t=C(e+=``,!0);return t.toString=function(){return e},t}}}var rT={"-":``,_:` `,0:`0`},iT=/^\s*\d+/,aT=/^%/,oT=/[\\^$*+?|[\]().{}]/g;function $(e,t,n){var r=e<0?`-`:``,i=(r?-e:e)+``,a=i.length;return r+(a[e.toLowerCase(),t]))}function uT(e,t,n){var r=iT.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function dT(e,t,n){var r=iT.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function fT(e,t,n){var r=iT.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function pT(e,t,n){var r=iT.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function mT(e,t,n){var r=iT.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function hT(e,t,n){var r=iT.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function gT(e,t,n){var r=iT.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function _T(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||`00`)),n+r[0].length):-1}function vT(e,t,n){var r=iT.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function yT(e,t,n){var r=iT.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function bT(e,t,n){var r=iT.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function xT(e,t,n){var r=iT.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function ST(e,t,n){var r=iT.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function CT(e,t,n){var r=iT.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function wT(e,t,n){var r=iT.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function TT(e,t,n){var r=iT.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function ET(e,t,n){var r=iT.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function DT(e,t,n){var r=aT.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function OT(e,t,n){var r=iT.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function kT(e,t,n){var r=iT.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function AT(e,t){return $(e.getDate(),t,2)}function jT(e,t){return $(e.getHours(),t,2)}function MT(e,t){return $(e.getHours()%12||12,t,2)}function NT(e,t){return $(1+Tw.count(Kw(e),e),t,3)}function PT(e,t){return $(e.getMilliseconds(),t,3)}function FT(e,t){return PT(e,t)+`000`}function IT(e,t){return $(e.getMonth()+1,t,2)}function LT(e,t){return $(e.getMinutes(),t,2)}function RT(e,t){return $(e.getSeconds(),t,2)}function zT(e){var t=e.getDay();return t===0?7:t}function BT(e,t){return $(kw.count(Kw(e)-1,e),t,2)}function VT(e){var t=e.getDay();return t>=4||t===0?Nw(e):Nw.ceil(e)}function HT(e,t){return e=VT(e),$(Nw.count(Kw(e),e)+(Kw(e).getDay()===4),t,2)}function UT(e){return e.getDay()}function WT(e,t){return $(Aw.count(Kw(e)-1,e),t,2)}function GT(e,t){return $(e.getFullYear()%100,t,2)}function KT(e,t){return e=VT(e),$(e.getFullYear()%100,t,2)}function qT(e,t){return $(e.getFullYear()%1e4,t,4)}function JT(e,t){var n=e.getDay();return e=n>=4||n===0?Nw(e):Nw.ceil(e),$(e.getFullYear()%1e4,t,4)}function YT(e){var t=e.getTimezoneOffset();return(t>0?`-`:(t*=-1,`+`))+$(t/60|0,`0`,2)+$(t%60,`0`,2)}function XT(e,t){return $(e.getUTCDate(),t,2)}function ZT(e,t){return $(e.getUTCHours(),t,2)}function QT(e,t){return $(e.getUTCHours()%12||12,t,2)}function $T(e,t){return $(1+Ew.count(qw(e),e),t,3)}function eE(e,t){return $(e.getUTCMilliseconds(),t,3)}function tE(e,t){return eE(e,t)+`000`}function nE(e,t){return $(e.getUTCMonth()+1,t,2)}function rE(e,t){return $(e.getUTCMinutes(),t,2)}function iE(e,t){return $(e.getUTCSeconds(),t,2)}function aE(e){var t=e.getUTCDay();return t===0?7:t}function oE(e,t){return $(Lw.count(qw(e)-1,e),t,2)}function sE(e){var t=e.getUTCDay();return t>=4||t===0?Vw(e):Vw.ceil(e)}function cE(e,t){return e=sE(e),$(Vw.count(qw(e),e)+(qw(e).getUTCDay()===4),t,2)}function lE(e){return e.getUTCDay()}function uE(e,t){return $(Rw.count(qw(e)-1,e),t,2)}function dE(e,t){return $(e.getUTCFullYear()%100,t,2)}function fE(e,t){return e=sE(e),$(e.getUTCFullYear()%100,t,2)}function pE(e,t){return $(e.getUTCFullYear()%1e4,t,4)}function mE(e,t){var n=e.getUTCDay();return e=n>=4||n===0?Vw(e):Vw.ceil(e),$(e.getUTCFullYear()%1e4,t,4)}function hE(){return`+0000`}function gE(){return`%`}function _E(e){return+e}function vE(e){return Math.floor(e/1e3)}var yE,bE,xE;SE({dateTime:`%x, %X`,date:`%-m/%-d/%Y`,time:`%-I:%M:%S %p`,periods:[`AM`,`PM`],days:[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],shortDays:[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],months:[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],shortMonths:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`]});function SE(e){return yE=nT(e),bE=yE.format,yE.parse,xE=yE.utcFormat,yE.utcParse,yE}function CE(e){return new Date(e)}function wE(e){return e instanceof Date?+e:+new Date(+e)}function TE(e,t,n,r,i,a,o,s,c,l){var u=sC(),d=u.invert,f=u.domain,p=l(`.%L`),m=l(`:%S`),h=l(`%I:%M`),g=l(`%I %p`),_=l(`%a %d`),v=l(`%b %d`),y=l(`%B`),b=l(`%Y`);function x(e){return(c(e)t(r/(e.length-1)))},n.quantiles=function(t){return Array.from({length:t+1},(n,r)=>Ix(e,r/t))},n.copy=function(){return FE(t).domain(e)},Bx.apply(n,arguments)}function IE(){var e=0,t=.5,n=1,r=1,i,a,o,s,c,l=eC,u,d=!1,f;function p(e){return isNaN(e=+e)?f:(e=.5+((e=+u(e))-a)*(r*eUx,scaleDiverging:()=>LE,scaleDivergingLog:()=>RE,scaleDivergingPow:()=>BE,scaleDivergingSqrt:()=>VE,scaleDivergingSymlog:()=>zE,scaleIdentity:()=>FC,scaleImplicit:()=>Vx,scaleLinear:()=>PC,scaleLog:()=>KC,scaleOrdinal:()=>Hx,scalePoint:()=>Gx,scalePow:()=>tw,scaleQuantile:()=>ow,scaleQuantize:()=>sw,scaleRadial:()=>aw,scaleSequential:()=>AE,scaleSequentialLog:()=>jE,scaleSequentialPow:()=>NE,scaleSequentialQuantile:()=>FE,scaleSequentialSqrt:()=>PE,scaleSequentialSymlog:()=>ME,scaleSqrt:()=>nw,scaleSymlog:()=>XC,scaleThreshold:()=>cw,scaleTime:()=>EE,scaleUtc:()=>DE,tickFormat:()=>MC});function UE(e){var t=HE;if(e in t&&typeof t[e]==`function`)return t[e]();var n=`scale${Jc(e)}`;if(n in t&&typeof t[n]==`function`)return t[n]()}function WE(e,t,n){if(typeof e==`function`)return e.copy().domain(t).range(n);if(e!=null){var r=UE(e);if(r!=null)return r.domain(t).range(n),r}}function GE(e,t,n,r){if(!(n==null||r==null))return typeof e.scale==`function`?WE(e.scale,n,r):WE(t,n,r)}function KE(e){return`scale${Jc(e)}`}function qE(e){return KE(e)in HE}var JE=(e,t,n)=>{if(e!=null){var{scale:r,type:i}=e;if(r===`auto`)return i===`category`&&n&&(n.indexOf(`LineChart`)>=0||n.indexOf(`AreaChart`)>=0||n.indexOf(`ComposedChart`)>=0&&!t)?`point`:i===`category`?`band`:`linear`;if(typeof r==`string`)return qE(r)?r:`point`}};function YE(e,t){for(var n=0,r=e.length,i=e[0]t)?n=a+1:r=a}return n}function XE(e,t){if(e){var n=t??e.domain(),r=n.map(t=>e(t)??0),i=e.range();if(!(n.length===0||i.length<2))return e=>{var t=YE(r,e);if(t<=0)return n[0];if(t>=n.length)return n[n.length-1];var i=r[t-1]??0,a=r[t]??0;return Math.abs(e-i)<=Math.abs(e-a)?n[t-1]:n[t]}}}function ZE(e){if(e!=null)return`invert`in e&&typeof e.invert==`function`?e.invert.bind(e):XE(e,void 0)}var QE=Se(eb());function $E(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 eD(e){for(var t=1;te.cartesianAxis.xAxis[t],sD=(e,t)=>oD(e,t)??aD,cD={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:iD,hide:!0,id:0,includeHidden:!1,interval:`preserveEnd`,minTickGap:5,mirror:!1,name:void 0,orientation:`left`,padding:{top:0,bottom:0},reversed:!1,scale:`auto`,tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:`number`,unit:void 0,niceTicks:`auto`,width:60},lD=(e,t)=>e.cartesianAxis.yAxis[t],uD=(e,t)=>lD(e,t)??cD,dD={domain:[0,`auto`],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:``,range:[64,64],scale:`auto`,type:`number`,unit:``},fD=(e,t)=>e.cartesianAxis.zAxis[t]??dD,pD=(e,t,n)=>{switch(t){case`xAxis`:return sD(e,n);case`yAxis`:return uD(e,n);case`zAxis`:return fD(e,n);case`angleAxis`:return Ub(e,n);case`radiusAxis`:return Wb(e,n);default:throw Error(`Unexpected axis type: ${t}`)}},mD=(e,t,n)=>{switch(t){case`xAxis`:return sD(e,n);case`yAxis`:return uD(e,n);default:throw Error(`Unexpected axis type: ${t}`)}},hD=(e,t,n)=>{switch(t){case`xAxis`:return sD(e,n);case`yAxis`:return uD(e,n);case`angleAxis`:return Ub(e,n);case`radiusAxis`:return Wb(e,n);default:throw Error(`Unexpected axis type: ${t}`)}},gD=e=>e.graphicalItems.cartesianItems.some(e=>e.type===`bar`)||e.graphicalItems.polarItems.some(e=>e.type===`radialBar`);function _D(e,t){return n=>{switch(e){case`xAxis`:return`xAxisId`in n&&n.xAxisId===t;case`yAxis`:return`yAxisId`in n&&n.yAxisId===t;case`zAxis`:return`zAxisId`in n&&n.zAxisId===t;case`angleAxis`:return`angleAxisId`in n&&n.angleAxisId===t;case`radiusAxis`:return`radiusAxisId`in n&&n.radiusAxisId===t;default:return!1}}}var vD=e=>e.graphicalItems.cartesianItems,yD=K([Qb,$b],_D),bD=(e,t,n)=>e.filter(n).filter(e=>t?.includeHidden===!0?!0:!e.hide),xD=K([vD,pD,yD],bD,{memoizeOptions:{resultEqualityCheck:ix}}),SD=K([xD],e=>e.filter(e=>e.type===`area`||e.type===`bar`).filter(nx)),CD=e=>e.filter(e=>!(`stackId`in e)||e.stackId===void 0),wD=K([xD],CD),TD=e=>e.map(e=>e.data).filter(Boolean).flat(1),ED=K([xD],e=>e.some(e=>!e.data)),DD=K([xD],TD,{memoizeOptions:{resultEqualityCheck:ix}}),OD=(e,t)=>{var{chartData:n=[],dataStartIndex:r,dataEndIndex:i}=t;return e.length>0?e:n.slice(r,i+1)},kD=K([DD,rb],OD),AD=(e,t,n)=>t?.dataKey==null?n.length>0?n.map(e=>e.dataKey).flatMap(t=>e.map(e=>({value:Y(e,t)}))):e.map(e=>({value:e})):e.map(e=>({value:Y(e,t.dataKey)})),jD=(e,t,n,r,i,a)=>{var{chartData:o=[],dataStartIndex:s,dataEndIndex:c}=r,l=AD(e,t,n);return i&&t?.dataKey!=null&&a.length>0?[...o.slice(s,c+1).map(e=>({value:Y(e,t.dataKey)})).filter(e=>e.value!=null),...l]:l},MD=K([kD,pD,xD,rb,ED,DD],jD);function ND(e){if(Hc(e)||e instanceof Date){var t=Number(e);if(J(t))return t}}function PD(e){if(Array.isArray(e)){var t=[ND(e[0]),ND(e[1])];return sb(t)?t:void 0}var n=ND(e);if(n!=null)return[n,n]}function FD(e){return e.map(ND).filter(Yc)}function ID(e,t){var n=ND(e),r=ND(t);return n==null&&r==null?0:n==null?-1:r==null?1:n-r}var LD=K([MD],e=>e?.map(e=>e.value).sort(ID));function RD(e,t){switch(e){case`xAxis`:return t.direction===`x`;case`yAxis`:return t.direction===`y`;default:return!1}}function zD(e,t,n){if(!n||!n.length)return[];var r;if(typeof t==`number`&&!Bc(t))r=t;else if(Array.isArray(t)){var i=FD(t);i.length>0&&(r=Math.max(...i))}return r==null?[]:FD(n.flatMap(t=>{var n=Y(e,t.dataKey),i,a;if(Array.isArray(n)?[i,a]=n:i=a=n,!(!J(i)||!J(a)))return[r-i,r+a]}))}var BD=e=>hD(e,ox(e),sx(e)),VD=K([BD],e=>e?.dataKey),HD=K([SD,rb,BD],tx),UD=(e,t,n,r)=>{var i=t.reduce((e,t)=>{if(t.stackId==null)return e;var n=e[t.stackId];return n??=[],n.push(t),e[t.stackId]=n,e},{});return Object.fromEntries(Object.entries(i).map(t=>{var[i,a]=t,o=r?[...a].reverse():a;return[i,{stackedData:em(e,o.map(ex),n),graphicalItems:o}]}))},WD=K([HD,SD,wb,Tb],UD),GD=(e,t,n,r)=>{var{dataStartIndex:i,dataEndIndex:a}=t;if(r==null&&n!==`zAxis`){var o=sm(e,i,a);if(!(o!=null&&o[0]===0&&o[1]===0))return o}},KD=K([pD],e=>e.allowDataOverflow),qD=e=>{if(e==null||!(`domain`in e))return iD;if(e.domain!=null)return e.domain;if(`ticks`in e&&e.ticks!=null){if(e.type===`number`){var t=FD(e.ticks);return[Math.min(...t),Math.max(...t)]}if(e.type===`category`)return e.ticks.map(String)}return e?.domain??iD},JD=K([pD],qD),YD=K([JD,KD],lb),XD=K([WD,tb,Qb,YD],GD,{memoizeOptions:{resultEqualityCheck:rx}}),ZD=e=>e.errorBars,QD=(e,t,n)=>e.flatMap(e=>t[e.id]).filter(Boolean).filter(e=>RD(n,e)),$D=function(){var e=[...arguments].filter(Boolean);if(e.length!==0){var t=e.flat();return[Math.min(...t),Math.max(...t)]}},eO=function(e,t,n,r,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:[],o,s;if(n.length>0&&n.forEach(e=>{var n=e.data==null?a:[...e.data],c=r[e.id]?.filter(e=>RD(i,e));n.forEach(n=>{var r=Y(n,t.dataKey??e.dataKey),i=zD(n,r,c);if(i.length>=2){var a=Math.min(...i),l=Math.max(...i);(o==null||as)&&(s=l)}var u=PD(r);u!=null&&(o=o==null?u[0]:Math.min(o,u[0]),s=s==null?u[1]:Math.max(s,u[1]))})}),t?.dataKey!=null&&n.length===0&&e.forEach(e=>{var n=PD(Y(e,t.dataKey));n!=null&&(o=o==null?n[0]:Math.min(o,n[0]),s=s==null?n[1]:Math.max(s,n[1]))}),J(o)&&J(s))return[o,s]},tO=K([kD,pD,wD,ZD,Qb,ab],eO,{memoizeOptions:{resultEqualityCheck:rx}});function nO(e){var{value:t}=e;if(Hc(t)||t instanceof Date)return t}var rO=(e,t,n)=>{var r=e.map(nO).filter(e=>e!=null);return n&&(t.dataKey==null||t.allowDuplicatedCategory&&Kc(r))?(0,QE.default)(0,e.length):t.allowDuplicatedCategory?r:Array.from(new Set(r))},iO=e=>e.referenceElements.dots,aO=(e,t,n)=>e.filter(e=>e.ifOverflow===`extendDomain`).filter(e=>t===`xAxis`?e.xAxisId===n:e.yAxisId===n),oO=K([iO,Qb,$b],aO),sO=e=>e.referenceElements.areas,cO=K([sO,Qb,$b],aO),lO=e=>e.referenceElements.lines,uO=K([lO,Qb,$b],aO),dO=(e,t)=>{if(e!=null){var n=FD(e.map(e=>t===`xAxis`?e.x:e.y));if(n.length!==0)return[Math.min(...n),Math.max(...n)]}},fO=K(oO,Qb,dO),pO=(e,t)=>{if(e!=null){var n=FD(e.flatMap(e=>[t===`xAxis`?e.x1:e.y1,t===`xAxis`?e.x2:e.y2]));if(n.length!==0)return[Math.min(...n),Math.max(...n)]}},mO=K([cO,Qb],pO);function hO(e){if(e.x!=null)return FD([e.x]);var t=e.segment?.map(e=>e.x);return t==null||t.length===0?[]:FD(t)}function gO(e){if(e.y!=null)return FD([e.y]);var t=e.segment?.map(e=>e.y);return t==null||t.length===0?[]:FD(t)}var _O=(e,t)=>{if(e!=null){var n=e.flatMap(e=>t===`xAxis`?hO(e):gO(e));if(n.length!==0)return[Math.min(...n),Math.max(...n)]}},vO=K(fO,K([uO,Qb],_O),mO,(e,t,n)=>$D(e,n,t)),yO=(e,t,n,r,i,a,o,s)=>n??ub(t,o===`vertical`&&s===`xAxis`||o===`horizontal`&&s===`yAxis`?$D(r,a,i):$D(a,i),e.allowDataOverflow),bO=K([pD,JD,YD,XD,tO,vO,X,Qb],yO,{memoizeOptions:{resultEqualityCheck:rx}}),xO=[0,1],SO=(e,t,n,r,i,a,o)=>{if(!((e==null||n==null||n.length===0)&&o===void 0)){var{dataKey:s,type:c}=e,l=Yp(t,a);return l&&s==null?(0,QE.default)(0,n?.length??0):c===`category`?rO(r,e,l):i===`expand`&&!l?xO:o}},CO=K([pD,X,kD,MD,wb,Qb,bO],SO),wO=K([pD,gD,Eb],JE),TO=(e,t,n)=>{var{niceTicks:r}=t;if(r!==`none`){var i=qD(t),a=Array.isArray(i)&&(i[0]===`auto`||i[1]===`auto`);if((r===`snap125`||r===`adaptive`)&&t!=null&&t.tickCount&&sb(e)){if(a)return vb(e,t.tickCount,t.allowDecimals,r);if(t.type===`number`)return yb(e,t.tickCount,t.allowDecimals,r)}if(r===`auto`&&n===`linear`&&t!=null&&t.tickCount){if(a&&sb(e))return vb(e,t.tickCount,t.allowDecimals,`adaptive`);if(t.type===`number`&&sb(e))return yb(e,t.tickCount,t.allowDecimals,`adaptive`)}}},EO=K([CO,hD,wO],TO),DO=(e,t,n,r)=>{if(r!==`angleAxis`&&e?.type===`number`&&sb(t)&&Array.isArray(n)&&n.length>0){var i=t[0],a=n[0]??0,o=t[1],s=n[n.length-1]??0;return[Math.min(i,a),Math.max(o,s)]}return t},OO=K([pD,CO,EO,Qb],DO),kO=K(K(MD,pD,(e,t)=>{if(!(!t||t.type!==`number`)){var n=1/0,r=Array.from(FD(e.map(e=>e.value))).sort((e,t)=>e-t),i=r[0],a=r[r.length-1];if(i==null||a==null)return 1/0;var o=a-i;if(o===0)return 1/0;for(var s=0;si,(e,t,n,r,i)=>{if(!J(e))return 0;var a=t===`vertical`?r.height:r.width;if(i===`gap`)return e*a/2;if(i===`no-gap`){var o=Gc(n,e*a),s=e*a/2;return s-o-(s-o)/a*o}return 0}),AO=(e,t,n)=>{var r=sD(e,t);return r==null||typeof r.padding!=`string`?0:kO(e,`xAxis`,t,n,r.padding)},jO=(e,t,n)=>{var r=uD(e,t);return r==null||typeof r.padding!=`string`?0:kO(e,`yAxis`,t,n,r.padding)},MO=K(sD,AO,(e,t)=>{if(e==null)return{left:0,right:0};var{padding:n}=e;return typeof n==`string`?{left:t,right:t}:{left:(n.left??0)+t,right:(n.right??0)+t}}),NO=K(uD,jO,(e,t)=>{if(e==null)return{top:0,bottom:0};var{padding:n}=e;return typeof n==`string`?{top:t,bottom:t}:{top:(n.top??0)+t,bottom:(n.bottom??0)+t}}),PO=K([Mm,MO,Rm,Lm,(e,t,n)=>n],(e,t,n,r,i)=>{var{padding:a}=r;return i?[a.left,n.width-a.right]:[e.left+t.left,e.left+e.width-t.right]}),FO=K([Mm,X,NO,Rm,Lm,(e,t,n)=>n],(e,t,n,r,i,a)=>{var{padding:o}=i;return a?[r.height-o.bottom,o.top]:t===`horizontal`?[e.top+e.height-n.bottom,e.top+n.top]:[e.top+n.top,e.top+e.height-n.bottom]}),IO=(e,t,n,r)=>{switch(t){case`xAxis`:return PO(e,n,r);case`yAxis`:return FO(e,n,r);case`zAxis`:return fD(e,n)?.range;case`angleAxis`:return Yb(e);case`radiusAxis`:return Xb(e,n);default:return}},LO=K([pD,IO],Pb),RO=K([pD,wO,K([wO,OO],lx),LO],GE),zO=(e,t,n,r)=>{if(!(n==null||n.dataKey==null)){var{type:i,scale:a}=n;if(Yp(e,r)&&(i===`number`||a!==`auto`))return t.map(e=>e.value)}},BO=K([X,MD,hD,Qb],zO),VO=K([RO],cx);K([RO],ZE),K([RO,LD],XE),K([xD,ZD,Qb],QD);function HO(e,t){return e.idt.id)}var UO=(e,t)=>t,WO=(e,t,n)=>n,GO=K(ym,UO,WO,(e,t,n)=>e.filter(e=>e.orientation===t).filter(e=>e.mirror===n).sort(HO)),KO=K(bm,UO,WO,(e,t,n)=>e.filter(e=>e.orientation===t).filter(e=>e.mirror===n).sort(HO)),qO=(e,t)=>({width:e.width,height:t.height}),JO=(e,t)=>({width:typeof t.width==`number`?t.width:60,height:e.height}),YO=K(Mm,sD,qO),XO=(e,t,n)=>{switch(t){case`top`:return e.top;case`bottom`:return n-e.bottom;default:return 0}},ZO=(e,t,n)=>{switch(t){case`left`:return e.left;case`right`:return n-e.right;default:return 0}},QO=K(gm,Mm,GO,UO,WO,(e,t,n,r,i)=>{var a={},o;return n.forEach(n=>{var s=qO(t,n);o??=XO(t,r,e);var c=r===`top`&&!i||r===`bottom`&&i;a[n.id]=o-Number(c)*s.height,o+=(c?-1:1)*s.height}),a}),$O=K(hm,Mm,KO,UO,WO,(e,t,n,r,i)=>{var a={},o;return n.forEach(n=>{var s=JO(t,n);o??=ZO(t,r,e);var c=r===`left`&&!i||r===`right`&&i;a[n.id]=o-Number(c)*s.width,o+=(c?-1:1)*s.width}),a}),ek=K([Mm,sD,(e,t)=>{var n=sD(e,t);if(n!=null)return QO(e,n.orientation,n.mirror)},(e,t)=>t],(e,t,n,r)=>{if(t!=null){var i=n?.[r];return i==null?{x:e.left,y:0}:{x:e.left,y:i}}}),tk=K([Mm,uD,(e,t)=>{var n=uD(e,t);if(n!=null)return $O(e,n.orientation,n.mirror)},(e,t)=>t],(e,t,n,r)=>{if(t!=null){var i=n?.[r];return i==null?{x:0,y:e.top}:{x:i,y:e.top}}}),nk=K(Mm,uD,(e,t)=>({width:typeof t.width==`number`?t.width:60,height:e.height})),rk=(e,t,n)=>{switch(t){case`xAxis`:return YO(e,n).width;case`yAxis`:return nk(e,n).height;default:return}},ik=(e,t,n,r)=>{if(n!=null){var{allowDuplicatedCategory:i,type:a,dataKey:o}=n,s=Yp(e,r),c=t.map(e=>e.value),l=c.filter(e=>e!=null);if(o&&s&&a===`category`&&i&&Kc(l))return c}},ak=K([X,MD,pD,Qb],ik),ok=K([X,mD,wO,VO,ak,BO,IO,EO,Qb],(e,t,n,r,i,a,o,s,c)=>{if(t!=null){var l=Yp(e,c);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:c,categoricalDomain:a,duplicateDomain:i,isCategorical:l,niceTicks:s,range:o,realScaleType:n,scale:r}}}),sk=K([X,hD,wO,VO,EO,IO,ak,BO,Qb],(e,t,n,r,i,a,o,s,c)=>{if(!(t==null||r==null)){var l=Yp(e,c),{type:u,ticks:d,tickCount:f}=t,p=n===`scaleBand`&&typeof r.bandwidth==`function`?r.bandwidth()/2:2,m=u===`category`&&r.bandwidth?r.bandwidth()/p:0;m=c===`angleAxis`&&a!=null&&a.length>=2?zc(a[0]-a[1])*2*m:m;var h=d||i;return h?h.map((e,t)=>{var n=o?o.indexOf(e):e,i=r.map(n);return J(i)?{index:t,coordinate:i+m,value:e,offset:m}:null}).filter(Yc):l&&s?s.map((e,t)=>{var n=r.map(e);return J(n)?{coordinate:n+m,value:e,index:t,offset:m}:null}).filter(Yc):r.ticks?r.ticks(f).map((e,t)=>{var n=r.map(e);return J(n)?{coordinate:n+m,value:e,index:t,offset:m}:null}).filter(Yc):r.domain().map((e,t)=>{var n=r.map(e);return J(n)?{coordinate:n+m,value:o?o[e]:e,index:t,offset:m}:null}).filter(Yc)}}),ck=K([X,hD,VO,IO,ak,BO,Qb],(e,t,n,r,i,a,o)=>{if(!(t==null||n==null||r==null||r[0]===r[1])){var s=Yp(e,o),{tickCount:c}=t,l=0;return l=o===`angleAxis`&&r?.length>=2?zc(r[0]-r[1])*2*l:l,s&&a?a.map((e,t)=>{var r=n.map(e);return J(r)?{coordinate:r+l,value:e,index:t,offset:l}:null}).filter(Yc):n.ticks?n.ticks(c).map((e,t)=>{var r=n.map(e);return J(r)?{coordinate:r+l,value:e,index:t,offset:l}:null}).filter(Yc):n.domain().map((e,t)=>{var r=n.map(e);return J(r)?{coordinate:r+l,value:i?i[e]:e,index:t,offset:l}:null}).filter(Yc)}}),lk=K(pD,VO,(e,t)=>{if(!(e==null||t==null))return eD(eD({},e),{},{scale:t})});K((e,t,n)=>fD(e,n),K([K([pD,wO,CO,LO],GE)],cx),(e,t)=>{if(!(e==null||t==null))return eD(eD({},e),{},{scale:t})});var uk=K([X,ym,bm],(e,t,n)=>{switch(e){case`horizontal`:return t.some(e=>e.reversed)?`right-to-left`:`left-to-right`;case`vertical`:return n.some(e=>e.reversed)?`bottom-to-top`:`top-to-bottom`;case`centric`:case`radial`:return`left-to-right`;default:return}});K([(e,t,n)=>e.renderedTicks[t]?.[n]],e=>{if(!(!e||e.length===0))return t=>{var n=1/0,r=e[0];for(var i of e){var a=Math.abs(i.coordinate-t);ae.options.defaultTooltipEventType,fk=e=>e.options.validateTooltipEventTypes;function pk(e,t,n){if(e==null)return t;var r=e?`axis`:`item`;return n==null?t:n.includes(r)?r:t}function mk(e,t){return pk(t,dk(e),fk(e))}function hk(e){return G(t=>mk(t,e))}var gk=(e,t)=>{var n,r=Number(t);if(!(Bc(r)||t==null))return r>=0?e==null||(n=e[r])==null?void 0:n.value:void 0},_k=e=>e.tooltip.settings,vk={active:!1,index:null,dataKey:void 0,graphicalItemId:void 0,coordinate:void 0},yk=qf({name:`tooltip`,initialState:{itemInteraction:{click:vk,hover:vk},axisInteraction:{click:vk,hover:vk},keyboardInteraction:vk,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0,sourceViewBox:void 0,graphicalItemId:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:`hover`,axisId:0,active:!1,defaultIndex:void 0}},reducers:{addTooltipEntrySettings:{reducer(e,t){e.tooltipItemPayloads.push(Z(t.payload))},prepare:q()},replaceTooltipEntrySettings:{reducer(e,t){var{prev:n,next:r}=t.payload,i=bf(e).tooltipItemPayloads.indexOf(Z(n));i>-1&&(e.tooltipItemPayloads[i]=Z(r))},prepare:q()},removeTooltipEntrySettings:{reducer(e,t){var n=bf(e).tooltipItemPayloads.indexOf(Z(t.payload));n>-1&&e.tooltipItemPayloads.splice(n,1)},prepare:q()},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.graphicalItemId=t.payload.activeGraphicalItemId,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.graphicalItemId=t.payload.activeGraphicalItemId,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate}}}),{addTooltipEntrySettings:bk,replaceTooltipEntrySettings:xk,removeTooltipEntrySettings:Sk,setTooltipSettingsState:Ck,setActiveMouseOverItemIndex:wk,mouseLeaveItem:Tk,mouseLeaveChart:Ek,setActiveClickItemIndex:Dk,setMouseOverAxisIndex:Ok,setMouseClickAxisIndex:kk,setSyncInteraction:Ak,setKeyboardInteraction:jk}=yk.actions,Mk=yk.reducer;function Nk(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 Pk(e){for(var t=1;t{if(t==null)return vk;var i=Rk(e,t,n);if(i==null)return vk;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var a=e.settings.active===!0;if(zk(i)){if(a)return Pk(Pk({},i),{},{active:!0})}else if(r!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:r,graphicalItemId:void 0};return Pk(Pk({},vk),{},{coordinate:i.coordinate})};function Vk(e){if(typeof e==`number`)return Number.isFinite(e)?e:void 0;if(e instanceof Date){var t=e.valueOf();return Number.isFinite(t)?t:void 0}var n=Number(e);return Number.isFinite(n)?n:void 0}function Hk(e,t){var n=Vk(e),r=t[0],i=t[1];return n===void 0?!1:n>=Math.min(r,i)&&n<=Math.max(r,i)}function Uk(e,t,n){if(n==null||t==null)return!0;var r=Y(e,t);return r==null||!sb(n)?!0:Hk(r,n)}var Wk=(e,t,n,r)=>{var i=e?.index;if(i==null)return null;var a=Number(i);if(!J(a))return i;var o=0,s=1/0;t.length>0&&(s=t.length-1);var c=Math.max(o,Math.min(a,s)),l=t[c];return l==null||Uk(l,n,r)?String(c):null},Gk=(e,t,n,r,i,a,o)=>{if(a!=null){var s=o[0]?.getPosition(a);if(s!=null)return s;var c=i?.[Number(a)];if(c)switch(n){case`horizontal`:return{x:c.coordinate,y:(r.top+t)/2};default:return{x:(r.left+e)/2,y:c.coordinate}}}},Kk=(e,t,n,r)=>{if(t===`axis`)return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i=n===`hover`?e.itemInteraction.hover.graphicalItemId:e.itemInteraction.click.graphicalItemId;if(e.syncInteraction.active&&i==null)return e.tooltipItemPayloads;if(i==null&&(r!=null||e.keyboardInteraction.active)){var a=e.tooltipItemPayloads[0];return a==null?[]:[a]}return e.tooltipItemPayloads.filter(e=>e.settings?.graphicalItemId===i)},qk=e=>e.options.tooltipPayloadSearcher,Jk=e=>e.tooltip;function Yk(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 Xk(e){for(var t=1;te(t)}function rA(e){if(typeof e==`string`)return e}function iA(e){if(!(typeof e!=`object`||!e))return{name:`name`in e?eA(e.name):void 0,unit:`unit`in e?tA(e.unit):void 0,dataKey:`dataKey`in e?nA(e.dataKey):void 0,payload:`payload`in e?e.payload:void 0,color:`color`in e?rA(e.color):void 0,fill:`fill`in e?rA(e.fill):void 0}}function aA(e,t){return e??t}var oA=(e,t,n,r,i,a,o)=>{if(!(t==null||a==null)){var{chartData:s,computedData:c,dataStartIndex:l,dataEndIndex:u}=n;return e.reduce((e,n)=>{var{dataDefinedOnItem:d,settings:f}=n,p=aA(d,s),m=Array.isArray(p)?Vp(p,l,u):p,h=f?.dataKey??r,g=f?.nameKey,_=r&&Array.isArray(m)&&!Array.isArray(m[0])&&o===`axis`?qc(m,r,i):a(m,t,c,g);return Array.isArray(_)?_.forEach(t=>{var n=iA(t),r=n?.name,i=n?.dataKey,a=n?.payload,o=Xk(Xk({},f),{},{name:r,unit:n?.unit,color:n?.color??f?.color,fill:n?.fill??f?.fill});e.push(dm({tooltipEntrySettings:o,dataKey:i,payload:a,value:Y(a,i),name:r==null?void 0:String(r)}))}):e.push(dm({tooltipEntrySettings:f,dataKey:h,payload:_,value:Y(_,h),name:Y(_,g)??f?.name})),e},[])}},sA=K([BD,gD,Eb],JE),cA=K([K([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),BD,K([ox,sx],_D)],bD,{memoizeOptions:{resultEqualityCheck:ix}}),lA=K([cA],e=>e.filter(nx)),uA=K([cA],TD,{memoizeOptions:{resultEqualityCheck:ix}}),dA=K([cA],e=>e.some(e=>!e.data)),fA=K([uA,tb],OD),pA=K([lA,tb,BD],tx),mA=K([fA,BD,cA,tb,dA,uA],jD),hA=K([BD],qD),gA=K([hA,K([BD],e=>e.allowDataOverflow)],lb),_A=K([K([pA,K([cA],e=>e.filter(nx)),wb,Tb],UD),tb,ox,gA],GD),vA=K([fA,BD,K([cA],CD),ZD,ox,ob],eO,{memoizeOptions:{resultEqualityCheck:rx}}),yA=K([K([iO,ox,sx],aO),ox],dO),bA=K([K([sO,ox,sx],aO),ox],pO),xA=K([BD,X,fA,mA,wb,ox,K([BD,hA,gA,_A,vA,K([yA,K([K([lO,ox,sx],aO),ox],_O),bA],$D),X,ox],yO)],SO),SA=K([BD,xA,K([xA,BD,sA],TO),ox],DO),CA=e=>IO(e,ox(e),sx(e),!1),wA=K([BD,CA],Pb),TA=K([K([BD,sA,SA,wA],GE)],cx),EA=K([X,BD,sA,TA,CA,K([X,mA,BD,ox],ik),K([X,mA,BD,ox],zO),ox],(e,t,n,r,i,a,o,s)=>{if(t){var{type:c}=t,l=Yp(e,s);if(r){var u=n===`scaleBand`&&r.bandwidth?r.bandwidth()/2:2,d=c===`category`&&r.bandwidth?r.bandwidth()/u:0;return d=s===`angleAxis`&&i!=null&&i?.length>=2?zc(i[0]-i[1])*2*d:d,l&&o?o.map((e,t)=>{var n=r.map(e);return J(n)?{coordinate:n+d,value:e,index:t,offset:d}:null}).filter(Yc):r.domain().map((e,t)=>{var n=r.map(e);return J(n)?{coordinate:n+d,value:a?a[e]:e,index:t,offset:d}:null}).filter(Yc)}}}),DA=K([dk,fk,_k],(e,t,n)=>pk(n.shared,e,t)),OA=e=>e.tooltip.settings.trigger,kA=e=>e.tooltip.settings.defaultIndex,AA=K([Jk,DA,OA,kA],Bk),jA=K([AA,fA,VD,xA],Wk),MA=K([EA,jA],gk),NA=K([AA],e=>{if(e)return e.dataKey}),PA=K([AA],e=>{if(e)return e.graphicalItemId}),FA=K([Jk,DA,OA,kA],Kk),IA=K([AA,K([hm,gm,X,Mm,EA,kA,FA],Gk)],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),LA=K([AA],e=>e?.active??!1),RA=K([K([FA,jA,tb,VD,MA,qk,DA],oA)],e=>{if(e!=null){var t=e.map(e=>e.payload).filter(e=>e!=null);return Array.from(new Set(t))}});function zA(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 BA(e){for(var t=1;tG(BD),GA=()=>{var e=WA(),t=G(EA),n=G(TA);return um(!e||!n?void 0:BA(BA({},e),{},{scale:n}),t)};function KA(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 qA(e){for(var t=1;t{var i=t.find(e=>e&&e.index===n);if(i){if(e===`horizontal`)return{x:i.coordinate,y:r.relativeY};if(e===`vertical`)return{x:r.relativeX,y:i.coordinate}}return{x:0,y:0}},QA=(e,t,n,r)=>{var i=t.find(e=>e&&e.index===n);if(i){if(e===`centric`){var a=i.coordinate,{radius:o}=r;return qA(qA(qA({},r),Dy(r.cx,r.cy,o,a)),{},{angle:a,radius:o})}var s=i.coordinate,{angle:c}=r;return qA(qA(qA({},r),Dy(r.cx,r.cy,s,c)),{},{angle:c,radius:s})}return{angle:0,clockWise:!1,cx:0,cy:0,endAngle:0,innerRadius:0,outerRadius:0,radius:0,startAngle:0,x:0,y:0}};function $A(e,t){var{relativeX:n,relativeY:r}=e;return n>=t.left&&n<=t.left+t.width&&r>=t.top&&r<=t.top+t.height}var ej=(e,t,n,r,i)=>{var a=t?.length??0;if(a<=1||e==null)return 0;if(r===`angleAxis`&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var o=0;o0?n[o-1]?.coordinate:n[a-1]?.coordinate,c=n[o]?.coordinate,l=o>=a-1?n[0]?.coordinate:n[o+1]?.coordinate,u=void 0;if(!(s==null||c==null||l==null))if(zc(c-s)!==zc(l-c)){var d=[];if(zc(l-c)===zc(i[1]-i[0])){u=l;var f=c+i[1]-i[0];d[0]=Math.min(f,(f+s)/2),d[1]=Math.max(f,(f+s)/2)}else{u=s;var p=l+i[1]-i[0];d[0]=Math.min(c,(p+c)/2),d[1]=Math.max(c,(p+c)/2)}var m=[Math.min(c,(u+c)/2),Math.max(c,(u+c)/2)];if(e>m[0]&&e<=m[1]||e>=d[0]&&e<=d[1])return n[o]?.index}else{var h=Math.min(s,l),g=Math.max(s,l);if(e>(h+c)/2&&e<=(g+c)/2)return n[o]?.index}}else if(t)for(var _=0;_(v.coordinate+b.coordinate)/2||_>0&&_(v.coordinate+b.coordinate)/2&&e<=(v.coordinate+y.coordinate)/2)return v.index}}return-1},tj=()=>G(Eb),nj=(e,t)=>t,rj=(e,t,n)=>n,ij=(e,t,n,r)=>r,aj=K(EA,e=>(0,Lu.default)(e,e=>e.coordinate)),oj=K([Jk,nj,rj,ij],Bk),sj=K([oj,fA,VD,xA],Wk),cj=(e,t,n)=>{if(t!=null){var r=Jk(e);return t===`axis`?n===`hover`?r.axisInteraction.hover.dataKey:r.axisInteraction.click.dataKey:n===`hover`?r.itemInteraction.hover.dataKey:r.itemInteraction.click.dataKey}},lj=K([Jk,nj,rj,ij],Kk),uj=K([hm,gm,X,Mm,EA,ij,lj],Gk),dj=K([oj,uj],(e,t)=>e.coordinate??t),fj=K([EA,sj],gk),pj=K([lj,sj,tb,VD,fj,qk,nj],oA),mj=K([oj,sj],(e,t)=>({isActive:e.active&&t!=null,activeIndex:t})),hj=(e,t,n,r,i,a,o)=>{if(!(!e||!n||!r||!i)&&$A(e,o)){var s=ej(pm(e,t),a,i,n,r),c=ZA(t,i,s,e);return{activeIndex:String(s),activeCoordinate:c}}},gj=(e,t,n,r,i,a,o)=>{if(!(!e||!r||!i||!a||!n)){var s=Ny(e,n);if(s){var c=ej(mm(s,t),o,a,r,i),l=QA(t,a,c,s);return{activeIndex:String(c),activeCoordinate:l}}}},_j=(e,t,n,r,i,a,o,s)=>{if(!(!e||!t||!r||!i||!a))return t===`horizontal`||t===`vertical`?hj(e,t,r,i,a,o,s):gj(e,t,n,r,i,a,o)},vj=K(e=>e.zIndex.zIndexMap,(e,t)=>t,(e,t,n)=>n,(e,t,n)=>{if(t!=null){var r=e[t];if(r!=null)return n?r.panoramaElement:r.element}}),yj=K(e=>e.zIndex.zIndexMap,e=>{var t=Object.keys(e).map(e=>parseInt(e,10)).concat(Object.values(jb));return Array.from(new Set(t)).sort((e,t)=>e-t)},{memoizeOptions:{resultEqualityCheck:ax}});function bj(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 xj(e){for(var t=1;txj(xj({},e),{},{[t]:{element:void 0,panoramaElement:void 0,consumers:0}}),{})},Ej=new Set(Object.values(jb));function Dj(e){return Ej.has(e)}var Oj=qf({name:`zIndex`,initialState:Tj,reducers:{registerZIndexPortal:{reducer:(e,t)=>{var{zIndex:n}=t.payload;e.zIndexMap[n]?e.zIndexMap[n].consumers+=1:e.zIndexMap[n]={consumers:1,element:void 0,panoramaElement:void 0}},prepare:q()},unregisterZIndexPortal:{reducer:(e,t)=>{var{zIndex:n}=t.payload;e.zIndexMap[n]&&(--e.zIndexMap[n].consumers,e.zIndexMap[n].consumers<=0&&!Dj(n)&&delete e.zIndexMap[n])},prepare:q()},registerZIndexPortalElement:{reducer:(e,t)=>{var{zIndex:n,element:r,isPanorama:i}=t.payload;e.zIndexMap[n]?i?e.zIndexMap[n].panoramaElement=Z(r):e.zIndexMap[n].element=Z(r):e.zIndexMap[n]={consumers:0,element:i?void 0:Z(r),panoramaElement:i?Z(r):void 0}},prepare:q()},unregisterZIndexPortalElement:{reducer:(e,t)=>{var{zIndex:n}=t.payload;e.zIndexMap[n]&&(t.payload.isPanorama?e.zIndexMap[n].panoramaElement=void 0:e.zIndexMap[n].element=void 0)},prepare:q()}}}),{registerZIndexPortal:kj,unregisterZIndexPortal:Aj,registerZIndexPortalElement:jj,unregisterZIndexPortalElement:Mj}=Oj.actions,Nj=Oj.reducer;function Pj(e){var{zIndex:t,children:n}=e,r=Sh()&&t!==void 0&&t!==0,i=Im(),a=(0,F.useRef)(void 0),o=(0,F.useRef)(new Set),s=W(),c=G(e=>vj(e,t,i));if((0,F.useLayoutEffect)(()=>{if(!r){var e=o.current;e.forEach(e=>{s(Aj({zIndex:e}))}),e.clear(),a.current=void 0;return}if(o.current.has(t)||(s(kj({zIndex:t})),o.current.add(t)),c){a.current=c;var n=o.current;n.forEach(e=>{e!==t&&(s(Aj({zIndex:e})),n.delete(e))})}},[s,t,r,c]),(0,F.useLayoutEffect)(()=>{var e=o.current;return()=>{e.forEach(e=>{s(Aj({zIndex:e}))}),e.clear()}},[s]),!r)return n;var l=c??a.current;return l?(0,Gg.createPortal)(n,l):null}function Fj(){return Fj=Object.assign?Object.assign.bind():function(e){for(var t=1;t(0,F.useContext)(Wj),Kj=Se(M(((e,t)=>{var n=Object.prototype.hasOwnProperty,r=`~`;function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(r=!1));function a(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function o(e,t,n,i,o){if(typeof n!=`function`)throw TypeError(`The listener must be a function`);var s=new a(n,i||e,o),c=r?r+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],s]:e._events[c].push(s):(e._events[c]=s,e._eventsCount++),e}function s(e,t){--e._eventsCount===0?e._events=new i:delete e._events[t]}function c(){this._events=new i,this._eventsCount=0}c.prototype.eventNames=function(){var e=[],t,i;if(this._eventsCount===0)return e;for(i in t=this._events)n.call(t,i)&&e.push(r?i.slice(1):i);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e},c.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,a=n.length,o=Array(a);i{if(t&&Array.isArray(e)){var n=Number.parseInt(t,10);if(!Bc(n))return e[n]}},Zj=qf({name:`options`,initialState:{chartName:``,tooltipPayloadSearcher:()=>void 0,eventEmitter:void 0,defaultTooltipEventType:`axis`},reducers:{createEventEmitter:e=>{e.eventEmitter??=Symbol(`rechartsEventEmitter`)}}}),Qj=Zj.reducer,{createEventEmitter:$j}=Zj.actions;function eM(e){return e.tooltip.syncInteraction}var tM=qf({name:`chartData`,initialState:{chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},reducers:{setChartData(e,t){if(e.chartData=Z(t.payload),t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var{startIndex:n,endIndex:r}=t.payload;n!=null&&(e.dataStartIndex=n),r!=null&&(e.dataEndIndex=r)}}}),{setChartData:nM,setDataStartEndIndexes:rM,setComputedData:iM}=tM.actions,aM=tM.reducer,oM=[`x`,`y`];function sM(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 cM(e){for(var t=1;t{if(e==null)return Xc;var s=(s,c,l)=>{if(t!==l&&e===s){if(c.payload.active===!1){n(Ak({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:void 0,graphicalItemId:void 0}));return}if(r===`index`){var u;if(o&&c!=null&&(u=c.payload)!=null&&u.coordinate&&c.payload.sourceViewBox){var d=c.payload.coordinate,{x:f,y:p}=d,m=fM(d,oM),{x:h,y:g,width:_,height:v}=c.payload.sourceViewBox,y=cM(cM({},m),{},{x:o.x+(_?(f-h)/_:0)*o.width,y:o.y+(v?(p-g)/v:0)*o.height});n(cM(cM({},c),{},{payload:cM(cM({},c.payload),{},{coordinate:y})}))}else n(c);return}if(i!=null){var b;typeof r==`function`?b=i[r(i,{activeTooltipIndex:c.payload.index==null?void 0:Number(c.payload.index),isTooltipActive:c.payload.active,activeIndex:c.payload.index==null?void 0:Number(c.payload.index),activeLabel:c.payload.label,activeDataKey:c.payload.dataKey,activeCoordinate:c.payload.coordinate})]:r===`value`&&(b=i.find(e=>String(e.value)===c.payload.label));var{coordinate:x}=c.payload;if(x==null||o==null){n(Ak({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:void 0,graphicalItemId:void 0}));return}if(b==null){n(Ak({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:c.payload.sourceViewBox,graphicalItemId:void 0}));return}var{x:S,y:C}=x,w=Math.min(S,o.x+o.width),T=Math.min(C,o.y+o.height),E={x:a===`horizontal`?b.coordinate:w,y:a===`horizontal`?T:b.coordinate};n(Ak({active:c.payload.active,coordinate:E,dataKey:c.payload.dataKey,index:String(b.index),label:c.payload.label,sourceViewBox:c.payload.sourceViewBox,graphicalItemId:c.payload.graphicalItemId}))}}};return qj.on(Jj,s),()=>{qj.off(Jj,s)}},[G(e=>e.rootProps.className),n,t,e,r,i,a,o])}function hM(){var e=G(Db),t=G(kb),n=W();(0,F.useEffect)(()=>{if(e==null)return Xc;var r=(r,i,a)=>{t!==a&&e===r&&n(rM(i))};return qj.on(Yj,r),()=>{qj.off(Yj,r)}},[n,t,e])}function gM(){var e=W();(0,F.useEffect)(()=>{e($j())},[e]),mM(),hM()}function _M(e,t,n,r,i,a){var o=G(n=>cj(n,e,t)),s=G(PA),c=G(kb),l=G(Db),u=G(Ob),d=G(eM)?.sourceViewBox!=null,f=ph();(0,F.useEffect)(()=>{if(!d&&l!=null&&c!=null){var e=Ak({active:a,coordinate:n,dataKey:o,index:i,label:typeof r==`number`?String(r):r,sourceViewBox:f,graphicalItemId:s});qj.emit(Jj,l,e,c)}},[d,n,o,s,i,r,c,l,u,a,f])}function vM(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 yM(e){for(var t=1;t{x(Ck({shared:g,trigger:_,axisId:b,active:n,defaultIndex:S}))},[x,g,_,b,n,S]);var C=ph(),w=I_(),T=hk(g),{activeIndex:E,isActive:D}=G(e=>mj(e,T,_,S))??{},O=G(e=>pj(e,T,_,S)),k=G(e=>fj(e,T,_,S)),ee=G(e=>dj(e,T,_,S)),te=O,A=Gj(),j=n??D??!1,[ne,re]=Uu([te,j]),ie=T===`axis`?k:void 0;_M(T,_,ee,ie,E,j);var ae=y??A;if(ae==null||C==null||T==null)return null;var oe=te??TM;j||(oe=TM),s&&oe.length&&(oe=lu(oe.filter(e=>e.value!=null&&(e.hide!==!0||t.includeHidden)),u,CM));var se=oe.length>0,ce=yM(yM({},t),{},{payload:oe,label:ie,active:j,activeIndex:E,coordinate:ee,accessibilityLayer:w}),le=F.createElement(F_,{allowEscapeViewBox:r,animationDuration:i,animationEasing:a,isAnimationActive:c,active:j,coordinate:ee,hasPayload:se,offset:l,position:d,reverseDirection:f,useTranslate3d:p,viewBox:C,wrapperStyle:m,lastBoundingBox:ne,innerRef:re,hasPortalFromProps:!!y},wM(o,ce));return F.createElement(F.Fragment,null,(0,Gg.createPortal)(le,ae),j&&F.createElement(Uj,{cursor:h,tooltipEventType:T,coordinate:ee,payload:oe,index:E}))}var OM=e=>null;OM.displayName=`Cell`;function kM(e,t,n){return(t=AM(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function AM(e){var t=jM(e,`string`);return typeof t==`symbol`?t:t+``}function jM(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var MM=class{constructor(e){kM(this,`cache`,new Map),this.maxSize=e}get(e){var t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.maxSize){var n=this.cache.keys().next().value;n!=null&&this.cache.delete(n)}this.cache.set(e,t)}clear(){this.cache.clear()}size(){return this.cache.size}};function NM(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 PM(e){for(var t=1;t{try{var n=document.getElementById(VM);n||(n=document.createElement(`span`),n.setAttribute(`id`,VM),n.setAttribute(`aria-hidden`,`true`),document.body.appendChild(n)),Object.assign(n.style,BM,t),n.textContent=`${e}`;var r=n.getBoundingClientRect();return{width:r.width,height:r.height}}catch{return{width:0,height:0}}},WM=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(e==null||E_.isSsr)return{width:0,height:0};if(!RM.enableCache)return UM(e,t);var n=HM(e,t),r=zM.get(n);if(r)return r;var i=UM(e,t);return zM.set(n,i),i},GM;function KM(e,t,n){return(t=qM(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qM(e){var t=JM(e,`string`);return typeof t==`symbol`?t:t+``}function JM(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var YM=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,XM=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,ZM=/^(px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q)$/,QM=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,$M={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},eN=[`cm`,`mm`,`pt`,`pc`,`in`,`Q`,`px`];function tN(e){return eN.includes(e)}var nN=`NaN`;function rN(e,t){return e*$M[t]}var iN=class e{static parse(t){var[,n,r]=QM.exec(t)??[];return n==null?e.NaN:new e(parseFloat(n),r??``)}constructor(e,t){this.num=e,this.unit=t,this.num=e,this.unit=t,Bc(e)&&(this.unit=``),t!==``&&!ZM.test(t)&&(this.num=NaN,this.unit=``),tN(t)&&(this.num=rN(e,t),this.unit=`px`)}add(t){return this.unit===t.unit?new e(this.num+t.num,this.unit):new e(NaN,``)}subtract(t){return this.unit===t.unit?new e(this.num-t.num,this.unit):new e(NaN,``)}multiply(t){return this.unit!==``&&t.unit!==``&&this.unit!==t.unit?new e(NaN,``):new e(this.num*t.num,this.unit||t.unit)}divide(t){return this.unit!==``&&t.unit!==``&&this.unit!==t.unit?new e(NaN,``):new e(this.num/t.num,this.unit||t.unit)}toString(){return`${this.num}${this.unit}`}isNaN(){return Bc(this.num)}};GM=iN,KM(iN,`NaN`,new GM(NaN,``));function aN(e){if(e==null||e.includes(nN))return nN;for(var t=e;t.includes(`*`)||t.includes(`/`);){var[,n,r,i]=YM.exec(t)??[],a=iN.parse(n??``),o=iN.parse(i??``),s=r===`*`?a.multiply(o):a.divide(o);if(s.isNaN())return nN;t=t.replace(YM,s.toString())}for(;t.includes(`+`)||/.-\d+(?:\.\d+)?/.test(t);){var[,c,l,u]=XM.exec(t)??[],d=iN.parse(c??``),f=iN.parse(u??``),p=l===`+`?d.add(f):d.subtract(f);if(p.isNaN())return nN;t=t.replace(XM,p.toString())}return t}var oN=/\(([^()]*)\)/;function sN(e){for(var t=e,n;(n=oN.exec(t))!=null;){var[,r]=n;t=t.replace(oN,aN(r))}return t}function cN(e){var t=e.replace(/\s+/g,``);return t=sN(t),t=aN(t),t}function lN(e){try{return cN(e)}catch{return nN}}function uN(e){var t=lN(e.slice(5,-1));return t===nN?``:t}var dN=[`x`,`y`,`lineHeight`,`capHeight`,`fill`,`scaleToFit`,`textAnchor`,`verticalAnchor`],fN=[`dx`,`dy`,`angle`,`className`,`breakAll`];function pN(){return pN=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:t,breakAll:n,style:r}=e;try{var i=[];return U(t)||(i=n?t.toString().split(``):t.toString().split(gN)),{wordsWithComputedWidth:i.map(e=>({word:e,width:WM(e,r).width})),spaceWidth:n?0:WM(`\xA0`,r).width}}catch{return null}};function vN(e){return e===`start`||e===`middle`||e===`end`||e===`inherit`}function yN(e){return U(e)||typeof e==`string`||typeof e==`number`||typeof e==`boolean`}var bN=(e,t,n,r)=>e.reduce((e,i)=>{var{word:a,width:o}=i,s=e[e.length-1];if(s&&o!=null&&(t==null||r||s.width+o+ne.reduce((e,t)=>e.width>t.width?e:t),SN=`…`,CN=(e,t,n,r,i,a,o,s)=>{var c=_N({breakAll:n,style:r,children:e.slice(0,t)+SN});if(!c)return[!1,[]];var l=bN(c.wordsWithComputedWidth,a,o,s);return[l.length>i||xN(l).width>Number(a),l]},wN=(e,t,n,r,i)=>{var{maxLines:a,children:o,style:s,breakAll:c}=e,l=V(a),u=String(o),d=bN(t,r,n,i);if(!l||i||!(d.length>a||xN(d).width>Number(r)))return d;for(var f=0,p=u.length-1,m=0,h;f<=p&&m<=u.length-1;){var g=Math.floor((f+p)/2),[_,v]=CN(u,g-1,c,s,a,r,n,i),[y]=CN(u,g,c,s,a,r,n,i);if(!_&&!y&&(f=g+1),_&&y&&(p=g-1),!_&&y){h=v;break}m++}return h||d},TN=e=>[{words:U(e)?[]:e.toString().split(gN),width:void 0}],EN=e=>{var{width:t,scaleToFit:n,children:r,style:i,breakAll:a,maxLines:o}=e;if((t||n)&&!E_.isSsr){var s,c,l=_N({breakAll:a,children:r,style:i});if(l){var{wordsWithComputedWidth:u,spaceWidth:d}=l;s=u,c=d}else return TN(r);return wN({breakAll:a,children:r,maxLines:o,style:i},s,c,t,!!n)}return TN(r)},DN=`#808080`,ON={angle:0,breakAll:!1,capHeight:`0.71em`,fill:DN,lineHeight:`1em`,scaleToFit:!1,textAnchor:`start`,verticalAnchor:`end`,x:0,y:0},kN=(0,F.forwardRef)((e,t)=>{var n=xl(e,ON),{x:r,y:i,lineHeight:a,capHeight:o,fill:s,scaleToFit:c,textAnchor:l,verticalAnchor:u}=n,d=mN(n,dN),f=(0,F.useMemo)(()=>EN({breakAll:d.breakAll,children:d.children,maxLines:d.maxLines,scaleToFit:c,style:d.style,width:d.width}),[d.breakAll,d.children,d.maxLines,c,d.style,d.width]),{dx:p,dy:m,angle:h,className:g,breakAll:_}=d,v=mN(d,fN);if(!Hc(r)||!Hc(i)||f.length===0)return null;var y=Number(r)+(V(p)?p:0),b=Number(i)+(V(m)?m:0);if(!J(y)||!J(b))return null;var x;switch(u){case`start`:x=uN(`calc(${o})`);break;case`middle`:x=uN(`calc(${(f.length-1)/2} * -${a} + (${o} / 2))`);break;default:x=uN(`calc(${f.length-1} * -${a})`);break}var S=[],C=f[0];if(c&&C!=null){var w=C.width,{width:T}=d;S.push(`scale(${V(T)&&V(w)?T/w:1})`)}return h&&S.push(`rotate(${h}, ${y}, ${b})`),S.length&&(v.transform=S.join(` `)),F.createElement(`text`,pN({},Go(v),{ref:t,x:y,y:b,className:P(`recharts-text`,g),textAnchor:l,fill:s.includes(`url`)?DN:s}),f.map((e,t)=>{var n=e.words.join(_?``:` `);return F.createElement(`tspan`,{x:y,dy:t===0?x:a,key:`${n}-${t}`},n)}))});kN.displayName=`Text`;function AN(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 jN(e){for(var t=1;t{var{viewBox:t,position:n,offset:r=0,parentViewBox:i,clamp:a}=e,{x:o,y:s,height:c,upperWidth:l,lowerWidth:u}=fh(t),d=o,f=o+(l-u)/2,p=(d+f)/2,m=(l+u)/2,h=d+l/2,g=c>=0?1:-1,_=g*r,v=g>0?`end`:`start`,y=g>0?`start`:`end`,b=l>=0?1:-1,x=b*r,S=b>0?`end`:`start`,C=b>0?`start`:`end`,w=i;if(n===`top`){var T={x:d+l/2,y:s-_,horizontalAnchor:`middle`,verticalAnchor:v};return a&&w&&(T.height=Math.max(s-w.y,0),T.width=l),T}if(n===`bottom`){var E={x:f+u/2,y:s+c+_,horizontalAnchor:`middle`,verticalAnchor:y};return a&&w&&(E.height=Math.max(w.y+w.height-(s+c),0),E.width=u),E}if(n===`left`){var D={x:p-x,y:s+c/2,horizontalAnchor:S,verticalAnchor:`middle`};return a&&w&&(D.width=Math.max(D.x-w.x,0),D.height=c),D}if(n===`right`){var O={x:p+m+x,y:s+c/2,horizontalAnchor:C,verticalAnchor:`middle`};return a&&w&&(O.width=Math.max(w.x+w.width-O.x,0),O.height=c),O}var k=a&&w?{width:m,height:c}:{};return n===`insideLeft`?jN({x:p+x,y:s+c/2,horizontalAnchor:C,verticalAnchor:`middle`},k):n===`insideRight`?jN({x:p+m-x,y:s+c/2,horizontalAnchor:S,verticalAnchor:`middle`},k):n===`insideTop`?jN({x:d+l/2,y:s+_,horizontalAnchor:`middle`,verticalAnchor:y},k):n===`insideBottom`?jN({x:f+u/2,y:s+c-_,horizontalAnchor:`middle`,verticalAnchor:v},k):n===`insideTopLeft`?jN({x:d+x,y:s+_,horizontalAnchor:C,verticalAnchor:y},k):n===`insideTopRight`?jN({x:d+l-x,y:s+_,horizontalAnchor:S,verticalAnchor:y},k):n===`insideBottomLeft`?jN({x:f+x,y:s+c-_,horizontalAnchor:C,verticalAnchor:v},k):n===`insideBottomRight`?jN({x:f+u-x,y:s+c-_,horizontalAnchor:S,verticalAnchor:v},k):n&&typeof n==`object`&&(V(n.x)||Vc(n.x))&&(V(n.y)||Vc(n.y))?jN({x:o+Gc(n.x,m),y:s+Gc(n.y,c),horizontalAnchor:`end`,verticalAnchor:`end`},k):jN({x:h,y:s+c/2,horizontalAnchor:`middle`,verticalAnchor:`middle`},k)},IN=[`labelRef`],LN=[`content`];function RN(e,t){if(e==null)return{};var n,r,i=zN(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{var{x:t,y:n,upperWidth:r,lowerWidth:i,width:a,height:o,children:s}=e,c=(0,F.useMemo)(()=>({x:t,y:n,upperWidth:r,lowerWidth:i,width:a,height:o}),[t,n,r,i,a,o]);return F.createElement(KN.Provider,{value:c},s)},JN=()=>{var e=(0,F.useContext)(KN),t=ph();return e||(t?fh(t):void 0)},YN=(0,F.createContext)(null),XN=()=>{var e=(0,F.useContext)(YN),t=G(Zb);return e||t},ZN=e=>{var{value:t,formatter:n}=e,r=U(e.children)?t:e.children;return typeof n==`function`?n(r):r},QN=e=>e!=null&&typeof e==`function`,$N=(e,t)=>zc(t-e)*Math.min(Math.abs(t-e),360),eP=(e,t,n,r,i)=>{var{offset:a,className:o}=e,{cx:s,cy:c,innerRadius:l,outerRadius:u,startAngle:d,endAngle:f,clockWise:p}=i,m=(l+u)/2,h=$N(d,f),g=h>=0?1:-1,_,v;switch(t){case`insideStart`:_=d+g*a,v=p;break;case`insideEnd`:_=f-g*a,v=!p;break;case`end`:_=f+g*a,v=p;break;default:throw Error(`Unsupported position ${t}`)}v=h<=0?v:!v;var y=Dy(s,c,m,_),b=Dy(s,c,m,_+(v?1:-1)*359),x=`M${y.x},${y.y} + A${m},${m},0,1,${+!v}, + ${b.x},${b.y}`,S=U(e.id)?Wc(`recharts-radial-line-`):e.id;return F.createElement(`text`,GN({},r,{dominantBaseline:`central`,className:P(`recharts-radial-bar-label`,o)}),F.createElement(`defs`,null,F.createElement(`path`,{id:S,d:x})),F.createElement(`textPath`,{xlinkHref:`#${S}`},n))},tP=(e,t,n)=>{var{cx:r,cy:i,innerRadius:a,outerRadius:o,startAngle:s,endAngle:c}=e,l=(s+c)/2;if(n===`outside`){var{x:u,y:d}=Dy(r,i,o+t,l);return{x:u,y:d,textAnchor:u>=r?`start`:`end`,verticalAnchor:`middle`}}if(n===`center`)return{x:r,y:i,textAnchor:`middle`,verticalAnchor:`middle`};if(n===`centerTop`)return{x:r,y:i,textAnchor:`middle`,verticalAnchor:`start`};if(n===`centerBottom`)return{x:r,y:i,textAnchor:`middle`,verticalAnchor:`end`};var{x:f,y:p}=Dy(r,i,(a+o)/2,l);return{x:f,y:p,textAnchor:`middle`,verticalAnchor:`middle`}},nP=e=>e!=null&&`cx`in e&&V(e.cx),rP={angle:0,offset:5,zIndex:jb.label,position:`middle`,textBreakAll:!1};function iP(e){if(!nP(e))return e;var{cx:t,cy:n,outerRadius:r}=e,i=r*2;return{x:t-r,y:n-r,width:i,upperWidth:i,lowerWidth:i,height:i}}function aP(e){var t=xl(e,rP),{viewBox:n,parentViewBox:r,position:i,value:a,children:o,content:s,className:c=``,textBreakAll:l,labelRef:u}=t,d=XN(),f=JN(),p=n==null?i===`center`?f:d??f:nP(n)?n:fh(n),m,h,g=iP(p);if(!p||U(a)&&U(o)&&!(0,F.isValidElement)(s)&&typeof s!=`function`)return null;var _=VN(VN({},t),{},{viewBox:p});if((0,F.isValidElement)(s)){var{labelRef:v}=_;return(0,F.cloneElement)(s,RN(_,IN))}if(typeof s==`function`){var{content:y}=_;if(m=(0,F.createElement)(s,RN(_,LN)),(0,F.isValidElement)(m))return m}else m=ZN(t);var b=Go(t);if(nP(p)){if(i===`insideStart`||i===`insideEnd`||i===`end`)return eP(t,i,m,b,p);h=tP(p,t.offset,t.position)}else{if(!g)return null;var x=FN({viewBox:g,position:i,offset:t.offset,parentViewBox:nP(r)?void 0:r,clamp:!0});h=VN(VN({x:x.x,y:x.y,textAnchor:x.horizontalAnchor,verticalAnchor:x.verticalAnchor},x.width===void 0?{}:{width:x.width}),x.height===void 0?{}:{height:x.height})}return F.createElement(Pj,{zIndex:t.zIndex},F.createElement(kN,GN({ref:u,className:P(`recharts-label`,c)},b,h,{textAnchor:vN(b.textAnchor)?b.textAnchor:h.textAnchor,breakAll:l}),m))}aP.displayName=`Label`;var oP=(e,t,n)=>{if(!e)return null;var r={viewBox:t,labelRef:n};return e===!0?F.createElement(aP,GN({key:`label-implicit`},r)):Hc(e)?F.createElement(aP,GN({key:`label-implicit`,value:e},r)):(0,F.isValidElement)(e)?e.type===aP?(0,F.cloneElement)(e,VN({key:`label-implicit`},r)):F.createElement(aP,GN({key:`label-implicit`,content:e},r)):QN(e)?F.createElement(aP,GN({key:`label-implicit`,content:e},r)):e&&typeof e==`object`?F.createElement(aP,GN({},e,{key:`label-implicit`},r)):null};function sP(e){var{label:t,labelRef:n}=e;return oP(t,JN(),n)||null}var cP=[`valueAccessor`],lP=[`dataKey`,`clockWise`,`id`,`textBreakAll`,`zIndex`];function uP(){return uP=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var t=Array.isArray(e.value)?e.value[e.value.length-1]:e.value;if(yN(t))return t},mP=(0,F.createContext)(void 0),hP=mP.Provider,gP=(0,F.createContext)(void 0);gP.Provider;function _P(){return(0,F.useContext)(mP)}function vP(){return(0,F.useContext)(gP)}function yP(e){var{valueAccessor:t=pP}=e,n=dP(e,cP),{dataKey:r,clockWise:i,id:a,textBreakAll:o,zIndex:s}=n,c=dP(n,lP),l=_P(),u=vP(),d=l||u;return!d||!d.length?null:F.createElement(Pj,{zIndex:s??jb.label},F.createElement(ns,{className:`recharts-label-list`},d.map((e,i)=>{var s=U(r)?t(e,i):Y(e.payload,r),l=U(a)?{}:{id:`${a}-${i}`};return F.createElement(aP,uP({key:`label-${i}`},Go(e),c,l,{fill:n.fill??e.fill,parentViewBox:e.parentViewBox,value:s,textBreakAll:o,viewBox:e.viewBox,index:i,zIndex:0}))})))}yP.displayName=`LabelList`;function bP(e){var{label:t}=e;return t?t===!0?F.createElement(yP,{key:`labelList-implicit`}):F.isValidElement(t)||QN(t)?F.createElement(yP,{key:`labelList-implicit`,content:t}):typeof t==`object`?F.createElement(yP,uP({key:`labelList-implicit`},t,{type:String(t.type)})):null:null}function xP(){return xP=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{cx:t,cy:n,r,className:i}=e,a=P(`recharts-dot`,i);return V(t)&&V(n)&&V(r)?F.createElement(`circle`,xP({},Uo(e),pl(e),{className:a,cx:t,cy:n,r})):null},CP=qf({name:`polarAxis`,initialState:{radiusAxis:{},angleAxis:{}},reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=Z(t.payload)},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=Z(t.payload)},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),{addRadiusAxis:wP,removeRadiusAxis:TP,addAngleAxis:EP,removeAngleAxis:DP}=CP.actions,OP=CP.reducer;function kP(e){return e&&typeof e==`object`&&`className`in e&&typeof e.className==`string`?e.className:``}var AP=M((e=>{var t=60103,n=60106,r=60107,i=60108,a=60114,o=60109,s=60110,c=60112,l=60113,u=60120,d=60115,f=60116;if(typeof Symbol==`function`&&Symbol.for){var p=Symbol.for;t=p(`react.element`),n=p(`react.portal`),r=p(`react.fragment`),i=p(`react.strict_mode`),a=p(`react.profiler`),o=p(`react.provider`),s=p(`react.context`),c=p(`react.forward_ref`),l=p(`react.suspense`),u=p(`react.suspense_list`),d=p(`react.memo`),f=p(`react.lazy`),p(`react.block`),p(`react.server.block`),p(`react.fundamental`),p(`react.debug_trace_mode`),p(`react.legacy_hidden`)}function m(e){if(typeof e==`object`&&e){var p=e.$$typeof;switch(p){case t:switch(e=e.type,e){case r:case a:case i:case l:case u:return e;default:switch(e&&=e.$$typeof,e){case s:case c:case f:case d:case o:return e;default:return p}}case n:return p}}}e.isFragment=function(e){return m(e)===r}})),jP=M(((e,t)=>{t.exports=AP()}))(),MP=e=>typeof e==`string`?e:e?e.displayName||e.name||`Component`:``,NP=null,PP=null,FP=e=>{if(e===NP&&Array.isArray(PP))return PP;var t=[];return F.Children.forEach(e,e=>{U(e)||((0,jP.isFragment)(e)?t=t.concat(FP(e.props.children)):t.push(e))}),PP=t,NP=e,t};function IP(e,t){var n=[],r=[];return r=Array.isArray(t)?t.map(e=>MP(e)):[MP(t)],FP(e).forEach(e=>{var t=(0,Rc.default)(e,`type.displayName`)||(0,Rc.default)(e,`type.name`);t&&r.indexOf(t)!==-1&&n.push(e)}),n}var LP=e=>e&&typeof e==`object`&&`clipDot`in e?!!e.clipDot:!0,RP=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){if(typeof e!=`object`||!e)return!1;if(Object.getPrototypeOf(e)===null)return!0;if(Object.prototype.toString.call(e)!==`[object Object]`){let t=e[Symbol.toStringTag];return t==null||!Object.getOwnPropertyDescriptor(e,Symbol.toStringTag)?.writable?!1:e.toString()===`[object ${t}]`}let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}e.isPlainObject=t})),zP=M(((e,t)=>{t.exports=RP().isPlainObject})),BP,VP,HP,UP,WP;function GP(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 KP(e){for(var t=1;t{var a=n-r,o=Lc(BP||=ZP([`M `,`,`,``]),e,t);return o+=Lc(VP||=ZP([`L `,`,`,``]),e+n,t),o+=Lc(HP||=ZP([`L `,`,`,``]),e+n-a/2,t+i),o+=Lc(UP||=ZP([`L `,`,`,``]),e+n-a/2-r,t+i),o+=Lc(WP||=ZP([`L `,`,`,` Z`]),e,t),o},$P={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:`ease`},eF=e=>{var t=xl(e,$P),{x:n,y:r,upperWidth:i,lowerWidth:a,height:o,className:s}=t,{animationEasing:c,animationDuration:l,animationBegin:u,isUpdateAnimationActive:d}=t,f=(0,F.useRef)(null),[p,m]=(0,F.useState)(-1),h=(0,F.useRef)(i),g=(0,F.useRef)(a),_=(0,F.useRef)(o),v=(0,F.useRef)(n),y=(0,F.useRef)(r),b=Yv(e,`trapezoid-`);if((0,F.useEffect)(()=>{if(f.current&&f.current.getTotalLength)try{var e=f.current.getTotalLength();e&&m(e)}catch{}},[]),n!==+n||r!==+r||i!==+i||a!==+a||o!==+o||i===0&&a===0||o===0)return null;var x=P(`recharts-trapezoid`,s);if(!d)return F.createElement(`g`,null,F.createElement(`path`,XP({},Go(t),{className:x,d:QP(n,r,i,a,o)})));var S=h.current,C=g.current,w=_.current,T=v.current,E=y.current,D=`0px ${p===-1?1:p}px`,O=`${p}px ${p}px`,k=gv([`strokeDasharray`],l,c);return F.createElement(Jv,{animationId:b,key:b,canBegin:p>0,duration:l,easing:c,isActive:d,begin:u},e=>{var s=H(S,i,e),c=H(C,a,e),l=H(w,o,e),u=H(T,n,e),d=H(E,r,e);f.current&&(h.current=s,g.current=c,_.current=l,v.current=u,y.current=d);var p=e>0?{transition:k,strokeDasharray:O}:{strokeDasharray:D};return F.createElement(`path`,XP({},Go(t),{className:x,d:QP(u,d,s,c,l),ref:f,style:KP(KP({},p),t.style)}))})},tF=Se(zP()),nF=[`option`,`shapeType`,`activeClassName`,`inActiveClassName`];function rF(e,t){if(e==null)return{};var n,r,i=iF(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{var r=W();return(i,a)=>o=>{e?.(i,a,o),r(wk({activeIndex:String(a),activeDataKey:t,activeCoordinate:i.tooltipPosition,activeGraphicalItemId:n}))}},gF=e=>{var t=W();return(n,r)=>i=>{e?.(n,r,i),t(Tk())}},_F=(e,t,n)=>{var r=W();return(i,a)=>o=>{e?.(i,a,o),r(Dk({activeIndex:String(a),activeDataKey:t,activeCoordinate:i.tooltipPosition,activeGraphicalItemId:n}))}};function vF(e){var{tooltipEntrySettings:t}=e,n=W(),r=Im(),i=(0,F.useRef)(null);return(0,F.useLayoutEffect)(()=>{r||(i.current===null?n(bk(t)):i.current!==t&&n(xk({prev:i.current,next:t})),i.current=t)},[t,n,r]),(0,F.useLayoutEffect)(()=>()=>{i.current&&=(n(Sk(i.current)),null)},[n]),null}function yF(e){var{legendPayload:t}=e,n=W(),r=Im(),i=(0,F.useRef)(null);return(0,F.useLayoutEffect)(()=>{r||(i.current===null?n(Sg(t)):i.current!==t&&n(Cg({prev:i.current,next:t})),i.current=t)},[n,r,t]),(0,F.useLayoutEffect)(()=>()=>{i.current&&=(n(wg(i.current)),null)},[n]),null}var bF=F.useId??(()=>{var[e]=F.useState(()=>Wc(`uid-`));return e});function xF(e,t){var n=bF();return t||(e?`${e}-${n}`:n)}var SF=(0,F.createContext)(void 0),CF=e=>{var{id:t,type:n,children:r}=e,i=xF(`recharts-${n}`,t);return F.createElement(SF.Provider,{value:i},r(i))},wF=qf({name:`graphicalItems`,initialState:{cartesianItems:[],polarItems:[]},reducers:{addCartesianGraphicalItem:{reducer(e,t){e.cartesianItems.push(Z(t.payload))},prepare:q()},replaceCartesianGraphicalItem:{reducer(e,t){var{prev:n,next:r}=t.payload,i=bf(e).cartesianItems.indexOf(Z(n));i>-1&&(e.cartesianItems[i]=Z(r))},prepare:q()},removeCartesianGraphicalItem:{reducer(e,t){var n=bf(e).cartesianItems.indexOf(Z(t.payload));n>-1&&e.cartesianItems.splice(n,1)},prepare:q()},addPolarGraphicalItem:{reducer(e,t){e.polarItems.push(Z(t.payload))},prepare:q()},removePolarGraphicalItem:{reducer(e,t){var n=bf(e).polarItems.indexOf(Z(t.payload));n>-1&&e.polarItems.splice(n,1)},prepare:q()},replacePolarGraphicalItem:{reducer(e,t){var{prev:n,next:r}=t.payload,i=bf(e).polarItems.indexOf(Z(n));i>-1&&(e.polarItems[i]=Z(r))},prepare:q()}}}),{addCartesianGraphicalItem:TF,replaceCartesianGraphicalItem:EF,removeCartesianGraphicalItem:DF,addPolarGraphicalItem:OF,removePolarGraphicalItem:kF,replacePolarGraphicalItem:AF}=wF.actions,jF=wF.reducer,MF=(0,F.memo)(e=>{var t=W(),n=(0,F.useRef)(null);return(0,F.useLayoutEffect)(()=>{n.current===null?t(TF(e)):n.current!==e&&t(EF({prev:n.current,next:e})),n.current=e},[t,e]),(0,F.useLayoutEffect)(()=>()=>{n.current&&=(t(DF(n.current)),null)},[t]),null}),NF=[`points`];function PF(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 FF(e){for(var t=1;t{var s=FF(FF(FF({r:3},o),d),{},{index:r,cx:e.x??void 0,cy:e.y??void 0,dataKey:a,value:e.value,payload:e.payload,points:t});return F.createElement(HF,{key:`dot-${r}`,option:n,dotProps:s,className:i})}),p={};return s&&c!=null&&(p.clipPath=`url(#clipPath-${u?``:`dots-`}${c})`),F.createElement(Pj,{zIndex:l},F.createElement(ns,zF({className:r},p),f))}function GF(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 KF(e){for(var t=1;t({top:e.top,bottom:e.bottom,left:e.left,right:e.right})),hm,gm],(e,t,n)=>{if(!(!e||t==null||n==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,n-e.top-e.bottom)}}),lI=()=>G(cI),uI=()=>G(RA);function dI(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 fI(e){for(var t=1;t{var{point:t,childIndex:n,mainColor:r,activeDot:i,dataKey:a,clipPath:o}=e;if(i===!1||t.x==null||t.y==null)return null;var s=fI(fI(fI({},{index:n,dataKey:a,cx:t.x,cy:t.y,r:4,fill:r??`none`,strokeWidth:2,stroke:`#fff`,payload:t.payload,value:t.value}),Wo(i)),pl(i)),c=(0,F.isValidElement)(i)?(0,F.cloneElement)(i,s):typeof i==`function`?i(s):F.createElement(SP,s);return F.createElement(ns,{className:`recharts-active-dot`,clipPath:o},c)};function _I(e){var{points:t,mainColor:n,activeDot:r,itemDataKey:i,clipPath:a,zIndex:o=jb.activeDot}=e,s=G(jA),c=uI();if(t==null||c==null)return null;var l=t.find(e=>c.includes(e.payload));return U(l)?null:F.createElement(Pj,{zIndex:o},F.createElement(gI,{point:l,childIndex:Number(s),mainColor:n,dataKey:i,activeDot:r,clipPath:a}))}var vI=(e,t,n)=>{var r=n??e;if(!U(r))return Gc(r,t,0)},yI=(e,t,n)=>{var r={},i=e.filter(nx),a=e.filter(e=>e.stackId==null),o=i.reduce((e,t)=>{var n=e[t.stackId];return n??=[],n.push(t),e[t.stackId]=n,e},r),s=Object.entries(o).map(e=>{var[r,i]=e;return{stackId:r,dataKeys:i.map(e=>e.dataKey),barSize:vI(t,n,i[0]?.barSize)}}),c=a.map(e=>({stackId:void 0,dataKeys:[e.dataKey].filter(e=>e!=null),barSize:vI(t,n,e.barSize)}));return[...s,...c]};function bI(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 xI(e){for(var t=1;te+(t.barSize||0),0);d+=(a-1)*o,d>=n&&(d-=(a-1)*o,o=0),d>=n&&u>0&&(l=!0,u*=.9,d=a*u);var f={offset:((n-d)/2>>0)-o,size:0};s=r.reduce((e,t)=>{var n={stackId:t.stackId,dataKeys:t.dataKeys,position:{offset:f.offset+f.size+o,size:l?u:t.barSize??0}},r=[...e,n];return f=n.position,r},c)}else{var p=Gc(t,n,0,!0);n-2*p-(a-1)*o<=0&&(o=0);var m=(n-2*p-(a-1)*o)/a;m>1&&(m>>=0);var h=J(i)?Math.min(m,i):m;s=r.reduce((e,t,n)=>[...e,{stackId:t.stackId,dataKeys:t.dataKeys,position:{offset:p+(m+o)*n+(m-h)/2,size:h}}],c)}return s}}var EI=(e,t,n,r,i,a,o)=>{var s=U(o)?t:o,c=TI(n,r,i===a?a:i,e,s);return i!==a&&c!=null&&(c=c.map(e=>xI(xI({},e),{},{position:xI(xI({},e.position),{},{offset:e.position.offset-i/2})}))),c},DI=(e,t)=>{var n=ex(t);if(!(!e||n==null||t==null)){var{stackId:r}=t;if(r!=null){var i=e[r];if(i){var{stackedData:a}=i;if(a)return a.find(e=>e.key===n)}}}},OI=(e,t)=>{if(!(e==null||t==null)){var n=e.find(e=>e.stackId===t.stackId&&t.dataKey!=null&&e.dataKeys.includes(t.dataKey));if(n!=null)return n.position}};function kI(e,t){return e&&typeof e==`object`&&`zIndex`in e&&typeof e.zIndex==`number`&&J(e.zIndex)?e.zIndex:t}var AI=e=>{var{chartData:t}=e,n=W(),r=Im();return(0,F.useEffect)(()=>r?()=>{}:(n(nM(t)),()=>{n(nM(void 0))}),[t,n,r]),null},jI={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},MI=qf({name:`brush`,initialState:jI,reducers:{setBrushSettings(e,t){return t.payload==null?jI:t.payload}}}),{setBrushSettings:NI}=MI.actions,PI=MI.reducer;function FI(e){return(e%180+180)%180}var II=function(e){var{width:t,height:n}=e,r=FI(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0)*Math.PI/180,i=Math.atan(n/t),a=r>i&&r{e.dots.push(t.payload)},removeDot:(e,t)=>{var n=bf(e).dots.findIndex(e=>e===t.payload);n!==-1&&e.dots.splice(n,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var n=bf(e).areas.findIndex(e=>e===t.payload);n!==-1&&e.areas.splice(n,1)},addLine:(e,t)=>{e.lines.push(Z(t.payload))},removeLine:(e,t)=>{var n=bf(e).lines.findIndex(e=>e===t.payload);n!==-1&&e.lines.splice(n,1)}}}),{addDot:RI,removeDot:zI,addArea:BI,removeArea:VI,addLine:HI,removeLine:UI}=LI.actions,WI=LI.reducer,GI=(0,F.createContext)(void 0),KI=e=>{var{children:t}=e,[n]=(0,F.useState)(`${Wc(`recharts`)}-clip`),r=lI();if(r==null)return null;var{x:i,y:a,width:o,height:s}=r;return F.createElement(GI.Provider,{value:n},F.createElement(`defs`,null,F.createElement(`clipPath`,{id:n},F.createElement(`rect`,{x:i,y:a,height:s,width:o}))),t)};function qI(e,t){if(t<1)return[];if(t===1)return e;for(var n=[],r=0;re*i)return!1;var a=n();return e*(t-e*a/2-r)>=0&&e*(t+e*a/2-i)<=0}function ZI(e,t){return qI(e,t+1)}function QI(e,t,n,r,i){for(var a=(r||[]).slice(),{start:o,end:s}=t,c=0,l=1,u=o,d=function(){var t=r?.[c];if(t===void 0)return{v:qI(r,l)};var a=c,d,f=()=>(d===void 0&&(d=n(t,a)),d),p=t.coordinate,m=c===0||XI(e,p,f,u,s);m||(c=0,u=o,l+=1),m&&(u=p+e*(f()/2+i),c+=l)},f;l<=a.length;)if(f=d(),f)return f.v;return[]}function $I(e,t,n,r,i){var a=(r||[]).slice().length;if(a===0)return[];for(var{start:o,end:s}=t,c=1;c<=a;c++){for(var l=(a-1)%c,u=o,d=!0,f=function(){var t=r[m];if(t==null)return 0;var a=m,o,c=()=>(o===void 0&&(o=n(t,a)),o),f=t.coordinate,p=m===l||XI(e,f,c,u,s);if(!p)return d=!1,1;p&&(u=f+e*(c()/2+i))},p,m=l;m(u===void 0&&(u=n(r,t)),u);if(t===o-1){var f=e*(l.coordinate+e*d()/2-c);a[t]=l=tL(tL({},l),{},{tickCoord:f>0?l.coordinate-f*e:l.coordinate})}else a[t]=l=tL(tL({},l),{},{tickCoord:l.coordinate});l.tickCoord!=null&&XI(e,l.tickCoord,d,s,c)&&(c=l.tickCoord-e*(d()/2+i),a[t]=tL(tL({},l),{},{isShow:!0}))},u=o-1;u>=0;u--)if(l(u))continue;return a}function oL(e,t,n,r,i,a){var o=(r||[]).slice(),s=o.length,{start:c,end:l}=t;if(a){var u=r[s-1];if(u!=null){var d=n(u,s-1),f=e*(u.coordinate+e*d/2-l);o[s-1]=u=tL(tL({},u),{},{tickCoord:f>0?u.coordinate-f*e:u.coordinate}),u.tickCoord!=null&&XI(e,u.tickCoord,()=>d,c,l)&&(l=u.tickCoord-e*(d/2+i),o[s-1]=tL(tL({},u),{},{isShow:!0}))}}for(var p=a?s-1:s,m=function(t){var r=o[t];if(r==null)return 1;var a=r,s,u=()=>(s===void 0&&(s=n(r,t)),s);if(t===0){var d=e*(a.coordinate-e*u()/2-c);o[t]=a=tL(tL({},a),{},{tickCoord:d<0?a.coordinate-d*e:a.coordinate})}else o[t]=a=tL(tL({},a),{},{tickCoord:a.coordinate});a.tickCoord!=null&&XI(e,a.tickCoord,u,c,l)&&(c=a.tickCoord+e*(u()/2+i),o[t]=tL(tL({},a),{},{isShow:!0}))},h=0;h{var i=typeof l==`function`?l(e.value,r):e.value;return p===`width`?JI(WM(i,{fontSize:t,letterSpacing:n}),m,d):WM(i,{fontSize:t,letterSpacing:n})[p]},g=i[0],_=i[1],v=i.length>=2&&g!=null&&_!=null?zc(_.coordinate-g.coordinate):1,y=YI(a,v,p);return c===`equidistantPreserveStart`?QI(v,y,h,i,o):c===`equidistantPreserveEnd`?$I(v,y,h,i,o):(f=c===`preserveStart`||c===`preserveStartEnd`?oL(v,y,h,i,o,c===`preserveStartEnd`):aL(v,y,h,i,o),f.filter(e=>e.isShow))}var cL=e=>{var{ticks:t,label:n,labelGapWithTick:r=5,tickSize:i=0,tickMargin:a=0}=e,o=0;if(t){Array.from(t).forEach(e=>{if(e){var t=e.getBoundingClientRect();t.width>o&&(o=t.width)}});var s=n?n.getBoundingClientRect().width:0,c=i+a,l=o+c+s+(n?r:0);return Math.round(l)}return 0},lL=qf({name:`renderedTicks`,initialState:{xAxis:{},yAxis:{}},reducers:{setRenderedTicks:(e,t)=>{var{axisType:n,axisId:r,ticks:i}=t.payload;e[n][r]=Z(i)},removeRenderedTicks:(e,t)=>{var{axisType:n,axisId:r}=t.payload;delete e[n][r]}}}),{setRenderedTicks:uL,removeRenderedTicks:dL}=lL.actions,fL=lL.reducer,pL=[`axisLine`,`width`,`height`,`className`,`hide`,`ticks`,`axisType`,`axisId`];function mL(e,t){if(e==null)return{};var n,r,i=hL(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;rr==null||n==null?Xc:(i(uL({ticks:t.map(e=>({value:e.value,coordinate:e.coordinate,offset:e.offset,index:e.index})),axisId:r,axisType:n})),()=>{i(dL({axisId:r,axisType:n}))}),[i,t,r,n]),null}var kL=(0,F.forwardRef)((e,t)=>{var{ticks:n=[],tick:r,tickLine:i,stroke:a,tickFormatter:o,unit:s,padding:c,tickTextProps:l,orientation:u,mirror:d,x:f,y:p,width:m,height:h,tickSize:g,tickMargin:_,fontSize:v,letterSpacing:y,getTicksConfig:b,events:x,axisType:S,axisId:C}=e,w=sL(vL(vL({},b),{},{ticks:n}),v,y),T=Uo(b),E=Wo(r),D=vN(T.textAnchor)?T.textAnchor:TL(u,d),O=EL(u,d),k={};typeof i==`object`&&(k=i);var ee=vL(vL({},T),{},{fill:`none`},k),te=w.map(e=>vL({entry:e},wL(e,f,p,m,h,u,g,d,_))),A=te.map(e=>{var{entry:t,line:n}=e;return F.createElement(ns,{className:`recharts-cartesian-axis-tick`,key:`tick-${t.value}-${t.coordinate}-${t.tickCoord}`},i&&F.createElement(`line`,gL({},ee,n,{className:P(`recharts-cartesian-axis-tick-line`,(0,Rc.default)(i,`className`))})))}),j=te.map((e,t)=>{var{entry:n,tick:i}=e,u=vL(vL({},vL(vL(vL(vL({verticalAnchor:O},T),{},{textAnchor:D,stroke:`none`,fill:a},i),{},{index:t,payload:n,visibleTicksCount:w.length,tickFormatter:o,padding:c},l),{},{angle:l?.angle??T.angle??0})),E);return F.createElement(ns,gL({className:`recharts-cartesian-axis-tick-label`,key:`tick-label-${n.value}-${n.coordinate}-${n.tickCoord}`},hl(x,n,t)),r&&F.createElement(DL,{option:r,tickProps:u,value:`${typeof o==`function`?o(n.value,t):n.value}${s||``}`}))});return F.createElement(`g`,{className:`recharts-cartesian-axis-ticks recharts-${S}-ticks`},F.createElement(OL,{ticks:w,axisId:C,axisType:S}),j.length>0&&F.createElement(Pj,{zIndex:jb.label},F.createElement(`g`,{className:`recharts-cartesian-axis-tick-labels recharts-${S}-tick-labels`,ref:t},j)),A.length>0&&F.createElement(`g`,{className:`recharts-cartesian-axis-tick-lines recharts-${S}-tick-lines`},A))}),AL=(0,F.forwardRef)((e,t)=>{var{axisLine:n,width:r,height:i,className:a,hide:o,ticks:s,axisType:c,axisId:l}=e,u=mL(e,pL),[d,f]=(0,F.useState)(``),[p,m]=(0,F.useState)(``),h=(0,F.useRef)(null);(0,F.useImperativeHandle)(t,()=>({getCalculatedWidth:()=>cL({ticks:h.current,label:e.labelRef?.current,labelGapWithTick:5,tickSize:e.tickSize,tickMargin:e.tickMargin})}));var g=(0,F.useCallback)(e=>{if(e){var t=e.getElementsByClassName(`recharts-cartesian-axis-tick-value`);h.current=t;var n=t[0];if(n){var r=window.getComputedStyle(n),i=r.fontSize,a=r.letterSpacing;(i!==d||a!==p)&&(f(i),m(a))}}},[d,p]);return o||r!=null&&r<=0||i!=null&&i<=0?null:F.createElement(Pj,{zIndex:e.zIndex},F.createElement(ns,{className:P(`recharts-cartesian-axis`,a)},F.createElement(CL,{x:e.x,y:e.y,width:r,height:i,orientation:e.orientation,mirror:e.mirror,axisLine:n,otherSvgProps:Uo(e)}),F.createElement(kL,{ref:g,axisType:c,events:u,fontSize:d,getTicksConfig:e,height:e.height,letterSpacing:p,mirror:e.mirror,orientation:e.orientation,padding:e.padding,stroke:e.stroke,tick:e.tick,tickFormatter:e.tickFormatter,tickLine:e.tickLine,tickMargin:e.tickMargin,tickSize:e.tickSize,tickTextProps:e.tickTextProps,ticks:s,unit:e.unit,width:e.width,x:e.x,y:e.y,axisId:l}),F.createElement(qN,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},F.createElement(sP,{label:e.label,labelRef:e.labelRef}),e.children)))}),jL=F.forwardRef((e,t)=>{var n=xl(e,SL);return F.createElement(AL,gL({},n,{ref:t}))});jL.displayName=`CartesianAxis`;var ML=[`x1`,`y1`,`x2`,`y2`,`key`],NL=[`offset`],PL=[`xAxisId`,`yAxisId`],FL=[`xAxisId`,`yAxisId`];function IL(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 LL(e){for(var t=1;t{var{fill:t}=e;if(!t||t===`none`)return null;var{fillOpacity:n,x:r,y:i,width:a,height:o,ry:s}=e;return F.createElement(`rect`,{x:r,y:i,ry:s,width:a,height:o,stroke:`none`,fill:t,fillOpacity:n,className:`recharts-cartesian-grid-bg`})};function GL(e){var{option:t,lineItemProps:n}=e,r;if(F.isValidElement(t))r=F.cloneElement(t,n);else if(typeof t==`function`)r=t(n);else{var{x1:i,y1:a,x2:o,y2:s,key:c}=n,l=Uo(HL(n,ML))??{},{offset:u}=l,d=HL(l,NL);r=F.createElement(`line`,VL({},d,{x1:i,y1:a,x2:o,y2:s,fill:`none`,key:c}))}return r}function KL(e){var{x:t,width:n,horizontal:r=!0,horizontalPoints:i}=e;if(!r||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,s=HL(e,PL),c=i.map((e,i)=>{var a=LL(LL({},s),{},{x1:t,y1:e,x2:t+n,y2:e,key:`line-${i}`,index:i});return F.createElement(GL,{key:`line-${i}`,option:r,lineItemProps:a})});return F.createElement(`g`,{className:`recharts-cartesian-grid-horizontal`},c)}function qL(e){var{y:t,height:n,vertical:r=!0,verticalPoints:i}=e;if(!r||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,s=HL(e,FL),c=i.map((e,i)=>{var a=LL(LL({},s),{},{x1:e,y1:t,x2:e,y2:t+n,key:`line-${i}`,index:i});return F.createElement(GL,{option:r,lineItemProps:a,key:`line-${i}`})});return F.createElement(`g`,{className:`recharts-cartesian-grid-vertical`},c)}function JL(e){var{horizontalFill:t,fillOpacity:n,x:r,y:i,width:a,height:o,horizontalPoints:s,horizontal:c=!0}=e;if(!c||!t||!t.length||s==null)return null;var l=s.map(e=>Math.round(e+i-i)).sort((e,t)=>e-t);i!==l[0]&&l.unshift(0);var u=l.map((e,s)=>{var c=l[s+1],u=c==null?i+o-e:c-e;if(u<=0)return null;var d=s%t.length;return F.createElement(`rect`,{key:`react-${s}`,y:e,x:r,height:u,width:a,stroke:`none`,fill:t[d],fillOpacity:n,className:`recharts-cartesian-grid-bg`})});return F.createElement(`g`,{className:`recharts-cartesian-gridstripes-horizontal`},u)}function YL(e){var{vertical:t=!0,verticalFill:n,fillOpacity:r,x:i,y:a,width:o,height:s,verticalPoints:c}=e;if(!t||!n||!n.length)return null;var l=c.map(e=>Math.round(e+i-i)).sort((e,t)=>e-t);i!==l[0]&&l.unshift(0);var u=l.map((e,t)=>{var c=l[t+1],u=c==null?i+o-e:c-e;if(u<=0)return null;var d=t%n.length;return F.createElement(`rect`,{key:`react-${t}`,x:e,y:a,width:u,height:s,stroke:`none`,fill:n[d],fillOpacity:r,className:`recharts-cartesian-grid-bg`})});return F.createElement(`g`,{className:`recharts-cartesian-gridstripes-vertical`},u)}var XL=(e,t)=>{var{xAxis:n,width:r,height:i,offset:a}=e;return Xp(sL(LL(LL(LL({},SL),n),{},{ticks:Zp(n,!0),viewBox:{x:0,y:0,width:r,height:i}})),a.left,a.left+a.width,t)},ZL=(e,t)=>{var{yAxis:n,width:r,height:i,offset:a}=e;return Xp(sL(LL(LL(LL({},SL),n),{},{ticks:Zp(n,!0),viewBox:{x:0,y:0,width:r,height:i}})),a.top,a.top+a.height,t)},QL={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:`#ccc`,fill:`none`,verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:jb.grid};function $L(e){var t=gh(),n=_h(),r=hh(),i=LL(LL({},xl(e,QL)),{},{x:V(e.x)?e.x:r.left,y:V(e.y)?e.y:r.top,width:V(e.width)?e.width:r.width,height:V(e.height)?e.height:r.height}),{xAxisId:a,yAxisId:o,x:s,y:c,width:l,height:u,syncWithTicks:d,horizontalValues:f,verticalValues:p}=i,m=Im(),h=G(e=>ok(e,`xAxis`,a,m)),g=G(e=>ok(e,`yAxis`,o,m));if(!Hp(l)||!Hp(u)||!V(s)||!V(c))return null;var _=i.verticalCoordinatesGenerator||XL,v=i.horizontalCoordinatesGenerator||ZL,{horizontalPoints:y,verticalPoints:b}=i;if((!y||!y.length)&&typeof v==`function`){var x=f&&f.length,S=v({yAxis:g?LL(LL({},g),{},{ticks:x?f:g.ticks}):void 0,width:t??l,height:n??u,offset:r},x?!0:d);Wm(Array.isArray(S),`horizontalCoordinatesGenerator should return Array but instead it returned [${typeof S}]`),Array.isArray(S)&&(y=S)}if((!b||!b.length)&&typeof _==`function`){var C=p&&p.length,w=_({xAxis:h?LL(LL({},h),{},{ticks:C?p:h.ticks}):void 0,width:t??l,height:n??u,offset:r},C?!0:d);Wm(Array.isArray(w),`verticalCoordinatesGenerator should return Array but instead it returned [${typeof w}]`),Array.isArray(w)&&(b=w)}return F.createElement(Pj,{zIndex:i.zIndex},F.createElement(`g`,{className:`recharts-cartesian-grid`},F.createElement(WL,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),F.createElement(JL,VL({},i,{horizontalPoints:y})),F.createElement(YL,VL({},i,{verticalPoints:b})),F.createElement(KL,VL({},i,{offset:r,horizontalPoints:y,xAxis:h,yAxis:g})),F.createElement(qL,VL({},i,{offset:r,verticalPoints:b,xAxis:h,yAxis:g}))))}$L.displayName=`CartesianGrid`;var eR=qf({name:`errorBars`,initialState:{},reducers:{addErrorBar:(e,t)=>{var{itemId:n,errorBar:r}=t.payload;e[n]||(e[n]=[]),e[n].push(r)},replaceErrorBar:(e,t)=>{var{itemId:n,prev:r,next:i}=t.payload;e[n]&&(e[n]=e[n].map(e=>e.dataKey===r.dataKey&&e.direction===r.direction?i:e))},removeErrorBar:(e,t)=>{var{itemId:n,errorBar:r}=t.payload;e[n]&&(e[n]=e[n].filter(e=>e.dataKey!==r.dataKey||e.direction!==r.direction))}}}),{addErrorBar:tR,replaceErrorBar:nR,removeErrorBar:rR}=eR.actions,iR=eR.reducer,aR=[`children`];function oR(e,t){if(e==null)return{};var n,r,i=sR(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r({x:0,y:0,value:0}),errorBarOffset:0});function lR(e){var{children:t}=e,n=oR(e,aR);return F.createElement(cR.Provider,{value:n},t)}function uR(e,t){var n=G(t=>sD(t,e)),r=G(e=>uD(e,t)),i=n?.allowDataOverflow??aD.allowDataOverflow,a=r?.allowDataOverflow??cD.allowDataOverflow;return{needClip:i||a,needClipX:i,needClipY:a}}function dR(e){var{xAxisId:t,yAxisId:n,clipPathId:r}=e,i=lI(),{needClipX:a,needClipY:o,needClip:s}=uR(t,n);if(!s||!i)return null;var{x:c,y:l,width:u,height:d}=i;return F.createElement(`clipPath`,{id:`clipPath-${r}`},F.createElement(`rect`,{x:a?c:c-u/2,y:o?l:l-d/2,width:a?u:u*2,height:o?d:d*2}))}var fR=(e,t,n,r)=>lk(e,`xAxis`,t,r),pR=(e,t,n,r)=>ck(e,`xAxis`,t,r),mR=(e,t,n,r)=>lk(e,`yAxis`,n,r),hR=(e,t,n,r)=>ck(e,`yAxis`,n,r),gR=K([X,fR,mR,pR,hR],(e,t,n,r,i)=>Yp(e,`xAxis`)?um(t,r,!1):um(n,i,!1)),_R=(e,t,n,r,i)=>i;function vR(e){return e.type===`line`}var yR=K([X,fR,mR,pR,hR,K([vD,_R],(e,t)=>e.filter(vR).find(e=>e.id===t)),gR,rb],(e,t,n,r,i,a,o,s)=>{var{chartData:c,dataStartIndex:l,dataEndIndex:u}=s;if(!(a==null||t==null||n==null||r==null||i==null||r.length===0||i.length===0||o==null||e!==`horizontal`&&e!==`vertical`)){var{dataKey:d,data:f}=a,p=f!=null&&f.length>0?f:c?.slice(l,u+1);if(p!=null)return qR({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:i,dataKey:d,bandSize:o,displayedData:p})}});function bR(e){var t=Wo(e),n=3,r=2;if(t!=null){var{r:i,strokeWidth:a}=t,o=Number(i),s=Number(a);return(Number.isNaN(o)||o<0)&&(o=n),(Number.isNaN(s)||s<0)&&(s=r),{r:o,strokeWidth:s}}return{r:n,strokeWidth:r}}var xR=[`id`],SR=[`type`,`layout`,`connectNulls`,`needClip`,`shape`],CR=[`activeDot`,`animateNewValues`,`animationBegin`,`animationDuration`,`animationEasing`,`connectNulls`,`dot`,`hide`,`isAnimationActive`,`label`,`legendType`,`xAxisId`,`yAxisId`,`id`];function wR(){return wR=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{dataKey:t,name:n,stroke:r,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:r,value:fm(n,t),payload:e}]},NR=F.memo(e=>{var{dataKey:t,data:n,stroke:r,strokeWidth:i,fill:a,name:o,hide:s,unit:c,tooltipType:l,id:u}=e,d={dataDefinedOnItem:n,getPosition:Xc,settings:{stroke:r,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:fm(o,t),hide:s,type:l,color:r,unit:c,graphicalItemId:u}};return F.createElement(vF,{tooltipEntrySettings:d})}),PR=(e,t)=>`${t}px ${e}px`;function FR(e,t){for(var n=e.length%2==0?e:[...e,0],r=[],i=0;i{var r=n.reduce((e,t)=>e+t,0);if(!r)return PR(t,e);for(var i=Math.floor(e/r),a=e%r,o=[],s=0,c=0;sa){o=[...n.slice(0,s),a-c];break}}var d=o.length%2==0?[0,t]:[t];return[...FR(n,i),...o,...d].map(e=>`${e}px`).join(`, `)};function LR(e){var{clipPathId:t,points:n,props:r}=e,{dot:i,dataKey:a,needClip:o}=r,{id:s}=r,c=Uo(AR(r,xR));return F.createElement(WF,{points:n,dot:i,className:`recharts-line-dots`,dotClassName:`recharts-line-dot`,dataKey:a,baseProps:c,needClip:o,clipPathId:t})}function RR(e){var{showLabels:t,children:n,points:r}=e,i=(0,F.useMemo)(()=>r?.map(e=>{var t={x:e.x??0,y:e.y??0,width:0,lowerWidth:0,upperWidth:0,height:0};return ER(ER({},t),{},{value:e.value,payload:e.payload,viewBox:t,parentViewBox:void 0,fill:void 0})}),[r]);return F.createElement(hP,{value:t?i:void 0},n)}function zR(e){var{clipPathId:t,pathRef:n,points:r,strokeDasharray:i,props:a}=e,{type:o,layout:s,connectNulls:c,needClip:l,shape:u}=a,d=ER(ER({},Go(AR(a,SR))),{},{fill:`none`,className:`recharts-line-curve`,clipPath:l?`url(#clipPath-${t})`:void 0,points:r,type:o,layout:s,connectNulls:c,strokeDasharray:i??a.strokeDasharray});return F.createElement(F.Fragment,null,r?.length>1&&F.createElement(mF,wR({shapeType:`curve`,option:u},d,{pathRef:n})),F.createElement(LR,{points:r,clipPathId:t,props:a}))}function BR(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function VR(e){var{clipPathId:t,props:n,pathRef:r,previousPointsRef:i,longestAnimatedLengthRef:a}=e,{points:o,strokeDasharray:s,isAnimationActive:c,animationBegin:l,animationDuration:u,animationEasing:d,animateNewValues:f,width:p,height:m,onAnimationEnd:h,onAnimationStart:g}=n,_=i.current,v=Yv(o,`recharts-line-`),y=(0,F.useRef)(v),[b,x]=(0,F.useState)(!1),S=!b,C=(0,F.useCallback)(()=>{typeof h==`function`&&h(),x(!1)},[h]),w=(0,F.useCallback)(()=>{typeof g==`function`&&g(),x(!0)},[g]),T=BR(r.current),E=(0,F.useRef)(0);y.current!==v&&(E.current=a.current,y.current=v);var D=E.current;return F.createElement(RR,{points:o,showLabels:S},n.children,F.createElement(Jv,{animationId:v,begin:l,duration:u,isActive:c,easing:d,onAnimationEnd:C,onAnimationStart:w,key:v},e=>{var l=H(D,T+D,e),u=Math.min(l,T),d=c?s?IR(u,T,`${s}`.split(/[,\s]+/gim).map(e=>parseFloat(e))):PR(T,u):s==null?void 0:String(s);if(e>0&&T>0&&(i.current=o,a.current=Math.max(a.current,u)),_){var h=_.length/o.length,g=e===1?o:o.map((t,n)=>{var r=Math.floor(n*h);if(_[r]){var i=_[r];return ER(ER({},t),{},{x:H(i.x,t.x,e),y:H(i.y,t.y,e)})}return f?ER(ER({},t),{},{x:H(p*2,t.x,e),y:H(m/2,t.y,e)}):ER(ER({},t),{},{x:t.x,y:t.y})});return i.current=g,F.createElement(zR,{props:n,points:g,clipPathId:t,pathRef:r,strokeDasharray:d})}return F.createElement(zR,{props:n,points:o,clipPathId:t,pathRef:r,strokeDasharray:d})}),F.createElement(bP,{label:n.label}))}function HR(e){var{clipPathId:t,props:n}=e,r=(0,F.useRef)(null),i=(0,F.useRef)(0),a=(0,F.useRef)(null);return F.createElement(VR,{props:n,clipPathId:t,previousPointsRef:r,longestAnimatedLengthRef:i,pathRef:a})}var UR=(e,t)=>({x:e.x??void 0,y:e.y??void 0,value:e.value,errorVal:Y(e.payload,t)}),WR=class extends F.Component{render(){var{hide:e,dot:t,points:n,className:r,xAxisId:i,yAxisId:a,top:o,left:s,width:c,height:l,id:u,needClip:d,zIndex:f}=this.props;if(e)return null;var p=P(`recharts-line`,r),m=u,{r:h,strokeWidth:g}=bR(t),_=LP(t),v=h*2+g,y=d?`url(#clipPath-${_?``:`dots-`}${m})`:void 0;return F.createElement(Pj,{zIndex:f},F.createElement(ns,{className:p},d&&F.createElement(`defs`,null,F.createElement(dR,{clipPathId:m,xAxisId:i,yAxisId:a}),!_&&F.createElement(`clipPath`,{id:`clipPath-dots-${m}`},F.createElement(`rect`,{x:s-v/2,y:o-v/2,width:c+v,height:l+v}))),F.createElement(lR,{xAxisId:i,yAxisId:a,data:n,dataPointFormatter:UR,errorBarOffset:0},F.createElement(HR,{props:this.props,clipPathId:m}))),F.createElement(_I,{activeDot:this.props.activeDot,points:n,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:y}))}},GR={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:`ease`,connectNulls:!1,dot:!0,fill:`#fff`,hide:!1,isAnimationActive:`auto`,label:!1,legendType:`line`,stroke:`#3182bd`,strokeWidth:1,xAxisId:0,yAxisId:0,zIndex:jb.line,type:`linear`};function KR(e){var t=xl(e,GR),{activeDot:n,animateNewValues:r,animationBegin:i,animationDuration:a,animationEasing:o,connectNulls:s,dot:c,hide:l,isAnimationActive:u,label:d,legendType:f,xAxisId:p,yAxisId:m,id:h}=t,g=AR(t,CR),{needClip:_}=uR(p,m),v=lI(),y=yh(),b=Im(),x=G(e=>yR(e,p,m,b,h));if(y!==`horizontal`&&y!==`vertical`||x==null||v==null)return null;var{height:S,width:C,x:w,y:T}=v;return F.createElement(WR,wR({},g,{id:h,connectNulls:s,dot:c,activeDot:n,animateNewValues:r,animationBegin:i,animationDuration:a,animationEasing:o,isAnimationActive:u,hide:l,label:d,legendType:f,xAxisId:p,yAxisId:m,points:x,layout:y,height:S,width:C,left:w,top:T,needClip:_}))}function qR(e){var{layout:t,xAxis:n,yAxis:r,xAxisTicks:i,yAxisTicks:a,dataKey:o,bandSize:s,displayedData:c}=e;return c.map((e,c)=>{var l=Y(e,o);if(t===`horizontal`)return{x:nm({axis:n,ticks:i,bandSize:s,entry:e,index:c}),y:(U(l)?null:r.scale.map(l))??null,value:l,payload:e};var u=U(l)?null:n.scale.map(l),d=nm({axis:r,ticks:a,bandSize:s,entry:e,index:c});return u==null||d==null?null:{x:u,y:d,value:l,payload:e}}).filter(Boolean)}function JR(e){var t=xl(e,GR),n=Im();return F.createElement(CF,{id:t.id,type:`line`},e=>F.createElement(F.Fragment,null,F.createElement(yF,{legendPayload:MR(t)}),F.createElement(NR,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,tooltipType:t.tooltipType,id:e}),F.createElement(MF,{type:`line`,id:e,data:t.data,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,hide:t.hide,isPanorama:n}),F.createElement(KR,wR({},t,{id:e}))))}var YR=F.memo(JR,Wg);YR.displayName=`Line`;function XR(e,t){return e.graphicalItems.cartesianItems.find(e=>e.id===t)?.xAxisId??0}function ZR(e,t){return e.graphicalItems.cartesianItems.find(e=>e.id===t)?.yAxisId??0}var QR=(e,t,n)=>lk(e,`xAxis`,XR(e,t),n),$R=(e,t,n)=>ck(e,`xAxis`,XR(e,t),n),ez=(e,t,n)=>lk(e,`yAxis`,ZR(e,t),n),tz=(e,t,n)=>ck(e,`yAxis`,ZR(e,t),n),nz=K([X,QR,ez,$R,tz],(e,t,n,r,i)=>Yp(e,`xAxis`)?um(t,r,!1):um(n,i,!1)),rz=K([vD,(e,t)=>t],(e,t)=>e.filter(e=>e.type===`area`).find(e=>e.id===t)),iz=e=>Yp(X(e),`xAxis`)?`yAxis`:`xAxis`,az=(e,t)=>iz(e)===`yAxis`?ZR(e,t):XR(e,t),oz=K([X,QR,ez,$R,tz,K([rz,(e,t,n)=>WD(e,iz(e),az(e,t),n)],(e,t)=>{if(!(e==null||t==null)){var{stackId:n}=e,r=ex(e);if(!(n==null||r==null)){var i=(t[n]?.stackedData)?.find(e=>e.key===r);if(i!=null)return i.map(e=>[e[0],e[1]])}}}),ib,nz,rz,Ab],(e,t,n,r,i,a,o,s,c,l)=>{var{chartData:u,dataStartIndex:d,dataEndIndex:f}=o;if(!(c==null||e!==`horizontal`&&e!==`vertical`||t==null||n==null||r==null||i==null||r.length===0||i.length===0||s==null)){var{data:p}=c,m=p&&p.length>0?p:u?.slice(d,f+1);if(m!=null)return Mz({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:i,dataStartIndex:d,areaSettings:c,stackedData:a,displayedData:m,chartBaseValue:l,bandSize:s})}}),sz=[`id`],cz=[`activeDot`,`animationBegin`,`animationDuration`,`animationEasing`,`connectNulls`,`dot`,`fill`,`fillOpacity`,`hide`,`isAnimationActive`,`legendType`,`stroke`,`xAxisId`,`yAxisId`];function lz(){return lz=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{dataKey:t,name:n,stroke:r,fill:i,legendType:a,hide:o}=e;return[{inactive:o,dataKey:t,type:a,color:_z(r,i),value:fm(n,t),payload:e}]},yz=F.memo(e=>{var{dataKey:t,data:n,stroke:r,strokeWidth:i,fill:a,name:o,hide:s,unit:c,tooltipType:l,id:u}=e,d={dataDefinedOnItem:n,getPosition:Xc,settings:{stroke:r,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:fm(o,t),hide:s,type:l,color:_z(r,a),unit:c,graphicalItemId:u}};return F.createElement(vF,{tooltipEntrySettings:d})});function bz(e){var{clipPathId:t,points:n,props:r}=e,{needClip:i,dot:a,dataKey:o}=r,s=Uo(r);return F.createElement(WF,{points:n,dot:a,className:`recharts-area-dots`,dotClassName:`recharts-area-dot`,dataKey:o,baseProps:s,needClip:i,clipPathId:t})}function xz(e){var{showLabels:t,children:n,points:r}=e,i=r.map(e=>{var t={x:e.x??0,y:e.y??0,width:0,lowerWidth:0,upperWidth:0,height:0};return pz(pz({},t),{},{value:e.value,payload:e.payload,parentViewBox:void 0,viewBox:t,fill:void 0})});return F.createElement(hP,{value:t?i:void 0},n)}function Sz(e){var{points:t,baseLine:n,needClip:r,clipPathId:i,props:a}=e,{layout:o,type:s,stroke:c,connectNulls:l,isRange:u}=a,{id:d}=a,f=uz(a,sz),p=Uo(f),m=Go(f);return F.createElement(F.Fragment,null,t?.length>1&&F.createElement(ns,{clipPath:r?`url(#clipPath-${i})`:void 0},F.createElement(Z_,lz({},m,{id:d,points:t,connectNulls:l,type:s,baseLine:n,layout:o,stroke:`none`,className:`recharts-area-area`})),c!==`none`&&F.createElement(Z_,lz({},p,{className:`recharts-area-curve`,layout:o,type:s,connectNulls:l,fill:`none`,points:t})),c!==`none`&&u&&Array.isArray(n)&&F.createElement(Z_,lz({},p,{className:`recharts-area-curve`,layout:o,type:s,connectNulls:l,fill:`none`,points:n}))),F.createElement(bz,{points:t,props:f,clipPathId:i}))}function Cz(e){var{alpha:t,baseLine:n,points:r,strokeWidth:i}=e,a=r[0]?.y,o=r[r.length-1]?.y;if(!J(a)||!J(o))return null;var s=t*Math.abs(a-o),c=Math.max(...r.map(e=>e.x||0));return V(n)?c=Math.max(n,c):n&&Array.isArray(n)&&n.length&&(c=Math.max(...n.map(e=>e.x||0),c)),V(c)?F.createElement(`rect`,{x:0,y:ae.y||0));return V(n)?c=Math.max(n,c):n&&Array.isArray(n)&&n.length&&(c=Math.max(...n.map(e=>e.y||0),c)),V(c)?F.createElement(`rect`,{x:a({points:o,baseLine:s}),[o,s]),`recharts-area-`),h=bh(),[g,_]=(0,F.useState)(!1),v=!g,y=(0,F.useCallback)(()=>{typeof p==`function`&&p(),_(!1)},[p]),b=(0,F.useCallback)(()=>{typeof f==`function`&&f(),_(!0)},[f]);if(h==null)return null;var x=i.current,S=a.current;return F.createElement(xz,{showLabels:v,points:o},r.children,F.createElement(Jv,{animationId:m,begin:l,duration:u,isActive:c,easing:d,onAnimationEnd:y,onAnimationStart:b,key:m},e=>{if(x){var l=x.length/o.length,u=e===1?o:o.map((t,n)=>{var r=Math.floor(n*l);if(x[r]){var i=x[r];return pz(pz({},t),{},{x:H(i.x,t.x,e),y:H(i.y,t.y,e)})}return t}),d=V(s)?H(S,s,e):U(s)||Bc(s)?H(S,0,e):s.map((t,n)=>{var r=Math.floor(n*l);if(Array.isArray(S)&&S[r]){var i=S[r];return pz(pz({},t),{},{x:H(i.x,t.x,e),y:H(i.y,t.y,e)})}return t});return e>0&&(i.current=u,a.current=d),F.createElement(Sz,{points:u,baseLine:d,needClip:t,clipPathId:n,props:r})}return e>0&&(i.current=o,a.current=s),F.createElement(ns,null,c&&F.createElement(`defs`,null,F.createElement(`clipPath`,{id:`animationClipPath-${n}`},F.createElement(Tz,{alpha:e,points:o,baseLine:s,layout:h,strokeWidth:r.strokeWidth}))),F.createElement(ns,{clipPath:`url(#animationClipPath-${n})`},F.createElement(Sz,{points:o,baseLine:s,needClip:t,clipPathId:n,props:r})))}),F.createElement(bP,{label:r.label}))}function Dz(e){var{needClip:t,clipPathId:n,props:r}=e,i=(0,F.useRef)(null),a=(0,F.useRef)();return F.createElement(Ez,{needClip:t,clipPathId:n,props:r,previousPointsRef:i,previousBaselineRef:a})}var Oz=class extends F.PureComponent{render(){var{hide:e,dot:t,points:n,className:r,top:i,left:a,needClip:o,xAxisId:s,yAxisId:c,width:l,height:u,id:d,baseLine:f,zIndex:p}=this.props;if(e)return null;var m=P(`recharts-area`,r),h=d,{r:g,strokeWidth:_}=bR(t),v=LP(t),y=g*2+_,b=o?`url(#clipPath-${v?``:`dots-`}${h})`:void 0;return F.createElement(Pj,{zIndex:p},F.createElement(ns,{className:m},o&&F.createElement(`defs`,null,F.createElement(dR,{clipPathId:h,xAxisId:s,yAxisId:c}),!v&&F.createElement(`clipPath`,{id:`clipPath-dots-${h}`},F.createElement(`rect`,{x:a-y/2,y:i-y/2,width:l+y,height:u+y}))),F.createElement(Dz,{needClip:o,clipPathId:h,props:this.props})),F.createElement(_I,{points:n,mainColor:_z(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}),this.props.isRange&&Array.isArray(f)&&F.createElement(_I,{points:f,mainColor:_z(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}))}},kz={activeDot:!0,animationBegin:0,animationDuration:1500,animationEasing:`ease`,connectNulls:!1,dot:!1,fill:`#3182bd`,fillOpacity:.6,hide:!1,isAnimationActive:`auto`,legendType:`line`,stroke:`#3182bd`,strokeWidth:1,type:`linear`,label:!1,xAxisId:0,yAxisId:0,zIndex:jb.area};function Az(e){var{activeDot:t,animationBegin:n,animationDuration:r,animationEasing:i,connectNulls:a,dot:o,fill:s,fillOpacity:c,hide:l,isAnimationActive:u,legendType:d,stroke:f,xAxisId:p,yAxisId:m}=e,h=uz(e,cz),g=yh(),_=tj(),{needClip:v}=uR(p,m),y=Im(),{points:b,isRange:x,baseLine:S}=G(t=>oz(t,e.id,y))??{},C=lI();if(g!==`horizontal`&&g!==`vertical`||C==null||_!==`AreaChart`&&_!==`ComposedChart`)return null;var{height:w,width:T,x:E,y:D}=C;return!b||!b.length?null:F.createElement(Oz,lz({},h,{activeDot:t,animationBegin:n,animationDuration:r,animationEasing:i,baseLine:S,connectNulls:a,dot:o,fill:s,fillOpacity:c,height:w,hide:l,layout:g,isAnimationActive:u,isRange:x,legendType:d,needClip:v,points:b,stroke:f,width:T,left:E,top:D,xAxisId:p,yAxisId:m}))}var jz=(e,t,n,r,i)=>{var a=n??t;if(V(a))return a;var o=e===`horizontal`?i:r,s=o.scale.domain();if(o.type===`number`){var c=Math.max(s[0],s[1]),l=Math.min(s[0],s[1]);return a===`dataMin`?l:a===`dataMax`||c<0?c:Math.max(Math.min(s[0],s[1]),0)}return a===`dataMin`?s[0]:a===`dataMax`?s[1]:s[0]};function Mz(e){var{areaSettings:{connectNulls:t,baseValue:n,dataKey:r},stackedData:i,layout:a,chartBaseValue:o,xAxis:s,yAxis:c,displayedData:l,dataStartIndex:u,xAxisTicks:d,yAxisTicks:f,bandSize:p}=e,m=i&&i.length,h=jz(a,o,n,s,c),g=a===`horizontal`,_=!1,v=l.map((e,n)=>{var a;if(m)a=i[u+n];else{var o=Y(e,r);Array.isArray(o)?(a=o,_=!0):a=[h,o]}var l=a?.[1]??null,v=l==null||m&&!t&&Y(e,r)==null;return g?{x:nm({axis:s,ticks:d,bandSize:p,entry:e,index:n}),y:v?null:c.scale.map(l)??null,value:a,payload:e}:{x:v?null:s.scale.map(l)??null,y:nm({axis:c,ticks:f,bandSize:p,entry:e,index:n}),value:a,payload:e}});return{points:v,baseLine:(m||_?v.map(e=>{var t=Array.isArray(e.value)?e.value[0]:null;return g?{x:e.x,y:t!=null&&e.y!=null?c.scale.map(t)??null:null,payload:e.payload}:{x:t==null?null:s.scale.map(t)??null,y:e.y,payload:e.payload}}):g?c.scale.map(h):s.scale.map(h))??0,isRange:_}}function Nz(e){var t=xl(e,kz),n=Im();return F.createElement(CF,{id:t.id,type:`area`},e=>F.createElement(F.Fragment,null,F.createElement(yF,{legendPayload:vz(t)}),F.createElement(yz,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,tooltipType:t.tooltipType,id:e}),F.createElement(MF,{type:`area`,id:e,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:tm(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:n,connectNulls:t.connectNulls}),F.createElement(Az,lz({},t,{id:e}))))}var Pz=F.memo(Nz,Wg);Pz.displayName=`Area`;var Fz=!0,Iz=`Invariant failed`;function Lz(e,t){if(!e){if(Fz)throw Error(Iz);var n=typeof t==`function`?t():t,r=n?`${Iz}: ${n}`:Iz;throw Error(r)}}function Rz(){return Rz=Object.assign?Object.assign.bind():function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:0;return(n,r)=>{if(V(e))return e;var i=V(n)||U(n);return i?e(n,r):(!i&&Lz(!1,`minPointSize callback function received a value with type of ${typeof n}. Currently only numbers or null/undefined are supported.`),t)}},Vz=(e,t,n)=>n,Hz=K([vD,(e,t)=>t],(e,t)=>e.filter(e=>e.type===`bar`).find(e=>e.id===t)),Uz=K([Hz],e=>e?.maxBarSize),Wz=(e,t,n,r)=>r,Gz=K([X,vD,XR,ZR,Vz],(e,t,n,r,i)=>t.filter(t=>e===`horizontal`?t.xAxisId===n:t.yAxisId===r).filter(e=>e.isPanorama===i).filter(e=>e.hide===!1).filter(e=>e.type===`bar`)),Kz=(e,t,n)=>{var r=X(e),i=XR(e,t),a=ZR(e,t);if(!(i==null||a==null))return r===`horizontal`?WD(e,`yAxis`,a,n):WD(e,`xAxis`,i,n)},qz=K([Gz,Cb,(e,t)=>{var n=X(e),r=XR(e,t),i=ZR(e,t);if(!(r==null||i==null))return n===`horizontal`?rk(e,`xAxis`,r):rk(e,`yAxis`,i)}],yI),Jz=(e,t,n)=>{var r=Hz(e,t);if(r==null)return 0;var i=XR(e,t),a=ZR(e,t);if(i==null||a==null)return 0;var o=X(e),s=bb(e),{maxBarSize:c}=r,l=U(c)?s:c,u,d;return o===`horizontal`?(u=lk(e,`xAxis`,i,n),d=ck(e,`xAxis`,i,n)):(u=lk(e,`yAxis`,a,n),d=ck(e,`yAxis`,a,n)),um(u,d,!0)??l??0},Yz=(e,t,n)=>{var r=X(e),i=XR(e,t),a=ZR(e,t);if(!(i==null||a==null)){var o,s;return r===`horizontal`?(o=lk(e,`xAxis`,i,n),s=ck(e,`xAxis`,i,n)):(o=lk(e,`yAxis`,a,n),s=ck(e,`yAxis`,a,n)),um(o,s)}},Xz=K([Mm,Pm,(e,t,n)=>{var r=XR(e,t);if(r!=null)return lk(e,`xAxis`,r,n)},(e,t,n)=>{var r=ZR(e,t);if(r!=null)return lk(e,`yAxis`,r,n)},(e,t,n)=>{var r=XR(e,t);if(r!=null)return ck(e,`xAxis`,r,n)},(e,t,n)=>{var r=ZR(e,t);if(r!=null)return ck(e,`yAxis`,r,n)},K([K([qz,bb,xb,Sb,Jz,Yz,Uz],EI),Hz],OI),X,ib,Yz,K([Kz,Hz],DI),Hz,Wz],(e,t,n,r,i,a,o,s,c,l,u,d,f)=>{var{chartData:p,dataStartIndex:m,dataEndIndex:h}=c;if(!(d==null||o==null||t==null||s!==`horizontal`&&s!==`vertical`||n==null||r==null||i==null||a==null||l==null)){var{data:g}=d,_=g!=null&&g.length>0?g:p?.slice(m,h+1);if(_!=null)return MB({layout:s,barSettings:d,pos:o,parentViewBox:t,bandSize:l,xAxis:n,yAxis:r,xAxisTicks:i,yAxisTicks:a,stackedData:u,displayedData:_,offset:e,cells:f,dataStartIndex:m})}}),Zz=[`index`];function Qz(){return Qz=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var t=(0,F.useContext)(tB);if(t!=null)return t.stackId;if(e!=null)return tm(e)},rB=(e,t)=>`recharts-bar-stack-clip-path-${e}-${t}`,iB=e=>{var t=(0,F.useContext)(tB);if(t!=null){var{stackId:n}=t;return`url(#${rB(n,e)})`}},aB=e=>{var{index:t}=e,n=$z(e,Zz),r=iB(t);return F.createElement(ns,Qz({className:`recharts-bar-stack-layer`,clipPath:r},n))},oB=[`onMouseEnter`,`onMouseLeave`,`onClick`],sB=[`value`,`background`,`tooltipPosition`],cB=[`id`],lB=[`onMouseEnter`,`onClick`,`onMouseLeave`];function uB(){return uB=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{dataKey:t,name:n,fill:r,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:r,value:fm(n,t),payload:e}]},yB=F.memo(e=>{var{dataKey:t,stroke:n,strokeWidth:r,fill:i,name:a,hide:o,unit:s,tooltipType:c,id:l}=e,u={dataDefinedOnItem:void 0,getPosition:Xc,settings:{stroke:n,strokeWidth:r,fill:i,dataKey:t,nameKey:void 0,name:fm(a,t),hide:o,type:c,color:i,unit:s,graphicalItemId:l}};return F.createElement(vF,{tooltipEntrySettings:u})});function bB(e){var t=G(jA),{data:n,dataKey:r,background:i,allOtherBarProps:a}=e,{onMouseEnter:o,onMouseLeave:s,onClick:c}=a,l=gB(a,oB),u=hF(o,r,a.id),d=gF(s),f=_F(c,r,a.id);if(!i||n==null)return null;var p=Wo(i);return F.createElement(Pj,{zIndex:kI(i,jb.barBackground)},n.map((e,n)=>{var{value:a,background:o,tooltipPosition:s}=e,c=gB(e,sB);if(!o)return null;var m=u(e,n),h=d(e,n),g=f(e,n),_=fB(fB(fB(fB(fB({option:i,isActive:String(n)===t},c),{},{fill:`#eee`},o),p),hl(l,e,n)),{},{onMouseEnter:m,onMouseLeave:h,onClick:g,dataKey:r,index:n,className:`recharts-bar-background-rectangle`});return F.createElement(zz,uB({key:`background-bar-${n}`},_))}))}function xB(e){var{showLabels:t,children:n,rects:r}=e,i=r?.map(e=>{var t={x:e.x,y:e.y,width:e.width,lowerWidth:e.width,upperWidth:e.width,height:e.height};return fB(fB({},t),{},{value:e.value,payload:e.payload,parentViewBox:e.parentViewBox,viewBox:t,fill:e.fill})});return F.createElement(hP,{value:t?i:void 0},n)}function SB(e){var{shape:t,activeBar:n,baseProps:r,entry:i,index:a,dataKey:o}=e,s=G(jA),c=G(NA),l=n&&String(i.originalDataIndex)===s&&(c==null||o===c),[u,d]=(0,F.useState)(!1),[f,p]=(0,F.useState)(!1);(0,F.useEffect)(()=>{var e;return l?(d(!0),e=requestAnimationFrame(()=>{p(!0)})):p(!1),()=>{cancelAnimationFrame(e)}},[l]);var m=(0,F.useCallback)(()=>{l||d(!1)},[l]),h=l&&f,g=l||u,_=l?n===!0?t:n:t,v=F.createElement(zz,uB({},r,{name:String(r.name)},i,{isActive:h,option:_,index:a,dataKey:o,onTransitionEnd:m}));return g?F.createElement(Pj,{zIndex:jb.activeBar},F.createElement(aB,{index:i.originalDataIndex},v)):v}function CB(e){var{shape:t,baseProps:n,entry:r,index:i,dataKey:a}=e;return F.createElement(zz,uB({},n,{name:String(n.name)},r,{isActive:!1,option:t,index:i,dataKey:a}))}function wB(e){var{data:t,props:n}=e,r=Uo(n)??{},{id:i}=r,a=gB(r,cB),{shape:o,dataKey:s,activeBar:c}=n,{onMouseEnter:l,onClick:u,onMouseLeave:d}=n,f=gB(n,lB),p=hF(l,s,i),m=gF(d),h=_F(u,s,i);return t?F.createElement(F.Fragment,null,t.map((e,t)=>F.createElement(aB,uB({index:e.originalDataIndex,key:`rectangle-${e?.x}-${e?.y}-${e?.value}-${t}`,className:`recharts-bar-rectangle`},hl(f,e,t),{onMouseEnter:p(e,t),onMouseLeave:m(e,t),onClick:h(e,t)}),c?F.createElement(SB,{shape:o,activeBar:c,baseProps:a,entry:e,index:t,dataKey:s}):F.createElement(CB,{shape:o,baseProps:a,entry:e,index:t,dataKey:s})))):null}function TB(e){var{props:t,previousRectanglesRef:n}=e,{data:r,layout:i,isAnimationActive:a,animationBegin:o,animationDuration:s,animationEasing:c,onAnimationEnd:l,onAnimationStart:u}=t,d=n.current,f=Yv(t,`recharts-bar-`),[p,m]=(0,F.useState)(!1),h=!p,g=(0,F.useCallback)(()=>{typeof l==`function`&&l(),m(!1)},[l]),_=(0,F.useCallback)(()=>{typeof u==`function`&&u(),m(!0)},[u]);return F.createElement(xB,{showLabels:h,rects:r},F.createElement(Jv,{animationId:f,begin:o,duration:s,isActive:a,easing:c,onAnimationEnd:g,onAnimationStart:_,key:f},e=>{var a=e===1?r:r?.map((t,n)=>{var r=d&&d[n];if(r)return fB(fB({},t),{},{x:H(r.x,t.x,e),y:H(r.y,t.y,e),width:H(r.width,t.width,e),height:H(r.height,t.height,e)});if(i===`horizontal`){var a=H(0,t.height,e),o=H(t.stackedBarStart,t.y,e);return fB(fB({},t),{},{y:o,height:a})}var s=H(0,t.width,e),c=H(t.stackedBarStart,t.x,e);return fB(fB({},t),{},{width:s,x:c})});return e>0&&(n.current=a??null),a==null?null:F.createElement(ns,null,F.createElement(wB,{props:t,data:a}))}),F.createElement(bP,{label:t.label}),t.children)}function EB(e){var t=(0,F.useRef)(null);return F.createElement(TB,{previousRectanglesRef:t,props:e})}var DB=0,OB=(e,t)=>{var n=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:n,errorVal:Y(e,t)}},kB=class extends F.PureComponent{render(){var{hide:e,data:t,dataKey:n,className:r,xAxisId:i,yAxisId:a,needClip:o,background:s,id:c}=this.props;if(e||t==null)return null;var l=P(`recharts-bar`,r),u=c;return F.createElement(ns,{className:l,id:c},o&&F.createElement(`defs`,null,F.createElement(dR,{clipPathId:u,xAxisId:i,yAxisId:a})),F.createElement(ns,{className:`recharts-bar-rectangles`,clipPath:o?`url(#clipPath-${u})`:void 0},F.createElement(bB,{data:t,dataKey:n,background:s,allOtherBarProps:this.props}),F.createElement(EB,this.props)))}},AB={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:`ease`,background:!1,hide:!1,isAnimationActive:`auto`,label:!1,legendType:`rect`,minPointSize:DB,xAxisId:0,yAxisId:0,zIndex:jb.bar};function jB(e){var{xAxisId:t,yAxisId:n,hide:r,legendType:i,minPointSize:a,activeBar:o,animationBegin:s,animationDuration:c,animationEasing:l,isAnimationActive:u}=e,{needClip:d}=uR(t,n),f=yh(),p=Im(),m=IP(e.children,OM),h=G(t=>Xz(t,e.id,p,m));if(f!==`vertical`&&f!==`horizontal`)return null;var g,_=h?.[0];return g=_==null||_.height==null||_.width==null?0:f===`vertical`?_.height/2:_.width/2,F.createElement(lR,{xAxisId:t,yAxisId:n,data:h,dataPointFormatter:OB,errorBarOffset:g},F.createElement(kB,uB({},e,{layout:f,needClip:d,data:h,xAxisId:t,yAxisId:n,hide:r,legendType:i,minPointSize:a,activeBar:o,animationBegin:s,animationDuration:c,animationEasing:l,isAnimationActive:u})))}function MB(e){var{layout:t,barSettings:{dataKey:n,minPointSize:r,hasCustomShape:i},pos:a,bandSize:o,xAxis:s,yAxis:c,xAxisTicks:l,yAxisTicks:u,stackedData:d,displayedData:f,offset:p,cells:m,parentViewBox:h,dataStartIndex:g}=e,_=t===`horizontal`?c:s,v=d?_.scale.domain():null,y=im({numericAxis:_}),b=_.scale.map(y);return f.map((e,f)=>{var _,x,S,C,w,T;if(d){var E=d[f+g];if(E==null)return null;_=Qp(E,v)}else _=Y(e,n),Array.isArray(_)||(_=[y,_]);var D=Bz(r,DB)(_[1],f);if(t===`horizontal`){var O=c.scale.map(_[0]),k=c.scale.map(_[1]);if(O==null||k==null)return null;x=rm({axis:s,ticks:l,bandSize:o,offset:a.offset,entry:e,index:f}),S=k??O??void 0,C=a.size;var ee=O-k;if(w=Bc(ee)?0:ee,T={x,y:p.top,width:C,height:p.height},Math.abs(D)>0&&Math.abs(w)0&&Math.abs(C)F.createElement(F.Fragment,null,F.createElement(yF,{legendPayload:vB(t)}),F.createElement(yB,{dataKey:t.dataKey,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,tooltipType:t.tooltipType,id:e}),F.createElement(MF,{type:`bar`,id:e,data:void 0,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,stackId:n,hide:t.hide,barSize:t.barSize,minPointSize:t.minPointSize,maxBarSize:t.maxBarSize,isPanorama:r,hasCustomShape:t.shape!=null}),F.createElement(Pj,{zIndex:t.zIndex},F.createElement(jB,uB({},t,{id:e})))))}var PB=F.memo(NB,Wg);PB.displayName=`Bar`;var FB=[`domain`,`range`],IB=[`domain`,`range`];function LB(e,t){if(e==null)return{};var n,r,i=RB(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{if(o!=null)return KB(KB({},a),{},{type:o})},[a,o]);return(0,F.useLayoutEffect)(()=>{s!=null&&(n.current===null?t(ZF(s)):n.current!==s&&t(QF({prev:n.current,next:s})),n.current=s)},[s,t]),(0,F.useLayoutEffect)(()=>()=>{n.current&&=(t($F(n.current)),null)},[t]),null}var $B=e=>{var{xAxisId:t,className:n}=e,r=G(Pm),i=Im(),a=`xAxis`,o=G(e=>sk(e,a,t,i)),s=G(e=>YO(e,t)),c=G(e=>ek(e,t)),l=G(e=>oD(e,t));if(s==null||c==null||l==null)return null;var{dangerouslySetInnerHTML:u,ticks:d,scale:f}=e,p=XB(e,HB),{id:m,scale:h}=l,g=XB(l,UB);return F.createElement(jL,WB({},p,g,{x:c.x,y:c.y,width:s.width,height:s.height,className:P(`recharts-${a} ${a}`,n),viewBox:r,ticks:o,axisType:a,axisId:t}))},eV={allowDataOverflow:aD.allowDataOverflow,allowDecimals:aD.allowDecimals,allowDuplicatedCategory:aD.allowDuplicatedCategory,angle:aD.angle,axisLine:SL.axisLine,height:aD.height,hide:!1,includeHidden:aD.includeHidden,interval:aD.interval,label:!1,minTickGap:aD.minTickGap,mirror:aD.mirror,orientation:aD.orientation,padding:aD.padding,reversed:aD.reversed,scale:aD.scale,tick:aD.tick,tickCount:aD.tickCount,tickLine:SL.tickLine,tickSize:SL.tickSize,type:aD.type,niceTicks:aD.niceTicks,xAxisId:0},tV=F.memo(e=>{var t=xl(e,eV);return F.createElement(F.Fragment,null,F.createElement(QB,{allowDataOverflow:t.allowDataOverflow,allowDecimals:t.allowDecimals,allowDuplicatedCategory:t.allowDuplicatedCategory,angle:t.angle,dataKey:t.dataKey,domain:t.domain,height:t.height,hide:t.hide,id:t.xAxisId,includeHidden:t.includeHidden,interval:t.interval,minTickGap:t.minTickGap,mirror:t.mirror,name:t.name,orientation:t.orientation,padding:t.padding,reversed:t.reversed,scale:t.scale,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,niceTicks:t.niceTicks}),F.createElement($B,t))},BB);tV.displayName=`XAxis`;var nV=[`type`],rV=[`dangerouslySetInnerHTML`,`ticks`,`scale`],iV=[`id`,`scale`];function aV(){return aV=Object.assign?Object.assign.bind():function(e){for(var t=1;t{if(o!=null)return sV(sV({},a),{},{type:o})},[o,a]);return(0,F.useLayoutEffect)(()=>{s!=null&&(n.current===null?t(eI(s)):n.current!==s&&t(tI({prev:n.current,next:s})),n.current=s)},[s,t]),(0,F.useLayoutEffect)(()=>()=>{n.current&&=(t(nI(n.current)),null)},[t]),null}function mV(e){var{yAxisId:t,className:n,width:r,label:i}=e,a=(0,F.useRef)(null),o=(0,F.useRef)(null),s=G(Pm),c=Im(),l=W(),u=`yAxis`,d=G(e=>nk(e,t)),f=G(e=>tk(e,t)),p=G(e=>sk(e,u,t,c)),m=G(e=>lD(e,t));if((0,F.useLayoutEffect)(()=>{if(!(r!==`auto`||!d||QN(i)||(0,F.isValidElement)(i)||m==null)){var e=a.current;if(e){var n=e.getCalculatedWidth();Math.round(d.width)!==Math.round(n)&&l(oI({id:t,width:n}))}}},[p,d,l,i,t,r,m]),d==null||f==null||m==null)return null;var{dangerouslySetInnerHTML:h,ticks:g,scale:_}=e,v=dV(e,rV),{id:y,scale:b}=m,x=dV(m,iV);return F.createElement(jL,aV({},v,x,{ref:a,labelRef:o,x:f.x,y:f.y,tickTextProps:r===`auto`?{width:void 0}:{width:r},width:d.width,height:d.height,className:P(`recharts-${u} ${u}`,n),viewBox:s,ticks:p,axisType:u,axisId:t}))}var hV={allowDataOverflow:cD.allowDataOverflow,allowDecimals:cD.allowDecimals,allowDuplicatedCategory:cD.allowDuplicatedCategory,angle:cD.angle,axisLine:SL.axisLine,hide:!1,includeHidden:cD.includeHidden,interval:cD.interval,label:!1,minTickGap:cD.minTickGap,mirror:cD.mirror,orientation:cD.orientation,padding:cD.padding,reversed:cD.reversed,scale:cD.scale,tick:cD.tick,tickCount:cD.tickCount,tickLine:SL.tickLine,tickSize:SL.tickSize,type:cD.type,niceTicks:cD.niceTicks,width:cD.width,yAxisId:0},gV=F.memo(e=>{var t=xl(e,hV);return F.createElement(F.Fragment,null,F.createElement(pV,{interval:t.interval,id:t.yAxisId,scale:t.scale,type:t.type,domain:t.domain,allowDataOverflow:t.allowDataOverflow,dataKey:t.dataKey,allowDuplicatedCategory:t.allowDuplicatedCategory,allowDecimals:t.allowDecimals,tickCount:t.tickCount,padding:t.padding,includeHidden:t.includeHidden,reversed:t.reversed,ticks:t.ticks,width:t.width,orientation:t.orientation,mirror:t.mirror,hide:t.hide,unit:t.unit,name:t.name,angle:t.angle,minTickGap:t.minTickGap,tick:t.tick,tickFormatter:t.tickFormatter,niceTicks:t.niceTicks}),F.createElement(mV,t))},BB);gV.displayName=`YAxis`;var _V=K([(e,t)=>t,X,Zb,ox,wA,EA,aj,Mm],_j);function vV(e){return`getBBox`in e.currentTarget&&typeof e.currentTarget.getBBox==`function`}function yV(e){var t=e.currentTarget.getBoundingClientRect(),n,r;if(vV(e)){var i=e.currentTarget.getBBox();n=i.width>0?t.width/i.width:1,r=i.height>0?t.height/i.height:1}else{var a=e.currentTarget;n=a.offsetWidth>0?t.width/a.offsetWidth:1,r=a.offsetHeight>0?t.height/a.offsetHeight:1}var o=(e,i)=>({relativeX:Math.round((e-t.left)/n),relativeY:Math.round((i-t.top)/r)});return`touches`in e?Array.from(e.touches).map(e=>o(e.clientX,e.clientY)):o(e.clientX,e.clientY)}var bV=Df(`mouseClick`),xV=Np();xV.startListening({actionCreator:bV,effect:(e,t)=>{var n=e.payload,r=_V(t.getState(),yV(n));r?.activeIndex!=null&&t.dispatch(kk({activeIndex:r.activeIndex,activeDataKey:void 0,activeCoordinate:r.activeCoordinate}))}});var SV=Df(`mouseMove`),CV=Np(),wV=null,TV=null,EV=null;CV.startListening({actionCreator:SV,effect:(e,t)=>{var n=e.payload,{throttleDelay:r,throttledEvents:i}=t.getState().eventSettings,a=i===`all`||i?.includes(`mousemove`);wV!==null&&(cancelAnimationFrame(wV),wV=null),TV!==null&&(typeof r!=`number`||!a)&&(clearTimeout(TV),TV=null),EV=yV(n);var o=()=>{var e=t.getState(),n=mk(e,e.tooltip.settings.shared);if(!EV){wV=null,TV=null;return}if(n===`axis`){var r=_V(e,EV);r?.activeIndex==null?t.dispatch(Ek()):t.dispatch(Ok({activeIndex:r.activeIndex,activeDataKey:void 0,activeCoordinate:r.activeCoordinate}))}wV=null,TV=null};if(!a){o();return}r===`raf`?wV=requestAnimationFrame(o):typeof r==`number`&&TV===null&&(TV=setTimeout(o,r))}});function DV(e,t){return t instanceof HTMLElement?`HTMLElement <${t.tagName} class="${t.className}">`:t===window?`global.window`:e===`children`&&typeof t==`object`&&t?`<>`:t}var OV={accessibilityLayer:!0,barCategoryGap:`10%`,barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:`none`,syncId:void 0,syncMethod:`index`,baseValue:void 0,reverseStackOrder:!1},kV=qf({name:`rootProps`,initialState:OV,reducers:{updateOptions:(e,t)=>{e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=t.payload.barGap??OV.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className,e.baseValue=t.payload.baseValue,e.reverseStackOrder=t.payload.reverseStackOrder}}}),AV=kV.reducer,{updateOptions:jV}=kV.actions,MV=qf({name:`polarOptions`,initialState:null,reducers:{updatePolarOptions:(e,t)=>e===null?t.payload:(e.startAngle=t.payload.startAngle,e.endAngle=t.payload.endAngle,e.cx=t.payload.cx,e.cy=t.payload.cy,e.innerRadius=t.payload.innerRadius,e.outerRadius=t.payload.outerRadius,e)}}),{updatePolarOptions:NV}=MV.actions,PV=MV.reducer,FV=Df(`keyDown`),IV=Df(`focus`),LV=Df(`blur`),RV=Np(),zV=null,BV=null,VV=null;RV.startListening({actionCreator:FV,effect:(e,t)=>{VV=e.payload,zV!==null&&(cancelAnimationFrame(zV),zV=null);var{throttleDelay:n,throttledEvents:r}=t.getState().eventSettings,i=r===`all`||r.includes(`keydown`);BV!==null&&(typeof n!=`number`||!i)&&(clearTimeout(BV),BV=null);var a=()=>{try{var e=t.getState();if(e.rootProps.accessibilityLayer===!1)return;var{keyboardInteraction:n}=e.tooltip,r=VV;if(r!==`ArrowRight`&&r!==`ArrowLeft`&&r!==`Enter`)return;var i=Wk(n,fA(e),VD(e),xA(e)),a=i==null?-1:Number(i),o=!Number.isFinite(a)||a<0,s=EA(e),c=fA(e),l=mk(e,e.tooltip.settings.shared);if(r===`Enter`){if(o)return;var u=uj(e,l,`hover`,String(n.index));t.dispatch(jk({active:!n.active,activeIndex:n.index,activeCoordinate:u}));return}var d=uk(e)===`left-to-right`?1:-1,f=r===`ArrowRight`?1:-1,p;if(o){var m=VD(e),h=xA(e),g=f*d,_=e=>({active:!1,index:String(e),dataKey:void 0,graphicalItemId:void 0,coordinate:void 0});if(p=-1,g>0){for(var v=0;v=0;y--)if(Wk(_(y),c,m,h)!=null){p=y;break}if(p<0)return}else{p=a+f*d;var b=s?.length||c.length;if(b===0||p>=b||p<0)return}var x=uj(e,l,`hover`,String(p));t.dispatch(jk({active:!0,activeIndex:p.toString(),activeCoordinate:x}))}finally{zV=null,BV=null}};if(!i){a();return}n===`raf`?zV=requestAnimationFrame(a):typeof n==`number`&&BV===null&&(a(),VV=null,BV=setTimeout(()=>{VV?a():(BV=null,zV=null)},n))}}),RV.startListening({actionCreator:IV,effect:(e,t)=>{var n=t.getState();if(n.rootProps.accessibilityLayer!==!1){var{keyboardInteraction:r}=n.tooltip;if(!r.active&&r.index==null){var i=`0`,a=uj(n,mk(n,n.tooltip.settings.shared),`hover`,String(i));t.dispatch(jk({active:!0,activeIndex:i,activeCoordinate:a}))}}}}),RV.startListening({actionCreator:LV,effect:(e,t)=>{var n=t.getState();if(n.rootProps.accessibilityLayer!==!1){var{keyboardInteraction:r}=n.tooltip;r.active&&t.dispatch(jk({active:!1,activeIndex:r.index,activeCoordinate:r.coordinate}))}}});function HV(e){e.persist();var{currentTarget:t}=e;return new Proxy(e,{get:(e,n)=>{if(n===`currentTarget`)return t;var r=Reflect.get(e,n);return typeof r==`function`?r.bind(e):r}})}var UV=Df(`externalEvent`),WV=Np(),GV=new Map,KV=new Map,qV=new Map;WV.startListening({actionCreator:UV,effect:(e,t)=>{var{handler:n,reactEvent:r}=e.payload;if(n!=null){var i=r.type,a=HV(r);qV.set(i,{handler:n,reactEvent:a});var o=GV.get(i);o!==void 0&&(cancelAnimationFrame(o),GV.delete(i));var{throttleDelay:s,throttledEvents:c}=t.getState().eventSettings,l=c,u=l===`all`||l?.includes(i),d=KV.get(i);d!==void 0&&(typeof s!=`number`||!u)&&(clearTimeout(d),KV.delete(i));var f=()=>{var e=qV.get(i);try{if(!e)return;var{handler:n,reactEvent:r}=e,a=t.getState(),o={activeCoordinate:IA(a),activeDataKey:NA(a),activeIndex:jA(a),activeLabel:MA(a),activeTooltipIndex:jA(a),isTooltipActive:LA(a)};n&&n(o,r)}finally{GV.delete(i),KV.delete(i),qV.delete(i)}};if(!u){f();return}if(s===`raf`){var p=requestAnimationFrame(f);GV.set(i,p)}else if(typeof s==`number`){if(!KV.has(i)){f();var m=setTimeout(f,s);KV.set(i,m)}}else f()}}});var JV=K([K([Jk],e=>e.tooltipItemPayloads),(e,t)=>t,(e,t,n)=>n],(e,t,n)=>{if(t!=null){var r=e.find(e=>e.settings.graphicalItemId===n);if(r!=null){var{getPosition:i}=r;if(i!=null)return i(t)}}}),YV=Df(`touchMove`),XV=Np(),ZV=null,QV=null,$V=null,eH=null;XV.startListening({actionCreator:YV,effect:(e,t)=>{var n=e.payload;if(!(n.touches==null||n.touches.length===0)){eH=HV(n);var{throttleDelay:r,throttledEvents:i}=t.getState().eventSettings,a=i===`all`||i.includes(`touchmove`);ZV!==null&&(cancelAnimationFrame(ZV),ZV=null),QV!==null&&(typeof r!=`number`||!a)&&(clearTimeout(QV),QV=null),$V=Array.from(n.touches).map(e=>yV({clientX:e.clientX,clientY:e.clientY,currentTarget:n.currentTarget}));var o=()=>{if(eH!=null){var e=t.getState(),n=mk(e,e.tooltip.settings.shared);if(n===`axis`){var r=$V?.[0];if(r==null){ZV=null,QV=null;return}var i=_V(e,r);i?.activeIndex!=null&&t.dispatch(Ok({activeIndex:i.activeIndex,activeDataKey:void 0,activeCoordinate:i.activeCoordinate}))}else if(n===`item`){var a=eH.touches[0];if(document.elementFromPoint==null||a==null)return;var o=document.elementFromPoint(a.clientX,a.clientY);if(!o||!o.getAttribute)return;var s=o.getAttribute(xm),c=o.getAttribute(`data-recharts-item-id`)??void 0,l=cA(e).find(e=>e.id===c);if(s==null||l==null||c==null)return;var{dataKey:u}=l,d=JV(e,s,c);t.dispatch(wk({activeDataKey:u,activeIndex:s,activeCoordinate:d,activeGraphicalItemId:c}))}ZV=null,QV=null}};if(!a){o();return}r===`raf`?ZV=requestAnimationFrame(o):typeof r==`number`&&QV===null&&(o(),eH=null,QV=setTimeout(()=>{eH?o():(QV=null,ZV=null)},r))}}});var tH={throttleDelay:`raf`,throttledEvents:[`mousemove`,`touchmove`,`pointermove`,`scroll`,`wheel`]},nH=qf({name:`eventSettings`,initialState:tH,reducers:{setEventSettings:(e,t)=>{t.payload.throttleDelay!=null&&(e.throttleDelay=t.payload.throttleDelay),t.payload.throttledEvents!=null&&(e.throttledEvents=Z(t.payload.throttledEvents))}}}),{setEventSettings:rH}=nH.actions,iH=nH.reducer,aH=Zu({brush:PI,cartesianAxis:sI,chartData:aM,errorBars:iR,eventSettings:iH,graphicalItems:jF,layout:Bp,legend:Tg,options:Qj,polarAxis:OP,polarOptions:PV,referenceElements:WI,renderedTicks:fL,rootProps:AV,tooltip:Mk,zIndex:Nj}),oH=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`Chart`;return Lf({reducer:aH,preloadedState:e,middleware:e=>e({serializableCheck:!1,immutableCheck:![`commonjs`,`es6`,`production`].includes(`es6`)}).concat([xV.middleware,CV.middleware,RV.middleware,WV.middleware,XV.middleware]),enhancers:e=>{var t=e;return typeof e==`function`&&(t=e()),t.concat(Ff({type:`raf`}))},devTools:E_.devToolsEnabled&&{serialize:{replacer:DV},name:`recharts-${t}`}})};function sH(e){var{preloadedState:t,children:n,reduxStoreName:r}=e,i=Im(),a=(0,F.useRef)(null);if(i)return n;a.current??=oH(t,r);var o=uu;return F.createElement(Vg,{context:o,store:a.current},n)}function cH(e){var{layout:t,margin:n}=e,r=W(),i=Im();return(0,F.useEffect)(()=>{i||(r(Lp(t)),r(Ip(n)))},[r,i,t,n]),null}var lH=(0,F.memo)(cH,Wg);function uH(e){var t=W();return(0,F.useEffect)(()=>{t(jV(e))},[t,e]),null}var dH=(0,F.memo)(e=>{var t=W();return(0,F.useEffect)(()=>{t(rH(e))},[t,e]),null},Wg);function fH(e){var{zIndex:t,isPanorama:n}=e,r=(0,F.useRef)(null),i=W();return(0,F.useLayoutEffect)(()=>(r.current&&i(jj({zIndex:t,element:r.current,isPanorama:n})),()=>{i(Mj({zIndex:t,isPanorama:n}))}),[i,t,n]),F.createElement(`g`,{tabIndex:-1,ref:r,className:`recharts-zIndex-layer_${t}`})}function pH(e){var{children:t,isPanorama:n}=e,r=G(yj);if(!r||r.length===0)return t;var i=r.filter(e=>e<0),a=r.filter(e=>e>0);return F.createElement(F.Fragment,null,i.map(e=>F.createElement(fH,{key:e,zIndex:e,isPanorama:n})),t,a.map(e=>F.createElement(fH,{key:e,zIndex:e,isPanorama:n})))}var mH=[`children`];function hH(e,t){if(e==null)return{};var n,r,i=gH(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{var n=gh(),r=_h(),i=I_();if(!Hp(n)||!Hp(r))return null;var{children:a,otherAttributes:o,title:s,desc:c}=e,l,u;return o!=null&&(l=typeof o.tabIndex==`number`?o.tabIndex:i?0:void 0,u=typeof o.role==`string`?o.role:i?`application`:void 0),F.createElement(Zo,_H({},o,{title:s,desc:c,role:u,tabIndex:l,width:n,height:r,style:vH,ref:t}),a)}),bH=e=>{var{children:t}=e,n=G(Rm);if(!n)return null;var{width:r,height:i,y:a,x:o}=n;return F.createElement(Zo,{width:r,height:i,x:o,y:a},t)},xH=(0,F.forwardRef)((e,t)=>{var{children:n}=e,r=hH(e,mH);return Im()?F.createElement(bH,null,F.createElement(pH,{isPanorama:!0},n)):F.createElement(yH,_H({ref:t},r),F.createElement(pH,{isPanorama:!1},n))});function SH(){var e=W(),[t,n]=(0,F.useState)(null),r=G(_m);return(0,F.useEffect)(()=>{if(t!=null){var n=t.getBoundingClientRect().width/t.offsetWidth;J(n)&&n!==r&&e(zp(n))}},[t,e,r]),n}function CH(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 wH(e){for(var t=1;t(gM(),null);function AH(e){if(typeof e==`number`)return e;if(typeof e==`string`){var t=parseFloat(e);if(!Number.isNaN(t))return t}return 0}var jH=(0,F.forwardRef)((e,t)=>{var n=(0,F.useRef)(null),[r,i]=(0,F.useState)({containerWidth:AH(e.style?.width),containerHeight:AH(e.style?.height)}),a=(0,F.useCallback)((e,t)=>{i(n=>{var r=Math.round(e),i=Math.round(t);return n.containerWidth===r&&n.containerHeight===i?n:{containerWidth:r,containerHeight:i}})},[]),o=(0,F.useCallback)(e=>{if(typeof t==`function`&&t(e),n.current!=null&&(n.current.disconnect(),n.current=null),e!=null&&typeof ResizeObserver<`u`){var{width:r,height:i}=e.getBoundingClientRect();a(r,i);var o=new ResizeObserver(e=>{var t=e[0];if(t!=null){var{width:n,height:r}=t.contentRect;a(n,r)}});o.observe(e),n.current=o}},[t,a]);return(0,F.useEffect)(()=>()=>{n.current?.disconnect()},[a]),F.createElement(F.Fragment,null,F.createElement(Ch,{width:r.containerWidth,height:r.containerHeight}),F.createElement(`div`,OH({ref:o},e)))}),MH=(0,F.forwardRef)((e,t)=>{var{width:n,height:r}=e,[i,a]=(0,F.useState)({containerWidth:AH(n),containerHeight:AH(r)}),o=(0,F.useCallback)((e,t)=>{a(n=>{var r=Math.round(e),i=Math.round(t);return n.containerWidth===r&&n.containerHeight===i?n:{containerWidth:r,containerHeight:i}})},[]),s=(0,F.useCallback)(e=>{if(typeof t==`function`&&t(e),e!=null){var{width:n,height:r}=e.getBoundingClientRect();o(n,r)}},[t,o]);return F.createElement(F.Fragment,null,F.createElement(Ch,{width:i.containerWidth,height:i.containerHeight}),F.createElement(`div`,OH({ref:s},e)))}),NH=(0,F.forwardRef)((e,t)=>{var{width:n,height:r}=e;return F.createElement(F.Fragment,null,F.createElement(Ch,{width:n,height:r}),F.createElement(`div`,OH({ref:t},e)))}),PH=(0,F.forwardRef)((e,t)=>{var{width:n,height:r}=e;return typeof n==`string`||typeof r==`string`?F.createElement(MH,OH({},e,{ref:t})):typeof n==`number`&&typeof r==`number`?F.createElement(NH,OH({},e,{width:n,height:r,ref:t})):F.createElement(F.Fragment,null,F.createElement(Ch,{width:n,height:r}),F.createElement(`div`,OH({ref:t},e)))});function FH(e){return e?jH:PH}var IH=(0,F.forwardRef)((e,t)=>{var{children:n,className:r,height:i,onClick:a,onContextMenu:o,onDoubleClick:s,onMouseDown:c,onMouseEnter:l,onMouseLeave:u,onMouseMove:d,onMouseUp:f,onTouchEnd:p,onTouchMove:m,onTouchStart:h,style:g,width:_,responsive:v,dispatchTouchEvents:y=!0}=e,b=(0,F.useRef)(null),x=W(),[S,C]=(0,F.useState)(null),[w,T]=(0,F.useState)(null),E=SH(),D=lh(),O=D?.width>0?D.width:_,k=D?.height>0?D.height:i,ee=(0,F.useCallback)(e=>{E(e),typeof t==`function`&&t(e),C(e),T(e),e!=null&&(b.current=e)},[E,t,C,T]),te=(0,F.useCallback)(e=>{x(bV(e)),x(UV({handler:a,reactEvent:e}))},[x,a]),A=(0,F.useCallback)(e=>{x(SV(e)),x(UV({handler:l,reactEvent:e}))},[x,l]),j=(0,F.useCallback)(e=>{x(Ek()),x(UV({handler:u,reactEvent:e}))},[x,u]),ne=(0,F.useCallback)(e=>{x(SV(e)),x(UV({handler:d,reactEvent:e}))},[x,d]),re=(0,F.useCallback)(()=>{x(IV())},[x]),ie=(0,F.useCallback)(()=>{x(LV())},[x]),ae=(0,F.useCallback)(e=>{x(FV(e.key))},[x]),oe=(0,F.useCallback)(e=>{x(UV({handler:o,reactEvent:e}))},[x,o]),se=(0,F.useCallback)(e=>{x(UV({handler:s,reactEvent:e}))},[x,s]),ce=(0,F.useCallback)(e=>{x(UV({handler:c,reactEvent:e}))},[x,c]),le=(0,F.useCallback)(e=>{x(UV({handler:f,reactEvent:e}))},[x,f]),ue=(0,F.useCallback)(e=>{x(UV({handler:h,reactEvent:e}))},[x,h]),de=(0,F.useCallback)(e=>{y&&x(YV(e)),x(UV({handler:m,reactEvent:e}))},[x,y,m]),M=(0,F.useCallback)(e=>{x(UV({handler:p,reactEvent:e}))},[x,p]),fe=FH(v);return F.createElement(Wj.Provider,{value:S},F.createElement(rs.Provider,{value:w},F.createElement(fe,{width:O??g?.width,height:k??g?.height,className:P(`recharts-wrapper`,r),style:wH({position:`relative`,cursor:`default`,width:O,height:k},g),onClick:te,onContextMenu:oe,onDoubleClick:se,onFocus:re,onBlur:ie,onKeyDown:ae,onMouseDown:ce,onMouseEnter:A,onMouseLeave:j,onMouseMove:ne,onMouseUp:le,onTouchEnd:M,onTouchMove:de,onTouchStart:ue,ref:ee},F.createElement(kH,null),n)))}),LH=[`width`,`height`,`responsive`,`children`,`className`,`style`,`compact`,`title`,`desc`];function RH(e,t){if(e==null)return{};var n,r,i=zH(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{var{width:n,height:r,responsive:i,children:a,className:o,style:s,compact:c,title:l,desc:u}=e,d=Uo(RH(e,LH));return c?F.createElement(F.Fragment,null,F.createElement(Ch,{width:n,height:r}),F.createElement(xH,{otherAttributes:d,title:l,desc:u},a)):F.createElement(IH,{className:o,style:s,width:n,height:r,responsive:i??!1,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},F.createElement(xH,{otherAttributes:d,title:l,desc:u,ref:t},F.createElement(KI,null,a)))});function VH(){return VH=Object.assign?Object.assign.bind():function(e){for(var t=1;tF.createElement(JH,{chartName:`BarChart`,defaultTooltipEventType:`axis`,validateTooltipEventTypes:YH,tooltipPayloadSearcher:Xj,categoricalChartProps:e,ref:t})),ZH=[`axis`],QH=(0,F.forwardRef)((e,t)=>F.createElement(JH,{chartName:`ComposedChart`,defaultTooltipEventType:`axis`,validateTooltipEventTypes:ZH,tooltipPayloadSearcher:Xj,categoricalChartProps:e,ref:t})),$H={light:``,dark:`.dark`},eU={width:320,height:200},tU=F.createContext(null);function nU(){let e=F.useContext(tU);if(!e)throw Error(`useChart must be used within a `);return e}function rU({id:e,className:t,children:n,config:r,initialDimension:i=eU,...a}){let o=F.useId(),s=`chart-${e??o.replace(/:/g,``)}`;return(0,I.jsx)(tU.Provider,{value:{config:r},children:(0,I.jsxs)(`div`,{"data-slot":`chart`,"data-chart":s,className:N(`flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden`,t),...a,children:[(0,I.jsx)(iU,{id:s,config:r}),(0,I.jsx)(dh,{initialDimension:i,children:n})]})})}var iU=({id:e,config:t})=>{let n=Object.entries(t).filter(([,e])=>e.theme??e.color);return n.length?(0,I.jsx)(`style`,{dangerouslySetInnerHTML:{__html:Object.entries($H).map(([t,r])=>` +${r} [data-chart=${e}] { +${n.map(([e,n])=>{let r=n.theme?.[t]??n.color;return r?` --color-${e}: ${r};`:null}).join(` +`)} +} +`).join(` +`)}}):null},aU=DM;function oU({active:e,payload:t,className:n,indicator:r=`dot`,hideLabel:i=!1,hideIndicator:a=!1,label:o,labelFormatter:s,labelClassName:c,formatter:l,color:u,nameKey:d,labelKey:f}){let{config:p}=nU(),m=F.useMemo(()=>{if(i||!t?.length)return null;let[e]=t,n=lU(p,e,`${f??e?.dataKey??e?.name??`value`}`),r=!f&&typeof o==`string`?p[o]?.label??o:n?.label;return s?(0,I.jsx)(`div`,{className:N(`font-medium`,c),children:s(r,t)}):r?(0,I.jsx)(`div`,{className:N(`font-medium`,c),children:r}):null},[o,s,t,i,c,p,f]);if(!e||!t?.length)return null;let h=t.length===1&&r!==`dot`;return(0,I.jsxs)(`div`,{className:N(`grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl`,n),children:[h?null:m,(0,I.jsx)(`div`,{className:`grid gap-1.5`,children:t.filter(e=>e.type!==`none`).map((e,t)=>{let n=lU(p,e,`${d??e.name??e.dataKey??`value`}`),i=u??e.payload?.fill??e.color;return(0,I.jsx)(`div`,{className:N(`flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground`,r===`dot`&&`items-center`),children:l&&e?.value!==void 0&&e.name?l(e.value,e.name,e,t,e.payload):(0,I.jsxs)(I.Fragment,{children:[n?.icon?(0,I.jsx)(n.icon,{}):!a&&(0,I.jsx)(`div`,{className:N(`shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)`,{"h-2.5 w-2.5":r===`dot`,"w-1":r===`line`,"w-0 border-[1.5px] border-dashed bg-transparent":r===`dashed`,"my-0.5":h&&r===`dashed`}),style:{"--color-bg":i,"--color-border":i}}),(0,I.jsxs)(`div`,{className:N(`flex flex-1 justify-between leading-none`,h?`items-end`:`items-center`),children:[(0,I.jsxs)(`div`,{className:`grid gap-1.5`,children:[h?m:null,(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:n?.label??e.name})]}),e.value!=null&&(0,I.jsx)(`span`,{className:`font-mono font-medium text-foreground tabular-nums`,children:typeof e.value==`number`?e.value.toLocaleString():String(e.value)})]})]})},t)})})]})}var sU=l_;function cU({className:e,hideIcon:t=!1,payload:n,verticalAlign:r=`bottom`,nameKey:i}){let{config:a}=nU();return n?.length?(0,I.jsx)(`div`,{className:N(`flex items-center justify-center gap-4`,r===`top`?`pb-3`:`pt-3`,e),children:n.filter(e=>e.type!==`none`).map((e,n)=>{let r=lU(a,e,`${i??e.dataKey??`value`}`);return(0,I.jsxs)(`div`,{className:N(`flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground`),children:[r?.icon&&!t?(0,I.jsx)(r.icon,{}):(0,I.jsx)(`div`,{className:`h-2 w-2 shrink-0 rounded-[2px]`,style:{backgroundColor:e.color}}),r?.label]},n)})}):null}function lU(e,t,n){if(typeof t!=`object`||!t)return;let r=`payload`in t&&typeof t.payload==`object`&&t.payload!==null?t.payload:void 0,i=n;return n in t&&typeof t[n]==`string`?i=t[n]:r&&n in r&&typeof r[n]==`string`&&(i=r[n]),i in e?e[i]:e[n]}var uU=[{key:`total_amount`,label:()=>ye()},{key:`actual_amount`,label:()=>y()}],dU=e=>Ue(e);function fU({selected:e,onChange:t}){let[n,i]=(0,F.useState)(!1),a=n=>{let r=new Set(e);r.has(n)?r.delete(n):r.add(n),t(r)},o=t=>e.size>0&&!e.has(t);return(0,I.jsxs)(pt,{onOpenChange:i,open:n,children:[(0,I.jsx)(ft,{asChild:!0,children:(0,I.jsxs)(Ye,{className:`h-8 border-dashed`,size:`sm`,variant:`outline`,children:[(0,I.jsx)(un,{className:`size-4`}),_(),e.size>0&&(0,I.jsx)(`span`,{className:`ml-1 rounded bg-primary px-1 py-0.5 text-[10px] text-primary-foreground`,children:e.size})]})}),(0,I.jsx)(dt,{align:`end`,className:`w-48 p-0`,children:(0,I.jsx)(Nt,{children:(0,I.jsxs)(Mt,{children:[(0,I.jsx)(jt,{children:ve()}),(0,I.jsx)(kt,{children:uU.map(({key:e,label:t})=>(0,I.jsxs)(At,{onSelect:()=>a(e),children:[(0,I.jsx)(`div`,{className:N(`flex size-4 items-center justify-center rounded-sm border border-primary`,o(e)?`opacity-50 [&_svg]:invisible`:`bg-primary [&_svg]:visible`),children:(0,I.jsx)(Ct,{className:`h-4 w-4 text-primary-foreground`})}),(0,I.jsx)(`span`,{children:t()})]},e))}),e.size>0&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Ot,{}),(0,I.jsx)(kt,{children:(0,I.jsx)(At,{className:`justify-center text-center`,onSelect:()=>t(new Set),children:r()})})]})]})})})]})}var pU={total_amount:{label:ye(),color:`var(--chart-1)`},actual_amount:{label:y(),color:`var(--chart-2)`}};function mU({data:e,selected:t}){let n=e=>t.size===0||t.has(e);return(0,I.jsx)(`div`,{className:`space-y-4`,children:(0,I.jsx)(rU,{className:`h-80 w-full`,config:pU,children:(0,I.jsxs)(QH,{data:e,children:[(0,I.jsx)($L,{strokeDasharray:`3 3`,vertical:!1}),(0,I.jsx)(tV,{dataKey:`day`,tickFormatter:We}),(0,I.jsx)(gV,{tickFormatter:e=>e>=1e3?`$${(e/1e3).toFixed(0)}k`:`$${e}`,width:60}),(0,I.jsx)(aU,{content:(0,I.jsx)(oU,{className:`min-w-44`,formatter:(e,t,n)=>(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`h-2.5 w-2.5 shrink-0 rounded-xs`,style:{background:n.color}}),(0,I.jsxs)(`div`,{className:`flex flex-1 items-center justify-between gap-6 leading-none`,children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:pU[t]?.label??t}),(0,I.jsx)(`span`,{className:`font-medium font-mono text-foreground tabular-nums`,children:dU(Number(e))})]})]})})}),(0,I.jsx)(sU,{content:(0,I.jsx)(cU,{})}),n(`total_amount`)&&(0,I.jsx)(Pz,{dataKey:`total_amount`,fill:`var(--chart-1)`,fillOpacity:.1,stroke:`var(--chart-1)`,strokeWidth:2.5,type:`monotone`}),n(`actual_amount`)&&(0,I.jsx)(Pz,{dataKey:`actual_amount`,fill:`var(--chart-2)`,fillOpacity:.2,stroke:`var(--chart-2)`,strokeWidth:1.5,type:`monotone`})]})})})}var hU=Object.assign(mU,{Filter:fU});function gU({overview:e,orderStats:t}){return(0,I.jsx)(Qe,{children:(0,I.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-6`,children:[{title:o(),value:Ue(e.total_asset??0),icon:fn,hint:s()},{title:E(),value:Ue(e.volume??0),icon:cn,hint:Pe()},{title:a(),value:(e.order_count??0).toString(),icon:pn,hint:T()},{title:Fe(),value:`${((e.success_rate??0)*100).toFixed(1)}%`,icon:mn,hint:le()},{title:Ie(),value:(t.order_count??0).toString(),icon:on,hint:Ne()},{title:se(),value:(t.success_count??0).toString(),icon:pn,hint:he()},{title:ge(),value:`${Math.round(t.avg_payment_seconds??0)}s`,icon:Tt,hint:xe()},{title:Te(),value:(t.expired_unpaid_count??0).toString(),icon:ln,hint:me()},{title:de(),value:Ue(e.seven_day_volume??0),icon:cn,hint:Me()},{title:be(),value:(e.active_addresses??0).toString(),icon:ln,hint:ue()},{title:ke(),value:(e.online_chains??0).toString(),icon:dn,hint:we()},{title:ce(),value:`${((t.success_rate??0)*100).toFixed(1)}%`,icon:on,hint:_e()}].map(e=>(0,I.jsxs)(Bt,{children:[(0,I.jsxs)(Lt,{className:`flex flex-row items-center justify-between space-y-0 pb-2`,children:[(0,I.jsx)(It,{className:`font-medium text-sm`,children:e.title}),(0,I.jsxs)($e,{children:[(0,I.jsx)(Xe,{asChild:!0,children:(0,I.jsx)(e.icon,{className:`h-4 w-4 cursor-help text-muted-foreground`})}),(0,I.jsx)(Ze,{children:(0,I.jsx)(`p`,{children:e.hint})})]})]}),(0,I.jsx)(Rt,{children:(0,I.jsx)(`div`,{className:`font-bold text-2xl`,children:e.value})})]},e.title))})})}var _U={total_amount:{label:Oe(),color:`var(--chart-2)`},actual_amount:{label:Ce(),color:`var(--chart-5)`}};function vU({data:e}){return(0,I.jsx)(rU,{className:`h-80 w-full`,config:_U,children:(0,I.jsxs)(XH,{barGap:8,data:e,children:[(0,I.jsx)($L,{strokeDasharray:`3 3`,vertical:!1}),(0,I.jsx)(tV,{dataKey:`day`,tickFormatter:We}),(0,I.jsx)(aU,{content:(0,I.jsx)(oU,{className:`min-w-40`,formatter:(e,t,n)=>(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`h-2.5 w-2.5 shrink-0 rounded-[2px]`,style:{background:n.color}}),(0,I.jsxs)(`div`,{className:`flex flex-1 items-center justify-between gap-6 leading-none`,children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:_U[t]?.label??t}),(0,I.jsx)(`span`,{className:`font-medium font-mono text-foreground tabular-nums`,children:Ue(Number(e))})]})]})})}),(0,I.jsx)(sU,{content:(0,I.jsx)(cU,{})}),(0,I.jsx)(PB,{dataKey:`total_amount`,fill:`var(--color-total_amount)`,radius:[8,8,0,0]}),(0,I.jsx)(PB,{dataKey:`actual_amount`,fill:`var(--color-actual_amount)`,radius:[8,8,0,0]})]})})}var yU={order_count:{label:je(),color:`var(--chart-1)`},success_count:{label:fe(),color:`var(--chart-3)`}};function bU({data:e}){return(0,I.jsx)(rU,{className:`h-80 w-full`,config:yU,children:(0,I.jsxs)(QH,{data:e,children:[(0,I.jsx)($L,{strokeDasharray:`3 3`,vertical:!1}),(0,I.jsx)(tV,{dataKey:`day`}),(0,I.jsx)(gV,{allowDecimals:!1,yAxisId:`left`}),(0,I.jsx)(gV,{allowDecimals:!1,hide:!0,yAxisId:`right`}),(0,I.jsx)(aU,{content:(0,I.jsx)(oU,{className:`min-w-40`,formatter:(e,t,n)=>(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`h-2.5 w-2.5 shrink-0 rounded-[2px]`,style:{background:n.color}}),(0,I.jsxs)(`div`,{className:`flex flex-1 items-center justify-between gap-6 leading-none`,children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:yU[t]?.label??t}),(0,I.jsx)(`span`,{className:`font-medium font-mono text-foreground tabular-nums`,children:Number(e).toLocaleString()})]})]})})}),(0,I.jsx)(sU,{content:(0,I.jsx)(cU,{})}),(0,I.jsx)(PB,{dataKey:`order_count`,fill:`var(--color-order_count)`,radius:[8,8,0,0],yAxisId:`left`}),(0,I.jsx)(YR,{dataKey:`success_count`,dot:{r:3},stroke:`var(--color-success_count)`,strokeWidth:2,type:`monotone`,yAxisId:`right`})]})})}var xU={1:`bg-amber-500/10 text-amber-600`,2:`bg-emerald-500/10 text-emerald-600`,3:`bg-rose-500/10 text-rose-600`},SU={1:t(),2:S(),3:oe()};function CU({orders:e}){let t=Be();return(0,I.jsx)(`div`,{className:`overflow-hidden rounded-md border`,children:(0,I.jsxs)(ht,{children:[(0,I.jsx)(yt,{children:(0,I.jsxs)(St,{className:`group/row`,children:[(0,I.jsx)(_t,{className:`bg-background group-hover/row:bg-muted`,children:m()}),(0,I.jsx)(_t,{className:`bg-background group-hover/row:bg-muted`,children:De()}),(0,I.jsx)(_t,{className:`bg-background group-hover/row:bg-muted`,children:h()}),(0,I.jsx)(_t,{className:`bg-background group-hover/row:bg-muted`,children:l()}),(0,I.jsx)(_t,{className:`bg-background group-hover/row:bg-muted`,children:k()}),(0,I.jsx)(_t,{className:`bg-background group-hover/row:bg-muted`,children:D()}),(0,I.jsx)(_t,{className:`bg-background group-hover/row:bg-muted`,children:u()})]})}),(0,I.jsx)(bt,{children:e.map(e=>(0,I.jsxs)(St,{className:`group/row cursor-pointer`,onClick:()=>t({to:`/orders`}),children:[(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:Ge(e.created_at)}),(0,I.jsxs)(xt,{className:`bg-background font-medium group-hover/row:bg-muted`,children:[(0,I.jsx)(`div`,{children:e.id}),(0,I.jsx)(`div`,{className:`text-muted-foreground text-xs`,children:e.order_id})]}),(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:e.receive_address}),(0,I.jsxs)(xt,{className:`bg-background group-hover/row:bg-muted`,children:[Ke(e.amount),` `,e.currency]}),(0,I.jsxs)(xt,{className:`bg-background group-hover/row:bg-muted`,children:[Ke(e.actual_amount,6),` `,e.token||``]}),(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:e.network}),(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:(0,I.jsx)(Ft,{className:N(xU[e.status??1]),children:SU[e.status??1]})})]},e.id))})]})})}var wU=Array.from({length:12},(e,t)=>`stat-${t}`),TU=Array.from({length:10},(e,t)=>`order-${t}`);function EU(){return(0,I.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-6`,children:wU.map(e=>(0,I.jsxs)(Bt,{children:[(0,I.jsx)(Lt,{className:`pb-2`,children:(0,I.jsx)(ut,{className:`h-4 w-24`})}),(0,I.jsx)(Rt,{children:(0,I.jsx)(ut,{className:`h-7 w-20`})})]},e))})}function DU(){return(0,I.jsx)(ut,{className:`h-80 w-full rounded-md`})}function OU(){return(0,I.jsx)(`div`,{className:`overflow-hidden rounded-md border`,children:(0,I.jsxs)(ht,{children:[(0,I.jsx)(yt,{children:(0,I.jsxs)(St,{children:[(0,I.jsx)(_t,{children:m()}),(0,I.jsx)(_t,{children:De()}),(0,I.jsx)(_t,{children:h()}),(0,I.jsx)(_t,{children:l()}),(0,I.jsx)(_t,{children:k()}),(0,I.jsx)(_t,{children:D()}),(0,I.jsx)(_t,{children:u()})]})}),(0,I.jsx)(bt,{children:TU.map(e=>(0,I.jsxs)(St,{children:[(0,I.jsx)(xt,{children:(0,I.jsx)(vt,{type:`date`})}),(0,I.jsx)(xt,{children:(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(vt,{type:`id`}),(0,I.jsx)(ut,{className:`h-3 w-24`})]})}),(0,I.jsx)(xt,{children:(0,I.jsx)(vt,{type:`long`})}),(0,I.jsx)(xt,{children:(0,I.jsx)(vt,{type:`amount`})}),(0,I.jsx)(xt,{children:(0,I.jsx)(vt,{type:`amount`})}),(0,I.jsx)(xt,{children:(0,I.jsx)(vt,{type:`short`})}),(0,I.jsx)(xt,{children:(0,I.jsx)(vt,{type:`badge`})})]},e))})]})})}function kU(){let[e,t]=(0,F.useState)(`today`),[n,r]=(0,F.useState)(new Set),[a,o]=(0,F.useState)(),s=Re.useQuery(`get`,`/admin/api/v1/dashboard/overview`),l={range:e};e===`custom`&&a?.from&&(l.start_at=Math.floor(a.from.getTime()/1e3),a.to&&(l.end_at=Math.floor(a.to.getTime()/1e3)));let u=Re.useQuery(`get`,`/admin/api/v1/dashboard/asset-trend`,{params:{query:l}},{enabled:e!==`custom`||!!a?.from}),f=Re.useQuery(`get`,`/admin/api/v1/dashboard/revenue-trend`,{params:{query:l}},{enabled:e!==`custom`||!!a?.from}),p=Re.useQuery(`get`,`/admin/api/v1/dashboard/order-stats`,{params:{query:l}},{enabled:e!==`custom`||!!a?.from}),m=Re.useQuery(`get`,`/admin/api/v1/dashboard/recent-orders`),h=u.data?.data??[],_=f.data?.data??[],v=m.data?.data??[];return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Et,{}),(0,I.jsxs)(Dt,{className:`flex flex-1 flex-col gap-4 sm:gap-6`,children:[(0,I.jsx)(Pt,{description:re(),title:A()}),(s.isLoading||p.isLoading)&&(0,I.jsx)(EU,{}),!(s.isLoading||p.isLoading)&&s.data?.data&&(0,I.jsx)(gU,{orderStats:p.data?.data??{},overview:s.data.data}),(0,I.jsx)(AU,{customRange:a,range:e,selectedAddrs:n,setCustomRange:o,setRange:t,setSelectedAddrs:r,trendData:h,trendLoading:u.isLoading}),(0,I.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-7`,children:[(0,I.jsxs)(Bt,{className:`xl:col-span-4`,children:[(0,I.jsxs)(Lt,{children:[(0,I.jsx)(It,{children:O()}),(0,I.jsx)(zt,{children:i()})]}),(0,I.jsxs)(Rt,{children:[f.isLoading&&(0,I.jsx)(DU,{}),!f.isLoading&&_.length>0&&(0,I.jsx)(vU,{data:_})]})]}),(0,I.jsxs)(Bt,{className:`xl:col-span-3`,children:[(0,I.jsxs)(Lt,{children:[(0,I.jsx)(It,{children:Le()}),(0,I.jsx)(zt,{children:w()})]}),(0,I.jsxs)(Rt,{children:[f.isLoading&&(0,I.jsx)(DU,{}),!f.isLoading&&_.length>0&&(0,I.jsx)(bU,{data:_})]})]})]}),(0,I.jsxs)(Bt,{children:[(0,I.jsxs)(Lt,{children:[(0,I.jsx)(It,{children:g()}),(0,I.jsx)(zt,{children:d()})]}),(0,I.jsxs)(Rt,{children:[m.isLoading&&(0,I.jsx)(OU,{}),!m.isLoading&&v.length>0&&(0,I.jsx)(CU,{orders:v}),!m.isLoading&&v.length===0&&(0,I.jsx)(`div`,{className:`py-8 text-center text-muted-foreground`,children:c()})]})]})]})]})}function AU({customRange:e,range:t,selectedAddrs:n,setCustomRange:r,setRange:i,setSelectedAddrs:a,trendData:o,trendLoading:s}){return(0,I.jsxs)(Bt,{children:[(0,I.jsxs)(Lt,{className:`flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(It,{children:b()}),(0,I.jsx)(zt,{children:v()})]}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,I.jsx)(hU.Filter,{data:o,onChange:a,selected:n}),(0,I.jsx)(Po,{onValueChange:e=>{i(e),e!==`custom`&&r(void 0)},value:t,children:(0,I.jsxs)(Io,{children:[(0,I.jsx)(Lo,{value:`today`,children:te()}),(0,I.jsx)(Lo,{value:`7d`,children:ne()}),(0,I.jsx)(Lo,{value:`30d`,children:p()}),(0,I.jsx)(Lo,{value:`custom`,children:Ee()})]})}),t===`custom`&&(0,I.jsx)(No,{onSelect:e=>r(e),selected:e})]})]}),(0,I.jsxs)(Rt,{children:[s&&(0,I.jsx)(DU,{}),!s&&o.length>0&&(0,I.jsx)(hU,{data:o,range:t,selected:n})]})]})}var jU=kU;export{jU as component}; \ No newline at end of file diff --git a/src/www/assets/data-table-C3uNvchK.js b/src/www/assets/data-table-C3uNvchK.js new file mode 100644 index 0000000..0b75a9f --- /dev/null +++ b/src/www/assets/data-table-C3uNvchK.js @@ -0,0 +1,4 @@ +import{$u as e,Qu as t,au as n,cu as r,du as i,fu as a,hu as o,iu as s,ju as c,lu as l,mu as u,nd as d,nu as f,ou as p,pu as m,r as h,ru as g,su as ee,tu as te,uu as ne}from"./messages-BOl-zx8S.js";import{a as re,i as _,r as ie,t as v}from"./button-D-oR8d6w.js";import"./tooltip-m5xmPGQe.js";import{a as y,l as ae,n as oe,o as se,r as ce,s as le,t as ue,u as de}from"./dropdown-menu-HbmfecEg.js";import{n as fe,t as pe}from"./skeleton-gJOqI-7w.js";import{n as me,r as he,t as ge}from"./popover-M5uqmgyK.js";import{a as _e,i as ve,n as ye,r as be,t as xe}from"./select-CvMpqpz9.js";import{t as Se}from"./separator-Dw-mNGCy.js";import{t as b}from"./createLucideIcon-DMX28cCu.js";import{t as Ce}from"./check-DH6qIczM.js";import{t as we}from"./chevrons-up-down-C1Q-XIDV.js";import{t as Te}from"./eye-off-BBTW1z_J.js";import{n as Ee,r as De,t as Oe}from"./empty-state-BelJgFUf.js";import{a as ke,c as Ae,h as je,i as Me,o as Ne,r as Pe,s as Fe,t as Ie}from"./command-yFHhtFiR.js";import{t as Le}from"./input-CZHXycLK.js";import{t as Re}from"./badge-D-FAREMY.js";var ze=b(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),Be=b(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),Ve=b(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]),He=b(`chevrons-left`,[[`path`,{d:`m11 17-5-5 5-5`,key:`13zhaf`}],[`path`,{d:`m18 17-5-5 5-5`,key:`h8a8et`}]]),Ue=b(`chevrons-right`,[[`path`,{d:`m6 17 5-5-5-5`,key:`xnjwq`}],[`path`,{d:`m13 17 5-5-5-5`,key:`17xmmf`}]]),We=b(`circle-plus`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M8 12h8`,key:`1wcyev`}],[`path`,{d:`M12 8v8`,key:`napkw2`}]]),x=d(e(),1),S=t();function C(e,t){return typeof e==`function`?e(t):e}function w(e,t){return n=>{t.setState(t=>({...t,[e]:C(n,t[e])}))}}function T(e){return e instanceof Function}function Ge(e){return Array.isArray(e)&&e.every(e=>typeof e==`number`)}function Ke(e,t){let n=[],r=e=>{e.forEach(e=>{n.push(e);let i=t(e);i!=null&&i.length&&r(i)})};return r(e),n}function E(e,t,n){let r=[],i;return a=>{let o;n.key&&n.debug&&(o=Date.now());let s=e(a);if(!(s.length!==r.length||s.some((e,t)=>r[t]!==e)))return i;r=s;let c;if(n.key&&n.debug&&(c=Date.now()),i=t(...s),n==null||n.onChange==null||n.onChange(i),n.key&&n.debug&&n!=null&&n.debug()){let e=Math.round((Date.now()-o)*100)/100,t=Math.round((Date.now()-c)*100)/100,r=t/16,i=(e,t)=>{for(e=String(e);e.lengthe?.debugAll??e[t],key:!1,onChange:r}}function qe(e,t,n,r){let i={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:()=>i.getValue()??e.options.renderFallbackValue,getContext:E(()=>[e,n,t,i],(e,t,n,r)=>({table:e,column:t,row:n,cell:r,getValue:r.getValue,renderValue:r.renderValue}),D(e.options,`debugCells`,`cell.getContext`))};return e._features.forEach(r=>{r.createCell==null||r.createCell(i,n,t,e)},{}),i}function Je(e,t,n,r){let i={...e._getDefaultColumnDef(),...t},a=i.accessorKey,o=i.id??(a?typeof String.prototype.replaceAll==`function`?a.replaceAll(`.`,`_`):a.replace(/\./g,`_`):void 0)??(typeof i.header==`string`?i.header:void 0),s;if(i.accessorFn?s=i.accessorFn:a&&(s=a.includes(`.`)?e=>{let t=e;for(let e of a.split(`.`))t=t?.[e];return t}:e=>e[i.accessorKey]),!o)throw Error();let c={id:`${String(o)}`,accessorFn:s,parent:r,depth:n,columnDef:i,columns:[],getFlatColumns:E(()=>[!0],()=>[c,...c.columns?.flatMap(e=>e.getFlatColumns())],D(e.options,`debugColumns`,`column.getFlatColumns`)),getLeafColumns:E(()=>[e._getOrderColumnsFn()],e=>{var t;return(t=c.columns)!=null&&t.length?e(c.columns.flatMap(e=>e.getLeafColumns())):[c]},D(e.options,`debugColumns`,`column.getLeafColumns`))};for(let t of e._features)t.createColumn==null||t.createColumn(c,e);return c}var O=`debugHeaders`;function Ye(e,t,n){let r={id:n.id??t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{let e=[],t=n=>{n.subHeaders&&n.subHeaders.length&&n.subHeaders.map(t),e.push(n)};return t(r),e},getContext:()=>({table:e,header:r,column:t})};return e._features.forEach(t=>{t.createHeader==null||t.createHeader(r,e)}),r}var Xe={createTable:e=>{e.getHeaderGroups=E(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>{let a=r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],o=i?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],s=n.filter(e=>!(r!=null&&r.includes(e.id))&&!(i!=null&&i.includes(e.id)));return k(t,[...a,...s,...o],e)},D(e.options,O,`getHeaderGroups`)),e.getCenterHeaderGroups=E(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>(n=n.filter(e=>!(r!=null&&r.includes(e.id))&&!(i!=null&&i.includes(e.id))),k(t,n,e,`center`)),D(e.options,O,`getCenterHeaderGroups`)),e.getLeftHeaderGroups=E(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>k(t,r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],e,`left`),D(e.options,O,`getLeftHeaderGroups`)),e.getRightHeaderGroups=E(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>k(t,r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],e,`right`),D(e.options,O,`getRightHeaderGroups`)),e.getFooterGroups=E(()=>[e.getHeaderGroups()],e=>[...e].reverse(),D(e.options,O,`getFooterGroups`)),e.getLeftFooterGroups=E(()=>[e.getLeftHeaderGroups()],e=>[...e].reverse(),D(e.options,O,`getLeftFooterGroups`)),e.getCenterFooterGroups=E(()=>[e.getCenterHeaderGroups()],e=>[...e].reverse(),D(e.options,O,`getCenterFooterGroups`)),e.getRightFooterGroups=E(()=>[e.getRightHeaderGroups()],e=>[...e].reverse(),D(e.options,O,`getRightFooterGroups`)),e.getFlatHeaders=E(()=>[e.getHeaderGroups()],e=>e.map(e=>e.headers).flat(),D(e.options,O,`getFlatHeaders`)),e.getLeftFlatHeaders=E(()=>[e.getLeftHeaderGroups()],e=>e.map(e=>e.headers).flat(),D(e.options,O,`getLeftFlatHeaders`)),e.getCenterFlatHeaders=E(()=>[e.getCenterHeaderGroups()],e=>e.map(e=>e.headers).flat(),D(e.options,O,`getCenterFlatHeaders`)),e.getRightFlatHeaders=E(()=>[e.getRightHeaderGroups()],e=>e.map(e=>e.headers).flat(),D(e.options,O,`getRightFlatHeaders`)),e.getCenterLeafHeaders=E(()=>[e.getCenterFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),D(e.options,O,`getCenterLeafHeaders`)),e.getLeftLeafHeaders=E(()=>[e.getLeftFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),D(e.options,O,`getLeftLeafHeaders`)),e.getRightLeafHeaders=E(()=>[e.getRightFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),D(e.options,O,`getRightLeafHeaders`)),e.getLeafHeaders=E(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(e,t,n)=>[...e[0]?.headers??[],...t[0]?.headers??[],...n[0]?.headers??[]].map(e=>e.getLeafHeaders()).flat(),D(e.options,O,`getLeafHeaders`))}};function k(e,t,n,r){let i=0,a=function(e,t){t===void 0&&(t=1),i=Math.max(i,t),e.filter(e=>e.getIsVisible()).forEach(e=>{var n;(n=e.columns)!=null&&n.length&&a(e.columns,t+1)},0)};a(e);let o=[],s=(e,t)=>{let i={depth:t,id:[r,`${t}`].filter(Boolean).join(`_`),headers:[]},a=[];e.forEach(e=>{let o=[...a].reverse()[0],s=e.column.depth===i.depth,c,l=!1;if(s&&e.column.parent?c=e.column.parent:(c=e.column,l=!0),o&&o?.column===c)o.subHeaders.push(e);else{let i=Ye(n,c,{id:[r,t,c.id,e?.id].filter(Boolean).join(`_`),isPlaceholder:l,placeholderId:l?`${a.filter(e=>e.column===c).length}`:void 0,depth:t,index:a.length});i.subHeaders.push(e),a.push(i)}i.headers.push(e),e.headerGroup=i}),o.push(i),t>0&&s(a,t-1)};s(t.map((e,t)=>Ye(n,e,{depth:i,index:t})),i-1),o.reverse();let c=e=>e.filter(e=>e.column.getIsVisible()).map(e=>{let t=0,n=0,r=[0];e.subHeaders&&e.subHeaders.length?(r=[],c(e.subHeaders).forEach(e=>{let{colSpan:n,rowSpan:i}=e;t+=n,r.push(i)})):t=1;let i=Math.min(...r);return n+=i,e.colSpan=t,e.rowSpan=n,{colSpan:t,rowSpan:n}});return c(o[0]?.headers??[]),o}var A=(e,t,n,r,i,a,o)=>{let s={id:t,index:r,original:n,depth:i,parentId:o,_valuesCache:{},_uniqueValuesCache:{},getValue:t=>{if(s._valuesCache.hasOwnProperty(t))return s._valuesCache[t];let n=e.getColumn(t);if(n!=null&&n.accessorFn)return s._valuesCache[t]=n.accessorFn(s.original,r),s._valuesCache[t]},getUniqueValues:t=>{if(s._uniqueValuesCache.hasOwnProperty(t))return s._uniqueValuesCache[t];let n=e.getColumn(t);if(n!=null&&n.accessorFn)return n.columnDef.getUniqueValues?(s._uniqueValuesCache[t]=n.columnDef.getUniqueValues(s.original,r),s._uniqueValuesCache[t]):(s._uniqueValuesCache[t]=[s.getValue(t)],s._uniqueValuesCache[t])},renderValue:t=>s.getValue(t)??e.options.renderFallbackValue,subRows:a??[],getLeafRows:()=>Ke(s.subRows,e=>e.subRows),getParentRow:()=>s.parentId?e.getRow(s.parentId,!0):void 0,getParentRows:()=>{let e=[],t=s;for(;;){let n=t.getParentRow();if(!n)break;e.push(n),t=n}return e.reverse()},getAllCells:E(()=>[e.getAllLeafColumns()],t=>t.map(t=>qe(e,s,t,t.id)),D(e.options,`debugRows`,`getAllCells`)),_getAllCellsByColumnId:E(()=>[s.getAllCells()],e=>e.reduce((e,t)=>(e[t.column.id]=t,e),{}),D(e.options,`debugRows`,`getAllCellsByColumnId`))};for(let t=0;t{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},Qe=(e,t,n)=>{var r,i;let a=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((i=e.getValue(t))==null||(i=i.toString())==null||(i=i.toLowerCase())==null)&&i.includes(a))};Qe.autoRemove=e=>N(e);var $e=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};$e.autoRemove=e=>N(e);var et=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===n?.toLowerCase()};et.autoRemove=e=>N(e);var tt=(e,t,n)=>e.getValue(t)?.includes(n);tt.autoRemove=e=>N(e);var nt=(e,t,n)=>!n.some(n=>{var r;return!((r=e.getValue(t))!=null&&r.includes(n))});nt.autoRemove=e=>N(e)||!(e!=null&&e.length);var rt=(e,t,n)=>n.some(n=>e.getValue(t)?.includes(n));rt.autoRemove=e=>N(e)||!(e!=null&&e.length);var it=(e,t,n)=>e.getValue(t)===n;it.autoRemove=e=>N(e);var at=(e,t,n)=>e.getValue(t)==n;at.autoRemove=e=>N(e);var j=(e,t,n)=>{let[r,i]=n,a=e.getValue(t);return a>=r&&a<=i};j.resolveFilterValue=e=>{let[t,n]=e,r=typeof t==`number`?t:parseFloat(t),i=typeof n==`number`?n:parseFloat(n),a=t===null||Number.isNaN(r)?-1/0:r,o=n===null||Number.isNaN(i)?1/0:i;if(a>o){let e=a;a=o,o=e}return[a,o]},j.autoRemove=e=>N(e)||N(e[0])&&N(e[1]);var M={includesString:Qe,includesStringSensitive:$e,equalsString:et,arrIncludes:tt,arrIncludesAll:nt,arrIncludesSome:rt,equals:it,weakEquals:at,inNumberRange:j};function N(e){return e==null||e===``}var ot={getDefaultColumnDef:()=>({filterFn:`auto`}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:w(`columnFilters`,e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{let n=t.getCoreRowModel().flatRows[0]?.getValue(e.id);return typeof n==`string`?M.includesString:typeof n==`number`?M.inNumberRange:typeof n==`boolean`||typeof n==`object`&&n?M.equals:Array.isArray(n)?M.arrIncludes:M.weakEquals},e.getFilterFn=()=>T(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn===`auto`?e.getAutoFilterFn():t.options.filterFns?.[e.columnDef.filterFn]??M[e.columnDef.filterFn],e.getCanFilter=()=>(e.columnDef.enableColumnFilter??!0)&&(t.options.enableColumnFilters??!0)&&(t.options.enableFilters??!0)&&!!e.accessorFn,e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(t=>t.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>t.getState().columnFilters?.findIndex(t=>t.id===e.id)??-1,e.setFilterValue=n=>{t.setColumnFilters(t=>{let r=e.getFilterFn(),i=t?.find(t=>t.id===e.id),a=C(n,i?i.value:void 0);if(st(r,a,e))return t?.filter(t=>t.id!==e.id)??[];let o={id:e.id,value:a};return i?t?.map(t=>t.id===e.id?o:t)??[]:t!=null&&t.length?[...t,o]:[o]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{let n=e.getAllLeafColumns();e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(e=>C(t,e)?.filter(e=>{let t=n.find(t=>t.id===e.id);return!(t&&st(t.getFilterFn(),e.value,t))}))},e.resetColumnFilters=t=>{e.setColumnFilters(t?[]:e.initialState?.columnFilters??[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function st(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||t===void 0||typeof t==`string`&&!t}var P={sum:(e,t,n)=>n.reduce((t,n)=>{let r=n.getValue(e);return t+(typeof r==`number`?r:0)},0),min:(e,t,n)=>{let r;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}),r},max:(e,t,n)=>{let r;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r=n)&&(r=n)}),r},extent:(e,t,n)=>{let r,i;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r===void 0?n>=n&&(r=i=n):(r>n&&(r=n),i{let n=0,r=0;if(t.forEach(t=>{let i=t.getValue(e);i!=null&&(i=+i)>=i&&(++n,r+=i)}),n)return r/n},median:(e,t)=>{if(!t.length)return;let n=t.map(t=>t.getValue(e));if(!Ge(n))return;if(n.length===1)return n[0];let r=Math.floor(n.length/2),i=n.sort((e,t)=>e-t);return n.length%2==0?(i[r-1]+i[r])/2:i[r]},unique:(e,t)=>Array.from(new Set(t.map(t=>t.getValue(e))).values()),uniqueCount:(e,t)=>new Set(t.map(t=>t.getValue(e))).size,count:(e,t)=>t.length},ct={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t;return((t=e.getValue())==null||t.toString==null?void 0:t.toString())??null},aggregationFn:`auto`}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:w(`grouping`,e),groupedColumnMode:`reorder`}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(t=>t!=null&&t.includes(e.id)?t.filter(t=>t!==e.id):[...t??[],e.id])},e.getCanGroup=()=>(e.columnDef.enableGrouping??!0)&&(t.options.enableGrouping??!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue),e.getIsGrouped=()=>t.getState().grouping?.includes(e.id),e.getGroupedIndex=()=>t.getState().grouping?.indexOf(e.id),e.getToggleGroupingHandler=()=>{let t=e.getCanGroup();return()=>{t&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{let n=t.getCoreRowModel().flatRows[0]?.getValue(e.id);if(typeof n==`number`)return P.sum;if(Object.prototype.toString.call(n)===`[object Date]`)return P.extent},e.getAggregationFn=()=>{if(!e)throw Error();return T(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn===`auto`?e.getAutoAggregationFn():t.options.aggregationFns?.[e.columnDef.aggregationFn]??P[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{e.setGrouping(t?[]:e.initialState?.grouping??[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];let r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var t;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((t=n.subRows)!=null&&t.length)}}};function lt(e,t,n){if(!(t!=null&&t.length)||!n)return e;let r=e.filter(e=>!t.includes(e.id));return n===`remove`?r:[...t.map(t=>e.find(e=>e.id===t)).filter(Boolean),...r]}var ut={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:w(`columnOrder`,e)}),createColumn:(e,t)=>{e.getIndex=E(e=>[z(t,e)],t=>t.findIndex(t=>t.id===e.id),D(t.options,`debugColumns`,`getIndex`)),e.getIsFirstColumn=n=>z(t,n)[0]?.id===e.id,e.getIsLastColumn=n=>{let r=z(t,n);return r[r.length-1]?.id===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{e.setColumnOrder(t?[]:e.initialState.columnOrder??[])},e._getOrderColumnsFn=E(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(e,t,n)=>r=>{let i=[];if(!(e!=null&&e.length))i=r;else{let t=[...e],n=[...r];for(;n.length&&t.length;){let e=t.shift(),r=n.findIndex(t=>t.id===e);r>-1&&i.push(n.splice(r,1)[0])}i=[...i,...n]}return lt(i,t,n)},D(e.options,`debugTable`,`_getOrderColumnsFn`))}},F=()=>({left:[],right:[]}),dt={getInitialState:e=>({columnPinning:F(),...e}),getDefaultOptions:e=>({onColumnPinningChange:w(`columnPinning`,e)}),createColumn:(e,t)=>{e.pin=n=>{let r=e.getLeafColumns().map(e=>e.id).filter(Boolean);t.setColumnPinning(e=>n===`right`?{left:(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),right:[...(e?.right??[]).filter(e=>!(r!=null&&r.includes(e))),...r]}:n===`left`?{left:[...(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),...r],right:(e?.right??[]).filter(e=>!(r!=null&&r.includes(e)))}:{left:(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),right:(e?.right??[]).filter(e=>!(r!=null&&r.includes(e)))})},e.getCanPin=()=>e.getLeafColumns().some(e=>(e.columnDef.enablePinning??!0)&&(t.options.enableColumnPinning??t.options.enablePinning??!0)),e.getIsPinned=()=>{let n=e.getLeafColumns().map(e=>e.id),{left:r,right:i}=t.getState().columnPinning,a=n.some(e=>r?.includes(e)),o=n.some(e=>i?.includes(e));return a?`left`:o?`right`:!1},e.getPinnedIndex=()=>{var n;let r=e.getIsPinned();return r?((n=t.getState().columnPinning)==null||(n=n[r])==null?void 0:n.indexOf(e.id))??-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=E(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(e,t,n)=>{let r=[...t??[],...n??[]];return e.filter(e=>!r.includes(e.column.id))},D(t.options,`debugRows`,`getCenterVisibleCells`)),e.getLeftVisibleCells=E(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(e,t)=>(t??[]).map(t=>e.find(e=>e.column.id===t)).filter(Boolean).map(e=>({...e,position:`left`})),D(t.options,`debugRows`,`getLeftVisibleCells`)),e.getRightVisibleCells=E(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(e,t)=>(t??[]).map(t=>e.find(e=>e.column.id===t)).filter(Boolean).map(e=>({...e,position:`right`})),D(t.options,`debugRows`,`getRightVisibleCells`))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>e.setColumnPinning(t?F():e.initialState?.columnPinning??F()),e.getIsSomeColumnsPinned=t=>{let n=e.getState().columnPinning;return t?!!n[t]?.length:!!(n.left?.length||n.right?.length)},e.getLeftLeafColumns=E(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(e,t)=>(t??[]).map(t=>e.find(e=>e.id===t)).filter(Boolean),D(e.options,`debugColumns`,`getLeftLeafColumns`)),e.getRightLeafColumns=E(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(e,t)=>(t??[]).map(t=>e.find(e=>e.id===t)).filter(Boolean),D(e.options,`debugColumns`,`getRightLeafColumns`)),e.getCenterLeafColumns=E(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(e,t,n)=>{let r=[...t??[],...n??[]];return e.filter(e=>!r.includes(e.id))},D(e.options,`debugColumns`,`getCenterLeafColumns`))}};function ft(e){return e||(typeof document<`u`?document:null)}var I={size:150,minSize:20,maxSize:2**53-1},pt=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),mt={getDefaultColumnDef:()=>I,getInitialState:e=>({columnSizing:{},columnSizingInfo:pt(),...e}),getDefaultOptions:e=>({columnResizeMode:`onEnd`,columnResizeDirection:`ltr`,onColumnSizingChange:w(`columnSizing`,e),onColumnSizingInfoChange:w(`columnSizingInfo`,e)}),createColumn:(e,t)=>{e.getSize=()=>{let n=t.getState().columnSizing[e.id];return Math.min(Math.max(e.columnDef.minSize??I.minSize,n??e.columnDef.size??I.size),e.columnDef.maxSize??I.maxSize)},e.getStart=E(e=>[e,z(t,e),t.getState().columnSizing],(t,n)=>n.slice(0,e.getIndex(t)).reduce((e,t)=>e+t.getSize(),0),D(t.options,`debugColumns`,`getStart`)),e.getAfter=E(e=>[e,z(t,e),t.getState().columnSizing],(t,n)=>n.slice(e.getIndex(t)+1).reduce((e,t)=>e+t.getSize(),0),D(t.options,`debugColumns`,`getAfter`)),e.resetSize=()=>{t.setColumnSizing(t=>{let{[e.id]:n,...r}=t;return r})},e.getCanResize=()=>(e.columnDef.enableResizing??!0)&&(t.options.enableColumnResizing??!0),e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let t=0,n=e=>{e.subHeaders.length?e.subHeaders.forEach(n):t+=e.column.getSize()??0};return n(e),t},e.getStart=()=>{if(e.index>0){let t=e.headerGroup.headers[e.index-1];return t.getStart()+t.getSize()}return 0},e.getResizeHandler=n=>{let r=t.getColumn(e.column.id),i=r?.getCanResize();return a=>{if(!r||!i||(a.persist==null||a.persist(),R(a)&&a.touches&&a.touches.length>1))return;let o=e.getSize(),s=e?e.getLeafHeaders().map(e=>[e.column.id,e.column.getSize()]):[[r.id,r.getSize()]],c=R(a)?Math.round(a.touches[0].clientX):a.clientX,l={},u=(e,n)=>{typeof n==`number`&&(t.setColumnSizingInfo(e=>{let r=t.options.columnResizeDirection===`rtl`?-1:1,i=(n-(e?.startOffset??0))*r,a=Math.max(i/(e?.startSize??0),-.999999);return e.columnSizingStart.forEach(e=>{let[t,n]=e;l[t]=Math.round(Math.max(n+n*a,0)*100)/100}),{...e,deltaOffset:i,deltaPercentage:a}}),(t.options.columnResizeMode===`onChange`||e===`end`)&&t.setColumnSizing(e=>({...e,...l})))},d=e=>u(`move`,e),f=e=>{u(`end`,e),t.setColumnSizingInfo(e=>({...e,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},p=ft(n),m={moveHandler:e=>d(e.clientX),upHandler:e=>{p?.removeEventListener(`mousemove`,m.moveHandler),p?.removeEventListener(`mouseup`,m.upHandler),f(e.clientX)}},h={moveHandler:e=>(e.cancelable&&(e.preventDefault(),e.stopPropagation()),d(e.touches[0].clientX),!1),upHandler:e=>{p?.removeEventListener(`touchmove`,h.moveHandler),p?.removeEventListener(`touchend`,h.upHandler),e.cancelable&&(e.preventDefault(),e.stopPropagation()),f(e.touches[0]?.clientX)}},g=ht()?{passive:!1}:!1;R(a)?(p?.addEventListener(`touchmove`,h.moveHandler,g),p?.addEventListener(`touchend`,h.upHandler,g)):(p?.addEventListener(`mousemove`,m.moveHandler,g),p?.addEventListener(`mouseup`,m.upHandler,g)),t.setColumnSizingInfo(e=>({...e,startOffset:c,startSize:o,deltaOffset:0,deltaPercentage:0,columnSizingStart:s,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{e.setColumnSizing(t?{}:e.initialState.columnSizing??{})},e.resetHeaderSizeInfo=t=>{e.setColumnSizingInfo(t?pt():e.initialState.columnSizingInfo??pt())},e.getTotalSize=()=>e.getHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getLeftTotalSize=()=>e.getLeftHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getCenterTotalSize=()=>e.getCenterHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getRightTotalSize=()=>e.getRightHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0}},L=null;function ht(){if(typeof L==`boolean`)return L;let e=!1;try{let t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener(`test`,n,t),window.removeEventListener(`test`,n)}catch{e=!1}return L=e,L}function R(e){return e.type===`touchstart`}var gt={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:w(`columnVisibility`,e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(t=>({...t,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{let n=e.columns;return(n.length?n.some(e=>e.getIsVisible()):t.getState().columnVisibility?.[e.id])??!0},e.getCanHide=()=>(e.columnDef.enableHiding??!0)&&(t.options.enableHiding??!0),e.getToggleVisibilityHandler=()=>t=>{e.toggleVisibility==null||e.toggleVisibility(t.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=E(()=>[e.getAllCells(),t.getState().columnVisibility],e=>e.filter(e=>e.column.getIsVisible()),D(t.options,`debugRows`,`_getAllVisibleCells`)),e.getVisibleCells=E(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(e,t,n)=>[...e,...t,...n],D(t.options,`debugRows`,`getVisibleCells`))},createTable:e=>{let t=(t,n)=>E(()=>[n(),n().filter(e=>e.getIsVisible()).map(e=>e.id).join(`_`)],e=>e.filter(e=>e.getIsVisible==null?void 0:e.getIsVisible()),D(e.options,`debugColumns`,t));e.getVisibleFlatColumns=t(`getVisibleFlatColumns`,()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t(`getVisibleLeafColumns`,()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t(`getLeftVisibleLeafColumns`,()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t(`getRightVisibleLeafColumns`,()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t(`getCenterVisibleLeafColumns`,()=>e.getCenterLeafColumns()),e.setColumnVisibility=t=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(t),e.resetColumnVisibility=t=>{e.setColumnVisibility(t?{}:e.initialState.columnVisibility??{})},e.toggleAllColumnsVisible=t=>{t??=!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((e,n)=>({...e,[n.id]:t||!(n.getCanHide!=null&&n.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(e=>!(e.getIsVisible!=null&&e.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(e=>e.getIsVisible==null?void 0:e.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>t=>{e.toggleAllColumnsVisible(t.target?.checked)}}};function z(e,t){return t?t===`center`?e.getCenterVisibleLeafColumns():t===`left`?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}var _t={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,`__global__`),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,`__global__`),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,`__global__`),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},vt={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:w(`globalFilter`,e),globalFilterFn:`auto`,getColumnCanGlobalFilter:t=>{var n;let r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r==`string`||typeof r==`number`}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>(e.columnDef.enableGlobalFilter??!0)&&(t.options.enableGlobalFilter??!0)&&(t.options.enableFilters??!0)&&((t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))??!0)&&!!e.accessorFn},createTable:e=>{e.getGlobalAutoFilterFn=()=>M.includesString,e.getGlobalFilterFn=()=>{let{globalFilterFn:t}=e.options;return T(t)?t:t===`auto`?e.getGlobalAutoFilterFn():e.options.filterFns?.[t]??M[t]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},yt={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:w(`expanded`,e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{if(!t){e._queue(()=>{t=!0});return}if(e.options.autoResetAll??e.options.autoResetExpanded??!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=t=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(t),e.toggleAllRowsExpanded=t=>{t??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=t=>{e.setExpanded(t?{}:e.initialState?.expanded??{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(e=>e.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>t=>{t.persist==null||t.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{let t=e.getState().expanded;return t===!0||Object.values(t).some(Boolean)},e.getIsAllRowsExpanded=()=>{let t=e.getState().expanded;return typeof t==`boolean`?t===!0:!(!Object.keys(t).length||e.getRowModel().flatRows.some(e=>!e.getIsExpanded()))},e.getExpandedDepth=()=>{let t=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(e=>{let n=e.split(`.`);t=Math.max(t,n.length)}),t},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{let i=r===!0?!0:!!(r!=null&&r[e.id]),a={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(e=>{a[e]=!0}):a=r,n??=!i,!i&&n)return{...a,[e.id]:!0};if(i&&!n){let{[e.id]:t,...n}=a;return n}return r})},e.getIsExpanded=()=>{let n=t.getState().expanded;return!!((t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))??(n===!0||n?.[e.id]))},e.getCanExpand=()=>{var n;return(t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))??((t.options.enableExpanding??!0)&&!!((n=e.subRows)!=null&&n.length))},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{let t=e.getCanExpand();return()=>{t&&e.toggleExpanded()}}}},B=0,V=10,H=()=>({pageIndex:B,pageSize:V}),bt={getInitialState:e=>({...e,pagination:{...H(),...e?.pagination}}),getDefaultOptions:e=>({onPaginationChange:w(`pagination`,e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{if(!t){e._queue(()=>{t=!0});return}if(e.options.autoResetAll??e.options.autoResetPageIndex??!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=t=>e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(e=>C(t,e)),e.resetPagination=t=>{e.setPagination(t?H():e.initialState.pagination??H())},e.setPageIndex=t=>{e.setPagination(n=>{let r=C(t,n.pageIndex),i=e.options.pageCount===void 0||e.options.pageCount===-1?2**53-1:e.options.pageCount-1;return r=Math.max(0,Math.min(r,i)),{...n,pageIndex:r}})},e.resetPageIndex=t=>{var n;e.setPageIndex(t?B:((n=e.initialState)==null||(n=n.pagination)==null?void 0:n.pageIndex)??B)},e.resetPageSize=t=>{var n;e.setPageSize(t?V:((n=e.initialState)==null||(n=n.pagination)==null?void 0:n.pageSize)??V)},e.setPageSize=t=>{e.setPagination(e=>{let n=Math.max(1,C(t,e.pageSize)),r=e.pageSize*e.pageIndex,i=Math.floor(r/n);return{...e,pageIndex:i,pageSize:n}})},e.setPageCount=t=>e.setPagination(n=>{let r=C(t,e.options.pageCount??-1);return typeof r==`number`&&(r=Math.max(-1,r)),{...n,pageCount:r}}),e.getPageOptions=E(()=>[e.getPageCount()],e=>{let t=[];return e&&e>0&&(t=[...Array(e)].fill(null).map((e,t)=>t)),t},D(e.options,`debugTable`,`getPageOptions`)),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{let{pageIndex:t}=e.getState().pagination,n=e.getPageCount();return n===-1?!0:n===0?!1:te.setPageIndex(e=>e-1),e.nextPage=()=>e.setPageIndex(e=>e+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>e.options.pageCount??Math.ceil(e.getRowCount()/e.getState().pagination.pageSize),e.getRowCount=()=>e.options.rowCount??e.getPrePaginationRowModel().rows.length}},U=()=>({top:[],bottom:[]}),xt={getInitialState:e=>({rowPinning:U(),...e}),getDefaultOptions:e=>({onRowPinningChange:w(`rowPinning`,e)}),createRow:(e,t)=>{e.pin=(n,r,i)=>{let a=r?e.getLeafRows().map(e=>{let{id:t}=e;return t}):[],o=i?e.getParentRows().map(e=>{let{id:t}=e;return t}):[],s=new Set([...o,e.id,...a]);t.setRowPinning(e=>n===`bottom`?{top:(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),bottom:[...(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e))),...Array.from(s)]}:n===`top`?{top:[...(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),...Array.from(s)],bottom:(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e)))}:{top:(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),bottom:(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e)))})},e.getCanPin=()=>{let{enableRowPinning:n,enablePinning:r}=t.options;return typeof n==`function`?n(e):n??r??!0},e.getIsPinned=()=>{let n=[e.id],{top:r,bottom:i}=t.getState().rowPinning,a=n.some(e=>r?.includes(e)),o=n.some(e=>i?.includes(e));return a?`top`:o?`bottom`:!1},e.getPinnedIndex=()=>{let n=e.getIsPinned();return n?((n===`top`?t.getTopRows():t.getBottomRows())?.map(e=>{let{id:t}=e;return t}))?.indexOf(e.id)??-1:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>e.setRowPinning(t?U():e.initialState?.rowPinning??U()),e.getIsSomeRowsPinned=t=>{let n=e.getState().rowPinning;return t?!!n[t]?.length:!!(n.top?.length||n.bottom?.length)},e._getPinnedRows=(t,n,r)=>(e.options.keepPinnedRows??!0?(n??[]).map(t=>{let n=e.getRow(t,!0);return n.getIsAllParentsExpanded()?n:null}):(n??[]).map(e=>t.find(t=>t.id===e))).filter(Boolean).map(e=>({...e,position:r})),e.getTopRows=E(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,`top`),D(e.options,`debugRows`,`getTopRows`)),e.getBottomRows=E(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,`bottom`),D(e.options,`debugRows`,`getBottomRows`)),e.getCenterRows=E(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(e,t,n)=>{let r=new Set([...t??[],...n??[]]);return e.filter(e=>!r.has(e.id))},D(e.options,`debugRows`,`getCenterRows`))}},St={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:w(`rowSelection`,e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>e.setRowSelection(t?{}:e.initialState.rowSelection??{}),e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=t===void 0?!e.getIsAllRowsSelected():t;let r={...n},i=e.getPreGroupedRowModel().flatRows;return t?i.forEach(e=>{e.getCanSelect()&&(r[e.id]=!0)}):i.forEach(e=>{delete r[e.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{let r=t===void 0?!e.getIsAllPageRowsSelected():t,i={...n};return e.getRowModel().rows.forEach(t=>{W(i,t.id,r,!0,e)}),i}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=E(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?G(e,n):{rows:[],flatRows:[],rowsById:{}},D(e.options,`debugTable`,`getSelectedRowModel`)),e.getFilteredSelectedRowModel=E(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?G(e,n):{rows:[],flatRows:[],rowsById:{}},D(e.options,`debugTable`,`getFilteredSelectedRowModel`)),e.getGroupedSelectedRowModel=E(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?G(e,n):{rows:[],flatRows:[],rowsById:{}},D(e.options,`debugTable`,`getGroupedSelectedRowModel`)),e.getIsAllRowsSelected=()=>{let t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState(),r=!!(t.length&&Object.keys(n).length);return r&&t.some(e=>e.getCanSelect()&&!n[e.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows.filter(e=>e.getCanSelect()),{rowSelection:n}=e.getState(),r=!!t.length;return r&&t.some(e=>!n[e.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{let t=Object.keys(e.getState().rowSelection??{}).length;return t>0&&t{let t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(e=>e.getCanSelect()).some(e=>e.getIsSelected()||e.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{let i=e.getIsSelected();t.setRowSelection(a=>{if(n=n===void 0?!i:n,e.getCanSelect()&&i===n)return a;let o={...a};return W(o,e.id,n,r?.selectChildren??!0,t),o})},e.getIsSelected=()=>{let{rowSelection:n}=t.getState();return K(e,n)},e.getIsSomeSelected=()=>{let{rowSelection:n}=t.getState();return q(e,n)===`some`},e.getIsAllSubRowsSelected=()=>{let{rowSelection:n}=t.getState();return q(e,n)===`all`},e.getCanSelect=()=>typeof t.options.enableRowSelection==`function`?t.options.enableRowSelection(e):t.options.enableRowSelection??!0,e.getCanSelectSubRows=()=>typeof t.options.enableSubRowSelection==`function`?t.options.enableSubRowSelection(e):t.options.enableSubRowSelection??!0,e.getCanMultiSelect=()=>typeof t.options.enableMultiRowSelection==`function`?t.options.enableMultiRowSelection(e):t.options.enableMultiRowSelection??!0,e.getToggleSelectedHandler=()=>{let t=e.getCanSelect();return n=>{t&&e.toggleSelected(n.target?.checked)}}}},W=(e,t,n,r,i)=>{var a;let o=i.getRow(t,!0);n?(o.getCanMultiSelect()||Object.keys(e).forEach(t=>delete e[t]),o.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(a=o.subRows)!=null&&a.length&&o.getCanSelectSubRows()&&o.subRows.forEach(t=>W(e,t.id,n,r,i))};function G(e,t){let n=e.getState().rowSelection,r=[],i={},a=function(e,t){return e.map(e=>{var t;let o=K(e,n);if(o&&(r.push(e),i[e.id]=e),(t=e.subRows)!=null&&t.length&&(e={...e,subRows:a(e.subRows)}),o)return e}).filter(Boolean)};return{rows:a(t.rows),flatRows:r,rowsById:i}}function K(e,t){return t[e.id]??!1}function q(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let i=!0,a=!1;return e.subRows.forEach(e=>{if(!(a&&!i)&&(e.getCanSelect()&&(K(e,t)?a=!0:i=!1),e.subRows&&e.subRows.length)){let n=q(e,t);n===`all`?a=!0:(n===`some`&&(a=!0),i=!1)}}),i?`all`:a?`some`:!1}var J=/([0-9]+)/gm,Ct=(e,t,n)=>kt(X(e.getValue(n)).toLowerCase(),X(t.getValue(n)).toLowerCase()),wt=(e,t,n)=>kt(X(e.getValue(n)),X(t.getValue(n))),Tt=(e,t,n)=>Y(X(e.getValue(n)).toLowerCase(),X(t.getValue(n)).toLowerCase()),Et=(e,t,n)=>Y(X(e.getValue(n)),X(t.getValue(n))),Dt=(e,t,n)=>{let r=e.getValue(n),i=t.getValue(n);return r>i?1:rY(e.getValue(n),t.getValue(n));function Y(e,t){return e===t?0:e>t?1:-1}function X(e){return typeof e==`number`?isNaN(e)||e===1/0||e===-1/0?``:String(e):typeof e==`string`?e:``}function kt(e,t){let n=e.split(J).filter(Boolean),r=t.split(J).filter(Boolean);for(;n.length&&r.length;){let e=n.shift(),t=r.shift(),i=parseInt(e,10),a=parseInt(t,10),o=[i,a].sort();if(isNaN(o[0])){if(e>t)return 1;if(t>e)return-1;continue}if(isNaN(o[1]))return isNaN(i)?-1:1;if(i>a)return 1;if(a>i)return-1}return n.length-r.length}var Z={alphanumeric:Ct,alphanumericCaseSensitive:wt,text:Tt,textCaseSensitive:Et,datetime:Dt,basic:Ot},At=[Xe,gt,ut,dt,Ze,ot,_t,vt,{getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:`auto`,sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:w(`sorting`,e),isMultiSortEvent:e=>e.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{let n=t.getFilteredRowModel().flatRows.slice(10),r=!1;for(let t of n){let n=t?.getValue(e.id);if(Object.prototype.toString.call(n)===`[object Date]`)return Z.datetime;if(typeof n==`string`&&(r=!0,n.split(J).length>1))return Z.alphanumeric}return r?Z.text:Z.basic},e.getAutoSortDir=()=>typeof t.getFilteredRowModel().flatRows[0]?.getValue(e.id)==`string`?`asc`:`desc`,e.getSortingFn=()=>{if(!e)throw Error();return T(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn===`auto`?e.getAutoSortingFn():t.options.sortingFns?.[e.columnDef.sortingFn]??Z[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{let i=e.getNextSortingOrder(),a=n!=null;t.setSorting(o=>{let s=o?.find(t=>t.id===e.id),c=o?.findIndex(t=>t.id===e.id),l=[],u,d=a?n:i===`desc`;return u=o!=null&&o.length&&e.getCanMultiSort()&&r?s?`toggle`:`add`:o!=null&&o.length&&c!==o.length-1?`replace`:s?`toggle`:`replace`,u===`toggle`&&(a||i||(u=`remove`)),u===`add`?(l=[...o,{id:e.id,desc:d}],l.splice(0,l.length-(t.options.maxMultiSortColCount??2**53-1))):l=u===`toggle`?o.map(t=>t.id===e.id?{...t,desc:d}:t):u===`remove`?o.filter(t=>t.id!==e.id):[{id:e.id,desc:d}],l})},e.getFirstSortDir=()=>e.columnDef.sortDescFirst??t.options.sortDescFirst??e.getAutoSortDir()===`desc`?`desc`:`asc`,e.getNextSortingOrder=n=>{let r=e.getFirstSortDir(),i=e.getIsSorted();return i?i!==r&&(t.options.enableSortingRemoval??!0)&&(!n||(t.options.enableMultiRemove??!0))?!1:i===`desc`?`asc`:`desc`:r},e.getCanSort=()=>(e.columnDef.enableSorting??!0)&&(t.options.enableSorting??!0)&&!!e.accessorFn,e.getCanMultiSort=()=>e.columnDef.enableMultiSort??t.options.enableMultiSort??!!e.accessorFn,e.getIsSorted=()=>{let n=t.getState().sorting?.find(t=>t.id===e.id);return n?n.desc?`desc`:`asc`:!1},e.getSortIndex=()=>t.getState().sorting?.findIndex(t=>t.id===e.id)??-1,e.clearSorting=()=>{t.setSorting(t=>t!=null&&t.length?t.filter(t=>t.id!==e.id):[])},e.getToggleSortingHandler=()=>{let n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{e.setSorting(t?[]:e.initialState?.sorting??[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},ct,yt,bt,xt,St,mt];function jt(e){let t=[...At,...e._features??[]],n={_features:t},r=n._features.reduce((e,t)=>Object.assign(e,t.getDefaultOptions==null?void 0:t.getDefaultOptions(n)),{}),i=e=>n.options.mergeOptions?n.options.mergeOptions(r,e):{...r,...e},a={...e.initialState??{}};n._features.forEach(e=>{a=(e.getInitialState==null?void 0:e.getInitialState(a))??a});let o=[],s=!1,c={_features:t,options:{...r,...e},initialState:a,_queue:e=>{o.push(e),s||(s=!0,Promise.resolve().then(()=>{for(;o.length;)o.shift()();s=!1}).catch(e=>setTimeout(()=>{throw e})))},reset:()=>{n.setState(n.initialState)},setOptions:e=>{n.options=i(C(e,n.options))},getState:()=>n.options.state,setState:e=>{n.options.onStateChange==null||n.options.onStateChange(e)},_getRowId:(e,t,r)=>(n.options.getRowId==null?void 0:n.options.getRowId(e,t,r))??`${r?[r.id,t].join(`.`):t}`,getCoreRowModel:()=>(n._getCoreRowModel||=n.options.getCoreRowModel(n),n._getCoreRowModel()),getRowModel:()=>n.getPaginationRowModel(),getRow:(e,t)=>{let r=(t?n.getPrePaginationRowModel():n.getRowModel()).rowsById[e];if(!r&&(r=n.getCoreRowModel().rowsById[e],!r))throw Error();return r},_getDefaultColumnDef:E(()=>[n.options.defaultColumn],e=>(e??={},{header:e=>{let t=e.header.column.columnDef;return t.accessorKey?t.accessorKey:t.accessorFn?t.id:null},cell:e=>{var t;return((t=e.renderValue())==null||t.toString==null?void 0:t.toString())??null},...n._features.reduce((e,t)=>Object.assign(e,t.getDefaultColumnDef==null?void 0:t.getDefaultColumnDef()),{}),...e}),D(e,`debugColumns`,`_getDefaultColumnDef`)),_getColumnDefs:()=>n.options.columns,getAllColumns:E(()=>[n._getColumnDefs()],e=>{let t=function(e,r,i){return i===void 0&&(i=0),e.map(e=>{let a=Je(n,e,i,r),o=e;return a.columns=o.columns?t(o.columns,a,i+1):[],a})};return t(e)},D(e,`debugColumns`,`getAllColumns`)),getAllFlatColumns:E(()=>[n.getAllColumns()],e=>e.flatMap(e=>e.getFlatColumns()),D(e,`debugColumns`,`getAllFlatColumns`)),_getAllFlatColumnsById:E(()=>[n.getAllFlatColumns()],e=>e.reduce((e,t)=>(e[t.id]=t,e),{}),D(e,`debugColumns`,`getAllFlatColumnsById`)),getAllLeafColumns:E(()=>[n.getAllColumns(),n._getOrderColumnsFn()],(e,t)=>t(e.flatMap(e=>e.getLeafColumns())),D(e,`debugColumns`,`getAllLeafColumns`)),getColumn:e=>n._getAllFlatColumnsById()[e]};Object.assign(n,c);for(let e=0;eE(()=>[e.options.data],t=>{let n={rows:[],flatRows:[],rowsById:{}},r=function(t,i,a){i===void 0&&(i=0);let o=[];for(let c=0;ce._autoResetPageIndex()))}function Nt(){return e=>E(()=>[e.getState().expanded,e.getPreExpandedRowModel(),e.options.paginateExpandedRows],(e,t,n)=>!t.rows.length||e!==!0&&!Object.keys(e??{}).length||!n?t:Pt(t),D(e.options,`debugTable`,`getExpandedRowModel`))}function Pt(e){let t=[],n=e=>{var r;t.push(e),(r=e.subRows)!=null&&r.length&&e.getIsExpanded()&&e.subRows.forEach(n)};return e.rows.forEach(n),{rows:t,flatRows:e.flatRows,rowsById:e.rowsById}}function Ft(e,t,n){return n.options.filterFromLeafRows?It(e,t,n):Lt(e,t,n)}function It(e,t,n){let r=[],i={},a=n.options.maxLeafRowFilterDepth??100,o=function(e,s){s===void 0&&(s=0);let c=[];for(let u=0;uE(()=>[e.getPreFilteredRowModel(),e.getState().columnFilters,e.getState().globalFilter,e.getFilteredRowModel()],(n,r,i)=>{if(!n.rows.length||!(r!=null&&r.length)&&!i)return n;let a=[...r.map(e=>e.id).filter(e=>e!==t),i?`__global__`:void 0].filter(Boolean);return Ft(n.rows,e=>{for(let t=0;tE(()=>[e.getColumn(t)?.getFacetedRowModel()],e=>{if(!e)return new Map;let n=new Map;for(let r=0;rE(()=>[e.getPreFilteredRowModel(),e.getState().columnFilters,e.getState().globalFilter],(t,n,r)=>{if(!t.rows.length||!(n!=null&&n.length)&&!r){for(let e=0;e{let n=e.getColumn(t.id);if(!n)return;let r=n.getFilterFn();r&&i.push({id:t.id,filterFn:r,resolvedValue:(r.resolveFilterValue==null?void 0:r.resolveFilterValue(t.value))??t.value})});let o=(n??[]).map(e=>e.id),s=e.getGlobalFilterFn(),c=e.getAllLeafColumns().filter(e=>e.getCanGlobalFilter());r&&s&&c.length&&(o.push(`__global__`),c.forEach(e=>{a.push({id:e.id,filterFn:s,resolvedValue:(s.resolveFilterValue==null?void 0:s.resolveFilterValue(r))??r})}));let l,u;for(let e=0;e{n.columnFiltersMeta[t]=e})}if(a.length){for(let e=0;e{n.columnFiltersMeta[t]=e})){n.columnFilters.__global__=!0;break}}n.columnFilters.__global__!==!0&&(n.columnFilters.__global__=!1)}}return Ft(t.rows,e=>{for(let t=0;te._autoResetPageIndex()))}function Vt(e){return e=>E(()=>[e.getState().pagination,e.getPrePaginationRowModel(),e.options.paginateExpandedRows?void 0:e.getState().expanded],(t,n)=>{if(!n.rows.length)return n;let{pageSize:r,pageIndex:i}=t,{rows:a,flatRows:o,rowsById:s}=n,c=r*i,l=c+r;a=a.slice(c,l);let u;u=e.options.paginateExpandedRows?{rows:a,flatRows:o,rowsById:s}:Pt({rows:a,flatRows:o,rowsById:s}),u.flatRows=[];let d=e=>{u.flatRows.push(e),e.subRows.length&&e.subRows.forEach(d)};return u.rows.forEach(d),u},D(e.options,`debugTable`,`getPaginationRowModel`))}function Ht(){return e=>E(()=>[e.getState().sorting,e.getPreSortedRowModel()],(t,n)=>{if(!n.rows.length||!(t!=null&&t.length))return n;let r=e.getState().sorting,i=[],a=r.filter(t=>e.getColumn(t.id)?.getCanSort()),o={};a.forEach(t=>{let n=e.getColumn(t.id);n&&(o[t.id]={sortUndefined:n.columnDef.sortUndefined,invertSorting:n.columnDef.invertSorting,sortingFn:n.getSortingFn()})});let s=e=>{let t=e.map(e=>({...e}));return t.sort((e,t)=>{for(let n=0;n{var t;i.push(e),(t=e.subRows)!=null&&t.length&&(e.subRows=s(e.subRows))}),t};return{rows:s(n.rows),flatRows:i,rowsById:n.rowsById}},D(e.options,`debugTable`,`getSortedRowModel`,()=>e._autoResetPageIndex()))}function Ut(e,t){return e?Wt(e)?x.createElement(e,t):e:null}function Wt(e){return Gt(e)||typeof e==`function`||Kt(e)}function Gt(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function Kt(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function qt(e){let t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=x.useState(()=>({current:jt(t)})),[r,i]=x.useState(()=>n.current.initialState);return n.current.setOptions(t=>({...t,...e,state:{...r,...e.state},onStateChange:t=>{i(t),e.onStateChange==null||e.onStateChange(t)}})),n.current}function Jt({column:e,title:t,className:n}){return e.getCanSort()?(0,S.jsx)(`div`,{className:_(`flex items-center space-x-2`,n),children:(0,S.jsxs)(ue,{children:[(0,S.jsx)(ae,{asChild:!0,children:(0,S.jsxs)(v,{className:`h-8 data-[state=open]:bg-accent`,size:`sm`,variant:`ghost`,children:[(0,S.jsx)(`span`,{children:t}),(()=>{let t=e.getIsSorted();return t===`desc`?(0,S.jsx)(ze,{className:`ms-2 h-4 w-4`}):t===`asc`?(0,S.jsx)(Be,{className:`ms-2 h-4 w-4`}):(0,S.jsx)(we,{className:`ms-2 h-4 w-4`})})()]})}),(0,S.jsxs)(ce,{align:`start`,children:[(0,S.jsxs)(y,{onClick:()=>e.toggleSorting(!1),children:[(0,S.jsx)(Be,{className:`size-3.5 text-muted-foreground/70`}),o()]}),(0,S.jsxs)(y,{onClick:()=>e.toggleSorting(!0),children:[(0,S.jsx)(ze,{className:`size-3.5 text-muted-foreground/70`}),u()]}),e.getCanHide()&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(le,{}),(0,S.jsxs)(y,{onClick:()=>e.toggleVisibility(!1),children:[(0,S.jsx)(Te,{className:`size-3.5 text-muted-foreground/70`}),m()]})]})]})]})}):(0,S.jsx)(`div`,{className:_(`px-2`,n),children:t})}function Yt({className:e,...t}){return(0,S.jsx)(`div`,{className:`relative w-full overflow-x-auto`,"data-slot":`table-container`,children:(0,S.jsx)(`table`,{className:_(`w-full caption-bottom text-sm`,e),"data-slot":`table`,...t})})}function Xt({className:e,...t}){return(0,S.jsx)(`thead`,{className:_(`[&_tr]:border-b`,e),"data-slot":`table-header`,...t})}function Zt({className:e,...t}){return(0,S.jsx)(`tbody`,{className:_(`[&_tr:last-child]:border-0`,e),"data-slot":`table-body`,...t})}function Q({className:e,...t}){return(0,S.jsx)(`tr`,{className:_(`border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted`,e),"data-slot":`table-row`,...t})}function Qt({className:e,...t}){return(0,S.jsx)(`th`,{className:_(`h-10 whitespace-nowrap px-2 text-left align-middle font-medium text-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),"data-slot":`table-head`,...t})}function $({className:e,...t}){return(0,S.jsx)(`td`,{className:_(`whitespace-nowrap p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),"data-slot":`table-cell`,...t})}var $t={switch:`h-5 w-9 rounded-full`,action:`h-8 w-8 rounded-md`,badge:`h-5 rounded-full`,id:`h-4`,date:`h-4`,short:`h-4`,long:`h-4`,amount:`h-4`};function en({type:e=`long`}){return(0,S.jsx)(pe,{className:$t[e]})}var tn=`group/row`,nn=ie(`bg-background group-hover/row:bg-muted group-data-[state=selected]/row:bg-muted`,{variants:{sticky:{left:`sticky inset-s-0 z-10`,right:`sticky inset-e-0 z-10`,none:``},shadow:{true:``,false:``},skeleton:{action:`w-8`,switch:`w-9`,badge:``,id:``,date:``,short:``,long:``,amount:``,none:``}},compoundVariants:[{sticky:`left`,shadow:!0,class:`drop-shadow-[0_1px_2px_rgb(0_0_0/_0.1)] dark:drop-shadow-[0_1px_2px_rgb(255_255_255/_0.1)]`},{sticky:`right`,shadow:!0,class:`drop-shadow-[0_-1px_2px_rgb(0_0_0/_0.1)] dark:drop-shadow-[0_-1px_2px_rgb(255_255_255/_0.1)]`}],defaultVariants:{sticky:`none`,shadow:!0,skeleton:`none`}});function rn(e){return _(`px-4`,nn({sticky:e?.sticky,shadow:e?.shadow,skeleton:e?.skeleton}),e?.className,e?.td?.className)}function an(e){return _(nn({sticky:e?.sticky,shadow:e?.shadow,skeleton:e?.skeleton}),e?.className,e?.th?.className)}function on({table:e,loadingRows:t}){let n=e.getVisibleLeafColumns();return(0,S.jsx)(S.Fragment,{children:Array.from({length:t},(e,t)=>(0,S.jsx)(Q,{className:tn,children:n.map(e=>{let t=e.columnDef.meta;return(0,S.jsx)($,{className:rn(t),children:(0,S.jsx)(en,{type:t?.skeleton??`long`})},e.id)})},`skeleton-${t}`))})}function sn({table:e,renderExpandedRow:t}){return(0,S.jsx)(S.Fragment,{children:e.getRowModel().rows.map(e=>{let n=(0,S.jsx)(Q,{className:_(tn,e.depth>0&&`bg-muted/40`),"data-state":e.getIsSelected()?`selected`:void 0,children:e.getVisibleCells().map(e=>{let t=e.column.columnDef.meta;return(0,S.jsx)($,{className:rn(t),children:Ut(e.column.columnDef.cell,e.getContext())},e.id)})},e.id);return t&&e.getIsExpanded()?(0,S.jsxs)(x.Fragment,{children:[n,(0,S.jsx)(Q,{children:(0,S.jsx)($,{className:`bg-background p-4`,colSpan:e.getVisibleCells().length,children:t(e)})})]},e.id):n})})}function cn({colSpan:e,text:t}){return(0,S.jsx)(Q,{children:(0,S.jsx)($,{className:`p-0`,colSpan:e,children:(0,S.jsx)(Oe,{description:t})})})}function ln({table:e,className:t,emptyText:n=h(),loading:r=!1,loadingRows:i=10,renderExpandedRow:a}){let o=e.getVisibleLeafColumns(),s=e.getRowModel().rows,c=r||s.length>0;function l(){return r?(0,S.jsx)(on,{loadingRows:i,table:e}):s.length?(0,S.jsx)(sn,{renderExpandedRow:a,table:e}):(0,S.jsx)(cn,{colSpan:o.length,text:n})}return(0,S.jsx)(`div`,{className:`overflow-x-auto rounded-md border`,children:(0,S.jsxs)(Yt,{className:t,children:[c&&(0,S.jsx)(Xt,{children:e.getHeaderGroups().map(e=>(0,S.jsx)(Q,{className:tn,children:e.headers.map(e=>{let t=e.column.columnDef.meta;return(0,S.jsx)(Qt,{className:an(t),colSpan:e.colSpan,children:e.isPlaceholder?null:Ut(e.column.columnDef.header,e.getContext())},e.id)})},e.id))}),(0,S.jsx)(Zt,{children:l()})]})})}function un({table:e,className:t}){let n=e.getState().pagination.pageIndex+1,o=e.getPageCount(),s=re(n,o);return(0,S.jsxs)(`div`,{className:_(`flex items-center justify-between`,`@max-2xl/content:flex-col-reverse @max-2xl/content:gap-4`,t),children:[(0,S.jsxs)(`div`,{className:`flex w-full items-center justify-between`,children:[(0,S.jsx)(`div`,{className:`flex @2xl/content:hidden w-auto items-center justify-center whitespace-nowrap font-medium text-sm`,children:a({current:n,total:o})}),(0,S.jsxs)(`div`,{className:`flex @max-2xl/content:flex-row-reverse items-center gap-2`,children:[(0,S.jsxs)(xe,{onValueChange:t=>{e.setPageSize(Number(t))},value:`${e.getState().pagination.pageSize}`,children:[(0,S.jsx)(ve,{className:`h-8 w-17.5`,children:(0,S.jsx)(_e,{placeholder:e.getState().pagination.pageSize})}),(0,S.jsx)(ye,{side:`top`,children:[10,20,30,40,50].map(e=>(0,S.jsx)(be,{value:`${e}`,children:e},e))})]}),(0,S.jsx)(`p`,{className:`hidden font-medium text-sm sm:block`,children:i()})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center sm:space-x-6 lg:space-x-8`,children:[(0,S.jsx)(`div`,{className:`flex @max-3xl/content:hidden w-auto items-center justify-center whitespace-nowrap font-medium text-sm`,children:a({current:n,total:o})}),(0,S.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,S.jsxs)(v,{className:`@max-md/content:hidden size-8 p-0`,disabled:!e.getCanPreviousPage(),onClick:()=>e.setPageIndex(0),variant:`outline`,children:[(0,S.jsx)(`span`,{className:`sr-only`,children:ne()}),(0,S.jsx)(He,{className:`h-4 w-4`})]}),(0,S.jsxs)(v,{className:`size-8 p-0`,disabled:!e.getCanPreviousPage(),onClick:()=>e.previousPage(),variant:`outline`,children:[(0,S.jsx)(`span`,{className:`sr-only`,children:l()}),(0,S.jsx)(Ve,{className:`h-4 w-4`})]}),s.map((t,i)=>(0,S.jsx)(`div`,{className:`flex items-center`,children:t===`...`?(0,S.jsx)(`span`,{className:`px-1 text-muted-foreground text-sm`,children:`...`}):(0,S.jsxs)(v,{className:`h-8 min-w-8 px-2`,onClick:()=>e.setPageIndex(t-1),variant:n===t?`default`:`outline`,children:[(0,S.jsx)(`span`,{className:`sr-only`,children:r({page:t})}),t]})},`page-${t}-${i}`)),(0,S.jsxs)(v,{className:`size-8 p-0`,disabled:!e.getCanNextPage(),onClick:()=>e.nextPage(),variant:`outline`,children:[(0,S.jsx)(`span`,{className:`sr-only`,children:ee()}),(0,S.jsx)(fe,{className:`h-4 w-4`})]}),(0,S.jsxs)(v,{className:`@max-md/content:hidden size-8 p-0`,disabled:!e.getCanNextPage(),onClick:()=>e.setPageIndex(e.getPageCount()-1),variant:`outline`,children:[(0,S.jsx)(`span`,{className:`sr-only`,children:p()}),(0,S.jsx)(Ue,{className:`h-4 w-4`})]})]})]})]})}function dn({column:e,title:t,options:n}){let r=e?.getFacetedUniqueValues(),i=new Set(e?.getFilterValue());return(0,S.jsxs)(ge,{children:[(0,S.jsx)(he,{asChild:!0,children:(0,S.jsxs)(v,{className:`h-8 border-dashed`,size:`sm`,variant:`outline`,children:[(0,S.jsx)(We,{className:`size-4`}),t,i?.size>0&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(Se,{className:`mx-2 h-4`,orientation:`vertical`}),(0,S.jsx)(Re,{className:`rounded-sm px-1 font-normal lg:hidden`,variant:`secondary`,children:i.size}),(0,S.jsx)(`div`,{className:`hidden space-x-1 lg:flex`,children:i.size>2?(0,S.jsxs)(Re,{className:`rounded-sm px-1 font-normal`,variant:`secondary`,children:[i.size,` selected`]}):n.filter(e=>i.has(e.value)).map(e=>(0,S.jsx)(Re,{className:`rounded-sm px-1 font-normal`,variant:`secondary`,children:e.label},e.value))})]})]})}),(0,S.jsx)(me,{align:`start`,className:`w-50 p-0`,children:(0,S.jsxs)(Ie,{children:[(0,S.jsx)(ke,{placeholder:t}),(0,S.jsxs)(Fe,{children:[(0,S.jsx)(Pe,{children:c()}),(0,S.jsx)(Me,{children:n.map(t=>{let n=i.has(t.value);return(0,S.jsxs)(Ne,{onSelect:()=>{n?i.delete(t.value):i.add(t.value);let r=Array.from(i);e?.setFilterValue(r.length?r:void 0)},children:[(0,S.jsx)(`div`,{className:_(`flex size-4 items-center justify-center rounded-sm border border-primary`,n?`bg-primary text-primary-foreground`:`opacity-50 [&_svg]:invisible`),children:(0,S.jsx)(Ce,{className:_(`h-4 w-4 text-background`)})}),t.icon&&(0,S.jsx)(t.icon,{className:`size-4 text-muted-foreground`}),(0,S.jsx)(`span`,{children:t.label}),r?.get(t.value)&&(0,S.jsx)(`span`,{className:`ms-auto flex h-4 w-4 items-center justify-center font-mono text-xs`,children:r.get(t.value)})]},t.value)})}),i.size>0&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(Ae,{}),(0,S.jsx)(Me,{children:(0,S.jsx)(Ne,{className:`justify-center text-center`,onSelect:()=>e?.setFilterValue(void 0),children:`Clear filters`})})]})]})]})})]})}function fn(e){let t=e.columnDef.meta?.label;if(typeof t==`string`&&t.trim())return t;let n=e.columnDef.header;return typeof n==`string`&&n.trim()?n:e.id}function pn({table:e}){return(0,S.jsxs)(ue,{modal:!1,children:[(0,S.jsx)(de,{asChild:!0,children:(0,S.jsxs)(v,{className:`ms-auto hidden h-8 lg:flex`,size:`sm`,variant:`outline`,children:[(0,S.jsx)(Ee,{className:`size-4`}),f()]})}),(0,S.jsxs)(ce,{align:`end`,className:`w-37.5`,children:[(0,S.jsx)(se,{children:te()}),(0,S.jsx)(le,{}),e.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide()).map(e=>(0,S.jsx)(oe,{checked:e.getIsVisible(),className:`capitalize`,onCheckedChange:t=>e.toggleVisibility(!!t),children:fn(e)},e.id))]})]})}function mn({table:e,searchPlaceholder:t=n(),searchKey:r,filters:i=[],onRefresh:a}){let o=e.getState().columnFilters.length>0||e.getState().globalFilter;return(0,S.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,S.jsxs)(`div`,{className:`flex flex-1 flex-col-reverse items-start gap-y-2 sm:flex-row sm:items-center sm:space-x-2`,children:[r?(0,S.jsx)(Le,{className:`h-8 w-37.5 lg:w-62.5`,onChange:t=>e.getColumn(r)?.setFilterValue(t.target.value),placeholder:t,value:e.getColumn(r)?.getFilterValue()??``}):(0,S.jsx)(Le,{className:`h-8 w-37.5 lg:w-62.5`,onChange:t=>e.setGlobalFilter(t.target.value),placeholder:t,value:e.getState().globalFilter??``}),(0,S.jsx)(`div`,{className:`flex gap-x-2`,children:i.map(t=>{let n=e.getColumn(t.columnId);return n?(0,S.jsx)(dn,{column:n,options:t.options,title:t.title},t.columnId):null})}),o&&(0,S.jsxs)(v,{className:`h-8 px-2 lg:px-3`,onClick:()=>{e.resetColumnFilters(),e.setGlobalFilter(``)},variant:`ghost`,children:[s(),(0,S.jsx)(je,{className:`ms-2 h-4 w-4`})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[a&&(0,S.jsx)(hn,{onRefresh:a}),(0,S.jsx)(pn,{table:e})]})]})}function hn({onRefresh:e}){let[t,n]=(0,x.useState)(!1);return(0,S.jsxs)(v,{className:`hidden h-8 lg:flex`,disabled:t,onClick:(0,x.useCallback)(async()=>{n(!0);try{await e()}catch{}finally{setTimeout(()=>n(!1),500)}},[e]),size:`sm`,variant:`outline`,children:[(0,S.jsx)(De,{className:_(`size-4`,t&&`animate-spin`)}),g()]})}export{Bt as _,Yt as a,Ve as b,Qt as c,Jt as d,qt as f,zt as g,Rt as h,en as i,Xt as l,Nt as m,un as n,Zt as o,Mt as p,ln as r,$ as s,mn as t,Q as u,Vt as v,Ht as y}; \ No newline at end of file diff --git a/src/www/assets/display-BGnhCcSb.js b/src/www/assets/display-BGnhCcSb.js new file mode 100644 index 0000000..87f2019 --- /dev/null +++ b/src/www/assets/display-BGnhCcSb.js @@ -0,0 +1 @@ +import{$ as e,Q as t,Qu as n,X as r,Y as i,Z as a,at as o,et as s,it as c,nt as l,ot as u,rt as d,tt as f}from"./messages-BOl-zx8S.js";import{t as p}from"./button-D-oR8d6w.js";import{t as m}from"./checkbox-D_bL2Pt-.js";import{c as h,i as g,s as _}from"./zod-DzRgHmfz.js";import{a as v,c as y,i as b,l as x,n as S,o as C,r as w,s as T,t as E}from"./form-uKra2bmF.js";import{t as D}from"./page-header-BRM1dngJ.js";import{t as O}from"./show-submitted-data-sbgXi_a9.js";var k=n(),A=[{id:`recents`,label:c()},{id:`home`,label:d()},{id:`applications`,label:l()},{id:`desktop`,label:f()},{id:`downloads`,label:s()},{id:`documents`,label:e()}],j=_({items:g(h()).refine(e=>e.some(e=>e),{message:t()})}),M={items:[`recents`,`home`]};function N(){let e=x({resolver:y(j),defaultValues:M});return(0,k.jsx)(E,{...e,children:(0,k.jsxs)(`form`,{className:`space-y-8`,onSubmit:e.handleSubmit(e=>O(e)),children:[(0,k.jsx)(b,{control:e.control,name:`items`,render:()=>(0,k.jsxs)(v,{children:[(0,k.jsxs)(`div`,{className:`mb-4`,children:[(0,k.jsx)(C,{className:`text-base`,children:a()}),(0,k.jsx)(w,{children:r()})]}),A.map(t=>(0,k.jsx)(b,{control:e.control,name:`items`,render:({field:e})=>(0,k.jsxs)(v,{className:`flex flex-row items-start`,children:[(0,k.jsx)(S,{children:(0,k.jsx)(m,{checked:e.value?.includes(t.id),onCheckedChange:n=>n?e.onChange([...e.value,t.id]):e.onChange(e.value?.filter(e=>e!==t.id))})}),(0,k.jsx)(C,{className:`font-normal`,children:t.label})]},t.id)},t.id)),(0,k.jsx)(T,{})]})}),(0,k.jsx)(p,{type:`submit`,children:i()})]})})}function P(){return(0,k.jsx)(D,{description:o(),title:u(),variant:`section`,children:(0,k.jsx)(N,{})})}var F=P;export{F as component}; \ No newline at end of file diff --git a/src/www/assets/dist-BNiRpK39.js b/src/www/assets/dist-BNiRpK39.js new file mode 100644 index 0000000..b9fd75d --- /dev/null +++ b/src/www/assets/dist-BNiRpK39.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";import{r as n}from"./dist-DJhZSa1-.js";var r=t(e(),1),i=t(n(),1);function a(e){if(!e||typeof document>`u`)return;let t=document.head||document.getElementsByTagName(`head`)[0],n=document.createElement(`style`);n.type=`text/css`,t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}var o=e=>{switch(e){case`success`:return l;case`info`:return d;case`warning`:return u;case`error`:return f;default:return null}},s=Array(12).fill(0),c=({visible:e,className:t})=>r.createElement(`div`,{className:[`sonner-loading-wrapper`,t].filter(Boolean).join(` `),"data-visible":e},r.createElement(`div`,{className:`sonner-spinner`},s.map((e,t)=>r.createElement(`div`,{className:`sonner-loading-bar`,key:`spinner-bar-${t}`})))),l=r.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},r.createElement(`path`,{fillRule:`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z`,clipRule:`evenodd`})),u=r.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`currentColor`,height:`20`,width:`20`},r.createElement(`path`,{fillRule:`evenodd`,d:`M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z`,clipRule:`evenodd`})),d=r.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},r.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z`,clipRule:`evenodd`})),f=r.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},r.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z`,clipRule:`evenodd`})),p=r.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`},r.createElement(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),r.createElement(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})),ee=()=>{let[e,t]=r.useState(document.hidden);return r.useEffect(()=>{let e=()=>{t(document.hidden)};return document.addEventListener(`visibilitychange`,e),()=>window.removeEventListener(`visibilitychange`,e)},[]),e},m=1,h=new class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{let{message:t,...n}=e,r=typeof e?.id==`number`||e.id?.length>0?e.id:m++,i=this.toasts.find(e=>e.id===r),a=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(r)&&this.dismissedToasts.delete(r),i?this.toasts=this.toasts.map(n=>n.id===r?(this.publish({...n,...e,id:r,title:t}),{...n,...e,id:r,dismissible:a,title:t}):n):this.addToast({title:t,...n,dismissible:a,id:r}),r},this.dismiss=e=>(e?(this.dismissedToasts.add(e),requestAnimationFrame(()=>this.subscribers.forEach(t=>t({id:e,dismiss:!0})))):this.toasts.forEach(e=>{this.subscribers.forEach(t=>t({id:e.id,dismiss:!0}))}),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:`error`}),this.success=(e,t)=>this.create({...t,type:`success`,message:e}),this.info=(e,t)=>this.create({...t,type:`info`,message:e}),this.warning=(e,t)=>this.create({...t,type:`warning`,message:e}),this.loading=(e,t)=>this.create({...t,type:`loading`,message:e}),this.promise=(e,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:e,type:`loading`,message:t.loading,description:typeof t.description==`function`?void 0:t.description}));let i=Promise.resolve(e instanceof Function?e():e),a=n!==void 0,o,s=i.then(async e=>{if(o=[`resolve`,e],r.isValidElement(e))a=!1,this.create({id:n,type:`default`,message:e});else if(_(e)&&!e.ok){a=!1;let i=typeof t.error==`function`?await t.error(`HTTP error! status: ${e.status}`):t.error,o=typeof t.description==`function`?await t.description(`HTTP error! status: ${e.status}`):t.description,s=typeof i==`object`&&!r.isValidElement(i)?i:{message:i};this.create({id:n,type:`error`,description:o,...s})}else if(e instanceof Error){a=!1;let i=typeof t.error==`function`?await t.error(e):t.error,o=typeof t.description==`function`?await t.description(e):t.description,s=typeof i==`object`&&!r.isValidElement(i)?i:{message:i};this.create({id:n,type:`error`,description:o,...s})}else if(t.success!==void 0){a=!1;let i=typeof t.success==`function`?await t.success(e):t.success,o=typeof t.description==`function`?await t.description(e):t.description,s=typeof i==`object`&&!r.isValidElement(i)?i:{message:i};this.create({id:n,type:`success`,description:o,...s})}}).catch(async e=>{if(o=[`reject`,e],t.error!==void 0){a=!1;let i=typeof t.error==`function`?await t.error(e):t.error,o=typeof t.description==`function`?await t.description(e):t.description,s=typeof i==`object`&&!r.isValidElement(i)?i:{message:i};this.create({id:n,type:`error`,description:o,...s})}}).finally(()=>{a&&(this.dismiss(n),n=void 0),t.finally==null||t.finally.call(t)}),c=()=>new Promise((e,t)=>s.then(()=>o[0]===`reject`?t(o[1]):e(o[1])).catch(t));return typeof n!=`string`&&typeof n!=`number`?{unwrap:c}:Object.assign(n,{unwrap:c})},this.custom=(e,t)=>{let n=t?.id||m++;return this.create({jsx:e(n),id:n,...t}),n},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},g=(e,t)=>{let n=t?.id||m++;return h.addToast({title:e,...t,id:n}),n},_=e=>e&&typeof e==`object`&&`ok`in e&&typeof e.ok==`boolean`&&`status`in e&&typeof e.status==`number`,v=Object.assign(g,{success:h.success,info:h.info,warning:h.warning,error:h.error,custom:h.custom,message:h.message,promise:h.promise,dismiss:h.dismiss,loading:h.loading},{getHistory:()=>h.toasts,getToasts:()=>h.getActiveToasts()});a(`[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}`);function y(e){return e.label!==void 0}var te=3,b=`24px`,x=`16px`,S=4e3,C=356,w=14,T=45,E=200;function D(...e){return e.filter(Boolean).join(` `)}function ne(e){let[t,n]=e.split(`-`),r=[];return t&&r.push(t),n&&r.push(n),r}var O=e=>{let{invert:t,toast:n,unstyled:i,interacting:a,setHeights:s,visibleToasts:l,heights:u,index:d,toasts:f,expanded:m,removeToast:h,defaultRichColors:g,closeButton:_,style:v,cancelButtonStyle:te,actionButtonStyle:b,className:x=``,descriptionClassName:C=``,duration:w,position:O,gap:k,expandByDefault:A,classNames:j,icons:M,closeButtonAriaLabel:re=`Close toast`}=e,[N,P]=r.useState(null),[F,ie]=r.useState(null),[I,L]=r.useState(!1),[R,z]=r.useState(!1),[B,V]=r.useState(!1),[ae,oe]=r.useState(!1),[se,ce]=r.useState(!1),[le,H]=r.useState(0),[ue,U]=r.useState(0),W=r.useRef(n.duration||w||S),de=r.useRef(null),G=r.useRef(null),fe=d===0,pe=d+1<=l,K=n.type,q=n.dismissible!==!1,me=n.className||``,he=n.descriptionClassName||``,J=r.useMemo(()=>u.findIndex(e=>e.toastId===n.id)||0,[u,n.id]),ge=r.useMemo(()=>n.closeButton??_,[n.closeButton,_]),_e=r.useMemo(()=>n.duration||w||S,[n.duration,w]),Y=r.useRef(0),X=r.useRef(0),ve=r.useRef(0),Z=r.useRef(null),[ye,be]=O.split(`-`),xe=r.useMemo(()=>u.reduce((e,t,n)=>n>=J?e:e+t.height,0),[u,J]),Se=ee(),Ce=n.invert||t,Q=K===`loading`;X.current=r.useMemo(()=>J*k+xe,[J,xe]),r.useEffect(()=>{W.current=_e},[_e]),r.useEffect(()=>{L(!0)},[]),r.useEffect(()=>{let e=G.current;if(e){let t=e.getBoundingClientRect().height;return U(t),s(e=>[{toastId:n.id,height:t,position:n.position},...e]),()=>s(e=>e.filter(e=>e.toastId!==n.id))}},[s,n.id]),r.useLayoutEffect(()=>{if(!I)return;let e=G.current,t=e.style.height;e.style.height=`auto`;let r=e.getBoundingClientRect().height;e.style.height=t,U(r),s(e=>e.find(e=>e.toastId===n.id)?e.map(e=>e.toastId===n.id?{...e,height:r}:e):[{toastId:n.id,height:r,position:n.position},...e])},[I,n.title,n.description,s,n.id,n.jsx,n.action,n.cancel]);let $=r.useCallback(()=>{z(!0),H(X.current),s(e=>e.filter(e=>e.toastId!==n.id)),setTimeout(()=>{h(n)},E)},[n,h,s,X]);r.useEffect(()=>{if(n.promise&&K===`loading`||n.duration===1/0||n.type===`loading`)return;let e;return m||a||Se?(()=>{if(ve.current{n.onAutoClose==null||n.onAutoClose.call(n,n),$()},W.current)),()=>clearTimeout(e)},[m,a,n,K,Se,$]),r.useEffect(()=>{n.delete&&($(),n.onDismiss==null||n.onDismiss.call(n,n))},[$,n.delete]);function we(){return M?.loading?r.createElement(`div`,{className:D(j?.loader,n?.classNames?.loader,`sonner-loader`),"data-visible":K===`loading`},M.loading):r.createElement(c,{className:D(j?.loader,n?.classNames?.loader),visible:K===`loading`})}let Te=n.icon||M?.[K]||o(K);return r.createElement(`li`,{tabIndex:0,ref:G,className:D(x,me,j?.toast,n?.classNames?.toast,j?.default,j?.[K],n?.classNames?.[K]),"data-sonner-toast":``,"data-rich-colors":n.richColors??g,"data-styled":!(n.jsx||n.unstyled||i),"data-mounted":I,"data-promise":!!n.promise,"data-swiped":se,"data-removed":R,"data-visible":pe,"data-y-position":ye,"data-x-position":be,"data-index":d,"data-front":fe,"data-swiping":B,"data-dismissible":q,"data-type":K,"data-invert":Ce,"data-swipe-out":ae,"data-swipe-direction":F,"data-expanded":!!(m||A&&I),"data-testid":n.testId,style:{"--index":d,"--toasts-before":d,"--z-index":f.length-d,"--offset":`${R?le:X.current}px`,"--initial-height":A?`auto`:`${ue}px`,...v,...n.style},onDragEnd:()=>{V(!1),P(null),Z.current=null},onPointerDown:e=>{e.button!==2&&(Q||!q||(de.current=new Date,H(X.current),e.target.setPointerCapture(e.pointerId),e.target.tagName!==`BUTTON`&&(V(!0),Z.current={x:e.clientX,y:e.clientY})))},onPointerUp:()=>{if(ae||!q)return;Z.current=null;let e=Number(G.current?.style.getPropertyValue(`--swipe-amount-x`).replace(`px`,``)||0),t=Number(G.current?.style.getPropertyValue(`--swipe-amount-y`).replace(`px`,``)||0),r=new Date().getTime()-de.current?.getTime(),i=N===`x`?e:t,a=Math.abs(i)/r;if(Math.abs(i)>=T||a>.11){H(X.current),n.onDismiss==null||n.onDismiss.call(n,n),ie(N===`x`?e>0?`right`:`left`:t>0?`down`:`up`),$(),oe(!0);return}else{var o,s;(o=G.current)==null||o.style.setProperty(`--swipe-amount-x`,`0px`),(s=G.current)==null||s.style.setProperty(`--swipe-amount-y`,`0px`)}ce(!1),V(!1),P(null)},onPointerMove:t=>{var n,r;if(!Z.current||!q||window.getSelection()?.toString().length>0)return;let i=t.clientY-Z.current.y,a=t.clientX-Z.current.x,o=e.swipeDirections??ne(O);!N&&(Math.abs(a)>1||Math.abs(i)>1)&&P(Math.abs(a)>Math.abs(i)?`x`:`y`);let s={x:0,y:0},c=e=>1/(1.5+Math.abs(e)/20);if(N===`y`){if(o.includes(`top`)||o.includes(`bottom`))if(o.includes(`top`)&&i<0||o.includes(`bottom`)&&i>0)s.y=i;else{let e=i*c(i);s.y=Math.abs(e)0)s.x=a;else{let e=a*c(a);s.x=Math.abs(e)0||Math.abs(s.y)>0)&&ce(!0),(n=G.current)==null||n.style.setProperty(`--swipe-amount-x`,`${s.x}px`),(r=G.current)==null||r.style.setProperty(`--swipe-amount-y`,`${s.y}px`)}},ge&&!n.jsx&&K!==`loading`?r.createElement(`button`,{"aria-label":re,"data-disabled":Q,"data-close-button":!0,onClick:Q||!q?()=>{}:()=>{$(),n.onDismiss==null||n.onDismiss.call(n,n)},className:D(j?.closeButton,n?.classNames?.closeButton)},M?.close??p):null,(K||n.icon||n.promise)&&n.icon!==null&&(M?.[K]!==null||n.icon)?r.createElement(`div`,{"data-icon":``,className:D(j?.icon,n?.classNames?.icon)},n.promise||n.type===`loading`&&!n.icon?n.icon||we():null,n.type===`loading`?null:Te):null,r.createElement(`div`,{"data-content":``,className:D(j?.content,n?.classNames?.content)},r.createElement(`div`,{"data-title":``,className:D(j?.title,n?.classNames?.title)},n.jsx?n.jsx:typeof n.title==`function`?n.title():n.title),n.description?r.createElement(`div`,{"data-description":``,className:D(C,he,j?.description,n?.classNames?.description)},typeof n.description==`function`?n.description():n.description):null),r.isValidElement(n.cancel)?n.cancel:n.cancel&&y(n.cancel)?r.createElement(`button`,{"data-button":!0,"data-cancel":!0,style:n.cancelButtonStyle||te,onClick:e=>{y(n.cancel)&&q&&(n.cancel.onClick==null||n.cancel.onClick.call(n.cancel,e),$())},className:D(j?.cancelButton,n?.classNames?.cancelButton)},n.cancel.label):null,r.isValidElement(n.action)?n.action:n.action&&y(n.action)?r.createElement(`button`,{"data-button":!0,"data-action":!0,style:n.actionButtonStyle||b,onClick:e=>{y(n.action)&&(n.action.onClick==null||n.action.onClick.call(n.action,e),!e.defaultPrevented&&$())},className:D(j?.actionButton,n?.classNames?.actionButton)},n.action.label):null)};function k(){if(typeof window>`u`||typeof document>`u`)return`ltr`;let e=document.documentElement.getAttribute(`dir`);return e===`auto`||!e?window.getComputedStyle(document.documentElement).direction:e}function A(e,t){let n={};return[e,t].forEach((e,t)=>{let r=t===1,i=r?`--mobile-offset`:`--offset`,a=r?x:b;function o(e){[`top`,`right`,`bottom`,`left`].forEach(t=>{n[`${i}-${t}`]=typeof e==`number`?`${e}px`:e})}typeof e==`number`||typeof e==`string`?o(e):typeof e==`object`?[`top`,`right`,`bottom`,`left`].forEach(t=>{e[t]===void 0?n[`${i}-${t}`]=a:n[`${i}-${t}`]=typeof e[t]==`number`?`${e[t]}px`:e[t]}):o(a)}),n}var j=r.forwardRef(function(e,t){let{id:n,invert:a,position:o=`bottom-right`,hotkey:s=[`altKey`,`KeyT`],expand:c,closeButton:l,className:u,offset:d,mobileOffset:f,theme:p=`light`,richColors:ee,duration:m,style:g,visibleToasts:_=te,toastOptions:v,dir:y=k(),gap:b=w,icons:x,containerAriaLabel:S=`Notifications`}=e,[T,E]=r.useState([]),D=r.useMemo(()=>n?T.filter(e=>e.toasterId===n):T.filter(e=>!e.toasterId),[T,n]),ne=r.useMemo(()=>Array.from(new Set([o].concat(D.filter(e=>e.position).map(e=>e.position)))),[D,o]),[j,M]=r.useState([]),[re,N]=r.useState(!1),[P,F]=r.useState(!1),[ie,I]=r.useState(p===`system`?typeof window<`u`&&window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:p),L=r.useRef(null),R=s.join(`+`).replace(/Key/g,``).replace(/Digit/g,``),z=r.useRef(null),B=r.useRef(!1),V=r.useCallback(e=>{E(t=>(t.find(t=>t.id===e.id)?.delete||h.dismiss(e.id),t.filter(({id:t})=>t!==e.id)))},[]);return r.useEffect(()=>h.subscribe(e=>{if(e.dismiss){requestAnimationFrame(()=>{E(t=>t.map(t=>t.id===e.id?{...t,delete:!0}:t))});return}setTimeout(()=>{i.flushSync(()=>{E(t=>{let n=t.findIndex(t=>t.id===e.id);return n===-1?[e,...t]:[...t.slice(0,n),{...t[n],...e},...t.slice(n+1)]})})})}),[T]),r.useEffect(()=>{if(p!==`system`){I(p);return}if(p===`system`&&(window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?I(`dark`):I(`light`)),typeof window>`u`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`);try{e.addEventListener(`change`,({matches:e})=>{I(e?`dark`:`light`)})}catch{e.addListener(({matches:e})=>{try{I(e?`dark`:`light`)}catch(e){console.error(e)}})}},[p]),r.useEffect(()=>{T.length<=1&&N(!1)},[T]),r.useEffect(()=>{let e=e=>{if(s.every(t=>e[t]||e.code===t)){var t;N(!0),(t=L.current)==null||t.focus()}e.code===`Escape`&&(document.activeElement===L.current||L.current?.contains(document.activeElement))&&N(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[s]),r.useEffect(()=>{if(L.current)return()=>{z.current&&(z.current.focus({preventScroll:!0}),z.current=null,B.current=!1)}},[L.current]),r.createElement(`section`,{ref:t,"aria-label":`${S} ${R}`,tabIndex:-1,"aria-live":`polite`,"aria-relevant":`additions text`,"aria-atomic":`false`,suppressHydrationWarning:!0},ne.map((t,n)=>{let[i,o]=t.split(`-`);return D.length?r.createElement(`ol`,{key:t,dir:y===`auto`?k():y,tabIndex:-1,ref:L,className:u,"data-sonner-toaster":!0,"data-sonner-theme":ie,"data-y-position":i,"data-x-position":o,style:{"--front-toast-height":`${j[0]?.height||0}px`,"--width":`${C}px`,"--gap":`${b}px`,...g,...A(d,f)},onBlur:e=>{B.current&&!e.currentTarget.contains(e.relatedTarget)&&(B.current=!1,z.current&&=(z.current.focus({preventScroll:!0}),null))},onFocus:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||B.current||(B.current=!0,z.current=e.relatedTarget)},onMouseEnter:()=>N(!0),onMouseMove:()=>N(!0),onMouseLeave:()=>{P||N(!1)},onDragEnd:()=>N(!1),onPointerDown:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||F(!0)},onPointerUp:()=>F(!1)},D.filter(e=>!e.position&&n===0||e.position===t).map((n,i)=>r.createElement(O,{key:n.id,icons:x,index:i,toast:n,defaultRichColors:ee,duration:v?.duration??m,className:v?.className,descriptionClassName:v?.descriptionClassName,invert:a,visibleToasts:_,closeButton:v?.closeButton??l,interacting:P,position:t,style:v?.style,unstyled:v?.unstyled,classNames:v?.classNames,cancelButtonStyle:v?.cancelButtonStyle,actionButtonStyle:v?.actionButtonStyle,closeButtonAriaLabel:v?.closeButtonAriaLabel,removeToast:V,toasts:D.filter(e=>e.position==n.position),heights:j.filter(e=>e.position==n.position),setHeights:M,expandByDefault:c,gap:b,expanded:re,swipeDirections:e.swipeDirections}))):null}))});export{v as n,j as t}; \ No newline at end of file diff --git a/src/www/assets/dist-BPKZF5GI.js b/src/www/assets/dist-BPKZF5GI.js new file mode 100644 index 0000000..19be599 --- /dev/null +++ b/src/www/assets/dist-BPKZF5GI.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{n as r,r as i,t as a}from"./dist-DJhZSa1-.js";import{d as o}from"./button-D-oR8d6w.js";import{n as s,r as c}from"./dist-DzENW8NP.js";import{t as l}from"./dist-oydJxq9L.js";var u=n(e(),1);function d(e,t=globalThis?.document){let n=l(e);u.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var f=t(),p=`DismissableLayer`,m=`dismissableLayer.update`,h=`dismissableLayer.pointerDownOutside`,g=`dismissableLayer.focusOutside`,_,v=u.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),y=u.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:s,onInteractOutside:l,onDismiss:p,...h}=e,g=u.useContext(v),[y,b]=u.useState(null),x=y?.ownerDocument??globalThis?.document,[,T]=u.useState({}),E=o(t,e=>b(e)),D=Array.from(g.layers),[O]=[...g.layersWithOutsidePointerEventsDisabled].slice(-1),k=D.indexOf(O),A=y?D.indexOf(y):-1,j=g.layersWithOutsidePointerEventsDisabled.size>0,M=A>=k,N=S(e=>{let t=e.target,n=[...g.branches].some(e=>e.contains(t));!M||n||(i?.(e),l?.(e),e.defaultPrevented||p?.())},x),P=C(e=>{let t=e.target;[...g.branches].some(e=>e.contains(t))||(s?.(e),l?.(e),e.defaultPrevented||p?.())},x);return d(e=>{A===g.layers.size-1&&(r?.(e),!e.defaultPrevented&&p&&(e.preventDefault(),p()))},x),u.useEffect(()=>{if(y)return n&&(g.layersWithOutsidePointerEventsDisabled.size===0&&(_=x.body.style.pointerEvents,x.body.style.pointerEvents=`none`),g.layersWithOutsidePointerEventsDisabled.add(y)),g.layers.add(y),w(),()=>{n&&g.layersWithOutsidePointerEventsDisabled.size===1&&(x.body.style.pointerEvents=_)}},[y,x,n,g]),u.useEffect(()=>()=>{y&&(g.layers.delete(y),g.layersWithOutsidePointerEventsDisabled.delete(y),w())},[y,g]),u.useEffect(()=>{let e=()=>T({});return document.addEventListener(m,e),()=>document.removeEventListener(m,e)},[]),(0,f.jsx)(a.div,{...h,ref:E,style:{pointerEvents:j?M?`auto`:`none`:void 0,...e.style},onFocusCapture:c(e.onFocusCapture,P.onFocusCapture),onBlurCapture:c(e.onBlurCapture,P.onBlurCapture),onPointerDownCapture:c(e.onPointerDownCapture,N.onPointerDownCapture)})});y.displayName=p;var b=`DismissableLayerBranch`,x=u.forwardRef((e,t)=>{let n=u.useContext(v),r=u.useRef(null),i=o(t,r);return u.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,f.jsx)(a.div,{...e,ref:i})});x.displayName=b;function S(e,t=globalThis?.document){let n=l(e),r=u.useRef(!1),i=u.useRef(()=>{});return u.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){T(h,n,a,{discrete:!0})},a={originalEvent:e};e.pointerType===`touch`?(t.removeEventListener(`click`,i.current),i.current=r,t.addEventListener(`click`,i.current,{once:!0})):r()}else t.removeEventListener(`click`,i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener(`pointerdown`,e)},0);return()=>{window.clearTimeout(a),t.removeEventListener(`pointerdown`,e),t.removeEventListener(`click`,i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function C(e,t=globalThis?.document){let n=l(e),r=u.useRef(!1);return u.useEffect(()=>{let e=e=>{e.target&&!r.current&&T(g,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function w(){let e=new CustomEvent(m);document.dispatchEvent(e)}function T(e,t,n,{discrete:i}){let a=n.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&a.addEventListener(e,t,{once:!0}),i?r(a,o):a.dispatchEvent(o)}var E=n(i(),1),D=`Portal`,O=u.forwardRef((e,t)=>{let{container:n,...r}=e,[i,o]=u.useState(!1);s(()=>o(!0),[]);let c=n||i&&globalThis?.document?.body;return c?E.createPortal((0,f.jsx)(a.div,{...r,ref:t}),c):null});O.displayName=D;export{y as n,O as t}; \ No newline at end of file diff --git a/src/www/assets/dist-BZg_Jfik.js b/src/www/assets/dist-BZg_Jfik.js new file mode 100644 index 0000000..d401d19 --- /dev/null +++ b/src/www/assets/dist-BZg_Jfik.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";import{d as n}from"./button-D-oR8d6w.js";import{n as r}from"./dist-DzENW8NP.js";var i=t(e(),1);function a(e,t){return i.useReducer((e,n)=>t[e][n]??e,e)}var o=e=>{let{present:t,children:r}=e,a=s(t),o=typeof r==`function`?r({present:a.isPresent}):i.Children.only(r),c=n(a.ref,l(o));return typeof r==`function`||a.isPresent?i.cloneElement(o,{ref:c}):null};o.displayName=`Presence`;function s(e){let[t,n]=i.useState(),o=i.useRef(null),s=i.useRef(e),l=i.useRef(`none`),[u,d]=a(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return i.useEffect(()=>{let e=c(o.current);l.current=u===`mounted`?e:`none`},[u]),r(()=>{let t=o.current,n=s.current;if(n!==e){let r=l.current,i=c(t);e?d(`MOUNT`):i===`none`||t?.display===`none`?d(`UNMOUNT`):d(n&&r!==i?`ANIMATION_OUT`:`UNMOUNT`),s.current=e}},[e,d]),r(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,r=r=>{let i=c(o.current).includes(CSS.escape(r.animationName));if(r.target===t&&i&&(d(`ANIMATION_END`),!s.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},i=e=>{e.target===t&&(l.current=c(o.current))};return t.addEventListener(`animationstart`,i),t.addEventListener(`animationcancel`,r),t.addEventListener(`animationend`,r),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,i),t.removeEventListener(`animationcancel`,r),t.removeEventListener(`animationend`,r)}}else d(`ANIMATION_END`)},[t,d]),{isPresent:[`mounted`,`unmountSuspended`].includes(u),ref:i.useCallback(e=>{o.current=e?getComputedStyle(e):null,n(e)},[])}}function c(e){return e?.animationName||`none`}function l(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}export{o as t}; \ No newline at end of file diff --git a/src/www/assets/dist-BeVKhAtj.js b/src/www/assets/dist-BeVKhAtj.js new file mode 100644 index 0000000..c3dbf8a --- /dev/null +++ b/src/www/assets/dist-BeVKhAtj.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";var r=n(e(),1),i=t(),a=r.createContext(void 0),o=e=>{let{dir:t,children:n}=e;return(0,i.jsx)(a.Provider,{value:t,children:n})};function s(e){let t=r.useContext(a);return e||t||`ltr`}export{s as n,o as t}; \ No newline at end of file diff --git a/src/www/assets/dist-Bh3bGrZa.js b/src/www/assets/dist-Bh3bGrZa.js new file mode 100644 index 0000000..32415f7 --- /dev/null +++ b/src/www/assets/dist-Bh3bGrZa.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";import{n}from"./dist-DzENW8NP.js";var r=t(e(),1);function i(e){let[t,i]=r.useState(void 0);return n(()=>{if(e){i({width:e.offsetWidth,height:e.offsetHeight});let t=new ResizeObserver(t=>{if(!Array.isArray(t)||!t.length)return;let n=t[0],r,a;if(`borderBoxSize`in n){let e=n.borderBoxSize,t=Array.isArray(e)?e[0]:e;r=t.inlineSize,a=t.blockSize}else r=e.offsetWidth,a=e.offsetHeight;i({width:r,height:a})});return t.observe(e,{box:`border-box`}),()=>t.unobserve(e)}else i(void 0)},[e]),t}export{i as t}; \ No newline at end of file diff --git a/src/www/assets/dist-C3yOG_Qz.js b/src/www/assets/dist-C3yOG_Qz.js new file mode 100644 index 0000000..b48cd85 --- /dev/null +++ b/src/www/assets/dist-C3yOG_Qz.js @@ -0,0 +1,5 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{c as i,d as a}from"./button-D-oR8d6w.js";import{a as o,i as s,r as c,t as l}from"./dist-DzENW8NP.js";import{t as u}from"./dist-BZg_Jfik.js";import{n as d}from"./dist-oydJxq9L.js";import{n as f,t as p}from"./dist-BPKZF5GI.js";import{i as m,n as h,r as g,t as _}from"./es2015-DRmlSfkW.js";var v=n(e(),1),y=t(),b=`Dialog`,[x,S]=o(b),[C,w]=x(b),T=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=v.useRef(null),c=v.useRef(null),[u,f]=l({prop:r,defaultProp:i??!1,onChange:a,caller:b});return(0,y.jsx)(C,{scope:t,triggerRef:s,contentRef:c,contentId:d(),titleId:d(),descriptionId:d(),open:u,onOpenChange:f,onOpenToggle:v.useCallback(()=>f(e=>!e),[f]),modal:o,children:n})};T.displayName=b;var E=`DialogTrigger`,D=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,o=w(E,n),s=a(t,o.triggerRef);return(0,y.jsx)(r.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":o.open,"aria-controls":o.contentId,"data-state":q(o.open),...i,ref:s,onClick:c(e.onClick,o.onOpenToggle)})});D.displayName=E;var O=`DialogPortal`,[k,A]=x(O,{forceMount:void 0}),j=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=w(O,t);return(0,y.jsx)(k,{scope:t,forceMount:n,children:v.Children.map(r,e=>(0,y.jsx)(u,{present:n||a.open,children:(0,y.jsx)(p,{asChild:!0,container:i,children:e})}))})};j.displayName=O;var M=`DialogOverlay`,N=v.forwardRef((e,t)=>{let n=A(M,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=w(M,e.__scopeDialog);return a.modal?(0,y.jsx)(u,{present:r||a.open,children:(0,y.jsx)(F,{...i,ref:t})}):null});N.displayName=M;var P=i(`DialogOverlay.RemoveScroll`),F=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(M,n);return(0,y.jsx)(h,{as:P,allowPinchZoom:!0,shards:[a.contentRef],children:(0,y.jsx)(r.div,{"data-state":q(a.open),...i,ref:t,style:{pointerEvents:`auto`,...i.style}})})}),I=`DialogContent`,L=v.forwardRef((e,t)=>{let n=A(I,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=w(I,e.__scopeDialog);return(0,y.jsx)(u,{present:r||a.open,children:a.modal?(0,y.jsx)(R,{...i,ref:t}):(0,y.jsx)(z,{...i,ref:t})})});L.displayName=I;var R=v.forwardRef((e,t)=>{let n=w(I,e.__scopeDialog),r=v.useRef(null),i=a(t,n.contentRef,r);return v.useEffect(()=>{let e=r.current;if(e)return _(e)},[]),(0,y.jsx)(B,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:c(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:c(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:c(e.onFocusOutside,e=>e.preventDefault())})}),z=v.forwardRef((e,t)=>{let n=w(I,e.__scopeDialog),r=v.useRef(!1),i=v.useRef(!1);return(0,y.jsx)(B,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),B=v.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:o,...s}=e,c=w(I,n),l=v.useRef(null),u=a(t,l);return g(),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(m,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:o,children:(0,y.jsx)(f,{role:`dialog`,id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":q(c.open),...s,ref:u,onDismiss:()=>c.onOpenChange(!1)})}),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(Z,{titleId:c.titleId}),(0,y.jsx)($,{contentRef:l,descriptionId:c.descriptionId})]})]})}),V=`DialogTitle`,H=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(V,n);return(0,y.jsx)(r.h2,{id:a.titleId,...i,ref:t})});H.displayName=V;var U=`DialogDescription`,W=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(U,n);return(0,y.jsx)(r.p,{id:a.descriptionId,...i,ref:t})});W.displayName=U;var G=`DialogClose`,K=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(G,n);return(0,y.jsx)(r.button,{type:`button`,...i,ref:t,onClick:c(e.onClick,()=>a.onOpenChange(!1))})});K.displayName=G;function q(e){return e?`open`:`closed`}var J=`DialogTitleWarning`,[Y,X]=s(J,{contentName:I,titleName:V,docsSlug:`dialog`}),Z=({titleId:e})=>{let t=X(J),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users. + +If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component. + +For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return v.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},Q=`DialogDescriptionWarning`,$=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${X(Q).contentName}}.`;return v.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},ee=T,te=D,ne=j,re=N,ie=L,ae=H,oe=W,se=K;export{ne as a,te as c,re as i,Y as l,ie as n,ee as o,oe as r,ae as s,se as t,S as u}; \ No newline at end of file diff --git a/src/www/assets/dist-CML2zK1G.js b/src/www/assets/dist-CML2zK1G.js new file mode 100644 index 0000000..07200e5 --- /dev/null +++ b/src/www/assets/dist-CML2zK1G.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{d as i}from"./button-D-oR8d6w.js";import{a,r as o,t as s}from"./dist-DzENW8NP.js";import{n as c,r as l,t as u}from"./dist-CT2DjA94.js";import{t as d}from"./dist-BZg_Jfik.js";import{n as f}from"./dist-BeVKhAtj.js";import{t as p}from"./dist-QGW08nls.js";import{t as m}from"./dist-Bh3bGrZa.js";var h=n(e(),1),g=t(),_=`Radio`,[v,y]=a(_),[b,x]=v(_),S=h.forwardRef((e,t)=>{let{__scopeRadio:n,name:a,checked:s=!1,required:c,disabled:l,value:u=`on`,onCheck:d,form:f,...p}=e,[m,_]=h.useState(null),v=i(t,e=>_(e)),y=h.useRef(!1),x=m?f||!!m.closest(`form`):!0;return(0,g.jsxs)(b,{scope:n,checked:s,disabled:l,children:[(0,g.jsx)(r.button,{type:`button`,role:`radio`,"aria-checked":s,"data-state":D(s),"data-disabled":l?``:void 0,disabled:l,value:u,...p,ref:v,onClick:o(e.onClick,e=>{s||d?.(),x&&(y.current=e.isPropagationStopped(),y.current||e.stopPropagation())})}),x&&(0,g.jsx)(E,{control:m,bubbles:!y.current,name:a,value:u,checked:s,required:c,disabled:l,form:f,style:{transform:`translateX(-100%)`}})]})});S.displayName=_;var C=`RadioIndicator`,w=h.forwardRef((e,t)=>{let{__scopeRadio:n,forceMount:i,...a}=e,o=x(C,n);return(0,g.jsx)(d,{present:i||o.checked,children:(0,g.jsx)(r.span,{"data-state":D(o.checked),"data-disabled":o.disabled?``:void 0,...a,ref:t})})});w.displayName=C;var T=`RadioBubbleInput`,E=h.forwardRef(({__scopeRadio:e,control:t,checked:n,bubbles:a=!0,...o},s)=>{let c=h.useRef(null),l=i(c,s),u=p(n),d=m(t);return h.useEffect(()=>{let e=c.current;if(!e)return;let t=window.HTMLInputElement.prototype,r=Object.getOwnPropertyDescriptor(t,`checked`).set;if(u!==n&&r){let t=new Event(`click`,{bubbles:a});r.call(e,n),e.dispatchEvent(t)}},[u,n,a]),(0,g.jsx)(r.input,{type:`radio`,"aria-hidden":!0,defaultChecked:n,...o,tabIndex:-1,ref:l,style:{...o.style,...d,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0}})});E.displayName=T;function D(e){return e?`checked`:`unchecked`}var O=[`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`],k=`RadioGroup`,[A,j]=a(k,[l,y]),M=l(),N=y(),[P,F]=A(k),I=h.forwardRef((e,t)=>{let{__scopeRadioGroup:n,name:i,defaultValue:a,value:o,required:l=!1,disabled:u=!1,orientation:d,dir:p,loop:m=!0,onValueChange:h,..._}=e,v=M(n),y=f(p),[b,x]=s({prop:o,defaultProp:a??null,onChange:h,caller:k});return(0,g.jsx)(P,{scope:n,name:i,required:l,disabled:u,value:b,onValueChange:x,children:(0,g.jsx)(c,{asChild:!0,...v,orientation:d,dir:y,loop:m,children:(0,g.jsx)(r.div,{role:`radiogroup`,"aria-required":l,"aria-orientation":d,"data-disabled":u?``:void 0,dir:y,..._,ref:t})})})});I.displayName=k;var L=`RadioGroupItem`,R=h.forwardRef((e,t)=>{let{__scopeRadioGroup:n,disabled:r,...a}=e,s=F(L,n),c=s.disabled||r,l=M(n),d=N(n),f=h.useRef(null),p=i(t,f),m=s.value===a.value,_=h.useRef(!1);return h.useEffect(()=>{let e=e=>{O.includes(e.key)&&(_.current=!0)},t=()=>_.current=!1;return document.addEventListener(`keydown`,e),document.addEventListener(`keyup`,t),()=>{document.removeEventListener(`keydown`,e),document.removeEventListener(`keyup`,t)}},[]),(0,g.jsx)(u,{asChild:!0,...l,focusable:!c,active:m,children:(0,g.jsx)(S,{disabled:c,required:s.required,checked:m,...d,...a,name:s.name,ref:p,onCheck:()=>s.onValueChange(a.value),onKeyDown:o(e=>{e.key===`Enter`&&e.preventDefault()}),onFocus:o(a.onFocus,()=>{_.current&&f.current?.click()})})})});R.displayName=L;var z=`RadioGroupIndicator`,B=h.forwardRef((e,t)=>{let{__scopeRadioGroup:n,...r}=e;return(0,g.jsx)(w,{...N(n),...r,ref:t})});B.displayName=z;var V=I,H=R,U=B;export{H as n,V as r,U as t}; \ No newline at end of file diff --git a/src/www/assets/dist-CT2DjA94.js b/src/www/assets/dist-CT2DjA94.js new file mode 100644 index 0000000..9c54382 --- /dev/null +++ b/src/www/assets/dist-CT2DjA94.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{c as i,d as a}from"./button-D-oR8d6w.js";import{a as o,r as s,t as c}from"./dist-DzENW8NP.js";import{n as l,t as u}from"./dist-oydJxq9L.js";import{n as d}from"./dist-BeVKhAtj.js";var f=n(e(),1),p=t();function m(e){let t=e+`CollectionProvider`,[n,r]=o(t),[s,c]=n(t,{collectionRef:{current:null},itemMap:new Map}),l=e=>{let{scope:t,children:n}=e,r=f.useRef(null),i=f.useRef(new Map).current;return(0,p.jsx)(s,{scope:t,itemMap:i,collectionRef:r,children:n})};l.displayName=t;let u=e+`CollectionSlot`,d=i(u),m=f.forwardRef((e,t)=>{let{scope:n,children:r}=e;return(0,p.jsx)(d,{ref:a(t,c(u,n).collectionRef),children:r})});m.displayName=u;let h=e+`CollectionItemSlot`,g=`data-radix-collection-item`,_=i(h),v=f.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=f.useRef(null),s=a(t,o),l=c(h,n);return f.useEffect(()=>(l.itemMap.set(o,{ref:o,...i}),()=>void l.itemMap.delete(o))),(0,p.jsx)(_,{[g]:``,ref:s,children:r})});v.displayName=h;function y(t){let n=c(e+`CollectionConsumer`,t);return f.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${g}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:l,Slot:m,ItemSlot:v},y,r]}var h=`rovingFocusGroup.onEntryFocus`,g={bubbles:!1,cancelable:!0},_=`RovingFocusGroup`,[v,y,b]=m(_),[x,S]=o(_,[b]),[C,w]=x(_),T=f.forwardRef((e,t)=>(0,p.jsx)(v.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,p.jsx)(v.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,p.jsx)(E,{...e,ref:t})})}));T.displayName=_;var E=f.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:i,loop:o=!1,dir:l,currentTabStopId:m,defaultCurrentTabStopId:v,onCurrentTabStopIdChange:b,onEntryFocus:x,preventScrollOnEntryFocus:S=!1,...w}=e,T=f.useRef(null),E=a(t,T),D=d(l),[O,k]=c({prop:m,defaultProp:v??null,onChange:b,caller:_}),[A,j]=f.useState(!1),N=u(x),P=y(n),F=f.useRef(!1),[I,L]=f.useState(0);return f.useEffect(()=>{let e=T.current;if(e)return e.addEventListener(h,N),()=>e.removeEventListener(h,N)},[N]),(0,p.jsx)(C,{scope:n,orientation:i,dir:D,loop:o,currentTabStopId:O,onItemFocus:f.useCallback(e=>k(e),[k]),onItemShiftTab:f.useCallback(()=>j(!0),[]),onFocusableItemAdd:f.useCallback(()=>L(e=>e+1),[]),onFocusableItemRemove:f.useCallback(()=>L(e=>e-1),[]),children:(0,p.jsx)(r.div,{tabIndex:A||I===0?-1:0,"data-orientation":i,...w,ref:E,style:{outline:`none`,...e.style},onMouseDown:s(e.onMouseDown,()=>{F.current=!0}),onFocus:s(e.onFocus,e=>{let t=!F.current;if(e.target===e.currentTarget&&t&&!A){let t=new CustomEvent(h,g);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=P().filter(e=>e.focusable);M([e.find(e=>e.active),e.find(e=>e.id===O),...e].filter(Boolean).map(e=>e.ref.current),S)}}F.current=!1}),onBlur:s(e.onBlur,()=>j(!1))})})}),D=`RovingFocusGroupItem`,O=f.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:i=!0,active:a=!1,tabStopId:o,children:c,...u}=e,d=l(),m=o||d,h=w(D,n),g=h.currentTabStopId===m,_=y(n),{onFocusableItemAdd:b,onFocusableItemRemove:x,currentTabStopId:S}=h;return f.useEffect(()=>{if(i)return b(),()=>x()},[i,b,x]),(0,p.jsx)(v.ItemSlot,{scope:n,id:m,focusable:i,active:a,children:(0,p.jsx)(r.span,{tabIndex:g?0:-1,"data-orientation":h.orientation,...u,ref:t,onMouseDown:s(e.onMouseDown,e=>{i?h.onItemFocus(m):e.preventDefault()}),onFocus:s(e.onFocus,()=>h.onItemFocus(m)),onKeyDown:s(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){h.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=j(e,h.orientation,h.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=_().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=h.loop?N(n,r+1):n.slice(r+1)}setTimeout(()=>M(n))}}),children:typeof c==`function`?c({isCurrentTabStop:g,hasTabStop:S!=null}):c})})});O.displayName=D;var k={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function A(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function j(e,t,n){let r=A(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return k[r]}function M(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function N(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var P=T,F=O;export{m as i,P as n,S as r,F as t}; \ No newline at end of file diff --git a/src/www/assets/dist-Ck6_E5T6.js b/src/www/assets/dist-Ck6_E5T6.js new file mode 100644 index 0000000..10494ec --- /dev/null +++ b/src/www/assets/dist-Ck6_E5T6.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{r,t as i}from"./dist-DJhZSa1-.js";import{d as a}from"./button-D-oR8d6w.js";import{a as o,n as s}from"./dist-DzENW8NP.js";import{t as c}from"./dist-oydJxq9L.js";import{t as l}from"./dist-Bh3bGrZa.js";var u=n(e(),1),d=[`top`,`right`,`bottom`,`left`],f=Math.min,p=Math.max,m=Math.round,h=Math.floor,g=e=>({x:e,y:e}),_={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function v(e,t,n){return p(e,f(t,n))}function y(e,t){return typeof e==`function`?e(t):e}function b(e){return e.split(`-`)[0]}function x(e){return e.split(`-`)[1]}function S(e){return e===`x`?`y`:`x`}function C(e){return e===`y`?`height`:`width`}function w(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function T(e){return S(w(e))}function E(e,t,n){n===void 0&&(n=!1);let r=x(e),i=T(e),a=C(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=F(o)),[o,F(o)]}function D(e){let t=F(e);return[O(e),t,O(t)]}function O(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var k=[`left`,`right`],A=[`right`,`left`],j=[`top`,`bottom`],M=[`bottom`,`top`];function N(e,t,n){switch(e){case`top`:case`bottom`:return n?t?A:k:t?k:A;case`left`:case`right`:return t?j:M;default:return[]}}function P(e,t,n,r){let i=x(e),a=N(b(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(O)))),a}function F(e){let t=b(e);return _[t]+e.slice(t.length)}function I(e){return{top:0,right:0,bottom:0,left:0,...e}}function ee(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:I(e)}function L(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function R(e,t,n){let{reference:r,floating:i}=e,a=w(t),o=T(t),s=C(o),c=b(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}switch(x(t)){case`start`:p[o]-=f*(n&&l?-1:1);break;case`end`:p[o]+=f*(n&&l?-1:1);break}return p}async function z(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=y(t,e),p=ee(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=L(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},b=L(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-b.top+p.top)/v.y,bottom:(b.bottom-h.bottom+p.bottom)/v.y,left:(h.left-b.left+p.left)/v.x,right:(b.right-h.right+p.right)/v.x}}var te=50,ne=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:z},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=R(l,r,c),f=r,p=0,m={};for(let n=0;n({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=y(e,t)||{};if(l==null)return{};let d=ee(u),p={x:n,y:r},m=T(i),h=C(m),g=await o.getDimensions(l),_=m===`y`,b=_?`top`:`left`,S=_?`bottom`:`right`,w=_?`clientHeight`:`clientWidth`,E=a.reference[h]+a.reference[m]-p[m]-a.floating[h],D=p[m]-a.reference[m],O=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),k=O?O[w]:0;(!k||!await(o.isElement==null?void 0:o.isElement(O)))&&(k=s.floating[w]||a.floating[h]);let A=E/2-D/2,j=k/2-g[h]/2-1,M=f(d[b],j),N=f(d[S],j),P=M,F=k-g[h]-N,I=k/2-g[h]/2+A,L=v(P,I,F),R=!c.arrow&&x(i)!=null&&I!==L&&a.reference[h]/2-(Ie<=0)){let e=(i.flip?.index||0)+1,t=T[e];if(t&&(!(u===`alignment`&&_!==w(t))||A.every(e=>w(e.placement)===_?e.overflows[0]>0:!0)))return{data:{index:e,overflows:A},reset:{placement:t}};let n=A.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=A.filter(e=>{if(C){let t=w(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}};function ae(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function oe(e){return d.some(t=>e[t]>=0)}var se=function(e){return e===void 0&&(e={}),{name:`hide`,options:e,async fn(t){let{rects:n,platform:r}=t,{strategy:i=`referenceHidden`,...a}=y(e,t);switch(i){case`referenceHidden`:{let e=ae(await r.detectOverflow(t,{...a,elementContext:`reference`}),n.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:oe(e)}}}case`escaped`:{let e=ae(await r.detectOverflow(t,{...a,altBoundary:!0}),n.floating);return{data:{escapedOffsets:e,escaped:oe(e)}}}default:return{}}}}},ce=new Set([`left`,`top`]);async function le(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=b(n),s=x(n),c=w(n)===`y`,l=ce.has(o)?-1:1,u=a&&c?-1:1,d=y(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var ue=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await le(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},de=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=y(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=w(b(i)),p=S(f),m=u[p],h=u[f];if(o){let e=p===`y`?`top`:`left`,t=p===`y`?`bottom`:`right`,n=m+d[e],r=m-d[t];m=v(n,m,r)}if(s){let e=f===`y`?`top`:`left`,t=f===`y`?`bottom`:`right`,n=h+d[e],r=h-d[t];h=v(n,h,r)}let g=c.fn({...t,[p]:m,[f]:h});return{...g,data:{x:g.x-n,y:g.y-r,enabled:{[p]:o,[f]:s}}}}}},fe=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=y(e,t),u={x:n,y:r},d=w(i),f=S(d),p=u[f],m=u[d],h=y(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:0,crossAxis:0,...h};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;pn&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=ce.has(b(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);mr&&(m=r)}return{[f]:p,[d]:m}}}},pe=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){var n,r;let{placement:i,rects:a,platform:o,elements:s}=t,{apply:c=()=>{},...l}=y(e,t),u=await o.detectOverflow(t,l),d=b(i),m=x(i),h=w(i)===`y`,{width:g,height:_}=a.floating,v,S;d===`top`||d===`bottom`?(v=d,S=m===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?`start`:`end`)?`left`:`right`):(S=d,v=m===`end`?`top`:`bottom`);let C=_-u.top-u.bottom,T=g-u.left-u.right,E=f(_-u[v],C),D=f(g-u[S],T),O=!t.middlewareData.shift,k=E,A=D;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(A=T),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(k=C),O&&!m){let e=p(u.left,0),t=p(u.right,0),n=p(u.top,0),r=p(u.bottom,0);h?A=g-2*(e!==0||t!==0?e+t:p(u.left,u.right)):k=_-2*(n!==0||r!==0?n+r:p(u.top,u.bottom))}await c({...t,availableWidth:A,availableHeight:k});let j=await o.getDimensions(s.floating);return g!==j.width||_!==j.height?{reset:{rects:!0}}:{}}}};function me(){return typeof window<`u`}function B(e){return he(e)?(e.nodeName||``).toLowerCase():`#document`}function V(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function H(e){return((he(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function he(e){return me()?e instanceof Node||e instanceof V(e).Node:!1}function U(e){return me()?e instanceof Element||e instanceof V(e).Element:!1}function W(e){return me()?e instanceof HTMLElement||e instanceof V(e).HTMLElement:!1}function ge(e){return!me()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof V(e).ShadowRoot}function G(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=J(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function _e(e){return/^(table|td|th)$/.test(B(e))}function ve(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var ye=/transform|translate|scale|rotate|perspective|filter/,be=/paint|layout|strict|content/,K=e=>!!e&&e!==`none`,xe;function Se(e){let t=U(e)?J(e):e;return K(t.transform)||K(t.translate)||K(t.scale)||K(t.rotate)||K(t.perspective)||!we()&&(K(t.backdropFilter)||K(t.filter))||ye.test(t.willChange||``)||be.test(t.contain||``)}function Ce(e){let t=Y(e);for(;W(t)&&!q(t);){if(Se(t))return t;if(ve(t))return null;t=Y(t)}return null}function we(){return xe??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),xe}function q(e){return/^(html|body|#document)$/.test(B(e))}function J(e){return V(e).getComputedStyle(e)}function Te(e){return U(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Y(e){if(B(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||ge(e)&&e.host||H(e);return ge(t)?t.host:t}function Ee(e){let t=Y(e);return q(t)?e.ownerDocument?e.ownerDocument.body:e.body:W(t)&&G(t)?t:Ee(t)}function X(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=Ee(e),i=r===e.ownerDocument?.body,a=V(r);if(i){let e=De(a);return t.concat(a,a.visualViewport||[],G(r)?r:[],e&&n?X(e):[])}else return t.concat(r,X(r,[],n))}function De(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Oe(e){let t=J(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=W(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=m(n)!==a||m(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function ke(e){return U(e)?e:e.contextElement}function Z(e){let t=ke(e);if(!W(t))return g(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=Oe(t),o=(a?m(n.width):n.width)/r,s=(a?m(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var Ae=g(0);function je(e){let t=V(e);return!we()||!t.visualViewport?Ae:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Me(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==V(e)?!1:t}function Q(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=ke(e),o=g(1);t&&(r?U(r)&&(o=Z(r)):o=Z(e));let s=Me(a,n,r)?je(a):g(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a){let e=V(a),t=r&&U(r)?V(r):r,n=e,i=De(n);for(;i&&r&&t!==n;){let e=Z(i),t=i.getBoundingClientRect(),r=J(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=V(i),i=De(n)}}return L({width:u,height:d,x:c,y:l})}function Ne(e,t){let n=Te(e).scrollLeft;return t?t.left+n:Q(H(e)).left+n}function Pe(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-Ne(e,n),y:n.top+t.scrollTop}}function Fe(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=H(r),s=t?ve(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=g(1),u=g(0),d=W(r);if((d||!d&&!a)&&((B(r)!==`body`||G(o))&&(c=Te(r)),d)){let e=Q(r);l=Z(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?Pe(o,c):g(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function Ie(e){return Array.from(e.getClientRects())}function Le(e){let t=H(e),n=Te(e),r=e.ownerDocument.body,i=p(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=p(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),o=-n.scrollLeft+Ne(e),s=-n.scrollTop;return J(r).direction===`rtl`&&(o+=p(t.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}var Re=25;function ze(e,t){let n=V(e),r=H(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=we();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=Ne(r);if(l<=0){let e=r.ownerDocument,t=e.body,n=getComputedStyle(t),i=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,o=Math.abs(r.clientWidth-t.clientWidth-i);o<=Re&&(a-=o)}else l<=Re&&(a+=l);return{width:a,height:o,x:s,y:c}}function Be(e,t){let n=Q(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=W(e)?Z(e):g(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function Ve(e,t,n){let r;if(t===`viewport`)r=ze(e,n);else if(t===`document`)r=Le(H(e));else if(U(t))r=Be(t,n);else{let n=je(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return L(r)}function He(e,t){let n=Y(e);return n===t||!U(n)||q(n)?!1:J(n).position===`fixed`||He(n,t)}function Ue(e,t){let n=t.get(e);if(n)return n;let r=X(e,[],!1).filter(e=>U(e)&&B(e)!==`body`),i=null,a=J(e).position===`fixed`,o=a?Y(e):e;for(;U(o)&&!q(o);){let t=J(o),n=Se(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||G(o)&&!n&&He(e,o))?r=r.filter(e=>e!==o):i=t,o=Y(o)}return t.set(e,r),r}function We(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?ve(t)?[]:Ue(t,this._c):[].concat(n),r],o=Ve(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e{o(!1,1e-7)},1e3)}n===1&&!$e(l,e.getBoundingClientRect())&&o(),S=!1}try{n=new IntersectionObserver(C,{...x,root:i.ownerDocument})}catch{n=new IntersectionObserver(C,x)}n.observe(e)}return o(!0),a}function tt(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=ke(e),u=i||a?[...l?X(l):[],...t?X(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?et(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?Q(e):null;c&&g();function g(){let t=Q(e);h&&!$e(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var nt=ue,rt=de,it=ie,at=pe,ot=se,st=re,ct=fe,lt=(e,t,n)=>{let r=new Map,i={platform:Qe,...n},a={...i.platform,_c:r};return ne(e,t,{...i,platform:a})},ut=n(r(),1),dt=typeof document<`u`?u.useLayoutEffect:function(){};function ft(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e==`function`&&e.toString()===t.toString())return!0;let n,r,i;if(e&&t&&typeof e==`object`){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!ft(e[r],t[r]))return!1;return!0}if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,i[r]))return!1;for(r=n;r--!==0;){let n=i[r];if(!(n===`_owner`&&e.$$typeof)&&!ft(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function pt(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function mt(e,t){let n=pt(e);return Math.round(t*n)/n}function ht(e){let t=u.useRef(e);return dt(()=>{t.current=e}),t}function gt(e){e===void 0&&(e={});let{placement:t=`bottom`,strategy:n=`absolute`,middleware:r=[],platform:i,elements:{reference:a,floating:o}={},transform:s=!0,whileElementsMounted:c,open:l}=e,[d,f]=u.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[p,m]=u.useState(r);ft(p,r)||m(r);let[h,g]=u.useState(null),[_,v]=u.useState(null),y=u.useCallback(e=>{e!==C.current&&(C.current=e,g(e))},[]),b=u.useCallback(e=>{e!==w.current&&(w.current=e,v(e))},[]),x=a||h,S=o||_,C=u.useRef(null),w=u.useRef(null),T=u.useRef(d),E=c!=null,D=ht(c),O=ht(i),k=ht(l),A=u.useCallback(()=>{if(!C.current||!w.current)return;let e={placement:t,strategy:n,middleware:p};O.current&&(e.platform=O.current),lt(C.current,w.current,e).then(e=>{let t={...e,isPositioned:k.current!==!1};j.current&&!ft(T.current,t)&&(T.current=t,ut.flushSync(()=>{f(t)}))})},[p,t,n,O,k]);dt(()=>{l===!1&&T.current.isPositioned&&(T.current.isPositioned=!1,f(e=>({...e,isPositioned:!1})))},[l]);let j=u.useRef(!1);dt(()=>(j.current=!0,()=>{j.current=!1}),[]),dt(()=>{if(x&&(C.current=x),S&&(w.current=S),x&&S){if(D.current)return D.current(x,S,A);A()}},[x,S,A,D,E]);let M=u.useMemo(()=>({reference:C,floating:w,setReference:y,setFloating:b}),[y,b]),N=u.useMemo(()=>({reference:x,floating:S}),[x,S]),P=u.useMemo(()=>{let e={position:n,left:0,top:0};if(!N.floating)return e;let t=mt(N.floating,d.x),r=mt(N.floating,d.y);return s?{...e,transform:`translate(`+t+`px, `+r+`px)`,...pt(N.floating)>=1.5&&{willChange:`transform`}}:{position:n,left:t,top:r}},[n,s,N.floating,d.x,d.y]);return u.useMemo(()=>({...d,update:A,refs:M,elements:N,floatingStyles:P}),[d,A,M,N,P])}var _t=e=>{function t(e){return{}.hasOwnProperty.call(e,`current`)}return{name:`arrow`,options:e,fn(n){let{element:r,padding:i}=typeof e==`function`?e(n):e;return r&&t(r)?r.current==null?{}:st({element:r.current,padding:i}).fn(n):r?st({element:r,padding:i}).fn(n):{}}}},vt=(e,t)=>{let n=nt(e);return{name:n.name,fn:n.fn,options:[e,t]}},yt=(e,t)=>{let n=rt(e);return{name:n.name,fn:n.fn,options:[e,t]}},bt=(e,t)=>({fn:ct(e).fn,options:[e,t]}),xt=(e,t)=>{let n=it(e);return{name:n.name,fn:n.fn,options:[e,t]}},St=(e,t)=>{let n=at(e);return{name:n.name,fn:n.fn,options:[e,t]}},Ct=(e,t)=>{let n=ot(e);return{name:n.name,fn:n.fn,options:[e,t]}},wt=(e,t)=>{let n=_t(e);return{name:n.name,fn:n.fn,options:[e,t]}},$=t(),Tt=`Arrow`,Et=u.forwardRef((e,t)=>{let{children:n,width:r=10,height:a=5,...o}=e;return(0,$.jsx)(i.svg,{...o,ref:t,width:r,height:a,viewBox:`0 0 30 10`,preserveAspectRatio:`none`,children:e.asChild?n:(0,$.jsx)(`polygon`,{points:`0,0 30,0 15,10`})})});Et.displayName=Tt;var Dt=Et,Ot=`Popper`,[kt,At]=o(Ot),[jt,Mt]=kt(Ot),Nt=e=>{let{__scopePopper:t,children:n}=e,[r,i]=u.useState(null);return(0,$.jsx)(jt,{scope:t,anchor:r,onAnchorChange:i,children:n})};Nt.displayName=Ot;var Pt=`PopperAnchor`,Ft=u.forwardRef((e,t)=>{let{__scopePopper:n,virtualRef:r,...o}=e,s=Mt(Pt,n),c=u.useRef(null),l=a(t,c),d=u.useRef(null);return u.useEffect(()=>{let e=d.current;d.current=r?.current||c.current,e!==d.current&&s.onAnchorChange(d.current)}),r?null:(0,$.jsx)(i.div,{...o,ref:l})});Ft.displayName=Pt;var It=`PopperContent`,[Lt,Rt]=kt(It),zt=u.forwardRef((e,t)=>{let{__scopePopper:n,side:r=`bottom`,sideOffset:o=0,align:d=`center`,alignOffset:f=0,arrowPadding:p=0,avoidCollisions:m=!0,collisionBoundary:h=[],collisionPadding:g=0,sticky:_=`partial`,hideWhenDetached:v=!1,updatePositionStrategy:y=`optimized`,onPlaced:b,...x}=e,S=Mt(It,n),[C,w]=u.useState(null),T=a(t,e=>w(e)),[E,D]=u.useState(null),O=l(E),k=O?.width??0,A=O?.height??0,j=r+(d===`center`?``:`-`+d),M=typeof g==`number`?g:{top:0,right:0,bottom:0,left:0,...g},N=Array.isArray(h)?h:[h],P=N.length>0,F={padding:M,boundary:N.filter(Ut),altBoundary:P},{refs:I,floatingStyles:ee,placement:L,isPositioned:R,middlewareData:z}=gt({strategy:`fixed`,placement:j,whileElementsMounted:(...e)=>tt(...e,{animationFrame:y===`always`}),elements:{reference:S.anchor},middleware:[vt({mainAxis:o+A,alignmentAxis:f}),m&&yt({mainAxis:!0,crossAxis:!1,limiter:_===`partial`?bt():void 0,...F}),m&&xt({...F}),St({...F,apply:({elements:e,rects:t,availableWidth:n,availableHeight:r})=>{let{width:i,height:a}=t.reference,o=e.floating.style;o.setProperty(`--radix-popper-available-width`,`${n}px`),o.setProperty(`--radix-popper-available-height`,`${r}px`),o.setProperty(`--radix-popper-anchor-width`,`${i}px`),o.setProperty(`--radix-popper-anchor-height`,`${a}px`)}}),E&&wt({element:E,padding:p}),Wt({arrowWidth:k,arrowHeight:A}),v&&Ct({strategy:`referenceHidden`,...F})]}),[te,ne]=Gt(L),re=c(b);s(()=>{R&&re?.()},[R,re]);let ie=z.arrow?.x,ae=z.arrow?.y,oe=z.arrow?.centerOffset!==0,[se,ce]=u.useState();return s(()=>{C&&ce(window.getComputedStyle(C).zIndex)},[C]),(0,$.jsx)(`div`,{ref:I.setFloating,"data-radix-popper-content-wrapper":``,style:{...ee,transform:R?ee.transform:`translate(0, -200%)`,minWidth:`max-content`,zIndex:se,"--radix-popper-transform-origin":[z.transformOrigin?.x,z.transformOrigin?.y].join(` `),...z.hide?.referenceHidden&&{visibility:`hidden`,pointerEvents:`none`}},dir:e.dir,children:(0,$.jsx)(Lt,{scope:n,placedSide:te,onArrowChange:D,arrowX:ie,arrowY:ae,shouldHideArrow:oe,children:(0,$.jsx)(i.div,{"data-side":te,"data-align":ne,...x,ref:T,style:{...x.style,animation:R?void 0:`none`}})})})});zt.displayName=It;var Bt=`PopperArrow`,Vt={top:`bottom`,right:`left`,bottom:`top`,left:`right`},Ht=u.forwardRef(function(e,t){let{__scopePopper:n,...r}=e,i=Rt(Bt,n),a=Vt[i.placedSide];return(0,$.jsx)(`span`,{ref:i.onArrowChange,style:{position:`absolute`,left:i.arrowX,top:i.arrowY,[a]:0,transformOrigin:{top:``,right:`0 0`,bottom:`center 0`,left:`100% 0`}[i.placedSide],transform:{top:`translateY(100%)`,right:`translateY(50%) rotate(90deg) translateX(-50%)`,bottom:`rotate(180deg)`,left:`translateY(50%) rotate(-90deg) translateX(50%)`}[i.placedSide],visibility:i.shouldHideArrow?`hidden`:void 0},children:(0,$.jsx)(Dt,{...r,ref:t,style:{...r.style,display:`block`}})})});Ht.displayName=Bt;function Ut(e){return e!==null}var Wt=e=>({name:`transformOrigin`,options:e,fn(t){let{placement:n,rects:r,middlewareData:i}=t,a=i.arrow?.centerOffset!==0,o=a?0:e.arrowWidth,s=a?0:e.arrowHeight,[c,l]=Gt(n),u={start:`0%`,center:`50%`,end:`100%`}[l],d=(i.arrow?.x??0)+o/2,f=(i.arrow?.y??0)+s/2,p=``,m=``;return c===`bottom`?(p=a?u:`${d}px`,m=`${-s}px`):c===`top`?(p=a?u:`${d}px`,m=`${r.floating.height+s}px`):c===`right`?(p=`${-s}px`,m=a?u:`${f}px`):c===`left`&&(p=`${r.floating.width+s}px`,m=a?u:`${f}px`),{data:{x:p,y:m}}}});function Gt(e){let[t,n=`center`]=e.split(`-`);return[t,n]}var Kt=Nt,qt=Ft,Jt=zt,Yt=Ht;export{At as a,Kt as i,Yt as n,Jt as r,qt as t}; \ No newline at end of file diff --git a/src/www/assets/dist-DJhZSa1-.js b/src/www/assets/dist-DJhZSa1-.js new file mode 100644 index 0000000..33d2573 --- /dev/null +++ b/src/www/assets/dist-DJhZSa1-.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,ed as n,nd as r}from"./messages-BOl-zx8S.js";import{c as i}from"./button-D-oR8d6w.js";var a=n((t=>{var n=e();function r(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=a()})),s=r(e(),1),c=r(o(),1),l=t(),u=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=i(`Primitive.${t}`),r=s.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,l.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function d(e,t){e&&c.flushSync(()=>e.dispatchEvent(t))}export{d as n,o as r,u as t}; \ No newline at end of file diff --git a/src/www/assets/dist-DzENW8NP.js b/src/www/assets/dist-DzENW8NP.js new file mode 100644 index 0000000..a34c168 --- /dev/null +++ b/src/www/assets/dist-DzENW8NP.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";var r=n(e(),1),i=t();function a(e,t){let n=r.createContext(t),a=e=>{let{children:t,...a}=e,o=r.useMemo(()=>a,Object.values(a));return(0,i.jsx)(n.Provider,{value:o,children:t})};a.displayName=e+`Provider`;function o(i){let a=r.useContext(n);if(a)return a;if(t!==void 0)return t;throw Error(`\`${i}\` must be used within \`${e}\``)}return[a,o]}function o(e,t=[]){let n=[];function a(t,a){let o=r.createContext(a),s=n.length;n=[...n,a];let c=t=>{let{scope:n,children:a,...c}=t,l=n?.[e]?.[s]||o,u=r.useMemo(()=>c,Object.values(c));return(0,i.jsx)(l.Provider,{value:u,children:a})};c.displayName=t+`Provider`;function l(n,i){let c=i?.[e]?.[s]||o,l=r.useContext(c);if(l)return l;if(a!==void 0)return a;throw Error(`\`${n}\` must be used within \`${t}\``)}return[c,l]}let o=()=>{let t=n.map(e=>r.createContext(e));return function(n){let i=n?.[e]||t;return r.useMemo(()=>({[`__scope${e}`]:{...n,[e]:i}}),[n,i])}};return o.scopeName=e,[a,s(o,...t)]}function s(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let i=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return r.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return n.scopeName=t.scopeName,n}typeof window<`u`&&window.document&&window.document.createElement;function c(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}var l=globalThis?.document?r.useLayoutEffect:()=>{},u=r.useInsertionEffect||l;function d({prop:e,defaultProp:t,onChange:n=()=>{},caller:i}){let[a,o,s]=f({defaultProp:t,onChange:n}),c=e!==void 0,l=c?e:a;{let t=r.useRef(e!==void 0);r.useEffect(()=>{let e=t.current;e!==c&&console.warn(`${i} is changing from ${e?`controlled`:`uncontrolled`} to ${c?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=c},[c,i])}return[l,r.useCallback(t=>{if(c){let n=p(t)?t(e):t;n!==e&&s.current?.(n)}else o(t)},[c,e,o,s])]}function f({defaultProp:e,onChange:t}){let[n,i]=r.useState(e),a=r.useRef(n),o=r.useRef(t);return u(()=>{o.current=t},[t]),r.useEffect(()=>{a.current!==n&&(o.current?.(n),a.current=n)},[n,a]),[n,i,o]}function p(e){return typeof e==`function`}export{o as a,a as i,l as n,c as r,d as t}; \ No newline at end of file diff --git a/src/www/assets/dist-QGW08nls.js b/src/www/assets/dist-QGW08nls.js new file mode 100644 index 0000000..f53af9a --- /dev/null +++ b/src/www/assets/dist-QGW08nls.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";var n=t(e(),1);function r(e){let t=n.useRef({value:e,previous:e});return n.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}export{r as t}; \ No newline at end of file diff --git a/src/www/assets/dist-oydJxq9L.js b/src/www/assets/dist-oydJxq9L.js new file mode 100644 index 0000000..303c7af --- /dev/null +++ b/src/www/assets/dist-oydJxq9L.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";import{n}from"./dist-DzENW8NP.js";var r=t(e(),1),i=r.useId||(()=>void 0),a=0;function o(e){let[t,o]=r.useState(i());return n(()=>{e||o(e=>e??String(a++))},[e]),e||(t?`radix-${t}`:``)}function s(e){let t=r.useRef(e);return r.useEffect(()=>{t.current=e}),r.useMemo(()=>(...e)=>t.current?.(...e),[])}export{o as n,s as t}; \ No newline at end of file diff --git a/src/www/assets/download-BhpqmSj0.js b/src/www/assets/download-BhpqmSj0.js new file mode 100644 index 0000000..954ebf9 --- /dev/null +++ b/src/www/assets/download-BhpqmSj0.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/dropdown-menu-HbmfecEg.js b/src/www/assets/dropdown-menu-HbmfecEg.js new file mode 100644 index 0000000..3d1ebb7 --- /dev/null +++ b/src/www/assets/dropdown-menu-HbmfecEg.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{n as r,t as i}from"./dist-DJhZSa1-.js";import{c as a,d as o,i as s,u as c}from"./button-D-oR8d6w.js";import{a as l,r as u,t as d}from"./dist-DzENW8NP.js";import{i as f,n as p,r as m,t as ee}from"./dist-CT2DjA94.js";import{t as h}from"./dist-BZg_Jfik.js";import{n as g,t as _}from"./dist-oydJxq9L.js";import{n as te}from"./dist-BeVKhAtj.js";import{n as ne,t as v}from"./dist-BPKZF5GI.js";import{i as re,n as ie,r as ae,t as oe}from"./es2015-DRmlSfkW.js";import{a as y,i as b,n as se,r as ce,t as x}from"./dist-Ck6_E5T6.js";import{t as S}from"./check-DH6qIczM.js";var C=n(e(),1),w=t(),T=[`Enter`,` `],E=[`ArrowDown`,`PageUp`,`Home`],le=[`ArrowUp`,`PageDown`,`End`],ue=[...E,...le],D={ltr:[...T,`ArrowRight`],rtl:[...T,`ArrowLeft`]},de={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},O=`Menu`,[k,fe,A]=f(O),[j,M]=l(O,[A,y,m]),N=y(),pe=m(),[P,F]=j(O),[I,L]=j(O),me=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=N(t),[c,l]=C.useState(null),u=C.useRef(!1),d=_(a),f=te(i);return C.useEffect(()=>{let e=()=>{u.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},t=()=>u.current=!1;return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),(0,w.jsx)(b,{...s,children:(0,w.jsx)(P,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,w.jsx)(I,{scope:t,onClose:C.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})};me.displayName=O;var he=`MenuAnchor`,R=C.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=N(n);return(0,w.jsx)(x,{...i,...r,ref:t})});R.displayName=he;var z=`MenuPortal`,[ge,_e]=j(z,{forceMount:void 0}),ve=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,a=F(z,t);return(0,w.jsx)(ge,{scope:t,forceMount:n,children:(0,w.jsx)(h,{present:n||a.open,children:(0,w.jsx)(v,{asChild:!0,container:i,children:r})})})};ve.displayName=z;var B=`MenuContent`,[ye,V]=j(B),be=C.forwardRef((e,t)=>{let n=_e(B,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=F(B,e.__scopeMenu),o=L(B,e.__scopeMenu);return(0,w.jsx)(k.Provider,{scope:e.__scopeMenu,children:(0,w.jsx)(h,{present:r||a.open,children:(0,w.jsx)(k.Slot,{scope:e.__scopeMenu,children:o.modal?(0,w.jsx)(xe,{...i,ref:t}):(0,w.jsx)(Se,{...i,ref:t})})})})}),xe=C.forwardRef((e,t)=>{let n=F(B,e.__scopeMenu),r=C.useRef(null),i=o(t,r);return C.useEffect(()=>{let e=r.current;if(e)return oe(e)},[]),(0,w.jsx)(H,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:u(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),Se=C.forwardRef((e,t)=>{let n=F(B,e.__scopeMenu);return(0,w.jsx)(H,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),Ce=a(`MenuContent.ScrollLock`),H=C.forwardRef((e,t)=>{let{__scopeMenu:n,loop:r=!1,trapFocus:i,onOpenAutoFocus:a,onCloseAutoFocus:s,disableOutsidePointerEvents:c,onEntryFocus:l,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:m,onInteractOutside:ee,onDismiss:h,disableOutsideScroll:g,..._}=e,te=F(B,n),v=L(B,n),oe=N(n),y=pe(n),b=fe(n),[se,x]=C.useState(null),S=C.useRef(null),T=o(t,S,te.onContentChange),E=C.useRef(0),D=C.useRef(``),de=C.useRef(0),O=C.useRef(null),k=C.useRef(`right`),A=C.useRef(0),j=g?ie:C.Fragment,M=g?{as:Ce,allowPinchZoom:!0}:void 0,P=e=>{let t=D.current+e,n=b().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=$e(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){D.current=t,window.clearTimeout(E.current),t!==``&&(E.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};C.useEffect(()=>()=>window.clearTimeout(E.current),[]),ae();let I=C.useCallback(e=>k.current===O.current?.side&&tt(e,O.current?.area),[]);return(0,w.jsx)(ye,{scope:n,searchRef:D,onItemEnter:C.useCallback(e=>{I(e)&&e.preventDefault()},[I]),onItemLeave:C.useCallback(e=>{I(e)||(S.current?.focus(),x(null))},[I]),onTriggerLeave:C.useCallback(e=>{I(e)&&e.preventDefault()},[I]),pointerGraceTimerRef:de,onPointerGraceIntentChange:C.useCallback(e=>{O.current=e},[]),children:(0,w.jsx)(j,{...M,children:(0,w.jsx)(re,{asChild:!0,trapped:i,onMountAutoFocus:u(a,e=>{e.preventDefault(),S.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:s,children:(0,w.jsx)(ne,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:m,onInteractOutside:ee,onDismiss:h,children:(0,w.jsx)(p,{asChild:!0,...y,dir:v.dir,orientation:`vertical`,loop:r,currentTabStopId:se,onCurrentTabStopIdChange:x,onEntryFocus:u(l,e=>{v.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,w.jsx)(ce,{role:`menu`,"aria-orientation":`vertical`,"data-state":Xe(te.open),"data-radix-menu-content":``,dir:v.dir,...oe,..._,ref:T,style:{outline:`none`,..._.style},onKeyDown:u(_.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&P(e.key));let i=S.current;if(e.target!==i||!ue.includes(e.key))return;e.preventDefault();let a=b().filter(e=>!e.disabled).map(e=>e.ref.current);le.includes(e.key)&&a.reverse(),Ze(a)}),onBlur:u(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(E.current),D.current=``)}),onPointerMove:u(e.onPointerMove,Z(e=>{let t=e.target,n=A.current!==e.clientX;e.currentTarget.contains(t)&&n&&(k.current=e.clientX>A.current?`right`:`left`,A.current=e.clientX)}))})})})})})})});be.displayName=B;var we=`MenuGroup`,U=C.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,w.jsx)(i.div,{role:`group`,...r,ref:t})});U.displayName=we;var Te=`MenuLabel`,Ee=C.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,w.jsx)(i.div,{...r,ref:t})});Ee.displayName=Te;var W=`MenuItem`,De=`menu.itemSelect`,G=C.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:i,...a}=e,s=C.useRef(null),c=L(W,e.__scopeMenu),l=V(W,e.__scopeMenu),d=o(t,s),f=C.useRef(!1),p=()=>{let e=s.current;if(!n&&e){let t=new CustomEvent(De,{bubbles:!0,cancelable:!0});e.addEventListener(De,e=>i?.(e),{once:!0}),r(e,t),t.defaultPrevented?f.current=!1:c.onClose()}};return(0,w.jsx)(Oe,{...a,ref:d,disabled:n,onClick:u(e.onClick,p),onPointerDown:t=>{e.onPointerDown?.(t),f.current=!0},onPointerUp:u(e.onPointerUp,e=>{f.current||e.currentTarget?.click()}),onKeyDown:u(e.onKeyDown,e=>{let t=l.searchRef.current!==``;n||t&&e.key===` `||T.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});G.displayName=W;var Oe=C.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:r=!1,textValue:a,...s}=e,c=V(W,n),l=pe(n),d=C.useRef(null),f=o(t,d),[p,m]=C.useState(!1),[h,g]=C.useState(``);return C.useEffect(()=>{let e=d.current;e&&g((e.textContent??``).trim())},[s.children]),(0,w.jsx)(k.ItemSlot,{scope:n,disabled:r,textValue:a??h,children:(0,w.jsx)(ee,{asChild:!0,...l,focusable:!r,children:(0,w.jsx)(i.div,{role:`menuitem`,"data-highlighted":p?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...s,ref:f,onPointerMove:u(e.onPointerMove,Z(e=>{r?c.onItemLeave(e):(c.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:u(e.onPointerLeave,Z(e=>c.onItemLeave(e))),onFocus:u(e.onFocus,()=>m(!0)),onBlur:u(e.onBlur,()=>m(!1))})})})}),ke=`MenuCheckboxItem`,Ae=C.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,w.jsx)(Le,{scope:e.__scopeMenu,checked:n,children:(0,w.jsx)(G,{role:`menuitemcheckbox`,"aria-checked":Y(n)?`mixed`:n,...i,ref:t,"data-state":X(n),onSelect:u(i.onSelect,()=>r?.(Y(n)?!0:!n),{checkForDefaultPrevented:!1})})})});Ae.displayName=ke;var je=`MenuRadioGroup`,[Me,Ne]=j(je,{value:void 0,onValueChange:()=>{}}),Pe=C.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=_(r);return(0,w.jsx)(Me,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,w.jsx)(U,{...i,ref:t})})});Pe.displayName=je;var Fe=`MenuRadioItem`,Ie=C.forwardRef((e,t)=>{let{value:n,...r}=e,i=Ne(Fe,e.__scopeMenu),a=n===i.value;return(0,w.jsx)(Le,{scope:e.__scopeMenu,checked:a,children:(0,w.jsx)(G,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":X(a),onSelect:u(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});Ie.displayName=Fe;var K=`MenuItemIndicator`,[Le,Re]=j(K,{checked:!1}),ze=C.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...a}=e,o=Re(K,n);return(0,w.jsx)(h,{present:r||Y(o.checked)||o.checked===!0,children:(0,w.jsx)(i.span,{...a,ref:t,"data-state":X(o.checked)})})});ze.displayName=K;var Be=`MenuSeparator`,Ve=C.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,w.jsx)(i.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});Ve.displayName=Be;var He=`MenuArrow`,Ue=C.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=N(n);return(0,w.jsx)(se,{...i,...r,ref:t})});Ue.displayName=He;var q=`MenuSub`,[We,Ge]=j(q),Ke=e=>{let{__scopeMenu:t,children:n,open:r=!1,onOpenChange:i}=e,a=F(q,t),o=N(t),[s,c]=C.useState(null),[l,u]=C.useState(null),d=_(i);return C.useEffect(()=>(a.open===!1&&d(!1),()=>d(!1)),[a.open,d]),(0,w.jsx)(b,{...o,children:(0,w.jsx)(P,{scope:t,open:r,onOpenChange:d,content:l,onContentChange:u,children:(0,w.jsx)(We,{scope:t,contentId:g(),triggerId:g(),trigger:s,onTriggerChange:c,children:n})})})};Ke.displayName=q;var J=`MenuSubTrigger`,qe=C.forwardRef((e,t)=>{let n=F(J,e.__scopeMenu),r=L(J,e.__scopeMenu),i=Ge(J,e.__scopeMenu),a=V(J,e.__scopeMenu),o=C.useRef(null),{pointerGraceTimerRef:s,onPointerGraceIntentChange:l}=a,d={__scopeMenu:e.__scopeMenu},f=C.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return C.useEffect(()=>f,[f]),C.useEffect(()=>{let e=s.current;return()=>{window.clearTimeout(e),l(null)}},[s,l]),(0,w.jsx)(R,{asChild:!0,...d,children:(0,w.jsx)(Oe,{id:i.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":i.contentId,"data-state":Xe(n.open),...e,ref:c(t,i.onTriggerChange),onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:u(e.onPointerMove,Z(t=>{a.onItemEnter(t),!t.defaultPrevented&&!e.disabled&&!n.open&&!o.current&&(a.onPointerGraceIntentChange(null),o.current=window.setTimeout(()=>{n.onOpenChange(!0),f()},100))})),onPointerLeave:u(e.onPointerLeave,Z(e=>{f();let t=n.content?.getBoundingClientRect();if(t){let r=n.content?.dataset.side,i=r===`right`,o=i?-5:5,c=t[i?`left`:`right`],l=t[i?`right`:`left`];a.onPointerGraceIntentChange({area:[{x:e.clientX+o,y:e.clientY},{x:c,y:t.top},{x:l,y:t.top},{x:l,y:t.bottom},{x:c,y:t.bottom}],side:r}),window.clearTimeout(s.current),s.current=window.setTimeout(()=>a.onPointerGraceIntentChange(null),300)}else{if(a.onTriggerLeave(e),e.defaultPrevented)return;a.onPointerGraceIntentChange(null)}})),onKeyDown:u(e.onKeyDown,t=>{let i=a.searchRef.current!==``;e.disabled||i&&t.key===` `||D[r.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});qe.displayName=J;var Je=`MenuSubContent`,Ye=C.forwardRef((e,t)=>{let n=_e(B,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=F(B,e.__scopeMenu),s=L(B,e.__scopeMenu),c=Ge(Je,e.__scopeMenu),l=C.useRef(null),d=o(t,l);return(0,w.jsx)(k.Provider,{scope:e.__scopeMenu,children:(0,w.jsx)(h,{present:r||a.open,children:(0,w.jsx)(k.Slot,{scope:e.__scopeMenu,children:(0,w.jsx)(H,{id:c.contentId,"aria-labelledby":c.triggerId,...i,ref:d,align:`start`,side:s.dir===`rtl`?`left`:`right`,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{s.isUsingKeyboardRef.current&&l.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:u(e.onFocusOutside,e=>{e.target!==c.trigger&&a.onOpenChange(!1)}),onEscapeKeyDown:u(e.onEscapeKeyDown,e=>{s.onClose(),e.preventDefault()}),onKeyDown:u(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=de[s.dir].includes(e.key);t&&n&&(a.onOpenChange(!1),c.trigger?.focus(),e.preventDefault())})})})})})});Ye.displayName=Je;function Xe(e){return e?`open`:`closed`}function Y(e){return e===`indeterminate`}function X(e){return Y(e)?`indeterminate`:e?`checked`:`unchecked`}function Ze(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function Qe(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function $e(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=Qe(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function et(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;er!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function tt(e,t){return t?et({x:e.clientX,y:e.clientY},t):!1}function Z(e){return t=>t.pointerType===`mouse`?e(t):void 0}var nt=me,rt=R,it=ve,at=be,ot=U,st=Ee,ct=G,lt=Ae,ut=Pe,dt=Ie,ft=ze,pt=Ve,mt=Ue,ht=qe,gt=Ye,Q=`DropdownMenu`,[_t,vt]=l(Q,[M]),$=M(),[yt,bt]=_t(Q),xt=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,c=$(t),l=C.useRef(null),[u,f]=d({prop:i,defaultProp:a??!1,onChange:o,caller:Q});return(0,w.jsx)(yt,{scope:t,triggerId:g(),triggerRef:l,contentId:g(),open:u,onOpenChange:f,onOpenToggle:C.useCallback(()=>f(e=>!e),[f]),modal:s,children:(0,w.jsx)(nt,{...c,open:u,onOpenChange:f,dir:r,modal:s,children:n})})};xt.displayName=Q;var St=`DropdownMenuTrigger`,Ct=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:r=!1,...a}=e,o=bt(St,n),s=$(n);return(0,w.jsx)(rt,{asChild:!0,...s,children:(0,w.jsx)(i.button,{type:`button`,id:o.triggerId,"aria-haspopup":`menu`,"aria-expanded":o.open,"aria-controls":o.open?o.contentId:void 0,"data-state":o.open?`open`:`closed`,"data-disabled":r?``:void 0,disabled:r,...a,ref:c(t,o.triggerRef),onPointerDown:u(e.onPointerDown,e=>{!r&&e.button===0&&e.ctrlKey===!1&&(o.onOpenToggle(),o.open||e.preventDefault())}),onKeyDown:u(e.onKeyDown,e=>{r||([`Enter`,` `].includes(e.key)&&o.onOpenToggle(),e.key===`ArrowDown`&&o.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});Ct.displayName=St;var wt=`DropdownMenuPortal`,Tt=e=>{let{__scopeDropdownMenu:t,...n}=e,r=$(t);return(0,w.jsx)(it,{...r,...n})};Tt.displayName=wt;var Et=`DropdownMenuContent`,Dt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=bt(Et,n),a=$(n),o=C.useRef(!1);return(0,w.jsx)(at,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:u(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:u(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;(!i.modal||r)&&(o.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});Dt.displayName=Et;var Ot=`DropdownMenuGroup`,kt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(ot,{...i,...r,ref:t})});kt.displayName=Ot;var At=`DropdownMenuLabel`,jt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(st,{...i,...r,ref:t})});jt.displayName=At;var Mt=`DropdownMenuItem`,Nt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(ct,{...i,...r,ref:t})});Nt.displayName=Mt;var Pt=`DropdownMenuCheckboxItem`,Ft=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(lt,{...i,...r,ref:t})});Ft.displayName=Pt;var It=`DropdownMenuRadioGroup`,Lt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(ut,{...i,...r,ref:t})});Lt.displayName=It;var Rt=`DropdownMenuRadioItem`,zt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(dt,{...i,...r,ref:t})});zt.displayName=Rt;var Bt=`DropdownMenuItemIndicator`,Vt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(ft,{...i,...r,ref:t})});Vt.displayName=Bt;var Ht=`DropdownMenuSeparator`,Ut=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(pt,{...i,...r,ref:t})});Ut.displayName=Ht;var Wt=`DropdownMenuArrow`,Gt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(mt,{...i,...r,ref:t})});Gt.displayName=Wt;var Kt=`DropdownMenuSubTrigger`,qt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(ht,{...i,...r,ref:t})});qt.displayName=Kt;var Jt=`DropdownMenuSubContent`,Yt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(gt,{...i,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});Yt.displayName=Jt;var Xt=xt,Zt=Ct,Qt=Tt,$t=Dt,en=kt,tn=jt,nn=Nt,rn=Ft,an=Vt,on=Ut;function sn({...e}){return(0,w.jsx)(Xt,{"data-slot":`dropdown-menu`,...e})}function cn({...e}){return(0,w.jsx)(Zt,{"data-slot":`dropdown-menu-trigger`,...e})}function ln({className:e,sideOffset:t=4,...n}){return(0,w.jsx)(Qt,{children:(0,w.jsx)($t,{className:s(`data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=closed]:animate-out data-[state=open]:animate-in`,e),"data-slot":`dropdown-menu-content`,sideOffset:t,...n})})}function un({...e}){return(0,w.jsx)(en,{"data-slot":`dropdown-menu-group`,...e})}function dn({className:e,inset:t,variant:n=`default`,...r}){return(0,w.jsx)(nn,{className:s(`relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[disabled]:opacity-50 data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[variant=destructive]:*:[svg]:text-destructive!`,e),"data-inset":t,"data-slot":`dropdown-menu-item`,"data-variant":n,...r})}function fn({className:e,children:t,checked:n,...r}){return(0,w.jsxs)(rn,{checked:n,className:s(`relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0`,e),"data-slot":`dropdown-menu-checkbox-item`,...r,children:[(0,w.jsx)(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:(0,w.jsx)(an,{children:(0,w.jsx)(S,{className:`size-4`})})}),t]})}function pn({className:e,inset:t,...n}){return(0,w.jsx)(tn,{className:s(`px-2 py-1.5 font-medium text-sm data-[inset]:pl-8`,e),"data-inset":t,"data-slot":`dropdown-menu-label`,...n})}function mn({className:e,...t}){return(0,w.jsx)(on,{className:s(`-mx-1 my-1 h-px bg-border`,e),"data-slot":`dropdown-menu-separator`,...t})}function hn({className:e,...t}){return(0,w.jsx)(`span`,{className:s(`ml-auto text-muted-foreground text-xs tracking-widest`,e),"data-slot":`dropdown-menu-shortcut`,...t})}export{dn as a,hn as c,un as i,cn as l,fn as n,pn as o,ln as r,mn as s,sn as t,Ct as u}; \ No newline at end of file diff --git a/src/www/assets/ellipsis-DvvxWQuy.js b/src/www/assets/ellipsis-DvvxWQuy.js new file mode 100644 index 0000000..20aac18 --- /dev/null +++ b/src/www/assets/ellipsis-DvvxWQuy.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/empty-state-BelJgFUf.js b/src/www/assets/empty-state-BelJgFUf.js new file mode 100644 index 0000000..2b6f174 --- /dev/null +++ b/src/www/assets/empty-state-BelJgFUf.js @@ -0,0 +1 @@ +import{Qu as e,r as t}from"./messages-BOl-zx8S.js";import{i as n}from"./button-D-oR8d6w.js";import{t as r}from"./createLucideIcon-DMX28cCu.js";var i=r(`inbox`,[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]),a=r(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),o=r(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),s=e();function c({className:e,description:r=t(),icon:a,title:o}){return(0,s.jsxs)(`div`,{className:n(`flex flex-col items-center justify-center gap-3 py-16 text-center`,e),children:[(0,s.jsx)(`div`,{className:`flex size-12 items-center justify-center rounded-full bg-muted text-muted-foreground`,children:a??(0,s.jsx)(i,{className:`size-6`})}),o&&(0,s.jsx)(`p`,{className:`font-medium text-sm`,children:o}),(0,s.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:r})]})}export{o as n,a as r,c as t}; \ No newline at end of file diff --git a/src/www/assets/epay-CSwdoLsE.js b/src/www/assets/epay-CSwdoLsE.js new file mode 100644 index 0000000..f052de5 --- /dev/null +++ b/src/www/assets/epay-CSwdoLsE.js @@ -0,0 +1 @@ +import{$u as e,Al as t,Dl as n,Ol as r,Qu as i,gt as a,ht as o,kl as s,mt as c,nd as l}from"./messages-BOl-zx8S.js";import{t as u}from"./button-D-oR8d6w.js";import{c as d,s as f}from"./zod-DzRgHmfz.js";import{a as p,c as m,i as h,l as g,n as _,o as v,s as y,t as b}from"./form-uKra2bmF.js";import{t as x}from"./input-CZHXycLK.js";import{t as S}from"./page-header-BRM1dngJ.js";import{a as C,i as w,n as T,t as E}from"./lib-_PocwKaj.js";var D=l(e(),1),O=i(),k=f({defaultToken:d().min(1,s()),defaultCurrency:d().min(1,r()),defaultNetwork:d().min(1,n())});function A(){let e=w(`epay`),t=C(),i=g({resolver:m(k),defaultValues:{defaultToken:``,defaultCurrency:``,defaultNetwork:``}});(0,D.useEffect)(()=>{let t=e.data?.data;t&&i.reset({defaultToken:E(t,`epay.default_token`),defaultCurrency:E(t,`epay.default_currency`),defaultNetwork:E(t,`epay.default_network`)})},[e.data,i]);async function a(n){await T(t.mutateAsync,[{group:`epay`,key:`epay.default_token`,type:`string`,value:n.defaultToken},{group:`epay`,key:`epay.default_currency`,type:`string`,value:n.defaultCurrency},{group:`epay`,key:`epay.default_network`,type:`string`,value:n.defaultNetwork}],o()),await e.refetch()}return(0,O.jsx)(b,{...i,children:(0,O.jsxs)(`form`,{className:`space-y-6`,onSubmit:i.handleSubmit(a),children:[(0,O.jsx)(h,{control:i.control,name:`defaultToken`,render:({field:e})=>(0,O.jsxs)(p,{children:[(0,O.jsx)(v,{children:s()}),(0,O.jsx)(_,{children:(0,O.jsx)(x,{placeholder:`usdt`,...e})}),(0,O.jsx)(y,{})]})}),(0,O.jsx)(h,{control:i.control,name:`defaultCurrency`,render:({field:e})=>(0,O.jsxs)(p,{children:[(0,O.jsx)(v,{children:r()}),(0,O.jsx)(_,{children:(0,O.jsx)(x,{placeholder:`cny`,...e})}),(0,O.jsx)(y,{})]})}),(0,O.jsx)(h,{control:i.control,name:`defaultNetwork`,render:({field:e})=>(0,O.jsxs)(p,{children:[(0,O.jsx)(v,{children:n()}),(0,O.jsx)(_,{children:(0,O.jsx)(x,{placeholder:`tron`,...e})}),(0,O.jsx)(y,{})]})}),(0,O.jsx)(u,{disabled:t.isPending||e.isLoading,type:`submit`,children:c()})]})})}function j(){return(0,O.jsx)(S,{description:a(),title:t(),variant:`section`,children:(0,O.jsx)(A,{})})}var M=j;export{M as component}; \ No newline at end of file diff --git a/src/www/assets/es2015-DRmlSfkW.js b/src/www/assets/es2015-DRmlSfkW.js new file mode 100644 index 0000000..6b1c25a --- /dev/null +++ b/src/www/assets/es2015-DRmlSfkW.js @@ -0,0 +1,41 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{d as i}from"./button-D-oR8d6w.js";import{t as a}from"./dist-oydJxq9L.js";var o=n(e(),1),s=t(),c=`focusScope.autoFocusOnMount`,l=`focusScope.autoFocusOnUnmount`,u={bubbles:!1,cancelable:!0},d=`FocusScope`,f=o.forwardRef((e,t)=>{let{loop:n=!1,trapped:d=!1,onMountAutoFocus:f,onUnmountAutoFocus:g,..._}=e,[v,x]=o.useState(null),S=a(f),w=a(g),T=o.useRef(null),E=i(t,e=>x(e)),D=o.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;o.useEffect(()=>{if(d){let e=function(e){if(D.paused||!v)return;let t=e.target;v.contains(t)?T.current=t:y(T.current,{select:!0})},t=function(e){if(D.paused||!v)return;let t=e.relatedTarget;t!==null&&(v.contains(t)||y(T.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&y(v)};document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return v&&r.observe(v,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[d,v,D.paused]),o.useEffect(()=>{if(v){b.add(D);let e=document.activeElement;if(!v.contains(e)){let t=new CustomEvent(c,u);v.addEventListener(c,S),v.dispatchEvent(t),t.defaultPrevented||(p(C(h(v)),{select:!0}),document.activeElement===e&&y(v))}return()=>{v.removeEventListener(c,S),setTimeout(()=>{let t=new CustomEvent(l,u);v.addEventListener(l,w),v.dispatchEvent(t),t.defaultPrevented||y(e??document.body,{select:!0}),v.removeEventListener(l,w),b.remove(D)},0)}}},[v,S,w,D]);let O=o.useCallback(e=>{if(!n&&!d||D.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,r=document.activeElement;if(t&&r){let t=e.currentTarget,[i,a]=m(t);i&&a?!e.shiftKey&&r===a?(e.preventDefault(),n&&y(i,{select:!0})):e.shiftKey&&r===i&&(e.preventDefault(),n&&y(a,{select:!0})):r===t&&e.preventDefault()}},[n,d,D.paused]);return(0,s.jsx)(r.div,{tabIndex:-1,..._,ref:E,onKeyDown:O})});f.displayName=d;function p(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(y(r,{select:t}),document.activeElement!==n)return}function m(e){let t=h(e);return[g(t,e),g(t.reverse(),e)]}function h(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function g(e,t){for(let n of e)if(!_(n,{upTo:t}))return n}function _(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}function v(e){return e instanceof HTMLInputElement&&`select`in e}function y(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&v(e)&&t&&e.select()}}var b=x();function x(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=S(e,t),e.unshift(t)},remove(t){e=S(e,t),e[0]?.resume()}}}function S(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function C(e){return e.filter(e=>e.tagName!==`A`)}var w=0;function T(){o.useEffect(()=>{let e=document.querySelectorAll(`[data-radix-focus-guard]`);return document.body.insertAdjacentElement(`afterbegin`,e[0]??E()),document.body.insertAdjacentElement(`beforeend`,e[1]??E()),w++,()=>{w===1&&document.querySelectorAll(`[data-radix-focus-guard]`).forEach(e=>e.remove()),w--}},[])}function E(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}var D=function(){return D=Object.assign||function(e){for(var t,n=1,r=arguments.length;n`u`)return ge;var t=_e(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},ye=R(),B=`data-scroll-locked`,be=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),` + .${te} { + overflow: hidden ${r}; + padding-right: ${s}px ${r}; + } + body[${B}] { + overflow: hidden ${r}; + overscroll-behavior: contain; + ${[t&&`position: relative ${r};`,n===`margin`&&` + padding-left: ${i}px; + padding-top: ${a}px; + padding-right: ${o}px; + margin-left:0; + margin-top:0; + margin-right: ${s}px ${r}; + `,n===`padding`&&`padding-right: ${s}px ${r};`].filter(Boolean).join(``)} + } + + .${k} { + right: ${s}px ${r}; + } + + .${A} { + margin-right: ${s}px ${r}; + } + + .${k} .${k} { + right: 0 ${r}; + } + + .${A} .${A} { + margin-right: 0 ${r}; + } + + body[${B}] { + ${ne}: ${s}px; + } +`},V=function(){var e=parseInt(document.body.getAttribute(`data-scroll-locked`)||`0`,10);return isFinite(e)?e:0},xe=function(){o.useEffect(function(){return document.body.setAttribute(B,(V()+1).toString()),function(){var e=V()-1;e<=0?document.body.removeAttribute(B):document.body.setAttribute(B,e.toString())}},[])},Se=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?`margin`:r;xe();var a=o.useMemo(function(){return ve(i)},[i]);return o.createElement(ye,{styles:be(a,!t,i,n?``:`!important`)})},H=!1;if(typeof window<`u`)try{var U=Object.defineProperty({},`passive`,{get:function(){return H=!0,!0}});window.addEventListener(`test`,U,U),window.removeEventListener(`test`,U,U)}catch{H=!1}var W=H?{passive:!1}:!1,Ce=function(e){return e.tagName===`TEXTAREA`},G=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==`hidden`&&!(n.overflowY===n.overflowX&&!Ce(e)&&n[t]===`visible`)},we=function(e){return G(e,`overflowY`)},Te=function(e){return G(e,`overflowX`)},K=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<`u`&&r instanceof ShadowRoot&&(r=r.host),q(e,r)){var i=Oe(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},Ee=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},De=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},q=function(e,t){return e===`v`?we(t):Te(t)},Oe=function(e,t){return e===`v`?Ee(t):De(t)},ke=function(e,t){return e===`h`&&t===`rtl`?-1:1},Ae=function(e,t,n,r,i){var a=ke(e,window.getComputedStyle(t).direction),o=a*r,s=n.target,c=t.contains(s),l=!1,u=o>0,d=0,f=0;do{if(!s)break;var p=Oe(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&q(e,s)&&(d+=h,f+=m);var g=s.parentNode;s=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(u&&(i&&Math.abs(d)<1||!i&&o>d)||!u&&(i&&Math.abs(f)<1||!i&&-o>f))&&(l=!0),l},J=function(e){return`changedTouches`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},je=function(e){return[e.deltaX,e.deltaY]},Me=function(e){return e&&`current`in e?e.current:e},Ne=function(e,t){return e[0]===t[0]&&e[1]===t[1]},Pe=function(e){return` + .block-interactivity-${e} {pointer-events: none;} + .allow-interactivity-${e} {pointer-events: all;} +`},Fe=0,Y=[];function Ie(e){var t=o.useRef([]),n=o.useRef([0,0]),r=o.useRef(),i=o.useState(Fe++)[0],a=o.useState(R)[0],s=o.useRef(e);o.useEffect(function(){s.current=e},[e]),o.useEffect(function(){if(e.inert){document.body.classList.add(`block-interactivity-${i}`);var t=ee([e.lockRef.current],(e.shards||[]).map(Me),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(`allow-interactivity-${i}`)}),function(){document.body.classList.remove(`block-interactivity-${i}`),t.forEach(function(e){return e.classList.remove(`allow-interactivity-${i}`)})}}},[e.inert,e.lockRef.current,e.shards]);var c=o.useCallback(function(e,t){if(`touches`in e&&e.touches.length===2||e.type===`wheel`&&e.ctrlKey)return!s.current.allowPinchZoom;var i=J(e),a=n.current,o=`deltaX`in e?e.deltaX:a[0]-i[0],c=`deltaY`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(o)>Math.abs(c)?`h`:`v`;if(`touches`in e&&d===`h`&&u.type===`range`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=K(d,u);if(!m)return!0;if(m?l=d:(l=d===`v`?`h`:`v`,m=K(d,u)),!m)return!1;if(!r.current&&`changedTouches`in e&&(o||c)&&(r.current=l),!l)return!0;var h=r.current||l;return Ae(h,t,e,h===`h`?o:c,!0)},[]),l=o.useCallback(function(e){var n=e;if(!(!Y.length||Y[Y.length-1]!==a)){var r=`deltaY`in n?je(n):J(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&Ne(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var o=(s.current.shards||[]).map(Me).filter(Boolean).filter(function(e){return e.contains(n.target)});(o.length>0?c(n,o[0]):!s.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),u=o.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:Le(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),d=o.useCallback(function(e){n.current=J(e),r.current=void 0},[]),f=o.useCallback(function(t){u(t.type,je(t),t.target,c(t,e.lockRef.current))},[]),p=o.useCallback(function(t){u(t.type,J(t),t.target,c(t,e.lockRef.current))},[]);o.useEffect(function(){return Y.push(a),e.setCallbacks({onScrollCapture:f,onWheelCapture:f,onTouchMoveCapture:p}),document.addEventListener(`wheel`,l,W),document.addEventListener(`touchmove`,l,W),document.addEventListener(`touchstart`,d,W),function(){Y=Y.filter(function(e){return e!==a}),document.removeEventListener(`wheel`,l,W),document.removeEventListener(`touchmove`,l,W),document.removeEventListener(`touchstart`,d,W)}},[]);var m=e.removeScrollBar,h=e.inert;return o.createElement(o.Fragment,null,h?o.createElement(a,{styles:Pe(i)}):null,m?o.createElement(Se,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function Le(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var Re=le(P,Ie),ze=o.forwardRef(function(e,t){return o.createElement(I,D({},e,{ref:t,sideCar:Re}))});ze.classNames=I.classNames;var Be=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},X=new WeakMap,Z=new WeakMap,Q={},$=0,Ve=function(e){return e&&(e.host||Ve(e.parentNode))},He=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=Ve(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},Ue=function(e,t,n,r){var i=He(t,Array.isArray(e)?e:[e]);Q[n]||(Q[n]=new WeakMap);var a=Q[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(X.get(e)||0)+1,l=(a.get(e)||0)+1;X.set(e,c),a.set(e,l),o.push(e),c===1&&i&&Z.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return u(t),s.clear(),$++,function(){o.forEach(function(e){var t=X.get(e)-1,i=a.get(e)-1;X.set(e,t),a.set(e,i),t||(Z.has(e)||e.removeAttribute(r),Z.delete(e)),i||e.removeAttribute(n)}),$--,$||(X=new WeakMap,X=new WeakMap,Z=new WeakMap,Q={})}},We=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||Be(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),Ue(r,i,n,`aria-hidden`)):function(){return null}};export{f as i,ze as n,T as r,We as t}; \ No newline at end of file diff --git a/src/www/assets/eye-CJkHHosh.js b/src/www/assets/eye-CJkHHosh.js new file mode 100644 index 0000000..53b2b76 --- /dev/null +++ b/src/www/assets/eye-CJkHHosh.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/eye-off-BBTW1z_J.js b/src/www/assets/eye-off-BBTW1z_J.js new file mode 100644 index 0000000..21818c4 --- /dev/null +++ b/src/www/assets/eye-off-BBTW1z_J.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/font-provider-BBeIKmOK.js b/src/www/assets/font-provider-BBeIKmOK.js new file mode 100644 index 0000000..a492725 --- /dev/null +++ b/src/www/assets/font-provider-BBeIKmOK.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{n as r,r as i,t as a}from"./cookies-D0aVbsDr.js";var o=n(e(),1),s=[`inter`,`manrope`,`noto`,`system`],c=t(),l=`font`,u=3600*24*365,d=(0,o.createContext)(null);function f({children:e}){let[t,n]=(0,o.useState)(()=>{let e=a(l);return s.includes(e)?e:s[0]});return(0,o.useEffect)(()=>{(e=>{let t=document.documentElement;t.classList.remove(...[...t.classList].filter(e=>e.startsWith(`font-`))),t.classList.add(`font-${e}`)})(t)},[t]),(0,c.jsx)(d,{value:{font:t,setFont:e=>{i(l,e,u),n(e)},resetFont:()=>{r(l),n(s[0])}},children:e})}var p=()=>{let e=(0,o.useContext)(d);if(!e)throw Error(`useFont must be used within a FontProvider`);return e};export{p as n,s as r,f as t}; \ No newline at end of file diff --git a/src/www/assets/forbidden-B-WSRpe6.js b/src/www/assets/forbidden-B-WSRpe6.js new file mode 100644 index 0000000..dc95d00 --- /dev/null +++ b/src/www/assets/forbidden-B-WSRpe6.js @@ -0,0 +1 @@ +import{C as e,Qu as t,T as n,al as r,il as i,w as a}from"./messages-BOl-zx8S.js";import{t as o}from"./useRouter-DS97kuA5.js";import{t as s}from"./useNavigate-BNrwOhV8.js";import{t as c}from"./button-D-oR8d6w.js";var l=t();function u(){let t=s(),{history:u}=o();return(0,l.jsx)(`div`,{className:`h-svh`,children:(0,l.jsxs)(`div`,{className:`m-auto flex h-full w-full flex-col items-center justify-center gap-2`,children:[(0,l.jsx)(`h1`,{className:`font-bold text-[7rem] leading-tight`,children:`403`}),(0,l.jsx)(`span`,{className:`font-medium`,children:n()}),(0,l.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[a(),` `,(0,l.jsx)(`br`,{}),e()]}),(0,l.jsxs)(`div`,{className:`mt-6 flex gap-4`,children:[(0,l.jsx)(c,{onClick:()=>u.go(-1),variant:`outline`,children:r()}),(0,l.jsx)(c,{onClick:()=>t({to:`/dashboard`}),children:i()})]})]})})}export{u as t}; \ No newline at end of file diff --git a/src/www/assets/form-uKra2bmF.js b/src/www/assets/form-uKra2bmF.js new file mode 100644 index 0000000..316f79e --- /dev/null +++ b/src/www/assets/form-uKra2bmF.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{i as r,s as i}from"./button-D-oR8d6w.js";import{t as a}from"./label-B2Q8_O-h.js";import{d as o,l as s,u as c}from"./zod-DzRgHmfz.js";var l=n(e(),1),u=e=>e.type===`checkbox`,d=e=>e instanceof Date,f=e=>e==null,p=e=>typeof e==`object`,m=e=>!f(e)&&!Array.isArray(e)&&p(e)&&!d(e),h=e=>m(e)&&e.target?u(e.target)?e.target.checked:e.target.value:e,g=(e,t)=>t.split(`.`).some((t,n,r)=>!isNaN(Number(t))&&e.has(r.slice(0,n).join(`.`))),_=e=>{let t=e.constructor&&e.constructor.prototype;return m(t)&&t.hasOwnProperty(`isPrototypeOf`)},v=typeof window<`u`&&window.HTMLElement!==void 0&&typeof document<`u`;function y(e){if(e instanceof Date)return new Date(e);let t=typeof FileList<`u`&&e instanceof FileList;if(v&&(e instanceof Blob||t))return e;let n=Array.isArray(e);if(!n&&!(m(e)&&_(e)))return e;let r=n?[]:Object.create(Object.getPrototypeOf(e));for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=y(e[t]));return r}var b=e=>/^\w*$/.test(e),x=e=>e===void 0,S=e=>Array.isArray(e)?e.filter(Boolean):[],C=e=>S(e.replace(/["|']|\]/g,``).split(/\.|\[/)),w=(e,t,n)=>{if(!t||!m(e))return n;let r=(b(t)?[t]:C(t)).reduce((e,t)=>f(e)?e:e[t],e);return x(r)||r===e?x(e[t])?n:e[t]:r},T=e=>typeof e==`boolean`,E=e=>typeof e==`function`,D=(e,t,n)=>{let r=-1,i=b(t)?[t]:C(t),a=i.length,o=a-1;for(;++rl.useContext(M),P=(e,t,n,r=!0)=>{let i={defaultValues:t._defaultValues};for(let a in e)Object.defineProperty(i,a,{get:()=>{let i=a;return t._proxyFormState[i]!==k.all&&(t._proxyFormState[i]=!r||k.all),n&&(n[i]=!0),e[i]}});return i},F=typeof window<`u`?l.useLayoutEffect:l.useEffect;function te(e){let t=N(),{control:n=t,disabled:r,name:i,exact:a}=e||{},[o,s]=l.useState(n._formState),c=l.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return F(()=>n._subscribe({name:i,formState:c.current,exact:a,callback:e=>{!r&&s({...n._formState,...e})}}),[i,r,a]),l.useEffect(()=>{c.current.isValid&&n._setValid(!0)},[n]),l.useMemo(()=>P(o,n,c.current,!1),[o,n])}var I=e=>typeof e==`string`,ne=(e,t,n,r,i)=>I(e)?(r&&t.watch.add(e),w(n,e,i)):Array.isArray(e)?e.map(e=>(r&&t.watch.add(e),w(n,e))):(r&&(t.watchAll=!0),n),re=e=>f(e)||!p(e);function L(e,t,n=new WeakSet){if(re(e)||re(t))return Object.is(e,t);if(d(e)&&d(t))return Object.is(e.getTime(),t.getTime());let r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;if(n.has(e)||n.has(t))return!0;n.add(e),n.add(t);for(let a of r){let r=e[a];if(!i.includes(a))return!1;if(a!==`ref`){let e=t[a];if(d(r)&&d(e)||(m(r)||Array.isArray(r))&&(m(e)||Array.isArray(e))?!L(r,e,n):!Object.is(r,e))return!1}}return!0}function ie(e){let t=N(),{control:n=t,name:r,defaultValue:i,disabled:a,exact:o,compute:s}=e||{},c=l.useRef(i),u=l.useRef(s),d=l.useRef(void 0),f=l.useRef(n),p=l.useRef(r);u.current=s;let[m,h]=l.useState(()=>{let e=n._getWatch(r,c.current);return u.current?u.current(e):e}),g=l.useCallback(e=>{let t=ne(r,n._names,e||n._formValues,!1,c.current);return u.current?u.current(t):t},[n._formValues,n._names,r]),_=l.useCallback(e=>{if(!a){let t=ne(r,n._names,e||n._formValues,!1,c.current);if(u.current){let e=u.current(t);L(e,d.current)||(h(e),d.current=e)}else h(t)}},[n._formValues,n._names,a,r]);F(()=>((f.current!==n||!L(p.current,r))&&(f.current=n,p.current=r,_()),n._subscribe({name:r,formState:{values:!0},exact:o,callback:e=>{_(e.values)}})),[n,o,r,_]),l.useEffect(()=>n._removeUnmounted());let v=f.current!==n,y=p.current,b=l.useMemo(()=>{if(a)return null;let e=!v&&!L(y,r);return v||e?g():null},[a,v,r,y,g]);return b===null?m:b}function ae(e){let t=N(),{name:n,disabled:r,control:i=t,shouldUnregister:a,defaultValue:o,exact:s=!0}=e,c=g(i._names.array,n),u=ie({control:i,name:n,defaultValue:l.useMemo(()=>w(i._formValues,n,w(i._defaultValues,n,o)),[i,n,o]),exact:s}),d=te({control:i,name:n,exact:s}),f=l.useRef(e),p=l.useRef(void 0),m=l.useRef(i.register(n,{...e.rules,value:u,...T(e.disabled)?{disabled:e.disabled}:{}}));f.current=e;let _=l.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!w(d.errors,n)},isDirty:{enumerable:!0,get:()=>!!w(d.dirtyFields,n)},isTouched:{enumerable:!0,get:()=>!!w(d.touchedFields,n)},isValidating:{enumerable:!0,get:()=>!!w(d.validatingFields,n)},error:{enumerable:!0,get:()=>w(d.errors,n)}}),[d,n]),v=l.useCallback(e=>m.current.onChange({target:{value:h(e),name:n},type:O.CHANGE}),[n]),b=l.useCallback(()=>m.current.onBlur({target:{value:w(i._formValues,n),name:n},type:O.BLUR}),[n,i._formValues]),S=l.useCallback(e=>{let t=w(i._fields,n);t&&t._f&&e&&(t._f.ref={focus:()=>E(e.focus)&&e.focus(),select:()=>E(e.select)&&e.select(),setCustomValidity:t=>E(e.setCustomValidity)&&e.setCustomValidity(t),reportValidity:()=>E(e.reportValidity)&&e.reportValidity()})},[i._fields,n]),C=l.useMemo(()=>({name:n,value:u,...T(r)||d.disabled?{disabled:d.disabled||r}:{},onChange:v,onBlur:b,ref:S}),[n,r,d.disabled,v,b,S,u]);return l.useEffect(()=>{let e=i._options.shouldUnregister||a,t=p.current;t&&t!==n&&!c&&i.unregister(t),i.register(n,{...f.current.rules,...T(f.current.disabled)?{disabled:f.current.disabled}:{}});let r=(e,t)=>{let n=w(i._fields,e);n&&n._f&&(n._f.mount=t)};if(r(n,!0),e){let e=y(w(i._options.defaultValues,n,f.current.defaultValue));D(i._defaultValues,n,e),x(w(i._formValues,n))&&D(i._formValues,n,e)}return!c&&i.register(n),p.current=n,()=>{(c?e&&!i._state.action:e)?i.unregister(n):r(n,!1)}},[n,i,c,a]),l.useEffect(()=>{i._setDisabledField({disabled:r,name:n})},[r,n,i]),l.useMemo(()=>({field:C,formState:d,fieldState:_}),[C,d,_])}var oe=e=>e.render(ae(e)),se=l.createContext(null);se.displayName=`HookFormContext`;var ce=()=>l.useContext(se),R=e=>{let{children:t,watch:n,getValues:r,getFieldState:i,setError:a,clearErrors:o,setValue:s,trigger:c,formState:u,resetField:d,reset:f,handleSubmit:p,unregister:m,control:h,register:g,setFocus:_,subscribe:v}=e,y=l.useMemo(()=>({watch:n,getValues:r,getFieldState:i,setError:a,clearErrors:o,setValue:s,trigger:c,formState:u,resetField:d,reset:f,handleSubmit:p,unregister:m,control:h,register:g,setFocus:_,subscribe:v}),[o,h,u,i,r,p,g,f,d,a,_,s,v,c,m,n]);return l.createElement(se.Provider,{value:y},l.createElement(M.Provider,{value:y.control},t))},le=(e,t,n,r,i)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:i||!0}}:{},ue=e=>Array.isArray(e)?e:[e],de=()=>{let e=[];return{get observers(){return e},next:t=>{for(let n of e)n.next&&n.next(t)},subscribe:t=>(e.push(t),{unsubscribe:()=>{e=e.filter(e=>e!==t)}}),unsubscribe:()=>{e=[]}}};function fe(e,t){let n={};for(let r in e)if(e.hasOwnProperty(r)){let i=e[r],a=t[r];if(i&&m(i)&&a){let e=fe(i,a);m(e)&&(n[r]=e)}else e[r]&&(n[r]=a)}return n}var z=e=>m(e)&&!Object.keys(e).length,pe=e=>e.type===`file`,me=e=>{if(!v)return!1;let t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},he=e=>e.type===`select-multiple`,B=e=>e.type===`radio`,ge=e=>B(e)||u(e),_e=e=>me(e)&&e.isConnected;function V(e,t){let n=t.slice(0,-1).length,r=0;for(;r{for(let t in e)if(E(e[t]))return!0;return!1};function W(e){return Array.isArray(e)||m(e)&&!U(e)}function ye(e,t={}){for(let n in e){let r=e[n];W(r)?(t[n]=Array.isArray(r)?[]:{},ye(r,t[n])):x(r)||(t[n]=!0)}return t}function G(e,t,n){n||=ye(t);for(let r in e){let i=e[r];if(W(i))x(t)||re(n[r])?n[r]=ye(i,Array.isArray(i)?[]:{}):G(i,f(t)?{}:t[r],n[r]);else{let e=t[r];n[r]=!L(i,e)}}return n}var K={value:!1,isValid:!1},be={value:!0,isValid:!0},q=e=>{if(Array.isArray(e)){if(e.length>1){let t=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!x(e[0].attributes.value)?x(e[0].value)||e[0].value===``?be:{value:e[0].value,isValid:!0}:be:K}return K},xe=(e,{valueAsNumber:t,valueAsDate:n,setValueAs:r})=>x(e)?e:t?e===``?NaN:e&&+e:n&&I(e)?new Date(e):r?r(e):e,Se={isValid:!1,value:null},Ce=e=>Array.isArray(e)?e.reduce((e,t)=>t&&t.checked&&!t.disabled?{isValid:!0,value:t.value}:e,Se):Se;function we(e){let t=e.ref;return pe(t)?t.files:B(t)?Ce(e.refs).value:he(t)?[...t.selectedOptions].map(({value:e})=>e):u(t)?q(e.refs).value:xe(x(t.value)?e.ref.value:t.value,e)}var Te=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,Ee=(e,t,n,r)=>{let i={};for(let n of e){let e=w(t,n);e&&D(i,n,e._f)}return{criteriaMode:n,names:[...e],fields:i,shouldUseNativeValidation:r}},J=e=>e instanceof RegExp,Y=e=>x(e)?e:J(e)?e.source:m(e)?J(e.value)?e.value.source:e.value:e,De=e=>({isOnSubmit:!e||e===k.onSubmit,isOnBlur:e===k.onBlur,isOnChange:e===k.onChange,isOnAll:e===k.all,isOnTouch:e===k.onTouched}),Oe=`AsyncFunction`,ke=e=>!!e&&!!e.validate&&!!(E(e.validate)&&e.validate.constructor.name===Oe||m(e.validate)&&Object.values(e.validate).find(e=>e.constructor.name===Oe)),Ae=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),je=(e,t,n)=>!n&&(t.watchAll||t.watch.has(e)||[...t.watch].some(t=>e.startsWith(t)&&/^\.\w+/.test(e.slice(t.length)))),X=(e,t,n,r)=>{for(let i of n||Object.keys(e)){let n=w(e,i);if(n){let{_f:e,...a}=n;if(e){if(e.refs&&e.refs[0]&&t(e.refs[0],i)&&!r||e.ref&&t(e.ref,e.name)&&!r)return!0;if(X(a,t))break}else if(m(a)&&X(a,t))break}}};function Me(e,t,n){let r=w(e,n);if(r||b(n))return{error:r,name:n};let i=n.split(`.`);for(;i.length;){let r=i.join(`.`),a=w(t,r),o=w(e,r);if(a&&!Array.isArray(a)&&n!==r)return{name:n};if(o&&o.type)return{name:r,error:o};if(o&&o.root&&o.root.type)return{name:`${r}.root`,error:o.root};i.pop()}return{name:n}}var Ne=(e,t,n,r)=>{n(e);let{name:i,...a}=e;return z(a)||Object.keys(a).length>=Object.keys(t).length||Object.keys(a).find(e=>t[e]===(!r||k.all))},Pe=(e,t,n)=>!e||!t||e===t||ue(e).some(e=>e&&(n?e===t:e.startsWith(t)||t.startsWith(e))),Fe=(e,t,n,r,i)=>i.isOnAll?!1:!n&&i.isOnTouch?!(t||e):(n?r.isOnBlur:i.isOnBlur)?!e:(n?r.isOnChange:i.isOnChange)?e:!0,Ie=(e,t)=>!S(w(e,t)).length&&H(e,t),Le=(e,t,n)=>{let r=ue(w(e,n));return D(r,ee,t[n]),D(e,n,r),e};function Re(e,t,n=`validate`){if(I(e)||Array.isArray(e)&&e.every(I)||T(e)&&!e)return{type:n,message:I(e)?e:``,ref:t}}var Z=e=>m(e)&&!J(e)?e:{value:e,message:``},ze=async(e,t,n,r,i,a)=>{let{ref:o,refs:s,required:c,maxLength:l,minLength:d,min:p,max:h,pattern:g,validate:_,name:v,valueAsNumber:y,mount:b}=e._f,S=w(n,v);if(!b||t.has(v))return{};let C=s?s[0]:o,D=e=>{i&&C.reportValidity&&(C.setCustomValidity(T(e)?``:e||``),C.reportValidity())},O={},k=B(o),j=u(o),ee=k||j,M=(y||pe(o))&&x(o.value)&&x(S)||me(o)&&o.value===``||S===``||Array.isArray(S)&&!S.length,N=le.bind(null,v,r,O),P=(e,t,n,r=A.maxLength,i=A.minLength)=>{let a=e?t:n;O[v]={type:e?r:i,message:a,ref:o,...N(e?r:i,a)}};if(a?!Array.isArray(S)||!S.length:c&&(!ee&&(M||f(S))||T(S)&&!S||j&&!q(s).isValid||k&&!Ce(s).isValid)){let{value:e,message:t}=I(c)?{value:!!c,message:c}:Z(c);if(e&&(O[v]={type:A.required,message:t,ref:C,...N(A.required,t)},!r))return D(t),O}if(!M&&(!f(p)||!f(h))){let e,t,n=Z(h),i=Z(p);if(!f(S)&&!isNaN(S)){let r=o.valueAsNumber||S&&+S;f(n.value)||(e=r>n.value),f(i.value)||(t=rnew Date(new Date().toDateString()+` `+e),s=o.type==`time`,c=o.type==`week`;I(n.value)&&S&&(e=s?a(S)>a(n.value):c?S>n.value:r>new Date(n.value)),I(i.value)&&S&&(t=s?a(S)+e.value,i=!f(t.value)&&S.length<+t.value;if((n||i)&&(P(n,e.message,t.message),!r))return D(O[v].message),O}if(g&&!M&&I(S)){let{value:e,message:t}=Z(g);if(J(e)&&!S.match(e)&&(O[v]={type:A.pattern,message:t,ref:o,...N(A.pattern,t)},!r))return D(t),O}if(_){if(E(_)){let e=Re(await _(S,n),C);if(e&&(O[v]={...e,...N(A.validate,e.message)},!r))return D(e.message),O}else if(m(_)){let e={};for(let t in _){if(!z(e)&&!r)break;let i=Re(await _[t](S,n),C,t);i&&(e={...i,...N(t,i.message)},D(i.message),r&&(O[v]=e))}if(!z(e)&&(O[v]={ref:C,...e},!r))return O}}return D(!0),O},Be={mode:k.onSubmit,reValidateMode:k.onChange,shouldFocusError:!0};function Ve(e={}){let t={...Be,...e},n={submitCount:0,isDirty:!1,isReady:!1,isLoading:E(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},r={},i=(m(t.defaultValues)||m(t.values))&&y(t.defaultValues||t.values)||{},a=t.shouldUnregister?{}:y(i),o={action:!1,mount:!1,watch:!1,keepIsValid:!1},s={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set,registerName:new Set},c,l=0,p={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},_={...p},b={..._},C={array:de(),state:de()},M=t.criteriaMode===k.all,N=e=>t=>{clearTimeout(l),l=setTimeout(e,t)},P=async e=>{if(!o.keepIsValid&&!t.disabled&&(_.isValid||b.isValid||e)){let e;t.resolver?(e=z((await R()).errors),F()):e=await V({fields:r,onlyCheckValid:!0,eventType:O.VALID}),e!==n.isValid&&C.state.next({isValid:e})}},F=(e,r)=>{!t.disabled&&(_.isValidating||_.validatingFields||b.isValidating||b.validatingFields)&&((e||Array.from(s.mount)).forEach(e=>{e&&(r?D(n.validatingFields,e,r):H(n.validatingFields,e))}),C.state.next({validatingFields:n.validatingFields,isValidating:!z(n.validatingFields)}))},te=e=>{let t=G(i,a),r=Te(e);D(n.dirtyFields,r,w(t,r))},re=(e,i=[],s,c,l=!0,u=!0)=>{if(c&&s&&!t.disabled){if(o.action=!0,u&&Array.isArray(w(r,e))){let t=s(w(r,e),c.argA,c.argB);l&&D(r,e,t)}if(u&&Array.isArray(w(n.errors,e))){let t=s(w(n.errors,e),c.argA,c.argB);l&&D(n.errors,e,t),Ie(n.errors,e)}if((_.touchedFields||b.touchedFields)&&u&&Array.isArray(w(n.touchedFields,e))){let t=s(w(n.touchedFields,e),c.argA,c.argB);l&&D(n.touchedFields,e,t)}(_.dirtyFields||b.dirtyFields)&&te(e),C.state.next({name:e,isDirty:U(e,i),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else D(a,e,i)},ie=(e,t)=>{D(n.errors,e,t),C.state.next({errors:n.errors})},ae=e=>{n.errors=e,C.state.next({errors:n.errors,isValid:!1})},oe=(e,t,n,s)=>{let c=w(r,e);if(c){let r=w(a,e,x(n)?w(i,e):n);x(r)||s&&s.defaultChecked||t?D(a,e,t?r:we(c._f)):K(e,r),o.mount&&!o.action&&P()}},se=(e,r,a,o,s)=>{let c=!1,l=!1,u={name:e};if(!t.disabled){if(!a||o){(_.isDirty||b.isDirty)&&(l=n.isDirty,n.isDirty=u.isDirty=U(),c=l!==u.isDirty);let t=L(w(i,e),r);l=!!w(n.dirtyFields,e),t?H(n.dirtyFields,e):D(n.dirtyFields,e,!0),u.dirtyFields=n.dirtyFields,c||=(_.dirtyFields||b.dirtyFields)&&l!==!t}if(a){let t=w(n.touchedFields,e);t||(D(n.touchedFields,e,a),u.touchedFields=n.touchedFields,c||=(_.touchedFields||b.touchedFields)&&t!==a)}c&&s&&C.state.next(u)}return c?u:{}},ce=(e,r,i,a)=>{let o=w(n.errors,e),s=(_.isValid||b.isValid)&&T(r)&&n.isValid!==r;if(t.delayError&&i?(c=N(()=>ie(e,i)),c(t.delayError)):(clearTimeout(l),c=null,i?D(n.errors,e,i):H(n.errors,e)),(i?!L(o,i):o)||!z(a)||s){let t={...a,...s&&T(r)?{isValid:r}:{},errors:n.errors,name:e};n={...n,...t},C.state.next(t)}},R=async e=>(F(e,!0),await t.resolver(a,t.context,Ee(e||s.mount,r,t.criteriaMode,t.shouldUseNativeValidation))),le=async e=>{let{errors:t}=await R(e);if(F(e),e)for(let r of e){let e=w(t,r);e?D(n.errors,r,e):H(n.errors,r)}else n.errors=t;return t},B=async({name:t,eventType:r})=>{if(e.validate){let i=await e.validate({formValues:a,formState:n,name:t,eventType:r});if(m(i))for(let e in i)i[e]&&Ve(`${j}.${e}`,{message:I(i.message)?i.message:``,type:A.validate});else I(i)||!i?Ve(j,{message:i||``,type:A.validate}):Z(j);return i}return!0},V=async({fields:r,onlyCheckValid:i,name:o,eventType:c,context:l={valid:!0,runRootValidation:!1}})=>{if(e.validate&&(l.runRootValidation=!0,!await B({name:o,eventType:c})&&(l.valid=!1,i)))return l.valid;for(let o in r){let u=r[o];if(u){let{_f:r,...d}=u;if(r){let o=s.array.has(r.name),c=u._f&&ke(u._f);c&&_.validatingFields&&F([r.name],!0);let d=await ze(u,s.disabled,a,M,t.shouldUseNativeValidation&&!i,o);if(c&&_.validatingFields&&F([r.name]),d[r.name]&&(l.valid=!1,i)||(!i&&(w(d,r.name)?o?Le(n.errors,d,r.name):D(n.errors,r.name,d[r.name]):H(n.errors,r.name)),e.shouldUseNativeValidation&&d[r.name]))break}!z(d)&&await V({context:l,onlyCheckValid:i,fields:d,name:o,eventType:c})}}return l.valid},ve=()=>{for(let e of s.unMount){let t=w(r,e);t&&(t._f.refs?t._f.refs.every(e=>!_e(e)):!_e(t._f.ref))&&Ge(e)}s.unMount=new Set},U=(e,n)=>!t.disabled&&(e&&n&&D(a,e,n),!L(Oe(),i)),W=(e,t,n)=>ne(e,s,{...o.mount?a:x(t)?i:I(e)?{[e]:t}:t},n,t),ye=e=>S(w(o.mount?a:i,e,t.shouldUnregister?w(i,e,[]):[])),K=(e,t,n={})=>{let i=w(r,e),o=t;if(i){let n=i._f;n&&(!n.disabled&&D(a,e,xe(t,n)),o=me(n.ref)&&f(t)?``:t,he(n.ref)?[...n.ref.options].forEach(e=>e.selected=o.includes(e.value)):n.refs?u(n.ref)?n.refs.forEach(e=>{(!e.defaultChecked||!e.disabled)&&(Array.isArray(o)?e.checked=!!o.find(t=>t===e.value):e.checked=o===e.value||!!o)}):n.refs.forEach(e=>e.checked=e.value===o):pe(n.ref)?n.ref.value=``:(n.ref.value=o,n.ref.type||C.state.next({name:e,values:y(a)})))}(n.shouldDirty||n.shouldTouch)&&se(e,o,n.shouldTouch,n.shouldDirty,!0),n.shouldValidate&&J(e)},be=(e,t,n)=>{for(let i in t){if(!t.hasOwnProperty(i))return;let a=t[i],o=e+`.`+i,c=w(r,o);(s.array.has(e)||m(a)||c&&!c._f)&&!d(a)?be(o,a,n):K(o,a,n)}},q=(e,t,i={})=>{let c=w(r,e),l=s.array.has(e),u=y(t);D(a,e,u),l?(C.array.next({name:e,values:y(a)}),(_.isDirty||_.dirtyFields||b.isDirty||b.dirtyFields)&&i.shouldDirty&&(te(e),C.state.next({name:e,dirtyFields:n.dirtyFields,isDirty:U(e,u)}))):c&&!c._f&&!f(u)?be(e,u,i):K(e,u,i),je(e,s)?C.state.next({...n,name:e,values:y(a)}):C.state.next({name:o.mount?e:void 0,values:y(a)})},Se=async i=>{o.mount=!0;let l=i.target,u=l.name,f=!0,p=w(r,u),m=e=>{f=Number.isNaN(e)||d(e)&&isNaN(e.getTime())||L(e,w(a,u,e))},g=De(t.mode),v=De(t.reValidateMode);if(p){let o,d,x=l.type?we(p._f):h(i),S=i.type===O.BLUR||i.type===O.FOCUS_OUT,T=!Ae(p._f)&&!e.validate&&!t.resolver&&!w(n.errors,u)&&!p._f.deps||Fe(S,w(n.touchedFields,u),n.isSubmitted,v,g),E=je(u,s,S);D(a,u,x),S?(!l||!l.readOnly)&&(p._f.onBlur&&p._f.onBlur(i),c&&c(0)):p._f.onChange&&p._f.onChange(i);let k=se(u,x,S),A=!z(k)||E;if(!S&&C.state.next({name:u,type:i.type,values:y(a)}),T)return(_.isValid||b.isValid)&&(t.mode===`onBlur`?S&&P():S||P()),A&&C.state.next({name:u,...E?{}:k});if(!t.resolver&&e.validate&&await B({name:u,eventType:i.type}),!S&&E&&C.state.next({...n}),t.resolver){let{errors:e}=await R([u]);if(F([u]),m(x),f){let t=Me(n.errors,r,u),i=Me(e,r,t.name||u);o=i.error,u=i.name,d=z(e)}}else F([u],!0),o=(await ze(p,s.disabled,a,M,t.shouldUseNativeValidation))[u],F([u]),m(x),f&&(o?d=!1:(_.isValid||b.isValid)&&(d=await V({fields:r,onlyCheckValid:!0,name:u,eventType:i.type})));f&&(p._f.deps&&(!Array.isArray(p._f.deps)||p._f.deps.length>0)&&J(p._f.deps),ce(u,d,o,k))}},Ce=(e,t)=>{if(w(n.errors,t)&&e.focus)return e.focus(),1},J=async(e,i={})=>{let a,o,c=ue(e);if(t.resolver){let t=await le(x(e)?e:c);a=z(t),o=e?!c.some(e=>w(t,e)):a}else e?(o=(await Promise.all(c.map(async e=>{let t=w(r,e);return await V({fields:t&&t._f?{[e]:t}:t,eventType:O.TRIGGER})}))).every(Boolean),!(!o&&!n.isValid)&&P()):o=a=await V({fields:r,name:e,eventType:O.TRIGGER});return C.state.next({...!I(e)||(_.isValid||b.isValid)&&a!==n.isValid?{}:{name:e},...t.resolver||!e?{isValid:a}:{},errors:n.errors}),i.shouldFocus&&!o&&X(r,Ce,e?c:s.mount),o},Oe=(e,t)=>{let r={...o.mount?a:i};return t&&(r=fe(t.dirtyFields?n.dirtyFields:n.touchedFields,r)),x(e)?r:I(e)?w(r,e):e.map(e=>w(r,e))},Re=(e,t)=>({invalid:!!w((t||n).errors,e),isDirty:!!w((t||n).dirtyFields,e),error:w((t||n).errors,e),isValidating:!!w(n.validatingFields,e),isTouched:!!w((t||n).touchedFields,e)}),Z=e=>{let t=e?ue(e):void 0;t?.forEach(e=>H(n.errors,e)),t?t.forEach(e=>{C.state.next({name:e,errors:n.errors})}):C.state.next({errors:{}})},Ve=(e,t,i)=>{let a=(w(r,e,{_f:{}})._f||{}).ref,{ref:o,message:s,type:c,...l}=w(n.errors,e)||{};D(n.errors,e,{...l,...t,ref:a}),C.state.next({name:e,errors:n.errors,isValid:!1}),i&&i.shouldFocus&&a&&a.focus&&a.focus()},He=(e,t)=>E(e)?C.state.subscribe({next:n=>`values`in n&&e(W(void 0,t),n)}):W(e,t,!0),Ue=e=>C.state.subscribe({next:t=>{Pe(e.name,t.name,e.exact)&&Ne(t,e.formState||_,et,e.reRenderRoot)&&e.callback({values:{...a},...n,...t,defaultValues:i})}}).unsubscribe,We=e=>(o.mount=!0,b={...b,...e.formState},Ue({...e,formState:{...p,...e.formState}})),Ge=(e,o={})=>{for(let c of e?ue(e):s.mount)s.mount.delete(c),s.array.delete(c),o.keepValue||(H(r,c),H(a,c)),!o.keepError&&H(n.errors,c),!o.keepDirty&&H(n.dirtyFields,c),!o.keepTouched&&H(n.touchedFields,c),!o.keepIsValidating&&H(n.validatingFields,c),!t.shouldUnregister&&!o.keepDefaultValue&&H(i,c);C.state.next({values:y(a)}),C.state.next({...n,...o.keepDirty?{isDirty:U()}:{}}),!o.keepIsValid&&P()},Ke=({disabled:e,name:t})=>{if(T(e)&&o.mount||e||s.disabled.has(t)){let n=s.disabled.has(t)!==!!e;e?s.disabled.add(t):s.disabled.delete(t),n&&o.mount&&!o.action&&P()}},qe=(e,n={})=>{let a=w(r,e),c=T(n.disabled)||T(t.disabled),l=!s.registerName.has(e)&&a&&!a._f.mount;return D(r,e,{...a||{},_f:{...a&&a._f?a._f:{ref:{name:e}},name:e,mount:!0,...n}}),s.mount.add(e),a&&!l?Ke({disabled:T(n.disabled)?n.disabled:t.disabled,name:e}):oe(e,!0,n.value),{...c?{disabled:n.disabled||t.disabled}:{},...t.progressive?{required:!!n.required,min:Y(n.min),max:Y(n.max),minLength:Y(n.minLength),maxLength:Y(n.maxLength),pattern:Y(n.pattern)}:{},name:e,onChange:Se,onBlur:Se,ref:c=>{if(c){s.registerName.add(e),qe(e,n),s.registerName.delete(e),a=w(r,e);let t=x(c.value)&&c.querySelectorAll&&c.querySelectorAll(`input,select,textarea`)[0]||c,o=ge(t),l=a._f.refs||[];if(o?l.find(e=>e===t):t===a._f.ref)return;D(r,e,{_f:{...a._f,...o?{refs:[...l.filter(_e),t,...Array.isArray(w(i,e))?[{}]:[]],ref:{type:t.type,name:e}}:{ref:t}}}),oe(e,!1,void 0,t)}else a=w(r,e,{}),a._f&&(a._f.mount=!1),(t.shouldUnregister||n.shouldUnregister)&&!(g(s.array,e)&&o.action)&&s.unMount.add(e)}}},Je=()=>t.shouldFocusError&&X(r,Ce,s.mount),Ye=e=>{T(e)&&(C.state.next({disabled:e}),X(r,(t,n)=>{let i=w(r,n);i&&(t.disabled=i._f.disabled||e,Array.isArray(i._f.refs)&&i._f.refs.forEach(t=>{t.disabled=i._f.disabled||e}))},0,!1))},Xe=(e,i)=>async o=>{let c;o&&(o.preventDefault&&o.preventDefault(),o.persist&&o.persist());let l=y(a);if(C.state.next({isSubmitting:!0}),t.resolver){let{errors:e,values:t}=await R();F(),n.errors=e,l=y(t)}else await V({fields:r,eventType:O.SUBMIT});if(s.disabled.size)for(let e of s.disabled)H(l,e);if(H(n.errors,ee),z(n.errors)){C.state.next({errors:{}});try{await e(l,o)}catch(e){c=e}}else i&&await i({...n.errors},o),Je(),setTimeout(Je);if(C.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:z(n.errors)&&!c,submitCount:n.submitCount+1,errors:n.errors}),c)throw c},Ze=(e,t={})=>{w(r,e)&&(x(t.defaultValue)?q(e,y(w(i,e))):(q(e,t.defaultValue),D(i,e,y(t.defaultValue))),t.keepTouched||H(n.touchedFields,e),t.keepDirty||(H(n.dirtyFields,e),n.isDirty=t.defaultValue?U(e,y(w(i,e))):U()),t.keepError||(H(n.errors,e),_.isValid&&P()),C.state.next({...n}))},Q=(e,c={})=>{let l=e?y(e):i,u=y(l),d=z(e),f=d?i:u;if(c.keepDefaultValues||(i=l),!c.keepValues){if(c.keepDirtyValues){let e=new Set([...s.mount,...Object.keys(G(i,a))]);for(let t of Array.from(e)){let e=w(n.dirtyFields,t),r=w(a,t),i=w(f,t);e&&!x(r)?D(f,t,r):!e&&!x(i)&&q(t,i)}}else{if(v&&x(e))for(let e of s.mount){let t=w(r,e);if(t&&t._f){let e=Array.isArray(t._f.refs)?t._f.refs[0]:t._f.ref;if(me(e)){let t=e.closest(`form`);if(t){t.reset();break}}}}if(c.keepFieldsRef)for(let e of s.mount)q(e,w(f,e));else r={}}a=t.shouldUnregister?c.keepDefaultValues?y(i):{}:y(f),C.array.next({values:{...f}}),C.state.next({values:{...f}})}s={mount:c.keepDirtyValues?s.mount:new Set,unMount:new Set,array:new Set,registerName:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:``},o.mount=!_.isValid||!!c.keepIsValid||!!c.keepDirtyValues||!t.shouldUnregister&&!z(f),o.watch=!!t.shouldUnregister,o.keepIsValid=!!c.keepIsValid,o.action=!1,c.keepErrors||(n.errors={}),C.state.next({submitCount:c.keepSubmitCount?n.submitCount:0,isDirty:d?!1:c.keepDirty?n.isDirty:!!(c.keepDefaultValues&&!L(e,i)),isSubmitted:c.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:d?{}:c.keepDirtyValues?c.keepDefaultValues&&a?G(i,a):n.dirtyFields:c.keepDefaultValues&&e?G(i,e):c.keepDirty?n.dirtyFields:{},touchedFields:c.keepTouched?n.touchedFields:{},errors:c.keepErrors?n.errors:{},isSubmitSuccessful:c.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:i})},Qe=(e,n)=>Q(E(e)?e(a):e,{...t.resetOptions,...n}),$e=(e,t={})=>{let n=w(r,e),i=n&&n._f;if(i){let e=i.refs?i.refs[0]:i.ref;e.focus&&setTimeout(()=>{e.focus(),t.shouldSelect&&E(e.select)&&e.select()})}},et=e=>{n={...n,...e}},$={control:{register:qe,unregister:Ge,getFieldState:Re,handleSubmit:Xe,setError:Ve,_subscribe:Ue,_runSchema:R,_updateIsValidating:F,_focusError:Je,_getWatch:W,_getDirty:U,_setValid:P,_setFieldArray:re,_setDisabledField:Ke,_setErrors:ae,_getFieldArray:ye,_reset:Q,_resetDefaultValues:()=>E(t.defaultValues)&&t.defaultValues().then(e=>{Qe(e,t.resetOptions),C.state.next({isLoading:!1})}),_removeUnmounted:ve,_disableForm:Ye,_subjects:C,_proxyFormState:_,get _fields(){return r},get _formValues(){return a},get _state(){return o},set _state(e){o=e},get _defaultValues(){return i},get _names(){return s},set _names(e){s=e},get _formState(){return n},get _options(){return t},set _options(e){t={...t,...e}}},subscribe:We,trigger:J,register:qe,handleSubmit:Xe,watch:He,setValue:q,getValues:Oe,reset:Qe,resetField:Ze,clearErrors:Z,unregister:Ge,setError:Ve,setFocus:$e,getFieldState:Re};return{...$,formControl:$}}function He(e={}){let t=l.useRef(void 0),n=l.useRef(void 0),[r,i]=l.useState({isDirty:!1,isValidating:!1,isLoading:E(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,isReady:!1,defaultValues:E(e.defaultValues)?void 0:e.defaultValues});if(!t.current)if(e.formControl)t.current={...e.formControl,formState:r},e.defaultValues&&!E(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{let{formControl:n,...i}=Ve(e);t.current={...i,formState:r}}let a=t.current.control;return a._options=e,F(()=>{let e=a._subscribe({formState:a._proxyFormState,callback:()=>i({...a._formState}),reRenderRoot:!0});return i(e=>({...e,isReady:!0})),a._formState.isReady=!0,e},[a]),l.useEffect(()=>a._disableForm(e.disabled),[a,e.disabled]),l.useEffect(()=>{e.mode&&(a._options.mode=e.mode),e.reValidateMode&&(a._options.reValidateMode=e.reValidateMode)},[a,e.mode,e.reValidateMode]),l.useEffect(()=>{e.errors&&(a._setErrors(e.errors),a._focusError())},[a,e.errors]),l.useEffect(()=>{e.shouldUnregister&&a._subjects.state.next({values:a._getWatch()})},[a,e.shouldUnregister]),l.useEffect(()=>{if(a._proxyFormState.isDirty){let e=a._getDirty();e!==r.isDirty&&a._subjects.state.next({isDirty:e})}},[a,r.isDirty]),l.useEffect(()=>{e.values&&!L(e.values,n.current)?(a._reset(e.values,{keepFieldsRef:!0,...a._options.resetOptions}),a._options.resetOptions?.keepIsValid||a._setValid(),n.current=e.values,i(e=>({...e}))):a._resetDefaultValues()},[a,e.values]),l.useEffect(()=>{a._state.mount||(a._setValid(),a._state.mount=!0),a._state.watch&&(a._state.watch=!1,a._subjects.state.next({...a._formState})),a._removeUnmounted()}),t.current.formState=l.useMemo(()=>P(r,a),[a,r]),t.current}var Ue=(e,t,n)=>{if(e&&`reportValidity`in e){let r=w(n,t);e.setCustomValidity(r&&r.message||``),e.reportValidity()}},We=(e,t)=>{for(let n in t.fields){let r=t.fields[n];r&&r.ref&&`reportValidity`in r.ref?Ue(r.ref,n,e):r&&r.refs&&r.refs.forEach(t=>Ue(t,n,e))}},Ge=(e,t)=>{t.shouldUseNativeValidation&&We(e,t);let n={};for(let r in e){let i=w(t.fields,r),a=Object.assign(e[r]||{},{ref:i&&i.ref});if(Ke(t.names||Object.keys(e),r)){let e=Object.assign({},w(n,r));D(e,`root`,a),D(n,r,e)}else D(n,r,a)}return n},Ke=(e,t)=>{let n=qe(t);return e.some(e=>qe(e).match(`^${n}\\.\\d+`))};function qe(e){return e.replace(/\]|\[/g,``)}function Je(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}function Ye(e,t){for(var n={};e.length;){var r=e[0],i=r.code,a=r.message,o=r.path.join(`.`);if(!n[o])if(`unionErrors`in r){var s=r.unionErrors[0].errors[0];n[o]={message:s.message,type:s.code}}else n[o]={message:a,type:i};if(`unionErrors`in r&&r.unionErrors.forEach(function(t){return t.errors.forEach(function(t){return e.push(t)})}),t){var c=n[o].types,l=c&&c[r.code];n[o]=le(o,t,n,i,l?[].concat(l,r.message):r.message)}e.shift()}return n}function Xe(e,t){for(var n={};e.length;){var r=e[0],i=r.code,a=r.message,o=r.path.join(`.`);if(!n[o])if(r.code===`invalid_union`&&r.errors.length>0){var s=r.errors[0][0];n[o]={message:s.message,type:s.code}}else n[o]={message:a,type:i};if(r.code===`invalid_union`&&r.errors.forEach(function(t){return t.forEach(function(t){return e.push(t)})}),t){var c=n[o].types,l=c&&c[r.code];n[o]=le(o,t,n,i,l?[].concat(l,r.message):r.message)}e.shift()}return n}function Ze(e,t,n){if(n===void 0&&(n={}),function(e){return`_def`in e&&typeof e._def==`object`&&`typeName`in e._def}(e))return function(r,i,a){try{return Promise.resolve(Je(function(){return Promise.resolve(e[n.mode===`sync`?`parse`:`parseAsync`](r,t)).then(function(e){return a.shouldUseNativeValidation&&We({},a),{errors:{},values:n.raw?Object.assign({},r):e}})},function(e){if(function(e){return Array.isArray(e?.issues)}(e))return{values:{},errors:Ge(Ye(e.errors,!a.shouldUseNativeValidation&&a.criteriaMode===`all`),a)};throw e}))}catch(e){return Promise.reject(e)}};if(function(e){return`_zod`in e&&typeof e._zod==`object`}(e))return function(r,i,a){try{return Promise.resolve(Je(function(){return Promise.resolve((n.mode===`sync`?s:c)(e,r,t)).then(function(e){return a.shouldUseNativeValidation&&We({},a),{errors:{},values:n.raw?Object.assign({},r):e}})},function(e){if(function(e){return e instanceof o}(e))return{values:{},errors:Ge(Xe(e.issues,!a.shouldUseNativeValidation&&a.criteriaMode===`all`),a)};throw e}))}catch(e){return Promise.reject(e)}};throw Error(`Invalid input: not a Zod schema`)}var Q=t(),Qe=R,$e=l.createContext({}),et=({...e})=>(0,Q.jsx)($e.Provider,{value:{name:e.name},children:(0,Q.jsx)(oe,{...e})}),$=()=>{let e=l.useContext($e),t=l.useContext(tt),{getFieldState:n}=ce(),r=te({name:e.name}),i=n(e.name,r);if(!e)throw Error(`useFormField should be used within `);let{id:a}=t;return{id:a,name:e.name,formItemId:`${a}-form-item`,formDescriptionId:`${a}-form-item-description`,formMessageId:`${a}-form-item-message`,...i}},tt=l.createContext({});function nt({className:e,...t}){let n=l.useId();return(0,Q.jsx)(tt.Provider,{value:{id:n},children:(0,Q.jsx)(`div`,{className:r(`grid gap-2`,e),"data-slot":`form-item`,...t})})}function rt({className:e,...t}){let{error:n,formItemId:i}=$();return(0,Q.jsx)(a,{className:r(`data-[error=true]:text-destructive`,e),"data-error":!!n,"data-slot":`form-label`,htmlFor:i,...t})}function it({...e}){let{error:t,formItemId:n,formDescriptionId:r,formMessageId:a}=$();return(0,Q.jsx)(i,{"aria-describedby":t?`${r} ${a}`:`${r}`,"aria-invalid":!!t,"data-slot":`form-control`,id:n,...e})}function at({className:e,...t}){let{formDescriptionId:n}=$();return(0,Q.jsx)(`p`,{className:r(`text-muted-foreground text-sm`,e),"data-slot":`form-description`,id:n,...t})}function ot({className:e,...t}){let{error:n,formMessageId:i}=$(),a=n?String(n?.message??``):t.children;return a?(0,Q.jsx)(`p`,{className:r(`text-destructive text-sm`,e),"data-slot":`form-message`,id:i,...t,children:a}):null}export{nt as a,Ze as c,et as i,He as l,it as n,rt as o,at as r,ot as s,Qe as t}; \ No newline at end of file diff --git a/src/www/assets/general-error-ruXTchhS.js b/src/www/assets/general-error-ruXTchhS.js new file mode 100644 index 0000000..18f8b69 --- /dev/null +++ b/src/www/assets/general-error-ruXTchhS.js @@ -0,0 +1 @@ +import{Qu as e,al as t,il as n,ol as r,sl as i}from"./messages-BOl-zx8S.js";import{t as a}from"./useRouter-DS97kuA5.js";import{t as o}from"./useNavigate-BNrwOhV8.js";import{i as s,t as c}from"./button-D-oR8d6w.js";var l=e();function u({className:e,minimal:u=!1}){let d=o(),{history:f}=a();return(0,l.jsx)(`div`,{className:s(`h-svh w-full`,e),children:(0,l.jsxs)(`div`,{className:`m-auto flex h-full w-full flex-col items-center justify-center gap-2`,children:[!u&&(0,l.jsx)(`h1`,{className:`font-bold text-[7rem] leading-tight`,children:`500`}),(0,l.jsx)(`span`,{className:`font-medium`,children:i()}),(0,l.jsx)(`p`,{className:`text-center text-muted-foreground`,children:r()}),!u&&(0,l.jsxs)(`div`,{className:`mt-6 flex gap-4`,children:[(0,l.jsx)(c,{onClick:()=>f.go(-1),variant:`outline`,children:t()}),(0,l.jsx)(c,{onClick:()=>d({to:`/dashboard`}),children:n()})]})]})})}export{u as t}; \ No newline at end of file diff --git a/src/www/assets/header-B5Qx5Y9m.js b/src/www/assets/header-B5Qx5Y9m.js new file mode 100644 index 0000000..719c80e --- /dev/null +++ b/src/www/assets/header-B5Qx5Y9m.js @@ -0,0 +1 @@ +import{$u as e,Gu as t,Ju as n,Qs as r,Qu as i,Wu as a,Zs as o,g as s,nd as c,oc as l}from"./messages-BOl-zx8S.js";import{i as u}from"./auth-store-D_jr_Pei.js";import{t as d}from"./link-Du-u9SDI.js";import{F as f,L as p,R as m,d as h,f as g,h as _,j as v,l as y,n as b,o as x,p as S,u as C,z as w}from"./search-provider-D-fTfilE.js";import{i as T,t as E}from"./button-D-oR8d6w.js";import{a as D,i as O,l as k,o as A,r as j,s as M,t as N}from"./dropdown-menu-HbmfecEg.js";import{t as P}from"./separator-Dw-mNGCy.js";import{g as F}from"./command-yFHhtFiR.js";var I=c(e(),1),L=i();function R(){let[e,n]=y(),[i,c]=(0,I.useState)(!1),{user:v}=u(),b=v?.username?.trim()||s(),T=b.charAt(0).toUpperCase()||`U`,P=v?.last_login_at?r({time:x(v.last_login_at)}):o();return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(f,{onOpenChange:c,open:i,children:(0,L.jsx)(_,{})}),(0,L.jsxs)(N,{modal:!1,children:[(0,L.jsx)(k,{asChild:!0,children:(0,L.jsx)(E,{className:`relative h-8 w-8 rounded-full`,variant:`ghost`,children:(0,L.jsxs)(C,{className:`h-8 w-8`,children:[(0,L.jsx)(g,{alt:b,src:`/avatars/01.png`}),(0,L.jsx)(h,{children:T})]})})}),(0,L.jsxs)(j,{align:`end`,className:`w-56`,forceMount:!0,children:[(0,L.jsx)(A,{className:`p-0 font-normal`,children:(0,L.jsxs)(`div`,{className:`flex items-center gap-2 px-1 py-1.5 text-start text-sm`,children:[(0,L.jsxs)(C,{className:`h-8 w-8 rounded-lg`,children:[(0,L.jsx)(g,{alt:b,src:`/avatars/01.png`}),(0,L.jsx)(h,{className:`rounded-lg`,children:T})]}),(0,L.jsxs)(`div`,{className:`grid flex-1 text-start text-sm leading-tight`,children:[(0,L.jsx)(`span`,{className:`truncate font-semibold`,children:b}),(0,L.jsx)(`span`,{className:`truncate text-muted-foreground text-xs`,children:P})]})]})}),(0,L.jsx)(M,{}),(0,L.jsxs)(O,{children:[(0,L.jsx)(D,{asChild:!0,children:(0,L.jsxs)(d,{to:`/account/password`,children:[(0,L.jsx)(w,{className:`mr-2 size-4`}),t()]})}),(0,L.jsxs)(D,{onClick:()=>c(!0),onSelect:e=>e.preventDefault(),children:[(0,L.jsx)(p,{className:`mr-2 size-4`}),l()]})]}),(0,L.jsx)(M,{}),(0,L.jsxs)(D,{onClick:()=>n(!0),variant:`destructive`,children:[(0,L.jsx)(m,{className:`mr-2 size-4`}),a()]})]})]}),(0,L.jsx)(S,{onOpenChange:n,open:!!e})]})}function z({className:e=``,placeholder:t}){let{setOpen:r}=b();return(0,L.jsxs)(E,{className:T(`group relative h-8 w-full flex-1 justify-start rounded-md bg-muted/25 font-normal text-muted-foreground text-sm shadow-none hover:bg-accent sm:w-40 sm:pe-12 md:flex-none lg:w-52 xl:w-64`,e),onClick:()=>r(!0),variant:`outline`,children:[(0,L.jsx)(F,{"aria-hidden":`true`,className:`absolute inset-s-1.5 top-1/2 -translate-y-1/2`,size:16}),(0,L.jsx)(`span`,{className:`ms-4`,children:t??n()}),(0,L.jsxs)(`kbd`,{className:`pointer-events-none absolute inset-e-[0.3rem] top-[0.3rem] hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-medium font-mono text-[10px] opacity-100 group-hover:bg-accent sm:flex`,children:[(0,L.jsx)(`span`,{className:`text-xs`,children:`⌘`}),`K`]})]})}function B({className:e,fixed:t,children:n,...r}){let[i,a]=(0,I.useState)(0);return(0,I.useEffect)(()=>{let e=()=>{a(document.body.scrollTop||document.documentElement.scrollTop)};return document.addEventListener(`scroll`,e,{passive:!0}),()=>document.removeEventListener(`scroll`,e)},[]),(0,L.jsx)(`header`,{className:T(`z-50 h-16`,t&&`header-fixed peer/header sticky top-0 w-[inherit]`,i>10&&t?`shadow`:`shadow-none`,e),...r,children:(0,L.jsxs)(`div`,{className:T(`relative flex h-full items-center gap-3 p-4 sm:gap-4`,i>10&&t&&`after:absolute after:inset-0 after:-z-10 after:bg-background/20 after:backdrop-blur-lg`),children:[(0,L.jsx)(v,{className:`max-md:scale-125`,variant:`outline`}),(0,L.jsx)(P,{className:`h-6`,orientation:`vertical`}),n]})})}export{z as n,R as r,B as t}; \ No newline at end of file diff --git a/src/www/assets/help-8HzWQeDm.js b/src/www/assets/help-8HzWQeDm.js new file mode 100644 index 0000000..b746b62 --- /dev/null +++ b/src/www/assets/help-8HzWQeDm.js @@ -0,0 +1 @@ +import{Fu as e,Nu as t,Pu as n,Qu as r}from"./messages-BOl-zx8S.js";import{t as i}from"./telescope-CH8QonjS.js";var a=r();function o(){return(0,a.jsx)(`div`,{className:`h-svh`,children:(0,a.jsxs)(`div`,{className:`m-auto flex h-full w-full flex-col items-center justify-center gap-2`,children:[(0,a.jsx)(i,{size:72}),(0,a.jsx)(`h1`,{className:`font-bold text-4xl leading-tight`,children:e()}),(0,a.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[n(),` `,(0,a.jsx)(`br`,{}),t()]})]})})}var s=o;export{s as component}; \ No newline at end of file diff --git a/src/www/assets/index-BFYQldDz.js b/src/www/assets/index-BFYQldDz.js new file mode 100644 index 0000000..4ed059d --- /dev/null +++ b/src/www/assets/index-BFYQldDz.js @@ -0,0 +1,9 @@ +import{$u as e,Qu as t,ed as n,nd as r}from"./messages-BOl-zx8S.js";import{f as i}from"./auth-store-D_jr_Pei.js";import{n as a,t as o}from"./router-D0lu_-Oq.js";import{n as s}from"./useRouter-DS97kuA5.js";import{t as c}from"./Matches-C_9WN1ag.js";import{r as l}from"./dist-DJhZSa1-.js";import{n as u}from"./_error-Ct843SHu.js";import{r as d}from"./tooltip-m5xmPGQe.js";import{n as f}from"./wallet-C1oxpYOh.js";import{t as p}from"./font-provider-BBeIKmOK.js";import{t as m}from"./theme-provider-Dmxgp34D.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var h=r(e(),1),g=t();function _({router:e,children:t,...n}){Object.keys(n).length>0&&e.update({...e.options,...n,context:{...e.options.context,...n.context}});let r=(0,g.jsx)(s.Provider,{value:e,children:t});return e.options.Wrap?(0,g.jsx)(e.options.Wrap,{children:r}):r}function v({router:e,...t}){return(0,g.jsx)(_,{router:e,...t,children:(0,g.jsx)(c,{})})}var y=n((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,ee||(ee=!0,oe());else{var t=n(l);t!==null&&le(x,t.startTime-e)}}var ee=!1,te=-1,ne=5,re=-1;function ie(){return g?!0:!(e.unstable_now()-ret&&ie());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&le(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?oe():ee=!1}}}var oe;if(typeof y==`function`)oe=function(){y(ae)};else if(typeof MessageChannel<`u`){var se=new MessageChannel,ce=se.port2;se.port1.onmessage=ae,oe=function(){ce.postMessage(null)}}else oe=function(){_(ae,0)};function le(t,n){te=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(te),te=-1):h=!0,le(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,ee||(ee=!0,oe()))),r},e.unstable_shouldYield=ie,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),b=n(((e,t)=>{t.exports=y()})),x=n((t=>{var n=b(),r=e(),i=l();function a(e){var t=`https://react.dev/errors/`+e;if(1ge||(e.current=he[ge],he[ge]=null,ge--)}function T(e,t){ge++,he[ge]=e.current,e.current=t}var ve=_e(null),ye=_e(null),be=_e(null),xe=_e(null);function Se(e,t){switch(T(be,t),T(ye,e),T(ve,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}w(ve),T(ve,e)}function Ce(){w(ve),w(ye),w(be)}function we(e){e.memoizedState!==null&&T(xe,e);var t=ve.current,n=Hd(t,e.type);t!==n&&(T(ye,e),T(ve,n))}function Te(e){ye.current===e&&(w(ve),w(ye)),xe.current===e&&(w(xe),Qf._currentValue=me)}var Ee,De;function Oe(e){if(Ee===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Ee=t&&t[1]||``,De=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{ke=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Oe(n):``}function je(e,t){switch(e.tag){case 26:case 27:case 5:return Oe(e.type);case 16:return Oe(`Lazy`);case 13:return e.child!==t&&t!==null?Oe(`Suspense Fallback`):Oe(`Suspense`);case 19:return Oe(`SuspenseList`);case 0:case 15:return Ae(e.type,!1);case 11:return Ae(e.type.render,!1);case 1:return Ae(e.type,!0);case 31:return Oe(`Activity`);default:return``}}function Me(e){try{var t=``,n=null;do t+=je(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var Ne=Object.prototype.hasOwnProperty,Pe=n.unstable_scheduleCallback,Fe=n.unstable_cancelCallback,Ie=n.unstable_shouldYield,Le=n.unstable_requestPaint,Re=n.unstable_now,ze=n.unstable_getCurrentPriorityLevel,Be=n.unstable_ImmediatePriority,Ve=n.unstable_UserBlockingPriority,He=n.unstable_NormalPriority,Ue=n.unstable_LowPriority,We=n.unstable_IdlePriority,Ge=n.log,Ke=n.unstable_setDisableYieldValue,qe=null,Je=null;function Ye(e){if(typeof Ge==`function`&&Ke(e),Je&&typeof Je.setStrictMode==`function`)try{Je.setStrictMode(qe,e)}catch{}}var Xe=Math.clz32?Math.clz32:$e,Ze=Math.log,Qe=Math.LN2;function $e(e){return e>>>=0,e===0?32:31-(Ze(e)/Qe|0)|0}var et=256,tt=262144,nt=4194304;function rt(e){var t=e&42;if(t!==0)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:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function it(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=rt(n))):i=rt(o):i=rt(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=rt(n))):i=rt(o)):i=rt(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function at(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function ot(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;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function st(){var e=nt;return nt<<=1,!(nt&62914560)&&(nt=4194304),e}function ct(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function lt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ut(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),xn=!1;if(bn)try{var Sn={};Object.defineProperty(Sn,`passive`,{get:function(){xn=!0}}),window.addEventListener(`test`,Sn,Sn),window.removeEventListener(`test`,Sn,Sn)}catch{xn=!1}var Cn=null,wn=null,Tn=null;function En(){if(Tn)return Tn;var e,t=wn,n=t.length,r,i=`value`in Cn?Cn.value:Cn.textContent,a=i.length;for(e=0;e=ir),sr=` `,cr=!1;function lr(e,t){switch(e){case`keyup`:return nr.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function ur(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var dr=!1;function fr(e,t){switch(e){case`compositionend`:return ur(t);case`keypress`:return t.which===32?(cr=!0,sr):null;case`textInput`:return e=t.data,e===sr&&cr?null:e;default:return null}}function pr(e,t){if(dr)return e===`compositionend`||!rr&&lr(e,t)?(e=En(),Tn=wn=Cn=null,dr=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Fr(n)}}function Lr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Lr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Rr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=qt(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=qt(e.document)}return t}function zr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Br=bn&&`documentMode`in document&&11>=document.documentMode,Vr=null,Hr=null,Ur=null,Wr=!1;function Gr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Wr||Vr==null||Vr!==qt(r)||(r=Vr,`selectionStart`in r&&zr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ur&&Pr(Ur,r)||(Ur=r,r=Ed(Hr,`onSelect`),0>=o,i-=o,Li=1<<32-Xe(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),A&&zi(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(i,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(i,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(i,h),A&&zi(i,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(i,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return A&&zi(i,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,i,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(i,e)}),A&&zi(i,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===v&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case g:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===v){if(r.tag===7){n(e,r.sibling),c=i(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===oe&&Fa(l)===r.type){n(e,r.sibling),c=i(r,o.props),Ha(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===v?(c=wi(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=Ci(o.type,o.key,o.props,null,e.mode,c),Ha(c,o),c.return=e,e=c)}return s(e);case _:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=i(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=Di(o,e.mode,c),c.return=e,e=c}return s(e);case oe:return o=Fa(o),b(e,r,o,c)}if(pe(o))return h(e,r,o,c);if(ue(o)){if(l=ue(o),typeof l!=`function`)throw Error(a(150));return o=l.call(o),y(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Va(o),c);if(o.$$typeof===te)return b(e,r,ua(e,o),c);Ua(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=i(r,o),c.return=e,e=c):(n(e,r),c=Ti(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Ba=0;var i=b(e,t,n,r);return za=null,i}catch(t){if(t===ka||t===ja)throw t;var a=yi(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Ga=Wa(!0),Ka=Wa(!1),qa=!1;function Ja(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ya(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Xa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Za(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,W&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=gi(e),hi(e,null,n),t}return fi(e,r,t,n),gi(e)}function Qa(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ft(e,n)}}function $a(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var eo=!1;function to(){if(eo){var e=ba;if(e!==null)throw e}}function no(e,t,n,r){eo=!1;var i=e.updateQueue;qa=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(q&f)===f:(r&f)===f){f!==0&&f===ya&&(eo=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=m({},d,f);break a;case 2:qa=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Kl|=o,e.lanes=o,e.memoizedState=d}}function ro(e,t){if(typeof e!=`function`)throw Error(a(191,e));e.call(t)}function io(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=S.T,s={};S.T=s,zs(e,!1,t,n);try{var c=i(),l=S.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Rs(e,t,Ca(c,r),pu(e)):Rs(e,t,r,pu(e))}catch(n){Rs(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{C.p=a,o!==null&&s.types!==null&&(o.types=s.types),S.T=o}}function Os(){}function ks(e,t,n,r){if(e.tag!==5)throw Error(a(476));var i=As(e).queue;Ds(e,i,t,me,n===null?Os:function(){return js(e),n(r)})}function As(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:me,baseState:me,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Bo,lastRenderedState:me},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Bo,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function js(e){var t=As(e);t.next===null&&(t=e.alternate.memoizedState),Rs(e,t.next.queue,{},pu())}function Ms(){return j(Qf)}function Ns(){return R().memoizedState}function Ps(){return R().memoizedState}function Fs(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Xa(n);var r=Za(t,e,n);r!==null&&(hu(r,t,n),Qa(r,t,n)),t={cache:ha()},e.payload=t;return}t=t.return}}function Is(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Bs(e)?Vs(t,n):(n=pi(e,t,n,r),n!==null&&(hu(n,e,r),Hs(n,t,r)))}function Ls(e,t,n){Rs(e,t,n,pu())}function Rs(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Bs(e))Vs(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Nr(s,o))return fi(e,t,i,0),G===null&&di(),!1}catch{}if(n=pi(e,t,i,r),n!==null)return hu(n,e,r),Hs(n,t,r),!0}return!1}function zs(e,t,n,r){if(r={lane:2,revertLane:dd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Bs(e)){if(t)throw Error(a(479))}else t=pi(e,n,r,2),t!==null&&hu(t,e,2)}function Bs(e){var t=e.alternate;return e===P||t!==null&&t===P}function Vs(e,t){xo=bo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Hs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ft(e,n)}}var Us={readContext:j,use:Ro,useCallback:L,useContext:L,useEffect:L,useImperativeHandle:L,useLayoutEffect:L,useInsertionEffect:L,useMemo:L,useReducer:L,useRef:L,useState:L,useDebugValue:L,useDeferredValue:L,useTransition:L,useSyncExternalStore:L,useId:L,useHostTransitionStatus:L,useFormState:L,useActionState:L,useOptimistic:L,useMemoCache:L,useCacheRefresh:L};Us.useEffectEvent=L;var Ws={readContext:j,use:Ro,useCallback:function(e,t){return Fo().memoizedState=[e,t===void 0?null:t],e},useContext:j,useEffect:ms,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),fs(4194308,4,bs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return fs(4194308,4,e,t)},useInsertionEffect:function(e,t){fs(4,2,e,t)},useMemo:function(e,t){var n=Fo();t=t===void 0?null:t;var r=e();if(So){Ye(!0);try{e()}finally{Ye(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Fo();if(n!==void 0){var i=n(t);if(So){Ye(!0);try{n(t)}finally{Ye(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Is.bind(null,P,e),[r.memoizedState,e]},useRef:function(e){var t=Fo();return e={current:e},t.memoizedState=e},useState:function(e){e=Xo(e);var t=e.queue,n=Ls.bind(null,P,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ss,useDeferredValue:function(e,t){return Ts(Fo(),e,t)},useTransition:function(){var e=Xo(!1);return e=Ds.bind(null,P,e.queue,!0,!1),Fo().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=P,i=Fo();if(A){if(n===void 0)throw Error(a(407));n=n()}else{if(n=t(),G===null)throw Error(a(349));q&127||Go(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,ms(qo.bind(null,r,o,e),[e]),r.flags|=2048,us(9,{destroy:void 0},Ko.bind(null,r,o,n,t),null),n},useId:function(){var e=Fo(),t=G.identifierPrefix;if(A){var n=Ri,r=Li;n=(r&~(1<<32-Xe(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=Co++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(i,{is:r.is}):s.createElement(i)}}o[E]=t,o[yt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Pd(o,i,r),i){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Lc(t)}}return B(t),Rc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Lc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(a(166));if(e=be.current,Xi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,i=O,i!==null)switch(i.tag){case 27:case 5:r=i.memoizedProps}e[E]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Md(e.nodeValue,n)),e||qi(t,!0)}else e=Bd(e).createTextNode(r),e[E]=t,t.stateNode=e}return B(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Xi(t),n!==null){if(e===null){if(!r)throw Error(a(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(a(557));e[E]=t}else Zi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;B(t),e=!1}else n=Qi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(_o(t),t):(_o(t),null);if(t.flags&128)throw Error(a(558))}return B(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=Xi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!i)throw Error(a(318));if(i=t.memoizedState,i=i===null?null:i.dehydrated,!i)throw Error(a(317));i[E]=t}else Zi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;B(t),i=!1}else i=Qi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(_o(t),t):(_o(t),null)}return _o(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,i=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(i=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==i&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Bc(t,t.updateQueue),B(t),null);case 4:return Ce(),e===null&&Sd(t.stateNode.containerInfo),B(t),null;case 10:return ia(t.type),B(t),null;case 19:if(w(N),r=t.memoizedState,r===null)return B(t),null;if(i=(t.flags&128)!=0,o=r.rendering,o===null)if(i)Vc(r,!1);else{if(Y!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=vo(e),o!==null){for(t.flags|=128,Vc(r,!1),e=o.updateQueue,t.updateQueue=e,Bc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Si(n,e),n=n.sibling;return T(N,N.current&1|2),A&&zi(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Re()>nu&&(t.flags|=128,i=!0,Vc(r,!1),t.lanes=4194304)}else{if(!i)if(e=vo(o),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,Bc(t,e),Vc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!A)return B(t),null}else 2*Re()-r.renderingStartTime>nu&&n!==536870912&&(t.flags|=128,i=!0,Vc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(B(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Re(),e.sibling=null,n=N.current,T(N,i?n&1|2:n&1),A&&zi(t,r.treeForkCount),e);case 22:case 23:return _o(t),lo(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(B(t),t.subtreeFlags&6&&(t.flags|=8192)):B(t),n=t.updateQueue,n!==null&&Bc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&w(Ta),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),ia(M),B(t),null;case 25:return null;case 30:return null}throw Error(a(156,t.tag))}function Uc(e,t){switch(Hi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ia(M),Ce(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Te(t),null;case 31:if(t.memoizedState!==null){if(_o(t),t.alternate===null)throw Error(a(340));Zi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(_o(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(a(340));Zi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return w(N),null;case 4:return Ce(),null;case 10:return ia(t.type),null;case 22:case 23:return _o(t),lo(),e!==null&&w(Ta),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ia(M),null;case 25:return null;default:return null}}function Wc(e,t){switch(Hi(t),t.tag){case 3:ia(M),Ce();break;case 26:case 27:case 5:Te(t);break;case 4:Ce();break;case 31:t.memoizedState!==null&&_o(t);break;case 13:_o(t);break;case 19:w(N);break;case 10:ia(t.type);break;case 22:case 23:_o(t),lo(),e!==null&&w(Ta);break;case 24:ia(M)}}function Gc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Kc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function qc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{io(t,n)}catch(t){Z(e,e.return,t)}}}function Jc(e,t,n){n.props=Zs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Yc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function Xc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}function Zc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Z(e,e.return,t)}}function Qc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[yt]=t}catch(t){Z(e,e.return,t)}}function $c(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function el(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||$c(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function tl(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=dn));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(tl(e,t,n),e=e.sibling;e!==null;)tl(e,t,n),e=e.sibling}function nl(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(nl(e,t,n),e=e.sibling;e!==null;)nl(e,t,n),e=e.sibling}function rl(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[E]=e,t[yt]=n}catch(t){Z(e,e.return,t)}}var il=!1,V=!1,al=!1,ol=typeof WeakSet==`function`?WeakSet:Set,H=null;function sl(e,t){if(e=e.containerInfo,Rd=sp,e=Rr(e),zr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||i!==0&&f.nodeType!==3||(c=s+i),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===i&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,H=t;H!==null;)if(t=H,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,H=e;else for(;H!==null;){switch(t=H,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(o,r,n),o[E]=e,D(o),r=o;break a;case`link`:var s=Vf(`link`,`href`,i).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=Ir(s,h),v=Ir(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,S.T=null,n=lu,lu=null;var o=au,s=su;if(X=0,ou=au=null,su=0,W&6)throw Error(a(331));var c=W;if(W|=4,Il(o.current),Ol(o,o.current,s,n),W=c,id(0,!1),Je&&typeof Je.onPostCommitFiberRoot==`function`)try{Je.onPostCommitFiberRoot(qe,o)}catch{}return!0}finally{C.p=i,S.T=r,Vu(e,t)}}function Wu(e,t,n){t=ki(n,t),t=rc(e.stateNode,t,2),e=Za(e,t,2),e!==null&&(lt(e,2),rd(e))}function Z(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(iu===null||!iu.has(r))){e=ki(n,e),n=ic(2),r=Za(t,n,2),r!==null&&(ac(n,r,t,e),lt(r,2),rd(r));break}}t=t.return}}function Gu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Bl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Wl=!0,i.add(n),e=Ku.bind(null,e,t,n),t.then(e,e))}function Ku(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,G===e&&(q&n)===n&&(Y===4||Y===3&&(q&62914560)===q&&300>Re()-eu?!(W&2)&&Su(e,0):Jl|=n,Xl===q&&(Xl=0)),rd(e)}function qu(e,t){t===0&&(t=st()),e=mi(e,t),e!==null&&(lt(e,t),rd(e))}function Ju(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qu(e,n)}function Yu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(a(314))}r!==null&&r.delete(t),qu(e,n)}function Xu(e,t){return Pe(e,t)}var Zu=null,Qu=null,$u=!1,ed=!1,td=!1,nd=0;function rd(e){e!==Qu&&e.next===null&&(Qu===null?Zu=Qu=e:Qu=Qu.next=e),ed=!0,$u||($u=!0,ud())}function id(e,t){if(!td&&ed){td=!0;do for(var n=!1,r=Zu;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Xe(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ld(r,a))}else a=q,a=it(r,r===G?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||at(r,a)||(n=!0,ld(r,a));r=r.next}while(n);td=!1}}function ad(){od()}function od(){ed=$u=!1;var e=0;nd!==0&&Gd()&&(e=nd);for(var t=Re(),n=null,r=Zu;r!==null;){var i=r.next,a=sd(r,t);a===0?(r.next=null,n===null?Zu=i:n.next=i,i===null&&(Qu=n)):(n=r,(e!==0||a&3)&&(ed=!0)),r=i}X!==0&&X!==5||id(e,!1),nd!==0&&(nd=0)}function sd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Yt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),D(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Yt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Yt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Yt(n.imageSizes)+`"]`)):i+=`[href="`+Yt(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=m({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),D(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Yt(r)+`"][href="`+Yt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=m({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),D(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=At(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=m({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);D(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=At(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),D(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=At(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),D(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var i=(i=be.current)?gf(i):null;if(!i)throw Error(a(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=At(i).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var o=At(i).hoistableStyles,s=o.get(e);if(s||(i=i.ownerDocument||i,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=i.querySelector(jf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),o||Nf(i,e,n,s.state))),t&&r===null)throw Error(a(528,``));return s}if(t&&r!==null)throw Error(a(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=At(i).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(a(444,e))}}function Af(e){return`href="`+Yt(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return m({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),D(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Yt(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Yt(n.href)+`"]`);if(r)return t.instance=r,D(r),r;var i=m({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),D(r),Pd(r,`style`,i),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:i=Af(n.href);var o=e.querySelector(jf(i));if(o)return t.state.loading|=4,t.instance=o,D(o),o;r=Mf(n),(i=mf.get(i))&&Rf(r,i),o=(e.ownerDocument||e).createElement(`link`),D(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Pd(o,`link`,r),t.state.loading|=4,Lf(o,n.precedence,e),t.instance=o;case`script`:return o=Pf(n.src),(i=e.querySelector(Ff(o)))?(t.instance=i,D(i),i):(r=n,(i=mf.get(o))&&(r=m({},n),zf(r,i)),e=e.ownerDocument||e,i=e.createElement(`script`),D(i),Pd(i,`link`,r),e.head.appendChild(i),t.instance=i);case`void`:return null;default:throw Error(a(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,D(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),D(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=x()}))(),1),te=(e,t)=>{e instanceof Function&&u(async()=>{let{onCLS:e,onINP:t,onFCP:n,onLCP:r,onTTFB:i}=await import(`./web-vitals-DydID5sk.js`);return{onCLS:e,onINP:t,onFCP:n,onLCP:r,onTTFB:i}},[]).then(({onCLS:n,onINP:r,onFCP:i,onLCP:a,onTTFB:o})=>{n(e,t),r(e,t),i(e,t),a(e,t),o(e,t)})},ne=document.getElementById(`app`);ne&&!ne.innerHTML&&ee.createRoot(ne).render((0,g.jsx)(h.StrictMode,{children:(0,g.jsx)(i,{client:o,children:(0,g.jsx)(m,{children:(0,g.jsx)(p,{children:(0,g.jsx)(f,{children:(0,g.jsx)(d,{children:(0,g.jsx)(v,{router:a})})})})})})}));var re=document.getElementById(`splash`);if(re){let e=300+Math.random()*700,t=()=>{re.style.opacity=`0`,re.addEventListener(`transitionend`,()=>{re.remove(),document.getElementById(`splash-style`)?.remove(),document.getElementById(`app-bootstrap-script`)?.remove()},{once:!0})},n=e-(Date.now()-(window.__splashStart??Date.now()));n>0?setTimeout(t,n):t()}te(console.log); \ No newline at end of file diff --git a/src/www/assets/index-uuDLrfbi.css b/src/www/assets/index-uuDLrfbi.css new file mode 100644 index 0000000..d84a416 --- /dev/null +++ b/src/www/assets/index-uuDLrfbi.css @@ -0,0 +1,2 @@ +/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */ +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:var(--font-inter);--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-950:oklch(12.9% .042 264.695);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-xs:.125rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-lg:16px;--blur-xl:24px;--blur-3xl:64px;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-inter);--default-mono-font-family:var(--font-mono);--font-inter:"Inter Variable", sans-serif;--color-border:var(--border)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--ring) 50%, transparent)}}html{font-family:var(--font-inter);overflow-x:hidden}body{background-color:var(--background);color:var(--foreground);width:100%;min-height:100svh}body:has(:is(div[data-variant=inset])){background-color:var(--sidebar)}}@layer components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.\@container\/content{container:content/inline-size}.faded-bottom:after{content:var(--tw-content);pointer-events:none;content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);inset-inline-start:calc(var(--spacing) * 0);bottom:calc(var(--spacing) * 0);content:var(--tw-content);content:var(--tw-content);height:calc(var(--spacing) * 32);content:var(--tw-content);content:var(--tw-content);border-bottom-right-radius:calc(var(--radius) * 1.8);border-bottom-left-radius:calc(var(--radius) * 1.8);content:var(--tw-content);background-image:linear-gradient(180deg,transparent 10%,var(--background) 70%);width:100%;display:none;position:absolute}@media (width>=48rem){.faded-bottom:after{content:var(--tw-content);display:block}}.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.inset-s-0{inset-inline-start:calc(var(--spacing) * 0)}.inset-s-1\.5{inset-inline-start:calc(var(--spacing) * 1.5)}.inset-s-44{inset-inline-start:calc(var(--spacing) * 44)}.start{inset-inline-start:var(--spacing)}.start-full{inset-inline-start:100%}.end{inset-inline-end:var(--spacing)}.inset-e-0{inset-inline-end:calc(var(--spacing) * 0)}.inset-e-1{inset-inline-end:calc(var(--spacing) * 1)}.inset-e-3{inset-inline-end:calc(var(--spacing) * 3)}.inset-e-\[0\.3rem\]{inset-inline-end:.3rem}.top-0{top:calc(var(--spacing) * 0)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2\.5{top:calc(var(--spacing) * 2.5)}.top-3\.5{top:calc(var(--spacing) * 3.5)}.top-4{top:calc(var(--spacing) * 4)}.top-\[-10\%\]{top:-10%}.top-\[0\.3rem\]{top:.3rem}.top-\[50\%\]{top:50%}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.right-\[-5\%\]{right:-5%}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-6{bottom:calc(var(--spacing) * 6)}.bottom-\[-10\%\]{bottom:-10%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-3{left:calc(var(--spacing) * 3)}.left-\[-5\%\]{left:-5%}.left-\[50\%\]{left:50%}.left-\[70px\]{left:70px}.left-\[240px\]{left:240px}.left-\[310px\]{left:310px}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-999{z-index:999}.z-\[1\]{z-index:1}.z-\[2\]{z-index:2}.z-\[3\]{z-index:3}.z-\[4\]{z-index:4}.col-span-1{grid-column:span 1/span 1}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-auto{margin:auto}.container{margin-inline:auto;padding-inline:2rem}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.-mx-3{margin-inline:calc(var(--spacing) * -3)}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3\.5{margin-inline:calc(var(--spacing) * 3.5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing) * .5)}.my-1{margin-block:calc(var(--spacing) * 1)}.my-4{margin-block:calc(var(--spacing) * 4)}.ms-2{margin-inline-start:calc(var(--spacing) * 2)}.ms-4{margin-inline-start:calc(var(--spacing) * 4)}.ms-auto{margin-inline-start:auto}.me-2{margin-inline-end:calc(var(--spacing) * 2)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-auto{margin-top:auto}.mr-2{margin-right:calc(var(--spacing) * 2)}.-mb-4{margin-bottom:calc(var(--spacing) * -4)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.field-sizing-content{field-sizing:content}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-\(--cell-size\){width:var(--cell-size);height:var(--cell-size)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-4\.5{width:calc(var(--spacing) * 4.5);height:calc(var(--spacing) * 4.5)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-72{width:calc(var(--spacing) * 72);height:calc(var(--spacing) * 72)}.size-80{width:calc(var(--spacing) * 80);height:calc(var(--spacing) * 80)}.size-\[1\.2rem\]{width:1.2rem;height:1.2rem}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.h-\(--cell-size\){height:var(--cell-size)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-4\.5{height:calc(var(--spacing) * 4.5)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-72{height:calc(var(--spacing) * 72)}.h-80{height:calc(var(--spacing) * 80)}.h-\[320px\]{height:320px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-40{min-height:calc(var(--spacing) * 40)}.min-h-svh{min-height:100svh}.w-\(--cell-size\){width:var(--cell-size)}.w-\(--radix-dropdown-menu-trigger-width\){width:var(--radix-dropdown-menu-trigger-width)}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-0{width:calc(var(--spacing) * 0)}.w-1{width:calc(var(--spacing) * 1)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing) * 4)}.w-4\.5{width:calc(var(--spacing) * 4.5)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-9\/12{width:75%}.w-11{width:calc(var(--spacing) * 11)}.w-11\/12{width:91.6667%}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-17\.5{width:calc(var(--spacing) * 17.5)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-25{width:calc(var(--spacing) * 25)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-37\.5{width:calc(var(--spacing) * 37.5)}.w-40{width:calc(var(--spacing) * 40)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-50{width:calc(var(--spacing) * 50)}.w-56{width:calc(var(--spacing) * 56)}.w-60{width:calc(var(--spacing) * 60)}.w-72{width:calc(var(--spacing) * 72)}.w-\[340px\]{width:340px}.w-\[440px\]{width:440px}.w-\[inherit\]{width:inherit}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-52{max-width:calc(var(--spacing) * 52)}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-\(--cell-size\){min-width:var(--cell-size)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-8{min-width:calc(var(--spacing) * 8)}.min-w-24{min-width:calc(var(--spacing) * 24)}.min-w-32{min-width:calc(var(--spacing) * 32)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-80{min-width:calc(var(--spacing) * 80)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[700px\]{min-width:700px}.min-w-\[900px\]{min-width:900px}.min-w-\[980px\]{min-width:980px}.min-w-\[1200px\]{min-width:1200px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-xs{min-width:var(--container-xs)}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-1\/2{--tw-translate-x:calc(1 / 2 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-52{--tw-translate-y:calc(var(--spacing) * -52);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-90{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-0{rotate:0deg}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-y-180{--tw-rotate-y:rotateY(180deg);transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-caret-blink{animation:1.25s ease-out infinite caret-blink}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.scroll-my-1{scroll-margin-block:calc(var(--spacing) * 1)}.scroll-py-1{scroll-padding-block:calc(var(--spacing) * 1)}.list-disc{list-style-type:disc}.appearance-none{appearance:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_1fr\]{grid-template-rows:auto 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.gap-0{gap:calc(var(--spacing) * 0)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing) * 1)}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:calc(var(--radius) * 1.8)}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[6px\]{border-radius:6px}.rounded-\[36px\]{border-radius:36px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) * .8)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) * .6)}.rounded-xl{border-radius:calc(var(--radius) * 1.4)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-\[8px\]{border-top-left-radius:8px;border-top-right-radius:8px}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:calc(var(--radius) * .8);border-bottom-left-radius:calc(var(--radius) * .8)}.rounded-tl-\[inherit\]{border-top-left-radius:inherit}.rounded-r-md{border-top-right-radius:calc(var(--radius) * .8);border-bottom-right-radius:calc(var(--radius) * .8)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\(--color-border\){border-color:var(--color-border)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/20{border-color:color-mix(in oklab, var(--color-amber-500) 20%, transparent)}}.border-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.border-blue-500\/30{border-color:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.border-border,.border-border\/40{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/40{border-color:color-mix(in oklab, var(--border) 40%, transparent)}}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab, var(--border) 50%, transparent)}}.border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab, var(--border) 60%, transparent)}}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/20{border-color:color-mix(in oklab, var(--color-emerald-500) 20%, transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/30{border-color:color-mix(in oklab, var(--color-emerald-500) 30%, transparent)}}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-primary{border-color:var(--primary)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\(--color-bg\){background-color:var(--color-bg)}.bg-\[\#ecedef\]{background-color:#ecedef}.bg-accent{background-color:var(--accent)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/5{background-color:color-mix(in oklab, var(--color-amber-500) 5%, transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/10{background-color:color-mix(in oklab, var(--color-amber-500) 10%, transparent)}}.bg-amber-500\/12{background-color:#f99c001f}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/12{background-color:color-mix(in oklab, var(--color-amber-500) 12%, transparent)}}.bg-background,.bg-background\/50{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/50{background-color:color-mix(in oklab, var(--background) 50%, transparent)}}.bg-background\/85{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/85{background-color:color-mix(in oklab, var(--background) 85%, transparent)}}.bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/95{background-color:color-mix(in oklab, var(--background) 95%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\/10{background-color:color-mix(in oklab, var(--color-blue-500) 10%, transparent)}}.bg-border{background-color:var(--border)}.bg-card,.bg-card\/55{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/55{background-color:color-mix(in oklab, var(--card) 55%, transparent)}}.bg-destructive{background-color:var(--destructive)}.bg-emerald-500\/5{background-color:#00bb7f0d}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/5{background-color:color-mix(in oklab, var(--color-emerald-500) 5%, transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/10{background-color:color-mix(in oklab, var(--color-emerald-500) 10%, transparent)}}.bg-emerald-500\/12{background-color:#00bb7f1f}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/12{background-color:color-mix(in oklab, var(--color-emerald-500) 12%, transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground{background-color:var(--muted-foreground)}.bg-muted\/20{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/20{background-color:color-mix(in oklab, var(--muted) 20%, transparent)}}.bg-muted\/25{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/25{background-color:color-mix(in oklab, var(--muted) 25%, transparent)}}.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/40{background-color:color-mix(in oklab, var(--muted) 40%, transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/5{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/5{background-color:color-mix(in oklab, var(--primary) 5%, transparent)}}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab, red, red)){.bg-rose-500\/10{background-color:color-mix(in oklab, var(--color-rose-500) 10%, transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab, red, red)){.bg-slate-500\/10{background-color:color-mix(in oklab, var(--color-slate-500) 10%, transparent)}}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-950{background-color:var(--color-slate-950)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-\[linear-gradient\(rgba\(0\,0\,0\,0\.03\)_1px\,transparent_1px\)\,linear-gradient\(90deg\,rgba\(0\,0\,0\,0\.03\)_1px\,transparent_1px\)\]{background-image:linear-gradient(#00000008 1px,#0000 1px),linear-gradient(90deg,#00000008 1px,#0000 1px)}.bg-\[size\:48px_48px\]{background-size:48px 48px}.fill-current{fill:currentColor}.fill-foreground{fill:var(--foreground)}.fill-primary{fill:var(--primary)}.stroke-primary{stroke:var(--primary)}.stroke-white{stroke:var(--color-white)}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-12{padding:calc(var(--spacing) * 12)}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-\(--cell-size\){padding-inline:var(--cell-size)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.ps-2{padding-inline-start:calc(var(--spacing) * 2)}.pe-1{padding-inline-end:calc(var(--spacing) * 1)}.pe-4{padding-inline-end:calc(var(--spacing) * 4)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-inter{font-family:Inter Variable,sans-serif}.font-manrope{font-family:Manrope Variable,sans-serif}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8rem\]{font-size:.8rem}.text-\[7rem\]{font-size:7rem}.text-\[10px\]{font-size:10px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.3em\]{--tw-tracking:.3em;letter-spacing:.3em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.text-accent-foreground{color:var(--accent-foreground)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-background{color:var(--background)}.text-blue-600{color:var(--color-blue-600)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-emerald-600{color:var(--color-emerald-600)}.text-foreground,.text-foreground\/60{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\/60{color:color-mix(in oklab, var(--foreground) 60%, transparent)}}.text-foreground\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\/80{color:color-mix(in oklab, var(--foreground) 80%, transparent)}}.text-muted-foreground,.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/70{color:color-mix(in oklab, var(--muted-foreground) 70%, transparent)}}.text-muted-foreground\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/80{color:color-mix(in oklab, var(--muted-foreground) 80%, transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-rose-600{color:var(--color-rose-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/50{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/50{color:color-mix(in oklab, var(--sidebar-foreground) 50%, transparent)}}.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/70{color:color-mix(in oklab, var(--sidebar-foreground) 70%, transparent)}}.text-slate-600{color:var(--color-slate-600)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.decoration-dashed{text-decoration-style:dashed}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-95{opacity:.95}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-\[1px\]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-background{--tw-ring-color:var(--background)}.ring-border{--tw-ring-color:var(--border)}.ring-ring\/50{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.ring-ring\/50{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_-1px_2px_rgb\(0_0_0\/_0\.1\)\]{--tw-drop-shadow-size:drop-shadow(0 -1px 2px var(--tw-drop-shadow-color,#0000001a));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_1px_2px_rgb\(0_0_0\/_0\.1\)\]{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.delay-100{transition-delay:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.delay-100{--tw-animation-delay:.1s;animation-delay:.1s}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.\[--cell-size\:--spacing\(8\)\]{--cell-size:calc(var(--spacing) * 8)}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:bg-accent:is(:where(.group):hover *){background-color:var(--accent)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}.group-hover\/row\:bg-muted:is(:where(.group\/row):hover *){background-color:var(--muted)}}.group-focus-visible\:ring-2:is(:where(.group):focus-visible *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing) * 8)}.group-has-data-\[size\=lg\]\/avatar-group\:size-10:is(:where(.group\/avatar-group):has([data-size=lg]) *){width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.group-has-data-\[size\=sm\]\/avatar-group\:size-6:is(:where(.group\/avatar-group):has([data-size=sm]) *){width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing) * -8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing) * 8)!important;height:calc(var(--spacing) * 8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing) * 0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing) * 2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing) * 0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[focused\=true\]\/day\:relative:is(:where(.group\/day)[data-focused=true] *){position:relative}.group-data-\[focused\=true\]\/day\:z-10:is(:where(.group\/day)[data-focused=true] *){z-index:10}.group-data-\[focused\=true\]\/day\:border-ring:is(:where(.group\/day)[data-focused=true] *){border-color:var(--ring)}.group-data-\[focused\=true\]\/day\:ring-\[3px\]:is(:where(.group\/day)[data-focused=true] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-data-\[focused\=true\]\/day\:ring-ring\/50:is(:where(.group\/day)[data-focused=true] *){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.group-data-\[focused\=true\]\/day\:ring-ring\/50:is(:where(.group\/day)[data-focused=true] *){--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.group-data-\[orientation\=horizontal\]\/tabs\:h-9:is(:where(.group\/tabs)[data-orientation=horizontal] *){height:calc(var(--spacing) * 9)}.group-data-\[orientation\=vertical\]\/tabs\:h-fit:is(:where(.group\/tabs)[data-orientation=vertical] *){height:fit-content}.group-data-\[orientation\=vertical\]\/tabs\:w-full:is(:where(.group\/tabs)[data-orientation=vertical] *){width:100%}.group-data-\[orientation\=vertical\]\/tabs\:flex-col:is(:where(.group\/tabs)[data-orientation=vertical] *){flex-direction:column}.group-data-\[orientation\=vertical\]\/tabs\:justify-start:is(:where(.group\/tabs)[data-orientation=vertical] *){justify-content:flex-start}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing) * -4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing) * 0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[size\=default\]\/avatar\:size-2\.5:is(:where(.group\/avatar)[data-size=default] *){width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.group-data-\[size\=default\]\/switch\:size-4:is(:where(.group\/switch)[data-size=default] *){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.group-data-\[size\=lg\]\/avatar\:size-3:is(:where(.group\/avatar)[data-size=lg] *){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.group-data-\[size\=sm\]\/alert-dialog-content\:grid:is(:where(.group\/alert-dialog-content)[data-size=sm] *){display:grid}.group-data-\[size\=sm\]\/alert-dialog-content\:grid-cols-2:is(:where(.group\/alert-dialog-content)[data-size=sm] *){grid-template-columns:repeat(2,minmax(0,1fr))}.group-data-\[size\=sm\]\/avatar\:size-2:is(:where(.group\/avatar)[data-size=sm] *){width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.group-data-\[size\=sm\]\/avatar\:text-xs:is(:where(.group\/avatar)[data-size=sm] *){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.group-data-\[size\=sm\]\/switch\:size-3:is(:where(.group\/switch)[data-size=sm] *){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.group-data-\[state\=checked\]\:shadow-2xl:is(:where(.group)[data-state=checked] *){--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-data-\[state\=checked\]\:ring-primary:is(:where(.group)[data-state=checked] *){--tw-ring-color:var(--primary)}.group-data-\[state\=open\]\/collapsible\:rotate-90:is(:where(.group\/collapsible)[data-state=open] *){rotate:90deg}.group-data-\[state\=selected\]\/row\:bg-muted:is(:where(.group\/row)[data-state=selected] *){background-color:var(--muted)}.group-data-\[state\=unchecked\]\:hidden:is(:where(.group)[data-state=unchecked] *){display:none}.group-data-\[state\=unchecked\]\:fill-muted-foreground:is(:where(.group)[data-state=unchecked] *){fill:var(--muted-foreground)}.group-data-\[state\=unchecked\]\:stroke-muted-foreground:is(:where(.group)[data-state=unchecked] *){stroke:var(--muted-foreground)}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-data-\[variant\=line\]\/tabs-list\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *){background-color:#0000}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing) * 1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing) * 2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing) * 1)}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing) * 7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing) * -2)}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing) * 0)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing) * 0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:-z-10:after{content:var(--tw-content);z-index:calc(10 * -1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:bg-background\/20:after{content:var(--tw-content);background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.after\:bg-background\/20:after{background-color:color-mix(in oklab, var(--background) 20%, transparent)}}.after\:bg-foreground:after{content:var(--tw-content);background-color:var(--foreground)}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:backdrop-blur-lg:after{content:var(--tw-content);--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.after\:transition-opacity:after{content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.group-data-\[orientation\=horizontal\]\/tabs\:after\:inset-x-0:is(:where(.group\/tabs)[data-orientation=horizontal] *):after{content:var(--tw-content);inset-inline:calc(var(--spacing) * 0)}.group-data-\[orientation\=horizontal\]\/tabs\:after\:bottom-\[-5px\]:is(:where(.group\/tabs)[data-orientation=horizontal] *):after{content:var(--tw-content);bottom:-5px}.group-data-\[orientation\=horizontal\]\/tabs\:after\:h-0\.5:is(:where(.group\/tabs)[data-orientation=horizontal] *):after{content:var(--tw-content);height:calc(var(--spacing) * .5)}.group-data-\[orientation\=vertical\]\/tabs\:after\:inset-y-0:is(:where(.group\/tabs)[data-orientation=vertical] *):after{content:var(--tw-content);inset-block:calc(var(--spacing) * 0)}.group-data-\[orientation\=vertical\]\/tabs\:after\:-right-1:is(:where(.group\/tabs)[data-orientation=vertical] *):after{content:var(--tw-content);right:calc(var(--spacing) * -1)}.group-data-\[orientation\=vertical\]\/tabs\:after\:w-0\.5:is(:where(.group\/tabs)[data-orientation=vertical] *):after{content:var(--tw-content);width:calc(var(--spacing) * .5)}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) * .8);border-bottom-left-radius:calc(var(--radius) * .8)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) * .8);border-bottom-right-radius:calc(var(--radius) * .8)}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-accent:hover{border-color:var(--accent)}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/8:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/8:hover{background-color:color-mix(in oklab, var(--destructive) 8%, transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.hover\:bg-muted\/60:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/60:hover{background-color:color-mix(in oklab, var(--muted) 60%, transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-solid:hover{text-decoration-style:solid}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:translate-y-3:focus{--tw-translate-y:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.focus\:transform:focus{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-4:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:bg-transparent:active{background-color:#0000}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-focus\:border-ring:has(:focus){border-color:var(--ring)}.has-focus\:ring-\[3px\]:has(:focus){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.has-focus\:ring-ring\/50:has(:focus){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.has-focus\:ring-ring\/50:has(:focus){--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.has-disabled\:opacity-50:has(:disabled){opacity:.5}.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.has-data-\[layout\=fixed\]\:h-svh:has([data-layout=fixed]){height:100svh}.peer-data-\[variant\=inset\]\:has-data-\[layout\=fixed\]\:h-\[calc\(100svh-\(var\(--spacing\)\*4\)\)\]:is(:where(.peer)[data-variant=inset]~*):has([data-layout=fixed]){height:calc(100svh - (var(--spacing) * 4))}.has-data-\[slot\=alert-dialog-media\]\:grid-rows-\[auto_auto_1fr\]:has([data-slot=alert-dialog-media]){grid-template-rows:auto auto 1fr}.has-data-\[slot\=alert-dialog-media\]\:gap-x-6:has([data-slot=alert-dialog-media]){column-gap:calc(var(--spacing) * 6)}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-1\.5:has(>svg){padding-inline:calc(var(--spacing) * 1.5)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.aria-selected\:text-muted-foreground[aria-selected=true]{color:var(--muted-foreground)}.data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.data-\[active\=true\]\:border-ring[data-active=true]{border-color:var(--ring)}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.data-\[active\=true\]\:aria-invalid\:border-destructive[data-active=true][aria-invalid=true]{border-color:var(--destructive)}.data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[empty\=true\]\:text-muted-foreground[data-empty=true]{color:var(--muted-foreground)}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing) * 8)}.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:calc(var(--spacing) * 1.5)}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=horizontal\]\:flex-col[data-orientation=horizontal]{flex-direction:column}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:min-h-44[data-orientation=vertical]{min-height:calc(var(--spacing) * 44)}.data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:calc(var(--spacing) * 1.5)}.data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical]{flex-direction:column}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[range-end\=true\]\:rounded-md[data-range-end=true]{border-radius:calc(var(--radius) * .8)}.data-\[range-end\=true\]\:rounded-r-md[data-range-end=true]{border-top-right-radius:calc(var(--radius) * .8);border-bottom-right-radius:calc(var(--radius) * .8)}.data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:var(--primary)}.data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:var(--primary-foreground)}.data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.data-\[range-middle\=true\]\:bg-accent[data-range-middle=true]{background-color:var(--accent)}.data-\[range-middle\=true\]\:text-accent-foreground[data-range-middle=true]{color:var(--accent-foreground)}.data-\[range-start\=true\]\:rounded-md[data-range-start=true]{border-radius:calc(var(--radius) * .8)}.data-\[range-start\=true\]\:rounded-l-md[data-range-start=true]{border-top-left-radius:calc(var(--radius) * .8);border-bottom-left-radius:calc(var(--radius) * .8)}.data-\[range-start\=true\]\:bg-primary[data-range-start=true]{background-color:var(--primary)}.data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true]{color:var(--primary-foreground)}.data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:var(--primary)}.data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:var(--primary-foreground)}.data-\[selected\=true\]\:rounded-none[data-selected=true]{border-radius:0}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing) * 9)}.data-\[size\=default\]\:h-\[1\.15rem\][data-size=default]{height:1.15rem}.data-\[size\=default\]\:w-8[data-size=default]{width:calc(var(--spacing) * 8)}.data-\[size\=lg\]\:size-10[data-size=lg]{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.data-\[size\=sm\]\:size-6[data-size=sm]{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.data-\[size\=sm\]\:h-3\.5[data-size=sm]{height:calc(var(--spacing) * 3.5)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing) * 8)}.data-\[size\=sm\]\:w-6[data-size=sm]{width:calc(var(--spacing) * 6)}.data-\[size\=sm\]\:max-w-xs[data-size=sm]{max-width:var(--container-xs)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab, var(--destructive) 90%, transparent)}}:is(.\*\:data-\[slot\=avatar\]\:ring-2>*)[data-slot=avatar]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:is(.\*\:data-\[slot\=avatar\]\:ring-background>*)[data-slot=avatar]{--tw-ring-color:var(--background)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing) * 12)}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing) * 2)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.group-data-\[variant\=default\]\/tabs-list\:data-\[state\=active\]\:shadow-sm:is(:where(.group\/tabs-list)[data-variant=default] *)[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{background-color:#0000}.group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:shadow-none:is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:after\:opacity-100:is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]:after{content:var(--tw-content);opacity:1}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x:calc(100% - 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:bg-muted[data-state=open]{background-color:var(--muted)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--secondary)}.data-\[state\=open\]\:bg-sidebar-accent[data-state=open]{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:text-sidebar-accent-foreground[data-state=open]{color:var(--sidebar-accent-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.data-\[variant\=line\]\:rounded-none[data-variant=line]{border-radius:0}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-backdrop-filter\:bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.supports-backdrop-filter\:bg-background\/60{background-color:color-mix(in oklab, var(--background) 60%, transparent)}}}@media not all and (width>=64rem){.max-lg\:hidden{display:none}}@media not all and (width>=48rem){.max-md\:hidden{display:none}.max-md\:scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}}@media (width>=40rem){.sm\:static{position:static}.sm\:z-auto{z-index:auto}.sm\:mx-0{margin-inline:calc(var(--spacing) * 0)}.sm\:my-0{margin-block:calc(var(--spacing) * 0)}.sm\:my-4{margin-block:calc(var(--spacing) * 4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:w-40{width:calc(var(--spacing) * 40)}.sm\:w-48{width:calc(var(--spacing) * 48)}.sm\:w-56{width:calc(var(--spacing) * 56)}.sm\:w-120{width:calc(var(--spacing) * 120)}.sm\:max-w-3xl{max-width:var(--container-3xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:min-w-0{min-width:calc(var(--spacing) * 0)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:gap-4{gap:calc(var(--spacing) * 4)}.sm\:gap-6{gap:calc(var(--spacing) * 6)}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}:where(.sm\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-md{border-radius:calc(var(--radius) * .8)}.sm\:border-0{border-style:var(--tw-border-style);border-width:0}.sm\:bg-transparent{background-color:#0000}.sm\:p-0{padding:calc(var(--spacing) * 0)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:pe-12{padding-inline-end:calc(var(--spacing) * 12)}.sm\:text-left{text-align:left}.sm\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.sm\:group-data-\[size\=default\]\/alert-dialog-content\:row-span-2:is(:where(.group\/alert-dialog-content)[data-size=default] *){grid-row:span 2/span 2}.sm\:group-data-\[size\=default\]\/alert-dialog-content\:place-items-start:is(:where(.group\/alert-dialog-content)[data-size=default] *){place-items:start}.sm\:group-data-\[size\=default\]\/alert-dialog-content\:text-left:is(:where(.group\/alert-dialog-content)[data-size=default] *){text-align:left}.sm\:group-data-\[size\=default\]\/alert-dialog-content\:group-has-data-\[slot\=alert-dialog-media\]\/alert-dialog-content\:col-start-2:is(:where(.group\/alert-dialog-content)[data-size=default] *):is(:where(.group\/alert-dialog-content):has([data-slot=alert-dialog-media]) *){grid-column-start:2}.sm\:group-data-\[size\=default\]\/alert-dialog-content\:has-data-\[slot\=alert-dialog-media\]\:grid-rows-\[auto_1fr\]:is(:where(.group\/alert-dialog-content)[data-size=default] *):has([data-slot=alert-dialog-media]){grid-template-rows:auto 1fr}.data-\[size\=default\]\:sm\:max-w-lg[data-size=default]{max-width:var(--container-lg)}}@media (width>=48rem){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.md\:flex-none{flex:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:p-0{padding:calc(var(--spacing) * 0)}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing) * 2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing) * 0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) * 1.4)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing) * 2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (width>=64rem){.lg\:sticky{position:sticky}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:my-6{margin-block:calc(var(--spacing) * 6)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-\[400px\]{height:400px}.lg\:w-1\/5{width:20%}.lg\:w-52{width:calc(var(--spacing) * 52)}.lg\:w-62\.5{width:calc(var(--spacing) * 62.5)}.lg\:w-72{width:calc(var(--spacing) * 72)}.lg\:w-\[550px\]{width:550px}.lg\:max-w-none{max-width:none}.lg\:max-w-xl{max-width:var(--container-xl)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:flex-row{flex-direction:row}:where(.lg\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 0) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 8) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-12>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 12) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-x-reverse)))}.lg\:p-8{padding:calc(var(--spacing) * 8)}.lg\:px-0{padding-inline:calc(var(--spacing) * 0)}.lg\:px-3{padding-inline:calc(var(--spacing) * 3)}}@media (width>=80rem){.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:w-64{width:calc(var(--spacing) * 64)}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}:where(.xl\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-x-reverse)))}.xl\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}@media (width>=96rem){.\32 xl\:w-80{width:calc(var(--spacing) * 80)}}@container content not (width>=48rem){.\@max-3xl\/content\:hidden{display:none}}@container content not (width>=42rem){.\@max-2xl\/content\:flex-col-reverse{flex-direction:column-reverse}.\@max-2xl\/content\:flex-row-reverse{flex-direction:row-reverse}.\@max-2xl\/content\:gap-4{gap:calc(var(--spacing) * 4)}}@container content not (width>=28rem){.\@max-md\/content\:hidden{display:none}}@container content (width>=42rem){.\@2xl\/content\:hidden{display:none}}@container content (width>=80rem){.\@7xl\/content\:mx-auto{margin-inline:auto}.\@7xl\/content\:w-full{width:100%}.\@7xl\/content\:max-w-7xl{max-width:var(--container-7xl)}}.rtl\:rotate-180:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){rotate:180deg}:where(.rtl\:space-x-reverse:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}.dark\:block:is([data-mode=dark] *){display:block}.dark\:hidden:is([data-mode=dark] *){display:none}.dark\:scale-0:is([data-mode=dark] *){--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x) var(--tw-scale-y)}.dark\:scale-100:is([data-mode=dark] *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.dark\:-rotate-90:is([data-mode=dark] *){rotate:-90deg}.dark\:rotate-0:is([data-mode=dark] *){rotate:0deg}.dark\:border-amber-900\/60:is([data-mode=dark] *){border-color:#7b330699}@supports (color:color-mix(in lab, red, red)){.dark\:border-amber-900\/60:is([data-mode=dark] *){border-color:color-mix(in oklab, var(--color-amber-900) 60%, transparent)}}.dark\:border-input:is([data-mode=dark] *){border-color:var(--input)}.dark\:bg-amber-950\/40:is([data-mode=dark] *){background-color:#46190166}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-950\/40:is([data-mode=dark] *){background-color:color-mix(in oklab, var(--color-amber-950) 40%, transparent)}}.dark\:bg-background:is([data-mode=dark] *){background-color:var(--background)}.dark\:bg-destructive\/60:is([data-mode=dark] *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-destructive\/60:is([data-mode=dark] *){background-color:color-mix(in oklab, var(--destructive) 60%, transparent)}}.dark\:bg-input\/30:is([data-mode=dark] *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-input\/30:is([data-mode=dark] *){background-color:color-mix(in oklab, var(--input) 30%, transparent)}}.dark\:bg-\[linear-gradient\(rgba\(255\,255\,255\,0\.03\)_1px\,transparent_1px\)\,linear-gradient\(90deg\,rgba\(255\,255\,255\,0\.03\)_1px\,transparent_1px\)\]:is([data-mode=dark] *){background-image:linear-gradient(#ffffff08 1px,#0000 1px),linear-gradient(90deg,#ffffff08 1px,#0000 1px)}.dark\:text-amber-300:is([data-mode=dark] *){color:var(--color-amber-300)}.dark\:text-amber-400:is([data-mode=dark] *){color:var(--color-amber-400)}.dark\:text-blue-400:is([data-mode=dark] *){color:var(--color-blue-400)}.dark\:text-emerald-400:is([data-mode=dark] *){color:var(--color-emerald-400)}.dark\:text-muted-foreground:is([data-mode=dark] *){color:var(--muted-foreground)}.dark\:drop-shadow-\[0_-1px_2px_rgb\(255_255_255\/_0\.1\)\]:is([data-mode=dark] *){--tw-drop-shadow-size:drop-shadow(0 -1px 2px var(--tw-drop-shadow-color,#ffffff1a));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.dark\:drop-shadow-\[0_1px_2px_rgb\(255_255_255\/_0\.1\)\]:is([data-mode=dark] *){--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#ffffff1a));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}@media (hover:hover){.dark\:hover\:bg-accent\/50:is([data-mode=dark] *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-accent\/50:is([data-mode=dark] *):hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.dark\:hover\:bg-background:is([data-mode=dark] *):hover{background-color:var(--background)}.dark\:hover\:bg-input\/50:is([data-mode=dark] *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-input\/50:is([data-mode=dark] *):hover{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}.dark\:hover\:text-accent-foreground:is([data-mode=dark] *):hover{color:var(--accent-foreground)}.dark\:hover\:text-foreground:is([data-mode=dark] *):hover{color:var(--foreground)}}.dark\:focus-visible\:ring-destructive\/40:is([data-mode=dark] *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus-visible\:ring-destructive\/40:is([data-mode=dark] *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is([data-mode=dark] *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40:is([data-mode=dark] *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is([data-mode=dark] *)[data-active=true][aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is([data-mode=dark] *)[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\:data-\[state\=active\]\:border-input:is([data-mode=dark] *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:is([data-mode=dark] *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[state\=active\]\:bg-input\/30:is([data-mode=dark] *)[data-state=active]{background-color:color-mix(in oklab, var(--input) 30%, transparent)}}.dark\:data-\[state\=active\]\:text-foreground:is([data-mode=dark] *)[data-state=active]{color:var(--foreground)}.dark\:group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:border-transparent:is([data-mode=dark] *):is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{border-color:#0000}.dark\:group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:bg-transparent:is([data-mode=dark] *):is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{background-color:#0000}.dark\:data-\[state\=checked\]\:bg-primary:is([data-mode=dark] *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[state\=checked\]\:bg-primary-foreground:is([data-mode=dark] *)[data-state=checked]{background-color:var(--primary-foreground)}.dark\:data-\[state\=unchecked\]\:bg-foreground:is([data-mode=dark] *)[data-state=unchecked]{background-color:var(--foreground)}.dark\:data-\[state\=unchecked\]\:bg-input\/80:is([data-mode=dark] *)[data-state=unchecked]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[state\=unchecked\]\:bg-input\/80:is([data-mode=dark] *)[data-state=unchecked]{background-color:color-mix(in oklab, var(--input) 80%, transparent)}}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is([data-mode=dark] *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is([data-mode=dark] *)[data-variant=destructive]:focus{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:var(--muted-foreground)}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke=\#ccc]{stroke:var(--border)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke=\#ccc]{stroke:color-mix(in oklab, var(--border) 50%, transparent)}}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:var(--border)}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke=\#fff]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{outline-offset:2px;outline:2px solid #0000}}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke=\#ccc]{stroke:var(--border)}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:var(--muted)}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke=\#ccc]{stroke:var(--border)}.\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{outline-offset:2px;outline:2px solid #0000}}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke=\#fff]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{outline-offset:2px;outline:2px solid #0000}}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing) * 1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing) * 0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing) * 5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing) * 5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing) * 12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing) * 3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing) * 5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing) * 5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:invisible svg{visibility:hidden}.\[\&_svg\]\:visible svg{visibility:visible}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:calc(var(--radius) * .8);border-bottom-left-radius:calc(var(--radius) * .8)}.\[\&\:has\(\[data-state\=checked\]\)\>div\]\:border-primary:has([data-state=checked])>div{border-color:var(--primary)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing) * 0)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing) * 6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing) * 6)}:is(.rtl\:\*\*\:\[\.rdp-button\\_next\>svg\]\:rotate-180:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *) *):is(.rdp-button_next>svg),:is(.rtl\:\*\*\:\[\.rdp-button\\_previous\>svg\]\:rotate-180:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *) *):is(.rdp-button_previous>svg){rotate:180deg}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing) * 2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:text-destructive\![data-variant=destructive]>*):is(svg){color:var(--destructive)!important}:is(.\*\:\[svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-8>*):is(svg:not([class*=size-])){width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:calc(var(--radius) * .8);border-bottom-right-radius:calc(var(--radius) * .8)}.\[\&\:nth-child\(2\)\[data-selected\=true\]_button\]\:rounded-l-md:nth-child(2)[data-selected=true] button{border-top-left-radius:calc(var(--radius) * .8);border-bottom-left-radius:calc(var(--radius) * .8)}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>button\]\:hidden>button,.\[\&\>circle\]\:hidden>circle{display:none}.\[\&\>div\]\:h-full>div{height:100%}.\[\&\>img\]\:absolute>img{position:absolute}.\[\&\>img\]\:top-\[15\%\]>img{top:15%}.\[\&\>img\]\:left-20>img{left:calc(var(--spacing) * 20)}.\[\&\>img\]\:h-full>img{height:100%}.\[\&\>img\]\:w-full>img{width:100%}.\[\&\>img\]\:object-cover>img{object-fit:cover}.\[\&\>img\]\:object-top-left>img{object-position:left top}.\[\&\>img\]\:select-none>img{-webkit-user-select:none;user-select:none}.\[\&\>path\]\:stroke-current>path{stroke:currentColor}.\[\&\>span\]\:text-xs>span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&\>span\]\:opacity-70>span{opacity:.7}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing) * 2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing) * 3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing) * 2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing) * 3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-muted-foreground>svg{color:var(--muted-foreground)}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.group-has-data-\[size\=lg\]\/avatar-group\:\[\&\>svg\]\:size-5:is(:where(.group\/avatar-group):has([data-size=lg]) *)>svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.group-has-data-\[size\=sm\]\/avatar-group\:\[\&\>svg\]\:size-3:is(:where(.group\/avatar-group):has([data-size=sm]) *)>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.group-data-\[size\=default\]\/avatar\:\[\&\>svg\]\:size-2:is(:where(.group\/avatar)[data-size=default] *)>svg,.group-data-\[size\=lg\]\/avatar\:\[\&\>svg\]\:size-2:is(:where(.group\/avatar)[data-size=lg] *)>svg{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.group-data-\[size\=sm\]\/avatar\:\[\&\>svg\]\:hidden:is(:where(.group\/avatar)[data-size=sm] *)>svg{display:none}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing) * -2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing) * -2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .\[\[data-slot\=card-content\]_\&\]\:bg-transparent,[data-slot=popover-content] .\[\[data-slot\=popover-content\]_\&\]\:bg-transparent{background-color:#0000}@media (hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab, var(--secondary) 90%, transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}a.\[a\&\]\:hover\:underline:hover{text-decoration-line:underline}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(data:font/woff2;base64,d09GMgABAAAAAAn4ABMAAAAAEwQAAAmOAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGjQbgnQcLj9IVkFSgQEGYD9TVEFUgQIAgQovahEICok0h0ULIAAwhzoBNgIkAzwEIAWHJgeBDgwHG6QQUdRKTmoBFD8K42bniObKrG3LZFcMWZzFmrjTFhQ6TVTqPJcInrfrvzq3b2PGn1wwMiNYGTy9ViREYARlL1zAGcPdPqBt3gNWrfKthv4xnM+b9caw+wmjgEUVRjHXhS6jgCK6zf5HiWQacJpGdAgdrbV6g/Rf1BfxRqZVQnrxRVWSJb6RLFnyu0elilmjeoSQCKnxsmwLaddUMjnksriSYuuPl06EAl7KfAiWQjCUETz0zNZ3EII94CDQtzkMfZ/9IkkY8tZRZTDky5ZVwBAM+GYpdd4ZVAWYImnLkiTg48l79gGx3D+VBtLeyg8u7bJAd4uo0pFuQBFysE9C95l0W4Fkiao6GfrDbu77lVU7wk9cV3uqOsXmQiMkhVKl1ugjzUAJBSIkkVWHijkpkVSyUFsgVBuJMA0N+ZnXtyUv5yMigGdfQRmwL1AAjQ3YXG6iIFNSUdPQo8+AISPGAltBMDQRAtyf4ZspLlZkpyOVoMZPvFGWzvk8p5SUC/NWPMj6T2/Yas2EdlON5GkfdkeFwVGjta825H89NIenlLWAPAp5h1KDtRhCaAQWMsFKtEvOKpIhgLHlXPARokkgEGEOAkqxJRQpKYq4ezahIiLHP6hZpqMbV0pUF2vdvEimLEQ/iIUYLgYWs0VXGVlLTOPdaPmFfCC/XrtzqVo1ez7vz6+Kd2+7o11ZJ+4MreLbB5BKVGxobAq4jZYalZ5aX2CKJiwUuc9GNJyi4M8bGyKcdjSRrG4JohdF8buJfmQefbYYREnMFsOoiNliFDVxmRgL0XUmUMLqzW0A4gCQAhWGYCQpFNukwXhIkPMsbRI19ewtw8Cp2Wj/Ro5cM2OTAbJAvZ/L4opBXb9+UHscYuOKM/W8isgwN26Exexjizmfnlp9dE3hOSqdZ/F5QqbckIlPb+oKfXxd6hftJ7Sm/uyPYpONza84CRlMNk/uhOrLpyf53982++zRkXNu3g3VF8qFbx1+7fbHZ9DrB3VXWNSmhnT2vrwS1+1Z+kHGBaZIhnnvuLBTNDeA340D1DWu5/jEa9pVfl6+Jij+yo3EELNixXCLjr173Q5eDP7Y7/L4iQFHbjpaJLFoP4cCsYP6sAPL7gMHNg53yYjqxqTDrYqLDl5DzW/eTLjYxCvucprjI3yl2ykKowKUC2Ox2FJLFo6Fa1HBWLC2jMCIIBEmklkYhmkpmBhTm/LCvJAH5oGcMKcgFEP1xUdho8ANPa6RFD99/PN60fjj9eXy2Eex4B5MpmRapXidzFk1p4uLk3+hn6jAP9ovJcXPPwk8o/0ltizbdbnTprvx4PSxT0VZ3Xc772aN7RflgbXRYwc3hLNO+k878nxGwfuVM8m8Gs7WEoVGWLHwSpx4vNSHBCMNqJ4m15Kp/TfHHVkQd++eY7PGN4W5byTs+6Ft8Ozvb/D60btv37de8ER0mS3P/0sLW84qGjEVkwztPzz06eGUWwKLwPb0D/WFd3vltl2aP276KpM0JNz6AfnAnZ5ADlF2zVyZ2OkxHSMxWPMnSZLbbDR3F1UjPVqp4d68da13F1YZujdWw7271iecO2l9+/4p47Oztjck355/75wFOI+VdGDqbNGs+ISgxg3iB2jb2r+b0CWsNLHIM4sdv8SDSFBP/Oromz6FNCWw2iMTxV0R8QLyBTkpe0j5+pSSJOOTB5Mck/gh3IopuNQnhKj02t3FL80gGbEh89SZcwTxcYt5cZT/nMnB3uXfPy8BSpVMBuRx+ZhACGzDBmwHsJRAjhotOnzuj2wDz3ug2wOUAY2NgZln9/TK/enG/oE4rO1wxvGUFMAxsZ0qNjRC7hl9d17e7imbgDt6uJXhUobDg7v3RX/yRCKxgMhfyiKcZfbpk0wmCcdQlIAOHeakXLvCNt++WfKiozNqSZxxJotn+c0a7DdPsx7DPYgKIDxwwYUZDg9aJbxocTjcwovr9WAsVV32mQoiiIOCHc60Oltst9qCQYuCqN1yHo0Kj60OgI2OqmiuBUWrNA0NDhYCDcdpmMrs1fZZ0xdTzMr1HdPtIHstYhqaPDDA5YxUDx7J4fJiisBSDI/L6G/bn34GNy8Q2g044ZTulAdFLb0tI6NNxfj3DzLjWiNGxje1pz7aXOcNV68lDPEd2SXl6VfBuwmHzdf1gxFy1HvA7pD8I2BnnmyGw852Cg5XbgIdEEGE5UCzen5jTlG6JCU5iajlxVcsXvbcS0SAcg1dcesWJLVK8+hYHOYQ+Pjy+EyVGXP0aPTFagrV9E03hCQvYx+g47KGq+1GsLj8uBIyihNw33YUe8PNC4BOJ3Lm1AglLV3nCuvUdIP+v15tVGbWIwgxLVpPkfpthCGpTKG+oA/DQfsKKvxhScqaN6FuElAUtTKv2UYgOmQegsN/n7njHUju8wM4VTcm+Q8xfX9SFwjTzdVqu95UOWSIGOabH8OGBEba//8Yxl3GcPdP/dMBOoSX/0z5SZmBoLbaPs+9asaMpb36yknKaw6FqWZa6A5vDa02mhkOba1q6KtLV208xrkwmW5C4VD6n2fvRjADy2qDYYnNy+H10Fq0LMbNzS863gkO7iQ8eC48/Ny5m59tOcEso3u7Qg3yrqDL6eKXwJAuWnhylfbWrRObe66rzX59+XDtzusnL66dI/86ArmtLlzED860Ef3bFPV78OX/zFTA11fcBn2Vntb7qiGBSgLBHyuv/uEaqqoTgSpOyjlzh86me1Vriv7i9rLPLvtghWmSnblRbAsBJL/4dScSQTBxOivHMO5QvBBY0iheJvfwWLxLOGzYKZyM4zVc2Cll46zEpeUV4MqGEWZj22SdOxhGAjgs9AEnfT+RoiMfcDb0GS5NncKVxju4Nt/mRk13O9Gz3FLct5oCD6wkwUNrCfHIUg6SMf8LwQGyVaBUqpLPW5BaMpRshEpl8nS1qw5dgnzlik8QBXmdy5UrIH74heTKZKMSilQso4hsRiGraQZRzxpNGqlEJMsXuAU7GlcR8mWSykUpVkWGyIf0a8v4qEQp5CtGsMiZa+4ESYQy+WilCiguHzxMXO54ogShooTV2bj2z1zL6DYSoImoQ8lFUWxMLBNQQgLkV2tHYgUoIbkuREz+fJHKxxWBcnvu3KQppFCxLkguB1NyVSp/TknRvNwYlCdbblWu3ze6owHdWluhE5tgQ6ej2SV65CijijoaRfSiH4Nqz1OpfEW+WeI/oU0ly60zkV9YzOQSYtZVEGYmrysTZAJkY4qZtIBD9/LYTIK7Nww3vMiYBwA=)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-cyrillic-wght-normal-Dvxsihut.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-greek-wght-normal-DL7QRZyv.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-vietnamese-wght-normal-usUDDRr7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-latin-wght-normal-DHIcAJRg.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Noto Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/noto-sans-cyrillic-ext-wght-normal-DSNfmdVt.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Noto Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/noto-sans-cyrillic-wght-normal-B2hlT84T.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Noto Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/noto-sans-devanagari-wght-normal-Cv-Vwajv.woff2)format("woff2-variations");unicode-range:U+900-97F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09}@font-face{font-family:Noto Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/noto-sans-greek-ext-wght-normal-12T8GTDR.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Noto Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/noto-sans-greek-wght-normal-Ymb6dZNd.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Noto Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/noto-sans-vietnamese-wght-normal-DLTJy58D.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Noto Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/noto-sans-latin-ext-wght-normal-W1qJv59z.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Noto Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/noto-sans-latin-wght-normal-BYSzYMf3.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(/assets/nunito-cyrillic-ext-wght-normal-D4X5GqEv.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(/assets/nunito-cyrillic-wght-normal-CY6AOgYE.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(/assets/nunito-vietnamese-wght-normal-U01xdrZh.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(/assets/nunito-latin-ext-wght-normal-CXYtwYOx.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(/assets/nunito-latin-wght-normal-BzFMHfZw.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(60% .2 250);--chart-2:oklch(65% .18 145);--chart-3:oklch(72% .19 60);--chart-4:oklch(55% .22 300);--chart-5:oklch(58% .22 25);--chart-6:oklch(62% .2 190);--chart-7:oklch(68% .18 330);--chart-8:oklch(70% .17 85);--chart-9:oklch(56% .21 210);--chart-10:oklch(64% .19 10);--radius:.625rem;--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0)}[data-mode=dark]{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(65% .2 250);--chart-2:oklch(70% .18 145);--chart-3:oklch(75% .19 60);--chart-4:oklch(62% .22 300);--chart-5:oklch(65% .22 25);--chart-6:oklch(68% .2 190);--chart-7:oklch(72% .18 330);--chart-8:oklch(75% .17 85);--chart-9:oklch(62% .21 210);--chart-10:oklch(70% .19 10);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0)}@keyframes splash-bar{0%{transform:translate(-100%)}to{transform:translate(600%)}}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}} diff --git a/src/www/assets/input-CZHXycLK.js b/src/www/assets/input-CZHXycLK.js new file mode 100644 index 0000000..d77f6d1 --- /dev/null +++ b/src/www/assets/input-CZHXycLK.js @@ -0,0 +1 @@ +import{Qu as e}from"./messages-BOl-zx8S.js";import{i as t}from"./button-D-oR8d6w.js";var n=e();function r({className:e,type:r,...i}){return(0,n.jsx)(`input`,{className:t(`h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs outline-none transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30`,`focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50`,`aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40`,e),"data-slot":`input`,type:r,...i})}export{r as t}; \ No newline at end of file diff --git a/src/www/assets/install-iFxm6jjv.js b/src/www/assets/install-iFxm6jjv.js new file mode 100644 index 0000000..cf4be57 --- /dev/null +++ b/src/www/assets/install-iFxm6jjv.js @@ -0,0 +1 @@ +import{$u as e,Ac as t,Bc as n,Cc as r,Dc as i,Ec as a,Fc as o,Gc as s,Hc as c,Ic as l,Lc as u,Mc as d,Nc as f,Oc as p,Pc as ee,Qu as m,Rc as h,Sc as g,Tc as _,Uc as v,Vc as y,Wc as te,_c as b,bc as x,gc as ne,hc as re,jc as S,kc as ie,nd as C,vc as ae,wc as oe,xc as se,yc as w,zc as ce}from"./messages-BOl-zx8S.js";import{o as T}from"./auth-store-D_jr_Pei.js";import{t as le}from"./link-Du-u9SDI.js";import{i as E,r as ue,t as D}from"./button-D-oR8d6w.js";import{n as de,r as fe,t as pe}from"./popover-M5uqmgyK.js";import{t as me}from"./createLucideIcon-DMX28cCu.js";import{t as he}from"./check-DH6qIczM.js";import{t as ge}from"./chevron-down-uSXLUPEl.js";import{t as _e}from"./circle-check-nos3opMb.js";import{n as O,t as ve}from"./copy-to-clipboard-DeFustsS.js";import{t as k}from"./eye-off-BBTW1z_J.js";import{t as A}from"./eye-CJkHHosh.js";import{n as j,t as M}from"./theme-switch-BVGTp-bE.js";import{t as N}from"./loader-circle-DQHo9Sp_.js";import{t as P}from"./logo-BVdckS6R.js";import{a as F,i as ye,o as be,r as xe,s as Se,t as Ce}from"./command-yFHhtFiR.js";import{t as we}from"./shield-check-NJ5V92SM.js";import{n as I}from"./dist-BNiRpK39.js";import{c as L,n as R,s as Te}from"./zod-DzRgHmfz.js";import{a as z,c as Ee,i as B,l as De,n as V,o as H,s as U,t as Oe}from"./form-uKra2bmF.js";import{t as W}from"./input-CZHXycLK.js";import{t as G}from"./badge-D-FAREMY.js";import{a as ke,i as Ae,n as je,r as Me,t as Ne}from"./card-LDLQwVm3.js";var Pe=me(`lock-keyhole`,[[`circle`,{cx:`12`,cy:`16`,r:`1`,key:`1au0dj`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`,key:`6s8ecr`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`,key:`1pqi11`}]]),Fe=C(ve(),1),K=C(e(),1),q=m(),Ie=`ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%&`,J=14,Y=20,Le={slow:400,medium:200,fast:80},X=e=>e[Math.floor(Math.random()*e.length)],Z=()=>Ie[Math.floor(Math.random()*41)];function Re({glitchColors:e=[`#2b4539`,`#61dca3`,`#61b3dc`],glitchSpeed:t=`medium`,centerVignette:n=!1,outerVignette:r=!0,smooth:i=!0,className:a}){let o=(0,K.useRef)(null),s=(0,K.useRef)(0),c=(0,K.useRef)([]),l=(0,K.useRef)(0),u=(0,K.useRef)(0),d=(0,K.useCallback)((t,n)=>{c.current=Array.from({length:t*n},()=>({char:Z(),color:X(e),opacity:Math.random()*.5+.1}))},[e]),f=(0,K.useCallback)(()=>{let e=o.current;if(!e)return;let t=e.getContext(`2d`);if(!t)return;t.clearRect(0,0,e.width,e.height),t.font=`${J}px monospace`;let n=c.current,r=l.current,i=u.current;for(let e=0;e{let t=c.current,n=t.length,r=Math.floor(n*.05);for(let a=0;a{let e=o.current;if(!e)return;let n=()=>{let t=e.parentElement;t&&(e.width=t.clientWidth,e.height=t.clientHeight,l.current=Math.ceil(e.width/Y),u.current=Math.ceil(e.height/Y),d(l.current,u.current),f())},r=new ResizeObserver(n);e.parentElement&&r.observe(e.parentElement),n();let i=setInterval(p,Le[t]);return()=>{r.disconnect(),clearInterval(i),cancelAnimationFrame(s.current)}},[p,f,d,t]),(0,q.jsxs)(`div`,{className:`absolute inset-0 overflow-hidden ${a??``}`,children:[(0,q.jsx)(`canvas`,{className:`absolute inset-0`,ref:o}),r&&(0,q.jsx)(`div`,{className:`absolute inset-0`,style:{background:`radial-gradient(ellipse at center, transparent 50%, rgba(0,0,0,0.85) 100%)`}}),n&&(0,q.jsx)(`div`,{className:`absolute inset-0`,style:{background:`radial-gradient(ellipse at center, rgba(0,0,0,0.6) 0%, transparent 70%)`}})]})}var Q=ue(`relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current`,{variants:{variant:{default:`bg-card text-card-foreground`,destructive:`bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current`}},defaultVariants:{variant:`default`}});function ze({className:e,variant:t,...n}){return(0,q.jsx)(`div`,{className:E(Q({variant:t}),e),"data-slot":`alert`,role:`alert`,...n})}function Be({className:e,...t}){return(0,q.jsx)(`div`,{className:E(`col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight`,e),"data-slot":`alert-title`,...t})}function Ve({className:e,...t}){return(0,q.jsx)(`div`,{className:E(`col-start-2 grid justify-items-start gap-1 text-muted-foreground text-sm [&_p]:leading-relaxed`,e),"data-slot":`alert-description`,...t})}function He({value:e,onChange:t,options:n,placeholder:r=``,searchPlaceholder:i=`Search...`,emptyText:a=`No options found.`,className:o,disabled:s}){let[c,l]=(0,K.useState)(!1),u=n.map(e=>typeof e==`string`?{value:e,label:e}:e);return(0,q.jsxs)(pe,{onOpenChange:l,open:c,children:[(0,q.jsxs)(`div`,{className:E(`relative`,o),children:[(0,q.jsx)(W,{className:`pr-10`,disabled:s,onChange:e=>t(e.target.value),placeholder:r,value:e}),(0,q.jsx)(fe,{asChild:!0,children:(0,q.jsx)(D,{"aria-expanded":c,"aria-label":`Show options`,className:`absolute top-1/2 right-1 size-8 -translate-y-1/2`,disabled:s,size:`icon`,type:`button`,variant:`ghost`,children:(0,q.jsx)(ge,{className:`size-4`})})})]}),(0,q.jsx)(de,{align:`end`,className:`w-48 p-0`,children:(0,q.jsxs)(Ce,{children:[(0,q.jsx)(F,{placeholder:i}),(0,q.jsxs)(Se,{children:[(0,q.jsx)(xe,{children:a}),(0,q.jsx)(ye,{children:u.map(n=>(0,q.jsxs)(be,{onSelect:()=>{t(n.value),l(!1)},value:n.value,children:[(0,q.jsx)(he,{className:E(`size-4`,e===n.value?`opacity-100`:`opacity-0`)}),n.label??n.value]},n.value))})]})]})})]})}var Ue=[`0.0.0.0`,`127.0.0.1`,`localhost`];function We({form:e,loading:t,onSubmit:r,submitText:i}){return(0,q.jsx)(Oe,{...e,children:(0,q.jsxs)(`form`,{className:`grid gap-4`,onSubmit:e.handleSubmit(r),children:[(0,q.jsx)(B,{control:e.control,name:`app_name`,render:({field:e})=>(0,q.jsxs)(z,{children:[(0,q.jsx)(H,{children:v()}),(0,q.jsx)(V,{children:(0,q.jsx)(W,{placeholder:`epusdt`,...e})}),(0,q.jsx)(U,{})]})}),(0,q.jsx)(B,{control:e.control,name:`app_uri`,render:({field:e})=>(0,q.jsxs)(z,{children:[(0,q.jsxs)(H,{children:[c(),` *`]}),(0,q.jsx)(V,{children:(0,q.jsx)(W,{placeholder:`http://your-server-ip:8000`,...e})}),(0,q.jsx)(U,{})]})}),(0,q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,q.jsx)(B,{control:e.control,name:`http_bind_addr`,render:({field:e})=>(0,q.jsxs)(z,{children:[(0,q.jsx)(H,{children:y()}),(0,q.jsx)(V,{children:(0,q.jsx)(He,{onChange:e.onChange,options:Ue,placeholder:`0.0.0.0`,value:e.value??``})}),(0,q.jsx)(U,{})]})}),(0,q.jsx)(B,{control:e.control,name:`http_bind_port`,render:({field:e})=>(0,q.jsxs)(z,{children:[(0,q.jsx)(H,{children:n()}),(0,q.jsx)(V,{children:(0,q.jsx)(W,{placeholder:`8000`,type:`number`,...e,value:e.value??``})}),(0,q.jsx)(U,{})]})})]}),(0,q.jsx)(B,{control:e.control,name:`runtime_root_path`,render:({field:e})=>(0,q.jsxs)(z,{children:[(0,q.jsx)(H,{children:ce()}),(0,q.jsx)(V,{children:(0,q.jsx)(W,{placeholder:`./runtime`,...e})}),(0,q.jsx)(U,{})]})}),(0,q.jsx)(B,{control:e.control,name:`log_save_path`,render:({field:e})=>(0,q.jsxs)(z,{children:[(0,q.jsx)(H,{children:h()}),(0,q.jsx)(V,{children:(0,q.jsx)(W,{placeholder:`./logs`,...e})}),(0,q.jsx)(U,{})]})}),(0,q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,q.jsx)(B,{control:e.control,name:`order_expiration_time`,render:({field:e})=>(0,q.jsxs)(z,{children:[(0,q.jsx)(H,{children:u()}),(0,q.jsx)(V,{children:(0,q.jsx)(W,{placeholder:`10`,type:`number`,...e})}),(0,q.jsx)(U,{})]})}),(0,q.jsx)(B,{control:e.control,name:`order_notice_max_retry`,render:({field:e})=>(0,q.jsxs)(z,{children:[(0,q.jsx)(H,{children:l()}),(0,q.jsx)(V,{children:(0,q.jsx)(W,{placeholder:`1`,type:`number`,...e})}),(0,q.jsx)(U,{})]})})]}),(0,q.jsxs)(D,{className:`mt-2 w-full`,disabled:t,type:`submit`,children:[t?(0,q.jsx)(N,{className:`animate-spin`}):null,i]})]})})}function Ge({credentials:e,onCopy:t,onTogglePassword:n,showPassword:o}){return(0,q.jsxs)(`div`,{className:`grid gap-4`,children:[(0,q.jsxs)(`div`,{className:`grid gap-4 rounded-2xl border border-emerald-500/20 bg-emerald-500/5 p-4 shadow-sm`,children:[(0,q.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,q.jsx)(`div`,{className:`flex size-10 shrink-0 items-center justify-center rounded-xl bg-emerald-500/12 text-emerald-600 dark:text-emerald-400`,children:(0,q.jsx)(we,{className:`size-5`})}),(0,q.jsxs)(`div`,{className:`space-y-1`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(`h3`,{className:`font-semibold text-base text-foreground`,children:i()}),e?(0,q.jsx)(G,{className:`rounded-md`,variant:`secondary`,children:_()}):null]}),(0,q.jsx)(`p`,{className:`text-muted-foreground text-sm leading-6`,children:a()})]})]}),e?(0,q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,q.jsx)(`div`,{className:`rounded-xl border border-border/60 bg-background/85 p-4 shadow-sm`,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,q.jsx)(`p`,{className:`text-muted-foreground text-xs uppercase tracking-wide`,children:r()}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,q.jsx)(`p`,{className:`min-w-0 flex-1 truncate font-medium text-base text-foreground`,children:e.username}),(0,q.jsxs)(D,{"aria-label":b(),className:`scale-95 rounded-full`,onClick:()=>t(e.username),size:`icon`,type:`button`,variant:`ghost`,children:[(0,q.jsx)(O,{}),(0,q.jsx)(`span`,{className:`sr-only`,children:b()})]})]})]})}),(0,q.jsx)(`div`,{className:`rounded-xl border border-border/60 bg-background/85 p-4 shadow-sm`,children:(0,q.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-2`,children:[(0,q.jsx)(G,{className:`w-fit rounded-md border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900/60 dark:bg-amber-950/40 dark:text-amber-300`,variant:`outline`,children:se()}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,q.jsx)(`p`,{className:`text-muted-foreground text-xs uppercase tracking-wide`,children:g()}),(0,q.jsxs)(G,{className:`rounded-md`,variant:`outline`,children:[(0,q.jsx)(Pe,{className:`size-3.5`}),ae()]})]}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,q.jsx)(`p`,{className:`min-w-0 flex-1 break-all font-medium text-base text-foreground`,children:o?e.password:`•`.repeat(Math.max(e.password.length,10))}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,q.jsxs)(D,{"aria-label":o?w():x(),className:`scale-95 rounded-full`,onClick:n,size:`icon`,type:`button`,variant:`ghost`,children:[o?(0,q.jsx)(k,{}):(0,q.jsx)(A,{}),(0,q.jsx)(`span`,{className:`sr-only`,children:o?w():x()})]}),(0,q.jsxs)(D,{"aria-label":b(),className:`scale-95 rounded-full`,onClick:()=>t(e.password),size:`icon`,type:`button`,variant:`ghost`,children:[(0,q.jsx)(O,{}),(0,q.jsx)(`span`,{className:`sr-only`,children:b()})]})]})]})]})})]}):null]}),(0,q.jsx)(D,{asChild:!0,className:`w-full`,type:`button`,children:(0,q.jsx)(le,{to:`/sign-in`,children:oe()})})]})}var Ke=Te({app_name:L().min(1,`App Name is required`),app_uri:L().min(1,`App URI is required`).url(`Must be a valid URL (e.g. http://your-server-ip:8000)`),http_bind_addr:L().min(1,`Bind address is required`),http_bind_port:R({error:`Port must be a number`}).int().min(1,`Port must be ≥ 1`).max(65535,`Port must be ≤ 65535`),runtime_root_path:L().min(1,`Runtime root path is required`),log_save_path:L().min(1,`Log save path is required`),order_expiration_time:R({error:`Must be a number`}).int().min(1,`Must be ≥ 1 minute`),order_notice_max_retry:R({error:`Must be a number`}).int().min(0,`Must be ≥ 0`)}),$={app_name:`epusdt`,app_uri:``,http_bind_addr:`0.0.0.0`,http_bind_port:8e3,runtime_root_path:`./runtime`,log_save_path:`./logs`,order_expiration_time:10,order_notice_max_retry:1};function qe(){let[e,n]=(0,K.useState)(!1),[r,i]=(0,K.useState)(!1),[a,c]=(0,K.useState)(null),[l,u]=(0,K.useState)(null),[m,h]=(0,K.useState)(!1),g=De({resolver:Ee(Ke),defaultValues:$,mode:`onChange`});(0,K.useEffect)(()=>{let e=!0;async function t(){try{let{data:t}=await T.GET(`/api/install/defaults`);if(!(e&&t))return;let n=Object.fromEntries(Object.entries(t).filter(([,e])=>e!==``&&e!=null));g.reset({...$,...n})}catch{}}return t().catch(()=>void 0),()=>{e=!1}},[g]);function _(e){if(!(0,Fe.default)(e)){I.error(re());return}I.success(ne())}async function v(e){n(!0),c(null);try{let{data:t,error:n,response:r}=await T.POST(`/api/install`,{body:e});if(!r.ok||n){c({variant:`destructive`,message:n?.error||S()});return}let a=null;try{let e=await T.GET(`/admin/api/v1/auth/init-password`);a={username:e.data?.data?.username?.trim()||`admin`,password:e.data?.data?.password?.trim()||``}}catch{a=null}i(!0),u(a),c({variant:`default`,message:t?.message||d()})}catch{c({variant:`destructive`,message:S()})}finally{n(!1)}}let y=o();return e&&(y=ee()),r&&(y=f()),(0,q.jsxs)(`div`,{className:`relative flex min-h-svh items-center justify-center px-4 py-10`,children:[(0,q.jsx)(Re,{centerVignette:!1,glitchColors:[`#3f3f46`,`#71717a`,`#a1a1aa`],glitchSpeed:`fast`,outerVignette:!1,smooth:!0}),(0,q.jsxs)(Ne,{className:`max-w-2xl border border-border/40 bg-card/55 shadow-xl backdrop-blur-xl`,children:[(0,q.jsxs)(Ae,{className:`space-y-6 border-border/40 border-b pb-8`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,q.jsx)(P,{className:`size-10 shrink-0`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h1`,{className:`font-medium text-xl leading-tight`,children:`GMPay`}),(0,q.jsx)(`p`,{className:`mt-1 whitespace-nowrap text-muted-foreground text-xs`,children:p()})]})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(j,{}),(0,q.jsx)(M,{})]})]}),r?null:(0,q.jsxs)(`div`,{className:`space-y-3`,children:[(0,q.jsx)(ke,{className:`text-2xl tracking-tight`,children:s()}),(0,q.jsx)(Me,{className:`max-w-xl text-sm leading-6`,children:te()})]})]}),(0,q.jsx)(je,{children:(0,q.jsxs)(`div`,{className:`grid gap-4`,children:[a?(0,q.jsxs)(ze,{variant:a.variant,children:[a.variant===`default`?(0,q.jsx)(_e,{}):null,(0,q.jsx)(Be,{children:a.variant===`default`?t():ie()}),(0,q.jsx)(Ve,{children:a.message})]}):null,r?(0,q.jsx)(Ge,{credentials:l,onCopy:_,onTogglePassword:()=>h(e=>!e),showPassword:m}):(0,q.jsx)(We,{form:g,loading:e,onSubmit:v,submitText:y})]})})]})]})}var Je=qe;export{Je as component}; \ No newline at end of file diff --git a/src/www/assets/integrations-BQBy3gz7.js b/src/www/assets/integrations-BQBy3gz7.js new file mode 100644 index 0000000..f1e38c6 --- /dev/null +++ b/src/www/assets/integrations-BQBy3gz7.js @@ -0,0 +1 @@ +import{$u as e,Ca as t,Da as n,Ea as r,Oa as i,Qu as a,Sa as o,Ta as s,ka as c,nd as l,wa as u}from"./messages-BOl-zx8S.js";import{r as d}from"./route-C5Xnq6N2.js";import{f,n as p,p as m,r as h,v as g}from"./data-table-C3uNvchK.js";import{t as _}from"./badge-D-FAREMY.js";import{t as v}from"./use-table-url-state-BYcGNz1q.js";var y=l(e(),1),b=a(),x=[{name:`GMPay`,entries:[{method:`POST`,path:`/payments/gmpay/v1/order/create-transaction`}],requestFields:[`order_id`,`currency`,`token`,`network`,`amount`,`notify_url`,`signature`,`redirect_url?`,`name?`,`payment_type?`],callbackNote:t()},{name:`EPay Compatible`,entries:[{method:`POST`,path:`/payments/epay/v1/order/create-transaction/submit.php`},{method:`GET`,path:`/payments/epay/v1/order/create-transaction/submit.php`}],requestFields:[`pid`,`money`,`out_trade_no`,`notify_url`,`return_url?`,`name?`,`type?`,`sign`,`sign_type?`],callbackNote:o()}];function S({method:e}){return(0,b.jsx)(_,{className:e===`GET`?`rounded border border-blue-500/30 bg-blue-500/10 font-mono text-blue-600 dark:text-blue-400`:`rounded border border-emerald-500/30 bg-emerald-500/10 font-mono text-emerald-600 dark:text-emerald-400`,variant:`outline`,children:e})}function C({field:e}){return(0,b.jsx)(`code`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono text-foreground text-xs`,children:e})}function w({item:e}){let t=e.entries.reduce((e,t)=>(e[t.path]||(e[t.path]=[]),e[t.path].push(t.method),e),{});return(0,b.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:Object.entries(t).map(([e,t])=>(0,b.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,b.jsx)(`div`,{className:`flex gap-1.5`,children:t.map(e=>(0,b.jsx)(S,{method:e},e))}),(0,b.jsx)(`code`,{className:`whitespace-normal break-words font-mono text-sm`,children:e})]},e))})}function T({fields:e}){return(0,b.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>(0,b.jsx)(C,{field:e},e))})}var E=d(`/_authenticated/payment-setup/integrations`);function D(){let{pagination:e,onPaginationChange:t,ensurePageInRange:a}=v({search:E.useSearch(),navigate:E.useNavigate(),pagination:{defaultPage:1,defaultPageSize:10}}),o=f({data:x,columns:(0,y.useMemo)(()=>[{accessorKey:`name`,header:n(),cell:({row:e})=>(0,b.jsx)(`span`,{className:`font-medium`,children:e.original.name})},{accessorKey:`entries`,header:r(),cell:({row:e})=>(0,b.jsx)(w,{item:e.original})},{accessorKey:`requestFields`,header:s(),cell:({row:e})=>(0,b.jsx)(T,{fields:e.original.requestFields})},{accessorKey:`callbackNote`,header:u(),cell:({row:e})=>(0,b.jsx)(`span`,{className:`whitespace-normal break-words text-muted-foreground text-sm`,children:e.original.callbackNote})}],[]),state:{pagination:e},onPaginationChange:t,getCoreRowModel:m(),getPaginationRowModel:g()});return(0,y.useEffect)(()=>{a(o.getPageCount())},[o,a]),(0,b.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,b.jsxs)(`div`,{className:`space-y-1`,children:[(0,b.jsx)(`h3`,{className:`font-semibold text-lg`,children:c()}),(0,b.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:i()})]}),(0,b.jsx)(h,{table:o}),(0,b.jsx)(p,{className:`mt-auto`,table:o})]})}function O(){return(0,b.jsx)(D,{})}var k=O;export{k as component}; \ No newline at end of file diff --git a/src/www/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 b/src/www/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 new file mode 100644 index 0000000..de83a9c Binary files /dev/null and b/src/www/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 differ diff --git a/src/www/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 b/src/www/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 new file mode 100644 index 0000000..d750914 Binary files /dev/null and b/src/www/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 differ diff --git a/src/www/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 b/src/www/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 new file mode 100644 index 0000000..6e7141f Binary files /dev/null and b/src/www/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 differ diff --git a/src/www/assets/inter-greek-wght-normal-CkhJZR-_.woff2 b/src/www/assets/inter-greek-wght-normal-CkhJZR-_.woff2 new file mode 100644 index 0000000..024f077 Binary files /dev/null and b/src/www/assets/inter-greek-wght-normal-CkhJZR-_.woff2 differ diff --git a/src/www/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 b/src/www/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 new file mode 100644 index 0000000..479d010 Binary files /dev/null and b/src/www/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 differ diff --git a/src/www/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 b/src/www/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 new file mode 100644 index 0000000..d15208d Binary files /dev/null and b/src/www/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 differ diff --git a/src/www/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 b/src/www/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 new file mode 100644 index 0000000..a40c469 Binary files /dev/null and b/src/www/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 differ diff --git a/src/www/assets/keys-C8Pk4o9V.js b/src/www/assets/keys-C8Pk4o9V.js new file mode 100644 index 0000000..a5f3516 --- /dev/null +++ b/src/www/assets/keys-C8Pk4o9V.js @@ -0,0 +1,2 @@ +import{$n as e,$t as t,$u as n,An as r,Bn as i,Cn as a,Dn as o,En as s,Fn as c,Fu as l,Gn as u,Hi as d,Hn as f,In as p,Jn as m,Kn as h,Ln as g,Mn as _,Nn as ee,On as v,Pn as te,Pu as y,Qn as ne,Qu as b,Rn as re,Sn as ie,Tn as x,Un as ae,Vn as oe,Wn as se,Xn as ce,Yn as le,Zn as S,_n as C,ba as ue,bn as w,er as de,fn as T,gn as E,hn as D,jn as O,kn as k,mn as fe,nd as A,nr as pe,oi as j,pn as M,qn as me,qu as he,ru as ge,tr as _e,vn as N,wn as ve,xn as P,yn as F,zn as ye}from"./messages-BOl-zx8S.js";import{a as I}from"./auth-store-D_jr_Pei.js";import{t as be}from"./router-D0lu_-Oq.js";import{r as xe}from"./route-C5Xnq6N2.js";import{o as L,s as R,z}from"./search-provider-D-fTfilE.js";import{t as B}from"./button-D-oR8d6w.js";import{t as Se}from"./confirm-dialog-DyK21C4Z.js";import{t as V}from"./skeleton-gJOqI-7w.js";import{a as Ce,i as we,n as Te,r as H,t as Ee}from"./select-CvMpqpz9.js";import{t as De}from"./separator-Dw-mNGCy.js";import{t as Oe}from"./switch-m0XBbPWc.js";import{t as U}from"./createLucideIcon-DMX28cCu.js";import{n as ke,t as Ae}from"./copy-to-clipboard-DeFustsS.js";import{t as je}from"./eye-off-BBTW1z_J.js";import{t as Me}from"./eye-CJkHHosh.js";import{n as Ne,r as Pe,t as Fe}from"./empty-state-BelJgFUf.js";import{n as Ie,t as Le}from"./main-DvsnNI3V.js";import{n as Re,t as ze}from"./trash-2-CaT-Drvx.js";import{d as Be,l as Ve,m as He,p as Ue,u as We}from"./command-yFHhtFiR.js";import{t as Ge}from"./shield-check-NJ5V92SM.js";import{n as W}from"./dist-BNiRpK39.js";import{c as G,s as Ke}from"./zod-DzRgHmfz.js";import{a as K,c as qe,i as q,l as Je,n as J,o as Y,r as Ye,s as X,t as Xe}from"./form-uKra2bmF.js";import{t as Z}from"./input-CZHXycLK.js";import{t as Ze}from"./page-header-BRM1dngJ.js";import{t as Qe}from"./textarea-Cp-VCvek.js";import{t as $e}from"./badge-D-FAREMY.js";var et=U(`arrow-down-a-z`,[[`path`,{d:`m3 16 4 4 4-4`,key:`1co6wj`}],[`path`,{d:`M7 20V4`,key:`1yoxec`}],[`path`,{d:`M20 8h-5`,key:`1vsyxs`}],[`path`,{d:`M15 10V6.5a2.5 2.5 0 0 1 5 0V10`,key:`ag13bf`}],[`path`,{d:`M15 14h5l-5 6h5`,key:`ur5jdg`}]]),tt=U(`arrow-up-a-z`,[[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}],[`path`,{d:`M20 8h-5`,key:`1vsyxs`}],[`path`,{d:`M15 10V6.5a2.5 2.5 0 0 1 5 0V10`,key:`ag13bf`}],[`path`,{d:`M15 14h5l-5 6h5`,key:`ur5jdg`}]]),nt=U(`pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),rt=A(Ae(),1),Q=A(n(),1),$=b(),it=Ke({name:G().min(1,T()),notify_url:G().optional(),ip_whitelist:G().optional()});function at({open:e,onOpenChange:n,currentRow:i,onSuccess:o}){let s=Je({resolver:qe(it),defaultValues:{name:``,notify_url:``,ip_whitelist:``}}),c=I.useMutation(`post`,`/admin/api/v1/api-keys`),u=I.useMutation(`patch`,`/admin/api/v1/api-keys/{id}`),d=c.data?.data?.secret_key;(0,Q.useEffect)(()=>{e&&s.reset({name:i?.name??``,notify_url:i?.notify_url??``,ip_whitelist:i?.ip_whitelist??``})},[e,i,s]);function f(e){e||(s.reset({name:``,notify_url:``,ip_whitelist:``}),c.reset(),u.reset()),n(e)}function p(e){if(i?.id){u.mutate({params:{path:{id:i.id}},body:{name:e.name,notify_url:e.notify_url,ip_whitelist:e.ip_whitelist||void 0}},{onSuccess:()=>{W.success(fe()),n(!1),o?.()}});return}c.mutate({body:{name:e.name,notify_url:e.notify_url,ip_whitelist:e.ip_whitelist||void 0}},{onSuccess:()=>{W.success(M()),o?.()}})}function m(){f(!1)}let h=c.isPending||u.isPending;return(0,$.jsx)(Ve,{onOpenChange:f,open:e,children:(0,$.jsxs)(We,{children:[(0,$.jsxs)(Ue,{children:[(0,$.jsx)(He,{children:i?a():ie()}),(0,$.jsx)(Be,{children:i?P():w()})]}),(0,$.jsx)(Xe,{...s,children:(0,$.jsxs)(`form`,{className:`space-y-4`,onSubmit:s.handleSubmit(p),children:[(0,$.jsx)(q,{control:s.control,name:`name`,render:({field:e})=>(0,$.jsxs)(K,{children:[(0,$.jsx)(Y,{children:x()}),(0,$.jsx)(J,{children:(0,$.jsx)(Z,{placeholder:ve(),...e})}),(0,$.jsx)(X,{})]})}),(0,$.jsx)(q,{control:s.control,name:`notify_url`,render:({field:e})=>(0,$.jsxs)(K,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,$.jsx)(Y,{children:r()}),(0,$.jsx)($e,{variant:`secondary`,children:l()})]}),(0,$.jsx)(J,{children:(0,$.jsx)(Z,{disabled:!0,placeholder:`https://example.com/callback`,...e})}),(0,$.jsx)(Ye,{children:y()}),(0,$.jsx)(X,{})]})}),(0,$.jsx)(q,{control:s.control,name:`ip_whitelist`,render:({field:e})=>(0,$.jsxs)(K,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,$.jsx)(Y,{children:F()}),(0,$.jsx)($e,{variant:`secondary`,children:l()})]}),(0,$.jsx)(J,{children:(0,$.jsx)(Qe,{disabled:!0,placeholder:`127.0.0.1 +10.0.0.2`,...e})}),(0,$.jsx)(Ye,{children:y()}),(0,$.jsx)(X,{})]})}),!i&&d?(0,$.jsxs)(`div`,{className:`rounded-lg border bg-muted/40 p-3 text-sm`,children:[(0,$.jsx)(`div`,{className:`mb-1 font-medium text-amber-600`,children:N()}),(0,$.jsx)(`div`,{className:`break-all font-mono text-muted-foreground`,children:d})]}):null,(0,$.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,$.jsx)(B,{onClick:m,type:`button`,variant:`outline`,children:!i&&d?C():he()}),(!d||i)&&(0,$.jsxs)(B,{disabled:h,type:`submit`,children:[h&&t(),!h&&i&&E(),!(h||i)&&D()]})]})]})})]})})}function ot({data:e,isLoading:t,onAction:n,onCopySecret:i,onToggleSecret:a,secretStates:l}){let[u,f]=(0,Q.useState)(new Set);function p(e){try{return`${new URL(e).protocol}//••••••••`}catch{return`••••••••••••••••`}}function m(e){return e?.visible?e.loading?O():e.value||`-`:`••••••••••••••••`}function h(e,t){return e?t?e:p(e):`-`}return t?(0,$.jsx)(`ul`,{className:`faded-bottom no-scrollbar grid gap-4 overflow-auto pt-4 pb-16 md:grid-cols-2 lg:grid-cols-3`,children:[`api-key-skeleton-1`,`api-key-skeleton-2`,`api-key-skeleton-3`,`api-key-skeleton-4`,`api-key-skeleton-5`,`api-key-skeleton-6`].map(e=>(0,$.jsx)(`li`,{"aria-hidden":`true`,className:`rounded-lg border`,children:(0,$.jsxs)(`div`,{className:`flex h-full flex-col overflow-hidden p-4`,children:[(0,$.jsxs)(`div`,{className:`mb-6 flex items-center justify-between gap-3`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[(0,$.jsx)(V,{className:`h-5 w-32 max-w-full`}),(0,$.jsx)(V,{className:`h-3 w-20`})]}),(0,$.jsx)(V,{className:`h-6 w-11 rounded-full`})]}),(0,$.jsxs)(`div`,{className:`mb-6 flex-1 space-y-3`,children:[(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(V,{className:`mt-1 h-3 w-12 shrink-0`}),(0,$.jsx)(V,{className:`h-4 w-28 min-w-0 flex-1`})]}),(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(V,{className:`mt-1 h-3 w-12 shrink-0`}),(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-2`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[(0,$.jsx)(V,{className:`h-4 w-full`}),(0,$.jsx)(V,{className:`h-4 w-9/12`})]}),(0,$.jsx)(V,{className:`size-8 shrink-0 rounded-md`}),(0,$.jsx)(V,{className:`size-8 shrink-0 rounded-md`})]})]}),[`w-28`,`w-full`,`w-11/12`,`w-24`,`w-32`].map(e=>(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(V,{className:`mt-1 h-3 w-12 shrink-0`}),(0,$.jsx)(V,{className:`h-4 min-w-0 flex-1 ${e}`})]},e))]}),(0,$.jsx)(`div`,{className:`-mx-4 mt-auto -mb-4 border-t`,children:(0,$.jsx)(`div`,{className:`grid grid-cols-3`,children:[`api-key-action-skeleton-1`,`api-key-action-skeleton-2`,`api-key-action-skeleton-3`].map((e,t)=>(0,$.jsx)(`div`,{className:`flex h-11 items-center justify-center px-4 ${t<2?`border-r`:``}`,children:(0,$.jsx)(V,{className:`h-4 w-16`})},e))})})]})},e))}):e.length?(0,$.jsx)(`ul`,{className:`faded-bottom no-scrollbar grid gap-4 overflow-auto pt-4 pb-16 md:grid-cols-2 lg:grid-cols-3`,children:e.map(e=>{let t=e.status===1,p=String(e.id??e.pid??``),g=l[p],_=u.has(p),y=[{label:`PID`,value:e.pid??`-`},{label:v(),value:m(g),visible:g?.visible,onToggle:()=>a(e),onCopy:()=>i(e)},{label:r(),value:h(e.notify_url,_),visible:_,onToggle:e.notify_url?()=>f(e=>{let t=new Set(e);return t.has(p)?t.delete(p):t.add(p),t}):void 0},{label:k(),value:e.ip_whitelist||`-`},{label:c(),value:R(e.call_count??0,0)},{label:te(),value:L(e.last_used_at)||ee()},{label:d(),value:L(e.updated_at)||`-`}];return(0,$.jsx)(`li`,{className:`rounded-lg border hover:shadow-md`,children:(0,$.jsxs)(`div`,{className:`flex h-full flex-col overflow-hidden p-4`,children:[(0,$.jsxs)(`div`,{className:`mb-6 flex items-center justify-between`,children:[(0,$.jsx)(`div`,{className:`min-w-0`,children:(0,$.jsx)(`h2`,{className:`truncate font-semibold`,children:e.name||e.pid||`#${e.id}`})}),(0,$.jsx)(Oe,{checked:t,onCheckedChange:()=>n(t?`disable`:`enable`,e)})]}),(0,$.jsxs)(`div`,{className:`mb-6 flex-1 space-y-2 text-muted-foreground text-sm`,children:[(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(`span`,{className:`w-16 shrink-0 text-foreground/80`,children:`PID`}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 break-all`,children:e.pid??`-`})]}),y.filter(e=>e.label!==`PID`).map(e=>(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(`span`,{className:`w-16 shrink-0 text-foreground/80`,children:e.label}),(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-2`,children:[(0,$.jsx)(`span`,{className:`min-w-0 flex-1 break-all`,children:e.value}),e.onCopy&&(0,$.jsx)(B,{className:`size-8 shrink-0`,onClick:e.onCopy,size:`icon-sm`,variant:`ghost`,children:(0,$.jsx)(ke,{className:`h-4.5 w-4.5`})}),e.onToggle&&(0,$.jsx)(B,{className:`size-8 shrink-0`,onClick:e.onToggle,size:`icon-sm`,variant:`ghost`,children:e.visible?(0,$.jsx)(je,{className:`h-4.5 w-4.5`}):(0,$.jsx)(Me,{className:`h-4.5 w-4.5`})})]})]},e.label))]}),(0,$.jsx)(`div`,{className:`-mx-4 mt-auto -mb-4 border-t`,children:(0,$.jsxs)(`div`,{className:`grid grid-cols-3`,children:[(0,$.jsxs)(B,{className:`h-11 w-full rounded-none border-r px-0 text-muted-foreground hover:bg-muted/60 hover:text-foreground`,onClick:()=>n(`edit`,e),size:`sm`,variant:`ghost`,children:[(0,$.jsx)(nt,{className:`h-4 w-4`}),o()]}),(0,$.jsxs)(B,{className:`h-11 w-full rounded-none border-r px-0 text-muted-foreground hover:bg-muted/60 hover:text-foreground`,onClick:()=>n(`rotate-secret`,e),size:`sm`,variant:`ghost`,children:[(0,$.jsx)(z,{className:`h-4 w-4`}),s()]}),(0,$.jsxs)(B,{className:`h-11 w-full rounded-none px-0 text-destructive hover:bg-destructive/8 hover:text-destructive`,onClick:()=>n(`delete`,e),size:`sm`,variant:`ghost`,children:[(0,$.jsx)(ze,{className:`h-4 w-4 text-destructive`}),j()]})]})})]})},e.id??e.pid)})}):(0,$.jsx)(`div`,{className:`pt-4`,children:(0,$.jsx)(Fe,{description:_()})})}var st=xe(`/_authenticated/keys/`),ct=new Map([[`all`,pe()],[`enabled`,_e()],[`disabled`,de()]]);function lt(){let{filter:t=``,type:n=`all`,sort:r=`asc`}=st.useSearch(),a=st.useNavigate(),o=I.useQuery(`get`,`/admin/api/v1/api-keys`),s=I.useMutation(`delete`,`/admin/api/v1/api-keys/{id}`),l=I.useMutation(`post`,`/admin/api/v1/api-keys/{id}/status`),d=I.useMutation(`get`,`/admin/api/v1/api-keys/{id}/secret`),_=I.useMutation(`post`,`/admin/api/v1/api-keys/{id}/rotate-secret`),v=I.useMutation(`get`,`/admin/api/v1/api-keys/{id}/stats`),[y,b]=(0,Q.useState)(!1),[ie,x]=(0,Q.useState)(null),[C,w]=(0,Q.useState)(null),[T,E]=(0,Q.useState)(null),[D,O]=(0,Q.useState)({}),[k,fe]=(0,Q.useState)(r),[A,j]=(0,Q.useState)(n),[M,he]=(0,Q.useState)(t);async function N(){await be.invalidateQueries({queryKey:[`get`,`/admin/api/v1/api-keys`]})}async function ve(){if(!C?.row.id)return;let t=C.row.id;C.action===`delete`?(await s.mutateAsync({params:{path:{id:t}}}),W.success(e())):(C.action===`enable`||C.action===`disable`)&&(await l.mutateAsync({params:{path:{id:t}},body:{status:C.action===`enable`?1:2}}),W.success(ue())),await N(),w(null)}function P(e){return String(e.id??e.pid??``)}async function F(e,t){let n=P(e),r=t?.visible??D[n]?.visible??!1;O(e=>({...e,[n]:{loading:!0,value:e[n]?.value??``,visible:r}}));try{let t=await d.mutateAsync({params:{path:{id:e.id}}}),i=typeof t.data==`object`&&t.data&&`secret_key`in t.data?String(t.data.secret_key??``):``;return O(e=>({...e,[n]:{loading:!1,value:i||`-`,visible:r}})),i||`-`}catch{return O(e=>({...e,[n]:{loading:!1,value:e[n]?.value??``,visible:r}})),W.error(ne()),null}}async function xe(e){if(!e.id){W.error(S());return}let t=P(e),n=D[t];if(n?.visible){O(e=>({...e,[t]:{...n,visible:!1}}));return}if(n?.value){O(e=>({...e,[t]:{...n,visible:!0}}));return}await F(e,{visible:!0})}async function L(e){if(!e.id){W.error(S());return}let t=P(e),n=D[t]?.value??``;if(n||=await F(e,{visible:D[t]?.visible??!1})??``,!n||n===`-`){W.error(ce());return}(0,rt.default)(n),W.success(le())}async function z(e){let t=await _.mutateAsync({params:{path:{id:e.id}}}),n=P(e);O(e=>({...e,[n]:{loading:!1,value:t.data?.secret_key??`-`,visible:!0}})),W.success(m()),await N()}async function V(e){let t=await v.mutateAsync({params:{path:{id:e.id}}});E({apiKey:e.pid??`#${e.id}`,stats:t.data??{}})}async function Oe(e,t){if(!t.id){W.error(S());return}if(e===`edit`){x(t),b(!0);return}if(e===`delete`){w({action:e,row:t});return}switch(e){case`enable`:case`disable`:await l.mutateAsync({params:{path:{id:t.id}},body:{status:e===`enable`?1:2}}),W.success(ue()),await N();break;case`rotate-secret`:await z(t);break;case`view-stats`:await V(t);break;default:break}}let U=[...o.data?.data??[]].sort((e,t)=>{let n=(e.name??e.pid??`#${e.id??``}`).toLowerCase(),r=(t.name??t.pid??`#${t.id??``}`).toLowerCase();return k===`asc`?n.localeCompare(r):r.localeCompare(n)}).filter(e=>A===`enabled`?e.status===1:A===`disabled`?e.status!==1:!0).filter(e=>{let t=M.trim().toLowerCase();return t?(e.pid??``).toLowerCase().includes(t)||(e.name??``).toLowerCase().includes(t)||(e.notify_url??``).toLowerCase().includes(t):!0});return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ie,{}),(0,$.jsxs)(Le,{fixed:!0,children:[(0,$.jsx)(Ze,{actions:(0,$.jsxs)(B,{onClick:()=>{x(null),b(!0)},children:[(0,$.jsx)(Re,{className:`mr-2 h-4 w-4`}),me()]}),description:h(),title:u()}),(0,$.jsxs)(`div`,{className:`my-4 flex items-end justify-between sm:my-0 sm:items-center`,children:[(0,$.jsxs)(`div`,{className:`flex flex-col gap-4 sm:my-4 sm:flex-row`,children:[(0,$.jsx)(Z,{className:`h-9 w-40 lg:w-62.5`,onChange:e=>{he(e.target.value),a({search:t=>({...t,filter:e.target.value||void 0})})},placeholder:se(),value:M}),(0,$.jsxs)(Ee,{onValueChange:e=>{j(e),a({search:t=>({...t,type:e===`all`?void 0:e})})},value:A,children:[(0,$.jsx)(we,{className:`w-36`,children:(0,$.jsx)(Ce,{children:ct.get(A)})}),(0,$.jsxs)(Te,{children:[(0,$.jsx)(H,{value:`all`,children:pe()}),(0,$.jsx)(H,{value:`enabled`,children:_e()}),(0,$.jsx)(H,{value:`disabled`,children:de()})]})]})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsxs)(B,{onClick:N,variant:`outline`,children:[(0,$.jsx)(Pe,{className:`mr-2 h-4 w-4`}),ge()]}),(0,$.jsxs)(Ee,{onValueChange:e=>{fe(e),a({search:t=>({...t,sort:e})})},value:k,children:[(0,$.jsx)(we,{className:`w-16`,children:(0,$.jsx)(Ce,{children:(0,$.jsx)(Ne,{size:18})})}),(0,$.jsxs)(Te,{align:`end`,children:[(0,$.jsx)(H,{value:`asc`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,$.jsx)(tt,{size:16}),(0,$.jsx)(`span`,{children:ae()})]})}),(0,$.jsx)(H,{value:`desc`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,$.jsx)(et,{size:16}),(0,$.jsx)(`span`,{children:f()})]})})]})]})]})]}),(0,$.jsx)(De,{className:`shadow-sm`}),(0,$.jsx)(ot,{data:U,isLoading:o.isLoading,onAction:Oe,onCopySecret:L,onToggleSecret:xe,secretStates:D})]}),(0,$.jsx)(at,{currentRow:ie,onOpenChange:e=>{b(e),e||x(null)},onSuccess:()=>o.refetch(),open:y}),C&&(0,$.jsx)(Se,{confirmText:C.action===`delete`?oe():i(),desc:(0,$.jsx)(`span`,{children:ye({target:String(C.row.pid??C.row.id??``),action:C.action})}),destructive:C.action===`delete`,handleConfirm:ve,onOpenChange:()=>w(null),open:!0,title:C.action===`delete`?re():g()}),(0,$.jsx)(Ve,{onOpenChange:()=>E(null),open:!!T,children:(0,$.jsxs)(We,{children:[(0,$.jsxs)(Ue,{children:[(0,$.jsxs)(He,{className:`flex items-center gap-2`,children:[(0,$.jsx)(Ge,{className:`h-4 w-4`}),p()]}),(0,$.jsx)(Be,{children:T?.apiKey})]}),(0,$.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,$.jsxs)(`div`,{className:`rounded-lg border p-4`,children:[(0,$.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-muted-foreground text-sm`,children:[(0,$.jsx)(Me,{className:`h-4 w-4`}),` `,c()]}),(0,$.jsx)(`div`,{className:`font-semibold text-2xl`,children:R(T?.stats.call_count??0,0)})]}),(0,$.jsxs)(`div`,{className:`rounded-lg border p-4`,children:[(0,$.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-muted-foreground text-sm`,children:[(0,$.jsx)(Pe,{className:`h-4 w-4`}),` `,te()]}),(0,$.jsx)(`div`,{className:`font-medium text-sm`,children:T?.stats.last_used_at??ee()})]})]})]})})]})}var ut=lt;export{ut as component}; \ No newline at end of file diff --git a/src/www/assets/label-B2Q8_O-h.js b/src/www/assets/label-B2Q8_O-h.js new file mode 100644 index 0000000..caaec52 --- /dev/null +++ b/src/www/assets/label-B2Q8_O-h.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{i}from"./button-D-oR8d6w.js";var a=n(e(),1),o=t(),s=`Label`,c=a.forwardRef((e,t)=>(0,o.jsx)(r.label,{...e,ref:t,onMouseDown:t=>{t.target.closest(`button, input, select, textarea`)||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));c.displayName=s;var l=c;function u({className:e,...t}){return(0,o.jsx)(l,{className:i(`flex select-none items-center gap-2 font-medium text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50`,e),"data-slot":`label`,...t})}export{u as t}; \ No newline at end of file diff --git a/src/www/assets/lib-_PocwKaj.js b/src/www/assets/lib-_PocwKaj.js new file mode 100644 index 0000000..a16154f --- /dev/null +++ b/src/www/assets/lib-_PocwKaj.js @@ -0,0 +1 @@ +import{E as e}from"./messages-BOl-zx8S.js";import{a as t}from"./auth-store-D_jr_Pei.js";import{n}from"./dist-BNiRpK39.js";function r(e){return t.useQuery(`get`,`/admin/api/v1/settings`,e?{params:{query:{group:e}}}:void 0)}function i(){return t.useMutation(`put`,`/admin/api/v1/settings`)}function a(){return t.useMutation(`delete`,`/admin/api/v1/settings/{key}`)}function o(e,t,n=``){return e?.find(e=>e.key===t)?.value??n}async function s(t,r,i=e()){await t({body:{items:r}}),n.success(i)}export{i as a,r as i,s as n,a as r,o as t}; \ No newline at end of file diff --git a/src/www/assets/link-Du-u9SDI.js b/src/www/assets/link-Du-u9SDI.js new file mode 100644 index 0000000..9ff636a --- /dev/null +++ b/src/www/assets/link-Du-u9SDI.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{a as r,i,t as a}from"./useRouter-DS97kuA5.js";import{l as o,s as ee,t as te,u as s}from"./useStore-pgHsvR0E.js";import{a as ne,c,n as re}from"./ClientOnly-COESZSX_.js";import{r as l}from"./dist-DJhZSa1-.js";var ie=`Error preloading route! ☝️`,u=n(e(),1);t();var ae=n(l(),1);function d(e,t){let n=a(),l=i(t),{activeProps:d,inactiveProps:g,activeOptions:_,to:v,preload:pe,preloadDelay:me,preloadIntentProximity:he,hashScrollIntoView:ge,replace:y,startTransition:_e,resetScroll:b,viewTransition:ve,children:x,target:S,disabled:C,style:w,className:T,onClick:E,onBlur:D,onFocus:O,onMouseEnter:k,onMouseLeave:A,onTouchStart:j,ignoreBlocker:M,params:ye,search:be,hash:xe,state:Se,mask:Ce,reloadDocument:we,unsafeRelative:Te,from:Ee,_fromLocation:De,...N}=e,P=re(),F=u.useMemo(()=>e,[n,e.from,e._fromLocation,e.hash,e.to,e.search,e.params,e.state,e.mask,e.unsafeRelative]),I=te(n.stores.location,e=>e,(e,t)=>e.href===t.href),L=u.useMemo(()=>{let e={_fromLocation:I,...F};return n.buildLocation(e)},[n,I,F]),R=L.maskedLocation?L.maskedLocation.publicHref:L.publicHref,z=L.maskedLocation?L.maskedLocation.external:L.external,B=u.useMemo(()=>ue(R,z,n.history,C),[C,z,R,n.history]),V=u.useMemo(()=>{if(B?.external)return s(B.href,n.protocolAllowlist)?void 0:B.href;if(!de(v)&&!(typeof v!=`string`||v.indexOf(`:`)===-1))try{return new URL(v),s(v,n.protocolAllowlist)?void 0:v}catch{}},[v,B,n.protocolAllowlist]),H=u.useMemo(()=>{if(V)return!1;if(_?.exact){if(!ne(I.pathname,L.pathname,n.basepath))return!1}else{let e=c(I.pathname,n.basepath),t=c(L.pathname,n.basepath);if(!(e.startsWith(t)&&(e.length===t.length||e[t.length]===`/`)))return!1}return(_?.includeSearch??!0)&&!ee(I.search,L.search,{partial:!_?.exact,ignoreUndefined:!_?.explicitUndefined})?!1:_?.includeHash?P&&I.hash===L.hash:!0},[_?.exact,_?.explicitUndefined,_?.includeHash,_?.includeSearch,I,V,P,L.hash,L.pathname,L.search,n.basepath]),U=H?o(d,{})??oe:f,W=H?f:o(g,{})??f,G=[T,U.className,W.className].filter(Boolean).join(` `),K=(w||U.style||W.style)&&{...w,...U.style,...W.style},[Oe,q]=u.useState(!1),J=u.useRef(!1),Y=e.reloadDocument||V?!1:pe??n.options.defaultPreload,X=me??n.options.defaultPreloadDelay??0,Z=u.useCallback(()=>{n.preloadRoute({...F,_builtLocation:L}).catch(e=>{console.warn(e),console.warn(ie)})},[n,F,L]);r(l,u.useCallback(e=>{e?.isIntersecting&&Z()},[Z]),m,{disabled:!!C||Y!==`viewport`}),u.useEffect(()=>{J.current||!C&&Y===`render`&&(Z(),J.current=!0)},[C,Z,Y]);let ke=e=>{let t=e.currentTarget.getAttribute(`target`),r=S===void 0?t:S;if(!C&&!fe(e)&&!e.defaultPrevented&&(!r||r===`_self`)&&e.button===0){e.preventDefault(),(0,ae.flushSync)(()=>{q(!0)});let t=n.subscribe(`onResolved`,()=>{t(),q(!1)});n.navigate({...F,replace:y,resetScroll:b,hashScrollIntoView:ge,startTransition:_e,viewTransition:ve,ignoreBlocker:M})}};if(V)return{...N,ref:l,href:V,...x&&{children:x},...S&&{target:S},...C&&{disabled:C},...w&&{style:w},...T&&{className:T},...E&&{onClick:E},...D&&{onBlur:D},...O&&{onFocus:O},...k&&{onMouseEnter:k},...A&&{onMouseLeave:A},...j&&{onTouchStart:j}};let Q=e=>{if(C||Y!==`intent`)return;if(!X){Z();return}let t=e.currentTarget;if(p.has(t))return;let n=setTimeout(()=>{p.delete(t),Z()},X);p.set(t,n)},Ae=e=>{C||Y!==`intent`||Z()},$=e=>{if(C||!Y||!X)return;let t=e.currentTarget,n=p.get(t);n&&(clearTimeout(n),p.delete(t))};return{...N,...U,...W,href:B?.href,ref:l,onClick:h([E,ke]),onBlur:h([D,$]),onFocus:h([O,Q]),onMouseEnter:h([k,Q]),onMouseLeave:h([A,$]),onTouchStart:h([j,Ae]),disabled:!!C,target:S,...K&&{style:K},...G&&{className:G},...C&&se,...H&&ce,...P&&Oe&&le}}var f={},oe={className:`active`},se={role:`link`,"aria-disabled":!0},ce={"data-status":`active`,"aria-current":`page`},le={"data-transitioning":`transitioning`},p=new WeakMap,m={rootMargin:`100px`},h=e=>t=>{for(let n of e)if(n){if(t.defaultPrevented)return;n(t)}};function ue(e,t,n,r){if(!r)return t?{href:e,external:!0}:{href:n.createHref(e)||`/`,external:!1}}function de(e){if(typeof e!=`string`)return!1;let t=e.charCodeAt(0);return t===47?e.charCodeAt(1)!==47:t===46}var g=u.forwardRef((e,t)=>{let{_asChild:n,...r}=e,{type:i,...a}=d(r,t),o=typeof r.children==`function`?r.children({isActive:a[`data-status`]===`active`}):r.children;if(!n){let{disabled:e,...t}=a;return u.createElement(`a`,t,o)}return u.createElement(n,a,o)});function fe(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}export{g as t}; \ No newline at end of file diff --git a/src/www/assets/loader-circle-DQHo9Sp_.js b/src/www/assets/loader-circle-DQHo9Sp_.js new file mode 100644 index 0000000..53233fa --- /dev/null +++ b/src/www/assets/loader-circle-DQHo9Sp_.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/logo-BVdckS6R.js b/src/www/assets/logo-BVdckS6R.js new file mode 100644 index 0000000..8b39f5d --- /dev/null +++ b/src/www/assets/logo-BVdckS6R.js @@ -0,0 +1 @@ +import{Qu as e}from"./messages-BOl-zx8S.js";import{i as t}from"./button-D-oR8d6w.js";import{t as n}from"./createLucideIcon-DMX28cCu.js";var r=n(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),i=n(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),a=e();function o({className:e,...n}){return(0,a.jsx)(`img`,{alt:`GMPay`,className:t(`size-6`,e),height:24,src:`/images/logo.png`,width:24,...n})}export{i as n,r,o as t}; \ No newline at end of file diff --git a/src/www/assets/long-text-XqSY0a1g.js b/src/www/assets/long-text-XqSY0a1g.js new file mode 100644 index 0000000..6ae0891 --- /dev/null +++ b/src/www/assets/long-text-XqSY0a1g.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{i as r}from"./button-D-oR8d6w.js";import{i,n as a,r as o,t as s}from"./tooltip-m5xmPGQe.js";import{n as c,r as l,t as u}from"./popover-M5uqmgyK.js";var d=n(e(),1),f=t();function p({children:e,className:t=``,contentClassName:n=``}){let p=(0,d.useRef)(null),[h,g]=(0,d.useState)(!1),_=e=>{p.current=e,e&&m(e)&&queueMicrotask(()=>g(!0))};return h?(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(`div`,{className:`hidden sm:block`,children:(0,f.jsx)(o,{delayDuration:0,children:(0,f.jsxs)(s,{children:[(0,f.jsx)(i,{asChild:!0,children:(0,f.jsx)(`div`,{className:r(`truncate`,t),ref:_,children:e})}),(0,f.jsx)(a,{children:(0,f.jsx)(`p`,{className:n,children:e})})]})})}),(0,f.jsx)(`div`,{className:`sm:hidden`,children:(0,f.jsxs)(u,{children:[(0,f.jsx)(l,{asChild:!0,children:(0,f.jsx)(`div`,{className:r(`truncate`,t),ref:_,children:e})}),(0,f.jsx)(c,{className:r(`w-fit`,n),children:(0,f.jsx)(`p`,{children:e})})]})})]}):(0,f.jsx)(`div`,{className:r(`truncate`,t),ref:_,children:e})}var m=e=>e?e.offsetHeight(0,h.jsx)(i,{asChild:!0,children:(0,h.jsx)(t,{className:r?``:`text-muted-foreground`,disabled:a,to:n,children:e})},`${e}-${n}`))})]})}),(0,h.jsx)(`nav`,{className:n(`hidden items-center space-x-4 lg:flex lg:space-x-4 xl:space-x-6`,e),...l,children:c.map(({title:e,href:n,isActive:r,disabled:i})=>(0,h.jsx)(t,{className:`font-medium text-sm transition-colors hover:text-primary ${r?``:`text-muted-foreground`}`,disabled:i,to:n,children:e},`${e}-${n}`))})]})}function _({fixed:e,topNav:t}){return(0,h.jsxs)(p,{fixed:e,children:[t?(0,h.jsx)(g,{links:t}):(0,h.jsx)(d,{}),(0,h.jsxs)(`div`,{className:`ms-auto flex items-center space-x-4`,children:[t&&(0,h.jsx)(d,{}),(0,h.jsx)(l,{}),(0,h.jsx)(u,{}),(0,h.jsx)(f,{})]})]})}function v({fixed:e,className:t,fluid:r,...i}){return(0,h.jsx)(`main`,{className:n(`px-4 py-6`,e&&`flex grow flex-col overflow-hidden`,!r&&`@7xl/content:mx-auto @7xl/content:w-full @7xl/content:max-w-7xl`,t),"data-layout":e?`fixed`:`auto`,...i})}export{_ as n,v as t}; \ No newline at end of file diff --git a/src/www/assets/maintenance-error-yQ4OJvXf.js b/src/www/assets/maintenance-error-yQ4OJvXf.js new file mode 100644 index 0000000..4e5d343 --- /dev/null +++ b/src/www/assets/maintenance-error-yQ4OJvXf.js @@ -0,0 +1 @@ +import{Iu as e,Qu as t,S as n,b as r,x as i}from"./messages-BOl-zx8S.js";import{t as a}from"./button-D-oR8d6w.js";var o=t();function s(){return(0,o.jsx)(`div`,{className:`h-svh`,children:(0,o.jsxs)(`div`,{className:`m-auto flex h-full w-full flex-col items-center justify-center gap-2`,children:[(0,o.jsx)(`h1`,{className:`font-bold text-[7rem] leading-tight`,children:`503`}),(0,o.jsx)(`span`,{className:`font-medium`,children:n()}),(0,o.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[i(),` `,(0,o.jsx)(`br`,{}),r()]}),(0,o.jsx)(`div`,{className:`mt-6 flex gap-4`,children:(0,o.jsx)(a,{variant:`outline`,children:e()})})]})})}export{s as t}; \ No newline at end of file diff --git a/src/www/assets/manrope-cyrillic-wght-normal-Dvxsihut.woff2 b/src/www/assets/manrope-cyrillic-wght-normal-Dvxsihut.woff2 new file mode 100644 index 0000000..3a06229 Binary files /dev/null and b/src/www/assets/manrope-cyrillic-wght-normal-Dvxsihut.woff2 differ diff --git a/src/www/assets/manrope-greek-wght-normal-DL7QRZyv.woff2 b/src/www/assets/manrope-greek-wght-normal-DL7QRZyv.woff2 new file mode 100644 index 0000000..e74e718 Binary files /dev/null and b/src/www/assets/manrope-greek-wght-normal-DL7QRZyv.woff2 differ diff --git a/src/www/assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2 b/src/www/assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2 new file mode 100644 index 0000000..bd24140 Binary files /dev/null and b/src/www/assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2 differ diff --git a/src/www/assets/manrope-latin-wght-normal-DHIcAJRg.woff2 b/src/www/assets/manrope-latin-wght-normal-DHIcAJRg.woff2 new file mode 100644 index 0000000..71eb731 Binary files /dev/null and b/src/www/assets/manrope-latin-wght-normal-DHIcAJRg.woff2 differ diff --git a/src/www/assets/manrope-vietnamese-wght-normal-usUDDRr7.woff2 b/src/www/assets/manrope-vietnamese-wght-normal-usUDDRr7.woff2 new file mode 100644 index 0000000..1e4b7a4 Binary files /dev/null and b/src/www/assets/manrope-vietnamese-wght-normal-usUDDRr7.woff2 differ diff --git a/src/www/assets/matchContext-BJCpOvLW.js b/src/www/assets/matchContext-BJCpOvLW.js new file mode 100644 index 0000000..28cd824 --- /dev/null +++ b/src/www/assets/matchContext-BJCpOvLW.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";var n=t(e(),1),r=n.createContext(void 0),i=n.createContext(void 0);export{r as n,i as t}; \ No newline at end of file diff --git a/src/www/assets/messages-BOl-zx8S.js b/src/www/assets/messages-BOl-zx8S.js new file mode 100644 index 0000000..d8a85bf --- /dev/null +++ b/src/www/assets/messages-BOl-zx8S.js @@ -0,0 +1 @@ +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)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`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=u()})),f=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),p=o(((e,t)=>{t.exports=f()})),m={},h=`en-US`,g=[`en-US`,`zh-CN`,`zh-TW`],_=`PARAGLIDE_LOCALE`,v=3456e4,y=[`cookie`,`preferredLanguage`,`baseLocale`],b=[],x,S;function C(e){if(b.length===0)return;let t=typeof e==`string`?e:e.href;if(x===t)return S;let n=new URL(t,`http://dummy.com`),r;for(let e of b)if(new m(e.match,n.href).exec(n.href)){r=e;break}return x=t,S=r,r}function w(e){let t=C(e);return t&&t.exclude!==!0&&Array.isArray(t.strategy)?t.strategy:y}var T=void 0;globalThis.__paraglide=globalThis.__paraglide??{},globalThis.__paraglide.ssr=globalThis.__paraglide.ssr??{};var E=!1,D=()=>{if(T){let e=T?.getStore()?.locale;if(e)return e}let e=y;typeof window<`u`&&window.location?.href&&(e=w(window.location.href));let t=O(e,typeof window<`u`?window.location?.href:void 0);if(t)return E||(E=!0,A(t,{reload:!1})),t;throw Error(`No locale found. Read the docs https://inlang.com/m/gerre34r/library-inlang-paraglideJs/errors#no-locale-found`)};function O(e,t){let n;for(let t of e){if(t===`cookie`)n=N();else if(t===`baseLocale`)n=h;else if(t===`preferredLanguage`)n=P();else if(I(t)&&F.has(t)){let e=F.get(t);if(e){let t=e.getLocale();if(t instanceof Promise)continue;if(t!==void 0)return M(t)}}let e=j(n);if(e)return e}}var k=e=>{e?window.location.href=e:window.location.reload()},A=(e,t)=>{let n={reload:!0,...t},r;try{r=D()}catch{}let i=[],a=y;typeof window<`u`&&window.location?.href&&(a=w(window.location.href));for(let t of a)if(t===`cookie`){if(typeof document>`u`||typeof window>`u`)continue;let t=`${_}=${e}; path=/; max-age=${v}`;document.cookie=t}else if(t===`baseLocale`)continue;else if(I(t)&&F.has(t)){let n=F.get(t);if(n){let r=n.setLocale(e);r instanceof Promise&&(r=r.catch(e=>{throw Error(`Custom strategy "${t}" setLocale failed.`,{cause:e})}),i.push(r))}}let o=()=>{n.reload&&window.location&&e!==r&&k(void 0)};if(i.length)return Promise.all(i).then(()=>{o()});o()};function j(e){if(typeof e!=`string`)return;let t=e.toLowerCase();for(let e of g)if(e.toLowerCase()===t)return e}function M(e){let t=j(e);if(t)return t;throw Error(`Invalid locale: ${e}. Expected one of: ${g.join(`, `)}`)}function N(){if(typeof document>`u`||!document.cookie)return;let e=document.cookie.match(RegExp(`(^| )${_}=([^;]+)`))?.[2];return j(e)}function P(){if(!navigator?.languages?.length)return;let e=navigator.languages.map(e=>({fullTag:e,baseTag:e.split(`-`)[0]}));for(let t of e){let e=j(t.fullTag);if(e)return e;let n=j(t.baseTag);if(n)return n}}var F=new Map;function I(e){return typeof e==`string`&&/^custom-[A-Za-z0-9_-]+$/.test(e)}var L=()=>`Search`,ee=()=>`搜索`,te=()=>`搜尋`,R=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?L(e):n===`zh-CN`?ee(e):te(e)}),z=()=>`Cancel`,B=()=>`取消`,V=()=>`取消`,H=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?z(e):n===`zh-CN`?B(e):V(e)}),U=()=>`Continue`,W=()=>`继续`,G=()=>`繼續`,K=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?U(e):n===`zh-CN`?W(e):G(e)}),q=()=>`Change Password`,J=()=>`修改密码`,Y=()=>`修改密碼`,X=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?q(e):n===`zh-CN`?J(e):Y(e)}),Z=()=>`Sign out`,Q=()=>`退出登录`,ne=()=>`退出登入`,re=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Z(e):n===`zh-CN`?Q(e):ne(e)}),ie=()=>`Are you sure you want to sign out? You will need to sign in again to access your account.`,ae=()=>`您确定要退出登录吗?您需要重新登录才能访问您的账户。`,oe=()=>`您確定要退出登入嗎?您需要重新登入才能訪問您的賬戶。`,se=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ie(e):n===`zh-CN`?ae(e):oe(e)}),ce=()=>`Toggle theme`,le=()=>`切换主题`,ue=()=>`切換主題`,de=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ce(e):n===`zh-CN`?le(e):ue(e)}),fe=()=>`Light`,pe=()=>`浅色`,me=()=>`淺色`,he=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fe(e):n===`zh-CN`?pe(e):me(e)}),ge=()=>`Dark`,_e=()=>`深色`,ve=()=>`深色`,ye=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ge(e):n===`zh-CN`?_e(e):ve(e)}),be=()=>`System`,xe=()=>`系统`,Se=()=>`系統`,Ce=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?be(e):n===`zh-CN`?xe(e):Se(e)}),we=()=>`Skip to Main`,Te=()=>`跳至主内容`,Ee=()=>`跳至主內容`,De=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?we(e):n===`zh-CN`?Te(e):Ee(e)}),Oe=()=>`Switch language`,ke=()=>`切换语言`,Ae=()=>`切換語言`,je=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Oe(e):n===`zh-CN`?ke(e):Ae(e)}),Me=()=>`Learn more`,Ne=()=>`了解更多`,Pe=()=>`瞭解更多`,Fe=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Me(e):n===`zh-CN`?Ne(e):Pe(e)}),Ie=()=>`Coming Soon`,Le=()=>`即将推出`,Re=()=>`即將推出`,ze=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ie(e):n===`zh-CN`?Le(e):Re(e)}),Be=()=>`We are putting the finishing touches on this feature. Stay tuned for a better experience.`,Ve=()=>`我们正在打磨这一功能,敬请期待更好的体验`,He=()=>`我們正在打磨這一功能,敬請期待更好的體驗`,Ue=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Be(e):n===`zh-CN`?Ve(e):He(e)}),We=()=>`Hang tight 👀`,Ge=()=>`再等等 👀`,Ke=()=>`再等等 👀`,qe=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?We(e):n===`zh-CN`?Ge(e):Ke(e)}),Je=()=>`Type a command or search...`,Ye=()=>`输入命令或搜索...`,Xe=()=>`輸入命令或搜尋...`,Ze=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Je(e):n===`zh-CN`?Ye(e):Xe(e)}),Qe=()=>`No results found.`,$e=()=>`未找到结果。`,et=()=>`未找到結果。`,tt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Qe(e):n===`zh-CN`?$e(e):et(e)}),nt=()=>`Theme Settings`,rt=()=>`主题设置`,it=()=>`主題設定`,at=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nt(e):n===`zh-CN`?rt(e):it(e)}),ot=()=>`Adjust the appearance and layout to suit your preferences.`,st=()=>`调整外观和布局以适合您的偏好。`,ct=()=>`調整外觀和佈局以適合您的偏好。`,lt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ot(e):n===`zh-CN`?st(e):ct(e)}),ut=()=>`Reset`,dt=()=>`重置`,ft=()=>`重置`,pt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ut(e):n===`zh-CN`?dt(e):ft(e)}),mt=()=>`Theme`,ht=()=>`主题`,gt=()=>`主題`,_t=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mt(e):n===`zh-CN`?ht(e):gt(e)}),vt=()=>`Sidebar`,yt=()=>`侧边栏`,bt=()=>`側邊欄`,xt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vt(e):n===`zh-CN`?yt(e):bt(e)}),St=()=>`Layout`,Ct=()=>`布局`,wt=()=>`佈局`,Tt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?St(e):n===`zh-CN`?Ct(e):wt(e)}),Et=()=>`Direction`,Dt=()=>`方向`,Ot=()=>`方向`,kt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Et(e):n===`zh-CN`?Dt(e):Ot(e)}),At=()=>`Inset`,jt=()=>`嵌入`,Mt=()=>`嵌入`,Nt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?At(e):n===`zh-CN`?jt(e):Mt(e)}),Pt=()=>`Floating`,Ft=()=>`浮动`,It=()=>`浮動`,Lt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Pt(e):n===`zh-CN`?Ft(e):It(e)}),Rt=()=>`Sidebar`,zt=()=>`侧边栏`,Bt=()=>`側邊欄`,Vt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Rt(e):n===`zh-CN`?zt(e):Bt(e)}),Ht=()=>`Default`,Ut=()=>`默认`,Wt=()=>`預設`,Gt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ht(e):n===`zh-CN`?Ut(e):Wt(e)}),Kt=()=>`Compact`,qt=()=>`紧凑`,Jt=()=>`緊湊`,Yt=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Kt(e):n===`zh-CN`?qt(e):Jt(e)}),Xt=()=>`Full layout`,Zt=()=>`完整布局`,Qt=()=>`完整佈局`,$t=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Xt(e):n===`zh-CN`?Zt(e):Qt(e)}),en=()=>`Left to Right`,tn=()=>`从左到右`,nn=()=>`從左到右`,rn=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?en(e):n===`zh-CN`?tn(e):nn(e)}),an=()=>`Right to Left`,on=()=>`从右到左`,sn=()=>`從右到左`,cn=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?an(e):n===`zh-CN`?on(e):sn(e)}),ln=()=>`Asc`,un=()=>`升序`,dn=()=>`升序`,fn=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ln(e):n===`zh-CN`?un(e):dn(e)}),pn=()=>`Desc`,mn=()=>`降序`,hn=()=>`降序`,gn=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?pn(e):n===`zh-CN`?mn(e):hn(e)}),_n=()=>`Hide`,vn=()=>`隐藏`,yn=()=>`隱藏`,bn=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?_n(e):n===`zh-CN`?vn(e):yn(e)}),xn=e=>`Page ${e?.current} of ${e?.total}`,Sn=e=>`第 ${e?.current} 页,共 ${e?.total} 页`,Cn=e=>`第 ${e?.current} 頁,共 ${e?.total} 頁`,wn=((e,t={})=>{let n=t.locale??D();return n===`en-US`?xn(e):n===`zh-CN`?Sn(e):Cn(e)}),Tn=()=>`Rows per page`,En=()=>`每页行数`,Dn=()=>`每頁行數`,On=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Tn(e):n===`zh-CN`?En(e):Dn(e)}),kn=()=>`Go to first page`,An=()=>`跳转到第一页`,jn=()=>`跳轉到第一頁`,Mn=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?kn(e):n===`zh-CN`?An(e):jn(e)}),Nn=()=>`Go to previous page`,Pn=()=>`跳转到上一页`,Fn=()=>`跳轉到上一頁`,In=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Nn(e):n===`zh-CN`?Pn(e):Fn(e)}),Ln=e=>`Go to page ${e?.page}`,Rn=e=>`跳转到第 ${e?.page} 页`,zn=e=>`跳轉到第 ${e?.page} 頁`,Bn=((e,t={})=>{let n=t.locale??D();return n===`en-US`?Ln(e):n===`zh-CN`?Rn(e):zn(e)}),Vn=()=>`Go to next page`,Hn=()=>`跳转到下一页`,Un=()=>`跳轉到下一頁`,Wn=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Vn(e):n===`zh-CN`?Hn(e):Un(e)}),Gn=()=>`Go to last page`,Kn=()=>`跳转到最后一页`,qn=()=>`跳轉到最後一頁`,Jn=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Gn(e):n===`zh-CN`?Kn(e):qn(e)}),Yn=()=>`Filter...`,Xn=()=>`筛选...`,Zn=()=>`篩選...`,Qn=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Yn(e):n===`zh-CN`?Xn(e):Zn(e)}),$n=()=>`Reset`,er=()=>`重置`,tr=()=>`重置`,nr=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?$n(e):n===`zh-CN`?er(e):tr(e)}),rr=()=>`Refresh`,ir=()=>`刷新`,ar=()=>`重新整理`,or=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?rr(e):n===`zh-CN`?ir(e):ar(e)}),sr=()=>`View`,cr=()=>`查看`,lr=()=>`檢視`,ur=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?sr(e):n===`zh-CN`?cr(e):lr(e)}),dr=()=>`Toggle columns`,fr=()=>`切换列`,pr=()=>`切換列`,mr=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?dr(e):n===`zh-CN`?fr(e):pr(e)}),hr=()=>`Select date range`,gr=()=>`选择时间范围`,_r=()=>`選擇時間範圍`,vr=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?hr(e):n===`zh-CN`?gr(e):_r(e)}),yr=()=>`Today`,br=()=>`今天`,xr=()=>`今天`,Sr=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?yr(e):n===`zh-CN`?br(e):xr(e)}),Cr=()=>`Yesterday`,wr=()=>`昨天`,Tr=()=>`昨天`,Er=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Cr(e):n===`zh-CN`?wr(e):Tr(e)}),Dr=()=>`Last 7 days`,Or=()=>`最近 7 天`,kr=()=>`最近 7 天`,Ar=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Dr(e):n===`zh-CN`?Or(e):kr(e)}),jr=()=>`Last 30 days`,Mr=()=>`最近 30 天`,Nr=()=>`最近 30 天`,Pr=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?jr(e):n===`zh-CN`?Mr(e):Nr(e)}),Fr=()=>`This month`,Ir=()=>`本月`,Lr=()=>`本月`,Rr=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Fr(e):n===`zh-CN`?Ir(e):Lr(e)}),zr=()=>`Last month`,Br=()=>`上月`,Vr=()=>`上月`,Hr=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?zr(e):n===`zh-CN`?Br(e):Vr(e)}),Ur=()=>`Overview`,Wr=()=>`概览`,Gr=()=>`概覽`,Kr=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ur(e):n===`zh-CN`?Wr(e):Gr(e)}),qr=()=>`Dashboard`,Jr=()=>`仪表盘`,Yr=()=>`儀表盤`,Xr=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?qr(e):n===`zh-CN`?Jr(e):Yr(e)}),Zr=()=>`Orders`,Qr=()=>`订单管理`,$r=()=>`訂單管理`,ei=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Zr(e):n===`zh-CN`?Qr(e):$r(e)}),ti=()=>`Payments`,ni=()=>`支付管理`,ri=()=>`支付管理`,ii=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ti(e):n===`zh-CN`?ni(e):ri(e)}),ai=()=>`Blockchain`,oi=()=>`区块链`,si=()=>`區塊鏈`,ci=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ai(e):n===`zh-CN`?oi(e):si(e)}),li=()=>`Chains & Tokens`,ui=()=>`链与代币`,di=()=>`鏈與代幣`,fi=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?li(e):n===`zh-CN`?ui(e):di(e)}),pi=()=>`RPC Nodes`,mi=()=>`RPC 节点`,hi=()=>`RPC 節點`,gi=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?pi(e):n===`zh-CN`?mi(e):hi(e)}),_i=()=>`System`,vi=()=>`系统`,yi=()=>`系統`,bi=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?_i(e):n===`zh-CN`?vi(e):yi(e)}),xi=()=>`Settings`,Si=()=>`系统配置`,Ci=()=>`系統配置`,wi=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?xi(e):n===`zh-CN`?Si(e):Ci(e)}),Ti=()=>`Account Security`,Ei=()=>`账户安全`,Di=()=>`賬戶安全`,Oi=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ti(e):n===`zh-CN`?Ei(e):Di(e)}),ki=()=>`Manage your account security settings.`,Ai=()=>`管理你的账户安全设置。`,ji=()=>`管理你的賬戶安全設定。`,Mi=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ki(e):n===`zh-CN`?Ai(e):ji(e)}),Ni=()=>`Change Password`,Pi=()=>`修改密码`,Fi=()=>`修改密碼`,Ii=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ni(e):n===`zh-CN`?Pi(e):Fi(e)}),Li=()=>`Change Password`,Ri=()=>`修改密码`,zi=()=>`修改密碼`,Bi=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Li(e):n===`zh-CN`?Ri(e):zi(e)}),Vi=()=>`Update your login password.`,Hi=()=>`更新你的登录密码。`,Ui=()=>`更新你的登入密碼。`,Wi=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Vi(e):n===`zh-CN`?Hi(e):Ui(e)}),Gi=()=>`General`,Ki=()=>`基础配置`,qi=()=>`基礎配置`,Ji=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Gi(e):n===`zh-CN`?Ki(e):qi(e)}),Yi=()=>`Telegram`,Xi=()=>`Telegram 配置`,Zi=()=>`Telegram 配置`,Qi=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Yi(e):n===`zh-CN`?Xi(e):Zi(e)}),$i=()=>`Exchange Rate`,ea=()=>`汇率配置`,ta=()=>`匯率配置`,na=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?$i(e):n===`zh-CN`?ea(e):ta(e)}),ra=()=>`EPay Config`,ia=()=>`EPay 配置`,aa=()=>`EPay 配置`,oa=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ra(e):n===`zh-CN`?ia(e):aa(e)}),sa=()=>`Default Token`,ca=()=>`默认代币`,la=()=>`預設代幣`,ua=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?sa(e):n===`zh-CN`?ca(e):la(e)}),da=()=>`Default Currency`,fa=()=>`默认法币`,pa=()=>`預設法幣`,ma=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?da(e):n===`zh-CN`?fa(e):pa(e)}),ha=()=>`Default Network`,ga=()=>`默认网络`,_a=()=>`預設網路`,va=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ha(e):n===`zh-CN`?ga(e):_a(e)}),ya=()=>`System error / Parameter validation failed`,ba=()=>`系统错误 / 参数校验失败`,xa=()=>`系統錯誤 / 引數校驗失敗`,Sa=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ya(e):n===`zh-CN`?ba(e):xa(e)}),Ca=()=>`Wallet address already exists`,wa=()=>`钱包地址已存在`,Ta=()=>`錢包地址已存在`,Ea=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ca(e):n===`zh-CN`?wa(e):Ta(e)}),Da=()=>`Order already exists`,Oa=()=>`订单已存在`,ka=()=>`訂單已存在`,Aa=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Da(e):n===`zh-CN`?Oa(e):ka(e)}),ja=()=>`No available wallet address`,Ma=()=>`无可用钱包地址`,Na=()=>`無可用錢包地址`,Pa=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ja(e):n===`zh-CN`?Ma(e):Na(e)}),Fa=()=>`Invalid payment amount`,Ia=()=>`无效支付金额`,La=()=>`無效支付金額`,Ra=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Fa(e):n===`zh-CN`?Ia(e):La(e)}),za=()=>`No available amount channel`,Ba=()=>`无可用金额通道`,Va=()=>`無可用金額通道`,Ha=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?za(e):n===`zh-CN`?Ba(e):Va(e)}),Ua=()=>`Exchange rate calculation failed`,Wa=()=>`汇率计算失败`,Ga=()=>`匯率計算失敗`,Ka=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ua(e):n===`zh-CN`?Wa(e):Ga(e)}),qa=()=>`Block transaction already processed`,Ja=()=>`区块交易已处理`,Ya=()=>`區塊交易已處理`,Xa=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?qa(e):n===`zh-CN`?Ja(e):Ya(e)}),Za=()=>`Order not found`,Qa=()=>`订单不存在`,$a=()=>`訂單不存在`,eo=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Za(e):n===`zh-CN`?Qa(e):$a(e)}),to=()=>`Request parameter parsing failed`,no=()=>`请求参数解析失败`,ro=()=>`請求引數解析失敗`,io=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?to(e):n===`zh-CN`?no(e):ro(e)}),ao=()=>`Order status has changed`,oo=()=>`订单状态已变更`,so=()=>`訂單狀態已變更`,co=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ao(e):n===`zh-CN`?oo(e):so(e)}),lo=()=>`Sub-order count exceeded`,uo=()=>`子订单数量超限`,fo=()=>`子訂單數量超限`,po=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?lo(e):n===`zh-CN`?uo(e):fo(e)}),mo=()=>`Cannot switch network for sub-order`,ho=()=>`不能对子订单切换网络`,go=()=>`不能對子訂單切換網路`,_o=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mo(e):n===`zh-CN`?ho(e):go(e)}),vo=()=>`Order is not in pending payment status`,yo=()=>`订单不是待支付状态`,bo=()=>`訂單不是待支付狀態`,xo=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vo(e):n===`zh-CN`?yo(e):bo(e)}),So=()=>`Gateway not configured`,Co=()=>`网关未配置`,wo=()=>`閘道器未配置`,To=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?So(e):n===`zh-CN`?Co(e):wo(e)}),Eo=()=>`Supported asset already exists`,Do=()=>`支持的资产已存在`,Oo=()=>`支援的資產已存在`,ko=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Eo(e):n===`zh-CN`?Do(e):Oo(e)}),Ao=()=>`Supported asset does not exist`,jo=()=>`支持的资产不存在`,Mo=()=>`支援的資產不存在`,No=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ao(e):n===`zh-CN`?jo(e):Mo(e)}),Po=()=>`Request failed`,Fo=()=>`请求失败`,Io=()=>`請求失敗`,Lo=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Po(e):n===`zh-CN`?Fo(e):Io(e)}),Ro=()=>`Server error, please try again later`,zo=()=>`服务器错误,请稍后重试`,Bo=()=>`伺服器錯誤,請稍後重試`,Vo=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ro(e):n===`zh-CN`?zo(e):Bo(e)}),Ho=()=>`Oops! Something went wrong :')`,Uo=()=>`出错了 :')`,Wo=()=>`出錯了 :')`,Go=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ho(e):n===`zh-CN`?Uo(e):Wo(e)}),Ko=()=>`We apologize for the inconvenience. Please try again later.`,qo=()=>`抱歉给您带来不便,请稍后重试。`,Jo=()=>`抱歉給您帶來不便,請稍後重試。`,Yo=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ko(e):n===`zh-CN`?qo(e):Jo(e)}),Xo=()=>`Go Back`,Zo=()=>`返回`,Qo=()=>`返回`,$o=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Xo(e):n===`zh-CN`?Zo(e):Qo(e)}),es=()=>`Back to Home`,ts=()=>`回到首页`,ns=()=>`回到首頁`,rs=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?es(e):n===`zh-CN`?ts(e):ns(e)}),is=()=>`Oops! Page Not Found!`,as=()=>`页面未找到!`,os=()=>`頁面未找到!`,ss=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?is(e):n===`zh-CN`?as(e):os(e)}),cs=()=>`It seems like the page you're looking for does not exist or might have been removed.`,ls=()=>`您访问的页面不存在或已被移除。`,us=()=>`您訪問的頁面不存在或已被移除。`,ds=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cs(e):n===`zh-CN`?ls(e):us(e)}),fs=()=>`Welcome back`,ps=()=>`欢迎回来`,ms=()=>`歡迎回來`,hs=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fs(e):n===`zh-CN`?ps(e):ms(e)}),gs=()=>`Sign in to GMPay`,_s=()=>`登录 GMPay 后台`,vs=()=>`登入 GMPay 後臺`,ys=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gs(e):n===`zh-CN`?_s(e):vs(e)}),bs=()=>`Use your admin account to access the console and manage payment orders, wallet configuration and callback notifications.`,xs=()=>`使用管理员账号进入控制台,继续处理收款订单、钱包配置与通知回调。`,Ss=()=>`使用管理員帳號進入控制台,繼續處理收款訂單、錢包配置與通知回呼。`,Cs=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bs(e):n===`zh-CN`?xs(e):Ss(e)}),ws=()=>`Username`,Ts=()=>`账号`,Es=()=>`帳號`,Ds=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ws(e):n===`zh-CN`?Ts(e):Es(e)}),Os=()=>`admin`,ks=()=>`admin`,As=()=>`admin`,js=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Os(e):n===`zh-CN`?ks(e):As(e)}),Ms=()=>`Password`,Ns=()=>`密码`,Ps=()=>`密碼`,Fs=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ms(e):n===`zh-CN`?Ns(e):Ps(e)}),Is=()=>`Please enter your username`,Ls=()=>`请输入账号`,Rs=()=>`請輸入帳號`,zs=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Is(e):n===`zh-CN`?Ls(e):Rs(e)}),Bs=()=>`Please enter your password`,Vs=()=>`请输入密码`,Hs=()=>`請輸入密碼`,Us=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Bs(e):n===`zh-CN`?Vs(e):Hs(e)}),Ws=()=>`Sign In`,Gs=()=>`登录`,Ks=()=>`登入`,qs=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ws(e):n===`zh-CN`?Gs(e):Ks(e)}),Js=e=>`Welcome back, ${e?.username}!`,Ys=e=>`欢迎回来,${e?.username}!`,Xs=e=>`歡迎回來,${e?.username}!`,Zs=((e,t={})=>{let n=t.locale??D();return n===`en-US`?Js(e):n===`zh-CN`?Ys(e):Xs(e)}),Qs=()=>`GMPay Setup`,$s=()=>`GMPay 安装配置`,ec=()=>`GMPay 安裝配置`,tc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Qs(e):n===`zh-CN`?$s(e):ec(e)}),nc=()=>`Fill in the details below to create your configuration file.`,rc=()=>`填写以下信息以创建配置文件。`,ic=()=>`填寫以下資訊以建立配置檔案。`,ac=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nc(e):n===`zh-CN`?rc(e):ic(e)}),oc=()=>`App Name`,sc=()=>`应用名称`,cc=()=>`應用名稱`,lc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?oc(e):n===`zh-CN`?sc(e):cc(e)}),uc=()=>`App URI`,dc=()=>`应用地址`,fc=()=>`應用地址`,pc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uc(e):n===`zh-CN`?dc(e):fc(e)}),mc=()=>`HTTP Bind Address`,hc=()=>`HTTP 绑定地址`,gc=()=>`HTTP 繫結地址`,_c=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mc(e):n===`zh-CN`?hc(e):gc(e)}),vc=()=>`HTTP Bind Port`,yc=()=>`HTTP 绑定端口`,bc=()=>`HTTP 繫結埠`,xc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vc(e):n===`zh-CN`?yc(e):bc(e)}),Sc=()=>`Runtime Root Path`,Cc=()=>`运行时根目录`,wc=()=>`執行時根目錄`,Tc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Sc(e):n===`zh-CN`?Cc(e):wc(e)}),Ec=()=>`Log Save Path`,Dc=()=>`日志保存路径`,Oc=()=>`日誌儲存路徑`,kc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ec(e):n===`zh-CN`?Dc(e):Oc(e)}),Ac=()=>`Order Expiration (min)`,jc=()=>`订单过期时间(分钟)`,Mc=()=>`訂單過期時間(分鐘)`,Nc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ac(e):n===`zh-CN`?jc(e):Mc(e)}),Pc=()=>`Max Callback Retries`,Fc=()=>`最大回调重试次数`,Ic=()=>`最大回調重試次數`,Lc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Pc(e):n===`zh-CN`?Fc(e):Ic(e)}),Rc=()=>`Install`,zc=()=>`开始安装`,Bc=()=>`開始安裝`,Vc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Rc(e):n===`zh-CN`?zc(e):Bc(e)}),Hc=()=>`Installing…`,Uc=()=>`安装中…`,Wc=()=>`安裝中…`,Gc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Hc(e):n===`zh-CN`?Uc(e):Wc(e)}),Kc=()=>`Done!`,qc=()=>`完成!`,Jc=()=>`完成!`,Yc=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Kc(e):n===`zh-CN`?qc(e):Jc(e)}),Xc=()=>`Done! The server is starting…`,Zc=()=>`安装完成!服务正在启动…`,Qc=()=>`安裝完成!服務正在啟動…`,$c=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Xc(e):n===`zh-CN`?Zc(e):Qc(e)}),el=()=>`Install failed.`,tl=()=>`安装失败。`,nl=()=>`安裝失敗。`,rl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?el(e):n===`zh-CN`?tl(e):nl(e)}),il=()=>`Success`,al=()=>`安装成功`,ol=()=>`安裝成功`,sl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?il(e):n===`zh-CN`?al(e):ol(e)}),cl=()=>`Error`,ll=()=>`安装失败`,ul=()=>`安裝失敗`,dl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cl(e):n===`zh-CN`?ll(e):ul(e)}),fl=()=>`Secure and efficient USDT payment middleware`,pl=()=>`安全、高效的 USDT 支付中间件`,ml=()=>`安全、高效的 USDT 支付中介軟體`,hl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fl(e):n===`zh-CN`?pl(e):ml(e)}),gl=()=>`Installation complete`,_l=()=>`安装完成`,vl=()=>`安裝完成`,yl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gl(e):n===`zh-CN`?_l(e):vl(e)}),bl=()=>`Please save the initial admin username and password below.`,xl=()=>`请先保存下面的初始管理员账号和密码。`,Sl=()=>`請先儲存下面的初始管理員帳號和密碼。`,Cl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bl(e):n===`zh-CN`?xl(e):Sl(e)}),wl=()=>`Admin credentials ready`,Tl=()=>`管理员凭证已生成`,El=()=>`管理員憑據已生成`,Dl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?wl(e):n===`zh-CN`?Tl(e):El(e)}),Ol=()=>`Go to sign in`,kl=()=>`去登录`,Al=()=>`去登入`,jl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ol(e):n===`zh-CN`?kl(e):Al(e)}),Ml=()=>`Username`,Nl=()=>`用户名`,Pl=()=>`使用者名稱`,Fl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ml(e):n===`zh-CN`?Nl(e):Pl(e)}),Il=()=>`Initial password`,Ll=()=>`初始密码`,Rl=()=>`初始密碼`,zl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Il(e):n===`zh-CN`?Ll(e):Rl(e)}),Bl=()=>`Change the password in an HTTPS environment`,Vl=()=>`请在 HTTPS 环境下修改密码`,Hl=()=>`請在 HTTPS 環境下修改密碼`,Ul=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Bl(e):n===`zh-CN`?Vl(e):Hl(e)}),Wl=()=>`Show password`,Gl=()=>`显示密码`,Kl=()=>`顯示密碼`,ql=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Wl(e):n===`zh-CN`?Gl(e):Kl(e)}),Jl=()=>`Hide password`,Yl=()=>`隐藏密码`,Xl=()=>`隱藏密碼`,Zl=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Jl(e):n===`zh-CN`?Yl(e):Xl(e)}),Ql=()=>`One-time view`,$l=()=>`一次性查看`,eu=()=>`一次性檢視`,tu=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ql(e):n===`zh-CN`?$l(e):eu(e)}),nu=()=>`Copy`,ru=()=>`复制`,iu=()=>`複製`,au=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nu(e):n===`zh-CN`?ru(e):iu(e)}),ou=()=>`Copied`,su=()=>`已复制`,cu=()=>`已複製`,lu=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ou(e):n===`zh-CN`?su(e):cu(e)}),uu=()=>`Copy failed`,du=()=>`复制失败`,fu=()=>`複製失敗`,pu=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uu(e):n===`zh-CN`?du(e):fu(e)}),mu=()=>`We recommend changing the admin password first`,hu=()=>`建议先完成管理员密码修改`,gu=()=>`建議先完成管理員密碼修改`,_u=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mu(e):n===`zh-CN`?hu(e):gu(e)}),vu=()=>`Change password now`,yu=()=>`立即修改密码`,bu=()=>`立即修改密碼`,xu=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vu(e):n===`zh-CN`?yu(e):bu(e)}),Su=()=>`This account is still using the initial password`,Cu=()=>`当前账号仍在使用初始密码`,wu=()=>`當前帳號仍在使用初始密碼`,Tu=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Su(e):n===`zh-CN`?Cu(e):wu(e)}),Eu=()=>`To reduce the risk of someone signing in with a weak or default password, we recommend changing the admin password now before entering the system.`,Du=()=>`为了避免后台账号因弱口令或默认口令被直接登录,建议你现在先完成密码修改,再继续进入系统。`,Ou=()=>`為了避免後臺帳號被弱口令或預設口令直接登入,建議你現在先完成密碼修改,再繼續進入系統。`,ku=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Eu(e):n===`zh-CN`?Du(e):Ou(e)}),Au=()=>`What happens next`,ju=()=>`接下来会发生什么`,Mu=()=>`接下來會發生什麼`,Nu=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Au(e):n===`zh-CN`?ju(e):Mu(e)}),Pu=()=>`Clicking “Change password now” will take you to the password change page`,Fu=()=>`点击“立即修改密码”后会跳转到修改密码页面`,Iu=()=>`點選“立即修改密碼”後會跳轉到修改密碼頁面`,Lu=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Pu(e):n===`zh-CN`?Fu(e):Iu(e)}),Ru=()=>`After updating the password, you can continue to the page you originally wanted to visit`,zu=()=>`修改完成后可继续返回你原本要进入的页面`,Bu=()=>`修改完成後可繼續返回你原本要進入的頁面`,Vu=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ru(e):n===`zh-CN`?zu(e):Bu(e)}),Hu=()=>`Settled By Sub`,Uu=()=>`子单结算`,Wu=()=>`子單結算`,Gu=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Hu(e):n===`zh-CN`?Uu(e):Wu(e)}),Ku=()=>`Appearance`,qu=()=>`外观设置`,Ju=()=>`外觀設定`,Yu=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ku(e):n===`zh-CN`?qu(e):Ju(e)}),Xu=()=>`Admin Console`,Zu=()=>`管理控制台`,Qu=()=>`管理控制台`,$u=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Xu(e):n===`zh-CN`?Zu(e):Qu(e)}),ed=()=>`Payment Integrations`,td=()=>`支付接入`,nd=()=>`支付接入`,rd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ed(e):n===`zh-CN`?td(e):nd(e)}),id=()=>`Payment Assets`,ad=()=>`收款资产`,od=()=>`收款資產`,sd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?id(e):n===`zh-CN`?ad(e):od(e)}),cd=()=>`Integration Guide`,ld=()=>`接入配置`,ud=()=>`接入配置`,dd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cd(e):n===`zh-CN`?ld(e):ud(e)}),fd=()=>`Transactions`,pd=()=>`交易`,md=()=>`交易`,hd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fd(e):n===`zh-CN`?pd(e):md(e)}),gd=()=>`Finance`,_d=()=>`财务`,vd=()=>`財務`,yd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gd(e):n===`zh-CN`?_d(e):vd(e)}),bd=()=>`Address Management`,xd=()=>`地址管理`,Sd=()=>`地址管理`,Cd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bd(e):n===`zh-CN`?xd(e):Sd(e)}),wd=e=>`Last login: ${e?.time}`,Td=e=>`上次登录: ${e?.time}`,Ed=e=>`上次登入: ${e?.time}`,Dd=((e,t={})=>{let n=t.locale??D();return n===`en-US`?wd(e):n===`zh-CN`?Td(e):Ed(e)}),Od=()=>`Welcome to Admin Console`,kd=()=>`欢迎使用管理后台`,Ad=()=>`歡迎使用管理後臺`,jd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Od(e):n===`zh-CN`?kd(e):Ad(e)}),Md=()=>`Dashboard`,Nd=()=>`仪表盘`,Pd=()=>`儀表盤`,Fd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Md(e):n===`zh-CN`?Nd(e):Pd(e)}),Id=()=>`View asset balances, revenue trends, and recent order statuses.`,Ld=()=>`查看资产、流水与最近订单状态。`,Rd=()=>`檢視資產、流水與最近訂單狀態。`,zd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Id(e):n===`zh-CN`?Ld(e):Rd(e)}),Bd=()=>`Time`,Vd=()=>`时间`,Hd=()=>`時間`,Ud=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Bd(e):n===`zh-CN`?Vd(e):Hd(e)}),Wd=()=>`Order ID`,Gd=()=>`订单号`,Kd=()=>`訂單號`,qd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Wd(e):n===`zh-CN`?Gd(e):Kd(e)}),Jd=()=>`Wallet Address`,Yd=()=>`钱包地址`,Xd=()=>`錢包地址`,Zd=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Jd(e):n===`zh-CN`?Yd(e):Xd(e)}),Qd=()=>`Fiat Amount`,$d=()=>`法币金额`,ef=()=>`法幣金額`,tf=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Qd(e):n===`zh-CN`?$d(e):ef(e)}),nf=()=>`Token Amount`,rf=()=>`代币金额`,af=()=>`代幣金額`,of=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nf(e):n===`zh-CN`?rf(e):af(e)}),sf=()=>`Chain`,cf=()=>`链`,lf=()=>`鏈`,uf=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?sf(e):n===`zh-CN`?cf(e):lf(e)}),df=()=>`Status`,ff=()=>`状态`,pf=()=>`狀態`,mf=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?df(e):n===`zh-CN`?ff(e):pf(e)}),hf=()=>`Revenue Trend`,gf=()=>`流水趋势`,_f=()=>`流水趨勢`,vf=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?hf(e):n===`zh-CN`?gf(e):_f(e)}),yf=()=>`Trend of successful and failed order amounts`,bf=()=>`成功与失败订单金额趋势`,xf=()=>`成功與失敗訂單金額趨勢`,Sf=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?yf(e):n===`zh-CN`?bf(e):xf(e)}),Cf=()=>`Order Statistics`,wf=()=>`订单统计`,Tf=()=>`訂單統計`,Ef=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Cf(e):n===`zh-CN`?wf(e):Tf(e)}),Df=()=>`Daily order count and conversion rate trend`,Of=()=>`每日订单数与成交率趋势`,kf=()=>`每日訂單數與成交率趨勢`,Af=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Df(e):n===`zh-CN`?Of(e):kf(e)}),jf=()=>`Recent Orders`,Mf=()=>`最近订单`,Nf=()=>`最近訂單`,Pf=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?jf(e):n===`zh-CN`?Mf(e):Nf(e)}),Ff=()=>`Payment status of the latest 20 orders`,If=()=>`最新 20 笔订单收款状态`,Lf=()=>`最新 20 筆訂單收款狀態`,Rf=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ff(e):n===`zh-CN`?If(e):Lf(e)}),zf=()=>`No recent orders`,Bf=()=>`暂无最近订单`,Vf=()=>`暫無最近訂單`,Hf=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?zf(e):n===`zh-CN`?Bf(e):Vf(e)}),Uf=()=>`Asset Trend`,Wf=()=>`资产趋势`,Gf=()=>`資產趨勢`,Kf=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Uf(e):n===`zh-CN`?Wf(e):Gf(e)}),qf=()=>`Switch between today, 7 days, 30 days, and custom views`,Jf=()=>`支持今日、7 天、30 天与自定义视图切换`,Yf=()=>`支援今日、7 天、30 天與自定義檢視切換`,Xf=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?qf(e):n===`zh-CN`?Jf(e):Yf(e)}),Zf=()=>`Filter`,Qf=()=>`筛选`,$f=()=>`篩選`,ep=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Zf(e):n===`zh-CN`?Qf(e):$f(e)}),tp=()=>`No data`,np=()=>`无数据`,rp=()=>`無資料`,ip=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?tp(e):n===`zh-CN`?np(e):rp(e)}),ap=()=>`Clear filters`,op=()=>`清除筛选`,sp=()=>`清除篩選`,cp=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ap(e):n===`zh-CN`?op(e):sp(e)}),lp=()=>`Total Amount`,up=()=>`总金额`,dp=()=>`總金額`,fp=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?lp(e):n===`zh-CN`?up(e):dp(e)}),pp=()=>`Actual Amount`,mp=()=>`实收金额`,hp=()=>`實收金額`,gp=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?pp(e):n===`zh-CN`?mp(e):hp(e)}),_p=()=>`Total Asset Balance (USD)`,vp=()=>`总资产余额 (USD)`,yp=()=>`總資產餘額 (USD)`,bp=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?_p(e):n===`zh-CN`?vp(e):yp(e)}),xp=()=>`Current available asset pool`,Sp=()=>`当前可用资金池`,Cp=()=>`當前可用資金池`,wp=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?xp(e):n===`zh-CN`?Sp(e):Cp(e)}),Tp=()=>`Total Volume`,Ep=()=>`总流水`,Dp=()=>`總流水`,Op=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Tp(e):n===`zh-CN`?Ep(e):Dp(e)}),kp=()=>`Cumulative successful payment amount`,Ap=()=>`累计成功收款金额`,jp=()=>`累計成功收款金額`,Mp=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?kp(e):n===`zh-CN`?Ap(e):jp(e)}),Np=()=>`Total Orders`,Pp=()=>`总订单量`,Fp=()=>`總訂單量`,Ip=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Np(e):n===`zh-CN`?Pp(e):Fp(e)}),Lp=()=>`Cumulative number of orders`,Rp=()=>`累计订单数量`,zp=()=>`累計訂單數量`,Bp=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Lp(e):n===`zh-CN`?Rp(e):zp(e)}),Vp=()=>`Total Conversion Rate`,Hp=()=>`总成交率`,Up=()=>`總成交率`,Wp=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Vp(e):n===`zh-CN`?Hp(e):Up(e)}),Gp=()=>`Cumulative paid / total orders`,Kp=()=>`累计已支付 / 总订单`,qp=()=>`累計已支付 / 總訂單`,Jp=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Gp(e):n===`zh-CN`?Kp(e):qp(e)}),Yp=()=>`Order Count`,Xp=()=>`订单总数`,Zp=()=>`訂單總數`,Qp=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Yp(e):n===`zh-CN`?Xp(e):Zp(e)}),$p=()=>`Total orders in the selected period`,em=()=>`当前筛选周期内订单总数`,tm=()=>`當前篩選週期內訂單總數`,nm=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?$p(e):n===`zh-CN`?em(e):tm(e)}),rm=()=>`Successful Orders`,im=()=>`成功订单`,am=()=>`成功訂單`,om=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?rm(e):n===`zh-CN`?im(e):am(e)}),sm=()=>`Paid orders in the selected period`,cm=()=>`当前筛选周期内已支付订单`,lm=()=>`當前篩選週期內已支付訂單`,um=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?sm(e):n===`zh-CN`?cm(e):lm(e)}),dm=()=>`Average Payment Time`,fm=()=>`平均支付耗时`,pm=()=>`平均支付耗時`,mm=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?dm(e):n===`zh-CN`?fm(e):pm(e)}),hm=()=>`Average time from order creation to payment success`,gm=()=>`订单创建到支付成功平均耗时`,_m=()=>`訂單建立到支付成功平均耗時`,vm=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?hm(e):n===`zh-CN`?gm(e):_m(e)}),ym=()=>`Expired Unpaid`,bm=()=>`超时未支付`,xm=()=>`超時未支付`,Sm=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ym(e):n===`zh-CN`?bm(e):xm(e)}),Cm=()=>`Expired and unpaid orders`,wm=()=>`已过期且未支付订单`,Tm=()=>`已過期且未支付訂單`,Em=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Cm(e):n===`zh-CN`?wm(e):Tm(e)}),Dm=()=>`Last 7 Days Volume`,Om=()=>`最近7日流水`,km=()=>`最近7日流水`,Am=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Dm(e):n===`zh-CN`?Om(e):km(e)}),jm=()=>`Cumulative payments in the last 7 days`,Mm=()=>`近 7 天累计收款`,Nm=()=>`近 7 天累計收款`,Pm=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?jm(e):n===`zh-CN`?Mm(e):Nm(e)}),Fm=()=>`Active Address Count`,Im=()=>`活跃地址数量`,Lm=()=>`活躍地址數量`,Rm=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Fm(e):n===`zh-CN`?Im(e):Lm(e)}),zm=()=>`Addresses with transactions in the last 24 hours`,Bm=()=>`近 24 小时有流水地址`,Vm=()=>`近 24 小時有流水地址`,Hm=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?zm(e):n===`zh-CN`?Bm(e):Vm(e)}),Um=()=>`Online Chain Count`,Wm=()=>`在线链数量`,Gm=()=>`線上鏈數量`,Km=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Um(e):n===`zh-CN`?Wm(e):Gm(e)}),qm=()=>`Currently available payment networks`,Jm=()=>`当前可用收款网络`,Ym=()=>`當前可用收款網路`,Xm=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?qm(e):n===`zh-CN`?Jm(e):Ym(e)}),Zm=()=>`Order Success Rate`,Qm=()=>`订单成功率`,$m=()=>`訂單成功率`,eh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Zm(e):n===`zh-CN`?Qm(e):$m(e)}),th=()=>`Conversion rate in the selected period`,nh=()=>`当前筛选周期内成交率`,rh=()=>`當前篩選週期內成交率`,ih=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?th(e):n===`zh-CN`?nh(e):rh(e)}),ah=()=>`Total Amount`,oh=()=>`总金额`,sh=()=>`總金額`,ch=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ah(e):n===`zh-CN`?oh(e):sh(e)}),lh=()=>`Actual Amount`,uh=()=>`实收金额`,dh=()=>`實收金額`,fh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?lh(e):n===`zh-CN`?uh(e):dh(e)}),ph=()=>`Order Count`,mh=()=>`订单数`,hh=()=>`訂單數`,gh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ph(e):n===`zh-CN`?mh(e):hh(e)}),_h=()=>`Successful Orders`,vh=()=>`成功订单`,yh=()=>`成功訂單`,bh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?_h(e):n===`zh-CN`?vh(e):yh(e)}),xh=()=>`Pending`,Sh=()=>`待支付`,Ch=()=>`待支付`,wh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?xh(e):n===`zh-CN`?Sh(e):Ch(e)}),Th=()=>`Paid`,Eh=()=>`已支付`,Dh=()=>`已支付`,Oh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Th(e):n===`zh-CN`?Eh(e):Dh(e)}),kh=()=>`Expired`,Ah=()=>`已过期`,jh=()=>`已過期`,Mh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?kh(e):n===`zh-CN`?Ah(e):jh(e)}),Nh=()=>`Today`,Ph=()=>`今日`,Fh=()=>`今日`,Ih=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Nh(e):n===`zh-CN`?Ph(e):Fh(e)}),Lh=()=>`7 days`,Rh=()=>`7天`,zh=()=>`7天`,Bh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Lh(e):n===`zh-CN`?Rh(e):zh(e)}),Vh=()=>`30 days`,Hh=()=>`30天`,Uh=()=>`30天`,Wh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Vh(e):n===`zh-CN`?Hh(e):Uh(e)}),Gh=()=>`Custom`,Kh=()=>`自定义`,qh=()=>`自定義`,Jh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Gh(e):n===`zh-CN`?Kh(e):qh(e)}),Yh=()=>`Close Order`,Xh=()=>`关闭订单`,Zh=()=>`關閉訂單`,Qh=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Yh(e):n===`zh-CN`?Xh(e):Zh(e)}),$h=()=>`Resend Callback`,eg=()=>`回调重发`,tg=()=>`回呼重發`,ng=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?$h(e):n===`zh-CN`?eg(e):tg(e)}),rg=()=>`Please enter the block transaction ID`,ig=()=>`请输入区块交易 ID`,ag=()=>`請輸入區塊交易 ID`,og=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?rg(e):n===`zh-CN`?ig(e):ag(e)}),sg=()=>`Order marked as paid`,cg=()=>`订单已标记为已支付`,lg=()=>`訂單已標記為已支付`,ug=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?sg(e):n===`zh-CN`?cg(e):lg(e)}),dg=()=>`Order export failed`,fg=()=>`订单导出失败`,pg=()=>`訂單匯出失敗`,mg=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?dg(e):n===`zh-CN`?fg(e):pg(e)}),hg=()=>`Order export succeeded`,gg=()=>`订单导出成功`,_g=()=>`訂單匯出成功`,vg=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?hg(e):n===`zh-CN`?gg(e):_g(e)}),yg=()=>`Exporting...`,bg=()=>`导出中...`,xg=()=>`匯出中...`,Sg=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?yg(e):n===`zh-CN`?bg(e):xg(e)}),Cg=()=>`Export Orders`,wg=()=>`导出订单`,Tg=()=>`匯出訂單`,Eg=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Cg(e):n===`zh-CN`?wg(e):Tg(e)}),Dg=()=>`Search orders, filter by status, and perform manual payment / close / resend callback actions.`,Og=()=>`搜索订单、筛选状态并执行补单 / 关闭 / 回调操作。`,kg=()=>`搜尋訂單、篩選狀態與執行補單/關閉/回呼操作。`,Ag=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Dg(e):n===`zh-CN`?Og(e):kg(e)}),jg=()=>`Order Management`,Mg=()=>`订单管理`,Ng=()=>`訂單管理`,Pg=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?jg(e):n===`zh-CN`?Mg(e):Ng(e)}),Fg=()=>`Details`,Ig=()=>`详情`,Lg=()=>`詳情`,Rg=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Fg(e):n===`zh-CN`?Ig(e):Lg(e)}),zg=()=>`Manual Mark Paid`,Bg=()=>`补单`,Vg=()=>`補單`,Hg=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?zg(e):n===`zh-CN`?Bg(e):Vg(e)}),Ug=()=>`Confirm`,Wg=()=>`确认`,Gg=()=>`確認`,Kg=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ug(e):n===`zh-CN`?Wg(e):Gg(e)}),qg=e=>`You are about to perform the “${e?.action}” action on order ${e?.id}.`,Jg=e=>`即将对订单 ${e?.id} 执行“${e?.action}”操作。`,Yg=e=>`即將對訂單 ${e?.id} 執行“${e?.action}”操作。`,Xg=((e,t={})=>{let n=t.locale??D();return n===`en-US`?qg(e):n===`zh-CN`?Jg(e):Yg(e)}),Zg=e=>`Confirm ${e?.action}`,Qg=e=>`${e?.action}确认`,$g=e=>`${e?.action}確認`,e_=((e,t={})=>{let n=t.locale??D();return n===`en-US`?Zg(e):n===`zh-CN`?Qg(e):$g(e)}),t_=()=>`Mark as Paid`,n_=()=>`标记已支付`,r_=()=>`標記已支付`,i_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?t_(e):n===`zh-CN`?n_(e):r_(e)}),a_=e=>`Fill in the on-chain transaction ID for order ${e?.id}.`,o_=e=>`为订单 ${e?.id} 填写链上交易 ID。`,s_=e=>`為訂單 ${e?.id} 填寫鏈上交易 ID。`,c_=((e,t={})=>{let n=t.locale??D();return n===`en-US`?a_(e):n===`zh-CN`?o_(e):s_(e)}),l_=()=>`Block Transaction ID`,u_=()=>`区块交易 ID`,d_=()=>`區塊交易 ID`,f_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?l_(e):n===`zh-CN`?u_(e):d_(e)}),p_=()=>`Submitting...`,m_=()=>`提交中...`,h_=()=>`提交中...`,g_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?p_(e):n===`zh-CN`?m_(e):h_(e)}),__=()=>`Confirm Manual Mark Paid`,v_=()=>`确认补单`,y_=()=>`確認補單`,b_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?__(e):n===`zh-CN`?v_(e):y_(e)}),x_=()=>`Status`,S_=()=>`状态`,C_=()=>`狀態`,w_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?x_(e):n===`zh-CN`?S_(e):C_(e)}),T_=()=>`Chain`,E_=()=>`链`,D_=()=>`鏈`,O_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?T_(e):n===`zh-CN`?E_(e):D_(e)}),k_=()=>`Search order ID / merchant order ID...`,A_=()=>`搜索订单号 / 商户订单号...`,j_=()=>`搜尋訂單號 / 商戶訂單號...`,M_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?k_(e):n===`zh-CN`?A_(e):j_(e)}),N_=()=>`No order data`,P_=()=>`暂无订单数据`,F_=()=>`暫無訂單資料`,I_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?N_(e):n===`zh-CN`?P_(e):F_(e)}),L_=()=>`Status`,R_=()=>`状态`,z_=()=>`狀態`,B_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?L_(e):n===`zh-CN`?R_(e):z_(e)}),V_=()=>`Merchant Order ID`,H_=()=>`商户订单号`,U_=()=>`商戶訂單號`,W_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?V_(e):n===`zh-CN`?H_(e):U_(e)}),G_=()=>`Order Name`,K_=()=>`订单名称`,q_=()=>`訂單名稱`,J_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?G_(e):n===`zh-CN`?K_(e):q_(e)}),Y_=()=>`Fiat Amount`,X_=()=>`法币金额`,Z_=()=>`法幣金額`,Q_=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Y_(e):n===`zh-CN`?X_(e):Z_(e)}),$_=()=>`Token Amount`,ev=()=>`代币金额`,tv=()=>`代幣金額`,nv=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?$_(e):n===`zh-CN`?ev(e):tv(e)}),rv=()=>`Chain`,iv=()=>`链`,av=()=>`鏈`,ov=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?rv(e):n===`zh-CN`?iv(e):av(e)}),sv=()=>`Address`,cv=()=>`地址`,lv=()=>`地址`,uv=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?sv(e):n===`zh-CN`?cv(e):lv(e)}),dv=()=>`Created At`,fv=()=>`创建时间`,pv=()=>`建立時間`,mv=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?dv(e):n===`zh-CN`?fv(e):pv(e)}),hv=()=>`Updated At`,gv=()=>`更新时间`,_v=()=>`更新時間`,vv=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?hv(e):n===`zh-CN`?gv(e):_v(e)}),yv=()=>`On-chain Transaction ID`,bv=()=>`链上交易 ID`,xv=()=>`鏈上交易 ID`,Sv=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?yv(e):n===`zh-CN`?bv(e):xv(e)}),Cv=()=>`Payment Type`,wv=()=>`支付类型`,Tv=()=>`支付型別`,Ev=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Cv(e):n===`zh-CN`?wv(e):Tv(e)}),Dv=()=>`Assigned Address`,Ov=()=>`已分配地址`,kv=()=>`已分配地址`,Av=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Dv(e):n===`zh-CN`?Ov(e):kv(e)}),jv=()=>`Callback Status`,Mv=()=>`回调状态`,Nv=()=>`回呼狀態`,Pv=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?jv(e):n===`zh-CN`?Mv(e):Nv(e)}),Fv=()=>`Callback Count`,Iv=()=>`回调次数`,Lv=()=>`回呼次數`,Rv=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Fv(e):n===`zh-CN`?Iv(e):Lv(e)}),zv=()=>`Notify URL`,Bv=()=>`通知地址`,Vv=()=>`通知地址`,Hv=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?zv(e):n===`zh-CN`?Bv(e):Vv(e)}),Uv=()=>`Redirect URL`,Wv=()=>`跳转地址`,Gv=()=>`跳轉地址`,Kv=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Uv(e):n===`zh-CN`?Wv(e):Gv(e)}),qv=()=>`Actions`,Jv=()=>`操作`,Yv=()=>`操作`,Xv=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?qv(e):n===`zh-CN`?Jv(e):Yv(e)}),Zv=()=>`Yes`,Qv=()=>`是`,$v=()=>`是`,ey=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Zv(e):n===`zh-CN`?Qv(e):$v(e)}),ty=()=>`No`,ny=()=>`否`,ry=()=>`否`,iy=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ty(e):n===`zh-CN`?ny(e):ry(e)}),ay=()=>`Succeeded`,oy=()=>`已成功`,sy=()=>`已成功`,cy=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ay(e):n===`zh-CN`?oy(e):sy(e)}),ly=()=>`Not Called Back / Failed`,uy=()=>`未回调 / 失败`,dy=()=>`未回呼/失敗`,fy=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ly(e):n===`zh-CN`?uy(e):dy(e)}),py=()=>`View Details`,my=()=>`查看详情`,hy=()=>`檢視詳情`,gy=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?py(e):n===`zh-CN`?my(e):hy(e)}),_y=()=>`Manual Mark Paid`,vy=()=>`手动补单`,yy=()=>`手動補單`,by=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?_y(e):n===`zh-CN`?vy(e):yy(e)}),xy=()=>`Open menu`,Sy=()=>`开启选单`,Cy=()=>`開啟選單`,wy=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?xy(e):n===`zh-CN`?Sy(e):Cy(e)}),Ty=()=>`Merchant Order ID`,Ey=()=>`商户订单号`,Dy=()=>`商戶訂單號`,Oy=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ty(e):n===`zh-CN`?Ey(e):Dy(e)}),ky=()=>`Order Name`,Ay=()=>`订单名称`,jy=()=>`訂單名稱`,My=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ky(e):n===`zh-CN`?Ay(e):jy(e)}),Ny=()=>`Amount`,Py=()=>`金额`,Fy=()=>`金額`,Iy=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ny(e):n===`zh-CN`?Py(e):Fy(e)}),Ly=()=>`Actual Paid`,Ry=()=>`实付`,zy=()=>`實付`,By=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ly(e):n===`zh-CN`?Ry(e):zy(e)}),Vy=()=>`Chain`,Hy=()=>`链`,Uy=()=>`鏈`,Wy=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Vy(e):n===`zh-CN`?Hy(e):Uy(e)}),Gy=()=>`Receive Address`,Ky=()=>`收款地址`,qy=()=>`收款地址`,Jy=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Gy(e):n===`zh-CN`?Ky(e):qy(e)}),Yy=()=>`Callback URL`,Xy=()=>`回调地址`,Zy=()=>`回呼地址`,Qy=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Yy(e):n===`zh-CN`?Xy(e):Zy(e)}),$y=()=>`Redirect URL`,eb=()=>`跳转地址`,tb=()=>`跳轉地址`,nb=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?$y(e):n===`zh-CN`?eb(e):tb(e)}),rb=()=>`Block Transaction ID`,ib=()=>`区块交易 ID`,ab=()=>`區塊交易 ID`,ob=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?rb(e):n===`zh-CN`?ib(e):ab(e)}),sb=()=>`Parent Order`,cb=()=>`父订单`,lb=()=>`父訂單`,ub=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?sb(e):n===`zh-CN`?cb(e):lb(e)}),db=()=>`Created At`,fb=()=>`创建时间`,pb=()=>`建立時間`,mb=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?db(e):n===`zh-CN`?fb(e):pb(e)}),hb=()=>`Updated At`,gb=()=>`更新时间`,_b=()=>`更新時間`,vb=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?hb(e):n===`zh-CN`?gb(e):_b(e)}),yb=()=>`Order Details`,bb=()=>`订单详情`,xb=()=>`訂單詳情`,Sb=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?yb(e):n===`zh-CN`?bb(e):xb(e)}),Cb=()=>`View the full API response for the current order.`,wb=()=>`查看当前订单的完整接口返回信息。`,Tb=()=>`檢視當前訂單的完整介面返回資訊。`,Eb=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Cb(e):n===`zh-CN`?wb(e):Tb(e)}),Db=()=>`Loading...`,Ob=()=>`加载中...`,kb=()=>`載入中...`,Ab=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Db(e):n===`zh-CN`?Ob(e):kb(e)}),jb=()=>`Supported Payment Assets`,Mb=()=>`收款资产`,Nb=()=>`收款資產`,Pb=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?jb(e):n===`zh-CN`?Mb(e):Nb(e)}),Fb=()=>`Browse the currently supported networks and tokens without leaving this page.`,Ib=()=>`在当前页面直接查看支持的网络与代币列表。`,Lb=()=>`在當前頁面直接檢視支援的網路與代幣列表。`,Rb=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Fb(e):n===`zh-CN`?Ib(e):Lb(e)}),zb=()=>`Chain`,Bb=()=>`链`,Vb=()=>`鏈`,Hb=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?zb(e):n===`zh-CN`?Bb(e):Vb(e)}),Ub=()=>`Search chains or tokens...`,Wb=()=>`搜索链或代币...`,Gb=()=>`搜尋鏈或代幣...`,Kb=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ub(e):n===`zh-CN`?Wb(e):Gb(e)}),qb=()=>`No payment asset data`,Jb=()=>`暂无收款资产数据`,Yb=()=>`暫無收款資產資料`,Xb=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?qb(e):n===`zh-CN`?Jb(e):Yb(e)}),Zb=()=>`Chain`,Qb=()=>`链`,$b=()=>`鏈`,ex=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Zb(e):n===`zh-CN`?Qb(e):$b(e)}),tx=()=>`Supported Tokens`,nx=()=>`支持代币`,rx=()=>`支援代幣`,ix=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?tx(e):n===`zh-CN`?nx(e):rx(e)}),ax=()=>`Manage supported payment assets and integration guides in one place.`,ox=()=>`统一管理收款资产与各类支付接入配置。`,sx=()=>`統一管理收款資產與各類支付接入配置。`,cx=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ax(e):n===`zh-CN`?ox(e):sx(e)}),lx=()=>`Supported Integrations`,ux=()=>`支持的接入方式`,dx=()=>`支援的接入方式`,fx=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?lx(e):n===`zh-CN`?ux(e):dx(e)}),px=()=>`Entry endpoints, required configuration keys, and callback rules for each integration.`,mx=()=>`各接入方式的入口端点、关键配置项与回调要求一览。`,hx=()=>`各接入方式的入口端點、關鍵配置項與回呼要求一覽。`,gx=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?px(e):n===`zh-CN`?mx(e):hx(e)}),_x=()=>`Name`,vx=()=>`名称`,yx=()=>`名稱`,bx=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?_x(e):n===`zh-CN`?vx(e):yx(e)}),xx=()=>`Entry`,Sx=()=>`接入入口`,Cx=()=>`接入入口`,wx=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?xx(e):n===`zh-CN`?Sx(e):Cx(e)}),Tx=()=>`Request Body`,Ex=()=>`请求体`,Dx=()=>`請求體`,Ox=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Tx(e):n===`zh-CN`?Ex(e):Dx(e)}),kx=()=>`Callback`,Ax=()=>`回调要求`,jx=()=>`回呼要求`,Mx=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?kx(e):n===`zh-CN`?Ax(e):jx(e)}),Nx=()=>`Verify signature and return plain text ok; payload includes trade_id · order_id · status · actual_amount · signature`,Px=()=>`验签后返回纯文本 ok;回调包含 trade_id · order_id · status · actual_amount · signature`,Fx=()=>`驗籤後返回純文字 ok;回呼含 trade_id · order_id · status · actual_amount · signature`,Ix=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Nx(e):n===`zh-CN`?Px(e):Fx(e)}),Lx=()=>`Verify signature and return plain text ok; EPay-style fields (trade_no · out_trade_no · trade_status)`,Rx=()=>`验签后返回纯文本 ok;回调字段兼容 EPay 风格(trade_no · out_trade_no · trade_status)`,zx=()=>`驗籤後返回純文字 ok;回呼欄位相容 EPay 風格(trade_no · out_trade_no · trade_status)`,Bx=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Lx(e):n===`zh-CN`?Rx(e):zx(e)}),Vx=()=>`Wallet deleted successfully`,Hx=()=>`钱包删除成功`,Ux=()=>`錢包刪除成功`,Wx=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Vx(e):n===`zh-CN`?Hx(e):Ux(e)}),Gx=()=>`Status updated`,Kx=()=>`状态已更新`,qx=()=>`狀態已更新`,Jx=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Gx(e):n===`zh-CN`?Kx(e):qx(e)}),Yx=()=>`Please configure chains and tokens in chain management first`,Xx=()=>`请先在链管理中配置链与代币`,Zx=()=>`請先在鏈管理中配置鏈與代幣`,Qx=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Yx(e):n===`zh-CN`?Xx(e):Zx(e)}),$x=()=>`Please enter at least one wallet address`,eS=()=>`请输入至少一个钱包地址`,tS=()=>`請輸入至少一個錢包地址`,nS=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?$x(e):n===`zh-CN`?eS(e):tS(e)}),rS=e=>`Batch import completed, succeeded ${e?.success}/${e?.total}`,iS=e=>`批量导入完成,成功 ${e?.success}/${e?.total}`,aS=e=>`批次匯入完成,成功 ${e?.success}/${e?.total}`,oS=((e,t={})=>{let n=t.locale??D();return n===`en-US`?rS(e):n===`zh-CN`?iS(e):aS(e)}),sS=()=>`Batch Import`,cS=()=>`批量导入`,lS=()=>`批次匯入`,uS=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?sS(e):n===`zh-CN`?cS(e):lS(e)}),dS=()=>`Add Wallet`,fS=()=>`新增钱包`,pS=()=>`新增錢包`,mS=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?dS(e):n===`zh-CN`?fS(e):pS(e)}),hS=()=>`Manage payment addresses, balance status, and remarks.`,gS=()=>`管理收款地址、余额状态与备注。`,_S=()=>`管理收款地址、餘額狀態與備註。`,vS=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?hS(e):n===`zh-CN`?gS(e):_S(e)}),yS=()=>`Address Management`,bS=()=>`地址管理`,xS=()=>`地址管理`,SS=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?yS(e):n===`zh-CN`?bS(e):xS(e)}),CS=()=>`Delete`,wS=()=>`删除`,TS=()=>`刪除`,ES=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?CS(e):n===`zh-CN`?wS(e):TS(e)}),DS=()=>`Confirm`,OS=()=>`确认`,kS=()=>`確認`,AS=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?DS(e):n===`zh-CN`?OS(e):kS(e)}),jS=e=>`Perform “${e?.action}” on wallet ${e?.address}.`,MS=e=>`将对钱包 ${e?.address} 执行“${e?.action}”操作。`,NS=e=>`將對錢包 ${e?.address} 執行“${e?.action}”操作。`,PS=((e,t={})=>{let n=t.locale??D();return n===`en-US`?jS(e):n===`zh-CN`?MS(e):NS(e)}),FS=()=>`Delete Wallet`,IS=()=>`删除钱包`,LS=()=>`刪除錢包`,RS=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?FS(e):n===`zh-CN`?IS(e):LS(e)}),zS=()=>`Confirm Wallet Action`,BS=()=>`钱包操作确认`,VS=()=>`錢包操作確認`,HS=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?zS(e):n===`zh-CN`?BS(e):VS(e)}),US=()=>`Batch Import Wallets`,WS=()=>`批量导入钱包`,GS=()=>`批次匯入錢包`,KS=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?US(e):n===`zh-CN`?WS(e):GS(e)}),qS=()=>`One wallet address per line, imported as watch-only wallets.`,JS=()=>`每行一个钱包地址,导入为观察钱包。`,YS=()=>`每行一個錢包地址,匯入為觀察錢包。`,XS=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?qS(e):n===`zh-CN`?JS(e):YS(e)}),ZS=()=>`Network`,QS=()=>`网络`,$S=()=>`網路`,eC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ZS(e):n===`zh-CN`?QS(e):$S(e)}),tC=()=>`Chain`,nC=()=>`链`,rC=()=>`鏈`,iC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?tC(e):n===`zh-CN`?nC(e):rC(e)}),aC=()=>`Select chain`,oC=()=>`选择链`,sC=()=>`選擇鏈`,cC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?aC(e):n===`zh-CN`?oC(e):sC(e)}),lC=()=>`Unnamed chain`,uC=()=>`未命名链`,dC=()=>`未命名鏈`,fC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?lC(e):n===`zh-CN`?uC(e):dC(e)}),pC=()=>`Wallet Address`,mC=()=>`钱包地址`,hC=()=>`錢包地址`,gC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?pC(e):n===`zh-CN`?mC(e):hC(e)}),_C=()=>`Cancel`,vC=()=>`取消`,yC=()=>`取消`,bC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?_C(e):n===`zh-CN`?vC(e):yC(e)}),xC=()=>`Importing...`,SC=()=>`导入中...`,CC=()=>`匯入中...`,wC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?xC(e):n===`zh-CN`?SC(e):CC(e)}),TC=()=>`Start Import`,EC=()=>`开始导入`,DC=()=>`開始匯入`,OC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?TC(e):n===`zh-CN`?EC(e):DC(e)}),kC=()=>`Search addresses or remarks...`,AC=()=>`搜索地址或备注...`,jC=()=>`搜尋地址或備註...`,MC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?kC(e):n===`zh-CN`?AC(e):jC(e)}),NC=()=>`No address data`,PC=()=>`暂无地址数据`,FC=()=>`暫無地址資料`,IC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?NC(e):n===`zh-CN`?PC(e):FC(e)}),LC=()=>`Status`,RC=()=>`状态`,zC=()=>`狀態`,BC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?LC(e):n===`zh-CN`?RC(e):zC(e)}),VC=()=>`Enabled`,HC=()=>`启用`,UC=()=>`啟用`,WC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?VC(e):n===`zh-CN`?HC(e):UC(e)}),GC=()=>`Address`,KC=()=>`地址`,qC=()=>`地址`,JC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?GC(e):n===`zh-CN`?KC(e):qC(e)}),YC=()=>`Order Count`,XC=()=>`订单数`,ZC=()=>`訂單數`,QC=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?YC(e):n===`zh-CN`?XC(e):ZC(e)}),$C=()=>`Source`,ew=()=>`来源`,tw=()=>`來源`,nw=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?$C(e):n===`zh-CN`?ew(e):tw(e)}),rw=()=>`Remark`,iw=()=>`备注`,aw=()=>`備註`,ow=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?rw(e):n===`zh-CN`?iw(e):aw(e)}),sw=()=>`Created At`,cw=()=>`创建时间`,lw=()=>`建立時間`,$=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?sw(e):n===`zh-CN`?cw(e):lw(e)}),uw=()=>`Updated At`,dw=()=>`更新时间`,fw=()=>`更新時間`,pw=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uw(e):n===`zh-CN`?dw(e):fw(e)}),mw=()=>`Actions`,hw=()=>`操作`,gw=()=>`操作`,_w=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mw(e):n===`zh-CN`?hw(e):gw(e)}),vw=()=>`Edit Remark`,yw=()=>`编辑备注`,bw=()=>`編輯備註`,xw=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vw(e):n===`zh-CN`?yw(e):bw(e)}),Sw=()=>`Loading...`,Cw=()=>`加载中...`,ww=()=>`載入中...`,Tw=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Sw(e):n===`zh-CN`?Cw(e):ww(e)}),Ew=()=>`Please configure supported tokens in chain management first`,Dw=()=>`请先在链管理中配置支持代币`,Ow=()=>`請先在鏈管理中配置支援代幣`,kw=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ew(e):n===`zh-CN`?Dw(e):Ow(e)}),Aw=()=>`Edit Wallet`,jw=()=>`编辑钱包`,Mw=()=>`編輯錢包`,Nw=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Aw(e):n===`zh-CN`?jw(e):Mw(e)}),Pw=()=>`Add Wallet`,Fw=()=>`新增钱包`,Iw=()=>`新增錢包`,Lw=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Pw(e):n===`zh-CN`?Fw(e):Iw(e)}),Rw=()=>`Modify wallet remark information.`,zw=()=>`修改钱包备注信息。`,Bw=()=>`修改錢包備註資訊。`,Vw=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Rw(e):n===`zh-CN`?zw(e):Bw(e)}),Hw=()=>`Add a new payment wallet.`,Uw=()=>`新增新的收款钱包。`,Ww=()=>`新增新的收款錢包。`,Gw=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Hw(e):n===`zh-CN`?Uw(e):Ww(e)}),Kw=()=>`Please enter wallet address`,qw=()=>`请输入钱包地址`,Jw=()=>`請輸入錢包地址`,Yw=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Kw(e):n===`zh-CN`?qw(e):Jw(e)}),Xw=()=>`Optional`,Zw=()=>`选填`,Qw=()=>`選填`,$w=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Xw(e):n===`zh-CN`?Zw(e):Qw(e)}),eT=()=>`Saving...`,tT=()=>`保存中...`,nT=()=>`儲存中...`,rT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?eT(e):n===`zh-CN`?tT(e):nT(e)}),iT=()=>`Save`,aT=()=>`保存`,oT=()=>`儲存`,sT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?iT(e):n===`zh-CN`?aT(e):oT(e)}),cT=()=>`Wallet remark updated successfully`,lT=()=>`钱包备注更新成功`,uT=()=>`錢包備註更新成功`,dT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cT(e):n===`zh-CN`?lT(e):uT(e)}),fT=()=>`Wallet added successfully`,pT=()=>`钱包新增成功`,mT=()=>`錢包新增成功`,hT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fT(e):n===`zh-CN`?pT(e):mT(e)}),gT=()=>`Please enter a valid address`,_T=()=>`请输入有效地址`,vT=()=>`請輸入有效地址`,yT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gT(e):n===`zh-CN`?_T(e):vT(e)}),bT=()=>`Please select a chain`,xT=()=>`请选择链`,ST=()=>`請選擇鏈`,CT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bT(e):n===`zh-CN`?xT(e):ST(e)}),wT=()=>`Chains & Tokens`,TT=()=>`链与代币`,ET=()=>`鏈與代幣`,DT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?wT(e):n===`zh-CN`?TT(e):ET(e)}),OT=e=>`${e?.count} chains`,kT=e=>`${e?.count} 条链`,AT=e=>`${e?.count} 條鏈`,jT=((e,t={})=>{let n=t.locale??D();return n===`en-US`?OT(e):n===`zh-CN`?kT(e):AT(e)}),MT=()=>`Search chain names...`,NT=()=>`搜索链名称...`,PT=()=>`搜尋鏈名稱...`,FT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?MT(e):n===`zh-CN`?NT(e):PT(e)}),IT=()=>`Overview`,LT=()=>`概览`,RT=()=>`總覽`,zT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?IT(e):n===`zh-CN`?LT(e):RT(e)}),BT=e=>`Total chains: ${e?.chains} | Total tokens: ${e?.tokens}`,VT=e=>`链总数: ${e?.chains} | 代币总数: ${e?.tokens}`,HT=e=>`鏈總數: ${e?.chains} | 代幣總數: ${e?.tokens}`,UT=((e,t={})=>{let n=t.locale??D();return n===`en-US`?BT(e):n===`zh-CN`?VT(e):HT(e)}),WT=()=>`Supported payment network`,GT=()=>`支持收款网络`,KT=()=>`支援收款網路`,qT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?WT(e):n===`zh-CN`?GT(e):KT(e)}),JT=()=>`No chain data`,YT=()=>`暂无链数据`,XT=()=>`暫無鏈資料`,ZT=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?JT(e):n===`zh-CN`?YT(e):XT(e)}),QT=()=>`Add Token`,$T=()=>`新增代币`,eE=()=>`新增代幣`,tE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?QT(e):n===`zh-CN`?$T(e):eE(e)}),nE=()=>`Manage supported blockchain networks and tokens, including status and basic parameters.`,rE=()=>`管理支持的区块链网络和代币,维护启用状态与基础参数。`,iE=()=>`管理支援的區塊鏈網路和代幣,維護啟用狀態與基礎引數。`,aE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nE(e):n===`zh-CN`?rE(e):iE(e)}),oE=e=>`Chain ${e?.status}`,sE=e=>`链已${e?.status}`,cE=e=>`鏈已${e?.status}`,lE=((e,t={})=>{let n=t.locale??D();return n===`en-US`?oE(e):n===`zh-CN`?sE(e):cE(e)}),uE=()=>`enabled`,dE=()=>`启用`,fE=()=>`啟用`,pE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uE(e):n===`zh-CN`?dE(e):fE(e)}),mE=()=>`disabled`,hE=()=>`停用`,gE=()=>`停用`,_E=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mE(e):n===`zh-CN`?hE(e):gE(e)}),vE=()=>`Token status updated`,yE=()=>`代币状态已更新`,bE=()=>`代幣狀態已更新`,xE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vE(e):n===`zh-CN`?yE(e):bE(e)}),SE=()=>`Token updated successfully`,CE=()=>`代币更新成功`,wE=()=>`代幣更新成功`,TE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?SE(e):n===`zh-CN`?CE(e):wE(e)}),EE=()=>`Token created successfully`,DE=()=>`代币创建成功`,OE=()=>`代幣建立成功`,kE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?EE(e):n===`zh-CN`?DE(e):OE(e)}),AE=()=>`Search token symbols...`,jE=()=>`搜索代币符号...`,ME=()=>`搜尋代幣符號...`,NE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?AE(e):n===`zh-CN`?jE(e):ME(e)}),PE=()=>`No chain token data`,FE=()=>`暂无链代币数据`,IE=()=>`暫無鏈代幣資料`,LE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?PE(e):n===`zh-CN`?FE(e):IE(e)}),RE=()=>`Token`,zE=()=>`代币`,BE=()=>`代幣`,VE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?RE(e):n===`zh-CN`?zE(e):BE(e)}),HE=()=>`Edit`,UE=()=>`编辑`,WE=()=>`編輯`,GE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?HE(e):n===`zh-CN`?UE(e):WE(e)}),KE=()=>`Delete`,qE=()=>`删除`,JE=()=>`刪除`,YE=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?KE(e):n===`zh-CN`?qE(e):JE(e)}),XE=()=>`Edit Chain Token`,ZE=()=>`编辑链代币`,QE=()=>`編輯鏈代幣`,$E=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?XE(e):n===`zh-CN`?ZE(e):QE(e)}),eD=()=>`Add Chain Token`,tD=()=>`新增链代币`,nD=()=>`新增鏈代幣`,rD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?eD(e):n===`zh-CN`?tD(e):nD(e)}),iD=()=>`Modify chain token configuration.`,aD=()=>`修改链代币配置。`,oD=()=>`修改鏈代幣配置。`,sD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?iD(e):n===`zh-CN`?aD(e):oD(e)}),cD=()=>`Add a new chain token configuration.`,lD=()=>`新增新的链代币配置。`,uD=()=>`新增新的鏈代幣配置。`,dD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cD(e):n===`zh-CN`?lD(e):uD(e)}),fD=()=>`Token Symbol`,pD=()=>`代币符号`,mD=()=>`代幣符號`,hD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fD(e):n===`zh-CN`?pD(e):mD(e)}),gD=()=>`Configure available tokens for this chain and maintain contract address, decimals, minimum amount, and enabled status.`,_D=()=>`为当前链配置可用代币,并维护合约地址、精度、最小金额与启用状态。`,vD=()=>`為當前鏈配置可用代幣,並維護合約地址、精度、最小金額與啟用狀態。`,yD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gD(e):n===`zh-CN`?_D(e):vD(e)}),bD=()=>`Contract Address`,xD=()=>`合约地址`,SD=()=>`合約地址`,CD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bD(e):n===`zh-CN`?xD(e):SD(e)}),wD=()=>`Decimals`,TD=()=>`精度`,ED=()=>`精度`,DD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?wD(e):n===`zh-CN`?TD(e):ED(e)}),OD=()=>`Minimum Amount`,kD=()=>`最小金额`,AD=()=>`最小金額`,jD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?OD(e):n===`zh-CN`?kD(e):AD(e)}),MD=()=>`Create`,ND=()=>`创建`,PD=()=>`建立`,FD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?MD(e):n===`zh-CN`?ND(e):PD(e)}),ID=()=>`Save Changes`,LD=()=>`保存修改`,RD=()=>`儲存修改`,zD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ID(e):n===`zh-CN`?LD(e):RD(e)}),BD=()=>`Please select a chain`,VD=()=>`请选择链`,HD=()=>`請選擇鏈`,UD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?BD(e):n===`zh-CN`?VD(e):HD(e)}),WD=()=>`Please enter token symbol`,GD=()=>`请输入代币符号`,KD=()=>`請輸入代幣符號`,qD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?WD(e):n===`zh-CN`?GD(e):KD(e)}),JD=()=>`Please enter valid decimals`,YD=()=>`请输入有效精度`,XD=()=>`請輸入有效精度`,ZD=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?JD(e):n===`zh-CN`?YD(e):XD(e)}),QD=()=>`Please enter a valid minimum amount`,$D=()=>`请输入有效最小金额`,eO=()=>`請輸入有效最小金額`,tO=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?QD(e):n===`zh-CN`?$D(e):eO(e)}),nO=()=>`RPC Nodes`,rO=()=>`RPC 节点`,iO=()=>`RPC 節點`,aO=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nO(e):n===`zh-CN`?rO(e):iO(e)}),oO=e=>`${e?.count} chains`,sO=e=>`${e?.count} 条链`,cO=e=>`${e?.count} 條鏈`,lO=((e,t={})=>{let n=t.locale??D();return n===`en-US`?oO(e):n===`zh-CN`?sO(e):cO(e)}),uO=()=>`Search chain names or network...`,dO=()=>`搜索链名称或 network...`,fO=()=>`搜尋鏈名或 network...`,pO=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uO(e):n===`zh-CN`?dO(e):fO(e)}),mO=()=>`Overview`,hO=()=>`概览`,gO=()=>`總覽`,_O=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mO(e):n===`zh-CN`?hO(e):gO(e)}),vO=e=>`Total chains: ${e?.chains} | Total nodes: ${e?.nodes}`,yO=e=>`链总数: ${e?.chains} | 节点总数: ${e?.nodes}`,bO=e=>`鏈總數: ${e?.chains} | 節點總數: ${e?.nodes}`,xO=((e,t={})=>{let n=t.locale??D();return n===`en-US`?vO(e):n===`zh-CN`?yO(e):bO(e)}),SO=()=>`Unnamed chain`,CO=()=>`未命名链`,wO=()=>`未命名鏈`,TO=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?SO(e):n===`zh-CN`?CO(e):wO(e)}),EO=e=>`Nodes: ${e?.count}`,DO=e=>`节点数: ${e?.count}`,OO=e=>`節點數: ${e?.count}`,kO=((e,t={})=>{let n=t.locale??D();return n===`en-US`?EO(e):n===`zh-CN`?DO(e):OO(e)}),AO=()=>`No chain data`,jO=()=>`暂无链数据`,MO=()=>`暫無鏈資料`,NO=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?AO(e):n===`zh-CN`?jO(e):MO(e)}),PO=()=>`Add Node`,FO=()=>`新增节点`,IO=()=>`新增節點`,LO=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?PO(e):n===`zh-CN`?FO(e):IO(e)}),RO=()=>`Manage RPC nodes, weights, and health status for each chain.`,zO=()=>`管理各链 RPC 节点、权重与健康状态。`,BO=()=>`管理各鏈 RPC 節點、權重與健康狀態。`,VO=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?RO(e):n===`zh-CN`?zO(e):BO(e)}),HO=e=>`Health check completed, status: ${e?.status}${e?.latency}`,UO=e=>`健康检查完成,状态: ${e?.status}${e?.latency}`,WO=e=>`健康檢查完成,狀態: ${e?.status}${e?.latency}`,GO=((e,t={})=>{let n=t.locale??D();return n===`en-US`?HO(e):n===`zh-CN`?UO(e):WO(e)}),KO=e=>`, latency ${e?.latency}ms`,qO=e=>`,延迟 ${e?.latency}ms`,JO=e=>`,延遲 ${e?.latency}ms`,YO=((e,t={})=>{let n=t.locale??D();return n===`en-US`?KO(e):n===`zh-CN`?qO(e):JO(e)}),XO=()=>`Confirm`,ZO=()=>`确认`,QO=()=>`確認`,$O=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?XO(e):n===`zh-CN`?ZO(e):QO(e)}),ek=e=>`Perform “${e?.action}” on RPC node ${e?.url}.`,tk=e=>`将对 RPC 节点 ${e?.url} 执行“${e?.action}”操作。`,nk=e=>`將對 RPC 節點 ${e?.url} 執行“${e?.action}”操作。`,rk=((e,t={})=>{let n=t.locale??D();return n===`en-US`?ek(e):n===`zh-CN`?tk(e):nk(e)}),ik=()=>`Confirm RPC Node Action`,ak=()=>`RPC 节点操作确认`,ok=()=>`RPC 節點操作確認`,sk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ik(e):n===`zh-CN`?ak(e):ok(e)}),ck=()=>`Health Status`,lk=()=>`健康状态`,uk=()=>`健康狀態`,dk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ck(e):n===`zh-CN`?lk(e):uk(e)}),fk=()=>`OK`,pk=()=>`正常`,mk=()=>`正常`,hk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fk(e):n===`zh-CN`?pk(e):mk(e)}),gk=()=>`Down`,_k=()=>`异常`,vk=()=>`異常`,yk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gk(e):n===`zh-CN`?_k(e):vk(e)}),bk=()=>`Unknown`,xk=()=>`未知`,Sk=()=>`未知`,Ck=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bk(e):n===`zh-CN`?xk(e):Sk(e)}),wk=()=>`Chain Network`,Tk=()=>`链网络`,Ek=()=>`鏈網路`,Dk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?wk(e):n===`zh-CN`?Tk(e):Ek(e)}),Ok=()=>`Connection Type`,kk=()=>`连接类型`,Ak=()=>`連線型別`,jk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ok(e):n===`zh-CN`?kk(e):Ak(e)}),Mk=()=>`Node URL`,Nk=()=>`节点 URL`,Pk=()=>`節點 URL`,Fk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Mk(e):n===`zh-CN`?Nk(e):Pk(e)}),Ik=()=>`Weight`,Lk=()=>`权重`,Rk=()=>`權重`,zk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ik(e):n===`zh-CN`?Lk(e):Rk(e)}),Bk=()=>`Latest Latency`,Vk=()=>`最近延迟`,Hk=()=>`最近延遲`,Uk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Bk(e):n===`zh-CN`?Vk(e):Hk(e)}),Wk=()=>`Last Checked At`,Gk=()=>`最近检查时间`,Kk=()=>`最近檢查時間`,qk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Wk(e):n===`zh-CN`?Gk(e):Kk(e)}),Jk=()=>`Health Check`,Yk=()=>`健康检查`,Xk=()=>`健康檢查`,Zk=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Jk(e):n===`zh-CN`?Yk(e):Xk(e)}),Qk=()=>`Search chain network or node URL...`,$k=()=>`搜索链网络或节点 URL...`,eA=()=>`搜尋鏈網路或節點 URL...`,tA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Qk(e):n===`zh-CN`?$k(e):eA(e)}),nA=()=>`No RPC node data`,rA=()=>`暂无 RPC 节点数据`,iA=()=>`暫無 RPC 節點資料`,aA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nA(e):n===`zh-CN`?rA(e):iA(e)}),oA=()=>`Edit`,sA=()=>`编辑`,cA=()=>`編輯`,lA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?oA(e):n===`zh-CN`?sA(e):cA(e)}),uA=()=>`Edit RPC Node`,dA=()=>`编辑 RPC 节点`,fA=()=>`編輯 RPC 節點`,pA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uA(e):n===`zh-CN`?dA(e):fA(e)}),mA=()=>`Add RPC Node`,hA=()=>`新增 RPC 节点`,gA=()=>`新增 RPC 節點`,_A=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mA(e):n===`zh-CN`?hA(e):gA(e)}),vA=()=>`Modify RPC node configuration.`,yA=()=>`修改 RPC 节点配置。`,bA=()=>`修改 RPC 節點配置。`,xA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vA(e):n===`zh-CN`?yA(e):bA(e)}),SA=()=>`Configure a new RPC node.`,CA=()=>`配置新的 RPC 节点信息。`,wA=()=>`配置新的 RPC 節點資訊。`,TA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?SA(e):n===`zh-CN`?CA(e):wA(e)}),EA=()=>`Select type`,DA=()=>`选择类型`,OA=()=>`選擇型別`,kA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?EA(e):n===`zh-CN`?DA(e):OA(e)}),AA=()=>`Optional`,jA=()=>`可选`,MA=()=>`可選`,NA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?AA(e):n===`zh-CN`?jA(e):MA(e)}),PA=()=>`Enable immediately after creation`,FA=()=>`创建后立即启用`,IA=()=>`建立後立即啟用`,LA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?PA(e):n===`zh-CN`?FA(e):IA(e)}),RA=()=>`Disabled nodes will not participate in scheduling.`,zA=()=>`关闭后该节点不会参与排程。`,BA=()=>`關閉後該節點不會參與排程。`,VA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?RA(e):n===`zh-CN`?zA(e):BA(e)}),HA=()=>`RPC node updated successfully`,UA=()=>`RPC 节点更新成功`,WA=()=>`RPC 節點更新成功`,GA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?HA(e):n===`zh-CN`?UA(e):WA(e)}),KA=()=>`RPC node created successfully`,qA=()=>`RPC 节点创建成功`,JA=()=>`RPC 節點建立成功`,YA=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?KA(e):n===`zh-CN`?qA(e):JA(e)}),XA=()=>`Please enter chain network`,ZA=()=>`请输入链网络`,QA=()=>`請輸入鏈網路`,$A=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?XA(e):n===`zh-CN`?ZA(e):QA(e)}),ej=()=>`Please enter a valid URL`,tj=()=>`请输入合法 URL`,nj=()=>`請輸入合法 URL`,rj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ej(e):n===`zh-CN`?tj(e):nj(e)}),ij=()=>`Weight must be at least 1`,aj=()=>`权重至少为 1`,oj=()=>`權重至少為 1`,sj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ij(e):n===`zh-CN`?aj(e):oj(e)}),cj=()=>`All`,lj=()=>`全部`,uj=()=>`全部`,dj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cj(e):n===`zh-CN`?lj(e):uj(e)}),fj=()=>`Enabled`,pj=()=>`已启用`,mj=()=>`已啟用`,hj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fj(e):n===`zh-CN`?pj(e):mj(e)}),gj=()=>`Disabled`,_j=()=>`已停用`,vj=()=>`已停用`,yj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gj(e):n===`zh-CN`?_j(e):vj(e)}),bj=()=>`Deleted successfully`,xj=()=>`删除成功`,Sj=()=>`刪除成功`,Cj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bj(e):n===`zh-CN`?xj(e):Sj(e)}),wj=()=>`Failed to fetch secret key`,Tj=()=>`获取密钥失败`,Ej=()=>`取得金鑰失敗`,Dj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?wj(e):n===`zh-CN`?Tj(e):Ej(e)}),Oj=()=>`Missing API Key ID`,kj=()=>`缺少 API Key ID`,Aj=()=>`缺少 API Key ID`,jj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Oj(e):n===`zh-CN`?kj(e):Aj(e)}),Mj=()=>`No secret key available to copy`,Nj=()=>`暂无密钥可复制`,Pj=()=>`暫無金鑰可複製`,Fj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Mj(e):n===`zh-CN`?Nj(e):Pj(e)}),Ij=()=>`Secret key copied`,Lj=()=>`密钥已复制`,Rj=()=>`金鑰已複製`,zj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Ij(e):n===`zh-CN`?Lj(e):Rj(e)}),Bj=()=>`Secret key rotated`,Vj=()=>`密钥已轮换`,Hj=()=>`金鑰已輪換`,Uj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Bj(e):n===`zh-CN`?Vj(e):Hj(e)}),Wj=()=>`Create Key`,Gj=()=>`创建 Key`,Kj=()=>`建立 Key`,qj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Wj(e):n===`zh-CN`?Gj(e):Kj(e)}),Jj=()=>`Manage payment keys, access restrictions, and callback URL settings.`,Yj=()=>`管理支付 Key、访问限制与通知地址配置。`,Xj=()=>`管理支付 Key、訪問限制與通知地址配置。`,Zj=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Jj(e):n===`zh-CN`?Yj(e):Xj(e)}),Qj=()=>`Payment Management`,$j=()=>`支付管理`,eM=()=>`支付管理`,tM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Qj(e):n===`zh-CN`?$j(e):eM(e)}),nM=()=>`Search PID, name, or callback URL...`,rM=()=>`搜索 PID、名称或通知地址...`,iM=()=>`搜尋 PID、名稱或通知地址...`,aM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nM(e):n===`zh-CN`?rM(e):iM(e)}),oM=()=>`Ascending`,sM=()=>`Ascending`,cM=()=>`Ascending`,lM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?oM(e):n===`zh-CN`?sM(e):cM(e)}),uM=()=>`Descending`,dM=()=>`Descending`,fM=()=>`Descending`,pM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uM(e):n===`zh-CN`?dM(e):fM(e)}),mM=()=>`Delete`,hM=()=>`删除`,gM=()=>`刪除`,_M=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mM(e):n===`zh-CN`?hM(e):gM(e)}),vM=()=>`Confirm`,yM=()=>`确认`,bM=()=>`確認`,xM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vM(e):n===`zh-CN`?yM(e):bM(e)}),SM=e=>`Perform “${e?.action}” on ${e?.target}.`,CM=e=>`将对 ${e?.target} 执行“${e?.action}”操作。`,wM=e=>`將對 ${e?.target} 執行“${e?.action}”操作。`,TM=((e,t={})=>{let n=t.locale??D();return n===`en-US`?SM(e):n===`zh-CN`?CM(e):wM(e)}),EM=()=>`Delete API Key`,DM=()=>`删除 API Key`,OM=()=>`刪除 API Key`,kM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?EM(e):n===`zh-CN`?DM(e):OM(e)}),AM=()=>`Confirm API Key Action`,jM=()=>`API Key 操作确认`,MM=()=>`API Key 操作確認`,NM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?AM(e):n===`zh-CN`?jM(e):MM(e)}),PM=()=>`API Key Stats`,FM=()=>`API Key 统计`,IM=()=>`API Key 統計`,LM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?PM(e):n===`zh-CN`?FM(e):IM(e)}),RM=()=>`Call Count`,zM=()=>`呼叫次数`,BM=()=>`呼叫次數`,VM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?RM(e):n===`zh-CN`?zM(e):BM(e)}),HM=()=>`Last Used`,UM=()=>`最近使用`,WM=()=>`最近使用`,GM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?HM(e):n===`zh-CN`?UM(e):WM(e)}),KM=()=>`No records`,qM=()=>`暂无记录`,JM=()=>`暫無記錄`,YM=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?KM(e):n===`zh-CN`?qM(e):JM(e)}),XM=()=>`No API Keys`,ZM=()=>`暂无 API Key`,QM=()=>`暫無 API Key`,$M=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?XM(e):n===`zh-CN`?ZM(e):QM(e)}),eN=()=>`Loading...`,tN=()=>`加载中...`,nN=()=>`載入中...`,rN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?eN(e):n===`zh-CN`?tN(e):nN(e)}),iN=()=>`Callback URL`,aN=()=>`回调地址`,oN=()=>`回呼地址`,sN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?iN(e):n===`zh-CN`?aN(e):oN(e)}),cN=()=>`IP Whitelist`,lN=()=>`IP 白名单`,uN=()=>`IP 白名單`,dN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cN(e):n===`zh-CN`?lN(e):uN(e)}),fN=()=>`Secret`,pN=()=>`密钥`,mN=()=>`金鑰`,hN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fN(e):n===`zh-CN`?pN(e):mN(e)}),gN=()=>`Edit`,_N=()=>`编辑`,vN=()=>`編輯`,yN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gN(e):n===`zh-CN`?_N(e):vN(e)}),bN=()=>`Rotate Secret`,xN=()=>`轮换密钥`,SN=()=>`輪換金鑰`,CN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bN(e):n===`zh-CN`?xN(e):SN(e)}),wN=()=>`Name`,TN=()=>`名称`,EN=()=>`名稱`,DN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?wN(e):n===`zh-CN`?TN(e):EN(e)}),ON=()=>`My App`,kN=()=>`我的应用`,AN=()=>`我的應用`,jN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ON(e):n===`zh-CN`?kN(e):AN(e)}),MN=()=>`Edit API Key`,NN=()=>`编辑 API Key`,PN=()=>`編輯 API Key`,FN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?MN(e):n===`zh-CN`?NN(e):PN(e)}),IN=()=>`Create API Key`,LN=()=>`创建 API Key`,RN=()=>`建立 API Key`,zN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?IN(e):n===`zh-CN`?LN(e):RN(e)}),BN=()=>`Modify API Key configuration.`,VN=()=>`修改 API Key 配置。`,HN=()=>`修改 API Key 配置。`,UN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?BN(e):n===`zh-CN`?VN(e):HN(e)}),WN=()=>`Create a new API secret key.`,GN=()=>`创建新的 API 密钥。`,KN=()=>`建立新的 API 金鑰。`,qN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?WN(e):n===`zh-CN`?GN(e):KN(e)}),JN=()=>`IP Whitelist (Optional)`,YN=()=>`IP 白名单(选填)`,XN=()=>`IP 白名單(選填)`,ZN=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?JN(e):n===`zh-CN`?YN(e):XN(e)}),QN=()=>`⚠️ Secret Key is shown only once, please save it immediately`,$N=()=>`⚠️ Secret Key,仅展示一次,请立即保存`,eP=()=>`⚠️ Secret Key,僅展示一次,請立即儲存`,tP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?QN(e):n===`zh-CN`?$N(e):eP(e)}),nP=()=>`Close`,rP=()=>`关闭`,iP=()=>`關閉`,aP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nP(e):n===`zh-CN`?rP(e):iP(e)}),oP=()=>`Save Changes`,sP=()=>`保存修改`,cP=()=>`儲存修改`,lP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?oP(e):n===`zh-CN`?sP(e):cP(e)}),uP=()=>`Create Key`,dP=()=>`创建 Key`,fP=()=>`建立 Key`,pP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uP(e):n===`zh-CN`?dP(e):fP(e)}),mP=()=>`API Key updated successfully`,hP=()=>`API Key 更新成功`,gP=()=>`API Key 更新成功`,_P=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mP(e):n===`zh-CN`?hP(e):gP(e)}),vP=()=>`API Key created successfully`,yP=()=>`API Key 创建成功`,bP=()=>`API Key 建立成功`,xP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vP(e):n===`zh-CN`?yP(e):bP(e)}),SP=()=>`Please enter a name`,CP=()=>`请输入名称`,wP=()=>`請輸入名稱`,TP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?SP(e):n===`zh-CN`?CP(e):wP(e)}),EP=e=>`${e?.action} succeeded`,DP=e=>`${e?.action}成功`,OP=e=>`${e?.action}成功`,kP=((e,t={})=>{let n=t.locale??D();return n===`en-US`?EP(e):n===`zh-CN`?DP(e):OP(e)}),AP=()=>`Please enter your current password`,jP=()=>`请输入当前密码`,MP=()=>`請輸入當前密碼`,NP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?AP(e):n===`zh-CN`?jP(e):MP(e)}),PP=()=>`New password must be at least 8 characters`,FP=()=>`新密码至少 8 位`,IP=()=>`新密碼至少 8 位`,LP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?PP(e):n===`zh-CN`?FP(e):IP(e)}),RP=()=>`Please confirm your new password`,zP=()=>`请确认新密码`,BP=()=>`請確認新密碼`,VP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?RP(e):n===`zh-CN`?zP(e):BP(e)}),HP=()=>`The two passwords do not match`,UP=()=>`两次输入的密码不一致`,WP=()=>`兩次輸入的密碼不一致`,GP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?HP(e):n===`zh-CN`?UP(e):WP(e)}),KP=()=>`Password updated successfully`,qP=()=>`密码修改成功`,JP=()=>`密碼修改成功`,YP=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?KP(e):n===`zh-CN`?qP(e):JP(e)}),XP=()=>`Current password`,ZP=()=>`当前密码`,QP=()=>`當前密碼`,$P=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?XP(e):n===`zh-CN`?ZP(e):QP(e)}),eF=()=>`Enter current password`,tF=()=>`输入当前密码`,nF=()=>`輸入當前密碼`,rF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?eF(e):n===`zh-CN`?tF(e):nF(e)}),iF=()=>`New password`,aF=()=>`新密码`,oF=()=>`新密碼`,sF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?iF(e):n===`zh-CN`?aF(e):oF(e)}),cF=()=>`At least 8 characters`,lF=()=>`至少 8 位`,uF=()=>`至少 8 位`,dF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cF(e):n===`zh-CN`?lF(e):uF(e)}),fF=()=>`Confirm new password`,pF=()=>`确认新密码`,mF=()=>`確認新密碼`,hF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fF(e):n===`zh-CN`?pF(e):mF(e)}),gF=()=>`Enter new password again`,_F=()=>`再次输入新密码`,vF=()=>`再次輸入新密碼`,yF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gF(e):n===`zh-CN`?_F(e):vF(e)}),bF=()=>`Saving…`,xF=()=>`保存中…`,SF=()=>`儲存中…`,CF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bF(e):n===`zh-CN`?xF(e):SF(e)}),wF=()=>`Save changes`,TF=()=>`保存修改`,EF=()=>`儲存修改`,DF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?wF(e):n===`zh-CN`?TF(e):EF(e)}),OF=()=>`System Settings`,kF=()=>`系统配置`,AF=()=>`系統配置`,jF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?OF(e):n===`zh-CN`?kF(e):AF(e)}),MF=()=>`Manage checkout basics, Telegram notifications, exchange rate strategy, and payment parameters in one place.`,NF=()=>`集中管理收银台基础配置、Telegram 通知、汇率策略与收款参数。`,PF=()=>`集中管理收銀臺基礎配置、Telegram 通知、匯率策略與收款引數。`,FF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?MF(e):n===`zh-CN`?NF(e):PF(e)}),IF=()=>`Configure checkout display information and success page copy.`,LF=()=>`配置收银台展示信息与支付成功页文案。`,RF=()=>`配置收銀臺展示資訊與支付成功頁文案。`,zF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?IF(e):n===`zh-CN`?LF(e):RF(e)}),BF=()=>`Please enter the checkout name`,VF=()=>`请输入收银台名称`,HF=()=>`請輸入收銀臺名稱`,UF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?BF(e):n===`zh-CN`?VF(e):HF(e)}),WF=()=>`Please enter a valid logo URL`,GF=()=>`请输入有效 Logo 地址`,KF=()=>`請輸入合法 Logo 地址`,qF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?WF(e):n===`zh-CN`?GF(e):KF(e)}),JF=()=>`Please enter the site title`,YF=()=>`请输入网站标题`,XF=()=>`請輸入網站標題`,ZF=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?JF(e):n===`zh-CN`?YF(e):XF(e)}),QF=()=>`Please enter the success page copy`,$F=()=>`请输入成功页文案`,eI=()=>`請輸入成功頁文案`,tI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?QF(e):n===`zh-CN`?$F(e):eI(e)}),nI=()=>`Please enter a valid support URL`,rI=()=>`请输入有效客服链接`,iI=()=>`請輸入合法客服連結`,aI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nI(e):n===`zh-CN`?rI(e):iI(e)}),oI=()=>`Base settings reset to defaults`,sI=()=>`基础配置已重置为默认值`,cI=()=>`基礎配置已重置為預設值`,lI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?oI(e):n===`zh-CN`?sI(e):cI(e)}),uI=()=>`Base settings saved`,dI=()=>`基础配置已保存`,fI=()=>`基礎配置已儲存`,pI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uI(e):n===`zh-CN`?dI(e):fI(e)}),mI=()=>`Checkout name`,hI=()=>`收银台名称`,gI=()=>`收銀臺名稱`,_I=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mI(e):n===`zh-CN`?hI(e):gI(e)}),vI=()=>`Logo URL`,yI=()=>`Logo URL`,bI=()=>`Logo URL`,xI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vI(e):n===`zh-CN`?yI(e):bI(e)}),SI=()=>`Site title`,CI=()=>`网站标题`,wI=()=>`網站標題`,TI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?SI(e):n===`zh-CN`?CI(e):wI(e)}),EI=()=>`Success page copy`,DI=()=>`支付成功页文案`,OI=()=>`支付成功頁文案`,kI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?EI(e):n===`zh-CN`?DI(e):OI(e)}),AI=()=>`Support URL`,jI=()=>`客服链接`,MI=()=>`客服連結`,NI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?AI(e):n===`zh-CN`?jI(e):MI(e)}),PI=()=>`Save base settings`,FI=()=>`保存基础配置`,II=()=>`儲存基礎配置`,LI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?PI(e):n===`zh-CN`?FI(e):II(e)}),RI=()=>`Reset to defaults`,zI=()=>`重置为默认值`,BI=()=>`重置為預設值`,VI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?RI(e):n===`zh-CN`?zI(e):BI(e)}),HI=()=>`Used for payment notifications and exception alerts.`,UI=()=>`用于收款通知与异常提醒推送。`,WI=()=>`用於收款通知與異常提醒推送。`,GI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?HI(e):n===`zh-CN`?UI(e):WI(e)}),KI=()=>`Please enter the Bot Token`,qI=()=>`请输入 Bot Token`,JI=()=>`請輸入 Bot Token`,YI=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?KI(e):n===`zh-CN`?qI(e):JI(e)}),XI=()=>`Please enter the Chat ID`,ZI=()=>`请输入 Chat ID`,QI=()=>`請輸入 Chat ID`,$I=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?XI(e):n===`zh-CN`?ZI(e):QI(e)}),eL=()=>`Telegram settings saved`,tL=()=>`Telegram 配置已保存`,nL=()=>`Telegram 配置已儲存`,rL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?eL(e):n===`zh-CN`?tL(e):nL(e)}),iL=()=>`Bot Token`,aL=()=>`Bot Token`,oL=()=>`Bot Token`,sL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?iL(e):n===`zh-CN`?aL(e):oL(e)}),cL=()=>`Chat ID`,lL=()=>`Chat ID`,uL=()=>`Chat ID`,dL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cL(e):n===`zh-CN`?lL(e):uL(e)}),fL=()=>`Payment notification switch`,pL=()=>`收款通知开关`,mL=()=>`收款通知開關`,hL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fL(e):n===`zh-CN`?pL(e):mL(e)}),gL=()=>`Abnormal notification switch`,_L=()=>`异常通知开关`,vL=()=>`異常通知開關`,yL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gL(e):n===`zh-CN`?_L(e):vL(e)}),bL=()=>`Save Telegram settings`,xL=()=>`保存 Telegram 配置`,SL=()=>`儲存 Telegram 配置`,CL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bL(e):n===`zh-CN`?xL(e):SL(e)}),wL=()=>`Reserve strategy parameters for future real exchange rate API integration.`,TL=()=>`为后续真实汇率介面接入预留策略参数。`,EL=()=>`為後續真實匯率介面接入預留策略引數。`,DL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?wL(e):n===`zh-CN`?TL(e):EL(e)}),OL=()=>`Please enter a valid API URL`,kL=()=>`请输入有效 API 地址`,AL=()=>`請輸入合法 API 地址`,jL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?OL(e):n===`zh-CN`?kL(e):AL(e)}),ML=()=>`Please enter a valid exchange rate`,NL=()=>`请输入有效汇率`,PL=()=>`請輸入有效匯率`,FL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ML(e):n===`zh-CN`?NL(e):PL(e)}),IL=()=>`Rate settings reset to defaults`,LL=()=>`汇率配置已重置为默认值`,RL=()=>`匯率配置已重置為預設值`,zL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?IL(e):n===`zh-CN`?LL(e):RL(e)}),BL=()=>`Rate settings saved`,VL=()=>`汇率配置已保存`,HL=()=>`匯率配置已儲存`,UL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?BL(e):n===`zh-CN`?VL(e):HL(e)}),WL=()=>`Exchange rate API URL`,GL=()=>`汇率 API 地址`,KL=()=>`匯率 API 地址`,qL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?WL(e):n===`zh-CN`?GL(e):KL(e)}),JL=()=>`Forced USDT rate`,YL=()=>`强制 USDT 汇率`,XL=()=>`強制 USDT 匯率`,ZL=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?JL(e):n===`zh-CN`?YL(e):XL(e)}),QL=()=>`Save rate settings`,$L=()=>`保存汇率配置`,eR=()=>`儲存匯率配置`,tR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?QL(e):n===`zh-CN`?$L(e):eR(e)}),nR=()=>`Reset to defaults`,rR=()=>`重置为默认值`,iR=()=>`重置為預設值`,aR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nR(e):n===`zh-CN`?rR(e):iR(e)}),oR=()=>`Configure the default payment token, fiat currency, and network.`,sR=()=>`配置默认收款代币、法币与网络。`,cR=()=>`配置預設收款代幣、法幣與網路。`,lR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?oR(e):n===`zh-CN`?sR(e):cR(e)}),uR=()=>`Payment settings saved`,dR=()=>`收款配置已保存`,fR=()=>`收款配置已儲存`,pR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uR(e):n===`zh-CN`?dR(e):fR(e)}),mR=()=>`Save payment settings`,hR=()=>`保存收款配置`,gR=()=>`儲存收款配置`,_R=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mR(e):n===`zh-CN`?hR(e):gR(e)}),vR=()=>`Appearance`,yR=()=>`外观`,bR=()=>`外觀`,xR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vR(e):n===`zh-CN`?yR(e):bR(e)}),SR=()=>`Customize the app appearance and switch between light and dark themes.`,CR=()=>`自定义应用外观,可在浅色与深色主题之间切换。`,wR=()=>`自定義應用外觀,可在淺色與深色主題之間切換。`,TR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?SR(e):n===`zh-CN`?CR(e):wR(e)}),ER=()=>`Font`,DR=()=>`字体`,OR=()=>`字型`,kR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ER(e):n===`zh-CN`?DR(e):OR(e)}),AR=()=>`Set the font you want to use in the dashboard.`,jR=()=>`设置你希望在控制台中使用的字体。`,MR=()=>`設定你希望在控制台中使用的字型。`,NR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?AR(e):n===`zh-CN`?jR(e):MR(e)}),PR=()=>`Theme`,FR=()=>`主题`,IR=()=>`主題`,LR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?PR(e):n===`zh-CN`?FR(e):IR(e)}),RR=()=>`Select the theme for the dashboard.`,zR=()=>`选择控制台的主题。`,BR=()=>`選擇控制台的主題。`,VR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?RR(e):n===`zh-CN`?zR(e):BR(e)}),HR=()=>`Update preferences`,UR=()=>`更新偏好设置`,WR=()=>`更新偏好設定`,GR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?HR(e):n===`zh-CN`?UR(e):WR(e)}),KR=()=>`Display`,qR=()=>`显示`,JR=()=>`顯示`,YR=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?KR(e):n===`zh-CN`?qR(e):JR(e)}),XR=()=>`Turn items on or off to control what is displayed in the app.`,ZR=()=>`开关各项内容,控制应用中展示的信息。`,QR=()=>`開關各項內容,控制應用中展示的資訊。`,$R=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?XR(e):n===`zh-CN`?ZR(e):QR(e)}),ez=()=>`Recents`,tz=()=>`最近专案`,nz=()=>`最近專案`,rz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?ez(e):n===`zh-CN`?tz(e):nz(e)}),iz=()=>`Home`,az=()=>`主页`,oz=()=>`主頁`,sz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?iz(e):n===`zh-CN`?az(e):oz(e)}),cz=()=>`Applications`,lz=()=>`应用`,uz=()=>`應用`,dz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cz(e):n===`zh-CN`?lz(e):uz(e)}),fz=()=>`Desktop`,pz=()=>`桌面`,mz=()=>`桌面`,hz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fz(e):n===`zh-CN`?pz(e):mz(e)}),gz=()=>`Downloads`,_z=()=>`下载`,vz=()=>`下載`,yz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gz(e):n===`zh-CN`?_z(e):vz(e)}),bz=()=>`Documents`,xz=()=>`文件`,Sz=()=>`文件`,Cz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bz(e):n===`zh-CN`?xz(e):Sz(e)}),wz=()=>`You have to select at least one item.`,Tz=()=>`至少选择一个专案。`,Ez=()=>`至少選擇一個專案。`,Dz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?wz(e):n===`zh-CN`?Tz(e):Ez(e)}),Oz=()=>`Sidebar`,kz=()=>`侧边栏`,Az=()=>`側邊欄`,jz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Oz(e):n===`zh-CN`?kz(e):Az(e)}),Mz=()=>`Select the items you want to display in the sidebar.`,Nz=()=>`选择你希望在侧边栏中显示的项目。`,Pz=()=>`選擇你希望在側邊欄中顯示的專案。`,Fz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Mz(e):n===`zh-CN`?Nz(e):Pz(e)}),Iz=()=>`Update display`,Lz=()=>`更新显示设置`,Rz=()=>`更新顯示設定`,zz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Iz(e):n===`zh-CN`?Lz(e):Rz(e)}),Bz=()=>`Notifications`,Vz=()=>`通知`,Hz=()=>`通知`,Uz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Bz(e):n===`zh-CN`?Vz(e):Hz(e)}),Wz=()=>`Configure how you receive notifications.`,Gz=()=>`配置你接收通知的方式。`,Kz=()=>`配置你接收通知的方式。`,qz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Wz(e):n===`zh-CN`?Gz(e):Kz(e)}),Jz=()=>`Please select a notification type.`,Yz=()=>`请选择通知类型。`,Xz=()=>`請選擇通知型別。`,Zz=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Jz(e):n===`zh-CN`?Yz(e):Xz(e)}),Qz=()=>`Notify me about...`,$z=()=>`通知我关于……`,eB=()=>`通知我關於……`,tB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?Qz(e):n===`zh-CN`?$z(e):eB(e)}),nB=()=>`All new messages`,rB=()=>`所有新讯息`,iB=()=>`所有新訊息`,aB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nB(e):n===`zh-CN`?rB(e):iB(e)}),oB=()=>`Direct messages and mentions`,sB=()=>`私信和提及`,cB=()=>`私信和提及`,lB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?oB(e):n===`zh-CN`?sB(e):cB(e)}),uB=()=>`Nothing`,dB=()=>`不接收通知`,fB=()=>`不接收通知`,pB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uB(e):n===`zh-CN`?dB(e):fB(e)}),mB=()=>`Email Notifications`,hB=()=>`邮件通知`,gB=()=>`郵件通知`,_B=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mB(e):n===`zh-CN`?hB(e):gB(e)}),vB=()=>`Communication emails`,yB=()=>`通讯邮件`,bB=()=>`通訊郵件`,xB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vB(e):n===`zh-CN`?yB(e):bB(e)}),SB=()=>`Receive emails about your account activity.`,CB=()=>`接收与你账户活动相关的邮件。`,wB=()=>`接收與你賬戶活動相關的郵件。`,TB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?SB(e):n===`zh-CN`?CB(e):wB(e)}),EB=()=>`Marketing emails`,DB=()=>`营销邮件`,OB=()=>`營銷郵件`,kB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?EB(e):n===`zh-CN`?DB(e):OB(e)}),AB=()=>`Receive emails about new products, features, and more.`,jB=()=>`接收有关新产品、新功能等内容的邮件。`,MB=()=>`接收有關新產品、新功能等內容的郵件。`,NB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?AB(e):n===`zh-CN`?jB(e):MB(e)}),PB=()=>`Social emails`,FB=()=>`社交邮件`,IB=()=>`社交郵件`,LB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?PB(e):n===`zh-CN`?FB(e):IB(e)}),RB=()=>`Receive emails for friend requests, follows, and more.`,zB=()=>`接收好友请求、关注等社交邮件。`,BB=()=>`接收好友請求、關注等社交郵件。`,VB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?RB(e):n===`zh-CN`?zB(e):BB(e)}),HB=()=>`Security emails`,UB=()=>`安全邮件`,WB=()=>`安全郵件`,GB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?HB(e):n===`zh-CN`?UB(e):WB(e)}),KB=()=>`Receive emails about your account activity and security.`,qB=()=>`接收与你账户活动和安全相关的邮件。`,JB=()=>`接收與你賬戶活動和安全相關的郵件。`,YB=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?KB(e):n===`zh-CN`?qB(e):JB(e)}),XB=()=>`Use different settings for my mobile devices`,ZB=()=>`我的移动装置使用不同的通知设置`,QB=()=>`我的移動裝置使用不同的通知設定`,$B=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?XB(e):n===`zh-CN`?ZB(e):QB(e)}),eV=()=>`You can manage your mobile notifications in the`,tV=()=>`你可以在`,nV=()=>`你可以在`,rV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?eV(e):n===`zh-CN`?tV(e):nV(e)}),iV=()=>`mobile settings`,aV=()=>`移动端设置`,oV=()=>`移動端設定`,sV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?iV(e):n===`zh-CN`?aV(e):oV(e)}),cV=()=>`page.`,lV=()=>`在在页面中管理移动通知。`,uV=()=>`頁面中管理移動通知。`,dV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cV(e):n===`zh-CN`?lV(e):uV(e)}),fV=()=>`Update notifications`,pV=()=>`更新通知设置`,mV=()=>`更新通知設定`,hV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fV(e):n===`zh-CN`?pV(e):mV(e)}),gV=()=>`Select a settings page`,_V=()=>`选择配置项`,vV=()=>`選擇配置項`,yV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?gV(e):n===`zh-CN`?_V(e):vV(e)}),bV=()=>`Saved successfully`,xV=()=>`保存成功`,SV=()=>`儲存成功`,CV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?bV(e):n===`zh-CN`?xV(e):SV(e)}),wV=()=>`Access Forbidden`,TV=()=>`禁止访问`,EV=()=>`禁止訪問`,DV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?wV(e):n===`zh-CN`?TV(e):EV(e)}),OV=()=>`You do not have permission to access this resource.`,kV=()=>`你没有访问此资源所需的许可权。`,AV=()=>`你沒有訪問此資源所需的許可權。`,jV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?OV(e):n===`zh-CN`?kV(e):AV(e)}),MV=()=>`Please contact your administrator for access.`,NV=()=>`请联络管理员以获取存取权限。`,PV=()=>`請聯絡管理員以取得存取權限。`,FV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?MV(e):n===`zh-CN`?NV(e):PV(e)}),IV=()=>`Website is under maintenance!`,LV=()=>`网站维护中!`,RV=()=>`網站維護中!`,zV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?IV(e):n===`zh-CN`?LV(e):RV(e)}),BV=()=>`The site is not available at the moment.`,VV=()=>`站点当前暂不可用。`,HV=()=>`站點當前暫不可用。`,UV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?BV(e):n===`zh-CN`?VV(e):HV(e)}),WV=()=>`We will be back online shortly.`,GV=()=>`我们会尽快恢复服务。`,KV=()=>`我們會盡快恢復服務。`,qV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?WV(e):n===`zh-CN`?GV(e):KV(e)}),JV=()=>`Unauthorized Access`,YV=()=>`未授权访问`,XV=()=>`未授權訪問`,ZV=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?JV(e):n===`zh-CN`?YV(e):XV(e)}),QV=()=>`Please log in with the appropriate credentials.`,$V=()=>`请使用正确的凭证登录。`,eH=()=>`請使用正確的憑證登入。`,tH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?QV(e):n===`zh-CN`?$V(e):eH(e)}),nH=()=>`Once signed in, you can access this resource.`,rH=()=>`登录后即可访问此资源。`,iH=()=>`登入後即可訪問此資源。`,aH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?nH(e):n===`zh-CN`?rH(e):iH(e)}),oH=()=>`User`,sH=()=>`用户`,cH=()=>`使用者`,lH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?oH(e):n===`zh-CN`?sH(e):cH(e)}),uH=()=>`Font`,dH=()=>`字体`,fH=()=>`字型`,pH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?uH(e):n===`zh-CN`?dH(e):fH(e)}),mH=()=>`Secure Payments, Fully in Control`,hH=()=>`安全收付,尽在掌握`,gH=()=>`安全收付,盡在掌握`,_H=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?mH(e):n===`zh-CN`?hH(e):gH(e)}),vH=()=>`Multi-chain USDT collection, real-time callbacks, and smart settlement — reliable payment infrastructure for your business.`,yH=()=>`多链 USDT 自动收款、实时回调、智能结算,为您的业务提供稳定可靠的支付基础设施。`,bH=()=>`多鏈 USDT 自動收款、即時回呼、智能結算,為您的業務提供穩定可靠的支付基礎設施。`,xH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?vH(e):n===`zh-CN`?yH(e):bH(e)}),SH=()=>`Pending`,CH=()=>`待付款`,wH=()=>`待付款`,TH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?SH(e):n===`zh-CN`?CH(e):wH(e)}),EH=()=>`Paid`,DH=()=>`已付款`,OH=()=>`已付款`,kH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?EH(e):n===`zh-CN`?DH(e):OH(e)}),AH=()=>`Expired`,jH=()=>`已过期`,MH=()=>`已過期`,NH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?AH(e):n===`zh-CN`?jH(e):MH(e)}),PH=()=>`Closed`,FH=()=>`已关闭`,IH=()=>`已關閉`,LH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?PH(e):n===`zh-CN`?FH(e):IH(e)}),RH=()=>`Active`,zH=()=>`启用中`,BH=()=>`啟用中`,VH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?RH(e):n===`zh-CN`?zH(e):BH(e)}),HH=()=>`Disabled`,UH=()=>`已禁用`,WH=()=>`已停用`,GH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?HH(e):n===`zh-CN`?UH(e):WH(e)}),KH=()=>`Monitoring`,qH=()=>`监控中`,JH=()=>`監控中`,YH=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?KH(e):n===`zh-CN`?qH(e):JH(e)}),XH=()=>`Active`,ZH=()=>`启用中`,QH=()=>`啟用中`,$H=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?XH(e):n===`zh-CN`?ZH(e):QH(e)}),eU=()=>`Disabled`,tU=()=>`已禁用`,nU=()=>`已停用`,rU=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?eU(e):n===`zh-CN`?tU(e):nU(e)}),iU=()=>`No data`,aU=()=>`暂无数据`,oU=()=>`暫無資料`,sU=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?iU(e):n===`zh-CN`?aU(e):oU(e)}),cU=()=>`Signing out…`,lU=()=>`登出中…`,uU=()=>`登出中…`,dU=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?cU(e):n===`zh-CN`?lU(e):uU(e)}),fU=()=>`Secure, high-performance USDT payment middleware`,pU=()=>`安全、高效的 USDT 支付中介软件`,mU=()=>`安全、高效的 USDT 支付中介軟體`,hU=((e={},t={})=>{let n=t.locale??D();return n===`en-US`?fU(e):n===`zh-CN`?pU(e):mU(e)});export{Cz as $,wy as $a,Cs as $c,wC as $i,Sr as $l,Cj as $n,wh as $o,CD as $r,Cd as $s,CF as $t,d as $u,sV as A,cx as Aa,sl as Ac,sT as Ai,oa as Al,sN as An,c_ as Ao,sk as Ar,cp as As,sL as At,at as Au,xB as B,Sb as Ba,xc as Bc,xw as Bi,bi as Bl,xM as Bn,Sg as Bo,xO as Br,Sf as Bs,xI as Bt,ye as Bu,FV as C,Ix as Ca,Fl as Cc,FT as Ci,Pa as Cl,FN as Cn,I_ as Co,Fk as Cr,Ip as Cs,FL as Ct,Nt as Cu,yV as D,bx as Da,yl as Dc,yT as Di,va as Dl,yN as Dn,b_ as Do,yk as Dr,bp as Ds,yL as Dt,_t as Du,CV as E,wx as Ea,Cl as Ec,CT as Ei,Sa as El,CN as En,w_ as Eo,Ck as Er,wp as Es,CL as Et,xt as Eu,VB as F,Hb as Fa,Vc as Fc,Vw as Fi,Bi as Fl,VM as Fn,Hg as Fo,VO as Fr,Hf as Fs,VI as Ft,ze as Fu,tB as G,nb as Ga,tc as Gc,nw as Gi,ei as Gl,tM as Gn,ng as Go,tO as Gr,tf as Gs,tI as Gt,X as Gu,pB as H,mb as Ha,pc as Hc,pw as Hi,fi as Hl,pM as Hn,mg as Ho,pO as Hr,mf as Hs,pI as Ht,de as Hu,LB as I,Rb as Ia,Lc as Ic,Lw as Ii,Ii as Il,LM as In,Rg as Io,LO as Ir,Rf as Is,LI as It,Fe as Iu,Uz as J,Wy as Ja,Us as Jc,WC as Ji,Hr as Jl,Uj as Jn,Wh as Jo,UD as Jr,Ud as Js,UF as Jt,R as Ju,Zz as K,Qy as Ka,Zs as Kc,QC as Ki,Xr as Kl,Zj as Kn,Qh as Ko,ZD as Kr,Zd as Ks,ZF as Kt,K as Ku,NB as L,Pb as La,Nc as Lc,Nw as Li,Mi as Ll,NM as Ln,Pg as Lo,NO as Lr,Pf as Ls,NI as Lt,je as Lu,$B as M,ex as Ma,$c as Mc,$w as Mi,Qi as Ml,$M as Mn,e_ as Mo,$O as Mr,ep as Ms,$I as Mt,Ze as Mu,YB as N,Xb as Na,Yc as Nc,Yw as Ni,Ji as Nl,YM as Nn,Xg as No,YO as Nr,Xf as Ns,YI as Nt,qe as Nu,hV as O,gx as Oa,hl as Oc,hT as Oi,ma as Ol,hN as On,g_ as Oo,hk as Or,gp as Os,hL as Ot,pt as Ou,GB as P,Kb as Pa,Gc as Pc,Gw as Pi,Wi as Pl,GM as Pn,Kg as Po,GO as Pr,Kf as Ps,GI as Pt,Ue as Pu,Dz as Q,Oy as Qa,Ds as Qc,OC as Qi,Er as Ql,Dj as Qn,Oh as Qo,DD as Qr,Dd as Qs,DF as Qt,p as Qu,kB as R,Ab as Ra,kc as Rc,kw as Ri,Oi as Rl,kM as Rn,Ag as Ro,kO as Rr,Af as Rs,kI as Rt,De as Ru,zV as S,Bx as Sa,zl as Sc,zT as Si,Ra as Sl,zN as Sn,B_ as So,zk as Sr,Bp as Ss,zL as St,Lt as Su,DV as T,Ox as Ta,Dl as Tc,DT as Ti,Ea as Tl,DN as Tn,O_ as To,Dk as Tr,Op as Ts,DL as Tt,Tt as Tu,lB as U,ub as Ua,lc as Uc,$ as Ui,ci as Ul,lM as Un,ug as Uo,lO as Ur,uf as Us,lI as Ut,se as Uu,_B as V,vb as Va,_c as Vc,_w as Vi,gi as Vl,_M as Vn,vg as Vo,_O as Vr,vf as Vs,_I as Vt,he as Vu,aB as W,ob as Wa,ac as Wc,ow as Wi,ii as Wl,aM as Wn,og as Wo,aO as Wr,of as Ws,aI as Wt,re as Wu,Fz as X,Iy as Xa,Fs as Xc,IC as Xi,Pr as Xl,Fj as Xn,Ih as Xo,FD as Xr,Fd as Xs,FF as Xt,g as Xu,zz as Y,By as Ya,zs as Yc,BC as Yi,Rr as Yl,zj as Yn,Bh as Yo,zD as Yr,zd as Ys,zF as Yt,D as Yu,jz as Z,My as Za,js as Zc,MC as Zi,Ar as Zl,jj as Zn,Mh as Zo,jD as Zr,jd as Zs,jF as Zt,A as Zu,aH as _,oS as _a,au as _c,aE as _i,io as _l,aP as _n,ov as _o,aA as _r,om as _s,aR as _t,rn as _u,$H as a,eC as aa,$u as ac,$E as ai,$o as al,$P as an,ey as ao,$A as ar,eh as as,$R as at,Qn as au,qV as b,Jx as ba,ql as bc,qT as bi,Ka as bl,qN as bn,J_ as bo,qk as br,Jp as bs,qL as bt,Gt as bu,VH as c,HS as ca,Vu as cc,VE as ci,Vo as cl,VP as cn,Hv as co,VA as cr,Hm as cs,VR as ct,Bn as cu,kH as d,AS as da,ku as dc,kE as di,ko as dl,kP as dn,Av as do,kA as dr,Am as ds,kR as dt,On as du,bC as ea,yd as ec,o as ed,yD as ei,ys as el,yF as en,by as eo,yj as er,bh as es,yz as et,vr as eu,TH as f,ES as fa,Tu as fc,TE as fi,To as fl,TP as fn,Ev as fo,TA as fr,Em as fs,TR as ft,wn as fu,lH as g,uS as ga,lu as gc,lE as gi,co as gl,lP as gn,uv as go,lA as gr,um as gs,lR as gt,cn as gu,pH as h,mS as ha,pu as hc,pE as hi,po as hl,pP as hn,mv as ho,pA as hr,mm as hs,pR as ht,fn as hu,rU as i,iC as ia,rd as ic,rD as ii,rs as il,rF as in,iy as io,rj as ir,ih as is,rz as it,nr as iu,rV as j,ix as ja,rl as jc,rT as ji,na as jl,rN as jn,i_ as jo,rk as jr,ip as js,rL as jt,tt as ju,dV as k,fx as ka,dl as kc,dT as ki,ua as kl,dN as kn,f_ as ko,dk as kr,fp as ks,dL as kt,lt as ku,LH as l,RS as la,Lu as lc,LE as li,Lo as ll,LP as ln,Rv as lo,LA as lr,Rm as ls,LR as lt,In as lu,_H as m,vS as ma,_u as mc,_E as mi,_o as ml,_P as mn,vv as mo,_A as mr,vm as ms,_R as mt,gn as mu,dU as n,fC as na,dd as nc,l as nd,dD as ni,ds as nl,dF as nn,fy as no,dj as nr,fh as ns,dz as nt,ur as nu,YH as o,XS as oa,Yu as oc,YE as oi,Yo as ol,YP as on,Xv as oo,YA as or,Xm as os,YR as ot,Jn as ou,xH as p,SS as pa,xu as pc,xE as pi,xo as pl,xP as pn,Sv as po,xA as pr,Sm as ps,xR as pt,bn as pu,qz as q,Jy as qa,qs as qc,JC as qi,Kr as ql,qj as qn,Jh as qo,qD as qr,qd as qs,qF as qt,H as qu,sU as r,cC as ra,sd as rc,sD as ri,ss as rl,sF as rn,cy as ro,sj as rr,ch as rs,sz as rt,or as ru,GH as s,KS as sa,Gu as sc,GE as si,Go as sl,GP as sn,Kv as so,GA as sr,Km as ss,GR as st,Wn as su,hU as t,gC as ta,hd as tc,s as td,hD as ti,hs as tl,hF as tn,gy as to,hj as tr,gh as ts,hz as tt,mr as tu,NH as u,PS as ua,Nu as uc,NE as ui,No as ul,NP as un,Pv as uo,NA as ur,Pm as us,NR as ut,Mn as uu,tH as v,nS as va,tu as vc,tE as vi,eo as vl,tP as vn,nv as vo,tA as vr,nm as vs,tR as vt,$t as vu,jV as w,Mx as wa,jl as wc,jT as wi,Aa as wl,jN as wn,M_ as wo,jk as wr,Mp as ws,jL as wt,kt as wu,UV as x,Wx as xa,Ul as xc,UT as xi,Ha as xl,UN as xn,W_ as xo,Uk as xr,Wp as xs,UL as xt,Vt as xu,ZV as y,Qx as ya,Zl as yc,ZT as yi,Xa as yl,ZN as yn,Q_ as yo,Zk as yr,Qp as ys,ZL as yt,Yt as yu,TB as z,Eb as za,Tc as zc,Tw as zi,wi as zl,TM as zn,Eg as zo,TO as zr,Ef as zs,TI as zt,Ce as zu}; \ No newline at end of file diff --git a/src/www/assets/not-found-error-mxpXcTRa.js b/src/www/assets/not-found-error-mxpXcTRa.js new file mode 100644 index 0000000..a62d188 --- /dev/null +++ b/src/www/assets/not-found-error-mxpXcTRa.js @@ -0,0 +1 @@ +import{Qu as e,al as t,il as n,nl as r,rl as i}from"./messages-BOl-zx8S.js";import{t as a}from"./useRouter-DS97kuA5.js";import{t as o}from"./useNavigate-BNrwOhV8.js";import{t as s}from"./button-D-oR8d6w.js";var c=e();function l(){let e=o(),{history:l}=a();return(0,c.jsx)(`div`,{className:`h-svh`,children:(0,c.jsxs)(`div`,{className:`m-auto flex h-full w-full flex-col items-center justify-center gap-2`,children:[(0,c.jsx)(`h1`,{className:`font-bold text-[7rem] leading-tight`,children:`404`}),(0,c.jsx)(`span`,{className:`font-medium`,children:i()}),(0,c.jsx)(`p`,{className:`text-center text-muted-foreground`,children:r()}),(0,c.jsxs)(`div`,{className:`mt-6 flex gap-4`,children:[(0,c.jsx)(s,{onClick:()=>l.go(-1),variant:`outline`,children:t()}),(0,c.jsx)(s,{onClick:()=>e({to:`/dashboard`}),children:n()})]})]})})}export{l as t}; \ No newline at end of file diff --git a/src/www/assets/notifications-CKOafx8I.js b/src/www/assets/notifications-CKOafx8I.js new file mode 100644 index 0000000..a774218 --- /dev/null +++ b/src/www/assets/notifications-CKOafx8I.js @@ -0,0 +1 @@ +import{A as e,B as t,F as n,G as r,H as i,I as a,J as o,K as s,L as c,M as l,N as u,O as d,P as f,Qu as p,R as m,U as h,V as g,W as _,j as v,k as y,q as b,z as x}from"./messages-BOl-zx8S.js";import{t as S}from"./link-Du-u9SDI.js";import{t as C}from"./button-D-oR8d6w.js";import{t as w}from"./checkbox-D_bL2Pt-.js";import{t as T}from"./switch-m0XBbPWc.js";import{n as E,t as D}from"./radio-group-8QacflxY.js";import{a as O,r as k,s as A}from"./zod-DzRgHmfz.js";import{a as j,c as M,i as N,l as P,n as F,o as I,r as L,s as R,t as z}from"./form-uKra2bmF.js";import{t as B}from"./page-header-BRM1dngJ.js";import{t as V}from"./show-submitted-data-sbgXi_a9.js";var H=p(),U=A({type:k([`all`,`mentions`,`none`],{error:e=>e.input===void 0?s():void 0}),mobile:O().default(!1).optional(),communication_emails:O().default(!1).optional(),social_emails:O().default(!1).optional(),marketing_emails:O().default(!1).optional(),security_emails:O()}),W={communication_emails:!1,marketing_emails:!1,social_emails:!0,security_emails:!0};function G(){let o=P({resolver:M(U),defaultValues:W});return(0,H.jsx)(z,{...o,children:(0,H.jsxs)(`form`,{className:`space-y-8`,onSubmit:o.handleSubmit(e=>V(e)),children:[(0,H.jsx)(N,{control:o.control,name:`type`,render:({field:e})=>(0,H.jsxs)(j,{className:`relative space-y-3`,children:[(0,H.jsx)(I,{children:r()}),(0,H.jsx)(F,{children:(0,H.jsxs)(D,{className:`flex flex-col gap-2`,defaultValue:e.value,onValueChange:e.onChange,children:[(0,H.jsxs)(j,{className:`flex items-center`,children:[(0,H.jsx)(F,{children:(0,H.jsx)(E,{value:`all`})}),(0,H.jsx)(I,{className:`font-normal`,children:_()})]}),(0,H.jsxs)(j,{className:`flex items-center`,children:[(0,H.jsx)(F,{children:(0,H.jsx)(E,{value:`mentions`})}),(0,H.jsx)(I,{className:`font-normal`,children:h()})]}),(0,H.jsxs)(j,{className:`flex items-center`,children:[(0,H.jsx)(F,{children:(0,H.jsx)(E,{value:`none`})}),(0,H.jsx)(I,{className:`font-normal`,children:i()})]})]})}),(0,H.jsx)(R,{})]})}),(0,H.jsxs)(`div`,{className:`relative`,children:[(0,H.jsx)(`h3`,{className:`mb-4 font-medium text-lg`,children:g()}),(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsx)(N,{control:o.control,name:`communication_emails`,render:({field:e})=>(0,H.jsxs)(j,{className:`flex flex-row items-center justify-between rounded-lg border p-4`,children:[(0,H.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,H.jsx)(I,{className:`text-base`,children:t()}),(0,H.jsx)(L,{children:x()})]}),(0,H.jsx)(F,{children:(0,H.jsx)(T,{checked:e.value,onCheckedChange:e.onChange})})]})}),(0,H.jsx)(N,{control:o.control,name:`marketing_emails`,render:({field:e})=>(0,H.jsxs)(j,{className:`flex flex-row items-center justify-between rounded-lg border p-4`,children:[(0,H.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,H.jsx)(I,{className:`text-base`,children:m()}),(0,H.jsx)(L,{children:c()})]}),(0,H.jsx)(F,{children:(0,H.jsx)(T,{checked:e.value,onCheckedChange:e.onChange})})]})}),(0,H.jsx)(N,{control:o.control,name:`social_emails`,render:({field:e})=>(0,H.jsxs)(j,{className:`flex flex-row items-center justify-between rounded-lg border p-4`,children:[(0,H.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,H.jsx)(I,{className:`text-base`,children:a()}),(0,H.jsx)(L,{children:n()})]}),(0,H.jsx)(F,{children:(0,H.jsx)(T,{checked:e.value,onCheckedChange:e.onChange})})]})}),(0,H.jsx)(N,{control:o.control,name:`security_emails`,render:({field:e})=>(0,H.jsxs)(j,{className:`flex flex-row items-center justify-between rounded-lg border p-4`,children:[(0,H.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,H.jsx)(I,{className:`text-base`,children:f()}),(0,H.jsx)(L,{children:u()})]}),(0,H.jsx)(F,{children:(0,H.jsx)(T,{"aria-readonly":!0,checked:e.value,disabled:!0,onCheckedChange:e.onChange})})]})})]})]}),(0,H.jsx)(N,{control:o.control,name:`mobile`,render:({field:t})=>(0,H.jsxs)(j,{className:`relative flex flex-row items-start`,children:[(0,H.jsx)(F,{children:(0,H.jsx)(w,{checked:t.value,onCheckedChange:t.onChange})}),(0,H.jsxs)(`div`,{className:`space-y-1 leading-none`,children:[(0,H.jsx)(I,{children:l()}),(0,H.jsxs)(L,{children:[v(),` `,(0,H.jsx)(S,{className:`underline decoration-dashed underline-offset-4 hover:decoration-solid`,to:`/settings`,children:e()}),` `,y()]})]})]})}),(0,H.jsx)(C,{type:`submit`,children:d()})]})})}function K(){return(0,H.jsx)(B,{description:b(),title:o(),variant:`section`,children:(0,H.jsx)(G,{})})}var q=K;export{q as component}; \ No newline at end of file diff --git a/src/www/assets/noto-sans-cyrillic-ext-wght-normal-DSNfmdVt.woff2 b/src/www/assets/noto-sans-cyrillic-ext-wght-normal-DSNfmdVt.woff2 new file mode 100644 index 0000000..01c4086 Binary files /dev/null and b/src/www/assets/noto-sans-cyrillic-ext-wght-normal-DSNfmdVt.woff2 differ diff --git a/src/www/assets/noto-sans-cyrillic-wght-normal-B2hlT84T.woff2 b/src/www/assets/noto-sans-cyrillic-wght-normal-B2hlT84T.woff2 new file mode 100644 index 0000000..a15d872 Binary files /dev/null and b/src/www/assets/noto-sans-cyrillic-wght-normal-B2hlT84T.woff2 differ diff --git a/src/www/assets/noto-sans-devanagari-wght-normal-Cv-Vwajv.woff2 b/src/www/assets/noto-sans-devanagari-wght-normal-Cv-Vwajv.woff2 new file mode 100644 index 0000000..6f0a5c4 Binary files /dev/null and b/src/www/assets/noto-sans-devanagari-wght-normal-Cv-Vwajv.woff2 differ diff --git a/src/www/assets/noto-sans-greek-ext-wght-normal-12T8GTDR.woff2 b/src/www/assets/noto-sans-greek-ext-wght-normal-12T8GTDR.woff2 new file mode 100644 index 0000000..b8eab72 Binary files /dev/null and b/src/www/assets/noto-sans-greek-ext-wght-normal-12T8GTDR.woff2 differ diff --git a/src/www/assets/noto-sans-greek-wght-normal-Ymb6dZNd.woff2 b/src/www/assets/noto-sans-greek-wght-normal-Ymb6dZNd.woff2 new file mode 100644 index 0000000..0bba4dc Binary files /dev/null and b/src/www/assets/noto-sans-greek-wght-normal-Ymb6dZNd.woff2 differ diff --git a/src/www/assets/noto-sans-latin-ext-wght-normal-W1qJv59z.woff2 b/src/www/assets/noto-sans-latin-ext-wght-normal-W1qJv59z.woff2 new file mode 100644 index 0000000..2a70785 Binary files /dev/null and b/src/www/assets/noto-sans-latin-ext-wght-normal-W1qJv59z.woff2 differ diff --git a/src/www/assets/noto-sans-latin-wght-normal-BYSzYMf3.woff2 b/src/www/assets/noto-sans-latin-wght-normal-BYSzYMf3.woff2 new file mode 100644 index 0000000..7be9706 Binary files /dev/null and b/src/www/assets/noto-sans-latin-wght-normal-BYSzYMf3.woff2 differ diff --git a/src/www/assets/noto-sans-vietnamese-wght-normal-DLTJy58D.woff2 b/src/www/assets/noto-sans-vietnamese-wght-normal-DLTJy58D.woff2 new file mode 100644 index 0000000..28bf926 Binary files /dev/null and b/src/www/assets/noto-sans-vietnamese-wght-normal-DLTJy58D.woff2 differ diff --git a/src/www/assets/nunito-cyrillic-ext-wght-normal-D4X5GqEv.woff2 b/src/www/assets/nunito-cyrillic-ext-wght-normal-D4X5GqEv.woff2 new file mode 100644 index 0000000..7df6fa1 Binary files /dev/null and b/src/www/assets/nunito-cyrillic-ext-wght-normal-D4X5GqEv.woff2 differ diff --git a/src/www/assets/nunito-cyrillic-wght-normal-CY6AOgYE.woff2 b/src/www/assets/nunito-cyrillic-wght-normal-CY6AOgYE.woff2 new file mode 100644 index 0000000..a4cfb25 Binary files /dev/null and b/src/www/assets/nunito-cyrillic-wght-normal-CY6AOgYE.woff2 differ diff --git a/src/www/assets/nunito-latin-ext-wght-normal-CXYtwYOx.woff2 b/src/www/assets/nunito-latin-ext-wght-normal-CXYtwYOx.woff2 new file mode 100644 index 0000000..14a9f78 Binary files /dev/null and b/src/www/assets/nunito-latin-ext-wght-normal-CXYtwYOx.woff2 differ diff --git a/src/www/assets/nunito-latin-wght-normal-BzFMHfZw.woff2 b/src/www/assets/nunito-latin-wght-normal-BzFMHfZw.woff2 new file mode 100644 index 0000000..3e909a1 Binary files /dev/null and b/src/www/assets/nunito-latin-wght-normal-BzFMHfZw.woff2 differ diff --git a/src/www/assets/nunito-vietnamese-wght-normal-U01xdrZh.woff2 b/src/www/assets/nunito-vietnamese-wght-normal-U01xdrZh.woff2 new file mode 100644 index 0000000..6054ccb Binary files /dev/null and b/src/www/assets/nunito-vietnamese-wght-normal-U01xdrZh.woff2 differ diff --git a/src/www/assets/orders-CTtwpZWi.js b/src/www/assets/orders-CTtwpZWi.js new file mode 100644 index 0000000..28b07bb --- /dev/null +++ b/src/www/assets/orders-CTtwpZWi.js @@ -0,0 +1 @@ +import{$a as e,$o as t,$u as n,Ao as r,Ba as i,Bo as a,Co as o,Do as s,Eo as c,Fo as l,Ga as u,Go as d,Ha as f,Ho as ee,Io as p,Ja as m,Ka as h,Ko as g,Lo as te,Mo as ne,No as re,Oo as ie,Po as ae,Qa as _,Qo as v,Qu as y,Ra as oe,Ro as se,So as b,To as x,Ua as S,Uo as ce,Va as C,Vo as le,Wa as w,Wo as ue,Xa as T,Ya as E,Za as D,Zo as O,_o as k,ao as de,bo as A,co as j,dn as fe,do as M,eo as pe,fo as N,go as P,ho as F,io as me,jo as he,ko as ge,lo as I,mo as L,nd as _e,no as ve,oo as ye,po as R,qa as be,qu as xe,ro as Se,sc as z,so as B,to as Ce,uo as V,vo as H,wo as we,xo as U,yo as Te,za as Ee,zo as De}from"./messages-BOl-zx8S.js";import{a as W,s as Oe}from"./auth-store-D_jr_Pei.js";import{i as ke,t as Ae}from"./router-D0lu_-Oq.js";import{r as je}from"./route-C5Xnq6N2.js";import{o as G,s as K}from"./search-provider-D-fTfilE.js";import{i as Me,t as q}from"./button-D-oR8d6w.js";import{t as Ne}from"./confirm-dialog-DyK21C4Z.js";import{a as J,l as Pe,r as Fe,t as Ie}from"./dropdown-menu-HbmfecEg.js";import{t as Le}from"./label-B2Q8_O-h.js";import{n as Re}from"./skeleton-gJOqI-7w.js";import{t as ze}from"./cookies-D0aVbsDr.js";import{t as Be}from"./createLucideIcon-DMX28cCu.js";import{_ as Ve,d as Y,f as He,g as Ue,h as We,m as Ge,n as Ke,p as qe,r as Je,t as Ye,v as Xe,y as Ze}from"./data-table-C3uNvchK.js";import{t as Qe}from"./chevron-down-uSXLUPEl.js";import{t as $e}from"./download-BhpqmSj0.js";import{t as et}from"./ellipsis-DvvxWQuy.js";import{t as tt}from"./eye-CJkHHosh.js";import{r as nt}from"./empty-state-BelJgFUf.js";import{n as rt,t as it}from"./main-DvsnNI3V.js";import{d as at,f as ot,l as st,m as ct,p as lt,u as ut}from"./command-yFHhtFiR.js";import{n as X}from"./dist-BNiRpK39.js";import{t as dt}from"./input-CZHXycLK.js";import{t as ft}from"./page-header-BRM1dngJ.js";import{t as pt}from"./badge-D-FAREMY.js";import{t as mt}from"./use-table-url-state-BYcGNz1q.js";import{t as Z}from"./long-text-XqSY0a1g.js";import{t as ht}from"./coming-soon-dialog-DIE5FD4U.js";var gt=Be(`circle-x`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),_t=Be(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]),Q=_e(n(),1),$=y();function vt({open:e,onOpenChange:t,order:n,isLoading:r}){let a=[[`Trade ID`,n?.trade_id??`-`],[_(),n?.order_id??`-`],[D(),n?.name??`-`],[T(),`${K(n?.amount)} ${n?.currency??``}`.trim()||`-`],[E(),`${K(n?.actual_amount,6)} ${n?.token??``}`.trim()||`-`],[m(),n?.network??`-`],[be(),n?.receive_address??`-`],[h(),n?.notify_url??`-`],[u(),n?.redirect_url??`-`],[w(),n?.block_transaction_id??`-`],[S(),n?.parent_trade_id??`-`],[f(),G(n?.created_at)||`-`],[C(),G(n?.updated_at)||`-`]];return(0,$.jsx)(st,{onOpenChange:t,open:e,children:(0,$.jsxs)(ut,{className:`sm:max-w-3xl`,children:[(0,$.jsxs)(lt,{children:[(0,$.jsx)(ct,{children:i()}),(0,$.jsx)(at,{children:Ee()})]}),r?(0,$.jsx)(`div`,{className:`py-8 text-center text-muted-foreground text-sm`,children:oe()}):(0,$.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:a.map(([e,t])=>(0,$.jsxs)(`div`,{className:`rounded-lg border p-3`,children:[(0,$.jsx)(`div`,{className:`mb-1 text-muted-foreground text-xs`,children:e}),(0,$.jsx)(`div`,{className:`break-all text-sm`,children:t})]},e))})]})})}var yt={1:`bg-amber-500/10 text-amber-600`,2:`bg-emerald-500/10 text-emerald-600`,3:`bg-rose-500/10 text-rose-600`},bt={1:t(),2:v(),3:O()};function xt(t){return[{id:`expander`,enableHiding:!1,meta:{label:``,skeleton:`action`,sticky:`left`},header:()=>null,cell:({row:e})=>{let t=(e.original.sub_orders?.length??0)>0,n=e.depth*1.5;return(0,$.jsx)(`div`,{style:{paddingLeft:n?`${n}rem`:void 0},children:t?(0,$.jsx)(q,{className:`h-6 w-6 p-0`,onClick:()=>e.toggleExpanded(),variant:`ghost`,children:e.getIsExpanded()?(0,$.jsx)(Qe,{className:`h-4 w-4`}):(0,$.jsx)(Re,{className:`h-4 w-4`})}):null})}},{accessorKey:`status`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:b()}),cell:({row:e})=>{let t=e.original.status??1;return(0,$.jsx)(pt,{className:yt[t],children:bt[t]??t})},filterFn:(e,t,n)=>n.includes(e.getValue(t)),meta:{label:b(),skeleton:`badge`}},{accessorKey:`trade_id`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:`Trade ID`}),cell:({row:e})=>(0,$.jsx)(Z,{className:`font-medium`,children:e.original.trade_id}),enableHiding:!1,meta:{label:`Trade ID`,skeleton:`id`}},{accessorKey:`order_id`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:U()}),cell:({row:e})=>(0,$.jsx)(Z,{className:`min-w-40`,children:e.original.order_id}),meta:{label:U(),skeleton:`id`}},{accessorKey:`name`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:A()}),cell:({row:e})=>e.original.name??`-`,meta:{label:A(),skeleton:`short`}},{accessorKey:`amount`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:Te()}),cell:({row:e})=>`${K(e.original.amount)} ${e.original.currency||``}`,meta:{label:Te(),skeleton:`amount`}},{accessorKey:`actual_amount`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:H()}),cell:({row:e})=>`${K(e.original.actual_amount,6)} ${e.original.token||``}`,meta:{label:H(),skeleton:`amount`}},{accessorKey:`network`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:k()}),id:`chain`,meta:{label:k(),skeleton:`short`}},{accessorKey:`receive_address`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:P()}),cell:({row:e})=>(0,$.jsx)(Z,{className:`min-w-36`,children:e.original.receive_address}),meta:{label:P(),skeleton:`long`}},{accessorKey:`created_at`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:F()}),cell:({row:e})=>(0,$.jsx)(`div`,{className:`min-w-32`,children:G(e.original.created_at)}),meta:{label:F(),skeleton:`date`}},{accessorKey:`updated_at`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:L()}),cell:({row:e})=>G(e.original.updated_at),meta:{label:L(),skeleton:`date`}},{accessorKey:`block_transaction_id`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:R()}),cell:({row:e})=>(0,$.jsx)(Z,{className:`min-w-40`,children:e.original.block_transaction_id??`-`}),meta:{label:R(),skeleton:`id`}},{accessorKey:`pay_by_sub_id`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:z()}),cell:({row:e})=>{let t=e.original.pay_by_sub_id;return t===0||t==null?`-`:t},meta:{label:z(),skeleton:`id`}},{accessorKey:`payment_type`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:N()}),meta:{label:N(),skeleton:`short`}},{accessorKey:`is_selected`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:M()}),cell:({row:e})=>e.original.is_selected?de():me(),meta:{label:M(),skeleton:`badge`}},{accessorKey:`callback_confirm`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:V()}),cell:({row:e})=>e.original.callback_confirm===1?Se():ve(),meta:{label:V(),skeleton:`badge`}},{accessorKey:`callback_num`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:I()}),cell:({row:e})=>e.original.callback_num??0,meta:{label:I(),skeleton:`id`}},{accessorKey:`notify_url`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:j()}),cell:({row:e})=>(0,$.jsx)(Z,{className:`min-w-48`,children:e.original.notify_url??`-`}),meta:{label:j(),skeleton:`long`}},{accessorKey:`redirect_url`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:B()}),cell:({row:e})=>(0,$.jsx)(Z,{className:`min-w-48`,children:e.original.redirect_url??`-`}),meta:{label:B(),skeleton:`long`}},{accessorKey:`api_key_id`,header:({column:e})=>(0,$.jsx)(Y,{column:e,title:`API Key ID`}),cell:({row:e})=>e.original.api_key_id??`-`,meta:{label:`API Key ID`,skeleton:`id`}},{id:`actions`,enableHiding:!1,meta:{label:ye(),skeleton:`action`,sticky:`right`,className:Me(`w-12`)},cell:({row:n})=>(0,$.jsxs)(Ie,{modal:!1,children:[(0,$.jsx)(Pe,{asChild:!0,children:(0,$.jsxs)(q,{className:`flex h-8 w-8 p-0 data-[state=open]:bg-muted`,variant:`ghost`,children:[(0,$.jsx)(et,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{className:`sr-only`,children:e()})]})}),(0,$.jsxs)(Fe,{align:`end`,className:`w-44`,children:[(0,$.jsxs)(J,{onClick:()=>t(p(),n.original),children:[Ce(),(0,$.jsx)(tt,{className:`ml-auto h-4 w-4`})]}),(0,$.jsxs)(J,{onClick:()=>t(l(),n.original),children:[pe(),(0,$.jsx)(_t,{className:`ml-auto h-4 w-4`})]}),(0,$.jsxs)(J,{onClick:()=>t(g(),n.original),children:[g(),(0,$.jsx)(gt,{className:`ml-auto h-4 w-4`})]}),n.original.status===2&&!!n.original.notify_url&&(0,$.jsxs)(J,{onClick:()=>t(d(),n.original),children:[d(),(0,$.jsx)(nt,{className:`ml-auto h-4 w-4`})]})]})]})}]}var St=je(`/_authenticated/orders/`);function Ct({data:e,isLoading:t,onAction:n,onRefresh:r}){let[i,a]=(0,Q.useState)([]),[s,l]=(0,Q.useState)({}),{globalFilter:u,onGlobalFilterChange:d,columnFilters:f,onColumnFiltersChange:ee,pagination:p,onPaginationChange:m,ensurePageInRange:h}=mt({search:St.useSearch(),navigate:St.useNavigate(),pagination:{defaultPage:1,defaultPageSize:10},globalFilter:{enabled:!0,key:`orderNo`},columnFilters:[{columnId:`status`,searchKey:`status`,type:`array`},{columnId:`chain`,searchKey:`chain`,type:`array`}]}),g=He({data:e,columns:(0,Q.useMemo)(()=>xt(n),[n]),state:{sorting:i,columnVisibility:s,columnFilters:f,globalFilter:u,pagination:p},onSortingChange:a,onColumnVisibilityChange:l,onColumnFiltersChange:ee,onGlobalFilterChange:d,onPaginationChange:m,getSubRows:e=>e.sub_orders,paginateExpandedRows:!1,globalFilterFn:(e,t,n)=>{let r=String(n).toLowerCase();return String(e.original.id??``).toLowerCase().includes(r)||String(e.original.order_id??``).toLowerCase().includes(r)},getCoreRowModel:qe(),getExpandedRowModel:Ge(),getFilteredRowModel:Ve(),getPaginationRowModel:Xe(),getSortedRowModel:Ze(),getFacetedRowModel:We(),getFacetedUniqueValues:Ue()});(0,Q.useEffect)(()=>{h(g.getPageCount())},[g,h]);let te=[...new Set(e.map(e=>e.network).filter(Boolean))].map(e=>({label:e,value:e}));return(0,$.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,$.jsx)(Ye,{filters:[{columnId:`status`,title:c(),options:[...ke]},{columnId:`chain`,title:x(),options:te}],onRefresh:r,searchPlaceholder:we(),table:g}),(0,$.jsx)(Je,{className:`min-w-[1200px]`,emptyText:o(),loading:t,table:g}),(0,$.jsx)(Ke,{className:`mt-auto`,table:g})]})}var wt={[g()]:g(),[d()]:d()};function Tt(){return window.location.origin}function Et(){let e=W.useQuery(`get`,`/admin/api/v1/orders/list-with-sub`),t=W.useMutation(`post`,`/admin/api/v1/orders/{trade_id}/close`),n=W.useMutation(`post`,`/admin/api/v1/orders/{trade_id}/mark-paid`),i=W.useMutation(`post`,`/admin/api/v1/orders/{trade_id}/resend-callback`),o=W.useMutation(`get`,`/admin/api/v1/orders/{trade_id}`),[c,u]=(0,Q.useState)(null),[f,m]=(0,Q.useState)(null),[h,_]=(0,Q.useState)(!1),[v,y]=(0,Q.useState)(null),[oe,b]=(0,Q.useState)(!1),[x,S]=(0,Q.useState)(``),[C,w]=(0,Q.useState)(!1);async function T(){await Ae.invalidateQueries({queryKey:[`get`,`/admin/api/v1/orders/list-with-sub`]})}async function E(){if(!c?.row.trade_id)return;let e={params:{path:{trade_id:c.row.trade_id}}};c.action===g()?await t.mutateAsync(e):c.action===d()&&await i.mutateAsync(e),X.success(fe({action:wt[c.action]})),await T(),u(null)}async function D(){if(!(f?.trade_id&&x.trim())){X.error(ue());return}await n.mutateAsync({params:{path:{trade_id:f.trade_id}},body:{block_transaction_id:x.trim()}}),X.success(ce()),m(null),S(``),await T()}async function O(){w(!0);try{let e=ze(Oe),t=e?JSON.parse(e):``,n=await fetch(`${Tt()}/admin/api/v1/orders/export`,{headers:t?{Authorization:`Bearer ${t}`}:{}});if(!n.ok)throw Error(`Export failed`);let r=await n.blob(),i=window.URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`orders-${Date.now()}.csv`,a.click(),window.URL.revokeObjectURL(i),X.success(le())}catch{X.error(ee())}finally{w(!1)}}return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(rt,{fixed:!0}),(0,$.jsxs)(it,{className:`flex flex-1 flex-col gap-4 sm:gap-6`,children:[(0,$.jsx)(ft,{actions:(0,$.jsxs)(q,{disabled:C,onClick:O,variant:`outline`,children:[(0,$.jsx)($e,{className:`mr-2 h-4 w-4`}),C?a():De()]}),description:se(),title:te()}),(0,$.jsx)(Ct,{data:e.data?.data?.list??[],isLoading:e.isLoading,onAction:async(e,t)=>{if(e===p()){b(!0),y((await o.mutateAsync({params:{path:{trade_id:t.trade_id}}})).data??t);return}if(e===l()||e===g()||e===d()){_(!0);return}u({action:e,row:t})},onRefresh:()=>e.refetch()})]}),c&&(0,$.jsx)(Ne,{confirmText:ae(),desc:(0,$.jsx)(`span`,{children:re({action:c.action,id:String(c.row.trade_id??c.row.id??``)})}),handleConfirm:E,onOpenChange:()=>u(null),open:!0,title:ne({action:c.action})}),(0,$.jsx)(vt,{isLoading:o.isPending,onOpenChange:e=>{b(e),e||y(null)},open:oe,order:v}),(0,$.jsx)(st,{onOpenChange:e=>{e||(m(null),S(``))},open:!!f,children:(0,$.jsxs)(ut,{children:[(0,$.jsxs)(lt,{children:[(0,$.jsx)(ct,{children:he()}),(0,$.jsx)(at,{children:r({id:String(f?.trade_id??f?.id??``)})})]}),(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(Le,{htmlFor:`blockTransactionId`,children:ge()}),(0,$.jsx)(dt,{id:`blockTransactionId`,onChange:e=>S(e.target.value),placeholder:`0x... / transaction hash`,value:x})]}),(0,$.jsxs)(ot,{children:[(0,$.jsx)(q,{onClick:()=>m(null),variant:`outline`,children:xe()}),(0,$.jsx)(q,{disabled:n.isPending,onClick:D,children:n.isPending?ie():s()})]})]})}),(0,$.jsx)(ht,{onOpenChange:_,open:h})]})}var Dt=Et;export{Dt as component}; \ No newline at end of file diff --git a/src/www/assets/page-header-BRM1dngJ.js b/src/www/assets/page-header-BRM1dngJ.js new file mode 100644 index 0000000..cfbfc16 --- /dev/null +++ b/src/www/assets/page-header-BRM1dngJ.js @@ -0,0 +1 @@ +import{Qu as e}from"./messages-BOl-zx8S.js";import{t}from"./separator-Dw-mNGCy.js";var n=e();function r({title:e,description:r,actions:i,children:a,variant:o=`page`}){return o===`section`?(0,n.jsxs)(`div`,{className:`flex flex-1 flex-col`,children:[(0,n.jsxs)(`div`,{className:`flex-none`,children:[(0,n.jsx)(`h3`,{className:`font-medium text-lg`,children:e}),r&&(0,n.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:r})]}),(0,n.jsx)(t,{className:`my-4 flex-none`}),(0,n.jsx)(`div`,{className:`faded-bottom h-full w-full overflow-y-auto scroll-smooth pe-4 pb-12`,children:(0,n.jsx)(`div`,{className:`-mx-1 px-1.5 lg:max-w-xl`,children:a})})]}):(0,n.jsxs)(`div`,{className:`flex flex-wrap items-end justify-between gap-2`,children:[(0,n.jsxs)(`div`,{children:[(0,n.jsx)(`h2`,{className:`font-bold text-2xl tracking-tight`,children:e}),r&&(0,n.jsx)(`p`,{className:`text-muted-foreground`,children:r})]}),i&&(0,n.jsx)(`div`,{className:`flex gap-2`,children:i})]})}export{r as t}; \ No newline at end of file diff --git a/src/www/assets/password-Fr9ZcJNs.js b/src/www/assets/password-Fr9ZcJNs.js new file mode 100644 index 0000000..073ea5a --- /dev/null +++ b/src/www/assets/password-Fr9ZcJNs.js @@ -0,0 +1 @@ +import{$t as e,Fl as t,Pl as n,Qt as r,Qu as i,an as a,cn as o,en as s,in as c,ln as l,nn as u,on as d,rn as f,sn as p,tn as m,un as h}from"./messages-BOl-zx8S.js";import{a as g}from"./auth-store-D_jr_Pei.js";import{t as _}from"./button-D-oR8d6w.js";import{n as v}from"./dist-BNiRpK39.js";import{c as y,s as b}from"./zod-DzRgHmfz.js";import{a as x,c as S,i as C,l as w,n as T,o as E,s as D,t as O}from"./form-uKra2bmF.js";import{t as k}from"./password-input-ZB498Nq4.js";import{t as A}from"./page-header-BRM1dngJ.js";var j=i(),M=b({old_password:y().min(1,h()),new_password:y().min(8,l()),confirm_password:y().min(1,o())}).refine(e=>e.new_password===e.confirm_password,{message:p(),path:[`confirm_password`]});function N(){let t=w({resolver:S(M),defaultValues:{old_password:``,new_password:``,confirm_password:``}}),n=g.useMutation(`post`,`/admin/api/v1/auth/password`);async function i(e){await n.mutateAsync({body:{old_password:e.old_password,new_password:e.new_password}}),v.success(d()),t.reset()}return(0,j.jsx)(O,{...t,children:(0,j.jsxs)(`form`,{className:`max-w-md space-y-4`,onSubmit:t.handleSubmit(i),children:[(0,j.jsx)(C,{control:t.control,name:`old_password`,render:({field:e})=>(0,j.jsxs)(x,{children:[(0,j.jsx)(E,{children:a()}),(0,j.jsx)(T,{children:(0,j.jsx)(k,{placeholder:c(),...e})}),(0,j.jsx)(D,{})]})}),(0,j.jsx)(C,{control:t.control,name:`new_password`,render:({field:e})=>(0,j.jsxs)(x,{children:[(0,j.jsx)(E,{children:f()}),(0,j.jsx)(T,{children:(0,j.jsx)(k,{placeholder:u(),...e})}),(0,j.jsx)(D,{})]})}),(0,j.jsx)(C,{control:t.control,name:`confirm_password`,render:({field:e})=>(0,j.jsxs)(x,{children:[(0,j.jsx)(E,{children:m()}),(0,j.jsx)(T,{children:(0,j.jsx)(k,{placeholder:s(),...e})}),(0,j.jsx)(D,{})]})}),(0,j.jsx)(_,{disabled:n.isPending,type:`submit`,children:n.isPending?e():r()})]})})}function P(){return(0,j.jsx)(A,{description:n(),title:t(),variant:`section`,children:(0,j.jsx)(N,{})})}var F=P;export{F as component}; \ No newline at end of file diff --git a/src/www/assets/password-input-ZB498Nq4.js b/src/www/assets/password-input-ZB498Nq4.js new file mode 100644 index 0000000..d01dfa7 --- /dev/null +++ b/src/www/assets/password-input-ZB498Nq4.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{i as r,t as i}from"./button-D-oR8d6w.js";import{t as a}from"./eye-off-BBTW1z_J.js";import{t as o}from"./eye-CJkHHosh.js";import{t as s}from"./input-CZHXycLK.js";var c=n(e(),1),l=t();function u({className:e,disabled:t,onVisibilityChange:n,ref:u,...d}){let[f,p]=c.useState(!1);return(0,l.jsxs)(`div`,{className:r(`relative`,e),children:[(0,l.jsx)(s,{className:`pr-9`,disabled:t,ref:u,type:f?`text`:`password`,...d}),(0,l.jsx)(i,{className:`absolute inset-e-1 top-1/2 h-6 w-6 -translate-y-1/2 rounded-md text-muted-foreground`,disabled:t,onClick:()=>{p(e=>{let t=!e;return n?.(t),t})},size:`icon`,type:`button`,variant:`ghost`,children:f?(0,l.jsx)(o,{size:18}):(0,l.jsx)(a,{size:18})})]})}export{u as t}; \ No newline at end of file diff --git a/src/www/assets/payment-setup-Dgvp9Vym.js b/src/www/assets/payment-setup-Dgvp9Vym.js new file mode 100644 index 0000000..ecbdf5d --- /dev/null +++ b/src/www/assets/payment-setup-Dgvp9Vym.js @@ -0,0 +1 @@ +import{$u as e,Fa as t,Ia as n,La as r,Ma as i,Na as a,Pa as o,Qu as s,ja as c,nd as l}from"./messages-BOl-zx8S.js";import{a as u}from"./auth-store-D_jr_Pei.js";import{r as d}from"./route-C5Xnq6N2.js";import{i as f}from"./button-D-oR8d6w.js";import{_ as p,d as m,f as h,g,h as _,n as v,p as y,r as b,t as x,v as S,y as C}from"./data-table-C3uNvchK.js";import{t as w}from"./badge-D-FAREMY.js";import{t as T}from"./use-table-url-state-BYcGNz1q.js";var E=l(e(),1),D=s();function O(){return[{accessorKey:`network`,header:({column:e})=>(0,D.jsx)(m,{column:e,title:i()}),cell:({row:e})=>e.original.network??`-`,meta:{label:i(),skeleton:`short`}},{id:`tokens`,accessorFn:e=>e.tokens?.join(`, `)??``,header:({column:e})=>(0,D.jsx)(m,{column:e,title:c()}),cell:({row:e})=>{let t=e.original.tokens??[];return t.length===0?`-`:(0,D.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:t.map(e=>(0,D.jsx)(w,{className:`bg-emerald-500/10 text-emerald-600`,children:e},e))})},meta:{className:f(`text-center`),label:c(),skeleton:`short`}}]}var k=d(`/_authenticated/payment-setup/`);function A({data:e,isLoading:i,onRefresh:s}){let[c,l]=(0,E.useState)([]),{globalFilter:u,onGlobalFilterChange:d,columnFilters:f,onColumnFiltersChange:m,pagination:w,onPaginationChange:A,ensurePageInRange:j}=T({search:k.useSearch(),navigate:k.useNavigate(),pagination:{defaultPage:1,defaultPageSize:10},globalFilter:{enabled:!0,key:`keyword`},columnFilters:[{columnId:`network`,searchKey:`chain`,type:`array`}]}),M=h({data:e,columns:(0,E.useMemo)(()=>O(),[]),state:{sorting:c,columnFilters:f,globalFilter:u,pagination:w},onSortingChange:l,onColumnFiltersChange:m,onGlobalFilterChange:d,onPaginationChange:A,globalFilterFn:(e,t,n)=>{let r=String(n).toLowerCase();return(e.original.network??``).toLowerCase().includes(r)||(e.original.tokens??[]).some(e=>e.toLowerCase().includes(r))},getCoreRowModel:y(),getFilteredRowModel:p(),getPaginationRowModel:S(),getSortedRowModel:C(),getFacetedRowModel:_(),getFacetedUniqueValues:g()});(0,E.useEffect)(()=>{j(M.getPageCount())},[M,j]);let N=[...new Set(e.map(e=>e.network).filter(Boolean))].map(e=>({label:e,value:e}));return(0,D.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`h3`,{className:`font-semibold text-lg`,children:r()}),(0,D.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:n()})]}),(0,D.jsx)(x,{filters:[{columnId:`network`,title:t(),options:N}],onRefresh:s,searchPlaceholder:o(),table:M}),(0,D.jsx)(b,{className:`min-w-[700px]`,emptyText:a(),loading:i,table:M}),(0,D.jsx)(v,{className:`mt-auto`,table:M})]})}function j(){let e=u.useQuery(`get`,`/admin/api/v1/supported-assets`);return(0,D.jsx)(A,{data:e.data?.data?.supports??[],isLoading:e.isLoading,onRefresh:()=>e.refetch()})}var M=j;export{M as component}; \ No newline at end of file diff --git a/src/www/assets/popover-M5uqmgyK.js b/src/www/assets/popover-M5uqmgyK.js new file mode 100644 index 0000000..86e2067 --- /dev/null +++ b/src/www/assets/popover-M5uqmgyK.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{c as i,d as a,i as o}from"./button-D-oR8d6w.js";import{a as s,r as c,t as l}from"./dist-DzENW8NP.js";import{t as u}from"./dist-BZg_Jfik.js";import{n as d}from"./dist-oydJxq9L.js";import{n as f,t as p}from"./dist-BPKZF5GI.js";import{i as m,n as h,r as g,t as _}from"./es2015-DRmlSfkW.js";import{a as v,i as y,n as b,r as x,t as S}from"./dist-Ck6_E5T6.js";var C=n(e(),1),w=t(),T=`Popover`,[E,ee]=s(T,[v]),D=v(),[O,k]=E(T),A=e=>{let{__scopePopover:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!1}=e,s=D(t),c=C.useRef(null),[u,f]=C.useState(!1),[p,m]=l({prop:r,defaultProp:i??!1,onChange:a,caller:T});return(0,w.jsx)(y,{...s,children:(0,w.jsx)(O,{scope:t,contentId:d(),triggerRef:c,open:p,onOpenChange:m,onOpenToggle:C.useCallback(()=>m(e=>!e),[m]),hasCustomAnchor:u,onCustomAnchorAdd:C.useCallback(()=>f(!0),[]),onCustomAnchorRemove:C.useCallback(()=>f(!1),[]),modal:o,children:n})})};A.displayName=T;var j=`PopoverAnchor`,M=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=k(j,n),a=D(n),{onCustomAnchorAdd:o,onCustomAnchorRemove:s}=i;return C.useEffect(()=>(o(),()=>s()),[o,s]),(0,w.jsx)(S,{...a,...r,ref:t})});M.displayName=j;var N=`PopoverTrigger`,P=C.forwardRef((e,t)=>{let{__scopePopover:n,...i}=e,o=k(N,n),s=D(n),l=a(t,o.triggerRef),u=(0,w.jsx)(r.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":o.open,"aria-controls":o.contentId,"data-state":Y(o.open),...i,ref:l,onClick:c(e.onClick,o.onOpenToggle)});return o.hasCustomAnchor?u:(0,w.jsx)(S,{asChild:!0,...s,children:u})});P.displayName=N;var F=`PopoverPortal`,[I,L]=E(F,{forceMount:void 0}),R=e=>{let{__scopePopover:t,forceMount:n,children:r,container:i}=e,a=k(F,t);return(0,w.jsx)(I,{scope:t,forceMount:n,children:(0,w.jsx)(u,{present:n||a.open,children:(0,w.jsx)(p,{asChild:!0,container:i,children:r})})})};R.displayName=F;var z=`PopoverContent`,B=C.forwardRef((e,t)=>{let n=L(z,e.__scopePopover),{forceMount:r=n.forceMount,...i}=e,a=k(z,e.__scopePopover);return(0,w.jsx)(u,{present:r||a.open,children:a.modal?(0,w.jsx)(H,{...i,ref:t}):(0,w.jsx)(U,{...i,ref:t})})});B.displayName=z;var V=i(`PopoverContent.RemoveScroll`),H=C.forwardRef((e,t)=>{let n=k(z,e.__scopePopover),r=C.useRef(null),i=a(t,r),o=C.useRef(!1);return C.useEffect(()=>{let e=r.current;if(e)return _(e)},[]),(0,w.jsx)(h,{as:V,allowPinchZoom:!0,children:(0,w.jsx)(W,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:c(e.onCloseAutoFocus,e=>{e.preventDefault(),o.current||n.triggerRef.current?.focus()}),onPointerDownOutside:c(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;o.current=t.button===2||n},{checkForDefaultPrevented:!1}),onFocusOutside:c(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1})})})}),U=C.forwardRef((e,t)=>{let n=k(z,e.__scopePopover),r=C.useRef(!1),i=C.useRef(!1);return(0,w.jsx)(W,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),W=C.forwardRef((e,t)=>{let{__scopePopover:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,disableOutsidePointerEvents:o,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:l,onInteractOutside:u,...d}=e,p=k(z,n),h=D(n);return g(),(0,w.jsx)(m,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,w.jsx)(f,{asChild:!0,disableOutsidePointerEvents:o,onInteractOutside:u,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:l,onDismiss:()=>p.onOpenChange(!1),children:(0,w.jsx)(x,{"data-state":Y(p.open),role:`dialog`,id:p.contentId,...h,...d,ref:t,style:{...d.style,"--radix-popover-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-popover-content-available-width":`var(--radix-popper-available-width)`,"--radix-popover-content-available-height":`var(--radix-popper-available-height)`,"--radix-popover-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-popover-trigger-height":`var(--radix-popper-anchor-height)`}})})})}),G=`PopoverClose`,K=C.forwardRef((e,t)=>{let{__scopePopover:n,...i}=e,a=k(G,n);return(0,w.jsx)(r.button,{type:`button`,...i,ref:t,onClick:c(e.onClick,()=>a.onOpenChange(!1))})});K.displayName=G;var q=`PopoverArrow`,J=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=D(n);return(0,w.jsx)(b,{...i,...r,ref:t})});J.displayName=q;function Y(e){return e?`open`:`closed`}var X=A,Z=P,Q=R,$=B;function te({...e}){return(0,w.jsx)(X,{"data-slot":`popover`,...e})}function ne({...e}){return(0,w.jsx)(Z,{"data-slot":`popover-trigger`,...e})}function re({className:e,align:t=`center`,sideOffset:n=4,...r}){return(0,w.jsx)(Q,{children:(0,w.jsx)($,{align:t,className:o(`data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=closed]:animate-out data-[state=open]:animate-in`,e),"data-slot":`popover-content`,sideOffset:n,...r})})}export{re as n,ne as r,te as t}; \ No newline at end of file diff --git a/src/www/assets/radio-group-8QacflxY.js b/src/www/assets/radio-group-8QacflxY.js new file mode 100644 index 0000000..cf4fea5 --- /dev/null +++ b/src/www/assets/radio-group-8QacflxY.js @@ -0,0 +1 @@ +import{Qu as e}from"./messages-BOl-zx8S.js";import{i as t}from"./button-D-oR8d6w.js";import{n,r,t as i}from"./dist-CML2zK1G.js";import{t as a}from"./createLucideIcon-DMX28cCu.js";var o=a(`circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),s=e();function c({className:e,...n}){return(0,s.jsx)(r,{className:t(`grid gap-3`,e),"data-slot":`radio-group`,...n})}function l({className:e,...r}){return(0,s.jsx)(n,{className:t(`aspect-square size-4 shrink-0 rounded-full border border-input text-primary shadow-xs outline-none transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40`,e),"data-slot":`radio-group-item`,...r,children:(0,s.jsx)(i,{className:`relative flex items-center justify-center`,"data-slot":`radio-group-indicator`,children:(0,s.jsx)(o,{className:`absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-primary`})})})}export{l as n,c as t}; \ No newline at end of file diff --git a/src/www/assets/rate-Dsrqg6hQ.js b/src/www/assets/rate-Dsrqg6hQ.js new file mode 100644 index 0000000..d569b66 --- /dev/null +++ b/src/www/assets/rate-Dsrqg6hQ.js @@ -0,0 +1 @@ +import{$u as e,Ct as t,Qu as n,St as r,Tt as i,_t as a,bt as o,jl as s,nd as c,vt as l,wt as u,xt as d,yt as f}from"./messages-BOl-zx8S.js";import{t as p}from"./button-D-oR8d6w.js";import{n as m}from"./dist-BNiRpK39.js";import{c as h,s as g}from"./zod-DzRgHmfz.js";import{a as _,c as v,i as y,l as b,n as x,o as S,s as C,t as w}from"./form-uKra2bmF.js";import{t as T}from"./input-CZHXycLK.js";import{t as E}from"./page-header-BRM1dngJ.js";import{a as D,i as O,n as k,r as A,t as j}from"./lib-_PocwKaj.js";var M=c(e(),1),N=n(),P=g({apiUrl:h().url(u()),forcedUsdtRate:h().min(1,t()).refine(e=>!Number.isNaN(Number(e))&&Number(e)>=0,{message:t()})});function F(){let e=O(`rate`),t=D(),n=b({resolver:v(P),defaultValues:{apiUrl:``,forcedUsdtRate:`0`}});(0,M.useEffect)(()=>{let t=e.data?.data;t&&n.reset({apiUrl:j(t,`rate.api_url`),forcedUsdtRate:j(t,`rate.forced_usdt_rate`,`0`)})},[e.data,n]);let i=A();async function s(){for(let e of[`rate.api_url`,`rate.forced_usdt_rate`])await i.mutateAsync({params:{path:{key:e}}});m.success(r()),await e.refetch()}async function c(n){await k(t.mutateAsync,[{group:`rate`,key:`rate.api_url`,type:`string`,value:n.apiUrl},{group:`rate`,key:`rate.forced_usdt_rate`,type:`string`,value:n.forcedUsdtRate}],d()),await e.refetch()}return(0,N.jsx)(w,{...n,children:(0,N.jsxs)(`form`,{className:`space-y-6`,onSubmit:n.handleSubmit(c),children:[(0,N.jsx)(y,{control:n.control,name:`apiUrl`,render:({field:e})=>(0,N.jsxs)(_,{children:[(0,N.jsx)(S,{children:o()}),(0,N.jsx)(x,{children:(0,N.jsx)(T,{...e})}),(0,N.jsx)(C,{})]})}),(0,N.jsx)(y,{control:n.control,name:`forcedUsdtRate`,render:({field:e})=>(0,N.jsxs)(_,{children:[(0,N.jsx)(S,{children:f()}),(0,N.jsx)(x,{children:(0,N.jsx)(T,{step:`0.0001`,type:`number`,...e})}),(0,N.jsx)(C,{})]})}),(0,N.jsxs)(`div`,{className:`flex gap-2`,children:[(0,N.jsx)(p,{disabled:t.isPending||e.isLoading,type:`submit`,children:l()}),(0,N.jsx)(p,{disabled:i.isPending,onClick:s,type:`button`,variant:`outline`,children:a()})]})]})})}function I(){return(0,N.jsx)(E,{description:i(),title:s(),variant:`section`,children:(0,N.jsx)(F,{})})}var L=I;export{L as component}; \ No newline at end of file diff --git a/src/www/assets/redirect-dE0wk0WH.js b/src/www/assets/redirect-dE0wk0WH.js new file mode 100644 index 0000000..111782f --- /dev/null +++ b/src/www/assets/redirect-dE0wk0WH.js @@ -0,0 +1 @@ +function e(e={}){if(e.isNotFound=!0,e.throw)throw e;return e}function t(e){return e?.isNotFound===!0}var n=`__root__`;function r(e){if(e.statusCode=e.statusCode||e.code||307,!e._builtLocation&&!e.reloadDocument&&typeof e.href==`string`)try{new URL(e.href),e.reloadDocument=!0}catch{}let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function i(e){return e instanceof Response&&!!e.options}export{e as a,t as i,r as n,n as r,i as t}; \ No newline at end of file diff --git a/src/www/assets/route-BO5WPM5m.js b/src/www/assets/route-BO5WPM5m.js new file mode 100644 index 0000000..987e64e --- /dev/null +++ b/src/www/assets/route-BO5WPM5m.js @@ -0,0 +1 @@ +import{Aa as e,Qu as t,ic as n,nc as r,rc as i}from"./messages-BOl-zx8S.js";import{n as a}from"./Match-Bdr6F13c.js";import{V as o}from"./search-provider-D-fTfilE.js";import{t as s}from"./separator-Dw-mNGCy.js";import{t as c}from"./createLucideIcon-DMX28cCu.js";import{n as l,t as u}from"./main-DvsnNI3V.js";import{t as d}from"./page-header-BRM1dngJ.js";import{t as f}from"./sidebar-nav-eQOCItLO.js";var p=c(`book-marked`,[[`path`,{d:`M10 2v8l3-3 3 3V2`,key:`sqw3rj`}],[`path`,{d:`M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20`,key:`k3hazp`}]]),m=t(),h=[{title:i(),href:`/payment-setup`,icon:(0,m.jsx)(o,{size:18})},{title:r(),href:`/payment-setup/integrations`,icon:(0,m.jsx)(p,{size:18})}];function g(){return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(l,{}),(0,m.jsxs)(u,{fixed:!0,children:[(0,m.jsx)(d,{description:e(),title:n()}),(0,m.jsx)(s,{className:`my-4 lg:my-6`}),(0,m.jsxs)(`div`,{className:`flex flex-1 flex-col space-y-2 overflow-hidden lg:flex-row lg:space-x-12 lg:space-y-0`,children:[(0,m.jsx)(`aside`,{className:`top-0 lg:sticky lg:w-1/5`,children:(0,m.jsx)(f,{items:h})}),(0,m.jsx)(`div`,{className:`flex w-full overflow-y-hidden p-1`,children:(0,m.jsx)(a,{})})]})]})]})}var _=g;export{_ as component}; \ No newline at end of file diff --git a/src/www/assets/route-BfQF2LcU.js b/src/www/assets/route-BfQF2LcU.js new file mode 100644 index 0000000..32c5366 --- /dev/null +++ b/src/www/assets/route-BfQF2LcU.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,m as n,nd as r,p as i,t as a}from"./messages-BOl-zx8S.js";import{n as o}from"./Match-Bdr6F13c.js";import{i as s}from"./button-D-oR8d6w.js";import{n as c,t as l}from"./theme-switch-BVGTp-bE.js";import{t as u}from"./logo-BVdckS6R.js";import{n as d,t as f}from"./auth-animation-context-CciMPPP0.js";var p=r(e());function m(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function h(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var g={autoSleep:120,force3D:`auto`,nullTargetWarn:1,units:{lineHeight:``}},_={duration:.5,overwrite:!1,delay:0},v,y,b,x=1e8,S=1/x,C=Math.PI*2,w=C/4,T=0,E=Math.sqrt,D=Math.cos,O=Math.sin,k=function(e){return typeof e==`string`},A=function(e){return typeof e==`function`},j=function(e){return typeof e==`number`},M=function(e){return e===void 0},N=function(e){return typeof e==`object`},P=function(e){return e!==!1},F=function(){return typeof window<`u`},I=function(e){return A(e)||k(e)},ee=typeof ArrayBuffer==`function`&&ArrayBuffer.isView||function(){},L=Array.isArray,te=/random\([^)]+\)/g,ne=/,\s*/g,re=/(?:-?\.?\d|\.)+/gi,ie=/[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,ae=/[-+=.]*\d+[.e-]*\d*[a-z%]*/g,oe=/[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,se=/[+-]=-?[.\d]+/,ce=/[^,'"\[\]\s]+/gi,le=/^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i,R,ue,de,fe,pe={},me={},he,ge=function(e){return(me=We(e,pe))&&Y},_e=function(e,t){return console.warn(`Invalid property`,e,`set to`,t,`Missing plugin? gsap.registerPlugin()`)},ve=function(e,t){return!t&&console.warn(e)},ye=function(e,t){return e&&(pe[e]=t)&&me&&(me[e]=t)||pe},be=function(){return 0},xe={suppressEvents:!0,isStart:!0,kill:!1},Se={suppressEvents:!0,kill:!1},Ce={suppressEvents:!0},we={},Te=[],Ee={},De,Oe={},ke={},Ae=30,je=[],Me=``,Ne=function(e){var t=e[0],n,r;if(N(t)||A(t)||(e=[e]),!(n=(t._gsap||{}).harness)){for(r=je.length;r--&&!je[r].targetTest(t););n=je[r]}for(r=e.length;r--;)e[r]&&(e[r]._gsap||(e[r]._gsap=new _n(e[r],n)))||e.splice(r,1);return e},Pe=function(e){return e._gsap||Ne(Et(e))[0]._gsap},Fe=function(e,t,n){return(n=e[t])&&A(n)?e[t]():M(n)&&e.getAttribute&&e.getAttribute(t)||n},z=function(e,t){return(e=e.split(`,`)).forEach(t)||e},B=function(e){return Math.round(e*1e5)/1e5||0},V=function(e){return Math.round(e*1e7)/1e7||0},Ie=function(e,t){var n=t.charAt(0),r=parseFloat(t.substr(2));return e=parseFloat(e),n===`+`?e+r:n===`-`?e-r:n===`*`?e*r:e/r},Le=function(e,t){for(var n=t.length,r=0;e.indexOf(t[r])<0&&++ro;)a=a._prev;return a?(t._next=a._next,a._next=t):(t._next=e[n],e[n]=t),t._next?t._next._prev=t:e[r]=t,t._prev=a,t.parent=t._dp=e,t},Xe=function(e,t,n,r){n===void 0&&(n=`_first`),r===void 0&&(r=`_last`);var i=t._prev,a=t._next;i?i._next=a:e[n]===t&&(e[n]=a),a?a._prev=i:e[r]===t&&(e[r]=i),t._next=t._prev=t.parent=null},Ze=function(e,t){e.parent&&(!t||e.parent.autoRemoveChildren)&&e.parent.remove&&e.parent.remove(e),e._act=0},Qe=function(e,t){if(e&&(!t||t._end>e._dur||t._start<0))for(var n=e;n;)n._dirty=1,n=n.parent;return e},$e=function(e){for(var t=e.parent;t&&t.parent;)t._dirty=1,t.totalDuration(),t=t.parent;return e},et=function(e,t,n,r){return e._startAt&&(y?e._startAt.revert(Se):e.vars.immediateRender&&!e.vars.autoRevert||e._startAt.render(t,!0,r))},tt=function e(t){return!t||t._ts&&e(t.parent)},nt=function(e){return e._repeat?rt(e._tTime,e=e.duration()+e._rDelay)*e:0},rt=function(e,t){var n=Math.floor(e=V(e/t));return e&&n===e?n-1:n},it=function(e,t){return(e-t._start)*t._ts+(t._ts>=0?0:t._dirty?t.totalDuration():t._tDur)},at=function(e){return e._end=V(e._start+(e._tDur/Math.abs(e._ts||e._rts||S)||0))},ot=function(e,t){var n=e._dp;return n&&n.smoothChildTiming&&e._ts&&(e._start=V(n._time-(e._ts>0?t/e._ts:((e._dirty?e.totalDuration():e._tDur)-t)/-e._ts)),at(e),n._dirty||Qe(n,e)),e},st=function(e,t){var n;if((t._time||!t._dur&&t._initted||t._startS)&&t.render(n,!0)),Qe(e,t)._dp&&e._initted&&e._time>=e._dur&&e._ts){if(e._dur=0&&n.totalTime(n._tTime),n=n._dp;e._zTime=-S}},ct=function(e,t,n,r){return t.parent&&Ze(t),t._start=V((j(n)?n:n||e!==R?vt(e,n,t):e._time)+t._delay),t._end=V(t._start+(t.totalDuration()/Math.abs(t.timeScale())||0)),Ye(e,t,`_first`,`_last`,e._sort?`_start`:0),ft(t)||(e._recent=t),r||st(e,t),e._ts<0&&ot(e,e._tTime),e},lt=function(e,t){return(pe.ScrollTrigger||_e(`scrollTrigger`,t))&&pe.ScrollTrigger.create(t,e)},ut=function(e,t,n,r,i){if(Tn(e,t,i),!e._initted)return 1;if(!n&&e._pt&&!y&&(e._dur&&e.vars.lazy!==!1||!e._dur&&e.vars.lazy)&&De!==rn.frame)return Te.push(e),e._lazy=[i,r],1},dt=function e(t){var n=t.parent;return n&&n._ts&&n._initted&&!n._lock&&(n.rawTime()<0||e(n))},ft=function(e){var t=e.data;return t===`isFromStart`||t===`isStart`},pt=function(e,t,n,r){var i=e.ratio,a=t<0||!t&&(!e._start&&dt(e)&&!(!e._initted&&ft(e))||(e._ts<0||e._dp._ts<0)&&!ft(e))?0:1,o=e._rDelay,s=0,c,l,u;if(o&&e._repeat&&(s=xt(0,e._tDur,t),l=rt(s,o),e._yoyo&&l&1&&(a=1-a),l!==rt(e._tTime,o)&&(i=1-a,e.vars.repeatRefresh&&e._initted&&e.invalidate())),a!==i||y||r||e._zTime===S||!t&&e._zTime){if(!e._initted&&ut(e,t,r,n,s))return;for(u=e._zTime,e._zTime=t||(n?S:0),n||=t&&!u,e.ratio=a,e._from&&(a=1-a),e._time=0,e._tTime=s,c=e._pt;c;)c.r(a,c.d),c=c._next;t<0&&et(e,t,n,!0),e._onUpdate&&!n&&Ut(e,`onUpdate`),s&&e._repeat&&!n&&e.parent&&Ut(e,`onRepeat`),(t>=e._tDur||t<0)&&e.ratio===a&&(a&&Ze(e,1),!n&&!y&&(Ut(e,a?`onComplete`:`onReverseComplete`,!0),e._prom&&e._prom()))}else e._zTime||=t},mt=function(e,t,n){var r;if(n>t)for(r=e._first;r&&r._start<=n;){if(r.data===`isPause`&&r._start>t)return r;r=r._next}else for(r=e._last;r&&r._start>=n;){if(r.data===`isPause`&&r._start0&&!r&&ot(e,e._tTime=e._tDur*o),e.parent&&at(e),n||Qe(e.parent,e),e},gt=function(e){return e instanceof K?Qe(e):ht(e,e._dur)},_t={_start:0,endTime:be,totalDuration:be},vt=function e(t,n,r){var i=t.labels,a=t._recent||_t,o=t.duration()>=x?a.endTime(!1):t._dur,s,c,l;return k(n)&&(isNaN(n)||n in i)?(c=n.charAt(0),l=n.substr(-1)===`%`,s=n.indexOf(`=`),c===`<`||c===`>`?(s>=0&&(n=n.replace(/=/,``)),(c===`<`?a._start:a.endTime(a._repeat>=0))+(parseFloat(n.substr(1))||0)*(l?(s<0?a:r).totalDuration()/100:1)):s<0?(n in i||(i[n]=o),i[n]):(c=parseFloat(n.charAt(s-1)+n.substr(s+1)),l&&r&&(c=c/100*(L(r)?r[0]:r).totalDuration()),s>1?e(t,n.substr(0,s-1),r)+c:o+c)):n==null?o:+n},yt=function(e,t,n){var r=j(t[1]),i=(r?2:1)+(e<2?0:1),a=t[i],o,s;if(r&&(a.duration=t[1]),a.parent=n,e){for(o=a,s=n;s&&!(`immediateRender`in o);)o=s.vars.defaults||{},s=P(s.vars.inherit)&&s.parent;a.immediateRender=P(o.immediateRender),e<2?a.runBackwards=1:a.startAt=t[i-1]}return new q(t[0],a,t[i+1])},bt=function(e,t){return e||e===0?t(e):t},xt=function(e,t,n){return nt?t:n},U=function(e,t){return!k(e)||!(t=le.exec(e))?``:t[1]},St=function(e,t,n){return bt(n,function(n){return xt(e,t,n)})},Ct=[].slice,wt=function(e,t){return e&&N(e)&&`length`in e&&(!t&&!e.length||e.length-1 in e&&N(e[0]))&&!e.nodeType&&e!==ue},Tt=function(e,t,n){return n===void 0&&(n=[]),e.forEach(function(e){var r;return k(e)&&!t||wt(e,1)?(r=n).push.apply(r,Et(e)):n.push(e)})||n},Et=function(e,t,n){return b&&!t&&b.selector?b.selector(e):k(e)&&!n&&(de||!an())?Ct.call((t||fe).querySelectorAll(e),0):L(e)?Tt(e,n):wt(e)?Ct.call(e,0):e?[e]:[]},Dt=function(e){return e=Et(e)[0]||ve(`Invalid scope`)||{},function(t){var n=e.current||e.nativeElement||e;return Et(t,n.querySelectorAll?n:n===e?ve(`Invalid scope`)||fe.createElement(`div`):e)}},Ot=function(e){return e.sort(function(){return .5-Math.random()})},kt=function(e){if(A(e))return e;var t=N(e)?e:{each:e},n=fn(t.ease),r=t.from||0,i=parseFloat(t.base)||0,a={},o=r>0&&r<1,s=isNaN(r)||o,c=t.axis,l=r,u=r;return k(r)?l=u={center:.5,edges:.5,end:1}[r]||0:!o&&s&&(l=r[0],u=r[1]),function(e,o,d){var f=(d||t).length,p=a[f],m,h,g,_,v,y,b,S,C;if(!p){if(C=t.grid===`auto`?0:(t.grid||[1,x])[1],!C){for(b=-x;b<(b=d[C++].getBoundingClientRect().left)&&Cb&&(b=v),vf?f-1:c?c===`y`?f/C:C:Math.max(C,f/C))||0)*(r===`edges`?-1:1),p.b=f<0?i-f:i,p.u=U(t.amount||t.each)||0,n=n&&f<0?dn(n):n}return f=(p[e]-p.min)/p.max||0,V(p.b+(n?n(f):f)*p.v)+p.u}},At=function(e){var t=10**((e+``).split(`.`)[1]||``).length;return function(n){var r=V(Math.round(parseFloat(n)/e)*e*t);return(r-r%1)/t+(j(n)?0:U(n))}},jt=function(e,t){var n=L(e),r,i;return!n&&N(e)&&(r=n=e.radius||x,e.values?(e=Et(e.values),(i=!j(e[0]))&&(r*=r)):e=At(e.increment)),bt(t,n?A(e)?function(t){return i=e(t),Math.abs(i-t)<=r?i:t}:function(t){for(var n=parseFloat(i?t.x:t),a=parseFloat(i?t.y:0),o=x,s=0,c=e.length,l,u;c--;)i?(l=e[c].x-n,u=e[c].y-a,l=l*l+u*u):l=Math.abs(e[c]-n),li?a-e:e)})},zt=function(e){return e.replace(te,function(e){var t=e.indexOf(`[`)+1,n=e.substring(t||7,t?e.indexOf(`]`):e.length-1).split(ne);return Mt(t?n:+n[0],t?0:+n[1],+n[2]||1e-5)})},Bt=function(e,t,n,r,i){var a=t-e,o=r-n;return bt(i,function(t){return n+((t-e)/a*o||0)})},Vt=function e(t,n,r,i){var a=isNaN(t+n)?0:function(e){return(1-e)*t+e*n};if(!a){var o=k(t),s={},c,l,u,d,f;if(r===!0&&(i=1)&&(r=null),o)t={p:t},n={p:n};else if(L(t)&&!L(n)){for(u=[],d=t.length,f=d-2,l=1;l(o=Math.abs(o))&&(s=a,i=o);return s},Ut=function(e,t,n){var r=e.vars,i=r[t],a=b,o=e._ctx,s,c,l;if(i)return s=r[t+`Params`],c=r.callbackScope||e,n&&Te.length&&Re(),o&&(b=o),l=s?i.apply(c,s):i.call(c),b=a,l},Wt=function(e){return Ze(e),e.scrollTrigger&&e.scrollTrigger.kill(!!y),e.progress()<1&&Ut(e,`onInterrupt`),e},Gt,Kt=[],qt=function(e){if(e)if(e=!e.name&&e.default||e,F()||e.headless){var t=e.name,n=A(e),r=t&&!n&&e.init?function(){this._props=[]}:e,i={init:be,render:Bn,add:bn,kill:Hn,modifier:Vn,rawVars:0},a={targetTest:0,get:0,getSetter:In,aliases:{},register:0};if(an(),e!==r){if(Oe[t])return;H(r,H(Ke(e,i),a)),We(r.prototype,We(i,Ke(e,a))),Oe[r.prop=t]=r,e.targetTest&&(je.push(r),we[t]=1),t=(t===`css`?`CSS`:t.charAt(0).toUpperCase()+t.substr(1))+`Plugin`}ye(t,r),e.register&&e.register(Y,r,J)}else Kt.push(e)},W=255,Jt={aqua:[0,W,W],lime:[0,W,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,W],navy:[0,0,128],white:[W,W,W],olive:[128,128,0],yellow:[W,W,0],orange:[W,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[W,0,0],pink:[W,192,203],cyan:[0,W,W],transparent:[W,W,W,0]},Yt=function(e,t,n){return e+=e<0?1:e>1?-1:0,(e*6<1?t+(n-t)*e*6:e<.5?n:e*3<2?t+(n-t)*(2/3-e)*6:t)*W+.5|0},Xt=function(e,t,n){var r=e?j(e)?[e>>16,e>>8&W,e&W]:0:Jt.black,i,a,o,s,c,l,u,d,f,p;if(!r){if(e.substr(-1)===`,`&&(e=e.substr(0,e.length-1)),Jt[e])r=Jt[e];else if(e.charAt(0)===`#`){if(e.length<6&&(i=e.charAt(1),a=e.charAt(2),o=e.charAt(3),e=`#`+i+i+a+a+o+o+(e.length===5?e.charAt(4)+e.charAt(4):``)),e.length===9)return r=parseInt(e.substr(1,6),16),[r>>16,r>>8&W,r&W,parseInt(e.substr(7),16)/255];e=parseInt(e.substr(1),16),r=[e>>16,e>>8&W,e&W]}else if(e.substr(0,3)===`hsl`){if(r=p=e.match(re),!t)s=r[0]%360/360,c=r[1]/100,l=r[2]/100,a=l<=.5?l*(c+1):l+c-l*c,i=l*2-a,r.length>3&&(r[3]*=1),r[0]=Yt(s+1/3,i,a),r[1]=Yt(s,i,a),r[2]=Yt(s-1/3,i,a);else if(~e.indexOf(`=`))return r=e.match(ie),n&&r.length<4&&(r[3]=1),r}else r=e.match(re)||Jt.transparent;r=r.map(Number)}return t&&!p&&(i=r[0]/W,a=r[1]/W,o=r[2]/W,u=Math.max(i,a,o),d=Math.min(i,a,o),l=(u+d)/2,u===d?s=c=0:(f=u-d,c=l>.5?f/(2-u-d):f/(u+d),s=u===i?(a-o)/f+(at||h<0)&&(r+=h-n),i+=h,y=i-r,_=y-o,(_>0||g)&&(b=++d.frame,f=y-d.time*1e3,d.time=y/=1e3,o+=_+(_>=a?4:a-_),v=1),g||(c=l(u)),v)for(p=0;p=t&&p--},_listeners:s},d}(),an=function(){return!nn&&rn.wake()},G={},on=/^[\d.\-M][\d.\-,\s]/,sn=/["']/g,cn=function(e){for(var t={},n=e.substr(1,e.length-3).split(`:`),r=n[0],i=1,a=n.length,o,s,c;i1&&n.config?n.config.apply(null,~e.indexOf(`{`)?[cn(t[1])]:ln(e).split(`,`).map(Ve)):G._CE&&on.test(e)?G._CE(``,e):n},dn=function(e){return function(t){return 1-e(1-t)}},fn=function(e,t){return e&&(A(e)?e:G[e]||un(e))||t},pn=function(e,t,n,r){n===void 0&&(n=function(e){return 1-t(1-e)}),r===void 0&&(r=function(e){return e<.5?t(e*2)/2:1-t((1-e)*2)/2});var i={easeIn:t,easeOut:n,easeInOut:r},a;return z(e,function(e){for(var t in G[e]=pe[e]=i,G[a=e.toLowerCase()]=n,i)G[a+(t===`easeIn`?`.in`:t===`easeOut`?`.out`:`.inOut`)]=G[e+`.`+t]=i[t]}),i},mn=function(e){return function(t){return t<.5?(1-e(1-t*2))/2:.5+e((t-.5)*2)/2}},hn=function e(t,n,r){var i=n>=1?n:1,a=(r||(t?.3:.45))/(n<1?n:1),o=a/C*(Math.asin(1/i)||0),s=function(e){return e===1?1:i*2**(-10*e)*O((e-o)*a)+1},c=t===`out`?s:t===`in`?function(e){return 1-s(1-e)}:mn(s);return a=C/a,c.config=function(n,r){return e(t,n,r)},c},gn=function e(t,n){n===void 0&&(n=1.70158);var r=function(e){return e?--e*e*((n+1)*e+n)+1:0},i=t===`out`?r:t===`in`?function(e){return 1-r(1-e)}:mn(r);return i.config=function(n){return e(t,n)},i};z(`Linear,Quad,Cubic,Quart,Quint,Strong`,function(e,t){var n=t<5?t+1:t;pn(e+`,Power`+(n-1),t?function(e){return e**+n}:function(e){return e},function(e){return 1-(1-e)**n},function(e){return e<.5?(e*2)**n/2:1-((1-e)*2)**n/2})}),G.Linear.easeNone=G.none=G.Linear.easeIn,pn(`Elastic`,hn(`in`),hn(`out`),hn()),(function(e,t){var n=1/t,r=2*n,i=2.5*n,a=function(a){return a0?e+(e+this._rDelay)*this._repeat:e):this.totalDuration()&&this._dur},t.totalDuration=function(e){return arguments.length?(this._dirty=0,ht(this,this._repeat<0?e:(e-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},t.totalTime=function(e,t){if(an(),!arguments.length)return this._tTime;var n=this._dp;if(n&&n.smoothChildTiming&&this._ts){for(ot(this,e),!n._dp||n.parent||st(n,this);n&&n.parent;)n.parent._time!==n._start+(n._ts>=0?n._tTime/n._ts:(n.totalDuration()-n._tTime)/-n._ts)&&n.totalTime(n._tTime,!0),n=n.parent;!this.parent&&this._dp.autoRemoveChildren&&(this._ts>0&&e0||!this._tDur&&!e)&&ct(this._dp,this,this._start-this._delay)}return(this._tTime!==e||!this._dur&&!t||this._initted&&Math.abs(this._zTime)===S||!this._initted&&this._dur&&e||!e&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=e),Be(this,e,t)),this},t.time=function(e,t){return arguments.length?this.totalTime(Math.min(this.totalDuration(),e+nt(this))%(this._dur+this._rDelay)||(e?this._dur:0),t):this._time},t.totalProgress=function(e,t){return arguments.length?this.totalTime(this.totalDuration()*e,t):this.totalDuration()?Math.min(1,this._tTime/this._tDur):this.rawTime()>=0&&this._initted?1:0},t.progress=function(e,t){return arguments.length?this.totalTime(this.duration()*(this._yoyo&&!(this.iteration()&1)?1-e:e)+nt(this),t):this.duration()?Math.min(1,this._time/this._dur):+(this.rawTime()>0)},t.iteration=function(e,t){var n=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(e-1)*n,t):this._repeat?rt(this._tTime,n)+1:1},t.timeScale=function(e,t){if(!arguments.length)return this._rts===-S?0:this._rts;if(this._rts===e)return this;var n=this.parent&&this._ts?it(this.parent._time,this):this._tTime;return this._rts=+e||0,this._ts=this._ps||e===-S?0:this._rts,this.totalTime(xt(-Math.abs(this._delay),this.totalDuration(),n),t!==!1),at(this),$e(this)},t.paused=function(e){return arguments.length?(this._ps!==e&&(this._ps=e,e?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):(an(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,this.progress()===1&&Math.abs(this._zTime)!==S&&(this._tTime-=S)))),this):this._ps},t.startTime=function(e){if(arguments.length){this._start=V(e);var t=this.parent||this._dp;return t&&(t._sort||!this.parent)&&ct(t,this,this._start-this._delay),this}return this._start},t.endTime=function(e){return this._start+(P(e)?this.totalDuration():this.duration())/Math.abs(this._ts||1)},t.rawTime=function(e){var t=this.parent||this._dp;return t?e&&(!this._ts||this._repeat&&this._time&&this.totalProgress()<1)?this._tTime%(this._dur+this._rDelay):this._ts?it(t.rawTime(e),this):this._tTime:this._tTime},t.revert=function(e){e===void 0&&(e=Ce);var t=y;return y=e,ze(this)&&(this.timeline&&this.timeline.revert(e),this.totalTime(-.01,e.suppressEvents)),this.data!==`nested`&&e.kill!==!1&&this.kill(),y=t,this},t.globalTime=function(e){for(var t=this,n=arguments.length?e:t.rawTime();t;)n=t._start+n/(Math.abs(t._ts)||1),t=t._dp;return!this.parent&&this._sat?this._sat.globalTime(e):n},t.repeat=function(e){return arguments.length?(this._repeat=e===1/0?-2:e,gt(this)):this._repeat===-2?1/0:this._repeat},t.repeatDelay=function(e){if(arguments.length){var t=this._time;return this._rDelay=e,gt(this),t?this.time(t):this}return this._rDelay},t.yoyo=function(e){return arguments.length?(this._yoyo=e,this):this._yoyo},t.seek=function(e,t){return this.totalTime(vt(this,e),P(t))},t.restart=function(e,t){return this.play().totalTime(e?-this._delay:0,P(t)),this._dur||(this._zTime=-S),this},t.play=function(e,t){return e!=null&&this.seek(e,t),this.reversed(!1).paused(!1)},t.reverse=function(e,t){return e!=null&&this.seek(e||this.totalDuration(),t),this.reversed(!0).paused(!1)},t.pause=function(e,t){return e!=null&&this.seek(e,t),this.paused(!0)},t.resume=function(){return this.paused(!1)},t.reversed=function(e){return arguments.length?(!!e!==this.reversed()&&this.timeScale(-this._rts||(e?-S:0)),this):this._rts<0},t.invalidate=function(){return this._initted=this._act=0,this._zTime=-S,this},t.isActive=function(){var e=this.parent||this._dp,t=this._start,n;return!!(!e||this._ts&&this._initted&&e.isActive()&&(n=e.rawTime(!0))>=t&&n1?(t?(r[e]=t,n&&(r[e+`Params`]=n),e===`onUpdate`&&(this._onUpdate=t)):delete r[e],this):r[e]},t.then=function(e){var t=this,n=t._prom;return new Promise(function(r){var i=A(e)?e:He,a=function(){var e=t.then;t.then=null,n&&n(),A(i)&&(i=i(t))&&(i.then||i===t)&&(t.then=e),r(i),t.then=e};t._initted&&t.totalProgress()===1&&t._ts>=0||!t._tTime&&t._ts<0?a():t._prom=a})},t.kill=function(){Wt(this)},e}();H(vn.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-S,_prom:0,_ps:!1,_rts:1});var K=function(e){h(t,e);function t(t,n){var r;return t===void 0&&(t={}),r=e.call(this,t)||this,r.labels={},r.smoothChildTiming=!!t.smoothChildTiming,r.autoRemoveChildren=!!t.autoRemoveChildren,r._sort=P(t.sortChildren),R&&ct(t.parent||R,m(r),n),t.reversed&&r.reverse(),t.paused&&r.paused(!0),t.scrollTrigger&<(m(r),t.scrollTrigger),r}var n=t.prototype;return n.to=function(e,t,n){return yt(0,arguments,this),this},n.from=function(e,t,n){return yt(1,arguments,this),this},n.fromTo=function(e,t,n,r){return yt(2,arguments,this),this},n.set=function(e,t,n){return t.duration=0,t.parent=this,qe(t).repeatDelay||(t.repeat=0),t.immediateRender=!!t.immediateRender,new q(e,t,vt(this,n),1),this},n.call=function(e,t,n){return ct(this,q.delayedCall(0,e,t),n)},n.staggerTo=function(e,t,n,r,i,a,o){return n.duration=t,n.stagger=n.stagger||r,n.onComplete=a,n.onCompleteParams=o,n.parent=this,new q(e,n,vt(this,i)),this},n.staggerFrom=function(e,t,n,r,i,a,o){return n.runBackwards=1,qe(n).immediateRender=P(n.immediateRender),this.staggerTo(e,t,n,r,i,a,o)},n.staggerFromTo=function(e,t,n,r,i,a,o,s){return r.startAt=n,qe(r).immediateRender=P(r.immediateRender),this.staggerTo(e,t,r,i,a,o,s)},n.render=function(e,t,n){var r=this._time,i=this._dirty?this.totalDuration():this._tDur,a=this._dur,o=e<=0?0:V(e),s=this._zTime<0!=e<0&&(this._initted||!a),c,l,u,d,f,p,m,h,g,_,v,b;if(this!==R&&o>i&&e>=0&&(o=i),o!==this._tTime||n||s){if(r!==this._time&&a&&(o+=this._time-r,e+=this._time-r),c=o,g=this._start,h=this._ts,p=!h,s&&(a||(r=this._zTime),(e||!t)&&(this._zTime=e)),this._repeat){if(v=this._yoyo,f=a+this._rDelay,this._repeat<-1&&e<0)return this.totalTime(f*100+e,t,n);if(c=V(o%f),o===i?(d=this._repeat,c=a):(_=V(o/f),d=~~_,d&&d===_&&(c=a,d--),c>a&&(c=a)),_=rt(this._tTime,f),!r&&this._tTime&&_!==d&&this._tTime-_*f-this._dur<=0&&(_=d),v&&d&1&&(c=a-c,b=1),d!==_&&!this._lock){var x=v&&_&1,C=x===(v&&d&1);if(d<_&&(x=!x),r=x?0:o%a?a:o,this._lock=1,this.render(r||(b?0:V(d*f)),t,!a)._lock=0,this._tTime=o,!t&&this.parent&&Ut(this,`onRepeat`),this.vars.repeatRefresh&&!b&&(this.invalidate()._lock=1,_=d),r&&r!==this._time||p!==!this._ts||this.vars.onRepeat&&!this.parent&&!this._act||(a=this._dur,i=this._tDur,C&&(this._lock=2,r=x?a:-1e-4,this.render(r,!0),this.vars.repeatRefresh&&!b&&this.invalidate()),this._lock=0,!this._ts&&!p))return this}}if(this._hasPause&&!this._forcing&&this._lock<2&&(m=mt(this,V(r),V(c)),m&&(o-=c-(c=m._start))),this._tTime=o,this._time=c,this._act=!!h,this._initted||(this._onUpdate=this.vars.onUpdate,this._initted=1,this._zTime=e,r=0),!r&&o&&a&&!t&&!_&&(Ut(this,`onStart`),this._tTime!==o))return this;if(c>=r&&e>=0)for(l=this._first;l;){if(u=l._next,(l._act||c>=l._start)&&l._ts&&m!==l){if(l.parent!==this)return this.render(e,t,n);if(l.render(l._ts>0?(c-l._start)*l._ts:(l._dirty?l.totalDuration():l._tDur)+(c-l._start)*l._ts,t,n),c!==this._time||!this._ts&&!p){m=0,u&&(o+=this._zTime=-S);break}}l=u}else{l=this._last;for(var w=e<0?e:c;l;){if(u=l._prev,(l._act||w<=l._end)&&l._ts&&m!==l){if(l.parent!==this)return this.render(e,t,n);if(l.render(l._ts>0?(w-l._start)*l._ts:(l._dirty?l.totalDuration():l._tDur)+(w-l._start)*l._ts,t,n||y&&ze(l)),c!==this._time||!this._ts&&!p){m=0,u&&(o+=this._zTime=w?-S:S);break}}l=u}}if(m&&!t&&(this.pause(),m.render(c>=r?0:-S)._zTime=c>=r?1:-1,this._ts))return this._start=g,at(this),this.render(e,t,n);this._onUpdate&&!t&&Ut(this,`onUpdate`,!0),(o===i&&this._tTime>=this.totalDuration()||!o&&r)&&(g===this._start||Math.abs(h)!==Math.abs(this._ts))&&(this._lock||((e||!a)&&(o===i&&this._ts>0||!o&&this._ts<0)&&Ze(this,1),!t&&!(e<0&&!r)&&(o||r||!i)&&(Ut(this,o===i&&e>=0?`onComplete`:`onReverseComplete`,!0),this._prom&&!(o0)&&this._prom())))}return this},n.add=function(e,t){var n=this;if(j(t)||(t=vt(this,t,e)),!(e instanceof vn)){if(L(e))return e.forEach(function(e){return n.add(e,t)}),this;if(k(e))return this.addLabel(e,t);if(A(e))e=q.delayedCall(0,e);else return this}return this===e?this:ct(this,e,t)},n.getChildren=function(e,t,n,r){e===void 0&&(e=!0),t===void 0&&(t=!0),n===void 0&&(n=!0),r===void 0&&(r=-x);for(var i=[],a=this._first;a;)a._start>=r&&(a instanceof q?t&&i.push(a):(n&&i.push(a),e&&i.push.apply(i,a.getChildren(!0,t,n)))),a=a._next;return i},n.getById=function(e){for(var t=this.getChildren(1,1,1),n=t.length;n--;)if(t[n].vars.id===e)return t[n]},n.remove=function(e){return k(e)?this.removeLabel(e):A(e)?this.killTweensOf(e):(e.parent===this&&Xe(this,e),e===this._recent&&(this._recent=this._last),Qe(this))},n.totalTime=function(t,n){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=V(rn.time-(this._ts>0?t/this._ts:(this.totalDuration()-t)/-this._ts))),e.prototype.totalTime.call(this,t,n),this._forcing=0,this):this._tTime},n.addLabel=function(e,t){return this.labels[e]=vt(this,t),this},n.removeLabel=function(e){return delete this.labels[e],this},n.addPause=function(e,t,n){var r=q.delayedCall(0,t||be,n);return r.data=`isPause`,this._hasPause=1,ct(this,r,vt(this,e))},n.removePause=function(e){var t=this._first;for(e=vt(this,e);t;)t._start===e&&t.data===`isPause`&&Ze(t),t=t._next},n.killTweensOf=function(e,t,n){for(var r=this.getTweensOf(e,n),i=r.length;i--;)Cn!==r[i]&&r[i].kill(e,t);return this},n.getTweensOf=function(e,t){for(var n=[],r=Et(e),i=this._first,a=j(t),o;i;)i instanceof q?Le(i._targets,r)&&(a?(!Cn||i._initted&&i._ts)&&i.globalTime(0)<=t&&i.globalTime(i.totalDuration())>t:!t||i.isActive())&&n.push(i):(o=i.getTweensOf(r,t)).length&&n.push.apply(n,o),i=i._next;return n},n.tweenTo=function(e,t){t||={};var n=this,r=vt(n,e),i=t,a=i.startAt,o=i.onStart,s=i.onStartParams,c=i.immediateRender,l,u=q.to(n,H({ease:t.ease||`none`,lazy:!1,immediateRender:!1,time:r,overwrite:`auto`,duration:t.duration||Math.abs((r-(a&&`time`in a?a.time:n._time))/n.timeScale())||S,onStart:function(){if(n.pause(),!l){var e=t.duration||Math.abs((r-(a&&`time`in a?a.time:n._time))/n.timeScale());u._dur!==e&&ht(u,e,0,1).render(u._time,!0,!0),l=1}o&&o.apply(u,s||[])}},t));return c?u.render(0):u},n.tweenFromTo=function(e,t,n){return this.tweenTo(t,H({startAt:{time:vt(this,e)}},n))},n.recent=function(){return this._recent},n.nextLabel=function(e){return e===void 0&&(e=this._time),Ht(this,vt(this,e))},n.previousLabel=function(e){return e===void 0&&(e=this._time),Ht(this,vt(this,e),1)},n.currentLabel=function(e){return arguments.length?this.seek(e,!0):this.previousLabel(this._time+S)},n.shiftChildren=function(e,t,n){n===void 0&&(n=0);var r=this._first,i=this.labels,a;for(e=V(e);r;)r._start>=n&&(r._start+=e,r._end+=e),r=r._next;if(t)for(a in i)i[a]>=n&&(i[a]+=e);return Qe(this)},n.invalidate=function(t){var n=this._first;for(this._lock=0;n;)n.invalidate(t),n=n._next;return e.prototype.invalidate.call(this,t)},n.clear=function(e){e===void 0&&(e=!0);for(var t=this._first,n;t;)n=t._next,this.remove(t),t=n;return this._dp&&(this._time=this._tTime=this._pTime=0),e&&(this.labels={}),Qe(this)},n.totalDuration=function(e){var t=0,n=this,r=n._last,i=x,a,o,s;if(arguments.length)return n.timeScale((n._repeat<0?n.duration():n.totalDuration())/(n.reversed()?-e:e));if(n._dirty){for(s=n.parent;r;)a=r._prev,r._dirty&&r.totalDuration(),o=r._start,o>i&&n._sort&&r._ts&&!n._lock?(n._lock=1,ct(n,r,o-r._delay,1)._lock=0):i=o,o<0&&r._ts&&(t-=o,(!s&&!n._dp||s&&s.smoothChildTiming)&&(n._start+=V(o/n._ts),n._time-=o,n._tTime-=o),n.shiftChildren(-o,!1,-1/0),i=0),r._end>t&&r._ts&&(t=r._end),r=a;ht(n,n===R&&n._time>t?n._time:t,1,1),n._dirty=0}return n._tDur},t.updateRoot=function(e){if(R._ts&&(Be(R,it(e,R)),De=rn.frame),rn.frame>=Ae){Ae+=g.autoSleep||120;var t=R._first;if((!t||!t._ts)&&g.autoSleep&&rn._listeners.length<2){for(;t&&!t._ts;)t=t._next;t||rn.sleep()}}},t}(vn);H(K.prototype,{_lock:0,_hasPause:0,_forcing:0});var yn=function(e,t,n,r,i,a,o){var s=new J(this._pt,e,t,0,1,zn,null,i),c=0,l=0,u,d,f,p,m,h,g,_;for(s.b=n,s.e=r,n+=``,r+=``,(g=~r.indexOf(`random(`))&&(r=zt(r)),a&&(_=[n,r],a(_,e,t),n=_[0],r=_[1]),d=n.match(oe)||[];u=oe.exec(r);)p=u[0],m=r.substring(c,u.index),f?f=(f+1)%5:m.substr(-5)===`rgba(`&&(f=1),p!==d[l++]&&(h=parseFloat(d[l-1])||0,s._pt={_next:s._pt,p:m||l===1?m:`,`,s:h,c:p.charAt(1)===`=`?Ie(h,p)-h:parseFloat(p)-h,m:f&&f<4?Math.round:0},c=oe.lastIndex);return s.c=c`)}),b.duration();else{for(T in C={},f)T===`ease`||T===`easeEach`||On(T,f[T],C,f.easeEach);for(T in C)for(M=C[T].sort(function(e,t){return e.t-t.t}),A=0,x=0;xi-S&&!o?i:ea&&(c=a)),p=this._yoyo&&u&1,p&&(c=a-c),f=rt(this._tTime,d),c===r&&!n&&this._initted&&u===f)return this._tTime=s,this;u!==f&&this.vars.repeatRefresh&&!p&&!this._lock&&c!==d&&this._initted&&(this._lock=n=1,this.render(V(d*u),!0).invalidate()._lock=0)}if(!this._initted){if(ut(this,o?e:c,n,t,s))return this._tTime=0,this;if(r!==this._time&&!(n&&this.vars.repeatRefresh&&u!==f))return this;if(a!==this._dur)return this.render(e,t,n)}if(this._rEase){var g=c0||!s&&this._ts<0)&&Ze(this,1),!t&&!(o&&!r)&&(s||r||p)&&(Ut(this,s===i?`onComplete`:`onReverseComplete`,!0),this._prom&&!(s0)&&this._prom()))}return this},n.targets=function(){return this._targets},n.invalidate=function(t){return(!t||!this.vars.runBackwards)&&(this._startAt=0),this._pt=this._op=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(t),e.prototype.invalidate.call(this,t)},n.resetTo=function(e,t,n,r,i){nn||rn.wake(),this._ts||this.play();var a=Math.min(this._dur,(this._dp._time-this._start)*this._ts),o;return this._initted||Tn(this,a),o=this._ease(a/this._dur),En(this,e,t,n,r,o,a,i)?this.resetTo(e,t,n,r,1):(ot(this,0),this.parent||Ye(this._dp,this,`_first`,`_last`,this._dp._sort?`_start`:0),this.render(0))},n.kill=function(e,t){if(t===void 0&&(t=`all`),!e&&(!t||t===`all`))return this._lazy=this._pt=0,this.parent?Wt(this):this.scrollTrigger&&this.scrollTrigger.kill(!!y),this;if(this.timeline){var n=this.timeline.totalDuration();return this.timeline.killTweensOf(e,t,Cn&&Cn.vars.overwrite!==!0)._first||Wt(this),this.parent&&n!==this.timeline.totalDuration()&&ht(this,this._dur*this.timeline._tDur/n,0,1),this}var r=this._targets,i=e?Et(e):r,a=this._ptLookup,o=this._pt,s,c,l,u,d,f,p;if((!t||t===`all`)&&Je(r,i))return t===`all`&&(this._pt=0),Wt(this);for(s=this._op=this._op||[],t!==`all`&&(k(t)&&(d={},z(t,function(e){return d[e]=1}),t=d),t=Dn(r,t)),p=r.length;p--;)if(~i.indexOf(r[p]))for(d in c=a[p],t===`all`?(s[p]=t,u=c,l={}):(l=s[p]=s[p]||{},u=t),u)f=c&&c[d],f&&((!(`kill`in f.d)||f.d.kill(d)===!0)&&Xe(this,f,`_pt`),delete c[d]),l!==`all`&&(l[d]=1);return this._initted&&!this._pt&&o&&Wt(this),this},t.to=function(e,n){return new t(e,n,arguments[2])},t.from=function(e,t){return yt(1,arguments)},t.delayedCall=function(e,n,r,i){return new t(n,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:e,onComplete:n,onReverseComplete:n,onCompleteParams:r,onReverseCompleteParams:r,callbackScope:i})},t.fromTo=function(e,t,n){return yt(2,arguments)},t.set=function(e,n){return n.duration=0,n.repeatDelay||(n.repeat=0),new t(e,n)},t.killTweensOf=function(e,t,n){return R.killTweensOf(e,t,n)},t}(vn);H(q.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),z(`staggerTo,staggerFrom,staggerFromTo`,function(e){q[e]=function(){var t=new K,n=Ct.call(arguments,0);return n.splice(e===`staggerFromTo`?5:4,0,0),t[e].apply(t,n)}});var Mn=function(e,t,n){return e[t]=n},Nn=function(e,t,n){return e[t](n)},Pn=function(e,t,n,r){return e[t](r.fp,n)},Fn=function(e,t,n){return e.setAttribute(t,n)},In=function(e,t){return A(e[t])?Nn:M(e[t])&&e.setAttribute?Fn:Mn},Ln=function(e,t){return t.set(t.t,t.p,Math.round((t.s+t.c*e)*1e6)/1e6,t)},Rn=function(e,t){return t.set(t.t,t.p,!!(t.s+t.c*e),t)},zn=function(e,t){var n=t._pt,r=``;if(!e&&t.b)r=t.b;else if(e===1&&t.e)r=t.e;else{for(;n;)r=n.p+(n.m?n.m(n.s+n.c*e):Math.round((n.s+n.c*e)*1e4)/1e4)+r,n=n._next;r+=t.c}t.set(t.t,t.p,r,t)},Bn=function(e,t){for(var n=t._pt;n;)n.r(e,n.d),n=n._next},Vn=function(e,t,n,r){for(var i=this._pt,a;i;)a=i._next,i.p===r&&i.modifier(e,t,n),i=a},Hn=function(e){for(var t=this._pt,n,r;t;)r=t._next,t.p===e&&!t.op||t.op===e?Xe(this,t,`_pt`):t.dep||(n=1),t=r;return!n},Un=function(e,t,n,r){r.mSet(e,t,r.m.call(r.tween,n,r.mt),r)},Wn=function(e){for(var t=e._pt,n,r,i,a;t;){for(n=t._next,r=i;r&&r.pr>t.pr;)r=r._next;(t._prev=r?r._prev:a)?t._prev._next=t:i=t,(t._next=r)?r._prev=t:a=t,t=n}e._pt=i},J=function(){function e(e,t,n,r,i,a,o,s,c){this.t=t,this.s=r,this.c=i,this.p=n,this.r=a||Ln,this.d=o||this,this.set=s||Mn,this.pr=c||0,this._next=e,e&&(e._prev=this)}var t=e.prototype;return t.modifier=function(e,t,n){this.mSet=this.mSet||this.set,this.set=Un,this.m=e,this.mt=n,this.tween=t},e}();z(Me+`parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger,easeReverse`,function(e){return we[e]=1}),pe.TweenMax=pe.TweenLite=q,pe.TimelineLite=pe.TimelineMax=K,R=new K({sortChildren:!1,defaults:_,autoRemoveChildren:!0,id:`root`,smoothChildTiming:!0}),g.stringFilter=tn;var Gn=[],Kn={},qn=[],Jn=0,Yn=0,Xn=function(e){return(Kn[e]||qn).map(function(e){return e()})},Zn=function(){var e=Date.now(),t=[];e-Jn>2&&(Xn(`matchMediaInit`),Gn.forEach(function(e){var n=e.queries,r=e.conditions,i,a,o,s;for(a in n)i=ue.matchMedia(n[a]).matches,i&&(o=1),i!==r[a]&&(r[a]=i,s=1);s&&(e.revert(),o&&t.push(e))}),Xn(`matchMediaRevert`),t.forEach(function(e){return e.onMatch(e,function(t){return e.add(null,t)})}),Jn=e,Xn(`matchMedia`))},Qn=function(){function e(e,t){this.selector=t&&Dt(t),this.data=[],this._r=[],this.isReverted=!1,this.id=Yn++,e&&this.add(e)}var t=e.prototype;return t.add=function(e,t,n){A(e)&&(n=t,t=e,e=A);var r=this,i=function(){var e=b,i=r.selector,a;return e&&e!==r&&e.data.push(r),n&&(r.selector=Dt(n)),b=r,a=t.apply(r,arguments),A(a)&&r._r.push(a),b=e,r.selector=i,r.isReverted=!1,a};return r.last=i,e===A?i(r,function(e){return r.add(null,e)}):e?r[e]=i:i},t.ignore=function(e){var t=b;b=null,e(this),b=t},t.getTweens=function(){var t=[];return this.data.forEach(function(n){return n instanceof e?t.push.apply(t,n.getTweens()):n instanceof q&&!(n.parent&&n.parent.data===`nested`)&&t.push(n)}),t},t.clear=function(){this._r.length=this.data.length=0},t.kill=function(e,t){var n=this;if(e?(function(){for(var t=n.getTweens(),r=n.data.length,i;r--;)i=n.data[r],i.data===`isFlip`&&(i.revert(),i.getChildren(!0,!0,!1).forEach(function(e){return t.splice(t.indexOf(e),1)}));for(t.map(function(e){return{g:e._dur||e._delay||e._sat&&!e._sat.vars.immediateRender?e.globalTime(0):-1/0,t:e}}).sort(function(e,t){return t.g-e.g||-1/0}).forEach(function(t){return t.t.revert(e)}),r=n.data.length;r--;)i=n.data[r],i instanceof K?i.data!==`nested`&&(i.scrollTrigger&&i.scrollTrigger.revert(),i.kill()):!(i instanceof q)&&i.revert&&i.revert(e);n._r.forEach(function(t){return t(e,n)}),n.isReverted=!0})():this.data.forEach(function(e){return e.kill&&e.kill()}),this.clear(),t)for(var r=Gn.length;r--;)Gn[r].id===this.id&&Gn.splice(r,1)},t.revert=function(e){this.kill(e||{})},e}(),$n=function(){function e(e){this.contexts=[],this.scope=e,b&&b.data.push(this)}var t=e.prototype;return t.add=function(e,t,n){N(e)||(e={matches:e});var r=new Qn(0,n||this.scope),i=r.conditions={},a,o,s;for(o in b&&!r.selector&&(r.selector=b.selector),this.contexts.push(r),t=r.add(`onMatch`,t),r.queries=e,e)o===`all`?s=1:(a=ue.matchMedia(e[o]),a&&(Gn.indexOf(r)<0&&Gn.push(r),(i[o]=a.matches)&&(s=1),a.addListener?a.addListener(Zn):a.addEventListener(`change`,Zn)));return s&&t(r,function(e){return r.add(null,e)}),this},t.revert=function(e){this.kill(e||{})},t.kill=function(e){this.contexts.forEach(function(t){return t.kill(e,!0)})},e}(),er={registerPlugin:function(){[...arguments].forEach(function(e){return qt(e)})},timeline:function(e){return new K(e)},getTweensOf:function(e,t){return R.getTweensOf(e,t)},getProperty:function(e,t,n,r){k(e)&&(e=Et(e)[0]);var i=Pe(e||{}).get,a=n?He:Ve;return n===`native`&&(n=``),e&&(t?a((Oe[t]&&Oe[t].get||i)(e,t,n,r)):function(t,n,r){return a((Oe[t]&&Oe[t].get||i)(e,t,n,r))})},quickSetter:function(e,t,n){if(e=Et(e),e.length>1){var r=e.map(function(e){return Y.quickSetter(e,t,n)}),i=r.length;return function(e){for(var t=i;t--;)r[t](e)}}e=e[0]||{};var a=Oe[t],o=Pe(e),s=o.harness&&(o.harness.aliases||{})[t]||t,c=a?function(t){var r=new a;Gt._pt=0,r.init(e,n?t+n:t,Gt,0,[e]),r.render(1,r),Gt._pt&&Bn(1,Gt)}:o.set(e,s);return a?c:function(t){return c(e,s,n?t+n:t,o,1)}},quickTo:function(e,t,n){var r,i=Y.to(e,H((r={},r[t]=`+=0.1`,r.paused=!0,r.stagger=0,r),n||{})),a=function(e,n,r){return i.resetTo(t,e,n,r)};return a.tween=i,a},isTweening:function(e){return R.getTweensOf(e,!0).length>0},defaults:function(e){return e&&e.ease&&(e.ease=fn(e.ease,_.ease)),Ge(_,e||{})},config:function(e){return Ge(g,e||{})},registerEffect:function(e){var t=e.name,n=e.effect,r=e.plugins,i=e.defaults,a=e.extendTimeline;(r||``).split(`,`).forEach(function(e){return e&&!Oe[e]&&!pe[e]&&ve(t+` effect requires `+e+` plugin.`)}),ke[t]=function(e,t,r){return n(Et(e),H(t||{},i),r)},a&&(K.prototype[t]=function(e,n,r){return this.add(ke[t](e,N(n)?n:(r=n)&&{},this),r)})},registerEase:function(e,t){G[e]=fn(t)},parseEase:function(e,t){return arguments.length?fn(e,t):G},getById:function(e){return R.getById(e)},exportRoot:function(e,t){e===void 0&&(e={});var n=new K(e),r,i;for(n.smoothChildTiming=P(e.smoothChildTiming),R.remove(n),n._dp=0,n._time=n._tTime=R._time,r=R._first;r;)i=r._next,(t||!(!r._dur&&r instanceof q&&r.vars.onComplete===r._targets[0]))&&ct(n,r,r._start-r._delay),r=i;return ct(R,n,0),n},context:function(e,t){return e?new Qn(e,t):b},matchMedia:function(e){return new $n(e)},matchMediaRefresh:function(){return Gn.forEach(function(e){var t=e.conditions,n,r;for(r in t)t[r]&&(t[r]=!1,n=1);n&&e.revert()})||Zn()},addEventListener:function(e,t){var n=Kn[e]||(Kn[e]=[]);~n.indexOf(t)||n.push(t)},removeEventListener:function(e,t){var n=Kn[e],r=n&&n.indexOf(t);r>=0&&n.splice(r,1)},utils:{wrap:Lt,wrapYoyo:Rt,distribute:kt,random:Mt,snap:jt,normalize:Ft,getUnit:U,clamp:St,splitColor:Xt,toArray:Et,selector:Dt,mapRange:Bt,pipe:Nt,unitize:Pt,interpolate:Vt,shuffle:Ot},install:ge,effects:ke,ticker:rn,updateRoot:K.updateRoot,plugins:Oe,globalTimeline:R,core:{PropTween:J,globals:ye,Tween:q,Timeline:K,Animation:vn,getCache:Pe,_removeLinkedListItem:Xe,reverting:function(){return y},context:function(e){return e&&b&&(b.data.push(e),e._ctx=b),b},suppressOverwrites:function(e){return v=e}}};z(`to,from,fromTo,delayedCall,set,killTweensOf`,function(e){return er[e]=q[e]}),rn.add(K.updateRoot),Gt=er.to({},{duration:0});var tr=function(e,t){for(var n=e._pt;n&&n.p!==t&&n.op!==t&&n.fp!==t;)n=n._next;return n},nr=function(e,t){var n=e._targets,r,i,a;for(r in t)for(i=n.length;i--;)a=e._ptLookup[i][r],(a&&=a.d)&&(a._pt&&(a=tr(a,r)),a&&a.modifier&&a.modifier(t[r],e,n[i],r))},rr=function(e,t){return{name:e,headless:1,rawVars:1,init:function(e,n,r){r._onInit=function(e){var r,i;if(k(n)&&(r={},z(n,function(e){return r[e]=1}),n=r),t){for(i in r={},n)r[i]=t(n[i]);n=r}nr(e,n)}}}},Y=er.registerPlugin({name:`attr`,init:function(e,t,n,r,i){var a,o,s;for(a in this.tween=n,t)s=e.getAttribute(a)||``,o=this.add(e,`setAttribute`,(s||0)+``,t[a],r,i,0,0,a),o.op=a,o.b=s,this._props.push(a)},render:function(e,t){for(var n=t._pt;n;)y?n.set(n.t,n.p,n.b,n):n.r(e,n.d),n=n._next}},{name:`endArray`,headless:1,init:function(e,t){for(var n=t.length;n--;)this.add(e,n,e[n]||0,t[n],0,0,0,0,0,1)}},rr(`roundProps`,At),rr(`modifiers`),rr(`snap`,jt))||er;q.version=K.version=Y.version=`3.15.0`,he=1,F()&&an(),G.Power0,G.Power1,G.Power2,G.Power3,G.Power4,G.Linear,G.Quad,G.Cubic,G.Quart,G.Quint,G.Strong,G.Elastic,G.Back,G.SteppedEase,G.Bounce,G.Sine,G.Expo,G.Circ;var ir,ar,or,sr,cr,lr,ur,dr=function(){return typeof window<`u`},fr={},pr=180/Math.PI,mr=Math.PI/180,hr=Math.atan2,gr=1e8,_r=/([A-Z])/g,vr=/(left|right|width|margin|padding|x)/i,yr=/[\s,\(]\S/,br={autoAlpha:`opacity,visibility`,scale:`scaleX,scaleY`,alpha:`opacity`},xr=function(e,t){return t.set(t.t,t.p,Math.round((t.s+t.c*e)*1e4)/1e4+t.u,t)},Sr=function(e,t){return t.set(t.t,t.p,e===1?t.e:Math.round((t.s+t.c*e)*1e4)/1e4+t.u,t)},Cr=function(e,t){return t.set(t.t,t.p,e?Math.round((t.s+t.c*e)*1e4)/1e4+t.u:t.b,t)},wr=function(e,t){return t.set(t.t,t.p,e===1?t.e:e?Math.round((t.s+t.c*e)*1e4)/1e4+t.u:t.b,t)},Tr=function(e,t){var n=t.s+t.c*e;t.set(t.t,t.p,~~(n+(n<0?-.5:.5))+t.u,t)},Er=function(e,t){return t.set(t.t,t.p,e?t.e:t.b,t)},Dr=function(e,t){return t.set(t.t,t.p,e===1?t.e:t.b,t)},Or=function(e,t,n){return e.style[t]=n},kr=function(e,t,n){return e.style.setProperty(t,n)},Ar=function(e,t,n){return e._gsap[t]=n},jr=function(e,t,n){return e._gsap.scaleX=e._gsap.scaleY=n},Mr=function(e,t,n,r,i){var a=e._gsap;a.scaleX=a.scaleY=n,a.renderTransform(i,a)},Nr=function(e,t,n,r,i){var a=e._gsap;a[t]=n,a.renderTransform(i,a)},X=`transform`,Z=X+`Origin`,Pr=function e(t,n){var r=this,i=this.target,a=i.style,o=i._gsap;if(t in fr&&a){if(this.tfm=this.tfm||{},t!==`transform`)t=br[t]||t,~t.indexOf(`,`)?t.split(`,`).forEach(function(e){return r.tfm[e]=$r(i,e)}):this.tfm[t]=o.x?o[t]:$r(i,t),t===Z&&(this.tfm.zOrigin=o.zOrigin);else return br.transform.split(`,`).forEach(function(t){return e.call(r,t,n)});if(this.props.indexOf(X)>=0)return;o.svg&&(this.svgo=i.getAttribute(`data-svg-origin`),this.props.push(Z,n,``)),t=X}(a||n)&&this.props.push(t,n,a[t])},Fr=function(e){e.translate&&(e.removeProperty(`translate`),e.removeProperty(`scale`),e.removeProperty(`rotate`))},Ir=function(){var e=this.props,t=this.target,n=t.style,r=t._gsap,i,a;for(i=0;i=0?Vr[i]:``)+e},Ur=function(){dr()&&window.document&&(ir=window,ar=ir.document,or=ar.documentElement,cr=zr(`div`)||{style:{}},zr(`div`),X=Hr(X),Z=X+`Origin`,cr.style.cssText=`border-width:0;line-height:0;position:absolute;padding:0`,Rr=!!Hr(`perspective`),ur=Y.core.reverting,sr=1)},Wr=function(e){var t=e.ownerSVGElement,n=zr(`svg`,t&&t.getAttribute(`xmlns`)||`http://www.w3.org/2000/svg`),r=e.cloneNode(!0),i;r.style.display=`block`,n.appendChild(r),or.appendChild(n);try{i=r.getBBox()}catch{}return n.removeChild(r),or.removeChild(n),i},Gr=function(e,t){for(var n=t.length;n--;)if(e.hasAttribute(t[n]))return e.getAttribute(t[n])},Kr=function(e){var t,n;try{t=e.getBBox()}catch{t=Wr(e),n=1}return t&&(t.width||t.height)||n||(t=Wr(e)),t&&!t.width&&!t.x&&!t.y?{x:+Gr(e,[`x`,`cx`,`x1`])||0,y:+Gr(e,[`y`,`cy`,`y1`])||0,width:0,height:0}:t},qr=function(e){return!!(e.getCTM&&(!e.parentNode||e.ownerSVGElement)&&Kr(e))},Jr=function(e,t){if(t){var n=e.style,r;t in fr&&t!==Z&&(t=X),n.removeProperty?(r=t.substr(0,2),(r===`ms`||t.substr(0,6)===`webkit`)&&(t=`-`+t),n.removeProperty(r===`--`?t:t.replace(_r,`-$1`).toLowerCase())):n.removeAttribute(t)}},Yr=function(e,t,n,r,i,a){var o=new J(e._pt,t,n,0,1,a?Dr:Er);return e._pt=o,o.b=r,o.e=i,e._props.push(n),o},Xr={deg:1,rad:1,turn:1},Zr={grid:1,flex:1},Qr=function e(t,n,r,i){var a=parseFloat(r)||0,o=(r+``).trim().substr((a+``).length)||`px`,s=cr.style,c=vr.test(n),l=t.tagName.toLowerCase()===`svg`,u=(l?`client`:`offset`)+(c?`Width`:`Height`),d=100,f=i===`px`,p=i===`%`,m,h,g,_;if(i===o||!a||Xr[i]||Xr[o])return a;if(o!==`px`&&!f&&(a=e(t,n,r,`px`)),_=t.getCTM&&qr(t),(p||o===`%`)&&(fr[n]||~n.indexOf(`adius`)))return m=_?t.getBBox()[c?`width`:`height`]:t[u],B(p?a/m*d:a/100*m);if(s[c?`width`:`height`]=d+(f?o:i),h=i!==`rem`&&~n.indexOf(`adius`)||i===`em`&&t.appendChild&&!l?t:t.parentNode,_&&(h=(t.ownerSVGElement||{}).parentNode),(!h||h===ar||!h.appendChild)&&(h=ar.body),g=h._gsap,g&&p&&g.width&&c&&g.time===rn.time&&!g.uncache)return B(a/g.width*d);if(p&&(n===`height`||n===`width`)){var v=t.style[n];t.style[n]=d+i,m=t[u],v?t.style[n]=v:Jr(t,n)}else (p||o===`%`)&&!Zr[Br(h,`display`)]&&(s.position=Br(t,`position`)),h===t&&(s.position=`static`),h.appendChild(cr),m=cr[u],h.removeChild(cr),s.position=`absolute`;return c&&p&&(g=Pe(h),g.time=rn.time,g.width=h[u]),B(f?m*a/d:m&&a?d/m*a:0)},$r=function(e,t,n,r){var i;return sr||Ur(),t in br&&t!==`transform`&&(t=br[t],~t.indexOf(`,`)&&(t=t.split(`,`)[0])),fr[t]&&t!==`transform`?(i=di(e,r),i=t===`transformOrigin`?i.svg?i.origin:fi(Br(e,Z))+` `+i.zOrigin+`px`:i[t]):(i=e.style[t],(!i||i===`auto`||r||~(i+``).indexOf(`calc(`))&&(i=ii[t]&&ii[t](e,t,n)||Br(e,t)||Fe(e,t)||+(t===`opacity`))),n&&!~(i+``).trim().indexOf(` `)?Qr(e,t,i,n)+n:i},ei=function(e,t,n,r){if(!n||n===`none`){var i=Hr(t,e,1),a=i&&Br(e,i,1);a&&a!==n?(t=i,n=a):t===`borderColor`&&(n=Br(e,`borderTopColor`))}var o=new J(this._pt,e.style,t,0,1,zn),s=0,c=0,l,u,d,f,p,m,h,_,v,y,b,x;if(o.b=n,o.e=r,n+=``,r+=``,r.substring(0,6)===`var(--`&&(r=Br(e,r.substring(4,r.indexOf(`)`)))),r===`auto`&&(m=e.style[t],e.style[t]=r,r=Br(e,t)||r,m?e.style[t]=m:Jr(e,t)),l=[n,r],tn(l),n=l[0],r=l[1],d=n.match(ae)||[],x=r.match(ae)||[],x.length){for(;u=ae.exec(r);)h=u[0],v=r.substring(s,u.index),p?p=(p+1)%5:(v.substr(-5)===`rgba(`||v.substr(-5)===`hsla(`)&&(p=1),h!==(m=d[c++]||``)&&(f=parseFloat(m)||0,b=m.substr((f+``).length),h.charAt(1)===`=`&&(h=Ie(f,h)+b),_=parseFloat(h),y=h.substr((_+``).length),s=ae.lastIndex-y.length,y||(y=y||g.units[t]||b,s===r.length&&(r+=y,o.e+=y)),b!==y&&(f=Qr(e,t,m,y)||0),o._pt={_next:o._pt,p:v||c===1?v:`,`,s:f,c:_-f,m:p&&p<4||t===`zIndex`?Math.round:0});o.c=s-1;)o=i[c],fr[o]&&(s=1,o=o===`transformOrigin`?Z:X),Jr(n,o);s&&(Jr(n,X),a&&(a.svg&&n.removeAttribute(`transform`),r.scale=r.rotate=r.translate=`none`,di(n,1),a.uncache=1,Fr(r)))}},ii={clearProps:function(e,t,n,r,i){if(i.data!==`isFromStart`){var a=e._pt=new J(e._pt,t,n,0,0,ri);return a.u=r,a.pr=-10,a.tween=i,e._props.push(n),1}}},ai=[1,0,0,1,0,0],oi={},si=function(e){return e===`matrix(1, 0, 0, 1, 0, 0)`||e===`none`||!e},ci=function(e){var t=Br(e,X);return si(t)?ai:t.substr(7).match(ie).map(B)},li=function(e,t){var n=e._gsap||Pe(e),r=e.style,i=ci(e),a,o,s,c;return n.svg&&e.getAttribute(`transform`)?(s=e.transform.baseVal.consolidate().matrix,i=[s.a,s.b,s.c,s.d,s.e,s.f],i.join(`,`)===`1,0,0,1,0,0`?ai:i):(i===ai&&!e.offsetParent&&e!==or&&!n.svg&&(s=r.display,r.display=`block`,a=e.parentNode,(!a||!e.offsetParent&&!e.getBoundingClientRect().width)&&(c=1,o=e.nextElementSibling,or.appendChild(e)),i=ci(e),s?r.display=s:Jr(e,`display`),c&&(o?a.insertBefore(e,o):a?a.appendChild(e):or.removeChild(e))),t&&i.length>6?[i[0],i[1],i[4],i[5],i[12],i[13]]:i)},ui=function(e,t,n,r,i,a){var o=e._gsap,s=i||li(e,!0),c=o.xOrigin||0,l=o.yOrigin||0,u=o.xOffset||0,d=o.yOffset||0,f=s[0],p=s[1],m=s[2],h=s[3],g=s[4],_=s[5],v=t.split(` `),y=parseFloat(v[0])||0,b=parseFloat(v[1])||0,x,S,C,w;n?s!==ai&&(S=f*h-p*m)&&(C=h/S*y+b*(-m/S)+(m*_-h*g)/S,w=y*(-p/S)+f/S*b-(f*_-p*g)/S,y=C,b=w):(x=Kr(e),y=x.x+(~v[0].indexOf(`%`)?y/100*x.width:y),b=x.y+(~(v[1]||v[0]).indexOf(`%`)?b/100*x.height:b)),r||r!==!1&&o.smooth?(g=y-c,_=b-l,o.xOffset=u+(g*f+_*m)-g,o.yOffset=d+(g*p+_*h)-_):o.xOffset=o.yOffset=0,o.xOrigin=y,o.yOrigin=b,o.smooth=!!r,o.origin=t,o.originIsAbsolute=!!n,e.style[Z]=`0px 0px`,a&&(Yr(a,o,`xOrigin`,c,y),Yr(a,o,`yOrigin`,l,b),Yr(a,o,`xOffset`,u,o.xOffset),Yr(a,o,`yOffset`,d,o.yOffset)),e.setAttribute(`data-svg-origin`,y+` `+b)},di=function(e,t){var n=e._gsap||new _n(e);if(`x`in n&&!t&&!n.uncache)return n;var r=e.style,i=n.scaleX<0,a=`px`,o=`deg`,s=getComputedStyle(e),c=Br(e,Z)||`0`,l=u=d=m=h=_=v=y=b=0,u,d,f=p=1,p,m,h,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j,M,N,P,F,I,ee,L,te,ne,re;return n.svg=!!(e.getCTM&&qr(e)),s.translate&&((s.translate!==`none`||s.scale!==`none`||s.rotate!==`none`)&&(r[X]=(s.translate===`none`?``:`translate3d(`+(s.translate+` 0 0`).split(` `).slice(0,3).join(`, `)+`) `)+(s.rotate===`none`?``:`rotate(`+s.rotate+`) `)+(s.scale===`none`?``:`scale(`+s.scale.split(` `).join(`,`)+`) `)+(s[X]===`none`?``:s[X])),r.scale=r.rotate=r.translate=`none`),C=li(e,n.svg),n.svg&&(n.uncache?(P=e.getBBox(),c=n.xOrigin-P.x+`px `+(n.yOrigin-P.y)+`px`,N=``):N=!t&&e.getAttribute(`data-svg-origin`),ui(e,N||c,!!N||n.originIsAbsolute,n.smooth!==!1,C)),x=n.xOrigin||0,S=n.yOrigin||0,C!==ai&&(D=C[0],O=C[1],k=C[2],A=C[3],l=j=C[4],u=M=C[5],C.length===6?(f=Math.sqrt(D*D+O*O),p=Math.sqrt(A*A+k*k),m=D||O?hr(O,D)*pr:0,v=k||A?hr(k,A)*pr+m:0,v&&(p*=Math.abs(Math.cos(v*mr))),n.svg&&(l-=x-(x*D+S*k),u-=S-(x*O+S*A))):(re=C[6],te=C[7],I=C[8],ee=C[9],L=C[10],ne=C[11],l=C[12],u=C[13],d=C[14],w=hr(re,L),h=w*pr,w&&(T=Math.cos(-w),E=Math.sin(-w),N=j*T+I*E,P=M*T+ee*E,F=re*T+L*E,I=j*-E+I*T,ee=M*-E+ee*T,L=re*-E+L*T,ne=te*-E+ne*T,j=N,M=P,re=F),w=hr(-k,L),_=w*pr,w&&(T=Math.cos(-w),E=Math.sin(-w),N=D*T-I*E,P=O*T-ee*E,F=k*T-L*E,ne=A*E+ne*T,D=N,O=P,k=F),w=hr(O,D),m=w*pr,w&&(T=Math.cos(w),E=Math.sin(w),N=D*T+O*E,P=j*T+M*E,O=O*T-D*E,M=M*T-j*E,D=N,j=P),h&&Math.abs(h)+Math.abs(m)>359.9&&(h=m=0,_=180-_),f=B(Math.sqrt(D*D+O*O+k*k)),p=B(Math.sqrt(M*M+re*re)),w=hr(j,M),v=Math.abs(w)>2e-4?w*pr:0,b=ne?1/(ne<0?-ne:ne):0),n.svg&&(N=e.getAttribute(`transform`),n.forceCSS=e.setAttribute(`transform`,``)||!si(Br(e,X)),N&&e.setAttribute(`transform`,N))),Math.abs(v)>90&&Math.abs(v)<270&&(i?(f*=-1,v+=m<=0?180:-180,m+=m<=0?180:-180):(p*=-1,v+=v<=0?180:-180)),t||=n.uncache,n.x=l-((n.xPercent=l&&(!t&&n.xPercent||(Math.round(e.offsetWidth/2)===Math.round(-l)?-50:0)))?e.offsetWidth*n.xPercent/100:0)+a,n.y=u-((n.yPercent=u&&(!t&&n.yPercent||(Math.round(e.offsetHeight/2)===Math.round(-u)?-50:0)))?e.offsetHeight*n.yPercent/100:0)+a,n.z=d+a,n.scaleX=B(f),n.scaleY=B(p),n.rotation=B(m)+o,n.rotationX=B(h)+o,n.rotationY=B(_)+o,n.skewX=v+o,n.skewY=y+o,n.transformPerspective=b+a,(n.zOrigin=parseFloat(c.split(` `)[2])||!t&&n.zOrigin||0)&&(r[Z]=fi(c)),n.xOffset=n.yOffset=0,n.force3D=g.force3D,n.renderTransform=n.svg?yi:Rr?vi:mi,n.uncache=0,n},fi=function(e){return(e=e.split(` `))[0]+` `+e[1]},pi=function(e,t,n){var r=U(t);return B(parseFloat(t)+parseFloat(Qr(e,`x`,n+`px`,r)))+r},mi=function(e,t){t.z=`0px`,t.rotationY=t.rotationX=`0deg`,t.force3D=0,vi(e,t)},hi=`0deg`,gi=`0px`,_i=`) `,vi=function(e,t){var n=t||this,r=n.xPercent,i=n.yPercent,a=n.x,o=n.y,s=n.z,c=n.rotation,l=n.rotationY,u=n.rotationX,d=n.skewX,f=n.skewY,p=n.scaleX,m=n.scaleY,h=n.transformPerspective,g=n.force3D,_=n.target,v=n.zOrigin,y=``,b=g===`auto`&&e&&e!==1||g===!0;if(v&&(u!==hi||l!==hi)){var x=parseFloat(l)*mr,S=Math.sin(x),C=Math.cos(x),w;x=parseFloat(u)*mr,w=Math.cos(x),a=pi(_,a,S*w*-v),o=pi(_,o,-Math.sin(x)*-v),s=pi(_,s,C*w*-v+v)}h!==gi&&(y+=`perspective(`+h+_i),(r||i)&&(y+=`translate(`+r+`%, `+i+`%) `),(b||a!==gi||o!==gi||s!==gi)&&(y+=s!==gi||b?`translate3d(`+a+`, `+o+`, `+s+`) `:`translate(`+a+`, `+o+_i),c!==hi&&(y+=`rotate(`+c+_i),l!==hi&&(y+=`rotateY(`+l+_i),u!==hi&&(y+=`rotateX(`+u+_i),(d!==hi||f!==hi)&&(y+=`skew(`+d+`, `+f+_i),(p!==1||m!==1)&&(y+=`scale(`+p+`, `+m+_i),_.style[X]=y||`translate(0, 0)`},yi=function(e,t){var n=t||this,r=n.xPercent,i=n.yPercent,a=n.x,o=n.y,s=n.rotation,c=n.skewX,l=n.skewY,u=n.scaleX,d=n.scaleY,f=n.target,p=n.xOrigin,m=n.yOrigin,h=n.xOffset,g=n.yOffset,_=n.forceCSS,v=parseFloat(a),y=parseFloat(o),b,x,S,C,w;s=parseFloat(s),c=parseFloat(c),l=parseFloat(l),l&&(l=parseFloat(l),c+=l,s+=l),s||c?(s*=mr,c*=mr,b=Math.cos(s)*u,x=Math.sin(s)*u,S=Math.sin(s-c)*-d,C=Math.cos(s-c)*d,c&&(l*=mr,w=Math.tan(c-l),w=Math.sqrt(1+w*w),S*=w,C*=w,l&&(w=Math.tan(l),w=Math.sqrt(1+w*w),b*=w,x*=w)),b=B(b),x=B(x),S=B(S),C=B(C)):(b=u,C=d,x=S=0),(v&&!~(a+``).indexOf(`px`)||y&&!~(o+``).indexOf(`px`))&&(v=Qr(f,`x`,a,`px`),y=Qr(f,`y`,o,`px`)),(p||m||h||g)&&(v=B(v+p-(p*b+m*S)+h),y=B(y+m-(p*x+m*C)+g)),(r||i)&&(w=f.getBBox(),v=B(v+r/100*w.width),y=B(y+i/100*w.height)),w=`matrix(`+b+`,`+x+`,`+S+`,`+C+`,`+v+`,`+y+`)`,f.setAttribute(`transform`,w),_&&(f.style[X]=w)},bi=function(e,t,n,r,i){var a=360,o=k(i),s=parseFloat(i)*(o&&~i.indexOf(`rad`)?pr:1)-r,c=r+s+`deg`,l,u;return o&&(l=i.split(`_`)[1],l===`short`&&(s%=a,s!==s%(a/2)&&(s+=s<0?a:-a)),l===`cw`&&s<0?s=(s+a*gr)%a-~~(s/a)*a:l===`ccw`&&s>0&&(s=(s-a*gr)%a-~~(s/a)*a)),e._pt=u=new J(e._pt,t,n,r,s,Sr),u.e=c,u.u=`deg`,e._props.push(n),u},xi=function(e,t){for(var n in t)e[n]=t[n];return e},Si=function(e,t,n){var r=xi({},n._gsap),i=`perspective,force3D,transformOrigin,svgOrigin`,a=n.style,o,s,c,l,u,d,f,p;for(s in r.svg?(c=n.getAttribute(`transform`),n.setAttribute(`transform`,``),a[X]=t,o=di(n,1),Jr(n,X),n.setAttribute(`transform`,c)):(c=getComputedStyle(n)[X],a[X]=t,o=di(n,1),a[X]=c),fr)c=r[s],l=o[s],c!==l&&i.indexOf(s)<0&&(f=U(c),p=U(l),u=f===p?parseFloat(c):Qr(n,s,c,p),d=parseFloat(l),e._pt=new J(e._pt,o,s,u,d-u,xr),e._pt.u=p||0,e._props.push(s));xi(o,r)};z(`padding,margin,Width,Radius`,function(e,t){var n=`Top`,r=`Right`,i=`Bottom`,a=`Left`,o=(t<3?[n,r,i,a]:[n+a,n+r,i+r,i+a]).map(function(n){return t<2?e+n:`border`+n+e});ii[t>1?`border`+e:e]=function(e,t,n,r,i){var a,s;if(arguments.length<4)return a=o.map(function(t){return $r(e,t,n)}),s=a.join(` `),s.split(a[0]).length===5?a[0]:s;a=(r+``).split(` `),s={},o.forEach(function(e,t){return s[e]=a[t]=a[t]||a[(t-1)/2|0]}),e.init(t,s,i)}});var Ci={name:`css`,register:Ur,targetTest:function(e){return e.style&&e.nodeType},init:function(e,t,n,r,i){var a=this._props,o=e.style,s=n.vars.startAt,c,l,u,d,f,p,m,h,_,v,y,b,x,S,C,w,T;for(m in sr||Ur(),this.styles=this.styles||Lr(e),w=this.styles.props,this.tween=n,t)if(m!==`autoRound`&&(l=t[m],!(Oe[m]&&Sn(m,t,n,r,e,i)))){if(f=typeof l,p=ii[m],f===`function`&&(l=l.call(n,r,e,i),f=typeof l),f===`string`&&~l.indexOf(`random(`)&&(l=zt(l)),p)p(this,e,m,l,n)&&(C=1);else if(m.substr(0,2)===`--`)c=(getComputedStyle(e).getPropertyValue(m)+``).trim(),l+=``,$t.lastIndex=0,$t.test(c)||(h=U(c),_=U(l),_?h!==_&&(c=Qr(e,m,c,_)+_):h&&(l+=h)),this.add(o,`setProperty`,c,l,r,i,0,0,m),a.push(m),w.push(m,0,o[m]);else if(f!==`undefined`){if(s&&m in s?(c=typeof s[m]==`function`?s[m].call(n,r,e,i):s[m],k(c)&&~c.indexOf(`random(`)&&(c=zt(c)),U(c+``)||c===`auto`||(c+=g.units[m]||U($r(e,m))||``),(c+``).charAt(1)===`=`&&(c=$r(e,m))):c=$r(e,m),d=parseFloat(c),v=f===`string`&&l.charAt(1)===`=`&&l.substr(0,2),v&&(l=l.substr(2)),u=parseFloat(l),m in br&&(m===`autoAlpha`&&(d===1&&$r(e,`visibility`)===`hidden`&&u&&(d=0),w.push(`visibility`,0,o.visibility),Yr(this,o,`visibility`,d?`inherit`:`hidden`,u?`inherit`:`hidden`,!u)),m!==`scale`&&m!==`transform`&&(m=br[m],~m.indexOf(`,`)&&(m=m.split(`,`)[0]))),y=m in fr,y){if(this.styles.save(m),T=l,f===`string`&&l.substring(0,6)===`var(--`){if(l=Br(e,l.substring(4,l.indexOf(`)`))),l.substring(0,5)===`calc(`){var E=e.style.perspective;e.style.perspective=l,l=Br(e,`perspective`),E?e.style.perspective=E:Jr(e,`perspective`)}u=parseFloat(l)}if(b||(x=e._gsap,x.renderTransform&&!t.parseTransform||di(e,t.parseTransform),S=t.smoothOrigin!==!1&&x.smooth,b=this._pt=new J(this._pt,o,X,0,1,x.renderTransform,x,0,-1),b.dep=1),m===`scale`)this._pt=new J(this._pt,x,`scaleY`,x.scaleY,(v?Ie(x.scaleY,v+u):u)-x.scaleY||0,xr),this._pt.u=0,a.push(`scaleY`,m),m+=`X`;else if(m===`transformOrigin`){w.push(Z,0,o[Z]),l=ni(l),x.svg?ui(e,l,0,S,0,this):(_=parseFloat(l.split(` `)[2])||0,_!==x.zOrigin&&Yr(this,x,`zOrigin`,x.zOrigin,_),Yr(this,o,m,fi(c),fi(l)));continue}else if(m===`svgOrigin`){ui(e,l,1,S,0,this);continue}else if(m in oi){bi(this,x,m,d,v?Ie(d,v+l):l);continue}else if(m===`smoothOrigin`){Yr(this,x,`smooth`,x.smooth,l);continue}else if(m===`force3D`){x[m]=l;continue}else if(m===`transform`){Si(this,l,e);continue}}else m in o||(m=Hr(m)||m);if(y||(u||u===0)&&(d||d===0)&&!yr.test(l)&&m in o)h=(c+``).substr((d+``).length),u||=0,_=U(l)||(m in g.units?g.units[m]:h),h!==_&&(d=Qr(e,m,c,_)),this._pt=new J(this._pt,y?x:o,m,d,(v?Ie(d,v+u):u)-d,!y&&(_===`px`||m===`zIndex`)&&t.autoRound!==!1?Tr:xr),this._pt.u=_||0,y&&T!==l?(this._pt.b=c,this._pt.e=T,this._pt.r=wr):h!==_&&_!==`%`&&(this._pt.b=c,this._pt.r=Cr);else if(m in o)ei.call(this,e,m,c,v?v+l:l);else if(m in e)this.add(e,m,c||e[m],v?v+l:l,r,i);else if(m!==`parseTransform`){_e(m,l);continue}y||(m in o?w.push(m,0,o[m]):typeof e[m]==`function`?w.push(m,2,e[m]()):w.push(m,1,c||e[m])),a.push(m)}}C&&Wn(this)},render:function(e,t){if(t.tween._time||!ur())for(var n=t._pt;n;)n.r(e,n.d),n=n._next;else t.styles.revert()},get:$r,aliases:br,getSetter:function(e,t,n){var r=br[t];return r&&r.indexOf(`,`)<0&&(t=r),t in fr&&t!==Z&&(e._gsap.x||$r(e,`x`))?n&&lr===n?t===`scale`?jr:Ar:(lr=n||{})&&(t===`scale`?Mr:Nr):e.style&&!M(e.style[t])?Or:~t.indexOf(`-`)?kr:In(e,t)},core:{_removeProperty:Jr,_getMatrix:li}};Y.utils.checkPrefix=Hr,Y.core.getStyleSaver=Lr,(function(e,t,n,r){var i=z(e+`,`+t+`,`+n,function(e){fr[e]=1});z(t,function(e){g.units[e]=`deg`,oi[e]=1}),br[i[13]]=e+`,`+t,z(r,function(e){var t=e.split(`:`);br[t[1]]=i[t[0]]})})(`x,y,z,scale,scaleX,scaleY,xPercent,yPercent`,`rotation,rotationX,rotationY,skewX,skewY`,`transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective`,`0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY`),z(`x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective`,function(e){g.units[e]=`px`}),Y.registerPlugin(Ci);var Q=Y.registerPlugin(Ci)||Y;Q.core.Tween;var wi=typeof document<`u`?p.useLayoutEffect:p.useEffect,Ti=e=>e&&!Array.isArray(e)&&typeof e==`object`,Ei=[],Di={},Oi=Q,ki=(e,t=Ei)=>{let n=Di;Ti(e)?(n=e,e=null,t=`dependencies`in n?n.dependencies:Ei):Ti(t)&&(n=t,t=`dependencies`in n?n.dependencies:Ei),e&&typeof e!=`function`&&console.warn(`First parameter must be a function or config object`);let{scope:r,revertOnUpdate:i}=n,a=(0,p.useRef)(!1),o=(0,p.useRef)(Oi.context(()=>{},r)),s=(0,p.useRef)(e=>o.current.add(null,e)),c=t&&t.length&&!i;return c&&wi(()=>(a.current=!0,()=>o.current.revert()),Ei),wi(()=>{if(e&&o.current.add(e,r),!c||!a.current)return()=>o.current.revert()},t),{context:o.current,contextSafe:s.current}};ki.register=e=>{Oi=e},ki.headless=!0;var $=t();Q.registerPlugin(ki);function Ai({size:e=12,maxDistance:t=5,pupilColor:n=`#2D2D2D`}){return(0,$.jsx)(`div`,{className:`pupil rounded-full`,"data-max-distance":t,style:{backgroundColor:n,height:e,width:e,willChange:`transform`}})}function ji({size:e=48,pupilSize:t=16,maxDistance:n=10,eyeColor:r=`white`,pupilColor:i=`#2D2D2D`}){return(0,$.jsx)(`div`,{className:`eyeball flex items-center justify-center overflow-hidden rounded-full`,"data-max-distance":n,style:{backgroundColor:r,height:e,width:e,willChange:`height`},children:(0,$.jsx)(`div`,{className:`eyeball-pupil rounded-full`,style:{backgroundColor:i,height:t,width:t,willChange:`transform`}})})}function Mi({isTyping:e=!1,showPassword:t=!1,passwordLength:n=0}){let r=(0,p.useRef)(null),i=(0,p.useRef)({x:0,y:0}),a=(0,p.useRef)(0),o=(0,p.useRef)(null),s=(0,p.useRef)(null),c=(0,p.useRef)(null),l=(0,p.useRef)(null),u=(0,p.useRef)(null),d=(0,p.useRef)(null),f=(0,p.useRef)(null),m=(0,p.useRef)(null),h=(0,p.useRef)(null),g=(0,p.useRef)(void 0),_=(0,p.useRef)(void 0),v=(0,p.useRef)(void 0),y=(0,p.useRef)(void 0),b=(0,p.useRef)(!1),x=n>0&&!t,S=n>0&&t,C=(0,p.useRef)({isHidingPassword:x,isLooking:!1,isShowingPassword:S,isTyping:e});C.current={isHidingPassword:x,isLooking:b.current,isShowingPassword:S,isTyping:e};let{contextSafe:w}=ki(()=>{Q.set(`.pupil`,{x:0,y:0}),Q.set(`.eyeball-pupil`,{x:0,y:0})},{scope:r}),T=(0,p.useRef)(null);(0,p.useEffect)(()=>{if(!(o.current&&s.current&&l.current&&c.current&&u.current&&d.current&&m.current&&f.current&&h.current))return;let e={blackFaceLeft:Q.quickTo(d.current,`left`,{duration:.3,ease:`power2.out`}),blackFaceTop:Q.quickTo(d.current,`top`,{duration:.3,ease:`power2.out`}),blackSkew:Q.quickTo(s.current,`skewX`,{duration:.3,ease:`power2.out`}),blackX:Q.quickTo(s.current,`x`,{duration:.3,ease:`power2.out`}),mouthX:Q.quickTo(h.current,`x`,{duration:.2,ease:`power2.out`}),mouthY:Q.quickTo(h.current,`y`,{duration:.2,ease:`power2.out`}),orangeFaceX:Q.quickTo(m.current,`x`,{duration:.2,ease:`power2.out`}),orangeFaceY:Q.quickTo(m.current,`y`,{duration:.2,ease:`power2.out`}),orangeSkew:Q.quickTo(l.current,`skewX`,{duration:.3,ease:`power2.out`}),purpleFaceLeft:Q.quickTo(u.current,`left`,{duration:.3,ease:`power2.out`}),purpleFaceTop:Q.quickTo(u.current,`top`,{duration:.3,ease:`power2.out`}),purpleHeight:Q.quickTo(o.current,`height`,{duration:.3,ease:`power2.out`}),purpleSkew:Q.quickTo(o.current,`skewX`,{duration:.3,ease:`power2.out`}),purpleX:Q.quickTo(o.current,`x`,{duration:.3,ease:`power2.out`}),yellowFaceX:Q.quickTo(f.current,`x`,{duration:.2,ease:`power2.out`}),yellowFaceY:Q.quickTo(f.current,`y`,{duration:.2,ease:`power2.out`}),yellowSkew:Q.quickTo(c.current,`skewX`,{duration:.3,ease:`power2.out`})};T.current=e;let t=e=>{let t=e.getBoundingClientRect(),n=t.left+t.width/2,r=t.top+t.height/3,a=i.current.x-n,o=i.current.y-r;return{bodySkew:Math.max(-6,Math.min(6,-a/120)),faceX:Math.max(-15,Math.min(15,a/20)),faceY:Math.max(-10,Math.min(10,o/30))}},n=(e,t)=>{let n=e.getBoundingClientRect(),r=n.left+n.width/2,a=n.top+n.height/2,o=i.current.x-r,s=i.current.y-a,c=Math.min(Math.sqrt(o**2+s**2),t),l=Math.atan2(s,o);return{x:Math.cos(l)*c,y:Math.sin(l)*c}},p=()=>{let i=r.current;if(!i)return;let{isHidingPassword:u,isLooking:d,isShowingPassword:f,isTyping:m}=C.current;if(o.current&&!f){let n=t(o.current);m||u?(e.purpleSkew(n.bodySkew-12),e.purpleX(40),e.purpleHeight(440)):(e.purpleSkew(n.bodySkew),e.purpleX(0),e.purpleHeight(400))}if(s.current&&!f){let n=t(s.current);d?(e.blackSkew(n.bodySkew*1.5+10),e.blackX(20)):m||u?(e.blackSkew(n.bodySkew*1.5),e.blackX(0)):(e.blackSkew(n.bodySkew),e.blackX(0))}if(l.current&&!f){let n=t(l.current);e.orangeSkew(n.bodySkew)}if(c.current&&!f){let n=t(c.current);e.yellowSkew(n.bodySkew)}if(o.current&&!f&&!d){let n=t(o.current),r=n.faceX>=0?Math.min(25,n.faceX*1.5):n.faceX;e.purpleFaceLeft(45+r),e.purpleFaceTop(40+n.faceY)}if(s.current&&!f&&!d){let n=t(s.current);e.blackFaceLeft(26+n.faceX),e.blackFaceTop(32+n.faceY)}if(l.current&&!f){let n=t(l.current);e.orangeFaceX(n.faceX),e.orangeFaceY(n.faceY)}if(c.current&&!f){let n=t(c.current);e.yellowFaceX(n.faceX),e.yellowFaceY(n.faceY),e.mouthX(n.faceX),e.mouthY(n.faceY)}if(!f){let e=i.querySelectorAll(`.pupil`);for(let t of e){let e=t,r=n(e,Number(e.dataset.maxDistance)||5);Q.set(e,{x:r.x,y:r.y})}if(!d){let e=i.querySelectorAll(`.eyeball`);for(let t of e){let e=t,r=Number(e.dataset.maxDistance)||10,i=e.querySelector(`.eyeball-pupil`);if(!i)continue;let a=n(e,r);Q.set(i,{x:a.x,y:a.y})}}}a.current=requestAnimationFrame(p)},g=e=>{i.current={x:e.clientX,y:e.clientY}};return window.addEventListener(`mousemove`,g,{passive:!0}),a.current=requestAnimationFrame(p),()=>{window.removeEventListener(`mousemove`,g),cancelAnimationFrame(a.current)}},[]),(0,p.useEffect)(()=>{let e=o.current?.querySelectorAll(`.eyeball`);if(!e?.length)return;let t=()=>{g.current=setTimeout(()=>{for(let t of e)Q.to(t,{duration:.08,ease:`power2.in`,height:2});setTimeout(()=>{for(let t of e){let e=Number(t.style.width.replace(`px`,``))||18;Q.to(t,{duration:.08,ease:`power2.out`,height:e})}t()},150)},Math.random()*4e3+3e3)};return t(),()=>clearTimeout(g.current)},[]),(0,p.useEffect)(()=>{let e=s.current?.querySelectorAll(`.eyeball`);if(!e?.length)return;let t=()=>{_.current=setTimeout(()=>{for(let t of e)Q.to(t,{duration:.08,ease:`power2.in`,height:2});setTimeout(()=>{for(let t of e){let e=Number(t.style.width.replace(`px`,``))||16;Q.to(t,{duration:.08,ease:`power2.out`,height:e})}t()},150)},Math.random()*4e3+3e3)};return t(),()=>clearTimeout(_.current)},[]);let E=w(()=>{let e=T.current;e&&(e.purpleFaceLeft(55),e.purpleFaceTop(65),e.blackFaceLeft(32),e.blackFaceTop(12)),o.current?.querySelectorAll(`.eyeball-pupil`).forEach(e=>{Q.to(e,{duration:.3,ease:`power2.out`,overwrite:`auto`,x:3,y:4})}),s.current?.querySelectorAll(`.eyeball-pupil`).forEach(e=>{Q.to(e,{duration:.3,ease:`power2.out`,overwrite:`auto`,x:0,y:-4})})}),D=w(()=>{let e=T.current;e&&(e.purpleFaceLeft(55),e.purpleFaceTop(65))}),O=w(()=>{let e=T.current;e&&(e.purpleSkew(0),e.blackSkew(0),e.orangeSkew(0),e.yellowSkew(0),e.purpleX(0),e.blackX(0),e.purpleHeight(400),e.purpleFaceLeft(20),e.purpleFaceTop(35),e.blackFaceLeft(10),e.blackFaceTop(28),e.orangeFaceX(-32),e.orangeFaceY(-5),e.yellowFaceX(-32),e.yellowFaceY(-5),e.mouthX(-30),e.mouthY(0)),o.current?.querySelectorAll(`.eyeball-pupil`).forEach(e=>{Q.to(e,{duration:.3,ease:`power2.out`,overwrite:`auto`,x:-4,y:-4})}),s.current?.querySelectorAll(`.eyeball-pupil`).forEach(e=>{Q.to(e,{duration:.3,ease:`power2.out`,overwrite:`auto`,x:-4,y:-4})}),l.current?.querySelectorAll(`.pupil`).forEach(e=>{Q.to(e,{duration:.3,ease:`power2.out`,overwrite:`auto`,x:-5,y:-4})}),c.current?.querySelectorAll(`.pupil`).forEach(e=>{Q.to(e,{duration:.3,ease:`power2.out`,overwrite:`auto`,x:-5,y:-4})})});return(0,p.useEffect)(()=>{if(!S||n<=0){clearTimeout(v.current);return}let e=o.current?.querySelectorAll(`.eyeball-pupil`);if(!e?.length)return;let t=()=>{v.current=setTimeout(()=>{for(let t of e)Q.to(t,{duration:.3,ease:`power2.out`,overwrite:`auto`,x:4,y:5});let n=T.current;n&&(n.purpleFaceLeft(20),n.purpleFaceTop(35)),setTimeout(()=>{for(let t of e)Q.to(t,{duration:.3,ease:`power2.out`,overwrite:`auto`,x:-4,y:-4});t()},800)},Math.random()*3e3+2e3)};return t(),()=>clearTimeout(v.current)},[S,n]),(0,p.useEffect)(()=>(e&&!S?(b.current=!0,C.current.isLooking=!0,E(),clearTimeout(y.current),y.current=setTimeout(()=>{b.current=!1,C.current.isLooking=!1,o.current?.querySelectorAll(`.eyeball-pupil`).forEach(e=>{Q.killTweensOf(e)})},800)):(clearTimeout(y.current),b.current=!1,C.current.isLooking=!1),()=>clearTimeout(y.current)),[E,S,e]),(0,p.useEffect)(()=>{S?O():x&&D()},[D,O,x,S]),(0,$.jsxs)(`div`,{className:`relative mx-auto h-[320px] w-[440px] max-w-full lg:h-[400px] lg:w-[550px]`,ref:r,children:[(0,$.jsx)(`div`,{className:`absolute bottom-0 left-[70px] z-[1] rounded-t-[10px]`,ref:o,style:{backgroundColor:`#6C3FF5`,borderRadius:`10px 10px 0 0`,height:400,transformOrigin:`bottom center`,width:180,willChange:`transform`},children:(0,$.jsxs)(`div`,{className:`absolute flex gap-8`,ref:u,style:{left:45,top:40},children:[(0,$.jsx)(ji,{maxDistance:5,pupilColor:`#2D2D2D`,pupilSize:7,size:18}),(0,$.jsx)(ji,{maxDistance:5,pupilColor:`#2D2D2D`,pupilSize:7,size:18})]})}),(0,$.jsx)(`div`,{className:`absolute bottom-0 left-[240px] z-[2] rounded-t-[8px]`,ref:s,style:{backgroundColor:`#2D2D2D`,borderRadius:`8px 8px 0 0`,height:310,transformOrigin:`bottom center`,width:120,willChange:`transform`},children:(0,$.jsxs)(`div`,{className:`absolute flex gap-6`,ref:d,style:{left:26,top:32},children:[(0,$.jsx)(ji,{maxDistance:4,pupilColor:`#2D2D2D`,pupilSize:6,size:16}),(0,$.jsx)(ji,{maxDistance:4,pupilColor:`#2D2D2D`,pupilSize:6,size:16})]})}),(0,$.jsx)(`div`,{className:`absolute bottom-0 left-0 z-[3]`,ref:l,style:{backgroundColor:`#FF9B6B`,borderRadius:`120px 120px 0 0`,height:200,transformOrigin:`bottom center`,width:240,willChange:`transform`},children:(0,$.jsxs)(`div`,{className:`absolute flex gap-8`,ref:m,style:{left:82,top:90},children:[(0,$.jsx)(Ai,{maxDistance:5,pupilColor:`#2D2D2D`,size:12}),(0,$.jsx)(Ai,{maxDistance:5,pupilColor:`#2D2D2D`,size:12})]})}),(0,$.jsxs)(`div`,{className:`absolute bottom-0 left-[310px] z-[4]`,ref:c,style:{backgroundColor:`#E8D754`,borderRadius:`70px 70px 0 0`,height:230,transformOrigin:`bottom center`,width:140,willChange:`transform`},children:[(0,$.jsxs)(`div`,{className:`absolute flex gap-6`,ref:f,style:{left:52,top:40},children:[(0,$.jsx)(Ai,{maxDistance:5,pupilColor:`#2D2D2D`,size:12}),(0,$.jsx)(Ai,{maxDistance:5,pupilColor:`#2D2D2D`,size:12})]}),(0,$.jsx)(`div`,{className:`absolute rounded-full`,ref:h,style:{backgroundColor:`#2D2D2D`,height:4,left:40,top:88,width:80}})]})]})}function Ni({className:e}){let{isTyping:t,passwordLength:r,showPassword:a}=d();return(0,$.jsxs)(`div`,{className:s(`relative overflow-hidden bg-muted text-foreground`,e),children:[(0,$.jsx)(`div`,{className:`absolute inset-0 bg-[linear-gradient(rgba(0,0,0,0.03)_1px,transparent_1px),linear-gradient(90deg,rgba(0,0,0,0.03)_1px,transparent_1px)] bg-[size:48px_48px] opacity-60 dark:bg-[linear-gradient(rgba(255,255,255,0.03)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.03)_1px,transparent_1px)]`}),(0,$.jsx)(`div`,{className:`absolute top-[-10%] right-[-5%] size-80 rounded-full bg-primary/5 blur-3xl`}),(0,$.jsx)(`div`,{className:`absolute bottom-[-10%] left-[-5%] size-72 rounded-full bg-primary/5 blur-3xl`}),(0,$.jsxs)(`div`,{className:`relative z-20 flex h-full flex-col items-center justify-center gap-10 p-12`,children:[(0,$.jsxs)(`div`,{className:`w-full space-y-4 text-center`,children:[(0,$.jsx)(`p`,{className:`text-muted-foreground text-xs uppercase tracking-[0.3em]`,children:`USDT Payment Gateway`}),(0,$.jsx)(`h2`,{className:`font-semibold text-3xl tracking-tight xl:text-4xl`,children:n()}),(0,$.jsx)(`p`,{className:`mx-auto max-w-md text-muted-foreground text-sm leading-relaxed`,children:i()})]}),(0,$.jsx)(`div`,{className:`w-full rounded-[36px] border bg-background/50 px-6 py-8 shadow-2xl backdrop-blur-sm`,children:(0,$.jsx)(Mi,{isTyping:t,passwordLength:r,showPassword:a})})]})]})}function Pi(){return(0,$.jsx)(f,{children:(0,$.jsxs)(`div`,{className:`container relative grid h-svh flex-col items-center justify-center lg:max-w-none lg:grid-cols-2 lg:px-0`,children:[(0,$.jsx)(Ni,{className:`relative h-full overflow-hidden bg-muted max-lg:hidden`}),(0,$.jsxs)(`div`,{className:`flex h-full min-w-xs flex-col justify-center lg:p-8`,children:[(0,$.jsx)(`div`,{className:`mx-auto flex w-full flex-col justify-center space-y-2 py-8 sm:p-8 md:p-0`,children:(0,$.jsxs)(`div`,{className:`flex w-full items-center justify-between`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,$.jsx)(u,{className:`size-10 shrink-0`}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h1`,{className:`font-medium text-xl leading-tight`,children:`GMPay`}),(0,$.jsx)(`p`,{className:`mt-1 whitespace-nowrap text-muted-foreground text-xs`,children:a()})]})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,$.jsx)(c,{}),(0,$.jsx)(l,{})]})]})}),(0,$.jsx)(`div`,{className:`mx-auto flex w-full max-w-sm flex-1 flex-col justify-center`,children:(0,$.jsx)(o,{})})]})]})})}export{Pi as component}; \ No newline at end of file diff --git a/src/www/assets/route-C5Xnq6N2.js b/src/www/assets/route-C5Xnq6N2.js new file mode 100644 index 0000000..c2173ad --- /dev/null +++ b/src/www/assets/route-C5Xnq6N2.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./useRouter-DS97kuA5.js";import{n as i}from"./useStore-pgHsvR0E.js";import{d as a,f as o,s}from"./ClientOnly-COESZSX_.js";import{a as c,n as l,r as u}from"./redirect-dE0wk0WH.js";import{t as d}from"./link-Du-u9SDI.js";import{n as f,t as p}from"./useSearch-BufLn6Rh.js";import{t as m}from"./useNavigate-BNrwOhV8.js";var h=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e.originalIndex;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=u:this.parentRoute||i();let r=n?u:t?.path;r&&r!==`/`&&(r=a(r));let c=t?.id||r,l=n?u:s([this.parentRoute.id===`__root__`?``:this.parentRoute.id,c]);r===`__root__`&&(r=`/`),l!==`__root__`&&(l=s([`/`,l]));let d=l===`__root__`?`/`:s([this.parentRoute.fullPath,r]);this._path=r,this._id=l,this._fullPath=d,this._to=o(d)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>l({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},g=class{constructor({id:e}){this.notFound=e=>c({routeId:this.id,...e}),this.redirect=e=>l({from:this.id,...e}),this.id=e}},_=class extends h{constructor(e){super(e)}};function v(e){return f({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function y(e){let{select:t,...n}=e;return f({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function b(e){return f({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function x(e){return f({...e,select:t=>e.select?e.select(t.context):t.context})}var S=n(e(),1),C=t();function w(e){return new T({id:e})}var T=class extends g{constructor({id:e}){super({id:e}),this.useMatch=e=>f({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>x({...e,from:this.id}),this.useSearch=e=>p({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>b({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>y({...e,from:this.id,strict:!1}),this.useLoaderData=e=>v({...e,from:this.id,strict:!1}),this.useNavigate=()=>m({from:r().routesById[this.id].fullPath}),this.notFound=e=>c({routeId:this.id,...e}),this.Link=S.forwardRef((e,t)=>{let n=r().routesById[this.id].fullPath;return(0,C.jsx)(d,{ref:t,from:n,...e})})}},E=class extends h{constructor(e){super(e),this.useMatch=e=>f({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>x({...e,from:this.id}),this.useSearch=e=>p({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>b({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>y({...e,from:this.id}),this.useLoaderData=e=>v({...e,from:this.id}),this.useNavigate=()=>m({from:this.fullPath}),this.Link=S.forwardRef((e,t)=>(0,C.jsx)(d,{ref:t,from:this.fullPath,...e}))}};function D(e){return new E(e)}function O(){return e=>A(e)}var k=class extends _{constructor(e){super(e),this.useMatch=e=>f({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>x({...e,from:this.id}),this.useSearch=e=>p({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>b({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>y({...e,from:this.id}),this.useLoaderData=e=>v({...e,from:this.id}),this.useNavigate=()=>m({from:this.fullPath}),this.Link=S.forwardRef((e,t)=>(0,C.jsx)(d,{ref:t,from:this.fullPath,...e}))}};function A(e){return new k(e)}export{D as n,w as r,O as t}; \ No newline at end of file diff --git a/src/www/assets/route-CKZGG7BF.js b/src/www/assets/route-CKZGG7BF.js new file mode 100644 index 0000000..1df9429 --- /dev/null +++ b/src/www/assets/route-CKZGG7BF.js @@ -0,0 +1 @@ +import{$u as e,Gu as t,Qs as n,Qu as r,Ru as i,Wu as a,Zs as o,g as s,nd as c,oc as l}from"./messages-BOl-zx8S.js";import{i as u,l as d}from"./auth-store-D_jr_Pei.js";import{n as f}from"./Match-Bdr6F13c.js";import{t as p}from"./link-Du-u9SDI.js";import{n as m}from"./Matches-C_9WN1ag.js";import{t as h}from"./dist-DJhZSa1-.js";import{A as g,C as _,D as v,E as ee,F as te,L as y,M as b,N as ne,O as re,P as ie,R as ae,S as oe,T as x,_ as se,b as ce,d as S,f as C,g as le,h as ue,i as de,k as fe,l as pe,o as me,p as he,t as ge,u as w,v as _e,w as T,x as ve,y as ye,z as E}from"./search-provider-D-fTfilE.js";import{d as D,i as O}from"./button-D-oR8d6w.js";import{a as k,n as A,r as j,t as M}from"./dist-DzENW8NP.js";import{t as N}from"./dist-BZg_Jfik.js";import{n as P}from"./dist-oydJxq9L.js";import{a as F,i as be,l as I,o as L,r as R,s as z,t as B}from"./dropdown-menu-HbmfecEg.js";import{n as V}from"./skeleton-gJOqI-7w.js";import{t as H}from"./cookies-D0aVbsDr.js";import{t as xe}from"./chevrons-up-down-C1Q-XIDV.js";import{t as Se}from"./badge-D-FAREMY.js";var U=c(e(),1),W=r(),G=`Collapsible`,[Ce,we]=k(G),[Te,K]=Ce(G),q=U.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:r,defaultOpen:i,disabled:a,onOpenChange:o,...s}=e,[c,l]=M({prop:r,defaultProp:i??!1,onChange:o,caller:G});return(0,W.jsx)(Te,{scope:n,disabled:a,contentId:P(),open:c,onOpenToggle:U.useCallback(()=>l(e=>!e),[l]),children:(0,W.jsx)(h.div,{"data-state":Q(c),"data-disabled":a?``:void 0,...s,ref:t})})});q.displayName=G;var J=`CollapsibleTrigger`,Y=U.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,i=K(J,n);return(0,W.jsx)(h.button,{type:`button`,"aria-controls":i.contentId,"aria-expanded":i.open||!1,"data-state":Q(i.open),"data-disabled":i.disabled?``:void 0,disabled:i.disabled,...r,ref:t,onClick:j(e.onClick,i.onOpenToggle)})});Y.displayName=J;var X=`CollapsibleContent`,Z=U.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=K(X,e.__scopeCollapsible);return(0,W.jsx)(N,{present:n||i.open,children:({present:e})=>(0,W.jsx)(Ee,{...r,ref:t,present:e})})});Z.displayName=X;var Ee=U.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:i,...a}=e,o=K(X,n),[s,c]=U.useState(r),l=U.useRef(null),u=D(t,l),d=U.useRef(0),f=d.current,p=U.useRef(0),m=p.current,g=o.open||s,_=U.useRef(g),v=U.useRef(void 0);return U.useEffect(()=>{let e=requestAnimationFrame(()=>_.current=!1);return()=>cancelAnimationFrame(e)},[]),A(()=>{let e=l.current;if(e){v.current=v.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration=`0s`,e.style.animationName=`none`;let t=e.getBoundingClientRect();d.current=t.height,p.current=t.width,_.current||(e.style.transitionDuration=v.current.transitionDuration,e.style.animationName=v.current.animationName),c(r)}},[o.open,r]),(0,W.jsx)(h.div,{"data-state":Q(o.open),"data-disabled":o.disabled?``:void 0,id:o.contentId,hidden:!g,...a,ref:u,style:{"--radix-collapsible-content-height":f?`${f}px`:void 0,"--radix-collapsible-content-width":m?`${m}px`:void 0,...e.style},children:g&&i})});function Q(e){return e?`open`:`closed`}var De=q;function Oe(){return(0,W.jsx)(`a`,{className:O(`fixed inset-s-44 z-999 whitespace-nowrap`,`bg-primary px-4 py-2 font-medium text-primary-foreground text-sm`,`opacity-95 shadow-sm transition`,`-translate-y-52 hover:bg-primary/90`,`focus:translate-y-3 focus:transform`,`focus-visible:ring-1 focus-visible:ring-ring`),href:`#content`,children:i()})}function ke({...e}){return(0,W.jsx)(De,{"data-slot":`collapsible`,...e})}function Ae({...e}){return(0,W.jsx)(Y,{"data-slot":`collapsible-trigger`,...e})}function je({...e}){return(0,W.jsx)(Z,{"data-slot":`collapsible-content`,...e})}function Me({title:e,items:t}){let{state:n,isMobile:r}=b();return(0,W.jsxs)(ye,{children:[(0,W.jsx)(ce,{children:e}),(0,W.jsx)(_,{children:t.map(e=>{let t=`${e.title}-${e.url}`;return e.items?n===`collapsed`&&!r?(0,W.jsx)(Ie,{item:e},t):(0,W.jsx)(Pe,{item:e},t):(0,W.jsx)(Ne,{item:e},t)})})]})}function $({children:e}){return(0,W.jsx)(Se,{className:`rounded-full px-1 py-0 text-xs`,children:e})}function Ne({item:e}){let{setOpenMobile:t}=b();return(0,W.jsx)(x,{children:(0,W.jsx)(T,{asChild:!0,isActive:!!m()({to:e.url}),tooltip:e.title,children:(0,W.jsxs)(p,{onClick:()=>t(!1),to:e.url,children:[e.icon&&(0,W.jsx)(e.icon,{}),(0,W.jsx)(`span`,{children:e.title}),e.badge&&(0,W.jsx)($,{children:e.badge})]})})})}function Pe({item:e}){let{setOpenMobile:t}=b();return(0,W.jsx)(ke,{asChild:!0,className:`group/collapsible`,defaultOpen:!0,children:(0,W.jsxs)(x,{children:[(0,W.jsx)(Ae,{asChild:!0,children:(0,W.jsxs)(T,{tooltip:e.title,children:[e.icon&&(0,W.jsx)(e.icon,{}),(0,W.jsx)(`span`,{children:e.title}),e.badge&&(0,W.jsx)($,{children:e.badge}),(0,W.jsx)(V,{className:`ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 rtl:rotate-180`})]})}),(0,W.jsx)(je,{className:`CollapsibleContent`,children:(0,W.jsx)(ee,{children:e.items.map(e=>(0,W.jsx)(Fe,{item:e,onClose:()=>t(!1)},e.title))})})]})})}function Fe({item:e,onClose:t}){return(0,W.jsx)(re,{children:(0,W.jsx)(v,{asChild:!0,isActive:!!m()({to:e.url}),children:(0,W.jsxs)(p,{onClick:t,to:e.url,children:[e.icon&&(0,W.jsx)(e.icon,{}),(0,W.jsx)(`span`,{children:e.title}),e.badge&&(0,W.jsx)($,{children:e.badge})]})})})}function Ie({item:e}){let t=m();return(0,W.jsx)(x,{children:(0,W.jsxs)(B,{children:[(0,W.jsx)(I,{asChild:!0,children:(0,W.jsxs)(T,{isActive:e.items.some(e=>!!t({to:e.url})),tooltip:e.title,children:[e.icon&&(0,W.jsx)(e.icon,{}),(0,W.jsx)(`span`,{children:e.title}),e.badge&&(0,W.jsx)($,{children:e.badge}),(0,W.jsx)(V,{className:`ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90`})]})}),(0,W.jsxs)(R,{align:`start`,side:`right`,sideOffset:4,children:[(0,W.jsxs)(L,{children:[e.title,` `,e.badge?`(${e.badge})`:``]}),(0,W.jsx)(z,{}),e.items.map(e=>(0,W.jsx)(Le,{item:e},`${e.title}-${e.url}`))]})]})})}function Le({item:e}){return(0,W.jsx)(F,{asChild:!0,children:(0,W.jsxs)(p,{className:m()({to:e.url})?`bg-secondary`:``,to:e.url,children:[e.icon&&(0,W.jsx)(e.icon,{}),(0,W.jsx)(`span`,{className:`max-w-52 text-wrap`,children:e.title}),e.badge&&(0,W.jsx)(`span`,{className:`ms-auto text-xs`,children:e.badge})]})})}function Re(){let{isMobile:e}=b(),[r,i]=pe(),[c,d]=(0,U.useState)(!1),{user:f}=u(),m=f?.username?.trim()||s(),h=m.charAt(0).toUpperCase()||`U`,g=f?.last_login_at?n({time:me(f.last_login_at)}):o();return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(te,{onOpenChange:d,open:c,children:(0,W.jsx)(ue,{})}),(0,W.jsx)(_,{children:(0,W.jsx)(x,{children:(0,W.jsxs)(B,{children:[(0,W.jsx)(I,{asChild:!0,children:(0,W.jsxs)(T,{className:`data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground`,size:`lg`,children:[(0,W.jsxs)(w,{className:`h-8 w-8 rounded-lg`,children:[(0,W.jsx)(C,{alt:m,src:`/avatars/01.png`}),(0,W.jsx)(S,{className:`rounded-lg`,children:h})]}),(0,W.jsxs)(`div`,{className:`grid flex-1 text-start text-sm leading-tight`,children:[(0,W.jsx)(`span`,{className:`truncate font-semibold`,children:m}),(0,W.jsx)(`span`,{className:`truncate text-xs`,children:g})]}),(0,W.jsx)(xe,{className:`ms-auto size-4`})]})}),(0,W.jsxs)(R,{align:`end`,className:`w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg`,side:e?`bottom`:`right`,sideOffset:4,children:[(0,W.jsx)(L,{className:`p-0 font-normal`,children:(0,W.jsxs)(`div`,{className:`flex items-center gap-2 px-1 py-1.5 text-start text-sm`,children:[(0,W.jsxs)(w,{className:`h-8 w-8 rounded-lg`,children:[(0,W.jsx)(C,{alt:m,src:`/avatars/01.png`}),(0,W.jsx)(S,{className:`rounded-lg`,children:h})]}),(0,W.jsxs)(`div`,{className:`grid flex-1 text-start text-sm leading-tight`,children:[(0,W.jsx)(`span`,{className:`truncate font-semibold`,children:m}),(0,W.jsx)(`span`,{className:`truncate text-xs`,children:g})]})]})}),(0,W.jsx)(z,{}),(0,W.jsxs)(be,{children:[(0,W.jsx)(F,{asChild:!0,children:(0,W.jsxs)(p,{to:`/account/password`,children:[(0,W.jsx)(E,{}),t()]})}),(0,W.jsxs)(F,{onClick:()=>d(!0),onSelect:e=>e.preventDefault(),children:[(0,W.jsx)(y,{}),l()]})]}),(0,W.jsx)(z,{}),(0,W.jsxs)(F,{onClick:()=>i(!0),variant:`destructive`,children:[(0,W.jsx)(ae,{}),a()]})]})]})})}),(0,W.jsx)(he,{onOpenChange:i,open:!!r})]})}function ze({teams:e}){let t=e[0];return(0,W.jsx)(_,{children:(0,W.jsx)(x,{children:(0,W.jsxs)(T,{className:`cursor-default`,size:`lg`,children:[(0,W.jsx)(`div`,{className:`flex aspect-square size-8 items-center justify-center rounded-lg`,children:(0,W.jsx)(t.logo,{className:`size-8`})}),(0,W.jsxs)(`div`,{className:`grid flex-1 text-start text-sm leading-tight`,children:[(0,W.jsx)(`span`,{className:`truncate font-semibold`,children:t.name}),(0,W.jsx)(`span`,{className:`truncate text-xs`,children:t.plan})]})]})})})}function Be(){let{collapsible:e,variant:t}=ie(),n=de();return(0,W.jsxs)(le,{collapsible:e,variant:t,children:[(0,W.jsx)(ve,{children:(0,W.jsx)(ze,{teams:n.teams})}),(0,W.jsx)(se,{children:n.navGroups.map(e=>(0,W.jsx)(Me,{...e},e.title))}),(0,W.jsxs)(_e,{children:[(0,W.jsx)(Re,{}),(0,W.jsx)(`div`,{className:`px-2 pb-1 text-sidebar-foreground/50 text-xs`,children:`v0.9.3`})]}),(0,W.jsx)(g,{})]})}function Ve({children:e}){return(0,W.jsx)(ge,{children:(0,W.jsx)(ne,{children:(0,W.jsxs)(fe,{defaultOpen:H(d)!==`false`,children:[(0,W.jsx)(Oe,{}),(0,W.jsx)(Be,{}),(0,W.jsx)(oe,{className:O(`@container/content`,`has-data-[layout=fixed]:h-svh`,`peer-data-[variant=inset]:has-data-[layout=fixed]:h-[calc(100svh-(var(--spacing)*4))]`),id:`content`,tabIndex:-1,children:e??(0,W.jsx)(f,{})})]})})})}var He=Ve;export{He as component}; \ No newline at end of file diff --git a/src/www/assets/route-CbQ1_n1Q.js b/src/www/assets/route-CbQ1_n1Q.js new file mode 100644 index 0000000..20d07ac --- /dev/null +++ b/src/www/assets/route-CbQ1_n1Q.js @@ -0,0 +1 @@ +import{Al as e,Ml as t,Nl as n,Qu as r,Xt as i,Zt as a,jl as o}from"./messages-BOl-zx8S.js";import{n as s}from"./Match-Bdr6F13c.js";import{L as c,V as l}from"./search-provider-D-fTfilE.js";import{t as u}from"./separator-Dw-mNGCy.js";import{t as d}from"./createLucideIcon-DMX28cCu.js";import{n as f,t as p}from"./main-DvsnNI3V.js";import{t as m}from"./page-header-BRM1dngJ.js";import{t as h}from"./sidebar-nav-eQOCItLO.js";var g=d(`bell-ring`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M22 8c0-2.3-.8-4.3-2-6`,key:`5bb3ad`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}],[`path`,{d:`M4 2C2.8 3.7 2 5.7 2 8`,key:`tap9e0`}]]),_=d(`globe-lock`,[[`path`,{d:`M15.686 15A14.5 14.5 0 0 1 12 22a14.5 14.5 0 0 1 0-20 10 10 0 1 0 9.542 13`,key:`qkt0x6`}],[`path`,{d:`M2 12h8.5`,key:`ovaggd`}],[`path`,{d:`M20 6V4a2 2 0 1 0-4 0v2`,key:`1of5e8`}],[`rect`,{width:`8`,height:`5`,x:`14`,y:`6`,rx:`1`,key:`1fmf51`}]]),v=r(),y=[{title:n(),href:`/settings`,icon:(0,v.jsx)(c,{size:18})},{title:t(),href:`/settings/telegram`,icon:(0,v.jsx)(g,{size:18})},{title:o(),href:`/settings/rate`,icon:(0,v.jsx)(_,{size:18})},{title:e(),href:`/settings/epay`,icon:(0,v.jsx)(l,{size:18})}];function b(){return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(f,{}),(0,v.jsxs)(p,{fixed:!0,children:[(0,v.jsx)(m,{description:i(),title:a()}),(0,v.jsx)(u,{className:`my-4 lg:my-6`}),(0,v.jsxs)(`div`,{className:`flex flex-1 flex-col space-y-2 overflow-hidden lg:flex-row lg:space-x-12 lg:space-y-0`,children:[(0,v.jsx)(`aside`,{className:`top-0 lg:sticky lg:w-1/5`,children:(0,v.jsx)(h,{items:y})}),(0,v.jsx)(`div`,{className:`flex w-full overflow-y-hidden p-1`,children:(0,v.jsx)(s,{})})]})]})]})}var x=b;export{x as component}; \ No newline at end of file diff --git a/src/www/assets/route-GIha9u4h.js b/src/www/assets/route-GIha9u4h.js new file mode 100644 index 0000000..38349d0 --- /dev/null +++ b/src/www/assets/route-GIha9u4h.js @@ -0,0 +1 @@ +import{Il as e,Ll as t,Qu as n,Rl as r}from"./messages-BOl-zx8S.js";import{n as i}from"./Match-Bdr6F13c.js";import{z as a}from"./search-provider-D-fTfilE.js";import{t as o}from"./separator-Dw-mNGCy.js";import{n as s,t as c}from"./main-DvsnNI3V.js";import{t as l}from"./page-header-BRM1dngJ.js";import{t as u}from"./sidebar-nav-eQOCItLO.js";var d=n();function f(){let n=[{title:e(),href:`/account/password`,icon:(0,d.jsx)(a,{size:18})}];return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(s,{}),(0,d.jsxs)(c,{fixed:!0,children:[(0,d.jsx)(l,{description:t(),title:r()}),(0,d.jsx)(o,{className:`my-4 lg:my-6`}),(0,d.jsxs)(`div`,{className:`flex flex-1 flex-col space-y-2 overflow-hidden lg:flex-row lg:space-x-12 lg:space-y-0`,children:[(0,d.jsx)(`aside`,{className:`top-0 lg:sticky lg:w-1/5`,children:(0,d.jsx)(u,{items:n})}),(0,d.jsx)(`div`,{className:`flex w-full overflow-y-hidden p-1`,children:(0,d.jsx)(i,{})})]})]})]})}var p=f;export{p as component}; \ No newline at end of file diff --git a/src/www/assets/router-D0lu_-Oq.js b/src/www/assets/router-D0lu_-Oq.js new file mode 100644 index 0000000..5de012b --- /dev/null +++ b/src/www/assets/router-D0lu_-Oq.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/install-iFxm6jjv.js","assets/messages-BOl-zx8S.js","assets/form-uKra2bmF.js","assets/button-D-oR8d6w.js","assets/label-B2Q8_O-h.js","assets/dist-DJhZSa1-.js","assets/zod-DzRgHmfz.js","assets/popover-M5uqmgyK.js","assets/dist-Ck6_E5T6.js","assets/dist-DzENW8NP.js","assets/dist-oydJxq9L.js","assets/dist-Bh3bGrZa.js","assets/dist-BPKZF5GI.js","assets/es2015-DRmlSfkW.js","assets/dist-BZg_Jfik.js","assets/auth-store-D_jr_Pei.js","assets/dist-BNiRpK39.js","assets/with-selector-CQzBqoHI.js","assets/cookies-D0aVbsDr.js","assets/link-Du-u9SDI.js","assets/ClientOnly-COESZSX_.js","assets/useStore-pgHsvR0E.js","assets/useRouter-DS97kuA5.js","assets/command-yFHhtFiR.js","assets/dist-C3yOG_Qz.js","assets/createLucideIcon-DMX28cCu.js","assets/copy-to-clipboard-DeFustsS.js","assets/check-DH6qIczM.js","assets/chevron-down-uSXLUPEl.js","assets/circle-check-nos3opMb.js","assets/eye-off-BBTW1z_J.js","assets/eye-CJkHHosh.js","assets/theme-switch-BVGTp-bE.js","assets/dropdown-menu-HbmfecEg.js","assets/dist-CT2DjA94.js","assets/dist-BeVKhAtj.js","assets/useNavigate-BNrwOhV8.js","assets/logo-BVdckS6R.js","assets/theme-provider-Dmxgp34D.js","assets/loader-circle-DQHo9Sp_.js","assets/shield-check-NJ5V92SM.js","assets/badge-D-FAREMY.js","assets/card-LDLQwVm3.js","assets/input-CZHXycLK.js","assets/route-CKZGG7BF.js","assets/skeleton-gJOqI-7w.js","assets/search-provider-D-fTfilE.js","assets/confirm-dialog-DyK21C4Z.js","assets/dist-CML2zK1G.js","assets/dist-QGW08nls.js","assets/separator-Dw-mNGCy.js","assets/tooltip-m5xmPGQe.js","assets/wallet-C1oxpYOh.js","assets/font-provider-BBeIKmOK.js","assets/Match-Bdr6F13c.js","assets/matchContext-BJCpOvLW.js","assets/redirect-dE0wk0WH.js","assets/Matches-C_9WN1ag.js","assets/atom-DI1Bn-1s.js","assets/chevrons-up-down-C1Q-XIDV.js","assets/route-BfQF2LcU.js","assets/auth-animation-context-CciMPPP0.js","assets/dashboard-DETe9Zpn.js","assets/data-table-C3uNvchK.js","assets/select-CvMpqpz9.js","assets/empty-state-BelJgFUf.js","assets/clock-3-TWJWgy8T.js","assets/main-DvsnNI3V.js","assets/header-B5Qx5Y9m.js","assets/page-header-BRM1dngJ.js","assets/503-C8GhfezX.js","assets/maintenance-error-yQ4OJvXf.js","assets/500-CiuhDp_H.js","assets/general-error-ruXTchhS.js","assets/404-BsLbhv_m.js","assets/not-found-error-mxpXcTRa.js","assets/403-Cpy7v32n.js","assets/forbidden-B-WSRpe6.js","assets/401-kzzPZFna.js","assets/unauthorized-error-9CwofmD6.js","assets/sign-in-D3PxHB7w.js","assets/useSearch-BufLn6Rh.js","assets/password-input-ZB498Nq4.js","assets/route-CbQ1_n1Q.js","assets/sidebar-nav-eQOCItLO.js","assets/useRouterState-Am3soIW6.js","assets/route-BO5WPM5m.js","assets/route-GIha9u4h.js","assets/settings-6Tt8SQ46.js","assets/textarea-Cp-VCvek.js","assets/lib-_PocwKaj.js","assets/rpc-C9FTIUCr.js","assets/checkbox-D_bL2Pt-.js","assets/switch-m0XBbPWc.js","assets/route-C5Xnq6N2.js","assets/arrow-left-BQ3rygWM.js","assets/ellipsis-DvvxWQuy.js","assets/chains-store-DnSbj0Yy.js","assets/trash-2-CaT-Drvx.js","assets/coming-soon-dialog-DIE5FD4U.js","assets/telescope-CH8QonjS.js","assets/long-text-XqSY0a1g.js","assets/use-table-url-state-BYcGNz1q.js","assets/payment-setup-Dgvp9Vym.js","assets/orders-CTtwpZWi.js","assets/download-BhpqmSj0.js","assets/keys-C8Pk4o9V.js","assets/help-8HzWQeDm.js","assets/chains-a6BmCl-8.js","assets/addresses-Pwy1cHVj.js","assets/telegram-BpeS2gK_.js","assets/rate-Dsrqg6hQ.js","assets/notifications-CKOafx8I.js","assets/radio-group-8QacflxY.js","assets/show-submitted-data-sbgXi_a9.js","assets/epay-CSwdoLsE.js","assets/display-BGnhCcSb.js","assets/appearance-Qiu8JKX7.js","assets/integrations-BQBy3gz7.js","assets/password-Fr9ZcJNs.js"])))=>i.map(i=>d[i]); +import{$u as e,Qu as t,a as n,c as r,d as i,f as a,i as o,l as s,nd as c,o as l,s as u,u as d}from"./messages-BOl-zx8S.js";import{C as f,D as p,E as m,O as h,S as g,T as _,_ as v,b as y,g as b,h as x,m as S,p as C,t as w,v as T,w as E,x as D,y as O}from"./auth-store-D_jr_Pei.js";import{n as k}from"./redirect-dE0wk0WH.js";import{n as ee,o as te}from"./Match-Bdr6F13c.js";import{t as ne}from"./route-C5Xnq6N2.js";import{n as A,t as re}from"./atom-DI1Bn-1s.js";import{i as j,n as M,r as N,t as ie}from"./_error-Ct843SHu.js";import{t as ae}from"./useRouterState-Am3soIW6.js";import{t as oe}from"./wallet-C1oxpYOh.js";import{t as P}from"./createLucideIcon-DMX28cCu.js";import{t as F}from"./circle-check-nos3opMb.js";import{t as se}from"./clock-3-TWJWgy8T.js";import{t as ce}from"./loader-circle-DQHo9Sp_.js";import{t as le}from"./dist-BNiRpK39.js";import{t as ue}from"./general-error-ruXTchhS.js";import{t as de}from"./not-found-error-mxpXcTRa.js";import{c as fe,s as pe,t as I}from"./zod-DzRgHmfz.js";var me=class extends h{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new C({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=L(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=L(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=L(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}else return!0}runNext(e){let t=L(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){v.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>D(t,e))}findAll(e={}){return this.getAll().filter(t=>D(e,t))}notify(e){v.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return v.batch(()=>Promise.all(e.map(e=>e.continue().catch(f))))}};function L(e){return e.options.scope?.id}var he=class extends h{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??y(r,t),a=this.get(i);return a||(a=new x({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){v.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>g(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>g(e,t)):t}notify(e){v.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){v.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){v.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},ge=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new he,this.#t=e.mutationCache||new me,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=p.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=b.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(_(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=T(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return v.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;v.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return v.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=v.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(f).catch(f)}invalidateQueries(e,t={}){return v.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=v.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(f)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(f)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(_(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(f).catch(f)}fetchInfiniteQuery(e){return e.behavior=S(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(f).catch(f)}ensureInfiniteQueryData(e){return e.behavior=S(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return b.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(O(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{E(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(O(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{E(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=y(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===m&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},_e=e=>({createMutableStore:A,createReadonlyStore:A,batch:re}),ve=e=>new ye(e),ye=class extends te{constructor(e){super(e,_e)}},R=c(e(),1),be=()=>{};function xe(e,t,n){let r=(0,R.useRef)(be);(0,R.useEffect)(()=>{r.current=e}),(0,R.useEffect)(()=>{},[n]),(0,R.useEffect)(()=>{if(t===null||t===!1)return;let e=setInterval(()=>r.current(),t);return()=>clearInterval(e)},[t])}function z(e,t){return Math.random()*(t-e+1)+e}function B(e,t){return Math.floor(z(e,t))}var Se=(0,R.forwardRef)(({progress:e,height:t=2,className:n=``,color:r=`red`,background:i=`transparent`,onLoaderFinished:a,transitionTime:o=300,loaderSpeed:s=500,waitingTime:c=1e3,shadow:l=!0,containerStyle:u={},style:d={},shadowStyle:f={},containerClassName:p=``},m)=>{let h=(0,R.useRef)(!1),[g,_]=(0,R.useState)(0),v=(0,R.useRef)({active:!1,refreshRate:1e3}),[y,b]=(0,R.useState)({active:!1,value:60}),x={height:`100%`,background:r,transition:`all ${s}ms ease`,width:`0%`},S={position:`fixed`,top:0,left:0,height:t,background:i,zIndex:99999999999,width:`100%`},C={boxShadow:`0 0 10px ${r}, 0 0 10px ${r}`,width:`5%`,opacity:1,position:`absolute`,height:`100%`,transition:`all ${s}ms ease`,transform:`rotate(2deg) translate(0px, -2px)`,left:`-10rem`},[w,T]=(0,R.useState)(x),[E,D]=(0,R.useState)(C);(0,R.useEffect)(()=>(h.current=!0,()=>{h.current=!1}),[]),(0,R.useImperativeHandle)(m,()=>({continuousStart(t,n=1e3){if(y.active)return;if(e!==void 0){console.warn(`react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!`);return}let r=t||B(10,20);v.current={active:!0,refreshRate:n},_(r),O(r)},staticStart(t){if(v.current.active)return;if(e!==void 0){console.warn(`react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!`);return}let n=t||B(30,60);b({active:!0,value:n}),_(n),O(n)},start(t=`continuous`,n,r){if(e!==void 0){console.warn(`react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!`);return}t===`continuous`?v.current={active:!0,refreshRate:r||1e3}:b({active:!0,value:n||20});let i=B(10,20),a=B(30,70),o=n||(t===`continuous`?i:a);_(o),O(o)},complete(){if(e!==void 0){console.warn(`react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!`);return}_(100),O(100)},increase(t){if(e!==void 0){console.warn(`react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!`);return}_(e=>{let n=e+t;return O(n),n})},decrease(t){if(e!==void 0){console.warn(`react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!`);return}_(e=>{let n=e-t;return O(n),n})},getProgress(){return g}})),(0,R.useEffect)(()=>{T({...w,background:r}),D({...E,boxShadow:`0 0 10px ${r}, 0 0 5px ${r}`})},[r]),(0,R.useEffect)(()=>{if(m){if(m&&e!==void 0){console.warn(`react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar! Please use only props or only ref methods! Ref methods will override props if "ref" property is available.`);return}O(g)}else e&&O(e)},[e]);let O=e=>{e>=100?(T({...w,width:`100%`}),l&&D({...E,left:e-10+`%`}),setTimeout(()=>{h.current&&(T({...w,opacity:0,width:`100%`,transition:`all ${o}ms ease-out`,color:r}),setTimeout(()=>{h.current&&(v.current.active&&(v.current={...v.current,active:!1},_(0),O(0)),y.active&&(b({...y,active:!1}),_(0),O(0)),a&&a(),_(0),O(0))},o))},c)):(T(t=>({...t,width:e+`%`,opacity:1,transition:e>0?`all ${s}ms ease`:``})),l&&D({...E,left:e-5.5+`%`,transition:e>0?`all ${s}ms ease`:``}))};return xe(()=>{let e=z(Math.min(10,(100-g)/5),Math.min(20,(100-g)/3));g+e<95&&(_(g+e),O(g+e))},v.current.active?v.current.refreshRate:null),R.createElement(`div`,{className:p,style:{...S,...u}},R.createElement(`div`,{className:n,style:{...w,...d}},l?R.createElement(`div`,{style:{...E,...f}}):null))});R.createContext(void 0);var V=t();function Ce(){let e=(0,R.useRef)(null),t=ae();return(0,R.useEffect)(()=>{t.status===`pending`?e.current?.continuousStart():e.current?.complete()},[t.status]),(0,V.jsx)(Se,{color:`var(--primary)`,height:2,ref:e,shadow:!0})}var H=P(`circle-pause`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`10`,x2:`10`,y1:`15`,y2:`9`,key:`c1nkhi`}],[`line`,{x1:`14`,x2:`14`,y1:`15`,y2:`9`,key:`h65svq`}]]),we=P(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),Te=P(`link-2-off`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7`,key:`10o201`}],[`path`,{d:`M15 7h2a5 5 0 0 1 4 8`,key:`1d3206`}],[`line`,{x1:`8`,x2:`12`,y1:`12`,y2:`12`,key:`rvw6j4`}],[`line`,{x1:`2`,x2:`22`,y1:`2`,y2:`22`,key:`a6p6uj`}]]),Ee=P(`octagon-x`,[[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z`,key:`2d38gg`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),De=P(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Oe=(e,t,n,r,i,a,o,s)=>{let c=document.documentElement,l=[`light`,`dark`];function u(t){(Array.isArray(e)?e:[e]).forEach(e=>{let n=e===`class`,r=n&&a?i.map(e=>a[e]||e):i;n?(c.classList.remove(...r),c.classList.add(a&&a[t]?a[t]:t)):c.setAttribute(e,t)}),d(t)}function d(e){s&&l.includes(e)&&(c.style.colorScheme=e)}function f(){return window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}if(r)u(r);else try{let e=localStorage.getItem(t)||n;u(o&&e===`system`?f():e)}catch{}},ke=R.createContext(void 0),Ae={setTheme:e=>{},themes:[]},je=()=>R.useContext(ke)??Ae;R.memo(({forcedTheme:e,storageKey:t,attribute:n,enableSystem:r,enableColorScheme:i,defaultTheme:a,value:o,themes:s,nonce:c,scriptProps:l})=>{let u=JSON.stringify([n,t,a,e,s,o,r,i]).slice(1,-1);return R.createElement(`script`,{...l,suppressHydrationWarning:!0,nonce:typeof window>`u`?c:``,dangerouslySetInnerHTML:{__html:`(${Oe.toString()})(${u})`}})});var Me=({...e})=>{let{theme:t=`system`}=je();return(0,V.jsx)(le,{richColors:!0,className:`toaster group`,icons:{success:(0,V.jsx)(F,{className:`size-4`}),info:(0,V.jsx)(we,{className:`size-4`}),warning:(0,V.jsx)(De,{className:`size-4`}),error:(0,V.jsx)(Ee,{className:`size-4`}),loading:(0,V.jsx)(ce,{className:`size-4 animate-spin`})},style:{"--normal-bg":`var(--popover)`,"--normal-text":`var(--popover-foreground)`,"--normal-border":`var(--border)`,"--border-radius":`var(--radius)`},theme:t,...e})};function Ne(){return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Ce,{}),(0,V.jsx)(ee,{}),(0,V.jsx)(Me,{duration:5e3,position:`top-right`})]})}var U=ne()({component:Ne,notFoundComponent:de,errorComponent:ue}),Pe=j(`/install`)({component:N(()=>M(()=>import(`./install-iFxm6jjv.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43])),`component`)}),Fe=j(`/_authenticated`)({beforeLoad:({location:e})=>{if(!w.state.accessToken)throw k({to:`/sign-in`,search:{redirect:e.href},replace:!0})},component:N(()=>M(()=>import(`./route-CKZGG7BF.js`),__vite__mapDeps([44,1,45,3,25,9,46,47,24,12,10,5,13,14,35,48,34,49,11,50,51,8,15,16,17,18,22,36,21,23,29,37,40,52,43,53,38,33,27,54,20,55,56,57,58,19,59,41])),`component`)}),Ie=j(`/(auth)`)({component:N(()=>M(()=>import(`./route-BfQF2LcU.js`),__vite__mapDeps([60,1,3,54,20,21,17,55,22,56,32,33,8,9,10,5,11,34,35,12,13,14,27,25,36,37,38,18,61])),`component`)}),Le=j(`/`)({beforeLoad:()=>{throw k({to:w.state.accessToken?`/dashboard`:`/sign-in`,replace:!0})},component:N(()=>M(()=>import(`./routes-Dj-aXygU.js`),[]),`component`)}),Re=j(`/_authenticated/dashboard`)({component:N(()=>M(()=>import(`./dashboard-DETe9Zpn.js`),__vite__mapDeps([62,1,45,3,25,9,46,47,24,12,10,5,13,14,35,48,34,49,11,50,51,8,15,16,17,18,22,36,21,23,29,37,40,52,43,53,38,7,63,33,27,64,28,59,30,65,41,66,67,19,20,32,68,69,42])),`component`)}),ze=j(`/(errors)/503`)({component:N(()=>M(()=>import(`./503-C8GhfezX.js`),__vite__mapDeps([70,71,1,3])),`component`)}),Be=j(`/(errors)/500`)({component:N(()=>M(()=>import(`./500-CiuhDp_H.js`),__vite__mapDeps([72,73,1,3,22,36])),`component`)}),Ve=j(`/(errors)/404`)({component:N(()=>M(()=>import(`./404-BsLbhv_m.js`),__vite__mapDeps([74,75,1,3,22,36])),`component`)}),He=j(`/(errors)/403`)({component:N(()=>M(()=>import(`./403-Cpy7v32n.js`),__vite__mapDeps([76,77,1,3,22,36])),`component`)}),Ue=j(`/(errors)/401`)({component:N(()=>M(()=>import(`./401-kzzPZFna.js`),__vite__mapDeps([78,79,1,3,22,36])),`component`)}),We=()=>M(()=>import(`./sign-in-D3PxHB7w.js`),__vite__mapDeps([80,1,2,3,4,5,6,47,9,24,12,10,13,14,15,16,17,18,81,55,22,21,36,25,39,82,30,31,43,61])),Ge=pe({redirect:fe().optional()}),Ke=j(`/(auth)/sign-in`)({component:N(We,`component`),validateSearch:Ge}),qe=j(`/_authenticated/settings`)({component:N(()=>M(()=>import(`./route-CbQ1_n1Q.js`),__vite__mapDeps([83,1,46,45,3,25,9,47,24,12,10,5,13,14,35,48,34,49,11,50,51,8,15,16,17,18,22,36,21,23,29,37,40,52,43,53,38,54,20,55,56,67,33,27,19,32,68,69,84,64,28,85])),`component`)}),Je=j(`/_authenticated/payment-setup`)({component:N(()=>M(()=>import(`./route-BO5WPM5m.js`),__vite__mapDeps([86,1,46,45,3,25,9,47,24,12,10,5,13,14,35,48,34,49,11,50,51,8,15,16,17,18,22,36,21,23,29,37,40,52,43,53,38,54,20,55,56,67,33,27,19,32,68,69,84,64,28,85])),`component`)}),Ye=j(`/_authenticated/account`)({component:N(()=>M(()=>import(`./route-GIha9u4h.js`),__vite__mapDeps([87,1,46,45,3,25,9,47,24,12,10,5,13,14,35,48,34,49,11,50,51,8,15,16,17,18,22,36,21,23,29,37,40,52,43,53,38,54,20,55,56,67,33,27,19,32,68,69,84,64,28,85])),`component`)}),Xe=j(`/_authenticated/settings/`)({component:N(()=>M(()=>import(`./settings-6Tt8SQ46.js`),__vite__mapDeps([88,1,2,3,4,5,6,16,69,50,43,89,90,15,17,18])),`component`)}),W=[{label:a(),value:`pending`,icon:se},{label:i(),value:`paid`,icon:F},{label:d(),value:`expired`,icon:Te},{label:s(),value:`closed`,icon:H}],G=[{label:r(),value:`enabled`,icon:oe},{label:u(),value:`disabled`,icon:H},{label:l(),value:`monitoring`,icon:F}];n(),o();var K=[{label:n(),value:`true`},{label:o(),value:`false`}],Ze=()=>M(()=>import(`./rpc-C9FTIUCr.js`),__vite__mapDeps([91,1,2,3,4,5,6,45,25,46,9,47,24,12,10,13,14,35,48,34,49,11,50,51,8,15,16,17,18,22,36,21,23,29,37,40,52,43,53,38,92,27,33,64,28,93,94,20,19,81,55,56,63,7,59,30,65,41,95,96,67,32,68,97,98,99,100,101,69,102])),Qe=I.object({page:I.number().optional().catch(1),pageSize:I.number().optional().catch(10),enabled:I.array(I.enum(K.map(e=>e.value))).optional().catch([]),type:I.array(I.string()).optional().catch([]),status:I.array(I.enum([`ok`,`down`,`unknown`])).optional().catch([]),keyword:I.string().optional().catch(``)}),$e=j(`/_authenticated/rpc/`)({validateSearch:Qe,component:N(Ze,`component`)}),et=()=>M(()=>import(`./payment-setup-Dgvp9Vym.js`),__vite__mapDeps([103,1,3,15,16,5,17,18,94,20,21,19,22,81,55,36,56,63,45,25,33,8,9,10,11,34,35,12,13,14,27,7,64,51,49,28,50,23,24,59,30,65,41,43,102])),tt=I.object({page:I.number().optional().catch(1),pageSize:I.number().optional().catch(10),status:I.enum([`enabled`,`disabled`]).array().optional().catch([]),chain:I.array(I.string()).optional().catch([]),keyword:I.string().optional().catch(``)}),nt=j(`/_authenticated/payment-setup/`)({validateSearch:tt,component:N(et,`component`)}),rt=()=>M(()=>import(`./orders-CTtwpZWi.js`),__vite__mapDeps([104,1,45,3,25,47,9,24,12,10,5,13,14,46,35,48,34,49,11,50,51,8,15,16,17,18,22,36,21,23,29,37,40,52,43,53,38,33,27,4,94,20,19,81,55,56,63,7,64,28,59,30,65,41,105,96,31,67,32,68,99,100,101,69,102])),it=I.object({page:I.number().optional().catch(1),pageSize:I.number().optional().catch(10),status:I.array(I.enum(W.map(e=>e.value))).optional().catch([]),chain:I.array(I.string()).optional().catch([]),orderNo:I.string().optional().catch(``)}),at=j(`/_authenticated/orders/`)({validateSearch:it,component:N(rt,`component`)}),ot=()=>M(()=>import(`./keys-C8Pk4o9V.js`),__vite__mapDeps([106,1,2,3,4,5,6,45,25,47,9,24,12,10,13,14,46,35,48,34,49,11,50,51,8,15,16,17,18,22,36,21,23,29,37,40,52,43,53,38,64,27,28,93,94,20,19,81,55,56,26,30,31,65,67,33,32,68,98,69,41,89])),st=I.object({type:I.enum([`all`,`enabled`,`disabled`]).optional().catch(void 0),filter:I.string().optional().catch(``),sort:I.enum([`asc`,`desc`]).optional().catch(void 0)}),ct=j(`/_authenticated/keys/`)({validateSearch:st,component:N(ot,`component`)}),lt=j(`/_authenticated/help/`)({component:N(()=>M(()=>import(`./help-8HzWQeDm.js`),__vite__mapDeps([107,1,100,25])),`component`)}),ut=()=>M(()=>import(`./chains-a6BmCl-8.js`),__vite__mapDeps([108,1,2,3,4,5,6,45,25,46,9,47,24,12,10,13,14,35,48,34,49,11,50,51,8,15,16,17,18,22,36,21,23,29,37,40,52,43,53,38,92,27,33,64,28,93,63,7,59,30,65,41,95,96,67,19,20,32,68,97,98,99,100,69])),dt=I.object({page:I.number().optional().catch(1),pageSize:I.number().optional().catch(10),status:I.array(I.enum(K.map(e=>e.value))).optional().catch([]),keyword:I.string().optional().catch(``)}),ft=j(`/_authenticated/chains/`)({validateSearch:dt,component:N(ut,`component`)}),pt=()=>M(()=>import(`./addresses-Pwy1cHVj.js`),__vite__mapDeps([109,1,2,3,4,5,6,47,9,24,12,10,13,14,46,45,25,35,48,34,49,11,50,51,8,15,16,17,18,22,36,21,23,29,37,40,52,43,53,38,33,27,64,28,93,94,20,19,81,55,56,63,7,59,30,65,41,105,96,31,67,32,68,97,98,101,69,89,102])),mt=I.object({page:I.number().optional().catch(1),pageSize:I.number().optional().catch(10),status:I.array(I.enum(G.map(e=>e.value))).optional().catch([]),chain:I.array(I.string()).optional().catch([]),address:I.string().optional().catch(``)}),ht=j(`/_authenticated/addresses/`)({validateSearch:mt,component:N(pt,`component`)}),gt=j(`/_authenticated/account/`)({beforeLoad:()=>{throw k({to:`/account/password`,replace:!0})}}),_t=j(`/_authenticated/settings/telegram`)({component:N(()=>M(()=>import(`./telegram-BpeS2gK_.js`),__vite__mapDeps([110,1,2,3,4,5,6,93,9,49,11,69,50,43,90,15,16,17,18])),`component`)}),vt=j(`/_authenticated/settings/rate`)({component:N(()=>M(()=>import(`./rate-Dsrqg6hQ.js`),__vite__mapDeps([111,1,2,3,4,5,6,16,69,50,43,90,15,17,18])),`component`)}),yt=j(`/_authenticated/settings/notifications`)({component:N(()=>M(()=>import(`./notifications-CKOafx8I.js`),__vite__mapDeps([112,1,2,3,4,5,6,92,9,14,49,11,27,25,93,19,20,21,17,22,113,48,34,35,10,69,50,114,16])),`component`)}),bt=j(`/_authenticated/settings/epay`)({component:N(()=>M(()=>import(`./epay-CSwdoLsE.js`),__vite__mapDeps([115,1,2,3,4,5,6,69,50,43,90,15,16,17,18])),`component`)}),xt=j(`/_authenticated/settings/display`)({component:N(()=>M(()=>import(`./display-BGnhCcSb.js`),__vite__mapDeps([116,1,2,3,4,5,6,92,9,14,49,11,27,25,69,50,114,16])),`component`)}),St=j(`/_authenticated/settings/appearance`)({component:N(()=>M(()=>import(`./appearance-Qiu8JKX7.js`),__vite__mapDeps([117,1,2,3,4,5,6,28,25,113,48,9,34,35,10,14,49,11,69,50,53,18,38,114,16])),`component`)}),Ct=()=>M(()=>import(`./integrations-BQBy3gz7.js`),__vite__mapDeps([118,1,94,20,21,17,19,5,3,22,81,55,36,56,63,45,25,33,8,9,10,11,34,35,12,13,14,27,7,64,51,49,28,50,23,24,59,30,65,41,43,102])),wt=I.object({page:I.number().optional().catch(1),pageSize:I.number().optional().catch(10)}),Tt=j(`/_authenticated/payment-setup/integrations`)({validateSearch:wt,component:N(Ct,`component`)}),Et=j(`/_authenticated/account/password`)({component:N(()=>M(()=>import(`./password-Fr9ZcJNs.js`),__vite__mapDeps([119,1,2,3,4,5,6,15,16,17,18,82,30,25,31,43,69,50])),`component`)}),Dt=Pe.update({id:`/install`,path:`/install`,getParentRoute:()=>U}),q=Fe.update({id:`/_authenticated`,getParentRoute:()=>U}),J=Ie.update({id:`/(auth)`,getParentRoute:()=>U}),Ot=Le.update({id:`/`,path:`/`,getParentRoute:()=>U}),kt=Re.update({id:`/dashboard`,path:`/dashboard`,getParentRoute:()=>q}),At=ze.update({id:`/(errors)/503`,path:`/503`,getParentRoute:()=>U}),jt=Be.update({id:`/(errors)/500`,path:`/500`,getParentRoute:()=>U}),Mt=Ve.update({id:`/(errors)/404`,path:`/404`,getParentRoute:()=>U}),Nt=He.update({id:`/(errors)/403`,path:`/403`,getParentRoute:()=>U}),Pt=Ue.update({id:`/(errors)/401`,path:`/401`,getParentRoute:()=>U}),Ft=Ke.update({id:`/sign-in`,path:`/sign-in`,getParentRoute:()=>J}),Y=qe.update({id:`/settings`,path:`/settings`,getParentRoute:()=>q}),X=Je.update({id:`/payment-setup`,path:`/payment-setup`,getParentRoute:()=>q}),Z=Ye.update({id:`/account`,path:`/account`,getParentRoute:()=>q}),It=Xe.update({id:`/`,path:`/`,getParentRoute:()=>Y}),Lt=$e.update({id:`/rpc/`,path:`/rpc/`,getParentRoute:()=>q}),Rt=nt.update({id:`/`,path:`/`,getParentRoute:()=>X}),zt=at.update({id:`/orders/`,path:`/orders/`,getParentRoute:()=>q}),Bt=ct.update({id:`/keys/`,path:`/keys/`,getParentRoute:()=>q}),Vt=lt.update({id:`/help/`,path:`/help/`,getParentRoute:()=>q}),Ht=ft.update({id:`/chains/`,path:`/chains/`,getParentRoute:()=>q}),Ut=ht.update({id:`/addresses/`,path:`/addresses/`,getParentRoute:()=>q}),Wt=gt.update({id:`/`,path:`/`,getParentRoute:()=>Z}),Gt=_t.update({id:`/telegram`,path:`/telegram`,getParentRoute:()=>Y}),Kt=vt.update({id:`/rate`,path:`/rate`,getParentRoute:()=>Y}),qt=yt.update({id:`/notifications`,path:`/notifications`,getParentRoute:()=>Y}),Jt=bt.update({id:`/epay`,path:`/epay`,getParentRoute:()=>Y}),Q=xt.update({id:`/display`,path:`/display`,getParentRoute:()=>Y}),Yt=St.update({id:`/appearance`,path:`/appearance`,getParentRoute:()=>Y}),Xt=Tt.update({id:`/integrations`,path:`/integrations`,getParentRoute:()=>X}),Zt=ie.update({id:`/errors/$error`,path:`/errors/$error`,getParentRoute:()=>q}),Qt=Et.update({id:`/password`,path:`/password`,getParentRoute:()=>Z}),$t={authSignInRoute:Ft},en=J._addFileChildren($t),tn={AuthenticatedAccountPasswordRoute:Qt,AuthenticatedAccountIndexRoute:Wt},nn=Z._addFileChildren(tn),rn={AuthenticatedPaymentSetupIntegrationsRoute:Xt,AuthenticatedPaymentSetupIndexRoute:Rt},an=X._addFileChildren(rn),on={AuthenticatedSettingsAppearanceRoute:Yt,AuthenticatedSettingsDisplayRoute:Q,AuthenticatedSettingsEpayRoute:Jt,AuthenticatedSettingsNotificationsRoute:qt,AuthenticatedSettingsRateRoute:Kt,AuthenticatedSettingsTelegramRoute:Gt,AuthenticatedSettingsIndexRoute:It},sn={AuthenticatedAccountRouteRoute:nn,AuthenticatedPaymentSetupRouteRoute:an,AuthenticatedSettingsRouteRoute:Y._addFileChildren(on),AuthenticatedDashboardRoute:kt,AuthenticatedErrorsErrorRoute:Zt,AuthenticatedAddressesIndexRoute:Ut,AuthenticatedChainsIndexRoute:Ht,AuthenticatedHelpIndexRoute:Vt,AuthenticatedKeysIndexRoute:Bt,AuthenticatedOrdersIndexRoute:zt,AuthenticatedRpcIndexRoute:Lt},cn={IndexRoute:Ot,authRouteRoute:en,AuthenticatedRouteRoute:q._addFileChildren(sn),InstallRoute:Dt,errors401Route:Pt,errors403Route:Nt,errors404Route:Mt,errors500Route:jt,errors503Route:At},ln=U._addFileChildren(cn)._addFileTypes(),$=new ge({defaultOptions:{queries:{retry:(e,t)=>{if(e>3)return!1;if(typeof t==`object`&&t&&`status`in t){let e=t.status;if(e===401||e===403)return!1}return!0},refetchOnWindowFocus:!0,staleTime:10*1e3}}}),un=ve({routeTree:ln,context:{queryClient:$},scrollRestoration:!0,defaultPreload:`intent`,defaultPreloadStaleTime:0});export{W as i,un as n,G as r,$ as t}; \ No newline at end of file diff --git a/src/www/assets/routes-Dj-aXygU.js b/src/www/assets/routes-Dj-aXygU.js new file mode 100644 index 0000000..daa0be8 --- /dev/null +++ b/src/www/assets/routes-Dj-aXygU.js @@ -0,0 +1 @@ +var e=()=>null;export{e as component}; \ No newline at end of file diff --git a/src/www/assets/rpc-C9FTIUCr.js b/src/www/assets/rpc-C9FTIUCr.js new file mode 100644 index 0000000..31e73a9 --- /dev/null +++ b/src/www/assets/rpc-C9FTIUCr.js @@ -0,0 +1 @@ +import{$u as e,Ai as t,Ar as n,Br as r,Cr as i,Dr as a,Er as o,Fr as s,Hi as c,Hr as l,Ir as u,Ji as d,Lr as f,Mr as p,Nr as m,Or as h,Pr as ee,Qu as g,Rr as te,Sr as _,Tr as v,Ui as y,Ur as b,Vi as x,Vr as S,Wr as C,_r as ne,ar as re,ba as ie,br as w,cr as ae,dr as oe,fr as T,gr as se,hr as ce,ir as le,ji as ue,jr as de,kr as E,lr as fe,mr as pe,nd as me,oi as he,or as ge,pr as _e,qu as ve,ra as ye,rr as be,sr as xe,ur as Se,vr as Ce,wr as D,xr as we,yr as Te,zr as Ee}from"./messages-BOl-zx8S.js";import{a as O}from"./auth-store-D_jr_Pei.js";import{t as De}from"./router-D0lu_-Oq.js";import{r as Oe}from"./route-C5Xnq6N2.js";import{I as ke,o as k,r as Ae}from"./search-provider-D-fTfilE.js";import{i as A,t as j}from"./button-D-oR8d6w.js";import{t as je}from"./checkbox-D_bL2Pt-.js";import{a as M,c as N,l as Me,r as Ne,s as Pe,t as Fe}from"./dropdown-menu-HbmfecEg.js";import{t as P}from"./skeleton-gJOqI-7w.js";import{a as Ie,i as Le,n as Re,r as F,t as I}from"./select-CvMpqpz9.js";import{t as L}from"./separator-Dw-mNGCy.js";import{t as ze}from"./switch-m0XBbPWc.js";import{t as Be}from"./createLucideIcon-DMX28cCu.js";import{_ as Ve,d as R,f as He,g as Ue,h as We,n as Ge,p as Ke,r as qe,t as Je,v as Ye,y as Xe}from"./data-table-C3uNvchK.js";import{t as Ze}from"./arrow-left-BQ3rygWM.js";import{t as Qe}from"./ellipsis-DvvxWQuy.js";import{t as $e}from"./empty-state-BelJgFUf.js";import{n as et,t as tt}from"./main-DvsnNI3V.js";import{n as nt,t as z}from"./chains-store-DnSbj0Yy.js";import{n as rt,t as it}from"./trash-2-CaT-Drvx.js";import{d as B,g as at,l as V,m as ot,p as st,u as ct}from"./command-yFHhtFiR.js";import{n as H}from"./dist-BNiRpK39.js";import{a as lt,c as U,n as ut,r as dt,s as ft}from"./zod-DzRgHmfz.js";import{a as W,c as pt,i as G,l as mt,n as K,o as q,s as J,t as ht}from"./form-uKra2bmF.js";import{t as Y}from"./input-CZHXycLK.js";import{t as gt}from"./page-header-BRM1dngJ.js";import{t as X}from"./badge-D-FAREMY.js";import{t as _t}from"./use-table-url-state-BYcGNz1q.js";import{t as Z}from"./long-text-XqSY0a1g.js";import{t as vt}from"./coming-soon-dialog-DIE5FD4U.js";var yt=Be(`stethoscope`,[[`path`,{d:`M11 2v2`,key:`1539x4`}],[`path`,{d:`M5 2v2`,key:`1yf1q8`}],[`path`,{d:`M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1`,key:`rb5t3r`}],[`path`,{d:`M8 15a6 6 0 0 0 12 0v-3`,key:`x18d4x`}],[`circle`,{cx:`20`,cy:`10`,r:`2`,key:`ts1r5v`}]]),Q=me(e(),1),$=g(),bt=ft({network:U().min(1,re()),type:dt([`http`,`ws`]),url:U().url(le()),api_key:U().default(``),weight:ut().min(1,be()),enabled:lt().default(!0)});function xt({open:e,onOpenChange:n,currentRow:r,onSuccess:a}){let{chains:o}=z(),s=mt({resolver:pt(bt),defaultValues:{network:``,type:`http`,url:``,api_key:``,weight:1,enabled:!0}}),c=O.useMutation(`post`,`/admin/api/v1/rpc-nodes`),l=O.useMutation(`patch`,`/admin/api/v1/rpc-nodes/{id}`);(0,Q.useEffect)(()=>{e&&s.reset({network:r?.network??``,type:r?.type??`http`,url:r?.url??``,api_key:r?.api_key??``,weight:r?.weight??1,enabled:r?.enabled??!0})},[e,r,s]);function u(e){if(r?.id){l.mutate({params:{path:{id:r.id}},body:{url:e.url,api_key:e.api_key,weight:e.weight,enabled:e.enabled}},{onSuccess:()=>{H.success(xe()),n(!1),a?.()}});return}c.mutate({body:{network:e.network,type:e.type,url:e.url,api_key:e.api_key,weight:e.weight,enabled:e.enabled}},{onSuccess:()=>{H.success(ge()),n(!1),a?.()}})}let d=c.isPending||l.isPending;return(0,$.jsx)(V,{onOpenChange:n,open:e,children:(0,$.jsxs)(ct,{children:[(0,$.jsxs)(st,{children:[(0,$.jsx)(ot,{children:r?ce():pe()}),(0,$.jsx)(B,{children:r?_e():T()})]}),(0,$.jsx)(ht,{...s,children:(0,$.jsxs)(`form`,{className:`space-y-4`,onSubmit:s.handleSubmit(u),children:[(0,$.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,$.jsx)(G,{control:s.control,name:`network`,render:({field:e})=>(0,$.jsxs)(W,{children:[(0,$.jsx)(q,{children:v()}),(0,$.jsxs)(I,{disabled:!!r,onValueChange:e.onChange,value:e.value,children:[(0,$.jsx)(K,{children:(0,$.jsx)(Le,{className:`w-full`,children:(0,$.jsx)(Ie,{placeholder:ye()})})}),(0,$.jsx)(Re,{children:o.filter(e=>!!e.network).map(e=>(0,$.jsx)(F,{value:e.network??``,children:e.display_name??e.network},e.network))})]}),(0,$.jsx)(J,{})]})}),(0,$.jsx)(G,{control:s.control,name:`type`,render:({field:e})=>(0,$.jsxs)(W,{children:[(0,$.jsx)(q,{children:D()}),(0,$.jsxs)(I,{disabled:!!r,onValueChange:e.onChange,value:e.value,children:[(0,$.jsx)(K,{children:(0,$.jsx)(Le,{className:`w-full`,children:(0,$.jsx)(Ie,{placeholder:oe()})})}),(0,$.jsxs)(Re,{children:[(0,$.jsx)(F,{value:`http`,children:`HTTP`}),(0,$.jsx)(F,{value:`ws`,children:`WebSocket`})]})]}),(0,$.jsx)(J,{})]})})]}),(0,$.jsx)(G,{control:s.control,name:`url`,render:({field:e})=>(0,$.jsxs)(W,{children:[(0,$.jsx)(q,{children:i()}),(0,$.jsx)(K,{children:(0,$.jsx)(Y,{placeholder:`https://api.trongrid.io`,...e})}),(0,$.jsx)(J,{})]})}),(0,$.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,$.jsx)(G,{control:s.control,name:`api_key`,render:({field:e})=>(0,$.jsxs)(W,{children:[(0,$.jsx)(q,{children:`API Key`}),(0,$.jsx)(K,{children:(0,$.jsx)(Y,{placeholder:Se(),...e})}),(0,$.jsx)(J,{})]})}),(0,$.jsx)(G,{control:s.control,name:`weight`,render:({field:e})=>(0,$.jsxs)(W,{children:[(0,$.jsx)(q,{children:_()}),(0,$.jsx)(K,{children:(0,$.jsx)(Y,{name:e.name,onBlur:e.onBlur,onChange:t=>e.onChange(t.target.value),ref:e.ref,type:`number`,value:String(e.value??``)})}),(0,$.jsx)(J,{})]})})]}),(0,$.jsx)(G,{control:s.control,name:`enabled`,render:({field:e})=>(0,$.jsxs)(W,{className:`flex flex-row items-center gap-3 rounded-lg border p-3`,children:[(0,$.jsx)(K,{children:(0,$.jsx)(je,{checked:e.value,onCheckedChange:t=>e.onChange(!!t)})}),(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsx)(q,{children:fe()}),(0,$.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:ae()})]})]})}),(0,$.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,$.jsx)(j,{onClick:()=>n(!1),type:`button`,variant:`outline`,children:ve()}),(0,$.jsx)(j,{disabled:d,type:`submit`,children:d?ue():t()})]})]})})]})})}function St(e){return[{id:`switch`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:d()}),cell:({row:t})=>(0,$.jsx)(ze,{checked:!!t.original.enabled,onCheckedChange:()=>e(t.original.enabled?`disable`:`enable`,t.original)}),enableSorting:!1,enableHiding:!1,meta:{label:d(),skeleton:`switch`,sticky:`left`,th:{className:A(`rounded-tl-[inherit]`)}}},{accessorKey:`status`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:E()}),cell:({row:e})=>{let t=e.original.status??`unknown`,n=`bg-slate-500/10 text-slate-600`,r=o();return t===`ok`?(n=`bg-emerald-500/10 text-emerald-600`,r=h()):t===`down`&&(n=`bg-rose-500/10 text-rose-600`,r=a()),(0,$.jsx)(X,{className:n,children:r})},filterFn:(e,t,n)=>n.includes(String(e.getValue(t))),meta:{label:E(),skeleton:`badge`}},{accessorKey:`network`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:v()}),cell:({row:e})=>(0,$.jsx)(`div`,{className:`min-w-24 font-medium`,children:e.original.network??`-`}),enableHiding:!1,meta:{label:v(),skeleton:`short`}},{accessorKey:`type`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:D()}),filterFn:(e,t,n)=>n.includes(String(e.getValue(t))),meta:{label:D(),skeleton:`short`}},{accessorKey:`url`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:i()}),cell:({row:e})=>(0,$.jsx)(Z,{className:`min-w-80`,children:e.original.url??`-`}),meta:{label:i(),skeleton:`long`}},{accessorKey:`weight`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:_()}),cell:({row:e})=>e.original.weight??`-`,meta:{label:_(),skeleton:`id`}},{accessorKey:`last_latency_ms`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:we()}),cell:({row:e})=>e.original.last_latency_ms?`${e.original.last_latency_ms} ms`:`-`,meta:{label:we(),skeleton:`id`}},{accessorKey:`last_checked_at`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:w()}),cell:({row:e})=>k(e.original.last_checked_at),meta:{label:w(),skeleton:`date`}},{accessorKey:`api_key`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:`API Key`}),cell:({row:e})=>(0,$.jsx)(Z,{children:e.original.api_key??`-`}),meta:{label:`API Key`,skeleton:`long`}},{accessorKey:`created_at`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:y()}),cell:({row:e})=>k(e.original.created_at),meta:{label:y(),skeleton:`date`}},{accessorKey:`updated_at`,header:({column:e})=>(0,$.jsx)(R,{column:e,title:c()}),cell:({row:e})=>k(e.original.updated_at),meta:{label:c(),skeleton:`date`}},{id:`actions`,enableHiding:!1,meta:{label:x(),skeleton:`action`,sticky:`right`,className:A(`w-12`)},cell:({row:t})=>(0,$.jsxs)(Fe,{modal:!1,children:[(0,$.jsx)(Me,{asChild:!0,children:(0,$.jsxs)(j,{className:`flex h-8 w-8 p-0 data-[state=open]:bg-muted`,variant:`ghost`,children:[(0,$.jsx)(Qe,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{className:`sr-only`,children:`Open menu`})]})}),(0,$.jsxs)(Ne,{align:`end`,className:`w-40`,children:[(0,$.jsxs)(M,{onClick:()=>e(`edit`,t.original),children:[se(),(0,$.jsx)(N,{children:(0,$.jsx)(nt,{size:16})})]}),(0,$.jsxs)(M,{onClick:()=>e(`health-check`,t.original),children:[Te(),(0,$.jsx)(N,{children:(0,$.jsx)(yt,{size:16})})]}),(0,$.jsx)(Pe,{}),(0,$.jsxs)(M,{onClick:()=>e(`delete`,t.original),variant:`destructive`,children:[he(),(0,$.jsx)(N,{children:(0,$.jsx)(it,{size:16})})]})]})]})}]}var Ct=Oe(`/_authenticated/rpc/`),wt=[{label:h(),value:`ok`},{label:a(),value:`down`},{label:o(),value:`unknown`}];function Tt({data:e,isLoading:t,onAction:n,onRefresh:r}){let[i,a]=(0,Q.useState)([]),{globalFilter:o,onGlobalFilterChange:s,columnFilters:c,onColumnFiltersChange:l,pagination:u,onPaginationChange:d,ensurePageInRange:f}=_t({search:Ct.useSearch(),navigate:Ct.useNavigate(),pagination:{defaultPage:1,defaultPageSize:10},globalFilter:{enabled:!0,key:`keyword`},columnFilters:[{columnId:`type`,searchKey:`type`,type:`array`},{columnId:`status`,searchKey:`status`,type:`array`}]}),p=He({data:e,columns:(0,Q.useMemo)(()=>St(n),[n]),state:{sorting:i,columnFilters:c,globalFilter:o,pagination:u},onSortingChange:a,onColumnFiltersChange:l,onGlobalFilterChange:s,onPaginationChange:d,globalFilterFn:(e,t,n)=>{let r=String(n).toLowerCase();return(e.original.network??``).toLowerCase().includes(r)||(e.original.url??``).toLowerCase().includes(r)},getCoreRowModel:Ke(),getFilteredRowModel:Ve(),getPaginationRowModel:Ye(),getSortedRowModel:Xe(),getFacetedRowModel:We(),getFacetedUniqueValues:Ue()});(0,Q.useEffect)(()=>{f(p.getPageCount())},[p,f]);let m=[...new Set(e.map(e=>e.type).filter(Boolean))].map(e=>({label:e,value:e}));return(0,$.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,$.jsx)(Je,{filters:[{columnId:`type`,title:D(),options:m},{columnId:`status`,title:E(),options:[...wt]}],onRefresh:r,searchPlaceholder:Ce(),table:p}),(0,$.jsx)(qe,{className:`min-w-[1200px]`,emptyText:ne(),loading:t,table:p}),(0,$.jsx)(Ge,{className:`mt-auto`,table:p})]})}var Et=[`chain-1`,`chain-2`,`chain-3`,`chain-4`,`chain-5`];function Dt({active:e,children:t,onClick:n}){return(0,$.jsx)(`div`,{className:A(`w-full cursor-pointer rounded-lg px-3 py-3 text-left transition-colors hover:bg-accent hover:text-accent-foreground`,e&&`bg-muted`),onClick:n,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n())},role:`button`,tabIndex:0,children:t})}function Ot({chains:e,isLoading:t,keyword:n,onKeywordChange:i,selectedPanel:a,onSelect:o,totalNodes:s,hiddenOnMobile:c}){return(0,$.jsxs)(`div`,{className:A(`flex w-full flex-col gap-2 sm:w-56 lg:w-72 2xl:w-80`,c&&`hidden sm:flex`),children:[(0,$.jsxs)(`div`,{className:`sticky top-0 z-10 -mx-4 bg-background px-4 pb-3 shadow-md sm:static sm:z-auto sm:mx-0 sm:p-0 sm:shadow-none`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between py-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`h1`,{className:`font-bold text-2xl`,children:C()}),(0,$.jsx)(ke,{size:20})]}),(0,$.jsx)(X,{variant:`secondary`,children:b({count:String(e.length)})})]}),(0,$.jsxs)(`div`,{className:`relative block`,children:[(0,$.jsx)(at,{className:`pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground`}),(0,$.jsx)(Y,{className:`pl-9`,onChange:e=>i(e.target.value),placeholder:l(),value:n})]})]}),(0,$.jsxs)(Ae,{className:`-mx-3 h-full overflow-auto p-3`,children:[(0,$.jsx)(Dt,{active:a===`overview`,onClick:()=>o(`overview`),children:(0,$.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`div`,{className:`font-medium`,children:S()}),(0,$.jsx)(`div`,{className:`mt-1 text-muted-foreground text-xs`,children:r({chains:String(e.length),nodes:String(s)})})]}),(0,$.jsx)(ke,{className:`mt-0.5 size-4 text-muted-foreground`})]})}),(0,$.jsx)(L,{className:`my-1`}),t?Et.map(e=>(0,$.jsxs)(`div`,{className:`px-3 py-3`,children:[(0,$.jsx)(`div`,{className:`flex items-center justify-between gap-2`,children:(0,$.jsx)(P,{className:`h-4 w-24`})}),(0,$.jsxs)(`div`,{className:`mt-2 flex items-center justify-between gap-2`,children:[(0,$.jsx)(P,{className:`h-3 w-20`}),(0,$.jsx)(P,{className:`h-5 w-12 rounded-full`})]})]},e)):e.map((t,n)=>{let r=t.network??t.display_name??String(n);return(0,$.jsxs)(`div`,{children:[(0,$.jsx)(Dt,{active:a===t.network,onClick:()=>o(t.network??`overview`),children:(0,$.jsx)(`div`,{className:`flex items-start gap-3`,children:(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`div`,{className:`truncate font-medium`,children:t.display_name??Ee()}),(0,$.jsxs)(`div`,{className:`mt-1 flex items-center justify-between gap-2`,children:[(0,$.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:te({count:String(t.nodeCount??0)})}),(0,$.jsx)(X,{className:`shrink-0 text-xs`,variant:`outline`,children:t.network??`-`})]})]})})}),nx.reduce((e,t)=>(t.network&&(e[t.network]=(e[t.network]??0)+1),e),{}),[x]),C=(0,Q.useMemo)(()=>e.map(e=>({...e,nodeCount:e.network?S[e.network]??0:0})),[e,S]),ne=(0,Q.useMemo)(()=>{let e=g.trim().toLowerCase();return e?C.filter(t=>[t.display_name,t.network].filter(Boolean).some(t=>String(t).toLowerCase().includes(e))):C},[C,g]),re=(0,Q.useMemo)(()=>_===`overview`?x:x.filter(e=>e.network===_),[x,_]);(0,Q.useEffect)(()=>{_!==`overview`&&!e.some(e=>e.network===_)&&(v(`overview`),b(null))},[e,_]);async function w(){await De.invalidateQueries({queryKey:[`get`,`/admin/api/v1/rpc-nodes`]})}async function ae(){if(f?.row.id){if(f.action===`enable`||f.action===`disable`)await i.mutateAsync({params:{path:{id:f.row.id}},body:{enabled:f.action===`enable`}}),H.success(ie());else if(f.action===`health-check`){let e=await a.mutateAsync({params:{path:{id:f.row.id}}}),t=e.data?.status??`unknown`,n=e.data?.last_latency_ms;H.success(ee({status:t,latency:n?m({latency:String(n)}):``}))}await w(),h(null)}}async function oe(e,t){if(e===`edit`){d(t),s(!0);return}if(e===`enable`||e===`disable`){if(!t.id)return;await i.mutateAsync({params:{path:{id:t.id}},body:{enabled:e===`enable`}}),H.success(ie()),await w();return}if(e===`delete`){l(!0);return}h({action:e,row:t})}let T=y!==null;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(et,{fixed:!0}),(0,$.jsx)(tt,{fixed:!0,children:(0,$.jsxs)(`section`,{className:`flex h-full gap-6`,children:[(0,$.jsx)(Ot,{chains:ne,hiddenOnMobile:T,isLoading:t,keyword:g,onKeywordChange:te,onSelect:e=>{v(e),b(e)},selectedPanel:_,totalNodes:x.length}),(0,$.jsx)(`div`,{className:A(`absolute inset-0 start-full z-50 hidden w-full flex-1 flex-col border bg-background shadow-xs sm:static sm:z-auto sm:flex sm:min-w-0 sm:rounded-md sm:border-0 sm:bg-transparent sm:shadow-none`,T&&`inset-s-0 flex`),children:(0,$.jsx)(kt,{isLoading:r.isLoading,nodes:re,onAction:oe,onBack:()=>b(null),onCreate:()=>l(!0),onRefresh:()=>{r.refetch()}})})]})}),(0,$.jsx)(xt,{currentRow:u,onOpenChange:s,onSuccess:()=>r.refetch(),open:o}),(0,$.jsx)(vt,{onOpenChange:l,open:c}),(0,$.jsx)(V,{onOpenChange:e=>{e||h(null)},open:!!f,children:(0,$.jsxs)(ct,{children:[(0,$.jsxs)(st,{children:[(0,$.jsx)(ot,{children:n()}),(0,$.jsx)(B,{children:f?de({url:String(f.row.url??``),action:f.action}):null})]}),(0,$.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,$.jsx)(j,{onClick:()=>h(null),variant:`outline`,children:ve()}),(0,$.jsx)(j,{onClick:ae,children:p()})]})]})})]})}var jt=At;export{jt as component}; \ No newline at end of file diff --git a/src/www/assets/search-provider-D-fTfilE.js b/src/www/assets/search-provider-D-fTfilE.js new file mode 100644 index 0000000..0c5cd53 --- /dev/null +++ b/src/www/assets/search-provider-D-fTfilE.js @@ -0,0 +1 @@ +import{$s as e,$u as t,Al as n,Au as r,Bl as i,Bu as a,Cu as o,Du as s,Eu as c,Gl as l,Hl as u,Il as d,Kl as f,Ml as p,Mu as m,Nl as h,Ou as g,Qu as _,Rl as v,Su as ee,Tu as y,Ul as b,Uu as x,Vl as S,Vu as C,Wl as te,Wu as w,_u as ne,ac as re,bu as ie,ec as ae,gu as oe,h as se,ic as ce,jl as le,ju as ue,ku as de,n as fe,nc as pe,nd as me,ql as he,rc as ge,tc as _e,vu as ve,wu as ye,xu as be,yu as xe,zl as Se,zu as Ce}from"./messages-BOl-zx8S.js";import{a as we,c as Te,l as Ee,n as De}from"./auth-store-D_jr_Pei.js";import{t as Oe}from"./useRouter-DS97kuA5.js";import{g as ke,t as Ae}from"./useStore-pgHsvR0E.js";import{n as je}from"./with-selector-CQzBqoHI.js";import{t as Me}from"./useNavigate-BNrwOhV8.js";import{t as T}from"./dist-DJhZSa1-.js";import{d as E,i as D,r as Ne,s as Pe,t as O}from"./button-D-oR8d6w.js";import{i as Fe,n as Ie,r as Le,t as Re}from"./tooltip-m5xmPGQe.js";import{a as ze,n as k,r as A}from"./dist-DzENW8NP.js";import{t as j}from"./dist-BZg_Jfik.js";import{t as M}from"./dist-oydJxq9L.js";import{n as Be}from"./dist-BeVKhAtj.js";import{a as Ve,c as He,i as Ue,n as We,o as Ge,r as Ke,s as qe,t as Je}from"./dist-C3yOG_Qz.js";import{t as Ye}from"./confirm-dialog-DyK21C4Z.js";import{n as Xe,r as Ze}from"./skeleton-gJOqI-7w.js";import{n as Qe,r as N}from"./dist-CML2zK1G.js";import"./separator-Dw-mNGCy.js";import{r as $e,t as et}from"./cookies-D0aVbsDr.js";import{r as tt,t as nt}from"./wallet-C1oxpYOh.js";import{n as rt,r as it}from"./font-provider-BBeIKmOK.js";import{n as at}from"./theme-provider-Dmxgp34D.js";import{t as P}from"./createLucideIcon-DMX28cCu.js";import{t as ot}from"./circle-check-nos3opMb.js";import{n as st,r as ct,t as lt}from"./logo-BVdckS6R.js";import{a as ut,c as dt,h as ft,i as pt,n as mt,o as F,r as ht,s as gt}from"./command-yFHhtFiR.js";import{t as _t}from"./shield-check-NJ5V92SM.js";import"./input-CZHXycLK.js";var I=me(t(),1);function vt(e){let t=Oe(),n=(0,I.useRef)(void 0);return Ae(t.stores.location,r=>{let i=e?.select?e.select(r):r;if(e?.structuralSharing??t.options.defaultStructuralSharing){let e=ke(n.current,i);return n.current=e,e}return i})}var yt=je();function bt(){return(0,yt.useSyncExternalStore)(xt,()=>!0,()=>!1)}function xt(){return()=>{}}var L=_(),R=`Avatar`,[St,Ct]=ze(R),[wt,Tt]=St(R),Et=I.forwardRef((e,t)=>{let{__scopeAvatar:n,...r}=e,[i,a]=I.useState(`idle`);return(0,L.jsx)(wt,{scope:n,imageLoadingStatus:i,onImageLoadingStatusChange:a,children:(0,L.jsx)(T.span,{...r,ref:t})})});Et.displayName=R;var Dt=`AvatarImage`,Ot=I.forwardRef((e,t)=>{let{__scopeAvatar:n,src:r,onLoadingStatusChange:i=()=>{},...a}=e,o=Tt(Dt,n),s=Mt(r,a),c=M(e=>{i(e),o.onImageLoadingStatusChange(e)});return k(()=>{s!==`idle`&&c(s)},[s,c]),s===`loaded`?(0,L.jsx)(T.img,{...a,ref:t,src:r}):null});Ot.displayName=Dt;var kt=`AvatarFallback`,At=I.forwardRef((e,t)=>{let{__scopeAvatar:n,delayMs:r,...i}=e,a=Tt(kt,n),[o,s]=I.useState(r===void 0);return I.useEffect(()=>{if(r!==void 0){let e=window.setTimeout(()=>s(!0),r);return()=>window.clearTimeout(e)}},[r]),o&&a.imageLoadingStatus!==`loaded`?(0,L.jsx)(T.span,{...i,ref:t}):null});At.displayName=kt;function jt(e,t){return e?t?(e.src!==t&&(e.src=t),e.complete&&e.naturalWidth>0?`loaded`:`loading`):`error`:`idle`}function Mt(e,{referrerPolicy:t,crossOrigin:n}){let r=bt(),i=I.useRef(null),a=r?(i.current||=new window.Image,i.current):null,[o,s]=I.useState(()=>jt(a,e));return k(()=>{s(jt(a,e))},[a,e]),k(()=>{let e=e=>()=>{s(e)};if(!a)return;let r=e(`loaded`),i=e(`error`);return a.addEventListener(`load`,r),a.addEventListener(`error`,i),t&&(a.referrerPolicy=t),typeof n==`string`&&(a.crossOrigin=n),()=>{a.removeEventListener(`load`,r),a.removeEventListener(`error`,i)}},[a,n,t]),o}var Nt=Et,Pt=Ot,Ft=At;function It(e,t){return I.useReducer((e,n)=>t[e][n]??e,e)}var Lt=`ScrollArea`,[Rt,zt]=ze(Lt),[Bt,z]=Rt(Lt),Vt=I.forwardRef((e,t)=>{let{__scopeScrollArea:n,type:r=`hover`,dir:i,scrollHideDelay:a=600,...o}=e,[s,c]=I.useState(null),[l,u]=I.useState(null),[d,f]=I.useState(null),[p,m]=I.useState(null),[h,g]=I.useState(null),[_,v]=I.useState(0),[ee,y]=I.useState(0),[b,x]=I.useState(!1),[S,C]=I.useState(!1),te=E(t,e=>c(e)),w=Be(i);return(0,L.jsx)(Bt,{scope:n,type:r,dir:w,scrollHideDelay:a,scrollArea:s,viewport:l,onViewportChange:u,content:d,onContentChange:f,scrollbarX:p,onScrollbarXChange:m,scrollbarXEnabled:b,onScrollbarXEnabledChange:x,scrollbarY:h,onScrollbarYChange:g,scrollbarYEnabled:S,onScrollbarYEnabledChange:C,onCornerWidthChange:v,onCornerHeightChange:y,children:(0,L.jsx)(T.div,{dir:w,...o,ref:te,style:{position:`relative`,"--radix-scroll-area-corner-width":_+`px`,"--radix-scroll-area-corner-height":ee+`px`,...e.style}})})});Vt.displayName=Lt;var Ht=`ScrollAreaViewport`,Ut=I.forwardRef((e,t)=>{let{__scopeScrollArea:n,children:r,nonce:i,...a}=e,o=z(Ht,n),s=E(t,I.useRef(null),o.onViewportChange);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`},nonce:i}),(0,L.jsx)(T.div,{"data-radix-scroll-area-viewport":``,...a,ref:s,style:{overflowX:o.scrollbarXEnabled?`scroll`:`hidden`,overflowY:o.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,L.jsx)(`div`,{ref:o.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})});Ut.displayName=Ht;var B=`ScrollAreaScrollbar`,Wt=I.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=z(B,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return I.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,L.jsx)(Gt,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,L.jsx)(Kt,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,L.jsx)(qt,{...r,ref:t,forceMount:n}):i.type===`always`?(0,L.jsx)(V,{...r,ref:t}):null});Wt.displayName=B;var Gt=I.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=z(B,e.__scopeScrollArea),[a,o]=I.useState(!1);return I.useEffect(()=>{let e=i.scrollArea,t=0;if(e){let n=()=>{window.clearTimeout(t),o(!0)},r=()=>{t=window.setTimeout(()=>o(!1),i.scrollHideDelay)};return e.addEventListener(`pointerenter`,n),e.addEventListener(`pointerleave`,r),()=>{window.clearTimeout(t),e.removeEventListener(`pointerenter`,n),e.removeEventListener(`pointerleave`,r)}}},[i.scrollArea,i.scrollHideDelay]),(0,L.jsx)(j,{present:n||a,children:(0,L.jsx)(qt,{"data-state":a?`visible`:`hidden`,...r,ref:t})})}),Kt=I.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=z(B,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=G(()=>c(`SCROLL_END`),100),[s,c]=It(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}});return I.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>c(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,c]),I.useEffect(()=>{let e=i.viewport,t=a?`scrollLeft`:`scrollTop`;if(e){let n=e[t],r=()=>{let r=e[t];n!==r&&(c(`SCROLL`),o()),n=r};return e.addEventListener(`scroll`,r),()=>e.removeEventListener(`scroll`,r)}},[i.viewport,a,c,o]),(0,L.jsx)(j,{present:n||s!==`hidden`,children:(0,L.jsx)(V,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:A(e.onPointerEnter,()=>c(`POINTER_ENTER`)),onPointerLeave:A(e.onPointerLeave,()=>c(`POINTER_LEAVE`))})})}),qt=I.forwardRef((e,t)=>{let n=z(B,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=I.useState(!1),s=e.orientation===`horizontal`,c=G(()=>{if(n.viewport){let e=n.viewport.offsetWidth{let{orientation:n=`vertical`,...r}=e,i=z(B,e.__scopeScrollArea),a=I.useRef(null),o=I.useRef(0),[s,c]=I.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=an(s.viewport,s.content),u={...r,sizes:s,onSizesChange:c,hasThumb:l>0&&l<1,onThumbChange:e=>a.current=e,onThumbPointerUp:()=>o.current=0,onThumbPointerDown:e=>o.current=e};function d(e,t){return on(e,o.current,s,t)}return n===`horizontal`?(0,L.jsx)(Jt,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=sn(e,s,i.dir);a.current.style.transform=`translate3d(${t}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=d(e,i.dir))}}):n===`vertical`?(0,L.jsx)(Yt,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=sn(e,s);a.current.style.transform=`translate3d(0, ${t}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=d(e))}}):null}),Jt=I.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=z(B,e.__scopeScrollArea),[o,s]=I.useState(),c=I.useRef(null),l=E(t,c,a.onScrollbarXChange);return I.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,L.jsx)(Qt,{"data-orientation":`horizontal`,...i,ref:l,sizes:n,style:{bottom:0,left:a.dir===`rtl`?`var(--radix-scroll-area-corner-width)`:0,right:a.dir===`ltr`?`var(--radix-scroll-area-corner-width)`:0,"--radix-scroll-area-thumb-width":W(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,n)=>{if(a.viewport){let r=a.viewport.scrollLeft+t.deltaX;e.onWheelScroll(r),ln(r,n)&&t.preventDefault()}},onResize:()=>{c.current&&a.viewport&&o&&r({content:a.viewport.scrollWidth,viewport:a.viewport.offsetWidth,scrollbar:{size:c.current.clientWidth,paddingStart:U(o.paddingLeft),paddingEnd:U(o.paddingRight)}})}})}),Yt=I.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=z(B,e.__scopeScrollArea),[o,s]=I.useState(),c=I.useRef(null),l=E(t,c,a.onScrollbarYChange);return I.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,L.jsx)(Qt,{"data-orientation":`vertical`,...i,ref:l,sizes:n,style:{top:0,right:a.dir===`ltr`?0:void 0,left:a.dir===`rtl`?0:void 0,bottom:`var(--radix-scroll-area-corner-height)`,"--radix-scroll-area-thumb-height":W(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,n)=>{if(a.viewport){let r=a.viewport.scrollTop+t.deltaY;e.onWheelScroll(r),ln(r,n)&&t.preventDefault()}},onResize:()=>{c.current&&a.viewport&&o&&r({content:a.viewport.scrollHeight,viewport:a.viewport.offsetHeight,scrollbar:{size:c.current.clientHeight,paddingStart:U(o.paddingTop),paddingEnd:U(o.paddingBottom)}})}})}),[Xt,Zt]=Rt(B),Qt=I.forwardRef((e,t)=>{let{__scopeScrollArea:n,sizes:r,hasThumb:i,onThumbChange:a,onThumbPointerUp:o,onThumbPointerDown:s,onThumbPositionChange:c,onDragScroll:l,onWheelScroll:u,onResize:d,...f}=e,p=z(B,n),[m,h]=I.useState(null),g=E(t,e=>h(e)),_=I.useRef(null),v=I.useRef(``),ee=p.viewport,y=r.content-r.viewport,b=M(u),x=M(c),S=G(d,10);function C(e){_.current&&l({x:e.clientX-_.current.left,y:e.clientY-_.current.top})}return I.useEffect(()=>{let e=e=>{let t=e.target;m?.contains(t)&&b(e,y)};return document.addEventListener(`wheel`,e,{passive:!1}),()=>document.removeEventListener(`wheel`,e,{passive:!1})},[ee,m,y,b]),I.useEffect(x,[r,x]),K(m,S),K(p.content,S),(0,L.jsx)(Xt,{scope:n,scrollbar:m,hasThumb:i,onThumbChange:M(a),onThumbPointerUp:M(o),onThumbPositionChange:x,onThumbPointerDown:M(s),children:(0,L.jsx)(T.div,{...f,ref:g,style:{position:`absolute`,...f.style},onPointerDown:A(e.onPointerDown,e=>{e.button===0&&(e.target.setPointerCapture(e.pointerId),_.current=m.getBoundingClientRect(),v.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,p.viewport&&(p.viewport.style.scrollBehavior=`auto`),C(e))}),onPointerMove:A(e.onPointerMove,C),onPointerUp:A(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=v.current,p.viewport&&(p.viewport.style.scrollBehavior=``),_.current=null})})})}),H=`ScrollAreaThumb`,$t=I.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=Zt(H,e.__scopeScrollArea);return(0,L.jsx)(j,{present:n||i.hasThumb,children:(0,L.jsx)(en,{ref:t,...r})})}),en=I.forwardRef((e,t)=>{let{__scopeScrollArea:n,style:r,...i}=e,a=z(H,n),o=Zt(H,n),{onThumbPositionChange:s}=o,c=E(t,e=>o.onThumbChange(e)),l=I.useRef(void 0),u=G(()=>{l.current&&=(l.current(),void 0)},100);return I.useEffect(()=>{let e=a.viewport;if(e){let t=()=>{u(),l.current||(l.current=un(e,s),s())};return s(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[a.viewport,u,s]),(0,L.jsx)(T.div,{"data-state":o.hasThumb?`visible`:`hidden`,...i,ref:c,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...r},onPointerDownCapture:A(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;o.onThumbPointerDown({x:n,y:r})}),onPointerUp:A(e.onPointerUp,o.onThumbPointerUp)})});$t.displayName=H;var tn=`ScrollAreaCorner`,nn=I.forwardRef((e,t)=>{let n=z(tn,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,L.jsx)(rn,{...e,ref:t}):null});nn.displayName=tn;var rn=I.forwardRef((e,t)=>{let{__scopeScrollArea:n,...r}=e,i=z(tn,n),[a,o]=I.useState(0),[s,c]=I.useState(0),l=!!(a&&s);return K(i.scrollbarX,()=>{let e=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(e),c(e)}),K(i.scrollbarY,()=>{let e=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(e),o(e)}),l?(0,L.jsx)(T.div,{...r,ref:t,style:{width:a,height:s,position:`absolute`,right:i.dir===`ltr`?0:void 0,left:i.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null});function U(e){return e?parseInt(e,10):0}function an(e,t){let n=e/t;return isNaN(n)?0:n}function W(e){let t=an(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function on(e,t,n,r=`ltr`){let i=W(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return cn([c,l],d)(e)}function sn(e,t,n=`ltr`){let r=W(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=Ze(e,n===`ltr`?[0,o]:[o*-1,0]);return cn([0,o],[0,s])(c)}function cn(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function ln(e,t){return e>0&&e{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return(function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(r)};function G(e,t){let n=M(e),r=I.useRef(0);return I.useEffect(()=>()=>window.clearTimeout(r.current),[]),I.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function K(e,t){let n=M(t);k(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(n)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,n])}var dn=Vt,fn=Ut,pn=nn,mn=P(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),hn=P(`coins`,[[`path`,{d:`M13.744 17.736a6 6 0 1 1-7.48-7.48`,key:`bq4yh3`}],[`path`,{d:`M15 6h1v4`,key:`11y1tn`}],[`path`,{d:`m6.134 14.768.866-.5 2 3.464`,key:`17snzx`}],[`circle`,{cx:`16`,cy:`8`,r:`6`,key:`14bfc9`}]]),gn=P(`credit-card`,[[`rect`,{width:`20`,height:`14`,x:`2`,y:`5`,rx:`2`,key:`ynyp8z`}],[`line`,{x1:`2`,x2:`22`,y1:`10`,y2:`10`,key:`1b3vmo`}]]),_n=P(`git-branch`,[[`path`,{d:`M15 6a9 9 0 0 0-9 9V3`,key:`1cii5b`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}]]),vn=P(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),yn=P(`laptop`,[[`path`,{d:`M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z`,key:`1pdavp`}],[`path`,{d:`M20.054 15.987H3.946`,key:`14rxg9`}]]),bn=P(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),xn=P(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),Sn=P(`panel-left`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}]]),Cn=P(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),wn=P(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),Tn=P(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),En=P(`shopping-cart`,[[`circle`,{cx:`8`,cy:`21`,r:`1`,key:`jimo8o`}],[`circle`,{cx:`19`,cy:`21`,r:`1`,key:`13723u`}],[`path`,{d:`M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12`,key:`9zh506`}]]),Dn=P(`waypoints`,[[`path`,{d:`m10.586 5.414-5.172 5.172`,key:`4mc350`}],[`path`,{d:`m18.586 13.414-5.172 5.172`,key:`8c96vv`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`circle`,{cx:`12`,cy:`20`,r:`2`,key:`144qzu`}],[`circle`,{cx:`12`,cy:`4`,r:`2`,key:`muu5ef`}],[`circle`,{cx:`20`,cy:`12`,r:`2`,key:`1xzzfp`}],[`circle`,{cx:`4`,cy:`12`,r:`2`,key:`1hvhnz`}]]);function On({dir:e,className:t,...n}){return(0,L.jsxs)(`svg`,{className:D(e===`rtl`&&`rotate-y-180`,t),"data-name":`icon-dir-${e}`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...n,children:[(0,L.jsx)(`title`,{children:`Directory Icon`}),(0,L.jsx)(`path`,{d:`M23.42.51h51.92c2.21 0 4 1.79 4 4v42.18c0 2.21-1.79 4-4 4H23.42s-.04-.02-.04-.04V.55s.02-.04.04-.04z`,opacity:.15}),(0,L.jsx)(`path`,{d:`M5.56 14.88L17.78 14.88`,fill:`none`,opacity:.72,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M5.56 22.09L16.08 22.09`,fill:`none`,opacity:.48,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M5.56 18.38L14.93 18.38`,fill:`none`,opacity:.55,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,L.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,L.jsx)(`circle`,{cx:7.51,cy:7.4,opacity:.8,r:2.54}),(0,L.jsx)(`path`,{d:`M12.06 6.14L17.78 6.14`,fill:`none`,opacity:.8,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M11.85 8.79L16.91 8.79`,fill:`none`,opacity:.6})]}),(0,L.jsx)(`path`,{d:`M29.41 7.4L34.67 7.4`,fill:`none`,opacity:.62,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`3px`}),(0,L.jsx)(`rect`,{height:2.73,opacity:.44,rx:.64,ry:.64,strokeLinecap:`round`,strokeMiterlimit:10,width:26.03,x:28.76,y:11.21}),(0,L.jsx)(`rect`,{height:13.48,opacity:.3,rx:.64,ry:.64,strokeLinecap:`round`,strokeMiterlimit:10,width:44.25,x:28.76,y:17.01}),(0,L.jsx)(`rect`,{height:4.67,opacity:.21,rx:.64,ry:.64,strokeLinecap:`round`,strokeMiterlimit:10,width:44.25,x:28.76,y:33.57}),(0,L.jsx)(`rect`,{height:4.67,opacity:.3,rx:.64,ry:.64,strokeLinecap:`round`,strokeMiterlimit:10,width:36.21,x:28.76,y:41.32})]})}function kn(e){return(0,L.jsxs)(`svg`,{"data-name":`icon-layout-compact`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,L.jsx)(`title`,{children:`Compact Layout`}),(0,L.jsx)(`rect`,{height:40,rx:2,ry:2,strokeLinecap:`round`,strokeMiterlimit:10,width:4,x:5.84,y:5.2}),(0,L.jsxs)(`g`,{stroke:`#fff`,strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,L.jsx)(`path`,{d:`M7.26 11.56L8.37 11.56`,fill:`none`,opacity:.66,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M7.26 14.49L8.37 14.49`,fill:`none`,opacity:.51,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M7.26 17.39L8.37 17.39`,fill:`none`,opacity:.52,strokeWidth:`2px`}),(0,L.jsx)(`circle`,{cx:7.81,cy:7.25,fill:`#fff`,opacity:.8,r:1.16})]}),(0,L.jsx)(`path`,{d:`M15.81 14.49L22.89 14.49`,fill:`none`,opacity:.75,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`3px`}),(0,L.jsx)(`rect`,{height:2.73,opacity:.5,rx:.64,ry:.64,strokeLinecap:`round`,strokeMiterlimit:10,width:22.19,x:14.93,y:18.39}),(0,L.jsx)(`rect`,{height:2.73,opacity:.9,rx:.64,ry:.64,strokeLinecap:`round`,strokeMiterlimit:10,width:59.16,x:14.93,y:5.89}),(0,L.jsx)(`rect`,{height:19.95,opacity:.4,rx:2.11,ry:2.11,strokeLinecap:`round`,strokeMiterlimit:10,width:32.68,x:14.93,y:24.22}),(0,L.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,L.jsx)(`rect`,{height:3.42,opacity:.32,rx:.33,ry:.33,width:2.01,x:59.05,y:38.15}),(0,L.jsx)(`rect`,{height:6.58,opacity:.44,rx:.33,ry:.33,width:2.01,x:54.78,y:34.99}),(0,L.jsx)(`rect`,{height:8.7,opacity:.53,rx:.33,ry:.33,width:2.01,x:63.17,y:32.86}),(0,L.jsx)(`rect`,{height:12.4,opacity:.66,rx:.33,ry:.33,width:2.01,x:67.54,y:29.17})]}),(0,L.jsxs)(`g`,{opacity:.5,children:[(0,L.jsx)(`circle`,{cx:62.16,cy:18.63,r:7.5}),(0,L.jsx)(`path`,{d:`M62.16 11.63c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.14-7-7 3.14-7 7-7m0-1c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z`})]}),(0,L.jsxs)(`g`,{opacity:.74,children:[(0,L.jsx)(`path`,{d:`M63.04 18.13l3.38-5.67c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z`}),(0,L.jsx)(`path`,{d:`M66.57 13.19a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95a8.007 8.007 0 00-2.86-2.92z`})]})]})}function An(e){return(0,L.jsxs)(`svg`,{"data-name":`con-layout-default`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,L.jsx)(`title`,{children:`Default Layout`}),(0,L.jsx)(`path`,{d:`M39.22 15.99h-8.16c-.79 0-1.43-.67-1.43-1.5s.64-1.5 1.43-1.5h8.16c.79 0 1.43.67 1.43 1.5s-.64 1.5-1.43 1.5z`,opacity:.75}),(0,L.jsx)(`rect`,{height:2.73,opacity:.5,rx:1.36,ry:1.36,width:16.72,x:29.63,y:18.39}),(0,L.jsx)(`path`,{d:`M75.1 6.68v1.45c0 .63-.49 1.14-1.09 1.14H30.72c-.6 0-1.09-.51-1.09-1.14V6.68c0-.62.49-1.14 1.09-1.14h43.29c.6 0 1.09.52 1.09 1.14z`,opacity:.9}),(0,L.jsx)(`rect`,{height:19.95,opacity:.4,rx:2.11,ry:2.11,width:21.8,x:29.63,y:24.22}),(0,L.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,L.jsx)(`rect`,{height:3.42,opacity:.32,rx:.33,ry:.33,width:2.01,x:61.06,y:38.15}),(0,L.jsx)(`rect`,{height:6.58,opacity:.44,rx:.33,ry:.33,width:2.01,x:56.78,y:34.99}),(0,L.jsx)(`rect`,{height:8.7,opacity:.53,rx:.33,ry:.33,width:2.01,x:65.17,y:32.86}),(0,L.jsx)(`rect`,{height:12.4,opacity:.66,rx:.33,ry:.33,width:2.01,x:69.55,y:29.17})]}),(0,L.jsxs)(`g`,{opacity:.5,children:[(0,L.jsx)(`circle`,{cx:63.17,cy:18.63,r:7.5}),(0,L.jsx)(`path`,{d:`M63.17 11.63c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.14-7-7 3.14-7 7-7m0-1c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z`})]}),(0,L.jsxs)(`g`,{opacity:.74,children:[(0,L.jsx)(`path`,{d:`M64.05 18.13l3.38-5.67c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z`}),(0,L.jsx)(`path`,{d:`M67.57 13.19a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95a8.007 8.007 0 00-2.86-2.92z`})]}),(0,L.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,L.jsx)(`rect`,{height:40,opacity:.8,rx:2,ry:2,width:19.14,x:5.84,y:5.02}),(0,L.jsxs)(`g`,{stroke:`#fff`,children:[(0,L.jsx)(`path`,{d:`M9.02 17.39L21.25 17.39`,fill:`none`,opacity:.72,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M9.02 24.6L19.54 24.6`,fill:`none`,opacity:.48,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M9.02 20.88L18.4 20.88`,fill:`none`,opacity:.55,strokeWidth:`2px`}),(0,L.jsx)(`circle`,{cx:10.98,cy:9.91,fill:`#fff`,opacity:.8,r:2.54}),(0,L.jsx)(`path`,{d:`M15.53 8.65L21.25 8.65`,fill:`none`,opacity:.8,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M15.32 11.3L20.38 11.3`,fill:`none`,opacity:.6})]})]})]})}function jn(e){return(0,L.jsxs)(`svg`,{"data-name":`icon-layout-full`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,L.jsx)(`title`,{children:`Full Layout`}),(0,L.jsx)(`path`,{d:`M6.85 14.49L15.02 14.49`,fill:`none`,opacity:.75,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`3px`}),(0,L.jsx)(`rect`,{height:2.73,opacity:.5,rx:.64,ry:.64,strokeLinecap:`round`,strokeMiterlimit:10,width:25.6,x:5.84,y:18.39}),(0,L.jsx)(`rect`,{height:2.73,opacity:.9,rx:.64,ry:.64,strokeLinecap:`round`,strokeMiterlimit:10,width:68.26,x:5.84,y:5.89}),(0,L.jsx)(`rect`,{height:19.95,opacity:.4,rx:2.11,ry:2.11,strokeLinecap:`round`,strokeMiterlimit:10,width:37.71,x:5.84,y:24.22}),(0,L.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,L.jsx)(`rect`,{height:3.42,opacity:.32,rx:.33,ry:.33,width:2.01,x:59.05,y:38.15}),(0,L.jsx)(`rect`,{height:6.58,opacity:.44,rx:.33,ry:.33,width:2.01,x:54.78,y:34.99}),(0,L.jsx)(`rect`,{height:8.7,opacity:.53,rx:.33,ry:.33,width:2.01,x:63.17,y:32.86}),(0,L.jsx)(`rect`,{height:12.4,opacity:.66,rx:.33,ry:.33,width:2.01,x:67.54,y:29.17})]}),(0,L.jsxs)(`g`,{opacity:.5,children:[(0,L.jsx)(`circle`,{cx:62.16,cy:18.63,r:7.5}),(0,L.jsx)(`path`,{d:`M62.16 11.63c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.14-7-7 3.14-7 7-7m0-1c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z`})]}),(0,L.jsxs)(`g`,{opacity:.74,children:[(0,L.jsx)(`path`,{d:`M63.04 18.13l3.38-5.67c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z`}),(0,L.jsx)(`path`,{d:`M66.57 13.19a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95a8.007 8.007 0 00-2.86-2.92z`})]})]})}function Mn(e){return(0,L.jsxs)(`svg`,{"data-name":`icon-sidebar-floating`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,L.jsx)(`title`,{children:`Floating Sidebar`}),(0,L.jsx)(`rect`,{height:40,opacity:.8,rx:2,ry:2,strokeLinecap:`round`,strokeMiterlimit:10,width:19.74,x:5.89,y:5.15}),(0,L.jsxs)(`g`,{stroke:`#fff`,strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,L.jsx)(`path`,{d:`M9.81 18.36L22.04 18.36`,fill:`none`,opacity:.72,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M9.81 25.57L20.33 25.57`,fill:`none`,opacity:.48,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M9.81 21.85L19.18 21.85`,fill:`none`,opacity:.55,strokeWidth:`2px`}),(0,L.jsx)(`circle`,{cx:11.76,cy:10.88,fill:`#fff`,opacity:.8,r:2.54}),(0,L.jsx)(`path`,{d:`M16.31 9.62L22.04 9.62`,fill:`none`,opacity:.8,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M16.1 12.27L21.16 12.27`,fill:`none`,opacity:.6})]}),(0,L.jsx)(`path`,{d:`M30.59 9.62L35.85 9.62`,fill:`none`,opacity:.62,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`3px`}),(0,L.jsx)(`rect`,{height:2.73,opacity:.44,rx:.64,ry:.64,strokeLinecap:`round`,strokeMiterlimit:10,width:26.03,x:29.94,y:13.42}),(0,L.jsx)(`rect`,{height:25.87,opacity:.3,rx:2,ry:2,strokeLinecap:`round`,strokeMiterlimit:10,width:43.11,x:29.94,y:19.28})]})}function Nn(e){return(0,L.jsxs)(`svg`,{"data-name":`icon-sidebar-inset`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,L.jsx)(`title`,{children:`Inset Sidebar`}),(0,L.jsx)(`rect`,{height:40,opacity:.2,rx:2,ry:2,strokeLinecap:`round`,strokeMiterlimit:10,width:50.22,x:23.39,y:5.57}),(0,L.jsx)(`path`,{d:`M5.08 17.05L17.31 17.05`,fill:`none`,opacity:.72,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M5.08 24.25L15.6 24.25`,fill:`none`,opacity:.48,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M5.08 20.54L14.46 20.54`,fill:`none`,opacity:.55,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,L.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,L.jsx)(`circle`,{cx:7.04,cy:9.57,opacity:.8,r:2.54}),(0,L.jsx)(`path`,{d:`M11.59 8.3L17.31 8.3`,fill:`none`,opacity:.8,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M11.38 10.95L16.44 10.95`,fill:`none`,opacity:.6})]})]})}function Pn(e){return(0,L.jsxs)(`svg`,{"data-name":`icon-sidebar-sidebar`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,L.jsx)(`title`,{children:`Sidebar`}),(0,L.jsx)(`path`,{d:`M23.42.51h51.99c2.21 0 4 1.79 4 4v42.18c0 2.21-1.79 4-4 4H23.42s-.04-.02-.04-.04V.55s.02-.04.04-.04z`,opacity:.2,strokeLinecap:`round`,strokeMiterlimit:10}),(0,L.jsx)(`path`,{d:`M5.56 14.88L17.78 14.88`,fill:`none`,opacity:.72,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M5.56 22.09L16.08 22.09`,fill:`none`,opacity:.48,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M5.56 18.38L14.93 18.38`,fill:`none`,opacity:.55,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,L.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,L.jsx)(`circle`,{cx:7.51,cy:7.4,opacity:.8,r:2.54}),(0,L.jsx)(`path`,{d:`M12.06 6.14L17.78 6.14`,fill:`none`,opacity:.8,strokeWidth:`2px`}),(0,L.jsx)(`path`,{d:`M11.85 8.79L16.91 8.79`,fill:`none`,opacity:.6})]})]})}function Fn(e){return(0,L.jsxs)(`svg`,{"aria-label":`Dark theme icon`,"data-name":`icon-theme-dark`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,L.jsx)(`title`,{children:`Dark Theme`}),(0,L.jsxs)(`g`,{fill:`#1d2b3f`,children:[(0,L.jsx)(`rect`,{height:50.14,rx:3.5,ry:3.5,width:78.83,x:.53,y:.5}),(0,L.jsx)(`path`,{d:`M75.86 1c1.65 0 3 1.35 3 3v43.14c0 1.65-1.35 3-3 3H4.03c-1.65 0-3-1.35-3-3V4c0-1.65 1.35-3 3-3h71.83m0-1H4.03c-2.21 0-4 1.79-4 4v43.14c0 2.21 1.79 4 4 4h71.83c2.21 0 4-1.79 4-4V4c0-2.21-1.79-4-4-4z`})]}),(0,L.jsx)(`path`,{d:`M22.88 0h52.97c2.21 0 4 1.79 4 4v43.14c0 2.21-1.79 4-4 4H22.88V0z`,fill:`#0d1628`}),(0,L.jsx)(`circle`,{cx:6.7,cy:7.04,fill:`#426187`,r:3.54}),(0,L.jsx)(`path`,{d:`M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1zM18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05zM15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91zM16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z`,fill:`#426187`}),(0,L.jsxs)(`g`,{fill:`#2a62bc`,children:[(0,L.jsx)(`rect`,{height:3.42,opacity:.32,rx:.33,ry:.33,width:2.75,x:33.36,y:19.73}),(0,L.jsx)(`rect`,{height:6.58,opacity:.44,rx:.33,ry:.33,width:2.75,x:29.64,y:16.57}),(0,L.jsx)(`rect`,{height:8.7,opacity:.53,rx:.33,ry:.33,width:2.75,x:37.16,y:14.44}),(0,L.jsx)(`rect`,{height:12.4,opacity:.53,rx:.33,ry:.33,width:2.75,x:41.19,y:10.75})]}),(0,L.jsx)(`circle`,{cx:62.74,cy:16.32,fill:`#2f5491`,opacity:.5,r:8}),(0,L.jsx)(`path`,{d:`M62.74 16.32l4.1-6.87c1.19.71 2.18 1.72 2.86 2.92s1.04 2.57 1.04 3.95h-8z`,fill:`#2f5491`,opacity:.74}),(0,L.jsx)(`rect`,{fill:`#17273f`,height:18.62,rx:1.69,ry:1.69,width:41.62,x:29.64,y:27.75})]})}function In(e){return(0,L.jsxs)(`svg`,{"aria-label":`Light theme icon`,"data-name":`icon-theme-light`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,L.jsx)(`title`,{children:`Light Theme`}),(0,L.jsxs)(`g`,{fill:`#d9d9d9`,children:[(0,L.jsx)(`rect`,{height:50.14,rx:3.5,ry:3.5,width:78.83,x:.53,y:.5}),(0,L.jsx)(`path`,{d:`M75.86 1c1.65 0 3 1.35 3 3v43.14c0 1.65-1.35 3-3 3H4.03c-1.65 0-3-1.35-3-3V4c0-1.65 1.35-3 3-3h71.83m0-1H4.03c-2.21 0-4 1.79-4 4v43.14c0 2.21 1.79 4 4 4h71.83c2.21 0 4-1.79 4-4V4c0-2.21-1.79-4-4-4z`})]}),(0,L.jsx)(`path`,{d:`M22.88 0h52.97c2.21 0 4 1.79 4 4v43.14c0 2.21-1.79 4-4 4H22.88V0z`,fill:`#ecedef`}),(0,L.jsx)(`circle`,{cx:6.7,cy:7.04,fill:`#fff`,r:3.54}),(0,L.jsx)(`path`,{d:`M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1zM18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05zM15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91zM16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z`,fill:`#fff`}),(0,L.jsxs)(`g`,{fill:`#c0c4c4`,children:[(0,L.jsx)(`rect`,{height:3.42,opacity:.32,rx:.33,ry:.33,width:2.75,x:33.36,y:19.73}),(0,L.jsx)(`rect`,{height:6.58,opacity:.44,rx:.33,ry:.33,width:2.75,x:29.64,y:16.57}),(0,L.jsx)(`rect`,{height:8.7,opacity:.53,rx:.33,ry:.33,width:2.75,x:37.16,y:14.44}),(0,L.jsx)(`rect`,{height:12.4,opacity:.53,rx:.33,ry:.33,width:2.75,x:41.19,y:10.75})]}),(0,L.jsx)(`circle`,{cx:62.74,cy:16.32,fill:`#fff`,r:8}),(0,L.jsxs)(`g`,{fill:`#d9d9d9`,children:[(0,L.jsx)(`path`,{d:`M63.62 15.82L67 10.15c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z`}),(0,L.jsx)(`path`,{d:`M67.14 10.88a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95s-1.67-2.21-2.86-2.92z`})]}),(0,L.jsx)(`rect`,{fill:`#fff`,height:18.62,rx:1.69,ry:1.69,width:41.62,x:29.64,y:27.75})]})}function Ln({className:e,...t}){return(0,L.jsxs)(`svg`,{"aria-label":`System theme icon`,className:D(`overflow-hidden rounded-[6px]`,`fill-primary stroke-primary group-data-[state=unchecked]:fill-muted-foreground group-data-[state=unchecked]:stroke-muted-foreground`,e),"data-name":`icon-theme-system`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...t,children:[(0,L.jsx)(`title`,{children:`System Theme`}),(0,L.jsx)(`path`,{d:`M0 0.03H22.88V51.17H0z`,opacity:.2}),(0,L.jsx)(`circle`,{cx:6.7,cy:7.04,fill:`#fff`,opacity:.8,r:3.54,stroke:`#fff`,strokeLinecap:`round`,strokeMiterlimit:10}),(0,L.jsx)(`path`,{d:`M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1z`,fill:`#fff`,opacity:.75,stroke:`none`}),(0,L.jsx)(`path`,{d:`M18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05z`,fill:`#fff`,opacity:.72,stroke:`none`}),(0,L.jsx)(`path`,{d:`M15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91z`,fill:`#fff`,opacity:.55,stroke:`none`}),(0,L.jsx)(`path`,{d:`M16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z`,fill:`#fff`,opacity:.67,stroke:`none`}),(0,L.jsx)(`rect`,{height:3.42,opacity:.31,rx:.33,ry:.33,stroke:`none`,width:2.75,x:33.36,y:19.73}),(0,L.jsx)(`rect`,{height:6.58,opacity:.4,rx:.33,ry:.33,stroke:`none`,width:2.75,x:29.64,y:16.57}),(0,L.jsx)(`rect`,{height:8.7,opacity:.26,rx:.33,ry:.33,stroke:`none`,width:2.75,x:37.16,y:14.44}),(0,L.jsx)(`rect`,{height:12.4,opacity:.37,rx:.33,ry:.33,stroke:`none`,width:2.75,x:41.19,y:10.75}),(0,L.jsxs)(`g`,{children:[(0,L.jsx)(`circle`,{cx:62.74,cy:16.32,opacity:.25,r:8}),(0,L.jsx)(`path`,{d:`M62.74 16.32l4.1-6.87c1.19.71 2.18 1.72 2.86 2.92s1.04 2.57 1.04 3.95h-8z`,opacity:.45})]}),(0,L.jsx)(`rect`,{height:18.62,opacity:.3,rx:1.69,ry:1.69,stroke:`none`,strokeLinecap:`round`,strokeMiterlimit:10,width:41.62,x:29.64,y:27.75})]})}function q({...e}){return(0,L.jsx)(Ge,{"data-slot":`sheet`,...e})}function Rn({...e}){return(0,L.jsx)(He,{"data-slot":`sheet-trigger`,...e})}function zn({...e}){return(0,L.jsx)(Ve,{"data-slot":`sheet-portal`,...e})}function Bn({className:e,...t}){return(0,L.jsx)(Ue,{className:D(`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=open]:animate-in`,e),"data-slot":`sheet-overlay`,...t})}function Vn({className:e,children:t,side:n=`right`,showCloseButton:r=!0,...i}){return(0,L.jsxs)(zn,{children:[(0,L.jsx)(Bn,{}),(0,L.jsxs)(We,{className:D(`fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=open]:animate-in data-[state=closed]:duration-300 data-[state=open]:duration-500`,n===`right`&&`data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm`,n===`left`&&`data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm`,n===`top`&&`data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b`,n===`bottom`&&`data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t`,e),"data-slot":`sheet-content`,...i,children:[t,r&&(0,L.jsxs)(Je,{className:`absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary`,children:[(0,L.jsx)(ft,{className:`size-4`}),(0,L.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function Hn({className:e,...t}){return(0,L.jsx)(`div`,{className:D(`flex flex-col gap-1.5 p-4`,e),"data-slot":`sheet-header`,...t})}function Un({className:e,...t}){return(0,L.jsx)(`div`,{className:D(`mt-auto flex flex-col gap-2 p-4`,e),"data-slot":`sheet-footer`,...t})}function Wn({className:e,...t}){return(0,L.jsx)(qe,{className:D(`font-semibold text-foreground`,e),"data-slot":`sheet-title`,...t})}function Gn({className:e,...t}){return(0,L.jsx)(Ke,{className:D(`text-muted-foreground text-sm`,e),"data-slot":`sheet-description`,...t})}var Kn=`layout_collapsible`,qn=`layout_variant`,Jn=3600*24*7,J=`sidebar`,Y=`icon`,Yn=(0,I.createContext)(null);function Xn({children:e}){let[t,n]=(0,I.useState)(()=>et(Kn)||Y),[r,i]=(0,I.useState)(()=>et(qn)||J),a=e=>{n(e),$e(Kn,e,Jn)},o=e=>{i(e),$e(qn,e,Jn)};return(0,L.jsx)(Yn,{value:{resetLayout:()=>{a(Y),o(J)},defaultCollapsible:Y,collapsible:t,setCollapsible:a,defaultVariant:J,variant:r,setVariant:o},children:e})}function X(){let e=(0,I.useContext)(Yn);if(!e)throw Error(`useLayout must be used within a LayoutProvider`);return e}var Zn=768;function Qn(){let[e,t]=I.useState(void 0);return I.useEffect(()=>{let e=window.matchMedia(`(max-width: ${Zn-1}px)`),n=()=>{t(window.innerWidthe.removeEventListener(`change`,n)},[]),!!e}var $n=`16rem`,er=`18rem`,tr=`3rem`,nr=`b`,rr=I.createContext(null);function Z(){let e=I.useContext(rr);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function ir({defaultOpen:e=!0,open:t,onOpenChange:n,className:r,style:i,children:a,...o}){let s=Qn(),[c,l]=I.useState(!1),[u,d]=I.useState(e),f=t??u,p=I.useCallback(e=>{let t=typeof e==`function`?e(f):e;n?n(t):d(t),document.cookie=`${Ee}=${t}; path=/; max-age=${Te}`},[n,f]),m=I.useCallback(()=>s?l(e=>!e):p(e=>!e),[s,p]);I.useEffect(()=>{let e=e=>{e.key===nr&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),m())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[m]);let h=f?`expanded`:`collapsed`,g=I.useMemo(()=>({state:h,open:f,setOpen:p,isMobile:s,openMobile:c,setOpenMobile:l,toggleSidebar:m}),[h,f,p,s,c,m]);return(0,L.jsx)(rr.Provider,{value:g,children:(0,L.jsx)(Le,{delayDuration:0,children:(0,L.jsx)(`div`,{className:D(`group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar`,r),"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":$n,"--sidebar-width-icon":tr,...i},...o,children:a})})})}function ar({side:e=`left`,variant:t=`sidebar`,collapsible:n=`offcanvas`,className:r,children:i,...a}){let{isMobile:o,state:s,openMobile:c,setOpenMobile:l}=Z();return n===`none`?(0,L.jsx)(`div`,{className:D(`flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,r),"data-slot":`sidebar`,...a,children:i}):o?(0,L.jsx)(q,{onOpenChange:l,open:c,...a,children:(0,L.jsxs)(Vn,{className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden`,"data-mobile":`true`,"data-sidebar":`sidebar`,"data-slot":`sidebar`,side:e,style:{"--sidebar-width":er},children:[(0,L.jsxs)(Hn,{className:`sr-only`,children:[(0,L.jsx)(Wn,{children:`Sidebar`}),(0,L.jsx)(Gn,{children:`Displays the mobile sidebar.`})]}),(0,L.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:i})]})}):(0,L.jsxs)(`div`,{className:`group peer hidden text-sidebar-foreground md:block`,"data-collapsible":s===`collapsed`?n:``,"data-side":e,"data-slot":`sidebar`,"data-state":s,"data-variant":t,children:[(0,L.jsx)(`div`,{className:D(`relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,t===`floating`||t===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`),"data-slot":`sidebar-gap`}),(0,L.jsx)(`div`,{className:D(`fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex`,e===`left`?`left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`:`right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,t===`floating`||t===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,r),"data-slot":`sidebar-container`,...a,children:(0,L.jsx)(`div`,{className:`flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm`,"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,children:i})})]})}function or({className:e,onClick:t,...n}){let{toggleSidebar:r}=Z();return(0,L.jsxs)(O,{className:D(`size-7`,e),"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,onClick:e=>{t?.(e),r()},size:`icon`,variant:`ghost`,...n,children:[(0,L.jsx)(Sn,{}),(0,L.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function sr({className:e,...t}){let{toggleSidebar:n}=Z();return(0,L.jsx)(`button`,{"aria-label":`Toggle Sidebar`,className:D(`absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex`,`in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize`,`[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize`,`group-data-[collapsible=offcanvas]:translate-x-0 hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:after:left-full`,`[[data-side=left][data-collapsible=offcanvas]_&]:-right-2`,`[[data-side=right][data-collapsible=offcanvas]_&]:-left-2`,e),"data-sidebar":`rail`,"data-slot":`sidebar-rail`,onClick:n,tabIndex:-1,title:`Toggle Sidebar`,...t})}function cr({className:e,...t}){return(0,L.jsx)(`main`,{className:D(`relative flex w-full flex-1 flex-col bg-background`,`md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2 md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm`,e),"data-slot":`sidebar-inset`,...t})}function lr({className:e,...t}){return(0,L.jsx)(`div`,{className:D(`flex flex-col gap-2 p-2`,e),"data-sidebar":`header`,"data-slot":`sidebar-header`,...t})}function ur({className:e,...t}){return(0,L.jsx)(`div`,{className:D(`flex flex-col gap-2 p-2`,e),"data-sidebar":`footer`,"data-slot":`sidebar-footer`,...t})}function dr({className:e,...t}){return(0,L.jsx)(`div`,{className:D(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),"data-sidebar":`content`,"data-slot":`sidebar-content`,...t})}function fr({className:e,...t}){return(0,L.jsx)(`div`,{className:D(`relative flex w-full min-w-0 flex-col p-2`,e),"data-sidebar":`group`,"data-slot":`sidebar-group`,...t})}function pr({className:e,asChild:t=!1,...n}){return(0,L.jsx)(t?Pe:`div`,{className:D(`flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0`,`group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0`,e),"data-sidebar":`group-label`,"data-slot":`sidebar-group-label`,...n})}function mr({className:e,...t}){return(0,L.jsx)(`ul`,{className:D(`flex w-full min-w-0 flex-col gap-1`,e),"data-sidebar":`menu`,"data-slot":`sidebar-menu`,...t})}function hr({className:e,...t}){return(0,L.jsx)(`li`,{className:D(`group/menu-item relative`,e),"data-sidebar":`menu-item`,"data-slot":`sidebar-menu-item`,...t})}var gr=Ne(`peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0`,{variants:{variant:{default:`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,outline:`bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]`},size:{default:`h-8 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function _r({asChild:e=!1,isActive:t=!1,variant:n=`default`,size:r=`default`,tooltip:i,className:a,...o}){let s=e?Pe:`button`,{isMobile:c,state:l}=Z(),u=(0,L.jsx)(s,{className:D(gr({variant:n,size:r}),a),"data-active":t,"data-sidebar":`menu-button`,"data-size":r,"data-slot":`sidebar-menu-button`,...o});return i?(typeof i==`string`&&(i={children:i}),(0,L.jsxs)(Re,{children:[(0,L.jsx)(Fe,{asChild:!0,children:u}),(0,L.jsx)(Ie,{align:`center`,hidden:l!==`collapsed`||c,side:`right`,...i})]})):u}function vr({className:e,...t}){return(0,L.jsx)(`ul`,{className:D(`mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-sidebar-border border-l px-2.5 py-0.5`,`group-data-[collapsible=icon]:hidden`,e),"data-sidebar":`menu-sub`,"data-slot":`sidebar-menu-sub`,...t})}function yr({className:e,...t}){return(0,L.jsx)(`li`,{className:D(`group/menu-sub-item relative`,e),"data-sidebar":`menu-sub-item`,"data-slot":`sidebar-menu-sub-item`,...t})}function br({asChild:e=!1,size:t=`md`,isActive:n=!1,className:r,...i}){return(0,L.jsx)(e?Pe:`a`,{className:D(`flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-hidden ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground`,`data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground`,t===`sm`&&`text-xs`,t===`md`&&`text-sm`,`group-data-[collapsible=icon]:hidden`,r),"data-active":n,"data-sidebar":`menu-sub-button`,"data-size":t,"data-slot":`sidebar-menu-sub-button`,...i})}function xr(){return(0,L.jsxs)(q,{children:[(0,L.jsx)(Rn,{asChild:!0,children:(0,L.jsx)(O,{"aria-describedby":`config-drawer-description`,"aria-label":`Open theme settings`,className:`rounded-full`,size:`icon`,variant:`ghost`,children:(0,L.jsx)(Tn,{"aria-hidden":`true`})})}),(0,L.jsx)(Sr,{})]})}function Sr(){let{setOpen:e}=Z(),{resetDir:t}=tt(),{resetFont:n}=rt(),{resetTheme:i}=at(),{resetLayout:a}=X();return(0,L.jsxs)(Vn,{className:`flex flex-col`,children:[(0,L.jsxs)(Hn,{className:`pb-0 text-start`,children:[(0,L.jsx)(Wn,{children:r()}),(0,L.jsx)(Gn,{id:`config-drawer-description`,children:de()})]}),(0,L.jsxs)(`div`,{className:`space-y-6 overflow-y-auto px-4`,children:[(0,L.jsx)(wr,{}),(0,L.jsx)(Cr,{}),(0,L.jsx)(Tr,{}),(0,L.jsx)(Er,{}),(0,L.jsx)(Dr,{})]}),(0,L.jsx)(Un,{className:`gap-2`,children:(0,L.jsx)(O,{"aria-label":`Reset all settings to default values`,onClick:()=>{e(!0),t(),n(),i(),a()},variant:`destructive`,children:g()})})]})}function Q({title:e,showReset:t=!1,onReset:n,className:r}){return(0,L.jsxs)(`div`,{className:D(`mb-2 flex items-center gap-2 font-semibold text-muted-foreground text-sm`,r),children:[e,t&&n&&(0,L.jsx)(O,{className:`size-4 rounded-full`,onClick:n,size:`icon`,variant:`secondary`,children:(0,L.jsx)(Cn,{className:`size-3`})})]})}function $({item:e,isTheme:t=!1}){return(0,L.jsxs)(Qe,{"aria-describedby":`${e.value}-description`,"aria-label":`Select ${e.label.toLowerCase()}`,className:D(`group outline-none`,`transition duration-200 ease-in`),value:e.value,children:[(0,L.jsxs)(`div`,{"aria-hidden":`false`,"aria-label":`${e.label} option preview`,className:D(`relative rounded-[6px] ring-[1px] ring-border`,`group-data-[state=checked]:shadow-2xl group-data-[state=checked]:ring-primary`,`group-focus-visible:ring-2`),role:`img`,children:[(0,L.jsx)(ot,{"aria-hidden":`true`,className:D(`size-6 fill-primary stroke-white`,`group-data-[state=unchecked]:hidden`,`absolute top-0 right-0 translate-x-1/2 -translate-y-1/2`)}),(0,L.jsx)(e.icon,{"aria-hidden":`true`,className:D(!t&&`fill-primary stroke-primary group-data-[state=unchecked]:fill-muted-foreground group-data-[state=unchecked]:stroke-muted-foreground`)})]}),(0,L.jsx)(`div`,{"aria-live":`polite`,className:`mt-1 text-xs`,id:`${e.value}-description`,children:e.label})]})}function Cr(){let{defaultTheme:e,theme:t,setTheme:n}=at();return(0,L.jsxs)(`div`,{children:[(0,L.jsx)(Q,{onReset:()=>n(e),showReset:t!==e,title:s()}),(0,L.jsx)(N,{"aria-describedby":`theme-description`,"aria-label":`Select theme preference`,className:`grid w-full max-w-md grid-cols-3 gap-4`,onValueChange:n,value:t,children:[{value:`system`,label:Ce(),icon:Ln},{value:`light`,label:C(),icon:In},{value:`dark`,label:a(),icon:Fn}].map(e=>(0,L.jsx)($,{isTheme:!0,item:e},e.value))}),(0,L.jsx)(`div`,{className:`sr-only`,id:`theme-description`,children:`Choose between system preference, light mode, or dark mode`})]})}function wr(){let{font:e,setFont:t,resetFont:n}=rt();return(0,L.jsxs)(`div`,{children:[(0,L.jsx)(Q,{onReset:n,showReset:e!==it[0],title:se()}),(0,L.jsx)(`select`,{className:`w-full rounded-md border border-input bg-background px-3 py-2 text-sm`,onChange:e=>t(e.target.value),value:e,children:it.map(e=>(0,L.jsx)(`option`,{value:e,children:e},e))})]})}function Tr(){let{defaultVariant:e,variant:t,setVariant:n}=X();return(0,L.jsxs)(`div`,{className:`max-md:hidden`,children:[(0,L.jsx)(Q,{onReset:()=>n(e),showReset:e!==t,title:c()}),(0,L.jsx)(N,{"aria-describedby":`sidebar-description`,"aria-label":`Select sidebar style`,className:`grid w-full max-w-md grid-cols-3 gap-4`,onValueChange:n,value:t,children:[{value:`inset`,label:o(),icon:Nn},{value:`floating`,label:ee(),icon:Mn},{value:`sidebar`,label:be(),icon:Pn}].map(e=>(0,L.jsx)($,{item:e},e.value))}),(0,L.jsx)(`div`,{className:`sr-only`,id:`sidebar-description`,children:`Choose between inset, floating, or standard sidebar layout`})]})}function Er(){let{open:e,setOpen:t}=Z(),{defaultCollapsible:n,collapsible:r,setCollapsible:i}=X(),a=e?`default`:r;return(0,L.jsxs)(`div`,{className:`max-md:hidden`,children:[(0,L.jsx)(Q,{onReset:()=>{t(!0),i(n)},showReset:a!==`default`,title:y()}),(0,L.jsx)(N,{"aria-describedby":`layout-description`,"aria-label":`Select layout style`,className:`grid w-full max-w-md grid-cols-3 gap-4`,onValueChange:e=>{if(e===`default`){t(!0);return}t(!1),i(e)},value:a,children:[{value:`default`,label:ie(),icon:An},{value:`icon`,label:xe(),icon:kn},{value:`offcanvas`,label:ve(),icon:jn}].map(e=>(0,L.jsx)($,{item:e},e.value))}),(0,L.jsx)(`div`,{className:`sr-only`,id:`layout-description`,children:`Choose between default expanded, compact icon-only, or full layout mode`})]})}function Dr(){let{defaultDir:e,dir:t,setDir:n}=tt();return(0,L.jsxs)(`div`,{children:[(0,L.jsx)(Q,{onReset:()=>n(e),showReset:e!==t,title:ye()}),(0,L.jsx)(N,{"aria-describedby":`direction-description`,"aria-label":`Select site direction`,className:`grid w-full max-w-md grid-cols-3 gap-4`,onValueChange:n,value:t,children:[{value:`ltr`,label:ne(),icon:e=>(0,L.jsx)(On,{dir:`ltr`,...e})},{value:`rtl`,label:oe(),icon:e=>(0,L.jsx)(On,{dir:`rtl`,...e})}].map(e=>(0,L.jsx)($,{item:e},e.value))}),(0,L.jsx)(`div`,{className:`sr-only`,id:`direction-description`,children:`Choose between left-to-right or right-to-left site direction`})]})}function Or({open:e,onOpenChange:t}){let n=Me(),r=vt(),i=we.useMutation(`post`,`/admin/api/v1/auth/logout`);return(0,L.jsx)(Ye,{className:`sm:max-w-sm`,confirmText:i.isPending?fe():w(),desc:x(),destructive:!0,handleConfirm:async()=>{await i.mutateAsync({}),De();let e=r.href;n({to:`/sign-in`,search:{redirect:e},replace:!0})},onOpenChange:t,open:e,title:w()})}function kr({className:e,size:t=`default`,...n}){return(0,L.jsx)(Nt,{className:D(`group/avatar relative flex size-8 shrink-0 select-none overflow-hidden rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6`,e),"data-size":t,"data-slot":`avatar`,...n})}function Ar({className:e,...t}){return(0,L.jsx)(Pt,{className:D(`aspect-square size-full`,e),"data-slot":`avatar-image`,...t})}function jr({className:e,...t}){return(0,L.jsx)(Ft,{className:D(`flex size-full items-center justify-center rounded-full bg-muted text-muted-foreground text-sm group-data-[size=sm]/avatar:text-xs`,e),"data-slot":`avatar-fallback`,...t})}function Mr(e=null){let[t,n]=(0,I.useState)(e);return[t,e=>n(t=>t===e?null:e)]}function Nr(e){if(!e)return`-`;let t=new Date(e.replace(` `,`T`));return Number.isNaN(t.getTime())?e:new Intl.DateTimeFormat(`zh-TW`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1}).format(t)}function Pr(e){return e?e.includes(` `)?e.slice(11,16):e.slice(5):``}function Fr(e,t=2){return Number(e??0).toLocaleString(`en-US`,{maximumFractionDigits:t})}function Ir(e,t=2){return`$${Number(e??0).toLocaleString(`en-US`,{maximumFractionDigits:t})}`}function Lr(){return{user:{name:`GMPay`,email:`admin@gmpay.local`,avatar:`/avatars/shadcn.jpg`},teams:[{name:`GMPay`,logo:lt,plan:re()}],navGroups:[{title:he(),items:[{title:f(),url:`/dashboard`,icon:bn},{title:ce(),icon:hn,items:[{title:ge(),url:`/payment-setup`},{title:pe(),url:`/payment-setup/integrations`}]}]},{title:_e(),items:[{title:l(),url:`/orders`,icon:En}]},{title:ae(),items:[{title:e(),url:`/addresses`,icon:nt}]},{title:b(),items:[{title:u(),url:`/chains`,icon:_n},{title:S(),url:`/rpc`,icon:Dn}]},{title:i(),items:[{title:te(),url:`/keys`,icon:gn},{title:Se(),icon:Tn,items:[{title:h(),url:`/settings`},{title:p(),url:`/settings/telegram`},{title:le(),url:`/settings/rate`},{title:n(),url:`/settings/epay`}]},{title:v(),icon:_t,items:[{title:d(),url:`/account/password`}]}]}]}}function Rr({className:e,children:t,...n}){return(0,L.jsxs)(dn,{className:D(`relative`,e),"data-slot":`scroll-area`,...n,children:[(0,L.jsx)(fn,{className:`size-full rounded-[inherit] outline-none transition-[color,box-shadow] focus-visible:outline-1 focus-visible:ring-[3px] focus-visible:ring-ring/50`,"data-slot":`scroll-area-viewport`,children:t}),(0,L.jsx)(zr,{}),(0,L.jsx)(pn,{})]})}function zr({className:e,orientation:t=`vertical`,...n}){return(0,L.jsx)(Wt,{className:D(`flex touch-none select-none p-px transition-colors`,t===`vertical`&&`h-full w-2.5 border-l border-l-transparent`,t===`horizontal`&&`h-2.5 flex-col border-t border-t-transparent`,e),"data-slot":`scroll-area-scrollbar`,orientation:t,...n,children:(0,L.jsx)($t,{className:`relative flex-1 rounded-full bg-border`,"data-slot":`scroll-area-thumb`})})}function Br(){let e=Me(),{setTheme:t}=at(),{open:n,setOpen:r}=Ur(),i=Lr(),o=I.useCallback(e=>{r(!1),e()},[r]);return(0,L.jsxs)(mt,{modal:!0,onOpenChange:r,open:n,children:[(0,L.jsx)(ut,{placeholder:m()}),(0,L.jsx)(gt,{children:(0,L.jsxs)(Rr,{className:`h-72 pe-1`,type:`hover`,children:[(0,L.jsx)(ht,{children:ue()}),i.navGroups.map(t=>(0,L.jsx)(pt,{heading:t.title,children:t.items.map(t=>t.url?(0,L.jsxs)(F,{onSelect:()=>{o(()=>e({to:t.url}))},value:t.title,children:[(0,L.jsx)(`div`,{className:`flex size-4 items-center justify-center`,children:(0,L.jsx)(mn,{className:`size-2 text-muted-foreground/80`})}),t.title]},t.url):t.items?.map(n=>(0,L.jsxs)(F,{onSelect:()=>{o(()=>e({to:n.url}))},value:`${t.title}-${n.url}`,children:[(0,L.jsx)(`div`,{className:`flex size-4 items-center justify-center`,children:(0,L.jsx)(mn,{className:`size-2 text-muted-foreground/80`})}),t.title,` `,(0,L.jsx)(Xe,{}),` `,n.title]},`${t.title}-${n.url}`)))},t.title)),(0,L.jsx)(dt,{}),(0,L.jsxs)(pt,{heading:s(),children:[(0,L.jsxs)(F,{onSelect:()=>o(()=>t(`light`)),children:[(0,L.jsx)(st,{}),` `,(0,L.jsx)(`span`,{children:C()})]}),(0,L.jsxs)(F,{onSelect:()=>o(()=>t(`dark`)),children:[(0,L.jsx)(ct,{className:`scale-90`}),(0,L.jsx)(`span`,{children:a()})]}),(0,L.jsxs)(F,{onSelect:()=>o(()=>t(`system`)),children:[(0,L.jsx)(yn,{}),(0,L.jsx)(`span`,{children:Ce()})]})]})]})})]})}var Vr=(0,I.createContext)(null);function Hr({children:e}){let[t,n]=(0,I.useState)(!1);return(0,I.useEffect)(()=>{let e=e=>{e.key===`k`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),n(e=>!e))};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[]),(0,L.jsxs)(Vr,{value:{open:t,setOpen:n},children:[e,(0,L.jsx)(Br,{})]})}var Ur=()=>{let e=(0,I.useContext)(Vr);if(!e)throw Error(`useSearch has to be used within SearchProvider`);return e};export{sr as A,_n as B,mr as C,br as D,vr as E,q as F,Dn as I,wn as L,Z as M,Xn as N,yr as O,X as P,xn as R,cr as S,hr as T,hn as V,dr as _,Ir as a,pr as b,Pr as c,jr as d,Ar as f,ar as g,Sr as h,Lr as i,or as j,ir as k,Mr as l,xr as m,Ur as n,Nr as o,Or as p,Rr as r,Fr as s,Hr as t,kr as u,ur as v,_r as w,lr as x,fr as y,vn as z}; \ No newline at end of file diff --git a/src/www/assets/select-CvMpqpz9.js b/src/www/assets/select-CvMpqpz9.js new file mode 100644 index 0000000..6915191 --- /dev/null +++ b/src/www/assets/select-CvMpqpz9.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{r,t as i}from"./dist-DJhZSa1-.js";import{c as a,d as o,i as s}from"./button-D-oR8d6w.js";import{a as c}from"./tooltip-m5xmPGQe.js";import{a as l,n as u,r as d,t as f}from"./dist-DzENW8NP.js";import{i as p}from"./dist-CT2DjA94.js";import{n as m,t as h}from"./dist-oydJxq9L.js";import{n as g}from"./dist-BeVKhAtj.js";import{n as _,t as v}from"./dist-BPKZF5GI.js";import{i as y,n as b,r as x,t as S}from"./es2015-DRmlSfkW.js";import{t as C}from"./dist-QGW08nls.js";import{a as w,i as T,n as E,r as D,t as O}from"./dist-Ck6_E5T6.js";import{r as k}from"./skeleton-gJOqI-7w.js";import{t as A}from"./createLucideIcon-DMX28cCu.js";import{t as j}from"./check-DH6qIczM.js";import{t as M}from"./chevron-down-uSXLUPEl.js";var N=n(e(),1),P=n(r(),1),F=t(),I=[` `,`Enter`,`ArrowUp`,`ArrowDown`],L=[` `,`Enter`],R=`Select`,[z,B,V]=p(R),[H,U]=l(R,[V,w]),W=w(),[G,K]=H(R),[ee,te]=H(R),q=e=>{let{__scopeSelect:t,children:n,open:r,defaultOpen:i,onOpenChange:a,value:o,defaultValue:s,onValueChange:c,dir:l,name:u,autoComplete:d,disabled:p,required:h,form:_}=e,v=W(t),[y,b]=N.useState(null),[x,S]=N.useState(null),[C,w]=N.useState(!1),E=g(l),[D,O]=f({prop:r,defaultProp:i??!1,onChange:a,caller:R}),[k,A]=f({prop:o,defaultProp:s,onChange:c,caller:R}),j=N.useRef(null),M=y?_||!!y.closest(`form`):!0,[P,I]=N.useState(new Set),L=Array.from(P).map(e=>e.props.value).join(`;`);return(0,F.jsx)(T,{...v,children:(0,F.jsxs)(G,{required:h,scope:t,trigger:y,onTriggerChange:b,valueNode:x,onValueNodeChange:S,valueNodeHasChildren:C,onValueNodeHasChildrenChange:w,contentId:m(),value:k,onValueChange:A,open:D,onOpenChange:O,dir:E,triggerPointerDownPosRef:j,disabled:p,children:[(0,F.jsx)(z.Provider,{scope:t,children:(0,F.jsx)(ee,{scope:e.__scopeSelect,onNativeOptionAdd:N.useCallback(e=>{I(t=>new Set(t).add(e))},[]),onNativeOptionRemove:N.useCallback(e=>{I(t=>{let n=new Set(t);return n.delete(e),n})},[]),children:n})}),M?(0,F.jsxs)(We,{"aria-hidden":!0,required:h,tabIndex:-1,name:u,autoComplete:d,value:k,onChange:e=>A(e.target.value),disabled:p,form:_,children:[k===void 0?(0,F.jsx)(`option`,{value:``}):null,Array.from(P)]},L):null]})})};q.displayName=R;var ne=`SelectTrigger`,re=N.forwardRef((e,t)=>{let{__scopeSelect:n,disabled:r=!1,...a}=e,s=W(n),c=K(ne,n),l=c.disabled||r,u=o(t,c.onTriggerChange),f=B(n),p=N.useRef(`touch`),[m,h,g]=Ke(e=>{let t=f().filter(e=>!e.disabled),n=qe(t,e,t.find(e=>e.value===c.value));n!==void 0&&c.onValueChange(n.value)}),_=e=>{l||(c.onOpenChange(!0),g()),e&&(c.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})};return(0,F.jsx)(O,{asChild:!0,...s,children:(0,F.jsx)(i.button,{type:`button`,role:`combobox`,"aria-controls":c.contentId,"aria-expanded":c.open,"aria-required":c.required,"aria-autocomplete":`none`,dir:c.dir,"data-state":c.open?`open`:`closed`,disabled:l,"data-disabled":l?``:void 0,"data-placeholder":Ge(c.value)?``:void 0,...a,ref:u,onClick:d(a.onClick,e=>{e.currentTarget.focus(),p.current!==`mouse`&&_(e)}),onPointerDown:d(a.onPointerDown,e=>{p.current=e.pointerType;let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&e.pointerType===`mouse`&&(_(e),e.preventDefault())}),onKeyDown:d(a.onKeyDown,e=>{let t=m.current!==``;!(e.ctrlKey||e.altKey||e.metaKey)&&e.key.length===1&&h(e.key),!(t&&e.key===` `)&&I.includes(e.key)&&(_(),e.preventDefault())})})})});re.displayName=ne;var J=`SelectValue`,ie=N.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:a,children:s,placeholder:c=``,...l}=e,d=K(J,n),{onValueNodeHasChildrenChange:f}=d,p=s!==void 0,m=o(t,d.onValueNodeChange);return u(()=>{f(p)},[f,p]),(0,F.jsx)(i.span,{...l,ref:m,style:{pointerEvents:`none`},children:Ge(d.value)?(0,F.jsx)(F.Fragment,{children:c}):s})});ie.displayName=J;var ae=`SelectIcon`,oe=N.forwardRef((e,t)=>{let{__scopeSelect:n,children:r,...a}=e;return(0,F.jsx)(i.span,{"aria-hidden":!0,...a,ref:t,children:r||`▼`})});oe.displayName=ae;var se=`SelectPortal`,ce=e=>(0,F.jsx)(v,{asChild:!0,...e});ce.displayName=se;var Y=`SelectContent`,le=N.forwardRef((e,t)=>{let n=K(Y,e.__scopeSelect),[r,i]=N.useState();if(u(()=>{i(new DocumentFragment)},[]),!n.open){let t=r;return t?P.createPortal((0,F.jsx)(ue,{scope:e.__scopeSelect,children:(0,F.jsx)(z.Slot,{scope:e.__scopeSelect,children:(0,F.jsx)(`div`,{children:e.children})})}),t):null}return(0,F.jsx)(pe,{...e,ref:t})});le.displayName=Y;var X=10,[ue,Z]=H(Y),de=`SelectContentImpl`,fe=a(`SelectContent.RemoveScroll`),pe=N.forwardRef((e,t)=>{let{__scopeSelect:n,position:r=`item-aligned`,onCloseAutoFocus:i,onEscapeKeyDown:a,onPointerDownOutside:s,side:c,sideOffset:l,align:u,alignOffset:f,arrowPadding:p,collisionBoundary:m,collisionPadding:h,sticky:g,hideWhenDetached:v,avoidCollisions:C,...w}=e,T=K(Y,n),[E,D]=N.useState(null),[O,k]=N.useState(null),A=o(t,e=>D(e)),[j,M]=N.useState(null),[P,I]=N.useState(null),L=B(n),[R,z]=N.useState(!1),V=N.useRef(!1);N.useEffect(()=>{if(E)return S(E)},[E]),x();let H=N.useCallback(e=>{let[t,...n]=L().map(e=>e.ref.current),[r]=n.slice(-1),i=document.activeElement;for(let n of e)if(n===i||(n?.scrollIntoView({block:`nearest`}),n===t&&O&&(O.scrollTop=0),n===r&&O&&(O.scrollTop=O.scrollHeight),n?.focus(),document.activeElement!==i))return},[L,O]),U=N.useCallback(()=>H([j,E]),[H,j,E]);N.useEffect(()=>{R&&U()},[R,U]);let{onOpenChange:W,triggerPointerDownPosRef:G}=T;N.useEffect(()=>{if(E){let e={x:0,y:0},t=t=>{e={x:Math.abs(Math.round(t.pageX)-(G.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(G.current?.y??0))}},n=n=>{e.x<=10&&e.y<=10?n.preventDefault():E.contains(n.target)||W(!1),document.removeEventListener(`pointermove`,t),G.current=null};return G.current!==null&&(document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n,{capture:!0,once:!0})),()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n,{capture:!0})}}},[E,W,G]),N.useEffect(()=>{let e=()=>W(!1);return window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e)}},[W]);let[ee,te]=Ke(e=>{let t=L().filter(e=>!e.disabled),n=qe(t,e,t.find(e=>e.ref.current===document.activeElement));n&&setTimeout(()=>n.ref.current.focus())}),q=N.useCallback((e,t,n)=>{let r=!V.current&&!n;(T.value!==void 0&&T.value===t||r)&&(M(e),r&&(V.current=!0))},[T.value]),ne=N.useCallback(()=>E?.focus(),[E]),re=N.useCallback((e,t,n)=>{let r=!V.current&&!n;(T.value!==void 0&&T.value===t||r)&&I(e)},[T.value]),J=r===`popper`?_e:he,ie=J===_e?{side:c,sideOffset:l,align:u,alignOffset:f,arrowPadding:p,collisionBoundary:m,collisionPadding:h,sticky:g,hideWhenDetached:v,avoidCollisions:C}:{};return(0,F.jsx)(ue,{scope:n,content:E,viewport:O,onViewportChange:k,itemRefCallback:q,selectedItem:j,onItemLeave:ne,itemTextRefCallback:re,focusSelectedItem:U,selectedItemText:P,position:r,isPositioned:R,searchRef:ee,children:(0,F.jsx)(b,{as:fe,allowPinchZoom:!0,children:(0,F.jsx)(y,{asChild:!0,trapped:T.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:d(i,e=>{T.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,F.jsx)(_,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:a,onPointerDownOutside:s,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>T.onOpenChange(!1),children:(0,F.jsx)(J,{role:`listbox`,id:T.contentId,"data-state":T.open?`open`:`closed`,dir:T.dir,onContextMenu:e=>e.preventDefault(),...w,...ie,onPlaced:()=>z(!0),ref:A,style:{display:`flex`,flexDirection:`column`,outline:`none`,...w.style},onKeyDown:d(w.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if(e.key===`Tab`&&e.preventDefault(),!t&&e.key.length===1&&te(e.key),[`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key)){let t=L().filter(e=>!e.disabled).map(e=>e.ref.current);if([`ArrowUp`,`End`].includes(e.key)&&(t=t.slice().reverse()),[`ArrowUp`,`ArrowDown`].includes(e.key)){let n=e.target,r=t.indexOf(n);t=t.slice(r+1)}setTimeout(()=>H(t)),e.preventDefault()}})})})})})})});pe.displayName=de;var me=`SelectItemAlignedPosition`,he=N.forwardRef((e,t)=>{let{__scopeSelect:n,onPlaced:r,...a}=e,s=K(Y,n),c=Z(Y,n),[l,d]=N.useState(null),[f,p]=N.useState(null),m=o(t,e=>p(e)),h=B(n),g=N.useRef(!1),_=N.useRef(!0),{viewport:v,selectedItem:y,selectedItemText:b,focusSelectedItem:x}=c,S=N.useCallback(()=>{if(s.trigger&&s.valueNode&&l&&f&&v&&y&&b){let e=s.trigger.getBoundingClientRect(),t=f.getBoundingClientRect(),n=s.valueNode.getBoundingClientRect(),i=b.getBoundingClientRect();if(s.dir!==`rtl`){let r=i.left-t.left,a=n.left-r,o=e.left-a,s=e.width+o,c=Math.max(s,t.width),u=window.innerWidth-X,d=k(a,[X,Math.max(X,u-c)]);l.style.minWidth=s+`px`,l.style.left=d+`px`}else{let r=t.right-i.right,a=window.innerWidth-n.right-r,o=window.innerWidth-e.right-a,s=e.width+o,c=Math.max(s,t.width),u=window.innerWidth-X,d=k(a,[X,Math.max(X,u-c)]);l.style.minWidth=s+`px`,l.style.right=d+`px`}let a=h(),o=window.innerHeight-X*2,c=v.scrollHeight,u=window.getComputedStyle(f),d=parseInt(u.borderTopWidth,10),p=parseInt(u.paddingTop,10),m=parseInt(u.borderBottomWidth,10),_=parseInt(u.paddingBottom,10),x=d+p+c+_+m,S=Math.min(y.offsetHeight*5,x),C=window.getComputedStyle(v),w=parseInt(C.paddingTop,10),T=parseInt(C.paddingBottom,10),E=e.top+e.height/2-X,D=o-E,O=y.offsetHeight/2,A=y.offsetTop+O,j=d+p+A,M=x-j;if(j<=E){let e=a.length>0&&y===a[a.length-1].ref.current;l.style.bottom=`0px`;let t=f.clientHeight-v.offsetTop-v.offsetHeight,n=j+Math.max(D,O+(e?T:0)+t+m);l.style.height=n+`px`}else{let e=a.length>0&&y===a[0].ref.current;l.style.top=`0px`;let t=Math.max(E,d+v.offsetTop+(e?w:0)+O)+M;l.style.height=t+`px`,v.scrollTop=j-E+v.offsetTop}l.style.margin=`${X}px 0`,l.style.minHeight=S+`px`,l.style.maxHeight=o+`px`,r?.(),requestAnimationFrame(()=>g.current=!0)}},[h,s.trigger,s.valueNode,l,f,v,y,b,s.dir,r]);u(()=>S(),[S]);let[C,w]=N.useState();return u(()=>{f&&w(window.getComputedStyle(f).zIndex)},[f]),(0,F.jsx)(ve,{scope:n,contentWrapper:l,shouldExpandOnScrollRef:g,onScrollButtonChange:N.useCallback(e=>{e&&_.current===!0&&(S(),x?.(),_.current=!1)},[S,x]),children:(0,F.jsx)(`div`,{ref:d,style:{display:`flex`,flexDirection:`column`,position:`fixed`,zIndex:C},children:(0,F.jsx)(i.div,{...a,ref:m,style:{boxSizing:`border-box`,maxHeight:`100%`,...a.style}})})})});he.displayName=me;var ge=`SelectPopperPosition`,_e=N.forwardRef((e,t)=>{let{__scopeSelect:n,align:r=`start`,collisionPadding:i=X,...a}=e,o=W(n);return(0,F.jsx)(D,{...o,...a,ref:t,align:r,collisionPadding:i,style:{boxSizing:`border-box`,...a.style,"--radix-select-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-select-content-available-width":`var(--radix-popper-available-width)`,"--radix-select-content-available-height":`var(--radix-popper-available-height)`,"--radix-select-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-select-trigger-height":`var(--radix-popper-anchor-height)`}})});_e.displayName=ge;var[ve,ye]=H(Y,{}),be=`SelectViewport`,xe=N.forwardRef((e,t)=>{let{__scopeSelect:n,nonce:r,...a}=e,s=Z(be,n),c=ye(be,n),l=o(t,s.onViewportChange),u=N.useRef(0);return(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`},nonce:r}),(0,F.jsx)(z.Slot,{scope:n,children:(0,F.jsx)(i.div,{"data-radix-select-viewport":``,role:`presentation`,...a,ref:l,style:{position:`relative`,flex:1,overflow:`hidden auto`,...a.style},onScroll:d(a.onScroll,e=>{let t=e.currentTarget,{contentWrapper:n,shouldExpandOnScrollRef:r}=c;if(r?.current&&n){let e=Math.abs(u.current-t.scrollTop);if(e>0){let r=window.innerHeight-X*2,i=parseFloat(n.style.minHeight),a=parseFloat(n.style.height),o=Math.max(i,a);if(o0?s:0,n.style.justifyContent=`flex-end`)}}}u.current=t.scrollTop})})})]})});xe.displayName=be;var Se=`SelectGroup`,[Ce,we]=H(Se),Te=N.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,a=m();return(0,F.jsx)(Ce,{scope:n,id:a,children:(0,F.jsx)(i.div,{role:`group`,"aria-labelledby":a,...r,ref:t})})});Te.displayName=Se;var Ee=`SelectLabel`,De=N.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,a=we(Ee,n);return(0,F.jsx)(i.div,{id:a.id,...r,ref:t})});De.displayName=Ee;var Q=`SelectItem`,[Oe,ke]=H(Q),Ae=N.forwardRef((e,t)=>{let{__scopeSelect:n,value:r,disabled:a=!1,textValue:s,...c}=e,l=K(Q,n),u=Z(Q,n),f=l.value===r,[p,h]=N.useState(s??``),[g,_]=N.useState(!1),v=o(t,e=>u.itemRefCallback?.(e,r,a)),y=m(),b=N.useRef(`touch`),x=()=>{a||(l.onValueChange(r),l.onOpenChange(!1))};if(r===``)throw Error(`A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.`);return(0,F.jsx)(Oe,{scope:n,value:r,disabled:a,textId:y,isSelected:f,onItemTextChange:N.useCallback(e=>{h(t=>t||(e?.textContent??``).trim())},[]),children:(0,F.jsx)(z.ItemSlot,{scope:n,value:r,disabled:a,textValue:p,children:(0,F.jsx)(i.div,{role:`option`,"aria-labelledby":y,"data-highlighted":g?``:void 0,"aria-selected":f&&g,"data-state":f?`checked`:`unchecked`,"aria-disabled":a||void 0,"data-disabled":a?``:void 0,tabIndex:a?void 0:-1,...c,ref:v,onFocus:d(c.onFocus,()=>_(!0)),onBlur:d(c.onBlur,()=>_(!1)),onClick:d(c.onClick,()=>{b.current!==`mouse`&&x()}),onPointerUp:d(c.onPointerUp,()=>{b.current===`mouse`&&x()}),onPointerDown:d(c.onPointerDown,e=>{b.current=e.pointerType}),onPointerMove:d(c.onPointerMove,e=>{b.current=e.pointerType,a?u.onItemLeave?.():b.current===`mouse`&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:d(c.onPointerLeave,e=>{e.currentTarget===document.activeElement&&u.onItemLeave?.()}),onKeyDown:d(c.onKeyDown,e=>{u.searchRef?.current!==``&&e.key===` `||(L.includes(e.key)&&x(),e.key===` `&&e.preventDefault())})})})})});Ae.displayName=Q;var $=`SelectItemText`,je=N.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:a,...s}=e,c=K($,n),l=Z($,n),d=ke($,n),f=te($,n),[p,m]=N.useState(null),h=o(t,e=>m(e),d.onItemTextChange,e=>l.itemTextRefCallback?.(e,d.value,d.disabled)),g=p?.textContent,_=N.useMemo(()=>(0,F.jsx)(`option`,{value:d.value,disabled:d.disabled,children:g},d.value),[d.disabled,d.value,g]),{onNativeOptionAdd:v,onNativeOptionRemove:y}=f;return u(()=>(v(_),()=>y(_)),[v,y,_]),(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(i.span,{id:d.textId,...s,ref:h}),d.isSelected&&c.valueNode&&!c.valueNodeHasChildren?P.createPortal(s.children,c.valueNode):null]})});je.displayName=$;var Me=`SelectItemIndicator`,Ne=N.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return ke(Me,n).isSelected?(0,F.jsx)(i.span,{"aria-hidden":!0,...r,ref:t}):null});Ne.displayName=Me;var Pe=`SelectScrollUpButton`,Fe=N.forwardRef((e,t)=>{let n=Z(Pe,e.__scopeSelect),r=ye(Pe,e.__scopeSelect),[i,a]=N.useState(!1),s=o(t,r.onScrollButtonChange);return u(()=>{if(n.viewport&&n.isPositioned){let e=function(){a(t.scrollTop>0)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,F.jsx)(Re,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop-=t.offsetHeight)}}):null});Fe.displayName=Pe;var Ie=`SelectScrollDownButton`,Le=N.forwardRef((e,t)=>{let n=Z(Ie,e.__scopeSelect),r=ye(Ie,e.__scopeSelect),[i,a]=N.useState(!1),s=o(t,r.onScrollButtonChange);return u(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollHeight-t.clientHeight;a(Math.ceil(t.scrollTop)t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,F.jsx)(Re,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop+=t.offsetHeight)}}):null});Le.displayName=Ie;var Re=N.forwardRef((e,t)=>{let{__scopeSelect:n,onAutoScroll:r,...a}=e,o=Z(`SelectScrollButton`,n),s=N.useRef(null),c=B(n),l=N.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null)},[]);return N.useEffect(()=>()=>l(),[l]),u(()=>{c().find(e=>e.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:`nearest`})},[c]),(0,F.jsx)(i.div,{"aria-hidden":!0,...a,ref:t,style:{flexShrink:0,...a.style},onPointerDown:d(a.onPointerDown,()=>{s.current===null&&(s.current=window.setInterval(r,50))}),onPointerMove:d(a.onPointerMove,()=>{o.onItemLeave?.(),s.current===null&&(s.current=window.setInterval(r,50))}),onPointerLeave:d(a.onPointerLeave,()=>{l()})})}),ze=`SelectSeparator`,Be=N.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return(0,F.jsx)(i.div,{"aria-hidden":!0,...r,ref:t})});Be.displayName=ze;var Ve=`SelectArrow`,He=N.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=W(n),a=K(Ve,n),o=Z(Ve,n);return a.open&&o.position===`popper`?(0,F.jsx)(E,{...i,...r,ref:t}):null});He.displayName=Ve;var Ue=`SelectBubbleInput`,We=N.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{let a=N.useRef(null),s=o(r,a),l=C(t);return N.useEffect(()=>{let e=a.current;if(!e)return;let n=window.HTMLSelectElement.prototype,r=Object.getOwnPropertyDescriptor(n,`value`).set;if(l!==t&&r){let n=new Event(`change`,{bubbles:!0});r.call(e,t),e.dispatchEvent(n)}},[l,t]),(0,F.jsx)(i.select,{...n,style:{...c,...n.style},ref:s,defaultValue:t})});We.displayName=Ue;function Ge(e){return e===``||e===void 0}function Ke(e){let t=h(e),n=N.useRef(``),r=N.useRef(0),i=N.useCallback(e=>{let i=n.current+e;t(i),(function e(t){n.current=t,window.clearTimeout(r.current),t!==``&&(r.current=window.setTimeout(()=>e(``),1e3))})(i)},[t]),a=N.useCallback(()=>{n.current=``,window.clearTimeout(r.current)},[]);return N.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,a]}function qe(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=Je(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.textValue.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Je(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var Ye=q,Xe=re,Ze=ie,Qe=oe,$e=ce,et=le,tt=xe,nt=Ae,rt=je,it=Ne,at=Fe,ot=Le,st=A(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]);function ct({...e}){return(0,F.jsx)(Ye,{"data-slot":`select`,...e})}function lt({...e}){return(0,F.jsx)(Ze,{"data-slot":`select-value`,...e})}function ut({className:e,size:t=`default`,children:n,...r}){return(0,F.jsxs)(Xe,{className:s(`flex w-fit items-center justify-between gap-2 whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs outline-none transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[size=default]:h-9 data-[size=sm]:h-8 data-[placeholder]:text-muted-foreground *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:hover:bg-input/50 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0`,e),"data-size":t,"data-slot":`select-trigger`,...r,children:[n,(0,F.jsx)(Qe,{asChild:!0,children:(0,F.jsx)(M,{className:`size-4 opacity-50`})})]})}function dt({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,F.jsx)($e,{children:(0,F.jsxs)(et,{align:r,className:s(`data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=closed]:animate-out data-[state=open]:animate-in`,n===`popper`&&`data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1`,e),"data-slot":`select-content`,position:n,...i,children:[(0,F.jsx)(pt,{}),(0,F.jsx)(tt,{className:s(`p-1`,n===`popper`&&`h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1`),children:t}),(0,F.jsx)(mt,{})]})})}function ft({className:e,children:t,...n}){return(0,F.jsxs)(nt,{className:s(`relative flex w-full cursor-default select-none items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),"data-slot":`select-item`,...n,children:[(0,F.jsx)(`span`,{className:`absolute right-2 flex size-3.5 items-center justify-center`,"data-slot":`select-item-indicator`,children:(0,F.jsx)(it,{children:(0,F.jsx)(j,{className:`size-4`})})}),(0,F.jsx)(rt,{children:t})]})}function pt({className:e,...t}){return(0,F.jsx)(at,{className:s(`flex cursor-default items-center justify-center py-1`,e),"data-slot":`select-scroll-up-button`,...t,children:(0,F.jsx)(st,{className:`size-4`})})}function mt({className:e,...t}){return(0,F.jsx)(ot,{className:s(`flex cursor-default items-center justify-center py-1`,e),"data-slot":`select-scroll-down-button`,...t,children:(0,F.jsx)(M,{className:`size-4`})})}export{lt as a,ut as i,dt as n,ft as r,ct as t}; \ No newline at end of file diff --git a/src/www/assets/separator-Dw-mNGCy.js b/src/www/assets/separator-Dw-mNGCy.js new file mode 100644 index 0000000..fb38aed --- /dev/null +++ b/src/www/assets/separator-Dw-mNGCy.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{i}from"./button-D-oR8d6w.js";var a=n(e(),1),o=t(),s=`Separator`,c=`horizontal`,l=[`horizontal`,`vertical`],u=a.forwardRef((e,t)=>{let{decorative:n,orientation:i=c,...a}=e,s=d(i)?i:c,l=n?{role:`none`}:{"aria-orientation":s===`vertical`?s:void 0,role:`separator`};return(0,o.jsx)(r.div,{"data-orientation":s,...l,...a,ref:t})});u.displayName=s;function d(e){return l.includes(e)}var f=u;function p({className:e,orientation:t=`horizontal`,decorative:n=!0,...r}){return(0,o.jsx)(f,{className:i(`shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=vertical]:h-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px`,e),"data-slot":`separator`,decorative:n,orientation:t,...r})}export{p as t}; \ No newline at end of file diff --git a/src/www/assets/settings-6Tt8SQ46.js b/src/www/assets/settings-6Tt8SQ46.js new file mode 100644 index 0000000..3934b36 --- /dev/null +++ b/src/www/assets/settings-6Tt8SQ46.js @@ -0,0 +1 @@ +import{$u as e,Bt as t,Ft as n,Gt as r,Ht as i,It as a,Jt as o,Kt as s,Lt as c,Nl as l,Qu as u,Rt as d,Ut as f,Vt as p,Wt as m,Yt as h,nd as g,qt as _,zt as v}from"./messages-BOl-zx8S.js";import{t as y}from"./button-D-oR8d6w.js";import{n as b}from"./dist-BNiRpK39.js";import{c as x,o as S,s as C}from"./zod-DzRgHmfz.js";import{a as w,c as T,i as E,l as D,n as O,o as k,s as A,t as j}from"./form-uKra2bmF.js";import{t as M}from"./input-CZHXycLK.js";import{t as N}from"./page-header-BRM1dngJ.js";import{t as P}from"./textarea-Cp-VCvek.js";import{a as F,i as I,n as L,r as R,t as z}from"./lib-_PocwKaj.js";var B=g(e(),1),V=u(),H=C({checkoutName:x().min(1,o()),logoUrl:x().url(_()).or(S(``)),siteTitle:x().min(1,s()),successCopy:x().min(1,r()),supportUrl:x().url(m()).or(S(``))});function U(){let e=I(`brand`),r=F(),o=D({resolver:T(H),defaultValues:{checkoutName:``,logoUrl:``,siteTitle:``,successCopy:``,supportUrl:``}});(0,B.useEffect)(()=>{let t=e.data?.data;t&&o.reset({checkoutName:z(t,`brand.checkout_name`),logoUrl:z(t,`brand.logo_url`),siteTitle:z(t,`brand.site_title`),successCopy:z(t,`brand.success_copy`),supportUrl:z(t,`brand.support_url`)})},[e.data,o]);let s=R();async function l(){for(let e of[`brand.checkout_name`,`brand.logo_url`,`brand.site_title`,`brand.success_copy`,`brand.support_url`])await s.mutateAsync({params:{path:{key:e}}});b.success(f()),await e.refetch()}async function u(t){await L(r.mutateAsync,[{group:`brand`,key:`brand.checkout_name`,type:`string`,value:t.checkoutName},{group:`brand`,key:`brand.logo_url`,type:`string`,value:t.logoUrl},{group:`brand`,key:`brand.site_title`,type:`string`,value:t.siteTitle},{group:`brand`,key:`brand.success_copy`,type:`string`,value:t.successCopy},{group:`brand`,key:`brand.support_url`,type:`string`,value:t.supportUrl}],i()),await e.refetch()}return(0,V.jsx)(j,{...o,children:(0,V.jsxs)(`form`,{className:`space-y-6`,onSubmit:o.handleSubmit(u),children:[(0,V.jsx)(E,{control:o.control,name:`checkoutName`,render:({field:e})=>(0,V.jsxs)(w,{children:[(0,V.jsx)(k,{children:p()}),(0,V.jsx)(O,{children:(0,V.jsx)(M,{...e})}),(0,V.jsx)(A,{})]})}),(0,V.jsx)(E,{control:o.control,name:`logoUrl`,render:({field:e})=>(0,V.jsxs)(w,{children:[(0,V.jsx)(k,{children:t()}),(0,V.jsx)(O,{children:(0,V.jsx)(M,{...e})}),(0,V.jsx)(A,{})]})}),(0,V.jsx)(E,{control:o.control,name:`siteTitle`,render:({field:e})=>(0,V.jsxs)(w,{children:[(0,V.jsx)(k,{children:v()}),(0,V.jsx)(O,{children:(0,V.jsx)(M,{...e})}),(0,V.jsx)(A,{})]})}),(0,V.jsx)(E,{control:o.control,name:`successCopy`,render:({field:e})=>(0,V.jsxs)(w,{children:[(0,V.jsx)(k,{children:d()}),(0,V.jsx)(O,{children:(0,V.jsx)(P,{...e})}),(0,V.jsx)(A,{})]})}),(0,V.jsx)(E,{control:o.control,name:`supportUrl`,render:({field:e})=>(0,V.jsxs)(w,{children:[(0,V.jsx)(k,{children:c()}),(0,V.jsx)(O,{children:(0,V.jsx)(M,{...e})}),(0,V.jsx)(A,{})]})}),(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[(0,V.jsx)(y,{disabled:r.isPending||e.isLoading,type:`submit`,children:a()}),(0,V.jsx)(y,{disabled:s.isPending,onClick:l,type:`button`,variant:`outline`,children:n()})]})]})})}function W(){return(0,V.jsx)(N,{description:h(),title:l(),variant:`section`,children:(0,V.jsx)(U,{})})}var G=W;export{G as component}; \ No newline at end of file diff --git a/src/www/assets/shield-check-NJ5V92SM.js b/src/www/assets/shield-check-NJ5V92SM.js new file mode 100644 index 0000000..2530b1a --- /dev/null +++ b/src/www/assets/shield-check-NJ5V92SM.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/show-submitted-data-sbgXi_a9.js b/src/www/assets/show-submitted-data-sbgXi_a9.js new file mode 100644 index 0000000..fdabc62 --- /dev/null +++ b/src/www/assets/show-submitted-data-sbgXi_a9.js @@ -0,0 +1 @@ +import{Qu as e}from"./messages-BOl-zx8S.js";import{n as t}from"./dist-BNiRpK39.js";var n=e();function r(e,r=`You submitted the following values:`){t.message(r,{description:(0,n.jsx)(`pre`,{className:`mt-2 w-full overflow-x-auto rounded-md bg-slate-950 p-4`,children:(0,n.jsx)(`code`,{className:`text-white`,children:JSON.stringify(e,null,2)})})})}export{r as t}; \ No newline at end of file diff --git a/src/www/assets/sidebar-nav-eQOCItLO.js b/src/www/assets/sidebar-nav-eQOCItLO.js new file mode 100644 index 0000000..35e9f88 --- /dev/null +++ b/src/www/assets/sidebar-nav-eQOCItLO.js @@ -0,0 +1 @@ +import{D as e,Qu as t}from"./messages-BOl-zx8S.js";import{t as n}from"./link-Du-u9SDI.js";import{t as r}from"./useNavigate-BNrwOhV8.js";import{t as i}from"./useRouterState-Am3soIW6.js";import{r as a}from"./search-provider-D-fTfilE.js";import{i as o,n as s}from"./button-D-oR8d6w.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-CvMpqpz9.js";var p=t();function m({className:t,items:m,...h}){let g=r(),{location:_}=i(),v=m.find(e=>_.pathname===e.href)?.href??m[0]?.href??``;return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`div`,{className:`p-1 md:hidden`,children:(0,p.jsxs)(f,{onValueChange:e=>{g({to:e})},value:v,children:[(0,p.jsx)(l,{className:`h-12 sm:w-48`,children:(0,p.jsx)(c,{placeholder:e()})}),(0,p.jsx)(u,{children:m.map(e=>(0,p.jsx)(d,{value:e.href,children:(0,p.jsxs)(`div`,{className:`flex gap-x-4 px-2 py-1`,children:[(0,p.jsx)(`span`,{className:`scale-125`,children:e.icon}),(0,p.jsx)(`span`,{className:`text-md`,children:e.title})]})},e.href))})]})}),(0,p.jsx)(a,{className:`hidden w-full min-w-40 bg-background px-1 py-2 md:block`,type:`always`,children:(0,p.jsx)(`nav`,{className:o(`flex space-x-2 py-1 lg:flex-col lg:space-x-0 lg:space-y-1`,t),...h,children:m.map(e=>(0,p.jsxs)(n,{activeOptions:{exact:!0},activeProps:{className:o(s({variant:`ghost`}),`justify-start bg-muted hover:bg-accent`)},className:o(s({variant:`ghost`}),`justify-start hover:bg-accent hover:underline`),to:e.href,children:[(0,p.jsx)(`span`,{className:`me-2`,children:e.icon}),e.title]},e.href))})})]})}export{m as t}; \ No newline at end of file diff --git a/src/www/assets/sign-in-D3PxHB7w.js b/src/www/assets/sign-in-D3PxHB7w.js new file mode 100644 index 0000000..cb06382 --- /dev/null +++ b/src/www/assets/sign-in-D3PxHB7w.js @@ -0,0 +1 @@ +import{$c as e,$u as t,Jc as n,Kc as r,Qc as i,Qu as a,Xc as o,Yc as s,Zc as c,cc as l,dc as u,el as d,fc as f,lc as p,mc as m,nd as h,pc as g,qc as _,tl as v,uc as y}from"./messages-BOl-zx8S.js";import{a as b,o as x,r as S}from"./auth-store-D_jr_Pei.js";import{t as C}from"./useSearch-BufLn6Rh.js";import{t as w}from"./useNavigate-BNrwOhV8.js";import{i as T,t as E}from"./button-D-oR8d6w.js";import{t as D}from"./confirm-dialog-DyK21C4Z.js";import{t as O}from"./createLucideIcon-DMX28cCu.js";import{t as k}from"./loader-circle-DQHo9Sp_.js";import{n as A}from"./dist-BNiRpK39.js";import{c as j,s as M}from"./zod-DzRgHmfz.js";import{n as N}from"./auth-animation-context-CciMPPP0.js";import{a as P,c as F,i as I,l as L,n as R,o as z,s as B,t as V}from"./form-uKra2bmF.js";import{t as H}from"./input-CZHXycLK.js";import{t as U}from"./password-input-ZB498Nq4.js";var W=O(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),G=O(`log-in`,[[`path`,{d:`m10 17 5-5-5-5`,key:`1bsop3`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,key:`u53s6r`}]]),K=O(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),q=h(t(),1),J=a(),Y=M({username:j().min(1,s()),password:j().min(1,n())});async function X(e){let t=new TextEncoder().encode(e),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function Z({className:e,redirectTo:t,...n}){let a=w(),{setIsTyping:s,setPasswordLength:d,setShowPassword:h}=N(),v=b.useMutation(`post`,`/admin/api/v1/auth/login`),[C,O]=(0,q.useState)(!1),[j,M]=(0,q.useState)(null),Z=L({resolver:F(Y),defaultValues:{username:``,password:``}});(0,q.useEffect)(()=>()=>{s(!1),d(0),h(!1)},[s,d,h]);async function Q(e){let n=await v.mutateAsync({body:{username:e.username,password:e.password}});if(!n?.data?.token)return;S(n.data.token),A.success(r({username:n.data.username??e.username}));let i=!1;try{let[{data:t},{data:n}]=await Promise.all([x.GET(`/admin/api/v1/auth/me`),x.GET(`/admin/api/v1/auth/init-password-hash`)]),r=!!t?.data?.password_is_default,a=n?.data,o=a?.available&&!a.password_changed&&a.algorithm?.toLowerCase()===`sha256`&&!!a.password_hash;r?i=!0:o&&(i=(await X(e.password)).toLowerCase()===a.password_hash?.toLowerCase())}catch{}let o=t||`/dashboard`;if(i){M(o),O(!0);return}a({to:o,replace:!0})}function $(e){d(e.length)}function ee(){O(!1),a({to:`/account/password`,search:j?{redirect:j}:void 0,replace:!0})}return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(V,{...Z,children:(0,J.jsxs)(`form`,{className:T(`grid gap-3`,e),onSubmit:Z.handleSubmit(Q),...n,children:[(0,J.jsx)(I,{control:Z.control,name:`username`,render:({field:e})=>(0,J.jsxs)(P,{children:[(0,J.jsx)(z,{children:i()}),(0,J.jsx)(R,{children:(0,J.jsx)(H,{placeholder:c(),...e,onBlur:()=>{s(!1),e.onBlur()},onFocus:()=>s(!0)})}),(0,J.jsx)(B,{})]})}),(0,J.jsx)(I,{control:Z.control,name:`password`,render:({field:e})=>(0,J.jsxs)(P,{children:[(0,J.jsx)(z,{children:o()}),(0,J.jsx)(R,{children:(0,J.jsx)(U,{placeholder:`********`,...e,onBlur:()=>{s(!1),e.onBlur()},onChange:t=>{$(t.target.value),e.onChange(t)},onFocus:()=>s(!0),onVisibilityChange:h})}),(0,J.jsx)(B,{})]})}),(0,J.jsxs)(E,{className:`mt-2`,disabled:v.isPending,children:[v.isPending?(0,J.jsx)(k,{className:`animate-spin`}):(0,J.jsx)(G,{}),_()]})]})}),(0,J.jsx)(D,{className:`sm:max-w-xl`,confirmText:g(),desc:(0,J.jsxs)(`div`,{className:`space-y-4`,children:[(0,J.jsxs)(`div`,{className:`flex items-start gap-3 rounded-xl border border-amber-500/20 bg-amber-500/5 p-4`,children:[(0,J.jsx)(`div`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg bg-amber-500/12 text-amber-600 dark:text-amber-400`,children:(0,J.jsx)(K,{className:`size-4.5`})}),(0,J.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,J.jsx)(`p`,{className:`font-medium text-foreground text-sm`,children:f()}),(0,J.jsx)(`p`,{className:`text-muted-foreground text-sm leading-6`,children:u()})]})]}),(0,J.jsxs)(`div`,{className:`rounded-xl border bg-muted/20 p-4 text-muted-foreground text-sm leading-6`,children:[(0,J.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 font-medium text-foreground`,children:[(0,J.jsx)(W,{className:`size-4`}),y()]}),(0,J.jsxs)(`ul`,{className:`list-disc space-y-1 pl-5`,children:[(0,J.jsx)(`li`,{children:p()}),(0,J.jsx)(`li`,{children:l()})]})]})]}),handleConfirm:ee,onOpenChange:O,open:C,title:m()})]})}function Q(){let{redirect:t}=C({from:`/(auth)/sign-in`});return(0,J.jsxs)(`div`,{className:`w-full space-y-6`,children:[(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(`p`,{className:`font-medium text-primary text-sm`,children:v()}),(0,J.jsx)(`h2`,{className:`font-semibold text-3xl tracking-tight`,children:d()}),(0,J.jsx)(`p`,{className:`text-muted-foreground leading-6`,children:e()})]}),(0,J.jsx)(Z,{redirectTo:t})]})}var $=Q;export{$ as component}; \ No newline at end of file diff --git a/src/www/assets/skeleton-gJOqI-7w.js b/src/www/assets/skeleton-gJOqI-7w.js new file mode 100644 index 0000000..2489162 --- /dev/null +++ b/src/www/assets/skeleton-gJOqI-7w.js @@ -0,0 +1 @@ +import{Qu as e}from"./messages-BOl-zx8S.js";import{i as t}from"./button-D-oR8d6w.js";import{t as n}from"./createLucideIcon-DMX28cCu.js";function r(e,[t,n]){return Math.min(n,Math.max(t,e))}var i=n(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),a=e();function o({className:e,...n}){return(0,a.jsx)(`div`,{className:t(`animate-pulse rounded-md bg-accent`,e),"data-slot":`skeleton`,...n})}export{i as n,r,o as t}; \ No newline at end of file diff --git a/src/www/assets/switch-m0XBbPWc.js b/src/www/assets/switch-m0XBbPWc.js new file mode 100644 index 0000000..3dd7d9a --- /dev/null +++ b/src/www/assets/switch-m0XBbPWc.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{d as i,i as a}from"./button-D-oR8d6w.js";import{a as o,r as s,t as c}from"./dist-DzENW8NP.js";import{t as l}from"./dist-QGW08nls.js";import{t as u}from"./dist-Bh3bGrZa.js";var d=n(e(),1),f=t(),p=`Switch`,[m,h]=o(p),[g,_]=m(p),v=d.forwardRef((e,t)=>{let{__scopeSwitch:n,name:a,checked:o,defaultChecked:l,required:u,disabled:m,value:h=`on`,onCheckedChange:_,form:v,...y}=e,[b,x]=d.useState(null),w=i(t,e=>x(e)),T=d.useRef(!1),E=b?v||!!b.closest(`form`):!0,[D,O]=c({prop:o,defaultProp:l??!1,onChange:_,caller:p});return(0,f.jsxs)(g,{scope:n,checked:D,disabled:m,children:[(0,f.jsx)(r.button,{type:`button`,role:`switch`,"aria-checked":D,"aria-required":u,"data-state":C(D),"data-disabled":m?``:void 0,disabled:m,value:h,...y,ref:w,onClick:s(e.onClick,e=>{O(e=>!e),E&&(T.current=e.isPropagationStopped(),T.current||e.stopPropagation())})}),E&&(0,f.jsx)(S,{control:b,bubbles:!T.current,name:a,value:h,checked:D,required:u,disabled:m,form:v,style:{transform:`translateX(-100%)`}})]})});v.displayName=p;var y=`SwitchThumb`,b=d.forwardRef((e,t)=>{let{__scopeSwitch:n,...i}=e,a=_(y,n);return(0,f.jsx)(r.span,{"data-state":C(a.checked),"data-disabled":a.disabled?``:void 0,...i,ref:t})});b.displayName=y;var x=`SwitchBubbleInput`,S=d.forwardRef(({__scopeSwitch:e,control:t,checked:n,bubbles:r=!0,...a},o)=>{let s=d.useRef(null),c=i(s,o),p=l(n),m=u(t);return d.useEffect(()=>{let e=s.current;if(!e)return;let t=window.HTMLInputElement.prototype,i=Object.getOwnPropertyDescriptor(t,`checked`).set;if(p!==n&&i){let t=new Event(`click`,{bubbles:r});i.call(e,n),e.dispatchEvent(t)}},[p,n,r]),(0,f.jsx)(`input`,{type:`checkbox`,"aria-hidden":!0,defaultChecked:n,...a,tabIndex:-1,ref:c,style:{...a.style,...m,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0}})});S.displayName=x;function C(e){return e?`checked`:`unchecked`}var w=v,T=b;function E({className:e,size:t=`default`,...n}){return(0,f.jsx)(w,{className:a(`peer group/switch inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs outline-none transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=sm]:h-3.5 data-[size=default]:w-8 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80`,e),"data-size":t,"data-slot":`switch`,...n,children:(0,f.jsx)(T,{className:a(`pointer-events-none block rounded-full bg-background ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground`),"data-slot":`switch-thumb`})})}export{E as t}; \ No newline at end of file diff --git a/src/www/assets/telegram-BpeS2gK_.js b/src/www/assets/telegram-BpeS2gK_.js new file mode 100644 index 0000000..2be6c96 --- /dev/null +++ b/src/www/assets/telegram-BpeS2gK_.js @@ -0,0 +1 @@ +import{$u as e,At as t,Dt as n,Et as r,Ml as i,Mt as a,Nt as o,Ot as s,Pt as c,Qu as l,jt as u,kt as d,nd as f}from"./messages-BOl-zx8S.js";import{t as p}from"./button-D-oR8d6w.js";import{t as m}from"./switch-m0XBbPWc.js";import{a as h,c as g,s as _}from"./zod-DzRgHmfz.js";import{a as v,c as y,i as b,l as x,n as S,o as C,s as w,t as T}from"./form-uKra2bmF.js";import{t as E}from"./input-CZHXycLK.js";import{t as D}from"./page-header-BRM1dngJ.js";import{a as O,i as k,n as A,t as j}from"./lib-_PocwKaj.js";var M=f(e(),1),N=l(),P=_({botToken:g().min(1,o()),chatId:g().min(1,a()),paymentNoticeEnabled:h(),abnormalNoticeEnabled:h()});function F(){let e=k(`system`),i=O(),a=x({resolver:y(P),defaultValues:{botToken:``,chatId:``,paymentNoticeEnabled:!1,abnormalNoticeEnabled:!1}});(0,M.useEffect)(()=>{let t=e.data?.data;t&&a.reset({botToken:j(t,`system.telegram_bot_token`),chatId:j(t,`system.telegram_chat_id`),paymentNoticeEnabled:j(t,`system.telegram_payment_notice_enabled`)===`true`,abnormalNoticeEnabled:j(t,`system.telegram_abnormal_notice_enabled`)===`true`})},[e.data,a]);async function o(t){await A(i.mutateAsync,[{group:`system`,key:`system.telegram_bot_token`,type:`string`,value:t.botToken},{group:`system`,key:`system.telegram_chat_id`,type:`string`,value:t.chatId},{group:`system`,key:`system.telegram_payment_notice_enabled`,type:`bool`,value:String(t.paymentNoticeEnabled)},{group:`system`,key:`system.telegram_abnormal_notice_enabled`,type:`bool`,value:String(t.abnormalNoticeEnabled)}],u()),await e.refetch()}return(0,N.jsx)(T,{...a,children:(0,N.jsxs)(`form`,{className:`space-y-6`,onSubmit:a.handleSubmit(o),children:[(0,N.jsx)(b,{control:a.control,name:`botToken`,render:({field:e})=>(0,N.jsxs)(v,{children:[(0,N.jsx)(C,{children:t()}),(0,N.jsx)(S,{children:(0,N.jsx)(E,{...e})}),(0,N.jsx)(w,{})]})}),(0,N.jsx)(b,{control:a.control,name:`chatId`,render:({field:e})=>(0,N.jsxs)(v,{children:[(0,N.jsx)(C,{children:d()}),(0,N.jsx)(S,{children:(0,N.jsx)(E,{...e})}),(0,N.jsx)(w,{})]})}),(0,N.jsx)(b,{control:a.control,name:`paymentNoticeEnabled`,render:({field:e})=>(0,N.jsxs)(v,{className:`flex items-center justify-between rounded-lg border p-3`,children:[(0,N.jsx)(C,{children:s()}),(0,N.jsx)(S,{children:(0,N.jsx)(m,{checked:e.value,onCheckedChange:e.onChange})})]})}),(0,N.jsx)(b,{control:a.control,name:`abnormalNoticeEnabled`,render:({field:e})=>(0,N.jsxs)(v,{className:`flex items-center justify-between rounded-lg border p-3`,children:[(0,N.jsx)(C,{children:n()}),(0,N.jsx)(S,{children:(0,N.jsx)(m,{checked:e.value,onCheckedChange:e.onChange})})]})}),(0,N.jsx)(p,{disabled:i.isPending||e.isLoading,type:`submit`,children:r()})]})})}function I(){return(0,N.jsx)(D,{description:c(),title:i(),variant:`section`,children:(0,N.jsx)(F,{})})}var L=I;export{L as component}; \ No newline at end of file diff --git a/src/www/assets/telescope-CH8QonjS.js b/src/www/assets/telescope-CH8QonjS.js new file mode 100644 index 0000000..e6c0c75 --- /dev/null +++ b/src/www/assets/telescope-CH8QonjS.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`telescope`,[[`path`,{d:`m10.065 12.493-6.18 1.318a.934.934 0 0 1-1.108-.702l-.537-2.15a1.07 1.07 0 0 1 .691-1.265l13.504-4.44`,key:`k4qptu`}],[`path`,{d:`m13.56 11.747 4.332-.924`,key:`19l80z`}],[`path`,{d:`m16 21-3.105-6.21`,key:`7oh9d`}],[`path`,{d:`M16.485 5.94a2 2 0 0 1 1.455-2.425l1.09-.272a1 1 0 0 1 1.212.727l1.515 6.06a1 1 0 0 1-.727 1.213l-1.09.272a2 2 0 0 1-2.425-1.455z`,key:`m7xp4m`}],[`path`,{d:`m6.158 8.633 1.114 4.456`,key:`74o979`}],[`path`,{d:`m8 21 3.105-6.21`,key:`1fvxut`}],[`circle`,{cx:`12`,cy:`13`,r:`2`,key:`1c1ljs`}]]);export{t}; \ No newline at end of file diff --git a/src/www/assets/textarea-Cp-VCvek.js b/src/www/assets/textarea-Cp-VCvek.js new file mode 100644 index 0000000..91a501e --- /dev/null +++ b/src/www/assets/textarea-Cp-VCvek.js @@ -0,0 +1 @@ +import{Qu as e}from"./messages-BOl-zx8S.js";import{i as t}from"./button-D-oR8d6w.js";var n=e();function r({className:e,...r}){return(0,n.jsx)(`textarea`,{className:t(`field-sizing-content flex min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs outline-none transition-[color,box-shadow] placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40`,e),"data-slot":`textarea`,...r})}export{r as t}; \ No newline at end of file diff --git a/src/www/assets/theme-provider-Dmxgp34D.js b/src/www/assets/theme-provider-Dmxgp34D.js new file mode 100644 index 0000000..81303d2 --- /dev/null +++ b/src/www/assets/theme-provider-Dmxgp34D.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{n as r,r as i,t as a}from"./cookies-D0aVbsDr.js";var o=n(e(),1),s=t(),c=`system`,l=`theme`,u=3600*24*365,d=(0,o.createContext)({defaultTheme:c,resolvedTheme:`light`,theme:c,setTheme:()=>null,resetTheme:()=>null});function f({children:e,defaultTheme:t=c,storageKey:n=l,...f}){let[p,m]=(0,o.useState)(()=>a(n)||t),h=(0,o.useMemo)(()=>p===`system`?window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:p,[p]);return(0,o.useEffect)(()=>{let e=window.document.documentElement,t=window.matchMedia(`(prefers-color-scheme: dark)`),n=t=>{e.dataset.mode=t,e.style.colorScheme=t},r=()=>{p===`system`&&n(t.matches?`dark`:`light`)};return n(h),t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[p,h]),(0,s.jsx)(d,{value:{defaultTheme:t,resolvedTheme:h,resetTheme:()=>{r(n),m(c)},theme:p,setTheme:e=>{i(n,e,u),m(e)}},...f,children:e})}var p=()=>{let e=(0,o.useContext)(d);if(!e)throw Error(`useTheme must be used within a ThemeProvider`);return e};export{p as n,f as t}; \ No newline at end of file diff --git a/src/www/assets/theme-switch-BVGTp-bE.js b/src/www/assets/theme-switch-BVGTp-bE.js new file mode 100644 index 0000000..cfe9674 --- /dev/null +++ b/src/www/assets/theme-switch-BVGTp-bE.js @@ -0,0 +1 @@ +import{$u as e,Bu as t,Hu as n,Lu as r,Qu as i,Vu as a,Xu as o,Yu as s,Zu as c,nd as l,zu as u}from"./messages-BOl-zx8S.js";import{t as d}from"./useNavigate-BNrwOhV8.js";import{i as f,t as p}from"./button-D-oR8d6w.js";import{a as m,l as h,r as g,t as _}from"./dropdown-menu-HbmfecEg.js";import{n as v}from"./theme-provider-Dmxgp34D.js";import{t as y}from"./createLucideIcon-DMX28cCu.js";import{t as b}from"./check-DH6qIczM.js";import{n as x,r as S}from"./logo-BVdckS6R.js";var C=y(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),w=i(),T={"en-US":`English`,"zh-CN":`简体中文`,"zh-TW":`繁體中文`};function E(){let e=d(),t=s(),n=n=>{n!==t&&(c(n,{reload:!1}),e({to:`.`,replace:!0,reloadDocument:!0}))};return(0,w.jsxs)(_,{modal:!1,children:[(0,w.jsx)(h,{asChild:!0,children:(0,w.jsxs)(p,{className:`scale-95 rounded-full`,size:`icon`,variant:`ghost`,children:[(0,w.jsx)(C,{className:`size-[1.2rem]`}),(0,w.jsx)(`span`,{className:`sr-only`,children:r()})]})}),(0,w.jsx)(g,{align:`end`,children:o.map(e=>(0,w.jsxs)(m,{onClick:()=>n(e),children:[T[e]??e,(0,w.jsx)(b,{className:f(`ms-auto`,t!==e&&`hidden`),size:14})]},e))})]})}var D=l(e(),1);function O(){let{theme:e,setTheme:r}=v();return(0,D.useEffect)(()=>{let t=e===`dark`?`#020817`:`#fff`,n=document.querySelector(`meta[name='theme-color']`);n&&n.setAttribute(`content`,t)},[e]),(0,w.jsxs)(_,{modal:!1,children:[(0,w.jsx)(h,{asChild:!0,children:(0,w.jsxs)(p,{className:`scale-95 rounded-full`,size:`icon`,variant:`ghost`,children:[(0,w.jsx)(x,{className:`size-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0`}),(0,w.jsx)(S,{className:`absolute size-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100`}),(0,w.jsx)(`span`,{className:`sr-only`,children:n()})]})}),(0,w.jsxs)(g,{align:`end`,children:[(0,w.jsxs)(m,{onClick:()=>r(`light`),children:[a(),` `,(0,w.jsx)(b,{className:f(`ms-auto`,e!==`light`&&`hidden`),size:14})]}),(0,w.jsxs)(m,{onClick:()=>r(`dark`),children:[t(),(0,w.jsx)(b,{className:f(`ms-auto`,e!==`dark`&&`hidden`),size:14})]}),(0,w.jsxs)(m,{onClick:()=>r(`system`),children:[u(),(0,w.jsx)(b,{className:f(`ms-auto`,e!==`system`&&`hidden`),size:14})]})]})]})}export{E as n,O as t}; \ No newline at end of file diff --git a/src/www/assets/tooltip-m5xmPGQe.js b/src/www/assets/tooltip-m5xmPGQe.js new file mode 100644 index 0000000..b9c5e72 --- /dev/null +++ b/src/www/assets/tooltip-m5xmPGQe.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-DJhZSa1-.js";import{d as i,i as a,l as o}from"./button-D-oR8d6w.js";import{a as s,r as c,t as l}from"./dist-DzENW8NP.js";import{t as u}from"./dist-BZg_Jfik.js";import{n as d}from"./dist-oydJxq9L.js";import{n as f,t as p}from"./dist-BPKZF5GI.js";import{a as m,i as h,n as g,r as _,t as v}from"./dist-Ck6_E5T6.js";var y=n(e(),1),b=t(),x=Object.freeze({position:`absolute`,border:0,width:1,height:1,padding:0,margin:-1,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,wordWrap:`normal`}),S=`VisuallyHidden`,C=y.forwardRef((e,t)=>(0,b.jsx)(r.span,{...e,ref:t,style:{...x,...e.style}}));C.displayName=S;var w=C,[T,E]=s(`Tooltip`,[m]),D=m(),O=`TooltipProvider`,k=700,A=`tooltip.open`,[j,M]=T(O),N=e=>{let{__scopeTooltip:t,delayDuration:n=k,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=y.useRef(!0),s=y.useRef(!1),c=y.useRef(0);return y.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,b.jsx)(j,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:y.useCallback(()=>{window.clearTimeout(c.current),o.current=!1},[]),onClose:y.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:y.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})};N.displayName=O;var P=`Tooltip`,[F,I]=T(P),L=e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,c=M(P,e.__scopeTooltip),u=D(t),[f,p]=y.useState(null),m=d(),g=y.useRef(0),_=o??c.disableHoverableContent,v=s??c.delayDuration,x=y.useRef(!1),[S,C]=l({prop:r,defaultProp:i??!1,onChange:e=>{e?(c.onOpen(),document.dispatchEvent(new CustomEvent(A))):c.onClose(),a?.(e)},caller:P}),w=y.useMemo(()=>S?x.current?`delayed-open`:`instant-open`:`closed`,[S]),T=y.useCallback(()=>{window.clearTimeout(g.current),g.current=0,x.current=!1,C(!0)},[C]),E=y.useCallback(()=>{window.clearTimeout(g.current),g.current=0,C(!1)},[C]),O=y.useCallback(()=>{window.clearTimeout(g.current),g.current=window.setTimeout(()=>{x.current=!0,C(!0),g.current=0},v)},[v,C]);return y.useEffect(()=>()=>{g.current&&=(window.clearTimeout(g.current),0)},[]),(0,b.jsx)(h,{...u,children:(0,b.jsx)(F,{scope:t,contentId:m,open:S,stateAttribute:w,trigger:f,onTriggerChange:p,onTriggerEnter:y.useCallback(()=>{c.isOpenDelayedRef.current?O():T()},[c.isOpenDelayedRef,O,T]),onTriggerLeave:y.useCallback(()=>{_?E():(window.clearTimeout(g.current),g.current=0)},[E,_]),onOpen:T,onClose:E,disableHoverableContent:_,children:n})})};L.displayName=P;var R=`TooltipTrigger`,z=y.forwardRef((e,t)=>{let{__scopeTooltip:n,...a}=e,o=I(R,n),s=M(R,n),l=D(n),u=i(t,y.useRef(null),o.onTriggerChange),d=y.useRef(!1),f=y.useRef(!1),p=y.useCallback(()=>d.current=!1,[]);return y.useEffect(()=>()=>document.removeEventListener(`pointerup`,p),[p]),(0,b.jsx)(v,{asChild:!0,...l,children:(0,b.jsx)(r.button,{"aria-describedby":o.open?o.contentId:void 0,"data-state":o.stateAttribute,...a,ref:u,onPointerMove:c(e.onPointerMove,e=>{e.pointerType!==`touch`&&!f.current&&!s.isPointerInTransitRef.current&&(o.onTriggerEnter(),f.current=!0)}),onPointerLeave:c(e.onPointerLeave,()=>{o.onTriggerLeave(),f.current=!1}),onPointerDown:c(e.onPointerDown,()=>{o.open&&o.onClose(),d.current=!0,document.addEventListener(`pointerup`,p,{once:!0})}),onFocus:c(e.onFocus,()=>{d.current||o.onOpen()}),onBlur:c(e.onBlur,o.onClose),onClick:c(e.onClick,o.onClose)})})});z.displayName=R;var B=`TooltipPortal`,[V,H]=T(B,{forceMount:void 0}),U=e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=I(B,t);return(0,b.jsx)(V,{scope:t,forceMount:n,children:(0,b.jsx)(u,{present:n||a.open,children:(0,b.jsx)(p,{asChild:!0,container:i,children:r})})})};U.displayName=B;var W=`TooltipContent`,G=y.forwardRef((e,t)=>{let n=H(W,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=I(W,e.__scopeTooltip);return(0,b.jsx)(u,{present:r||o.open,children:o.disableHoverableContent?(0,b.jsx)(X,{side:i,...a,ref:t}):(0,b.jsx)(K,{side:i,...a,ref:t})})}),K=y.forwardRef((e,t)=>{let n=I(W,e.__scopeTooltip),r=M(W,e.__scopeTooltip),a=y.useRef(null),o=i(t,a),[s,c]=y.useState(null),{trigger:l,onClose:u}=n,d=a.current,{onPointerInTransitChange:f}=r,p=y.useCallback(()=>{c(null),f(!1)},[f]),m=y.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=ee(r,$(r,n.getBoundingClientRect())),a=te(t.getBoundingClientRect());c(re([...i,...a])),f(!0)},[f]);return y.useEffect(()=>()=>p(),[p]),y.useEffect(()=>{if(l&&d){let e=e=>m(e,d),t=e=>m(e,l);return l.addEventListener(`pointerleave`,e),d.addEventListener(`pointerleave`,t),()=>{l.removeEventListener(`pointerleave`,e),d.removeEventListener(`pointerleave`,t)}}},[l,d,m,p]),y.useEffect(()=>{if(s){let e=e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=l?.contains(t)||d?.contains(t),i=!ne(n,s);r?p():i&&(p(),u())};return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[l,d,s,u,p]),(0,b.jsx)(X,{...e,ref:o})}),[q,J]=T(P,{isInside:!1}),Y=o(`TooltipContent`),X=y.forwardRef((e,t)=>{let{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:a,onPointerDownOutside:o,...s}=e,c=I(W,n),l=D(n),{onClose:u}=c;return y.useEffect(()=>(document.addEventListener(A,u),()=>document.removeEventListener(A,u)),[u]),y.useEffect(()=>{if(c.trigger){let e=e=>{e.target?.contains(c.trigger)&&u()};return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[c.trigger,u]),(0,b.jsx)(f,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:u,children:(0,b.jsxs)(_,{"data-state":c.stateAttribute,...l,...s,ref:t,style:{...s.style,"--radix-tooltip-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-tooltip-content-available-width":`var(--radix-popper-available-width)`,"--radix-tooltip-content-available-height":`var(--radix-popper-available-height)`,"--radix-tooltip-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-tooltip-trigger-height":`var(--radix-popper-anchor-height)`},children:[(0,b.jsx)(Y,{children:r}),(0,b.jsx)(q,{scope:n,isInside:!0,children:(0,b.jsx)(w,{id:c.contentId,role:`tooltip`,children:i||r})})]})})});G.displayName=W;var Z=`TooltipArrow`,Q=y.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=D(n);return J(Z,n).isInside?null:(0,b.jsx)(g,{...i,...r,ref:t})});Q.displayName=Z;function $(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}function ee(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function te(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}function ne(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;er!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function re(e){let t=e.slice();return t.sort((e,t)=>e.xt.x?1:e.yt.y)),ie(t)}function ie(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n=2;){let e=t[t.length-1],n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n[n.length-1],t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var ae=N,oe=L,se=z,ce=U,le=G,ue=Q;function de({delayDuration:e=0,...t}){return(0,b.jsx)(ae,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function fe({...e}){return(0,b.jsx)(oe,{"data-slot":`tooltip`,...e})}function pe({...e}){return(0,b.jsx)(se,{"data-slot":`tooltip-trigger`,...e})}function me({className:e,sideOffset:t=0,children:n,...r}){return(0,b.jsx)(ce,{children:(0,b.jsxs)(le,{className:a(`fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in text-balance rounded-md bg-foreground px-3 py-1.5 text-background text-xs data-[state=closed]:animate-out`,e),"data-slot":`tooltip-content`,sideOffset:t,...r,children:[n,(0,b.jsx)(ue,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}export{x as a,pe as i,me as n,de as r,fe as t}; \ No newline at end of file diff --git a/src/www/assets/trash-2-CaT-Drvx.js b/src/www/assets/trash-2-CaT-Drvx.js new file mode 100644 index 0000000..9efec88 --- /dev/null +++ b/src/www/assets/trash-2-CaT-Drvx.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-DMX28cCu.js";var t=e(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),n=e(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t as n,n as t}; \ No newline at end of file diff --git a/src/www/assets/unauthorized-error-9CwofmD6.js b/src/www/assets/unauthorized-error-9CwofmD6.js new file mode 100644 index 0000000..54f439f --- /dev/null +++ b/src/www/assets/unauthorized-error-9CwofmD6.js @@ -0,0 +1 @@ +import{Qu as e,_ as t,al as n,il as r,v as i,y as a}from"./messages-BOl-zx8S.js";import{t as o}from"./useRouter-DS97kuA5.js";import{t as s}from"./useNavigate-BNrwOhV8.js";import{t as c}from"./button-D-oR8d6w.js";var l=e();function u(){let e=s(),{history:u}=o();return(0,l.jsx)(`div`,{className:`h-svh`,children:(0,l.jsxs)(`div`,{className:`m-auto flex h-full w-full flex-col items-center justify-center gap-2`,children:[(0,l.jsx)(`h1`,{className:`font-bold text-[7rem] leading-tight`,children:`401`}),(0,l.jsx)(`span`,{className:`font-medium`,children:a()}),(0,l.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[i(),` `,(0,l.jsx)(`br`,{}),t()]}),(0,l.jsxs)(`div`,{className:`mt-6 flex gap-4`,children:[(0,l.jsx)(c,{onClick:()=>u.go(-1),variant:`outline`,children:n()}),(0,l.jsx)(c,{onClick:()=>e({to:`/dashboard`}),children:r()})]})]})})}export{u as t}; \ No newline at end of file diff --git a/src/www/assets/use-table-url-state-BYcGNz1q.js b/src/www/assets/use-table-url-state-BYcGNz1q.js new file mode 100644 index 0000000..3dd7e50 --- /dev/null +++ b/src/www/assets/use-table-url-state-BYcGNz1q.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";var n=t(e(),1);function r(e,t){let n={};for(let r of e){let e=t.find(e=>e.id===r.columnId),i=r.serialize??(e=>e);if(r.type===`string`){let t=typeof e?.value==`string`?e.value:``;n[r.searchKey]=t.trim()===``?void 0:i(t)}else{let t=Array.isArray(e?.value)?e.value:[];n[r.searchKey]=t.length>0?i(t):void 0}}return n}function i(e){let{search:t,navigate:i,pagination:a,globalFilter:o,columnFilters:s=[]}=e,c=a?.pageKey??`page`,l=a?.pageSizeKey??`pageSize`,u=a?.defaultPage??1,d=a?.defaultPageSize??10,f=o?.key??`filter`,p=o?.enabled??!0,m=o?.trim??!0,[h,g]=(0,n.useState)((0,n.useMemo)(()=>{let e=[];for(let n of s){let r=t[n.searchKey],i=n.deserialize??(e=>e);if(n.type===`string`){let t=i(r)??``;typeof t==`string`&&t.trim()!==``&&e.push({id:n.columnId,value:t})}else{let t=i(r)??[];Array.isArray(t)&&t.length>0&&e.push({id:n.columnId,value:t})}}return e},[s,t])),_=(0,n.useMemo)(()=>{let e=t[c],n=t[l],r=typeof e==`number`?e:u,i=typeof n==`number`?n:d;return{pageIndex:Math.max(0,r-1),pageSize:i}},[t,c,l,u,d]),v=e=>{let t=typeof e==`function`?e(_):e,n=t.pageIndex+1,r=t.pageSize;i({search:e=>({...e,[c]:n<=u?void 0:n,[l]:r===d?void 0:r})})},[y,b]=(0,n.useState)(()=>{if(!p)return;let e=t[f];return typeof e==`string`?e:``});return{globalFilter:p?y??``:void 0,onGlobalFilterChange:p?e=>{let t=typeof e==`function`?e(y??``):e,n=m?t.trim():t;b(n),i({search:e=>({...e,[c]:void 0,[f]:n||void 0})})}:void 0,columnFilters:h,onColumnFiltersChange:e=>{let t=typeof e==`function`?e(h):e;g(t);let n=r(s,t);i({search:e=>({...e,[c]:void 0,...n})})},pagination:_,onPaginationChange:v,ensurePageInRange:(e,n={resetTo:`first`})=>{let r=t[c];e>0&&(typeof r==`number`?r:u)>e&&i({replace:!0,search:t=>({...t,[c]:n.resetTo===`last`?e:void 0})})}}}export{i as t}; \ No newline at end of file diff --git a/src/www/assets/useNavigate-BNrwOhV8.js b/src/www/assets/useNavigate-BNrwOhV8.js new file mode 100644 index 0000000..f87e369 --- /dev/null +++ b/src/www/assets/useNavigate-BNrwOhV8.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";import{t as n}from"./useRouter-DS97kuA5.js";var r=t(e(),1);function i(e){let t=n();return r.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}export{i as t}; \ No newline at end of file diff --git a/src/www/assets/useRouter-DS97kuA5.js b/src/www/assets/useRouter-DS97kuA5.js new file mode 100644 index 0000000..6e8034a --- /dev/null +++ b/src/www/assets/useRouter-DS97kuA5.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";var n=t(e(),1),r=n.use,i=typeof window<`u`?n.useLayoutEffect:n.useEffect;function a(e){let t=n.useRef({value:e,prev:null}),r=t.current.value;return e!==r&&(t.current={value:e,prev:r}),t.current.prev}function o(e,t,r={},i={}){n.useEffect(()=>{if(!e.current||i.disabled||typeof IntersectionObserver!=`function`)return;let n=new IntersectionObserver(([e])=>{t(e)},r);return n.observe(e.current),()=>{n.disconnect()}},[t,r,i.disabled,e])}function s(e){let t=n.useRef(null);return n.useImperativeHandle(e,()=>t.current,[]),t}var c=n.createContext(null);function l(e){return n.useContext(c)}export{o as a,s as i,c as n,i as o,r,a as s,l as t}; \ No newline at end of file diff --git a/src/www/assets/useRouterState-Am3soIW6.js b/src/www/assets/useRouterState-Am3soIW6.js new file mode 100644 index 0000000..26c8c32 --- /dev/null +++ b/src/www/assets/useRouterState-Am3soIW6.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";import{t as n}from"./useRouter-DS97kuA5.js";import{g as r,t as i}from"./useStore-pgHsvR0E.js";var a=t(e(),1);function o(e){let t=n({warn:e?.router===void 0}),o=e?.router||t,s=(0,a.useRef)(void 0);return i(o.stores.__store,t=>{if(e?.select){if(e.structuralSharing??o.options.defaultStructuralSharing){let n=r(s.current,e.select(t));return s.current=n,n}return e.select(t)}return t})}export{o as t}; \ No newline at end of file diff --git a/src/www/assets/useSearch-BufLn6Rh.js b/src/www/assets/useSearch-BufLn6Rh.js new file mode 100644 index 0000000..5e0a9c8 --- /dev/null +++ b/src/www/assets/useSearch-BufLn6Rh.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";import{t as n}from"./useRouter-DS97kuA5.js";import{g as r,n as i,t as a}from"./useStore-pgHsvR0E.js";import{n as o,t as s}from"./matchContext-BJCpOvLW.js";var c=t(e(),1),l={get:()=>void 0,subscribe:()=>({unsubscribe:()=>{}})};function u(e){let t=n(),u=c.useContext(e.from?s:o),d=e.from??u,f=d?e.from?t.stores.getRouteMatchStore(d):t.stores.matchStores.get(d):void 0,p=c.useRef(void 0);return a(f??l,n=>{if((e.shouldThrow??!0)&&!n&&i(),n===void 0)return;let a=e.select?e.select(n):n;if(e.structuralSharing??t.options.defaultStructuralSharing){let e=r(p.current,a);return p.current=e,e}return a})}function d(e){return u({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}export{u as n,d as t}; \ No newline at end of file diff --git a/src/www/assets/useStore-pgHsvR0E.js b/src/www/assets/useStore-pgHsvR0E.js new file mode 100644 index 0000000..ccd6e19 --- /dev/null +++ b/src/www/assets/useStore-pgHsvR0E.js @@ -0,0 +1 @@ +import{$u as e,nd as t}from"./messages-BOl-zx8S.js";import{t as n}from"./with-selector-CQzBqoHI.js";function r(e){return e[e.length-1]}function i(e){return typeof e==`function`}function a(e,t){return i(e)?e(t):e}var o=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,c=()=>Object.create(null),l=(e,t)=>u(e,t,c);function u(e,t,n=()=>({}),r=0){if(e===t)return e;if(r>500)return t;let i=t,a=m(e)&&m(i);if(!a&&!(f(e)&&f(i)))return i;let s=a?e:d(e);if(!s)return i;let c=a?i:d(i);if(!c)return i;let l=s.length,p=c.length,h=a?Array(p):n(),g=0;for(let t=0;ti||!h(e[o],t[o],n)))return!1;return i===a}return!1}function g(e){let t,n,r=new Promise((e,r)=>{t=e,n=r});return r.status=`pending`,r.resolve=n=>{r.status=`resolved`,r.value=n,t(n),e?.(n)},r.reject=e=>{r.status=`rejected`,n(e)},r}function _(e){return typeof e?.message==`string`?e.message.startsWith(`Failed to fetch dynamically imported module`)||e.message.startsWith(`error loading dynamically imported module`)||e.message.startsWith(`Importing a module script failed`):!1}function v(e){return!!(e&&typeof e==`object`&&typeof e.then==`function`)}function y(e){return e.replace(/[\x00-\x1f\x7f]/g,``)}function b(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return y(t)}var x=[`http:`,`https:`,`mailto:`,`tel:`];function S(e,t){if(!e)return!1;try{let n=new URL(e);return!t.has(n.protocol)}catch{return!1}}function C(e){if(!e||!/[%\\\x00-\x1f\x7f]/.test(e)&&!e.startsWith(`//`))return{path:e,handledProtocolRelativeURL:!1};let t=/%25|%5C/gi,n=0,r=``,i;for(;(i=t.exec(e))!==null;)r+=b(e.slice(n,i.index))+i[0],n=t.lastIndex;r+=b(n?e.slice(n):e);let a=!1;return r.startsWith(`//`)&&(a=!0,r=`/`+r.replace(/^\/+/,``)),{path:r,handledProtocolRelativeURL:a}}function w(e){return/\s|[^\u0000-\u007F]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function T(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n{if(!e)return()=>{};let{unsubscribe:n}=e.subscribe(t);return n},[e]),i=(0,D.useCallback)(()=>e?.get(),[e]);return(0,O.useSyncExternalStoreWithSelector)(r,i,i,t,n)}export{g as a,w as c,_ as d,f,u as g,l as h,T as i,a as l,r as m,E as n,C as o,v as p,x as r,h as s,A as t,S as u}; \ No newline at end of file diff --git a/src/www/assets/wallet-C1oxpYOh.js b/src/www/assets/wallet-C1oxpYOh.js new file mode 100644 index 0000000..f2084c3 --- /dev/null +++ b/src/www/assets/wallet-C1oxpYOh.js @@ -0,0 +1 @@ +import{$u as e,Qu as t,nd as n}from"./messages-BOl-zx8S.js";import{t as r}from"./dist-BeVKhAtj.js";import{n as i,r as a,t as o}from"./cookies-D0aVbsDr.js";import{t as s}from"./createLucideIcon-DMX28cCu.js";var c=n(e(),1),l=t(),u=`ltr`,d=`dir`,f=3600*24*365,p=(0,c.createContext)(null);function m({children:e}){let[t,n]=(0,c.useState)(()=>o(d)||u);return(0,c.useEffect)(()=>{document.documentElement.setAttribute(`dir`,t)},[t]),(0,l.jsx)(p,{value:{defaultDir:u,dir:t,setDir:e=>{n(e),a(d,e,f)},resetDir:()=>{n(u),i(d)}},children:(0,l.jsx)(r,{dir:t,children:e})})}function h(){let e=(0,c.useContext)(p);if(!e)throw Error(`useDirection must be used within a DirectionProvider`);return e}var g=s(`wallet`,[[`path`,{d:`M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1`,key:`18etb6`}],[`path`,{d:`M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4`,key:`xoc0q4`}]]);export{m as n,h as r,g as t}; \ No newline at end of file diff --git a/src/www/assets/web-vitals-DydID5sk.js b/src/www/assets/web-vitals-DydID5sk.js new file mode 100644 index 0000000..7feda2b --- /dev/null +++ b/src/www/assets/web-vitals-DydID5sk.js @@ -0,0 +1 @@ +var e=-1,t=t=>{addEventListener(`pageshow`,n=>{n.persisted&&(e=n.timeStamp,t(n))},!0)},n=(e,t,n,r)=>{let i,a;return o=>{t.value>=0&&(o||r)&&(a=t.value-(i??0),(a||i===void 0)&&(i=t.value,t.delta=a,t.rating=((e,t)=>e>t[1]?`poor`:e>t[0]?`needs-improvement`:`good`)(t.value,n),e(t)))}},r=e=>{requestAnimationFrame(()=>requestAnimationFrame(e))},i=()=>{let e=performance.getEntriesByType(`navigation`)[0];if(e&&e.responseStart>0&&e.responseStarti()?.activationStart??0,o=(t,n=-1)=>{let r=i(),o=`navigate`;return e>=0?o=`back-forward-cache`:r&&(document.prerendering||a()>0?o=`prerender`:document.wasDiscarded?o=`restore`:r.type&&(o=r.type.replace(/_/g,`-`))),{name:t,value:n,rating:`good`,delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+0xe8d4a51000}`,navigationType:o}},s=new WeakMap;function c(e,t){return s.get(e)||s.set(e,new t),s.get(e)}var l=class{t;i=0;o=[];h(e){if(e.hadRecentInput)return;let t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}},u=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){let r=new PerformanceObserver(e=>{queueMicrotask(()=>{t(e.getEntries())})});return r.observe({type:e,buffered:!0,...n}),r}}catch{}},d=e=>{let t=!1;return()=>{t||=(e(),!0)}},f=-1,p=new Set,m=()=>document.visibilityState!==`hidden`||document.prerendering?1/0:0,h=e=>{if(document.visibilityState===`hidden`){if(e.type===`visibilitychange`)for(let e of p)e();isFinite(f)||(f=e.type===`visibilitychange`?e.timeStamp:0,removeEventListener(`prerenderingchange`,h,!0))}},g=()=>{if(f<0){let e=a();f=(document.prerendering?void 0:globalThis.performance.getEntriesByType(`visibility-state`).find(t=>t.name===`hidden`&&t.startTime>=e)?.startTime)??m(),addEventListener(`visibilitychange`,h,!0),addEventListener(`prerenderingchange`,h,!0),t(()=>{setTimeout(()=>{f=m()})})}return{get firstHiddenTime(){return f},onHidden(e){p.add(e)}}},_=e=>{document.prerendering?addEventListener(`prerenderingchange`,e,!0):e()},v=[1800,3e3],y=(e,i={})=>{_(()=>{let s=g(),c,l=o(`FCP`),d=u(`paint`,e=>{for(let t of e)t.name===`first-contentful-paint`&&(d.disconnect(),t.startTime{l=o(`FCP`),c=n(e,l,v,i.reportAllChanges),r(()=>{l.value=performance.now()-t.timeStamp,c(!0)})}))})},b=[.1,.25],x=(e,i={})=>{let a=g();y(d(()=>{let s,d=o(`CLS`,0),f=c(i,l),p=e=>{for(let t of e)f.h(t);f.i>d.value&&(d.value=f.i,d.entries=f.o,s())},m=u(`layout-shift`,p);m&&(s=n(e,d,b,i.reportAllChanges),a.onHidden(()=>{p(m.takeRecords()),s(!0)}),t(()=>{f.i=0,d=o(`CLS`,0),s=n(e,d,b,i.reportAllChanges),r(s)}),setTimeout(s))}))},S=0,C=1/0,w=0,T=e=>{for(let t of e)t.interactionId&&(C=Math.min(C,t.interactionId),w=Math.max(w,t.interactionId),S=w?(w-C)/7+1:0)},E,D=()=>E?S:performance.interactionCount??0,O=()=>{`interactionCount`in performance||E||(E=u(`event`,T,{durationThreshold:0}))},k=0,A=class{l=[];u=new Map;m;p;v(){k=D(),this.l.length=0,this.u.clear()}T(){let e=Math.min(this.l.length-1,Math.floor((D()-k)/50));return this.l[e]}h(e){if(this.m?.(e),!e.interactionId&&e.entryType!==`first-input`)return;let t=this.l.at(-1),n=this.u.get(e.interactionId);if(n||this.l.length<10||e.duration>t.L){if(n?e.duration>n.L?(n.entries=[e],n.L=e.duration):e.duration===n.L&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],L:e.duration},this.u.set(n.id,n),this.l.push(n)),this.l.sort((e,t)=>t.L-e.L),this.l.length>10){let e=this.l.splice(10);for(let t of e)this.u.delete(t.id)}this.p?.(n)}}},j=e=>{let t=globalThis.requestIdleCallback||setTimeout,n=globalThis.cancelIdleCallback||clearTimeout;if(document.visibilityState===`hidden`)e();else{let r=d(e),i=-1,a=()=>{n(i),r()};addEventListener(`visibilitychange`,a,{once:!0,capture:!0}),i=t(()=>{removeEventListener(`visibilitychange`,a,{capture:!0}),r()})}},M=[200,500],N=(e,r={})=>{if(!globalThis.PerformanceEventTiming||!(`interactionId`in PerformanceEventTiming.prototype))return;let i=g();_(()=>{O();let a,s=o(`INP`),l=c(r,A),d=e=>{j(()=>{for(let t of e)l.h(t);let t=l.T();t&&t.L!==s.value&&(s.value=t.L,s.entries=t.entries,a())})},f=u(`event`,d,{durationThreshold:r.durationThreshold??40});a=n(e,s,M,r.reportAllChanges),f&&(f.observe({type:`first-input`,buffered:!0}),i.onHidden(()=>{d(f.takeRecords()),a(!0)}),t(()=>{l.v(),s=o(`INP`),a=n(e,s,M,r.reportAllChanges)}))})},P=class{m;h(e){this.m?.(e)}},F=[2500,4e3],I=(e,i={})=>{_(()=>{let s=g(),l,f=o(`LCP`),p=c(i,P),m=e=>{i.reportAllChanges||(e=e.slice(-1));for(let t of e)p.h(t),t.startTime{m(h.takeRecords()),h.disconnect(),l(!0)}),s=e=>{e.isTrusted&&(j(a),removeEventListener(e.type,s,{capture:!0}))};for(let e of[`keydown`,`click`,`visibilitychange`])addEventListener(e,s,{capture:!0});t(t=>{f=o(`LCP`),l=n(e,f,F,i.reportAllChanges),r(()=>{f.value=performance.now()-t.timeStamp,l(!0)})})}})},L=[800,1800],R=e=>{document.prerendering?_(()=>R(e)):document.readyState===`complete`?setTimeout(e):addEventListener(`load`,()=>R(e),!0)},z=(e,r={})=>{let s=o(`TTFB`),c=n(e,s,L,r.reportAllChanges);R(()=>{let l=i();l&&(s.value=Math.max(l.responseStart-a(),0),s.entries=[l],c(!0),t(()=>{s=o(`TTFB`,0),c=n(e,s,L,r.reportAllChanges),c(!0)}))})};export{x as onCLS,y as onFCP,N as onINP,I as onLCP,z as onTTFB}; \ No newline at end of file diff --git a/src/www/assets/with-selector-CQzBqoHI.js b/src/www/assets/with-selector-CQzBqoHI.js new file mode 100644 index 0000000..3f9c1a2 --- /dev/null +++ b/src/www/assets/with-selector-CQzBqoHI.js @@ -0,0 +1 @@ +import{$u as e,ed as t}from"./messages-BOl-zx8S.js";var n=t((t=>{var n=e();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useState,o=n.useEffect,s=n.useLayoutEffect,c=n.useDebugValue;function l(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return s(function(){i.value=n,i.getSnapshot=t,u(i)&&l({inst:i})},[e,n,t]),o(function(){return u(i)&&l({inst:i}),e(function(){u(i)&&l({inst:i})})},[e]),c(n),n}function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!i(e,n)}catch{return!0}}function d(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?d:l;t.useSyncExternalStore=n.useSyncExternalStore===void 0?f:n.useSyncExternalStore})),r=t(((e,t)=>{t.exports=n()})),i=t((t=>{var n=e(),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;t.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}})),a=t(((e,t)=>{t.exports=i()}));export{r as n,a as t}; \ No newline at end of file diff --git a/src/www/assets/zod-DzRgHmfz.js b/src/www/assets/zod-DzRgHmfz.js new file mode 100644 index 0000000..e7ee398 --- /dev/null +++ b/src/www/assets/zod-DzRgHmfz.js @@ -0,0 +1,40 @@ +import{td as e}from"./messages-BOl-zx8S.js";var t=Object.freeze({status:`aborted`});function n(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,`_zod`,{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;en?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,`name`,{value:e}),o}var r=Symbol(`zod_brand`),i=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},a=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}},o={};function s(e){return e&&Object.assign(o,e),o}var c=e({BIGINT_FORMAT_RANGES:()=>Ee,Class:()=>We,NUMBER_FORMAT_RANGES:()=>Te,aborted:()=>S,allowsEval:()=>_e,assert:()=>te,assertEqual:()=>l,assertIs:()=>ee,assertNever:()=>d,assertNotEqual:()=>u,assignProp:()=>h,base64ToUint8Array:()=>Re,base64urlToUint8Array:()=>Be,cached:()=>ie,captureStackTrace:()=>he,cleanEnum:()=>Le,cleanRegex:()=>ae,clone:()=>y,cloneDef:()=>le,createTransparentProxy:()=>Ce,defineLazy:()=>m,esc:()=>pe,escapeRegex:()=>v,extend:()=>ke,finalizeIssue:()=>w,floatSafeRemainder:()=>oe,getElementAtPath:()=>ue,getEnumValues:()=>ne,getLengthableOrigin:()=>Ie,getParsedType:()=>be,getSizableOrigin:()=>Fe,hexToUint8Array:()=>He,isObject:()=>ge,isPlainObject:()=>_,issue:()=>E,joinValues:()=>f,jsonStringifyReplacer:()=>re,merge:()=>je,mergeDefs:()=>g,normalizeParams:()=>b,nullish:()=>p,numKeys:()=>ye,objectClone:()=>ce,omit:()=>Oe,optionalKeys:()=>we,parsedType:()=>T,partial:()=>Me,pick:()=>De,prefixIssues:()=>C,primitiveTypes:()=>Se,promiseAllObject:()=>de,propertyKeyTypes:()=>xe,randomString:()=>fe,required:()=>Ne,safeExtend:()=>Ae,shallowClone:()=>ve,slugify:()=>me,stringifyPrimitive:()=>x,uint8ArrayToBase64:()=>ze,uint8ArrayToBase64url:()=>Ve,uint8ArrayToHex:()=>Ue,unwrapMessage:()=>Pe});function l(e){return e}function u(e){return e}function ee(e){}function d(e){throw Error(`Unexpected value in exhaustive check`)}function te(e){}function ne(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function f(e,t=`|`){return e.map(e=>x(e)).join(t)}function re(e,t){return typeof t==`bigint`?t.toString():t}function ie(e){return{get value(){{let t=e();return Object.defineProperty(this,`value`,{value:t}),t}throw Error(`cached value already set`)}}}function p(e){return e==null}function ae(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function oe(e,t){let n=(e.toString().split(`.`)[1]||``).length,r=t.toString(),i=(r.split(`.`)[1]||``).length;if(i===0&&/\d?e-\d?/.test(r)){let e=r.match(/\d?e-(\d?)/);e?.[1]&&(i=Number.parseInt(e[1]))}let a=n>i?n:i;return Number.parseInt(e.toFixed(a).replace(`.`,``))%Number.parseInt(t.toFixed(a).replace(`.`,``))/10**a}var se=Symbol(`evaluating`);function m(e,t,n){let r;Object.defineProperty(e,t,{get(){if(r!==se)return r===void 0&&(r=se,r=n()),r},set(n){Object.defineProperty(e,t,{value:n})},configurable:!0})}function ce(e){return Object.create(Object.getPrototypeOf(e),Object.getOwnPropertyDescriptors(e))}function h(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function g(...e){let t={};for(let n of e)Object.assign(t,Object.getOwnPropertyDescriptors(n));return Object.defineProperties({},t)}function le(e){return g(e._zod.def)}function ue(e,t){return t?t.reduce((e,t)=>e?.[t],e):e}function de(e){let t=Object.keys(e),n=t.map(t=>e[t]);return Promise.all(n).then(e=>{let n={};for(let r=0;r{};function ge(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var _e=ie(()=>{if(typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function _(e){if(ge(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return!(ge(n)===!1||Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)===!1)}function ve(e){return _(e)?{...e}:Array.isArray(e)?[...e]:e}function ye(e){let t=0;for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t++;return t}var be=e=>{let t=typeof e;switch(t){case`undefined`:return`undefined`;case`string`:return`string`;case`number`:return Number.isNaN(e)?`nan`:`number`;case`boolean`:return`boolean`;case`function`:return`function`;case`bigint`:return`bigint`;case`symbol`:return`symbol`;case`object`:return Array.isArray(e)?`array`:e===null?`null`:e.then&&typeof e.then==`function`&&e.catch&&typeof e.catch==`function`?`promise`:typeof Map<`u`&&e instanceof Map?`map`:typeof Set<`u`&&e instanceof Set?`set`:typeof Date<`u`&&e instanceof Date?`date`:typeof File<`u`&&e instanceof File?`file`:`object`;default:throw Error(`Unknown data type: ${t}`)}},xe=new Set([`string`,`number`,`symbol`]),Se=new Set([`string`,`number`,`bigint`,`boolean`,`symbol`,`undefined`]);function v(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function y(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function b(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function Ce(e){let t;return new Proxy({},{get(n,r,i){return t??=e(),Reflect.get(t,r,i)},set(n,r,i,a){return t??=e(),Reflect.set(t,r,i,a)},has(n,r){return t??=e(),Reflect.has(t,r)},deleteProperty(n,r){return t??=e(),Reflect.deleteProperty(t,r)},ownKeys(n){return t??=e(),Reflect.ownKeys(t)},getOwnPropertyDescriptor(n,r){return t??=e(),Reflect.getOwnPropertyDescriptor(t,r)},defineProperty(n,r,i){return t??=e(),Reflect.defineProperty(t,r,i)}})}function x(e){return typeof e==`bigint`?e.toString()+`n`:typeof e==`string`?`"${e}"`:`${e}`}function we(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var Te={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},Ee={int64:[BigInt(`-9223372036854775808`),BigInt(`9223372036854775807`)],uint64:[BigInt(0),BigInt(`18446744073709551615`)]};function De(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return y(e,g(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return h(this,`shape`,e),e},checks:[]}))}function Oe(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return y(e,g(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return h(this,`shape`,r),r},checks:[]}))}function ke(e,t){if(!_(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return y(e,g(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return h(this,`shape`,n),n}}))}function Ae(e,t){if(!_(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return y(e,g(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return h(this,`shape`,n),n}}))}function je(e,t){return y(e,g(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return h(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:[]}))}function Me(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return y(t,g(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return h(this,`shape`,i),i},checks:[]}))}function Ne(e,t,n){return y(t,g(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return h(this,`shape`,i),i}}))}function S(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function Pe(e){return typeof e==`string`?e:e?.message}function w(e,t,n){let r={...e,path:e.path??[]};return e.message||(r.message=Pe(e.inst?._zod.def?.error?.(e))??Pe(t?.error?.(e))??Pe(n.customError?.(e))??Pe(n.localeError?.(e))??`Invalid input`),delete r.inst,delete r.continue,t?.reportInput||delete r.input,r}function Fe(e){return e instanceof Set?`set`:e instanceof Map?`map`:e instanceof File?`file`:`unknown`}function Ie(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function T(e){let t=typeof e;switch(t){case`number`:return Number.isNaN(e)?`nan`:`number`;case`object`:{if(e===null)return`null`;if(Array.isArray(e))return`array`;let t=e;if(t&&Object.getPrototypeOf(t)!==Object.prototype&&`constructor`in t&&t.constructor)return t.constructor.name}}return t}function E(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}function Le(e){return Object.entries(e).filter(([e,t])=>Number.isNaN(Number.parseInt(e,10))).map(e=>e[1])}function Re(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;ee.toString(16).padStart(2,`0`)).join(``)}var We=class{constructor(...e){}},Ge=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,`_zod`,{value:e._zod,enumerable:!1}),Object.defineProperty(e,`issues`,{value:t,enumerable:!1}),e.message=JSON.stringify(t,re,2),Object.defineProperty(e,`toString`,{value:()=>e.message,enumerable:!1})},Ke=n(`$ZodError`,Ge),D=n(`$ZodError`,Ge,{Parent:Error});function qe(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Je(e,t=e=>e.message){let n={_errors:[]},r=e=>{for(let i of e.issues)if(i.code===`invalid_union`&&i.errors.length)i.errors.map(e=>r({issues:e}));else if(i.code===`invalid_key`)r({issues:i.issues});else if(i.code===`invalid_element`)r({issues:i.issues});else if(i.path.length===0)n._errors.push(t(i));else{let e=n,r=0;for(;re.message){let n={errors:[]},r=(e,i=[])=>{var a,o;for(let s of e.issues)if(s.code===`invalid_union`&&s.errors.length)s.errors.map(e=>r({issues:e},s.path));else if(s.code===`invalid_key`)r({issues:s.issues},s.path);else if(s.code===`invalid_element`)r({issues:s.issues},s.path);else{let e=[...i,...s.path];if(e.length===0){n.errors.push(t(s));continue}let r=n,c=0;for(;ctypeof e==`object`?e.key:e);for(let e of n)typeof e==`number`?t.push(`[${e}]`):typeof e==`symbol`?t.push(`[${JSON.stringify(String(e))}]`):/[^\w$]/.test(e)?t.push(`[${JSON.stringify(e)}]`):(t.length&&t.push(`.`),t.push(e));return t.join(``)}function Ze(e){let t=[],n=[...e.issues].sort((e,t)=>(e.path??[]).length-(t.path??[]).length);for(let e of n)t.push(`✖ ${e.message}`),e.path?.length&&t.push(` → at ${Xe(e.path)}`);return t.join(` +`)}var Qe=e=>(t,n,r,a)=>{let o=r?Object.assign(r,{async:!1}):{async:!1},c=t._zod.run({value:n,issues:[]},o);if(c instanceof Promise)throw new i;if(c.issues.length){let t=new(a?.Err??e)(c.issues.map(e=>w(e,o,s())));throw he(t,a?.callee),t}return c.value},$e=Qe(D),et=e=>async(t,n,r,i)=>{let a=r?Object.assign(r,{async:!0}):{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new(i?.Err??e)(o.issues.map(e=>w(e,a,s())));throw he(t,i?.callee),t}return o.value},tt=et(D),nt=e=>(t,n,r)=>{let a=r?{...r,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new i;return o.issues.length?{success:!1,error:new(e??Ke)(o.issues.map(e=>w(e,a,s())))}:{success:!0,data:o.value}},rt=nt(D),it=e=>async(t,n,r)=>{let i=r?Object.assign(r,{async:!0}):{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>w(e,i,s())))}:{success:!0,data:a.value}},at=it(D),ot=e=>(t,n,r)=>{let i=r?Object.assign(r,{direction:`backward`}):{direction:`backward`};return Qe(e)(t,n,i)},st=ot(D),ct=e=>(t,n,r)=>Qe(e)(t,n,r),lt=ct(D),ut=e=>async(t,n,r)=>{let i=r?Object.assign(r,{direction:`backward`}):{direction:`backward`};return et(e)(t,n,i)},dt=ut(D),ft=e=>async(t,n,r)=>et(e)(t,n,r),pt=ft(D),mt=e=>(t,n,r)=>{let i=r?Object.assign(r,{direction:`backward`}):{direction:`backward`};return nt(e)(t,n,i)},ht=mt(D),gt=e=>(t,n,r)=>nt(e)(t,n,r),_t=gt(D),vt=e=>async(t,n,r)=>{let i=r?Object.assign(r,{direction:`backward`}):{direction:`backward`};return it(e)(t,n,i)},yt=vt(D),bt=e=>async(t,n,r)=>it(e)(t,n,r),xt=bt(D),St=e({base64:()=>Jt,base64url:()=>Yt,bigint:()=>on,boolean:()=>ln,browserEmail:()=>Bt,cidrv4:()=>Kt,cidrv6:()=>qt,cuid:()=>Ct,cuid2:()=>wt,date:()=>en,datetime:()=>rn,domain:()=>Zt,duration:()=>kt,e164:()=>Qt,email:()=>Ft,emoji:()=>Ht,extendedDuration:()=>At,guid:()=>jt,hex:()=>mn,hostname:()=>Xt,html5Email:()=>It,idnEmail:()=>zt,integer:()=>sn,ipv4:()=>Ut,ipv6:()=>Wt,ksuid:()=>Dt,lowercase:()=>fn,mac:()=>Gt,md5_base64:()=>vn,md5_base64url:()=>yn,md5_hex:()=>_n,nanoid:()=>Ot,null:()=>un,number:()=>cn,rfc5322Email:()=>Lt,sha1_base64:()=>xn,sha1_base64url:()=>Sn,sha1_hex:()=>bn,sha256_base64:()=>wn,sha256_base64url:()=>Tn,sha256_hex:()=>Cn,sha384_base64:()=>Dn,sha384_base64url:()=>On,sha384_hex:()=>En,sha512_base64:()=>An,sha512_base64url:()=>jn,sha512_hex:()=>kn,string:()=>an,time:()=>nn,ulid:()=>Tt,undefined:()=>dn,unicodeEmail:()=>Rt,uppercase:()=>pn,uuid:()=>O,uuid4:()=>Mt,uuid6:()=>Nt,uuid7:()=>Pt,xid:()=>Et}),Ct=/^[cC][^\s-]{8,}$/,wt=/^[0-9a-z]+$/,Tt=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,Et=/^[0-9a-vA-V]{20}$/,Dt=/^[A-Za-z0-9]{27}$/,Ot=/^[a-zA-Z0-9_-]{21}$/,kt=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,At=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,jt=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,O=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,Mt=O(4),Nt=O(6),Pt=O(7),Ft=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,It=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Lt=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,Rt=/^[^\s@"]{1,64}@[^\s@]{1,255}$/u,zt=Rt,Bt=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Vt=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function Ht(){return new RegExp(Vt,`u`)}var Ut=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Wt=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Gt=e=>{let t=v(e??`:`);return RegExp(`^(?:[0-9A-F]{2}${t}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${t}){5}[0-9a-f]{2}$`)},Kt=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,qt=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Jt=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Yt=/^[A-Za-z0-9_-]*$/,Xt=/^(?=.{1,253}\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\.?$/,Zt=/^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/,Qt=/^\+[1-9]\d{6,14}$/,$t=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,en=RegExp(`^${$t}$`);function tn(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function nn(e){return RegExp(`^${tn(e)}$`)}function rn(e){let t=tn({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${$t}T(?:${r})$`)}var an=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},on=/^-?\d+n?$/,sn=/^-?\d+$/,cn=/^-?\d+(?:\.\d+)?$/,ln=/^(?:true|false)$/i,un=/^null$/i,dn=/^undefined$/i,fn=/^[^A-Z]*$/,pn=/^[^a-z]*$/,mn=/^[0-9a-fA-F]*$/;function hn(e,t){return RegExp(`^[A-Za-z0-9+/]{${e}}${t}$`)}function gn(e){return RegExp(`^[A-Za-z0-9_-]{${e}}$`)}var _n=/^[0-9a-fA-F]{32}$/,vn=hn(22,`==`),yn=gn(22),bn=/^[0-9a-fA-F]{40}$/,xn=hn(27,`=`),Sn=gn(27),Cn=/^[0-9a-fA-F]{64}$/,wn=hn(43,`=`),Tn=gn(43),En=/^[0-9a-fA-F]{96}$/,Dn=hn(64,``),On=gn(64),kn=/^[0-9a-fA-F]{128}$/,An=hn(86,`==`),jn=gn(86),k=n(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Mn={number:`number`,bigint:`bigint`,object:`date`},Nn=n(`$ZodCheckLessThan`,(e,t)=>{k.init(e,t);let n=Mn[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value{(t.inclusive?r.value<=t.value:r.value{k.init(e,t);let n=Mn[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Fn=n(`$ZodCheckMultipleOf`,(e,t)=>{k.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):oe(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),In=n(`$ZodCheckNumberFormat`,(e,t)=>{k.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=Te[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=sn)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}sa&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),Ln=n(`$ZodCheckBigIntFormat`,(e,t)=>{k.init(e,t);let[n,r]=Ee[t.format];e._zod.onattach.push(e=>{let i=e._zod.bag;i.format=t.format,i.minimum=n,i.maximum=r}),e._zod.check=i=>{let a=i.value;ar&&i.issues.push({origin:`bigint`,input:a,code:`too_big`,maximum:r,inclusive:!0,inst:e,continue:!t.abort})}}),Rn=n(`$ZodCheckMaxSize`,(e,t)=>{var n;k.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!p(t)&&t.size!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum{let r=n.value;r.size<=t.maximum||n.issues.push({origin:Fe(r),code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),zn=n(`$ZodCheckMinSize`,(e,t)=>{var n;k.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!p(t)&&t.size!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;r.size>=t.minimum||n.issues.push({origin:Fe(r),code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Bn=n(`$ZodCheckSizeEquals`,(e,t)=>{var n;k.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!p(t)&&t.size!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.size,n.maximum=t.size,n.size=t.size}),e._zod.check=n=>{let r=n.value,i=r.size;if(i===t.size)return;let a=i>t.size;n.issues.push({origin:Fe(r),...a?{code:`too_big`,maximum:t.size}:{code:`too_small`,minimum:t.size},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Vn=n(`$ZodCheckMaxLength`,(e,t)=>{var n;k.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!p(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum{let r=n.value;if(r.length<=t.maximum)return;let i=Ie(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Hn=n(`$ZodCheckMinLength`,(e,t)=>{var n;k.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!p(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=Ie(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Un=n(`$ZodCheckLengthEquals`,(e,t)=>{var n;k.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!p(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=Ie(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Wn=n(`$ZodCheckStringFormat`,(e,t)=>{var n,r;k.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),Gn=n(`$ZodCheckRegex`,(e,t)=>{Wn.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Kn=n(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=fn,Wn.init(e,t)}),qn=n(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=pn,Wn.init(e,t)}),Jn=n(`$ZodCheckIncludes`,(e,t)=>{k.init(e,t);let n=v(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),Yn=n(`$ZodCheckStartsWith`,(e,t)=>{k.init(e,t);let n=RegExp(`^${v(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),Xn=n(`$ZodCheckEndsWith`,(e,t)=>{k.init(e,t);let n=RegExp(`.*${v(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}});function Zn(e,t,n){e.issues.length&&t.issues.push(...C(n,e.issues))}var Qn=n(`$ZodCheckProperty`,(e,t)=>{k.init(e,t),e._zod.check=e=>{let n=t.schema._zod.run({value:e.value[t.property],issues:[]},{});if(n instanceof Promise)return n.then(n=>Zn(n,e,t.property));Zn(n,e,t.property)}}),$n=n(`$ZodCheckMimeType`,(e,t)=>{k.init(e,t);let n=new Set(t.mime);e._zod.onattach.push(e=>{e._zod.bag.mime=t.mime}),e._zod.check=r=>{n.has(r.value.type)||r.issues.push({code:`invalid_value`,values:t.mime,input:r.value.type,inst:e,continue:!t.abort})}}),er=n(`$ZodCheckOverwrite`,(e,t)=>{k.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),tr=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(` +`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.args,n=[...(this?.content??[``]).map(e=>` ${e}`)];return new e(...t,n.join(` +`))}},nr={major:4,minor:3,patch:6},A=n(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=nr;let r=[...e._zod.def.checks??[]];e._zod.traits.has(`$ZodCheck`)&&r.unshift(e);for(let t of r)for(let n of t._zod.onattach)n(e);if(r.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(e,t,n)=>{let r=S(e),a;for(let o of t){if(o._zod.def.when){if(!o._zod.def.when(e))continue}else if(r)continue;let t=e.issues.length,s=o._zod.check(e);if(s instanceof Promise&&n?.async===!1)throw new i;if(a||s instanceof Promise)a=(a??Promise.resolve()).then(async()=>{await s,e.issues.length!==t&&(r||=S(e,t))});else{if(e.issues.length===t)continue;r||=S(e,t)}}return a?a.then(()=>e):e},n=(n,a,o)=>{if(S(n))return n.aborted=!0,n;let s=t(a,r,o);if(s instanceof Promise){if(o.async===!1)throw new i;return s.then(t=>e._zod.parse(t,o))}return e._zod.parse(s,o)};e._zod.run=(a,o)=>{if(o.skipChecks)return e._zod.parse(a,o);if(o.direction===`backward`){let t=e._zod.parse({value:a.value,issues:[]},{...o,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,a,o)):n(t,a,o)}let s=e._zod.parse(a,o);if(s instanceof Promise){if(o.async===!1)throw new i;return s.then(e=>t(e,r,o))}return t(s,r,o)}}m(e,`~standard`,()=>({validate:t=>{try{let n=rt(e,t);return n.success?{value:n.data}:{issues:n.error?.issues}}catch{return at(e,t).then(e=>e.success?{value:e.data}:{issues:e.error?.issues})}},vendor:`zod`,version:1}))}),rr=n(`$ZodString`,(e,t)=>{A.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??an(e._zod.bag),e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),j=n(`$ZodStringFormat`,(e,t)=>{Wn.init(e,t),rr.init(e,t)}),ir=n(`$ZodGUID`,(e,t)=>{t.pattern??=jt,j.init(e,t)}),ar=n(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=O(e)}else t.pattern??=O();j.init(e,t)}),or=n(`$ZodEmail`,(e,t)=>{t.pattern??=Ft,j.init(e,t)}),sr=n(`$ZodURL`,(e,t)=>{j.init(e,t),e._zod.check=n=>{try{let r=n.value.trim(),i=new URL(r);t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(i.hostname)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(i.protocol.endsWith(`:`)?i.protocol.slice(0,-1):i.protocol)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort})),t.normalize?n.value=i.href:n.value=r;return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),cr=n(`$ZodEmoji`,(e,t)=>{t.pattern??=Ht(),j.init(e,t)}),lr=n(`$ZodNanoID`,(e,t)=>{t.pattern??=Ot,j.init(e,t)}),ur=n(`$ZodCUID`,(e,t)=>{t.pattern??=Ct,j.init(e,t)}),dr=n(`$ZodCUID2`,(e,t)=>{t.pattern??=wt,j.init(e,t)}),fr=n(`$ZodULID`,(e,t)=>{t.pattern??=Tt,j.init(e,t)}),pr=n(`$ZodXID`,(e,t)=>{t.pattern??=Et,j.init(e,t)}),mr=n(`$ZodKSUID`,(e,t)=>{t.pattern??=Dt,j.init(e,t)}),hr=n(`$ZodISODateTime`,(e,t)=>{t.pattern??=rn(t),j.init(e,t)}),gr=n(`$ZodISODate`,(e,t)=>{t.pattern??=en,j.init(e,t)}),_r=n(`$ZodISOTime`,(e,t)=>{t.pattern??=nn(t),j.init(e,t)}),vr=n(`$ZodISODuration`,(e,t)=>{t.pattern??=kt,j.init(e,t)}),yr=n(`$ZodIPv4`,(e,t)=>{t.pattern??=Ut,j.init(e,t),e._zod.bag.format=`ipv4`}),br=n(`$ZodIPv6`,(e,t)=>{t.pattern??=Wt,j.init(e,t),e._zod.bag.format=`ipv6`,e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}}),xr=n(`$ZodMAC`,(e,t)=>{t.pattern??=Gt(t.delimiter),j.init(e,t),e._zod.bag.format=`mac`}),Sr=n(`$ZodCIDRv4`,(e,t)=>{t.pattern??=Kt,j.init(e,t)}),Cr=n(`$ZodCIDRv6`,(e,t)=>{t.pattern??=qt,j.init(e,t),e._zod.check=n=>{let r=n.value.split(`/`);try{if(r.length!==2)throw Error();let[e,t]=r;if(!t)throw Error();let n=Number(t);if(`${n}`!==t||n<0||n>128)throw Error();new URL(`http://[${e}]`)}catch{n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}}});function wr(e){if(e===``)return!0;if(e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var Tr=n(`$ZodBase64`,(e,t)=>{t.pattern??=Jt,j.init(e,t),e._zod.bag.contentEncoding=`base64`,e._zod.check=n=>{wr(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}});function Er(e){if(!Yt.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return wr(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var Dr=n(`$ZodBase64URL`,(e,t)=>{t.pattern??=Yt,j.init(e,t),e._zod.bag.contentEncoding=`base64url`,e._zod.check=n=>{Er(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),Or=n(`$ZodE164`,(e,t)=>{t.pattern??=Qt,j.init(e,t)});function kr(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var Ar=n(`$ZodJWT`,(e,t)=>{j.init(e,t),e._zod.check=n=>{kr(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),jr=n(`$ZodCustomStringFormat`,(e,t)=>{j.init(e,t),e._zod.check=n=>{t.fn(n.value)||n.issues.push({code:`invalid_format`,format:t.format,input:n.value,inst:e,continue:!t.abort})}}),Mr=n(`$ZodNumber`,(e,t)=>{A.init(e,t),e._zod.pattern=e._zod.bag.pattern??cn,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:`Infinity`:void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),Nr=n(`$ZodNumberFormat`,(e,t)=>{In.init(e,t),Mr.init(e,t)}),Pr=n(`$ZodBoolean`,(e,t)=>{A.init(e,t),e._zod.pattern=ln,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),Fr=n(`$ZodBigInt`,(e,t)=>{A.init(e,t),e._zod.pattern=on,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=BigInt(n.value)}catch{}return typeof n.value==`bigint`||n.issues.push({expected:`bigint`,code:`invalid_type`,input:n.value,inst:e}),n}}),Ir=n(`$ZodBigIntFormat`,(e,t)=>{Ln.init(e,t),Fr.init(e,t)}),Lr=n(`$ZodSymbol`,(e,t)=>{A.init(e,t),e._zod.parse=(t,n)=>{let r=t.value;return typeof r==`symbol`||t.issues.push({expected:`symbol`,code:`invalid_type`,input:r,inst:e}),t}}),Rr=n(`$ZodUndefined`,(e,t)=>{A.init(e,t),e._zod.pattern=dn,e._zod.values=new Set([void 0]),e._zod.optin=`optional`,e._zod.optout=`optional`,e._zod.parse=(t,n)=>{let r=t.value;return r===void 0||t.issues.push({expected:`undefined`,code:`invalid_type`,input:r,inst:e}),t}}),zr=n(`$ZodNull`,(e,t)=>{A.init(e,t),e._zod.pattern=un,e._zod.values=new Set([null]),e._zod.parse=(t,n)=>{let r=t.value;return r===null||t.issues.push({expected:`null`,code:`invalid_type`,input:r,inst:e}),t}}),Br=n(`$ZodAny`,(e,t)=>{A.init(e,t),e._zod.parse=e=>e}),Vr=n(`$ZodUnknown`,(e,t)=>{A.init(e,t),e._zod.parse=e=>e}),Hr=n(`$ZodNever`,(e,t)=>{A.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)}),Ur=n(`$ZodVoid`,(e,t)=>{A.init(e,t),e._zod.parse=(t,n)=>{let r=t.value;return r===void 0||t.issues.push({expected:`void`,code:`invalid_type`,input:r,inst:e}),t}}),Wr=n(`$ZodDate`,(e,t)=>{A.init(e,t),e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=new Date(n.value)}catch{}let i=n.value,a=i instanceof Date;return a&&!Number.isNaN(i.getTime())||n.issues.push({expected:`date`,code:`invalid_type`,input:i,...a?{received:`Invalid Date`}:{},inst:e}),n}});function Gr(e,t,n){e.issues.length&&t.issues.push(...C(n,e.issues)),t.value[n]=e.value}var Kr=n(`$ZodArray`,(e,t)=>{A.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!Array.isArray(i))return n.issues.push({expected:`array`,code:`invalid_type`,input:i,inst:e}),n;n.value=Array(i.length);let a=[];for(let e=0;eGr(t,n,e))):Gr(s,n,e)}return a.length?Promise.all(a).then(()=>n):n}});function qr(e,t,n,r,i){if(e.issues.length){if(i&&!(n in r))return;t.issues.push(...C(n,e.issues))}e.value===void 0?n in r&&(t.value[n]=void 0):t.value[n]=e.value}function Jr(e){let t=Object.keys(e.shape);for(let n of t)if(!e.shape?.[n]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${n}": expected a Zod schema`);let n=we(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(n)}}function Yr(e,t,n,r,i,a){let o=[],s=i.keySet,c=i.catchall._zod,l=c.def.type,u=c.optout===`optional`;for(let i in t){if(s.has(i))continue;if(l===`never`){o.push(i);continue}let a=c.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>qr(e,n,i,t,u))):qr(a,n,i,t,u)}return o.length&&n.issues.push({code:`unrecognized_keys`,keys:o,input:t,inst:a}),e.length?Promise.all(e).then(()=>n):n}var Xr=n(`$ZodObject`,(e,t)=>{if(A.init(e,t),!Object.getOwnPropertyDescriptor(t,`shape`)?.get){let e=t.shape;Object.defineProperty(t,`shape`,{get:()=>{let n={...e};return Object.defineProperty(t,`shape`,{value:n}),n}})}let n=ie(()=>Jr(t));m(e._zod,`propValues`,()=>{let e=t.shape,n={};for(let t in e){let r=e[t]._zod;if(r.values){n[t]??(n[t]=new Set);for(let e of r.values)n[t].add(e)}}return n});let r=ge,i=t.catchall,a;e._zod.parse=(t,o)=>{a??=n.value;let s=t.value;if(!r(s))return t.issues.push({expected:`object`,code:`invalid_type`,input:s,inst:e}),t;t.value={};let c=[],l=a.shape;for(let e of a.keys){let n=l[e],r=n._zod.optout===`optional`,i=n._zod.run({value:s[e],issues:[]},o);i instanceof Promise?c.push(i.then(n=>qr(n,t,e,s,r))):qr(i,t,e,s,r)}return i?Yr(c,s,t,o,n.value,e):c.length?Promise.all(c).then(()=>t):t}}),Zr=n(`$ZodObjectJIT`,(e,t)=>{Xr.init(e,t);let n=e._zod.parse,r=ie(()=>Jr(t)),i=e=>{let t=new tr([`shape`,`payload`,`ctx`]),n=r.value,i=e=>{let t=pe(e);return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`};t.write(`const input = payload.value;`);let a=Object.create(null),o=0;for(let e of n.keys)a[e]=`key_${o++}`;t.write(`const newResult = {};`);for(let r of n.keys){let n=a[r],o=pe(r),s=e[r]?._zod?.optout===`optional`;t.write(`const ${n} = ${i(r)};`),s?t.write(` + if (${n}.issues.length) { + if (${o} in input) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + } + + if (${n}.value === undefined) { + if (${o} in input) { + newResult[${o}] = undefined; + } + } else { + newResult[${o}] = ${n}.value; + } + + `):t.write(` + if (${n}.issues.length) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + + if (${n}.value === undefined) { + if (${o} in input) { + newResult[${o}] = undefined; + } + } else { + newResult[${o}] = ${n}.value; + } + + `)}t.write(`payload.value = newResult;`),t.write(`return payload;`);let s=t.compile();return(t,n)=>s(e,t,n)},a,s=ge,c=!o.jitless,l=c&&_e.value,u=t.catchall,ee;e._zod.parse=(o,d)=>{ee??=r.value;let te=o.value;return s(te)?c&&l&&d?.async===!1&&d.jitless!==!0?(a||=i(t.shape),o=a(o,d),u?Yr([],te,o,d,ee,e):o):n(o,d):(o.issues.push({expected:`object`,code:`invalid_type`,input:te,inst:e}),o)}});function Qr(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!S(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>w(e,r,s())))}),t)}var $r=n(`$ZodUnion`,(e,t)=>{A.init(e,t),m(e._zod,`optin`,()=>t.options.some(e=>e._zod.optin===`optional`)?`optional`:void 0),m(e._zod,`optout`,()=>t.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),m(e._zod,`values`,()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),m(e._zod,`pattern`,()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>ae(e.source)).join(`|`)})$`)}});let n=t.options.length===1,r=t.options[0]._zod.run;e._zod.parse=(i,a)=>{if(n)return r(i,a);let o=!1,s=[];for(let e of t.options){let t=e._zod.run({value:i.value,issues:[]},a);if(t instanceof Promise)s.push(t),o=!0;else{if(t.issues.length===0)return t;s.push(t)}}return o?Promise.all(s).then(t=>Qr(t,i,e,a)):Qr(s,i,e,a)}});function ei(e,t,n,r){let i=e.filter(e=>e.issues.length===0);return i.length===1?(t.value=i[0].value,t):(i.length===0?t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>w(e,r,s())))}):t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:[],inclusive:!1}),t)}var ti=n(`$ZodXor`,(e,t)=>{$r.init(e,t),t.inclusive=!1;let n=t.options.length===1,r=t.options[0]._zod.run;e._zod.parse=(i,a)=>{if(n)return r(i,a);let o=!1,s=[];for(let e of t.options){let t=e._zod.run({value:i.value,issues:[]},a);t instanceof Promise?(s.push(t),o=!0):s.push(t)}return o?Promise.all(s).then(t=>ei(t,i,e,a)):ei(s,i,e,a)}}),ni=n(`$ZodDiscriminatedUnion`,(e,t)=>{t.inclusive=!1,$r.init(e,t);let n=e._zod.parse;m(e._zod,`propValues`,()=>{let e={};for(let n of t.options){let r=n._zod.propValues;if(!r||Object.keys(r).length===0)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(n)}"`);for(let[t,n]of Object.entries(r)){e[t]||(e[t]=new Set);for(let r of n)e[t].add(r)}}return e});let r=ie(()=>{let e=t.options,n=new Map;for(let r of e){let e=r._zod.propValues?.[t.discriminator];if(!e||e.size===0)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(r)}"`);for(let t of e){if(n.has(t))throw Error(`Duplicate discriminator value "${String(t)}"`);n.set(t,r)}}return n});e._zod.parse=(i,a)=>{let o=i.value;if(!ge(o))return i.issues.push({code:`invalid_type`,expected:`object`,input:o,inst:e}),i;let s=r.value.get(o?.[t.discriminator]);return s?s._zod.run(i,a):t.unionFallback?n(i,a):(i.issues.push({code:`invalid_union`,errors:[],note:`No matching discriminator`,discriminator:t.discriminator,input:o,path:[t.discriminator],inst:e}),i)}}),ri=n(`$ZodIntersection`,(e,t)=>{A.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>ai(e,t,n)):ai(e,i,a)}});function ii(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(_(e)&&_(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=ii(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;re.l&&e.r).map(([e])=>e);if(a.length&&i&&e.issues.push({...i,keys:a}),S(e))return e;let o=ii(t.value,n.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return e.value=o.data,e}var oi=n(`$ZodTuple`,(e,t)=>{A.init(e,t);let n=t.items;e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({input:a,inst:e,expected:`tuple`,code:`invalid_type`}),r;r.value=[];let o=[],s=[...n].reverse().findIndex(e=>e._zod.optin!==`optional`),c=s===-1?0:n.length-s;if(!t.rest){let t=a.length>n.length,i=a.length=a.length&&l>=c)continue;let t=e._zod.run({value:a[l],issues:[]},i);t instanceof Promise?o.push(t.then(e=>si(e,r,l))):si(t,r,l)}if(t.rest){let e=a.slice(n.length);for(let n of e){l++;let e=t.rest._zod.run({value:n,issues:[]},i);e instanceof Promise?o.push(e.then(e=>si(e,r,l))):si(e,r,l)}}return o.length?Promise.all(o).then(()=>r):r}});function si(e,t,n){e.issues.length&&t.issues.push(...C(n,e.issues)),t.value[n]=e.value}var ci=n(`$ZodRecord`,(e,t)=>{A.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!_(i))return n.issues.push({expected:`record`,code:`invalid_type`,input:i,inst:e}),n;let a=[],o=t.keyType._zod.values;if(o){n.value={};let s=new Set;for(let e of o)if(typeof e==`string`||typeof e==`number`||typeof e==`symbol`){s.add(typeof e==`number`?e.toString():e);let o=t.valueType._zod.run({value:i[e],issues:[]},r);o instanceof Promise?a.push(o.then(t=>{t.issues.length&&n.issues.push(...C(e,t.issues)),n.value[e]=t.value})):(o.issues.length&&n.issues.push(...C(e,o.issues)),n.value[e]=o.value)}let c;for(let e in i)s.has(e)||(c??=[],c.push(e));c&&c.length>0&&n.issues.push({code:`unrecognized_keys`,input:i,inst:e,keys:c})}else{n.value={};for(let o of Reflect.ownKeys(i)){if(o===`__proto__`)continue;let c=t.keyType._zod.run({value:o,issues:[]},r);if(c instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof o==`string`&&cn.test(o)&&c.issues.length){let e=t.keyType._zod.run({value:Number(o),issues:[]},r);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(c=e)}if(c.issues.length){t.mode===`loose`?n.value[o]=i[o]:n.issues.push({code:`invalid_key`,origin:`record`,issues:c.issues.map(e=>w(e,r,s())),input:o,path:[o],inst:e});continue}let l=t.valueType._zod.run({value:i[o],issues:[]},r);l instanceof Promise?a.push(l.then(e=>{e.issues.length&&n.issues.push(...C(o,e.issues)),n.value[c.value]=e.value})):(l.issues.length&&n.issues.push(...C(o,l.issues)),n.value[c.value]=l.value)}}return a.length?Promise.all(a).then(()=>n):n}}),li=n(`$ZodMap`,(e,t)=>{A.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!(i instanceof Map))return n.issues.push({expected:`map`,code:`invalid_type`,input:i,inst:e}),n;let a=[];n.value=new Map;for(let[o,s]of i){let c=t.keyType._zod.run({value:o,issues:[]},r),l=t.valueType._zod.run({value:s,issues:[]},r);c instanceof Promise||l instanceof Promise?a.push(Promise.all([c,l]).then(([t,a])=>{ui(t,a,n,o,i,e,r)})):ui(c,l,n,o,i,e,r)}return a.length?Promise.all(a).then(()=>n):n}});function ui(e,t,n,r,i,a,o){e.issues.length&&(xe.has(typeof r)?n.issues.push(...C(r,e.issues)):n.issues.push({code:`invalid_key`,origin:`map`,input:i,inst:a,issues:e.issues.map(e=>w(e,o,s()))})),t.issues.length&&(xe.has(typeof r)?n.issues.push(...C(r,t.issues)):n.issues.push({origin:`map`,code:`invalid_element`,input:i,inst:a,key:r,issues:t.issues.map(e=>w(e,o,s()))})),n.value.set(e.value,t.value)}var di=n(`$ZodSet`,(e,t)=>{A.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!(i instanceof Set))return n.issues.push({input:i,inst:e,expected:`set`,code:`invalid_type`}),n;let a=[];n.value=new Set;for(let e of i){let i=t.valueType._zod.run({value:e,issues:[]},r);i instanceof Promise?a.push(i.then(e=>fi(e,n))):fi(i,n)}return a.length?Promise.all(a).then(()=>n):n}});function fi(e,t){e.issues.length&&t.issues.push(...e.issues),t.value.add(e.value)}var pi=n(`$ZodEnum`,(e,t)=>{A.init(e,t);let n=ne(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>xe.has(typeof e)).map(e=>typeof e==`string`?v(e):e.toString()).join(`|`)})$`),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),mi=n(`$ZodLiteral`,(e,t)=>{if(A.init(e,t),t.values.length===0)throw Error(`Cannot create literal schema with no valid values`);let n=new Set(t.values);e._zod.values=n,e._zod.pattern=RegExp(`^(${t.values.map(e=>typeof e==`string`?v(e):e?v(e.toString()):String(e)).join(`|`)})$`),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),hi=n(`$ZodFile`,(e,t)=>{A.init(e,t),e._zod.parse=(t,n)=>{let r=t.value;return r instanceof File||t.issues.push({expected:`file`,code:`invalid_type`,input:r,inst:e}),t}}),gi=n(`$ZodTransform`,(e,t)=>{A.init(e,t),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new a(e.constructor.name);let o=t.transform(n.value,n);if(r.async)return(o instanceof Promise?o:Promise.resolve(o)).then(e=>(n.value=e,n));if(o instanceof Promise)throw new i;return n.value=o,n}});function _i(e,t){return e.issues.length&&t===void 0?{issues:[],value:void 0}:e}var vi=n(`$ZodOptional`,(e,t)=>{A.init(e,t),e._zod.optin=`optional`,e._zod.optout=`optional`,m(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),m(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${ae(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(t.innerType._zod.optin===`optional`){let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(t=>_i(t,e.value)):_i(r,e.value)}return e.value===void 0?e:t.innerType._zod.run(e,n)}}),yi=n(`$ZodExactOptional`,(e,t)=>{vi.init(e,t),m(e._zod,`values`,()=>t.innerType._zod.values),m(e._zod,`pattern`,()=>t.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),bi=n(`$ZodNullable`,(e,t)=>{A.init(e,t),m(e._zod,`optin`,()=>t.innerType._zod.optin),m(e._zod,`optout`,()=>t.innerType._zod.optout),m(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${ae(e.source)}|null)$`):void 0}),m(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),xi=n(`$ZodDefault`,(e,t)=>{A.init(e,t),e._zod.optin=`optional`,m(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>Si(e,t)):Si(r,t)}});function Si(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var Ci=n(`$ZodPrefault`,(e,t)=>{A.init(e,t),e._zod.optin=`optional`,m(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),wi=n(`$ZodNonOptional`,(e,t)=>{A.init(e,t),m(e._zod,`values`,()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>Ti(t,e)):Ti(i,e)}});function Ti(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}var Ei=n(`$ZodSuccess`,(e,t)=>{A.init(e,t),e._zod.parse=(e,n)=>{if(n.direction===`backward`)throw new a(`ZodSuccess`);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(t=>(e.value=t.issues.length===0,e)):(e.value=r.issues.length===0,e)}}),Di=n(`$ZodCatch`,(e,t)=>{A.init(e,t),m(e._zod,`optin`,()=>t.innerType._zod.optin),m(e._zod,`optout`,()=>t.innerType._zod.optout),m(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>w(e,n,s()))},input:e.value}),e.issues=[]),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>w(e,n,s()))},input:e.value}),e.issues=[]),e)}}),Oi=n(`$ZodNaN`,(e,t)=>{A.init(e,t),e._zod.parse=(t,n)=>((typeof t.value!=`number`||!Number.isNaN(t.value))&&t.issues.push({input:t.value,inst:e,expected:`nan`,code:`invalid_type`}),t)}),ki=n(`$ZodPipe`,(e,t)=>{A.init(e,t),m(e._zod,`values`,()=>t.in._zod.values),m(e._zod,`optin`,()=>t.in._zod.optin),m(e._zod,`optout`,()=>t.out._zod.optout),m(e._zod,`propValues`,()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>Ai(e,t.in,n)):Ai(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>Ai(e,t.out,n)):Ai(r,t.out,n)}});function Ai(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues},n)}var ji=n(`$ZodCodec`,(e,t)=>{A.init(e,t),m(e._zod,`values`,()=>t.in._zod.values),m(e._zod,`optin`,()=>t.in._zod.optin),m(e._zod,`optout`,()=>t.out._zod.optout),m(e._zod,`propValues`,()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if((n.direction||`forward`)===`forward`){let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>Mi(e,t,n)):Mi(r,t,n)}else{let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>Mi(e,t,n)):Mi(r,t,n)}}});function Mi(e,t,n){if(e.issues.length)return e.aborted=!0,e;if((n.direction||`forward`)===`forward`){let r=t.transform(e.value,e);return r instanceof Promise?r.then(r=>Ni(e,r,t.out,n)):Ni(e,r,t.out,n)}else{let r=t.reverseTransform(e.value,e);return r instanceof Promise?r.then(r=>Ni(e,r,t.in,n)):Ni(e,r,t.in,n)}}function Ni(e,t,n,r){return e.issues.length?(e.aborted=!0,e):n._zod.run({value:t,issues:e.issues},r)}var Pi=n(`$ZodReadonly`,(e,t)=>{A.init(e,t),m(e._zod,`propValues`,()=>t.innerType._zod.propValues),m(e._zod,`values`,()=>t.innerType._zod.values),m(e._zod,`optin`,()=>t.innerType?._zod?.optin),m(e._zod,`optout`,()=>t.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(Fi):Fi(r)}});function Fi(e){return e.value=Object.freeze(e.value),e}var Ii=n(`$ZodTemplateLiteral`,(e,t)=>{A.init(e,t);let n=[];for(let e of t.parts)if(typeof e==`object`&&e){if(!e._zod.pattern)throw Error(`Invalid template literal part, no pattern found: ${[...e._zod.traits].shift()}`);let t=e._zod.pattern instanceof RegExp?e._zod.pattern.source:e._zod.pattern;if(!t)throw Error(`Invalid template literal part: ${e._zod.traits}`);let r=+!!t.startsWith(`^`),i=t.endsWith(`$`)?t.length-1:t.length;n.push(t.slice(r,i))}else if(e===null||Se.has(typeof e))n.push(v(`${e}`));else throw Error(`Invalid template literal part: ${e}`);e._zod.pattern=RegExp(`^${n.join(``)}$`),e._zod.parse=(n,r)=>typeof n.value==`string`?(e._zod.pattern.lastIndex=0,e._zod.pattern.test(n.value)||n.issues.push({input:n.value,inst:e,code:`invalid_format`,format:t.format??`template_literal`,pattern:e._zod.pattern.source}),n):(n.issues.push({input:n.value,inst:e,expected:`string`,code:`invalid_type`}),n)}),Li=n(`$ZodFunction`,(e,t)=>(A.init(e,t),e._def=t,e._zod.def=t,e.implement=t=>{if(typeof t!=`function`)throw Error(`implement() must be called with a function`);return function(...n){let r=e._def.input?$e(e._def.input,n):n,i=Reflect.apply(t,this,r);return e._def.output?$e(e._def.output,i):i}},e.implementAsync=t=>{if(typeof t!=`function`)throw Error(`implementAsync() must be called with a function`);return async function(...n){let r=e._def.input?await tt(e._def.input,n):n,i=await Reflect.apply(t,this,r);return e._def.output?await tt(e._def.output,i):i}},e._zod.parse=(t,n)=>typeof t.value==`function`?(e._def.output&&e._def.output._zod.def.type===`promise`?t.value=e.implementAsync(t.value):t.value=e.implement(t.value),t):(t.issues.push({code:`invalid_type`,expected:`function`,input:t.value,inst:e}),t),e.input=(...t)=>{let n=e.constructor;return Array.isArray(t[0])?new n({type:`function`,input:new oi({type:`tuple`,items:t[0],rest:t[1]}),output:e._def.output}):new n({type:`function`,input:t[0],output:e._def.output})},e.output=t=>{let n=e.constructor;return new n({type:`function`,input:e._def.input,output:t})},e)),Ri=n(`$ZodPromise`,(e,t)=>{A.init(e,t),e._zod.parse=(e,n)=>Promise.resolve(e.value).then(e=>t.innerType._zod.run({value:e,issues:[]},n))}),zi=n(`$ZodLazy`,(e,t)=>{A.init(e,t),m(e._zod,`innerType`,()=>t.getter()),m(e._zod,`pattern`,()=>e._zod.innerType?._zod?.pattern),m(e._zod,`propValues`,()=>e._zod.innerType?._zod?.propValues),m(e._zod,`optin`,()=>e._zod.innerType?._zod?.optin??void 0),m(e._zod,`optout`,()=>e._zod.innerType?._zod?.optout??void 0),e._zod.parse=(t,n)=>e._zod.innerType._zod.run(t,n)}),Bi=n(`$ZodCustom`,(e,t)=>{k.init(e,t),A.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>Vi(t,n,r,e));Vi(i,n,r,e)}});function Vi(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(E(e))}}var Hi=()=>{let e={string:{unit:`حرف`,verb:`أن يحوي`},file:{unit:`بايت`,verb:`أن يحوي`},array:{unit:`عنصر`,verb:`أن يحوي`},set:{unit:`عنصر`,verb:`أن يحوي`}};function t(t){return e[t]??null}let n={regex:`مدخل`,email:`بريد إلكتروني`,url:`رابط`,emoji:`إيموجي`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`تاريخ ووقت بمعيار ISO`,date:`تاريخ بمعيار ISO`,time:`وقت بمعيار ISO`,duration:`مدة بمعيار ISO`,ipv4:`عنوان IPv4`,ipv6:`عنوان IPv6`,cidrv4:`مدى عناوين بصيغة IPv4`,cidrv6:`مدى عناوين بصيغة IPv6`,base64:`نَص بترميز base64-encoded`,base64url:`نَص بترميز base64url-encoded`,json_string:`نَص على هيئة JSON`,e164:`رقم هاتف بمعيار E.164`,jwt:`JWT`,template_literal:`مدخل`},r={nan:`NaN`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`مدخلات غير مقبولة: يفترض إدخال instanceof ${e.expected}، ولكن تم إدخال ${i}`:`مدخلات غير مقبولة: يفترض إدخال ${t}، ولكن تم إدخال ${i}`}case`invalid_value`:return e.values.length===1?`مدخلات غير مقبولة: يفترض إدخال ${x(e.values[0])}`:`اختيار غير مقبول: يتوقع انتقاء أحد هذه الخيارات: ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?` أكبر من اللازم: يفترض أن تكون ${e.origin??`القيمة`} ${n} ${e.maximum.toString()} ${r.unit??`عنصر`}`:`أكبر من اللازم: يفترض أن تكون ${e.origin??`القيمة`} ${n} ${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`أصغر من اللازم: يفترض لـ ${e.origin} أن يكون ${n} ${e.minimum.toString()} ${r.unit}`:`أصغر من اللازم: يفترض لـ ${e.origin} أن يكون ${n} ${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`نَص غير مقبول: يجب أن يبدأ بـ "${e.prefix}"`:t.format===`ends_with`?`نَص غير مقبول: يجب أن ينتهي بـ "${t.suffix}"`:t.format===`includes`?`نَص غير مقبول: يجب أن يتضمَّن "${t.includes}"`:t.format===`regex`?`نَص غير مقبول: يجب أن يطابق النمط ${t.pattern}`:`${n[t.format]??e.format} غير مقبول`}case`not_multiple_of`:return`رقم غير مقبول: يجب أن يكون من مضاعفات ${e.divisor}`;case`unrecognized_keys`:return`معرف${e.keys.length>1?`ات`:``} غريب${e.keys.length>1?`ة`:``}: ${f(e.keys,`، `)}`;case`invalid_key`:return`معرف غير مقبول في ${e.origin}`;case`invalid_union`:return`مدخل غير مقبول`;case`invalid_element`:return`مدخل غير مقبول في ${e.origin}`;default:return`مدخل غير مقبول`}}};function Ui(){return{localeError:Hi()}}var Wi=()=>{let e={string:{unit:`simvol`,verb:`olmalıdır`},file:{unit:`bayt`,verb:`olmalıdır`},array:{unit:`element`,verb:`olmalıdır`},set:{unit:`element`,verb:`olmalıdır`}};function t(t){return e[t]??null}let n={regex:`input`,email:`email address`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO datetime`,date:`ISO date`,time:`ISO time`,duration:`ISO duration`,ipv4:`IPv4 address`,ipv6:`IPv6 address`,cidrv4:`IPv4 range`,cidrv6:`IPv6 range`,base64:`base64-encoded string`,base64url:`base64url-encoded string`,json_string:`JSON string`,e164:`E.164 number`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Yanlış dəyər: gözlənilən instanceof ${e.expected}, daxil olan ${i}`:`Yanlış dəyər: gözlənilən ${t}, daxil olan ${i}`}case`invalid_value`:return e.values.length===1?`Yanlış dəyər: gözlənilən ${x(e.values[0])}`:`Yanlış seçim: aşağıdakılardan biri olmalıdır: ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Çox böyük: gözlənilən ${e.origin??`dəyər`} ${n}${e.maximum.toString()} ${r.unit??`element`}`:`Çox böyük: gözlənilən ${e.origin??`dəyər`} ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Çox kiçik: gözlənilən ${e.origin} ${n}${e.minimum.toString()} ${r.unit}`:`Çox kiçik: gözlənilən ${e.origin} ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Yanlış mətn: "${t.prefix}" ilə başlamalıdır`:t.format===`ends_with`?`Yanlış mətn: "${t.suffix}" ilə bitməlidir`:t.format===`includes`?`Yanlış mətn: "${t.includes}" daxil olmalıdır`:t.format===`regex`?`Yanlış mətn: ${t.pattern} şablonuna uyğun olmalıdır`:`Yanlış ${n[t.format]??e.format}`}case`not_multiple_of`:return`Yanlış ədəd: ${e.divisor} ilə bölünə bilən olmalıdır`;case`unrecognized_keys`:return`Tanınmayan açar${e.keys.length>1?`lar`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`${e.origin} daxilində yanlış açar`;case`invalid_union`:return`Yanlış dəyər`;case`invalid_element`:return`${e.origin} daxilində yanlış dəyər`;default:return`Yanlış dəyər`}}};function Gi(){return{localeError:Wi()}}function Ki(e,t,n,r){let i=Math.abs(e),a=i%10,o=i%100;return o>=11&&o<=19?r:a===1?t:a>=2&&a<=4?n:r}var qi=()=>{let e={string:{unit:{one:`сімвал`,few:`сімвалы`,many:`сімвалаў`},verb:`мець`},array:{unit:{one:`элемент`,few:`элементы`,many:`элементаў`},verb:`мець`},set:{unit:{one:`элемент`,few:`элементы`,many:`элементаў`},verb:`мець`},file:{unit:{one:`байт`,few:`байты`,many:`байтаў`},verb:`мець`}};function t(t){return e[t]??null}let n={regex:`увод`,email:`email адрас`,url:`URL`,emoji:`эмодзі`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO дата і час`,date:`ISO дата`,time:`ISO час`,duration:`ISO працягласць`,ipv4:`IPv4 адрас`,ipv6:`IPv6 адрас`,cidrv4:`IPv4 дыяпазон`,cidrv6:`IPv6 дыяпазон`,base64:`радок у фармаце base64`,base64url:`радок у фармаце base64url`,json_string:`JSON радок`,e164:`нумар E.164`,jwt:`JWT`,template_literal:`увод`},r={nan:`NaN`,number:`лік`,array:`масіў`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Няправільны ўвод: чакаўся instanceof ${e.expected}, атрымана ${i}`:`Няправільны ўвод: чакаўся ${t}, атрымана ${i}`}case`invalid_value`:return e.values.length===1?`Няправільны ўвод: чакалася ${x(e.values[0])}`:`Няправільны варыянт: чакаўся адзін з ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);if(r){let t=Ki(Number(e.maximum),r.unit.one,r.unit.few,r.unit.many);return`Занадта вялікі: чакалася, што ${e.origin??`значэнне`} павінна ${r.verb} ${n}${e.maximum.toString()} ${t}`}return`Занадта вялікі: чакалася, што ${e.origin??`значэнне`} павінна быць ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);if(r){let t=Ki(Number(e.minimum),r.unit.one,r.unit.few,r.unit.many);return`Занадта малы: чакалася, што ${e.origin} павінна ${r.verb} ${n}${e.minimum.toString()} ${t}`}return`Занадта малы: чакалася, што ${e.origin} павінна быць ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Няправільны радок: павінен пачынацца з "${t.prefix}"`:t.format===`ends_with`?`Няправільны радок: павінен заканчвацца на "${t.suffix}"`:t.format===`includes`?`Няправільны радок: павінен змяшчаць "${t.includes}"`:t.format===`regex`?`Няправільны радок: павінен адпавядаць шаблону ${t.pattern}`:`Няправільны ${n[t.format]??e.format}`}case`not_multiple_of`:return`Няправільны лік: павінен быць кратным ${e.divisor}`;case`unrecognized_keys`:return`Нераспазнаны ${e.keys.length>1?`ключы`:`ключ`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Няправільны ключ у ${e.origin}`;case`invalid_union`:return`Няправільны ўвод`;case`invalid_element`:return`Няправільнае значэнне ў ${e.origin}`;default:return`Няправільны ўвод`}}};function Ji(){return{localeError:qi()}}var Yi=()=>{let e={string:{unit:`символа`,verb:`да съдържа`},file:{unit:`байта`,verb:`да съдържа`},array:{unit:`елемента`,verb:`да съдържа`},set:{unit:`елемента`,verb:`да съдържа`}};function t(t){return e[t]??null}let n={regex:`вход`,email:`имейл адрес`,url:`URL`,emoji:`емоджи`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO време`,date:`ISO дата`,time:`ISO време`,duration:`ISO продължителност`,ipv4:`IPv4 адрес`,ipv6:`IPv6 адрес`,cidrv4:`IPv4 диапазон`,cidrv6:`IPv6 диапазон`,base64:`base64-кодиран низ`,base64url:`base64url-кодиран низ`,json_string:`JSON низ`,e164:`E.164 номер`,jwt:`JWT`,template_literal:`вход`},r={nan:`NaN`,number:`число`,array:`масив`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Невалиден вход: очакван instanceof ${e.expected}, получен ${i}`:`Невалиден вход: очакван ${t}, получен ${i}`}case`invalid_value`:return e.values.length===1?`Невалиден вход: очакван ${x(e.values[0])}`:`Невалидна опция: очаквано едно от ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Твърде голямо: очаква се ${e.origin??`стойност`} да съдържа ${n}${e.maximum.toString()} ${r.unit??`елемента`}`:`Твърде голямо: очаква се ${e.origin??`стойност`} да бъде ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Твърде малко: очаква се ${e.origin} да съдържа ${n}${e.minimum.toString()} ${r.unit}`:`Твърде малко: очаква се ${e.origin} да бъде ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;if(t.format===`starts_with`)return`Невалиден низ: трябва да започва с "${t.prefix}"`;if(t.format===`ends_with`)return`Невалиден низ: трябва да завършва с "${t.suffix}"`;if(t.format===`includes`)return`Невалиден низ: трябва да включва "${t.includes}"`;if(t.format===`regex`)return`Невалиден низ: трябва да съвпада с ${t.pattern}`;let r=`Невалиден`;return t.format===`emoji`&&(r=`Невалидно`),t.format===`datetime`&&(r=`Невалидно`),t.format===`date`&&(r=`Невалидна`),t.format===`time`&&(r=`Невалидно`),t.format===`duration`&&(r=`Невалидна`),`${r} ${n[t.format]??e.format}`}case`not_multiple_of`:return`Невалидно число: трябва да бъде кратно на ${e.divisor}`;case`unrecognized_keys`:return`Неразпознат${e.keys.length>1?`и`:``} ключ${e.keys.length>1?`ове`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Невалиден ключ в ${e.origin}`;case`invalid_union`:return`Невалиден вход`;case`invalid_element`:return`Невалидна стойност в ${e.origin}`;default:return`Невалиден вход`}}};function Xi(){return{localeError:Yi()}}var Zi=()=>{let e={string:{unit:`caràcters`,verb:`contenir`},file:{unit:`bytes`,verb:`contenir`},array:{unit:`elements`,verb:`contenir`},set:{unit:`elements`,verb:`contenir`}};function t(t){return e[t]??null}let n={regex:`entrada`,email:`adreça electrònica`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`data i hora ISO`,date:`data ISO`,time:`hora ISO`,duration:`durada ISO`,ipv4:`adreça IPv4`,ipv6:`adreça IPv6`,cidrv4:`rang IPv4`,cidrv6:`rang IPv6`,base64:`cadena codificada en base64`,base64url:`cadena codificada en base64url`,json_string:`cadena JSON`,e164:`número E.164`,jwt:`JWT`,template_literal:`entrada`},r={nan:`NaN`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Tipus invàlid: s'esperava instanceof ${e.expected}, s'ha rebut ${i}`:`Tipus invàlid: s'esperava ${t}, s'ha rebut ${i}`}case`invalid_value`:return e.values.length===1?`Valor invàlid: s'esperava ${x(e.values[0])}`:`Opció invàlida: s'esperava una de ${f(e.values,` o `)}`;case`too_big`:{let n=e.inclusive?`com a màxim`:`menys de`,r=t(e.origin);return r?`Massa gran: s'esperava que ${e.origin??`el valor`} contingués ${n} ${e.maximum.toString()} ${r.unit??`elements`}`:`Massa gran: s'esperava que ${e.origin??`el valor`} fos ${n} ${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`com a mínim`:`més de`,r=t(e.origin);return r?`Massa petit: s'esperava que ${e.origin} contingués ${n} ${e.minimum.toString()} ${r.unit}`:`Massa petit: s'esperava que ${e.origin} fos ${n} ${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Format invàlid: ha de començar amb "${t.prefix}"`:t.format===`ends_with`?`Format invàlid: ha d'acabar amb "${t.suffix}"`:t.format===`includes`?`Format invàlid: ha d'incloure "${t.includes}"`:t.format===`regex`?`Format invàlid: ha de coincidir amb el patró ${t.pattern}`:`Format invàlid per a ${n[t.format]??e.format}`}case`not_multiple_of`:return`Número invàlid: ha de ser múltiple de ${e.divisor}`;case`unrecognized_keys`:return`Clau${e.keys.length>1?`s`:``} no reconeguda${e.keys.length>1?`s`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Clau invàlida a ${e.origin}`;case`invalid_union`:return`Entrada invàlida`;case`invalid_element`:return`Element invàlid a ${e.origin}`;default:return`Entrada invàlida`}}};function Qi(){return{localeError:Zi()}}var $i=()=>{let e={string:{unit:`znaků`,verb:`mít`},file:{unit:`bajtů`,verb:`mít`},array:{unit:`prvků`,verb:`mít`},set:{unit:`prvků`,verb:`mít`}};function t(t){return e[t]??null}let n={regex:`regulární výraz`,email:`e-mailová adresa`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`datum a čas ve formátu ISO`,date:`datum ve formátu ISO`,time:`čas ve formátu ISO`,duration:`doba trvání ISO`,ipv4:`IPv4 adresa`,ipv6:`IPv6 adresa`,cidrv4:`rozsah IPv4`,cidrv6:`rozsah IPv6`,base64:`řetězec zakódovaný ve formátu base64`,base64url:`řetězec zakódovaný ve formátu base64url`,json_string:`řetězec ve formátu JSON`,e164:`číslo E.164`,jwt:`JWT`,template_literal:`vstup`},r={nan:`NaN`,number:`číslo`,string:`řetězec`,function:`funkce`,array:`pole`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Neplatný vstup: očekáváno instanceof ${e.expected}, obdrženo ${i}`:`Neplatný vstup: očekáváno ${t}, obdrženo ${i}`}case`invalid_value`:return e.values.length===1?`Neplatný vstup: očekáváno ${x(e.values[0])}`:`Neplatná možnost: očekávána jedna z hodnot ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Hodnota je příliš velká: ${e.origin??`hodnota`} musí mít ${n}${e.maximum.toString()} ${r.unit??`prvků`}`:`Hodnota je příliš velká: ${e.origin??`hodnota`} musí být ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Hodnota je příliš malá: ${e.origin??`hodnota`} musí mít ${n}${e.minimum.toString()} ${r.unit??`prvků`}`:`Hodnota je příliš malá: ${e.origin??`hodnota`} musí být ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Neplatný řetězec: musí začínat na "${t.prefix}"`:t.format===`ends_with`?`Neplatný řetězec: musí končit na "${t.suffix}"`:t.format===`includes`?`Neplatný řetězec: musí obsahovat "${t.includes}"`:t.format===`regex`?`Neplatný řetězec: musí odpovídat vzoru ${t.pattern}`:`Neplatný formát ${n[t.format]??e.format}`}case`not_multiple_of`:return`Neplatné číslo: musí být násobkem ${e.divisor}`;case`unrecognized_keys`:return`Neznámé klíče: ${f(e.keys,`, `)}`;case`invalid_key`:return`Neplatný klíč v ${e.origin}`;case`invalid_union`:return`Neplatný vstup`;case`invalid_element`:return`Neplatná hodnota v ${e.origin}`;default:return`Neplatný vstup`}}};function ea(){return{localeError:$i()}}var ta=()=>{let e={string:{unit:`tegn`,verb:`havde`},file:{unit:`bytes`,verb:`havde`},array:{unit:`elementer`,verb:`indeholdt`},set:{unit:`elementer`,verb:`indeholdt`}};function t(t){return e[t]??null}let n={regex:`input`,email:`e-mailadresse`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO dato- og klokkeslæt`,date:`ISO-dato`,time:`ISO-klokkeslæt`,duration:`ISO-varighed`,ipv4:`IPv4-område`,ipv6:`IPv6-område`,cidrv4:`IPv4-spektrum`,cidrv6:`IPv6-spektrum`,base64:`base64-kodet streng`,base64url:`base64url-kodet streng`,json_string:`JSON-streng`,e164:`E.164-nummer`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`,string:`streng`,number:`tal`,boolean:`boolean`,array:`liste`,object:`objekt`,set:`sæt`,file:`fil`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Ugyldigt input: forventede instanceof ${e.expected}, fik ${i}`:`Ugyldigt input: forventede ${t}, fik ${i}`}case`invalid_value`:return e.values.length===1?`Ugyldig værdi: forventede ${x(e.values[0])}`:`Ugyldigt valg: forventede en af følgende ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,i=t(e.origin),a=r[e.origin]??e.origin;return i?`For stor: forventede ${a??`value`} ${i.verb} ${n} ${e.maximum.toString()} ${i.unit??`elementer`}`:`For stor: forventede ${a??`value`} havde ${n} ${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,i=t(e.origin),a=r[e.origin]??e.origin;return i?`For lille: forventede ${a} ${i.verb} ${n} ${e.minimum.toString()} ${i.unit}`:`For lille: forventede ${a} havde ${n} ${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Ugyldig streng: skal starte med "${t.prefix}"`:t.format===`ends_with`?`Ugyldig streng: skal ende med "${t.suffix}"`:t.format===`includes`?`Ugyldig streng: skal indeholde "${t.includes}"`:t.format===`regex`?`Ugyldig streng: skal matche mønsteret ${t.pattern}`:`Ugyldig ${n[t.format]??e.format}`}case`not_multiple_of`:return`Ugyldigt tal: skal være deleligt med ${e.divisor}`;case`unrecognized_keys`:return`${e.keys.length>1?`Ukendte nøgler`:`Ukendt nøgle`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Ugyldig nøgle i ${e.origin}`;case`invalid_union`:return`Ugyldigt input: matcher ingen af de tilladte typer`;case`invalid_element`:return`Ugyldig værdi i ${e.origin}`;default:return`Ugyldigt input`}}};function na(){return{localeError:ta()}}var ra=()=>{let e={string:{unit:`Zeichen`,verb:`zu haben`},file:{unit:`Bytes`,verb:`zu haben`},array:{unit:`Elemente`,verb:`zu haben`},set:{unit:`Elemente`,verb:`zu haben`}};function t(t){return e[t]??null}let n={regex:`Eingabe`,email:`E-Mail-Adresse`,url:`URL`,emoji:`Emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO-Datum und -Uhrzeit`,date:`ISO-Datum`,time:`ISO-Uhrzeit`,duration:`ISO-Dauer`,ipv4:`IPv4-Adresse`,ipv6:`IPv6-Adresse`,cidrv4:`IPv4-Bereich`,cidrv6:`IPv6-Bereich`,base64:`Base64-codierter String`,base64url:`Base64-URL-codierter String`,json_string:`JSON-String`,e164:`E.164-Nummer`,jwt:`JWT`,template_literal:`Eingabe`},r={nan:`NaN`,number:`Zahl`,array:`Array`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Ungültige Eingabe: erwartet instanceof ${e.expected}, erhalten ${i}`:`Ungültige Eingabe: erwartet ${t}, erhalten ${i}`}case`invalid_value`:return e.values.length===1?`Ungültige Eingabe: erwartet ${x(e.values[0])}`:`Ungültige Option: erwartet eine von ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Zu groß: erwartet, dass ${e.origin??`Wert`} ${n}${e.maximum.toString()} ${r.unit??`Elemente`} hat`:`Zu groß: erwartet, dass ${e.origin??`Wert`} ${n}${e.maximum.toString()} ist`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Zu klein: erwartet, dass ${e.origin} ${n}${e.minimum.toString()} ${r.unit} hat`:`Zu klein: erwartet, dass ${e.origin} ${n}${e.minimum.toString()} ist`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Ungültiger String: muss mit "${t.prefix}" beginnen`:t.format===`ends_with`?`Ungültiger String: muss mit "${t.suffix}" enden`:t.format===`includes`?`Ungültiger String: muss "${t.includes}" enthalten`:t.format===`regex`?`Ungültiger String: muss dem Muster ${t.pattern} entsprechen`:`Ungültig: ${n[t.format]??e.format}`}case`not_multiple_of`:return`Ungültige Zahl: muss ein Vielfaches von ${e.divisor} sein`;case`unrecognized_keys`:return`${e.keys.length>1?`Unbekannte Schlüssel`:`Unbekannter Schlüssel`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Ungültiger Schlüssel in ${e.origin}`;case`invalid_union`:return`Ungültige Eingabe`;case`invalid_element`:return`Ungültiger Wert in ${e.origin}`;default:return`Ungültige Eingabe`}}};function ia(){return{localeError:ra()}}var aa=()=>{let e={string:{unit:`characters`,verb:`to have`},file:{unit:`bytes`,verb:`to have`},array:{unit:`items`,verb:`to have`},set:{unit:`items`,verb:`to have`},map:{unit:`entries`,verb:`to have`}};function t(t){return e[t]??null}let n={regex:`input`,email:`email address`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO datetime`,date:`ISO date`,time:`ISO time`,duration:`ISO duration`,ipv4:`IPv4 address`,ipv6:`IPv6 address`,mac:`MAC address`,cidrv4:`IPv4 range`,cidrv6:`IPv6 range`,base64:`base64-encoded string`,base64url:`base64url-encoded string`,json_string:`JSON string`,e164:`E.164 number`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input);return`Invalid input: expected ${t}, received ${r[n]??n}`}case`invalid_value`:return e.values.length===1?`Invalid input: expected ${x(e.values[0])}`:`Invalid option: expected one of ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Too big: expected ${e.origin??`value`} to have ${n}${e.maximum.toString()} ${r.unit??`elements`}`:`Too big: expected ${e.origin??`value`} to be ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Too small: expected ${e.origin} to have ${n}${e.minimum.toString()} ${r.unit}`:`Too small: expected ${e.origin} to be ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Invalid string: must start with "${t.prefix}"`:t.format===`ends_with`?`Invalid string: must end with "${t.suffix}"`:t.format===`includes`?`Invalid string: must include "${t.includes}"`:t.format===`regex`?`Invalid string: must match pattern ${t.pattern}`:`Invalid ${n[t.format]??e.format}`}case`not_multiple_of`:return`Invalid number: must be a multiple of ${e.divisor}`;case`unrecognized_keys`:return`Unrecognized key${e.keys.length>1?`s`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Invalid key in ${e.origin}`;case`invalid_union`:return`Invalid input`;case`invalid_element`:return`Invalid value in ${e.origin}`;default:return`Invalid input`}}};function oa(){return{localeError:aa()}}var sa=()=>{let e={string:{unit:`karaktrojn`,verb:`havi`},file:{unit:`bajtojn`,verb:`havi`},array:{unit:`elementojn`,verb:`havi`},set:{unit:`elementojn`,verb:`havi`}};function t(t){return e[t]??null}let n={regex:`enigo`,email:`retadreso`,url:`URL`,emoji:`emoĝio`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO-datotempo`,date:`ISO-dato`,time:`ISO-tempo`,duration:`ISO-daŭro`,ipv4:`IPv4-adreso`,ipv6:`IPv6-adreso`,cidrv4:`IPv4-rango`,cidrv6:`IPv6-rango`,base64:`64-ume kodita karaktraro`,base64url:`URL-64-ume kodita karaktraro`,json_string:`JSON-karaktraro`,e164:`E.164-nombro`,jwt:`JWT`,template_literal:`enigo`},r={nan:`NaN`,number:`nombro`,array:`tabelo`,null:`senvalora`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Nevalida enigo: atendiĝis instanceof ${e.expected}, riceviĝis ${i}`:`Nevalida enigo: atendiĝis ${t}, riceviĝis ${i}`}case`invalid_value`:return e.values.length===1?`Nevalida enigo: atendiĝis ${x(e.values[0])}`:`Nevalida opcio: atendiĝis unu el ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Tro granda: atendiĝis ke ${e.origin??`valoro`} havu ${n}${e.maximum.toString()} ${r.unit??`elementojn`}`:`Tro granda: atendiĝis ke ${e.origin??`valoro`} havu ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Tro malgranda: atendiĝis ke ${e.origin} havu ${n}${e.minimum.toString()} ${r.unit}`:`Tro malgranda: atendiĝis ke ${e.origin} estu ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Nevalida karaktraro: devas komenciĝi per "${t.prefix}"`:t.format===`ends_with`?`Nevalida karaktraro: devas finiĝi per "${t.suffix}"`:t.format===`includes`?`Nevalida karaktraro: devas inkluzivi "${t.includes}"`:t.format===`regex`?`Nevalida karaktraro: devas kongrui kun la modelo ${t.pattern}`:`Nevalida ${n[t.format]??e.format}`}case`not_multiple_of`:return`Nevalida nombro: devas esti oblo de ${e.divisor}`;case`unrecognized_keys`:return`Nekonata${e.keys.length>1?`j`:``} ŝlosilo${e.keys.length>1?`j`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Nevalida ŝlosilo en ${e.origin}`;case`invalid_union`:return`Nevalida enigo`;case`invalid_element`:return`Nevalida valoro en ${e.origin}`;default:return`Nevalida enigo`}}};function ca(){return{localeError:sa()}}var la=()=>{let e={string:{unit:`caracteres`,verb:`tener`},file:{unit:`bytes`,verb:`tener`},array:{unit:`elementos`,verb:`tener`},set:{unit:`elementos`,verb:`tener`}};function t(t){return e[t]??null}let n={regex:`entrada`,email:`dirección de correo electrónico`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`fecha y hora ISO`,date:`fecha ISO`,time:`hora ISO`,duration:`duración ISO`,ipv4:`dirección IPv4`,ipv6:`dirección IPv6`,cidrv4:`rango IPv4`,cidrv6:`rango IPv6`,base64:`cadena codificada en base64`,base64url:`URL codificada en base64`,json_string:`cadena JSON`,e164:`número E.164`,jwt:`JWT`,template_literal:`entrada`},r={nan:`NaN`,string:`texto`,number:`número`,boolean:`booleano`,array:`arreglo`,object:`objeto`,set:`conjunto`,file:`archivo`,date:`fecha`,bigint:`número grande`,symbol:`símbolo`,undefined:`indefinido`,null:`nulo`,function:`función`,map:`mapa`,record:`registro`,tuple:`tupla`,enum:`enumeración`,union:`unión`,literal:`literal`,promise:`promesa`,void:`vacío`,never:`nunca`,unknown:`desconocido`,any:`cualquiera`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Entrada inválida: se esperaba instanceof ${e.expected}, recibido ${i}`:`Entrada inválida: se esperaba ${t}, recibido ${i}`}case`invalid_value`:return e.values.length===1?`Entrada inválida: se esperaba ${x(e.values[0])}`:`Opción inválida: se esperaba una de ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,i=t(e.origin),a=r[e.origin]??e.origin;return i?`Demasiado grande: se esperaba que ${a??`valor`} tuviera ${n}${e.maximum.toString()} ${i.unit??`elementos`}`:`Demasiado grande: se esperaba que ${a??`valor`} fuera ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,i=t(e.origin),a=r[e.origin]??e.origin;return i?`Demasiado pequeño: se esperaba que ${a} tuviera ${n}${e.minimum.toString()} ${i.unit}`:`Demasiado pequeño: se esperaba que ${a} fuera ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Cadena inválida: debe comenzar con "${t.prefix}"`:t.format===`ends_with`?`Cadena inválida: debe terminar en "${t.suffix}"`:t.format===`includes`?`Cadena inválida: debe incluir "${t.includes}"`:t.format===`regex`?`Cadena inválida: debe coincidir con el patrón ${t.pattern}`:`Inválido ${n[t.format]??e.format}`}case`not_multiple_of`:return`Número inválido: debe ser múltiplo de ${e.divisor}`;case`unrecognized_keys`:return`Llave${e.keys.length>1?`s`:``} desconocida${e.keys.length>1?`s`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Llave inválida en ${r[e.origin]??e.origin}`;case`invalid_union`:return`Entrada inválida`;case`invalid_element`:return`Valor inválido en ${r[e.origin]??e.origin}`;default:return`Entrada inválida`}}};function ua(){return{localeError:la()}}var da=()=>{let e={string:{unit:`کاراکتر`,verb:`داشته باشد`},file:{unit:`بایت`,verb:`داشته باشد`},array:{unit:`آیتم`,verb:`داشته باشد`},set:{unit:`آیتم`,verb:`داشته باشد`}};function t(t){return e[t]??null}let n={regex:`ورودی`,email:`آدرس ایمیل`,url:`URL`,emoji:`ایموجی`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`تاریخ و زمان ایزو`,date:`تاریخ ایزو`,time:`زمان ایزو`,duration:`مدت زمان ایزو`,ipv4:`IPv4 آدرس`,ipv6:`IPv6 آدرس`,cidrv4:`IPv4 دامنه`,cidrv6:`IPv6 دامنه`,base64:`base64-encoded رشته`,base64url:`base64url-encoded رشته`,json_string:`JSON رشته`,e164:`E.164 عدد`,jwt:`JWT`,template_literal:`ورودی`},r={nan:`NaN`,number:`عدد`,array:`آرایه`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`ورودی نامعتبر: می‌بایست instanceof ${e.expected} می‌بود، ${i} دریافت شد`:`ورودی نامعتبر: می‌بایست ${t} می‌بود، ${i} دریافت شد`}case`invalid_value`:return e.values.length===1?`ورودی نامعتبر: می‌بایست ${x(e.values[0])} می‌بود`:`گزینه نامعتبر: می‌بایست یکی از ${f(e.values,`|`)} می‌بود`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`خیلی بزرگ: ${e.origin??`مقدار`} باید ${n}${e.maximum.toString()} ${r.unit??`عنصر`} باشد`:`خیلی بزرگ: ${e.origin??`مقدار`} باید ${n}${e.maximum.toString()} باشد`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`خیلی کوچک: ${e.origin} باید ${n}${e.minimum.toString()} ${r.unit} باشد`:`خیلی کوچک: ${e.origin} باید ${n}${e.minimum.toString()} باشد`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`رشته نامعتبر: باید با "${t.prefix}" شروع شود`:t.format===`ends_with`?`رشته نامعتبر: باید با "${t.suffix}" تمام شود`:t.format===`includes`?`رشته نامعتبر: باید شامل "${t.includes}" باشد`:t.format===`regex`?`رشته نامعتبر: باید با الگوی ${t.pattern} مطابقت داشته باشد`:`${n[t.format]??e.format} نامعتبر`}case`not_multiple_of`:return`عدد نامعتبر: باید مضرب ${e.divisor} باشد`;case`unrecognized_keys`:return`کلید${e.keys.length>1?`های`:``} ناشناس: ${f(e.keys,`, `)}`;case`invalid_key`:return`کلید ناشناس در ${e.origin}`;case`invalid_union`:return`ورودی نامعتبر`;case`invalid_element`:return`مقدار نامعتبر در ${e.origin}`;default:return`ورودی نامعتبر`}}};function fa(){return{localeError:da()}}var pa=()=>{let e={string:{unit:`merkkiä`,subject:`merkkijonon`},file:{unit:`tavua`,subject:`tiedoston`},array:{unit:`alkiota`,subject:`listan`},set:{unit:`alkiota`,subject:`joukon`},number:{unit:``,subject:`luvun`},bigint:{unit:``,subject:`suuren kokonaisluvun`},int:{unit:``,subject:`kokonaisluvun`},date:{unit:``,subject:`päivämäärän`}};function t(t){return e[t]??null}let n={regex:`säännöllinen lauseke`,email:`sähköpostiosoite`,url:`URL-osoite`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO-aikaleima`,date:`ISO-päivämäärä`,time:`ISO-aika`,duration:`ISO-kesto`,ipv4:`IPv4-osoite`,ipv6:`IPv6-osoite`,cidrv4:`IPv4-alue`,cidrv6:`IPv6-alue`,base64:`base64-koodattu merkkijono`,base64url:`base64url-koodattu merkkijono`,json_string:`JSON-merkkijono`,e164:`E.164-luku`,jwt:`JWT`,template_literal:`templaattimerkkijono`},r={nan:`NaN`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Virheellinen tyyppi: odotettiin instanceof ${e.expected}, oli ${i}`:`Virheellinen tyyppi: odotettiin ${t}, oli ${i}`}case`invalid_value`:return e.values.length===1?`Virheellinen syöte: täytyy olla ${x(e.values[0])}`:`Virheellinen valinta: täytyy olla yksi seuraavista: ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Liian suuri: ${r.subject} täytyy olla ${n}${e.maximum.toString()} ${r.unit}`.trim():`Liian suuri: arvon täytyy olla ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Liian pieni: ${r.subject} täytyy olla ${n}${e.minimum.toString()} ${r.unit}`.trim():`Liian pieni: arvon täytyy olla ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Virheellinen syöte: täytyy alkaa "${t.prefix}"`:t.format===`ends_with`?`Virheellinen syöte: täytyy loppua "${t.suffix}"`:t.format===`includes`?`Virheellinen syöte: täytyy sisältää "${t.includes}"`:t.format===`regex`?`Virheellinen syöte: täytyy vastata säännöllistä lauseketta ${t.pattern}`:`Virheellinen ${n[t.format]??e.format}`}case`not_multiple_of`:return`Virheellinen luku: täytyy olla luvun ${e.divisor} monikerta`;case`unrecognized_keys`:return`${e.keys.length>1?`Tuntemattomat avaimet`:`Tuntematon avain`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Virheellinen avain tietueessa`;case`invalid_union`:return`Virheellinen unioni`;case`invalid_element`:return`Virheellinen arvo joukossa`;default:return`Virheellinen syöte`}}};function ma(){return{localeError:pa()}}var ha=()=>{let e={string:{unit:`caractères`,verb:`avoir`},file:{unit:`octets`,verb:`avoir`},array:{unit:`éléments`,verb:`avoir`},set:{unit:`éléments`,verb:`avoir`}};function t(t){return e[t]??null}let n={regex:`entrée`,email:`adresse e-mail`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`date et heure ISO`,date:`date ISO`,time:`heure ISO`,duration:`durée ISO`,ipv4:`adresse IPv4`,ipv6:`adresse IPv6`,cidrv4:`plage IPv4`,cidrv6:`plage IPv6`,base64:`chaîne encodée en base64`,base64url:`chaîne encodée en base64url`,json_string:`chaîne JSON`,e164:`numéro E.164`,jwt:`JWT`,template_literal:`entrée`},r={nan:`NaN`,number:`nombre`,array:`tableau`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Entrée invalide : instanceof ${e.expected} attendu, ${i} reçu`:`Entrée invalide : ${t} attendu, ${i} reçu`}case`invalid_value`:return e.values.length===1?`Entrée invalide : ${x(e.values[0])} attendu`:`Option invalide : une valeur parmi ${f(e.values,`|`)} attendue`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Trop grand : ${e.origin??`valeur`} doit ${r.verb} ${n}${e.maximum.toString()} ${r.unit??`élément(s)`}`:`Trop grand : ${e.origin??`valeur`} doit être ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Trop petit : ${e.origin} doit ${r.verb} ${n}${e.minimum.toString()} ${r.unit}`:`Trop petit : ${e.origin} doit être ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Chaîne invalide : doit commencer par "${t.prefix}"`:t.format===`ends_with`?`Chaîne invalide : doit se terminer par "${t.suffix}"`:t.format===`includes`?`Chaîne invalide : doit inclure "${t.includes}"`:t.format===`regex`?`Chaîne invalide : doit correspondre au modèle ${t.pattern}`:`${n[t.format]??e.format} invalide`}case`not_multiple_of`:return`Nombre invalide : doit être un multiple de ${e.divisor}`;case`unrecognized_keys`:return`Clé${e.keys.length>1?`s`:``} non reconnue${e.keys.length>1?`s`:``} : ${f(e.keys,`, `)}`;case`invalid_key`:return`Clé invalide dans ${e.origin}`;case`invalid_union`:return`Entrée invalide`;case`invalid_element`:return`Valeur invalide dans ${e.origin}`;default:return`Entrée invalide`}}};function ga(){return{localeError:ha()}}var _a=()=>{let e={string:{unit:`caractères`,verb:`avoir`},file:{unit:`octets`,verb:`avoir`},array:{unit:`éléments`,verb:`avoir`},set:{unit:`éléments`,verb:`avoir`}};function t(t){return e[t]??null}let n={regex:`entrée`,email:`adresse courriel`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`date-heure ISO`,date:`date ISO`,time:`heure ISO`,duration:`durée ISO`,ipv4:`adresse IPv4`,ipv6:`adresse IPv6`,cidrv4:`plage IPv4`,cidrv6:`plage IPv6`,base64:`chaîne encodée en base64`,base64url:`chaîne encodée en base64url`,json_string:`chaîne JSON`,e164:`numéro E.164`,jwt:`JWT`,template_literal:`entrée`},r={nan:`NaN`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Entrée invalide : attendu instanceof ${e.expected}, reçu ${i}`:`Entrée invalide : attendu ${t}, reçu ${i}`}case`invalid_value`:return e.values.length===1?`Entrée invalide : attendu ${x(e.values[0])}`:`Option invalide : attendu l'une des valeurs suivantes ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`≤`:`<`,r=t(e.origin);return r?`Trop grand : attendu que ${e.origin??`la valeur`} ait ${n}${e.maximum.toString()} ${r.unit}`:`Trop grand : attendu que ${e.origin??`la valeur`} soit ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`≥`:`>`,r=t(e.origin);return r?`Trop petit : attendu que ${e.origin} ait ${n}${e.minimum.toString()} ${r.unit}`:`Trop petit : attendu que ${e.origin} soit ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Chaîne invalide : doit commencer par "${t.prefix}"`:t.format===`ends_with`?`Chaîne invalide : doit se terminer par "${t.suffix}"`:t.format===`includes`?`Chaîne invalide : doit inclure "${t.includes}"`:t.format===`regex`?`Chaîne invalide : doit correspondre au motif ${t.pattern}`:`${n[t.format]??e.format} invalide`}case`not_multiple_of`:return`Nombre invalide : doit être un multiple de ${e.divisor}`;case`unrecognized_keys`:return`Clé${e.keys.length>1?`s`:``} non reconnue${e.keys.length>1?`s`:``} : ${f(e.keys,`, `)}`;case`invalid_key`:return`Clé invalide dans ${e.origin}`;case`invalid_union`:return`Entrée invalide`;case`invalid_element`:return`Valeur invalide dans ${e.origin}`;default:return`Entrée invalide`}}};function va(){return{localeError:_a()}}var ya=()=>{let e={string:{label:`מחרוזת`,gender:`f`},number:{label:`מספר`,gender:`m`},boolean:{label:`ערך בוליאני`,gender:`m`},bigint:{label:`BigInt`,gender:`m`},date:{label:`תאריך`,gender:`m`},array:{label:`מערך`,gender:`m`},object:{label:`אובייקט`,gender:`m`},null:{label:`ערך ריק (null)`,gender:`m`},undefined:{label:`ערך לא מוגדר (undefined)`,gender:`m`},symbol:{label:`סימבול (Symbol)`,gender:`m`},function:{label:`פונקציה`,gender:`f`},map:{label:`מפה (Map)`,gender:`f`},set:{label:`קבוצה (Set)`,gender:`f`},file:{label:`קובץ`,gender:`m`},promise:{label:`Promise`,gender:`m`},NaN:{label:`NaN`,gender:`m`},unknown:{label:`ערך לא ידוע`,gender:`m`},value:{label:`ערך`,gender:`m`}},t={string:{unit:`תווים`,shortLabel:`קצר`,longLabel:`ארוך`},file:{unit:`בייטים`,shortLabel:`קטן`,longLabel:`גדול`},array:{unit:`פריטים`,shortLabel:`קטן`,longLabel:`גדול`},set:{unit:`פריטים`,shortLabel:`קטן`,longLabel:`גדול`},number:{unit:``,shortLabel:`קטן`,longLabel:`גדול`}},n=t=>t?e[t]:void 0,r=t=>{let r=n(t);return r?r.label:t??e.unknown.label},i=e=>`ה${r(e)}`,a=e=>(n(e)?.gender??`m`)===`f`?`צריכה להיות`:`צריך להיות`,o=e=>e?t[e]??null:null,s={regex:{label:`קלט`,gender:`m`},email:{label:`כתובת אימייל`,gender:`f`},url:{label:`כתובת רשת`,gender:`f`},emoji:{label:`אימוג'י`,gender:`m`},uuid:{label:`UUID`,gender:`m`},nanoid:{label:`nanoid`,gender:`m`},guid:{label:`GUID`,gender:`m`},cuid:{label:`cuid`,gender:`m`},cuid2:{label:`cuid2`,gender:`m`},ulid:{label:`ULID`,gender:`m`},xid:{label:`XID`,gender:`m`},ksuid:{label:`KSUID`,gender:`m`},datetime:{label:`תאריך וזמן ISO`,gender:`m`},date:{label:`תאריך ISO`,gender:`m`},time:{label:`זמן ISO`,gender:`m`},duration:{label:`משך זמן ISO`,gender:`m`},ipv4:{label:`כתובת IPv4`,gender:`f`},ipv6:{label:`כתובת IPv6`,gender:`f`},cidrv4:{label:`טווח IPv4`,gender:`m`},cidrv6:{label:`טווח IPv6`,gender:`m`},base64:{label:`מחרוזת בבסיס 64`,gender:`f`},base64url:{label:`מחרוזת בבסיס 64 לכתובות רשת`,gender:`f`},json_string:{label:`מחרוזת JSON`,gender:`f`},e164:{label:`מספר E.164`,gender:`m`},jwt:{label:`JWT`,gender:`m`},ends_with:{label:`קלט`,gender:`m`},includes:{label:`קלט`,gender:`m`},lowercase:{label:`קלט`,gender:`m`},starts_with:{label:`קלט`,gender:`m`},uppercase:{label:`קלט`,gender:`m`}},c={nan:`NaN`};return t=>{switch(t.code){case`invalid_type`:{let n=t.expected,i=c[n??``]??r(n),a=T(t.input),o=c[a]??e[a]?.label??a;return/^[A-Z]/.test(t.expected)?`קלט לא תקין: צריך להיות instanceof ${t.expected}, התקבל ${o}`:`קלט לא תקין: צריך להיות ${i}, התקבל ${o}`}case`invalid_value`:{if(t.values.length===1)return`ערך לא תקין: הערך חייב להיות ${x(t.values[0])}`;let e=t.values.map(e=>x(e));if(t.values.length===2)return`ערך לא תקין: האפשרויות המתאימות הן ${e[0]} או ${e[1]}`;let n=e[e.length-1];return`ערך לא תקין: האפשרויות המתאימות הן ${e.slice(0,-1).join(`, `)} או ${n}`}case`too_big`:{let e=o(t.origin),n=i(t.origin??`value`);if(t.origin===`string`)return`${e?.longLabel??`ארוך`} מדי: ${n} צריכה להכיל ${t.maximum.toString()} ${e?.unit??``} ${t.inclusive?`או פחות`:`לכל היותר`}`.trim();if(t.origin===`number`)return`גדול מדי: ${n} צריך להיות ${t.inclusive?`קטן או שווה ל-${t.maximum}`:`קטן מ-${t.maximum}`}`;if(t.origin===`array`||t.origin===`set`)return`גדול מדי: ${n} ${t.origin===`set`?`צריכה`:`צריך`} להכיל ${t.inclusive?`${t.maximum} ${e?.unit??``} או פחות`:`פחות מ-${t.maximum} ${e?.unit??``}`}`.trim();let r=t.inclusive?`<=`:`<`,s=a(t.origin??`value`);return e?.unit?`${e.longLabel} מדי: ${n} ${s} ${r}${t.maximum.toString()} ${e.unit}`:`${e?.longLabel??`גדול`} מדי: ${n} ${s} ${r}${t.maximum.toString()}`}case`too_small`:{let e=o(t.origin),n=i(t.origin??`value`);if(t.origin===`string`)return`${e?.shortLabel??`קצר`} מדי: ${n} צריכה להכיל ${t.minimum.toString()} ${e?.unit??``} ${t.inclusive?`או יותר`:`לפחות`}`.trim();if(t.origin===`number`)return`קטן מדי: ${n} צריך להיות ${t.inclusive?`גדול או שווה ל-${t.minimum}`:`גדול מ-${t.minimum}`}`;if(t.origin===`array`||t.origin===`set`){let r=t.origin===`set`?`צריכה`:`צריך`;return t.minimum===1&&t.inclusive?`קטן מדי: ${n} ${r} להכיל ${t.origin,`לפחות פריט אחד`}`:`קטן מדי: ${n} ${r} להכיל ${t.inclusive?`${t.minimum} ${e?.unit??``} או יותר`:`יותר מ-${t.minimum} ${e?.unit??``}`}`.trim()}let r=t.inclusive?`>=`:`>`,s=a(t.origin??`value`);return e?.unit?`${e.shortLabel} מדי: ${n} ${s} ${r}${t.minimum.toString()} ${e.unit}`:`${e?.shortLabel??`קטן`} מדי: ${n} ${s} ${r}${t.minimum.toString()}`}case`invalid_format`:{let e=t;if(e.format===`starts_with`)return`המחרוזת חייבת להתחיל ב "${e.prefix}"`;if(e.format===`ends_with`)return`המחרוזת חייבת להסתיים ב "${e.suffix}"`;if(e.format===`includes`)return`המחרוזת חייבת לכלול "${e.includes}"`;if(e.format===`regex`)return`המחרוזת חייבת להתאים לתבנית ${e.pattern}`;let n=s[e.format];return`${n?.label??e.format} לא ${(n?.gender??`m`)===`f`?`תקינה`:`תקין`}`}case`not_multiple_of`:return`מספר לא תקין: חייב להיות מכפלה של ${t.divisor}`;case`unrecognized_keys`:return`מפתח${t.keys.length>1?`ות`:``} לא מזוה${t.keys.length>1?`ים`:`ה`}: ${f(t.keys,`, `)}`;case`invalid_key`:return`שדה לא תקין באובייקט`;case`invalid_union`:return`קלט לא תקין`;case`invalid_element`:return`ערך לא תקין ב${i(t.origin??`array`)}`;default:return`קלט לא תקין`}}};function ba(){return{localeError:ya()}}var xa=()=>{let e={string:{unit:`karakter`,verb:`legyen`},file:{unit:`byte`,verb:`legyen`},array:{unit:`elem`,verb:`legyen`},set:{unit:`elem`,verb:`legyen`}};function t(t){return e[t]??null}let n={regex:`bemenet`,email:`email cím`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO időbélyeg`,date:`ISO dátum`,time:`ISO idő`,duration:`ISO időintervallum`,ipv4:`IPv4 cím`,ipv6:`IPv6 cím`,cidrv4:`IPv4 tartomány`,cidrv6:`IPv6 tartomány`,base64:`base64-kódolt string`,base64url:`base64url-kódolt string`,json_string:`JSON string`,e164:`E.164 szám`,jwt:`JWT`,template_literal:`bemenet`},r={nan:`NaN`,number:`szám`,array:`tömb`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Érvénytelen bemenet: a várt érték instanceof ${e.expected}, a kapott érték ${i}`:`Érvénytelen bemenet: a várt érték ${t}, a kapott érték ${i}`}case`invalid_value`:return e.values.length===1?`Érvénytelen bemenet: a várt érték ${x(e.values[0])}`:`Érvénytelen opció: valamelyik érték várt ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Túl nagy: ${e.origin??`érték`} mérete túl nagy ${n}${e.maximum.toString()} ${r.unit??`elem`}`:`Túl nagy: a bemeneti érték ${e.origin??`érték`} túl nagy: ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Túl kicsi: a bemeneti érték ${e.origin} mérete túl kicsi ${n}${e.minimum.toString()} ${r.unit}`:`Túl kicsi: a bemeneti érték ${e.origin} túl kicsi ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Érvénytelen string: "${t.prefix}" értékkel kell kezdődnie`:t.format===`ends_with`?`Érvénytelen string: "${t.suffix}" értékkel kell végződnie`:t.format===`includes`?`Érvénytelen string: "${t.includes}" értéket kell tartalmaznia`:t.format===`regex`?`Érvénytelen string: ${t.pattern} mintának kell megfelelnie`:`Érvénytelen ${n[t.format]??e.format}`}case`not_multiple_of`:return`Érvénytelen szám: ${e.divisor} többszörösének kell lennie`;case`unrecognized_keys`:return`Ismeretlen kulcs${e.keys.length>1?`s`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Érvénytelen kulcs ${e.origin}`;case`invalid_union`:return`Érvénytelen bemenet`;case`invalid_element`:return`Érvénytelen érték: ${e.origin}`;default:return`Érvénytelen bemenet`}}};function Sa(){return{localeError:xa()}}function Ca(e,t,n){return Math.abs(e)===1?t:n}function wa(e){if(!e)return``;let t=[`ա`,`ե`,`ը`,`ի`,`ո`,`ու`,`օ`],n=e[e.length-1];return e+(t.includes(n)?`ն`:`ը`)}var Ta=()=>{let e={string:{unit:{one:`նշան`,many:`նշաններ`},verb:`ունենալ`},file:{unit:{one:`բայթ`,many:`բայթեր`},verb:`ունենալ`},array:{unit:{one:`տարր`,many:`տարրեր`},verb:`ունենալ`},set:{unit:{one:`տարր`,many:`տարրեր`},verb:`ունենալ`}};function t(t){return e[t]??null}let n={regex:`մուտք`,email:`էլ. հասցե`,url:`URL`,emoji:`էմոջի`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO ամսաթիվ և ժամ`,date:`ISO ամսաթիվ`,time:`ISO ժամ`,duration:`ISO տևողություն`,ipv4:`IPv4 հասցե`,ipv6:`IPv6 հասցե`,cidrv4:`IPv4 միջակայք`,cidrv6:`IPv6 միջակայք`,base64:`base64 ձևաչափով տող`,base64url:`base64url ձևաչափով տող`,json_string:`JSON տող`,e164:`E.164 համար`,jwt:`JWT`,template_literal:`մուտք`},r={nan:`NaN`,number:`թիվ`,array:`զանգված`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Սխալ մուտքագրում․ սպասվում էր instanceof ${e.expected}, ստացվել է ${i}`:`Սխալ մուտքագրում․ սպասվում էր ${t}, ստացվել է ${i}`}case`invalid_value`:return e.values.length===1?`Սխալ մուտքագրում․ սպասվում էր ${x(e.values[1])}`:`Սխալ տարբերակ․ սպասվում էր հետևյալներից մեկը՝ ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);if(r){let t=Ca(Number(e.maximum),r.unit.one,r.unit.many);return`Չափազանց մեծ արժեք․ սպասվում է, որ ${wa(e.origin??`արժեք`)} կունենա ${n}${e.maximum.toString()} ${t}`}return`Չափազանց մեծ արժեք․ սպասվում է, որ ${wa(e.origin??`արժեք`)} լինի ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);if(r){let t=Ca(Number(e.minimum),r.unit.one,r.unit.many);return`Չափազանց փոքր արժեք․ սպասվում է, որ ${wa(e.origin)} կունենա ${n}${e.minimum.toString()} ${t}`}return`Չափազանց փոքր արժեք․ սպասվում է, որ ${wa(e.origin)} լինի ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Սխալ տող․ պետք է սկսվի "${t.prefix}"-ով`:t.format===`ends_with`?`Սխալ տող․ պետք է ավարտվի "${t.suffix}"-ով`:t.format===`includes`?`Սխալ տող․ պետք է պարունակի "${t.includes}"`:t.format===`regex`?`Սխալ տող․ պետք է համապատասխանի ${t.pattern} ձևաչափին`:`Սխալ ${n[t.format]??e.format}`}case`not_multiple_of`:return`Սխալ թիվ․ պետք է բազմապատիկ լինի ${e.divisor}-ի`;case`unrecognized_keys`:return`Չճանաչված բանալի${e.keys.length>1?`ներ`:``}. ${f(e.keys,`, `)}`;case`invalid_key`:return`Սխալ բանալի ${wa(e.origin)}-ում`;case`invalid_union`:return`Սխալ մուտքագրում`;case`invalid_element`:return`Սխալ արժեք ${wa(e.origin)}-ում`;default:return`Սխալ մուտքագրում`}}};function Ea(){return{localeError:Ta()}}var Da=()=>{let e={string:{unit:`karakter`,verb:`memiliki`},file:{unit:`byte`,verb:`memiliki`},array:{unit:`item`,verb:`memiliki`},set:{unit:`item`,verb:`memiliki`}};function t(t){return e[t]??null}let n={regex:`input`,email:`alamat email`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`tanggal dan waktu format ISO`,date:`tanggal format ISO`,time:`jam format ISO`,duration:`durasi format ISO`,ipv4:`alamat IPv4`,ipv6:`alamat IPv6`,cidrv4:`rentang alamat IPv4`,cidrv6:`rentang alamat IPv6`,base64:`string dengan enkode base64`,base64url:`string dengan enkode base64url`,json_string:`string JSON`,e164:`angka E.164`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Input tidak valid: diharapkan instanceof ${e.expected}, diterima ${i}`:`Input tidak valid: diharapkan ${t}, diterima ${i}`}case`invalid_value`:return e.values.length===1?`Input tidak valid: diharapkan ${x(e.values[0])}`:`Pilihan tidak valid: diharapkan salah satu dari ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Terlalu besar: diharapkan ${e.origin??`value`} memiliki ${n}${e.maximum.toString()} ${r.unit??`elemen`}`:`Terlalu besar: diharapkan ${e.origin??`value`} menjadi ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Terlalu kecil: diharapkan ${e.origin} memiliki ${n}${e.minimum.toString()} ${r.unit}`:`Terlalu kecil: diharapkan ${e.origin} menjadi ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`String tidak valid: harus dimulai dengan "${t.prefix}"`:t.format===`ends_with`?`String tidak valid: harus berakhir dengan "${t.suffix}"`:t.format===`includes`?`String tidak valid: harus menyertakan "${t.includes}"`:t.format===`regex`?`String tidak valid: harus sesuai pola ${t.pattern}`:`${n[t.format]??e.format} tidak valid`}case`not_multiple_of`:return`Angka tidak valid: harus kelipatan dari ${e.divisor}`;case`unrecognized_keys`:return`Kunci tidak dikenali ${e.keys.length>1?`s`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Kunci tidak valid di ${e.origin}`;case`invalid_union`:return`Input tidak valid`;case`invalid_element`:return`Nilai tidak valid di ${e.origin}`;default:return`Input tidak valid`}}};function Oa(){return{localeError:Da()}}var ka=()=>{let e={string:{unit:`stafi`,verb:`að hafa`},file:{unit:`bæti`,verb:`að hafa`},array:{unit:`hluti`,verb:`að hafa`},set:{unit:`hluti`,verb:`að hafa`}};function t(t){return e[t]??null}let n={regex:`gildi`,email:`netfang`,url:`vefslóð`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO dagsetning og tími`,date:`ISO dagsetning`,time:`ISO tími`,duration:`ISO tímalengd`,ipv4:`IPv4 address`,ipv6:`IPv6 address`,cidrv4:`IPv4 range`,cidrv6:`IPv6 range`,base64:`base64-encoded strengur`,base64url:`base64url-encoded strengur`,json_string:`JSON strengur`,e164:`E.164 tölugildi`,jwt:`JWT`,template_literal:`gildi`},r={nan:`NaN`,number:`númer`,array:`fylki`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Rangt gildi: Þú slóst inn ${i} þar sem á að vera instanceof ${e.expected}`:`Rangt gildi: Þú slóst inn ${i} þar sem á að vera ${t}`}case`invalid_value`:return e.values.length===1?`Rangt gildi: gert ráð fyrir ${x(e.values[0])}`:`Ógilt val: má vera eitt af eftirfarandi ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Of stórt: gert er ráð fyrir að ${e.origin??`gildi`} hafi ${n}${e.maximum.toString()} ${r.unit??`hluti`}`:`Of stórt: gert er ráð fyrir að ${e.origin??`gildi`} sé ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Of lítið: gert er ráð fyrir að ${e.origin} hafi ${n}${e.minimum.toString()} ${r.unit}`:`Of lítið: gert er ráð fyrir að ${e.origin} sé ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Ógildur strengur: verður að byrja á "${t.prefix}"`:t.format===`ends_with`?`Ógildur strengur: verður að enda á "${t.suffix}"`:t.format===`includes`?`Ógildur strengur: verður að innihalda "${t.includes}"`:t.format===`regex`?`Ógildur strengur: verður að fylgja mynstri ${t.pattern}`:`Rangt ${n[t.format]??e.format}`}case`not_multiple_of`:return`Röng tala: verður að vera margfeldi af ${e.divisor}`;case`unrecognized_keys`:return`Óþekkt ${e.keys.length>1?`ir lyklar`:`ur lykill`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Rangur lykill í ${e.origin}`;case`invalid_union`:return`Rangt gildi`;case`invalid_element`:return`Rangt gildi í ${e.origin}`;default:return`Rangt gildi`}}};function Aa(){return{localeError:ka()}}var ja=()=>{let e={string:{unit:`caratteri`,verb:`avere`},file:{unit:`byte`,verb:`avere`},array:{unit:`elementi`,verb:`avere`},set:{unit:`elementi`,verb:`avere`}};function t(t){return e[t]??null}let n={regex:`input`,email:`indirizzo email`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`data e ora ISO`,date:`data ISO`,time:`ora ISO`,duration:`durata ISO`,ipv4:`indirizzo IPv4`,ipv6:`indirizzo IPv6`,cidrv4:`intervallo IPv4`,cidrv6:`intervallo IPv6`,base64:`stringa codificata in base64`,base64url:`URL codificata in base64`,json_string:`stringa JSON`,e164:`numero E.164`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`,number:`numero`,array:`vettore`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Input non valido: atteso instanceof ${e.expected}, ricevuto ${i}`:`Input non valido: atteso ${t}, ricevuto ${i}`}case`invalid_value`:return e.values.length===1?`Input non valido: atteso ${x(e.values[0])}`:`Opzione non valida: atteso uno tra ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Troppo grande: ${e.origin??`valore`} deve avere ${n}${e.maximum.toString()} ${r.unit??`elementi`}`:`Troppo grande: ${e.origin??`valore`} deve essere ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Troppo piccolo: ${e.origin} deve avere ${n}${e.minimum.toString()} ${r.unit}`:`Troppo piccolo: ${e.origin} deve essere ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Stringa non valida: deve iniziare con "${t.prefix}"`:t.format===`ends_with`?`Stringa non valida: deve terminare con "${t.suffix}"`:t.format===`includes`?`Stringa non valida: deve includere "${t.includes}"`:t.format===`regex`?`Stringa non valida: deve corrispondere al pattern ${t.pattern}`:`Invalid ${n[t.format]??e.format}`}case`not_multiple_of`:return`Numero non valido: deve essere un multiplo di ${e.divisor}`;case`unrecognized_keys`:return`Chiav${e.keys.length>1?`i`:`e`} non riconosciut${e.keys.length>1?`e`:`a`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Chiave non valida in ${e.origin}`;case`invalid_union`:return`Input non valido`;case`invalid_element`:return`Valore non valido in ${e.origin}`;default:return`Input non valido`}}};function Ma(){return{localeError:ja()}}var Na=()=>{let e={string:{unit:`文字`,verb:`である`},file:{unit:`バイト`,verb:`である`},array:{unit:`要素`,verb:`である`},set:{unit:`要素`,verb:`である`}};function t(t){return e[t]??null}let n={regex:`入力値`,email:`メールアドレス`,url:`URL`,emoji:`絵文字`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO日時`,date:`ISO日付`,time:`ISO時刻`,duration:`ISO期間`,ipv4:`IPv4アドレス`,ipv6:`IPv6アドレス`,cidrv4:`IPv4範囲`,cidrv6:`IPv6範囲`,base64:`base64エンコード文字列`,base64url:`base64urlエンコード文字列`,json_string:`JSON文字列`,e164:`E.164番号`,jwt:`JWT`,template_literal:`入力値`},r={nan:`NaN`,number:`数値`,array:`配列`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`無効な入力: instanceof ${e.expected}が期待されましたが、${i}が入力されました`:`無効な入力: ${t}が期待されましたが、${i}が入力されました`}case`invalid_value`:return e.values.length===1?`無効な入力: ${x(e.values[0])}が期待されました`:`無効な選択: ${f(e.values,`、`)}のいずれかである必要があります`;case`too_big`:{let n=e.inclusive?`以下である`:`より小さい`,r=t(e.origin);return r?`大きすぎる値: ${e.origin??`値`}は${e.maximum.toString()}${r.unit??`要素`}${n}必要があります`:`大きすぎる値: ${e.origin??`値`}は${e.maximum.toString()}${n}必要があります`}case`too_small`:{let n=e.inclusive?`以上である`:`より大きい`,r=t(e.origin);return r?`小さすぎる値: ${e.origin}は${e.minimum.toString()}${r.unit}${n}必要があります`:`小さすぎる値: ${e.origin}は${e.minimum.toString()}${n}必要があります`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`無効な文字列: "${t.prefix}"で始まる必要があります`:t.format===`ends_with`?`無効な文字列: "${t.suffix}"で終わる必要があります`:t.format===`includes`?`無効な文字列: "${t.includes}"を含む必要があります`:t.format===`regex`?`無効な文字列: パターン${t.pattern}に一致する必要があります`:`無効な${n[t.format]??e.format}`}case`not_multiple_of`:return`無効な数値: ${e.divisor}の倍数である必要があります`;case`unrecognized_keys`:return`認識されていないキー${e.keys.length>1?`群`:``}: ${f(e.keys,`、`)}`;case`invalid_key`:return`${e.origin}内の無効なキー`;case`invalid_union`:return`無効な入力`;case`invalid_element`:return`${e.origin}内の無効な値`;default:return`無効な入力`}}};function Pa(){return{localeError:Na()}}var Fa=()=>{let e={string:{unit:`სიმბოლო`,verb:`უნდა შეიცავდეს`},file:{unit:`ბაიტი`,verb:`უნდა შეიცავდეს`},array:{unit:`ელემენტი`,verb:`უნდა შეიცავდეს`},set:{unit:`ელემენტი`,verb:`უნდა შეიცავდეს`}};function t(t){return e[t]??null}let n={regex:`შეყვანა`,email:`ელ-ფოსტის მისამართი`,url:`URL`,emoji:`ემოჯი`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`თარიღი-დრო`,date:`თარიღი`,time:`დრო`,duration:`ხანგრძლივობა`,ipv4:`IPv4 მისამართი`,ipv6:`IPv6 მისამართი`,cidrv4:`IPv4 დიაპაზონი`,cidrv6:`IPv6 დიაპაზონი`,base64:`base64-კოდირებული სტრინგი`,base64url:`base64url-კოდირებული სტრინგი`,json_string:`JSON სტრინგი`,e164:`E.164 ნომერი`,jwt:`JWT`,template_literal:`შეყვანა`},r={nan:`NaN`,number:`რიცხვი`,string:`სტრინგი`,boolean:`ბულეანი`,function:`ფუნქცია`,array:`მასივი`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`არასწორი შეყვანა: მოსალოდნელი instanceof ${e.expected}, მიღებული ${i}`:`არასწორი შეყვანა: მოსალოდნელი ${t}, მიღებული ${i}`}case`invalid_value`:return e.values.length===1?`არასწორი შეყვანა: მოსალოდნელი ${x(e.values[0])}`:`არასწორი ვარიანტი: მოსალოდნელია ერთ-ერთი ${f(e.values,`|`)}-დან`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`ზედმეტად დიდი: მოსალოდნელი ${e.origin??`მნიშვნელობა`} ${r.verb} ${n}${e.maximum.toString()} ${r.unit}`:`ზედმეტად დიდი: მოსალოდნელი ${e.origin??`მნიშვნელობა`} იყოს ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`ზედმეტად პატარა: მოსალოდნელი ${e.origin} ${r.verb} ${n}${e.minimum.toString()} ${r.unit}`:`ზედმეტად პატარა: მოსალოდნელი ${e.origin} იყოს ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`არასწორი სტრინგი: უნდა იწყებოდეს "${t.prefix}"-ით`:t.format===`ends_with`?`არასწორი სტრინგი: უნდა მთავრდებოდეს "${t.suffix}"-ით`:t.format===`includes`?`არასწორი სტრინგი: უნდა შეიცავდეს "${t.includes}"-ს`:t.format===`regex`?`არასწორი სტრინგი: უნდა შეესაბამებოდეს შაბლონს ${t.pattern}`:`არასწორი ${n[t.format]??e.format}`}case`not_multiple_of`:return`არასწორი რიცხვი: უნდა იყოს ${e.divisor}-ის ჯერადი`;case`unrecognized_keys`:return`უცნობი გასაღებ${e.keys.length>1?`ები`:`ი`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`არასწორი გასაღები ${e.origin}-ში`;case`invalid_union`:return`არასწორი შეყვანა`;case`invalid_element`:return`არასწორი მნიშვნელობა ${e.origin}-ში`;default:return`არასწორი შეყვანა`}}};function Ia(){return{localeError:Fa()}}var La=()=>{let e={string:{unit:`តួអក្សរ`,verb:`គួរមាន`},file:{unit:`បៃ`,verb:`គួរមាន`},array:{unit:`ធាតុ`,verb:`គួរមាន`},set:{unit:`ធាតុ`,verb:`គួរមាន`}};function t(t){return e[t]??null}let n={regex:`ទិន្នន័យបញ្ចូល`,email:`អាសយដ្ឋានអ៊ីមែល`,url:`URL`,emoji:`សញ្ញាអារម្មណ៍`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`កាលបរិច្ឆេទ និងម៉ោង ISO`,date:`កាលបរិច្ឆេទ ISO`,time:`ម៉ោង ISO`,duration:`រយៈពេល ISO`,ipv4:`អាសយដ្ឋាន IPv4`,ipv6:`អាសយដ្ឋាន IPv6`,cidrv4:`ដែនអាសយដ្ឋាន IPv4`,cidrv6:`ដែនអាសយដ្ឋាន IPv6`,base64:`ខ្សែអក្សរអ៊ិកូដ base64`,base64url:`ខ្សែអក្សរអ៊ិកូដ base64url`,json_string:`ខ្សែអក្សរ JSON`,e164:`លេខ E.164`,jwt:`JWT`,template_literal:`ទិន្នន័យបញ្ចូល`},r={nan:`NaN`,number:`លេខ`,array:`អារេ (Array)`,null:`គ្មានតម្លៃ (null)`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ instanceof ${e.expected} ប៉ុន្តែទទួលបាន ${i}`:`ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${t} ប៉ុន្តែទទួលបាន ${i}`}case`invalid_value`:return e.values.length===1?`ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${x(e.values[0])}`:`ជម្រើសមិនត្រឹមត្រូវ៖ ត្រូវជាមួយក្នុងចំណោម ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`ធំពេក៖ ត្រូវការ ${e.origin??`តម្លៃ`} ${n} ${e.maximum.toString()} ${r.unit??`ធាតុ`}`:`ធំពេក៖ ត្រូវការ ${e.origin??`តម្លៃ`} ${n} ${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`តូចពេក៖ ត្រូវការ ${e.origin} ${n} ${e.minimum.toString()} ${r.unit}`:`តូចពេក៖ ត្រូវការ ${e.origin} ${n} ${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវចាប់ផ្តើមដោយ "${t.prefix}"`:t.format===`ends_with`?`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវបញ្ចប់ដោយ "${t.suffix}"`:t.format===`includes`?`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវមាន "${t.includes}"`:t.format===`regex`?`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវតែផ្គូផ្គងនឹងទម្រង់ដែលបានកំណត់ ${t.pattern}`:`មិនត្រឹមត្រូវ៖ ${n[t.format]??e.format}`}case`not_multiple_of`:return`លេខមិនត្រឹមត្រូវ៖ ត្រូវតែជាពហុគុណនៃ ${e.divisor}`;case`unrecognized_keys`:return`រកឃើញសោមិនស្គាល់៖ ${f(e.keys,`, `)}`;case`invalid_key`:return`សោមិនត្រឹមត្រូវនៅក្នុង ${e.origin}`;case`invalid_union`:return`ទិន្នន័យមិនត្រឹមត្រូវ`;case`invalid_element`:return`ទិន្នន័យមិនត្រឹមត្រូវនៅក្នុង ${e.origin}`;default:return`ទិន្នន័យមិនត្រឹមត្រូវ`}}};function Ra(){return{localeError:La()}}function za(){return Ra()}var Ba=()=>{let e={string:{unit:`문자`,verb:`to have`},file:{unit:`바이트`,verb:`to have`},array:{unit:`개`,verb:`to have`},set:{unit:`개`,verb:`to have`}};function t(t){return e[t]??null}let n={regex:`입력`,email:`이메일 주소`,url:`URL`,emoji:`이모지`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO 날짜시간`,date:`ISO 날짜`,time:`ISO 시간`,duration:`ISO 기간`,ipv4:`IPv4 주소`,ipv6:`IPv6 주소`,cidrv4:`IPv4 범위`,cidrv6:`IPv6 범위`,base64:`base64 인코딩 문자열`,base64url:`base64url 인코딩 문자열`,json_string:`JSON 문자열`,e164:`E.164 번호`,jwt:`JWT`,template_literal:`입력`},r={nan:`NaN`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`잘못된 입력: 예상 타입은 instanceof ${e.expected}, 받은 타입은 ${i}입니다`:`잘못된 입력: 예상 타입은 ${t}, 받은 타입은 ${i}입니다`}case`invalid_value`:return e.values.length===1?`잘못된 입력: 값은 ${x(e.values[0])} 이어야 합니다`:`잘못된 옵션: ${f(e.values,`또는 `)} 중 하나여야 합니다`;case`too_big`:{let n=e.inclusive?`이하`:`미만`,r=n===`미만`?`이어야 합니다`:`여야 합니다`,i=t(e.origin),a=i?.unit??`요소`;return i?`${e.origin??`값`}이 너무 큽니다: ${e.maximum.toString()}${a} ${n}${r}`:`${e.origin??`값`}이 너무 큽니다: ${e.maximum.toString()} ${n}${r}`}case`too_small`:{let n=e.inclusive?`이상`:`초과`,r=n===`이상`?`이어야 합니다`:`여야 합니다`,i=t(e.origin),a=i?.unit??`요소`;return i?`${e.origin??`값`}이 너무 작습니다: ${e.minimum.toString()}${a} ${n}${r}`:`${e.origin??`값`}이 너무 작습니다: ${e.minimum.toString()} ${n}${r}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`잘못된 문자열: "${t.prefix}"(으)로 시작해야 합니다`:t.format===`ends_with`?`잘못된 문자열: "${t.suffix}"(으)로 끝나야 합니다`:t.format===`includes`?`잘못된 문자열: "${t.includes}"을(를) 포함해야 합니다`:t.format===`regex`?`잘못된 문자열: 정규식 ${t.pattern} 패턴과 일치해야 합니다`:`잘못된 ${n[t.format]??e.format}`}case`not_multiple_of`:return`잘못된 숫자: ${e.divisor}의 배수여야 합니다`;case`unrecognized_keys`:return`인식할 수 없는 키: ${f(e.keys,`, `)}`;case`invalid_key`:return`잘못된 키: ${e.origin}`;case`invalid_union`:return`잘못된 입력`;case`invalid_element`:return`잘못된 값: ${e.origin}`;default:return`잘못된 입력`}}};function Va(){return{localeError:Ba()}}var Ha=e=>e.charAt(0).toUpperCase()+e.slice(1);function Ua(e){let t=Math.abs(e),n=t%10,r=t%100;return r>=11&&r<=19||n===0?`many`:n===1?`one`:`few`}var Wa=()=>{let e={string:{unit:{one:`simbolis`,few:`simboliai`,many:`simbolių`},verb:{smaller:{inclusive:`turi būti ne ilgesnė kaip`,notInclusive:`turi būti trumpesnė kaip`},bigger:{inclusive:`turi būti ne trumpesnė kaip`,notInclusive:`turi būti ilgesnė kaip`}}},file:{unit:{one:`baitas`,few:`baitai`,many:`baitų`},verb:{smaller:{inclusive:`turi būti ne didesnis kaip`,notInclusive:`turi būti mažesnis kaip`},bigger:{inclusive:`turi būti ne mažesnis kaip`,notInclusive:`turi būti didesnis kaip`}}},array:{unit:{one:`elementą`,few:`elementus`,many:`elementų`},verb:{smaller:{inclusive:`turi turėti ne daugiau kaip`,notInclusive:`turi turėti mažiau kaip`},bigger:{inclusive:`turi turėti ne mažiau kaip`,notInclusive:`turi turėti daugiau kaip`}}},set:{unit:{one:`elementą`,few:`elementus`,many:`elementų`},verb:{smaller:{inclusive:`turi turėti ne daugiau kaip`,notInclusive:`turi turėti mažiau kaip`},bigger:{inclusive:`turi turėti ne mažiau kaip`,notInclusive:`turi turėti daugiau kaip`}}}};function t(t,n,r,i){let a=e[t]??null;return a===null?a:{unit:a.unit[n],verb:a.verb[i][r?`inclusive`:`notInclusive`]}}let n={regex:`įvestis`,email:`el. pašto adresas`,url:`URL`,emoji:`jaustukas`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO data ir laikas`,date:`ISO data`,time:`ISO laikas`,duration:`ISO trukmė`,ipv4:`IPv4 adresas`,ipv6:`IPv6 adresas`,cidrv4:`IPv4 tinklo prefiksas (CIDR)`,cidrv6:`IPv6 tinklo prefiksas (CIDR)`,base64:`base64 užkoduota eilutė`,base64url:`base64url užkoduota eilutė`,json_string:`JSON eilutė`,e164:`E.164 numeris`,jwt:`JWT`,template_literal:`įvestis`},r={nan:`NaN`,number:`skaičius`,bigint:`sveikasis skaičius`,string:`eilutė`,boolean:`loginė reikšmė`,undefined:`neapibrėžta reikšmė`,function:`funkcija`,symbol:`simbolis`,array:`masyvas`,object:`objektas`,null:`nulinė reikšmė`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Gautas tipas ${i}, o tikėtasi - instanceof ${e.expected}`:`Gautas tipas ${i}, o tikėtasi - ${t}`}case`invalid_value`:return e.values.length===1?`Privalo būti ${x(e.values[0])}`:`Privalo būti vienas iš ${f(e.values,`|`)} pasirinkimų`;case`too_big`:{let n=r[e.origin]??e.origin,i=t(e.origin,Ua(Number(e.maximum)),e.inclusive??!1,`smaller`);if(i?.verb)return`${Ha(n??e.origin??`reikšmė`)} ${i.verb} ${e.maximum.toString()} ${i.unit??`elementų`}`;let a=e.inclusive?`ne didesnis kaip`:`mažesnis kaip`;return`${Ha(n??e.origin??`reikšmė`)} turi būti ${a} ${e.maximum.toString()} ${i?.unit}`}case`too_small`:{let n=r[e.origin]??e.origin,i=t(e.origin,Ua(Number(e.minimum)),e.inclusive??!1,`bigger`);if(i?.verb)return`${Ha(n??e.origin??`reikšmė`)} ${i.verb} ${e.minimum.toString()} ${i.unit??`elementų`}`;let a=e.inclusive?`ne mažesnis kaip`:`didesnis kaip`;return`${Ha(n??e.origin??`reikšmė`)} turi būti ${a} ${e.minimum.toString()} ${i?.unit}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Eilutė privalo prasidėti "${t.prefix}"`:t.format===`ends_with`?`Eilutė privalo pasibaigti "${t.suffix}"`:t.format===`includes`?`Eilutė privalo įtraukti "${t.includes}"`:t.format===`regex`?`Eilutė privalo atitikti ${t.pattern}`:`Neteisingas ${n[t.format]??e.format}`}case`not_multiple_of`:return`Skaičius privalo būti ${e.divisor} kartotinis.`;case`unrecognized_keys`:return`Neatpažint${e.keys.length>1?`i`:`as`} rakt${e.keys.length>1?`ai`:`as`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Rastas klaidingas raktas`;case`invalid_union`:return`Klaidinga įvestis`;case`invalid_element`:return`${Ha(r[e.origin]??e.origin??e.origin??`reikšmė`)} turi klaidingą įvestį`;default:return`Klaidinga įvestis`}}};function Ga(){return{localeError:Wa()}}var Ka=()=>{let e={string:{unit:`знаци`,verb:`да имаат`},file:{unit:`бајти`,verb:`да имаат`},array:{unit:`ставки`,verb:`да имаат`},set:{unit:`ставки`,verb:`да имаат`}};function t(t){return e[t]??null}let n={regex:`внес`,email:`адреса на е-пошта`,url:`URL`,emoji:`емоџи`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO датум и време`,date:`ISO датум`,time:`ISO време`,duration:`ISO времетраење`,ipv4:`IPv4 адреса`,ipv6:`IPv6 адреса`,cidrv4:`IPv4 опсег`,cidrv6:`IPv6 опсег`,base64:`base64-енкодирана низа`,base64url:`base64url-енкодирана низа`,json_string:`JSON низа`,e164:`E.164 број`,jwt:`JWT`,template_literal:`внес`},r={nan:`NaN`,number:`број`,array:`низа`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Грешен внес: се очекува instanceof ${e.expected}, примено ${i}`:`Грешен внес: се очекува ${t}, примено ${i}`}case`invalid_value`:return e.values.length===1?`Invalid input: expected ${x(e.values[0])}`:`Грешана опција: се очекува една ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Премногу голем: се очекува ${e.origin??`вредноста`} да има ${n}${e.maximum.toString()} ${r.unit??`елементи`}`:`Премногу голем: се очекува ${e.origin??`вредноста`} да биде ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Премногу мал: се очекува ${e.origin} да има ${n}${e.minimum.toString()} ${r.unit}`:`Премногу мал: се очекува ${e.origin} да биде ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Неважечка низа: мора да започнува со "${t.prefix}"`:t.format===`ends_with`?`Неважечка низа: мора да завршува со "${t.suffix}"`:t.format===`includes`?`Неважечка низа: мора да вклучува "${t.includes}"`:t.format===`regex`?`Неважечка низа: мора да одгоара на патернот ${t.pattern}`:`Invalid ${n[t.format]??e.format}`}case`not_multiple_of`:return`Грешен број: мора да биде делив со ${e.divisor}`;case`unrecognized_keys`:return`${e.keys.length>1?`Непрепознаени клучеви`:`Непрепознаен клуч`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Грешен клуч во ${e.origin}`;case`invalid_union`:return`Грешен внес`;case`invalid_element`:return`Грешна вредност во ${e.origin}`;default:return`Грешен внес`}}};function qa(){return{localeError:Ka()}}var Ja=()=>{let e={string:{unit:`aksara`,verb:`mempunyai`},file:{unit:`bait`,verb:`mempunyai`},array:{unit:`elemen`,verb:`mempunyai`},set:{unit:`elemen`,verb:`mempunyai`}};function t(t){return e[t]??null}let n={regex:`input`,email:`alamat e-mel`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`tarikh masa ISO`,date:`tarikh ISO`,time:`masa ISO`,duration:`tempoh ISO`,ipv4:`alamat IPv4`,ipv6:`alamat IPv6`,cidrv4:`julat IPv4`,cidrv6:`julat IPv6`,base64:`string dikodkan base64`,base64url:`string dikodkan base64url`,json_string:`string JSON`,e164:`nombor E.164`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`,number:`nombor`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Input tidak sah: dijangka instanceof ${e.expected}, diterima ${i}`:`Input tidak sah: dijangka ${t}, diterima ${i}`}case`invalid_value`:return e.values.length===1?`Input tidak sah: dijangka ${x(e.values[0])}`:`Pilihan tidak sah: dijangka salah satu daripada ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Terlalu besar: dijangka ${e.origin??`nilai`} ${r.verb} ${n}${e.maximum.toString()} ${r.unit??`elemen`}`:`Terlalu besar: dijangka ${e.origin??`nilai`} adalah ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Terlalu kecil: dijangka ${e.origin} ${r.verb} ${n}${e.minimum.toString()} ${r.unit}`:`Terlalu kecil: dijangka ${e.origin} adalah ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`String tidak sah: mesti bermula dengan "${t.prefix}"`:t.format===`ends_with`?`String tidak sah: mesti berakhir dengan "${t.suffix}"`:t.format===`includes`?`String tidak sah: mesti mengandungi "${t.includes}"`:t.format===`regex`?`String tidak sah: mesti sepadan dengan corak ${t.pattern}`:`${n[t.format]??e.format} tidak sah`}case`not_multiple_of`:return`Nombor tidak sah: perlu gandaan ${e.divisor}`;case`unrecognized_keys`:return`Kunci tidak dikenali: ${f(e.keys,`, `)}`;case`invalid_key`:return`Kunci tidak sah dalam ${e.origin}`;case`invalid_union`:return`Input tidak sah`;case`invalid_element`:return`Nilai tidak sah dalam ${e.origin}`;default:return`Input tidak sah`}}};function Ya(){return{localeError:Ja()}}var Xa=()=>{let e={string:{unit:`tekens`,verb:`heeft`},file:{unit:`bytes`,verb:`heeft`},array:{unit:`elementen`,verb:`heeft`},set:{unit:`elementen`,verb:`heeft`}};function t(t){return e[t]??null}let n={regex:`invoer`,email:`emailadres`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO datum en tijd`,date:`ISO datum`,time:`ISO tijd`,duration:`ISO duur`,ipv4:`IPv4-adres`,ipv6:`IPv6-adres`,cidrv4:`IPv4-bereik`,cidrv6:`IPv6-bereik`,base64:`base64-gecodeerde tekst`,base64url:`base64 URL-gecodeerde tekst`,json_string:`JSON string`,e164:`E.164-nummer`,jwt:`JWT`,template_literal:`invoer`},r={nan:`NaN`,number:`getal`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Ongeldige invoer: verwacht instanceof ${e.expected}, ontving ${i}`:`Ongeldige invoer: verwacht ${t}, ontving ${i}`}case`invalid_value`:return e.values.length===1?`Ongeldige invoer: verwacht ${x(e.values[0])}`:`Ongeldige optie: verwacht één van ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin),i=e.origin===`date`?`laat`:e.origin===`string`?`lang`:`groot`;return r?`Te ${i}: verwacht dat ${e.origin??`waarde`} ${n}${e.maximum.toString()} ${r.unit??`elementen`} ${r.verb}`:`Te ${i}: verwacht dat ${e.origin??`waarde`} ${n}${e.maximum.toString()} is`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin),i=e.origin===`date`?`vroeg`:e.origin===`string`?`kort`:`klein`;return r?`Te ${i}: verwacht dat ${e.origin} ${n}${e.minimum.toString()} ${r.unit} ${r.verb}`:`Te ${i}: verwacht dat ${e.origin} ${n}${e.minimum.toString()} is`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Ongeldige tekst: moet met "${t.prefix}" beginnen`:t.format===`ends_with`?`Ongeldige tekst: moet op "${t.suffix}" eindigen`:t.format===`includes`?`Ongeldige tekst: moet "${t.includes}" bevatten`:t.format===`regex`?`Ongeldige tekst: moet overeenkomen met patroon ${t.pattern}`:`Ongeldig: ${n[t.format]??e.format}`}case`not_multiple_of`:return`Ongeldig getal: moet een veelvoud van ${e.divisor} zijn`;case`unrecognized_keys`:return`Onbekende key${e.keys.length>1?`s`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Ongeldige key in ${e.origin}`;case`invalid_union`:return`Ongeldige invoer`;case`invalid_element`:return`Ongeldige waarde in ${e.origin}`;default:return`Ongeldige invoer`}}};function Za(){return{localeError:Xa()}}var Qa=()=>{let e={string:{unit:`tegn`,verb:`å ha`},file:{unit:`bytes`,verb:`å ha`},array:{unit:`elementer`,verb:`å inneholde`},set:{unit:`elementer`,verb:`å inneholde`}};function t(t){return e[t]??null}let n={regex:`input`,email:`e-postadresse`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO dato- og klokkeslett`,date:`ISO-dato`,time:`ISO-klokkeslett`,duration:`ISO-varighet`,ipv4:`IPv4-område`,ipv6:`IPv6-område`,cidrv4:`IPv4-spekter`,cidrv6:`IPv6-spekter`,base64:`base64-enkodet streng`,base64url:`base64url-enkodet streng`,json_string:`JSON-streng`,e164:`E.164-nummer`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`,number:`tall`,array:`liste`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Ugyldig input: forventet instanceof ${e.expected}, fikk ${i}`:`Ugyldig input: forventet ${t}, fikk ${i}`}case`invalid_value`:return e.values.length===1?`Ugyldig verdi: forventet ${x(e.values[0])}`:`Ugyldig valg: forventet en av ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`For stor(t): forventet ${e.origin??`value`} til å ha ${n}${e.maximum.toString()} ${r.unit??`elementer`}`:`For stor(t): forventet ${e.origin??`value`} til å ha ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`For lite(n): forventet ${e.origin} til å ha ${n}${e.minimum.toString()} ${r.unit}`:`For lite(n): forventet ${e.origin} til å ha ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Ugyldig streng: må starte med "${t.prefix}"`:t.format===`ends_with`?`Ugyldig streng: må ende med "${t.suffix}"`:t.format===`includes`?`Ugyldig streng: må inneholde "${t.includes}"`:t.format===`regex`?`Ugyldig streng: må matche mønsteret ${t.pattern}`:`Ugyldig ${n[t.format]??e.format}`}case`not_multiple_of`:return`Ugyldig tall: må være et multiplum av ${e.divisor}`;case`unrecognized_keys`:return`${e.keys.length>1?`Ukjente nøkler`:`Ukjent nøkkel`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Ugyldig nøkkel i ${e.origin}`;case`invalid_union`:return`Ugyldig input`;case`invalid_element`:return`Ugyldig verdi i ${e.origin}`;default:return`Ugyldig input`}}};function $a(){return{localeError:Qa()}}var eo=()=>{let e={string:{unit:`harf`,verb:`olmalıdır`},file:{unit:`bayt`,verb:`olmalıdır`},array:{unit:`unsur`,verb:`olmalıdır`},set:{unit:`unsur`,verb:`olmalıdır`}};function t(t){return e[t]??null}let n={regex:`giren`,email:`epostagâh`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO hengâmı`,date:`ISO tarihi`,time:`ISO zamanı`,duration:`ISO müddeti`,ipv4:`IPv4 nişânı`,ipv6:`IPv6 nişânı`,cidrv4:`IPv4 menzili`,cidrv6:`IPv6 menzili`,base64:`base64-şifreli metin`,base64url:`base64url-şifreli metin`,json_string:`JSON metin`,e164:`E.164 sayısı`,jwt:`JWT`,template_literal:`giren`},r={nan:`NaN`,number:`numara`,array:`saf`,null:`gayb`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Fâsit giren: umulan instanceof ${e.expected}, alınan ${i}`:`Fâsit giren: umulan ${t}, alınan ${i}`}case`invalid_value`:return e.values.length===1?`Fâsit giren: umulan ${x(e.values[0])}`:`Fâsit tercih: mûteberler ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Fazla büyük: ${e.origin??`value`}, ${n}${e.maximum.toString()} ${r.unit??`elements`} sahip olmalıydı.`:`Fazla büyük: ${e.origin??`value`}, ${n}${e.maximum.toString()} olmalıydı.`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Fazla küçük: ${e.origin}, ${n}${e.minimum.toString()} ${r.unit} sahip olmalıydı.`:`Fazla küçük: ${e.origin}, ${n}${e.minimum.toString()} olmalıydı.`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Fâsit metin: "${t.prefix}" ile başlamalı.`:t.format===`ends_with`?`Fâsit metin: "${t.suffix}" ile bitmeli.`:t.format===`includes`?`Fâsit metin: "${t.includes}" ihtivâ etmeli.`:t.format===`regex`?`Fâsit metin: ${t.pattern} nakşına uymalı.`:`Fâsit ${n[t.format]??e.format}`}case`not_multiple_of`:return`Fâsit sayı: ${e.divisor} katı olmalıydı.`;case`unrecognized_keys`:return`Tanınmayan anahtar ${e.keys.length>1?`s`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`${e.origin} için tanınmayan anahtar var.`;case`invalid_union`:return`Giren tanınamadı.`;case`invalid_element`:return`${e.origin} için tanınmayan kıymet var.`;default:return`Kıymet tanınamadı.`}}};function to(){return{localeError:eo()}}var no=()=>{let e={string:{unit:`توکي`,verb:`ولري`},file:{unit:`بایټس`,verb:`ولري`},array:{unit:`توکي`,verb:`ولري`},set:{unit:`توکي`,verb:`ولري`}};function t(t){return e[t]??null}let n={regex:`ورودي`,email:`بریښنالیک`,url:`یو آر ال`,emoji:`ایموجي`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`نیټه او وخت`,date:`نېټه`,time:`وخت`,duration:`موده`,ipv4:`د IPv4 پته`,ipv6:`د IPv6 پته`,cidrv4:`د IPv4 ساحه`,cidrv6:`د IPv6 ساحه`,base64:`base64-encoded متن`,base64url:`base64url-encoded متن`,json_string:`JSON متن`,e164:`د E.164 شمېره`,jwt:`JWT`,template_literal:`ورودي`},r={nan:`NaN`,number:`عدد`,array:`ارې`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`ناسم ورودي: باید instanceof ${e.expected} وای, مګر ${i} ترلاسه شو`:`ناسم ورودي: باید ${t} وای, مګر ${i} ترلاسه شو`}case`invalid_value`:return e.values.length===1?`ناسم ورودي: باید ${x(e.values[0])} وای`:`ناسم انتخاب: باید یو له ${f(e.values,`|`)} څخه وای`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`ډیر لوی: ${e.origin??`ارزښت`} باید ${n}${e.maximum.toString()} ${r.unit??`عنصرونه`} ولري`:`ډیر لوی: ${e.origin??`ارزښت`} باید ${n}${e.maximum.toString()} وي`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`ډیر کوچنی: ${e.origin} باید ${n}${e.minimum.toString()} ${r.unit} ولري`:`ډیر کوچنی: ${e.origin} باید ${n}${e.minimum.toString()} وي`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`ناسم متن: باید د "${t.prefix}" سره پیل شي`:t.format===`ends_with`?`ناسم متن: باید د "${t.suffix}" سره پای ته ورسيږي`:t.format===`includes`?`ناسم متن: باید "${t.includes}" ولري`:t.format===`regex`?`ناسم متن: باید د ${t.pattern} سره مطابقت ولري`:`${n[t.format]??e.format} ناسم دی`}case`not_multiple_of`:return`ناسم عدد: باید د ${e.divisor} مضرب وي`;case`unrecognized_keys`:return`ناسم ${e.keys.length>1?`کلیډونه`:`کلیډ`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`ناسم کلیډ په ${e.origin} کې`;case`invalid_union`:return`ناسمه ورودي`;case`invalid_element`:return`ناسم عنصر په ${e.origin} کې`;default:return`ناسمه ورودي`}}};function ro(){return{localeError:no()}}var io=()=>{let e={string:{unit:`znaków`,verb:`mieć`},file:{unit:`bajtów`,verb:`mieć`},array:{unit:`elementów`,verb:`mieć`},set:{unit:`elementów`,verb:`mieć`}};function t(t){return e[t]??null}let n={regex:`wyrażenie`,email:`adres email`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`data i godzina w formacie ISO`,date:`data w formacie ISO`,time:`godzina w formacie ISO`,duration:`czas trwania ISO`,ipv4:`adres IPv4`,ipv6:`adres IPv6`,cidrv4:`zakres IPv4`,cidrv6:`zakres IPv6`,base64:`ciąg znaków zakodowany w formacie base64`,base64url:`ciąg znaków zakodowany w formacie base64url`,json_string:`ciąg znaków w formacie JSON`,e164:`liczba E.164`,jwt:`JWT`,template_literal:`wejście`},r={nan:`NaN`,number:`liczba`,array:`tablica`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Nieprawidłowe dane wejściowe: oczekiwano instanceof ${e.expected}, otrzymano ${i}`:`Nieprawidłowe dane wejściowe: oczekiwano ${t}, otrzymano ${i}`}case`invalid_value`:return e.values.length===1?`Nieprawidłowe dane wejściowe: oczekiwano ${x(e.values[0])}`:`Nieprawidłowa opcja: oczekiwano jednej z wartości ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Za duża wartość: oczekiwano, że ${e.origin??`wartość`} będzie mieć ${n}${e.maximum.toString()} ${r.unit??`elementów`}`:`Zbyt duż(y/a/e): oczekiwano, że ${e.origin??`wartość`} będzie wynosić ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Za mała wartość: oczekiwano, że ${e.origin??`wartość`} będzie mieć ${n}${e.minimum.toString()} ${r.unit??`elementów`}`:`Zbyt mał(y/a/e): oczekiwano, że ${e.origin??`wartość`} będzie wynosić ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Nieprawidłowy ciąg znaków: musi zaczynać się od "${t.prefix}"`:t.format===`ends_with`?`Nieprawidłowy ciąg znaków: musi kończyć się na "${t.suffix}"`:t.format===`includes`?`Nieprawidłowy ciąg znaków: musi zawierać "${t.includes}"`:t.format===`regex`?`Nieprawidłowy ciąg znaków: musi odpowiadać wzorcowi ${t.pattern}`:`Nieprawidłow(y/a/e) ${n[t.format]??e.format}`}case`not_multiple_of`:return`Nieprawidłowa liczba: musi być wielokrotnością ${e.divisor}`;case`unrecognized_keys`:return`Nierozpoznane klucze${e.keys.length>1?`s`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Nieprawidłowy klucz w ${e.origin}`;case`invalid_union`:return`Nieprawidłowe dane wejściowe`;case`invalid_element`:return`Nieprawidłowa wartość w ${e.origin}`;default:return`Nieprawidłowe dane wejściowe`}}};function ao(){return{localeError:io()}}var oo=()=>{let e={string:{unit:`caracteres`,verb:`ter`},file:{unit:`bytes`,verb:`ter`},array:{unit:`itens`,verb:`ter`},set:{unit:`itens`,verb:`ter`}};function t(t){return e[t]??null}let n={regex:`padrão`,email:`endereço de e-mail`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`data e hora ISO`,date:`data ISO`,time:`hora ISO`,duration:`duração ISO`,ipv4:`endereço IPv4`,ipv6:`endereço IPv6`,cidrv4:`faixa de IPv4`,cidrv6:`faixa de IPv6`,base64:`texto codificado em base64`,base64url:`URL codificada em base64`,json_string:`texto JSON`,e164:`número E.164`,jwt:`JWT`,template_literal:`entrada`},r={nan:`NaN`,number:`número`,null:`nulo`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Tipo inválido: esperado instanceof ${e.expected}, recebido ${i}`:`Tipo inválido: esperado ${t}, recebido ${i}`}case`invalid_value`:return e.values.length===1?`Entrada inválida: esperado ${x(e.values[0])}`:`Opção inválida: esperada uma das ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Muito grande: esperado que ${e.origin??`valor`} tivesse ${n}${e.maximum.toString()} ${r.unit??`elementos`}`:`Muito grande: esperado que ${e.origin??`valor`} fosse ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Muito pequeno: esperado que ${e.origin} tivesse ${n}${e.minimum.toString()} ${r.unit}`:`Muito pequeno: esperado que ${e.origin} fosse ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Texto inválido: deve começar com "${t.prefix}"`:t.format===`ends_with`?`Texto inválido: deve terminar com "${t.suffix}"`:t.format===`includes`?`Texto inválido: deve incluir "${t.includes}"`:t.format===`regex`?`Texto inválido: deve corresponder ao padrão ${t.pattern}`:`${n[t.format]??e.format} inválido`}case`not_multiple_of`:return`Número inválido: deve ser múltiplo de ${e.divisor}`;case`unrecognized_keys`:return`Chave${e.keys.length>1?`s`:``} desconhecida${e.keys.length>1?`s`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Chave inválida em ${e.origin}`;case`invalid_union`:return`Entrada inválida`;case`invalid_element`:return`Valor inválido em ${e.origin}`;default:return`Campo inválido`}}};function so(){return{localeError:oo()}}function co(e,t,n,r){let i=Math.abs(e),a=i%10,o=i%100;return o>=11&&o<=19?r:a===1?t:a>=2&&a<=4?n:r}var lo=()=>{let e={string:{unit:{one:`символ`,few:`символа`,many:`символов`},verb:`иметь`},file:{unit:{one:`байт`,few:`байта`,many:`байт`},verb:`иметь`},array:{unit:{one:`элемент`,few:`элемента`,many:`элементов`},verb:`иметь`},set:{unit:{one:`элемент`,few:`элемента`,many:`элементов`},verb:`иметь`}};function t(t){return e[t]??null}let n={regex:`ввод`,email:`email адрес`,url:`URL`,emoji:`эмодзи`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO дата и время`,date:`ISO дата`,time:`ISO время`,duration:`ISO длительность`,ipv4:`IPv4 адрес`,ipv6:`IPv6 адрес`,cidrv4:`IPv4 диапазон`,cidrv6:`IPv6 диапазон`,base64:`строка в формате base64`,base64url:`строка в формате base64url`,json_string:`JSON строка`,e164:`номер E.164`,jwt:`JWT`,template_literal:`ввод`},r={nan:`NaN`,number:`число`,array:`массив`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Неверный ввод: ожидалось instanceof ${e.expected}, получено ${i}`:`Неверный ввод: ожидалось ${t}, получено ${i}`}case`invalid_value`:return e.values.length===1?`Неверный ввод: ожидалось ${x(e.values[0])}`:`Неверный вариант: ожидалось одно из ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);if(r){let t=co(Number(e.maximum),r.unit.one,r.unit.few,r.unit.many);return`Слишком большое значение: ожидалось, что ${e.origin??`значение`} будет иметь ${n}${e.maximum.toString()} ${t}`}return`Слишком большое значение: ожидалось, что ${e.origin??`значение`} будет ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);if(r){let t=co(Number(e.minimum),r.unit.one,r.unit.few,r.unit.many);return`Слишком маленькое значение: ожидалось, что ${e.origin} будет иметь ${n}${e.minimum.toString()} ${t}`}return`Слишком маленькое значение: ожидалось, что ${e.origin} будет ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Неверная строка: должна начинаться с "${t.prefix}"`:t.format===`ends_with`?`Неверная строка: должна заканчиваться на "${t.suffix}"`:t.format===`includes`?`Неверная строка: должна содержать "${t.includes}"`:t.format===`regex`?`Неверная строка: должна соответствовать шаблону ${t.pattern}`:`Неверный ${n[t.format]??e.format}`}case`not_multiple_of`:return`Неверное число: должно быть кратным ${e.divisor}`;case`unrecognized_keys`:return`Нераспознанн${e.keys.length>1?`ые`:`ый`} ключ${e.keys.length>1?`и`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Неверный ключ в ${e.origin}`;case`invalid_union`:return`Неверные входные данные`;case`invalid_element`:return`Неверное значение в ${e.origin}`;default:return`Неверные входные данные`}}};function uo(){return{localeError:lo()}}var fo=()=>{let e={string:{unit:`znakov`,verb:`imeti`},file:{unit:`bajtov`,verb:`imeti`},array:{unit:`elementov`,verb:`imeti`},set:{unit:`elementov`,verb:`imeti`}};function t(t){return e[t]??null}let n={regex:`vnos`,email:`e-poštni naslov`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO datum in čas`,date:`ISO datum`,time:`ISO čas`,duration:`ISO trajanje`,ipv4:`IPv4 naslov`,ipv6:`IPv6 naslov`,cidrv4:`obseg IPv4`,cidrv6:`obseg IPv6`,base64:`base64 kodiran niz`,base64url:`base64url kodiran niz`,json_string:`JSON niz`,e164:`E.164 številka`,jwt:`JWT`,template_literal:`vnos`},r={nan:`NaN`,number:`število`,array:`tabela`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Neveljaven vnos: pričakovano instanceof ${e.expected}, prejeto ${i}`:`Neveljaven vnos: pričakovano ${t}, prejeto ${i}`}case`invalid_value`:return e.values.length===1?`Neveljaven vnos: pričakovano ${x(e.values[0])}`:`Neveljavna možnost: pričakovano eno izmed ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Preveliko: pričakovano, da bo ${e.origin??`vrednost`} imelo ${n}${e.maximum.toString()} ${r.unit??`elementov`}`:`Preveliko: pričakovano, da bo ${e.origin??`vrednost`} ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Premajhno: pričakovano, da bo ${e.origin} imelo ${n}${e.minimum.toString()} ${r.unit}`:`Premajhno: pričakovano, da bo ${e.origin} ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Neveljaven niz: mora se začeti z "${t.prefix}"`:t.format===`ends_with`?`Neveljaven niz: mora se končati z "${t.suffix}"`:t.format===`includes`?`Neveljaven niz: mora vsebovati "${t.includes}"`:t.format===`regex`?`Neveljaven niz: mora ustrezati vzorcu ${t.pattern}`:`Neveljaven ${n[t.format]??e.format}`}case`not_multiple_of`:return`Neveljavno število: mora biti večkratnik ${e.divisor}`;case`unrecognized_keys`:return`Neprepoznan${e.keys.length>1?`i ključi`:` ključ`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Neveljaven ključ v ${e.origin}`;case`invalid_union`:return`Neveljaven vnos`;case`invalid_element`:return`Neveljavna vrednost v ${e.origin}`;default:return`Neveljaven vnos`}}};function po(){return{localeError:fo()}}var mo=()=>{let e={string:{unit:`tecken`,verb:`att ha`},file:{unit:`bytes`,verb:`att ha`},array:{unit:`objekt`,verb:`att innehålla`},set:{unit:`objekt`,verb:`att innehålla`}};function t(t){return e[t]??null}let n={regex:`reguljärt uttryck`,email:`e-postadress`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO-datum och tid`,date:`ISO-datum`,time:`ISO-tid`,duration:`ISO-varaktighet`,ipv4:`IPv4-intervall`,ipv6:`IPv6-intervall`,cidrv4:`IPv4-spektrum`,cidrv6:`IPv6-spektrum`,base64:`base64-kodad sträng`,base64url:`base64url-kodad sträng`,json_string:`JSON-sträng`,e164:`E.164-nummer`,jwt:`JWT`,template_literal:`mall-literal`},r={nan:`NaN`,number:`antal`,array:`lista`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Ogiltig inmatning: förväntat instanceof ${e.expected}, fick ${i}`:`Ogiltig inmatning: förväntat ${t}, fick ${i}`}case`invalid_value`:return e.values.length===1?`Ogiltig inmatning: förväntat ${x(e.values[0])}`:`Ogiltigt val: förväntade en av ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`För stor(t): förväntade ${e.origin??`värdet`} att ha ${n}${e.maximum.toString()} ${r.unit??`element`}`:`För stor(t): förväntat ${e.origin??`värdet`} att ha ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`För lite(t): förväntade ${e.origin??`värdet`} att ha ${n}${e.minimum.toString()} ${r.unit}`:`För lite(t): förväntade ${e.origin??`värdet`} att ha ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Ogiltig sträng: måste börja med "${t.prefix}"`:t.format===`ends_with`?`Ogiltig sträng: måste sluta med "${t.suffix}"`:t.format===`includes`?`Ogiltig sträng: måste innehålla "${t.includes}"`:t.format===`regex`?`Ogiltig sträng: måste matcha mönstret "${t.pattern}"`:`Ogiltig(t) ${n[t.format]??e.format}`}case`not_multiple_of`:return`Ogiltigt tal: måste vara en multipel av ${e.divisor}`;case`unrecognized_keys`:return`${e.keys.length>1?`Okända nycklar`:`Okänd nyckel`}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Ogiltig nyckel i ${e.origin??`värdet`}`;case`invalid_union`:return`Ogiltig input`;case`invalid_element`:return`Ogiltigt värde i ${e.origin??`värdet`}`;default:return`Ogiltig input`}}};function ho(){return{localeError:mo()}}var go=()=>{let e={string:{unit:`எழுத்துக்கள்`,verb:`கொண்டிருக்க வேண்டும்`},file:{unit:`பைட்டுகள்`,verb:`கொண்டிருக்க வேண்டும்`},array:{unit:`உறுப்புகள்`,verb:`கொண்டிருக்க வேண்டும்`},set:{unit:`உறுப்புகள்`,verb:`கொண்டிருக்க வேண்டும்`}};function t(t){return e[t]??null}let n={regex:`உள்ளீடு`,email:`மின்னஞ்சல் முகவரி`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO தேதி நேரம்`,date:`ISO தேதி`,time:`ISO நேரம்`,duration:`ISO கால அளவு`,ipv4:`IPv4 முகவரி`,ipv6:`IPv6 முகவரி`,cidrv4:`IPv4 வரம்பு`,cidrv6:`IPv6 வரம்பு`,base64:`base64-encoded சரம்`,base64url:`base64url-encoded சரம்`,json_string:`JSON சரம்`,e164:`E.164 எண்`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`,number:`எண்`,array:`அணி`,null:`வெறுமை`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது instanceof ${e.expected}, பெறப்பட்டது ${i}`:`தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${t}, பெறப்பட்டது ${i}`}case`invalid_value`:return e.values.length===1?`தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${x(e.values[0])}`:`தவறான விருப்பம்: எதிர்பார்க்கப்பட்டது ${f(e.values,`|`)} இல் ஒன்று`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`மிக பெரியது: எதிர்பார்க்கப்பட்டது ${e.origin??`மதிப்பு`} ${n}${e.maximum.toString()} ${r.unit??`உறுப்புகள்`} ஆக இருக்க வேண்டும்`:`மிக பெரியது: எதிர்பார்க்கப்பட்டது ${e.origin??`மதிப்பு`} ${n}${e.maximum.toString()} ஆக இருக்க வேண்டும்`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${e.origin} ${n}${e.minimum.toString()} ${r.unit} ஆக இருக்க வேண்டும்`:`மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${e.origin} ${n}${e.minimum.toString()} ஆக இருக்க வேண்டும்`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`தவறான சரம்: "${t.prefix}" இல் தொடங்க வேண்டும்`:t.format===`ends_with`?`தவறான சரம்: "${t.suffix}" இல் முடிவடைய வேண்டும்`:t.format===`includes`?`தவறான சரம்: "${t.includes}" ஐ உள்ளடக்க வேண்டும்`:t.format===`regex`?`தவறான சரம்: ${t.pattern} முறைபாட்டுடன் பொருந்த வேண்டும்`:`தவறான ${n[t.format]??e.format}`}case`not_multiple_of`:return`தவறான எண்: ${e.divisor} இன் பலமாக இருக்க வேண்டும்`;case`unrecognized_keys`:return`அடையாளம் தெரியாத விசை${e.keys.length>1?`கள்`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`${e.origin} இல் தவறான விசை`;case`invalid_union`:return`தவறான உள்ளீடு`;case`invalid_element`:return`${e.origin} இல் தவறான மதிப்பு`;default:return`தவறான உள்ளீடு`}}};function _o(){return{localeError:go()}}var vo=()=>{let e={string:{unit:`ตัวอักษร`,verb:`ควรมี`},file:{unit:`ไบต์`,verb:`ควรมี`},array:{unit:`รายการ`,verb:`ควรมี`},set:{unit:`รายการ`,verb:`ควรมี`}};function t(t){return e[t]??null}let n={regex:`ข้อมูลที่ป้อน`,email:`ที่อยู่อีเมล`,url:`URL`,emoji:`อิโมจิ`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`วันที่เวลาแบบ ISO`,date:`วันที่แบบ ISO`,time:`เวลาแบบ ISO`,duration:`ช่วงเวลาแบบ ISO`,ipv4:`ที่อยู่ IPv4`,ipv6:`ที่อยู่ IPv6`,cidrv4:`ช่วง IP แบบ IPv4`,cidrv6:`ช่วง IP แบบ IPv6`,base64:`ข้อความแบบ Base64`,base64url:`ข้อความแบบ Base64 สำหรับ URL`,json_string:`ข้อความแบบ JSON`,e164:`เบอร์โทรศัพท์ระหว่างประเทศ (E.164)`,jwt:`โทเคน JWT`,template_literal:`ข้อมูลที่ป้อน`},r={nan:`NaN`,number:`ตัวเลข`,array:`อาร์เรย์ (Array)`,null:`ไม่มีค่า (null)`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น instanceof ${e.expected} แต่ได้รับ ${i}`:`ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น ${t} แต่ได้รับ ${i}`}case`invalid_value`:return e.values.length===1?`ค่าไม่ถูกต้อง: ควรเป็น ${x(e.values[0])}`:`ตัวเลือกไม่ถูกต้อง: ควรเป็นหนึ่งใน ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`ไม่เกิน`:`น้อยกว่า`,r=t(e.origin);return r?`เกินกำหนด: ${e.origin??`ค่า`} ควรมี${n} ${e.maximum.toString()} ${r.unit??`รายการ`}`:`เกินกำหนด: ${e.origin??`ค่า`} ควรมี${n} ${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`อย่างน้อย`:`มากกว่า`,r=t(e.origin);return r?`น้อยกว่ากำหนด: ${e.origin} ควรมี${n} ${e.minimum.toString()} ${r.unit}`:`น้อยกว่ากำหนด: ${e.origin} ควรมี${n} ${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`รูปแบบไม่ถูกต้อง: ข้อความต้องขึ้นต้นด้วย "${t.prefix}"`:t.format===`ends_with`?`รูปแบบไม่ถูกต้อง: ข้อความต้องลงท้ายด้วย "${t.suffix}"`:t.format===`includes`?`รูปแบบไม่ถูกต้อง: ข้อความต้องมี "${t.includes}" อยู่ในข้อความ`:t.format===`regex`?`รูปแบบไม่ถูกต้อง: ต้องตรงกับรูปแบบที่กำหนด ${t.pattern}`:`รูปแบบไม่ถูกต้อง: ${n[t.format]??e.format}`}case`not_multiple_of`:return`ตัวเลขไม่ถูกต้อง: ต้องเป็นจำนวนที่หารด้วย ${e.divisor} ได้ลงตัว`;case`unrecognized_keys`:return`พบคีย์ที่ไม่รู้จัก: ${f(e.keys,`, `)}`;case`invalid_key`:return`คีย์ไม่ถูกต้องใน ${e.origin}`;case`invalid_union`:return`ข้อมูลไม่ถูกต้อง: ไม่ตรงกับรูปแบบยูเนียนที่กำหนดไว้`;case`invalid_element`:return`ข้อมูลไม่ถูกต้องใน ${e.origin}`;default:return`ข้อมูลไม่ถูกต้อง`}}};function yo(){return{localeError:vo()}}var bo=()=>{let e={string:{unit:`karakter`,verb:`olmalı`},file:{unit:`bayt`,verb:`olmalı`},array:{unit:`öğe`,verb:`olmalı`},set:{unit:`öğe`,verb:`olmalı`}};function t(t){return e[t]??null}let n={regex:`girdi`,email:`e-posta adresi`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO tarih ve saat`,date:`ISO tarih`,time:`ISO saat`,duration:`ISO süre`,ipv4:`IPv4 adresi`,ipv6:`IPv6 adresi`,cidrv4:`IPv4 aralığı`,cidrv6:`IPv6 aralığı`,base64:`base64 ile şifrelenmiş metin`,base64url:`base64url ile şifrelenmiş metin`,json_string:`JSON dizesi`,e164:`E.164 sayısı`,jwt:`JWT`,template_literal:`Şablon dizesi`},r={nan:`NaN`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Geçersiz değer: beklenen instanceof ${e.expected}, alınan ${i}`:`Geçersiz değer: beklenen ${t}, alınan ${i}`}case`invalid_value`:return e.values.length===1?`Geçersiz değer: beklenen ${x(e.values[0])}`:`Geçersiz seçenek: aşağıdakilerden biri olmalı: ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Çok büyük: beklenen ${e.origin??`değer`} ${n}${e.maximum.toString()} ${r.unit??`öğe`}`:`Çok büyük: beklenen ${e.origin??`değer`} ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Çok küçük: beklenen ${e.origin} ${n}${e.minimum.toString()} ${r.unit}`:`Çok küçük: beklenen ${e.origin} ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Geçersiz metin: "${t.prefix}" ile başlamalı`:t.format===`ends_with`?`Geçersiz metin: "${t.suffix}" ile bitmeli`:t.format===`includes`?`Geçersiz metin: "${t.includes}" içermeli`:t.format===`regex`?`Geçersiz metin: ${t.pattern} desenine uymalı`:`Geçersiz ${n[t.format]??e.format}`}case`not_multiple_of`:return`Geçersiz sayı: ${e.divisor} ile tam bölünebilmeli`;case`unrecognized_keys`:return`Tanınmayan anahtar${e.keys.length>1?`lar`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`${e.origin} içinde geçersiz anahtar`;case`invalid_union`:return`Geçersiz değer`;case`invalid_element`:return`${e.origin} içinde geçersiz değer`;default:return`Geçersiz değer`}}};function xo(){return{localeError:bo()}}var So=()=>{let e={string:{unit:`символів`,verb:`матиме`},file:{unit:`байтів`,verb:`матиме`},array:{unit:`елементів`,verb:`матиме`},set:{unit:`елементів`,verb:`матиме`}};function t(t){return e[t]??null}let n={regex:`вхідні дані`,email:`адреса електронної пошти`,url:`URL`,emoji:`емодзі`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`дата та час ISO`,date:`дата ISO`,time:`час ISO`,duration:`тривалість ISO`,ipv4:`адреса IPv4`,ipv6:`адреса IPv6`,cidrv4:`діапазон IPv4`,cidrv6:`діапазон IPv6`,base64:`рядок у кодуванні base64`,base64url:`рядок у кодуванні base64url`,json_string:`рядок JSON`,e164:`номер E.164`,jwt:`JWT`,template_literal:`вхідні дані`},r={nan:`NaN`,number:`число`,array:`масив`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Неправильні вхідні дані: очікується instanceof ${e.expected}, отримано ${i}`:`Неправильні вхідні дані: очікується ${t}, отримано ${i}`}case`invalid_value`:return e.values.length===1?`Неправильні вхідні дані: очікується ${x(e.values[0])}`:`Неправильна опція: очікується одне з ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Занадто велике: очікується, що ${e.origin??`значення`} ${r.verb} ${n}${e.maximum.toString()} ${r.unit??`елементів`}`:`Занадто велике: очікується, що ${e.origin??`значення`} буде ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Занадто мале: очікується, що ${e.origin} ${r.verb} ${n}${e.minimum.toString()} ${r.unit}`:`Занадто мале: очікується, що ${e.origin} буде ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Неправильний рядок: повинен починатися з "${t.prefix}"`:t.format===`ends_with`?`Неправильний рядок: повинен закінчуватися на "${t.suffix}"`:t.format===`includes`?`Неправильний рядок: повинен містити "${t.includes}"`:t.format===`regex`?`Неправильний рядок: повинен відповідати шаблону ${t.pattern}`:`Неправильний ${n[t.format]??e.format}`}case`not_multiple_of`:return`Неправильне число: повинно бути кратним ${e.divisor}`;case`unrecognized_keys`:return`Нерозпізнаний ключ${e.keys.length>1?`і`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`Неправильний ключ у ${e.origin}`;case`invalid_union`:return`Неправильні вхідні дані`;case`invalid_element`:return`Неправильне значення у ${e.origin}`;default:return`Неправильні вхідні дані`}}};function Co(){return{localeError:So()}}function wo(){return Co()}var To=()=>{let e={string:{unit:`حروف`,verb:`ہونا`},file:{unit:`بائٹس`,verb:`ہونا`},array:{unit:`آئٹمز`,verb:`ہونا`},set:{unit:`آئٹمز`,verb:`ہونا`}};function t(t){return e[t]??null}let n={regex:`ان پٹ`,email:`ای میل ایڈریس`,url:`یو آر ایل`,emoji:`ایموجی`,uuid:`یو یو آئی ڈی`,uuidv4:`یو یو آئی ڈی وی 4`,uuidv6:`یو یو آئی ڈی وی 6`,nanoid:`نینو آئی ڈی`,guid:`جی یو آئی ڈی`,cuid:`سی یو آئی ڈی`,cuid2:`سی یو آئی ڈی 2`,ulid:`یو ایل آئی ڈی`,xid:`ایکس آئی ڈی`,ksuid:`کے ایس یو آئی ڈی`,datetime:`آئی ایس او ڈیٹ ٹائم`,date:`آئی ایس او تاریخ`,time:`آئی ایس او وقت`,duration:`آئی ایس او مدت`,ipv4:`آئی پی وی 4 ایڈریس`,ipv6:`آئی پی وی 6 ایڈریس`,cidrv4:`آئی پی وی 4 رینج`,cidrv6:`آئی پی وی 6 رینج`,base64:`بیس 64 ان کوڈڈ سٹرنگ`,base64url:`بیس 64 یو آر ایل ان کوڈڈ سٹرنگ`,json_string:`جے ایس او این سٹرنگ`,e164:`ای 164 نمبر`,jwt:`جے ڈبلیو ٹی`,template_literal:`ان پٹ`},r={nan:`NaN`,number:`نمبر`,array:`آرے`,null:`نل`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`غلط ان پٹ: instanceof ${e.expected} متوقع تھا، ${i} موصول ہوا`:`غلط ان پٹ: ${t} متوقع تھا، ${i} موصول ہوا`}case`invalid_value`:return e.values.length===1?`غلط ان پٹ: ${x(e.values[0])} متوقع تھا`:`غلط آپشن: ${f(e.values,`|`)} میں سے ایک متوقع تھا`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`بہت بڑا: ${e.origin??`ویلیو`} کے ${n}${e.maximum.toString()} ${r.unit??`عناصر`} ہونے متوقع تھے`:`بہت بڑا: ${e.origin??`ویلیو`} کا ${n}${e.maximum.toString()} ہونا متوقع تھا`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`بہت چھوٹا: ${e.origin} کے ${n}${e.minimum.toString()} ${r.unit} ہونے متوقع تھے`:`بہت چھوٹا: ${e.origin} کا ${n}${e.minimum.toString()} ہونا متوقع تھا`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`غلط سٹرنگ: "${t.prefix}" سے شروع ہونا چاہیے`:t.format===`ends_with`?`غلط سٹرنگ: "${t.suffix}" پر ختم ہونا چاہیے`:t.format===`includes`?`غلط سٹرنگ: "${t.includes}" شامل ہونا چاہیے`:t.format===`regex`?`غلط سٹرنگ: پیٹرن ${t.pattern} سے میچ ہونا چاہیے`:`غلط ${n[t.format]??e.format}`}case`not_multiple_of`:return`غلط نمبر: ${e.divisor} کا مضاعف ہونا چاہیے`;case`unrecognized_keys`:return`غیر تسلیم شدہ کی${e.keys.length>1?`ز`:``}: ${f(e.keys,`، `)}`;case`invalid_key`:return`${e.origin} میں غلط کی`;case`invalid_union`:return`غلط ان پٹ`;case`invalid_element`:return`${e.origin} میں غلط ویلیو`;default:return`غلط ان پٹ`}}};function Eo(){return{localeError:To()}}var Do=()=>{let e={string:{unit:`belgi`,verb:`bo‘lishi kerak`},file:{unit:`bayt`,verb:`bo‘lishi kerak`},array:{unit:`element`,verb:`bo‘lishi kerak`},set:{unit:`element`,verb:`bo‘lishi kerak`}};function t(t){return e[t]??null}let n={regex:`kirish`,email:`elektron pochta manzili`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO sana va vaqti`,date:`ISO sana`,time:`ISO vaqt`,duration:`ISO davomiylik`,ipv4:`IPv4 manzil`,ipv6:`IPv6 manzil`,mac:`MAC manzil`,cidrv4:`IPv4 diapazon`,cidrv6:`IPv6 diapazon`,base64:`base64 kodlangan satr`,base64url:`base64url kodlangan satr`,json_string:`JSON satr`,e164:`E.164 raqam`,jwt:`JWT`,template_literal:`kirish`},r={nan:`NaN`,number:`raqam`,array:`massiv`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Noto‘g‘ri kirish: kutilgan instanceof ${e.expected}, qabul qilingan ${i}`:`Noto‘g‘ri kirish: kutilgan ${t}, qabul qilingan ${i}`}case`invalid_value`:return e.values.length===1?`Noto‘g‘ri kirish: kutilgan ${x(e.values[0])}`:`Noto‘g‘ri variant: quyidagilardan biri kutilgan ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Juda katta: kutilgan ${e.origin??`qiymat`} ${n}${e.maximum.toString()} ${r.unit} ${r.verb}`:`Juda katta: kutilgan ${e.origin??`qiymat`} ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Juda kichik: kutilgan ${e.origin} ${n}${e.minimum.toString()} ${r.unit} ${r.verb}`:`Juda kichik: kutilgan ${e.origin} ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Noto‘g‘ri satr: "${t.prefix}" bilan boshlanishi kerak`:t.format===`ends_with`?`Noto‘g‘ri satr: "${t.suffix}" bilan tugashi kerak`:t.format===`includes`?`Noto‘g‘ri satr: "${t.includes}" ni o‘z ichiga olishi kerak`:t.format===`regex`?`Noto‘g‘ri satr: ${t.pattern} shabloniga mos kelishi kerak`:`Noto‘g‘ri ${n[t.format]??e.format}`}case`not_multiple_of`:return`Noto‘g‘ri raqam: ${e.divisor} ning karralisi bo‘lishi kerak`;case`unrecognized_keys`:return`Noma’lum kalit${e.keys.length>1?`lar`:``}: ${f(e.keys,`, `)}`;case`invalid_key`:return`${e.origin} dagi kalit noto‘g‘ri`;case`invalid_union`:return`Noto‘g‘ri kirish`;case`invalid_element`:return`${e.origin} da noto‘g‘ri qiymat`;default:return`Noto‘g‘ri kirish`}}};function Oo(){return{localeError:Do()}}var ko=()=>{let e={string:{unit:`ký tự`,verb:`có`},file:{unit:`byte`,verb:`có`},array:{unit:`phần tử`,verb:`có`},set:{unit:`phần tử`,verb:`có`}};function t(t){return e[t]??null}let n={regex:`đầu vào`,email:`địa chỉ email`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ngày giờ ISO`,date:`ngày ISO`,time:`giờ ISO`,duration:`khoảng thời gian ISO`,ipv4:`địa chỉ IPv4`,ipv6:`địa chỉ IPv6`,cidrv4:`dải IPv4`,cidrv6:`dải IPv6`,base64:`chuỗi mã hóa base64`,base64url:`chuỗi mã hóa base64url`,json_string:`chuỗi JSON`,e164:`số E.164`,jwt:`JWT`,template_literal:`đầu vào`},r={nan:`NaN`,number:`số`,array:`mảng`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Đầu vào không hợp lệ: mong đợi instanceof ${e.expected}, nhận được ${i}`:`Đầu vào không hợp lệ: mong đợi ${t}, nhận được ${i}`}case`invalid_value`:return e.values.length===1?`Đầu vào không hợp lệ: mong đợi ${x(e.values[0])}`:`Tùy chọn không hợp lệ: mong đợi một trong các giá trị ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Quá lớn: mong đợi ${e.origin??`giá trị`} ${r.verb} ${n}${e.maximum.toString()} ${r.unit??`phần tử`}`:`Quá lớn: mong đợi ${e.origin??`giá trị`} ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Quá nhỏ: mong đợi ${e.origin} ${r.verb} ${n}${e.minimum.toString()} ${r.unit}`:`Quá nhỏ: mong đợi ${e.origin} ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Chuỗi không hợp lệ: phải bắt đầu bằng "${t.prefix}"`:t.format===`ends_with`?`Chuỗi không hợp lệ: phải kết thúc bằng "${t.suffix}"`:t.format===`includes`?`Chuỗi không hợp lệ: phải bao gồm "${t.includes}"`:t.format===`regex`?`Chuỗi không hợp lệ: phải khớp với mẫu ${t.pattern}`:`${n[t.format]??e.format} không hợp lệ`}case`not_multiple_of`:return`Số không hợp lệ: phải là bội số của ${e.divisor}`;case`unrecognized_keys`:return`Khóa không được nhận dạng: ${f(e.keys,`, `)}`;case`invalid_key`:return`Khóa không hợp lệ trong ${e.origin}`;case`invalid_union`:return`Đầu vào không hợp lệ`;case`invalid_element`:return`Giá trị không hợp lệ trong ${e.origin}`;default:return`Đầu vào không hợp lệ`}}};function Ao(){return{localeError:ko()}}var jo=()=>{let e={string:{unit:`字符`,verb:`包含`},file:{unit:`字节`,verb:`包含`},array:{unit:`项`,verb:`包含`},set:{unit:`项`,verb:`包含`}};function t(t){return e[t]??null}let n={regex:`输入`,email:`电子邮件`,url:`URL`,emoji:`表情符号`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO日期时间`,date:`ISO日期`,time:`ISO时间`,duration:`ISO时长`,ipv4:`IPv4地址`,ipv6:`IPv6地址`,cidrv4:`IPv4网段`,cidrv6:`IPv6网段`,base64:`base64编码字符串`,base64url:`base64url编码字符串`,json_string:`JSON字符串`,e164:`E.164号码`,jwt:`JWT`,template_literal:`输入`},r={nan:`NaN`,number:`数字`,array:`数组`,null:`空值(null)`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`无效输入:期望 instanceof ${e.expected},实际接收 ${i}`:`无效输入:期望 ${t},实际接收 ${i}`}case`invalid_value`:return e.values.length===1?`无效输入:期望 ${x(e.values[0])}`:`无效选项:期望以下之一 ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`数值过大:期望 ${e.origin??`值`} ${n}${e.maximum.toString()} ${r.unit??`个元素`}`:`数值过大:期望 ${e.origin??`值`} ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`数值过小:期望 ${e.origin} ${n}${e.minimum.toString()} ${r.unit}`:`数值过小:期望 ${e.origin} ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`无效字符串:必须以 "${t.prefix}" 开头`:t.format===`ends_with`?`无效字符串:必须以 "${t.suffix}" 结尾`:t.format===`includes`?`无效字符串:必须包含 "${t.includes}"`:t.format===`regex`?`无效字符串:必须满足正则表达式 ${t.pattern}`:`无效${n[t.format]??e.format}`}case`not_multiple_of`:return`无效数字:必须是 ${e.divisor} 的倍数`;case`unrecognized_keys`:return`出现未知的键(key): ${f(e.keys,`, `)}`;case`invalid_key`:return`${e.origin} 中的键(key)无效`;case`invalid_union`:return`无效输入`;case`invalid_element`:return`${e.origin} 中包含无效值(value)`;default:return`无效输入`}}};function Mo(){return{localeError:jo()}}var No=()=>{let e={string:{unit:`字元`,verb:`擁有`},file:{unit:`位元組`,verb:`擁有`},array:{unit:`項目`,verb:`擁有`},set:{unit:`項目`,verb:`擁有`}};function t(t){return e[t]??null}let n={regex:`輸入`,email:`郵件地址`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO 日期時間`,date:`ISO 日期`,time:`ISO 時間`,duration:`ISO 期間`,ipv4:`IPv4 位址`,ipv6:`IPv6 位址`,cidrv4:`IPv4 範圍`,cidrv6:`IPv6 範圍`,base64:`base64 編碼字串`,base64url:`base64url 編碼字串`,json_string:`JSON 字串`,e164:`E.164 數值`,jwt:`JWT`,template_literal:`輸入`},r={nan:`NaN`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`無效的輸入值:預期為 instanceof ${e.expected},但收到 ${i}`:`無效的輸入值:預期為 ${t},但收到 ${i}`}case`invalid_value`:return e.values.length===1?`無效的輸入值:預期為 ${x(e.values[0])}`:`無效的選項:預期為以下其中之一 ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`數值過大:預期 ${e.origin??`值`} 應為 ${n}${e.maximum.toString()} ${r.unit??`個元素`}`:`數值過大:預期 ${e.origin??`值`} 應為 ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`數值過小:預期 ${e.origin} 應為 ${n}${e.minimum.toString()} ${r.unit}`:`數值過小:預期 ${e.origin} 應為 ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`無效的字串:必須以 "${t.prefix}" 開頭`:t.format===`ends_with`?`無效的字串:必須以 "${t.suffix}" 結尾`:t.format===`includes`?`無效的字串:必須包含 "${t.includes}"`:t.format===`regex`?`無效的字串:必須符合格式 ${t.pattern}`:`無效的 ${n[t.format]??e.format}`}case`not_multiple_of`:return`無效的數字:必須為 ${e.divisor} 的倍數`;case`unrecognized_keys`:return`無法識別的鍵值${e.keys.length>1?`們`:``}:${f(e.keys,`、`)}`;case`invalid_key`:return`${e.origin} 中有無效的鍵值`;case`invalid_union`:return`無效的輸入值`;case`invalid_element`:return`${e.origin} 中有無效的值`;default:return`無效的輸入值`}}};function Po(){return{localeError:No()}}var Fo=()=>{let e={string:{unit:`àmi`,verb:`ní`},file:{unit:`bytes`,verb:`ní`},array:{unit:`nkan`,verb:`ní`},set:{unit:`nkan`,verb:`ní`}};function t(t){return e[t]??null}let n={regex:`ẹ̀rọ ìbáwọlé`,email:`àdírẹ́sì ìmẹ́lì`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`àkókò ISO`,date:`ọjọ́ ISO`,time:`àkókò ISO`,duration:`àkókò tó pé ISO`,ipv4:`àdírẹ́sì IPv4`,ipv6:`àdírẹ́sì IPv6`,cidrv4:`àgbègbè IPv4`,cidrv6:`àgbègbè IPv6`,base64:`ọ̀rọ̀ tí a kọ́ ní base64`,base64url:`ọ̀rọ̀ base64url`,json_string:`ọ̀rọ̀ JSON`,e164:`nọ́mbà E.164`,jwt:`JWT`,template_literal:`ẹ̀rọ ìbáwọlé`},r={nan:`NaN`,number:`nọ́mbà`,array:`akopọ`};return e=>{switch(e.code){case`invalid_type`:{let t=r[e.expected]??e.expected,n=T(e.input),i=r[n]??n;return/^[A-Z]/.test(e.expected)?`Ìbáwọlé aṣìṣe: a ní láti fi instanceof ${e.expected}, àmọ̀ a rí ${i}`:`Ìbáwọlé aṣìṣe: a ní láti fi ${t}, àmọ̀ a rí ${i}`}case`invalid_value`:return e.values.length===1?`Ìbáwọlé aṣìṣe: a ní láti fi ${x(e.values[0])}`:`Àṣàyàn aṣìṣe: yan ọ̀kan lára ${f(e.values,`|`)}`;case`too_big`:{let n=e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Tó pọ̀ jù: a ní láti jẹ́ pé ${e.origin??`iye`} ${r.verb} ${n}${e.maximum} ${r.unit}`:`Tó pọ̀ jù: a ní láti jẹ́ ${n}${e.maximum}`}case`too_small`:{let n=e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Kéré ju: a ní láti jẹ́ pé ${e.origin} ${r.verb} ${n}${e.minimum} ${r.unit}`:`Kéré ju: a ní láti jẹ́ ${n}${e.minimum}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bẹ̀rẹ̀ pẹ̀lú "${t.prefix}"`:t.format===`ends_with`?`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ parí pẹ̀lú "${t.suffix}"`:t.format===`includes`?`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ ní "${t.includes}"`:t.format===`regex`?`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bá àpẹẹrẹ mu ${t.pattern}`:`Aṣìṣe: ${n[t.format]??e.format}`}case`not_multiple_of`:return`Nọ́mbà aṣìṣe: gbọ́dọ̀ jẹ́ èyà pípín ti ${e.divisor}`;case`unrecognized_keys`:return`Bọtìnì àìmọ̀: ${f(e.keys,`, `)}`;case`invalid_key`:return`Bọtìnì aṣìṣe nínú ${e.origin}`;case`invalid_union`:return`Ìbáwọlé aṣìṣe`;case`invalid_element`:return`Iye aṣìṣe nínú ${e.origin}`;default:return`Ìbáwọlé aṣìṣe`}}};function Io(){return{localeError:Fo()}}var Lo=e({ar:()=>Ui,az:()=>Gi,be:()=>Ji,bg:()=>Xi,ca:()=>Qi,cs:()=>ea,da:()=>na,de:()=>ia,en:()=>oa,eo:()=>ca,es:()=>ua,fa:()=>fa,fi:()=>ma,fr:()=>ga,frCA:()=>va,he:()=>ba,hu:()=>Sa,hy:()=>Ea,id:()=>Oa,is:()=>Aa,it:()=>Ma,ja:()=>Pa,ka:()=>Ia,kh:()=>za,km:()=>Ra,ko:()=>Va,lt:()=>Ga,mk:()=>qa,ms:()=>Ya,nl:()=>Za,no:()=>$a,ota:()=>to,pl:()=>ao,ps:()=>ro,pt:()=>so,ru:()=>uo,sl:()=>po,sv:()=>ho,ta:()=>_o,th:()=>yo,tr:()=>xo,ua:()=>wo,uk:()=>Co,ur:()=>Eo,uz:()=>Oo,vi:()=>Ao,yo:()=>Io,zhCN:()=>Mo,zhTW:()=>Po}),Ro,zo=Symbol(`ZodOutput`),Bo=Symbol(`ZodInput`),Vo=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function Ho(){return new Vo}(Ro=globalThis).__zod_globalRegistry??(Ro.__zod_globalRegistry=Ho());var M=globalThis.__zod_globalRegistry;function Uo(e,t){return new e({type:`string`,...b(t)})}function Wo(e,t){return new e({type:`string`,coerce:!0,...b(t)})}function Go(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...b(t)})}function Ko(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...b(t)})}function qo(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...b(t)})}function Jo(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...b(t)})}function Yo(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...b(t)})}function Xo(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...b(t)})}function Zo(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...b(t)})}function Qo(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...b(t)})}function $o(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...b(t)})}function es(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...b(t)})}function ts(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...b(t)})}function ns(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...b(t)})}function rs(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...b(t)})}function is(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...b(t)})}function as(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...b(t)})}function os(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...b(t)})}function ss(e,t){return new e({type:`string`,format:`mac`,check:`string_format`,abort:!1,...b(t)})}function cs(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...b(t)})}function ls(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...b(t)})}function us(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...b(t)})}function ds(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...b(t)})}function fs(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...b(t)})}function ps(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...b(t)})}var ms={Any:null,Minute:-1,Second:0,Millisecond:3,Microsecond:6};function hs(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...b(t)})}function gs(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...b(t)})}function _s(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...b(t)})}function vs(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...b(t)})}function ys(e,t){return new e({type:`number`,checks:[],...b(t)})}function bs(e,t){return new e({type:`number`,coerce:!0,checks:[],...b(t)})}function xs(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...b(t)})}function Ss(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`float32`,...b(t)})}function Cs(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`float64`,...b(t)})}function ws(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`int32`,...b(t)})}function Ts(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`uint32`,...b(t)})}function Es(e,t){return new e({type:`boolean`,...b(t)})}function Ds(e,t){return new e({type:`boolean`,coerce:!0,...b(t)})}function Os(e,t){return new e({type:`bigint`,...b(t)})}function ks(e,t){return new e({type:`bigint`,coerce:!0,...b(t)})}function As(e,t){return new e({type:`bigint`,check:`bigint_format`,abort:!1,format:`int64`,...b(t)})}function js(e,t){return new e({type:`bigint`,check:`bigint_format`,abort:!1,format:`uint64`,...b(t)})}function Ms(e,t){return new e({type:`symbol`,...b(t)})}function Ns(e,t){return new e({type:`undefined`,...b(t)})}function Ps(e,t){return new e({type:`null`,...b(t)})}function Fs(e){return new e({type:`any`})}function Is(e){return new e({type:`unknown`})}function Ls(e,t){return new e({type:`never`,...b(t)})}function Rs(e,t){return new e({type:`void`,...b(t)})}function zs(e,t){return new e({type:`date`,...b(t)})}function Bs(e,t){return new e({type:`date`,coerce:!0,...b(t)})}function Vs(e,t){return new e({type:`nan`,...b(t)})}function N(e,t){return new Nn({check:`less_than`,...b(t),value:e,inclusive:!1})}function P(e,t){return new Nn({check:`less_than`,...b(t),value:e,inclusive:!0})}function F(e,t){return new Pn({check:`greater_than`,...b(t),value:e,inclusive:!1})}function I(e,t){return new Pn({check:`greater_than`,...b(t),value:e,inclusive:!0})}function Hs(e){return F(0,e)}function Us(e){return N(0,e)}function Ws(e){return P(0,e)}function Gs(e){return I(0,e)}function L(e,t){return new Fn({check:`multiple_of`,...b(t),value:e})}function R(e,t){return new Rn({check:`max_size`,...b(t),maximum:e})}function z(e,t){return new zn({check:`min_size`,...b(t),minimum:e})}function Ks(e,t){return new Bn({check:`size_equals`,...b(t),size:e})}function qs(e,t){return new Vn({check:`max_length`,...b(t),maximum:e})}function B(e,t){return new Hn({check:`min_length`,...b(t),minimum:e})}function Js(e,t){return new Un({check:`length_equals`,...b(t),length:e})}function Ys(e,t){return new Gn({check:`string_format`,format:`regex`,...b(t),pattern:e})}function Xs(e){return new Kn({check:`string_format`,format:`lowercase`,...b(e)})}function Zs(e){return new qn({check:`string_format`,format:`uppercase`,...b(e)})}function Qs(e,t){return new Jn({check:`string_format`,format:`includes`,...b(t),includes:e})}function $s(e,t){return new Yn({check:`string_format`,format:`starts_with`,...b(t),prefix:e})}function ec(e,t){return new Xn({check:`string_format`,format:`ends_with`,...b(t),suffix:e})}function tc(e,t,n){return new Qn({check:`property`,property:e,schema:t,...b(n)})}function nc(e,t){return new $n({check:`mime_type`,mime:e,...b(t)})}function V(e){return new er({check:`overwrite`,tx:e})}function rc(e){return V(t=>t.normalize(e))}function ic(){return V(e=>e.trim())}function ac(){return V(e=>e.toLowerCase())}function oc(){return V(e=>e.toUpperCase())}function sc(){return V(e=>me(e))}function cc(e,t,n){return new e({type:`array`,element:t,...b(n)})}function lc(e,t,n){return new e({type:`union`,options:t,...b(n)})}function uc(e,t,n){return new e({type:`union`,options:t,inclusive:!1,...b(n)})}function dc(e,t,n,r){return new e({type:`union`,options:n,discriminator:t,...b(r)})}function fc(e,t,n){return new e({type:`intersection`,left:t,right:n})}function pc(e,t,n,r){let i=n instanceof A;return new e({type:`tuple`,items:t,rest:i?n:null,...b(i?r:n)})}function mc(e,t,n,r){return new e({type:`record`,keyType:t,valueType:n,...b(r)})}function hc(e,t,n,r){return new e({type:`map`,keyType:t,valueType:n,...b(r)})}function gc(e,t,n){return new e({type:`set`,valueType:t,...b(n)})}function _c(e,t,n){return new e({type:`enum`,entries:Array.isArray(t)?Object.fromEntries(t.map(e=>[e,e])):t,...b(n)})}function vc(e,t,n){return new e({type:`enum`,entries:t,...b(n)})}function yc(e,t,n){return new e({type:`literal`,values:Array.isArray(t)?t:[t],...b(n)})}function bc(e,t){return new e({type:`file`,...b(t)})}function xc(e,t){return new e({type:`transform`,transform:t})}function Sc(e,t){return new e({type:`optional`,innerType:t})}function Cc(e,t){return new e({type:`nullable`,innerType:t})}function wc(e,t,n){return new e({type:`default`,innerType:t,get defaultValue(){return typeof n==`function`?n():ve(n)}})}function Tc(e,t,n){return new e({type:`nonoptional`,innerType:t,...b(n)})}function Ec(e,t){return new e({type:`success`,innerType:t})}function Dc(e,t,n){return new e({type:`catch`,innerType:t,catchValue:typeof n==`function`?n:()=>n})}function Oc(e,t,n){return new e({type:`pipe`,in:t,out:n})}function kc(e,t){return new e({type:`readonly`,innerType:t})}function Ac(e,t,n){return new e({type:`template_literal`,parts:t,...b(n)})}function jc(e,t){return new e({type:`lazy`,getter:t})}function Mc(e,t){return new e({type:`promise`,innerType:t})}function Nc(e,t,n){let r=b(n);return r.abort??=!0,new e({type:`custom`,check:`custom`,fn:t,...r})}function Pc(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...b(n)})}function Fc(e){let t=Ic(n=>(n.addIssue=e=>{if(typeof e==`string`)n.issues.push(E(e,n.value,t._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,r.input??=n.value,r.inst??=t,r.continue??=!t._zod.def.abort,n.issues.push(E(r))}},e(n.value,n)));return t}function Ic(e,t){let n=new k({check:`custom`,...b(t)});return n._zod.check=e,n}function Lc(e){let t=new k({check:`describe`});return t._zod.onattach=[t=>{let n=M.get(t)??{};M.add(t,{...n,description:e})}],t._zod.check=()=>{},t}function Rc(e){let t=new k({check:`meta`});return t._zod.onattach=[t=>{let n=M.get(t)??{};M.add(t,{...n,...e})}],t._zod.check=()=>{},t}function zc(e,t){let n=b(t),r=n.truthy??[`true`,`1`,`yes`,`on`,`y`,`enabled`],i=n.falsy??[`false`,`0`,`no`,`off`,`n`,`disabled`];n.case!==`sensitive`&&(r=r.map(e=>typeof e==`string`?e.toLowerCase():e),i=i.map(e=>typeof e==`string`?e.toLowerCase():e));let a=new Set(r),o=new Set(i),s=e.Codec??ji,c=e.Boolean??Pr,l=new s({type:`pipe`,in:new(e.String??rr)({type:`string`,error:n.error}),out:new c({type:`boolean`,error:n.error}),transform:((e,t)=>{let r=e;return n.case!==`sensitive`&&(r=r.toLowerCase()),a.has(r)?!0:o.has(r)?!1:(t.issues.push({code:`invalid_value`,expected:`stringbool`,values:[...a,...o],input:t.value,inst:l,continue:!1}),{})}),reverseTransform:((e,t)=>e===!0?r[0]||`true`:i[0]||`false`),error:n.error});return l}function Bc(e,t,n,r={}){let i=b(r),a={...b(r),check:`string_format`,type:`string`,format:t,fn:typeof n==`function`?n:e=>n.test(e),...i};return n instanceof RegExp&&(a.pattern=n),new e(a)}function H(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??M,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,external:e?.external??void 0}}function U(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o);let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,U(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Object.assign(o.schema,c),t.io===`input`&&G(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&o.schema._prefault&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function W(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${a}`}}if(t[1]===n)return{ref:`#`};let i=`#/${r}/`,a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+a}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/ + +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function Vc(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e===`$ref`||e===`allOf`||e in a||delete i[e];if(s.$ref&&n.def)for(let e in i)e===`$ref`||e===`allOf`||e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e===`$ref`||e===`allOf`||e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(a[e.defId]=e.def)}e.external||Object.keys(a).length>0&&(e.target===`draft-2020-12`?i.$defs=a:i.definitions=a);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,`~standard`,{value:{...t[`~standard`],jsonSchema:{input:Uc(t,`input`,e.processors),output:Uc(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function G(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return G(r.element,n);if(r.type===`set`)return G(r.valueType,n);if(r.type===`lazy`)return G(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type===`default`||r.type===`prefault`)return G(r.innerType,n);if(r.type===`intersection`)return G(r.left,n)||G(r.right,n);if(r.type===`record`||r.type===`map`)return G(r.keyType,n)||G(r.valueType,n);if(r.type===`pipe`)return G(r.in,n)||G(r.out,n);if(r.type===`object`){for(let e in r.shape)if(G(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(G(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(G(e,n))return!0;return!!(r.rest&&G(r.rest,n))}return!1}var Hc=(e,t={})=>n=>{let r=H({...n,processors:t});return U(e,r),W(r,e),Vc(r,e)},Uc=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=H({...i??{},target:a,io:t,processors:n});return U(e,o),W(o,e),Vc(o,e)},Wc={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Gc=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Wc[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Kc=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;typeof s==`string`&&s.includes(`int`)?i.type=`integer`:i.type=`number`,typeof u==`number`&&(t.target===`draft-04`||t.target===`openapi-3.0`?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u),typeof a==`number`&&(i.minimum=a,typeof u==`number`&&t.target!==`draft-04`&&(u>=a?delete i.minimum:delete i.exclusiveMinimum)),typeof l==`number`&&(t.target===`draft-04`||t.target===`openapi-3.0`?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l),typeof o==`number`&&(i.maximum=o,typeof l==`number`&&t.target!==`draft-04`&&(l<=o?delete i.maximum:delete i.exclusiveMaximum)),typeof c==`number`&&(i.multipleOf=c)},qc=(e,t,n,r)=>{n.type=`boolean`},Jc=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`BigInt cannot be represented in JSON Schema`)},Yc=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Symbols cannot be represented in JSON Schema`)},Xc=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},Zc=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Undefined cannot be represented in JSON Schema`)},Qc=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Void cannot be represented in JSON Schema`)},$c=(e,t,n,r)=>{n.not={}},el=(e,t,n,r)=>{},tl=(e,t,n,r)=>{},nl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Date cannot be represented in JSON Schema`)},rl=(e,t,n,r)=>{let i=e._zod.def,a=ne(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},il=(e,t,n,r)=>{let i=e._zod.def,a=[];for(let e of i.values)if(e===void 0){if(t.unrepresentable===`throw`)throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof e==`bigint`){if(t.unrepresentable===`throw`)throw Error(`BigInt literals cannot be represented in JSON Schema`);a.push(Number(e))}else a.push(e);if(a.length!==0)if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a},al=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`NaN cannot be represented in JSON Schema`)},ol=(e,t,n,r)=>{let i=n,a=e._zod.pattern;if(!a)throw Error(`Pattern not found in template literal`);i.type=`string`,i.pattern=a.source},sl=(e,t,n,r)=>{let i=n,a={type:`string`,format:`binary`,contentEncoding:`binary`},{minimum:o,maximum:s,mime:c}=e._zod.bag;o!==void 0&&(a.minLength=o),s!==void 0&&(a.maxLength=s),c?c.length===1?(a.contentMediaType=c[0],Object.assign(i,a)):(Object.assign(i,a),i.anyOf=c.map(e=>({contentMediaType:e}))):Object.assign(i,a)},cl=(e,t,n,r)=>{n.type=`boolean`},ll=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},ul=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Function types cannot be represented in JSON Schema`)},dl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},fl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Map cannot be represented in JSON Schema`)},pl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Set cannot be represented in JSON Schema`)},ml=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=U(a.element,t,{...r,path:[...r.path,`items`]})},hl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=U(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=U(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},gl=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>U(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},_l=(e,t,n,r)=>{let i=e._zod.def,a=U(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=U(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},vl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>U(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?U(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null;t.target===`draft-2020-12`?(i.prefixItems=c,l&&(i.items=l)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),i.minItems=c.length,l||(i.maxItems=c.length)):(i.items=c,l&&(i.additionalItems=l));let{minimum:u,maximum:ee}=e._zod.bag;typeof u==`number`&&(i.minItems=u),typeof ee==`number`&&(i.maxItems=ee)},yl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=o._zod.bag?.patterns;if(a.mode===`loose`&&s&&s.size>0){let e=U(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)i.patternProperties[t.source]=e}else (t.target===`draft-07`||t.target===`draft-2020-12`)&&(i.propertyNames=U(a.keyType,t,{...r,path:[...r.path,`propertyNames`]})),i.additionalProperties=U(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]});let c=o._zod.values;if(c){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e)}},bl=(e,t,n,r)=>{let i=e._zod.def,a=U(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},xl=(e,t,n,r)=>{let i=e._zod.def;U(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Sl=(e,t,n,r)=>{let i=e._zod.def;U(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},Cl=(e,t,n,r)=>{let i=e._zod.def;U(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},wl=(e,t,n,r)=>{let i=e._zod.def;U(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},Tl=(e,t,n,r)=>{let i=e._zod.def,a=t.io===`input`?i.in._zod.def.type===`transform`?i.out:i.in:i.out;U(a,t,r);let o=t.seen.get(e);o.ref=a},El=(e,t,n,r)=>{let i=e._zod.def;U(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},Dl=(e,t,n,r)=>{let i=e._zod.def;U(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Ol=(e,t,n,r)=>{let i=e._zod.def;U(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},kl=(e,t,n,r)=>{let i=e._zod.innerType;U(i,t,r);let a=t.seen.get(e);a.ref=i},Al={string:Gc,number:Kc,boolean:qc,bigint:Jc,symbol:Yc,null:Xc,undefined:Zc,void:Qc,never:$c,any:el,unknown:tl,date:nl,enum:rl,literal:il,nan:al,template_literal:ol,file:sl,success:cl,custom:ll,function:ul,transform:dl,map:fl,set:pl,array:ml,object:hl,union:gl,intersection:_l,tuple:vl,record:yl,nullable:bl,nonoptional:xl,default:Sl,prefault:Cl,catch:wl,pipe:Tl,readonly:El,promise:Dl,optional:Ol,lazy:kl};function jl(e,t){if(`_idmap`in e){let n=e,r=H({...t,processors:Al}),i={};for(let e of n._idmap.entries()){let[t,n]=e;U(n,r)}let a={};r.external={registry:n,uri:t?.uri,defs:i};for(let e of n._idmap.entries()){let[t,n]=e;W(r,n),a[t]=Vc(r,n)}return Object.keys(i).length>0&&(a.__shared={[r.target===`draft-2020-12`?`$defs`:`definitions`]:i}),{schemas:a}}let n=H({...t,processors:Al});return U(e,n),W(n,e),Vc(n,e)}var Ml=class{get metadataRegistry(){return this.ctx.metadataRegistry}get target(){return this.ctx.target}get unrepresentable(){return this.ctx.unrepresentable}get override(){return this.ctx.override}get io(){return this.ctx.io}get counter(){return this.ctx.counter}set counter(e){this.ctx.counter=e}get seen(){return this.ctx.seen}constructor(e){let t=e?.target??`draft-2020-12`;t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),this.ctx=H({processors:Al,target:t,...e?.metadata&&{metadata:e.metadata},...e?.unrepresentable&&{unrepresentable:e.unrepresentable},...e?.override&&{override:e.override},...e?.io&&{io:e.io}})}process(e,t={path:[],schemaPath:[]}){return U(e,this.ctx,t)}emit(e,t){t&&(t.cycles&&(this.ctx.cycles=t.cycles),t.reused&&(this.ctx.reused=t.reused),t.external&&(this.ctx.external=t.external)),W(this.ctx,e);let{"~standard":n,...r}=Vc(this.ctx,e);return r}},Nl=e({}),Pl=e({$ZodAny:()=>Br,$ZodArray:()=>Kr,$ZodAsyncError:()=>i,$ZodBase64:()=>Tr,$ZodBase64URL:()=>Dr,$ZodBigInt:()=>Fr,$ZodBigIntFormat:()=>Ir,$ZodBoolean:()=>Pr,$ZodCIDRv4:()=>Sr,$ZodCIDRv6:()=>Cr,$ZodCUID:()=>ur,$ZodCUID2:()=>dr,$ZodCatch:()=>Di,$ZodCheck:()=>k,$ZodCheckBigIntFormat:()=>Ln,$ZodCheckEndsWith:()=>Xn,$ZodCheckGreaterThan:()=>Pn,$ZodCheckIncludes:()=>Jn,$ZodCheckLengthEquals:()=>Un,$ZodCheckLessThan:()=>Nn,$ZodCheckLowerCase:()=>Kn,$ZodCheckMaxLength:()=>Vn,$ZodCheckMaxSize:()=>Rn,$ZodCheckMimeType:()=>$n,$ZodCheckMinLength:()=>Hn,$ZodCheckMinSize:()=>zn,$ZodCheckMultipleOf:()=>Fn,$ZodCheckNumberFormat:()=>In,$ZodCheckOverwrite:()=>er,$ZodCheckProperty:()=>Qn,$ZodCheckRegex:()=>Gn,$ZodCheckSizeEquals:()=>Bn,$ZodCheckStartsWith:()=>Yn,$ZodCheckStringFormat:()=>Wn,$ZodCheckUpperCase:()=>qn,$ZodCodec:()=>ji,$ZodCustom:()=>Bi,$ZodCustomStringFormat:()=>jr,$ZodDate:()=>Wr,$ZodDefault:()=>xi,$ZodDiscriminatedUnion:()=>ni,$ZodE164:()=>Or,$ZodEmail:()=>or,$ZodEmoji:()=>cr,$ZodEncodeError:()=>a,$ZodEnum:()=>pi,$ZodError:()=>Ke,$ZodExactOptional:()=>yi,$ZodFile:()=>hi,$ZodFunction:()=>Li,$ZodGUID:()=>ir,$ZodIPv4:()=>yr,$ZodIPv6:()=>br,$ZodISODate:()=>gr,$ZodISODateTime:()=>hr,$ZodISODuration:()=>vr,$ZodISOTime:()=>_r,$ZodIntersection:()=>ri,$ZodJWT:()=>Ar,$ZodKSUID:()=>mr,$ZodLazy:()=>zi,$ZodLiteral:()=>mi,$ZodMAC:()=>xr,$ZodMap:()=>li,$ZodNaN:()=>Oi,$ZodNanoID:()=>lr,$ZodNever:()=>Hr,$ZodNonOptional:()=>wi,$ZodNull:()=>zr,$ZodNullable:()=>bi,$ZodNumber:()=>Mr,$ZodNumberFormat:()=>Nr,$ZodObject:()=>Xr,$ZodObjectJIT:()=>Zr,$ZodOptional:()=>vi,$ZodPipe:()=>ki,$ZodPrefault:()=>Ci,$ZodPromise:()=>Ri,$ZodReadonly:()=>Pi,$ZodRealError:()=>D,$ZodRecord:()=>ci,$ZodRegistry:()=>Vo,$ZodSet:()=>di,$ZodString:()=>rr,$ZodStringFormat:()=>j,$ZodSuccess:()=>Ei,$ZodSymbol:()=>Lr,$ZodTemplateLiteral:()=>Ii,$ZodTransform:()=>gi,$ZodTuple:()=>oi,$ZodType:()=>A,$ZodULID:()=>fr,$ZodURL:()=>sr,$ZodUUID:()=>ar,$ZodUndefined:()=>Rr,$ZodUnion:()=>$r,$ZodUnknown:()=>Vr,$ZodVoid:()=>Ur,$ZodXID:()=>pr,$ZodXor:()=>ti,$brand:()=>r,$constructor:()=>n,$input:()=>Bo,$output:()=>zo,Doc:()=>tr,JSONSchema:()=>Nl,JSONSchemaGenerator:()=>Ml,NEVER:()=>t,TimePrecision:()=>ms,_any:()=>Fs,_array:()=>cc,_base64:()=>us,_base64url:()=>ds,_bigint:()=>Os,_boolean:()=>Es,_catch:()=>Dc,_check:()=>Ic,_cidrv4:()=>cs,_cidrv6:()=>ls,_coercedBigint:()=>ks,_coercedBoolean:()=>Ds,_coercedDate:()=>Bs,_coercedNumber:()=>bs,_coercedString:()=>Wo,_cuid:()=>es,_cuid2:()=>ts,_custom:()=>Nc,_date:()=>zs,_decode:()=>ct,_decodeAsync:()=>ft,_default:()=>wc,_discriminatedUnion:()=>dc,_e164:()=>fs,_email:()=>Go,_emoji:()=>Qo,_encode:()=>ot,_encodeAsync:()=>ut,_endsWith:()=>ec,_enum:()=>_c,_file:()=>bc,_float32:()=>Ss,_float64:()=>Cs,_gt:()=>F,_gte:()=>I,_guid:()=>Ko,_includes:()=>Qs,_int:()=>xs,_int32:()=>ws,_int64:()=>As,_intersection:()=>fc,_ipv4:()=>as,_ipv6:()=>os,_isoDate:()=>gs,_isoDateTime:()=>hs,_isoDuration:()=>vs,_isoTime:()=>_s,_jwt:()=>ps,_ksuid:()=>is,_lazy:()=>jc,_length:()=>Js,_literal:()=>yc,_lowercase:()=>Xs,_lt:()=>N,_lte:()=>P,_mac:()=>ss,_map:()=>hc,_max:()=>P,_maxLength:()=>qs,_maxSize:()=>R,_mime:()=>nc,_min:()=>I,_minLength:()=>B,_minSize:()=>z,_multipleOf:()=>L,_nan:()=>Vs,_nanoid:()=>$o,_nativeEnum:()=>vc,_negative:()=>Us,_never:()=>Ls,_nonnegative:()=>Gs,_nonoptional:()=>Tc,_nonpositive:()=>Ws,_normalize:()=>rc,_null:()=>Ps,_nullable:()=>Cc,_number:()=>ys,_optional:()=>Sc,_overwrite:()=>V,_parse:()=>Qe,_parseAsync:()=>et,_pipe:()=>Oc,_positive:()=>Hs,_promise:()=>Mc,_property:()=>tc,_readonly:()=>kc,_record:()=>mc,_refine:()=>Pc,_regex:()=>Ys,_safeDecode:()=>gt,_safeDecodeAsync:()=>bt,_safeEncode:()=>mt,_safeEncodeAsync:()=>vt,_safeParse:()=>nt,_safeParseAsync:()=>it,_set:()=>gc,_size:()=>Ks,_slugify:()=>sc,_startsWith:()=>$s,_string:()=>Uo,_stringFormat:()=>Bc,_stringbool:()=>zc,_success:()=>Ec,_superRefine:()=>Fc,_symbol:()=>Ms,_templateLiteral:()=>Ac,_toLowerCase:()=>ac,_toUpperCase:()=>oc,_transform:()=>xc,_trim:()=>ic,_tuple:()=>pc,_uint32:()=>Ts,_uint64:()=>js,_ulid:()=>ns,_undefined:()=>Ns,_union:()=>lc,_unknown:()=>Is,_uppercase:()=>Zs,_url:()=>Zo,_uuid:()=>qo,_uuidv4:()=>Jo,_uuidv6:()=>Yo,_uuidv7:()=>Xo,_void:()=>Rs,_xid:()=>rs,_xor:()=>uc,clone:()=>y,config:()=>s,createStandardJSONSchemaMethod:()=>Uc,createToJSONSchemaMethod:()=>Hc,decode:()=>lt,decodeAsync:()=>pt,describe:()=>Lc,encode:()=>st,encodeAsync:()=>dt,extractDefs:()=>W,finalize:()=>Vc,flattenError:()=>qe,formatError:()=>Je,globalConfig:()=>o,globalRegistry:()=>M,initializeContext:()=>H,isValidBase64:()=>wr,isValidBase64URL:()=>Er,isValidJWT:()=>kr,locales:()=>Lo,meta:()=>Rc,parse:()=>$e,parseAsync:()=>tt,prettifyError:()=>Ze,process:()=>U,regexes:()=>St,registry:()=>Ho,safeDecode:()=>_t,safeDecodeAsync:()=>xt,safeEncode:()=>ht,safeEncodeAsync:()=>yt,safeParse:()=>rt,safeParseAsync:()=>at,toDotPath:()=>Xe,toJSONSchema:()=>jl,treeifyError:()=>Ye,util:()=>c,version:()=>nr}),Fl=e({endsWith:()=>ec,gt:()=>F,gte:()=>I,includes:()=>Qs,length:()=>Js,lowercase:()=>Xs,lt:()=>N,lte:()=>P,maxLength:()=>qs,maxSize:()=>R,mime:()=>nc,minLength:()=>B,minSize:()=>z,multipleOf:()=>L,negative:()=>Us,nonnegative:()=>Gs,nonpositive:()=>Ws,normalize:()=>rc,overwrite:()=>V,positive:()=>Hs,property:()=>tc,regex:()=>Ys,size:()=>Ks,slugify:()=>sc,startsWith:()=>$s,toLowerCase:()=>ac,toUpperCase:()=>oc,trim:()=>ic,uppercase:()=>Zs}),Il=e({ZodISODate:()=>zl,ZodISODateTime:()=>Ll,ZodISODuration:()=>Ul,ZodISOTime:()=>Vl,date:()=>Bl,datetime:()=>Rl,duration:()=>Wl,time:()=>Hl}),Ll=n(`ZodISODateTime`,(e,t)=>{hr.init(e,t),J.init(e,t)});function Rl(e){return hs(Ll,e)}var zl=n(`ZodISODate`,(e,t)=>{gr.init(e,t),J.init(e,t)});function Bl(e){return gs(zl,e)}var Vl=n(`ZodISOTime`,(e,t)=>{_r.init(e,t),J.init(e,t)});function Hl(e){return _s(Vl,e)}var Ul=n(`ZodISODuration`,(e,t)=>{vr.init(e,t),J.init(e,t)});function Wl(e){return vs(Ul,e)}var Gl=(e,t)=>{Ke.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>Je(e,t)},flatten:{value:t=>qe(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,re,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,re,2)}},isEmpty:{get(){return e.issues.length===0}}})},Kl=n(`ZodError`,Gl),K=n(`ZodError`,Gl,{Parent:Error}),ql=Qe(K),Jl=et(K),Yl=nt(K),Xl=it(K),Zl=ot(K),Ql=ct(K),$l=ut(K),eu=ft(K),tu=mt(K),nu=gt(K),ru=vt(K),iu=bt(K),au=e({ZodAny:()=>Cd,ZodArray:()=>Md,ZodBase64:()=>Wu,ZodBase64URL:()=>Ku,ZodBigInt:()=>fd,ZodBigIntFormat:()=>md,ZodBoolean:()=>ud,ZodCIDRv4:()=>Bu,ZodCIDRv6:()=>Hu,ZodCUID:()=>wu,ZodCUID2:()=>Eu,ZodCatch:()=>Of,ZodCodec:()=>Pf,ZodCustom:()=>Kf,ZodCustomStringFormat:()=>Qu,ZodDate:()=>Ad,ZodDefault:()=>bf,ZodDiscriminatedUnion:()=>Ud,ZodE164:()=>Ju,ZodEmail:()=>lu,ZodEmoji:()=>bu,ZodEnum:()=>rf,ZodExactOptional:()=>hf,ZodFile:()=>lf,ZodFunction:()=>Wf,ZodGUID:()=>du,ZodIPv4:()=>Pu,ZodIPv6:()=>Ru,ZodIntersection:()=>Gd,ZodJWT:()=>Xu,ZodKSUID:()=>Mu,ZodLazy:()=>Bf,ZodLiteral:()=>sf,ZodMAC:()=>Iu,ZodMap:()=>$d,ZodNaN:()=>Af,ZodNanoID:()=>Su,ZodNever:()=>Ed,ZodNonOptional:()=>wf,ZodNull:()=>xd,ZodNullable:()=>_f,ZodNumber:()=>rd,ZodNumberFormat:()=>X,ZodObject:()=>Fd,ZodOptional:()=>pf,ZodPipe:()=>Mf,ZodPrefault:()=>Sf,ZodPromise:()=>Hf,ZodReadonly:()=>If,ZodRecord:()=>Yd,ZodSet:()=>tf,ZodString:()=>su,ZodStringFormat:()=>J,ZodSuccess:()=>Ef,ZodSymbol:()=>_d,ZodTemplateLiteral:()=>Rf,ZodTransform:()=>df,ZodTuple:()=>qd,ZodType:()=>q,ZodULID:()=>Ou,ZodURL:()=>_u,ZodUUID:()=>Y,ZodUndefined:()=>yd,ZodUnion:()=>zd,ZodUnknown:()=>Td,ZodVoid:()=>Od,ZodXID:()=>Au,ZodXor:()=>Vd,_ZodString:()=>ou,_default:()=>xf,_function:()=>Gf,any:()=>wd,array:()=>Nd,base64:()=>Gu,base64url:()=>qu,bigint:()=>pd,boolean:()=>dd,catch:()=>kf,check:()=>qf,cidrv4:()=>Vu,cidrv6:()=>Uu,codec:()=>Ff,cuid:()=>Tu,cuid2:()=>Du,custom:()=>Jf,date:()=>jd,describe:()=>Zf,discriminatedUnion:()=>Wd,e164:()=>Yu,email:()=>uu,emoji:()=>xu,enum:()=>af,exactOptional:()=>gf,file:()=>uf,float32:()=>od,float64:()=>sd,function:()=>Gf,guid:()=>fu,hash:()=>nd,hex:()=>td,hostname:()=>ed,httpUrl:()=>yu,instanceof:()=>$f,int:()=>ad,int32:()=>cd,int64:()=>hd,intersection:()=>Kd,ipv4:()=>Fu,ipv6:()=>zu,json:()=>tp,jwt:()=>Zu,keyof:()=>Pd,ksuid:()=>Nu,lazy:()=>Vf,literal:()=>cf,looseObject:()=>Rd,looseRecord:()=>Qd,mac:()=>Lu,map:()=>ef,meta:()=>Qf,nan:()=>jf,nanoid:()=>Cu,nativeEnum:()=>of,never:()=>Dd,nonoptional:()=>Tf,null:()=>Sd,nullable:()=>vf,nullish:()=>yf,number:()=>id,object:()=>Id,optional:()=>mf,partialRecord:()=>Zd,pipe:()=>Nf,prefault:()=>Cf,preprocess:()=>np,promise:()=>Uf,readonly:()=>Lf,record:()=>Xd,refine:()=>Yf,set:()=>nf,strictObject:()=>Ld,string:()=>cu,stringFormat:()=>$u,stringbool:()=>ep,success:()=>Df,superRefine:()=>Xf,symbol:()=>vd,templateLiteral:()=>zf,transform:()=>ff,tuple:()=>Jd,uint32:()=>ld,uint64:()=>gd,ulid:()=>ku,undefined:()=>bd,union:()=>Bd,unknown:()=>Z,url:()=>vu,uuid:()=>pu,uuidv4:()=>mu,uuidv6:()=>hu,uuidv7:()=>gu,void:()=>kd,xid:()=>ju,xor:()=>Hd}),q=n(`ZodType`,(e,t)=>(A.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:Uc(e,`input`),output:Uc(e,`output`)}}),e.toJSONSchema=Hc(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,`_def`,{value:t}),e.check=(...n)=>e.clone(g(t,{checks:[...t.checks??[],...n.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0}),e.with=e.check,e.clone=(t,n)=>y(e,t,n),e.brand=()=>e,e.register=((t,n)=>(t.add(e,n),e)),e.parse=(t,n)=>ql(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>Yl(e,t,n),e.parseAsync=async(t,n)=>Jl(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>Xl(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>Zl(e,t,n),e.decode=(t,n)=>Ql(e,t,n),e.encodeAsync=async(t,n)=>$l(e,t,n),e.decodeAsync=async(t,n)=>eu(e,t,n),e.safeEncode=(t,n)=>tu(e,t,n),e.safeDecode=(t,n)=>nu(e,t,n),e.safeEncodeAsync=async(t,n)=>ru(e,t,n),e.safeDecodeAsync=async(t,n)=>iu(e,t,n),e.refine=(t,n)=>e.check(Yf(t,n)),e.superRefine=t=>e.check(Xf(t)),e.overwrite=t=>e.check(V(t)),e.optional=()=>mf(e),e.exactOptional=()=>gf(e),e.nullable=()=>vf(e),e.nullish=()=>mf(vf(e)),e.nonoptional=t=>Tf(e,t),e.array=()=>Nd(e),e.or=t=>Bd([e,t]),e.and=t=>Kd(e,t),e.transform=t=>Nf(e,ff(t)),e.default=t=>xf(e,t),e.prefault=t=>Cf(e,t),e.catch=t=>kf(e,t),e.pipe=t=>Nf(e,t),e.readonly=()=>Lf(e),e.describe=t=>{let n=e.clone();return M.add(n,{description:t}),n},Object.defineProperty(e,`description`,{get(){return M.get(e)?.description},configurable:!0}),e.meta=(...t)=>{if(t.length===0)return M.get(e);let n=e.clone();return M.add(n,t[0]),n},e.isOptional=()=>e.safeParse(void 0).success,e.isNullable=()=>e.safeParse(null).success,e.apply=t=>t(e),e)),ou=n(`_ZodString`,(e,t)=>{rr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gc(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,e.regex=(...t)=>e.check(Ys(...t)),e.includes=(...t)=>e.check(Qs(...t)),e.startsWith=(...t)=>e.check($s(...t)),e.endsWith=(...t)=>e.check(ec(...t)),e.min=(...t)=>e.check(B(...t)),e.max=(...t)=>e.check(qs(...t)),e.length=(...t)=>e.check(Js(...t)),e.nonempty=(...t)=>e.check(B(1,...t)),e.lowercase=t=>e.check(Xs(t)),e.uppercase=t=>e.check(Zs(t)),e.trim=()=>e.check(ic()),e.normalize=(...t)=>e.check(rc(...t)),e.toLowerCase=()=>e.check(ac()),e.toUpperCase=()=>e.check(oc()),e.slugify=()=>e.check(sc())}),su=n(`ZodString`,(e,t)=>{rr.init(e,t),ou.init(e,t),e.email=t=>e.check(Go(lu,t)),e.url=t=>e.check(Zo(_u,t)),e.jwt=t=>e.check(ps(Xu,t)),e.emoji=t=>e.check(Qo(bu,t)),e.guid=t=>e.check(Ko(du,t)),e.uuid=t=>e.check(qo(Y,t)),e.uuidv4=t=>e.check(Jo(Y,t)),e.uuidv6=t=>e.check(Yo(Y,t)),e.uuidv7=t=>e.check(Xo(Y,t)),e.nanoid=t=>e.check($o(Su,t)),e.guid=t=>e.check(Ko(du,t)),e.cuid=t=>e.check(es(wu,t)),e.cuid2=t=>e.check(ts(Eu,t)),e.ulid=t=>e.check(ns(Ou,t)),e.base64=t=>e.check(us(Wu,t)),e.base64url=t=>e.check(ds(Ku,t)),e.xid=t=>e.check(rs(Au,t)),e.ksuid=t=>e.check(is(Mu,t)),e.ipv4=t=>e.check(as(Pu,t)),e.ipv6=t=>e.check(os(Ru,t)),e.cidrv4=t=>e.check(cs(Bu,t)),e.cidrv6=t=>e.check(ls(Hu,t)),e.e164=t=>e.check(fs(Ju,t)),e.datetime=t=>e.check(Rl(t)),e.date=t=>e.check(Bl(t)),e.time=t=>e.check(Hl(t)),e.duration=t=>e.check(Wl(t))});function cu(e){return Uo(su,e)}var J=n(`ZodStringFormat`,(e,t)=>{j.init(e,t),ou.init(e,t)}),lu=n(`ZodEmail`,(e,t)=>{or.init(e,t),J.init(e,t)});function uu(e){return Go(lu,e)}var du=n(`ZodGUID`,(e,t)=>{ir.init(e,t),J.init(e,t)});function fu(e){return Ko(du,e)}var Y=n(`ZodUUID`,(e,t)=>{ar.init(e,t),J.init(e,t)});function pu(e){return qo(Y,e)}function mu(e){return Jo(Y,e)}function hu(e){return Yo(Y,e)}function gu(e){return Xo(Y,e)}var _u=n(`ZodURL`,(e,t)=>{sr.init(e,t),J.init(e,t)});function vu(e){return Zo(_u,e)}function yu(e){return Zo(_u,{protocol:/^https?$/,hostname:Zt,...b(e)})}var bu=n(`ZodEmoji`,(e,t)=>{cr.init(e,t),J.init(e,t)});function xu(e){return Qo(bu,e)}var Su=n(`ZodNanoID`,(e,t)=>{lr.init(e,t),J.init(e,t)});function Cu(e){return $o(Su,e)}var wu=n(`ZodCUID`,(e,t)=>{ur.init(e,t),J.init(e,t)});function Tu(e){return es(wu,e)}var Eu=n(`ZodCUID2`,(e,t)=>{dr.init(e,t),J.init(e,t)});function Du(e){return ts(Eu,e)}var Ou=n(`ZodULID`,(e,t)=>{fr.init(e,t),J.init(e,t)});function ku(e){return ns(Ou,e)}var Au=n(`ZodXID`,(e,t)=>{pr.init(e,t),J.init(e,t)});function ju(e){return rs(Au,e)}var Mu=n(`ZodKSUID`,(e,t)=>{mr.init(e,t),J.init(e,t)});function Nu(e){return is(Mu,e)}var Pu=n(`ZodIPv4`,(e,t)=>{yr.init(e,t),J.init(e,t)});function Fu(e){return as(Pu,e)}var Iu=n(`ZodMAC`,(e,t)=>{xr.init(e,t),J.init(e,t)});function Lu(e){return ss(Iu,e)}var Ru=n(`ZodIPv6`,(e,t)=>{br.init(e,t),J.init(e,t)});function zu(e){return os(Ru,e)}var Bu=n(`ZodCIDRv4`,(e,t)=>{Sr.init(e,t),J.init(e,t)});function Vu(e){return cs(Bu,e)}var Hu=n(`ZodCIDRv6`,(e,t)=>{Cr.init(e,t),J.init(e,t)});function Uu(e){return ls(Hu,e)}var Wu=n(`ZodBase64`,(e,t)=>{Tr.init(e,t),J.init(e,t)});function Gu(e){return us(Wu,e)}var Ku=n(`ZodBase64URL`,(e,t)=>{Dr.init(e,t),J.init(e,t)});function qu(e){return ds(Ku,e)}var Ju=n(`ZodE164`,(e,t)=>{Or.init(e,t),J.init(e,t)});function Yu(e){return fs(Ju,e)}var Xu=n(`ZodJWT`,(e,t)=>{Ar.init(e,t),J.init(e,t)});function Zu(e){return ps(Xu,e)}var Qu=n(`ZodCustomStringFormat`,(e,t)=>{jr.init(e,t),J.init(e,t)});function $u(e,t,n={}){return Bc(Qu,e,t,n)}function ed(e){return Bc(Qu,`hostname`,Xt,e)}function td(e){return Bc(Qu,`hex`,mn,e)}function nd(e,t){let n=`${e}_${t?.enc??`hex`}`,r=St[n];if(!r)throw Error(`Unrecognized hash format: ${n}`);return Bc(Qu,n,r,t)}var rd=n(`ZodNumber`,(e,t)=>{Mr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Kc(e,t,n,r),e.gt=(t,n)=>e.check(F(t,n)),e.gte=(t,n)=>e.check(I(t,n)),e.min=(t,n)=>e.check(I(t,n)),e.lt=(t,n)=>e.check(N(t,n)),e.lte=(t,n)=>e.check(P(t,n)),e.max=(t,n)=>e.check(P(t,n)),e.int=t=>e.check(ad(t)),e.safe=t=>e.check(ad(t)),e.positive=t=>e.check(F(0,t)),e.nonnegative=t=>e.check(I(0,t)),e.negative=t=>e.check(N(0,t)),e.nonpositive=t=>e.check(P(0,t)),e.multipleOf=(t,n)=>e.check(L(t,n)),e.step=(t,n)=>e.check(L(t,n)),e.finite=()=>e;let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function id(e){return ys(rd,e)}var X=n(`ZodNumberFormat`,(e,t)=>{Nr.init(e,t),rd.init(e,t)});function ad(e){return xs(X,e)}function od(e){return Ss(X,e)}function sd(e){return Cs(X,e)}function cd(e){return ws(X,e)}function ld(e){return Ts(X,e)}var ud=n(`ZodBoolean`,(e,t)=>{Pr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>qc(e,t,n,r)});function dd(e){return Es(ud,e)}var fd=n(`ZodBigInt`,(e,t)=>{Fr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jc(e,t,n,r),e.gte=(t,n)=>e.check(I(t,n)),e.min=(t,n)=>e.check(I(t,n)),e.gt=(t,n)=>e.check(F(t,n)),e.gte=(t,n)=>e.check(I(t,n)),e.min=(t,n)=>e.check(I(t,n)),e.lt=(t,n)=>e.check(N(t,n)),e.lte=(t,n)=>e.check(P(t,n)),e.max=(t,n)=>e.check(P(t,n)),e.positive=t=>e.check(F(BigInt(0),t)),e.negative=t=>e.check(N(BigInt(0),t)),e.nonpositive=t=>e.check(P(BigInt(0),t)),e.nonnegative=t=>e.check(I(BigInt(0),t)),e.multipleOf=(t,n)=>e.check(L(t,n));let n=e._zod.bag;e.minValue=n.minimum??null,e.maxValue=n.maximum??null,e.format=n.format??null});function pd(e){return Os(fd,e)}var md=n(`ZodBigIntFormat`,(e,t)=>{Ir.init(e,t),fd.init(e,t)});function hd(e){return As(md,e)}function gd(e){return js(md,e)}var _d=n(`ZodSymbol`,(e,t)=>{Lr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Yc(e,t,n,r)});function vd(e){return Ms(_d,e)}var yd=n(`ZodUndefined`,(e,t)=>{Rr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zc(e,t,n,r)});function bd(e){return Ns(yd,e)}var xd=n(`ZodNull`,(e,t)=>{zr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xc(e,t,n,r)});function Sd(e){return Ps(xd,e)}var Cd=n(`ZodAny`,(e,t)=>{Br.init(e,t),q.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function wd(){return Fs(Cd)}var Td=n(`ZodUnknown`,(e,t)=>{Vr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function Z(){return Is(Td)}var Ed=n(`ZodNever`,(e,t)=>{Hr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$c(e,t,n,r)});function Dd(e){return Ls(Ed,e)}var Od=n(`ZodVoid`,(e,t)=>{Ur.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Qc(e,t,n,r)});function kd(e){return Rs(Od,e)}var Ad=n(`ZodDate`,(e,t)=>{Wr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nl(e,t,n,r),e.min=(t,n)=>e.check(I(t,n)),e.max=(t,n)=>e.check(P(t,n));let n=e._zod.bag;e.minDate=n.minimum?new Date(n.minimum):null,e.maxDate=n.maximum?new Date(n.maximum):null});function jd(e){return zs(Ad,e)}var Md=n(`ZodArray`,(e,t)=>{Kr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ml(e,t,n,r),e.element=t.element,e.min=(t,n)=>e.check(B(t,n)),e.nonempty=t=>e.check(B(1,t)),e.max=(t,n)=>e.check(qs(t,n)),e.length=(t,n)=>e.check(Js(t,n)),e.unwrap=()=>e.element});function Nd(e,t){return cc(Md,e,t)}function Pd(e){let t=e._zod.def.shape;return af(Object.keys(t))}var Fd=n(`ZodObject`,(e,t)=>{Zr.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>hl(e,t,n,r),m(e,`shape`,()=>t.shape),e.keyof=()=>af(Object.keys(e._zod.def.shape)),e.catchall=t=>e.clone({...e._zod.def,catchall:t}),e.passthrough=()=>e.clone({...e._zod.def,catchall:Z()}),e.loose=()=>e.clone({...e._zod.def,catchall:Z()}),e.strict=()=>e.clone({...e._zod.def,catchall:Dd()}),e.strip=()=>e.clone({...e._zod.def,catchall:void 0}),e.extend=t=>ke(e,t),e.safeExtend=t=>Ae(e,t),e.merge=t=>je(e,t),e.pick=t=>De(e,t),e.omit=t=>Oe(e,t),e.partial=(...t)=>Me(pf,e,t[0]),e.required=(...t)=>Ne(wf,e,t[0])});function Id(e,t){return new Fd({type:`object`,shape:e??{},...b(t)})}function Ld(e,t){return new Fd({type:`object`,shape:e,catchall:Dd(),...b(t)})}function Rd(e,t){return new Fd({type:`object`,shape:e,catchall:Z(),...b(t)})}var zd=n(`ZodUnion`,(e,t)=>{$r.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>gl(e,t,n,r),e.options=t.options});function Bd(e,t){return new zd({type:`union`,options:e,...b(t)})}var Vd=n(`ZodXor`,(e,t)=>{zd.init(e,t),ti.init(e,t),e._zod.processJSONSchema=(t,n,r)=>gl(e,t,n,r),e.options=t.options});function Hd(e,t){return new Vd({type:`union`,options:e,inclusive:!1,...b(t)})}var Ud=n(`ZodDiscriminatedUnion`,(e,t)=>{zd.init(e,t),ni.init(e,t)});function Wd(e,t,n){return new Ud({type:`union`,options:t,discriminator:e,...b(n)})}var Gd=n(`ZodIntersection`,(e,t)=>{ri.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>_l(e,t,n,r)});function Kd(e,t){return new Gd({type:`intersection`,left:e,right:t})}var qd=n(`ZodTuple`,(e,t)=>{oi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>vl(e,t,n,r),e.rest=t=>e.clone({...e._zod.def,rest:t})});function Jd(e,t,n){let r=t instanceof A;return new qd({type:`tuple`,items:e,rest:r?t:null,...b(r?n:t)})}var Yd=n(`ZodRecord`,(e,t)=>{ci.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>yl(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function Xd(e,t,n){return new Yd({type:`record`,keyType:e,valueType:t,...b(n)})}function Zd(e,t,n){let r=y(e);return r._zod.values=void 0,new Yd({type:`record`,keyType:r,valueType:t,...b(n)})}function Qd(e,t,n){return new Yd({type:`record`,keyType:e,valueType:t,mode:`loose`,...b(n)})}var $d=n(`ZodMap`,(e,t)=>{li.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>fl(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType,e.min=(...t)=>e.check(z(...t)),e.nonempty=t=>e.check(z(1,t)),e.max=(...t)=>e.check(R(...t)),e.size=(...t)=>e.check(Ks(...t))});function ef(e,t,n){return new $d({type:`map`,keyType:e,valueType:t,...b(n)})}var tf=n(`ZodSet`,(e,t)=>{di.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>pl(e,t,n,r),e.min=(...t)=>e.check(z(...t)),e.nonempty=t=>e.check(z(1,t)),e.max=(...t)=>e.check(R(...t)),e.size=(...t)=>e.check(Ks(...t))});function nf(e,t){return new tf({type:`set`,valueType:e,...b(t)})}var rf=n(`ZodEnum`,(e,t)=>{pi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>rl(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new rf({...t,checks:[],...b(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new rf({...t,checks:[],...b(r),entries:i})}});function af(e,t){return new rf({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...b(t)})}function of(e,t){return new rf({type:`enum`,entries:e,...b(t)})}var sf=n(`ZodLiteral`,(e,t)=>{mi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>il(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,`value`,{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function cf(e,t){return new sf({type:`literal`,values:Array.isArray(e)?e:[e],...b(t)})}var lf=n(`ZodFile`,(e,t)=>{hi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>sl(e,t,n,r),e.min=(t,n)=>e.check(z(t,n)),e.max=(t,n)=>e.check(R(t,n)),e.mime=(t,n)=>e.check(nc(Array.isArray(t)?t:[t],n))});function uf(e){return bc(lf,e)}var df=n(`ZodTransform`,(e,t)=>{gi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>dl(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new a(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(E(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(E(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function ff(e){return new df({type:`transform`,transform:e})}var pf=n(`ZodOptional`,(e,t)=>{vi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ol(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function mf(e){return new pf({type:`optional`,innerType:e})}var hf=n(`ZodExactOptional`,(e,t)=>{yi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ol(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function gf(e){return new hf({type:`optional`,innerType:e})}var _f=n(`ZodNullable`,(e,t)=>{bi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>bl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function vf(e){return new _f({type:`nullable`,innerType:e})}function yf(e){return mf(vf(e))}var bf=n(`ZodDefault`,(e,t)=>{xi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Sl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function xf(e,t){return new bf({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ve(t)}})}var Sf=n(`ZodPrefault`,(e,t)=>{Ci.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Cl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Cf(e,t){return new Sf({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ve(t)}})}var wf=n(`ZodNonOptional`,(e,t)=>{wi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>xl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Tf(e,t){return new wf({type:`nonoptional`,innerType:e,...b(t)})}var Ef=n(`ZodSuccess`,(e,t)=>{Ei.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>cl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Df(e){return new Ef({type:`success`,innerType:e})}var Of=n(`ZodCatch`,(e,t)=>{Di.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>wl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function kf(e,t){return new Of({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}var Af=n(`ZodNaN`,(e,t)=>{Oi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>al(e,t,n,r)});function jf(e){return Vs(Af,e)}var Mf=n(`ZodPipe`,(e,t)=>{ki.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Tl(e,t,n,r),e.in=t.in,e.out=t.out});function Nf(e,t){return new Mf({type:`pipe`,in:e,out:t})}var Pf=n(`ZodCodec`,(e,t)=>{Mf.init(e,t),ji.init(e,t)});function Ff(e,t,n){return new Pf({type:`pipe`,in:e,out:t,transform:n.decode,reverseTransform:n.encode})}var If=n(`ZodReadonly`,(e,t)=>{Pi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>El(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Lf(e){return new If({type:`readonly`,innerType:e})}var Rf=n(`ZodTemplateLiteral`,(e,t)=>{Ii.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ol(e,t,n,r)});function zf(e,t){return new Rf({type:`template_literal`,parts:e,...b(t)})}var Bf=n(`ZodLazy`,(e,t)=>{zi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>kl(e,t,n,r),e.unwrap=()=>e._zod.def.getter()});function Vf(e){return new Bf({type:`lazy`,getter:e})}var Hf=n(`ZodPromise`,(e,t)=>{Ri.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Dl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Uf(e){return new Hf({type:`promise`,innerType:e})}var Wf=n(`ZodFunction`,(e,t)=>{Li.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ul(e,t,n,r)});function Gf(e){return new Wf({type:`function`,input:Array.isArray(e?.input)?Jd(e?.input):e?.input??Nd(Z()),output:e?.output??Z()})}var Kf=n(`ZodCustom`,(e,t)=>{Bi.init(e,t),q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ll(e,t,n,r)});function qf(e){let t=new k({check:`custom`});return t._zod.check=e,t}function Jf(e,t){return Nc(Kf,e??(()=>!0),t)}function Yf(e,t={}){return Pc(Kf,e,t)}function Xf(e){return Fc(e)}var Zf=Lc,Qf=Rc;function $f(e,t={}){let n=new Kf({type:`custom`,check:`custom`,fn:t=>t instanceof e,abort:!0,...b(t)});return n._zod.bag.Class=e,n._zod.check=t=>{t.value instanceof e||t.issues.push({code:`invalid_type`,expected:e.name,input:t.value,inst:n,path:[...n._zod.def.path??[]]})},n}var ep=(...e)=>zc({Codec:Pf,Boolean:ud,String:su},...e);function tp(e){let t=Vf(()=>Bd([cu(e),id(),dd(),Sd(),Nd(t),Xd(cu(),t)]));return t}function np(e,t){return Nf(ff(e),t)}var rp={invalid_type:`invalid_type`,too_big:`too_big`,too_small:`too_small`,invalid_format:`invalid_format`,not_multiple_of:`not_multiple_of`,unrecognized_keys:`unrecognized_keys`,invalid_union:`invalid_union`,invalid_key:`invalid_key`,invalid_element:`invalid_element`,invalid_value:`invalid_value`,custom:`custom`};function ip(e){s({customError:e})}function ap(){return s().customError}var op;(function(e){})(op||={});var Q={...au,...Fl,iso:Il},sp=new Set(`$schema.$ref.$defs.definitions.$id.id.$comment.$anchor.$vocabulary.$dynamicRef.$dynamicAnchor.type.enum.const.anyOf.oneOf.allOf.not.properties.required.additionalProperties.patternProperties.propertyNames.minProperties.maxProperties.items.prefixItems.additionalItems.minItems.maxItems.uniqueItems.contains.minContains.maxContains.minLength.maxLength.pattern.format.minimum.maximum.exclusiveMinimum.exclusiveMaximum.multipleOf.description.default.contentEncoding.contentMediaType.contentSchema.unevaluatedItems.unevaluatedProperties.if.then.else.dependentSchemas.dependentRequired.nullable.readOnly`.split(`.`));function cp(e,t){let n=e.$schema;return n===`https://json-schema.org/draft/2020-12/schema`?`draft-2020-12`:n===`http://json-schema.org/draft-07/schema#`?`draft-7`:n===`http://json-schema.org/draft-04/schema#`?`draft-4`:t??`draft-2020-12`}function lp(e,t){if(!e.startsWith(`#`))throw Error(`External $ref is not supported, only local refs (#/...) are allowed`);let n=e.slice(1).split(`/`).filter(Boolean);if(n.length===0)return t.rootSchema;let r=t.version===`draft-2020-12`?`$defs`:`definitions`;if(n[0]===r){let r=n[1];if(!r||!t.defs[r])throw Error(`Reference not found: ${e}`);return t.defs[r]}throw Error(`Reference not found: ${e}`)}function up(e,t){if(e.not!==void 0){if(typeof e.not==`object`&&Object.keys(e.not).length===0)return Q.never();throw Error(`not is not supported in Zod (except { not: {} } for never)`)}if(e.unevaluatedItems!==void 0)throw Error(`unevaluatedItems is not supported`);if(e.unevaluatedProperties!==void 0)throw Error(`unevaluatedProperties is not supported`);if(e.if!==void 0||e.then!==void 0||e.else!==void 0)throw Error(`Conditional schemas (if/then/else) are not supported`);if(e.dependentSchemas!==void 0||e.dependentRequired!==void 0)throw Error(`dependentSchemas and dependentRequired are not supported`);if(e.$ref){let n=e.$ref;if(t.refs.has(n))return t.refs.get(n);if(t.processing.has(n))return Q.lazy(()=>{if(!t.refs.has(n))throw Error(`Circular reference not resolved: ${n}`);return t.refs.get(n)});t.processing.add(n);let r=$(lp(n,t),t);return t.refs.set(n,r),t.processing.delete(n),r}if(e.enum!==void 0){let n=e.enum;if(t.version===`openapi-3.0`&&e.nullable===!0&&n.length===1&&n[0]===null)return Q.null();if(n.length===0)return Q.never();if(n.length===1)return Q.literal(n[0]);if(n.every(e=>typeof e==`string`))return Q.enum(n);let r=n.map(e=>Q.literal(e));return r.length<2?r[0]:Q.union([r[0],r[1],...r.slice(2)])}if(e.const!==void 0)return Q.literal(e.const);let n=e.type;if(Array.isArray(n)){let r=n.map(n=>up({...e,type:n},t));return r.length===0?Q.never():r.length===1?r[0]:Q.union(r)}if(!n)return Q.any();let r;switch(n){case`string`:{let t=Q.string();if(e.format){let n=e.format;n===`email`?t=t.check(Q.email()):n===`uri`||n===`uri-reference`?t=t.check(Q.url()):n===`uuid`||n===`guid`?t=t.check(Q.uuid()):n===`date-time`?t=t.check(Q.iso.datetime()):n===`date`?t=t.check(Q.iso.date()):n===`time`?t=t.check(Q.iso.time()):n===`duration`?t=t.check(Q.iso.duration()):n===`ipv4`?t=t.check(Q.ipv4()):n===`ipv6`?t=t.check(Q.ipv6()):n===`mac`?t=t.check(Q.mac()):n===`cidr`?t=t.check(Q.cidrv4()):n===`cidr-v6`?t=t.check(Q.cidrv6()):n===`base64`?t=t.check(Q.base64()):n===`base64url`?t=t.check(Q.base64url()):n===`e164`?t=t.check(Q.e164()):n===`jwt`?t=t.check(Q.jwt()):n===`emoji`?t=t.check(Q.emoji()):n===`nanoid`?t=t.check(Q.nanoid()):n===`cuid`?t=t.check(Q.cuid()):n===`cuid2`?t=t.check(Q.cuid2()):n===`ulid`?t=t.check(Q.ulid()):n===`xid`?t=t.check(Q.xid()):n===`ksuid`&&(t=t.check(Q.ksuid()))}typeof e.minLength==`number`&&(t=t.min(e.minLength)),typeof e.maxLength==`number`&&(t=t.max(e.maxLength)),e.pattern&&(t=t.regex(new RegExp(e.pattern))),r=t;break}case`number`:case`integer`:{let t=n===`integer`?Q.number().int():Q.number();typeof e.minimum==`number`&&(t=t.min(e.minimum)),typeof e.maximum==`number`&&(t=t.max(e.maximum)),typeof e.exclusiveMinimum==`number`?t=t.gt(e.exclusiveMinimum):e.exclusiveMinimum===!0&&typeof e.minimum==`number`&&(t=t.gt(e.minimum)),typeof e.exclusiveMaximum==`number`?t=t.lt(e.exclusiveMaximum):e.exclusiveMaximum===!0&&typeof e.maximum==`number`&&(t=t.lt(e.maximum)),typeof e.multipleOf==`number`&&(t=t.multipleOf(e.multipleOf)),r=t;break}case`boolean`:r=Q.boolean();break;case`null`:r=Q.null();break;case`object`:{let n={},i=e.properties||{},a=new Set(e.required||[]);for(let[e,r]of Object.entries(i)){let i=$(r,t);n[e]=a.has(e)?i:i.optional()}if(e.propertyNames){let i=$(e.propertyNames,t),a=e.additionalProperties&&typeof e.additionalProperties==`object`?$(e.additionalProperties,t):Q.any();if(Object.keys(n).length===0){r=Q.record(i,a);break}let o=Q.object(n).passthrough(),s=Q.looseRecord(i,a);r=Q.intersection(o,s);break}if(e.patternProperties){let i=e.patternProperties,a=Object.keys(i),o=[];for(let e of a){let n=$(i[e],t),r=Q.string().regex(new RegExp(e));o.push(Q.looseRecord(r,n))}let s=[];if(Object.keys(n).length>0&&s.push(Q.object(n).passthrough()),s.push(...o),s.length===0)r=Q.object({}).passthrough();else if(s.length===1)r=s[0];else{let e=Q.intersection(s[0],s[1]);for(let t=2;t$(e,t)),o=i&&typeof i==`object`&&!Array.isArray(i)?$(i,t):void 0;r=o?Q.tuple(a).rest(o):Q.tuple(a),typeof e.minItems==`number`&&(r=r.check(Q.minLength(e.minItems))),typeof e.maxItems==`number`&&(r=r.check(Q.maxLength(e.maxItems)))}else if(Array.isArray(i)){let n=i.map(e=>$(e,t)),a=e.additionalItems&&typeof e.additionalItems==`object`?$(e.additionalItems,t):void 0;r=a?Q.tuple(n).rest(a):Q.tuple(n),typeof e.minItems==`number`&&(r=r.check(Q.minLength(e.minItems))),typeof e.maxItems==`number`&&(r=r.check(Q.maxLength(e.maxItems)))}else if(i!==void 0){let n=$(i,t),a=Q.array(n);typeof e.minItems==`number`&&(a=a.min(e.minItems)),typeof e.maxItems==`number`&&(a=a.max(e.maxItems)),r=a}else r=Q.array(Q.any());break}default:throw Error(`Unsupported type: ${n}`)}return e.description&&(r=r.describe(e.description)),e.default!==void 0&&(r=r.default(e.default)),r}function $(e,t){if(typeof e==`boolean`)return e?Q.any():Q.never();let n=up(e,t),r=e.type||e.enum!==void 0||e.const!==void 0;if(e.anyOf&&Array.isArray(e.anyOf)){let i=e.anyOf.map(e=>$(e,t)),a=Q.union(i);n=r?Q.intersection(n,a):a}if(e.oneOf&&Array.isArray(e.oneOf)){let i=e.oneOf.map(e=>$(e,t)),a=Q.xor(i);n=r?Q.intersection(n,a):a}if(e.allOf&&Array.isArray(e.allOf))if(e.allOf.length===0)n=r?n:Q.any();else{let i=r?n:$(e.allOf[0],t),a=+!r;for(let n=a;n0&&t.registry.add(n,i),n}function dp(e,t){return typeof e==`boolean`?e?Q.any():Q.never():$(e,{version:cp(e,t?.defaultTarget),defs:e.$defs||e.definitions||{},refs:new Map,processing:new Set,rootSchema:e,registry:t?.registry??M})}var fp=e({bigint:()=>gp,boolean:()=>hp,date:()=>_p,number:()=>mp,string:()=>pp});function pp(e){return Wo(su,e)}function mp(e){return bs(rd,e)}function hp(e){return Ds(ud,e)}function gp(e){return ks(fd,e)}function _p(e){return Bs(Ad,e)}var vp=e({$brand:()=>r,$input:()=>Bo,$output:()=>zo,NEVER:()=>t,TimePrecision:()=>ms,ZodAny:()=>Cd,ZodArray:()=>Md,ZodBase64:()=>Wu,ZodBase64URL:()=>Ku,ZodBigInt:()=>fd,ZodBigIntFormat:()=>md,ZodBoolean:()=>ud,ZodCIDRv4:()=>Bu,ZodCIDRv6:()=>Hu,ZodCUID:()=>wu,ZodCUID2:()=>Eu,ZodCatch:()=>Of,ZodCodec:()=>Pf,ZodCustom:()=>Kf,ZodCustomStringFormat:()=>Qu,ZodDate:()=>Ad,ZodDefault:()=>bf,ZodDiscriminatedUnion:()=>Ud,ZodE164:()=>Ju,ZodEmail:()=>lu,ZodEmoji:()=>bu,ZodEnum:()=>rf,ZodError:()=>Kl,ZodExactOptional:()=>hf,ZodFile:()=>lf,ZodFirstPartyTypeKind:()=>op,ZodFunction:()=>Wf,ZodGUID:()=>du,ZodIPv4:()=>Pu,ZodIPv6:()=>Ru,ZodISODate:()=>zl,ZodISODateTime:()=>Ll,ZodISODuration:()=>Ul,ZodISOTime:()=>Vl,ZodIntersection:()=>Gd,ZodIssueCode:()=>rp,ZodJWT:()=>Xu,ZodKSUID:()=>Mu,ZodLazy:()=>Bf,ZodLiteral:()=>sf,ZodMAC:()=>Iu,ZodMap:()=>$d,ZodNaN:()=>Af,ZodNanoID:()=>Su,ZodNever:()=>Ed,ZodNonOptional:()=>wf,ZodNull:()=>xd,ZodNullable:()=>_f,ZodNumber:()=>rd,ZodNumberFormat:()=>X,ZodObject:()=>Fd,ZodOptional:()=>pf,ZodPipe:()=>Mf,ZodPrefault:()=>Sf,ZodPromise:()=>Hf,ZodReadonly:()=>If,ZodRealError:()=>K,ZodRecord:()=>Yd,ZodSet:()=>tf,ZodString:()=>su,ZodStringFormat:()=>J,ZodSuccess:()=>Ef,ZodSymbol:()=>_d,ZodTemplateLiteral:()=>Rf,ZodTransform:()=>df,ZodTuple:()=>qd,ZodType:()=>q,ZodULID:()=>Ou,ZodURL:()=>_u,ZodUUID:()=>Y,ZodUndefined:()=>yd,ZodUnion:()=>zd,ZodUnknown:()=>Td,ZodVoid:()=>Od,ZodXID:()=>Au,ZodXor:()=>Vd,_ZodString:()=>ou,_default:()=>xf,_function:()=>Gf,any:()=>wd,array:()=>Nd,base64:()=>Gu,base64url:()=>qu,bigint:()=>pd,boolean:()=>dd,catch:()=>kf,check:()=>qf,cidrv4:()=>Vu,cidrv6:()=>Uu,clone:()=>y,codec:()=>Ff,coerce:()=>fp,config:()=>s,core:()=>Pl,cuid:()=>Tu,cuid2:()=>Du,custom:()=>Jf,date:()=>jd,decode:()=>Ql,decodeAsync:()=>eu,describe:()=>Zf,discriminatedUnion:()=>Wd,e164:()=>Yu,email:()=>uu,emoji:()=>xu,encode:()=>Zl,encodeAsync:()=>$l,endsWith:()=>ec,enum:()=>af,exactOptional:()=>gf,file:()=>uf,flattenError:()=>qe,float32:()=>od,float64:()=>sd,formatError:()=>Je,fromJSONSchema:()=>dp,function:()=>Gf,getErrorMap:()=>ap,globalRegistry:()=>M,gt:()=>F,gte:()=>I,guid:()=>fu,hash:()=>nd,hex:()=>td,hostname:()=>ed,httpUrl:()=>yu,includes:()=>Qs,instanceof:()=>$f,int:()=>ad,int32:()=>cd,int64:()=>hd,intersection:()=>Kd,ipv4:()=>Fu,ipv6:()=>zu,iso:()=>Il,json:()=>tp,jwt:()=>Zu,keyof:()=>Pd,ksuid:()=>Nu,lazy:()=>Vf,length:()=>Js,literal:()=>cf,locales:()=>Lo,looseObject:()=>Rd,looseRecord:()=>Qd,lowercase:()=>Xs,lt:()=>N,lte:()=>P,mac:()=>Lu,map:()=>ef,maxLength:()=>qs,maxSize:()=>R,meta:()=>Qf,mime:()=>nc,minLength:()=>B,minSize:()=>z,multipleOf:()=>L,nan:()=>jf,nanoid:()=>Cu,nativeEnum:()=>of,negative:()=>Us,never:()=>Dd,nonnegative:()=>Gs,nonoptional:()=>Tf,nonpositive:()=>Ws,normalize:()=>rc,null:()=>Sd,nullable:()=>vf,nullish:()=>yf,number:()=>id,object:()=>Id,optional:()=>mf,overwrite:()=>V,parse:()=>ql,parseAsync:()=>Jl,partialRecord:()=>Zd,pipe:()=>Nf,positive:()=>Hs,prefault:()=>Cf,preprocess:()=>np,prettifyError:()=>Ze,promise:()=>Uf,property:()=>tc,readonly:()=>Lf,record:()=>Xd,refine:()=>Yf,regex:()=>Ys,regexes:()=>St,registry:()=>Ho,safeDecode:()=>nu,safeDecodeAsync:()=>iu,safeEncode:()=>tu,safeEncodeAsync:()=>ru,safeParse:()=>Yl,safeParseAsync:()=>Xl,set:()=>nf,setErrorMap:()=>ip,size:()=>Ks,slugify:()=>sc,startsWith:()=>$s,strictObject:()=>Ld,string:()=>cu,stringFormat:()=>$u,stringbool:()=>ep,success:()=>Df,superRefine:()=>Xf,symbol:()=>vd,templateLiteral:()=>zf,toJSONSchema:()=>jl,toLowerCase:()=>ac,toUpperCase:()=>oc,transform:()=>ff,treeifyError:()=>Ye,trim:()=>ic,tuple:()=>Jd,uint32:()=>ld,uint64:()=>gd,ulid:()=>ku,undefined:()=>bd,union:()=>Bd,unknown:()=>Z,uppercase:()=>Zs,url:()=>vu,util:()=>c,uuid:()=>pu,uuidv4:()=>mu,uuidv6:()=>hu,uuidv7:()=>gu,void:()=>kd,xid:()=>ju,xor:()=>Hd});s(oa());var yp=vp;export{dd as a,cu as c,Ke as d,Nd as i,$e as l,mp as n,cf as o,af as r,Id as s,yp as t,tt as u}; \ No newline at end of file diff --git a/src/www/favicon-16x16.png b/src/www/favicon-16x16.png new file mode 100644 index 0000000..6e3dca1 Binary files /dev/null and b/src/www/favicon-16x16.png differ diff --git a/src/www/favicon-32x32.png b/src/www/favicon-32x32.png new file mode 100644 index 0000000..891be19 Binary files /dev/null and b/src/www/favicon-32x32.png differ diff --git a/src/www/favicon.ico b/src/www/favicon.ico new file mode 100644 index 0000000..6a1ccae Binary files /dev/null and b/src/www/favicon.ico differ diff --git a/src/www/images/logo.png b/src/www/images/logo.png new file mode 100644 index 0000000..357687e Binary files /dev/null and b/src/www/images/logo.png differ diff --git a/src/www/index.html b/src/www/index.html new file mode 100644 index 0000000..ff74acb --- /dev/null +++ b/src/www/index.html @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + GMPay + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ GM Wallet +
+
+ + diff --git a/src/www/manifest.webmanifest b/src/www/manifest.webmanifest new file mode 100644 index 0000000..0f013c0 --- /dev/null +++ b/src/www/manifest.webmanifest @@ -0,0 +1 @@ +{"name":"GMPay","short_name":"GMPay","description":"GMPay 收款管理后台 - 多链 USDT 支付中间件管理面板","start_url":"/","display":"standalone","background_color":"#FFFFFF","theme_color":"#FFFFFF","lang":"en","scope":"/","icons":[{"src":"/pwa-192x192.png","sizes":"192x192","type":"image/png","purpose":"any"},{"src":"/pwa-512x512.png","sizes":"512x512","type":"image/png","purpose":"any"},{"src":"/pwa-maskable-192x192.png","sizes":"192x192","type":"image/png","purpose":"maskable"},{"src":"/pwa-maskable-512x512.png","sizes":"512x512","type":"image/png","purpose":"maskable"}]} diff --git a/src/www/pwa-192x192.png b/src/www/pwa-192x192.png new file mode 100644 index 0000000..ed5d3f8 Binary files /dev/null and b/src/www/pwa-192x192.png differ diff --git a/src/www/pwa-512x512.png b/src/www/pwa-512x512.png new file mode 100644 index 0000000..61fb785 Binary files /dev/null and b/src/www/pwa-512x512.png differ diff --git a/src/www/pwa-maskable-192x192.png b/src/www/pwa-maskable-192x192.png new file mode 100644 index 0000000..33ccf41 Binary files /dev/null and b/src/www/pwa-maskable-192x192.png differ diff --git a/src/www/pwa-maskable-512x512.png b/src/www/pwa-maskable-512x512.png new file mode 100644 index 0000000..228f530 Binary files /dev/null and b/src/www/pwa-maskable-512x512.png differ diff --git a/src/www/registerSW.js b/src/www/registerSW.js new file mode 100644 index 0000000..d42ac9e --- /dev/null +++ b/src/www/registerSW.js @@ -0,0 +1 @@ +if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('/sw.js', { scope: '/' })})} \ No newline at end of file diff --git a/src/www/robots.txt b/src/www/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/src/www/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/src/www/sw.js b/src/www/sw.js new file mode 100644 index 0000000..2db108e --- /dev/null +++ b/src/www/sw.js @@ -0,0 +1 @@ +if(!self.define){let s,l={};const e=(e,r)=>(e=new URL(e+".js",r).href,l[e]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=l,document.head.appendChild(s)}else s=e,importScripts(e),l()}).then(()=>{let s=l[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s}));self.define=(r,n)=>{const i=s||("document"in self?document.currentScript.src:"")||location.href;if(l[i])return;let u={};const o=s=>e(s,i),a={module:{uri:i},exports:u,require:o};l[i]=Promise.all(r.map(s=>a[s]||o(s))).then(s=>(n(...s),u))}}define(["./workbox-8c29f6e4"],function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"pwa-maskable-512x512.png",revision:"106b94c2eb0675579ae40309698f364c"},{url:"pwa-maskable-192x192.png",revision:"8befa0caebf24d2e0b01c36e01ab4bd7"},{url:"pwa-512x512.png",revision:"2fcf48a2ae4e95f6d7f4a6bc2cc42a63"},{url:"pwa-192x192.png",revision:"8bc372216f92e2f0e011daff55721ccb"},{url:"index.html",revision:"84e7026a46564267641bb54a36ffa69e"},{url:"favicon.ico",revision:"abba9e0d76413fa735e878d17223cfcb"},{url:"favicon-32x32.png",revision:"0847a57e9d3ae134e314a1339af3516d"},{url:"favicon-16x16.png",revision:"3e5fdc64b0a41f498c177fb2dc89ec6a"},{url:"apple-touch-icon.png",revision:"f9c8240d0509320d85a82bd60a6b426f"},{url:"images/logo.png",revision:"fa701b6a1d714ecf4856df660055eb89"},{url:"assets/zod-DzRgHmfz.js",revision:null},{url:"assets/with-selector-CQzBqoHI.js",revision:null},{url:"assets/web-vitals-DydID5sk.js",revision:null},{url:"assets/wallet-C1oxpYOh.js",revision:null},{url:"assets/useStore-pgHsvR0E.js",revision:null},{url:"assets/useSearch-BufLn6Rh.js",revision:null},{url:"assets/useRouterState-Am3soIW6.js",revision:null},{url:"assets/useRouter-DS97kuA5.js",revision:null},{url:"assets/useNavigate-BNrwOhV8.js",revision:null},{url:"assets/use-table-url-state-BYcGNz1q.js",revision:null},{url:"assets/unauthorized-error-9CwofmD6.js",revision:null},{url:"assets/trash-2-CaT-Drvx.js",revision:null},{url:"assets/tooltip-m5xmPGQe.js",revision:null},{url:"assets/theme-switch-BVGTp-bE.js",revision:null},{url:"assets/theme-provider-Dmxgp34D.js",revision:null},{url:"assets/textarea-Cp-VCvek.js",revision:null},{url:"assets/telescope-CH8QonjS.js",revision:null},{url:"assets/telegram-BpeS2gK_.js",revision:null},{url:"assets/switch-m0XBbPWc.js",revision:null},{url:"assets/skeleton-gJOqI-7w.js",revision:null},{url:"assets/sign-in-D3PxHB7w.js",revision:null},{url:"assets/sidebar-nav-eQOCItLO.js",revision:null},{url:"assets/show-submitted-data-sbgXi_a9.js",revision:null},{url:"assets/shield-check-NJ5V92SM.js",revision:null},{url:"assets/settings-6Tt8SQ46.js",revision:null},{url:"assets/separator-Dw-mNGCy.js",revision:null},{url:"assets/select-CvMpqpz9.js",revision:null},{url:"assets/search-provider-D-fTfilE.js",revision:null},{url:"assets/rpc-C9FTIUCr.js",revision:null},{url:"assets/routes-Dj-aXygU.js",revision:null},{url:"assets/router-D0lu_-Oq.js",revision:null},{url:"assets/route-GIha9u4h.js",revision:null},{url:"assets/route-CbQ1_n1Q.js",revision:null},{url:"assets/route-CKZGG7BF.js",revision:null},{url:"assets/route-C5Xnq6N2.js",revision:null},{url:"assets/route-BfQF2LcU.js",revision:null},{url:"assets/route-BO5WPM5m.js",revision:null},{url:"assets/redirect-dE0wk0WH.js",revision:null},{url:"assets/rate-Dsrqg6hQ.js",revision:null},{url:"assets/radio-group-8QacflxY.js",revision:null},{url:"assets/popover-M5uqmgyK.js",revision:null},{url:"assets/payment-setup-Dgvp9Vym.js",revision:null},{url:"assets/password-input-ZB498Nq4.js",revision:null},{url:"assets/password-Fr9ZcJNs.js",revision:null},{url:"assets/page-header-BRM1dngJ.js",revision:null},{url:"assets/orders-CTtwpZWi.js",revision:null},{url:"assets/nunito-vietnamese-wght-normal-U01xdrZh.woff2",revision:null},{url:"assets/nunito-latin-wght-normal-BzFMHfZw.woff2",revision:null},{url:"assets/nunito-latin-ext-wght-normal-CXYtwYOx.woff2",revision:null},{url:"assets/nunito-cyrillic-wght-normal-CY6AOgYE.woff2",revision:null},{url:"assets/nunito-cyrillic-ext-wght-normal-D4X5GqEv.woff2",revision:null},{url:"assets/noto-sans-vietnamese-wght-normal-DLTJy58D.woff2",revision:null},{url:"assets/noto-sans-latin-wght-normal-BYSzYMf3.woff2",revision:null},{url:"assets/noto-sans-latin-ext-wght-normal-W1qJv59z.woff2",revision:null},{url:"assets/noto-sans-greek-wght-normal-Ymb6dZNd.woff2",revision:null},{url:"assets/noto-sans-greek-ext-wght-normal-12T8GTDR.woff2",revision:null},{url:"assets/noto-sans-devanagari-wght-normal-Cv-Vwajv.woff2",revision:null},{url:"assets/noto-sans-cyrillic-wght-normal-B2hlT84T.woff2",revision:null},{url:"assets/noto-sans-cyrillic-ext-wght-normal-DSNfmdVt.woff2",revision:null},{url:"assets/notifications-CKOafx8I.js",revision:null},{url:"assets/not-found-error-mxpXcTRa.js",revision:null},{url:"assets/messages-BOl-zx8S.js",revision:null},{url:"assets/matchContext-BJCpOvLW.js",revision:null},{url:"assets/manrope-vietnamese-wght-normal-usUDDRr7.woff2",revision:null},{url:"assets/manrope-latin-wght-normal-DHIcAJRg.woff2",revision:null},{url:"assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2",revision:null},{url:"assets/manrope-greek-wght-normal-DL7QRZyv.woff2",revision:null},{url:"assets/manrope-cyrillic-wght-normal-Dvxsihut.woff2",revision:null},{url:"assets/maintenance-error-yQ4OJvXf.js",revision:null},{url:"assets/main-DvsnNI3V.js",revision:null},{url:"assets/long-text-XqSY0a1g.js",revision:null},{url:"assets/logo-BVdckS6R.js",revision:null},{url:"assets/loader-circle-DQHo9Sp_.js",revision:null},{url:"assets/link-Du-u9SDI.js",revision:null},{url:"assets/lib-_PocwKaj.js",revision:null},{url:"assets/label-B2Q8_O-h.js",revision:null},{url:"assets/keys-C8Pk4o9V.js",revision:null},{url:"assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2",revision:null},{url:"assets/inter-latin-wght-normal-Dx4kXJAl.woff2",revision:null},{url:"assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2",revision:null},{url:"assets/inter-greek-wght-normal-CkhJZR-_.woff2",revision:null},{url:"assets/inter-greek-ext-wght-normal-DlzME5K_.woff2",revision:null},{url:"assets/inter-cyrillic-wght-normal-DqGufNeO.woff2",revision:null},{url:"assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2",revision:null},{url:"assets/integrations-BQBy3gz7.js",revision:null},{url:"assets/install-iFxm6jjv.js",revision:null},{url:"assets/input-CZHXycLK.js",revision:null},{url:"assets/index-uuDLrfbi.css",revision:null},{url:"assets/index-BFYQldDz.js",revision:null},{url:"assets/help-8HzWQeDm.js",revision:null},{url:"assets/header-B5Qx5Y9m.js",revision:null},{url:"assets/general-error-ruXTchhS.js",revision:null},{url:"assets/form-uKra2bmF.js",revision:null},{url:"assets/forbidden-B-WSRpe6.js",revision:null},{url:"assets/font-provider-BBeIKmOK.js",revision:null},{url:"assets/eye-off-BBTW1z_J.js",revision:null},{url:"assets/eye-CJkHHosh.js",revision:null},{url:"assets/es2015-DRmlSfkW.js",revision:null},{url:"assets/epay-CSwdoLsE.js",revision:null},{url:"assets/empty-state-BelJgFUf.js",revision:null},{url:"assets/ellipsis-DvvxWQuy.js",revision:null},{url:"assets/dropdown-menu-HbmfecEg.js",revision:null},{url:"assets/download-BhpqmSj0.js",revision:null},{url:"assets/dist-oydJxq9L.js",revision:null},{url:"assets/dist-QGW08nls.js",revision:null},{url:"assets/dist-DzENW8NP.js",revision:null},{url:"assets/dist-DJhZSa1-.js",revision:null},{url:"assets/dist-Ck6_E5T6.js",revision:null},{url:"assets/dist-CT2DjA94.js",revision:null},{url:"assets/dist-CML2zK1G.js",revision:null},{url:"assets/dist-C3yOG_Qz.js",revision:null},{url:"assets/dist-Bh3bGrZa.js",revision:null},{url:"assets/dist-BeVKhAtj.js",revision:null},{url:"assets/dist-BZg_Jfik.js",revision:null},{url:"assets/dist-BPKZF5GI.js",revision:null},{url:"assets/dist-BNiRpK39.js",revision:null},{url:"assets/display-BGnhCcSb.js",revision:null},{url:"assets/data-table-C3uNvchK.js",revision:null},{url:"assets/dashboard-DETe9Zpn.js",revision:null},{url:"assets/createLucideIcon-DMX28cCu.js",revision:null},{url:"assets/copy-to-clipboard-DeFustsS.js",revision:null},{url:"assets/cookies-D0aVbsDr.js",revision:null},{url:"assets/confirm-dialog-DyK21C4Z.js",revision:null},{url:"assets/command-yFHhtFiR.js",revision:null},{url:"assets/coming-soon-dialog-DIE5FD4U.js",revision:null},{url:"assets/clock-3-TWJWgy8T.js",revision:null},{url:"assets/circle-check-nos3opMb.js",revision:null},{url:"assets/chevrons-up-down-C1Q-XIDV.js",revision:null},{url:"assets/chevron-down-uSXLUPEl.js",revision:null},{url:"assets/checkbox-D_bL2Pt-.js",revision:null},{url:"assets/check-DH6qIczM.js",revision:null},{url:"assets/chains-store-DnSbj0Yy.js",revision:null},{url:"assets/chains-a6BmCl-8.js",revision:null},{url:"assets/card-LDLQwVm3.js",revision:null},{url:"assets/button-D-oR8d6w.js",revision:null},{url:"assets/badge-D-FAREMY.js",revision:null},{url:"assets/auth-store-D_jr_Pei.js",revision:null},{url:"assets/auth-animation-context-CciMPPP0.js",revision:null},{url:"assets/atom-DI1Bn-1s.js",revision:null},{url:"assets/arrow-left-BQ3rygWM.js",revision:null},{url:"assets/appearance-Qiu8JKX7.js",revision:null},{url:"assets/addresses-Pwy1cHVj.js",revision:null},{url:"assets/_error-DUUb7pi1.js",revision:null},{url:"assets/_error-Ct843SHu.js",revision:null},{url:"assets/Matches-C_9WN1ag.js",revision:null},{url:"assets/Match-Bdr6F13c.js",revision:null},{url:"assets/ClientOnly-COESZSX_.js",revision:null},{url:"assets/503-C8GhfezX.js",revision:null},{url:"assets/500-CiuhDp_H.js",revision:null},{url:"assets/404-BsLbhv_m.js",revision:null},{url:"assets/403-Cpy7v32n.js",revision:null},{url:"assets/401-kzzPZFna.js",revision:null},{url:"apple-touch-icon.png",revision:"f9c8240d0509320d85a82bd60a6b426f"},{url:"favicon.ico",revision:"abba9e0d76413fa735e878d17223cfcb"},{url:"pwa-192x192.png",revision:"8bc372216f92e2f0e011daff55721ccb"},{url:"pwa-512x512.png",revision:"2fcf48a2ae4e95f6d7f4a6bc2cc42a63"},{url:"pwa-maskable-192x192.png",revision:"8befa0caebf24d2e0b01c36e01ab4bd7"},{url:"pwa-maskable-512x512.png",revision:"106b94c2eb0675579ae40309698f364c"},{url:"robots.txt",revision:"fa1ded1ed7c11438a9b0385b1e112850"},{url:"images/logo.png",revision:"fa701b6a1d714ecf4856df660055eb89"},{url:"manifest.webmanifest",revision:"8d2924aafc68495c2adffcd2b8cff2c1"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("/index.html"),{denylist:[/^\/payments\//,/^\/pay\//,/^\/api\//,/^\/admin\/api\//]}))}); diff --git a/src/www/workbox-8c29f6e4.js b/src/www/workbox-8c29f6e4.js new file mode 100644 index 0000000..9ef0b86 --- /dev/null +++ b/src/www/workbox-8c29f6e4.js @@ -0,0 +1 @@ +define(["exports"],function(t){"use strict";try{self["workbox:core:7.3.0"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:7.3.0"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class r extends i{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class o{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let c;const a=()=>(c||(c=new o,c.addFetchListener(),c.addCacheListener()),c);function h(t,e,n){let o;if("string"==typeof t){const s=new URL(t,location.href);o=new i(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)o=new r(t,e,n);else if("function"==typeof t)o=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});o=t}return a().registerRoute(o),o}const u={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},l=t=>[u.prefix,t,u.suffix].filter(t=>t&&t.length>0).join("-"),f=t=>t||l(u.precache),w=t=>t||l(u.runtime);function d(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:7.3.0"]&&_()}catch(t){}function p(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class y{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class g{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let R;async function m(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===R){const t=new Response("");if("body"in t)try{new Response(t.body),R=!0}catch(t){R=!1}R=!1}return R}()?i.body:await i.blob();return new Response(c,o)}function v(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class q{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const U=new Set;try{self["workbox:strategies:7.3.0"]&&_()}catch(t){}function L(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new q,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=L(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=L(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=L(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=v(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===v(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of U)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=L(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){for(;this.R.length;){const t=this.R.splice(0),e=(await Promise.allSettled(t)).find(t=>"rejected"===t.status);if(e)throw e.reason}}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class C{constructor(t={}){this.cacheName=w(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class E extends C{constructor(t={}){t.cacheName=f(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(E.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.P(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.P();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}P(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==E.copyRedirectedCacheableResponsesPlugin&&(n===E.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(E.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}E.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},E.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await m(t):t};class O{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.j=new Map,this.k=new Map,this.K=new Map,this.l=new E({cacheName:f(t),plugins:[...e,new g({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.T||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.T=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=p(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.j.has(i)&&this.j.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.j.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.K.has(t)&&this.K.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.K.set(t,n.integrity)}if(this.j.set(i,t),this.k.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return d(t,async()=>{const e=new y;this.strategy.plugins.push(e);for(const[e,s]of this.j){const n=this.K.get(s),i=this.k.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return d(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.j.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.j}getCachedURLs(){return[...this.j.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.j.get(e.href)}getIntegrityForCacheKey(t){return this.K.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let x;const N=()=>(x||(x=new O),x);class P extends i{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}t.NavigationRoute=class extends i{constructor(t,{allowlist:e=[/./],denylist:s=[]}={}){super(t=>this.W(t),t),this.M=e,this.S=s}W({url:t,request:e}){if(e&&"navigate"!==e.mode)return!1;const s=t.pathname+t.search;for(const t of this.S)if(t.test(s))return!1;return!!this.M.some(t=>t.test(s))}},t.cleanupOutdatedCaches=function(){self.addEventListener("activate",t=>{const e=f();t.waitUntil((async(t,e="-precache-")=>{const s=(await self.caches.keys()).filter(s=>s.includes(e)&&s.includes(self.registration.scope)&&s!==t);return await Promise.all(s.map(t=>self.caches.delete(t))),s})(e).then(t=>{}))})},t.clientsClaim=function(){self.addEventListener("activate",()=>self.clients.claim())},t.createHandlerBoundToURL=function(t){return N().createHandlerBoundToURL(t)},t.precacheAndRoute=function(t,e){!function(t){N().precache(t)}(t),function(t){const e=N();h(new P(e,t))}(e)},t.registerRoute=h}); diff --git a/wiki/BT_RUN.md b/wiki/BT_RUN.md index f246bec..1201ccb 100644 --- a/wiki/BT_RUN.md +++ b/wiki/BT_RUN.md @@ -15,11 +15,11 @@ ### 二、导入Sql 登录管理刚刚新增数据库,导入`Epusdt`所需的sql文件。 -以下为示范0.01版本 最新数据库请以 https://github.com/assimon/epusdt/blob/master/sql/ 为准 +以下为示范0.01版本 最新数据库请以 https://github.com/GMWalletApp/epusdt/blob/master/sql/ 为准 #### 1.手动下载导入 -数据库地址:https://github.com/assimon/epusdt/blob/master/sql/v0.0.1.sql +数据库地址:https://github.com/GMWalletApp/epusdt/blob/master/sql/v0.0.1.sql ![导入Sql](img/sql.png) #### 2.使用phpMyAdmin导入 @@ -136,8 +136,7 @@ api_auth_token= #订单过期时间(单位分钟) order_expiration_time=10 -#强制汇率(设置此参数后每笔交易将按照此汇率计算,例如:6.4) -forced_usdt_rate= +#汇率相关配置请在后台“系统配置 -> 汇率配置”中设置 ``` 4. ⚠️注意:配置文件里面不认识的不要修改,留空即可,不会改又要瞎改,除非你对项目源代码很熟悉很有信心😁 diff --git a/wiki/docker-RUN.md b/wiki/docker-RUN.md index d6fc745..95c51b7 100644 --- a/wiki/docker-RUN.md +++ b/wiki/docker-RUN.md @@ -73,7 +73,6 @@ api_auth_token= order_expiration_time=10 order_notice_max_retry=0 -forced_usdt_rate= api_rate_url=https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/ tron_grid_api_key= EOF @@ -83,7 +82,7 @@ EOF cat < docker-compose.yaml services: epusdt: - image: gmwallet/epusdt:alpine + image: gmwallet/epusdt:latest restart: always build: context: . @@ -101,4 +100,3 @@ docker compose up -d 5. 配置独角兽后台 商户密钥: http://your_domain/payments/epusdt/v1/order/create-transaction - diff --git a/wiki/manual_RUN.md b/wiki/manual_RUN.md index f80c04a..fbc7054 100644 --- a/wiki/manual_RUN.md +++ b/wiki/manual_RUN.md @@ -8,7 +8,7 @@ cd /var/www/ mkdir epusdt chmod 777 -R /var/www/epusdt cd epusdt -wget https://github.com/assimon/epusdt/releases/download/v0.0.3/epusdt_0.0.3_Linux_x86_64.tar.gz +wget https://github.com/GMWalletApp/epusdt/releases/download/v0.0.3/epusdt_0.0.3_Linux_x86_64.tar.gz tar -xzf epusdt_0.0.3_Linux_x86_64.tar.gz rm epusdt_0.0.3_Linux_x86_64.tar.gz ``` @@ -165,8 +165,7 @@ tg_manage= api_auth_token= #订单过期时间(单位分钟) order_expiration_time=10 -#强制汇率(设置此参数后每笔交易将按照此汇率计算,例如:6.4) -forced_usdt_rate= +#汇率相关配置请在后台“系统配置 -> 汇率配置”中设置 ``` ⚠️注意:配置文件里面不认识的不要修改,留空即可,不会改又要瞎改,除非你对项目源代码很熟悉很有信心😁 @@ -206,7 +205,7 @@ supervisorctl tail epusdt | |___| |_) | |_| \__ \ (_| | |_ |_____| .__/ \__,_|___/\__,_|\__| |_| -Epusdt version(0.0.2) Powered by assimon https://github.com/assimon/epusdt +Epusdt version(0.0.2) Powered by GMWalletApp https://github.com/GMWalletApp/epusdt ⇨ http server started on [::]:8000 ``` ## 其他注意事项