small fixes

This commit is contained in:
d34dscene
2025-08-03 21:05:07 +02:00
parent 7a9e697598
commit 1f0c0625fa
25 changed files with 378 additions and 278 deletions

38
go.mod
View File

@@ -26,7 +26,8 @@ require (
github.com/rs/cors v1.11.1
github.com/stretchr/testify v1.10.0
github.com/traefik/paerser v0.2.2
github.com/traefik/traefik/v3 v3.4.5
github.com/traefik/traefik/v3 v3.5.0
github.com/vearutop/statigz v1.5.0
golang.org/x/crypto v0.40.0
golang.org/x/net v0.42.0
golang.org/x/oauth2 v0.30.0
@@ -40,6 +41,7 @@ require (
buf.build/go/protovalidate v0.14.0 // indirect
cel.dev/expr v0.24.0 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/andybalholm/brotli v1.2.0 // indirect
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.0 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.1 // indirect
@@ -64,29 +66,42 @@ require (
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
github.com/go-acme/lego/v4 v4.25.1 // indirect
github.com/go-jose/go-jose/v4 v4.1.2 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/jsonpointer v0.21.1 // indirect
github.com/go-openapi/jsonreference v0.21.0 // indirect
github.com/go-openapi/swag v0.23.1 // indirect
github.com/goccy/go-json v0.10.5 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/cel-go v0.26.0 // indirect
github.com/google/gnostic-models v0.7.0 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/go-github/v28 v28.1.1 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/gorilla/mux v1.8.1 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect
github.com/hashicorp/go-version v1.7.0 // indirect
github.com/http-wasm/http-wasm-host-go v0.7.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/mailru/easyjson v0.9.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mfridman/interpolate v0.0.2 // indirect
github.com/miekg/dns v1.1.67 // indirect
github.com/miekg/dns v1.1.68 // indirect
github.com/moby/docker-image-spec v1.3.1 // indirect
github.com/moby/sys/atomicwriter v0.1.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/ncruces/go-strftime v0.1.9 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.1 // indirect
@@ -98,6 +113,7 @@ require (
github.com/sethvargo/go-retry v0.3.0 // indirect
github.com/stoewer/go-strcase v1.3.1 // indirect
github.com/unrolled/render v1.7.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect
go.opentelemetry.io/otel v1.37.0 // indirect
@@ -113,17 +129,35 @@ require (
go.opentelemetry.io/otel/trace v1.37.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.yaml.in/yaml/v2 v2.4.2 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 // indirect
golang.org/x/mod v0.26.0 // indirect
golang.org/x/sys v0.34.0 // indirect
golang.org/x/term v0.33.0 // indirect
golang.org/x/text v0.27.0 // indirect
golang.org/x/time v0.12.0 // indirect
golang.org/x/tools v0.35.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250728155136-f173205681a0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0 // indirect
google.golang.org/grpc v1.74.2 // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gotest.tools/v3 v3.5.2 // indirect
k8s.io/api v0.33.3 // indirect
k8s.io/apimachinery v0.33.3 // indirect
k8s.io/client-go v0.33.3 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect
modernc.org/libc v1.66.6 // indirect
modernc.org/mathutil v1.7.1 // indirect
modernc.org/memory v1.11.0 // indirect
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect
sigs.k8s.io/yaml v1.6.0 // indirect
)
// Check status here: https://github.com/kubernetes/apimachinery/issues/190
replace k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20250701173324-9bd5c66d9911

85
go.sum
View File

@@ -20,6 +20,8 @@ github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ=
github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
github.com/aws/aws-sdk-go-v2 v1.37.1 h1:SMUxeNz3Z6nqGsXv0JuJXc8w5YMtrQMuIBmDx//bBDY=
@@ -58,6 +60,8 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.35.1 h1:iF4Xxkc0H9c/K2dS0zZw3SCkj0Z7
github.com/aws/aws-sdk-go-v2/service/sts v1.35.1/go.mod h1:0bxIatfN0aLq4mjoLDeBpOjOke68OsFlXPDFJ7V0MYw=
github.com/aws/smithy-go v1.22.5 h1:P9ATCXPMb2mPjYBgueqJNCA5S9UfktsW0tTxi+a7eqw=
github.com/aws/smithy-go v1.22.5/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
github.com/bool64/dev v0.2.39 h1:kP8DnMGlWXhGYJEZE/J0l/gVBdbuhoPGL+MJG4QbofE=
github.com/bool64/dev v0.2.39/go.mod h1:iJbh1y/HkunEPhgebWRNcs8wfGq7sjvJ6W5iabL8ACg=
github.com/caarlos0/env/v11 v11.3.1 h1:cArPWC15hWmEt+gWk7YBi7lEXTXCvpaSdCiZE2X5mCA=
github.com/caarlos0/env/v11 v11.3.1/go.mod h1:qupehSf/Y0TUTsxKywqRt/vJjN5nz6vauiYEUUr8P4U=
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
@@ -91,10 +95,14 @@ github.com/domodwyer/mailyak/v3 v3.6.2 h1:x3tGMsyFhTCaxp6ycgR0FE/bu5QiNp+hetUuCO
github.com/domodwyer/mailyak/v3 v3.6.2/go.mod h1:lOm/u9CyCVWHeaAmHIdF4RiKVxKUT/H5XX10lIKAL6c=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
github.com/go-acme/lego/v4 v4.25.1 h1:AYPUM7quPN/g2PcjjWw8sAMz3eV+Z8UWkr1kitDOyVA=
github.com/go-acme/lego/v4 v4.25.1/go.mod h1:OORYyVNZPaNdIdVYCGSBNRNZDIjhQbPuFxwGDgWj/yM=
github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI=
@@ -108,6 +116,14 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic=
github.com/go-openapi/jsonpointer v0.21.1/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk=
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU=
github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
@@ -120,7 +136,10 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/cel-go v0.26.0 h1:DPGjXackMpJWH680oGY4lZhYjIameYmR+/6RBdDGmaI=
github.com/google/cel-go v0.26.0/go.mod h1:A9O8OU9rdvrK5MQyrqfIxo1a0u4g3sF8KB6PUIaryMM=
github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/go-github/v28 v28.1.1 h1:kORf5ekX5qwXO2mGzXXOjMe/g6ap8ahVe0sBEulhSxo=
@@ -128,6 +147,7 @@ github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv3
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs=
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
@@ -146,14 +166,20 @@ github.com/jarcoal/httpmock v1.4.0 h1:BvhqnH0JAYbNudL2GMJKgOHe2CtKlzJ/5rWKyp+hc2
github.com/jarcoal/httpmock v1.4.0/go.mod h1:ftW1xULwo+j0R0JJkJIIi7UKigZUXCLLanykgjwBXL0=
github.com/joeig/go-powerdns/v3 v3.16.0 h1:d6k0dVlBYr+B9P5U+74rVY1VmQxUG6Qdtlb3F33cBLQ=
github.com/joeig/go-powerdns/v3 v3.16.0/go.mod h1:MXC0RHjIJbotTeH/hGoGfvyh7hOwfxYfU63BbWZXj1o=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
@@ -163,8 +189,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY=
github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg=
github.com/miekg/dns v1.1.67 h1:kg0EHj0G4bfT5/oOys6HhZw4vmMlnoZ+gDu8tJ/AlI0=
github.com/miekg/dns v1.1.67/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA=
github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw=
@@ -173,14 +199,22 @@ github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7z
github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM=
github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
@@ -207,11 +241,16 @@ github.com/sethvargo/go-retry v0.3.0 h1:EEt31A35QhrcRZtrYFDTBg91cqZVnFL2navjDrah
github.com/sethvargo/go-retry v0.3.0/go.mod h1:mNX17F0C/HguQMyMyJxcnU471gOZGxCLyYaFyAZraas=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stoewer/go-strcase v1.3.1 h1:iS0MdW+kVTxgMoE1LAZyMiYJFKlOzLooE4MxjirtkAs=
github.com/stoewer/go-strcase v1.3.1/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
@@ -219,10 +258,16 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/traefik/paerser v0.2.2 h1:cpzW/ZrQrBh3mdwD/jnp6aXASiUFKOVr6ldP+keJTcQ=
github.com/traefik/paerser v0.2.2/go.mod h1:7BBDd4FANoVgaTZG+yh26jI6CA2nds7D/4VTEdIsh24=
github.com/traefik/traefik/v3 v3.4.5 h1:vamkf2bL9ZUlir8h0vpfYZXGFcrnuiMCcAGMZhiLWJ8=
github.com/traefik/traefik/v3 v3.4.5/go.mod h1:rwq0+07S6ugXdFuB250anSgLQFOVDFvqurNR1BVDocw=
github.com/traefik/traefik/v3 v3.5.0 h1:LcEVhZkBC0uXp8vNwn+4zCWKmZTnPo95euw6ejmmWPk=
github.com/traefik/traefik/v3 v3.5.0/go.mod h1:9kxu9LsjWoJjZP4kjfHnHnwWLhqlK6ybeTHppPcDQgw=
github.com/unrolled/render v1.7.0 h1:1yke01/tZiZpiXfUG+zqB+6fq3G4I+KDmnh0EhPq7So=
github.com/unrolled/render v1.7.0/go.mod h1:LwQSeDhjml8NLjIO9GJO1/1qpFJxtfVIpzxXKjfVkoI=
github.com/vearutop/statigz v1.5.0 h1:FuWwZiT82yBw4xbWdWIawiP2XFTyEPhIo8upRxiKLqk=
github.com/vearutop/statigz v1.5.0/go.mod h1:oHmjFf3izfCO804Di1ZjB666P3fAlVzJEx2k6jNt/Gk=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
@@ -263,6 +308,10 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -298,6 +347,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg=
golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
@@ -326,11 +377,27 @@ google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
k8s.io/api v0.33.3 h1:SRd5t//hhkI1buzxb288fy2xvjubstenEKL9K51KBI8=
k8s.io/api v0.33.3/go.mod h1:01Y/iLUjNBM3TAvypct7DIj0M0NIZc+PzAHCIo0CYGE=
k8s.io/apimachinery v0.33.3 h1:4ZSrmNa0c/ZpZJhAgRdcsFcZOw1PQU1bALVQ0B3I5LA=
k8s.io/apimachinery v0.33.3/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM=
k8s.io/client-go v0.33.3 h1:M5AfDnKfYmVJif92ngN532gFqakcGi6RvaOF16efrpA=
k8s.io/client-go v0.33.3/go.mod h1:luqKBQggEf3shbxHY4uVENAxrDISLOarxpTKMiUuujg=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20250701173324-9bd5c66d9911 h1:gAXU86Fmbr/ktY17lkHwSjw5aoThQvhnstGGIYKlKYc=
k8s.io/kube-openapi v0.0.0-20250701173324-9bd5c66d9911/go.mod h1:GLOk5B+hDbRROvt0X2+hqX64v/zO3vXN7J78OUmBSKw=
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
modernc.org/cc/v4 v4.26.3 h1:yEN8dzrkRFnn4PUUKXLYIqVf2PJYAEjMTFjO3BDGc3I=
modernc.org/cc/v4 v4.26.3/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
modernc.org/ccgo/v4 v4.28.0 h1:rjznn6WWehKq7dG4JtLRKxb52Ecv8OUGah8+Z/SfpNU=
@@ -357,3 +424,13 @@ modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 h1:qPeWmscJcXP0snki5IYF79Z8xrl8ETFxgMd7wez1XkI=
sigs.k8s.io/structured-merge-diff/v4 v4.7.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps=
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=

View File

@@ -1,60 +1,19 @@
package server
import (
"io/fs"
"log"
"log/slog"
"mime"
"net/http"
"path/filepath"
"strings"
"github.com/mizuchilabs/mantrae/web"
"github.com/vearutop/statigz"
"github.com/vearutop/statigz/brotli"
)
func (s *Server) WithStatic() {
static, err := fs.Sub(web.StaticFS, "build")
if err != nil {
log.Fatal(err)
}
uploadsContent := http.FileServer(http.Dir("./data/uploads"))
s.mux.Handle("/uploads/", http.StripPrefix("/uploads/", uploadsContent))
s.mux.HandleFunc("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
originalPath := r.URL.Path
accept := r.Header.Get("Accept-Encoding")
switch {
case strings.Contains(accept, "br") && fileExists(static, originalPath+".br"):
r.URL.Path += ".br"
w.Header().Set("Content-Encoding", "br")
setContentType(w, originalPath)
case strings.Contains(accept, "gzip") && fileExists(static, originalPath+".gz"):
r.URL.Path += ".gz"
w.Header().Set("Content-Encoding", "gzip")
setContentType(w, originalPath)
}
http.FileServer(http.FS(static)).ServeHTTP(w, r)
}))
}
func setContentType(w http.ResponseWriter, origPath string) {
ext := filepath.Ext(origPath)
if mimeType := mime.TypeByExtension(ext); mimeType != "" {
w.Header().Set("Content-Type", mimeType)
}
}
func fileExists(fsys fs.FS, name string) bool {
f, err := fsys.Open(strings.TrimPrefix(name, "/"))
if err != nil {
return false
}
defer func() {
if err := f.Close(); err != nil {
slog.Error("Error closing file", "error", err)
}
}()
return true
s.mux.Handle("/", statigz.FileServer(
web.StaticFS,
brotli.AddEncoding,
statigz.FSPrefix("build"),
))
}

View File

@@ -97,7 +97,7 @@ tasks:
desc: Build local test container with ko
deps: [build:frontend]
cmds:
- KO_DOCKER_REPO=$IMAGE_SERVER_DEV ko build --bare ./server/cmd
- KO_DOCKER_REPO=$IMAGE_AGENT_DEV ko build --bare ./agent/cmd
- KO_DOCKER_REPO=$IMAGE_SERVER_DEV ko build ./server/cmd --bare
- KO_DOCKER_REPO=$IMAGE_AGENT_DEV ko build ./agent/cmd --bare
- grype $IMAGE_SERVER_DEV
- grype $IMAGE_AGENT_DEV

View File

@@ -6,10 +6,11 @@
"plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
"overrides": [
{
"files": "*.svelte",
"files": ["*.svelte", "*.svelte.ts", "*.svelte.js"],
"options": {
"parser": "svelte"
}
}
]
],
"tailwindStylesheet": "./src/app.css"
}

