mirror of
https://github.com/GMWalletApp/epusdt.git
synced 2026-07-07 18:26:16 +00:00
Compare commits
6 Commits
v1.0.3
...
225cae2c24
| Author | SHA1 | Date | |
|---|---|---|---|
| 225cae2c24 | |||
| 08d409d5eb | |||
| 54b83f8b16 | |||
| 3879853836 | |||
| 2824687d9f | |||
| 3e85bf77c2 |
@@ -51,6 +51,12 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 安全审计
|
||||||
|
Epusdt 已完成第三方安全审计。
|
||||||
|
[查看安全审计报告](https://github.com/VectorBits/audit/blob/main/epusdt-secure-audit-report-2026-05-14.pdf)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 广泛兼容,即插即用
|
## 广泛兼容,即插即用
|
||||||
|
|
||||||
无论你运营的是哪类系统,Epusdt 均可基于现有接口方案,**无需重构业务逻辑**,快速接入,立即获得 Crypto 收款能力,低成本扩展全球支付场景:
|
无论你运营的是哪类系统,Epusdt 均可基于现有接口方案,**无需重构业务逻辑**,快速接入,立即获得 Crypto 收款能力,低成本扩展全球支付场景:
|
||||||
@@ -104,6 +110,31 @@ Epusdt
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 程序截图
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td align="center" valign="top">
|
||||||
|
<img src="wiki/img/web2.png" alt="Epusdt 管理面板首页" height="260"><br>
|
||||||
|
<sub>管理面板首页</sub>
|
||||||
|
</td>
|
||||||
|
<td align="center" valign="top">
|
||||||
|
<img src="wiki/img/web1.png" alt="Epusdt 管理面板" height="260"><br>
|
||||||
|
<sub>管理面板</sub>
|
||||||
|
</td>
|
||||||
|
<td align="center" valign="top">
|
||||||
|
<img src="wiki/img/pay1.jpeg" alt="Epusdt 收银台" height="260"><br>
|
||||||
|
<sub>收银台</sub>
|
||||||
|
</td>
|
||||||
|
<td align="center" valign="top">
|
||||||
|
<img src="wiki/img/pay2.jpeg" alt="Epusdt 支付页面" height="260"><br>
|
||||||
|
<sub>支付页面</sub>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 实现原理
|
## 实现原理
|
||||||
|
|
||||||
Epusdt 通过监听多条区块链网络(TRC20、ERC20、BEP20、Polygon 等)的 API 或 RPC 节点,实时捕获钱包地址的代币入账事件,利用**金额差异**与**时效性**精确匹配交易归属:
|
Epusdt 通过监听多条区块链网络(TRC20、ERC20、BEP20、Polygon 等)的 API 或 RPC 节点,实时捕获钱包地址的代币入账事件,利用**金额差异**与**时效性**精确匹配交易归属:
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package admin
|
package admin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -29,6 +32,49 @@ type OrderStatsResponse struct {
|
|||||||
ExpiredUnpaidCount int64 `json:"expired_unpaid_count" example:"10"`
|
ExpiredUnpaidCount int64 `json:"expired_unpaid_count" example:"10"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RpcStatsDashboardResponse is the RPC runtime stats payload.
|
||||||
|
type RpcStatsDashboardResponse struct {
|
||||||
|
GeneratedAt string `json:"generated_at" example:"2026-06-09T12:00:00+08:00"`
|
||||||
|
Summary RpcStatsSummaryResponse `json:"summary"`
|
||||||
|
Chains []RpcStatsChainResponse `json:"chains"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpcStatsSummaryResponse is the overall RPC runtime summary.
|
||||||
|
type RpcStatsSummaryResponse struct {
|
||||||
|
TotalChains int `json:"total_chains" example:"6"`
|
||||||
|
EnabledChains int `json:"enabled_chains" example:"5"`
|
||||||
|
ActiveChains int `json:"active_chains" example:"4"`
|
||||||
|
OkChains int `json:"ok_chains" example:"3"`
|
||||||
|
WarningChains int `json:"warning_chains" example:"1"`
|
||||||
|
DownChains int `json:"down_chains" example:"0"`
|
||||||
|
UnknownChains int `json:"unknown_chains" example:"1"`
|
||||||
|
DisabledChains int `json:"disabled_chains" example:"1"`
|
||||||
|
SuccessCount int64 `json:"success_count" example:"123"`
|
||||||
|
FailureCount int64 `json:"failure_count" example:"2"`
|
||||||
|
SuccessRate float64 `json:"success_rate" example:"0.984"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpcStatsChainResponse is one chain's in-process RPC runtime stats.
|
||||||
|
type RpcStatsChainResponse struct {
|
||||||
|
Network string `json:"network" example:"tron"`
|
||||||
|
DisplayName string `json:"display_name" example:"TRON"`
|
||||||
|
Enabled bool `json:"enabled" example:"true"`
|
||||||
|
HasData bool `json:"has_data" example:"true"`
|
||||||
|
Status string `json:"status" example:"ok" enums:"ok,warning,down,unknown,disabled"`
|
||||||
|
SuccessCount int64 `json:"success_count" example:"123"`
|
||||||
|
FailureCount int64 `json:"failure_count" example:"2"`
|
||||||
|
SuccessRate float64 `json:"success_rate" example:"0.984"`
|
||||||
|
LatestBlockHeight int64 `json:"latest_block_height" example:"64532100"`
|
||||||
|
LastSyncAt string `json:"last_sync_at" example:"2026-06-09T12:00:00+08:00"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type rpcStatsStreamEnvelope struct {
|
||||||
|
StatusCode int `json:"status_code"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
Data RpcStatsDashboardResponse `json:"data"`
|
||||||
|
RequestID string `json:"request_id"`
|
||||||
|
}
|
||||||
|
|
||||||
// RpcHealthCheckResponse is the response for a health check probe.
|
// RpcHealthCheckResponse is the response for a health check probe.
|
||||||
type RpcHealthCheckResponse struct {
|
type RpcHealthCheckResponse struct {
|
||||||
// 健康状态 unknown=未知 ok=正常 down=异常
|
// 健康状态 unknown=未知 ok=正常 down=异常
|
||||||
@@ -230,6 +276,174 @@ func (c *BaseAdminController) OrderStats(ctx echo.Context) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RpcStats returns process-local RPC runtime counters grouped by chain.
|
||||||
|
// Values reset on process restart and are not persisted to the database.
|
||||||
|
// @Summary RPC runtime statistics
|
||||||
|
// @Description Streams in-process RPC success/failure counts, success rate, latest block height and last sync time by chain over one authenticated SSE connection.
|
||||||
|
// @Tags Admin Dashboard
|
||||||
|
// @Security AdminJWT
|
||||||
|
// @Produce text/event-stream
|
||||||
|
// @Success 200 {object} response.ApiResponse{data=admin.RpcStatsDashboardResponse}
|
||||||
|
// @Failure 400 {object} response.ApiResponse
|
||||||
|
// @Router /admin/api/v1/dashboard/rpc-stats [get]
|
||||||
|
func (c *BaseAdminController) RpcStats(ctx echo.Context) error {
|
||||||
|
return c.streamRpcStats(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildRpcStatsResponse() (RpcStatsDashboardResponse, error) {
|
||||||
|
chains, err := data.ListChains()
|
||||||
|
if err != nil {
|
||||||
|
return RpcStatsDashboardResponse{}, err
|
||||||
|
}
|
||||||
|
stats := data.SnapshotRpcRuntimeStats()
|
||||||
|
now := time.Now()
|
||||||
|
resp := RpcStatsDashboardResponse{
|
||||||
|
GeneratedAt: now.Format(time.RFC3339),
|
||||||
|
Chains: make([]RpcStatsChainResponse, 0, len(chains)),
|
||||||
|
}
|
||||||
|
for _, chain := range chains {
|
||||||
|
network := strings.ToLower(strings.TrimSpace(chain.Network))
|
||||||
|
stat := stats[network]
|
||||||
|
successRate := rpcStatsSuccessRate(stat.SuccessCount, stat.FailureCount)
|
||||||
|
hasData := stat.SuccessCount+stat.FailureCount > 0
|
||||||
|
status := rpcStatsStatus(chain.Enabled, stat.SuccessCount, stat.FailureCount)
|
||||||
|
lastSyncAt := ""
|
||||||
|
if !stat.LastSyncAt.IsZero() {
|
||||||
|
lastSyncAt = stat.LastSyncAt.Format(time.RFC3339)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.Summary.TotalChains++
|
||||||
|
if chain.Enabled {
|
||||||
|
resp.Summary.EnabledChains++
|
||||||
|
}
|
||||||
|
if hasData {
|
||||||
|
resp.Summary.ActiveChains++
|
||||||
|
}
|
||||||
|
switch status {
|
||||||
|
case "ok":
|
||||||
|
resp.Summary.OkChains++
|
||||||
|
case "warning":
|
||||||
|
resp.Summary.WarningChains++
|
||||||
|
case "down":
|
||||||
|
resp.Summary.DownChains++
|
||||||
|
case "disabled":
|
||||||
|
resp.Summary.DisabledChains++
|
||||||
|
default:
|
||||||
|
resp.Summary.UnknownChains++
|
||||||
|
}
|
||||||
|
resp.Summary.SuccessCount += stat.SuccessCount
|
||||||
|
resp.Summary.FailureCount += stat.FailureCount
|
||||||
|
|
||||||
|
resp.Chains = append(resp.Chains, RpcStatsChainResponse{
|
||||||
|
Network: chain.Network,
|
||||||
|
DisplayName: rpcStatsDisplayName(chain.Network, chain.DisplayName),
|
||||||
|
Enabled: chain.Enabled,
|
||||||
|
HasData: hasData,
|
||||||
|
Status: status,
|
||||||
|
SuccessCount: stat.SuccessCount,
|
||||||
|
FailureCount: stat.FailureCount,
|
||||||
|
SuccessRate: successRate,
|
||||||
|
LatestBlockHeight: stat.LatestBlockHeight,
|
||||||
|
LastSyncAt: lastSyncAt,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
resp.Summary.SuccessRate = rpcStatsSuccessRate(resp.Summary.SuccessCount, resp.Summary.FailureCount)
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *BaseAdminController) streamRpcStats(ctx echo.Context) error {
|
||||||
|
initial, err := buildRpcStatsResponse()
|
||||||
|
if err != nil {
|
||||||
|
return c.FailJson(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := ctx.Response()
|
||||||
|
resp.Header().Set(echo.HeaderContentType, "text/event-stream; charset=utf-8")
|
||||||
|
resp.Header().Set("Cache-Control", "no-cache")
|
||||||
|
resp.Header().Set("Connection", "keep-alive")
|
||||||
|
resp.Header().Set("X-Accel-Buffering", "no")
|
||||||
|
|
||||||
|
flusher, ok := resp.Writer.(http.Flusher)
|
||||||
|
if !ok {
|
||||||
|
return echo.NewHTTPError(http.StatusInternalServerError, "streaming unsupported")
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.WriteHeader(http.StatusOK)
|
||||||
|
if _, err := fmt.Fprint(resp.Writer, "retry: 5000\n\n"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := writeRpcStatsSSE(ctx, flusher, initial); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
ticker := time.NewTicker(5 * time.Second)
|
||||||
|
defer ticker.Stop()
|
||||||
|
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-ctx.Request().Context().Done():
|
||||||
|
return nil
|
||||||
|
case <-ticker.C:
|
||||||
|
payload, err := buildRpcStatsResponse()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := writeRpcStatsSSE(ctx, flusher, payload); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeRpcStatsSSE(ctx echo.Context, flusher http.Flusher, payload RpcStatsDashboardResponse) error {
|
||||||
|
envelope := rpcStatsStreamEnvelope{
|
||||||
|
StatusCode: http.StatusOK,
|
||||||
|
Message: "success",
|
||||||
|
Data: payload,
|
||||||
|
RequestID: ctx.Request().Header.Get(echo.HeaderXRequestID),
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(envelope)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := fmt.Fprintf(ctx.Response().Writer, "event: rpc_stats\ndata: %s\n\n", b); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
flusher.Flush()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func rpcStatsDisplayName(network string, displayName string) string {
|
||||||
|
if name := strings.TrimSpace(displayName); name != "" {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
return strings.TrimSpace(network)
|
||||||
|
}
|
||||||
|
|
||||||
|
func rpcStatsSuccessRate(successCount, failureCount int64) float64 {
|
||||||
|
total := successCount + failureCount
|
||||||
|
if total <= 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return float64(successCount) / float64(total)
|
||||||
|
}
|
||||||
|
|
||||||
|
func rpcStatsStatus(enabled bool, successCount, failureCount int64) string {
|
||||||
|
if !enabled {
|
||||||
|
return "disabled"
|
||||||
|
}
|
||||||
|
if successCount+failureCount == 0 {
|
||||||
|
return "unknown"
|
||||||
|
}
|
||||||
|
if successCount == 0 {
|
||||||
|
return "down"
|
||||||
|
}
|
||||||
|
if failureCount > 0 {
|
||||||
|
return "warning"
|
||||||
|
}
|
||||||
|
return "ok"
|
||||||
|
}
|
||||||
|
|
||||||
// RecentOrders returns the last N orders for the dashboard list card.
|
// RecentOrders returns the last N orders for the dashboard list card.
|
||||||
// @Summary Recent orders
|
// @Summary Recent orders
|
||||||
// @Description Returns the last N orders for the dashboard
|
// @Description Returns the last N orders for the dashboard
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
package data
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RpcRuntimeStatsSnapshot is an in-process snapshot of RPC activity for one
|
||||||
|
// chain. It is intentionally not persisted; restarting the process resets it.
|
||||||
|
type RpcRuntimeStatsSnapshot struct {
|
||||||
|
Network string
|
||||||
|
SuccessCount int64
|
||||||
|
FailureCount int64
|
||||||
|
LatestBlockHeight int64
|
||||||
|
LastSyncAt time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
type rpcRuntimeStatsCounter struct {
|
||||||
|
successCount int64
|
||||||
|
failureCount int64
|
||||||
|
latestBlockHeight int64
|
||||||
|
lastSyncAt time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
var gRpcRuntimeStats = struct {
|
||||||
|
sync.RWMutex
|
||||||
|
byNetwork map[string]*rpcRuntimeStatsCounter
|
||||||
|
}{
|
||||||
|
byNetwork: make(map[string]*rpcRuntimeStatsCounter),
|
||||||
|
}
|
||||||
|
|
||||||
|
func normalizeRpcStatsNetwork(network string) string {
|
||||||
|
return strings.ToLower(strings.TrimSpace(network))
|
||||||
|
}
|
||||||
|
|
||||||
|
func rpcStatsCounterLocked(network string) *rpcRuntimeStatsCounter {
|
||||||
|
counter := gRpcRuntimeStats.byNetwork[network]
|
||||||
|
if counter == nil {
|
||||||
|
counter = &rpcRuntimeStatsCounter{}
|
||||||
|
gRpcRuntimeStats.byNetwork[network] = counter
|
||||||
|
}
|
||||||
|
return counter
|
||||||
|
}
|
||||||
|
|
||||||
|
// RecordRpcSuccess records one successful application-level RPC operation.
|
||||||
|
func RecordRpcSuccess(network string) {
|
||||||
|
network = normalizeRpcStatsNetwork(network)
|
||||||
|
if network == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
gRpcRuntimeStats.Lock()
|
||||||
|
defer gRpcRuntimeStats.Unlock()
|
||||||
|
counter := rpcStatsCounterLocked(network)
|
||||||
|
counter.successCount++
|
||||||
|
counter.lastSyncAt = time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
// RecordRpcFailure records one failed application-level RPC operation.
|
||||||
|
func RecordRpcFailure(network string) {
|
||||||
|
network = normalizeRpcStatsNetwork(network)
|
||||||
|
if network == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
gRpcRuntimeStats.Lock()
|
||||||
|
defer gRpcRuntimeStats.Unlock()
|
||||||
|
counter := rpcStatsCounterLocked(network)
|
||||||
|
counter.failureCount++
|
||||||
|
}
|
||||||
|
|
||||||
|
// RecordRpcBlockHeight records the latest observed chain height.
|
||||||
|
func RecordRpcBlockHeight(network string, height int64) {
|
||||||
|
network = normalizeRpcStatsNetwork(network)
|
||||||
|
if network == "" || height <= 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
gRpcRuntimeStats.Lock()
|
||||||
|
defer gRpcRuntimeStats.Unlock()
|
||||||
|
counter := rpcStatsCounterLocked(network)
|
||||||
|
counter.lastSyncAt = time.Now()
|
||||||
|
if height > counter.latestBlockHeight {
|
||||||
|
counter.latestBlockHeight = height
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SnapshotRpcRuntimeStats returns a copy of the current per-chain counters.
|
||||||
|
func SnapshotRpcRuntimeStats() map[string]RpcRuntimeStatsSnapshot {
|
||||||
|
gRpcRuntimeStats.RLock()
|
||||||
|
defer gRpcRuntimeStats.RUnlock()
|
||||||
|
out := make(map[string]RpcRuntimeStatsSnapshot, len(gRpcRuntimeStats.byNetwork))
|
||||||
|
for network, counter := range gRpcRuntimeStats.byNetwork {
|
||||||
|
out[network] = RpcRuntimeStatsSnapshot{
|
||||||
|
Network: network,
|
||||||
|
SuccessCount: counter.successCount,
|
||||||
|
FailureCount: counter.failureCount,
|
||||||
|
LatestBlockHeight: counter.latestBlockHeight,
|
||||||
|
LastSyncAt: counter.lastSyncAt,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResetRpcRuntimeStatsForTest clears process-local stats for isolated tests.
|
||||||
|
func ResetRpcRuntimeStatsForTest() {
|
||||||
|
gRpcRuntimeStats.Lock()
|
||||||
|
defer gRpcRuntimeStats.Unlock()
|
||||||
|
gRpcRuntimeStats.byNetwork = make(map[string]*rpcRuntimeStatsCounter)
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package data
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestRpcRuntimeStatsRecordsCountsAndLatestHeight(t *testing.T) {
|
||||||
|
ResetRpcRuntimeStatsForTest()
|
||||||
|
t.Cleanup(ResetRpcRuntimeStatsForTest)
|
||||||
|
|
||||||
|
start := time.Now()
|
||||||
|
RecordRpcSuccess(" TRON ")
|
||||||
|
RecordRpcSuccess("tron")
|
||||||
|
RecordRpcFailure("TRON")
|
||||||
|
RecordRpcBlockHeight("Tron", 100)
|
||||||
|
RecordRpcBlockHeight("tron", 90)
|
||||||
|
|
||||||
|
stats := SnapshotRpcRuntimeStats()
|
||||||
|
got, ok := stats["tron"]
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("missing tron stats: %#v", stats)
|
||||||
|
}
|
||||||
|
if got.Network != "tron" {
|
||||||
|
t.Fatalf("network = %q, want tron", got.Network)
|
||||||
|
}
|
||||||
|
if got.SuccessCount != 2 {
|
||||||
|
t.Fatalf("success count = %d, want 2", got.SuccessCount)
|
||||||
|
}
|
||||||
|
if got.FailureCount != 1 {
|
||||||
|
t.Fatalf("failure count = %d, want 1", got.FailureCount)
|
||||||
|
}
|
||||||
|
if got.LatestBlockHeight != 100 {
|
||||||
|
t.Fatalf("latest block height = %d, want 100", got.LatestBlockHeight)
|
||||||
|
}
|
||||||
|
if got.LastSyncAt.Before(start) {
|
||||||
|
t.Fatalf("last sync at = %s, want after %s", got.LastSyncAt, start)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRpcRuntimeStatsIgnoresEmptyNetworkAndInvalidHeight(t *testing.T) {
|
||||||
|
ResetRpcRuntimeStatsForTest()
|
||||||
|
t.Cleanup(ResetRpcRuntimeStatsForTest)
|
||||||
|
|
||||||
|
RecordRpcSuccess("")
|
||||||
|
RecordRpcFailure(" ")
|
||||||
|
RecordRpcBlockHeight("tron", 0)
|
||||||
|
|
||||||
|
stats := SnapshotRpcRuntimeStats()
|
||||||
|
if len(stats) != 0 {
|
||||||
|
t.Fatalf("stats = %#v, want empty", stats)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRpcRuntimeStatsBlockHeightUpdatesLastSyncAt(t *testing.T) {
|
||||||
|
ResetRpcRuntimeStatsForTest()
|
||||||
|
t.Cleanup(ResetRpcRuntimeStatsForTest)
|
||||||
|
|
||||||
|
start := time.Now()
|
||||||
|
RecordRpcBlockHeight("ethereum", 123)
|
||||||
|
|
||||||
|
stats := SnapshotRpcRuntimeStats()
|
||||||
|
got := stats["ethereum"]
|
||||||
|
if got.SuccessCount != 0 {
|
||||||
|
t.Fatalf("success count = %d, want 0", got.SuccessCount)
|
||||||
|
}
|
||||||
|
if got.LastSyncAt.Before(start) {
|
||||||
|
t.Fatalf("last sync at = %s, want after %s", got.LastSyncAt, start)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestResetRpcRuntimeStatsForTest(t *testing.T) {
|
||||||
|
ResetRpcRuntimeStatsForTest()
|
||||||
|
RecordRpcSuccess("tron")
|
||||||
|
ResetRpcRuntimeStatsForTest()
|
||||||
|
|
||||||
|
stats := SnapshotRpcRuntimeStats()
|
||||||
|
if len(stats) != 0 {
|
||||||
|
t.Fatalf("stats = %#v, want empty after reset", stats)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -325,7 +325,15 @@ func resolveSolanaRpcNode(excludeIDs ...uint64) (*mdb.RpcNode, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SolRetryClient 发送 Solana JSON-RPC 请求,自动重试
|
// SolRetryClient 发送 Solana JSON-RPC 请求,自动重试
|
||||||
func SolRetryClient(method string, params []interface{}) ([]byte, error) {
|
func SolRetryClient(method string, params []interface{}) (body []byte, err error) {
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
data.RecordRpcFailure(mdb.NetworkSolana)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
data.RecordRpcSuccess(mdb.NetworkSolana)
|
||||||
|
}()
|
||||||
|
|
||||||
tried := make([]uint64, 0, 3)
|
tried := make([]uint64, 0, 3)
|
||||||
var lastErr error
|
var lastErr error
|
||||||
for attempts := 0; attempts < 3; attempts++ {
|
for attempts := 0; attempts < 3; attempts++ {
|
||||||
@@ -443,6 +451,32 @@ func SolGetSignaturesForAddress(address string, limit int, untilSig string, befo
|
|||||||
return bodyData, nil
|
return bodyData, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SolGetBlockHeight() (height int64, err error) {
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
data.RecordRpcFailure(mdb.NetworkSolana)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
data.RecordRpcSuccess(mdb.NetworkSolana)
|
||||||
|
}()
|
||||||
|
|
||||||
|
rpcURL, err := resolveSolanaRpcURL()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
bodyData, err := solRetryClientWithURL(rpcURL, "getBlockHeight", []interface{}{
|
||||||
|
map[string]interface{}{"commitment": "finalized"},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
height = gjson.GetBytes(bodyData, "result").Int()
|
||||||
|
if height <= 0 {
|
||||||
|
return 0, fmt.Errorf("unexpected getBlockHeight response: %s", string(bodyData))
|
||||||
|
}
|
||||||
|
return height, nil
|
||||||
|
}
|
||||||
|
|
||||||
func SolGetTransaction(sig string) ([]byte, error) {
|
func SolGetTransaction(sig string) ([]byte, error) {
|
||||||
txData, err := SolRetryClient("getTransaction", []interface{}{
|
txData, err := SolRetryClient("getTransaction", []interface{}{
|
||||||
sig,
|
sig,
|
||||||
|
|||||||
@@ -102,6 +102,53 @@ func TestResolveSolanaRpcURLUsesGeneralWhenManualVerifyExists(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSolGetBlockHeightDoesNotAffectRpcNodeFailover(t *testing.T) {
|
||||||
|
cleanup := testutil.SetupTestDatabases(t)
|
||||||
|
defer cleanup()
|
||||||
|
data.ResetRpcFailoverForTest()
|
||||||
|
data.ResetRpcRuntimeStatsForTest()
|
||||||
|
t.Cleanup(data.ResetRpcFailoverForTest)
|
||||||
|
t.Cleanup(data.ResetRpcRuntimeStatsForTest)
|
||||||
|
|
||||||
|
oldRetryCount := solRPCRetryCount
|
||||||
|
solRPCRetryCount = 0
|
||||||
|
t.Cleanup(func() {
|
||||||
|
solRPCRetryCount = oldRetryCount
|
||||||
|
})
|
||||||
|
|
||||||
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
http.Error(w, "temporary", http.StatusBadGateway)
|
||||||
|
}))
|
||||||
|
defer server.Close()
|
||||||
|
|
||||||
|
node := &mdb.RpcNode{
|
||||||
|
Network: mdb.NetworkSolana,
|
||||||
|
Url: server.URL,
|
||||||
|
Type: mdb.RpcNodeTypeHttp,
|
||||||
|
Weight: 1,
|
||||||
|
Enabled: true,
|
||||||
|
Purpose: mdb.RpcNodePurposeGeneral,
|
||||||
|
Status: mdb.RpcNodeStatusOk,
|
||||||
|
}
|
||||||
|
if err := dao.Mdb.Create(node).Error; err != nil {
|
||||||
|
t.Fatalf("seed solana rpc_node: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < data.RpcFailoverThreshold+1; i++ {
|
||||||
|
if _, err := SolGetBlockHeight(); err == nil {
|
||||||
|
t.Fatalf("SolGetBlockHeight attempt %d unexpectedly succeeded", i+1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.IsRpcNodeCoolingDown(node.ID) {
|
||||||
|
t.Fatal("SolGetBlockHeight failures should not affect rpc_node failover cooldown")
|
||||||
|
}
|
||||||
|
stats := data.SnapshotRpcRuntimeStats()
|
||||||
|
if got := stats[mdb.NetworkSolana].FailureCount; got != int64(data.RpcFailoverThreshold+1) {
|
||||||
|
t.Fatalf("solana runtime failure_count = %d, want %d", got, data.RpcFailoverThreshold+1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSolRetryClientSwitchesAfterFailureThreshold(t *testing.T) {
|
func TestSolRetryClientSwitchesAfterFailureThreshold(t *testing.T) {
|
||||||
cleanup := testutil.SetupTestDatabases(t)
|
cleanup := testutil.SetupTestDatabases(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package route
|
package route
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -230,6 +232,7 @@ func TestAdminProtectedRoute_NoToken(t *testing.T) {
|
|||||||
"/admin/api/v1/wallets",
|
"/admin/api/v1/wallets",
|
||||||
"/admin/api/v1/orders",
|
"/admin/api/v1/orders",
|
||||||
"/admin/api/v1/dashboard/overview",
|
"/admin/api/v1/dashboard/overview",
|
||||||
|
"/admin/api/v1/dashboard/rpc-stats",
|
||||||
"/admin/api/v1/settings",
|
"/admin/api/v1/settings",
|
||||||
"/admin/api/v1/rpc-nodes",
|
"/admin/api/v1/rpc-nodes",
|
||||||
"/admin/api/v1/notification-channels",
|
"/admin/api/v1/notification-channels",
|
||||||
@@ -971,7 +974,7 @@ func TestAdminOrders_ResendCallbackRequeuesPaidOrder(t *testing.T) {
|
|||||||
|
|
||||||
// ─── Dashboard ───────────────────────────────────────────────────────────────
|
// ─── Dashboard ───────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
// TestAdminDashboard_AllRoutes verifies all dashboard endpoints return 200.
|
// TestAdminDashboard_AllRoutes verifies ordinary JSON dashboard endpoints return 200.
|
||||||
func TestAdminDashboard_AllRoutes(t *testing.T) {
|
func TestAdminDashboard_AllRoutes(t *testing.T) {
|
||||||
e, token := setupAdminTestEnv(t)
|
e, token := setupAdminTestEnv(t)
|
||||||
routes := []string{
|
routes := []string{
|
||||||
@@ -988,6 +991,148 @@ func TestAdminDashboard_AllRoutes(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAdminDashboardRpcStatsSSE(t *testing.T) {
|
||||||
|
e, token := setupAdminTestEnv(t)
|
||||||
|
data.RecordRpcSuccess("TRON")
|
||||||
|
data.RecordRpcSuccess("tron")
|
||||||
|
data.RecordRpcFailure(" tron ")
|
||||||
|
data.RecordRpcBlockHeight("tron", 64532100)
|
||||||
|
|
||||||
|
server := httptest.NewServer(e)
|
||||||
|
defer server.Close()
|
||||||
|
|
||||||
|
reqCtx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
req, err := http.NewRequestWithContext(reqCtx, http.MethodGet, server.URL+"/admin/api/v1/dashboard/rpc-stats", nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("new request: %v", err)
|
||||||
|
}
|
||||||
|
req.Header.Set(echo.HeaderAuthorization, "Bearer "+token)
|
||||||
|
req.Header.Set(echo.HeaderAccept, "text/event-stream")
|
||||||
|
|
||||||
|
resp, err := server.Client().Do(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("sse request: %v", err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
t.Fatalf("sse status = %d, want 200", resp.StatusCode)
|
||||||
|
}
|
||||||
|
if ct := resp.Header.Get(echo.HeaderContentType); !strings.Contains(ct, "text/event-stream") {
|
||||||
|
t.Fatalf("content-type = %q, want text/event-stream", ct)
|
||||||
|
}
|
||||||
|
|
||||||
|
reader := bufio.NewReader(resp.Body)
|
||||||
|
var eventName string
|
||||||
|
var dataLine string
|
||||||
|
for {
|
||||||
|
line, err := reader.ReadString('\n')
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("read sse line: %v", err)
|
||||||
|
}
|
||||||
|
line = strings.TrimRight(line, "\r\n")
|
||||||
|
if strings.HasPrefix(line, "event: ") {
|
||||||
|
eventName = strings.TrimPrefix(line, "event: ")
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(line, "data: ") {
|
||||||
|
dataLine = strings.TrimPrefix(line, "data: ")
|
||||||
|
}
|
||||||
|
if line == "" && dataLine != "" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if eventName != "rpc_stats" {
|
||||||
|
t.Fatalf("event = %q, want rpc_stats", eventName)
|
||||||
|
}
|
||||||
|
|
||||||
|
var envelope map[string]interface{}
|
||||||
|
if err := json.Unmarshal([]byte(dataLine), &envelope); err != nil {
|
||||||
|
t.Fatalf("unmarshal sse data: %v data=%s", err, dataLine)
|
||||||
|
}
|
||||||
|
if got, _ := envelope["status_code"].(float64); got != 200 {
|
||||||
|
t.Fatalf("sse status_code = %v, want 200", got)
|
||||||
|
}
|
||||||
|
dataObj, ok := envelope["data"].(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("sse data = %#v, want object", envelope["data"])
|
||||||
|
}
|
||||||
|
rows, ok := dataObj["chains"].([]interface{})
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("sse chains = %#v, want array", dataObj["chains"])
|
||||||
|
}
|
||||||
|
|
||||||
|
summary, ok := dataObj["summary"].(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("summary = %#v, want object", dataObj["summary"])
|
||||||
|
}
|
||||||
|
if got, _ := summary["success_count"].(float64); got != 2 {
|
||||||
|
t.Fatalf("summary success_count = %v, want 2", got)
|
||||||
|
}
|
||||||
|
if got, _ := summary["failure_count"].(float64); got != 1 {
|
||||||
|
t.Fatalf("summary failure_count = %v, want 1", got)
|
||||||
|
}
|
||||||
|
if got, _ := summary["success_rate"].(float64); got < 0.666 || got > 0.667 {
|
||||||
|
t.Fatalf("summary success_rate = %v, want about 0.6667", got)
|
||||||
|
}
|
||||||
|
|
||||||
|
var tron map[string]interface{}
|
||||||
|
var solana map[string]interface{}
|
||||||
|
for _, row := range rows {
|
||||||
|
item, _ := row.(map[string]interface{})
|
||||||
|
switch item["network"] {
|
||||||
|
case mdb.NetworkTron:
|
||||||
|
tron = item
|
||||||
|
case mdb.NetworkSolana:
|
||||||
|
solana = item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if tron == nil {
|
||||||
|
t.Fatalf("missing tron row in %#v", rows)
|
||||||
|
}
|
||||||
|
if got, _ := tron["success_count"].(float64); got != 2 {
|
||||||
|
t.Fatalf("tron success_count = %v, want 2", got)
|
||||||
|
}
|
||||||
|
if got, _ := tron["failure_count"].(float64); got != 1 {
|
||||||
|
t.Fatalf("tron failure_count = %v, want 1", got)
|
||||||
|
}
|
||||||
|
if got, _ := tron["success_rate"].(float64); got < 0.666 || got > 0.667 {
|
||||||
|
t.Fatalf("tron success_rate = %v, want about 0.6667", got)
|
||||||
|
}
|
||||||
|
if got, _ := tron["latest_block_height"].(float64); got != 64532100 {
|
||||||
|
t.Fatalf("tron latest_block_height = %v, want 64532100", got)
|
||||||
|
}
|
||||||
|
if got, _ := tron["last_sync_at"].(string); got == "" {
|
||||||
|
t.Fatalf("tron last_sync_at is empty: %#v", tron)
|
||||||
|
}
|
||||||
|
if got, _ := tron["display_name"].(string); got != "TRON" {
|
||||||
|
t.Fatalf("tron display_name = %q, want TRON", got)
|
||||||
|
}
|
||||||
|
if got, _ := tron["status"].(string); got != "warning" {
|
||||||
|
t.Fatalf("tron status = %q, want warning", got)
|
||||||
|
}
|
||||||
|
if solana == nil {
|
||||||
|
t.Fatalf("missing solana row in %#v", rows)
|
||||||
|
}
|
||||||
|
if got, _ := solana["success_count"].(float64); got != 0 {
|
||||||
|
t.Fatalf("solana success_count = %v, want 0", got)
|
||||||
|
}
|
||||||
|
if got, _ := solana["failure_count"].(float64); got != 0 {
|
||||||
|
t.Fatalf("solana failure_count = %v, want 0", got)
|
||||||
|
}
|
||||||
|
if got, _ := solana["success_rate"].(float64); got != 0 {
|
||||||
|
t.Fatalf("solana success_rate = %v, want 0", got)
|
||||||
|
}
|
||||||
|
if got, _ := solana["last_sync_at"].(string); got != "" {
|
||||||
|
t.Fatalf("solana last_sync_at = %q, want empty", got)
|
||||||
|
}
|
||||||
|
if got, _ := solana["latest_block_height"].(float64); got != 0 {
|
||||||
|
t.Fatalf("solana latest_block_height = %v, want 0", got)
|
||||||
|
}
|
||||||
|
if got, _ := solana["status"].(string); got != "unknown" {
|
||||||
|
t.Fatalf("solana status = %q, want unknown", got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAdminDashboard_RangeStatsIncludeHistoricalOrders(t *testing.T) {
|
func TestAdminDashboard_RangeStatsIncludeHistoricalOrders(t *testing.T) {
|
||||||
e, token := setupAdminTestEnv(t)
|
e, token := setupAdminTestEnv(t)
|
||||||
yesterday := time.Now().AddDate(0, 0, -1)
|
yesterday := time.Now().AddDate(0, 0, -1)
|
||||||
|
|||||||
@@ -269,6 +269,7 @@ func registerAdminRoutes(e *echo.Echo) {
|
|||||||
authed.GET("/dashboard/asset-trend", admin.Ctrl.AssetTrend)
|
authed.GET("/dashboard/asset-trend", admin.Ctrl.AssetTrend)
|
||||||
authed.GET("/dashboard/revenue-trend", admin.Ctrl.RevenueTrend)
|
authed.GET("/dashboard/revenue-trend", admin.Ctrl.RevenueTrend)
|
||||||
authed.GET("/dashboard/order-stats", admin.Ctrl.OrderStats)
|
authed.GET("/dashboard/order-stats", admin.Ctrl.OrderStats)
|
||||||
|
authed.GET("/dashboard/rpc-stats", admin.Ctrl.RpcStats)
|
||||||
authed.GET("/dashboard/recent-orders", admin.Ctrl.RecentOrders)
|
authed.GET("/dashboard/recent-orders", admin.Ctrl.RecentOrders)
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ func setupTestEnv(t *testing.T) *echo.Echo {
|
|||||||
|
|
||||||
// reset the settings cache so stale entries from a prior test don't leak
|
// reset the settings cache so stale entries from a prior test don't leak
|
||||||
_ = data.ReloadSettings()
|
_ = data.ReloadSettings()
|
||||||
|
data.ResetRpcRuntimeStatsForTest()
|
||||||
config.SettingsGetString = func(key string) string {
|
config.SettingsGetString = func(key string) string {
|
||||||
return data.GetSettingString(key, "")
|
return data.GetSettingString(key, "")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ func runBscListener(contracts []common.Address) {
|
|||||||
Topics: [][]common.Hash{},
|
Topics: [][]common.Hash{},
|
||||||
}
|
}
|
||||||
|
|
||||||
runEvmWsLogListener(ctx, "[BSC-WS]", wsNode, query, func(client *ethclient.Client, vLog types.Log) {
|
runEvmWsLogListener(ctx, mdb.NetworkBsc, "[BSC-WS]", wsNode, query, func(client *ethclient.Client, vLog types.Log) {
|
||||||
if len(vLog.Topics) < 3 {
|
if len(vLog.Topics) < 3 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -98,9 +98,11 @@ func runBscListener(contracts []common.Address) {
|
|||||||
var blockTsMs int64
|
var blockTsMs int64
|
||||||
header, err := client.HeaderByNumber(context.Background(), big.NewInt(int64(vLog.BlockNumber)))
|
header, err := client.HeaderByNumber(context.Background(), big.NewInt(int64(vLog.BlockNumber)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
data.RecordRpcFailure(mdb.NetworkBsc)
|
||||||
log.Sugar.Warnf("[BSC-WS] HeaderByNumber block=%d: %v, using local time", vLog.BlockNumber, err)
|
log.Sugar.Warnf("[BSC-WS] HeaderByNumber block=%d: %v, using local time", vLog.BlockNumber, err)
|
||||||
blockTsMs = time.Now().UnixMilli()
|
blockTsMs = time.Now().UnixMilli()
|
||||||
} else {
|
} else {
|
||||||
|
data.RecordRpcSuccess(mdb.NetworkBsc)
|
||||||
blockTsMs = int64(header.Time) * 1000
|
blockTsMs = int64(header.Time) * 1000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,23 @@
|
|||||||
package task
|
package task
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math/big"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/GMWalletApp/epusdt/internal/testutil"
|
"github.com/GMWalletApp/epusdt/internal/testutil"
|
||||||
"github.com/GMWalletApp/epusdt/model/dao"
|
"github.com/GMWalletApp/epusdt/model/dao"
|
||||||
"github.com/GMWalletApp/epusdt/model/data"
|
"github.com/GMWalletApp/epusdt/model/data"
|
||||||
"github.com/GMWalletApp/epusdt/model/mdb"
|
"github.com/GMWalletApp/epusdt/model/mdb"
|
||||||
|
epLog "github.com/GMWalletApp/epusdt/util/log"
|
||||||
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
epLog.Sugar = zap.NewNop().Sugar()
|
||||||
|
}
|
||||||
|
|
||||||
func TestResolveChainWsURLRequiresEnabledRpcNode(t *testing.T) {
|
func TestResolveChainWsURLRequiresEnabledRpcNode(t *testing.T) {
|
||||||
cleanup := testutil.SetupTestDatabases(t)
|
cleanup := testutil.SetupTestDatabases(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
@@ -116,6 +125,70 @@ func TestResolveChainWsNodeSkipsCoolingNode(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEvmWsNodeFailureRecordsRuntimeStats(t *testing.T) {
|
||||||
|
data.ResetRpcFailoverForTest()
|
||||||
|
data.ResetRpcRuntimeStatsForTest()
|
||||||
|
t.Cleanup(data.ResetRpcFailoverForTest)
|
||||||
|
t.Cleanup(data.ResetRpcRuntimeStatsForTest)
|
||||||
|
|
||||||
|
recordEvmWsNodeFailure("[TEST]", mdb.NetworkEthereum, mdb.RpcNode{
|
||||||
|
BaseModel: mdb.BaseModel{ID: 123},
|
||||||
|
Url: "wss://ethereum.example.com",
|
||||||
|
Type: mdb.RpcNodeTypeWs,
|
||||||
|
}, "dial")
|
||||||
|
|
||||||
|
stats := data.SnapshotRpcRuntimeStats()
|
||||||
|
eth := stats[mdb.NetworkEthereum]
|
||||||
|
if eth.SuccessCount != 0 {
|
||||||
|
t.Fatalf("ethereum success_count = %d, want 0", eth.SuccessCount)
|
||||||
|
}
|
||||||
|
if eth.FailureCount != 1 {
|
||||||
|
t.Fatalf("ethereum failure_count = %d, want 1", eth.FailureCount)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEvmLogBlockHeightRecordsRuntimeHeight(t *testing.T) {
|
||||||
|
data.ResetRpcRuntimeStatsForTest()
|
||||||
|
t.Cleanup(data.ResetRpcRuntimeStatsForTest)
|
||||||
|
|
||||||
|
recordEvmLogBlockHeight(mdb.NetworkEthereum, "[TEST]", 123456)
|
||||||
|
recordEvmLogBlockHeight(mdb.NetworkEthereum, "[TEST]", 123455)
|
||||||
|
|
||||||
|
stats := data.SnapshotRpcRuntimeStats()
|
||||||
|
eth := stats[mdb.NetworkEthereum]
|
||||||
|
if eth.LatestBlockHeight != 123456 {
|
||||||
|
t.Fatalf("ethereum latest_block_height = %d, want 123456", eth.LatestBlockHeight)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEvmHeaderBlockHeightRecordsRuntimeHeight(t *testing.T) {
|
||||||
|
data.ResetRpcRuntimeStatsForTest()
|
||||||
|
t.Cleanup(data.ResetRpcRuntimeStatsForTest)
|
||||||
|
|
||||||
|
recordEvmHeaderBlockHeight(mdb.NetworkPolygon, "[TEST]", &types.Header{Number: big.NewInt(7654321)})
|
||||||
|
recordEvmHeaderBlockHeight(mdb.NetworkPolygon, "[TEST]", &types.Header{Number: big.NewInt(7654320)})
|
||||||
|
|
||||||
|
stats := data.SnapshotRpcRuntimeStats()
|
||||||
|
polygon := stats[mdb.NetworkPolygon]
|
||||||
|
if polygon.LatestBlockHeight != 7654321 {
|
||||||
|
t.Fatalf("polygon latest_block_height = %d, want 7654321", polygon.LatestBlockHeight)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestShouldRefreshEvmLatestHeaderAfterIdleInterval(t *testing.T) {
|
||||||
|
lastUpdate := time.Now()
|
||||||
|
|
||||||
|
if shouldRefreshEvmLatestHeader(lastUpdate, false, lastUpdate.Add(evmStatsIdleInterval-time.Second)) {
|
||||||
|
t.Fatal("should not refresh latest header before idle interval")
|
||||||
|
}
|
||||||
|
if !shouldRefreshEvmLatestHeader(lastUpdate, false, lastUpdate.Add(evmStatsIdleInterval)) {
|
||||||
|
t.Fatal("should refresh latest header at idle interval")
|
||||||
|
}
|
||||||
|
if shouldRefreshEvmLatestHeader(lastUpdate, true, lastUpdate.Add(evmStatsIdleInterval+time.Second)) {
|
||||||
|
t.Fatal("should not refresh latest header while request is in flight")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestResolveChainWsURLDisabledRow(t *testing.T) {
|
func TestResolveChainWsURLDisabledRow(t *testing.T) {
|
||||||
cleanup := testutil.SetupTestDatabases(t)
|
cleanup := testutil.SetupTestDatabases(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ func runEthereumListener(contracts []common.Address) {
|
|||||||
Topics: [][]common.Hash{},
|
Topics: [][]common.Hash{},
|
||||||
}
|
}
|
||||||
|
|
||||||
runEvmWsLogListener(ctx, "[ETH-WS]", wsNode, query, func(client *ethclient.Client, vLog types.Log) {
|
runEvmWsLogListener(ctx, mdb.NetworkEthereum, "[ETH-WS]", wsNode, query, func(client *ethclient.Client, vLog types.Log) {
|
||||||
if len(vLog.Topics) < 3 {
|
if len(vLog.Topics) < 3 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -100,9 +100,11 @@ func runEthereumListener(contracts []common.Address) {
|
|||||||
var blockTsMs int64
|
var blockTsMs int64
|
||||||
header, err := client.HeaderByNumber(context.Background(), big.NewInt(int64(vLog.BlockNumber)))
|
header, err := client.HeaderByNumber(context.Background(), big.NewInt(int64(vLog.BlockNumber)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
data.RecordRpcFailure(mdb.NetworkEthereum)
|
||||||
log.Sugar.Warnf("[ETH-WS] HeaderByNumber block=%d: %v, using local time", vLog.BlockNumber, err)
|
log.Sugar.Warnf("[ETH-WS] HeaderByNumber block=%d: %v, using local time", vLog.BlockNumber, err)
|
||||||
blockTsMs = time.Now().UnixMilli()
|
blockTsMs = time.Now().UnixMilli()
|
||||||
} else {
|
} else {
|
||||||
|
data.RecordRpcSuccess(mdb.NetworkEthereum)
|
||||||
blockTsMs = int64(header.Time) * 1000
|
blockTsMs = int64(header.Time) * 1000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,12 +14,17 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/ethclient"
|
"github.com/ethereum/go-ethereum/ethclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
evmStatsIdleInterval = 30 * time.Second
|
||||||
|
evmStatsHeaderTimeout = 10 * time.Second
|
||||||
|
)
|
||||||
|
|
||||||
// runEvmWsLogListener connects to node.Url, subscribes to Transfer logs,
|
// runEvmWsLogListener connects to node.Url, subscribes to Transfer logs,
|
||||||
// and dispatches each log to handleLog. It retries on transient errors
|
// and dispatches each log to handleLog. It retries on transient errors
|
||||||
// with exponential backoff until the node reaches the failure threshold.
|
// with exponential backoff until the node reaches the failure threshold.
|
||||||
// The ctx lets the caller trigger a clean exit — e.g. when admin disables
|
// 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.
|
// the chain, the caller cancels the context and the function returns.
|
||||||
func runEvmWsLogListener(ctx context.Context, logPrefix string, node mdb.RpcNode, query ethereum.FilterQuery, handleLog func(*ethclient.Client, types.Log)) {
|
func runEvmWsLogListener(ctx context.Context, network string, logPrefix string, node mdb.RpcNode, query ethereum.FilterQuery, handleLog func(*ethclient.Client, types.Log)) {
|
||||||
const (
|
const (
|
||||||
minBackoff = 2 * time.Second
|
minBackoff = 2 * time.Second
|
||||||
maxBackoff = 60 * time.Second
|
maxBackoff = 60 * time.Second
|
||||||
@@ -37,8 +42,11 @@ func runEvmWsLogListener(ctx context.Context, logPrefix string, node mdb.RpcNode
|
|||||||
|
|
||||||
client, err := ethclient.Dial(wsURL)
|
client, err := ethclient.Dial(wsURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if ctx.Err() != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
log.Sugar.Warnf("%s dial: %v, retry in %s", logPrefix, err, failWait)
|
log.Sugar.Warnf("%s dial: %v, retry in %s", logPrefix, err, failWait)
|
||||||
if recordEvmWsNodeFailure(logPrefix, node, "dial") {
|
if recordEvmWsNodeFailure(logPrefix, network, node, "dial") {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !sleepOrDone(ctx, failWait) {
|
if !sleepOrDone(ctx, failWait) {
|
||||||
@@ -52,8 +60,11 @@ func runEvmWsLogListener(ctx context.Context, logPrefix string, node mdb.RpcNode
|
|||||||
sub, err := client.SubscribeFilterLogs(ctx, query, logsCh)
|
sub, err := client.SubscribeFilterLogs(ctx, query, logsCh)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
client.Close()
|
client.Close()
|
||||||
|
if ctx.Err() != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
log.Sugar.Warnf("%s subscribe: %v, retry in %s", logPrefix, err, failWait)
|
log.Sugar.Warnf("%s subscribe: %v, retry in %s", logPrefix, err, failWait)
|
||||||
if recordEvmWsNodeFailure(logPrefix, node, "subscribe") {
|
if recordEvmWsNodeFailure(logPrefix, network, node, "subscribe") {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !sleepOrDone(ctx, failWait) {
|
if !sleepOrDone(ctx, failWait) {
|
||||||
@@ -63,18 +74,22 @@ func runEvmWsLogListener(ctx context.Context, logPrefix string, node mdb.RpcNode
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
failWait = minBackoff
|
failWait = minBackoff
|
||||||
|
data.RecordRpcSuccess(network)
|
||||||
|
|
||||||
log.Sugar.Infof("%s connected, subscribed to Transfer logs using WSS node %s", logPrefix, nodeLabel)
|
log.Sugar.Infof("%s connected, subscribed to Transfer logs using WSS node %s", logPrefix, nodeLabel)
|
||||||
|
|
||||||
connectedAt := time.Now()
|
connectedAt := time.Now()
|
||||||
recvErr := recvLoop(ctx, client, sub, logsCh, logPrefix, handleLog)
|
recvErr := recvLoop(ctx, client, sub, logsCh, network, logPrefix, handleLog)
|
||||||
|
|
||||||
if ctx.Err() != nil {
|
if ctx.Err() != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if time.Since(connectedAt) >= stableResetAfter {
|
if time.Since(connectedAt) >= stableResetAfter {
|
||||||
|
if recvErr != nil {
|
||||||
|
data.RecordRpcFailure(network)
|
||||||
|
}
|
||||||
data.RecordRpcNodeSuccess(node.ID)
|
data.RecordRpcNodeSuccess(node.ID)
|
||||||
} else if recvErr != nil && recordEvmWsNodeFailure(logPrefix, node, recvErr.Error()) {
|
} else if recvErr != nil && recordEvmWsNodeFailure(logPrefix, network, node, recvErr.Error()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !sleepOrDone(ctx, rejoinWait) {
|
if !sleepOrDone(ctx, rejoinWait) {
|
||||||
@@ -83,8 +98,25 @@ func runEvmWsLogListener(ctx context.Context, logPrefix string, node mdb.RpcNode
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func recvLoop(ctx context.Context, client *ethclient.Client, sub ethereum.Subscription, logsCh <-chan types.Log, logPrefix string, handleLog func(*ethclient.Client, types.Log)) error {
|
func recvLoop(ctx context.Context, client *ethclient.Client, sub ethereum.Subscription, logsCh <-chan types.Log, network string, logPrefix string, handleLog func(*ethclient.Client, types.Log)) error {
|
||||||
|
statsCtx, cancelStats := context.WithCancel(ctx)
|
||||||
|
statsTicker := time.NewTicker(evmStatsIdleInterval)
|
||||||
|
headerStatsDone := make(chan bool, 1)
|
||||||
|
lastStatsUpdateAt := time.Now()
|
||||||
|
headerStatsInFlight := false
|
||||||
|
requestLatestHeader := func() {
|
||||||
|
if headerStatsInFlight {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
headerStatsInFlight = true
|
||||||
|
go func() {
|
||||||
|
headerStatsDone <- recordEvmLatestHeader(statsCtx, network, logPrefix, client)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
|
cancelStats()
|
||||||
|
statsTicker.Stop()
|
||||||
sub.Unsubscribe()
|
sub.Unsubscribe()
|
||||||
client.Close()
|
client.Close()
|
||||||
}()
|
}()
|
||||||
@@ -94,6 +126,15 @@ func recvLoop(ctx context.Context, client *ethclient.Client, sub ethereum.Subscr
|
|||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
log.Sugar.Infof("%s context cancelled, stopping", logPrefix)
|
log.Sugar.Infof("%s context cancelled, stopping", logPrefix)
|
||||||
return nil
|
return nil
|
||||||
|
case <-statsTicker.C:
|
||||||
|
if shouldRefreshEvmLatestHeader(lastStatsUpdateAt, headerStatsInFlight, time.Now()) {
|
||||||
|
requestLatestHeader()
|
||||||
|
}
|
||||||
|
case updated := <-headerStatsDone:
|
||||||
|
headerStatsInFlight = false
|
||||||
|
if updated {
|
||||||
|
lastStatsUpdateAt = time.Now()
|
||||||
|
}
|
||||||
case err := <-sub.Err():
|
case err := <-sub.Err():
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Sugar.Warnf("%s subscription error: %v, reconnecting", logPrefix, err)
|
log.Sugar.Warnf("%s subscription error: %v, reconnecting", logPrefix, err)
|
||||||
@@ -107,12 +148,61 @@ func recvLoop(ctx context.Context, client *ethclient.Client, sub ethereum.Subscr
|
|||||||
log.Sugar.Warnf("%s log channel closed, reconnecting", logPrefix)
|
log.Sugar.Warnf("%s log channel closed, reconnecting", logPrefix)
|
||||||
return fmt.Errorf("log channel closed")
|
return fmt.Errorf("log channel closed")
|
||||||
}
|
}
|
||||||
|
if recordEvmLogBlockHeight(network, logPrefix, vLog.BlockNumber) {
|
||||||
|
lastStatsUpdateAt = time.Now()
|
||||||
|
}
|
||||||
handleLog(client, vLog)
|
handleLog(client, vLog)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func recordEvmWsNodeFailure(logPrefix string, node mdb.RpcNode, reason string) bool {
|
func shouldRefreshEvmLatestHeader(lastStatsUpdateAt time.Time, inFlight bool, now time.Time) bool {
|
||||||
|
return !inFlight && now.Sub(lastStatsUpdateAt) >= evmStatsIdleInterval
|
||||||
|
}
|
||||||
|
|
||||||
|
func recordEvmLogBlockHeight(network string, logPrefix string, blockNumber uint64) bool {
|
||||||
|
if blockNumber == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if blockNumber > uint64(1<<63-1) {
|
||||||
|
log.Sugar.Warnf("%s log block number exceeds int64 range: %d", logPrefix, blockNumber)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
data.RecordRpcBlockHeight(network, int64(blockNumber))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func recordEvmLatestHeader(ctx context.Context, network string, logPrefix string, client *ethclient.Client) bool {
|
||||||
|
headerCtx, cancel := context.WithTimeout(ctx, evmStatsHeaderTimeout)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
header, err := client.HeaderByNumber(headerCtx, nil)
|
||||||
|
if err != nil {
|
||||||
|
if ctx.Err() != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
data.RecordRpcFailure(network)
|
||||||
|
log.Sugar.Warnf("%s latest header stats failed: %v", logPrefix, err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
data.RecordRpcSuccess(network)
|
||||||
|
return recordEvmHeaderBlockHeight(network, logPrefix, header)
|
||||||
|
}
|
||||||
|
|
||||||
|
func recordEvmHeaderBlockHeight(network string, logPrefix string, header *types.Header) bool {
|
||||||
|
if header == nil || header.Number == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !header.Number.IsInt64() {
|
||||||
|
log.Sugar.Warnf("%s latest header block number exceeds int64 range: %s", logPrefix, header.Number.String())
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
data.RecordRpcBlockHeight(network, header.Number.Int64())
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func recordEvmWsNodeFailure(logPrefix string, network string, node mdb.RpcNode, reason string) bool {
|
||||||
|
data.RecordRpcFailure(network)
|
||||||
failures, cooling := data.RecordRpcNodeFailure(node.ID)
|
failures, cooling := data.RecordRpcNodeFailure(node.ID)
|
||||||
nodeLabel := data.RpcNodeLogLabel(node)
|
nodeLabel := data.RpcNodeLogLabel(node)
|
||||||
if !cooling {
|
if !cooling {
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ func runPlasmaListener(contracts []common.Address) {
|
|||||||
Topics: [][]common.Hash{},
|
Topics: [][]common.Hash{},
|
||||||
}
|
}
|
||||||
|
|
||||||
runEvmWsLogListener(ctx, "[PLASMA-WS]", wsNode, query, func(client *ethclient.Client, vLog types.Log) {
|
runEvmWsLogListener(ctx, mdb.NetworkPlasma, "[PLASMA-WS]", wsNode, query, func(client *ethclient.Client, vLog types.Log) {
|
||||||
if len(vLog.Topics) < 3 {
|
if len(vLog.Topics) < 3 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -97,9 +97,11 @@ func runPlasmaListener(contracts []common.Address) {
|
|||||||
var blockTsMs int64
|
var blockTsMs int64
|
||||||
header, err := client.HeaderByNumber(context.Background(), big.NewInt(int64(vLog.BlockNumber)))
|
header, err := client.HeaderByNumber(context.Background(), big.NewInt(int64(vLog.BlockNumber)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
data.RecordRpcFailure(mdb.NetworkPlasma)
|
||||||
log.Sugar.Warnf("[PLASMA-WS] HeaderByNumber block=%d: %v, using local time", vLog.BlockNumber, err)
|
log.Sugar.Warnf("[PLASMA-WS] HeaderByNumber block=%d: %v, using local time", vLog.BlockNumber, err)
|
||||||
blockTsMs = time.Now().UnixMilli()
|
blockTsMs = time.Now().UnixMilli()
|
||||||
} else {
|
} else {
|
||||||
|
data.RecordRpcSuccess(mdb.NetworkPlasma)
|
||||||
blockTsMs = int64(header.Time) * 1000
|
blockTsMs = int64(header.Time) * 1000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ func runPolygonListener(contracts []common.Address) {
|
|||||||
Topics: [][]common.Hash{},
|
Topics: [][]common.Hash{},
|
||||||
}
|
}
|
||||||
|
|
||||||
runEvmWsLogListener(ctx, "[POLYGON-WS]", wsNode, query, func(client *ethclient.Client, vLog types.Log) {
|
runEvmWsLogListener(ctx, mdb.NetworkPolygon, "[POLYGON-WS]", wsNode, query, func(client *ethclient.Client, vLog types.Log) {
|
||||||
if len(vLog.Topics) < 3 {
|
if len(vLog.Topics) < 3 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -97,9 +97,11 @@ func runPolygonListener(contracts []common.Address) {
|
|||||||
var blockTsMs int64
|
var blockTsMs int64
|
||||||
header, err := client.HeaderByNumber(context.Background(), big.NewInt(int64(vLog.BlockNumber)))
|
header, err := client.HeaderByNumber(context.Background(), big.NewInt(int64(vLog.BlockNumber)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
data.RecordRpcFailure(mdb.NetworkPolygon)
|
||||||
log.Sugar.Warnf("[POLYGON-WS] HeaderByNumber block=%d: %v, using local time", vLog.BlockNumber, err)
|
log.Sugar.Warnf("[POLYGON-WS] HeaderByNumber block=%d: %v, using local time", vLog.BlockNumber, err)
|
||||||
blockTsMs = time.Now().UnixMilli()
|
blockTsMs = time.Now().UnixMilli()
|
||||||
} else {
|
} else {
|
||||||
|
data.RecordRpcSuccess(mdb.NetworkPolygon)
|
||||||
blockTsMs = int64(header.Time) * 1000
|
blockTsMs = int64(header.Time) * 1000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+52
-24
@@ -12,31 +12,59 @@ import (
|
|||||||
type ListenSolJob struct{}
|
type ListenSolJob struct{}
|
||||||
|
|
||||||
var gListenSolJobLock sync.Mutex
|
var gListenSolJobLock sync.Mutex
|
||||||
|
var gSolanaBlockHeightLock = make(chan struct{}, 1)
|
||||||
|
|
||||||
func (r ListenSolJob) Run() {
|
func (r ListenSolJob) Run() {
|
||||||
gListenSolJobLock.Lock()
|
shouldRecordHeight := false
|
||||||
defer gListenSolJobLock.Unlock()
|
func() {
|
||||||
log.Sugar.Debug("[ListenSolJob] Job triggered")
|
gListenSolJobLock.Lock()
|
||||||
if !data.IsChainEnabled(mdb.NetworkSolana) {
|
defer gListenSolJobLock.Unlock()
|
||||||
log.Sugar.Debug("[ListenSolJob] chain disabled, skipping")
|
|
||||||
return
|
log.Sugar.Debug("[ListenSolJob] Job triggered")
|
||||||
|
if !data.IsChainEnabled(mdb.NetworkSolana) {
|
||||||
|
log.Sugar.Debug("[ListenSolJob] chain disabled, skipping")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
shouldRecordHeight = true
|
||||||
|
|
||||||
|
walletAddress, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkSolana)
|
||||||
|
if err != nil {
|
||||||
|
log.Sugar.Errorf("[ListenSolJob] Failed to get wallet addresses: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(walletAddress) <= 0 {
|
||||||
|
log.Sugar.Debug("[ListenSolJob] No available wallet addresses")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Sugar.Infof("[ListenSolJob] Found %d wallet addresses to monitor", len(walletAddress))
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
for _, address := range walletAddress {
|
||||||
|
log.Sugar.Infof("[ListenSolJob] Listening to address: %s", address.Address)
|
||||||
|
wg.Add(1)
|
||||||
|
go service.SolCallBack(address.Address, &wg)
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
log.Sugar.Debug("[ListenSolJob] Job completed")
|
||||||
|
}()
|
||||||
|
|
||||||
|
if shouldRecordHeight {
|
||||||
|
recordSolanaLatestBlockHeight()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func recordSolanaLatestBlockHeight() {
|
||||||
|
select {
|
||||||
|
case gSolanaBlockHeightLock <- struct{}{}:
|
||||||
|
defer func() { <-gSolanaBlockHeightLock }()
|
||||||
|
default:
|
||||||
|
log.Sugar.Debug("[ListenSolJob] previous Solana block height stats still running, skipping")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
height, err := service.SolGetBlockHeight()
|
||||||
|
if err != nil {
|
||||||
|
log.Sugar.Warnf("[ListenSolJob] get Solana block height failed: %v", err)
|
||||||
|
} else {
|
||||||
|
data.RecordRpcBlockHeight(mdb.NetworkSolana, height)
|
||||||
}
|
}
|
||||||
walletAddress, err := data.GetAvailableWalletAddressByNetwork(mdb.NetworkSolana)
|
|
||||||
if err != nil {
|
|
||||||
log.Sugar.Errorf("[ListenSolJob] Failed to get wallet addresses: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(walletAddress) <= 0 {
|
|
||||||
log.Sugar.Debug("[ListenSolJob] No available wallet addresses")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
log.Sugar.Infof("[ListenSolJob] Found %d wallet addresses to monitor", len(walletAddress))
|
|
||||||
var wg sync.WaitGroup
|
|
||||||
for _, address := range walletAddress {
|
|
||||||
log.Sugar.Infof("[ListenSolJob] Listening to address: %s", address.Address)
|
|
||||||
wg.Add(1)
|
|
||||||
go service.SolCallBack(address.Address, &wg)
|
|
||||||
}
|
|
||||||
wg.Wait()
|
|
||||||
log.Sugar.Debug("[ListenSolJob] Job completed")
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,124 @@
|
|||||||
|
package task
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/GMWalletApp/epusdt/internal/testutil"
|
||||||
|
"github.com/GMWalletApp/epusdt/model/dao"
|
||||||
|
"github.com/GMWalletApp/epusdt/model/data"
|
||||||
|
"github.com/GMWalletApp/epusdt/model/mdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestListenSolJobRecordsRuntimeBlockHeight(t *testing.T) {
|
||||||
|
cleanup := testutil.SetupTestDatabases(t)
|
||||||
|
defer cleanup()
|
||||||
|
data.ResetRpcRuntimeStatsForTest()
|
||||||
|
t.Cleanup(data.ResetRpcRuntimeStatsForTest)
|
||||||
|
|
||||||
|
methodCalls := make(map[string]int)
|
||||||
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var req struct {
|
||||||
|
Method string `json:"method"`
|
||||||
|
}
|
||||||
|
_ = json.NewDecoder(r.Body).Decode(&req)
|
||||||
|
methodCalls[req.Method]++
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
if req.Method == "getBlockHeight" {
|
||||||
|
_ = json.NewEncoder(w).Encode(map[string]interface{}{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": 1,
|
||||||
|
"result": int64(654321),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = json.NewEncoder(w).Encode(map[string]interface{}{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": 1,
|
||||||
|
"result": []map[string]interface{}{
|
||||||
|
{
|
||||||
|
"signature": "solana-test-signature",
|
||||||
|
"slot": uint64(123456),
|
||||||
|
"err": map[string]interface{}{
|
||||||
|
"InstructionError": []interface{}{0, "Custom"},
|
||||||
|
},
|
||||||
|
"blockTime": nil,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}))
|
||||||
|
defer server.Close()
|
||||||
|
|
||||||
|
if err := dao.Mdb.Create(&mdb.RpcNode{
|
||||||
|
Network: mdb.NetworkSolana,
|
||||||
|
Url: server.URL,
|
||||||
|
Type: mdb.RpcNodeTypeHttp,
|
||||||
|
Weight: 1,
|
||||||
|
Enabled: true,
|
||||||
|
Purpose: mdb.RpcNodePurposeGeneral,
|
||||||
|
Status: mdb.RpcNodeStatusOk,
|
||||||
|
}).Error; err != nil {
|
||||||
|
t.Fatalf("seed solana rpc_node: %v", err)
|
||||||
|
}
|
||||||
|
if err := dao.Mdb.Create(&mdb.WalletAddress{
|
||||||
|
Network: mdb.NetworkSolana,
|
||||||
|
Address: "SolTestAddress001",
|
||||||
|
Status: mdb.TokenStatusEnable,
|
||||||
|
}).Error; err != nil {
|
||||||
|
t.Fatalf("seed solana wallet: %v", err)
|
||||||
|
}
|
||||||
|
if err := dao.Mdb.Create(&mdb.ChainToken{
|
||||||
|
Network: mdb.NetworkSolana,
|
||||||
|
Symbol: "SOL",
|
||||||
|
ContractAddress: "",
|
||||||
|
Decimals: 9,
|
||||||
|
Enabled: true,
|
||||||
|
}).Error; err != nil {
|
||||||
|
t.Fatalf("seed solana chain_token: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
ListenSolJob{}.Run()
|
||||||
|
|
||||||
|
if methodCalls["getSignaturesForAddress"] != 1 {
|
||||||
|
t.Fatalf("getSignaturesForAddress calls = %d, want 1", methodCalls["getSignaturesForAddress"])
|
||||||
|
}
|
||||||
|
if methodCalls["getBlockHeight"] != 1 {
|
||||||
|
t.Fatalf("getBlockHeight calls = %d, want 1", methodCalls["getBlockHeight"])
|
||||||
|
}
|
||||||
|
|
||||||
|
stats := data.SnapshotRpcRuntimeStats()
|
||||||
|
solana := stats[mdb.NetworkSolana]
|
||||||
|
if solana.SuccessCount != 2 {
|
||||||
|
t.Fatalf("solana success_count = %d, want 2", solana.SuccessCount)
|
||||||
|
}
|
||||||
|
if solana.FailureCount != 0 {
|
||||||
|
t.Fatalf("solana failure_count = %d, want 0", solana.FailureCount)
|
||||||
|
}
|
||||||
|
if solana.LatestBlockHeight != 654321 {
|
||||||
|
t.Fatalf("solana latest_block_height = %d, want 654321", solana.LatestBlockHeight)
|
||||||
|
}
|
||||||
|
if solana.LastSyncAt.IsZero() {
|
||||||
|
t.Fatal("solana last_sync_at is zero")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRecordSolanaLatestBlockHeightSkipsWhenPreviousStatsRunning(t *testing.T) {
|
||||||
|
cleanup := testutil.SetupTestDatabases(t)
|
||||||
|
defer cleanup()
|
||||||
|
data.ResetRpcRuntimeStatsForTest()
|
||||||
|
t.Cleanup(data.ResetRpcRuntimeStatsForTest)
|
||||||
|
|
||||||
|
gSolanaBlockHeightLock <- struct{}{}
|
||||||
|
defer func() { <-gSolanaBlockHeightLock }()
|
||||||
|
|
||||||
|
recordSolanaLatestBlockHeight()
|
||||||
|
|
||||||
|
stats := data.SnapshotRpcRuntimeStats()
|
||||||
|
if _, ok := stats[mdb.NetworkSolana]; ok {
|
||||||
|
t.Fatalf("solana stats = %#v, want no stats when height reporter is already running", stats[mdb.NetworkSolana])
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -167,19 +167,32 @@ func doPost(url string, apiKey string, body interface{}) ([]byte, error) {
|
|||||||
func GetNowBlock(baseURL string, apiKey string) (*Block, error) {
|
func GetNowBlock(baseURL string, apiKey string) (*Block, error) {
|
||||||
b, err := doPost(baseURL+"/wallet/getnowblock", apiKey, map[string]interface{}{})
|
b, err := doPost(baseURL+"/wallet/getnowblock", apiKey, map[string]interface{}{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
data.RecordRpcFailure(mdb.NetworkTron)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var block Block
|
var block Block
|
||||||
return &block, json.Unmarshal(b, &block)
|
if err := json.Unmarshal(b, &block); err != nil {
|
||||||
|
data.RecordRpcFailure(mdb.NetworkTron)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
data.RecordRpcSuccess(mdb.NetworkTron)
|
||||||
|
data.RecordRpcBlockHeight(mdb.NetworkTron, block.BlockHeader.RawData.Number)
|
||||||
|
return &block, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetBlockByNum(baseURL string, apiKey string, num int64) (*Block, error) {
|
func GetBlockByNum(baseURL string, apiKey string, num int64) (*Block, error) {
|
||||||
b, err := doPost(baseURL+"/wallet/getblockbynum", apiKey, map[string]interface{}{"num": num})
|
b, err := doPost(baseURL+"/wallet/getblockbynum", apiKey, map[string]interface{}{"num": num})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
data.RecordRpcFailure(mdb.NetworkTron)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var block Block
|
var block Block
|
||||||
return &block, json.Unmarshal(b, &block)
|
if err := json.Unmarshal(b, &block); err != nil {
|
||||||
|
data.RecordRpcFailure(mdb.NetworkTron)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
data.RecordRpcSuccess(mdb.NetworkTron)
|
||||||
|
return &block, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadTronTRC20TokenMap() map[string]mdb.ChainToken {
|
func loadTronTRC20TokenMap() map[string]mdb.ChainToken {
|
||||||
|
|||||||
@@ -110,3 +110,67 @@ func TestTronScannerStopsOnHistoricalBlockFetchError(t *testing.T) {
|
|||||||
t.Fatalf("lastBlock = %d, want 1 so failed block is retried", scanner.lastBlock)
|
t.Fatalf("lastBlock = %d, want 1 so failed block is retried", scanner.lastBlock)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTronRPCRecordsRuntimeStats(t *testing.T) {
|
||||||
|
data.ResetRpcRuntimeStatsForTest()
|
||||||
|
t.Cleanup(data.ResetRpcRuntimeStatsForTest)
|
||||||
|
|
||||||
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
switch r.URL.Path {
|
||||||
|
case "/wallet/getnowblock":
|
||||||
|
_ = json.NewEncoder(w).Encode(map[string]interface{}{
|
||||||
|
"block_header": map[string]interface{}{
|
||||||
|
"raw_data": map[string]interface{}{
|
||||||
|
"number": 10,
|
||||||
|
"timestamp": int64(1000),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"transactions": []interface{}{},
|
||||||
|
})
|
||||||
|
case "/wallet/getblockbynum":
|
||||||
|
_ = json.NewEncoder(w).Encode(map[string]interface{}{
|
||||||
|
"block_header": map[string]interface{}{
|
||||||
|
"raw_data": map[string]interface{}{
|
||||||
|
"number": 9,
|
||||||
|
"timestamp": int64(1000),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"transactions": []interface{}{},
|
||||||
|
})
|
||||||
|
default:
|
||||||
|
http.NotFound(w, r)
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
defer server.Close()
|
||||||
|
|
||||||
|
if _, err := GetNowBlock(server.URL, ""); err != nil {
|
||||||
|
t.Fatalf("GetNowBlock(): %v", err)
|
||||||
|
}
|
||||||
|
if _, err := GetBlockByNum(server.URL, "", 9); err != nil {
|
||||||
|
t.Fatalf("GetBlockByNum(): %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
failing := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
http.Error(w, "temporary", http.StatusBadGateway)
|
||||||
|
}))
|
||||||
|
defer failing.Close()
|
||||||
|
if _, err := GetBlockByNum(failing.URL, "", 8); err == nil {
|
||||||
|
t.Fatal("GetBlockByNum() error = nil, want failure")
|
||||||
|
}
|
||||||
|
|
||||||
|
stats := data.SnapshotRpcRuntimeStats()
|
||||||
|
tron := stats[mdb.NetworkTron]
|
||||||
|
if tron.SuccessCount != 2 {
|
||||||
|
t.Fatalf("tron success_count = %d, want 2", tron.SuccessCount)
|
||||||
|
}
|
||||||
|
if tron.FailureCount != 1 {
|
||||||
|
t.Fatalf("tron failure_count = %d, want 1", tron.FailureCount)
|
||||||
|
}
|
||||||
|
if tron.LatestBlockHeight != 10 {
|
||||||
|
t.Fatalf("tron latest_block_height = %d, want 10", tron.LatestBlockHeight)
|
||||||
|
}
|
||||||
|
if tron.LastSyncAt.IsZero() {
|
||||||
|
t.Fatal("tron last_sync_at is zero")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
import{t as e}from"./unauthorized-error-Dobf70xk.js";var t=e;export{t as component};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{t as e}from"./unauthorized-error-Dv-DRB5e.js";var t=e;export{t as component};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{t as e}from"./forbidden-C53ESqXn.js";var t=e;export{t as component};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{t as e}from"./forbidden-CHYUR1RB.js";var t=e;export{t as component};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{t as e}from"./not-found-error-CrcHrNtf.js";var t=e;export{t as component};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{t as e}from"./not-found-error-AnL_Yh5s.js";var t=e;export{t as component};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{t as e}from"./general-error-B3tm7Ven.js";var t=e;export{t as component};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{t as e}from"./general-error-CkWgD-Kh.js";var t=e;export{t as component};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{t as e}from"./maintenance-error-CpldkShG.js";var t=e;export{t as component};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{t as e}from"./maintenance-error-aweE6mOQ.js";var t=e;export{t as component};
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";import{o as r,s as i,t as a}from"./useRouter-DtTm7XkK.js";import{t as o}from"./useStore-CupyIEEP.js";import{f as s}from"./ClientOnly-39EveoQU.js";import"./redirect-DMNGvjzO.js";import{a as c,i as l,r as u,s as d,t as f}from"./Match-D2hlI1L9.js";import{n as p}from"./matchContext-BFCdcHzo.js";import{t as m}from"./atom-DQpaPCwp.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=e(t(),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=n();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};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";import{o as r,s as i,t as a}from"./useRouter-DtTm7XkK.js";import{t as o}from"./useStore-CupyIEEP.js";import{f as s}from"./ClientOnly-CMPEj0pJ.js";import"./redirect-DMNGvjzO.js";import{a as c,i as l,r as u,s as d,t as f}from"./Match-9UShCljL.js";import{n as p}from"./matchContext-BFCdcHzo.js";import{t as m}from"./atom-DQpaPCwp.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=e(t(),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=n();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};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{dp as e}from"./messages-Bbvu5aaF.js";import{m as t}from"./search-provider-CMLTXja2.js";import{n,t as r}from"./theme-switch-g0D_A-ng.js";import{t as i}from"./general-error-B3tm7Ven.js";import{t as a}from"./not-found-error-CrcHrNtf.js";import{t as o}from"./_error-CBKE93YH.js";import{t as s}from"./unauthorized-error-Dobf70xk.js";import{t as c}from"./forbidden-C53ESqXn.js";import{t as l}from"./maintenance-error-aweE6mOQ.js";import{n as u,r as d,t as f}from"./header-Bfa1tMiw.js";var p=e();function m(){let{error:e}=o.useParams(),m={unauthorized:s,forbidden:c,"not-found":a,"internal-server-error":i,"maintenance-error":l}[e]||a;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)(n,{}),(0,p.jsx)(r,{}),(0,p.jsx)(t,{}),(0,p.jsx)(d,{})]})]}),(0,p.jsx)(`div`,{className:`flex-1 [&>div]:h-full`,children:(0,p.jsx)(m,{})})]})}export{m as component};
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_error-BUB-_p3M.js","assets/search-provider-CMLTXja2.js","assets/chunk-DECur_0Z.js","assets/dist-CRowTfGU.js","assets/dist-FGEIDBp-.js","assets/messages-Bbvu5aaF.js","assets/react-CO2uhaBc.js","assets/confirm-dialog-CIKVlzfB.js","assets/button-DlGFBuNZ.js","assets/clsx-D9aGYY3V.js","assets/dist-B_ALJuOq.js","assets/dist-Cy-xiyt7.js","assets/dist--ZhT0Dzg.js","assets/dist-BkAVwTGu.js","assets/es2015-b-3Ydtpy.js","assets/dist-BaRXEuYn.js","assets/dist-DI4dxjh-.js","assets/dist-BHsKknyh.js","assets/dist-DRkG7ylN.js","assets/dist-CLy3Z8cG.js","assets/dist-BixeH3nX.js","assets/dist-BYCFrz1s.js","assets/separator-CRhLMH2U.js","assets/tooltip-CXiEyuQR.js","assets/dist-l3nGCB93.js","assets/dist-mVZdxKLu.js","assets/auth-store-BnVIXJIp.js","assets/dist-0D92g85D.js","assets/with-selector-DBfssCrY.js","assets/cookies-BzZOQYPw.js","assets/useRouter-DtTm7XkK.js","assets/useNavigate-7u4DX0Ho.js","assets/useStore-CupyIEEP.js","assets/command-CAasmd2P.js","assets/createLucideIcon-Br0Bd5k2.js","assets/dialog-DCa0Wx6n.js","assets/skeleton-CPJRjth3.js","assets/wallet-GeyQ8E8l.js","assets/sun-BwqrnykR.js","assets/shield-check-CiWq1V4z.js","assets/logo-DB0DDsg6.js","assets/input-CJ09jXcS.js","assets/font-provider-CUqnfmoa.js","assets/theme-provider-l0tGtGY9.js","assets/theme-switch-g0D_A-ng.js","assets/dropdown-menu-Ci0ZDJlU.js","assets/check-DldThLle.js","assets/header-Bfa1tMiw.js","assets/link-BwMKq7lq.js","assets/ClientOnly-39EveoQU.js","assets/forbidden-C53ESqXn.js","assets/general-error-B3tm7Ven.js","assets/maintenance-error-aweE6mOQ.js","assets/not-found-error-CrcHrNtf.js","assets/unauthorized-error-Dobf70xk.js"])))=>i.map(i=>d[i]);
|
|
||||||
import{n as e,t}from"./lazyRouteComponent-D7-crJIH.js";import{t as n}from"./preload-helper-vQKTmgnp.js";var r=e(`/_authenticated/errors/$error`)({component:t(()=>n(()=>import(`./_error-BUB-_p3M.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54])),`component`)});export{r as t};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{Pp as e}from"./messages-d1hRBHLP.js";import{m as t}from"./search-provider-Zrg-SPXk.js";import{n,t as r}from"./theme-switch-DporjlJW.js";import{t as i}from"./general-error-CkWgD-Kh.js";import{t as a}from"./not-found-error-AnL_Yh5s.js";import{t as o}from"./_error-DqSF-qO2.js";import{t as s}from"./unauthorized-error-Dv-DRB5e.js";import{t as c}from"./forbidden-CHYUR1RB.js";import{t as l}from"./maintenance-error-CpldkShG.js";import{n as u,r as d,t as f}from"./header-BZlnQmen.js";var p=e();function m(){let{error:e}=o.useParams(),m={unauthorized:s,forbidden:c,"not-found":a,"internal-server-error":i,"maintenance-error":l}[e]||a;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)(n,{}),(0,p.jsx)(r,{}),(0,p.jsx)(t,{}),(0,p.jsx)(d,{})]})]}),(0,p.jsx)(`div`,{className:`flex-1 [&>div]:h-full`,children:(0,p.jsx)(m,{})})]})}export{m as component};
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_error-D4dSyXw0.js","assets/search-provider-Zrg-SPXk.js","assets/chunk-DECur_0Z.js","assets/dist-CRowTfGU.js","assets/dist-CIovDv3v.js","assets/messages-d1hRBHLP.js","assets/react-CO2uhaBc.js","assets/confirm-dialog-CIBixfaW.js","assets/button-CbdgUDvS.js","assets/clsx-D9aGYY3V.js","assets/dist-BjDKUEMi.js","assets/dist-ByVfo7qC.js","assets/dist-qAA-axL4.js","assets/dist-CXfAGnWR.js","assets/es2015-Chgs9D7p.js","assets/dist-xVhEP_Vg.js","assets/dist-s_CiB-DN.js","assets/dist-BlTmpVme.js","assets/dist-D13PZ7es.js","assets/dist-DOx-EAQr.js","assets/dist-BixeH3nX.js","assets/dist-DuNl0ZwE.js","assets/separator-CE12xF6y.js","assets/tooltip-DuzUBeLr.js","assets/dist-BIXdBdVU.js","assets/dist-BGJ_1VEi.js","assets/auth-store-GibZbQPL.js","assets/dist-Bk35TVDN.js","assets/with-selector-DBfssCrY.js","assets/cookies-BzZOQYPw.js","assets/useRouter-DtTm7XkK.js","assets/useNavigate-7u4DX0Ho.js","assets/useStore-CupyIEEP.js","assets/command-DIyNKYlo.js","assets/createLucideIcon-Br0Bd5k2.js","assets/dialog-SgRLLGoQ.js","assets/skeleton-DwLAyCLM.js","assets/wallet-CkKQfl5z.js","assets/sun-BwqrnykR.js","assets/shield-check-CiWq1V4z.js","assets/logo-CGyEdT5T.js","assets/input-CusCjhBW.js","assets/font-provider-aBht_Njp.js","assets/theme-provider-BXElecjF.js","assets/theme-switch-DporjlJW.js","assets/dropdown-menu-DwTFINO1.js","assets/check-DldThLle.js","assets/header-BZlnQmen.js","assets/link-Br2JDLvw.js","assets/ClientOnly-CMPEj0pJ.js","assets/forbidden-CHYUR1RB.js","assets/general-error-CkWgD-Kh.js","assets/maintenance-error-CpldkShG.js","assets/not-found-error-AnL_Yh5s.js","assets/unauthorized-error-Dv-DRB5e.js"])))=>i.map(i=>d[i]);
|
||||||
|
import{n as e,t}from"./lazyRouteComponent-CFOfOLgA.js";import{t as n}from"./preload-helper-vQKTmgnp.js";var r=e(`/_authenticated/errors/$error`)({component:t(()=>n(()=>import(`./_error-D4dSyXw0.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54])),`component`)});export{r as t};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
|||||||
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_trade_id-Ck9STVZb.js","assets/chunk-DECur_0Z.js","assets/button-CbdgUDvS.js","assets/clsx-D9aGYY3V.js","assets/messages-d1hRBHLP.js","assets/react-CO2uhaBc.js","assets/select-Cv_sRi68.js","assets/dist-BIXdBdVU.js","assets/dist-CIovDv3v.js","assets/dist-qAA-axL4.js","assets/dist-CXfAGnWR.js","assets/dist-DuNl0ZwE.js","assets/dist-CRowTfGU.js","assets/dist-DOx-EAQr.js","assets/dist-s_CiB-DN.js","assets/dist-ByVfo7qC.js","assets/es2015-Chgs9D7p.js","assets/dist-BixeH3nX.js","assets/dist-BGJ_1VEi.js","assets/createLucideIcon-Br0Bd5k2.js","assets/check-DldThLle.js","assets/chevron-down-BPPKEraq.js","assets/auth-store-GibZbQPL.js","assets/dist-Bk35TVDN.js","assets/with-selector-DBfssCrY.js","assets/cookies-BzZOQYPw.js","assets/useNavigate-7u4DX0Ho.js","assets/useRouter-DtTm7XkK.js","assets/copy-to-clipboard--eZunBzP.js","assets/arrow-left-Ck1MERx0.js","assets/radio-group-CX51BC9z.js","assets/dist-BlTmpVme.js","assets/dist-xVhEP_Vg.js","assets/dist-D13PZ7es.js","assets/loader-circle-DRj7MiMc.js","assets/send-g-CrrC4k.js","assets/triangle-alert-BEkslGAT.js","assets/dialog-SgRLLGoQ.js","assets/dist-BjDKUEMi.js","assets/crypto-icon-BwB-F_ID.js","assets/labels-CfnKbsNx.js","assets/input-CusCjhBW.js","assets/checkout-model-CY0q1fms.js"])))=>i.map(i=>d[i]);
|
||||||
|
import{n as e,t}from"./lazyRouteComponent-CFOfOLgA.js";import{t as n}from"./preload-helper-vQKTmgnp.js";var r=e(`/cashier/$trade_id/`)({component:t(()=>n(()=>import(`./_trade_id-Ck9STVZb.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42])),`component`)});export{r as t};
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_trade_id-D2lai0y2.js","assets/chunk-DECur_0Z.js","assets/button-DlGFBuNZ.js","assets/clsx-D9aGYY3V.js","assets/messages-Bbvu5aaF.js","assets/react-CO2uhaBc.js","assets/select-BRRg0L32.js","assets/dist-l3nGCB93.js","assets/dist-FGEIDBp-.js","assets/dist--ZhT0Dzg.js","assets/dist-BkAVwTGu.js","assets/dist-BYCFrz1s.js","assets/dist-CRowTfGU.js","assets/dist-CLy3Z8cG.js","assets/dist-DI4dxjh-.js","assets/dist-Cy-xiyt7.js","assets/es2015-b-3Ydtpy.js","assets/dist-BixeH3nX.js","assets/dist-mVZdxKLu.js","assets/createLucideIcon-Br0Bd5k2.js","assets/check-DldThLle.js","assets/chevron-down-BPPKEraq.js","assets/auth-store-BnVIXJIp.js","assets/dist-0D92g85D.js","assets/with-selector-DBfssCrY.js","assets/cookies-BzZOQYPw.js","assets/useNavigate-7u4DX0Ho.js","assets/useRouter-DtTm7XkK.js","assets/copy-to-clipboard--eZunBzP.js","assets/arrow-left-Ck1MERx0.js","assets/radio-group-DIzxqq_2.js","assets/dist-BHsKknyh.js","assets/dist-BaRXEuYn.js","assets/dist-DRkG7ylN.js","assets/loader-circle-DRj7MiMc.js","assets/send-g-CrrC4k.js","assets/triangle-alert-BEkslGAT.js","assets/dialog-DCa0Wx6n.js","assets/dist-B_ALJuOq.js","assets/labels-DcMMAJnk.js","assets/input-CJ09jXcS.js","assets/checkout-model-BfGeSuFW.js"])))=>i.map(i=>d[i]);
|
|
||||||
import{n as e,t}from"./lazyRouteComponent-D7-crJIH.js";import{t as n}from"./preload-helper-vQKTmgnp.js";var r=e(`/cashier/$trade_id/`)({component:t(()=>n(()=>import(`./_trade_id-D2lai0y2.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),`component`)});export{r as t};
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{$f as e,_n as t,bn as n,dp as r,ep as i,gn as a,hn as o,mn as s,vn as c,yn as l}from"./messages-Bbvu5aaF.js";import{i as u,n as d,t as f}from"./button-DlGFBuNZ.js";import{n as p,r as m}from"./font-provider-CUqnfmoa.js";import{n as h}from"./theme-provider-l0tGtGY9.js";import{t as g}from"./chevron-down-BPPKEraq.js";import{n as _,t as v}from"./radio-group-DIzxqq_2.js";import{r as y,s as b}from"./zod-CQemhjci.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-CwBNjUHP.js";import{t as A}from"./page-header-v0-NzBJQ.js";import{t as j}from"./show-submitted-data-C_xyg4eH.js";var M=r(),N=b({theme:y([`light`,`dark`]),font:y(m)});function P(){let{font:n,setFont:r}=p(),{theme:l,setTheme:y}=h(),b={theme:l,font:n},A=w({resolver:S(N),defaultValues:b});function P(e){e.font!==n&&r(e.font),e.theme!==l&&y(e.theme),j(e)}return(0,M.jsx)(k,{...A,children:(0,M.jsxs)(`form`,{className:`space-y-8`,onSubmit:A.handleSubmit(P),children:[(0,M.jsx)(C,{control:A.control,name:`font`,render:({field:e})=>(0,M.jsxs)(x,{children:[(0,M.jsx)(E,{children:c()}),(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:t()}),(0,M.jsx)(O,{})]})}),(0,M.jsx)(C,{control:A.control,name:`theme`,render:({field:t})=>(0,M.jsxs)(x,{children:[(0,M.jsx)(E,{children:a()}),(0,M.jsx)(D,{children:o()}),(0,M.jsx)(O,{}),(0,M.jsxs)(v,{className:`grid max-w-md grid-cols-2 gap-8 pt-2`,defaultValue:t.value,onValueChange:t.onChange,children:[(0,M.jsx)(x,{children:(0,M.jsxs)(E,{className:`[&:has([data-state=checked])>div]:border-primary`,children:[(0,M.jsx)(T,{children:(0,M.jsx)(_,{className:`sr-only`,value:`light`})}),(0,M.jsx)(`div`,{className:`items-center rounded-md border-2 border-muted p-1 hover:border-accent`,children:(0,M.jsxs)(`div`,{className:`space-y-2 rounded-sm bg-[#ecedef] p-2`,children:[(0,M.jsxs)(`div`,{className:`space-y-2 rounded-md bg-white p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-2 w-20 rounded-lg bg-[#ecedef]`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-[#ecedef]`})]}),(0,M.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md bg-white p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-[#ecedef]`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-[#ecedef]`})]}),(0,M.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md bg-white p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-[#ecedef]`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-[#ecedef]`})]})]})}),(0,M.jsx)(`span`,{className:`block w-full p-2 text-center font-normal`,children:i()})]})}),(0,M.jsx)(x,{children:(0,M.jsxs)(E,{className:`[&:has([data-state=checked])>div]:border-primary`,children:[(0,M.jsx)(T,{children:(0,M.jsx)(_,{className:`sr-only`,value:`dark`})}),(0,M.jsx)(`div`,{className:`items-center rounded-md border-2 border-muted bg-popover p-1 hover:bg-accent hover:text-accent-foreground`,children:(0,M.jsxs)(`div`,{className:`space-y-2 rounded-sm bg-slate-950 p-2`,children:[(0,M.jsxs)(`div`,{className:`space-y-2 rounded-md bg-slate-800 p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-2 w-20 rounded-lg bg-slate-400`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-slate-400`})]}),(0,M.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md bg-slate-800 p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-slate-400`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-slate-400`})]}),(0,M.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md bg-slate-800 p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-slate-400`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-slate-400`})]})]})}),(0,M.jsx)(`span`,{className:`block w-full p-2 text-center font-normal`,children:e()})]})})]})]})}),(0,M.jsx)(f,{type:`submit`,children:s()})]})})}function F(){return(0,M.jsx)(A,{description:l(),title:n(),variant:`section`,children:(0,M.jsx)(P,{})})}var I=F;export{I as component};
|
import{Cp as e,Pp as t,Sp as n,_n as r,bn as i,gn as a,hn as o,mn as s,vn as c,yn as l}from"./messages-d1hRBHLP.js";import{i as u,n as d,t as f}from"./button-CbdgUDvS.js";import{n as p,r as m}from"./font-provider-aBht_Njp.js";import{n as h}from"./theme-provider-BXElecjF.js";import{t as g}from"./chevron-down-BPPKEraq.js";import{n as _,t as v}from"./radio-group-CX51BC9z.js";import{r as y,s as b}from"./zod-CQemhjci.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-Db7d571a.js";import{t as A}from"./page-header-DkeFH2Rh.js";import{t as j}from"./show-submitted-data-CfmGDLbU.js";var M=t(),N=b({theme:y([`light`,`dark`]),font:y(m)});function P(){let{font:t,setFont:i}=p(),{theme:l,setTheme:y}=h(),b={theme:l,font:t},A=w({resolver:S(N),defaultValues:b});function P(e){e.font!==t&&i(e.font),e.theme!==l&&y(e.theme),j(e)}return(0,M.jsx)(k,{...A,children:(0,M.jsxs)(`form`,{className:`space-y-8`,onSubmit:A.handleSubmit(P),children:[(0,M.jsx)(C,{control:A.control,name:`font`,render:({field:e})=>(0,M.jsxs)(x,{children:[(0,M.jsx)(E,{children:c()}),(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:r()}),(0,M.jsx)(O,{})]})}),(0,M.jsx)(C,{control:A.control,name:`theme`,render:({field:t})=>(0,M.jsxs)(x,{children:[(0,M.jsx)(E,{children:a()}),(0,M.jsx)(D,{children:o()}),(0,M.jsx)(O,{}),(0,M.jsxs)(v,{className:`grid max-w-md grid-cols-2 gap-8 pt-2`,defaultValue:t.value,onValueChange:t.onChange,children:[(0,M.jsx)(x,{children:(0,M.jsxs)(E,{className:`[&:has([data-state=checked])>div]:border-primary`,children:[(0,M.jsx)(T,{children:(0,M.jsx)(_,{className:`sr-only`,value:`light`})}),(0,M.jsx)(`div`,{className:`items-center rounded-md border-2 border-muted p-1 hover:border-accent`,children:(0,M.jsxs)(`div`,{className:`space-y-2 rounded-sm bg-[#ecedef] p-2`,children:[(0,M.jsxs)(`div`,{className:`space-y-2 rounded-md bg-white p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-2 w-20 rounded-lg bg-[#ecedef]`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-[#ecedef]`})]}),(0,M.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md bg-white p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-[#ecedef]`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-[#ecedef]`})]}),(0,M.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md bg-white p-2 shadow-xs`,children:[(0,M.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-[#ecedef]`}),(0,M.jsx)(`div`,{className:`h-2 w-25 rounded-lg bg-[#ecedef]`})]})]})}),(0,M.jsx)(`span`,{className:`block w-full p-2 text-center font-normal`,children:e()})]})}),(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:n()})]})})]})]})}),(0,M.jsx)(f,{type:`submit`,children:s()})]})})}function F(){return(0,M.jsx)(A,{description:l(),title:i(),variant:`section`,children:(0,M.jsx)(P,{})})}var I=F;export{I as component};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";var r=e(t(),1),i=n(),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};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";var r=e(t(),1),i=n(),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};
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{dp as e}from"./messages-Bbvu5aaF.js";import{i as t,o as n,r}from"./button-DlGFBuNZ.js";var i=e(),a=r(`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:r=`default`,asChild:o=!1,...s}){return(0,i.jsx)(o?n:`span`,{className:t(a({variant:r}),e),"data-slot":`badge`,"data-variant":r,...s})}export{o as t};
|
import{Pp as e}from"./messages-d1hRBHLP.js";import{i as t,o as n,r}from"./button-CbdgUDvS.js";var i=e(),a=r(`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:r=`default`,asChild:o=!1,...s}){return(0,i.jsx)(o?n:`span`,{className:t(a({variant:r}),e),"data-slot":`badge`,"data-variant":r,...s})}export{o as t};
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{dp as e}from"./messages-Bbvu5aaF.js";import{i as t}from"./button-DlGFBuNZ.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};
|
import{Pp as e}from"./messages-d1hRBHLP.js";import{i as t}from"./button-CbdgUDvS.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};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{a as t,d as n,f as r}from"./auth-store-BnVIXJIp.js";import{t as i}from"./react-CO2uhaBc.js";import{t as a}from"./createLucideIcon-Br0Bd5k2.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(i(),1),c=new n({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),n=r(c,e=>e.loading),i=t.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:n,refetch:i.refetch}}export{o as n,d as t};
|
import{r as e}from"./chunk-DECur_0Z.js";import{a as t,d as n,f as r}from"./auth-store-GibZbQPL.js";import{t as i}from"./react-CO2uhaBc.js";import{t as a}from"./createLucideIcon-Br0Bd5k2.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(i(),1),c=new n({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),n=r(c,e=>e.loading),i=t.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:n,refetch:i.refetch}}export{o as n,d as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";import{t as r}from"./dist-BkAVwTGu.js";import{i,u as a}from"./button-DlGFBuNZ.js";import{a as o,r as s,t as c}from"./dist-FGEIDBp-.js";import{t as l}from"./dist-BaRXEuYn.js";import{t as u}from"./dist-BixeH3nX.js";import{t as d}from"./dist-BYCFrz1s.js";import{t as f}from"./check-DldThLle.js";var p=e(t(),1),m=n(),h=`Checkbox`,[g,_]=o(h),[v,y]=g(h);function b(e){let{__scopeCheckbox:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:l,required:u,value:d=`on`,internal_do_not_use_render:f}=e,[g,_]=c({prop:n,defaultProp:i??!1,onChange:l,caller:h}),[y,b]=p.useState(null),[x,S]=p.useState(null),C=p.useRef(!1),w=y?!!o||!!y.closest(`form`):!0,T={checked:g,disabled:a,setChecked:_,control:y,setControl:b,name:s,form:o,value:d,hasConsumerStoppedPropagationRef:C,required:u,defaultChecked:k(i)?!1:i,isFormControl:w,bubbleInput:x,setBubbleInput:S};return(0,m.jsx)(v,{scope:t,...T,children:O(f)?f(T):r})}var x=`CheckboxTrigger`,S=p.forwardRef(({__scopeCheckbox:e,onKeyDown:t,onClick:n,...i},o)=>{let{control:c,value:l,disabled:u,checked:d,required:f,setControl:h,setChecked:g,hasConsumerStoppedPropagationRef:_,isFormControl:v,bubbleInput:b}=y(x,e),S=a(o,h),C=p.useRef(d);return p.useEffect(()=>{let e=c?.form;if(e){let t=()=>g(C.current);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[c,g]),(0,m.jsx)(r.button,{type:`button`,role:`checkbox`,"aria-checked":k(d)?`mixed`:d,"aria-required":f,"data-state":A(d),"data-disabled":u?``:void 0,disabled:u,value:l,...i,ref:S,onKeyDown:s(t,e=>{e.key===`Enter`&&e.preventDefault()}),onClick:s(n,e=>{g(e=>k(e)?!0:!e),b&&v&&(_.current=e.isPropagationStopped(),_.current||e.stopPropagation())})})});S.displayName=x;var C=p.forwardRef((e,t)=>{let{__scopeCheckbox:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,m.jsx)(b,{__scopeCheckbox:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(S,{...d,ref:t,__scopeCheckbox:n}),e&&(0,m.jsx)(D,{__scopeCheckbox:n})]})})});C.displayName=h;var w=`CheckboxIndicator`,T=p.forwardRef((e,t)=>{let{__scopeCheckbox:n,forceMount:i,...a}=e,o=y(w,n);return(0,m.jsx)(l,{present:i||k(o.checked)||o.checked===!0,children:(0,m.jsx)(r.span,{"data-state":A(o.checked),"data-disabled":o.disabled?``:void 0,...a,ref:t,style:{pointerEvents:`none`,...e.style}})})});T.displayName=w;var E=`CheckboxBubbleInput`,D=p.forwardRef(({__scopeCheckbox:e,...t},n)=>{let{control:i,hasConsumerStoppedPropagationRef:o,checked:s,defaultChecked:c,required:l,disabled:f,name:h,value:g,form:_,bubbleInput:v,setBubbleInput:b}=y(E,e),x=a(n,b),S=u(s),C=d(i);p.useEffect(()=>{let e=v;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!o.current;if(S!==s&&n){let t=new Event(`click`,{bubbles:r});e.indeterminate=k(s),n.call(e,k(s)?!1:s),e.dispatchEvent(t)}},[v,S,s,o]);let w=p.useRef(k(s)?!1:s);return(0,m.jsx)(r.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:c??w.current,required:l,disabled:f,name:h,value:g,form:_,...t,tabIndex:-1,ref:x,style:{...t.style,...C,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})});D.displayName=E;function O(e){return typeof e==`function`}function k(e){return e===`indeterminate`}function A(e){return k(e)?`indeterminate`:e?`checked`:`unchecked`}function j({className:e,...t}){return(0,m.jsx)(C,{className:i(`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};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";import{t as r}from"./dist-CXfAGnWR.js";import{i,u as a}from"./button-CbdgUDvS.js";import{a as o,r as s,t as c}from"./dist-CIovDv3v.js";import{t as l}from"./dist-xVhEP_Vg.js";import{t as u}from"./dist-BixeH3nX.js";import{t as d}from"./dist-DuNl0ZwE.js";import{t as f}from"./check-DldThLle.js";var p=e(t(),1),m=n(),h=`Checkbox`,[g,_]=o(h),[v,y]=g(h);function b(e){let{__scopeCheckbox:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:l,required:u,value:d=`on`,internal_do_not_use_render:f}=e,[g,_]=c({prop:n,defaultProp:i??!1,onChange:l,caller:h}),[y,b]=p.useState(null),[x,S]=p.useState(null),C=p.useRef(!1),w=y?!!o||!!y.closest(`form`):!0,T={checked:g,disabled:a,setChecked:_,control:y,setControl:b,name:s,form:o,value:d,hasConsumerStoppedPropagationRef:C,required:u,defaultChecked:k(i)?!1:i,isFormControl:w,bubbleInput:x,setBubbleInput:S};return(0,m.jsx)(v,{scope:t,...T,children:O(f)?f(T):r})}var x=`CheckboxTrigger`,S=p.forwardRef(({__scopeCheckbox:e,onKeyDown:t,onClick:n,...i},o)=>{let{control:c,value:l,disabled:u,checked:d,required:f,setControl:h,setChecked:g,hasConsumerStoppedPropagationRef:_,isFormControl:v,bubbleInput:b}=y(x,e),S=a(o,h),C=p.useRef(d);return p.useEffect(()=>{let e=c?.form;if(e){let t=()=>g(C.current);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[c,g]),(0,m.jsx)(r.button,{type:`button`,role:`checkbox`,"aria-checked":k(d)?`mixed`:d,"aria-required":f,"data-state":A(d),"data-disabled":u?``:void 0,disabled:u,value:l,...i,ref:S,onKeyDown:s(t,e=>{e.key===`Enter`&&e.preventDefault()}),onClick:s(n,e=>{g(e=>k(e)?!0:!e),b&&v&&(_.current=e.isPropagationStopped(),_.current||e.stopPropagation())})})});S.displayName=x;var C=p.forwardRef((e,t)=>{let{__scopeCheckbox:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,m.jsx)(b,{__scopeCheckbox:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(S,{...d,ref:t,__scopeCheckbox:n}),e&&(0,m.jsx)(D,{__scopeCheckbox:n})]})})});C.displayName=h;var w=`CheckboxIndicator`,T=p.forwardRef((e,t)=>{let{__scopeCheckbox:n,forceMount:i,...a}=e,o=y(w,n);return(0,m.jsx)(l,{present:i||k(o.checked)||o.checked===!0,children:(0,m.jsx)(r.span,{"data-state":A(o.checked),"data-disabled":o.disabled?``:void 0,...a,ref:t,style:{pointerEvents:`none`,...e.style}})})});T.displayName=w;var E=`CheckboxBubbleInput`,D=p.forwardRef(({__scopeCheckbox:e,...t},n)=>{let{control:i,hasConsumerStoppedPropagationRef:o,checked:s,defaultChecked:c,required:l,disabled:f,name:h,value:g,form:_,bubbleInput:v,setBubbleInput:b}=y(E,e),x=a(n,b),S=u(s),C=d(i);p.useEffect(()=>{let e=v;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!o.current;if(S!==s&&n){let t=new Event(`click`,{bubbles:r});e.indeterminate=k(s),n.call(e,k(s)?!1:s),e.dispatchEvent(t)}},[v,S,s,o]);let w=p.useRef(k(s)?!1:s);return(0,m.jsx)(r.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:c??w.current,required:l,disabled:f,name:h,value:g,form:_,...t,tabIndex:-1,ref:x,style:{...t.style,...C,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})});D.displayName=E;function O(e){return typeof e==`function`}function k(e){return e===`indeterminate`}function A(e){return k(e)?`indeterminate`:e?`checked`:`unchecked`}function j({className:e,...t}){return(0,m.jsx)(C,{className:i(`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};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{Jf as e,Kf as t,dp as n,qf as r}from"./messages-Bbvu5aaF.js";import{t as i}from"./telescope-Eo9PEeOA.js";import{i as a,o,r as s,s as c,t as l}from"./dialog-DCa0Wx6n.js";var u=n();function d({open:n,onOpenChange:d}){return(0,u.jsx)(l,{onOpenChange:d,open:n,children:(0,u.jsx)(s,{className:`sm:max-w-sm`,children:(0,u.jsxs)(o,{className:`items-center text-center`,children:[(0,u.jsx)(i,{className:`mb-2 size-12 text-muted-foreground`}),(0,u.jsx)(c,{children:e()}),(0,u.jsxs)(a,{children:[r(),(0,u.jsx)(`br`,{}),(0,u.jsx)(`p`,{className:`mt-2 text-center`,children:t()})]})]})})})}export{d as t};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{Pp as e,_p as t,gp as n,hp as r}from"./messages-d1hRBHLP.js";import{t as i}from"./telescope-Eo9PEeOA.js";import{i as a,o,r as s,s as c,t as l}from"./dialog-SgRLLGoQ.js";var u=e();function d({open:e,onOpenChange:d}){return(0,u.jsx)(l,{onOpenChange:d,open:e,children:(0,u.jsx)(s,{className:`sm:max-w-sm`,children:(0,u.jsxs)(o,{className:`items-center text-center`,children:[(0,u.jsx)(i,{className:`mb-2 size-12 text-muted-foreground`}),(0,u.jsx)(c,{children:t()}),(0,u.jsxs)(a,{children:[n(),(0,u.jsx)(`br`,{}),(0,u.jsx)(`p`,{className:`mt-2 text-center`,children:r()})]})]})})})}export{d as t};
|
||||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{ap as n,dp as r,op as i}from"./messages-Bbvu5aaF.js";import{c as a,i as o,t as s,u as c}from"./button-DlGFBuNZ.js";import{a as l,r as u}from"./dist-FGEIDBp-.js";import{a as d,c as f,i as p,l as m,n as h,o as g,r as _,s as ee,t as v,u as y}from"./dist-B_ALJuOq.js";var b=e(t(),1),x=r(),S=`AlertDialog`,[C,te]=l(S,[y]),w=y(),T=e=>{let{__scopeAlertDialog:t,...n}=e,r=w(t);return(0,x.jsx)(g,{...r,...n,modal:!0})};T.displayName=S;var E=`AlertDialogTrigger`,D=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(f,{...i,...r,ref:t})});D.displayName=E;var O=`AlertDialogPortal`,k=e=>{let{__scopeAlertDialog:t,...n}=e,r=w(t);return(0,x.jsx)(d,{...r,...n})};k.displayName=O;var A=`AlertDialogOverlay`,j=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(p,{...i,...r,ref:t})});j.displayName=A;var M=`AlertDialogContent`,[N,P]=C(M),F=a(`AlertDialogContent`),I=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,children:r,...i}=e,a=w(n),o=b.useRef(null),s=c(t,o),l=b.useRef(null);return(0,x.jsx)(m,{contentName:M,titleName:L,docsSlug:`alert-dialog`,children:(0,x.jsx)(N,{scope:n,cancelRef:l,children:(0,x.jsxs)(h,{role:`alertdialog`,...a,...i,ref:s,onOpenAutoFocus:u(i.onOpenAutoFocus,e=>{e.preventDefault(),l.current?.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,x.jsx)(F,{children:r}),(0,x.jsx)(G,{contentRef:o})]})})})});I.displayName=M;var L=`AlertDialogTitle`,R=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(ee,{...i,...r,ref:t})});R.displayName=L;var z=`AlertDialogDescription`,B=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(_,{...i,...r,ref:t})});B.displayName=z;var V=`AlertDialogAction`,H=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(v,{...i,...r,ref:t})});H.displayName=V;var U=`AlertDialogCancel`,W=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=P(U,n),a=w(n),o=c(t,i);return(0,x.jsx)(v,{...a,...r,ref:o})});W.displayName=U;var G=({contentRef:e})=>{let t=`\`${M}\` requires a description for the component to be accessible for screen reader users.
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Op as n,Pp as r,kp as i}from"./messages-d1hRBHLP.js";import{c as a,i as o,t as s,u as c}from"./button-CbdgUDvS.js";import{a as l,r as u}from"./dist-CIovDv3v.js";import{a as d,c as f,i as p,l as m,n as h,o as g,r as _,s as ee,t as v,u as y}from"./dist-BjDKUEMi.js";var b=e(t(),1),x=r(),S=`AlertDialog`,[C,te]=l(S,[y]),w=y(),T=e=>{let{__scopeAlertDialog:t,...n}=e,r=w(t);return(0,x.jsx)(g,{...r,...n,modal:!0})};T.displayName=S;var E=`AlertDialogTrigger`,D=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(f,{...i,...r,ref:t})});D.displayName=E;var O=`AlertDialogPortal`,k=e=>{let{__scopeAlertDialog:t,...n}=e,r=w(t);return(0,x.jsx)(d,{...r,...n})};k.displayName=O;var A=`AlertDialogOverlay`,j=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(p,{...i,...r,ref:t})});j.displayName=A;var M=`AlertDialogContent`,[N,P]=C(M),F=a(`AlertDialogContent`),I=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,children:r,...i}=e,a=w(n),o=b.useRef(null),s=c(t,o),l=b.useRef(null);return(0,x.jsx)(m,{contentName:M,titleName:L,docsSlug:`alert-dialog`,children:(0,x.jsx)(N,{scope:n,cancelRef:l,children:(0,x.jsxs)(h,{role:`alertdialog`,...a,...i,ref:s,onOpenAutoFocus:u(i.onOpenAutoFocus,e=>{e.preventDefault(),l.current?.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,x.jsx)(F,{children:r}),(0,x.jsx)(G,{contentRef:o})]})})})});I.displayName=M;var L=`AlertDialogTitle`,R=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(ee,{...i,...r,ref:t})});R.displayName=L;var z=`AlertDialogDescription`,B=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(_,{...i,...r,ref:t})});B.displayName=z;var V=`AlertDialogAction`,H=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=w(n);return(0,x.jsx)(v,{...i,...r,ref:t})});H.displayName=V;var U=`AlertDialogCancel`,W=b.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=P(U,n),a=w(n),o=c(t,i);return(0,x.jsx)(v,{...a,...r,ref:o})});W.displayName=U;var G=({contentRef:e})=>{let t=`\`${M}\` requires a description for the component to be accessible for screen reader users.
|
||||||
|
|
||||||
You can add a description to the \`${M}\` by passing a \`${z}\` component as a child, which also benefits sighted users by adding visible context to the dialog.
|
You can add a description to the \`${M}\` by passing a \`${z}\` component as a child, which also benefits sighted users by adding visible context to the dialog.
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";var r=e(t(),1);function i(e){let t=new Map,n=new Map;return{get(e){return t.get(e)},load(r){let i=t.get(r);if(i)return Promise.resolve(i);let a=n.get(r);if(a)return a;let o=e(r).then(e=>(t.set(r,e),e)).finally(()=>{n.delete(r)});return n.set(r,o),o}}}async function a(e,t,n){for(let n of e){let e=`${n.base}/${t}`;try{let t=await fetch(e,{signal:AbortSignal.timeout(3e3)});if(t.ok)return await t.json()}catch{}}return n}function o({cdnList:e,fallback:t,path:n}){return i(r=>a(e,n(r),t))}var s=`GMWalletApp/crypto-icons`,c=`latest`,l=[{base:`https://cdn.jsdmirror.com/gh/${s}@${c}`,name:`jsdmirror`},{base:`https://cdn.jsdelivr.net/gh/${s}@${c}`,name:`jsdelivr`},{base:`https://fastly.jsdelivr.net/gh/${s}@${c}`,name:`fastly.jsdelivr`},{base:`https://gcore.jsdelivr.net/gh/${s}@${c}`,name:`gcore.jsdelivr`}],u={exchange:`exchanges`,network:`networks`,token:`tokens`,wallet:`wallets`},d=o({cdnList:l,fallback:{},path:e=>`aliases/${u[e]}.json`}),f=o({cdnList:l,fallback:[],path:e=>`maps/${u[e]}.json`});function p(e){return String(e??``).trim().toLowerCase()}function m(e){return p(e).replace(/\s+/g,`-`)}function h(e){let t=e?.split(`:`).pop();return t?t.trim():``}function g(e){return[e.id,e.symbol,e.name,e.shortName,h(e.filePath)].map(e=>m(e??``)).filter(Boolean)}function _(e,t){let n=e.find(e=>g(e).includes(t));return n&&(h(n.filePath)||n.id||n.symbol)||null}async function v(e,t){let n=m(t);if(!n)return``;let[r,i]=await Promise.all([f.load(e),d.load(e)]),a=m(i[n]??``);return _(r,n)||(a?_(r,a):null)||i[n]||n}function y(e,t,n={}){let{variant:r=`branded`}=n,i=m(t);return i?`${l[0].base}/assets/${u[e]}/${r}/${i}.svg`:null}async function b(e,t,n={}){let{variant:r=`branded`}=n,i=await v(e,t),a=`assets/${u[e]}/${r}/${i}.svg`;for(let e of l){let t=`${e.base}/${a}`;try{if((await fetch(t,{method:`HEAD`,signal:AbortSignal.timeout(2500)})).ok)return{url:t}}catch{}}return{url:`${l[0].base}/${a}`}}function x(e,t){return t?.trim()||e||`--`}var S=n();function C({type:e,name:t,variant:n=`branded`,size:i=16,width:a,height:o,className:s,alt:c,style:l,onError:u,...d}){let f=y(e,t,{variant:n}),[p,m]=(0,r.useState)(null),[h,g]=(0,r.useState)(f),_=h??f,v=a??i,x=o??i;return(0,r.useEffect)(()=>{let r=!1;return m(null),g(y(e,t,{variant:n})),b(e,t,{variant:n}).then(e=>{r||g(e.url)}),()=>{r=!0}},[t,e,n]),!(_&&t)||p===_?null:(0,S.jsx)(`img`,{alt:c??``,className:s,height:x,onError:e=>{m(_),u?.(e)},src:_,style:{display:`inline-block`,...l},width:v,...d})}export{p as a,l as i,x as n,v as o,u as r,o as s,C as t};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{dp as e}from"./messages-Bbvu5aaF.js";import{i as t,t as n}from"./button-DlGFBuNZ.js";import{a as r,c as i,i as a,n as o,o as s,r as c,s as l,t as u}from"./dist-B_ALJuOq.js";import{t as d}from"./createLucideIcon-Br0Bd5k2.js";var f=d(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),p=e();function m({...e}){return(0,p.jsx)(s,{"data-slot":`dialog`,...e})}function h({...e}){return(0,p.jsx)(i,{"data-slot":`dialog-trigger`,...e})}function g({...e}){return(0,p.jsx)(r,{"data-slot":`dialog-portal`,...e})}function _({...e}){return(0,p.jsx)(u,{"data-slot":`dialog-close`,...e})}function v({className:e,...n}){return(0,p.jsx)(a,{className:t(`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`,...n})}function y({className:e,children:n,showCloseButton:r=!0,...i}){return(0,p.jsxs)(g,{"data-slot":`dialog-portal`,children:[(0,p.jsx)(v,{}),(0,p.jsxs)(o,{className:t(`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`,...i,children:[n,r&&(0,p.jsxs)(u,{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,p.jsx)(f,{}),(0,p.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function b({className:e,...n}){return(0,p.jsx)(`div`,{className:t(`flex flex-col gap-2 text-center sm:text-left`,e),"data-slot":`dialog-header`,...n})}function x({className:e,showCloseButton:r=!1,children:i,...a}){return(0,p.jsxs)(`div`,{className:t(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,e),"data-slot":`dialog-footer`,...a,children:[i,r&&(0,p.jsx)(u,{asChild:!0,children:(0,p.jsx)(n,{variant:`outline`,children:`Close`})})]})}function S({className:e,...n}){return(0,p.jsx)(l,{className:t(`font-semibold text-lg leading-none`,e),"data-slot":`dialog-title`,...n})}function C({className:e,...n}){return(0,p.jsx)(c,{className:t(`text-muted-foreground text-sm`,e),"data-slot":`dialog-description`,...n})}export{x as a,h as c,C as i,f as l,_ as n,b as o,y as r,S as s,m as t};
|
import{Pp as e}from"./messages-d1hRBHLP.js";import{i as t,t as n}from"./button-CbdgUDvS.js";import{a as r,c as i,i as a,n as o,o as s,r as c,s as l,t as u}from"./dist-BjDKUEMi.js";import{t as d}from"./createLucideIcon-Br0Bd5k2.js";var f=d(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),p=e();function m({...e}){return(0,p.jsx)(s,{"data-slot":`dialog`,...e})}function h({...e}){return(0,p.jsx)(i,{"data-slot":`dialog-trigger`,...e})}function g({...e}){return(0,p.jsx)(r,{"data-slot":`dialog-portal`,...e})}function _({...e}){return(0,p.jsx)(u,{"data-slot":`dialog-close`,...e})}function v({className:e,...n}){return(0,p.jsx)(a,{className:t(`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`,...n})}function y({className:e,children:n,showCloseButton:r=!0,...i}){return(0,p.jsxs)(g,{"data-slot":`dialog-portal`,children:[(0,p.jsx)(v,{}),(0,p.jsxs)(o,{className:t(`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`,...i,children:[n,r&&(0,p.jsxs)(u,{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,p.jsx)(f,{}),(0,p.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function b({className:e,...n}){return(0,p.jsx)(`div`,{className:t(`flex flex-col gap-2 text-center sm:text-left`,e),"data-slot":`dialog-header`,...n})}function x({className:e,showCloseButton:r=!1,children:i,...a}){return(0,p.jsxs)(`div`,{className:t(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,e),"data-slot":`dialog-footer`,...a,children:[i,r&&(0,p.jsx)(u,{asChild:!0,children:(0,p.jsx)(n,{variant:`outline`,children:`Close`})})]})}function S({className:e,...n}){return(0,p.jsx)(l,{className:t(`font-semibold text-lg leading-none`,e),"data-slot":`dialog-title`,...n})}function C({className:e,...n}){return(0,p.jsx)(c,{className:t(`text-muted-foreground text-sm`,e),"data-slot":`dialog-description`,...n})}export{x as a,h as c,C as i,f as l,_ as n,b as o,y as r,S as s,m as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{an as e,cn as t,dn as n,dp as r,fn as i,in as a,ln as o,nn as s,on as c,pn as l,rn as u,sn as d,un as f}from"./messages-Bbvu5aaF.js";import{t as p}from"./button-DlGFBuNZ.js";import{t as m}from"./checkbox-3W7oo_7n.js";import{c as h,i as g,s as _}from"./zod-CQemhjci.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-CwBNjUHP.js";import{t as D}from"./page-header-v0-NzBJQ.js";import{t as O}from"./show-submitted-data-C_xyg4eH.js";var k=r(),A=[{id:`recents`,label:n()},{id:`home`,label:f()},{id:`applications`,label:o()},{id:`desktop`,label:t()},{id:`downloads`,label:d()},{id:`documents`,label:c()}],j=_({items:g(h()).refine(e=>e.some(e=>e),{message:e()})}),M={items:[`recents`,`home`]};function N(){let e=x({resolver:y(j),defaultValues:M});return(0,k.jsx)(E,{...e,children:(0,k.jsxs)(`form`,{className:`space-y-8`,onSubmit:e.handleSubmit(e=>O(e)),children:[(0,k.jsx)(b,{control:e.control,name:`items`,render:()=>(0,k.jsxs)(v,{children:[(0,k.jsxs)(`div`,{className:`mb-4`,children:[(0,k.jsx)(C,{className:`text-base`,children:a()}),(0,k.jsx)(w,{children:u()})]}),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:s()})]})})}function P(){return(0,k.jsx)(D,{description:i(),title:l(),variant:`section`,children:(0,k.jsx)(N,{})})}var F=P;export{F as component};
|
import{Pp as e,an as t,cn as n,dn as r,fn as i,in as a,ln as o,nn as s,on as c,pn as l,rn as u,sn as d,un as f}from"./messages-d1hRBHLP.js";import{t as p}from"./button-CbdgUDvS.js";import{t as m}from"./checkbox-_PDlkNfe.js";import{c as h,i as g,s as _}from"./zod-CQemhjci.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-Db7d571a.js";import{t as D}from"./page-header-DkeFH2Rh.js";import{t as O}from"./show-submitted-data-CfmGDLbU.js";var k=e(),A=[{id:`recents`,label:r()},{id:`home`,label:f()},{id:`applications`,label:o()},{id:`desktop`,label:n()},{id:`downloads`,label:d()},{id:`documents`,label:c()}],j=_({items:g(h()).refine(e=>e.some(e=>e),{message:t()})}),M={items:[`recents`,`home`]};function N(){let e=x({resolver:y(j),defaultValues:M});return(0,k.jsx)(E,{...e,children:(0,k.jsxs)(`form`,{className:`space-y-8`,onSubmit:e.handleSubmit(e=>O(e)),children:[(0,k.jsx)(b,{control:e.control,name:`items`,render:()=>(0,k.jsxs)(v,{children:[(0,k.jsxs)(`div`,{className:`mb-4`,children:[(0,k.jsx)(C,{className:`text-base`,children:a()}),(0,k.jsx)(w,{children:u()})]}),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:s()})]})})}function P(){return(0,k.jsx)(D,{description:i(),title:l(),variant:`section`,children:(0,k.jsx)(N,{})})}var F=P;export{F as component};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";import{t as r}from"./dist-BkAVwTGu.js";var i=e(t(),1),a=n(),o=Object.freeze({position:`absolute`,border:0,width:1,height:1,padding:0,margin:-1,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,wordWrap:`normal`}),s=`VisuallyHidden`,c=i.forwardRef((e,t)=>(0,a.jsx)(r.span,{...e,ref:t,style:{...o,...e.style}}));c.displayName=s;var l=c;export{o as n,l as t};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";import{t as r}from"./dist-CXfAGnWR.js";var i=e(t(),1),a=n(),o=Object.freeze({position:`absolute`,border:0,width:1,height:1,padding:0,margin:-1,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,wordWrap:`normal`}),s=`VisuallyHidden`,c=i.forwardRef((e,t)=>(0,a.jsx)(r.span,{...e,ref:t,style:{...o,...e.style}}));c.displayName=s;var l=c;export{o as n,l as t};
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";import{t as r}from"./dist-BkAVwTGu.js";import{s as i,u as a}from"./button-DlGFBuNZ.js";import{a as o,i as s,r as c,t as l}from"./dist-FGEIDBp-.js";import{t as u}from"./dist-BaRXEuYn.js";import{n as d}from"./dist--ZhT0Dzg.js";import{n as f,t as p}from"./dist-Cy-xiyt7.js";import{i as m,n as h,r as g,t as _}from"./es2015-b-3Ydtpy.js";var v=e(t(),1),y=n(),b=`Dialog`,[x,S]=o(b),[C,w]=x(b),T=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=v.useRef(null),c=v.useRef(null),[u,f]=l({prop:r,defaultProp:i??!1,onChange:a,caller:b});return(0,y.jsx)(C,{scope:t,triggerRef:s,contentRef:c,contentId:d(),titleId:d(),descriptionId:d(),open:u,onOpenChange:f,onOpenToggle:v.useCallback(()=>f(e=>!e),[f]),modal:o,children:n})};T.displayName=b;var E=`DialogTrigger`,D=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,o=w(E,n),s=a(t,o.triggerRef);return(0,y.jsx)(r.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":o.open,"aria-controls":o.contentId,"data-state":q(o.open),...i,ref:s,onClick:c(e.onClick,o.onOpenToggle)})});D.displayName=E;var O=`DialogPortal`,[k,A]=x(O,{forceMount:void 0}),j=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=w(O,t);return(0,y.jsx)(k,{scope:t,forceMount:n,children:v.Children.map(r,e=>(0,y.jsx)(u,{present:n||a.open,children:(0,y.jsx)(p,{asChild:!0,container:i,children:e})}))})};j.displayName=O;var M=`DialogOverlay`,N=v.forwardRef((e,t)=>{let n=A(M,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=w(M,e.__scopeDialog);return a.modal?(0,y.jsx)(u,{present:r||a.open,children:(0,y.jsx)(F,{...i,ref:t})}):null});N.displayName=M;var P=i(`DialogOverlay.RemoveScroll`),F=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(M,n);return(0,y.jsx)(h,{as:P,allowPinchZoom:!0,shards:[a.contentRef],children:(0,y.jsx)(r.div,{"data-state":q(a.open),...i,ref:t,style:{pointerEvents:`auto`,...i.style}})})}),I=`DialogContent`,L=v.forwardRef((e,t)=>{let n=A(I,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=w(I,e.__scopeDialog);return(0,y.jsx)(u,{present:r||a.open,children:a.modal?(0,y.jsx)(R,{...i,ref:t}):(0,y.jsx)(z,{...i,ref:t})})});L.displayName=I;var R=v.forwardRef((e,t)=>{let n=w(I,e.__scopeDialog),r=v.useRef(null),i=a(t,n.contentRef,r);return v.useEffect(()=>{let e=r.current;if(e)return _(e)},[]),(0,y.jsx)(B,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:c(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:c(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:c(e.onFocusOutside,e=>e.preventDefault())})}),z=v.forwardRef((e,t)=>{let n=w(I,e.__scopeDialog),r=v.useRef(!1),i=v.useRef(!1);return(0,y.jsx)(B,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),B=v.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:o,...s}=e,c=w(I,n),l=v.useRef(null),u=a(t,l);return g(),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(m,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:o,children:(0,y.jsx)(f,{role:`dialog`,id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":q(c.open),...s,ref:u,onDismiss:()=>c.onOpenChange(!1)})}),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(Z,{titleId:c.titleId}),(0,y.jsx)($,{contentRef:l,descriptionId:c.descriptionId})]})]})}),V=`DialogTitle`,H=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(V,n);return(0,y.jsx)(r.h2,{id:a.titleId,...i,ref:t})});H.displayName=V;var U=`DialogDescription`,W=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(U,n);return(0,y.jsx)(r.p,{id:a.descriptionId,...i,ref:t})});W.displayName=U;var G=`DialogClose`,K=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(G,n);return(0,y.jsx)(r.button,{type:`button`,...i,ref:t,onClick:c(e.onClick,()=>a.onOpenChange(!1))})});K.displayName=G;function q(e){return e?`open`:`closed`}var J=`DialogTitleWarning`,[Y,X]=s(J,{contentName:I,titleName:V,docsSlug:`dialog`}),Z=({titleId:e})=>{let t=X(J),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";import{t as r}from"./dist-CXfAGnWR.js";import{s as i,u as a}from"./button-CbdgUDvS.js";import{a as o,i as s,r as c,t as l}from"./dist-CIovDv3v.js";import{t as u}from"./dist-xVhEP_Vg.js";import{n as d}from"./dist-qAA-axL4.js";import{n as f,t as p}from"./dist-ByVfo7qC.js";import{i as m,n as h,r as g,t as _}from"./es2015-Chgs9D7p.js";var v=e(t(),1),y=n(),b=`Dialog`,[x,S]=o(b),[C,w]=x(b),T=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=v.useRef(null),c=v.useRef(null),[u,f]=l({prop:r,defaultProp:i??!1,onChange:a,caller:b});return(0,y.jsx)(C,{scope:t,triggerRef:s,contentRef:c,contentId:d(),titleId:d(),descriptionId:d(),open:u,onOpenChange:f,onOpenToggle:v.useCallback(()=>f(e=>!e),[f]),modal:o,children:n})};T.displayName=b;var E=`DialogTrigger`,D=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,o=w(E,n),s=a(t,o.triggerRef);return(0,y.jsx)(r.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":o.open,"aria-controls":o.contentId,"data-state":q(o.open),...i,ref:s,onClick:c(e.onClick,o.onOpenToggle)})});D.displayName=E;var O=`DialogPortal`,[k,A]=x(O,{forceMount:void 0}),j=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=w(O,t);return(0,y.jsx)(k,{scope:t,forceMount:n,children:v.Children.map(r,e=>(0,y.jsx)(u,{present:n||a.open,children:(0,y.jsx)(p,{asChild:!0,container:i,children:e})}))})};j.displayName=O;var M=`DialogOverlay`,N=v.forwardRef((e,t)=>{let n=A(M,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=w(M,e.__scopeDialog);return a.modal?(0,y.jsx)(u,{present:r||a.open,children:(0,y.jsx)(F,{...i,ref:t})}):null});N.displayName=M;var P=i(`DialogOverlay.RemoveScroll`),F=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(M,n);return(0,y.jsx)(h,{as:P,allowPinchZoom:!0,shards:[a.contentRef],children:(0,y.jsx)(r.div,{"data-state":q(a.open),...i,ref:t,style:{pointerEvents:`auto`,...i.style}})})}),I=`DialogContent`,L=v.forwardRef((e,t)=>{let n=A(I,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=w(I,e.__scopeDialog);return(0,y.jsx)(u,{present:r||a.open,children:a.modal?(0,y.jsx)(R,{...i,ref:t}):(0,y.jsx)(z,{...i,ref:t})})});L.displayName=I;var R=v.forwardRef((e,t)=>{let n=w(I,e.__scopeDialog),r=v.useRef(null),i=a(t,n.contentRef,r);return v.useEffect(()=>{let e=r.current;if(e)return _(e)},[]),(0,y.jsx)(B,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:c(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:c(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:c(e.onFocusOutside,e=>e.preventDefault())})}),z=v.forwardRef((e,t)=>{let n=w(I,e.__scopeDialog),r=v.useRef(!1),i=v.useRef(!1);return(0,y.jsx)(B,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),B=v.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:o,...s}=e,c=w(I,n),l=v.useRef(null),u=a(t,l);return g(),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(m,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:o,children:(0,y.jsx)(f,{role:`dialog`,id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":q(c.open),...s,ref:u,onDismiss:()=>c.onOpenChange(!1)})}),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(Z,{titleId:c.titleId}),(0,y.jsx)($,{contentRef:l,descriptionId:c.descriptionId})]})]})}),V=`DialogTitle`,H=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(V,n);return(0,y.jsx)(r.h2,{id:a.titleId,...i,ref:t})});H.displayName=V;var U=`DialogDescription`,W=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(U,n);return(0,y.jsx)(r.p,{id:a.descriptionId,...i,ref:t})});W.displayName=U;var G=`DialogClose`,K=v.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=w(G,n);return(0,y.jsx)(r.button,{type:`button`,...i,ref:t,onClick:c(e.onClick,()=>a.onOpenChange(!1))})});K.displayName=G;function q(e){return e?`open`:`closed`}var J=`DialogTitleWarning`,[Y,X]=s(J,{contentName:I,titleName:V,docsSlug:`dialog`}),Z=({titleId:e})=>{let t=X(J),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
|
||||||
|
|
||||||
If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
|
If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";import{t as r}from"./dist-BkAVwTGu.js";import{u as i}from"./button-DlGFBuNZ.js";import{a,r as o,t as s}from"./dist-FGEIDBp-.js";import{t as c}from"./dist-BaRXEuYn.js";import{n as l}from"./dist-DI4dxjh-.js";import{t as u}from"./dist-BixeH3nX.js";import{t as d}from"./dist-BYCFrz1s.js";import{n as f,r as p,t as m}from"./dist-DRkG7ylN.js";var h=e(t(),1),g=n(),_=`Radio`,[v,y]=a(_),[b,x]=v(_),S=h.forwardRef((e,t)=>{let{__scopeRadio:n,name:a,checked:s=!1,required:c,disabled:l,value:u=`on`,onCheck:d,form:f,...p}=e,[m,_]=h.useState(null),v=i(t,e=>_(e)),y=h.useRef(!1),x=m?f||!!m.closest(`form`):!0;return(0,g.jsxs)(b,{scope:n,checked:s,disabled:l,children:[(0,g.jsx)(r.button,{type:`button`,role:`radio`,"aria-checked":s,"data-state":D(s),"data-disabled":l?``:void 0,disabled:l,value:u,...p,ref:v,onClick:o(e.onClick,e=>{s||d?.(),x&&(y.current=e.isPropagationStopped(),y.current||e.stopPropagation())})}),x&&(0,g.jsx)(E,{control:m,bubbles:!y.current,name:a,value:u,checked:s,required:c,disabled:l,form:f,style:{transform:`translateX(-100%)`}})]})});S.displayName=_;var C=`RadioIndicator`,w=h.forwardRef((e,t)=>{let{__scopeRadio:n,forceMount:i,...a}=e,o=x(C,n);return(0,g.jsx)(c,{present:i||o.checked,children:(0,g.jsx)(r.span,{"data-state":D(o.checked),"data-disabled":o.disabled?``:void 0,...a,ref:t})})});w.displayName=C;var T=`RadioBubbleInput`,E=h.forwardRef(({__scopeRadio:e,control:t,checked:n,bubbles:a=!0,...o},s)=>{let c=h.useRef(null),l=i(c,s),f=u(n),p=d(t);return h.useEffect(()=>{let e=c.current;if(!e)return;let t=window.HTMLInputElement.prototype,r=Object.getOwnPropertyDescriptor(t,`checked`).set;if(f!==n&&r){let t=new Event(`click`,{bubbles:a});r.call(e,n),e.dispatchEvent(t)}},[f,n,a]),(0,g.jsx)(r.input,{type:`radio`,"aria-hidden":!0,defaultChecked:n,...o,tabIndex:-1,ref:l,style:{...o.style,...p,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0}})});E.displayName=T;function D(e){return e?`checked`:`unchecked`}var O=[`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`],k=`RadioGroup`,[A,j]=a(k,[p,y]),M=p(),N=y(),[P,F]=A(k),I=h.forwardRef((e,t)=>{let{__scopeRadioGroup:n,name:i,defaultValue:a,value:o,required:c=!1,disabled:u=!1,orientation:d,dir:p,loop:m=!0,onValueChange:h,..._}=e,v=M(n),y=l(p),[b,x]=s({prop:o,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)(f,{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,...a}=e,s=F(L,n),c=s.disabled||r,l=M(n),u=N(n),d=h.useRef(null),f=i(t,d),p=s.value===a.value,_=h.useRef(!1);return h.useEffect(()=>{let e=e=>{O.includes(e.key)&&(_.current=!0)},t=()=>_.current=!1;return document.addEventListener(`keydown`,e),document.addEventListener(`keyup`,t),()=>{document.removeEventListener(`keydown`,e),document.removeEventListener(`keyup`,t)}},[]),(0,g.jsx)(m,{asChild:!0,...l,focusable:!c,active:p,children:(0,g.jsx)(S,{disabled:c,required:s.required,checked:p,...u,...a,name:s.name,ref:f,onCheck:()=>s.onValueChange(a.value),onKeyDown:o(e=>{e.key===`Enter`&&e.preventDefault()}),onFocus:o(a.onFocus,()=>{_.current&&d.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};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";import{t as r}from"./dist-CXfAGnWR.js";import{u as i}from"./button-CbdgUDvS.js";import{a,r as o,t as s}from"./dist-CIovDv3v.js";import{t as c}from"./dist-xVhEP_Vg.js";import{n as l}from"./dist-s_CiB-DN.js";import{t as u}from"./dist-BixeH3nX.js";import{t as d}from"./dist-DuNl0ZwE.js";import{n as f,r as p,t as m}from"./dist-D13PZ7es.js";var h=e(t(),1),g=n(),_=`Radio`,[v,y]=a(_),[b,x]=v(_),S=h.forwardRef((e,t)=>{let{__scopeRadio:n,name:a,checked:s=!1,required:c,disabled:l,value:u=`on`,onCheck:d,form:f,...p}=e,[m,_]=h.useState(null),v=i(t,e=>_(e)),y=h.useRef(!1),x=m?f||!!m.closest(`form`):!0;return(0,g.jsxs)(b,{scope:n,checked:s,disabled:l,children:[(0,g.jsx)(r.button,{type:`button`,role:`radio`,"aria-checked":s,"data-state":D(s),"data-disabled":l?``:void 0,disabled:l,value:u,...p,ref:v,onClick:o(e.onClick,e=>{s||d?.(),x&&(y.current=e.isPropagationStopped(),y.current||e.stopPropagation())})}),x&&(0,g.jsx)(E,{control:m,bubbles:!y.current,name:a,value:u,checked:s,required:c,disabled:l,form:f,style:{transform:`translateX(-100%)`}})]})});S.displayName=_;var C=`RadioIndicator`,w=h.forwardRef((e,t)=>{let{__scopeRadio:n,forceMount:i,...a}=e,o=x(C,n);return(0,g.jsx)(c,{present:i||o.checked,children:(0,g.jsx)(r.span,{"data-state":D(o.checked),"data-disabled":o.disabled?``:void 0,...a,ref:t})})});w.displayName=C;var T=`RadioBubbleInput`,E=h.forwardRef(({__scopeRadio:e,control:t,checked:n,bubbles:a=!0,...o},s)=>{let c=h.useRef(null),l=i(c,s),f=u(n),p=d(t);return h.useEffect(()=>{let e=c.current;if(!e)return;let t=window.HTMLInputElement.prototype,r=Object.getOwnPropertyDescriptor(t,`checked`).set;if(f!==n&&r){let t=new Event(`click`,{bubbles:a});r.call(e,n),e.dispatchEvent(t)}},[f,n,a]),(0,g.jsx)(r.input,{type:`radio`,"aria-hidden":!0,defaultChecked:n,...o,tabIndex:-1,ref:l,style:{...o.style,...p,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0}})});E.displayName=T;function D(e){return e?`checked`:`unchecked`}var O=[`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`],k=`RadioGroup`,[A,j]=a(k,[p,y]),M=p(),N=y(),[P,F]=A(k),I=h.forwardRef((e,t)=>{let{__scopeRadioGroup:n,name:i,defaultValue:a,value:o,required:c=!1,disabled:u=!1,orientation:d,dir:p,loop:m=!0,onValueChange:h,..._}=e,v=M(n),y=l(p),[b,x]=s({prop:o,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)(f,{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,...a}=e,s=F(L,n),c=s.disabled||r,l=M(n),u=N(n),d=h.useRef(null),f=i(t,d),p=s.value===a.value,_=h.useRef(!1);return h.useEffect(()=>{let e=e=>{O.includes(e.key)&&(_.current=!0)},t=()=>_.current=!1;return document.addEventListener(`keydown`,e),document.addEventListener(`keyup`,t),()=>{document.removeEventListener(`keydown`,e),document.removeEventListener(`keyup`,t)}},[]),(0,g.jsx)(m,{asChild:!0,...l,focusable:!c,active:p,children:(0,g.jsx)(S,{disabled:c,required:s.required,checked:p,...u,...a,name:s.name,ref:f,onCheck:()=>s.onValueChange(a.value),onKeyDown:o(e=>{e.key===`Enter`&&e.preventDefault()}),onFocus:o(a.onFocus,()=>{_.current&&d.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};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";import{n as r,r as i,t as a}from"./dist-BkAVwTGu.js";import{u as o}from"./button-DlGFBuNZ.js";import{n as s,r as c}from"./dist-FGEIDBp-.js";import{t as l}from"./dist--ZhT0Dzg.js";var u=e(t(),1);function d(e,t=globalThis?.document){let n=l(e);u.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var f=n(),p=`DismissableLayer`,m=`dismissableLayer.update`,h=`dismissableLayer.pointerDownOutside`,g=`dismissableLayer.focusOutside`,_,v=u.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),y=u.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:s,onInteractOutside:l,onDismiss:p,...h}=e,g=u.useContext(v),[y,b]=u.useState(null),x=y?.ownerDocument??globalThis?.document,[,T]=u.useState({}),E=o(t,e=>b(e)),D=Array.from(g.layers),[O]=[...g.layersWithOutsidePointerEventsDisabled].slice(-1),k=D.indexOf(O),A=y?D.indexOf(y):-1,j=g.layersWithOutsidePointerEventsDisabled.size>0,M=A>=k,N=S(e=>{let t=e.target,n=[...g.branches].some(e=>e.contains(t));!M||n||(i?.(e),l?.(e),e.defaultPrevented||p?.())},x),P=C(e=>{let t=e.target;[...g.branches].some(e=>e.contains(t))||(s?.(e),l?.(e),e.defaultPrevented||p?.())},x);return d(e=>{A===g.layers.size-1&&(r?.(e),!e.defaultPrevented&&p&&(e.preventDefault(),p()))},x),u.useEffect(()=>{if(y)return n&&(g.layersWithOutsidePointerEventsDisabled.size===0&&(_=x.body.style.pointerEvents,x.body.style.pointerEvents=`none`),g.layersWithOutsidePointerEventsDisabled.add(y)),g.layers.add(y),w(),()=>{n&&g.layersWithOutsidePointerEventsDisabled.size===1&&(x.body.style.pointerEvents=_)}},[y,x,n,g]),u.useEffect(()=>()=>{y&&(g.layers.delete(y),g.layersWithOutsidePointerEventsDisabled.delete(y),w())},[y,g]),u.useEffect(()=>{let e=()=>T({});return document.addEventListener(m,e),()=>document.removeEventListener(m,e)},[]),(0,f.jsx)(a.div,{...h,ref:E,style:{pointerEvents:j?M?`auto`:`none`:void 0,...e.style},onFocusCapture:c(e.onFocusCapture,P.onFocusCapture),onBlurCapture:c(e.onBlurCapture,P.onBlurCapture),onPointerDownCapture:c(e.onPointerDownCapture,N.onPointerDownCapture)})});y.displayName=p;var b=`DismissableLayerBranch`,x=u.forwardRef((e,t)=>{let n=u.useContext(v),r=u.useRef(null),i=o(t,r);return u.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,f.jsx)(a.div,{...e,ref:i})});x.displayName=b;function S(e,t=globalThis?.document){let n=l(e),r=u.useRef(!1),i=u.useRef(()=>{});return u.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){T(h,n,a,{discrete:!0})},a={originalEvent:e};e.pointerType===`touch`?(t.removeEventListener(`click`,i.current),i.current=r,t.addEventListener(`click`,i.current,{once:!0})):r()}else t.removeEventListener(`click`,i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener(`pointerdown`,e)},0);return()=>{window.clearTimeout(a),t.removeEventListener(`pointerdown`,e),t.removeEventListener(`click`,i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function C(e,t=globalThis?.document){let n=l(e),r=u.useRef(!1);return u.useEffect(()=>{let e=e=>{e.target&&!r.current&&T(g,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function w(){let e=new CustomEvent(m);document.dispatchEvent(e)}function T(e,t,n,{discrete:i}){let a=n.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&a.addEventListener(e,t,{once:!0}),i?r(a,o):a.dispatchEvent(o)}var E=e(i(),1),D=`Portal`,O=u.forwardRef((e,t)=>{let{container:n,...r}=e,[i,o]=u.useState(!1);s(()=>o(!0),[]);let c=n||i&&globalThis?.document?.body;return c?E.createPortal((0,f.jsx)(a.div,{...r,ref:t}),c):null});O.displayName=D;export{y as n,O as t};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";import{n as r,r as i,t as a}from"./dist-CXfAGnWR.js";import{u as o}from"./button-CbdgUDvS.js";import{n as s,r as c}from"./dist-CIovDv3v.js";import{t as l}from"./dist-qAA-axL4.js";var u=e(t(),1);function d(e,t=globalThis?.document){let n=l(e);u.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var f=n(),p=`DismissableLayer`,m=`dismissableLayer.update`,h=`dismissableLayer.pointerDownOutside`,g=`dismissableLayer.focusOutside`,_,v=u.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),y=u.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:s,onInteractOutside:l,onDismiss:p,...h}=e,g=u.useContext(v),[y,b]=u.useState(null),x=y?.ownerDocument??globalThis?.document,[,T]=u.useState({}),E=o(t,e=>b(e)),D=Array.from(g.layers),[O]=[...g.layersWithOutsidePointerEventsDisabled].slice(-1),k=D.indexOf(O),A=y?D.indexOf(y):-1,j=g.layersWithOutsidePointerEventsDisabled.size>0,M=A>=k,N=S(e=>{let t=e.target,n=[...g.branches].some(e=>e.contains(t));!M||n||(i?.(e),l?.(e),e.defaultPrevented||p?.())},x),P=C(e=>{let t=e.target;[...g.branches].some(e=>e.contains(t))||(s?.(e),l?.(e),e.defaultPrevented||p?.())},x);return d(e=>{A===g.layers.size-1&&(r?.(e),!e.defaultPrevented&&p&&(e.preventDefault(),p()))},x),u.useEffect(()=>{if(y)return n&&(g.layersWithOutsidePointerEventsDisabled.size===0&&(_=x.body.style.pointerEvents,x.body.style.pointerEvents=`none`),g.layersWithOutsidePointerEventsDisabled.add(y)),g.layers.add(y),w(),()=>{n&&g.layersWithOutsidePointerEventsDisabled.size===1&&(x.body.style.pointerEvents=_)}},[y,x,n,g]),u.useEffect(()=>()=>{y&&(g.layers.delete(y),g.layersWithOutsidePointerEventsDisabled.delete(y),w())},[y,g]),u.useEffect(()=>{let e=()=>T({});return document.addEventListener(m,e),()=>document.removeEventListener(m,e)},[]),(0,f.jsx)(a.div,{...h,ref:E,style:{pointerEvents:j?M?`auto`:`none`:void 0,...e.style},onFocusCapture:c(e.onFocusCapture,P.onFocusCapture),onBlurCapture:c(e.onBlurCapture,P.onBlurCapture),onPointerDownCapture:c(e.onPointerDownCapture,N.onPointerDownCapture)})});y.displayName=p;var b=`DismissableLayerBranch`,x=u.forwardRef((e,t)=>{let n=u.useContext(v),r=u.useRef(null),i=o(t,r);return u.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,f.jsx)(a.div,{...e,ref:i})});x.displayName=b;function S(e,t=globalThis?.document){let n=l(e),r=u.useRef(!1),i=u.useRef(()=>{});return u.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){T(h,n,a,{discrete:!0})},a={originalEvent:e};e.pointerType===`touch`?(t.removeEventListener(`click`,i.current),i.current=r,t.addEventListener(`click`,i.current,{once:!0})):r()}else t.removeEventListener(`click`,i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener(`pointerdown`,e)},0);return()=>{window.clearTimeout(a),t.removeEventListener(`pointerdown`,e),t.removeEventListener(`click`,i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function C(e,t=globalThis?.document){let n=l(e),r=u.useRef(!1);return u.useEffect(()=>{let e=e=>{e.target&&!r.current&&T(g,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function w(){let e=new CustomEvent(m);document.dispatchEvent(e)}function T(e,t,n,{discrete:i}){let a=n.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&a.addEventListener(e,t,{once:!0}),i?r(a,o):a.dispatchEvent(o)}var E=e(i(),1),D=`Portal`,O=u.forwardRef((e,t)=>{let{container:n,...r}=e,[i,o]=u.useState(!1);s(()=>o(!0),[]);let c=n||i&&globalThis?.document?.body;return c?E.createPortal((0,f.jsx)(a.div,{...r,ref:t}),c):null});O.displayName=D;export{y as n,O as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";var r=e(t(),1),i=n();function a(e,t){let n=r.createContext(t),a=e=>{let{children:t,...a}=e,o=r.useMemo(()=>a,Object.values(a));return(0,i.jsx)(n.Provider,{value:o,children:t})};a.displayName=e+`Provider`;function o(i){let a=r.useContext(n);if(a)return a;if(t!==void 0)return t;throw Error(`\`${i}\` must be used within \`${e}\``)}return[a,o]}function o(e,t=[]){let n=[];function a(t,a){let o=r.createContext(a),s=n.length;n=[...n,a];let c=t=>{let{scope:n,children:a,...c}=t,l=n?.[e]?.[s]||o,u=r.useMemo(()=>c,Object.values(c));return(0,i.jsx)(l.Provider,{value:u,children:a})};c.displayName=t+`Provider`;function l(n,i){let c=i?.[e]?.[s]||o,l=r.useContext(c);if(l)return l;if(a!==void 0)return a;throw Error(`\`${n}\` must be used within \`${t}\``)}return[c,l]}let o=()=>{let t=n.map(e=>r.createContext(e));return function(n){let i=n?.[e]||t;return r.useMemo(()=>({[`__scope${e}`]:{...n,[e]:i}}),[n,i])}};return o.scopeName=e,[a,s(o,...t)]}function s(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let i=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return r.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return n.scopeName=t.scopeName,n}typeof window<`u`&&window.document&&window.document.createElement;function c(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}var l=globalThis?.document?r.useLayoutEffect:()=>{},u=r.useInsertionEffect||l;function d({prop:e,defaultProp:t,onChange:n=()=>{},caller:i}){let[a,o,s]=f({defaultProp:t,onChange:n}),c=e!==void 0,l=c?e:a;{let t=r.useRef(e!==void 0);r.useEffect(()=>{let e=t.current;e!==c&&console.warn(`${i} is changing from ${e?`controlled`:`uncontrolled`} to ${c?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=c},[c,i])}return[l,r.useCallback(t=>{if(c){let n=p(t)?t(e):t;n!==e&&s.current?.(n)}else o(t)},[c,e,o,s])]}function f({defaultProp:e,onChange:t}){let[n,i]=r.useState(e),a=r.useRef(n),o=r.useRef(t);return u(()=>{o.current=t},[t]),r.useEffect(()=>{a.current!==n&&(o.current?.(n),a.current=n)},[n,a]),[n,i,o]}function p(e){return typeof e==`function`}export{o as a,a as i,l as n,c as r,d as t};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";var r=e(t(),1),i=n();function a(e,t){let n=r.createContext(t),a=e=>{let{children:t,...a}=e,o=r.useMemo(()=>a,Object.values(a));return(0,i.jsx)(n.Provider,{value:o,children:t})};a.displayName=e+`Provider`;function o(i){let a=r.useContext(n);if(a)return a;if(t!==void 0)return t;throw Error(`\`${i}\` must be used within \`${e}\``)}return[a,o]}function o(e,t=[]){let n=[];function a(t,a){let o=r.createContext(a),s=n.length;n=[...n,a];let c=t=>{let{scope:n,children:a,...c}=t,l=n?.[e]?.[s]||o,u=r.useMemo(()=>c,Object.values(c));return(0,i.jsx)(l.Provider,{value:u,children:a})};c.displayName=t+`Provider`;function l(n,i){let c=i?.[e]?.[s]||o,l=r.useContext(c);if(l)return l;if(a!==void 0)return a;throw Error(`\`${n}\` must be used within \`${t}\``)}return[c,l]}let o=()=>{let t=n.map(e=>r.createContext(e));return function(n){let i=n?.[e]||t;return r.useMemo(()=>({[`__scope${e}`]:{...n,[e]:i}}),[n,i])}};return o.scopeName=e,[a,s(o,...t)]}function s(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let i=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return r.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return n.scopeName=t.scopeName,n}typeof window<`u`&&window.document&&window.document.createElement;function c(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}var l=globalThis?.document?r.useLayoutEffect:()=>{},u=r.useInsertionEffect||l;function d({prop:e,defaultProp:t,onChange:n=()=>{},caller:i}){let[a,o,s]=f({defaultProp:t,onChange:n}),c=e!==void 0,l=c?e:a;{let t=r.useRef(e!==void 0);r.useEffect(()=>{let e=t.current;e!==c&&console.warn(`${i} is changing from ${e?`controlled`:`uncontrolled`} to ${c?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=c},[c,i])}return[l,r.useCallback(t=>{if(c){let n=p(t)?t(e):t;n!==e&&s.current?.(n)}else o(t)},[c,e,o,s])]}function f({defaultProp:e,onChange:t}){let[n,i]=r.useState(e),a=r.useRef(n),o=r.useRef(t);return u(()=>{o.current=t},[t]),r.useEffect(()=>{a.current!==n&&(o.current?.(n),a.current=n)},[n,a]),[n,i,o]}function p(e){return typeof e==`function`}export{o as a,a as i,l as n,c as r,d as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e,t}from"./chunk-DECur_0Z.js";import{t as n}from"./react-CO2uhaBc.js";import{dp as r}from"./messages-Bbvu5aaF.js";import{s as i}from"./button-DlGFBuNZ.js";var a=t((e=>{var t=n();function r(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function i(){}var a={d:{f:i,r:function(){throw Error(r(522))},D:i,C:i,L:i,m:i,X:i,S:i,M:i},p:0,findDOMNode:null},o=Symbol.for(`react.portal`);function s(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:o,key:r==null?null:``+r,children:e,containerInfo:t,implementation:n}}var c=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function l(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=a,e.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(r(299));return s(e,t,null,n)},e.flushSync=function(e){var t=c.T,n=a.p;try{if(c.T=null,a.p=2,e)return e()}finally{c.T=t,a.p=n,a.d.f()}},e.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,a.d.C(e,t))},e.prefetchDNS=function(e){typeof e==`string`&&a.d.D(e)},e.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin),i=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?a.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:i,fetchPriority:o}):n===`script`&&a.d.X(e,{crossOrigin:r,integrity:i,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},e.preinitModule=function(e,t){if(typeof e==`string`)if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=l(t.as,t.crossOrigin);a.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0})}}else t??a.d.M(e)},e.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin);a.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},e.preloadModule=function(e,t){if(typeof e==`string`)if(t){var n=l(t.as,t.crossOrigin);a.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0})}else a.d.m(e)},e.requestFormReset=function(e){a.d.r(e)},e.unstable_batchedUpdates=function(e,t){return e(t)},e.useFormState=function(e,t,n){return c.H.useFormState(e,t,n)},e.useFormStatus=function(){return c.H.useHostTransitionStatus()},e.version=`19.2.5`})),o=t(((e,t)=>{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=e(n(),1),c=e(o(),1),l=r(),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};
|
import{r as e,t}from"./chunk-DECur_0Z.js";import{t as n}from"./react-CO2uhaBc.js";import{Pp as r}from"./messages-d1hRBHLP.js";import{s as i}from"./button-CbdgUDvS.js";var a=t((e=>{var t=n();function r(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function i(){}var a={d:{f:i,r:function(){throw Error(r(522))},D:i,C:i,L:i,m:i,X:i,S:i,M:i},p:0,findDOMNode:null},o=Symbol.for(`react.portal`);function s(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:o,key:r==null?null:``+r,children:e,containerInfo:t,implementation:n}}var c=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function l(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=a,e.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(r(299));return s(e,t,null,n)},e.flushSync=function(e){var t=c.T,n=a.p;try{if(c.T=null,a.p=2,e)return e()}finally{c.T=t,a.p=n,a.d.f()}},e.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,a.d.C(e,t))},e.prefetchDNS=function(e){typeof e==`string`&&a.d.D(e)},e.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin),i=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?a.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:i,fetchPriority:o}):n===`script`&&a.d.X(e,{crossOrigin:r,integrity:i,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},e.preinitModule=function(e,t){if(typeof e==`string`)if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=l(t.as,t.crossOrigin);a.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0})}}else t??a.d.M(e)},e.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin);a.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},e.preloadModule=function(e,t){if(typeof e==`string`)if(t){var n=l(t.as,t.crossOrigin);a.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0})}else a.d.m(e)},e.requestFormReset=function(e){a.d.r(e)},e.unstable_batchedUpdates=function(e,t){return e(t)},e.useFormState=function(e,t,n){return c.H.useFormState(e,t,n)},e.useFormStatus=function(){return c.H.useHostTransitionStatus()},e.version=`19.2.5`})),o=t(((e,t)=>{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=e(n(),1),c=e(o(),1),l=r(),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};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";import{t as r}from"./dist-BkAVwTGu.js";import{u as i}from"./button-DlGFBuNZ.js";import{a,r as o,t as s}from"./dist-FGEIDBp-.js";import{t as c}from"./dist-CLy3Z8cG.js";import{n as l,t as u}from"./dist--ZhT0Dzg.js";import{n as d}from"./dist-DI4dxjh-.js";var f=e(t(),1),p=n(),m=`rovingFocusGroup.onEntryFocus`,h={bubbles:!1,cancelable:!0},g=`RovingFocusGroup`,[_,v,y]=c(g),[b,x]=a(g,[y]),[S,C]=b(g),w=f.forwardRef((e,t)=>(0,p.jsx)(_.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,p.jsx)(_.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,p.jsx)(T,{...e,ref:t})})}));w.displayName=g;var T=f.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:a,loop:c=!1,dir:l,currentTabStopId:_,defaultCurrentTabStopId:y,onCurrentTabStopIdChange:b,onEntryFocus:x,preventScrollOnEntryFocus:C=!1,...w}=e,T=f.useRef(null),E=i(t,T),D=d(l),[O,k]=s({prop:_,defaultProp:y??null,onChange:b,caller:g}),[A,M]=f.useState(!1),N=u(x),P=v(n),F=f.useRef(!1),[I,L]=f.useState(0);return f.useEffect(()=>{let e=T.current;if(e)return e.addEventListener(m,N),()=>e.removeEventListener(m,N)},[N]),(0,p.jsx)(S,{scope:n,orientation:a,dir:D,loop:c,currentTabStopId:O,onItemFocus:f.useCallback(e=>k(e),[k]),onItemShiftTab:f.useCallback(()=>M(!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":a,...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(m,h);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=P().filter(e=>e.focusable);j([e.find(e=>e.active),e.find(e=>e.id===O),...e].filter(Boolean).map(e=>e.ref.current),C)}}F.current=!1}),onBlur:o(e.onBlur,()=>M(!1))})})}),E=`RovingFocusGroupItem`,D=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=C(E,n),g=h.currentTabStopId===m,y=v(n),{onFocusableItemAdd:b,onFocusableItemRemove:x,currentTabStopId:S}=h;return f.useEffect(()=>{if(i)return b(),()=>x()},[i,b,x]),(0,p.jsx)(_.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=A(e,h.orientation,h.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=y().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?M(n,r+1):n.slice(r+1)}setTimeout(()=>j(n))}}),children:typeof c==`function`?c({isCurrentTabStop:g,hasTabStop:S!=null}):c})})});D.displayName=E;var O={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function k(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function A(e,t,n){let r=k(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return O[r]}function j(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function M(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var N=w,P=D;export{N as n,x as r,P as t};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";import{t as r}from"./dist-CXfAGnWR.js";import{u as i}from"./button-CbdgUDvS.js";import{a,r as o,t as s}from"./dist-CIovDv3v.js";import{t as c}from"./dist-DOx-EAQr.js";import{n as l,t as u}from"./dist-qAA-axL4.js";import{n as d}from"./dist-s_CiB-DN.js";var f=e(t(),1),p=n(),m=`rovingFocusGroup.onEntryFocus`,h={bubbles:!1,cancelable:!0},g=`RovingFocusGroup`,[_,v,y]=c(g),[b,x]=a(g,[y]),[S,C]=b(g),w=f.forwardRef((e,t)=>(0,p.jsx)(_.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,p.jsx)(_.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,p.jsx)(T,{...e,ref:t})})}));w.displayName=g;var T=f.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:a,loop:c=!1,dir:l,currentTabStopId:_,defaultCurrentTabStopId:y,onCurrentTabStopIdChange:b,onEntryFocus:x,preventScrollOnEntryFocus:C=!1,...w}=e,T=f.useRef(null),E=i(t,T),D=d(l),[O,k]=s({prop:_,defaultProp:y??null,onChange:b,caller:g}),[A,M]=f.useState(!1),N=u(x),P=v(n),F=f.useRef(!1),[I,L]=f.useState(0);return f.useEffect(()=>{let e=T.current;if(e)return e.addEventListener(m,N),()=>e.removeEventListener(m,N)},[N]),(0,p.jsx)(S,{scope:n,orientation:a,dir:D,loop:c,currentTabStopId:O,onItemFocus:f.useCallback(e=>k(e),[k]),onItemShiftTab:f.useCallback(()=>M(!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":a,...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(m,h);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=P().filter(e=>e.focusable);j([e.find(e=>e.active),e.find(e=>e.id===O),...e].filter(Boolean).map(e=>e.ref.current),C)}}F.current=!1}),onBlur:o(e.onBlur,()=>M(!1))})})}),E=`RovingFocusGroupItem`,D=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=C(E,n),g=h.currentTabStopId===m,y=v(n),{onFocusableItemAdd:b,onFocusableItemRemove:x,currentTabStopId:S}=h;return f.useEffect(()=>{if(i)return b(),()=>x()},[i,b,x]),(0,p.jsx)(_.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=A(e,h.orientation,h.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=y().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?M(n,r+1):n.slice(r+1)}setTimeout(()=>j(n))}}),children:typeof c==`function`?c({isCurrentTabStop:g,hasTabStop:S!=null}):c})})});D.displayName=E;var O={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function k(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function A(e,t,n){let r=k(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return O[r]}function j(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function M(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var N=w,P=D;export{N as n,x as r,P as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";import{s as r,u as i}from"./button-DlGFBuNZ.js";import{a}from"./dist-FGEIDBp-.js";var o=e(t(),1),s=n();function c(e){let t=e+`CollectionProvider`,[n,c]=a(t),[l,u]=n(t,{collectionRef:{current:null},itemMap:new Map}),d=e=>{let{scope:t,children:n}=e,r=o.useRef(null),i=o.useRef(new Map).current;return(0,s.jsx)(l,{scope:t,itemMap:i,collectionRef:r,children:n})};d.displayName=t;let f=e+`CollectionSlot`,p=r(f),m=o.forwardRef((e,t)=>{let{scope:n,children:r}=e;return(0,s.jsx)(p,{ref:i(t,u(f,n).collectionRef),children:r})});m.displayName=f;let h=e+`CollectionItemSlot`,g=`data-radix-collection-item`,_=r(h),v=o.forwardRef((e,t)=>{let{scope:n,children:r,...a}=e,c=o.useRef(null),l=i(t,c),d=u(h,n);return o.useEffect(()=>(d.itemMap.set(c,{ref:c,...a}),()=>void d.itemMap.delete(c))),(0,s.jsx)(_,{[g]:``,ref:l,children:r})});v.displayName=h;function y(t){let n=u(e+`CollectionConsumer`,t);return o.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:d,Slot:m,ItemSlot:v},y,c]}export{c as t};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";import{s as r,u as i}from"./button-CbdgUDvS.js";import{a}from"./dist-CIovDv3v.js";var o=e(t(),1),s=n();function c(e){let t=e+`CollectionProvider`,[n,c]=a(t),[l,u]=n(t,{collectionRef:{current:null},itemMap:new Map}),d=e=>{let{scope:t,children:n}=e,r=o.useRef(null),i=o.useRef(new Map).current;return(0,s.jsx)(l,{scope:t,itemMap:i,collectionRef:r,children:n})};d.displayName=t;let f=e+`CollectionSlot`,p=r(f),m=o.forwardRef((e,t)=>{let{scope:n,children:r}=e;return(0,s.jsx)(p,{ref:i(t,u(f,n).collectionRef),children:r})});m.displayName=f;let h=e+`CollectionItemSlot`,g=`data-radix-collection-item`,_=r(h),v=o.forwardRef((e,t)=>{let{scope:n,children:r,...a}=e,c=o.useRef(null),l=i(t,c),d=u(h,n);return o.useEffect(()=>(d.itemMap.set(c,{ref:c,...a}),()=>void d.itemMap.delete(c))),(0,s.jsx)(_,{[g]:``,ref:l,children:r})});v.displayName=h;function y(t){let n=u(e+`CollectionConsumer`,t);return o.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:d,Slot:m,ItemSlot:v},y,c]}export{c as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{n}from"./dist-FGEIDBp-.js";var r=e(t(),1);function i(e){let[t,i]=r.useState(void 0);return n(()=>{if(e){i({width:e.offsetWidth,height:e.offsetHeight});let t=new ResizeObserver(t=>{if(!Array.isArray(t)||!t.length)return;let n=t[0],r,a;if(`borderBoxSize`in n){let e=n.borderBoxSize,t=Array.isArray(e)?e[0]:e;r=t.inlineSize,a=t.blockSize}else r=e.offsetWidth,a=e.offsetHeight;i({width:r,height:a})});return t.observe(e,{box:`border-box`}),()=>t.unobserve(e)}else i(void 0)},[e]),t}export{i as t};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{n}from"./dist-CIovDv3v.js";var r=e(t(),1);function i(e){let[t,i]=r.useState(void 0);return n(()=>{if(e){i({width:e.offsetWidth,height:e.offsetHeight});let t=new ResizeObserver(t=>{if(!Array.isArray(t)||!t.length)return;let n=t[0],r,a;if(`borderBoxSize`in n){let e=n.borderBoxSize,t=Array.isArray(e)?e[0]:e;r=t.inlineSize,a=t.blockSize}else r=e.offsetWidth,a=e.offsetHeight;i({width:r,height:a})});return t.observe(e,{box:`border-box`}),()=>t.unobserve(e)}else i(void 0)},[e]),t}export{i as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{n}from"./dist-FGEIDBp-.js";var r=e(t(),1),i=r.useId||(()=>void 0),a=0;function o(e){let[t,o]=r.useState(i());return n(()=>{e||o(e=>e??String(a++))},[e]),e||(t?`radix-${t}`:``)}function s(e){let t=r.useRef(e);return r.useEffect(()=>{t.current=e}),r.useMemo(()=>(...e)=>t.current?.(...e),[])}export{o as n,s as t};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{n}from"./dist-CIovDv3v.js";var r=e(t(),1),i=r.useId||(()=>void 0),a=0;function o(e){let[t,o]=r.useState(i());return n(()=>{e||o(e=>e??String(a++))},[e]),e||(t?`radix-${t}`:``)}function s(e){let t=r.useRef(e);return r.useEffect(()=>{t.current=e}),r.useMemo(()=>(...e)=>t.current?.(...e),[])}export{o as n,s as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";var r=e(t(),1),i=n(),a=r.createContext(void 0),o=e=>{let{dir:t,children:n}=e;return(0,i.jsx)(a.Provider,{value:t,children:n})};function s(e){let t=r.useContext(a);return e||t||`ltr`}export{s as n,o as t};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";var r=e(t(),1),i=n(),a=r.createContext(void 0),o=e=>{let{dir:t,children:n}=e;return(0,i.jsx)(a.Provider,{value:t,children:n})};function s(e){let t=r.useContext(a);return e||t||`ltr`}export{s as n,o as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{u as n}from"./button-DlGFBuNZ.js";import{n as r}from"./dist-FGEIDBp-.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};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{u as n}from"./button-CbdgUDvS.js";import{n as r}from"./dist-CIovDv3v.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};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{dp as e,lt as t}from"./messages-Bbvu5aaF.js";import{i as n}from"./button-DlGFBuNZ.js";import{t as r}from"./createLucideIcon-Br0Bd5k2.js";var i=r(`inbox`,[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]),a=r(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),o=r(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),s=e();function c({className:e,description:r=t(),icon:a,title:o}){return(0,s.jsxs)(`div`,{className:n(`flex flex-col items-center justify-center gap-3 py-16 text-center`,e),children:[(0,s.jsx)(`div`,{className:`flex size-12 items-center justify-center rounded-full bg-muted text-muted-foreground`,children:a??(0,s.jsx)(i,{className:`size-6`})}),o&&(0,s.jsx)(`p`,{className:`font-medium text-sm`,children:o}),(0,s.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:r})]})}export{o as n,a as r,c as t};
|
import{Pp as e,lt as t}from"./messages-d1hRBHLP.js";import{i as n}from"./button-CbdgUDvS.js";import{t as r}from"./createLucideIcon-Br0Bd5k2.js";var i=r(`inbox`,[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]),a=r(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),o=r(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),s=e();function c({className:e,description:r=t(),icon:a,title:o}){return(0,s.jsxs)(`div`,{className:n(`flex flex-col items-center justify-center gap-3 py-16 text-center`,e),children:[(0,s.jsx)(`div`,{className:`flex size-12 items-center justify-center rounded-full bg-muted text-muted-foreground`,children:a??(0,s.jsx)(i,{className:`size-6`})}),o&&(0,s.jsx)(`p`,{className:`font-medium text-sm`,children:o}),(0,s.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:r})]})}export{o as n,a as r,c as t};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{r as e}from"./chunk-DECur_0Z.js";import{a as t}from"./auth-store-GibZbQPL.js";import{t as n}from"./react-CO2uhaBc.js";import{Mn as r,Nn as i,Pp as a,cf as o,df as s,ff as c,jn as l,lf as u,of as d,sf as f,uf as p}from"./messages-d1hRBHLP.js";import{t as m}from"./button-CbdgUDvS.js";import{a as h,i as g,n as _,r as v,t as y}from"./select-Cv_sRi68.js";import{c as b,s as x}from"./zod-CQemhjci.js";import{a as S,c as C,i as w,l as T,n as E,o as D,s as O,t as k}from"./form-Db7d571a.js";import{t as A}from"./input-CusCjhBW.js";import{t as j}from"./page-header-DkeFH2Rh.js";import{n as M,t as N}from"./labels-CfnKbsNx.js";import{a as P,i as F,n as I,t as L}from"./lib-paj-DJMX.js";var R=e(n(),1),z=a(),B=x({defaultToken:b().trim().min(1,o()),defaultCurrency:b().trim().min(1,f()),defaultNetwork:b().trim().min(1,d())});function V(){let e=F(`epay`),n=t.useQuery(`get`,`/admin/api/v1/config`),i=P(),a=(0,R.useRef)(``),o=T({resolver:C(B),defaultValues:{defaultToken:`usdt`,defaultCurrency:`CNY`,defaultNetwork:`TRON`}}),c=(0,R.useMemo)(()=>n.data?.data?.supported_assets??[],[n.data?.data?.supported_assets]),d=(0,R.useMemo)(()=>H(c),[c]),f=o.watch(`defaultNetwork`),b=(0,R.useMemo)(()=>U(c,f),[c,f]);(0,R.useEffect)(()=>{let t=e.data?.data;if(!(t&&!n.isLoading))return;let r=`${e.dataUpdatedAt}:${n.dataUpdatedAt}`;if(a.current===r)return;a.current=r;let i=L(t,`epay.default_network`).trim(),s=d.find(e=>q(e.network,i))?.network||d[0]?.network||i||`TRON`,l=U(c,s),u=L(t,`epay.default_token`).trim(),f=l.find(e=>q(e.value,u))?.value||(u&&l.length===0?u.toLowerCase():l[0]?.value||`usdt`);o.reset({defaultToken:f,defaultCurrency:L(t,`epay.default_currency`,`CNY`).trim().toUpperCase(),defaultNetwork:s})},[n.dataUpdatedAt,n.isLoading,o,d,e.dataUpdatedAt,e.data,c]);async function x(t){await I(i.mutateAsync,[{group:`epay`,key:`epay.default_token`,type:`string`,value:t.defaultToken.toLowerCase()},{group:`epay`,key:`epay.default_currency`,type:`string`,value:t.defaultCurrency.toLowerCase()},{group:`epay`,key:`epay.default_network`,type:`string`,value:t.defaultNetwork.toLowerCase()}],r()),await e.refetch()}return(0,z.jsx)(k,{...o,children:(0,z.jsxs)(`form`,{className:`space-y-6`,onSubmit:o.handleSubmit(x),children:[(0,z.jsxs)(`div`,{className:`grid gap-6 md:grid-cols-2`,children:[(0,z.jsx)(w,{control:o.control,name:`defaultNetwork`,render:({field:e})=>{let t=G(d,e.value),r=t?.network||e.value;return(0,z.jsxs)(S,{children:[(0,z.jsx)(D,{children:u()}),(0,z.jsxs)(y,{disabled:n.isLoading||d.length===0,onValueChange:t=>{e.onChange(t);let n=U(c,t)[0]?.value;o.setValue(`defaultToken`,n??``,{shouldDirty:!0,shouldValidate:!0})},value:e.value,children:[(0,z.jsx)(E,{children:(0,z.jsxs)(g,{className:`w-full`,children:[(0,z.jsx)(`span`,{className:`sr-only`,children:(0,z.jsx)(h,{})}),(0,z.jsx)(`span`,{className:`pointer-events-none`,children:(0,z.jsx)(N,{displayName:t?.displayName,network:r||`TRON`})})]})}),(0,z.jsx)(_,{children:d.map(e=>(0,z.jsx)(v,{textValue:W(e),value:e.network,children:(0,z.jsx)(`span`,{className:`pointer-events-none`,children:(0,z.jsx)(N,{displayName:e.displayName,network:e.network})})},e.network))})]}),(0,z.jsx)(O,{})]})}}),(0,z.jsx)(w,{control:o.control,name:`defaultToken`,render:({field:e})=>{let t=K(b,e.value);return(0,z.jsxs)(S,{children:[(0,z.jsx)(D,{children:s()}),(0,z.jsxs)(y,{disabled:n.isLoading||b.length===0,onValueChange:e.onChange,value:e.value,children:[(0,z.jsx)(E,{children:(0,z.jsxs)(g,{className:`w-full`,children:[(0,z.jsx)(`span`,{className:`sr-only`,children:(0,z.jsx)(h,{})}),(0,z.jsx)(`span`,{className:`pointer-events-none`,children:(0,z.jsx)(M,{token:t||`USDT`})})]})}),(0,z.jsx)(_,{children:b.map(e=>(0,z.jsx)(v,{textValue:e.displayName,value:e.value,children:(0,z.jsx)(`span`,{className:`pointer-events-none`,children:(0,z.jsx)(M,{token:e.displayName})})},e.value))})]}),(0,z.jsx)(O,{})]})}})]}),(0,z.jsx)(w,{control:o.control,name:`defaultCurrency`,render:({field:e})=>(0,z.jsxs)(S,{children:[(0,z.jsx)(D,{children:p()}),(0,z.jsx)(E,{children:(0,z.jsx)(A,{placeholder:`CNY`,...e})}),(0,z.jsx)(O,{})]})}),(0,z.jsx)(m,{disabled:i.isPending||e.isLoading,type:`submit`,children:l()})]})})}function H(e){let t=new Map;for(let n of e){if(!n.network)continue;let e=n.network.toLowerCase();t.has(e)||t.set(e,{displayName:n.display_name,network:n.network})}return Array.from(t.values())}function U(e,t){let n=new Map;for(let r of e)if(q(r.network,t))for(let e of r.tokens??[]){if(!e)continue;let t=e.toLowerCase();n.has(t)||n.set(t,{displayName:e.toUpperCase(),value:t})}return Array.from(n.values())}function W(e){return e.displayName?.trim()||e.network}function G(e,t){return e.find(e=>q(e.network,t))}function K(e,t){return t?e.find(e=>q(e.value,t))?.displayName||t.toUpperCase():``}function q(e,t){return String(e??``).toLowerCase()===String(t??``).toLowerCase()}function J(){return(0,z.jsx)(j,{description:i(),title:c(),variant:`section`,children:(0,z.jsx)(V,{})})}var Y=J;export{Y as component};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{a as t}from"./auth-store-BnVIXJIp.js";import{t as n}from"./react-CO2uhaBc.js";import{Bd as r,Hd as i,Ld as a,Mn as o,Nn as s,Rd as c,Ud as l,Vd as u,dp as d,jn as f,zd as p}from"./messages-Bbvu5aaF.js";import{t as m}from"./button-DlGFBuNZ.js";import{a as h,i as g,n as _,r as v,t as y}from"./select-BRRg0L32.js";import{c as b,s as x}from"./zod-CQemhjci.js";import{a as S,c as C,i as w,l as T,n as E,o as D,s as O,t as k}from"./form-CwBNjUHP.js";import{t as A}from"./input-CJ09jXcS.js";import{t as j}from"./page-header-v0-NzBJQ.js";import{n as M,t as N}from"./labels-DcMMAJnk.js";import{a as P,i as F,n as I,t as L}from"./lib-xbBdbolX.js";var R=e(n(),1),z=d(),B=x({defaultToken:b().trim().min(1,p()),defaultCurrency:b().trim().min(1,c()),defaultNetwork:b().trim().min(1,a())});function V(){let e=F(`epay`),n=t.useQuery(`get`,`/admin/api/v1/config`),a=P(),s=(0,R.useRef)(``),c=T({resolver:C(B),defaultValues:{defaultToken:`usdt`,defaultCurrency:`CNY`,defaultNetwork:`TRON`}}),l=(0,R.useMemo)(()=>n.data?.data?.supported_assets??[],[n.data?.data?.supported_assets]),d=(0,R.useMemo)(()=>H(l),[l]),p=c.watch(`defaultNetwork`),b=(0,R.useMemo)(()=>U(l,p),[l,p]);(0,R.useEffect)(()=>{let t=e.data?.data;if(!(t&&!n.isLoading))return;let r=`${e.dataUpdatedAt}:${n.dataUpdatedAt}`;if(s.current===r)return;s.current=r;let i=L(t,`epay.default_network`).trim(),a=d.find(e=>q(e.network,i))?.network||d[0]?.network||i||`TRON`,o=U(l,a),u=L(t,`epay.default_token`).trim(),f=o.find(e=>q(e.value,u))?.value||(u&&o.length===0?u.toLowerCase():o[0]?.value||`usdt`);c.reset({defaultToken:f,defaultCurrency:L(t,`epay.default_currency`,`CNY`).trim().toUpperCase(),defaultNetwork:a})},[n.dataUpdatedAt,n.isLoading,c,d,e.dataUpdatedAt,e.data,l]);async function x(t){await I(a.mutateAsync,[{group:`epay`,key:`epay.default_token`,type:`string`,value:t.defaultToken.toLowerCase()},{group:`epay`,key:`epay.default_currency`,type:`string`,value:t.defaultCurrency.toLowerCase()},{group:`epay`,key:`epay.default_network`,type:`string`,value:t.defaultNetwork.toLowerCase()}],o()),await e.refetch()}return(0,z.jsx)(k,{...c,children:(0,z.jsxs)(`form`,{className:`space-y-6`,onSubmit:c.handleSubmit(x),children:[(0,z.jsxs)(`div`,{className:`grid gap-6 md:grid-cols-2`,children:[(0,z.jsx)(w,{control:c.control,name:`defaultNetwork`,render:({field:e})=>{let t=G(d,e.value),i=t?.network||e.value;return(0,z.jsxs)(S,{children:[(0,z.jsx)(D,{children:r()}),(0,z.jsxs)(y,{disabled:n.isLoading||d.length===0,onValueChange:t=>{e.onChange(t);let n=U(l,t)[0]?.value;c.setValue(`defaultToken`,n??``,{shouldDirty:!0,shouldValidate:!0})},value:e.value,children:[(0,z.jsx)(E,{children:(0,z.jsxs)(g,{className:`w-full`,children:[(0,z.jsx)(`span`,{className:`sr-only`,children:(0,z.jsx)(h,{})}),(0,z.jsx)(`span`,{className:`pointer-events-none`,children:(0,z.jsx)(N,{displayName:t?.displayName,network:i||`TRON`})})]})}),(0,z.jsx)(_,{children:d.map(e=>(0,z.jsx)(v,{textValue:W(e),value:e.network,children:(0,z.jsx)(`span`,{className:`pointer-events-none`,children:(0,z.jsx)(N,{displayName:e.displayName,network:e.network})})},e.network))})]}),(0,z.jsx)(O,{})]})}}),(0,z.jsx)(w,{control:c.control,name:`defaultToken`,render:({field:e})=>{let t=K(b,e.value);return(0,z.jsxs)(S,{children:[(0,z.jsx)(D,{children:i()}),(0,z.jsxs)(y,{disabled:n.isLoading||b.length===0,onValueChange:e.onChange,value:e.value,children:[(0,z.jsx)(E,{children:(0,z.jsxs)(g,{className:`w-full`,children:[(0,z.jsx)(`span`,{className:`sr-only`,children:(0,z.jsx)(h,{})}),(0,z.jsx)(`span`,{className:`pointer-events-none`,children:(0,z.jsx)(M,{token:t||`USDT`})})]})}),(0,z.jsx)(_,{children:b.map(e=>(0,z.jsx)(v,{textValue:e.displayName,value:e.value,children:(0,z.jsx)(`span`,{className:`pointer-events-none`,children:(0,z.jsx)(M,{token:e.displayName})})},e.value))})]}),(0,z.jsx)(O,{})]})}})]}),(0,z.jsx)(w,{control:c.control,name:`defaultCurrency`,render:({field:e})=>(0,z.jsxs)(S,{children:[(0,z.jsx)(D,{children:u()}),(0,z.jsx)(E,{children:(0,z.jsx)(A,{placeholder:`CNY`,...e})}),(0,z.jsx)(O,{})]})}),(0,z.jsx)(m,{disabled:a.isPending||e.isLoading,type:`submit`,children:f()})]})})}function H(e){let t=new Map;for(let n of e){if(!n.network)continue;let e=n.network.toLowerCase();t.has(e)||t.set(e,{displayName:n.display_name,network:n.network})}return Array.from(t.values())}function U(e,t){let n=new Map;for(let r of e)if(q(r.network,t))for(let e of r.tokens??[]){if(!e)continue;let t=e.toLowerCase();n.has(t)||n.set(t,{displayName:e.toUpperCase(),value:t})}return Array.from(n.values())}function W(e){return e.displayName?.trim()||e.network}function G(e,t){return e.find(e=>q(e.network,t))}function K(e,t){return t?e.find(e=>q(e.value,t))?.displayName||t.toUpperCase():``}function q(e,t){return String(e??``).toLowerCase()===String(t??``).toLowerCase()}function J(){return(0,z.jsx)(j,{description:s(),title:l(),variant:`section`,children:(0,z.jsx)(V,{})})}var Y=J;export{Y as component};
|
|
||||||
@@ -1 +1 @@
|
|||||||
import{_t as e,dt as t,ft as n,gt as r,ht as i,mt as a,pt as o,ut as s,vt as c}from"./messages-Bbvu5aaF.js";import{n as l,t as u}from"./wallet-GeyQ8E8l.js";import{t as d}from"./createLucideIcon-Br0Bd5k2.js";var f=d(`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`}]]),p=d(`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`}]]),m=d(`clock-3`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6h4`,key:`135r8i`}]]),h=d(`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`}]]),g=[{label:c(),value:`1`,icon:m},{label:e(),value:`2`,icon:l},{label:r(),value:`3`,icon:h},{label:i(),value:`4`,icon:p}],_={1:`bg-amber-500/10 text-amber-600`,2:`bg-emerald-500/10 text-emerald-600`,3:`bg-rose-500/10 text-rose-600`,4:`bg-slate-500/10 text-slate-600`};function v(e){return g.find(t=>t.value===String(e??1))?.label??String(e??`-`)}var y=[{label:a(),value:`enabled`,icon:u},{label:o(),value:`disabled`,icon:f},{label:n(),value:`monitoring`,icon:l}];t(),s();var b=[{label:t(),value:`true`},{label:s(),value:`false`}];export{g as a,_ as i,b as n,m as o,v as r,p as s,y as t};
|
import{_t as e,dt as t,ft as n,gt as r,ht as i,mt as a,pt as o,ut as s,vt as c}from"./messages-d1hRBHLP.js";import{n as l,t as u}from"./wallet-CkKQfl5z.js";import{t as d}from"./createLucideIcon-Br0Bd5k2.js";var f=d(`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`}]]),p=d(`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`}]]),m=d(`clock-3`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6h4`,key:`135r8i`}]]),h=d(`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`}]]),g=[{label:c(),value:`1`,icon:m},{label:e(),value:`2`,icon:l},{label:r(),value:`3`,icon:h},{label:i(),value:`4`,icon:p}],_={1:`bg-amber-500/10 text-amber-600`,2:`bg-emerald-500/10 text-emerald-600`,3:`bg-rose-500/10 text-rose-600`,4:`bg-slate-500/10 text-slate-600`};function v(e){return g.find(t=>t.value===String(e??1))?.label??String(e??`-`)}var y=[{label:a(),value:`enabled`,icon:u},{label:o(),value:`disabled`,icon:f},{label:n(),value:`monitoring`,icon:l}];t(),s();var b=[{label:t(),value:`true`},{label:s(),value:`false`}];export{g as a,_ as i,b as n,m as o,v as r,p as s,y as t};
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";import{n as r,r as i,t as a}from"./cookies-BzZOQYPw.js";var o=e(t(),1),s=[`inter`,`manrope`,`noto`,`system`],c=n(),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};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";import{n as r,r as i,t as a}from"./cookies-BzZOQYPw.js";var o=e(t(),1),s=[`inter`,`manrope`,`noto`,`system`],c=n(),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};
|
||||||
@@ -1 +1 @@
|
|||||||
import{At as e,Bu as t,Vu as n,dp as r,jt as i,kt as a}from"./messages-Bbvu5aaF.js";import{t as o}from"./useRouter-DtTm7XkK.js";import{t as s}from"./useNavigate-7u4DX0Ho.js";import{t as c}from"./button-DlGFBuNZ.js";var l=r();function u(){let r=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:i()}),(0,l.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[e(),` `,(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:n()}),(0,l.jsx)(c,{onClick:()=>r({to:`/dashboard`}),children:t()})]})]})})}export{u as t};
|
import{At as e,Pp as t,jt as n,kt as r,ld as i,ud as a}from"./messages-d1hRBHLP.js";import{t as o}from"./useRouter-DtTm7XkK.js";import{t as s}from"./useNavigate-7u4DX0Ho.js";import{t as c}from"./button-CbdgUDvS.js";var l=t();function u(){let t=s(),{history:u}=o();return(0,l.jsx)(`div`,{className:`h-svh`,children:(0,l.jsxs)(`div`,{className:`m-auto flex h-full w-full flex-col items-center justify-center gap-2`,children:[(0,l.jsx)(`h1`,{className:`font-bold text-[7rem] leading-tight`,children:`403`}),(0,l.jsx)(`span`,{className:`font-medium`,children:n()}),(0,l.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[e(),` `,(0,l.jsx)(`br`,{}),r()]}),(0,l.jsxs)(`div`,{className:`mt-6 flex gap-4`,children:[(0,l.jsx)(c,{onClick:()=>u.go(-1),variant:`outline`,children:a()}),(0,l.jsx)(c,{onClick:()=>t({to:`/dashboard`}),children:i()})]})]})})}export{u as t};
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{Bu as e,Hu as t,Uu as n,Vu as r,dp as i}from"./messages-Bbvu5aaF.js";import{t as a}from"./useRouter-DtTm7XkK.js";import{t as o}from"./useNavigate-7u4DX0Ho.js";import{i as s,t as c}from"./button-DlGFBuNZ.js";var l=i();function u({className:i,minimal:u=!1}){let d=o(),{history:f}=a();return(0,l.jsx)(`div`,{className:s(`h-svh w-full`,i),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:n()}),(0,l.jsx)(`p`,{className:`text-center text-muted-foreground`,children:t()}),!u&&(0,l.jsxs)(`div`,{className:`mt-6 flex gap-4`,children:[(0,l.jsx)(c,{onClick:()=>f.go(-1),variant:`outline`,children:r()}),(0,l.jsx)(c,{onClick:()=>d({to:`/dashboard`}),children:e()})]})]})})}export{u as t};
|
import{Pp as e,dd as t,fd as n,ld as r,ud as i}from"./messages-d1hRBHLP.js";import{t as a}from"./useRouter-DtTm7XkK.js";import{t as o}from"./useNavigate-7u4DX0Ho.js";import{i as s,t as c}from"./button-CbdgUDvS.js";var l=e();function u({className:e,minimal:u=!1}){let d=o(),{history:f}=a();return(0,l.jsx)(`div`,{className:s(`h-svh w-full`,e),children:(0,l.jsxs)(`div`,{className:`m-auto flex h-full w-full flex-col items-center justify-center gap-2`,children:[!u&&(0,l.jsx)(`h1`,{className:`font-bold text-[7rem] leading-tight`,children:`500`}),(0,l.jsx)(`span`,{className:`font-medium`,children:n()}),(0,l.jsx)(`p`,{className:`text-center text-muted-foreground`,children:t()}),!u&&(0,l.jsxs)(`div`,{className:`mt-6 flex gap-4`,children:[(0,l.jsx)(c,{onClick:()=>f.go(-1),variant:`outline`,children:i()}),(0,l.jsx)(c,{onClick:()=>d({to:`/dashboard`}),children:r()})]})]})})}export{u as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{i as t}from"./auth-store-BnVIXJIp.js";import{t as n}from"./react-CO2uhaBc.js";import{Fl as r,Pl as i,St as a,Ul as o,dp as s,ip as c,rp as l,sp as u}from"./messages-Bbvu5aaF.js";import{t as d}from"./link-BwMKq7lq.js";import{F as f,L as p,R as m,d as h,f as g,h as _,j as v,l as y,n as b,o as x,p as S,u as C,z as w}from"./search-provider-CMLTXja2.js";import{i as T,t as E}from"./button-DlGFBuNZ.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-Ci0ZDJlU.js";import{t as P}from"./separator-CRhLMH2U.js";import{l as F}from"./command-CAasmd2P.js";var I=e(n(),1),L=s();function R(){let[e,n]=y(),[s,u]=(0,I.useState)(!1),{user:v}=t(),b=v?.username?.trim()||a(),T=b.charAt(0).toUpperCase()||`U`,P=v?.last_login_at?r({time:x(v.last_login_at)}):i();return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(f,{onOpenChange:u,open:s,children:(0,L.jsx)(_,{})}),(0,L.jsxs)(N,{modal:!1,children:[(0,L.jsx)(k,{asChild:!0,children:(0,L.jsx)(E,{className:`relative h-8 w-8 rounded-full`,variant:`ghost`,children:(0,L.jsxs)(C,{className:`h-8 w-8`,children:[(0,L.jsx)(g,{alt:b,src:`/avatars/01.png`}),(0,L.jsx)(h,{children:T})]})})}),(0,L.jsxs)(j,{align:`end`,className:`w-56`,forceMount:!0,children:[(0,L.jsx)(A,{className:`p-0 font-normal`,children:(0,L.jsxs)(`div`,{className:`flex items-center gap-2 px-1 py-1.5 text-start text-sm`,children:[(0,L.jsxs)(C,{className:`h-8 w-8 rounded-lg`,children:[(0,L.jsx)(g,{alt:b,src:`/avatars/01.png`}),(0,L.jsx)(h,{className:`rounded-lg`,children:T})]}),(0,L.jsxs)(`div`,{className:`grid flex-1 text-start text-sm leading-tight`,children:[(0,L.jsx)(`span`,{className:`truncate font-semibold`,children:b}),(0,L.jsx)(`span`,{className:`truncate text-muted-foreground text-xs`,children:P})]})]})}),(0,L.jsx)(M,{}),(0,L.jsxs)(O,{children:[(0,L.jsx)(D,{asChild:!0,children:(0,L.jsxs)(d,{to:`/account/password`,children:[(0,L.jsx)(w,{className:`mr-2 size-4`}),c()]})}),(0,L.jsxs)(D,{onClick:()=>u(!0),onSelect:e=>e.preventDefault(),children:[(0,L.jsx)(p,{className:`mr-2 size-4`}),o()]})]}),(0,L.jsx)(M,{}),(0,L.jsxs)(D,{onClick:()=>n(!0),variant:`destructive`,children:[(0,L.jsx)(m,{className:`mr-2 size-4`}),l()]})]})]}),(0,L.jsx)(S,{onOpenChange:n,open:!!e})]})}function z({className:e=``,placeholder:t}){let{setOpen:n}=b();return(0,L.jsxs)(E,{className:T(`group relative h-8 w-full flex-1 justify-start rounded-md bg-muted/25 font-normal text-muted-foreground text-sm shadow-none hover:bg-accent sm:w-40 sm:pe-12 md:flex-none lg:w-52 xl:w-64`,e),onClick:()=>n(!0),variant:`outline`,children:[(0,L.jsx)(F,{"aria-hidden":`true`,className:`absolute inset-s-1.5 top-1/2 -translate-y-1/2`,size:16}),(0,L.jsx)(`span`,{className:`ms-4`,children:t??u()}),(0,L.jsxs)(`kbd`,{className:`pointer-events-none absolute inset-e-[0.3rem] top-[0.3rem] hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-medium font-mono text-[10px] opacity-100 group-hover:bg-accent sm:flex`,children:[(0,L.jsx)(`span`,{className:`text-xs`,children:`⌘`}),`K`]})]})}function B({className:e,fixed:t,children:n,...r}){let[i,a]=(0,I.useState)(0);return(0,I.useEffect)(()=>{let e=()=>{a(document.body.scrollTop||document.documentElement.scrollTop)};return document.addEventListener(`scroll`,e,{passive:!0}),()=>document.removeEventListener(`scroll`,e)},[]),(0,L.jsx)(`header`,{className:T(`z-50 h-16`,t&&`header-fixed peer/header sticky top-0 w-[inherit]`,i>10&&t?`shadow`:`shadow-none`,e),...r,children:(0,L.jsxs)(`div`,{className:T(`relative flex h-full items-center gap-3 p-4 sm:gap-4`,i>10&&t&&`after:absolute after:inset-0 after:-z-10 after:bg-background/20 after:backdrop-blur-lg`),children:[(0,L.jsx)(v,{className:`max-md:scale-125`,variant:`outline`}),(0,L.jsx)(P,{className:`h-6`,orientation:`vertical`}),n]})})}export{z as n,R as r,B as t};
|
import{r as e}from"./chunk-DECur_0Z.js";import{i as t}from"./auth-store-GibZbQPL.js";import{t as n}from"./react-CO2uhaBc.js";import{Ap as r,Dp as i,Ep as a,Pp as o,St as s,fu as c,iu as l,ru as u}from"./messages-d1hRBHLP.js";import{t as d}from"./link-Br2JDLvw.js";import{F as f,L as p,R as m,d as h,f as g,h as _,j as v,l as y,n as b,o as x,p as S,u as C,z as w}from"./search-provider-Zrg-SPXk.js";import{i as T,t as E}from"./button-CbdgUDvS.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-DwTFINO1.js";import{t as P}from"./separator-CE12xF6y.js";import{l as F}from"./command-DIyNKYlo.js";var I=e(n(),1),L=o();function R(){let[e,n]=y(),[r,o]=(0,I.useState)(!1),{user:v}=t(),b=v?.username?.trim()||s(),T=b.charAt(0).toUpperCase()||`U`,P=v?.last_login_at?l({time:x(v.last_login_at)}):u();return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(f,{onOpenChange:o,open:r,children:(0,L.jsx)(_,{})}),(0,L.jsxs)(N,{modal:!1,children:[(0,L.jsx)(k,{asChild:!0,children:(0,L.jsx)(E,{className:`relative h-8 w-8 rounded-full`,variant:`ghost`,children:(0,L.jsxs)(C,{className:`h-8 w-8`,children:[(0,L.jsx)(g,{alt:b,src:`/avatars/01.png`}),(0,L.jsx)(h,{children:T})]})})}),(0,L.jsxs)(j,{align:`end`,className:`w-56`,forceMount:!0,children:[(0,L.jsx)(A,{className:`p-0 font-normal`,children:(0,L.jsxs)(`div`,{className:`flex items-center gap-2 px-1 py-1.5 text-start text-sm`,children:[(0,L.jsxs)(C,{className:`h-8 w-8 rounded-lg`,children:[(0,L.jsx)(g,{alt:b,src:`/avatars/01.png`}),(0,L.jsx)(h,{className:`rounded-lg`,children:T})]}),(0,L.jsxs)(`div`,{className:`grid flex-1 text-start text-sm leading-tight`,children:[(0,L.jsx)(`span`,{className:`truncate font-semibold`,children:b}),(0,L.jsx)(`span`,{className:`truncate text-muted-foreground text-xs`,children:P})]})]})}),(0,L.jsx)(M,{}),(0,L.jsxs)(O,{children:[(0,L.jsx)(D,{asChild:!0,children:(0,L.jsxs)(d,{to:`/account/password`,children:[(0,L.jsx)(w,{className:`mr-2 size-4`}),i()]})}),(0,L.jsxs)(D,{onClick:()=>o(!0),onSelect:e=>e.preventDefault(),children:[(0,L.jsx)(p,{className:`mr-2 size-4`}),c()]})]}),(0,L.jsx)(M,{}),(0,L.jsxs)(D,{onClick:()=>n(!0),variant:`destructive`,children:[(0,L.jsx)(m,{className:`mr-2 size-4`}),a()]})]})]}),(0,L.jsx)(S,{onOpenChange:n,open:!!e})]})}function z({className:e=``,placeholder:t}){let{setOpen:n}=b();return(0,L.jsxs)(E,{className:T(`group relative h-8 w-full flex-1 justify-start rounded-md bg-muted/25 font-normal text-muted-foreground text-sm shadow-none hover:bg-accent sm:w-40 sm:pe-12 md:flex-none lg:w-52 xl:w-64`,e),onClick:()=>n(!0),variant:`outline`,children:[(0,L.jsx)(F,{"aria-hidden":`true`,className:`absolute inset-s-1.5 top-1/2 -translate-y-1/2`,size:16}),(0,L.jsx)(`span`,{className:`ms-4`,children:t??r()}),(0,L.jsxs)(`kbd`,{className:`pointer-events-none absolute inset-e-[0.3rem] top-[0.3rem] hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-medium font-mono text-[10px] opacity-100 group-hover:bg-accent sm:flex`,children:[(0,L.jsx)(`span`,{className:`text-xs`,children:`⌘`}),`K`]})]})}function B({className:e,fixed:t,children:n,...r}){let[i,a]=(0,I.useState)(0);return(0,I.useEffect)(()=>{let e=()=>{a(document.body.scrollTop||document.documentElement.scrollTop)};return document.addEventListener(`scroll`,e,{passive:!0}),()=>document.removeEventListener(`scroll`,e)},[]),(0,L.jsx)(`header`,{className:T(`z-50 h-16`,t&&`header-fixed peer/header sticky top-0 w-[inherit]`,i>10&&t?`shadow`:`shadow-none`,e),...r,children:(0,L.jsxs)(`div`,{className:T(`relative flex h-full items-center gap-3 p-4 sm:gap-4`,i>10&&t&&`after:absolute after:inset-0 after:-z-10 after:bg-background/20 after:backdrop-blur-lg`),children:[(0,L.jsx)(v,{className:`max-md:scale-125`,variant:`outline`}),(0,L.jsx)(P,{className:`h-6`,orientation:`vertical`}),n]})})}export{z as n,R as r,B as t};
|
||||||
@@ -1 +1 @@
|
|||||||
import{Jf as e,Kf as t,dp as n,qf as r}from"./messages-Bbvu5aaF.js";import{t as i}from"./telescope-Eo9PEeOA.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:e()}),(0,a.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[r(),` `,(0,a.jsx)(`br`,{}),t()]})]})})}var s=o;export{s as component};
|
import{Pp as e,_p as t,gp as n,hp as r}from"./messages-d1hRBHLP.js";import{t as i}from"./telescope-Eo9PEeOA.js";var a=e();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:t()}),(0,a.jsxs)(`p`,{className:`text-center text-muted-foreground`,children:[n(),` `,(0,a.jsx)(`br`,{}),r()]})]})})}var s=o;export{s as component};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{dp as e}from"./messages-Bbvu5aaF.js";import{i as t}from"./button-DlGFBuNZ.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};
|
import{Pp as e}from"./messages-d1hRBHLP.js";import{i as t}from"./button-CbdgUDvS.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};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{cs as n,dp as r,ds as i,fs as a,ls as o,ms as s,os as c,ps as l,ss as u,us as d}from"./messages-Bbvu5aaF.js";import{r as f}from"./route-DUvLcsLr.js";import{d as p,n as m,o as h,r as g,s as _}from"./data-table-PcSuT0p4.js";import{t as v}from"./badge-CCVcrgJv.js";import{t as y}from"./use-table-url-state-BYLP4A_7.js";var b=e(t(),1),x=r(),S=[{name:`GMPay`,entries:[{method:`POST`,path:`/payments/gmpay/v1/order/create-transaction`}],requestFields:[`order_id`,`currency`,`token`,`network`,`amount`,`notify_url`,`signature`,`redirect_url?`,`name?`,`payment_type?`],callbackNote:n()},{name:`EPay Compatible`,entries:[{method:`POST`,path:`/payments/epay/v1/order/create-transaction/submit.php`},{method:`GET`,path:`/payments/epay/v1/order/create-transaction/submit.php`}],requestFields:[`pid`,`money`,`out_trade_no`,`notify_url`,`return_url?`,`name?`,`type?`,`sign`,`sign_type?`],callbackNote:u()},{name:`OKPay`,entries:[{method:`POST`,path:`/payments/okpay/v1/notify`}],requestFields:[`OkPay notify payload`],callbackNote:c()}];function C({method:e}){return(0,x.jsx)(v,{className:e===`GET`?`rounded border border-blue-500/30 bg-blue-500/10 font-mono text-blue-600 dark:text-blue-400`:`rounded border border-emerald-500/30 bg-emerald-500/10 font-mono text-emerald-600 dark:text-emerald-400`,variant:`outline`,children:e})}function w({field:e}){return(0,x.jsx)(`code`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono text-foreground text-xs`,children:e})}function T({item:e}){let t=e.entries.reduce((e,t)=>(e[t.path]||(e[t.path]=[]),e[t.path].push(t.method),e),{});return(0,x.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:Object.entries(t).map(([e,t])=>(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(`div`,{className:`flex gap-1.5`,children:t.map(e=>(0,x.jsx)(C,{method:e},e))}),(0,x.jsx)(`code`,{className:`whitespace-normal break-words font-mono text-sm`,children:e})]},e))})}function E({fields:e}){return(0,x.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>(0,x.jsx)(w,{field:e},e))})}var D=f(`/_authenticated/payment-setup/integrations`);function O(){let{pagination:e,onPaginationChange:t,ensurePageInRange:n}=y({search:D.useSearch(),navigate:D.useNavigate(),pagination:{defaultPage:1,defaultPageSize:10}}),r=h({data:S,columns:(0,b.useMemo)(()=>[{accessorKey:`name`,header:a(),cell:({row:e})=>(0,x.jsx)(`span`,{className:`font-medium`,children:e.original.name})},{accessorKey:`entries`,header:i(),cell:({row:e})=>(0,x.jsx)(T,{item:e.original})},{accessorKey:`requestFields`,header:d(),cell:({row:e})=>(0,x.jsx)(E,{fields:e.original.requestFields})},{accessorKey:`callbackNote`,header:o(),cell:({row:e})=>(0,x.jsx)(`span`,{className:`whitespace-normal break-words text-muted-foreground text-sm`,children:e.original.callbackNote})}],[]),state:{pagination:e},onPaginationChange:t,getCoreRowModel:_(),getPaginationRowModel:p()});return(0,b.useEffect)(()=>{n(r.getPageCount())},[r,n]),(0,x.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,x.jsxs)(`div`,{className:`space-y-1`,children:[(0,x.jsx)(`h3`,{className:`font-semibold text-lg`,children:s()}),(0,x.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:l()})]}),(0,x.jsx)(g,{table:r}),(0,x.jsx)(m,{className:`mt-auto`,table:r})]})}function k(){return(0,x.jsx)(O,{})}var A=k;export{A as component};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n,cs as r,ds as i,fs as a,gs as o,hs as s,ls as c,ms as l,ps as u,us as d}from"./messages-d1hRBHLP.js";import{r as f}from"./route-Bea3HGvi.js";import{d as p,n as m,o as h,r as g,s as _}from"./data-table-BL1bMqGh.js";import{t as v}from"./badge-3Uy55c0q.js";import{t as y}from"./use-table-url-state-BYLP4A_7.js";var b=e(t(),1),x=n(),S=[{name:`GMPay`,entries:[{method:`POST`,path:`/payments/gmpay/v1/order/create-transaction`}],requestFields:[`order_id`,`currency`,`token`,`network`,`amount`,`notify_url`,`signature`,`redirect_url?`,`name?`,`payment_type?`],callbackNote:d()},{name:`EPay Compatible`,entries:[{method:`POST`,path:`/payments/epay/v1/order/create-transaction/submit.php`},{method:`GET`,path:`/payments/epay/v1/order/create-transaction/submit.php`}],requestFields:[`pid`,`money`,`out_trade_no`,`notify_url`,`return_url?`,`name?`,`type?`,`sign`,`sign_type?`],callbackNote:c()},{name:`OKPay`,entries:[{method:`POST`,path:`/payments/okpay/v1/notify`}],requestFields:[`OkPay notify payload`],callbackNote:r()}];function C({method:e}){return(0,x.jsx)(v,{className:e===`GET`?`rounded border border-blue-500/30 bg-blue-500/10 font-mono text-blue-600 dark:text-blue-400`:`rounded border border-emerald-500/30 bg-emerald-500/10 font-mono text-emerald-600 dark:text-emerald-400`,variant:`outline`,children:e})}function w({field:e}){return(0,x.jsx)(`code`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono text-foreground text-xs`,children:e})}function T({item:e}){let t=e.entries.reduce((e,t)=>(e[t.path]||(e[t.path]=[]),e[t.path].push(t.method),e),{});return(0,x.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:Object.entries(t).map(([e,t])=>(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(`div`,{className:`flex gap-1.5`,children:t.map(e=>(0,x.jsx)(C,{method:e},e))}),(0,x.jsx)(`code`,{className:`whitespace-normal break-words font-mono text-sm`,children:e})]},e))})}function E({fields:e}){return(0,x.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>(0,x.jsx)(w,{field:e},e))})}var D=f(`/_authenticated/payment-setup/integrations`);function O(){let{pagination:e,onPaginationChange:t,ensurePageInRange:n}=y({search:D.useSearch(),navigate:D.useNavigate(),pagination:{defaultPage:1,defaultPageSize:10}}),r=h({data:S,columns:(0,b.useMemo)(()=>[{accessorKey:`name`,header:l(),cell:({row:e})=>(0,x.jsx)(`span`,{className:`font-medium`,children:e.original.name})},{accessorKey:`entries`,header:u(),cell:({row:e})=>(0,x.jsx)(T,{item:e.original})},{accessorKey:`requestFields`,header:a(),cell:({row:e})=>(0,x.jsx)(E,{fields:e.original.requestFields})},{accessorKey:`callbackNote`,header:i(),cell:({row:e})=>(0,x.jsx)(`span`,{className:`whitespace-normal break-words text-muted-foreground text-sm`,children:e.original.callbackNote})}],[]),state:{pagination:e},onPaginationChange:t,getCoreRowModel:_(),getPaginationRowModel:p()});return(0,b.useEffect)(()=>{n(r.getPageCount())},[r,n]),(0,x.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,x.jsxs)(`div`,{className:`space-y-1`,children:[(0,x.jsx)(`h3`,{className:`font-semibold text-lg`,children:o()}),(0,x.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:s()})]}),(0,x.jsx)(g,{table:r}),(0,x.jsx)(m,{className:`mt-auto`,table:r})]})}function k(){return(0,x.jsx)(O,{})}var A=k;export{A as component};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{dp as n}from"./messages-Bbvu5aaF.js";import{t as r}from"./dist-BkAVwTGu.js";import{i}from"./button-DlGFBuNZ.js";var a=e(t(),1),o=n(),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};
|
import{r as e}from"./chunk-DECur_0Z.js";import{t}from"./react-CO2uhaBc.js";import{Pp as n}from"./messages-d1hRBHLP.js";import{t as r}from"./dist-CXfAGnWR.js";import{i}from"./button-CbdgUDvS.js";var a=e(t(),1),o=n(),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};
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user