diff --git a/src/.env.example b/src/.env.example index b595454..24cd47e 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=false \ No newline at end of file diff --git a/src/bootstrap/bootstrap.go b/src/bootstrap/bootstrap.go index 5452ee3..a79acfd 100644 --- a/src/bootstrap/bootstrap.go +++ b/src/bootstrap/bootstrap.go @@ -5,10 +5,13 @@ import ( "github.com/assimon/luuu/config" "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/model/data" "github.com/assimon/luuu/mq" "github.com/assimon/luuu/task" "github.com/assimon/luuu/telegram" + appjwt "github.com/assimon/luuu/util/jwt" "github.com/assimon/luuu/util/log" + "github.com/gookit/color" ) var initOnce sync.Once @@ -18,6 +21,46 @@ func InitApp() { config.Init() log.Init() dao.Init() + // Wire settings-table lookups into the config package so + // GetRateApiUrl / GetUsdtRate prefer DB-backed overrides. + 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) + } + } + } + // config.Init() computes RateApiUrl before SettingsGetString is + // installed, so refresh the cache once DB-backed settings are available. + config.RateApiUrl = config.GetRateApiUrl() + // Seed admin account and JWT secret so the management console is + // immediately usable on a fresh install. Both are idempotent. + adminPwd, 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. Change the password via admin console! ║") + color.Yellow.Printf("║ Username: admin ║\n") + color.Yellow.Printf("║ Password: %-60s ║\n", adminPwd) + 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/http_server.go b/src/command/http_server.go index 411b06e..696d94e 100644 --- a/src/command/http_server.go +++ b/src/command/http_server.go @@ -5,10 +5,12 @@ import ( "net/http" "os" "os/signal" + "path/filepath" "time" "github.com/assimon/luuu/bootstrap" "github.com/assimon/luuu/config" + "github.com/assimon/luuu/install" "github.com/assimon/luuu/middleware" "github.com/assimon/luuu/route" "github.com/assimon/luuu/util/constant" @@ -37,6 +39,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 +63,20 @@ 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{ + HTML5: true, + Index: "index.html", + Root: wwwRoot, + })) + httpListen := viper.GetString("http_listen") go func() { if err = e.Start(httpListen); err != http.ErrServerClosed { @@ -86,13 +110,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/config/config.go b/src/config/config.go index fa96b18..8d1d8be 100644 --- a/src/config/config.go +++ b/src/config/config.go @@ -7,6 +7,7 @@ import ( "net/url" "os" "path/filepath" + "strconv" "strings" "time" @@ -15,6 +16,12 @@ import ( "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 @@ -124,6 +131,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 +236,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 +256,6 @@ func GetRateApiUrl() string { if rateURL == "" { log.Println("api_rate_url is empty") } - RateApiUrl = rateURL return rateURL } @@ -250,6 +315,11 @@ func GetRateForCoin(coin string, base string) float64 { } func GetUsdtRate() float64 { + // Prefer the DB-backed override (admin-configurable). Fall back to + // the legacy .env var, then the hardcoded 6.4 default. + if forced := settingsForcedUsdtRate(); forced > 0 { + return forced + } forcedUsdtRate := viper.GetFloat64("forced_usdt_rate") if forcedUsdtRate > 0 { return forcedUsdtRate @@ -340,11 +410,3 @@ func GetSolanaRpcUrl() string { 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/settings_bridge.go b/src/config/settings_bridge.go new file mode 100644 index 0000000..84b12e2 --- /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 fall through to the .env / default path. + +// 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..d96f646 --- /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/assimon/luuu/model/data" + "github.com/assimon/luuu/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..47d3229 --- /dev/null +++ b/src/controller/admin/auth_controller.go @@ -0,0 +1,157 @@ +package admin + +import ( + "errors" + + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/model/mdb" + appjwt "github.com/assimon/luuu/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"` +} + +// 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, + }) +} + +// 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 default + // password so the UI can show a prominent reminder. + isDefault := data.VerifyPassword(user.PasswordHash, "admin") + 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..a1dc487 --- /dev/null +++ b/src/controller/admin/base.go @@ -0,0 +1,26 @@ +package admin + +import ( + "github.com/assimon/luuu/controller" + "github.com/assimon/luuu/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..15bdf98 --- /dev/null +++ b/src/controller/admin/chain_controller.go @@ -0,0 +1,71 @@ +package admin + +import ( + "github.com/assimon/luuu/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..b341b49 --- /dev/null +++ b/src/controller/admin/chain_token_controller.go @@ -0,0 +1,181 @@ +package admin + +import ( + "strconv" + "strings" + + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/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..49af03a --- /dev/null +++ b/src/controller/admin/dashboard_controller.go @@ -0,0 +1,288 @@ +package admin + +import ( + "strconv" + "strings" + "time" + + "github.com/assimon/luuu/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..49c66ce --- /dev/null +++ b/src/controller/admin/notification_controller.go @@ -0,0 +1,314 @@ +package admin + +import ( + "encoding/json" + "errors" + "strconv" + "strings" + + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/model/mdb" + "github.com/assimon/luuu/notify" + "github.com/assimon/luuu/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..65e4baa --- /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/assimon/luuu/model/data" + "github.com/assimon/luuu/model/mdb" + "github.com/assimon/luuu/model/request" + "github.com/assimon/luuu/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..19e03c4 --- /dev/null +++ b/src/controller/admin/rpc_controller.go @@ -0,0 +1,190 @@ +package admin + +import ( + "errors" + "strconv" + "strings" + + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/model/mdb" + "github.com/assimon/luuu/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..f03b0d1 --- /dev/null +++ b/src/controller/admin/settings_controller.go @@ -0,0 +1,153 @@ +package admin + +import ( + "strings" + + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/model/mdb" + "github.com/assimon/luuu/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 exchange rate (0 = use api) +// rate.api_url (string) — external rate API URL +// 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, 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. + telegramKeys := map[string]bool{ + "system.telegram_bot_token": true, + "system.telegram_chat_id": true, + } + for _, item := range req.Items { + if telegramKeys[strings.TrimSpace(item.Key)] { + telegram.ReloadBotAsync("settings upsert") + 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..682382d --- /dev/null +++ b/src/controller/admin/wallet_controller.go @@ -0,0 +1,279 @@ +package admin + +import ( + "errors" + "strconv" + "strings" + + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/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/comm/order_controller.go b/src/controller/comm/order_controller.go index 4c58c4d..62c150f 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/middleware" + "github.com/assimon/luuu/model/mdb" "github.com/assimon/luuu/model/request" "github.com/assimon/luuu/model/service" "github.com/assimon/luuu/util/constant" + "github.com/assimon/luuu/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..fe7f7fa 100644 --- a/src/controller/comm/pay_controller.go +++ b/src/controller/comm/pay_controller.go @@ -1,8 +1,6 @@ package comm import ( - "encoding/json" - "fmt" "html/template" "net/http" "path/filepath" @@ -14,35 +12,47 @@ import ( ) // 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..2afb5a0 100644 --- a/src/controller/comm/supported_asset_controller.go +++ b/src/controller/comm/supported_asset_controller.go @@ -3,6 +3,7 @@ package comm import ( "sort" "strconv" + "strings" "github.com/assimon/luuu/model/data" "github.com/assimon/luuu/model/response" @@ -10,21 +11,21 @@ import ( "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..93cfa87 100644 --- a/src/go.mod +++ b/src/go.mod @@ -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..52c828d --- /dev/null +++ b/src/install/installer.go @@ -0,0 +1,336 @@ +// 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" + + "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{} +} + +// 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 + } + + 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) + + // 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(middleware.StaticWithConfig(middleware.StaticConfig{ + HTML5: true, + Index: "index.html", + Root: wwwRoot, + })) + + // 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..81ec224 --- /dev/null +++ b/src/install/installer_test.go @@ -0,0 +1,175 @@ +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 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..6e5e07e 100644 --- a/src/internal/testutil/testdb.go +++ b/src/internal/testutil/testdb.go @@ -27,7 +27,6 @@ func SetupTestDatabases(t testing.TB) func() { 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 @@ -38,12 +37,44 @@ func SetupTestDatabases(t testing.TB) func() { 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 + // 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, + }) + return func() { closeDB(t, runtimeDB) closeDB(t, mainDB) diff --git a/src/main.go b/src/main.go index 522e672..71b95b1 100644 --- a/src/main.go +++ b/src/main.go @@ -1,11 +1,110 @@ package main import ( + "embed" + "fmt" + "io" + "io/fs" + "os" + "path/filepath" + "github.com/assimon/luuu/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..7e11931 --- /dev/null +++ b/src/middleware/check_jwt.go @@ -0,0 +1,50 @@ +package middleware + +import ( + "net/http" + "strings" + + appjwt "github.com/assimon/luuu/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..d615a48 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/model/data" "github.com/assimon/luuu/util/constant" "github.com/assimon/luuu/util/json" "github.com/assimon/luuu/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_table_init.go b/src/model/dao/mdb_table_init.go index c63bdec..644ebf6 100644 --- a/src/model/dao/mdb_table_init.go +++ b/src/model/dao/mdb_table_init.go @@ -1,60 +1,221 @@ package dao import ( + "encoding/json" + "strconv" + "strings" "sync" "github.com/assimon/luuu/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 + } + + 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] seed 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 legacy telegram config to migrate. + } + + chatID, err := strconv.ParseInt(chatIDStr, 10, 64) + if err != nil { + color.Red.Printf("[store_db] seed 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, + }) + + 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] seed telegram channel err=%s\n", err) + } else { + color.Green.Printf("[store_db] migrated legacy telegram settings to notification_channels (id=%d)\n", ch.ID) } } diff --git a/src/model/data/admin_user_data.go b/src/model/data/admin_user_data.go new file mode 100644 index 0000000..3abe918 --- /dev/null +++ b/src/model/data/admin_user_data.go @@ -0,0 +1,93 @@ +package data + +import ( + "crypto/rand" + "encoding/hex" + "strings" + + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/model/mdb" + "github.com/dromara/carbon/v2" + "golang.org/x/crypto/bcrypt" +) + +const defaultAdminUsername = "admin" + +// 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, + } + return password, true, dao.Mdb.Create(user).Error +} + +func randomAdminPassword() string { + b := make([]byte, 16) + _, _ = rand.Read(b) + return hex.EncodeToString(b) +} + +// 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 + } + return dao.Mdb.Model(&mdb.AdminUser{}). + Where("id = ?", id). + Update("password_hash", hash).Error +} + +// 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..9d9e23f --- /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/assimon/luuu/model/dao" + "github.com/assimon/luuu/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..002f319 --- /dev/null +++ b/src/model/data/chain_data.go @@ -0,0 +1,54 @@ +package data + +import ( + "strings" + + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/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..fd83946 --- /dev/null +++ b/src/model/data/chain_token_data.go @@ -0,0 +1,125 @@ +package data + +import ( + "strings" + + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/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..ce2edb6 --- /dev/null +++ b/src/model/data/notification_channel_data.go @@ -0,0 +1,81 @@ +package data + +import ( + "encoding/json" + "strings" + + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/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..190a63f --- /dev/null +++ b/src/model/data/order_admin_data.go @@ -0,0 +1,151 @@ +package data + +import ( + "strings" + "time" + + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/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..32760ba 100644 --- a/src/model/data/order_data.go +++ b/src/model/data/order_data.go @@ -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..1db8f37 --- /dev/null +++ b/src/model/data/order_data_stats.go @@ -0,0 +1,319 @@ +package data + +import ( + "time" + + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/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..0da602f --- /dev/null +++ b/src/model/data/order_data_test.go @@ -0,0 +1,62 @@ +package data + +import ( + "strings" + "testing" + "time" + + "github.com/assimon/luuu/internal/testutil" + "github.com/assimon/luuu/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..701b105 --- /dev/null +++ b/src/model/data/rpc_node_data.go @@ -0,0 +1,117 @@ +package data + +import ( + "math/rand" + "strings" + + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/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 any enabled row when none are healthy yet (bootstrap case +// where the health check hasn't run). Returns nil if nothing is defined. +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 := rows[:0] + for _, r := range rows { + if r.Status == mdb.RpcNodeStatusOk { + healthy = append(healthy, r) + } + } + candidates := healthy + if len(candidates) == 0 { + candidates = rows // bootstrap: no health check has run yet + } + 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/settings_data.go b/src/model/data/settings_data.go new file mode 100644 index 0000000..a448665 --- /dev/null +++ b/src/model/data/settings_data.go @@ -0,0 +1,166 @@ +package data + +import ( + "strconv" + "strings" + "sync" + + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/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, +} + +// 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..4f146b6 100644 --- a/src/model/data/wallet_address_data.go +++ b/src/model/data/wallet_address_data.go @@ -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..673efdd --- /dev/null +++ b/src/model/data/wallet_address_data_test.go @@ -0,0 +1,83 @@ +package data + +import ( + "strings" + "testing" + + "github.com/assimon/luuu/internal/testutil" + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/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..49d3a6c --- /dev/null +++ b/src/model/mdb/settings.go @@ -0,0 +1,54 @@ +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" + 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..ea143d2 100644 --- a/src/model/service/order_service.go +++ b/src/model/service/order_service.go @@ -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..2bdebd9 100644 --- a/src/model/service/order_service_test.go +++ b/src/model/service/order_service_test.go @@ -2,6 +2,7 @@ package service import ( "fmt" + "strings" "sync" "testing" @@ -32,11 +33,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 +72,49 @@ func TestCreateTransactionAssignsIncrementedAmountsAndLocks(t *testing.T) { } } +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 +123,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 +171,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 +213,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 +259,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 +347,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/sol_task.go b/src/model/service/sol_task.go index 06731f9..68a996c 100644 --- a/src/model/service/sol_task.go +++ b/src/model/service/sol_task.go @@ -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 } @@ -363,35 +388,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 +469,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 +479,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 +489,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/task_service.go b/src/model/service/task_service.go index 131da67..71eeb85 100644 --- a/src/model/service/task_service.go +++ b/src/model/service/task_service.go @@ -14,7 +14,7 @@ import ( "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/notify" "github.com/assimon/luuu/util/constant" "github.com/assimon/luuu/util/http_client" "github.com/assimon/luuu/util/log" @@ -26,7 +26,20 @@ import ( "github.com/tidwall/gjson" ) -const TRC20_USDT_ID = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t" +// tronNodeDefault is the fallback when no rpc_nodes row exists for TRON. +const tronNodeDefault = "https://api.trongrid.io" + +// resolveTronNode returns (baseURL, apiKey) for the TRON HTTP RPC node. +// It reads the first healthy (or any enabled) row from the rpc_nodes table; +// if none exists it falls back to the hard-coded default URL and the +// tron_grid_api_key value from .env (config.TRON_GRID_API_KEY). +func resolveTronNode() (string, string) { + node, err := data.SelectRpcNode(mdb.NetworkTron, mdb.RpcNodeTypeHttp) + if err == nil && node != nil && node.ID > 0 { + return strings.TrimRight(node.Url, "/"), node.ApiKey + } + return tronNodeDefault, config.TRON_GRID_API_KEY +} func Trc20CallBack(address string, wg *sync.WaitGroup) { defer wg.Done() @@ -45,16 +58,29 @@ func Trc20CallBack(address string, wg *sync.WaitGroup) { func checkTrxTransfers(address string, wg *sync.WaitGroup) { defer wg.Done() - defer func() { - if err := recover(); err != nil { - log.Sugar.Errorf("[TRX][%s] panic recovered: %v", address, err) - } - }() + + // Native TRX is gated by a chain_tokens row with empty + // contract_address and symbol=TRX. Admin can disable this row to + // stop scanning native transfers without touching the chain toggle. + trxCfg, err := data.GetEnabledChainTokenBySymbol(mdb.NetworkTron, "TRX") + if err != nil { + log.Sugar.Errorf("[TRX][%s] load chain_tokens err=%v", address, err) + return + } + if trxCfg == nil || trxCfg.ID == 0 { + log.Sugar.Debugf("[TRX][%s] native TRX disabled in chain_tokens, skipping", address) + return + } + trxDecimals := trxCfg.Decimals + if trxDecimals <= 0 { + trxDecimals = 6 + } client := http_client.GetHttpClient() startTime := carbon.Now().AddHours(-24).TimestampMilli() endTime := carbon.Now().TimestampMilli() - url := fmt.Sprintf("https://api.trongrid.io/v1/accounts/%s/transactions", address) + tronBaseURL, tronAPIKey := resolveTronNode() + url := fmt.Sprintf("%s/v1/accounts/%s/transactions", tronBaseURL, address) resp, err := client.R().SetQueryParams(map[string]string{ "order_by": "block_timestamp,desc", @@ -62,17 +88,20 @@ func checkTrxTransfers(address string, wg *sync.WaitGroup) { "only_to": "true", "min_timestamp": stdutil.ToString(startTime), "max_timestamp": stdutil.ToString(endTime), - }).SetHeader("TRON-PRO-API-KEY", config.TRON_GRID_API_KEY).Get(url) + }).SetHeader("TRON-PRO-API-KEY", tronAPIKey).Get(url) if err != nil { - panic(err) + log.Sugar.Errorf("[TRX][%s] HTTP request failed: %v", address, err) + return } if resp.StatusCode() != http.StatusOK { - panic(fmt.Sprintf("TRX API returned status %d", resp.StatusCode())) + log.Sugar.Errorf("[TRX][%s] API returned status %d", address, resp.StatusCode()) + return } success := gjson.GetBytes(resp.Body(), "success").Bool() if !success { - panic("TRX API response indicates failure") + log.Sugar.Errorf("[TRX][%s] API response indicates failure", address) + return } transfers := gjson.GetBytes(resp.Body(), "data").Array() @@ -106,15 +135,19 @@ func checkTrxTransfers(address string, wg *sync.WaitGroup) { log.Sugar.Errorf("[TRX][%s] parse amount failed on tx #%d: %v", address, i, err) continue } - amount := math.MustParsePrecFloat64(decimalQuant.Div(decimal.NewFromInt(1000000)).InexactFloat64(), 2) + amount := math.MustParsePrecFloat64(decimalQuant.Div(decimal.New(1, int32(trxDecimals))).InexactFloat64(), 2) + if trxCfg.MinAmount > 0 && amount < trxCfg.MinAmount { + continue + } if amount <= 0 { continue } txID := transfer.Get("txID").String() - tradeID, err := data.GetTradeIdByWalletAddressAndAmountAndToken(mdb.NetworkTron, address, "TRX", amount) + tradeID, err := data.GetTradeIdByWalletAddressAndAmountAndToken(mdb.NetworkTron, address, strings.ToUpper(strings.TrimSpace(trxCfg.Symbol)), amount) if err != nil { - panic(err) + log.Sugar.Errorf("[TRX][%s] lookup trade_id failed hash=%s err=%v", address, txID, err) + continue } if tradeID == "" { log.Sugar.Debugf("[TRX][%s] skip unmatched tx hash=%s amount=%.2f", address, txID, amount) @@ -124,7 +157,8 @@ func checkTrxTransfers(address string, wg *sync.WaitGroup) { order, err := data.GetOrderInfoByTradeId(tradeID) if err != nil { - panic(err) + log.Sugar.Errorf("[TRX][%s] get order failed trade_id=%s err=%v", address, tradeID, err) + continue } blockTimestamp := transfer.Get("block_timestamp").Int() createTime := order.CreatedAt.TimestampMilli() @@ -135,7 +169,7 @@ func checkTrxTransfers(address string, wg *sync.WaitGroup) { req := &request.OrderProcessingRequest{ ReceiveAddress: address, - Token: "TRX", + Token: strings.ToUpper(strings.TrimSpace(trxCfg.Symbol)), Network: mdb.NetworkTron, TradeId: tradeID, Amount: amount, @@ -147,7 +181,8 @@ func checkTrxTransfers(address string, wg *sync.WaitGroup) { log.Sugar.Infof("[TRX][%s] skip resolved transfer trade_id=%s hash=%s err=%v", address, tradeID, txID, err) continue } - panic(err) + log.Sugar.Errorf("[TRX][%s] order processing failed trade_id=%s hash=%s err=%v", address, tradeID, txID, err) + continue } sendPaymentNotification(order) @@ -157,16 +192,33 @@ func checkTrxTransfers(address string, wg *sync.WaitGroup) { func checkTrc20Transfers(address string, wg *sync.WaitGroup) { defer wg.Done() - defer func() { - if err := recover(); err != nil { - log.Sugar.Errorf("[TRC20][%s] panic recovered: %v", address, err) + + // Build contract -> token map for the TRON network. If nothing is + // configured, skip — preserves the previous behavior of only watching + // admin-approved tokens. + tokens, err := data.ListEnabledChainTokensByNetwork(mdb.NetworkTron) + if err != nil { + log.Sugar.Errorf("[TRC20][%s] load chain_tokens err=%v", address, err) + return + } + if len(tokens) == 0 { + log.Sugar.Debugf("[TRC20][%s] no enabled chain_tokens, skipping", address) + return + } + contractTokens := make(map[string]*mdb.ChainToken, len(tokens)) + for i := range tokens { + c := strings.TrimSpace(tokens[i].ContractAddress) + if c == "" { + continue } - }() + contractTokens[c] = &tokens[i] + } client := http_client.GetHttpClient() startTime := carbon.Now().AddHours(-24).TimestampMilli() endTime := carbon.Now().TimestampMilli() - url := fmt.Sprintf("https://api.trongrid.io/v1/accounts/%s/transactions/trc20", address) + tronBaseURL, tronAPIKey := resolveTronNode() + url := fmt.Sprintf("%s/v1/accounts/%s/transactions/trc20", tronBaseURL, address) resp, err := client.R().SetQueryParams(map[string]string{ "order_by": "block_timestamp,desc", @@ -174,17 +226,20 @@ func checkTrc20Transfers(address string, wg *sync.WaitGroup) { "only_to": "true", "min_timestamp": stdutil.ToString(startTime), "max_timestamp": stdutil.ToString(endTime), - }).SetHeader("TRON-PRO-API-KEY", config.TRON_GRID_API_KEY).Get(url) + }).SetHeader("TRON-PRO-API-KEY", tronAPIKey).Get(url) if err != nil { - panic(err) + log.Sugar.Errorf("[TRC20][%s] HTTP request failed: %v", address, err) + return } if resp.StatusCode() != http.StatusOK { - panic(fmt.Sprintf("TRC20 API returned status %d", resp.StatusCode())) + log.Sugar.Errorf("[TRC20][%s] API returned status %d", address, resp.StatusCode()) + return } success := gjson.GetBytes(resp.Body(), "success").Bool() if !success { - panic("TRC20 API response indicates failure") + log.Sugar.Errorf("[TRC20][%s] API response indicates failure", address) + return } transfers := gjson.GetBytes(resp.Body(), "data").Array() @@ -195,12 +250,15 @@ func checkTrc20Transfers(address string, wg *sync.WaitGroup) { log.Sugar.Debugf("[TRC20][%s] fetched %d transfer records", address, len(transfers)) for i, transfer := range transfers { - if transfer.Get("token_info.address").String() != TRC20_USDT_ID { + contractAddr := transfer.Get("token_info.address").String() + cfg, ok := contractTokens[contractAddr] + if !ok { continue } if transfer.Get("to").String() != address { continue } + tokenSym := strings.ToUpper(strings.TrimSpace(cfg.Symbol)) valueStr := transfer.Get("value").String() decimalQuant, err := decimal.NewFromString(valueStr) @@ -209,25 +267,33 @@ func checkTrc20Transfers(address string, wg *sync.WaitGroup) { continue } tokenDecimals := transfer.Get("token_info.decimals").Int() + if tokenDecimals <= 0 { + tokenDecimals = int64(cfg.Decimals) + } amount := math.MustParsePrecFloat64(decimalQuant.Div(decimal.New(1, int32(tokenDecimals))).InexactFloat64(), 2) + if cfg.MinAmount > 0 && amount < cfg.MinAmount { + continue + } if amount <= 0 { continue } txID := transfer.Get("transaction_id").String() - tradeID, err := data.GetTradeIdByWalletAddressAndAmountAndToken(mdb.NetworkTron, address, "USDT", amount) + tradeID, err := data.GetTradeIdByWalletAddressAndAmountAndToken(mdb.NetworkTron, address, tokenSym, amount) if err != nil { - panic(err) - } - if tradeID == "" { - log.Sugar.Debugf("[TRC20][%s] skip unmatched tx hash=%s amount=%.2f", address, txID, amount) + log.Sugar.Errorf("[TRC20][%s] lookup trade_id failed hash=%s err=%v", address, txID, err) continue } - log.Sugar.Infof("[TRC20][%s] matched trade_id=%s hash=%s amount=%.2f", address, tradeID, txID, amount) + if tradeID == "" { + log.Sugar.Debugf("[TRC20][%s] skip unmatched %s tx hash=%s amount=%.2f", address, tokenSym, txID, amount) + continue + } + log.Sugar.Infof("[TRC20][%s] matched %s trade_id=%s hash=%s amount=%.2f", address, tokenSym, tradeID, txID, amount) order, err := data.GetOrderInfoByTradeId(tradeID) if err != nil { - panic(err) + log.Sugar.Errorf("[TRC20][%s] get order failed trade_id=%s err=%v", address, tradeID, err) + continue } blockTimestamp := transfer.Get("block_timestamp").Int() createTime := order.CreatedAt.TimestampMilli() @@ -238,7 +304,7 @@ func checkTrc20Transfers(address string, wg *sync.WaitGroup) { req := &request.OrderProcessingRequest{ ReceiveAddress: address, - Token: "USDT", + Token: tokenSym, Network: mdb.NetworkTron, TradeId: tradeID, Amount: amount, @@ -250,7 +316,8 @@ func checkTrc20Transfers(address string, wg *sync.WaitGroup) { log.Sugar.Infof("[TRC20][%s] skip resolved transfer trade_id=%s hash=%s err=%v", address, tradeID, txID, err) continue } - panic(err) + log.Sugar.Errorf("[TRC20][%s] order processing failed trade_id=%s hash=%s err=%v", address, tradeID, txID, err) + continue } sendPaymentNotification(order) @@ -273,7 +340,9 @@ func evmChainLogLabel(chainNetwork string) string { } } -// TryProcessEvmERC20Transfer 处理各 EVM 链上 USDT/USDC(及 Polygon USDC.e)的 Transfer 入账(合约与 network 需一致)。 +// TryProcessEvmERC20Transfer 处理各 EVM 链上代币的 Transfer 入账。 +// 代币识别、符号和 decimals 全部从 chain_tokens 表动态查询 — +// 管理后台新增 token 即可立即生效,无需代码改动。 func TryProcessEvmERC20Transfer(chainNetwork string, contract common.Address, toAddr common.Address, rawValue *big.Int, txHash string, blockTsMs int64) { defer func() { if err := recover(); err != nil { @@ -281,46 +350,38 @@ func TryProcessEvmERC20Transfer(chainNetwork string, contract common.Address, to } }() - var usdt, usdc common.Address - var polygonUsdcE common.Address - switch chainNetwork { - case mdb.NetworkEthereum: - usdt = common.HexToAddress("0xdAC17F958D2ee523a2206206994597C13D831ec7") - usdc = common.HexToAddress("0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48") - case mdb.NetworkBsc: - usdt = common.HexToAddress("0x55d398326f99059fF775485246999027B3197955") - usdc = common.HexToAddress("0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d") - case mdb.NetworkPolygon: - usdt = common.HexToAddress("0xc2132D05D31c914a87C6611C10748AEb04B58e8F") - usdc = common.HexToAddress("0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359") - polygonUsdcE = common.HexToAddress("0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174") - case mdb.NetworkPlasma: - // USDT0(官方),6 decimals;链上暂无与 ETH 同级的 Circle USDC 部署,仅匹配 USDT 订单 - usdt = common.HexToAddress("0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb") - default: - return - } - - var tokenSym string - switch { - case contract == usdt: - tokenSym = "USDT" - case contract == usdc || (polygonUsdcE != (common.Address{}) && contract == polygonUsdcE): - tokenSym = "USDC" - default: - net := evmChainLogLabel(chainNetwork) - log.Sugar.Warnf("[%s-WS] skip unsupported contract %s", net, contract.Hex()) - return - } - net := evmChainLogLabel(chainNetwork) + token, err := data.GetEnabledChainTokenByContract(chainNetwork, contract.Hex()) + if err != nil { + log.Sugar.Warnf("[%s-WS] chain_tokens lookup err=%v contract=%s", net, err, contract.Hex()) + return + } + if token == nil || token.ID == 0 { + log.Sugar.Debugf("[%s-WS] skip unconfigured contract %s", net, contract.Hex()) + return + } + tokenSym := strings.ToUpper(strings.TrimSpace(token.Symbol)) + if tokenSym == "" { + log.Sugar.Warnf("[%s-WS] chain_token id=%d has empty symbol", net, token.ID) + return + } + decimals := token.Decimals + if decimals <= 0 { + decimals = 6 + } + walletAddr := strings.ToLower(toAddr.Hex()) if rawValue == nil || rawValue.Sign() <= 0 { log.Sugar.Infof("[%s-%s][%s] skip non-positive or nil amount", net, tokenSym, walletAddr) return } + divisor := decimal.New(1, int32(decimals)) decimalQuant := decimal.NewFromBigInt(rawValue, 0) - amount := math.MustParsePrecFloat64(decimalQuant.Div(decimal.NewFromInt(1_000_000)).InexactFloat64(), 2) + amount := math.MustParsePrecFloat64(decimalQuant.Div(divisor).InexactFloat64(), 2) + if token.MinAmount > 0 && amount < token.MinAmount { + log.Sugar.Debugf("[%s-%s][%s] skip amount %.2f below min_amount %.2f", net, tokenSym, walletAddr, amount, token.MinAmount) + return + } if amount <= 0 { log.Sugar.Warnf("[%s-%s][%s] skip non-positive amount %.2f", net, tokenSym, walletAddr, amount) return @@ -351,6 +412,11 @@ func TryProcessEvmERC20Transfer(chainNetwork string, contract common.Address, to log.Sugar.Warnf("[%s-%s][%s] skip trade_id=%s token mismatch order=%s", net, tokenSym, walletAddr, tradeID, order.Token) return } + if blockTsMs > 0 && blockTsMs < order.CreatedAt.TimestampMilli() { + log.Sugar.Warnf("[%s-%s][%s] skip tx %s because block_time_ms=%d is before order created_ms=%d", + net, tokenSym, walletAddr, txHash, blockTsMs, order.CreatedAt.TimestampMilli()) + return + } req := &request.OrderProcessingRequest{ ReceiveAddress: walletAddr, @@ -399,7 +465,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..b526b58 --- /dev/null +++ b/src/model/service/task_tron_test.go @@ -0,0 +1,92 @@ +package service + +import ( + "testing" + + "github.com/assimon/luuu/config" + "github.com/assimon/luuu/internal/testutil" + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/model/mdb" +) + +// TestResolveTronNode_NoRow verifies that resolveTronNode falls back to the +// hard-coded default when the rpc_nodes table has no TRON row. +func TestResolveTronNode_NoRow(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + config.TRON_GRID_API_KEY = "fallback-key" + + gotURL, gotKey := resolveTronNode() + if gotURL != tronNodeDefault { + t.Errorf("url = %q, want %q", gotURL, tronNodeDefault) + } + if gotKey != "fallback-key" { + t.Errorf("apiKey = %q, want \"fallback-key\"", 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() + + config.TRON_GRID_API_KEY = "fallback-key" + + // 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 := resolveTronNode() + 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 and +// the fallback is used. +func TestResolveTronNode_DisabledRow(t *testing.T) { + cleanup := testutil.SetupTestDatabases(t) + defer cleanup() + + config.TRON_GRID_API_KEY = "fallback-key" + + 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) + } + + gotURL, gotKey := resolveTronNode() + if gotURL != tronNodeDefault { + t.Errorf("url = %q, want %q (disabled row should be ignored)", gotURL, tronNodeDefault) + } + if gotKey != "fallback-key" { + t.Errorf("apiKey = %q, want \"fallback-key\"", gotKey) + } +} diff --git a/src/mq/worker.go b/src/mq/worker.go index 3797c92..ede7fb9 100644 --- a/src/mq/worker.go +++ b/src/mq/worker.go @@ -3,9 +3,8 @@ package mq import ( "errors" "fmt" - "io" "net/http" - "net/url" + "strconv" "strings" "time" @@ -19,6 +18,29 @@ import ( "github.com/assimon/luuu/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..e21f07e 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" @@ -13,6 +14,7 @@ import ( "github.com/assimon/luuu/model/dao" "github.com/assimon/luuu/model/data" "github.com/assimon/luuu/model/mdb" + "github.com/assimon/luuu/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..5e5e8ca --- /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/assimon/luuu/model/data" + "github.com/assimon/luuu/model/mdb" + "github.com/assimon/luuu/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..0db6130 --- /dev/null +++ b/src/route/admin_router_test.go @@ -0,0 +1,806 @@ +package route + +import ( + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/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 +} + +// 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") + } +} + +// ─── 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..fbb1937 100644 --- a/src/route/router.go +++ b/src/route/router.go @@ -2,19 +2,22 @@ package route import ( "bytes" + "crypto/subtle" "encoding/json" "fmt" "io" "net/http" "strconv" - "github.com/assimon/luuu/config" + "github.com/assimon/luuu/controller/admin" "github.com/assimon/luuu/controller/comm" "github.com/assimon/luuu/middleware" + "github.com/assimon/luuu/model/data" "github.com/assimon/luuu/model/mdb" "github.com/assimon/luuu/util/constant" "github.com/assimon/luuu/util/sign" "github.com/labstack/echo/v4" + echoMiddleware "github.com/labstack/echo/v4/middleware" ) // RegisterRoute 路由注册 @@ -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,115 @@ 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) + + // 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..950b41e 100644 --- a/src/route/router_test.go +++ b/src/route/router_test.go @@ -11,11 +11,13 @@ import ( "testing" "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/model/data" "github.com/assimon/luuu/model/mdb" "github.com/assimon/luuu/util/log" "github.com/assimon/luuu/util/sign" "github.com/labstack/echo/v4" "github.com/spf13/viper" + "gorm.io/gorm/clause" ) const testAPIToken = "test-secret-token" @@ -28,8 +30,6 @@ 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", "") @@ -54,30 +54,62 @@ 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() // 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 +117,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,42 +158,6 @@ 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) { - 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()) - - 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) - } - - 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. func TestCreateOrderGmpayV1Solana(t *testing.T) { e := setupTestEnv(t) @@ -223,24 +224,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 +233,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 +451,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 +529,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 a05177c..52913f9 100644 --- a/src/task/listen.go +++ b/src/task/listen.go @@ -7,26 +7,35 @@ import ( 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() go StartPlasmaWebSocketListener() c := cron.New() - // trc20钱包监听 + // TRC20 polling _, err := c.AddJob("@every 5s", ListenTrc20Job{}) if err != nil { log.Sugar.Errorf("[task] Failed to add ListenTrc20Job: %v", err) return } log.Sugar.Info("[task] ListenTrc20Job scheduled successfully (@every 5s)") - // solana钱包监听 + // Solana polling _, err = c.AddJob("@every 5s", ListenSolJob{}) if err != nil { log.Sugar.Errorf("[task] Failed to add ListenSolJob: %v", err) return } log.Sugar.Info("[task] ListenSolJob scheduled successfully (@every 5s)") + // RPC node health checks + _, err = c.AddJob("@every 30s", RpcHealthJob{}) + if err != nil { + log.Sugar.Errorf("[task] Failed to add RpcHealthJob: %v", err) + return + } + 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..85aac3f 100644 --- a/src/task/listen_bsc.go +++ b/src/task/listen_bsc.go @@ -18,11 +18,7 @@ import ( "github.com/ethereum/go-ethereum/ethclient" ) -var ( - // USDT / USDC 合约地址(BSC 主网) - bscUsdtContract = common.HexToAddress("0x55d398326f99059fF775485246999027B3197955") - bscUsdcContract = common.HexToAddress("0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d") -) +const bscDefaultWsURL = "wss://bsc.drpc.org" type bscRecipientSnapshot struct { addrs map[string]struct{} @@ -30,7 +26,24 @@ type bscRecipientSnapshot 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 +53,30 @@ 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 := resolveChainWsURL(mdb.NetworkBsc, bscDefaultWsURL) + 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..d8d3050 --- /dev/null +++ b/src/task/listen_chain_common.go @@ -0,0 +1,101 @@ +package task + +import ( + "context" + "sort" + "strings" + "time" + + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/model/mdb" + "github.com/assimon/luuu/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, falling back to the provided default (usually the +// public node URL) when no row is configured. +func resolveChainWsURL(network, fallback string) string { + node, err := data.SelectRpcNode(network, mdb.RpcNodeTypeWs) + if err == nil && node != nil && node.ID > 0 { + return node.Url + } + return fallback +} diff --git a/src/task/listen_eth.go b/src/task/listen_eth.go index d04bada..d89bd90 100644 --- a/src/task/listen_eth.go +++ b/src/task/listen_eth.go @@ -7,6 +7,7 @@ import ( "sync/atomic" "time" + "github.com/assimon/luuu/config" "github.com/assimon/luuu/model/data" "github.com/assimon/luuu/model/mdb" "github.com/assimon/luuu/model/service" @@ -18,15 +19,24 @@ import ( "github.com/ethereum/go-ethereum/ethclient" ) -var ( +// Transfer 事件签名 — ERC-20 signature, same on every EVM chain. +var transferEventHash = common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef") - // USDT / USDC 合约地址(ETH 主网) - usdtContract = common.HexToAddress("0xdAC17F958D2ee523a2206206994597C13D831ec7") - usdcContract = common.HexToAddress("0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48") +const ethereumDefaultWsURL = "wss://ethereum.publicnode.com" - // Transfer 事件签名 - transferEventHash = common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef") -) +// resolveEthereumWsURL picks a healthy WS endpoint. Falls back to the +// legacy .env value (if set) before the shared default — keeps existing +// deployments working until the admin adds an rpc_nodes row. +func resolveEthereumWsURL() string { + node, err := data.SelectRpcNode(mdb.NetworkEthereum, mdb.RpcNodeTypeWs) + if err == nil && node != nil && node.ID > 0 { + return node.Url + } + if u := config.GetEthereumWsUrl(); u != "" { + return u + } + return ethereumDefaultWsURL +} type ethRecipientSnapshot struct { addrs map[string]struct{} @@ -35,47 +45,68 @@ 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 := resolveEthereumWsURL() + 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 } @@ -115,18 +146,3 @@ func isWatchedEthRecipient(to common.Address) bool { 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..455f443 100644 --- a/src/task/listen_evm_ws.go +++ b/src/task/listen_evm_ws.go @@ -11,7 +11,12 @@ import ( "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..a7a63b0 100644 --- a/src/task/listen_plasma.go +++ b/src/task/listen_plasma.go @@ -18,9 +18,7 @@ import ( "github.com/ethereum/go-ethereum/ethclient" ) -var ( - plasmaUsdt0Contract = common.HexToAddress("0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb") -) +const plasmaDefaultWsURL = "wss://rpc.plasma.to" type plasmaRecipientSnapshot struct { addrs map[string]struct{} @@ -28,7 +26,23 @@ type plasmaRecipientSnapshot 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 +52,30 @@ 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 := resolveChainWsURL(mdb.NetworkPlasma, plasmaDefaultWsURL) + 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..e416dc4 100644 --- a/src/task/listen_polygon.go +++ b/src/task/listen_polygon.go @@ -18,12 +18,7 @@ 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") -) +const polygonDefaultWsURL = "wss://polygon-bor-rpc.publicnode.com" type polygonRecipientSnapshot struct { addrs map[string]struct{} @@ -31,7 +26,23 @@ type polygonRecipientSnapshot 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 +52,30 @@ 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 := resolveChainWsURL(mdb.NetworkPolygon, polygonDefaultWsURL) + 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..941fa70 100644 --- a/src/task/listen_sol_job.go +++ b/src/task/listen_sol_job.go @@ -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_job.go b/src/task/listen_trc20_job.go index 676d808..bf4efb1 100644 --- a/src/task/listen_trc20_job.go +++ b/src/task/listen_trc20_job.go @@ -17,6 +17,10 @@ func (r ListenTrc20Job) Run() { gListenTrc20JobLock.Lock() defer gListenTrc20JobLock.Unlock() log.Sugar.Debug("[ListenTrc20Job] Job triggered") + if !data.IsChainEnabled(mdb.NetworkTron) { + log.Sugar.Debug("[ListenTrc20Job] chain disabled, skipping") + return + } walletAddress, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkTron) if err != nil { log.Sugar.Errorf("[ListenTrc20Job] Failed to get wallet addresses: %v", err) diff --git a/src/task/rpc_health_job.go b/src/task/rpc_health_job.go new file mode 100644 index 0000000..b650247 --- /dev/null +++ b/src/task/rpc_health_job.go @@ -0,0 +1,97 @@ +package task + +import ( + "net" + "net/url" + "strings" + "sync" + "time" + + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/model/mdb" + "github.com/assimon/luuu/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..adcf755 --- /dev/null +++ b/src/task/rpc_health_job_test.go @@ -0,0 +1,194 @@ +package task + +import ( + "net" + "strconv" + "testing" + "time" + + "github.com/assimon/luuu/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..632d7fd 100644 --- a/src/telegram/handle.go +++ b/src/telegram/handle.go @@ -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..0e9e16c 100644 --- a/src/telegram/telegram.go +++ b/src/telegram/telegram.go @@ -1,66 +1,120 @@ package telegram import ( - "github.com/assimon/luuu/config" + "fmt" + "strconv" + "strings" + "sync" + "time" + + "github.com/assimon/luuu/model/data" "github.com/assimon/luuu/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..65d2d11 --- /dev/null +++ b/src/telegram/telegram_test.go @@ -0,0 +1,135 @@ +package telegram + +import ( + "testing" + + "github.com/assimon/luuu/config" + "github.com/assimon/luuu/internal/testutil" + "github.com/assimon/luuu/model/dao" + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/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/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..3847219 100644 --- a/src/util/http/response.go +++ b/src/util/http/response.go @@ -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..4a3bd01 --- /dev/null +++ b/src/util/http/spa.go @@ -0,0 +1,30 @@ +package http + +import ( + "os" + "path/filepath" + "strings" +) + +// 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..60853ef --- /dev/null +++ b/src/util/http/spa_test.go @@ -0,0 +1,68 @@ +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) + } + }) + } +} diff --git a/src/util/jwt/jwt.go b/src/util/jwt/jwt.go new file mode 100644 index 0000000..3b70b0b --- /dev/null +++ b/src/util/jwt/jwt.go @@ -0,0 +1,78 @@ +package jwt + +import ( + "crypto/rand" + "encoding/hex" + "errors" + "time" + + "github.com/assimon/luuu/model/data" + "github.com/assimon/luuu/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/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-IieFK_aS.js b/src/www/assets/401-IieFK_aS.js new file mode 100644 index 0000000..1c31283 --- /dev/null +++ b/src/www/assets/401-IieFK_aS.js @@ -0,0 +1 @@ +import{t as e}from"./unauthorized-error-CxmfHb-a.js";var t=e;export{t as component}; \ No newline at end of file diff --git a/src/www/assets/403-BfPOIf6t.js b/src/www/assets/403-BfPOIf6t.js new file mode 100644 index 0000000..6eaf6a4 --- /dev/null +++ b/src/www/assets/403-BfPOIf6t.js @@ -0,0 +1 @@ +import{t as e}from"./forbidden-BEz-zjy_.js";var t=e;export{t as component}; \ No newline at end of file diff --git a/src/www/assets/404-VQj_aY6A.js b/src/www/assets/404-VQj_aY6A.js new file mode 100644 index 0000000..ec2fcd2 --- /dev/null +++ b/src/www/assets/404-VQj_aY6A.js @@ -0,0 +1 @@ +import{t as e}from"./not-found-error-toRsO1Fi.js";var t=e;export{t as component}; \ No newline at end of file diff --git a/src/www/assets/500-DSCRAyCF.js b/src/www/assets/500-DSCRAyCF.js new file mode 100644 index 0000000..a81d48e --- /dev/null +++ b/src/www/assets/500-DSCRAyCF.js @@ -0,0 +1 @@ +import{t as e}from"./general-error-DKtbS-qh.js";var t=e;export{t as component}; \ No newline at end of file diff --git a/src/www/assets/503-BTAQ6Iri.js b/src/www/assets/503-BTAQ6Iri.js new file mode 100644 index 0000000..e849960 --- /dev/null +++ b/src/www/assets/503-BTAQ6Iri.js @@ -0,0 +1 @@ +import{t as e}from"./maintenance-error-PO6kK4Oj.js";var t=e;export{t as component}; \ No newline at end of file diff --git a/src/www/assets/ClientOnly-CtYi2y5F.js b/src/www/assets/ClientOnly-CtYi2y5F.js new file mode 100644 index 0000000..20f630e --- /dev/null +++ b/src/www/assets/ClientOnly-CtYi2y5F.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{m as r,n as i}from"./useStore-1-QVtiLb.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-B8-zI9ZJ.js b/src/www/assets/Match-B8-zI9ZJ.js new file mode 100644 index 0000000..5a4c60d --- /dev/null +++ b/src/www/assets/Match-B8-zI9ZJ.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{o as r,t as i}from"./useRouter-D03zSgJO.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-1-QVtiLb.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-CtYi2y5F.js";import{i as j,r as re,t as M}from"./redirect-dE0wk0WH.js";import{n as ie}from"./matchContext-BcwcZvp2.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=t(n(),1),Q=e();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-LuvVcyUg.js b/src/www/assets/Matches-LuvVcyUg.js new file mode 100644 index 0000000..1ae3a4d --- /dev/null +++ b/src/www/assets/Matches-LuvVcyUg.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{o as r,s as i,t as a}from"./useRouter-D03zSgJO.js";import{t as o}from"./useStore-1-QVtiLb.js";import{f as s}from"./ClientOnly-CtYi2y5F.js";import"./redirect-dE0wk0WH.js";import{a as c,i as l,r as u,s as d,t as f}from"./Match-B8-zI9ZJ.js";import{n as p}from"./matchContext-BcwcZvp2.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=t(n(),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=e();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-DGJYkCxd.js b/src/www/assets/_error-DGJYkCxd.js new file mode 100644 index 0000000..e00deed --- /dev/null +++ b/src/www/assets/_error-DGJYkCxd.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_error-Dttamloo.js","assets/messages-BovT1T-w.js","assets/search-provider-Cx1K1ilz.js","assets/dist-DG5UMlBd.js","assets/button-DJA4fnJ8.js","assets/command-BwVY_kli.js","assets/dist-BKfJQFVD.js","assets/dist-BEDXr2LC.js","assets/dist-15n4mVGL.js","assets/dropdown-menu-CUea1X0A.js","assets/dist-D21KDGR3.js","assets/dist-Cp1lAGZy.js","assets/createLucideIcon-D28ivbfF.js","assets/check-gDgbfVXu.js","assets/dist-DlZiaY1y.js","assets/dist-CGm-FpWw.js","assets/separator-CRLYw2cW.js","assets/wallet--XSRr4dT.js","assets/cookies-BNZcTwGc.js","assets/auth-store-BpIS8RMn.js","assets/dist-DvAgZMq72.js","assets/with-selector-D_dmjfol.js","assets/useRouter-D03zSgJO.js","assets/useNavigate-Dg8CkCoa.js","assets/useStore-1-QVtiLb.js","assets/circle-check-Dh8WOZF0.js","assets/input-DiRPHDd8.js","assets/font-provider-DvtNHF7l.js","assets/theme-provider-CRKya7Cx.js","assets/theme-switch-BjXQNOij.js","assets/header-DbmR8lIc.js","assets/link-CA4H4hTz.js","assets/ClientOnly-CtYi2y5F.js","assets/forbidden-BEz-zjy_.js","assets/general-error-DKtbS-qh.js","assets/maintenance-error-PO6kK4Oj.js","assets/not-found-error-toRsO1Fi.js","assets/unauthorized-error-CxmfHb-a.js"])))=>i.map(i=>d[i]); +import{ou as e,ru as t}from"./messages-BovT1T-w.js";import{r as n}from"./useRouter-D03zSgJO.js";import{d as r}from"./useStore-1-QVtiLb.js";import{n as i}from"./route-BxpeArPd.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=e(t(),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-Dttamloo.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])),`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-Dttamloo.js b/src/www/assets/_error-Dttamloo.js new file mode 100644 index 0000000..9c31b98 --- /dev/null +++ b/src/www/assets/_error-Dttamloo.js @@ -0,0 +1 @@ +import{nu as e}from"./messages-BovT1T-w.js";import{t}from"./_error-DGJYkCxd.js";import{h as n}from"./search-provider-Cx1K1ilz.js";import{n as r,t as i}from"./theme-switch-BjXQNOij.js";import{t as a}from"./general-error-DKtbS-qh.js";import{t as o}from"./not-found-error-toRsO1Fi.js";import{t as s}from"./unauthorized-error-CxmfHb-a.js";import{t as c}from"./forbidden-BEz-zjy_.js";import{t as l}from"./maintenance-error-PO6kK4Oj.js";import{n as u,r as d,t as f}from"./header-DbmR8lIc.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-DQVKa3vf.js b/src/www/assets/addresses-DQVKa3vf.js new file mode 100644 index 0000000..63ede88 --- /dev/null +++ b/src/www/assets/addresses-DQVKa3vf.js @@ -0,0 +1,3 @@ +import{$i as e,Ai as t,Bi as n,Ci 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 _,Ri as ee,Si as v,Ti as y,Ui as b,Vi as te,Wi as ne,Xi as re,Yi as ie,Zi as ae,_i as x,aa as S,bi as C,di as w,ea as oe,fi as T,gi as E,hi as se,ia as ce,ji as D,ki as O,mi as le,na as ue,nu as de,oa as fe,ou as pe,pi as me,qi as he,ra as ge,ru as _e,ta as ve,vi as ye,wi as be,xi as xe,yi as Se,zi as k}from"./messages-BovT1T-w.js";import{a as A}from"./auth-store-BpIS8RMn.js";import{r as Ce,t as we}from"./router-Dohuf5K5.js";import{r as Te}from"./route-BxpeArPd.js";import{m as Ee,o as j}from"./search-provider-Cx1K1ilz.js";import{i as M,t as N}from"./button-DJA4fnJ8.js";import{a as P,c as F,l as De,r as Oe,s as ke,t as Ae}from"./dropdown-menu-CUea1X0A.js";import{d as I,f as je,l as L,m as R,p as z,u as B}from"./command-BwVY_kli.js";import{t as V}from"./label-CsevXZTG.js";import{a as Me,i as Ne,n as Pe,o as Fe,r as Ie,s as Le,t as Re}from"./select-DcStuzoT.js";import{t as ze}from"./switch-R6BNZUH1.js";import{_ as Be,d as H,f as Ve,g as He,h as Ue,n as We,p as Ge,r as Ke,t as qe,v as Je,y as Ye}from"./data-table-CmcvKcj8.js";import{t as Xe}from"./download-CN4vU01G.js";import{t as Ze}from"./ellipsis-Y4gZr59G.js";import{t as Qe}from"./eye-off-C-BF3gv3.js";import{t as $e}from"./eye-CDavQcLN.js";import{n as et,t as tt}from"./chains-store-Dzu_Y00B.js";import{n as nt,t as rt}from"./trash-2-Du706Ujr.js";import{n as U}from"./dist-DvAgZMq72.js";import{c as W,s as it}from"./zod-Cymc5bS-.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-DdHiBYMe.js";import{t as X}from"./input-DiRPHDd8.js";import{t as ct}from"./page-header-BBJ9dE3-.js";import{t as lt}from"./textarea-D_TrrVtD.js";import{t as ut}from"./use-table-url-state-C7-IMA3_.js";import{t as dt}from"./long-text-BXQXVuRh.js";var Z=pe(_e(),1),Q=de(),ft=it({address:W().min(8,T()),network:W().min(1,w()),remark:W().max(50).optional()});function pt({open:e,onOpenChange:t,currentRow:i,onSuccess:a}){let{chains:o,loading:s}=tt(),l=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}`),f=(0,Z.useMemo)(()=>o.map(e=>e.network).filter(e=>!!e),[o]);(0,Z.useEffect)(()=>{e&&l.reset({address:i?.address??``,network:i?.network??``,remark:i?.remark??``})},[e,i,l]);function p(e){if(i?.id){d.mutate({params:{path:{id:i.id}},body:{remark:e.remark||void 0}},{onSuccess:()=>{U.success(le()),t(!1),a?.()}});return}u.mutate({body:{address:e.address,network:e.network,remark:e.remark??``}},{onSuccess:()=>{U.success(me()),t(!1),a?.()}})}let m=u.isPending||d.isPending,h=f.length>0,g=s?be():r(),[_,ee]=(0,Z.useState)(!1);return(0,Q.jsx)(L,{onOpenChange:t,open:e,children:(0,Q.jsxs)(B,{children:[(0,Q.jsxs)(z,{children:[(0,Q.jsx)(R,{children:i?v():xe()}),(0,Q.jsx)(I,{children:i?C():Se()})]}),(0,Q.jsx)(st,{...l,children:(0,Q.jsxs)(`form`,{className:`space-y-4`,onSubmit:l.handleSubmit(p),children:[(0,Q.jsx)(K,{control:l.control,name:`network`,render:({field:e})=>(0,Q.jsxs)(G,{children:[(0,Q.jsx)(J,{children:b()}),(0,Q.jsxs)(Re,{disabled:!!i||!h,onValueChange:e.onChange,value:e.value,children:[(0,Q.jsx)(q,{children:(0,Q.jsx)(Ne,{className:`w-full`,children:(0,Q.jsx)(Me,{placeholder:h?c():g})})}),(0,Q.jsx)(Pe,{children:h?f.map(e=>(0,Q.jsx)(Ie,{value:e,children:e},e)):(0,Q.jsx)(`div`,{className:`px-2 py-1.5 text-muted-foreground text-sm`,children:g})})]}),(0,Q.jsx)(Y,{})]})}),(0,Q.jsx)(K,{control:l.control,name:`address`,render:({field:e})=>(0,Q.jsxs)(G,{children:[(0,Q.jsx)(J,{children:n()}),(0,Q.jsx)(q,{children:(0,Q.jsxs)(`div`,{className:`relative`,children:[(0,Q.jsx)(X,{...e,className:`pr-10`,disabled:!!i,placeholder:ye(),type:_?`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:_?(0,Q.jsx)(Qe,{className:`h-4 w-4`}):(0,Q.jsx)($e,{className:`h-4 w-4`})})]})}),(0,Q.jsx)(Y,{})]})}),(0,Q.jsx)(K,{control:l.control,name:`remark`,render:({field:e})=>(0,Q.jsxs)(G,{children:[(0,Q.jsx)(J,{children:O()}),(0,Q.jsx)(q,{children:(0,Q.jsx)(X,{...e,placeholder:x()})}),(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:k()}),(0,Q.jsx)(N,{disabled:m,type:`submit`,children:m?E():se()})]})]})})]})})}function mt(e){return[{id:`status-switch`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:m()}),cell:({row:t})=>(0,Q.jsx)(ze,{checked:t.original.status===1,onCheckedChange:()=>e(t.original.status===1?`disable`:`enable`,t.original)}),enableSorting:!1,enableHiding:!1,meta:{label:m(),skeleton:`switch`,sticky:`left`,th:{className:M(`rounded-tl-[inherit]`)}}},{accessorKey:`address`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:p()}),cell:({row:e})=>(0,Q.jsx)(dt,{className:`font-medium`,children:e.original.address}),enableHiding:!1,meta:{label:p(),skeleton:`long`}},{accessorKey:`network`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:b()}),meta:{label:b(),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:t()}),cell:({row:e})=>e.original.source??`-`,meta:{label:t(),skeleton:`short`}},{accessorKey:`remark`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:O()}),meta:{label:O(),skeleton:`long`}},{accessorKey:`created_at`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:h()}),cell:({row:e})=>j(e.original.created_at),meta:{label:h(),skeleton:`date`}},{accessorKey:`updated_at`,header:({column:e})=>(0,Q.jsx)(H,{column:e,title:i()}),cell:({row:e})=>j(e.original.updated_at),meta:{label:i(),skeleton:`date`}},{id:`actions`,enableHiding:!1,meta:{label:a(),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)(Ze,{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:[y(),(0,Q.jsx)(F,{children:(0,Q.jsx)(et,{size:16})})]}),(0,Q.jsx)(ke,{}),(0,Q.jsxs)(P,{onClick:()=>e(`delete`,t.original),variant:`destructive`,children:[ae(),(0,Q.jsx)(F,{children:(0,Q.jsx)(rt,{size:16})})]})]})]})}]}var $=Te(`/_authenticated/addresses/`);function ht({data:e,isLoading:t,onAction:n,onRefresh:r}){let[i,a]=(0,Z.useState)([]),{globalFilter:s,onGlobalFilterChange:c,columnFilters:u,onColumnFiltersChange:d,pagination:f,onPaginationChange:p,ensurePageInRange:m}=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`}]}),h=Ve({data:e,columns:(0,Z.useMemo)(()=>mt(n),[n]),state:{sorting:i,columnFilters:u,globalFilter:s,pagination:f},onSortingChange:a,onColumnFiltersChange:d,onGlobalFilterChange:c,onPaginationChange:p,globalFilterFn:(e,t,n)=>{let r=String(n).toLowerCase();return(e.original.address??``).toLowerCase().includes(r)||(e.original.remark??``).toLowerCase().includes(r)},getCoreRowModel:Ge(),getFilteredRowModel:Be(),getPaginationRowModel:Je(),getSortedRowModel:Ye(),getFacetedRowModel:Ue(),getFacetedUniqueValues:He()});(0,Z.useEffect)(()=>{m(h.getPageCount())},[h,m]);let _=[...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)(qe,{filters:[{columnId:`status`,title:g(),options:[...Ce]},{columnId:`network`,title:b(),options:_}],onRefresh:r,searchPlaceholder:l(),table:h}),(0,Q.jsx)(Ke,{className:`min-w-[900px]`,emptyText:o(),loading:t,table:h}),(0,Q.jsx)(We,{className:`mt-auto`,table:h})]})}function gt(){let{chains:t}=tt(),r=A.useQuery(`get`,`/admin/api/v1/wallets`),i=A.useMutation(`delete`,`/admin/api/v1/wallets/{id}`),a=A.useMutation(`post`,`/admin/api/v1/wallets/{id}/status`),o=A.useMutation(`post`,`/admin/api/v1/wallets/batch-import`),[l,p]=(0,Z.useState)(!1),[m,h]=(0,Z.useState)(!1),[g,v]=(0,Z.useState)(``),[y,b]=(0,Z.useState)(``),[x,C]=(0,Z.useState)(null),[w,T]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{if(!t.length){g&&v(``);return}t.some(e=>e.network&&e.network===g)||v(t[0]?.network??``)},[t,g]);async function E(){await we.invalidateQueries({queryKey:[`get`,`/admin/api/v1/wallets`]})}async function se(){if(!w?.row.id)return;let e=Number(w.row.id);w.action===`delete`?(await i.mutateAsync({params:{path:{id:e}}}),U.success(fe())):(w.action===`enable`||w.action===`disable`)&&(await a.mutateAsync({params:{path:{id:e}},body:{status:w.action===`enable`?1:2}}),U.success(S())),await E(),T(null)}async function D(e,t){if(e===`edit`){C(t),p(!0);return}if(e===`enable`||e===`disable`){if(!t.id)return;await a.mutateAsync({params:{path:{id:Number(t.id)}},body:{status:e===`enable`?1:2}}),U.success(S()),await E();return}T({action:e,row:t})}async function O(){if(!g){U.error(ce());return}let e=y.split(/\r?\n/).map(e=>e.trim()).filter(Boolean);if(!e.length){U.error(ge());return}let t=((await o.mutateAsync({body:{addresses:e,network:g}})).data??[]).filter(e=>e.ok).length;U.success(ue({success:String(t),total:String(e.length)})),h(!1),b(``),await E()}return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Le,{fixed:!0}),(0,Q.jsxs)(Fe,{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:()=>h(!0),variant:`outline`,children:[(0,Q.jsx)(Xe,{className:`mr-2 h-4 w-4`}),ve()]}),(0,Q.jsxs)(N,{onClick:()=>{C(null),p(!0)},children:[(0,Q.jsx)(nt,{className:`mr-2 h-4 w-4`}),oe()]})]}),description:e(),title:_()}),(0,Q.jsx)(ht,{data:r.data?.data??[],isLoading:r.isLoading,onAction:D,onRefresh:()=>r.refetch()})]}),(0,Q.jsx)(pt,{currentRow:x,onOpenChange:p,onSuccess:()=>r.refetch(),open:l}),w&&(0,Q.jsx)(Ee,{confirmText:w.action===`delete`?ae():re(),desc:(0,Q.jsx)(`span`,{children:ie({address:String(w.row.address),action:w.action})}),destructive:w.action===`delete`,handleConfirm:se,onOpenChange:()=>T(null),open:!0,title:w.action===`delete`?u():he()}),(0,Q.jsx)(L,{onOpenChange:h,open:m,children:(0,Q.jsxs)(B,{children:[(0,Q.jsxs)(z,{children:[(0,Q.jsx)(R,{children:d()}),(0,Q.jsx)(I,{children:s()})]}),(0,Q.jsxs)(`div`,{className:`space-y-4`,children:[(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(V,{children:ne()}),(0,Q.jsxs)(Re,{onValueChange:v,value:g,children:[(0,Q.jsx)(Ne,{children:(0,Q.jsx)(Me,{placeholder:c()})}),(0,Q.jsx)(Pe,{children:t.some(e=>e.network)?t.filter(e=>!!e.network).map(e=>(0,Q.jsx)(Ie,{value:e.network,children:e.display_name??e.network??te()},e.network)):(0,Q.jsx)(`div`,{className:`px-2 py-1.5 text-muted-foreground text-sm`,children:ce()})})]})]}),(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(V,{children:n()}),(0,Q.jsx)(lt,{className:`min-h-40`,onChange:e=>b(e.target.value),placeholder:`TAddr001 +TAddr002 +TAddr003`,value:y})]})]}),(0,Q.jsxs)(je,{children:[(0,Q.jsx)(N,{onClick:()=>h(!1),variant:`outline`,children:k()}),(0,Q.jsx)(N,{disabled:o.isPending||!t.some(e=>e.network),onClick:O,children:o.isPending?ee():f()})]})]})})]})}var _t=gt;export{_t as component}; \ No newline at end of file diff --git a/src/www/assets/appearance-DJZ27An3.js b/src/www/assets/appearance-DJZ27An3.js new file mode 100644 index 0000000..473770a --- /dev/null +++ b/src/www/assets/appearance-DJZ27An3.js @@ -0,0 +1 @@ +import{$ as e,Gl as t,J as n,Q as r,Wl as i,X as a,Y as o,Z as s,nu as c,q as l}from"./messages-BovT1T-w.js";import{i as u,n as d,t as f}from"./button-DJA4fnJ8.js";import{n as p,r as m}from"./font-provider-DvtNHF7l.js";import{n as h}from"./theme-provider-CRKya7Cx.js";import{t as g}from"./chevron-down-CdmvZsfI.js";import{n as _,t as v}from"./radio-group-DXVwPYJH.js";import{r as y,s as b}from"./zod-Cymc5bS-.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-DdHiBYMe.js";import{t as A}from"./page-header-BBJ9dE3-.js";import{t as j}from"./show-submitted-data-l0RlCwTX.js";var M=c(),N=b({theme:y([`light`,`dark`]),font:y(m)});function P(){let{font:e,setFont:r}=p(),{theme:c,setTheme:y}=h(),b={theme:c,font:e},A=w({resolver:S(N),defaultValues:b});function P(t){t.font!==e&&r(t.font),t.theme!==c&&y(t.theme),j(t)}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:s()}),(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:a()}),(0,M.jsx)(O,{})]})}),(0,M.jsx)(C,{control:A.control,name:`theme`,render:({field:e})=>(0,M.jsxs)(x,{children:[(0,M.jsx)(E,{children:o()}),(0,M.jsx)(D,{children:n()}),(0,M.jsx)(O,{}),(0,M.jsxs)(v,{className:`grid max-w-md grid-cols-2 gap-8 pt-2`,defaultValue:e.value,onValueChange:e.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:t()})]})}),(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:i()})]})})]})]})}),(0,M.jsx)(f,{type:`submit`,children:l()})]})})}function F(){return(0,M.jsx)(A,{description:r(),title:e(),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-BrKcUadm.js b/src/www/assets/arrow-left-BrKcUadm.js new file mode 100644 index 0000000..2165563 --- /dev/null +++ b/src/www/assets/arrow-left-BrKcUadm.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-zwGs7ZAM.js b/src/www/assets/auth-animation-context-zwGs7ZAM.js new file mode 100644 index 0000000..ca9de12 --- /dev/null +++ b/src/www/assets/auth-animation-context-zwGs7ZAM.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";var r=t(n(),1),i=e(),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-BpIS8RMn.js b/src/www/assets/auth-store-BpIS8RMn.js new file mode 100644 index 0000000..44dd6b6 --- /dev/null +++ b/src/www/assets/auth-store-BpIS8RMn.js @@ -0,0 +1 @@ +import{Ac as e,Cc as t,Dc as n,Ec as r,Oc as i,Sc as a,Tc as o,_c as s,bc as c,fc as l,gc as u,hc as d,kc as f,mc as p,nu as m,ou as h,pc as g,ru as _,vc as v,wc as y,xc as b,yc as x}from"./messages-BovT1T-w.js";import{t as ee}from"./with-selector-D_dmjfol.js";import{n as S,r as te,t as C}from"./cookies-BNZcTwGc.js";import{n as w}from"./dist-DvAgZMq72.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(_(),1),Je=m(),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:g,400:e,500:l,10001:f,10002:i,10003:n,10004:r,10005:o,10006:y,10007:t,10008:a,10009:b,10010:c,10011:x,10012:v,10013:s,10014:u,10015:d,10016:p};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:`http://64.31.22.157:8000`});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-BAmRBT3U.js b/src/www/assets/badge-BAmRBT3U.js new file mode 100644 index 0000000..f890263 --- /dev/null +++ b/src/www/assets/badge-BAmRBT3U.js @@ -0,0 +1 @@ +import{nu as e}from"./messages-BovT1T-w.js";import{i as t,r as n,s as r}from"./button-DJA4fnJ8.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-DJA4fnJ8.js b/src/www/assets/button-DJA4fnJ8.js new file mode 100644 index 0000000..e97387d --- /dev/null +++ b/src/www/assets/button-DJA4fnJ8.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";var r=t(n(),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-DuQAN29P.js b/src/www/assets/card-DuQAN29P.js new file mode 100644 index 0000000..57ee366 --- /dev/null +++ b/src/www/assets/card-DuQAN29P.js @@ -0,0 +1 @@ +import{nu as e}from"./messages-BovT1T-w.js";import{i as t}from"./button-DJA4fnJ8.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-QKtNypSO.js b/src/www/assets/chains-QKtNypSO.js new file mode 100644 index 0000000..cbdef67 --- /dev/null +++ b/src/www/assets/chains-QKtNypSO.js @@ -0,0 +1 @@ +import{$r as e,Ar as t,Br as n,Di as r,Ei as i,Fr as a,Gr as o,Hi as s,Hr as c,Ir as l,Jr as u,Kr as d,Lr as f,Mr as p,Ni as m,Nr as h,Oi as g,Pr as _,Qr as ee,Rr as v,Ui as y,Ur as b,Vr as x,Wr as S,Xr as C,Yr as w,Zr as te,ai as T,ci as E,ei as ne,gi as D,ii as O,jr as re,li as ie,ni as ae,nu as k,oi as A,ou as oe,qr as se,ri as ce,ru as le,si as ue,ti as de,ui as fe,zi as pe,zr as me}from"./messages-BovT1T-w.js";import{a as j,d as M,u as he}from"./auth-store-BpIS8RMn.js";import{t as N}from"./router-Dohuf5K5.js";import{P,U as ge,W as _e,o as F,r as ve}from"./search-provider-Cx1K1ilz.js";import{i as I,t as L}from"./button-DJA4fnJ8.js";import{a as R,c as z,l as ye,r as be,s as xe,t as Se}from"./dropdown-menu-CUea1X0A.js";import{d as Ce,g as we,l as Te,m as Ee,p as De,u as Oe}from"./command-BwVY_kli.js";import{t as ke}from"./checkbox-B_Isethe.js";import{a as Ae,i as je,n as Me,o as Ne,r as Pe,s as Fe,t as Ie}from"./select-DcStuzoT.js";import{t as B}from"./separator-CRLYw2cW.js";import{t as Le}from"./switch-R6BNZUH1.js";import{_ as Re,d as V,f as ze,g as Be,h as Ve,n as He,p as Ue,r as We,t as Ge,v as Ke,y as qe}from"./data-table-CmcvKcj8.js";import{t as Je}from"./arrow-left-BrKcUadm.js";import{t as Ye}from"./ellipsis-Y4gZr59G.js";import{t as Xe}from"./empty-state-Cam-sX8U.js";import{n as Ze,t as Qe}from"./chains-store-Dzu_Y00B.js";import{n as $e,t as et}from"./trash-2-Du706Ujr.js";import{n as H}from"./dist-DvAgZMq72.js";import{a as tt,c as U,n as nt,s as rt}from"./zod-Cymc5bS-.js";import{a as W,c as it,i as G,l as at,n as K,o as q,s as J,t as ot}from"./form-DdHiBYMe.js";import{t as Y}from"./input-DiRPHDd8.js";import{t as st}from"./page-header-BBJ9dE3-.js";import{t as X}from"./badge-BAmRBT3U.js";import{t as ct}from"./coming-soon-dialog-DMmjLgiX.js";var Z=oe(le(),1),Q=k(),lt=rt({network:U().min(1,h()),symbol:U().min(1,p()),contract_address:U().optional().default(``),decimals:nt().min(0,re()).default(6),min_amount:nt().min(0,t()).default(0),enabled:tt().default(!0)});function ut({open:e,onOpenChange:t,currentRow:r,onSuccess:i,defaultNetwork:o,onCreate:u,onUpdate:d,chains:p}){let h=at({resolver:it(lt),defaultValues:{network:``,symbol:``,contract_address:``,decimals:6,min_amount:0,enabled:!0}}),g;g=p?.length?p:o?[{network:o,display_name:o}]:[],(0,Z.useEffect)(()=>{e&&h.reset({network:r?.network??o??g[0]?.network??``,symbol:r?.symbol??``,contract_address:r?.contract_address??``,decimals:r?.decimals??6,min_amount:r?.min_amount??0,enabled:r?.enabled??!0})},[e,r,o,g,h]);async function ee(e){r?.id?await d(e):await u(e),t(!1),await i?.()}let C=h.formState.isSubmitting;return(0,Q.jsx)(Te,{onOpenChange:t,open:e,children:(0,Q.jsxs)(Oe,{children:[(0,Q.jsxs)(De,{children:[(0,Q.jsx)(Ee,{children:r?S():b()}),(0,Q.jsx)(Ce,{children:r?c():x()})]}),(0,Q.jsx)(ot,{...h,children:(0,Q.jsxs)(`form`,{className:`space-y-4`,onSubmit:h.handleSubmit(ee),children:[(0,Q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,Q.jsx)(G,{control:h.control,name:`network`,render:({field:e})=>(0,Q.jsxs)(W,{children:[(0,Q.jsx)(q,{children:y()}),(0,Q.jsxs)(Ie,{disabled:!!r,onValueChange:e.onChange,value:e.value,children:[(0,Q.jsx)(K,{children:(0,Q.jsx)(je,{className:`w-full`,children:(0,Q.jsx)(Ae,{placeholder:s()})})}),(0,Q.jsx)(Me,{children:g.map(e=>(0,Q.jsx)(Pe,{value:e.network,children:e.display_name??e.network},e.network))})]}),(0,Q.jsx)(J,{})]})}),(0,Q.jsx)(G,{control:h.control,name:`symbol`,render:({field:e})=>(0,Q.jsxs)(W,{children:[(0,Q.jsx)(q,{children:n()}),(0,Q.jsx)(K,{children:(0,Q.jsx)(Y,{placeholder:`USDT`,...e,disabled:!!r})}),(0,Q.jsx)(J,{})]})})]}),(0,Q.jsx)(`div`,{className:`rounded-md border border-dashed p-3 text-muted-foreground text-sm`,children:me()}),(0,Q.jsx)(G,{control:h.control,name:`contract_address`,render:({field:e})=>(0,Q.jsxs)(W,{children:[(0,Q.jsx)(q,{children:v()}),(0,Q.jsx)(K,{children:(0,Q.jsx)(Y,{placeholder:`TR7NHqje...`,...e})}),(0,Q.jsx)(J,{})]})}),(0,Q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,Q.jsx)(G,{control:h.control,name:`decimals`,render:({field:e})=>(0,Q.jsxs)(W,{children:[(0,Q.jsx)(q,{children:f()}),(0,Q.jsx)(K,{children:(0,Q.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,Q.jsx)(J,{})]})}),(0,Q.jsx)(G,{control:h.control,name:`min_amount`,render:({field:e})=>(0,Q.jsxs)(W,{children:[(0,Q.jsx)(q,{children:l()}),(0,Q.jsx)(K,{children:(0,Q.jsx)(Y,{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,Q.jsx)(J,{})]})})]}),(0,Q.jsx)(G,{control:h.control,name:`enabled`,render:({field:e})=>(0,Q.jsxs)(W,{className:`flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4 rtl:space-x-reverse`,children:[(0,Q.jsx)(K,{children:(0,Q.jsx)(ke,{checked:e.value,onCheckedChange:t=>e.onChange(!!t)})}),(0,Q.jsx)(`div`,{className:`space-y-1 leading-none`,children:(0,Q.jsx)(q,{children:m()})})]})}),(0,Q.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,Q.jsx)(L,{onClick:()=>t(!1),type:`button`,variant:`outline`,children:pe()}),(0,Q.jsx)(L,{disabled:C,type:`submit`,children:C?D():r?_():a()})]})]})})]})})}function dt(e){return[{id:`switch`,header:({column:e})=>(0,Q.jsx)(V,{column:e,title:m()}),cell:({row:t})=>(0,Q.jsx)(Le,{checked:t.original.enabled===!0,onCheckedChange:()=>e(t.original.enabled?`disable`:`enable`,t.original)}),enableSorting:!1,enableHiding:!1,meta:{label:m(),skeleton:`switch`,sticky:`left`,th:{className:I(`rounded-tl-[inherit]`)}}},{accessorKey:`symbol`,header:({column:e})=>(0,Q.jsx)(V,{column:e,title:se()}),cell:({row:e})=>(0,Q.jsx)(`div`,{className:`font-medium`,children:e.original.symbol??`-`}),enableHiding:!1,meta:{label:se(),skeleton:`short`}},{accessorKey:`network`,header:({column:e})=>(0,Q.jsx)(V,{column:e,title:y()}),meta:{label:y(),skeleton:`short`}},{accessorKey:`created_at`,header:({column:e})=>(0,Q.jsx)(V,{column:e,title:g()}),cell:({row:e})=>F(e.original.created_at),meta:{label:g(),skeleton:`date`}},{accessorKey:`updated_at`,header:({column:e})=>(0,Q.jsx)(V,{column:e,title:r()}),cell:({row:e})=>F(e.original.updated_at),meta:{label:r(),skeleton:`date`}},{id:`actions`,enableHiding:!1,meta:{label:i(),skeleton:`action`,sticky:`right`},cell:({row:t})=>(0,Q.jsxs)(Se,{modal:!1,children:[(0,Q.jsx)(ye,{asChild:!0,children:(0,Q.jsxs)(L,{className:`flex h-8 w-8 p-0 data-[state=open]:bg-muted`,variant:`ghost`,children:[(0,Q.jsx)(Ye,{className:`h-4 w-4`}),(0,Q.jsx)(`span`,{className:`sr-only`,children:`Open menu`})]})}),(0,Q.jsxs)(be,{align:`end`,className:`w-40`,children:[(0,Q.jsxs)(R,{onClick:()=>e(`edit`,t.original),children:[d(),(0,Q.jsx)(z,{children:(0,Q.jsx)(Ze,{size:16})})]}),(0,Q.jsx)(xe,{}),(0,Q.jsxs)(R,{onClick:()=>e(`delete`,t.original),variant:`destructive`,children:[o(),(0,Q.jsx)(z,{children:(0,Q.jsx)(et,{size:16})})]})]})]})}]}function ft({data:e,isLoading:t,onAction:n,onRefresh:r}){let[i,a]=(0,Z.useState)([]),[o,s]=(0,Z.useState)(``),[c,l]=(0,Z.useState)([]),[d,f]=(0,Z.useState)({pageIndex:0,pageSize:10}),p=ze({data:e,columns:(0,Z.useMemo)(()=>dt(n),[n]),state:{sorting:i,columnFilters:c,globalFilter:o,pagination:d},onSortingChange:a,onColumnFiltersChange:l,onGlobalFilterChange:s,onPaginationChange:f,globalFilterFn:(e,t,n)=>{let r=String(n).toLowerCase();return(e.original.symbol??``).toLowerCase().includes(r)||(e.original.contract_address??``).toLowerCase().includes(r)},getCoreRowModel:Ue(),getFilteredRowModel:Re(),getPaginationRowModel:Ke(),getSortedRowModel:qe(),getFacetedRowModel:Ve(),getFacetedUniqueValues:Be()});return(0,Z.useEffect)(()=>{let e=p.getPageCount();e>0&&d.pageIndex>e-1&&f(e=>({...e,pageIndex:0}))},[p,d.pageIndex]),(0,Q.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,Q.jsx)(Ge,{onRefresh:r,searchKey:`symbol`,searchPlaceholder:w(),table:p}),(0,Q.jsx)(We,{emptyText:u(),loading:t,table:p}),(0,Q.jsx)(He,{className:`mt-auto`,table:p})]})}var $=new he({chainTokens:[],loading:!1});function pt(e){$.setState(t=>({...t,chainTokens:e}))}function mt(e){$.setState(t=>({...t,loading:e}))}function ht(){let e=M($,e=>e.chainTokens),t=M($,e=>e.loading),n=j.useQuery(`get`,`/admin/api/v1/chain-tokens`);return(0,Z.useEffect)(()=>{mt(n.isLoading)},[n.isLoading]),(0,Z.useEffect)(()=>{n.data?.data&&pt(n.data.data)},[n.data?.data]),{chainTokens:e,loading:t,refetch:n.refetch}}var gt=[`chain-1`,`chain-2`,`chain-3`,`chain-4`,`chain-5`];function _t({active:e,children:t,onClick:n}){return(0,Q.jsx)(`button`,{className:I(`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:n,onKeywordChange:r,selectedPanel:i,onSelect:a,onToggle:o,totalTokens:s,hiddenOnMobile:c}){return(0,Q.jsxs)(`div`,{className:I(`flex w-full flex-col gap-2 sm:w-56 lg:w-72 2xl:w-80`,c&&`hidden sm:flex`),children:[(0,Q.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,Q.jsxs)(`div`,{className:`flex items-center justify-between py-2`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(`h1`,{className:`font-bold text-2xl`,children:fe()}),(0,Q.jsx)(ge,{size:20})]}),(0,Q.jsx)(X,{variant:`secondary`,children:ie({count:String(e.length)})})]}),(0,Q.jsxs)(`div`,{className:`relative block`,children:[(0,Q.jsx)(we,{className:`pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground`}),(0,Q.jsx)(Y,{className:`pl-9`,onChange:e=>r(e.target.value),placeholder:E(),value:n})]})]}),(0,Q.jsxs)(ve,{className:`-mx-3 h-full overflow-auto p-3`,children:[(0,Q.jsx)(_t,{active:i===`overview`,onClick:()=>a(`overview`),children:(0,Q.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`div`,{className:`font-medium`,children:ue()}),(0,Q.jsx)(`div`,{className:`mt-1 text-muted-foreground text-xs`,children:A({chains:String(e.length),tokens:String(s)})})]}),(0,Q.jsx)(_e,{className:`mt-0.5 size-4 text-muted-foreground`})]})}),(0,Q.jsx)(B,{className:`my-1`}),t?gt.map(e=>(0,Q.jsxs)(`div`,{className:`px-3 py-3`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Q.jsx)(P,{className:`h-4 w-24`}),(0,Q.jsx)(P,{className:`h-5 w-9 rounded-full`})]}),(0,Q.jsxs)(`div`,{className:`mt-2 flex items-center justify-between gap-2`,children:[(0,Q.jsx)(P,{className:`h-3 w-28`}),(0,Q.jsx)(P,{className:`h-5 w-12 rounded-full`})]})]},e)):e.map((t,n)=>(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(_t,{active:i===t.network,onClick:()=>a(t.network??`overview`),children:(0,Q.jsx)(`div`,{className:`flex items-start gap-3`,children:(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Q.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Q.jsx)(`div`,{className:`min-w-0`,children:(0,Q.jsx)(`div`,{className:`truncate font-medium`,children:t.display_name})}),(0,Q.jsx)(Le,{checked:t.enabled===!0,onCheckedChange:e=>o(t,e),onClick:e=>e.stopPropagation()})]}),(0,Q.jsxs)(`div`,{className:`mt-1 flex items-center justify-between gap-2`,children:[(0,Q.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:T()}),(0,Q.jsx)(X,{className:`shrink-0 text-xs`,variant:`outline`,children:t.network})]})]})})}),n{let e=d.trim().toLowerCase();return e?t.filter(t=>[t.display_name,t.network].filter(Boolean).some(t=>String(t).toLowerCase().includes(e))):t},[t,d]),D=(0,Z.useMemo)(()=>p===`overview`?i:i.filter(e=>e.network===p),[i,p]);async function O(){await Promise.all([N.invalidateQueries({queryKey:[`get`,`/admin/api/v1/chains`]}),N.invalidateQueries({queryKey:[`get`,`/admin/api/v1/chain-tokens`]})])}function re(e,t){S(e),T(t),v(!0)}async function ie(t,n){t.network&&(await u.mutateAsync({params:{path:{network:t.network}},body:{display_name:t.display_name,enabled:n,min_confirmations:t.min_confirmations,scan_interval_sec:t.scan_interval_sec}}),H.success(de({status:n?ne():e()})),await O())}async function ae(e,t){if(e===`edit`){re(t.network??x,t);return}if(e===`enable`||e===`disable`){if(!t.id)return;await l.mutateAsync({params:{path:{id:t.id}},body:{enabled:e===`enable`}}),H.success(ee()),await O();return}if(e===`delete`){b(!0);return}}let k=h!==null,A=n||a;return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Fe,{fixed:!0}),(0,Q.jsx)(Ne,{fixed:!0,children:(0,Q.jsxs)(`section`,{className:`flex h-full gap-6`,children:[(0,Q.jsx)(vt,{chains:E,hiddenOnMobile:k,isLoading:A,keyword:d,onKeywordChange:f,onSelect:e=>{m(e),g(e)},onToggle:ie,selectedPanel:p,totalTokens:i.length}),(0,Q.jsx)(`div`,{className:I(`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`,k&&`inset-s-0 flex`),children:(0,Q.jsx)(yt,{isLoading:A,onAction:ae,onBack:()=>g(null),onCreate:()=>b(!0),onRefresh:()=>{r(),o()},tokens:D})})]})}),(0,Q.jsx)(ut,{chains:t.filter(e=>!!e.network).map(e=>({network:e.network,display_name:e.display_name})),currentRow:w,defaultNetwork:x,onCreate:async e=>{await s.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=>{v(e),e||(T(null),S(``))},onSuccess:async()=>{H.success(w?te():C()),await O()},onUpdate:async e=>{w?.id&&await c.mutateAsync({params:{path:{id:w.id}},body:{contract_address:e.contract_address||void 0,decimals:e.decimals,min_amount:e.min_amount,enabled:e.enabled}})},open:_}),(0,Q.jsx)(ct,{onOpenChange:b,open:y})]})}var xt=bt;export{xt as component}; \ No newline at end of file diff --git a/src/www/assets/chains-store-Dzu_Y00B.js b/src/www/assets/chains-store-Dzu_Y00B.js new file mode 100644 index 0000000..022073e --- /dev/null +++ b/src/www/assets/chains-store-Dzu_Y00B.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";import{a as n,d as r,u as i}from"./auth-store-BpIS8RMn.js";import{t as a}from"./createLucideIcon-D28ivbfF.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=e(t(),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-gDgbfVXu.js b/src/www/assets/check-gDgbfVXu.js new file mode 100644 index 0000000..fb5c987 --- /dev/null +++ b/src/www/assets/check-gDgbfVXu.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-B_Isethe.js b/src/www/assets/checkbox-B_Isethe.js new file mode 100644 index 0000000..8d5b0a6 --- /dev/null +++ b/src/www/assets/checkbox-B_Isethe.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./dist-15n4mVGL.js";import{d as i,i as a}from"./button-DJA4fnJ8.js";import{i as o,n as s,o as c,t as l}from"./dist-DG5UMlBd.js";import{t as u}from"./dist-Cp1lAGZy.js";import{t as d}from"./dist-CGm-FpWw.js";import{t as f}from"./check-gDgbfVXu.js";var p=t(n(),1),m=e(),h=`Checkbox`,[g,_]=c(h),[v,y]=g(h);function b(e){let{__scopeCheckbox:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:c,onCheckedChange:l,required:u,value:d=`on`,internal_do_not_use_render:f}=e,[g,_]=s({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:c,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},s)=>{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(s,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:o(t,e=>{e.key===`Enter`&&e.preventDefault()}),onClick:o(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)(u,{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:u,disabled:f,name:h,value:g,form:_,bubbleInput:v,setBubbleInput:b}=y(E,e),x=i(n,b),S=d(s),C=l(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:u,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-CdmvZsfI.js b/src/www/assets/chevron-down-CdmvZsfI.js new file mode 100644 index 0000000..67c8f3d --- /dev/null +++ b/src/www/assets/chevron-down-CdmvZsfI.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-iOmAu5Fh.js b/src/www/assets/chevrons-up-down-iOmAu5Fh.js new file mode 100644 index 0000000..9deefc5 --- /dev/null +++ b/src/www/assets/chevrons-up-down-iOmAu5Fh.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-Dh8WOZF0.js b/src/www/assets/circle-check-Dh8WOZF0.js new file mode 100644 index 0000000..d74efde --- /dev/null +++ b/src/www/assets/circle-check-Dh8WOZF0.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-BoF5rDzX.js b/src/www/assets/clock-3-BoF5rDzX.js new file mode 100644 index 0000000..e5bf738 --- /dev/null +++ b/src/www/assets/clock-3-BoF5rDzX.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-DMmjLgiX.js b/src/www/assets/coming-soon-dialog-DMmjLgiX.js new file mode 100644 index 0000000..4bf7c7b --- /dev/null +++ b/src/www/assets/coming-soon-dialog-DMmjLgiX.js @@ -0,0 +1 @@ +import{Ll as e,Rl as t,nu as n,zl as r}from"./messages-BovT1T-w.js";import{d as i,l as a,m as o,p as s,u as c}from"./command-BwVY_kli.js";import{t as l}from"./telescope-67IWjQye.js";var u=n();function d({open:n,onOpenChange:d}){return(0,u.jsx)(a,{onOpenChange:d,open:n,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:r()}),(0,u.jsxs)(i,{children:[t(),(0,u.jsx)(`br`,{}),(0,u.jsx)(`p`,{className:`mt-2 text-center`,children:e()})]})]})})})}export{d as t}; \ No newline at end of file diff --git a/src/www/assets/command-BwVY_kli.js b/src/www/assets/command-BwVY_kli.js new file mode 100644 index 0000000..7752586 --- /dev/null +++ b/src/www/assets/command-BwVY_kli.js @@ -0,0 +1,5 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./dist-15n4mVGL.js";import{c as i,d as a,i as o,t as s,u as c}from"./button-DJA4fnJ8.js";import{a as l,i as u,n as d,o as f}from"./dist-DG5UMlBd.js";import{t as p}from"./dist-Cp1lAGZy.js";import{i as m}from"./dist-BEDXr2LC.js";import{o as h,s as g}from"./dist-BKfJQFVD.js";import{_,g as v,h as y,m as ee}from"./dropdown-menu-CUea1X0A.js";import{t as te}from"./createLucideIcon-D28ivbfF.js";var b=t(n(),1),x=e(),S=`Dialog`,[C,w]=f(S),[T,E]=C(S),D=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=b.useRef(null),c=b.useRef(null),[l,u]=d({prop:r,defaultProp:i??!1,onChange:a,caller:S});return(0,x.jsx)(T,{scope:t,triggerRef:s,contentRef:c,contentId:m(),titleId:m(),descriptionId:m(),open:l,onOpenChange:u,onOpenToggle:b.useCallback(()=>u(e=>!e),[u]),modal:o,children:n})};D.displayName=S;var O=`DialogTrigger`,k=b.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,o=E(O,n),s=a(t,o.triggerRef);return(0,x.jsx)(r.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":o.open,"aria-controls":o.contentId,"data-state":B(o.open),...i,ref:s,onClick:u(e.onClick,o.onOpenToggle)})});k.displayName=O;var A=`DialogPortal`,[j,M]=C(A,{forceMount:void 0}),N=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=E(A,t);return(0,x.jsx)(j,{scope:t,forceMount:n,children:b.Children.map(r,e=>(0,x.jsx)(p,{present:n||a.open,children:(0,x.jsx)(h,{asChild:!0,container:i,children:e})}))})};N.displayName=A;var P=`DialogOverlay`,F=b.forwardRef((e,t)=>{let n=M(P,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=E(P,e.__scopeDialog);return a.modal?(0,x.jsx)(p,{present:r||a.open,children:(0,x.jsx)(L,{...i,ref:t})}):null});F.displayName=P;var I=i(`DialogOverlay.RemoveScroll`),L=b.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=E(P,n);return(0,x.jsx)(y,{as:I,allowPinchZoom:!0,shards:[a.contentRef],children:(0,x.jsx)(r.div,{"data-state":B(a.open),...i,ref:t,style:{pointerEvents:`auto`,...i.style}})})}),R=`DialogContent`,ne=b.forwardRef((e,t)=>{let n=M(R,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=E(R,e.__scopeDialog);return(0,x.jsx)(p,{present:r||a.open,children:a.modal?(0,x.jsx)(re,{...i,ref:t}):(0,x.jsx)(ie,{...i,ref:t})})});ne.displayName=R;var re=b.forwardRef((e,t)=>{let n=E(R,e.__scopeDialog),r=b.useRef(null),i=a(t,n.contentRef,r);return b.useEffect(()=>{let e=r.current;if(e)return ee(e)},[]),(0,x.jsx)(ae,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:u(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:u(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:u(e.onFocusOutside,e=>e.preventDefault())})}),ie=b.forwardRef((e,t)=>{let n=E(R,e.__scopeDialog),r=b.useRef(!1),i=b.useRef(!1);return(0,x.jsx)(ae,{...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()}})}),ae=b.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:o,...s}=e,c=E(R,n),l=b.useRef(null),u=a(t,l);return v(),(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(_,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:o,children:(0,x.jsx)(g,{role:`dialog`,id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":B(c.open),...s,ref:u,onDismiss:()=>c.onOpenChange(!1)})}),(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(me,{titleId:c.titleId}),(0,x.jsx)(ge,{contentRef:l,descriptionId:c.descriptionId})]})]})}),z=`DialogTitle`,oe=b.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=E(z,n);return(0,x.jsx)(r.h2,{id:a.titleId,...i,ref:t})});oe.displayName=z;var se=`DialogDescription`,ce=b.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=E(se,n);return(0,x.jsx)(r.p,{id:a.descriptionId,...i,ref:t})});ce.displayName=se;var le=`DialogClose`,ue=b.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=E(le,n);return(0,x.jsx)(r.button,{type:`button`,...i,ref:t,onClick:u(e.onClick,()=>a.onOpenChange(!1))})});ue.displayName=le;function B(e){return e?`open`:`closed`}var de=`DialogTitleWarning`,[fe,pe]=l(de,{contentName:R,titleName:z,docsSlug:`dialog`}),me=({titleId:e})=>{let t=pe(de),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 b.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},he=`DialogDescriptionWarning`,ge=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${pe(he).contentName}}.`;return b.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},V=D,_e=k,H=N,U=F,W=ne,ve=oe,ye=ce,G=ue,be=te(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),xe=te(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),Se=1,Ce=.9,we=.8,Te=.17,Ee=.1,De=.999,Oe=.9999,ke=.99,Ae=/[\\\/_+.#"@\[\(\{&]/,je=/[\\\/_+.#"@\[\(\{&]/g,Me=/[\s-]/,Ne=/[\s-]/g;function Pe(e,t,n,r,i,a,o){if(a===t.length)return i===e.length?Se:ke;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=Pe(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=Se:Ae.test(e.charAt(l-1))?(d*=we,p=e.slice(i,l-1).match(je),p&&i>0&&(d*=De**+p.length)):Me.test(e.charAt(l-1))?(d*=Ce,m=e.slice(i,l-1).match(Ne),m&&i>0&&(d*=De**+m.length)):(d*=Te,i>0&&(d*=De**+(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=Oe)),(dd&&(d=f*Ee)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function Fe(e){return e.toLowerCase().replace(Ne,` `)}function Ie(e,t,n){return e=n&&n.length>0?`${e+` `+n.join(` `)}`:e,Pe(e,t,Fe(e),Fe(t),0,0,{})}var K=`[cmdk-group=""]`,Le=`[cmdk-group-items=""]`,Re=`[cmdk-group-heading=""]`,ze=`[cmdk-item=""]`,Be=`${ze}:not([aria-disabled="true"])`,Ve=`cmdk-item-select`,q=`data-value`,He=(e,t,n)=>Ie(e,t,n),Ue=b.createContext(void 0),J=()=>b.useContext(Ue),We=b.createContext(void 0),Ge=()=>b.useContext(We),Ke=b.createContext(void 0),qe=b.forwardRef((e,t)=>{let n=Z(()=>({search:``,value:e.value??e.defaultValue??``,selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),i=Z(()=>new Set),a=Z(()=>new Map),o=Z(()=>new Map),s=Z(()=>new Set),c=it(e),{label:l,children:u,value:d,onValueChange:f,filter:p,shouldFilter:h,loop:g,disablePointerSelection:_=!1,vimBindings:v=!0,...y}=e,ee=m(),te=m(),x=m(),S=b.useRef(null),C=ot();X(()=>{if(d!==void 0){let e=d.trim();n.current.value=e,w.emit()}},[d]),X(()=>{C(6,A)},[]);let w=b.useMemo(()=>({subscribe:e=>(s.current.add(e),()=>s.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(ee))==null||i.focus()}if(C(7,()=>{n.current.selectedItemId=j()?.id,w.emit()}),r||C(5,A),c.current?.value!==void 0){let e=t??``;(o=(a=c.current).onValueChange)==null||o.call(a,e);return}}w.emit()}},emit:()=>{s.current.forEach(e=>e())}}),[]),T=b.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:()=>c.current.shouldFilter,label:l||e[`aria-label`],getDisablePointerSelection:()=>c.current.disablePointerSelection,listId:ee,inputId:x,labelId:te,listInnerRef:S}),[]);function E(e,t){let r=c.current?.filter??He;return e?r(e,n.current.search,t):0}function D(){if(!n.current.search||c.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;M().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(Le);t?t.appendChild(e.parentElement===t?e:e.closest(`${Le} > *`)):r.appendChild(e.parentElement===r?e:e.closest(`${Le} > *`))}),t.sort((e,t)=>t[1]-e[1]).forEach(e=>{let t=S.current?.querySelector(`${K}[${q}="${encodeURIComponent(e[0])}"]`);t?.parentElement.appendChild(t)})}function O(){let e=M().find(e=>e.getAttribute(`aria-disabled`)!==`true`)?.getAttribute(q);w.setState(`value`,e||void 0)}function k(){if(!n.current.search||c.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(K)?.querySelector(Re))==null||e.scrollIntoView({block:`nearest`})),t.scrollIntoView({block:`nearest`}))}function j(){return S.current?.querySelector(`${ze}[aria-selected="true"]`)}function M(){return Array.from(S.current?.querySelectorAll(Be)||[])}function N(e){let t=M()[e];t&&w.setState(`value`,t.getAttribute(q))}function P(e){var t;let n=j(),r=M(),i=r.findIndex(e=>e===n),a=r[i+e];(t=c.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(q))}function F(e){let t=j()?.closest(K),n;for(;t&&!n;)t=e>0?nt(t,K):rt(t,K),n=t?.querySelector(Be);n?w.setState(`value`,n.getAttribute(q)):P(e)}let I=()=>N(M().length-1),L=e=>{e.preventDefault(),e.metaKey?I():e.altKey?F(1):P(1)},R=e=>{e.preventDefault(),e.metaKey?N(0):e.altKey?F(-1):P(-1)};return b.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&&L(e);break;case`ArrowDown`:L(e);break;case`p`:case`k`:v&&e.ctrlKey&&R(e);break;case`ArrowUp`:R(e);break;case`Home`:e.preventDefault(),N(0);break;case`End`:e.preventDefault(),I();break;case`Enter`:{e.preventDefault();let t=j();if(t){let e=new Event(Ve);t.dispatchEvent(e)}}}}},b.createElement(`label`,{"cmdk-label":``,htmlFor:T.inputId,id:T.labelId,style:ct},l),$(e,e=>b.createElement(We.Provider,{value:w},b.createElement(Ue.Provider,{value:T},e))))}),Je=b.forwardRef((e,t)=>{let n=m(),i=b.useRef(null),a=b.useContext(Ke),o=J(),s=it(e),l=s.current?.forceMount??a?.forceMount;X(()=>{if(!l)return o.item(n,a?.id)},[l]);let u=at(n,i,[e.value,e.children,i],e.keywords),d=Ge(),f=Q(e=>e.value&&e.value===u.current),p=Q(e=>l||o.filter()===!1?!0:e.search?e.filtered.items.get(n)>0:!0);b.useEffect(()=>{let t=i.current;if(!(!t||e.disabled))return t.addEventListener(Ve,h),()=>t.removeEventListener(Ve,h)},[p,e.onSelect,e.disabled]);function h(){var e,t;g(),(t=(e=s.current).onSelect)==null||t.call(e,u.current)}function g(){d.setState(`value`,u.current,!0)}if(!p)return null;let{disabled:_,value:v,onSelect:y,forceMount:ee,keywords:te,...x}=e;return b.createElement(r.div,{ref:c(i,t),...x,id:n,"cmdk-item":``,role:`option`,"aria-disabled":!!_,"aria-selected":!!f,"data-disabled":!!_,"data-selected":!!f,onPointerMove:_||o.getDisablePointerSelection()?void 0:g,onClick:_?void 0:h},e.children)}),Ye=b.forwardRef((e,t)=>{let{heading:n,children:i,forceMount:a,...o}=e,s=m(),l=b.useRef(null),u=b.useRef(null),d=m(),f=J(),p=Q(e=>a||f.filter()===!1?!0:e.search?e.filtered.groups.has(s):!0);X(()=>f.group(s),[]),at(s,l,[e.value,e.heading,u]);let h=b.useMemo(()=>({id:s,forceMount:a}),[a]);return b.createElement(r.div,{ref:c(l,t),...o,"cmdk-group":``,role:`presentation`,hidden:p?void 0:!0},n&&b.createElement(`div`,{ref:u,"cmdk-group-heading":``,"aria-hidden":!0,id:d},n),$(e,e=>b.createElement(`div`,{"cmdk-group-items":``,role:`group`,"aria-labelledby":n?d:void 0},b.createElement(Ke.Provider,{value:h},e))))}),Xe=b.forwardRef((e,t)=>{let{alwaysRender:n,...i}=e,a=b.useRef(null),o=Q(e=>!e.search);return!n&&!o?null:b.createElement(r.div,{ref:c(a,t),...i,"cmdk-separator":``,role:`separator`})}),Ze=b.forwardRef((e,t)=>{let{onValueChange:n,...i}=e,a=e.value!=null,o=Ge(),s=Q(e=>e.search),c=Q(e=>e.selectedItemId),l=J();return b.useEffect(()=>{e.value!=null&&o.setState(`search`,e.value)},[e.value]),b.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)}})}),Qe=b.forwardRef((e,t)=>{let{children:n,label:i=`Suggestions`,...a}=e,o=b.useRef(null),s=b.useRef(null),l=Q(e=>e.selectedItemId),u=J();return b.useEffect(()=>{if(s.current&&o.current){let e=s.current,t=o.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)}}},[]),b.createElement(r.div,{ref:c(o,t),...a,"cmdk-list":``,role:`listbox`,tabIndex:-1,"aria-activedescendant":l,"aria-label":i,id:u.listId},$(e,e=>b.createElement(`div`,{ref:c(s,u.listInnerRef),"cmdk-list-sizer":``},e)))}),$e=b.forwardRef((e,t)=>{let{open:n,onOpenChange:r,overlayClassName:i,contentClassName:a,container:o,...s}=e;return b.createElement(V,{open:n,onOpenChange:r},b.createElement(H,{container:o},b.createElement(U,{"cmdk-overlay":``,className:i}),b.createElement(W,{"aria-label":e.label,"cmdk-dialog":``,className:a},b.createElement(qe,{ref:t,...s}))))}),et=b.forwardRef((e,t)=>Q(e=>e.filtered.count===0)?b.createElement(r.div,{ref:t,...e,"cmdk-empty":``,role:`presentation`}):null),tt=b.forwardRef((e,t)=>{let{progress:n,children:i,label:a=`Loading...`,...o}=e;return b.createElement(r.div,{ref:t,...o,"cmdk-loading":``,role:`progressbar`,"aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":a},$(e,e=>b.createElement(`div`,{"aria-hidden":!0},e)))}),Y=Object.assign(qe,{List:Qe,Item:Je,Input:Ze,Group:Ye,Separator:Xe,Dialog:$e,Empty:et,Loading:tt});function nt(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return n;n=n.nextElementSibling}}function rt(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling}}function it(e){let t=b.useRef(e);return X(()=>{t.current=e}),t}var X=typeof window>`u`?b.useEffect:b.useLayoutEffect;function Z(e){let t=b.useRef();return t.current===void 0&&(t.current=e()),t}function Q(e){let t=Ge(),n=()=>e(t.snapshot());return b.useSyncExternalStore(t.subscribe,n,n)}function at(e,t,n,r=[]){let i=b.useRef(),a=J();return X(()=>{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(q,s),i.current=s}),i}var ot=()=>{let[e,t]=b.useState(),n=Z(()=>new Map);return X(()=>{n.current.forEach(e=>e()),n.current=new Map},[e]),(e,r)=>{n.current.set(e,r),t({})}};function st(e){let t=e.type;return typeof t==`function`?t(e.props):`render`in t?t.render(e.props):e}function $({asChild:e,children:t},n){return e&&b.isValidElement(t)?b.cloneElement(st(t),{ref:t.ref},n(t.props.children)):n(t)}var ct={position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,borderWidth:`0`};function lt({...e}){return(0,x.jsx)(V,{"data-slot":`dialog`,...e})}function ut({...e}){return(0,x.jsx)(H,{"data-slot":`dialog-portal`,...e})}function dt({className:e,...t}){return(0,x.jsx)(U,{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":`dialog-overlay`,...t})}function ft({className:e,children:t,showCloseButton:n=!0,...r}){return(0,x.jsxs)(ut,{"data-slot":`dialog-portal`,children:[(0,x.jsx)(dt,{}),(0,x.jsxs)(W,{className:o(`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,x.jsxs)(G,{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,x.jsx)(xe,{}),(0,x.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function pt({className:e,...t}){return(0,x.jsx)(`div`,{className:o(`flex flex-col gap-2 text-center sm:text-left`,e),"data-slot":`dialog-header`,...t})}function mt({className:e,showCloseButton:t=!1,children:n,...r}){return(0,x.jsxs)(`div`,{className:o(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,e),"data-slot":`dialog-footer`,...r,children:[n,t&&(0,x.jsx)(G,{asChild:!0,children:(0,x.jsx)(s,{variant:`outline`,children:`Close`})})]})}function ht({className:e,...t}){return(0,x.jsx)(ve,{className:o(`font-semibold text-lg leading-none`,e),"data-slot":`dialog-title`,...t})}function gt({className:e,...t}){return(0,x.jsx)(ye,{className:o(`text-muted-foreground text-sm`,e),"data-slot":`dialog-description`,...t})}function _t({className:e,...t}){return(0,x.jsx)(Y,{className:o(`flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground`,e),"data-slot":`command`,...t})}function vt({title:e=`Command Palette`,description:t=`Search for a command to run...`,children:n,className:r,showCloseButton:i=!0,...a}){return(0,x.jsxs)(lt,{...a,children:[(0,x.jsxs)(pt,{className:`sr-only`,children:[(0,x.jsx)(ht,{children:e}),(0,x.jsx)(gt,{children:t})]}),(0,x.jsx)(ft,{className:o(`overflow-hidden p-0`,r),showCloseButton:i,children:(0,x.jsx)(_t,{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 yt({className:e,...t}){return(0,x.jsxs)(`div`,{className:`flex h-9 items-center gap-2 border-b px-3`,"data-slot":`command-input-wrapper`,children:[(0,x.jsx)(be,{className:`size-4 shrink-0 opacity-50`}),(0,x.jsx)(Y.Input,{className:o(`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 bt({className:e,...t}){return(0,x.jsx)(Y.List,{className:o(`max-h-[300px] scroll-py-1 overflow-y-auto overflow-x-hidden`,e),"data-slot":`command-list`,...t})}function xt({...e}){return(0,x.jsx)(Y.Empty,{className:`py-6 text-center text-sm`,"data-slot":`command-empty`,...e})}function St({className:e,...t}){return(0,x.jsx)(Y.Group,{className:o(`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 Ct({className:e,...t}){return(0,x.jsx)(Y.Separator,{className:o(`-mx-1 h-px bg-border`,e),"data-slot":`command-separator`,...t})}function wt({className:e,...t}){return(0,x.jsx)(Y.Item,{className:o(`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{ve as C,w as E,V as S,fe as T,G as _,yt as a,U as b,Ct as c,gt as d,mt as f,be as g,xe as h,St as i,lt as l,ht as m,vt as n,wt as o,pt as p,xt as r,bt as s,_t as t,ft as u,W as v,_e as w,H as x,ye as y}; \ No newline at end of file diff --git a/src/www/assets/cookies-BNZcTwGc.js b/src/www/assets/cookies-BNZcTwGc.js new file mode 100644 index 0000000..c7421ec --- /dev/null +++ b/src/www/assets/cookies-BNZcTwGc.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/createLucideIcon-D28ivbfF.js b/src/www/assets/createLucideIcon-D28ivbfF.js new file mode 100644 index 0000000..837d441 --- /dev/null +++ b/src/www/assets/createLucideIcon-D28ivbfF.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";var n=e(t()),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-Clgehcjb.js b/src/www/assets/dashboard-Clgehcjb.js new file mode 100644 index 0000000..90bf3d4 --- /dev/null +++ b/src/www/assets/dashboard-Clgehcjb.js @@ -0,0 +1,42 @@ +import{$c as e,$l as t,$o as n,Ao as r,Bo as i,Co as a,Cs as o,Do as s,Eo as c,Es as l,Fo as u,Go as d,Ho as f,Io as p,Jo as m,Ko as h,Lo as g,Mo as _,No as v,Oo as y,Po as b,Qc as x,Qo as S,Ro as C,Ss as w,To as T,Ts as E,Uo as D,Vo as O,Wo as k,Xo as ee,Yo as te,Zo as A,_s as j,as as ne,au as re,bs as ie,cs as ae,ds as oe,el as se,es as ce,fs as le,gs as ue,hs as de,il as fe,is as pe,iu as M,jo as me,ko as he,ls as ge,ms as _e,nl as ve,ns as ye,nu as be,os as xe,ou as Se,ps as Ce,qo as we,rl as Te,rs as Ee,ru as De,ss as Oe,tl as ke,ts as Ae,us as je,vs as Me,wo as Ne,ws as Pe,xs as Fe,ys as Ie,zo as Le}from"./messages-BovT1T-w.js";import{a as Re}from"./auth-store-BpIS8RMn.js";import{t as ze}from"./with-selector-D_dmjfol.js";import{t as Be}from"./useNavigate-Dg8CkCoa.js";import{r as Ve,t as He}from"./dist-15n4mVGL.js";import{G as Ue,P as We,a as Ge,c as Ke,o as qe,s as Je}from"./search-provider-Cx1K1ilz.js";import{i as N,n as Ye,o as P,r as Xe,t as Ze}from"./button-DJA4fnJ8.js";import{i as Qe,n as $e,o as et}from"./dist-DG5UMlBd.js";import{n as tt,r as nt,t as rt}from"./dist-D21KDGR3.js";import{t as it}from"./dist-Cp1lAGZy.js";import{i as at,r as ot}from"./dist-BEDXr2LC.js";import{c as st,i as ct,o as lt,r as ut,s as dt,t as ft}from"./command-BwVY_kli.js";import{n as pt,r as mt,t as ht}from"./popover-D5q6Hufu.js";import{o as gt,s as _t}from"./select-DcStuzoT.js";import{t as vt}from"./createLucideIcon-D28ivbfF.js";import{a as yt,b as bt,c as xt,i as St,l as Ct,o as wt,s as Tt,u as Et}from"./data-table-CmcvKcj8.js";import{t as Dt}from"./check-gDgbfVXu.js";import{t as Ot}from"./chevron-down-CdmvZsfI.js";import{t as kt}from"./clock-3-BoF5rDzX.js";import{t as At}from"./page-header-BBJ9dE3-.js";import{t as jt}from"./badge-BAmRBT3U.js";import{a as Mt,i as Nt,n as Pt,r as Ft,t as It}from"./card-DuQAN29P.js";var F=Se(De(),1),I=be(),Lt=`Tabs`,[Rt,zt]=et(Lt,[nt]),Bt=nt(),[Vt,Ht]=Rt(Lt),Ut=F.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,onValueChange:i,defaultValue:a,orientation:o=`horizontal`,dir:s,activationMode:c=`automatic`,...l}=e,u=ot(s),[d,f]=$e({prop:r,onChange:i,defaultProp:a??``,caller:Lt});return(0,I.jsx)(Vt,{scope:n,baseId:at(),value:d,onValueChange:f,orientation:o,dir:u,activationMode:c,children:(0,I.jsx)(He.div,{dir:u,"data-orientation":o,...l,ref:t})})});Ut.displayName=Lt;var Wt=`TabsList`,Gt=F.forwardRef((e,t)=>{let{__scopeTabs:n,loop:r=!0,...i}=e,a=Ht(Wt,n),o=Bt(n);return(0,I.jsx)(tt,{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})})});Gt.displayName=Wt;var Kt=`TabsTrigger`,qt=F.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,disabled:i=!1,...a}=e,o=Ht(Kt,n),s=Bt(n),c=Xt(o.baseId,r),l=Zt(o.baseId,r),u=r===o.value;return(0,I.jsx)(rt,{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:Qe(e.onMouseDown,e=>{!i&&e.button===0&&e.ctrlKey===!1?o.onValueChange(r):e.preventDefault()}),onKeyDown:Qe(e.onKeyDown,e=>{[` `,`Enter`].includes(e.key)&&o.onValueChange(r)}),onFocus:Qe(e.onFocus,()=>{let e=o.activationMode!==`manual`;!u&&!i&&e&&o.onValueChange(r)})})})});qt.displayName=Kt;var Jt=`TabsContent`,Yt=F.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,forceMount:i,children:a,...o}=e,s=Ht(Jt,n),c=Xt(s.baseId,r),l=Zt(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)(it,{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})})});Yt.displayName=Jt;function Xt(e,t){return`${e}-trigger-${t}`}function Zt(e,t){return`${e}-content-${t}`}var Qt=Ut,$t=Gt,en=qt,tn=vt(`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`}]]),nn=vt(`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`}]]),rn=vt(`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`}]]),an=vt(`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`}]]),on=vt(`list-filter`,[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]),sn=vt(`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`}]]),cn=vt(`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`}]]),ln=vt(`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`}]]),un=vt(`trending-up`,[[`path`,{d:`M16 7h6v6`,key:`box55l`}],[`path`,{d:`m22 7-8.5 8.5-5-5L2 17`,key:`1t1m79`}]]),dn=365.2425,fn=6048e5,pn=864e5,mn=3600*24;mn*7,mn*dn/12*3;var hn=Symbol.for(`constructDateFrom`);function gn(e,t){return typeof e==`function`?e(t):e&&typeof e==`object`&&hn in e?e[hn](t):e instanceof Date?new e.constructor(t):new Date(t)}function L(e,t){return gn(t||e,e)}function _n(e,t,n){let r=L(e,n?.in);return isNaN(t)?gn(n?.in||e,NaN):(t&&r.setDate(r.getDate()+t),r)}function vn(e,t,n){let r=L(e,n?.in);if(isNaN(t))return gn(n?.in||e,NaN);if(!t)return r;let i=r.getDate(),a=gn(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 yn={};function bn(){return yn}function xn(e,t){let n=bn(),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 wn(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 Tn(e,...t){let n=gn.bind(null,e||t.find(e=>typeof e==`object`));return t.map(n)}function En(e,t){let n=L(e,t?.in);return n.setHours(0,0,0,0),n}function Dn(e,t,n){let[r,i]=Tn(n?.in,e,t),a=En(r),o=En(i),s=+a-wn(a),c=+o-wn(o);return Math.round((s-c)/pn)}function On(e,t){let n=Cn(e,t),r=gn(t?.in||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),Sn(r)}function kn(e,t,n){return _n(e,t*7,n)}function An(e,t,n){return vn(e,t*12,n)}function jn(e,t){let n,r=t?.in;return e.forEach(e=>{!r&&typeof e==`object`&&(r=gn.bind(null,e));let t=L(e,r);(!n||n{!r&&typeof e==`object`&&(r=gn.bind(null,e));let t=L(e,r);(!n||n>t||isNaN(+t))&&(n=t)}),gn(r,n||NaN)}function Nn(e,t,n){let[r,i]=Tn(n?.in,e,t);return+En(r)==+En(i)}function Pn(e){return e instanceof Date||typeof e==`object`&&Object.prototype.toString.call(e)===`[object Date]`}function Fn(e){return!(!Pn(e)&&typeof e!=`number`||isNaN(+L(e)))}function In(e,t,n){let[r,i]=Tn(n?.in,e,t),a=r.getFullYear()-i.getFullYear(),o=r.getMonth()-i.getMonth();return a*12+o}function Ln(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 Rn(e,t){let[n,r]=Tn(e,t.start,t.end);return{start:n,end:r}}function zn(e,t){let{start:n,end:r}=Rn(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(gn(n,o)),o.setMonth(o.getMonth()+s);return i?c.reverse():c}function Bn(e,t){let n=L(e,t?.in);return n.setDate(1),n.setHours(0,0,0,0),n}function Vn(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 Hn(e,t){let n=L(e,t?.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function Un(e,t){let{start:n,end:r}=Rn(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(gn(n,o)),o.setFullYear(o.getFullYear()+s);return i?c.reverse():c}function Wn(e,t){let n=bn(),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=Kn[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 Jn(e){return(t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var Yn={date:Jn({formats:{full:`EEEE, MMMM do, y`,long:`MMMM do, y`,medium:`MMM d, y`,short:`MM/dd/yyyy`},defaultWidth:`full`}),time:Jn({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:Jn({formats:{full:`{{date}} 'at' {{time}}`,long:`{{date}} 'at' {{time}}`,medium:`{{date}}, {{time}}`,short:`{{date}}, {{time}}`},defaultWidth:`full`})},Xn={lastWeek:`'last' eeee 'at' p`,yesterday:`'yesterday at' p`,today:`'today at' p`,tomorrow:`'tomorrow at' p`,nextWeek:`eeee 'at' p`,other:`P`},Zn=(e,t,n,r)=>Xn[e];function Qn(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 $n={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:Qn({values:{narrow:[`B`,`A`],abbreviated:[`BC`,`AD`],wide:[`Before Christ`,`Anno Domini`]},defaultWidth:`wide`}),quarter:Qn({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:Qn({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:Qn({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:Qn({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 er(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)?nr(s,e=>e.test(o)):tr(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 tr(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function nr(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 ir={code:`en-US`,formatDistance:qn,formatLong:Yn,formatRelative:Zn,localize:$n,match:{ordinalNumber:rr({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:er({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:er({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:er({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:er({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:er({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 ar(e,t){let n=L(e,t?.in);return Dn(n,Hn(n))+1}function or(e,t){let n=L(e,t?.in),r=Sn(n)-+On(n);return Math.round(r/fn)+1}function sr(e,t){let n=L(e,t?.in),r=n.getFullYear(),i=bn(),a=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??i.firstWeekContainsDate??i.locale?.options?.firstWeekContainsDate??1,o=gn(t?.in||e,0);o.setFullYear(r+1,0,a),o.setHours(0,0,0,0);let s=xn(o,t),c=gn(t?.in||e,0);c.setFullYear(r,0,a),c.setHours(0,0,0,0);let l=xn(c,t);return+n>=+s?r+1:+n>=+l?r:r-1}function cr(e,t){let n=bn(),r=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,i=sr(e,t),a=gn(t?.in||e,0);return a.setFullYear(i,0,r),a.setHours(0,0,0,0),xn(a,t)}function lr(e,t){let n=L(e,t?.in),r=xn(n,t)-+cr(n,t);return Math.round(r/fn)+1}function R(e,t){return(e<0?`-`:``)+Math.abs(e).toString().padStart(t,`0`)}var ur={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)}},dr={am:`am`,pm:`pm`,midnight:`midnight`,noon:`noon`,morning:`morning`,afternoon:`afternoon`,evening:`evening`,night:`night`},fr={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 ur.y(e,t)},Y:function(e,t,n,r){let i=sr(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(Cn(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 ur.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=lr(e,r);return t===`wo`?n.ordinalNumber(i,{unit:`week`}):R(i,t.length)},I:function(e,t,n){let r=or(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`}):ur.d(e,t)},D:function(e,t,n){let r=ar(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?dr.noon:r===0?dr.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?dr.evening:r>=12?dr.afternoon:r>=4?dr.morning:dr.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 ur.h(e,t)},H:function(e,t,n){return t===`Ho`?n.ordinalNumber(e.getHours(),{unit:`hour`}):ur.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`}):ur.m(e,t)},s:function(e,t,n){return t===`so`?n.ordinalNumber(e.getSeconds(),{unit:`second`}):ur.s(e,t)},S:function(e,t){return ur.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(r===0)return`Z`;switch(t){case`X`:return mr(r);case`XXXX`:case`XX`:return hr(r);default:return hr(r,`:`)}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case`x`:return mr(r);case`xxxx`:case`xx`:return hr(r);default:return hr(r,`:`)}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case`O`:case`OO`:case`OOO`:return`GMT`+pr(r,`:`);default:return`GMT`+hr(r,`:`)}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case`z`:case`zz`:case`zzz`:return`GMT`+pr(r,`:`);default:return`GMT`+hr(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 pr(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 mr(e,t){return e%60==0?(e>0?`-`:`+`)+R(Math.abs(e)/60,2):hr(e,t)}function hr(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 gr=(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`})}},_r=(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`})}},vr={p:_r,P:(e,t)=>{let n=e.match(/(P+)(p+)?/)||[],r=n[1],i=n[2];if(!i)return gr(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}}`,gr(r,t)).replace(`{{time}}`,_r(i,t))}},yr=/^D+$/,br=/^Y+$/,xr=[`D`,`DD`,`YY`,`YYYY`];function Sr(e){return yr.test(e)}function Cr(e){return br.test(e)}function wr(e,t,n){let r=Tr(e,t,n);if(console.warn(r),xr.includes(e))throw RangeError(r)}function Tr(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 Er=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Dr=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Or=/^'([^]*?)'?$/,kr=/''/g,Ar=/[a-zA-Z]/;function jr(e,t,n){let r=bn(),i=n?.locale??r.locale??ir,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(!Fn(s))throw RangeError(`Invalid time value`);let c=t.match(Dr).map(e=>{let t=e[0];if(t===`p`||t===`P`){let n=vr[t];return n(e,i.formatLong)}return e}).join(``).match(Er).map(e=>{if(e===`''`)return{isToken:!1,value:`'`};let t=e[0];if(t===`'`)return{isToken:!1,value:Mr(e)};if(fr[t])return{isToken:!0,value:e};if(t.match(Ar))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&&Cr(a)||!n?.useAdditionalDayOfYearTokens&&Sr(a))&&wr(a,t,String(e));let o=fr[a[0]];return o(s,a,i.localize,l)}).join(``)}function Mr(e){let t=e.match(Or);return t?t[1].replace(kr,`'`):e}function Nr(e,t){let n=L(e,t?.in),r=n.getFullYear(),i=n.getMonth(),a=gn(n,0);return a.setFullYear(r,i+1,0),a.setHours(0,0,0,0),a.getDate()}function Pr(e,t){return L(e,t?.in).getMonth()}function Fr(e,t){return L(e,t?.in).getFullYear()}function Ir(e,t){return+L(e)>+L(t)}function Lr(e,t){return+L(e)<+L(t)}function Rr(e,t,n){let[r,i]=Tn(n?.in,e,t);return+xn(r,n)==+xn(i,n)}function zr(e,t,n){let[r,i]=Tn(n?.in,e,t);return r.getFullYear()===i.getFullYear()&&r.getMonth()===i.getMonth()}function Br(e,t,n){let[r,i]=Tn(n?.in,e,t);return r.getFullYear()===i.getFullYear()}function Vr(e,t,n){return _n(e,-t,n)}function Hr(e,t,n){let r=L(e,n?.in),i=r.getFullYear(),a=r.getDate(),o=gn(n?.in||e,0);o.setFullYear(i,t,15),o.setHours(0,0,0,0);let s=Nr(o);return r.setMonth(t,Math.min(a,s)),r}function Ur(e,t,n){let r=L(e,n?.in);return isNaN(+r)?gn(n?.in||e,NaN):(r.setFullYear(t),r)}function Wr(e,t,n){return vn(e,-t,n)}var Gr={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}} 年`}},Kr=(e,t,n)=>{let r,i=Gr[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},qr={date:Jn({formats:{full:`y'年'M'月'd'日' EEEE`,long:`y'年'M'月'd'日'`,medium:`yyyy-MM-dd`,short:`yy-MM-dd`},defaultWidth:`full`}),time:Jn({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:Jn({formats:{full:`{{date}} {{time}}`,long:`{{date}} {{time}}`,medium:`{{date}} {{time}}`,short:`{{date}} {{time}}`},defaultWidth:`full`})};function Jr(e,t,n){let r=`eeee p`;return Rr(e,t,n)?r:e.getTime()>t.getTime()?`'下个'`+r:`'上个'`+r}var Yr={lastWeek:Jr,yesterday:`'昨天' p`,today:`'今天' p`,tomorrow:`'明天' p`,nextWeek:Jr,other:`PP p`},Xr={code:`zh-CN`,formatDistance:Kr,formatLong:qr,formatRelative:(e,t,n,r)=>{let i=Yr[e];return typeof i==`function`?i(t,n,r):i},localize:{ordinalNumber:(e,t)=>{let n=Number(e);switch(t?.unit){case`date`:return n.toString()+`日`;case`hour`:return n.toString()+`时`;case`minute`:return n.toString()+`分`;case`second`:return n.toString()+`秒`;default:return`第 `+n.toString()}},era:Qn({values:{narrow:[`前`,`公元`],abbreviated:[`前`,`公元`],wide:[`公元前`,`公元`]},defaultWidth:`wide`}),quarter:Qn({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`第一季`,`第二季`,`第三季`,`第四季`],wide:[`第一季度`,`第二季度`,`第三季度`,`第四季度`]},defaultWidth:`wide`,argumentCallback:e=>e-1}),month:Qn({values:{narrow:[`一`,`二`,`三`,`四`,`五`,`六`,`七`,`八`,`九`,`十`,`十一`,`十二`],abbreviated:[`1月`,`2月`,`3月`,`4月`,`5月`,`6月`,`7月`,`8月`,`9月`,`10月`,`11月`,`12月`],wide:[`一月`,`二月`,`三月`,`四月`,`五月`,`六月`,`七月`,`八月`,`九月`,`十月`,`十一月`,`十二月`]},defaultWidth:`wide`}),day:Qn({values:{narrow:[`日`,`一`,`二`,`三`,`四`,`五`,`六`],short:[`日`,`一`,`二`,`三`,`四`,`五`,`六`],abbreviated:[`周日`,`周一`,`周二`,`周三`,`周四`,`周五`,`周六`],wide:[`星期日`,`星期一`,`星期二`,`星期三`,`星期四`,`星期五`,`星期六`]},defaultWidth:`wide`}),dayPeriod:Qn({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:rr({matchPattern:/^(第\s*)?\d+(日|时|分|秒)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:er({matchPatterns:{narrow:/^(前)/i,abbreviated:/^(前)/i,wide:/^(公元前|公元)/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/^(前)/i,/^(公元)/i]},defaultParseWidth:`any`}),quarter:er({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:er({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:er({matchPatterns:{narrow:/^[一二三四五六日]/i,short:/^[一二三四五六日]/i,abbreviated:/^周[一二三四五六日]/i,wide:/^星期[一二三四五六日]/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/日/i,/一/i,/二/i,/三/i,/四/i,/五/i,/六/i]},defaultParseWidth:`any`}),dayPeriod:er({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 Zr(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 Qr={},$r={};function ei(e,t){try{let n=(Qr[e]||=new Intl.DateTimeFormat(`en-US`,{timeZone:e,timeZoneName:`longOffset`}).format)(t).split(`GMT`)[1];return n in $r?$r[n]:ni(n,n.split(`:`))}catch{if(e in $r)return $r[e];let t=e?.match(ti);return t?ni(e,t.slice(1)):NaN}}var ti=/([+-]\d\d):?(\d\d)?/;function ni(e,t){let n=+(t[0]||0),r=+(t[1]||0),i=(t[2]||0)/60;return $r[e]=n*60+r>0?n*60+r+i:n*60-r-i}var ri=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(ei(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)),si(this,NaN),ai(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=-ei(this.timeZone,this);return e>0?Math.floor(e):Math.ceil(e)}setTime(e){return Date.prototype.setTime.apply(this,arguments),ai(this),+this}[Symbol.for(`constructDateFrom`)](t){return new e(+new Date(t),this.timeZone)}},ii=/^(get|set)(?!UTC)/;Object.getOwnPropertyNames(Date.prototype).forEach(e=>{if(!ii.test(e))return;let t=e.replace(ii,`$1UTC`);ri.prototype[t]&&(e.startsWith(`get`)?ri.prototype[e]=function(){return this.internal[t]()}:(ri.prototype[e]=function(){return Date.prototype[t].apply(this.internal,arguments),oi(this),+this},ri.prototype[t]=function(){return Date.prototype[t].apply(this,arguments),ai(this),+this}))});function ai(e){e.internal.setTime(+e),e.internal.setUTCSeconds(e.internal.getUTCSeconds()-Math.round(-ei(e.timeZone,e)*60))}function oi(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()),si(e)}function si(e){let t=ei(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(-(ei(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=ei(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=ei(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 ci=class e extends ri{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} (${Zr(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)}},li=5,ui=4;function di(e,t){let n=t.startOfMonth(e),r=n.getDay()>0?n.getDay():7,i=t.addDays(e,-r+1),a=t.addDays(i,li*7-1);return t.getMonth(e)===t.getMonth(a)?li:ui}function fi(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 pi(e,t){let n=fi(e,t),r=di(e,t);return t.addDays(n,r*7-1)}var mi={...ir,labels:{labelDayButton:(e,t,n,r)=>{let i;i=r&&typeof r.format==`function`?r.format.bind(r):(e,t)=>jr(e,t,{locale:ir,...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)=>jr(e,n,{locale:ir,...t}),r(e,`LLLL yyyy`)},labelGridcell:(e,t,n,r)=>{let i;i=r&&typeof r.format==`function`?r.format.bind(r):(e,t)=>jr(e,t,{locale:ir,...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)=>jr(e,n,{locale:ir,...t}),r(e,`cccc`)}}},hi=class e{constructor(e,t){this.Date=Date,this.today=()=>this.overrides?.today?this.overrides.today():this.options.timeZone?ci.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 ci(e,t,n,this.options.timeZone):new Date(e,t,n),this.addDays=(e,t)=>this.overrides?.addDays?this.overrides.addDays(e,t):_n(e,t),this.addMonths=(e,t)=>this.overrides?.addMonths?this.overrides.addMonths(e,t):vn(e,t),this.addWeeks=(e,t)=>this.overrides?.addWeeks?this.overrides.addWeeks(e,t):kn(e,t),this.addYears=(e,t)=>this.overrides?.addYears?this.overrides.addYears(e,t):An(e,t),this.differenceInCalendarDays=(e,t)=>this.overrides?.differenceInCalendarDays?this.overrides.differenceInCalendarDays(e,t):Dn(e,t),this.differenceInCalendarMonths=(e,t)=>this.overrides?.differenceInCalendarMonths?this.overrides.differenceInCalendarMonths(e,t):In(e,t),this.eachMonthOfInterval=e=>this.overrides?.eachMonthOfInterval?this.overrides.eachMonthOfInterval(e):zn(e),this.eachYearOfInterval=e=>{let t=this.overrides?.eachYearOfInterval?this.overrides.eachYearOfInterval(e):Un(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):pi(e,this),this.endOfISOWeek=e=>this.overrides?.endOfISOWeek?this.overrides.endOfISOWeek(e):Gn(e),this.endOfMonth=e=>this.overrides?.endOfMonth?this.overrides.endOfMonth(e):Ln(e),this.endOfWeek=(e,t)=>this.overrides?.endOfWeek?this.overrides.endOfWeek(e,t):Wn(e,this.options),this.endOfYear=e=>this.overrides?.endOfYear?this.overrides.endOfYear(e):Vn(e),this.format=(e,t,n)=>{let r=this.overrides?.format?this.overrides.format(e,t,this.options):jr(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):or(e),this.getMonth=(e,t)=>this.overrides?.getMonth?this.overrides.getMonth(e,this.options):Pr(e,this.options),this.getYear=(e,t)=>this.overrides?.getYear?this.overrides.getYear(e,this.options):Fr(e,this.options),this.getWeek=(e,t)=>this.overrides?.getWeek?this.overrides.getWeek(e,this.options):lr(e,this.options),this.isAfter=(e,t)=>this.overrides?.isAfter?this.overrides.isAfter(e,t):Ir(e,t),this.isBefore=(e,t)=>this.overrides?.isBefore?this.overrides.isBefore(e,t):Lr(e,t),this.isDate=e=>this.overrides?.isDate?this.overrides.isDate(e):Pn(e),this.isSameDay=(e,t)=>this.overrides?.isSameDay?this.overrides.isSameDay(e,t):Nn(e,t),this.isSameMonth=(e,t)=>this.overrides?.isSameMonth?this.overrides.isSameMonth(e,t):zr(e,t),this.isSameYear=(e,t)=>this.overrides?.isSameYear?this.overrides.isSameYear(e,t):Br(e,t),this.max=e=>this.overrides?.max?this.overrides.max(e):jn(e),this.min=e=>this.overrides?.min?this.overrides.min(e):Mn(e),this.setMonth=(e,t)=>this.overrides?.setMonth?this.overrides.setMonth(e,t):Hr(e,t),this.setYear=(e,t)=>this.overrides?.setYear?this.overrides.setYear(e,t):Ur(e,t),this.startOfBroadcastWeek=(e,t)=>this.overrides?.startOfBroadcastWeek?this.overrides.startOfBroadcastWeek(e,this):fi(e,this),this.startOfDay=e=>this.overrides?.startOfDay?this.overrides.startOfDay(e):En(e),this.startOfISOWeek=e=>this.overrides?.startOfISOWeek?this.overrides.startOfISOWeek(e):Sn(e),this.startOfMonth=e=>this.overrides?.startOfMonth?this.overrides.startOfMonth(e):Bn(e),this.startOfWeek=(e,t)=>this.overrides?.startOfWeek?this.overrides.startOfWeek(e,this.options):xn(e,this.options),this.startOfYear=e=>this.overrides?.startOfYear?this.overrides.startOfYear(e):Hn(e),this.options={locale:mi,...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)}};hi.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 gi=new hi,_i=class{constructor(e,t,n=gi){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)}},vi=class{constructor(e,t){this.date=e,this.weeks=t}},yi=class{constructor(e,t){this.days=t,this.weekNumber=e}};function bi(e){return F.createElement(`button`,{...e})}function xi(e){return F.createElement(`span`,{...e})}function Si(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 Ci(e){let{day:t,modifiers:n,...r}=e;return F.createElement(`td`,{...r})}function wi(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 Ti;(function(e){e.disabled=`disabled`,e.hidden=`hidden`,e.outside=`outside`,e.focused=`focused`,e.today=`today`})(Ti||={});var Ei;(function(e){e.range_end=`range_end`,e.range_middle=`range_middle`,e.range_start=`range_start`,e.selected=`selected`})(Ei||={});var Di;(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`})(Di||={});function Oi(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 ki(e){return F.createElement(`div`,{...e})}function Ai(e){return F.createElement(`div`,{...e})}function ji(e){let{calendarMonth:t,displayIndex:n,...r}=e;return F.createElement(`div`,{...r},e.children)}function Mi(e){let{calendarMonth:t,displayIndex:n,...r}=e;return F.createElement(`div`,{...r})}function Ni(e){return F.createElement(`table`,{...e})}function Pi(e){return F.createElement(`div`,{...e})}var Fi=(0,F.createContext)(void 0);function Ii(){let e=(0,F.useContext)(Fi);if(e===void 0)throw Error(`useDayPicker() must be used within a custom component.`);return e}function Li(e){let{components:t}=Ii();return F.createElement(t.Dropdown,{...e})}function Ri(e){let{onPreviousClick:t,onNextClick:n,previousMonth:r,nextMonth:i,...a}=e,{components:o,classNames:s,labels:{labelPrevious:c,labelNext:l}}=Ii(),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 zi(e){let{components:t}=Ii();return F.createElement(t.Button,{...e})}function Bi(e){return F.createElement(`option`,{...e})}function Vi(e){let{components:t}=Ii();return F.createElement(t.Button,{...e})}function Hi(e){let{rootRef:t,...n}=e;return F.createElement(`div`,{...n,ref:t})}function Ui(e){return F.createElement(`select`,{...e})}function Wi(e){let{week:t,...n}=e;return F.createElement(`tr`,{...n})}function Gi(e){return F.createElement(`th`,{...e})}function Ki(e){return F.createElement(`thead`,{"aria-hidden":!0},F.createElement(`tr`,{...e}))}function qi(e){let{week:t,...n}=e;return F.createElement(`th`,{...n})}function Ji(e){return F.createElement(`th`,{...e})}function Yi(e){return F.createElement(`tbody`,{...e})}function Xi(e){let{components:t}=Ii();return F.createElement(t.Dropdown,{...e})}var Zi=re({Button:()=>bi,CaptionLabel:()=>xi,Chevron:()=>Si,Day:()=>Ci,DayButton:()=>wi,Dropdown:()=>Oi,DropdownNav:()=>ki,Footer:()=>Ai,Month:()=>ji,MonthCaption:()=>Mi,MonthGrid:()=>Ni,Months:()=>Pi,MonthsDropdown:()=>Li,Nav:()=>Ri,NextMonthButton:()=>zi,Option:()=>Bi,PreviousMonthButton:()=>Vi,Root:()=>Hi,Select:()=>Ui,Week:()=>Wi,WeekNumber:()=>qi,WeekNumberHeader:()=>Ji,Weekday:()=>Gi,Weekdays:()=>Ki,Weeks:()=>Yi,YearsDropdown:()=>Xi});function Qi(e,t,n=!1,r=gi){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 $i(e){return!!(e&&typeof e==`object`&&`before`in e&&`after`in e)}function ea(e){return!!(e&&typeof e==`object`&&`from`in e)}function ta(e){return!!(e&&typeof e==`object`&&`after`in e)}function na(e){return!!(e&&typeof e==`object`&&`before`in e)}function ra(e){return!!(e&&typeof e==`object`&&`dayOfWeek`in e)}function ia(e,t){return Array.isArray(e)&&e.every(t.isDate)}function aa(e,t,n=gi){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(ia(t,n))return t.some(t=>i(e,t));if(ea(t))return Qi(t,e,!1,n);if(ra(t))return Array.isArray(t.dayOfWeek)?t.dayOfWeek.includes(e.getDay()):t.dayOfWeek===e.getDay();if($i(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 ta(t)?a(e,t.after)>0:na(t)?a(t.before,e)>0:typeof t==`function`?t(e):!1})}function oa(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={[Ti.focused]:[],[Ti.outside]:[],[Ti.disabled]:[],[Ti.hidden]:[],[Ti.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&&aa(e,a,i)),S=!!(o&&aa(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&&aa(e,r,i)&&(b[n]?b[n].push(t):b[n]=[t])})}return e=>{let t={[Ti.focused]:!1,[Ti.disabled]:!1,[Ti.hidden]:!1,[Ti.outside]:!1,[Ti.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 sa(e,t,n={}){return Object.entries(e).filter(([,e])=>e===!0).reduce((e,[r])=>(n[r]?e.push(n[r]):t[Ti[r]]?e.push(t[Ti[r]]):t[Ei[r]]&&e.push(t[Ei[r]]),e),[t[z.Day]])}function ca(e){return{...Zi,...e}}function la(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 ua(){let e={};for(let t in z)e[z[t]]=`rdp-${z[t]}`;for(let t in Ti)e[Ti[t]]=`rdp-${Ti[t]}`;for(let t in Ei)e[Ei[t]]=`rdp-${Ei[t]}`;for(let t in Di)e[Di[t]]=`rdp-${Di[t]}`;return e}function da(e,t,n){return(n??new hi(t)).formatMonthYear(e)}var fa=da;function pa(e,t,n){return(n??new hi(t)).format(e,`d`)}function ma(e,t=gi){return t.format(e,`LLLL`)}function ha(e,t,n){return(n??new hi(t)).format(e,`cccccc`)}function ga(e,t=gi){return e<10?t.formatNumber(`0${e.toLocaleString()}`):t.formatNumber(`${e.toLocaleString()}`)}function _a(){return``}function va(e,t=gi){return t.format(e,`yyyy`)}var ya=va,ba=re({formatCaption:()=>da,formatDay:()=>pa,formatMonthCaption:()=>fa,formatMonthDropdown:()=>ma,formatWeekNumber:()=>ga,formatWeekNumberHeader:()=>_a,formatWeekdayName:()=>ha,formatYearCaption:()=>ya,formatYearDropdown:()=>va});function xa(e){return e?.formatMonthCaption&&!e.formatCaption&&(e.formatCaption=e.formatMonthCaption),e?.formatYearCaption&&!e.formatYearDropdown&&(e.formatYearDropdown=e.formatYearCaption),{...ba,...e}}function Sa(e,t,n,r){let i=(r??new hi(n)).format(e,`PPPP`);return t.today&&(i=`Today, ${i}`),t.selected&&(i=`${i}, selected`),i}var Ca=Sa;function wa(e,t,n){return(n??new hi(t)).formatMonthYear(e)}var Ta=wa;function Ea(e,t,n,r){let i=(r??new hi(n)).format(e,`PPPP`);return t?.today&&(i=`Today, ${i}`),i}function Da(e){return`Choose the Month`}function Oa(){return``}var ka=`Go to the Next Month`;function Aa(e,t){return ka}function ja(e){return`Go to the Previous Month`}function Ma(e,t,n){return(n??new hi(t)).format(e,`cccc`)}function Na(e,t){return`Week ${e}`}function Pa(e){return`Week Number`}function Fa(e){return`Choose the Year`}var Ia=re({labelCaption:()=>Ta,labelDay:()=>Ca,labelDayButton:()=>Sa,labelGrid:()=>wa,labelGridcell:()=>Ea,labelMonthDropdown:()=>Da,labelNav:()=>Oa,labelNext:()=>Aa,labelPrevious:()=>ja,labelWeekNumber:()=>Na,labelWeekNumberHeader:()=>Pa,labelWeekday:()=>Ma,labelYearDropdown:()=>Fa}),La=(e,t,n)=>t||(n?typeof n==`function`?n:(...e)=>n:e);function Ra(e,t){let n=t.locale?.labels??{};return{...Ia,...e??{},labelDayButton:La(Sa,e?.labelDayButton,n.labelDayButton),labelMonthDropdown:La(Da,e?.labelMonthDropdown,n.labelMonthDropdown),labelNext:La(Aa,e?.labelNext,n.labelNext),labelPrevious:La(ja,e?.labelPrevious,n.labelPrevious),labelWeekNumber:La(Na,e?.labelWeekNumber,n.labelWeekNumber),labelYearDropdown:La(Fa,e?.labelYearDropdown,n.labelYearDropdown),labelGrid:La(wa,e?.labelGrid,n.labelGrid),labelGridcell:La(Ea,e?.labelGridcell,n.labelGridcell),labelNav:La(Oa,e?.labelNav,n.labelNav),labelWeekNumberHeader:La(Pa,e?.labelWeekNumberHeader,n.labelWeekNumberHeader),labelWeekday:La(Ma,e?.labelWeekday,n.labelWeekday)}}function za(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 Ba(e,t={},n={}){let r={...t?.[z.Day]};return Object.entries(e).filter(([,e])=>e===!0).forEach(([e])=>{r={...r,...n?.[e]}}),r}function Va(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 Ha(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 Ua(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 ci(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(ci.tz(e)),newDate:(t,n,r)=>new ci(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 ci(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 ci(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 ci(n.getFullYear(),0,1,12,0,0,e);for(;o.getFullYear()<=r.getFullYear();)i.push(new ci(o,e)),o.setFullYear(o.getFullYear()+1,0,1);return i},getWeek:(e,t)=>lr(o(e),{weekStartsOn:t?.weekStartsOn??i,firstWeekContainsDate:t?.firstWeekContainsDate??r?.options?.firstWeekContainsDate??1}),getISOWeek:e=>or(o(e)),differenceInCalendarDays:(e,t)=>Dn(o(e),o(t)),differenceInCalendarMonths:(e,t)=>In(o(e),o(t))}}var Wa=e=>e instanceof HTMLElement?e:null,Ga=e=>[...e.querySelectorAll(`[data-animated-month]`)??[]],Ka=e=>Wa(e.querySelector(`[data-animated-month]`)),qa=e=>Wa(e.querySelector(`[data-animated-caption]`)),Ja=e=>Wa(e.querySelector(`[data-animated-weeks]`)),Ya=e=>Wa(e.querySelector(`[data-animated-nav]`)),Xa=e=>Wa(e.querySelector(`[data-animated-weekdays]`));function Za(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[Di.caption_after_enter]:n[Di.caption_before_enter],p=d?n[Di.weeks_after_enter]:n[Di.weeks_before_enter],m=o.current,h=e.current.cloneNode(!0);if(h instanceof HTMLElement?(Ga(h).forEach(e=>{if(!(e instanceof HTMLElement))return;let t=Ka(e);t&&e.contains(t)&&e.removeChild(t);let n=qa(e);n&&n.classList.remove(f);let r=Ja(e);r&&r.classList.remove(p)}),o.current=h):o.current=null,c.current||u||i)return;let g=m instanceof HTMLElement?Ga(m):[],_=Ga(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=Ya(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=qa(i);s&&s.classList.add(f);let l=Ja(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=Xa(o);m&&(m.style.opacity=`0`);let h=qa(o);h&&(h.classList.add(d?n[Di.caption_before_exit]:n[Di.caption_after_exit]),h.addEventListener(`animationend`,u));let _=Ja(o);_&&_.classList.add(d?n[Di.weeks_before_exit]:n[Di.weeks_after_exit]),i.insertBefore(o,i.firstChild)})}})}function Qa(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 eo(e,t,n,r){let{numberOfMonths:i=1}=n,a=[];for(let n=0;nt)break;a.push(i)}return a}function to(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 vi(m,_.reduce((e,t)=>{let i=n.ISOWeek?l(t):u(t),a=e.find(e=>e.weekNumber===i),o=new _i(t,m,r);return a?a.days.push(o):e.push(new yi(i,[o])),e},[]));return e.push(y),e},[]);return n.reverseMonths?m.reverse():m}function ro(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 io(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 so(e,t){let[n,r]=(0,F.useState)(e);return[t===void 0?n:t,r]}function co(e,t){let[n,r]=ro(e,t),{startOfMonth:i,endOfMonth:a}=t,o=to(e,n,r,t),[s,c]=so(o,e.month?o:void 0);(0,F.useEffect)(()=>{c(to(e,n,r,t))},[e.timeZone]);let{months:l,weeks:u,days:d,previousMonth:f,nextMonth:p}=(0,F.useMemo)(()=>{let i=eo(s,r,{numberOfMonths:e.numberOfMonths},t),o=no(i,Qa(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:oo(o),days:$a(o),previousMonth:ao(s,n,e,t),nextMonth:io(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 lo;(function(e){e[e.Today=0]=`Today`,e[e.Selected=1]=`Selected`,e[e.LastFocused=2]=`LastFocused`,e[e.FocusedModifier=3]=`FocusedModifier`})(lo||={});function uo(e){return!e[Ti.disabled]&&!e[Ti.hidden]&&!e[Ti.outside]}function fo(e,t,n,r){let i,a=-1;for(let o of e){let e=t(o);uo(e)&&(e[Ti.focused]&&auo(t(e))),i}function po(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 mo(e,t,n,r,i,a,o,s=0){if(s>365)return;let c=po(e,t,n.date,r,i,a,o),l=!!(a.disabled&&aa(c,a.disabled,o)),u=!!(a.hidden&&aa(c,a.hidden,o)),d=new _i(c,c,o);return!l&&!u?d:mo(e,t,d,r,i,a,o,s+1)}function ho(e,t,n,r,i){let{autoFocus:a}=e,[o,s]=(0,F.useState)(),c=fo(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=mo(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 go(e,t){let{selected:n,required:r,onSelect:i}=e,[a,o]=so(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 _o(e,t,n=0,r=0,i=!1,a=gi){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)?Qi(e,t,!1,n):ia(t,n)?t.some(t=>Qi(e,t,!1,n)):ea(t)?t.from&&t.to?yo(e,{from:t.from,to:t.to},n):!1:ra(t)?vo(e,t.dayOfWeek,n):$i(t)?n.isAfter(t.before,t.after)?yo(e,{from:n.addDays(t.after,1),to:n.addDays(t.before,-1)},n):aa(e.from,t,n)||aa(e.to,t,n):ta(t)||na(t)?aa(e.from,t,n)||aa(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 xo(e,t){let{disabled:n,excludeDisabled:r,resetOnSelect:i,selected:a,required:o,onSelect:s}=e,[c,l]=so(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}:_o(a,u,f,p,o,t)}return r&&n&&m?.from&&m.to&&bo({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&&Qi(u,e,!1,t)}}function So(e,t){let{selected:n,required:r,onSelect:i}=e,[a,o]=so(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 Co(e,t){let n=So(e,t),r=go(e,t),i=xo(e,t);switch(e.mode){case`single`:return n;case`multiple`:return r;case`range`:return i;default:return}}function wo(e,t){return e instanceof ci&&e.timeZone===t?e:new ci(e,t)}function To(e,t,n){if(!n)return wo(e,t);let r=wo(e,t),i=new ci(r.getFullYear(),r.getMonth(),r.getDate(),12,0,0,t);return new Date(i.getTime())}function Eo(e,t,n){return typeof e==`boolean`||typeof e==`function`?e:e instanceof Date?To(e,t,n):Array.isArray(e)?e.map(e=>e instanceof Date?To(e,t,n):e):ea(e)?{...e,from:e.from?wo(e.from,t):e.from,to:e.to?wo(e.to,t):e.to}:$i(e)?{before:To(e.before,t,n),after:To(e.after,t,n)}:ta(e)?{after:To(e.after,t,n)}:na(e)?{before:To(e.before,t,n)}:e}function Do(e,t,n){return e&&(Array.isArray(e)?e.map(e=>Eo(e,t,n)):Eo(e,t,n))}function Oo(e){let t=e,n=t.timeZone;if(n&&(t={...e,timeZone:n},t.today&&=wo(t.today,n),t.month&&=wo(t.month,n),t.defaultMonth&&=wo(t.defaultMonth,n),t.startMonth&&=wo(t.startMonth,n),t.endMonth&&=wo(t.endMonth,n),t.mode===`single`&&t.selected?t.selected=wo(t.selected,n):t.mode===`multiple`&&t.selected?t.selected=t.selected?.map(e=>wo(e,n)):t.mode===`range`&&t.selected&&(t.selected={from:t.selected.from?wo(t.selected.from,n):t.selected.from,to:t.selected.to?wo(t.selected.to,n):t.selected.to}),t.disabled!==void 0&&(t.disabled=Do(t.disabled,n)),t.hidden!==void 0&&(t.hidden=Do(t.hidden,n)),t.modifiers)){let e={};Object.keys(t.modifiers).forEach(r=>{e[r]=Do(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={...mi,...t.locale},n=t.broadcastCalendar?1:t.weekStartsOn,r=t.noonSafe&&t.timeZone?Ua(t.timeZone,{weekStartsOn:n,locale:e}):void 0,i=t.dateLib&&r?{...r,...t.dateLib}:t.dateLib??r,a=new hi({locale:e,weekStartsOn:n,firstWeekContainsDate:t.firstWeekContainsDate,useAdditionalWeekYearTokens:t.useAdditionalWeekYearTokens,useAdditionalDayOfYearTokens:t.useAdditionalDayOfYearTokens,timeZone:t.timeZone,numerals:t.numerals},i);return{dateLib:a,components:ca(t.components),formatters:xa(t.formatters),labels:Ra(t.labels,a.options),locale:e,classNames:{...ua(),...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=co(t,o),{days:te,months:A,navStart:j,navEnd:ne,previousMonth:re,nextMonth:ie,goToMonth:ae}=ee,oe=oa(te,t,j,ne,o),{isSelected:se,select:ce,selected:le}=Co(t,o)??{},{blur:ue,focused:de,isFocusTarget:fe,moveFocus:pe,setFocused:M}=ho(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)(()=>Va(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(),M(e),!t.disabled&&(ce?.(e.date,t,n),m?.(e.date,t,n))},[ce,m,M]),Ae=(0,F.useCallback)((e,t)=>n=>{M(e),h?.(e.date,t,n)},[h,M]),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];pe(e,t)}g?.(e.date,n,r)},[pe,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=la(t),Be=(0,F.useRef)(null);Za(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(Fi.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:za(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:Ha(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[Ti.focused]=!i.hidden&&!!de?.isEqualTo(e),i[Ei.selected]=se?.(n)||i.selected,ea(le)){let{from:e,to:t}=le;i[Ei.range_start]=!!(e&&t&&o.isSameDay(n,e)),i[Ei.range_end]=!!(e&&t&&o.isSameDay(n,t)),i[Ei.range_middle]=Qi(le,n,!0,o)}let a=Ba(i,S,t.modifiersStyles),s=sa(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:fe(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 ko({className:e,classNames:t,showOutsideDays:n=!0,captionLayout:r=`label`,buttonVariant:i=`ghost`,formatters:a,components:o,...s}){let c=ua();return(0,I.jsx)(Oo,{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(Ye({variant:i}),`size-(--cell-size) select-none p-0 aria-disabled:opacity-50`,c.button_previous),button_next:N(Ye({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)(bt,{className:N(`size-4`,e),...n}):t===`right`?(0,I.jsx)(Ue,{className:N(`size-4`,e),...n}):(0,I.jsx)(Ot,{className:N(`size-4`,e),...n}),DayButton:Ao,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 Ao({className:e,day:t,modifiers:n,...r}){let i=ua(),a=F.useRef(null);return F.useEffect(()=>{n.focused&&a.current?.focus()},[n.focused]),(0,I.jsx)(Ze,{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 jo({selected:n,onSelect:r}){let i=t()===`zh-CN`?Xr:ir,a=new Date,o=[{label:Te(),range:{from:a,to:a}},{label:ve(),range:{from:Vr(a,1),to:Vr(a,1)}},{label:ke(),range:{from:Vr(a,6),to:a}},{label:se(),range:{from:Vr(a,29),to:a}},{label:e(),range:{from:Bn(a),to:a}},{label:x(),range:{from:Bn(Wr(a,1)),to:Ln(Wr(a,1))}}],s;return n?.from&&n?.to?s=`${jr(n.from,`PP`,{locale:i})} – ${jr(n.to,`PP`,{locale:i})}`:n?.from&&(s=jr(n.from,`PP`,{locale:i})),(0,I.jsxs)(ht,{children:[(0,I.jsx)(mt,{asChild:!0,children:(0,I.jsxs)(Ze,{className:`w-auto justify-start text-start font-normal data-[empty=true]:text-muted-foreground`,"data-empty":!s,size:`sm`,variant:`outline`,children:[s??(0,I.jsx)(`span`,{children:fe()}),(0,I.jsx)(nn,{className:`ms-2 h-4 w-4 opacity-50`})]})}),(0,I.jsxs)(pt,{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:o.map(e=>(0,I.jsx)(Ze,{className:`justify-start`,onClick:()=>r(e.range),size:`sm`,variant:`ghost`,children:e.label},e.label))}),(0,I.jsx)(ko,{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=qo(e,Go),d=a||{width:r,height:i,x:0,y:0},f=P(`recharts-surface`,o);return F.createElement(`svg`,Ko({},Uo(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)}),Xo=[`children`,`className`];function Zo(){return Zo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:n,className:r}=e,i=Qo(e,Xo),a=P(`recharts-layer`,r);return F.createElement(`g`,Zo({className:a},Uo(i),{ref:t}),n)}),ts=(0,F.createContext)(null),ns=()=>(0,F.useContext)(ts);function B(e){return function(){return e}}var rs=Math.cos,is=Math.sin,as=Math.sqrt,os=Math.PI;os/2;var ss=2*os,cs=Math.PI,ls=2*cs,us=1e-6,ds=ls-us;function fs(e){this._+=e[0];for(let t=1,n=e.length;t=0))throw Error(`invalid digits: ${e}`);if(t>15)return fs;let n=10**t;return function(e){this._+=e[0];for(let t=1,r=e.length;tus)if(!(Math.abs(u*s-c*l)>us)||!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((cs-Math.acos((m+d-h)/(2*g*_)))/2),y=v/_,b=v/g;Math.abs(y-1)>us&&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)>us||Math.abs(this._y1-l)>us)&&this._append`L${c},${l}`,n&&(d<0&&(d=d%ls+ls),d>ds?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>us&&this._append`A${n},${n},0,${+(d>=cs)},${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 hs(){return new ms}hs.prototype=ms.prototype;function gs(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 ms(t)}Array.prototype.slice;function _s(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function vs(e){this._context=e}vs.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 ys(e){return new vs(e)}function bs(e){return e[0]}function xs(e){return e[1]}function Ss(e,t){var n=B(!0),r=null,i=ys,a=null,o=gs(s);e=typeof e==`function`?e:e===void 0?bs:B(e),t=typeof t==`function`?t:t===void 0?xs:B(t);function s(s){var c,l=(s=_s(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 Ss().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 ws=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 Ts(e){return new ws(e,!0)}function Es(e){return new ws(e,!1)}var Ds={draw(e,t){let n=as(t/os);e.moveTo(n,0),e.arc(0,0,n,0,ss)}},Os={draw(e,t){let n=as(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()}},ks=as(1/3),As=ks*2,js={draw(e,t){let n=as(t/As),r=n*ks;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},Ms={draw(e,t){let n=as(t),r=-n/2;e.rect(r,r,n,n)}},Ns=.8908130915292852,Ps=is(os/10)/is(7*os/10),Fs=is(ss/10)*Ps,Is=-rs(ss/10)*Ps,Ls={draw(e,t){let n=as(t*Ns),r=Fs*n,i=Is*n;e.moveTo(0,-n),e.lineTo(r,i);for(let t=1;t<5;++t){let a=ss*t/5,o=rs(a),s=is(a);e.lineTo(s*n,-o*n),e.lineTo(o*r-s*i,s*r+o*i)}e.closePath()}},Rs=as(3),zs={draw(e,t){let n=-as(t/(Rs*3));e.moveTo(0,n*2),e.lineTo(-Rs*n,-n),e.lineTo(Rs*n,-n),e.closePath()}},Bs=-.5,Vs=as(3)/2,Hs=1/as(12),Us=(Hs/2+1)*3,Ws={draw(e,t){let n=as(t/Us),r=n/2,i=n*Hs,a=r,o=n*Hs+n,s=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(s,c),e.lineTo(Bs*r-Vs*i,Vs*r+Bs*i),e.lineTo(Bs*a-Vs*o,Vs*a+Bs*o),e.lineTo(Bs*s-Vs*c,Vs*s+Bs*c),e.lineTo(Bs*r+Vs*i,Bs*i-Vs*r),e.lineTo(Bs*a+Vs*o,Bs*o-Vs*a),e.lineTo(Bs*s+Vs*c,Bs*c-Vs*s),e.closePath()}};function Gs(e,t){let n=null,r=gs(i);e=typeof e==`function`?e:B(e||Ds),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 Ks(){}function qs(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 Js(e){this._context=e}Js.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:qs(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:qs(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Ys(e){return new Js(e)}function Xs(e){this._context=e}Xs.prototype={areaStart:Ks,areaEnd:Ks,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:qs(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: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:qs(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:Ks,areaEnd:Ks,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 tc(e){return new ec(e)}function nc(e){return e<0?-1:1}function rc(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(nc(a)+nc(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function ic(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function ac(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 oc(e){this._context=e}oc.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:ac(this,this._t0,ic(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,ac(this,ic(this,n=rc(this,e,t)),n);break;default:ac(this,this._t0,n=rc(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};function sc(e){this._context=new cc(e)}(sc.prototype=Object.create(oc.prototype)).point=function(e,t){oc.prototype.point.call(this,t,e)};function cc(e){this._context=e}cc.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 lc(e){return new oc(e)}function uc(e){return new sc(e)}function dc(e){this._context=e}dc.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=fc(e),i=fc(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 hc(e){return new mc(e,.5)}function gc(e){return new mc(e,0)}function _c(e){return new mc(e,1)}function vc(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 bc(e,t){return e[t]}function xc(e){let t=[];return t.key=e,t}function Sc(){var e=B([]),t=yc,n=vc,r=bc;function i(i){var a=Array.from(e.apply(this,arguments),xc),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})),Dc=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})),Oc=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})),kc=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})),Ac=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=kc(),n=Oc();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=Ec(),n=Dc(),r=Oc(),i=Ac();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=jc().get})),Nc=4;function Pc(e){var t=10**(arguments.length>1&&arguments[1]!==void 0?arguments[1]:Nc),n=Math.round(e*t)/t;return Object.is(n,-0)?0:n}function Fc(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+Pc(i)+n},``)}var Ic=Se(Mc()),Lc=e=>e===0?0:e>0?1:-1,Rc=e=>typeof e==`number`&&e!=+e,zc=e=>typeof e==`string`&&e.indexOf(`%`)===e.length-1,V=e=>(typeof e==`number`||e instanceof Number)&&!Rc(e),Bc=e=>V(e)||typeof e==`string`,Vc=0,Hc=e=>{var t=++Vc;return`${e||``}${t}`},Uc=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(zc(e)){if(t==null)return n;var a=e.indexOf(`%`);i=t*parseFloat(e.slice(0,a))/100}else i=+e;return Rc(i)&&(i=n),r&&t!=null&&i>t&&(i=t),i},Wc=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,n={},r=0;re&&(typeof t==`function`?t(e):(0,Ic.default)(e,t))===n)}var U=e=>e==null,Kc=e=>U(e)?e:`${e.charAt(0).toUpperCase()}${e.slice(1)}`;function qc(e){return e!=null}function Jc(){}var Yc=[`type`,`size`,`sizeType`];function Xc(){return Xc=Object.assign?Object.assign.bind():function(e){for(var t=1;til[`symbol${Kc(e)}`]||Ds,sl=(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*al;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}},cl=(e,t)=>{il[`symbol${Kc(e)}`]=t},ll=e=>{var{type:t=`circle`,size:n=64,sizeType:r=`area`}=e,i=Qc(Qc({},nl(e,Yc)),{},{type:t,size:n,sizeType:r}),a=`circle`;typeof t==`string`&&(a=t);var o=()=>{var e=ol(a),t=Gs().type(e).size(sl(n,r,a))();if(t!==null)return t},{className:s,cx:c,cy:l}=i,u=Uo(i);return V(c)&&V(l)&&V(n)?F.createElement(`path`,Xc({},u,{className:P(`recharts-symbols`,s),transform:`translate(${c}, ${l})`,d:o()})):null};ll.registerSymbol=cl;var ul=e=>`radius`in e&&`startAngle`in e&&`endAngle`in e,dl=(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=>{Lo(e)&&typeof n[e]==`function`&&(r[e]=t||(t=>n[e](n,t)))}),r},fl=(e,t,n)=>r=>(e(t,n,r),null),pl=(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];Lo(i)&&typeof a==`function`&&(r||={},r[i]=fl(a,t,n))}),r};function ml(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 hl(e){for(var t=1;t(e[t]===void 0&&r[t]!==void 0&&(e[t]=r[t]),e),n)}function bl(){return bl=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`?Sl({},s):{};p.color=t.inactive?a:p.color||t.color;var m=d?d(t.value,t,r):t.value;return F.createElement(`li`,bl({className:f,style:l,key:`legend-item-${r}`},pl(e,t,r)),F.createElement(Yo,{width:n,height:n,viewBox:c,style:u,"aria-label":`${t.value} legend icon`},F.createElement(kl,{data:t,iconType:o,inactiveColor:a})),F.createElement(`span`,{className:`recharts-legend-item-text`,style:p},m))})}var jl=e=>{var t=yl(e,Dl),{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(Al,bl({},t,{payload:n})))},Ml=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})),Pl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return e}e.identity=t})),Fl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return Number.isSafeInteger(e)&&e>=0}e.isLength=t})),Il=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Fl();function n(e){return e!=null&&typeof e!=`function`&&t.isLength(e.length)}e.isArrayLike=n})),Ll=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return typeof e==`object`&&!!e}e.isObjectLike=t})),Rl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Il(),n=Ll();function r(e){return n.isObjectLike(e)&&t.isArrayLike(e)}e.isArrayLikeObject=r})),zl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=jc();function n(e){return function(n){return t.get(n,e)}}e.property=n})),Bl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return e!==null&&(typeof e==`object`||typeof e==`function`)}e.isObject=t})),Vl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return e==null||typeof e!=`object`&&typeof e!=`function`}e.isPrimitive=t})),Hl=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})),Ul=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Bl(),n=Vl(),r=Hl();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=Ul();function n(e,n){return t.isMatchWith(e,n,()=>void 0)}e.isMatch=n})),Gl=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})),Kl=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})),ql=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]`})),Jl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}e.isTypedArray=t})),Yl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Gl(),n=Kl(),r=ql(),i=Vl(),a=Jl();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=Yl();function n(e){return t.cloneDeepWithImpl(e,void 0,e,new Map,void 0)}e.cloneDeep=n})),Zl=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Wl(),n=Xl();function r(e){return e=n.cloneDeep(e),n=>t.isMatch(n,e)}e.matches=r})),Ql=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Yl(),n=Kl(),r=ql();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})),$l=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Ql();function n(e){return t.cloneDeepWith(e)}e.cloneDeep=n})),eu=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=Kl();function n(e){return typeof e==`object`&&!!e&&t.getTag(e)===`[object Arguments]`}e.isArguments=n})),nu=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Dc(),n=eu(),r=tu(),i=Ac();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=Wl(),n=Oc(),r=$l(),i=jc(),a=nu();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})),iu=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Pl(),n=zl(),r=Zl(),i=ru();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})),au=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Ml(),n=Nl(),r=Pl(),i=Rl(),a=iu();function o(e,o=r.identity){return i.isArrayLikeObject(e)?t.uniqBy(Array.from(e),n.ary(a.iteratee(o),1)):[]}e.uniqBy=o})),ou=Se(M(((e,t)=>{t.exports=au().uniqBy}))());function su(e,t,n){return t===!0?(0,ou.default)(e,n):typeof t==`function`?(0,ou.default)(e,t):e}var cu=(0,F.createContext)(null),lu=ze(),uu=e=>e,W=()=>{var e=(0,F.useContext)(cu);return e?e.store.dispatch:uu},du=()=>{},fu=()=>du,pu=(e,t)=>e===t;function G(e){var t=(0,F.useContext)(cu),n=(0,F.useMemo)(()=>t?t=>{if(t!=null)return e(t)}:du,[t,e]);return(0,lu.useSyncExternalStoreWithSelector)(t?t.subscription.addNestedSub:fu,t?t.store.getState:du,t?t.store.getState:du,n,pu)}function mu(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!=`function`)throw TypeError(t)}function hu(e,t=`expected an object, instead received ${typeof e}`){if(typeof e!=`object`)throw TypeError(t)}function gu(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 _u=e=>Array.isArray(e)?e:[e];function vu(e){let t=Array.isArray(e[0])?e[0]:e;return gu(t,`createSelector expects all input-selectors to be functions, but received the following types: `),t}function yu(e,t){let n=[],{length:r}=e;for(let i=0;i{n=wu(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function Eu(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()),mu(o,`createSelector expects an output function after the inputs, but received: [${typeof o}]`);let{memoize:s,memoizeOptions:c=[],argsMemoize:l=Tu,argsMemoizeOptions:u=[],devModeChecks:d={}}={...n,...a},f=_u(c),p=_u(u),m=vu(e),h=s(function(){return t++,o.apply(null,arguments)},...f),g=l(function(){r++;let e=yu(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=Eu(Tu),Du=Object.assign((e,t=K)=>{hu(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:()=>Du}),Ou=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}})),ku=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return typeof e==`symbol`||e instanceof Symbol}e.isSymbol=t})),Au=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=ku(),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})),ju=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Ou(),n=Au(),r=Ac();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})),Mu=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=eu(),n=Il(),r=Bl(),i=Hl();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=ju(),n=Mu(),r=Nu();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})),Fu=Se(M(((e,t)=>{t.exports=Pu().sortBy}))()),Iu=e=>e.legend.settings,Lu=e=>e.legend.size,Ru=K([e=>e.legend.payload,Iu],(e,t)=>{var{itemSorter:n}=t,r=e.flat(1);return n?(0,Fu.default)(r,n):r});function zu(){return G(Ru)}var Bu=1;function Vu(){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)>Bu||Math.abs(i.left-t.left)>Bu||Math.abs(i.top-t.top)>Bu||Math.abs(i.width-t.width)>Bu)&&n({height:i.height,left:i.left,top:i.top,width:i.width})}},[t.width,t.height,t.top,t.left,...e])]}function Hu(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 Uu=typeof Symbol==`function`&&Symbol.observable||`@@observable`,Wu=()=>Math.random().toString(36).substring(7).split(``).join(`.`),Gu={INIT:`@@redux/INIT${Wu()}`,REPLACE:`@@redux/REPLACE${Wu()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${Wu()}`};function Ku(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 qu(e,t,n){if(typeof e!=`function`)throw Error(Hu(2));if(typeof t==`function`&&typeof n==`function`||typeof n==`function`&&typeof arguments[3]==`function`)throw Error(Hu(0));if(typeof t==`function`&&n===void 0&&(n=t,t=void 0),n!==void 0){if(typeof n!=`function`)throw Error(Hu(1));return n(qu)(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(Hu(3));return i}function d(e){if(typeof e!=`function`)throw Error(Hu(4));if(c)throw Error(Hu(5));let t=!0;l();let n=s++;return o.set(n,e),function(){if(t){if(c)throw Error(Hu(6));t=!1,l(),o.delete(n),a=null}}}function f(e){if(!Ku(e))throw Error(Hu(7));if(e.type===void 0)throw Error(Hu(8));if(typeof e.type!=`string`)throw Error(Hu(17));if(c)throw Error(Hu(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(Hu(10));r=e,f({type:Gu.REPLACE})}function m(){let e=d;return{subscribe(t){if(typeof t!=`object`||!t)throw Error(Hu(11));function n(){let e=t;e.next&&e.next(u())}return n(),{unsubscribe:e(n)}},[Uu](){return this}}}return f({type:Gu.INIT}),{dispatch:f,subscribe:d,getState:u,replaceReducer:p,[Uu]:m}}function Ju(e){Object.keys(e).forEach(t=>{let n=e[t];if(n(void 0,{type:Gu.INIT})===void 0)throw Error(Hu(12));if(n(void 0,{type:Gu.PROBE_UNKNOWN_ACTION()})===void 0)throw Error(Hu(13))})}function Yu(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 Zu(...e){return t=>(n,r)=>{let i=t(n,r),a=()=>{throw Error(Hu(15))},o={getState:i.getState,dispatch:(e,...t)=>a(e,...t)};return a=Xu(...e.map(e=>e(o)))(i.dispatch),{...i,dispatch:a}}}function Qu(e){return Ku(e)&&`type`in e&&typeof e.type==`string`}var $u=Symbol.for(`immer-nothing`),ed=Symbol.for(`immer-draftable`),td=Symbol.for(`immer-state`);function nd(e,...t){throw Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var rd=Object,id=rd.getPrototypeOf,ad=`constructor`,od=`prototype`,sd=`configurable`,cd=`enumerable`,ld=`writable`,ud=`value`,dd=e=>!!e&&!!e[td];function fd(e){return e?hd(e)||Sd(e)||!!e[ed]||!!e[ad]?.[ed]||Cd(e)||wd(e):!1}var pd=rd[od][ad].toString(),md=new WeakMap;function hd(e){if(!e||!Td(e))return!1;let t=id(e);if(t===null||t===rd[od])return!0;let n=rd.hasOwnProperty.call(t,ad)&&t[ad];if(n===Object)return!0;if(!Ed(n))return!1;let r=md.get(n);return r===void 0&&(r=Function.toString.call(n),md.set(n,r)),r===pd}function gd(e,t,n=!0){_d(e)===0?(n?Reflect.ownKeys(e):rd.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function _d(e){let t=e[td];return t?t.type_:Sd(e)?1:Cd(e)?2:wd(e)?3:0}var vd=(e,t,n=_d(e))=>n===2?e.has(t):rd[od].hasOwnProperty.call(e,t),yd=(e,t,n=_d(e))=>n===2?e.get(t):e[t],bd=(e,t,n,r=_d(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function xd(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var Sd=Array.isArray,Cd=e=>e instanceof Map,wd=e=>e instanceof Set,Td=e=>typeof e==`object`,Ed=e=>typeof e==`function`,Dd=e=>typeof e==`boolean`;function Od(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var kd=e=>e.copy_||e.base_,Ad=e=>e.modified_?e.copy_:e.base_;function jd(e,t){if(Cd(e))return new Map(e);if(wd(e))return new Set(e);if(Sd(e))return Array[od].slice.call(e);let n=hd(e);if(t===!0||t===`class_only`&&!n){let t=rd.getOwnPropertyDescriptors(e);delete t[td];let n=Reflect.ownKeys(t);for(let r=0;r1&&rd.defineProperties(e,{set:Pd,add:Pd,clear:Pd,delete:Pd}),rd.freeze(e),t&&gd(e,(e,t)=>{Md(t,!0)},!1),e)}function Nd(){nd(2)}var Pd={[ud]:Nd};function Fd(e){return e===null||!Td(e)?!0:rd.isFrozen(e)}var Id=`MapSet`,Ld=`Patches`,Rd=`ArrayMethods`,zd={};function Bd(e){let t=zd[e];return t||nd(0,e),t}var Vd=e=>!!zd[e],Hd,Ud=()=>Hd,Wd=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:Vd(Id)?Bd(Id):void 0,arrayMethodsPlugin_:Vd(Rd)?Bd(Rd):void 0});function Gd(e,t){t&&(e.patchPlugin_=Bd(Ld),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Kd(e){qd(e),e.drafts_.forEach(Yd),e.drafts_=null}function qd(e){e===Hd&&(Hd=e.parent_)}var Jd=e=>Hd=Wd(Hd,e);function Yd(e){let t=e[td];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function Xd(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[td].modified_&&(Kd(t),nd(4)),fd(e)&&(e=Zd(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[td].base_,e,t)}else e=Zd(t,n);return Qd(t,e,!0),Kd(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===$u?void 0:e}function Zd(e,t){if(Fd(t))return t;let n=t[td];if(!n)return sf(t,e.handledSet_,e);if(!ef(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);af(n,e)}return n.copy_}function Qd(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Md(t,n)}function $d(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var ef=(e,t)=>e.scope_===t,tf=[];function nf(e,t,n,r){let i=kd(e),a=e.type_;if(r!==void 0&&yd(i,r,a)===t){bd(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;gd(i,(e,n)=>{if(dd(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??tf;for(let e of o)bd(i,e,n,a)}function rf(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!ef(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Ad(i);nf(e,i.draft_??i,a,n),af(i,r)})}function af(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)}$d(e)}}function of(e,t,n){let{scope_:r}=e;if(dd(n)){let i=n[td];ef(i,r)&&i.callbacks_.push(function(){hf(e),nf(e,n,Ad(i),t)})}else fd(n)&&e.callbacks_.push(function(){let i=kd(e);e.type_===3?i.has(n)&&sf(n,r.handledSet_,r):yd(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&sf(yd(e.copy_,t,e.type_),r.handledSet_,r)})}function sf(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||dd(e)||t.has(e)||!fd(e)||Fd(e)?e:(t.add(e),gd(e,(r,i)=>{if(dd(i)){let t=i[td];ef(t,n)&&(bd(e,r,Ad(t),e.type_),$d(t))}else fd(i)&&sf(i,t,n)}),e)}function cf(e,t){let n=Sd(e),r={type_:+!!n,scope_:t?t.scope_:Ud(),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=lf;n&&(i=[r],a=uf);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var lf={get(e,t){if(t===td)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=kd(e);if(!vd(i,t,e.type_))return ff(e,i,t);let a=i[t];if(e.finalized_||!fd(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Od(t))return a;if(a===df(e.base_,t)){hf(e);let n=e.type_===1?+t:t,r=_f(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in kd(e)},ownKeys(e){return Reflect.ownKeys(kd(e))},set(e,t,n){let r=pf(kd(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=df(kd(e),t),i=r?.[td];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.set(t,!1),!0;if(xd(n,r)&&(n!==void 0||vd(e.base_,t,e.type_)))return!0;hf(e),mf(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),of(e,t,n),!0)},deleteProperty(e,t){return hf(e),df(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),mf(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=kd(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[ld]:!0,[sd]:e.type_!==1||t!==`length`,[cd]:r[cd],[ud]:n[t]}},defineProperty(){nd(11)},getPrototypeOf(e){return id(e.base_)},setPrototypeOf(){nd(12)}},uf={};for(let e in lf){let t=lf[e];uf[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}uf.deleteProperty=function(e,t){return uf.set.call(this,e,t,void 0)},uf.set=function(e,t,n){return lf.set.call(this,e[0],t,n,e[0])};function df(e,t){let n=e[td];return(n?kd(n):e)[t]}function ff(e,t,n){let r=pf(t,n);return r?ud in r?r[ud]:r.get?.call(e.draft_):void 0}function pf(e,t){if(!(t in e))return;let n=id(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=id(n)}}function mf(e){e.modified_||(e.modified_=!0,e.parent_&&mf(e.parent_))}function hf(e){e.copy_||=(e.assigned_=new Map,jd(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var gf=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(Ed(e)&&!Ed(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}Ed(t)||nd(6),n!==void 0&&!Ed(n)&&nd(7);let r;if(fd(e)){let i=Jd(this),a=_f(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Kd(i):qd(i)}return Gd(i,n),Xd(r,i)}else if(!e||!Td(e)){if(r=t(e),r===void 0&&(r=e),r===$u&&(r=void 0),this.autoFreeze_&&Md(r,!0),n){let t=[],i=[];Bd(Ld).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}else nd(1,e)},this.produceWithPatches=(e,t)=>{if(Ed(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]},Dd(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Dd(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Dd(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){fd(e)||nd(8),dd(e)&&(e=vf(e));let t=Jd(this),n=_f(t,e,void 0);return n[td].isManual_=!0,qd(t),n}finishDraft(e,t){let n=e&&e[td];(!n||!n.isManual_)&&nd(9);let{scope_:r}=n;return Gd(r,t),Xd(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=Bd(Ld).applyPatches_;return dd(e)?r(e,t):this.produce(e,e=>r(e,t))}};function _f(e,t,n,r){let[i,a]=Cd(t)?Bd(Id).proxyMap_(t,n):wd(t)?Bd(Id).proxySet_(t,n):cf(t,n);return(n?.scope_??Ud()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?rf(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 vf(e){return dd(e)||nd(10,e),yf(e)}function yf(e){if(!fd(e)||Fd(e))return e;let t=e[td],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=jd(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=jd(e,!0);return gd(n,(e,t)=>{bd(n,e,yf(t))},r),t&&(t.finalized_=!1),n}var bf=new gf().produce;function xf(e){return({dispatch:t,getState:n})=>r=>i=>typeof i==`function`?i(t,n,e):r(i)}var Sf=xf(),Cf=xf,wf=typeof window<`u`&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]==`object`?Xu:Xu.apply(null,arguments)};typeof window<`u`&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__;function Tf(e,t){function n(...n){if(t){let r=t(...n);if(!r)throw Error(Mp(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=>Qu(t)&&t.type===e,n}var Ef=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 Df(e){return fd(e)?bf(e,()=>{}):e}function Of(e,t,n){return e.has(t)?e.get(t):e.set(t,n(t)).get(t)}function kf(e){return typeof e==`boolean`}var Af=()=>function(e){let{thunk:t=!0,immutableCheck:n=!0,serializableCheck:r=!0,actionCreatorCheck:i=!0}=e??{},a=new Ef;return t&&(kf(t)?a.push(Sf):a.push(Cf(t.extraArgument))),a},jf=`RTK_autoBatch`,q=()=>e=>({payload:e,meta:{[jf]:!0}}),Mf=e=>t=>{setTimeout(t,e)},Nf=(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:Mf(10):e.type===`callback`?e.queueNotification:Mf(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?.[jf],a=!i,a&&(o||(o=!0,c(l))),r.dispatch(e)}finally{i=!0}}})},Pf=e=>function(t){let{autoBatch:n=!0}=t??{},r=new Ef(e);return n&&r.push(Nf(typeof n==`object`?n:void 0)),r};function Ff(e){let t=Af(),{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(Ku(n))c=Yu(n);else throw Error(Mp(1));let l;l=typeof r==`function`?r(t):t();let u=Xu;i&&(u=wf({trace:!1,...typeof i==`object`&&i}));let d=Pf(Zu(...l)),f=typeof s==`function`?s(d):d(),p=u(...f);return qu(c,o,p)}function If(e){let t={},n=[],r,i={addCase(e,n){let r=typeof e==`string`?e:e.type;if(!r)throw Error(Mp(28));if(r in t)throw Error(Mp(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 Lf(e){return typeof e==`function`}function Rf(e,t){let[n,r,i]=If(t),a;if(Lf(e))a=()=>Df(e());else{let t=Df(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(dd(e)){let r=n(e,t);return r===void 0?e:r}else if(fd(e))return bf(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 zf=`ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW`,Bf=(e=21)=>{let t=``,n=e;for(;n--;)t+=zf[Math.random()*64|0];return t},Vf=Symbol.for(`rtk-slice-createasyncthunk`);function Hf(e,t){return`${e}/${t}`}function Uf({creators:e}={}){let t=e?.asyncThunk?.[Vf];return function(e){let{name:n,reducerPath:r=n}=e;if(!n)throw Error(Mp(11));let i=(typeof e.reducers==`function`?e.reducers(Kf()):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(Mp(12));if(n in o.sliceCaseReducersByType)throw Error(Mp(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:Hf(n,r),createNotation:typeof e.reducers==`function`};Jf(a)?Xf(o,a,s,t):qf(o,a,s)});function c(){let[t={},n=[],r=void 0]=typeof e.extraReducers==`function`?If(e.extraReducers):[e.extraReducers],i={...t,...o.sliceCaseReducersByType};return Rf(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=Of(d,r,m)),i}function i(t=l){return Of(Of(u,n,()=>new WeakMap),t,()=>{let r={};for(let[i,a]of Object.entries(e.selectors??{}))r[i]=Wf(a,t,()=>Of(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 Wf(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 Gf=Uf();function Kf(){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 qf({type:e,reducerName:t,createNotation:n},r,i){let a,o;if(`reducer`in r){if(n&&!Yf(r))throw Error(Mp(17));a=r.reducer,o=r.prepare}else a=r;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?Tf(e,o):Tf(e))}function Jf(e){return e._reducerDefinitionType===`asyncThunk`}function Yf(e){return e._reducerDefinitionType===`reducerWithPrepare`}function Xf({type:e,reducerName:t},n,r,i){if(!i)throw Error(Mp(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||Zf,pending:s||Zf,rejected:c||Zf,settled:l||Zf})}function Zf(){}var Qf=`task`,$f=`listener`,ep=`completed`,tp=`cancelled`,np=`task-${tp}`,rp=`task-${ep}`,ip=`${$f}-${tp}`,ap=`${$f}-${ep}`,op=class{constructor(e){this.code=e,this.message=`${Qf} ${tp} (reason: ${e})`}name=`TaskAbortError`;message},sp=(e,t)=>{if(typeof e!=`function`)throw TypeError(Mp(32))},cp=()=>{},lp=(e,t=cp)=>(e.catch(t),e),up=(e,t)=>(e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t)),dp=e=>{if(e.aborted)throw new op(e.reason)};function fp(e,t){let n=cp;return new Promise((r,i)=>{let a=()=>i(new op(e.reason));if(e.aborted){a();return}n=up(e,a),t.finally(()=>n()).then(r,i)}).finally(()=>{n=cp})}var pp=async(e,t)=>{try{return await Promise.resolve(),{status:`ok`,value:await e()}}catch(e){return{status:e instanceof op?`cancelled`:`rejected`,error:e}}finally{t?.()}},mp=e=>t=>lp(fp(e,t).then(t=>(dp(e),t))),hp=e=>{let t=mp(e);return e=>t(new Promise(t=>setTimeout(t,e)))},{assign:gp}=Object,_p={},vp=`listenerMiddleware`,yp=(e,t)=>{let n=t=>up(e,()=>t.abort(e.reason));return(r,i)=>{sp(r,`taskExecutor`);let a=new AbortController;n(a);let o=pp(async()=>{dp(e),dp(a.signal);let t=await r({pause:mp(a.signal),delay:hp(a.signal),signal:a.signal});return dp(a.signal),t},()=>a.abort(rp));return i?.autoJoin&&t.push(o.catch(cp)),{result:mp(e)(o),cancel(){a.abort(np)}}}},bp=(e,t)=>{let n=async(n,r)=>{dp(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 fp(t,Promise.race(a));return dp(t),e}finally{i()}};return(e,t)=>lp(n(e,t))},xp=e=>{let{type:t,actionCreator:n,matcher:r,predicate:i,effect:a}=e;if(t)i=Tf(t).match;else if(n)t=n.type,i=n.match;else if(r)i=r;else if(!i)throw Error(Mp(21));return sp(a,`options.listener`),{predicate:i,type:t,effect:a}},Sp=gp(e=>{let{type:t,predicate:n,effect:r}=xp(e);return{id:Bf(),effect:r,type:t,predicate:n,pending:new Set,unsubscribe:()=>{throw Error(Mp(22))}}},{withTypes:()=>Sp}),Cp=(e,t)=>{let{type:n,effect:r,predicate:i}=xp(t);return Array.from(e.values()).find(e=>(typeof n==`string`?e.type===n:e.predicate===i)&&e.effect===r)},wp=e=>{e.pending.forEach(e=>{e.abort(ip)})},Tp=(e,t)=>()=>{for(let e of t.keys())wp(e);e.clear()},Ep=(e,t,n)=>{try{e(t,n)}catch(e){setTimeout(()=>{throw e},0)}},Dp=gp(Tf(`${vp}/add`),{withTypes:()=>Dp}),Op=Tf(`${vp}/removeAll`),kp=gp(Tf(`${vp}/remove`),{withTypes:()=>kp}),Ap=(...e)=>{console.error(`${vp}/error`,...e)},jp=(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=Ap}=e;sp(o,`onError`);let s=e=>(e.unsubscribe=()=>t.delete(e.id),t.set(e.id,e),t=>{e.unsubscribe(),t?.cancelActive&&wp(e)}),c=e=>s(Cp(t,e)??Sp(e));gp(c,{withTypes:()=>c});let l=e=>{let n=Cp(t,e);return n&&(n.unsubscribe(),e.cancelActive&&wp(n)),!!n};gp(l,{withTypes:()=>l});let u=async(e,n,s,l)=>{let u=new AbortController,d=bp(c,u.signal),f=[];try{e.pending.add(u),r(e),await Promise.resolve(e.effect(n,gp({},s,{getOriginalState:l,condition:(e,t)=>d(e,t).then(Boolean),take:d,delay:hp(u.signal),pause:mp(u.signal),extra:a,signal:u.signal,fork:yp(u.signal,f),unsubscribe:e.unsubscribe,subscribe:()=>{t.set(e.id,e)},cancelActiveListeners:()=>{e.pending.forEach((e,t,n)=>{e!==u&&(e.abort(ip),n.delete(e))})},cancel:()=>{u.abort(ip),e.pending.delete(u)},throwIfCancelled:()=>{dp(u.signal)}})))}catch(e){e instanceof op||Ep(o,e,{raisedBy:`effect`})}finally{await Promise.all(f),u.abort(ap),i(e),e.pending.delete(u)}},d=Tp(t,n);return{middleware:e=>n=>r=>{if(!Qu(r))return n(r);if(Dp.match(r))return c(r.payload);if(Op.match(r)){d();return}if(kp.match(r))return l(r.payload);let i=e.getState(),a=()=>{if(i===_p)throw Error(Mp(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,Ep(o,e,{raisedBy:`predicate`})}s&&u(t,r,e,a)}}}finally{i=_p}return s},startListening:c,stopListening:l,clearListeners:d}};function Mp(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 Np=Gf({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:Pp,setLayout:Fp,setChartSize:Ip,setScale:Lp}=Np.actions,Rp=Np.reducer;function zp(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 Bp(e){return typeof e==`number`&&e>0&&Number.isFinite(e)}function Vp(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 Hp(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 Hp(Hp({},e),{},{[a]:e[a]+(r||0)});if((s===`horizontal`||s===`vertical`&&a===`center`)&&o!==`middle`&&V(e[o]))return Hp(Hp({},e),{},{[o]:e[o]+(i||0)})}return e},qp=(e,t)=>e===`horizontal`&&t===`xAxis`||e===`vertical`&&t===`yAxis`||e===`centric`&&t===`angleAxis`||e===`radial`&&t===`radiusAxis`,Jp=(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},Yp=(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?Lc(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(qc):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(qc):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(qc):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(qc)},Xp=(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:Cc,none:vc,silhouette:wc,wiggle:Tc,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)}}}}},Qp=(e,t,n)=>{var r=Zp[n]??vc,i=Sc().keys(t).value((e,t)=>Number(Y(e,t,0))).order(yc).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 $p(e){return e==null?void 0:String(e)}function em(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=Gc(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 tm=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},nm=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]},rm=e=>{var t=e.flat(2).filter(V);return[Math.min(...t),Math.max(...t)]},im=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],am=(e,t,n)=>{if(e!=null)return im(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=rm(zp(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]))},om=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,sm=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,cm=(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,Fu.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},fm=(e,t)=>t===`centric`?e.angle:e.radius,pm=e=>e.layout.width,mm=e=>e.layout.height,hm=e=>e.layout.scale,gm=e=>e.layout.margin,_m=K(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),vm=K(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),ym=`data-recharts-item-index`;function bm(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 xm(e){for(var t=1;te.brush.height;function Em(e){return vm(e).reduce((e,t)=>t.orientation===`left`&&!t.mirror&&!t.hide?e+(typeof t.width==`number`?t.width:60):e,0)}function Dm(e){return vm(e).reduce((e,t)=>t.orientation===`right`&&!t.mirror&&!t.hide?e+(typeof t.width==`number`?t.width:60):e,0)}function Om(e){return _m(e).reduce((e,t)=>t.orientation===`top`&&!t.mirror&&!t.hide?e+t.height:e,0)}function km(e){return _m(e).reduce((e,t)=>t.orientation===`bottom`&&!t.mirror&&!t.hide?e+t.height:e,0)}var Am=K([pm,mm,gm,Tm,Em,Dm,Om,km,Iu,Lu],(e,t,n,r,i,a,o,s,c,l)=>{var u={left:(n.left||0)+i,right:(n.right||0)+a},d=xm(xm({},{top:(n.top||0)+o,bottom:(n.bottom||0)+s}),u),f=d.bottom;d.bottom+=r,d=Kp(d,c,l);var p=e-d.left-d.right,m=t-d.top-d.bottom;return xm(xm({brushBottom:f},d),{},{width:Math.max(p,0),height:Math.max(m,0)})}),jm=K(Am,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),Mm=K(pm,mm,(e,t)=>({x:0,y:0,width:e,height:t})),Nm=(0,F.createContext)(null),Pm=()=>(0,F.useContext)(Nm)!=null,Fm=e=>e.brush,Im=K([Fm,Am,gm],(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})),Lm=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})),Rm=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Lm();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})),zm=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Rm();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})),Bm=M(((e,t)=>{t.exports=zm().throttle})),Vm=!0,Hm=function(e,t){var n=[...arguments].slice(2);if(Vm&&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++]))}},Um={width:`100%`,height:`100%`,debounce:0,minWidth:0,initialDimension:{width:-1,height:-1}},Wm=(e,t,n)=>{var{width:r=Um.width,height:i=Um.height,aspect:a,maxHeight:o}=n,s=zc(r)?e:Number(r),c=zc(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}},Gm={width:0,height:0,overflow:`visible`},Km={width:0,overflowX:`visible`},qm={height:0,overflowY:`visible`},Jm={},Ym=e=>{var{width:t,height:n}=e,r=zc(t),i=zc(n);return r&&i?Gm:r?Km:i?qm:Jm};function Xm(e){var{width:t,height:n,aspect:r}=e,i=t,a=n;return i===void 0&&a===void 0?(i=Um.width,a=Um.height):i===void 0?i=r&&r>0?void 0:Um.width:a===void 0&&(a=r&&r>0?void 0:Um.height),{width:i,height:a}}var Zm=Se(Bm());function Qm(){return Qm=Object.assign?Object.assign.bind():function(e){for(var t=1;t({width:n,height:r}),[n,r]);return ah(i)?F.createElement(ih.Provider,{value:i},t):null}var sh=()=>(0,F.useContext)(ih),ch=(0,F.forwardRef)((e,t)=>{var{aspect:n,initialDimension:r=Um.initialDimension,width:i,height:a,minWidth:o=Um.minWidth,minHeight:s,maxHeight:c,children:l,debounce:u=Um.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 Jc;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,Zm.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}=_;Hm(!n||n>0,`The aspect(%s) must be greater than zero.`,n);var{calculatedWidth:S,calculatedHeight:C}=Wm(b,x,{width:i,height:a,aspect:n,maxHeight:c});return Hm(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:eh(eh({},m),{},{width:i,height:a,minWidth:o,minHeight:s,maxHeight:c}),ref:h},F.createElement(`div`,{style:Ym({width:i,height:a})},F.createElement(oh,{width:S,height:C},l)))}),lh=(0,F.forwardRef)((e,t)=>{var n=sh();if(Bp(n.width)&&Bp(n.height))return e.children;var{width:r,height:i}=Xm({width:e.width,height:e.height,aspect:e.aspect}),{calculatedWidth:a,calculatedHeight:o}=Wm(void 0,void 0,{width:r,height:i,aspect:e.aspect,maxHeight:e.maxHeight});return V(a)&&V(o)?F.createElement(oh,{width:a,height:o},e.children):F.createElement(ch,Qm({},e,{width:r,height:i,ref:t}))});function uh(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 dh=()=>{var e=Pm(),t=G(jm),n=G(Im),r=G(Fm)?.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}},fh={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},ph=()=>G(Am)??fh,mh=()=>G(pm),hh=()=>G(mm),gh=()=>G(e=>e.layout.margin),X=e=>e.layout.layoutType,_h=()=>G(X),vh=()=>{var e=_h();if(e===`horizontal`||e===`vertical`)return e},yh=e=>{var t=e.layout.layoutType;if(t===`centric`||t===`radial`)return t},bh=()=>_h()!==void 0,xh=e=>{var t=W(),n=Pm(),{width:r,height:i}=e,a=sh(),o=r,s=i;return a&&(o=a.width>0?a.width:r,s=a.height>0?a.height:i),(0,F.useEffect)(()=>{!n&&Bp(o)&&Bp(s)&&t(Ip({width:o,height:s}))},[t,n,o,s]),null},Sh=Symbol.for(`immer-nothing`),Ch=Symbol.for(`immer-draftable`),wh=Symbol.for(`immer-state`);function Th(e,...t){throw Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Eh=Object.getPrototypeOf;function Dh(e){return!!e&&!!e[wh]}function Oh(e){return e?jh(e)||Array.isArray(e)||!!e[Ch]||!!e.constructor?.[Ch]||Lh(e)||Rh(e):!1}var kh=Object.prototype.constructor.toString(),Ah=new WeakMap;function jh(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=Ah.get(n);return r===void 0&&(r=Function.toString.call(n),Ah.set(n,r)),r===kh}function Mh(e,t,n=!0){Nh(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 Nh(e){let t=e[wh];return t?t.type_:Array.isArray(e)?1:Lh(e)?2:Rh(e)?3:0}function Ph(e,t){return Nh(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Fh(e,t,n){let r=Nh(e);r===2?e.set(t,n):r===3?e.add(n):e[t]=n}function Ih(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}function Lh(e){return e instanceof Map}function Rh(e){return e instanceof Set}function zh(e){return e.copy_||e.base_}function Bh(e,t){if(Lh(e))return new Map(e);if(Rh(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);let n=jh(e);if(t===!0||t===`class_only`&&!n){let t=Object.getOwnPropertyDescriptors(e);delete t[wh];let n=Reflect.ownKeys(t);for(let r=0;r1&&Object.defineProperties(e,{set:Uh,add:Uh,clear:Uh,delete:Uh}),Object.freeze(e),t&&Object.values(e).forEach(e=>Vh(e,!0)),e)}function Hh(){Th(2)}var Uh={value:Hh};function Wh(e){return typeof e!=`object`||!e?!0:Object.isFrozen(e)}var Gh={};function Kh(e){let t=Gh[e];return t||Th(0,e),t}var qh;function Jh(){return qh}function Yh(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Xh(e,t){t&&(Kh(`Patches`),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Zh(e){Qh(e),e.drafts_.forEach(eg),e.drafts_=null}function Qh(e){e===qh&&(qh=e.parent_)}function $h(e){return qh=Yh(qh,e)}function eg(e){let t=e[wh];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function tg(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];return e!==void 0&&e!==n?(n[wh].modified_&&(Zh(t),Th(4)),Oh(e)&&(e=ng(t,e),t.parent_||ig(t,e)),t.patches_&&Kh(`Patches`).generateReplacementPatches_(n[wh].base_,e,t.patches_,t.inversePatches_)):e=ng(t,n,[]),Zh(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===Sh?void 0:e}function ng(e,t,n){if(Wh(t))return t;let r=e.immer_.shouldUseStrictIteration(),i=t[wh];if(!i)return Mh(t,(r,a)=>rg(e,i,t,r,a,n),r),t;if(i.scope_!==e)return t;if(!i.modified_)return ig(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),Mh(a,(r,a)=>rg(e,i,t,r,a,n,o),r),ig(e,t,!1),n&&e.patches_&&Kh(`Patches`).generatePatches_(i,n,e.patches_,e.inversePatches_)}return i.copy_}function rg(e,t,n,r,i,a,o){if(i==null||typeof i!=`object`&&!o)return;let s=Wh(i);if(!(s&&!o)){if(Dh(i)){let o=ng(e,i,a&&t&&t.type_!==3&&!Ph(t.assigned_,r)?a.concat(r):void 0);if(Fh(n,r,o),Dh(o))e.canAutoFreeze_=!1;else return}else o&&n.add(i);if(Oh(i)&&!s){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1||t&&t.base_&&t.base_[r]===i&&s)return;ng(e,i),(!t||!t.scope_.parent_)&&typeof r!=`symbol`&&(Lh(n)?n.has(r):Object.prototype.propertyIsEnumerable.call(n,r))&&ig(e,i)}}}function ig(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Vh(t,n)}function ag(e,t){let n=Array.isArray(e),r={type_:+!!n,scope_:t?t.scope_:Jh(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1},i=r,a=og;n&&(i=[r],a=sg);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,s}var og={get(e,t){if(t===wh)return e;let n=zh(e);if(!Ph(n,t))return lg(e,n,t);let r=n[t];return e.finalized_||!Oh(r)?r:r===cg(e.base_,t)?(fg(e),e.copy_[t]=mg(r,e)):r},has(e,t){return t in zh(e)},ownKeys(e){return Reflect.ownKeys(zh(e))},set(e,t,n){let r=ug(zh(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=cg(zh(e),t),i=r?.[wh];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_[t]=!1,!0;if(Ih(n,r)&&(n!==void 0||Ph(e.base_,t)))return!0;fg(e),dg(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 cg(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,fg(e),dg(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=zh(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.type_!==1||t!==`length`,enumerable:r.enumerable,value:n[t]}},defineProperty(){Th(11)},getPrototypeOf(e){return Eh(e.base_)},setPrototypeOf(){Th(12)}},sg={};Mh(og,(e,t)=>{sg[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),sg.deleteProperty=function(e,t){return sg.set.call(this,e,t,void 0)},sg.set=function(e,t,n){return og.set.call(this,e[0],t,n,e[0])};function cg(e,t){let n=e[wh];return(n?zh(n):e)[t]}function lg(e,t,n){let r=ug(t,n);return r?`value`in r?r.value:r.get?.call(e.draft_):void 0}function ug(e,t){if(!(t in e))return;let n=Eh(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=Eh(n)}}function dg(e){e.modified_||(e.modified_=!0,e.parent_&&dg(e.parent_))}function fg(e){e.copy_||=Bh(e.base_,e.scope_.immer_.useStrictShallowCopy_)}var pg=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`&&Th(6),n!==void 0&&typeof n!=`function`&&Th(7);let r;if(Oh(e)){let i=$h(this),a=mg(e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Zh(i):Qh(i)}return Xh(i,n),tg(r,i)}else if(!e||typeof e!=`object`){if(r=t(e),r===void 0&&(r=e),r===Sh&&(r=void 0),this.autoFreeze_&&Vh(r,!0),n){let t=[],i=[];Kh(`Patches`).generateReplacementPatches_(e,r,t,i),n(t,i)}return r}else Th(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){Oh(e)||Th(8),Dh(e)&&(e=hg(e));let t=$h(this),n=mg(e,void 0);return n[wh].isManual_=!0,Qh(t),n}finishDraft(e,t){let n=e&&e[wh];(!n||!n.isManual_)&&Th(9);let{scope_:r}=n;return Xh(r,t),tg(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=Kh(`Patches`).applyPatches_;return Dh(e)?r(e,t):this.produce(e,e=>r(e,t))}};function mg(e,t){let n=Lh(e)?Kh(`MapSet`).proxyMap_(e,t):Rh(e)?Kh(`MapSet`).proxySet_(e,t):ag(e,t);return(t?t.scope_:Jh()).drafts_.push(n),n}function hg(e){return Dh(e)||Th(10,e),gg(e)}function gg(e){if(!Oh(e)||Wh(e))return e;let t=e[wh],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Bh(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Bh(e,!0);return Mh(n,(e,t)=>{Fh(n,e,gg(t))},r),t&&(t.finalized_=!1),n}new pg().produce;function Z(e){return e}var _g=Gf({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=vf(e).payload.indexOf(Z(n));i>-1&&(e.payload[i]=Z(r))},prepare:q()},removeLegendPayload:{reducer(e,t){var n=vf(e).payload.indexOf(Z(t.payload));n>-1&&e.payload.splice(n,1)},prepare:q()}}}),{setLegendSize:vg,setLegendSettings:yg,addLegendPayload:bg,replaceLegendPayload:xg,removeLegendPayload:Sg}=_g.actions,Cg=_g.reducer,wg=M((e=>{var t=De();t.useSyncExternalStore,t.useRef,t.useEffect,t.useMemo,t.useDebugValue}));M(((e,t)=>{t.exports=wg()}))();function Tg(e){e()}function Eg(){let e=null,t=null;return{clear(){e=null,t=null},notify(){Tg(()=>{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 Dg={notify(){},get:()=>[]};function Og(e,t){let n,r=Dg,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=Eg())}function d(){i--,n&&i===0&&(n(),n=void 0,r.clear(),r=Dg)}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 kg=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0,Ag=typeof navigator<`u`&&navigator.product===`ReactNative`,jg=kg||Ag?F.useLayoutEffect:F.useEffect;function Mg(e,t){return e===t?e!==0||t!==0||1/e==1/t:e!==e&&t!==t}function Ng(e,t){if(Mg(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:Og(i),getServerState:r?()=>r:void 0}),[i,r]),o=F.useMemo(()=>i.getState(),[i]);jg(()=>{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||Lg;return F.createElement(s.Provider,{value:a},t)}var zg=Rg,Bg=new Set([`axisLine`,`tickLine`,`activeBar`,`activeDot`,`activeLabel`,`activeShape`,`allowEscapeViewBox`,`background`,`cursor`,`dot`,`label`,`line`,`margin`,`padding`,`position`,`shape`,`style`,`tick`,`wrapperStyle`,`radius`,`throttledEvents`]);function Vg(e,t){return e==null&&t==null?!0:typeof e==`number`&&typeof t==`number`?e===t||e!==e&&t!==t:e===t}function Hg(e,t){for(var n of new Set([...Object.keys(e),...Object.keys(t)]))if(Bg.has(n)){if(e[n]==null&&t[n]==null)continue;if(!Ng(e[n],t[n]))return!1}else if(!Vg(e[n],t[n]))return!1;return!0}var Ug=Se(Ve()),Wg=[`contextPayload`];function Gg(){return Gg=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t(yg(e))},[t,e]),null}function r_(e){var t=W();return(0,F.useEffect)(()=>(t(vg(e)),()=>{t(vg({width:0,height:0}))}),[t,e]),null}function i_(e,t,n,r){return e===`vertical`&&t!=null?{height:t}:e===`horizontal`?{width:n||r}:null}var a_={align:`center`,iconSize:14,inactiveColor:`#ccc`,itemSorter:`value`,layout:`horizontal`,verticalAlign:`bottom`};function o_(e){var t=yl(e,a_),n=zu(),r=ns(),i=gh(),{width:a,height:o,wrapperStyle:s,portal:c}=t,[l,u]=Vu([n]),d=mh(),f=hh();if(d==null||f==null)return null;var p=d-(i?.left||0)-(i?.right||0),m=i_(t.layout,o,a,p),h=c?s:qg(qg({position:`absolute`,width:m?.width||a||`auto`,height:m?.height||o||`auto`},t_(s,t,i,d,f,l)),s),g=c??r;return g==null||n==null?null:(0,Ug.createPortal)(F.createElement(`div`,{className:`recharts-legend-wrapper`,style:h,ref:u},F.createElement(n_,{layout:t.layout,align:t.align,verticalAlign:t.verticalAlign,itemSorter:t.itemSorter}),!c&&F.createElement(r_,{width:l.width,height:l.height}),F.createElement(e_,Gg({},t,m,{margin:i,chartWidth:d,chartHeight:f,contextPayload:n}))),g)}var s_=F.memo(o_,Hg);s_.displayName=`Legend`;function c_(){return c_=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{separator:t=h_.separator,contentStyle:n,itemStyle:r,labelStyle:i=h_.labelStyle,payload:a,formatter:o,itemSorter:s,wrapperClassName:c,labelClassName:l,label:u,labelFormatter:d,accessibilityLayer:f=h_.accessibilityLayer}=e,p=()=>{if(a&&a.length){var e={padding:0,margin:0},n=g_(a,s).map((e,n)=>{if(!e||e.type===`none`)return null;var i=e.formatter||o||m_,{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=u_(u_({},h_.itemStyle),{},{color:e.color||h_.itemStyle.color},r);return F.createElement(`li`,{className:`recharts-tooltip-item`,key:`tooltip-item-${n}`,style:f},Bc(u)?F.createElement(`span`,{className:`recharts-tooltip-item-name`},u):null,Bc(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=u_(u_({},h_.contentStyle),n),h=u_({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`,c_({className:v,style:m},b),F.createElement(`p`,{className:y,style:h},F.isValidElement(_)?_:`${_}`),p())},v_=`recharts-tooltip-wrapper`,y_={visibility:`hidden`};function b_(e){var{coordinate:t,translateX:n,translateY:r}=e;return P(v_,{[`${v_}-right`]:V(n)&&t&&V(t.x)&&n>=t.x,[`${v_}-left`]:V(n)&&t&&V(t.x)&&n=t.y,[`${v_}-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 S_(e){var{translateX:t,translateY:n,useTranslate3d:r}=e;return{transform:r?`translate3d(${t}px, ${n}px, 0)`:`translate(${t}px, ${n}px)`}}function C_(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=x_({allowEscapeViewBox:t,coordinate:n,key:`x`,offset:i,position:a,reverseDirection:o,tooltipDimension:s.width,viewBox:l,viewBoxDimension:l.width}),f=x_({allowEscapeViewBox:t,coordinate:n,key:`y`,offset:r,position:a,reverseDirection:o,tooltipDimension:s.height,viewBox:l,viewBoxDimension:l.height}),u=S_({translateX:d,translateY:f,useTranslate3d:c})):u=y_,{cssProperties:u,cssClasses:b_({translateX:d,translateY:f,coordinate:n})}}var w_={devToolsEnabled:!0,isSsr:!(typeof window<`u`&&window.document&&window.document.createElement&&window.setTimeout)};function T_(){var[e,t]=(0,F.useState)(()=>w_.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 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 D_(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(D_(D_({},n),{},{dismissed:!1}));var{cssClasses:i,cssProperties:a}=C_({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=D_(D_({},e.hasPortalFromProps?{}:D_(D_({transition:j_({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 N_=F.memo(M_),P_=()=>G(e=>e.rootProps.accessibilityLayer)??!0;function F_(){return F_=Object.assign?Object.assign.bind():function(e){for(var t=1;tJ(e.x)&&J(e.y),U_=e=>e.base!=null&&H_(e.base)&&H_(e),W_=e=>e.x,G_=e=>e.y,K_=(e,t)=>{if(typeof e==`function`)return e;var n=`curve${Kc(e)}`;if((n===`curveMonotone`||n===`curveBump`)&&t){var r=V_[`${n}${t===`vertical`?`Y`:`X`}`];if(r)return r}return V_[n]||ys},q_={connectNulls:!1,type:`linear`},J_=e=>{var{type:t=q_.type,points:n=[],baseLine:r,layout:i,connectNulls:a=q_.connectNulls}=e,o=K_(t,i),s=a?n.filter(H_):n;if(Array.isArray(r)){var c,l=n.map((e,t)=>L_(L_({},e),{},{base:r[t]}));return c=i===`vertical`?Cs().y(G_).x1(W_).x0(e=>e.base.x):Cs().x(W_).y1(G_).y0(e=>e.base.y),c.defined(U_).curve(o)(a?l.filter(U_):l)}return(i===`vertical`&&V(r)?Cs().y(G_).x1(W_).x0(r):V(r)?Cs().x(W_).y1(G_).y0(r):Ss().x(W_).y(G_)).defined(H_).curve(o)(s)},Y_=e=>{var{className:t,points:n,path:r,pathRef:i}=e,a=_h();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?J_(o):r;return F.createElement(`path`,F_({},Vo(e),dl(e),{className:P(`recharts-curve`,t),d:s===null?void 0:s,ref:i}))},X_=[`x`,`y`,`top`,`left`,`width`,`height`,`className`];function Z_(){return Z_=Object.assign?Object.assign.bind():function(e){for(var t=1;t`M${e},${i}v${r}M${a},${t}h${n}`,ov=e=>{var{x:t=0,y:n=0,top:r=0,left:i=0,width:a=0,height:o=0,className:s}=e,c=rv(e,X_),l=$_({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`,Z_({},Uo(l),{className:P(`recharts-cross`,s),d:av(t,n,a,o,r,i)}))};function sv(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 cv(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 lv(e){for(var t=1;te.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`),mv=(e,t,n)=>e.map(e=>`${pv(e)} ${t}ms ${n}`).join(`,`),hv=(e,t)=>[Object.keys(e),Object.keys(t)].reduce((e,t)=>e.filter(e=>t.includes(e))),gv=(e,t)=>Object.keys(t).reduce((n,r)=>lv(lv({},n),{},{[r]:e(r,t[r])}),{});function _v(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 vv(e){for(var t=1;te+(t-e)*n,Cv=e=>{var{from:t,to:n}=e;return t!==n},wv=(e,t,n)=>{var r=gv((t,n)=>{if(Cv(n)){var[r,i]=e(n.from,n.to,n.velocity);return vv(vv({},n),{},{from:r,velocity:i})}return n},t);return n<1?gv((e,t)=>Cv(t)&&r[e]!=null?vv(vv({},t),{},{velocity:Sv(t.velocity,r[e].velocity,n),from:Sv(t.from,r[e].from,n)}):t,t):wv(e,r,n-1)};function Tv(e,t,n,r,i,a){var o,s=r.reduce((n,r)=>vv(vv({},n),{},{[r]:{from:e[r],velocity:0,to:t[r]}}),{}),c=()=>gv((e,t)=>t.from,s),l=()=>!Object.values(s).filter(Cv).length,u=null,d=r=>{o||=r;var f=(r-o)/n.dt;s=wv(n,s,f),i(vv(vv(vv({},e),t),c())),o=r,l()||(u=a.setTimeout(d))};return()=>(u=a.setTimeout(d),()=>{var e;(e=u)==null||e()})}function Ev(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:vv(vv({},n),{},{[r]:[i,a]})},{}),l,u=i=>{l||=i;var d=(i-l)/r,f=gv((e,t)=>Sv(...t,n(d)),c);if(a(vv(vv(vv({},e),t),f)),d<1)s=o.setTimeout(u);else{var p=gv((e,t)=>Sv(...t,n(1)),c);a(vv(vv(vv({},e),t),p))}};return()=>(s=o.setTimeout(u),()=>{var e;(e=s)==null||e()})}var Dv=(e,t,n,r,i,a)=>{var o=hv(e,t);return n==null?()=>(i(vv(vv({},e),t)),()=>{}):n.isStepper===!0?Tv(e,t,n,o,i,a):Ev(e,t,n,r,o,i,a)},Ov=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],kv=(e,t)=>e.map((e,n)=>e*t**n).reduce((e,t)=>e+t),Av=(e,t)=>n=>kv(Ov(e,t),n),jv=(e,t)=>n=>kv([...Ov(e,t).map((e,t)=>e*t).slice(1),0],n),Mv=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]]},Nv=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=Mv(e[0]);if(t)return t}return e.length===4?e:[0,0,1,1]},Pv=(e,t,n,r)=>{var i=Av(e,n),a=Av(t,r),o=jv(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},Fv=function(){return Pv(...Nv(...arguments))},Iv=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},Lv=e=>{if(typeof e==`string`)switch(e){case`ease`:case`ease-in-out`:case`ease-out`:case`ease-in`:case`linear`:return Fv(e);case`spring`:return Iv();default:if(e.split(`(`)[0]===`cubic-bezier`)return Fv(e)}return typeof e==`function`?e:null};function Rv(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 zv=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 Bv(){return Rv(new zv)}var Vv=(0,F.createContext)(Bv);function Hv(e,t){var n=(0,F.useContext)(Vv);return(0,F.useMemo)(()=>t??n(e),[e,t,n])}var Uv={begin:0,duration:1e3,easing:`ease`,isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}},Wv={t:0},Gv={t:1};function Kv(e){var t=yl(e,Uv),{isActive:n,canBegin:r,duration:i,easing:a,begin:o,onAnimationEnd:s,onAnimationStart:c,children:l}=t,u=T_(),d=n===`auto`?!w_.isSsr&&!u:n,f=Hv(t.animationId,t.animationManager),[p,m]=(0,F.useState)(d?Wv:Gv),h=(0,F.useRef)(null);return(0,F.useEffect)(()=>{d||m(Gv)},[d]),(0,F.useEffect)(()=>{if(!d||!r)return Jc;var e=Dv(Wv,Gv,Lv(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 qv(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`animation-`,n=(0,F.useRef)(Hc(t)),r=(0,F.useRef)(e);return r.current!==e&&(n.current=Hc(t),r.current=e),n.current}var Jv=[`radius`],Yv=[`radius`],Xv,Zv,Qv,$v,ey,ty,ny,ry,iy,ay;function oy(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 sy(e){for(var t=1;t{var a=Pc(n),o=Pc(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=Fc(Xv||=my([`M`,`,`,``]),e,t+c*f[0]),f[0]>0&&(d+=Fc(Zv||=my([`A `,`,`,`,0,0,`,`,`,`,`,``]),f[0],f[0],u,e+l*f[0],t)),d+=Fc(Qv||=my([`L `,`,`,``]),e+n-l*f[1],t),f[1]>0&&(d+=Fc($v||=my([`A `,`,`,`,0,0,`,`, + `,`,`,``]),f[1],f[1],u,e+n,t+c*f[1])),d+=Fc(ey||=my([`L `,`,`,``]),e+n,t+r-c*f[2]),f[2]>0&&(d+=Fc(ty||=my([`A `,`,`,`,0,0,`,`, + `,`,`,``]),f[2],f[2],u,e+n-l*f[2],t+r)),d+=Fc(ny||=my([`L `,`,`,``]),e+l*f[3],t+r),f[3]>0&&(d+=Fc(ry||=my([`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=Fc(iy||=my(`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=Fc(ay||=my([`M `,`,`,` h `,` v `,` h `,` Z`]),e,t,n,r,-n);return d},gy={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:`ease`},_y=e=>{var t=yl(e,gy),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=qv((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=Uo(t),{radius:C}=S,w=fy(S,Jv);return F.createElement(`path`,dy({},w,{x:Pc(a),y:Pc(o),width:Pc(s),height:Pc(c),radius:typeof l==`number`?l:void 0,className:x,d:hy(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=mv([`strokeDasharray`],f,typeof d==`string`?d:gy.animationEasing);return F.createElement(Kv,{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=Uo(t),{radius:h}=p,b=fy(p,Yv);return F.createElement(`path`,dy({},b,{radius:typeof l==`number`?l:void 0,className:x,d:hy(u,d,r,i,l),ref:n,style:sy(sy({},f),t.style)}))})};function vy(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 yy(e){for(var t=1;te*180/Math.PI,Ty=(e,t,n,r)=>({x:e+Math.cos(-Cy*r)*n,y:t+Math.sin(-Cy*r)*n}),Ey=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},Dy=(e,t)=>{var{x:n,y:r}=e,{x:i,y:a}=t;return Math.sqrt((n-i)**2+(r-a)**2)},Oy=(e,t)=>{var{x:n,y:r}=e,{cx:i,cy:a}=t,o=Dy({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:wy(c),angleInRadian:c}},ky=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}},Ay=(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},jy=(e,t)=>{var{relativeX:n,relativeY:r}=e,{radius:i,angle:a}=Oy({x:n,y:r},t),{innerRadius:o,outerRadius:s}=t;if(is||i===0)return null;var{startAngle:c,endAngle:l}=ky(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?yy(yy({},t),{},{radius:i,angle:Ay(u,t)}):null};function My(e){var{cx:t,cy:n,radius:r,startAngle:i,endAngle:a}=e;return{points:[Ty(t,n,r,i),Ty(t,n,r,a)],cx:t,cy:n,radius:r,startAngle:i,endAngle:a}}var Ny,Py,Fy,Iy,Ly,Ry,zy;function By(){return By=Object.assign?Object.assign.bind():function(e){for(var t=1;tLc(t-e)*Math.min(Math.abs(t-e),359.999),Uy=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)/Cy,d=c?i:i+a*u,f=Ty(t,n,l,d),p=Ty(t,n,r,d),m=c?i-a*u:i;return{center:f,circleTangency:p,lineTangency:Ty(t,n,l*Math.cos(u*Cy),m),theta:u}},Wy=e=>{var{cx:t,cy:n,innerRadius:r,outerRadius:i,startAngle:a,endAngle:o}=e,s=Hy(a,o),c=a+s,l=Ty(t,n,i,a),u=Ty(t,n,i,c),d=Fc(Ny||=Vy([`M `,`,`,` + A `,`,`,`,0, + `,`,`,`, + `,`,`,` + `]),l.x,l.y,i,i,+(Math.abs(s)>180),+(a>c),u.x,u.y);if(r>0){var f=Ty(t,n,r,a),p=Ty(t,n,r,c);d+=Fc(Py||=Vy([`L `,`,`,` + A `,`,`,`,0, + `,`,`,`, + `,`,`,` Z`]),p.x,p.y,r,r,+(Math.abs(s)>180),+(a<=c),f.x,f.y)}else d+=Fc(Fy||=Vy([`L `,`,`,` Z`]),t,n);return d},Gy=e=>{var{cx:t,cy:n,innerRadius:r,outerRadius:i,cornerRadius:a,forceCornerRadius:o,cornerIsExternal:s,startAngle:c,endAngle:l}=e,u=Lc(l-c),{circleTangency:d,lineTangency:f,theta:p}=Uy({cx:t,cy:n,radius:i,angle:c,sign:u,cornerRadius:a,cornerIsExternal:s}),{circleTangency:m,lineTangency:h,theta:g}=Uy({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?Fc(Iy||=Vy([`M `,`,`,` + a`,`,`,`,0,0,1,`,`,0 + a`,`,`,`,0,0,1,`,`,0 + `]),f.x,f.y,a,a,a*2,a,a,-a*2):Wy({cx:t,cy:n,innerRadius:r,outerRadius:i,startAngle:c,endAngle:l});var v=Fc(Ly||=Vy([`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}=Uy({cx:t,cy:n,radius:r,angle:c,sign:u,isExternal:!0,cornerRadius:a,cornerIsExternal:s}),{circleTangency:S,lineTangency:C,theta:w}=Uy({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+=Fc(Ry||=Vy([`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+=Fc(zy||=Vy([`L`,`,`,`Z`]),t,n);return v},Ky={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},qy=e=>{var t=yl(e,Ky),{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?Gy({cx:n,cy:r,innerRadius:i,outerRadius:a,cornerRadius:Math.min(m,p/2),forceCornerRadius:s,cornerIsExternal:c,startAngle:l,endAngle:u}):Wy({cx:n,cy:r,innerRadius:i,outerRadius:a,startAngle:l,endAngle:u});return F.createElement(`path`,By({},Uo(t),{className:f,d:h}))};function Jy(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(ul(t)){if(e===`centric`){var{cx:r,cy:i,innerRadius:a,outerRadius:o,angle:s}=t,c=Ty(r,i,a,s),l=Ty(r,i,o,s);return[{x:c.x,y:c.y},{x:l.x,y:l.y}]}return My(t)}}var Yy=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=ku();function n(e){return t.isSymbol(e)?NaN:Number(e)}e.toNumber=n})),Xy=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Yy();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})),Zy=M((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Nu(),n=Xy();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=Zy().range})),$y=e=>e.chartData,eb=K([$y],e=>{var t=e.chartData==null?0:e.chartData.length-1;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),tb=(e,t,n,r)=>r?eb(e):$y(e),nb=(e,t,n)=>n?eb(e):$y(e),rb=K([tb],e=>{var{chartData:t,dataStartIndex:n,dataEndIndex:r}=e;return t==null?[]:t.slice(n,r+1)});K([eb],e=>{var{chartData:t,dataStartIndex:n,dataEndIndex:r}=e;return t==null?[]:t.slice(n,r+1)});var ib=K([$y],e=>{var{chartData:t,dataStartIndex:n,dataEndIndex:r}=e;return t==null?[]:t.slice(n,r+1)});function ab(e){if(Array.isArray(e)&&e.length===2){var[t,n]=e;if(J(t)&&J(n))return!0}return!1}function ob(e,t,n){return n?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}function sb(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(ab(o))return o}}function cb(e,t,n){if(!(!n&&t==null)){if(typeof e==`function`&&t!=null)try{var r=e(t,n);if(ab(r))return ob(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`&&om.test(i)){var c=om.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`&&sm.test(a)){var u=sm.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(ab(f))return t==null?f:ob(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 lb(e){return e===0?1:Math.floor(new Q.default(e).abs().log(10).toNumber())+1}function ub(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 db=e=>{var[t,n]=e,[r,i]=[t,n];return t>n&&([r,i]=[n,t]),[r,i]},fb=(e,t,n)=>{if(e.lte(0))return new Q.default(0);var r=lb(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()))},pb=(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()))},mb=(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(lb(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]:fb;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?hb(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))})},gb=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]=db([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 mb(s,r,i);var{step:u,tickMin:d,tickMax:f}=hb(s,c,o,i,0,a===`snap125`?pb:fb),p=ub(d,f.add(new Q.default(.1).mul(u)),u);return t>n?p.reverse():p},_b=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]=db([n,r]);if(o===-1/0||s===1/0)return[n,r];if(o===s)return[o];var c=a===`snap125`?pb:fb,l=Math.max(t,2),u=c(new Q.default(s).sub(o).div(l-1),i,0),d=[...ub(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},vb=e=>e.rootProps.maxBarSize,yb=e=>e.rootProps.barGap,bb=e=>e.rootProps.barCategoryGap,xb=e=>e.rootProps.barSize,Sb=e=>e.rootProps.stackOffset,Cb=e=>e.rootProps.reverseStackOrder,wb=e=>e.options.chartName,Tb=e=>e.rootProps.syncId,Eb=e=>e.rootProps.syncMethod,Db=e=>e.options.eventEmitter,Ob=e=>e.rootProps.baseValue,kb={grid:-100,barBackground:-50,area:100,cursorRectangle:200,bar:300,line:400,axis:500,scatter:600,activeBar:1e3,cursorLine:1100,activeDot:1200,label:2e3},Ab={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:kb.axis},jb={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:kb.axis},Mb=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t};function Nb(e,t,n){if(n!==`auto`)return n;if(e!=null)return qp(e,t)?`category`:`number`}function Pb(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 Fb(e){for(var t=1;t{if(t!=null)return e.polarAxis.angleAxis[t]},yh],(e,t)=>{if(e!=null)return e;var n=Nb(t,`angleAxis`,zb.type)??`category`;return Fb(Fb({},zb),{},{type:n})}),Hb=K([(e,t)=>e.polarAxis.radiusAxis[t],yh],(e,t)=>{if(e!=null)return e;var n=Nb(t,`radiusAxis`,Bb.type)??`category`;return Fb(Fb({},Bb),{},{type:n})}),Ub=e=>e.polarOptions,Wb=K([pm,mm,Am],Ey),Gb=K([Ub,Wb],(e,t)=>{if(e!=null)return Uc(e.innerRadius,t,0)}),Kb=K([Ub,Wb],(e,t)=>{if(e!=null)return Uc(e.outerRadius,t,t*.8)}),qb=K([Ub],e=>{if(e==null)return[0,0];var{startAngle:t,endAngle:n}=e;return[t,n]});K([Vb,qb],Mb);var Jb=K([Wb,Gb,Kb],(e,t,n)=>{if(!(e==null||t==null||n==null))return[t,n]});K([Hb,Jb],Mb);var Yb=K([X,Ub,Gb,Kb,pm,mm],(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:Uc(o,i,i/2),cy:Uc(s,a,a/2),innerRadius:n,outerRadius:r,startAngle:c,endAngle:l,clockWise:!1}}}),Xb=(e,t)=>t,Zb=(e,t,n)=>n;function Qb(e){return e?.id}function $b(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=Qb(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 ex(e){return`stackId`in e&&e.stackId!=null&&e.dataKey!=null}var tx=(e,t)=>e===t?!0:e==null||t==null?!1:e[0]===t[0]&&e[1]===t[1];function nx(e,t){return Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t}function rx(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`},ax=e=>e.tooltip.settings.axisId;function ox(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 sx=(e,t)=>{if(t!=null)switch(e){case`linear`:if(!ab(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 cx(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function lx(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function ux(e){let t,n,r;e.length===2?(t=e===cx||e===lx?e:dx,n=e,r=e):(t=cx,n=(t,n)=>cx(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 dx(){return 0}function fx(e){return e===null?NaN:+e}function*px(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 mx=ux(cx),hx=mx.right;mx.left,ux(fx).center;var gx=class extends Map{constructor(e,t=bx){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(_x(this,e))}has(e){return super.has(_x(this,e))}set(e,t){return super.set(vx(this,e),t)}delete(e){return super.delete(yx(this,e))}};function _x({_intern:e,_key:t},n){let r=t(n);return e.has(r)?e.get(r):n}function vx({_intern:e,_key:t},n){let r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function yx({_intern:e,_key:t},n){let r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function bx(e){return typeof e==`object`&&e?e.valueOf():e}function xx(e=cx){if(e===cx)return Sx;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 Sx(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et))}var Cx=Math.sqrt(50),wx=Math.sqrt(10),Tx=Math.sqrt(2);function Ex(e,t,n){let r=(t-e)/Math.max(0,n),i=Math.floor(Math.log10(r)),a=r/10**i,o=a>=Cx?10:a>=wx?5:a>=Tx?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 jx(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 Mx(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?Sx:xx(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));Mx(e,t,u,d,i)}let a=e[t],o=n,s=r;for(Nx(e,n,t),i(e[r],a)>0&&Nx(e,n,r);o0;)--s}i(e[n],a)===0?Nx(e,n,s):(++s,Nx(e,s,r)),s<=t&&(n=s+1),t<=s&&(r=s-1)}return e}function Nx(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function Px(e,t,n){if(e=Float64Array.from(px(e,n)),!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return jx(e);if(t>=1)return Ax(e);var r,i=(r-1)*t,a=Math.floor(i),o=Ax(Mx(e,a).subarray(0,a+1));return o+(jx(e.subarray(a+1))-o)*(i-a)}}function Fx(e,t,n=fx){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 Ix(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?fS(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?fS(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=$x.exec(e))?new hS(t[1],t[2],t[3],1):(t=eS.exec(e))?new hS(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=tS.exec(e))?fS(t[1],t[2],t[3],t[4]):(t=nS.exec(e))?fS(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=rS.exec(e))?SS(t[1],t[2]/100,t[3]/100,1):(t=iS.exec(e))?SS(t[1],t[2]/100,t[3]/100,t[4]):aS.hasOwnProperty(e)?dS(aS[e]):e===`transparent`?new hS(NaN,NaN,NaN,0):null}function dS(e){return new hS(e>>16&255,e>>8&255,e&255,1)}function fS(e,t,n,r){return r<=0&&(e=t=n=NaN),new hS(e,t,n,r)}function pS(e){return e instanceof Kx||(e=uS(e)),e?(e=e.rgb(),new hS(e.r,e.g,e.b,e.opacity)):new hS}function mS(e,t,n,r){return arguments.length===1?pS(e):new hS(e,t,n,r??1)}function hS(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Wx(hS,mS,Gx(Kx,{brighter(e){return e=e==null?Jx:Jx**+e,new hS(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?qx:qx**+e,new hS(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new hS(bS(this.r),bS(this.g),bS(this.b),yS(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:gS,formatHex:gS,formatHex8:_S,formatRgb:vS,toString:vS}));function gS(){return`#${xS(this.r)}${xS(this.g)}${xS(this.b)}`}function _S(){return`#${xS(this.r)}${xS(this.g)}${xS(this.b)}${xS((isNaN(this.opacity)?1:this.opacity)*255)}`}function vS(){let e=yS(this.opacity);return`${e===1?`rgb(`:`rgba(`}${bS(this.r)}, ${bS(this.g)}, ${bS(this.b)}${e===1?`)`:`, ${e})`}`}function yS(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function bS(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function xS(e){return e=bS(e),(e<16?`0`:``)+e.toString(16)}function SS(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new TS(e,t,n,r)}function CS(e){if(e instanceof TS)return new TS(e.h,e.s,e.l,e.opacity);if(e instanceof Kx||(e=uS(e)),!e)return new TS;if(e instanceof TS)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 TS(o,s,c,e.opacity)}function wS(e,t,n,r){return arguments.length===1?CS(e):new TS(e,t,n,r??1)}function TS(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Wx(TS,wS,Gx(Kx,{brighter(e){return e=e==null?Jx:Jx**+e,new TS(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?qx:qx**+e,new TS(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 hS(OS(e>=240?e-240:e+120,i,r),OS(e,i,r),OS(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new TS(ES(this.h),DS(this.s),DS(this.l),yS(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=yS(this.opacity);return`${e===1?`hsl(`:`hsla(`}${ES(this.h)}, ${DS(this.s)*100}%, ${DS(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function ES(e){return e=(e||0)%360,e<0?e+360:e}function DS(e){return Math.max(0,Math.min(1,e||0))}function OS(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 kS=e=>()=>e;function AS(e,t){return function(n){return e+n*t}}function jS(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function MS(e){return(e=+e)==1?NS:function(t,n){return n-t?jS(t,n,e):kS(isNaN(t)?n:t)}}function NS(e,t){var n=t-e;return n?AS(e,n):kS(isNaN(e)?t:e)}var PS=(function e(t){var n=MS(t);function r(e,t){var r=n((e=mS(e)).r,(t=mS(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=NS(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 FS(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:zS(r,i)})),n=HS.lastIndex;return nt&&(n=e,e=t,t=n),function(n){return Math.max(e,Math.min(t,n))}}function tC(e,t,n){var r=e[0],i=e[1],a=t[0],o=t[1];return i2?nC:tC,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),zS))(n)))},d.domain=function(t){return arguments.length?(e=Array.from(t,XS),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=qS,u()},d.clamp=function(e){return arguments.length?(o=e?!0:QS,u()):o!==QS},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 aC(){return iC()(QS,QS)}function oC(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString(`en`).replace(/,/g,``):e.toString(10)}function sC(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 cC(e){return e=sC(Math.abs(e)),e?e[1]:NaN}function lC(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 uC(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}var dC=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function fC(e){if(!(t=dC.exec(e)))throw Error(`invalid format: `+e);var t;return new pC({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]})}fC.prototype=pC.prototype;function pC(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+``}pC.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 mC(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 hC;function gC(e,t){var n=sC(e,t);if(!n)return hC=void 0,e.toPrecision(t);var r=n[0],i=n[1],a=i-(hC=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`)+sC(e,Math.max(0,t+a-1))[0]}function _C(e,t){var n=sC(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 vC={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+``,d:oC,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)=>_C(e*100,t),r:_C,s:gC,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function yC(e){return e}var bC=Array.prototype.map,xC=[`y`,`z`,`a`,`f`,`p`,`n`,`µ`,`m`,``,`k`,`M`,`G`,`T`,`P`,`E`,`Z`,`Y`];function SC(e){var t=e.grouping===void 0||e.thousands===void 0?yC:lC(bC.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?yC:uC(bC.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=fC(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`):vC[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=vC[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=mC(e)),w&&+e==0&&f!==`+`&&(w=!1),n=(w?f===`(`?f:s:f===`-`||f===`(`?``:f)+n,r=(y===`s`&&!isNaN(e)&&hC!==void 0?xC[8+hC/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(cC(t)/3)))*3,r=10**-n,i=l((e=fC(e),e.type=`f`,e),{suffix:xC[8+n/3]});return function(e){return i(r*e)}}return{format:l,formatPrefix:u}}var CC,wC,TC;EC({thousands:`,`,grouping:[3],currency:[`$`,``]});function EC(e){return CC=SC(e),wC=CC.format,TC=CC.formatPrefix,CC}function DC(e){return Math.max(0,-cC(Math.abs(e)))}function OC(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(cC(t)/3)))*3-cC(Math.abs(e)))}function kC(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,cC(t)-cC(e))+1}function AC(e,t,n,r){var i=kx(e,t,n),a;switch(r=fC(r??`,f`),r.type){case`s`:var o=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(a=OC(i,o))&&(r.precision=a),TC(r,o);case``:case`e`:case`g`:case`p`:case`r`:r.precision==null&&!isNaN(a=kC(i,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=a-(r.type===`e`));break;case`f`:case`%`:r.precision==null&&!isNaN(a=DC(i))&&(r.precision=a-(r.type===`%`)*2);break}return wC(r)}function jC(e){var t=e.domain;return e.ticks=function(e){var n=t();return Dx(n[0],n[n.length-1],e??10)},e.tickFormat=function(e,n){var r=t();return AC(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=Ox(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 MC(){var e=aC();return e.copy=function(){return rC(e,MC())},Lx.apply(e,arguments),jC(e)}function NC(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,XS),n):e.slice()},n.unknown=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return NC(e).unknown(t)},e=arguments.length?Array.from(e,XS):[0,1],jC(n)}function PC(e,t){e=e.slice();var n=0,r=e.length-1,i=e[n],a=e[r],o;return ae**+t}function VC(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 HC(e){return(t,n)=>-e(-t,n)}function UC(e){let t=e(FC,IC),n=t.domain,r=10,i,a;function o(){return i=VC(r),a=BC(r),n()[0]<0?(i=HC(i),a=HC(a),e(LC,RC)):e(FC,IC),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=fC(n)).precision==null&&(n.trim=!0),n=wC(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(PC(n(),{floor:e=>a(Math.floor(i(e))),ceil:e=>a(Math.ceil(i(e)))})),t}function WC(){let e=UC(iC()).domain([1,10]);return e.copy=()=>rC(e,WC()).base(e.base()),Lx.apply(e,arguments),e}function GC(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function KC(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function qC(e){var t=1,n=e(GC(t),KC(t));return n.constant=function(n){return arguments.length?e(GC(t=+n),KC(t)):t},jC(n)}function JC(){var e=qC(iC());return e.copy=function(){return rC(e,JC()).constant(e.constant())},Lx.apply(e,arguments)}function YC(e){return function(t){return t<0?-((-t)**+e):t**+e}}function XC(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function ZC(e){return e<0?-e*e:e*e}function QC(e){var t=e(QS,QS),n=1;function r(){return n===1?e(QS,QS):n===.5?e(XC,ZC):e(YC(n),YC(1/n))}return t.exponent=function(e){return arguments.length?(n=+e,r()):n},jC(t)}function $C(){var e=QC(iC());return e.copy=function(){return rC(e,$C()).exponent(e.exponent())},Lx.apply(e,arguments),e}function ew(){return $C.apply(null,arguments).exponent(.5)}function tw(e){return Math.sign(e)*e*e}function nw(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function rw(){var e=aC(),t=[0,1],n=!1,r;function i(t){var i=nw(e(t));return isNaN(i)?r:n?Math.round(i):i}return i.invert=function(t){return e.invert(tw(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,XS)).map(tw)),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 rw(e.domain(),t).round(n).clamp(e.clamp()).unknown(r)},Lx.apply(i,arguments),jC(i)}function iw(){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 aw().domain([e,t]).range(i).unknown(a)},Lx.apply(jC(o),arguments)}function ow(){var e=[.5],t=[0,1],n,r=1;function i(i){return i!=null&&i<=i?t[hx(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 ow().domain(e).range(t).unknown(n)},Lx.apply(i,arguments)}var sw=new Date,cw=new Date;function lw(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(slw(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)=>(sw.setTime(+t),cw.setTime(+r),e(sw),e(cw),Math.floor(n(sw,cw))),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 uw=lw(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);uw.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?lw(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):uw),uw.range;var dw=1e3,fw=dw*60,pw=fw*60,mw=pw*24,hw=mw*7,gw=mw*30,_w=mw*365,vw=lw(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*dw)},(e,t)=>(t-e)/dw,e=>e.getUTCSeconds());vw.range;var yw=lw(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*dw)},(e,t)=>{e.setTime(+e+t*fw)},(e,t)=>(t-e)/fw,e=>e.getMinutes());yw.range;var bw=lw(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*fw)},(e,t)=>(t-e)/fw,e=>e.getUTCMinutes());bw.range;var xw=lw(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*dw-e.getMinutes()*fw)},(e,t)=>{e.setTime(+e+t*pw)},(e,t)=>(t-e)/pw,e=>e.getHours());xw.range;var Sw=lw(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*pw)},(e,t)=>(t-e)/pw,e=>e.getUTCHours());Sw.range;var Cw=lw(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*fw)/mw,e=>e.getDate()-1);Cw.range;var ww=lw(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/mw,e=>e.getUTCDate()-1);ww.range;var Tw=lw(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/mw,e=>Math.floor(e/mw));Tw.range;function Ew(e){return lw(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())*fw)/hw)}var Dw=Ew(0),Ow=Ew(1),kw=Ew(2),Aw=Ew(3),jw=Ew(4),Mw=Ew(5),Nw=Ew(6);Dw.range,Ow.range,kw.range,Aw.range,jw.range,Mw.range,Nw.range;function Pw(e){return lw(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)/hw)}var Fw=Pw(0),Iw=Pw(1),Lw=Pw(2),Rw=Pw(3),zw=Pw(4),Bw=Pw(5),Vw=Pw(6);Fw.range,Iw.range,Lw.range,Rw.range,zw.range,Bw.range,Vw.range;var Hw=lw(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());Hw.range;var Uw=lw(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());Uw.range;var Ww=lw(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());Ww.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:lw(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)}),Ww.range;var Gw=lw(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());Gw.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:lw(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)}),Gw.range;function Kw(e,t,n,r,i,a){let o=[[vw,1,dw],[vw,5,5*dw],[vw,15,15*dw],[vw,30,30*dw],[a,1,fw],[a,5,5*fw],[a,15,15*fw],[a,30,30*fw],[i,1,pw],[i,3,3*pw],[i,6,6*pw],[i,12,12*pw],[r,1,mw],[r,2,2*mw],[n,1,hw],[t,1,gw],[t,3,3*gw],[e,1,_w]];function s(e,t,n){let r=te).right(o,i);if(a===o.length)return e.every(kx(t/_w,n/_w,r));if(a===0)return uw.every(Math.max(kx(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=Qw($w(r.y,0,1)),o=a.getUTCDay(),a=o>4||o===0?Iw.ceil(a):Iw(a),a=ww.offset(a,(r.V-1)*7),r.y=a.getUTCFullYear(),r.m=a.getUTCMonth(),r.d=a.getUTCDate()+(r.w+6)%7):(a=Zw($w(r.y,0,1)),o=a.getDay(),a=o>4||o===0?Ow.ceil(a):Ow(a),a=Cw.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?Qw($w(r.y,0,1)).getUTCDay():Zw($w(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,Qw(r)):Zw(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 tT?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 fe(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 tT={"-":``,_:` `,0:`0`},nT=/^\s*\d+/,rT=/^%/,iT=/[\\^$*+?|[\]().{}]/g;function $(e,t,n){var r=e<0?`-`:``,i=(r?-e:e)+``,a=i.length;return r+(a[e.toLowerCase(),t]))}function cT(e,t,n){var r=nT.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function lT(e,t,n){var r=nT.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function uT(e,t,n){var r=nT.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function dT(e,t,n){var r=nT.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function fT(e,t,n){var r=nT.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function pT(e,t,n){var r=nT.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function mT(e,t,n){var r=nT.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function hT(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 gT(e,t,n){var r=nT.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function _T(e,t,n){var r=nT.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function vT(e,t,n){var r=nT.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function yT(e,t,n){var r=nT.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function bT(e,t,n){var r=nT.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function xT(e,t,n){var r=nT.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function ST(e,t,n){var r=nT.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function CT(e,t,n){var r=nT.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function wT(e,t,n){var r=nT.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function TT(e,t,n){var r=rT.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function ET(e,t,n){var r=nT.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function DT(e,t,n){var r=nT.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function OT(e,t){return $(e.getDate(),t,2)}function kT(e,t){return $(e.getHours(),t,2)}function AT(e,t){return $(e.getHours()%12||12,t,2)}function jT(e,t){return $(1+Cw.count(Ww(e),e),t,3)}function MT(e,t){return $(e.getMilliseconds(),t,3)}function NT(e,t){return MT(e,t)+`000`}function PT(e,t){return $(e.getMonth()+1,t,2)}function FT(e,t){return $(e.getMinutes(),t,2)}function IT(e,t){return $(e.getSeconds(),t,2)}function LT(e){var t=e.getDay();return t===0?7:t}function RT(e,t){return $(Dw.count(Ww(e)-1,e),t,2)}function zT(e){var t=e.getDay();return t>=4||t===0?jw(e):jw.ceil(e)}function BT(e,t){return e=zT(e),$(jw.count(Ww(e),e)+(Ww(e).getDay()===4),t,2)}function VT(e){return e.getDay()}function HT(e,t){return $(Ow.count(Ww(e)-1,e),t,2)}function UT(e,t){return $(e.getFullYear()%100,t,2)}function WT(e,t){return e=zT(e),$(e.getFullYear()%100,t,2)}function GT(e,t){return $(e.getFullYear()%1e4,t,4)}function KT(e,t){var n=e.getDay();return e=n>=4||n===0?jw(e):jw.ceil(e),$(e.getFullYear()%1e4,t,4)}function qT(e){var t=e.getTimezoneOffset();return(t>0?`-`:(t*=-1,`+`))+$(t/60|0,`0`,2)+$(t%60,`0`,2)}function JT(e,t){return $(e.getUTCDate(),t,2)}function YT(e,t){return $(e.getUTCHours(),t,2)}function XT(e,t){return $(e.getUTCHours()%12||12,t,2)}function ZT(e,t){return $(1+ww.count(Gw(e),e),t,3)}function QT(e,t){return $(e.getUTCMilliseconds(),t,3)}function $T(e,t){return QT(e,t)+`000`}function eE(e,t){return $(e.getUTCMonth()+1,t,2)}function tE(e,t){return $(e.getUTCMinutes(),t,2)}function nE(e,t){return $(e.getUTCSeconds(),t,2)}function rE(e){var t=e.getUTCDay();return t===0?7:t}function iE(e,t){return $(Fw.count(Gw(e)-1,e),t,2)}function aE(e){var t=e.getUTCDay();return t>=4||t===0?zw(e):zw.ceil(e)}function oE(e,t){return e=aE(e),$(zw.count(Gw(e),e)+(Gw(e).getUTCDay()===4),t,2)}function sE(e){return e.getUTCDay()}function cE(e,t){return $(Iw.count(Gw(e)-1,e),t,2)}function lE(e,t){return $(e.getUTCFullYear()%100,t,2)}function uE(e,t){return e=aE(e),$(e.getUTCFullYear()%100,t,2)}function dE(e,t){return $(e.getUTCFullYear()%1e4,t,4)}function fE(e,t){var n=e.getUTCDay();return e=n>=4||n===0?zw(e):zw.ceil(e),$(e.getUTCFullYear()%1e4,t,4)}function pE(){return`+0000`}function mE(){return`%`}function hE(e){return+e}function gE(e){return Math.floor(e/1e3)}var _E,vE,yE;bE({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 bE(e){return _E=eT(e),vE=_E.format,_E.parse,yE=_E.utcFormat,_E.utcParse,_E}function xE(e){return new Date(e)}function SE(e){return e instanceof Date?+e:+new Date(+e)}function CE(e,t,n,r,i,a,o,s,c,l){var u=aC(),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)=>Px(e,r/t))},n.copy=function(){return NE(t).domain(e)},Rx.apply(n,arguments)}function PE(){var e=0,t=.5,n=1,r=1,i,a,o,s,c,l=QS,u,d=!1,f;function p(e){return isNaN(e=+e)?f:(e=.5+((e=+u(e))-a)*(r*eVx,scaleDiverging:()=>FE,scaleDivergingLog:()=>IE,scaleDivergingPow:()=>RE,scaleDivergingSqrt:()=>zE,scaleDivergingSymlog:()=>LE,scaleIdentity:()=>NC,scaleImplicit:()=>zx,scaleLinear:()=>MC,scaleLog:()=>WC,scaleOrdinal:()=>Bx,scalePoint:()=>Ux,scalePow:()=>$C,scaleQuantile:()=>iw,scaleQuantize:()=>aw,scaleRadial:()=>rw,scaleSequential:()=>OE,scaleSequentialLog:()=>kE,scaleSequentialPow:()=>jE,scaleSequentialQuantile:()=>NE,scaleSequentialSqrt:()=>ME,scaleSequentialSymlog:()=>AE,scaleSqrt:()=>ew,scaleSymlog:()=>JC,scaleThreshold:()=>ow,scaleTime:()=>wE,scaleUtc:()=>TE,tickFormat:()=>AC});function VE(e){var t=BE;if(e in t&&typeof t[e]==`function`)return t[e]();var n=`scale${Kc(e)}`;if(n in t&&typeof t[n]==`function`)return t[n]()}function HE(e,t,n){if(typeof e==`function`)return e.copy().domain(t).range(n);if(e!=null){var r=VE(e);if(r!=null)return r.domain(t).range(n),r}}function UE(e,t,n,r){if(!(n==null||r==null))return typeof e.scale==`function`?HE(e.scale,n,r):HE(t,n,r)}function WE(e){return`scale${Kc(e)}`}function GE(e){return WE(e)in BE}var KE=(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 GE(r)?r:`point`}};function qE(e,t){for(var n=0,r=e.length,i=e[0]t)?n=a+1:r=a}return n}function JE(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=qE(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 YE(e){if(e!=null)return`invert`in e&&typeof e.invert==`function`?e.invert.bind(e):JE(e,void 0)}var XE=Se(Qy());function ZE(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 QE(e){for(var t=1;te.cartesianAxis.xAxis[t],aD=(e,t)=>iD(e,t)??rD,oD={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:nD,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},sD=(e,t)=>e.cartesianAxis.yAxis[t],cD=(e,t)=>sD(e,t)??oD,lD={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:``},uD=(e,t)=>e.cartesianAxis.zAxis[t]??lD,dD=(e,t,n)=>{switch(t){case`xAxis`:return aD(e,n);case`yAxis`:return cD(e,n);case`zAxis`:return uD(e,n);case`angleAxis`:return Vb(e,n);case`radiusAxis`:return Hb(e,n);default:throw Error(`Unexpected axis type: ${t}`)}},fD=(e,t,n)=>{switch(t){case`xAxis`:return aD(e,n);case`yAxis`:return cD(e,n);default:throw Error(`Unexpected axis type: ${t}`)}},pD=(e,t,n)=>{switch(t){case`xAxis`:return aD(e,n);case`yAxis`:return cD(e,n);case`angleAxis`:return Vb(e,n);case`radiusAxis`:return Hb(e,n);default:throw Error(`Unexpected axis type: ${t}`)}},mD=e=>e.graphicalItems.cartesianItems.some(e=>e.type===`bar`)||e.graphicalItems.polarItems.some(e=>e.type===`radialBar`);function hD(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 gD=e=>e.graphicalItems.cartesianItems,_D=K([Xb,Zb],hD),vD=(e,t,n)=>e.filter(n).filter(e=>t?.includeHidden===!0?!0:!e.hide),yD=K([gD,dD,_D],vD,{memoizeOptions:{resultEqualityCheck:nx}}),bD=K([yD],e=>e.filter(e=>e.type===`area`||e.type===`bar`).filter(ex)),xD=e=>e.filter(e=>!(`stackId`in e)||e.stackId===void 0),SD=K([yD],xD),CD=e=>e.map(e=>e.data).filter(Boolean).flat(1),wD=K([yD],e=>e.some(e=>!e.data)),TD=K([yD],CD,{memoizeOptions:{resultEqualityCheck:nx}}),ED=(e,t)=>{var{chartData:n=[],dataStartIndex:r,dataEndIndex:i}=t;return e.length>0?e:n.slice(r,i+1)},DD=K([TD,tb],ED),OD=(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)})),kD=(e,t,n,r,i,a)=>{var{chartData:o=[],dataStartIndex:s,dataEndIndex:c}=r,l=OD(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},AD=K([DD,dD,yD,tb,wD,TD],kD);function jD(e){if(Bc(e)||e instanceof Date){var t=Number(e);if(J(t))return t}}function MD(e){if(Array.isArray(e)){var t=[jD(e[0]),jD(e[1])];return ab(t)?t:void 0}var n=jD(e);if(n!=null)return[n,n]}function ND(e){return e.map(jD).filter(qc)}function PD(e,t){var n=jD(e),r=jD(t);return n==null&&r==null?0:n==null?-1:r==null?1:n-r}var FD=K([AD],e=>e?.map(e=>e.value).sort(PD));function ID(e,t){switch(e){case`xAxis`:return t.direction===`x`;case`yAxis`:return t.direction===`y`;default:return!1}}function LD(e,t,n){if(!n||!n.length)return[];var r;if(typeof t==`number`&&!Rc(t))r=t;else if(Array.isArray(t)){var i=ND(t);i.length>0&&(r=Math.max(...i))}return r==null?[]:ND(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 RD=e=>pD(e,ix(e),ax(e)),zD=K([RD],e=>e?.dataKey),BD=K([bD,tb,RD],$b),VD=(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:Qp(e,o.map(Qb),n),graphicalItems:o}]}))},HD=K([BD,bD,Sb,Cb],VD),UD=(e,t,n,r)=>{var{dataStartIndex:i,dataEndIndex:a}=t;if(r==null&&n!==`zAxis`){var o=am(e,i,a);if(!(o!=null&&o[0]===0&&o[1]===0))return o}},WD=K([dD],e=>e.allowDataOverflow),GD=e=>{if(e==null||!(`domain`in e))return nD;if(e.domain!=null)return e.domain;if(`ticks`in e&&e.ticks!=null){if(e.type===`number`){var t=ND(e.ticks);return[Math.min(...t),Math.max(...t)]}if(e.type===`category`)return e.ticks.map(String)}return e?.domain??nD},KD=K([dD],GD),qD=K([KD,WD],sb),JD=K([HD,$y,Xb,qD],UD,{memoizeOptions:{resultEqualityCheck:tx}}),YD=e=>e.errorBars,XD=(e,t,n)=>e.flatMap(e=>t[e.id]).filter(Boolean).filter(e=>ID(n,e)),ZD=function(){var e=[...arguments].filter(Boolean);if(e.length!==0){var t=e.flat();return[Math.min(...t),Math.max(...t)]}},QD=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=>ID(i,e));n.forEach(n=>{var r=Y(n,t.dataKey??e.dataKey),i=LD(n,r,c);if(i.length>=2){var a=Math.min(...i),l=Math.max(...i);(o==null||as)&&(s=l)}var u=MD(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=MD(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]},$D=K([DD,dD,SD,YD,Xb,rb],QD,{memoizeOptions:{resultEqualityCheck:tx}});function eO(e){var{value:t}=e;if(Bc(t)||t instanceof Date)return t}var tO=(e,t,n)=>{var r=e.map(eO).filter(e=>e!=null);return n&&(t.dataKey==null||t.allowDuplicatedCategory&&Wc(r))?(0,XE.default)(0,e.length):t.allowDuplicatedCategory?r:Array.from(new Set(r))},nO=e=>e.referenceElements.dots,rO=(e,t,n)=>e.filter(e=>e.ifOverflow===`extendDomain`).filter(e=>t===`xAxis`?e.xAxisId===n:e.yAxisId===n),iO=K([nO,Xb,Zb],rO),aO=e=>e.referenceElements.areas,oO=K([aO,Xb,Zb],rO),sO=e=>e.referenceElements.lines,cO=K([sO,Xb,Zb],rO),lO=(e,t)=>{if(e!=null){var n=ND(e.map(e=>t===`xAxis`?e.x:e.y));if(n.length!==0)return[Math.min(...n),Math.max(...n)]}},uO=K(iO,Xb,lO),dO=(e,t)=>{if(e!=null){var n=ND(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)]}},fO=K([oO,Xb],dO);function pO(e){if(e.x!=null)return ND([e.x]);var t=e.segment?.map(e=>e.x);return t==null||t.length===0?[]:ND(t)}function mO(e){if(e.y!=null)return ND([e.y]);var t=e.segment?.map(e=>e.y);return t==null||t.length===0?[]:ND(t)}var hO=(e,t)=>{if(e!=null){var n=e.flatMap(e=>t===`xAxis`?pO(e):mO(e));if(n.length!==0)return[Math.min(...n),Math.max(...n)]}},gO=K(uO,K([cO,Xb],hO),fO,(e,t,n)=>ZD(e,n,t)),_O=(e,t,n,r,i,a,o,s)=>n??cb(t,o===`vertical`&&s===`xAxis`||o===`horizontal`&&s===`yAxis`?ZD(r,a,i):ZD(a,i),e.allowDataOverflow),vO=K([dD,KD,qD,JD,$D,gO,X,Xb],_O,{memoizeOptions:{resultEqualityCheck:tx}}),yO=[0,1],bO=(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=qp(t,a);return l&&s==null?(0,XE.default)(0,n?.length??0):c===`category`?tO(r,e,l):i===`expand`&&!l?yO:o}},xO=K([dD,X,DD,AD,Sb,Xb,vO],bO),SO=K([dD,mD,wb],KE),CO=(e,t,n)=>{var{niceTicks:r}=t;if(r!==`none`){var i=GD(t),a=Array.isArray(i)&&(i[0]===`auto`||i[1]===`auto`);if((r===`snap125`||r===`adaptive`)&&t!=null&&t.tickCount&&ab(e)){if(a)return gb(e,t.tickCount,t.allowDecimals,r);if(t.type===`number`)return _b(e,t.tickCount,t.allowDecimals,r)}if(r===`auto`&&n===`linear`&&t!=null&&t.tickCount){if(a&&ab(e))return gb(e,t.tickCount,t.allowDecimals,`adaptive`);if(t.type===`number`&&ab(e))return _b(e,t.tickCount,t.allowDecimals,`adaptive`)}}},wO=K([xO,pD,SO],CO),TO=(e,t,n,r)=>{if(r!==`angleAxis`&&e?.type===`number`&&ab(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},EO=K([dD,xO,wO,Xb],TO),DO=K(K(AD,dD,(e,t)=>{if(!(!t||t.type!==`number`)){var n=1/0,r=Array.from(ND(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=Uc(n,e*a),s=e*a/2;return s-o-(s-o)/a*o}return 0}),OO=(e,t,n)=>{var r=aD(e,t);return r==null||typeof r.padding!=`string`?0:DO(e,`xAxis`,t,n,r.padding)},kO=(e,t,n)=>{var r=cD(e,t);return r==null||typeof r.padding!=`string`?0:DO(e,`yAxis`,t,n,r.padding)},AO=K(aD,OO,(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}}),jO=K(cD,kO,(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}}),MO=K([Am,AO,Im,Fm,(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]}),NO=K([Am,X,jO,Im,Fm,(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]}),PO=(e,t,n,r)=>{switch(t){case`xAxis`:return MO(e,n,r);case`yAxis`:return NO(e,n,r);case`zAxis`:return uD(e,n)?.range;case`angleAxis`:return qb(e);case`radiusAxis`:return Jb(e,n);default:return}},FO=K([dD,PO],Mb),IO=K([dD,SO,K([SO,EO],sx),FO],UE),LO=(e,t,n,r)=>{if(!(n==null||n.dataKey==null)){var{type:i,scale:a}=n;if(qp(e,r)&&(i===`number`||a!==`auto`))return t.map(e=>e.value)}},RO=K([X,AD,pD,Xb],LO),zO=K([IO],ox);K([IO],YE),K([IO,FD],JE),K([yD,YD,Xb],XD);function BO(e,t){return e.idt.id)}var VO=(e,t)=>t,HO=(e,t,n)=>n,UO=K(_m,VO,HO,(e,t,n)=>e.filter(e=>e.orientation===t).filter(e=>e.mirror===n).sort(BO)),WO=K(vm,VO,HO,(e,t,n)=>e.filter(e=>e.orientation===t).filter(e=>e.mirror===n).sort(BO)),GO=(e,t)=>({width:e.width,height:t.height}),KO=(e,t)=>({width:typeof t.width==`number`?t.width:60,height:e.height}),qO=K(Am,aD,GO),JO=(e,t,n)=>{switch(t){case`top`:return e.top;case`bottom`:return n-e.bottom;default:return 0}},YO=(e,t,n)=>{switch(t){case`left`:return e.left;case`right`:return n-e.right;default:return 0}},XO=K(mm,Am,UO,VO,HO,(e,t,n,r,i)=>{var a={},o;return n.forEach(n=>{var s=GO(t,n);o??=JO(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}),ZO=K(pm,Am,WO,VO,HO,(e,t,n,r,i)=>{var a={},o;return n.forEach(n=>{var s=KO(t,n);o??=YO(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}),QO=K([Am,aD,(e,t)=>{var n=aD(e,t);if(n!=null)return XO(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}}}),$O=K([Am,cD,(e,t)=>{var n=cD(e,t);if(n!=null)return ZO(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}}}),ek=K(Am,cD,(e,t)=>({width:typeof t.width==`number`?t.width:60,height:e.height})),tk=(e,t,n)=>{switch(t){case`xAxis`:return qO(e,n).width;case`yAxis`:return ek(e,n).height;default:return}},nk=(e,t,n,r)=>{if(n!=null){var{allowDuplicatedCategory:i,type:a,dataKey:o}=n,s=qp(e,r),c=t.map(e=>e.value),l=c.filter(e=>e!=null);if(o&&s&&a===`category`&&i&&Wc(l))return c}},rk=K([X,AD,dD,Xb],nk),ik=K([X,fD,SO,zO,rk,RO,PO,wO,Xb],(e,t,n,r,i,a,o,s,c)=>{if(t!=null){var l=qp(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}}}),ak=K([X,pD,SO,zO,wO,PO,rk,RO,Xb],(e,t,n,r,i,a,o,s,c)=>{if(!(t==null||r==null)){var l=qp(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?Lc(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(qc):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(qc):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(qc):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(qc)}}),ok=K([X,pD,zO,PO,rk,RO,Xb],(e,t,n,r,i,a,o)=>{if(!(t==null||n==null||r==null||r[0]===r[1])){var s=qp(e,o),{tickCount:c}=t,l=0;return l=o===`angleAxis`&&r?.length>=2?Lc(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(qc):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(qc):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(qc)}}),sk=K(dD,zO,(e,t)=>{if(!(e==null||t==null))return QE(QE({},e),{},{scale:t})});K((e,t,n)=>uD(e,n),K([K([dD,SO,xO,FO],UE)],ox),(e,t)=>{if(!(e==null||t==null))return QE(QE({},e),{},{scale:t})});var ck=K([X,_m,vm],(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,uk=e=>e.options.validateTooltipEventTypes;function dk(e,t,n){if(e==null)return t;var r=e?`axis`:`item`;return n==null?t:n.includes(r)?r:t}function fk(e,t){return dk(t,lk(e),uk(e))}function pk(e){return G(t=>fk(t,e))}var mk=(e,t)=>{var n,r=Number(t);if(!(Rc(r)||t==null))return r>=0?e==null||(n=e[r])==null?void 0:n.value:void 0},hk=e=>e.tooltip.settings,gk={active:!1,index:null,dataKey:void 0,graphicalItemId:void 0,coordinate:void 0},_k=Gf({name:`tooltip`,initialState:{itemInteraction:{click:gk,hover:gk},axisInteraction:{click:gk,hover:gk},keyboardInteraction:gk,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=vf(e).tooltipItemPayloads.indexOf(Z(n));i>-1&&(e.tooltipItemPayloads[i]=Z(r))},prepare:q()},removeTooltipEntrySettings:{reducer(e,t){var n=vf(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:vk,replaceTooltipEntrySettings:yk,removeTooltipEntrySettings:bk,setTooltipSettingsState:xk,setActiveMouseOverItemIndex:Sk,mouseLeaveItem:Ck,mouseLeaveChart:wk,setActiveClickItemIndex:Tk,setMouseOverAxisIndex:Ek,setMouseClickAxisIndex:Dk,setSyncInteraction:Ok,setKeyboardInteraction:kk}=_k.actions,Ak=_k.reducer;function jk(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 Mk(e){for(var t=1;t{if(t==null)return gk;var i=Ik(e,t,n);if(i==null)return gk;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(Lk(i)){if(a)return Mk(Mk({},i),{},{active:!0})}else if(r!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:r,graphicalItemId:void 0};return Mk(Mk({},gk),{},{coordinate:i.coordinate})};function zk(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 Bk(e,t){var n=zk(e),r=t[0],i=t[1];return n===void 0?!1:n>=Math.min(r,i)&&n<=Math.max(r,i)}function Vk(e,t,n){if(n==null||t==null)return!0;var r=Y(e,t);return r==null||!ab(n)?!0:Bk(r,n)}var Hk=(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||Vk(l,n,r)?String(c):null},Uk=(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}}}},Wk=(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)},Gk=e=>e.options.tooltipPayloadSearcher,Kk=e=>e.tooltip;function qk(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 Jk(e){for(var t=1;te(t)}function tA(e){if(typeof e==`string`)return e}function nA(e){if(!(typeof e!=`object`||!e))return{name:`name`in e?Qk(e.name):void 0,unit:`unit`in e?$k(e.unit):void 0,dataKey:`dataKey`in e?eA(e.dataKey):void 0,payload:`payload`in e?e.payload:void 0,color:`color`in e?tA(e.color):void 0,fill:`fill`in e?tA(e.fill):void 0}}function rA(e,t){return e??t}var iA=(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=rA(d,s),m=Array.isArray(p)?zp(p,l,u):p,h=f?.dataKey??r,g=f?.nameKey,_=r&&Array.isArray(m)&&!Array.isArray(m[0])&&o===`axis`?Gc(m,r,i):a(m,t,c,g);return Array.isArray(_)?_.forEach(t=>{var n=nA(t),r=n?.name,i=n?.dataKey,a=n?.payload,o=Jk(Jk({},f),{},{name:r,unit:n?.unit,color:n?.color??f?.color,fill:n?.fill??f?.fill});e.push(lm({tooltipEntrySettings:o,dataKey:i,payload:a,value:Y(a,i),name:r==null?void 0:String(r)}))}):e.push(lm({tooltipEntrySettings:f,dataKey:h,payload:_,value:Y(_,h),name:Y(_,g)??f?.name})),e},[])}},aA=K([RD,mD,wb],KE),oA=K([K([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),RD,K([ix,ax],hD)],vD,{memoizeOptions:{resultEqualityCheck:nx}}),sA=K([oA],e=>e.filter(ex)),cA=K([oA],CD,{memoizeOptions:{resultEqualityCheck:nx}}),lA=K([oA],e=>e.some(e=>!e.data)),uA=K([cA,$y],ED),dA=K([sA,$y,RD],$b),fA=K([uA,RD,oA,$y,lA,cA],kD),pA=K([RD],GD),mA=K([pA,K([RD],e=>e.allowDataOverflow)],sb),hA=K([K([dA,K([oA],e=>e.filter(ex)),Sb,Cb],VD),$y,ix,mA],UD),gA=K([uA,RD,K([oA],xD),YD,ix,ib],QD,{memoizeOptions:{resultEqualityCheck:tx}}),_A=K([K([nO,ix,ax],rO),ix],lO),vA=K([K([aO,ix,ax],rO),ix],dO),yA=K([RD,X,uA,fA,Sb,ix,K([RD,pA,mA,hA,gA,K([_A,K([K([sO,ix,ax],rO),ix],hO),vA],ZD),X,ix],_O)],bO),bA=K([RD,yA,K([yA,RD,aA],CO),ix],TO),xA=e=>PO(e,ix(e),ax(e),!1),SA=K([RD,xA],Mb),CA=K([K([RD,aA,bA,SA],UE)],ox),wA=K([X,RD,aA,CA,xA,K([X,fA,RD,ix],nk),K([X,fA,RD,ix],LO),ix],(e,t,n,r,i,a,o,s)=>{if(t){var{type:c}=t,l=qp(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?Lc(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(qc):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(qc)}}}),TA=K([lk,uk,hk],(e,t,n)=>dk(n.shared,e,t)),EA=e=>e.tooltip.settings.trigger,DA=e=>e.tooltip.settings.defaultIndex,OA=K([Kk,TA,EA,DA],Rk),kA=K([OA,uA,zD,yA],Hk),AA=K([wA,kA],mk),jA=K([OA],e=>{if(e)return e.dataKey}),MA=K([OA],e=>{if(e)return e.graphicalItemId}),NA=K([Kk,TA,EA,DA],Wk),PA=K([OA,K([pm,mm,X,Am,wA,DA,NA],Uk)],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),FA=K([OA],e=>e?.active??!1),IA=K([K([NA,kA,$y,zD,AA,Gk,TA],iA)],e=>{if(e!=null){var t=e.map(e=>e.payload).filter(e=>e!=null);return Array.from(new Set(t))}});function LA(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 RA(e){for(var t=1;tG(RD),UA=()=>{var e=HA(),t=G(wA),n=G(CA);return cm(!e||!n?void 0:RA(RA({},e),{},{scale:n}),t)};function WA(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 GA(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}},XA=(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 GA(GA(GA({},r),Ty(r.cx,r.cy,o,a)),{},{angle:a,radius:o})}var s=i.coordinate,{angle:c}=r;return GA(GA(GA({},r),Ty(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 ZA(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 QA=(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(Lc(c-s)!==Lc(l-c)){var d=[];if(Lc(l-c)===Lc(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},$A=()=>G(wb),ej=(e,t)=>t,tj=(e,t,n)=>n,nj=(e,t,n,r)=>r,rj=K(wA,e=>(0,Fu.default)(e,e=>e.coordinate)),ij=K([Kk,ej,tj,nj],Rk),aj=K([ij,uA,zD,yA],Hk),oj=(e,t,n)=>{if(t!=null){var r=Kk(e);return t===`axis`?n===`hover`?r.axisInteraction.hover.dataKey:r.axisInteraction.click.dataKey:n===`hover`?r.itemInteraction.hover.dataKey:r.itemInteraction.click.dataKey}},sj=K([Kk,ej,tj,nj],Wk),cj=K([pm,mm,X,Am,wA,nj,sj],Uk),lj=K([ij,cj],(e,t)=>e.coordinate??t),uj=K([wA,aj],mk),dj=K([sj,aj,$y,zD,uj,Gk,ej],iA),fj=K([ij,aj],(e,t)=>({isActive:e.active&&t!=null,activeIndex:t})),pj=(e,t,n,r,i,a,o)=>{if(!(!e||!n||!r||!i)&&ZA(e,o)){var s=QA(dm(e,t),a,i,n,r),c=YA(t,i,s,e);return{activeIndex:String(s),activeCoordinate:c}}},mj=(e,t,n,r,i,a,o)=>{if(!(!e||!r||!i||!a||!n)){var s=jy(e,n);if(s){var c=QA(fm(s,t),o,a,r,i),l=XA(t,a,c,s);return{activeIndex:String(c),activeCoordinate:l}}}},hj=(e,t,n,r,i,a,o,s)=>{if(!(!e||!t||!r||!i||!a))return t===`horizontal`||t===`vertical`?pj(e,t,r,i,a,o,s):mj(e,t,n,r,i,a,o)},gj=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}}),_j=K(e=>e.zIndex.zIndexMap,e=>{var t=Object.keys(e).map(e=>parseInt(e,10)).concat(Object.values(kb));return Array.from(new Set(t)).sort((e,t)=>e-t)},{memoizeOptions:{resultEqualityCheck:rx}});function vj(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 yj(e){for(var t=1;tyj(yj({},e),{},{[t]:{element:void 0,panoramaElement:void 0,consumers:0}}),{})},wj=new Set(Object.values(kb));function Tj(e){return wj.has(e)}var Ej=Gf({name:`zIndex`,initialState:Cj,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&&!Tj(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:Dj,unregisterZIndexPortal:Oj,registerZIndexPortalElement:kj,unregisterZIndexPortalElement:Aj}=Ej.actions,jj=Ej.reducer;function Mj(e){var{zIndex:t,children:n}=e,r=bh()&&t!==void 0&&t!==0,i=Pm(),a=(0,F.useRef)(void 0),o=(0,F.useRef)(new Set),s=W(),c=G(e=>gj(e,t,i));if((0,F.useLayoutEffect)(()=>{if(!r){var e=o.current;e.forEach(e=>{s(Oj({zIndex:e}))}),e.clear(),a.current=void 0;return}if(o.current.has(t)||(s(Dj({zIndex:t})),o.current.add(t)),c){a.current=c;var n=o.current;n.forEach(e=>{e!==t&&(s(Oj({zIndex:e})),n.delete(e))})}},[s,t,r,c]),(0,F.useLayoutEffect)(()=>{var e=o.current;return()=>{e.forEach(e=>{s(Oj({zIndex:e}))}),e.clear()}},[s]),!r)return n;var l=c??a.current;return l?(0,Ug.createPortal)(n,l):null}function Nj(){return Nj=Object.assign?Object.assign.bind():function(e){for(var t=1;t(0,F.useContext)(Hj),Wj=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(!Rc(n))return e[n]}},Yj=Gf({name:`options`,initialState:{chartName:``,tooltipPayloadSearcher:()=>void 0,eventEmitter:void 0,defaultTooltipEventType:`axis`},reducers:{createEventEmitter:e=>{e.eventEmitter??=Symbol(`rechartsEventEmitter`)}}}),Xj=Yj.reducer,{createEventEmitter:Zj}=Yj.actions;function Qj(e){return e.tooltip.syncInteraction}var $j=Gf({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:eM,setDataStartEndIndexes:tM,setComputedData:nM}=$j.actions,rM=$j.reducer,iM=[`x`,`y`];function aM(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 oM(e){for(var t=1;t{if(e==null)return Jc;var s=(s,c,l)=>{if(t!==l&&e===s){if(c.payload.active===!1){n(Ok({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=uM(d,iM),{x:h,y:g,width:_,height:v}=c.payload.sourceViewBox,y=oM(oM({},m),{},{x:o.x+(_?(f-h)/_:0)*o.width,y:o.y+(v?(p-g)/v:0)*o.height});n(oM(oM({},c),{},{payload:oM(oM({},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(Ok({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:void 0,graphicalItemId:void 0}));return}if(b==null){n(Ok({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(Ok({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 Gj.on(Kj,s),()=>{Gj.off(Kj,s)}},[G(e=>e.rootProps.className),n,t,e,r,i,a,o])}function pM(){var e=G(Tb),t=G(Db),n=W();(0,F.useEffect)(()=>{if(e==null)return Jc;var r=(r,i,a)=>{t!==a&&e===r&&n(tM(i))};return Gj.on(qj,r),()=>{Gj.off(qj,r)}},[n,t,e])}function mM(){var e=W();(0,F.useEffect)(()=>{e(Zj())},[e]),fM(),pM()}function hM(e,t,n,r,i,a){var o=G(n=>oj(n,e,t)),s=G(MA),c=G(Db),l=G(Tb),u=G(Eb),d=G(Qj)?.sourceViewBox!=null,f=dh();(0,F.useEffect)(()=>{if(!d&&l!=null&&c!=null){var e=Ok({active:a,coordinate:n,dataKey:o,index:i,label:typeof r==`number`?String(r):r,sourceViewBox:f,graphicalItemId:s});Gj.emit(Kj,l,e,c)}},[d,n,o,s,i,r,c,l,u,a,f])}function gM(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 _M(e){for(var t=1;t{x(xk({shared:g,trigger:_,axisId:b,active:n,defaultIndex:S}))},[x,g,_,b,n,S]);var C=dh(),w=P_(),T=pk(g),{activeIndex:E,isActive:D}=G(e=>fj(e,T,_,S))??{},O=G(e=>dj(e,T,_,S)),k=G(e=>uj(e,T,_,S)),ee=G(e=>lj(e,T,_,S)),te=O,A=Uj(),j=n??D??!1,[ne,re]=Vu([te,j]),ie=T===`axis`?k:void 0;hM(T,_,ee,ie,E,j);var ae=y??A;if(ae==null||C==null||T==null)return null;var oe=te??CM;j||(oe=CM),s&&oe.length&&(oe=su(oe.filter(e=>e.value!=null&&(e.hide!==!0||t.includeHidden)),u,xM));var se=oe.length>0,ce=_M(_M({},t),{},{payload:oe,label:ie,active:j,activeIndex:E,coordinate:ee,accessibilityLayer:w}),le=F.createElement(N_,{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},SM(o,ce));return F.createElement(F.Fragment,null,(0,Ug.createPortal)(le,ae),j&&F.createElement(Vj,{cursor:h,tooltipEventType:T,coordinate:ee,payload:oe,index:E}))}var EM=e=>null;EM.displayName=`Cell`;function DM(e,t,n){return(t=OM(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function OM(e){var t=kM(e,`string`);return typeof t==`symbol`?t:t+``}function kM(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 AM=class{constructor(e){DM(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 jM(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 MM(e){for(var t=1;t{try{var n=document.getElementById(zM);n||(n=document.createElement(`span`),n.setAttribute(`id`,zM),n.setAttribute(`aria-hidden`,`true`),document.body.appendChild(n)),Object.assign(n.style,RM,t),n.textContent=`${e}`;var r=n.getBoundingClientRect();return{width:r.width,height:r.height}}catch{return{width:0,height:0}}},HM=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(e==null||w_.isSsr)return{width:0,height:0};if(!IM.enableCache)return VM(e,t);var n=BM(e,t),r=LM.get(n);if(r)return r;var i=VM(e,t);return LM.set(n,i),i},UM;function WM(e,t,n){return(t=GM(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function GM(e){var t=KM(e,`string`);return typeof t==`symbol`?t:t+``}function KM(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 qM=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,JM=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,YM=/^(px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q)$/,XM=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,ZM={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},QM=[`cm`,`mm`,`pt`,`pc`,`in`,`Q`,`px`];function $M(e){return QM.includes(e)}var eN=`NaN`;function tN(e,t){return e*ZM[t]}var nN=class e{static parse(t){var[,n,r]=XM.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,Rc(e)&&(this.unit=``),t!==``&&!YM.test(t)&&(this.num=NaN,this.unit=``),$M(t)&&(this.num=tN(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 Rc(this.num)}};UM=nN,WM(nN,`NaN`,new UM(NaN,``));function rN(e){if(e==null||e.includes(eN))return eN;for(var t=e;t.includes(`*`)||t.includes(`/`);){var[,n,r,i]=qM.exec(t)??[],a=nN.parse(n??``),o=nN.parse(i??``),s=r===`*`?a.multiply(o):a.divide(o);if(s.isNaN())return eN;t=t.replace(qM,s.toString())}for(;t.includes(`+`)||/.-\d+(?:\.\d+)?/.test(t);){var[,c,l,u]=JM.exec(t)??[],d=nN.parse(c??``),f=nN.parse(u??``),p=l===`+`?d.add(f):d.subtract(f);if(p.isNaN())return eN;t=t.replace(JM,p.toString())}return t}var iN=/\(([^()]*)\)/;function aN(e){for(var t=e,n;(n=iN.exec(t))!=null;){var[,r]=n;t=t.replace(iN,rN(r))}return t}function oN(e){var t=e.replace(/\s+/g,``);return t=aN(t),t=rN(t),t}function sN(e){try{return oN(e)}catch{return eN}}function cN(e){var t=sN(e.slice(5,-1));return t===eN?``:t}var lN=[`x`,`y`,`lineHeight`,`capHeight`,`fill`,`scaleToFit`,`textAnchor`,`verticalAnchor`],uN=[`dx`,`dy`,`angle`,`className`,`breakAll`];function dN(){return dN=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(mN)),{wordsWithComputedWidth:i.map(e=>({word:e,width:HM(e,r).width})),spaceWidth:n?0:HM(`\xA0`,r).width}}catch{return null}};function gN(e){return e===`start`||e===`middle`||e===`end`||e===`inherit`}function _N(e){return U(e)||typeof e==`string`||typeof e==`number`||typeof e==`boolean`}var vN=(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),bN=`…`,xN=(e,t,n,r,i,a,o,s)=>{var c=hN({breakAll:n,style:r,children:e.slice(0,t)+bN});if(!c)return[!1,[]];var l=vN(c.wordsWithComputedWidth,a,o,s);return[l.length>i||yN(l).width>Number(a),l]},SN=(e,t,n,r,i)=>{var{maxLines:a,children:o,style:s,breakAll:c}=e,l=V(a),u=String(o),d=vN(t,r,n,i);if(!l||i||!(d.length>a||yN(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]=xN(u,g-1,c,s,a,r,n,i),[y]=xN(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},CN=e=>[{words:U(e)?[]:e.toString().split(mN),width:void 0}],wN=e=>{var{width:t,scaleToFit:n,children:r,style:i,breakAll:a,maxLines:o}=e;if((t||n)&&!w_.isSsr){var s,c,l=hN({breakAll:a,children:r,style:i});if(l){var{wordsWithComputedWidth:u,spaceWidth:d}=l;s=u,c=d}else return CN(r);return SN({breakAll:a,children:r,maxLines:o,style:i},s,c,t,!!n)}return CN(r)},TN=`#808080`,EN={angle:0,breakAll:!1,capHeight:`0.71em`,fill:TN,lineHeight:`1em`,scaleToFit:!1,textAnchor:`start`,verticalAnchor:`end`,x:0,y:0},DN=(0,F.forwardRef)((e,t)=>{var n=yl(e,EN),{x:r,y:i,lineHeight:a,capHeight:o,fill:s,scaleToFit:c,textAnchor:l,verticalAnchor:u}=n,d=fN(n,lN),f=(0,F.useMemo)(()=>wN({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=fN(d,uN);if(!Bc(r)||!Bc(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=cN(`calc(${o})`);break;case`middle`:x=cN(`calc(${(f.length-1)/2} * -${a} + (${o} / 2))`);break;default:x=cN(`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`,dN({},Uo(v),{ref:t,x:y,y:b,className:P(`recharts-text`,g),textAnchor:l,fill:s.includes(`url`)?TN: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)}))});DN.displayName=`Text`;function ON(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 kN(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}=uh(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`?kN({x:p+x,y:s+c/2,horizontalAnchor:C,verticalAnchor:`middle`},k):n===`insideRight`?kN({x:p+m-x,y:s+c/2,horizontalAnchor:S,verticalAnchor:`middle`},k):n===`insideTop`?kN({x:d+l/2,y:s+_,horizontalAnchor:`middle`,verticalAnchor:y},k):n===`insideBottom`?kN({x:f+u/2,y:s+c-_,horizontalAnchor:`middle`,verticalAnchor:v},k):n===`insideTopLeft`?kN({x:d+x,y:s+_,horizontalAnchor:C,verticalAnchor:y},k):n===`insideTopRight`?kN({x:d+l-x,y:s+_,horizontalAnchor:S,verticalAnchor:y},k):n===`insideBottomLeft`?kN({x:f+x,y:s+c-_,horizontalAnchor:C,verticalAnchor:v},k):n===`insideBottomRight`?kN({x:f+u-x,y:s+c-_,horizontalAnchor:S,verticalAnchor:v},k):n&&typeof n==`object`&&(V(n.x)||zc(n.x))&&(V(n.y)||zc(n.y))?kN({x:o+Uc(n.x,m),y:s+Uc(n.y,c),horizontalAnchor:`end`,verticalAnchor:`end`},k):kN({x:h,y:s+c/2,horizontalAnchor:`middle`,verticalAnchor:`middle`},k)},PN=[`labelRef`],FN=[`content`];function IN(e,t){if(e==null)return{};var n,r,i=LN(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(WN.Provider,{value:c},s)},KN=()=>{var e=(0,F.useContext)(WN),t=dh();return e||(t?uh(t):void 0)},qN=(0,F.createContext)(null),JN=()=>{var e=(0,F.useContext)(qN),t=G(Yb);return e||t},YN=e=>{var{value:t,formatter:n}=e,r=U(e.children)?t:e.children;return typeof n==`function`?n(r):r},XN=e=>e!=null&&typeof e==`function`,ZN=(e,t)=>Lc(t-e)*Math.min(Math.abs(t-e),360),QN=(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=ZN(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=Ty(s,c,m,_),b=Ty(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)?Hc(`recharts-radial-line-`):e.id;return F.createElement(`text`,UN({},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))},$N=(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}=Ty(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}=Ty(r,i,(a+o)/2,l);return{x:f,y:p,textAnchor:`middle`,verticalAnchor:`middle`}},eP=e=>e!=null&&`cx`in e&&V(e.cx),tP={angle:0,offset:5,zIndex:kb.label,position:`middle`,textBreakAll:!1};function nP(e){if(!eP(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 rP(e){var t=yl(e,tP),{viewBox:n,parentViewBox:r,position:i,value:a,children:o,content:s,className:c=``,textBreakAll:l,labelRef:u}=t,d=JN(),f=KN(),p=n==null?i===`center`?f:d??f:eP(n)?n:uh(n),m,h,g=nP(p);if(!p||U(a)&&U(o)&&!(0,F.isValidElement)(s)&&typeof s!=`function`)return null;var _=zN(zN({},t),{},{viewBox:p});if((0,F.isValidElement)(s)){var{labelRef:v}=_;return(0,F.cloneElement)(s,IN(_,PN))}if(typeof s==`function`){var{content:y}=_;if(m=(0,F.createElement)(s,IN(_,FN)),(0,F.isValidElement)(m))return m}else m=YN(t);var b=Uo(t);if(eP(p)){if(i===`insideStart`||i===`insideEnd`||i===`end`)return QN(t,i,m,b,p);h=$N(p,t.offset,t.position)}else{if(!g)return null;var x=NN({viewBox:g,position:i,offset:t.offset,parentViewBox:eP(r)?void 0:r,clamp:!0});h=zN(zN({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(Mj,{zIndex:t.zIndex},F.createElement(DN,UN({ref:u,className:P(`recharts-label`,c)},b,h,{textAnchor:gN(b.textAnchor)?b.textAnchor:h.textAnchor,breakAll:l}),m))}rP.displayName=`Label`;var iP=(e,t,n)=>{if(!e)return null;var r={viewBox:t,labelRef:n};return e===!0?F.createElement(rP,UN({key:`label-implicit`},r)):Bc(e)?F.createElement(rP,UN({key:`label-implicit`,value:e},r)):(0,F.isValidElement)(e)?e.type===rP?(0,F.cloneElement)(e,zN({key:`label-implicit`},r)):F.createElement(rP,UN({key:`label-implicit`,content:e},r)):XN(e)?F.createElement(rP,UN({key:`label-implicit`,content:e},r)):e&&typeof e==`object`?F.createElement(rP,UN({},e,{key:`label-implicit`},r)):null};function aP(e){var{label:t,labelRef:n}=e;return iP(t,KN(),n)||null}var oP=[`valueAccessor`],sP=[`dataKey`,`clockWise`,`id`,`textBreakAll`,`zIndex`];function cP(){return cP=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(_N(t))return t},fP=(0,F.createContext)(void 0),pP=fP.Provider,mP=(0,F.createContext)(void 0);mP.Provider;function hP(){return(0,F.useContext)(fP)}function gP(){return(0,F.useContext)(mP)}function _P(e){var{valueAccessor:t=dP}=e,n=lP(e,oP),{dataKey:r,clockWise:i,id:a,textBreakAll:o,zIndex:s}=n,c=lP(n,sP),l=hP(),u=gP(),d=l||u;return!d||!d.length?null:F.createElement(Mj,{zIndex:s??kb.label},F.createElement(es,{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(rP,cP({key:`label-${i}`},Uo(e),c,l,{fill:n.fill??e.fill,parentViewBox:e.parentViewBox,value:s,textBreakAll:o,viewBox:e.viewBox,index:i,zIndex:0}))})))}_P.displayName=`LabelList`;function vP(e){var{label:t}=e;return t?t===!0?F.createElement(_P,{key:`labelList-implicit`}):F.isValidElement(t)||XN(t)?F.createElement(_P,{key:`labelList-implicit`,content:t}):typeof t==`object`?F.createElement(_P,cP({key:`labelList-implicit`},t,{type:String(t.type)})):null:null}function yP(){return yP=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`,yP({},Vo(e),dl(e),{className:a,cx:t,cy:n,r})):null},xP=Gf({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:SP,removeRadiusAxis:CP,addAngleAxis:wP,removeAngleAxis:TP}=xP.actions,EP=xP.reducer;function DP(e){return e&&typeof e==`object`&&`className`in e&&typeof e.className==`string`?e.className:``}var OP=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}})),kP=M(((e,t)=>{t.exports=OP()}))(),AP=e=>typeof e==`string`?e:e?e.displayName||e.name||`Component`:``,jP=null,MP=null,NP=e=>{if(e===jP&&Array.isArray(MP))return MP;var t=[];return F.Children.forEach(e,e=>{U(e)||((0,kP.isFragment)(e)?t=t.concat(NP(e.props.children)):t.push(e))}),MP=t,jP=e,t};function PP(e,t){var n=[],r=[];return r=Array.isArray(t)?t.map(e=>AP(e)):[AP(t)],NP(e).forEach(e=>{var t=(0,Ic.default)(e,`type.displayName`)||(0,Ic.default)(e,`type.name`);t&&r.indexOf(t)!==-1&&n.push(e)}),n}var FP=e=>e&&typeof e==`object`&&`clipDot`in e?!!e.clipDot:!0,IP=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})),LP=M(((e,t)=>{t.exports=IP().isPlainObject})),RP,zP,BP,VP,HP;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{var a=n-r,o=Fc(RP||=YP([`M `,`,`,``]),e,t);return o+=Fc(zP||=YP([`L `,`,`,``]),e+n,t),o+=Fc(BP||=YP([`L `,`,`,``]),e+n-a/2,t+i),o+=Fc(VP||=YP([`L `,`,`,``]),e+n-a/2-r,t+i),o+=Fc(HP||=YP([`L `,`,`,` Z`]),e,t),o},ZP={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:`ease`},QP=e=>{var t=yl(e,ZP),{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=qv(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`,JP({},Uo(t),{className:x,d:XP(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=mv([`strokeDasharray`],l,c);return F.createElement(Kv,{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`,JP({},Uo(t),{className:x,d:XP(u,d,s,c,l),ref:f,style:WP(WP({},p),t.style)}))})},$P=Se(LP()),eF=[`option`,`shapeType`,`activeClassName`,`inActiveClassName`];function tF(e,t){if(e==null)return{};var n,r,i=nF(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(Sk({activeIndex:String(a),activeDataKey:t,activeCoordinate:i.tooltipPosition,activeGraphicalItemId:n}))}},mF=e=>{var t=W();return(n,r)=>i=>{e?.(n,r,i),t(Ck())}},hF=(e,t,n)=>{var r=W();return(i,a)=>o=>{e?.(i,a,o),r(Tk({activeIndex:String(a),activeDataKey:t,activeCoordinate:i.tooltipPosition,activeGraphicalItemId:n}))}};function gF(e){var{tooltipEntrySettings:t}=e,n=W(),r=Pm(),i=(0,F.useRef)(null);return(0,F.useLayoutEffect)(()=>{r||(i.current===null?n(vk(t)):i.current!==t&&n(yk({prev:i.current,next:t})),i.current=t)},[t,n,r]),(0,F.useLayoutEffect)(()=>()=>{i.current&&=(n(bk(i.current)),null)},[n]),null}function _F(e){var{legendPayload:t}=e,n=W(),r=Pm(),i=(0,F.useRef)(null);return(0,F.useLayoutEffect)(()=>{r||(i.current===null?n(bg(t)):i.current!==t&&n(xg({prev:i.current,next:t})),i.current=t)},[n,r,t]),(0,F.useLayoutEffect)(()=>()=>{i.current&&=(n(Sg(i.current)),null)},[n]),null}var vF=F.useId??(()=>{var[e]=F.useState(()=>Hc(`uid-`));return e});function yF(e,t){var n=vF();return t||(e?`${e}-${n}`:n)}var bF=(0,F.createContext)(void 0),xF=e=>{var{id:t,type:n,children:r}=e,i=yF(`recharts-${n}`,t);return F.createElement(bF.Provider,{value:i},r(i))},SF=Gf({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=vf(e).cartesianItems.indexOf(Z(n));i>-1&&(e.cartesianItems[i]=Z(r))},prepare:q()},removeCartesianGraphicalItem:{reducer(e,t){var n=vf(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=vf(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=vf(e).polarItems.indexOf(Z(n));i>-1&&(e.polarItems[i]=Z(r))},prepare:q()}}}),{addCartesianGraphicalItem:CF,replaceCartesianGraphicalItem:wF,removeCartesianGraphicalItem:TF,addPolarGraphicalItem:EF,removePolarGraphicalItem:DF,replacePolarGraphicalItem:OF}=SF.actions,kF=SF.reducer,AF=(0,F.memo)(e=>{var t=W(),n=(0,F.useRef)(null);return(0,F.useLayoutEffect)(()=>{n.current===null?t(CF(e)):n.current!==e&&t(wF({prev:n.current,next:e})),n.current=e},[t,e]),(0,F.useLayoutEffect)(()=>()=>{n.current&&=(t(TF(n.current)),null)},[t]),null}),jF=[`points`];function MF(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 NF(e){for(var t=1;t{var s=NF(NF(NF({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(BF,{key:`dot-${r}`,option:n,dotProps:s,className:i})}),p={};return s&&c!=null&&(p.clipPath=`url(#clipPath-${u?``:`dots-`}${c})`),F.createElement(Mj,{zIndex:l},F.createElement(es,LF({className:r},p),f))}function UF(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 WF(e){for(var t=1;t({top:e.top,bottom:e.bottom,left:e.left,right:e.right})),pm,mm],(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)}}),sI=()=>G(oI),cI=()=>G(IA);function lI(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 uI(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=uI(uI(uI({},{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}),Ho(i)),dl(i)),c=(0,F.isValidElement)(i)?(0,F.cloneElement)(i,s):typeof i==`function`?i(s):F.createElement(bP,s);return F.createElement(es,{className:`recharts-active-dot`,clipPath:o},c)};function hI(e){var{points:t,mainColor:n,activeDot:r,itemDataKey:i,clipPath:a,zIndex:o=kb.activeDot}=e,s=G(kA),c=cI();if(t==null||c==null)return null;var l=t.find(e=>c.includes(e.payload));return U(l)?null:F.createElement(Mj,{zIndex:o},F.createElement(mI,{point:l,childIndex:Number(s),mainColor:n,dataKey:i,activeDot:r,clipPath:a}))}var gI=(e,t,n)=>{var r=n??e;if(!U(r))return Uc(r,t,0)},_I=(e,t,n)=>{var r={},i=e.filter(ex),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:gI(t,n,i[0]?.barSize)}}),c=a.map(e=>({stackId:void 0,dataKeys:[e.dataKey].filter(e=>e!=null),barSize:gI(t,n,e.barSize)}));return[...s,...c]};function vI(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 yI(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=Uc(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 wI=(e,t,n,r,i,a,o)=>{var s=U(o)?t:o,c=CI(n,r,i===a?a:i,e,s);return i!==a&&c!=null&&(c=c.map(e=>yI(yI({},e),{},{position:yI(yI({},e.position),{},{offset:e.position.offset-i/2})}))),c},TI=(e,t)=>{var n=Qb(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)}}}},EI=(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 DI(e,t){return e&&typeof e==`object`&&`zIndex`in e&&typeof e.zIndex==`number`&&J(e.zIndex)?e.zIndex:t}var OI=e=>{var{chartData:t}=e,n=W(),r=Pm();return(0,F.useEffect)(()=>r?()=>{}:(n(eM(t)),()=>{n(eM(void 0))}),[t,n,r]),null},kI={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},AI=Gf({name:`brush`,initialState:kI,reducers:{setBrushSettings(e,t){return t.payload==null?kI:t.payload}}}),{setBrushSettings:jI}=AI.actions,MI=AI.reducer;function NI(e){return(e%180+180)%180}var PI=function(e){var{width:t,height:n}=e,r=NI(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=vf(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=vf(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=vf(e).lines.findIndex(e=>e===t.payload);n!==-1&&e.lines.splice(n,1)}}}),{addDot:II,removeDot:LI,addArea:RI,removeArea:zI,addLine:BI,removeLine:VI}=FI.actions,HI=FI.reducer,UI=(0,F.createContext)(void 0),WI=e=>{var{children:t}=e,[n]=(0,F.useState)(`${Hc(`recharts`)}-clip`),r=sI();if(r==null)return null;var{x:i,y:a,width:o,height:s}=r;return F.createElement(UI.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 GI(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 YI(e,t){return GI(e,t+1)}function XI(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:GI(r,l)};var a=c,d,f=()=>(d===void 0&&(d=n(t,a)),d),p=t.coordinate,m=c===0||JI(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 ZI(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||JI(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=$I($I({},l),{},{tickCoord:f>0?l.coordinate-f*e:l.coordinate})}else a[t]=l=$I($I({},l),{},{tickCoord:l.coordinate});l.tickCoord!=null&&JI(e,l.tickCoord,d,s,c)&&(c=l.tickCoord-e*(d()/2+i),a[t]=$I($I({},l),{},{isShow:!0}))},u=o-1;u>=0;u--)if(l(u))continue;return a}function iL(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=$I($I({},u),{},{tickCoord:f>0?u.coordinate-f*e:u.coordinate}),u.tickCoord!=null&&JI(e,u.tickCoord,()=>d,c,l)&&(l=u.tickCoord-e*(d/2+i),o[s-1]=$I($I({},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=$I($I({},a),{},{tickCoord:d<0?a.coordinate-d*e:a.coordinate})}else o[t]=a=$I($I({},a),{},{tickCoord:a.coordinate});a.tickCoord!=null&&JI(e,a.tickCoord,u,c,l)&&(c=a.tickCoord+e*(u()/2+i),o[t]=$I($I({},a),{},{isShow:!0}))},h=0;h{var i=typeof l==`function`?l(e.value,r):e.value;return p===`width`?KI(HM(i,{fontSize:t,letterSpacing:n}),m,d):HM(i,{fontSize:t,letterSpacing:n})[p]},g=i[0],_=i[1],v=i.length>=2&&g!=null&&_!=null?Lc(_.coordinate-g.coordinate):1,y=qI(a,v,p);return c===`equidistantPreserveStart`?XI(v,y,h,i,o):c===`equidistantPreserveEnd`?ZI(v,y,h,i,o):(f=c===`preserveStart`||c===`preserveStartEnd`?iL(v,y,h,i,o,c===`preserveStartEnd`):rL(v,y,h,i,o),f.filter(e=>e.isShow))}var oL=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},sL=Gf({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:cL,removeRenderedTicks:lL}=sL.actions,uL=sL.reducer,dL=[`axisLine`,`width`,`height`,`className`,`hide`,`ticks`,`axisType`,`axisId`];function fL(e,t){if(e==null)return{};var n,r,i=pL(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;rr==null||n==null?Jc:(i(cL({ticks:t.map(e=>({value:e.value,coordinate:e.coordinate,offset:e.offset,index:e.index})),axisId:r,axisType:n})),()=>{i(lL({axisId:r,axisType:n}))}),[i,t,r,n]),null}var DL=(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=aL(gL(gL({},b),{},{ticks:n}),v,y),T=Vo(b),E=Ho(r),D=gN(T.textAnchor)?T.textAnchor:CL(u,d),O=wL(u,d),k={};typeof i==`object`&&(k=i);var ee=gL(gL({},T),{},{fill:`none`},k),te=w.map(e=>gL({entry:e},SL(e,f,p,m,h,u,g,d,_))),A=te.map(e=>{var{entry:t,line:n}=e;return F.createElement(es,{className:`recharts-cartesian-axis-tick`,key:`tick-${t.value}-${t.coordinate}-${t.tickCoord}`},i&&F.createElement(`line`,mL({},ee,n,{className:P(`recharts-cartesian-axis-tick-line`,(0,Ic.default)(i,`className`))})))}),j=te.map((e,t)=>{var{entry:n,tick:i}=e,u=gL(gL({},gL(gL(gL(gL({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(es,mL({className:`recharts-cartesian-axis-tick-label`,key:`tick-label-${n.value}-${n.coordinate}-${n.tickCoord}`},pl(x,n,t)),r&&F.createElement(TL,{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(EL,{ticks:w,axisId:C,axisType:S}),j.length>0&&F.createElement(Mj,{zIndex:kb.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))}),OL=(0,F.forwardRef)((e,t)=>{var{axisLine:n,width:r,height:i,className:a,hide:o,ticks:s,axisType:c,axisId:l}=e,u=fL(e,dL),[d,f]=(0,F.useState)(``),[p,m]=(0,F.useState)(``),h=(0,F.useRef)(null);(0,F.useImperativeHandle)(t,()=>({getCalculatedWidth:()=>oL({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(Mj,{zIndex:e.zIndex},F.createElement(es,{className:P(`recharts-cartesian-axis`,a)},F.createElement(xL,{x:e.x,y:e.y,width:r,height:i,orientation:e.orientation,mirror:e.mirror,axisLine:n,otherSvgProps:Vo(e)}),F.createElement(DL,{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(GN,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},F.createElement(aP,{label:e.label,labelRef:e.labelRef}),e.children)))}),kL=F.forwardRef((e,t)=>{var n=yl(e,bL);return F.createElement(OL,mL({},n,{ref:t}))});kL.displayName=`CartesianAxis`;var AL=[`x1`,`y1`,`x2`,`y2`,`key`],jL=[`offset`],ML=[`xAxisId`,`yAxisId`],NL=[`xAxisId`,`yAxisId`];function PL(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 FL(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 UL(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=Vo(BL(n,AL))??{},{offset:u}=l,d=BL(l,jL);r=F.createElement(`line`,zL({},d,{x1:i,y1:a,x2:o,y2:s,fill:`none`,key:c}))}return r}function WL(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=BL(e,ML),c=i.map((e,i)=>{var a=FL(FL({},s),{},{x1:t,y1:e,x2:t+n,y2:e,key:`line-${i}`,index:i});return F.createElement(UL,{key:`line-${i}`,option:r,lineItemProps:a})});return F.createElement(`g`,{className:`recharts-cartesian-grid-horizontal`},c)}function GL(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=BL(e,NL),c=i.map((e,i)=>{var a=FL(FL({},s),{},{x1:e,y1:t,x2:e,y2:t+n,key:`line-${i}`,index:i});return F.createElement(UL,{option:r,lineItemProps:a,key:`line-${i}`})});return F.createElement(`g`,{className:`recharts-cartesian-grid-vertical`},c)}function KL(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 qL(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 JL=(e,t)=>{var{xAxis:n,width:r,height:i,offset:a}=e;return Jp(aL(FL(FL(FL({},bL),n),{},{ticks:Yp(n,!0),viewBox:{x:0,y:0,width:r,height:i}})),a.left,a.left+a.width,t)},YL=(e,t)=>{var{yAxis:n,width:r,height:i,offset:a}=e;return Jp(aL(FL(FL(FL({},bL),n),{},{ticks:Yp(n,!0),viewBox:{x:0,y:0,width:r,height:i}})),a.top,a.top+a.height,t)},XL={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:`#ccc`,fill:`none`,verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:kb.grid};function ZL(e){var t=mh(),n=hh(),r=ph(),i=FL(FL({},yl(e,XL)),{},{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=Pm(),h=G(e=>ik(e,`xAxis`,a,m)),g=G(e=>ik(e,`yAxis`,o,m));if(!Bp(l)||!Bp(u)||!V(s)||!V(c))return null;var _=i.verticalCoordinatesGenerator||JL,v=i.horizontalCoordinatesGenerator||YL,{horizontalPoints:y,verticalPoints:b}=i;if((!y||!y.length)&&typeof v==`function`){var x=f&&f.length,S=v({yAxis:g?FL(FL({},g),{},{ticks:x?f:g.ticks}):void 0,width:t??l,height:n??u,offset:r},x?!0:d);Hm(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?FL(FL({},h),{},{ticks:C?p:h.ticks}):void 0,width:t??l,height:n??u,offset:r},C?!0:d);Hm(Array.isArray(w),`verticalCoordinatesGenerator should return Array but instead it returned [${typeof w}]`),Array.isArray(w)&&(b=w)}return F.createElement(Mj,{zIndex:i.zIndex},F.createElement(`g`,{className:`recharts-cartesian-grid`},F.createElement(HL,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),F.createElement(KL,zL({},i,{horizontalPoints:y})),F.createElement(qL,zL({},i,{verticalPoints:b})),F.createElement(WL,zL({},i,{offset:r,horizontalPoints:y,xAxis:h,yAxis:g})),F.createElement(GL,zL({},i,{offset:r,verticalPoints:b,xAxis:h,yAxis:g}))))}ZL.displayName=`CartesianGrid`;var QL=Gf({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:$L,replaceErrorBar:eR,removeErrorBar:tR}=QL.actions,nR=QL.reducer,rR=[`children`];function iR(e,t){if(e==null)return{};var n,r,i=aR(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r({x:0,y:0,value:0}),errorBarOffset:0});function sR(e){var{children:t}=e,n=iR(e,rR);return F.createElement(oR.Provider,{value:n},t)}function cR(e,t){var n=G(t=>aD(t,e)),r=G(e=>cD(e,t)),i=n?.allowDataOverflow??rD.allowDataOverflow,a=r?.allowDataOverflow??oD.allowDataOverflow;return{needClip:i||a,needClipX:i,needClipY:a}}function lR(e){var{xAxisId:t,yAxisId:n,clipPathId:r}=e,i=sI(),{needClipX:a,needClipY:o,needClip:s}=cR(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 uR=(e,t,n,r)=>sk(e,`xAxis`,t,r),dR=(e,t,n,r)=>ok(e,`xAxis`,t,r),fR=(e,t,n,r)=>sk(e,`yAxis`,n,r),pR=(e,t,n,r)=>ok(e,`yAxis`,n,r),mR=K([X,uR,fR,dR,pR],(e,t,n,r,i)=>qp(e,`xAxis`)?cm(t,r,!1):cm(n,i,!1)),hR=(e,t,n,r,i)=>i;function gR(e){return e.type===`line`}var _R=K([X,uR,fR,dR,pR,K([gD,hR],(e,t)=>e.filter(gR).find(e=>e.id===t)),mR,tb],(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 GR({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:i,dataKey:d,bandSize:o,displayedData:p})}});function vR(e){var t=Ho(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 yR=[`id`],bR=[`type`,`layout`,`connectNulls`,`needClip`,`shape`],xR=[`activeDot`,`animateNewValues`,`animationBegin`,`animationDuration`,`animationEasing`,`connectNulls`,`dot`,`hide`,`isAnimationActive`,`label`,`legendType`,`xAxisId`,`yAxisId`,`id`];function SR(){return SR=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:um(n,t),payload:e}]},jR=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:Jc,settings:{stroke:r,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:um(o,t),hide:s,type:l,color:r,unit:c,graphicalItemId:u}};return F.createElement(gF,{tooltipEntrySettings:d})}),MR=(e,t)=>`${t}px ${e}px`;function NR(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 MR(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[...NR(n,i),...o,...d].map(e=>`${e}px`).join(`, `)};function FR(e){var{clipPathId:t,points:n,props:r}=e,{dot:i,dataKey:a,needClip:o}=r,{id:s}=r,c=Vo(OR(r,yR));return F.createElement(HF,{points:n,dot:i,className:`recharts-line-dots`,dotClassName:`recharts-line-dot`,dataKey:a,baseProps:c,needClip:o,clipPathId:t})}function IR(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 wR(wR({},t),{},{value:e.value,payload:e.payload,viewBox:t,parentViewBox:void 0,fill:void 0})}),[r]);return F.createElement(pP,{value:t?i:void 0},n)}function LR(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=wR(wR({},Uo(OR(a,bR))),{},{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(fF,SR({shapeType:`curve`,option:u},d,{pathRef:n})),F.createElement(FR,{points:r,clipPathId:t,props:a}))}function RR(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function zR(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=qv(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=RR(r.current),E=(0,F.useRef)(0);y.current!==v&&(E.current=a.current,y.current=v);var D=E.current;return F.createElement(IR,{points:o,showLabels:S},n.children,F.createElement(Kv,{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?PR(u,T,`${s}`.split(/[,\s]+/gim).map(e=>parseFloat(e))):MR(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 wR(wR({},t),{},{x:H(i.x,t.x,e),y:H(i.y,t.y,e)})}return f?wR(wR({},t),{},{x:H(p*2,t.x,e),y:H(m/2,t.y,e)}):wR(wR({},t),{},{x:t.x,y:t.y})});return i.current=g,F.createElement(LR,{props:n,points:g,clipPathId:t,pathRef:r,strokeDasharray:d})}return F.createElement(LR,{props:n,points:o,clipPathId:t,pathRef:r,strokeDasharray:d})}),F.createElement(vP,{label:n.label}))}function BR(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(zR,{props:n,clipPathId:t,previousPointsRef:r,longestAnimatedLengthRef:i,pathRef:a})}var VR=(e,t)=>({x:e.x??void 0,y:e.y??void 0,value:e.value,errorVal:Y(e.payload,t)}),HR=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}=vR(t),_=FP(t),v=h*2+g,y=d?`url(#clipPath-${_?``:`dots-`}${m})`:void 0;return F.createElement(Mj,{zIndex:f},F.createElement(es,{className:p},d&&F.createElement(`defs`,null,F.createElement(lR,{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(sR,{xAxisId:i,yAxisId:a,data:n,dataPointFormatter:VR,errorBarOffset:0},F.createElement(BR,{props:this.props,clipPathId:m}))),F.createElement(hI,{activeDot:this.props.activeDot,points:n,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:y}))}},UR={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:kb.line,type:`linear`};function WR(e){var t=yl(e,UR),{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=OR(t,xR),{needClip:_}=cR(p,m),v=sI(),y=_h(),b=Pm(),x=G(e=>_R(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(HR,SR({},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 GR(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:em({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=em({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 KR(e){var t=yl(e,UR),n=Pm();return F.createElement(xF,{id:t.id,type:`line`},e=>F.createElement(F.Fragment,null,F.createElement(_F,{legendPayload:AR(t)}),F.createElement(jR,{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(AF,{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(WR,SR({},t,{id:e}))))}var qR=F.memo(KR,Hg);qR.displayName=`Line`;function JR(e,t){return e.graphicalItems.cartesianItems.find(e=>e.id===t)?.xAxisId??0}function YR(e,t){return e.graphicalItems.cartesianItems.find(e=>e.id===t)?.yAxisId??0}var XR=(e,t,n)=>sk(e,`xAxis`,JR(e,t),n),ZR=(e,t,n)=>ok(e,`xAxis`,JR(e,t),n),QR=(e,t,n)=>sk(e,`yAxis`,YR(e,t),n),$R=(e,t,n)=>ok(e,`yAxis`,YR(e,t),n),ez=K([X,XR,QR,ZR,$R],(e,t,n,r,i)=>qp(e,`xAxis`)?cm(t,r,!1):cm(n,i,!1)),tz=K([gD,(e,t)=>t],(e,t)=>e.filter(e=>e.type===`area`).find(e=>e.id===t)),nz=e=>qp(X(e),`xAxis`)?`yAxis`:`xAxis`,rz=(e,t)=>nz(e)===`yAxis`?YR(e,t):JR(e,t),iz=K([X,XR,QR,ZR,$R,K([tz,(e,t,n)=>HD(e,nz(e),rz(e,t),n)],(e,t)=>{if(!(e==null||t==null)){var{stackId:n}=e,r=Qb(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]])}}}),nb,ez,tz,Ob],(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 Az({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:i,dataStartIndex:d,areaSettings:c,stackedData:a,displayedData:m,chartBaseValue:l,bandSize:s})}}),az=[`id`],oz=[`activeDot`,`animationBegin`,`animationDuration`,`animationEasing`,`connectNulls`,`dot`,`fill`,`fillOpacity`,`hide`,`isAnimationActive`,`legendType`,`stroke`,`xAxisId`,`yAxisId`];function sz(){return sz=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:hz(r,i),value:um(n,t),payload:e}]},_z=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:Jc,settings:{stroke:r,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:um(o,t),hide:s,type:l,color:hz(r,a),unit:c,graphicalItemId:u}};return F.createElement(gF,{tooltipEntrySettings:d})});function vz(e){var{clipPathId:t,points:n,props:r}=e,{needClip:i,dot:a,dataKey:o}=r,s=Vo(r);return F.createElement(HF,{points:n,dot:a,className:`recharts-area-dots`,dotClassName:`recharts-area-dot`,dataKey:o,baseProps:s,needClip:i,clipPathId:t})}function yz(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 dz(dz({},t),{},{value:e.value,payload:e.payload,parentViewBox:void 0,viewBox:t,fill:void 0})});return F.createElement(pP,{value:t?i:void 0},n)}function bz(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=cz(a,az),p=Vo(f),m=Uo(f);return F.createElement(F.Fragment,null,t?.length>1&&F.createElement(es,{clipPath:r?`url(#clipPath-${i})`:void 0},F.createElement(Y_,sz({},m,{id:d,points:t,connectNulls:l,type:s,baseLine:n,layout:o,stroke:`none`,className:`recharts-area-area`})),c!==`none`&&F.createElement(Y_,sz({},p,{className:`recharts-area-curve`,layout:o,type:s,connectNulls:l,fill:`none`,points:t})),c!==`none`&&u&&Array.isArray(n)&&F.createElement(Y_,sz({},p,{className:`recharts-area-curve`,layout:o,type:s,connectNulls:l,fill:`none`,points:n}))),F.createElement(vz,{points:t,props:f,clipPathId:i}))}function xz(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=vh(),[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(yz,{showLabels:v,points:o},r.children,F.createElement(Kv,{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 dz(dz({},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)||Rc(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 dz(dz({},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(bz,{points:u,baseLine:d,needClip:t,clipPathId:n,props:r})}return e>0&&(i.current=o,a.current=s),F.createElement(es,null,c&&F.createElement(`defs`,null,F.createElement(`clipPath`,{id:`animationClipPath-${n}`},F.createElement(Cz,{alpha:e,points:o,baseLine:s,layout:h,strokeWidth:r.strokeWidth}))),F.createElement(es,{clipPath:`url(#animationClipPath-${n})`},F.createElement(bz,{points:o,baseLine:s,needClip:t,clipPathId:n,props:r})))}),F.createElement(vP,{label:r.label}))}function Tz(e){var{needClip:t,clipPathId:n,props:r}=e,i=(0,F.useRef)(null),a=(0,F.useRef)();return F.createElement(wz,{needClip:t,clipPathId:n,props:r,previousPointsRef:i,previousBaselineRef:a})}var Ez=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:_}=vR(t),v=FP(t),y=g*2+_,b=o?`url(#clipPath-${v?``:`dots-`}${h})`:void 0;return F.createElement(Mj,{zIndex:p},F.createElement(es,{className:m},o&&F.createElement(`defs`,null,F.createElement(lR,{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(Tz,{needClip:o,clipPathId:h,props:this.props})),F.createElement(hI,{points:n,mainColor:hz(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}),this.props.isRange&&Array.isArray(f)&&F.createElement(hI,{points:f,mainColor:hz(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}))}},Dz={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:kb.area};function Oz(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=cz(e,oz),g=_h(),_=$A(),{needClip:v}=cR(p,m),y=Pm(),{points:b,isRange:x,baseLine:S}=G(t=>iz(t,e.id,y))??{},C=sI();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(Ez,sz({},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 kz=(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 Az(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=kz(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:em({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:em({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 jz(e){var t=yl(e,Dz),n=Pm();return F.createElement(xF,{id:t.id,type:`area`},e=>F.createElement(F.Fragment,null,F.createElement(_F,{legendPayload:gz(t)}),F.createElement(_z,{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(AF,{type:`area`,id:e,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:$p(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:n,connectNulls:t.connectNulls}),F.createElement(Oz,sz({},t,{id:e}))))}var Mz=F.memo(jz,Hg);Mz.displayName=`Area`;var Nz=!0,Pz=`Invariant failed`;function Fz(e,t){if(!e){if(Nz)throw Error(Pz);var n=typeof t==`function`?t():t,r=n?`${Pz}: ${n}`:Pz;throw Error(r)}}function Iz(){return Iz=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&&Fz(!1,`minPointSize callback function received a value with type of ${typeof n}. Currently only numbers or null/undefined are supported.`),t)}},zz=(e,t,n)=>n,Bz=K([gD,(e,t)=>t],(e,t)=>e.filter(e=>e.type===`bar`).find(e=>e.id===t)),Vz=K([Bz],e=>e?.maxBarSize),Hz=(e,t,n,r)=>r,Uz=K([X,gD,JR,YR,zz],(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`)),Wz=(e,t,n)=>{var r=X(e),i=JR(e,t),a=YR(e,t);if(!(i==null||a==null))return r===`horizontal`?HD(e,`yAxis`,a,n):HD(e,`xAxis`,i,n)},Gz=K([Uz,xb,(e,t)=>{var n=X(e),r=JR(e,t),i=YR(e,t);if(!(r==null||i==null))return n===`horizontal`?tk(e,`xAxis`,r):tk(e,`yAxis`,i)}],_I),Kz=(e,t,n)=>{var r=Bz(e,t);if(r==null)return 0;var i=JR(e,t),a=YR(e,t);if(i==null||a==null)return 0;var o=X(e),s=vb(e),{maxBarSize:c}=r,l=U(c)?s:c,u,d;return o===`horizontal`?(u=sk(e,`xAxis`,i,n),d=ok(e,`xAxis`,i,n)):(u=sk(e,`yAxis`,a,n),d=ok(e,`yAxis`,a,n)),cm(u,d,!0)??l??0},qz=(e,t,n)=>{var r=X(e),i=JR(e,t),a=YR(e,t);if(!(i==null||a==null)){var o,s;return r===`horizontal`?(o=sk(e,`xAxis`,i,n),s=ok(e,`xAxis`,i,n)):(o=sk(e,`yAxis`,a,n),s=ok(e,`yAxis`,a,n)),cm(o,s)}},Jz=K([Am,Mm,(e,t,n)=>{var r=JR(e,t);if(r!=null)return sk(e,`xAxis`,r,n)},(e,t,n)=>{var r=YR(e,t);if(r!=null)return sk(e,`yAxis`,r,n)},(e,t,n)=>{var r=JR(e,t);if(r!=null)return ok(e,`xAxis`,r,n)},(e,t,n)=>{var r=YR(e,t);if(r!=null)return ok(e,`yAxis`,r,n)},K([K([Gz,vb,yb,bb,Kz,qz,Vz],wI),Bz],EI),X,nb,qz,K([Wz,Bz],TI),Bz,Hz],(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 AB({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})}}),Yz=[`index`];function Xz(){return Xz=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var t=(0,F.useContext)($z);if(t!=null)return t.stackId;if(e!=null)return $p(e)},tB=(e,t)=>`recharts-bar-stack-clip-path-${e}-${t}`,nB=e=>{var t=(0,F.useContext)($z);if(t!=null){var{stackId:n}=t;return`url(#${tB(n,e)})`}},rB=e=>{var{index:t}=e,n=Zz(e,Yz),r=nB(t);return F.createElement(es,Xz({className:`recharts-bar-stack-layer`,clipPath:r},n))},iB=[`onMouseEnter`,`onMouseLeave`,`onClick`],aB=[`value`,`background`,`tooltipPosition`],oB=[`id`],sB=[`onMouseEnter`,`onClick`,`onMouseLeave`];function cB(){return cB=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:um(n,t),payload:e}]},_B=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:Jc,settings:{stroke:n,strokeWidth:r,fill:i,dataKey:t,nameKey:void 0,name:um(a,t),hide:o,type:c,color:i,unit:s,graphicalItemId:l}};return F.createElement(gF,{tooltipEntrySettings:u})});function vB(e){var t=G(kA),{data:n,dataKey:r,background:i,allOtherBarProps:a}=e,{onMouseEnter:o,onMouseLeave:s,onClick:c}=a,l=mB(a,iB),u=pF(o,r,a.id),d=mF(s),f=hF(c,r,a.id);if(!i||n==null)return null;var p=Ho(i);return F.createElement(Mj,{zIndex:DI(i,kb.barBackground)},n.map((e,n)=>{var{value:a,background:o,tooltipPosition:s}=e,c=mB(e,aB);if(!o)return null;var m=u(e,n),h=d(e,n),g=f(e,n),_=uB(uB(uB(uB(uB({option:i,isActive:String(n)===t},c),{},{fill:`#eee`},o),p),pl(l,e,n)),{},{onMouseEnter:m,onMouseLeave:h,onClick:g,dataKey:r,index:n,className:`recharts-bar-background-rectangle`});return F.createElement(Lz,cB({key:`background-bar-${n}`},_))}))}function yB(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 uB(uB({},t),{},{value:e.value,payload:e.payload,parentViewBox:e.parentViewBox,viewBox:t,fill:e.fill})});return F.createElement(pP,{value:t?i:void 0},n)}function bB(e){var{shape:t,activeBar:n,baseProps:r,entry:i,index:a,dataKey:o}=e,s=G(kA),c=G(jA),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(Lz,cB({},r,{name:String(r.name)},i,{isActive:h,option:_,index:a,dataKey:o,onTransitionEnd:m}));return g?F.createElement(Mj,{zIndex:kb.activeBar},F.createElement(rB,{index:i.originalDataIndex},v)):v}function xB(e){var{shape:t,baseProps:n,entry:r,index:i,dataKey:a}=e;return F.createElement(Lz,cB({},n,{name:String(n.name)},r,{isActive:!1,option:t,index:i,dataKey:a}))}function SB(e){var{data:t,props:n}=e,r=Vo(n)??{},{id:i}=r,a=mB(r,oB),{shape:o,dataKey:s,activeBar:c}=n,{onMouseEnter:l,onClick:u,onMouseLeave:d}=n,f=mB(n,sB),p=pF(l,s,i),m=mF(d),h=hF(u,s,i);return t?F.createElement(F.Fragment,null,t.map((e,t)=>F.createElement(rB,cB({index:e.originalDataIndex,key:`rectangle-${e?.x}-${e?.y}-${e?.value}-${t}`,className:`recharts-bar-rectangle`},pl(f,e,t),{onMouseEnter:p(e,t),onMouseLeave:m(e,t),onClick:h(e,t)}),c?F.createElement(bB,{shape:o,activeBar:c,baseProps:a,entry:e,index:t,dataKey:s}):F.createElement(xB,{shape:o,baseProps:a,entry:e,index:t,dataKey:s})))):null}function CB(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=qv(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(yB,{showLabels:h,rects:r},F.createElement(Kv,{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 uB(uB({},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 uB(uB({},t),{},{y:o,height:a})}var s=H(0,t.width,e),c=H(t.stackedBarStart,t.x,e);return uB(uB({},t),{},{width:s,x:c})});return e>0&&(n.current=a??null),a==null?null:F.createElement(es,null,F.createElement(SB,{props:t,data:a}))}),F.createElement(vP,{label:t.label}),t.children)}function wB(e){var t=(0,F.useRef)(null);return F.createElement(CB,{previousRectanglesRef:t,props:e})}var TB=0,EB=(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)}},DB=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(es,{className:l,id:c},o&&F.createElement(`defs`,null,F.createElement(lR,{clipPathId:u,xAxisId:i,yAxisId:a})),F.createElement(es,{className:`recharts-bar-rectangles`,clipPath:o?`url(#clipPath-${u})`:void 0},F.createElement(vB,{data:t,dataKey:n,background:s,allOtherBarProps:this.props}),F.createElement(wB,this.props)))}},OB={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:`ease`,background:!1,hide:!1,isAnimationActive:`auto`,label:!1,legendType:`rect`,minPointSize:TB,xAxisId:0,yAxisId:0,zIndex:kb.bar};function kB(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}=cR(t,n),f=_h(),p=Pm(),m=PP(e.children,EM),h=G(t=>Jz(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(sR,{xAxisId:t,yAxisId:n,data:h,dataPointFormatter:EB,errorBarOffset:g},F.createElement(DB,cB({},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 AB(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=nm({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;_=Xp(E,v)}else _=Y(e,n),Array.isArray(_)||(_=[y,_]);var D=Rz(r,TB)(_[1],f);if(t===`horizontal`){var O=c.scale.map(_[0]),k=c.scale.map(_[1]);if(O==null||k==null)return null;x=tm({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=Rc(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(_F,{legendPayload:gB(t)}),F.createElement(_B,{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(AF,{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(Mj,{zIndex:t.zIndex},F.createElement(kB,cB({},t,{id:e})))))}var MB=F.memo(jB,Hg);MB.displayName=`Bar`;var NB=[`domain`,`range`],PB=[`domain`,`range`];function FB(e,t){if(e==null)return{};var n,r,i=IB(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{if(o!=null)return WB(WB({},a),{},{type:o})},[a,o]);return(0,F.useLayoutEffect)(()=>{s!=null&&(n.current===null?t(YF(s)):n.current!==s&&t(XF({prev:n.current,next:s})),n.current=s)},[s,t]),(0,F.useLayoutEffect)(()=>()=>{n.current&&=(t(ZF(n.current)),null)},[t]),null}var ZB=e=>{var{xAxisId:t,className:n}=e,r=G(Mm),i=Pm(),a=`xAxis`,o=G(e=>ak(e,a,t,i)),s=G(e=>qO(e,t)),c=G(e=>QO(e,t)),l=G(e=>iD(e,t));if(s==null||c==null||l==null)return null;var{dangerouslySetInnerHTML:u,ticks:d,scale:f}=e,p=JB(e,BB),{id:m,scale:h}=l,g=JB(l,VB);return F.createElement(kL,HB({},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}))},QB={allowDataOverflow:rD.allowDataOverflow,allowDecimals:rD.allowDecimals,allowDuplicatedCategory:rD.allowDuplicatedCategory,angle:rD.angle,axisLine:bL.axisLine,height:rD.height,hide:!1,includeHidden:rD.includeHidden,interval:rD.interval,label:!1,minTickGap:rD.minTickGap,mirror:rD.mirror,orientation:rD.orientation,padding:rD.padding,reversed:rD.reversed,scale:rD.scale,tick:rD.tick,tickCount:rD.tickCount,tickLine:bL.tickLine,tickSize:bL.tickSize,type:rD.type,niceTicks:rD.niceTicks,xAxisId:0},$B=F.memo(e=>{var t=yl(e,QB);return F.createElement(F.Fragment,null,F.createElement(XB,{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(ZB,t))},RB);$B.displayName=`XAxis`;var eV=[`type`],tV=[`dangerouslySetInnerHTML`,`ticks`,`scale`],nV=[`id`,`scale`];function rV(){return rV=Object.assign?Object.assign.bind():function(e){for(var t=1;t{if(o!=null)return aV(aV({},a),{},{type:o})},[o,a]);return(0,F.useLayoutEffect)(()=>{s!=null&&(n.current===null?t(QF(s)):n.current!==s&&t($F({prev:n.current,next:s})),n.current=s)},[s,t]),(0,F.useLayoutEffect)(()=>()=>{n.current&&=(t(eI(n.current)),null)},[t]),null}function fV(e){var{yAxisId:t,className:n,width:r,label:i}=e,a=(0,F.useRef)(null),o=(0,F.useRef)(null),s=G(Mm),c=Pm(),l=W(),u=`yAxis`,d=G(e=>ek(e,t)),f=G(e=>$O(e,t)),p=G(e=>ak(e,u,t,c)),m=G(e=>sD(e,t));if((0,F.useLayoutEffect)(()=>{if(!(r!==`auto`||!d||XN(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(iI({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=lV(e,tV),{id:y,scale:b}=m,x=lV(m,nV);return F.createElement(kL,rV({},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 pV={allowDataOverflow:oD.allowDataOverflow,allowDecimals:oD.allowDecimals,allowDuplicatedCategory:oD.allowDuplicatedCategory,angle:oD.angle,axisLine:bL.axisLine,hide:!1,includeHidden:oD.includeHidden,interval:oD.interval,label:!1,minTickGap:oD.minTickGap,mirror:oD.mirror,orientation:oD.orientation,padding:oD.padding,reversed:oD.reversed,scale:oD.scale,tick:oD.tick,tickCount:oD.tickCount,tickLine:bL.tickLine,tickSize:bL.tickSize,type:oD.type,niceTicks:oD.niceTicks,width:oD.width,yAxisId:0},mV=F.memo(e=>{var t=yl(e,pV);return F.createElement(F.Fragment,null,F.createElement(dV,{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(fV,t))},RB);mV.displayName=`YAxis`;var hV=K([(e,t)=>t,X,Yb,ix,SA,wA,rj,Am],hj);function gV(e){return`getBBox`in e.currentTarget&&typeof e.currentTarget.getBBox==`function`}function _V(e){var t=e.currentTarget.getBoundingClientRect(),n,r;if(gV(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 vV=Tf(`mouseClick`),yV=jp();yV.startListening({actionCreator:vV,effect:(e,t)=>{var n=e.payload,r=hV(t.getState(),_V(n));r?.activeIndex!=null&&t.dispatch(Dk({activeIndex:r.activeIndex,activeDataKey:void 0,activeCoordinate:r.activeCoordinate}))}});var bV=Tf(`mouseMove`),xV=jp(),SV=null,CV=null,wV=null;xV.startListening({actionCreator:bV,effect:(e,t)=>{var n=e.payload,{throttleDelay:r,throttledEvents:i}=t.getState().eventSettings,a=i===`all`||i?.includes(`mousemove`);SV!==null&&(cancelAnimationFrame(SV),SV=null),CV!==null&&(typeof r!=`number`||!a)&&(clearTimeout(CV),CV=null),wV=_V(n);var o=()=>{var e=t.getState(),n=fk(e,e.tooltip.settings.shared);if(!wV){SV=null,CV=null;return}if(n===`axis`){var r=hV(e,wV);r?.activeIndex==null?t.dispatch(wk()):t.dispatch(Ek({activeIndex:r.activeIndex,activeDataKey:void 0,activeCoordinate:r.activeCoordinate}))}SV=null,CV=null};if(!a){o();return}r===`raf`?SV=requestAnimationFrame(o):typeof r==`number`&&CV===null&&(CV=setTimeout(o,r))}});function TV(e,t){return t instanceof HTMLElement?`HTMLElement <${t.tagName} class="${t.className}">`:t===window?`global.window`:e===`children`&&typeof t==`object`&&t?`<>`:t}var EV={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},DV=Gf({name:`rootProps`,initialState:EV,reducers:{updateOptions:(e,t)=>{e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=t.payload.barGap??EV.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}}}),OV=DV.reducer,{updateOptions:kV}=DV.actions,AV=Gf({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:jV}=AV.actions,MV=AV.reducer,NV=Tf(`keyDown`),PV=Tf(`focus`),FV=Tf(`blur`),IV=jp(),LV=null,RV=null,zV=null;IV.startListening({actionCreator:NV,effect:(e,t)=>{zV=e.payload,LV!==null&&(cancelAnimationFrame(LV),LV=null);var{throttleDelay:n,throttledEvents:r}=t.getState().eventSettings,i=r===`all`||r.includes(`keydown`);RV!==null&&(typeof n!=`number`||!i)&&(clearTimeout(RV),RV=null);var a=()=>{try{var e=t.getState();if(e.rootProps.accessibilityLayer===!1)return;var{keyboardInteraction:n}=e.tooltip,r=zV;if(r!==`ArrowRight`&&r!==`ArrowLeft`&&r!==`Enter`)return;var i=Hk(n,uA(e),zD(e),yA(e)),a=i==null?-1:Number(i),o=!Number.isFinite(a)||a<0,s=wA(e),c=uA(e),l=fk(e,e.tooltip.settings.shared);if(r===`Enter`){if(o)return;var u=cj(e,l,`hover`,String(n.index));t.dispatch(kk({active:!n.active,activeIndex:n.index,activeCoordinate:u}));return}var d=ck(e)===`left-to-right`?1:-1,f=r===`ArrowRight`?1:-1,p;if(o){var m=zD(e),h=yA(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(Hk(_(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=cj(e,l,`hover`,String(p));t.dispatch(kk({active:!0,activeIndex:p.toString(),activeCoordinate:x}))}finally{LV=null,RV=null}};if(!i){a();return}n===`raf`?LV=requestAnimationFrame(a):typeof n==`number`&&RV===null&&(a(),zV=null,RV=setTimeout(()=>{zV?a():(RV=null,LV=null)},n))}}),IV.startListening({actionCreator:PV,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=cj(n,fk(n,n.tooltip.settings.shared),`hover`,String(i));t.dispatch(kk({active:!0,activeIndex:i,activeCoordinate:a}))}}}}),IV.startListening({actionCreator:FV,effect:(e,t)=>{var n=t.getState();if(n.rootProps.accessibilityLayer!==!1){var{keyboardInteraction:r}=n.tooltip;r.active&&t.dispatch(kk({active:!1,activeIndex:r.index,activeCoordinate:r.coordinate}))}}});function BV(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 VV=Tf(`externalEvent`),HV=jp(),UV=new Map,WV=new Map,GV=new Map;HV.startListening({actionCreator:VV,effect:(e,t)=>{var{handler:n,reactEvent:r}=e.payload;if(n!=null){var i=r.type,a=BV(r);GV.set(i,{handler:n,reactEvent:a});var o=UV.get(i);o!==void 0&&(cancelAnimationFrame(o),UV.delete(i));var{throttleDelay:s,throttledEvents:c}=t.getState().eventSettings,l=c,u=l===`all`||l?.includes(i),d=WV.get(i);d!==void 0&&(typeof s!=`number`||!u)&&(clearTimeout(d),WV.delete(i));var f=()=>{var e=GV.get(i);try{if(!e)return;var{handler:n,reactEvent:r}=e,a=t.getState(),o={activeCoordinate:PA(a),activeDataKey:jA(a),activeIndex:kA(a),activeLabel:AA(a),activeTooltipIndex:kA(a),isTooltipActive:FA(a)};n&&n(o,r)}finally{UV.delete(i),WV.delete(i),GV.delete(i)}};if(!u){f();return}if(s===`raf`){var p=requestAnimationFrame(f);UV.set(i,p)}else if(typeof s==`number`){if(!WV.has(i)){f();var m=setTimeout(f,s);WV.set(i,m)}}else f()}}});var KV=K([K([Kk],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)}}}),qV=Tf(`touchMove`),JV=jp(),YV=null,XV=null,ZV=null,QV=null;JV.startListening({actionCreator:qV,effect:(e,t)=>{var n=e.payload;if(!(n.touches==null||n.touches.length===0)){QV=BV(n);var{throttleDelay:r,throttledEvents:i}=t.getState().eventSettings,a=i===`all`||i.includes(`touchmove`);YV!==null&&(cancelAnimationFrame(YV),YV=null),XV!==null&&(typeof r!=`number`||!a)&&(clearTimeout(XV),XV=null),ZV=Array.from(n.touches).map(e=>_V({clientX:e.clientX,clientY:e.clientY,currentTarget:n.currentTarget}));var o=()=>{if(QV!=null){var e=t.getState(),n=fk(e,e.tooltip.settings.shared);if(n===`axis`){var r=ZV?.[0];if(r==null){YV=null,XV=null;return}var i=hV(e,r);i?.activeIndex!=null&&t.dispatch(Ek({activeIndex:i.activeIndex,activeDataKey:void 0,activeCoordinate:i.activeCoordinate}))}else if(n===`item`){var a=QV.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(ym),c=o.getAttribute(`data-recharts-item-id`)??void 0,l=oA(e).find(e=>e.id===c);if(s==null||l==null||c==null)return;var{dataKey:u}=l,d=KV(e,s,c);t.dispatch(Sk({activeDataKey:u,activeIndex:s,activeCoordinate:d,activeGraphicalItemId:c}))}YV=null,XV=null}};if(!a){o();return}r===`raf`?YV=requestAnimationFrame(o):typeof r==`number`&&XV===null&&(o(),QV=null,XV=setTimeout(()=>{QV?o():(XV=null,YV=null)},r))}}});var $V={throttleDelay:`raf`,throttledEvents:[`mousemove`,`touchmove`,`pointermove`,`scroll`,`wheel`]},eH=Gf({name:`eventSettings`,initialState:$V,reducers:{setEventSettings:(e,t)=>{t.payload.throttleDelay!=null&&(e.throttleDelay=t.payload.throttleDelay),t.payload.throttledEvents!=null&&(e.throttledEvents=Z(t.payload.throttledEvents))}}}),{setEventSettings:tH}=eH.actions,nH=eH.reducer,rH=Yu({brush:MI,cartesianAxis:aI,chartData:rM,errorBars:nR,eventSettings:nH,graphicalItems:kF,layout:Rp,legend:Cg,options:Xj,polarAxis:EP,polarOptions:MV,referenceElements:HI,renderedTicks:uL,rootProps:OV,tooltip:Ak,zIndex:jj}),iH=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`Chart`;return Ff({reducer:rH,preloadedState:e,middleware:e=>e({serializableCheck:!1,immutableCheck:![`commonjs`,`es6`,`production`].includes(`es6`)}).concat([yV.middleware,xV.middleware,IV.middleware,HV.middleware,JV.middleware]),enhancers:e=>{var t=e;return typeof e==`function`&&(t=e()),t.concat(Nf({type:`raf`}))},devTools:w_.devToolsEnabled&&{serialize:{replacer:TV},name:`recharts-${t}`}})};function aH(e){var{preloadedState:t,children:n,reduxStoreName:r}=e,i=Pm(),a=(0,F.useRef)(null);if(i)return n;a.current??=iH(t,r);var o=cu;return F.createElement(zg,{context:o,store:a.current},n)}function oH(e){var{layout:t,margin:n}=e,r=W(),i=Pm();return(0,F.useEffect)(()=>{i||(r(Fp(t)),r(Pp(n)))},[r,i,t,n]),null}var sH=(0,F.memo)(oH,Hg);function cH(e){var t=W();return(0,F.useEffect)(()=>{t(kV(e))},[t,e]),null}var lH=(0,F.memo)(e=>{var t=W();return(0,F.useEffect)(()=>{t(tH(e))},[t,e]),null},Hg);function uH(e){var{zIndex:t,isPanorama:n}=e,r=(0,F.useRef)(null),i=W();return(0,F.useLayoutEffect)(()=>(r.current&&i(kj({zIndex:t,element:r.current,isPanorama:n})),()=>{i(Aj({zIndex:t,isPanorama:n}))}),[i,t,n]),F.createElement(`g`,{tabIndex:-1,ref:r,className:`recharts-zIndex-layer_${t}`})}function dH(e){var{children:t,isPanorama:n}=e,r=G(_j);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(uH,{key:e,zIndex:e,isPanorama:n})),t,a.map(e=>F.createElement(uH,{key:e,zIndex:e,isPanorama:n})))}var fH=[`children`];function pH(e,t){if(e==null)return{};var n,r,i=mH(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{var n=mh(),r=hh(),i=P_();if(!Bp(n)||!Bp(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(Yo,hH({},o,{title:s,desc:c,role:u,tabIndex:l,width:n,height:r,style:gH,ref:t}),a)}),vH=e=>{var{children:t}=e,n=G(Im);if(!n)return null;var{width:r,height:i,y:a,x:o}=n;return F.createElement(Yo,{width:r,height:i,x:o,y:a},t)},yH=(0,F.forwardRef)((e,t)=>{var{children:n}=e,r=pH(e,fH);return Pm()?F.createElement(vH,null,F.createElement(dH,{isPanorama:!0},n)):F.createElement(_H,hH({ref:t},r),F.createElement(dH,{isPanorama:!1},n))});function bH(){var e=W(),[t,n]=(0,F.useState)(null),r=G(hm);return(0,F.useEffect)(()=>{if(t!=null){var n=t.getBoundingClientRect().width/t.offsetWidth;J(n)&&n!==r&&e(Lp(n))}},[t,e,r]),n}function xH(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 SH(e){for(var t=1;t(mM(),null);function OH(e){if(typeof e==`number`)return e;if(typeof e==`string`){var t=parseFloat(e);if(!Number.isNaN(t))return t}return 0}var kH=(0,F.forwardRef)((e,t)=>{var n=(0,F.useRef)(null),[r,i]=(0,F.useState)({containerWidth:OH(e.style?.width),containerHeight:OH(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(xh,{width:r.containerWidth,height:r.containerHeight}),F.createElement(`div`,EH({ref:o},e)))}),AH=(0,F.forwardRef)((e,t)=>{var{width:n,height:r}=e,[i,a]=(0,F.useState)({containerWidth:OH(n),containerHeight:OH(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(xh,{width:i.containerWidth,height:i.containerHeight}),F.createElement(`div`,EH({ref:s},e)))}),jH=(0,F.forwardRef)((e,t)=>{var{width:n,height:r}=e;return F.createElement(F.Fragment,null,F.createElement(xh,{width:n,height:r}),F.createElement(`div`,EH({ref:t},e)))}),MH=(0,F.forwardRef)((e,t)=>{var{width:n,height:r}=e;return typeof n==`string`||typeof r==`string`?F.createElement(AH,EH({},e,{ref:t})):typeof n==`number`&&typeof r==`number`?F.createElement(jH,EH({},e,{width:n,height:r,ref:t})):F.createElement(F.Fragment,null,F.createElement(xh,{width:n,height:r}),F.createElement(`div`,EH({ref:t},e)))});function NH(e){return e?kH:MH}var PH=(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=bH(),D=sh(),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(vV(e)),x(VV({handler:a,reactEvent:e}))},[x,a]),A=(0,F.useCallback)(e=>{x(bV(e)),x(VV({handler:l,reactEvent:e}))},[x,l]),j=(0,F.useCallback)(e=>{x(wk()),x(VV({handler:u,reactEvent:e}))},[x,u]),ne=(0,F.useCallback)(e=>{x(bV(e)),x(VV({handler:d,reactEvent:e}))},[x,d]),re=(0,F.useCallback)(()=>{x(PV())},[x]),ie=(0,F.useCallback)(()=>{x(FV())},[x]),ae=(0,F.useCallback)(e=>{x(NV(e.key))},[x]),oe=(0,F.useCallback)(e=>{x(VV({handler:o,reactEvent:e}))},[x,o]),se=(0,F.useCallback)(e=>{x(VV({handler:s,reactEvent:e}))},[x,s]),ce=(0,F.useCallback)(e=>{x(VV({handler:c,reactEvent:e}))},[x,c]),le=(0,F.useCallback)(e=>{x(VV({handler:f,reactEvent:e}))},[x,f]),ue=(0,F.useCallback)(e=>{x(VV({handler:h,reactEvent:e}))},[x,h]),de=(0,F.useCallback)(e=>{y&&x(qV(e)),x(VV({handler:m,reactEvent:e}))},[x,y,m]),fe=(0,F.useCallback)(e=>{x(VV({handler:p,reactEvent:e}))},[x,p]),pe=NH(v);return F.createElement(Hj.Provider,{value:S},F.createElement(ts.Provider,{value:w},F.createElement(pe,{width:O??g?.width,height:k??g?.height,className:P(`recharts-wrapper`,r),style:SH({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:fe,onTouchMove:de,onTouchStart:ue,ref:ee},F.createElement(DH,null),n)))}),FH=[`width`,`height`,`responsive`,`children`,`className`,`style`,`compact`,`title`,`desc`];function IH(e,t){if(e==null)return{};var n,r,i=LH(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=Vo(IH(e,FH));return c?F.createElement(F.Fragment,null,F.createElement(xh,{width:n,height:r}),F.createElement(yH,{otherAttributes:d,title:l,desc:u},a)):F.createElement(PH,{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(yH,{otherAttributes:d,title:l,desc:u,ref:t},F.createElement(WI,null,a)))});function zH(){return zH=Object.assign?Object.assign.bind():function(e){for(var t=1;tF.createElement(KH,{chartName:`BarChart`,defaultTooltipEventType:`axis`,validateTooltipEventTypes:qH,tooltipPayloadSearcher:Jj,categoricalChartProps:e,ref:t})),YH=[`axis`],XH=(0,F.forwardRef)((e,t)=>F.createElement(KH,{chartName:`ComposedChart`,defaultTooltipEventType:`axis`,validateTooltipEventTypes:YH,tooltipPayloadSearcher:Jj,categoricalChartProps:e,ref:t})),ZH={light:``,dark:`.dark`},QH={width:320,height:200},$H=F.createContext(null);function eU(){let e=F.useContext($H);if(!e)throw Error(`useChart must be used within a `);return e}function tU({id:e,className:t,children:n,config:r,initialDimension:i=QH,...a}){let o=F.useId(),s=`chart-${e??o.replace(/:/g,``)}`;return(0,I.jsx)($H.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)(nU,{id:s,config:r}),(0,I.jsx)(lh,{initialDimension:i,children:n})]})})}var nU=({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(ZH).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},rU=TM;function iU({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}=eU(),m=F.useMemo(()=>{if(i||!t?.length)return null;let[e]=t,n=sU(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=sU(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 aU=s_;function oU({className:e,hideIcon:t=!1,payload:n,verticalAlign:r=`bottom`,nameKey:i}){let{config:a}=eU();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=sU(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 sU(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 cU=[{key:`total_amount`,label:()=>ne()},{key:`actual_amount`,label:()=>pe()}],lU=e=>Ge(e);function uU({selected:e,onChange:t}){let[n,r]=(0,F.useState)(!1),i=n=>{let r=new Set(e);r.has(n)?r.delete(n):r.add(n),t(r)},a=t=>e.size>0&&!e.has(t);return(0,I.jsxs)(ht,{onOpenChange:r,open:n,children:[(0,I.jsx)(mt,{asChild:!0,children:(0,I.jsxs)(Ze,{className:`h-8 border-dashed`,size:`sm`,variant:`outline`,children:[(0,I.jsx)(on,{className:`size-4`}),ae(),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)(pt,{align:`end`,className:`w-48 p-0`,children:(0,I.jsx)(ft,{children:(0,I.jsxs)(dt,{children:[(0,I.jsx)(ut,{children:Oe()}),(0,I.jsx)(ct,{children:cU.map(({key:e,label:t})=>(0,I.jsxs)(lt,{onSelect:()=>i(e),children:[(0,I.jsx)(`div`,{className:N(`flex size-4 items-center justify-center rounded-sm border border-primary`,a(e)?`opacity-50 [&_svg]:invisible`:`bg-primary [&_svg]:visible`),children:(0,I.jsx)(Dt,{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)(st,{}),(0,I.jsx)(ct,{children:(0,I.jsx)(lt,{className:`justify-center text-center`,onSelect:()=>t(new Set),children:xe()})})]})]})})})]})}var dU={total_amount:{label:ne(),color:`var(--chart-1)`},actual_amount:{label:pe(),color:`var(--chart-2)`}};function fU({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)(tU,{className:`h-80 w-full`,config:dU,children:(0,I.jsxs)(XH,{data:e,children:[(0,I.jsx)(ZL,{strokeDasharray:`3 3`,vertical:!1}),(0,I.jsx)($B,{dataKey:`day`,tickFormatter:Ke}),(0,I.jsx)(mV,{tickFormatter:e=>e>=1e3?`$${(e/1e3).toFixed(0)}k`:`$${e}`,width:60}),(0,I.jsx)(rU,{content:(0,I.jsx)(iU,{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:dU[t]?.label??t}),(0,I.jsx)(`span`,{className:`font-medium font-mono text-foreground tabular-nums`,children:lU(Number(e))})]})]})})}),(0,I.jsx)(aU,{content:(0,I.jsx)(oU,{})}),n(`total_amount`)&&(0,I.jsx)(Mz,{dataKey:`total_amount`,fill:`var(--chart-1)`,fillOpacity:.1,stroke:`var(--chart-1)`,strokeWidth:2.5,type:`monotone`}),n(`actual_amount`)&&(0,I.jsx)(Mz,{dataKey:`actual_amount`,fill:`var(--chart-2)`,fillOpacity:.2,stroke:`var(--chart-2)`,strokeWidth:1.5,type:`monotone`})]})})})}var pU=Object.assign(fU,{Filter:uU});function mU({overview:e,orderStats:t}){return(0,I.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-6`,children:[{title:Ee(),value:Ge(e.total_asset??0),icon:cn,hint:ye()},{title:Ae(),value:Ge(e.volume??0),icon:rn,hint:ce()},{title:n(),value:(e.order_count??0).toString(),icon:ln,hint:S()},{title:A(),value:`${((e.success_rate??0)*100).toFixed(1)}%`,icon:un,hint:ee()},{title:te(),value:(t.order_count??0).toString(),icon:tn,hint:m()},{title:we(),value:(t.success_count??0).toString(),icon:ln,hint:h()},{title:d(),value:`${Math.round(t.avg_payment_seconds??0)}s`,icon:kt,hint:k()},{title:D(),value:(t.expired_unpaid_count??0).toString(),icon:an,hint:f()},{title:O(),value:Ge(e.seven_day_volume??0),icon:rn,hint:i()},{title:Le(),value:(e.active_addresses??0).toString(),icon:an,hint:C()},{title:g(),value:(e.online_chains??0).toString(),icon:sn,hint:p()},{title:u(),value:`${((t.success_rate??0)*100).toFixed(1)}%`,icon:tn,hint:b()}].map(e=>(0,I.jsxs)(It,{children:[(0,I.jsxs)(Nt,{className:`flex flex-row items-center justify-between space-y-0 pb-2`,children:[(0,I.jsx)(Mt,{className:`font-medium text-sm`,children:e.title}),(0,I.jsx)(e.icon,{className:`h-4 w-4 text-muted-foreground`})]}),(0,I.jsxs)(Pt,{children:[(0,I.jsx)(`div`,{className:`font-bold text-2xl`,children:e.value}),(0,I.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:e.hint})]})]},e.title))})}var hU={total_amount:{label:v(),color:`var(--chart-2)`},actual_amount:{label:_(),color:`var(--chart-5)`}};function gU({data:e}){return(0,I.jsx)(tU,{className:`h-80 w-full`,config:hU,children:(0,I.jsxs)(JH,{barGap:8,data:e,children:[(0,I.jsx)(ZL,{strokeDasharray:`3 3`,vertical:!1}),(0,I.jsx)($B,{dataKey:`day`,tickFormatter:Ke}),(0,I.jsx)(rU,{content:(0,I.jsx)(iU,{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:hU[t]?.label??t}),(0,I.jsx)(`span`,{className:`font-medium font-mono text-foreground tabular-nums`,children:Ge(Number(e))})]})]})})}),(0,I.jsx)(aU,{content:(0,I.jsx)(oU,{})}),(0,I.jsx)(MB,{dataKey:`total_amount`,fill:`var(--color-total_amount)`,radius:[8,8,0,0]}),(0,I.jsx)(MB,{dataKey:`actual_amount`,fill:`var(--color-actual_amount)`,radius:[8,8,0,0]})]})})}var _U={order_count:{label:me(),color:`var(--chart-1)`},success_count:{label:r(),color:`var(--chart-3)`}};function vU({data:e}){return(0,I.jsx)(tU,{className:`h-80 w-full`,config:_U,children:(0,I.jsxs)(XH,{data:e,children:[(0,I.jsx)(ZL,{strokeDasharray:`3 3`,vertical:!1}),(0,I.jsx)($B,{dataKey:`day`}),(0,I.jsx)(mV,{allowDecimals:!1,yAxisId:`left`}),(0,I.jsx)(mV,{allowDecimals:!1,hide:!0,yAxisId:`right`}),(0,I.jsx)(rU,{content:(0,I.jsx)(iU,{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:Number(e).toLocaleString()})]})]})})}),(0,I.jsx)(aU,{content:(0,I.jsx)(oU,{})}),(0,I.jsx)(MB,{dataKey:`order_count`,fill:`var(--color-order_count)`,radius:[8,8,0,0],yAxisId:`left`}),(0,I.jsx)(qR,{dataKey:`success_count`,dot:{r:3},stroke:`var(--color-success_count)`,strokeWidth:2,type:`monotone`,yAxisId:`right`})]})})}var yU={1:`bg-amber-500/10 text-amber-600`,2:`bg-emerald-500/10 text-emerald-600`,3:`bg-rose-500/10 text-rose-600`},bU={1:he(),2:y(),3:s()};function xU({orders:e}){let t=Be();return(0,I.jsx)(`div`,{className:`overflow-hidden rounded-md border`,children:(0,I.jsxs)(yt,{children:[(0,I.jsx)(Ct,{children:(0,I.jsxs)(Et,{className:`group/row`,children:[(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:Pe()}),(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:o()}),(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:w()}),(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:Fe()}),(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:ie()}),(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:Ie()}),(0,I.jsx)(xt,{className:`bg-background group-hover/row:bg-muted`,children:Me()})]})}),(0,I.jsx)(wt,{children:e.map(e=>(0,I.jsxs)(Et,{className:`group/row cursor-pointer`,onClick:()=>t({to:`/orders`}),children:[(0,I.jsx)(Tt,{className:`bg-background group-hover/row:bg-muted`,children:qe(e.created_at)}),(0,I.jsxs)(Tt,{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)(Tt,{className:`bg-background group-hover/row:bg-muted`,children:e.receive_address}),(0,I.jsxs)(Tt,{className:`bg-background group-hover/row:bg-muted`,children:[Je(e.amount),` `,e.currency]}),(0,I.jsxs)(Tt,{className:`bg-background group-hover/row:bg-muted`,children:[Je(e.actual_amount,6),` `,e.token||``]}),(0,I.jsx)(Tt,{className:`bg-background group-hover/row:bg-muted`,children:e.network}),(0,I.jsx)(Tt,{className:`bg-background group-hover/row:bg-muted`,children:(0,I.jsx)(jt,{className:N(yU[e.status??1]),children:bU[e.status??1]})})]},e.id))})]})})}var SU=Array.from({length:8},(e,t)=>`stat-${t}`),CU=Array.from({length:10},(e,t)=>`order-${t}`);function wU(){return(0,I.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-4`,children:SU.map(e=>(0,I.jsxs)(It,{children:[(0,I.jsx)(Nt,{className:`pb-2`,children:(0,I.jsx)(We,{className:`h-4 w-24`})}),(0,I.jsxs)(Pt,{children:[(0,I.jsx)(We,{className:`mb-1 h-7 w-20`}),(0,I.jsx)(We,{className:`h-3 w-32`})]})]},e))})}function TU(){return(0,I.jsx)(We,{className:`h-80 w-full rounded-md`})}function EU(){return(0,I.jsx)(`div`,{className:`overflow-hidden rounded-md border`,children:(0,I.jsxs)(yt,{children:[(0,I.jsx)(Ct,{children:(0,I.jsxs)(Et,{children:[(0,I.jsx)(xt,{children:Pe()}),(0,I.jsx)(xt,{children:o()}),(0,I.jsx)(xt,{children:w()}),(0,I.jsx)(xt,{children:Fe()}),(0,I.jsx)(xt,{children:ie()}),(0,I.jsx)(xt,{children:Ie()}),(0,I.jsx)(xt,{children:Me()})]})}),(0,I.jsx)(wt,{children:CU.map(e=>(0,I.jsxs)(Et,{children:[(0,I.jsx)(Tt,{children:(0,I.jsx)(St,{type:`date`})}),(0,I.jsx)(Tt,{children:(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(St,{type:`id`}),(0,I.jsx)(We,{className:`h-3 w-24`})]})}),(0,I.jsx)(Tt,{children:(0,I.jsx)(St,{type:`long`})}),(0,I.jsx)(Tt,{children:(0,I.jsx)(St,{type:`amount`})}),(0,I.jsx)(Tt,{children:(0,I.jsx)(St,{type:`amount`})}),(0,I.jsx)(Tt,{children:(0,I.jsx)(St,{type:`short`})}),(0,I.jsx)(Tt,{children:(0,I.jsx)(St,{type:`badge`})})]},e))})]})})}function DU(){let[e,t]=(0,F.useState)(`today`),[n,r]=(0,F.useState)(new Set),[i,a]=(0,F.useState)(),o=Re.useQuery(`get`,`/admin/api/v1/dashboard/overview`),s={range:e};e===`custom`&&i?.from&&(s.start_at=Math.floor(i.from.getTime()/1e3),i.to&&(s.end_at=Math.floor(i.to.getTime()/1e3)));let c=Re.useQuery(`get`,`/admin/api/v1/dashboard/asset-trend`,{params:{query:s}},{enabled:e!==`custom`||!!i?.from}),u=Re.useQuery(`get`,`/admin/api/v1/dashboard/revenue-trend`,{params:{query:s}},{enabled:e!==`custom`||!!i?.from}),d=Re.useQuery(`get`,`/admin/api/v1/dashboard/order-stats`,{params:{query:s}},{enabled:e!==`custom`||!!i?.from}),f=Re.useQuery(`get`,`/admin/api/v1/dashboard/recent-orders`),p=c.data?.data??[],m=u.data?.data??[],h=f.data?.data??[];return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(_t,{}),(0,I.jsxs)(gt,{className:`flex flex-1 flex-col gap-4 sm:gap-6`,children:[(0,I.jsx)(At,{description:E(),title:l()}),(o.isLoading||d.isLoading)&&(0,I.jsx)(wU,{}),!(o.isLoading||d.isLoading)&&o.data?.data&&(0,I.jsx)(mU,{orderStats:d.data?.data??{},overview:o.data.data}),(0,I.jsx)(OU,{customRange:i,range:e,selectedAddrs:n,setCustomRange:a,setRange:t,setSelectedAddrs:r,trendData:p,trendLoading:c.isLoading}),(0,I.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-7`,children:[(0,I.jsxs)(It,{className:`xl:col-span-4`,children:[(0,I.jsxs)(Nt,{children:[(0,I.jsx)(Mt,{children:j()}),(0,I.jsx)(Ft,{children:ue()})]}),(0,I.jsxs)(Pt,{children:[u.isLoading&&(0,I.jsx)(TU,{}),!u.isLoading&&m.length>0&&(0,I.jsx)(gU,{data:m})]})]}),(0,I.jsxs)(It,{className:`xl:col-span-3`,children:[(0,I.jsxs)(Nt,{children:[(0,I.jsx)(Mt,{children:de()}),(0,I.jsx)(Ft,{children:_e()})]}),(0,I.jsxs)(Pt,{children:[u.isLoading&&(0,I.jsx)(TU,{}),!u.isLoading&&m.length>0&&(0,I.jsx)(vU,{data:m})]})]})]}),(0,I.jsxs)(It,{children:[(0,I.jsxs)(Nt,{children:[(0,I.jsx)(Mt,{children:Ce()}),(0,I.jsx)(Ft,{children:le()})]}),(0,I.jsxs)(Pt,{children:[f.isLoading&&(0,I.jsx)(EU,{}),!f.isLoading&&h.length>0&&(0,I.jsx)(xU,{orders:h}),!f.isLoading&&h.length===0&&(0,I.jsx)(`div`,{className:`py-8 text-center text-muted-foreground`,children:oe()})]})]})]})]})}function OU({customRange:e,range:t,selectedAddrs:n,setCustomRange:r,setRange:i,setSelectedAddrs:o,trendData:s,trendLoading:l}){return(0,I.jsxs)(It,{children:[(0,I.jsxs)(Nt,{className:`flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(Mt,{children:je()}),(0,I.jsx)(Ft,{children:ge()})]}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,I.jsx)(pU.Filter,{data:s,onChange:o,selected:n}),(0,I.jsx)(Mo,{onValueChange:e=>{i(e),e!==`custom`&&r(void 0)},value:t,children:(0,I.jsxs)(Po,{children:[(0,I.jsx)(Fo,{value:`today`,children:c()}),(0,I.jsx)(Fo,{value:`7d`,children:T()}),(0,I.jsx)(Fo,{value:`30d`,children:Ne()}),(0,I.jsx)(Fo,{value:`custom`,children:a()})]})}),t===`custom`&&(0,I.jsx)(jo,{onSelect:e=>r(e),selected:e})]})]}),(0,I.jsxs)(Pt,{children:[l&&(0,I.jsx)(TU,{}),!l&&s.length>0&&(0,I.jsx)(pU,{data:s,range:t,selected:n})]})]})}var kU=DU;export{kU as component}; \ No newline at end of file diff --git a/src/www/assets/data-table-CmcvKcj8.js b/src/www/assets/data-table-CmcvKcj8.js new file mode 100644 index 0000000..353a7b9 --- /dev/null +++ b/src/www/assets/data-table-CmcvKcj8.js @@ -0,0 +1,4 @@ +import{Fl as e,_l as t,al as n,cl as r,dl as i,fl as a,gl as o,hl as s,ll as c,ml as l,nu as u,ol as d,ou as f,pl as p,ru as m,sl as h,ul as g,vl as ee,yl as te}from"./messages-BovT1T-w.js";import{G as ne,P as re}from"./search-provider-Cx1K1ilz.js";import{a as ie,i as _,r as ae,t as v}from"./button-DJA4fnJ8.js";import"./wallet--XSRr4dT.js";import{a as y,l as oe,n as se,o as ce,p as le,r as ue,s as de,t as fe}from"./dropdown-menu-CUea1X0A.js";import{a as pe,c as me,h as he,i as ge,o as _e,r as ve,s as ye,t as be}from"./command-BwVY_kli.js";import{n as xe,r as Se,t as Ce}from"./popover-D5q6Hufu.js";import{a as we,i as Te,n as Ee,r as De,t as Oe}from"./select-DcStuzoT.js";import{t as ke}from"./separator-CRLYw2cW.js";import{t as b}from"./createLucideIcon-D28ivbfF.js";import{t as Ae}from"./check-gDgbfVXu.js";import{t as je}from"./chevrons-up-down-iOmAu5Fh.js";import{t as Me}from"./eye-off-C-BF3gv3.js";import{n as Ne,r as Pe,t as Fe}from"./empty-state-Cam-sX8U.js";import{t as Ie}from"./input-DiRPHDd8.js";import{t as Le}from"./badge-BAmRBT3U.js";var Re=b(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),ze=b(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),Be=b(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]),Ve=b(`chevrons-left`,[[`path`,{d:`m11 17-5-5 5-5`,key:`13zhaf`}],[`path`,{d:`m18 17-5-5 5-5`,key:`h8a8et`}]]),He=b(`chevrons-right`,[[`path`,{d:`m6 17 5-5-5-5`,key:`xnjwq`}],[`path`,{d:`m13 17 5-5-5-5`,key:`17xmmf`}]]),Ue=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=f(m(),1),S=u();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 We(e){return Array.isArray(e)&&e.every(e=>typeof e==`number`)}function Ge(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 Ke(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 qe(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 Je(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 Ye={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=Je(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)=>Je(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:()=>Ge(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=>Ke(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()}}},Ze=(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))};Ze.autoRemove=e=>N(e);var Qe=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};Qe.autoRemove=e=>N(e);var $e=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===n?.toLowerCase()};$e.autoRemove=e=>N(e);var et=(e,t,n)=>e.getValue(t)?.includes(n);et.autoRemove=e=>N(e);var tt=(e,t,n)=>!n.some(n=>{var r;return!((r=e.getValue(t))!=null&&r.includes(n))});tt.autoRemove=e=>N(e)||!(e!=null&&e.length);var nt=(e,t,n)=>n.some(n=>e.getValue(t)?.includes(n));nt.autoRemove=e=>N(e)||!(e!=null&&e.length);var rt=(e,t,n)=>e.getValue(t)===n;rt.autoRemove=e=>N(e);var it=(e,t,n)=>e.getValue(t)==n;it.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:Ze,includesStringSensitive:Qe,equalsString:$e,arrIncludes:et,arrIncludesAll:tt,arrIncludesSome:nt,equals:rt,weakEquals:it,inNumberRange:j};function N(e){return e==null||e===``}var at={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(ot(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&&ot(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 ot(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(!We(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},st={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 ct(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 lt={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 ct(i,t,n)},D(e.options,`debugTable`,`_getOrderColumnsFn`))}},F=()=>({left:[],right:[]}),ut={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 dt(e){return e||(typeof document<`u`?document:null)}var I={size:150,minSize:20,maxSize:2**53-1},ft=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),pt={getDefaultColumnDef:()=>I,getInitialState:e=>({columnSizing:{},columnSizingInfo:ft(),...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=dt(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=mt()?{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?ft():e.initialState.columnSizingInfo??ft())},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 mt(){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 ht={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 gt={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()}}},_t={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)}}},vt={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}),yt={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:[]}),bt={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`))}},xt={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,St=(e,t,n)=>Ot(X(e.getValue(n)).toLowerCase(),X(t.getValue(n)).toLowerCase()),Ct=(e,t,n)=>Ot(X(e.getValue(n)),X(t.getValue(n))),wt=(e,t,n)=>Y(X(e.getValue(n)).toLowerCase(),X(t.getValue(n)).toLowerCase()),Tt=(e,t,n)=>Y(X(e.getValue(n)),X(t.getValue(n))),Et=(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 Ot(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:St,alphanumericCaseSensitive:Ct,text:wt,textCaseSensitive:Tt,datetime:Et,basic:Dt},kt=[Ye,ht,lt,ut,Xe,at,gt,_t,{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())}},st,vt,yt,bt,xt,pt];function At(e){let t=[...kt,...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=qe(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 Mt(){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:Nt(t),D(e.options,`debugTable`,`getExpandedRowModel`))}function Nt(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 Pt(e,t,n){return n.options.filterFromLeafRows?Ft(e,t,n):It(e,t,n)}function Ft(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 Pt(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 Pt(t.rows,e=>{for(let t=0;te._autoResetPageIndex()))}function Bt(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}:Nt({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 Vt(){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 Ht(e,t){return e?Ut(e)?x.createElement(e,t):e:null}function Ut(e){return Wt(e)||typeof e==`function`||Gt(e)}function Wt(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function Gt(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function Kt(e){let t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=x.useState(()=>({current:At(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 qt({column:e,title:n,className:r}){return e.getCanSort()?(0,S.jsx)(`div`,{className:_(`flex items-center space-x-2`,r),children:(0,S.jsxs)(fe,{children:[(0,S.jsx)(oe,{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:n}),(()=>{let t=e.getIsSorted();return t===`desc`?(0,S.jsx)(Re,{className:`ms-2 h-4 w-4`}):t===`asc`?(0,S.jsx)(ze,{className:`ms-2 h-4 w-4`}):(0,S.jsx)(je,{className:`ms-2 h-4 w-4`})})()]})}),(0,S.jsxs)(ue,{align:`start`,children:[(0,S.jsxs)(y,{onClick:()=>e.toggleSorting(!1),children:[(0,S.jsx)(ze,{className:`size-3.5 text-muted-foreground/70`}),te()]}),(0,S.jsxs)(y,{onClick:()=>e.toggleSorting(!0),children:[(0,S.jsx)(Re,{className:`size-3.5 text-muted-foreground/70`}),ee()]}),e.getCanHide()&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(de,{}),(0,S.jsxs)(y,{onClick:()=>e.toggleVisibility(!1),children:[(0,S.jsx)(Me,{className:`size-3.5 text-muted-foreground/70`}),t()]})]})]})]})}):(0,S.jsx)(`div`,{className:_(`px-2`,r),children:n})}function Jt({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 Yt({className:e,...t}){return(0,S.jsx)(`thead`,{className:_(`[&_tr]:border-b`,e),"data-slot":`table-header`,...t})}function Xt({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 Zt({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 Qt={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 $t({type:e=`long`}){return(0,S.jsx)(re,{className:Qt[e]})}var en=`group/row`,tn=ae(`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 nn(e){return _(`px-4`,tn({sticky:e?.sticky,shadow:e?.shadow,skeleton:e?.skeleton}),e?.className,e?.td?.className)}function rn(e){return _(tn({sticky:e?.sticky,shadow:e?.shadow,skeleton:e?.skeleton}),e?.className,e?.th?.className)}function an({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:en,children:n.map(e=>{let t=e.columnDef.meta;return(0,S.jsx)($,{className:nn(t),children:(0,S.jsx)($t,{type:t?.skeleton??`long`})},e.id)})},`skeleton-${t}`))})}function on({table:e,renderExpandedRow:t}){return(0,S.jsx)(S.Fragment,{children:e.getRowModel().rows.map(e=>{let n=(0,S.jsx)(Q,{className:_(en,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:nn(t),children:Ht(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 sn({colSpan:e,text:t}){return(0,S.jsx)(Q,{children:(0,S.jsx)($,{className:`p-0`,colSpan:e,children:(0,S.jsx)(Fe,{description:t})})})}function cn({table:e,className:t,emptyText:n=`暂无数据`,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)(an,{loadingRows:i,table:e}):s.length?(0,S.jsx)(on,{renderExpandedRow:a,table:e}):(0,S.jsx)(sn,{colSpan:o.length,text:n})}return(0,S.jsx)(`div`,{className:`overflow-x-auto rounded-md border`,children:(0,S.jsxs)(Jt,{className:t,children:[c&&(0,S.jsx)(Yt,{children:e.getHeaderGroups().map(e=>(0,S.jsx)(Q,{className:en,children:e.headers.map(e=>{let t=e.column.columnDef.meta;return(0,S.jsx)(Zt,{className:rn(t),colSpan:e.colSpan,children:e.isPlaceholder?null:Ht(e.column.columnDef.header,e.getContext())},e.id)})},e.id))}),(0,S.jsx)(Xt,{children:l()})]})})}function ln({table:e,className:t}){let n=e.getState().pagination.pageIndex+1,r=e.getPageCount(),c=ie(n,r);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:o({current:n,total:r})}),(0,S.jsxs)(`div`,{className:`flex @max-2xl/content:flex-row-reverse items-center gap-2`,children:[(0,S.jsxs)(Oe,{onValueChange:t=>{e.setPageSize(Number(t))},value:`${e.getState().pagination.pageSize}`,children:[(0,S.jsx)(Te,{className:`h-8 w-17.5`,children:(0,S.jsx)(we,{placeholder:e.getState().pagination.pageSize})}),(0,S.jsx)(Ee,{side:`top`,children:[10,20,30,40,50].map(e=>(0,S.jsx)(De,{value:`${e}`,children:e},e))})]}),(0,S.jsx)(`p`,{className:`hidden font-medium text-sm sm:block`,children:s()})]})]}),(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:o({current:n,total:r})}),(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:l()}),(0,S.jsx)(Ve,{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:p()}),(0,S.jsx)(Be,{className:`h-4 w-4`})]}),c.map((t,r)=>(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:a({page:t})}),t]})},`page-${t}-${r}`)),(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:i()}),(0,S.jsx)(ne,{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:g()}),(0,S.jsx)(He,{className:`h-4 w-4`})]})]})]})]})}function un({column:t,title:n,options:r}){let i=t?.getFacetedUniqueValues(),a=new Set(t?.getFilterValue());return(0,S.jsxs)(Ce,{children:[(0,S.jsx)(Se,{asChild:!0,children:(0,S.jsxs)(v,{className:`h-8 border-dashed`,size:`sm`,variant:`outline`,children:[(0,S.jsx)(Ue,{className:`size-4`}),n,a?.size>0&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(ke,{className:`mx-2 h-4`,orientation:`vertical`}),(0,S.jsx)(Le,{className:`rounded-sm px-1 font-normal lg:hidden`,variant:`secondary`,children:a.size}),(0,S.jsx)(`div`,{className:`hidden space-x-1 lg:flex`,children:a.size>2?(0,S.jsxs)(Le,{className:`rounded-sm px-1 font-normal`,variant:`secondary`,children:[a.size,` selected`]}):r.filter(e=>a.has(e.value)).map(e=>(0,S.jsx)(Le,{className:`rounded-sm px-1 font-normal`,variant:`secondary`,children:e.label},e.value))})]})]})}),(0,S.jsx)(xe,{align:`start`,className:`w-50 p-0`,children:(0,S.jsxs)(be,{children:[(0,S.jsx)(pe,{placeholder:n}),(0,S.jsxs)(ye,{children:[(0,S.jsx)(ve,{children:e()}),(0,S.jsx)(ge,{children:r.map(e=>{let n=a.has(e.value);return(0,S.jsxs)(_e,{onSelect:()=>{n?a.delete(e.value):a.add(e.value);let r=Array.from(a);t?.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)(Ae,{className:_(`h-4 w-4 text-background`)})}),e.icon&&(0,S.jsx)(e.icon,{className:`size-4 text-muted-foreground`}),(0,S.jsx)(`span`,{children:e.label}),i?.get(e.value)&&(0,S.jsx)(`span`,{className:`ms-auto flex h-4 w-4 items-center justify-center font-mono text-xs`,children:i.get(e.value)})]},e.value)})}),a.size>0&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(me,{}),(0,S.jsx)(ge,{children:(0,S.jsx)(_e,{className:`justify-center text-center`,onSelect:()=>t?.setFilterValue(void 0),children:`Clear filters`})})]})]})]})})]})}function dn(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 fn({table:e}){return(0,S.jsxs)(fe,{modal:!1,children:[(0,S.jsx)(le,{asChild:!0,children:(0,S.jsxs)(v,{className:`ms-auto hidden h-8 lg:flex`,size:`sm`,variant:`outline`,children:[(0,S.jsx)(Ne,{className:`size-4`}),d()]})}),(0,S.jsxs)(ue,{align:`end`,className:`w-37.5`,children:[(0,S.jsx)(ce,{children:n()}),(0,S.jsx)(de,{}),e.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide()).map(e=>(0,S.jsx)(se,{checked:e.getIsVisible(),className:`capitalize`,onCheckedChange:t=>e.toggleVisibility(!!t),children:dn(e)},e.id))]})]})}function pn({table:e,searchPlaceholder:t=c(),searchKey:n,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:[n?(0,S.jsx)(Ie,{className:`h-8 w-37.5 lg:w-62.5`,onChange:t=>e.getColumn(n)?.setFilterValue(t.target.value),placeholder:t,value:e.getColumn(n)?.getFilterValue()??``}):(0,S.jsx)(Ie,{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)(un,{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:[r(),(0,S.jsx)(he,{className:`ms-2 h-4 w-4`})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[a&&(0,S.jsx)(mn,{onRefresh:a}),(0,S.jsx)(fn,{table:e})]})]})}function mn({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)(Pe,{className:_(`size-4`,t&&`animate-spin`)}),h()]})}export{zt as _,Jt as a,Be as b,Zt as c,qt as d,Kt as f,Rt as g,Lt as h,$t as i,Yt as l,Mt as m,ln as n,Xt as o,jt as p,cn as r,$ as s,pn as t,Q as u,Bt as v,Vt as y}; \ No newline at end of file diff --git a/src/www/assets/display-CkSSrdk4.js b/src/www/assets/display-CkSSrdk4.js new file mode 100644 index 0000000..f2a60fe --- /dev/null +++ b/src/www/assets/display-CkSSrdk4.js @@ -0,0 +1 @@ +import{B as e,F as t,G as n,H as r,I as i,K as a,L as o,R as s,U as c,V as l,W as u,nu as d,z as f}from"./messages-BovT1T-w.js";import{t as p}from"./button-DJA4fnJ8.js";import{t as m}from"./checkbox-B_Isethe.js";import{c as h,i as g,s as _}from"./zod-Cymc5bS-.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-DdHiBYMe.js";import{t as D}from"./page-header-BBJ9dE3-.js";import{t as O}from"./show-submitted-data-l0RlCwTX.js";var k=d(),A=[{id:`recents`,label:u()},{id:`home`,label:c()},{id:`applications`,label:r()},{id:`desktop`,label:l()},{id:`downloads`,label:e()},{id:`documents`,label:f()}],j=_({items:g(h()).refine(e=>e.some(e=>e),{message:s()})}),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:o()}),(0,k.jsx)(w,{children:i()})]}),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:t()})]})})}function P(){return(0,k.jsx)(D,{description:n(),title:a(),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-15n4mVGL.js b/src/www/assets/dist-15n4mVGL.js new file mode 100644 index 0000000..163813e --- /dev/null +++ b/src/www/assets/dist-15n4mVGL.js @@ -0,0 +1 @@ +import{iu as e,nu as t,ou as n,ru as r}from"./messages-BovT1T-w.js";import{c as i}from"./button-DJA4fnJ8.js";var a=e((e=>{var t=r();function n(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=n(r(),1),c=n(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-BEDXr2LC.js b/src/www/assets/dist-BEDXr2LC.js new file mode 100644 index 0000000..dd0d69f --- /dev/null +++ b/src/www/assets/dist-BEDXr2LC.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{r}from"./dist-DG5UMlBd.js";var i=t(n(),1),a=i.useId||(()=>void 0),o=0;function s(e){let[t,n]=i.useState(a());return r(()=>{e||n(e=>e??String(o++))},[e]),e||(t?`radix-${t}`:``)}var c=e(),l=i.createContext(void 0),u=e=>{let{dir:t,children:n}=e;return(0,c.jsx)(l.Provider,{value:t,children:n})};function d(e){let t=i.useContext(l);return e||t||`ltr`}function f(e){let t=i.useRef(e);return i.useEffect(()=>{t.current=e}),i.useMemo(()=>(...e)=>t.current?.(...e),[])}export{s as i,u as n,d as r,f as t}; \ No newline at end of file diff --git a/src/www/assets/dist-BKfJQFVD.js b/src/www/assets/dist-BKfJQFVD.js new file mode 100644 index 0000000..9057b23 --- /dev/null +++ b/src/www/assets/dist-BKfJQFVD.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{n as r,r as i,t as a}from"./dist-15n4mVGL.js";import{d as o}from"./button-DJA4fnJ8.js";import{i as s,o as c,r as l,t as u}from"./dist-DG5UMlBd.js";import{t as d}from"./dist-BEDXr2LC.js";var f=t(n(),1);function p(e,t=globalThis?.document){let n=d(e);f.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 m=e(),h=`DismissableLayer`,g=`dismissableLayer.update`,_=`dismissableLayer.pointerDownOutside`,v=`dismissableLayer.focusOutside`,y,b=f.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),x=f.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:c,onInteractOutside:l,onDismiss:u,...d}=e,h=f.useContext(b),[_,v]=f.useState(null),x=_?.ownerDocument??globalThis?.document,[,S]=f.useState({}),C=o(t,e=>v(e)),D=Array.from(h.layers),[O]=[...h.layersWithOutsidePointerEventsDisabled].slice(-1),k=D.indexOf(O),A=_?D.indexOf(_):-1,j=h.layersWithOutsidePointerEventsDisabled.size>0,M=A>=k,N=w(e=>{let t=e.target,n=[...h.branches].some(e=>e.contains(t));!M||n||(i?.(e),l?.(e),e.defaultPrevented||u?.())},x),P=T(e=>{let t=e.target;[...h.branches].some(e=>e.contains(t))||(c?.(e),l?.(e),e.defaultPrevented||u?.())},x);return p(e=>{A===h.layers.size-1&&(r?.(e),!e.defaultPrevented&&u&&(e.preventDefault(),u()))},x),f.useEffect(()=>{if(_)return n&&(h.layersWithOutsidePointerEventsDisabled.size===0&&(y=x.body.style.pointerEvents,x.body.style.pointerEvents=`none`),h.layersWithOutsidePointerEventsDisabled.add(_)),h.layers.add(_),E(),()=>{n&&h.layersWithOutsidePointerEventsDisabled.size===1&&(x.body.style.pointerEvents=y)}},[_,x,n,h]),f.useEffect(()=>()=>{_&&(h.layers.delete(_),h.layersWithOutsidePointerEventsDisabled.delete(_),E())},[_,h]),f.useEffect(()=>{let e=()=>S({});return document.addEventListener(g,e),()=>document.removeEventListener(g,e)},[]),(0,m.jsx)(a.div,{...d,ref:C,style:{pointerEvents:j?M?`auto`:`none`:void 0,...e.style},onFocusCapture:s(e.onFocusCapture,P.onFocusCapture),onBlurCapture:s(e.onBlurCapture,P.onBlurCapture),onPointerDownCapture:s(e.onPointerDownCapture,N.onPointerDownCapture)})});x.displayName=h;var S=`DismissableLayerBranch`,C=f.forwardRef((e,t)=>{let n=f.useContext(b),r=f.useRef(null),i=o(t,r);return f.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,m.jsx)(a.div,{...e,ref:i})});C.displayName=S;function w(e,t=globalThis?.document){let n=d(e),r=f.useRef(!1),i=f.useRef(()=>{});return f.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){D(_,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 T(e,t=globalThis?.document){let n=d(e),r=f.useRef(!1);return f.useEffect(()=>{let e=e=>{e.target&&!r.current&&D(v,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 E(){let e=new CustomEvent(g);document.dispatchEvent(e)}function D(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 O=t(i(),1),k=`Portal`,A=f.forwardRef((e,t)=>{let{container:n,...r}=e,[i,o]=f.useState(!1);l(()=>o(!0),[]);let s=n||i&&globalThis?.document?.body;return s?O.createPortal((0,m.jsx)(a.div,{...r,ref:t}),s):null});A.displayName=k;var j=[`top`,`right`,`bottom`,`left`],M=Math.min,N=Math.max,P=Math.round,F=Math.floor,I=e=>({x:e,y:e}),ee={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function L(e,t,n){return N(e,M(t,n))}function R(e,t){return typeof e==`function`?e(t):e}function z(e){return e.split(`-`)[0]}function B(e){return e.split(`-`)[1]}function V(e){return e===`x`?`y`:`x`}function te(e){return e===`y`?`height`:`width`}function H(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function ne(e){return V(H(e))}function re(e,t,n){n===void 0&&(n=!1);let r=B(e),i=ne(e),a=te(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=fe(o)),[o,fe(o)]}function ie(e){let t=fe(e);return[ae(e),t,ae(t)]}function ae(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var oe=[`left`,`right`],se=[`right`,`left`],ce=[`top`,`bottom`],le=[`bottom`,`top`];function ue(e,t,n){switch(e){case`top`:case`bottom`:return n?t?se:oe:t?oe:se;case`left`:case`right`:return t?ce:le;default:return[]}}function de(e,t,n,r){let i=B(e),a=ue(z(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(ae)))),a}function fe(e){let t=z(e);return ee[t]+e.slice(t.length)}function pe(e){return{top:0,right:0,bottom:0,left:0,...e}}function me(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:pe(e)}function he(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 ge(e,t,n){let{reference:r,floating:i}=e,a=H(t),o=ne(t),s=te(o),c=z(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(B(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 _e(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}=R(t,e),p=me(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=he(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},y=he(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var ve=50,ye=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:_e},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=ge(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}=R(e,t)||{};if(l==null)return{};let d=me(u),f={x:n,y:r},p=ne(i),m=te(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,v=g?`bottom`:`right`,y=g?`clientHeight`:`clientWidth`,b=a.reference[m]+a.reference[p]-f[p]-a.floating[m],x=f[p]-a.reference[p],S=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),C=S?S[y]:0;(!C||!await(o.isElement==null?void 0:o.isElement(S)))&&(C=s.floating[y]||a.floating[m]);let w=b/2-x/2,T=C/2-h[m]/2-1,E=M(d[_],T),D=M(d[v],T),O=E,k=C-h[m]-D,A=C/2-h[m]/2+w,j=L(O,A,k),N=!c.arrow&&B(i)!=null&&A!==j&&a.reference[m]/2-(Ae<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(!(u===`alignment`&&_!==H(t))||T.every(e=>H(e.placement)===_?e.overflows[0]>0:!0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.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=T.filter(e=>{if(x){let t=H(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 Se(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Ce(e){return j.some(t=>e[t]>=0)}var we=function(e){return e===void 0&&(e={}),{name:`hide`,options:e,async fn(t){let{rects:n,platform:r}=t,{strategy:i=`referenceHidden`,...a}=R(e,t);switch(i){case`referenceHidden`:{let e=Se(await r.detectOverflow(t,{...a,elementContext:`reference`}),n.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:Ce(e)}}}case`escaped`:{let e=Se(await r.detectOverflow(t,{...a,altBoundary:!0}),n.floating);return{data:{escapedOffsets:e,escaped:Ce(e)}}}default:return{}}}}},Te=new Set([`left`,`top`]);async function Ee(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=z(n),s=B(n),c=H(n)===`y`,l=Te.has(o)?-1:1,u=a&&c?-1:1,d=R(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 De=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 Ee(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}}}}},Oe=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}=R(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=H(z(i)),p=V(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=L(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=L(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}}}}}},ke=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}=R(e,t),u={x:n,y:r},d=H(i),f=V(d),p=u[f],m=u[d],h=R(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=Te.has(z(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}}}},Ae=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}=R(e,t),u=await o.detectOverflow(t,l),d=z(i),f=B(i),p=H(i)===`y`,{width:m,height:h}=a.floating,g,_;d===`top`||d===`bottom`?(g=d,_=f===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?`start`:`end`)?`left`:`right`):(_=d,g=f===`end`?`top`:`bottom`);let v=h-u.top-u.bottom,y=m-u.left-u.right,b=M(h-u[g],v),x=M(m-u[_],y),S=!t.middlewareData.shift,C=b,w=x;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(w=y),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(C=v),S&&!f){let e=N(u.left,0),t=N(u.right,0),n=N(u.top,0),r=N(u.bottom,0);p?w=m-2*(e!==0||t!==0?e+t:N(u.left,u.right)):C=h-2*(n!==0||r!==0?n+r:N(u.top,u.bottom))}await c({...t,availableWidth:w,availableHeight:C});let T=await o.getDimensions(s.floating);return m!==T.width||h!==T.height?{reset:{rects:!0}}:{}}}};function je(){return typeof window<`u`}function U(e){return Me(e)?(e.nodeName||``).toLowerCase():`#document`}function W(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function G(e){return((Me(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function Me(e){return je()?e instanceof Node||e instanceof W(e).Node:!1}function K(e){return je()?e instanceof Element||e instanceof W(e).Element:!1}function q(e){return je()?e instanceof HTMLElement||e instanceof W(e).HTMLElement:!1}function Ne(e){return!je()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof W(e).ShadowRoot}function Pe(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=X(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function Fe(e){return/^(table|td|th)$/.test(U(e))}function Ie(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var Le=/transform|translate|scale|rotate|perspective|filter/,Re=/paint|layout|strict|content/,J=e=>!!e&&e!==`none`,ze;function Be(e){let t=K(e)?X(e):e;return J(t.transform)||J(t.translate)||J(t.scale)||J(t.rotate)||J(t.perspective)||!He()&&(J(t.backdropFilter)||J(t.filter))||Le.test(t.willChange||``)||Re.test(t.contain||``)}function Ve(e){let t=Z(e);for(;q(t)&&!Y(t);){if(Be(t))return t;if(Ie(t))return null;t=Z(t)}return null}function He(){return ze??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),ze}function Y(e){return/^(html|body|#document)$/.test(U(e))}function X(e){return W(e).getComputedStyle(e)}function Ue(e){return K(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Z(e){if(U(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||Ne(e)&&e.host||G(e);return Ne(t)?t.host:t}function We(e){let t=Z(e);return Y(t)?e.ownerDocument?e.ownerDocument.body:e.body:q(t)&&Pe(t)?t:We(t)}function Ge(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=We(e),i=r===e.ownerDocument?.body,a=W(r);if(i){let e=Ke(a);return t.concat(a,a.visualViewport||[],Pe(r)?r:[],e&&n?Ge(e):[])}else return t.concat(r,Ge(r,[],n))}function Ke(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function qe(e){let t=X(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=q(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=P(n)!==a||P(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function Je(e){return K(e)?e:e.contextElement}function Q(e){let t=Je(e);if(!q(t))return I(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=qe(t),o=(a?P(n.width):n.width)/r,s=(a?P(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var Ye=I(0);function Xe(e){let t=W(e);return!He()||!t.visualViewport?Ye:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Ze(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==W(e)?!1:t}function $(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=Je(e),o=I(1);t&&(r?K(r)&&(o=Q(r)):o=Q(e));let s=Ze(a,n,r)?Xe(a):I(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=W(a),t=r&&K(r)?W(r):r,n=e,i=Ke(n);for(;i&&r&&t!==n;){let e=Q(i),t=i.getBoundingClientRect(),r=X(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=W(i),i=Ke(n)}}return he({width:u,height:d,x:c,y:l})}function Qe(e,t){let n=Ue(e).scrollLeft;return t?t.left+n:$(G(e)).left+n}function $e(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-Qe(e,n),y:n.top+t.scrollTop}}function et(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=G(r),s=t?Ie(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=I(1),u=I(0),d=q(r);if((d||!d&&!a)&&((U(r)!==`body`||Pe(o))&&(c=Ue(r)),d)){let e=$(r);l=Q(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?$e(o,c):I(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 tt(e){return Array.from(e.getClientRects())}function nt(e){let t=G(e),n=Ue(e),r=e.ownerDocument.body,i=N(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=N(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),o=-n.scrollLeft+Qe(e),s=-n.scrollTop;return X(r).direction===`rtl`&&(o+=N(t.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}var rt=25;function it(e,t){let n=W(e),r=G(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=He();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=Qe(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<=rt&&(a-=o)}else l<=rt&&(a+=l);return{width:a,height:o,x:s,y:c}}function at(e,t){let n=$(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=q(e)?Q(e):I(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function ot(e,t,n){let r;if(t===`viewport`)r=it(e,n);else if(t===`document`)r=nt(G(e));else if(K(t))r=at(t,n);else{let n=Xe(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return he(r)}function st(e,t){let n=Z(e);return n===t||!K(n)||Y(n)?!1:X(n).position===`fixed`||st(n,t)}function ct(e,t){let n=t.get(e);if(n)return n;let r=Ge(e,[],!1).filter(e=>K(e)&&U(e)!==`body`),i=null,a=X(e).position===`fixed`,o=a?Z(e):e;for(;K(o)&&!Y(o);){let t=X(o),n=Be(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||Pe(o)&&!n&&st(e,o))?r=r.filter(e=>e!==o):i=t,o=Z(o)}return t.set(e,r),r}function lt(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?Ie(t)?[]:ct(t,this._c):[].concat(n),r],o=ot(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&&!vt(l,e.getBoundingClientRect())&&o(),y=!1}try{n=new IntersectionObserver(b,{...v,root:i.ownerDocument})}catch{n=new IntersectionObserver(b,v)}n.observe(e)}return o(!0),a}function bt(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=Je(e),u=i||a?[...l?Ge(l):[],...t?Ge(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?yt(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?$(e):null;c&&g();function g(){let t=$(e);h&&!vt(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 xt=De,St=Oe,Ct=xe,wt=Ae,Tt=we,Et=be,Dt=ke,Ot=(e,t,n)=>{let r=new Map,i={platform:_t,...n},a={...i.platform,_c:r};return ye(e,t,{...i,platform:a})},kt=typeof document<`u`?f.useLayoutEffect:function(){};function At(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(!At(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)&&!At(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function jt(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Mt(e,t){let n=jt(e);return Math.round(t*n)/n}function Nt(e){let t=f.useRef(e);return kt(()=>{t.current=e}),t}function Pt(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,[u,d]=f.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[p,m]=f.useState(r);At(p,r)||m(r);let[h,g]=f.useState(null),[_,v]=f.useState(null),y=f.useCallback(e=>{e!==C.current&&(C.current=e,g(e))},[]),b=f.useCallback(e=>{e!==w.current&&(w.current=e,v(e))},[]),x=a||h,S=o||_,C=f.useRef(null),w=f.useRef(null),T=f.useRef(u),E=c!=null,D=Nt(c),k=Nt(i),A=Nt(l),j=f.useCallback(()=>{if(!C.current||!w.current)return;let e={placement:t,strategy:n,middleware:p};k.current&&(e.platform=k.current),Ot(C.current,w.current,e).then(e=>{let t={...e,isPositioned:A.current!==!1};M.current&&!At(T.current,t)&&(T.current=t,O.flushSync(()=>{d(t)}))})},[p,t,n,k,A]);kt(()=>{l===!1&&T.current.isPositioned&&(T.current.isPositioned=!1,d(e=>({...e,isPositioned:!1})))},[l]);let M=f.useRef(!1);kt(()=>(M.current=!0,()=>{M.current=!1}),[]),kt(()=>{if(x&&(C.current=x),S&&(w.current=S),x&&S){if(D.current)return D.current(x,S,j);j()}},[x,S,j,D,E]);let N=f.useMemo(()=>({reference:C,floating:w,setReference:y,setFloating:b}),[y,b]),P=f.useMemo(()=>({reference:x,floating:S}),[x,S]),F=f.useMemo(()=>{let e={position:n,left:0,top:0};if(!P.floating)return e;let t=Mt(P.floating,u.x),r=Mt(P.floating,u.y);return s?{...e,transform:`translate(`+t+`px, `+r+`px)`,...jt(P.floating)>=1.5&&{willChange:`transform`}}:{position:n,left:t,top:r}},[n,s,P.floating,u.x,u.y]);return f.useMemo(()=>({...u,update:j,refs:N,elements:P,floatingStyles:F}),[u,j,N,P,F])}var Ft=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?{}:Et({element:r.current,padding:i}).fn(n):r?Et({element:r,padding:i}).fn(n):{}}}},It=(e,t)=>{let n=xt(e);return{name:n.name,fn:n.fn,options:[e,t]}},Lt=(e,t)=>{let n=St(e);return{name:n.name,fn:n.fn,options:[e,t]}},Rt=(e,t)=>({fn:Dt(e).fn,options:[e,t]}),zt=(e,t)=>{let n=Ct(e);return{name:n.name,fn:n.fn,options:[e,t]}},Bt=(e,t)=>{let n=wt(e);return{name:n.name,fn:n.fn,options:[e,t]}},Vt=(e,t)=>{let n=Tt(e);return{name:n.name,fn:n.fn,options:[e,t]}},Ht=(e,t)=>{let n=Ft(e);return{name:n.name,fn:n.fn,options:[e,t]}},Ut=`Arrow`,Wt=f.forwardRef((e,t)=>{let{children:n,width:r=10,height:i=5,...o}=e;return(0,m.jsx)(a.svg,{...o,ref:t,width:r,height:i,viewBox:`0 0 30 10`,preserveAspectRatio:`none`,children:e.asChild?n:(0,m.jsx)(`polygon`,{points:`0,0 30,0 15,10`})})});Wt.displayName=Ut;var Gt=Wt,Kt=`Popper`,[qt,Jt]=c(Kt),[Yt,Xt]=qt(Kt),Zt=e=>{let{__scopePopper:t,children:n}=e,[r,i]=f.useState(null);return(0,m.jsx)(Yt,{scope:t,anchor:r,onAnchorChange:i,children:n})};Zt.displayName=Kt;var Qt=`PopperAnchor`,$t=f.forwardRef((e,t)=>{let{__scopePopper:n,virtualRef:r,...i}=e,s=Xt(Qt,n),c=f.useRef(null),l=o(t,c),u=f.useRef(null);return f.useEffect(()=>{let e=u.current;u.current=r?.current||c.current,e!==u.current&&s.onAnchorChange(u.current)}),r?null:(0,m.jsx)(a.div,{...i,ref:l})});$t.displayName=Qt;var en=`PopperContent`,[tn,nn]=qt(en),rn=f.forwardRef((e,t)=>{let{__scopePopper:n,side:r=`bottom`,sideOffset:i=0,align:s=`center`,alignOffset:c=0,arrowPadding:p=0,avoidCollisions:h=!0,collisionBoundary:g=[],collisionPadding:_=0,sticky:v=`partial`,hideWhenDetached:y=!1,updatePositionStrategy:b=`optimized`,onPlaced:x,...S}=e,C=Xt(en,n),[w,T]=f.useState(null),E=o(t,e=>T(e)),[D,O]=f.useState(null),k=u(D),A=k?.width??0,j=k?.height??0,M=r+(s===`center`?``:`-`+s),N=typeof _==`number`?_:{top:0,right:0,bottom:0,left:0,..._},P=Array.isArray(g)?g:[g],F=P.length>0,I={padding:N,boundary:P.filter(cn),altBoundary:F},{refs:ee,floatingStyles:L,placement:R,isPositioned:z,middlewareData:B}=Pt({strategy:`fixed`,placement:M,whileElementsMounted:(...e)=>bt(...e,{animationFrame:b===`always`}),elements:{reference:C.anchor},middleware:[It({mainAxis:i+j,alignmentAxis:c}),h&&Lt({mainAxis:!0,crossAxis:!1,limiter:v===`partial`?Rt():void 0,...I}),h&&zt({...I}),Bt({...I,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`)}}),D&&Ht({element:D,padding:p}),ln({arrowWidth:A,arrowHeight:j}),y&&Vt({strategy:`referenceHidden`,...I})]}),[V,te]=un(R),H=d(x);l(()=>{z&&H?.()},[z,H]);let ne=B.arrow?.x,re=B.arrow?.y,ie=B.arrow?.centerOffset!==0,[ae,oe]=f.useState();return l(()=>{w&&oe(window.getComputedStyle(w).zIndex)},[w]),(0,m.jsx)(`div`,{ref:ee.setFloating,"data-radix-popper-content-wrapper":``,style:{...L,transform:z?L.transform:`translate(0, -200%)`,minWidth:`max-content`,zIndex:ae,"--radix-popper-transform-origin":[B.transformOrigin?.x,B.transformOrigin?.y].join(` `),...B.hide?.referenceHidden&&{visibility:`hidden`,pointerEvents:`none`}},dir:e.dir,children:(0,m.jsx)(tn,{scope:n,placedSide:V,onArrowChange:O,arrowX:ne,arrowY:re,shouldHideArrow:ie,children:(0,m.jsx)(a.div,{"data-side":V,"data-align":te,...S,ref:E,style:{...S.style,animation:z?void 0:`none`}})})})});rn.displayName=en;var an=`PopperArrow`,on={top:`bottom`,right:`left`,bottom:`top`,left:`right`},sn=f.forwardRef(function(e,t){let{__scopePopper:n,...r}=e,i=nn(an,n),a=on[i.placedSide];return(0,m.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,m.jsx)(Gt,{...r,ref:t,style:{...r.style,display:`block`}})})});sn.displayName=an;function cn(e){return e!==null}var ln=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]=un(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 un(e){let[t,n=`center`]=e.split(`-`);return[t,n]}var dn=Zt,fn=$t,pn=rn,mn=sn;export{Jt as a,dn as i,mn as n,A as o,pn as r,x as s,fn as t}; \ No newline at end of file diff --git a/src/www/assets/dist-CGm-FpWw.js b/src/www/assets/dist-CGm-FpWw.js new file mode 100644 index 0000000..7983294 --- /dev/null +++ b/src/www/assets/dist-CGm-FpWw.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";var n=e(t(),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-Cp1lAGZy.js b/src/www/assets/dist-Cp1lAGZy.js new file mode 100644 index 0000000..c82a624 --- /dev/null +++ b/src/www/assets/dist-Cp1lAGZy.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";import{d as n}from"./button-DJA4fnJ8.js";import{r}from"./dist-DG5UMlBd.js";var i=e(t(),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-D21KDGR3.js b/src/www/assets/dist-D21KDGR3.js new file mode 100644 index 0000000..2f6f044 --- /dev/null +++ b/src/www/assets/dist-D21KDGR3.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./dist-15n4mVGL.js";import{c as i,d as a}from"./button-DJA4fnJ8.js";import{i as o,n as s,o as c}from"./dist-DG5UMlBd.js";import{i as l,r as u,t as d}from"./dist-BEDXr2LC.js";var f=t(n(),1),p=e();function m(e){let t=e+`CollectionProvider`,[n,r]=c(t),[o,s]=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)(o,{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,s(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),c=a(t,o),l=s(h,n);return f.useEffect(()=>(l.itemMap.set(o,{ref:o,...i}),()=>void l.itemMap.delete(o))),(0,p.jsx)(_,{[g]:``,ref:c,children:r})});v.displayName=h;function y(t){let n=s(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]=c(_,[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:c=!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=u(l),[O,k]=s({prop:m,defaultProp:v??null,onChange:b,caller:_}),[A,j]=f.useState(!1),N=d(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:c,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:o(e.onMouseDown,()=>{F.current=!0}),onFocus:o(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:o(e.onBlur,()=>j(!1))})})}),D=`RovingFocusGroupItem`,O=f.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:i=!0,active:a=!1,tabStopId:s,children:c,...u}=e,d=l(),m=s||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:o(e.onMouseDown,e=>{i?h.onItemFocus(m):e.preventDefault()}),onFocus:o(e.onFocus,()=>h.onItemFocus(m)),onKeyDown:o(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-DG5UMlBd.js b/src/www/assets/dist-DG5UMlBd.js new file mode 100644 index 0000000..b2b02b5 --- /dev/null +++ b/src/www/assets/dist-DG5UMlBd.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";var r=t(n(),1),i=e();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`}function m(e){let[t,n]=r.useState(void 0);return l(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});let t=new ResizeObserver(t=>{if(!Array.isArray(t)||!t.length)return;let r=t[0],i,a;if(`borderBoxSize`in r){let e=r.borderBoxSize,t=Array.isArray(e)?e[0]:e;i=t.inlineSize,a=t.blockSize}else i=e.offsetWidth,a=e.offsetHeight;n({width:i,height:a})});return t.observe(e,{box:`border-box`}),()=>t.unobserve(e)}else n(void 0)},[e]),t}export{a,c as i,d as n,o,l as r,m as t}; \ No newline at end of file diff --git a/src/www/assets/dist-DlZiaY1y.js b/src/www/assets/dist-DlZiaY1y.js new file mode 100644 index 0000000..fc2e771 --- /dev/null +++ b/src/www/assets/dist-DlZiaY1y.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./dist-15n4mVGL.js";import{d as i}from"./button-DJA4fnJ8.js";import{i as a,n as o,o as s,t as c}from"./dist-DG5UMlBd.js";import{n as l,r as u,t as d}from"./dist-D21KDGR3.js";import{t as f}from"./dist-Cp1lAGZy.js";import{r as p}from"./dist-BEDXr2LC.js";import{t as m}from"./dist-CGm-FpWw.js";var h=t(n(),1),g=e(),_=`Radio`,[v,y]=s(_),[b,x]=v(_),S=h.forwardRef((e,t)=>{let{__scopeRadio:n,name:o,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:a(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:o,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)(f,{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 l=h.useRef(null),u=i(l,s),d=m(n),f=c(t);return h.useEffect(()=>{let e=l.current;if(!e)return;let t=window.HTMLInputElement.prototype,r=Object.getOwnPropertyDescriptor(t,`checked`).set;if(d!==n&&r){let t=new Event(`click`,{bubbles:a});r.call(e,n),e.dispatchEvent(t)}},[d,n,a]),(0,g.jsx)(r.input,{type:`radio`,"aria-hidden":!0,defaultChecked:n,...o,tabIndex:-1,ref:u,style:{...o.style,...f,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]=s(k,[u,y]),M=u(),N=y(),[P,F]=A(k),I=h.forwardRef((e,t)=>{let{__scopeRadioGroup:n,name:i,defaultValue:a,value:s,required:c=!1,disabled:u=!1,orientation:d,dir:f,loop:m=!0,onValueChange:h,..._}=e,v=M(n),y=p(f),[b,x]=o({prop:s,defaultProp:a??null,onChange:h,caller:k});return(0,g.jsx)(P,{scope:n,name:i,required:c,disabled:u,value:b,onValueChange:x,children:(0,g.jsx)(l,{asChild:!0,...v,orientation:d,dir:y,loop:m,children:(0,g.jsx)(r.div,{role:`radiogroup`,"aria-required":c,"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,...o}=e,s=F(L,n),c=s.disabled||r,l=M(n),u=N(n),f=h.useRef(null),p=i(t,f),m=s.value===o.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)(d,{asChild:!0,...l,focusable:!c,active:m,children:(0,g.jsx)(S,{disabled:c,required:s.required,checked:m,...u,...o,name:s.name,ref:p,onCheck:()=>s.onValueChange(o.value),onKeyDown:a(e=>{e.key===`Enter`&&e.preventDefault()}),onFocus:a(o.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-DvAgZMq72.js b/src/www/assets/dist-DvAgZMq72.js new file mode 100644 index 0000000..f9b94f4 --- /dev/null +++ b/src/www/assets/dist-DvAgZMq72.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";import{r as n}from"./dist-15n4mVGL.js";var r=e(t(),1),i=e(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/download-CN4vU01G.js b/src/www/assets/download-CN4vU01G.js new file mode 100644 index 0000000..2acba43 --- /dev/null +++ b/src/www/assets/download-CN4vU01G.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-CUea1X0A.js b/src/www/assets/dropdown-menu-CUea1X0A.js new file mode 100644 index 0000000..46a8084 --- /dev/null +++ b/src/www/assets/dropdown-menu-CUea1X0A.js @@ -0,0 +1,41 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{n as r,t as i}from"./dist-15n4mVGL.js";import{c as a,d as o,i as s,u as c}from"./button-DJA4fnJ8.js";import{i as l,n as u,o as d}from"./dist-DG5UMlBd.js";import{i as f,n as p,r as m,t as h}from"./dist-D21KDGR3.js";import{t as g}from"./dist-Cp1lAGZy.js";import{i as _,r as v,t as y}from"./dist-BEDXr2LC.js";import{a as b,i as x,n as S,o as C,r as ee,s as te,t as ne}from"./dist-BKfJQFVD.js";import{t as w}from"./createLucideIcon-D28ivbfF.js";import{t as T}from"./check-gDgbfVXu.js";var E=t(n(),1),D=e(),O=`focusScope.autoFocusOnMount`,k=`focusScope.autoFocusOnUnmount`,A={bubbles:!1,cancelable:!0},re=`FocusScope`,ie=E.forwardRef((e,t)=>{let{loop:n=!1,trapped:r=!1,onMountAutoFocus:a,onUnmountAutoFocus:s,...c}=e,[l,u]=E.useState(null),d=y(a),f=y(s),p=E.useRef(null),m=o(t,e=>u(e)),h=E.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;E.useEffect(()=>{if(r){let e=function(e){if(h.paused||!l)return;let t=e.target;l.contains(t)?p.current=t:M(p.current,{select:!0})},t=function(e){if(h.paused||!l)return;let t=e.relatedTarget;t!==null&&(l.contains(t)||M(p.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&M(l)};document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return l&&r.observe(l,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[r,l,h.paused]),E.useEffect(()=>{if(l){ue.add(h);let e=document.activeElement;if(!l.contains(e)){let t=new CustomEvent(O,A);l.addEventListener(O,d),l.dispatchEvent(t),t.defaultPrevented||(ae(pe(j(l)),{select:!0}),document.activeElement===e&&M(l))}return()=>{l.removeEventListener(O,d),setTimeout(()=>{let t=new CustomEvent(k,A);l.addEventListener(k,f),l.dispatchEvent(t),t.defaultPrevented||M(e??document.body,{select:!0}),l.removeEventListener(k,f),ue.remove(h)},0)}}},[l,d,f,h]);let g=E.useCallback(e=>{if(!n&&!r||h.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,i=document.activeElement;if(t&&i){let t=e.currentTarget,[r,a]=oe(t);r&&a?!e.shiftKey&&i===a?(e.preventDefault(),n&&M(r,{select:!0})):e.shiftKey&&i===r&&(e.preventDefault(),n&&M(a,{select:!0})):i===t&&e.preventDefault()}},[n,r,h.paused]);return(0,D.jsx)(i.div,{tabIndex:-1,...c,ref:m,onKeyDown:g})});ie.displayName=re;function ae(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(M(r,{select:t}),document.activeElement!==n)return}function oe(e){let t=j(e);return[se(t,e),se(t.reverse(),e)]}function j(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 se(e,t){for(let n of e)if(!ce(n,{upTo:t}))return n}function ce(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 le(e){return e instanceof HTMLInputElement&&`select`in e}function M(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&le(e)&&t&&e.select()}}var ue=de();function de(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=fe(e,t),e.unshift(t)},remove(t){e=fe(e,t),e[0]?.resume()}}}function fe(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function pe(e){return e.filter(e=>e.tagName!==`A`)}var me=0;function he(){E.useEffect(()=>{let e=document.querySelectorAll(`[data-radix-focus-guard]`);return document.body.insertAdjacentElement(`afterbegin`,e[0]??ge()),document.body.insertAdjacentElement(`beforeend`,e[1]??ge()),me++,()=>{me===1&&document.querySelectorAll(`[data-radix-focus-guard]`).forEach(e=>e.remove()),me--}},[])}function ge(){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 N=function(){return N=Object.assign||function(e){for(var t,n=1,r=arguments.length;n`u`)return Ve;var t=Ue(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])}},Ge=Be(),L=`data-scroll-locked`,Ke=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),` + .${ye} { + overflow: hidden ${r}; + padding-right: ${s}px ${r}; + } + body[${L}] { + 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(``)} + } + + .${P} { + right: ${s}px ${r}; + } + + .${F} { + margin-right: ${s}px ${r}; + } + + .${P} .${P} { + right: 0 ${r}; + } + + .${F} .${F} { + margin-right: 0 ${r}; + } + + body[${L}] { + ${be}: ${s}px; + } +`},qe=function(){var e=parseInt(document.body.getAttribute(`data-scroll-locked`)||`0`,10);return isFinite(e)?e:0},Je=function(){E.useEffect(function(){return document.body.setAttribute(L,(qe()+1).toString()),function(){var e=qe()-1;e<=0?document.body.removeAttribute(L):document.body.setAttribute(L,e.toString())}},[])},Ye=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?`margin`:r;Je();var a=E.useMemo(function(){return We(i)},[i]);return E.createElement(Ge,{styles:Ke(a,!t,i,n?``:`!important`)})},Xe=!1;if(typeof window<`u`)try{var R=Object.defineProperty({},`passive`,{get:function(){return Xe=!0,!0}});window.addEventListener(`test`,R,R),window.removeEventListener(`test`,R,R)}catch{Xe=!1}var z=Xe?{passive:!1}:!1,Ze=function(e){return e.tagName===`TEXTAREA`},Qe=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==`hidden`&&!(n.overflowY===n.overflowX&&!Ze(e)&&n[t]===`visible`)},$e=function(e){return Qe(e,`overflowY`)},et=function(e){return Qe(e,`overflowX`)},tt=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<`u`&&r instanceof ShadowRoot&&(r=r.host),it(e,r)){var i=at(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},nt=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},rt=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},it=function(e,t){return e===`v`?$e(t):et(t)},at=function(e,t){return e===`v`?nt(t):rt(t)},ot=function(e,t){return e===`h`&&t===`rtl`?-1:1},st=function(e,t,n,r,i){var a=ot(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=at(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&it(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},B=function(e){return`changedTouches`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},ct=function(e){return[e.deltaX,e.deltaY]},lt=function(e){return e&&`current`in e?e.current:e},ut=function(e,t){return e[0]===t[0]&&e[1]===t[1]},dt=function(e){return` + .block-interactivity-${e} {pointer-events: none;} + .allow-interactivity-${e} {pointer-events: all;} +`},ft=0,V=[];function pt(e){var t=E.useRef([]),n=E.useRef([0,0]),r=E.useRef(),i=E.useState(ft++)[0],a=E.useState(Be)[0],o=E.useRef(e);E.useEffect(function(){o.current=e},[e]),E.useEffect(function(){if(e.inert){document.body.classList.add(`block-interactivity-${i}`);var t=ve([e.lockRef.current],(e.shards||[]).map(lt),!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 s=E.useCallback(function(e,t){if(`touches`in e&&e.touches.length===2||e.type===`wheel`&&e.ctrlKey)return!o.current.allowPinchZoom;var i=B(e),a=n.current,s=`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(s)>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=tt(d,u);if(!m)return!0;if(m?l=d:(l=d===`v`?`h`:`v`,m=tt(d,u)),!m)return!1;if(!r.current&&`changedTouches`in e&&(s||c)&&(r.current=l),!l)return!0;var h=r.current||l;return st(h,t,e,h===`h`?s:c,!0)},[]),c=E.useCallback(function(e){var n=e;if(!(!V.length||V[V.length-1]!==a)){var r=`deltaY`in n?ct(n):B(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&ut(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var c=(o.current.shards||[]).map(lt).filter(Boolean).filter(function(e){return e.contains(n.target)});(c.length>0?s(n,c[0]):!o.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),l=E.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:mt(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),u=E.useCallback(function(e){n.current=B(e),r.current=void 0},[]),d=E.useCallback(function(t){l(t.type,ct(t),t.target,s(t,e.lockRef.current))},[]),f=E.useCallback(function(t){l(t.type,B(t),t.target,s(t,e.lockRef.current))},[]);E.useEffect(function(){return V.push(a),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:f}),document.addEventListener(`wheel`,c,z),document.addEventListener(`touchmove`,c,z),document.addEventListener(`touchstart`,u,z),function(){V=V.filter(function(e){return e!==a}),document.removeEventListener(`wheel`,c,z),document.removeEventListener(`touchmove`,c,z),document.removeEventListener(`touchstart`,u,z)}},[]);var p=e.removeScrollBar,m=e.inert;return E.createElement(E.Fragment,null,m?E.createElement(a,{styles:dt(i)}):null,p?E.createElement(Ye,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function mt(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var ht=Ae(je,pt),gt=E.forwardRef(function(e,t){return E.createElement(I,N({},e,{ref:t,sideCar:ht}))});gt.classNames=I.classNames;var _t=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},H=new WeakMap,U=new WeakMap,vt={},yt=0,bt=function(e){return e&&(e.host||bt(e.parentNode))},xt=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=bt(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})},St=function(e,t,n,r){var i=xt(t,Array.isArray(e)?e:[e]);vt[n]||(vt[n]=new WeakMap);var a=vt[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=(H.get(e)||0)+1,l=(a.get(e)||0)+1;H.set(e,c),a.set(e,l),o.push(e),c===1&&i&&U.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(),yt++,function(){o.forEach(function(e){var t=H.get(e)-1,i=a.get(e)-1;H.set(e,t),a.set(e,i),t||(U.has(e)||e.removeAttribute(r),U.delete(e)),i||e.removeAttribute(n)}),yt--,yt||(H=new WeakMap,H=new WeakMap,U=new WeakMap,vt={})}},Ct=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||_t(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),St(r,i,n,`aria-hidden`)):function(){return null}},wt=[`Enter`,` `],Tt=[`ArrowDown`,`PageUp`,`Home`],Et=[`ArrowUp`,`PageDown`,`End`],Dt=[...Tt,...Et],Ot={ltr:[...wt,`ArrowRight`],rtl:[...wt,`ArrowLeft`]},kt={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},W=`Menu`,[G,At,jt]=f(W),[K,Mt]=d(W,[jt,b,m]),q=b(),Nt=m(),[Pt,J]=K(W),[Ft,Y]=K(W),It=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=q(t),[c,l]=E.useState(null),u=E.useRef(!1),d=y(a),f=v(i);return E.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,D.jsx)(x,{...s,children:(0,D.jsx)(Pt,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,D.jsx)(Ft,{scope:t,onClose:E.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})};It.displayName=W;var Lt=`MenuAnchor`,Rt=E.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=q(n);return(0,D.jsx)(ne,{...i,...r,ref:t})});Rt.displayName=Lt;var zt=`MenuPortal`,[Bt,Vt]=K(zt,{forceMount:void 0}),Ht=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,a=J(zt,t);return(0,D.jsx)(Bt,{scope:t,forceMount:n,children:(0,D.jsx)(g,{present:n||a.open,children:(0,D.jsx)(C,{asChild:!0,container:i,children:r})})})};Ht.displayName=zt;var X=`MenuContent`,[Ut,Wt]=K(X),Gt=E.forwardRef((e,t)=>{let n=Vt(X,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=J(X,e.__scopeMenu),o=Y(X,e.__scopeMenu);return(0,D.jsx)(G.Provider,{scope:e.__scopeMenu,children:(0,D.jsx)(g,{present:r||a.open,children:(0,D.jsx)(G.Slot,{scope:e.__scopeMenu,children:o.modal?(0,D.jsx)(Kt,{...i,ref:t}):(0,D.jsx)(qt,{...i,ref:t})})})})}),Kt=E.forwardRef((e,t)=>{let n=J(X,e.__scopeMenu),r=E.useRef(null),i=o(t,r);return E.useEffect(()=>{let e=r.current;if(e)return Ct(e)},[]),(0,D.jsx)(Yt,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:l(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),qt=E.forwardRef((e,t)=>{let n=J(X,e.__scopeMenu);return(0,D.jsx)(Yt,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),Jt=a(`MenuContent.ScrollLock`),Yt=E.forwardRef((e,t)=>{let{__scopeMenu:n,loop:r=!1,trapFocus:i,onOpenAutoFocus:a,onCloseAutoFocus:s,disableOutsidePointerEvents:c,onEntryFocus:u,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:m,onInteractOutside:h,onDismiss:g,disableOutsideScroll:_,...v}=e,y=J(X,n),b=Y(X,n),x=q(n),S=Nt(n),C=At(n),[ne,w]=E.useState(null),T=E.useRef(null),O=o(t,T,y.onContentChange),k=E.useRef(0),A=E.useRef(``),re=E.useRef(0),ae=E.useRef(null),oe=E.useRef(`right`),j=E.useRef(0),se=_?gt:E.Fragment,ce=_?{as:Jt,allowPinchZoom:!0}:void 0,le=e=>{let t=A.current+e,n=C().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=Nn(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){A.current=t,window.clearTimeout(k.current),t!==``&&(k.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};E.useEffect(()=>()=>window.clearTimeout(k.current),[]),he();let M=E.useCallback(e=>oe.current===ae.current?.side&&Fn(e,ae.current?.area),[]);return(0,D.jsx)(Ut,{scope:n,searchRef:A,onItemEnter:E.useCallback(e=>{M(e)&&e.preventDefault()},[M]),onItemLeave:E.useCallback(e=>{M(e)||(T.current?.focus(),w(null))},[M]),onTriggerLeave:E.useCallback(e=>{M(e)&&e.preventDefault()},[M]),pointerGraceTimerRef:re,onPointerGraceIntentChange:E.useCallback(e=>{ae.current=e},[]),children:(0,D.jsx)(se,{...ce,children:(0,D.jsx)(ie,{asChild:!0,trapped:i,onMountAutoFocus:l(a,e=>{e.preventDefault(),T.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:s,children:(0,D.jsx)(te,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:m,onInteractOutside:h,onDismiss:g,children:(0,D.jsx)(p,{asChild:!0,...S,dir:b.dir,orientation:`vertical`,loop:r,currentTabStopId:ne,onCurrentTabStopIdChange:w,onEntryFocus:l(u,e=>{b.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,D.jsx)(ee,{role:`menu`,"aria-orientation":`vertical`,"data-state":On(y.open),"data-radix-menu-content":``,dir:b.dir,...x,...v,ref:O,style:{outline:`none`,...v.style},onKeyDown:l(v.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&&le(e.key));let i=T.current;if(e.target!==i||!Dt.includes(e.key))return;e.preventDefault();let a=C().filter(e=>!e.disabled).map(e=>e.ref.current);Et.includes(e.key)&&a.reverse(),jn(a)}),onBlur:l(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(k.current),A.current=``)}),onPointerMove:l(e.onPointerMove,Q(e=>{let t=e.target,n=j.current!==e.clientX;e.currentTarget.contains(t)&&n&&(oe.current=e.clientX>j.current?`right`:`left`,j.current=e.clientX)}))})})})})})})});Gt.displayName=X;var Xt=`MenuGroup`,Zt=E.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,D.jsx)(i.div,{role:`group`,...r,ref:t})});Zt.displayName=Xt;var Qt=`MenuLabel`,$t=E.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,D.jsx)(i.div,{...r,ref:t})});$t.displayName=Qt;var en=`MenuItem`,tn=`menu.itemSelect`,nn=E.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:i,...a}=e,s=E.useRef(null),c=Y(en,e.__scopeMenu),u=Wt(en,e.__scopeMenu),d=o(t,s),f=E.useRef(!1),p=()=>{let e=s.current;if(!n&&e){let t=new CustomEvent(tn,{bubbles:!0,cancelable:!0});e.addEventListener(tn,e=>i?.(e),{once:!0}),r(e,t),t.defaultPrevented?f.current=!1:c.onClose()}};return(0,D.jsx)(rn,{...a,ref:d,disabled:n,onClick:l(e.onClick,p),onPointerDown:t=>{e.onPointerDown?.(t),f.current=!0},onPointerUp:l(e.onPointerUp,e=>{f.current||e.currentTarget?.click()}),onKeyDown:l(e.onKeyDown,e=>{let t=u.searchRef.current!==``;n||t&&e.key===` `||wt.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});nn.displayName=en;var rn=E.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:r=!1,textValue:a,...s}=e,c=Wt(en,n),u=Nt(n),d=E.useRef(null),f=o(t,d),[p,m]=E.useState(!1),[g,_]=E.useState(``);return E.useEffect(()=>{let e=d.current;e&&_((e.textContent??``).trim())},[s.children]),(0,D.jsx)(G.ItemSlot,{scope:n,disabled:r,textValue:a??g,children:(0,D.jsx)(h,{asChild:!0,...u,focusable:!r,children:(0,D.jsx)(i.div,{role:`menuitem`,"data-highlighted":p?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...s,ref:f,onPointerMove:l(e.onPointerMove,Q(e=>{r?c.onItemLeave(e):(c.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:l(e.onPointerLeave,Q(e=>c.onItemLeave(e))),onFocus:l(e.onFocus,()=>m(!0)),onBlur:l(e.onBlur,()=>m(!1))})})})}),an=`MenuCheckboxItem`,on=E.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,D.jsx)(mn,{scope:e.__scopeMenu,checked:n,children:(0,D.jsx)(nn,{role:`menuitemcheckbox`,"aria-checked":kn(n)?`mixed`:n,...i,ref:t,"data-state":An(n),onSelect:l(i.onSelect,()=>r?.(kn(n)?!0:!n),{checkForDefaultPrevented:!1})})})});on.displayName=an;var sn=`MenuRadioGroup`,[cn,ln]=K(sn,{value:void 0,onValueChange:()=>{}}),un=E.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=y(r);return(0,D.jsx)(cn,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,D.jsx)(Zt,{...i,ref:t})})});un.displayName=sn;var dn=`MenuRadioItem`,fn=E.forwardRef((e,t)=>{let{value:n,...r}=e,i=ln(dn,e.__scopeMenu),a=n===i.value;return(0,D.jsx)(mn,{scope:e.__scopeMenu,checked:a,children:(0,D.jsx)(nn,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":An(a),onSelect:l(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});fn.displayName=dn;var pn=`MenuItemIndicator`,[mn,hn]=K(pn,{checked:!1}),gn=E.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...a}=e,o=hn(pn,n);return(0,D.jsx)(g,{present:r||kn(o.checked)||o.checked===!0,children:(0,D.jsx)(i.span,{...a,ref:t,"data-state":An(o.checked)})})});gn.displayName=pn;var _n=`MenuSeparator`,vn=E.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,D.jsx)(i.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});vn.displayName=_n;var yn=`MenuArrow`,bn=E.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=q(n);return(0,D.jsx)(S,{...i,...r,ref:t})});bn.displayName=yn;var xn=`MenuSub`,[Sn,Cn]=K(xn),wn=e=>{let{__scopeMenu:t,children:n,open:r=!1,onOpenChange:i}=e,a=J(xn,t),o=q(t),[s,c]=E.useState(null),[l,u]=E.useState(null),d=y(i);return E.useEffect(()=>(a.open===!1&&d(!1),()=>d(!1)),[a.open,d]),(0,D.jsx)(x,{...o,children:(0,D.jsx)(Pt,{scope:t,open:r,onOpenChange:d,content:l,onContentChange:u,children:(0,D.jsx)(Sn,{scope:t,contentId:_(),triggerId:_(),trigger:s,onTriggerChange:c,children:n})})})};wn.displayName=xn;var Z=`MenuSubTrigger`,Tn=E.forwardRef((e,t)=>{let n=J(Z,e.__scopeMenu),r=Y(Z,e.__scopeMenu),i=Cn(Z,e.__scopeMenu),a=Wt(Z,e.__scopeMenu),o=E.useRef(null),{pointerGraceTimerRef:s,onPointerGraceIntentChange:u}=a,d={__scopeMenu:e.__scopeMenu},f=E.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return E.useEffect(()=>f,[f]),E.useEffect(()=>{let e=s.current;return()=>{window.clearTimeout(e),u(null)}},[s,u]),(0,D.jsx)(Rt,{asChild:!0,...d,children:(0,D.jsx)(rn,{id:i.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":i.contentId,"data-state":On(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:l(e.onPointerMove,Q(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:l(e.onPointerLeave,Q(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:l(e.onKeyDown,t=>{let i=a.searchRef.current!==``;e.disabled||i&&t.key===` `||Ot[r.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});Tn.displayName=Z;var En=`MenuSubContent`,Dn=E.forwardRef((e,t)=>{let n=Vt(X,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=J(X,e.__scopeMenu),s=Y(X,e.__scopeMenu),c=Cn(En,e.__scopeMenu),u=E.useRef(null),d=o(t,u);return(0,D.jsx)(G.Provider,{scope:e.__scopeMenu,children:(0,D.jsx)(g,{present:r||a.open,children:(0,D.jsx)(G.Slot,{scope:e.__scopeMenu,children:(0,D.jsx)(Yt,{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&&u.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:l(e.onFocusOutside,e=>{e.target!==c.trigger&&a.onOpenChange(!1)}),onEscapeKeyDown:l(e.onEscapeKeyDown,e=>{s.onClose(),e.preventDefault()}),onKeyDown:l(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=kt[s.dir].includes(e.key);t&&n&&(a.onOpenChange(!1),c.trigger?.focus(),e.preventDefault())})})})})})});Dn.displayName=En;function On(e){return e?`open`:`closed`}function kn(e){return e===`indeterminate`}function An(e){return kn(e)?`indeterminate`:e?`checked`:`unchecked`}function jn(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function Mn(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function Nn(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=Mn(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 Pn(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 Fn(e,t){return t?Pn({x:e.clientX,y:e.clientY},t):!1}function Q(e){return t=>t.pointerType===`mouse`?e(t):void 0}var In=It,Ln=Rt,Rn=Ht,zn=Gt,Bn=Zt,Vn=$t,Hn=nn,Un=on,Wn=un,Gn=fn,Kn=gn,qn=vn,Jn=bn,Yn=Tn,Xn=Dn,Zn=`DropdownMenu`,[Qn,$n]=d(Zn,[Mt]),$=Mt(),[er,tr]=Qn(Zn),nr=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,c=$(t),l=E.useRef(null),[d,f]=u({prop:i,defaultProp:a??!1,onChange:o,caller:Zn});return(0,D.jsx)(er,{scope:t,triggerId:_(),triggerRef:l,contentId:_(),open:d,onOpenChange:f,onOpenToggle:E.useCallback(()=>f(e=>!e),[f]),modal:s,children:(0,D.jsx)(In,{...c,open:d,onOpenChange:f,dir:r,modal:s,children:n})})};nr.displayName=Zn;var rr=`DropdownMenuTrigger`,ir=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:r=!1,...a}=e,o=tr(rr,n),s=$(n);return(0,D.jsx)(Ln,{asChild:!0,...s,children:(0,D.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:l(e.onPointerDown,e=>{!r&&e.button===0&&e.ctrlKey===!1&&(o.onOpenToggle(),o.open||e.preventDefault())}),onKeyDown:l(e.onKeyDown,e=>{r||([`Enter`,` `].includes(e.key)&&o.onOpenToggle(),e.key===`ArrowDown`&&o.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});ir.displayName=rr;var ar=`DropdownMenuPortal`,or=e=>{let{__scopeDropdownMenu:t,...n}=e,r=$(t);return(0,D.jsx)(Rn,{...r,...n})};or.displayName=ar;var sr=`DropdownMenuContent`,cr=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=tr(sr,n),a=$(n),o=E.useRef(!1);return(0,D.jsx)(zn,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:l(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:l(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)`}})});cr.displayName=sr;var lr=`DropdownMenuGroup`,ur=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(Bn,{...i,...r,ref:t})});ur.displayName=lr;var dr=`DropdownMenuLabel`,fr=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(Vn,{...i,...r,ref:t})});fr.displayName=dr;var pr=`DropdownMenuItem`,mr=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(Hn,{...i,...r,ref:t})});mr.displayName=pr;var hr=`DropdownMenuCheckboxItem`,gr=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(Un,{...i,...r,ref:t})});gr.displayName=hr;var _r=`DropdownMenuRadioGroup`,vr=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(Wn,{...i,...r,ref:t})});vr.displayName=_r;var yr=`DropdownMenuRadioItem`,br=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(Gn,{...i,...r,ref:t})});br.displayName=yr;var xr=`DropdownMenuItemIndicator`,Sr=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(Kn,{...i,...r,ref:t})});Sr.displayName=xr;var Cr=`DropdownMenuSeparator`,wr=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(qn,{...i,...r,ref:t})});wr.displayName=Cr;var Tr=`DropdownMenuArrow`,Er=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(Jn,{...i,...r,ref:t})});Er.displayName=Tr;var Dr=`DropdownMenuSubTrigger`,Or=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(Yn,{...i,...r,ref:t})});Or.displayName=Dr;var kr=`DropdownMenuSubContent`,Ar=E.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,D.jsx)(Xn,{...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)`}})});Ar.displayName=kr;var jr=nr,Mr=ir,Nr=or,Pr=cr,Fr=ur,Ir=fr,Lr=mr,Rr=gr,zr=Sr,Br=wr,Vr=w(`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`}]]),Hr=w(`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`}]]);function Ur({className:e,...t}){return(0,D.jsx)(`img`,{alt:`GMPay`,className:s(`size-6`,e),height:24,src:`/images/logo.png`,width:24,...t})}function Wr({...e}){return(0,D.jsx)(jr,{"data-slot":`dropdown-menu`,...e})}function Gr({...e}){return(0,D.jsx)(Mr,{"data-slot":`dropdown-menu-trigger`,...e})}function Kr({className:e,sideOffset:t=4,...n}){return(0,D.jsx)(Nr,{children:(0,D.jsx)(Pr,{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 qr({...e}){return(0,D.jsx)(Fr,{"data-slot":`dropdown-menu-group`,...e})}function Jr({className:e,inset:t,variant:n=`default`,...r}){return(0,D.jsx)(Lr,{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 Yr({className:e,children:t,checked:n,...r}){return(0,D.jsxs)(Rr,{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,D.jsx)(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:(0,D.jsx)(zr,{children:(0,D.jsx)(T,{className:`size-4`})})}),t]})}function Xr({className:e,inset:t,...n}){return(0,D.jsx)(Ir,{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 Zr({className:e,...t}){return(0,D.jsx)(Br,{className:s(`-mx-1 my-1 h-px bg-border`,e),"data-slot":`dropdown-menu-separator`,...t})}function Qr({className:e,...t}){return(0,D.jsx)(`span`,{className:s(`ml-auto text-muted-foreground text-xs tracking-widest`,e),"data-slot":`dropdown-menu-shortcut`,...t})}export{ie as _,Jr as a,Qr as c,Hr as d,Vr as f,he as g,gt as h,qr as i,Gr as l,Ct as m,Yr as n,Xr as o,ir as p,Kr as r,Zr as s,Wr as t,Ur as u}; \ No newline at end of file diff --git a/src/www/assets/ellipsis-Y4gZr59G.js b/src/www/assets/ellipsis-Y4gZr59G.js new file mode 100644 index 0000000..979ddc8 --- /dev/null +++ b/src/www/assets/ellipsis-Y4gZr59G.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-Cam-sX8U.js b/src/www/assets/empty-state-Cam-sX8U.js new file mode 100644 index 0000000..ade91a6 --- /dev/null +++ b/src/www/assets/empty-state-Cam-sX8U.js @@ -0,0 +1 @@ +import{nu as e}from"./messages-BovT1T-w.js";import{i as t}from"./button-DJA4fnJ8.js";import{t as n}from"./createLucideIcon-D28ivbfF.js";var r=n(`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`}]]),i=n(`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`}]]),a=n(`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`}]]),o=e();function s({className:e,description:n=`暂无数据`,icon:i,title:a}){return(0,o.jsxs)(`div`,{className:t(`flex flex-col items-center justify-center gap-3 py-16 text-center`,e),children:[(0,o.jsx)(`div`,{className:`flex size-12 items-center justify-center rounded-full bg-muted text-muted-foreground`,children:i??(0,o.jsx)(r,{className:`size-6`})}),a&&(0,o.jsx)(`p`,{className:`font-medium text-sm`,children:a}),(0,o.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:n})]})}export{a as n,i as r,s as t}; \ No newline at end of file diff --git a/src/www/assets/epay-Db0RVMXe.js b/src/www/assets/epay-Db0RVMXe.js new file mode 100644 index 0000000..a847390 --- /dev/null +++ b/src/www/assets/epay-Db0RVMXe.js @@ -0,0 +1 @@ +import{Mc as e,Nc as t,Pc as n,et as r,jc as i,nt as a,nu as o,ou as s,ru as c,tt as l}from"./messages-BovT1T-w.js";import{t as u}from"./button-DJA4fnJ8.js";import{c as d,s as f}from"./zod-Cymc5bS-.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-DdHiBYMe.js";import{t as x}from"./input-DiRPHDd8.js";import{t as S}from"./page-header-BBJ9dE3-.js";import{a as C,i as w,n as T,t as E}from"./lib-CTYwzR3w.js";var D=s(c(),1),O=o(),k=f({defaultToken:d().min(1,t()),defaultCurrency:d().min(1,e()),defaultNetwork:d().min(1,i())});function A(){let n=w(`epay`),a=C(),o=g({resolver:m(k),defaultValues:{defaultToken:``,defaultCurrency:``,defaultNetwork:``}});(0,D.useEffect)(()=>{let e=n.data?.data;e&&o.reset({defaultToken:E(e,`epay.default_token`),defaultCurrency:E(e,`epay.default_currency`),defaultNetwork:E(e,`epay.default_network`)})},[n.data,o]);async function s(e){await T(a.mutateAsync,[{group:`epay`,key:`epay.default_token`,type:`string`,value:e.defaultToken},{group:`epay`,key:`epay.default_currency`,type:`string`,value:e.defaultCurrency},{group:`epay`,key:`epay.default_network`,type:`string`,value:e.defaultNetwork}],l()),await n.refetch()}return(0,O.jsx)(b,{...o,children:(0,O.jsxs)(`form`,{className:`space-y-6`,onSubmit:o.handleSubmit(s),children:[(0,O.jsx)(h,{control:o.control,name:`defaultToken`,render:({field:e})=>(0,O.jsxs)(p,{children:[(0,O.jsx)(v,{children:t()}),(0,O.jsx)(_,{children:(0,O.jsx)(x,{placeholder:`usdt`,...e})}),(0,O.jsx)(y,{})]})}),(0,O.jsx)(h,{control:o.control,name:`defaultCurrency`,render:({field:t})=>(0,O.jsxs)(p,{children:[(0,O.jsx)(v,{children:e()}),(0,O.jsx)(_,{children:(0,O.jsx)(x,{placeholder:`cny`,...t})}),(0,O.jsx)(y,{})]})}),(0,O.jsx)(h,{control:o.control,name:`defaultNetwork`,render:({field:e})=>(0,O.jsxs)(p,{children:[(0,O.jsx)(v,{children:i()}),(0,O.jsx)(_,{children:(0,O.jsx)(x,{placeholder:`tron`,...e})}),(0,O.jsx)(y,{})]})}),(0,O.jsx)(u,{disabled:a.isPending||n.isLoading,type:`submit`,children:r()})]})})}function j(){return(0,O.jsx)(S,{description:a(),title:n(),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/eye-CDavQcLN.js b/src/www/assets/eye-CDavQcLN.js new file mode 100644 index 0000000..d54b3f7 --- /dev/null +++ b/src/www/assets/eye-CDavQcLN.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-C-BF3gv3.js b/src/www/assets/eye-off-C-BF3gv3.js new file mode 100644 index 0000000..d349a67 --- /dev/null +++ b/src/www/assets/eye-off-C-BF3gv3.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-DvtNHF7l.js b/src/www/assets/font-provider-DvtNHF7l.js new file mode 100644 index 0000000..a24c144 --- /dev/null +++ b/src/www/assets/font-provider-DvtNHF7l.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{n as r,r as i,t as a}from"./cookies-BNZcTwGc.js";var o=t(n(),1),s=[`inter`,`manrope`,`noto`,`system`],c=e(),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-BEz-zjy_.js b/src/www/assets/forbidden-BEz-zjy_.js new file mode 100644 index 0000000..752f060 --- /dev/null +++ b/src/www/assets/forbidden-BEz-zjy_.js @@ -0,0 +1 @@ +import{cc as e,d as t,l as n,lc as r,nu as i,u as a}from"./messages-BovT1T-w.js";import{t as o}from"./useRouter-D03zSgJO.js";import{t as s}from"./useNavigate-Dg8CkCoa.js";import{t as c}from"./button-DJA4fnJ8.js";var l=i();function u(){let i=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:t()}),(0,l.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[a(),` `,(0,l.jsx)(`br`,{}),n()]}),(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:()=>i({to:`/dashboard`}),children:e()})]})]})})}export{u as t}; \ No newline at end of file diff --git a/src/www/assets/form-DdHiBYMe.js b/src/www/assets/form-DdHiBYMe.js new file mode 100644 index 0000000..541dbf0 --- /dev/null +++ b/src/www/assets/form-DdHiBYMe.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{i as r,s as i}from"./button-DJA4fnJ8.js";import{t as a}from"./label-CsevXZTG.js";import{d as o,l as s,u as c}from"./zod-Cymc5bS-.js";var l=t(n(),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=e(),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-DKtbS-qh.js b/src/www/assets/general-error-DKtbS-qh.js new file mode 100644 index 0000000..0b25c90 --- /dev/null +++ b/src/www/assets/general-error-DKtbS-qh.js @@ -0,0 +1 @@ +import{cc as e,dc as t,lc as n,nu as r,uc as i}from"./messages-BovT1T-w.js";import{t as a}from"./useRouter-D03zSgJO.js";import{t as o}from"./useNavigate-Dg8CkCoa.js";import{i as s,t as c}from"./button-DJA4fnJ8.js";var l=r();function u({className:r,minimal:u=!1}){let d=o(),{history:f}=a();return(0,l.jsx)(`div`,{className:s(`h-svh w-full`,r),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:t()}),(0,l.jsx)(`p`,{className:`text-center text-muted-foreground`,children:i()}),!u&&(0,l.jsxs)(`div`,{className:`mt-6 flex gap-4`,children:[(0,l.jsx)(c,{onClick:()=>f.go(-1),variant:`outline`,children:n()}),(0,l.jsx)(c,{onClick:()=>d({to:`/dashboard`}),children:e()})]})]})})}export{u as t}; \ No newline at end of file diff --git a/src/www/assets/header-DbmR8lIc.js b/src/www/assets/header-DbmR8lIc.js new file mode 100644 index 0000000..b62615f --- /dev/null +++ b/src/www/assets/header-DbmR8lIc.js @@ -0,0 +1 @@ +import{Ds as e,Jl as t,Os as n,Ps as r,Ql as i,Yl as a,n as o,nu as s,ou as c,ru as l}from"./messages-BovT1T-w.js";import{i as u}from"./auth-store-BpIS8RMn.js";import{t as d}from"./link-CA4H4hTz.js";import{B as f,H as p,L as m,M as h,V as g,d as _,f as v,g as y,l as b,n as x,o as S,p as C,u as w}from"./search-provider-Cx1K1ilz.js";import{i as T,t as E}from"./button-DJA4fnJ8.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-CUea1X0A.js";import{g as P}from"./command-BwVY_kli.js";import{t as F}from"./separator-CRLYw2cW.js";var I=c(l(),1),L=s();function R(){let[i,s]=b(),[c,l]=(0,I.useState)(!1),{user:h}=u(),x=h?.username?.trim()||o(),T=x.charAt(0).toUpperCase()||`U`,P=h?.last_login_at?n({time:S(h.last_login_at)}):e();return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(m,{onOpenChange:l,open:c,children:(0,L.jsx)(y,{})}),(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)(w,{className:`h-8 w-8`,children:[(0,L.jsx)(v,{alt:x,src:`/avatars/01.png`}),(0,L.jsx)(_,{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)(w,{className:`h-8 w-8 rounded-lg`,children:[(0,L.jsx)(v,{alt:x,src:`/avatars/01.png`}),(0,L.jsx)(_,{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:x}),(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)(p,{className:`mr-2 size-4`}),a()]})}),(0,L.jsxs)(D,{onClick:()=>l(!0),onSelect:e=>e.preventDefault(),children:[(0,L.jsx)(f,{className:`mr-2 size-4`}),r()]})]}),(0,L.jsx)(M,{}),(0,L.jsxs)(D,{onClick:()=>s(!0),variant:`destructive`,children:[(0,L.jsx)(g,{className:`mr-2 size-4`}),t()]})]})]}),(0,L.jsx)(C,{onOpenChange:s,open:!!i})]})}function z({className:e=``,placeholder:t}){let{setOpen:n}=x();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:()=>n(!0),variant:`outline`,children:[(0,L.jsx)(P,{"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??i()}),(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)(h,{className:`max-md:scale-125`,variant:`outline`}),(0,L.jsx)(F,{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-F2O9kOnX.js b/src/www/assets/help-F2O9kOnX.js new file mode 100644 index 0000000..f6ad109 --- /dev/null +++ b/src/www/assets/help-F2O9kOnX.js @@ -0,0 +1 @@ +import{Ll as e,Rl as t,nu as n,zl as r}from"./messages-BovT1T-w.js";import{t as i}from"./telescope-67IWjQye.js";var a=n();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:r()}),(0,a.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[t(),` `,(0,a.jsx)(`br`,{}),e()]})]})})}var s=o;export{s as component}; \ No newline at end of file diff --git a/src/www/assets/index-CvQvpjMM.js b/src/www/assets/index-CvQvpjMM.js new file mode 100644 index 0000000..a4966f6 --- /dev/null +++ b/src/www/assets/index-CvQvpjMM.js @@ -0,0 +1,9 @@ +import{iu as e,nu as t,ou as n,ru as r}from"./messages-BovT1T-w.js";import{f as i}from"./auth-store-BpIS8RMn.js";import{n as a,t as o}from"./router-Dohuf5K5.js";import{n as s}from"./useRouter-D03zSgJO.js";import{t as c}from"./Matches-LuvVcyUg.js";import{r as l}from"./dist-15n4mVGL.js";import{n as u}from"./_error-DGJYkCxd.js";import{n as d,o as f}from"./wallet--XSRr4dT.js";import{t as p}from"./font-provider-DvtNHF7l.js";import{t as m}from"./theme-provider-CRKya7Cx.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=n(r(),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=e((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=e(((e,t)=>{t.exports=y()})),x=e((e=>{var t=b(),n=r(),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=t.unstable_scheduleCallback,Fe=t.unstable_cancelCallback,Ie=t.unstable_shouldYield,Le=t.unstable_requestPaint,Re=t.unstable_now,ze=t.unstable_getCurrentPriorityLevel,Be=t.unstable_ImmediatePriority,Ve=t.unstable_UserBlockingPriority,He=t.unstable_NormalPriority,Ue=t.unstable_LowPriority,We=t.unstable_IdlePriority,Ge=t.log,Ke=t.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-f_BHH8AE.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)(d,{children:(0,g.jsx)(f,{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-TVbhXeum.css b/src/www/assets/index-TVbhXeum.css new file mode 100644 index 0000000..3dd98e8 --- /dev/null +++ b/src/www/assets/index-TVbhXeum.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-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--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-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-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-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-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-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)}.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-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-\[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-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-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-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-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\/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-border{background-color:var(--border)}.bg-card,.bg-card\/40{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/40{background-color:color-mix(in oklab, var(--card) 40%, transparent)}}.bg-destructive{background-color:var(--destructive)}.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-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-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.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-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-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-accent-foreground{color:var(--accent-foreground)}.text-amber-600{color:var(--color-amber-600)}.text-background{color:var(--background)}.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\/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\: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-input:is([data-mode=dark] *){border-color:var(--input)}.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-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-DiRPHDd8.js b/src/www/assets/input-DiRPHDd8.js new file mode 100644 index 0000000..e29799f --- /dev/null +++ b/src/www/assets/input-DiRPHDd8.js @@ -0,0 +1 @@ +import{nu as e}from"./messages-BovT1T-w.js";import{i as t}from"./button-DJA4fnJ8.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-BDL3tVBh.js b/src/www/assets/install-BDL3tVBh.js new file mode 100644 index 0000000..e8aa9ed --- /dev/null +++ b/src/www/assets/install-BDL3tVBh.js @@ -0,0 +1 @@ +import{Bs as e,Gs as t,Hs as n,Is as r,Js as i,Ks as a,Ls as o,Rs as s,Us as c,Vs as l,Ws as u,Xs as d,Ys as f,nu as p,ou as m,qs as ee,ru as h,zs as te}from"./messages-BovT1T-w.js";import{o as g}from"./auth-store-BpIS8RMn.js";import{t as _}from"./useNavigate-Dg8CkCoa.js";import{i as v,r as y,t as b}from"./button-DJA4fnJ8.js";import{u as ne}from"./dropdown-menu-CUea1X0A.js";import{a as x,i as S,o as C,r as w,s as T,t as E}from"./command-BwVY_kli.js";import{n as D,r as O,t as k}from"./popover-D5q6Hufu.js";import{t as A}from"./check-gDgbfVXu.js";import{t as j}from"./chevron-down-CdmvZsfI.js";import{t as re}from"./circle-check-Dh8WOZF0.js";import{n as ie,t as ae}from"./theme-switch-BjXQNOij.js";import{t as oe}from"./loader-circle-fg8-aSyl.js";import{c as M,n as N,s as se}from"./zod-Cymc5bS-.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-DdHiBYMe.js";import{t as H}from"./input-DiRPHDd8.js";import{a as U,i as W,n as G,r as ce,t as le}from"./card-DuQAN29P.js";var K=m(h(),1),q=p(),ue=`ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%&`,J=14,Y=20,de={slow:400,medium:200,fast:80},X=e=>e[Math.floor(Math.random()*e.length)],Z=()=>ue[Math.floor(Math.random()*41)];function fe({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,de[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%)`}})]})}function pe({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)(k,{onOpenChange:l,open:c,children:[(0,q.jsxs)(`div`,{className:v(`relative`,o),children:[(0,q.jsx)(H,{className:`pr-10`,disabled:s,onChange:e=>t(e.target.value),placeholder:r,value:e}),(0,q.jsx)(O,{asChild:!0,children:(0,q.jsx)(b,{"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)(j,{className:`size-4`})})})]}),(0,q.jsx)(D,{align:`end`,className:`w-48 p-0`,children:(0,q.jsxs)(E,{children:[(0,q.jsx)(x,{placeholder:i}),(0,q.jsxs)(T,{children:[(0,q.jsx)(w,{children:a}),(0,q.jsx)(S,{children:u.map(n=>(0,q.jsxs)(C,{onSelect:()=>{t(n.value),l(!1)},value:n.value,children:[(0,q.jsx)(A,{className:v(`size-4`,e===n.value?`opacity-100`:`opacity-0`)}),n.label??n.value]},n.value))})]})]})})]})}var me=y(`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 he({className:e,variant:t,...n}){return(0,q.jsx)(`div`,{className:v(me({variant:t}),e),"data-slot":`alert`,role:`alert`,...n})}function ge({className:e,...t}){return(0,q.jsx)(`div`,{className:v(`col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight`,e),"data-slot":`alert-title`,...t})}function _e({className:e,...t}){return(0,q.jsx)(`div`,{className:v(`col-start-2 grid justify-items-start gap-1 text-muted-foreground text-sm [&_p]:leading-relaxed`,e),"data-slot":`alert-description`,...t})}var Q=[`0.0.0.0`,`127.0.0.1`,`localhost`],ve=se({app_name:M().min(1,`App Name is required`),app_uri:M().min(1,`App URI is required`).url(`Must be a valid URL (e.g. http://your-server-ip:8000)`),http_bind_addr:M().min(1,`Bind address is required`),http_bind_port:N({error:`Port must be a number`}).int().min(1,`Port must be ≥ 1`).max(65535,`Port must be ≤ 65535`),runtime_root_path:M().min(1,`Runtime root path is required`),log_save_path:M().min(1,`Log save path is required`),order_expiration_time:N({error:`Must be a number`}).int().min(1,`Must be ≥ 1 minute`),order_notice_max_retry:N({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 ye(){let p=_(),[m,h]=(0,K.useState)(!1),[v,y]=(0,K.useState)(!1),[x,S]=(0,K.useState)(null),[C,w]=(0,K.useState)(null),T=L({resolver:F(ve),defaultValues:$,mode:`onChange`});(0,K.useEffect)(()=>{let e=!0;async function t(){try{let{data:t}=await g.GET(`/api/install/defaults`);if(!(e&&t))return;let n=Object.fromEntries(Object.entries(t).filter(([,e])=>e!==``&&e!=null));T.reset({...$,...n})}catch{}}return t().catch(()=>void 0),()=>{e=!1}},[T]),(0,K.useEffect)(()=>{if(x===null)return;if(x===0){p({to:`/sign-in`});return}let e=setTimeout(()=>S(e=>e===null?null:e-1),1e3);return()=>clearTimeout(e)},[x,p]);async function E(e){h(!0),w(null);try{let{data:t,error:n,response:i}=await g.POST(`/api/install`,{body:e});if(!i.ok||n){w({variant:`destructive`,message:n?.error||r()});return}y(!0),S(3),w({variant:`default`,message:t?.message||o()})}catch{w({variant:`destructive`,message:r()})}finally{h(!1)}}let D=e();return m&&(D=te()),v&&(D=s()),(0,q.jsxs)(`div`,{className:`relative flex min-h-svh items-center justify-center px-4 py-10`,children:[(0,q.jsx)(fe,{centerVignette:!1,glitchColors:[`#3f3f46`,`#71717a`,`#a1a1aa`],glitchSpeed:`fast`,outerVignette:!1,smooth:!0}),(0,q.jsxs)(le,{className:`max-w-xl border border-border/40 bg-card/40 shadow-xl backdrop-blur-xl`,children:[(0,q.jsxs)(W,{className:`space-y-6`,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)(ne,{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:`安全、高效的 USDT 支付中间件`})]})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(ie,{}),(0,q.jsx)(ae,{})]})]}),(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(U,{className:`text-2xl`,children:d()}),(0,q.jsx)(ce,{children:f()})]})]}),(0,q.jsx)(G,{children:(0,q.jsx)(V,{...T,children:(0,q.jsxs)(`form`,{className:`grid gap-4`,onSubmit:T.handleSubmit(E),children:[C?(0,q.jsxs)(he,{variant:C.variant,children:[C.variant===`default`?(0,q.jsx)(re,{}):null,(0,q.jsx)(ge,{children:C.variant===`default`?`Success`:`Error`}),(0,q.jsxs)(_e,{children:[C.message,x!==null&&x>0&&(0,q.jsxs)(`span`,{className:`ml-1 text-muted-foreground text-xs`,children:[`(`,x,`s 后跳转登录页)`]})]})]}):null,(0,q.jsx)(I,{control:T.control,name:`app_name`,render:({field:e})=>(0,q.jsxs)(P,{children:[(0,q.jsx)(z,{children:i()}),(0,q.jsx)(R,{children:(0,q.jsx)(H,{placeholder:`epusdt`,...e})}),(0,q.jsx)(B,{})]})}),(0,q.jsx)(I,{control:T.control,name:`app_uri`,render:({field:e})=>(0,q.jsxs)(P,{children:[(0,q.jsxs)(z,{children:[ee(),` *`]}),(0,q.jsx)(R,{children:(0,q.jsx)(H,{placeholder:`http://your-server-ip:8000`,...e})}),(0,q.jsx)(B,{})]})}),(0,q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,q.jsx)(I,{control:T.control,name:`http_bind_addr`,render:({field:e})=>(0,q.jsxs)(P,{children:[(0,q.jsx)(z,{children:a()}),(0,q.jsx)(R,{children:(0,q.jsx)(pe,{onChange:e.onChange,options:Q,placeholder:`0.0.0.0`,value:e.value??``})}),(0,q.jsx)(B,{})]})}),(0,q.jsx)(I,{control:T.control,name:`http_bind_port`,render:({field:e})=>(0,q.jsxs)(P,{children:[(0,q.jsx)(z,{children:t()}),(0,q.jsx)(R,{children:(0,q.jsx)(H,{placeholder:`8000`,type:`number`,...e,value:e.value??``})}),(0,q.jsx)(B,{})]})})]}),(0,q.jsx)(I,{control:T.control,name:`runtime_root_path`,render:({field:e})=>(0,q.jsxs)(P,{children:[(0,q.jsx)(z,{children:u()}),(0,q.jsx)(R,{children:(0,q.jsx)(H,{placeholder:`./runtime`,...e})}),(0,q.jsx)(B,{})]})}),(0,q.jsx)(I,{control:T.control,name:`log_save_path`,render:({field:e})=>(0,q.jsxs)(P,{children:[(0,q.jsx)(z,{children:c()}),(0,q.jsx)(R,{children:(0,q.jsx)(H,{placeholder:`./logs`,...e})}),(0,q.jsx)(B,{})]})}),(0,q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,q.jsx)(I,{control:T.control,name:`order_expiration_time`,render:({field:e})=>(0,q.jsxs)(P,{children:[(0,q.jsx)(z,{children:n()}),(0,q.jsx)(R,{children:(0,q.jsx)(H,{placeholder:`10`,type:`number`,...e})}),(0,q.jsx)(B,{})]})}),(0,q.jsx)(I,{control:T.control,name:`order_notice_max_retry`,render:({field:e})=>(0,q.jsxs)(P,{children:[(0,q.jsx)(z,{children:l()}),(0,q.jsx)(R,{children:(0,q.jsx)(H,{placeholder:`1`,type:`number`,...e})}),(0,q.jsx)(B,{})]})})]}),(0,q.jsxs)(b,{className:`mt-2 w-full`,disabled:m||v,type:`submit`,children:[m?(0,q.jsx)(oe,{className:`animate-spin`}):null,D]})]})})})]})]})}var be=ye;export{be 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/label-CsevXZTG.js b/src/www/assets/label-CsevXZTG.js new file mode 100644 index 0000000..82e9224 --- /dev/null +++ b/src/www/assets/label-CsevXZTG.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./dist-15n4mVGL.js";import{i}from"./button-DJA4fnJ8.js";var a=t(n(),1),o=e(),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-CTYwzR3w.js b/src/www/assets/lib-CTYwzR3w.js new file mode 100644 index 0000000..bc981f7 --- /dev/null +++ b/src/www/assets/lib-CTYwzR3w.js @@ -0,0 +1 @@ +import{f as e}from"./messages-BovT1T-w.js";import{a as t}from"./auth-store-BpIS8RMn.js";import{n}from"./dist-DvAgZMq72.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-CA4H4hTz.js b/src/www/assets/link-CA4H4hTz.js new file mode 100644 index 0000000..dac4eb4 --- /dev/null +++ b/src/www/assets/link-CA4H4hTz.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{a as r,i,t as a}from"./useRouter-D03zSgJO.js";import{l as o,s as ee,t as te,u as s}from"./useStore-1-QVtiLb.js";import{a as ne,c,n as re}from"./ClientOnly-CtYi2y5F.js";import{r as l}from"./dist-15n4mVGL.js";var ie=`Error preloading route! ☝️`,u=t(n(),1);e();var ae=t(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-fg8-aSyl.js b/src/www/assets/loader-circle-fg8-aSyl.js new file mode 100644 index 0000000..ca07aef --- /dev/null +++ b/src/www/assets/loader-circle-fg8-aSyl.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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/long-text-BXQXVuRh.js b/src/www/assets/long-text-BXQXVuRh.js new file mode 100644 index 0000000..1faa19e --- /dev/null +++ b/src/www/assets/long-text-BXQXVuRh.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{i as r}from"./button-DJA4fnJ8.js";import{a as i,i as a,o,s}from"./wallet--XSRr4dT.js";import{n as c,r as l,t as u}from"./popover-D5q6Hufu.js";var d=t(n(),1),f=e();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)(a,{children:[(0,f.jsx)(s,{asChild:!0,children:(0,f.jsx)(`div`,{className:r(`truncate`,t),ref:_,children:e})}),(0,f.jsx)(i,{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()=>(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`],_=`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=((e={},t={})=>(t.locale??D())===`en-US`?L(e):ee(e)),R=()=>`Cancel`,z=()=>`取消`,B=((e={},t={})=>(t.locale??D())===`en-US`?R(e):z(e)),V=()=>`Continue`,H=()=>`继续`,U=((e={},t={})=>(t.locale??D())===`en-US`?V(e):H(e)),W=()=>`Change Password`,G=()=>`修改密码`,K=((e={},t={})=>(t.locale??D())===`en-US`?W(e):G(e)),q=()=>`Sign out`,J=()=>`退出登录`,Y=((e={},t={})=>(t.locale??D())===`en-US`?q(e):J(e)),X=()=>`Are you sure you want to sign out? You will need to sign in again to access your account.`,Z=()=>`您确定要退出登录吗?您需要重新登录才能访问您的账户。`,Q=((e={},t={})=>(t.locale??D())===`en-US`?X(e):Z(e)),ne=()=>`Toggle theme`,re=()=>`切换主题`,ie=((e={},t={})=>(t.locale??D())===`en-US`?ne(e):re(e)),ae=()=>`Light`,oe=()=>`浅色`,se=((e={},t={})=>(t.locale??D())===`en-US`?ae(e):oe(e)),ce=()=>`Dark`,le=()=>`深色`,ue=((e={},t={})=>(t.locale??D())===`en-US`?ce(e):le(e)),de=()=>`System`,fe=()=>`系统`,pe=((e={},t={})=>(t.locale??D())===`en-US`?de(e):fe(e)),me=()=>`Skip to Main`,he=()=>`跳至主内容`,ge=((e={},t={})=>(t.locale??D())===`en-US`?me(e):he(e)),_e=()=>`Switch language`,ve=()=>`切换语言`,ye=((e={},t={})=>(t.locale??D())===`en-US`?_e(e):ve(e)),be=()=>`Learn more`,xe=()=>`了解更多`,Se=((e={},t={})=>(t.locale??D())===`en-US`?be(e):xe(e)),Ce=()=>`Coming Soon`,we=()=>`即将推出`,Te=((e={},t={})=>(t.locale??D())===`en-US`?Ce(e):we(e)),Ee=()=>`We are putting the finishing touches on this feature. Stay tuned for a better experience.`,De=()=>`我们正在打磨这一功能,敬请期待更好的体验`,Oe=((e={},t={})=>(t.locale??D())===`en-US`?Ee(e):De(e)),ke=()=>`Hang tight 👀`,Ae=()=>`再等等 👀`,je=((e={},t={})=>(t.locale??D())===`en-US`?ke(e):Ae(e)),Me=()=>`Type a command or search...`,Ne=()=>`输入命令或搜索...`,Pe=((e={},t={})=>(t.locale??D())===`en-US`?Me(e):Ne(e)),Fe=()=>`No results found.`,Ie=()=>`未找到结果。`,Le=((e={},t={})=>(t.locale??D())===`en-US`?Fe(e):Ie(e)),Re=()=>`Theme Settings`,ze=()=>`主题设置`,Be=((e={},t={})=>(t.locale??D())===`en-US`?Re(e):ze(e)),Ve=()=>`Adjust the appearance and layout to suit your preferences.`,He=()=>`调整外观和布局以适合您的偏好。`,Ue=((e={},t={})=>(t.locale??D())===`en-US`?Ve(e):He(e)),We=()=>`Reset`,Ge=()=>`重置`,Ke=((e={},t={})=>(t.locale??D())===`en-US`?We(e):Ge(e)),qe=()=>`Theme`,Je=()=>`主题`,Ye=((e={},t={})=>(t.locale??D())===`en-US`?qe(e):Je(e)),Xe=()=>`Sidebar`,Ze=()=>`侧边栏`,Qe=((e={},t={})=>(t.locale??D())===`en-US`?Xe(e):Ze(e)),$e=()=>`Layout`,et=()=>`布局`,tt=((e={},t={})=>(t.locale??D())===`en-US`?$e(e):et(e)),nt=()=>`Direction`,rt=()=>`方向`,it=((e={},t={})=>(t.locale??D())===`en-US`?nt(e):rt(e)),at=()=>`Inset`,ot=()=>`嵌入`,st=((e={},t={})=>(t.locale??D())===`en-US`?at(e):ot(e)),ct=()=>`Floating`,lt=()=>`浮动`,ut=((e={},t={})=>(t.locale??D())===`en-US`?ct(e):lt(e)),dt=()=>`Sidebar`,ft=()=>`侧边栏`,pt=((e={},t={})=>(t.locale??D())===`en-US`?dt(e):ft(e)),mt=()=>`Default`,ht=()=>`默认`,gt=((e={},t={})=>(t.locale??D())===`en-US`?mt(e):ht(e)),_t=()=>`Compact`,vt=()=>`紧凑`,yt=((e={},t={})=>(t.locale??D())===`en-US`?_t(e):vt(e)),bt=()=>`Full layout`,xt=()=>`完整布局`,St=((e={},t={})=>(t.locale??D())===`en-US`?bt(e):xt(e)),Ct=()=>`Left to Right`,wt=()=>`从左到右`,Tt=((e={},t={})=>(t.locale??D())===`en-US`?Ct(e):wt(e)),Et=()=>`Right to Left`,Dt=()=>`从右到左`,Ot=((e={},t={})=>(t.locale??D())===`en-US`?Et(e):Dt(e)),kt=()=>`Asc`,At=()=>`升序`,jt=((e={},t={})=>(t.locale??D())===`en-US`?kt(e):At(e)),Mt=()=>`Desc`,Nt=()=>`降序`,Pt=((e={},t={})=>(t.locale??D())===`en-US`?Mt(e):Nt(e)),Ft=()=>`Hide`,It=()=>`隐藏`,Lt=((e={},t={})=>(t.locale??D())===`en-US`?Ft(e):It(e)),Rt=e=>`Page ${e?.current} of ${e?.total}`,zt=e=>`第 ${e?.current} 页,共 ${e?.total} 页`,Bt=((e,t={})=>(t.locale??D())===`en-US`?Rt(e):zt(e)),Vt=()=>`Rows per page`,Ht=()=>`每页行数`,Ut=((e={},t={})=>(t.locale??D())===`en-US`?Vt(e):Ht(e)),Wt=()=>`Go to first page`,Gt=()=>`跳转到第一页`,Kt=((e={},t={})=>(t.locale??D())===`en-US`?Wt(e):Gt(e)),qt=()=>`Go to previous page`,Jt=()=>`跳转到上一页`,Yt=((e={},t={})=>(t.locale??D())===`en-US`?qt(e):Jt(e)),Xt=e=>`Go to page ${e?.page}`,Zt=e=>`跳转到第 ${e?.page} 页`,Qt=((e,t={})=>(t.locale??D())===`en-US`?Xt(e):Zt(e)),$t=()=>`Go to next page`,en=()=>`跳转到下一页`,tn=((e={},t={})=>(t.locale??D())===`en-US`?$t(e):en(e)),nn=()=>`Go to last page`,rn=()=>`跳转到最后一页`,an=((e={},t={})=>(t.locale??D())===`en-US`?nn(e):rn(e)),on=()=>`Filter...`,sn=()=>`筛选...`,cn=((e={},t={})=>(t.locale??D())===`en-US`?on(e):sn(e)),ln=()=>`Reset`,un=()=>`重置`,dn=((e={},t={})=>(t.locale??D())===`en-US`?ln(e):un(e)),fn=()=>`Refresh`,pn=()=>`刷新`,mn=((e={},t={})=>(t.locale??D())===`en-US`?fn(e):pn(e)),hn=()=>`View`,gn=()=>`视图`,_n=((e={},t={})=>(t.locale??D())===`en-US`?hn(e):gn(e)),vn=()=>`Toggle columns`,yn=()=>`切换列`,bn=((e={},t={})=>(t.locale??D())===`en-US`?vn(e):yn(e)),xn=()=>`Select date range`,Sn=()=>`选择时间范围`,Cn=((e={},t={})=>(t.locale??D())===`en-US`?xn(e):Sn(e)),wn=()=>`Today`,Tn=()=>`今天`,En=((e={},t={})=>(t.locale??D())===`en-US`?wn(e):Tn(e)),Dn=()=>`Yesterday`,On=()=>`昨天`,kn=((e={},t={})=>(t.locale??D())===`en-US`?Dn(e):On(e)),An=()=>`Last 7 days`,jn=()=>`最近 7 天`,Mn=((e={},t={})=>(t.locale??D())===`en-US`?An(e):jn(e)),Nn=()=>`Last 30 days`,Pn=()=>`最近 30 天`,Fn=((e={},t={})=>(t.locale??D())===`en-US`?Nn(e):Pn(e)),In=()=>`This month`,Ln=()=>`本月`,Rn=((e={},t={})=>(t.locale??D())===`en-US`?In(e):Ln(e)),zn=()=>`Last month`,Bn=()=>`上月`,Vn=((e={},t={})=>(t.locale??D())===`en-US`?zn(e):Bn(e)),Hn=()=>`Overview`,Un=()=>`概览`,Wn=((e={},t={})=>(t.locale??D())===`en-US`?Hn(e):Un(e)),Gn=()=>`Dashboard`,Kn=()=>`仪表盘`,qn=((e={},t={})=>(t.locale??D())===`en-US`?Gn(e):Kn(e)),Jn=()=>`Orders`,Yn=()=>`订单管理`,Xn=((e={},t={})=>(t.locale??D())===`en-US`?Jn(e):Yn(e)),Zn=()=>`Payments`,Qn=()=>`支付管理`,$n=((e={},t={})=>(t.locale??D())===`en-US`?Zn(e):Qn(e)),er=()=>`Blockchain`,tr=()=>`区块链`,nr=((e={},t={})=>(t.locale??D())===`en-US`?er(e):tr(e)),rr=()=>`Chains & Tokens`,ir=()=>`链与代币`,ar=((e={},t={})=>(t.locale??D())===`en-US`?rr(e):ir(e)),or=()=>`RPC Nodes`,sr=()=>`RPC 节点`,cr=((e={},t={})=>(t.locale??D())===`en-US`?or(e):sr(e)),lr=()=>`System`,ur=()=>`系统`,dr=((e={},t={})=>(t.locale??D())===`en-US`?lr(e):ur(e)),fr=()=>`Settings`,pr=()=>`系统配置`,mr=((e={},t={})=>(t.locale??D())===`en-US`?fr(e):pr(e)),hr=()=>`Account Security`,gr=()=>`账户安全`,_r=((e={},t={})=>(t.locale??D())===`en-US`?hr(e):gr(e)),vr=()=>`Manage your account security settings.`,yr=()=>`管理你的账户安全设置。`,br=((e={},t={})=>(t.locale??D())===`en-US`?vr(e):yr(e)),xr=()=>`Change Password`,Sr=()=>`修改密码`,Cr=((e={},t={})=>(t.locale??D())===`en-US`?xr(e):Sr(e)),wr=()=>`Change Password`,Tr=()=>`修改密码`,Er=((e={},t={})=>(t.locale??D())===`en-US`?wr(e):Tr(e)),Dr=()=>`Update your login password.`,Or=()=>`更新你的登录密码。`,kr=((e={},t={})=>(t.locale??D())===`en-US`?Dr(e):Or(e)),Ar=()=>`General`,jr=()=>`基础配置`,Mr=((e={},t={})=>(t.locale??D())===`en-US`?Ar(e):jr(e)),Nr=()=>`Telegram`,Pr=()=>`Telegram 配置`,Fr=((e={},t={})=>(t.locale??D())===`en-US`?Nr(e):Pr(e)),Ir=()=>`Exchange Rate`,Lr=()=>`汇率配置`,Rr=((e={},t={})=>(t.locale??D())===`en-US`?Ir(e):Lr(e)),zr=()=>`EPay Config`,Br=()=>`EPay 配置`,Vr=((e={},t={})=>(t.locale??D())===`en-US`?zr(e):Br(e)),Hr=()=>`Default Token`,Ur=()=>`默认代币`,Wr=((e={},t={})=>(t.locale??D())===`en-US`?Hr(e):Ur(e)),Gr=()=>`Default Currency`,Kr=()=>`默认法币`,qr=((e={},t={})=>(t.locale??D())===`en-US`?Gr(e):Kr(e)),Jr=()=>`Default Network`,Yr=()=>`默认网络`,Xr=((e={},t={})=>(t.locale??D())===`en-US`?Jr(e):Yr(e)),Zr=()=>`System error / Parameter validation failed`,Qr=()=>`系统错误 / 参数校验失败`,$r=((e={},t={})=>(t.locale??D())===`en-US`?Zr(e):Qr(e)),ei=()=>`Wallet address already exists`,ti=()=>`钱包地址已存在`,ni=((e={},t={})=>(t.locale??D())===`en-US`?ei(e):ti(e)),ri=()=>`Order already exists`,ii=()=>`订单已存在`,ai=((e={},t={})=>(t.locale??D())===`en-US`?ri(e):ii(e)),oi=()=>`No available wallet address`,si=()=>`无可用钱包地址`,ci=((e={},t={})=>(t.locale??D())===`en-US`?oi(e):si(e)),li=()=>`Invalid payment amount`,ui=()=>`无效支付金额`,di=((e={},t={})=>(t.locale??D())===`en-US`?li(e):ui(e)),fi=()=>`No available amount channel`,pi=()=>`无可用金额通道`,mi=((e={},t={})=>(t.locale??D())===`en-US`?fi(e):pi(e)),hi=()=>`Exchange rate calculation failed`,gi=()=>`汇率计算失败`,_i=((e={},t={})=>(t.locale??D())===`en-US`?hi(e):gi(e)),vi=()=>`Block transaction already processed`,yi=()=>`区块交易已处理`,bi=((e={},t={})=>(t.locale??D())===`en-US`?vi(e):yi(e)),xi=()=>`Order not found`,Si=()=>`订单不存在`,Ci=((e={},t={})=>(t.locale??D())===`en-US`?xi(e):Si(e)),wi=()=>`Request parameter parsing failed`,Ti=()=>`请求参数解析失败`,Ei=((e={},t={})=>(t.locale??D())===`en-US`?wi(e):Ti(e)),Di=()=>`Order status has changed`,Oi=()=>`订单状态已变更`,ki=((e={},t={})=>(t.locale??D())===`en-US`?Di(e):Oi(e)),Ai=()=>`Sub-order count exceeded`,ji=()=>`子订单数量超限`,Mi=((e={},t={})=>(t.locale??D())===`en-US`?Ai(e):ji(e)),Ni=()=>`Cannot switch network for sub-order`,Pi=()=>`不能对子订单切换网络`,Fi=((e={},t={})=>(t.locale??D())===`en-US`?Ni(e):Pi(e)),Ii=()=>`Order is not in pending payment status`,Li=()=>`订单不是待支付状态`,Ri=((e={},t={})=>(t.locale??D())===`en-US`?Ii(e):Li(e)),zi=()=>`Gateway not configured`,Bi=()=>`网关未配置`,Vi=((e={},t={})=>(t.locale??D())===`en-US`?zi(e):Bi(e)),Hi=()=>`Supported asset already exists`,Ui=()=>`支持的资产已存在`,Wi=((e={},t={})=>(t.locale??D())===`en-US`?Hi(e):Ui(e)),Gi=()=>`Supported asset does not exist`,Ki=()=>`支持的资产不存在`,qi=((e={},t={})=>(t.locale??D())===`en-US`?Gi(e):Ki(e)),Ji=()=>`Request failed`,Yi=()=>`请求失败`,Xi=((e={},t={})=>(t.locale??D())===`en-US`?Ji(e):Yi(e)),Zi=()=>`Server error, please try again later`,Qi=()=>`服务器错误,请稍后重试`,$i=((e={},t={})=>(t.locale??D())===`en-US`?Zi(e):Qi(e)),ea=()=>`Oops! Something went wrong :')`,ta=()=>`出错了 :')`,na=((e={},t={})=>(t.locale??D())===`en-US`?ea(e):ta(e)),ra=()=>`We apologize for the inconvenience. Please try again later.`,ia=()=>`抱歉给您带来不便,请稍后重试。`,aa=((e={},t={})=>(t.locale??D())===`en-US`?ra(e):ia(e)),oa=()=>`Go Back`,sa=()=>`返回`,ca=((e={},t={})=>(t.locale??D())===`en-US`?oa(e):sa(e)),la=()=>`Back to Home`,ua=()=>`回到首页`,da=((e={},t={})=>(t.locale??D())===`en-US`?la(e):ua(e)),fa=()=>`Oops! Page Not Found!`,pa=()=>`页面未找到!`,ma=((e={},t={})=>(t.locale??D())===`en-US`?fa(e):pa(e)),ha=()=>`It seems like the page you're looking for does not exist or might have been removed.`,ga=()=>`您访问的页面不存在或已被移除。`,_a=((e={},t={})=>(t.locale??D())===`en-US`?ha(e):ga(e)),va=()=>`Welcome back`,ya=()=>`欢迎回来`,ba=((e={},t={})=>(t.locale??D())===`en-US`?va(e):ya(e)),xa=()=>`Sign in to GMPay`,Sa=()=>`登录 GMPay 后台`,Ca=((e={},t={})=>(t.locale??D())===`en-US`?xa(e):Sa(e)),wa=()=>`Use your admin account to access the console and manage payment orders, wallet configuration and callback notifications.`,Ta=()=>`使用管理员账号进入控制台,继续处理收款订单、钱包配置与通知回调。`,Ea=((e={},t={})=>(t.locale??D())===`en-US`?wa(e):Ta(e)),Da=()=>`Username`,Oa=()=>`账号`,ka=((e={},t={})=>(t.locale??D())===`en-US`?Da(e):Oa(e)),Aa=()=>`admin`,ja=()=>`admin`,Ma=((e={},t={})=>(t.locale??D())===`en-US`?Aa(e):ja(e)),Na=()=>`Password`,Pa=()=>`密码`,Fa=((e={},t={})=>(t.locale??D())===`en-US`?Na(e):Pa(e)),Ia=()=>`Please enter your username`,La=()=>`请输入账号`,Ra=((e={},t={})=>(t.locale??D())===`en-US`?Ia(e):La(e)),za=()=>`Please enter your password`,Ba=()=>`请输入密码`,Va=((e={},t={})=>(t.locale??D())===`en-US`?za(e):Ba(e)),Ha=()=>`Sign In`,Ua=()=>`登录`,Wa=((e={},t={})=>(t.locale??D())===`en-US`?Ha(e):Ua(e)),Ga=()=>`epusdt Setup`,Ka=()=>`epusdt 安装配置`,qa=((e={},t={})=>(t.locale??D())===`en-US`?Ga(e):Ka(e)),Ja=()=>`Fill in the details below to create your configuration file.`,Ya=()=>`填写以下信息以创建配置文件。`,Xa=((e={},t={})=>(t.locale??D())===`en-US`?Ja(e):Ya(e)),Za=()=>`App Name`,Qa=()=>`应用名称`,$a=((e={},t={})=>(t.locale??D())===`en-US`?Za(e):Qa(e)),eo=()=>`App URI`,to=()=>`应用地址`,no=((e={},t={})=>(t.locale??D())===`en-US`?eo(e):to(e)),ro=()=>`HTTP Bind Address`,io=()=>`HTTP 绑定地址`,ao=((e={},t={})=>(t.locale??D())===`en-US`?ro(e):io(e)),oo=()=>`HTTP Bind Port`,so=()=>`HTTP 绑定端口`,co=((e={},t={})=>(t.locale??D())===`en-US`?oo(e):so(e)),lo=()=>`Runtime Root Path`,uo=()=>`运行时根目录`,fo=((e={},t={})=>(t.locale??D())===`en-US`?lo(e):uo(e)),po=()=>`Log Save Path`,mo=()=>`日志保存路径`,ho=((e={},t={})=>(t.locale??D())===`en-US`?po(e):mo(e)),go=()=>`Order Expiration (min)`,_o=()=>`订单过期时间(分钟)`,vo=((e={},t={})=>(t.locale??D())===`en-US`?go(e):_o(e)),yo=()=>`Max Callback Retries`,bo=()=>`最大回调重试次数`,xo=((e={},t={})=>(t.locale??D())===`en-US`?yo(e):bo(e)),So=()=>`Install`,Co=()=>`开始安装`,wo=((e={},t={})=>(t.locale??D())===`en-US`?So(e):Co(e)),To=()=>`Installing…`,Eo=()=>`安装中…`,Do=((e={},t={})=>(t.locale??D())===`en-US`?To(e):Eo(e)),Oo=()=>`Done!`,ko=()=>`完成!`,Ao=((e={},t={})=>(t.locale??D())===`en-US`?Oo(e):ko(e)),jo=()=>`Done! The server is starting…`,Mo=()=>`安装完成!服务正在启动…`,No=((e={},t={})=>(t.locale??D())===`en-US`?jo(e):Mo(e)),Po=()=>`Install failed.`,Fo=()=>`安装失败。`,Io=((e={},t={})=>(t.locale??D())===`en-US`?Po(e):Fo(e)),Lo=()=>`Settled By Sub`,Ro=()=>`子单结算`,zo=((e={},t={})=>(t.locale??D())===`en-US`?Lo(e):Ro(e)),Bo=()=>`Appearance`,Vo=()=>`外观设置`,Ho=((e={},t={})=>(t.locale??D())===`en-US`?Bo(e):Vo(e)),Uo=()=>`Admin Console`,Wo=()=>`管理控制台`,Go=((e={},t={})=>(t.locale??D())===`en-US`?Uo(e):Wo(e)),Ko=()=>`Payment Assets`,qo=()=>`收款资产`,Jo=((e={},t={})=>(t.locale??D())===`en-US`?Ko(e):qo(e)),Yo=()=>`Transactions`,Xo=()=>`交易`,Zo=((e={},t={})=>(t.locale??D())===`en-US`?Yo(e):Xo(e)),Qo=()=>`Finance`,$o=()=>`财务`,es=((e={},t={})=>(t.locale??D())===`en-US`?Qo(e):$o(e)),ts=()=>`Address Management`,ns=()=>`地址管理`,rs=((e={},t={})=>(t.locale??D())===`en-US`?ts(e):ns(e)),is=e=>`Last login: ${e?.time}`,as=e=>`上次登录: ${e?.time}`,os=((e,t={})=>(t.locale??D())===`en-US`?is(e):as(e)),ss=()=>`Welcome to Admin Console`,cs=()=>`欢迎使用管理后台`,ls=((e={},t={})=>(t.locale??D())===`en-US`?ss(e):cs(e)),us=()=>`Dashboard`,ds=()=>`仪表盘`,fs=((e={},t={})=>(t.locale??D())===`en-US`?us(e):ds(e)),ps=()=>`View asset balances, revenue trends, and recent order statuses.`,ms=()=>`查看资产、流水与最近订单状态。`,hs=((e={},t={})=>(t.locale??D())===`en-US`?ps(e):ms(e)),gs=()=>`Time`,_s=()=>`时间`,vs=((e={},t={})=>(t.locale??D())===`en-US`?gs(e):_s(e)),ys=()=>`Order ID`,bs=()=>`订单号`,xs=((e={},t={})=>(t.locale??D())===`en-US`?ys(e):bs(e)),Ss=()=>`Wallet Address`,Cs=()=>`钱包地址`,ws=((e={},t={})=>(t.locale??D())===`en-US`?Ss(e):Cs(e)),Ts=()=>`Fiat Amount`,Es=()=>`法币金额`,Ds=((e={},t={})=>(t.locale??D())===`en-US`?Ts(e):Es(e)),Os=()=>`Token Amount`,ks=()=>`代币金额`,As=((e={},t={})=>(t.locale??D())===`en-US`?Os(e):ks(e)),js=()=>`Chain`,Ms=()=>`链`,Ns=((e={},t={})=>(t.locale??D())===`en-US`?js(e):Ms(e)),Ps=()=>`Status`,Fs=()=>`状态`,Is=((e={},t={})=>(t.locale??D())===`en-US`?Ps(e):Fs(e)),Ls=()=>`Revenue Trend`,Rs=()=>`流水趋势`,zs=((e={},t={})=>(t.locale??D())===`en-US`?Ls(e):Rs(e)),Bs=()=>`Trend of successful and failed order amounts`,Vs=()=>`成功与失败订单金额趋势`,Hs=((e={},t={})=>(t.locale??D())===`en-US`?Bs(e):Vs(e)),Us=()=>`Order Statistics`,Ws=()=>`订单统计`,Gs=((e={},t={})=>(t.locale??D())===`en-US`?Us(e):Ws(e)),Ks=()=>`Daily order count and conversion rate trend`,qs=()=>`每日订单数与成交率趋势`,Js=((e={},t={})=>(t.locale??D())===`en-US`?Ks(e):qs(e)),Ys=()=>`Recent Orders`,Xs=()=>`最近订单`,Zs=((e={},t={})=>(t.locale??D())===`en-US`?Ys(e):Xs(e)),Qs=()=>`Payment status of the latest 20 orders`,$s=()=>`最新 20 笔订单收款状态`,ec=((e={},t={})=>(t.locale??D())===`en-US`?Qs(e):$s(e)),tc=()=>`No recent orders`,nc=()=>`暂无最近订单`,rc=((e={},t={})=>(t.locale??D())===`en-US`?tc(e):nc(e)),ic=()=>`Asset Trend`,ac=()=>`资产趋势`,oc=((e={},t={})=>(t.locale??D())===`en-US`?ic(e):ac(e)),sc=()=>`Switch between today, 7 days, 30 days, and custom views`,cc=()=>`支持今日、7 天、30 天与自定义视图切换`,lc=((e={},t={})=>(t.locale??D())===`en-US`?sc(e):cc(e)),uc=()=>`Filter`,dc=()=>`筛选`,fc=((e={},t={})=>(t.locale??D())===`en-US`?uc(e):dc(e)),pc=()=>`No data`,mc=()=>`无数据`,hc=((e={},t={})=>(t.locale??D())===`en-US`?pc(e):mc(e)),gc=()=>`Clear filters`,_c=()=>`清除筛选`,vc=((e={},t={})=>(t.locale??D())===`en-US`?gc(e):_c(e)),yc=()=>`Total Amount`,bc=()=>`总金额`,xc=((e={},t={})=>(t.locale??D())===`en-US`?yc(e):bc(e)),Sc=()=>`Actual Amount`,Cc=()=>`实收金额`,wc=((e={},t={})=>(t.locale??D())===`en-US`?Sc(e):Cc(e)),Tc=()=>`Total Asset Balance (USD)`,Ec=()=>`总资产余额 (USD)`,Dc=((e={},t={})=>(t.locale??D())===`en-US`?Tc(e):Ec(e)),Oc=()=>`Current available asset pool`,kc=()=>`当前可用资金池`,Ac=((e={},t={})=>(t.locale??D())===`en-US`?Oc(e):kc(e)),jc=()=>`Total Volume`,Mc=()=>`总流水`,Nc=((e={},t={})=>(t.locale??D())===`en-US`?jc(e):Mc(e)),Pc=()=>`Cumulative successful payment amount`,Fc=()=>`累计成功收款金额`,Ic=((e={},t={})=>(t.locale??D())===`en-US`?Pc(e):Fc(e)),Lc=()=>`Total Orders`,Rc=()=>`总订单量`,zc=((e={},t={})=>(t.locale??D())===`en-US`?Lc(e):Rc(e)),Bc=()=>`Cumulative number of orders`,Vc=()=>`累计订单数量`,Hc=((e={},t={})=>(t.locale??D())===`en-US`?Bc(e):Vc(e)),Uc=()=>`Total Conversion Rate`,Wc=()=>`总成交率`,Gc=((e={},t={})=>(t.locale??D())===`en-US`?Uc(e):Wc(e)),Kc=()=>`Cumulative paid / total orders`,qc=()=>`累计已支付 / 总订单`,Jc=((e={},t={})=>(t.locale??D())===`en-US`?Kc(e):qc(e)),Yc=()=>`Order Count`,Xc=()=>`订单总数`,Zc=((e={},t={})=>(t.locale??D())===`en-US`?Yc(e):Xc(e)),Qc=()=>`Total orders in the selected period`,$c=()=>`当前筛选周期内订单总数`,el=((e={},t={})=>(t.locale??D())===`en-US`?Qc(e):$c(e)),tl=()=>`Successful Orders`,nl=()=>`成功订单`,rl=((e={},t={})=>(t.locale??D())===`en-US`?tl(e):nl(e)),il=()=>`Paid orders in the selected period`,al=()=>`当前筛选周期内已支付订单`,ol=((e={},t={})=>(t.locale??D())===`en-US`?il(e):al(e)),sl=()=>`Average Payment Time`,cl=()=>`平均支付耗时`,ll=((e={},t={})=>(t.locale??D())===`en-US`?sl(e):cl(e)),ul=()=>`Average time from order creation to payment success`,dl=()=>`订单创建到支付成功平均耗时`,fl=((e={},t={})=>(t.locale??D())===`en-US`?ul(e):dl(e)),pl=()=>`Expired Unpaid`,ml=()=>`超时未支付`,hl=((e={},t={})=>(t.locale??D())===`en-US`?pl(e):ml(e)),gl=()=>`Expired and unpaid orders`,_l=()=>`已过期且未支付订单`,vl=((e={},t={})=>(t.locale??D())===`en-US`?gl(e):_l(e)),yl=()=>`Last 7 Days Volume`,bl=()=>`最近7日流水`,xl=((e={},t={})=>(t.locale??D())===`en-US`?yl(e):bl(e)),Sl=()=>`Cumulative payments in the last 7 days`,Cl=()=>`近 7 天累计收款`,wl=((e={},t={})=>(t.locale??D())===`en-US`?Sl(e):Cl(e)),Tl=()=>`Active Address Count`,El=()=>`活跃地址数量`,Dl=((e={},t={})=>(t.locale??D())===`en-US`?Tl(e):El(e)),Ol=()=>`Addresses with transactions in the last 24 hours`,kl=()=>`近 24 小时有流水地址`,Al=((e={},t={})=>(t.locale??D())===`en-US`?Ol(e):kl(e)),jl=()=>`Online Chain Count`,Ml=()=>`在线链数量`,Nl=((e={},t={})=>(t.locale??D())===`en-US`?jl(e):Ml(e)),Pl=()=>`Currently available payment networks`,Fl=()=>`当前可用收款网络`,Il=((e={},t={})=>(t.locale??D())===`en-US`?Pl(e):Fl(e)),Ll=()=>`Order Success Rate`,Rl=()=>`订单成功率`,zl=((e={},t={})=>(t.locale??D())===`en-US`?Ll(e):Rl(e)),Bl=()=>`Conversion rate in the selected period`,Vl=()=>`当前筛选周期内成交率`,Hl=((e={},t={})=>(t.locale??D())===`en-US`?Bl(e):Vl(e)),Ul=()=>`Total Amount`,Wl=()=>`总金额`,Gl=((e={},t={})=>(t.locale??D())===`en-US`?Ul(e):Wl(e)),Kl=()=>`Actual Amount`,ql=()=>`实收金额`,Jl=((e={},t={})=>(t.locale??D())===`en-US`?Kl(e):ql(e)),Yl=()=>`Order Count`,Xl=()=>`订单数`,Zl=((e={},t={})=>(t.locale??D())===`en-US`?Yl(e):Xl(e)),Ql=()=>`Successful Orders`,$l=()=>`成功订单`,eu=((e={},t={})=>(t.locale??D())===`en-US`?Ql(e):$l(e)),tu=()=>`Pending`,nu=()=>`待支付`,ru=((e={},t={})=>(t.locale??D())===`en-US`?tu(e):nu(e)),iu=()=>`Paid`,au=()=>`已支付`,ou=((e={},t={})=>(t.locale??D())===`en-US`?iu(e):au(e)),su=()=>`Expired`,cu=()=>`已过期`,lu=((e={},t={})=>(t.locale??D())===`en-US`?su(e):cu(e)),uu=()=>`Today`,du=()=>`今日`,fu=((e={},t={})=>(t.locale??D())===`en-US`?uu(e):du(e)),pu=()=>`7 days`,mu=()=>`7天`,hu=((e={},t={})=>(t.locale??D())===`en-US`?pu(e):mu(e)),gu=()=>`30 days`,_u=()=>`30天`,vu=((e={},t={})=>(t.locale??D())===`en-US`?gu(e):_u(e)),yu=()=>`Custom`,bu=()=>`自定义`,xu=((e={},t={})=>(t.locale??D())===`en-US`?yu(e):bu(e)),Su=()=>`Close Order`,Cu=()=>`关闭订单`,wu=((e={},t={})=>(t.locale??D())===`en-US`?Su(e):Cu(e)),Tu=()=>`Resend Callback`,Eu=()=>`回调重发`,Du=((e={},t={})=>(t.locale??D())===`en-US`?Tu(e):Eu(e)),Ou=()=>`Please enter the block transaction ID`,ku=()=>`请输入区块交易 ID`,Au=((e={},t={})=>(t.locale??D())===`en-US`?Ou(e):ku(e)),ju=()=>`Order marked as paid`,Mu=()=>`订单已标记为已支付`,Nu=((e={},t={})=>(t.locale??D())===`en-US`?ju(e):Mu(e)),Pu=()=>`Order export failed`,Fu=()=>`订单导出失败`,Iu=((e={},t={})=>(t.locale??D())===`en-US`?Pu(e):Fu(e)),Lu=()=>`Order export succeeded`,Ru=()=>`订单导出成功`,zu=((e={},t={})=>(t.locale??D())===`en-US`?Lu(e):Ru(e)),Bu=()=>`Exporting...`,Vu=()=>`导出中...`,Hu=((e={},t={})=>(t.locale??D())===`en-US`?Bu(e):Vu(e)),Uu=()=>`Export Orders`,Wu=()=>`导出订单`,Gu=((e={},t={})=>(t.locale??D())===`en-US`?Uu(e):Wu(e)),Ku=()=>`Search orders, filter by status, and perform补单/close/resend callback actions.`,qu=()=>`搜索订单、筛选状态与执行补单/关闭/回调操作。`,Ju=((e={},t={})=>(t.locale??D())===`en-US`?Ku(e):qu(e)),Yu=()=>`Order Management`,Xu=()=>`订单管理`,Zu=((e={},t={})=>(t.locale??D())===`en-US`?Yu(e):Xu(e)),Qu=()=>`Details`,$u=()=>`详情`,ed=((e={},t={})=>(t.locale??D())===`en-US`?Qu(e):$u(e)),td=()=>`Manual Mark Paid`,nd=()=>`补单`,rd=((e={},t={})=>(t.locale??D())===`en-US`?td(e):nd(e)),id=()=>`Confirm`,ad=()=>`确认`,od=((e={},t={})=>(t.locale??D())===`en-US`?id(e):ad(e)),sd=e=>`You are about to perform the “${e?.action}” action on order ${e?.id}.`,cd=e=>`即将对订单 ${e?.id} 执行“${e?.action}”操作。`,ld=((e,t={})=>(t.locale??D())===`en-US`?sd(e):cd(e)),ud=e=>`Confirm ${e?.action}`,dd=e=>`${e?.action}确认`,fd=((e,t={})=>(t.locale??D())===`en-US`?ud(e):dd(e)),pd=()=>`Mark as Paid`,md=()=>`标记已支付`,hd=((e={},t={})=>(t.locale??D())===`en-US`?pd(e):md(e)),gd=e=>`Fill in the on-chain transaction ID for order ${e?.id}.`,_d=e=>`为订单 ${e?.id} 填写链上交易 ID。`,vd=((e,t={})=>(t.locale??D())===`en-US`?gd(e):_d(e)),yd=()=>`Block Transaction ID`,bd=()=>`区块交易 ID`,xd=((e={},t={})=>(t.locale??D())===`en-US`?yd(e):bd(e)),Sd=()=>`Submitting...`,Cd=()=>`提交中...`,wd=((e={},t={})=>(t.locale??D())===`en-US`?Sd(e):Cd(e)),Td=()=>`Confirm Manual Mark Paid`,Ed=()=>`确认补单`,Dd=((e={},t={})=>(t.locale??D())===`en-US`?Td(e):Ed(e)),Od=()=>`Status`,kd=()=>`状态`,Ad=((e={},t={})=>(t.locale??D())===`en-US`?Od(e):kd(e)),jd=()=>`Chain`,Md=()=>`链`,Nd=((e={},t={})=>(t.locale??D())===`en-US`?jd(e):Md(e)),Pd=()=>`Search order ID / merchant order ID...`,Fd=()=>`搜索订单号 / 商户订单号...`,Id=((e={},t={})=>(t.locale??D())===`en-US`?Pd(e):Fd(e)),Ld=()=>`No order data`,Rd=()=>`暂无订单数据`,zd=((e={},t={})=>(t.locale??D())===`en-US`?Ld(e):Rd(e)),Bd=()=>`Status`,Vd=()=>`状态`,Hd=((e={},t={})=>(t.locale??D())===`en-US`?Bd(e):Vd(e)),Ud=()=>`Merchant Order ID`,Wd=()=>`商户订单号`,Gd=((e={},t={})=>(t.locale??D())===`en-US`?Ud(e):Wd(e)),Kd=()=>`Order Name`,qd=()=>`订单名称`,Jd=((e={},t={})=>(t.locale??D())===`en-US`?Kd(e):qd(e)),Yd=()=>`Fiat Amount`,Xd=()=>`法币金额`,Zd=((e={},t={})=>(t.locale??D())===`en-US`?Yd(e):Xd(e)),Qd=()=>`Token Amount`,$d=()=>`代币金额`,ef=((e={},t={})=>(t.locale??D())===`en-US`?Qd(e):$d(e)),tf=()=>`Chain`,nf=()=>`链`,rf=((e={},t={})=>(t.locale??D())===`en-US`?tf(e):nf(e)),af=()=>`Address`,of=()=>`地址`,sf=((e={},t={})=>(t.locale??D())===`en-US`?af(e):of(e)),cf=()=>`Created At`,lf=()=>`创建时间`,uf=((e={},t={})=>(t.locale??D())===`en-US`?cf(e):lf(e)),df=()=>`Updated At`,ff=()=>`更新时间`,pf=((e={},t={})=>(t.locale??D())===`en-US`?df(e):ff(e)),mf=()=>`On-chain Transaction ID`,hf=()=>`链上交易 ID`,gf=((e={},t={})=>(t.locale??D())===`en-US`?mf(e):hf(e)),_f=()=>`Payment Type`,vf=()=>`支付类型`,yf=((e={},t={})=>(t.locale??D())===`en-US`?_f(e):vf(e)),bf=()=>`Assigned Address`,xf=()=>`已分配地址`,Sf=((e={},t={})=>(t.locale??D())===`en-US`?bf(e):xf(e)),Cf=()=>`Callback Status`,wf=()=>`回调状态`,Tf=((e={},t={})=>(t.locale??D())===`en-US`?Cf(e):wf(e)),Ef=()=>`Callback Count`,Df=()=>`回调次数`,Of=((e={},t={})=>(t.locale??D())===`en-US`?Ef(e):Df(e)),kf=()=>`Notify URL`,Af=()=>`通知地址`,jf=((e={},t={})=>(t.locale??D())===`en-US`?kf(e):Af(e)),Mf=()=>`Redirect URL`,Nf=()=>`跳转地址`,Pf=((e={},t={})=>(t.locale??D())===`en-US`?Mf(e):Nf(e)),Ff=()=>`Actions`,If=()=>`操作`,Lf=((e={},t={})=>(t.locale??D())===`en-US`?Ff(e):If(e)),Rf=()=>`Yes`,zf=()=>`是`,Bf=((e={},t={})=>(t.locale??D())===`en-US`?Rf(e):zf(e)),Vf=()=>`No`,Hf=()=>`否`,Uf=((e={},t={})=>(t.locale??D())===`en-US`?Vf(e):Hf(e)),Wf=()=>`Succeeded`,Gf=()=>`已成功`,Kf=((e={},t={})=>(t.locale??D())===`en-US`?Wf(e):Gf(e)),qf=()=>`Not Called Back / Failed`,Jf=()=>`未回调/失败`,Yf=((e={},t={})=>(t.locale??D())===`en-US`?qf(e):Jf(e)),Xf=()=>`View Details`,Zf=()=>`查看详情`,Qf=((e={},t={})=>(t.locale??D())===`en-US`?Xf(e):Zf(e)),$f=()=>`Manual Mark Paid`,ep=()=>`手动补单`,tp=((e={},t={})=>(t.locale??D())===`en-US`?$f(e):ep(e)),np=()=>`Open menu`,rp=()=>`打开菜单`,ip=((e={},t={})=>(t.locale??D())===`en-US`?np(e):rp(e)),ap=()=>`Merchant Order ID`,op=()=>`商户订单号`,sp=((e={},t={})=>(t.locale??D())===`en-US`?ap(e):op(e)),cp=()=>`Order Name`,lp=()=>`订单名称`,up=((e={},t={})=>(t.locale??D())===`en-US`?cp(e):lp(e)),dp=()=>`Amount`,fp=()=>`金额`,pp=((e={},t={})=>(t.locale??D())===`en-US`?dp(e):fp(e)),mp=()=>`Actual Paid`,hp=()=>`实付`,gp=((e={},t={})=>(t.locale??D())===`en-US`?mp(e):hp(e)),_p=()=>`Chain`,vp=()=>`链`,yp=((e={},t={})=>(t.locale??D())===`en-US`?_p(e):vp(e)),bp=()=>`Receive Address`,xp=()=>`收款地址`,Sp=((e={},t={})=>(t.locale??D())===`en-US`?bp(e):xp(e)),Cp=()=>`Callback URL`,wp=()=>`回调地址`,Tp=((e={},t={})=>(t.locale??D())===`en-US`?Cp(e):wp(e)),Ep=()=>`Redirect URL`,Dp=()=>`跳转地址`,Op=((e={},t={})=>(t.locale??D())===`en-US`?Ep(e):Dp(e)),kp=()=>`Block Transaction ID`,Ap=()=>`区块交易 ID`,jp=((e={},t={})=>(t.locale??D())===`en-US`?kp(e):Ap(e)),Mp=()=>`Parent Order`,Np=()=>`父订单`,Pp=((e={},t={})=>(t.locale??D())===`en-US`?Mp(e):Np(e)),Fp=()=>`Created At`,Ip=()=>`创建时间`,Lp=((e={},t={})=>(t.locale??D())===`en-US`?Fp(e):Ip(e)),Rp=()=>`Updated At`,zp=()=>`更新时间`,Bp=((e={},t={})=>(t.locale??D())===`en-US`?Rp(e):zp(e)),Vp=()=>`Order Details`,Hp=()=>`订单详情`,Up=((e={},t={})=>(t.locale??D())===`en-US`?Vp(e):Hp(e)),Wp=()=>`View the full API response for the current order.`,Gp=()=>`查看当前订单的完整接口返回信息。`,Kp=((e={},t={})=>(t.locale??D())===`en-US`?Wp(e):Gp(e)),qp=()=>`Loading...`,Jp=()=>`加载中...`,Yp=((e={},t={})=>(t.locale??D())===`en-US`?qp(e):Jp(e)),Xp=()=>`View the current status of chains and tokens available for payments.`,Zp=()=>`查看当前可用于收款的链与代币状态。`,Qp=((e={},t={})=>(t.locale??D())===`en-US`?Xp(e):Zp(e)),$p=()=>`Payment Assets`,em=()=>`收款资产`,tm=((e={},t={})=>(t.locale??D())===`en-US`?$p(e):em(e)),nm=()=>`Chain`,rm=()=>`链`,im=((e={},t={})=>(t.locale??D())===`en-US`?nm(e):rm(e)),am=()=>`Search chains or tokens...`,om=()=>`搜索链或代币...`,sm=((e={},t={})=>(t.locale??D())===`en-US`?am(e):om(e)),cm=()=>`No payment asset data`,lm=()=>`暂无收款资产数据`,um=((e={},t={})=>(t.locale??D())===`en-US`?cm(e):lm(e)),dm=()=>`Chain`,fm=()=>`链`,pm=((e={},t={})=>(t.locale??D())===`en-US`?dm(e):fm(e)),mm=()=>`Supported Tokens`,hm=()=>`支持代币`,gm=((e={},t={})=>(t.locale??D())===`en-US`?mm(e):hm(e)),_m=()=>`Wallet deleted successfully`,vm=()=>`钱包删除成功`,ym=((e={},t={})=>(t.locale??D())===`en-US`?_m(e):vm(e)),bm=()=>`Status updated`,xm=()=>`状态已更新`,Sm=((e={},t={})=>(t.locale??D())===`en-US`?bm(e):xm(e)),Cm=()=>`Please configure chains and tokens in chain management first`,wm=()=>`请先在链管理中配置链与代币`,Tm=((e={},t={})=>(t.locale??D())===`en-US`?Cm(e):wm(e)),Em=()=>`Please enter at least one wallet address`,Dm=()=>`请输入至少一个钱包地址`,Om=((e={},t={})=>(t.locale??D())===`en-US`?Em(e):Dm(e)),km=e=>`Batch import completed, succeeded ${e?.success}/${e?.total}`,Am=e=>`批量导入完成,成功 ${e?.success}/${e?.total}`,jm=((e,t={})=>(t.locale??D())===`en-US`?km(e):Am(e)),Mm=()=>`Batch Import`,Nm=()=>`批量导入`,Pm=((e={},t={})=>(t.locale??D())===`en-US`?Mm(e):Nm(e)),Fm=()=>`Add Wallet`,Im=()=>`新增钱包`,Lm=((e={},t={})=>(t.locale??D())===`en-US`?Fm(e):Im(e)),Rm=()=>`Manage payment addresses, balance status, and remarks.`,zm=()=>`管理收款地址、余额状态与备注。`,Bm=((e={},t={})=>(t.locale??D())===`en-US`?Rm(e):zm(e)),Vm=()=>`Address Management`,Hm=()=>`地址管理`,Um=((e={},t={})=>(t.locale??D())===`en-US`?Vm(e):Hm(e)),Wm=()=>`Delete`,Gm=()=>`删除`,Km=((e={},t={})=>(t.locale??D())===`en-US`?Wm(e):Gm(e)),qm=()=>`Confirm`,Jm=()=>`确认`,Ym=((e={},t={})=>(t.locale??D())===`en-US`?qm(e):Jm(e)),Xm=e=>`Perform “${e?.action}” on wallet ${e?.address}.`,Zm=e=>`将对钱包 ${e?.address} 执行“${e?.action}”操作。`,Qm=((e,t={})=>(t.locale??D())===`en-US`?Xm(e):Zm(e)),$m=()=>`Delete Wallet`,eh=()=>`删除钱包`,th=((e={},t={})=>(t.locale??D())===`en-US`?$m(e):eh(e)),nh=()=>`Confirm Wallet Action`,rh=()=>`钱包操作确认`,ih=((e={},t={})=>(t.locale??D())===`en-US`?nh(e):rh(e)),ah=()=>`Batch Import Wallets`,oh=()=>`批量导入钱包`,sh=((e={},t={})=>(t.locale??D())===`en-US`?ah(e):oh(e)),ch=()=>`One wallet address per line, imported as watch-only wallets.`,lh=()=>`每行一个钱包地址,导入为观察钱包。`,uh=((e={},t={})=>(t.locale??D())===`en-US`?ch(e):lh(e)),dh=()=>`Network`,fh=()=>`网络`,ph=((e={},t={})=>(t.locale??D())===`en-US`?dh(e):fh(e)),mh=()=>`Chain`,hh=()=>`链`,gh=((e={},t={})=>(t.locale??D())===`en-US`?mh(e):hh(e)),_h=()=>`Select chain`,vh=()=>`选择链`,yh=((e={},t={})=>(t.locale??D())===`en-US`?_h(e):vh(e)),bh=()=>`Unnamed chain`,xh=()=>`未命名链`,Sh=((e={},t={})=>(t.locale??D())===`en-US`?bh(e):xh(e)),Ch=()=>`Wallet Address`,wh=()=>`钱包地址`,Th=((e={},t={})=>(t.locale??D())===`en-US`?Ch(e):wh(e)),Eh=()=>`Cancel`,Dh=()=>`取消`,Oh=((e={},t={})=>(t.locale??D())===`en-US`?Eh(e):Dh(e)),kh=()=>`Importing...`,Ah=()=>`导入中...`,jh=((e={},t={})=>(t.locale??D())===`en-US`?kh(e):Ah(e)),Mh=()=>`Start Import`,Nh=()=>`开始导入`,Ph=((e={},t={})=>(t.locale??D())===`en-US`?Mh(e):Nh(e)),Fh=()=>`Search addresses or remarks...`,Ih=()=>`搜索地址或备注...`,Lh=((e={},t={})=>(t.locale??D())===`en-US`?Fh(e):Ih(e)),Rh=()=>`No address data`,zh=()=>`暂无地址数据`,Bh=((e={},t={})=>(t.locale??D())===`en-US`?Rh(e):zh(e)),Vh=()=>`Status`,Hh=()=>`状态`,Uh=((e={},t={})=>(t.locale??D())===`en-US`?Vh(e):Hh(e)),Wh=()=>`Enabled`,Gh=()=>`启用`,Kh=((e={},t={})=>(t.locale??D())===`en-US`?Wh(e):Gh(e)),qh=()=>`Address`,Jh=()=>`地址`,Yh=((e={},t={})=>(t.locale??D())===`en-US`?qh(e):Jh(e)),Xh=()=>`Order Count`,Zh=()=>`订单数`,Qh=((e={},t={})=>(t.locale??D())===`en-US`?Xh(e):Zh(e)),$h=()=>`Source`,eg=()=>`来源`,tg=((e={},t={})=>(t.locale??D())===`en-US`?$h(e):eg(e)),ng=()=>`Remark`,rg=()=>`备注`,ig=((e={},t={})=>(t.locale??D())===`en-US`?ng(e):rg(e)),ag=()=>`Created At`,og=()=>`创建时间`,sg=((e={},t={})=>(t.locale??D())===`en-US`?ag(e):og(e)),cg=()=>`Updated At`,lg=()=>`更新时间`,ug=((e={},t={})=>(t.locale??D())===`en-US`?cg(e):lg(e)),dg=()=>`Actions`,fg=()=>`操作`,pg=((e={},t={})=>(t.locale??D())===`en-US`?dg(e):fg(e)),mg=()=>`Edit Remark`,hg=()=>`编辑备注`,gg=((e={},t={})=>(t.locale??D())===`en-US`?mg(e):hg(e)),_g=()=>`Loading...`,vg=()=>`加载中...`,yg=((e={},t={})=>(t.locale??D())===`en-US`?_g(e):vg(e)),bg=()=>`Please configure supported tokens in chain management first`,xg=()=>`请先在链管理中配置支持代币`,$=((e={},t={})=>(t.locale??D())===`en-US`?bg(e):xg(e)),Sg=()=>`Edit Wallet`,Cg=()=>`编辑钱包`,wg=((e={},t={})=>(t.locale??D())===`en-US`?Sg(e):Cg(e)),Tg=()=>`Add Wallet`,Eg=()=>`新增钱包`,Dg=((e={},t={})=>(t.locale??D())===`en-US`?Tg(e):Eg(e)),Og=()=>`Modify wallet remark information.`,kg=()=>`修改钱包备注信息。`,Ag=((e={},t={})=>(t.locale??D())===`en-US`?Og(e):kg(e)),jg=()=>`Add a new payment wallet.`,Mg=()=>`添加新的收款钱包。`,Ng=((e={},t={})=>(t.locale??D())===`en-US`?jg(e):Mg(e)),Pg=()=>`Please enter wallet address`,Fg=()=>`请输入钱包地址`,Ig=((e={},t={})=>(t.locale??D())===`en-US`?Pg(e):Fg(e)),Lg=()=>`Optional`,Rg=()=>`选填`,zg=((e={},t={})=>(t.locale??D())===`en-US`?Lg(e):Rg(e)),Bg=()=>`Saving...`,Vg=()=>`保存中...`,Hg=((e={},t={})=>(t.locale??D())===`en-US`?Bg(e):Vg(e)),Ug=()=>`Save`,Wg=()=>`保存`,Gg=((e={},t={})=>(t.locale??D())===`en-US`?Ug(e):Wg(e)),Kg=()=>`Wallet remark updated successfully`,qg=()=>`钱包备注更新成功`,Jg=((e={},t={})=>(t.locale??D())===`en-US`?Kg(e):qg(e)),Yg=()=>`Wallet added successfully`,Xg=()=>`钱包添加成功`,Zg=((e={},t={})=>(t.locale??D())===`en-US`?Yg(e):Xg(e)),Qg=()=>`Please enter a valid address`,$g=()=>`请输入有效地址`,e_=((e={},t={})=>(t.locale??D())===`en-US`?Qg(e):$g(e)),t_=()=>`Please select a chain`,n_=()=>`请选择链`,r_=((e={},t={})=>(t.locale??D())===`en-US`?t_(e):n_(e)),i_=()=>`Chains & Tokens`,a_=()=>`链与代币`,o_=((e={},t={})=>(t.locale??D())===`en-US`?i_(e):a_(e)),s_=e=>`${e?.count} chains`,c_=e=>`${e?.count} 条链`,l_=((e,t={})=>(t.locale??D())===`en-US`?s_(e):c_(e)),u_=()=>`Search chain names...`,d_=()=>`搜索链名称...`,f_=((e={},t={})=>(t.locale??D())===`en-US`?u_(e):d_(e)),p_=()=>`Overview`,m_=()=>`总览`,h_=((e={},t={})=>(t.locale??D())===`en-US`?p_(e):m_(e)),g_=e=>`Total chains: ${e?.chains} | Total tokens: ${e?.tokens}`,__=e=>`链总数: ${e?.chains} | 代币总数: ${e?.tokens}`,v_=((e,t={})=>(t.locale??D())===`en-US`?g_(e):__(e)),y_=()=>`Supported payment network`,b_=()=>`支持收款网络`,x_=((e={},t={})=>(t.locale??D())===`en-US`?y_(e):b_(e)),S_=()=>`No chain data`,C_=()=>`暂无链数据`,w_=((e={},t={})=>(t.locale??D())===`en-US`?S_(e):C_(e)),T_=()=>`Add Token`,E_=()=>`添加代币`,D_=((e={},t={})=>(t.locale??D())===`en-US`?T_(e):E_(e)),O_=()=>`Manage supported blockchain networks and tokens, including status and basic parameters.`,k_=()=>`管理支持的区块链网络和代币,维护启用状态与基础参数。`,A_=((e={},t={})=>(t.locale??D())===`en-US`?O_(e):k_(e)),j_=e=>`Chain ${e?.status}`,M_=e=>`链已${e?.status}`,N_=((e,t={})=>(t.locale??D())===`en-US`?j_(e):M_(e)),P_=()=>`enabled`,F_=()=>`启用`,I_=((e={},t={})=>(t.locale??D())===`en-US`?P_(e):F_(e)),L_=()=>`disabled`,R_=()=>`禁用`,z_=((e={},t={})=>(t.locale??D())===`en-US`?L_(e):R_(e)),B_=()=>`Token status updated`,V_=()=>`代币状态已更新`,H_=((e={},t={})=>(t.locale??D())===`en-US`?B_(e):V_(e)),U_=()=>`Token updated successfully`,W_=()=>`代币更新成功`,G_=((e={},t={})=>(t.locale??D())===`en-US`?U_(e):W_(e)),K_=()=>`Token created successfully`,q_=()=>`代币创建成功`,J_=((e={},t={})=>(t.locale??D())===`en-US`?K_(e):q_(e)),Y_=()=>`Search token symbols...`,X_=()=>`搜索代币符号...`,Z_=((e={},t={})=>(t.locale??D())===`en-US`?Y_(e):X_(e)),Q_=()=>`No chain token data`,$_=()=>`暂无链代币数据`,ev=((e={},t={})=>(t.locale??D())===`en-US`?Q_(e):$_(e)),tv=()=>`Token`,nv=()=>`代币`,rv=((e={},t={})=>(t.locale??D())===`en-US`?tv(e):nv(e)),iv=()=>`Edit`,av=()=>`编辑`,ov=((e={},t={})=>(t.locale??D())===`en-US`?iv(e):av(e)),sv=()=>`Delete`,cv=()=>`删除`,lv=((e={},t={})=>(t.locale??D())===`en-US`?sv(e):cv(e)),uv=()=>`Edit Chain Token`,dv=()=>`编辑链代币`,fv=((e={},t={})=>(t.locale??D())===`en-US`?uv(e):dv(e)),pv=()=>`Add Chain Token`,mv=()=>`新增链代币`,hv=((e={},t={})=>(t.locale??D())===`en-US`?pv(e):mv(e)),gv=()=>`Modify chain token configuration.`,_v=()=>`修改链代币配置。`,vv=((e={},t={})=>(t.locale??D())===`en-US`?gv(e):_v(e)),yv=()=>`Add a new chain token configuration.`,bv=()=>`添加新的链代币配置。`,xv=((e={},t={})=>(t.locale??D())===`en-US`?yv(e):bv(e)),Sv=()=>`Token Symbol`,Cv=()=>`代币符号`,wv=((e={},t={})=>(t.locale??D())===`en-US`?Sv(e):Cv(e)),Tv=()=>`Configure available tokens for this chain and maintain contract address, decimals, minimum amount, and enabled status.`,Ev=()=>`为当前链配置可用代币,并维护合约地址、精度、最小金额与启用状态。`,Dv=((e={},t={})=>(t.locale??D())===`en-US`?Tv(e):Ev(e)),Ov=()=>`Contract Address`,kv=()=>`合约地址`,Av=((e={},t={})=>(t.locale??D())===`en-US`?Ov(e):kv(e)),jv=()=>`Decimals`,Mv=()=>`精度`,Nv=((e={},t={})=>(t.locale??D())===`en-US`?jv(e):Mv(e)),Pv=()=>`Minimum Amount`,Fv=()=>`最小金额`,Iv=((e={},t={})=>(t.locale??D())===`en-US`?Pv(e):Fv(e)),Lv=()=>`Create`,Rv=()=>`创建`,zv=((e={},t={})=>(t.locale??D())===`en-US`?Lv(e):Rv(e)),Bv=()=>`Save Changes`,Vv=()=>`保存修改`,Hv=((e={},t={})=>(t.locale??D())===`en-US`?Bv(e):Vv(e)),Uv=()=>`Please select a chain`,Wv=()=>`请选择链`,Gv=((e={},t={})=>(t.locale??D())===`en-US`?Uv(e):Wv(e)),Kv=()=>`Please enter token symbol`,qv=()=>`请输入代币符号`,Jv=((e={},t={})=>(t.locale??D())===`en-US`?Kv(e):qv(e)),Yv=()=>`Please enter valid decimals`,Xv=()=>`请输入有效精度`,Zv=((e={},t={})=>(t.locale??D())===`en-US`?Yv(e):Xv(e)),Qv=()=>`Please enter a valid minimum amount`,$v=()=>`请输入有效最小金额`,ey=((e={},t={})=>(t.locale??D())===`en-US`?Qv(e):$v(e)),ty=()=>`RPC Nodes`,ny=()=>`RPC 节点`,ry=((e={},t={})=>(t.locale??D())===`en-US`?ty(e):ny(e)),iy=e=>`${e?.count} chains`,ay=e=>`${e?.count} 条链`,oy=((e,t={})=>(t.locale??D())===`en-US`?iy(e):ay(e)),sy=()=>`Search chain names or network...`,cy=()=>`搜索链名或 network...`,ly=((e={},t={})=>(t.locale??D())===`en-US`?sy(e):cy(e)),uy=()=>`Overview`,dy=()=>`总览`,fy=((e={},t={})=>(t.locale??D())===`en-US`?uy(e):dy(e)),py=e=>`Total chains: ${e?.chains} | Total nodes: ${e?.nodes}`,my=e=>`链总数: ${e?.chains} | 节点总数: ${e?.nodes}`,hy=((e,t={})=>(t.locale??D())===`en-US`?py(e):my(e)),gy=()=>`Unnamed chain`,_y=()=>`未命名链`,vy=((e={},t={})=>(t.locale??D())===`en-US`?gy(e):_y(e)),yy=e=>`Nodes: ${e?.count}`,by=e=>`节点数: ${e?.count}`,xy=((e,t={})=>(t.locale??D())===`en-US`?yy(e):by(e)),Sy=()=>`No chain data`,Cy=()=>`暂无链数据`,wy=((e={},t={})=>(t.locale??D())===`en-US`?Sy(e):Cy(e)),Ty=()=>`Add Node`,Ey=()=>`新增节点`,Dy=((e={},t={})=>(t.locale??D())===`en-US`?Ty(e):Ey(e)),Oy=()=>`Manage RPC nodes, weights, and health status for each chain.`,ky=()=>`管理各链 RPC 节点、权重与健康状态。`,Ay=((e={},t={})=>(t.locale??D())===`en-US`?Oy(e):ky(e)),jy=e=>`Health check completed, status: ${e?.status}${e?.latency}`,My=e=>`健康检查完成,状态: ${e?.status}${e?.latency}`,Ny=((e,t={})=>(t.locale??D())===`en-US`?jy(e):My(e)),Py=e=>`, latency ${e?.latency}ms`,Fy=e=>`,延迟 ${e?.latency}ms`,Iy=((e,t={})=>(t.locale??D())===`en-US`?Py(e):Fy(e)),Ly=()=>`Confirm`,Ry=()=>`确认`,zy=((e={},t={})=>(t.locale??D())===`en-US`?Ly(e):Ry(e)),By=e=>`Perform “${e?.action}” on RPC node ${e?.url}.`,Vy=e=>`将对 RPC 节点 ${e?.url} 执行“${e?.action}”操作。`,Hy=((e,t={})=>(t.locale??D())===`en-US`?By(e):Vy(e)),Uy=()=>`Confirm RPC Node Action`,Wy=()=>`RPC 节点操作确认`,Gy=((e={},t={})=>(t.locale??D())===`en-US`?Uy(e):Wy(e)),Ky=()=>`Health Status`,qy=()=>`健康状态`,Jy=((e={},t={})=>(t.locale??D())===`en-US`?Ky(e):qy(e)),Yy=()=>`OK`,Xy=()=>`正常`,Zy=((e={},t={})=>(t.locale??D())===`en-US`?Yy(e):Xy(e)),Qy=()=>`Down`,$y=()=>`异常`,eb=((e={},t={})=>(t.locale??D())===`en-US`?Qy(e):$y(e)),tb=()=>`Unknown`,nb=()=>`未知`,rb=((e={},t={})=>(t.locale??D())===`en-US`?tb(e):nb(e)),ib=()=>`Chain Network`,ab=()=>`链网络`,ob=((e={},t={})=>(t.locale??D())===`en-US`?ib(e):ab(e)),sb=()=>`Connection Type`,cb=()=>`连接类型`,lb=((e={},t={})=>(t.locale??D())===`en-US`?sb(e):cb(e)),ub=()=>`Node URL`,db=()=>`节点 URL`,fb=((e={},t={})=>(t.locale??D())===`en-US`?ub(e):db(e)),pb=()=>`Weight`,mb=()=>`权重`,hb=((e={},t={})=>(t.locale??D())===`en-US`?pb(e):mb(e)),gb=()=>`Latest Latency`,_b=()=>`最近延迟`,vb=((e={},t={})=>(t.locale??D())===`en-US`?gb(e):_b(e)),yb=()=>`Last Checked At`,bb=()=>`最近检查时间`,xb=((e={},t={})=>(t.locale??D())===`en-US`?yb(e):bb(e)),Sb=()=>`Health Check`,Cb=()=>`健康检查`,wb=((e={},t={})=>(t.locale??D())===`en-US`?Sb(e):Cb(e)),Tb=()=>`Search chain network or node URL...`,Eb=()=>`搜索链网络或节点 URL...`,Db=((e={},t={})=>(t.locale??D())===`en-US`?Tb(e):Eb(e)),Ob=()=>`No RPC node data`,kb=()=>`暂无 RPC 节点数据`,Ab=((e={},t={})=>(t.locale??D())===`en-US`?Ob(e):kb(e)),jb=()=>`Edit`,Mb=()=>`编辑`,Nb=((e={},t={})=>(t.locale??D())===`en-US`?jb(e):Mb(e)),Pb=()=>`Edit RPC Node`,Fb=()=>`编辑 RPC 节点`,Ib=((e={},t={})=>(t.locale??D())===`en-US`?Pb(e):Fb(e)),Lb=()=>`Add RPC Node`,Rb=()=>`新增 RPC 节点`,zb=((e={},t={})=>(t.locale??D())===`en-US`?Lb(e):Rb(e)),Bb=()=>`Modify RPC node configuration.`,Vb=()=>`修改 RPC 节点配置。`,Hb=((e={},t={})=>(t.locale??D())===`en-US`?Bb(e):Vb(e)),Ub=()=>`Configure a new RPC node.`,Wb=()=>`配置新的 RPC 节点信息。`,Gb=((e={},t={})=>(t.locale??D())===`en-US`?Ub(e):Wb(e)),Kb=()=>`Select type`,qb=()=>`选择类型`,Jb=((e={},t={})=>(t.locale??D())===`en-US`?Kb(e):qb(e)),Yb=()=>`Optional`,Xb=()=>`可选`,Zb=((e={},t={})=>(t.locale??D())===`en-US`?Yb(e):Xb(e)),Qb=()=>`Enable immediately after creation`,$b=()=>`创建后立即启用`,ex=((e={},t={})=>(t.locale??D())===`en-US`?Qb(e):$b(e)),tx=()=>`Disabled nodes will not participate in scheduling.`,nx=()=>`关闭后该节点不会参与调度。`,rx=((e={},t={})=>(t.locale??D())===`en-US`?tx(e):nx(e)),ix=()=>`RPC node updated successfully`,ax=()=>`RPC 节点更新成功`,ox=((e={},t={})=>(t.locale??D())===`en-US`?ix(e):ax(e)),sx=()=>`RPC node created successfully`,cx=()=>`RPC 节点创建成功`,lx=((e={},t={})=>(t.locale??D())===`en-US`?sx(e):cx(e)),ux=()=>`Please enter chain network`,dx=()=>`请输入链网络`,fx=((e={},t={})=>(t.locale??D())===`en-US`?ux(e):dx(e)),px=()=>`Please enter a valid URL`,mx=()=>`请输入合法 URL`,hx=((e={},t={})=>(t.locale??D())===`en-US`?px(e):mx(e)),gx=()=>`Weight must be at least 1`,_x=()=>`权重至少为 1`,vx=((e={},t={})=>(t.locale??D())===`en-US`?gx(e):_x(e)),yx=()=>`All`,bx=()=>`全部`,xx=((e={},t={})=>(t.locale??D())===`en-US`?yx(e):bx(e)),Sx=()=>`Enabled`,Cx=()=>`已启用`,wx=((e={},t={})=>(t.locale??D())===`en-US`?Sx(e):Cx(e)),Tx=()=>`Disabled`,Ex=()=>`已禁用`,Dx=((e={},t={})=>(t.locale??D())===`en-US`?Tx(e):Ex(e)),Ox=()=>`Deleted successfully`,kx=()=>`删除成功`,Ax=((e={},t={})=>(t.locale??D())===`en-US`?Ox(e):kx(e)),jx=()=>`Failed to fetch secret key`,Mx=()=>`获取密钥失败`,Nx=((e={},t={})=>(t.locale??D())===`en-US`?jx(e):Mx(e)),Px=()=>`Missing API Key ID`,Fx=()=>`缺少 API Key ID`,Ix=((e={},t={})=>(t.locale??D())===`en-US`?Px(e):Fx(e)),Lx=()=>`No secret key available to copy`,Rx=()=>`暂无密钥可复制`,zx=((e={},t={})=>(t.locale??D())===`en-US`?Lx(e):Rx(e)),Bx=()=>`Secret key copied`,Vx=()=>`密钥已复制`,Hx=((e={},t={})=>(t.locale??D())===`en-US`?Bx(e):Vx(e)),Ux=()=>`Secret key rotated`,Wx=()=>`密钥已轮换`,Gx=((e={},t={})=>(t.locale??D())===`en-US`?Ux(e):Wx(e)),Kx=()=>`Create Key`,qx=()=>`创建 Key`,Jx=((e={},t={})=>(t.locale??D())===`en-US`?Kx(e):qx(e)),Yx=()=>`Manage payment keys, access restrictions, and callback URL settings.`,Xx=()=>`管理支付 Key、访问限制与通知地址配置。`,Zx=((e={},t={})=>(t.locale??D())===`en-US`?Yx(e):Xx(e)),Qx=()=>`Payment Management`,$x=()=>`支付管理`,eS=((e={},t={})=>(t.locale??D())===`en-US`?Qx(e):$x(e)),tS=()=>`Search PID, name, or callback URL...`,nS=()=>`搜索 PID、名称或通知地址...`,rS=((e={},t={})=>(t.locale??D())===`en-US`?tS(e):nS(e)),iS=()=>`Ascending`,aS=()=>`Ascending`,oS=((e={},t={})=>(t.locale??D())===`en-US`?iS(e):aS(e)),sS=()=>`Descending`,cS=()=>`Descending`,lS=((e={},t={})=>(t.locale??D())===`en-US`?sS(e):cS(e)),uS=()=>`Delete`,dS=()=>`删除`,fS=((e={},t={})=>(t.locale??D())===`en-US`?uS(e):dS(e)),pS=()=>`Confirm`,mS=()=>`确认`,hS=((e={},t={})=>(t.locale??D())===`en-US`?pS(e):mS(e)),gS=e=>`Perform “${e?.action}” on ${e?.target}.`,_S=e=>`将对 ${e?.target} 执行“${e?.action}”操作。`,vS=((e,t={})=>(t.locale??D())===`en-US`?gS(e):_S(e)),yS=()=>`Delete API Key`,bS=()=>`删除 API Key`,xS=((e={},t={})=>(t.locale??D())===`en-US`?yS(e):bS(e)),SS=()=>`Confirm API Key Action`,CS=()=>`API Key 操作确认`,wS=((e={},t={})=>(t.locale??D())===`en-US`?SS(e):CS(e)),TS=()=>`API Key Stats`,ES=()=>`API Key 统计`,DS=((e={},t={})=>(t.locale??D())===`en-US`?TS(e):ES(e)),OS=()=>`Call Count`,kS=()=>`调用次数`,AS=((e={},t={})=>(t.locale??D())===`en-US`?OS(e):kS(e)),jS=()=>`Last Used`,MS=()=>`最近使用`,NS=((e={},t={})=>(t.locale??D())===`en-US`?jS(e):MS(e)),PS=()=>`No records`,FS=()=>`暂无记录`,IS=((e={},t={})=>(t.locale??D())===`en-US`?PS(e):FS(e)),LS=()=>`No API Keys`,RS=()=>`暂无 API Key`,zS=((e={},t={})=>(t.locale??D())===`en-US`?LS(e):RS(e)),BS=()=>`Loading...`,VS=()=>`加载中...`,HS=((e={},t={})=>(t.locale??D())===`en-US`?BS(e):VS(e)),US=()=>`Callback URL`,WS=()=>`回调地址`,GS=((e={},t={})=>(t.locale??D())===`en-US`?US(e):WS(e)),KS=()=>`IP Whitelist`,qS=()=>`IP 白名单`,JS=((e={},t={})=>(t.locale??D())===`en-US`?KS(e):qS(e)),YS=()=>`Secret`,XS=()=>`密钥`,ZS=((e={},t={})=>(t.locale??D())===`en-US`?YS(e):XS(e)),QS=()=>`Edit`,$S=()=>`编辑`,eC=((e={},t={})=>(t.locale??D())===`en-US`?QS(e):$S(e)),tC=()=>`Rotate Secret`,nC=()=>`轮换密钥`,rC=((e={},t={})=>(t.locale??D())===`en-US`?tC(e):nC(e)),iC=()=>`Name`,aC=()=>`名称`,oC=((e={},t={})=>(t.locale??D())===`en-US`?iC(e):aC(e)),sC=()=>`My App`,cC=()=>`我的应用`,lC=((e={},t={})=>(t.locale??D())===`en-US`?sC(e):cC(e)),uC=()=>`Edit API Key`,dC=()=>`编辑 API Key`,fC=((e={},t={})=>(t.locale??D())===`en-US`?uC(e):dC(e)),pC=()=>`Create API Key`,mC=()=>`创建 API Key`,hC=((e={},t={})=>(t.locale??D())===`en-US`?pC(e):mC(e)),gC=()=>`Modify API Key configuration.`,_C=()=>`修改 API Key 配置。`,vC=((e={},t={})=>(t.locale??D())===`en-US`?gC(e):_C(e)),yC=()=>`Create a new API secret key.`,bC=()=>`创建新的 API 密钥。`,xC=((e={},t={})=>(t.locale??D())===`en-US`?yC(e):bC(e)),SC=()=>`IP Whitelist (Optional)`,CC=()=>`IP 白名单(选填)`,wC=((e={},t={})=>(t.locale??D())===`en-US`?SC(e):CC(e)),TC=()=>`⚠️ Secret Key is shown only once, please save it immediately`,EC=()=>`⚠️ Secret Key,仅展示一次,请立即保存`,DC=((e={},t={})=>(t.locale??D())===`en-US`?TC(e):EC(e)),OC=()=>`Close`,kC=()=>`关闭`,AC=((e={},t={})=>(t.locale??D())===`en-US`?OC(e):kC(e)),jC=()=>`Save Changes`,MC=()=>`保存修改`,NC=((e={},t={})=>(t.locale??D())===`en-US`?jC(e):MC(e)),PC=()=>`Create Key`,FC=()=>`创建 Key`,IC=((e={},t={})=>(t.locale??D())===`en-US`?PC(e):FC(e)),LC=()=>`API Key updated successfully`,RC=()=>`API Key 更新成功`,zC=((e={},t={})=>(t.locale??D())===`en-US`?LC(e):RC(e)),BC=()=>`API Key created successfully`,VC=()=>`API Key 创建成功`,HC=((e={},t={})=>(t.locale??D())===`en-US`?BC(e):VC(e)),UC=()=>`Please enter a name`,WC=()=>`请输入名称`,GC=((e={},t={})=>(t.locale??D())===`en-US`?UC(e):WC(e)),KC=()=>`Please enter a valid callback URL`,qC=()=>`请输入正确回调地址`,JC=((e={},t={})=>(t.locale??D())===`en-US`?KC(e):qC(e)),YC=e=>`${e?.action} succeeded`,XC=e=>`${e?.action}成功`,ZC=((e,t={})=>(t.locale??D())===`en-US`?YC(e):XC(e)),QC=()=>`Please enter your current password`,$C=()=>`请输入当前密码`,ew=((e={},t={})=>(t.locale??D())===`en-US`?QC(e):$C(e)),tw=()=>`New password must be at least 8 characters`,nw=()=>`新密码至少 8 位`,rw=((e={},t={})=>(t.locale??D())===`en-US`?tw(e):nw(e)),iw=()=>`Please confirm your new password`,aw=()=>`请确认新密码`,ow=((e={},t={})=>(t.locale??D())===`en-US`?iw(e):aw(e)),sw=()=>`The two passwords do not match`,cw=()=>`两次输入的密码不一致`,lw=((e={},t={})=>(t.locale??D())===`en-US`?sw(e):cw(e)),uw=()=>`Password updated successfully`,dw=()=>`密码修改成功`,fw=((e={},t={})=>(t.locale??D())===`en-US`?uw(e):dw(e)),pw=()=>`Current password`,mw=()=>`当前密码`,hw=((e={},t={})=>(t.locale??D())===`en-US`?pw(e):mw(e)),gw=()=>`Enter current password`,_w=()=>`输入当前密码`,vw=((e={},t={})=>(t.locale??D())===`en-US`?gw(e):_w(e)),yw=()=>`New password`,bw=()=>`新密码`,xw=((e={},t={})=>(t.locale??D())===`en-US`?yw(e):bw(e)),Sw=()=>`At least 8 characters`,Cw=()=>`至少 8 位`,ww=((e={},t={})=>(t.locale??D())===`en-US`?Sw(e):Cw(e)),Tw=()=>`Confirm new password`,Ew=()=>`确认新密码`,Dw=((e={},t={})=>(t.locale??D())===`en-US`?Tw(e):Ew(e)),Ow=()=>`Enter new password again`,kw=()=>`再次输入新密码`,Aw=((e={},t={})=>(t.locale??D())===`en-US`?Ow(e):kw(e)),jw=()=>`Saving…`,Mw=()=>`保存中…`,Nw=((e={},t={})=>(t.locale??D())===`en-US`?jw(e):Mw(e)),Pw=()=>`Save changes`,Fw=()=>`保存修改`,Iw=((e={},t={})=>(t.locale??D())===`en-US`?Pw(e):Fw(e)),Lw=()=>`System Settings`,Rw=()=>`系统配置`,zw=((e={},t={})=>(t.locale??D())===`en-US`?Lw(e):Rw(e)),Bw=()=>`Manage checkout basics, Telegram notifications, exchange rate strategy, and payment parameters in one place.`,Vw=()=>`集中管理收银台基础配置、Telegram 通知、汇率策略与收款参数。`,Hw=((e={},t={})=>(t.locale??D())===`en-US`?Bw(e):Vw(e)),Uw=()=>`Configure checkout display information and success page copy.`,Ww=()=>`配置收银台展示信息与支付成功页文案。`,Gw=((e={},t={})=>(t.locale??D())===`en-US`?Uw(e):Ww(e)),Kw=()=>`Please enter the checkout name`,qw=()=>`请输入收银台名称`,Jw=((e={},t={})=>(t.locale??D())===`en-US`?Kw(e):qw(e)),Yw=()=>`Please enter a valid logo URL`,Xw=()=>`请输入合法 Logo 地址`,Zw=((e={},t={})=>(t.locale??D())===`en-US`?Yw(e):Xw(e)),Qw=()=>`Please enter the site title`,$w=()=>`请输入网站标题`,eT=((e={},t={})=>(t.locale??D())===`en-US`?Qw(e):$w(e)),tT=()=>`Please enter the success page copy`,nT=()=>`请输入成功页文案`,rT=((e={},t={})=>(t.locale??D())===`en-US`?tT(e):nT(e)),iT=()=>`Please enter a valid support URL`,aT=()=>`请输入合法客服链接`,oT=((e={},t={})=>(t.locale??D())===`en-US`?iT(e):aT(e)),sT=()=>`Base settings reset to defaults`,cT=()=>`基础配置已重置为默认值`,lT=((e={},t={})=>(t.locale??D())===`en-US`?sT(e):cT(e)),uT=()=>`Base settings saved`,dT=()=>`基础配置已保存`,fT=((e={},t={})=>(t.locale??D())===`en-US`?uT(e):dT(e)),pT=()=>`Checkout name`,mT=()=>`收银台名称`,hT=((e={},t={})=>(t.locale??D())===`en-US`?pT(e):mT(e)),gT=()=>`Logo URL`,_T=()=>`Logo URL`,vT=((e={},t={})=>(t.locale??D())===`en-US`?gT(e):_T(e)),yT=()=>`Site title`,bT=()=>`网站标题`,xT=((e={},t={})=>(t.locale??D())===`en-US`?yT(e):bT(e)),ST=()=>`Success page copy`,CT=()=>`支付成功页文案`,wT=((e={},t={})=>(t.locale??D())===`en-US`?ST(e):CT(e)),TT=()=>`Support URL`,ET=()=>`客服链接`,DT=((e={},t={})=>(t.locale??D())===`en-US`?TT(e):ET(e)),OT=()=>`Save base settings`,kT=()=>`保存基础配置`,AT=((e={},t={})=>(t.locale??D())===`en-US`?OT(e):kT(e)),jT=()=>`Reset to defaults`,MT=()=>`重置为默认值`,NT=((e={},t={})=>(t.locale??D())===`en-US`?jT(e):MT(e)),PT=()=>`Used for payment notifications and exception alerts.`,FT=()=>`用于收款通知与异常提醒推送。`,IT=((e={},t={})=>(t.locale??D())===`en-US`?PT(e):FT(e)),LT=()=>`Please enter the Bot Token`,RT=()=>`请输入 Bot Token`,zT=((e={},t={})=>(t.locale??D())===`en-US`?LT(e):RT(e)),BT=()=>`Please enter the Chat ID`,VT=()=>`请输入 Chat ID`,HT=((e={},t={})=>(t.locale??D())===`en-US`?BT(e):VT(e)),UT=()=>`Telegram settings saved`,WT=()=>`Telegram 配置已保存`,GT=((e={},t={})=>(t.locale??D())===`en-US`?UT(e):WT(e)),KT=()=>`Bot Token`,qT=()=>`Bot Token`,JT=((e={},t={})=>(t.locale??D())===`en-US`?KT(e):qT(e)),YT=()=>`Chat ID`,XT=()=>`Chat ID`,ZT=((e={},t={})=>(t.locale??D())===`en-US`?YT(e):XT(e)),QT=()=>`Payment notification switch`,$T=()=>`收款通知开关`,eE=((e={},t={})=>(t.locale??D())===`en-US`?QT(e):$T(e)),tE=()=>`Abnormal notification switch`,nE=()=>`异常通知开关`,rE=((e={},t={})=>(t.locale??D())===`en-US`?tE(e):nE(e)),iE=()=>`Save Telegram settings`,aE=()=>`保存 Telegram 配置`,oE=((e={},t={})=>(t.locale??D())===`en-US`?iE(e):aE(e)),sE=()=>`Reserve strategy parameters for future real exchange rate API integration.`,cE=()=>`为后续真实汇率接口接入预留策略参数。`,lE=((e={},t={})=>(t.locale??D())===`en-US`?sE(e):cE(e)),uE=()=>`Please enter a valid API URL`,dE=()=>`请输入合法 API 地址`,fE=((e={},t={})=>(t.locale??D())===`en-US`?uE(e):dE(e)),pE=()=>`Please enter a valid exchange rate`,mE=()=>`请输入有效汇率`,hE=((e={},t={})=>(t.locale??D())===`en-US`?pE(e):mE(e)),gE=()=>`Rate settings saved`,_E=()=>`汇率配置已保存`,vE=((e={},t={})=>(t.locale??D())===`en-US`?gE(e):_E(e)),yE=()=>`Exchange rate API URL`,bE=()=>`汇率 API 地址`,xE=((e={},t={})=>(t.locale??D())===`en-US`?yE(e):bE(e)),SE=()=>`Forced USDT rate`,CE=()=>`强制 USDT 汇率`,wE=((e={},t={})=>(t.locale??D())===`en-US`?SE(e):CE(e)),TE=()=>`Save rate settings`,EE=()=>`保存汇率配置`,DE=((e={},t={})=>(t.locale??D())===`en-US`?TE(e):EE(e)),OE=()=>`Configure the default payment token, fiat currency, and network.`,kE=()=>`配置默认收款代币、法币与网络。`,AE=((e={},t={})=>(t.locale??D())===`en-US`?OE(e):kE(e)),jE=()=>`Payment settings saved`,ME=()=>`收款配置已保存`,NE=((e={},t={})=>(t.locale??D())===`en-US`?jE(e):ME(e)),PE=()=>`Save payment settings`,FE=()=>`保存收款配置`,IE=((e={},t={})=>(t.locale??D())===`en-US`?PE(e):FE(e)),LE=()=>`Appearance`,RE=()=>`外观`,zE=((e={},t={})=>(t.locale??D())===`en-US`?LE(e):RE(e)),BE=()=>`Customize the app appearance and switch between light and dark themes.`,VE=()=>`自定义应用外观,可在浅色与深色主题之间切换。`,HE=((e={},t={})=>(t.locale??D())===`en-US`?BE(e):VE(e)),UE=()=>`Font`,WE=()=>`字体`,GE=((e={},t={})=>(t.locale??D())===`en-US`?UE(e):WE(e)),KE=()=>`Set the font you want to use in the dashboard.`,qE=()=>`设置你希望在控制台中使用的字体。`,JE=((e={},t={})=>(t.locale??D())===`en-US`?KE(e):qE(e)),YE=()=>`Theme`,XE=()=>`主题`,ZE=((e={},t={})=>(t.locale??D())===`en-US`?YE(e):XE(e)),QE=()=>`Select the theme for the dashboard.`,$E=()=>`选择控制台的主题。`,eD=((e={},t={})=>(t.locale??D())===`en-US`?QE(e):$E(e)),tD=()=>`Update preferences`,nD=()=>`更新偏好设置`,rD=((e={},t={})=>(t.locale??D())===`en-US`?tD(e):nD(e)),iD=()=>`Display`,aD=()=>`显示`,oD=((e={},t={})=>(t.locale??D())===`en-US`?iD(e):aD(e)),sD=()=>`Turn items on or off to control what is displayed in the app.`,cD=()=>`开关各项内容,控制应用中展示的信息。`,lD=((e={},t={})=>(t.locale??D())===`en-US`?sD(e):cD(e)),uD=()=>`Recents`,dD=()=>`最近项目`,fD=((e={},t={})=>(t.locale??D())===`en-US`?uD(e):dD(e)),pD=()=>`Home`,mD=()=>`主页`,hD=((e={},t={})=>(t.locale??D())===`en-US`?pD(e):mD(e)),gD=()=>`Applications`,_D=()=>`应用`,vD=((e={},t={})=>(t.locale??D())===`en-US`?gD(e):_D(e)),yD=()=>`Desktop`,bD=()=>`桌面`,xD=((e={},t={})=>(t.locale??D())===`en-US`?yD(e):bD(e)),SD=()=>`Downloads`,CD=()=>`下载`,wD=((e={},t={})=>(t.locale??D())===`en-US`?SD(e):CD(e)),TD=()=>`Documents`,ED=()=>`文档`,DD=((e={},t={})=>(t.locale??D())===`en-US`?TD(e):ED(e)),OD=()=>`You have to select at least one item.`,kD=()=>`至少选择一个项目。`,AD=((e={},t={})=>(t.locale??D())===`en-US`?OD(e):kD(e)),jD=()=>`Sidebar`,MD=()=>`侧边栏`,ND=((e={},t={})=>(t.locale??D())===`en-US`?jD(e):MD(e)),PD=()=>`Select the items you want to display in the sidebar.`,FD=()=>`选择你希望在侧边栏中显示的项目。`,ID=((e={},t={})=>(t.locale??D())===`en-US`?PD(e):FD(e)),LD=()=>`Update display`,RD=()=>`更新显示设置`,zD=((e={},t={})=>(t.locale??D())===`en-US`?LD(e):RD(e)),BD=()=>`Notifications`,VD=()=>`通知`,HD=((e={},t={})=>(t.locale??D())===`en-US`?BD(e):VD(e)),UD=()=>`Configure how you receive notifications.`,WD=()=>`配置你接收通知的方式。`,GD=((e={},t={})=>(t.locale??D())===`en-US`?UD(e):WD(e)),KD=()=>`Please select a notification type.`,qD=()=>`请选择通知类型。`,JD=((e={},t={})=>(t.locale??D())===`en-US`?KD(e):qD(e)),YD=()=>`Notify me about...`,XD=()=>`通知我关于……`,ZD=((e={},t={})=>(t.locale??D())===`en-US`?YD(e):XD(e)),QD=()=>`All new messages`,$D=()=>`所有新消息`,eO=((e={},t={})=>(t.locale??D())===`en-US`?QD(e):$D(e)),tO=()=>`Direct messages and mentions`,nO=()=>`私信和提及`,rO=((e={},t={})=>(t.locale??D())===`en-US`?tO(e):nO(e)),iO=()=>`Nothing`,aO=()=>`不接收通知`,oO=((e={},t={})=>(t.locale??D())===`en-US`?iO(e):aO(e)),sO=()=>`Email Notifications`,cO=()=>`邮件通知`,lO=((e={},t={})=>(t.locale??D())===`en-US`?sO(e):cO(e)),uO=()=>`Communication emails`,dO=()=>`通信邮件`,fO=((e={},t={})=>(t.locale??D())===`en-US`?uO(e):dO(e)),pO=()=>`Receive emails about your account activity.`,mO=()=>`接收与你账户活动相关的邮件。`,hO=((e={},t={})=>(t.locale??D())===`en-US`?pO(e):mO(e)),gO=()=>`Marketing emails`,_O=()=>`营销邮件`,vO=((e={},t={})=>(t.locale??D())===`en-US`?gO(e):_O(e)),yO=()=>`Receive emails about new products, features, and more.`,bO=()=>`接收有关新产品、新功能等内容的邮件。`,xO=((e={},t={})=>(t.locale??D())===`en-US`?yO(e):bO(e)),SO=()=>`Social emails`,CO=()=>`社交邮件`,wO=((e={},t={})=>(t.locale??D())===`en-US`?SO(e):CO(e)),TO=()=>`Receive emails for friend requests, follows, and more.`,EO=()=>`接收好友请求、关注等社交邮件。`,DO=((e={},t={})=>(t.locale??D())===`en-US`?TO(e):EO(e)),OO=()=>`Security emails`,kO=()=>`安全邮件`,AO=((e={},t={})=>(t.locale??D())===`en-US`?OO(e):kO(e)),jO=()=>`Receive emails about your account activity and security.`,MO=()=>`接收与你账户活动和安全相关的邮件。`,NO=((e={},t={})=>(t.locale??D())===`en-US`?jO(e):MO(e)),PO=()=>`Use different settings for my mobile devices`,FO=()=>`我的移动设备使用不同的通知设置`,IO=((e={},t={})=>(t.locale??D())===`en-US`?PO(e):FO(e)),LO=()=>`You can manage your mobile notifications in the`,RO=()=>`你可以在`,zO=((e={},t={})=>(t.locale??D())===`en-US`?LO(e):RO(e)),BO=()=>`mobile settings`,VO=()=>`移动端设置`,HO=((e={},t={})=>(t.locale??D())===`en-US`?BO(e):VO(e)),UO=()=>`page.`,WO=()=>`页面中管理移动通知。`,GO=((e={},t={})=>(t.locale??D())===`en-US`?UO(e):WO(e)),KO=()=>`Update notifications`,qO=()=>`更新通知设置`,JO=((e={},t={})=>(t.locale??D())===`en-US`?KO(e):qO(e)),YO=()=>`Select a settings page`,XO=()=>`选择配置项`,ZO=((e={},t={})=>(t.locale??D())===`en-US`?YO(e):XO(e)),QO=()=>`Saved successfully`,$O=()=>`保存成功`,ek=((e={},t={})=>(t.locale??D())===`en-US`?QO(e):$O(e)),tk=()=>`Access Forbidden`,nk=()=>`禁止访问`,rk=((e={},t={})=>(t.locale??D())===`en-US`?tk(e):nk(e)),ik=()=>`You do not have permission to access this resource.`,ak=()=>`你没有访问此资源所需的权限。`,ok=((e={},t={})=>(t.locale??D())===`en-US`?ik(e):ak(e)),sk=()=>`Please contact your administrator for access.`,ck=()=>`请联系管理员获取访问权限。`,lk=((e={},t={})=>(t.locale??D())===`en-US`?sk(e):ck(e)),uk=()=>`Website is under maintenance!`,dk=()=>`网站维护中!`,fk=((e={},t={})=>(t.locale??D())===`en-US`?uk(e):dk(e)),pk=()=>`The site is not available at the moment.`,mk=()=>`站点当前暂不可用。`,hk=((e={},t={})=>(t.locale??D())===`en-US`?pk(e):mk(e)),gk=()=>`We will be back online shortly.`,_k=()=>`我们会尽快恢复服务。`,vk=((e={},t={})=>(t.locale??D())===`en-US`?gk(e):_k(e)),yk=()=>`Unauthorized Access`,bk=()=>`未授权访问`,xk=((e={},t={})=>(t.locale??D())===`en-US`?yk(e):bk(e)),Sk=()=>`Please log in with the appropriate credentials.`,Ck=()=>`请使用正确的凭证登录。`,wk=((e={},t={})=>(t.locale??D())===`en-US`?Sk(e):Ck(e)),Tk=()=>`Once signed in, you can access this resource.`,Ek=()=>`登录后即可访问此资源。`,Dk=((e={},t={})=>(t.locale??D())===`en-US`?Tk(e):Ek(e)),Ok=()=>`User`,kk=()=>`用户`,Ak=((e={},t={})=>(t.locale??D())===`en-US`?Ok(e):kk(e)),jk=()=>`Font`,Mk=()=>`字体`,Nk=((e={},t={})=>(t.locale??D())===`en-US`?jk(e):Mk(e));export{zE as $,zd as $a,Rn as $c,Bm as $i,D as $l,zb as $n,zc as $o,z_ as $r,Ra as $s,zC as $t,eO as A,tp as Aa,$r as Ac,tg as Ai,Qe as Al,eS as An,eu as Ao,ey as Ar,es as As,eT as At,wD as B,Tf as Ba,Cr as Bc,Th as Bi,Se as Bl,wx as Bn,wl as Bo,wv as Br,wo as Bs,ww as Bt,xO as C,Sp as Ca,bi as Cc,$ as Ci,yt as Cl,xS as Cn,xu as Co,xy as Cr,xs as Cs,xT as Ct,lO as D,up as Da,ci as Dc,ug as Di,st as Dl,lS as Dn,lu as Do,ly as Dr,ls as Ds,lT as Dt,fO as E,pp as Ea,di as Ec,pg as Ei,ut as El,fS as En,fu as Eo,fy as Er,fs as Es,fT as Et,zD as F,Bf as Fa,Rr as Fc,Bh as Fi,Le as Fl,zx as Fn,zl as Fo,zv as Fr,zo as Fs,zw as Ft,lD as G,uf as Ga,cr as Gc,uh as Gi,se as Gl,lx as Gn,ll as Go,lv as Gr,co as Gs,lw as Gt,vD as H,yf as Ha,_r as Hc,yh as Hi,ge as Hl,vx as Hn,vl as Ho,vv as Hr,vo as Hs,vw as Ht,ID as I,Lf as Ia,Fr as Ic,Lh as Ii,Pe as Il,Ix as In,Il as Io,Iv as Ir,Io as Is,Iw as It,eD as J,ef as Ja,$n as Jc,th as Ji,Y as Jl,ex as Jn,el as Jo,ev as Jr,$a as Js,ew as Jt,oD as K,sf as Ka,ar as Kc,sh as Ki,ie as Kl,ox as Kn,ol as Ko,ov as Kr,ao as Ks,ow as Kt,ND as L,Pf as La,Mr as Lc,Ph as Li,je as Ll,Nx as Ln,Nl as Lo,Nv as Lr,No as Ls,Nw as Lt,JD as M,Yf as Ma,qr as Mc,Yh as Mi,Ke as Ml,Jx as Mn,Jl as Mo,Jv as Mr,Jo as Ms,Jw as Mt,GD as N,Kf as Na,Wr as Nc,Kh as Ni,Ue as Nl,Gx as Nn,Gl as No,Gv as Nr,Go as Ns,Gw as Nt,oO as O,sp as Oa,ai as Oc,sg as Oi,it as Ol,oS as On,ou as Oo,oy as Or,os as Os,oT as Ot,HD as P,Uf as Pa,Vr as Pc,Uh as Pi,Be as Pl,Hx as Pn,Hl as Po,Hv as Pr,Ho as Ps,Hw as Pt,HE as Q,Hd as Qa,Vn as Qc,Um as Qi,te as Ql,Hb as Qn,Hc as Qo,H_ as Qr,Va as Qs,HC as Qt,AD as R,jf as Ra,kr as Rc,jh as Ri,Oe as Rl,Ax as Rn,Al as Ro,Av as Rr,Ao as Rs,Aw as Rt,wO as S,Tp as Sa,Ci as Sc,wg as Si,St as Sl,wS as Sn,wu as So,wy as Sr,ws as Ss,wT as St,hO as T,gp as Ta,mi as Tc,gg as Ti,pt as Tl,hS as Tn,hu as To,hy as Tr,hs as Ts,hT as Tt,hD as U,gf as Ua,mr as Uc,gh as Ui,pe as Ul,hx as Un,hl as Uo,hv as Ur,ho as Us,hw as Ut,xD as V,Sf as Va,br as Vc,Sh as Vi,ye as Vl,xx as Vn,xl as Vo,xv as Vr,xo as Vs,xw as Vt,fD as W,pf as Wa,dr as Wc,ph as Wi,ue as Wl,fx as Wn,fl as Wo,fv as Wr,fo as Ws,fw as Wt,JE as X,Jd as Xa,qn as Xc,Ym as Xi,U as Xl,Jb as Xn,Jc as Xo,J_ as Xr,qa as Xs,JC as Xt,ZE as Y,Zd as Ya,Xn as Yc,Qm as Yi,K as Yl,Zb as Yn,Zc as Yo,Z_ as Yr,Xa as Ys,ZC as Yt,GE as Z,Gd as Za,Wn as Zc,Km as Zi,B as Zl,Gb as Zn,Gc as Zo,G_ as Zr,Wa as Zs,GC as Zt,zO as _,Bp as _a,Ri as _c,zg as _i,Lt as _l,zS as _n,zu as _o,zy as _r,zs as _s,zT as _t,xk as a,Sm as aa,ba as ac,x_ as ai,bn as al,xC as an,xd as ao,xb as ar,xc as as,xE as at,s as au,AO as b,jp as ba,ki as bc,Ag as bi,Ot as bl,AS as bn,Au as bo,Ay as br,As as bs,AT as bt,fk as c,pm as ca,da as cc,f_ as ci,dn as cl,fC as cn,fd as co,fb as cr,fc as cs,fE as ct,rk as d,im as da,na as dc,r_ as di,tn as dl,rC as dn,rd as do,rb as dr,rc as ds,rE as dt,Lm as ea,Fa as ec,I_ as ei,Fn as el,IC as en,Id as eo,Ib as er,Ic as es,IE as et,g as eu,ek as f,tm as fa,$i as fc,e_ as fi,Qt as fl,eC as fn,ed as fo,eb as fr,ec as fs,eE as ft,HO as g,Up as ga,Vi as gc,Hg as gi,Bt as gl,HS as gn,Hu as go,Hy as gr,Hs as gs,HT as gt,GO as h,Kp as ha,Wi as hc,Gg as hi,Ut as hl,GS as hn,Gu as ho,Gy as hr,Gs as hs,GT as ht,wk as i,Tm as ia,Ca as ic,w_ as ii,Cn as il,wC as in,wd as io,wb as ir,wc as is,wE as it,o as iu,ZD as j,Qf as ja,Xr as jc,Qh as ji,Ye as jl,Zx as jn,Zl as jo,Zv as jr,Zo as js,Zw as jt,rO as k,ip as ka,ni as kc,ig as ki,tt as kl,rS as kn,ru as ko,ry as kr,rs as ks,rT as kt,lk as l,um as la,ca as lc,l_ as li,cn as ll,lC as ln,ld as lo,lb as lr,lc as ls,lE as lt,JO as m,Yp as ma,qi as mc,Jg as mi,Kt as ml,JS as mn,Ju as mo,Jy as mr,Js as ms,JT as mt,Ak as n,jm as na,ka as nc,A_ as ni,kn as nl,AC as nn,Ad as no,Ab as nr,Ac as ns,AE as nt,p as nu,vk as o,ym as oa,_a as oc,v_ as oi,_n as ol,vC as on,vd as oo,vb as or,vc as os,vE as ot,l as ou,ZO as p,Qp as pa,Xi as pc,Zg as pi,Yt as pl,ZS as pn,Zu as po,Zy as pr,Zs as ps,ZT as pt,rD as q,rf as qa,nr as qc,ih as qi,Q as ql,rx as qn,rl as qo,rv as qr,no as qs,rw as qt,Dk as r,Om as ra,Ea as rc,D_ as ri,En as rl,DC as rn,Dd as ro,Db as rr,Dc as rs,DE as rt,d as ru,hk as s,gm as sa,ma as sc,h_ as si,mn as sl,hC as sn,hd as so,hb as sr,hc as ss,hE as st,Nk as t,Pm as ta,Ma as tc,N_ as ti,Mn as tl,NC as tn,Nd as to,Nb as tr,Nc as ts,NE as tt,A as tu,ok as u,sm as ua,aa as uc,o_ as ui,an as ul,oC as un,od as uo,ob as ur,oc as us,oE as ut,IO as v,Lp as va,Fi as vc,Ig as vi,Pt as vl,IS as vn,Iu as vo,Iy as vr,Is as vs,IT as vt,vO as w,yp as wa,_i as wc,yg as wi,gt as wl,vS as wn,vu as wo,vy as wr,vs as ws,vT as wt,DO as x,Op as xa,Ei as xc,Dg as xi,Tt as xl,DS as xn,Du as xo,Dy as xr,Ds as xs,DT as xt,NO as y,Pp as ya,Mi as yc,Ng as yi,jt as yl,NS as yn,Nu as yo,Ny as yr,Ns as ys,NT as yt,DD as z,Of as za,Er as zc,Oh as zi,Te as zl,Dx as zn,Dl as zo,Dv as zr,Do as zs,Dw as zt}; \ No newline at end of file diff --git a/src/www/assets/not-found-error-toRsO1Fi.js b/src/www/assets/not-found-error-toRsO1Fi.js new file mode 100644 index 0000000..d66e54e --- /dev/null +++ b/src/www/assets/not-found-error-toRsO1Fi.js @@ -0,0 +1 @@ +import{cc as e,lc as t,nu as n,oc as r,sc as i}from"./messages-BovT1T-w.js";import{t as a}from"./useRouter-D03zSgJO.js";import{t as o}from"./useNavigate-Dg8CkCoa.js";import{t as s}from"./button-DJA4fnJ8.js";var c=n();function l(){let n=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:()=>n({to:`/dashboard`}),children:e()})]})]})})}export{l as t}; \ No newline at end of file diff --git a/src/www/assets/notifications-DfNeewuy.js b/src/www/assets/notifications-DfNeewuy.js new file mode 100644 index 0000000..1cba7cf --- /dev/null +++ b/src/www/assets/notifications-DfNeewuy.js @@ -0,0 +1 @@ +import{A as e,C as t,D as n,E as r,M as i,N as a,O as o,P as s,S as c,T as l,_ as u,b as d,g as f,h as p,j as m,k as h,m as g,nu as _,v,w as y,x as b,y as x}from"./messages-BovT1T-w.js";import{t as S}from"./link-CA4H4hTz.js";import{t as C}from"./button-DJA4fnJ8.js";import{t as w}from"./checkbox-B_Isethe.js";import{t as T}from"./switch-R6BNZUH1.js";import{n as E,t as D}from"./radio-group-DXVwPYJH.js";import{a as O,r as k,s as A}from"./zod-Cymc5bS-.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-DdHiBYMe.js";import{t as B}from"./page-header-BBJ9dE3-.js";import{t as V}from"./show-submitted-data-l0RlCwTX.js";var H=_(),U=A({type:k([`all`,`mentions`,`none`],{error:e=>e.input===void 0?i():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 i=P({resolver:M(U),defaultValues:W});return(0,H.jsx)(z,{...i,children:(0,H.jsxs)(`form`,{className:`space-y-8`,onSubmit:i.handleSubmit(e=>V(e)),children:[(0,H.jsx)(N,{control:i.control,name:`type`,render:({field:t})=>(0,H.jsxs)(j,{className:`relative space-y-3`,children:[(0,H.jsx)(I,{children:m()}),(0,H.jsx)(F,{children:(0,H.jsxs)(D,{className:`flex flex-col gap-2`,defaultValue:t.value,onValueChange:t.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:e()})]}),(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:o()})]})]})}),(0,H.jsx)(R,{})]})}),(0,H.jsxs)(`div`,{className:`relative`,children:[(0,H.jsx)(`h3`,{className:`mb-4 font-medium text-lg`,children:n()}),(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsx)(N,{control:i.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:r()}),(0,H.jsx)(L,{children:l()})]}),(0,H.jsx)(F,{children:(0,H.jsx)(T,{checked:e.value,onCheckedChange:e.onChange})})]})}),(0,H.jsx)(N,{control:i.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:y()}),(0,H.jsx)(L,{children:t()})]}),(0,H.jsx)(F,{children:(0,H.jsx)(T,{checked:e.value,onCheckedChange:e.onChange})})]})}),(0,H.jsx)(N,{control:i.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:c()}),(0,H.jsx)(L,{children:b()})]}),(0,H.jsx)(F,{children:(0,H.jsx)(T,{checked:e.value,onCheckedChange:e.onChange})})]})}),(0,H.jsx)(N,{control:i.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:d()}),(0,H.jsx)(L,{children:x()})]}),(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:i.control,name:`mobile`,render:({field:e})=>(0,H.jsxs)(j,{className:`relative flex flex-row items-start`,children:[(0,H.jsx)(F,{children:(0,H.jsx)(w,{checked:e.value,onCheckedChange:e.onChange})}),(0,H.jsxs)(`div`,{className:`space-y-1 leading-none`,children:[(0,H.jsx)(I,{children:v()}),(0,H.jsxs)(L,{children:[u(),` `,(0,H.jsx)(S,{className:`underline decoration-dashed underline-offset-4 hover:decoration-solid`,to:`/settings`,children:f()}),` `,p()]})]})]})}),(0,H.jsx)(C,{type:`submit`,children:g()})]})})}function K(){return(0,H.jsx)(B,{description:a(),title:s(),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-Bv-Izk6_.js b/src/www/assets/orders-Bv-Izk6_.js new file mode 100644 index 0000000..7a0845c --- /dev/null +++ b/src/www/assets/orders-Bv-Izk6_.js @@ -0,0 +1 @@ +import{$a as e,Aa as t,Ba as n,Ca as r,Da as i,Do as a,Ea as o,Fa as s,Fs as c,Ga as l,Ha as u,Ia as d,Ja as f,Ka as p,La as m,Ma as h,Na as g,Oa as _,Oo as v,Pa as y,Qa as b,Ra as x,Sa as S,So as C,Ta as ee,Ua as w,Va as T,Wa as E,Xa as D,Ya as O,Yt as te,Za as k,Zl as ne,_a as re,_o as ie,ao as ae,ba as oe,bo as se,co as ce,do as A,eo as le,fo as j,ga as ue,go as de,ha as fe,ho as pe,io as me,ja as he,ka as ge,ko as _e,lo as ve,ma as ye,mo as be,no as xe,nu as M,oo as Se,ou as Ce,po as we,qa as N,ro as Te,ru as Ee,so as De,to as Oe,uo as ke,va as Ae,vo as je,wa as Me,xa as Ne,xo as P,ya as Pe,yo as Fe,za as F}from"./messages-BovT1T-w.js";import{a as I,s as Ie}from"./auth-store-BpIS8RMn.js";import{i as Le,t as Re}from"./router-Dohuf5K5.js";import{r as ze}from"./route-BxpeArPd.js";import{G as Be,m as Ve,o as L,s as R}from"./search-provider-Cx1K1ilz.js";import{i as He,t as z}from"./button-DJA4fnJ8.js";import{a as B,l as Ue,r as We,t as Ge}from"./dropdown-menu-CUea1X0A.js";import{d as V,f as Ke,l as H,m as U,p as W,u as G}from"./command-BwVY_kli.js";import{t as qe}from"./label-CsevXZTG.js";import{o as Je,s as Ye}from"./select-DcStuzoT.js";import{t as Xe}from"./cookies-BNZcTwGc.js";import{t as K}from"./createLucideIcon-D28ivbfF.js";import{_ as Ze,d as q,f as Qe,g as $e,h as et,m as tt,n as nt,p as rt,r as it,t as at,v as ot,y as st}from"./data-table-CmcvKcj8.js";import{t as ct}from"./chevron-down-CdmvZsfI.js";import{t as lt}from"./download-CN4vU01G.js";import{t as ut}from"./ellipsis-Y4gZr59G.js";import{t as dt}from"./eye-CDavQcLN.js";import{r as ft}from"./empty-state-Cam-sX8U.js";import{n as J}from"./dist-DvAgZMq72.js";import{t as pt}from"./input-DiRPHDd8.js";import{t as mt}from"./page-header-BBJ9dE3-.js";import{t as ht}from"./badge-BAmRBT3U.js";import{t as gt}from"./use-table-url-state-C7-IMA3_.js";import{t as Y}from"./long-text-BXQXVuRh.js";import{t as _t}from"./coming-soon-dialog-DMmjLgiX.js";var X=K(`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`}]]),vt=K(`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`}]]),Z=Ce(Ee(),1),Q=M();function yt({open:e,onOpenChange:t,order:n,isLoading:a}){let s=[[`Trade ID`,n?.trade_id??`-`],[_(),n?.order_id??`-`],[i(),n?.name??`-`],[o(),`${R(n?.amount)} ${n?.currency??``}`.trim()||`-`],[ee(),`${R(n?.actual_amount,6)} ${n?.token??``}`.trim()||`-`],[Me(),n?.network??`-`],[r(),n?.receive_address??`-`],[S(),n?.notify_url??`-`],[Ne(),n?.redirect_url??`-`],[oe(),n?.block_transaction_id??`-`],[Pe(),n?.parent_trade_id??`-`],[Ae(),L(n?.created_at)||`-`],[re(),L(n?.updated_at)||`-`]];return(0,Q.jsx)(H,{onOpenChange:t,open:e,children:(0,Q.jsxs)(G,{className:`sm:max-w-3xl`,children:[(0,Q.jsxs)(W,{children:[(0,Q.jsx)(U,{children:ue()}),(0,Q.jsx)(V,{children:fe()})]}),a?(0,Q.jsx)(`div`,{className:`py-8 text-center text-muted-foreground text-sm`,children:ye()}):(0,Q.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:s.map(([e,t])=>(0,Q.jsxs)(`div`,{className:`rounded-lg border p-3`,children:[(0,Q.jsx)(`div`,{className:`mb-1 text-muted-foreground text-xs`,children:e}),(0,Q.jsx)(`div`,{className:`break-all text-sm`,children:t})]},e))})]})})}var bt={1:`bg-amber-500/10 text-amber-600`,2:`bg-emerald-500/10 text-emerald-600`,3:`bg-rose-500/10 text-rose-600`},xt={1:_e(),2:v(),3:a()};function St(e){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,Q.jsx)(`div`,{style:{paddingLeft:n?`${n}rem`:void 0},children:t?(0,Q.jsx)(z,{className:`h-6 w-6 p-0`,onClick:()=>e.toggleExpanded(),variant:`ghost`,children:e.getIsExpanded()?(0,Q.jsx)(ct,{className:`h-4 w-4`}):(0,Q.jsx)(Be,{className:`h-4 w-4`})}):null})}},{accessorKey:`status`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:b()}),cell:({row:e})=>{let t=e.original.status??1;return(0,Q.jsx)(ht,{className:bt[t],children:xt[t]??t})},filterFn:(e,t,n)=>n.includes(e.getValue(t)),meta:{label:b(),skeleton:`badge`}},{accessorKey:`trade_id`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:`Trade ID`}),cell:({row:e})=>(0,Q.jsx)(Y,{className:`font-medium`,children:e.original.trade_id}),enableHiding:!1,meta:{label:`Trade ID`,skeleton:`id`}},{accessorKey:`order_id`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:k()}),cell:({row:e})=>(0,Q.jsx)(Y,{className:`min-w-40`,children:e.original.order_id}),meta:{label:k(),skeleton:`id`}},{accessorKey:`name`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:D()}),cell:({row:e})=>e.original.name??`-`,meta:{label:D(),skeleton:`short`}},{accessorKey:`amount`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:O()}),cell:({row:e})=>`${R(e.original.amount)} ${e.original.currency||``}`,meta:{label:O(),skeleton:`amount`}},{accessorKey:`actual_amount`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:f()}),cell:({row:e})=>`${R(e.original.actual_amount,6)} ${e.original.token||``}`,meta:{label:f(),skeleton:`amount`}},{accessorKey:`network`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:N()}),id:`chain`,meta:{label:N(),skeleton:`short`}},{accessorKey:`receive_address`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:p()}),cell:({row:e})=>(0,Q.jsx)(Y,{className:`min-w-36`,children:e.original.receive_address}),meta:{label:p(),skeleton:`long`}},{accessorKey:`created_at`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:l()}),cell:({row:e})=>(0,Q.jsx)(`div`,{className:`min-w-32`,children:L(e.original.created_at)}),meta:{label:l(),skeleton:`date`}},{accessorKey:`updated_at`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:E()}),cell:({row:e})=>L(e.original.updated_at),meta:{label:E(),skeleton:`date`}},{accessorKey:`block_transaction_id`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:w()}),cell:({row:e})=>(0,Q.jsx)(Y,{className:`min-w-40`,children:e.original.block_transaction_id??`-`}),meta:{label:w(),skeleton:`id`}},{accessorKey:`pay_by_sub_id`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:c()}),cell:({row:e})=>{let t=e.original.pay_by_sub_id;return t===0||t==null?`-`:t},meta:{label:c(),skeleton:`id`}},{accessorKey:`payment_type`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:u()}),meta:{label:u(),skeleton:`short`}},{accessorKey:`is_selected`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:T()}),cell:({row:e})=>e.original.is_selected?s():y(),meta:{label:T(),skeleton:`badge`}},{accessorKey:`callback_confirm`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:n()}),cell:({row:e})=>e.original.callback_confirm===1?g():h(),meta:{label:n(),skeleton:`badge`}},{accessorKey:`callback_num`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:F()}),cell:({row:e})=>e.original.callback_num??0,meta:{label:F(),skeleton:`id`}},{accessorKey:`notify_url`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:x()}),cell:({row:e})=>(0,Q.jsx)(Y,{className:`min-w-48`,children:e.original.notify_url??`-`}),meta:{label:x(),skeleton:`long`}},{accessorKey:`redirect_url`,header:({column:e})=>(0,Q.jsx)(q,{column:e,title:m()}),cell:({row:e})=>(0,Q.jsx)(Y,{className:`min-w-48`,children:e.original.redirect_url??`-`}),meta:{label:m(),skeleton:`long`}},{accessorKey:`api_key_id`,header:({column:e})=>(0,Q.jsx)(q,{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:d(),skeleton:`action`,sticky:`right`,className:He(`w-12`)},cell:({row:n})=>(0,Q.jsxs)(Ge,{modal:!1,children:[(0,Q.jsx)(Ue,{asChild:!0,children:(0,Q.jsxs)(z,{className:`flex h-8 w-8 p-0 data-[state=open]:bg-muted`,variant:`ghost`,children:[(0,Q.jsx)(ut,{className:`h-4 w-4`}),(0,Q.jsx)(`span`,{className:`sr-only`,children:ge()})]})}),(0,Q.jsxs)(We,{align:`end`,className:`w-44`,children:[(0,Q.jsxs)(B,{onClick:()=>e(j(),n.original),children:[he(),(0,Q.jsx)(dt,{className:`ml-auto h-4 w-4`})]}),(0,Q.jsxs)(B,{onClick:()=>e(A(),n.original),children:[t(),(0,Q.jsx)(vt,{className:`ml-auto h-4 w-4`})]}),(0,Q.jsxs)(B,{onClick:()=>e(C(),n.original),children:[C(),(0,Q.jsx)(X,{className:`ml-auto h-4 w-4`})]}),(0,Q.jsxs)(B,{onClick:()=>e(P(),n.original),children:[P(),(0,Q.jsx)(ft,{className:`ml-auto h-4 w-4`})]})]})]})}]}var $=ze(`/_authenticated/orders/`);function Ct({data:t,isLoading:n,onAction:r,onRefresh:i}){let[a,o]=(0,Z.useState)([]),[s,c]=(0,Z.useState)({}),{globalFilter:l,onGlobalFilterChange:u,columnFilters:d,onColumnFiltersChange:f,pagination:p,onPaginationChange:m,ensurePageInRange:h}=gt({search:$.useSearch(),navigate:$.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=Qe({data:t,columns:(0,Z.useMemo)(()=>St(r),[r]),state:{sorting:a,columnVisibility:s,columnFilters:d,globalFilter:l,pagination:p},onSortingChange:o,onColumnVisibilityChange:c,onColumnFiltersChange:f,onGlobalFilterChange:u,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:rt(),getExpandedRowModel:tt(),getFilteredRowModel:Ze(),getPaginationRowModel:ot(),getSortedRowModel:st(),getFacetedRowModel:et(),getFacetedUniqueValues:$e()});(0,Z.useEffect)(()=>{h(g.getPageCount())},[g,h]);let _=[...new Set(t.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)(at,{filters:[{columnId:`status`,title:xe(),options:[...Le]},{columnId:`chain`,title:Oe(),options:_}],onRefresh:i,searchPlaceholder:le(),table:g}),(0,Q.jsx)(it,{className:`min-w-[1200px]`,emptyText:e(),loading:n,table:g}),(0,Q.jsx)(nt,{className:`mt-auto`,table:g})]})}var wt={[C()]:C(),[P()]:P()};function Tt(){return`http://64.31.22.157:8000`}function Et(){let e=I.useQuery(`get`,`/admin/api/v1/orders/list-with-sub`),t=I.useMutation(`post`,`/admin/api/v1/orders/{trade_id}/close`),n=I.useMutation(`post`,`/admin/api/v1/orders/{trade_id}/mark-paid`),r=I.useMutation(`post`,`/admin/api/v1/orders/{trade_id}/resend-callback`),i=I.useMutation(`get`,`/admin/api/v1/orders/{trade_id}`),[a,o]=(0,Z.useState)(null),[s,c]=(0,Z.useState)(null),[l,u]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(null),[p,m]=(0,Z.useState)(!1),[h,g]=(0,Z.useState)(``),[_,v]=(0,Z.useState)(!1);async function y(){await Re.invalidateQueries({queryKey:[`get`,`/admin/api/v1/orders/list-with-sub`]})}async function b(){if(!a?.row.trade_id)return;let e={params:{path:{trade_id:a.row.trade_id}}};a.action===C()?await t.mutateAsync(e):a.action===P()&&await r.mutateAsync(e),J.success(te({action:wt[a.action]})),await y(),o(null)}async function x(){if(!(s?.trade_id&&h.trim())){J.error(se());return}await n.mutateAsync({params:{path:{trade_id:s.trade_id}},body:{block_transaction_id:h.trim()}}),J.success(Fe()),c(null),g(``),await y()}async function S(){v(!0);try{let e=Xe(Ie),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),J.success(ie())}catch{J.error(je())}finally{v(!1)}}return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Ye,{fixed:!0}),(0,Q.jsxs)(Je,{className:`flex flex-1 flex-col gap-4 sm:gap-6`,children:[(0,Q.jsx)(mt,{actions:(0,Q.jsxs)(z,{disabled:_,onClick:S,variant:`outline`,children:[(0,Q.jsx)(lt,{className:`mr-2 h-4 w-4`}),_?de():pe()]}),description:be(),title:we()}),(0,Q.jsx)(Ct,{data:e.data?.data?.list??[],isLoading:e.isLoading,onAction:async(e,t)=>{if(e===j()){m(!0),f((await i.mutateAsync({params:{path:{trade_id:t.trade_id}}})).data??t);return}if(e===A()||e===C()||e===P()){u(!0);return}o({action:e,row:t})},onRefresh:()=>e.refetch()})]}),a&&(0,Q.jsx)(Ve,{confirmText:ke(),desc:(0,Q.jsx)(`span`,{children:ve({action:a.action,id:String(a.row.trade_id??a.row.id??``)})}),handleConfirm:b,onOpenChange:()=>o(null),open:!0,title:ce({action:a.action})}),(0,Q.jsx)(yt,{isLoading:i.isPending,onOpenChange:e=>{m(e),e||f(null)},open:p,order:d}),(0,Q.jsx)(H,{onOpenChange:e=>{e||(c(null),g(``))},open:!!s,children:(0,Q.jsxs)(G,{children:[(0,Q.jsxs)(W,{children:[(0,Q.jsx)(U,{children:De()}),(0,Q.jsx)(V,{children:Se({id:String(s?.trade_id??s?.id??``)})})]}),(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(qe,{htmlFor:`blockTransactionId`,children:ae()}),(0,Q.jsx)(pt,{id:`blockTransactionId`,onChange:e=>g(e.target.value),placeholder:`0x... / transaction hash`,value:h})]}),(0,Q.jsxs)(Ke,{children:[(0,Q.jsx)(z,{onClick:()=>c(null),variant:`outline`,children:ne()}),(0,Q.jsx)(z,{disabled:n.isPending,onClick:x,children:n.isPending?me():Te()})]})]})}),(0,Q.jsx)(_t,{onOpenChange:u,open:l})]})}var Dt=Et;export{Dt as component}; \ No newline at end of file diff --git a/src/www/assets/page-header-BBJ9dE3-.js b/src/www/assets/page-header-BBJ9dE3-.js new file mode 100644 index 0000000..11b532b --- /dev/null +++ b/src/www/assets/page-header-BBJ9dE3-.js @@ -0,0 +1 @@ +import{nu as e}from"./messages-BovT1T-w.js";import{t}from"./separator-CRLYw2cW.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-BmNp63ZQ.js b/src/www/assets/password-BmNp63ZQ.js new file mode 100644 index 0000000..41f8736 --- /dev/null +++ b/src/www/assets/password-BmNp63ZQ.js @@ -0,0 +1 @@ +import{Bt as e,Gt as t,Ht as n,It as r,Jt as i,Kt as a,Lt as o,Rc as s,Rt as c,Ut as l,Vt as u,Wt as d,nu as f,qt as p,zc as m,zt as h}from"./messages-BovT1T-w.js";import{a as g}from"./auth-store-BpIS8RMn.js";import{t as _}from"./button-DJA4fnJ8.js";import{n as v}from"./dist-DvAgZMq72.js";import{c as y,s as b}from"./zod-Cymc5bS-.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-DdHiBYMe.js";import{t as k}from"./password-input-B463LDkD.js";import{t as A}from"./page-header-BBJ9dE3-.js";var j=f(),M=b({old_password:y().min(1,i()),new_password:y().min(8,p()),confirm_password:y().min(1,a())}).refine(e=>e.new_password===e.confirm_password,{message:t(),path:[`confirm_password`]});function N(){let t=w({resolver:S(M),defaultValues:{old_password:``,new_password:``,confirm_password:``}}),i=g.useMutation(`post`,`/admin/api/v1/auth/password`);async function a(e){await i.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(a),children:[(0,j.jsx)(C,{control:t.control,name:`old_password`,render:({field:e})=>(0,j.jsxs)(x,{children:[(0,j.jsx)(E,{children:l()}),(0,j.jsx)(T,{children:(0,j.jsx)(k,{placeholder:n(),...e})}),(0,j.jsx)(D,{})]})}),(0,j.jsx)(C,{control:t.control,name:`new_password`,render:({field:t})=>(0,j.jsxs)(x,{children:[(0,j.jsx)(E,{children:u()}),(0,j.jsx)(T,{children:(0,j.jsx)(k,{placeholder:e(),...t})}),(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:h()}),(0,j.jsx)(T,{children:(0,j.jsx)(k,{placeholder:c(),...e})}),(0,j.jsx)(D,{})]})}),(0,j.jsx)(_,{disabled:i.isPending,type:`submit`,children:i.isPending?o():r()})]})})}function P(){return(0,j.jsx)(A,{description:s(),title:m(),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-B463LDkD.js b/src/www/assets/password-input-B463LDkD.js new file mode 100644 index 0000000..4d13f0f --- /dev/null +++ b/src/www/assets/password-input-B463LDkD.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{i as r,t as i}from"./button-DJA4fnJ8.js";import{t as a}from"./eye-off-C-BF3gv3.js";import{t as o}from"./eye-CDavQcLN.js";import{t as s}from"./input-DiRPHDd8.js";var c=t(n(),1),l=e();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-assets-DSsuCTEQ.js b/src/www/assets/payment-assets-DSsuCTEQ.js new file mode 100644 index 0000000..923bd82 --- /dev/null +++ b/src/www/assets/payment-assets-DSsuCTEQ.js @@ -0,0 +1 @@ +import{ca as e,da as t,fa as n,la as r,nu as i,ou as a,pa as o,ru as s,sa as c,ua as l}from"./messages-BovT1T-w.js";import{a as u}from"./auth-store-BpIS8RMn.js";import{r as d}from"./route-BxpeArPd.js";import{i as f}from"./button-DJA4fnJ8.js";import{o as p,s as m}from"./select-DcStuzoT.js";import{_ as h,d as g,f as _,g as v,h as y,n as b,p as x,r as S,t as C,v as w,y as T}from"./data-table-CmcvKcj8.js";import{t as E}from"./page-header-BBJ9dE3-.js";import{t as D}from"./badge-BAmRBT3U.js";import{t as O}from"./use-table-url-state-C7-IMA3_.js";var k=a(s(),1),A=i();function j(){return[{accessorKey:`network`,header:({column:t})=>(0,A.jsx)(g,{column:t,title:e()}),cell:({row:e})=>e.original.network??`-`,meta:{label:e(),skeleton:`short`}},{id:`tokens`,accessorFn:e=>e.tokens?.join(`, `)??``,header:({column:e})=>(0,A.jsx)(g,{column:e,title:c()}),cell:({row:e})=>{let t=e.original.tokens??[];return t.length===0?`-`:(0,A.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:t.map(e=>(0,A.jsx)(D,{className:`bg-emerald-500/10 text-emerald-600`,children:e},e))})},meta:{className:f(`text-center`),label:c(),skeleton:`short`}}]}var M=d(`/_authenticated/payment-assets/`);function N({data:e,isLoading:n,onRefresh:i}){let[a,o]=(0,k.useState)([]),{globalFilter:s,onGlobalFilterChange:c,columnFilters:u,onColumnFiltersChange:d,pagination:f,onPaginationChange:p,ensurePageInRange:m}=O({search:M.useSearch(),navigate:M.useNavigate(),pagination:{defaultPage:1,defaultPageSize:10},globalFilter:{enabled:!0,key:`keyword`},columnFilters:[{columnId:`network`,searchKey:`chain`,type:`array`}]}),g=_({data:e,columns:(0,k.useMemo)(()=>j(),[]),state:{sorting:a,columnFilters:u,globalFilter:s,pagination:f},onSortingChange:o,onColumnFiltersChange:d,onGlobalFilterChange:c,onPaginationChange:p,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:x(),getFilteredRowModel:h(),getPaginationRowModel:w(),getSortedRowModel:T(),getFacetedRowModel:y(),getFacetedUniqueValues:v()});(0,k.useEffect)(()=>{m(g.getPageCount())},[g,m]);let E=[...new Set(e.map(e=>e.network).filter(Boolean))].map(e=>({label:e,value:e}));return(0,A.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,A.jsx)(C,{filters:[{columnId:`network`,title:t(),options:E}],onRefresh:i,searchPlaceholder:l(),table:g}),(0,A.jsx)(S,{className:`min-w-[700px]`,emptyText:r(),loading:n,table:g}),(0,A.jsx)(b,{className:`mt-auto`,table:g})]})}function P(){let e=u.useQuery(`get`,`/admin/api/v1/supported-assets`);return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(m,{fixed:!0}),(0,A.jsxs)(p,{className:`flex flex-1 flex-col gap-4 sm:gap-6`,children:[(0,A.jsx)(E,{description:o(),title:n()}),(0,A.jsx)(N,{data:e.data?.data?.supports??[],isLoading:e.isLoading,onRefresh:()=>e.refetch()})]})]})}var F=P;export{F as component}; \ No newline at end of file diff --git a/src/www/assets/payments-DTD79Ztb.js b/src/www/assets/payments-DTD79Ztb.js new file mode 100644 index 0000000..d1ec6d0 --- /dev/null +++ b/src/www/assets/payments-DTD79Ztb.js @@ -0,0 +1,2 @@ +import{$t as e,An as t,Bn as n,Cn as r,Di as i,Dn as a,En as o,Fn as s,Gr as c,In as l,Ln as u,Lt as d,Mn as f,Nn as p,On as ee,Pn as te,Qt as m,Rl as ne,Rn as re,Sn as ie,Tn as ae,Vn as h,Xt as g,Zl as oe,Zt as se,_n as _,aa as ce,an as le,bn as ue,cn as v,dn as de,en as y,fn as b,gn as x,hn as S,in as C,iu as w,jn as fe,kn as pe,ln as T,mn as E,nn as me,nu as D,on as he,ou as O,pn as ge,rn as k,ru as _e,sl as ve,sn as A,tn as j,un as M,vn as N,wn as ye,xn as be,yn as P,zl as F,zn as xe}from"./messages-BovT1T-w.js";import{a as I}from"./auth-store-BpIS8RMn.js";import{t as Se}from"./router-Dohuf5K5.js";import{r as Ce}from"./route-BxpeArPd.js";import{H as we,P as L,m as Te,o as R,s as Ee,z as De}from"./search-provider-Cx1K1ilz.js";import{t as z}from"./button-DJA4fnJ8.js";import{d as Oe,l as ke,m as Ae,p as je,u as Me}from"./command-BwVY_kli.js";import{a as Ne,i as Pe,n as B,o as Fe,r as V,s as Ie,t as Le}from"./select-DcStuzoT.js";import{t as Re}from"./separator-CRLYw2cW.js";import{t as ze}from"./switch-R6BNZUH1.js";import{t as H}from"./createLucideIcon-D28ivbfF.js";import{t as Be}from"./eye-off-C-BF3gv3.js";import{t as Ve}from"./eye-CDavQcLN.js";import{n as He,r as Ue,t as We}from"./empty-state-Cam-sX8U.js";import{n as Ge,t as Ke}from"./trash-2-Du706Ujr.js";import{n as U}from"./dist-DvAgZMq72.js";import{c as W,s as qe}from"./zod-Cymc5bS-.js";import{a as G,c as Je,i as K,l as Ye,n as q,o as J,r as Xe,s as Y,t as Ze}from"./form-DdHiBYMe.js";import{t as X}from"./input-DiRPHDd8.js";import{t as Qe}from"./page-header-BBJ9dE3-.js";import{t as $e}from"./textarea-D_TrrVtD.js";import{t as et}from"./badge-BAmRBT3U.js";var tt=H(`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`}]]),nt=H(`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`}]]),rt=H(`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`}]]),it=H(`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`}]]),at=w(((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=at(),r={"text/plain":`Text`,"text/html":`Url`,default:`Text`},i=`Copy to clipboard: #{key}, Enter`;function a(e){var t=(/mac os x/i.test(navigator.userAgent)?`⌘`:`Ctrl`)+`+C`;return e.replace(/#{\s*key\s*}/g,t)}function o(e,t){var o,s,c,l,u,d,f=!1;t||={},o=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){o&&console.warn(`unable to use e.clipboardData`),o&&console.warn(`trying IE specific stuff`),window.clipboardData.clearData();var i=r[t.format]||r.default;window.clipboardData.setData(i,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){o&&console.error(`unable to copy using execCommand: `,n),o&&console.warn(`trying IE specific stuff`);try{window.clipboardData.setData(t.format||`text`,e),t.onCopy&&t.onCopy(window.clipboardData),f=!0}catch(n){o&&console.error(`unable to copy using clipboardData: `,n),o&&console.error(`falling back to prompt`),s=a(`message`in t?t.message:i),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=o}))(),1),Z=O(_e(),1),Q=D(),st=qe({name:W().min(1,se()),notify_url:W().url(g()),ip_whitelist:W().optional()});function ct({open:t,onOpenChange:n,currentRow:r,onSuccess:i}){let a=Ye({resolver:Je(st),defaultValues:{name:``,notify_url:``,ip_whitelist:``}}),o=I.useMutation(`post`,`/admin/api/v1/api-keys`),s=I.useMutation(`patch`,`/admin/api/v1/api-keys/{id}`),c=o.data?.data?.secret_key;(0,Z.useEffect)(()=>{t&&a.reset({name:r?.name??``,notify_url:r?.notify_url??``,ip_whitelist:r?.ip_whitelist??``})},[t,r,a]);function l(e){e||(a.reset({name:``,notify_url:``,ip_whitelist:``}),o.reset(),s.reset()),n(e)}function u(t){if(r?.id){s.mutate({params:{path:{id:r.id}},body:{name:t.name,notify_url:t.notify_url,ip_whitelist:t.ip_whitelist||void 0}},{onSuccess:()=>{U.success(e()),n(!1),i?.()}});return}o.mutate({body:{name:t.name,notify_url:t.notify_url,ip_whitelist:t.ip_whitelist||void 0}},{onSuccess:()=>{U.success(m()),i?.()}})}function f(){l(!1)}let p=o.isPending||s.isPending;return(0,Q.jsx)(ke,{onOpenChange:l,open:t,children:(0,Q.jsxs)(Me,{children:[(0,Q.jsxs)(je,{children:[(0,Q.jsx)(Ae,{children:r?v():A()}),(0,Q.jsx)(Oe,{children:r?he():le()})]}),(0,Q.jsx)(Ze,{...a,children:(0,Q.jsxs)(`form`,{className:`space-y-4`,onSubmit:a.handleSubmit(u),children:[(0,Q.jsx)(K,{control:a.control,name:`name`,render:({field:e})=>(0,Q.jsxs)(G,{children:[(0,Q.jsx)(J,{children:M()}),(0,Q.jsx)(q,{children:(0,Q.jsx)(X,{placeholder:T(),...e})}),(0,Q.jsx)(Y,{})]})}),(0,Q.jsx)(K,{control:a.control,name:`notify_url`,render:({field:e})=>(0,Q.jsxs)(G,{children:[(0,Q.jsx)(J,{children:S()}),(0,Q.jsx)(q,{children:(0,Q.jsx)(X,{placeholder:`https://example.com/callback`,...e})}),(0,Q.jsx)(Y,{})]})}),(0,Q.jsx)(K,{control:a.control,name:`ip_whitelist`,render:({field:e})=>(0,Q.jsxs)(G,{children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Q.jsx)(J,{children:C()}),(0,Q.jsx)(et,{variant:`secondary`,children:F()})]}),(0,Q.jsx)(q,{children:(0,Q.jsx)($e,{disabled:!0,placeholder:`127.0.0.1 +10.0.0.2`,...e})}),(0,Q.jsx)(Xe,{children:ne()}),(0,Q.jsx)(Y,{})]})}),!r&&c?(0,Q.jsxs)(`div`,{className:`rounded-lg border bg-muted/40 p-3 text-sm`,children:[(0,Q.jsx)(`div`,{className:`mb-1 font-medium text-amber-600`,children:k()}),(0,Q.jsx)(`div`,{className:`break-all font-mono text-muted-foreground`,children:c})]}):null,(0,Q.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,Q.jsx)(z,{onClick:f,type:`button`,variant:`outline`,children:!r&&c?me():oe()}),(!c||r)&&(0,Q.jsxs)(z,{disabled:p,type:`submit`,children:[p&&d(),!p&&r&&j(),!(p||r)&&y()]})]})]})})]})})}function lt({data:e,isLoading:t,onAction:n,onCopySecret:r,onToggleSecret:a,secretStates:o}){return t?(0,Q.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,Q.jsx)(`li`,{"aria-hidden":`true`,className:`rounded-lg border`,children:(0,Q.jsxs)(`div`,{className:`flex h-full flex-col overflow-hidden p-4`,children:[(0,Q.jsxs)(`div`,{className:`mb-6 flex items-center justify-between gap-3`,children:[(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[(0,Q.jsx)(L,{className:`h-5 w-32 max-w-full`}),(0,Q.jsx)(L,{className:`h-3 w-20`})]}),(0,Q.jsx)(L,{className:`h-6 w-11 rounded-full`})]}),(0,Q.jsxs)(`div`,{className:`mb-6 flex-1 space-y-3`,children:[(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(L,{className:`mt-1 h-3 w-12 shrink-0`}),(0,Q.jsx)(L,{className:`h-4 w-28 min-w-0 flex-1`})]}),(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(L,{className:`mt-1 h-3 w-12 shrink-0`}),(0,Q.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-2`,children:[(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[(0,Q.jsx)(L,{className:`h-4 w-full`}),(0,Q.jsx)(L,{className:`h-4 w-9/12`})]}),(0,Q.jsx)(L,{className:`size-8 shrink-0 rounded-md`}),(0,Q.jsx)(L,{className:`size-8 shrink-0 rounded-md`})]})]}),[`w-28`,`w-full`,`w-11/12`,`w-24`,`w-32`].map(e=>(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(L,{className:`mt-1 h-3 w-12 shrink-0`}),(0,Q.jsx)(L,{className:`h-4 min-w-0 flex-1 ${e}`})]},e))]}),(0,Q.jsx)(`div`,{className:`-mx-4 mt-auto -mb-4 border-t`,children:(0,Q.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,Q.jsx)(`div`,{className:`flex h-11 items-center justify-center px-4 ${t<2?`border-r`:``}`,children:(0,Q.jsx)(L,{className:`h-4 w-16`})},e))})})]})},e))}):e.length?(0,Q.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,s=o[String(e.id??e.pid??``)],l=`••••••••••••••••`;s?.visible&&(l=s.loading?x():s.value||`-`);let u=[{label:`PID`,value:e.pid??`-`},{label:S(),value:e.notify_url||`-`},{label:E(),value:e.ip_whitelist||`-`},{label:ue(),value:Ee(e.call_count??0,0)},{label:P(),value:R(e.last_used_at)||N()},{label:i(),value:R(e.updated_at)||`-`}];return(0,Q.jsx)(`li`,{className:`rounded-lg border hover:shadow-md`,children:(0,Q.jsxs)(`div`,{className:`flex h-full flex-col overflow-hidden p-4`,children:[(0,Q.jsxs)(`div`,{className:`mb-6 flex items-center justify-between`,children:[(0,Q.jsx)(`div`,{className:`min-w-0`,children:(0,Q.jsx)(`h2`,{className:`truncate font-semibold`,children:e.name||e.pid||`#${e.id}`})}),(0,Q.jsx)(ze,{checked:t,onCheckedChange:()=>n(t?`disable`:`enable`,e)})]}),(0,Q.jsxs)(`div`,{className:`mb-6 flex-1 space-y-2 text-muted-foreground text-sm`,children:[(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(`span`,{className:`w-16 shrink-0 text-foreground/80`,children:`PID`}),(0,Q.jsx)(`span`,{className:`min-w-0 flex-1 break-all`,children:e.pid??`-`})]}),(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(`span`,{className:`w-16 shrink-0 text-foreground/80`,children:ge()}),(0,Q.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-2`,children:[(0,Q.jsx)(`span`,{className:`min-w-0 flex-1 break-all font-mono`,children:l}),(0,Q.jsx)(z,{className:`size-8 shrink-0`,onClick:()=>r(e),size:`icon-sm`,variant:`ghost`,children:(0,Q.jsx)(rt,{className:`h-4.5 w-4.5`})}),(0,Q.jsx)(z,{className:`size-8 shrink-0`,onClick:()=>a(e),size:`icon-sm`,variant:`ghost`,children:s?.visible?(0,Q.jsx)(Be,{className:`h-4.5 w-4.5`}):(0,Q.jsx)(Ve,{className:`h-4.5 w-4.5`})})]})]}),u.filter(e=>e.label!==`PID`).map(e=>(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(`span`,{className:`w-16 shrink-0 text-foreground/80`,children:e.label}),(0,Q.jsx)(`span`,{className:`min-w-0 flex-1 break-all`,children:e.value})]},e.label))]}),(0,Q.jsx)(`div`,{className:`-mx-4 mt-auto -mb-4 border-t`,children:(0,Q.jsxs)(`div`,{className:`grid grid-cols-3`,children:[(0,Q.jsxs)(z,{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,Q.jsx)(it,{className:`h-4 w-4`}),b()]}),(0,Q.jsxs)(z,{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,Q.jsx)(we,{className:`h-4 w-4`}),de()]}),(0,Q.jsxs)(z,{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,Q.jsx)(Ke,{className:`h-4 w-4 text-destructive`}),c()]})]})})]})},e.id??e.pid)})}):(0,Q.jsx)(`div`,{className:`pt-4`,children:(0,Q.jsx)(We,{description:_()})})}var $=Ce(`/_authenticated/payments/`),ut=new Map([[`all`,h()],[`enabled`,n()],[`disabled`,xe()]]);function dt(){let{filter:e=``,type:i=`all`,sort:c=`asc`}=$.useSearch(),d=$.useNavigate(),m=I.useQuery(`get`,`/admin/api/v1/api-keys`),ne=I.useMutation(`delete`,`/admin/api/v1/api-keys/{id}`),g=I.useMutation(`post`,`/admin/api/v1/api-keys/{id}/status`),oe=I.useMutation(`get`,`/admin/api/v1/api-keys/{id}/secret`),se=I.useMutation(`post`,`/admin/api/v1/api-keys/{id}/rotate-secret`),_=I.useMutation(`get`,`/admin/api/v1/api-keys/{id}/stats`),[le,v]=(0,Z.useState)(!1),[de,y]=(0,Z.useState)(null),[b,x]=(0,Z.useState)(null),[S,C]=(0,Z.useState)(null),[w,T]=(0,Z.useState)({}),[E,me]=(0,Z.useState)(c),[D,he]=(0,Z.useState)(i),[O,ge]=(0,Z.useState)(e);async function k(){await Se.invalidateQueries({queryKey:[`get`,`/admin/api/v1/api-keys`]})}async function _e(){if(!b?.row.id)return;let e=b.row.id;b.action===`delete`?(await ne.mutateAsync({params:{path:{id:e}}}),U.success(re())):(b.action===`enable`||b.action===`disable`)&&(await g.mutateAsync({params:{path:{id:e}},body:{status:b.action===`enable`?1:2}}),U.success(ce())),await k(),x(null)}function A(e){return String(e.id??e.pid??``)}async function j(e,t){let n=A(e),r=t?.visible??w[n]?.visible??!1;T(e=>({...e,[n]:{loading:!0,value:e[n]?.value??``,visible:r}}));try{let t=await oe.mutateAsync({params:{path:{id:e.id}}}),i=typeof t.data==`object`&&t.data&&`secret_key`in t.data?String(t.data.secret_key??``):``;return T(e=>({...e,[n]:{loading:!1,value:i||`-`,visible:r}})),i||`-`}catch{return T(e=>({...e,[n]:{loading:!1,value:e[n]?.value??``,visible:r}})),U.error(u()),null}}async function M(e){if(!e.id){U.error(l());return}let t=A(e),n=w[t];if(n?.visible){T(e=>({...e,[t]:{...n,visible:!1}}));return}if(n?.value){T(e=>({...e,[t]:{...n,visible:!0}}));return}await j(e,{visible:!0})}async function F(e){if(!e.id){U.error(l());return}let t=A(e),n=w[t]?.value??``;if(n||=await j(e,{visible:w[t]?.visible??!1})??``,!n||n===`-`){U.error(s());return}(0,ot.default)(n),U.success(te())}async function Ce(e){let t=await se.mutateAsync({params:{path:{id:e.id}}}),n=A(e);T(e=>({...e,[n]:{loading:!1,value:t.data?.secret_key??`-`,visible:!0}})),U.success(p()),await k()}async function we(e){let t=await _.mutateAsync({params:{path:{id:e.id}}});C({apiKey:e.pid??`#${e.id}`,stats:t.data??{}})}async function L(e,t){if(!t.id){U.error(l());return}if(e===`edit`){y(t),v(!0);return}if(e===`delete`){x({action:e,row:t});return}switch(e){case`enable`:case`disable`:await g.mutateAsync({params:{path:{id:t.id}},body:{status:e===`enable`?1:2}}),U.success(ce()),await k();break;case`rotate-secret`:await Ce(t);break;case`view-stats`:await we(t);break;default:break}}let R=[...m.data?.data??[]].sort((e,t)=>{let n=(e.name??e.pid??`#${e.id??``}`).toLowerCase(),r=(t.name??t.pid??`#${t.id??``}`).toLowerCase();return E===`asc`?n.localeCompare(r):r.localeCompare(n)}).filter(e=>D===`enabled`?e.status===1:D===`disabled`?e.status!==1:!0).filter(e=>{let t=O.trim().toLowerCase();return t?(e.pid??``).toLowerCase().includes(t)||(e.name??``).toLowerCase().includes(t)||(e.notify_url??``).toLowerCase().includes(t):!0});return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Ie,{}),(0,Q.jsxs)(Fe,{fixed:!0,children:[(0,Q.jsx)(Qe,{actions:(0,Q.jsxs)(z,{onClick:()=>{y(null),v(!0)},children:[(0,Q.jsx)(Ge,{className:`mr-2 h-4 w-4`}),f()]}),description:fe(),title:t()}),(0,Q.jsxs)(`div`,{className:`my-4 flex items-end justify-between sm:my-0 sm:items-center`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col gap-4 sm:my-4 sm:flex-row`,children:[(0,Q.jsx)(X,{className:`h-9 w-40 lg:w-62.5`,onChange:e=>{ge(e.target.value),d({search:t=>({...t,filter:e.target.value||void 0})})},placeholder:pe(),value:O}),(0,Q.jsxs)(Le,{onValueChange:e=>{he(e),d({search:t=>({...t,type:e===`all`?void 0:e})})},value:D,children:[(0,Q.jsx)(Pe,{className:`w-36`,children:(0,Q.jsx)(Ne,{children:ut.get(D)})}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(V,{value:`all`,children:h()}),(0,Q.jsx)(V,{value:`enabled`,children:n()}),(0,Q.jsx)(V,{value:`disabled`,children:xe()})]})]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsxs)(z,{onClick:k,variant:`outline`,children:[(0,Q.jsx)(Ue,{className:`mr-2 h-4 w-4`}),ve()]}),(0,Q.jsxs)(Le,{onValueChange:e=>{me(e),d({search:t=>({...t,sort:e})})},value:E,children:[(0,Q.jsx)(Pe,{className:`w-16`,children:(0,Q.jsx)(Ne,{children:(0,Q.jsx)(He,{size:18})})}),(0,Q.jsxs)(B,{align:`end`,children:[(0,Q.jsx)(V,{value:`asc`,children:(0,Q.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,Q.jsx)(nt,{size:16}),(0,Q.jsx)(`span`,{children:ee()})]})}),(0,Q.jsx)(V,{value:`desc`,children:(0,Q.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,Q.jsx)(tt,{size:16}),(0,Q.jsx)(`span`,{children:a()})]})})]})]})]})]}),(0,Q.jsx)(Re,{className:`shadow-sm`}),(0,Q.jsx)(lt,{data:R,isLoading:m.isLoading,onAction:L,onCopySecret:F,onToggleSecret:M,secretStates:w})]}),(0,Q.jsx)(ct,{currentRow:de,onOpenChange:e=>{v(e),e||y(null)},onSuccess:()=>m.refetch(),open:le}),b&&(0,Q.jsx)(Te,{confirmText:b.action===`delete`?o():ae(),desc:(0,Q.jsx)(`span`,{children:ye({target:String(b.row.pid??b.row.id??``),action:b.action})}),destructive:b.action===`delete`,handleConfirm:_e,onOpenChange:()=>x(null),open:!0,title:b.action===`delete`?r():ie()}),(0,Q.jsx)(ke,{onOpenChange:()=>C(null),open:!!S,children:(0,Q.jsxs)(Me,{children:[(0,Q.jsxs)(je,{children:[(0,Q.jsxs)(Ae,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(De,{className:`h-4 w-4`}),be()]}),(0,Q.jsx)(Oe,{children:S?.apiKey})]}),(0,Q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,Q.jsxs)(`div`,{className:`rounded-lg border p-4`,children:[(0,Q.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-muted-foreground text-sm`,children:[(0,Q.jsx)(Ve,{className:`h-4 w-4`}),` `,ue()]}),(0,Q.jsx)(`div`,{className:`font-semibold text-2xl`,children:Ee(S?.stats.call_count??0,0)})]}),(0,Q.jsxs)(`div`,{className:`rounded-lg border p-4`,children:[(0,Q.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-muted-foreground text-sm`,children:[(0,Q.jsx)(Ue,{className:`h-4 w-4`}),` `,P()]}),(0,Q.jsx)(`div`,{className:`font-medium text-sm`,children:S?.stats.last_used_at??N()})]})]})]})})]})}var ft=dt;export{ft as component}; \ No newline at end of file diff --git a/src/www/assets/popover-D5q6Hufu.js b/src/www/assets/popover-D5q6Hufu.js new file mode 100644 index 0000000..8d83f69 --- /dev/null +++ b/src/www/assets/popover-D5q6Hufu.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./dist-15n4mVGL.js";import{c as i,d as a,i as o}from"./button-DJA4fnJ8.js";import{i as s,n as c,o as l}from"./dist-DG5UMlBd.js";import{t as u}from"./dist-Cp1lAGZy.js";import{i as d}from"./dist-BEDXr2LC.js";import{a as f,i as p,n as m,o as h,r as g,s as _,t as v}from"./dist-BKfJQFVD.js";import{_ as y,g as b,h as x,m as S}from"./dropdown-menu-CUea1X0A.js";var C=t(n(),1),w=e(),T=`Popover`,[E,ee]=l(T,[f]),D=f(),[O,k]=E(T),A=e=>{let{__scopePopover:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!1}=e,s=D(t),l=C.useRef(null),[u,f]=C.useState(!1),[m,h]=c({prop:r,defaultProp:i??!1,onChange:a,caller:T});return(0,w.jsx)(p,{...s,children:(0,w.jsx)(O,{scope:t,contentId:d(),triggerRef:l,open:m,onOpenChange:h,onOpenToggle:C.useCallback(()=>h(e=>!e),[h]),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)(v,{...a,...r,ref:t})});M.displayName=j;var N=`PopoverTrigger`,P=C.forwardRef((e,t)=>{let{__scopePopover:n,...i}=e,o=k(N,n),c=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:s(e.onClick,o.onOpenToggle)});return o.hasCustomAnchor?u:(0,w.jsx)(v,{asChild:!0,...c,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)(h,{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 S(e)},[]),(0,w.jsx)(x,{as:V,allowPinchZoom:!0,children:(0,w.jsx)(W,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:s(e.onCloseAutoFocus,e=>{e.preventDefault(),o.current||n.triggerRef.current?.focus()}),onPointerDownOutside:s(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;o.current=t.button===2||n},{checkForDefaultPrevented:!1}),onFocusOutside:s(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,f=k(z,n),p=D(n);return b(),(0,w.jsx)(y,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,w.jsx)(_,{asChild:!0,disableOutsidePointerEvents:o,onInteractOutside:u,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:l,onDismiss:()=>f.onOpenChange(!1),children:(0,w.jsx)(g,{"data-state":Y(f.open),role:`dialog`,id:f.contentId,...p,...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:s(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)(m,{...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-DXVwPYJH.js b/src/www/assets/radio-group-DXVwPYJH.js new file mode 100644 index 0000000..92895fd --- /dev/null +++ b/src/www/assets/radio-group-DXVwPYJH.js @@ -0,0 +1 @@ +import{nu as e}from"./messages-BovT1T-w.js";import{i as t}from"./button-DJA4fnJ8.js";import{n,r,t as i}from"./dist-DlZiaY1y.js";import{t as a}from"./createLucideIcon-D28ivbfF.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-B9ZGMIwY.js b/src/www/assets/rate-B9ZGMIwY.js new file mode 100644 index 0000000..b6e97cf --- /dev/null +++ b/src/www/assets/rate-B9ZGMIwY.js @@ -0,0 +1 @@ +import{Fc as e,Rl as t,at as n,ct as r,it as i,lt as a,nu as o,ot as s,ou as c,rt as l,ru as u,st as d}from"./messages-BovT1T-w.js";import{t as f}from"./button-DJA4fnJ8.js";import{c as p,s as m}from"./zod-Cymc5bS-.js";import{a as h,c as g,i as _,l as v,n as y,o as b,r as x,s as S,t as C}from"./form-DdHiBYMe.js";import{t as w}from"./input-DiRPHDd8.js";import{t as T}from"./page-header-BBJ9dE3-.js";import{a as E,i as D,n as O,t as k}from"./lib-CTYwzR3w.js";var A=c(u(),1),j=o(),M=m({apiUrl:p().url(r()),forcedUsdtRate:p().min(1,d()).refine(e=>!Number.isNaN(Number(e))&&Number(e)>=0,{message:d()})});function N(){let e=D(`rate`),r=E(),a=v({resolver:g(M),defaultValues:{apiUrl:``,forcedUsdtRate:`0`}});(0,A.useEffect)(()=>{let t=e.data?.data;t&&a.reset({apiUrl:k(t,`rate.api_url`),forcedUsdtRate:k(t,`rate.forced_usdt_rate`,`0`)})},[e.data,a]);async function o(t){await O(r.mutateAsync,[{group:`rate`,key:`rate.api_url`,type:`string`,value:t.apiUrl},{group:`rate`,key:`rate.forced_usdt_rate`,type:`string`,value:t.forcedUsdtRate}],s()),await e.refetch()}return(0,j.jsx)(C,{...a,children:(0,j.jsxs)(`form`,{className:`space-y-6`,onSubmit:a.handleSubmit(o),children:[(0,j.jsx)(_,{control:a.control,name:`apiUrl`,render:({field:e})=>(0,j.jsxs)(h,{children:[(0,j.jsx)(b,{children:n()}),(0,j.jsx)(y,{children:(0,j.jsx)(w,{...e})}),(0,j.jsx)(S,{})]})}),(0,j.jsx)(_,{control:a.control,name:`forcedUsdtRate`,render:({field:e})=>(0,j.jsxs)(h,{children:[(0,j.jsx)(b,{children:i()}),(0,j.jsx)(y,{children:(0,j.jsx)(w,{disabled:!0,step:`0.0001`,type:`number`,...e})}),(0,j.jsx)(x,{children:t()}),(0,j.jsx)(S,{})]})}),(0,j.jsx)(`div`,{className:`flex gap-2`,children:(0,j.jsx)(f,{disabled:r.isPending||e.isLoading,type:`submit`,children:l()})})]})})}function P(){return(0,j.jsx)(T,{description:a(),title:e(),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/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-BxpeArPd.js b/src/www/assets/route-BxpeArPd.js new file mode 100644 index 0000000..17e41c6 --- /dev/null +++ b/src/www/assets/route-BxpeArPd.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./useRouter-D03zSgJO.js";import{n as i}from"./useStore-1-QVtiLb.js";import{d as a,f as o,s}from"./ClientOnly-CtYi2y5F.js";import{a as c,n as l,r as u}from"./redirect-dE0wk0WH.js";import{t as d}from"./link-CA4H4hTz.js";import{n as f,t as p}from"./useSearch-B5ZWp8fU.js";import{t as m}from"./useNavigate-Dg8CkCoa.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=t(n(),1),C=e();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-C7cw4pTD.js b/src/www/assets/route-C7cw4pTD.js new file mode 100644 index 0000000..9b00b85 --- /dev/null +++ b/src/www/assets/route-C7cw4pTD.js @@ -0,0 +1 @@ +import{Ds as e,Hl as t,Jl as n,Os as r,Ps as i,Yl as a,n as o,nu as s,ou as c,ru as l}from"./messages-BovT1T-w.js";import{i as u,l as d}from"./auth-store-BpIS8RMn.js";import{n as f}from"./Match-B8-zI9ZJ.js";import{t as p}from"./link-CA4H4hTz.js";import{n as m}from"./Matches-LuvVcyUg.js";import{t as h}from"./dist-15n4mVGL.js";import{A as g,B as _,C as v,D as ee,E as y,F as te,G as b,H as ne,I as re,L as ie,N as x,O as S,S as ae,T as C,V as oe,_ as se,b as ce,d as w,f as T,g as le,i as ue,j as de,k as fe,l as pe,o as me,p as he,t as ge,u as E,v as _e,w as D,x as ve,y as O}from"./search-provider-Cx1K1ilz.js";import{d as k,i as A}from"./button-DJA4fnJ8.js";import{i as j,n as M,o as N,r as P}from"./dist-DG5UMlBd.js";import{t as F}from"./dist-Cp1lAGZy.js";import{i as ye}from"./dist-BEDXr2LC.js";import{a as I,i as be,l as L,o as R,r as z,s as B,t as V}from"./dropdown-menu-CUea1X0A.js";import{t as xe}from"./cookies-BNZcTwGc.js";import{t as Se}from"./chevrons-up-down-iOmAu5Fh.js";import{t as Ce}from"./badge-BAmRBT3U.js";var H=c(l(),1),U=s(),W=`Collapsible`,[we,Te]=N(W),[Ee,G]=we(W),K=H.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:W});return(0,U.jsx)(Ee,{scope:n,disabled:a,contentId:ye(),open:c,onOpenToggle:H.useCallback(()=>l(e=>!e),[l]),children:(0,U.jsx)(h.div,{"data-state":Z(c),"data-disabled":a?``:void 0,...s,ref:t})})});K.displayName=W;var q=`CollapsibleTrigger`,J=H.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,i=G(q,n);return(0,U.jsx)(h.button,{type:`button`,"aria-controls":i.contentId,"aria-expanded":i.open||!1,"data-state":Z(i.open),"data-disabled":i.disabled?``:void 0,disabled:i.disabled,...r,ref:t,onClick:j(e.onClick,i.onOpenToggle)})});J.displayName=q;var Y=`CollapsibleContent`,X=H.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=G(Y,e.__scopeCollapsible);return(0,U.jsx)(F,{present:n||i.open,children:({present:e})=>(0,U.jsx)(De,{...r,ref:t,present:e})})});X.displayName=Y;var De=H.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:i,...a}=e,o=G(Y,n),[s,c]=H.useState(r),l=H.useRef(null),u=k(t,l),d=H.useRef(0),f=d.current,p=H.useRef(0),m=p.current,g=o.open||s,_=H.useRef(g),v=H.useRef(void 0);return H.useEffect(()=>{let e=requestAnimationFrame(()=>_.current=!1);return()=>cancelAnimationFrame(e)},[]),P(()=>{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,U.jsx)(h.div,{"data-state":Z(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 Z(e){return e?`open`:`closed`}var Oe=K;function ke(){return(0,U.jsx)(`a`,{className:A(`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:t()})}function Ae({...e}){return(0,U.jsx)(Oe,{"data-slot":`collapsible`,...e})}function je({...e}){return(0,U.jsx)(J,{"data-slot":`collapsible-trigger`,...e})}function Me({...e}){return(0,U.jsx)(X,{"data-slot":`collapsible-content`,...e})}function Ne({title:e,items:t}){let{state:n,isMobile:r}=x();return(0,U.jsxs)(ce,{children:[(0,U.jsx)(ve,{children:e}),(0,U.jsx)(D,{children:t.map(e=>{let t=`${e.title}-${e.url}`;return e.items?n===`collapsed`&&!r?(0,U.jsx)(Ie,{item:e},t):(0,U.jsx)($,{item:e},t):(0,U.jsx)(Pe,{item:e},t)})})]})}function Q({children:e}){return(0,U.jsx)(Ce,{className:`rounded-full px-1 py-0 text-xs`,children:e})}function Pe({item:e}){let{setOpenMobile:t}=x();return(0,U.jsx)(y,{children:(0,U.jsx)(C,{asChild:!0,isActive:!!m()({to:e.url}),tooltip:e.title,children:(0,U.jsxs)(p,{onClick:()=>t(!1),to:e.url,children:[e.icon&&(0,U.jsx)(e.icon,{}),(0,U.jsx)(`span`,{children:e.title}),e.badge&&(0,U.jsx)(Q,{children:e.badge})]})})})}function $({item:e}){let{setOpenMobile:t}=x(),n=m();return(0,U.jsx)(Ae,{asChild:!0,className:`group/collapsible`,defaultOpen:e.items.some(e=>!!n({to:e.url})),children:(0,U.jsxs)(y,{children:[(0,U.jsx)(je,{asChild:!0,children:(0,U.jsxs)(C,{tooltip:e.title,children:[e.icon&&(0,U.jsx)(e.icon,{}),(0,U.jsx)(`span`,{children:e.title}),e.badge&&(0,U.jsx)(Q,{children:e.badge}),(0,U.jsx)(b,{className:`ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 rtl:rotate-180`})]})}),(0,U.jsx)(Me,{className:`CollapsibleContent`,children:(0,U.jsx)(ee,{children:e.items.map(e=>(0,U.jsx)(Fe,{item:e,onClose:()=>t(!1)},e.title))})})]})})}function Fe({item:e,onClose:t}){return(0,U.jsx)(fe,{children:(0,U.jsx)(S,{asChild:!0,isActive:!!m()({to:e.url}),children:(0,U.jsxs)(p,{onClick:t,to:e.url,children:[e.icon&&(0,U.jsx)(e.icon,{}),(0,U.jsx)(`span`,{children:e.title}),e.badge&&(0,U.jsx)(Q,{children:e.badge})]})})})}function Ie({item:e}){let t=m();return(0,U.jsx)(y,{children:(0,U.jsxs)(V,{children:[(0,U.jsx)(L,{asChild:!0,children:(0,U.jsxs)(C,{isActive:e.items.some(e=>!!t({to:e.url})),tooltip:e.title,children:[e.icon&&(0,U.jsx)(e.icon,{}),(0,U.jsx)(`span`,{children:e.title}),e.badge&&(0,U.jsx)(Q,{children:e.badge}),(0,U.jsx)(b,{className:`ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90`})]})}),(0,U.jsxs)(z,{align:`start`,side:`right`,sideOffset:4,children:[(0,U.jsxs)(R,{children:[e.title,` `,e.badge?`(${e.badge})`:``]}),(0,U.jsx)(B,{}),e.items.map(e=>(0,U.jsx)(Le,{item:e},`${e.title}-${e.url}`))]})]})})}function Le({item:e}){return(0,U.jsx)(I,{asChild:!0,children:(0,U.jsxs)(p,{className:m()({to:e.url})?`bg-secondary`:``,to:e.url,children:[e.icon&&(0,U.jsx)(e.icon,{}),(0,U.jsx)(`span`,{className:`max-w-52 text-wrap`,children:e.title}),e.badge&&(0,U.jsx)(`span`,{className:`ms-auto text-xs`,children:e.badge})]})})}function Re(){let{isMobile:t}=x(),[s,c]=pe(),[l,d]=(0,H.useState)(!1),{user:f}=u(),m=f?.username?.trim()||o(),h=m.charAt(0).toUpperCase()||`U`,g=f?.last_login_at?r({time:me(f.last_login_at)}):e();return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(ie,{onOpenChange:d,open:l,children:(0,U.jsx)(le,{})}),(0,U.jsx)(D,{children:(0,U.jsx)(y,{children:(0,U.jsxs)(V,{children:[(0,U.jsx)(L,{asChild:!0,children:(0,U.jsxs)(C,{className:`data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground`,size:`lg`,children:[(0,U.jsxs)(E,{className:`h-8 w-8 rounded-lg`,children:[(0,U.jsx)(T,{alt:m,src:`/avatars/01.png`}),(0,U.jsx)(w,{className:`rounded-lg`,children:h})]}),(0,U.jsxs)(`div`,{className:`grid flex-1 text-start text-sm leading-tight`,children:[(0,U.jsx)(`span`,{className:`truncate font-semibold`,children:m}),(0,U.jsx)(`span`,{className:`truncate text-xs`,children:g})]}),(0,U.jsx)(Se,{className:`ms-auto size-4`})]})}),(0,U.jsxs)(z,{align:`end`,className:`w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg`,side:t?`bottom`:`right`,sideOffset:4,children:[(0,U.jsx)(R,{className:`p-0 font-normal`,children:(0,U.jsxs)(`div`,{className:`flex items-center gap-2 px-1 py-1.5 text-start text-sm`,children:[(0,U.jsxs)(E,{className:`h-8 w-8 rounded-lg`,children:[(0,U.jsx)(T,{alt:m,src:`/avatars/01.png`}),(0,U.jsx)(w,{className:`rounded-lg`,children:h})]}),(0,U.jsxs)(`div`,{className:`grid flex-1 text-start text-sm leading-tight`,children:[(0,U.jsx)(`span`,{className:`truncate font-semibold`,children:m}),(0,U.jsx)(`span`,{className:`truncate text-xs`,children:g})]})]})}),(0,U.jsx)(B,{}),(0,U.jsxs)(be,{children:[(0,U.jsx)(I,{asChild:!0,children:(0,U.jsxs)(p,{to:`/account/password`,children:[(0,U.jsx)(ne,{}),a()]})}),(0,U.jsxs)(I,{onClick:()=>d(!0),onSelect:e=>e.preventDefault(),children:[(0,U.jsx)(_,{}),i()]})]}),(0,U.jsx)(B,{}),(0,U.jsxs)(I,{onClick:()=>c(!0),variant:`destructive`,children:[(0,U.jsx)(oe,{}),n()]})]})]})})}),(0,U.jsx)(he,{onOpenChange:c,open:!!s})]})}function ze({teams:e}){let t=e[0];return(0,U.jsx)(D,{children:(0,U.jsx)(y,{children:(0,U.jsxs)(C,{className:`cursor-default`,size:`lg`,children:[(0,U.jsx)(`div`,{className:`flex aspect-square size-8 items-center justify-center rounded-lg`,children:(0,U.jsx)(t.logo,{className:`size-8`})}),(0,U.jsxs)(`div`,{className:`grid flex-1 text-start text-sm leading-tight`,children:[(0,U.jsx)(`span`,{className:`truncate font-semibold`,children:t.name}),(0,U.jsx)(`span`,{className:`truncate text-xs`,children:t.plan})]})]})})})}function Be(){let{collapsible:e,variant:t}=re(),n=ue();return(0,U.jsxs)(se,{collapsible:e,variant:t,children:[(0,U.jsx)(ae,{children:(0,U.jsx)(ze,{teams:n.teams})}),(0,U.jsx)(_e,{children:n.navGroups.map(e=>(0,U.jsx)(Ne,{...e},e.title))}),(0,U.jsx)(O,{children:(0,U.jsx)(Re,{})}),(0,U.jsx)(de,{})]})}function Ve({children:e}){return(0,U.jsx)(ge,{children:(0,U.jsx)(te,{children:(0,U.jsxs)(g,{defaultOpen:xe(d)!==`false`,children:[(0,U.jsx)(ke,{}),(0,U.jsx)(Be,{}),(0,U.jsx)(v,{className:A(`@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,U.jsx)(f,{})})]})})})}var He=Ve;export{He as component}; \ No newline at end of file diff --git a/src/www/assets/route-ClLiRb_H.js b/src/www/assets/route-ClLiRb_H.js new file mode 100644 index 0000000..d1fc7a2 --- /dev/null +++ b/src/www/assets/route-ClLiRb_H.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{n as r}from"./Match-B8-zI9ZJ.js";import{i}from"./button-DJA4fnJ8.js";import{u as a}from"./dropdown-menu-CUea1X0A.js";import{n as o,t as s}from"./theme-switch-BjXQNOij.js";import{n as c,t as l}from"./auth-animation-context-zwGs7ZAM.js";var u=t(n());function d(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var p={autoSleep:120,force3D:`auto`,nullTargetWarn:1,units:{lineHeight:``}},m={duration:.5,overwrite:!1,delay:0},h,g,_,v=1e8,y=1/v,b=Math.PI*2,x=b/4,S=0,C=Math.sqrt,w=Math.cos,T=Math.sin,E=function(e){return typeof e==`string`},D=function(e){return typeof e==`function`},O=function(e){return typeof e==`number`},k=function(e){return e===void 0},A=function(e){return typeof e==`object`},j=function(e){return e!==!1},M=function(){return typeof window<`u`},N=function(e){return D(e)||E(e)},P=typeof ArrayBuffer==`function`&&ArrayBuffer.isView||function(){},F=Array.isArray,I=/random\([^)]+\)/g,ee=/,\s*/g,L=/(?:-?\.?\d|\.)+/gi,te=/[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,R=/[-+=.]*\d+[.e-]*\d*[a-z%]*/g,ne=/[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,re=/[+-]=-?[.\d]+/,ie=/[^,'"\[\]\s]+/gi,ae=/^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i,z,oe,se,ce,le={},ue={},de,fe=function(e){return(ue=Ve(e,le))&&Y},pe=function(e,t){return console.warn(`Invalid property`,e,`set to`,t,`Missing plugin? gsap.registerPlugin()`)},me=function(e,t){return!t&&console.warn(e)},he=function(e,t){return e&&(le[e]=t)&&ue&&(ue[e]=t)||le},ge=function(){return 0},_e={suppressEvents:!0,isStart:!0,kill:!1},ve={suppressEvents:!0,kill:!1},ye={suppressEvents:!0},be={},xe=[],Se={},Ce,we={},Te={},Ee=30,De=[],Oe=``,ke=function(e){var t=e[0],n,r;if(A(t)||D(t)||(e=[e]),!(n=(t._gsap||{}).harness)){for(r=De.length;r--&&!De[r].targetTest(t););n=De[r]}for(r=e.length;r--;)e[r]&&(e[r]._gsap||(e[r]._gsap=new mn(e[r],n)))||e.splice(r,1);return e},Ae=function(e){return e._gsap||ke(Ct(e))[0]._gsap},je=function(e,t,n){return(n=e[t])&&D(n)?e[t]():k(n)&&e.getAttribute&&e.getAttribute(t)||n},B=function(e,t){return(e=e.split(`,`)).forEach(t)||e},V=function(e){return Math.round(e*1e5)/1e5||0},H=function(e){return Math.round(e*1e7)/1e7||0},Me=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},Ne=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},qe=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},Je=function(e,t){e.parent&&(!t||e.parent.autoRemoveChildren)&&e.parent.remove&&e.parent.remove(e),e._act=0},Ye=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},Xe=function(e){for(var t=e.parent;t&&t.parent;)t._dirty=1,t.totalDuration(),t=t.parent;return e},Ze=function(e,t,n,r){return e._startAt&&(g?e._startAt.revert(ve):e.vars.immediateRender&&!e.vars.autoRevert||e._startAt.render(t,!0,r))},Qe=function e(t){return!t||t._ts&&e(t.parent)},$e=function(e){return e._repeat?et(e._tTime,e=e.duration()+e._rDelay)*e:0},et=function(e,t){var n=Math.floor(e=H(e/t));return e&&n===e?n-1:n},tt=function(e,t){return(e-t._start)*t._ts+(t._ts>=0?0:t._dirty?t.totalDuration():t._tDur)},nt=function(e){return e._end=H(e._start+(e._tDur/Math.abs(e._ts||e._rts||y)||0))},rt=function(e,t){var n=e._dp;return n&&n.smoothChildTiming&&e._ts&&(e._start=H(n._time-(e._ts>0?t/e._ts:((e._dirty?e.totalDuration():e._tDur)-t)/-e._ts)),nt(e),n._dirty||Ye(n,e)),e},it=function(e,t){var n;if((t._time||!t._dur&&t._initted||t._starty)&&t.render(n,!0)),Ye(e,t)._dp&&e._initted&&e._time>=e._dur&&e._ts){if(e._dur=0&&n.totalTime(n._tTime),n=n._dp;e._zTime=-y}},at=function(e,t,n,r){return t.parent&&Je(t),t._start=H((O(n)?n:n||e!==z?ht(e,n,t):e._time)+t._delay),t._end=H(t._start+(t.totalDuration()/Math.abs(t.timeScale())||0)),Ke(e,t,`_first`,`_last`,e._sort?`_start`:0),lt(t)||(e._recent=t),r||it(e,t),e._ts<0&&rt(e,e._tTime),e},ot=function(e,t){return(le.ScrollTrigger||pe(`scrollTrigger`,t))&&le.ScrollTrigger.create(t,e)},st=function(e,t,n,r,i){if(Sn(e,t,i),!e._initted)return 1;if(!n&&e._pt&&!g&&(e._dur&&e.vars.lazy!==!1||!e._dur&&e.vars.lazy)&&Ce!==en.frame)return xe.push(e),e._lazy=[i,r],1},ct=function e(t){var n=t.parent;return n&&n._ts&&n._initted&&!n._lock&&(n.rawTime()<0||e(n))},lt=function(e){var t=e.data;return t===`isFromStart`||t===`isStart`},ut=function(e,t,n,r){var i=e.ratio,a=t<0||!t&&(!e._start&&ct(e)&&!(!e._initted&<(e))||(e._ts<0||e._dp._ts<0)&&!lt(e))?0:1,o=e._rDelay,s=0,c,l,u;if(o&&e._repeat&&(s=vt(0,e._tDur,t),l=et(s,o),e._yoyo&&l&1&&(a=1-a),l!==et(e._tTime,o)&&(i=1-a,e.vars.repeatRefresh&&e._initted&&e.invalidate())),a!==i||g||r||e._zTime===y||!t&&e._zTime){if(!e._initted&&st(e,t,r,n,s))return;for(u=e._zTime,e._zTime=t||(n?y: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&&Ze(e,t,n,!0),e._onUpdate&&!n&&Bt(e,`onUpdate`),s&&e._repeat&&!n&&e.parent&&Bt(e,`onRepeat`),(t>=e._tDur||t<0)&&e.ratio===a&&(a&&Je(e,1),!n&&!g&&(Bt(e,a?`onComplete`:`onReverseComplete`,!0),e._prom&&e._prom()))}else e._zTime||=t},dt=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&&rt(e,e._tTime=e._tDur*o),e.parent&&nt(e),n||Ye(e.parent,e),e},pt=function(e){return e instanceof K?Ye(e):ft(e,e._dur)},mt={_start:0,endTime:ge,totalDuration:ge},ht=function e(t,n,r){var i=t.labels,a=t._recent||mt,o=t.duration()>=v?a.endTime(!1):t._dur,s,c,l;return E(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*(F(r)?r[0]:r).totalDuration()),s>1?e(t,n.substr(0,s-1),r)+c:o+c)):n==null?o:+n},gt=function(e,t,n){var r=O(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=j(s.vars.inherit)&&s.parent;a.immediateRender=j(o.immediateRender),e<2?a.runBackwards=1:a.startAt=t[i-1]}return new q(t[0],a,t[i+1])},_t=function(e,t){return e||e===0?t(e):t},vt=function(e,t,n){return nt?t:n},U=function(e,t){return!E(e)||!(t=ae.exec(e))?``:t[1]},yt=function(e,t,n){return _t(n,function(n){return vt(e,t,n)})},bt=[].slice,xt=function(e,t){return e&&A(e)&&`length`in e&&(!t&&!e.length||e.length-1 in e&&A(e[0]))&&!e.nodeType&&e!==oe},St=function(e,t,n){return n===void 0&&(n=[]),e.forEach(function(e){var r;return E(e)&&!t||xt(e,1)?(r=n).push.apply(r,Ct(e)):n.push(e)})||n},Ct=function(e,t,n){return _&&!t&&_.selector?_.selector(e):E(e)&&!n&&(se||!tn())?bt.call((t||ce).querySelectorAll(e),0):F(e)?St(e,n):xt(e)?bt.call(e,0):e?[e]:[]},wt=function(e){return e=Ct(e)[0]||me(`Invalid scope`)||{},function(t){var n=e.current||e.nativeElement||e;return Ct(t,n.querySelectorAll?n:n===e?me(`Invalid scope`)||ce.createElement(`div`):e)}},Tt=function(e){return e.sort(function(){return .5-Math.random()})},Et=function(e){if(D(e))return e;var t=A(e)?e:{each:e},n=ln(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 E(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,_,y,b,x,S,w;if(!p){if(w=t.grid===`auto`?0:(t.grid||[1,v])[1],!w){for(x=-v;x<(x=d[w++].getBoundingClientRect().left)&&wx&&(x=y),yf?f-1:c?c===`y`?f/w:w:Math.max(w,f/w))||0)*(r===`edges`?-1:1),p.b=f<0?i-f:i,p.u=U(t.amount||t.each)||0,n=n&&f<0?cn(n):n}return f=(p[e]-p.min)/p.max||0,H(p.b+(n?n(f):f)*p.v)+p.u}},Dt=function(e){var t=10**((e+``).split(`.`)[1]||``).length;return function(n){var r=H(Math.round(parseFloat(n)/e)*e*t);return(r-r%1)/t+(O(n)?0:U(n))}},Ot=function(e,t){var n=F(e),r,i;return!n&&A(e)&&(r=n=e.radius||v,e.values?(e=Ct(e.values),(i=!O(e[0]))&&(r*=r)):e=Dt(e.increment)),_t(t,n?D(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=v,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)})},It=function(e){return e.replace(I,function(e){var t=e.indexOf(`[`)+1,n=e.substring(t||7,t?e.indexOf(`]`):e.length-1).split(ee);return kt(t?n:+n[0],t?0:+n[1],+n[2]||1e-5)})},Lt=function(e,t,n,r,i){var a=t-e,o=r-n;return _t(i,function(t){return n+((t-e)/a*o||0)})},Rt=function e(t,n,r,i){var a=isNaN(t+n)?0:function(e){return(1-e)*t+e*n};if(!a){var o=E(t),s={},c,l,u,d,f;if(r===!0&&(i=1)&&(r=null),o)t={p:t},n={p:n};else if(F(t)&&!F(n)){for(u=[],d=t.length,f=d-2,l=1;l(o=Math.abs(o))&&(s=a,i=o);return s},Bt=function(e,t,n){var r=e.vars,i=r[t],a=_,o=e._ctx,s,c,l;if(i)return s=r[t+`Params`],c=r.callbackScope||e,n&&xe.length&&Pe(),o&&(_=o),l=s?i.apply(c,s):i.call(c),_=a,l},Vt=function(e){return Je(e),e.scrollTrigger&&e.scrollTrigger.kill(!!g),e.progress()<1&&Bt(e,`onInterrupt`),e},Ht,Ut=[],Wt=function(e){if(e)if(e=!e.name&&e.default||e,M()||e.headless){var t=e.name,n=D(e),r=t&&!n&&e.init?function(){this._props=[]}:e,i={init:ge,render:Ln,add:_n,kill:zn,modifier:Rn,rawVars:0},a={targetTest:0,get:0,getSetter:Nn,aliases:{},register:0};if(tn(),e!==r){if(we[t])return;ze(r,ze(Ue(e,i),a)),Ve(r.prototype,Ve(i,Ue(e,a))),we[r.prop=t]=r,e.targetTest&&(De.push(r),be[t]=1),t=(t===`css`?`CSS`:t.charAt(0).toUpperCase()+t.substr(1))+`Plugin`}he(t,r),e.register&&e.register(Y,r,J)}else Ut.push(e)},W=255,Gt={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]},Kt=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},qt=function(e,t,n){var r=e?O(e)?[e>>16,e>>8&W,e&W]:0:Gt.black,i,a,o,s,c,l,u,d,f,p;if(!r){if(e.substr(-1)===`,`&&(e=e.substr(0,e.length-1)),Gt[e])r=Gt[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(L),!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]=Kt(s+1/3,i,a),r[1]=Kt(s,i,a),r[2]=Kt(s-1/3,i,a);else if(~e.indexOf(`=`))return r=e.match(te),n&&r.length<4&&(r[3]=1),r}else r=e.match(L)||Gt.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}(),tn=function(){return!$t&&en.wake()},G={},nn=/^[\d.\-M][\d.\-,\s]/,rn=/["']/g,an=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(`{`)?[an(t[1])]:on(e).split(`,`).map(Le)):G._CE&&nn.test(e)?G._CE(``,e):n},cn=function(e){return function(t){return 1-e(1-t)}},ln=function(e,t){return e&&(D(e)?e:G[e]||sn(e))||t},un=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 B(e,function(e){for(var t in G[e]=le[e]=i,G[a=e.toLowerCase()]=n,i)G[a+(t===`easeIn`?`.in`:t===`easeOut`?`.out`:`.inOut`)]=G[e+`.`+t]=i[t]}),i},dn=function(e){return function(t){return t<.5?(1-e(1-t*2))/2:.5+e((t-.5)*2)/2}},fn=function e(t,n,r){var i=n>=1?n:1,a=(r||(t?.3:.45))/(n<1?n:1),o=a/b*(Math.asin(1/i)||0),s=function(e){return e===1?1:i*2**(-10*e)*T((e-o)*a)+1},c=t===`out`?s:t===`in`?function(e){return 1-s(1-e)}:dn(s);return a=b/a,c.config=function(n,r){return e(t,n,r)},c},pn=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)}:dn(r);return i.config=function(n){return e(t,n)},i};B(`Linear,Quad,Cubic,Quart,Quint,Strong`,function(e,t){var n=t<5?t+1:t;un(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,un(`Elastic`,fn(`in`),fn(`out`),fn()),(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,ft(this,this._repeat<0?e:(e-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},t.totalTime=function(e,t){if(tn(),!arguments.length)return this._tTime;var n=this._dp;if(n&&n.smoothChildTiming&&this._ts){for(rt(this,e),!n._dp||n.parent||it(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)&&at(this._dp,this,this._start-this._delay)}return(this._tTime!==e||!this._dur&&!t||this._initted&&Math.abs(this._zTime)===y||!this._initted&&this._dur&&e||!e&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=e),Ie(this,e,t)),this},t.time=function(e,t){return arguments.length?this.totalTime(Math.min(this.totalDuration(),e+$e(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)+$e(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?et(this._tTime,n)+1:1},t.timeScale=function(e,t){if(!arguments.length)return this._rts===-y?0:this._rts;if(this._rts===e)return this;var n=this.parent&&this._ts?tt(this.parent._time,this):this._tTime;return this._rts=+e||0,this._ts=this._ps||e===-y?0:this._rts,this.totalTime(vt(-Math.abs(this._delay),this.totalDuration(),n),t!==!1),nt(this),Xe(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):(tn(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,this.progress()===1&&Math.abs(this._zTime)!==y&&(this._tTime-=y)))),this):this._ps},t.startTime=function(e){if(arguments.length){this._start=H(e);var t=this.parent||this._dp;return t&&(t._sort||!this.parent)&&at(t,this,this._start-this._delay),this}return this._start},t.endTime=function(e){return this._start+(j(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?tt(t.rawTime(e),this):this._tTime:this._tTime},t.revert=function(e){e===void 0&&(e=ye);var t=g;return g=e,Fe(this)&&(this.timeline&&this.timeline.revert(e),this.totalTime(-.01,e.suppressEvents)),this.data!==`nested`&&e.kill!==!1&&this.kill(),g=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,pt(this)):this._repeat===-2?1/0:this._repeat},t.repeatDelay=function(e){if(arguments.length){var t=this._time;return this._rDelay=e,pt(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(ht(this,e),j(t))},t.restart=function(e,t){return this.play().totalTime(e?-this._delay:0,j(t)),this._dur||(this._zTime=-y),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?-y:0)),this):this._rts<0},t.invalidate=function(){return this._initted=this._act=0,this._zTime=-y,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=D(e)?e:Re,a=function(){var e=t.then;t.then=null,n&&n(),D(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(){Vt(this)},e}();ze(hn.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:-y,_prom:0,_ps:!1,_rts:1});var K=function(e){f(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=j(t.sortChildren),z&&at(t.parent||z,d(r),n),t.reversed&&r.reverse(),t.paused&&r.paused(!0),t.scrollTrigger&&ot(d(r),t.scrollTrigger),r}var n=t.prototype;return n.to=function(e,t,n){return gt(0,arguments,this),this},n.from=function(e,t,n){return gt(1,arguments,this),this},n.fromTo=function(e,t,n,r){return gt(2,arguments,this),this},n.set=function(e,t,n){return t.duration=0,t.parent=this,We(t).repeatDelay||(t.repeat=0),t.immediateRender=!!t.immediateRender,new q(e,t,ht(this,n),1),this},n.call=function(e,t,n){return at(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,ht(this,i)),this},n.staggerFrom=function(e,t,n,r,i,a,o){return n.runBackwards=1,We(n).immediateRender=j(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,We(r).immediateRender=j(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:H(e),s=this._zTime<0!=e<0&&(this._initted||!a),c,l,u,d,f,p,m,h,_,v,b,x;if(this!==z&&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,_=this._start,h=this._ts,p=!h,s&&(a||(r=this._zTime),(e||!t)&&(this._zTime=e)),this._repeat){if(b=this._yoyo,f=a+this._rDelay,this._repeat<-1&&e<0)return this.totalTime(f*100+e,t,n);if(c=H(o%f),o===i?(d=this._repeat,c=a):(v=H(o/f),d=~~v,d&&d===v&&(c=a,d--),c>a&&(c=a)),v=et(this._tTime,f),!r&&this._tTime&&v!==d&&this._tTime-v*f-this._dur<=0&&(v=d),b&&d&1&&(c=a-c,x=1),d!==v&&!this._lock){var S=b&&v&1,C=S===(b&&d&1);if(d=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=-y);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||g&&Fe(l)),c!==this._time||!this._ts&&!p){m=0,u&&(o+=this._zTime=w?-y:y);break}}l=u}}if(m&&!t&&(this.pause(),m.render(c>=r?0:-y)._zTime=c>=r?1:-1,this._ts))return this._start=_,nt(this),this.render(e,t,n);this._onUpdate&&!t&&Bt(this,`onUpdate`,!0),(o===i&&this._tTime>=this.totalDuration()||!o&&r)&&(_===this._start||Math.abs(h)!==Math.abs(this._ts))&&(this._lock||((e||!a)&&(o===i&&this._ts>0||!o&&this._ts<0)&&Je(this,1),!t&&!(e<0&&!r)&&(o||r||!i)&&(Bt(this,o===i&&e>=0?`onComplete`:`onReverseComplete`,!0),this._prom&&!(o0)&&this._prom())))}return this},n.add=function(e,t){var n=this;if(O(t)||(t=ht(this,t,e)),!(e instanceof hn)){if(F(e))return e.forEach(function(e){return n.add(e,t)}),this;if(E(e))return this.addLabel(e,t);if(D(e))e=q.delayedCall(0,e);else return this}return this===e?this:at(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=-v);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 E(e)?this.removeLabel(e):D(e)?this.killTweensOf(e):(e.parent===this&&qe(this,e),e===this._recent&&(this._recent=this._last),Ye(this))},n.totalTime=function(t,n){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=H(en.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]=ht(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||ge,n);return r.data=`isPause`,this._hasPause=1,at(this,r,ht(this,e))},n.removePause=function(e){var t=this._first;for(e=ht(this,e);t;)t._start===e&&t.data===`isPause`&&Je(t),t=t._next},n.killTweensOf=function(e,t,n){for(var r=this.getTweensOf(e,n),i=r.length;i--;)bn!==r[i]&&r[i].kill(e,t);return this},n.getTweensOf=function(e,t){for(var n=[],r=Ct(e),i=this._first,a=O(t),o;i;)i instanceof q?Ne(i._targets,r)&&(a?(!bn||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=ht(n,e),i=t,a=i.startAt,o=i.onStart,s=i.onStartParams,c=i.immediateRender,l,u=q.to(n,ze({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())||y,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&&ft(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,ze({startAt:{time:ht(this,e)}},n))},n.recent=function(){return this._recent},n.nextLabel=function(e){return e===void 0&&(e=this._time),zt(this,ht(this,e))},n.previousLabel=function(e){return e===void 0&&(e=this._time),zt(this,ht(this,e),1)},n.currentLabel=function(e){return arguments.length?this.seek(e,!0):this.previousLabel(this._time+y)},n.shiftChildren=function(e,t,n){n===void 0&&(n=0);var r=this._first,i=this.labels,a;for(e=H(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 Ye(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={}),Ye(this)},n.totalDuration=function(e){var t=0,n=this,r=n._last,i=v,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,at(n,r,o-r._delay,1)._lock=0):i=o,o<0&&r._ts&&(t-=o,(!s&&!n._dp||s&&s.smoothChildTiming)&&(n._start+=H(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;ft(n,n===z&&n._time>t?n._time:t,1,1),n._dirty=0}return n._tDur},t.updateRoot=function(e){if(z._ts&&(Ie(z,tt(e,z)),Ce=en.frame),en.frame>=Ee){Ee+=p.autoSleep||120;var t=z._first;if((!t||!t._ts)&&p.autoSleep&&en._listeners.length<2){for(;t&&!t._ts;)t=t._next;t||en.sleep()}}},t}(hn);ze(K.prototype,{_lock:0,_hasPause:0,_forcing:0});var gn=function(e,t,n,r,i,a,o){var s=new J(this._pt,e,t,0,1,In,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=It(r)),a&&(_=[n,r],a(_,e,t),n=_[0],r=_[1]),d=n.match(ne)||[];u=ne.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)===`=`?Me(h,p)-h:parseFloat(p)-h,m:f&&f<4?Math.round:0},c=ne.lastIndex);return s.c=c`)}),x.duration();else{for(T in C={},m)T===`ease`||T===`easeEach`||Tn(T,m[T],C,m.easeEach);for(T in C)for(ee=C[T].sort(function(e,t){return e.t-t.t}),I=0,S=0;Si-y&&!o?i:ea&&(c=a)),p=this._yoyo&&u&1,p&&(c=a-c),f=et(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(H(d*u),!0).invalidate()._lock=0)}if(!this._initted){if(st(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)&&Je(this,1),!t&&!(o&&!r)&&(s||r||p)&&(Bt(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){$t||en.wake(),this._ts||this.play();var a=Math.min(this._dur,(this._dp._time-this._start)*this._ts),o;return this._initted||Sn(this,a),o=this._ease(a/this._dur),Cn(this,e,t,n,r,o,a,i)?this.resetTo(e,t,n,r,1):(rt(this,0),this.parent||Ke(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?Vt(this):this.scrollTrigger&&this.scrollTrigger.kill(!!g),this;if(this.timeline){var n=this.timeline.totalDuration();return this.timeline.killTweensOf(e,t,bn&&bn.vars.overwrite!==!0)._first||Vt(this),this.parent&&n!==this.timeline.totalDuration()&&ft(this,this._dur*this.timeline._tDur/n,0,1),this}var r=this._targets,i=e?Ct(e):r,a=this._ptLookup,o=this._pt,s,c,l,u,d,f,p;if((!t||t===`all`)&&Ge(r,i))return t===`all`&&(this._pt=0),Vt(this);for(s=this._op=this._op||[],t!==`all`&&(E(t)&&(d={},B(t,function(e){return d[e]=1}),t=d),t=wn(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)&&qe(this,f,`_pt`),delete c[d]),l!==`all`&&(l[d]=1);return this._initted&&!this._pt&&o&&Vt(this),this},t.to=function(e,n){return new t(e,n,arguments[2])},t.from=function(e,t){return gt(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 gt(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 z.killTweensOf(e,t,n)},t}(hn);ze(q.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),B(`staggerTo,staggerFrom,staggerFromTo`,function(e){q[e]=function(){var t=new K,n=bt.call(arguments,0);return n.splice(e===`staggerFromTo`?5:4,0,0),t[e].apply(t,n)}});var kn=function(e,t,n){return e[t]=n},An=function(e,t,n){return e[t](n)},jn=function(e,t,n,r){return e[t](r.fp,n)},Mn=function(e,t,n){return e.setAttribute(t,n)},Nn=function(e,t){return D(e[t])?An:k(e[t])&&e.setAttribute?Mn:kn},Pn=function(e,t){return t.set(t.t,t.p,Math.round((t.s+t.c*e)*1e6)/1e6,t)},Fn=function(e,t){return t.set(t.t,t.p,!!(t.s+t.c*e),t)},In=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)},Ln=function(e,t){for(var n=t._pt;n;)n.r(e,n.d),n=n._next},Rn=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},zn=function(e){for(var t=this._pt,n,r;t;)r=t._next,t.p===e&&!t.op||t.op===e?qe(this,t,`_pt`):t.dep||(n=1),t=r;return!n},Bn=function(e,t,n,r){r.mSet(e,t,r.m.call(r.tween,n,r.mt),r)},Vn=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||Pn,this.d=o||this,this.set=s||kn,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=Bn,this.m=e,this.mt=n,this.tween=t},e}();B(Oe+`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 be[e]=1}),le.TweenMax=le.TweenLite=q,le.TimelineLite=le.TimelineMax=K,z=new K({sortChildren:!1,defaults:m,autoRemoveChildren:!0,id:`root`,smoothChildTiming:!0}),p.stringFilter=Qt;var Hn=[],Un={},Wn=[],Gn=0,Kn=0,qn=function(e){return(Un[e]||Wn).map(function(e){return e()})},Jn=function(){var e=Date.now(),t=[];e-Gn>2&&(qn(`matchMediaInit`),Hn.forEach(function(e){var n=e.queries,r=e.conditions,i,a,o,s;for(a in n)i=oe.matchMedia(n[a]).matches,i&&(o=1),i!==r[a]&&(r[a]=i,s=1);s&&(e.revert(),o&&t.push(e))}),qn(`matchMediaRevert`),t.forEach(function(e){return e.onMatch(e,function(t){return e.add(null,t)})}),Gn=e,qn(`matchMedia`))},Yn=function(){function e(e,t){this.selector=t&&wt(t),this.data=[],this._r=[],this.isReverted=!1,this.id=Kn++,e&&this.add(e)}var t=e.prototype;return t.add=function(e,t,n){D(e)&&(n=t,t=e,e=D);var r=this,i=function(){var e=_,i=r.selector,a;return e&&e!==r&&e.data.push(r),n&&(r.selector=wt(n)),_=r,a=t.apply(r,arguments),D(a)&&r._r.push(a),_=e,r.selector=i,r.isReverted=!1,a};return r.last=i,e===D?i(r,function(e){return r.add(null,e)}):e?r[e]=i:i},t.ignore=function(e){var t=_;_=null,e(this),_=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=Hn.length;r--;)Hn[r].id===this.id&&Hn.splice(r,1)},t.revert=function(e){this.kill(e||{})},e}(),Xn=function(){function e(e){this.contexts=[],this.scope=e,_&&_.data.push(this)}var t=e.prototype;return t.add=function(e,t,n){A(e)||(e={matches:e});var r=new Yn(0,n||this.scope),i=r.conditions={},a,o,s;for(o in _&&!r.selector&&(r.selector=_.selector),this.contexts.push(r),t=r.add(`onMatch`,t),r.queries=e,e)o===`all`?s=1:(a=oe.matchMedia(e[o]),a&&(Hn.indexOf(r)<0&&Hn.push(r),(i[o]=a.matches)&&(s=1),a.addListener?a.addListener(Jn):a.addEventListener(`change`,Jn)));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}(),Zn={registerPlugin:function(){[...arguments].forEach(function(e){return Wt(e)})},timeline:function(e){return new K(e)},getTweensOf:function(e,t){return z.getTweensOf(e,t)},getProperty:function(e,t,n,r){E(e)&&(e=Ct(e)[0]);var i=Ae(e||{}).get,a=n?Re:Le;return n===`native`&&(n=``),e&&(t?a((we[t]&&we[t].get||i)(e,t,n,r)):function(t,n,r){return a((we[t]&&we[t].get||i)(e,t,n,r))})},quickSetter:function(e,t,n){if(e=Ct(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=we[t],o=Ae(e),s=o.harness&&(o.harness.aliases||{})[t]||t,c=a?function(t){var r=new a;Ht._pt=0,r.init(e,n?t+n:t,Ht,0,[e]),r.render(1,r),Ht._pt&&Ln(1,Ht)}: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,ze((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 z.getTweensOf(e,!0).length>0},defaults:function(e){return e&&e.ease&&(e.ease=ln(e.ease,m.ease)),He(m,e||{})},config:function(e){return He(p,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&&!we[e]&&!le[e]&&me(t+` effect requires `+e+` plugin.`)}),Te[t]=function(e,t,r){return n(Ct(e),ze(t||{},i),r)},a&&(K.prototype[t]=function(e,n,r){return this.add(Te[t](e,A(n)?n:(r=n)&&{},this),r)})},registerEase:function(e,t){G[e]=ln(t)},parseEase:function(e,t){return arguments.length?ln(e,t):G},getById:function(e){return z.getById(e)},exportRoot:function(e,t){e===void 0&&(e={});var n=new K(e),r,i;for(n.smoothChildTiming=j(e.smoothChildTiming),z.remove(n),n._dp=0,n._time=n._tTime=z._time,r=z._first;r;)i=r._next,(t||!(!r._dur&&r instanceof q&&r.vars.onComplete===r._targets[0]))&&at(n,r,r._start-r._delay),r=i;return at(z,n,0),n},context:function(e,t){return e?new Yn(e,t):_},matchMedia:function(e){return new Xn(e)},matchMediaRefresh:function(){return Hn.forEach(function(e){var t=e.conditions,n,r;for(r in t)t[r]&&(t[r]=!1,n=1);n&&e.revert()})||Jn()},addEventListener:function(e,t){var n=Un[e]||(Un[e]=[]);~n.indexOf(t)||n.push(t)},removeEventListener:function(e,t){var n=Un[e],r=n&&n.indexOf(t);r>=0&&n.splice(r,1)},utils:{wrap:Pt,wrapYoyo:Ft,distribute:Et,random:kt,snap:Ot,normalize:Mt,getUnit:U,clamp:yt,splitColor:qt,toArray:Ct,selector:wt,mapRange:Lt,pipe:At,unitize:jt,interpolate:Rt,shuffle:Tt},install:fe,effects:Te,ticker:en,updateRoot:K.updateRoot,plugins:we,globalTimeline:z,core:{PropTween:J,globals:he,Tween:q,Timeline:K,Animation:hn,getCache:Ae,_removeLinkedListItem:qe,reverting:function(){return g},context:function(e){return e&&_&&(_.data.push(e),e._ctx=_),_},suppressOverwrites:function(e){return h=e}}};B(`to,from,fromTo,delayedCall,set,killTweensOf`,function(e){return Zn[e]=q[e]}),en.add(K.updateRoot),Ht=Zn.to({},{duration:0});var Qn=function(e,t){for(var n=e._pt;n&&n.p!==t&&n.op!==t&&n.fp!==t;)n=n._next;return n},$n=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=Qn(a,r)),a&&a.modifier&&a.modifier(t[r],e,n[i],r))},er=function(e,t){return{name:e,headless:1,rawVars:1,init:function(e,n,r){r._onInit=function(e){var r,i;if(E(n)&&(r={},B(n,function(e){return r[e]=1}),n=r),t){for(i in r={},n)r[i]=t(n[i]);n=r}$n(e,n)}}}},Y=Zn.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;)g?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)}},er(`roundProps`,Dt),er(`modifiers`),er(`snap`,Ot))||Zn;q.version=K.version=Y.version=`3.15.0`,de=1,M()&&tn(),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 tr,nr,rr,ir,ar,or,sr,cr=function(){return typeof window<`u`},lr={},ur=180/Math.PI,dr=Math.PI/180,fr=Math.atan2,pr=1e8,mr=/([A-Z])/g,hr=/(left|right|width|margin|padding|x)/i,gr=/[\s,\(]\S/,_r={autoAlpha:`opacity,visibility`,scale:`scaleX,scaleY`,alpha:`opacity`},vr=function(e,t){return t.set(t.t,t.p,Math.round((t.s+t.c*e)*1e4)/1e4+t.u,t)},yr=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)},br=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)},xr=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)},Sr=function(e,t){var n=t.s+t.c*e;t.set(t.t,t.p,~~(n+(n<0?-.5:.5))+t.u,t)},Cr=function(e,t){return t.set(t.t,t.p,e?t.e:t.b,t)},wr=function(e,t){return t.set(t.t,t.p,e===1?t.e:t.b,t)},Tr=function(e,t,n){return e.style[t]=n},Er=function(e,t,n){return e.style.setProperty(t,n)},Dr=function(e,t,n){return e._gsap[t]=n},Or=function(e,t,n){return e._gsap.scaleX=e._gsap.scaleY=n},kr=function(e,t,n,r,i){var a=e._gsap;a.scaleX=a.scaleY=n,a.renderTransform(i,a)},Ar=function(e,t,n,r,i){var a=e._gsap;a[t]=n,a.renderTransform(i,a)},X=`transform`,Z=X+`Origin`,jr=function e(t,n){var r=this,i=this.target,a=i.style,o=i._gsap;if(t in lr&&a){if(this.tfm=this.tfm||{},t!==`transform`)t=_r[t]||t,~t.indexOf(`,`)?t.split(`,`).forEach(function(e){return r.tfm[e]=Xr(i,e)}):this.tfm[t]=o.x?o[t]:Xr(i,t),t===Z&&(this.tfm.zOrigin=o.zOrigin);else return _r.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])},Mr=function(e){e.translate&&(e.removeProperty(`translate`),e.removeProperty(`scale`),e.removeProperty(`rotate`))},Nr=function(){var e=this.props,t=this.target,n=t.style,r=t._gsap,i,a;for(i=0;i=0?Rr[i]:``)+e},Br=function(){cr()&&window.document&&(tr=window,nr=tr.document,rr=nr.documentElement,ar=Ir(`div`)||{style:{}},Ir(`div`),X=zr(X),Z=X+`Origin`,ar.style.cssText=`border-width:0;line-height:0;position:absolute;padding:0`,Fr=!!zr(`perspective`),sr=Y.core.reverting,ir=1)},Vr=function(e){var t=e.ownerSVGElement,n=Ir(`svg`,t&&t.getAttribute(`xmlns`)||`http://www.w3.org/2000/svg`),r=e.cloneNode(!0),i;r.style.display=`block`,n.appendChild(r),rr.appendChild(n);try{i=r.getBBox()}catch{}return n.removeChild(r),rr.removeChild(n),i},Hr=function(e,t){for(var n=t.length;n--;)if(e.hasAttribute(t[n]))return e.getAttribute(t[n])},Ur=function(e){var t,n;try{t=e.getBBox()}catch{t=Vr(e),n=1}return t&&(t.width||t.height)||n||(t=Vr(e)),t&&!t.width&&!t.x&&!t.y?{x:+Hr(e,[`x`,`cx`,`x1`])||0,y:+Hr(e,[`y`,`cy`,`y1`])||0,width:0,height:0}:t},Wr=function(e){return!!(e.getCTM&&(!e.parentNode||e.ownerSVGElement)&&Ur(e))},Gr=function(e,t){if(t){var n=e.style,r;t in lr&&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(mr,`-$1`).toLowerCase())):n.removeAttribute(t)}},Kr=function(e,t,n,r,i,a){var o=new J(e._pt,t,n,0,1,a?wr:Cr);return e._pt=o,o.b=r,o.e=i,e._props.push(n),o},qr={deg:1,rad:1,turn:1},Jr={grid:1,flex:1},Yr=function e(t,n,r,i){var a=parseFloat(r)||0,o=(r+``).trim().substr((a+``).length)||`px`,s=ar.style,c=hr.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||qr[i]||qr[o])return a;if(o!==`px`&&!f&&(a=e(t,n,r,`px`)),_=t.getCTM&&Wr(t),(p||o===`%`)&&(lr[n]||~n.indexOf(`adius`)))return m=_?t.getBBox()[c?`width`:`height`]:t[u],V(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===nr||!h.appendChild)&&(h=nr.body),g=h._gsap,g&&p&&g.width&&c&&g.time===en.time&&!g.uncache)return V(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:Gr(t,n)}else (p||o===`%`)&&!Jr[Lr(h,`display`)]&&(s.position=Lr(t,`position`)),h===t&&(s.position=`static`),h.appendChild(ar),m=ar[u],h.removeChild(ar),s.position=`absolute`;return c&&p&&(g=Ae(h),g.time=en.time,g.width=h[u]),V(f?m*a/d:m&&a?d/m*a:0)},Xr=function(e,t,n,r){var i;return ir||Br(),t in _r&&t!==`transform`&&(t=_r[t],~t.indexOf(`,`)&&(t=t.split(`,`)[0])),lr[t]&&t!==`transform`?(i=ci(e,r),i=t===`transformOrigin`?i.svg?i.origin:li(Lr(e,Z))+` `+i.zOrigin+`px`:i[t]):(i=e.style[t],(!i||i===`auto`||r||~(i+``).indexOf(`calc(`))&&(i=ti[t]&&ti[t](e,t,n)||Lr(e,t)||je(e,t)||+(t===`opacity`))),n&&!~(i+``).trim().indexOf(` `)?Yr(e,t,i,n)+n:i},Zr=function(e,t,n,r){if(!n||n===`none`){var i=zr(t,e,1),a=i&&Lr(e,i,1);a&&a!==n?(t=i,n=a):t===`borderColor`&&(n=Lr(e,`borderTopColor`))}var o=new J(this._pt,e.style,t,0,1,In),s=0,c=0,l,u,d,f,m,h,g,_,v,y,b,x;if(o.b=n,o.e=r,n+=``,r+=``,r.substring(0,6)===`var(--`&&(r=Lr(e,r.substring(4,r.indexOf(`)`)))),r===`auto`&&(h=e.style[t],e.style[t]=r,r=Lr(e,t)||r,h?e.style[t]=h:Gr(e,t)),l=[n,r],Qt(l),n=l[0],r=l[1],d=n.match(R)||[],x=r.match(R)||[],x.length){for(;u=R.exec(r);)g=u[0],v=r.substring(s,u.index),m?m=(m+1)%5:(v.substr(-5)===`rgba(`||v.substr(-5)===`hsla(`)&&(m=1),g!==(h=d[c++]||``)&&(f=parseFloat(h)||0,b=h.substr((f+``).length),g.charAt(1)===`=`&&(g=Me(f,g)+b),_=parseFloat(g),y=g.substr((_+``).length),s=R.lastIndex-y.length,y||(y=y||p.units[t]||b,s===r.length&&(r+=y,o.e+=y)),b!==y&&(f=Yr(e,t,h,y)||0),o._pt={_next:o._pt,p:v||c===1?v:`,`,s:f,c:_-f,m:m&&m<4||t===`zIndex`?Math.round:0});o.c=s-1;)o=i[c],lr[o]&&(s=1,o=o===`transformOrigin`?Z:X),Gr(n,o);s&&(Gr(n,X),a&&(a.svg&&n.removeAttribute(`transform`),r.scale=r.rotate=r.translate=`none`,ci(n,1),a.uncache=1,Mr(r)))}},ti={clearProps:function(e,t,n,r,i){if(i.data!==`isFromStart`){var a=e._pt=new J(e._pt,t,n,0,0,ei);return a.u=r,a.pr=-10,a.tween=i,e._props.push(n),1}}},ni=[1,0,0,1,0,0],ri={},ii=function(e){return e===`matrix(1, 0, 0, 1, 0, 0)`||e===`none`||!e},ai=function(e){var t=Lr(e,X);return ii(t)?ni:t.substr(7).match(te).map(V)},oi=function(e,t){var n=e._gsap||Ae(e),r=e.style,i=ai(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`?ni:i):(i===ni&&!e.offsetParent&&e!==rr&&!n.svg&&(s=r.display,r.display=`block`,a=e.parentNode,(!a||!e.offsetParent&&!e.getBoundingClientRect().width)&&(c=1,o=e.nextElementSibling,rr.appendChild(e)),i=ai(e),s?r.display=s:Gr(e,`display`),c&&(o?a.insertBefore(e,o):a?a.appendChild(e):rr.removeChild(e))),t&&i.length>6?[i[0],i[1],i[4],i[5],i[12],i[13]]:i)},si=function(e,t,n,r,i,a){var o=e._gsap,s=i||oi(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!==ni&&(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=Ur(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&&(Kr(a,o,`xOrigin`,c,y),Kr(a,o,`yOrigin`,l,b),Kr(a,o,`xOffset`,u,o.xOffset),Kr(a,o,`yOffset`,d,o.yOffset)),e.setAttribute(`data-svg-origin`,y+` `+b)},ci=function(e,t){var n=e._gsap||new mn(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=Lr(e,Z)||`0`,l=u=d=h=g=_=v=y=b=0,u,d,f=m=1,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j,M,N,P,F,I,ee,L,te,R,ne;return n.svg=!!(e.getCTM&&Wr(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=oi(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`),si(e,N||c,!!N||n.originIsAbsolute,n.smooth!==!1,C)),x=n.xOrigin||0,S=n.yOrigin||0,C!==ni&&(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),m=Math.sqrt(A*A+k*k),h=D||O?fr(O,D)*ur:0,v=k||A?fr(k,A)*ur+h:0,v&&(m*=Math.abs(Math.cos(v*dr))),n.svg&&(l-=x-(x*D+S*k),u-=S-(x*O+S*A))):(ne=C[6],te=C[7],I=C[8],ee=C[9],L=C[10],R=C[11],l=C[12],u=C[13],d=C[14],w=fr(ne,L),g=w*ur,w&&(T=Math.cos(-w),E=Math.sin(-w),N=j*T+I*E,P=M*T+ee*E,F=ne*T+L*E,I=j*-E+I*T,ee=M*-E+ee*T,L=ne*-E+L*T,R=te*-E+R*T,j=N,M=P,ne=F),w=fr(-k,L),_=w*ur,w&&(T=Math.cos(-w),E=Math.sin(-w),N=D*T-I*E,P=O*T-ee*E,F=k*T-L*E,R=A*E+R*T,D=N,O=P,k=F),w=fr(O,D),h=w*ur,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),g&&Math.abs(g)+Math.abs(h)>359.9&&(g=h=0,_=180-_),f=V(Math.sqrt(D*D+O*O+k*k)),m=V(Math.sqrt(M*M+ne*ne)),w=fr(j,M),v=Math.abs(w)>2e-4?w*ur:0,b=R?1/(R<0?-R:R):0),n.svg&&(N=e.getAttribute(`transform`),n.forceCSS=e.setAttribute(`transform`,``)||!ii(Lr(e,X)),N&&e.setAttribute(`transform`,N))),Math.abs(v)>90&&Math.abs(v)<270&&(i?(f*=-1,v+=h<=0?180:-180,h+=h<=0?180:-180):(m*=-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=V(f),n.scaleY=V(m),n.rotation=V(h)+o,n.rotationX=V(g)+o,n.rotationY=V(_)+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]=li(c)),n.xOffset=n.yOffset=0,n.force3D=p.force3D,n.renderTransform=n.svg?gi:Fr?hi:di,n.uncache=0,n},li=function(e){return(e=e.split(` `))[0]+` `+e[1]},ui=function(e,t,n){var r=U(t);return V(parseFloat(t)+parseFloat(Yr(e,`x`,n+`px`,r)))+r},di=function(e,t){t.z=`0px`,t.rotationY=t.rotationX=`0deg`,t.force3D=0,hi(e,t)},fi=`0deg`,pi=`0px`,mi=`) `,hi=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!==fi||l!==fi)){var x=parseFloat(l)*dr,S=Math.sin(x),C=Math.cos(x),w;x=parseFloat(u)*dr,w=Math.cos(x),a=ui(_,a,S*w*-v),o=ui(_,o,-Math.sin(x)*-v),s=ui(_,s,C*w*-v+v)}h!==pi&&(y+=`perspective(`+h+mi),(r||i)&&(y+=`translate(`+r+`%, `+i+`%) `),(b||a!==pi||o!==pi||s!==pi)&&(y+=s!==pi||b?`translate3d(`+a+`, `+o+`, `+s+`) `:`translate(`+a+`, `+o+mi),c!==fi&&(y+=`rotate(`+c+mi),l!==fi&&(y+=`rotateY(`+l+mi),u!==fi&&(y+=`rotateX(`+u+mi),(d!==fi||f!==fi)&&(y+=`skew(`+d+`, `+f+mi),(p!==1||m!==1)&&(y+=`scale(`+p+`, `+m+mi),_.style[X]=y||`translate(0, 0)`},gi=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*=dr,c*=dr,b=Math.cos(s)*u,x=Math.sin(s)*u,S=Math.sin(s-c)*-d,C=Math.cos(s-c)*d,c&&(l*=dr,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=V(b),x=V(x),S=V(S),C=V(C)):(b=u,C=d,x=S=0),(v&&!~(a+``).indexOf(`px`)||y&&!~(o+``).indexOf(`px`))&&(v=Yr(f,`x`,a,`px`),y=Yr(f,`y`,o,`px`)),(p||m||h||g)&&(v=V(v+p-(p*b+m*S)+h),y=V(y+m-(p*x+m*C)+g)),(r||i)&&(w=f.getBBox(),v=V(v+r/100*w.width),y=V(y+i/100*w.height)),w=`matrix(`+b+`,`+x+`,`+S+`,`+C+`,`+v+`,`+y+`)`,f.setAttribute(`transform`,w),_&&(f.style[X]=w)},_i=function(e,t,n,r,i){var a=360,o=E(i),s=parseFloat(i)*(o&&~i.indexOf(`rad`)?ur: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*pr)%a-~~(s/a)*a:l===`ccw`&&s>0&&(s=(s-a*pr)%a-~~(s/a)*a)),e._pt=u=new J(e._pt,t,n,r,s,yr),u.e=c,u.u=`deg`,e._props.push(n),u},vi=function(e,t){for(var n in t)e[n]=t[n];return e},yi=function(e,t,n){var r=vi({},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=ci(n,1),Gr(n,X),n.setAttribute(`transform`,c)):(c=getComputedStyle(n)[X],a[X]=t,o=ci(n,1),a[X]=c),lr)c=r[s],l=o[s],c!==l&&i.indexOf(s)<0&&(f=U(c),p=U(l),u=f===p?parseFloat(c):Yr(n,s,c,p),d=parseFloat(l),e._pt=new J(e._pt,o,s,u,d-u,vr),e._pt.u=p||0,e._props.push(s));vi(o,r)};B(`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});ti[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 Xr(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 bi={name:`css`,register:Br,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,m,h,g,_,v,y,b,x,S,C,w,T;for(h in ir||Br(),this.styles=this.styles||Pr(e),w=this.styles.props,this.tween=n,t)if(h!==`autoRound`&&(l=t[h],!(we[h]&&yn(h,t,n,r,e,i)))){if(f=typeof l,m=ti[h],f===`function`&&(l=l.call(n,r,e,i),f=typeof l),f===`string`&&~l.indexOf(`random(`)&&(l=It(l)),m)m(this,e,h,l,n)&&(C=1);else if(h.substr(0,2)===`--`)c=(getComputedStyle(e).getPropertyValue(h)+``).trim(),l+=``,Xt.lastIndex=0,Xt.test(c)||(g=U(c),_=U(l),_?g!==_&&(c=Yr(e,h,c,_)+_):g&&(l+=g)),this.add(o,`setProperty`,c,l,r,i,0,0,h),a.push(h),w.push(h,0,o[h]);else if(f!==`undefined`){if(s&&h in s?(c=typeof s[h]==`function`?s[h].call(n,r,e,i):s[h],E(c)&&~c.indexOf(`random(`)&&(c=It(c)),U(c+``)||c===`auto`||(c+=p.units[h]||U(Xr(e,h))||``),(c+``).charAt(1)===`=`&&(c=Xr(e,h))):c=Xr(e,h),d=parseFloat(c),v=f===`string`&&l.charAt(1)===`=`&&l.substr(0,2),v&&(l=l.substr(2)),u=parseFloat(l),h in _r&&(h===`autoAlpha`&&(d===1&&Xr(e,`visibility`)===`hidden`&&u&&(d=0),w.push(`visibility`,0,o.visibility),Kr(this,o,`visibility`,d?`inherit`:`hidden`,u?`inherit`:`hidden`,!u)),h!==`scale`&&h!==`transform`&&(h=_r[h],~h.indexOf(`,`)&&(h=h.split(`,`)[0]))),y=h in lr,y){if(this.styles.save(h),T=l,f===`string`&&l.substring(0,6)===`var(--`){if(l=Lr(e,l.substring(4,l.indexOf(`)`))),l.substring(0,5)===`calc(`){var D=e.style.perspective;e.style.perspective=l,l=Lr(e,`perspective`),D?e.style.perspective=D:Gr(e,`perspective`)}u=parseFloat(l)}if(b||(x=e._gsap,x.renderTransform&&!t.parseTransform||ci(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),h===`scale`)this._pt=new J(this._pt,x,`scaleY`,x.scaleY,(v?Me(x.scaleY,v+u):u)-x.scaleY||0,vr),this._pt.u=0,a.push(`scaleY`,h),h+=`X`;else if(h===`transformOrigin`){w.push(Z,0,o[Z]),l=$r(l),x.svg?si(e,l,0,S,0,this):(_=parseFloat(l.split(` `)[2])||0,_!==x.zOrigin&&Kr(this,x,`zOrigin`,x.zOrigin,_),Kr(this,o,h,li(c),li(l)));continue}else if(h===`svgOrigin`){si(e,l,1,S,0,this);continue}else if(h in ri){_i(this,x,h,d,v?Me(d,v+l):l);continue}else if(h===`smoothOrigin`){Kr(this,x,`smooth`,x.smooth,l);continue}else if(h===`force3D`){x[h]=l;continue}else if(h===`transform`){yi(this,l,e);continue}}else h in o||(h=zr(h)||h);if(y||(u||u===0)&&(d||d===0)&&!gr.test(l)&&h in o)g=(c+``).substr((d+``).length),u||=0,_=U(l)||(h in p.units?p.units[h]:g),g!==_&&(d=Yr(e,h,c,_)),this._pt=new J(this._pt,y?x:o,h,d,(v?Me(d,v+u):u)-d,!y&&(_===`px`||h===`zIndex`)&&t.autoRound!==!1?Sr:vr),this._pt.u=_||0,y&&T!==l?(this._pt.b=c,this._pt.e=T,this._pt.r=xr):g!==_&&_!==`%`&&(this._pt.b=c,this._pt.r=br);else if(h in o)Zr.call(this,e,h,c,v?v+l:l);else if(h in e)this.add(e,h,c||e[h],v?v+l:l,r,i);else if(h!==`parseTransform`){pe(h,l);continue}y||(h in o?w.push(h,0,o[h]):typeof e[h]==`function`?w.push(h,2,e[h]()):w.push(h,1,c||e[h])),a.push(h)}}C&&Vn(this)},render:function(e,t){if(t.tween._time||!sr())for(var n=t._pt;n;)n.r(e,n.d),n=n._next;else t.styles.revert()},get:Xr,aliases:_r,getSetter:function(e,t,n){var r=_r[t];return r&&r.indexOf(`,`)<0&&(t=r),t in lr&&t!==Z&&(e._gsap.x||Xr(e,`x`))?n&&or===n?t===`scale`?Or:Dr:(or=n||{})&&(t===`scale`?kr:Ar):e.style&&!k(e.style[t])?Tr:~t.indexOf(`-`)?Er:Nn(e,t)},core:{_removeProperty:Gr,_getMatrix:oi}};Y.utils.checkPrefix=zr,Y.core.getStyleSaver=Pr,(function(e,t,n,r){var i=B(e+`,`+t+`,`+n,function(e){lr[e]=1});B(t,function(e){p.units[e]=`deg`,ri[e]=1}),_r[i[13]]=e+`,`+t,B(r,function(e){var t=e.split(`:`);_r[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`),B(`x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective`,function(e){p.units[e]=`px`}),Y.registerPlugin(bi);var Q=Y.registerPlugin(bi)||Y;Q.core.Tween;var xi=typeof document<`u`?u.useLayoutEffect:u.useEffect,Si=e=>e&&!Array.isArray(e)&&typeof e==`object`,Ci=[],wi={},Ti=Q,Ei=(e,t=Ci)=>{let n=wi;Si(e)?(n=e,e=null,t=`dependencies`in n?n.dependencies:Ci):Si(t)&&(n=t,t=`dependencies`in n?n.dependencies:Ci),e&&typeof e!=`function`&&console.warn(`First parameter must be a function or config object`);let{scope:r,revertOnUpdate:i}=n,a=(0,u.useRef)(!1),o=(0,u.useRef)(Ti.context(()=>{},r)),s=(0,u.useRef)(e=>o.current.add(null,e)),c=t&&t.length&&!i;return c&&xi(()=>(a.current=!0,()=>o.current.revert()),Ci),xi(()=>{if(e&&o.current.add(e,r),!c||!a.current)return()=>o.current.revert()},t),{context:o.current,contextSafe:s.current}};Ei.register=e=>{Ti=e},Ei.headless=!0;var $=e();Q.registerPlugin(Ei);function Di({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 Oi({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 ki({isTyping:e=!1,showPassword:t=!1,passwordLength:n=0}){let r=(0,u.useRef)(null),i=(0,u.useRef)({x:0,y:0}),a=(0,u.useRef)(0),o=(0,u.useRef)(null),s=(0,u.useRef)(null),c=(0,u.useRef)(null),l=(0,u.useRef)(null),d=(0,u.useRef)(null),f=(0,u.useRef)(null),p=(0,u.useRef)(null),m=(0,u.useRef)(null),h=(0,u.useRef)(null),g=(0,u.useRef)(void 0),_=(0,u.useRef)(void 0),v=(0,u.useRef)(void 0),y=(0,u.useRef)(void 0),b=(0,u.useRef)(!1),x=n>0&&!t,S=n>0&&t,C=(0,u.useRef)({isHidingPassword:x,isLooking:!1,isShowingPassword:S,isTyping:e});C.current={isHidingPassword:x,isLooking:b.current,isShowingPassword:S,isTyping:e};let{contextSafe:w}=Ei(()=>{Q.set(`.pupil`,{x:0,y:0}),Q.set(`.eyeball-pupil`,{x:0,y:0})},{scope:r}),T=(0,u.useRef)(null);(0,u.useEffect)(()=>{if(!(o.current&&s.current&&l.current&&c.current&&d.current&&f.current&&m.current&&p.current&&h.current))return;let e={blackFaceLeft:Q.quickTo(f.current,`left`,{duration:.3,ease:`power2.out`}),blackFaceTop:Q.quickTo(f.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(d.current,`left`,{duration:.3,ease:`power2.out`}),purpleFaceTop:Q.quickTo(d.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(p.current,`x`,{duration:.2,ease:`power2.out`}),yellowFaceY:Q.quickTo(p.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}},u=()=>{let i=r.current;if(!i)return;let{isHidingPassword:d,isLooking:f,isShowingPassword:p,isTyping:m}=C.current;if(o.current&&!p){let n=t(o.current);m||d?(e.purpleSkew(n.bodySkew-12),e.purpleX(40),e.purpleHeight(440)):(e.purpleSkew(n.bodySkew),e.purpleX(0),e.purpleHeight(400))}if(s.current&&!p){let n=t(s.current);f?(e.blackSkew(n.bodySkew*1.5+10),e.blackX(20)):m||d?(e.blackSkew(n.bodySkew*1.5),e.blackX(0)):(e.blackSkew(n.bodySkew),e.blackX(0))}if(l.current&&!p){let n=t(l.current);e.orangeSkew(n.bodySkew)}if(c.current&&!p){let n=t(c.current);e.yellowSkew(n.bodySkew)}if(o.current&&!p&&!f){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&&!p&&!f){let n=t(s.current);e.blackFaceLeft(26+n.faceX),e.blackFaceTop(32+n.faceY)}if(l.current&&!p){let n=t(l.current);e.orangeFaceX(n.faceX),e.orangeFaceY(n.faceY)}if(c.current&&!p){let n=t(c.current);e.yellowFaceX(n.faceX),e.yellowFaceY(n.faceY),e.mouthX(n.faceX),e.mouthY(n.faceY)}if(!p){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(!f){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(u)},g=e=>{i.current={x:e.clientX,y:e.clientY}};return window.addEventListener(`mousemove`,g,{passive:!0}),a.current=requestAnimationFrame(u),()=>{window.removeEventListener(`mousemove`,g),cancelAnimationFrame(a.current)}},[]),(0,u.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,u.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,u.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,u.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,u.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:d,style:{left:45,top:40},children:[(0,$.jsx)(Oi,{maxDistance:5,pupilColor:`#2D2D2D`,pupilSize:7,size:18}),(0,$.jsx)(Oi,{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:f,style:{left:26,top:32},children:[(0,$.jsx)(Oi,{maxDistance:4,pupilColor:`#2D2D2D`,pupilSize:6,size:16}),(0,$.jsx)(Oi,{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)(Di,{maxDistance:5,pupilColor:`#2D2D2D`,size:12}),(0,$.jsx)(Di,{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:p,style:{left:52,top:40},children:[(0,$.jsx)(Di,{maxDistance:5,pupilColor:`#2D2D2D`,size:12}),(0,$.jsx)(Di,{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 Ai({className:e}){let{isTyping:t,passwordLength:n,showPassword:r}=c();return(0,$.jsxs)(`div`,{className:i(`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:`安全收付,尽在掌握`}),(0,$.jsx)(`p`,{className:`mx-auto max-w-md text-muted-foreground text-sm leading-relaxed`,children:`多链 USDT 自动收款、实时回调、智能结算,为您的业务提供稳定可靠的支付基础设施。`})]}),(0,$.jsx)(`div`,{className:`w-full rounded-[36px] border bg-background/50 px-6 py-8 shadow-2xl backdrop-blur-sm`,children:(0,$.jsx)(ki,{isTyping:t,passwordLength:n,showPassword:r})})]})]})}function ji(){return(0,$.jsx)(l,{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)(Ai,{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)(a,{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:`安全、高效的 USDT 支付中间件`})]})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,$.jsx)(o,{}),(0,$.jsx)(s,{})]})]})}),(0,$.jsx)(`div`,{className:`mx-auto flex w-full max-w-sm flex-1 flex-col justify-center`,children:(0,$.jsx)(r,{})})]})]})})}export{ji as component}; \ No newline at end of file diff --git a/src/www/assets/route-Cut38oeV.js b/src/www/assets/route-Cut38oeV.js new file mode 100644 index 0000000..da957ec --- /dev/null +++ b/src/www/assets/route-Cut38oeV.js @@ -0,0 +1 @@ +import{Fc as e,Ft as t,Ic as n,Lc as r,Pc as i,Pt as a,nu as o}from"./messages-BovT1T-w.js";import{n as s}from"./Match-B8-zI9ZJ.js";import{B as c,W as l}from"./search-provider-Cx1K1ilz.js";import{o as u,s as d}from"./select-DcStuzoT.js";import{t as f}from"./separator-CRLYw2cW.js";import{t as p}from"./createLucideIcon-D28ivbfF.js";import{t as m}from"./page-header-BBJ9dE3-.js";import{t as h}from"./sidebar-nav-DgezD6QJ.js";var g=p(`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`}]]),_=p(`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=o(),y=[{title:r(),href:`/settings`,icon:(0,v.jsx)(c,{size:18})},{title:n(),href:`/settings/telegram`,icon:(0,v.jsx)(g,{size:18})},{title:e(),href:`/settings/rate`,icon:(0,v.jsx)(_,{size:18})},{title:i(),href:`/settings/epay`,icon:(0,v.jsx)(l,{size:18})}];function b(){return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(d,{}),(0,v.jsxs)(u,{fixed:!0,children:[(0,v.jsx)(m,{description:a(),title:t()}),(0,v.jsx)(f,{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-jvq7ILAD.js b/src/www/assets/route-jvq7ILAD.js new file mode 100644 index 0000000..2bc8b86 --- /dev/null +++ b/src/www/assets/route-jvq7ILAD.js @@ -0,0 +1 @@ +import{Bc as e,Hc as t,Vc as n,nu as r}from"./messages-BovT1T-w.js";import{n as i}from"./Match-B8-zI9ZJ.js";import{H as a}from"./search-provider-Cx1K1ilz.js";import{o,s}from"./select-DcStuzoT.js";import{t as c}from"./separator-CRLYw2cW.js";import{t as l}from"./page-header-BBJ9dE3-.js";import{t as u}from"./sidebar-nav-DgezD6QJ.js";var d=r();function f(){let r=[{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)(o,{fixed:!0,children:[(0,d.jsx)(l,{description:n(),title:t()}),(0,d.jsx)(c,{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:r})}),(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-Dohuf5K5.js b/src/www/assets/router-Dohuf5K5.js new file mode 100644 index 0000000..7a32aef --- /dev/null +++ b/src/www/assets/router-Dohuf5K5.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/install-BDL3tVBh.js","assets/messages-BovT1T-w.js","assets/form-DdHiBYMe.js","assets/button-DJA4fnJ8.js","assets/label-CsevXZTG.js","assets/dist-15n4mVGL.js","assets/zod-Cymc5bS-.js","assets/command-BwVY_kli.js","assets/dist-BKfJQFVD.js","assets/dist-DG5UMlBd.js","assets/dist-BEDXr2LC.js","assets/dropdown-menu-CUea1X0A.js","assets/dist-D21KDGR3.js","assets/dist-Cp1lAGZy.js","assets/createLucideIcon-D28ivbfF.js","assets/check-gDgbfVXu.js","assets/popover-D5q6Hufu.js","assets/auth-store-BpIS8RMn.js","assets/dist-DvAgZMq72.js","assets/with-selector-D_dmjfol.js","assets/cookies-BNZcTwGc.js","assets/useNavigate-Dg8CkCoa.js","assets/useRouter-D03zSgJO.js","assets/chevron-down-CdmvZsfI.js","assets/circle-check-Dh8WOZF0.js","assets/theme-switch-BjXQNOij.js","assets/theme-provider-CRKya7Cx.js","assets/loader-circle-fg8-aSyl.js","assets/card-DuQAN29P.js","assets/input-DiRPHDd8.js","assets/route-C7cw4pTD.js","assets/search-provider-Cx1K1ilz.js","assets/dist-DlZiaY1y.js","assets/dist-CGm-FpWw.js","assets/separator-CRLYw2cW.js","assets/wallet--XSRr4dT.js","assets/useStore-1-QVtiLb.js","assets/font-provider-DvtNHF7l.js","assets/Match-B8-zI9ZJ.js","assets/ClientOnly-CtYi2y5F.js","assets/matchContext-BcwcZvp2.js","assets/redirect-dE0wk0WH.js","assets/Matches-LuvVcyUg.js","assets/atom-DI1Bn-1s.js","assets/link-CA4H4hTz.js","assets/chevrons-up-down-iOmAu5Fh.js","assets/badge-BAmRBT3U.js","assets/route-ClLiRb_H.js","assets/auth-animation-context-zwGs7ZAM.js","assets/dashboard-Clgehcjb.js","assets/select-DcStuzoT.js","assets/header-DbmR8lIc.js","assets/data-table-CmcvKcj8.js","assets/eye-off-C-BF3gv3.js","assets/empty-state-Cam-sX8U.js","assets/clock-3-BoF5rDzX.js","assets/page-header-BBJ9dE3-.js","assets/503-BTAQ6Iri.js","assets/maintenance-error-PO6kK4Oj.js","assets/500-DSCRAyCF.js","assets/general-error-DKtbS-qh.js","assets/404-VQj_aY6A.js","assets/not-found-error-toRsO1Fi.js","assets/403-BfPOIf6t.js","assets/forbidden-BEz-zjy_.js","assets/401-IieFK_aS.js","assets/unauthorized-error-CxmfHb-a.js","assets/sign-in-DGULZo5h.js","assets/useSearch-B5ZWp8fU.js","assets/password-input-B463LDkD.js","assets/eye-CDavQcLN.js","assets/route-Cut38oeV.js","assets/sidebar-nav-DgezD6QJ.js","assets/useRouterState-DV1cSG1v.js","assets/route-jvq7ILAD.js","assets/settings-6L98-bwl.js","assets/textarea-D_TrrVtD.js","assets/lib-CTYwzR3w.js","assets/rpc-BVbqsnlT.js","assets/checkbox-B_Isethe.js","assets/switch-R6BNZUH1.js","assets/route-BxpeArPd.js","assets/arrow-left-BrKcUadm.js","assets/ellipsis-Y4gZr59G.js","assets/chains-store-Dzu_Y00B.js","assets/trash-2-Du706Ujr.js","assets/coming-soon-dialog-DMmjLgiX.js","assets/telescope-67IWjQye.js","assets/long-text-BXQXVuRh.js","assets/use-table-url-state-C7-IMA3_.js","assets/payments-DTD79Ztb.js","assets/payment-assets-DSsuCTEQ.js","assets/orders-Bv-Izk6_.js","assets/download-CN4vU01G.js","assets/help-F2O9kOnX.js","assets/chains-QKtNypSO.js","assets/addresses-DQVKa3vf.js","assets/telegram-HLdihqdM.js","assets/rate-B9ZGMIwY.js","assets/notifications-DfNeewuy.js","assets/radio-group-DXVwPYJH.js","assets/show-submitted-data-l0RlCwTX.js","assets/epay-Db0RVMXe.js","assets/display-CkSSrdk4.js","assets/appearance-DJZ27An3.js","assets/password-BmNp63ZQ.js"])))=>i.map(i=>d[i]); +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{C as r,D as i,E as a,O as o,S as s,T as c,_ as l,b as u,g as d,h as f,m as p,p as m,t as h,v as g,w as _,x as v,y}from"./auth-store-BpIS8RMn.js";import{n as b}from"./redirect-dE0wk0WH.js";import{n as x,o as S}from"./Match-B8-zI9ZJ.js";import{t as C}from"./route-BxpeArPd.js";import{n as w,t as T}from"./atom-DI1Bn-1s.js";import{i as E,n as D,r as O,t as ee}from"./_error-DGJYkCxd.js";import{t as k}from"./useRouterState-DV1cSG1v.js";import{t as te}from"./wallet--XSRr4dT.js";import{t as A}from"./createLucideIcon-D28ivbfF.js";import{t as j}from"./circle-check-Dh8WOZF0.js";import{t as M}from"./clock-3-BoF5rDzX.js";import{t as N}from"./loader-circle-fg8-aSyl.js";import{t as ne}from"./dist-DvAgZMq72.js";import{t as re}from"./general-error-DKtbS-qh.js";import{t as ie}from"./not-found-error-toRsO1Fi.js";import{c as ae,s as oe,t as P}from"./zod-Cymc5bS-.js";var se=class extends o{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 m({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=F(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=F(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=F(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=F(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){l.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=>v(t,e))}findAll(e={}){return this.getAll().filter(t=>v(e,t))}notify(e){l.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return l.batch(()=>Promise.all(e.map(e=>e.continue().catch(r))))}};function F(e){return e.options.scope?.id}var ce=class extends o{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??u(r,t),a=this.get(i);return a||(a=new f({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(){l.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=>s(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>s(e,t)):t}notify(e){l.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){l.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){l.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},le=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new ce,this.#t=e.mutationCache||new se,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=i.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=d.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(c(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=g(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return l.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;l.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return l.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},i=l.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(i).then(r).catch(r)}invalidateQueries(e,t={}){return l.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},i=l.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(r)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(i).then(r)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(c(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(r).catch(r)}fetchInfiniteQuery(e){return e.behavior=p(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(r).catch(r)}ensureInfiniteQueryData(e){return e.behavior=p(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return d.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(y(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{_(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(y(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{_(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||=u(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===a&&(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()}},ue=e=>({createMutableStore:w,createReadonlyStore:w,batch:T}),de=e=>new fe(e),fe=class extends S{constructor(e){super(e,ue)}},I=t(n(),1),L=()=>{};function R(e,t,n){let r=(0,I.useRef)(L);(0,I.useEffect)(()=>{r.current=e}),(0,I.useEffect)(()=>{},[n]),(0,I.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 V=(0,I.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,I.useRef)(!1),[g,_]=(0,I.useState)(0),v=(0,I.useRef)({active:!1,refreshRate:1e3}),[y,b]=(0,I.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,I.useState)(x),[E,D]=(0,I.useState)(C);(0,I.useEffect)(()=>(h.current=!0,()=>{h.current=!1}),[]),(0,I.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,I.useEffect)(()=>{T({...w,background:r}),D({...E,boxShadow:`0 0 10px ${r}, 0 0 5px ${r}`})},[r]),(0,I.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 R(()=>{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),I.createElement(`div`,{className:p,style:{...S,...u}},I.createElement(`div`,{className:n,style:{...w,...d}},l?I.createElement(`div`,{style:{...E,...f}}):null))});I.createContext(void 0);var H=e();function pe(){let e=(0,I.useRef)(null),t=k();return(0,I.useEffect)(()=>{t.status===`pending`?e.current?.continuousStart():e.current?.complete()},[t.status]),(0,H.jsx)(V,{color:`var(--primary)`,height:2,ref:e,shadow:!0})}var U=A(`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`}]]),me=A(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),he=A(`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`}]]),ge=A(`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`}]]),_e=A(`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`}]]),ve=(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{}},ye=I.createContext(void 0),be={setTheme:e=>{},themes:[]},xe=()=>I.useContext(ye)??be;I.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 I.createElement(`script`,{...l,suppressHydrationWarning:!0,nonce:typeof window>`u`?c:``,dangerouslySetInnerHTML:{__html:`(${ve.toString()})(${u})`}})});var Se=({...e})=>{let{theme:t=`system`}=xe();return(0,H.jsx)(ne,{richColors:!0,className:`toaster group`,icons:{success:(0,H.jsx)(j,{className:`size-4`}),info:(0,H.jsx)(me,{className:`size-4`}),warning:(0,H.jsx)(_e,{className:`size-4`}),error:(0,H.jsx)(ge,{className:`size-4`}),loading:(0,H.jsx)(N,{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 Ce(){return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(pe,{}),(0,H.jsx)(x,{}),(0,H.jsx)(Se,{duration:5e3,position:`top-right`})]})}var W=C()({component:Ce,notFoundComponent:ie,errorComponent:re}),we=E(`/install`)({component:O(()=>D(()=>import(`./install-BDL3tVBh.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])),`component`)}),Te=E(`/_authenticated`)({beforeLoad:({location:e})=>{if(!h.state.accessToken)throw b({to:`/sign-in`,search:{redirect:e.href},replace:!0})},component:O(()=>D(()=>import(`./route-C7cw4pTD.js`),__vite__mapDeps([30,1,31,9,3,7,8,10,5,11,12,13,14,15,32,33,34,35,20,17,18,19,22,21,36,24,29,37,26,38,39,40,41,42,43,44,45,46])),`component`)}),Ee=E(`/(auth)`)({component:O(()=>D(()=>import(`./route-ClLiRb_H.js`),__vite__mapDeps([47,1,3,11,8,9,10,5,12,13,14,15,38,39,36,19,40,22,41,25,21,26,20,48])),`component`)}),De=E(`/`)({beforeLoad:()=>{throw b({to:h.state.accessToken?`/dashboard`:`/sign-in`,replace:!0})},component:O(()=>D(()=>import(`./routes-CJI6s37t.js`),[]),`component`)}),Oe=E(`/_authenticated/dashboard`)({component:O(()=>D(()=>import(`./dashboard-Clgehcjb.js`),__vite__mapDeps([49,1,31,9,3,7,8,10,5,11,12,13,14,15,32,33,34,35,20,17,18,19,22,21,36,24,29,37,26,16,50,44,39,23,25,51,52,45,53,54,46,55,56,28])),`component`)}),ke=E(`/(errors)/503`)({component:O(()=>D(()=>import(`./503-BTAQ6Iri.js`),__vite__mapDeps([57,58,1,3])),`component`)}),Ae=E(`/(errors)/500`)({component:O(()=>D(()=>import(`./500-DSCRAyCF.js`),__vite__mapDeps([59,60,1,3,22,21])),`component`)}),je=E(`/(errors)/404`)({component:O(()=>D(()=>import(`./404-VQj_aY6A.js`),__vite__mapDeps([61,62,1,3,22,21])),`component`)}),Me=E(`/(errors)/403`)({component:O(()=>D(()=>import(`./403-BfPOIf6t.js`),__vite__mapDeps([63,64,1,3,22,21])),`component`)}),Ne=E(`/(errors)/401`)({component:O(()=>D(()=>import(`./401-IieFK_aS.js`),__vite__mapDeps([65,66,1,3,22,21])),`component`)}),Pe=()=>D(()=>import(`./sign-in-DGULZo5h.js`),__vite__mapDeps([67,1,2,3,4,5,6,17,18,19,20,68,40,22,36,21,14,27,69,53,70,29,48])),Fe=oe({redirect:ae().optional()}),Ie=E(`/(auth)/sign-in`)({component:O(Pe,`component`),validateSearch:Fe}),Le=E(`/_authenticated/settings`)({component:O(()=>D(()=>import(`./route-Cut38oeV.js`),__vite__mapDeps([71,1,31,9,3,7,8,10,5,11,12,13,14,15,32,33,34,35,20,17,18,19,22,21,36,24,29,37,26,50,44,39,23,25,51,38,40,41,56,72,73])),`component`)}),Re=E(`/_authenticated/account`)({component:O(()=>D(()=>import(`./route-jvq7ILAD.js`),__vite__mapDeps([74,1,31,9,3,7,8,10,5,11,12,13,14,15,32,33,34,35,20,17,18,19,22,21,36,24,29,37,26,50,44,39,23,25,51,38,40,41,56,72,73])),`component`)}),ze=E(`/_authenticated/settings/`)({component:O(()=>D(()=>import(`./settings-6L98-bwl.js`),__vite__mapDeps([75,1,2,3,4,5,6,18,56,34,29,76,77,17,19,20])),`component`)}),G=[{label:`待支付`,value:`pending`,icon:M},{label:`已支付`,value:`paid`,icon:j},{label:`已过期`,value:`expired`,icon:he},{label:`已关闭`,value:`closed`,icon:U}],K=[{label:`启用中`,value:`enabled`,icon:te},{label:`已禁用`,value:`disabled`,icon:U},{label:`监控中`,value:`monitoring`,icon:j}],q=[{label:`启用中`,value:`true`},{label:`已禁用`,value:`false`}],Be=()=>D(()=>import(`./rpc-BVbqsnlT.js`),__vite__mapDeps([78,1,2,3,4,5,6,31,9,7,8,10,11,12,13,14,15,32,33,34,35,20,17,18,19,22,21,36,24,29,37,26,79,50,44,39,23,25,51,80,81,68,40,41,52,16,45,53,54,46,82,83,84,85,86,87,88,56,89])),Ve=P.object({page:P.number().optional().catch(1),pageSize:P.number().optional().catch(10),enabled:P.array(P.enum(q.map(e=>e.value))).optional().catch([]),type:P.array(P.string()).optional().catch([]),status:P.array(P.enum([`ok`,`down`,`unknown`])).optional().catch([]),keyword:P.string().optional().catch(``)}),He=E(`/_authenticated/rpc/`)({validateSearch:Ve,component:O(Be,`component`)}),Ue=()=>D(()=>import(`./payments-DTD79Ztb.js`),__vite__mapDeps([90,1,2,3,4,5,6,31,9,7,8,10,11,12,13,14,15,32,33,34,35,20,17,18,19,22,21,36,24,29,37,26,50,44,39,23,25,51,80,81,68,40,41,53,70,54,85,56,46,76])),We=P.object({type:P.enum([`all`,`enabled`,`disabled`]).optional().catch(void 0),filter:P.string().optional().catch(``),sort:P.enum([`asc`,`desc`]).optional().catch(void 0)}),Ge=E(`/_authenticated/payments/`)({validateSearch:We,component:O(Ue,`component`)}),Ke=()=>D(()=>import(`./payment-assets-DSsuCTEQ.js`),__vite__mapDeps([91,1,3,50,8,9,10,5,31,7,11,12,13,14,15,32,33,34,35,20,17,18,19,22,21,36,24,29,37,26,44,39,23,25,51,81,68,40,41,52,16,45,53,54,46,56,89])),qe=P.object({page:P.number().optional().catch(1),pageSize:P.number().optional().catch(10),status:P.enum([`enabled`,`disabled`]).array().optional().catch([]),chain:P.array(P.string()).optional().catch([]),keyword:P.string().optional().catch(``)}),Je=E(`/_authenticated/payment-assets/`)({validateSearch:qe,component:O(Ke,`component`)}),Ye=()=>D(()=>import(`./orders-Bv-Izk6_.js`),__vite__mapDeps([92,1,31,9,3,7,8,10,5,11,12,13,14,15,32,33,34,35,20,17,18,19,22,21,36,24,29,37,26,4,50,44,39,23,25,51,81,68,40,41,52,16,45,53,54,46,93,83,70,86,87,88,56,89])),Xe=P.object({page:P.number().optional().catch(1),pageSize:P.number().optional().catch(10),status:P.array(P.enum(G.map(e=>e.value))).optional().catch([]),chain:P.array(P.string()).optional().catch([]),orderNo:P.string().optional().catch(``)}),Ze=E(`/_authenticated/orders/`)({validateSearch:Xe,component:O(Ye,`component`)}),Qe=E(`/_authenticated/help/`)({component:O(()=>D(()=>import(`./help-F2O9kOnX.js`),__vite__mapDeps([94,1,87,14])),`component`)}),$e=()=>D(()=>import(`./chains-QKtNypSO.js`),__vite__mapDeps([95,1,2,3,4,5,6,31,9,7,8,10,11,12,13,14,15,32,33,34,35,20,17,18,19,22,21,36,24,29,37,26,79,50,44,39,23,25,51,80,52,16,45,53,54,46,82,83,84,85,86,87,56])),et=P.object({page:P.number().optional().catch(1),pageSize:P.number().optional().catch(10),status:P.array(P.enum(q.map(e=>e.value))).optional().catch([]),keyword:P.string().optional().catch(``)}),tt=E(`/_authenticated/chains/`)({validateSearch:et,component:O($e,`component`)}),nt=()=>D(()=>import(`./addresses-DQVKa3vf.js`),__vite__mapDeps([96,1,2,3,4,5,6,31,9,7,8,10,11,12,13,14,15,32,33,34,35,20,17,18,19,22,21,36,24,29,37,26,50,44,39,23,25,51,80,81,68,40,41,52,16,45,53,54,46,93,83,70,84,85,88,56,76,89])),rt=P.object({page:P.number().optional().catch(1),pageSize:P.number().optional().catch(10),status:P.array(P.enum(K.map(e=>e.value))).optional().catch([]),chain:P.array(P.string()).optional().catch([]),address:P.string().optional().catch(``)}),it=E(`/_authenticated/addresses/`)({validateSearch:rt,component:O(nt,`component`)}),at=E(`/_authenticated/account/`)({beforeLoad:()=>{throw b({to:`/account/password`,replace:!0})}}),ot=E(`/_authenticated/settings/telegram`)({component:O(()=>D(()=>import(`./telegram-HLdihqdM.js`),__vite__mapDeps([97,1,2,3,4,5,6,80,9,33,56,34,29,77,17,18,19,20])),`component`)}),st=E(`/_authenticated/settings/rate`)({component:O(()=>D(()=>import(`./rate-B9ZGMIwY.js`),__vite__mapDeps([98,1,2,3,4,5,6,56,34,29,77,17,18,19,20])),`component`)}),ct=E(`/_authenticated/settings/notifications`)({component:O(()=>D(()=>import(`./notifications-DfNeewuy.js`),__vite__mapDeps([99,1,2,3,4,5,6,79,9,13,33,15,14,80,44,39,36,19,22,100,32,12,10,56,34,101,18])),`component`)}),lt=E(`/_authenticated/settings/epay`)({component:O(()=>D(()=>import(`./epay-Db0RVMXe.js`),__vite__mapDeps([102,1,2,3,4,5,6,56,34,29,77,17,18,19,20])),`component`)}),ut=E(`/_authenticated/settings/display`)({component:O(()=>D(()=>import(`./display-CkSSrdk4.js`),__vite__mapDeps([103,1,2,3,4,5,6,79,9,13,33,15,14,56,34,101,18])),`component`)}),dt=E(`/_authenticated/settings/appearance`)({component:O(()=>D(()=>import(`./appearance-DJZ27An3.js`),__vite__mapDeps([104,1,2,3,4,5,6,23,14,100,32,9,12,10,13,33,56,34,37,20,26,101,18])),`component`)}),ft=E(`/_authenticated/account/password`)({component:O(()=>D(()=>import(`./password-BmNp63ZQ.js`),__vite__mapDeps([105,1,2,3,4,5,6,17,18,19,20,69,53,14,70,29,56,34])),`component`)}),pt=we.update({id:`/install`,path:`/install`,getParentRoute:()=>W}),J=Te.update({id:`/_authenticated`,getParentRoute:()=>W}),Y=Ee.update({id:`/(auth)`,getParentRoute:()=>W}),mt=De.update({id:`/`,path:`/`,getParentRoute:()=>W}),ht=Oe.update({id:`/dashboard`,path:`/dashboard`,getParentRoute:()=>J}),gt=ke.update({id:`/(errors)/503`,path:`/503`,getParentRoute:()=>W}),_t=Ae.update({id:`/(errors)/500`,path:`/500`,getParentRoute:()=>W}),vt=je.update({id:`/(errors)/404`,path:`/404`,getParentRoute:()=>W}),yt=Me.update({id:`/(errors)/403`,path:`/403`,getParentRoute:()=>W}),bt=Ne.update({id:`/(errors)/401`,path:`/401`,getParentRoute:()=>W}),xt=Ie.update({id:`/sign-in`,path:`/sign-in`,getParentRoute:()=>Y}),X=Le.update({id:`/settings`,path:`/settings`,getParentRoute:()=>J}),Z=Re.update({id:`/account`,path:`/account`,getParentRoute:()=>J}),St=ze.update({id:`/`,path:`/`,getParentRoute:()=>X}),Ct=He.update({id:`/rpc/`,path:`/rpc/`,getParentRoute:()=>J}),wt=Ge.update({id:`/payments/`,path:`/payments/`,getParentRoute:()=>J}),Tt=Je.update({id:`/payment-assets/`,path:`/payment-assets/`,getParentRoute:()=>J}),Et=Ze.update({id:`/orders/`,path:`/orders/`,getParentRoute:()=>J}),Dt=Qe.update({id:`/help/`,path:`/help/`,getParentRoute:()=>J}),Ot=tt.update({id:`/chains/`,path:`/chains/`,getParentRoute:()=>J}),kt=it.update({id:`/addresses/`,path:`/addresses/`,getParentRoute:()=>J}),At=at.update({id:`/`,path:`/`,getParentRoute:()=>Z}),jt=ot.update({id:`/telegram`,path:`/telegram`,getParentRoute:()=>X}),Mt=st.update({id:`/rate`,path:`/rate`,getParentRoute:()=>X}),Nt=ct.update({id:`/notifications`,path:`/notifications`,getParentRoute:()=>X}),Pt=lt.update({id:`/epay`,path:`/epay`,getParentRoute:()=>X}),Q=ut.update({id:`/display`,path:`/display`,getParentRoute:()=>X}),Ft=dt.update({id:`/appearance`,path:`/appearance`,getParentRoute:()=>X}),It=ee.update({id:`/errors/$error`,path:`/errors/$error`,getParentRoute:()=>J}),Lt=ft.update({id:`/password`,path:`/password`,getParentRoute:()=>Z}),Rt={authSignInRoute:xt},zt=Y._addFileChildren(Rt),Bt={AuthenticatedAccountPasswordRoute:Lt,AuthenticatedAccountIndexRoute:At},Vt=Z._addFileChildren(Bt),Ht={AuthenticatedSettingsAppearanceRoute:Ft,AuthenticatedSettingsDisplayRoute:Q,AuthenticatedSettingsEpayRoute:Pt,AuthenticatedSettingsNotificationsRoute:Nt,AuthenticatedSettingsRateRoute:Mt,AuthenticatedSettingsTelegramRoute:jt,AuthenticatedSettingsIndexRoute:St},Ut={AuthenticatedAccountRouteRoute:Vt,AuthenticatedSettingsRouteRoute:X._addFileChildren(Ht),AuthenticatedDashboardRoute:ht,AuthenticatedErrorsErrorRoute:It,AuthenticatedAddressesIndexRoute:kt,AuthenticatedChainsIndexRoute:Ot,AuthenticatedHelpIndexRoute:Dt,AuthenticatedOrdersIndexRoute:Et,AuthenticatedPaymentAssetsIndexRoute:Tt,AuthenticatedPaymentsIndexRoute:wt,AuthenticatedRpcIndexRoute:Ct},Wt={IndexRoute:mt,authRouteRoute:zt,AuthenticatedRouteRoute:J._addFileChildren(Ut),InstallRoute:pt,errors401Route:bt,errors403Route:yt,errors404Route:vt,errors500Route:_t,errors503Route:gt},Gt=W._addFileChildren(Wt)._addFileTypes(),$=new le({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}}}),Kt=de({routeTree:Gt,context:{queryClient:$},scrollRestoration:!0,defaultPreload:`intent`,defaultPreloadStaleTime:0});export{G as i,Kt as n,K as r,$ as t}; \ No newline at end of file diff --git a/src/www/assets/routes-CJI6s37t.js b/src/www/assets/routes-CJI6s37t.js new file mode 100644 index 0000000..daa0be8 --- /dev/null +++ b/src/www/assets/routes-CJI6s37t.js @@ -0,0 +1 @@ +var e=()=>null;export{e as component}; \ No newline at end of file diff --git a/src/www/assets/rpc-BVbqsnlT.js b/src/www/assets/rpc-BVbqsnlT.js new file mode 100644 index 0000000..c1de18b --- /dev/null +++ b/src/www/assets/rpc-BVbqsnlT.js @@ -0,0 +1 @@ +import{$n as e,Cr as t,Di as n,Dr as r,Ei as i,Er as a,Gn as o,Gr as s,Hi as c,Hn as l,Jn as u,Kn as d,Ni as f,Oi as p,Or as m,Qn as h,Sr as g,Tr as ee,Un as _,Wn as v,Xn as y,Yn as b,Zl as te,Zn as ne,_r as re,aa as x,ar as S,br as C,cr as w,dr as T,er as E,fr as D,gi as ie,gr as ae,hi as oe,hr as se,ir as ce,kr as le,lr as O,mr as k,nr as ue,nu as de,or as fe,ou as pe,pr as me,qn as he,rr as ge,ru as _e,sr as A,tr as ve,ur as j,vr as ye,wr as be,xr as xe,yr as Se}from"./messages-BovT1T-w.js";import{a as M}from"./auth-store-BpIS8RMn.js";import{t as Ce}from"./router-Dohuf5K5.js";import{r as we}from"./route-BxpeArPd.js";import{P as N,R as Te,o as P,r as Ee}from"./search-provider-Cx1K1ilz.js";import{i as F,t as I}from"./button-DJA4fnJ8.js";import{a as L,c as R,l as De,r as Oe,s as ke,t as Ae}from"./dropdown-menu-CUea1X0A.js";import{d as je,g as Me,l as Ne,m as Pe,p as Fe,u as Ie}from"./command-BwVY_kli.js";import{t as Le}from"./checkbox-B_Isethe.js";import{a as Re,i as z,n as B,o as ze,r as V,s as Be,t as Ve}from"./select-DcStuzoT.js";import{t as He}from"./separator-CRLYw2cW.js";import{t as Ue}from"./switch-R6BNZUH1.js";import{t as We}from"./createLucideIcon-D28ivbfF.js";import{_ as Ge,d as H,f as Ke,g as qe,h as Je,n as Ye,p as Xe,r as Ze,t as Qe,v as $e,y as et}from"./data-table-CmcvKcj8.js";import{t as tt}from"./arrow-left-BrKcUadm.js";import{t as nt}from"./ellipsis-Y4gZr59G.js";import{t as rt}from"./empty-state-Cam-sX8U.js";import{n as it,t as at}from"./chains-store-Dzu_Y00B.js";import{n as ot,t as st}from"./trash-2-Du706Ujr.js";import{n as U}from"./dist-DvAgZMq72.js";import{a as ct,c as W,n as lt,r as ut,s as dt}from"./zod-Cymc5bS-.js";import{a as G,c as ft,i as K,l as pt,n as q,o as J,s as Y,t as mt}from"./form-DdHiBYMe.js";import{t as X}from"./input-DiRPHDd8.js";import{t as ht}from"./page-header-BBJ9dE3-.js";import{t as Z}from"./badge-BAmRBT3U.js";import{t as gt}from"./use-table-url-state-C7-IMA3_.js";import{t as _t}from"./long-text-BXQXVuRh.js";import{t as vt}from"./coming-soon-dialog-DMmjLgiX.js";var yt=We(`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=pe(_e(),1),$=de(),bt=dt({network:W().min(1,v()),type:ut([`http`,`ws`]),url:W().url(_()),api_key:W().default(``),weight:lt().min(1,l()),enabled:ct().default(!0)});function xt({open:t,onOpenChange:n,currentRow:r,onSuccess:i}){let{chains:a}=at(),s=pt({resolver:ft(bt),defaultValues:{network:``,type:`http`,url:``,api_key:``,weight:1,enabled:!0}}),l=M.useMutation(`post`,`/admin/api/v1/rpc-nodes`),f=M.useMutation(`patch`,`/admin/api/v1/rpc-nodes/{id}`);(0,Q.useEffect)(()=>{t&&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})},[t,r,s]);function p(e){if(r?.id){f.mutate({params:{path:{id:r.id}},body:{url:e.url,api_key:e.api_key,weight:e.weight,enabled:e.enabled}},{onSuccess:()=>{U.success(d()),n(!1),i?.()}});return}l.mutate({body:{network:e.network,type:e.type,url:e.url,api_key:e.api_key,weight:e.weight,enabled:e.enabled}},{onSuccess:()=>{U.success(o()),n(!1),i?.()}})}let m=l.isPending||f.isPending;return(0,$.jsx)(Ne,{onOpenChange:n,open:t,children:(0,$.jsxs)(Ie,{children:[(0,$.jsxs)(Fe,{children:[(0,$.jsx)(Pe,{children:r?E():e()}),(0,$.jsx)(je,{children:r?h():ne()})]}),(0,$.jsx)(mt,{...s,children:(0,$.jsxs)(`form`,{className:`space-y-4`,onSubmit:s.handleSubmit(p),children:[(0,$.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,$.jsx)(K,{control:s.control,name:`network`,render:({field:e})=>(0,$.jsxs)(G,{children:[(0,$.jsx)(J,{children:j()}),(0,$.jsxs)(Ve,{disabled:!!r,onValueChange:e.onChange,value:e.value,children:[(0,$.jsx)(q,{children:(0,$.jsx)(z,{className:`w-full`,children:(0,$.jsx)(Re,{placeholder:c()})})}),(0,$.jsx)(B,{children:a.filter(e=>!!e.network).map(e=>(0,$.jsx)(V,{value:e.network??``,children:e.display_name??e.network},e.network))})]}),(0,$.jsx)(Y,{})]})}),(0,$.jsx)(K,{control:s.control,name:`type`,render:({field:e})=>(0,$.jsxs)(G,{children:[(0,$.jsx)(J,{children:O()}),(0,$.jsxs)(Ve,{disabled:!!r,onValueChange:e.onChange,value:e.value,children:[(0,$.jsx)(q,{children:(0,$.jsx)(z,{className:`w-full`,children:(0,$.jsx)(Re,{placeholder:y()})})}),(0,$.jsxs)(B,{children:[(0,$.jsx)(V,{value:`http`,children:`HTTP`}),(0,$.jsx)(V,{value:`ws`,children:`WebSocket`})]})]}),(0,$.jsx)(Y,{})]})})]}),(0,$.jsx)(K,{control:s.control,name:`url`,render:({field:e})=>(0,$.jsxs)(G,{children:[(0,$.jsx)(J,{children:w()}),(0,$.jsx)(q,{children:(0,$.jsx)(X,{placeholder:`https://api.trongrid.io`,...e})}),(0,$.jsx)(Y,{})]})}),(0,$.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,$.jsx)(K,{control:s.control,name:`api_key`,render:({field:e})=>(0,$.jsxs)(G,{children:[(0,$.jsx)(J,{children:`API Key`}),(0,$.jsx)(q,{children:(0,$.jsx)(X,{placeholder:b(),...e})}),(0,$.jsx)(Y,{})]})}),(0,$.jsx)(K,{control:s.control,name:`weight`,render:({field:e})=>(0,$.jsxs)(G,{children:[(0,$.jsx)(J,{children:A()}),(0,$.jsx)(q,{children:(0,$.jsx)(X,{name:e.name,onBlur:e.onBlur,onChange:t=>e.onChange(t.target.value),ref:e.ref,type:`number`,value:String(e.value??``)})}),(0,$.jsx)(Y,{})]})})]}),(0,$.jsx)(K,{control:s.control,name:`enabled`,render:({field:e})=>(0,$.jsxs)(G,{className:`flex flex-row items-center gap-3 rounded-lg border p-3`,children:[(0,$.jsx)(q,{children:(0,$.jsx)(Le,{checked:e.value,onCheckedChange:t=>e.onChange(!!t)})}),(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsx)(J,{children:u()}),(0,$.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:he()})]})]})}),(0,$.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,$.jsx)(I,{onClick:()=>n(!1),type:`button`,variant:`outline`,children:te()}),(0,$.jsx)(I,{disabled:m,type:`submit`,children:m?ie():oe()})]})]})})]})})}function St(e){return[{id:`switch`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:f()}),cell:({row:t})=>(0,$.jsx)(Ue,{checked:!!t.original.enabled,onCheckedChange:()=>e(t.original.enabled?`disable`:`enable`,t.original)}),enableSorting:!1,enableHiding:!1,meta:{label:f(),skeleton:`switch`,sticky:`left`,th:{className:F(`rounded-tl-[inherit]`)}}},{accessorKey:`status`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:k()}),cell:({row:e})=>{let t=e.original.status??`unknown`,n=`bg-slate-500/10 text-slate-600`,r=T();return t===`ok`?(n=`bg-emerald-500/10 text-emerald-600`,r=me()):t===`down`&&(n=`bg-rose-500/10 text-rose-600`,r=D()),(0,$.jsx)(Z,{className:n,children:r})},filterFn:(e,t,n)=>n.includes(String(e.getValue(t))),meta:{label:k(),skeleton:`badge`}},{accessorKey:`network`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:j()}),cell:({row:e})=>(0,$.jsx)(`div`,{className:`min-w-24 font-medium`,children:e.original.network??`-`}),enableHiding:!1,meta:{label:j(),skeleton:`short`}},{accessorKey:`type`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:O()}),filterFn:(e,t,n)=>n.includes(String(e.getValue(t))),meta:{label:O(),skeleton:`short`}},{accessorKey:`url`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:w()}),cell:({row:e})=>(0,$.jsx)(_t,{className:`min-w-80`,children:e.original.url??`-`}),meta:{label:w(),skeleton:`long`}},{accessorKey:`weight`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:A()}),cell:({row:e})=>e.original.weight??`-`,meta:{label:A(),skeleton:`id`}},{accessorKey:`last_latency_ms`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:fe()}),cell:({row:e})=>e.original.last_latency_ms?`${e.original.last_latency_ms} ms`:`-`,meta:{label:fe(),skeleton:`id`}},{accessorKey:`last_checked_at`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:S()}),cell:({row:e})=>P(e.original.last_checked_at),meta:{label:S(),skeleton:`date`}},{accessorKey:`api_key`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:`API Key`}),cell:({row:e})=>(0,$.jsx)(_t,{children:e.original.api_key??`-`}),meta:{label:`API Key`,skeleton:`long`}},{accessorKey:`created_at`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:p()}),cell:({row:e})=>P(e.original.created_at),meta:{label:p(),skeleton:`date`}},{accessorKey:`updated_at`,header:({column:e})=>(0,$.jsx)(H,{column:e,title:n()}),cell:({row:e})=>P(e.original.updated_at),meta:{label:n(),skeleton:`date`}},{id:`actions`,enableHiding:!1,meta:{label:i(),skeleton:`action`,sticky:`right`,className:F(`w-12`)},cell:({row:t})=>(0,$.jsxs)(Ae,{modal:!1,children:[(0,$.jsx)(De,{asChild:!0,children:(0,$.jsxs)(I,{className:`flex h-8 w-8 p-0 data-[state=open]:bg-muted`,variant:`ghost`,children:[(0,$.jsx)(nt,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{className:`sr-only`,children:`Open menu`})]})}),(0,$.jsxs)(Oe,{align:`end`,className:`w-40`,children:[(0,$.jsxs)(L,{onClick:()=>e(`edit`,t.original),children:[ve(),(0,$.jsx)(R,{children:(0,$.jsx)(it,{size:16})})]}),(0,$.jsxs)(L,{onClick:()=>e(`health-check`,t.original),children:[ce(),(0,$.jsx)(R,{children:(0,$.jsx)(yt,{size:16})})]}),(0,$.jsx)(ke,{}),(0,$.jsxs)(L,{onClick:()=>e(`delete`,t.original),variant:`destructive`,children:[s(),(0,$.jsx)(R,{children:(0,$.jsx)(st,{size:16})})]})]})]})}]}var Ct=we(`/_authenticated/rpc/`),wt=[{label:me(),value:`ok`},{label:D(),value:`down`},{label:T(),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}=gt({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=Ke({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:Xe(),getFilteredRowModel:Ge(),getPaginationRowModel:$e(),getSortedRowModel:et(),getFacetedRowModel:Je(),getFacetedUniqueValues:qe()});(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)(Qe,{filters:[{columnId:`type`,title:O(),options:m},{columnId:`status`,title:k(),options:[...wt]}],onRefresh:r,searchPlaceholder:ge(),table:p}),(0,$.jsx)(Ze,{className:`min-w-[1200px]`,emptyText:ue(),loading:t,table:p}),(0,$.jsx)(Ye,{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:F(`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:n,keyword:i,onKeywordChange:o,selectedPanel:s,onSelect:c,totalNodes:l,hiddenOnMobile:u}){return(0,$.jsxs)(`div`,{className:F(`flex w-full flex-col gap-2 sm:w-56 lg:w-72 2xl:w-80`,u&&`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:le()}),(0,$.jsx)(Te,{size:20})]}),(0,$.jsx)(Z,{variant:`secondary`,children:m({count:String(e.length)})})]}),(0,$.jsxs)(`div`,{className:`relative block`,children:[(0,$.jsx)(Me,{className:`pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground`}),(0,$.jsx)(X,{className:`pl-9`,onChange:e=>o(e.target.value),placeholder:r(),value:i})]})]}),(0,$.jsxs)(Ee,{className:`-mx-3 h-full overflow-auto p-3`,children:[(0,$.jsx)(Dt,{active:s===`overview`,onClick:()=>c(`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:a()}),(0,$.jsx)(`div`,{className:`mt-1 text-muted-foreground text-xs`,children:ee({chains:String(e.length),nodes:String(l)})})]}),(0,$.jsx)(Te,{className:`mt-0.5 size-4 text-muted-foreground`})]})}),(0,$.jsx)(He,{className:`my-1`}),n?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)(N,{className:`h-4 w-24`})}),(0,$.jsxs)(`div`,{className:`mt-2 flex items-center justify-between gap-2`,children:[(0,$.jsx)(N,{className:`h-3 w-20`}),(0,$.jsx)(N,{className:`h-5 w-12 rounded-full`})]})]},e)):e.map((n,r)=>{let i=n.network??n.display_name??String(r);return(0,$.jsxs)(`div`,{children:[(0,$.jsx)(Dt,{active:s===n.network,onClick:()=>c(n.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:n.display_name??be()}),(0,$.jsxs)(`div`,{className:`mt-1 flex items-center justify-between gap-2`,children:[(0,$.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:t({count:String(n.nodeCount??0)})}),(0,$.jsx)(Z,{className:`shrink-0 text-xs`,variant:`outline`,children:n.network??`-`})]})]})})}),rv.reduce((e,t)=>(t.network&&(e[t.network]=(e[t.network]??0)+1),e),{}),[v]),b=(0,Q.useMemo)(()=>e.map(e=>({...e,nodeCount:e.network?y[e.network]??0:0})),[e,y]),ne=(0,Q.useMemo)(()=>{let e=p.trim().toLowerCase();return e?b.filter(t=>[t.display_name,t.network].filter(Boolean).some(t=>String(t).toLowerCase().includes(e))):b},[b,p]),S=(0,Q.useMemo)(()=>h===`overview`?v:v.filter(e=>e.network===h),[v,h]);(0,Q.useEffect)(()=>{h!==`overview`&&!e.some(e=>e.network===h)&&(g(`overview`),_(null))},[e,h]);async function C(){await Ce.invalidateQueries({queryKey:[`get`,`/admin/api/v1/rpc-nodes`]})}async function w(){if(d?.row.id){if(d.action===`enable`||d.action===`disable`)await r.mutateAsync({params:{path:{id:d.row.id}},body:{enabled:d.action===`enable`}}),U.success(x());else if(d.action===`health-check`){let e=await i.mutateAsync({params:{path:{id:d.row.id}}}),t=e.data?.status??`unknown`,n=e.data?.last_latency_ms;U.success(Se({status:t,latency:n?ye({latency:String(n)}):``}))}await C(),f(null)}}async function T(e,t){if(e===`edit`){u(t),o(!0);return}if(e===`enable`||e===`disable`){if(!t.id)return;await r.mutateAsync({params:{path:{id:t.id}},body:{enabled:e===`enable`}}),U.success(x()),await C();return}if(e===`delete`){c(!0);return}f({action:e,row:t})}let E=ee!==null;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Be,{fixed:!0}),(0,$.jsx)(ze,{fixed:!0,children:(0,$.jsxs)(`section`,{className:`flex h-full gap-6`,children:[(0,$.jsx)(Ot,{chains:ne,hiddenOnMobile:E,isLoading:t,keyword:p,onKeywordChange:m,onSelect:e=>{g(e),_(e)},selectedPanel:h,totalNodes:v.length}),(0,$.jsx)(`div`,{className:F(`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,$.jsx)(kt,{isLoading:n.isLoading,nodes:S,onAction:T,onBack:()=>_(null),onCreate:()=>c(!0),onRefresh:()=>{n.refetch()}})})]})}),(0,$.jsx)(xt,{currentRow:l,onOpenChange:o,onSuccess:()=>n.refetch(),open:a}),(0,$.jsx)(vt,{onOpenChange:c,open:s}),(0,$.jsx)(Ne,{onOpenChange:e=>{e||f(null)},open:!!d,children:(0,$.jsxs)(Ie,{children:[(0,$.jsxs)(Fe,{children:[(0,$.jsx)(Pe,{children:se()}),(0,$.jsx)(je,{children:d?ae({url:String(d.row.url??``),action:d.action}):null})]}),(0,$.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,$.jsx)(I,{onClick:()=>f(null),variant:`outline`,children:te()}),(0,$.jsx)(I,{onClick:w,children:re()})]})]})})]})}var jt=At;export{jt as component}; \ No newline at end of file diff --git a/src/www/assets/search-provider-Cx1K1ilz.js b/src/www/assets/search-provider-Cx1K1ilz.js new file mode 100644 index 0000000..6631220 --- /dev/null +++ b/src/www/assets/search-provider-Cx1K1ilz.js @@ -0,0 +1,7 @@ +import{Al as e,As as t,Bc as n,Cl as r,Dl as i,El as a,Fc as o,Fl as s,Gc as c,Gl as l,Hc as u,Ic as d,Il as f,Jc as p,Jl as m,Kc as h,Lc as g,Ml as _,Ms as v,Nl as ee,Ns as y,Ol as b,Pc as x,Pl as S,Sl as C,Tl as te,Uc as w,Ul as ne,Wc as re,Wl as ie,Xc as ae,Xl as oe,Yc as se,Zc as ce,Zl as le,bl as ue,jl as de,js as fe,kl as pe,ks as me,nu as he,ou as ge,qc as _e,ql as ve,ru as ye,t as be,wl as xe,xl as Se}from"./messages-BovT1T-w.js";import{a as Ce,c as we,l as Te,n as Ee}from"./auth-store-BpIS8RMn.js";import{t as De}from"./useRouter-D03zSgJO.js";import{g as Oe,t as ke}from"./useStore-1-QVtiLb.js";import{n as Ae}from"./with-selector-D_dmjfol.js";import{t as je}from"./useNavigate-Dg8CkCoa.js";import{t as T}from"./dist-15n4mVGL.js";import{d as E,i as D,l as Me,r as Ne,s as O,t as k}from"./button-DJA4fnJ8.js";import{a as Pe,i as Fe,o as Ie,r as Le,s as Re,t as ze}from"./wallet--XSRr4dT.js";import{i as A,o as Be,r as j}from"./dist-DG5UMlBd.js";import{t as M}from"./dist-Cp1lAGZy.js";import{r as Ve,t as N}from"./dist-BEDXr2LC.js";import{d as He,f as Ue,u as We}from"./dropdown-menu-CUea1X0A.js";import{C as Ge,E as Ke,S as qe,T as Je,_ as Ye,a as Xe,b as Ze,c as Qe,h as $e,i as et,n as tt,o as P,r as nt,s as rt,v as it,w as at,x as ot,y as st}from"./command-BwVY_kli.js";import{n as ct,r as F}from"./dist-DlZiaY1y.js";import"./separator-CRLYw2cW.js";import{r as lt,t as ut}from"./cookies-BNZcTwGc.js";import{n as dt,r as ft}from"./font-provider-DvtNHF7l.js";import{n as I}from"./theme-provider-CRKya7Cx.js";import{t as L}from"./createLucideIcon-D28ivbfF.js";import{t as pt}from"./circle-check-Dh8WOZF0.js";import"./input-DiRPHDd8.js";var R=ge(ye(),1);function mt(e){let t=De(),n=(0,R.useRef)(void 0);return ke(t.stores.location,r=>{let i=e?.select?e.select(r):r;if(e?.structuralSharing??t.options.defaultStructuralSharing){let e=Oe(n.current,i);return n.current=e,e}return i})}var z=he(),ht=`AlertDialog`,[gt,_t]=Be(ht,[Ke]),B=Ke(),vt=e=>{let{__scopeAlertDialog:t,...n}=e,r=B(t);return(0,z.jsx)(qe,{...r,...n,modal:!0})};vt.displayName=ht;var yt=`AlertDialogTrigger`,bt=R.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=B(n);return(0,z.jsx)(at,{...i,...r,ref:t})});bt.displayName=yt;var xt=`AlertDialogPortal`,St=e=>{let{__scopeAlertDialog:t,...n}=e,r=B(t);return(0,z.jsx)(ot,{...r,...n})};St.displayName=xt;var Ct=`AlertDialogOverlay`,wt=R.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=B(n);return(0,z.jsx)(Ze,{...i,...r,ref:t})});wt.displayName=Ct;var V=`AlertDialogContent`,[Tt,Et]=gt(V),Dt=Me(`AlertDialogContent`),Ot=R.forwardRef((e,t)=>{let{__scopeAlertDialog:n,children:r,...i}=e,a=B(n),o=R.useRef(null),s=E(t,o),c=R.useRef(null);return(0,z.jsx)(Je,{contentName:V,titleName:kt,docsSlug:`alert-dialog`,children:(0,z.jsx)(Tt,{scope:n,cancelRef:c,children:(0,z.jsxs)(it,{role:`alertdialog`,...a,...i,ref:s,onOpenAutoFocus:A(i.onOpenAutoFocus,e=>{e.preventDefault(),c.current?.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,z.jsx)(Dt,{children:r}),(0,z.jsx)(Lt,{contentRef:o})]})})})});Ot.displayName=V;var kt=`AlertDialogTitle`,At=R.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=B(n);return(0,z.jsx)(Ge,{...i,...r,ref:t})});At.displayName=kt;var jt=`AlertDialogDescription`,Mt=R.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=B(n);return(0,z.jsx)(st,{...i,...r,ref:t})});Mt.displayName=jt;var Nt=`AlertDialogAction`,Pt=R.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=B(n);return(0,z.jsx)(Ye,{...i,...r,ref:t})});Pt.displayName=Nt;var Ft=`AlertDialogCancel`,It=R.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=Et(Ft,n),a=B(n),o=E(t,i);return(0,z.jsx)(Ye,{...a,...r,ref:o})});It.displayName=Ft;var Lt=({contentRef:e})=>{let t=`\`${V}\` requires a description for the component to be accessible for screen reader users. + +You can add a description to the \`${V}\` by passing a \`${jt}\` 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 \`${V}\`. 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 R.useEffect(()=>{document.getElementById(e.current?.getAttribute(`aria-describedby`))||console.warn(t)},[t,e]),null},Rt=vt,zt=St,Bt=wt,Vt=Ot,Ht=It,Ut=At,Wt=Mt,Gt=Ae();function Kt(){return(0,Gt.useSyncExternalStore)(qt,()=>!0,()=>!1)}function qt(){return()=>{}}var Jt=`Avatar`,[Yt,Xt]=Be(Jt),[Zt,Qt]=Yt(Jt),$t=R.forwardRef((e,t)=>{let{__scopeAvatar:n,...r}=e,[i,a]=R.useState(`idle`);return(0,z.jsx)(Zt,{scope:n,imageLoadingStatus:i,onImageLoadingStatusChange:a,children:(0,z.jsx)(T.span,{...r,ref:t})})});$t.displayName=Jt;var en=`AvatarImage`,tn=R.forwardRef((e,t)=>{let{__scopeAvatar:n,src:r,onLoadingStatusChange:i=()=>{},...a}=e,o=Qt(en,n),s=on(r,a),c=N(e=>{i(e),o.onImageLoadingStatusChange(e)});return j(()=>{s!==`idle`&&c(s)},[s,c]),s===`loaded`?(0,z.jsx)(T.img,{...a,ref:t,src:r}):null});tn.displayName=en;var nn=`AvatarFallback`,rn=R.forwardRef((e,t)=>{let{__scopeAvatar:n,delayMs:r,...i}=e,a=Qt(nn,n),[o,s]=R.useState(r===void 0);return R.useEffect(()=>{if(r!==void 0){let e=window.setTimeout(()=>s(!0),r);return()=>window.clearTimeout(e)}},[r]),o&&a.imageLoadingStatus!==`loaded`?(0,z.jsx)(T.span,{...i,ref:t}):null});rn.displayName=nn;function an(e,t){return e?t?(e.src!==t&&(e.src=t),e.complete&&e.naturalWidth>0?`loaded`:`loading`):`error`:`idle`}function on(e,{referrerPolicy:t,crossOrigin:n}){let r=Kt(),i=R.useRef(null),a=r?(i.current||=new window.Image,i.current):null,[o,s]=R.useState(()=>an(a,e));return j(()=>{s(an(a,e))},[a,e]),j(()=>{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 sn=$t,cn=tn,ln=rn;function un(e,[t,n]){return Math.min(n,Math.max(t,e))}function dn(e,t){return R.useReducer((e,n)=>t[e][n]??e,e)}var fn=`ScrollArea`,[pn,mn]=Be(fn),[hn,H]=pn(fn),gn=R.forwardRef((e,t)=>{let{__scopeScrollArea:n,type:r=`hover`,dir:i,scrollHideDelay:a=600,...o}=e,[s,c]=R.useState(null),[l,u]=R.useState(null),[d,f]=R.useState(null),[p,m]=R.useState(null),[h,g]=R.useState(null),[_,v]=R.useState(0),[ee,y]=R.useState(0),[b,x]=R.useState(!1),[S,C]=R.useState(!1),te=E(t,e=>c(e)),w=Ve(i);return(0,z.jsx)(hn,{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,z.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}})})});gn.displayName=fn;var _n=`ScrollAreaViewport`,vn=R.forwardRef((e,t)=>{let{__scopeScrollArea:n,children:r,nonce:i,...a}=e,o=H(_n,n),s=E(t,R.useRef(null),o.onViewportChange);return(0,z.jsxs)(z.Fragment,{children:[(0,z.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,z.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,z.jsx)(`div`,{ref:o.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})});vn.displayName=_n;var U=`ScrollAreaScrollbar`,yn=R.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=H(U,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return R.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,z.jsx)(bn,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,z.jsx)(xn,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,z.jsx)(Sn,{...r,ref:t,forceMount:n}):i.type===`always`?(0,z.jsx)(Cn,{...r,ref:t}):null});yn.displayName=U;var bn=R.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=H(U,e.__scopeScrollArea),[a,o]=R.useState(!1);return R.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,z.jsx)(M,{present:n||a,children:(0,z.jsx)(Sn,{"data-state":a?`visible`:`hidden`,...r,ref:t})})}),xn=R.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=H(U,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=q(()=>c(`SCROLL_END`),100),[s,c]=dn(`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 R.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>c(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,c]),R.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,z.jsx)(M,{present:n||s!==`hidden`,children:(0,z.jsx)(Cn,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:A(e.onPointerEnter,()=>c(`POINTER_ENTER`)),onPointerLeave:A(e.onPointerLeave,()=>c(`POINTER_LEAVE`))})})}),Sn=R.forwardRef((e,t)=>{let n=H(U,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=R.useState(!1),s=e.orientation===`horizontal`,c=q(()=>{if(n.viewport){let e=n.viewport.offsetWidth{let{orientation:n=`vertical`,...r}=e,i=H(U,e.__scopeScrollArea),a=R.useRef(null),o=R.useRef(0),[s,c]=R.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=Pn(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 Fn(e,o.current,s,t)}return n===`horizontal`?(0,z.jsx)(wn,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=In(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,z.jsx)(Tn,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=In(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}),wn=R.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=H(U,e.__scopeScrollArea),[o,s]=R.useState(),c=R.useRef(null),l=E(t,c,a.onScrollbarXChange);return R.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,z.jsx)(On,{"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":K(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),Rn(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:G(o.paddingLeft),paddingEnd:G(o.paddingRight)}})}})}),Tn=R.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=H(U,e.__scopeScrollArea),[o,s]=R.useState(),c=R.useRef(null),l=E(t,c,a.onScrollbarYChange);return R.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,z.jsx)(On,{"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":K(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),Rn(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:G(o.paddingTop),paddingEnd:G(o.paddingBottom)}})}})}),[En,Dn]=pn(U),On=R.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=H(U,n),[m,h]=R.useState(null),g=E(t,e=>h(e)),_=R.useRef(null),v=R.useRef(``),ee=p.viewport,y=r.content-r.viewport,b=N(u),x=N(c),S=q(d,10);function C(e){_.current&&l({x:e.clientX-_.current.left,y:e.clientY-_.current.top})}return R.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]),R.useEffect(x,[r,x]),J(m,S),J(p.content,S),(0,z.jsx)(En,{scope:n,scrollbar:m,hasThumb:i,onThumbChange:N(a),onThumbPointerUp:N(o),onThumbPositionChange:x,onThumbPointerDown:N(s),children:(0,z.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})})})}),W=`ScrollAreaThumb`,kn=R.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=Dn(W,e.__scopeScrollArea);return(0,z.jsx)(M,{present:n||i.hasThumb,children:(0,z.jsx)(An,{ref:t,...r})})}),An=R.forwardRef((e,t)=>{let{__scopeScrollArea:n,style:r,...i}=e,a=H(W,n),o=Dn(W,n),{onThumbPositionChange:s}=o,c=E(t,e=>o.onThumbChange(e)),l=R.useRef(void 0),u=q(()=>{l.current&&=(l.current(),void 0)},100);return R.useEffect(()=>{let e=a.viewport;if(e){let t=()=>{u(),l.current||(l.current=zn(e,s),s())};return s(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[a.viewport,u,s]),(0,z.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)})});kn.displayName=W;var jn=`ScrollAreaCorner`,Mn=R.forwardRef((e,t)=>{let n=H(jn,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,z.jsx)(Nn,{...e,ref:t}):null});Mn.displayName=jn;var Nn=R.forwardRef((e,t)=>{let{__scopeScrollArea:n,...r}=e,i=H(jn,n),[a,o]=R.useState(0),[s,c]=R.useState(0),l=!!(a&&s);return J(i.scrollbarX,()=>{let e=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(e),c(e)}),J(i.scrollbarY,()=>{let e=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(e),o(e)}),l?(0,z.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 G(e){return e?parseInt(e,10):0}function Pn(e,t){let n=e/t;return isNaN(n)?0:n}function K(e){let t=Pn(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function Fn(e,t,n,r=`ltr`){let i=K(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 Ln([c,l],d)(e)}function In(e,t,n=`ltr`){let r=K(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=un(e,n===`ltr`?[0,o]:[o*-1,0]);return Ln([0,o],[0,s])(c)}function Ln(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 Rn(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 q(e,t){let n=N(e),r=R.useRef(0);return R.useEffect(()=>()=>window.clearTimeout(r.current),[]),R.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function J(e,t){let n=N(t);j(()=>{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 Bn=gn,Vn=vn,Hn=Mn,Un=L(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),Wn=L(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),Gn=L(`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`}]]),Kn=L(`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`}]]),qn=L(`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`}]]),Jn=L(`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=L(`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`}]]),Xn=L(`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`}]]),Zn=L(`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`}]]),Qn=L(`panel-left`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}]]),$n=L(`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`}]]),er=L(`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`}]]),tr=L(`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`}]]),nr=L(`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`}]]),rr=L(`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`}]]),ir=L(`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 ar({dir:e,className:t,...n}){return(0,z.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,z.jsx)(`title`,{children:`Directory Icon`}),(0,z.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,z.jsx)(`path`,{d:`M5.56 14.88L17.78 14.88`,fill:`none`,opacity:.72,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M5.56 22.09L16.08 22.09`,fill:`none`,opacity:.48,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M5.56 18.38L14.93 18.38`,fill:`none`,opacity:.55,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,z.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,z.jsx)(`circle`,{cx:7.51,cy:7.4,opacity:.8,r:2.54}),(0,z.jsx)(`path`,{d:`M12.06 6.14L17.78 6.14`,fill:`none`,opacity:.8,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M11.85 8.79L16.91 8.79`,fill:`none`,opacity:.6})]}),(0,z.jsx)(`path`,{d:`M29.41 7.4L34.67 7.4`,fill:`none`,opacity:.62,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`3px`}),(0,z.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,z.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,z.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,z.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 or(e){return(0,z.jsxs)(`svg`,{"data-name":`icon-layout-compact`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,z.jsx)(`title`,{children:`Compact Layout`}),(0,z.jsx)(`rect`,{height:40,rx:2,ry:2,strokeLinecap:`round`,strokeMiterlimit:10,width:4,x:5.84,y:5.2}),(0,z.jsxs)(`g`,{stroke:`#fff`,strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,z.jsx)(`path`,{d:`M7.26 11.56L8.37 11.56`,fill:`none`,opacity:.66,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M7.26 14.49L8.37 14.49`,fill:`none`,opacity:.51,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M7.26 17.39L8.37 17.39`,fill:`none`,opacity:.52,strokeWidth:`2px`}),(0,z.jsx)(`circle`,{cx:7.81,cy:7.25,fill:`#fff`,opacity:.8,r:1.16})]}),(0,z.jsx)(`path`,{d:`M15.81 14.49L22.89 14.49`,fill:`none`,opacity:.75,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`3px`}),(0,z.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,z.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,z.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,z.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,z.jsx)(`rect`,{height:3.42,opacity:.32,rx:.33,ry:.33,width:2.01,x:59.05,y:38.15}),(0,z.jsx)(`rect`,{height:6.58,opacity:.44,rx:.33,ry:.33,width:2.01,x:54.78,y:34.99}),(0,z.jsx)(`rect`,{height:8.7,opacity:.53,rx:.33,ry:.33,width:2.01,x:63.17,y:32.86}),(0,z.jsx)(`rect`,{height:12.4,opacity:.66,rx:.33,ry:.33,width:2.01,x:67.54,y:29.17})]}),(0,z.jsxs)(`g`,{opacity:.5,children:[(0,z.jsx)(`circle`,{cx:62.16,cy:18.63,r:7.5}),(0,z.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,z.jsxs)(`g`,{opacity:.74,children:[(0,z.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,z.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 sr(e){return(0,z.jsxs)(`svg`,{"data-name":`con-layout-default`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,z.jsx)(`title`,{children:`Default Layout`}),(0,z.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,z.jsx)(`rect`,{height:2.73,opacity:.5,rx:1.36,ry:1.36,width:16.72,x:29.63,y:18.39}),(0,z.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,z.jsx)(`rect`,{height:19.95,opacity:.4,rx:2.11,ry:2.11,width:21.8,x:29.63,y:24.22}),(0,z.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,z.jsx)(`rect`,{height:3.42,opacity:.32,rx:.33,ry:.33,width:2.01,x:61.06,y:38.15}),(0,z.jsx)(`rect`,{height:6.58,opacity:.44,rx:.33,ry:.33,width:2.01,x:56.78,y:34.99}),(0,z.jsx)(`rect`,{height:8.7,opacity:.53,rx:.33,ry:.33,width:2.01,x:65.17,y:32.86}),(0,z.jsx)(`rect`,{height:12.4,opacity:.66,rx:.33,ry:.33,width:2.01,x:69.55,y:29.17})]}),(0,z.jsxs)(`g`,{opacity:.5,children:[(0,z.jsx)(`circle`,{cx:63.17,cy:18.63,r:7.5}),(0,z.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,z.jsxs)(`g`,{opacity:.74,children:[(0,z.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,z.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,z.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,z.jsx)(`rect`,{height:40,opacity:.8,rx:2,ry:2,width:19.14,x:5.84,y:5.02}),(0,z.jsxs)(`g`,{stroke:`#fff`,children:[(0,z.jsx)(`path`,{d:`M9.02 17.39L21.25 17.39`,fill:`none`,opacity:.72,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M9.02 24.6L19.54 24.6`,fill:`none`,opacity:.48,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M9.02 20.88L18.4 20.88`,fill:`none`,opacity:.55,strokeWidth:`2px`}),(0,z.jsx)(`circle`,{cx:10.98,cy:9.91,fill:`#fff`,opacity:.8,r:2.54}),(0,z.jsx)(`path`,{d:`M15.53 8.65L21.25 8.65`,fill:`none`,opacity:.8,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M15.32 11.3L20.38 11.3`,fill:`none`,opacity:.6})]})]})]})}function cr(e){return(0,z.jsxs)(`svg`,{"data-name":`icon-layout-full`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,z.jsx)(`title`,{children:`Full Layout`}),(0,z.jsx)(`path`,{d:`M6.85 14.49L15.02 14.49`,fill:`none`,opacity:.75,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`3px`}),(0,z.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,z.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,z.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,z.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,z.jsx)(`rect`,{height:3.42,opacity:.32,rx:.33,ry:.33,width:2.01,x:59.05,y:38.15}),(0,z.jsx)(`rect`,{height:6.58,opacity:.44,rx:.33,ry:.33,width:2.01,x:54.78,y:34.99}),(0,z.jsx)(`rect`,{height:8.7,opacity:.53,rx:.33,ry:.33,width:2.01,x:63.17,y:32.86}),(0,z.jsx)(`rect`,{height:12.4,opacity:.66,rx:.33,ry:.33,width:2.01,x:67.54,y:29.17})]}),(0,z.jsxs)(`g`,{opacity:.5,children:[(0,z.jsx)(`circle`,{cx:62.16,cy:18.63,r:7.5}),(0,z.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,z.jsxs)(`g`,{opacity:.74,children:[(0,z.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,z.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 lr(e){return(0,z.jsxs)(`svg`,{"data-name":`icon-sidebar-floating`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,z.jsx)(`title`,{children:`Floating Sidebar`}),(0,z.jsx)(`rect`,{height:40,opacity:.8,rx:2,ry:2,strokeLinecap:`round`,strokeMiterlimit:10,width:19.74,x:5.89,y:5.15}),(0,z.jsxs)(`g`,{stroke:`#fff`,strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,z.jsx)(`path`,{d:`M9.81 18.36L22.04 18.36`,fill:`none`,opacity:.72,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M9.81 25.57L20.33 25.57`,fill:`none`,opacity:.48,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M9.81 21.85L19.18 21.85`,fill:`none`,opacity:.55,strokeWidth:`2px`}),(0,z.jsx)(`circle`,{cx:11.76,cy:10.88,fill:`#fff`,opacity:.8,r:2.54}),(0,z.jsx)(`path`,{d:`M16.31 9.62L22.04 9.62`,fill:`none`,opacity:.8,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M16.1 12.27L21.16 12.27`,fill:`none`,opacity:.6})]}),(0,z.jsx)(`path`,{d:`M30.59 9.62L35.85 9.62`,fill:`none`,opacity:.62,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`3px`}),(0,z.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,z.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 ur(e){return(0,z.jsxs)(`svg`,{"data-name":`icon-sidebar-inset`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,z.jsx)(`title`,{children:`Inset Sidebar`}),(0,z.jsx)(`rect`,{height:40,opacity:.2,rx:2,ry:2,strokeLinecap:`round`,strokeMiterlimit:10,width:50.22,x:23.39,y:5.57}),(0,z.jsx)(`path`,{d:`M5.08 17.05L17.31 17.05`,fill:`none`,opacity:.72,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M5.08 24.25L15.6 24.25`,fill:`none`,opacity:.48,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M5.08 20.54L14.46 20.54`,fill:`none`,opacity:.55,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,z.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,z.jsx)(`circle`,{cx:7.04,cy:9.57,opacity:.8,r:2.54}),(0,z.jsx)(`path`,{d:`M11.59 8.3L17.31 8.3`,fill:`none`,opacity:.8,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M11.38 10.95L16.44 10.95`,fill:`none`,opacity:.6})]})]})}function dr(e){return(0,z.jsxs)(`svg`,{"data-name":`icon-sidebar-sidebar`,viewBox:`0 0 79.86 51.14`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,z.jsx)(`title`,{children:`Sidebar`}),(0,z.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,z.jsx)(`path`,{d:`M5.56 14.88L17.78 14.88`,fill:`none`,opacity:.72,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M5.56 22.09L16.08 22.09`,fill:`none`,opacity:.48,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M5.56 18.38L14.93 18.38`,fill:`none`,opacity:.55,strokeLinecap:`round`,strokeMiterlimit:10,strokeWidth:`2px`}),(0,z.jsxs)(`g`,{strokeLinecap:`round`,strokeMiterlimit:10,children:[(0,z.jsx)(`circle`,{cx:7.51,cy:7.4,opacity:.8,r:2.54}),(0,z.jsx)(`path`,{d:`M12.06 6.14L17.78 6.14`,fill:`none`,opacity:.8,strokeWidth:`2px`}),(0,z.jsx)(`path`,{d:`M11.85 8.79L16.91 8.79`,fill:`none`,opacity:.6})]})]})}function fr(e){return(0,z.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,z.jsx)(`title`,{children:`Dark Theme`}),(0,z.jsxs)(`g`,{fill:`#1d2b3f`,children:[(0,z.jsx)(`rect`,{height:50.14,rx:3.5,ry:3.5,width:78.83,x:.53,y:.5}),(0,z.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,z.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,z.jsx)(`circle`,{cx:6.7,cy:7.04,fill:`#426187`,r:3.54}),(0,z.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,z.jsxs)(`g`,{fill:`#2a62bc`,children:[(0,z.jsx)(`rect`,{height:3.42,opacity:.32,rx:.33,ry:.33,width:2.75,x:33.36,y:19.73}),(0,z.jsx)(`rect`,{height:6.58,opacity:.44,rx:.33,ry:.33,width:2.75,x:29.64,y:16.57}),(0,z.jsx)(`rect`,{height:8.7,opacity:.53,rx:.33,ry:.33,width:2.75,x:37.16,y:14.44}),(0,z.jsx)(`rect`,{height:12.4,opacity:.53,rx:.33,ry:.33,width:2.75,x:41.19,y:10.75})]}),(0,z.jsx)(`circle`,{cx:62.74,cy:16.32,fill:`#2f5491`,opacity:.5,r:8}),(0,z.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,z.jsx)(`rect`,{fill:`#17273f`,height:18.62,rx:1.69,ry:1.69,width:41.62,x:29.64,y:27.75})]})}function pr(e){return(0,z.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,z.jsx)(`title`,{children:`Light Theme`}),(0,z.jsxs)(`g`,{fill:`#d9d9d9`,children:[(0,z.jsx)(`rect`,{height:50.14,rx:3.5,ry:3.5,width:78.83,x:.53,y:.5}),(0,z.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,z.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,z.jsx)(`circle`,{cx:6.7,cy:7.04,fill:`#fff`,r:3.54}),(0,z.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,z.jsxs)(`g`,{fill:`#c0c4c4`,children:[(0,z.jsx)(`rect`,{height:3.42,opacity:.32,rx:.33,ry:.33,width:2.75,x:33.36,y:19.73}),(0,z.jsx)(`rect`,{height:6.58,opacity:.44,rx:.33,ry:.33,width:2.75,x:29.64,y:16.57}),(0,z.jsx)(`rect`,{height:8.7,opacity:.53,rx:.33,ry:.33,width:2.75,x:37.16,y:14.44}),(0,z.jsx)(`rect`,{height:12.4,opacity:.53,rx:.33,ry:.33,width:2.75,x:41.19,y:10.75})]}),(0,z.jsx)(`circle`,{cx:62.74,cy:16.32,fill:`#fff`,r:8}),(0,z.jsxs)(`g`,{fill:`#d9d9d9`,children:[(0,z.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,z.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,z.jsx)(`rect`,{fill:`#fff`,height:18.62,rx:1.69,ry:1.69,width:41.62,x:29.64,y:27.75})]})}function mr({className:e,...t}){return(0,z.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,z.jsx)(`title`,{children:`System Theme`}),(0,z.jsx)(`path`,{d:`M0 0.03H22.88V51.17H0z`,opacity:.2}),(0,z.jsx)(`circle`,{cx:6.7,cy:7.04,fill:`#fff`,opacity:.8,r:3.54,stroke:`#fff`,strokeLinecap:`round`,strokeMiterlimit:10}),(0,z.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,z.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,z.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,z.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,z.jsx)(`rect`,{height:3.42,opacity:.31,rx:.33,ry:.33,stroke:`none`,width:2.75,x:33.36,y:19.73}),(0,z.jsx)(`rect`,{height:6.58,opacity:.4,rx:.33,ry:.33,stroke:`none`,width:2.75,x:29.64,y:16.57}),(0,z.jsx)(`rect`,{height:8.7,opacity:.26,rx:.33,ry:.33,stroke:`none`,width:2.75,x:37.16,y:14.44}),(0,z.jsx)(`rect`,{height:12.4,opacity:.37,rx:.33,ry:.33,stroke:`none`,width:2.75,x:41.19,y:10.75}),(0,z.jsxs)(`g`,{children:[(0,z.jsx)(`circle`,{cx:62.74,cy:16.32,opacity:.25,r:8}),(0,z.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,z.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 hr({...e}){return(0,z.jsx)(qe,{"data-slot":`sheet`,...e})}function gr({...e}){return(0,z.jsx)(at,{"data-slot":`sheet-trigger`,...e})}function _r({...e}){return(0,z.jsx)(ot,{"data-slot":`sheet-portal`,...e})}function vr({className:e,...t}){return(0,z.jsx)(Ze,{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 yr({className:e,children:t,side:n=`right`,showCloseButton:r=!0,...i}){return(0,z.jsxs)(_r,{children:[(0,z.jsx)(vr,{}),(0,z.jsxs)(it,{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,z.jsxs)(Ye,{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,z.jsx)($e,{className:`size-4`}),(0,z.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function br({className:e,...t}){return(0,z.jsx)(`div`,{className:D(`flex flex-col gap-1.5 p-4`,e),"data-slot":`sheet-header`,...t})}function xr({className:e,...t}){return(0,z.jsx)(`div`,{className:D(`mt-auto flex flex-col gap-2 p-4`,e),"data-slot":`sheet-footer`,...t})}function Sr({className:e,...t}){return(0,z.jsx)(Ge,{className:D(`font-semibold text-foreground`,e),"data-slot":`sheet-title`,...t})}function Cr({className:e,...t}){return(0,z.jsx)(st,{className:D(`text-muted-foreground text-sm`,e),"data-slot":`sheet-description`,...t})}var wr=`layout_collapsible`,Tr=`layout_variant`,Er=3600*24*7,Dr=`sidebar`,Or=`icon`,kr=(0,R.createContext)(null);function Ar({children:e}){let[t,n]=(0,R.useState)(()=>ut(wr)||Or),[r,i]=(0,R.useState)(()=>ut(Tr)||Dr),a=e=>{n(e),lt(wr,e,Er)},o=e=>{i(e),lt(Tr,e,Er)};return(0,z.jsx)(kr,{value:{resetLayout:()=>{a(Or),o(Dr)},defaultCollapsible:Or,collapsible:t,setCollapsible:a,defaultVariant:Dr,variant:r,setVariant:o},children:e})}function Y(){let e=(0,R.useContext)(kr);if(!e)throw Error(`useLayout must be used within a LayoutProvider`);return e}function jr({className:e,...t}){return(0,z.jsx)(`div`,{className:D(`animate-pulse rounded-md bg-accent`,e),"data-slot":`skeleton`,...t})}var X=768;function Mr(){let[e,t]=R.useState(void 0);return R.useEffect(()=>{let e=window.matchMedia(`(max-width: ${X-1}px)`),n=()=>{t(window.innerWidthe.removeEventListener(`change`,n)},[]),!!e}var Nr=`16rem`,Pr=`18rem`,Fr=`3rem`,Ir=`b`,Lr=R.createContext(null);function Z(){let e=R.useContext(Lr);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function Rr({defaultOpen:e=!0,open:t,onOpenChange:n,className:r,style:i,children:a,...o}){let s=Mr(),[c,l]=R.useState(!1),[u,d]=R.useState(e),f=t??u,p=R.useCallback(e=>{let t=typeof e==`function`?e(f):e;n?n(t):d(t),document.cookie=`${Te}=${t}; path=/; max-age=${we}`},[n,f]),m=R.useCallback(()=>s?l(e=>!e):p(e=>!e),[s,p]);R.useEffect(()=>{let e=e=>{e.key===Ir&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),m())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[m]);let h=f?`expanded`:`collapsed`,g=R.useMemo(()=>({state:h,open:f,setOpen:p,isMobile:s,openMobile:c,setOpenMobile:l,toggleSidebar:m}),[h,f,p,s,c,m]);return(0,z.jsx)(Lr.Provider,{value:g,children:(0,z.jsx)(Ie,{delayDuration:0,children:(0,z.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":Nr,"--sidebar-width-icon":Fr,...i},...o,children:a})})})}function zr({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,z.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,z.jsx)(hr,{onOpenChange:l,open:c,...a,children:(0,z.jsxs)(yr,{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":Pr},children:[(0,z.jsxs)(br,{className:`sr-only`,children:[(0,z.jsx)(Sr,{children:`Sidebar`}),(0,z.jsx)(Cr,{children:`Displays the mobile sidebar.`})]}),(0,z.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:i})]})}):(0,z.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,z.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,z.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,z.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 Br({className:e,onClick:t,...n}){let{toggleSidebar:r}=Z();return(0,z.jsxs)(k,{className:D(`size-7`,e),"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,onClick:e=>{t?.(e),r()},size:`icon`,variant:`ghost`,...n,children:[(0,z.jsx)(Qn,{}),(0,z.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function Vr({className:e,...t}){let{toggleSidebar:n}=Z();return(0,z.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 Hr({className:e,...t}){return(0,z.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 Ur({className:e,...t}){return(0,z.jsx)(`div`,{className:D(`flex flex-col gap-2 p-2`,e),"data-sidebar":`header`,"data-slot":`sidebar-header`,...t})}function Wr({className:e,...t}){return(0,z.jsx)(`div`,{className:D(`flex flex-col gap-2 p-2`,e),"data-sidebar":`footer`,"data-slot":`sidebar-footer`,...t})}function Gr({className:e,...t}){return(0,z.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 Kr({className:e,...t}){return(0,z.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 qr({className:e,asChild:t=!1,...n}){return(0,z.jsx)(t?O:`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 Jr({className:e,...t}){return(0,z.jsx)(`ul`,{className:D(`flex w-full min-w-0 flex-col gap-1`,e),"data-sidebar":`menu`,"data-slot":`sidebar-menu`,...t})}function Yr({className:e,...t}){return(0,z.jsx)(`li`,{className:D(`group/menu-item relative`,e),"data-sidebar":`menu-item`,"data-slot":`sidebar-menu-item`,...t})}var Xr=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 Zr({asChild:e=!1,isActive:t=!1,variant:n=`default`,size:r=`default`,tooltip:i,className:a,...o}){let s=e?O:`button`,{isMobile:c,state:l}=Z(),u=(0,z.jsx)(s,{className:D(Xr({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,z.jsxs)(Fe,{children:[(0,z.jsx)(Re,{asChild:!0,children:u}),(0,z.jsx)(Pe,{align:`center`,hidden:l!==`collapsed`||c,side:`right`,...i})]})):u}function Qr({className:e,...t}){return(0,z.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 $r({className:e,...t}){return(0,z.jsx)(`li`,{className:D(`group/menu-sub-item relative`,e),"data-sidebar":`menu-sub-item`,"data-slot":`sidebar-menu-sub-item`,...t})}function ei({asChild:e=!1,size:t=`md`,isActive:n=!1,className:r,...i}){return(0,z.jsx)(e?O:`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 ti(){return(0,z.jsxs)(hr,{children:[(0,z.jsx)(gr,{asChild:!0,children:(0,z.jsx)(k,{"aria-describedby":`config-drawer-description`,"aria-label":`Open theme settings`,className:`rounded-full`,size:`icon`,variant:`ghost`,children:(0,z.jsx)(tr,{"aria-hidden":`true`})})}),(0,z.jsx)(ni,{})]})}function ni(){let{setOpen:e}=Z(),{resetDir:t}=Le(),{resetFont:n}=dt(),{resetTheme:r}=I(),{resetLayout:i}=Y();return(0,z.jsxs)(yr,{className:`flex flex-col`,children:[(0,z.jsxs)(br,{className:`pb-0 text-start`,children:[(0,z.jsx)(Sr,{children:S()}),(0,z.jsx)(Cr,{id:`config-drawer-description`,children:ee()})]}),(0,z.jsxs)(`div`,{className:`space-y-6 overflow-y-auto px-4`,children:[(0,z.jsx)(ii,{}),(0,z.jsx)(ri,{}),(0,z.jsx)(ai,{}),(0,z.jsx)(oi,{}),(0,z.jsx)(si,{})]}),(0,z.jsx)(xr,{className:`gap-2`,children:(0,z.jsx)(k,{"aria-label":`Reset all settings to default values`,onClick:()=>{e(!0),t(),n(),r(),i()},variant:`destructive`,children:_()})})]})}function Q({title:e,showReset:t=!1,onReset:n,className:r}){return(0,z.jsxs)(`div`,{className:D(`mb-2 flex items-center gap-2 font-semibold text-muted-foreground text-sm`,r),children:[e,t&&n&&(0,z.jsx)(k,{className:`size-4 rounded-full`,onClick:n,size:`icon`,variant:`secondary`,children:(0,z.jsx)($n,{className:`size-3`})})]})}function $({item:e,isTheme:t=!1}){return(0,z.jsxs)(ct,{"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,z.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,z.jsx)(pt,{"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,z.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,z.jsx)(`div`,{"aria-live":`polite`,className:`mt-1 text-xs`,id:`${e.value}-description`,children:e.label})]})}function ri(){let{defaultTheme:e,theme:t,setTheme:n}=I();return(0,z.jsxs)(`div`,{children:[(0,z.jsx)(Q,{onReset:()=>n(e),showReset:t!==e,title:de()}),(0,z.jsx)(F,{"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:ne(),icon:mr},{value:`light`,label:l(),icon:pr},{value:`dark`,label:ie(),icon:fr}].map(e=>(0,z.jsx)($,{isTheme:!0,item:e},e.value))}),(0,z.jsx)(`div`,{className:`sr-only`,id:`theme-description`,children:`Choose between system preference, light mode, or dark mode`})]})}function ii(){let{font:e,setFont:t,resetFont:n}=dt();return(0,z.jsxs)(`div`,{children:[(0,z.jsx)(Q,{onReset:n,showReset:e!==ft[0],title:be()}),(0,z.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:ft.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]})}function ai(){let{defaultVariant:t,variant:n,setVariant:r}=Y();return(0,z.jsxs)(`div`,{className:`max-md:hidden`,children:[(0,z.jsx)(Q,{onReset:()=>r(t),showReset:t!==n,title:e()}),(0,z.jsx)(F,{"aria-describedby":`sidebar-description`,"aria-label":`Select sidebar style`,className:`grid w-full max-w-md grid-cols-3 gap-4`,onValueChange:r,value:n,children:[{value:`inset`,label:i(),icon:ur},{value:`floating`,label:a(),icon:lr},{value:`sidebar`,label:te(),icon:dr}].map(e=>(0,z.jsx)($,{item:e},e.value))}),(0,z.jsx)(`div`,{className:`sr-only`,id:`sidebar-description`,children:`Choose between inset, floating, or standard sidebar layout`})]})}function oi(){let{open:e,setOpen:t}=Z(),{defaultCollapsible:n,collapsible:i,setCollapsible:a}=Y(),o=e?`default`:i;return(0,z.jsxs)(`div`,{className:`max-md:hidden`,children:[(0,z.jsx)(Q,{onReset:()=>{t(!0),a(n)},showReset:o!==`default`,title:pe()}),(0,z.jsx)(F,{"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),a(e)},value:o,children:[{value:`default`,label:xe(),icon:sr},{value:`icon`,label:r(),icon:or},{value:`offcanvas`,label:C(),icon:cr}].map(e=>(0,z.jsx)($,{item:e},e.value))}),(0,z.jsx)(`div`,{className:`sr-only`,id:`layout-description`,children:`Choose between default expanded, compact icon-only, or full layout mode`})]})}function si(){let{defaultDir:e,dir:t,setDir:n}=Le();return(0,z.jsxs)(`div`,{children:[(0,z.jsx)(Q,{onReset:()=>n(e),showReset:e!==t,title:b()}),(0,z.jsx)(F,{"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:Se(),icon:e=>(0,z.jsx)(ar,{dir:`ltr`,...e})},{value:`rtl`,label:ue(),icon:e=>(0,z.jsx)(ar,{dir:`rtl`,...e})}].map(e=>(0,z.jsx)($,{item:e},e.value))}),(0,z.jsx)(`div`,{className:`sr-only`,id:`direction-description`,children:`Choose between left-to-right or right-to-left site direction`})]})}function ci({...e}){return(0,z.jsx)(Rt,{"data-slot":`alert-dialog`,...e})}function li({...e}){return(0,z.jsx)(zt,{"data-slot":`alert-dialog-portal`,...e})}function ui({className:e,...t}){return(0,z.jsx)(Bt,{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":`alert-dialog-overlay`,...t})}function di({className:e,size:t=`default`,...n}){return(0,z.jsxs)(li,{children:[(0,z.jsx)(ui,{}),(0,z.jsx)(Vt,{className:D(`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 fi({className:e,...t}){return(0,z.jsx)(`div`,{className:D(`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 pi({className:e,...t}){return(0,z.jsx)(`div`,{className:D(`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 mi({className:e,...t}){return(0,z.jsx)(Ut,{className:D(`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 hi({className:e,...t}){return(0,z.jsx)(Wt,{className:D(`text-muted-foreground text-sm`,e),"data-slot":`alert-dialog-description`,...t})}function gi({className:e,variant:t=`outline`,size:n=`default`,...r}){return(0,z.jsx)(k,{asChild:!0,size:n,variant:t,children:(0,z.jsx)(Ht,{className:D(e),"data-slot":`alert-dialog-cancel`,...r})})}function _i(e){let{title:t,desc:n,children:r,className:i,confirmText:a,cancelBtnText:o,destructive:s,isLoading:c,disabled:l=!1,form:u,handleConfirm:d,...f}=e;return(0,z.jsx)(ci,{...f,children:(0,z.jsxs)(di,{className:D(i&&i),children:[(0,z.jsxs)(fi,{className:`text-start`,children:[(0,z.jsx)(mi,{children:t}),(0,z.jsx)(hi,{asChild:!0,children:(0,z.jsx)(`div`,{children:n})})]}),r,(0,z.jsxs)(pi,{children:[(0,z.jsx)(gi,{disabled:c,children:o??le()}),(0,z.jsx)(k,{disabled:l||c,form:u,onClick:d,type:u?`submit`:`button`,variant:s?`destructive`:`default`,children:a??oe()})]})]})})}function vi({open:e,onOpenChange:t}){let n=je(),r=mt(),i=Ce.useMutation(`post`,`/admin/api/v1/auth/logout`);return(0,z.jsx)(_i,{className:`sm:max-w-sm`,confirmText:i.isPending?`退出中...`:m(),desc:ve(),destructive:!0,handleConfirm:async()=>{await i.mutateAsync({}),Ee();let e=r.href;n({to:`/sign-in`,search:{redirect:e},replace:!0})},onOpenChange:t,open:e,title:m()})}function yi({className:e,size:t=`default`,...n}){return(0,z.jsx)(sn,{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 bi({className:e,...t}){return(0,z.jsx)(cn,{className:D(`aspect-square size-full`,e),"data-slot":`avatar-image`,...t})}function xi({className:e,...t}){return(0,z.jsx)(ln,{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 Si(e=null){let[t,n]=(0,R.useState)(e);return[t,e=>n(t=>t===e?null:e)]}function Ci(e){if(!e)return`-`;let t=new Date(e.replace(` `,`T`));return Number.isNaN(t.getTime())?e:new Intl.DateTimeFormat(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1}).format(t)}function wi(e){return e?e.includes(` `)?e.slice(11,16):e.slice(5):``}function Ti(e,t=2){return Number(e??0).toLocaleString(`en-US`,{maximumFractionDigits:t})}function Ei(e,t=2){return`$${Number(e??0).toLocaleString(`en-US`,{maximumFractionDigits:t})}`}function Di(){return{user:{name:`GMPay`,email:`admin@gmpay.local`,avatar:`/avatars/shadcn.jpg`},teams:[{name:`GMPay`,logo:We,plan:y()}],navGroups:[{title:ce(),items:[{title:ae(),url:`/dashboard`,icon:Xn},{title:v(),url:`/payment-assets`,icon:Gn}]},{title:fe(),items:[{title:se(),url:`/orders`,icon:rr}]},{title:t(),items:[{title:me(),url:`/addresses`,icon:ze}]},{title:_e(),items:[{title:h(),url:`/chains`,icon:qn},{title:c(),url:`/rpc`,icon:ir}]},{title:re(),items:[{title:p(),url:`/payments`,icon:Kn},{title:w(),icon:tr,items:[{title:g(),url:`/settings`},{title:d(),url:`/settings/telegram`},{title:o(),url:`/settings/rate`},{title:x(),url:`/settings/epay`}]},{title:u(),icon:nr,items:[{title:n(),url:`/account/password`}]}]}]}}function Oi({className:e,children:t,...n}){return(0,z.jsxs)(Bn,{className:D(`relative`,e),"data-slot":`scroll-area`,...n,children:[(0,z.jsx)(Vn,{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,z.jsx)(ki,{}),(0,z.jsx)(Hn,{})]})}function ki({className:e,orientation:t=`vertical`,...n}){return(0,z.jsx)(yn,{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,z.jsx)(kn,{className:`relative flex-1 rounded-full bg-border`,"data-slot":`scroll-area-thumb`})})}function Ai(){let e=je(),{setTheme:t}=I(),{open:n,setOpen:r}=Ni(),i=Di(),a=R.useCallback(e=>{r(!1),e()},[r]);return(0,z.jsxs)(tt,{modal:!0,onOpenChange:r,open:n,children:[(0,z.jsx)(Xe,{placeholder:f()}),(0,z.jsx)(rt,{children:(0,z.jsxs)(Oi,{className:`h-72 pe-1`,type:`hover`,children:[(0,z.jsx)(nt,{children:s()}),i.navGroups.map(t=>(0,z.jsx)(et,{heading:t.title,children:t.items.map(t=>t.url?(0,z.jsxs)(P,{onSelect:()=>{a(()=>e({to:t.url}))},value:t.title,children:[(0,z.jsx)(`div`,{className:`flex size-4 items-center justify-center`,children:(0,z.jsx)(Un,{className:`size-2 text-muted-foreground/80`})}),t.title]},t.url):t.items?.map(n=>(0,z.jsxs)(P,{onSelect:()=>{a(()=>e({to:n.url}))},value:`${t.title}-${n.url}`,children:[(0,z.jsx)(`div`,{className:`flex size-4 items-center justify-center`,children:(0,z.jsx)(Un,{className:`size-2 text-muted-foreground/80`})}),t.title,` `,(0,z.jsx)(Wn,{}),` `,n.title]},`${t.title}-${n.url}`)))},t.title)),(0,z.jsx)(Qe,{}),(0,z.jsxs)(et,{heading:de(),children:[(0,z.jsxs)(P,{onSelect:()=>a(()=>t(`light`)),children:[(0,z.jsx)(He,{}),` `,(0,z.jsx)(`span`,{children:l()})]}),(0,z.jsxs)(P,{onSelect:()=>a(()=>t(`dark`)),children:[(0,z.jsx)(Ue,{className:`scale-90`}),(0,z.jsx)(`span`,{children:ie()})]}),(0,z.jsxs)(P,{onSelect:()=>a(()=>t(`system`)),children:[(0,z.jsx)(Yn,{}),(0,z.jsx)(`span`,{children:ne()})]})]})]})})]})}var ji=(0,R.createContext)(null);function Mi({children:e}){let[t,n]=(0,R.useState)(!1);return(0,R.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,z.jsxs)(ji,{value:{open:t,setOpen:n},children:[e,(0,z.jsx)(Ai,{})]})}var Ni=()=>{let e=(0,R.useContext)(ji);if(!e)throw Error(`useSearch has to be used within SearchProvider`);return e};export{Rr as A,er as B,Hr as C,Qr as D,Yr as E,Ar as F,Wn as G,Jn as H,Y as I,un as K,hr as L,Br as M,Z as N,ei as O,jr as P,ir as R,Ur as S,Zr as T,qn as U,Zn as V,Gn as W,zr as _,Ei as a,Kr as b,wi as c,xi as d,bi as f,ni as g,ti as h,Di as i,Vr as j,$r as k,Si as l,_i as m,Ni as n,Ci as o,vi as p,Oi as r,Ti as s,Mi as t,yi as u,Gr as v,Jr as w,qr as x,Wr as y,nr as z}; \ No newline at end of file diff --git a/src/www/assets/select-DcStuzoT.js b/src/www/assets/select-DcStuzoT.js new file mode 100644 index 0000000..ef9592a --- /dev/null +++ b/src/www/assets/select-DcStuzoT.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./link-CA4H4hTz.js";import{r as i,t as a}from"./dist-15n4mVGL.js";import{K as o}from"./search-provider-Cx1K1ilz.js";import{c as s,d as c,i as l,t as u}from"./button-DJA4fnJ8.js";import{c as d}from"./wallet--XSRr4dT.js";import{i as f,n as p,o as m,r as h}from"./dist-DG5UMlBd.js";import{i as g}from"./dist-D21KDGR3.js";import{i as _,r as v,t as y}from"./dist-BEDXr2LC.js";import{a as b,i as x,n as S,o as C,r as w,s as T,t as E}from"./dist-BKfJQFVD.js";import{_ as D,a as O,g as k,h as A,l as j,m as ee,r as M,t as N}from"./dropdown-menu-CUea1X0A.js";import{t as P}from"./dist-CGm-FpWw.js";import{t as F}from"./createLucideIcon-D28ivbfF.js";import{t as te}from"./check-gDgbfVXu.js";import{t as I}from"./chevron-down-CdmvZsfI.js";import{n as L,t as R}from"./theme-switch-BjXQNOij.js";import{n as z,r as B,t as ne}from"./header-DbmR8lIc.js";var V=t(n(),1),re=t(i(),1),H=e(),ie=[` `,`Enter`,`ArrowUp`,`ArrowDown`],ae=[` `,`Enter`],U=`Select`,[W,G,oe]=g(U),[K,se]=m(U,[oe,b]),q=b(),[ce,J]=K(U),[le,ue]=K(U),de=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:f,required:m,form:h}=e,g=q(t),[y,b]=V.useState(null),[S,C]=V.useState(null),[w,T]=V.useState(!1),E=v(l),[D,O]=p({prop:r,defaultProp:i??!1,onChange:a,caller:U}),[k,A]=p({prop:o,defaultProp:s,onChange:c,caller:U}),j=V.useRef(null),ee=y?h||!!y.closest(`form`):!0,[M,N]=V.useState(new Set),P=Array.from(M).map(e=>e.props.value).join(`;`);return(0,H.jsx)(x,{...g,children:(0,H.jsxs)(ce,{required:m,scope:t,trigger:y,onTriggerChange:b,valueNode:S,onValueNodeChange:C,valueNodeHasChildren:w,onValueNodeHasChildrenChange:T,contentId:_(),value:k,onValueChange:A,open:D,onOpenChange:O,dir:E,triggerPointerDownPosRef:j,disabled:f,children:[(0,H.jsx)(W.Provider,{scope:t,children:(0,H.jsx)(le,{scope:e.__scopeSelect,onNativeOptionAdd:V.useCallback(e=>{N(t=>new Set(t).add(e))},[]),onNativeOptionRemove:V.useCallback(e=>{N(t=>{let n=new Set(t);return n.delete(e),n})},[]),children:n})}),ee?(0,H.jsxs)(tt,{"aria-hidden":!0,required:m,tabIndex:-1,name:u,autoComplete:d,value:k,onChange:e=>A(e.target.value),disabled:f,form:h,children:[k===void 0?(0,H.jsx)(`option`,{value:``}):null,Array.from(M)]},P):null]})})};de.displayName=U;var fe=`SelectTrigger`,pe=V.forwardRef((e,t)=>{let{__scopeSelect:n,disabled:r=!1,...i}=e,o=q(n),s=J(fe,n),l=s.disabled||r,u=c(t,s.onTriggerChange),d=G(n),p=V.useRef(`touch`),[m,h,g]=rt(e=>{let t=d().filter(e=>!e.disabled),n=it(t,e,t.find(e=>e.value===s.value));n!==void 0&&s.onValueChange(n.value)}),_=e=>{l||(s.onOpenChange(!0),g()),e&&(s.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})};return(0,H.jsx)(E,{asChild:!0,...o,children:(0,H.jsx)(a.button,{type:`button`,role:`combobox`,"aria-controls":s.contentId,"aria-expanded":s.open,"aria-required":s.required,"aria-autocomplete":`none`,dir:s.dir,"data-state":s.open?`open`:`closed`,disabled:l,"data-disabled":l?``:void 0,"data-placeholder":nt(s.value)?``:void 0,...i,ref:u,onClick:f(i.onClick,e=>{e.currentTarget.focus(),p.current!==`mouse`&&_(e)}),onPointerDown:f(i.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:f(i.onKeyDown,e=>{let t=m.current!==``;!(e.ctrlKey||e.altKey||e.metaKey)&&e.key.length===1&&h(e.key),!(t&&e.key===` `)&&ie.includes(e.key)&&(_(),e.preventDefault())})})})});pe.displayName=fe;var me=`SelectValue`,he=V.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,children:o,placeholder:s=``,...l}=e,u=J(me,n),{onValueNodeHasChildrenChange:d}=u,f=o!==void 0,p=c(t,u.onValueNodeChange);return h(()=>{d(f)},[d,f]),(0,H.jsx)(a.span,{...l,ref:p,style:{pointerEvents:`none`},children:nt(u.value)?(0,H.jsx)(H.Fragment,{children:s}):o})});he.displayName=me;var ge=`SelectIcon`,_e=V.forwardRef((e,t)=>{let{__scopeSelect:n,children:r,...i}=e;return(0,H.jsx)(a.span,{"aria-hidden":!0,...i,ref:t,children:r||`▼`})});_e.displayName=ge;var ve=`SelectPortal`,ye=e=>(0,H.jsx)(C,{asChild:!0,...e});ye.displayName=ve;var Y=`SelectContent`,be=V.forwardRef((e,t)=>{let n=J(Y,e.__scopeSelect),[r,i]=V.useState();if(h(()=>{i(new DocumentFragment)},[]),!n.open){let t=r;return t?re.createPortal((0,H.jsx)(xe,{scope:e.__scopeSelect,children:(0,H.jsx)(W.Slot,{scope:e.__scopeSelect,children:(0,H.jsx)(`div`,{children:e.children})})}),t):null}return(0,H.jsx)(we,{...e,ref:t})});be.displayName=Y;var X=10,[xe,Z]=K(Y),Se=`SelectContentImpl`,Ce=s(`SelectContent.RemoveScroll`),we=V.forwardRef((e,t)=>{let{__scopeSelect:n,position:r=`item-aligned`,onCloseAutoFocus:i,onEscapeKeyDown:a,onPointerDownOutside:o,side:s,sideOffset:l,align:u,alignOffset:d,arrowPadding:p,collisionBoundary:m,collisionPadding:h,sticky:g,hideWhenDetached:_,avoidCollisions:v,...y}=e,b=J(Y,n),[x,S]=V.useState(null),[C,w]=V.useState(null),E=c(t,e=>S(e)),[O,j]=V.useState(null),[M,N]=V.useState(null),P=G(n),[F,te]=V.useState(!1),I=V.useRef(!1);V.useEffect(()=>{if(x)return ee(x)},[x]),k();let L=V.useCallback(e=>{let[t,...n]=P().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&&C&&(C.scrollTop=0),n===r&&C&&(C.scrollTop=C.scrollHeight),n?.focus(),document.activeElement!==i))return},[P,C]),R=V.useCallback(()=>L([O,x]),[L,O,x]);V.useEffect(()=>{F&&R()},[F,R]);let{onOpenChange:z,triggerPointerDownPosRef:B}=b;V.useEffect(()=>{if(x){let e={x:0,y:0},t=t=>{e={x:Math.abs(Math.round(t.pageX)-(B.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(B.current?.y??0))}},n=n=>{e.x<=10&&e.y<=10?n.preventDefault():x.contains(n.target)||z(!1),document.removeEventListener(`pointermove`,t),B.current=null};return B.current!==null&&(document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n,{capture:!0,once:!0})),()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n,{capture:!0})}}},[x,z,B]),V.useEffect(()=>{let e=()=>z(!1);return window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e)}},[z]);let[ne,re]=rt(e=>{let t=P().filter(e=>!e.disabled),n=it(t,e,t.find(e=>e.ref.current===document.activeElement));n&&setTimeout(()=>n.ref.current.focus())}),ie=V.useCallback((e,t,n)=>{let r=!I.current&&!n;(b.value!==void 0&&b.value===t||r)&&(j(e),r&&(I.current=!0))},[b.value]),ae=V.useCallback(()=>x?.focus(),[x]),U=V.useCallback((e,t,n)=>{let r=!I.current&&!n;(b.value!==void 0&&b.value===t||r)&&N(e)},[b.value]),W=r===`popper`?Oe:Ee,oe=W===Oe?{side:s,sideOffset:l,align:u,alignOffset:d,arrowPadding:p,collisionBoundary:m,collisionPadding:h,sticky:g,hideWhenDetached:_,avoidCollisions:v}:{};return(0,H.jsx)(xe,{scope:n,content:x,viewport:C,onViewportChange:w,itemRefCallback:ie,selectedItem:O,onItemLeave:ae,itemTextRefCallback:U,focusSelectedItem:R,selectedItemText:M,position:r,isPositioned:F,searchRef:ne,children:(0,H.jsx)(A,{as:Ce,allowPinchZoom:!0,children:(0,H.jsx)(D,{asChild:!0,trapped:b.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:f(i,e=>{b.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,H.jsx)(T,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>b.onOpenChange(!1),children:(0,H.jsx)(W,{role:`listbox`,id:b.contentId,"data-state":b.open?`open`:`closed`,dir:b.dir,onContextMenu:e=>e.preventDefault(),...y,...oe,onPlaced:()=>te(!0),ref:E,style:{display:`flex`,flexDirection:`column`,outline:`none`,...y.style},onKeyDown:f(y.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if(e.key===`Tab`&&e.preventDefault(),!t&&e.key.length===1&&re(e.key),[`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key)){let t=P().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(()=>L(t)),e.preventDefault()}})})})})})})});we.displayName=Se;var Te=`SelectItemAlignedPosition`,Ee=V.forwardRef((e,t)=>{let{__scopeSelect:n,onPlaced:r,...i}=e,s=J(Y,n),l=Z(Y,n),[u,d]=V.useState(null),[f,p]=V.useState(null),m=c(t,e=>p(e)),g=G(n),_=V.useRef(!1),v=V.useRef(!0),{viewport:y,selectedItem:b,selectedItemText:x,focusSelectedItem:S}=l,C=V.useCallback(()=>{if(s.trigger&&s.valueNode&&u&&f&&y&&b&&x){let e=s.trigger.getBoundingClientRect(),t=f.getBoundingClientRect(),n=s.valueNode.getBoundingClientRect(),i=x.getBoundingClientRect();if(s.dir!==`rtl`){let r=i.left-t.left,a=n.left-r,s=e.left-a,c=e.width+s,l=Math.max(c,t.width),d=window.innerWidth-X,f=o(a,[X,Math.max(X,d-l)]);u.style.minWidth=c+`px`,u.style.left=f+`px`}else{let r=t.right-i.right,a=window.innerWidth-n.right-r,s=window.innerWidth-e.right-a,c=e.width+s,l=Math.max(c,t.width),d=window.innerWidth-X,f=o(a,[X,Math.max(X,d-l)]);u.style.minWidth=c+`px`,u.style.right=f+`px`}let a=g(),c=window.innerHeight-X*2,l=y.scrollHeight,d=window.getComputedStyle(f),p=parseInt(d.borderTopWidth,10),m=parseInt(d.paddingTop,10),h=parseInt(d.borderBottomWidth,10),v=parseInt(d.paddingBottom,10),S=p+m+l+v+h,C=Math.min(b.offsetHeight*5,S),w=window.getComputedStyle(y),T=parseInt(w.paddingTop,10),E=parseInt(w.paddingBottom,10),D=e.top+e.height/2-X,O=c-D,k=b.offsetHeight/2,A=b.offsetTop+k,j=p+m+A,ee=S-j;if(j<=D){let e=a.length>0&&b===a[a.length-1].ref.current;u.style.bottom=`0px`;let t=f.clientHeight-y.offsetTop-y.offsetHeight,n=j+Math.max(O,k+(e?E:0)+t+h);u.style.height=n+`px`}else{let e=a.length>0&&b===a[0].ref.current;u.style.top=`0px`;let t=Math.max(D,p+y.offsetTop+(e?T:0)+k)+ee;u.style.height=t+`px`,y.scrollTop=j-D+y.offsetTop}u.style.margin=`${X}px 0`,u.style.minHeight=C+`px`,u.style.maxHeight=c+`px`,r?.(),requestAnimationFrame(()=>_.current=!0)}},[g,s.trigger,s.valueNode,u,f,y,b,x,s.dir,r]);h(()=>C(),[C]);let[w,T]=V.useState();return h(()=>{f&&T(window.getComputedStyle(f).zIndex)},[f]),(0,H.jsx)(ke,{scope:n,contentWrapper:u,shouldExpandOnScrollRef:_,onScrollButtonChange:V.useCallback(e=>{e&&v.current===!0&&(C(),S?.(),v.current=!1)},[C,S]),children:(0,H.jsx)(`div`,{ref:d,style:{display:`flex`,flexDirection:`column`,position:`fixed`,zIndex:w},children:(0,H.jsx)(a.div,{...i,ref:m,style:{boxSizing:`border-box`,maxHeight:`100%`,...i.style}})})})});Ee.displayName=Te;var De=`SelectPopperPosition`,Oe=V.forwardRef((e,t)=>{let{__scopeSelect:n,align:r=`start`,collisionPadding:i=X,...a}=e,o=q(n);return(0,H.jsx)(w,{...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)`}})});Oe.displayName=De;var[ke,Ae]=K(Y,{}),je=`SelectViewport`,Me=V.forwardRef((e,t)=>{let{__scopeSelect:n,nonce:r,...i}=e,o=Z(je,n),s=Ae(je,n),l=c(t,o.onViewportChange),u=V.useRef(0);return(0,H.jsxs)(H.Fragment,{children:[(0,H.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,H.jsx)(W.Slot,{scope:n,children:(0,H.jsx)(a.div,{"data-radix-select-viewport":``,role:`presentation`,...i,ref:l,style:{position:`relative`,flex:1,overflow:`hidden auto`,...i.style},onScroll:f(i.onScroll,e=>{let t=e.currentTarget,{contentWrapper:n,shouldExpandOnScrollRef:r}=s;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})})})]})});Me.displayName=je;var Ne=`SelectGroup`,[Pe,Fe]=K(Ne),Ie=V.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=_();return(0,H.jsx)(Pe,{scope:n,id:i,children:(0,H.jsx)(a.div,{role:`group`,"aria-labelledby":i,...r,ref:t})})});Ie.displayName=Ne;var Le=`SelectLabel`,Re=V.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=Fe(Le,n);return(0,H.jsx)(a.div,{id:i.id,...r,ref:t})});Re.displayName=Le;var Q=`SelectItem`,[ze,Be]=K(Q),Ve=V.forwardRef((e,t)=>{let{__scopeSelect:n,value:r,disabled:i=!1,textValue:o,...s}=e,l=J(Q,n),u=Z(Q,n),d=l.value===r,[p,m]=V.useState(o??``),[h,g]=V.useState(!1),v=c(t,e=>u.itemRefCallback?.(e,r,i)),y=_(),b=V.useRef(`touch`),x=()=>{i||(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,H.jsx)(ze,{scope:n,value:r,disabled:i,textId:y,isSelected:d,onItemTextChange:V.useCallback(e=>{m(t=>t||(e?.textContent??``).trim())},[]),children:(0,H.jsx)(W.ItemSlot,{scope:n,value:r,disabled:i,textValue:p,children:(0,H.jsx)(a.div,{role:`option`,"aria-labelledby":y,"data-highlighted":h?``:void 0,"aria-selected":d&&h,"data-state":d?`checked`:`unchecked`,"aria-disabled":i||void 0,"data-disabled":i?``:void 0,tabIndex:i?void 0:-1,...s,ref:v,onFocus:f(s.onFocus,()=>g(!0)),onBlur:f(s.onBlur,()=>g(!1)),onClick:f(s.onClick,()=>{b.current!==`mouse`&&x()}),onPointerUp:f(s.onPointerUp,()=>{b.current===`mouse`&&x()}),onPointerDown:f(s.onPointerDown,e=>{b.current=e.pointerType}),onPointerMove:f(s.onPointerMove,e=>{b.current=e.pointerType,i?u.onItemLeave?.():b.current===`mouse`&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:f(s.onPointerLeave,e=>{e.currentTarget===document.activeElement&&u.onItemLeave?.()}),onKeyDown:f(s.onKeyDown,e=>{u.searchRef?.current!==``&&e.key===` `||(ae.includes(e.key)&&x(),e.key===` `&&e.preventDefault())})})})})});Ve.displayName=Q;var $=`SelectItemText`,He=V.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,...o}=e,s=J($,n),l=Z($,n),u=Be($,n),d=ue($,n),[f,p]=V.useState(null),m=c(t,e=>p(e),u.onItemTextChange,e=>l.itemTextRefCallback?.(e,u.value,u.disabled)),g=f?.textContent,_=V.useMemo(()=>(0,H.jsx)(`option`,{value:u.value,disabled:u.disabled,children:g},u.value),[u.disabled,u.value,g]),{onNativeOptionAdd:v,onNativeOptionRemove:y}=d;return h(()=>(v(_),()=>y(_)),[v,y,_]),(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(a.span,{id:u.textId,...o,ref:m}),u.isSelected&&s.valueNode&&!s.valueNodeHasChildren?re.createPortal(o.children,s.valueNode):null]})});He.displayName=$;var Ue=`SelectItemIndicator`,We=V.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return Be(Ue,n).isSelected?(0,H.jsx)(a.span,{"aria-hidden":!0,...r,ref:t}):null});We.displayName=Ue;var Ge=`SelectScrollUpButton`,Ke=V.forwardRef((e,t)=>{let n=Z(Ge,e.__scopeSelect),r=Ae(Ge,e.__scopeSelect),[i,a]=V.useState(!1),o=c(t,r.onScrollButtonChange);return h(()=>{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,H.jsx)(Ye,{...e,ref:o,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop-=t.offsetHeight)}}):null});Ke.displayName=Ge;var qe=`SelectScrollDownButton`,Je=V.forwardRef((e,t)=>{let n=Z(qe,e.__scopeSelect),r=Ae(qe,e.__scopeSelect),[i,a]=V.useState(!1),o=c(t,r.onScrollButtonChange);return h(()=>{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,H.jsx)(Ye,{...e,ref:o,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop+=t.offsetHeight)}}):null});Je.displayName=qe;var Ye=V.forwardRef((e,t)=>{let{__scopeSelect:n,onAutoScroll:r,...i}=e,o=Z(`SelectScrollButton`,n),s=V.useRef(null),c=G(n),l=V.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null)},[]);return V.useEffect(()=>()=>l(),[l]),h(()=>{c().find(e=>e.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:`nearest`})},[c]),(0,H.jsx)(a.div,{"aria-hidden":!0,...i,ref:t,style:{flexShrink:0,...i.style},onPointerDown:f(i.onPointerDown,()=>{s.current===null&&(s.current=window.setInterval(r,50))}),onPointerMove:f(i.onPointerMove,()=>{o.onItemLeave?.(),s.current===null&&(s.current=window.setInterval(r,50))}),onPointerLeave:f(i.onPointerLeave,()=>{l()})})}),Xe=`SelectSeparator`,Ze=V.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return(0,H.jsx)(a.div,{"aria-hidden":!0,...r,ref:t})});Ze.displayName=Xe;var Qe=`SelectArrow`,$e=V.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=q(n),a=J(Qe,n),o=Z(Qe,n);return a.open&&o.position===`popper`?(0,H.jsx)(S,{...i,...r,ref:t}):null});$e.displayName=Qe;var et=`SelectBubbleInput`,tt=V.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{let i=V.useRef(null),o=c(r,i),s=P(t);return V.useEffect(()=>{let e=i.current;if(!e)return;let n=window.HTMLSelectElement.prototype,r=Object.getOwnPropertyDescriptor(n,`value`).set;if(s!==t&&r){let n=new Event(`change`,{bubbles:!0});r.call(e,t),e.dispatchEvent(n)}},[s,t]),(0,H.jsx)(a.select,{...n,style:{...d,...n.style},ref:o,defaultValue:t})});tt.displayName=et;function nt(e){return e===``||e===void 0}function rt(e){let t=y(e),n=V.useRef(``),r=V.useRef(0),i=V.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=V.useCallback(()=>{n.current=``,window.clearTimeout(r.current)},[]);return V.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,a]}function it(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=at(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 at(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var ot=de,st=pe,ct=he,lt=_e,ut=ye,dt=be,ft=Me,pt=Ve,mt=He,ht=We,gt=Ke,_t=Je,vt=F(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),yt=F(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]);function bt({className:e,links:t,...n}){return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`div`,{className:`lg:hidden`,children:(0,H.jsxs)(N,{modal:!1,children:[(0,H.jsx)(j,{asChild:!0,children:(0,H.jsx)(u,{className:`md:size-7`,size:`icon`,variant:`outline`,children:(0,H.jsx)(yt,{})})}),(0,H.jsx)(M,{align:`start`,side:`bottom`,children:t.map(({title:e,href:t,isActive:n,disabled:i})=>(0,H.jsx)(O,{asChild:!0,children:(0,H.jsx)(r,{className:n?``:`text-muted-foreground`,disabled:i,to:t,children:e})},`${e}-${t}`))})]})}),(0,H.jsx)(`nav`,{className:l(`hidden items-center space-x-4 lg:flex lg:space-x-4 xl:space-x-6`,e),...n,children:t.map(({title:e,href:t,isActive:n,disabled:i})=>(0,H.jsx)(r,{className:`font-medium text-sm transition-colors hover:text-primary ${n?``:`text-muted-foreground`}`,disabled:i,to:t,children:e},`${e}-${t}`))})]})}function xt({fixed:e,topNav:t}){return(0,H.jsxs)(ne,{fixed:e,children:[t?(0,H.jsx)(bt,{links:t}):(0,H.jsx)(z,{}),(0,H.jsxs)(`div`,{className:`ms-auto flex items-center space-x-4`,children:[t&&(0,H.jsx)(z,{}),(0,H.jsx)(L,{}),(0,H.jsx)(R,{}),(0,H.jsx)(B,{})]})]})}function St({fixed:e,className:t,fluid:n,...r}){return(0,H.jsx)(`main`,{className:l(`px-4 py-6`,e&&`flex grow flex-col overflow-hidden`,!n&&`@7xl/content:mx-auto @7xl/content:w-full @7xl/content:max-w-7xl`,t),"data-layout":e?`fixed`:`auto`,...r})}function Ct({...e}){return(0,H.jsx)(ot,{"data-slot":`select`,...e})}function wt({...e}){return(0,H.jsx)(ct,{"data-slot":`select-value`,...e})}function Tt({className:e,size:t=`default`,children:n,...r}){return(0,H.jsxs)(st,{className:l(`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,H.jsx)(lt,{asChild:!0,children:(0,H.jsx)(I,{className:`size-4 opacity-50`})})]})}function Et({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,H.jsx)(ut,{children:(0,H.jsxs)(dt,{align:r,className:l(`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,H.jsx)(Ot,{}),(0,H.jsx)(ft,{className:l(`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,H.jsx)(kt,{})]})})}function Dt({className:e,children:t,...n}){return(0,H.jsxs)(pt,{className:l(`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,H.jsx)(`span`,{className:`absolute right-2 flex size-3.5 items-center justify-center`,"data-slot":`select-item-indicator`,children:(0,H.jsx)(ht,{children:(0,H.jsx)(te,{className:`size-4`})})}),(0,H.jsx)(mt,{children:t})]})}function Ot({className:e,...t}){return(0,H.jsx)(gt,{className:l(`flex cursor-default items-center justify-center py-1`,e),"data-slot":`select-scroll-up-button`,...t,children:(0,H.jsx)(vt,{className:`size-4`})})}function kt({className:e,...t}){return(0,H.jsx)(_t,{className:l(`flex cursor-default items-center justify-center py-1`,e),"data-slot":`select-scroll-down-button`,...t,children:(0,H.jsx)(I,{className:`size-4`})})}export{wt as a,Tt as i,Et as n,St as o,Dt as r,xt as s,Ct as t}; \ No newline at end of file diff --git a/src/www/assets/separator-CRLYw2cW.js b/src/www/assets/separator-CRLYw2cW.js new file mode 100644 index 0000000..430f3af --- /dev/null +++ b/src/www/assets/separator-CRLYw2cW.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./dist-15n4mVGL.js";import{i}from"./button-DJA4fnJ8.js";var a=t(n(),1),o=e(),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-6L98-bwl.js b/src/www/assets/settings-6L98-bwl.js new file mode 100644 index 0000000..c81347d --- /dev/null +++ b/src/www/assets/settings-6L98-bwl.js @@ -0,0 +1 @@ +import{At as e,Ct as t,Dt as n,Et as r,Lc as i,Mt as a,Nt as o,Ot as s,St as c,Tt as l,bt as u,jt as d,kt as f,nu as p,ou as m,ru as h,wt as g,xt as _,yt as v}from"./messages-BovT1T-w.js";import{t as y}from"./button-DJA4fnJ8.js";import{n as b}from"./dist-DvAgZMq72.js";import{c as x,o as S,s as C}from"./zod-Cymc5bS-.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-DdHiBYMe.js";import{t as M}from"./input-DiRPHDd8.js";import{t as N}from"./page-header-BBJ9dE3-.js";import{t as P}from"./textarea-D_TrrVtD.js";import{a as F,i as I,n as L,r as R,t as z}from"./lib-CTYwzR3w.js";var B=m(h(),1),V=p(),H=C({checkoutName:x().min(1,a()),logoUrl:x().url(d()).or(S(``)),siteTitle:x().min(1,e()),successCopy:x().min(1,f()),supportUrl:x().url(s()).or(S(``))});function U(){let e=I(`brand`),i=F(),a=D({resolver:T(H),defaultValues:{checkoutName:``,logoUrl:``,siteTitle:``,successCopy:``,supportUrl:``}});(0,B.useEffect)(()=>{let t=e.data?.data;t&&a.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,a]);let o=R();async function s(){for(let e of[`brand.checkout_name`,`brand.logo_url`,`brand.site_title`,`brand.success_copy`,`brand.support_url`])await o.mutateAsync({params:{path:{key:e}}});b.success(n()),await e.refetch()}async function d(t){await L(i.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}],r()),await e.refetch()}return(0,V.jsx)(j,{...a,children:(0,V.jsxs)(`form`,{className:`space-y-6`,onSubmit:a.handleSubmit(d),children:[(0,V.jsx)(E,{control:a.control,name:`checkoutName`,render:({field:e})=>(0,V.jsxs)(w,{children:[(0,V.jsx)(k,{children:l()}),(0,V.jsx)(O,{children:(0,V.jsx)(M,{...e})}),(0,V.jsx)(A,{})]})}),(0,V.jsx)(E,{control:a.control,name:`logoUrl`,render:({field:e})=>(0,V.jsxs)(w,{children:[(0,V.jsx)(k,{children:g()}),(0,V.jsx)(O,{children:(0,V.jsx)(M,{...e})}),(0,V.jsx)(A,{})]})}),(0,V.jsx)(E,{control:a.control,name:`siteTitle`,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:a.control,name:`successCopy`,render:({field:e})=>(0,V.jsxs)(w,{children:[(0,V.jsx)(k,{children:c()}),(0,V.jsx)(O,{children:(0,V.jsx)(P,{...e})}),(0,V.jsx)(A,{})]})}),(0,V.jsx)(E,{control:a.control,name:`supportUrl`,render:({field:e})=>(0,V.jsxs)(w,{children:[(0,V.jsx)(k,{children:_()}),(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:i.isPending||e.isLoading,type:`submit`,children:u()}),(0,V.jsx)(y,{disabled:o.isPending,onClick:s,type:`button`,variant:`outline`,children:v()})]})]})})}function W(){return(0,V.jsx)(N,{description:o(),title:i(),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/show-submitted-data-l0RlCwTX.js b/src/www/assets/show-submitted-data-l0RlCwTX.js new file mode 100644 index 0000000..2b0c8ed --- /dev/null +++ b/src/www/assets/show-submitted-data-l0RlCwTX.js @@ -0,0 +1 @@ +import{nu as e}from"./messages-BovT1T-w.js";import{n as t}from"./dist-DvAgZMq72.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-DgezD6QJ.js b/src/www/assets/sidebar-nav-DgezD6QJ.js new file mode 100644 index 0000000..6f29092 --- /dev/null +++ b/src/www/assets/sidebar-nav-DgezD6QJ.js @@ -0,0 +1 @@ +import{nu as e,p as t}from"./messages-BovT1T-w.js";import{t as n}from"./link-CA4H4hTz.js";import{t as r}from"./useNavigate-Dg8CkCoa.js";import{t as i}from"./useRouterState-DV1cSG1v.js";import{r as a}from"./search-provider-Cx1K1ilz.js";import{i as o,n as s}from"./button-DJA4fnJ8.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-DcStuzoT.js";var p=e();function m({className:e,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:t()})}),(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`,e),...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-DGULZo5h.js b/src/www/assets/sign-in-DGULZo5h.js new file mode 100644 index 0000000..62109d3 --- /dev/null +++ b/src/www/assets/sign-in-DGULZo5h.js @@ -0,0 +1 @@ +import{$s as e,Qs as t,Zs as n,ac as r,ec as i,ic as a,nc as o,nu as s,ou as c,rc as l,ru as u,tc as d}from"./messages-BovT1T-w.js";import{a as f,r as p}from"./auth-store-BpIS8RMn.js";import{t as m}from"./useSearch-B5ZWp8fU.js";import{t as h}from"./useNavigate-Dg8CkCoa.js";import{i as g,t as _}from"./button-DJA4fnJ8.js";import{t as v}from"./createLucideIcon-D28ivbfF.js";import{t as y}from"./loader-circle-fg8-aSyl.js";import{n as b}from"./dist-DvAgZMq72.js";import{c as x,s as S}from"./zod-Cymc5bS-.js";import{n as C}from"./auth-animation-context-zwGs7ZAM.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-DdHiBYMe.js";import{t as M}from"./input-DiRPHDd8.js";import{t as N}from"./password-input-B463LDkD.js";var P=v(`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`}]]),F=c(u(),1),I=s(),L=S({username:x().min(1,e()),password:x().min(1,t())});function R({className:e,redirectTo:t,...r}){let a=h(),{setIsTyping:s,setPasswordLength:c,setShowPassword:l}=C(),u=f.useMutation(`post`,`/admin/api/v1/auth/login`),m=D({resolver:T(L),defaultValues:{username:``,password:``}});(0,F.useEffect)(()=>()=>{s(!1),c(0),l(!1)},[s,c,l]);async function v(e){let n=await u.mutateAsync({body:{username:e.username,password:e.password}});n?.data?.token&&(p(n.data.token),b.success(`欢迎回来,${n.data.username??e.username}!`),a({to:t||`/dashboard`,replace:!0}))}function x(e){c(e.length)}return(0,I.jsx)(j,{...m,children:(0,I.jsxs)(`form`,{className:g(`grid gap-3`,e),onSubmit:m.handleSubmit(v),...r,children:[(0,I.jsx)(E,{control:m.control,name:`username`,render:({field:e})=>(0,I.jsxs)(w,{children:[(0,I.jsx)(k,{children:o()}),(0,I.jsx)(O,{children:(0,I.jsx)(M,{placeholder:d(),...e,onBlur:()=>{s(!1),e.onBlur()},onFocus:()=>s(!0)})}),(0,I.jsx)(A,{})]})}),(0,I.jsx)(E,{control:m.control,name:`password`,render:({field:e})=>(0,I.jsxs)(w,{children:[(0,I.jsx)(k,{children:i()}),(0,I.jsx)(O,{children:(0,I.jsx)(N,{placeholder:`********`,...e,onBlur:()=>{s(!1),e.onBlur()},onChange:t=>{x(t.target.value),e.onChange(t)},onFocus:()=>s(!0),onVisibilityChange:l})}),(0,I.jsx)(A,{})]})}),(0,I.jsxs)(_,{className:`mt-2`,disabled:u.isPending,children:[u.isPending?(0,I.jsx)(y,{className:`animate-spin`}):(0,I.jsx)(P,{}),n()]})]})})}function z(){let{redirect:e}=m({from:`/(auth)/sign-in`});return(0,I.jsxs)(`div`,{className:`w-full space-y-6`,children:[(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(`p`,{className:`font-medium text-primary text-sm`,children:r()}),(0,I.jsx)(`h2`,{className:`font-semibold text-3xl tracking-tight`,children:a()}),(0,I.jsx)(`p`,{className:`text-muted-foreground leading-6`,children:l()})]}),(0,I.jsx)(R,{redirectTo:e})]})}var B=z;export{B as component}; \ No newline at end of file diff --git a/src/www/assets/switch-R6BNZUH1.js b/src/www/assets/switch-R6BNZUH1.js new file mode 100644 index 0000000..27e2518 --- /dev/null +++ b/src/www/assets/switch-R6BNZUH1.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./dist-15n4mVGL.js";import{d as i,i as a}from"./button-DJA4fnJ8.js";import{i as o,n as s,o as c,t as l}from"./dist-DG5UMlBd.js";import{t as u}from"./dist-CGm-FpWw.js";var d=t(n(),1),f=e(),p=`Switch`,[m,h]=c(p),[g,_]=m(p),v=d.forwardRef((e,t)=>{let{__scopeSwitch:n,name:a,checked:c,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]=s({prop:c,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:o(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=u(n),m=l(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-HLdihqdM.js b/src/www/assets/telegram-HLdihqdM.js new file mode 100644 index 0000000..827f6e4 --- /dev/null +++ b/src/www/assets/telegram-HLdihqdM.js @@ -0,0 +1 @@ +import{Ic as e,_t as t,dt as n,ft as r,gt as i,ht as a,mt as o,nu as s,ou as c,pt as l,ru as u,ut as d,vt as f}from"./messages-BovT1T-w.js";import{t as p}from"./button-DJA4fnJ8.js";import{t as m}from"./switch-R6BNZUH1.js";import{a as h,c as g,s as _}from"./zod-Cymc5bS-.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-DdHiBYMe.js";import{t as E}from"./input-DiRPHDd8.js";import{t as D}from"./page-header-BBJ9dE3-.js";import{a as O,i as k,n as A,t as j}from"./lib-CTYwzR3w.js";var M=c(u(),1),N=s(),P=_({botToken:g().min(1,t()),chatId:g().min(1,i()),paymentNoticeEnabled:h(),abnormalNoticeEnabled:h()});function F(){let e=k(`system`),t=O(),i=x({resolver:y(P),defaultValues:{botToken:``,chatId:``,paymentNoticeEnabled:!1,abnormalNoticeEnabled:!1}});(0,M.useEffect)(()=>{let t=e.data?.data;t&&i.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,i]);async function s(n){await A(t.mutateAsync,[{group:`system`,key:`system.telegram_bot_token`,type:`string`,value:n.botToken},{group:`system`,key:`system.telegram_chat_id`,type:`string`,value:n.chatId},{group:`system`,key:`system.telegram_payment_notice_enabled`,type:`bool`,value:String(n.paymentNoticeEnabled)},{group:`system`,key:`system.telegram_abnormal_notice_enabled`,type:`bool`,value:String(n.abnormalNoticeEnabled)}],a()),await e.refetch()}return(0,N.jsx)(T,{...i,children:(0,N.jsxs)(`form`,{className:`space-y-6`,onSubmit:i.handleSubmit(s),children:[(0,N.jsx)(b,{control:i.control,name:`botToken`,render:({field:e})=>(0,N.jsxs)(v,{children:[(0,N.jsx)(C,{children:o()}),(0,N.jsx)(S,{children:(0,N.jsx)(E,{...e})}),(0,N.jsx)(w,{})]})}),(0,N.jsx)(b,{control:i.control,name:`chatId`,render:({field:e})=>(0,N.jsxs)(v,{children:[(0,N.jsx)(C,{children:l()}),(0,N.jsx)(S,{children:(0,N.jsx)(E,{...e})}),(0,N.jsx)(w,{})]})}),(0,N.jsx)(b,{control:i.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:r()}),(0,N.jsx)(S,{children:(0,N.jsx)(m,{checked:e.value,onCheckedChange:e.onChange})})]})}),(0,N.jsx)(b,{control:i.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:t.isPending||e.isLoading,type:`submit`,children:d()})]})})}function I(){return(0,N.jsx)(D,{description:f(),title:e(),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-67IWjQye.js b/src/www/assets/telescope-67IWjQye.js new file mode 100644 index 0000000..5c6c9e7 --- /dev/null +++ b/src/www/assets/telescope-67IWjQye.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-D_TrrVtD.js b/src/www/assets/textarea-D_TrrVtD.js new file mode 100644 index 0000000..4ec8f84 --- /dev/null +++ b/src/www/assets/textarea-D_TrrVtD.js @@ -0,0 +1 @@ +import{nu as e}from"./messages-BovT1T-w.js";import{i as t}from"./button-DJA4fnJ8.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-CRKya7Cx.js b/src/www/assets/theme-provider-CRKya7Cx.js new file mode 100644 index 0000000..762855e --- /dev/null +++ b/src/www/assets/theme-provider-CRKya7Cx.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{n as r,r as i,t as a}from"./cookies-BNZcTwGc.js";var o=t(n(),1),s=e(),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-BjXQNOij.js b/src/www/assets/theme-switch-BjXQNOij.js new file mode 100644 index 0000000..ced60a4 --- /dev/null +++ b/src/www/assets/theme-switch-BjXQNOij.js @@ -0,0 +1 @@ +import{$l as e,Gl as t,Kl as n,Ul as r,Vl as i,Wl as a,eu as o,nu as s,ou as c,ru as l,tu as u}from"./messages-BovT1T-w.js";import{t as d}from"./useNavigate-Dg8CkCoa.js";import{i as f,t as p}from"./button-DJA4fnJ8.js";import{a as m,d as h,f as g,l as _,r as v,t as y}from"./dropdown-menu-CUea1X0A.js";import{n as b}from"./theme-provider-CRKya7Cx.js";import{t as x}from"./createLucideIcon-D28ivbfF.js";import{t as S}from"./check-gDgbfVXu.js";var C=x(`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=s(),T={"en-US":`English`,"zh-CN":`中文`};function E(){let t=d(),n=e(),r=e=>{e!==n&&(u(e,{reload:!1}),t({to:`.`,replace:!0,reloadDocument:!0}))};return(0,w.jsxs)(y,{modal:!1,children:[(0,w.jsx)(_,{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:i()})]})}),(0,w.jsx)(v,{align:`end`,children:o.map(e=>(0,w.jsxs)(m,{onClick:()=>r(e),children:[T[e]??e,(0,w.jsx)(S,{className:f(`ms-auto`,n!==e&&`hidden`),size:14})]},e))})]})}var D=c(l(),1);function O(){let{theme:e,setTheme:i}=b();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)(y,{modal:!1,children:[(0,w.jsx)(_,{asChild:!0,children:(0,w.jsxs)(p,{className:`scale-95 rounded-full`,size:`icon`,variant:`ghost`,children:[(0,w.jsx)(h,{className:`size-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0`}),(0,w.jsx)(g,{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)(v,{align:`end`,children:[(0,w.jsxs)(m,{onClick:()=>i(`light`),children:[t(),` `,(0,w.jsx)(S,{className:f(`ms-auto`,e!==`light`&&`hidden`),size:14})]}),(0,w.jsxs)(m,{onClick:()=>i(`dark`),children:[a(),(0,w.jsx)(S,{className:f(`ms-auto`,e!==`dark`&&`hidden`),size:14})]}),(0,w.jsxs)(m,{onClick:()=>i(`system`),children:[r(),(0,w.jsx)(S,{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/trash-2-Du706Ujr.js b/src/www/assets/trash-2-Du706Ujr.js new file mode 100644 index 0000000..0efbf82 --- /dev/null +++ b/src/www/assets/trash-2-Du706Ujr.js @@ -0,0 +1 @@ +import{t as e}from"./createLucideIcon-D28ivbfF.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-CxmfHb-a.js b/src/www/assets/unauthorized-error-CxmfHb-a.js new file mode 100644 index 0000000..bd0b70e --- /dev/null +++ b/src/www/assets/unauthorized-error-CxmfHb-a.js @@ -0,0 +1 @@ +import{a as e,cc as t,i as n,lc as r,nu as i,r as a}from"./messages-BovT1T-w.js";import{t as o}from"./useRouter-D03zSgJO.js";import{t as s}from"./useNavigate-Dg8CkCoa.js";import{t as c}from"./button-DJA4fnJ8.js";var l=i();function u(){let i=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:e()}),(0,l.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[n(),` `,(0,l.jsx)(`br`,{}),a()]}),(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:()=>i({to:`/dashboard`}),children:t()})]})]})})}export{u as t}; \ No newline at end of file diff --git a/src/www/assets/use-table-url-state-C7-IMA3_.js b/src/www/assets/use-table-url-state-C7-IMA3_.js new file mode 100644 index 0000000..df7c85a --- /dev/null +++ b/src/www/assets/use-table-url-state-C7-IMA3_.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";var n=e(t(),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-Dg8CkCoa.js b/src/www/assets/useNavigate-Dg8CkCoa.js new file mode 100644 index 0000000..068c13c --- /dev/null +++ b/src/www/assets/useNavigate-Dg8CkCoa.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";import{t as n}from"./useRouter-D03zSgJO.js";var r=e(t(),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-D03zSgJO.js b/src/www/assets/useRouter-D03zSgJO.js new file mode 100644 index 0000000..83a0fae --- /dev/null +++ b/src/www/assets/useRouter-D03zSgJO.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";var n=e(t(),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-DV1cSG1v.js b/src/www/assets/useRouterState-DV1cSG1v.js new file mode 100644 index 0000000..891e925 --- /dev/null +++ b/src/www/assets/useRouterState-DV1cSG1v.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";import{t as n}from"./useRouter-D03zSgJO.js";import{g as r,t as i}from"./useStore-1-QVtiLb.js";var a=e(t(),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-B5ZWp8fU.js b/src/www/assets/useSearch-B5ZWp8fU.js new file mode 100644 index 0000000..0649769 --- /dev/null +++ b/src/www/assets/useSearch-B5ZWp8fU.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";import{t as n}from"./useRouter-D03zSgJO.js";import{g as r,n as i,t as a}from"./useStore-1-QVtiLb.js";import{n as o,t as s}from"./matchContext-BcwcZvp2.js";var c=e(t(),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-1-QVtiLb.js b/src/www/assets/useStore-1-QVtiLb.js new file mode 100644 index 0000000..541f801 --- /dev/null +++ b/src/www/assets/useStore-1-QVtiLb.js @@ -0,0 +1 @@ +import{ou as e,ru as t}from"./messages-BovT1T-w.js";import{t as n}from"./with-selector-D_dmjfol.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--XSRr4dT.js b/src/www/assets/wallet--XSRr4dT.js new file mode 100644 index 0000000..c303e67 --- /dev/null +++ b/src/www/assets/wallet--XSRr4dT.js @@ -0,0 +1 @@ +import{nu as e,ou as t,ru as n}from"./messages-BovT1T-w.js";import{t as r}from"./dist-15n4mVGL.js";import{d as i,i as a,l as o}from"./button-DJA4fnJ8.js";import{i as s,n as c,o as l}from"./dist-DG5UMlBd.js";import{t as u}from"./dist-Cp1lAGZy.js";import{i as d,n as f}from"./dist-BEDXr2LC.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./dist-BKfJQFVD.js";import{n as b,r as x,t as S}from"./cookies-BNZcTwGc.js";import{t as C}from"./createLucideIcon-D28ivbfF.js";var w=t(n(),1),T=e(),E=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`}),D=`VisuallyHidden`,O=w.forwardRef((e,t)=>(0,T.jsx)(r.span,{...e,ref:t,style:{...E,...e.style}}));O.displayName=D;var ee=O,[k,te]=l(`Tooltip`,[p]),A=p(),j=`TooltipProvider`,ne=700,M=`tooltip.open`,[re,N]=k(j),P=e=>{let{__scopeTooltip:t,delayDuration:n=ne,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=w.useRef(!0),s=w.useRef(!1),c=w.useRef(0);return w.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,T.jsx)(re,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:w.useCallback(()=>{window.clearTimeout(c.current),o.current=!1},[]),onClose:w.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:w.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})};P.displayName=j;var F=`Tooltip`,[ie,I]=k(F),L=e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,l=N(F,e.__scopeTooltip),u=A(t),[f,p]=w.useState(null),h=d(),g=w.useRef(0),_=o??l.disableHoverableContent,v=s??l.delayDuration,y=w.useRef(!1),[b,x]=c({prop:r,defaultProp:i??!1,onChange:e=>{e?(l.onOpen(),document.dispatchEvent(new CustomEvent(M))):l.onClose(),a?.(e)},caller:F}),S=w.useMemo(()=>b?y.current?`delayed-open`:`instant-open`:`closed`,[b]),C=w.useCallback(()=>{window.clearTimeout(g.current),g.current=0,y.current=!1,x(!0)},[x]),E=w.useCallback(()=>{window.clearTimeout(g.current),g.current=0,x(!1)},[x]),D=w.useCallback(()=>{window.clearTimeout(g.current),g.current=window.setTimeout(()=>{y.current=!0,x(!0),g.current=0},v)},[v,x]);return w.useEffect(()=>()=>{g.current&&=(window.clearTimeout(g.current),0)},[]),(0,T.jsx)(m,{...u,children:(0,T.jsx)(ie,{scope:t,contentId:h,open:b,stateAttribute:S,trigger:f,onTriggerChange:p,onTriggerEnter:w.useCallback(()=>{l.isOpenDelayedRef.current?D():C()},[l.isOpenDelayedRef,D,C]),onTriggerLeave:w.useCallback(()=>{_?E():(window.clearTimeout(g.current),g.current=0)},[E,_]),onOpen:C,onClose:E,disableHoverableContent:_,children:n})})};L.displayName=F;var R=`TooltipTrigger`,z=w.forwardRef((e,t)=>{let{__scopeTooltip:n,...a}=e,o=I(R,n),c=N(R,n),l=A(n),u=i(t,w.useRef(null),o.onTriggerChange),d=w.useRef(!1),f=w.useRef(!1),p=w.useCallback(()=>d.current=!1,[]);return w.useEffect(()=>()=>document.removeEventListener(`pointerup`,p),[p]),(0,T.jsx)(y,{asChild:!0,...l,children:(0,T.jsx)(r.button,{"aria-describedby":o.open?o.contentId:void 0,"data-state":o.stateAttribute,...a,ref:u,onPointerMove:s(e.onPointerMove,e=>{e.pointerType!==`touch`&&!f.current&&!c.isPointerInTransitRef.current&&(o.onTriggerEnter(),f.current=!0)}),onPointerLeave:s(e.onPointerLeave,()=>{o.onTriggerLeave(),f.current=!1}),onPointerDown:s(e.onPointerDown,()=>{o.open&&o.onClose(),d.current=!0,document.addEventListener(`pointerup`,p,{once:!0})}),onFocus:s(e.onFocus,()=>{d.current||o.onOpen()}),onBlur:s(e.onBlur,o.onClose),onClick:s(e.onClick,o.onClose)})})});z.displayName=R;var B=`TooltipPortal`,[ae,oe]=k(B,{forceMount:void 0}),V=e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=I(B,t);return(0,T.jsx)(ae,{scope:t,forceMount:n,children:(0,T.jsx)(u,{present:n||a.open,children:(0,T.jsx)(g,{asChild:!0,container:i,children:r})})})};V.displayName=B;var H=`TooltipContent`,U=w.forwardRef((e,t)=>{let n=oe(H,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=I(H,e.__scopeTooltip);return(0,T.jsx)(u,{present:r||o.open,children:o.disableHoverableContent?(0,T.jsx)(q,{side:i,...a,ref:t}):(0,T.jsx)(W,{side:i,...a,ref:t})})}),W=w.forwardRef((e,t)=>{let n=I(H,e.__scopeTooltip),r=N(H,e.__scopeTooltip),a=w.useRef(null),o=i(t,a),[s,c]=w.useState(null),{trigger:l,onClose:u}=n,d=a.current,{onPointerInTransitChange:f}=r,p=w.useCallback(()=>{c(null),f(!1)},[f]),m=w.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=le(r,ce(r,n.getBoundingClientRect())),a=ue(t.getBoundingClientRect());c(fe([...i,...a])),f(!0)},[f]);return w.useEffect(()=>()=>p(),[p]),w.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]),w.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=!de(n,s);r?p():i&&(p(),u())};return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[l,d,s,u,p]),(0,T.jsx)(q,{...e,ref:o})}),[G,K]=k(F,{isInside:!1}),se=o(`TooltipContent`),q=w.forwardRef((e,t)=>{let{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:a,onPointerDownOutside:o,...s}=e,c=I(H,n),l=A(n),{onClose:u}=c;return w.useEffect(()=>(document.addEventListener(M,u),()=>document.removeEventListener(M,u)),[u]),w.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,T.jsx)(v,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:u,children:(0,T.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,T.jsx)(se,{children:r}),(0,T.jsx)(G,{scope:n,isInside:!0,children:(0,T.jsx)(ee,{id:c.contentId,role:`tooltip`,children:i||r})})]})})});U.displayName=H;var J=`TooltipArrow`,Y=w.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=A(n);return K(J,n).isInside?null:(0,T.jsx)(h,{...i,...r,ref:t})});Y.displayName=J;function ce(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 le(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 ue(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 de(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 fe(e){let t=e.slice();return t.sort((e,t)=>e.xt.x?1:e.yt.y)),pe(t)}function pe(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 me=P,he=L,ge=z,_e=V,ve=U,ye=Y;function be({delayDuration:e=0,...t}){return(0,T.jsx)(me,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function xe({...e}){return(0,T.jsx)(he,{"data-slot":`tooltip`,...e})}function Se({...e}){return(0,T.jsx)(ge,{"data-slot":`tooltip-trigger`,...e})}function X({className:e,sideOffset:t=0,children:n,...r}){return(0,T.jsx)(_e,{children:(0,T.jsxs)(ve,{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,T.jsx)(ye,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}var Z=`ltr`,Q=`dir`,Ce=3600*24*365,$=(0,w.createContext)(null);function we({children:e}){let[t,n]=(0,w.useState)(()=>S(Q)||Z);return(0,w.useEffect)(()=>{document.documentElement.setAttribute(`dir`,t)},[t]),(0,T.jsx)($,{value:{defaultDir:Z,dir:t,setDir:e=>{n(e),x(Q,e,Ce)},resetDir:()=>{n(Z),b(Q)}},children:(0,T.jsx)(f,{dir:t,children:e})})}function Te(){let e=(0,w.useContext)($);if(!e)throw Error(`useDirection must be used within a DirectionProvider`);return e}var Ee=C(`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{X as a,E as c,xe as i,we as n,be as o,Te as r,Se as s,Ee as t}; \ No newline at end of file diff --git a/src/www/assets/web-vitals-f_BHH8AE.js b/src/www/assets/web-vitals-f_BHH8AE.js new file mode 100644 index 0000000..7feda2b --- /dev/null +++ b/src/www/assets/web-vitals-f_BHH8AE.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-D_dmjfol.js b/src/www/assets/with-selector-D_dmjfol.js new file mode 100644 index 0000000..975c1f9 --- /dev/null +++ b/src/www/assets/with-selector-D_dmjfol.js @@ -0,0 +1 @@ +import{iu as e,ru as t}from"./messages-BovT1T-w.js";var n=e((e=>{var n=t();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;e.useSyncExternalStore=n.useSyncExternalStore===void 0?f:n.useSyncExternalStore})),r=e(((e,t)=>{t.exports=n()})),i=e((e=>{var n=t(),i=r();function a(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var o=typeof Object.is==`function`?Object.is:a,s=i.useSyncExternalStore,c=n.useRef,l=n.useEffect,u=n.useMemo,d=n.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var a=c(null);if(a.current===null){var f={hasValue:!1,value:null};a.current=f}else f=a.current;a=u(function(){function e(e){if(!a){if(a=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,o(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var a=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=s(e,a[0],a[1]);return l(function(){f.hasValue=!0,f.value=p},[p]),d(p),p}})),a=e(((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-Cymc5bS-.js b/src/www/assets/zod-Cymc5bS-.js new file mode 100644 index 0000000..eb21bbe --- /dev/null +++ b/src/www/assets/zod-Cymc5bS-.js @@ -0,0 +1,40 @@ +import{au as e}from"./messages-BovT1T-w.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..8517d9c --- /dev/null +++ b/src/www/index.html @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + 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..6c92256 --- /dev/null +++ b/src/www/sw.js @@ -0,0 +1 @@ +if(!self.define){let s,e={};const l=(l,r)=>(l=new URL(l+".js",r).href,e[l]||new Promise(e=>{if("document"in self){const s=document.createElement("script");s.src=l,s.onload=e,document.head.appendChild(s)}else s=l,importScripts(l),e()}).then(()=>{let s=e[l];if(!s)throw new Error(`Module ${l} didn’t register its module`);return s}));self.define=(r,n)=>{const i=s||("document"in self?document.currentScript.src:"")||location.href;if(e[i])return;let u={};const o=s=>l(s,i),t={module:{uri:i},exports:u,require:o};e[i]=Promise.all(r.map(s=>t[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:"094194cc3d9b66e284de5691e5a4e5f1"},{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-Cymc5bS-.js",revision:null},{url:"assets/with-selector-D_dmjfol.js",revision:null},{url:"assets/web-vitals-f_BHH8AE.js",revision:null},{url:"assets/wallet--XSRr4dT.js",revision:null},{url:"assets/useStore-1-QVtiLb.js",revision:null},{url:"assets/useSearch-B5ZWp8fU.js",revision:null},{url:"assets/useRouterState-DV1cSG1v.js",revision:null},{url:"assets/useRouter-D03zSgJO.js",revision:null},{url:"assets/useNavigate-Dg8CkCoa.js",revision:null},{url:"assets/use-table-url-state-C7-IMA3_.js",revision:null},{url:"assets/unauthorized-error-CxmfHb-a.js",revision:null},{url:"assets/trash-2-Du706Ujr.js",revision:null},{url:"assets/theme-switch-BjXQNOij.js",revision:null},{url:"assets/theme-provider-CRKya7Cx.js",revision:null},{url:"assets/textarea-D_TrrVtD.js",revision:null},{url:"assets/telescope-67IWjQye.js",revision:null},{url:"assets/telegram-HLdihqdM.js",revision:null},{url:"assets/switch-R6BNZUH1.js",revision:null},{url:"assets/sign-in-DGULZo5h.js",revision:null},{url:"assets/sidebar-nav-DgezD6QJ.js",revision:null},{url:"assets/show-submitted-data-l0RlCwTX.js",revision:null},{url:"assets/settings-6L98-bwl.js",revision:null},{url:"assets/separator-CRLYw2cW.js",revision:null},{url:"assets/select-DcStuzoT.js",revision:null},{url:"assets/search-provider-Cx1K1ilz.js",revision:null},{url:"assets/rpc-BVbqsnlT.js",revision:null},{url:"assets/routes-CJI6s37t.js",revision:null},{url:"assets/router-Dohuf5K5.js",revision:null},{url:"assets/route-jvq7ILAD.js",revision:null},{url:"assets/route-Cut38oeV.js",revision:null},{url:"assets/route-ClLiRb_H.js",revision:null},{url:"assets/route-C7cw4pTD.js",revision:null},{url:"assets/route-BxpeArPd.js",revision:null},{url:"assets/redirect-dE0wk0WH.js",revision:null},{url:"assets/rate-B9ZGMIwY.js",revision:null},{url:"assets/radio-group-DXVwPYJH.js",revision:null},{url:"assets/popover-D5q6Hufu.js",revision:null},{url:"assets/payments-DTD79Ztb.js",revision:null},{url:"assets/payment-assets-DSsuCTEQ.js",revision:null},{url:"assets/password-input-B463LDkD.js",revision:null},{url:"assets/password-BmNp63ZQ.js",revision:null},{url:"assets/page-header-BBJ9dE3-.js",revision:null},{url:"assets/orders-Bv-Izk6_.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-DfNeewuy.js",revision:null},{url:"assets/not-found-error-toRsO1Fi.js",revision:null},{url:"assets/messages-BovT1T-w.js",revision:null},{url:"assets/matchContext-BcwcZvp2.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-PO6kK4Oj.js",revision:null},{url:"assets/long-text-BXQXVuRh.js",revision:null},{url:"assets/loader-circle-fg8-aSyl.js",revision:null},{url:"assets/link-CA4H4hTz.js",revision:null},{url:"assets/lib-CTYwzR3w.js",revision:null},{url:"assets/label-CsevXZTG.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/install-BDL3tVBh.js",revision:null},{url:"assets/input-DiRPHDd8.js",revision:null},{url:"assets/index-TVbhXeum.css",revision:null},{url:"assets/index-CvQvpjMM.js",revision:null},{url:"assets/help-F2O9kOnX.js",revision:null},{url:"assets/header-DbmR8lIc.js",revision:null},{url:"assets/general-error-DKtbS-qh.js",revision:null},{url:"assets/form-DdHiBYMe.js",revision:null},{url:"assets/forbidden-BEz-zjy_.js",revision:null},{url:"assets/font-provider-DvtNHF7l.js",revision:null},{url:"assets/eye-off-C-BF3gv3.js",revision:null},{url:"assets/eye-CDavQcLN.js",revision:null},{url:"assets/epay-Db0RVMXe.js",revision:null},{url:"assets/empty-state-Cam-sX8U.js",revision:null},{url:"assets/ellipsis-Y4gZr59G.js",revision:null},{url:"assets/dropdown-menu-CUea1X0A.js",revision:null},{url:"assets/download-CN4vU01G.js",revision:null},{url:"assets/dist-DvAgZMq72.js",revision:null},{url:"assets/dist-DlZiaY1y.js",revision:null},{url:"assets/dist-DG5UMlBd.js",revision:null},{url:"assets/dist-D21KDGR3.js",revision:null},{url:"assets/dist-Cp1lAGZy.js",revision:null},{url:"assets/dist-CGm-FpWw.js",revision:null},{url:"assets/dist-BKfJQFVD.js",revision:null},{url:"assets/dist-BEDXr2LC.js",revision:null},{url:"assets/dist-15n4mVGL.js",revision:null},{url:"assets/display-CkSSrdk4.js",revision:null},{url:"assets/data-table-CmcvKcj8.js",revision:null},{url:"assets/dashboard-Clgehcjb.js",revision:null},{url:"assets/createLucideIcon-D28ivbfF.js",revision:null},{url:"assets/cookies-BNZcTwGc.js",revision:null},{url:"assets/command-BwVY_kli.js",revision:null},{url:"assets/coming-soon-dialog-DMmjLgiX.js",revision:null},{url:"assets/clock-3-BoF5rDzX.js",revision:null},{url:"assets/circle-check-Dh8WOZF0.js",revision:null},{url:"assets/chevrons-up-down-iOmAu5Fh.js",revision:null},{url:"assets/chevron-down-CdmvZsfI.js",revision:null},{url:"assets/checkbox-B_Isethe.js",revision:null},{url:"assets/check-gDgbfVXu.js",revision:null},{url:"assets/chains-store-Dzu_Y00B.js",revision:null},{url:"assets/chains-QKtNypSO.js",revision:null},{url:"assets/card-DuQAN29P.js",revision:null},{url:"assets/button-DJA4fnJ8.js",revision:null},{url:"assets/badge-BAmRBT3U.js",revision:null},{url:"assets/auth-store-BpIS8RMn.js",revision:null},{url:"assets/auth-animation-context-zwGs7ZAM.js",revision:null},{url:"assets/atom-DI1Bn-1s.js",revision:null},{url:"assets/arrow-left-BrKcUadm.js",revision:null},{url:"assets/appearance-DJZ27An3.js",revision:null},{url:"assets/addresses-DQVKa3vf.js",revision:null},{url:"assets/_error-Dttamloo.js",revision:null},{url:"assets/_error-DGJYkCxd.js",revision:null},{url:"assets/Matches-LuvVcyUg.js",revision:null},{url:"assets/Match-B8-zI9ZJ.js",revision:null},{url:"assets/ClientOnly-CtYi2y5F.js",revision:null},{url:"assets/503-BTAQ6Iri.js",revision:null},{url:"assets/500-DSCRAyCF.js",revision:null},{url:"assets/404-VQj_aY6A.js",revision:null},{url:"assets/403-BfPOIf6t.js",revision:null},{url:"assets/401-IieFK_aS.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")))}); 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});