diff --git a/.gitignore b/.gitignore index 7a7f1dc..6df1434 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.exe /gateway tmp/ +dump.rdb diff --git a/CLAUDE.md b/CLAUDE.md index 19b5af8..fe111ba 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -59,6 +59,12 @@ Consequences to keep in mind: placeholder strings) and listed in `UnchangedToastColumns`. Sinks handle this with partial updates (Meilisearch `UpdateDocuments`, RedisJSON `JSON.MERGE`). +- Schema (DDL) changes are detected by diffing pgoutput relation + descriptions, which PostgreSQL re-sends before a changed table's next row + change. They are **best-effort**, not at-least-once: a reconnect + re-describes tables with nothing to diff against, so a missed change cannot + be redelivered. Observers must therefore never fail the WAL stream — + `ports.SchemaObserver` returns no error by design. - Backfill emits `READ` events for existing rows, interleaved with the live stream via WAL watermarks (`pg_logical_emit_message`, prefix `gtc-backfill`). Chunk rows superseded by live events between the low and @@ -95,6 +101,7 @@ Consequences to keep in mind: | CDC_DLQ_THRESHOLD | 3 | Failure cycles for the same event before it is parked | | CDC_DLQ_MAX_ENTRIES | 10000 | DLQ cap; when full, parking fails and the pipeline stalls | | CDC_MASK_HMAC_KEY | - | Secret key for the hmac256 mask strategy (startup fails if a transform uses hmac256 without it) | +| CDC_SCHEMA_EVENTS | true | Publish detected DDL changes to the :schema Redis stream (detection/metrics/API always on) | | SINK_CONFIG_FILE | - | Path to per-table sink YAML (see config/sinks.example.yaml). Without it, Redis sinks mirror all tables | | REDIS_URL | - | Redis connection (enables stream sink if set) | | REDIS_STREAM_PREFIX | cdc | Stream key prefix | @@ -147,6 +154,8 @@ internal/ transform/ # Declarative per-sink transforms (CEL filters, masking) resilience/ # Circuit breaker and retry wrapper for sinks dlq/ # Dead-letter queue (Redis store, parking decorator, triage) + doctor/ # `gtc doctor` preflight checks + schema/ # DDL change history, logging, and Redis notification stream server/ # HTTP server: health/readiness/metrics, APIs, dashboard metrics/ # Prometheus metrics ui/ # React 19 + Tailwind dashboard; dist/ committed + embedded diff --git a/README.md b/README.md index a3a1bf8..8ff1aff 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,11 @@ PostgreSQL ──logical replication──▶ GTC ──▶ Redis Streams (eve `last4`, `redact`, `null`), column dropping, and CEL row filters, configured per sink and per table in YAML. The stream can carry full rows while the search index gets masked ones — no plugin code, no SMT classes. +- **Schema-change awareness** — GTC notices when a published table gains, + loses or retypes a column, changes replica identity, or is renamed, and + reports it on the dashboard, in `/api/schema`, in Prometheus, and on a + Redis notification stream — flagging changes that can break consumers. No + DDL triggers, no schema-history topic, no superuser. - **First-class transactional outbox** — write domain events to an outbox table in the same transaction as your business writes, and GTC publishes them to per-topic Redis streams with optional delete-after-publish. Five @@ -62,8 +67,9 @@ PostgreSQL ──logical replication──▶ GTC ──▶ Redis Streams (eve silently dropped. - **Embedded live dashboard** — a React dashboard served from the binary at `/` (PocketBase-style, no separate deployment): live throughput, WAL lag, - sink health and breaker states, per-table activity, backfill progress, and - DLQ triage with one-click retry/discard. Light and dark themes. + sink health and breaker states, per-table activity, schema-change history, + backfill progress, and DLQ triage with one-click retry/discard. Light and + dark themes. - **Observability** — Prometheus metrics (events, per-sink latency, errors, retries, breaker state, WAL lag in bytes), health and readiness endpoints, structured JSON logs. @@ -224,6 +230,7 @@ lives in an optional YAML file. | `CDC_DLQ_THRESHOLD` | `3` | Failure cycles for the same event before it is parked | | `CDC_DLQ_MAX_ENTRIES` | `10000` | DLQ cap; when full, parking fails and the pipeline stalls | | `CDC_MASK_HMAC_KEY` | – | Secret key for the `hmac256` mask strategy (required when a transform uses it) | +| `CDC_SCHEMA_EVENTS` | `true` | Publish detected DDL changes to the `:schema` Redis stream (detection, metrics and `/api/schema` are always on) | | `SINK_CONFIG_FILE` | – | Path to the per-table sink YAML (below) | | `REDIS_URL` | – | Enables the Redis Stream sink | | `REDIS_STREAM_PREFIX` | `cdc` | Stream key prefix | @@ -349,6 +356,55 @@ Behavior worth knowing: - Delivery is at-least-once like everything else; consumers dedupe by the `id` field. +## Schema changes (DDL) + +PostgreSQL's logical decoding does not stream DDL statements — there is no +`ALTER TABLE` event to subscribe to. What it *does* do is re-describe a +published table whenever its shape has changed, immediately before that +table's next row change. GTC diffs those descriptions and reports the +**effect** of the DDL: + +| Detected | Kind | Breaking? | +|----------|------|-----------| +| New column | `column_added` | no — additive | +| Column removed | `column_dropped` | yes | +| Column type altered | `column_type_changed` | yes | +| Primary key / identity index replaced | `key_changed` | yes | +| `REPLICA IDENTITY` altered | `replica_identity_changed` | yes | +| Table renamed or moved schema | `table_renamed` | yes | + +Every change is counted in `cdc_schema_changes_total{schema,table,kind}`, +logged (breaking ones at WARN, so existing log alerting picks them up), kept +in a rolling in-memory history behind `GET /api/schema`, and shown on the +dashboard's **Schema** page. With `REDIS_URL` set, it is also published to +the `:schema` stream so consumers can react +programmatically: + +```bash +redis-cli XRANGE cdc:schema - + +# fields: table, lsn, breaking, payload (full JSON diff) +``` + +Set `CDC_SCHEMA_EVENTS=false` to keep detection, metrics and the API while +skipping the Redis stream. + +None of this needs DDL triggers, a schema-history topic, or superuser — it +falls out of the replication stream you are already reading. Two honest +limitations follow from that: + +- **Detection is tied to the next row change.** A table altered at 02:00 and + first written at 09:00 reports its change at 09:00. The LSN on the change + is where GTC *detected* it, not where the DDL committed. +- **Several statements can collapse into one change.** If a column is added + and another dropped between two row changes, they arrive as a single + combined change — the net effect, not a statement log. + +Unlike row events, schema notifications are **best-effort**: a change cannot +be re-derived on redelivery (a reconnect re-describes the table with nothing +to diff against), so a failed Redis publish is counted in +`cdc_schema_publish_errors_total` and logged rather than stalling the +pipeline. Row delivery keeps its at-least-once guarantee regardless. + ## Backfill and replay GTC syncs *existing* data, not just new changes. When the replication slot is @@ -453,6 +509,7 @@ networks. |----------|---------| | `GET /` | Embedded dashboard | | `GET /api/stats` | Dashboard's JSON snapshot (uptime, lag, sinks, tables, backfill, DLQ) | +| `GET /api/schema` | Recently detected schema (DDL) changes, newest first | | `GET /health` | Liveness — process is up | | `GET /readiness` | Readiness — live replication stream **and** all sinks healthy | | `GET /metrics` | Prometheus metrics | diff --git a/cmd/gateway/modules.go b/cmd/gateway/modules.go index b0f5a64..aa282e9 100644 --- a/cmd/gateway/modules.go +++ b/cmd/gateway/modules.go @@ -19,6 +19,7 @@ import ( "github.com/emoss08/gtc/internal/infrastructure/config" "github.com/emoss08/gtc/internal/infrastructure/dlq" "github.com/emoss08/gtc/internal/infrastructure/resilience" + "github.com/emoss08/gtc/internal/infrastructure/schema" "github.com/emoss08/gtc/internal/infrastructure/server" "github.com/emoss08/gtc/internal/infrastructure/transform" "github.com/emoss08/gtc/ui" @@ -34,6 +35,8 @@ func Module() fx.Option { config.LoadSinksConfig, newBackfillCoordinator, newDLQManager, + newSchemaRecorder, + newSchemaObserver, newWALReader, func(r *wal.Reader) ports.WALReader { return r }, newSinks, @@ -107,9 +110,46 @@ func newDLQManager(cfg *config.Config, logger *slog.Logger) (*dlq.Manager, error }), nil } +// newSchemaRecorder keeps the in-memory DDL history that /api/schema and the +// dashboard read. +func newSchemaRecorder(logger *slog.Logger) *schema.Recorder { + return schema.NewRecorder(logger) +} + +// newSchemaObserver fans schema changes to the recorder and, when Redis is +// configured, to the ":schema" notification stream. +func newSchemaObserver( + cfg *config.Config, + recorder *schema.Recorder, + lc fx.Lifecycle, + logger *slog.Logger, +) (ports.SchemaObserver, error) { + observers := schema.Observers{recorder} + + if rc := redissink.LoadConfig(); rc.Enabled && cfg.SchemaEvents { + publisher, err := schema.NewRedisPublisher(schema.RedisPublisherParams{ + URL: rc.URL, + Prefix: rc.StreamPrefix, + MaxLen: rc.MaxStreamLen, + Logger: logger, + }) + if err != nil { + return nil, err + } + logger.Info("publishing schema changes", slog.String("stream", publisher.Stream())) + observers = append(observers, publisher) + lc.Append(fx.Hook{ + OnStop: func(context.Context) error { return publisher.Close() }, + }) + } + + return observers, nil +} + func newWALReader( cfg *config.Config, coordinator *backfill.Coordinator, + schemaObserver ports.SchemaObserver, logger *slog.Logger, ) *wal.Reader { walCfg := wal.Config{ @@ -121,6 +161,7 @@ func newWALReader( AutoCreatePub: cfg.AutoCreatePub, SlotRetryInterval: cfg.SlotRetryInterval, SlotRetryTimeout: cfg.SlotRetryTimeout, + SchemaObserver: schemaObserver, } if coordinator != nil { @@ -326,6 +367,7 @@ func newHTTPServer( dlqManager *dlq.Manager, reader *wal.Reader, health *server.HealthStatus, + schemaRecorder *schema.Recorder, logger *slog.Logger, ) *server.Server { var backfillManager ports.BackfillManager @@ -343,6 +385,7 @@ func newHTTPServer( Backfill: backfillManager, DLQ: dlqPort, WAL: reader, + Schema: schemaRecorder, Info: server.InstanceInfo{ Version: version, SlotName: cfg.SlotName, diff --git a/internal/adapters/primary/wal/decoder.go b/internal/adapters/primary/wal/decoder.go index 66df138..82cd834 100644 --- a/internal/adapters/primary/wal/decoder.go +++ b/internal/adapters/primary/wal/decoder.go @@ -23,6 +23,9 @@ type txnState struct { inTxn bool xid uint32 commitTime time.Time + // finalLSN is the transaction's commit position, used to place messages + // that PostgreSQL sends without a WAL position of their own. + finalLSN pglogrepl.LSN } func NewDecoder() *Decoder { @@ -34,6 +37,9 @@ func NewDecoder() *Decoder { type DecodeResult struct { Events []domain.CDCEvent + // SchemaChanges are DDL changes detected by diffing this position's + // relation descriptions against the previously seen ones. + SchemaChanges []domain.SchemaChange // Message is a logical decoding message (pg_logical_emit_message) // found at this stream position; used for backfill watermarks. Message *LogicalMessage @@ -109,6 +115,7 @@ func (d *Decoder) decodeWALData(walData []byte, lsn pglogrepl.LSN) (*DecodeResul d.txn.inTxn = true d.txn.xid = msg.Xid d.txn.commitTime = msg.CommitTime + d.txn.finalLSN = msg.FinalLSN case *pglogrepl.CommitMessage: d.txn.inTxn = false @@ -117,6 +124,14 @@ func (d *Decoder) decodeWALData(walData []byte, lsn pglogrepl.LSN) (*DecodeResul result.AckLSN = msg.TransactionEndLSN case *pglogrepl.RelationMessageV2: + // PostgreSQL re-sends a relation description whenever a published + // table's shape changed, just before the next row change for it. + // Diffing against the previous one is how GTC detects DDL. + if prev, ok := d.relations[msg.RelationID]; ok { + if change := d.diffRelation(prev, msg, lsn); change != nil { + result.SchemaChanges = append(result.SchemaChanges, *change) + } + } d.relations[msg.RelationID] = msg case *pglogrepl.InsertMessageV2: @@ -175,6 +190,134 @@ func (d *Decoder) decodeWALData(walData []byte, lsn pglogrepl.LSN) (*DecodeResul return result, nil } +// diffRelation reports what changed between two descriptions of the same +// table, or nil when they are identical (PostgreSQL re-sends an unchanged +// relation after a reconnect, and that is not a DDL change). +func (d *Decoder) diffRelation( + prev, cur *pglogrepl.RelationMessageV2, + lsn pglogrepl.LSN, +) *domain.SchemaChange { + // PostgreSQL sends relation descriptions without a WAL position of their + // own. Fall back to the commit position of the transaction they arrived + // in, so the change can still be ordered against row events. + if lsn == 0 { + lsn = d.txn.finalLSN + } + change := domain.SchemaChange{ + Schema: cur.Namespace, + Table: cur.RelationName, + RelationID: cur.RelationID, + KeyColumns: keyColumns(cur), + PreviousKeyColumns: keyColumns(prev), + ReplicaIdentity: string(cur.ReplicaIdentity), + LSN: lsn.String(), + TransactionID: d.txn.xid, + Timestamp: d.txn.commitTime, + } + + if prev.Namespace != cur.Namespace || prev.RelationName != cur.RelationName { + change.PreviousSchema = prev.Namespace + change.PreviousTable = prev.RelationName + change.Kinds = append(change.Kinds, domain.SchemaChangeTableRenamed) + } + + prevCols := make(map[string]*pglogrepl.RelationMessageColumn, len(prev.Columns)) + for i := range prev.Columns { + prevCols[prev.Columns[i].Name] = prev.Columns[i] + } + curCols := make(map[string]*pglogrepl.RelationMessageColumn, len(cur.Columns)) + for i := range cur.Columns { + curCols[cur.Columns[i].Name] = cur.Columns[i] + } + + // Iterate the relation's own column order so output is deterministic. + for i := range cur.Columns { + col := cur.Columns[i] + before, existed := prevCols[col.Name] + if !existed { + change.AddedColumns = append(change.AddedColumns, d.columnDef(col)) + continue + } + if before.DataType != col.DataType { + change.ChangedColumns = append(change.ChangedColumns, domain.ColumnTypeChange{ + Name: col.Name, + From: d.columnDef(before), + To: d.columnDef(col), + }) + } + } + for i := range prev.Columns { + col := prev.Columns[i] + if _, stillThere := curCols[col.Name]; !stillThere { + change.DroppedColumns = append(change.DroppedColumns, d.columnDef(col)) + } + } + + if len(change.AddedColumns) > 0 { + change.Kinds = append(change.Kinds, domain.SchemaChangeColumnAdded) + } + if len(change.DroppedColumns) > 0 { + change.Kinds = append(change.Kinds, domain.SchemaChangeColumnDropped) + } + if len(change.ChangedColumns) > 0 { + change.Kinds = append(change.Kinds, domain.SchemaChangeColumnTypeChanged) + } + if prev.ReplicaIdentity != cur.ReplicaIdentity { + change.PreviousReplicaIdentity = string(prev.ReplicaIdentity) + change.Kinds = append(change.Kinds, domain.SchemaChangeReplicaIdentity) + } else if !equalStrings(change.PreviousKeyColumns, change.KeyColumns) { + // The identity setting is unchanged but its columns are not: the + // primary key or the identity index itself was altered. + change.Kinds = append(change.Kinds, domain.SchemaChangeKeyChanged) + } + + if len(change.Kinds) == 0 { + return nil + } + return &change +} + +func (d *Decoder) columnDef(col *pglogrepl.RelationMessageColumn) domain.ColumnDef { + return domain.ColumnDef{ + Name: col.Name, + Type: d.typeName(col.DataType), + TypeOID: col.DataType, + PartOfKey: col.Flags&1 == 1, + } +} + +// typeName resolves a type OID to its PostgreSQL name, falling back to the +// raw OID for types the client does not know (extensions, user-defined types). +func (d *Decoder) typeName(oid uint32) string { + if dt, ok := d.typeMap.TypeForOID(oid); ok { + return dt.Name + } + return fmt.Sprintf("oid:%d", oid) +} + +// keyColumns returns the columns PostgreSQL marks as the replica identity. +func keyColumns(rel *pglogrepl.RelationMessageV2) []string { + var keys []string + for i := range rel.Columns { + if rel.Columns[i].Flags&1 == 1 { + keys = append(keys, rel.Columns[i].Name) + } + } + return keys +} + +func equalStrings(a, b []string) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} + func (d *Decoder) relation(relationID uint32) (*pglogrepl.RelationMessageV2, error) { rel, ok := d.relations[relationID] if !ok { diff --git a/internal/adapters/primary/wal/reader.go b/internal/adapters/primary/wal/reader.go index 35640d9..05cd442 100644 --- a/internal/adapters/primary/wal/reader.go +++ b/internal/adapters/primary/wal/reader.go @@ -35,6 +35,9 @@ type Config struct { // Controller, when set, interleaves backfill chunks with the live // stream (see ports.BackfillController). Controller ports.BackfillController + // SchemaObserver, when set, is notified of DDL changes detected on + // published tables. + SchemaObserver ports.SchemaObserver // StreamStarted, when set, is called after replication is (re)established. // slotCreated reports whether this run created the replication slot — // true only on the very first start against a fresh database. @@ -408,6 +411,15 @@ func (r *Reader) streamLoop(ctx context.Context, handler ports.WALEventHandler) return fmt.Errorf("decode failed: %w", err) } + // Schema changes are advisory and never fail the stream: they + // cannot be re-derived on redelivery, so a failing observer would + // stall replication forever without recovering the notification. + if r.config.SchemaObserver != nil { + for _, change := range result.SchemaChanges { + r.config.SchemaObserver.OnSchemaChange(ctx, change) + } + } + for _, event := range result.Events { r.logger.Debug("event received", slog.String("operation", event.Operation.String()), diff --git a/internal/adapters/primary/wal/schema_test.go b/internal/adapters/primary/wal/schema_test.go new file mode 100644 index 0000000..f45e937 --- /dev/null +++ b/internal/adapters/primary/wal/schema_test.go @@ -0,0 +1,217 @@ +package wal + +import ( + "slices" + "strings" + "testing" + + "github.com/emoss08/gtc/internal/core/domain" + "github.com/jackc/pglogrepl" + "github.com/jackc/pgx/v5/pgtype" +) + +// rel builds a relation description; use key() for columns in the replica +// identity and plain() for the rest. +func rel(namespace, name string, identity uint8, cols ...column) *pglogrepl.RelationMessageV2 { + msg := &pglogrepl.RelationMessageV2{ + RelationMessage: pglogrepl.RelationMessage{ + RelationID: 42, + Namespace: namespace, + RelationName: name, + ReplicaIdentity: identity, + }, + } + for _, c := range cols { + var flags uint8 + if c.key { + flags = 1 + } + msg.Columns = append(msg.Columns, &pglogrepl.RelationMessageColumn{ + Name: c.name, + DataType: c.oid, + Flags: flags, + }) + } + return msg +} + +type column struct { + name string + oid uint32 + key bool +} + +func key(name string, oid uint32) column { return column{name: name, oid: oid, key: true} } +func plain(name string, oid uint32) column { return column{name: name, oid: oid} } + +const identityDefault, identityFull = 'd', 'f' + +func diff(prev, cur *pglogrepl.RelationMessageV2) *domain.SchemaChange { + return NewDecoder().diffRelation(prev, cur, pglogrepl.LSN(0x1000)) +} + +func TestDiffDetectsAddedColumn(t *testing.T) { + change := diff( + rel("public", "users", identityDefault, key("id", pgtype.Int4OID)), + rel("public", "users", identityDefault, key("id", pgtype.Int4OID), plain("email", pgtype.TextOID)), + ) + if change == nil { + t.Fatal("adding a column must be reported") + } + if !slices.Equal(change.Kinds, []string{domain.SchemaChangeColumnAdded}) { + t.Fatalf("kinds = %v", change.Kinds) + } + if len(change.AddedColumns) != 1 || change.AddedColumns[0].Name != "email" { + t.Fatalf("added = %+v", change.AddedColumns) + } + if got := change.AddedColumns[0].Type; got != "text" { + t.Errorf("type name = %q, want text", got) + } + if change.Breaking() { + t.Error("adding a column is additive and must not be flagged breaking") + } +} + +func TestDiffDetectsDroppedAndRetypedColumns(t *testing.T) { + change := diff( + rel("public", "users", identityDefault, + key("id", pgtype.Int4OID), plain("nickname", pgtype.TextOID), plain("age", pgtype.Int4OID)), + rel("public", "users", identityDefault, + key("id", pgtype.Int4OID), plain("age", pgtype.Int8OID)), + ) + if change == nil { + t.Fatal("dropping and retyping columns must be reported") + } + if len(change.DroppedColumns) != 1 || change.DroppedColumns[0].Name != "nickname" { + t.Errorf("dropped = %+v", change.DroppedColumns) + } + if len(change.ChangedColumns) != 1 { + t.Fatalf("changed = %+v", change.ChangedColumns) + } + got := change.ChangedColumns[0] + if got.Name != "age" || got.From.Type != "int4" || got.To.Type != "int8" { + t.Errorf("type change = %+v", got) + } + if !change.Breaking() { + t.Error("dropping a column must be flagged breaking") + } +} + +func TestDiffDetectsReplicaIdentityChange(t *testing.T) { + change := diff( + rel("public", "users", identityDefault, key("id", pgtype.Int4OID), plain("email", pgtype.TextOID)), + rel("public", "users", identityFull, key("id", pgtype.Int4OID), key("email", pgtype.TextOID)), + ) + if change == nil { + t.Fatal("a replica identity change must be reported") + } + if !slices.Contains(change.Kinds, domain.SchemaChangeReplicaIdentity) { + t.Fatalf("kinds = %v", change.Kinds) + } + if change.PreviousReplicaIdentity != "d" || change.ReplicaIdentity != "f" { + t.Errorf("identity %q -> %q", change.PreviousReplicaIdentity, change.ReplicaIdentity) + } + if !slices.Equal(change.KeyColumns, []string{"id", "email"}) { + t.Errorf("key columns = %v", change.KeyColumns) + } + if !change.Breaking() { + t.Error("a replica identity change alters how rows are addressed; must be breaking") + } +} + +// The identity setting can stay "default" while the primary key itself is +// replaced, which changes how DELETEs identify rows. +func TestDiffDetectsKeyChangeWithSameIdentitySetting(t *testing.T) { + change := diff( + rel("public", "users", identityDefault, key("id", pgtype.Int4OID), plain("uuid", pgtype.UUIDOID)), + rel("public", "users", identityDefault, plain("id", pgtype.Int4OID), key("uuid", pgtype.UUIDOID)), + ) + if change == nil { + t.Fatal("a primary key swap must be reported") + } + if !slices.Contains(change.Kinds, domain.SchemaChangeKeyChanged) { + t.Fatalf("kinds = %v", change.Kinds) + } + if !change.Breaking() { + t.Error("a key change must be breaking") + } +} + +func TestDiffDetectsRename(t *testing.T) { + change := diff( + rel("public", "users", identityDefault, key("id", pgtype.Int4OID)), + rel("app", "accounts", identityDefault, key("id", pgtype.Int4OID)), + ) + if change == nil { + t.Fatal("a rename must be reported") + } + if !slices.Contains(change.Kinds, domain.SchemaChangeTableRenamed) { + t.Fatalf("kinds = %v", change.Kinds) + } + if change.PreviousSchema != "public" || change.PreviousTable != "users" { + t.Errorf("previous = %s.%s", change.PreviousSchema, change.PreviousTable) + } + if change.Schema != "app" || change.Table != "accounts" { + t.Errorf("current = %s.%s", change.Schema, change.Table) + } +} + +// PostgreSQL re-sends the current relation after a reconnect; an identical +// description is not a DDL change and must stay silent. +func TestDiffIgnoresIdenticalRelation(t *testing.T) { + cols := []column{key("id", pgtype.Int4OID), plain("email", pgtype.TextOID)} + if change := diff( + rel("public", "users", identityDefault, cols...), + rel("public", "users", identityDefault, cols...), + ); change != nil { + t.Fatalf("identical relations must not produce a change: %+v", change) + } +} + +// The first relation for a table describes it; there is nothing to diff +// against, so it must not look like a DDL change. +func TestFirstRelationIsNotAChange(t *testing.T) { + d := NewDecoder() + msg := rel("public", "users", identityDefault, key("id", pgtype.Int4OID)) + + body := relationBody(msg.RelationID, msg.Namespace, msg.RelationName, + []relCol{{name: "id", oid: pgtype.Int4OID}}) + result, err := d.decodeWALData(body, 0x1000) + if err != nil { + t.Fatalf("decode: %v", err) + } + if len(result.SchemaChanges) != 0 { + t.Fatalf("first relation reported as a change: %+v", result.SchemaChanges) + } + if _, ok := d.relations[msg.RelationID]; !ok { + t.Error("relation was not remembered for later diffs") + } +} + +func TestUnknownTypeOIDFallsBackToOID(t *testing.T) { + change := diff( + rel("public", "t", identityDefault, key("id", pgtype.Int4OID)), + rel("public", "t", identityDefault, key("id", pgtype.Int4OID), plain("geom", 999999)), + ) + if change == nil || len(change.AddedColumns) != 1 { + t.Fatalf("expected one added column, got %+v", change) + } + if got := change.AddedColumns[0].Type; got != "oid:999999" { + t.Errorf("unknown type = %q, want oid:999999", got) + } +} + +func TestSummaryDescribesTheChange(t *testing.T) { + change := diff( + rel("public", "users", identityDefault, + key("id", pgtype.Int4OID), plain("nickname", pgtype.TextOID), plain("age", pgtype.Int4OID)), + rel("public", "users", identityDefault, + key("id", pgtype.Int4OID), plain("age", pgtype.Int8OID), plain("email", pgtype.TextOID)), + ) + summary := change.Summary() + for _, want := range []string{"added email", "dropped nickname", "age int4->int8"} { + if !strings.Contains(summary, want) { + t.Errorf("summary %q missing %q", summary, want) + } + } +} diff --git a/internal/core/domain/schema.go b/internal/core/domain/schema.go new file mode 100644 index 0000000..150305b --- /dev/null +++ b/internal/core/domain/schema.go @@ -0,0 +1,148 @@ +package domain + +import ( + "fmt" + "strings" + "time" +) + +// Schema-change kinds, used as metric labels and in the JSON payload. +const ( + SchemaChangeColumnAdded = "column_added" + SchemaChangeColumnDropped = "column_dropped" + SchemaChangeColumnTypeChanged = "column_type_changed" + SchemaChangeKeyChanged = "key_changed" + SchemaChangeReplicaIdentity = "replica_identity_changed" + SchemaChangeTableRenamed = "table_renamed" +) + +// ColumnDef describes one column of a published table. +type ColumnDef struct { + Name string `json:"name"` + // Type is the PostgreSQL type name (e.g. "int4", "text"), resolved from + // TypeOID; it falls back to "oid:" for types the client cannot name. + Type string `json:"type"` + TypeOID uint32 `json:"type_oid"` + // PartOfKey reports membership in the replica identity — the columns + // PostgreSQL sends as the old tuple on UPDATE and DELETE. + PartOfKey bool `json:"part_of_key"` +} + +// ColumnTypeChange records a column whose type changed in place. +type ColumnTypeChange struct { + Name string `json:"name"` + From ColumnDef `json:"from"` + To ColumnDef `json:"to"` +} + +// SchemaChange is a DDL change detected on a published table. +// +// PostgreSQL's logical decoding does not emit DDL statements. It does re-send +// a relation description whenever a published table's shape changes, just +// before the next row change for that table, so GTC reports the *effect* of +// the DDL (columns added, dropped, retyped, replica identity, renames) rather +// than the statement text. Several statements that land between two row +// changes are therefore reported as one combined change. +type SchemaChange struct { + Schema string `json:"schema"` + Table string `json:"table"` + // RelationID is PostgreSQL's table OID; it survives renames, which is + // how a rename is told apart from a new table. + RelationID uint32 `json:"relation_id"` + // PreviousSchema and PreviousTable are set only when the table was + // renamed or moved between schemas. + PreviousSchema string `json:"previous_schema,omitempty"` + PreviousTable string `json:"previous_table,omitempty"` + + AddedColumns []ColumnDef `json:"added_columns,omitempty"` + DroppedColumns []ColumnDef `json:"dropped_columns,omitempty"` + ChangedColumns []ColumnTypeChange `json:"changed_columns,omitempty"` + + // KeyColumns is the replica identity after the change; PreviousKeyColumns + // is what it was before. + KeyColumns []string `json:"key_columns,omitempty"` + PreviousKeyColumns []string `json:"previous_key_columns,omitempty"` + // ReplicaIdentity is PostgreSQL's setting: "d" (default), "n" (nothing), + // "f" (full), or "i" (index). + ReplicaIdentity string `json:"replica_identity"` + PreviousReplicaIdentity string `json:"previous_replica_identity,omitempty"` + + // Kinds lists what changed, in a stable order. + Kinds []string `json:"kinds"` + + LSN string `json:"lsn"` + TransactionID uint32 `json:"transaction_id"` + Timestamp time.Time `json:"timestamp"` +} + +func (s *SchemaChange) FullTableName() string { + return fmt.Sprintf("%s.%s", s.Schema, s.Table) +} + +// Breaking reports whether the change can break consumers that already hold +// documents for this table: data disappears (dropped column), is reinterpreted +// (type change), or is addressed differently (key or identity change). +// Adding a column is additive and never breaking. +func (s *SchemaChange) Breaking() bool { + for _, kind := range s.Kinds { + switch kind { + case SchemaChangeColumnDropped, + SchemaChangeColumnTypeChanged, + SchemaChangeKeyChanged, + SchemaChangeReplicaIdentity, + SchemaChangeTableRenamed: + return true + } + } + return false +} + +// Summary is a one-line human-readable description, used in logs and the +// dashboard. +func (s *SchemaChange) Summary() string { + var parts []string + if s.PreviousTable != "" { + parts = append(parts, fmt.Sprintf("renamed from %s.%s", + s.PreviousSchema, s.PreviousTable)) + } + if names := columnNames(s.AddedColumns); len(names) > 0 { + parts = append(parts, "added "+strings.Join(names, ", ")) + } + if names := columnNames(s.DroppedColumns); len(names) > 0 { + parts = append(parts, "dropped "+strings.Join(names, ", ")) + } + for _, c := range s.ChangedColumns { + parts = append(parts, fmt.Sprintf("%s %s->%s", c.Name, c.From.Type, c.To.Type)) + } + if s.PreviousReplicaIdentity != "" { + parts = append(parts, fmt.Sprintf("replica identity %s->%s", + s.PreviousReplicaIdentity, s.ReplicaIdentity)) + } else if slicesDiffer(s.PreviousKeyColumns, s.KeyColumns) { + parts = append(parts, fmt.Sprintf("key [%s]->[%s]", + strings.Join(s.PreviousKeyColumns, " "), strings.Join(s.KeyColumns, " "))) + } + if len(parts) == 0 { + return "no change" + } + return strings.Join(parts, "; ") +} + +func columnNames(cols []ColumnDef) []string { + names := make([]string, 0, len(cols)) + for _, c := range cols { + names = append(names, c.Name) + } + return names +} + +func slicesDiffer(a, b []string) bool { + if len(a) != len(b) { + return true + } + for i := range a { + if a[i] != b[i] { + return true + } + } + return false +} diff --git a/internal/core/ports/schema.go b/internal/core/ports/schema.go new file mode 100644 index 0000000..680ea41 --- /dev/null +++ b/internal/core/ports/schema.go @@ -0,0 +1,17 @@ +package ports + +import ( + "context" + + "github.com/emoss08/gtc/internal/core/domain" +) + +// SchemaObserver is notified when a published table's shape changes. +// +// Observers are advisory: unlike row events, a failing observer must not tear +// down replication, because the change cannot be re-derived on redelivery (a +// reconnect re-sends the current relation description with nothing to diff it +// against). Implementations report their own failures via metrics and logs. +type SchemaObserver interface { + OnSchemaChange(ctx context.Context, change domain.SchemaChange) +} diff --git a/internal/infrastructure/config/config.go b/internal/infrastructure/config/config.go index e043cd7..2a4e5ad 100644 --- a/internal/infrastructure/config/config.go +++ b/internal/infrastructure/config/config.go @@ -26,6 +26,10 @@ type Config struct { // MaskHMACKey keys the hmac256 mask strategy in sink transforms. Empty // means the strategy is unavailable (configs using it fail at startup). MaskHMACKey string + // SchemaEvents publishes detected DDL changes to the Redis stream + // ":schema". Detection, metrics, logging and the + // /api/schema history are always on; this only controls publishing. + SchemaEvents bool } type DLQConfig struct { diff --git a/internal/infrastructure/config/loader.go b/internal/infrastructure/config/loader.go index 4472544..48abe8b 100644 --- a/internal/infrastructure/config/loader.go +++ b/internal/infrastructure/config/loader.go @@ -33,7 +33,8 @@ func Load() (*Config, error) { ChunkDelay: getDuration("CDC_BACKFILL_CHUNK_DELAY", 0), StateTable: backfillStateTable(), }, - MaskHMACKey: os.Getenv("CDC_MASK_HMAC_KEY"), + MaskHMACKey: os.Getenv("CDC_MASK_HMAC_KEY"), + SchemaEvents: getBool("CDC_SCHEMA_EVENTS", true), DLQ: DLQConfig{ Enabled: getBool("CDC_DLQ_ENABLED", true), Threshold: getInt("CDC_DLQ_THRESHOLD", 3), diff --git a/internal/infrastructure/metrics/metrics.go b/internal/infrastructure/metrics/metrics.go index c0b419e..dde1f95 100644 --- a/internal/infrastructure/metrics/metrics.go +++ b/internal/infrastructure/metrics/metrics.go @@ -145,4 +145,22 @@ var ( }, []string{"sink", "status"}, ) + + SchemaChangesTotal = promauto.NewCounterVec( + prometheus.CounterOpts{ + Namespace: "cdc", + Name: "schema_changes_total", + Help: "Detected DDL changes on published tables, by kind", + }, + []string{"schema", "table", "kind"}, + ) + + SchemaPublishErrors = promauto.NewCounterVec( + prometheus.CounterOpts{ + Namespace: "cdc", + Name: "schema_publish_errors_total", + Help: "Failures publishing a schema-change notification", + }, + []string{"target"}, + ) ) diff --git a/internal/infrastructure/schema/publisher.go b/internal/infrastructure/schema/publisher.go new file mode 100644 index 0000000..9dc5782 --- /dev/null +++ b/internal/infrastructure/schema/publisher.go @@ -0,0 +1,102 @@ +package schema + +import ( + "context" + "encoding/json" + "fmt" + "log/slog" + "time" + + "github.com/redis/go-redis/v9" + + "github.com/emoss08/gtc/internal/core/domain" + "github.com/emoss08/gtc/internal/core/ports" + "github.com/emoss08/gtc/internal/infrastructure/metrics" +) + +// publishTimeout bounds a publish so a slow Redis cannot stall the WAL +// stream; schema notifications are advisory and a drop is reported loudly. +const publishTimeout = 5 * time.Second + +// RedisPublisher writes schema changes to a single Redis stream, +// ":schema", so consumers can subscribe to DDL without parsing every +// table's row stream. Ordering relative to row events is conveyed by the LSN +// carried in each entry. +type RedisPublisher struct { + client *redis.Client + stream string + maxLen int64 + logger *slog.Logger +} + +var _ ports.SchemaObserver = (*RedisPublisher)(nil) + +type RedisPublisherParams struct { + URL string + Prefix string + MaxLen int64 + Logger *slog.Logger +} + +func NewRedisPublisher(p RedisPublisherParams) (*RedisPublisher, error) { + opts, err := redis.ParseURL(p.URL) + if err != nil { + return nil, fmt.Errorf("invalid redis URL: %w", err) + } + return &RedisPublisher{ + client: redis.NewClient(opts), + stream: p.Prefix + ":schema", + maxLen: p.MaxLen, + logger: p.Logger.With(slog.String("component", "schema_publisher")), + }, nil +} + +// Stream is the Redis stream key schema changes are written to. +func (p *RedisPublisher) Stream() string { return p.stream } + +func (p *RedisPublisher) OnSchemaChange(ctx context.Context, change domain.SchemaChange) { + payload, err := json.Marshal(change) + if err != nil { + p.fail("marshal schema change", change, err) + return + } + + ctx, cancel := context.WithTimeout(ctx, publishTimeout) + defer cancel() + + if err := p.client.XAdd(ctx, &redis.XAddArgs{ + Stream: p.stream, + MaxLen: p.maxLen, + Approx: true, + Values: map[string]any{ + "table": change.FullTableName(), + "lsn": change.LSN, + "breaking": fmt.Sprint(change.Breaking()), + "payload": string(payload), + }, + }).Err(); err != nil { + p.fail("publish schema change", change, err) + return + } + + p.logger.Debug("schema change published", + slog.String("stream", p.stream), + slog.String("table", change.FullTableName()), + ) +} + +// fail reports a dropped notification. Schema changes are best-effort by +// design (see ports.SchemaObserver), so this never propagates: it must not +// tear down replication, and the change survives in the in-memory history +// and the metrics either way. +func (p *RedisPublisher) fail(what string, change domain.SchemaChange, err error) { + metrics.SchemaPublishErrors.WithLabelValues("redis").Inc() + p.logger.Error("schema change notification dropped", + slog.String("operation", what), + slog.String("table", change.FullTableName()), + slog.String("lsn", change.LSN), + slog.String("error", err.Error()), + ) +} + +func (p *RedisPublisher) Close() error { return p.client.Close() } diff --git a/internal/infrastructure/schema/recorder.go b/internal/infrastructure/schema/recorder.go new file mode 100644 index 0000000..7a75a9c --- /dev/null +++ b/internal/infrastructure/schema/recorder.go @@ -0,0 +1,86 @@ +// Package schema records and publishes DDL changes detected on published +// tables: an in-memory history for the dashboard and API, and an optional +// Redis stream for downstream consumers that need to react to them. +package schema + +import ( + "context" + "log/slog" + "strings" + "sync" + + "github.com/emoss08/gtc/internal/core/domain" + "github.com/emoss08/gtc/internal/core/ports" + "github.com/emoss08/gtc/internal/infrastructure/metrics" +) + +// historyCapacity bounds the in-memory schema history. DDL is rare, so this +// covers a long window while staying trivially small. +const historyCapacity = 200 + +// Recorder keeps recent schema changes, counts them, and logs them — +// breaking changes at WARN so they surface in ordinary log alerting. +type Recorder struct { + mu sync.RWMutex + history []domain.SchemaChange + logger *slog.Logger +} + +var _ ports.SchemaObserver = (*Recorder)(nil) + +func NewRecorder(logger *slog.Logger) *Recorder { + return &Recorder{ + history: make([]domain.SchemaChange, 0, historyCapacity), + logger: logger.With(slog.String("component", "schema")), + } +} + +func (r *Recorder) OnSchemaChange(_ context.Context, change domain.SchemaChange) { + for _, kind := range change.Kinds { + metrics.SchemaChangesTotal.WithLabelValues(change.Schema, change.Table, kind).Inc() + } + + attrs := []any{ + slog.String("table", change.FullTableName()), + slog.String("kinds", strings.Join(change.Kinds, ",")), + slog.String("change", change.Summary()), + slog.String("lsn", change.LSN), + } + if change.Breaking() { + // Consumers holding documents for this table may need attention: + // data was removed, retyped, or is addressed differently now. + r.logger.Warn("breaking schema change detected", attrs...) + } else { + r.logger.Info("schema change detected", attrs...) + } + + r.mu.Lock() + defer r.mu.Unlock() + r.history = append(r.history, change) + if len(r.history) > historyCapacity { + r.history = r.history[len(r.history)-historyCapacity:] + } +} + +// History returns the recorded changes, newest first. +func (r *Recorder) History() []domain.SchemaChange { + r.mu.RLock() + defer r.mu.RUnlock() + + out := make([]domain.SchemaChange, len(r.history)) + for i, change := range r.history { + out[len(r.history)-1-i] = change + } + return out +} + +// Observers fans a change out to several observers in order. +type Observers []ports.SchemaObserver + +var _ ports.SchemaObserver = (Observers)(nil) + +func (o Observers) OnSchemaChange(ctx context.Context, change domain.SchemaChange) { + for _, observer := range o { + observer.OnSchemaChange(ctx, change) + } +} diff --git a/internal/infrastructure/schema/recorder_test.go b/internal/infrastructure/schema/recorder_test.go new file mode 100644 index 0000000..4b04c1e --- /dev/null +++ b/internal/infrastructure/schema/recorder_test.go @@ -0,0 +1,79 @@ +package schema + +import ( + "context" + "fmt" + "io" + "log/slog" + "testing" + + "github.com/emoss08/gtc/internal/core/domain" +) + +func testRecorder() *Recorder { + return NewRecorder(slog.New(slog.NewTextHandler(io.Discard, nil))) +} + +func change(table string, kinds ...string) domain.SchemaChange { + return domain.SchemaChange{Schema: "public", Table: table, Kinds: kinds} +} + +func TestRecorderReturnsNewestFirst(t *testing.T) { + r := testRecorder() + for _, name := range []string{"a", "b", "c"} { + r.OnSchemaChange(context.Background(), change(name, domain.SchemaChangeColumnAdded)) + } + + history := r.History() + if len(history) != 3 { + t.Fatalf("history length = %d, want 3", len(history)) + } + for i, want := range []string{"c", "b", "a"} { + if history[i].Table != want { + t.Errorf("history[%d] = %s, want %s", i, history[i].Table, want) + } + } +} + +func TestRecorderCapsHistory(t *testing.T) { + r := testRecorder() + for i := range historyCapacity + 25 { + r.OnSchemaChange(context.Background(), + change(fmt.Sprintf("t%d", i), domain.SchemaChangeColumnAdded)) + } + + history := r.History() + if len(history) != historyCapacity { + t.Fatalf("history length = %d, want %d", len(history), historyCapacity) + } + // The oldest entries are evicted, so the newest must still be first. + if want := fmt.Sprintf("t%d", historyCapacity+24); history[0].Table != want { + t.Errorf("newest = %s, want %s", history[0].Table, want) + } +} + +// History must hand out a copy: a caller mutating the result (or a concurrent +// append) must not corrupt the recorder's own buffer. +func TestHistoryIsACopy(t *testing.T) { + r := testRecorder() + r.OnSchemaChange(context.Background(), change("users", domain.SchemaChangeColumnAdded)) + + history := r.History() + history[0].Table = "mutated" + + if again := r.History(); again[0].Table != "users" { + t.Errorf("recorder state was mutated through History(): %s", again[0].Table) + } +} + +func TestObserversFanOut(t *testing.T) { + first, second := testRecorder(), testRecorder() + observers := Observers{first, second} + + observers.OnSchemaChange(context.Background(), change("users", domain.SchemaChangeColumnAdded)) + + if len(first.History()) != 1 || len(second.History()) != 1 { + t.Errorf("fan-out missed an observer: %d, %d", + len(first.History()), len(second.History())) + } +} diff --git a/internal/infrastructure/server/schema.go b/internal/infrastructure/server/schema.go new file mode 100644 index 0000000..195785b --- /dev/null +++ b/internal/infrastructure/server/schema.go @@ -0,0 +1,37 @@ +package server + +import ( + "encoding/json" + "net/http" + + "github.com/emoss08/gtc/internal/core/domain" +) + +type schemaChangeResponse struct { + domain.SchemaChange + // Breaking and Summary are derived; the dashboard renders them directly + // instead of reimplementing the rules. + Breaking bool `json:"breaking"` + Summary string `json:"summary"` +} + +// handleSchema returns recently detected DDL changes, newest first. +func (s *Server) handleSchema(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + + changes := []schemaChangeResponse{} + if s.schema != nil { + for _, change := range s.schema.History() { + changes = append(changes, schemaChangeResponse{ + SchemaChange: change, + Breaking: change.Breaking(), + Summary: change.Summary(), + }) + } + } + + _ = json.NewEncoder(w).Encode(map[string]any{ + "total": len(changes), + "changes": changes, + }) +} diff --git a/internal/infrastructure/server/server.go b/internal/infrastructure/server/server.go index a30033d..94c58b0 100644 --- a/internal/infrastructure/server/server.go +++ b/internal/infrastructure/server/server.go @@ -11,6 +11,7 @@ import ( "strings" "time" + "github.com/emoss08/gtc/internal/core/domain" "github.com/emoss08/gtc/internal/core/ports" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" @@ -29,6 +30,12 @@ type Server struct { startedAt time.Time sampler *sampler info InstanceInfo + schema SchemaHistory +} + +// SchemaHistory exposes recently detected DDL changes to the dashboard. +type SchemaHistory interface { + History() []domain.SchemaChange } // InstanceInfo is static build/config context surfaced to the dashboard. @@ -54,6 +61,7 @@ type ServerParams struct { DLQ ports.DLQManager // nil when the DLQ is disabled WAL WALInfo // reader state for /api/stats UI fs.FS // embedded dashboard; nil disables it + Schema SchemaHistory // detected DDL changes; nil disables /api/schema Info InstanceInfo Logger *slog.Logger } @@ -77,6 +85,7 @@ func New(p ServerParams) *Server { startedAt: time.Now(), sampler: newSampler(), info: p.Info, + schema: p.Schema, httpServer: &http.Server{ Addr: fmt.Sprintf(":%d", p.Config.Port), Handler: r, @@ -101,6 +110,7 @@ func (s *Server) registerRoutes() { s.router.Post("/dlq/discard", s.handleDLQDiscard) s.router.Get("/api/stats", s.handleStats) s.router.Get("/api/history", s.handleHistory) + s.router.Get("/api/schema", s.handleSchema) if s.ui != nil { s.router.Get("/*", s.handleUI()) diff --git a/test/integration/integration_test.go b/test/integration/integration_test.go index 01f9a40..ffdc733 100644 --- a/test/integration/integration_test.go +++ b/test/integration/integration_test.go @@ -82,7 +82,7 @@ func TestEndToEnd(t *testing.T) { _, _ = db.Exec(context.Background(), "SELECT pg_drop_replication_slot(slot_name) FROM pg_replication_slots WHERE slot_name = $1", slotName) - _ = rdb.Del(context.Background(), stream).Err() + _ = rdb.Del(context.Background(), stream, prefix+":schema").Err() } cleanup() // leftovers from an aborted previous run t.Cleanup(cleanup) // called after the gateway has been stopped @@ -156,6 +156,41 @@ func TestEndToEnd(t *testing.T) { t.Fatalf("row 4 operations = %v, want %v (per-key order must hold)", ops, want) } + // DDL: PostgreSQL re-describes the table before the next row change, and + // GTC turns that into a schema-change notification. + mustExec(t, ctx, db, fmt.Sprintf("ALTER TABLE %s ADD COLUMN nickname text", table)) + mustExec(t, ctx, db, fmt.Sprintf("ALTER TABLE %s DROP COLUMN email", table)) + mustExec(t, ctx, db, fmt.Sprintf( + "INSERT INTO %s (id, name, nickname) VALUES (5, 'grace', 'amazing grace')", table)) + + ddl := awaitSchemaChange(t, ctx, gw.baseURL, fmt.Sprintf("public.%s", table)) + if !ddl.Breaking { + t.Errorf("dropping a column must be reported as breaking: %+v", ddl) + } + if !slices.Contains(ddl.Kinds, "column_added") || !slices.Contains(ddl.Kinds, "column_dropped") { + t.Errorf("kinds = %v, want both column_added and column_dropped", ddl.Kinds) + } + if len(ddl.AddedColumns) != 1 || ddl.AddedColumns[0].Name != "nickname" { + t.Errorf("added columns = %+v", ddl.AddedColumns) + } + if ddl.AddedColumns[0].Type != "text" { + t.Errorf("added column type = %q, want text", ddl.AddedColumns[0].Type) + } + if len(ddl.DroppedColumns) != 1 || ddl.DroppedColumns[0].Name != "email" { + t.Errorf("dropped columns = %+v", ddl.DroppedColumns) + } + + // The same change reaches the schema notification stream. The recorder + // behind /api/schema and the Redis publisher are independent observers, + // so the API can be ahead of the stream by a few hundred microseconds. + last := awaitSchemaStreamEntry(t, ctx, rdb) + if got := last["table"]; got != "public."+table { + t.Errorf("schema entry table = %v", got) + } + if got := last["breaking"]; got != "true" { + t.Errorf("schema entry breaking = %v, want true", got) + } + // The dashboard's stats endpoint sees the same pipeline. var stats struct { Streaming bool `json:"streaming"` @@ -348,6 +383,62 @@ func awaitEvents( } } +type schemaChange struct { + Schema string `json:"schema"` + Table string `json:"table"` + Kinds []string `json:"kinds"` + Breaking bool `json:"breaking"` + Summary string `json:"summary"` + AddedColumns []column `json:"added_columns"` + DroppedColumns []column `json:"dropped_columns"` +} + +type column struct { + Name string `json:"name"` + Type string `json:"type"` +} + +// awaitSchemaStreamEntry polls the schema notification stream until it has an +// entry, returning the newest one. +func awaitSchemaStreamEntry(t *testing.T, ctx context.Context, rdb *redis.Client) map[string]any { + t.Helper() + deadline := time.Now().Add(30 * time.Second) + for { + msgs, err := rdb.XRange(ctx, prefix+":schema", "-", "+").Result() + if err != nil && err != redis.Nil { + t.Fatalf("xrange schema stream: %v", err) + } + if len(msgs) > 0 { + return msgs[len(msgs)-1].Values + } + if time.Now().After(deadline) { + t.Fatal("no entries on the schema notification stream") + } + time.Sleep(100 * time.Millisecond) + } +} + +// awaitSchemaChange polls /api/schema until a change for the table shows up. +func awaitSchemaChange(t *testing.T, ctx context.Context, baseURL, table string) schemaChange { + t.Helper() + deadline := time.Now().Add(60 * time.Second) + for { + var resp struct { + Changes []schemaChange `json:"changes"` + } + getJSON(t, ctx, baseURL+"/api/schema", &resp) + for _, change := range resp.Changes { + if change.Schema+"."+change.Table == table { + return change + } + } + if time.Now().After(deadline) { + t.Fatalf("timed out waiting for a schema change on %s; saw %+v", table, resp.Changes) + } + time.Sleep(200 * time.Millisecond) + } +} + func eventRowID(p payload) string { if v, ok := p.NewData["id"]; ok { return fmt.Sprint(v) diff --git a/ui/dist/assets/index-BtNhVEm3.js b/ui/dist/assets/index-BtNhVEm3.js deleted file mode 100644 index c8781ed..0000000 --- a/ui/dist/assets/index-BtNhVEm3.js +++ /dev/null @@ -1,49 +0,0 @@ -import{r as ob,a as E,R as Ji,j as f,o as ya,b as Sv,s as Be,_ as ub,n as Te,d as To,e as Zi,u as rb,f as Dc,F as Pr,t as cb,h as fb,i as db,k as mb,l as hb,m as vb,p as gb,q as pb,v as bb,x as yb,y as xb,z as Mo,A as dc,B as ec,C as Ev,D as q,E as Sb,G as Eb,H as Nb,I as zb,J as wc,K as Tb,L as wo,Q as jb,M as Ab}from"./data-DHjwm5_s.js";import{r as Db,c as Nv,R as zv,A as Tv,C as jv,X as Av,Y as Dv,T as wv,a as Cv,t as wb,b as Cb,d as _b,e as _v}from"./charts-Bt2W3tNT.js";(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))r(d);new MutationObserver(d=>{for(const h of d)if(h.type==="childList")for(const g of h.addedNodes)g.tagName==="LINK"&&g.rel==="modulepreload"&&r(g)}).observe(document,{childList:!0,subtree:!0});function u(d){const h={};return d.integrity&&(h.integrity=d.integrity),d.referrerPolicy&&(h.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?h.credentials="include":d.crossOrigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function r(d){if(d.ep)return;d.ep=!0;const h=u(d);fetch(d.href,h)}})();var tc={exports:{}},Vi={},ac={exports:{}},lc={};var Gh;function Mb(){return Gh||(Gh=1,(function(n){function o(j,B){var F=j.length;j.push(B);e:for(;0>>1,L=j[se];if(0>>1;sed(ce,F))Wd(te,ce)?(j[se]=te,j[W]=F,se=W):(j[se]=ce,j[be]=F,se=be);else if(Wd(te,F))j[se]=te,j[W]=F,se=W;else break e}}return B}function d(j,B){var F=j.sortIndex-B.sortIndex;return F!==0?F:j.id-B.id}if(n.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var h=performance;n.unstable_now=function(){return h.now()}}else{var g=Date,y=g.now();n.unstable_now=function(){return g.now()-y}}var N=[],S=[],O=1,v=null,C=3,H=!1,R=!1,U=!1,k=!1,G=typeof setTimeout=="function"?setTimeout:null,Z=typeof clearTimeout=="function"?clearTimeout:null,K=typeof setImmediate<"u"?setImmediate:null;function P(j){for(var B=u(S);B!==null;){if(B.callback===null)r(S);else if(B.startTime<=j)r(S),B.sortIndex=B.expirationTime,o(N,B);else break;B=u(S)}}function ee(j){if(U=!1,P(j),!R)if(u(N)!==null)R=!0,oe||(oe=!0,le());else{var B=u(S);B!==null&&Re(ee,B.startTime-j)}}var oe=!1,fe=-1,Y=5,pe=-1;function mt(){return k?!0:!(n.unstable_now()-pej&&mt());){var se=v.callback;if(typeof se=="function"){v.callback=null,C=v.priorityLevel;var L=se(v.expirationTime<=j);if(j=n.unstable_now(),typeof L=="function"){v.callback=L,P(j),B=!0;break t}v===u(N)&&r(N),P(j)}else r(N);v=u(N)}if(v!==null)B=!0;else{var Ae=u(S);Ae!==null&&Re(ee,Ae.startTime-j),B=!1}}break e}finally{v=null,C=F,H=!1}B=void 0}}finally{B?le():oe=!1}}}var le;if(typeof K=="function")le=function(){K(ke)};else if(typeof MessageChannel<"u"){var it=new MessageChannel,Le=it.port2;it.port1.onmessage=ke,le=function(){Le.postMessage(null)}}else le=function(){G(ke,0)};function Re(j,B){fe=G(function(){j(n.unstable_now())},B)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(j){j.callback=null},n.unstable_forceFrameRate=function(j){0>j||125se?(j.sortIndex=F,o(S,j),u(N)===null&&j===u(S)&&(U?(Z(fe),fe=-1):U=!0,Re(ee,F-se))):(j.sortIndex=L,o(N,j),R||H||(R=!0,oe||(oe=!0,le()))),j},n.unstable_shouldYield=mt,n.unstable_wrapCallback=function(j){var B=C;return function(){var F=C;C=B;try{return j.apply(this,arguments)}finally{C=F}}}})(lc)),lc}var Vh;function Ob(){return Vh||(Vh=1,ac.exports=Mb()),ac.exports}var Xh;function Rb(){if(Xh)return Vi;Xh=1;var n=Ob(),o=ob(),u=Db();function r(e){var t="https://react.dev/errors/"+e;if(1L||(e.current=se[L],se[L]=null,L--)}function ce(e,t){L++,se[L]=e.current,e.current=t}var W=Ae(null),te=Ae(null),ne=Ae(null),qe=Ae(null);function ht(e,t){switch(ce(ne,t),ce(te,e),ce(W,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?fh(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=fh(t),e=dh(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}be(W),ce(W,e)}function ae(){be(W),be(te),be(ne)}function Vt(e){e.memoizedState!==null&&ce(qe,e);var t=W.current,a=dh(t,e.type);t!==a&&(ce(te,e),ce(W,a))}function St(e){te.current===e&&(be(W),be(te)),qe.current===e&&(be(qe),Li._currentValue=F)}var Et,Xt;function vt(e){if(Et===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);Et=t&&t[1]||"",Xt=-1)":-1i||p[l]!==T[i]){var w=` -`+p[l].replace(" at new "," at ");return e.displayName&&w.includes("")&&(w=w.replace("",e.displayName)),w}while(1<=l&&0<=i);break}}}finally{$n=!1,Error.prepareStackTrace=a}return(a=e?e.displayName||e.name:"")?vt(a):""}function zl(e,t){switch(e.tag){case 26:case 27:case 5:return vt(e.type);case 16:return vt("Lazy");case 13:return e.child!==t&&t!==null?vt("Suspense Fallback"):vt("Suspense");case 19:return vt("SuspenseList");case 0:case 15:return Wl(e.type,!1);case 11:return Wl(e.type.render,!1);case 1:return Wl(e.type,!0);case 31:return vt("Activity");default:return""}}function Wn(e){try{var t="",a=null;do t+=zl(e,a),a=e,e=e.return;while(e);return t}catch(l){return` -Error generating stack: `+l.message+` -`+l.stack}}var Mt=Object.prototype.hasOwnProperty,In=n.unstable_scheduleCallback,Pn=n.unstable_cancelCallback,st=n.unstable_shouldYield,$i=n.unstable_requestPaint,Ze=n.unstable_now,Go=n.unstable_getCurrentPriorityLevel,Wi=n.unstable_ImmediatePriority,Tl=n.unstable_UserBlockingPriority,Il=n.unstable_NormalPriority,Ii=n.unstable_LowPriority,Pl=n.unstable_IdlePriority,Za=n.log,Pi=n.unstable_setDisableYieldValue,Qt=null,pt=null;function ra(e){if(typeof Za=="function"&&Pi(e),pt&&typeof pt.setStrictMode=="function")try{pt.setStrictMode(Qt,e)}catch{}}var gt=Math.clz32?Math.clz32:Vo,es=Math.log,Zt=Math.LN2;function Vo(e){return e>>>=0,e===0?32:31-(es(e)/Zt|0)|0}var Ka=256,Ot=262144,jl=4194304;function xa(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Al(e,t,a){var l=e.pendingLanes;if(l===0)return 0;var i=0,s=e.suspendedLanes,c=e.pingedLanes;e=e.warmLanes;var m=l&134217727;return m!==0?(l=m&~s,l!==0?i=xa(l):(c&=m,c!==0?i=xa(c):a||(a=m&~e,a!==0&&(i=xa(a))))):(m=l&~s,m!==0?i=xa(m):c!==0?i=xa(c):a||(a=l&~e,a!==0&&(i=xa(a)))),i===0?0:t!==0&&t!==i&&(t&s)===0&&(s=i&-i,a=t&-t,s>=a||s===32&&(a&4194048)!==0)?t:i}function Ja(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function ie(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ve(){var e=jl;return jl<<=1,(jl&62914560)===0&&(jl=4194304),e}function Ke(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function Je(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Dl(e,t,a,l,i,s){var c=e.pendingLanes;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=a,e.entangledLanes&=a,e.errorRecoveryDisabledLanes&=a,e.shellSuspendCounter=0;var m=e.entanglements,p=e.expirationTimes,T=e.hiddenUpdates;for(a=c&~a;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var t0=/[\n"\\]/g;function Jt(e){return e.replace(t0,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Ko(e,t,a,l,i,s,c,m){e.name="",c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?e.type=c:e.removeAttribute("type"),t!=null?c==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Kt(t)):e.value!==""+Kt(t)&&(e.value=""+Kt(t)):c!=="submit"&&c!=="reset"||e.removeAttribute("value"),t!=null?Jo(e,c,Kt(t)):a!=null?Jo(e,c,Kt(a)):l!=null&&e.removeAttribute("value"),i==null&&s!=null&&(e.defaultChecked=!!s),i!=null&&(e.checked=i&&typeof i!="function"&&typeof i!="symbol"),m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"?e.name=""+Kt(m):e.removeAttribute("name")}function nf(e,t,a,l,i,s,c,m){if(s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"&&(e.type=s),t!=null||a!=null){if(!(s!=="submit"&&s!=="reset"||t!=null)){Zo(e);return}a=a!=null?""+Kt(a):"",t=t!=null?""+Kt(t):a,m||t===e.value||(e.value=t),e.defaultValue=t}l=l??i,l=typeof l!="function"&&typeof l!="symbol"&&!!l,e.checked=m?e.checked:!!l,e.defaultChecked=!!l,c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"&&(e.name=c),Zo(e)}function Jo(e,t,a){t==="number"&&ls(e.ownerDocument)===e||e.defaultValue===""+a||(e.defaultValue=""+a)}function on(e,t,a,l){if(e=e.options,t){t={};for(var i=0;i"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Po=!1;if(Na)try{var li={};Object.defineProperty(li,"passive",{get:function(){Po=!0}}),window.addEventListener("test",li,li),window.removeEventListener("test",li,li)}catch{Po=!1}var $a=null,eu=null,is=null;function df(){if(is)return is;var e,t=eu,a=t.length,l,i="value"in $a?$a.value:$a.textContent,s=i.length;for(e=0;e=si),bf=" ",yf=!1;function xf(e,t){switch(e){case"keyup":return w0.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Sf(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var fn=!1;function _0(e,t){switch(e){case"compositionend":return Sf(t);case"keypress":return t.which!==32?null:(yf=!0,bf);case"textInput":return e=t.data,e===bf&&yf?null:e;default:return null}}function M0(e,t){if(fn)return e==="compositionend"||!iu&&xf(e,t)?(e=df(),is=eu=$a=null,fn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-e};e=l}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=wf(a)}}function _f(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?_f(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Mf(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=ls(e.document);t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=ls(e.document)}return t}function uu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var q0=Na&&"documentMode"in document&&11>=document.documentMode,dn=null,ru=null,ci=null,cu=!1;function Of(e,t,a){var l=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;cu||dn==null||dn!==ls(l)||(l=dn,"selectionStart"in l&&uu(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),ci&&ri(ci,l)||(ci=l,l=Is(ru,"onSelect"),0>=c,i-=c,ca=1<<32-gt(t)+i|a<re?(ge=J,J=null):ge=J.sibling;var Se=A(x,J,z[re],_);if(Se===null){J===null&&(J=ge);break}e&&J&&Se.alternate===null&&t(x,J),b=s(Se,b,re),xe===null?$=Se:xe.sibling=Se,xe=Se,J=ge}if(re===z.length)return a(x,J),ye&&Ta(x,re),$;if(J===null){for(;rere?(ge=J,J=null):ge=J.sibling;var bl=A(x,J,Se.value,_);if(bl===null){J===null&&(J=ge);break}e&&J&&bl.alternate===null&&t(x,J),b=s(bl,b,re),xe===null?$=bl:xe.sibling=bl,xe=bl,J=ge}if(Se.done)return a(x,J),ye&&Ta(x,re),$;if(J===null){for(;!Se.done;re++,Se=z.next())Se=M(x,Se.value,_),Se!==null&&(b=s(Se,b,re),xe===null?$=Se:xe.sibling=Se,xe=Se);return ye&&Ta(x,re),$}for(J=l(J);!Se.done;re++,Se=z.next())Se=D(J,x,re,Se.value,_),Se!==null&&(e&&Se.alternate!==null&&J.delete(Se.key===null?re:Se.key),b=s(Se,b,re),xe===null?$=Se:xe.sibling=Se,xe=Se);return e&&J.forEach(function(sb){return t(x,sb)}),ye&&Ta(x,re),$}function Ce(x,b,z,_){if(typeof z=="object"&&z!==null&&z.type===U&&z.key===null&&(z=z.props.children),typeof z=="object"&&z!==null){switch(z.$$typeof){case H:e:{for(var $=z.key;b!==null;){if(b.key===$){if($=z.type,$===U){if(b.tag===7){a(x,b.sibling),_=i(b,z.props.children),_.return=x,x=_;break e}}else if(b.elementType===$||typeof $=="object"&&$!==null&&$.$$typeof===Y&&ql($)===b.type){a(x,b.sibling),_=i(b,z.props),gi(_,z),_.return=x,x=_;break e}a(x,b);break}else t(x,b);b=b.sibling}z.type===U?(_=Ul(z.props.children,x.mode,_,z.key),_.return=x,x=_):(_=vs(z.type,z.key,z.props,null,x.mode,_),gi(_,z),_.return=x,x=_)}return c(x);case R:e:{for($=z.key;b!==null;){if(b.key===$)if(b.tag===4&&b.stateNode.containerInfo===z.containerInfo&&b.stateNode.implementation===z.implementation){a(x,b.sibling),_=i(b,z.children||[]),_.return=x,x=_;break e}else{a(x,b);break}else t(x,b);b=b.sibling}_=pu(z,x.mode,_),_.return=x,x=_}return c(x);case Y:return z=ql(z),Ce(x,b,z,_)}if(Re(z))return Q(x,b,z,_);if(le(z)){if($=le(z),typeof $!="function")throw Error(r(150));return z=$.call(z),I(x,b,z,_)}if(typeof z.then=="function")return Ce(x,b,Es(z),_);if(z.$$typeof===K)return Ce(x,b,bs(x,z),_);Ns(x,z)}return typeof z=="string"&&z!==""||typeof z=="number"||typeof z=="bigint"?(z=""+z,b!==null&&b.tag===6?(a(x,b.sibling),_=i(b,z),_.return=x,x=_):(a(x,b),_=gu(z,x.mode,_),_.return=x,x=_),c(x)):a(x,b)}return function(x,b,z,_){try{vi=0;var $=Ce(x,b,z,_);return Nn=null,$}catch(J){if(J===En||J===xs)throw J;var xe=kt(29,J,null,x.mode);return xe.lanes=_,xe.return=x,xe}}}var Gl=ad(!0),ld=ad(!1),tl=!1;function wu(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Cu(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function al(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ll(e,t,a){var l=e.updateQueue;if(l===null)return null;if(l=l.shared,(Ee&2)!==0){var i=l.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),l.pending=t,t=hs(e),qf(e,null,a),t}return ms(e,l,t,a),hs(e)}function pi(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var l=t.lanes;l&=e.pendingLanes,a|=l,t.lanes=a,bt(e,a)}}function _u(e,t){var a=e.updateQueue,l=e.alternate;if(l!==null&&(l=l.updateQueue,a===l)){var i=null,s=null;if(a=a.firstBaseUpdate,a!==null){do{var c={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};s===null?i=s=c:s=s.next=c,a=a.next}while(a!==null);s===null?i=s=t:s=s.next=t}else i=s=t;a={baseState:l.baseState,firstBaseUpdate:i,lastBaseUpdate:s,shared:l.shared,callbacks:l.callbacks},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}var Mu=!1;function bi(){if(Mu){var e=Sn;if(e!==null)throw e}}function yi(e,t,a,l){Mu=!1;var i=e.updateQueue;tl=!1;var s=i.firstBaseUpdate,c=i.lastBaseUpdate,m=i.shared.pending;if(m!==null){i.shared.pending=null;var p=m,T=p.next;p.next=null,c===null?s=T:c.next=T,c=p;var w=e.alternate;w!==null&&(w=w.updateQueue,m=w.lastBaseUpdate,m!==c&&(m===null?w.firstBaseUpdate=T:m.next=T,w.lastBaseUpdate=p))}if(s!==null){var M=i.baseState;c=0,w=T=p=null,m=s;do{var A=m.lane&-536870913,D=A!==m.lane;if(D?(ve&A)===A:(l&A)===A){A!==0&&A===xn&&(Mu=!0),w!==null&&(w=w.next={lane:0,tag:m.tag,payload:m.payload,callback:null,next:null});e:{var Q=e,I=m;A=t;var Ce=a;switch(I.tag){case 1:if(Q=I.payload,typeof Q=="function"){M=Q.call(Ce,M,A);break e}M=Q;break e;case 3:Q.flags=Q.flags&-65537|128;case 0:if(Q=I.payload,A=typeof Q=="function"?Q.call(Ce,M,A):Q,A==null)break e;M=v({},M,A);break e;case 2:tl=!0}}A=m.callback,A!==null&&(e.flags|=64,D&&(e.flags|=8192),D=i.callbacks,D===null?i.callbacks=[A]:D.push(A))}else D={lane:A,tag:m.tag,payload:m.payload,callback:m.callback,next:null},w===null?(T=w=D,p=M):w=w.next=D,c|=A;if(m=m.next,m===null){if(m=i.shared.pending,m===null)break;D=m,m=D.next,D.next=null,i.lastBaseUpdate=D,i.shared.pending=null}}while(!0);w===null&&(p=M),i.baseState=p,i.firstBaseUpdate=T,i.lastBaseUpdate=w,s===null&&(i.shared.lanes=0),ul|=c,e.lanes=c,e.memoizedState=M}}function nd(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function id(e,t){var a=e.callbacks;if(a!==null)for(e.callbacks=null,e=0;es?s:8;var c=j.T,m={};j.T=m,Wu(e,!1,t,a);try{var p=i(),T=j.S;if(T!==null&&T(m,p),p!==null&&typeof p=="object"&&typeof p.then=="function"){var w=F0(p,l);Ei(e,t,w,Yt(e))}else Ei(e,t,l,Yt(e))}catch(M){Ei(e,t,{then:function(){},status:"rejected",reason:M},Yt())}finally{B.p=s,c!==null&&m.types!==null&&(c.types=m.types),j.T=c}}function tp(){}function Fu(e,t,a,l){if(e.tag!==5)throw Error(r(476));var i=Bd(e).queue;kd(e,i,t,F,a===null?tp:function(){return Hd(e),a(l)})}function Bd(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:F,baseState:F,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:wa,lastRenderedState:F},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:wa,lastRenderedState:a},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Hd(e){var t=Bd(e);t.next===null&&(t=e.alternate.memoizedState),Ei(e,t.next.queue,{},Yt())}function $u(){return rt(Li)}function Ld(){return Qe().memoizedState}function qd(){return Qe().memoizedState}function ap(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var a=Yt();e=al(a);var l=ll(t,e,a);l!==null&&(Ct(l,t,a),pi(l,t,a)),t={cache:Tu()},e.payload=t;return}t=t.return}}function lp(e,t,a){var l=Yt();a={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Os(e)?Gd(t,a):(a=hu(e,t,a,l),a!==null&&(Ct(a,e,l),Vd(a,t,l)))}function Yd(e,t,a){var l=Yt();Ei(e,t,a,l)}function Ei(e,t,a,l){var i={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(Os(e))Gd(t,i);else{var s=e.alternate;if(e.lanes===0&&(s===null||s.lanes===0)&&(s=t.lastRenderedReducer,s!==null))try{var c=t.lastRenderedState,m=s(c,a);if(i.hasEagerState=!0,i.eagerState=m,Ut(m,c))return ms(e,t,i,0),_e===null&&ds(),!1}catch{}if(a=hu(e,t,i,l),a!==null)return Ct(a,e,l),Vd(a,t,l),!0}return!1}function Wu(e,t,a,l){if(l={lane:2,revertLane:wr(),gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Os(e)){if(t)throw Error(r(479))}else t=hu(e,a,l,2),t!==null&&Ct(t,e,2)}function Os(e){var t=e.alternate;return e===ue||t!==null&&t===ue}function Gd(e,t){Tn=js=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function Vd(e,t,a){if((a&4194048)!==0){var l=t.lanes;l&=e.pendingLanes,a|=l,t.lanes=a,bt(e,a)}}var Ni={readContext:rt,use:ws,useCallback:Ye,useContext:Ye,useEffect:Ye,useImperativeHandle:Ye,useLayoutEffect:Ye,useInsertionEffect:Ye,useMemo:Ye,useReducer:Ye,useRef:Ye,useState:Ye,useDebugValue:Ye,useDeferredValue:Ye,useTransition:Ye,useSyncExternalStore:Ye,useId:Ye,useHostTransitionStatus:Ye,useFormState:Ye,useActionState:Ye,useOptimistic:Ye,useMemoCache:Ye,useCacheRefresh:Ye};Ni.useEffectEvent=Ye;var Xd={readContext:rt,use:ws,useCallback:function(e,t){return yt().memoizedState=[e,t===void 0?null:t],e},useContext:rt,useEffect:Ad,useImperativeHandle:function(e,t,a){a=a!=null?a.concat([e]):null,_s(4194308,4,_d.bind(null,t,e),a)},useLayoutEffect:function(e,t){return _s(4194308,4,e,t)},useInsertionEffect:function(e,t){_s(4,2,e,t)},useMemo:function(e,t){var a=yt();t=t===void 0?null:t;var l=e();if(Vl){ra(!0);try{e()}finally{ra(!1)}}return a.memoizedState=[l,t],l},useReducer:function(e,t,a){var l=yt();if(a!==void 0){var i=a(t);if(Vl){ra(!0);try{a(t)}finally{ra(!1)}}}else i=t;return l.memoizedState=l.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},l.queue=e,e=e.dispatch=lp.bind(null,ue,e),[l.memoizedState,e]},useRef:function(e){var t=yt();return e={current:e},t.memoizedState=e},useState:function(e){e=Xu(e);var t=e.queue,a=Yd.bind(null,ue,t);return t.dispatch=a,[e.memoizedState,a]},useDebugValue:Ku,useDeferredValue:function(e,t){var a=yt();return Ju(a,e,t)},useTransition:function(){var e=Xu(!1);return e=kd.bind(null,ue,e.queue,!0,!1),yt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,a){var l=ue,i=yt();if(ye){if(a===void 0)throw Error(r(407));a=a()}else{if(a=t(),_e===null)throw Error(r(349));(ve&127)!==0||fd(l,t,a)}i.memoizedState=a;var s={value:a,getSnapshot:t};return i.queue=s,Ad(md.bind(null,l,s,e),[e]),l.flags|=2048,An(9,{destroy:void 0},dd.bind(null,l,s,a,t),null),a},useId:function(){var e=yt(),t=_e.identifierPrefix;if(ye){var a=fa,l=ca;a=(l&~(1<<32-gt(l)-1)).toString(32)+a,t="_"+t+"R_"+a,a=As++,0<\/script>",s=s.removeChild(s.firstChild);break;case"select":s=typeof l.is=="string"?c.createElement("select",{is:l.is}):c.createElement("select"),l.multiple?s.multiple=!0:l.size&&(s.size=l.size);break;default:s=typeof l.is=="string"?c.createElement(i,{is:l.is}):c.createElement(i)}}s[ot]=t,s[zt]=l;e:for(c=t.child;c!==null;){if(c.tag===5||c.tag===6)s.appendChild(c.stateNode);else if(c.tag!==4&&c.tag!==27&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===t)break e;for(;c.sibling===null;){if(c.return===null||c.return===t)break e;c=c.return}c.sibling.return=c.return,c=c.sibling}t.stateNode=s;e:switch(ft(s,i,l),i){case"button":case"input":case"select":case"textarea":l=!!l.autoFocus;break e;case"img":l=!0;break e;default:l=!1}l&&_a(t)}}return Oe(t),fr(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,a),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==l&&_a(t);else{if(typeof l!="string"&&t.stateNode===null)throw Error(r(166));if(e=ne.current,bn(t)){if(e=t.stateNode,a=t.memoizedProps,l=null,i=ut,i!==null)switch(i.tag){case 27:case 5:l=i.memoizedProps}e[ot]=t,e=!!(e.nodeValue===a||l!==null&&l.suppressHydrationWarning===!0||rh(e.nodeValue,a)),e||Pa(t,!0)}else e=Ps(e).createTextNode(l),e[ot]=t,t.stateNode=e}return Oe(t),null;case 31:if(a=t.memoizedState,e===null||e.memoizedState!==null){if(l=bn(t),a!==null){if(e===null){if(!l)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[ot]=t}else kl(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Oe(t),e=!1}else a=Su(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),e=!0;if(!e)return t.flags&256?(Ht(t),t):(Ht(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Oe(t),null;case 13:if(l=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=bn(t),l!==null&&l.dehydrated!==null){if(e===null){if(!i)throw Error(r(318));if(i=t.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(r(317));i[ot]=t}else kl(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Oe(t),i=!1}else i=Su(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(Ht(t),t):(Ht(t),null)}return Ht(t),(t.flags&128)!==0?(t.lanes=a,t):(a=l!==null,e=e!==null&&e.memoizedState!==null,a&&(l=t.child,i=null,l.alternate!==null&&l.alternate.memoizedState!==null&&l.alternate.memoizedState.cachePool!==null&&(i=l.alternate.memoizedState.cachePool.pool),s=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(s=l.memoizedState.cachePool.pool),s!==i&&(l.flags|=2048)),a!==e&&a&&(t.child.flags|=8192),Hs(t,t.updateQueue),Oe(t),null);case 4:return ae(),e===null&&Or(t.stateNode.containerInfo),Oe(t),null;case 10:return Aa(t.type),Oe(t),null;case 19:if(be(Xe),l=t.memoizedState,l===null)return Oe(t),null;if(i=(t.flags&128)!==0,s=l.rendering,s===null)if(i)Ti(l,!1);else{if(Ge!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(s=Ts(e),s!==null){for(t.flags|=128,Ti(l,!1),e=s.updateQueue,t.updateQueue=e,Hs(t,e),t.subtreeFlags=0,e=a,a=t.child;a!==null;)Yf(a,e),a=a.sibling;return ce(Xe,Xe.current&1|2),ye&&Ta(t,l.treeForkCount),t.child}e=e.sibling}l.tail!==null&&Ze()>Vs&&(t.flags|=128,i=!0,Ti(l,!1),t.lanes=4194304)}else{if(!i)if(e=Ts(s),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,Hs(t,e),Ti(l,!0),l.tail===null&&l.tailMode==="hidden"&&!s.alternate&&!ye)return Oe(t),null}else 2*Ze()-l.renderingStartTime>Vs&&a!==536870912&&(t.flags|=128,i=!0,Ti(l,!1),t.lanes=4194304);l.isBackwards?(s.sibling=t.child,t.child=s):(e=l.last,e!==null?e.sibling=s:t.child=s,l.last=s)}return l.tail!==null?(e=l.tail,l.rendering=e,l.tail=e.sibling,l.renderingStartTime=Ze(),e.sibling=null,a=Xe.current,ce(Xe,i?a&1|2:a&1),ye&&Ta(t,l.treeForkCount),e):(Oe(t),null);case 22:case 23:return Ht(t),Ru(),l=t.memoizedState!==null,e!==null?e.memoizedState!==null!==l&&(t.flags|=8192):l&&(t.flags|=8192),l?(a&536870912)!==0&&(t.flags&128)===0&&(Oe(t),t.subtreeFlags&6&&(t.flags|=8192)):Oe(t),a=t.updateQueue,a!==null&&Hs(t,a.retryQueue),a=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),l=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),l!==a&&(t.flags|=2048),e!==null&&be(Ll),null;case 24:return a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Aa($e),Oe(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function up(e,t){switch(yu(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Aa($e),ae(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return St(t),null;case 31:if(t.memoizedState!==null){if(Ht(t),t.alternate===null)throw Error(r(340));kl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Ht(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));kl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return be(Xe),null;case 4:return ae(),null;case 10:return Aa(t.type),null;case 22:case 23:return Ht(t),Ru(),e!==null&&be(Ll),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Aa($e),null;case 25:return null;default:return null}}function hm(e,t){switch(yu(t),t.tag){case 3:Aa($e),ae();break;case 26:case 27:case 5:St(t);break;case 4:ae();break;case 31:t.memoizedState!==null&&Ht(t);break;case 13:Ht(t);break;case 19:be(Xe);break;case 10:Aa(t.type);break;case 22:case 23:Ht(t),Ru(),e!==null&&be(Ll);break;case 24:Aa($e)}}function ji(e,t){try{var a=t.updateQueue,l=a!==null?a.lastEffect:null;if(l!==null){var i=l.next;a=i;do{if((a.tag&e)===e){l=void 0;var s=a.create,c=a.inst;l=s(),c.destroy=l}a=a.next}while(a!==i)}}catch(m){ze(t,t.return,m)}}function sl(e,t,a){try{var l=t.updateQueue,i=l!==null?l.lastEffect:null;if(i!==null){var s=i.next;l=s;do{if((l.tag&e)===e){var c=l.inst,m=c.destroy;if(m!==void 0){c.destroy=void 0,i=t;var p=a,T=m;try{T()}catch(w){ze(i,p,w)}}}l=l.next}while(l!==s)}}catch(w){ze(t,t.return,w)}}function vm(e){var t=e.updateQueue;if(t!==null){var a=e.stateNode;try{id(t,a)}catch(l){ze(e,e.return,l)}}}function gm(e,t,a){a.props=Xl(e.type,e.memoizedProps),a.state=e.memoizedState;try{a.componentWillUnmount()}catch(l){ze(e,t,l)}}function Ai(e,t){try{var a=e.ref;if(a!==null){switch(e.tag){case 26:case 27:case 5:var l=e.stateNode;break;case 30:l=e.stateNode;break;default:l=e.stateNode}typeof a=="function"?e.refCleanup=a(l):a.current=l}}catch(i){ze(e,t,i)}}function da(e,t){var a=e.ref,l=e.refCleanup;if(a!==null)if(typeof l=="function")try{l()}catch(i){ze(e,t,i)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(i){ze(e,t,i)}else a.current=null}function pm(e){var t=e.type,a=e.memoizedProps,l=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&l.focus();break e;case"img":a.src?l.src=a.src:a.srcSet&&(l.srcset=a.srcSet)}}catch(i){ze(e,e.return,i)}}function dr(e,t,a){try{var l=e.stateNode;Cp(l,e.type,a,t),l[zt]=t}catch(i){ze(e,e.return,i)}}function bm(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&ml(e.type)||e.tag===4}function mr(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||bm(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&ml(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function hr(e,t,a){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(e,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(e),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=Ea));else if(l!==4&&(l===27&&ml(e.type)&&(a=e.stateNode,t=null),e=e.child,e!==null))for(hr(e,t,a),e=e.sibling;e!==null;)hr(e,t,a),e=e.sibling}function Ls(e,t,a){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(l!==4&&(l===27&&ml(e.type)&&(a=e.stateNode),e=e.child,e!==null))for(Ls(e,t,a),e=e.sibling;e!==null;)Ls(e,t,a),e=e.sibling}function ym(e){var t=e.stateNode,a=e.memoizedProps;try{for(var l=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);ft(t,l,a),t[ot]=e,t[zt]=a}catch(s){ze(e,e.return,s)}}var Ma=!1,Pe=!1,vr=!1,xm=typeof WeakSet=="function"?WeakSet:Set,lt=null;function rp(e,t){if(e=e.containerInfo,kr=so,e=Mf(e),uu(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var l=a.getSelection&&a.getSelection();if(l&&l.rangeCount!==0){a=l.anchorNode;var i=l.anchorOffset,s=l.focusNode;l=l.focusOffset;try{a.nodeType,s.nodeType}catch{a=null;break e}var c=0,m=-1,p=-1,T=0,w=0,M=e,A=null;t:for(;;){for(var D;M!==a||i!==0&&M.nodeType!==3||(m=c+i),M!==s||l!==0&&M.nodeType!==3||(p=c+l),M.nodeType===3&&(c+=M.nodeValue.length),(D=M.firstChild)!==null;)A=M,M=D;for(;;){if(M===e)break t;if(A===a&&++T===i&&(m=c),A===s&&++w===l&&(p=c),(D=M.nextSibling)!==null)break;M=A,A=M.parentNode}M=D}a=m===-1||p===-1?null:{start:m,end:p}}else a=null}a=a||{start:0,end:0}}else a=null;for(Br={focusedElem:e,selectionRange:a},so=!1,lt=t;lt!==null;)if(t=lt,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,lt=e;else for(;lt!==null;){switch(t=lt,s=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(a=0;a title"))),ft(s,l,a),s[ot]=e,at(s),l=s;break e;case"link":var c=jh("link","href",i).get(l+(a.href||""));if(c){for(var m=0;mCe&&(c=Ce,Ce=I,I=c);var x=Cf(m,I),b=Cf(m,Ce);if(x&&b&&(D.rangeCount!==1||D.anchorNode!==x.node||D.anchorOffset!==x.offset||D.focusNode!==b.node||D.focusOffset!==b.offset)){var z=M.createRange();z.setStart(x.node,x.offset),D.removeAllRanges(),I>Ce?(D.addRange(z),D.extend(b.node,b.offset)):(z.setEnd(b.node,b.offset),D.addRange(z))}}}}for(M=[],D=m;D=D.parentNode;)D.nodeType===1&&M.push({element:D,left:D.scrollLeft,top:D.scrollTop});for(typeof m.focus=="function"&&m.focus(),m=0;ma?32:a,j.T=null,a=Er,Er=null;var s=cl,c=Ba;if(et=0,Mn=cl=null,Ba=0,(Ee&6)!==0)throw Error(r(331));var m=Ee;if(Ee|=4,_m(s.current),Dm(s,s.current,c,a),Ee=m,Oi(0,!1),pt&&typeof pt.onPostCommitFiberRoot=="function")try{pt.onPostCommitFiberRoot(Qt,s)}catch{}return!0}finally{B.p=i,j.T=l,Fm(e,t)}}function Wm(e,t,a){t=$t(a,t),t=tr(e.stateNode,t,2),e=ll(e,t,2),e!==null&&(Je(e,2),ma(e))}function ze(e,t,a){if(e.tag===3)Wm(e,e,a);else for(;t!==null;){if(t.tag===3){Wm(t,e,a);break}else if(t.tag===1){var l=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof l.componentDidCatch=="function"&&(rl===null||!rl.has(l))){e=$t(a,e),a=Id(2),l=ll(t,a,2),l!==null&&(Pd(a,l,t,e),Je(l,2),ma(l));break}}t=t.return}}function jr(e,t,a){var l=e.pingCache;if(l===null){l=e.pingCache=new dp;var i=new Set;l.set(t,i)}else i=l.get(t),i===void 0&&(i=new Set,l.set(t,i));i.has(a)||(br=!0,i.add(a),e=pp.bind(null,e,t,a),t.then(e,e))}function pp(e,t,a){var l=e.pingCache;l!==null&&l.delete(t),e.pingedLanes|=e.suspendedLanes&a,e.warmLanes&=~a,_e===e&&(ve&a)===a&&(Ge===4||Ge===3&&(ve&62914560)===ve&&300>Ze()-Gs?(Ee&2)===0&&On(e,0):yr|=a,_n===ve&&(_n=0)),ma(e)}function Im(e,t){t===0&&(t=Ve()),e=Rl(e,t),e!==null&&(Je(e,t),ma(e))}function bp(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),Im(e,a)}function yp(e,t){var a=0;switch(e.tag){case 31:case 13:var l=e.stateNode,i=e.memoizedState;i!==null&&(a=i.retryLane);break;case 19:l=e.stateNode;break;case 22:l=e.stateNode._retryCache;break;default:throw Error(r(314))}l!==null&&l.delete(t),Im(e,a)}function xp(e,t){return In(e,t)}var Fs=null,Un=null,Ar=!1,$s=!1,Dr=!1,dl=0;function ma(e){e!==Un&&e.next===null&&(Un===null?Fs=Un=e:Un=Un.next=e),$s=!0,Ar||(Ar=!0,Ep())}function Oi(e,t){if(!Dr&&$s){Dr=!0;do for(var a=!1,l=Fs;l!==null;){if(e!==0){var i=l.pendingLanes;if(i===0)var s=0;else{var c=l.suspendedLanes,m=l.pingedLanes;s=(1<<31-gt(42|e)+1)-1,s&=i&~(c&~m),s=s&201326741?s&201326741|1:s?s|2:0}s!==0&&(a=!0,ah(l,s))}else s=ve,s=Al(l,l===_e?s:0,l.cancelPendingCommit!==null||l.timeoutHandle!==-1),(s&3)===0||Ja(l,s)||(a=!0,ah(l,s));l=l.next}while(a);Dr=!1}}function Sp(){Pm()}function Pm(){$s=Ar=!1;var e=0;dl!==0&&Mp()&&(e=dl);for(var t=Ze(),a=null,l=Fs;l!==null;){var i=l.next,s=eh(l,t);s===0?(l.next=null,a===null?Fs=i:a.next=i,i===null&&(Un=a)):(a=l,(e!==0||(s&3)!==0)&&($s=!0)),l=i}et!==0&&et!==5||Oi(e),dl!==0&&(dl=0)}function eh(e,t){for(var a=e.suspendedLanes,l=e.pingedLanes,i=e.expirationTimes,s=e.pendingLanes&-62914561;0m)break;var w=p.transferSize,M=p.initiatorType;w&&ch(M)&&(p=p.responseEnd,c+=w*(p"u"?null:document;function Eh(e,t,a){var l=kn;if(l&&typeof t=="string"&&t){var i=Jt(t);i='link[rel="'+e+'"][href="'+i+'"]',typeof a=="string"&&(i+='[crossorigin="'+a+'"]'),Sh.has(i)||(Sh.add(i),e={rel:e,crossOrigin:a,href:t},l.querySelector(i)===null&&(t=l.createElement("link"),ft(t,"link",e),at(t),l.head.appendChild(t)))}}function Yp(e){Ha.D(e),Eh("dns-prefetch",e,null)}function Gp(e,t){Ha.C(e,t),Eh("preconnect",e,t)}function Vp(e,t,a){Ha.L(e,t,a);var l=kn;if(l&&e&&t){var i='link[rel="preload"][as="'+Jt(t)+'"]';t==="image"&&a&&a.imageSrcSet?(i+='[imagesrcset="'+Jt(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(i+='[imagesizes="'+Jt(a.imageSizes)+'"]')):i+='[href="'+Jt(e)+'"]';var s=i;switch(t){case"style":s=Bn(e);break;case"script":s=Hn(e)}aa.has(s)||(e=v({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:e,as:t},a),aa.set(s,e),l.querySelector(i)!==null||t==="style"&&l.querySelector(Bi(s))||t==="script"&&l.querySelector(Hi(s))||(t=l.createElement("link"),ft(t,"link",e),at(t),l.head.appendChild(t)))}}function Xp(e,t){Ha.m(e,t);var a=kn;if(a&&e){var l=t&&typeof t.as=="string"?t.as:"script",i='link[rel="modulepreload"][as="'+Jt(l)+'"][href="'+Jt(e)+'"]',s=i;switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":s=Hn(e)}if(!aa.has(s)&&(e=v({rel:"modulepreload",href:e},t),aa.set(s,e),a.querySelector(i)===null)){switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(Hi(s)))return}l=a.createElement("link"),ft(l,"link",e),at(l),a.head.appendChild(l)}}}function Qp(e,t,a){Ha.S(e,t,a);var l=kn;if(l&&e){var i=nn(l).hoistableStyles,s=Bn(e);t=t||"default";var c=i.get(s);if(!c){var m={loading:0,preload:null};if(c=l.querySelector(Bi(s)))m.loading=5;else{e=v({rel:"stylesheet",href:e,"data-precedence":t},a),(a=aa.get(s))&&Xr(e,a);var p=c=l.createElement("link");at(p),ft(p,"link",e),p._p=new Promise(function(T,w){p.onload=T,p.onerror=w}),p.addEventListener("load",function(){m.loading|=1}),p.addEventListener("error",function(){m.loading|=2}),m.loading|=4,to(c,t,l)}c={type:"stylesheet",instance:c,count:1,state:m},i.set(s,c)}}}function Zp(e,t){Ha.X(e,t);var a=kn;if(a&&e){var l=nn(a).hoistableScripts,i=Hn(e),s=l.get(i);s||(s=a.querySelector(Hi(i)),s||(e=v({src:e,async:!0},t),(t=aa.get(i))&&Qr(e,t),s=a.createElement("script"),at(s),ft(s,"link",e),a.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},l.set(i,s))}}function Kp(e,t){Ha.M(e,t);var a=kn;if(a&&e){var l=nn(a).hoistableScripts,i=Hn(e),s=l.get(i);s||(s=a.querySelector(Hi(i)),s||(e=v({src:e,async:!0,type:"module"},t),(t=aa.get(i))&&Qr(e,t),s=a.createElement("script"),at(s),ft(s,"link",e),a.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},l.set(i,s))}}function Nh(e,t,a,l){var i=(i=ne.current)?eo(i):null;if(!i)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Bn(a.href),a=nn(i).hoistableStyles,l=a.get(t),l||(l={type:"style",instance:null,count:0,state:null},a.set(t,l)),l):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){e=Bn(a.href);var s=nn(i).hoistableStyles,c=s.get(e);if(c||(i=i.ownerDocument||i,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},s.set(e,c),(s=i.querySelector(Bi(e)))&&!s._p&&(c.instance=s,c.state.loading=5),aa.has(e)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},aa.set(e,a),s||Jp(i,e,a,c.state))),t&&l===null)throw Error(r(528,""));return c}if(t&&l!==null)throw Error(r(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Hn(a),a=nn(i).hoistableScripts,l=a.get(t),l||(l={type:"script",instance:null,count:0,state:null},a.set(t,l)),l):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function Bn(e){return'href="'+Jt(e)+'"'}function Bi(e){return'link[rel="stylesheet"]['+e+"]"}function zh(e){return v({},e,{"data-precedence":e.precedence,precedence:null})}function Jp(e,t,a,l){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?l.loading=1:(t=e.createElement("link"),l.preload=t,t.addEventListener("load",function(){return l.loading|=1}),t.addEventListener("error",function(){return l.loading|=2}),ft(t,"link",a),at(t),e.head.appendChild(t))}function Hn(e){return'[src="'+Jt(e)+'"]'}function Hi(e){return"script[async]"+e}function Th(e,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var l=e.querySelector('style[data-href~="'+Jt(a.href)+'"]');if(l)return t.instance=l,at(l),l;var i=v({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return l=(e.ownerDocument||e).createElement("style"),at(l),ft(l,"style",i),to(l,a.precedence,e),t.instance=l;case"stylesheet":i=Bn(a.href);var s=e.querySelector(Bi(i));if(s)return t.state.loading|=4,t.instance=s,at(s),s;l=zh(a),(i=aa.get(i))&&Xr(l,i),s=(e.ownerDocument||e).createElement("link"),at(s);var c=s;return c._p=new Promise(function(m,p){c.onload=m,c.onerror=p}),ft(s,"link",l),t.state.loading|=4,to(s,a.precedence,e),t.instance=s;case"script":return s=Hn(a.src),(i=e.querySelector(Hi(s)))?(t.instance=i,at(i),i):(l=a,(i=aa.get(s))&&(l=v({},a),Qr(l,i)),e=e.ownerDocument||e,i=e.createElement("script"),at(i),ft(i,"link",l),e.head.appendChild(i),t.instance=i);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(l=t.instance,t.state.loading|=4,to(l,a.precedence,e));return t.instance}function to(e,t,a){for(var l=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),i=l.length?l[l.length-1]:null,s=i,c=0;c title"):null)}function Fp(e,t,a){if(a===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Dh(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function $p(e,t,a,l){if(a.type==="stylesheet"&&(typeof l.media!="string"||matchMedia(l.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var i=Bn(l.href),s=t.querySelector(Bi(i));if(s){t=s._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=lo.bind(e),t.then(e,e)),a.state.loading|=4,a.instance=s,at(s);return}s=t.ownerDocument||t,l=zh(l),(i=aa.get(i))&&Xr(l,i),s=s.createElement("link"),at(s);var c=s;c._p=new Promise(function(m,p){c.onload=m,c.onerror=p}),ft(s,"link",l),a.instance=s}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(e.count++,a=lo.bind(e),t.addEventListener("load",a),t.addEventListener("error",a))}}var Zr=0;function Wp(e,t){return e.stylesheets&&e.count===0&&io(e,e.stylesheets),0Zr?50:800)+t);return e.unsuspend=a,function(){e.unsuspend=null,clearTimeout(l),clearTimeout(i)}}:null}function lo(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)io(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var no=null;function io(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,no=new Map,t.forEach(Ip,e),no=null,lo.call(e))}function Ip(e,t){if(!(t.state.loading&4)){var a=no.get(e);if(a)var l=a.get(null);else{a=new Map,no.set(e,a);for(var i=e.querySelectorAll("link[data-precedence],style[data-precedence]"),s=0;s"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(o){console.error(o)}}return n(),tc.exports=Rb(),tc.exports}var kb=Ub();const Bb=n=>n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Hb=n=>n.replace(/^([A-Z])|[\s-_]+(\w)/g,(o,u,r)=>r?r.toUpperCase():u.toLowerCase()),Zh=n=>{const o=Hb(n);return o.charAt(0).toUpperCase()+o.slice(1)},Mv=(...n)=>n.filter((o,u,r)=>!!o&&o.trim()!==""&&r.indexOf(o)===u).join(" ").trim(),Lb=n=>{for(const o in n)if(o.startsWith("aria-")||o==="role"||o==="title")return!0};var qb={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Yb=E.forwardRef(({color:n="currentColor",size:o=24,strokeWidth:u=2,absoluteStrokeWidth:r,className:d="",children:h,iconNode:g,...y},N)=>E.createElement("svg",{ref:N,...qb,width:o,height:o,stroke:n,strokeWidth:r?Number(u)*24/Number(o):u,className:Mv("lucide",d),...!h&&!Lb(y)&&{"aria-hidden":"true"},...y},[...g.map(([S,O])=>E.createElement(S,O)),...Array.isArray(h)?h:[h]]));const He=(n,o)=>{const u=E.forwardRef(({className:r,...d},h)=>E.createElement(Yb,{ref:h,iconNode:o,className:Mv(`lucide-${Bb(Zh(n))}`,`lucide-${n}`,r),...d}));return u.displayName=Zh(n),u};const Gb=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],Ov=He("activity",Gb);const Vb=[["path",{d:"m3 16 4 4 4-4",key:"1co6wj"}],["path",{d:"M7 20V4",key:"1yoxec"}],["path",{d:"m21 8-4-4-4 4",key:"1c9v7m"}],["path",{d:"M17 4v16",key:"7dpous"}]],Xb=He("arrow-down-up",Vb);const Qb=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],Zb=He("arrow-down",Qb);const Kb=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],Jb=He("arrow-up",Kb);const Fb=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]],$b=He("chart-line",Fb);const Wb=[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]],Ib=He("chevrons-up-down",Wb);const Pb=[["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"}]],ey=He("circle-x",Pb);const ty=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 12a9 3 0 0 0 5 2.69",key:"1ui2ym"}],["path",{d:"M21 9.3V5",key:"6k6cib"}],["path",{d:"M3 5v14a9 3 0 0 0 6.47 2.88",key:"i62tjy"}],["path",{d:"M12 12v4h4",key:"1bxaet"}],["path",{d:"M13 20a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L12 16",key:"1f4ei9"}]],Cc=He("database-backup",ty);const ay=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],ly=He("eye",ay);const ny=[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]],iy=He("gauge",ny);const sy=[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]],oy=He("github",sy);const uy=[["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"}]],_c=He("inbox",uy);const ry=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],cy=He("layers",ry);const fy=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],dy=He("layout-dashboard",fy);const my=[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]],hy=He("moon",my);const vy=[["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"}]],Oo=He("refresh-cw",vy);const gy=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],Rv=He("rotate-ccw",gy);const py=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],Uv=He("search",py);const by=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],yy=He("sun",by);const xy=[["path",{d:"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18",key:"gugj83"}]],kv=He("table-2",xy);const Sy=[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]],Ey=He("trash-2",Sy);const Ny=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],zy=He("x",Ny);const Ty=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],jy=He("zap",Ty);var Ay=Object.defineProperty,Mc=(n,o)=>Ay(n,"name",{value:o,configurable:!0});function mc(n,o){if(typeof n=="function")return n(o);n!=null&&(n.current=o)}Mc(mc,"setRef");function Bv(...n){return o=>{let u=!1;const r=n.map(d=>{const h=mc(d,o);return!u&&typeof h=="function"&&(u=!0),h});if(u)return()=>{for(let d=0;dDy(n,"name",{value:o,configurable:!0});function Ro(n){const o=E.forwardRef((u,r)=>{let{children:d,...h}=u,g=null,y=!1;const N=[];hc(d)&&typeof ho=="function"&&(d=ho(d._payload)),E.Children.forEach(d,C=>{if(Yv(C)){y=!0;const H=C;let R="child"in H.props?H.props.child:H.props.children;hc(R)&&typeof ho=="function"&&(R=ho(R._payload)),g=Cy(H,R),N.push(g?.props?.children)}else N.push(C)}),g?g=E.cloneElement(g,void 0,N):!y&&E.Children.count(d)===1&&E.isValidElement(d)&&(g=d);const S=g?qv(g):void 0,O=Jl(r,S);if(!g){if(d||d===0)throw new Error(y?Oy(n):My(n));return d}const v=Lv(h,g.props??{});return g.type!==E.Fragment&&(v.ref=r?O:S),E.cloneElement(g,v)});return o.displayName=`${n}.Slot`,o}oa(Ro,"createSlot");var Oc=Ro("Slot"),Hv=Symbol.for("radix.slottable");function wy(n){const o=oa(u=>"child"in u?u.children(u.child):u.children,"Slottable");return o.displayName=`${n}.Slottable`,o.__radixId=Hv,o}oa(wy,"createSlottable");var Cy=oa((n,o)=>{if("child"in n.props){const u=n.props.child;return E.isValidElement(u)?E.cloneElement(u,void 0,n.props.children(u.props.children)):null}return E.isValidElement(o)?o:null},"getSlottableElementFromSlottable");function Lv(n,o){const u={...o};for(const r in o){const d=n[r],h=o[r];/^on[A-Z]/.test(r)?d&&h?u[r]=(...y)=>{const N=h(...y);return d(...y),N}:d&&(u[r]=d):r==="style"?u[r]={...d,...h}:r==="className"&&(u[r]=[d,h].filter(Boolean).join(" "))}return{...n,...u}}oa(Lv,"mergeProps");function qv(n){let o=Object.getOwnPropertyDescriptor(n.props,"ref")?.get,u=o&&"isReactWarning"in o&&o.isReactWarning;return u?n.ref:(o=Object.getOwnPropertyDescriptor(n,"ref")?.get,u=o&&"isReactWarning"in o&&o.isReactWarning,u?n.props.ref:n.props.ref||n.ref)}oa(qv,"getElementRef");function Yv(n){return E.isValidElement(n)&&typeof n.type=="function"&&"__radixId"in n.type&&n.type.__radixId===Hv}oa(Yv,"isSlottable");var _y=Symbol.for("react.lazy");function hc(n){return n!=null&&typeof n=="object"&&"$$typeof"in n&&n.$$typeof===_y&&"_payload"in n&&Gv(n._payload)}oa(hc,"isLazyComponent");function Gv(n){return typeof n=="object"&&n!==null&&"then"in n}oa(Gv,"isPromiseLike");var My=oa(n=>`${n} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,"createSlotError"),Oy=oa(n=>`${n} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,"createSlottableError"),ho=Ji[" use ".trim().toString()];const Kh=n=>typeof n=="boolean"?`${n}`:n===0?"0":n,Jh=Nv,Vv=(n,o)=>u=>{var r;if(o?.variants==null)return Jh(n,u?.class,u?.className);const{variants:d,defaultVariants:h}=o,g=Object.keys(d).map(S=>{const O=u?.[S],v=h?.[S];if(O===null)return null;const C=Kh(O)||Kh(v);return d[S][C]}),y=u&&Object.entries(u).reduce((S,O)=>{let[v,C]=O;return C===void 0||(S[v]=C),S},{}),N=o==null||(r=o.compoundVariants)===null||r===void 0?void 0:r.reduce((S,O)=>{let{class:v,className:C,...H}=O;return Object.entries(H).every(R=>{let[U,k]=R;return Array.isArray(k)?k.includes({...h,...y}[U]):{...h,...y}[U]===k})?[...S,v,C]:S},[]);return Jh(n,g,N,u?.class,u?.className)},Ry=(n,o)=>{const u=new Array(n.length+o.length);for(let r=0;r({classGroupId:n,validator:o}),Xv=(n=new Map,o=null,u)=>({nextPart:n,validators:o,classGroupId:u}),Co="-",Fh=[],ky="arbitrary..",By=n=>{const o=Ly(n),{conflictingClassGroups:u,conflictingClassGroupModifiers:r}=n;return{getClassGroupId:g=>{if(g.startsWith("[")&&g.endsWith("]"))return Hy(g);const y=g.split(Co),N=y[0]===""&&y.length>1?1:0;return Qv(y,N,o)},getConflictingClassGroupIds:(g,y)=>{if(y){const N=r[g],S=u[g];return N?S?Ry(S,N):N:S||Fh}return u[g]||Fh}}},Qv=(n,o,u)=>{if(n.length-o===0)return u.classGroupId;const d=n[o],h=u.nextPart.get(d);if(h){const S=Qv(n,o+1,h);if(S)return S}const g=u.validators;if(g===null)return;const y=o===0?n.join(Co):n.slice(o).join(Co),N=g.length;for(let S=0;Sn.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const o=n.slice(1,-1),u=o.indexOf(":"),r=o.slice(0,u);return r?ky+r:void 0})(),Ly=n=>{const{theme:o,classGroups:u}=n;return qy(u,o)},qy=(n,o)=>{const u=Xv();for(const r in n){const d=n[r];Rc(d,u,r,o)}return u},Rc=(n,o,u,r)=>{const d=n.length;for(let h=0;h{if(typeof n=="string"){Gy(n,o,u);return}if(typeof n=="function"){Vy(n,o,u,r);return}Xy(n,o,u,r)},Gy=(n,o,u)=>{const r=n===""?o:Zv(o,n);r.classGroupId=u},Vy=(n,o,u,r)=>{if(Qy(n)){Rc(n(r),o,u,r);return}o.validators===null&&(o.validators=[]),o.validators.push(Uy(u,n))},Xy=(n,o,u,r)=>{const d=Object.entries(n),h=d.length;for(let g=0;g{let u=n;const r=o.split(Co),d=r.length;for(let h=0;h"isThemeGetter"in n&&n.isThemeGetter===!0,Zy=n=>{if(n<1)return{get:()=>{},set:()=>{}};let o=0,u=Object.create(null),r=Object.create(null);const d=(h,g)=>{u[h]=g,o++,o>n&&(o=0,r=u,u=Object.create(null))};return{get(h){let g=u[h];if(g!==void 0)return g;if((g=r[h])!==void 0)return d(h,g),g},set(h,g){h in u?u[h]=g:d(h,g)}}},vc="!",$h=":",Ky=[],Wh=(n,o,u,r,d)=>({modifiers:n,hasImportantModifier:o,baseClassName:u,maybePostfixModifierPosition:r,isExternal:d}),Jy=n=>{const{prefix:o,experimentalParseClassName:u}=n;let r=d=>{const h=[];let g=0,y=0,N=0,S;const O=d.length;for(let U=0;UN?S-N:void 0;return Wh(h,H,C,R)};if(o){const d=o+$h,h=r;r=g=>g.startsWith(d)?h(g.slice(d.length)):Wh(Ky,!1,g,void 0,!0)}if(u){const d=r;r=h=>u({className:h,parseClassName:d})}return r},Fy=n=>{const o=new Map;return n.orderSensitiveModifiers.forEach((u,r)=>{o.set(u,1e6+r)}),u=>{const r=[];let d=[];for(let h=0;h0&&(d.sort(),r.push(...d),d=[]),r.push(g)):d.push(g)}return d.length>0&&(d.sort(),r.push(...d)),r}},$y=n=>({cache:Zy(n.cacheSize),parseClassName:Jy(n),sortModifiers:Fy(n),postfixLookupClassGroupIds:Wy(n),...By(n)}),Wy=n=>{const o=Object.create(null),u=n.postfixLookupClassGroups;if(u)for(let r=0;r{const{parseClassName:u,getClassGroupId:r,getConflictingClassGroupIds:d,sortModifiers:h,postfixLookupClassGroupIds:g}=o,y=[],N=n.trim().split(Iy);let S="";for(let O=N.length-1;O>=0;O-=1){const v=N[O],{isExternal:C,modifiers:H,hasImportantModifier:R,baseClassName:U,maybePostfixModifierPosition:k}=u(v);if(C){S=v+(S.length>0?" "+S:S);continue}let G=!!k,Z;if(G){const fe=U.substring(0,k);Z=r(fe);const Y=Z&&g[Z]?r(U):void 0;Y&&Y!==Z&&(Z=Y,G=!1)}else Z=r(U);if(!Z){if(!G){S=v+(S.length>0?" "+S:S);continue}if(Z=r(U),!Z){S=v+(S.length>0?" "+S:S);continue}G=!1}const K=H.length===0?"":H.length===1?H[0]:h(H).join(":"),P=R?K+vc:K,ee=P+Z;if(y.indexOf(ee)>-1)continue;y.push(ee);const oe=d(Z,G);for(let fe=0;fe0?" "+S:S)}return S},e1=(...n)=>{let o=0,u,r,d="";for(;o{if(typeof n=="string")return n;let o,u="";for(let r=0;r{let u,r,d,h;const g=N=>{const S=o.reduce((O,v)=>v(O),n());return u=$y(S),r=u.cache.get,d=u.cache.set,h=y,y(N)},y=N=>{const S=r(N);if(S)return S;const O=Py(N,u);return d(N,O),O};return h=g,(...N)=>h(e1(...N))},a1=[],tt=n=>{const o=u=>u[n]||a1;return o.isThemeGetter=!0,o},Jv=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Fv=/^\((?:(\w[\w-]*):)?(.+)\)$/i,l1=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,n1=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,i1=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,s1=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,o1=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,u1=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,yl=n=>l1.test(n),de=n=>!!n&&!Number.isNaN(Number(n)),ha=n=>!!n&&Number.isInteger(Number(n)),nc=n=>n.endsWith("%")&&de(n.slice(0,-1)),La=n=>n1.test(n),$v=()=>!0,r1=n=>i1.test(n)&&!s1.test(n),Uc=()=>!1,c1=n=>o1.test(n),f1=n=>u1.test(n),d1=n=>!V(n)&&!X(n),m1=n=>n.startsWith("@container")&&(n[10]==="/"&&n[11]!==void 0||n[11]==="s"&&n[16]!==void 0&&n.startsWith("-size/",10)||n[11]==="n"&&n[18]!==void 0&&n.startsWith("-normal/",10)),h1=n=>Nl(n,Pv,Uc),V=n=>Jv.test(n),Kl=n=>Nl(n,eg,r1),Ih=n=>Nl(n,E1,de),v1=n=>Nl(n,ag,$v),g1=n=>Nl(n,tg,Uc),Ph=n=>Nl(n,Wv,Uc),p1=n=>Nl(n,Iv,f1),vo=n=>Nl(n,lg,c1),X=n=>Fv.test(n),Xi=n=>Fl(n,eg),b1=n=>Fl(n,tg),ev=n=>Fl(n,Wv),y1=n=>Fl(n,Pv),x1=n=>Fl(n,Iv),go=n=>Fl(n,lg,!0),S1=n=>Fl(n,ag,!0),Nl=(n,o,u)=>{const r=Jv.exec(n);return r?r[1]?o(r[1]):u(r[2]):!1},Fl=(n,o,u=!1)=>{const r=Fv.exec(n);return r?r[1]?o(r[1]):u:!1},Wv=n=>n==="position"||n==="percentage",Iv=n=>n==="image"||n==="url",Pv=n=>n==="length"||n==="size"||n==="bg-size",eg=n=>n==="length",E1=n=>n==="number",tg=n=>n==="family-name",ag=n=>n==="number"||n==="weight",lg=n=>n==="shadow",N1=()=>{const n=tt("color"),o=tt("font"),u=tt("text"),r=tt("font-weight"),d=tt("tracking"),h=tt("leading"),g=tt("breakpoint"),y=tt("container"),N=tt("spacing"),S=tt("radius"),O=tt("shadow"),v=tt("inset-shadow"),C=tt("text-shadow"),H=tt("drop-shadow"),R=tt("blur"),U=tt("perspective"),k=tt("aspect"),G=tt("ease"),Z=tt("animate"),K=()=>["auto","avoid","all","avoid-page","page","left","right","column"],P=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],ee=()=>[...P(),X,V],oe=()=>["auto","hidden","clip","visible","scroll"],fe=()=>["auto","contain","none"],Y=()=>[X,V,N],pe=()=>[yl,"full","auto",...Y()],mt=()=>[ha,"none","subgrid",X,V],ke=()=>["auto",{span:["full",ha,X,V]},ha,X,V],le=()=>[ha,"auto",X,V],it=()=>["auto","min","max","fr",X,V],Le=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],Re=()=>["start","end","center","stretch","center-safe","end-safe"],j=()=>["auto",...Y()],B=()=>[yl,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...Y()],F=()=>[yl,"screen","full","dvw","lvw","svw","min","max","fit",...Y()],se=()=>[yl,"screen","full","lh","dvh","lvh","svh","min","max","fit",...Y()],L=()=>[n,X,V],Ae=()=>[...P(),ev,Ph,{position:[X,V]}],be=()=>["no-repeat",{repeat:["","x","y","space","round"]}],ce=()=>["auto","cover","contain",y1,h1,{size:[X,V]}],W=()=>[nc,Xi,Kl],te=()=>["","none","full",S,X,V],ne=()=>["",de,Xi,Kl],qe=()=>["solid","dashed","dotted","double"],ht=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],ae=()=>[de,nc,ev,Ph],Vt=()=>["","none",R,X,V],St=()=>["none",de,X,V],Et=()=>["none",de,X,V],Xt=()=>[de,X,V],vt=()=>[yl,"full",...Y()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[La],breakpoint:[La],color:[$v],container:[La],"drop-shadow":[La],ease:["in","out","in-out"],font:[d1],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[La],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[La],shadow:[La],spacing:["px",de],text:[La],"text-shadow":[La],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",yl,V,X,k]}],container:["container"],"container-type":[{"@container":["","normal","size",X,V]}],"container-named":[m1],columns:[{columns:[de,V,X,y]}],"break-after":[{"break-after":K()}],"break-before":[{"break-before":K()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:ee()}],overflow:[{overflow:oe()}],"overflow-x":[{"overflow-x":oe()}],"overflow-y":[{"overflow-y":oe()}],overscroll:[{overscroll:fe()}],"overscroll-x":[{"overscroll-x":fe()}],"overscroll-y":[{"overscroll-y":fe()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:pe()}],"inset-x":[{"inset-x":pe()}],"inset-y":[{"inset-y":pe()}],start:[{"inset-s":pe(),start:pe()}],end:[{"inset-e":pe(),end:pe()}],"inset-bs":[{"inset-bs":pe()}],"inset-be":[{"inset-be":pe()}],top:[{top:pe()}],right:[{right:pe()}],bottom:[{bottom:pe()}],left:[{left:pe()}],visibility:["visible","invisible","collapse"],z:[{z:[ha,"auto",X,V]}],basis:[{basis:[yl,"full","auto",y,...Y()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[de,yl,"auto","initial","none",V]}],grow:[{grow:["",de,X,V]}],shrink:[{shrink:["",de,X,V]}],order:[{order:[ha,"first","last","none",X,V]}],"grid-cols":[{"grid-cols":mt()}],"col-start-end":[{col:ke()}],"col-start":[{"col-start":le()}],"col-end":[{"col-end":le()}],"grid-rows":[{"grid-rows":mt()}],"row-start-end":[{row:ke()}],"row-start":[{"row-start":le()}],"row-end":[{"row-end":le()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":it()}],"auto-rows":[{"auto-rows":it()}],gap:[{gap:Y()}],"gap-x":[{"gap-x":Y()}],"gap-y":[{"gap-y":Y()}],"justify-content":[{justify:[...Le(),"normal"]}],"justify-items":[{"justify-items":[...Re(),"normal"]}],"justify-self":[{"justify-self":["auto",...Re()]}],"align-content":[{content:["normal",...Le()]}],"align-items":[{items:[...Re(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...Re(),{baseline:["","last"]}]}],"place-content":[{"place-content":Le()}],"place-items":[{"place-items":[...Re(),"baseline"]}],"place-self":[{"place-self":["auto",...Re()]}],p:[{p:Y()}],px:[{px:Y()}],py:[{py:Y()}],ps:[{ps:Y()}],pe:[{pe:Y()}],pbs:[{pbs:Y()}],pbe:[{pbe:Y()}],pt:[{pt:Y()}],pr:[{pr:Y()}],pb:[{pb:Y()}],pl:[{pl:Y()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mbs:[{mbs:j()}],mbe:[{mbe:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":Y()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":Y()}],"space-y-reverse":["space-y-reverse"],size:[{size:B()}],"inline-size":[{inline:["auto",...F()]}],"min-inline-size":[{"min-inline":["auto",...F()]}],"max-inline-size":[{"max-inline":["none",...F()]}],"block-size":[{block:["auto",...se()]}],"min-block-size":[{"min-block":["auto",...se()]}],"max-block-size":[{"max-block":["none",...se()]}],w:[{w:[y,"screen",...B()]}],"min-w":[{"min-w":[y,"screen","none",...B()]}],"max-w":[{"max-w":[y,"screen","none","prose",{screen:[g]},...B()]}],h:[{h:["screen","lh",...B()]}],"min-h":[{"min-h":["screen","lh","none",...B()]}],"max-h":[{"max-h":["screen","lh",...B()]}],"font-size":[{text:["base",u,Xi,Kl]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,S1,v1]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",nc,V]}],"font-family":[{font:[b1,g1,o]}],"font-features":[{"font-features":[V]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[d,X,V]}],"line-clamp":[{"line-clamp":[de,"none",X,Ih]}],leading:[{leading:[h,...Y()]}],"list-image":[{"list-image":["none",X,V]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",X,V]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:L()}],"text-color":[{text:L()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...qe(),"wavy"]}],"text-decoration-thickness":[{decoration:[de,"from-font","auto",X,Kl]}],"text-decoration-color":[{decoration:L()}],"underline-offset":[{"underline-offset":[de,"auto",X,V]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:Y()}],"tab-size":[{tab:[ha,X,V]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",X,V]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",X,V]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:Ae()}],"bg-repeat":[{bg:be()}],"bg-size":[{bg:ce()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},ha,X,V],radial:["",X,V],conic:[ha,X,V]},x1,p1]}],"bg-color":[{bg:L()}],"gradient-from-pos":[{from:W()}],"gradient-via-pos":[{via:W()}],"gradient-to-pos":[{to:W()}],"gradient-from":[{from:L()}],"gradient-via":[{via:L()}],"gradient-to":[{to:L()}],rounded:[{rounded:te()}],"rounded-s":[{"rounded-s":te()}],"rounded-e":[{"rounded-e":te()}],"rounded-t":[{"rounded-t":te()}],"rounded-r":[{"rounded-r":te()}],"rounded-b":[{"rounded-b":te()}],"rounded-l":[{"rounded-l":te()}],"rounded-ss":[{"rounded-ss":te()}],"rounded-se":[{"rounded-se":te()}],"rounded-ee":[{"rounded-ee":te()}],"rounded-es":[{"rounded-es":te()}],"rounded-tl":[{"rounded-tl":te()}],"rounded-tr":[{"rounded-tr":te()}],"rounded-br":[{"rounded-br":te()}],"rounded-bl":[{"rounded-bl":te()}],"border-w":[{border:ne()}],"border-w-x":[{"border-x":ne()}],"border-w-y":[{"border-y":ne()}],"border-w-s":[{"border-s":ne()}],"border-w-e":[{"border-e":ne()}],"border-w-bs":[{"border-bs":ne()}],"border-w-be":[{"border-be":ne()}],"border-w-t":[{"border-t":ne()}],"border-w-r":[{"border-r":ne()}],"border-w-b":[{"border-b":ne()}],"border-w-l":[{"border-l":ne()}],"divide-x":[{"divide-x":ne()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":ne()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...qe(),"hidden","none"]}],"divide-style":[{divide:[...qe(),"hidden","none"]}],"border-color":[{border:L()}],"border-color-x":[{"border-x":L()}],"border-color-y":[{"border-y":L()}],"border-color-s":[{"border-s":L()}],"border-color-e":[{"border-e":L()}],"border-color-bs":[{"border-bs":L()}],"border-color-be":[{"border-be":L()}],"border-color-t":[{"border-t":L()}],"border-color-r":[{"border-r":L()}],"border-color-b":[{"border-b":L()}],"border-color-l":[{"border-l":L()}],"divide-color":[{divide:L()}],"outline-style":[{outline:[...qe(),"none","hidden"]}],"outline-offset":[{"outline-offset":[de,X,V]}],"outline-w":[{outline:["",de,Xi,Kl]}],"outline-color":[{outline:L()}],shadow:[{shadow:["","none",O,go,vo]}],"shadow-color":[{shadow:L()}],"inset-shadow":[{"inset-shadow":["none",v,go,vo]}],"inset-shadow-color":[{"inset-shadow":L()}],"ring-w":[{ring:ne()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:L()}],"ring-offset-w":[{"ring-offset":[de,Kl]}],"ring-offset-color":[{"ring-offset":L()}],"inset-ring-w":[{"inset-ring":ne()}],"inset-ring-color":[{"inset-ring":L()}],"text-shadow":[{"text-shadow":["none",C,go,vo]}],"text-shadow-color":[{"text-shadow":L()}],opacity:[{opacity:[de,X,V]}],"mix-blend":[{"mix-blend":[...ht(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ht()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[de]}],"mask-image-linear-from-pos":[{"mask-linear-from":ae()}],"mask-image-linear-to-pos":[{"mask-linear-to":ae()}],"mask-image-linear-from-color":[{"mask-linear-from":L()}],"mask-image-linear-to-color":[{"mask-linear-to":L()}],"mask-image-t-from-pos":[{"mask-t-from":ae()}],"mask-image-t-to-pos":[{"mask-t-to":ae()}],"mask-image-t-from-color":[{"mask-t-from":L()}],"mask-image-t-to-color":[{"mask-t-to":L()}],"mask-image-r-from-pos":[{"mask-r-from":ae()}],"mask-image-r-to-pos":[{"mask-r-to":ae()}],"mask-image-r-from-color":[{"mask-r-from":L()}],"mask-image-r-to-color":[{"mask-r-to":L()}],"mask-image-b-from-pos":[{"mask-b-from":ae()}],"mask-image-b-to-pos":[{"mask-b-to":ae()}],"mask-image-b-from-color":[{"mask-b-from":L()}],"mask-image-b-to-color":[{"mask-b-to":L()}],"mask-image-l-from-pos":[{"mask-l-from":ae()}],"mask-image-l-to-pos":[{"mask-l-to":ae()}],"mask-image-l-from-color":[{"mask-l-from":L()}],"mask-image-l-to-color":[{"mask-l-to":L()}],"mask-image-x-from-pos":[{"mask-x-from":ae()}],"mask-image-x-to-pos":[{"mask-x-to":ae()}],"mask-image-x-from-color":[{"mask-x-from":L()}],"mask-image-x-to-color":[{"mask-x-to":L()}],"mask-image-y-from-pos":[{"mask-y-from":ae()}],"mask-image-y-to-pos":[{"mask-y-to":ae()}],"mask-image-y-from-color":[{"mask-y-from":L()}],"mask-image-y-to-color":[{"mask-y-to":L()}],"mask-image-radial":[{"mask-radial":[X,V]}],"mask-image-radial-from-pos":[{"mask-radial-from":ae()}],"mask-image-radial-to-pos":[{"mask-radial-to":ae()}],"mask-image-radial-from-color":[{"mask-radial-from":L()}],"mask-image-radial-to-color":[{"mask-radial-to":L()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":P()}],"mask-image-conic-pos":[{"mask-conic":[de]}],"mask-image-conic-from-pos":[{"mask-conic-from":ae()}],"mask-image-conic-to-pos":[{"mask-conic-to":ae()}],"mask-image-conic-from-color":[{"mask-conic-from":L()}],"mask-image-conic-to-color":[{"mask-conic-to":L()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:Ae()}],"mask-repeat":[{mask:be()}],"mask-size":[{mask:ce()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",X,V]}],filter:[{filter:["","none",X,V]}],blur:[{blur:Vt()}],brightness:[{brightness:[de,X,V]}],contrast:[{contrast:[de,X,V]}],"drop-shadow":[{"drop-shadow":["","none",H,go,vo]}],"drop-shadow-color":[{"drop-shadow":L()}],grayscale:[{grayscale:["",de,X,V]}],"hue-rotate":[{"hue-rotate":[de,X,V]}],invert:[{invert:["",de,X,V]}],saturate:[{saturate:[de,X,V]}],sepia:[{sepia:["",de,X,V]}],"backdrop-filter":[{"backdrop-filter":["","none",X,V]}],"backdrop-blur":[{"backdrop-blur":Vt()}],"backdrop-brightness":[{"backdrop-brightness":[de,X,V]}],"backdrop-contrast":[{"backdrop-contrast":[de,X,V]}],"backdrop-grayscale":[{"backdrop-grayscale":["",de,X,V]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[de,X,V]}],"backdrop-invert":[{"backdrop-invert":["",de,X,V]}],"backdrop-opacity":[{"backdrop-opacity":[de,X,V]}],"backdrop-saturate":[{"backdrop-saturate":[de,X,V]}],"backdrop-sepia":[{"backdrop-sepia":["",de,X,V]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":Y()}],"border-spacing-x":[{"border-spacing-x":Y()}],"border-spacing-y":[{"border-spacing-y":Y()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",X,V]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[de,"initial",X,V]}],ease:[{ease:["linear","initial",G,X,V]}],delay:[{delay:[de,X,V]}],animate:[{animate:["none",Z,X,V]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[U,X,V]}],"perspective-origin":[{"perspective-origin":ee()}],rotate:[{rotate:St()}],"rotate-x":[{"rotate-x":St()}],"rotate-y":[{"rotate-y":St()}],"rotate-z":[{"rotate-z":St()}],scale:[{scale:Et()}],"scale-x":[{"scale-x":Et()}],"scale-y":[{"scale-y":Et()}],"scale-z":[{"scale-z":Et()}],"scale-3d":["scale-3d"],skew:[{skew:Xt()}],"skew-x":[{"skew-x":Xt()}],"skew-y":[{"skew-y":Xt()}],transform:[{transform:[X,V,"","none","gpu","cpu"]}],"transform-origin":[{origin:ee()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:vt()}],"translate-x":[{"translate-x":vt()}],"translate-y":[{"translate-y":vt()}],"translate-z":[{"translate-z":vt()}],"translate-none":["translate-none"],zoom:[{zoom:[ha,X,V]}],accent:[{accent:L()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:L()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",X,V]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":L()}],"scrollbar-track-color":[{"scrollbar-track":L()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":Y()}],"scroll-mx":[{"scroll-mx":Y()}],"scroll-my":[{"scroll-my":Y()}],"scroll-ms":[{"scroll-ms":Y()}],"scroll-me":[{"scroll-me":Y()}],"scroll-mbs":[{"scroll-mbs":Y()}],"scroll-mbe":[{"scroll-mbe":Y()}],"scroll-mt":[{"scroll-mt":Y()}],"scroll-mr":[{"scroll-mr":Y()}],"scroll-mb":[{"scroll-mb":Y()}],"scroll-ml":[{"scroll-ml":Y()}],"scroll-p":[{"scroll-p":Y()}],"scroll-px":[{"scroll-px":Y()}],"scroll-py":[{"scroll-py":Y()}],"scroll-ps":[{"scroll-ps":Y()}],"scroll-pe":[{"scroll-pe":Y()}],"scroll-pbs":[{"scroll-pbs":Y()}],"scroll-pbe":[{"scroll-pbe":Y()}],"scroll-pt":[{"scroll-pt":Y()}],"scroll-pr":[{"scroll-pr":Y()}],"scroll-pb":[{"scroll-pb":Y()}],"scroll-pl":[{"scroll-pl":Y()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",X,V]}],fill:[{fill:["none",...L()]}],"stroke-w":[{stroke:[de,Xi,Kl,Ih]}],stroke:[{stroke:["none",...L()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},z1=t1(N1);function je(...n){return z1(Nv(n))}const T1=Vv("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none transition-[color,box-shadow] overflow-hidden",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",destructive:"border-transparent bg-destructive/10 text-destructive dark:bg-destructive/20",success:"border-transparent bg-success/10 text-success dark:bg-success/15",warning:"border-transparent bg-warning/15 text-warning",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function ba({className:n,variant:o,asChild:u=!1,...r}){const d=u?Oc:"span";return f.jsx(d,{"data-slot":"badge",className:je(T1({variant:o}),n),...r})}function dt(n){return n==null?"0":n>=1e6?`${(n/1e6).toFixed(1)}M`:n>=1e4?`${(n/1e3).toFixed(1)}k`:Math.round(n).toLocaleString()}function gc(n){if(n==null||n<=0)return"0 B";const o=["B","KiB","MiB","GiB","TiB"];let u=0;for(;n>=1024&&u=100||u===0?0:1)} ${o[u]}`}function ng(n){if(n==null||n<0)return"–";const o=Math.floor(n);return o<60?`${o}s`:o<3600?`${Math.floor(o/60)}m ${o%60}s`:o<86400?`${Math.floor(o/3600)}h ${Math.floor(o%3600/60)}m`:`${Math.floor(o/86400)}d ${Math.floor(o%86400/3600)}h`}function ig(n){return n==null||n<.05?"0/s":n<10?`${n.toFixed(1)}/s`:`${dt(n)}/s`}function kc(n){if(!n)return"–";const o=(Date.now()-new Date(n).getTime())/1e3;return o<60?`${Math.max(0,Math.floor(o))}s ago`:o<3600?`${Math.floor(o/60)}m ago`:o<86400?`${Math.floor(o/3600)}h ago`:`${Math.floor(o/86400)}d ago`}const j1=[{id:"overview",label:"Overview",icon:dy},{id:"tables",label:"Tables",icon:kv},{id:"backfill",label:"Backfill",icon:Cc},{id:"dlq",label:"Dead letters",icon:_c}];function A1(){const o=document.documentElement.classList.toggle("dark");localStorage.setItem("gtc-theme",o?"dark":"light")}function D1({page:n,onNavigate:o,stats:u,offline:r=!1,dlqCount:d,title:h,description:g,actions:y,children:N}){return f.jsxs("div",{className:"flex min-h-screen",children:[f.jsxs("aside",{className:"bg-sidebar text-sidebar-foreground border-sidebar-border fixed inset-y-0 left-0 z-30 flex w-14 flex-col border-r lg:w-56",children:[f.jsxs("div",{className:"flex items-center justify-center gap-2.5 px-2 pt-5 pb-4 lg:justify-start lg:px-4",children:[f.jsx("div",{className:"flex size-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-amber-400 to-orange-500 text-white shadow-sm",children:f.jsx(jy,{className:"size-4.5",fill:"currentColor",strokeWidth:0})}),f.jsxs("div",{className:"hidden leading-tight lg:block",children:[f.jsx("div",{className:"text-sm font-bold tracking-tight",children:"GTC"}),f.jsx("div",{className:"text-sidebar-foreground/60 text-[10px] font-medium tracking-wide uppercase",children:"Change Data Capture"})]})]}),f.jsx("nav",{className:"flex flex-1 flex-col gap-0.5 px-2 pt-2 lg:px-2.5",children:j1.map(({id:S,label:O,icon:v})=>f.jsxs("button",{type:"button",title:O,onClick:()=>o(S),className:je("relative flex cursor-pointer items-center justify-center gap-2.5 rounded-md px-2.5 py-2 text-[13px] font-medium transition-colors lg:justify-start",n===S?"bg-sidebar-accent text-sidebar-accent-foreground":"text-sidebar-foreground/65 hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground"),children:[f.jsx(v,{className:"size-4 shrink-0",strokeWidth:n===S?2.25:2}),f.jsx("span",{className:"hidden flex-1 text-left lg:block",children:O}),S==="dlq"&&d>0&&f.jsxs(f.Fragment,{children:[f.jsx(ba,{variant:"destructive",className:"hidden h-5 min-w-5 px-1.5 tabular-nums lg:inline-flex",children:d}),f.jsx("span",{className:"absolute top-1.5 right-1.5 size-1.5 rounded-full bg-red-500 lg:hidden"})]})]},S))}),f.jsxs("div",{className:"border-sidebar-border hidden space-y-3 border-t px-4 py-4 lg:block",children:[f.jsxs("div",{className:"text-sidebar-foreground/60 flex items-center justify-between text-xs",children:[f.jsxs("span",{className:"flex items-center gap-1.5",children:[f.jsx("span",{className:je("relative flex size-2 rounded-full",u?.streaming?"bg-emerald-500":"bg-red-500"),children:u?.streaming&&f.jsx("span",{className:"absolute inline-flex size-full animate-ping rounded-full bg-emerald-500 opacity-60"})}),u?.streaming?"Streaming":"Disconnected"]}),f.jsx("span",{className:"tabular-nums",children:u?`up ${ng(u.uptime_seconds)}`:""})]}),f.jsxs("div",{className:"text-sidebar-foreground/60 flex items-center gap-1 text-xs",children:[f.jsxs("a",{href:"/metrics",target:"_blank",rel:"noreferrer",className:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground flex items-center gap-1.5 rounded-md px-2 py-1",children:[f.jsx($b,{className:"size-3.5"})," Metrics"]}),f.jsxs("a",{href:"https://github.com/emoss08/gtc",target:"_blank",rel:"noreferrer",className:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground flex items-center gap-1.5 rounded-md px-2 py-1",children:[f.jsx(oy,{className:"size-3.5"})," GitHub"]}),f.jsxs("button",{type:"button",onClick:A1,className:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground ml-auto cursor-pointer rounded-md p-1.5","aria-label":"Toggle theme",children:[f.jsx(yy,{className:"size-3.5 dark:hidden"}),f.jsx(hy,{className:"hidden size-3.5 dark:block"})]})]})]})]}),f.jsxs("div",{className:"ml-14 flex min-w-0 flex-1 flex-col lg:ml-56",children:[r&&f.jsx("div",{className:"bg-destructive/90 sticky top-0 z-30 px-6 py-1.5 text-center text-xs font-medium text-white",children:"Cannot reach GTC — the data below may be stale. Retrying…"}),f.jsx("header",{className:"bg-background/80 sticky top-0 z-20 border-b backdrop-blur",children:f.jsxs("div",{className:"mx-auto flex h-14 w-full max-w-6xl items-center justify-between gap-4 px-6",children:[f.jsxs("div",{className:"min-w-0",children:[f.jsx("h1",{className:"truncate text-[15px] font-semibold tracking-tight",children:h}),f.jsx("p",{className:"text-muted-foreground truncate text-xs",children:g})]}),f.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[u&&f.jsxs(f.Fragment,{children:[f.jsxs(ba,{variant:"outline",className:"text-muted-foreground hidden font-mono text-[11px] sm:inline-flex",children:[f.jsx(Ov,{className:"size-3"}),u.current_lsn]}),f.jsx(ba,{variant:u.ready?"success":"warning",children:u.ready?"Ready":"Not ready"})]}),y]})]})}),f.jsx("main",{className:"mx-auto w-full max-w-6xl flex-1 px-6 py-6",children:N})]})]})}function ga({className:n,...o}){return f.jsx("div",{"data-slot":"card",className:je("bg-card text-card-foreground flex flex-col gap-4 rounded-xl border py-4 shadow-sm",n),...o})}function Xn({className:n,...o}){return f.jsx("div",{"data-slot":"card-header",className:je("flex items-center justify-between gap-2 px-4",n),...o})}function Qn({className:n,...o}){return f.jsx("div",{"data-slot":"card-title",className:je("text-sm leading-none font-semibold tracking-tight",n),...o})}function Qi({className:n,...o}){return f.jsx("div",{"data-slot":"card-description",className:je("text-muted-foreground text-xs",n),...o})}function Ya({className:n,...o}){return f.jsx("div",{"data-slot":"card-content",className:je("px-4",n),...o})}const w1=ya({name:Be(),healthy:To(),breaker_state:Te(),succeeded:Te(),failed:Te(),filtered:Te(),retries:Te(),errors_by_type:Sv(Be(),Te()).nullable().transform(n=>n??{})}),C1=ya({table:Be(),insert:Te(),update:Te(),delete:Te(),read:Te(),truncate:Te(),total:Te()}),_1=ya({schema:Be(),table:Be(),state:ub(["pending","running","done","skipped","failed"]),rows_copied:Te(),started_at:Be().optional().nullable(),completed_at:Be().optional().nullable(),error:Be().optional()}),M1=ya({uptime_seconds:Te(),version:Be().default("dev"),slot_name:Be().default(""),publication:Be().default(""),ready:To(),streaming:To(),current_lsn:Be(),wal_lag_bytes:Te(),inflight:Te(),events_total:Te(),operations:Sv(Be(),Te()).nullable().transform(n=>n??{}),sinks:Zi(w1),tables:Zi(C1),backfill:Zi(_1),dlq:ya({enabled:To(),entries:Te(),parked_total:Te().default(0),retried_total:Te().default(0)})}),O1=ya({interval_seconds:Te(),samples:Zi(ya({t:Te(),events_total:Te(),wal_lag_bytes:Te(),inflight:Te(),dlq_entries:Te()})).nullable().transform(n=>n??[])}),R1=ya({id:Be(),sink:Be(),schema:Be(),table:Be(),operation:Be(),lsn:Be(),error:Be(),attempts:Te(),first_failed_at:Be().optional(),last_failed_at:Be(),event:rb().optional()}),U1=ya({total:Te(),entries:Zi(R1).nullable().transform(n=>n??[])});async function $l(n,o){const u=await fetch(n,{headers:{"Content-Type":"application/json"},...o}),r=await u.json().catch(()=>({}));if(!u.ok)throw new Error(r.error??`${u.status} ${u.statusText}`);return r}const k1=async()=>M1.parse(await $l("/api/stats")),B1=async()=>O1.parse(await $l("/api/history")),H1=async(n=100)=>U1.parse(await $l(`/dlq?limit=${n}`)),L1=n=>$l("/dlq/retry",{method:"POST",body:JSON.stringify({id:n})}),q1=()=>$l("/dlq/retry",{method:"POST",body:JSON.stringify({all:!0})}),Y1=n=>$l("/dlq/discard",{method:"POST",body:JSON.stringify({id:n})}),G1=n=>$l("/backfill",{method:"POST",body:JSON.stringify(n?{table:n}:{all:!0})}),sg=2e3;function V1(){return Dc({queryKey:["stats"],queryFn:k1,refetchInterval:sg})}function X1(){const{data:n,isLoading:o}=Dc({queryKey:["history"],queryFn:B1,refetchInterval:5e3});return{points:E.useMemo(()=>{const r=n?.samples??[],d=[];for(let h=1;h0?Math.max(0,(y.events_total-g.events_total)/N):0;d.push({t:y.t,rate:S,walLag:y.wal_lag_bytes,inflight:y.inflight,dlq:y.dlq_entries})}return d},[n]),isLoading:o}}function Q1(){const[n,o]=E.useState(()=>document.documentElement.classList.contains("dark"));return E.useEffect(()=>{const u=new MutationObserver(()=>{o(document.documentElement.classList.contains("dark"))});return u.observe(document.documentElement,{attributes:!0,attributeFilter:["class"]}),()=>u.disconnect()},[]),n}function Z1(n=!0){return Dc({queryKey:["dlq"],queryFn:()=>H1(200),refetchInterval:sg,enabled:n})}const Bc={INSERT:"#10b981",UPDATE:"#0ea5e9",DELETE:"#ef4444",READ:"#8b5cf6",TRUNCATE:"#f59e0b"};function Uo(){const n=Q1();return{dark:n,grid:n?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",axis:n?"rgba(255,255,255,0.45)":"rgba(0,0,0,0.45)",tooltipBg:n?"#27272a":"#ffffff",tooltipText:n?"#fafafa":"#18181b",tooltipBorder:n?"rgba(255,255,255,0.12)":"rgba(0,0,0,0.1)"}}function _o(n){const o=new Date(n);return`${String(o.getHours()).padStart(2,"0")}:${String(o.getMinutes()).padStart(2,"0")}`}function ko(n){return{backgroundColor:n.tooltipBg,color:n.tooltipText,border:`1px solid ${n.tooltipBorder}`,borderRadius:8,fontSize:12,padding:"6px 10px",boxShadow:"0 4px 12px rgba(0,0,0,0.15)"}}function K1({points:n}){const o=Uo();return f.jsx(zv,{width:"100%",height:220,children:f.jsxs(Tv,{data:n,margin:{top:8,right:8,bottom:0,left:-12},children:[f.jsx("defs",{children:f.jsxs("linearGradient",{id:"rateFill",x1:"0",y1:"0",x2:"0",y2:"1",children:[f.jsx("stop",{offset:"0%",stopColor:"#10b981",stopOpacity:.35}),f.jsx("stop",{offset:"100%",stopColor:"#10b981",stopOpacity:0})]})}),f.jsx(jv,{stroke:o.grid,vertical:!1}),f.jsx(Av,{dataKey:"t",tickFormatter:_o,stroke:o.axis,fontSize:11,tickLine:!1,axisLine:!1,minTickGap:48}),f.jsx(Dv,{stroke:o.axis,fontSize:11,tickLine:!1,axisLine:!1,tickFormatter:u=>dt(u),width:48}),f.jsx(wv,{contentStyle:ko(o),labelFormatter:u=>_o(Number(u)),formatter:u=>[ig(Number(u)),"events"]}),f.jsx(Cv,{type:"monotone",dataKey:"rate",stroke:"#10b981",strokeWidth:2,fill:"url(#rateFill)",isAnimationActive:!1})]})})}function J1({points:n}){const o=Uo();return f.jsx(zv,{width:"100%",height:140,children:f.jsxs(Tv,{data:n,margin:{top:8,right:8,bottom:0,left:8},children:[f.jsx("defs",{children:f.jsxs("linearGradient",{id:"lagFill",x1:"0",y1:"0",x2:"0",y2:"1",children:[f.jsx("stop",{offset:"0%",stopColor:"#f59e0b",stopOpacity:.3}),f.jsx("stop",{offset:"100%",stopColor:"#f59e0b",stopOpacity:0})]})}),f.jsx(jv,{stroke:o.grid,vertical:!1}),f.jsx(Av,{dataKey:"t",tickFormatter:_o,stroke:o.axis,fontSize:11,tickLine:!1,axisLine:!1,minTickGap:48}),f.jsx(Dv,{stroke:o.axis,fontSize:11,tickLine:!1,axisLine:!1,tickFormatter:u=>gc(u),width:64}),f.jsx(wv,{contentStyle:ko(o),labelFormatter:u=>_o(Number(u)),formatter:u=>[gc(Number(u)),"WAL lag"]}),f.jsx(Cv,{type:"monotone",dataKey:"walLag",stroke:"#f59e0b",strokeWidth:2,fill:"url(#lagFill)",isAnimationActive:!1})]})})}function F1({operations:n}){const o=Uo(),u=E.useMemo(()=>Object.entries(n).filter(([,d])=>d>0).sort((d,h)=>h[1]-d[1]).map(([d,h])=>({id:d,label:d,value:h})),[n]),r=u.reduce((d,h)=>d+h.value,0);return u.length===0?f.jsx("div",{className:"text-muted-foreground flex h-[200px] items-center justify-center text-sm",children:"No events yet."}):f.jsxs("div",{className:"relative h-[200px]",children:[f.jsx(wb,{data:u,margin:{top:12,right:12,bottom:12,left:12},innerRadius:.72,padAngle:1.5,cornerRadius:3,colors:d=>Bc[d.id]??"#71717a",enableArcLinkLabels:!1,enableArcLabels:!1,borderWidth:0,isInteractive:!0,animate:!1,tooltip:({datum:d})=>f.jsxs("div",{style:ko(o),className:"flex items-center gap-2 whitespace-nowrap",children:[f.jsx("span",{className:"size-2 rounded-full",style:{backgroundColor:d.color}}),d.id,": ",dt(d.value)," (",r>0?(d.value/r*100).toFixed(1):0,"%)"]})}),f.jsxs("div",{className:"pointer-events-none absolute inset-0 flex flex-col items-center justify-center",children:[f.jsx("div",{className:"text-xl font-semibold tabular-nums",children:dt(r)}),f.jsx("div",{className:"text-muted-foreground text-[11px]",children:"events"})]})]})}function $1({tables:n}){const o=Uo(),u=E.useMemo(()=>n.slice().sort((r,d)=>d.total-r.total).slice(0,8).reverse().map(r=>({table:r.table,INSERT:r.insert,UPDATE:r.update,DELETE:r.delete,READ:r.read,TRUNCATE:r.truncate})),[n]);return u.length===0?f.jsx("div",{className:"text-muted-foreground flex h-[220px] items-center justify-center text-sm",children:"No events yet."}):f.jsx("div",{style:{height:Math.max(180,u.length*34+40)},children:f.jsx(Cb,{data:u,keys:["INSERT","UPDATE","DELETE","READ","TRUNCATE"],indexBy:"table",layout:"horizontal",margin:{top:0,right:16,bottom:28,left:130},padding:.35,colors:({id:r})=>Bc[r]??"#71717a",borderRadius:2,enableLabel:!1,enableGridY:!1,enableGridX:!0,animate:!1,theme:{grid:{line:{stroke:o.grid}},axis:{ticks:{text:{fill:o.axis,fontSize:11}}}},axisBottom:{tickSize:0,tickPadding:8,format:r=>dt(Number(r))},axisLeft:{tickSize:0,tickPadding:8},tooltip:({id:r,value:d,indexValue:h,color:g})=>f.jsxs("div",{style:ko(o),className:"flex items-center gap-2 whitespace-nowrap",children:[f.jsx("span",{className:"size-2 rounded-full",style:{backgroundColor:g}}),h," · ",r,": ",dt(d)]})})})}function og(){return f.jsx("div",{className:"text-muted-foreground flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]",children:Object.entries(Bc).map(([n,o])=>f.jsxs("span",{className:"flex items-center gap-1.5",children:[f.jsx("span",{className:"size-2 rounded-full",style:{backgroundColor:o}}),n]},n))})}function W1({className:n,...o}){return f.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:f.jsx("table",{"data-slot":"table",className:je("w-full caption-bottom text-sm",n),...o})})}function I1({className:n,...o}){return f.jsx("thead",{"data-slot":"table-header",className:je("[&_tr]:border-b",n),...o})}function P1({className:n,...o}){return f.jsx("tbody",{"data-slot":"table-body",className:je("[&_tr:last-child]:border-0",n),...o})}function ic({className:n,...o}){return f.jsx("tr",{"data-slot":"table-row",className:je("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",n),...o})}function ex({className:n,...o}){return f.jsx("th",{"data-slot":"table-head",className:je("text-muted-foreground h-9 px-3 text-left align-middle text-xs font-medium whitespace-nowrap first:pl-4 last:pr-4",n),...o})}function tv({className:n,...o}){return f.jsx("td",{"data-slot":"table-cell",className:je("px-3 py-2.5 align-middle whitespace-nowrap first:pl-4 last:pr-4",n),...o})}function Bo({table:n,empty:o}){const u=n.getRowModel().rows,r=n.getAllLeafColumns().length;return f.jsxs(W1,{children:[f.jsx(I1,{children:n.getHeaderGroups().map(d=>f.jsx(ic,{className:"hover:bg-transparent",children:d.headers.map(h=>{const g=h.column.getCanSort(),y=h.column.getIsSorted();return f.jsx(ex,{children:h.isPlaceholder?null:g?f.jsxs("button",{type:"button",className:je("inline-flex cursor-pointer items-center gap-1 select-none hover:text-foreground",y&&"text-foreground"),onClick:h.column.getToggleSortingHandler(),children:[f.jsx(Pr,{header:h}),y==="asc"?f.jsx(Jb,{className:"size-3"}):y==="desc"?f.jsx(Zb,{className:"size-3"}):f.jsx(Ib,{className:"size-3 opacity-50"})]}):f.jsx(Pr,{header:h})},h.id)})},d.id))}),f.jsx(P1,{children:u.length===0?f.jsx(ic,{className:"hover:bg-transparent",children:f.jsx(tv,{colSpan:r,className:"h-28 text-center whitespace-normal",children:o??f.jsx("span",{className:"text-muted-foreground text-sm",children:"No results."})})}):u.map(d=>f.jsx(ic,{children:d.getAllCells().map(h=>f.jsx(tv,{children:f.jsx(Pr,{cell:h})},h.id))},d.id))})]})}function po({label:n,value:o,sub:u,icon:r,tone:d="default",children:h}){return f.jsx(ga,{className:"gap-0 py-4",children:f.jsxs("div",{className:"flex items-start justify-between gap-3 px-4",children:[f.jsxs("div",{className:"min-w-0",children:[f.jsxs("div",{className:"text-muted-foreground flex items-center gap-1.5 text-xs font-medium",children:[f.jsx(r,{className:"size-3.5"}),n]}),f.jsx("div",{className:je("mt-1.5 truncate text-2xl font-semibold tracking-tight tabular-nums",d==="danger"&&"text-destructive",d==="success"&&"text-success"),children:o}),u&&f.jsx("div",{className:"text-muted-foreground mt-0.5 truncate text-xs",children:u})]}),h]})})}const Ho=cb({rowSortingFeature:bb,sortedRowModel:xb(),sortFns:{alphanumeric:pb,basic:gb,text:vb,datetime:hb},columnFilteringFeature:mb,globalFilteringFeature:db,filteredRowModel:yb(),filterFns:{includesString:fb}}),av={0:{label:"closed",variant:"success"},1:{label:"half-open",variant:"warning"},2:{label:"open",variant:"destructive"}};function tx(n){const o=Object.entries(n).sort((u,r)=>r[1]-u[1]).map(([u,r])=>`${u}: ${dt(r)}`);return o.length>0?`errors — ${o.join(", ")}`:""}const ax=[{accessorKey:"name",header:"Sink",sortFn:"text",cell:({row:n})=>f.jsxs("span",{className:"flex items-center gap-2 font-medium",children:[f.jsx("span",{className:n.original.healthy?"size-1.5 rounded-full bg-emerald-500":"size-1.5 rounded-full bg-red-500"}),n.original.name]})},{accessorKey:"breaker_state",header:"Breaker",sortFn:"basic",cell:({getValue:n})=>{const o=av[n()]??av[0];return f.jsx(ba,{variant:o.variant,children:o.label})}},{accessorKey:"succeeded",header:()=>f.jsx("span",{className:"block text-right",children:"Delivered"}),sortFn:"basic",cell:({getValue:n})=>f.jsx("span",{className:"text-success block text-right tabular-nums",children:dt(n())})},{accessorKey:"failed",header:()=>f.jsx("span",{className:"block text-right",children:"Failed"}),sortFn:"basic",cell:({row:n,getValue:o})=>{const u=o();return f.jsx("span",{className:`block text-right tabular-nums ${u>0?"text-destructive":"text-muted-foreground"}`,title:tx(n.original.errors_by_type),children:dt(u)})}},{accessorKey:"retries",header:()=>f.jsx("span",{className:"block text-right",children:"Retries"}),sortFn:"basic",cell:({getValue:n})=>f.jsx("span",{className:"text-muted-foreground block text-right tabular-nums",children:dt(n())})},{accessorKey:"filtered",header:()=>f.jsx("span",{className:"block text-right",children:"Filtered"}),sortFn:"basic",cell:({getValue:n})=>f.jsx("span",{className:"text-muted-foreground block text-right tabular-nums",children:dt(n())})}];function xl({label:n,value:o}){return f.jsxs("div",{className:"flex items-center justify-between gap-3 text-xs",children:[f.jsx("span",{className:"text-muted-foreground shrink-0",children:n}),f.jsx("span",{className:"truncate text-right font-medium",children:o})]})}function lx({stats:n}){const{points:o}=X1(),u=E.useMemo(()=>n?.sinks??[],[n]),r=o.length>0?o[o.length-1].rate:0,d=Mo({features:Ho,columns:ax,data:u}),h=n?.dlq.entries??0;return f.jsxs("div",{className:"space-y-4",children:[f.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-4",children:[f.jsx(po,{label:"Throughput",value:ig(r),sub:`${dt(n?.events_total)} events total`,icon:Ov}),f.jsx(po,{label:"WAL lag",value:gc(n?.wal_lag_bytes),sub:n?.streaming?"replication live":"replication down",icon:iy}),f.jsx(po,{label:"In flight",value:String(n?.inflight??0),sub:"events being processed",icon:cy}),f.jsx(po,{label:"Dead letters",value:String(h),sub:n?.dlq.enabled?`${dt(n.dlq.parked_total)} parked · ${dt(n.dlq.retried_total)} retried all-time`:"DLQ disabled",icon:_c,tone:h>0?"danger":"default"})]}),f.jsxs("div",{className:"grid gap-4 xl:grid-cols-3",children:[f.jsxs(ga,{className:"gap-2 xl:col-span-2",children:[f.jsx(Xn,{children:f.jsxs("div",{children:[f.jsx(Qn,{children:"Throughput"}),f.jsx(Qi,{className:"mt-1",children:"Events per second · last 30 minutes"})]})}),f.jsx(Ya,{className:"pr-2",children:f.jsx(K1,{points:o})})]}),f.jsxs(ga,{className:"gap-2",children:[f.jsx(Xn,{children:f.jsxs("div",{children:[f.jsx(Qn,{children:"Operation mix"}),f.jsx(Qi,{className:"mt-1",children:"All events since start"})]})}),f.jsxs(Ya,{children:[f.jsx(F1,{operations:n?.operations??{}}),f.jsx("div",{className:"mt-2 flex justify-center",children:f.jsx(og,{})})]})]})]}),f.jsxs("div",{className:"grid gap-4 xl:grid-cols-3",children:[f.jsxs(ga,{className:"gap-2 xl:col-span-2",children:[f.jsx(Xn,{children:f.jsxs("div",{children:[f.jsx(Qn,{children:"Replication lag"}),f.jsx(Qi,{className:"mt-1",children:"WAL bytes between the server and the last confirmed position — sustained growth means a sink can't keep up"})]})}),f.jsx(Ya,{className:"pr-2",children:f.jsx(J1,{points:o})})]}),f.jsxs(ga,{className:"gap-2",children:[f.jsx(Xn,{children:f.jsx(Qn,{children:"Instance"})}),f.jsxs(Ya,{className:"space-y-2.5",children:[f.jsx(xl,{label:"Version",value:n?.version??"–"}),f.jsx(xl,{label:"Status",value:f.jsxs("span",{className:"flex items-center justify-end gap-1.5",children:[f.jsx(ba,{variant:n?.streaming?"success":"destructive",children:n?.streaming?"streaming":"disconnected"}),f.jsx(ba,{variant:n?.ready?"success":"warning",children:n?.ready?"ready":"not ready"})]})}),f.jsx(xl,{label:"Uptime",value:ng(n?.uptime_seconds)}),f.jsx(xl,{label:"Current LSN",value:f.jsx("span",{className:"font-mono text-[11px]",children:n?.current_lsn??"–"})}),f.jsx(xl,{label:"Slot",value:f.jsx("span",{className:"font-mono text-[11px]",children:n?.slot_name||"–"})}),f.jsx(xl,{label:"Publication",value:f.jsx("span",{className:"font-mono text-[11px]",children:n?.publication||"–"})}),f.jsx(xl,{label:"Tables observed",value:String(n?.tables.length??0)}),f.jsx(xl,{label:"Dead-letter queue",value:n?.dlq.enabled?`${h} parked`:"disabled"})]})]})]}),f.jsxs(ga,{className:"gap-3",children:[f.jsxs(Xn,{children:[f.jsxs("div",{children:[f.jsx(Qn,{children:"Sinks"}),f.jsx(Qi,{className:"mt-1",children:"Delivery state per destination — the circuit breaker opens while a sink is down. Hover a failure count for the error breakdown."})]}),f.jsxs(ba,{variant:"outline",className:"text-muted-foreground",children:[f.jsx(Xb,{className:"size-3"}),u.length," active"]})]}),f.jsx(Ya,{className:"px-0",children:f.jsx(Bo,{table:d,empty:f.jsxs("div",{className:"text-muted-foreground flex flex-col items-center gap-1 text-sm",children:[f.jsx(ey,{className:"size-5"}),"No sinks configured — set REDIS_URL, REDIS_JSON_URL, or MEILISEARCH_URL."]})})})]})]})}function Hc({className:n,type:o,...u}){return f.jsx("input",{type:o,"data-slot":"input",className:je("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",n),...u})}function bo(n,o){return f.jsx("span",{className:`block text-right tabular-nums ${n>0?o:"text-muted-foreground/50"}`,children:dt(n)})}function nx(n){return[{accessorKey:"table",header:"Table",sortFn:"text",cell:({getValue:o})=>f.jsx("span",{className:"font-medium",children:o()})},{accessorKey:"insert",header:()=>f.jsx("span",{className:"block text-right",children:"Inserts"}),sortFn:"basic",cell:({getValue:o})=>bo(o(),"text-emerald-600 dark:text-emerald-400")},{accessorKey:"update",header:()=>f.jsx("span",{className:"block text-right",children:"Updates"}),sortFn:"basic",cell:({getValue:o})=>bo(o(),"text-sky-600 dark:text-sky-400")},{accessorKey:"delete",header:()=>f.jsx("span",{className:"block text-right",children:"Deletes"}),sortFn:"basic",cell:({getValue:o})=>bo(o(),"text-red-600 dark:text-red-400")},{accessorKey:"read",header:()=>f.jsx("span",{className:"block text-right",children:"Backfill reads"}),sortFn:"basic",cell:({getValue:o})=>bo(o(),"text-violet-600 dark:text-violet-400")},{accessorKey:"total",header:()=>f.jsx("span",{className:"block text-right",children:"Total"}),sortFn:"basic",cell:({getValue:o})=>{const u=o(),r=n>0?u/n*100:0;return f.jsxs("div",{className:"flex items-center justify-end gap-2",children:[f.jsx("span",{className:"font-medium tabular-nums",children:dt(u)}),f.jsx("span",{className:"bg-muted relative h-1.5 w-16 overflow-hidden rounded-full",children:f.jsx("span",{className:"bg-primary/70 absolute inset-y-0 left-0 rounded-full",style:{width:`${Math.max(2,r)}%`}})})]})}}]}function ix({stats:n}){const[o,u]=E.useState(""),r=E.useMemo(()=>n?.tables??[],[n]),d=E.useMemo(()=>nx(n?.events_total??0),[n?.events_total]),h=Mo({features:Ho,columns:d,data:r,globalFilterFn:"includesString",initialState:{sorting:[{id:"total",desc:!0}]},state:{globalFilter:o}});return f.jsxs("div",{className:"space-y-4",children:[r.length>0&&f.jsxs(ga,{className:"gap-2",children:[f.jsxs(Xn,{children:[f.jsxs("div",{children:[f.jsx(Qn,{children:"Busiest tables"}),f.jsxs(Qi,{className:"mt-1",children:["Top ",Math.min(8,r.length)," tables by change volume, stacked by operation"]})]}),f.jsx(og,{})]}),f.jsx(Ya,{className:"pr-2",children:f.jsx($1,{tables:r})})]}),f.jsxs("div",{className:"relative max-w-xs",children:[f.jsx(Uv,{className:"text-muted-foreground absolute top-1/2 left-2.5 size-4 -translate-y-1/2"}),f.jsx(Hc,{placeholder:"Filter tables…",value:o,onChange:g=>u(g.target.value),className:"h-8 pl-8 text-sm"})]}),f.jsx(ga,{className:"py-0",children:f.jsx(Ya,{className:"px-0",children:f.jsx(Bo,{table:h,empty:f.jsxs("div",{className:"text-muted-foreground flex flex-col items-center gap-1 text-sm",children:[f.jsx(kv,{className:"size-5"}),"No change events observed yet."]})})})})]})}const lv=(n,o,u)=>{if(n&&"reportValidity"in n){const r=dc(u,o);n.setCustomValidity(r&&r.message||""),n.reportValidity()}},pc=(n,o)=>{for(const u in o.fields){const r=o.fields[u];r&&r.ref&&"reportValidity"in r.ref?lv(r.ref,u,n):r&&r.refs&&r.refs.forEach(d=>lv(d,u,n))}},nv=(n,o)=>{o.shouldUseNativeValidation&&pc(n,o);const u={};for(const r in n){const d=dc(o.fields,r),h=Object.assign(n[r]||{},{ref:d&&d.refs?d.refs[0]:d&&d.ref});if(sx(o.names||Object.keys(n),r)){const g=Object.assign({},dc(u,r));ec(g,"root",h),ec(u,r,g)}else ec(u,r,h)}return u},sx=(n,o)=>{const u=iv(o).replace(/[.*+?^${}()|\\]/g,"\\$&");return n.some(r=>iv(r).match(`^${u}\\.\\d+`))};function iv(n){return n.replace(/[\[\]]/g,"")}function bc(){return bc=Object.assign?Object.assign.bind():function(n){for(var o=1;o0){var N,S,O=d.errors.reduce(function(H,R){return R.length"u")return;let o=document.head||document.getElementsByTagName("head")[0],u=document.createElement("style");u.type="text/css",o.appendChild(u),u.styleSheet?u.styleSheet.cssText=n:u.appendChild(document.createTextNode(n))}const fx=n=>{switch(n){case"success":return hx;case"info":return gx;case"warning":return vx;case"error":return px;default:return null}},dx=Array(12).fill(0),mx=({visible:n,className:o})=>q.createElement("div",{className:["sonner-loading-wrapper",o].filter(Boolean).join(" "),"data-visible":n},q.createElement("div",{className:"sonner-spinner"},dx.map((u,r)=>q.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${r}`})))),hx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20","aria-hidden":"true"},q.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),vx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20","aria-hidden":"true"},q.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),gx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20","aria-hidden":"true"},q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),px=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20","aria-hidden":"true"},q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),bx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true"},q.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),q.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),yx=()=>{const[n,o]=q.useState(document.hidden);return q.useEffect(()=>{const u=()=>{o(document.hidden)};return document.addEventListener("visibilitychange",u),()=>document.removeEventListener("visibilitychange",u)},[]),n};let xx=1;const Sx=100,ov=n=>{var o;return typeof n?.id=="number"||(n==null||(o=n.id)==null?void 0:o.length)>0?n.id:xx++};class Ex{constructor(){this.subscribe=o=>(this.subscribers.push(o),this.getActiveToasts().forEach(u=>o(u)),()=>{const u=this.subscribers.indexOf(o);this.subscribers.splice(u,1)}),this.publish=o=>{this.subscribers.forEach(u=>u(o))},this.addToast=o=>{this.publish(o),this.toasts=[...this.toasts,o],this.trimHistory()},this.trimHistory=()=>{let o=this.toasts.length-Sx;o<=0||(this.toasts=this.toasts.filter(u=>o>0&&this.dismissedToasts.has(u.id)?(this.dismissedToasts.delete(u.id),o--,!1):!0))},this.create=o=>{const{message:u,...r}=o,d=ov(o),h=this.pendingDismissals.get(d);h!==void 0&&(cancelAnimationFrame(h),this.pendingDismissals.delete(d),this.dismissedToasts.delete(d));const g=this.dismissedToasts.has(d),y=o.dismissible===void 0?!0:o.dismissible;return g&&(this.dismissedToasts.delete(d),this.toasts=this.toasts.filter(S=>S.id!==d)),(g?void 0:this.toasts.find(S=>S.id===d))?this.toasts=this.toasts.map(S=>S.id===d?(this.publish({...S,...o,id:d,title:u}),{...S,...o,id:d,dismissible:y,title:u}):S):this.addToast({title:u,...r,dismissible:y,id:d}),d},this.dismiss=o=>{if(o==null)return this.getActiveToasts().forEach(r=>{this.dismissedToasts.add(r.id),this.subscribers.forEach(d=>d({id:r.id,dismiss:!0}))}),o;this.dismissedToasts.add(o);const u=this.pendingDismissals.get(o);return u!==void 0&&cancelAnimationFrame(u),this.pendingDismissals.set(o,requestAnimationFrame(()=>{this.pendingDismissals.delete(o),this.subscribers.forEach(r=>r({id:o,dismiss:!0}))})),o},this.message=(o,u)=>this.create({...u,message:o,type:void 0}),this.error=(o,u)=>this.create({...u,message:o,type:"error"}),this.success=(o,u)=>this.create({...u,type:"success",message:o}),this.info=(o,u)=>this.create({...u,type:"info",message:o}),this.warning=(o,u)=>this.create({...u,type:"warning",message:o}),this.loading=(o,u)=>this.create({...u,type:"loading",message:o}),this.promise=(o,u)=>{if(!u)return;let r;u.loading!==void 0&&(r=this.create({...u,promise:o,type:"loading",message:u.loading,description:typeof u.description!="function"?u.description:void 0}));const d=Promise.resolve(o instanceof Function?o():o);let h=r!==void 0,g;const y=d.then(async S=>{if(g=["resolve",S],q.isValidElement(S))h=!1,this.create({id:r,type:"default",message:S});else if(zx(S)&&!S.ok){h=!1;const v=typeof u.error=="function"?await u.error(`HTTP error! status: ${S.status}`):u.error,C=typeof u.description=="function"?await u.description(`HTTP error! status: ${S.status}`):u.description,R=typeof v=="object"&&!q.isValidElement(v)?v:{message:v};this.create({id:r,type:"error",description:C,...R})}else if(S instanceof Error){h=!1;const v=typeof u.error=="function"?await u.error(S):u.error,C=typeof u.description=="function"?await u.description(S):u.description,R=typeof v=="object"&&!q.isValidElement(v)?v:{message:v};this.create({id:r,type:"error",description:C,...R})}else if(u.success!==void 0){h=!1;const v=typeof u.success=="function"?await u.success(S):u.success,C=typeof u.description=="function"?await u.description(S):u.description,R=typeof v=="object"&&!q.isValidElement(v)?v:{message:v};this.create({id:r,type:"success",description:C,...R})}}).catch(async S=>{if(g=["reject",S],u.error!==void 0){h=!1;const O=typeof u.error=="function"?await u.error(S):u.error,v=typeof u.description=="function"?await u.description(S):u.description,H=typeof O=="object"&&!q.isValidElement(O)?O:{message:O};this.create({id:r,type:"error",description:v,...H})}}).finally(()=>{h&&(this.dismiss(r),r=void 0),u.finally==null||u.finally.call(u)}),N=()=>new Promise((S,O)=>y.then(()=>g[0]==="reject"?O(g[1]):S(g[1])).catch(O));return typeof r!="string"&&typeof r!="number"?{unwrap:N}:Object.assign(r,{unwrap:N})},this.custom=(o,u)=>{const r=ov(u);return this.create({...u,jsx:o(r),id:r,type:void 0}),r},this.getActiveToasts=()=>this.toasts.filter(o=>!this.dismissedToasts.has(o.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set,this.pendingDismissals=new Map}}const _t=new Ex,Nx=(n,o)=>_t.message(n,o),zx=n=>n&&typeof n=="object"&&"ok"in n&&typeof n.ok=="boolean"&&"status"in n&&typeof n.status=="number",Tx=Nx,jx=()=>_t.toasts,Ax=()=>_t.getActiveToasts(),Sl=Object.assign(Tx,{success:_t.success,info:_t.info,warning:_t.warning,error:_t.error,custom:_t.custom,message:_t.message,promise:_t.promise,dismiss:_t.dismiss,loading:_t.loading},{getHistory:jx,getToasts:Ax});cx("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--normal-text);background:var(--normal-bg);border:1px solid var(--normal-border);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{-webkit-user-select:none;user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function yo(n){return n.label!==void 0}const Dx=3,wx="24px",Cx="16px",uv=4e3,_x=356,Mx=14,Ox=45,Rx=200;function va(...n){return n.filter(Boolean).join(" ")}function Ux(n){const[o,u]=n.split("-"),r=[];return o&&r.push(o),u&&r.push(u),r}const kx=n=>{var o,u,r,d,h,g,y,N,S;const{invert:O,toast:v,unstyled:C,interacting:H,setHeights:R,visibleToasts:U,heights:k,index:G,toasts:Z,expanded:K,removeToast:P,defaultRichColors:ee,closeButton:oe,style:fe,cancelButtonStyle:Y,actionButtonStyle:pe,className:mt="",descriptionClassName:ke="",duration:le,position:it,gap:Le,expandByDefault:Re,classNames:j,icons:B,closeButtonAriaLabel:F="Close toast"}=n,[se,L]=q.useState(null),[Ae,be]=q.useState(null),[ce,W]=q.useState(!1),[te,ne]=q.useState(!1),[qe,ht]=q.useState(!1),[ae,Vt]=q.useState(!1),[St,Et]=q.useState(!1),[Xt,vt]=q.useState(0),[$n,Wl]=q.useState(0),zl=q.useRef(v.duration||le||uv),Wn=q.useRef(null),Mt=q.useRef(null),In=G===0,Pn=G+1<=U,st=v.type,$i=st??"default",Ze=v.dismissible!==!1,Go=v.className||"",Wi=v.descriptionClassName||"",Tl=q.useMemo(()=>k.findIndex(ie=>ie.toastId===v.id)||0,[k,v.id]),Il=q.useMemo(()=>{var ie;return(ie=v.closeButton)!=null?ie:oe},[v.closeButton,oe]),Ii=q.useMemo(()=>v.duration||le||uv,[v.duration,le]),Pl=q.useRef(0),Za=q.useRef(0),Pi=q.useRef(0),Qt=q.useRef(null),[pt,ra]=it.split("-"),gt=q.useMemo(()=>k.reduce((ie,Ve,Ke)=>Ke>=Tl?ie:ie+Ve.height,0),[k,Tl]),es=yx(),Zt=q.useMemo(()=>{var ie;return(ie=n.swipeDirections)!=null?ie:Ux(it)},[n.swipeDirections,it]),Vo=v.invert||O,Ka=st==="loading";Za.current=q.useMemo(()=>Tl*Le+gt,[Tl,gt]),q.useEffect(()=>{zl.current=Ii},[Ii]),q.useEffect(()=>{W(!0)},[]),q.useEffect(()=>{const ie=Mt.current;if(ie){const Ve=ie.getBoundingClientRect().height;return Wl(Ve),R(Ke=>[{toastId:v.id,height:Ve,position:v.position},...Ke]),()=>R(Ke=>Ke.filter(Je=>Je.toastId!==v.id))}},[R,v.id]),q.useLayoutEffect(()=>{if(!ce)return;const ie=Mt.current,Ve=ie.style.height;ie.style.height="auto";const Ke=ie.getBoundingClientRect().height;ie.style.height=Ve,Wl(Ke),R(Je=>Je.find(Fe=>Fe.toastId===v.id)?Je.map(Fe=>Fe.toastId===v.id?{...Fe,height:Ke}:Fe):[{toastId:v.id,height:Ke,position:v.position},...Je])},[ce,v.title,v.description,R,v.id,v.jsx,v.action,v.cancel]);const Ot=q.useCallback(()=>{ne(!0),vt(Za.current),R(ie=>ie.filter(Ve=>Ve.toastId!==v.id)),setTimeout(()=>{P(v)},Rx)},[v,P,R,Za]);q.useEffect(()=>{if(v.promise&&st==="loading"||v.duration===1/0||v.type==="loading")return;let ie;return K||H||es?(()=>{if(Pi.current{v.onAutoClose==null||v.onAutoClose.call(v,v),Ot()},zl.current)),()=>clearTimeout(ie)},[K,H,v,st,es,Ot]),q.useEffect(()=>{v.delete&&(Ot(),v.onDismiss==null||v.onDismiss.call(v,v))},[Ot,v.delete]);function jl(){var ie;if(B?.loading){var Ve;return q.createElement("div",{className:va(j?.loader,v==null||(Ve=v.classNames)==null?void 0:Ve.loader,"sonner-loader"),"data-visible":st==="loading"},B.loading)}return q.createElement(mx,{className:va(j?.loader,v==null||(ie=v.classNames)==null?void 0:ie.loader),visible:st==="loading"})}const xa=v.icon||B?.[st]||fx(st);var Al,Ja;return q.createElement("li",{tabIndex:0,ref:Mt,className:va(mt,Go,j?.toast,v==null||(o=v.classNames)==null?void 0:o.toast,j?.[$i],v==null||(u=v.classNames)==null?void 0:u[$i]),"data-sonner-toast":"","data-rich-colors":(Al=v.richColors)!=null?Al:ee,"data-styled":!(v.jsx||v.unstyled||C),"data-mounted":ce,"data-promise":!!v.promise,"data-swiped":St,"data-removed":te,"data-visible":Pn,"data-y-position":pt,"data-x-position":ra,"data-index":G,"data-front":In,"data-swiping":qe,"data-dismissible":Ze,"data-type":st,"data-invert":Vo,"data-swipe-out":ae,"data-swipe-direction":Ae,"data-expanded":!!(K||Re&&ce),"data-testid":v.testId,style:{"--index":G,"--toasts-before":G,"--z-index":Z.length-G,"--offset":`${te?Xt:Za.current}px`,"--initial-height":Re?"auto":`${$n}px`,...fe,...v.style},onDragEnd:()=>{ht(!1),L(null),Qt.current=null},onPointerDown:ie=>{ie.button!==2&&(Ka||!Ze||(Wn.current=new Date,vt(Za.current),ie.target.setPointerCapture(ie.pointerId),ie.target.tagName!=="BUTTON"&&(ht(!0),Qt.current={x:ie.clientX,y:ie.clientY})))},onPointerUp:()=>{var ie,Ve,Ke;if(ae||!Ze)return;Qt.current=null;const Je=Number(((ie=Mt.current)==null?void 0:ie.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Dl=Number(((Ve=Mt.current)==null?void 0:Ve.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),Fe=new Date().getTime()-((Ke=Wn.current)==null?void 0:Ke.getTime()),bt=se==="x"?Je:Dl,Rt=Math.abs(bt)/Fe;if((se==="x"?Zt.includes(Je>0?"right":"left"):Zt.includes(Dl>0?"bottom":"top"))&&(Math.abs(bt)>=Ox||Rt>.11)){vt(Za.current),v.onDismiss==null||v.onDismiss.call(v,v),be(se==="x"?Je>0?"right":"left":Dl>0?"down":"up"),Ot(),Vt(!0);return}else{var Nt,en;(Nt=Mt.current)==null||Nt.style.setProperty("--swipe-amount-x","0px"),(en=Mt.current)==null||en.style.setProperty("--swipe-amount-y","0px")}Et(!1),ht(!1),L(null)},onPointerMove:ie=>{var Ve,Ke,Je;if(!Qt.current||!Ze||((Ve=window.getSelection())==null?void 0:Ve.toString().length)>0)return;const Fe=ie.clientY-Qt.current.y,bt=ie.clientX-Qt.current.x;!se&&(Math.abs(bt)>1||Math.abs(Fe)>1)&&L(Math.abs(bt)>Math.abs(Fe)?"x":"y");let Rt={x:0,y:0};const wl=Nt=>1/(1.5+Math.abs(Nt)/20);if(se==="y"){if(Zt.includes("top")||Zt.includes("bottom"))if(Zt.includes("top")&&Fe<0||Zt.includes("bottom")&&Fe>0)Rt.y=Fe;else{const Nt=Fe*wl(Fe);Rt.y=Math.abs(Nt)0)Rt.x=bt;else{const Nt=bt*wl(bt);Rt.x=Math.abs(Nt)0||Math.abs(Rt.y)>0)&&Et(!0),(Ke=Mt.current)==null||Ke.style.setProperty("--swipe-amount-x",`${Rt.x}px`),(Je=Mt.current)==null||Je.style.setProperty("--swipe-amount-y",`${Rt.y}px`)}},Il&&!v.jsx&&st!=="loading"?q.createElement("button",{"aria-label":F,"data-disabled":Ka,"data-close-button":!0,onClick:Ka||!Ze?()=>{}:()=>{Ot(),v.onDismiss==null||v.onDismiss.call(v,v)},className:va(j?.closeButton,v==null||(r=v.classNames)==null?void 0:r.closeButton)},(Ja=B?.close)!=null?Ja:bx):null,(st||v.icon||v.promise)&&v.icon!==null&&(B?.[st]!==null||v.icon)?q.createElement("div",{"data-icon":"",className:va(j?.icon,v==null||(d=v.classNames)==null?void 0:d.icon)},st==="loading"?v.icon||jl():v.promise?jl():null,st!=="loading"?xa:null):null,q.createElement("div",{"data-content":"",className:va(j?.content,v==null||(h=v.classNames)==null?void 0:h.content)},q.createElement("div",{"data-title":"",className:va(j?.title,v==null||(g=v.classNames)==null?void 0:g.title)},v.jsx?v.jsx:typeof v.title=="function"?v.title():v.title),v.description?q.createElement("div",{"data-description":"",className:va(ke,Wi,j?.description,v==null||(y=v.classNames)==null?void 0:y.description)},typeof v.description=="function"?v.description():v.description):null),q.isValidElement(v.cancel)?v.cancel:v.cancel&&yo(v.cancel)?q.createElement("button",{"data-button":!0,"data-cancel":!0,style:v.cancelButtonStyle||Y,onClick:ie=>{yo(v.cancel)&&Ze&&(v.cancel.onClick==null||v.cancel.onClick.call(v.cancel,ie),Ot())},className:va(j?.cancelButton,v==null||(N=v.classNames)==null?void 0:N.cancelButton)},v.cancel.label):null,q.isValidElement(v.action)?v.action:v.action&&yo(v.action)?q.createElement("button",{"data-button":!0,"data-action":!0,style:v.actionButtonStyle||pe,onClick:ie=>{yo(v.action)&&(v.action.onClick==null||v.action.onClick.call(v.action,ie),!ie.defaultPrevented&&Ot())},className:va(j?.actionButton,v==null||(S=v.classNames)==null?void 0:S.actionButton)},v.action.label):null)};function rv(){if(typeof window>"u"||typeof document>"u")return"ltr";const n=document.documentElement.getAttribute("dir");return n==="auto"||!n?window.getComputedStyle(document.documentElement).direction:n}function Bx(n,o){const u={};return[n,o].forEach((r,d)=>{const h=d===1,g=h?"--mobile-offset":"--offset",y=h?Cx:wx;function N(S){["top","right","bottom","left"].forEach(O=>{u[`${g}-${O}`]=typeof S=="number"?`${S}px`:S})}typeof r=="number"||typeof r=="string"?N(r):typeof r=="object"?["top","right","bottom","left"].forEach(S=>{r[S]===void 0?u[`${g}-${S}`]=y:u[`${g}-${S}`]=typeof r[S]=="number"?`${r[S]}px`:r[S]}):N(y)}),u}const Hx=q.forwardRef(function(o,u){const{id:r,invert:d,position:h="bottom-right",hotkey:g=["altKey","KeyT"],expand:y,closeButton:N,className:S,offset:O,mobileOffset:v,theme:C="light",richColors:H,duration:R,style:U,visibleToasts:k=Dx,toastOptions:G,dir:Z=rv(),gap:K=Mx,icons:P,customAriaLabel:ee,containerAriaLabel:oe="Notifications"}=o,[fe,Y]=q.useState([]),pe=q.useMemo(()=>r?fe.filter(W=>W.toasterId===r):fe.filter(W=>!W.toasterId),[fe,r]),mt=q.useMemo(()=>Array.from(new Set([h].concat(pe.filter(W=>W.position).map(W=>W.position)))),[pe,h]),[ke,le]=q.useState([]),[it,Le]=q.useState(!1),[Re,j]=q.useState(!1),[B,F]=q.useState(C!=="system"?C:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),se=q.useRef(null),L=g.join("+").replace(/Key/g,"").replace(/Digit/g,""),Ae=q.useRef(null),be=q.useRef(!1),ce=q.useCallback(W=>{Y(te=>{var ne;return(ne=te.find(qe=>qe.id===W.id))!=null&&ne.delete||_t.dismiss(W.id),te.filter(({id:qe})=>qe!==W.id)})},[]);return q.useEffect(()=>_t.subscribe(W=>{if(W.dismiss){requestAnimationFrame(()=>{Y(te=>te.map(ne=>ne.id===W.id?{...ne,delete:!0}:ne))});return}setTimeout(()=>{_b.flushSync(()=>{Y(te=>{const ne=te.findIndex(qe=>qe.id===W.id);return ne!==-1?[...te.slice(0,ne),{...te[ne],...W},...te.slice(ne+1)]:[W,...te]})})})}),[]),q.useEffect(()=>{if(C!=="system"){F(C);return}if(C==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?F("dark"):F("light")),typeof window>"u")return;const W=window.matchMedia("(prefers-color-scheme: dark)");try{W.addEventListener("change",({matches:te})=>{F(te?"dark":"light")})}catch{W.addListener(({matches:ne})=>{try{F(ne?"dark":"light")}catch(qe){console.error(qe)}})}},[C]),q.useEffect(()=>{fe.length<=1&&Le(!1)},[fe]),q.useEffect(()=>{const W=te=>{var ne;if(g.length>0&&g.every(ae=>te[ae]||te.code===ae)){var ht;Le(!0),(ht=se.current)==null||ht.focus()}te.code==="Escape"&&(document.activeElement===se.current||(ne=se.current)!=null&&ne.contains(document.activeElement))&&Le(!1)};return document.addEventListener("keydown",W),()=>document.removeEventListener("keydown",W)},[g]),q.useEffect(()=>{if(se.current)return()=>{Ae.current&&(Ae.current.focus({preventScroll:!0}),Ae.current=null,be.current=!1)}},[se.current]),q.createElement("section",{ref:u,"aria-label":ee??`${oe} ${L}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0,"data-react-aria-top-layer":!0},mt.map((W,te)=>{var ne;const[qe,ht]=W.split("-");return pe.length?q.createElement("ol",{key:W,dir:Z==="auto"?rv():Z,tabIndex:-1,ref:se,className:S,"data-sonner-toaster":!0,"data-sonner-theme":B,"data-y-position":qe,"data-x-position":ht,style:{"--front-toast-height":`${((ne=ke[0])==null?void 0:ne.height)||0}px`,"--width":`${_x}px`,"--gap":`${K}px`,...U,...Bx(O,v)},onBlur:ae=>{be.current&&!ae.currentTarget.contains(ae.relatedTarget)&&(be.current=!1,Ae.current&&(Ae.current.focus({preventScroll:!0}),Ae.current=null))},onFocus:ae=>{ae.target instanceof HTMLElement&&ae.target.dataset.dismissible==="false"||be.current||(be.current=!0,Ae.current=ae.relatedTarget)},onMouseEnter:()=>Le(!0),onMouseMove:()=>Le(!0),onMouseLeave:()=>{Re||Le(!1)},onDragEnd:()=>Le(!1),onPointerDown:ae=>{ae.target instanceof HTMLElement&&ae.target.dataset.dismissible==="false"||j(!0)},onPointerUp:()=>j(!1)},pe.filter(ae=>!ae.position&&te===0||ae.position===W).map((ae,Vt)=>{var St,Et;return q.createElement(kx,{key:ae.id,icons:P,index:Vt,toast:ae,defaultRichColors:H,duration:(St=G?.duration)!=null?St:R,className:G?.className,descriptionClassName:G?.descriptionClassName,invert:d,visibleToasts:k,closeButton:(Et=G?.closeButton)!=null?Et:N,interacting:Re,position:W,style:G?.style,unstyled:G?.unstyled,classNames:G?.classNames,cancelButtonStyle:G?.cancelButtonStyle,actionButtonStyle:G?.actionButtonStyle,closeButtonAriaLabel:G?.closeButtonAriaLabel,removeToast:ce,toasts:pe.filter(Xt=>Xt.position==ae.position),heights:ke.filter(Xt=>Xt.position==ae.position),setHeights:le,expandByDefault:y,gap:K,expanded:it,swipeDirections:o.swipeDirections})})):null}))}),Lx=Vv("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",xs:"h-7 rounded-md gap-1 px-2.5 text-xs has-[>svg]:px-2",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-7"}},defaultVariants:{variant:"default",size:"default"}});function Ga({className:n,variant:o,size:u,asChild:r=!1,...d}){const h=r?Oc:"button";return f.jsx(h,{"data-slot":"button",className:je(Lx({variant:o,size:u,className:n})),...d})}var qx=Object.defineProperty,Fn=(n,o)=>qx(n,"name",{value:o,configurable:!0}),ug=!!(typeof window<"u"&&window.document&&window.document.createElement);function Va(n,o,{checkForDefaultPrevented:u=!0}={}){return Fn(function(d){if(n?.(d),u===!1||!d||!d.defaultPrevented)return o?.(d)},"handleEvent")}Fn(Va,"composeEventHandlers");function Yx(n){if(!ug)throw new Error("Cannot access window outside of the DOM");return n?.ownerDocument?.defaultView??window}Fn(Yx,"getOwnerWindow");function yc(n){if(!ug)throw new Error("Cannot access document outside of the DOM");return n?.ownerDocument??document}Fn(yc,"getOwnerDocument");function rg(n,o=!1){const{activeElement:u}=yc(n);if(!u?.nodeName)return null;if(cg(u)&&u.contentDocument)return rg(u.contentDocument.body,o);if(o){const r=u.getAttribute("aria-activedescendant");if(r){const d=yc(u).getElementById(r);if(d)return d}}return u}Fn(rg,"getActiveElement");function cg(n){return n.tagName==="IFRAME"}Fn(cg,"isFrame");var Gx=Object.defineProperty,la=(n,o)=>Gx(n,"name",{value:o,configurable:!0});function Vx(n,o){const u=E.createContext(o);u.displayName=n+"Context";const r=la(h=>{const{children:g,...y}=h,N=E.useMemo(()=>y,Object.values(y));return f.jsx(u.Provider,{value:N,children:g})},"Provider");r.displayName=n+"Provider";function d(h,g={}){const{optional:y=!1}=g,N=E.useContext(u);if(N)return N;if(o!==void 0)return o;if(!y)throw new Error(`\`${h}\` must be used within \`${n}\``)}return la(d,"useContext"),[r,d]}la(Vx,"createContext");function fg(n,o=[]){let u=[];function r(h,g){const y=E.createContext(g);y.displayName=h+"Context";const N=u.length;u=[...u,g];const S=la(v=>{const{scope:C,children:H,...R}=v,U=C?.[n]?.[N]||y,k=E.useMemo(()=>R,Object.values(R));return f.jsx(U.Provider,{value:k,children:H})},"Provider");S.displayName=h+"Provider";function O(v,C,H={}){const{optional:R=!1}=H,U=C?.[n]?.[N]||y,k=E.useContext(U);if(k)return k;if(g!==void 0)return g;if(!R)throw new Error(`\`${v}\` must be used within \`${h}\``)}return la(O,"useContext"),[S,O]}la(r,"createContext");const d=la(()=>{const h=u.map(g=>E.createContext(g));return la(function(y){const N=y?.[n]||h;return E.useMemo(()=>({[`__scope${n}`]:{...y,[n]:N}}),[y,N])},"useScope")},"createScope");return d.scopeName=n,[r,dg(d,...o)]}la(fg,"createContextScope");function dg(...n){const o=n[0];if(n.length===1)return o;const u=la(()=>{const r=n.map(d=>({useScope:d(),scopeName:d.scopeName}));return la(function(h){const g=r.reduce((y,{useScope:N,scopeName:S})=>{const v=N(h)[`__scope${S}`];return{...y,...v}},{});return E.useMemo(()=>({[`__scope${o.scopeName}`]:g}),[g])},"useComposedScopes")},"createScope");return u.scopeName=o.scopeName,u}la(dg,"composeContextScopes");var El=globalThis?.document?E.useLayoutEffect:()=>{},Xx=Object.defineProperty,Qx=(n,o)=>Xx(n,"name",{value:o,configurable:!0}),Zx=Ji[" useId ".trim().toString()]||(()=>{}),Kx=0;function jo(n){const[o,u]=E.useState(Zx());return El(()=>{n||u(r=>r??String(Kx++))},[n]),n||(o?`radix-${o}`:"")}Qx(jo,"useId");var Jx=Object.defineProperty,Fx=(n,o)=>Jx(n,"name",{value:o,configurable:!0}),cv=Ji[" useEffectEvent ".trim().toString()],fv=Ji[" useInsertionEffect ".trim().toString()];function mg(n){if(typeof cv=="function")return cv(n);const o=E.useRef(()=>{throw new Error("Cannot call an event handler while rendering.")});return typeof fv=="function"?fv(()=>{o.current=n}):El(()=>{o.current=n}),E.useMemo(()=>((...u)=>o.current?.(...u)),[])}Fx(mg,"useEffectEvent");var $x=Object.defineProperty,Fi=(n,o)=>$x(n,"name",{value:o,configurable:!0}),Wx=Ji[" useInsertionEffect ".trim().toString()]||El;function hg({prop:n,defaultProp:o,onChange:u=Fi(()=>{},"onChange"),caller:r}){const[d,h,g]=vg({defaultProp:o,onChange:u}),y=n!==void 0,N=y?n:d,S=E.useCallback(O=>{if(y){const v=gg(O)?O(n):O;v!==n&&g.current?.(v)}else h(O)},[y,n,h,g]);return[N,S]}Fi(hg,"useControllableState");function vg({defaultProp:n,onChange:o}){const[u,r]=E.useState(n),d=E.useRef(u),h=E.useRef(o);return Wx(()=>{h.current=o},[o]),E.useEffect(()=>{d.current!==u&&(h.current?.(u),d.current=u)},[u,d]),[u,r,h]}Fi(vg,"useUncontrolledState");function gg(n){return typeof n=="function"}Fi(gg,"isFunction");var dv=Symbol("RADIX:SYNC_STATE");function Ix(n,o,u,r){const{prop:d,defaultProp:h,onChange:g,caller:y}=o,N=d!==void 0,S=mg(g),O=[{...u,state:h}];r&&O.push(r);const[v,C]=E.useReducer((k,G)=>{if(G.type===dv)return{...k,state:G.state};const Z=n(k,G);return N&&!Object.is(Z.state,k.state)&&S(Z.state),Z},...O),H=v.state,R=E.useRef(H);E.useEffect(()=>{R.current!==H&&(R.current=H,N||S(H))},[H,R,N]);const U=E.useMemo(()=>d!==void 0?{...v,state:d}:v,[v,d]);return E.useEffect(()=>{N&&!Object.is(d,v.state)&&C({type:dv,state:d})},[d,v.state,N]),[U,C]}Fi(Ix,"useControllableStateReducer");var Px=Object.defineProperty,e2=(n,o)=>Px(n,"name",{value:o,configurable:!0}),t2=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Qa=t2.reduce((n,o)=>{const u=Ro(`Primitive.${o}`),r=E.forwardRef((d,h)=>{const{asChild:g,...y}=d,N=g?u:o;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),f.jsx(N,{...y,ref:h})});return r.displayName=`Primitive.${o}`,{...n,[o]:r}},{});function pg(n,o){n&&_v.flushSync(()=>n.dispatchEvent(o))}e2(pg,"dispatchDiscreteCustomEvent");var a2=Object.defineProperty,l2=(n,o)=>a2(n,"name",{value:o,configurable:!0});function Jn(n){const o=E.useRef(n);return E.useEffect(()=>{o.current=n}),E.useMemo(()=>((...u)=>o.current?.(...u)),[])}l2(Jn,"useCallbackRef");var n2=Object.defineProperty,nt=(n,o)=>n2(n,"name",{value:o,configurable:!0}),xc="dismissableLayer.update",i2="dismissableLayer.pointerDownOutside",s2="dismissableLayer.focusOutside",mv,bg=E.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),o2=E.forwardRef(nt(function(o,u){const{disableOutsidePointerEvents:r=!1,deferPointerDownOutside:d=!1,onEscapeKeyDown:h,onPointerDownOutside:g,onFocusOutside:y,onInteractOutside:N,onDismiss:S,...O}=o,v=E.useContext(bg),[C,H]=E.useState(null),R=C?.ownerDocument??globalThis?.document,[,U]=E.useState({}),k=Jl(u,H),G=Array.from(v.layers),[Z]=[...v.layersWithOutsidePointerEventsDisabled].slice(-1),K=Z?G.indexOf(Z):-1,P=C?G.indexOf(C):-1,ee=v.layersWithOutsidePointerEventsDisabled.size>0,oe=P>=K,fe=E.useRef(!1),Y=xg(le=>{g?.(le),N?.(le),le.defaultPrevented||S?.()},{ownerDocument:R,deferPointerDownOutside:d,isDeferredPointerDownOutsideRef:fe,dismissableSurfaces:v.dismissableSurfaces,shouldHandlePointerDownOutside:E.useCallback(le=>{if(!(le instanceof Node))return!1;const it=[...v.branches].some(Le=>Le.contains(le));return oe&&!it},[v.branches,oe])}),pe=Sg(le=>{if(d&&fe.current)return;const it=le.target;[...v.branches].some(Re=>Re.contains(it))||(y?.(le),N?.(le),le.defaultPrevented||S?.())},R),mt=C?P===G.length-1:!1,ke=Jn(le=>{le.key==="Escape"&&(h?.(le),!le.defaultPrevented&&S&&(le.preventDefault(),S()))});return E.useEffect(()=>{if(mt)return R.addEventListener("keydown",ke,{capture:!0}),()=>R.removeEventListener("keydown",ke,{capture:!0})},[R,mt,ke]),E.useEffect(()=>{if(C)return r&&(v.layersWithOutsidePointerEventsDisabled.size===0&&(mv=R.body.style.pointerEvents,R.body.style.pointerEvents="none"),v.layersWithOutsidePointerEventsDisabled.add(C)),v.layers.add(C),Sc(),()=>{r&&(v.layersWithOutsidePointerEventsDisabled.delete(C),v.layersWithOutsidePointerEventsDisabled.size===0&&(R.body.style.pointerEvents=mv))}},[C,R,r,v]),E.useEffect(()=>()=>{C&&(v.layers.delete(C),v.layersWithOutsidePointerEventsDisabled.delete(C),Sc())},[C,v]),E.useEffect(()=>{const le=nt(()=>U({}),"handleUpdate");return document.addEventListener(xc,le),()=>document.removeEventListener(xc,le)},[]),f.jsx(Qa.div,{...O,ref:k,style:{pointerEvents:ee?oe?"auto":"none":void 0,...o.style},onFocusCapture:Va(o.onFocusCapture,pe.onFocusCapture),onBlurCapture:Va(o.onBlurCapture,pe.onBlurCapture),onPointerDownCapture:Va(o.onPointerDownCapture,Y.onPointerDownCapture)})},"DismissableLayer"));function yg(){const n=E.useContext(bg),[o,u]=E.useState(null);return E.useEffect(()=>{if(o)return n.dismissableSurfaces.add(o),()=>{n.dismissableSurfaces.delete(o)}},[o,n.dismissableSurfaces]),u}nt(yg,"useDismissableLayerSurface");var u2=nt(()=>!0,"IS_TRUE");function xg(n,o){const{ownerDocument:u=globalThis?.document,deferPointerDownOutside:r=!1,isDeferredPointerDownOutsideRef:d,dismissableSurfaces:h,shouldHandlePointerDownOutside:g=u2}=o,y=Jn(n),N=E.useRef(!1),S=E.useRef(!1),O=E.useRef(new Map),v=E.useRef(()=>{});return E.useEffect(()=>{function C(){S.current=!1,d.current=!1,O.current.clear()}nt(C,"resetOutsideInteraction");function H(){return Array.from(O.current.values()).some(Boolean)}nt(H,"isOutsideInteractionIntercepted");function R(K){if(!S.current)return;const P=K.target;P instanceof Node&&[...h].some(oe=>oe.contains(P))||O.current.set(K.type,!0),K.type==="click"&&window.setTimeout(()=>{S.current&&v.current()},0)}nt(R,"handleInteractionCapture");function U(K){S.current&&O.current.set(K.type,!1)}nt(U,"handleInteractionBubble");const k=nt(K=>{if(K.target&&!N.current){let P=function(){u.removeEventListener("click",v.current);const oe=H();C(),oe||Lc(i2,y,ee,{discrete:!0})};if(nt(P,"handleAndDispatchPointerDownOutsideEvent"),!g(K.target)){u.removeEventListener("click",v.current),C(),N.current=!1;return}const ee={originalEvent:K};S.current=!0,d.current=r&&K.button===0,O.current.clear(),!r||K.button!==0?P():(u.removeEventListener("click",v.current),v.current=P,u.addEventListener("click",v.current,{once:!0}))}else u.removeEventListener("click",v.current),C();N.current=!1},"handlePointerDown"),G=["pointerup","mousedown","mouseup","touchstart","touchend","click"];for(const K of G)u.addEventListener(K,R,!0),u.addEventListener(K,U);const Z=window.setTimeout(()=>{u.addEventListener("pointerdown",k)},0);return()=>{window.clearTimeout(Z),u.removeEventListener("pointerdown",k),u.removeEventListener("click",v.current);for(const K of G)u.removeEventListener(K,R,!0),u.removeEventListener(K,U)}},[u,y,r,d,h,g]),{onPointerDownCapture:nt(()=>N.current=!0,"onPointerDownCapture")}}nt(xg,"usePointerDownOutside");function Sg(n,o=globalThis?.document){const u=Jn(n),r=E.useRef(!1);return E.useEffect(()=>{const d=nt(h=>{h.target&&!r.current&&Lc(s2,u,{originalEvent:h},{discrete:!1})},"handleFocus");return o.addEventListener("focusin",d),()=>o.removeEventListener("focusin",d)},[o,u]),{onFocusCapture:nt(()=>r.current=!0,"onFocusCapture"),onBlurCapture:nt(()=>r.current=!1,"onBlurCapture")}}nt(Sg,"useFocusOutside");function Sc(){const n=new CustomEvent(xc);document.dispatchEvent(n)}nt(Sc,"dispatchUpdate");function Lc(n,o,u,{discrete:r}){const d=u.originalEvent.target,h=new CustomEvent(n,{bubbles:!1,cancelable:!0,detail:u});o&&d.addEventListener(n,o,{once:!0}),r?pg(d,h):d.dispatchEvent(h)}nt(Lc,"handleAndDispatchCustomEvent");var r2=Object.defineProperty,xt=(n,o)=>r2(n,"name",{value:o,configurable:!0}),sc="focusScope.autoFocusOnMount",oc="focusScope.autoFocusOnUnmount",hv={bubbles:!1,cancelable:!0},c2=E.forwardRef(xt(function(o,u){const{loop:r=!1,trapped:d=!1,onMountAutoFocus:h,onUnmountAutoFocus:g,...y}=o,[N,S]=E.useState(null),O=Jn(h),v=Jn(g),C=E.useRef(null),H=Jl(u,S),R=E.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;E.useEffect(()=>{if(d){let k=function(P){if(R.paused||!N)return;const ee=P.target;N.contains(ee)?C.current=ee:qa(C.current,{select:!0})},G=function(P){if(R.paused||!N)return;const ee=P.relatedTarget;ee!==null&&(N.contains(ee)||qa(C.current,{select:!0}))},Z=function(P){if(document.activeElement===document.body)for(const oe of P)oe.removedNodes.length>0&&qa(N)};xt(k,"handleFocusIn"),xt(G,"handleFocusOut"),xt(Z,"handleMutations"),document.addEventListener("focusin",k),document.addEventListener("focusout",G);const K=new MutationObserver(Z);return N&&K.observe(N,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",k),document.removeEventListener("focusout",G),K.disconnect()}}},[d,N,R.paused]),E.useEffect(()=>{if(N){vv.add(R);const k=document.activeElement;if(!N.contains(k)){const Z=new CustomEvent(sc,hv);N.addEventListener(sc,O),N.dispatchEvent(Z),Z.defaultPrevented||(Eg(Ag(qc(N)),{select:!0}),document.activeElement===k&&qa(N))}return()=>{N.removeEventListener(sc,O),setTimeout(()=>{const Z=new CustomEvent(oc,hv);N.addEventListener(oc,v),N.dispatchEvent(Z),Z.defaultPrevented||qa(k??document.body,{select:!0}),N.removeEventListener(oc,v),vv.remove(R)},0)}}},[N,O,v,R]);const U=E.useCallback(k=>{if(!r&&!d||R.paused)return;const G=k.key==="Tab"&&!k.altKey&&!k.ctrlKey&&!k.metaKey,Z=document.activeElement;if(G&&Z){const K=k.currentTarget,[P,ee]=Ng(K);P&&ee?!k.shiftKey&&Z===ee?(k.preventDefault(),r&&qa(P,{select:!0})):k.shiftKey&&Z===P&&(k.preventDefault(),r&&qa(ee,{select:!0})):Z===K&&k.preventDefault()}},[r,d,R.paused]);return f.jsx(Qa.div,{tabIndex:-1,...y,ref:H,onKeyDown:U})},"FocusScope"));function Eg(n,{select:o=!1}={}){const u=document.activeElement;for(const r of n)if(qa(r,{select:o}),document.activeElement!==u)return}xt(Eg,"focusFirst");function Ng(n){const o=qc(n),u=Ec(o,n),r=Ec(o.reverse(),n);return[u,r]}xt(Ng,"getTabbableEdges");function qc(n){const o=[],u=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT,{acceptNode:xt(r=>{const d=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||d?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP},"acceptNode")});for(;u.nextNode();)o.push(u.currentNode);return o}xt(qc,"getTabbableCandidates");function Ec(n,o){const u=typeof o.checkVisibility=="function"&&o.checkVisibility({checkVisibilityCSS:!0});for(const r of n)if(!(u?!r.checkVisibility({checkVisibilityCSS:!0}):zg(r,{upTo:o})))return r}xt(Ec,"findVisible");function zg(n,{upTo:o}){if(getComputedStyle(n).visibility==="hidden")return!0;for(;n;){if(o!==void 0&&n===o)return!1;if(getComputedStyle(n).display==="none")return!0;n=n.parentElement}return!1}xt(zg,"isHidden");function Tg(n){return n instanceof HTMLInputElement&&"select"in n}xt(Tg,"isSelectableInput");function qa(n,{select:o=!1}={}){if(n&&n.focus){const u=document.activeElement;n.focus({preventScroll:!0}),n!==u&&Tg(n)&&o&&n.select()}}xt(qa,"focus");var vv=jg();function jg(){let n=[];return{add(o){const u=n[0];o!==u&&u?.pause(),n=Nc(n,o),n.unshift(o)},remove(o){n=Nc(n,o),n[0]?.resume()}}}xt(jg,"createFocusScopesStack");function Nc(n,o){const u=[...n],r=u.indexOf(o);return r!==-1&&u.splice(r,1),u}xt(Nc,"arrayRemove");function Ag(n){return n.filter(o=>o.tagName!=="A")}xt(Ag,"removeLinks");var f2=Object.defineProperty,d2=(n,o)=>f2(n,"name",{value:o,configurable:!0}),m2=E.forwardRef(d2(function(o,u){const{container:r,...d}=o,[h,g]=E.useState(!1);El(()=>g(!0),[]);const y=r||h&&globalThis?.document?.body;return y?_v.createPortal(f.jsx(Qa.div,{...d,ref:u}),y):null},"Portal")),h2=Object.defineProperty,Xa=(n,o)=>h2(n,"name",{value:o,configurable:!0});function Dg(n,o){return E.useReducer((u,r)=>o[u][r]??u,n)}Xa(Dg,"useStateMachine");var Yc=Xa(n=>{const{present:o,children:u}=n,r=wg(o),d=typeof u=="function"?u({present:r.isPresent}):E.Children.only(u),h=Cg(r.ref,_g(d));return typeof u=="function"||r.isPresent?E.cloneElement(d,{ref:h}):null},"Presence");function wg(n){const[o,u]=E.useState(),r=E.useRef(null),d=E.useRef(n),h=E.useRef("none"),g=E.useRef(void 0),y=n?"mounted":"unmounted",[N,S]=Dg(y,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return E.useEffect(()=>{N==="mounted"?(h.current=g.current??Zn(r.current),g.current=void 0):h.current="none"},[N]),El(()=>{const O=r.current,v=d.current;if(v!==n){const H=h.current,R=Zn(O);n?(g.current=R,S("MOUNT")):R==="none"||O?.display==="none"?S("UNMOUNT"):S(v&&H!==R?"ANIMATION_OUT":"UNMOUNT"),d.current=n}},[n,S]),El(()=>{if(o){let O;const v=o.ownerDocument.defaultView??window,C=Xa(R=>{const k=Zn(r.current).includes(CSS.escape(R.animationName));if(R.target===o&&k&&(S("ANIMATION_END"),!d.current)){const G=o.style.animationFillMode;o.style.animationFillMode="forwards",O=v.setTimeout(()=>{o.style.animationFillMode==="forwards"&&(o.style.animationFillMode=G)})}},"handleAnimationEnd"),H=Xa(R=>{R.target===o&&(h.current=Zn(r.current))},"handleAnimationStart");return o.addEventListener("animationstart",H),o.addEventListener("animationcancel",C),o.addEventListener("animationend",C),()=>{v.clearTimeout(O),o.removeEventListener("animationstart",H),o.removeEventListener("animationcancel",C),o.removeEventListener("animationend",C)}}else S("ANIMATION_END")},[o,S]),{isPresent:["mounted","unmountSuspended"].includes(N),ref:E.useCallback(O=>{if(O){const v=getComputedStyle(O);r.current=v,g.current=Zn(v)}else r.current=null;u(O)},[])}}Xa(wg,"usePresence");function zc(n,o){if(typeof n=="function")return n(o);n!=null&&(n.current=o)}Xa(zc,"setRef");function Cg(...n){const o=E.useRef(n);return o.current=n,E.useCallback(u=>{const r=o.current;let d=!1;const h=r.map(g=>{const y=zc(g,u);return!d&&typeof y=="function"&&(d=!0),y});if(d)return()=>{for(let g=0;gv2(n,"name",{value:o,configurable:!0}),xo=0,qn=null;function g2(n){return Vc(),n.children}Gc(g2,"FocusGuards");function Vc(){E.useEffect(()=>{qn||(qn={start:Tc(),end:Tc()});const{start:n,end:o}=qn;return document.body.firstElementChild!==n&&document.body.insertAdjacentElement("afterbegin",n),document.body.lastElementChild!==o&&document.body.insertAdjacentElement("beforeend",o),xo++,()=>{xo===1&&(qn?.start.remove(),qn?.end.remove(),qn=null),xo=Math.max(0,xo-1)}},[])}Gc(Vc,"useFocusGuards");function Tc(){const n=document.createElement("span");return n.setAttribute("data-radix-focus-guard",""),n.tabIndex=0,n.style.outline="none",n.style.opacity="0",n.style.position="fixed",n.style.pointerEvents="none",n}Gc(Tc,"createFocusGuard");var pa=function(){return pa=Object.assign||function(o){for(var u,r=1,d=arguments.length;r"u")return O2;var o=R2(n),u=document.documentElement.clientWidth,r=window.innerWidth;return{left:o[0],top:o[1],right:o[2],gap:Math.max(0,r-u+o[2]-o[0])}},k2=Ug(),Kn="data-scroll-locked",B2=function(n,o,u,r){var d=n.left,h=n.top,g=n.right,y=n.gap;return u===void 0&&(u="margin"),` - .`.concat(b2,` { - overflow: hidden `).concat(r,`; - padding-right: `).concat(y,"px ").concat(r,`; - } - body[`).concat(Kn,`] { - overflow: hidden `).concat(r,`; - overscroll-behavior: contain; - `).concat([o&&"position: relative ".concat(r,";"),u==="margin"&&` - padding-left: `.concat(d,`px; - padding-top: `).concat(h,`px; - padding-right: `).concat(g,`px; - margin-left:0; - margin-top:0; - margin-right: `).concat(y,"px ").concat(r,`; - `),u==="padding"&&"padding-right: ".concat(y,"px ").concat(r,";")].filter(Boolean).join(""),` - } - - .`).concat(Ao,` { - right: `).concat(y,"px ").concat(r,`; - } - - .`).concat(Do,` { - margin-right: `).concat(y,"px ").concat(r,`; - } - - .`).concat(Ao," .").concat(Ao,` { - right: 0 `).concat(r,`; - } - - .`).concat(Do," .").concat(Do,` { - margin-right: 0 `).concat(r,`; - } - - body[`).concat(Kn,`] { - `).concat(y2,": ").concat(y,`px; - } -`)},pv=function(){var n=parseInt(document.body.getAttribute(Kn)||"0",10);return isFinite(n)?n:0},H2=function(){E.useEffect(function(){return document.body.setAttribute(Kn,(pv()+1).toString()),function(){var n=pv()-1;n<=0?document.body.removeAttribute(Kn):document.body.setAttribute(Kn,n.toString())}},[])},L2=function(n){var o=n.noRelative,u=n.noImportant,r=n.gapMode,d=r===void 0?"margin":r;H2();var h=E.useMemo(function(){return U2(d)},[d]);return E.createElement(k2,{styles:B2(h,!o,d,u?"":"!important")})},jc=!1;if(typeof window<"u")try{var So=Object.defineProperty({},"passive",{get:function(){return jc=!0,!0}});window.addEventListener("test",So,So),window.removeEventListener("test",So,So)}catch{jc=!1}var Yn=jc?{passive:!1}:!1,q2=function(n){return n.tagName==="TEXTAREA"},kg=function(n,o){if(!(n instanceof Element))return!1;var u=window.getComputedStyle(n);return u[o]!=="hidden"&&!(u.overflowY===u.overflowX&&!q2(n)&&u[o]==="visible")},Y2=function(n){return kg(n,"overflowY")},G2=function(n){return kg(n,"overflowX")},bv=function(n,o){var u=o.ownerDocument,r=o;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var d=Bg(n,r);if(d){var h=Hg(n,r),g=h[1],y=h[2];if(g>y)return!0}r=r.parentNode}while(r&&r!==u.body);return!1},V2=function(n){var o=n.scrollTop,u=n.scrollHeight,r=n.clientHeight;return[o,u,r]},X2=function(n){var o=n.scrollLeft,u=n.scrollWidth,r=n.clientWidth;return[o,u,r]},Bg=function(n,o){return n==="v"?Y2(o):G2(o)},Hg=function(n,o){return n==="v"?V2(o):X2(o)},Q2=function(n,o){return n==="h"&&o==="rtl"?-1:1},Z2=function(n,o,u,r,d){var h=Q2(n,window.getComputedStyle(o).direction),g=h*r,y=u.target,N=o.contains(y),S=!1,O=g>0,v=0,C=0;do{if(!y)break;var H=Hg(n,y),R=H[0],U=H[1],k=H[2],G=U-k-h*R;(R||G)&&Bg(n,y)&&(v+=G,C+=R);var Z=y.parentNode;y=Z&&Z.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Z.host:Z}while(!N&&y!==document.body||N&&(o.contains(y)||o===y));return(O&&Math.abs(v)<1||!O&&Math.abs(C)<1)&&(S=!0),S},Eo=function(n){return"changedTouches"in n?[n.changedTouches[0].clientX,n.changedTouches[0].clientY]:[0,0]},yv=function(n){return[n.deltaX,n.deltaY]},xv=function(n){return n&&"current"in n?n.current:n},K2=function(n,o){return n[0]===o[0]&&n[1]===o[1]},J2=function(n){return` - .block-interactivity-`.concat(n,` {pointer-events: none;} - .allow-interactivity-`).concat(n,` {pointer-events: all;} -`)},F2=0,Gn=[];function $2(n){var o=E.useRef([]),u=E.useRef([0,0]),r=E.useRef(),d=E.useState(F2++)[0],h=E.useState(Ug)[0],g=E.useRef(n);E.useEffect(function(){g.current=n},[n]),E.useEffect(function(){if(n.inert){document.body.classList.add("block-interactivity-".concat(d));var U=p2([n.lockRef.current],(n.shards||[]).map(xv),!0).filter(Boolean);return U.forEach(function(k){return k.classList.add("allow-interactivity-".concat(d))}),function(){document.body.classList.remove("block-interactivity-".concat(d)),U.forEach(function(k){return k.classList.remove("allow-interactivity-".concat(d))})}}},[n.inert,n.lockRef.current,n.shards]);var y=E.useCallback(function(U,k){if("touches"in U&&U.touches.length===2||U.type==="wheel"&&U.ctrlKey)return!g.current.allowPinchZoom;var G=Eo(U),Z=u.current,K="deltaX"in U?U.deltaX:Z[0]-G[0],P="deltaY"in U?U.deltaY:Z[1]-G[1],ee,oe=U.target,fe=Math.abs(K)>Math.abs(P)?"h":"v";if("touches"in U&&fe==="h"&&oe.type==="range")return!1;var Y=window.getSelection(),pe=Y&&Y.anchorNode,mt=pe?pe===oe||pe.contains(oe):!1;if(mt)return!1;var ke=bv(fe,oe);if(!ke)return!0;if(ke?ee=fe:(ee=fe==="v"?"h":"v",ke=bv(fe,oe)),!ke)return!1;if(!r.current&&"changedTouches"in U&&(K||P)&&(r.current=ee),!ee)return!0;var le=r.current||ee;return Z2(le,k,U,le==="h"?K:P)},[]),N=E.useCallback(function(U){var k=U;if(!(!Gn.length||Gn[Gn.length-1]!==h)){var G="deltaY"in k?yv(k):Eo(k),Z=o.current.filter(function(ee){return ee.name===k.type&&(ee.target===k.target||k.target===ee.shadowParent)&&K2(ee.delta,G)})[0];if(Z&&Z.should){k.cancelable&&k.preventDefault();return}if(!Z){var K=(g.current.shards||[]).map(xv).filter(Boolean).filter(function(ee){return ee.contains(k.target)}),P=K.length>0?y(k,K[0]):!g.current.noIsolation;P&&k.cancelable&&k.preventDefault()}}},[]),S=E.useCallback(function(U,k,G,Z){var K={name:U,delta:k,target:G,should:Z,shadowParent:W2(G)};o.current.push(K),setTimeout(function(){o.current=o.current.filter(function(P){return P!==K})},1)},[]),O=E.useCallback(function(U){u.current=Eo(U),r.current=void 0},[]),v=E.useCallback(function(U){S(U.type,yv(U),U.target,y(U,n.lockRef.current))},[]),C=E.useCallback(function(U){S(U.type,Eo(U),U.target,y(U,n.lockRef.current))},[]);E.useEffect(function(){return Gn.push(h),n.setCallbacks({onScrollCapture:v,onWheelCapture:v,onTouchMoveCapture:C}),document.addEventListener("wheel",N,Yn),document.addEventListener("touchmove",N,Yn),document.addEventListener("touchstart",O,Yn),function(){Gn=Gn.filter(function(U){return U!==h}),document.removeEventListener("wheel",N,Yn),document.removeEventListener("touchmove",N,Yn),document.removeEventListener("touchstart",O,Yn)}},[]);var H=n.removeScrollBar,R=n.inert;return E.createElement(E.Fragment,null,R?E.createElement(h,{styles:J2(d)}):null,H?E.createElement(L2,{noRelative:n.noRelative,gapMode:n.gapMode}):null)}function W2(n){for(var o=null;n!==null;)n instanceof ShadowRoot&&(o=n.host,n=n.host),n=n.parentNode;return o}const I2=j2(Rg,$2);var Lg=E.forwardRef(function(n,o){return E.createElement(Lo,pa({},n,{ref:o,sideCar:I2}))});Lg.classNames=Lo.classNames;var P2=function(n){if(typeof document>"u")return null;var o=Array.isArray(n)?n[0]:n;return o.ownerDocument.body},Vn=new WeakMap,No=new WeakMap,zo={},fc=0,qg=function(n){return n&&(n.host||qg(n.parentNode))},eS=function(n,o){return o.map(function(u){if(n.contains(u))return u;var r=qg(u);return r&&n.contains(r)?r:(console.error("aria-hidden",u,"in not contained inside",n,". Doing nothing"),null)}).filter(function(u){return!!u})},tS=function(n,o,u,r){var d=eS(o,Array.isArray(n)?n:[n]);zo[u]||(zo[u]=new WeakMap);var h=zo[u],g=[],y=new Set,N=new Set(d),S=function(v){!v||y.has(v)||(y.add(v),S(v.parentNode))};d.forEach(S);var O=function(v){!v||N.has(v)||Array.prototype.forEach.call(v.children,function(C){if(y.has(C))O(C);else try{var H=C.getAttribute(r),R=H!==null&&H!=="false",U=(Vn.get(C)||0)+1,k=(h.get(C)||0)+1;Vn.set(C,U),h.set(C,k),g.push(C),U===1&&R&&No.set(C,!0),k===1&&C.setAttribute(u,"true"),R||C.setAttribute(r,"true")}catch(G){console.error("aria-hidden: cannot operate on ",C,G)}})};return O(o),y.clear(),fc++,function(){g.forEach(function(v){var C=Vn.get(v)-1,H=h.get(v)-1;Vn.set(v,C),h.set(v,H),C||(No.has(v)||v.removeAttribute(r),No.delete(v)),H||v.removeAttribute(u)}),fc--,fc||(Vn=new WeakMap,Vn=new WeakMap,No=new WeakMap,zo={})}},aS=function(n,o,u){u===void 0&&(u="data-aria-hidden");var r=Array.from(Array.isArray(n)?n:[n]),d=P2(n);return d?(r.push.apply(r,Array.from(d.querySelectorAll("[aria-live], script"))),tS(r,d,u,"aria-hidden")):function(){return null}},lS=Object.defineProperty,Gt=(n,o)=>lS(n,"name",{value:o,configurable:!0}),Xc="Dialog",[Yg,IS]=fg(Xc),[nS,ua]=Yg(Xc),iS=Gt(n=>{const{__scopeDialog:o,children:u,open:r,defaultOpen:d,onOpenChange:h,modal:g=!0}=n,y=E.useRef(null),N=E.useRef(null),[S,O]=hg({prop:r,defaultProp:d??!1,onChange:h,caller:Xc}),[v,C]=E.useState(0),[H,R]=E.useState(0);return f.jsx(nS,{scope:o,triggerRef:y,contentRef:N,contentId:jo(),titleId:jo(),descriptionId:jo(),titlePresent:v>0,descriptionPresent:H>0,setTitleCount:C,setDescriptionCount:R,open:S,onOpenChange:O,onOpenToggle:E.useCallback(()=>O(U=>!U),[O]),modal:g,children:u})},"Dialog"),sS="DialogTrigger",oS=E.forwardRef(Gt(function(o,u){const{__scopeDialog:r,...d}=o,h=ua(sS,r),g=Jl(u,h.triggerRef);return f.jsx(Qa.button,{type:"button","aria-haspopup":"dialog","aria-expanded":h.open,"aria-controls":h.open?h.contentId:void 0,"data-state":qo(h.open),...d,ref:g,onClick:Va(o.onClick,h.onOpenToggle)})},"DialogTrigger")),Gg="DialogPortal",[uS,Vg]=Yg(Gg,{forceMount:void 0}),rS=Gt(n=>{const{__scopeDialog:o,forceMount:u,children:r,container:d}=n,h=ua(Gg,o);return f.jsx(uS,{scope:o,forceMount:u,children:E.Children.map(r,g=>f.jsx(Yc,{present:u||h.open,children:f.jsx(m2,{asChild:!0,container:d,children:g})}))})},"DialogPortal"),Ac="DialogOverlay",cS=E.forwardRef(Gt(function(o,u){const r=Vg(Ac,o.__scopeDialog),{forceMount:d=r.forceMount,...h}=o,g=ua(Ac,o.__scopeDialog);return g.modal?f.jsx(Yc,{present:d||g.open,children:f.jsx(dS,{...h,ref:u})}):null},"DialogOverlay")),fS=Ro("DialogOverlay.RemoveScroll"),dS=E.forwardRef(Gt(function(o,u){const{__scopeDialog:r,...d}=o,h=ua(Ac,r),g=yg(),y=Jl(u,g);return f.jsx(Lg,{as:fS,allowPinchZoom:!0,shards:[h.contentRef],children:f.jsx(Qa.div,{"data-state":qo(h.open),...d,ref:y,style:{pointerEvents:"auto",...d.style}})})},"DialogOverlayImpl")),Ki="DialogContent",mS=E.forwardRef(Gt(function(o,u){const r=Vg(Ki,o.__scopeDialog),{forceMount:d=r.forceMount,...h}=o,g=ua(Ki,o.__scopeDialog);return f.jsx(Yc,{present:d||g.open,children:g.modal?f.jsx(hS,{...h,ref:u}):f.jsx(vS,{...h,ref:u})})},"DialogContent")),hS=E.forwardRef(Gt(function(o,u){const r=ua(Ki,o.__scopeDialog),d=E.useRef(null),h=Jl(u,r.contentRef,d);return E.useEffect(()=>{const g=d.current;if(g)return aS(g)},[]),f.jsx(Xg,{...o,ref:h,trapFocus:r.open,disableOutsidePointerEvents:r.open,onCloseAutoFocus:Va(o.onCloseAutoFocus,g=>{g.preventDefault(),r.triggerRef.current?.focus()}),onPointerDownOutside:Va(o.onPointerDownOutside,g=>{const y=g.detail.originalEvent,N=y.button===0&&y.ctrlKey===!0;(y.button===2||N)&&g.preventDefault()}),onFocusOutside:Va(o.onFocusOutside,g=>g.preventDefault())})},"DialogContentModal")),vS=E.forwardRef(Gt(function(o,u){const r=ua(Ki,o.__scopeDialog),d=E.useRef(!1),h=E.useRef(!1);return f.jsx(Xg,{...o,ref:u,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:g=>{o.onCloseAutoFocus?.(g),g.defaultPrevented||(d.current||r.triggerRef.current?.focus(),g.preventDefault()),d.current=!1,h.current=!1},onInteractOutside:g=>{o.onInteractOutside?.(g),g.defaultPrevented||(d.current=!0,g.detail.originalEvent.type==="pointerdown"&&(h.current=!0));const y=g.target;r.triggerRef.current?.contains(y)&&g.preventDefault(),g.detail.originalEvent.type==="focusin"&&h.current&&g.preventDefault()}})},"DialogContentNonModal")),Xg=E.forwardRef(Gt(function(o,u){const{__scopeDialog:r,trapFocus:d,onOpenAutoFocus:h,onCloseAutoFocus:g,...y}=o,N=ua(Ki,r);return Vc(),f.jsx(f.Fragment,{children:f.jsx(c2,{asChild:!0,loop:!0,trapped:d,onMountAutoFocus:h,onUnmountAutoFocus:g,children:f.jsx(o2,{role:"dialog",id:N.contentId,"aria-describedby":N.descriptionPresent?N.descriptionId:void 0,"aria-labelledby":N.titlePresent?N.titleId:void 0,"data-state":qo(N.open),...y,ref:u,deferPointerDownOutside:!0,onDismiss:()=>N.onOpenChange(!1)})})})},"DialogContentImpl")),gS="DialogTitle",pS=E.forwardRef(Gt(function(o,u){const{__scopeDialog:r,...d}=o,h=ua(gS,r),{setTitleCount:g}=h;return El(()=>(g(y=>y+1),()=>g(y=>y-1)),[g]),f.jsx(Qa.h2,{id:h.titleId,...d,ref:u})},"DialogTitle")),bS="DialogDescription",yS=E.forwardRef(Gt(function(o,u){const{__scopeDialog:r,...d}=o,h=ua(bS,r),{setDescriptionCount:g}=h;return El(()=>(g(y=>y+1),()=>g(y=>y-1)),[g]),f.jsx(Qa.p,{id:h.descriptionId,...d,ref:u})},"DialogDescription")),xS="DialogClose",SS=E.forwardRef(Gt(function(o,u){const{__scopeDialog:r,...d}=o,h=ua(xS,r);return f.jsx(Qa.button,{type:"button",...d,ref:u,onClick:Va(o.onClick,()=>h.onOpenChange(!1))})},"DialogClose"));function qo(n){return n?"open":"closed"}Gt(qo,"getState");const Qc=iS,Qg=oS;function ES({className:n,...o}){return f.jsx(cS,{"data-slot":"dialog-overlay",className:je("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",n),...o})}function Zc({className:n,children:o,...u}){return f.jsxs(rS,{children:[f.jsx(ES,{}),f.jsxs(mS,{"data-slot":"dialog-content",className:je("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-md",n),...u,children:[o,f.jsxs(SS,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none cursor-pointer",children:[f.jsx(zy,{className:"size-4"}),f.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function Kc({className:n,...o}){return f.jsx("div",{"data-slot":"dialog-header",className:je("flex flex-col gap-1.5 text-left",n),...o})}function Zg({className:n,...o}){return f.jsx("div",{"data-slot":"dialog-footer",className:je("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",n),...o})}function Jc({className:n,...o}){return f.jsx(pS,{"data-slot":"dialog-title",className:je("text-lg leading-none font-semibold",n),...o})}function Fc({className:n,...o}){return f.jsx(yS,{"data-slot":"dialog-description",className:je("text-muted-foreground text-sm",n),...o})}var NS=Object.defineProperty,zS=(n,o)=>NS(n,"name",{value:o,configurable:!0}),TS=E.forwardRef(zS(function(o,u){return f.jsx(Qa.label,{...o,ref:u,onMouseDown:r=>{r.target.closest("button, input, select, textarea")||(o.onMouseDown?.(r),!r.defaultPrevented&&r.detail>1&&r.preventDefault())}})},"Label")),jS=TS;function AS({className:n,...o}){return f.jsx(jS,{"data-slot":"label",className:je("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",n),...o})}const DS=Sb,Kg=E.createContext({});function wS({...n}){return f.jsx(Kg.Provider,{value:{name:n.name},children:f.jsx(Eb,{...n})})}function Yo(){const n=E.useContext(Kg),o=E.useContext(Jg),{getFieldState:u}=Nb(),r=zb({name:n.name}),d=u(n.name,r);if(!n)throw new Error("useFormField should be used within ");const{id:h}=o;return{id:h,name:n.name,formItemId:`${h}-form-item`,formDescriptionId:`${h}-form-item-description`,formMessageId:`${h}-form-item-message`,...d}}const Jg=E.createContext({});function CS({className:n,...o}){const u=E.useId();return f.jsx(Jg.Provider,{value:{id:u},children:f.jsx("div",{"data-slot":"form-item",className:je("grid gap-2",n),...o})})}function _S({className:n,...o}){const{error:u,formItemId:r}=Yo();return f.jsx(AS,{"data-slot":"form-label","data-error":!!u,className:je("data-[error=true]:text-destructive",n),htmlFor:r,...o})}function MS({...n}){const{error:o,formItemId:u,formDescriptionId:r,formMessageId:d}=Yo();return f.jsx(Oc,{"data-slot":"form-control",id:u,"aria-describedby":o?`${r} ${d}`:r,"aria-invalid":!!o,...n})}function OS({className:n,...o}){const{formDescriptionId:u}=Yo();return f.jsx("p",{"data-slot":"form-description",id:u,className:je("text-muted-foreground text-xs",n),...o})}function RS({className:n,...o}){const{error:u,formMessageId:r}=Yo(),d=u?String(u?.message??""):o.children;return d?f.jsx("p",{"data-slot":"form-message",id:r,className:je("text-destructive text-xs font-medium",n),...o,children:d}):null}const US={done:{label:"done",variant:"success"},running:{label:"running",variant:"default"},pending:{label:"pending",variant:"secondary"},skipped:{label:"skipped",variant:"warning"},failed:{label:"failed",variant:"destructive"}},kS=[{id:"table",accessorFn:n=>`${n.schema}.${n.table}`,header:"Table",sortFn:"text",cell:({getValue:n})=>f.jsx("span",{className:"font-medium",children:n()})},{accessorKey:"state",header:"State",sortFn:"text",cell:({getValue:n})=>{const o=US[n()];return f.jsxs(ba,{variant:o.variant,children:[o.label==="running"&&f.jsx(Oo,{className:"size-3 animate-spin"}),o.label]})}},{accessorKey:"rows_copied",header:()=>f.jsx("span",{className:"block text-right",children:"Rows copied"}),sortFn:"basic",cell:({getValue:n})=>f.jsx("span",{className:"block text-right tabular-nums",children:dt(n())})},{accessorKey:"completed_at",header:"Completed",enableSorting:!1,cell:({row:n})=>f.jsx("span",{className:"text-muted-foreground",children:n.original.state==="done"?kc(n.original.completed_at):"–"})},{accessorKey:"error",header:"Note",enableSorting:!1,cell:({getValue:n})=>{const o=n();return o?f.jsx("span",{className:"text-destructive text-xs",children:o}):null}}],BS=ya({table:Be().trim().refine(n=>n===""||/^([A-Za-z_][A-Za-z0-9_$]*\.)?[A-Za-z_][A-Za-z0-9_$]*$/.test(n),{message:"Use schema.table (e.g. public.orders) or leave empty for all tables"})});function HS(){const[n,o]=E.useState(!1),u=wc(),r=Tb({resolver:rx(BS),defaultValues:{table:""}}),d=wo({mutationFn:h=>G1(h.table||void 0),onSuccess:(h,g)=>{Sl.success(g.table?`Backfill enqueued for ${g.table}`:"Backfill enqueued for all tables"),u.invalidateQueries({queryKey:["stats"]}),o(!1),r.reset()},onError:h=>Sl.error(h.message)});return f.jsxs(Qc,{open:n,onOpenChange:o,children:[f.jsx(Qg,{asChild:!0,children:f.jsxs(Ga,{size:"sm",children:[f.jsx(Cc,{className:"size-4"}),"Sync tables"]})}),f.jsxs(Zc,{children:[f.jsxs(Kc,{children:[f.jsx(Jc,{children:"Trigger a backfill"}),f.jsx(Fc,{children:"Re-sync existing rows into the sinks. Runs concurrently with live streaming — no locks, no downtime."})]}),f.jsx(DS,{...r,children:f.jsxs("form",{onSubmit:r.handleSubmit(h=>d.mutate(h)),className:"space-y-4",children:[f.jsx(wS,{control:r.control,name:"table",render:({field:h})=>f.jsxs(CS,{children:[f.jsx(_S,{children:"Table"}),f.jsx(MS,{children:f.jsx(Hc,{placeholder:"public.orders",autoComplete:"off",...h})}),f.jsx(OS,{children:"Leave empty to backfill every published table."}),f.jsx(RS,{})]})}),f.jsxs(Zg,{children:[f.jsx(Ga,{type:"button",variant:"outline",onClick:()=>o(!1),children:"Cancel"}),f.jsxs(Ga,{type:"submit",disabled:d.isPending,children:[d.isPending&&f.jsx(Oo,{className:"size-4 animate-spin"}),"Start backfill"]})]})]})})]})]})}function LS({stats:n}){const o=E.useMemo(()=>n?.backfill??[],[n]),u=Mo({features:Ho,columns:kS,data:o,initialState:{sorting:[{id:"table",desc:!1}]}});return f.jsxs("div",{className:"space-y-4",children:[f.jsxs("div",{className:"flex items-center justify-between",children:[f.jsx("p",{className:"text-muted-foreground max-w-xl text-sm",children:"Watermark-based chunked sync of existing data, interleaved with the live stream. Progress survives restarts."}),f.jsx(HS,{})]}),f.jsx(ga,{className:"py-0",children:f.jsx(Ya,{className:"px-0",children:f.jsx(Bo,{table:u,empty:f.jsxs("div",{className:"text-muted-foreground flex flex-col items-center gap-1 text-sm",children:[f.jsx(Cc,{className:"size-5"}),"No backfills have run. New deployments backfill automatically when the replication slot is first created."]})})})})]})}const qS={INSERT:"success",UPDATE:"secondary",DELETE:"destructive",READ:"outline"},Fg=E.createContext(()=>{});function YS({entry:n}){const o=E.useContext(Fg),u=wc(),r=()=>{u.invalidateQueries({queryKey:["dlq"]}),u.invalidateQueries({queryKey:["stats"]})},d=wo({mutationFn:()=>L1(n.id),onSuccess:()=>{Sl.success(`Retried ${n.id} successfully`),r()},onError:g=>{Sl.error(g.message),r()}}),h=wo({mutationFn:()=>Y1(n.id),onSuccess:()=>{Sl.success(`Discarded ${n.id}`),r()},onError:g=>Sl.error(g.message)});return f.jsxs("div",{className:"flex justify-end gap-1.5",children:[f.jsx(Ga,{size:"xs",variant:"ghost",onClick:()=>o(n),title:"Inspect the parked event payload",children:f.jsx(ly,{className:"size-3"})}),f.jsxs(Ga,{size:"xs",variant:"outline",disabled:d.isPending,onClick:()=>d.mutate(),title:"Re-deliver this event to its sink",children:[d.isPending?f.jsx(Oo,{className:"size-3 animate-spin"}):f.jsx(Rv,{className:"size-3"}),"Retry"]}),f.jsx(Ga,{size:"xs",variant:"ghost",className:"text-destructive hover:text-destructive",disabled:h.isPending,onClick:()=>h.mutate(),title:"Drop this event permanently",children:f.jsx(Ey,{className:"size-3"})})]})}const GS=[{accessorKey:"sink",header:"Sink",sortFn:"text",cell:({getValue:n})=>f.jsx(ba,{variant:"outline",children:n()})},{id:"target",accessorFn:n=>`${n.schema}.${n.table}`,header:"Table",sortFn:"text",cell:({row:n,getValue:o})=>f.jsxs("span",{className:"flex items-center gap-2",children:[f.jsx("span",{className:"font-medium",children:o()}),f.jsx(ba,{variant:qS[n.original.operation]??"secondary",className:"text-[10px]",children:n.original.operation})]})},{accessorKey:"error",header:"Error",enableSorting:!1,cell:({getValue:n})=>f.jsx("span",{className:"text-destructive block max-w-md truncate text-xs whitespace-normal sm:whitespace-nowrap",title:n(),children:n()})},{accessorKey:"attempts",header:()=>f.jsx("span",{className:"block text-right",children:"Attempts"}),sortFn:"basic",cell:({getValue:n})=>f.jsx("span",{className:"block text-right tabular-nums",children:n()})},{accessorKey:"last_failed_at",header:"Last failed",sortFn:"datetime",cell:({getValue:n})=>f.jsx("span",{className:"text-muted-foreground",children:kc(n())})},{id:"actions",header:()=>f.jsx("span",{className:"block text-right",children:"Actions"}),enableSorting:!1,cell:({row:n})=>f.jsx(YS,{entry:n.original})}];function VS({count:n}){const[o,u]=E.useState(!1),r=wc(),d=wo({mutationFn:q1,onSuccess:h=>{Sl.success(`Retried ${h.retried??0}: ${h.succeeded??0} succeeded, ${h.failed??0} failed`),r.invalidateQueries({queryKey:["dlq"]}),r.invalidateQueries({queryKey:["stats"]}),u(!1)},onError:h=>Sl.error(h.message)});return f.jsxs(Qc,{open:o,onOpenChange:u,children:[f.jsx(Qg,{asChild:!0,children:f.jsxs(Ga,{size:"sm",disabled:n===0,children:[f.jsx(Rv,{className:"size-4"}),"Retry all"]})}),f.jsxs(Zc,{children:[f.jsxs(Kc,{children:[f.jsx(Jc,{children:"Retry all parked events?"}),f.jsxs(Fc,{children:["Re-delivers all ",n," parked events to their sinks. Events that still fail stay in the queue with an updated error. If newer changes for the same rows have already flowed, retrying re-applies the older state — consider discarding stale entries and re-running a backfill instead."]})]}),f.jsxs(Zg,{children:[f.jsx(Ga,{variant:"outline",onClick:()=>u(!1),children:"Cancel"}),f.jsxs(Ga,{onClick:()=>d.mutate(),disabled:d.isPending,children:[d.isPending&&f.jsx(Oo,{className:"size-4 animate-spin"}),"Retry ",n," events"]})]})]})]})}function XS({entry:n,onClose:o}){return f.jsx(Qc,{open:n!==null,onOpenChange:u=>!u&&o(),children:f.jsxs(Zc,{className:"sm:max-w-2xl",children:[f.jsxs(Kc,{children:[f.jsx(Jc,{children:"Parked event"}),f.jsx(Fc,{children:"The event payload as it was delivered to the sink (transforms already applied). Retrying re-delivers exactly this payload."})]}),n&&f.jsxs("div",{className:"space-y-3",children:[f.jsx("dl",{className:"grid grid-cols-2 gap-x-4 gap-y-1.5 text-xs sm:grid-cols-3",children:[["Sink",n.sink],["Table",`${n.schema}.${n.table}`],["Operation",n.operation],["LSN",n.lsn],["Attempts",String(n.attempts)],["Last failed",kc(n.last_failed_at)]].map(([u,r])=>f.jsxs("div",{children:[f.jsx("dt",{className:"text-muted-foreground",children:u}),f.jsx("dd",{className:"truncate font-mono",title:r,children:r})]},u))}),f.jsxs("div",{children:[f.jsx("div",{className:"text-muted-foreground mb-1 text-xs",children:"Error"}),f.jsx("p",{className:"text-destructive text-xs break-words",children:n.error})]}),f.jsx("pre",{className:"bg-muted max-h-80 overflow-auto rounded-md p-3 font-mono text-xs",children:n.event===void 0?"Event payload not included in the API response.":JSON.stringify(n.event,null,2)})]})]})})}function QS({dlqEnabled:n}){const[o,u]=E.useState(""),[r,d]=E.useState(null),{data:h}=Z1(n),g=E.useMemo(()=>h?.entries??[],[h]),y=Mo({features:Ho,columns:GS,data:g,globalFilterFn:"includesString",initialState:{sorting:[{id:"last_failed_at",desc:!0}]},state:{globalFilter:o}});return f.jsx(Fg.Provider,{value:d,children:f.jsxs("div",{className:"space-y-4",children:[f.jsx(XS,{entry:r,onClose:()=>d(null)}),f.jsxs("div",{className:"flex items-center justify-between gap-3",children:[f.jsxs("div",{className:"relative max-w-xs flex-1",children:[f.jsx(Uv,{className:"text-muted-foreground absolute top-1/2 left-2.5 size-4 -translate-y-1/2"}),f.jsx(Hc,{placeholder:"Filter by sink, table, error…",value:o,onChange:N=>u(N.target.value),className:"h-8 pl-8 text-sm"})]}),f.jsx(VS,{count:g.length})]}),f.jsx(ga,{className:"py-0",children:f.jsx(Ya,{className:"px-0",children:f.jsx(Bo,{table:y,empty:f.jsxs("div",{className:"text-muted-foreground flex flex-col items-center gap-1 text-sm",children:[f.jsx(_c,{className:"size-5"}),n?"No parked events — the pipeline is healthy.":"Dead-letter queue is disabled (set REDIS_URL and CDC_DLQ_ENABLED=true)."]})})})})]})})}const ZS={overview:{title:"Overview",description:"Pipeline health at a glance"},tables:{title:"Table activity",description:"Change events by source table"},backfill:{title:"Backfill",description:"Sync existing data into the sinks"},dlq:{title:"Dead letters",description:"Poison events parked for triage"}};function KS(){const[n,o]=E.useState("overview"),{data:u,isError:r}=V1(),d=ZS[n];return E.useEffect(()=>{document.title=`${d.title} · GTC`},[d.title]),f.jsxs(D1,{page:n,onNavigate:o,stats:u,offline:r,dlqCount:u?.dlq.entries??0,title:d.title,description:d.description,children:[n==="overview"&&f.jsx(lx,{stats:u}),n==="tables"&&f.jsx(ix,{stats:u}),n==="backfill"&&f.jsx(LS,{stats:u}),n==="dlq"&&f.jsx(QS,{dlqEnabled:u?.dlq.enabled??!1})]})}function JS(n){const o=document.documentElement.classList.contains("dark");return f.jsx(Hx,{theme:o?"dark":"light",className:"toaster group",style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)"},...n})}const FS=new jb({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1}}});kb.createRoot(document.getElementById("root")).render(f.jsx(E.StrictMode,{children:f.jsxs(Ab,{client:FS,children:[f.jsx(KS,{}),f.jsx(JS,{position:"bottom-right"})]})})); diff --git a/ui/dist/assets/index-DD7dZXNj.css b/ui/dist/assets/index-DD7dZXNj.css deleted file mode 100644 index d5c592e..0000000 --- a/ui/dist/assets/index-DD7dZXNj.css +++ /dev/null @@ -1 +0,0 @@ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-400:oklch(82.8% .189 84.429);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-600:oklch(58.8% .158 241.966);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-600:oklch(54.1% .281 293.009);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-tight:1.25;--radius-xs:.125rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}body{background-color:var(--background);color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"cv02","cv03","cv04","cv11";font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,sans-serif}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.not-sr-only{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-4{right:calc(var(--spacing) * 4)}.left-0{left:0}.left-1\/2{left:50%}.left-2\.5{left:calc(var(--spacing) * 2.5)}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mb-1{margin-bottom:var(--spacing)}.ml-14{margin-left:calc(var(--spacing) * 14)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-4\.5{width:calc(var(--spacing) * 4.5);height:calc(var(--spacing) * 4.5)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-full{width:100%;height:100%}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-28{height:calc(var(--spacing) * 28)}.h-\[200px\]{height:200px}.h-\[220px\]{height:220px}.max-h-80{max-height:calc(var(--spacing) * 80)}.min-h-screen{min-height:100vh}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-none{translate:none}.scale-3d{scale:var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:0}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-reverse>:not(:last-child)){--tw-space-y-reverse:1}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}:where(.space-x-reverse>:not(:last-child)){--tw-space-x-reverse:1}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-s{border-start-start-radius:.25rem;border-end-start-radius:.25rem}.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-start-end-radius:.25rem;border-end-end-radius:.25rem}.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-bs{border-block-start-style:var(--tw-border-style);border-block-start-width:1px}.border-be{border-block-end-style:var(--tw-border-style);border-block-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-input{border-color:var(--input)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.bg-background,.bg-background\/80{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/80{background-color:color-mix(in oklab,var(--background) 80%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-card{background-color:var(--card)}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive) 10%,transparent)}}.bg-destructive\/90{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/90{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-muted{background-color:var(--muted)}.bg-primary,.bg-primary\/70{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/70{background-color:color-mix(in oklab,var(--primary) 70%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-accent{background-color:var(--sidebar-accent)}.bg-success\/10{background-color:var(--success)}@supports (color:color-mix(in lab,red,red)){.bg-success\/10{background-color:color-mix(in oklab,var(--success) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-warning\/15{background-color:var(--warning)}@supports (color:color-mix(in lab,red,red)){.bg-warning\/15{background-color:color-mix(in oklab,var(--warning) 15%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-amber-400{--tw-gradient-from:var(--color-amber-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-orange-500{--tw-gradient-to:var(--color-orange-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-repeat{background-repeat:repeat}.mask-no-clip{-webkit-mask-clip:no-clip;mask-clip:no-clip}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:0}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-emerald-600{color:var(--color-emerald-600)}.text-foreground{color:var(--foreground)}.text-muted-foreground,.text-muted-foreground\/50{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,var(--muted-foreground) 50%,transparent)}}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-accent-foreground{color:var(--sidebar-accent-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/60{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/60{color:color-mix(in oklab,var(--sidebar-foreground) 60%,transparent)}}.text-sidebar-foreground\/65{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/65{color:color-mix(in oklab,var(--sidebar-foreground) 65%,transparent)}}.text-sky-600{color:var(--color-sky-600)}.text-success{color:var(--success)}.text-violet-600{color:var(--color-violet-600)}.text-warning{color:var(--warning)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.stacked-fractions{--tw-numeric-fraction:stacked-fractions;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.normal-nums{font-variant-numeric:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-invert{--tw-backdrop-invert:invert(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.paused{animation-play-state:paused}.ring-inset{--tw-ring-inset:inset}.running{animation-play-state:running}.zoom-in{--tw-enter-scale:0}.zoom-out{--tw-exit-scale:0}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.first\:pl-4:first-child{padding-left:calc(var(--spacing) * 4)}.last\:pr-4:last-child{padding-right:calc(var(--spacing) * 4)}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.hover\:bg-sidebar-accent:hover,.hover\:bg-sidebar-accent\/60:hover{background-color:var(--sidebar-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-sidebar-accent\/60:hover{background-color:color-mix(in oklab,var(--sidebar-accent) 60%,transparent)}}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\>svg\]\:px-2:has(>svg){padding-inline:calc(var(--spacing) * 2)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}@media(min-width:40rem){.sm\:inline-flex{display:inline-flex}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:whitespace-nowrap{white-space:nowrap}}@media(min-width:48rem){.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(min-width:64rem){.lg\:ml-56{margin-left:calc(var(--spacing) * 56)}.lg\:block{display:block}.lg\:hidden{display:none}.lg\:inline-flex{display:inline-flex}.lg\:w-56{width:calc(var(--spacing) * 56)}.lg\:justify-start{justify-content:flex-start}.lg\:px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.lg\:px-4{padding-inline:calc(var(--spacing) * 4)}}@media(min-width:80rem){.xl\:col-span-2{grid-column:span 2/span 2}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-destructive\/20:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/20:is(.dark *){background-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input) 30%,transparent)}}.dark\:bg-success\/15:is(.dark *){background-color:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-success\/15:is(.dark *){background-color:color-mix(in oklab,var(--success) 15%,transparent)}}.dark\:text-emerald-400:is(.dark *){color:var(--color-emerald-400)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\:text-sky-400:is(.dark *){color:var(--color-sky-400)}.dark\:text-violet-400:is(.dark *){color:var(--color-violet-400)}@media(hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent) 50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input) 50%,transparent)}}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:.625rem;--background:oklch(98.5% 0 0);--foreground:oklch(14.1% .005 285.823);--card:oklch(100% 0 0);--card-foreground:oklch(14.1% .005 285.823);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.1% .005 285.823);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--accent-foreground:oklch(21% .006 285.885);--destructive:oklch(57.7% .245 27.325);--success:oklch(62.7% .17 149.2);--warning:oklch(66.6% .179 58.318);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--ring:oklch(70.5% .015 286.067);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(100% 0 0);--sidebar-foreground:oklch(14.1% .005 285.823);--sidebar-primary:oklch(21% .006 285.885);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(96.7% .001 286.375);--sidebar-accent-foreground:oklch(21% .006 285.885);--sidebar-border:oklch(92% .004 286.32);--sidebar-ring:oklch(70.5% .015 286.067)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--card:oklch(17.5% .006 285.885);--card-foreground:oklch(98.5% 0 0);--popover:oklch(21% .006 285.885);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(24.4% .006 286.033);--muted-foreground:oklch(70.5% .015 286.067);--accent:oklch(27.4% .006 286.033);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--success:oklch(72.3% .192 149.579);--warning:oklch(82.8% .189 84.429);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.2% .016 285.938);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(16.5% .006 285.885);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(27.4% .006 286.033);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.2% .016 285.938)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}} diff --git a/ui/dist/assets/index-DofAKR1r.js b/ui/dist/assets/index-DofAKR1r.js new file mode 100644 index 0000000..bde640d --- /dev/null +++ b/ui/dist/assets/index-DofAKR1r.js @@ -0,0 +1,49 @@ +import{r as cb,a as E,R as Fi,j as f,o as Mt,b as Ng,s as me,_ as fb,n as Se,d as Jl,e as la,u as db,f as ko,F as nc,t as mb,h as hb,i as gb,k as vb,l as pb,m as bb,p as yb,q as xb,v as Sb,x as Eb,y as Nb,z as $i,A as vc,B as lc,C as zg,D as q,E as zb,G as Tb,H as jb,I as Ab,J as Mc,K as Db,L as Oo,Q as wb,M as _b}from"./data-DHjwm5_s.js";import{r as Cb,c as Tg,R as jg,A as Ag,C as Dg,X as wg,Y as _g,T as Cg,a as Mg,t as Mb,b as Ob,d as Rb,e as Og}from"./charts-Bt2W3tNT.js";(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))u(d);new MutationObserver(d=>{for(const h of d)if(h.type==="childList")for(const v of h.addedNodes)v.tagName==="LINK"&&v.rel==="modulepreload"&&u(v)}).observe(document,{childList:!0,subtree:!0});function r(d){const h={};return d.integrity&&(h.integrity=d.integrity),d.referrerPolicy&&(h.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?h.credentials="include":d.crossOrigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function u(d){if(d.ep)return;d.ep=!0;const h=r(d);fetch(d.href,h)}})();var ic={exports:{}},Qi={},sc={exports:{}},oc={};var Xh;function Ub(){return Xh||(Xh=1,(function(l){function o(j,B){var F=j.length;j.push(B);e:for(;0>>1,L=j[se];if(0>>1;sed(ce,F))Wd(te,ce)?(j[se]=te,j[W]=F,se=W):(j[se]=ce,j[ye]=F,se=ye);else if(Wd(te,F))j[se]=te,j[W]=F,se=W;else break e}}return B}function d(j,B){var F=j.sortIndex-B.sortIndex;return F!==0?F:j.id-B.id}if(l.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var h=performance;l.unstable_now=function(){return h.now()}}else{var v=Date,y=v.now();l.unstable_now=function(){return v.now()-y}}var N=[],S=[],O=1,g=null,_=3,H=!1,R=!1,U=!1,k=!1,G=typeof setTimeout=="function"?setTimeout:null,Z=typeof clearTimeout=="function"?clearTimeout:null,K=typeof setImmediate<"u"?setImmediate:null;function P(j){for(var B=r(S);B!==null;){if(B.callback===null)u(S);else if(B.startTime<=j)u(S),B.sortIndex=B.expirationTime,o(N,B);else break;B=r(S)}}function ee(j){if(U=!1,P(j),!R)if(r(N)!==null)R=!0,oe||(oe=!0,ne());else{var B=r(S);B!==null&&ke(ee,B.startTime-j)}}var oe=!1,fe=-1,Y=5,be=-1;function mt(){return k?!0:!(l.unstable_now()-bej&&mt());){var se=g.callback;if(typeof se=="function"){g.callback=null,_=g.priorityLevel;var L=se(g.expirationTime<=j);if(j=l.unstable_now(),typeof L=="function"){g.callback=L,P(j),B=!0;break t}g===r(N)&&u(N),P(j)}else u(N);g=r(N)}if(g!==null)B=!0;else{var De=r(S);De!==null&&ke(ee,De.startTime-j),B=!1}}break e}finally{g=null,_=F,H=!1}B=void 0}}finally{B?ne():oe=!1}}}var ne;if(typeof K=="function")ne=function(){K(He)};else if(typeof MessageChannel<"u"){var it=new MessageChannel,Le=it.port2;it.port1.onmessage=He,ne=function(){Le.postMessage(null)}}else ne=function(){G(He,0)};function ke(j,B){fe=G(function(){j(l.unstable_now())},B)}l.unstable_IdlePriority=5,l.unstable_ImmediatePriority=1,l.unstable_LowPriority=4,l.unstable_NormalPriority=3,l.unstable_Profiling=null,l.unstable_UserBlockingPriority=2,l.unstable_cancelCallback=function(j){j.callback=null},l.unstable_forceFrameRate=function(j){0>j||125se?(j.sortIndex=F,o(S,j),r(N)===null&&j===r(S)&&(U?(Z(fe),fe=-1):U=!0,ke(ee,F-se))):(j.sortIndex=L,o(N,j),R||H||(R=!0,oe||(oe=!0,ne()))),j},l.unstable_shouldYield=mt,l.unstable_wrapCallback=function(j){var B=_;return function(){var F=_;_=B;try{return j.apply(this,arguments)}finally{_=F}}}})(oc)),oc}var Qh;function kb(){return Qh||(Qh=1,sc.exports=Ub()),sc.exports}var Zh;function Bb(){if(Zh)return Qi;Zh=1;var l=kb(),o=cb(),r=Cb();function u(e){var t="https://react.dev/errors/"+e;if(1L||(e.current=se[L],se[L]=null,L--)}function ce(e,t){L++,se[L]=e.current,e.current=t}var W=De(null),te=De(null),le=De(null),qe=De(null);function ht(e,t){switch(ce(le,t),ce(te,e),ce(W,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?mh(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=mh(t),e=hh(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}ye(W),ce(W,e)}function ae(){ye(W),ye(te),ye(le)}function Xt(e){e.memoizedState!==null&&ce(qe,e);var t=W.current,a=hh(t,e.type);t!==a&&(ce(te,e),ce(W,a))}function St(e){te.current===e&&(ye(W),ye(te)),qe.current===e&&(ye(qe),Yi._currentValue=F)}var Et,Qt;function gt(e){if(Et===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);Et=t&&t[1]||"",Qt=-1)":-1i||p[n]!==T[i]){var w=` +`+p[n].replace(" at new "," at ");return e.displayName&&w.includes("")&&(w=w.replace("",e.displayName)),w}while(1<=n&&0<=i);break}}}finally{Il=!1,Error.prepareStackTrace=a}return(a=e?e.displayName||e.name:"")?gt(a):""}function An(e,t){switch(e.tag){case 26:case 27:case 5:return gt(e.type);case 16:return gt("Lazy");case 13:return e.child!==t&&t!==null?gt("Suspense Fallback"):gt("Suspense");case 19:return gt("SuspenseList");case 0:case 15:return Pn(e.type,!1);case 11:return Pn(e.type.render,!1);case 1:return Pn(e.type,!0);case 31:return gt("Activity");default:return""}}function Pl(e){try{var t="",a=null;do t+=An(e,a),a=e,e=e.return;while(e);return t}catch(n){return` +Error generating stack: `+n.message+` +`+n.stack}}var Ot=Object.prototype.hasOwnProperty,ei=l.unstable_scheduleCallback,ti=l.unstable_cancelCallback,st=l.unstable_shouldYield,es=l.unstable_requestPaint,Ze=l.unstable_now,Zo=l.unstable_getCurrentPriorityLevel,ts=l.unstable_ImmediatePriority,Dn=l.unstable_UserBlockingPriority,el=l.unstable_NormalPriority,as=l.unstable_LowPriority,tl=l.unstable_IdlePriority,Ka=l.log,ns=l.unstable_setDisableYieldValue,Zt=null,pt=null;function ma(e){if(typeof Ka=="function"&&ns(e),pt&&typeof pt.setStrictMode=="function")try{pt.setStrictMode(Zt,e)}catch{}}var vt=Math.clz32?Math.clz32:Ko,ls=Math.log,Kt=Math.LN2;function Ko(e){return e>>>=0,e===0?32:31-(ls(e)/Kt|0)|0}var Ja=256,Rt=262144,wn=4194304;function Ea(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function _n(e,t,a){var n=e.pendingLanes;if(n===0)return 0;var i=0,s=e.suspendedLanes,c=e.pingedLanes;e=e.warmLanes;var m=n&134217727;return m!==0?(n=m&~s,n!==0?i=Ea(n):(c&=m,c!==0?i=Ea(c):a||(a=m&~e,a!==0&&(i=Ea(a))))):(m=n&~s,m!==0?i=Ea(m):c!==0?i=Ea(c):a||(a=n&~e,a!==0&&(i=Ea(a)))),i===0?0:t!==0&&t!==i&&(t&s)===0&&(s=i&-i,a=t&-t,s>=a||s===32&&(a&4194048)!==0)?t:i}function Fa(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function ie(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ve(){var e=wn;return wn<<=1,(wn&62914560)===0&&(wn=4194304),e}function Ke(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function Je(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Cn(e,t,a,n,i,s){var c=e.pendingLanes;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=a,e.entangledLanes&=a,e.errorRecoveryDisabledLanes&=a,e.shellSuspendCounter=0;var m=e.entanglements,p=e.expirationTimes,T=e.hiddenUpdates;for(a=c&~a;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var l0=/[\n"\\]/g;function Ft(e){return e.replace(l0,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Wo(e,t,a,n,i,s,c,m){e.name="",c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?e.type=c:e.removeAttribute("type"),t!=null?c==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Jt(t)):e.value!==""+Jt(t)&&(e.value=""+Jt(t)):c!=="submit"&&c!=="reset"||e.removeAttribute("value"),t!=null?Io(e,c,Jt(t)):a!=null?Io(e,c,Jt(a)):n!=null&&e.removeAttribute("value"),i==null&&s!=null&&(e.defaultChecked=!!s),i!=null&&(e.checked=i&&typeof i!="function"&&typeof i!="symbol"),m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"?e.name=""+Jt(m):e.removeAttribute("name")}function of(e,t,a,n,i,s,c,m){if(s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"&&(e.type=s),t!=null||a!=null){if(!(s!=="submit"&&s!=="reset"||t!=null)){$o(e);return}a=a!=null?""+Jt(a):"",t=t!=null?""+Jt(t):a,m||t===e.value||(e.value=t),e.defaultValue=t}n=n??i,n=typeof n!="function"&&typeof n!="symbol"&&!!n,e.checked=m?e.checked:!!n,e.defaultChecked=!!n,c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"&&(e.name=c),$o(e)}function Io(e,t,a){t==="number"&&os(e.ownerDocument)===e||e.defaultValue===""+a||(e.defaultValue=""+a)}function rl(e,t,a,n){if(e=e.options,t){t={};for(var i=0;i"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),nr=!1;if(Ta)try{var ii={};Object.defineProperty(ii,"passive",{get:function(){nr=!0}}),window.addEventListener("test",ii,ii),window.removeEventListener("test",ii,ii)}catch{nr=!1}var Wa=null,lr=null,us=null;function hf(){if(us)return us;var e,t=lr,a=t.length,n,i="value"in Wa?Wa.value:Wa.textContent,s=i.length;for(e=0;e=ri),xf=" ",Sf=!1;function Ef(e,t){switch(e){case"keyup":return M0.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Nf(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var dl=!1;function R0(e,t){switch(e){case"compositionend":return Nf(t);case"keypress":return t.which!==32?null:(Sf=!0,xf);case"textInput":return e=t.data,e===xf&&Sf?null:e;default:return null}}function U0(e,t){if(dl)return e==="compositionend"||!ur&&Ef(e,t)?(e=hf(),us=lr=Wa=null,dl=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-e};e=n}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=Cf(a)}}function Of(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Of(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Rf(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=os(e.document);t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=os(e.document)}return t}function dr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var V0=Ta&&"documentMode"in document&&11>=document.documentMode,ml=null,mr=null,di=null,hr=!1;function Uf(e,t,a){var n=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;hr||ml==null||ml!==os(n)||(n=ml,"selectionStart"in n&&dr(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),di&&fi(di,n)||(di=n,n=ao(mr,"onSelect"),0>=c,i-=c,ha=1<<32-vt(t)+i|a<ue?(pe=J,J=null):pe=J.sibling;var Ne=A(x,J,z[ue],C);if(Ne===null){J===null&&(J=pe);break}e&&J&&Ne.alternate===null&&t(x,J),b=s(Ne,b,ue),Ee===null?$=Ne:Ee.sibling=Ne,Ee=Ne,J=pe}if(ue===z.length)return a(x,J),xe&&Aa(x,ue),$;if(J===null){for(;ueue?(pe=J,J=null):pe=J.sibling;var xn=A(x,J,Ne.value,C);if(xn===null){J===null&&(J=pe);break}e&&J&&xn.alternate===null&&t(x,J),b=s(xn,b,ue),Ee===null?$=xn:Ee.sibling=xn,Ee=xn,J=pe}if(Ne.done)return a(x,J),xe&&Aa(x,ue),$;if(J===null){for(;!Ne.done;ue++,Ne=z.next())Ne=M(x,Ne.value,C),Ne!==null&&(b=s(Ne,b,ue),Ee===null?$=Ne:Ee.sibling=Ne,Ee=Ne);return xe&&Aa(x,ue),$}for(J=n(J);!Ne.done;ue++,Ne=z.next())Ne=D(J,x,ue,Ne.value,C),Ne!==null&&(e&&Ne.alternate!==null&&J.delete(Ne.key===null?ue:Ne.key),b=s(Ne,b,ue),Ee===null?$=Ne:Ee.sibling=Ne,Ee=Ne);return e&&J.forEach(function(ub){return t(x,ub)}),xe&&Aa(x,ue),$}function Ce(x,b,z,C){if(typeof z=="object"&&z!==null&&z.type===U&&z.key===null&&(z=z.props.children),typeof z=="object"&&z!==null){switch(z.$$typeof){case H:e:{for(var $=z.key;b!==null;){if(b.key===$){if($=z.type,$===U){if(b.tag===7){a(x,b.sibling),C=i(b,z.props.children),C.return=x,x=C;break e}}else if(b.elementType===$||typeof $=="object"&&$!==null&&$.$$typeof===Y&&Vn($)===b.type){a(x,b.sibling),C=i(b,z.props),bi(C,z),C.return=x,x=C;break e}a(x,b);break}else t(x,b);b=b.sibling}z.type===U?(C=Hn(z.props.children,x.mode,C,z.key),C.return=x,x=C):(C=ys(z.type,z.key,z.props,null,x.mode,C),bi(C,z),C.return=x,x=C)}return c(x);case R:e:{for($=z.key;b!==null;){if(b.key===$)if(b.tag===4&&b.stateNode.containerInfo===z.containerInfo&&b.stateNode.implementation===z.implementation){a(x,b.sibling),C=i(b,z.children||[]),C.return=x,x=C;break e}else{a(x,b);break}else t(x,b);b=b.sibling}C=Sr(z,x.mode,C),C.return=x,x=C}return c(x);case Y:return z=Vn(z),Ce(x,b,z,C)}if(ke(z))return Q(x,b,z,C);if(ne(z)){if($=ne(z),typeof $!="function")throw Error(u(150));return z=$.call(z),I(x,b,z,C)}if(typeof z.then=="function")return Ce(x,b,js(z),C);if(z.$$typeof===K)return Ce(x,b,Es(x,z),C);As(x,z)}return typeof z=="string"&&z!==""||typeof z=="number"||typeof z=="bigint"?(z=""+z,b!==null&&b.tag===6?(a(x,b.sibling),C=i(b,z),C.return=x,x=C):(a(x,b),C=xr(z,x.mode,C),C.return=x,x=C),c(x)):a(x,b)}return function(x,b,z,C){try{pi=0;var $=Ce(x,b,z,C);return zl=null,$}catch(J){if(J===Nl||J===zs)throw J;var Ee=Bt(29,J,null,x.mode);return Ee.lanes=C,Ee.return=x,Ee}}}var Qn=ld(!0),id=ld(!1),an=!1;function Or(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Rr(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function nn(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ln(e,t,a){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,(ze&2)!==0){var i=n.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),n.pending=t,t=bs(e),Gf(e,null,a),t}return ps(e,n,t,a),bs(e)}function yi(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var n=t.lanes;n&=e.pendingLanes,a|=n,t.lanes=a,bt(e,a)}}function Ur(e,t){var a=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,a===n)){var i=null,s=null;if(a=a.firstBaseUpdate,a!==null){do{var c={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};s===null?i=s=c:s=s.next=c,a=a.next}while(a!==null);s===null?i=s=t:s=s.next=t}else i=s=t;a={baseState:n.baseState,firstBaseUpdate:i,lastBaseUpdate:s,shared:n.shared,callbacks:n.callbacks},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}var kr=!1;function xi(){if(kr){var e=El;if(e!==null)throw e}}function Si(e,t,a,n){kr=!1;var i=e.updateQueue;an=!1;var s=i.firstBaseUpdate,c=i.lastBaseUpdate,m=i.shared.pending;if(m!==null){i.shared.pending=null;var p=m,T=p.next;p.next=null,c===null?s=T:c.next=T,c=p;var w=e.alternate;w!==null&&(w=w.updateQueue,m=w.lastBaseUpdate,m!==c&&(m===null?w.firstBaseUpdate=T:m.next=T,w.lastBaseUpdate=p))}if(s!==null){var M=i.baseState;c=0,w=T=p=null,m=s;do{var A=m.lane&-536870913,D=A!==m.lane;if(D?(ve&A)===A:(n&A)===A){A!==0&&A===Sl&&(kr=!0),w!==null&&(w=w.next={lane:0,tag:m.tag,payload:m.payload,callback:null,next:null});e:{var Q=e,I=m;A=t;var Ce=a;switch(I.tag){case 1:if(Q=I.payload,typeof Q=="function"){M=Q.call(Ce,M,A);break e}M=Q;break e;case 3:Q.flags=Q.flags&-65537|128;case 0:if(Q=I.payload,A=typeof Q=="function"?Q.call(Ce,M,A):Q,A==null)break e;M=g({},M,A);break e;case 2:an=!0}}A=m.callback,A!==null&&(e.flags|=64,D&&(e.flags|=8192),D=i.callbacks,D===null?i.callbacks=[A]:D.push(A))}else D={lane:A,tag:m.tag,payload:m.payload,callback:m.callback,next:null},w===null?(T=w=D,p=M):w=w.next=D,c|=A;if(m=m.next,m===null){if(m=i.shared.pending,m===null)break;D=m,m=D.next,D.next=null,i.lastBaseUpdate=D,i.shared.pending=null}}while(!0);w===null&&(p=M),i.baseState=p,i.firstBaseUpdate=T,i.lastBaseUpdate=w,s===null&&(i.shared.lanes=0),cn|=c,e.lanes=c,e.memoizedState=M}}function sd(e,t){if(typeof e!="function")throw Error(u(191,e));e.call(t)}function od(e,t){var a=e.callbacks;if(a!==null)for(e.callbacks=null,e=0;es?s:8;var c=j.T,m={};j.T=m,tu(e,!1,t,a);try{var p=i(),T=j.S;if(T!==null&&T(m,p),p!==null&&typeof p=="object"&&typeof p.then=="function"){var w=I0(p,n);zi(e,t,w,Gt(e))}else zi(e,t,n,Gt(e))}catch(M){zi(e,t,{then:function(){},status:"rejected",reason:M},Gt())}finally{B.p=s,c!==null&&m.types!==null&&(c.types=m.types),j.T=c}}function lp(){}function Pr(e,t,a,n){if(e.tag!==5)throw Error(u(476));var i=Ld(e).queue;Hd(e,i,t,F,a===null?lp:function(){return qd(e),a(n)})}function Ld(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:F,baseState:F,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ca,lastRenderedState:F},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ca,lastRenderedState:a},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function qd(e){var t=Ld(e);t.next===null&&(t=e.alternate.memoizedState),zi(e,t.next.queue,{},Gt())}function eu(){return ut(Yi)}function Yd(){return Qe().memoizedState}function Gd(){return Qe().memoizedState}function ip(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var a=Gt();e=nn(a);var n=ln(t,e,a);n!==null&&(_t(n,t,a),yi(n,t,a)),t={cache:wr()},e.payload=t;return}t=t.return}}function sp(e,t,a){var n=Gt();a={lane:n,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Bs(e)?Xd(t,a):(a=br(e,t,a,n),a!==null&&(_t(a,e,n),Qd(a,t,n)))}function Vd(e,t,a){var n=Gt();zi(e,t,a,n)}function zi(e,t,a,n){var i={lane:n,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(Bs(e))Xd(t,i);else{var s=e.alternate;if(e.lanes===0&&(s===null||s.lanes===0)&&(s=t.lastRenderedReducer,s!==null))try{var c=t.lastRenderedState,m=s(c,a);if(i.hasEagerState=!0,i.eagerState=m,kt(m,c))return ps(e,t,i,0),Me===null&&vs(),!1}catch{}if(a=br(e,t,i,n),a!==null)return _t(a,e,n),Qd(a,t,n),!0}return!1}function tu(e,t,a,n){if(n={lane:2,revertLane:Ou(),gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Bs(e)){if(t)throw Error(u(479))}else t=br(e,a,n,2),t!==null&&_t(t,e,2)}function Bs(e){var t=e.alternate;return e===re||t!==null&&t===re}function Xd(e,t){jl=_s=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function Qd(e,t,a){if((a&4194048)!==0){var n=t.lanes;n&=e.pendingLanes,a|=n,t.lanes=a,bt(e,a)}}var Ti={readContext:ut,use:Os,useCallback:Ye,useContext:Ye,useEffect:Ye,useImperativeHandle:Ye,useLayoutEffect:Ye,useInsertionEffect:Ye,useMemo:Ye,useReducer:Ye,useRef:Ye,useState:Ye,useDebugValue:Ye,useDeferredValue:Ye,useTransition:Ye,useSyncExternalStore:Ye,useId:Ye,useHostTransitionStatus:Ye,useFormState:Ye,useActionState:Ye,useOptimistic:Ye,useMemoCache:Ye,useCacheRefresh:Ye};Ti.useEffectEvent=Ye;var Zd={readContext:ut,use:Os,useCallback:function(e,t){return yt().memoizedState=[e,t===void 0?null:t],e},useContext:ut,useEffect:wd,useImperativeHandle:function(e,t,a){a=a!=null?a.concat([e]):null,Us(4194308,4,Od.bind(null,t,e),a)},useLayoutEffect:function(e,t){return Us(4194308,4,e,t)},useInsertionEffect:function(e,t){Us(4,2,e,t)},useMemo:function(e,t){var a=yt();t=t===void 0?null:t;var n=e();if(Zn){ma(!0);try{e()}finally{ma(!1)}}return a.memoizedState=[n,t],n},useReducer:function(e,t,a){var n=yt();if(a!==void 0){var i=a(t);if(Zn){ma(!0);try{a(t)}finally{ma(!1)}}}else i=t;return n.memoizedState=n.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},n.queue=e,e=e.dispatch=sp.bind(null,re,e),[n.memoizedState,e]},useRef:function(e){var t=yt();return e={current:e},t.memoizedState=e},useState:function(e){e=Jr(e);var t=e.queue,a=Vd.bind(null,re,t);return t.dispatch=a,[e.memoizedState,a]},useDebugValue:Wr,useDeferredValue:function(e,t){var a=yt();return Ir(a,e,t)},useTransition:function(){var e=Jr(!1);return e=Hd.bind(null,re,e.queue,!0,!1),yt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,a){var n=re,i=yt();if(xe){if(a===void 0)throw Error(u(407));a=a()}else{if(a=t(),Me===null)throw Error(u(349));(ve&127)!==0||md(n,t,a)}i.memoizedState=a;var s={value:a,getSnapshot:t};return i.queue=s,wd(gd.bind(null,n,s,e),[e]),n.flags|=2048,Dl(9,{destroy:void 0},hd.bind(null,n,s,a,t),null),a},useId:function(){var e=yt(),t=Me.identifierPrefix;if(xe){var a=ga,n=ha;a=(n&~(1<<32-vt(n)-1)).toString(32)+a,t="_"+t+"R_"+a,a=Cs++,0<\/script>",s=s.removeChild(s.firstChild);break;case"select":s=typeof n.is=="string"?c.createElement("select",{is:n.is}):c.createElement("select"),n.multiple?s.multiple=!0:n.size&&(s.size=n.size);break;default:s=typeof n.is=="string"?c.createElement(i,{is:n.is}):c.createElement(i)}}s[ot]=t,s[zt]=n;e:for(c=t.child;c!==null;){if(c.tag===5||c.tag===6)s.appendChild(c.stateNode);else if(c.tag!==4&&c.tag!==27&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===t)break e;for(;c.sibling===null;){if(c.return===null||c.return===t)break e;c=c.return}c.sibling.return=c.return,c=c.sibling}t.stateNode=s;e:switch(ft(s,i,n),i){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break e;case"img":n=!0;break e;default:n=!1}n&&Oa(t)}}return Re(t),gu(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,a),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==n&&Oa(t);else{if(typeof n!="string"&&t.stateNode===null)throw Error(u(166));if(e=le.current,yl(t)){if(e=t.stateNode,a=t.memoizedProps,n=null,i=rt,i!==null)switch(i.tag){case 27:case 5:n=i.memoizedProps}e[ot]=t,e=!!(e.nodeValue===a||n!==null&&n.suppressHydrationWarning===!0||fh(e.nodeValue,a)),e||en(t,!0)}else e=no(e).createTextNode(n),e[ot]=t,t.stateNode=e}return Re(t),null;case 31:if(a=t.memoizedState,e===null||e.memoizedState!==null){if(n=yl(t),a!==null){if(e===null){if(!n)throw Error(u(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(u(557));e[ot]=t}else Ln(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Re(t),e=!1}else a=Tr(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),e=!0;if(!e)return t.flags&256?(Lt(t),t):(Lt(t),null);if((t.flags&128)!==0)throw Error(u(558))}return Re(t),null;case 13:if(n=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=yl(t),n!==null&&n.dehydrated!==null){if(e===null){if(!i)throw Error(u(318));if(i=t.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(u(317));i[ot]=t}else Ln(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Re(t),i=!1}else i=Tr(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(Lt(t),t):(Lt(t),null)}return Lt(t),(t.flags&128)!==0?(t.lanes=a,t):(a=n!==null,e=e!==null&&e.memoizedState!==null,a&&(n=t.child,i=null,n.alternate!==null&&n.alternate.memoizedState!==null&&n.alternate.memoizedState.cachePool!==null&&(i=n.alternate.memoizedState.cachePool.pool),s=null,n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(s=n.memoizedState.cachePool.pool),s!==i&&(n.flags|=2048)),a!==e&&a&&(t.child.flags|=8192),Gs(t,t.updateQueue),Re(t),null);case 4:return ae(),e===null&&Bu(t.stateNode.containerInfo),Re(t),null;case 10:return wa(t.type),Re(t),null;case 19:if(ye(Xe),n=t.memoizedState,n===null)return Re(t),null;if(i=(t.flags&128)!==0,s=n.rendering,s===null)if(i)Ai(n,!1);else{if(Ge!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(s=ws(e),s!==null){for(t.flags|=128,Ai(n,!1),e=s.updateQueue,t.updateQueue=e,Gs(t,e),t.subtreeFlags=0,e=a,a=t.child;a!==null;)Vf(a,e),a=a.sibling;return ce(Xe,Xe.current&1|2),xe&&Aa(t,n.treeForkCount),t.child}e=e.sibling}n.tail!==null&&Ze()>Ks&&(t.flags|=128,i=!0,Ai(n,!1),t.lanes=4194304)}else{if(!i)if(e=ws(s),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,Gs(t,e),Ai(n,!0),n.tail===null&&n.tailMode==="hidden"&&!s.alternate&&!xe)return Re(t),null}else 2*Ze()-n.renderingStartTime>Ks&&a!==536870912&&(t.flags|=128,i=!0,Ai(n,!1),t.lanes=4194304);n.isBackwards?(s.sibling=t.child,t.child=s):(e=n.last,e!==null?e.sibling=s:t.child=s,n.last=s)}return n.tail!==null?(e=n.tail,n.rendering=e,n.tail=e.sibling,n.renderingStartTime=Ze(),e.sibling=null,a=Xe.current,ce(Xe,i?a&1|2:a&1),xe&&Aa(t,n.treeForkCount),e):(Re(t),null);case 22:case 23:return Lt(t),Hr(),n=t.memoizedState!==null,e!==null?e.memoizedState!==null!==n&&(t.flags|=8192):n&&(t.flags|=8192),n?(a&536870912)!==0&&(t.flags&128)===0&&(Re(t),t.subtreeFlags&6&&(t.flags|=8192)):Re(t),a=t.updateQueue,a!==null&&Gs(t,a.retryQueue),a=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),n=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(n=t.memoizedState.cachePool.pool),n!==a&&(t.flags|=2048),e!==null&&ye(Gn),null;case 24:return a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),wa($e),Re(t),null;case 25:return null;case 30:return null}throw Error(u(156,t.tag))}function fp(e,t){switch(Nr(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return wa($e),ae(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return St(t),null;case 31:if(t.memoizedState!==null){if(Lt(t),t.alternate===null)throw Error(u(340));Ln()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Lt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(u(340));Ln()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ye(Xe),null;case 4:return ae(),null;case 10:return wa(t.type),null;case 22:case 23:return Lt(t),Hr(),e!==null&&ye(Gn),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return wa($e),null;case 25:return null;default:return null}}function vm(e,t){switch(Nr(t),t.tag){case 3:wa($e),ae();break;case 26:case 27:case 5:St(t);break;case 4:ae();break;case 31:t.memoizedState!==null&&Lt(t);break;case 13:Lt(t);break;case 19:ye(Xe);break;case 10:wa(t.type);break;case 22:case 23:Lt(t),Hr(),e!==null&&ye(Gn);break;case 24:wa($e)}}function Di(e,t){try{var a=t.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var i=n.next;a=i;do{if((a.tag&e)===e){n=void 0;var s=a.create,c=a.inst;n=s(),c.destroy=n}a=a.next}while(a!==i)}}catch(m){je(t,t.return,m)}}function rn(e,t,a){try{var n=t.updateQueue,i=n!==null?n.lastEffect:null;if(i!==null){var s=i.next;n=s;do{if((n.tag&e)===e){var c=n.inst,m=c.destroy;if(m!==void 0){c.destroy=void 0,i=t;var p=a,T=m;try{T()}catch(w){je(i,p,w)}}}n=n.next}while(n!==s)}}catch(w){je(t,t.return,w)}}function pm(e){var t=e.updateQueue;if(t!==null){var a=e.stateNode;try{od(t,a)}catch(n){je(e,e.return,n)}}}function bm(e,t,a){a.props=Kn(e.type,e.memoizedProps),a.state=e.memoizedState;try{a.componentWillUnmount()}catch(n){je(e,t,n)}}function wi(e,t){try{var a=e.ref;if(a!==null){switch(e.tag){case 26:case 27:case 5:var n=e.stateNode;break;case 30:n=e.stateNode;break;default:n=e.stateNode}typeof a=="function"?e.refCleanup=a(n):a.current=n}}catch(i){je(e,t,i)}}function va(e,t){var a=e.ref,n=e.refCleanup;if(a!==null)if(typeof n=="function")try{n()}catch(i){je(e,t,i)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(i){je(e,t,i)}else a.current=null}function ym(e){var t=e.type,a=e.memoizedProps,n=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&n.focus();break e;case"img":a.src?n.src=a.src:a.srcSet&&(n.srcset=a.srcSet)}}catch(i){je(e,e.return,i)}}function vu(e,t,a){try{var n=e.stateNode;Op(n,e.type,a,t),n[zt]=t}catch(i){je(e,e.return,i)}}function xm(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&gn(e.type)||e.tag===4}function pu(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||xm(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&gn(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function bu(e,t,a){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(e,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(e),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=za));else if(n!==4&&(n===27&&gn(e.type)&&(a=e.stateNode,t=null),e=e.child,e!==null))for(bu(e,t,a),e=e.sibling;e!==null;)bu(e,t,a),e=e.sibling}function Vs(e,t,a){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(n!==4&&(n===27&&gn(e.type)&&(a=e.stateNode),e=e.child,e!==null))for(Vs(e,t,a),e=e.sibling;e!==null;)Vs(e,t,a),e=e.sibling}function Sm(e){var t=e.stateNode,a=e.memoizedProps;try{for(var n=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);ft(t,n,a),t[ot]=e,t[zt]=a}catch(s){je(e,e.return,s)}}var Ra=!1,Pe=!1,yu=!1,Em=typeof WeakSet=="function"?WeakSet:Set,nt=null;function dp(e,t){if(e=e.containerInfo,qu=co,e=Rf(e),dr(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var n=a.getSelection&&a.getSelection();if(n&&n.rangeCount!==0){a=n.anchorNode;var i=n.anchorOffset,s=n.focusNode;n=n.focusOffset;try{a.nodeType,s.nodeType}catch{a=null;break e}var c=0,m=-1,p=-1,T=0,w=0,M=e,A=null;t:for(;;){for(var D;M!==a||i!==0&&M.nodeType!==3||(m=c+i),M!==s||n!==0&&M.nodeType!==3||(p=c+n),M.nodeType===3&&(c+=M.nodeValue.length),(D=M.firstChild)!==null;)A=M,M=D;for(;;){if(M===e)break t;if(A===a&&++T===i&&(m=c),A===s&&++w===n&&(p=c),(D=M.nextSibling)!==null)break;M=A,A=M.parentNode}M=D}a=m===-1||p===-1?null:{start:m,end:p}}else a=null}a=a||{start:0,end:0}}else a=null;for(Yu={focusedElem:e,selectionRange:a},co=!1,nt=t;nt!==null;)if(t=nt,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,nt=e;else for(;nt!==null;){switch(t=nt,s=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(a=0;a title"))),ft(s,n,a),s[ot]=e,at(s),n=s;break e;case"link":var c=Dh("link","href",i).get(n+(a.href||""));if(c){for(var m=0;mCe&&(c=Ce,Ce=I,I=c);var x=Mf(m,I),b=Mf(m,Ce);if(x&&b&&(D.rangeCount!==1||D.anchorNode!==x.node||D.anchorOffset!==x.offset||D.focusNode!==b.node||D.focusOffset!==b.offset)){var z=M.createRange();z.setStart(x.node,x.offset),D.removeAllRanges(),I>Ce?(D.addRange(z),D.extend(b.node,b.offset)):(z.setEnd(b.node,b.offset),D.addRange(z))}}}}for(M=[],D=m;D=D.parentNode;)D.nodeType===1&&M.push({element:D,left:D.scrollLeft,top:D.scrollTop});for(typeof m.focus=="function"&&m.focus(),m=0;ma?32:a,j.T=null,a=ju,ju=null;var s=dn,c=La;if(et=0,Ol=dn=null,La=0,(ze&6)!==0)throw Error(u(331));var m=ze;if(ze|=4,Om(s.current),_m(s,s.current,c,a),ze=m,Ui(0,!1),pt&&typeof pt.onPostCommitFiberRoot=="function")try{pt.onPostCommitFiberRoot(Zt,s)}catch{}return!0}finally{B.p=i,j.T=n,Wm(e,t)}}function Pm(e,t,a){t=Wt(a,t),t=iu(e.stateNode,t,2),e=ln(e,t,2),e!==null&&(Je(e,2),pa(e))}function je(e,t,a){if(e.tag===3)Pm(e,e,a);else for(;t!==null;){if(t.tag===3){Pm(t,e,a);break}else if(t.tag===1){var n=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof n.componentDidCatch=="function"&&(fn===null||!fn.has(n))){e=Wt(a,e),a=em(2),n=ln(t,a,2),n!==null&&(tm(a,n,t,e),Je(n,2),pa(n));break}}t=t.return}}function _u(e,t,a){var n=e.pingCache;if(n===null){n=e.pingCache=new gp;var i=new Set;n.set(t,i)}else i=n.get(t),i===void 0&&(i=new Set,n.set(t,i));i.has(a)||(Eu=!0,i.add(a),e=xp.bind(null,e,t,a),t.then(e,e))}function xp(e,t,a){var n=e.pingCache;n!==null&&n.delete(t),e.pingedLanes|=e.suspendedLanes&a,e.warmLanes&=~a,Me===e&&(ve&a)===a&&(Ge===4||Ge===3&&(ve&62914560)===ve&&300>Ze()-Zs?(ze&2)===0&&Rl(e,0):Nu|=a,Ml===ve&&(Ml=0)),pa(e)}function eh(e,t){t===0&&(t=Ve()),e=Bn(e,t),e!==null&&(Je(e,t),pa(e))}function Sp(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),eh(e,a)}function Ep(e,t){var a=0;switch(e.tag){case 31:case 13:var n=e.stateNode,i=e.memoizedState;i!==null&&(a=i.retryLane);break;case 19:n=e.stateNode;break;case 22:n=e.stateNode._retryCache;break;default:throw Error(u(314))}n!==null&&n.delete(t),eh(e,a)}function Np(e,t){return ei(e,t)}var Ps=null,kl=null,Cu=!1,eo=!1,Mu=!1,hn=0;function pa(e){e!==kl&&e.next===null&&(kl===null?Ps=kl=e:kl=kl.next=e),eo=!0,Cu||(Cu=!0,Tp())}function Ui(e,t){if(!Mu&&eo){Mu=!0;do for(var a=!1,n=Ps;n!==null;){if(e!==0){var i=n.pendingLanes;if(i===0)var s=0;else{var c=n.suspendedLanes,m=n.pingedLanes;s=(1<<31-vt(42|e)+1)-1,s&=i&~(c&~m),s=s&201326741?s&201326741|1:s?s|2:0}s!==0&&(a=!0,lh(n,s))}else s=ve,s=_n(n,n===Me?s:0,n.cancelPendingCommit!==null||n.timeoutHandle!==-1),(s&3)===0||Fa(n,s)||(a=!0,lh(n,s));n=n.next}while(a);Mu=!1}}function zp(){th()}function th(){eo=Cu=!1;var e=0;hn!==0&&Up()&&(e=hn);for(var t=Ze(),a=null,n=Ps;n!==null;){var i=n.next,s=ah(n,t);s===0?(n.next=null,a===null?Ps=i:a.next=i,i===null&&(kl=a)):(a=n,(e!==0||(s&3)!==0)&&(eo=!0)),n=i}et!==0&&et!==5||Ui(e),hn!==0&&(hn=0)}function ah(e,t){for(var a=e.suspendedLanes,n=e.pingedLanes,i=e.expirationTimes,s=e.pendingLanes&-62914561;0m)break;var w=p.transferSize,M=p.initiatorType;w&&dh(M)&&(p=p.responseEnd,c+=w*(p"u"?null:document;function zh(e,t,a){var n=Bl;if(n&&typeof t=="string"&&t){var i=Ft(t);i='link[rel="'+e+'"][href="'+i+'"]',typeof a=="string"&&(i+='[crossorigin="'+a+'"]'),Nh.has(i)||(Nh.add(i),e={rel:e,crossOrigin:a,href:t},n.querySelector(i)===null&&(t=n.createElement("link"),ft(t,"link",e),at(t),n.head.appendChild(t)))}}function Xp(e){qa.D(e),zh("dns-prefetch",e,null)}function Qp(e,t){qa.C(e,t),zh("preconnect",e,t)}function Zp(e,t,a){qa.L(e,t,a);var n=Bl;if(n&&e&&t){var i='link[rel="preload"][as="'+Ft(t)+'"]';t==="image"&&a&&a.imageSrcSet?(i+='[imagesrcset="'+Ft(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(i+='[imagesizes="'+Ft(a.imageSizes)+'"]')):i+='[href="'+Ft(e)+'"]';var s=i;switch(t){case"style":s=Hl(e);break;case"script":s=Ll(e)}na.has(s)||(e=g({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:e,as:t},a),na.set(s,e),n.querySelector(i)!==null||t==="style"&&n.querySelector(Li(s))||t==="script"&&n.querySelector(qi(s))||(t=n.createElement("link"),ft(t,"link",e),at(t),n.head.appendChild(t)))}}function Kp(e,t){qa.m(e,t);var a=Bl;if(a&&e){var n=t&&typeof t.as=="string"?t.as:"script",i='link[rel="modulepreload"][as="'+Ft(n)+'"][href="'+Ft(e)+'"]',s=i;switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":s=Ll(e)}if(!na.has(s)&&(e=g({rel:"modulepreload",href:e},t),na.set(s,e),a.querySelector(i)===null)){switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(qi(s)))return}n=a.createElement("link"),ft(n,"link",e),at(n),a.head.appendChild(n)}}}function Jp(e,t,a){qa.S(e,t,a);var n=Bl;if(n&&e){var i=sl(n).hoistableStyles,s=Hl(e);t=t||"default";var c=i.get(s);if(!c){var m={loading:0,preload:null};if(c=n.querySelector(Li(s)))m.loading=5;else{e=g({rel:"stylesheet",href:e,"data-precedence":t},a),(a=na.get(s))&&Ju(e,a);var p=c=n.createElement("link");at(p),ft(p,"link",e),p._p=new Promise(function(T,w){p.onload=T,p.onerror=w}),p.addEventListener("load",function(){m.loading|=1}),p.addEventListener("error",function(){m.loading|=2}),m.loading|=4,io(c,t,n)}c={type:"stylesheet",instance:c,count:1,state:m},i.set(s,c)}}}function Fp(e,t){qa.X(e,t);var a=Bl;if(a&&e){var n=sl(a).hoistableScripts,i=Ll(e),s=n.get(i);s||(s=a.querySelector(qi(i)),s||(e=g({src:e,async:!0},t),(t=na.get(i))&&Fu(e,t),s=a.createElement("script"),at(s),ft(s,"link",e),a.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},n.set(i,s))}}function $p(e,t){qa.M(e,t);var a=Bl;if(a&&e){var n=sl(a).hoistableScripts,i=Ll(e),s=n.get(i);s||(s=a.querySelector(qi(i)),s||(e=g({src:e,async:!0,type:"module"},t),(t=na.get(i))&&Fu(e,t),s=a.createElement("script"),at(s),ft(s,"link",e),a.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},n.set(i,s))}}function Th(e,t,a,n){var i=(i=le.current)?lo(i):null;if(!i)throw Error(u(446));switch(e){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Hl(a.href),a=sl(i).hoistableStyles,n=a.get(t),n||(n={type:"style",instance:null,count:0,state:null},a.set(t,n)),n):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){e=Hl(a.href);var s=sl(i).hoistableStyles,c=s.get(e);if(c||(i=i.ownerDocument||i,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},s.set(e,c),(s=i.querySelector(Li(e)))&&!s._p&&(c.instance=s,c.state.loading=5),na.has(e)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},na.set(e,a),s||Wp(i,e,a,c.state))),t&&n===null)throw Error(u(528,""));return c}if(t&&n!==null)throw Error(u(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ll(a),a=sl(i).hoistableScripts,n=a.get(t),n||(n={type:"script",instance:null,count:0,state:null},a.set(t,n)),n):{type:"void",instance:null,count:0,state:null};default:throw Error(u(444,e))}}function Hl(e){return'href="'+Ft(e)+'"'}function Li(e){return'link[rel="stylesheet"]['+e+"]"}function jh(e){return g({},e,{"data-precedence":e.precedence,precedence:null})}function Wp(e,t,a,n){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?n.loading=1:(t=e.createElement("link"),n.preload=t,t.addEventListener("load",function(){return n.loading|=1}),t.addEventListener("error",function(){return n.loading|=2}),ft(t,"link",a),at(t),e.head.appendChild(t))}function Ll(e){return'[src="'+Ft(e)+'"]'}function qi(e){return"script[async]"+e}function Ah(e,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var n=e.querySelector('style[data-href~="'+Ft(a.href)+'"]');if(n)return t.instance=n,at(n),n;var i=g({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return n=(e.ownerDocument||e).createElement("style"),at(n),ft(n,"style",i),io(n,a.precedence,e),t.instance=n;case"stylesheet":i=Hl(a.href);var s=e.querySelector(Li(i));if(s)return t.state.loading|=4,t.instance=s,at(s),s;n=jh(a),(i=na.get(i))&&Ju(n,i),s=(e.ownerDocument||e).createElement("link"),at(s);var c=s;return c._p=new Promise(function(m,p){c.onload=m,c.onerror=p}),ft(s,"link",n),t.state.loading|=4,io(s,a.precedence,e),t.instance=s;case"script":return s=Ll(a.src),(i=e.querySelector(qi(s)))?(t.instance=i,at(i),i):(n=a,(i=na.get(s))&&(n=g({},a),Fu(n,i)),e=e.ownerDocument||e,i=e.createElement("script"),at(i),ft(i,"link",n),e.head.appendChild(i),t.instance=i);case"void":return null;default:throw Error(u(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(n=t.instance,t.state.loading|=4,io(n,a.precedence,e));return t.instance}function io(e,t,a){for(var n=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),i=n.length?n[n.length-1]:null,s=i,c=0;c title"):null)}function Ip(e,t,a){if(a===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function _h(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function Pp(e,t,a,n){if(a.type==="stylesheet"&&(typeof n.media!="string"||matchMedia(n.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var i=Hl(n.href),s=t.querySelector(Li(i));if(s){t=s._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=oo.bind(e),t.then(e,e)),a.state.loading|=4,a.instance=s,at(s);return}s=t.ownerDocument||t,n=jh(n),(i=na.get(i))&&Ju(n,i),s=s.createElement("link"),at(s);var c=s;c._p=new Promise(function(m,p){c.onload=m,c.onerror=p}),ft(s,"link",n),a.instance=s}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(e.count++,a=oo.bind(e),t.addEventListener("load",a),t.addEventListener("error",a))}}var $u=0;function eb(e,t){return e.stylesheets&&e.count===0&&uo(e,e.stylesheets),0$u?50:800)+t);return e.unsuspend=a,function(){e.unsuspend=null,clearTimeout(n),clearTimeout(i)}}:null}function oo(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)uo(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var ro=null;function uo(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ro=new Map,t.forEach(tb,e),ro=null,oo.call(e))}function tb(e,t){if(!(t.state.loading&4)){var a=ro.get(e);if(a)var n=a.get(null);else{a=new Map,ro.set(e,a);for(var i=e.querySelectorAll("link[data-precedence],style[data-precedence]"),s=0;s"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(l)}catch(o){console.error(o)}}return l(),ic.exports=Bb(),ic.exports}var Lb=Hb();const qb=l=>l.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Yb=l=>l.replace(/^([A-Z])|[\s-_]+(\w)/g,(o,r,u)=>u?u.toUpperCase():r.toLowerCase()),Jh=l=>{const o=Yb(l);return o.charAt(0).toUpperCase()+o.slice(1)},Rg=(...l)=>l.filter((o,r,u)=>!!o&&o.trim()!==""&&u.indexOf(o)===r).join(" ").trim(),Gb=l=>{for(const o in l)if(o.startsWith("aria-")||o==="role"||o==="title")return!0};var Vb={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Xb=E.forwardRef(({color:l="currentColor",size:o=24,strokeWidth:r=2,absoluteStrokeWidth:u,className:d="",children:h,iconNode:v,...y},N)=>E.createElement("svg",{ref:N,...Vb,width:o,height:o,stroke:l,strokeWidth:u?Number(r)*24/Number(o):r,className:Rg("lucide",d),...!h&&!Gb(y)&&{"aria-hidden":"true"},...y},[...v.map(([S,O])=>E.createElement(S,O)),...Array.isArray(h)?h:[h]]));const Ue=(l,o)=>{const r=E.forwardRef(({className:u,...d},h)=>E.createElement(Xb,{ref:h,iconNode:o,className:Rg(`lucide-${qb(Jh(l))}`,`lucide-${l}`,u),...d}));return r.displayName=Jh(l),r};const Qb=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],Ug=Ue("activity",Qb);const Zb=[["path",{d:"m3 16 4 4 4-4",key:"1co6wj"}],["path",{d:"M7 20V4",key:"1yoxec"}],["path",{d:"m21 8-4-4-4 4",key:"1c9v7m"}],["path",{d:"M17 4v16",key:"7dpous"}]],Kb=Ue("arrow-down-up",Zb);const Jb=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],Fb=Ue("arrow-down",Jb);const $b=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],Wb=Ue("arrow-up",$b);const Ib=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]],Pb=Ue("chart-line",Ib);const ey=[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]],ty=Ue("chevrons-up-down",ey);const ay=[["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"}]],ny=Ue("circle-x",ay);const ly=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 12a9 3 0 0 0 5 2.69",key:"1ui2ym"}],["path",{d:"M21 9.3V5",key:"6k6cib"}],["path",{d:"M3 5v14a9 3 0 0 0 6.47 2.88",key:"i62tjy"}],["path",{d:"M12 12v4h4",key:"1bxaet"}],["path",{d:"M13 20a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L12 16",key:"1f4ei9"}]],Oc=Ue("database-backup",ly);const iy=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],sy=Ue("eye",iy);const oy=[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4",key:"1pf5j1"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"m5 12-3 3 3 3",key:"oke12k"}],["path",{d:"m9 18 3-3-3-3",key:"112psh"}]],kg=Ue("file-code-2",oy);const ry=[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]],uy=Ue("gauge",ry);const cy=[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]],fy=Ue("github",cy);const dy=[["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"}]],Rc=Ue("inbox",dy);const my=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],hy=Ue("layers",my);const gy=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],vy=Ue("layout-dashboard",gy);const py=[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]],by=Ue("moon",py);const yy=[["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"}]],Bo=Ue("refresh-cw",yy);const xy=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],Bg=Ue("rotate-ccw",xy);const Sy=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],Uc=Ue("search",Sy);const Ey=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],Ny=Ue("sun",Ey);const zy=[["path",{d:"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18",key:"gugj83"}]],Hg=Ue("table-2",zy);const Ty=[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]],jy=Ue("trash-2",Ty);const Ay=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Lg=Ue("triangle-alert",Ay);const Dy=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],wy=Ue("x",Dy);const _y=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],Cy=Ue("zap",_y);var My=Object.defineProperty,kc=(l,o)=>My(l,"name",{value:o,configurable:!0});function pc(l,o){if(typeof l=="function")return l(o);l!=null&&(l.current=o)}kc(pc,"setRef");function qg(...l){return o=>{let r=!1;const u=l.map(d=>{const h=pc(d,o);return!r&&typeof h=="function"&&(r=!0),h});if(r)return()=>{for(let d=0;dOy(l,"name",{value:o,configurable:!0});function Ho(l){const o=E.forwardRef((r,u)=>{let{children:d,...h}=r,v=null,y=!1;const N=[];bc(d)&&typeof bo=="function"&&(d=bo(d._payload)),E.Children.forEach(d,_=>{if(Xg(_)){y=!0;const H=_;let R="child"in H.props?H.props.child:H.props.children;bc(R)&&typeof bo=="function"&&(R=bo(R._payload)),v=Uy(H,R),N.push(v?.props?.children)}else N.push(_)}),v?v=E.cloneElement(v,void 0,N):!y&&E.Children.count(d)===1&&E.isValidElement(d)&&(v=d);const S=v?Vg(v):void 0,O=Wn(u,S);if(!v){if(d||d===0)throw new Error(y?Hy(l):By(l));return d}const g=Gg(h,v.props??{});return v.type!==E.Fragment&&(g.ref=u?O:S),E.cloneElement(v,g)});return o.displayName=`${l}.Slot`,o}fa(Ho,"createSlot");var Bc=Ho("Slot"),Yg=Symbol.for("radix.slottable");function Ry(l){const o=fa(r=>"child"in r?r.children(r.child):r.children,"Slottable");return o.displayName=`${l}.Slottable`,o.__radixId=Yg,o}fa(Ry,"createSlottable");var Uy=fa((l,o)=>{if("child"in l.props){const r=l.props.child;return E.isValidElement(r)?E.cloneElement(r,void 0,l.props.children(r.props.children)):null}return E.isValidElement(o)?o:null},"getSlottableElementFromSlottable");function Gg(l,o){const r={...o};for(const u in o){const d=l[u],h=o[u];/^on[A-Z]/.test(u)?d&&h?r[u]=(...y)=>{const N=h(...y);return d(...y),N}:d&&(r[u]=d):u==="style"?r[u]={...d,...h}:u==="className"&&(r[u]=[d,h].filter(Boolean).join(" "))}return{...l,...r}}fa(Gg,"mergeProps");function Vg(l){let o=Object.getOwnPropertyDescriptor(l.props,"ref")?.get,r=o&&"isReactWarning"in o&&o.isReactWarning;return r?l.ref:(o=Object.getOwnPropertyDescriptor(l,"ref")?.get,r=o&&"isReactWarning"in o&&o.isReactWarning,r?l.props.ref:l.props.ref||l.ref)}fa(Vg,"getElementRef");function Xg(l){return E.isValidElement(l)&&typeof l.type=="function"&&"__radixId"in l.type&&l.type.__radixId===Yg}fa(Xg,"isSlottable");var ky=Symbol.for("react.lazy");function bc(l){return l!=null&&typeof l=="object"&&"$$typeof"in l&&l.$$typeof===ky&&"_payload"in l&&Qg(l._payload)}fa(bc,"isLazyComponent");function Qg(l){return typeof l=="object"&&l!==null&&"then"in l}fa(Qg,"isPromiseLike");var By=fa(l=>`${l} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,"createSlotError"),Hy=fa(l=>`${l} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,"createSlottableError"),bo=Fi[" use ".trim().toString()];const Fh=l=>typeof l=="boolean"?`${l}`:l===0?"0":l,$h=Tg,Zg=(l,o)=>r=>{var u;if(o?.variants==null)return $h(l,r?.class,r?.className);const{variants:d,defaultVariants:h}=o,v=Object.keys(d).map(S=>{const O=r?.[S],g=h?.[S];if(O===null)return null;const _=Fh(O)||Fh(g);return d[S][_]}),y=r&&Object.entries(r).reduce((S,O)=>{let[g,_]=O;return _===void 0||(S[g]=_),S},{}),N=o==null||(u=o.compoundVariants)===null||u===void 0?void 0:u.reduce((S,O)=>{let{class:g,className:_,...H}=O;return Object.entries(H).every(R=>{let[U,k]=R;return Array.isArray(k)?k.includes({...h,...y}[U]):{...h,...y}[U]===k})?[...S,g,_]:S},[]);return $h(l,v,N,r?.class,r?.className)},Ly=(l,o)=>{const r=new Array(l.length+o.length);for(let u=0;u({classGroupId:l,validator:o}),Kg=(l=new Map,o=null,r)=>({nextPart:l,validators:o,classGroupId:r}),Ro="-",Wh=[],Yy="arbitrary..",Gy=l=>{const o=Xy(l),{conflictingClassGroups:r,conflictingClassGroupModifiers:u}=l;return{getClassGroupId:v=>{if(v.startsWith("[")&&v.endsWith("]"))return Vy(v);const y=v.split(Ro),N=y[0]===""&&y.length>1?1:0;return Jg(y,N,o)},getConflictingClassGroupIds:(v,y)=>{if(y){const N=u[v],S=r[v];return N?S?Ly(S,N):N:S||Wh}return r[v]||Wh}}},Jg=(l,o,r)=>{if(l.length-o===0)return r.classGroupId;const d=l[o],h=r.nextPart.get(d);if(h){const S=Jg(l,o+1,h);if(S)return S}const v=r.validators;if(v===null)return;const y=o===0?l.join(Ro):l.slice(o).join(Ro),N=v.length;for(let S=0;Sl.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const o=l.slice(1,-1),r=o.indexOf(":"),u=o.slice(0,r);return u?Yy+u:void 0})(),Xy=l=>{const{theme:o,classGroups:r}=l;return Qy(r,o)},Qy=(l,o)=>{const r=Kg();for(const u in l){const d=l[u];Hc(d,r,u,o)}return r},Hc=(l,o,r,u)=>{const d=l.length;for(let h=0;h{if(typeof l=="string"){Ky(l,o,r);return}if(typeof l=="function"){Jy(l,o,r,u);return}Fy(l,o,r,u)},Ky=(l,o,r)=>{const u=l===""?o:Fg(o,l);u.classGroupId=r},Jy=(l,o,r,u)=>{if($y(l)){Hc(l(u),o,r,u);return}o.validators===null&&(o.validators=[]),o.validators.push(qy(r,l))},Fy=(l,o,r,u)=>{const d=Object.entries(l),h=d.length;for(let v=0;v{let r=l;const u=o.split(Ro),d=u.length;for(let h=0;h"isThemeGetter"in l&&l.isThemeGetter===!0,Wy=l=>{if(l<1)return{get:()=>{},set:()=>{}};let o=0,r=Object.create(null),u=Object.create(null);const d=(h,v)=>{r[h]=v,o++,o>l&&(o=0,u=r,r=Object.create(null))};return{get(h){let v=r[h];if(v!==void 0)return v;if((v=u[h])!==void 0)return d(h,v),v},set(h,v){h in r?r[h]=v:d(h,v)}}},yc="!",Ih=":",Iy=[],Ph=(l,o,r,u,d)=>({modifiers:l,hasImportantModifier:o,baseClassName:r,maybePostfixModifierPosition:u,isExternal:d}),Py=l=>{const{prefix:o,experimentalParseClassName:r}=l;let u=d=>{const h=[];let v=0,y=0,N=0,S;const O=d.length;for(let U=0;UN?S-N:void 0;return Ph(h,H,_,R)};if(o){const d=o+Ih,h=u;u=v=>v.startsWith(d)?h(v.slice(d.length)):Ph(Iy,!1,v,void 0,!0)}if(r){const d=u;u=h=>r({className:h,parseClassName:d})}return u},e1=l=>{const o=new Map;return l.orderSensitiveModifiers.forEach((r,u)=>{o.set(r,1e6+u)}),r=>{const u=[];let d=[];for(let h=0;h0&&(d.sort(),u.push(...d),d=[]),u.push(v)):d.push(v)}return d.length>0&&(d.sort(),u.push(...d)),u}},t1=l=>({cache:Wy(l.cacheSize),parseClassName:Py(l),sortModifiers:e1(l),postfixLookupClassGroupIds:a1(l),...Gy(l)}),a1=l=>{const o=Object.create(null),r=l.postfixLookupClassGroups;if(r)for(let u=0;u{const{parseClassName:r,getClassGroupId:u,getConflictingClassGroupIds:d,sortModifiers:h,postfixLookupClassGroupIds:v}=o,y=[],N=l.trim().split(n1);let S="";for(let O=N.length-1;O>=0;O-=1){const g=N[O],{isExternal:_,modifiers:H,hasImportantModifier:R,baseClassName:U,maybePostfixModifierPosition:k}=r(g);if(_){S=g+(S.length>0?" "+S:S);continue}let G=!!k,Z;if(G){const fe=U.substring(0,k);Z=u(fe);const Y=Z&&v[Z]?u(U):void 0;Y&&Y!==Z&&(Z=Y,G=!1)}else Z=u(U);if(!Z){if(!G){S=g+(S.length>0?" "+S:S);continue}if(Z=u(U),!Z){S=g+(S.length>0?" "+S:S);continue}G=!1}const K=H.length===0?"":H.length===1?H[0]:h(H).join(":"),P=R?K+yc:K,ee=P+Z;if(y.indexOf(ee)>-1)continue;y.push(ee);const oe=d(Z,G);for(let fe=0;fe0?" "+S:S)}return S},i1=(...l)=>{let o=0,r,u,d="";for(;o{if(typeof l=="string")return l;let o,r="";for(let u=0;u{let r,u,d,h;const v=N=>{const S=o.reduce((O,g)=>g(O),l());return r=t1(S),u=r.cache.get,d=r.cache.set,h=y,y(N)},y=N=>{const S=u(N);if(S)return S;const O=l1(N,r);return d(N,O),O};return h=v,(...N)=>h(i1(...N))},o1=[],tt=l=>{const o=r=>r[l]||o1;return o.isThemeGetter=!0,o},Wg=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Ig=/^\((?:(\w[\w-]*):)?(.+)\)$/i,r1=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,u1=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,c1=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,f1=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,d1=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,m1=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Sn=l=>r1.test(l),de=l=>!!l&&!Number.isNaN(Number(l)),ba=l=>!!l&&Number.isInteger(Number(l)),rc=l=>l.endsWith("%")&&de(l.slice(0,-1)),Ya=l=>u1.test(l),Pg=()=>!0,h1=l=>c1.test(l)&&!f1.test(l),Lc=()=>!1,g1=l=>d1.test(l),v1=l=>m1.test(l),p1=l=>!V(l)&&!X(l),b1=l=>l.startsWith("@container")&&(l[10]==="/"&&l[11]!==void 0||l[11]==="s"&&l[16]!==void 0&&l.startsWith("-size/",10)||l[11]==="n"&&l[18]!==void 0&&l.startsWith("-normal/",10)),y1=l=>Tn(l,av,Lc),V=l=>Wg.test(l),$n=l=>Tn(l,nv,h1),eg=l=>Tn(l,A1,de),x1=l=>Tn(l,iv,Pg),S1=l=>Tn(l,lv,Lc),tg=l=>Tn(l,ev,Lc),E1=l=>Tn(l,tv,v1),yo=l=>Tn(l,sv,g1),X=l=>Ig.test(l),Zi=l=>In(l,nv),N1=l=>In(l,lv),ag=l=>In(l,ev),z1=l=>In(l,av),T1=l=>In(l,tv),xo=l=>In(l,sv,!0),j1=l=>In(l,iv,!0),Tn=(l,o,r)=>{const u=Wg.exec(l);return u?u[1]?o(u[1]):r(u[2]):!1},In=(l,o,r=!1)=>{const u=Ig.exec(l);return u?u[1]?o(u[1]):r:!1},ev=l=>l==="position"||l==="percentage",tv=l=>l==="image"||l==="url",av=l=>l==="length"||l==="size"||l==="bg-size",nv=l=>l==="length",A1=l=>l==="number",lv=l=>l==="family-name",iv=l=>l==="number"||l==="weight",sv=l=>l==="shadow",D1=()=>{const l=tt("color"),o=tt("font"),r=tt("text"),u=tt("font-weight"),d=tt("tracking"),h=tt("leading"),v=tt("breakpoint"),y=tt("container"),N=tt("spacing"),S=tt("radius"),O=tt("shadow"),g=tt("inset-shadow"),_=tt("text-shadow"),H=tt("drop-shadow"),R=tt("blur"),U=tt("perspective"),k=tt("aspect"),G=tt("ease"),Z=tt("animate"),K=()=>["auto","avoid","all","avoid-page","page","left","right","column"],P=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],ee=()=>[...P(),X,V],oe=()=>["auto","hidden","clip","visible","scroll"],fe=()=>["auto","contain","none"],Y=()=>[X,V,N],be=()=>[Sn,"full","auto",...Y()],mt=()=>[ba,"none","subgrid",X,V],He=()=>["auto",{span:["full",ba,X,V]},ba,X,V],ne=()=>[ba,"auto",X,V],it=()=>["auto","min","max","fr",X,V],Le=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],ke=()=>["start","end","center","stretch","center-safe","end-safe"],j=()=>["auto",...Y()],B=()=>[Sn,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...Y()],F=()=>[Sn,"screen","full","dvw","lvw","svw","min","max","fit",...Y()],se=()=>[Sn,"screen","full","lh","dvh","lvh","svh","min","max","fit",...Y()],L=()=>[l,X,V],De=()=>[...P(),ag,tg,{position:[X,V]}],ye=()=>["no-repeat",{repeat:["","x","y","space","round"]}],ce=()=>["auto","cover","contain",z1,y1,{size:[X,V]}],W=()=>[rc,Zi,$n],te=()=>["","none","full",S,X,V],le=()=>["",de,Zi,$n],qe=()=>["solid","dashed","dotted","double"],ht=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],ae=()=>[de,rc,ag,tg],Xt=()=>["","none",R,X,V],St=()=>["none",de,X,V],Et=()=>["none",de,X,V],Qt=()=>[de,X,V],gt=()=>[Sn,"full",...Y()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Ya],breakpoint:[Ya],color:[Pg],container:[Ya],"drop-shadow":[Ya],ease:["in","out","in-out"],font:[p1],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Ya],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Ya],shadow:[Ya],spacing:["px",de],text:[Ya],"text-shadow":[Ya],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Sn,V,X,k]}],container:["container"],"container-type":[{"@container":["","normal","size",X,V]}],"container-named":[b1],columns:[{columns:[de,V,X,y]}],"break-after":[{"break-after":K()}],"break-before":[{"break-before":K()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:ee()}],overflow:[{overflow:oe()}],"overflow-x":[{"overflow-x":oe()}],"overflow-y":[{"overflow-y":oe()}],overscroll:[{overscroll:fe()}],"overscroll-x":[{"overscroll-x":fe()}],"overscroll-y":[{"overscroll-y":fe()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:be()}],"inset-x":[{"inset-x":be()}],"inset-y":[{"inset-y":be()}],start:[{"inset-s":be(),start:be()}],end:[{"inset-e":be(),end:be()}],"inset-bs":[{"inset-bs":be()}],"inset-be":[{"inset-be":be()}],top:[{top:be()}],right:[{right:be()}],bottom:[{bottom:be()}],left:[{left:be()}],visibility:["visible","invisible","collapse"],z:[{z:[ba,"auto",X,V]}],basis:[{basis:[Sn,"full","auto",y,...Y()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[de,Sn,"auto","initial","none",V]}],grow:[{grow:["",de,X,V]}],shrink:[{shrink:["",de,X,V]}],order:[{order:[ba,"first","last","none",X,V]}],"grid-cols":[{"grid-cols":mt()}],"col-start-end":[{col:He()}],"col-start":[{"col-start":ne()}],"col-end":[{"col-end":ne()}],"grid-rows":[{"grid-rows":mt()}],"row-start-end":[{row:He()}],"row-start":[{"row-start":ne()}],"row-end":[{"row-end":ne()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":it()}],"auto-rows":[{"auto-rows":it()}],gap:[{gap:Y()}],"gap-x":[{"gap-x":Y()}],"gap-y":[{"gap-y":Y()}],"justify-content":[{justify:[...Le(),"normal"]}],"justify-items":[{"justify-items":[...ke(),"normal"]}],"justify-self":[{"justify-self":["auto",...ke()]}],"align-content":[{content:["normal",...Le()]}],"align-items":[{items:[...ke(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...ke(),{baseline:["","last"]}]}],"place-content":[{"place-content":Le()}],"place-items":[{"place-items":[...ke(),"baseline"]}],"place-self":[{"place-self":["auto",...ke()]}],p:[{p:Y()}],px:[{px:Y()}],py:[{py:Y()}],ps:[{ps:Y()}],pe:[{pe:Y()}],pbs:[{pbs:Y()}],pbe:[{pbe:Y()}],pt:[{pt:Y()}],pr:[{pr:Y()}],pb:[{pb:Y()}],pl:[{pl:Y()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mbs:[{mbs:j()}],mbe:[{mbe:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":Y()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":Y()}],"space-y-reverse":["space-y-reverse"],size:[{size:B()}],"inline-size":[{inline:["auto",...F()]}],"min-inline-size":[{"min-inline":["auto",...F()]}],"max-inline-size":[{"max-inline":["none",...F()]}],"block-size":[{block:["auto",...se()]}],"min-block-size":[{"min-block":["auto",...se()]}],"max-block-size":[{"max-block":["none",...se()]}],w:[{w:[y,"screen",...B()]}],"min-w":[{"min-w":[y,"screen","none",...B()]}],"max-w":[{"max-w":[y,"screen","none","prose",{screen:[v]},...B()]}],h:[{h:["screen","lh",...B()]}],"min-h":[{"min-h":["screen","lh","none",...B()]}],"max-h":[{"max-h":["screen","lh",...B()]}],"font-size":[{text:["base",r,Zi,$n]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[u,j1,x1]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",rc,V]}],"font-family":[{font:[N1,S1,o]}],"font-features":[{"font-features":[V]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[d,X,V]}],"line-clamp":[{"line-clamp":[de,"none",X,eg]}],leading:[{leading:[h,...Y()]}],"list-image":[{"list-image":["none",X,V]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",X,V]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:L()}],"text-color":[{text:L()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...qe(),"wavy"]}],"text-decoration-thickness":[{decoration:[de,"from-font","auto",X,$n]}],"text-decoration-color":[{decoration:L()}],"underline-offset":[{"underline-offset":[de,"auto",X,V]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:Y()}],"tab-size":[{tab:[ba,X,V]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",X,V]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",X,V]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:De()}],"bg-repeat":[{bg:ye()}],"bg-size":[{bg:ce()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},ba,X,V],radial:["",X,V],conic:[ba,X,V]},T1,E1]}],"bg-color":[{bg:L()}],"gradient-from-pos":[{from:W()}],"gradient-via-pos":[{via:W()}],"gradient-to-pos":[{to:W()}],"gradient-from":[{from:L()}],"gradient-via":[{via:L()}],"gradient-to":[{to:L()}],rounded:[{rounded:te()}],"rounded-s":[{"rounded-s":te()}],"rounded-e":[{"rounded-e":te()}],"rounded-t":[{"rounded-t":te()}],"rounded-r":[{"rounded-r":te()}],"rounded-b":[{"rounded-b":te()}],"rounded-l":[{"rounded-l":te()}],"rounded-ss":[{"rounded-ss":te()}],"rounded-se":[{"rounded-se":te()}],"rounded-ee":[{"rounded-ee":te()}],"rounded-es":[{"rounded-es":te()}],"rounded-tl":[{"rounded-tl":te()}],"rounded-tr":[{"rounded-tr":te()}],"rounded-br":[{"rounded-br":te()}],"rounded-bl":[{"rounded-bl":te()}],"border-w":[{border:le()}],"border-w-x":[{"border-x":le()}],"border-w-y":[{"border-y":le()}],"border-w-s":[{"border-s":le()}],"border-w-e":[{"border-e":le()}],"border-w-bs":[{"border-bs":le()}],"border-w-be":[{"border-be":le()}],"border-w-t":[{"border-t":le()}],"border-w-r":[{"border-r":le()}],"border-w-b":[{"border-b":le()}],"border-w-l":[{"border-l":le()}],"divide-x":[{"divide-x":le()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":le()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...qe(),"hidden","none"]}],"divide-style":[{divide:[...qe(),"hidden","none"]}],"border-color":[{border:L()}],"border-color-x":[{"border-x":L()}],"border-color-y":[{"border-y":L()}],"border-color-s":[{"border-s":L()}],"border-color-e":[{"border-e":L()}],"border-color-bs":[{"border-bs":L()}],"border-color-be":[{"border-be":L()}],"border-color-t":[{"border-t":L()}],"border-color-r":[{"border-r":L()}],"border-color-b":[{"border-b":L()}],"border-color-l":[{"border-l":L()}],"divide-color":[{divide:L()}],"outline-style":[{outline:[...qe(),"none","hidden"]}],"outline-offset":[{"outline-offset":[de,X,V]}],"outline-w":[{outline:["",de,Zi,$n]}],"outline-color":[{outline:L()}],shadow:[{shadow:["","none",O,xo,yo]}],"shadow-color":[{shadow:L()}],"inset-shadow":[{"inset-shadow":["none",g,xo,yo]}],"inset-shadow-color":[{"inset-shadow":L()}],"ring-w":[{ring:le()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:L()}],"ring-offset-w":[{"ring-offset":[de,$n]}],"ring-offset-color":[{"ring-offset":L()}],"inset-ring-w":[{"inset-ring":le()}],"inset-ring-color":[{"inset-ring":L()}],"text-shadow":[{"text-shadow":["none",_,xo,yo]}],"text-shadow-color":[{"text-shadow":L()}],opacity:[{opacity:[de,X,V]}],"mix-blend":[{"mix-blend":[...ht(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ht()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[de]}],"mask-image-linear-from-pos":[{"mask-linear-from":ae()}],"mask-image-linear-to-pos":[{"mask-linear-to":ae()}],"mask-image-linear-from-color":[{"mask-linear-from":L()}],"mask-image-linear-to-color":[{"mask-linear-to":L()}],"mask-image-t-from-pos":[{"mask-t-from":ae()}],"mask-image-t-to-pos":[{"mask-t-to":ae()}],"mask-image-t-from-color":[{"mask-t-from":L()}],"mask-image-t-to-color":[{"mask-t-to":L()}],"mask-image-r-from-pos":[{"mask-r-from":ae()}],"mask-image-r-to-pos":[{"mask-r-to":ae()}],"mask-image-r-from-color":[{"mask-r-from":L()}],"mask-image-r-to-color":[{"mask-r-to":L()}],"mask-image-b-from-pos":[{"mask-b-from":ae()}],"mask-image-b-to-pos":[{"mask-b-to":ae()}],"mask-image-b-from-color":[{"mask-b-from":L()}],"mask-image-b-to-color":[{"mask-b-to":L()}],"mask-image-l-from-pos":[{"mask-l-from":ae()}],"mask-image-l-to-pos":[{"mask-l-to":ae()}],"mask-image-l-from-color":[{"mask-l-from":L()}],"mask-image-l-to-color":[{"mask-l-to":L()}],"mask-image-x-from-pos":[{"mask-x-from":ae()}],"mask-image-x-to-pos":[{"mask-x-to":ae()}],"mask-image-x-from-color":[{"mask-x-from":L()}],"mask-image-x-to-color":[{"mask-x-to":L()}],"mask-image-y-from-pos":[{"mask-y-from":ae()}],"mask-image-y-to-pos":[{"mask-y-to":ae()}],"mask-image-y-from-color":[{"mask-y-from":L()}],"mask-image-y-to-color":[{"mask-y-to":L()}],"mask-image-radial":[{"mask-radial":[X,V]}],"mask-image-radial-from-pos":[{"mask-radial-from":ae()}],"mask-image-radial-to-pos":[{"mask-radial-to":ae()}],"mask-image-radial-from-color":[{"mask-radial-from":L()}],"mask-image-radial-to-color":[{"mask-radial-to":L()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":P()}],"mask-image-conic-pos":[{"mask-conic":[de]}],"mask-image-conic-from-pos":[{"mask-conic-from":ae()}],"mask-image-conic-to-pos":[{"mask-conic-to":ae()}],"mask-image-conic-from-color":[{"mask-conic-from":L()}],"mask-image-conic-to-color":[{"mask-conic-to":L()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:De()}],"mask-repeat":[{mask:ye()}],"mask-size":[{mask:ce()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",X,V]}],filter:[{filter:["","none",X,V]}],blur:[{blur:Xt()}],brightness:[{brightness:[de,X,V]}],contrast:[{contrast:[de,X,V]}],"drop-shadow":[{"drop-shadow":["","none",H,xo,yo]}],"drop-shadow-color":[{"drop-shadow":L()}],grayscale:[{grayscale:["",de,X,V]}],"hue-rotate":[{"hue-rotate":[de,X,V]}],invert:[{invert:["",de,X,V]}],saturate:[{saturate:[de,X,V]}],sepia:[{sepia:["",de,X,V]}],"backdrop-filter":[{"backdrop-filter":["","none",X,V]}],"backdrop-blur":[{"backdrop-blur":Xt()}],"backdrop-brightness":[{"backdrop-brightness":[de,X,V]}],"backdrop-contrast":[{"backdrop-contrast":[de,X,V]}],"backdrop-grayscale":[{"backdrop-grayscale":["",de,X,V]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[de,X,V]}],"backdrop-invert":[{"backdrop-invert":["",de,X,V]}],"backdrop-opacity":[{"backdrop-opacity":[de,X,V]}],"backdrop-saturate":[{"backdrop-saturate":[de,X,V]}],"backdrop-sepia":[{"backdrop-sepia":["",de,X,V]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":Y()}],"border-spacing-x":[{"border-spacing-x":Y()}],"border-spacing-y":[{"border-spacing-y":Y()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",X,V]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[de,"initial",X,V]}],ease:[{ease:["linear","initial",G,X,V]}],delay:[{delay:[de,X,V]}],animate:[{animate:["none",Z,X,V]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[U,X,V]}],"perspective-origin":[{"perspective-origin":ee()}],rotate:[{rotate:St()}],"rotate-x":[{"rotate-x":St()}],"rotate-y":[{"rotate-y":St()}],"rotate-z":[{"rotate-z":St()}],scale:[{scale:Et()}],"scale-x":[{"scale-x":Et()}],"scale-y":[{"scale-y":Et()}],"scale-z":[{"scale-z":Et()}],"scale-3d":["scale-3d"],skew:[{skew:Qt()}],"skew-x":[{"skew-x":Qt()}],"skew-y":[{"skew-y":Qt()}],transform:[{transform:[X,V,"","none","gpu","cpu"]}],"transform-origin":[{origin:ee()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:gt()}],"translate-x":[{"translate-x":gt()}],"translate-y":[{"translate-y":gt()}],"translate-z":[{"translate-z":gt()}],"translate-none":["translate-none"],zoom:[{zoom:[ba,X,V]}],accent:[{accent:L()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:L()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",X,V]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":L()}],"scrollbar-track-color":[{"scrollbar-track":L()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":Y()}],"scroll-mx":[{"scroll-mx":Y()}],"scroll-my":[{"scroll-my":Y()}],"scroll-ms":[{"scroll-ms":Y()}],"scroll-me":[{"scroll-me":Y()}],"scroll-mbs":[{"scroll-mbs":Y()}],"scroll-mbe":[{"scroll-mbe":Y()}],"scroll-mt":[{"scroll-mt":Y()}],"scroll-mr":[{"scroll-mr":Y()}],"scroll-mb":[{"scroll-mb":Y()}],"scroll-ml":[{"scroll-ml":Y()}],"scroll-p":[{"scroll-p":Y()}],"scroll-px":[{"scroll-px":Y()}],"scroll-py":[{"scroll-py":Y()}],"scroll-ps":[{"scroll-ps":Y()}],"scroll-pe":[{"scroll-pe":Y()}],"scroll-pbs":[{"scroll-pbs":Y()}],"scroll-pbe":[{"scroll-pbe":Y()}],"scroll-pt":[{"scroll-pt":Y()}],"scroll-pr":[{"scroll-pr":Y()}],"scroll-pb":[{"scroll-pb":Y()}],"scroll-pl":[{"scroll-pl":Y()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",X,V]}],fill:[{fill:["none",...L()]}],"stroke-w":[{stroke:[de,Zi,$n,eg]}],stroke:[{stroke:["none",...L()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},w1=s1(D1);function Ae(...l){return w1(Tg(l))}const _1=Zg("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none transition-[color,box-shadow] overflow-hidden",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",destructive:"border-transparent bg-destructive/10 text-destructive dark:bg-destructive/20",success:"border-transparent bg-success/10 text-success dark:bg-success/15",warning:"border-transparent bg-warning/15 text-warning",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function sa({className:l,variant:o,asChild:r=!1,...u}){const d=r?Bc:"span";return f.jsx(d,{"data-slot":"badge",className:Ae(_1({variant:o}),l),...u})}function dt(l){return l==null?"0":l>=1e6?`${(l/1e6).toFixed(1)}M`:l>=1e4?`${(l/1e3).toFixed(1)}k`:Math.round(l).toLocaleString()}function xc(l){if(l==null||l<=0)return"0 B";const o=["B","KiB","MiB","GiB","TiB"];let r=0;for(;l>=1024&&r=100||r===0?0:1)} ${o[r]}`}function ov(l){if(l==null||l<0)return"–";const o=Math.floor(l);return o<60?`${o}s`:o<3600?`${Math.floor(o/60)}m ${o%60}s`:o<86400?`${Math.floor(o/3600)}h ${Math.floor(o%3600/60)}m`:`${Math.floor(o/86400)}d ${Math.floor(o%86400/3600)}h`}function rv(l){return l==null||l<.05?"0/s":l<10?`${l.toFixed(1)}/s`:`${dt(l)}/s`}function Lo(l){if(!l)return"–";const o=(Date.now()-new Date(l).getTime())/1e3;return o<60?`${Math.max(0,Math.floor(o))}s ago`:o<3600?`${Math.floor(o/60)}m ago`:o<86400?`${Math.floor(o/3600)}h ago`:`${Math.floor(o/86400)}d ago`}const C1=[{id:"overview",label:"Overview",icon:vy},{id:"tables",label:"Tables",icon:Hg},{id:"schema",label:"Schema",icon:kg},{id:"backfill",label:"Backfill",icon:Oc},{id:"dlq",label:"Dead letters",icon:Rc}];function M1(){const o=document.documentElement.classList.toggle("dark");localStorage.setItem("gtc-theme",o?"dark":"light")}function O1({page:l,onNavigate:o,stats:r,offline:u=!1,dlqCount:d,title:h,description:v,actions:y,children:N}){return f.jsxs("div",{className:"flex min-h-screen",children:[f.jsxs("aside",{className:"bg-sidebar text-sidebar-foreground border-sidebar-border fixed inset-y-0 left-0 z-30 flex w-14 flex-col border-r lg:w-56",children:[f.jsxs("div",{className:"flex items-center justify-center gap-2.5 px-2 pt-5 pb-4 lg:justify-start lg:px-4",children:[f.jsx("div",{className:"flex size-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-amber-400 to-orange-500 text-white shadow-sm",children:f.jsx(Cy,{className:"size-4.5",fill:"currentColor",strokeWidth:0})}),f.jsxs("div",{className:"hidden leading-tight lg:block",children:[f.jsx("div",{className:"text-sm font-bold tracking-tight",children:"GTC"}),f.jsx("div",{className:"text-sidebar-foreground/60 text-[10px] font-medium tracking-wide uppercase",children:"Change Data Capture"})]})]}),f.jsx("nav",{className:"flex flex-1 flex-col gap-0.5 px-2 pt-2 lg:px-2.5",children:C1.map(({id:S,label:O,icon:g})=>f.jsxs("button",{type:"button",title:O,onClick:()=>o(S),className:Ae("relative flex cursor-pointer items-center justify-center gap-2.5 rounded-md px-2.5 py-2 text-[13px] font-medium transition-colors lg:justify-start",l===S?"bg-sidebar-accent text-sidebar-accent-foreground":"text-sidebar-foreground/65 hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground"),children:[f.jsx(g,{className:"size-4 shrink-0",strokeWidth:l===S?2.25:2}),f.jsx("span",{className:"hidden flex-1 text-left lg:block",children:O}),S==="dlq"&&d>0&&f.jsxs(f.Fragment,{children:[f.jsx(sa,{variant:"destructive",className:"hidden h-5 min-w-5 px-1.5 tabular-nums lg:inline-flex",children:d}),f.jsx("span",{className:"absolute top-1.5 right-1.5 size-1.5 rounded-full bg-red-500 lg:hidden"})]})]},S))}),f.jsxs("div",{className:"border-sidebar-border hidden space-y-3 border-t px-4 py-4 lg:block",children:[f.jsxs("div",{className:"text-sidebar-foreground/60 flex items-center justify-between text-xs",children:[f.jsxs("span",{className:"flex items-center gap-1.5",children:[f.jsx("span",{className:Ae("relative flex size-2 rounded-full",r?.streaming?"bg-emerald-500":"bg-red-500"),children:r?.streaming&&f.jsx("span",{className:"absolute inline-flex size-full animate-ping rounded-full bg-emerald-500 opacity-60"})}),r?.streaming?"Streaming":"Disconnected"]}),f.jsx("span",{className:"tabular-nums",children:r?`up ${ov(r.uptime_seconds)}`:""})]}),f.jsxs("div",{className:"text-sidebar-foreground/60 flex items-center gap-1 text-xs",children:[f.jsxs("a",{href:"/metrics",target:"_blank",rel:"noreferrer",className:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground flex items-center gap-1.5 rounded-md px-2 py-1",children:[f.jsx(Pb,{className:"size-3.5"})," Metrics"]}),f.jsxs("a",{href:"https://github.com/emoss08/gtc",target:"_blank",rel:"noreferrer",className:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground flex items-center gap-1.5 rounded-md px-2 py-1",children:[f.jsx(fy,{className:"size-3.5"})," GitHub"]}),f.jsxs("button",{type:"button",onClick:M1,className:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground ml-auto cursor-pointer rounded-md p-1.5","aria-label":"Toggle theme",children:[f.jsx(Ny,{className:"size-3.5 dark:hidden"}),f.jsx(by,{className:"hidden size-3.5 dark:block"})]})]})]})]}),f.jsxs("div",{className:"ml-14 flex min-w-0 flex-1 flex-col lg:ml-56",children:[u&&f.jsx("div",{className:"bg-destructive/90 sticky top-0 z-30 px-6 py-1.5 text-center text-xs font-medium text-white",children:"Cannot reach GTC — the data below may be stale. Retrying…"}),f.jsx("header",{className:"bg-background/80 sticky top-0 z-20 border-b backdrop-blur",children:f.jsxs("div",{className:"mx-auto flex h-14 w-full max-w-6xl items-center justify-between gap-4 px-6",children:[f.jsxs("div",{className:"min-w-0",children:[f.jsx("h1",{className:"truncate text-[15px] font-semibold tracking-tight",children:h}),f.jsx("p",{className:"text-muted-foreground truncate text-xs",children:v})]}),f.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[r&&f.jsxs(f.Fragment,{children:[f.jsxs(sa,{variant:"outline",className:"text-muted-foreground hidden font-mono text-[11px] sm:inline-flex",children:[f.jsx(Ug,{className:"size-3"}),r.current_lsn]}),f.jsx(sa,{variant:r.ready?"success":"warning",children:r.ready?"Ready":"Not ready"})]}),y]})]})}),f.jsx("main",{className:"mx-auto w-full max-w-6xl flex-1 px-6 py-6",children:N})]})]})}function ca({className:l,...o}){return f.jsx("div",{"data-slot":"card",className:Ae("bg-card text-card-foreground flex flex-col gap-4 rounded-xl border py-4 shadow-sm",l),...o})}function Ql({className:l,...o}){return f.jsx("div",{"data-slot":"card-header",className:Ae("flex items-center justify-between gap-2 px-4",l),...o})}function Zl({className:l,...o}){return f.jsx("div",{"data-slot":"card-title",className:Ae("text-sm leading-none font-semibold tracking-tight",l),...o})}function Ki({className:l,...o}){return f.jsx("div",{"data-slot":"card-description",className:Ae("text-muted-foreground text-xs",l),...o})}function xa({className:l,...o}){return f.jsx("div",{"data-slot":"card-content",className:Ae("px-4",l),...o})}const R1=Mt({name:me(),healthy:Jl(),breaker_state:Se(),succeeded:Se(),failed:Se(),filtered:Se(),retries:Se(),errors_by_type:Ng(me(),Se()).nullable().transform(l=>l??{})}),U1=Mt({table:me(),insert:Se(),update:Se(),delete:Se(),read:Se(),truncate:Se(),total:Se()}),k1=Mt({schema:me(),table:me(),state:fb(["pending","running","done","skipped","failed"]),rows_copied:Se(),started_at:me().optional().nullable(),completed_at:me().optional().nullable(),error:me().optional()}),B1=Mt({uptime_seconds:Se(),version:me().default("dev"),slot_name:me().default(""),publication:me().default(""),ready:Jl(),streaming:Jl(),current_lsn:me(),wal_lag_bytes:Se(),inflight:Se(),events_total:Se(),operations:Ng(me(),Se()).nullable().transform(l=>l??{}),sinks:la(R1),tables:la(U1),backfill:la(k1),dlq:Mt({enabled:Jl(),entries:Se(),parked_total:Se().default(0),retried_total:Se().default(0)})}),H1=Mt({interval_seconds:Se(),samples:la(Mt({t:Se(),events_total:Se(),wal_lag_bytes:Se(),inflight:Se(),dlq_entries:Se()})).nullable().transform(l=>l??[])}),So=Mt({name:me(),type:me(),type_oid:Se(),part_of_key:Jl()}),L1=Mt({schema:me(),table:me(),relation_id:Se(),previous_schema:me().optional(),previous_table:me().optional(),added_columns:la(So).optional(),dropped_columns:la(So).optional(),changed_columns:la(Mt({name:me(),from:So,to:So})).optional(),key_columns:la(me()).optional(),previous_key_columns:la(me()).optional(),replica_identity:me(),previous_replica_identity:me().optional(),kinds:la(me()),lsn:me(),transaction_id:Se(),timestamp:me(),breaking:Jl(),summary:me()}),q1=Mt({total:Se(),changes:la(L1).nullable().transform(l=>l??[])}),Y1=Mt({id:me(),sink:me(),schema:me(),table:me(),operation:me(),lsn:me(),error:me(),attempts:Se(),first_failed_at:me().optional(),last_failed_at:me(),event:db().optional()}),G1=Mt({total:Se(),entries:la(Y1).nullable().transform(l=>l??[])});async function jn(l,o){const r=await fetch(l,{headers:{"Content-Type":"application/json"},...o}),u=await r.json().catch(()=>({}));if(!r.ok)throw new Error(u.error??`${r.status} ${r.statusText}`);return u}const V1=async()=>B1.parse(await jn("/api/stats")),X1=async()=>H1.parse(await jn("/api/history")),Q1=async()=>q1.parse(await jn("/api/schema")),Z1=async(l=100)=>G1.parse(await jn(`/dlq?limit=${l}`)),K1=l=>jn("/dlq/retry",{method:"POST",body:JSON.stringify({id:l})}),J1=()=>jn("/dlq/retry",{method:"POST",body:JSON.stringify({all:!0})}),F1=l=>jn("/dlq/discard",{method:"POST",body:JSON.stringify({id:l})}),$1=l=>jn("/backfill",{method:"POST",body:JSON.stringify(l?{table:l}:{all:!0})}),uv=2e3;function W1(){return ko({queryKey:["stats"],queryFn:V1,refetchInterval:uv})}function I1(){const{data:l,isLoading:o}=ko({queryKey:["history"],queryFn:X1,refetchInterval:5e3});return{points:E.useMemo(()=>{const u=l?.samples??[],d=[];for(let h=1;h0?Math.max(0,(y.events_total-v.events_total)/N):0;d.push({t:y.t,rate:S,walLag:y.wal_lag_bytes,inflight:y.inflight,dlq:y.dlq_entries})}return d},[l]),isLoading:o}}function P1(){const[l,o]=E.useState(()=>document.documentElement.classList.contains("dark"));return E.useEffect(()=>{const r=new MutationObserver(()=>{o(document.documentElement.classList.contains("dark"))});return r.observe(document.documentElement,{attributes:!0,attributeFilter:["class"]}),()=>r.disconnect()},[]),l}function ex(){return ko({queryKey:["schema"],queryFn:Q1,refetchInterval:1e4})}function tx(l=!0){return ko({queryKey:["dlq"],queryFn:()=>Z1(200),refetchInterval:uv,enabled:l})}const qc={INSERT:"#10b981",UPDATE:"#0ea5e9",DELETE:"#ef4444",READ:"#8b5cf6",TRUNCATE:"#f59e0b"};function qo(){const l=P1();return{dark:l,grid:l?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",axis:l?"rgba(255,255,255,0.45)":"rgba(0,0,0,0.45)",tooltipBg:l?"#27272a":"#ffffff",tooltipText:l?"#fafafa":"#18181b",tooltipBorder:l?"rgba(255,255,255,0.12)":"rgba(0,0,0,0.1)"}}function Uo(l){const o=new Date(l);return`${String(o.getHours()).padStart(2,"0")}:${String(o.getMinutes()).padStart(2,"0")}`}function Yo(l){return{backgroundColor:l.tooltipBg,color:l.tooltipText,border:`1px solid ${l.tooltipBorder}`,borderRadius:8,fontSize:12,padding:"6px 10px",boxShadow:"0 4px 12px rgba(0,0,0,0.15)"}}function ax({points:l}){const o=qo();return f.jsx(jg,{width:"100%",height:220,children:f.jsxs(Ag,{data:l,margin:{top:8,right:8,bottom:0,left:-12},children:[f.jsx("defs",{children:f.jsxs("linearGradient",{id:"rateFill",x1:"0",y1:"0",x2:"0",y2:"1",children:[f.jsx("stop",{offset:"0%",stopColor:"#10b981",stopOpacity:.35}),f.jsx("stop",{offset:"100%",stopColor:"#10b981",stopOpacity:0})]})}),f.jsx(Dg,{stroke:o.grid,vertical:!1}),f.jsx(wg,{dataKey:"t",tickFormatter:Uo,stroke:o.axis,fontSize:11,tickLine:!1,axisLine:!1,minTickGap:48}),f.jsx(_g,{stroke:o.axis,fontSize:11,tickLine:!1,axisLine:!1,tickFormatter:r=>dt(r),width:48}),f.jsx(Cg,{contentStyle:Yo(o),labelFormatter:r=>Uo(Number(r)),formatter:r=>[rv(Number(r)),"events"]}),f.jsx(Mg,{type:"monotone",dataKey:"rate",stroke:"#10b981",strokeWidth:2,fill:"url(#rateFill)",isAnimationActive:!1})]})})}function nx({points:l}){const o=qo();return f.jsx(jg,{width:"100%",height:140,children:f.jsxs(Ag,{data:l,margin:{top:8,right:8,bottom:0,left:8},children:[f.jsx("defs",{children:f.jsxs("linearGradient",{id:"lagFill",x1:"0",y1:"0",x2:"0",y2:"1",children:[f.jsx("stop",{offset:"0%",stopColor:"#f59e0b",stopOpacity:.3}),f.jsx("stop",{offset:"100%",stopColor:"#f59e0b",stopOpacity:0})]})}),f.jsx(Dg,{stroke:o.grid,vertical:!1}),f.jsx(wg,{dataKey:"t",tickFormatter:Uo,stroke:o.axis,fontSize:11,tickLine:!1,axisLine:!1,minTickGap:48}),f.jsx(_g,{stroke:o.axis,fontSize:11,tickLine:!1,axisLine:!1,tickFormatter:r=>xc(r),width:64}),f.jsx(Cg,{contentStyle:Yo(o),labelFormatter:r=>Uo(Number(r)),formatter:r=>[xc(Number(r)),"WAL lag"]}),f.jsx(Mg,{type:"monotone",dataKey:"walLag",stroke:"#f59e0b",strokeWidth:2,fill:"url(#lagFill)",isAnimationActive:!1})]})})}function lx({operations:l}){const o=qo(),r=E.useMemo(()=>Object.entries(l).filter(([,d])=>d>0).sort((d,h)=>h[1]-d[1]).map(([d,h])=>({id:d,label:d,value:h})),[l]),u=r.reduce((d,h)=>d+h.value,0);return r.length===0?f.jsx("div",{className:"text-muted-foreground flex h-[200px] items-center justify-center text-sm",children:"No events yet."}):f.jsxs("div",{className:"relative h-[200px]",children:[f.jsx(Mb,{data:r,margin:{top:12,right:12,bottom:12,left:12},innerRadius:.72,padAngle:1.5,cornerRadius:3,colors:d=>qc[d.id]??"#71717a",enableArcLinkLabels:!1,enableArcLabels:!1,borderWidth:0,isInteractive:!0,animate:!1,tooltip:({datum:d})=>f.jsxs("div",{style:Yo(o),className:"flex items-center gap-2 whitespace-nowrap",children:[f.jsx("span",{className:"size-2 rounded-full",style:{backgroundColor:d.color}}),d.id,": ",dt(d.value)," (",u>0?(d.value/u*100).toFixed(1):0,"%)"]})}),f.jsxs("div",{className:"pointer-events-none absolute inset-0 flex flex-col items-center justify-center",children:[f.jsx("div",{className:"text-xl font-semibold tabular-nums",children:dt(u)}),f.jsx("div",{className:"text-muted-foreground text-[11px]",children:"events"})]})]})}function ix({tables:l}){const o=qo(),r=E.useMemo(()=>l.slice().sort((u,d)=>d.total-u.total).slice(0,8).reverse().map(u=>({table:u.table,INSERT:u.insert,UPDATE:u.update,DELETE:u.delete,READ:u.read,TRUNCATE:u.truncate})),[l]);return r.length===0?f.jsx("div",{className:"text-muted-foreground flex h-[220px] items-center justify-center text-sm",children:"No events yet."}):f.jsx("div",{style:{height:Math.max(180,r.length*34+40)},children:f.jsx(Ob,{data:r,keys:["INSERT","UPDATE","DELETE","READ","TRUNCATE"],indexBy:"table",layout:"horizontal",margin:{top:0,right:16,bottom:28,left:130},padding:.35,colors:({id:u})=>qc[u]??"#71717a",borderRadius:2,enableLabel:!1,enableGridY:!1,enableGridX:!0,animate:!1,theme:{grid:{line:{stroke:o.grid}},axis:{ticks:{text:{fill:o.axis,fontSize:11}}}},axisBottom:{tickSize:0,tickPadding:8,format:u=>dt(Number(u))},axisLeft:{tickSize:0,tickPadding:8},tooltip:({id:u,value:d,indexValue:h,color:v})=>f.jsxs("div",{style:Yo(o),className:"flex items-center gap-2 whitespace-nowrap",children:[f.jsx("span",{className:"size-2 rounded-full",style:{backgroundColor:v}}),h," · ",u,": ",dt(d)]})})})}function cv(){return f.jsx("div",{className:"text-muted-foreground flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]",children:Object.entries(qc).map(([l,o])=>f.jsxs("span",{className:"flex items-center gap-1.5",children:[f.jsx("span",{className:"size-2 rounded-full",style:{backgroundColor:o}}),l]},l))})}function sx({className:l,...o}){return f.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:f.jsx("table",{"data-slot":"table",className:Ae("w-full caption-bottom text-sm",l),...o})})}function ox({className:l,...o}){return f.jsx("thead",{"data-slot":"table-header",className:Ae("[&_tr]:border-b",l),...o})}function rx({className:l,...o}){return f.jsx("tbody",{"data-slot":"table-body",className:Ae("[&_tr:last-child]:border-0",l),...o})}function uc({className:l,...o}){return f.jsx("tr",{"data-slot":"table-row",className:Ae("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",l),...o})}function ux({className:l,...o}){return f.jsx("th",{"data-slot":"table-head",className:Ae("text-muted-foreground h-9 px-3 text-left align-middle text-xs font-medium whitespace-nowrap first:pl-4 last:pr-4",l),...o})}function ng({className:l,...o}){return f.jsx("td",{"data-slot":"table-cell",className:Ae("px-3 py-2.5 align-middle whitespace-nowrap first:pl-4 last:pr-4",l),...o})}function Wi({table:l,empty:o}){const r=l.getRowModel().rows,u=l.getAllLeafColumns().length;return f.jsxs(sx,{children:[f.jsx(ox,{children:l.getHeaderGroups().map(d=>f.jsx(uc,{className:"hover:bg-transparent",children:d.headers.map(h=>{const v=h.column.getCanSort(),y=h.column.getIsSorted();return f.jsx(ux,{children:h.isPlaceholder?null:v?f.jsxs("button",{type:"button",className:Ae("inline-flex cursor-pointer items-center gap-1 select-none hover:text-foreground",y&&"text-foreground"),onClick:h.column.getToggleSortingHandler(),children:[f.jsx(nc,{header:h}),y==="asc"?f.jsx(Wb,{className:"size-3"}):y==="desc"?f.jsx(Fb,{className:"size-3"}):f.jsx(ty,{className:"size-3 opacity-50"})]}):f.jsx(nc,{header:h})},h.id)})},d.id))}),f.jsx(rx,{children:r.length===0?f.jsx(uc,{className:"hover:bg-transparent",children:f.jsx(ng,{colSpan:u,className:"h-28 text-center whitespace-normal",children:o??f.jsx("span",{className:"text-muted-foreground text-sm",children:"No results."})})}):r.map(d=>f.jsx(uc,{children:d.getAllCells().map(h=>f.jsx(ng,{children:f.jsx(nc,{cell:h})},h.id))},d.id))})]})}function Eo({label:l,value:o,sub:r,icon:u,tone:d="default",children:h}){return f.jsx(ca,{className:"gap-0 py-4",children:f.jsxs("div",{className:"flex items-start justify-between gap-3 px-4",children:[f.jsxs("div",{className:"min-w-0",children:[f.jsxs("div",{className:"text-muted-foreground flex items-center gap-1.5 text-xs font-medium",children:[f.jsx(u,{className:"size-3.5"}),l]}),f.jsx("div",{className:Ae("mt-1.5 truncate text-2xl font-semibold tracking-tight tabular-nums",d==="danger"&&"text-destructive",d==="success"&&"text-success"),children:o}),r&&f.jsx("div",{className:"text-muted-foreground mt-0.5 truncate text-xs",children:r})]}),h]})})}const Ii=mb({rowSortingFeature:Sb,sortedRowModel:Nb(),sortFns:{alphanumeric:xb,basic:yb,text:bb,datetime:pb},columnFilteringFeature:vb,globalFilteringFeature:gb,filteredRowModel:Eb(),filterFns:{includesString:hb}}),lg={0:{label:"closed",variant:"success"},1:{label:"half-open",variant:"warning"},2:{label:"open",variant:"destructive"}};function cx(l){const o=Object.entries(l).sort((r,u)=>u[1]-r[1]).map(([r,u])=>`${r}: ${dt(u)}`);return o.length>0?`errors — ${o.join(", ")}`:""}const fx=[{accessorKey:"name",header:"Sink",sortFn:"text",cell:({row:l})=>f.jsxs("span",{className:"flex items-center gap-2 font-medium",children:[f.jsx("span",{className:l.original.healthy?"size-1.5 rounded-full bg-emerald-500":"size-1.5 rounded-full bg-red-500"}),l.original.name]})},{accessorKey:"breaker_state",header:"Breaker",sortFn:"basic",cell:({getValue:l})=>{const o=lg[l()]??lg[0];return f.jsx(sa,{variant:o.variant,children:o.label})}},{accessorKey:"succeeded",header:()=>f.jsx("span",{className:"block text-right",children:"Delivered"}),sortFn:"basic",cell:({getValue:l})=>f.jsx("span",{className:"text-success block text-right tabular-nums",children:dt(l())})},{accessorKey:"failed",header:()=>f.jsx("span",{className:"block text-right",children:"Failed"}),sortFn:"basic",cell:({row:l,getValue:o})=>{const r=o();return f.jsx("span",{className:`block text-right tabular-nums ${r>0?"text-destructive":"text-muted-foreground"}`,title:cx(l.original.errors_by_type),children:dt(r)})}},{accessorKey:"retries",header:()=>f.jsx("span",{className:"block text-right",children:"Retries"}),sortFn:"basic",cell:({getValue:l})=>f.jsx("span",{className:"text-muted-foreground block text-right tabular-nums",children:dt(l())})},{accessorKey:"filtered",header:()=>f.jsx("span",{className:"block text-right",children:"Filtered"}),sortFn:"basic",cell:({getValue:l})=>f.jsx("span",{className:"text-muted-foreground block text-right tabular-nums",children:dt(l())})}];function En({label:l,value:o}){return f.jsxs("div",{className:"flex items-center justify-between gap-3 text-xs",children:[f.jsx("span",{className:"text-muted-foreground shrink-0",children:l}),f.jsx("span",{className:"truncate text-right font-medium",children:o})]})}function dx({stats:l}){const{points:o}=I1(),r=E.useMemo(()=>l?.sinks??[],[l]),u=o.length>0?o[o.length-1].rate:0,d=$i({features:Ii,columns:fx,data:r}),h=l?.dlq.entries??0;return f.jsxs("div",{className:"space-y-4",children:[f.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-4",children:[f.jsx(Eo,{label:"Throughput",value:rv(u),sub:`${dt(l?.events_total)} events total`,icon:Ug}),f.jsx(Eo,{label:"WAL lag",value:xc(l?.wal_lag_bytes),sub:l?.streaming?"replication live":"replication down",icon:uy}),f.jsx(Eo,{label:"In flight",value:String(l?.inflight??0),sub:"events being processed",icon:hy}),f.jsx(Eo,{label:"Dead letters",value:String(h),sub:l?.dlq.enabled?`${dt(l.dlq.parked_total)} parked · ${dt(l.dlq.retried_total)} retried all-time`:"DLQ disabled",icon:Rc,tone:h>0?"danger":"default"})]}),f.jsxs("div",{className:"grid gap-4 xl:grid-cols-3",children:[f.jsxs(ca,{className:"gap-2 xl:col-span-2",children:[f.jsx(Ql,{children:f.jsxs("div",{children:[f.jsx(Zl,{children:"Throughput"}),f.jsx(Ki,{className:"mt-1",children:"Events per second · last 30 minutes"})]})}),f.jsx(xa,{className:"pr-2",children:f.jsx(ax,{points:o})})]}),f.jsxs(ca,{className:"gap-2",children:[f.jsx(Ql,{children:f.jsxs("div",{children:[f.jsx(Zl,{children:"Operation mix"}),f.jsx(Ki,{className:"mt-1",children:"All events since start"})]})}),f.jsxs(xa,{children:[f.jsx(lx,{operations:l?.operations??{}}),f.jsx("div",{className:"mt-2 flex justify-center",children:f.jsx(cv,{})})]})]})]}),f.jsxs("div",{className:"grid gap-4 xl:grid-cols-3",children:[f.jsxs(ca,{className:"gap-2 xl:col-span-2",children:[f.jsx(Ql,{children:f.jsxs("div",{children:[f.jsx(Zl,{children:"Replication lag"}),f.jsx(Ki,{className:"mt-1",children:"WAL bytes between the server and the last confirmed position — sustained growth means a sink can't keep up"})]})}),f.jsx(xa,{className:"pr-2",children:f.jsx(nx,{points:o})})]}),f.jsxs(ca,{className:"gap-2",children:[f.jsx(Ql,{children:f.jsx(Zl,{children:"Instance"})}),f.jsxs(xa,{className:"space-y-2.5",children:[f.jsx(En,{label:"Version",value:l?.version??"–"}),f.jsx(En,{label:"Status",value:f.jsxs("span",{className:"flex items-center justify-end gap-1.5",children:[f.jsx(sa,{variant:l?.streaming?"success":"destructive",children:l?.streaming?"streaming":"disconnected"}),f.jsx(sa,{variant:l?.ready?"success":"warning",children:l?.ready?"ready":"not ready"})]})}),f.jsx(En,{label:"Uptime",value:ov(l?.uptime_seconds)}),f.jsx(En,{label:"Current LSN",value:f.jsx("span",{className:"font-mono text-[11px]",children:l?.current_lsn??"–"})}),f.jsx(En,{label:"Slot",value:f.jsx("span",{className:"font-mono text-[11px]",children:l?.slot_name||"–"})}),f.jsx(En,{label:"Publication",value:f.jsx("span",{className:"font-mono text-[11px]",children:l?.publication||"–"})}),f.jsx(En,{label:"Tables observed",value:String(l?.tables.length??0)}),f.jsx(En,{label:"Dead-letter queue",value:l?.dlq.enabled?`${h} parked`:"disabled"})]})]})]}),f.jsxs(ca,{className:"gap-3",children:[f.jsxs(Ql,{children:[f.jsxs("div",{children:[f.jsx(Zl,{children:"Sinks"}),f.jsx(Ki,{className:"mt-1",children:"Delivery state per destination — the circuit breaker opens while a sink is down. Hover a failure count for the error breakdown."})]}),f.jsxs(sa,{variant:"outline",className:"text-muted-foreground",children:[f.jsx(Kb,{className:"size-3"}),r.length," active"]})]}),f.jsx(xa,{className:"px-0",children:f.jsx(Wi,{table:d,empty:f.jsxs("div",{className:"text-muted-foreground flex flex-col items-center gap-1 text-sm",children:[f.jsx(ny,{className:"size-5"}),"No sinks configured — set REDIS_URL, REDIS_JSON_URL, or MEILISEARCH_URL."]})})})]})]})}function Go({className:l,type:o,...r}){return f.jsx("input",{type:o,"data-slot":"input",className:Ae("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",l),...r})}function No(l,o){return f.jsx("span",{className:`block text-right tabular-nums ${l>0?o:"text-muted-foreground/50"}`,children:dt(l)})}function mx(l){return[{accessorKey:"table",header:"Table",sortFn:"text",cell:({getValue:o})=>f.jsx("span",{className:"font-medium",children:o()})},{accessorKey:"insert",header:()=>f.jsx("span",{className:"block text-right",children:"Inserts"}),sortFn:"basic",cell:({getValue:o})=>No(o(),"text-emerald-600 dark:text-emerald-400")},{accessorKey:"update",header:()=>f.jsx("span",{className:"block text-right",children:"Updates"}),sortFn:"basic",cell:({getValue:o})=>No(o(),"text-sky-600 dark:text-sky-400")},{accessorKey:"delete",header:()=>f.jsx("span",{className:"block text-right",children:"Deletes"}),sortFn:"basic",cell:({getValue:o})=>No(o(),"text-red-600 dark:text-red-400")},{accessorKey:"read",header:()=>f.jsx("span",{className:"block text-right",children:"Backfill reads"}),sortFn:"basic",cell:({getValue:o})=>No(o(),"text-violet-600 dark:text-violet-400")},{accessorKey:"total",header:()=>f.jsx("span",{className:"block text-right",children:"Total"}),sortFn:"basic",cell:({getValue:o})=>{const r=o(),u=l>0?r/l*100:0;return f.jsxs("div",{className:"flex items-center justify-end gap-2",children:[f.jsx("span",{className:"font-medium tabular-nums",children:dt(r)}),f.jsx("span",{className:"bg-muted relative h-1.5 w-16 overflow-hidden rounded-full",children:f.jsx("span",{className:"bg-primary/70 absolute inset-y-0 left-0 rounded-full",style:{width:`${Math.max(2,u)}%`}})})]})}}]}function hx({stats:l}){const[o,r]=E.useState(""),u=E.useMemo(()=>l?.tables??[],[l]),d=E.useMemo(()=>mx(l?.events_total??0),[l?.events_total]),h=$i({features:Ii,columns:d,data:u,globalFilterFn:"includesString",initialState:{sorting:[{id:"total",desc:!0}]},state:{globalFilter:o}});return f.jsxs("div",{className:"space-y-4",children:[u.length>0&&f.jsxs(ca,{className:"gap-2",children:[f.jsxs(Ql,{children:[f.jsxs("div",{children:[f.jsx(Zl,{children:"Busiest tables"}),f.jsxs(Ki,{className:"mt-1",children:["Top ",Math.min(8,u.length)," tables by change volume, stacked by operation"]})]}),f.jsx(cv,{})]}),f.jsx(xa,{className:"pr-2",children:f.jsx(ix,{tables:u})})]}),f.jsxs("div",{className:"relative max-w-xs",children:[f.jsx(Uc,{className:"text-muted-foreground absolute top-1/2 left-2.5 size-4 -translate-y-1/2"}),f.jsx(Go,{placeholder:"Filter tables…",value:o,onChange:v=>r(v.target.value),className:"h-8 pl-8 text-sm"})]}),f.jsx(ca,{className:"py-0",children:f.jsx(xa,{className:"px-0",children:f.jsx(Wi,{table:h,empty:f.jsxs("div",{className:"text-muted-foreground flex flex-col items-center gap-1 text-sm",children:[f.jsx(Hg,{className:"size-5"}),"No change events observed yet."]})})})})]})}const gx={column_added:"column added",column_dropped:"column dropped",column_type_changed:"type changed",key_changed:"key changed",replica_identity_changed:"replica identity",table_renamed:"renamed"},vx=new Set(["column_added"]),px=[{id:"target",accessorFn:l=>`${l.schema}.${l.table}`,header:"Table",sortFn:"text",cell:({row:l,getValue:o})=>f.jsxs("span",{className:"flex items-center gap-2",children:[f.jsx("span",{className:"font-medium",children:o()}),l.original.breaking&&f.jsx(Lg,{className:"size-3.5 text-amber-500","aria-label":"Potentially breaking for consumers"})]})},{id:"kinds",accessorFn:l=>l.kinds.join(" "),header:"Change",enableSorting:!1,cell:({row:l})=>f.jsx("div",{className:"flex flex-wrap gap-1",children:l.original.kinds.map(o=>f.jsx(sa,{variant:vx.has(o)?"success":"destructive",className:"text-[10px]",children:gx[o]??o},o))})},{accessorKey:"summary",header:"Details",enableSorting:!1,cell:({getValue:l})=>f.jsx("span",{className:"text-muted-foreground block max-w-md truncate text-xs",title:l(),children:l()})},{accessorKey:"lsn",header:"LSN",enableSorting:!1,cell:({getValue:l})=>f.jsx("span",{className:"text-muted-foreground font-mono text-xs",children:l()})},{accessorKey:"timestamp",header:"Detected",sortFn:"datetime",cell:({getValue:l})=>f.jsx("span",{className:"text-muted-foreground",children:Lo(l())})}];function bx(){const[l,o]=E.useState(""),{data:r}=ex(),u=E.useMemo(()=>r?.changes??[],[r]),d=u.filter(v=>v.breaking).length,h=$i({features:Ii,columns:px,data:u,globalFilterFn:"includesString",initialState:{sorting:[{id:"timestamp",desc:!0}]},state:{globalFilter:l}});return f.jsxs("div",{className:"space-y-4",children:[f.jsxs("div",{className:"flex items-center justify-between gap-3",children:[f.jsxs("div",{className:"relative max-w-xs flex-1",children:[f.jsx(Uc,{className:"text-muted-foreground absolute top-1/2 left-2.5 size-4 -translate-y-1/2"}),f.jsx(Go,{placeholder:"Filter by table or change…",value:l,onChange:v=>o(v.target.value),className:"h-8 pl-8 text-sm"})]}),d>0&&f.jsxs(sa,{variant:"destructive",className:"gap-1",children:[f.jsx(Lg,{className:"size-3"}),d," potentially breaking"]})]}),f.jsx(ca,{className:"py-0",children:f.jsx(xa,{className:"px-0",children:f.jsx(Wi,{table:h,empty:f.jsxs("div",{className:"text-muted-foreground flex flex-col items-center gap-1 text-sm",children:[f.jsx(kg,{className:"size-5"}),"No schema changes observed since start."]})})})}),f.jsx("p",{className:"text-muted-foreground px-1 text-xs",children:"PostgreSQL does not stream DDL statements. GTC reports the effect of a change — columns added, dropped or retyped, replica identity, renames — the moment the table's next row change arrives, so a change to an idle table surfaces when its traffic resumes."})]})}const ig=(l,o,r)=>{if(l&&"reportValidity"in l){const u=vc(r,o);l.setCustomValidity(u&&u.message||""),l.reportValidity()}},Sc=(l,o)=>{for(const r in o.fields){const u=o.fields[r];u&&u.ref&&"reportValidity"in u.ref?ig(u.ref,r,l):u&&u.refs&&u.refs.forEach(d=>ig(d,r,l))}},sg=(l,o)=>{o.shouldUseNativeValidation&&Sc(l,o);const r={};for(const u in l){const d=vc(o.fields,u),h=Object.assign(l[u]||{},{ref:d&&d.refs?d.refs[0]:d&&d.ref});if(yx(o.names||Object.keys(l),u)){const v=Object.assign({},vc(r,u));lc(v,"root",h),lc(r,u,v)}else lc(r,u,h)}return r},yx=(l,o)=>{const r=og(o).replace(/[.*+?^${}()|\\]/g,"\\$&");return l.some(u=>og(u).match(`^${r}\\.\\d+`))};function og(l){return l.replace(/[\[\]]/g,"")}function Ec(){return Ec=Object.assign?Object.assign.bind():function(l){for(var o=1;o0){var N,S,O=d.errors.reduce(function(H,R){return R.length"u")return;let o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",o.appendChild(r),r.styleSheet?r.styleSheet.cssText=l:r.appendChild(document.createTextNode(l))}const zx=l=>{switch(l){case"success":return Ax;case"info":return wx;case"warning":return Dx;case"error":return _x;default:return null}},Tx=Array(12).fill(0),jx=({visible:l,className:o})=>q.createElement("div",{className:["sonner-loading-wrapper",o].filter(Boolean).join(" "),"data-visible":l},q.createElement("div",{className:"sonner-spinner"},Tx.map((r,u)=>q.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${u}`})))),Ax=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20","aria-hidden":"true"},q.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),Dx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20","aria-hidden":"true"},q.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),wx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20","aria-hidden":"true"},q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),_x=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20","aria-hidden":"true"},q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),Cx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true"},q.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),q.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),Mx=()=>{const[l,o]=q.useState(document.hidden);return q.useEffect(()=>{const r=()=>{o(document.hidden)};return document.addEventListener("visibilitychange",r),()=>document.removeEventListener("visibilitychange",r)},[]),l};let Ox=1;const Rx=100,ug=l=>{var o;return typeof l?.id=="number"||(l==null||(o=l.id)==null?void 0:o.length)>0?l.id:Ox++};class Ux{constructor(){this.subscribe=o=>(this.subscribers.push(o),this.getActiveToasts().forEach(r=>o(r)),()=>{const r=this.subscribers.indexOf(o);this.subscribers.splice(r,1)}),this.publish=o=>{this.subscribers.forEach(r=>r(o))},this.addToast=o=>{this.publish(o),this.toasts=[...this.toasts,o],this.trimHistory()},this.trimHistory=()=>{let o=this.toasts.length-Rx;o<=0||(this.toasts=this.toasts.filter(r=>o>0&&this.dismissedToasts.has(r.id)?(this.dismissedToasts.delete(r.id),o--,!1):!0))},this.create=o=>{const{message:r,...u}=o,d=ug(o),h=this.pendingDismissals.get(d);h!==void 0&&(cancelAnimationFrame(h),this.pendingDismissals.delete(d),this.dismissedToasts.delete(d));const v=this.dismissedToasts.has(d),y=o.dismissible===void 0?!0:o.dismissible;return v&&(this.dismissedToasts.delete(d),this.toasts=this.toasts.filter(S=>S.id!==d)),(v?void 0:this.toasts.find(S=>S.id===d))?this.toasts=this.toasts.map(S=>S.id===d?(this.publish({...S,...o,id:d,title:r}),{...S,...o,id:d,dismissible:y,title:r}):S):this.addToast({title:r,...u,dismissible:y,id:d}),d},this.dismiss=o=>{if(o==null)return this.getActiveToasts().forEach(u=>{this.dismissedToasts.add(u.id),this.subscribers.forEach(d=>d({id:u.id,dismiss:!0}))}),o;this.dismissedToasts.add(o);const r=this.pendingDismissals.get(o);return r!==void 0&&cancelAnimationFrame(r),this.pendingDismissals.set(o,requestAnimationFrame(()=>{this.pendingDismissals.delete(o),this.subscribers.forEach(u=>u({id:o,dismiss:!0}))})),o},this.message=(o,r)=>this.create({...r,message:o,type:void 0}),this.error=(o,r)=>this.create({...r,message:o,type:"error"}),this.success=(o,r)=>this.create({...r,type:"success",message:o}),this.info=(o,r)=>this.create({...r,type:"info",message:o}),this.warning=(o,r)=>this.create({...r,type:"warning",message:o}),this.loading=(o,r)=>this.create({...r,type:"loading",message:o}),this.promise=(o,r)=>{if(!r)return;let u;r.loading!==void 0&&(u=this.create({...r,promise:o,type:"loading",message:r.loading,description:typeof r.description!="function"?r.description:void 0}));const d=Promise.resolve(o instanceof Function?o():o);let h=u!==void 0,v;const y=d.then(async S=>{if(v=["resolve",S],q.isValidElement(S))h=!1,this.create({id:u,type:"default",message:S});else if(Bx(S)&&!S.ok){h=!1;const g=typeof r.error=="function"?await r.error(`HTTP error! status: ${S.status}`):r.error,_=typeof r.description=="function"?await r.description(`HTTP error! status: ${S.status}`):r.description,R=typeof g=="object"&&!q.isValidElement(g)?g:{message:g};this.create({id:u,type:"error",description:_,...R})}else if(S instanceof Error){h=!1;const g=typeof r.error=="function"?await r.error(S):r.error,_=typeof r.description=="function"?await r.description(S):r.description,R=typeof g=="object"&&!q.isValidElement(g)?g:{message:g};this.create({id:u,type:"error",description:_,...R})}else if(r.success!==void 0){h=!1;const g=typeof r.success=="function"?await r.success(S):r.success,_=typeof r.description=="function"?await r.description(S):r.description,R=typeof g=="object"&&!q.isValidElement(g)?g:{message:g};this.create({id:u,type:"success",description:_,...R})}}).catch(async S=>{if(v=["reject",S],r.error!==void 0){h=!1;const O=typeof r.error=="function"?await r.error(S):r.error,g=typeof r.description=="function"?await r.description(S):r.description,H=typeof O=="object"&&!q.isValidElement(O)?O:{message:O};this.create({id:u,type:"error",description:g,...H})}}).finally(()=>{h&&(this.dismiss(u),u=void 0),r.finally==null||r.finally.call(r)}),N=()=>new Promise((S,O)=>y.then(()=>v[0]==="reject"?O(v[1]):S(v[1])).catch(O));return typeof u!="string"&&typeof u!="number"?{unwrap:N}:Object.assign(u,{unwrap:N})},this.custom=(o,r)=>{const u=ug(r);return this.create({...r,jsx:o(u),id:u,type:void 0}),u},this.getActiveToasts=()=>this.toasts.filter(o=>!this.dismissedToasts.has(o.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set,this.pendingDismissals=new Map}}const Ct=new Ux,kx=(l,o)=>Ct.message(l,o),Bx=l=>l&&typeof l=="object"&&"ok"in l&&typeof l.ok=="boolean"&&"status"in l&&typeof l.status=="number",Hx=kx,Lx=()=>Ct.toasts,qx=()=>Ct.getActiveToasts(),Nn=Object.assign(Hx,{success:Ct.success,info:Ct.info,warning:Ct.warning,error:Ct.error,custom:Ct.custom,message:Ct.message,promise:Ct.promise,dismiss:Ct.dismiss,loading:Ct.loading},{getHistory:Lx,getToasts:qx});Nx("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--normal-text);background:var(--normal-bg);border:1px solid var(--normal-border);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{-webkit-user-select:none;user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function zo(l){return l.label!==void 0}const Yx=3,Gx="24px",Vx="16px",cg=4e3,Xx=356,Qx=14,Zx=45,Kx=200;function ya(...l){return l.filter(Boolean).join(" ")}function Jx(l){const[o,r]=l.split("-"),u=[];return o&&u.push(o),r&&u.push(r),u}const Fx=l=>{var o,r,u,d,h,v,y,N,S;const{invert:O,toast:g,unstyled:_,interacting:H,setHeights:R,visibleToasts:U,heights:k,index:G,toasts:Z,expanded:K,removeToast:P,defaultRichColors:ee,closeButton:oe,style:fe,cancelButtonStyle:Y,actionButtonStyle:be,className:mt="",descriptionClassName:He="",duration:ne,position:it,gap:Le,expandByDefault:ke,classNames:j,icons:B,closeButtonAriaLabel:F="Close toast"}=l,[se,L]=q.useState(null),[De,ye]=q.useState(null),[ce,W]=q.useState(!1),[te,le]=q.useState(!1),[qe,ht]=q.useState(!1),[ae,Xt]=q.useState(!1),[St,Et]=q.useState(!1),[Qt,gt]=q.useState(0),[Il,Pn]=q.useState(0),An=q.useRef(g.duration||ne||cg),Pl=q.useRef(null),Ot=q.useRef(null),ei=G===0,ti=G+1<=U,st=g.type,es=st??"default",Ze=g.dismissible!==!1,Zo=g.className||"",ts=g.descriptionClassName||"",Dn=q.useMemo(()=>k.findIndex(ie=>ie.toastId===g.id)||0,[k,g.id]),el=q.useMemo(()=>{var ie;return(ie=g.closeButton)!=null?ie:oe},[g.closeButton,oe]),as=q.useMemo(()=>g.duration||ne||cg,[g.duration,ne]),tl=q.useRef(0),Ka=q.useRef(0),ns=q.useRef(0),Zt=q.useRef(null),[pt,ma]=it.split("-"),vt=q.useMemo(()=>k.reduce((ie,Ve,Ke)=>Ke>=Dn?ie:ie+Ve.height,0),[k,Dn]),ls=Mx(),Kt=q.useMemo(()=>{var ie;return(ie=l.swipeDirections)!=null?ie:Jx(it)},[l.swipeDirections,it]),Ko=g.invert||O,Ja=st==="loading";Ka.current=q.useMemo(()=>Dn*Le+vt,[Dn,vt]),q.useEffect(()=>{An.current=as},[as]),q.useEffect(()=>{W(!0)},[]),q.useEffect(()=>{const ie=Ot.current;if(ie){const Ve=ie.getBoundingClientRect().height;return Pn(Ve),R(Ke=>[{toastId:g.id,height:Ve,position:g.position},...Ke]),()=>R(Ke=>Ke.filter(Je=>Je.toastId!==g.id))}},[R,g.id]),q.useLayoutEffect(()=>{if(!ce)return;const ie=Ot.current,Ve=ie.style.height;ie.style.height="auto";const Ke=ie.getBoundingClientRect().height;ie.style.height=Ve,Pn(Ke),R(Je=>Je.find(Fe=>Fe.toastId===g.id)?Je.map(Fe=>Fe.toastId===g.id?{...Fe,height:Ke}:Fe):[{toastId:g.id,height:Ke,position:g.position},...Je])},[ce,g.title,g.description,R,g.id,g.jsx,g.action,g.cancel]);const Rt=q.useCallback(()=>{le(!0),gt(Ka.current),R(ie=>ie.filter(Ve=>Ve.toastId!==g.id)),setTimeout(()=>{P(g)},Kx)},[g,P,R,Ka]);q.useEffect(()=>{if(g.promise&&st==="loading"||g.duration===1/0||g.type==="loading")return;let ie;return K||H||ls?(()=>{if(ns.current{g.onAutoClose==null||g.onAutoClose.call(g,g),Rt()},An.current)),()=>clearTimeout(ie)},[K,H,g,st,ls,Rt]),q.useEffect(()=>{g.delete&&(Rt(),g.onDismiss==null||g.onDismiss.call(g,g))},[Rt,g.delete]);function wn(){var ie;if(B?.loading){var Ve;return q.createElement("div",{className:ya(j?.loader,g==null||(Ve=g.classNames)==null?void 0:Ve.loader,"sonner-loader"),"data-visible":st==="loading"},B.loading)}return q.createElement(jx,{className:ya(j?.loader,g==null||(ie=g.classNames)==null?void 0:ie.loader),visible:st==="loading"})}const Ea=g.icon||B?.[st]||zx(st);var _n,Fa;return q.createElement("li",{tabIndex:0,ref:Ot,className:ya(mt,Zo,j?.toast,g==null||(o=g.classNames)==null?void 0:o.toast,j?.[es],g==null||(r=g.classNames)==null?void 0:r[es]),"data-sonner-toast":"","data-rich-colors":(_n=g.richColors)!=null?_n:ee,"data-styled":!(g.jsx||g.unstyled||_),"data-mounted":ce,"data-promise":!!g.promise,"data-swiped":St,"data-removed":te,"data-visible":ti,"data-y-position":pt,"data-x-position":ma,"data-index":G,"data-front":ei,"data-swiping":qe,"data-dismissible":Ze,"data-type":st,"data-invert":Ko,"data-swipe-out":ae,"data-swipe-direction":De,"data-expanded":!!(K||ke&&ce),"data-testid":g.testId,style:{"--index":G,"--toasts-before":G,"--z-index":Z.length-G,"--offset":`${te?Qt:Ka.current}px`,"--initial-height":ke?"auto":`${Il}px`,...fe,...g.style},onDragEnd:()=>{ht(!1),L(null),Zt.current=null},onPointerDown:ie=>{ie.button!==2&&(Ja||!Ze||(Pl.current=new Date,gt(Ka.current),ie.target.setPointerCapture(ie.pointerId),ie.target.tagName!=="BUTTON"&&(ht(!0),Zt.current={x:ie.clientX,y:ie.clientY})))},onPointerUp:()=>{var ie,Ve,Ke;if(ae||!Ze)return;Zt.current=null;const Je=Number(((ie=Ot.current)==null?void 0:ie.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Cn=Number(((Ve=Ot.current)==null?void 0:Ve.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),Fe=new Date().getTime()-((Ke=Pl.current)==null?void 0:Ke.getTime()),bt=se==="x"?Je:Cn,Ut=Math.abs(bt)/Fe;if((se==="x"?Kt.includes(Je>0?"right":"left"):Kt.includes(Cn>0?"bottom":"top"))&&(Math.abs(bt)>=Zx||Ut>.11)){gt(Ka.current),g.onDismiss==null||g.onDismiss.call(g,g),ye(se==="x"?Je>0?"right":"left":Cn>0?"down":"up"),Rt(),Xt(!0);return}else{var Nt,al;(Nt=Ot.current)==null||Nt.style.setProperty("--swipe-amount-x","0px"),(al=Ot.current)==null||al.style.setProperty("--swipe-amount-y","0px")}Et(!1),ht(!1),L(null)},onPointerMove:ie=>{var Ve,Ke,Je;if(!Zt.current||!Ze||((Ve=window.getSelection())==null?void 0:Ve.toString().length)>0)return;const Fe=ie.clientY-Zt.current.y,bt=ie.clientX-Zt.current.x;!se&&(Math.abs(bt)>1||Math.abs(Fe)>1)&&L(Math.abs(bt)>Math.abs(Fe)?"x":"y");let Ut={x:0,y:0};const Mn=Nt=>1/(1.5+Math.abs(Nt)/20);if(se==="y"){if(Kt.includes("top")||Kt.includes("bottom"))if(Kt.includes("top")&&Fe<0||Kt.includes("bottom")&&Fe>0)Ut.y=Fe;else{const Nt=Fe*Mn(Fe);Ut.y=Math.abs(Nt)0)Ut.x=bt;else{const Nt=bt*Mn(bt);Ut.x=Math.abs(Nt)0||Math.abs(Ut.y)>0)&&Et(!0),(Ke=Ot.current)==null||Ke.style.setProperty("--swipe-amount-x",`${Ut.x}px`),(Je=Ot.current)==null||Je.style.setProperty("--swipe-amount-y",`${Ut.y}px`)}},el&&!g.jsx&&st!=="loading"?q.createElement("button",{"aria-label":F,"data-disabled":Ja,"data-close-button":!0,onClick:Ja||!Ze?()=>{}:()=>{Rt(),g.onDismiss==null||g.onDismiss.call(g,g)},className:ya(j?.closeButton,g==null||(u=g.classNames)==null?void 0:u.closeButton)},(Fa=B?.close)!=null?Fa:Cx):null,(st||g.icon||g.promise)&&g.icon!==null&&(B?.[st]!==null||g.icon)?q.createElement("div",{"data-icon":"",className:ya(j?.icon,g==null||(d=g.classNames)==null?void 0:d.icon)},st==="loading"?g.icon||wn():g.promise?wn():null,st!=="loading"?Ea:null):null,q.createElement("div",{"data-content":"",className:ya(j?.content,g==null||(h=g.classNames)==null?void 0:h.content)},q.createElement("div",{"data-title":"",className:ya(j?.title,g==null||(v=g.classNames)==null?void 0:v.title)},g.jsx?g.jsx:typeof g.title=="function"?g.title():g.title),g.description?q.createElement("div",{"data-description":"",className:ya(He,ts,j?.description,g==null||(y=g.classNames)==null?void 0:y.description)},typeof g.description=="function"?g.description():g.description):null),q.isValidElement(g.cancel)?g.cancel:g.cancel&&zo(g.cancel)?q.createElement("button",{"data-button":!0,"data-cancel":!0,style:g.cancelButtonStyle||Y,onClick:ie=>{zo(g.cancel)&&Ze&&(g.cancel.onClick==null||g.cancel.onClick.call(g.cancel,ie),Rt())},className:ya(j?.cancelButton,g==null||(N=g.classNames)==null?void 0:N.cancelButton)},g.cancel.label):null,q.isValidElement(g.action)?g.action:g.action&&zo(g.action)?q.createElement("button",{"data-button":!0,"data-action":!0,style:g.actionButtonStyle||be,onClick:ie=>{zo(g.action)&&(g.action.onClick==null||g.action.onClick.call(g.action,ie),!ie.defaultPrevented&&Rt())},className:ya(j?.actionButton,g==null||(S=g.classNames)==null?void 0:S.actionButton)},g.action.label):null)};function fg(){if(typeof window>"u"||typeof document>"u")return"ltr";const l=document.documentElement.getAttribute("dir");return l==="auto"||!l?window.getComputedStyle(document.documentElement).direction:l}function $x(l,o){const r={};return[l,o].forEach((u,d)=>{const h=d===1,v=h?"--mobile-offset":"--offset",y=h?Vx:Gx;function N(S){["top","right","bottom","left"].forEach(O=>{r[`${v}-${O}`]=typeof S=="number"?`${S}px`:S})}typeof u=="number"||typeof u=="string"?N(u):typeof u=="object"?["top","right","bottom","left"].forEach(S=>{u[S]===void 0?r[`${v}-${S}`]=y:r[`${v}-${S}`]=typeof u[S]=="number"?`${u[S]}px`:u[S]}):N(y)}),r}const Wx=q.forwardRef(function(o,r){const{id:u,invert:d,position:h="bottom-right",hotkey:v=["altKey","KeyT"],expand:y,closeButton:N,className:S,offset:O,mobileOffset:g,theme:_="light",richColors:H,duration:R,style:U,visibleToasts:k=Yx,toastOptions:G,dir:Z=fg(),gap:K=Qx,icons:P,customAriaLabel:ee,containerAriaLabel:oe="Notifications"}=o,[fe,Y]=q.useState([]),be=q.useMemo(()=>u?fe.filter(W=>W.toasterId===u):fe.filter(W=>!W.toasterId),[fe,u]),mt=q.useMemo(()=>Array.from(new Set([h].concat(be.filter(W=>W.position).map(W=>W.position)))),[be,h]),[He,ne]=q.useState([]),[it,Le]=q.useState(!1),[ke,j]=q.useState(!1),[B,F]=q.useState(_!=="system"?_:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),se=q.useRef(null),L=v.join("+").replace(/Key/g,"").replace(/Digit/g,""),De=q.useRef(null),ye=q.useRef(!1),ce=q.useCallback(W=>{Y(te=>{var le;return(le=te.find(qe=>qe.id===W.id))!=null&&le.delete||Ct.dismiss(W.id),te.filter(({id:qe})=>qe!==W.id)})},[]);return q.useEffect(()=>Ct.subscribe(W=>{if(W.dismiss){requestAnimationFrame(()=>{Y(te=>te.map(le=>le.id===W.id?{...le,delete:!0}:le))});return}setTimeout(()=>{Rb.flushSync(()=>{Y(te=>{const le=te.findIndex(qe=>qe.id===W.id);return le!==-1?[...te.slice(0,le),{...te[le],...W},...te.slice(le+1)]:[W,...te]})})})}),[]),q.useEffect(()=>{if(_!=="system"){F(_);return}if(_==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?F("dark"):F("light")),typeof window>"u")return;const W=window.matchMedia("(prefers-color-scheme: dark)");try{W.addEventListener("change",({matches:te})=>{F(te?"dark":"light")})}catch{W.addListener(({matches:le})=>{try{F(le?"dark":"light")}catch(qe){console.error(qe)}})}},[_]),q.useEffect(()=>{fe.length<=1&&Le(!1)},[fe]),q.useEffect(()=>{const W=te=>{var le;if(v.length>0&&v.every(ae=>te[ae]||te.code===ae)){var ht;Le(!0),(ht=se.current)==null||ht.focus()}te.code==="Escape"&&(document.activeElement===se.current||(le=se.current)!=null&&le.contains(document.activeElement))&&Le(!1)};return document.addEventListener("keydown",W),()=>document.removeEventListener("keydown",W)},[v]),q.useEffect(()=>{if(se.current)return()=>{De.current&&(De.current.focus({preventScroll:!0}),De.current=null,ye.current=!1)}},[se.current]),q.createElement("section",{ref:r,"aria-label":ee??`${oe} ${L}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0,"data-react-aria-top-layer":!0},mt.map((W,te)=>{var le;const[qe,ht]=W.split("-");return be.length?q.createElement("ol",{key:W,dir:Z==="auto"?fg():Z,tabIndex:-1,ref:se,className:S,"data-sonner-toaster":!0,"data-sonner-theme":B,"data-y-position":qe,"data-x-position":ht,style:{"--front-toast-height":`${((le=He[0])==null?void 0:le.height)||0}px`,"--width":`${Xx}px`,"--gap":`${K}px`,...U,...$x(O,g)},onBlur:ae=>{ye.current&&!ae.currentTarget.contains(ae.relatedTarget)&&(ye.current=!1,De.current&&(De.current.focus({preventScroll:!0}),De.current=null))},onFocus:ae=>{ae.target instanceof HTMLElement&&ae.target.dataset.dismissible==="false"||ye.current||(ye.current=!0,De.current=ae.relatedTarget)},onMouseEnter:()=>Le(!0),onMouseMove:()=>Le(!0),onMouseLeave:()=>{ke||Le(!1)},onDragEnd:()=>Le(!1),onPointerDown:ae=>{ae.target instanceof HTMLElement&&ae.target.dataset.dismissible==="false"||j(!0)},onPointerUp:()=>j(!1)},be.filter(ae=>!ae.position&&te===0||ae.position===W).map((ae,Xt)=>{var St,Et;return q.createElement(Fx,{key:ae.id,icons:P,index:Xt,toast:ae,defaultRichColors:H,duration:(St=G?.duration)!=null?St:R,className:G?.className,descriptionClassName:G?.descriptionClassName,invert:d,visibleToasts:k,closeButton:(Et=G?.closeButton)!=null?Et:N,interacting:ke,position:W,style:G?.style,unstyled:G?.unstyled,classNames:G?.classNames,cancelButtonStyle:G?.cancelButtonStyle,actionButtonStyle:G?.actionButtonStyle,closeButtonAriaLabel:G?.closeButtonAriaLabel,removeToast:ce,toasts:be.filter(Qt=>Qt.position==ae.position),heights:He.filter(Qt=>Qt.position==ae.position),setHeights:ne,expandByDefault:y,gap:K,expanded:it,swipeDirections:o.swipeDirections})})):null}))}),Ix=Zg("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",xs:"h-7 rounded-md gap-1 px-2.5 text-xs has-[>svg]:px-2",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-7"}},defaultVariants:{variant:"default",size:"default"}});function Va({className:l,variant:o,size:r,asChild:u=!1,...d}){const h=u?Bc:"button";return f.jsx(h,{"data-slot":"button",className:Ae(Ix({variant:o,size:r,className:l})),...d})}var Px=Object.defineProperty,Wl=(l,o)=>Px(l,"name",{value:o,configurable:!0}),fv=!!(typeof window<"u"&&window.document&&window.document.createElement);function Xa(l,o,{checkForDefaultPrevented:r=!0}={}){return Wl(function(d){if(l?.(d),r===!1||!d||!d.defaultPrevented)return o?.(d)},"handleEvent")}Wl(Xa,"composeEventHandlers");function e2(l){if(!fv)throw new Error("Cannot access window outside of the DOM");return l?.ownerDocument?.defaultView??window}Wl(e2,"getOwnerWindow");function Nc(l){if(!fv)throw new Error("Cannot access document outside of the DOM");return l?.ownerDocument??document}Wl(Nc,"getOwnerDocument");function dv(l,o=!1){const{activeElement:r}=Nc(l);if(!r?.nodeName)return null;if(mv(r)&&r.contentDocument)return dv(r.contentDocument.body,o);if(o){const u=r.getAttribute("aria-activedescendant");if(u){const d=Nc(r).getElementById(u);if(d)return d}}return r}Wl(dv,"getActiveElement");function mv(l){return l.tagName==="IFRAME"}Wl(mv,"isFrame");var t2=Object.defineProperty,ia=(l,o)=>t2(l,"name",{value:o,configurable:!0});function a2(l,o){const r=E.createContext(o);r.displayName=l+"Context";const u=ia(h=>{const{children:v,...y}=h,N=E.useMemo(()=>y,Object.values(y));return f.jsx(r.Provider,{value:N,children:v})},"Provider");u.displayName=l+"Provider";function d(h,v={}){const{optional:y=!1}=v,N=E.useContext(r);if(N)return N;if(o!==void 0)return o;if(!y)throw new Error(`\`${h}\` must be used within \`${l}\``)}return ia(d,"useContext"),[u,d]}ia(a2,"createContext");function hv(l,o=[]){let r=[];function u(h,v){const y=E.createContext(v);y.displayName=h+"Context";const N=r.length;r=[...r,v];const S=ia(g=>{const{scope:_,children:H,...R}=g,U=_?.[l]?.[N]||y,k=E.useMemo(()=>R,Object.values(R));return f.jsx(U.Provider,{value:k,children:H})},"Provider");S.displayName=h+"Provider";function O(g,_,H={}){const{optional:R=!1}=H,U=_?.[l]?.[N]||y,k=E.useContext(U);if(k)return k;if(v!==void 0)return v;if(!R)throw new Error(`\`${g}\` must be used within \`${h}\``)}return ia(O,"useContext"),[S,O]}ia(u,"createContext");const d=ia(()=>{const h=r.map(v=>E.createContext(v));return ia(function(y){const N=y?.[l]||h;return E.useMemo(()=>({[`__scope${l}`]:{...y,[l]:N}}),[y,N])},"useScope")},"createScope");return d.scopeName=l,[u,gv(d,...o)]}ia(hv,"createContextScope");function gv(...l){const o=l[0];if(l.length===1)return o;const r=ia(()=>{const u=l.map(d=>({useScope:d(),scopeName:d.scopeName}));return ia(function(h){const v=u.reduce((y,{useScope:N,scopeName:S})=>{const g=N(h)[`__scope${S}`];return{...y,...g}},{});return E.useMemo(()=>({[`__scope${o.scopeName}`]:v}),[v])},"useComposedScopes")},"createScope");return r.scopeName=o.scopeName,r}ia(gv,"composeContextScopes");var zn=globalThis?.document?E.useLayoutEffect:()=>{},n2=Object.defineProperty,l2=(l,o)=>n2(l,"name",{value:o,configurable:!0}),i2=Fi[" useId ".trim().toString()]||(()=>{}),s2=0;function _o(l){const[o,r]=E.useState(i2());return zn(()=>{l||r(u=>u??String(s2++))},[l]),l||(o?`radix-${o}`:"")}l2(_o,"useId");var o2=Object.defineProperty,r2=(l,o)=>o2(l,"name",{value:o,configurable:!0}),dg=Fi[" useEffectEvent ".trim().toString()],mg=Fi[" useInsertionEffect ".trim().toString()];function vv(l){if(typeof dg=="function")return dg(l);const o=E.useRef(()=>{throw new Error("Cannot call an event handler while rendering.")});return typeof mg=="function"?mg(()=>{o.current=l}):zn(()=>{o.current=l}),E.useMemo(()=>((...r)=>o.current?.(...r)),[])}r2(vv,"useEffectEvent");var u2=Object.defineProperty,Pi=(l,o)=>u2(l,"name",{value:o,configurable:!0}),c2=Fi[" useInsertionEffect ".trim().toString()]||zn;function pv({prop:l,defaultProp:o,onChange:r=Pi(()=>{},"onChange"),caller:u}){const[d,h,v]=bv({defaultProp:o,onChange:r}),y=l!==void 0,N=y?l:d,S=E.useCallback(O=>{if(y){const g=yv(O)?O(l):O;g!==l&&v.current?.(g)}else h(O)},[y,l,h,v]);return[N,S]}Pi(pv,"useControllableState");function bv({defaultProp:l,onChange:o}){const[r,u]=E.useState(l),d=E.useRef(r),h=E.useRef(o);return c2(()=>{h.current=o},[o]),E.useEffect(()=>{d.current!==r&&(h.current?.(r),d.current=r)},[r,d]),[r,u,h]}Pi(bv,"useUncontrolledState");function yv(l){return typeof l=="function"}Pi(yv,"isFunction");var hg=Symbol("RADIX:SYNC_STATE");function f2(l,o,r,u){const{prop:d,defaultProp:h,onChange:v,caller:y}=o,N=d!==void 0,S=vv(v),O=[{...r,state:h}];u&&O.push(u);const[g,_]=E.useReducer((k,G)=>{if(G.type===hg)return{...k,state:G.state};const Z=l(k,G);return N&&!Object.is(Z.state,k.state)&&S(Z.state),Z},...O),H=g.state,R=E.useRef(H);E.useEffect(()=>{R.current!==H&&(R.current=H,N||S(H))},[H,R,N]);const U=E.useMemo(()=>d!==void 0?{...g,state:d}:g,[g,d]);return E.useEffect(()=>{N&&!Object.is(d,g.state)&&_({type:hg,state:d})},[d,g.state,N]),[U,_]}Pi(f2,"useControllableStateReducer");var d2=Object.defineProperty,m2=(l,o)=>d2(l,"name",{value:o,configurable:!0}),h2=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Za=h2.reduce((l,o)=>{const r=Ho(`Primitive.${o}`),u=E.forwardRef((d,h)=>{const{asChild:v,...y}=d,N=v?r:o;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),f.jsx(N,{...y,ref:h})});return u.displayName=`Primitive.${o}`,{...l,[o]:u}},{});function xv(l,o){l&&Og.flushSync(()=>l.dispatchEvent(o))}m2(xv,"dispatchDiscreteCustomEvent");var g2=Object.defineProperty,v2=(l,o)=>g2(l,"name",{value:o,configurable:!0});function $l(l){const o=E.useRef(l);return E.useEffect(()=>{o.current=l}),E.useMemo(()=>((...r)=>o.current?.(...r)),[])}v2($l,"useCallbackRef");var p2=Object.defineProperty,lt=(l,o)=>p2(l,"name",{value:o,configurable:!0}),zc="dismissableLayer.update",b2="dismissableLayer.pointerDownOutside",y2="dismissableLayer.focusOutside",gg,Sv=E.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),x2=E.forwardRef(lt(function(o,r){const{disableOutsidePointerEvents:u=!1,deferPointerDownOutside:d=!1,onEscapeKeyDown:h,onPointerDownOutside:v,onFocusOutside:y,onInteractOutside:N,onDismiss:S,...O}=o,g=E.useContext(Sv),[_,H]=E.useState(null),R=_?.ownerDocument??globalThis?.document,[,U]=E.useState({}),k=Wn(r,H),G=Array.from(g.layers),[Z]=[...g.layersWithOutsidePointerEventsDisabled].slice(-1),K=Z?G.indexOf(Z):-1,P=_?G.indexOf(_):-1,ee=g.layersWithOutsidePointerEventsDisabled.size>0,oe=P>=K,fe=E.useRef(!1),Y=Nv(ne=>{v?.(ne),N?.(ne),ne.defaultPrevented||S?.()},{ownerDocument:R,deferPointerDownOutside:d,isDeferredPointerDownOutsideRef:fe,dismissableSurfaces:g.dismissableSurfaces,shouldHandlePointerDownOutside:E.useCallback(ne=>{if(!(ne instanceof Node))return!1;const it=[...g.branches].some(Le=>Le.contains(ne));return oe&&!it},[g.branches,oe])}),be=zv(ne=>{if(d&&fe.current)return;const it=ne.target;[...g.branches].some(ke=>ke.contains(it))||(y?.(ne),N?.(ne),ne.defaultPrevented||S?.())},R),mt=_?P===G.length-1:!1,He=$l(ne=>{ne.key==="Escape"&&(h?.(ne),!ne.defaultPrevented&&S&&(ne.preventDefault(),S()))});return E.useEffect(()=>{if(mt)return R.addEventListener("keydown",He,{capture:!0}),()=>R.removeEventListener("keydown",He,{capture:!0})},[R,mt,He]),E.useEffect(()=>{if(_)return u&&(g.layersWithOutsidePointerEventsDisabled.size===0&&(gg=R.body.style.pointerEvents,R.body.style.pointerEvents="none"),g.layersWithOutsidePointerEventsDisabled.add(_)),g.layers.add(_),Tc(),()=>{u&&(g.layersWithOutsidePointerEventsDisabled.delete(_),g.layersWithOutsidePointerEventsDisabled.size===0&&(R.body.style.pointerEvents=gg))}},[_,R,u,g]),E.useEffect(()=>()=>{_&&(g.layers.delete(_),g.layersWithOutsidePointerEventsDisabled.delete(_),Tc())},[_,g]),E.useEffect(()=>{const ne=lt(()=>U({}),"handleUpdate");return document.addEventListener(zc,ne),()=>document.removeEventListener(zc,ne)},[]),f.jsx(Za.div,{...O,ref:k,style:{pointerEvents:ee?oe?"auto":"none":void 0,...o.style},onFocusCapture:Xa(o.onFocusCapture,be.onFocusCapture),onBlurCapture:Xa(o.onBlurCapture,be.onBlurCapture),onPointerDownCapture:Xa(o.onPointerDownCapture,Y.onPointerDownCapture)})},"DismissableLayer"));function Ev(){const l=E.useContext(Sv),[o,r]=E.useState(null);return E.useEffect(()=>{if(o)return l.dismissableSurfaces.add(o),()=>{l.dismissableSurfaces.delete(o)}},[o,l.dismissableSurfaces]),r}lt(Ev,"useDismissableLayerSurface");var S2=lt(()=>!0,"IS_TRUE");function Nv(l,o){const{ownerDocument:r=globalThis?.document,deferPointerDownOutside:u=!1,isDeferredPointerDownOutsideRef:d,dismissableSurfaces:h,shouldHandlePointerDownOutside:v=S2}=o,y=$l(l),N=E.useRef(!1),S=E.useRef(!1),O=E.useRef(new Map),g=E.useRef(()=>{});return E.useEffect(()=>{function _(){S.current=!1,d.current=!1,O.current.clear()}lt(_,"resetOutsideInteraction");function H(){return Array.from(O.current.values()).some(Boolean)}lt(H,"isOutsideInteractionIntercepted");function R(K){if(!S.current)return;const P=K.target;P instanceof Node&&[...h].some(oe=>oe.contains(P))||O.current.set(K.type,!0),K.type==="click"&&window.setTimeout(()=>{S.current&&g.current()},0)}lt(R,"handleInteractionCapture");function U(K){S.current&&O.current.set(K.type,!1)}lt(U,"handleInteractionBubble");const k=lt(K=>{if(K.target&&!N.current){let P=function(){r.removeEventListener("click",g.current);const oe=H();_(),oe||Yc(b2,y,ee,{discrete:!0})};if(lt(P,"handleAndDispatchPointerDownOutsideEvent"),!v(K.target)){r.removeEventListener("click",g.current),_(),N.current=!1;return}const ee={originalEvent:K};S.current=!0,d.current=u&&K.button===0,O.current.clear(),!u||K.button!==0?P():(r.removeEventListener("click",g.current),g.current=P,r.addEventListener("click",g.current,{once:!0}))}else r.removeEventListener("click",g.current),_();N.current=!1},"handlePointerDown"),G=["pointerup","mousedown","mouseup","touchstart","touchend","click"];for(const K of G)r.addEventListener(K,R,!0),r.addEventListener(K,U);const Z=window.setTimeout(()=>{r.addEventListener("pointerdown",k)},0);return()=>{window.clearTimeout(Z),r.removeEventListener("pointerdown",k),r.removeEventListener("click",g.current);for(const K of G)r.removeEventListener(K,R,!0),r.removeEventListener(K,U)}},[r,y,u,d,h,v]),{onPointerDownCapture:lt(()=>N.current=!0,"onPointerDownCapture")}}lt(Nv,"usePointerDownOutside");function zv(l,o=globalThis?.document){const r=$l(l),u=E.useRef(!1);return E.useEffect(()=>{const d=lt(h=>{h.target&&!u.current&&Yc(y2,r,{originalEvent:h},{discrete:!1})},"handleFocus");return o.addEventListener("focusin",d),()=>o.removeEventListener("focusin",d)},[o,r]),{onFocusCapture:lt(()=>u.current=!0,"onFocusCapture"),onBlurCapture:lt(()=>u.current=!1,"onBlurCapture")}}lt(zv,"useFocusOutside");function Tc(){const l=new CustomEvent(zc);document.dispatchEvent(l)}lt(Tc,"dispatchUpdate");function Yc(l,o,r,{discrete:u}){const d=r.originalEvent.target,h=new CustomEvent(l,{bubbles:!1,cancelable:!0,detail:r});o&&d.addEventListener(l,o,{once:!0}),u?xv(d,h):d.dispatchEvent(h)}lt(Yc,"handleAndDispatchCustomEvent");var E2=Object.defineProperty,xt=(l,o)=>E2(l,"name",{value:o,configurable:!0}),cc="focusScope.autoFocusOnMount",fc="focusScope.autoFocusOnUnmount",vg={bubbles:!1,cancelable:!0},N2=E.forwardRef(xt(function(o,r){const{loop:u=!1,trapped:d=!1,onMountAutoFocus:h,onUnmountAutoFocus:v,...y}=o,[N,S]=E.useState(null),O=$l(h),g=$l(v),_=E.useRef(null),H=Wn(r,S),R=E.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;E.useEffect(()=>{if(d){let k=function(P){if(R.paused||!N)return;const ee=P.target;N.contains(ee)?_.current=ee:Ga(_.current,{select:!0})},G=function(P){if(R.paused||!N)return;const ee=P.relatedTarget;ee!==null&&(N.contains(ee)||Ga(_.current,{select:!0}))},Z=function(P){if(document.activeElement===document.body)for(const oe of P)oe.removedNodes.length>0&&Ga(N)};xt(k,"handleFocusIn"),xt(G,"handleFocusOut"),xt(Z,"handleMutations"),document.addEventListener("focusin",k),document.addEventListener("focusout",G);const K=new MutationObserver(Z);return N&&K.observe(N,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",k),document.removeEventListener("focusout",G),K.disconnect()}}},[d,N,R.paused]),E.useEffect(()=>{if(N){pg.add(R);const k=document.activeElement;if(!N.contains(k)){const Z=new CustomEvent(cc,vg);N.addEventListener(cc,O),N.dispatchEvent(Z),Z.defaultPrevented||(Tv(_v(Gc(N)),{select:!0}),document.activeElement===k&&Ga(N))}return()=>{N.removeEventListener(cc,O),setTimeout(()=>{const Z=new CustomEvent(fc,vg);N.addEventListener(fc,g),N.dispatchEvent(Z),Z.defaultPrevented||Ga(k??document.body,{select:!0}),N.removeEventListener(fc,g),pg.remove(R)},0)}}},[N,O,g,R]);const U=E.useCallback(k=>{if(!u&&!d||R.paused)return;const G=k.key==="Tab"&&!k.altKey&&!k.ctrlKey&&!k.metaKey,Z=document.activeElement;if(G&&Z){const K=k.currentTarget,[P,ee]=jv(K);P&&ee?!k.shiftKey&&Z===ee?(k.preventDefault(),u&&Ga(P,{select:!0})):k.shiftKey&&Z===P&&(k.preventDefault(),u&&Ga(ee,{select:!0})):Z===K&&k.preventDefault()}},[u,d,R.paused]);return f.jsx(Za.div,{tabIndex:-1,...y,ref:H,onKeyDown:U})},"FocusScope"));function Tv(l,{select:o=!1}={}){const r=document.activeElement;for(const u of l)if(Ga(u,{select:o}),document.activeElement!==r)return}xt(Tv,"focusFirst");function jv(l){const o=Gc(l),r=jc(o,l),u=jc(o.reverse(),l);return[r,u]}xt(jv,"getTabbableEdges");function Gc(l){const o=[],r=document.createTreeWalker(l,NodeFilter.SHOW_ELEMENT,{acceptNode:xt(u=>{const d=u.tagName==="INPUT"&&u.type==="hidden";return u.disabled||u.hidden||d?NodeFilter.FILTER_SKIP:u.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP},"acceptNode")});for(;r.nextNode();)o.push(r.currentNode);return o}xt(Gc,"getTabbableCandidates");function jc(l,o){const r=typeof o.checkVisibility=="function"&&o.checkVisibility({checkVisibilityCSS:!0});for(const u of l)if(!(r?!u.checkVisibility({checkVisibilityCSS:!0}):Av(u,{upTo:o})))return u}xt(jc,"findVisible");function Av(l,{upTo:o}){if(getComputedStyle(l).visibility==="hidden")return!0;for(;l;){if(o!==void 0&&l===o)return!1;if(getComputedStyle(l).display==="none")return!0;l=l.parentElement}return!1}xt(Av,"isHidden");function Dv(l){return l instanceof HTMLInputElement&&"select"in l}xt(Dv,"isSelectableInput");function Ga(l,{select:o=!1}={}){if(l&&l.focus){const r=document.activeElement;l.focus({preventScroll:!0}),l!==r&&Dv(l)&&o&&l.select()}}xt(Ga,"focus");var pg=wv();function wv(){let l=[];return{add(o){const r=l[0];o!==r&&r?.pause(),l=Ac(l,o),l.unshift(o)},remove(o){l=Ac(l,o),l[0]?.resume()}}}xt(wv,"createFocusScopesStack");function Ac(l,o){const r=[...l],u=r.indexOf(o);return u!==-1&&r.splice(u,1),r}xt(Ac,"arrayRemove");function _v(l){return l.filter(o=>o.tagName!=="A")}xt(_v,"removeLinks");var z2=Object.defineProperty,T2=(l,o)=>z2(l,"name",{value:o,configurable:!0}),j2=E.forwardRef(T2(function(o,r){const{container:u,...d}=o,[h,v]=E.useState(!1);zn(()=>v(!0),[]);const y=u||h&&globalThis?.document?.body;return y?Og.createPortal(f.jsx(Za.div,{...d,ref:r}),y):null},"Portal")),A2=Object.defineProperty,Qa=(l,o)=>A2(l,"name",{value:o,configurable:!0});function Cv(l,o){return E.useReducer((r,u)=>o[r][u]??r,l)}Qa(Cv,"useStateMachine");var Vc=Qa(l=>{const{present:o,children:r}=l,u=Mv(o),d=typeof r=="function"?r({present:u.isPresent}):E.Children.only(r),h=Ov(u.ref,Rv(d));return typeof r=="function"||u.isPresent?E.cloneElement(d,{ref:h}):null},"Presence");function Mv(l){const[o,r]=E.useState(),u=E.useRef(null),d=E.useRef(l),h=E.useRef("none"),v=E.useRef(void 0),y=l?"mounted":"unmounted",[N,S]=Cv(y,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return E.useEffect(()=>{N==="mounted"?(h.current=v.current??Kl(u.current),v.current=void 0):h.current="none"},[N]),zn(()=>{const O=u.current,g=d.current;if(g!==l){const H=h.current,R=Kl(O);l?(v.current=R,S("MOUNT")):R==="none"||O?.display==="none"?S("UNMOUNT"):S(g&&H!==R?"ANIMATION_OUT":"UNMOUNT"),d.current=l}},[l,S]),zn(()=>{if(o){let O;const g=o.ownerDocument.defaultView??window,_=Qa(R=>{const k=Kl(u.current).includes(CSS.escape(R.animationName));if(R.target===o&&k&&(S("ANIMATION_END"),!d.current)){const G=o.style.animationFillMode;o.style.animationFillMode="forwards",O=g.setTimeout(()=>{o.style.animationFillMode==="forwards"&&(o.style.animationFillMode=G)})}},"handleAnimationEnd"),H=Qa(R=>{R.target===o&&(h.current=Kl(u.current))},"handleAnimationStart");return o.addEventListener("animationstart",H),o.addEventListener("animationcancel",_),o.addEventListener("animationend",_),()=>{g.clearTimeout(O),o.removeEventListener("animationstart",H),o.removeEventListener("animationcancel",_),o.removeEventListener("animationend",_)}}else S("ANIMATION_END")},[o,S]),{isPresent:["mounted","unmountSuspended"].includes(N),ref:E.useCallback(O=>{if(O){const g=getComputedStyle(O);u.current=g,v.current=Kl(g)}else u.current=null;r(O)},[])}}Qa(Mv,"usePresence");function Dc(l,o){if(typeof l=="function")return l(o);l!=null&&(l.current=o)}Qa(Dc,"setRef");function Ov(...l){const o=E.useRef(l);return o.current=l,E.useCallback(r=>{const u=o.current;let d=!1;const h=u.map(v=>{const y=Dc(v,r);return!d&&typeof y=="function"&&(d=!0),y});if(d)return()=>{for(let v=0;vD2(l,"name",{value:o,configurable:!0}),To=0,Yl=null;function w2(l){return Qc(),l.children}Xc(w2,"FocusGuards");function Qc(){E.useEffect(()=>{Yl||(Yl={start:wc(),end:wc()});const{start:l,end:o}=Yl;return document.body.firstElementChild!==l&&document.body.insertAdjacentElement("afterbegin",l),document.body.lastElementChild!==o&&document.body.insertAdjacentElement("beforeend",o),To++,()=>{To===1&&(Yl?.start.remove(),Yl?.end.remove(),Yl=null),To=Math.max(0,To-1)}},[])}Xc(Qc,"useFocusGuards");function wc(){const l=document.createElement("span");return l.setAttribute("data-radix-focus-guard",""),l.tabIndex=0,l.style.outline="none",l.style.opacity="0",l.style.position="fixed",l.style.pointerEvents="none",l}Xc(wc,"createFocusGuard");var Sa=function(){return Sa=Object.assign||function(o){for(var r,u=1,d=arguments.length;u"u")return Z2;var o=K2(l),r=document.documentElement.clientWidth,u=window.innerWidth;return{left:o[0],top:o[1],right:o[2],gap:Math.max(0,u-r+o[2]-o[0])}},F2=Hv(),Fl="data-scroll-locked",$2=function(l,o,r,u){var d=l.left,h=l.top,v=l.right,y=l.gap;return r===void 0&&(r="margin"),` + .`.concat(C2,` { + overflow: hidden `).concat(u,`; + padding-right: `).concat(y,"px ").concat(u,`; + } + body[`).concat(Fl,`] { + overflow: hidden `).concat(u,`; + overscroll-behavior: contain; + `).concat([o&&"position: relative ".concat(u,";"),r==="margin"&&` + padding-left: `.concat(d,`px; + padding-top: `).concat(h,`px; + padding-right: `).concat(v,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(y,"px ").concat(u,`; + `),r==="padding"&&"padding-right: ".concat(y,"px ").concat(u,";")].filter(Boolean).join(""),` + } + + .`).concat(Co,` { + right: `).concat(y,"px ").concat(u,`; + } + + .`).concat(Mo,` { + margin-right: `).concat(y,"px ").concat(u,`; + } + + .`).concat(Co," .").concat(Co,` { + right: 0 `).concat(u,`; + } + + .`).concat(Mo," .").concat(Mo,` { + margin-right: 0 `).concat(u,`; + } + + body[`).concat(Fl,`] { + `).concat(M2,": ").concat(y,`px; + } +`)},yg=function(){var l=parseInt(document.body.getAttribute(Fl)||"0",10);return isFinite(l)?l:0},W2=function(){E.useEffect(function(){return document.body.setAttribute(Fl,(yg()+1).toString()),function(){var l=yg()-1;l<=0?document.body.removeAttribute(Fl):document.body.setAttribute(Fl,l.toString())}},[])},I2=function(l){var o=l.noRelative,r=l.noImportant,u=l.gapMode,d=u===void 0?"margin":u;W2();var h=E.useMemo(function(){return J2(d)},[d]);return E.createElement(F2,{styles:$2(h,!o,d,r?"":"!important")})},_c=!1;if(typeof window<"u")try{var jo=Object.defineProperty({},"passive",{get:function(){return _c=!0,!0}});window.addEventListener("test",jo,jo),window.removeEventListener("test",jo,jo)}catch{_c=!1}var Gl=_c?{passive:!1}:!1,P2=function(l){return l.tagName==="TEXTAREA"},Lv=function(l,o){if(!(l instanceof Element))return!1;var r=window.getComputedStyle(l);return r[o]!=="hidden"&&!(r.overflowY===r.overflowX&&!P2(l)&&r[o]==="visible")},eS=function(l){return Lv(l,"overflowY")},tS=function(l){return Lv(l,"overflowX")},xg=function(l,o){var r=o.ownerDocument,u=o;do{typeof ShadowRoot<"u"&&u instanceof ShadowRoot&&(u=u.host);var d=qv(l,u);if(d){var h=Yv(l,u),v=h[1],y=h[2];if(v>y)return!0}u=u.parentNode}while(u&&u!==r.body);return!1},aS=function(l){var o=l.scrollTop,r=l.scrollHeight,u=l.clientHeight;return[o,r,u]},nS=function(l){var o=l.scrollLeft,r=l.scrollWidth,u=l.clientWidth;return[o,r,u]},qv=function(l,o){return l==="v"?eS(o):tS(o)},Yv=function(l,o){return l==="v"?aS(o):nS(o)},lS=function(l,o){return l==="h"&&o==="rtl"?-1:1},iS=function(l,o,r,u,d){var h=lS(l,window.getComputedStyle(o).direction),v=h*u,y=r.target,N=o.contains(y),S=!1,O=v>0,g=0,_=0;do{if(!y)break;var H=Yv(l,y),R=H[0],U=H[1],k=H[2],G=U-k-h*R;(R||G)&&qv(l,y)&&(g+=G,_+=R);var Z=y.parentNode;y=Z&&Z.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Z.host:Z}while(!N&&y!==document.body||N&&(o.contains(y)||o===y));return(O&&Math.abs(g)<1||!O&&Math.abs(_)<1)&&(S=!0),S},Ao=function(l){return"changedTouches"in l?[l.changedTouches[0].clientX,l.changedTouches[0].clientY]:[0,0]},Sg=function(l){return[l.deltaX,l.deltaY]},Eg=function(l){return l&&"current"in l?l.current:l},sS=function(l,o){return l[0]===o[0]&&l[1]===o[1]},oS=function(l){return` + .block-interactivity-`.concat(l,` {pointer-events: none;} + .allow-interactivity-`).concat(l,` {pointer-events: all;} +`)},rS=0,Vl=[];function uS(l){var o=E.useRef([]),r=E.useRef([0,0]),u=E.useRef(),d=E.useState(rS++)[0],h=E.useState(Hv)[0],v=E.useRef(l);E.useEffect(function(){v.current=l},[l]),E.useEffect(function(){if(l.inert){document.body.classList.add("block-interactivity-".concat(d));var U=_2([l.lockRef.current],(l.shards||[]).map(Eg),!0).filter(Boolean);return U.forEach(function(k){return k.classList.add("allow-interactivity-".concat(d))}),function(){document.body.classList.remove("block-interactivity-".concat(d)),U.forEach(function(k){return k.classList.remove("allow-interactivity-".concat(d))})}}},[l.inert,l.lockRef.current,l.shards]);var y=E.useCallback(function(U,k){if("touches"in U&&U.touches.length===2||U.type==="wheel"&&U.ctrlKey)return!v.current.allowPinchZoom;var G=Ao(U),Z=r.current,K="deltaX"in U?U.deltaX:Z[0]-G[0],P="deltaY"in U?U.deltaY:Z[1]-G[1],ee,oe=U.target,fe=Math.abs(K)>Math.abs(P)?"h":"v";if("touches"in U&&fe==="h"&&oe.type==="range")return!1;var Y=window.getSelection(),be=Y&&Y.anchorNode,mt=be?be===oe||be.contains(oe):!1;if(mt)return!1;var He=xg(fe,oe);if(!He)return!0;if(He?ee=fe:(ee=fe==="v"?"h":"v",He=xg(fe,oe)),!He)return!1;if(!u.current&&"changedTouches"in U&&(K||P)&&(u.current=ee),!ee)return!0;var ne=u.current||ee;return iS(ne,k,U,ne==="h"?K:P)},[]),N=E.useCallback(function(U){var k=U;if(!(!Vl.length||Vl[Vl.length-1]!==h)){var G="deltaY"in k?Sg(k):Ao(k),Z=o.current.filter(function(ee){return ee.name===k.type&&(ee.target===k.target||k.target===ee.shadowParent)&&sS(ee.delta,G)})[0];if(Z&&Z.should){k.cancelable&&k.preventDefault();return}if(!Z){var K=(v.current.shards||[]).map(Eg).filter(Boolean).filter(function(ee){return ee.contains(k.target)}),P=K.length>0?y(k,K[0]):!v.current.noIsolation;P&&k.cancelable&&k.preventDefault()}}},[]),S=E.useCallback(function(U,k,G,Z){var K={name:U,delta:k,target:G,should:Z,shadowParent:cS(G)};o.current.push(K),setTimeout(function(){o.current=o.current.filter(function(P){return P!==K})},1)},[]),O=E.useCallback(function(U){r.current=Ao(U),u.current=void 0},[]),g=E.useCallback(function(U){S(U.type,Sg(U),U.target,y(U,l.lockRef.current))},[]),_=E.useCallback(function(U){S(U.type,Ao(U),U.target,y(U,l.lockRef.current))},[]);E.useEffect(function(){return Vl.push(h),l.setCallbacks({onScrollCapture:g,onWheelCapture:g,onTouchMoveCapture:_}),document.addEventListener("wheel",N,Gl),document.addEventListener("touchmove",N,Gl),document.addEventListener("touchstart",O,Gl),function(){Vl=Vl.filter(function(U){return U!==h}),document.removeEventListener("wheel",N,Gl),document.removeEventListener("touchmove",N,Gl),document.removeEventListener("touchstart",O,Gl)}},[]);var H=l.removeScrollBar,R=l.inert;return E.createElement(E.Fragment,null,R?E.createElement(h,{styles:oS(d)}):null,H?E.createElement(I2,{noRelative:l.noRelative,gapMode:l.gapMode}):null)}function cS(l){for(var o=null;l!==null;)l instanceof ShadowRoot&&(o=l.host,l=l.host),l=l.parentNode;return o}const fS=L2(Bv,uS);var Gv=E.forwardRef(function(l,o){return E.createElement(Vo,Sa({},l,{ref:o,sideCar:fS}))});Gv.classNames=Vo.classNames;var dS=function(l){if(typeof document>"u")return null;var o=Array.isArray(l)?l[0]:l;return o.ownerDocument.body},Xl=new WeakMap,Do=new WeakMap,wo={},gc=0,Vv=function(l){return l&&(l.host||Vv(l.parentNode))},mS=function(l,o){return o.map(function(r){if(l.contains(r))return r;var u=Vv(r);return u&&l.contains(u)?u:(console.error("aria-hidden",r,"in not contained inside",l,". Doing nothing"),null)}).filter(function(r){return!!r})},hS=function(l,o,r,u){var d=mS(o,Array.isArray(l)?l:[l]);wo[r]||(wo[r]=new WeakMap);var h=wo[r],v=[],y=new Set,N=new Set(d),S=function(g){!g||y.has(g)||(y.add(g),S(g.parentNode))};d.forEach(S);var O=function(g){!g||N.has(g)||Array.prototype.forEach.call(g.children,function(_){if(y.has(_))O(_);else try{var H=_.getAttribute(u),R=H!==null&&H!=="false",U=(Xl.get(_)||0)+1,k=(h.get(_)||0)+1;Xl.set(_,U),h.set(_,k),v.push(_),U===1&&R&&Do.set(_,!0),k===1&&_.setAttribute(r,"true"),R||_.setAttribute(u,"true")}catch(G){console.error("aria-hidden: cannot operate on ",_,G)}})};return O(o),y.clear(),gc++,function(){v.forEach(function(g){var _=Xl.get(g)-1,H=h.get(g)-1;Xl.set(g,_),h.set(g,H),_||(Do.has(g)||g.removeAttribute(u),Do.delete(g)),H||g.removeAttribute(r)}),gc--,gc||(Xl=new WeakMap,Xl=new WeakMap,Do=new WeakMap,wo={})}},gS=function(l,o,r){r===void 0&&(r="data-aria-hidden");var u=Array.from(Array.isArray(l)?l:[l]),d=dS(l);return d?(u.push.apply(u,Array.from(d.querySelectorAll("[aria-live], script"))),hS(u,d,r,"aria-hidden")):function(){return null}},vS=Object.defineProperty,Vt=(l,o)=>vS(l,"name",{value:o,configurable:!0}),Zc="Dialog",[Xv,fE]=hv(Zc),[pS,da]=Xv(Zc),bS=Vt(l=>{const{__scopeDialog:o,children:r,open:u,defaultOpen:d,onOpenChange:h,modal:v=!0}=l,y=E.useRef(null),N=E.useRef(null),[S,O]=pv({prop:u,defaultProp:d??!1,onChange:h,caller:Zc}),[g,_]=E.useState(0),[H,R]=E.useState(0);return f.jsx(pS,{scope:o,triggerRef:y,contentRef:N,contentId:_o(),titleId:_o(),descriptionId:_o(),titlePresent:g>0,descriptionPresent:H>0,setTitleCount:_,setDescriptionCount:R,open:S,onOpenChange:O,onOpenToggle:E.useCallback(()=>O(U=>!U),[O]),modal:v,children:r})},"Dialog"),yS="DialogTrigger",xS=E.forwardRef(Vt(function(o,r){const{__scopeDialog:u,...d}=o,h=da(yS,u),v=Wn(r,h.triggerRef);return f.jsx(Za.button,{type:"button","aria-haspopup":"dialog","aria-expanded":h.open,"aria-controls":h.open?h.contentId:void 0,"data-state":Xo(h.open),...d,ref:v,onClick:Xa(o.onClick,h.onOpenToggle)})},"DialogTrigger")),Qv="DialogPortal",[SS,Zv]=Xv(Qv,{forceMount:void 0}),ES=Vt(l=>{const{__scopeDialog:o,forceMount:r,children:u,container:d}=l,h=da(Qv,o);return f.jsx(SS,{scope:o,forceMount:r,children:E.Children.map(u,v=>f.jsx(Vc,{present:r||h.open,children:f.jsx(j2,{asChild:!0,container:d,children:v})}))})},"DialogPortal"),Cc="DialogOverlay",NS=E.forwardRef(Vt(function(o,r){const u=Zv(Cc,o.__scopeDialog),{forceMount:d=u.forceMount,...h}=o,v=da(Cc,o.__scopeDialog);return v.modal?f.jsx(Vc,{present:d||v.open,children:f.jsx(TS,{...h,ref:r})}):null},"DialogOverlay")),zS=Ho("DialogOverlay.RemoveScroll"),TS=E.forwardRef(Vt(function(o,r){const{__scopeDialog:u,...d}=o,h=da(Cc,u),v=Ev(),y=Wn(r,v);return f.jsx(Gv,{as:zS,allowPinchZoom:!0,shards:[h.contentRef],children:f.jsx(Za.div,{"data-state":Xo(h.open),...d,ref:y,style:{pointerEvents:"auto",...d.style}})})},"DialogOverlayImpl")),Ji="DialogContent",jS=E.forwardRef(Vt(function(o,r){const u=Zv(Ji,o.__scopeDialog),{forceMount:d=u.forceMount,...h}=o,v=da(Ji,o.__scopeDialog);return f.jsx(Vc,{present:d||v.open,children:v.modal?f.jsx(AS,{...h,ref:r}):f.jsx(DS,{...h,ref:r})})},"DialogContent")),AS=E.forwardRef(Vt(function(o,r){const u=da(Ji,o.__scopeDialog),d=E.useRef(null),h=Wn(r,u.contentRef,d);return E.useEffect(()=>{const v=d.current;if(v)return gS(v)},[]),f.jsx(Kv,{...o,ref:h,trapFocus:u.open,disableOutsidePointerEvents:u.open,onCloseAutoFocus:Xa(o.onCloseAutoFocus,v=>{v.preventDefault(),u.triggerRef.current?.focus()}),onPointerDownOutside:Xa(o.onPointerDownOutside,v=>{const y=v.detail.originalEvent,N=y.button===0&&y.ctrlKey===!0;(y.button===2||N)&&v.preventDefault()}),onFocusOutside:Xa(o.onFocusOutside,v=>v.preventDefault())})},"DialogContentModal")),DS=E.forwardRef(Vt(function(o,r){const u=da(Ji,o.__scopeDialog),d=E.useRef(!1),h=E.useRef(!1);return f.jsx(Kv,{...o,ref:r,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:v=>{o.onCloseAutoFocus?.(v),v.defaultPrevented||(d.current||u.triggerRef.current?.focus(),v.preventDefault()),d.current=!1,h.current=!1},onInteractOutside:v=>{o.onInteractOutside?.(v),v.defaultPrevented||(d.current=!0,v.detail.originalEvent.type==="pointerdown"&&(h.current=!0));const y=v.target;u.triggerRef.current?.contains(y)&&v.preventDefault(),v.detail.originalEvent.type==="focusin"&&h.current&&v.preventDefault()}})},"DialogContentNonModal")),Kv=E.forwardRef(Vt(function(o,r){const{__scopeDialog:u,trapFocus:d,onOpenAutoFocus:h,onCloseAutoFocus:v,...y}=o,N=da(Ji,u);return Qc(),f.jsx(f.Fragment,{children:f.jsx(N2,{asChild:!0,loop:!0,trapped:d,onMountAutoFocus:h,onUnmountAutoFocus:v,children:f.jsx(x2,{role:"dialog",id:N.contentId,"aria-describedby":N.descriptionPresent?N.descriptionId:void 0,"aria-labelledby":N.titlePresent?N.titleId:void 0,"data-state":Xo(N.open),...y,ref:r,deferPointerDownOutside:!0,onDismiss:()=>N.onOpenChange(!1)})})})},"DialogContentImpl")),wS="DialogTitle",_S=E.forwardRef(Vt(function(o,r){const{__scopeDialog:u,...d}=o,h=da(wS,u),{setTitleCount:v}=h;return zn(()=>(v(y=>y+1),()=>v(y=>y-1)),[v]),f.jsx(Za.h2,{id:h.titleId,...d,ref:r})},"DialogTitle")),CS="DialogDescription",MS=E.forwardRef(Vt(function(o,r){const{__scopeDialog:u,...d}=o,h=da(CS,u),{setDescriptionCount:v}=h;return zn(()=>(v(y=>y+1),()=>v(y=>y-1)),[v]),f.jsx(Za.p,{id:h.descriptionId,...d,ref:r})},"DialogDescription")),OS="DialogClose",RS=E.forwardRef(Vt(function(o,r){const{__scopeDialog:u,...d}=o,h=da(OS,u);return f.jsx(Za.button,{type:"button",...d,ref:r,onClick:Xa(o.onClick,()=>h.onOpenChange(!1))})},"DialogClose"));function Xo(l){return l?"open":"closed"}Vt(Xo,"getState");const Kc=bS,Jv=xS;function US({className:l,...o}){return f.jsx(NS,{"data-slot":"dialog-overlay",className:Ae("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",l),...o})}function Jc({className:l,children:o,...r}){return f.jsxs(ES,{children:[f.jsx(US,{}),f.jsxs(jS,{"data-slot":"dialog-content",className:Ae("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-md",l),...r,children:[o,f.jsxs(RS,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none cursor-pointer",children:[f.jsx(wy,{className:"size-4"}),f.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function Fc({className:l,...o}){return f.jsx("div",{"data-slot":"dialog-header",className:Ae("flex flex-col gap-1.5 text-left",l),...o})}function Fv({className:l,...o}){return f.jsx("div",{"data-slot":"dialog-footer",className:Ae("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",l),...o})}function $c({className:l,...o}){return f.jsx(_S,{"data-slot":"dialog-title",className:Ae("text-lg leading-none font-semibold",l),...o})}function Wc({className:l,...o}){return f.jsx(MS,{"data-slot":"dialog-description",className:Ae("text-muted-foreground text-sm",l),...o})}var kS=Object.defineProperty,BS=(l,o)=>kS(l,"name",{value:o,configurable:!0}),HS=E.forwardRef(BS(function(o,r){return f.jsx(Za.label,{...o,ref:r,onMouseDown:u=>{u.target.closest("button, input, select, textarea")||(o.onMouseDown?.(u),!u.defaultPrevented&&u.detail>1&&u.preventDefault())}})},"Label")),LS=HS;function qS({className:l,...o}){return f.jsx(LS,{"data-slot":"label",className:Ae("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",l),...o})}const YS=zb,$v=E.createContext({});function GS({...l}){return f.jsx($v.Provider,{value:{name:l.name},children:f.jsx(Tb,{...l})})}function Qo(){const l=E.useContext($v),o=E.useContext(Wv),{getFieldState:r}=jb(),u=Ab({name:l.name}),d=r(l.name,u);if(!l)throw new Error("useFormField should be used within ");const{id:h}=o;return{id:h,name:l.name,formItemId:`${h}-form-item`,formDescriptionId:`${h}-form-item-description`,formMessageId:`${h}-form-item-message`,...d}}const Wv=E.createContext({});function VS({className:l,...o}){const r=E.useId();return f.jsx(Wv.Provider,{value:{id:r},children:f.jsx("div",{"data-slot":"form-item",className:Ae("grid gap-2",l),...o})})}function XS({className:l,...o}){const{error:r,formItemId:u}=Qo();return f.jsx(qS,{"data-slot":"form-label","data-error":!!r,className:Ae("data-[error=true]:text-destructive",l),htmlFor:u,...o})}function QS({...l}){const{error:o,formItemId:r,formDescriptionId:u,formMessageId:d}=Qo();return f.jsx(Bc,{"data-slot":"form-control",id:r,"aria-describedby":o?`${u} ${d}`:u,"aria-invalid":!!o,...l})}function ZS({className:l,...o}){const{formDescriptionId:r}=Qo();return f.jsx("p",{"data-slot":"form-description",id:r,className:Ae("text-muted-foreground text-xs",l),...o})}function KS({className:l,...o}){const{error:r,formMessageId:u}=Qo(),d=r?String(r?.message??""):o.children;return d?f.jsx("p",{"data-slot":"form-message",id:u,className:Ae("text-destructive text-xs font-medium",l),...o,children:d}):null}const JS={done:{label:"done",variant:"success"},running:{label:"running",variant:"default"},pending:{label:"pending",variant:"secondary"},skipped:{label:"skipped",variant:"warning"},failed:{label:"failed",variant:"destructive"}},FS=[{id:"table",accessorFn:l=>`${l.schema}.${l.table}`,header:"Table",sortFn:"text",cell:({getValue:l})=>f.jsx("span",{className:"font-medium",children:l()})},{accessorKey:"state",header:"State",sortFn:"text",cell:({getValue:l})=>{const o=JS[l()];return f.jsxs(sa,{variant:o.variant,children:[o.label==="running"&&f.jsx(Bo,{className:"size-3 animate-spin"}),o.label]})}},{accessorKey:"rows_copied",header:()=>f.jsx("span",{className:"block text-right",children:"Rows copied"}),sortFn:"basic",cell:({getValue:l})=>f.jsx("span",{className:"block text-right tabular-nums",children:dt(l())})},{accessorKey:"completed_at",header:"Completed",enableSorting:!1,cell:({row:l})=>f.jsx("span",{className:"text-muted-foreground",children:l.original.state==="done"?Lo(l.original.completed_at):"–"})},{accessorKey:"error",header:"Note",enableSorting:!1,cell:({getValue:l})=>{const o=l();return o?f.jsx("span",{className:"text-destructive text-xs",children:o}):null}}],$S=Mt({table:me().trim().refine(l=>l===""||/^([A-Za-z_][A-Za-z0-9_$]*\.)?[A-Za-z_][A-Za-z0-9_$]*$/.test(l),{message:"Use schema.table (e.g. public.orders) or leave empty for all tables"})});function WS(){const[l,o]=E.useState(!1),r=Mc(),u=Db({resolver:Ex($S),defaultValues:{table:""}}),d=Oo({mutationFn:h=>$1(h.table||void 0),onSuccess:(h,v)=>{Nn.success(v.table?`Backfill enqueued for ${v.table}`:"Backfill enqueued for all tables"),r.invalidateQueries({queryKey:["stats"]}),o(!1),u.reset()},onError:h=>Nn.error(h.message)});return f.jsxs(Kc,{open:l,onOpenChange:o,children:[f.jsx(Jv,{asChild:!0,children:f.jsxs(Va,{size:"sm",children:[f.jsx(Oc,{className:"size-4"}),"Sync tables"]})}),f.jsxs(Jc,{children:[f.jsxs(Fc,{children:[f.jsx($c,{children:"Trigger a backfill"}),f.jsx(Wc,{children:"Re-sync existing rows into the sinks. Runs concurrently with live streaming — no locks, no downtime."})]}),f.jsx(YS,{...u,children:f.jsxs("form",{onSubmit:u.handleSubmit(h=>d.mutate(h)),className:"space-y-4",children:[f.jsx(GS,{control:u.control,name:"table",render:({field:h})=>f.jsxs(VS,{children:[f.jsx(XS,{children:"Table"}),f.jsx(QS,{children:f.jsx(Go,{placeholder:"public.orders",autoComplete:"off",...h})}),f.jsx(ZS,{children:"Leave empty to backfill every published table."}),f.jsx(KS,{})]})}),f.jsxs(Fv,{children:[f.jsx(Va,{type:"button",variant:"outline",onClick:()=>o(!1),children:"Cancel"}),f.jsxs(Va,{type:"submit",disabled:d.isPending,children:[d.isPending&&f.jsx(Bo,{className:"size-4 animate-spin"}),"Start backfill"]})]})]})})]})]})}function IS({stats:l}){const o=E.useMemo(()=>l?.backfill??[],[l]),r=$i({features:Ii,columns:FS,data:o,initialState:{sorting:[{id:"table",desc:!1}]}});return f.jsxs("div",{className:"space-y-4",children:[f.jsxs("div",{className:"flex items-center justify-between",children:[f.jsx("p",{className:"text-muted-foreground max-w-xl text-sm",children:"Watermark-based chunked sync of existing data, interleaved with the live stream. Progress survives restarts."}),f.jsx(WS,{})]}),f.jsx(ca,{className:"py-0",children:f.jsx(xa,{className:"px-0",children:f.jsx(Wi,{table:r,empty:f.jsxs("div",{className:"text-muted-foreground flex flex-col items-center gap-1 text-sm",children:[f.jsx(Oc,{className:"size-5"}),"No backfills have run. New deployments backfill automatically when the replication slot is first created."]})})})})]})}const PS={INSERT:"success",UPDATE:"secondary",DELETE:"destructive",READ:"outline"},Iv=E.createContext(()=>{});function eE({entry:l}){const o=E.useContext(Iv),r=Mc(),u=()=>{r.invalidateQueries({queryKey:["dlq"]}),r.invalidateQueries({queryKey:["stats"]})},d=Oo({mutationFn:()=>K1(l.id),onSuccess:()=>{Nn.success(`Retried ${l.id} successfully`),u()},onError:v=>{Nn.error(v.message),u()}}),h=Oo({mutationFn:()=>F1(l.id),onSuccess:()=>{Nn.success(`Discarded ${l.id}`),u()},onError:v=>Nn.error(v.message)});return f.jsxs("div",{className:"flex justify-end gap-1.5",children:[f.jsx(Va,{size:"xs",variant:"ghost",onClick:()=>o(l),title:"Inspect the parked event payload",children:f.jsx(sy,{className:"size-3"})}),f.jsxs(Va,{size:"xs",variant:"outline",disabled:d.isPending,onClick:()=>d.mutate(),title:"Re-deliver this event to its sink",children:[d.isPending?f.jsx(Bo,{className:"size-3 animate-spin"}):f.jsx(Bg,{className:"size-3"}),"Retry"]}),f.jsx(Va,{size:"xs",variant:"ghost",className:"text-destructive hover:text-destructive",disabled:h.isPending,onClick:()=>h.mutate(),title:"Drop this event permanently",children:f.jsx(jy,{className:"size-3"})})]})}const tE=[{accessorKey:"sink",header:"Sink",sortFn:"text",cell:({getValue:l})=>f.jsx(sa,{variant:"outline",children:l()})},{id:"target",accessorFn:l=>`${l.schema}.${l.table}`,header:"Table",sortFn:"text",cell:({row:l,getValue:o})=>f.jsxs("span",{className:"flex items-center gap-2",children:[f.jsx("span",{className:"font-medium",children:o()}),f.jsx(sa,{variant:PS[l.original.operation]??"secondary",className:"text-[10px]",children:l.original.operation})]})},{accessorKey:"error",header:"Error",enableSorting:!1,cell:({getValue:l})=>f.jsx("span",{className:"text-destructive block max-w-md truncate text-xs whitespace-normal sm:whitespace-nowrap",title:l(),children:l()})},{accessorKey:"attempts",header:()=>f.jsx("span",{className:"block text-right",children:"Attempts"}),sortFn:"basic",cell:({getValue:l})=>f.jsx("span",{className:"block text-right tabular-nums",children:l()})},{accessorKey:"last_failed_at",header:"Last failed",sortFn:"datetime",cell:({getValue:l})=>f.jsx("span",{className:"text-muted-foreground",children:Lo(l())})},{id:"actions",header:()=>f.jsx("span",{className:"block text-right",children:"Actions"}),enableSorting:!1,cell:({row:l})=>f.jsx(eE,{entry:l.original})}];function aE({count:l}){const[o,r]=E.useState(!1),u=Mc(),d=Oo({mutationFn:J1,onSuccess:h=>{Nn.success(`Retried ${h.retried??0}: ${h.succeeded??0} succeeded, ${h.failed??0} failed`),u.invalidateQueries({queryKey:["dlq"]}),u.invalidateQueries({queryKey:["stats"]}),r(!1)},onError:h=>Nn.error(h.message)});return f.jsxs(Kc,{open:o,onOpenChange:r,children:[f.jsx(Jv,{asChild:!0,children:f.jsxs(Va,{size:"sm",disabled:l===0,children:[f.jsx(Bg,{className:"size-4"}),"Retry all"]})}),f.jsxs(Jc,{children:[f.jsxs(Fc,{children:[f.jsx($c,{children:"Retry all parked events?"}),f.jsxs(Wc,{children:["Re-delivers all ",l," parked events to their sinks. Events that still fail stay in the queue with an updated error. If newer changes for the same rows have already flowed, retrying re-applies the older state — consider discarding stale entries and re-running a backfill instead."]})]}),f.jsxs(Fv,{children:[f.jsx(Va,{variant:"outline",onClick:()=>r(!1),children:"Cancel"}),f.jsxs(Va,{onClick:()=>d.mutate(),disabled:d.isPending,children:[d.isPending&&f.jsx(Bo,{className:"size-4 animate-spin"}),"Retry ",l," events"]})]})]})]})}function nE({entry:l,onClose:o}){return f.jsx(Kc,{open:l!==null,onOpenChange:r=>!r&&o(),children:f.jsxs(Jc,{className:"sm:max-w-2xl",children:[f.jsxs(Fc,{children:[f.jsx($c,{children:"Parked event"}),f.jsx(Wc,{children:"The event payload as it was delivered to the sink (transforms already applied). Retrying re-delivers exactly this payload."})]}),l&&f.jsxs("div",{className:"space-y-3",children:[f.jsx("dl",{className:"grid grid-cols-2 gap-x-4 gap-y-1.5 text-xs sm:grid-cols-3",children:[["Sink",l.sink],["Table",`${l.schema}.${l.table}`],["Operation",l.operation],["LSN",l.lsn],["Attempts",String(l.attempts)],["Last failed",Lo(l.last_failed_at)]].map(([r,u])=>f.jsxs("div",{children:[f.jsx("dt",{className:"text-muted-foreground",children:r}),f.jsx("dd",{className:"truncate font-mono",title:u,children:u})]},r))}),f.jsxs("div",{children:[f.jsx("div",{className:"text-muted-foreground mb-1 text-xs",children:"Error"}),f.jsx("p",{className:"text-destructive text-xs break-words",children:l.error})]}),f.jsx("pre",{className:"bg-muted max-h-80 overflow-auto rounded-md p-3 font-mono text-xs",children:l.event===void 0?"Event payload not included in the API response.":JSON.stringify(l.event,null,2)})]})]})})}function lE({dlqEnabled:l}){const[o,r]=E.useState(""),[u,d]=E.useState(null),{data:h}=tx(l),v=E.useMemo(()=>h?.entries??[],[h]),y=$i({features:Ii,columns:tE,data:v,globalFilterFn:"includesString",initialState:{sorting:[{id:"last_failed_at",desc:!0}]},state:{globalFilter:o}});return f.jsx(Iv.Provider,{value:d,children:f.jsxs("div",{className:"space-y-4",children:[f.jsx(nE,{entry:u,onClose:()=>d(null)}),f.jsxs("div",{className:"flex items-center justify-between gap-3",children:[f.jsxs("div",{className:"relative max-w-xs flex-1",children:[f.jsx(Uc,{className:"text-muted-foreground absolute top-1/2 left-2.5 size-4 -translate-y-1/2"}),f.jsx(Go,{placeholder:"Filter by sink, table, error…",value:o,onChange:N=>r(N.target.value),className:"h-8 pl-8 text-sm"})]}),f.jsx(aE,{count:v.length})]}),f.jsx(ca,{className:"py-0",children:f.jsx(xa,{className:"px-0",children:f.jsx(Wi,{table:y,empty:f.jsxs("div",{className:"text-muted-foreground flex flex-col items-center gap-1 text-sm",children:[f.jsx(Rc,{className:"size-5"}),l?"No parked events — the pipeline is healthy.":"Dead-letter queue is disabled (set REDIS_URL and CDC_DLQ_ENABLED=true)."]})})})})]})})}const iE={overview:{title:"Overview",description:"Pipeline health at a glance"},tables:{title:"Table activity",description:"Change events by source table"},schema:{title:"Schema changes",description:"DDL detected on published tables"},backfill:{title:"Backfill",description:"Sync existing data into the sinks"},dlq:{title:"Dead letters",description:"Poison events parked for triage"}};function sE(){const[l,o]=E.useState("overview"),{data:r,isError:u}=W1(),d=iE[l];return E.useEffect(()=>{document.title=`${d.title} · GTC`},[d.title]),f.jsxs(O1,{page:l,onNavigate:o,stats:r,offline:u,dlqCount:r?.dlq.entries??0,title:d.title,description:d.description,children:[l==="overview"&&f.jsx(dx,{stats:r}),l==="tables"&&f.jsx(hx,{stats:r}),l==="schema"&&f.jsx(bx,{}),l==="backfill"&&f.jsx(IS,{stats:r}),l==="dlq"&&f.jsx(lE,{dlqEnabled:r?.dlq.enabled??!1})]})}function oE(l){const o=document.documentElement.classList.contains("dark");return f.jsx(Wx,{theme:o?"dark":"light",className:"toaster group",style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)"},...l})}const rE=new wb({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1}}});Lb.createRoot(document.getElementById("root")).render(f.jsx(E.StrictMode,{children:f.jsxs(_b,{client:rE,children:[f.jsx(sE,{}),f.jsx(oE,{position:"bottom-right"})]})})); diff --git a/ui/dist/assets/index-LCMTR3-U.css b/ui/dist/assets/index-LCMTR3-U.css new file mode 100644 index 0000000..e171b65 --- /dev/null +++ b/ui/dist/assets/index-LCMTR3-U.css @@ -0,0 +1 @@ +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-600:oklch(58.8% .158 241.966);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-600:oklch(54.1% .281 293.009);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-tight:1.25;--radius-xs:.125rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}body{background-color:var(--background);color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"cv02","cv03","cv04","cv11";font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,sans-serif}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.not-sr-only{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-4{right:calc(var(--spacing) * 4)}.left-0{left:0}.left-1\/2{left:50%}.left-2\.5{left:calc(var(--spacing) * 2.5)}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mb-1{margin-bottom:var(--spacing)}.ml-14{margin-left:calc(var(--spacing) * 14)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-4\.5{width:calc(var(--spacing) * 4.5);height:calc(var(--spacing) * 4.5)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-full{width:100%;height:100%}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-28{height:calc(var(--spacing) * 28)}.h-\[200px\]{height:200px}.h-\[220px\]{height:220px}.max-h-80{max-height:calc(var(--spacing) * 80)}.min-h-screen{min-height:100vh}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-none{translate:none}.scale-3d{scale:var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:0}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-reverse>:not(:last-child)){--tw-space-y-reverse:1}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}:where(.space-x-reverse>:not(:last-child)){--tw-space-x-reverse:1}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-s{border-start-start-radius:.25rem;border-end-start-radius:.25rem}.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-start-end-radius:.25rem;border-end-end-radius:.25rem}.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-bs{border-block-start-style:var(--tw-border-style);border-block-start-width:1px}.border-be{border-block-end-style:var(--tw-border-style);border-block-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-input{border-color:var(--input)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.bg-background,.bg-background\/80{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/80{background-color:color-mix(in oklab,var(--background) 80%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-card{background-color:var(--card)}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive) 10%,transparent)}}.bg-destructive\/90{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/90{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-muted{background-color:var(--muted)}.bg-primary,.bg-primary\/70{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/70{background-color:color-mix(in oklab,var(--primary) 70%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-accent{background-color:var(--sidebar-accent)}.bg-success\/10{background-color:var(--success)}@supports (color:color-mix(in lab,red,red)){.bg-success\/10{background-color:color-mix(in oklab,var(--success) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-warning\/15{background-color:var(--warning)}@supports (color:color-mix(in lab,red,red)){.bg-warning\/15{background-color:color-mix(in oklab,var(--warning) 15%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-amber-400{--tw-gradient-from:var(--color-amber-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-orange-500{--tw-gradient-to:var(--color-orange-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-repeat{background-repeat:repeat}.mask-no-clip{-webkit-mask-clip:no-clip;mask-clip:no-clip}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.text-amber-500{color:var(--color-amber-500)}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-emerald-600{color:var(--color-emerald-600)}.text-foreground{color:var(--foreground)}.text-muted-foreground,.text-muted-foreground\/50{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,var(--muted-foreground) 50%,transparent)}}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-accent-foreground{color:var(--sidebar-accent-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/60{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/60{color:color-mix(in oklab,var(--sidebar-foreground) 60%,transparent)}}.text-sidebar-foreground\/65{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/65{color:color-mix(in oklab,var(--sidebar-foreground) 65%,transparent)}}.text-sky-600{color:var(--color-sky-600)}.text-success{color:var(--success)}.text-violet-600{color:var(--color-violet-600)}.text-warning{color:var(--warning)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.stacked-fractions{--tw-numeric-fraction:stacked-fractions;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.normal-nums{font-variant-numeric:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-invert{--tw-backdrop-invert:invert(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.paused{animation-play-state:paused}.ring-inset{--tw-ring-inset:inset}.running{animation-play-state:running}.zoom-in{--tw-enter-scale:0}.zoom-out{--tw-exit-scale:0}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.first\:pl-4:first-child{padding-left:calc(var(--spacing) * 4)}.last\:pr-4:last-child{padding-right:calc(var(--spacing) * 4)}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.hover\:bg-sidebar-accent:hover,.hover\:bg-sidebar-accent\/60:hover{background-color:var(--sidebar-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-sidebar-accent\/60:hover{background-color:color-mix(in oklab,var(--sidebar-accent) 60%,transparent)}}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\>svg\]\:px-2:has(>svg){padding-inline:calc(var(--spacing) * 2)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}@media(min-width:40rem){.sm\:inline-flex{display:inline-flex}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:whitespace-nowrap{white-space:nowrap}}@media(min-width:48rem){.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(min-width:64rem){.lg\:ml-56{margin-left:calc(var(--spacing) * 56)}.lg\:block{display:block}.lg\:hidden{display:none}.lg\:inline-flex{display:inline-flex}.lg\:w-56{width:calc(var(--spacing) * 56)}.lg\:justify-start{justify-content:flex-start}.lg\:px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.lg\:px-4{padding-inline:calc(var(--spacing) * 4)}}@media(min-width:80rem){.xl\:col-span-2{grid-column:span 2/span 2}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-destructive\/20:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/20:is(.dark *){background-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input) 30%,transparent)}}.dark\:bg-success\/15:is(.dark *){background-color:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-success\/15:is(.dark *){background-color:color-mix(in oklab,var(--success) 15%,transparent)}}.dark\:text-emerald-400:is(.dark *){color:var(--color-emerald-400)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\:text-sky-400:is(.dark *){color:var(--color-sky-400)}.dark\:text-violet-400:is(.dark *){color:var(--color-violet-400)}@media(hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent) 50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input) 50%,transparent)}}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:.625rem;--background:oklch(98.5% 0 0);--foreground:oklch(14.1% .005 285.823);--card:oklch(100% 0 0);--card-foreground:oklch(14.1% .005 285.823);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.1% .005 285.823);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--accent-foreground:oklch(21% .006 285.885);--destructive:oklch(57.7% .245 27.325);--success:oklch(62.7% .17 149.2);--warning:oklch(66.6% .179 58.318);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--ring:oklch(70.5% .015 286.067);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(100% 0 0);--sidebar-foreground:oklch(14.1% .005 285.823);--sidebar-primary:oklch(21% .006 285.885);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(96.7% .001 286.375);--sidebar-accent-foreground:oklch(21% .006 285.885);--sidebar-border:oklch(92% .004 286.32);--sidebar-ring:oklch(70.5% .015 286.067)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--card:oklch(17.5% .006 285.885);--card-foreground:oklch(98.5% 0 0);--popover:oklch(21% .006 285.885);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(24.4% .006 286.033);--muted-foreground:oklch(70.5% .015 286.067);--accent:oklch(27.4% .006 286.033);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--success:oklch(72.3% .192 149.579);--warning:oklch(82.8% .189 84.429);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.2% .016 285.938);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(16.5% .006 285.885);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(27.4% .006 286.033);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.2% .016 285.938)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}} diff --git a/ui/dist/index.html b/ui/dist/index.html index 26b9e21..b6ce13f 100644 --- a/ui/dist/index.html +++ b/ui/dist/index.html @@ -15,10 +15,10 @@ document.documentElement.classList.add('dark'); } - + - +
diff --git a/ui/src/app.tsx b/ui/src/app.tsx index 851c8c3..f9d496d 100644 --- a/ui/src/app.tsx +++ b/ui/src/app.tsx @@ -2,6 +2,7 @@ import { useEffect, useState } from 'react'; import { Shell, type Page } from '@/components/shell'; import { OverviewPage } from '@/pages/overview'; import { TablesPage } from '@/pages/tables'; +import { SchemaPage } from '@/pages/schema'; import { BackfillPage } from '@/pages/backfill'; import { DlqPage } from '@/pages/dlq'; import { useStats } from '@/lib/hooks'; @@ -9,6 +10,7 @@ import { useStats } from '@/lib/hooks'; const PAGE_META: Record = { overview: { title: 'Overview', description: 'Pipeline health at a glance' }, tables: { title: 'Table activity', description: 'Change events by source table' }, + schema: { title: 'Schema changes', description: 'DDL detected on published tables' }, backfill: { title: 'Backfill', description: 'Sync existing data into the sinks' }, dlq: { title: 'Dead letters', description: 'Poison events parked for triage' }, }; @@ -34,6 +36,7 @@ export function App() { > {page === 'overview' && } {page === 'tables' && } + {page === 'schema' && } {page === 'backfill' && } {page === 'dlq' && } diff --git a/ui/src/components/shell.tsx b/ui/src/components/shell.tsx index b61b10f..5065429 100644 --- a/ui/src/components/shell.tsx +++ b/ui/src/components/shell.tsx @@ -9,6 +9,7 @@ import { Moon, Sun, Table2, + FileCode2, Zap, } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; @@ -16,11 +17,12 @@ import { cn } from '@/lib/utils'; import { formatDuration } from '@/lib/format'; import type { Stats } from '@/lib/api'; -export type Page = 'overview' | 'tables' | 'backfill' | 'dlq'; +export type Page = 'overview' | 'tables' | 'schema' | 'backfill' | 'dlq'; const NAV: { id: Page; label: string; icon: typeof LayoutDashboard }[] = [ { id: 'overview', label: 'Overview', icon: LayoutDashboard }, { id: 'tables', label: 'Tables', icon: Table2 }, + { id: 'schema', label: 'Schema', icon: FileCode2 }, { id: 'backfill', label: 'Backfill', icon: DatabaseBackup }, { id: 'dlq', label: 'Dead letters', icon: Inbox }, ]; diff --git a/ui/src/lib/api.ts b/ui/src/lib/api.ts index 6cc4bb9..de09134 100644 --- a/ui/src/lib/api.ts +++ b/ui/src/lib/api.ts @@ -79,6 +79,41 @@ export const historySchema = z.object({ .transform((v) => v ?? []), }); +export const columnDefSchema = z.object({ + name: z.string(), + type: z.string(), + type_oid: z.number(), + part_of_key: z.boolean(), +}); + +export const schemaChangeSchema = z.object({ + schema: z.string(), + table: z.string(), + relation_id: z.number(), + previous_schema: z.string().optional(), + previous_table: z.string().optional(), + added_columns: z.array(columnDefSchema).optional(), + dropped_columns: z.array(columnDefSchema).optional(), + changed_columns: z + .array(z.object({ name: z.string(), from: columnDefSchema, to: columnDefSchema })) + .optional(), + key_columns: z.array(z.string()).optional(), + previous_key_columns: z.array(z.string()).optional(), + replica_identity: z.string(), + previous_replica_identity: z.string().optional(), + kinds: z.array(z.string()), + lsn: z.string(), + transaction_id: z.number(), + timestamp: z.string(), + breaking: z.boolean(), + summary: z.string(), +}); + +export const schemaListSchema = z.object({ + total: z.number(), + changes: z.array(schemaChangeSchema).nullable().transform((v) => v ?? []), +}); + export const dlqEntrySchema = z.object({ id: z.string(), sink: z.string(), @@ -105,6 +140,8 @@ export type HistorySample = History['samples'][number]; export type SinkStats = z.infer; export type TableStats = z.infer; export type BackfillStatus = z.infer; +export type SchemaChange = z.infer; +export type ColumnDef = z.infer; export type DlqEntry = z.infer; export type DlqList = z.infer; @@ -125,6 +162,9 @@ export const getStats = async (): Promise => statsSchema.parse(await requ export const getHistory = async (): Promise => historySchema.parse(await request('/api/history')); +export const getSchemaChanges = async (): Promise> => + schemaListSchema.parse(await request('/api/schema')); + export const getDlq = async (limit = 100): Promise => dlqListSchema.parse(await request(`/dlq?limit=${limit}`)); diff --git a/ui/src/lib/hooks.ts b/ui/src/lib/hooks.ts index f1a72c9..7cf6ce8 100644 --- a/ui/src/lib/hooks.ts +++ b/ui/src/lib/hooks.ts @@ -1,6 +1,6 @@ import { useQuery } from '@tanstack/react-query'; import { useEffect, useMemo, useState } from 'react'; -import { getDlq, getHistory, getStats } from '@/lib/api'; +import { getDlq, getHistory, getSchemaChanges, getStats } from '@/lib/api'; export const POLL_INTERVAL = 2000; @@ -65,6 +65,15 @@ export function useIsDark(): boolean { return dark; } +// DDL is rare; a slower poll keeps the dashboard cheap. +export function useSchemaChanges() { + return useQuery({ + queryKey: ['schema'], + queryFn: getSchemaChanges, + refetchInterval: 10000, + }); +} + export function useDlq(enabled = true) { return useQuery({ queryKey: ['dlq'], diff --git a/ui/src/pages/schema.tsx b/ui/src/pages/schema.tsx new file mode 100644 index 0000000..ef08e59 --- /dev/null +++ b/ui/src/pages/schema.tsx @@ -0,0 +1,144 @@ +import { useMemo, useState } from 'react'; +import { useTable, type ColumnDef as TanstackColumnDef } from '@tanstack/react-table'; +import { FileCode2, Search, TriangleAlert } from 'lucide-react'; +import { Badge } from '@/components/ui/badge'; +import { Card, CardContent } from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; +import { DataTable } from '@/components/data-table'; +import { features } from '@/lib/table'; +import { timeAgo } from '@/lib/format'; +import type { SchemaChange } from '@/lib/api'; +import { useSchemaChanges } from '@/lib/hooks'; + +const KIND_LABEL: Record = { + column_added: 'column added', + column_dropped: 'column dropped', + column_type_changed: 'type changed', + key_changed: 'key changed', + replica_identity_changed: 'replica identity', + table_renamed: 'renamed', +}; + +// Additive changes are safe; everything else can break existing consumers. +const SAFE_KINDS = new Set(['column_added']); + +const columns: Array> = [ + { + id: 'target', + accessorFn: (row) => `${row.schema}.${row.table}`, + header: 'Table', + sortFn: 'text', + cell: ({ row, getValue }) => ( + + {getValue()} + {row.original.breaking && ( + + )} + + ), + }, + { + id: 'kinds', + accessorFn: (row) => row.kinds.join(' '), + header: 'Change', + enableSorting: false, + cell: ({ row }) => ( +
+ {row.original.kinds.map((kind) => ( + + {KIND_LABEL[kind] ?? kind} + + ))} +
+ ), + }, + { + accessorKey: 'summary', + header: 'Details', + enableSorting: false, + cell: ({ getValue }) => ( + ()}> + {getValue()} + + ), + }, + { + accessorKey: 'lsn', + header: 'LSN', + enableSorting: false, + cell: ({ getValue }) => ( + {getValue()} + ), + }, + { + accessorKey: 'timestamp', + header: 'Detected', + sortFn: 'datetime', + cell: ({ getValue }) => ( + {timeAgo(getValue())} + ), + }, +]; + +export function SchemaPage() { + const [filter, setFilter] = useState(''); + const { data } = useSchemaChanges(); + const changes = useMemo(() => data?.changes ?? [], [data]); + const breaking = changes.filter((c) => c.breaking).length; + + const table = useTable({ + features, + columns, + data: changes, + globalFilterFn: 'includesString', + initialState: { sorting: [{ id: 'timestamp', desc: true }] }, + state: { globalFilter: filter }, + }); + + return ( +
+
+
+ + setFilter(e.target.value)} + className="h-8 pl-8 text-sm" + /> +
+ {breaking > 0 && ( + + + {breaking} potentially breaking + + )} +
+ + + + + No schema changes observed since start. +
+ } + /> + + +

+ PostgreSQL does not stream DDL statements. GTC reports the effect of a change — columns + added, dropped or retyped, replica identity, renames — the moment the table's next row + change arrives, so a change to an idle table surfaces when its traffic resumes. +

+ + ); +}