View File

@@ -1,9 +1,9 @@
import js from "@eslint/js";
import ts from "typescript-eslint";
import svelte from "eslint-plugin-svelte";
import prettier from "eslint-config-prettier";
import globals from "globals";
import svelteConfig from "./svelte.config.js";
import js from '@eslint/js';
import ts from 'typescript-eslint';
import svelte from 'eslint-plugin-svelte';
import prettier from 'eslint-config-prettier';
import globals from 'globals';
import svelteConfig from './svelte.config.js';
/** @type {import('eslint').Linter.Config[]} */
export default [
@@ -16,39 +16,39 @@ export default [
languageOptions: {
globals: {
...globals.browser,
...globals.node,
},
...globals.node
}
},
rules: {
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": [
"warn",
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': [
'warn',
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
caughtErrorsIgnorePattern: "^_",
},
],
},
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
caughtErrorsIgnorePattern: '^_'
}
]
}
},
{
files: ["**/*.svelte", "**/*.svelte.ts", "**/*.svelte.js"],
files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'],
languageOptions: {
parserOptions: {
projectService: true,
extraFileExtensions: [".svelte"],
extraFileExtensions: ['.svelte'],
parser: ts.parser,
svelteConfig,
},
},
svelteConfig
}
}
},
{
ignores: [
"build/",
".svelte-kit/",
"dist/",
"src/lib/components/gen/",
"src/lib/components/ui/",
],
},
'build/',
'.svelte-kit/',
'dist/',
'src/lib/components/gen/',
'src/lib/components/ui/'
]
}
];

