Compare commits
11 Commits
v1.0.0
...
feat/lazy-
| Author | SHA1 | Date | |
|---|---|---|---|
|
f9e581fcc2
|
|||
|
21cb4f5cfb
|
|||
|
5152852db5
|
|||
|
befca6144b
|
|||
|
6d82886270
|
|||
|
53ea5021d7
|
|||
|
ce03e2f681
|
|||
|
828332a786
|
|||
|
859e075407
|
|||
| 56e78231de | |||
|
|
be933ab1bb |
4
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
# Go
|
||||||
*.exe
|
*.exe
|
||||||
*.exe~
|
*.exe~
|
||||||
*.dll
|
*.dll
|
||||||
@@ -7,3 +8,6 @@
|
|||||||
*.out
|
*.out
|
||||||
go.work
|
go.work
|
||||||
*.env
|
*.env
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
node_modules
|
||||||
37
Makefile
@@ -1,13 +1,38 @@
|
|||||||
install-tools:
|
#
|
||||||
go install github.com/bufbuild/buf/cmd/buf@v1.27.2
|
# Dev Tools
|
||||||
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@v4.17.0
|
#
|
||||||
|
|
||||||
generate-protobufs:
|
.PHONY: install-tools
|
||||||
|
install-tools:
|
||||||
|
go install github.com/bufbuild/buf/cmd/buf@v1.27.2 && \
|
||||||
|
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@v4.17.0 && \
|
||||||
|
npm install
|
||||||
|
|
||||||
|
#
|
||||||
|
# Code Gen
|
||||||
|
#
|
||||||
|
|
||||||
|
.PHONY: gen-protobufs
|
||||||
|
gen-protobufs:
|
||||||
buf generate
|
buf generate
|
||||||
|
|
||||||
format:
|
.PHONY: gen-openapi
|
||||||
buf format -w
|
gen-openapi: gen-protobufs
|
||||||
|
npx openapi-generator-cli generate -g openapi-yaml -i schema/openapi/services.swagger.yaml -o schema/openapi -p outputFile=openapi.yaml
|
||||||
|
|
||||||
|
#
|
||||||
|
# Linting / Formatting
|
||||||
|
#
|
||||||
|
|
||||||
|
.PHONY: format-go
|
||||||
|
format-go:
|
||||||
|
buf format -w && \
|
||||||
gofmt -w -s .
|
gofmt -w -s .
|
||||||
|
|
||||||
|
#
|
||||||
|
# Deployment
|
||||||
|
#
|
||||||
|
|
||||||
|
.PHONY: deploy-docker
|
||||||
deploy-docker:
|
deploy-docker:
|
||||||
docker compose -f deploy/docker/compose.yaml -f deploy/docker/compose.override.yaml up --build
|
docker compose -f deploy/docker/compose.yaml -f deploy/docker/compose.override.yaml up --build
|
||||||
@@ -55,10 +55,15 @@ In the nature of open-source software, please consider contributing and giving b
|
|||||||
* [google.golang.org/protobuf](https://pkg.go.dev/google.golang.org/protobuf)
|
* [google.golang.org/protobuf](https://pkg.go.dev/google.golang.org/protobuf)
|
||||||
* [github.com/bufbuild/protovalidate-go](https://pkg.go.dev/github.com/bufbuild/protovalidate-go)
|
* [github.com/bufbuild/protovalidate-go](https://pkg.go.dev/github.com/bufbuild/protovalidate-go)
|
||||||
|
|
||||||
|
* Frontend
|
||||||
|
* [github.com/sveltejs/kit](https://github.com/sveltejs/kit)
|
||||||
|
* [github.com/tailwindlabs/tailwindcss](https://github.com/tailwindlabs/tailwindcss)
|
||||||
|
|
||||||
* Tools
|
* Tools
|
||||||
* [plantuml.com](https://plantuml.com/)
|
* [plantuml.com](https://plantuml.com/)
|
||||||
* [github.com/bufbuild/buf/cmd/buf](https://buf.build/docs/installation)
|
* [github.com/bufbuild/buf/cmd/buf](https://buf.build/docs/installation)
|
||||||
* [github.com/golang-migrate/migrate/v4](https://pkg.go.dev/github.com/golang-migrate/migrate/v4#section-readme)
|
* [github.com/golang-migrate/migrate/v4](https://pkg.go.dev/github.com/golang-migrate/migrate/v4#section-readme)
|
||||||
|
* [github.com/openapitools/openapi-generator](https://github.com/openapitools/openapi-generator)
|
||||||
|
|
||||||
* Miscellaneous
|
* Miscellaneous
|
||||||
* [golang.org/x/crypto/bcrypt](https://pkg.go.dev/golang.org/x/crypto/bcrypt)
|
* [golang.org/x/crypto/bcrypt](https://pkg.go.dev/golang.org/x/crypto/bcrypt)
|
||||||
|
|||||||
16
build/frontend/Dockerfile
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
FROM node:24-slim AS base
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install pnpm
|
||||||
|
RUN npm install -g pnpm
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
COPY package.json ./
|
||||||
|
COPY pnpm-lock.yaml ./
|
||||||
|
RUN pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
# Prepare application
|
||||||
|
COPY . ./
|
||||||
|
RUN pnpm build
|
||||||
|
|
||||||
|
CMD ["pnpm", "preview", "--host", "'0.0.0.0'", "--port", "5173"]
|
||||||
15
go.mod
@@ -1,7 +1,8 @@
|
|||||||
module github.com/hexolan/stocklet
|
module github.com/hexolan/stocklet
|
||||||
|
|
||||||
go 1.21.1
|
go 1.23.0
|
||||||
toolchain go1.23.7
|
|
||||||
|
toolchain go1.24.3
|
||||||
|
|
||||||
require (
|
require (
|
||||||
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231106192134-1baebb0a1518.2
|
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231106192134-1baebb0a1518.2
|
||||||
@@ -19,7 +20,7 @@ require (
|
|||||||
go.opentelemetry.io/otel v1.21.0
|
go.opentelemetry.io/otel v1.21.0
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0
|
||||||
go.opentelemetry.io/otel/sdk v1.21.0
|
go.opentelemetry.io/otel/sdk v1.21.0
|
||||||
golang.org/x/crypto v0.35.0
|
golang.org/x/crypto v0.36.0
|
||||||
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa
|
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17
|
google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17
|
||||||
google.golang.org/grpc v1.59.0
|
google.golang.org/grpc v1.59.0
|
||||||
@@ -62,10 +63,10 @@ require (
|
|||||||
go.opentelemetry.io/otel/trace v1.21.0 // indirect
|
go.opentelemetry.io/otel/trace v1.21.0 // indirect
|
||||||
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
|
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
|
||||||
go.uber.org/atomic v1.11.0 // indirect
|
go.uber.org/atomic v1.11.0 // indirect
|
||||||
golang.org/x/net v0.36.0 // indirect
|
golang.org/x/net v0.38.0 // indirect
|
||||||
golang.org/x/sync v0.11.0 // indirect
|
golang.org/x/sync v0.12.0 // indirect
|
||||||
golang.org/x/sys v0.30.0 // indirect
|
golang.org/x/sys v0.31.0 // indirect
|
||||||
golang.org/x/text v0.22.0 // indirect
|
golang.org/x/text v0.23.0 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect
|
google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
20
go.sum
@@ -168,29 +168,29 @@ go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
|||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
|
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
|
||||||
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
|
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
|
||||||
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
|
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
|
||||||
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
|
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
|
||||||
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
|
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
|
||||||
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA=
|
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
|
||||||
golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I=
|
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
|
||||||
golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
|
golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
|
||||||
golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
|
golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
|
||||||
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
||||||
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
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.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
|
||||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
|
||||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
|
||||||
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
|
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
|
||||||
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
|
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
|||||||
7
openapitools.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
|
||||||
|
"spaces": 2,
|
||||||
|
"generator-cli": {
|
||||||
|
"version": "7.14.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
2352
package-lock.json
generated
Normal file
5
package.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"devDependencies": {
|
||||||
|
"@openapitools/openapi-generator-cli": "^2.21.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
3
schema/openapi/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
.openapi-generator
|
||||||
|
.openapi-generator-ignore
|
||||||
|
README.md
|
||||||
1107
schema/openapi/openapi.yaml
Normal file
1
web/.env.example
Normal file
@@ -0,0 +1 @@
|
|||||||
|
PUBLIC_API_URL=http://localhost:80/
|
||||||
23
web/.gitignore
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
node_modules
|
||||||
|
|
||||||
|
# Output
|
||||||
|
.output
|
||||||
|
.vercel
|
||||||
|
.netlify
|
||||||
|
.wrangler
|
||||||
|
/.svelte-kit
|
||||||
|
/build
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Env
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
!.env.test
|
||||||
|
|
||||||
|
# Vite
|
||||||
|
vite.config.js.timestamp-*
|
||||||
|
vite.config.ts.timestamp-*
|
||||||
1
web/.npmrc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
engine-strict=true
|
||||||
9
web/.prettierignore
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Package Managers
|
||||||
|
package-lock.json
|
||||||
|
pnpm-lock.yaml
|
||||||
|
yarn.lock
|
||||||
|
bun.lock
|
||||||
|
bun.lockb
|
||||||
|
|
||||||
|
# Miscellaneous
|
||||||
|
/static/
|
||||||
16
web/.prettierrc
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"useTabs": true,
|
||||||
|
"singleQuote": true,
|
||||||
|
"trailingComma": "none",
|
||||||
|
"printWidth": 100,
|
||||||
|
"plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": "*.svelte",
|
||||||
|
"options": {
|
||||||
|
"parser": "svelte"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tailwindStylesheet": "./src/app.css"
|
||||||
|
}
|
||||||
40
web/eslint.config.js
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import prettier from 'eslint-config-prettier';
|
||||||
|
import { includeIgnoreFile } from '@eslint/compat';
|
||||||
|
import js from '@eslint/js';
|
||||||
|
import svelte from 'eslint-plugin-svelte';
|
||||||
|
import globals from 'globals';
|
||||||
|
import { fileURLToPath } from 'node:url';
|
||||||
|
import ts from 'typescript-eslint';
|
||||||
|
import svelteConfig from './svelte.config.js';
|
||||||
|
|
||||||
|
const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url));
|
||||||
|
|
||||||
|
export default ts.config(
|
||||||
|
includeIgnoreFile(gitignorePath),
|
||||||
|
js.configs.recommended,
|
||||||
|
...ts.configs.recommended,
|
||||||
|
...svelte.configs.recommended,
|
||||||
|
prettier,
|
||||||
|
...svelte.configs.prettier,
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
globals: { ...globals.browser, ...globals.node }
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
// typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects.
|
||||||
|
// see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors
|
||||||
|
'no-undef': 'off'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'],
|
||||||
|
languageOptions: {
|
||||||
|
parserOptions: {
|
||||||
|
projectService: true,
|
||||||
|
extraFileExtensions: ['.svelte'],
|
||||||
|
parser: ts.parser,
|
||||||
|
svelteConfig
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
53
web/package.json
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"name": "web",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.1",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite dev",
|
||||||
|
"build": "vite build",
|
||||||
|
"preview": "vite preview",
|
||||||
|
"prepare": "svelte-kit sync || echo ''",
|
||||||
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||||
|
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
||||||
|
"format": "prettier --write .",
|
||||||
|
"lint": "prettier --check . && eslint .",
|
||||||
|
"gen-openapi": "openapi-typescript ../schema/openapi/openapi.yaml -o ./src/lib/api/schema.d.ts"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@eslint/compat": "^1.2.5",
|
||||||
|
"@eslint/js": "^9.18.0",
|
||||||
|
"@sveltejs/adapter-auto": "^6.0.0",
|
||||||
|
"@sveltejs/adapter-node": "^5.2.14",
|
||||||
|
"@sveltejs/adapter-static": "^3.0.9",
|
||||||
|
"@sveltejs/kit": "^2.22.0",
|
||||||
|
"@sveltejs/vite-plugin-svelte": "^6.0.0",
|
||||||
|
"@tailwindcss/typography": "^0.5.15",
|
||||||
|
"@tailwindcss/vite": "^4.0.0",
|
||||||
|
"eslint": "^9.18.0",
|
||||||
|
"eslint-config-prettier": "^10.0.1",
|
||||||
|
"eslint-plugin-svelte": "^3.0.0",
|
||||||
|
"globals": "^16.0.0",
|
||||||
|
"openapi-typescript": "^7.8.0",
|
||||||
|
"prettier": "^3.4.2",
|
||||||
|
"prettier-plugin-svelte": "^3.3.3",
|
||||||
|
"prettier-plugin-tailwindcss": "^0.6.11",
|
||||||
|
"svelte": "^5.0.0",
|
||||||
|
"svelte-check": "^4.0.0",
|
||||||
|
"tailwindcss": "^4.0.0",
|
||||||
|
"typescript": "^5.0.0",
|
||||||
|
"typescript-eslint": "^8.20.0",
|
||||||
|
"vite": "^7.0.4"
|
||||||
|
},
|
||||||
|
"pnpm": {
|
||||||
|
"onlyBuiltDependencies": [
|
||||||
|
"esbuild"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@lucide/svelte": "^0.540.0",
|
||||||
|
"bits-ui": "^2.11.4",
|
||||||
|
"next-translate": "^2.6.2",
|
||||||
|
"openapi-fetch": "^0.14.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
3570
web/pnpm-lock.yaml
generated
Normal file
209
web/src/app.css
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
@import 'tailwindcss';
|
||||||
|
|
||||||
|
@plugin '@tailwindcss/typography';
|
||||||
|
|
||||||
|
[data-theme='catppuccin'] {
|
||||||
|
--text-scaling: 1.067;
|
||||||
|
--base-font-color: var(--color-surface-700);
|
||||||
|
--base-font-color-dark: var(--color-surface-50);
|
||||||
|
--base-font-family: system-ui;
|
||||||
|
--base-font-size: inherit;
|
||||||
|
--base-line-height: inherit;
|
||||||
|
--base-font-weight: normal;
|
||||||
|
--base-font-style: normal;
|
||||||
|
--base-letter-spacing: 0em;
|
||||||
|
--heading-font-color: var(--color-tertiary-500);
|
||||||
|
--heading-font-color-dark: var(--color-secondary-200);
|
||||||
|
--heading-font-family: Seravek, 'Gill Sans Nova', Ubuntu, Calibri, 'DejaVu Sans', source-sans-pro, sans-serif;
|
||||||
|
--heading-font-weight: bolder;
|
||||||
|
--heading-font-style: normal;
|
||||||
|
--heading-letter-spacing: inherit;
|
||||||
|
--anchor-font-color: var(--color-secondary-600);
|
||||||
|
--anchor-font-color-dark: var(--color-tertiary-400);
|
||||||
|
--anchor-font-family: inherit;
|
||||||
|
--anchor-font-size: inherit;
|
||||||
|
--anchor-line-height: inherit;
|
||||||
|
--anchor-font-weight: normal;
|
||||||
|
--anchor-font-style: normal;
|
||||||
|
--anchor-letter-spacing: inherit;
|
||||||
|
--anchor-text-decoration: none;
|
||||||
|
--anchor-text-decoration-hover: underline;
|
||||||
|
--anchor-text-decoration-active: none;
|
||||||
|
--anchor-text-decoration-focus: none;
|
||||||
|
--spacing: 0.25rem;
|
||||||
|
--radius-base: 0.75rem;
|
||||||
|
--radius-container: 0.75rem;
|
||||||
|
--default-border-width: 2px;
|
||||||
|
--default-divide-width: 1px;
|
||||||
|
--default-ring-width: 1px;
|
||||||
|
--body-background-color: oklch(1 0 0 / 1);
|
||||||
|
--body-background-color-dark: var(--color-surface-950);
|
||||||
|
--color-primary-50: oklch(97.6% 0.02 212.47deg);
|
||||||
|
--color-primary-100: oklch(91.32% 0.04 257.13deg);
|
||||||
|
--color-primary-200: oklch(84.83% 0.07 268.85deg);
|
||||||
|
--color-primary-300: oklch(78.59% 0.11 272.12deg);
|
||||||
|
--color-primary-400: oklch(72.23% 0.14 273.55deg);
|
||||||
|
--color-primary-500: oklch(66.25% 0.18 273.14deg);
|
||||||
|
--color-primary-600: oklch(63.84% 0.17 273.48deg);
|
||||||
|
--color-primary-700: oklch(61.62% 0.15 273.47deg);
|
||||||
|
--color-primary-800: oklch(59.25% 0.14 273.88deg);
|
||||||
|
--color-primary-900: oklch(57.01% 0.12 273.81deg);
|
||||||
|
--color-primary-950: oklch(54.55% 0.11 274.23deg);
|
||||||
|
--color-primary-contrast-dark: var(--color-primary-950);
|
||||||
|
--color-primary-contrast-light: var(--color-primary-50);
|
||||||
|
--color-primary-contrast-50: var(--color-primary-contrast-dark);
|
||||||
|
--color-primary-contrast-100: var(--color-primary-contrast-dark);
|
||||||
|
--color-primary-contrast-200: var(--color-primary-contrast-dark);
|
||||||
|
--color-primary-contrast-300: var(--color-primary-contrast-dark);
|
||||||
|
--color-primary-contrast-400: var(--color-primary-contrast-light);
|
||||||
|
--color-primary-contrast-500: var(--color-primary-contrast-light);
|
||||||
|
--color-primary-contrast-600: var(--color-primary-contrast-light);
|
||||||
|
--color-primary-contrast-700: var(--color-primary-contrast-light);
|
||||||
|
--color-primary-contrast-800: var(--color-primary-contrast-light);
|
||||||
|
--color-primary-contrast-900: var(--color-primary-contrast-light);
|
||||||
|
--color-primary-contrast-950: var(--color-primary-contrast-light);
|
||||||
|
--color-secondary-50: oklch(87.05% 0.08 336.55deg);
|
||||||
|
--color-secondary-100: oklch(83.93% 0.1 336.74deg);
|
||||||
|
--color-secondary-200: oklch(80.87% 0.12 337.02deg);
|
||||||
|
--color-secondary-300: oklch(78.17% 0.13 337.85deg);
|
||||||
|
--color-secondary-400: oklch(75.29% 0.15 338.19deg);
|
||||||
|
--color-secondary-500: oklch(72.53% 0.17 338.6deg);
|
||||||
|
--color-secondary-600: oklch(66.07% 0.16 338.29deg);
|
||||||
|
--color-secondary-700: oklch(59.56% 0.14 338.49deg);
|
||||||
|
--color-secondary-800: oklch(52.62% 0.12 337.58deg);
|
||||||
|
--color-secondary-900: oklch(45.7% 0.11 337.72deg);
|
||||||
|
--color-secondary-950: oklch(38.38% 0.09 336.89deg);
|
||||||
|
--color-secondary-contrast-dark: var(--color-secondary-950);
|
||||||
|
--color-secondary-contrast-light: var(--color-secondary-50);
|
||||||
|
--color-secondary-contrast-50: var(--color-secondary-contrast-dark);
|
||||||
|
--color-secondary-contrast-100: var(--color-secondary-contrast-dark);
|
||||||
|
--color-secondary-contrast-200: var(--color-secondary-contrast-dark);
|
||||||
|
--color-secondary-contrast-300: var(--color-secondary-contrast-dark);
|
||||||
|
--color-secondary-contrast-400: var(--color-secondary-contrast-dark);
|
||||||
|
--color-secondary-contrast-500: var(--color-secondary-contrast-dark);
|
||||||
|
--color-secondary-contrast-600: var(--color-secondary-contrast-dark);
|
||||||
|
--color-secondary-contrast-700: var(--color-secondary-contrast-light);
|
||||||
|
--color-secondary-contrast-800: var(--color-secondary-contrast-light);
|
||||||
|
--color-secondary-contrast-900: var(--color-secondary-contrast-light);
|
||||||
|
--color-secondary-contrast-950: var(--color-secondary-contrast-light);
|
||||||
|
--color-tertiary-50: oklch(85.8% 0.08 182.85deg);
|
||||||
|
--color-tertiary-100: oklch(80.55% 0.09 187.22deg);
|
||||||
|
--color-tertiary-200: oklch(75.29% 0.09 190.97deg);
|
||||||
|
--color-tertiary-300: oklch(70.14% 0.1 194.28deg);
|
||||||
|
--color-tertiary-400: oklch(65.06% 0.1 197.47deg);
|
||||||
|
--color-tertiary-500: oklch(60.13% 0.1 200.95deg);
|
||||||
|
--color-tertiary-600: oklch(55.26% 0.09 199.74deg);
|
||||||
|
--color-tertiary-700: oklch(50.32% 0.08 199.32deg);
|
||||||
|
--color-tertiary-800: oklch(45.24% 0.07 197.5deg);
|
||||||
|
--color-tertiary-900: oklch(40.06% 0.06 196.51deg);
|
||||||
|
--color-tertiary-950: oklch(34.72% 0.05 193.09deg);
|
||||||
|
--color-tertiary-contrast-dark: var(--color-tertiary-950);
|
||||||
|
--color-tertiary-contrast-light: var(--color-tertiary-50);
|
||||||
|
--color-tertiary-contrast-50: var(--color-tertiary-contrast-dark);
|
||||||
|
--color-tertiary-contrast-100: var(--color-tertiary-contrast-dark);
|
||||||
|
--color-tertiary-contrast-200: var(--color-tertiary-contrast-dark);
|
||||||
|
--color-tertiary-contrast-300: var(--color-tertiary-contrast-dark);
|
||||||
|
--color-tertiary-contrast-400: var(--color-tertiary-contrast-dark);
|
||||||
|
--color-tertiary-contrast-500: var(--color-tertiary-contrast-dark);
|
||||||
|
--color-tertiary-contrast-600: var(--color-tertiary-contrast-light);
|
||||||
|
--color-tertiary-contrast-700: var(--color-tertiary-contrast-light);
|
||||||
|
--color-tertiary-contrast-800: var(--color-tertiary-contrast-light);
|
||||||
|
--color-tertiary-contrast-900: var(--color-tertiary-contrast-light);
|
||||||
|
--color-tertiary-contrast-950: var(--color-tertiary-contrast-light);
|
||||||
|
--color-success-50: oklch(85.77% 0.11 142.7deg);
|
||||||
|
--color-success-100: oklch(81.11% 0.13 141.89deg);
|
||||||
|
--color-success-200: oklch(76.23% 0.14 141.28deg);
|
||||||
|
--color-success-300: oklch(71.66% 0.16 140.48deg);
|
||||||
|
--color-success-400: oklch(66.87% 0.17 140.33deg);
|
||||||
|
--color-success-500: oklch(62.41% 0.18 140.43deg);
|
||||||
|
--color-success-600: oklch(57.85% 0.16 140.84deg);
|
||||||
|
--color-success-700: oklch(52.9% 0.14 141.79deg);
|
||||||
|
--color-success-800: oklch(48.16% 0.12 142.88deg);
|
||||||
|
--color-success-900: oklch(43% 0.1 145.42deg);
|
||||||
|
--color-success-950: oklch(38.04% 0.08 149.33deg);
|
||||||
|
--color-success-contrast-dark: var(--color-success-950);
|
||||||
|
--color-success-contrast-light: var(--color-success-50);
|
||||||
|
--color-success-contrast-50: var(--color-success-contrast-dark);
|
||||||
|
--color-success-contrast-100: var(--color-success-contrast-dark);
|
||||||
|
--color-success-contrast-200: var(--color-success-contrast-dark);
|
||||||
|
--color-success-contrast-300: var(--color-success-contrast-dark);
|
||||||
|
--color-success-contrast-400: var(--color-success-contrast-dark);
|
||||||
|
--color-success-contrast-500: var(--color-success-contrast-dark);
|
||||||
|
--color-success-contrast-600: var(--color-success-contrast-light);
|
||||||
|
--color-success-contrast-700: var(--color-success-contrast-light);
|
||||||
|
--color-success-contrast-800: var(--color-success-contrast-light);
|
||||||
|
--color-success-contrast-900: var(--color-success-contrast-light);
|
||||||
|
--color-success-contrast-950: var(--color-success-contrast-light);
|
||||||
|
--color-warning-50: oklch(91.93% 0.07 86.52deg);
|
||||||
|
--color-warning-100: oklch(87.62% 0.09 81.75deg);
|
||||||
|
--color-warning-200: oklch(83.36% 0.11 78.43deg);
|
||||||
|
--color-warning-300: oklch(79.3% 0.12 76.32deg);
|
||||||
|
--color-warning-400: oklch(75.26% 0.14 72.68deg);
|
||||||
|
--color-warning-500: oklch(71.4% 0.15 67.88deg);
|
||||||
|
--color-warning-600: oklch(65.78% 0.14 69.03deg);
|
||||||
|
--color-warning-700: oklch(60.37% 0.12 70.57deg);
|
||||||
|
--color-warning-800: oklch(54.52% 0.1 72.35deg);
|
||||||
|
--color-warning-900: oklch(48.88% 0.09 74.8deg);
|
||||||
|
--color-warning-950: oklch(42.76% 0.07 78.06deg);
|
||||||
|
--color-warning-contrast-dark: var(--color-warning-950);
|
||||||
|
--color-warning-contrast-light: var(--color-warning-50);
|
||||||
|
--color-warning-contrast-50: var(--color-warning-contrast-dark);
|
||||||
|
--color-warning-contrast-100: var(--color-warning-contrast-dark);
|
||||||
|
--color-warning-contrast-200: var(--color-warning-contrast-dark);
|
||||||
|
--color-warning-contrast-300: var(--color-warning-contrast-dark);
|
||||||
|
--color-warning-contrast-400: var(--color-warning-contrast-dark);
|
||||||
|
--color-warning-contrast-500: var(--color-warning-contrast-dark);
|
||||||
|
--color-warning-contrast-600: var(--color-warning-contrast-dark);
|
||||||
|
--color-warning-contrast-700: var(--color-warning-contrast-light);
|
||||||
|
--color-warning-contrast-800: var(--color-warning-contrast-light);
|
||||||
|
--color-warning-contrast-900: var(--color-warning-contrast-light);
|
||||||
|
--color-warning-contrast-950: var(--color-warning-contrast-light);
|
||||||
|
--color-error-50: oklch(75.56% 0.13 2.78deg);
|
||||||
|
--color-error-100: oklch(70.18% 0.16 4.89deg);
|
||||||
|
--color-error-200: oklch(65.27% 0.18 7.81deg);
|
||||||
|
--color-error-300: oklch(60.81% 0.2 10.57deg);
|
||||||
|
--color-error-400: oklch(57.47% 0.22 14.92deg);
|
||||||
|
--color-error-500: oklch(55.13% 0.22 19.72deg);
|
||||||
|
--color-error-600: oklch(50.99% 0.2 18.37deg);
|
||||||
|
--color-error-700: oklch(46.81% 0.18 16.65deg);
|
||||||
|
--color-error-800: oklch(42.42% 0.16 14.8deg);
|
||||||
|
--color-error-900: oklch(38.31% 0.14 12.11deg);
|
||||||
|
--color-error-950: oklch(34.35% 0.11 8.63deg);
|
||||||
|
--color-error-contrast-dark: var(--color-error-950);
|
||||||
|
--color-error-contrast-light: var(--color-error-50);
|
||||||
|
--color-error-contrast-50: var(--color-error-contrast-dark);
|
||||||
|
--color-error-contrast-100: var(--color-error-contrast-dark);
|
||||||
|
--color-error-contrast-200: var(--color-error-contrast-dark);
|
||||||
|
--color-error-contrast-300: var(--color-error-contrast-dark);
|
||||||
|
--color-error-contrast-400: var(--color-error-contrast-dark);
|
||||||
|
--color-error-contrast-500: var(--color-error-contrast-light);
|
||||||
|
--color-error-contrast-600: var(--color-error-contrast-light);
|
||||||
|
--color-error-contrast-700: var(--color-error-contrast-light);
|
||||||
|
--color-error-contrast-800: var(--color-error-contrast-light);
|
||||||
|
--color-error-contrast-900: var(--color-error-contrast-light);
|
||||||
|
--color-error-contrast-950: var(--color-error-contrast-light);
|
||||||
|
--color-surface-50: oklch(90.64% 0.01 267.4deg);
|
||||||
|
--color-surface-100: oklch(85.79% 0.01 271.31deg);
|
||||||
|
--color-surface-200: oklch(80.91% 0.02 274.81deg);
|
||||||
|
--color-surface-300: oklch(75.63% 0.02 276.88deg);
|
||||||
|
--color-surface-400: oklch(70.59% 0.03 278.21deg);
|
||||||
|
--color-surface-500: oklch(65.43% 0.03 278.8deg);
|
||||||
|
--color-surface-600: oklch(57.8% 0.03 280.9deg);
|
||||||
|
--color-surface-700: oklch(50.1% 0.03 280.32deg);
|
||||||
|
--color-surface-800: oklch(41.9% 0.03 282.54deg);
|
||||||
|
--color-surface-900: oklch(33.48% 0.03 281.97deg);
|
||||||
|
--color-surface-950: oklch(24.29% 0.03 283.92deg);
|
||||||
|
--color-surface-contrast-dark: var(--color-surface-950);
|
||||||
|
--color-surface-contrast-light: var(--color-surface-50);
|
||||||
|
--color-surface-contrast-50: var(--color-surface-contrast-dark);
|
||||||
|
--color-surface-contrast-100: var(--color-surface-contrast-dark);
|
||||||
|
--color-surface-contrast-200: var(--color-surface-contrast-dark);
|
||||||
|
--color-surface-contrast-300: var(--color-surface-contrast-dark);
|
||||||
|
--color-surface-contrast-400: var(--color-surface-contrast-dark);
|
||||||
|
--color-surface-contrast-500: var(--color-surface-contrast-dark);
|
||||||
|
--color-surface-contrast-600: var(--color-surface-contrast-dark);
|
||||||
|
--color-surface-contrast-700: var(--color-surface-contrast-light);
|
||||||
|
--color-surface-contrast-800: var(--color-surface-contrast-light);
|
||||||
|
--color-surface-contrast-900: var(--color-surface-contrast-light);
|
||||||
|
--color-surface-contrast-950: var(--color-surface-contrast-light);
|
||||||
|
}
|
||||||
13
web/src/app.d.ts
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// See https://svelte.dev/docs/kit/types#app.d.ts
|
||||||
|
// for information about these interfaces
|
||||||
|
declare global {
|
||||||
|
namespace App {
|
||||||
|
// interface Error {}
|
||||||
|
// interface Locals {}
|
||||||
|
// interface PageData {}
|
||||||
|
// interface PageState {}
|
||||||
|
// interface Platform {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {};
|
||||||
11
web/src/app.html
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
%sveltekit.head%
|
||||||
|
</head>
|
||||||
|
<body data-sveltekit-preload-data="hover">
|
||||||
|
<div style="display: contents">%sveltekit.body%</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
10
web/src/components/Footer.svelte
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import LightDarkMode from './LightDarkMode.svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<footer class="border-t border-surface-200-800 bg-surface-100-900 fixed bottom-0 w-full z-10">
|
||||||
|
<div class="mx-auto flex w-full max-w-7xl items-center justify-between px-4 py-6 text-sm text-surface-700-300">
|
||||||
|
<span>Stocklet</span>
|
||||||
|
<LightDarkMode />
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
39
web/src/components/LightDarkMode.svelte
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { Label, Switch } from "bits-ui";
|
||||||
|
|
||||||
|
let checked = $state(false);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
const mode = localStorage.getItem('mode') || 'light';
|
||||||
|
checked = mode === 'dark';
|
||||||
|
document.documentElement.setAttribute('data-mode', mode);
|
||||||
|
});
|
||||||
|
|
||||||
|
const onCheckedChange = (event: { checked: boolean }) => {
|
||||||
|
const mode = event.checked ? 'dark' : 'light';
|
||||||
|
document.documentElement.setAttribute('data-mode', mode);
|
||||||
|
localStorage.setItem('mode', mode);
|
||||||
|
checked = event.checked;
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svelte:head>
|
||||||
|
<script>
|
||||||
|
const mode = localStorage.getItem('mode') || 'light';
|
||||||
|
document.documentElement.setAttribute('data-mode', mode);
|
||||||
|
</script>
|
||||||
|
</svelte:head>
|
||||||
|
|
||||||
|
<div class="flex items-center space-x-3">
|
||||||
|
<Switch.Root
|
||||||
|
id="light-dark"
|
||||||
|
checked={checked}
|
||||||
|
onCheckedChange={(change) => { onCheckedChange({ checked: change }) }}
|
||||||
|
class="focus-visible:ring-foreground focus-visible:ring-offset-background data-[state=checked]:bg-foreground data-[state=unchecked]:bg-dark-10 data-[state=unchecked]:shadow-mini-inset dark:data-[state=checked]:bg-foreground focus-visible:outline-hidden peer inline-flex h-[36px] min-h-[36px] w-[60px] shrink-0 cursor-pointer items-center rounded-full px-[3px] transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
|
||||||
|
>
|
||||||
|
<Switch.Thumb
|
||||||
|
class="bg-background data-[state=unchecked]:shadow-mini dark:border-background/30 dark:bg-foreground dark:shadow-popover pointer-events-none block size-[30px] shrink-0 rounded-full transition-transform data-[state=checked]:translate-x-6 data-[state=unchecked]:translate-x-0 dark:border dark:data-[state=unchecked]:border"
|
||||||
|
/>
|
||||||
|
</Switch.Root>
|
||||||
|
<Label.Root for="light-dark" class="text-sm font-medium">Light / Dark</Label.Root>
|
||||||
|
</div>
|
||||||
35
web/src/components/Navbar.svelte
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import "../app.css";
|
||||||
|
|
||||||
|
import { ShoppingCart, User } from '@lucide/svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<header class="border-b border-surface-200-800 bg-surface-100-900">
|
||||||
|
<div class="mx-auto w-full max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<div class="flex h-16 items-center justify-between">
|
||||||
|
<div class="mx-12">
|
||||||
|
<a href="/" class="flex items-center gap-2 font-semibold">
|
||||||
|
<img src="/assets/logo.svg" alt="Stocklet" class="h-8 w-auto dark:hidden" />
|
||||||
|
<img src="/assets/logo-light.svg" alt="Stocklet" class="h-8 w-auto hidden dark:block" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="bg-transparent w-auto p-0 mx-12">
|
||||||
|
<a href="/">Home</a>
|
||||||
|
<a href="/about">About</a>
|
||||||
|
|
||||||
|
<div class="flex flex-row gap-4">
|
||||||
|
<a href="/" title="Cart">
|
||||||
|
<p>Cart</p>
|
||||||
|
<ShoppingCart class="h-6 w-6" />
|
||||||
|
</a>
|
||||||
|
<a href="/" title="User">
|
||||||
|
<p>User</p>
|
||||||
|
<User class="h-6 w-6" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
8
web/src/lib/api/client.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import createClient from "openapi-fetch";
|
||||||
|
|
||||||
|
import type { paths } from "./schema.d";
|
||||||
|
import { API_URL } from "../config";
|
||||||
|
|
||||||
|
const client = createClient<paths>({ baseUrl: API_URL });
|
||||||
|
|
||||||
|
export default client;
|
||||||
1614
web/src/lib/api/schema.d.ts
vendored
Normal file
1
web/src/lib/assets/favicon.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.157 22.819c-10.4-14.885-30.94-19.297-45.792-9.835L22.282 29.608A29.92 29.92 0 0 0 8.764 49.65a31.5 31.5 0 0 0 3.108 20.231 30 30 0 0 0-4.477 11.183 31.9 31.9 0 0 0 5.448 24.116c10.402 14.887 30.942 19.297 45.791 9.835l26.083-16.624A29.92 29.92 0 0 0 98.235 78.35a31.53 31.53 0 0 0-3.105-20.232 30 30 0 0 0 4.474-11.182 31.88 31.88 0 0 0-5.447-24.116" style="fill:#ff3e00"/><path d="M45.817 106.582a20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.503 18 18 0 0 1 .624-2.435l.49-1.498 1.337.981a33.6 33.6 0 0 0 10.203 5.098l.97.294-.09.968a5.85 5.85 0 0 0 1.052 3.878 6.24 6.24 0 0 0 6.695 2.485 5.8 5.8 0 0 0 1.603-.704L69.27 76.28a5.43 5.43 0 0 0 2.45-3.631 5.8 5.8 0 0 0-.987-4.371 6.24 6.24 0 0 0-6.698-2.487 5.7 5.7 0 0 0-1.6.704l-9.953 6.345a19 19 0 0 1-5.296 2.326 20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.502 17.99 17.99 0 0 1 8.13-12.052l26.081-16.623a19 19 0 0 1 5.3-2.329 20.72 20.72 0 0 1 22.237 8.243 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-.624 2.435l-.49 1.498-1.337-.98a33.6 33.6 0 0 0-10.203-5.1l-.97-.294.09-.968a5.86 5.86 0 0 0-1.052-3.878 6.24 6.24 0 0 0-6.696-2.485 5.8 5.8 0 0 0-1.602.704L37.73 51.72a5.42 5.42 0 0 0-2.449 3.63 5.79 5.79 0 0 0 .986 4.372 6.24 6.24 0 0 0 6.698 2.486 5.8 5.8 0 0 0 1.602-.704l9.952-6.342a19 19 0 0 1 5.295-2.328 20.72 20.72 0 0 1 22.237 8.242 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-8.13 12.053l-26.081 16.622a19 19 0 0 1-5.3 2.328" style="fill:#fff"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
3
web/src/lib/config.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { PUBLIC_API_URL } from "$env/static/public";
|
||||||
|
|
||||||
|
export const API_URL = PUBLIC_API_URL || "http://localhost:80/v1/";
|
||||||
1
web/src/lib/index.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// place files you want to import through the `$lib` alias in this folder.
|
||||||
0
web/src/lib/types/general.ts
Normal file
25
web/src/routes/+layout.svelte
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import Navbar from '../components/Navbar.svelte';
|
||||||
|
import Footer from '../components/Footer.svelte';
|
||||||
|
|
||||||
|
import '../app.css';
|
||||||
|
import favicon from '$lib/assets/favicon.svg';
|
||||||
|
|
||||||
|
let { children } = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svelte:head>
|
||||||
|
<title>Stocklet</title>
|
||||||
|
|
||||||
|
<link rel="icon" href={favicon} />
|
||||||
|
</svelte:head>
|
||||||
|
|
||||||
|
<main data-theme="catppuccin" class="min-h-screen h-full">
|
||||||
|
<div>
|
||||||
|
<Navbar />
|
||||||
|
|
||||||
|
{@render children?.()}
|
||||||
|
|
||||||
|
<Footer />
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
7
web/src/routes/+page.svelte
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h5 class="text-xl">Homepage</h5>
|
||||||
|
</div>
|
||||||
0
web/src/routes/admin/.gitkeep
Normal file
0
web/src/routes/auth/.gitkeep
Normal file
18
web/src/routes/orders/+page.svelte
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { components } from '$lib/api/schema';
|
||||||
|
|
||||||
|
const orders: components['schemas']['v1Order'][] = [
|
||||||
|
{
|
||||||
|
id: '1',
|
||||||
|
status: 'ORDER_STATUS_PENDING',
|
||||||
|
items: {
|
||||||
|
'1': 1,
|
||||||
|
'2': 2,
|
||||||
|
},
|
||||||
|
customerId: '1',
|
||||||
|
transactionId: '1',
|
||||||
|
createdAt: Date.now().toString(),
|
||||||
|
updatedAt: Date.now().toString(),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
</script>
|
||||||
7
web/src/routes/orders/[id]/+page.svelte
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { PageProps } from './$types';
|
||||||
|
|
||||||
|
let { data }: PageProps = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<h1>Order ID: {data.id}</h1>
|
||||||
7
web/src/routes/orders/[id]/+page.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import type { PageLoad } from './$types';
|
||||||
|
|
||||||
|
export const load: PageLoad = ({ params }) => {
|
||||||
|
return {
|
||||||
|
id: params.id
|
||||||
|
};
|
||||||
|
};
|
||||||
0
web/src/routes/products/+page.svelte
Normal file
7
web/src/routes/products/[id]/+page.svelte
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { PageProps } from './$types';
|
||||||
|
|
||||||
|
let { data }: PageProps = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<h1>Product ID: {data.id}</h1>
|
||||||
10
web/src/routes/products/[id]/+page.ts
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
// import { error } from '@sveltejs/kit';
|
||||||
|
import type { PageLoad } from './$types';
|
||||||
|
|
||||||
|
export const load: PageLoad = ({ params }) => {
|
||||||
|
return {
|
||||||
|
id: params.id
|
||||||
|
};
|
||||||
|
|
||||||
|
// error(404, 'Product not found');
|
||||||
|
};
|
||||||
28
web/src/stores/auth.ts
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import { writable } from 'svelte/store';
|
||||||
|
import type { components } from "$lib/api/schema";
|
||||||
|
|
||||||
|
type AuthStore = {
|
||||||
|
profile: components["schemas"]["v1User"] | null;
|
||||||
|
tokens: components["schemas"]["v1AuthToken"] | null;
|
||||||
|
isLoading: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
const INITIAL_AUTH_STATE: AuthStore = {
|
||||||
|
profile: null,
|
||||||
|
tokens: null,
|
||||||
|
isLoading: false
|
||||||
|
};
|
||||||
|
|
||||||
|
export const authState = writable<AuthStore>(INITIAL_AUTH_STATE);
|
||||||
|
|
||||||
|
export function setTokens(value: components["schemas"]["v1AuthToken"]): void {
|
||||||
|
authState.update((currentState) => {
|
||||||
|
return { ...currentState, tokens: value }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setProfile(value: components["schemas"]["v1User"]): void {
|
||||||
|
authState.update((currentState) => {
|
||||||
|
return { ...currentState, profile: value }
|
||||||
|
});
|
||||||
|
}
|
||||||
0
web/src/stores/cart.ts
Normal file
35
web/src/stores/theme.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import { writable } from 'svelte/store';
|
||||||
|
|
||||||
|
function getInitialDark(): boolean {
|
||||||
|
if (typeof window === 'undefined') return false;
|
||||||
|
try {
|
||||||
|
const saved = localStorage.getItem('color-scheme');
|
||||||
|
if (saved === 'dark') return true;
|
||||||
|
if (saved === 'light') return false;
|
||||||
|
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const darkMode = writable<boolean>(getInitialDark());
|
||||||
|
|
||||||
|
export function setDarkMode(value: boolean): void {
|
||||||
|
darkMode.set(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function toggleDarkMode(): void {
|
||||||
|
darkMode.update((v) => !v);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
darkMode.subscribe((isDark) => {
|
||||||
|
const root = document.documentElement;
|
||||||
|
root.classList.toggle('dark', isDark);
|
||||||
|
try {
|
||||||
|
localStorage.setItem('color-scheme', isDark ? 'dark' : 'light');
|
||||||
|
} catch {
|
||||||
|
// ignore storage write errors
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
BIN
web/static/assets/cover.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
web/static/assets/default.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
9
web/static/assets/info.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
font name: sofiapro-light
|
||||||
|
font link: https://www.fontspring.com/fonts/mostardesign/sofia-pro/sofia-pro-light
|
||||||
|
font author: Mostardesign
|
||||||
|
font author site: http://www.motyfo.com/
|
||||||
|
|
||||||
|
icon designer: N.K.Narasimhan
|
||||||
|
icon designer link: /creator/animnarsi@yahoo.com/
|
||||||
|
|
||||||
|
{"bg":"#F1E2EC","icon-gradient-0":"#8C48D2","icon-gradient-1":"#CF705A","font":"#331B2B","slogan":"#472f3f"}
|
||||||
81
web/static/assets/logo-light.svg
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
viewBox="0 0 434 90"
|
||||||
|
class="iconLeft"
|
||||||
|
version="1.1"
|
||||||
|
id="svg4"
|
||||||
|
sodipodi:docname="logo-light.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview4"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="2.8018433"
|
||||||
|
inkscape:cx="217"
|
||||||
|
inkscape:cy="44.970395"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1011"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg4" />
|
||||||
|
<g
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
id="7ccbf1f1-d01a-42aa-9755-e9ae79724b7b"
|
||||||
|
fill="#331B2B"
|
||||||
|
transform="matrix(5.7915059834320255,0,0,5.7915059834320255,152.75612078133662,14.999999523162842)"
|
||||||
|
style="fill:#ffffff;fill-opacity:1">
|
||||||
|
<path
|
||||||
|
d="M4.00 10.36C6.12 10.36 7.24 8.92 7.24 7.56C7.24 6.16 6.17 5.33 4.65 4.96L3.35 4.65C1.90 4.31 1.76 3.54 1.76 3.09C1.76 2.02 2.79 1.33 3.88 1.33C5.04 1.33 5.92 2.02 5.98 3.08L6.90 3.08C6.85 1.47 5.54 0.46 3.91 0.46C2.31 0.46 0.84 1.50 0.84 3.09C0.84 3.86 1.13 5.03 3.12 5.50L4.42 5.81C5.38 6.05 6.31 6.55 6.31 7.60C6.31 8.51 5.54 9.49 4.00 9.49C2.65 9.49 1.78 8.58 1.68 7.63L0.77 7.63C0.84 9.03 2.11 10.36 4.00 10.36ZM11.82 3.68L10.32 3.68L10.32 1.08L9.44 1.08L9.44 3.68L8.25 3.68L8.25 4.45L9.44 4.45L9.44 10.22L10.32 10.22L10.32 4.45L11.82 4.45ZM16.02 10.36C17.88 10.36 19.45 9.00 19.45 6.93C19.45 4.86 17.88 3.54 16.02 3.54C14.15 3.54 12.60 4.86 12.60 6.93C12.60 9.00 14.15 10.36 16.02 10.36ZM16.02 9.51C14.63 9.51 13.50 8.48 13.50 6.93C13.50 5.39 14.63 4.40 16.02 4.40C17.39 4.40 18.55 5.39 18.55 6.93C18.55 8.48 17.39 9.51 16.02 9.51ZM24.23 10.35C25.17 10.35 26.00 10.01 26.59 9.45L26.03 8.85C25.58 9.25 24.96 9.49 24.26 9.49C22.83 9.49 21.67 8.47 21.67 6.94C21.67 5.40 22.83 4.40 24.26 4.40C24.96 4.40 25.58 4.65 26.03 5.05L26.59 4.44C26.00 3.89 25.17 3.54 24.23 3.54C22.37 3.54 20.78 4.87 20.78 6.94C20.78 9.02 22.37 10.35 24.23 10.35ZM33.66 10.22L30.03 6.52L32.83 3.68L31.58 3.68L29.13 6.19L29.13 0L28.24 0L28.24 10.22L29.13 10.22L29.13 6.86L32.44 10.22ZM34.68 10.22L35.57 10.22L35.57 0L34.68 0ZM43.92 6.93C43.92 4.86 42.56 3.54 40.70 3.54C38.85 3.54 37.37 4.86 37.37 6.93C37.37 9.00 38.85 10.36 40.70 10.36C41.93 10.36 43.05 9.77 43.62 8.72L42.85 8.39C42.42 9.10 41.62 9.51 40.73 9.51C39.41 9.51 38.43 8.72 38.28 7.32L43.90 7.32C43.92 7.20 43.92 7.06 43.92 6.93ZM38.29 6.55C38.46 5.15 39.41 4.40 40.70 4.40C41.97 4.40 42.91 5.19 43.04 6.55ZM48.40 3.68L46.90 3.68L46.90 1.08L46.02 1.08L46.02 3.68L44.83 3.68L44.83 4.45L46.02 4.45L46.02 10.22L46.90 10.22L46.90 4.45L48.40 4.45Z"
|
||||||
|
id="path1"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<defs
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
id="defs2">
|
||||||
|
<linearGradient
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
gradientTransform="rotate(25)"
|
||||||
|
id="e8769ea9-6fdc-46c7-87bb-cf92f23a859c"
|
||||||
|
x1="0%"
|
||||||
|
y1="0%"
|
||||||
|
x2="100%"
|
||||||
|
y2="0%">
|
||||||
|
<stop
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
offset="0%"
|
||||||
|
style="stop-color: rgb(140, 72, 210); stop-opacity: 1;"
|
||||||
|
id="stop1" />
|
||||||
|
<stop
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
offset="100%"
|
||||||
|
style="stop-color: rgb(207, 112, 90); stop-opacity: 1;"
|
||||||
|
id="stop2" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
id="7665600e-8875-4e76-bddc-4f57bcba1929"
|
||||||
|
transform="matrix(3.635041968759201,0,0,3.635041968759201,0.39221588485064274,-0.0000019073486328125)"
|
||||||
|
stroke="none"
|
||||||
|
fill="url(#e8769ea9-6fdc-46c7-87bb-cf92f23a859c)">
|
||||||
|
<path
|
||||||
|
d="M30.231 8.097h-5.692v7.71h5.692v-7.71zM37.748 8.097h-6.023v7.71h6.023v-7.71z"
|
||||||
|
id="path2" />
|
||||||
|
<path
|
||||||
|
d="M35.647 22.106c0 .249-.026.47-.055.663h2.155v-5.471H13.569a.75.75 0 01-.36-.084.651.651 0 01-.276-.275L3.207 0H0l12.768 22.77h2.266c-.028-.138-.028-.276-.028-.414 0-1.022.359-1.907 1.105-2.625.718-.719 1.575-1.078 2.598-1.078.995 0 1.852.359 2.57 1.078.746.718 1.105 1.603 1.105 2.625 0 .138 0 .276-.028.414h6.024a2.385 2.385 0 01-.083-.663c0-1.021.359-1.906 1.078-2.625.718-.718 1.574-1.078 2.569-1.078 1.023 0 1.907.36 2.626 1.078.719.718 1.077 1.603 1.077 2.624z"
|
||||||
|
id="path3" />
|
||||||
|
<path
|
||||||
|
d="M34.404 22.079a2.37 2.37 0 00-.719-1.74 2.373 2.373 0 00-1.741-.719c-.663 0-1.243.248-1.713.719a2.372 2.372 0 00-.719 1.74c0 .249.028.497.111.69.11.387.304.719.607 1.023.47.47 1.05.719 1.713.719.691 0 1.271-.249 1.741-.719.304-.305.498-.637.635-1.023.058-.193.085-.441.085-.69zM23.047 15.807v-7.71h-5.859v7.71h5.859zM15.696 8.097H9.589l4.422 7.71h1.685v-7.71zM16.221 22.328c0 .139.028.304.056.441.082.471.303.912.663 1.271.497.471 1.077.719 1.74.719.664 0 1.244-.248 1.742-.719.359-.359.58-.801.69-1.271.027-.138.027-.303.027-.441 0-.691-.248-1.271-.718-1.741-.498-.47-1.078-.719-1.742-.719-.663 0-1.243.249-1.74.719a2.384 2.384 0 00-.718 1.741z"
|
||||||
|
id="path4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.1 KiB |
81
web/static/assets/logo.svg
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
viewBox="0 0 434 90"
|
||||||
|
class="iconLeft"
|
||||||
|
version="1.1"
|
||||||
|
id="svg4"
|
||||||
|
sodipodi:docname="logo.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview4"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="4.0852535"
|
||||||
|
inkscape:cx="149.56232"
|
||||||
|
inkscape:cy="45.040045"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1011"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg4" />
|
||||||
|
<g
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
id="7ccbf1f1-d01a-42aa-9755-e9ae79724b7b"
|
||||||
|
fill="#331B2B"
|
||||||
|
transform="matrix(5.7915059834320255,0,0,5.7915059834320255,152.75612078133662,14.999999523162842)"
|
||||||
|
style="fill:#000000;fill-opacity:1">
|
||||||
|
<path
|
||||||
|
d="M4.00 10.36C6.12 10.36 7.24 8.92 7.24 7.56C7.24 6.16 6.17 5.33 4.65 4.96L3.35 4.65C1.90 4.31 1.76 3.54 1.76 3.09C1.76 2.02 2.79 1.33 3.88 1.33C5.04 1.33 5.92 2.02 5.98 3.08L6.90 3.08C6.85 1.47 5.54 0.46 3.91 0.46C2.31 0.46 0.84 1.50 0.84 3.09C0.84 3.86 1.13 5.03 3.12 5.50L4.42 5.81C5.38 6.05 6.31 6.55 6.31 7.60C6.31 8.51 5.54 9.49 4.00 9.49C2.65 9.49 1.78 8.58 1.68 7.63L0.77 7.63C0.84 9.03 2.11 10.36 4.00 10.36ZM11.82 3.68L10.32 3.68L10.32 1.08L9.44 1.08L9.44 3.68L8.25 3.68L8.25 4.45L9.44 4.45L9.44 10.22L10.32 10.22L10.32 4.45L11.82 4.45ZM16.02 10.36C17.88 10.36 19.45 9.00 19.45 6.93C19.45 4.86 17.88 3.54 16.02 3.54C14.15 3.54 12.60 4.86 12.60 6.93C12.60 9.00 14.15 10.36 16.02 10.36ZM16.02 9.51C14.63 9.51 13.50 8.48 13.50 6.93C13.50 5.39 14.63 4.40 16.02 4.40C17.39 4.40 18.55 5.39 18.55 6.93C18.55 8.48 17.39 9.51 16.02 9.51ZM24.23 10.35C25.17 10.35 26.00 10.01 26.59 9.45L26.03 8.85C25.58 9.25 24.96 9.49 24.26 9.49C22.83 9.49 21.67 8.47 21.67 6.94C21.67 5.40 22.83 4.40 24.26 4.40C24.96 4.40 25.58 4.65 26.03 5.05L26.59 4.44C26.00 3.89 25.17 3.54 24.23 3.54C22.37 3.54 20.78 4.87 20.78 6.94C20.78 9.02 22.37 10.35 24.23 10.35ZM33.66 10.22L30.03 6.52L32.83 3.68L31.58 3.68L29.13 6.19L29.13 0L28.24 0L28.24 10.22L29.13 10.22L29.13 6.86L32.44 10.22ZM34.68 10.22L35.57 10.22L35.57 0L34.68 0ZM43.92 6.93C43.92 4.86 42.56 3.54 40.70 3.54C38.85 3.54 37.37 4.86 37.37 6.93C37.37 9.00 38.85 10.36 40.70 10.36C41.93 10.36 43.05 9.77 43.62 8.72L42.85 8.39C42.42 9.10 41.62 9.51 40.73 9.51C39.41 9.51 38.43 8.72 38.28 7.32L43.90 7.32C43.92 7.20 43.92 7.06 43.92 6.93ZM38.29 6.55C38.46 5.15 39.41 4.40 40.70 4.40C41.97 4.40 42.91 5.19 43.04 6.55ZM48.40 3.68L46.90 3.68L46.90 1.08L46.02 1.08L46.02 3.68L44.83 3.68L44.83 4.45L46.02 4.45L46.02 10.22L46.90 10.22L46.90 4.45L48.40 4.45Z"
|
||||||
|
id="path1"
|
||||||
|
style="fill:#000000;fill-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<defs
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
id="defs2">
|
||||||
|
<linearGradient
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
gradientTransform="rotate(25)"
|
||||||
|
id="e8769ea9-6fdc-46c7-87bb-cf92f23a859c"
|
||||||
|
x1="0%"
|
||||||
|
y1="0%"
|
||||||
|
x2="100%"
|
||||||
|
y2="0%">
|
||||||
|
<stop
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
offset="0%"
|
||||||
|
style="stop-color: rgb(140, 72, 210); stop-opacity: 1;"
|
||||||
|
id="stop1" />
|
||||||
|
<stop
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
offset="100%"
|
||||||
|
style="stop-color: rgb(207, 112, 90); stop-opacity: 1;"
|
||||||
|
id="stop2" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
data-v-423bf9ae=""
|
||||||
|
id="7665600e-8875-4e76-bddc-4f57bcba1929"
|
||||||
|
transform="matrix(3.635041968759201,0,0,3.635041968759201,0.39221588485064274,-0.0000019073486328125)"
|
||||||
|
stroke="none"
|
||||||
|
fill="url(#e8769ea9-6fdc-46c7-87bb-cf92f23a859c)">
|
||||||
|
<path
|
||||||
|
d="M30.231 8.097h-5.692v7.71h5.692v-7.71zM37.748 8.097h-6.023v7.71h6.023v-7.71z"
|
||||||
|
id="path2" />
|
||||||
|
<path
|
||||||
|
d="M35.647 22.106c0 .249-.026.47-.055.663h2.155v-5.471H13.569a.75.75 0 01-.36-.084.651.651 0 01-.276-.275L3.207 0H0l12.768 22.77h2.266c-.028-.138-.028-.276-.028-.414 0-1.022.359-1.907 1.105-2.625.718-.719 1.575-1.078 2.598-1.078.995 0 1.852.359 2.57 1.078.746.718 1.105 1.603 1.105 2.625 0 .138 0 .276-.028.414h6.024a2.385 2.385 0 01-.083-.663c0-1.021.359-1.906 1.078-2.625.718-.718 1.574-1.078 2.569-1.078 1.023 0 1.907.36 2.626 1.078.719.718 1.077 1.603 1.077 2.624z"
|
||||||
|
id="path3" />
|
||||||
|
<path
|
||||||
|
d="M34.404 22.079a2.37 2.37 0 00-.719-1.74 2.373 2.373 0 00-1.741-.719c-.663 0-1.243.248-1.713.719a2.372 2.372 0 00-.719 1.74c0 .249.028.497.111.69.11.387.304.719.607 1.023.47.47 1.05.719 1.713.719.691 0 1.271-.249 1.741-.719.304-.305.498-.637.635-1.023.058-.193.085-.441.085-.69zM23.047 15.807v-7.71h-5.859v7.71h5.859zM15.696 8.097H9.589l4.422 7.71h1.685v-7.71zM16.221 22.328c0 .139.028.304.056.441.082.471.303.912.663 1.271.497.471 1.077.719 1.74.719.664 0 1.244-.248 1.742-.719.359-.359.58-.801.69-1.271.027-.138.027-.303.027-.441 0-.691-.248-1.271-.718-1.741-.498-.47-1.078-.719-1.742-.719-.663 0-1.243.249-1.74.719a2.384 2.384 0 00-.718 1.741z"
|
||||||
|
id="path4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.1 KiB |
BIN
web/static/assets/profile.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
1
web/static/assets/vector/default-monochrome-black.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg data-v-423bf9ae="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 434 90" class="iconLeft"><!----><!----><!----><g data-v-423bf9ae="" id="dd29e1ea-8536-46b0-b33c-374cd452669b" fill="black" transform="matrix(5.7915059834320255,0,0,5.7915059834320255,152.75612078133662,14.999999523162842)"><path d="M4.00 10.36C6.12 10.36 7.24 8.92 7.24 7.56C7.24 6.16 6.17 5.33 4.65 4.96L3.35 4.65C1.90 4.31 1.76 3.54 1.76 3.09C1.76 2.02 2.79 1.33 3.88 1.33C5.04 1.33 5.92 2.02 5.98 3.08L6.90 3.08C6.85 1.47 5.54 0.46 3.91 0.46C2.31 0.46 0.84 1.50 0.84 3.09C0.84 3.86 1.13 5.03 3.12 5.50L4.42 5.81C5.38 6.05 6.31 6.55 6.31 7.60C6.31 8.51 5.54 9.49 4.00 9.49C2.65 9.49 1.78 8.58 1.68 7.63L0.77 7.63C0.84 9.03 2.11 10.36 4.00 10.36ZM11.82 3.68L10.32 3.68L10.32 1.08L9.44 1.08L9.44 3.68L8.25 3.68L8.25 4.45L9.44 4.45L9.44 10.22L10.32 10.22L10.32 4.45L11.82 4.45ZM16.02 10.36C17.88 10.36 19.45 9.00 19.45 6.93C19.45 4.86 17.88 3.54 16.02 3.54C14.15 3.54 12.60 4.86 12.60 6.93C12.60 9.00 14.15 10.36 16.02 10.36ZM16.02 9.51C14.63 9.51 13.50 8.48 13.50 6.93C13.50 5.39 14.63 4.40 16.02 4.40C17.39 4.40 18.55 5.39 18.55 6.93C18.55 8.48 17.39 9.51 16.02 9.51ZM24.23 10.35C25.17 10.35 26.00 10.01 26.59 9.45L26.03 8.85C25.58 9.25 24.96 9.49 24.26 9.49C22.83 9.49 21.67 8.47 21.67 6.94C21.67 5.40 22.83 4.40 24.26 4.40C24.96 4.40 25.58 4.65 26.03 5.05L26.59 4.44C26.00 3.89 25.17 3.54 24.23 3.54C22.37 3.54 20.78 4.87 20.78 6.94C20.78 9.02 22.37 10.35 24.23 10.35ZM33.66 10.22L30.03 6.52L32.83 3.68L31.58 3.68L29.13 6.19L29.13 0L28.24 0L28.24 10.22L29.13 10.22L29.13 6.86L32.44 10.22ZM34.68 10.22L35.57 10.22L35.57 0L34.68 0ZM43.92 6.93C43.92 4.86 42.56 3.54 40.70 3.54C38.85 3.54 37.37 4.86 37.37 6.93C37.37 9.00 38.85 10.36 40.70 10.36C41.93 10.36 43.05 9.77 43.62 8.72L42.85 8.39C42.42 9.10 41.62 9.51 40.73 9.51C39.41 9.51 38.43 8.72 38.28 7.32L43.90 7.32C43.92 7.20 43.92 7.06 43.92 6.93ZM38.29 6.55C38.46 5.15 39.41 4.40 40.70 4.40C41.97 4.40 42.91 5.19 43.04 6.55ZM48.40 3.68L46.90 3.68L46.90 1.08L46.02 1.08L46.02 3.68L44.83 3.68L44.83 4.45L46.02 4.45L46.02 10.22L46.90 10.22L46.90 4.45L48.40 4.45Z"></path></g><!----><g data-v-423bf9ae="" id="1f868b94-934e-425c-b97d-c594a0825f88" transform="matrix(3.635041968759201,0,0,3.635041968759201,0.39221588485064274,-0.0000019073486328125)" stroke="none" fill="black"><path d="M30.231 8.097h-5.692v7.71h5.692v-7.71zM37.748 8.097h-6.023v7.71h6.023v-7.71z"></path><path d="M35.647 22.106c0 .249-.026.47-.055.663h2.155v-5.471H13.569a.75.75 0 01-.36-.084.651.651 0 01-.276-.275L3.207 0H0l12.768 22.77h2.266c-.028-.138-.028-.276-.028-.414 0-1.022.359-1.907 1.105-2.625.718-.719 1.575-1.078 2.598-1.078.995 0 1.852.359 2.57 1.078.746.718 1.105 1.603 1.105 2.625 0 .138 0 .276-.028.414h6.024a2.385 2.385 0 01-.083-.663c0-1.021.359-1.906 1.078-2.625.718-.718 1.574-1.078 2.569-1.078 1.023 0 1.907.36 2.626 1.078.719.718 1.077 1.603 1.077 2.624z"></path><path d="M34.404 22.079a2.37 2.37 0 00-.719-1.74 2.373 2.373 0 00-1.741-.719c-.663 0-1.243.248-1.713.719a2.372 2.372 0 00-.719 1.74c0 .249.028.497.111.69.11.387.304.719.607 1.023.47.47 1.05.719 1.713.719.691 0 1.271-.249 1.741-.719.304-.305.498-.637.635-1.023.058-.193.085-.441.085-.69zM23.047 15.807v-7.71h-5.859v7.71h5.859zM15.696 8.097H9.589l4.422 7.71h1.685v-7.71zM16.221 22.328c0 .139.028.304.056.441.082.471.303.912.663 1.271.497.471 1.077.719 1.74.719.664 0 1.244-.248 1.742-.719.359-.359.58-.801.69-1.271.027-.138.027-.303.027-.441 0-.691-.248-1.271-.718-1.741-.498-.47-1.078-.719-1.742-.719-.663 0-1.243.249-1.74.719a2.384 2.384 0 00-.718 1.741z"></path></g><!----></svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
1
web/static/assets/vector/default-monochrome-white.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg data-v-423bf9ae="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 434 90" class="iconLeft"><!----><!----><!----><g data-v-423bf9ae="" id="1257107e-f0fa-4ca8-afb9-859f8a88e819" fill="white" transform="matrix(5.7915059834320255,0,0,5.7915059834320255,152.75612078133662,14.999999523162842)"><path d="M4.00 10.36C6.12 10.36 7.24 8.92 7.24 7.56C7.24 6.16 6.17 5.33 4.65 4.96L3.35 4.65C1.90 4.31 1.76 3.54 1.76 3.09C1.76 2.02 2.79 1.33 3.88 1.33C5.04 1.33 5.92 2.02 5.98 3.08L6.90 3.08C6.85 1.47 5.54 0.46 3.91 0.46C2.31 0.46 0.84 1.50 0.84 3.09C0.84 3.86 1.13 5.03 3.12 5.50L4.42 5.81C5.38 6.05 6.31 6.55 6.31 7.60C6.31 8.51 5.54 9.49 4.00 9.49C2.65 9.49 1.78 8.58 1.68 7.63L0.77 7.63C0.84 9.03 2.11 10.36 4.00 10.36ZM11.82 3.68L10.32 3.68L10.32 1.08L9.44 1.08L9.44 3.68L8.25 3.68L8.25 4.45L9.44 4.45L9.44 10.22L10.32 10.22L10.32 4.45L11.82 4.45ZM16.02 10.36C17.88 10.36 19.45 9.00 19.45 6.93C19.45 4.86 17.88 3.54 16.02 3.54C14.15 3.54 12.60 4.86 12.60 6.93C12.60 9.00 14.15 10.36 16.02 10.36ZM16.02 9.51C14.63 9.51 13.50 8.48 13.50 6.93C13.50 5.39 14.63 4.40 16.02 4.40C17.39 4.40 18.55 5.39 18.55 6.93C18.55 8.48 17.39 9.51 16.02 9.51ZM24.23 10.35C25.17 10.35 26.00 10.01 26.59 9.45L26.03 8.85C25.58 9.25 24.96 9.49 24.26 9.49C22.83 9.49 21.67 8.47 21.67 6.94C21.67 5.40 22.83 4.40 24.26 4.40C24.96 4.40 25.58 4.65 26.03 5.05L26.59 4.44C26.00 3.89 25.17 3.54 24.23 3.54C22.37 3.54 20.78 4.87 20.78 6.94C20.78 9.02 22.37 10.35 24.23 10.35ZM33.66 10.22L30.03 6.52L32.83 3.68L31.58 3.68L29.13 6.19L29.13 0L28.24 0L28.24 10.22L29.13 10.22L29.13 6.86L32.44 10.22ZM34.68 10.22L35.57 10.22L35.57 0L34.68 0ZM43.92 6.93C43.92 4.86 42.56 3.54 40.70 3.54C38.85 3.54 37.37 4.86 37.37 6.93C37.37 9.00 38.85 10.36 40.70 10.36C41.93 10.36 43.05 9.77 43.62 8.72L42.85 8.39C42.42 9.10 41.62 9.51 40.73 9.51C39.41 9.51 38.43 8.72 38.28 7.32L43.90 7.32C43.92 7.20 43.92 7.06 43.92 6.93ZM38.29 6.55C38.46 5.15 39.41 4.40 40.70 4.40C41.97 4.40 42.91 5.19 43.04 6.55ZM48.40 3.68L46.90 3.68L46.90 1.08L46.02 1.08L46.02 3.68L44.83 3.68L44.83 4.45L46.02 4.45L46.02 10.22L46.90 10.22L46.90 4.45L48.40 4.45Z"></path></g><!----><g data-v-423bf9ae="" id="edef95aa-1b99-42ce-a29c-747b164bbefc" transform="matrix(3.635041968759201,0,0,3.635041968759201,0.39221588485064274,-0.0000019073486328125)" stroke="none" fill="white"><path d="M30.231 8.097h-5.692v7.71h5.692v-7.71zM37.748 8.097h-6.023v7.71h6.023v-7.71z"></path><path d="M35.647 22.106c0 .249-.026.47-.055.663h2.155v-5.471H13.569a.75.75 0 01-.36-.084.651.651 0 01-.276-.275L3.207 0H0l12.768 22.77h2.266c-.028-.138-.028-.276-.028-.414 0-1.022.359-1.907 1.105-2.625.718-.719 1.575-1.078 2.598-1.078.995 0 1.852.359 2.57 1.078.746.718 1.105 1.603 1.105 2.625 0 .138 0 .276-.028.414h6.024a2.385 2.385 0 01-.083-.663c0-1.021.359-1.906 1.078-2.625.718-.718 1.574-1.078 2.569-1.078 1.023 0 1.907.36 2.626 1.078.719.718 1.077 1.603 1.077 2.624z"></path><path d="M34.404 22.079a2.37 2.37 0 00-.719-1.74 2.373 2.373 0 00-1.741-.719c-.663 0-1.243.248-1.713.719a2.372 2.372 0 00-.719 1.74c0 .249.028.497.111.69.11.387.304.719.607 1.023.47.47 1.05.719 1.713.719.691 0 1.271-.249 1.741-.719.304-.305.498-.637.635-1.023.058-.193.085-.441.085-.69zM23.047 15.807v-7.71h-5.859v7.71h5.859zM15.696 8.097H9.589l4.422 7.71h1.685v-7.71zM16.221 22.328c0 .139.028.304.056.441.082.471.303.912.663 1.271.497.471 1.077.719 1.74.719.664 0 1.244-.248 1.742-.719.359-.359.58-.801.69-1.271.027-.138.027-.303.027-.441 0-.691-.248-1.271-.718-1.741-.498-.47-1.078-.719-1.742-.719-.663 0-1.243.249-1.74.719a2.384 2.384 0 00-.718 1.741z"></path></g><!----></svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
1
web/static/assets/vector/default-monochrome.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg data-v-423bf9ae="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 434 90" class="iconLeft"><!----><!----><!----><g data-v-423bf9ae="" id="7ccbf1f1-d01a-42aa-9755-e9ae79724b7b" fill="#331B2B" transform="matrix(5.7915059834320255,0,0,5.7915059834320255,152.75612078133662,14.999999523162842)"><path d="M4.00 10.36C6.12 10.36 7.24 8.92 7.24 7.56C7.24 6.16 6.17 5.33 4.65 4.96L3.35 4.65C1.90 4.31 1.76 3.54 1.76 3.09C1.76 2.02 2.79 1.33 3.88 1.33C5.04 1.33 5.92 2.02 5.98 3.08L6.90 3.08C6.85 1.47 5.54 0.46 3.91 0.46C2.31 0.46 0.84 1.50 0.84 3.09C0.84 3.86 1.13 5.03 3.12 5.50L4.42 5.81C5.38 6.05 6.31 6.55 6.31 7.60C6.31 8.51 5.54 9.49 4.00 9.49C2.65 9.49 1.78 8.58 1.68 7.63L0.77 7.63C0.84 9.03 2.11 10.36 4.00 10.36ZM11.82 3.68L10.32 3.68L10.32 1.08L9.44 1.08L9.44 3.68L8.25 3.68L8.25 4.45L9.44 4.45L9.44 10.22L10.32 10.22L10.32 4.45L11.82 4.45ZM16.02 10.36C17.88 10.36 19.45 9.00 19.45 6.93C19.45 4.86 17.88 3.54 16.02 3.54C14.15 3.54 12.60 4.86 12.60 6.93C12.60 9.00 14.15 10.36 16.02 10.36ZM16.02 9.51C14.63 9.51 13.50 8.48 13.50 6.93C13.50 5.39 14.63 4.40 16.02 4.40C17.39 4.40 18.55 5.39 18.55 6.93C18.55 8.48 17.39 9.51 16.02 9.51ZM24.23 10.35C25.17 10.35 26.00 10.01 26.59 9.45L26.03 8.85C25.58 9.25 24.96 9.49 24.26 9.49C22.83 9.49 21.67 8.47 21.67 6.94C21.67 5.40 22.83 4.40 24.26 4.40C24.96 4.40 25.58 4.65 26.03 5.05L26.59 4.44C26.00 3.89 25.17 3.54 24.23 3.54C22.37 3.54 20.78 4.87 20.78 6.94C20.78 9.02 22.37 10.35 24.23 10.35ZM33.66 10.22L30.03 6.52L32.83 3.68L31.58 3.68L29.13 6.19L29.13 0L28.24 0L28.24 10.22L29.13 10.22L29.13 6.86L32.44 10.22ZM34.68 10.22L35.57 10.22L35.57 0L34.68 0ZM43.92 6.93C43.92 4.86 42.56 3.54 40.70 3.54C38.85 3.54 37.37 4.86 37.37 6.93C37.37 9.00 38.85 10.36 40.70 10.36C41.93 10.36 43.05 9.77 43.62 8.72L42.85 8.39C42.42 9.10 41.62 9.51 40.73 9.51C39.41 9.51 38.43 8.72 38.28 7.32L43.90 7.32C43.92 7.20 43.92 7.06 43.92 6.93ZM38.29 6.55C38.46 5.15 39.41 4.40 40.70 4.40C41.97 4.40 42.91 5.19 43.04 6.55ZM48.40 3.68L46.90 3.68L46.90 1.08L46.02 1.08L46.02 3.68L44.83 3.68L44.83 4.45L46.02 4.45L46.02 10.22L46.90 10.22L46.90 4.45L48.40 4.45Z"></path></g><defs data-v-423bf9ae=""><linearGradient data-v-423bf9ae="" gradientTransform="rotate(25)" id="e8769ea9-6fdc-46c7-87bb-cf92f23a859c" x1="0%" y1="0%" x2="100%" y2="0%"><stop data-v-423bf9ae="" offset="0%" style="stop-color: rgb(140, 72, 210); stop-opacity: 1;"></stop><stop data-v-423bf9ae="" offset="100%" style="stop-color: rgb(207, 112, 90); stop-opacity: 1;"></stop></linearGradient></defs><g data-v-423bf9ae="" id="7665600e-8875-4e76-bddc-4f57bcba1929" transform="matrix(3.635041968759201,0,0,3.635041968759201,0.39221588485064274,-0.0000019073486328125)" stroke="none" fill="url(#e8769ea9-6fdc-46c7-87bb-cf92f23a859c)"><path d="M30.231 8.097h-5.692v7.71h5.692v-7.71zM37.748 8.097h-6.023v7.71h6.023v-7.71z"></path><path d="M35.647 22.106c0 .249-.026.47-.055.663h2.155v-5.471H13.569a.75.75 0 01-.36-.084.651.651 0 01-.276-.275L3.207 0H0l12.768 22.77h2.266c-.028-.138-.028-.276-.028-.414 0-1.022.359-1.907 1.105-2.625.718-.719 1.575-1.078 2.598-1.078.995 0 1.852.359 2.57 1.078.746.718 1.105 1.603 1.105 2.625 0 .138 0 .276-.028.414h6.024a2.385 2.385 0 01-.083-.663c0-1.021.359-1.906 1.078-2.625.718-.718 1.574-1.078 2.569-1.078 1.023 0 1.907.36 2.626 1.078.719.718 1.077 1.603 1.077 2.624z"></path><path d="M34.404 22.079a2.37 2.37 0 00-.719-1.74 2.373 2.373 0 00-1.741-.719c-.663 0-1.243.248-1.713.719a2.372 2.372 0 00-.719 1.74c0 .249.028.497.111.69.11.387.304.719.607 1.023.47.47 1.05.719 1.713.719.691 0 1.271-.249 1.741-.719.304-.305.498-.637.635-1.023.058-.193.085-.441.085-.69zM23.047 15.807v-7.71h-5.859v7.71h5.859zM15.696 8.097H9.589l4.422 7.71h1.685v-7.71zM16.221 22.328c0 .139.028.304.056.441.082.471.303.912.663 1.271.497.471 1.077.719 1.74.719.664 0 1.244-.248 1.742-.719.359-.359.58-.801.69-1.271.027-.138.027-.303.027-.441 0-.691-.248-1.271-.718-1.741-.498-.47-1.078-.719-1.742-.719-.663 0-1.243.249-1.74.719a2.384 2.384 0 00-.718 1.741z"></path></g><!----></svg>
|
||||||
|
After Width: | Height: | Size: 3.9 KiB |
1
web/static/assets/vector/default.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg data-v-fde0c5aa="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300" class="iconLeft"><!----><defs data-v-fde0c5aa=""><!----></defs><rect data-v-fde0c5aa="" fill="#F1E2EC" x="0" y="0" width="300px" height="300px" class="logo-background-square"></rect><defs data-v-fde0c5aa=""><!----></defs><g data-v-fde0c5aa="" id="d7c30393-961b-4b3a-9f0c-019d46f9408e" fill="#331B2B" transform="matrix(2.902307689539151,0,0,2.902307689539151,119.52830478166314,134.96604666640133)"><path d="M4.00 10.36C6.12 10.36 7.24 8.92 7.24 7.56C7.24 6.16 6.17 5.33 4.65 4.96L3.35 4.65C1.90 4.31 1.76 3.54 1.76 3.09C1.76 2.02 2.79 1.33 3.88 1.33C5.04 1.33 5.92 2.02 5.98 3.08L6.90 3.08C6.85 1.47 5.54 0.46 3.91 0.46C2.31 0.46 0.84 1.50 0.84 3.09C0.84 3.86 1.13 5.03 3.12 5.50L4.42 5.81C5.38 6.05 6.31 6.55 6.31 7.60C6.31 8.51 5.54 9.49 4.00 9.49C2.65 9.49 1.78 8.58 1.68 7.63L0.77 7.63C0.84 9.03 2.11 10.36 4.00 10.36ZM11.82 3.68L10.32 3.68L10.32 1.08L9.44 1.08L9.44 3.68L8.25 3.68L8.25 4.45L9.44 4.45L9.44 10.22L10.32 10.22L10.32 4.45L11.82 4.45ZM16.02 10.36C17.88 10.36 19.45 9.00 19.45 6.93C19.45 4.86 17.88 3.54 16.02 3.54C14.15 3.54 12.60 4.86 12.60 6.93C12.60 9.00 14.15 10.36 16.02 10.36ZM16.02 9.51C14.63 9.51 13.50 8.48 13.50 6.93C13.50 5.39 14.63 4.40 16.02 4.40C17.39 4.40 18.55 5.39 18.55 6.93C18.55 8.48 17.39 9.51 16.02 9.51ZM24.23 10.35C25.17 10.35 26.00 10.01 26.59 9.45L26.03 8.85C25.58 9.25 24.96 9.49 24.26 9.49C22.83 9.49 21.67 8.47 21.67 6.94C21.67 5.40 22.83 4.40 24.26 4.40C24.96 4.40 25.58 4.65 26.03 5.05L26.59 4.44C26.00 3.89 25.17 3.54 24.23 3.54C22.37 3.54 20.78 4.87 20.78 6.94C20.78 9.02 22.37 10.35 24.23 10.35ZM33.66 10.22L30.03 6.52L32.83 3.68L31.58 3.68L29.13 6.19L29.13 0L28.24 0L28.24 10.22L29.13 10.22L29.13 6.86L32.44 10.22ZM34.68 10.22L35.57 10.22L35.57 0L34.68 0ZM43.92 6.93C43.92 4.86 42.56 3.54 40.70 3.54C38.85 3.54 37.37 4.86 37.37 6.93C37.37 9.00 38.85 10.36 40.70 10.36C41.93 10.36 43.05 9.77 43.62 8.72L42.85 8.39C42.42 9.10 41.62 9.51 40.73 9.51C39.41 9.51 38.43 8.72 38.28 7.32L43.90 7.32C43.92 7.20 43.92 7.06 43.92 6.93ZM38.29 6.55C38.46 5.15 39.41 4.40 40.70 4.40C41.97 4.40 42.91 5.19 43.04 6.55ZM48.40 3.68L46.90 3.68L46.90 1.08L46.02 1.08L46.02 3.68L44.83 3.68L44.83 4.45L46.02 4.45L46.02 10.22L46.90 10.22L46.90 4.45L48.40 4.45Z"></path></g><defs data-v-fde0c5aa=""><linearGradient data-v-fde0c5aa="" gradientTransform="rotate(25)" id="e769396b-e7dc-4463-997c-19b23a564bda" x1="0%" y1="0%" x2="100%" y2="0%"><stop data-v-fde0c5aa="" offset="0%" stop-color="#8C48D2" stop-opacity="1"></stop><stop data-v-fde0c5aa="" offset="100%" stop-color="#CF705A" stop-opacity="1"></stop></linearGradient></defs><g data-v-fde0c5aa="" id="278c653e-b7e8-4473-949a-a2d1c8506d27" stroke="none" fill="url(#e769396b-e7dc-4463-997c-19b23a564bda)" transform="matrix(1.821635044133282,0,0,1.821635044133282,40,127.449069999602)"><path d="M30.231 8.097h-5.692v7.71h5.692v-7.71zM37.748 8.097h-6.023v7.71h6.023v-7.71z"></path><path d="M35.647 22.106c0 .249-.026.47-.055.663h2.155v-5.471H13.569a.75.75 0 01-.36-.084.651.651 0 01-.276-.275L3.207 0H0l12.768 22.77h2.266c-.028-.138-.028-.276-.028-.414 0-1.022.359-1.907 1.105-2.625.718-.719 1.575-1.078 2.598-1.078.995 0 1.852.359 2.57 1.078.746.718 1.105 1.603 1.105 2.625 0 .138 0 .276-.028.414h6.024a2.385 2.385 0 01-.083-.663c0-1.021.359-1.906 1.078-2.625.718-.718 1.574-1.078 2.569-1.078 1.023 0 1.907.36 2.626 1.078.719.718 1.077 1.603 1.077 2.624z"></path><path d="M34.404 22.079a2.37 2.37 0 00-.719-1.74 2.373 2.373 0 00-1.741-.719c-.663 0-1.243.248-1.713.719a2.372 2.372 0 00-.719 1.74c0 .249.028.497.111.69.11.387.304.719.607 1.023.47.47 1.05.719 1.713.719.691 0 1.271-.249 1.741-.719.304-.305.498-.637.635-1.023.058-.193.085-.441.085-.69zM23.047 15.807v-7.71h-5.859v7.71h5.859zM15.696 8.097H9.589l4.422 7.71h1.685v-7.71zM16.221 22.328c0 .139.028.304.056.441.082.471.303.912.663 1.271.497.471 1.077.719 1.74.719.664 0 1.244-.248 1.742-.719.359-.359.58-.801.69-1.271.027-.138.027-.303.027-.441 0-.691-.248-1.271-.718-1.741-.498-.47-1.078-.719-1.742-.719-.663 0-1.243.249-1.74.719a2.384 2.384 0 00-.718 1.741z"></path></g><!----></svg>
|
||||||
|
After Width: | Height: | Size: 4.0 KiB |
1
web/static/assets/vector/isolated-layout.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg data-v-fde0c5aa="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300" class="font"><!----><defs data-v-fde0c5aa=""><!----></defs><rect data-v-fde0c5aa="" fill="#F1E2EC" x="0" y="0" width="300px" height="300px" class="logo-background-square"></rect><defs data-v-fde0c5aa=""><linearGradient data-v-fde0c5aa="" gradientTransform="rotate(25)" id="55d34800-f110-4512-9699-1f5d7d1d4408" x1="0%" y1="0%" x2="100%" y2="0%"><stop data-v-fde0c5aa="" offset="0%" stop-color="#8C48D2" stop-opacity="1"></stop><stop data-v-fde0c5aa="" offset="100%" stop-color="#CF705A" stop-opacity="1"></stop></linearGradient></defs><g data-v-fde0c5aa="" id="c8ec85ad-7159-4a52-a513-df3587f56c8b" fill="url(#55d34800-f110-4512-9699-1f5d7d1d4408)" transform="matrix(4.618937540760917,0,0,4.618937540760917,36.44341818171332,126.07390433175163)"><path d="M4.00 10.36C6.12 10.36 7.24 8.92 7.24 7.56C7.24 6.16 6.17 5.33 4.65 4.96L3.35 4.65C1.90 4.31 1.76 3.54 1.76 3.09C1.76 2.02 2.79 1.33 3.88 1.33C5.04 1.33 5.92 2.02 5.98 3.08L6.90 3.08C6.85 1.47 5.54 0.46 3.91 0.46C2.31 0.46 0.84 1.50 0.84 3.09C0.84 3.86 1.13 5.03 3.12 5.50L4.42 5.81C5.38 6.05 6.31 6.55 6.31 7.60C6.31 8.51 5.54 9.49 4.00 9.49C2.65 9.49 1.78 8.58 1.68 7.63L0.77 7.63C0.84 9.03 2.11 10.36 4.00 10.36ZM11.82 3.68L10.32 3.68L10.32 1.08L9.44 1.08L9.44 3.68L8.25 3.68L8.25 4.45L9.44 4.45L9.44 10.22L10.32 10.22L10.32 4.45L11.82 4.45ZM16.02 10.36C17.88 10.36 19.45 9.00 19.45 6.93C19.45 4.86 17.88 3.54 16.02 3.54C14.15 3.54 12.60 4.86 12.60 6.93C12.60 9.00 14.15 10.36 16.02 10.36ZM16.02 9.51C14.63 9.51 13.50 8.48 13.50 6.93C13.50 5.39 14.63 4.40 16.02 4.40C17.39 4.40 18.55 5.39 18.55 6.93C18.55 8.48 17.39 9.51 16.02 9.51ZM24.23 10.35C25.17 10.35 26.00 10.01 26.59 9.45L26.03 8.85C25.58 9.25 24.96 9.49 24.26 9.49C22.83 9.49 21.67 8.47 21.67 6.94C21.67 5.40 22.83 4.40 24.26 4.40C24.96 4.40 25.58 4.65 26.03 5.05L26.59 4.44C26.00 3.89 25.17 3.54 24.23 3.54C22.37 3.54 20.78 4.87 20.78 6.94C20.78 9.02 22.37 10.35 24.23 10.35ZM33.66 10.22L30.03 6.52L32.83 3.68L31.58 3.68L29.13 6.19L29.13 0L28.24 0L28.24 10.22L29.13 10.22L29.13 6.86L32.44 10.22ZM34.68 10.22L35.57 10.22L35.57 0L34.68 0ZM43.92 6.93C43.92 4.86 42.56 3.54 40.70 3.54C38.85 3.54 37.37 4.86 37.37 6.93C37.37 9.00 38.85 10.36 40.70 10.36C41.93 10.36 43.05 9.77 43.62 8.72L42.85 8.39C42.42 9.10 41.62 9.51 40.73 9.51C39.41 9.51 38.43 8.72 38.28 7.32L43.90 7.32C43.92 7.20 43.92 7.06 43.92 6.93ZM38.29 6.55C38.46 5.15 39.41 4.40 40.70 4.40C41.97 4.40 42.91 5.19 43.04 6.55ZM48.40 3.68L46.90 3.68L46.90 1.08L46.02 1.08L46.02 3.68L44.83 3.68L44.83 4.45L46.02 4.45L46.02 10.22L46.90 10.22L46.90 4.45L48.40 4.45Z"></path></g><!----><!----></svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
1
web/static/assets/vector/isolated-monochrome-black.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg data-v-423bf9ae="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 275.84943617686315 60" class="font"><!----><!----><!----><g data-v-423bf9ae="" id="9e49fb69-d1b0-46ae-beda-1ae5f9d0dd96" fill="black" transform="matrix(5.7915059834320255,0,0,5.7915059834320255,-4.459463019932912,-4.76837158203125e-7)"><path d="M4.00 10.36C6.12 10.36 7.24 8.92 7.24 7.56C7.24 6.16 6.17 5.33 4.65 4.96L3.35 4.65C1.90 4.31 1.76 3.54 1.76 3.09C1.76 2.02 2.79 1.33 3.88 1.33C5.04 1.33 5.92 2.02 5.98 3.08L6.90 3.08C6.85 1.47 5.54 0.46 3.91 0.46C2.31 0.46 0.84 1.50 0.84 3.09C0.84 3.86 1.13 5.03 3.12 5.50L4.42 5.81C5.38 6.05 6.31 6.55 6.31 7.60C6.31 8.51 5.54 9.49 4.00 9.49C2.65 9.49 1.78 8.58 1.68 7.63L0.77 7.63C0.84 9.03 2.11 10.36 4.00 10.36ZM11.82 3.68L10.32 3.68L10.32 1.08L9.44 1.08L9.44 3.68L8.25 3.68L8.25 4.45L9.44 4.45L9.44 10.22L10.32 10.22L10.32 4.45L11.82 4.45ZM16.02 10.36C17.88 10.36 19.45 9.00 19.45 6.93C19.45 4.86 17.88 3.54 16.02 3.54C14.15 3.54 12.60 4.86 12.60 6.93C12.60 9.00 14.15 10.36 16.02 10.36ZM16.02 9.51C14.63 9.51 13.50 8.48 13.50 6.93C13.50 5.39 14.63 4.40 16.02 4.40C17.39 4.40 18.55 5.39 18.55 6.93C18.55 8.48 17.39 9.51 16.02 9.51ZM24.23 10.35C25.17 10.35 26.00 10.01 26.59 9.45L26.03 8.85C25.58 9.25 24.96 9.49 24.26 9.49C22.83 9.49 21.67 8.47 21.67 6.94C21.67 5.40 22.83 4.40 24.26 4.40C24.96 4.40 25.58 4.65 26.03 5.05L26.59 4.44C26.00 3.89 25.17 3.54 24.23 3.54C22.37 3.54 20.78 4.87 20.78 6.94C20.78 9.02 22.37 10.35 24.23 10.35ZM33.66 10.22L30.03 6.52L32.83 3.68L31.58 3.68L29.13 6.19L29.13 0L28.24 0L28.24 10.22L29.13 10.22L29.13 6.86L32.44 10.22ZM34.68 10.22L35.57 10.22L35.57 0L34.68 0ZM43.92 6.93C43.92 4.86 42.56 3.54 40.70 3.54C38.85 3.54 37.37 4.86 37.37 6.93C37.37 9.00 38.85 10.36 40.70 10.36C41.93 10.36 43.05 9.77 43.62 8.72L42.85 8.39C42.42 9.10 41.62 9.51 40.73 9.51C39.41 9.51 38.43 8.72 38.28 7.32L43.90 7.32C43.92 7.20 43.92 7.06 43.92 6.93ZM38.29 6.55C38.46 5.15 39.41 4.40 40.70 4.40C41.97 4.40 42.91 5.19 43.04 6.55ZM48.40 3.68L46.90 3.68L46.90 1.08L46.02 1.08L46.02 3.68L44.83 3.68L44.83 4.45L46.02 4.45L46.02 10.22L46.90 10.22L46.90 4.45L48.40 4.45Z"></path></g><!----><!----></svg>
|
||||||
|
After Width: | Height: | Size: 2.1 KiB |
1
web/static/assets/vector/isolated-monochrome-white.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg data-v-423bf9ae="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 275.84943617686315 60" class="font"><!----><!----><!----><g data-v-423bf9ae="" id="a893fd5a-3adf-4cc3-81b4-6b589464f3c0" fill="white" transform="matrix(5.7915059834320255,0,0,5.7915059834320255,-4.459463019932912,-4.76837158203125e-7)"><path d="M4.00 10.36C6.12 10.36 7.24 8.92 7.24 7.56C7.24 6.16 6.17 5.33 4.65 4.96L3.35 4.65C1.90 4.31 1.76 3.54 1.76 3.09C1.76 2.02 2.79 1.33 3.88 1.33C5.04 1.33 5.92 2.02 5.98 3.08L6.90 3.08C6.85 1.47 5.54 0.46 3.91 0.46C2.31 0.46 0.84 1.50 0.84 3.09C0.84 3.86 1.13 5.03 3.12 5.50L4.42 5.81C5.38 6.05 6.31 6.55 6.31 7.60C6.31 8.51 5.54 9.49 4.00 9.49C2.65 9.49 1.78 8.58 1.68 7.63L0.77 7.63C0.84 9.03 2.11 10.36 4.00 10.36ZM11.82 3.68L10.32 3.68L10.32 1.08L9.44 1.08L9.44 3.68L8.25 3.68L8.25 4.45L9.44 4.45L9.44 10.22L10.32 10.22L10.32 4.45L11.82 4.45ZM16.02 10.36C17.88 10.36 19.45 9.00 19.45 6.93C19.45 4.86 17.88 3.54 16.02 3.54C14.15 3.54 12.60 4.86 12.60 6.93C12.60 9.00 14.15 10.36 16.02 10.36ZM16.02 9.51C14.63 9.51 13.50 8.48 13.50 6.93C13.50 5.39 14.63 4.40 16.02 4.40C17.39 4.40 18.55 5.39 18.55 6.93C18.55 8.48 17.39 9.51 16.02 9.51ZM24.23 10.35C25.17 10.35 26.00 10.01 26.59 9.45L26.03 8.85C25.58 9.25 24.96 9.49 24.26 9.49C22.83 9.49 21.67 8.47 21.67 6.94C21.67 5.40 22.83 4.40 24.26 4.40C24.96 4.40 25.58 4.65 26.03 5.05L26.59 4.44C26.00 3.89 25.17 3.54 24.23 3.54C22.37 3.54 20.78 4.87 20.78 6.94C20.78 9.02 22.37 10.35 24.23 10.35ZM33.66 10.22L30.03 6.52L32.83 3.68L31.58 3.68L29.13 6.19L29.13 0L28.24 0L28.24 10.22L29.13 10.22L29.13 6.86L32.44 10.22ZM34.68 10.22L35.57 10.22L35.57 0L34.68 0ZM43.92 6.93C43.92 4.86 42.56 3.54 40.70 3.54C38.85 3.54 37.37 4.86 37.37 6.93C37.37 9.00 38.85 10.36 40.70 10.36C41.93 10.36 43.05 9.77 43.62 8.72L42.85 8.39C42.42 9.10 41.62 9.51 40.73 9.51C39.41 9.51 38.43 8.72 38.28 7.32L43.90 7.32C43.92 7.20 43.92 7.06 43.92 6.93ZM38.29 6.55C38.46 5.15 39.41 4.40 40.70 4.40C41.97 4.40 42.91 5.19 43.04 6.55ZM48.40 3.68L46.90 3.68L46.90 1.08L46.02 1.08L46.02 3.68L44.83 3.68L44.83 4.45L46.02 4.45L46.02 10.22L46.90 10.22L46.90 4.45L48.40 4.45Z"></path></g><!----><!----></svg>
|
||||||
|
After Width: | Height: | Size: 2.1 KiB |
3
web/static/robots.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# allow crawling everything by default
|
||||||
|
User-agent: *
|
||||||
|
Disallow:
|
||||||
28
web/svelte.config.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import adapter from '@sveltejs/adapter-node';
|
||||||
|
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
||||||
|
|
||||||
|
/** @type {import('@sveltejs/kit').Config} */
|
||||||
|
const config = {
|
||||||
|
// Consult https://svelte.dev/docs/kit/integrations
|
||||||
|
// for more information about preprocessors
|
||||||
|
preprocess: vitePreprocess(),
|
||||||
|
|
||||||
|
kit: {
|
||||||
|
// Use static adapter for Docker deployment
|
||||||
|
// adapter: adapter({
|
||||||
|
// pages: 'build',
|
||||||
|
// assets: 'build',
|
||||||
|
// fallback: 'index.html',
|
||||||
|
// precompress: false,
|
||||||
|
// strict: false
|
||||||
|
// })
|
||||||
|
|
||||||
|
adapter: adapter({
|
||||||
|
out: 'build',
|
||||||
|
precompress: false,
|
||||||
|
envPrefix: ''
|
||||||
|
})
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
||||||
19
web/tsconfig.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"extends": "./.svelte-kit/tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"allowJs": true,
|
||||||
|
"checkJs": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"strict": true,
|
||||||
|
"moduleResolution": "bundler"
|
||||||
|
}
|
||||||
|
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
|
||||||
|
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
|
||||||
|
//
|
||||||
|
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
|
||||||
|
// from the referenced tsconfig.json - TypeScript does not merge them in
|
||||||
|
}
|
||||||
7
web/vite.config.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import tailwindcss from '@tailwindcss/vite';
|
||||||
|
import { sveltekit } from '@sveltejs/kit/vite';
|
||||||
|
import { defineConfig } from 'vite';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [tailwindcss(), sveltekit()]
|
||||||
|
});
|
||||||