View File

@@ -35,8 +35,8 @@
"prettier-plugin-svelte": "^3.4.0",
"prettier-plugin-tailwindcss": "^0.6.14",
"shiki": "^3.9.1",
"svelte": "^5.37.2",
"svelte-check": "^4.3.0",
"svelte": "^5.37.3",
"svelte-check": "^4.3.1",
"svelte-highlight": "^7.8.3",
"svelte-sonner": "^1.0.5",
"sveltekit-superforms": "^2.27.1",

166
web/pnpm-lock.yaml generated
View File

@@ -32,16 +32,16 @@ importers:
version: 3.8.2
'@lucide/svelte':
specifier: ^0.536.0
version: 0.536.0(svelte@5.37.2)
version: 0.536.0(svelte@5.37.3)
'@sveltejs/adapter-static':
specifier: ^3.0.8
version: 3.0.8(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))
version: 3.0.8(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))
'@sveltejs/kit':
specifier: ^2.27.0
version: 2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
version: 2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
'@sveltejs/vite-plugin-svelte':
specifier: ^6.1.0
version: 6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
version: 6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
'@tailwindcss/vite':
specifier: ^4.1.11
version: 4.1.11(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
@@ -53,7 +53,7 @@ importers:
version: 24.1.0
bits-ui:
specifier: 2.9.1
version: 2.9.1(@internationalized/date@3.8.2)(svelte@5.37.2)
version: 2.9.1(@internationalized/date@3.8.2)(svelte@5.37.3)
clsx:
specifier: ^2.1.1
version: 2.1.1
@@ -65,43 +65,43 @@ importers:
version: 10.1.8(eslint@9.32.0(jiti@2.5.1))
eslint-plugin-svelte:
specifier: ^3.11.0
version: 3.11.0(eslint@9.32.0(jiti@2.5.1))(svelte@5.37.2)
version: 3.11.0(eslint@9.32.0(jiti@2.5.1))(svelte@5.37.3)
formsnap:
specifier: ^2.0.1
version: 2.0.1(svelte@5.37.2)(sveltekit-superforms@2.27.1(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(@types/json-schema@7.0.15)(esbuild@0.25.8)(svelte@5.37.2)(typescript@5.9.2))
version: 2.0.1(svelte@5.37.3)(sveltekit-superforms@2.27.1(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(@types/json-schema@7.0.15)(esbuild@0.25.8)(svelte@5.37.3)(typescript@5.9.2))
globals:
specifier: ^16.3.0
version: 16.3.0
mode-watcher:
specifier: ^1.1.0
version: 1.1.0(svelte@5.37.2)
version: 1.1.0(svelte@5.37.3)
prettier:
specifier: ^3.6.2
version: 3.6.2
prettier-plugin-svelte:
specifier: ^3.4.0
version: 3.4.0(prettier@3.6.2)(svelte@5.37.2)
version: 3.4.0(prettier@3.6.2)(svelte@5.37.3)
prettier-plugin-tailwindcss:
specifier: ^0.6.14
version: 0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.37.2))(prettier@3.6.2)
version: 0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.37.3))(prettier@3.6.2)
shiki:
specifier: ^3.9.1
version: 3.9.1
svelte:
specifier: ^5.37.2
version: 5.37.2
specifier: ^5.37.3
version: 5.37.3
svelte-check:
specifier: ^4.3.0
version: 4.3.0(picomatch@4.0.3)(svelte@5.37.2)(typescript@5.9.2)
specifier: ^4.3.1
version: 4.3.1(picomatch@4.0.3)(svelte@5.37.3)(typescript@5.9.2)
svelte-highlight:
specifier: ^7.8.3
version: 7.8.3
svelte-sonner:
specifier: ^1.0.5
version: 1.0.5(svelte@5.37.2)
version: 1.0.5(svelte@5.37.3)
sveltekit-superforms:
specifier: ^2.27.1
version: 2.27.1(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(@types/json-schema@7.0.15)(esbuild@0.25.8)(svelte@5.37.2)(typescript@5.9.2)
version: 2.27.1(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(@types/json-schema@7.0.15)(esbuild@0.25.8)(svelte@5.37.3)(typescript@5.9.2)
tailwind-merge:
specifier: ^3.3.1
version: 3.3.1
@@ -987,8 +987,8 @@ packages:
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
effect@3.17.4:
resolution: {integrity: sha512-VD+5bYdIN088c1fCESqYvOKQ22O2dUptO+Chy7SGMqthIVcYBvVlYSgUQT976XJaHOV2Fd0TaW94EYWHOQsbOw==}
effect@3.17.5:
resolution: {integrity: sha512-cz9XH+UyhHxlYvaQDkxGwuDOpFQwU58+bIWfOYDT+5rLjCfXOQ+SOFHpE7e/+xBtZemFm8b2uFN0zUVKk9MvYw==}
enhanced-resolve@5.18.2:
resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==}
@@ -1686,8 +1686,8 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
svelte-check@4.3.0:
resolution: {integrity: sha512-Iz8dFXzBNAM7XlEIsUjUGQhbEE+Pvv9odb9+0+ITTgFWZBGeJRRYqHUUglwe2EkLD5LIsQaAc4IUJyvtKuOO5w==}
svelte-check@4.3.1:
resolution: {integrity: sha512-lkh8gff5gpHLjxIV+IaApMxQhTGnir2pNUAqcNgeKkvK5bT/30Ey/nzBxNLDlkztCH4dP7PixkMt9SWEKFPBWg==}
engines: {node: '>= 18.0.0'}
hasBin: true
peerDependencies:
@@ -1729,8 +1729,8 @@ packages:
peerDependencies:
svelte: ^5.30.2
svelte@5.37.2:
resolution: {integrity: sha512-SAakJiy04/OvXRAUnGxRACGzw6GB9kmxYIjuMO/zTcTL6psqc54Y0O/yR6I3OLqFqn79EPd23qsCGkKozvYYbQ==}
svelte@5.37.3:
resolution: {integrity: sha512-7t/ejshehHd+95z3Z7ebS7wsqHDQxi/8nBTuTRwpMgNegfRBfuitCSKTUDKIBOExqfT2+DhQ2VLG8Xn+cBXoaQ==}
engines: {node: '>=18'}
sveltekit-superforms@2.27.1:
@@ -2198,9 +2198,9 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.4
'@lucide/svelte@0.536.0(svelte@5.37.2)':
'@lucide/svelte@0.536.0(svelte@5.37.3)':
dependencies:
svelte: 5.37.2
svelte: 5.37.3
'@nodelib/fs.scandir@2.1.5':
dependencies:
@@ -2340,15 +2340,15 @@ snapshots:
dependencies:
acorn: 8.15.0
'@sveltejs/adapter-static@3.0.8(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))':
'@sveltejs/adapter-static@3.0.8(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))':
dependencies:
'@sveltejs/kit': 2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
'@sveltejs/kit': 2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
'@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))':
'@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))':
dependencies:
'@standard-schema/spec': 1.0.0
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0)
'@sveltejs/vite-plugin-svelte': 6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
'@sveltejs/vite-plugin-svelte': 6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
'@types/cookie': 0.6.0
acorn: 8.15.0
cookie: 0.6.0
@@ -2360,26 +2360,26 @@ snapshots:
sade: 1.8.1
set-cookie-parser: 2.7.1
sirv: 3.0.1
svelte: 5.37.2
svelte: 5.37.3
vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)
'@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))':
'@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))':
dependencies:
'@sveltejs/vite-plugin-svelte': 6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
'@sveltejs/vite-plugin-svelte': 6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
debug: 4.4.1
svelte: 5.37.2
svelte: 5.37.3
vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)
transitivePeerDependencies:
- supports-color
'@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))':
'@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))':
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
'@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
debug: 4.4.1
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.17
svelte: 5.37.2
svelte: 5.37.3
vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)
vitefu: 1.1.1(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
transitivePeerDependencies:
@@ -2649,15 +2649,15 @@ snapshots:
balanced-match@1.0.2: {}
bits-ui@2.9.1(@internationalized/date@3.8.2)(svelte@5.37.2):
bits-ui@2.9.1(@internationalized/date@3.8.2)(svelte@5.37.3):
dependencies:
'@floating-ui/core': 1.7.3
'@floating-ui/dom': 1.7.3
'@internationalized/date': 3.8.2
esm-env: 1.2.2
runed: 0.29.2(svelte@5.37.2)
svelte: 5.37.2
svelte-toolbelt: 0.9.3(svelte@5.37.2)
runed: 0.29.2(svelte@5.37.3)
svelte: 5.37.3
svelte-toolbelt: 0.9.3(svelte@5.37.3)
tabbable: 6.2.0
brace-expansion@1.1.12:
@@ -2751,7 +2751,7 @@ snapshots:
dlv@1.1.3:
optional: true
effect@3.17.4:
effect@3.17.5:
dependencies:
'@standard-schema/spec': 1.0.0
fast-check: 3.23.2
@@ -2804,7 +2804,7 @@ snapshots:
dependencies:
eslint: 9.32.0(jiti@2.5.1)
eslint-plugin-svelte@3.11.0(eslint@9.32.0(jiti@2.5.1))(svelte@5.37.2):
eslint-plugin-svelte@3.11.0(eslint@9.32.0(jiti@2.5.1))(svelte@5.37.3):
dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1))
'@jridgewell/sourcemap-codec': 1.5.4
@@ -2816,9 +2816,9 @@ snapshots:
postcss-load-config: 3.1.4(postcss@8.5.6)
postcss-safe-parser: 7.0.1(postcss@8.5.6)
semver: 7.7.2
svelte-eslint-parser: 1.3.1(svelte@5.37.2)
svelte-eslint-parser: 1.3.1(svelte@5.37.3)
optionalDependencies:
svelte: 5.37.2
svelte: 5.37.3
transitivePeerDependencies:
- ts-node
@@ -2946,11 +2946,11 @@ snapshots:
flatted@3.3.3: {}
formsnap@2.0.1(svelte@5.37.2)(sveltekit-superforms@2.27.1(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(@types/json-schema@7.0.15)(esbuild@0.25.8)(svelte@5.37.2)(typescript@5.9.2)):
formsnap@2.0.1(svelte@5.37.3)(sveltekit-superforms@2.27.1(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(@types/json-schema@7.0.15)(esbuild@0.25.8)(svelte@5.37.3)(typescript@5.9.2)):
dependencies:
svelte: 5.37.2
svelte-toolbelt: 0.5.0(svelte@5.37.2)
sveltekit-superforms: 2.27.1(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(@types/json-schema@7.0.15)(esbuild@0.25.8)(svelte@5.37.2)(typescript@5.9.2)
svelte: 5.37.3
svelte-toolbelt: 0.5.0(svelte@5.37.3)
sveltekit-superforms: 2.27.1(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(@types/json-schema@7.0.15)(esbuild@0.25.8)(svelte@5.37.3)(typescript@5.9.2)
fsevents@2.3.3:
optional: true
@@ -3178,11 +3178,11 @@ snapshots:
mkdirp@3.0.1: {}
mode-watcher@1.1.0(svelte@5.37.2):
mode-watcher@1.1.0(svelte@5.37.3):
dependencies:
runed: 0.25.0(svelte@5.37.2)
svelte: 5.37.2
svelte-toolbelt: 0.7.1(svelte@5.37.2)
runed: 0.25.0(svelte@5.37.3)
svelte: 5.37.3
svelte-toolbelt: 0.7.1(svelte@5.37.3)
mri@1.2.0: {}
@@ -3264,16 +3264,16 @@ snapshots:
prelude-ls@1.2.1: {}
prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.37.2):
prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.37.3):
dependencies:
prettier: 3.6.2
svelte: 5.37.2
svelte: 5.37.3
prettier-plugin-tailwindcss@0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.37.2))(prettier@3.6.2):
prettier-plugin-tailwindcss@0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.37.3))(prettier@3.6.2):
dependencies:
prettier: 3.6.2
optionalDependencies:
prettier-plugin-svelte: 3.4.0(prettier@3.6.2)(svelte@5.37.2)
prettier-plugin-svelte: 3.4.0(prettier@3.6.2)(svelte@5.37.3)
prettier@3.6.2: {}
@@ -3337,25 +3337,25 @@ snapshots:
dependencies:
queue-microtask: 1.2.3
runed@0.23.4(svelte@5.37.2):
runed@0.23.4(svelte@5.37.3):
dependencies:
esm-env: 1.2.2
svelte: 5.37.2
svelte: 5.37.3
runed@0.25.0(svelte@5.37.2):
runed@0.25.0(svelte@5.37.3):
dependencies:
esm-env: 1.2.2
svelte: 5.37.2
svelte: 5.37.3
runed@0.28.0(svelte@5.37.2):
runed@0.28.0(svelte@5.37.3):
dependencies:
esm-env: 1.2.2
svelte: 5.37.2
svelte: 5.37.3
runed@0.29.2(svelte@5.37.2):
runed@0.29.2(svelte@5.37.3):
dependencies:
esm-env: 1.2.2
svelte: 5.37.2
svelte: 5.37.3
sade@1.8.1:
dependencies:
@@ -3419,19 +3419,19 @@ snapshots:
dependencies:
has-flag: 4.0.0
svelte-check@4.3.0(picomatch@4.0.3)(svelte@5.37.2)(typescript@5.9.2):
svelte-check@4.3.1(picomatch@4.0.3)(svelte@5.37.3)(typescript@5.9.2):
dependencies:
'@jridgewell/trace-mapping': 0.3.29
chokidar: 4.0.3
fdir: 6.4.6(picomatch@4.0.3)
picocolors: 1.1.1
sade: 1.8.1
svelte: 5.37.2
svelte: 5.37.3
typescript: 5.9.2
transitivePeerDependencies:
- picomatch
svelte-eslint-parser@1.3.1(svelte@5.37.2):
svelte-eslint-parser@1.3.1(svelte@5.37.3):
dependencies:
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
@@ -3440,38 +3440,38 @@ snapshots:
postcss-scss: 4.0.9(postcss@8.5.6)
postcss-selector-parser: 7.1.0
optionalDependencies:
svelte: 5.37.2
svelte: 5.37.3
svelte-highlight@7.8.3:
dependencies:
highlight.js: 11.11.1
svelte-sonner@1.0.5(svelte@5.37.2):
svelte-sonner@1.0.5(svelte@5.37.3):
dependencies:
runed: 0.28.0(svelte@5.37.2)
svelte: 5.37.2
runed: 0.28.0(svelte@5.37.3)
svelte: 5.37.3
svelte-toolbelt@0.5.0(svelte@5.37.2):
svelte-toolbelt@0.5.0(svelte@5.37.3):
dependencies:
clsx: 2.1.1
style-to-object: 1.0.9
svelte: 5.37.2
svelte: 5.37.3
svelte-toolbelt@0.7.1(svelte@5.37.2):
svelte-toolbelt@0.7.1(svelte@5.37.3):
dependencies:
clsx: 2.1.1
runed: 0.23.4(svelte@5.37.2)
runed: 0.23.4(svelte@5.37.3)
style-to-object: 1.0.9
svelte: 5.37.2
svelte: 5.37.3
svelte-toolbelt@0.9.3(svelte@5.37.2):
svelte-toolbelt@0.9.3(svelte@5.37.3):
dependencies:
clsx: 2.1.1
runed: 0.29.2(svelte@5.37.2)
runed: 0.29.2(svelte@5.37.3)
style-to-object: 1.0.9
svelte: 5.37.2
svelte: 5.37.3
svelte@5.37.2:
svelte@5.37.3:
dependencies:
'@ampproject/remapping': 2.3.0
'@jridgewell/sourcemap-codec': 1.5.4
@@ -3488,12 +3488,12 @@ snapshots:
magic-string: 0.30.17
zimmerframe: 1.1.2
sveltekit-superforms@2.27.1(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(@types/json-schema@7.0.15)(esbuild@0.25.8)(svelte@5.37.2)(typescript@5.9.2):
sveltekit-superforms@2.27.1(@sveltejs/kit@2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(@types/json-schema@7.0.15)(esbuild@0.25.8)(svelte@5.37.3)(typescript@5.9.2):
dependencies:
'@sveltejs/kit': 2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
'@sveltejs/kit': 2.27.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.37.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))
devalue: 5.1.1
memoize-weak: 1.0.2
svelte: 5.37.2
svelte: 5.37.3
ts-deepmerge: 7.0.3
optionalDependencies:
'@exodus/schemasafe': 1.3.0
@@ -3503,7 +3503,7 @@ snapshots:
'@vinejs/vine': 3.0.1
arktype: 2.1.20
class-validator: 0.14.2
effect: 3.17.4
effect: 3.17.5
joi: 17.13.3
json-schema-to-ts: 3.1.1
superstruct: 2.0.2

View File

@@ -1,16 +1,16 @@
<script lang="ts">
import * as Dialog from '$lib/components/ui/dialog/index.js';
import { userClient } from '$lib/api';
import { Button } from '$lib/components/ui/button/index.js';
import * as Dialog from '$lib/components/ui/dialog/index.js';
import { Input } from '$lib/components/ui/input/index.js';
import { Label } from '$lib/components/ui/label/index.js';
import { UpdateUserRequestSchema, type User } from '$lib/gen/mantrae/v1/user_pb';
import { user } from '$lib/stores/user';
import { create } from '@bufbuild/protobuf';
import { ConnectError } from '@connectrpc/connect';
import { toast } from 'svelte-sonner';
import PasswordInput from '../ui/password-input/password-input.svelte';
import Separator from '../ui/separator/separator.svelte';
import { UpdateUserRequestSchema, type User } from '$lib/gen/mantrae/v1/user_pb';
import { userClient } from '$lib/api';
import { ConnectError } from '@connectrpc/connect';
import { user } from '$lib/stores/user';
import { create } from '@bufbuild/protobuf';
interface Props {
item: User;
@@ -89,7 +89,7 @@
required
class="transition-colors"
/>
<p class="text-muted-foreground text-xs">Display name for the user account</p>
<p class="text-xs text-muted-foreground">Display name for the user account</p>
</div>
<div class="space-y-2">
@@ -101,7 +101,7 @@
placeholder="user@example.com"
class="transition-colors"
/>
<p class="text-muted-foreground text-xs">
<p class="text-xs text-muted-foreground">
Email address for notifications and account recovery
</p>
</div>
@@ -109,15 +109,15 @@
<div class="space-y-2">
<!-- <Label class="text-sm font-medium">Security</Label> -->
{#if item.id}
<Label for="password" class="text-muted-foreground text-sm font-normal">Password</Label>
<Label for="password" class="text-sm font-normal text-muted-foreground">Password</Label>
<PasswordInput id="password" bind:value={password} />
<p class="text-muted-foreground text-xs">
<p class="text-xs text-muted-foreground">
Only enter a new password if you want to change it
</p>
{:else}
<Label for="password" class="text-muted-foreground text-sm font-normal">Password</Label>
<Label for="password" class="text-sm font-normal text-muted-foreground">Password</Label>
<PasswordInput id="password" bind:value={item.password} required />
<p class="text-muted-foreground text-xs">Secure password for the user account</p>
<p class="text-xs text-muted-foreground">Secure password for the user account</p>
{/if}
</div>
</div>

View File

@@ -1,30 +1,30 @@
import { EventAction, type EventStreamResponse } from '$lib/gen/mantrae/v1/util_pb';
import {
utilClient,
entryPointClient,
middlewareClient,
dnsClient,
profileClient,
userClient,
agentClient,
routerClient,
serviceClient,
serversTransportClient,
traefikClient
agentClient,
dnsClient,
entryPointClient,
middlewareClient,
profileClient,
routerClient,
serversTransportClient,
serviceClient,
traefikClient,
userClient,
utilClient
} from '$lib/api';
import { profile } from './profile';
import { writable } from 'svelte/store';
import type { ConnectError } from '@connectrpc/connect';
import type { Profile } from '$lib/gen/mantrae/v1/profile_pb';
import type { User } from '$lib/gen/mantrae/v1/user_pb';
import type { Agent } from '$lib/gen/mantrae/v1/agent_pb';
import type { EntryPoint } from '$lib/gen/mantrae/v1/entry_point_pb';
import type { Router } from '$lib/gen/mantrae/v1/router_pb';
import type { Service } from '$lib/gen/mantrae/v1/service_pb';
import type { Middleware } from '$lib/gen/mantrae/v1/middleware_pb';
import type { ServersTransport } from '$lib/gen/mantrae/v1/servers_transport_pb';
import type { DnsProvider } from '$lib/gen/mantrae/v1/dns_provider_pb';
import type { EntryPoint } from '$lib/gen/mantrae/v1/entry_point_pb';
import type { Middleware } from '$lib/gen/mantrae/v1/middleware_pb';
import type { Profile } from '$lib/gen/mantrae/v1/profile_pb';
import type { Router } from '$lib/gen/mantrae/v1/router_pb';
import type { ServersTransport } from '$lib/gen/mantrae/v1/servers_transport_pb';
import type { Service } from '$lib/gen/mantrae/v1/service_pb';
import type { TraefikInstance } from '$lib/gen/mantrae/v1/traefik_instance_pb';
import type { User } from '$lib/gen/mantrae/v1/user_pb';
import { EventAction, type EventStreamResponse } from '$lib/gen/mantrae/v1/util_pb';
import type { ConnectError } from '@connectrpc/connect';
import { writable } from 'svelte/store';
import { profile } from './profile';
export const profiles = writable<Profile[]>([]);
export const users = writable<User[]>([]);

View File

@@ -1,6 +1,6 @@
import type { User } from '$lib/gen/mantrae/v1/user_pb';
import type { Timestamp } from '@bufbuild/protobuf/wkt';
import { createLocalStorage } from '$lib/storage.svelte';
import type { Timestamp } from '@bufbuild/protobuf/wkt';
class UserStore {
private store = createLocalStorage<User | null>('current_user', null);

View File

@@ -1,7 +1,7 @@
import { DnsProviderType } from './gen/mantrae/v1/dns_provider_pb';
import type { JsonObject } from '@bufbuild/protobuf';
import type { Component } from 'svelte';
import type { IconProps } from '@lucide/svelte';
import type { Component } from 'svelte';
import { DnsProviderType } from './gen/mantrae/v1/dns_provider_pb';
import { ProtocolType } from './gen/mantrae/v1/protocol_pb';
export type IconComponent = Component<IconProps, Record<string, never>, ''>;

View File

@@ -1,38 +1,17 @@
<script lang="ts">
import * as Card from '$lib/components/ui/card/index.js';
import { auditLogClient } from '$lib/api';
import AuditLogModal from '$lib/components/modals/AuditLogModal.svelte';
import ConfigModal from '$lib/components/modals/ConfigModal.svelte';
import ProfileModal from '$lib/components/modals/ProfileModal.svelte';
import { Badge } from '$lib/components/ui/badge/index.js';
import { Button } from '$lib/components/ui/button/index.js';
import * as Card from '$lib/components/ui/card/index.js';
import { Separator } from '$lib/components/ui/separator/index.js';
import {
Globe,
Shield,
Bot,
Users,
Gauge,
Layers2,
Activity,
Server,
Network,
Route,
Clock,
TrendingUp,
Wifi,
Database,
Pen,
Eye,
CircleCheck,
CircleAlert
} from '@lucide/svelte';
import { profile } from '$lib/stores/profile';
import { auditLogClient } from '$lib/api';
import { DateFormat } from '$lib/stores/common';
import { timestampDate, type Timestamp } from '@bufbuild/protobuf/wkt';
import ProfileModal from '$lib/components/modals/ProfileModal.svelte';
import ConfigModal from '$lib/components/modals/ConfigModal.svelte';
import type { Profile } from '$lib/gen/mantrae/v1/profile_pb';
import AuditLogModal from '$lib/components/modals/AuditLogModal.svelte';
import TraefikConnection from '$lib/components/utils/TraefikConnection.svelte';
import type { Profile } from '$lib/gen/mantrae/v1/profile_pb';
import { ProtocolType } from '$lib/gen/mantrae/v1/protocol_pb';
import { DateFormat } from '$lib/stores/common';
import { profile } from '$lib/stores/profile';
import {
agents,
dnsProviders,
@@ -43,6 +22,27 @@
traefikInstances,
users
} from '$lib/stores/realtime';
import { timestampDate, type Timestamp } from '@bufbuild/protobuf/wkt';
import {
Activity,
Bot,
CircleAlert,
CircleCheck,
Clock,
Database,
Eye,
Gauge,
Globe,
Layers2,
Network,
Pen,
Route,
Server,
Shield,
TrendingUp,
Users,
Wifi
} from '@lucide/svelte';
let onlineAgents = $derived.by(() => {
let activeAgents = $agents.reduce((count, agent) => {
@@ -83,6 +83,11 @@
let modalAuditLogOpen = $state(false);
</script>
<svelte:head>
<title>Dashboard - Mantrae</title>
<meta name="description" content="Monitor and manage your reverse proxy configurations, agents, DNS providers, and system users" />
</svelte:head>
<ProfileModal bind:item={modalProfile} bind:open={modalProfileOpen} />
<ConfigModal bind:open={modalConfigOpen} />
<AuditLogModal bind:open={modalAuditLogOpen} />
@@ -92,12 +97,12 @@
<div class="flex items-center justify-between">
<div>
<h1 class="flex items-center gap-3 text-3xl font-bold tracking-tight">
<div class="bg-primary/10 rounded-lg p-2">
<Gauge class="text-primary h-6 w-6" />
<div class="rounded-lg bg-primary/10 p-2">
<Gauge class="h-6 w-6 text-primary" />
</div>
Dashboard
</h1>
<p class="text-muted-foreground mt-1">Monitor and manage your reverse proxy configurations</p>
<p class="mt-1 text-muted-foreground">Monitor and manage your reverse proxy configurations</p>
</div>
</div>
@@ -107,8 +112,8 @@
<!-- Total Profiles -->
<Card.Root class="relative overflow-hidden">
<Card.Header class="flex flex-row items-center justify-between pb-2">
<Card.Title class="text-muted-foreground text-sm font-medium">Total Profiles</Card.Title>
<Layers2 class="text-muted-foreground h-4 w-4" />
<Card.Title class="text-sm font-medium text-muted-foreground">Total Profiles</Card.Title>
<Layers2 class="h-4 w-4 text-muted-foreground" />
</Card.Header>
<Card.Content>
<div class="text-3xl font-bold">{$profiles?.length}</div>
@@ -118,16 +123,16 @@
</div>
</Card.Content>
<div
class="from-primary/5 absolute top-0 right-0 h-16 w-16 rounded-bl-full bg-gradient-to-bl to-transparent"
class="absolute top-0 right-0 h-16 w-16 rounded-bl-full bg-gradient-to-bl from-primary/5 to-transparent"
></div>
</Card.Root>
<!-- Connected Agents -->
<Card.Root class="relative overflow-hidden">
<Card.Header class="flex flex-row items-center justify-between pb-2">
<Card.Title class="text-muted-foreground text-sm font-medium">Connected Agents</Card.Title
<Card.Title class="text-sm font-medium text-muted-foreground">Connected Agents</Card.Title
>
<Bot class="text-muted-foreground h-4 w-4" />
<Bot class="h-4 w-4 text-muted-foreground" />
</Card.Header>
<Card.Content>
<div class="text-3xl font-bold">{onlineAgents}</div>
@@ -144,8 +149,8 @@
<!-- DNS Provider -->
<Card.Root class="relative overflow-hidden">
<Card.Header class="flex flex-row items-center justify-between pb-2">
<Card.Title class="text-muted-foreground text-sm font-medium">DNS Provider</Card.Title>
<Globe class="text-muted-foreground h-4 w-4" />
<Card.Title class="text-sm font-medium text-muted-foreground">DNS Provider</Card.Title>
<Globe class="h-4 w-4 text-muted-foreground" />
</Card.Header>
<Card.Content>
<div class="text-3xl font-bold">
@@ -171,8 +176,8 @@
<!-- Total Users -->
<Card.Root class="relative overflow-hidden">
<Card.Header class="flex flex-row items-center justify-between pb-2">
<Card.Title class="text-muted-foreground text-sm font-medium">System Users</Card.Title>
<Users class="text-muted-foreground h-4 w-4" />
<Card.Title class="text-sm font-medium text-muted-foreground">System Users</Card.Title>
<Users class="h-4 w-4 text-muted-foreground" />
</Card.Header>
<Card.Content>
<div class="text-3xl font-bold">{$users?.length}</div>
@@ -311,13 +316,13 @@
<div class="space-y-4 rounded-lg border p-4">
<div class="flex items-start justify-between">
<div class="flex items-start gap-3">
<div class="bg-primary/10 rounded-lg p-2">
<Database class="text-primary h-4 w-4" />
<div class="rounded-lg bg-primary/10 p-2">
<Database class="h-4 w-4 text-primary" />
</div>
<div class="space-y-1">
<h3 class="text-lg font-semibold">{profile.name}</h3>
<p class="text-muted-foreground text-sm">{profile.description}</p>
<p class="text-muted-foreground text-xs">
<p class="text-sm text-muted-foreground">{profile.description}</p>
<p class="text-xs text-muted-foreground">
{#if profile.createdAt}
Created {DateFormat.format(timestampDate(profile.createdAt))}
{/if}
@@ -331,28 +336,28 @@
<div class="grid grid-cols-2 gap-4 md:grid-cols-4">
<div class="text-center">
<div class="text-2xl font-bold text-blue-600">{$agents?.length}</div>
<div class="text-muted-foreground text-xs">Agents</div>
<div class="text-xs text-muted-foreground">Agents</div>
</div>
<div class="text-center">
<div class="text-2xl font-bold text-green-600">
{$routers?.length}
</div>
<div class="text-muted-foreground text-xs">Routers</div>
<div class="text-xs text-muted-foreground">Routers</div>
</div>
<div class="text-center">
<div class="text-2xl font-bold text-orange-600">
{$services?.length}
</div>
<div class="text-muted-foreground text-xs">Services</div>
<div class="text-xs text-muted-foreground">Services</div>
</div>
<div class="text-center">
<div class="text-2xl font-bold text-purple-600">
{$middlewares?.length}
</div>
<div class="text-muted-foreground text-xs">Middlewares</div>
<div class="text-xs text-muted-foreground">Middlewares</div>
</div>
</div>
@@ -419,9 +424,9 @@
<div>
<p class="line-clamp-1 text-sm" title={log.details}>{log.details}</p>
<div class="text-muted-foreground flex items-center gap-2 text-xs">
<div class="flex items-center gap-2 text-xs text-muted-foreground">
{#if log.createdAt}
<span class="text-muted-foreground text-xs">
<span class="text-xs text-muted-foreground">
{timeAgo(log.createdAt)}
</span>
{/if}

View File

@@ -165,7 +165,8 @@
</script>
<svelte:head>
<title>Agents</title>
<title>Agents - Mantrae</title>
<meta name="description" content="Monitor and manage your connected Mantrae agents for distributed reverse proxy management" />
</svelte:head>
<div class="flex flex-col gap-2">

View File

@@ -202,7 +202,8 @@
</script>
<svelte:head>
<title>DNS Providers</title>
<title>DNS Providers - Mantrae</title>
<meta name="description" content="Manage your DNS providers for automatic DNS challenge resolution with Let's Encrypt" />
</svelte:head>
<div class="flex flex-col gap-2">

View File

@@ -155,7 +155,8 @@
</script>
<svelte:head>
<title>EntryPoints</title>
<title>EntryPoints - Mantrae</title>
<meta name="description" content="Configure entrypoints for your reverse proxy to listen for incoming connections" />
</svelte:head>
<div class="flex flex-col gap-2">

View File

@@ -1,3 +1,8 @@
<svelte:head>
<title>Login - Mantrae</title>
<meta name="description" content="Sign in to your Mantrae account to manage your reverse proxy configurations" />
</svelte:head>
<script lang="ts">
import { goto } from '$app/navigation';
import { handleOIDCLogin, profileClient, userClient } from '$lib/api';

View File

@@ -1,3 +1,8 @@
<svelte:head>
<title>Reset Password - Mantrae</title>
<meta name="description" content="Reset your Mantrae account password using the one-time password sent to your email" />
</svelte:head>
<script lang="ts">
import * as InputOTP from '$lib/components/ui/input-otp/index.js';
import * as Card from '$lib/components/ui/card/index.js';

View File

@@ -246,7 +246,8 @@
</script>
<svelte:head>
<title>Middlewares</title>
<title>Middlewares - Mantrae</title>
<meta name="description" content="Manage HTTP and TCP middlewares to customize your reverse proxy behavior" />
</svelte:head>
<div class="flex flex-col gap-2">

View File

@@ -101,7 +101,8 @@
</script>
<svelte:head>
<title>Plugins</title>
<title>Plugins - Mantrae</title>
<meta name="description" content="Browse and manage Traefik plugins for extended reverse proxy functionality" />
</svelte:head>
<div class="mt-4 flex flex-col gap-4 p-4">

View File

@@ -324,7 +324,8 @@
</script>
<svelte:head>
<title>Routers</title>
<title>Routers - Mantrae</title>
<meta name="description" content="Manage your HTTP, TCP, and UDP routers for your reverse proxy configurations" />
</svelte:head>
<div class="flex flex-col gap-4 sm:gap-6">

View File

@@ -156,7 +156,8 @@
</script>
<svelte:head>
<title>Settings</title>
<title>Settings - Mantrae</title>
<meta name="description" content="Configure your Mantrae system settings, backup management, and authentication options" />
</svelte:head>
<BackupModal bind:open={showBackupList} />

View File

@@ -1,15 +1,17 @@
<script lang="ts">
import { serversTransportClient } from '$lib/api';
import ServerTransportModal from '$lib/components/modals/ServerTransportModal.svelte';
import ColumnBadge from '$lib/components/tables/ColumnBadge.svelte';
import DataTable from '$lib/components/tables/DataTable.svelte';
import TableActions from '$lib/components/tables/TableActions.svelte';
import type { BulkAction } from '$lib/components/tables/types';
import { renderComponent } from '$lib/components/ui/data-table';
import { ProtocolType } from '$lib/gen/mantrae/v1/protocol_pb';
import { type ServersTransport } from '$lib/gen/mantrae/v1/servers_transport_pb';
import { profile } from '$lib/stores/profile';
import { serversTransports } from '$lib/stores/realtime';
import type { IconComponent } from '$lib/types';
import { ConnectError } from '@connectrpc/connect';
import ServerTransportModal from '$lib/components/modals/ServerTransportModal.svelte';
import {
Globe,
Network,
@@ -22,8 +24,6 @@
} from '@lucide/svelte';
import type { ColumnDef } from '@tanstack/table-core';
import { toast } from 'svelte-sonner';
import { ProtocolType } from '$lib/gen/mantrae/v1/protocol_pb';
import { serversTransports } from '$lib/stores/realtime';
let item = $state({} as ServersTransport);
let open = $state(false);
@@ -186,19 +186,20 @@
</script>
<svelte:head>
<title>Server Transports</title>
<title>Server Transports - Mantrae</title>
<meta name="description" content="Configure HTTP and TCP server transports for your reverse proxy services" />
</svelte:head>
<div class="flex flex-col gap-2">
<div class="flex items-center justify-between">
<div>
<h1 class="flex items-center gap-3 text-3xl font-bold tracking-tight">
<div class="bg-primary/10 rounded-lg p-2">
<Truck class="text-primary h-6 w-6" />
<div class="rounded-lg bg-primary/10 p-2">
<Truck class="h-6 w-6 text-primary" />
</div>
Server Transports
</h1>
<p class="text-muted-foreground mt-1">Manage your server transports</p>
<p class="mt-1 text-muted-foreground">Manage your server transports</p>
</div>
</div>

View File

@@ -122,19 +122,20 @@
</script>
<svelte:head>
<title>Users</title>
<title>User Management - Mantrae</title>
<meta name="description" content="Manage your Mantrae users and access permissions for your reverse proxy system" />
</svelte:head>
<div class="flex flex-col gap-2">
<div class="flex items-center justify-between">
<div>
<h1 class="flex items-center gap-3 text-3xl font-bold tracking-tight">
<div class="bg-primary/10 rounded-lg p-2">
<Users class="text-primary h-6 w-6" />
<div class="rounded-lg bg-primary/10 p-2">
<Users class="h-6 w-6 text-primary" />
</div>
User Management
</h1>
<p class="text-muted-foreground mt-1">Manage your users and access management</p>
<p class="mt-1 text-muted-foreground">Manage your users and access management</p>
</div>
</div>

View File

@@ -1,3 +1,8 @@
<svelte:head>
<title>Welcome - Mantrae</title>
<meta name="description" content="Configure your Mantrae server connection to get started with reverse proxy management" />
</svelte:head>
<script lang="ts">
import * as Card from '$lib/components/ui/card/index.js';
import { Button } from '$lib/components/ui/button/index.js';