@@ -0,0 +1,10 @@
|
|||||||
|
# Binaries for programs and plugins
|
||||||
|
*.exe
|
||||||
|
*.exe~
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
/data
|
||||||
|
/tmp
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
MIT 许可证
|
||||||
|
|
||||||
|
版权所有 (c) [年份] [版权所有者]
|
||||||
|
|
||||||
|
特此免费授予任何获得本软件和相关文档文件(以下简称“软件”)副本的人,不受限制地处理本软件的权限,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件的副本,并允许获得本软件的人在接受以下条件的前提下行使这些权利:
|
||||||
|
|
||||||
|
1. 没想好
|
||||||
|
|
||||||
|
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
|
||||||
|
|
||||||
|
本软件按“原样”提供,不提供任何形式的明示或暗示担保,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论是因合同、侵权或其他原因引起的,还是与本软件或使用本软件相关的。
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
web:
|
||||||
|
host: "127.0.0.1"
|
||||||
|
web_port: "8080"
|
||||||
|
tls: false
|
||||||
|
cert_private_path: ""
|
||||||
|
cert_public_path: ""
|
||||||
|
|
||||||
|
database:
|
||||||
|
type: "mysql" # mysql or sqlite
|
||||||
|
path: "" # sqlite path
|
||||||
|
host: "" # mysql host
|
||||||
|
port: ""
|
||||||
|
name: ""
|
||||||
|
user: ""
|
||||||
|
pass: ""
|
||||||
|
|
||||||
|
user:
|
||||||
|
cookie_timeout: 604800
|
||||||
|
pass_hash_type: "md5" #密码哈希类型 text md5
|
||||||
|
def_avatar_save_path: "/data/avatar/" #头像保存的真实位置
|
||||||
|
def_avatar_ginrouter_path: "/avatar/" #gin 路由的路径
|
||||||
|
def_avatar_path: "/static/avatars/def.png"
|
||||||
|
|
||||||
|
warehouses:
|
||||||
|
repos_per_page: 12 #每页显示多少个仓库
|
||||||
|
repo_items_per_page: 10 #每个仓库的每页显示多少个物品
|
||||||
|
|
||||||
|
|
||||||
|
configed: false
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"api_ok":0,
|
||||||
|
"user_name_dup":1,
|
||||||
|
"user_name_nofind":2,
|
||||||
|
"user_password_err":3,
|
||||||
|
"user_api_error":4,
|
||||||
|
"user_no_sign":5,
|
||||||
|
"file_save_err":6,
|
||||||
|
"file_type_err":7,
|
||||||
|
"file_get_err":8,
|
||||||
|
"file_size_err":9,
|
||||||
|
"file_mime_err":10,
|
||||||
|
"json_error":11,
|
||||||
|
"gin_error":12,
|
||||||
|
"path_error":13,
|
||||||
|
"email_error":14,
|
||||||
|
"warehouses_api_err":15,
|
||||||
|
"warehouses_name_err":16,
|
||||||
|
"warehouses_id_err":17
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
module saas
|
||||||
|
|
||||||
|
go 1.24
|
||||||
|
|
||||||
|
toolchain go1.24.2
|
||||||
|
|
||||||
|
require (
|
||||||
|
filippo.io/edwards25519 v1.1.0 // indirect
|
||||||
|
github.com/bytedance/sonic v1.13.2 // indirect
|
||||||
|
github.com/bytedance/sonic/loader v0.2.4 // indirect
|
||||||
|
github.com/cloudwego/base64x v0.1.5 // indirect
|
||||||
|
github.com/cloudwego/iasm v0.2.0 // indirect
|
||||||
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.9 // indirect
|
||||||
|
github.com/gin-contrib/sessions v1.0.3 // indirect
|
||||||
|
github.com/gin-contrib/sse v1.1.0 // indirect
|
||||||
|
github.com/gin-gonic/gin v1.10.0 // indirect
|
||||||
|
github.com/glebarez/go-sqlite v1.22.0 // indirect
|
||||||
|
github.com/glebarez/sqlite v1.11.0 // indirect
|
||||||
|
github.com/go-playground/locales v0.14.1 // indirect
|
||||||
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||||
|
github.com/go-playground/validator/v10 v10.26.0 // indirect
|
||||||
|
github.com/go-sql-driver/mysql v1.9.2 // indirect
|
||||||
|
github.com/goccy/go-json v0.10.5 // indirect
|
||||||
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
|
github.com/gorilla/context v1.1.2 // indirect
|
||||||
|
github.com/gorilla/securecookie v1.1.2 // indirect
|
||||||
|
github.com/gorilla/sessions v1.4.0 // indirect
|
||||||
|
github.com/howeyc/fsnotify v0.9.0 // indirect
|
||||||
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
|
||||||
|
github.com/leodido/go-urn v1.4.0 // indirect
|
||||||
|
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
|
github.com/ncruces/go-strftime v0.1.9 // indirect
|
||||||
|
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
|
||||||
|
github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a // indirect
|
||||||
|
github.com/pilu/fresh v0.0.0-20240621171608-8d1fef547a99 // indirect
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
||||||
|
github.com/soulteary/gin-static v0.2.6 // indirect
|
||||||
|
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||||
|
github.com/ugorji/go/codec v1.2.12 // indirect
|
||||||
|
golang.org/x/arch v0.17.0 // indirect
|
||||||
|
golang.org/x/crypto v0.38.0 // indirect
|
||||||
|
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect
|
||||||
|
golang.org/x/net v0.40.0 // indirect
|
||||||
|
golang.org/x/sys v0.33.0 // indirect
|
||||||
|
golang.org/x/text v0.25.0 // indirect
|
||||||
|
google.golang.org/protobuf v1.36.6 // indirect
|
||||||
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
gorm.io/driver/mysql v1.5.7 // indirect
|
||||||
|
gorm.io/gorm v1.26.1 // indirect
|
||||||
|
modernc.org/libc v1.63.0 // indirect
|
||||||
|
modernc.org/mathutil v1.7.1 // indirect
|
||||||
|
modernc.org/memory v1.10.0 // indirect
|
||||||
|
modernc.org/sqlite v1.37.0 // indirect
|
||||||
|
)
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||||
|
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||||
|
github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ=
|
||||||
|
github.com/bytedance/sonic v1.13.2/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4=
|
||||||
|
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
||||||
|
github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCNan80NzY=
|
||||||
|
github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
|
||||||
|
github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
|
||||||
|
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
|
||||||
|
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
|
||||||
|
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
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/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY=
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.9/go.mod h1:WnSQhFKJuBlRyLiKohA/2DtIlPFAbguNaG7QCHcyGok=
|
||||||
|
github.com/gin-contrib/sessions v1.0.3 h1:AZ4j0AalLsGqdrKNbbrKcXx9OJZqViirvNGsJTxcQps=
|
||||||
|
github.com/gin-contrib/sessions v1.0.3/go.mod h1:5i4XMx4KPtQihnzxEqG9u1K446lO3G19jAi2GtbfsAI=
|
||||||
|
github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
|
||||||
|
github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM=
|
||||||
|
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
|
||||||
|
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
|
||||||
|
github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ=
|
||||||
|
github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc=
|
||||||
|
github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw=
|
||||||
|
github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ=
|
||||||
|
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
|
||||||
|
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
||||||
|
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
||||||
|
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
||||||
|
github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k=
|
||||||
|
github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo=
|
||||||
|
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||||
|
github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU=
|
||||||
|
github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
|
||||||
|
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/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/gorilla/context v1.1.2 h1:WRkNAv2uoa03QNIc1A6u4O7DAGMUVoopZhkiXWA2V1o=
|
||||||
|
github.com/gorilla/context v1.1.2/go.mod h1:KDPwT9i/MeWHiLl90fuTgrt4/wPcv75vFAZLaOOcbxM=
|
||||||
|
github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA=
|
||||||
|
github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo=
|
||||||
|
github.com/gorilla/sessions v1.4.0 h1:kpIYOp/oi6MG/p5PgxApU8srsSw9tuFbt46Lt7auzqQ=
|
||||||
|
github.com/gorilla/sessions v1.4.0/go.mod h1:FLWm50oby91+hl7p/wRxDth9bWSuk0qVL2emc7lT5ik=
|
||||||
|
github.com/howeyc/fsnotify v0.9.0 h1:0gtV5JmOKH4A8SsFxG2BczSeXWWPvcMT0euZt5gDAxY=
|
||||||
|
github.com/howeyc/fsnotify v0.9.0/go.mod h1:41HzSPxBGeFRQKEEwgh49TRw/nKBsYZ2cF1OzPjSJsA=
|
||||||
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
|
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||||
|
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
|
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/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||||
|
github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
|
||||||
|
github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
|
||||||
|
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
|
||||||
|
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
|
||||||
|
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
|
||||||
|
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
|
||||||
|
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
|
||||||
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
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/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
|
||||||
|
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
||||||
|
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
|
||||||
|
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
|
||||||
|
github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a h1:Tg4E4cXPZSZyd3H1tJlYo6ZreXV0ZJvE/lorNqyw1AU=
|
||||||
|
github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a/go.mod h1:9Or9aIl95Kp43zONcHd5tLZGKXb9iLx0pZjau0uJ5zg=
|
||||||
|
github.com/pilu/fresh v0.0.0-20240621171608-8d1fef547a99 h1:+X7Gb40b5Bl3v5+3MiGK8Jhemjp65MHc+nkVCfq1Yfc=
|
||||||
|
github.com/pilu/fresh v0.0.0-20240621171608-8d1fef547a99/go.mod h1:2LLTtftTZSdAPR/iVyennXZDLZOYzyDn+T0qEKJ8eSw=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||||
|
github.com/soulteary/gin-static v0.2.6 h1:IOfF2kpNyhNLJBQH1y4tMCDuDdY5SFcpQNYSYWDRlPo=
|
||||||
|
github.com/soulteary/gin-static v0.2.6/go.mod h1:YTYRXDHQnssfe5nlgtysPHBpavMq4TxMMYqx/keSwzc=
|
||||||
|
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/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
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=
|
||||||
|
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
||||||
|
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
||||||
|
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
|
||||||
|
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||||
|
golang.org/x/arch v0.16.0 h1:foMtLTdyOmIniqWCHjY6+JxuC54XP1fDwx4N0ASyW+U=
|
||||||
|
golang.org/x/arch v0.16.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE=
|
||||||
|
golang.org/x/arch v0.17.0 h1:4O3dfLzd+lQewptAHqjewQZQDyEdejz3VwgeYwkZneU=
|
||||||
|
golang.org/x/arch v0.17.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
|
||||||
|
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
|
||||||
|
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
|
||||||
|
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
|
||||||
|
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
|
||||||
|
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM=
|
||||||
|
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8=
|
||||||
|
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
|
||||||
|
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
|
||||||
|
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
|
||||||
|
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
|
||||||
|
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
|
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
|
||||||
|
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
|
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
|
||||||
|
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
|
||||||
|
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
|
||||||
|
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
|
||||||
|
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||||
|
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||||
|
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||||
|
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=
|
||||||
|
gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
|
||||||
|
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
|
||||||
|
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||||
|
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
|
||||||
|
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
|
||||||
|
gorm.io/gorm v1.26.1 h1:ghB2gUI9FkS46luZtn6DLZ0f6ooBJ5IbVej2ENFDjRw=
|
||||||
|
gorm.io/gorm v1.26.1/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE=
|
||||||
|
modernc.org/libc v1.63.0 h1:wKzb61wOGCzgahQBORb1b0dZonh8Ufzl/7r4Yf1D5YA=
|
||||||
|
modernc.org/libc v1.63.0/go.mod h1:wDzH1mgz1wUIEwottFt++POjGRO9sgyQKrpXaz3x89E=
|
||||||
|
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
|
||||||
|
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
|
||||||
|
modernc.org/memory v1.10.0 h1:fzumd51yQ1DxcOxSO+S6X7+QTuVU+n8/Aj7swYjFfC4=
|
||||||
|
modernc.org/memory v1.10.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
|
||||||
|
modernc.org/sqlite v1.37.0 h1:s1TMe7T3Q3ovQiK2Ouz4Jwh7dw4ZDqbebSDTlSJdfjI=
|
||||||
|
modernc.org/sqlite v1.37.0/go.mod h1:5YiWv+YviqGMuGw4V+PNplcyaJ5v+vQd7TQOgkACoJM=
|
||||||
|
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
||||||
|
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"saas/models"
|
||||||
|
"saas/routers"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println("main_init!")
|
||||||
|
data_path := "./data/upload/"
|
||||||
|
avatar_path := "./data/avatar/"
|
||||||
|
config_file_path := "./data/config.yaml"
|
||||||
|
config_temp_path := "./def_config/config_temp.yaml"
|
||||||
|
// 直接尝试创建所有必要的目录
|
||||||
|
err := os.MkdirAll(data_path, 0755)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("创建文件夹失败: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = os.MkdirAll(avatar_path, 0755)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("创建文件夹失败: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//fmt.Println("文件夹创建成功或已存在")
|
||||||
|
//尝试读取配置
|
||||||
|
if !models.File_exists(config_file_path) {
|
||||||
|
fmt.Println("读取配置失败")
|
||||||
|
|
||||||
|
//复制配置模板
|
||||||
|
fmt.Println("复制配置模板")
|
||||||
|
input, err := os.ReadFile(config_temp_path)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = os.WriteFile(config_file_path, input, 0644)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Printf("需要修改此配置:%s\n", config_file_path)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//读取默认配置
|
||||||
|
data, err := os.ReadFile(config_file_path)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := yaml.Unmarshal(data, &models.Configs); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if models.Configs["configed"] == false {
|
||||||
|
fmt.Printf("需要将:%s 内的configed设置为true", config_file_path)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//统一初始化
|
||||||
|
models.All_config_init()
|
||||||
|
|
||||||
|
r := gin.Default()
|
||||||
|
r.LoadHTMLGlob("templates/*")
|
||||||
|
|
||||||
|
//
|
||||||
|
r.StaticFile("/favicon.ico", "./static/favicon.ico")
|
||||||
|
r.StaticFile("/robots.txt", "./static/robots.txt")
|
||||||
|
r.Static("/static/", "./static/static/")
|
||||||
|
r.Static("/dist/", "./static/dist/")
|
||||||
|
|
||||||
|
//静态用户上传的文件
|
||||||
|
r.Static("/avatar/", avatar_path)
|
||||||
|
//store := cookie.NewStore([]byte("secret"))
|
||||||
|
|
||||||
|
// 自定义 404 页面(需要提前加载模板)
|
||||||
|
r.NoRoute(func(ctx *gin.Context) {
|
||||||
|
|
||||||
|
ctx.HTML(404, "error_404.html", gin.H{})
|
||||||
|
})
|
||||||
|
|
||||||
|
routers.Def_router(r.Group("/")) //分组路由传递到def_routers。go
|
||||||
|
|
||||||
|
var http_port = models.Wed_configs["host"].(string) + ":" + models.Wed_configs["web_port"].(string)
|
||||||
|
if models.Wed_configs["tls"].(bool) {
|
||||||
|
if models.Wed_configs["cert_public_path"] == "" || models.Wed_configs["cert_private_path"] == "" {
|
||||||
|
fmt.Printf("需要配置证书路径")
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
fmt.Println("https://" + http_port)
|
||||||
|
r.RunTLS(http_port, models.Wed_configs["cert_public_path"].(string), models.Wed_configs["cert_private_path"].(string))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fmt.Println("http://" + http_port)
|
||||||
|
r.Run(http_port)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
var Configs map[string]interface{}
|
||||||
|
|
||||||
|
var Wed_configs map[string]interface{}
|
||||||
|
|
||||||
|
var Database_configs map[string]interface{}
|
||||||
|
|
||||||
|
var User_configs map[string]interface{}
|
||||||
|
|
||||||
|
var Allowed_avatar_ext = map[string]bool{
|
||||||
|
".jpg": true,
|
||||||
|
".jpeg": true,
|
||||||
|
".png": true,
|
||||||
|
}
|
||||||
|
|
||||||
|
var Allowed_avatar_mime = map[string]bool{
|
||||||
|
"image/jpeg": true,
|
||||||
|
"image/png": true,
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func All_config_init() {
|
||||||
|
//读取web配置
|
||||||
|
Wed_configs = Configs["web"].(map[string]interface{})
|
||||||
|
|
||||||
|
//初始化数据库
|
||||||
|
Database_init()
|
||||||
|
|
||||||
|
//初始化user config
|
||||||
|
User_configs = Configs["user"].(map[string]interface{})
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
package models
|
||||||
@@ -0,0 +1,191 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/glebarez/sqlite"
|
||||||
|
"gorm.io/driver/mysql"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
var DB *gorm.DB
|
||||||
|
var err error
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
ID uint `gorm:"primaryKey;autoIncrement"` // 自增主键
|
||||||
|
Name string `gorm:"size:100;uniqueIndex"` // 唯一约束索引
|
||||||
|
Email string `gorm:"size:255;index"` // 字符串长度限制100 索引
|
||||||
|
Pass string `gorm:"size:128"` // 建议存储哈希后的密码
|
||||||
|
Date time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP"` // 默认当前时间
|
||||||
|
}
|
||||||
|
|
||||||
|
type User_info struct {
|
||||||
|
ID uint `gorm:"primaryKey;autoIncrement"`
|
||||||
|
UserID uint `gorm:"not null;uniqueIndex"`
|
||||||
|
FirstName string `gorm:"size:50;null"`
|
||||||
|
Username string `gorm:"size:30;null"`
|
||||||
|
Birthdate time.Time `gorm:"type:datetime;null"`
|
||||||
|
Gender string `gorm:"type:char(1);check:gender IN ('M', 'F', 'U');default:'U'"`
|
||||||
|
AvatarPath string `gorm:"size:255"`
|
||||||
|
Region string `gorm:"size:50"`
|
||||||
|
Language string `gorm:"size:10;default:'zh-CN'"`
|
||||||
|
CreatedAt time.Time `gorm:"type:datetime;default:CURRENT_TIMESTAMP;column:created_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// var def_user_info = User_info{
|
||||||
|
// ID:0,
|
||||||
|
// UserID:0,
|
||||||
|
// }
|
||||||
|
|
||||||
|
type Cookie struct {
|
||||||
|
ID uint `gorm:"primaryKey;autoIncrement"`
|
||||||
|
UserID uint `gorm:"size:16;not null"`
|
||||||
|
Name string `gorm:"size:255;not null;index"`
|
||||||
|
Value string `gorm:"size:255;not null;index"`
|
||||||
|
Domain string `gorm:"size:255;not null"`
|
||||||
|
Path string `gorm:"size:255;not null;default:/"`
|
||||||
|
ExpiresAt time.Time `gorm:"type:datetime;index"`
|
||||||
|
CreatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
|
||||||
|
UpdatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
|
||||||
|
SecureFlag bool `gorm:"not null;default:false"`
|
||||||
|
HttpOnly bool `gorm:"not null;default:false"`
|
||||||
|
SameSite string `gorm:"size:10;not null;default:'Lax'"`
|
||||||
|
PartitionKey string `gorm:"size:50"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Warehouse struct {
|
||||||
|
ID uint `gorm:"primaryKey;autoIncrement"`
|
||||||
|
CreatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
|
||||||
|
UpdatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
|
||||||
|
Name string `gorm:"type:varchar(255);not null;index"` // 仓库名称
|
||||||
|
CreatorID uint `gorm:"not null;index"` // 创建用户ID(外键)
|
||||||
|
Location string `gorm:"type:varchar(500);not null"` // 仓库位置
|
||||||
|
Capacity int `gorm:"not null;check:capacity >= 0"` // 仓库总容量
|
||||||
|
UsedCapacity int `gorm:"not null;check:used_capacity >= 0"` // 已用容量
|
||||||
|
ImagePath string `gorm:"type:varchar(1000)"` // 仓库图片路径
|
||||||
|
Info string `gorm:"type:text"` // 仓库详细信息
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 物品状态枚举
|
||||||
|
type ItemStatus string
|
||||||
|
|
||||||
|
const (
|
||||||
|
ItemStatusAvailable ItemStatus = "available"
|
||||||
|
ItemStatusMaintenance ItemStatus = "maintenance"
|
||||||
|
ItemStatusRetired ItemStatus = "retired"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Item 仓库物品表模型
|
||||||
|
type Item struct {
|
||||||
|
ID uint `gorm:"primaryKey;autoIncrement"`
|
||||||
|
CreatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
|
||||||
|
UpdatedAt time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP"`
|
||||||
|
|
||||||
|
// 基本信息
|
||||||
|
Name string `gorm:"type:varchar(255);not null;comment:物品名称"`
|
||||||
|
Description string `gorm:"type:text;comment:物品描述"`
|
||||||
|
|
||||||
|
// 库存信息
|
||||||
|
WarehouseID uint `gorm:"not null;index;comment:仓库ID"`
|
||||||
|
Quantity uint `gorm:"not null;default:0;comment:库存数量"`
|
||||||
|
Location string `gorm:"type:varchar(100);comment:库内位置"`
|
||||||
|
|
||||||
|
// 状态管理
|
||||||
|
Status ItemStatus `gorm:"type:varchar(20);not null;default:'available';index;comment:物品状态"`
|
||||||
|
|
||||||
|
// 扩展信息
|
||||||
|
BatchNumber string `gorm:"type:varchar(50);comment:批次号"`
|
||||||
|
ExpirationDate time.Time `gorm:"type:date;comment:失效日期"`
|
||||||
|
|
||||||
|
// 关联关系
|
||||||
|
//Warehouse Warehouse `gorm:"foreignKey:WarehouseID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:RESTRICT"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type WarehouseItem struct {
|
||||||
|
ID uint `gorm:"primaryKey;autoIncrement"`
|
||||||
|
CreatedByID uint `gorm:"not null;index:idx_created_by;comment:创建用户ID"`
|
||||||
|
WarehouseID uint `gorm:"not null;index:idx_warehouse;comment:仓库ID"`
|
||||||
|
CreatedAt time.Time `gorm:"autoCreateTime;index:idx_created_at;comment:创建时间"`
|
||||||
|
Name string `gorm:"type:varchar(255);not null;index:idx_name;comment:物品名称"`
|
||||||
|
SerialNumber string `gorm:"type:varchar(100);index;null;comment:序列号"`
|
||||||
|
Description string `gorm:"type:text;null;comment:物品描述"`
|
||||||
|
ShelfLocation string `gorm:"type:varchar(50);null;index:idx_shelf;comment:货架位置"`
|
||||||
|
Quantity int `gorm:"type:int unsigned;null;comment:物品数量"`
|
||||||
|
UpdatedAt time.Time `gorm:"autoUpdateTime;index:idx_updated_at;comment:最后更新时间"`
|
||||||
|
Status string `gorm:"type:varchar(10);default:'正常';index:idx_status;comment:物品状态(正常/损坏/维修/报废)"`
|
||||||
|
Color string `gorm:"type:varchar(16);default:'bg-success';comment:状态颜色"`
|
||||||
|
Destiny string `gorm:"type:varchar(100);index:idx_destiny;null;comment:物品归宿"`
|
||||||
|
ItemValue int `gorm:"type:int;null;comment:物品价值(单位:分)"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 工单表
|
||||||
|
type Ticket struct {
|
||||||
|
ID uint `gorm:"primaryKey;autoIncrement" json:"id"` // 自增ID
|
||||||
|
Title string `gorm:"type:varchar(255);index:idx_title,length:191" json:"title"` // 带索引标题
|
||||||
|
Info string `gorm:"type:text;not null" json:"info"` // 详细信息
|
||||||
|
Type string `gorm:"type:varchar(16);not null;default:'normal'" json:"type"` // 工单类型
|
||||||
|
CreatedAt time.Time `gorm:"autoCreateTime;index;not null;" json:"createdAt"` // 创建日期
|
||||||
|
UpdatedAt time.Time `gorm:"autoCreateTime;index;not null;" json:"updatedAt"` // 最后更新时间
|
||||||
|
UserID uint `gorm:"index;not null" json:"userId"` // 创建用户ID
|
||||||
|
Status string `gorm:"type:varchar(16);index;not null;default:'open'" json:"status"` // 最后状态
|
||||||
|
Color string `gorm:"type:varchar(32);not null;default:'#3498db'" json:"color"` // 状态颜色
|
||||||
|
ItemID uint `gorm:"null" json:"itemId"` // 关联物件ID
|
||||||
|
CommentCount uint `gorm:"not null;default:0" json:"commentCount"` // 评论数量
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func Database_init() {
|
||||||
|
|
||||||
|
fmt.Println("database_init")
|
||||||
|
//var database_config map[string]interface{}=Configs["database"]
|
||||||
|
Database_configs = Configs["database"].(map[string]interface{})
|
||||||
|
|
||||||
|
if Database_configs["type"].(string) == "sqlite" {
|
||||||
|
//sqlite init
|
||||||
|
fmt.Println("sqlite")
|
||||||
|
DB, err = gorm.Open(sqlite.Open(Database_configs["path"].(string)), &gorm.Config{})
|
||||||
|
} else if Database_configs["type"].(string) == "mysql" {
|
||||||
|
//mysql init
|
||||||
|
fmt.Println("mysql")
|
||||||
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", Database_configs["user"].(string), Database_configs["pass"].(string), Database_configs["host"].(string), Database_configs["port"].(string), Database_configs["name"].(string))
|
||||||
|
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
panic("数据库连接失败")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查 users 表是否存在
|
||||||
|
// if !DB.Migrator().HasTable(&User{}) {
|
||||||
|
// // 自动创建表结构
|
||||||
|
// err := DB.AutoMigrate(&User{})
|
||||||
|
// if err != nil {
|
||||||
|
// panic("创建表失败: " + err.Error())
|
||||||
|
// }
|
||||||
|
// fmt.Println("users 表已创建")
|
||||||
|
// } else {
|
||||||
|
// fmt.Println("users 表已存在")
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 自动创建表结构
|
||||||
|
DB.AutoMigrate(&User{})
|
||||||
|
|
||||||
|
DB.AutoMigrate(&User_info{})
|
||||||
|
|
||||||
|
DB.AutoMigrate(&Cookie{})
|
||||||
|
|
||||||
|
DB.AutoMigrate(&Warehouse{})
|
||||||
|
|
||||||
|
DB.AutoMigrate(&Item{})
|
||||||
|
|
||||||
|
DB.AutoMigrate(&WarehouseItem{})
|
||||||
|
|
||||||
|
DB.AutoMigrate(&Ticket{})
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/md5"
|
||||||
|
"crypto/rand"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"regexp"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Unix_to_str_time(nanos int64) string {
|
||||||
|
t := time.Unix(0, nanos)
|
||||||
|
return (t.Format("2006-01-02 15:04:05.999999999")) // 输出:2021-06-10 09:49:59.123456789
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取当前时间字符串
|
||||||
|
// 参数格式可选,默认"2006-01-02 15:04:05"
|
||||||
|
func Get_current_time_string(format ...string) string {
|
||||||
|
// 默认格式
|
||||||
|
layout := "2006_01_02-15_04_05.999999999"
|
||||||
|
|
||||||
|
// 如果传入了格式参数则使用自定义格式
|
||||||
|
if len(format) > 0 {
|
||||||
|
layout = format[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
return time.Now().Format(layout)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Time_date_str_to_time(timestr string) time.Time {
|
||||||
|
|
||||||
|
// 定义与字符串匹配的布局(注意必须使用Go的参考时间格式)
|
||||||
|
layout := "2006-01-02"
|
||||||
|
|
||||||
|
// 解析时间
|
||||||
|
t, err := time.Parse(layout, timestr)
|
||||||
|
if err != nil {
|
||||||
|
var notime time.Time
|
||||||
|
|
||||||
|
return notime
|
||||||
|
}
|
||||||
|
|
||||||
|
return t
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断文件是否存在
|
||||||
|
func File_exists(path string) bool {
|
||||||
|
_, err := os.Stat(path)
|
||||||
|
if err != nil {
|
||||||
|
return !os.IsNotExist(err)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func Is_email_valid(email string) bool {
|
||||||
|
// 正则表达式(覆盖 99% 常见邮箱格式)
|
||||||
|
pattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
|
||||||
|
regex := regexp.MustCompile(pattern)
|
||||||
|
return regex.MatchString(email)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Valid_str_len(s string, min, max int, checkRune bool) bool {
|
||||||
|
var length int
|
||||||
|
if checkRune {
|
||||||
|
length = len([]rune(s))
|
||||||
|
} else {
|
||||||
|
length = len(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
if min < 0 || max < 0 || (max != 0 && max < min) {
|
||||||
|
return false // 参数非法
|
||||||
|
}
|
||||||
|
|
||||||
|
return length >= min && (max == 0 || length <= max)
|
||||||
|
|
||||||
|
// 示例
|
||||||
|
//valid1 := Valid_str_len("hello", 3, 20, false) // 校验字节数
|
||||||
|
//valid2 := Valid_str_len("你好", 1, 2, true) // 校验字符数
|
||||||
|
}
|
||||||
|
|
||||||
|
func Rand_str_32() string {
|
||||||
|
// 生成 32 字节 (256 位) 随机数据
|
||||||
|
b := make([]byte, 32)
|
||||||
|
if _, err := rand.Read(b); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 转换为 16 进制字符串 (长度 64)
|
||||||
|
cookie := hex.EncodeToString(b)
|
||||||
|
return cookie
|
||||||
|
}
|
||||||
|
|
||||||
|
func Md5_str(str string) string {
|
||||||
|
hashBytes2 := md5.Sum([]byte(str))
|
||||||
|
hashString2 := hex.EncodeToString(hashBytes2[:]) // 注意数组转切片的[:]
|
||||||
|
return hashString2
|
||||||
|
}
|
||||||
|
|
||||||
|
func Hash_user_pass(str string) string {
|
||||||
|
switch User_configs["pass_hash_type"].(string) {
|
||||||
|
case "text":
|
||||||
|
return str
|
||||||
|
case "md5":
|
||||||
|
return Md5_str(str)
|
||||||
|
}
|
||||||
|
|
||||||
|
return Get_current_time_string() + Rand_str_32() //如果转换失败返回当前时间,避免撞库
|
||||||
|
}
|
||||||
|
|
||||||
|
func Page_range(start_page int64, end_page int64, now_page int64, href_heard string) []map[string]string {
|
||||||
|
var a []map[string]string
|
||||||
|
|
||||||
|
for i := start_page; i <= end_page; i++ {
|
||||||
|
var active = ""
|
||||||
|
if i == now_page {
|
||||||
|
active = "active"
|
||||||
|
} else {
|
||||||
|
active = ""
|
||||||
|
}
|
||||||
|
a = append(a, map[string]string{
|
||||||
|
"page_href": fmt.Sprintf("%s%d", href_heard, i),
|
||||||
|
"active": active,
|
||||||
|
"page": fmt.Sprintf("%d", i),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return a
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
func Warehouse_get_total_pages() int64 {
|
||||||
|
var all_page int64 = 0
|
||||||
|
|
||||||
|
DB.Model(&Warehouse{}).Count(&all_page)
|
||||||
|
var repos_per_page = int64(Configs["warehouses"].(map[string]interface{})["repos_per_page"].(int))
|
||||||
|
return (all_page / repos_per_page) + 1
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func Warehouse_get_warehouses(page int64) []Warehouse {
|
||||||
|
|
||||||
|
if page == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var pageSize = int(Configs["warehouses"].(map[string]interface{})["repos_per_page"].(int))
|
||||||
|
var Warehouses []Warehouse
|
||||||
|
offset := int((int(page) - 1) * pageSize)
|
||||||
|
DB.Model(Warehouse{}).
|
||||||
|
Order("id DESC"). // 必须排序保证分页稳定
|
||||||
|
Offset(offset).
|
||||||
|
Limit(pageSize).
|
||||||
|
Find(&Warehouses)
|
||||||
|
|
||||||
|
return Warehouses
|
||||||
|
}
|
||||||
|
|
||||||
|
func Warehouse_get_items_from_whid(wh_id uint) []WarehouseItem {
|
||||||
|
var seachf []WarehouseItem
|
||||||
|
var seach WarehouseItem
|
||||||
|
seach.WarehouseID = wh_id
|
||||||
|
DB.Where(&seach).Order("id DESC").Find(&seachf)
|
||||||
|
return seachf
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# Ops
|
||||||
|
## Operations(运营)的缩写,广泛用于IT和业务运营领域。
|
||||||
|
# 后端:go gin
|
||||||
|
- HTML前端渲染
|
||||||
|
- API
|
||||||
|
# APP前端:vue
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package routers
|
||||||
|
|
||||||
|
import "github.com/gin-gonic/gin"
|
||||||
|
|
||||||
|
func V1_cookie_api(r *gin.RouterGroup) {
|
||||||
|
r.GET("/test", func(ctx *gin.Context) {
|
||||||
|
ctx.SetCookie("test", "testcookie", 100, "/", "127.0.0.1", false, true)
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package routers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Error_code map[string]interface{}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
//读取默认配置
|
||||||
|
fmt.Println("尝试读取错误码文件")
|
||||||
|
data, err := os.ReadFile("./def_config/error_codes.json")
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
fmt.Println("读取错误码文件失败", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := json.Unmarshal(data, &Error_code); err != nil {
|
||||||
|
fmt.Println("解析错误码文件失败", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
package routers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"path"
|
||||||
|
"path/filepath"
|
||||||
|
"saas/models"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func V1_file_api(r *gin.RouterGroup) {
|
||||||
|
r.GET("/", func(ctx *gin.Context) {
|
||||||
|
ctx.JSON(http.StatusOK, map[string]interface{}{
|
||||||
|
"error": "you need use Post",
|
||||||
|
})
|
||||||
|
})
|
||||||
|
r.POST("/upload", func(ctx *gin.Context) {
|
||||||
|
file, err := ctx.FormFile("file")
|
||||||
|
if err == nil {
|
||||||
|
dst := path.Join("./data/upload", file.Filename)
|
||||||
|
ctx.SaveUploadedFile(file, dst)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
//接收头像的接口,
|
||||||
|
r.POST("/avatar", func(ctx *gin.Context) {
|
||||||
|
//返回前端的数据
|
||||||
|
err_msg := "user_api_error"
|
||||||
|
err_code := Error_code[err_msg]
|
||||||
|
data := map[string]interface{}{}
|
||||||
|
|
||||||
|
//判断权限是否可以接收
|
||||||
|
//先判断是否已经登录
|
||||||
|
//获取中间件处理的结果
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
if is_login == true {
|
||||||
|
//读取用户id信息
|
||||||
|
user, _ := ctx.Get("user")
|
||||||
|
//保存这个头像
|
||||||
|
file, err := ctx.FormFile("file")
|
||||||
|
if err == nil {
|
||||||
|
//限制文件大小
|
||||||
|
if file.Size > 512 {
|
||||||
|
if file.Size < 1024000 {
|
||||||
|
// 2. 安全获取文件名并处理路径问题
|
||||||
|
filename := filepath.Base(file.Filename) // 防御性处理路径分隔符
|
||||||
|
// 3. 获取标准后缀名(含点)
|
||||||
|
extWithDot := filepath.Ext(filename)
|
||||||
|
//判断后缀名类型是否是允许的
|
||||||
|
if models.Allowed_avatar_ext[extWithDot] {
|
||||||
|
//判断文件mime是否合法
|
||||||
|
// 打开文件流
|
||||||
|
src_mime, _ := file.Open()
|
||||||
|
defer src_mime.Close()
|
||||||
|
// 读取前512字节用于MIME检测
|
||||||
|
buffer := make([]byte, 512)
|
||||||
|
io.ReadFull(src_mime, buffer)
|
||||||
|
// 检测MIME类型
|
||||||
|
mimeType := http.DetectContentType(buffer)
|
||||||
|
if models.Allowed_avatar_mime[mimeType] {
|
||||||
|
// 打开文件流
|
||||||
|
src, _ := file.Open()
|
||||||
|
defer src.Close()
|
||||||
|
// 创建SHA256哈希器
|
||||||
|
hasher := sha256.New()
|
||||||
|
|
||||||
|
// 计算哈希值
|
||||||
|
io.Copy(hasher, src)
|
||||||
|
// 获取哈希结果
|
||||||
|
hashBytes := hasher.Sum(nil)
|
||||||
|
hashString := hex.EncodeToString(hashBytes)
|
||||||
|
|
||||||
|
new_filename := fmt.Sprintf("%d_%s%s", user.(*models.User).ID, hashString, extWithDot)
|
||||||
|
file.Filename = new_filename
|
||||||
|
|
||||||
|
//这是上传的真实路径
|
||||||
|
dst := path.Join("./data/avatar", file.Filename)
|
||||||
|
|
||||||
|
//这是经过gin路由的路径
|
||||||
|
gin_dat := path.Join("/avatar", file.Filename)
|
||||||
|
|
||||||
|
//判断文件是否存在避免重复保存
|
||||||
|
if models.File_exists(dst) {
|
||||||
|
//fmt.Println("文件存在")
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
//返回gin路由的路径
|
||||||
|
data["path"] = gin_dat
|
||||||
|
data["new_path"] = false
|
||||||
|
} else {
|
||||||
|
//fmt.Println("文件no存在")
|
||||||
|
ferr := ctx.SaveUploadedFile(file, dst)
|
||||||
|
if ferr == nil {
|
||||||
|
//文件保存成功
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
//返回gin路由的路径
|
||||||
|
data["path"] = gin_dat
|
||||||
|
data["new_path"] = true
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "file_save_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
fmt.Println(ferr)
|
||||||
|
data["err"] = ferr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err_msg = "file_mime_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "file_type_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err_msg = "file_size_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err_msg = "file_size_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "file_get_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err_msg = "user_no_sign"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
ctx.JSON(200, map[string]interface{}{
|
||||||
|
"api": "ok",
|
||||||
|
"err_code": err_code,
|
||||||
|
"err_msg": err_msg,
|
||||||
|
"data": data,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package routers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Api_router(r *gin.RouterGroup) {
|
||||||
|
|
||||||
|
r.GET("/", func(ctx *gin.Context) {
|
||||||
|
ctx.String(http.StatusOK, "api")
|
||||||
|
})
|
||||||
|
|
||||||
|
v1_api := r.Group("/v1/")
|
||||||
|
{
|
||||||
|
V1_user_api(v1_api.Group("/user/"))
|
||||||
|
V1_file_api(v1_api.Group("/file/"))
|
||||||
|
V1_cookie_api(v1_api.Group("/cookie/"))
|
||||||
|
V1_warehouses_api(v1_api.Group("/warehouses_api/"))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,349 @@
|
|||||||
|
package routers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"saas/models"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func V1_user_api(r *gin.RouterGroup) {
|
||||||
|
|
||||||
|
var err_code = Error_code["api_ok"]
|
||||||
|
var err_msg string
|
||||||
|
|
||||||
|
r.POST("/add", func(ctx *gin.Context) {
|
||||||
|
//返回前端的数据
|
||||||
|
err_msg = "user_api_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
//转换传进来的数据
|
||||||
|
var jsonData map[string]interface{}
|
||||||
|
if err := ctx.ShouldBindJSON(&jsonData); err == nil {
|
||||||
|
//转换字段
|
||||||
|
newUser := models.User{
|
||||||
|
Name: jsonData["username"].(string),
|
||||||
|
Email: jsonData["useremail"].(string),
|
||||||
|
Pass: jsonData["userpass"].(string), // 实际应替换为哈希值
|
||||||
|
Date: time.Now(),
|
||||||
|
// Date 字段无需赋值,数据库会自动填充默认值
|
||||||
|
}
|
||||||
|
//对用户的密码进行哈希替换
|
||||||
|
newUser.Pass = models.Hash_user_pass(newUser.Pass)
|
||||||
|
|
||||||
|
//用户名是唯一的,先读取是否有这个用户名
|
||||||
|
var user models.User
|
||||||
|
user.Name = newUser.Name
|
||||||
|
|
||||||
|
if models.DB.Where(&user).First(&user).Error == nil {
|
||||||
|
//fmt.Println("找到用户:", user.ID)
|
||||||
|
err_msg = "user_name_dup"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
} else {
|
||||||
|
//fmt.Println("用户不存在")
|
||||||
|
models.DB.Create(&newUser) // 传入指针
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "json_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(200, map[string]interface{}{
|
||||||
|
"api": "ok",
|
||||||
|
"err_code": err_code,
|
||||||
|
"err_msg": err_msg,
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
r.POST("/login", func(ctx *gin.Context) {
|
||||||
|
//返回前端的数据
|
||||||
|
err_msg = "user_api_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
//转换传进来的数据
|
||||||
|
var jsonData map[string]interface{}
|
||||||
|
if err := ctx.ShouldBindJSON(&jsonData); err != nil {
|
||||||
|
fmt.Println("解析JSON ERROR:", err)
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
//转换字段
|
||||||
|
newUser := models.User{
|
||||||
|
Name: jsonData["username"].(string),
|
||||||
|
Pass: jsonData["userpass"].(string), // 实际应替换为哈希值
|
||||||
|
// Date 字段无需赋值,数据库会自动填充默认值
|
||||||
|
}
|
||||||
|
//对用户的密码进行哈希替换
|
||||||
|
newUser.Pass = models.Hash_user_pass(newUser.Pass)
|
||||||
|
|
||||||
|
var user models.User
|
||||||
|
user.Name = newUser.Name
|
||||||
|
if models.DB.Where(&user).First(&user).Error == nil {
|
||||||
|
// 有数据
|
||||||
|
|
||||||
|
if user.Pass == newUser.Pass {
|
||||||
|
//成功登录
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
//发送cookie
|
||||||
|
//cookie时间
|
||||||
|
var cookie_time = 0
|
||||||
|
if jsonData["keep_login"].(bool) {
|
||||||
|
cookie_time = models.User_configs["cookie_timeout"].(int)
|
||||||
|
}
|
||||||
|
|
||||||
|
cookie := models.Rand_str_32() //生成32字节cookie
|
||||||
|
//cookie := "testcookie"
|
||||||
|
//fmt.Println(cookie)
|
||||||
|
//将cookie写进数据库
|
||||||
|
new_cookie := models.Cookie{}
|
||||||
|
new_cookie.Domain = models.Wed_configs["host"].(string)
|
||||||
|
new_cookie.Name = "user"
|
||||||
|
new_cookie.Value = cookie
|
||||||
|
new_cookie.UserID = user.ID
|
||||||
|
|
||||||
|
//cookie时间
|
||||||
|
new_cookie.CreatedAt = time.Now()
|
||||||
|
new_cookie.UpdatedAt = new_cookie.CreatedAt
|
||||||
|
//计算cookie失效时间
|
||||||
|
new_cookie.ExpiresAt = time.Now().Add(time.Duration(models.User_configs["cookie_timeout"].(int)) * time.Second) //计算过期时间
|
||||||
|
new_cookie.SecureFlag = models.Wed_configs["tls"].(bool)
|
||||||
|
ctx.SetCookie("user", cookie, cookie_time, "/", models.Wed_configs["host"].(string), models.Wed_configs["tls"].(bool), true)
|
||||||
|
|
||||||
|
models.DB.Create(&new_cookie) // 传入指针
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//密码错误
|
||||||
|
err_msg = "user_password_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//fmt.Println("用户不存在")
|
||||||
|
err_msg = "user_name_nofind"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(200, map[string]interface{}{
|
||||||
|
"api": "ok",
|
||||||
|
"err_code": err_code,
|
||||||
|
"err_msg": err_msg,
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
r.POST("/logout", func(ctx *gin.Context) {
|
||||||
|
//返回前端的数据
|
||||||
|
err_msg = "user_api_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
//先判断是否已经登录
|
||||||
|
//获取中间件处理的结果
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
if is_login == true {
|
||||||
|
//fmt.Println("loged")
|
||||||
|
cookie_vel, _ := ctx.Cookie("user") //这个cookie在中间件已经判断为有效的,否则is_login不可能为true,所以直接在数据库删除应该是安全的
|
||||||
|
//删除数据库里的cookie
|
||||||
|
var cookie models.Cookie
|
||||||
|
cookie.Value = cookie_vel
|
||||||
|
models.DB.Where(&cookie).Delete(&cookie)
|
||||||
|
//删除前端cookie
|
||||||
|
ctx.SetCookie("user", "", -1, "/", models.Wed_configs["host"].(string), models.Wed_configs["tls"].(bool), true)
|
||||||
|
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//fmt.Println("no loged")
|
||||||
|
err_msg = "user_no_sign"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(200, map[string]interface{}{
|
||||||
|
"api": "ok",
|
||||||
|
"err_code": err_code,
|
||||||
|
"err_msg": err_msg,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
r.POST("/updata_info", func(ctx *gin.Context) {
|
||||||
|
//返回前端的数据
|
||||||
|
err_msg = "user_api_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
//先判断是否已经登录
|
||||||
|
//获取中间件处理的结果
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
if is_login == true {
|
||||||
|
//转换传进来的数据
|
||||||
|
var jsonData map[string]interface{}
|
||||||
|
if err := ctx.ShouldBindJSON(&jsonData); err == nil {
|
||||||
|
|
||||||
|
user_info_, _ := ctx.Get("user_info")
|
||||||
|
user_info, _ := user_info_.(*models.User_info) //这个数据本身就是从数据库读出来的,理论上结构转换不会出错
|
||||||
|
user_info_find := models.User_info{
|
||||||
|
ID: user_info.ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
new_user_info := models.User_info{
|
||||||
|
AvatarPath: jsonData["avatar"].(string),
|
||||||
|
FirstName: jsonData["first_name"].(string),
|
||||||
|
Username: jsonData["username"].(string),
|
||||||
|
Birthdate: models.Time_date_str_to_time(jsonData["birthday"].(string)),
|
||||||
|
}
|
||||||
|
|
||||||
|
//需要验证传入数据的合法性 例如头像url是否站内的
|
||||||
|
if strings.HasPrefix(new_user_info.AvatarPath, models.User_configs["def_avatar_ginrouter_path"].(string)) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new_user_info.AvatarPath = models.User_configs["def_avatar_path"].(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
//fmt.Printf("%%#v: %#v\n", new_user_info)
|
||||||
|
models.DB.Where(&user_info_find).Updates(&new_user_info)
|
||||||
|
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "json_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//fmt.Println("no loged")
|
||||||
|
err_msg = "user_no_sign"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(200, map[string]interface{}{
|
||||||
|
"api": "ok",
|
||||||
|
"err_code": err_code,
|
||||||
|
"err_msg": err_msg,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
r.POST("/change_email", func(ctx *gin.Context) {
|
||||||
|
//返回前端的数据
|
||||||
|
err_msg = "user_api_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
//先判断是否已经登录
|
||||||
|
//获取中间件处理的结果
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
if is_login == true {
|
||||||
|
//转换传进来的数据
|
||||||
|
var jsonData map[string]interface{}
|
||||||
|
if err := ctx.ShouldBindJSON(&jsonData); err == nil {
|
||||||
|
|
||||||
|
//需要验证传入数据的合法性
|
||||||
|
if models.Is_email_valid(jsonData["new_email"].(string)) {
|
||||||
|
user_, _ := ctx.Get("user")
|
||||||
|
user, _ := user_.(*models.User)
|
||||||
|
user_find := models.User{
|
||||||
|
ID: user.ID,
|
||||||
|
}
|
||||||
|
user_new := models.User{
|
||||||
|
Email: jsonData["new_email"].(string),
|
||||||
|
}
|
||||||
|
models.DB.Where(&user_find).Updates(&user_new)
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "email_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "json_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//fmt.Println("no loged")
|
||||||
|
err_msg = "user_no_sign"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(200, map[string]interface{}{
|
||||||
|
"api": "ok",
|
||||||
|
"err_code": err_code,
|
||||||
|
"err_msg": err_msg,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
r.POST("/change_pass", func(ctx *gin.Context) {
|
||||||
|
//返回前端的数据
|
||||||
|
err_msg = "user_api_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
//先判断是否已经登录
|
||||||
|
//获取中间件处理的结果
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
if is_login == true {
|
||||||
|
//转换传进来的数据
|
||||||
|
var jsonData map[string]interface{}
|
||||||
|
if err := ctx.ShouldBindJSON(&jsonData); err == nil {
|
||||||
|
|
||||||
|
//需要验证传入数据的合法性
|
||||||
|
|
||||||
|
//读取已登录的用户信息
|
||||||
|
user_, _ := ctx.Get("user")
|
||||||
|
user, _ := user_.(*models.User)
|
||||||
|
user_find := models.User{
|
||||||
|
ID: user.ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
models.DB.Where(&user_find).First(&user_find)
|
||||||
|
|
||||||
|
pass_old := jsonData["pass_old"].(string)
|
||||||
|
pass_new := jsonData["pass_new"].(string)
|
||||||
|
//对用户的密码进行哈希替换
|
||||||
|
pass_old = models.Hash_user_pass(pass_old)
|
||||||
|
pass_new = models.Hash_user_pass(pass_new)
|
||||||
|
|
||||||
|
if user_find.Pass == pass_old {
|
||||||
|
|
||||||
|
new_user := models.User{
|
||||||
|
Pass: pass_new,
|
||||||
|
}
|
||||||
|
|
||||||
|
//修改密码
|
||||||
|
models.DB.Where(&user_find).Updates(&new_user)
|
||||||
|
|
||||||
|
//密码修改后所有cookie都应该失效
|
||||||
|
cookie_find := models.Cookie{
|
||||||
|
UserID: user.ID,
|
||||||
|
}
|
||||||
|
models.DB.Where(&cookie_find).Delete(&cookie_find)
|
||||||
|
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "user_password_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "json_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//fmt.Println("no loged")
|
||||||
|
err_msg = "user_no_sign"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(200, map[string]interface{}{
|
||||||
|
"api": "ok",
|
||||||
|
"err_code": err_code,
|
||||||
|
"err_msg": err_msg,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -0,0 +1,178 @@
|
|||||||
|
package routers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"saas/models"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 定义接收JSON数据的结构体
|
||||||
|
type Add_item_json struct {
|
||||||
|
// 使用结构体标签指定JSON字段名
|
||||||
|
WarehouseID uint `json:"warehouse_id"`
|
||||||
|
Name string `json:"item_name"`
|
||||||
|
Info string `json:"item_info"`
|
||||||
|
SN string `json:"item_sn"`
|
||||||
|
Who string `json:"item_who"`
|
||||||
|
Int int `json:"item_int"`
|
||||||
|
Consts float32 `json:"item_consts"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func V1_warehouses_api(r *gin.RouterGroup) {
|
||||||
|
var err_code = Error_code["api_ok"]
|
||||||
|
var err_msg string
|
||||||
|
|
||||||
|
r.POST("/create", func(ctx *gin.Context) {
|
||||||
|
err_msg = "warehouses_api_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
//先判断是否已经登录
|
||||||
|
//获取中间件处理的结果
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
if is_login == true {
|
||||||
|
user_info, _ := ctx.Get("user_info")
|
||||||
|
|
||||||
|
//转换传进来的数据
|
||||||
|
var jsonData map[string]interface{}
|
||||||
|
if err := ctx.ShouldBindJSON(&jsonData); err == nil {
|
||||||
|
//fmt.Println(jsonData)
|
||||||
|
if jsonData["warehouses_name"].(string) != "" {
|
||||||
|
warehouses_data := models.Warehouse{
|
||||||
|
Name: jsonData["warehouses_name"].(string),
|
||||||
|
Info: jsonData["warehouses_info"].(string),
|
||||||
|
CreatorID: user_info.(*models.User_info).UserID,
|
||||||
|
Capacity: 0,
|
||||||
|
UsedCapacity: 0,
|
||||||
|
Location: "local",
|
||||||
|
}
|
||||||
|
models.DB.Create(&warehouses_data) // 传入指针
|
||||||
|
//fmt.Println(dberr.Error)
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "warehouses_name_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err_msg = "json_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//fmt.Println("no loged")
|
||||||
|
err_msg = "user_no_sign"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(200, map[string]interface{}{
|
||||||
|
"api": "ok",
|
||||||
|
"err_code": err_code,
|
||||||
|
"err_msg": err_msg,
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
r.POST("/add_item", func(ctx *gin.Context) {
|
||||||
|
err_msg = "warehouses_api_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
//先判断是否已经登录
|
||||||
|
//获取中间件处理的结果
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
if is_login == true {
|
||||||
|
|
||||||
|
//转换传进来的数据
|
||||||
|
var item Add_item_json
|
||||||
|
if err := ctx.ShouldBindJSON(&item); err == nil {
|
||||||
|
//先判断是否有权限
|
||||||
|
|
||||||
|
//(还没弄)
|
||||||
|
|
||||||
|
//后插入数据
|
||||||
|
user_info_, _ := ctx.Get("user_info")
|
||||||
|
user_info := user_info_.(*models.User_info)
|
||||||
|
var add_item_temp models.WarehouseItem
|
||||||
|
add_item_temp.CreatedByID = user_info.UserID
|
||||||
|
add_item_temp.WarehouseID = item.WarehouseID
|
||||||
|
add_item_temp.Name = item.Name
|
||||||
|
add_item_temp.SerialNumber = item.SN
|
||||||
|
add_item_temp.Description = item.Info
|
||||||
|
add_item_temp.Destiny = item.Who
|
||||||
|
add_item_temp.Quantity = item.Int
|
||||||
|
add_item_temp.ItemValue = int(item.Consts * 100)
|
||||||
|
//插入一条数据
|
||||||
|
models.DB.Create(&add_item_temp)
|
||||||
|
//更新仓库信息
|
||||||
|
var seach_wh models.Warehouse
|
||||||
|
seach_wh.ID = item.WarehouseID
|
||||||
|
var out_wh models.Warehouse
|
||||||
|
models.DB.Where(&seach_wh).First(&out_wh)
|
||||||
|
out_wh.UsedCapacity += 1
|
||||||
|
models.DB.Where(&seach_wh).Updates(&out_wh)
|
||||||
|
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "json_error"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//fmt.Println("no loged")
|
||||||
|
err_msg = "user_no_sign"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(200, map[string]interface{}{
|
||||||
|
"api": "ok",
|
||||||
|
"err_code": err_code,
|
||||||
|
"err_msg": err_msg,
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
r.GET("/get_items/:wh_id", func(ctx *gin.Context) {
|
||||||
|
err_msg = "warehouses_api_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
var seachf []models.WarehouseItem
|
||||||
|
//先判断是否已经登录
|
||||||
|
//获取中间件处理的结果
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
if is_login == true {
|
||||||
|
id := ctx.Param("wh_id")
|
||||||
|
id_int, err := strconv.ParseInt(id, 10, 0)
|
||||||
|
if err == nil {
|
||||||
|
if id_int > 0 {
|
||||||
|
|
||||||
|
seachf = models.Warehouse_get_items_from_whid(uint(id_int))
|
||||||
|
//fmt.Println(seachf)
|
||||||
|
|
||||||
|
err_msg = "api_ok"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "warehouses_id_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_msg = "warehouses_id_err"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//fmt.Println("no loged")
|
||||||
|
err_msg = "user_no_sign"
|
||||||
|
err_code = Error_code[err_msg]
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(200, map[string]interface{}{
|
||||||
|
"api": "ok",
|
||||||
|
"err_code": err_code,
|
||||||
|
"err_msg": err_msg,
|
||||||
|
"data": seachf,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,282 @@
|
|||||||
|
package routers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"saas/models"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Def_router(r *gin.RouterGroup) {
|
||||||
|
r.Use(func(ctx *gin.Context) {
|
||||||
|
ctx.Set("is_login", false)
|
||||||
|
//读取用户cookie,判断用户是否已登录
|
||||||
|
cookie_vel, _ := ctx.Cookie("user")
|
||||||
|
//fmt.Println(cookie_vel)
|
||||||
|
if cookie_vel != "" {
|
||||||
|
var cookie models.Cookie
|
||||||
|
cookie.Value = cookie_vel
|
||||||
|
if models.DB.Where(&cookie).First(&cookie).Error == nil {
|
||||||
|
// 有数据
|
||||||
|
//有cookie,判断cookie有效性
|
||||||
|
if cookie.ExpiresAt.After(time.Now()) {
|
||||||
|
// ExpiresAt 在当前时间之后(未过期)
|
||||||
|
//fmt.Println("Cookie 未过期")
|
||||||
|
//cookie有效,说明已经登录,cookie过期时间延长,避免大量写入数据库,先判断还有多久过期,小于一天才刷新
|
||||||
|
// 计算过期时间与当前时间的差值
|
||||||
|
remaining := time.Until(cookie.ExpiresAt) // 直接使用 time.Until
|
||||||
|
|
||||||
|
if remaining < 24*time.Hour {
|
||||||
|
//fmt.Println("剩余时间不足 1 天")
|
||||||
|
var cookie_up models.Cookie
|
||||||
|
cookie_up.UpdatedAt = time.Now()
|
||||||
|
cookie_up.ExpiresAt = time.Now().Add(time.Duration(models.User_configs["cookie_timeout"].(int)) * time.Second) //计算过期时间
|
||||||
|
models.DB.Model(&models.Cookie{}).Where(&cookie).Updates(&cookie_up)
|
||||||
|
} else {
|
||||||
|
//fmt.Println("cookie时间大于一天")
|
||||||
|
}
|
||||||
|
|
||||||
|
//读取用户权限信息
|
||||||
|
var user models.User
|
||||||
|
user.ID = cookie.UserID
|
||||||
|
if models.DB.Where(&user).First(&user).Error == nil {
|
||||||
|
//找到登录权限
|
||||||
|
//清除一些重要数据,避免传递的时候泄露
|
||||||
|
user.Pass = ""
|
||||||
|
// 读取用户info
|
||||||
|
var user_info models.User_info
|
||||||
|
user_info.UserID = cookie.UserID
|
||||||
|
if models.DB.Where(&user_info).First(&user_info).Error == nil {
|
||||||
|
// 有数据
|
||||||
|
//fmt.Println(user_info)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// 无数据
|
||||||
|
//创建一个默认info
|
||||||
|
user_info.AvatarPath = models.User_configs["def_avatar_path"].(string)
|
||||||
|
user_info.UserID = cookie.UserID
|
||||||
|
models.DB.Create(&user_info) // 传入指针
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Set("is_login", true)
|
||||||
|
ctx.Set("user_info", &user_info)
|
||||||
|
ctx.Set("user", &user)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//找不到登录权限?? 可能被封号?
|
||||||
|
//删除前端cookie
|
||||||
|
ctx.SetCookie("user", "", -1, "/", models.Wed_configs["host"].(string), models.Wed_configs["tls"].(bool), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// ExpiresAt 在当前时间之前或等于(已过期)
|
||||||
|
//fmt.Println("Cookie 已过期")
|
||||||
|
//删除数据库的cookie
|
||||||
|
models.DB.Delete(&cookie)
|
||||||
|
//删除前端cookie
|
||||||
|
ctx.SetCookie("user", "", -1, "/", models.Wed_configs["host"].(string), models.Wed_configs["tls"].(bool), true)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//找不到cookie,未登录
|
||||||
|
//删除前端cookie
|
||||||
|
ctx.SetCookie("user", "", -1, "/", models.Wed_configs["host"].(string), models.Wed_configs["tls"].(bool), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
Api_router(r.Group("/api/")) //分组路由传递到api_routers。go
|
||||||
|
|
||||||
|
//无需权限的页面
|
||||||
|
r.GET("/", func(ctx *gin.Context) {
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
user_info, _ := ctx.Get("user_info")
|
||||||
|
ctx.HTML(http.StatusOK, "index.html", gin.H{
|
||||||
|
"is_login": is_login,
|
||||||
|
"user_info": user_info,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
r.GET("/sign-up", func(ctx *gin.Context) {
|
||||||
|
ctx.HTML(http.StatusOK, "sign-up.html", gin.H{})
|
||||||
|
})
|
||||||
|
r.GET("/sign-in", func(ctx *gin.Context) {
|
||||||
|
ctx.HTML(http.StatusOK, "sign-in-01.html", gin.H{})
|
||||||
|
})
|
||||||
|
r.GET("/test", func(ctx *gin.Context) {
|
||||||
|
ctx.HTML(http.StatusOK, "empty.html", gin.H{})
|
||||||
|
})
|
||||||
|
|
||||||
|
//需要权限的页面
|
||||||
|
// r.Use(func(ctx *gin.Context) {
|
||||||
|
// is_login, _ := ctx.Get("is_login")
|
||||||
|
// //判断是否登录
|
||||||
|
// if is_login == true {
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
// ctx.Redirect(302, "/sign-in")
|
||||||
|
// }
|
||||||
|
|
||||||
|
// })
|
||||||
|
r.GET("/workorders", func(ctx *gin.Context) {
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
user_info, _ := ctx.Get("user_info")
|
||||||
|
//判断是否登录
|
||||||
|
if is_login == true {
|
||||||
|
|
||||||
|
ctx.HTML(http.StatusOK, "workorders.html", gin.H{
|
||||||
|
"is_login": is_login,
|
||||||
|
"user_info": user_info,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
ctx.Redirect(302, "/sign-in")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
r.GET("/warehouses", func(ctx *gin.Context) {
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
user_info, _ := ctx.Get("user_info")
|
||||||
|
//判断是否登录
|
||||||
|
if is_login == true {
|
||||||
|
total_pages := models.Warehouse_get_total_pages() //获取总页数
|
||||||
|
disabled_next_page := false
|
||||||
|
if total_pages <= 1 {
|
||||||
|
disabled_next_page = true
|
||||||
|
} else {
|
||||||
|
disabled_next_page = false
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.HTML(http.StatusOK, "warehouses.html", gin.H{
|
||||||
|
"total_pages": total_pages,
|
||||||
|
"this_page": 1,
|
||||||
|
"prev_page": fmt.Sprintf("/warehouses/%d", 1),
|
||||||
|
"next_page": fmt.Sprintf("/warehouses/%d", 2),
|
||||||
|
"disabled_prev_page": true,
|
||||||
|
"disabled_next_page": disabled_next_page,
|
||||||
|
"page_range": models.Page_range(1, total_pages, 1, "/warehouses/"),
|
||||||
|
"Warehouses": models.Warehouse_get_warehouses(1),
|
||||||
|
"is_login": is_login,
|
||||||
|
"user_info": user_info,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
ctx.Redirect(302, "/sign-in")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
r.GET("/warehouses/:id", func(ctx *gin.Context) {
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
user_info, _ := ctx.Get("user_info")
|
||||||
|
//判断是否登录
|
||||||
|
if is_login == true {
|
||||||
|
id := ctx.Param("id")
|
||||||
|
id_int64, err := strconv.ParseInt(id, 10, 64)
|
||||||
|
if err == nil {
|
||||||
|
if id_int64 > 0 {
|
||||||
|
total_pages := models.Warehouse_get_total_pages() //获取总页数
|
||||||
|
disabled_next_page := false
|
||||||
|
disabled_prev_page := false
|
||||||
|
if total_pages == id_int64 {
|
||||||
|
disabled_next_page = true
|
||||||
|
} else {
|
||||||
|
disabled_next_page = false
|
||||||
|
}
|
||||||
|
if id_int64 > 1 {
|
||||||
|
disabled_prev_page = false
|
||||||
|
} else {
|
||||||
|
disabled_prev_page = true
|
||||||
|
}
|
||||||
|
|
||||||
|
//制作页码标签
|
||||||
|
|
||||||
|
ctx.HTML(http.StatusOK, "warehouses.html", gin.H{
|
||||||
|
"total_pages": total_pages,
|
||||||
|
"this_page": id_int64,
|
||||||
|
"prev_page": fmt.Sprintf("/warehouses/%d", id_int64-1),
|
||||||
|
"next_page": fmt.Sprintf("/warehouses/%d", id_int64+1),
|
||||||
|
"disabled_prev_page": disabled_prev_page,
|
||||||
|
"disabled_next_page": disabled_next_page,
|
||||||
|
"page_range": models.Page_range(1, total_pages, id_int64, "/warehouses/"),
|
||||||
|
"Warehouses": models.Warehouse_get_warehouses(id_int64),
|
||||||
|
"is_login": is_login,
|
||||||
|
"user_info": user_info,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
ctx.Redirect(302, "/warehouses")
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ctx.Redirect(302, "/warehouses")
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ctx.Redirect(302, "/sign-in")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
r.GET("/warehouse/:id", func(ctx *gin.Context) {
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
user_info, _ := ctx.Get("user_info")
|
||||||
|
//判断是否登录
|
||||||
|
if is_login == true {
|
||||||
|
id := ctx.Param("id")
|
||||||
|
id_int64, err := strconv.ParseInt(id, 10, 64)
|
||||||
|
if err == nil {
|
||||||
|
if id_int64 > 0 {
|
||||||
|
|
||||||
|
ctx.HTML(http.StatusOK, "warehouses_show_item.html", gin.H{
|
||||||
|
"warehouse_id": id_int64,
|
||||||
|
"is_login": is_login,
|
||||||
|
"user_info": user_info,
|
||||||
|
"items": models.Warehouse_get_items_from_whid(uint(id_int64)),
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
ctx.Redirect(302, "/warehouses")
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ctx.Redirect(302, "/warehouses")
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ctx.Redirect(302, "/sign-in")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
r.GET("/setting-my", func(ctx *gin.Context) {
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
user_info, _ := ctx.Get("user_info")
|
||||||
|
user, _ := ctx.Get("user")
|
||||||
|
//判断是否登录
|
||||||
|
if is_login == true {
|
||||||
|
|
||||||
|
ctx.HTML(http.StatusOK, "setting-my.html", gin.H{
|
||||||
|
"is_login": is_login,
|
||||||
|
"user_info": user_info,
|
||||||
|
"user": user,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
ctx.HTML(404, "error_404.html", gin.H{})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
r.GET("/setting-security", func(ctx *gin.Context) {
|
||||||
|
is_login, _ := ctx.Get("is_login")
|
||||||
|
user_info, _ := ctx.Get("user_info")
|
||||||
|
user, _ := ctx.Get("user")
|
||||||
|
//判断是否登录
|
||||||
|
if is_login == true {
|
||||||
|
|
||||||
|
ctx.HTML(http.StatusOK, "setting-security.html", gin.H{
|
||||||
|
"is_login": is_login,
|
||||||
|
"user_info": user_info,
|
||||||
|
"user": user,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
ctx.HTML(404, "error_404.html", gin.H{})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -0,0 +1,276 @@
|
|||||||
|
/*!
|
||||||
|
* Tabler v1.0.0-beta20 (https://tabler.io)
|
||||||
|
* @version 1.0.0-beta20
|
||||||
|
* @link https://tabler.io
|
||||||
|
* Copyright 2018-2023 The Tabler Authors
|
||||||
|
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||||||
|
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
/* prettier-ignore */
|
||||||
|
/* prettier-ignore */
|
||||||
|
pre.highlight,
|
||||||
|
.highlight pre {
|
||||||
|
max-height: 30rem;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
overflow: auto;
|
||||||
|
border-radius: var(--tblr-border-radius);
|
||||||
|
}
|
||||||
|
pre.highlight,
|
||||||
|
.highlight pre {
|
||||||
|
scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16) transparent;
|
||||||
|
}
|
||||||
|
pre.highlight::-webkit-scrollbar,
|
||||||
|
.highlight pre::-webkit-scrollbar {
|
||||||
|
width: 1rem;
|
||||||
|
height: 1rem;
|
||||||
|
-webkit-transition: background 0.3s;
|
||||||
|
transition: background 0.3s;
|
||||||
|
}
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
pre.highlight::-webkit-scrollbar,
|
||||||
|
.highlight pre::-webkit-scrollbar {
|
||||||
|
-webkit-transition: none;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pre.highlight::-webkit-scrollbar-thumb,
|
||||||
|
.highlight pre::-webkit-scrollbar-thumb {
|
||||||
|
border-radius: 1rem;
|
||||||
|
border: 5px solid transparent;
|
||||||
|
box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16);
|
||||||
|
}
|
||||||
|
pre.highlight::-webkit-scrollbar-track,
|
||||||
|
.highlight pre::-webkit-scrollbar-track {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
pre.highlight:hover::-webkit-scrollbar-thumb,
|
||||||
|
.highlight pre:hover::-webkit-scrollbar-thumb {
|
||||||
|
box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.32);
|
||||||
|
}
|
||||||
|
pre.highlight::-webkit-scrollbar-corner,
|
||||||
|
.highlight pre::-webkit-scrollbar-corner {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.highlight code > * {
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
.highlight .c, .highlight .c1 {
|
||||||
|
color: #a0aec0;
|
||||||
|
}
|
||||||
|
.highlight .nt, .highlight .nc, .highlight .nx {
|
||||||
|
color: #ff8383;
|
||||||
|
}
|
||||||
|
.highlight .na, .highlight .p {
|
||||||
|
color: #ffe484;
|
||||||
|
}
|
||||||
|
.highlight .s, .highlight .dl, .highlight .s2 {
|
||||||
|
color: #b5f4a5;
|
||||||
|
}
|
||||||
|
.highlight .k {
|
||||||
|
color: #93ddfd;
|
||||||
|
}
|
||||||
|
.highlight .s1, .highlight .mi {
|
||||||
|
color: #d9a9ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example {
|
||||||
|
padding: 2rem;
|
||||||
|
margin: 1rem 0 2rem;
|
||||||
|
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
|
||||||
|
border-radius: 3px 3px 0 0;
|
||||||
|
position: relative;
|
||||||
|
min-height: 12rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-centered {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.example-centered .example-content {
|
||||||
|
flex: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-content {
|
||||||
|
font-size: 0.875rem;
|
||||||
|
line-height: 1.4285714286;
|
||||||
|
color: var(--tblr-body-color);
|
||||||
|
flex: 1;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
.example-content .page-header {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-bg {
|
||||||
|
background: #f6f8fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-code {
|
||||||
|
margin: 2rem 0;
|
||||||
|
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
.example-code pre {
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 0 0 3px 3px;
|
||||||
|
}
|
||||||
|
.example + .example-code {
|
||||||
|
margin-top: -2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-column {
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.example-column > .card:last-of-type {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-column-1 {
|
||||||
|
max-width: 26rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-column-2 {
|
||||||
|
max-width: 52rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-modal-backdrop {
|
||||||
|
background: #182433;
|
||||||
|
opacity: 0.24;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
height: 100%;
|
||||||
|
border-radius: 2px 2px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-sponsor {
|
||||||
|
background: var(--tblr-primary-lt) no-repeat center/100% 100%;
|
||||||
|
border-color: var(--tblr-primary);
|
||||||
|
min-height: 316px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu-demo {
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
margin-bottom: 1rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-icon-preview {
|
||||||
|
position: -webkit-sticky;
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.demo-icon-preview svg,
|
||||||
|
.demo-icon-preview i {
|
||||||
|
width: 15rem;
|
||||||
|
height: 15rem;
|
||||||
|
font-size: 15rem;
|
||||||
|
stroke-width: 1.5;
|
||||||
|
margin: 0 auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
@media (max-width: 575.98px) {
|
||||||
|
.demo-icon-preview svg,
|
||||||
|
.demo-icon-preview i {
|
||||||
|
width: 10rem;
|
||||||
|
height: 10rem;
|
||||||
|
font-size: 10rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-icon-preview-icon pre {
|
||||||
|
margin: 0;
|
||||||
|
-webkit-user-select: all;
|
||||||
|
-moz-user-select: all;
|
||||||
|
user-select: all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-dividers > p {
|
||||||
|
opacity: 0.2;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-icons-list {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 -2px -1px 0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
.demo-icons-list > * {
|
||||||
|
flex: 1 0 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-icons-list-wrap {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-icons-list-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
aspect-ratio: 1;
|
||||||
|
text-align: center;
|
||||||
|
padding: 0.5rem;
|
||||||
|
border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
|
||||||
|
border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
|
||||||
|
color: inherit;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.demo-icons-list-item .icon {
|
||||||
|
width: 1.5rem;
|
||||||
|
height: 1.5rem;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
.demo-icons-list-item:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-btn {
|
||||||
|
position: fixed;
|
||||||
|
right: -1px;
|
||||||
|
top: 10rem;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-scheme {
|
||||||
|
display: inline-block;
|
||||||
|
border-radius: 50%;
|
||||||
|
height: 3rem;
|
||||||
|
width: 3rem;
|
||||||
|
position: relative;
|
||||||
|
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
|
||||||
|
box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
|
||||||
|
}
|
||||||
|
.settings-scheme-light {
|
||||||
|
background: linear-gradient(135deg, #ffffff 50%, #fcfdfe 50%);
|
||||||
|
}
|
||||||
|
.settings-scheme-mixed {
|
||||||
|
background-image: linear-gradient(135deg, #182433 50%, #fff 50%);
|
||||||
|
}
|
||||||
|
.settings-scheme-transparent {
|
||||||
|
background: #fcfdfe;
|
||||||
|
}
|
||||||
|
.settings-scheme-dark {
|
||||||
|
background: #182433;
|
||||||
|
}
|
||||||
|
.settings-scheme-colored {
|
||||||
|
background-image: linear-gradient(135deg, var(--tblr-primary) 50%, #fcfdfe 50%);
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
/*!
|
||||||
|
* Tabler v1.0.0-beta20 (https://tabler.io)
|
||||||
|
* @version 1.0.0-beta20
|
||||||
|
* @link https://tabler.io
|
||||||
|
* Copyright 2018-2023 The Tabler Authors
|
||||||
|
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||||||
|
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
.highlight pre,pre.highlight{max-height:30rem;margin:1.5rem 0;overflow:auto;border-radius:var(--tblr-border-radius)}.highlight pre,pre.highlight{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16) transparent}.highlight pre::-webkit-scrollbar,pre.highlight::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion:reduce){.highlight pre::-webkit-scrollbar,pre.highlight::-webkit-scrollbar{-webkit-transition:none;transition:none}}.highlight pre::-webkit-scrollbar-thumb,pre.highlight::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.highlight pre::-webkit-scrollbar-track,pre.highlight::-webkit-scrollbar-track{background:0 0}.highlight pre:hover::-webkit-scrollbar-thumb,pre.highlight:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}.highlight pre::-webkit-scrollbar-corner,pre.highlight::-webkit-scrollbar-corner{background:0 0}.highlight{margin:0}.highlight code>*{margin:0!important;padding:0!important}.highlight .c,.highlight .c1{color:#a0aec0}.highlight .nc,.highlight .nt,.highlight .nx{color:#ff8383}.highlight .na,.highlight .p{color:#ffe484}.highlight .dl,.highlight .s,.highlight .s2{color:#b5f4a5}.highlight .k{color:#93ddfd}.highlight .mi,.highlight .s1{color:#d9a9ff}.example{padding:2rem;margin:1rem 0 2rem;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px 3px 0 0;position:relative;min-height:12rem;display:flex;align-items:center;overflow-x:auto}.example-centered{justify-content:center}.example-centered .example-content{flex:0 auto}.example-content{font-size:.875rem;line-height:1.4285714286;color:var(--tblr-body-color);flex:1;max-width:100%}.example-content .page-header{margin-bottom:0}.example-bg{background:#f6f8fb}.example-code{margin:2rem 0;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-top:none}.example-code pre{margin:0;border:0;border-radius:0 0 3px 3px}.example+.example-code{margin-top:-2rem}.example-column{margin:0 auto}.example-column>.card:last-of-type{margin-bottom:0}.example-column-1{max-width:26rem}.example-column-2{max-width:52rem}.example-modal-backdrop{background:#182433;opacity:.24;position:absolute;width:100%;left:0;top:0;height:100%;border-radius:2px 2px 0 0}.card-sponsor{background:var(--tblr-primary-lt) no-repeat center/100% 100%;border-color:var(--tblr-primary);min-height:316px}.dropdown-menu-demo{display:inline-block;width:100%;position:relative;top:0;margin-bottom:1rem!important}.demo-icon-preview{position:-webkit-sticky;position:sticky;top:0}.demo-icon-preview i,.demo-icon-preview svg{width:15rem;height:15rem;font-size:15rem;stroke-width:1.5;margin:0 auto;display:block}@media (max-width:575.98px){.demo-icon-preview i,.demo-icon-preview svg{width:10rem;height:10rem;font-size:10rem}}.demo-icon-preview-icon pre{margin:0;-webkit-user-select:all;-moz-user-select:all;user-select:all}.demo-dividers>p{opacity:.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.demo-icons-list{display:flex;flex-wrap:wrap;padding:0;margin:0 -2px -1px 0;list-style:none}.demo-icons-list>*{flex:1 0 4rem}.demo-icons-list-wrap{overflow:hidden}.demo-icons-list-item{display:flex;flex-direction:column;align-items:center;justify-content:center;aspect-ratio:1;text-align:center;padding:.5rem;border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:inherit;cursor:pointer}.demo-icons-list-item .icon{width:1.5rem;height:1.5rem;font-size:1.5rem}.demo-icons-list-item:hover{text-decoration:none}.settings-btn{position:fixed;right:-1px;top:10rem;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0}.settings-scheme{display:inline-block;border-radius:50%;height:3rem;width:3rem;position:relative;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0}.settings-scheme-light{background:linear-gradient(135deg,#fff 50%,#fcfdfe 50%)}.settings-scheme-mixed{background-image:linear-gradient(135deg,#182433 50%,#fff 50%)}.settings-scheme-transparent{background:#fcfdfe}.settings-scheme-dark{background:#182433}.settings-scheme-colored{background-image:linear-gradient(135deg,var(--tblr-primary) 50%,#fcfdfe 50%)}
|
||||||
@@ -0,0 +1,276 @@
|
|||||||
|
/*!
|
||||||
|
* Tabler v1.0.0-beta20 (https://tabler.io)
|
||||||
|
* @version 1.0.0-beta20
|
||||||
|
* @link https://tabler.io
|
||||||
|
* Copyright 2018-2023 The Tabler Authors
|
||||||
|
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||||||
|
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
/* prettier-ignore */
|
||||||
|
/* prettier-ignore */
|
||||||
|
pre.highlight,
|
||||||
|
.highlight pre {
|
||||||
|
max-height: 30rem;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
overflow: auto;
|
||||||
|
border-radius: var(--tblr-border-radius);
|
||||||
|
}
|
||||||
|
pre.highlight,
|
||||||
|
.highlight pre {
|
||||||
|
scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16) transparent;
|
||||||
|
}
|
||||||
|
pre.highlight::-webkit-scrollbar,
|
||||||
|
.highlight pre::-webkit-scrollbar {
|
||||||
|
width: 1rem;
|
||||||
|
height: 1rem;
|
||||||
|
-webkit-transition: background 0.3s;
|
||||||
|
transition: background 0.3s;
|
||||||
|
}
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
pre.highlight::-webkit-scrollbar,
|
||||||
|
.highlight pre::-webkit-scrollbar {
|
||||||
|
-webkit-transition: none;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pre.highlight::-webkit-scrollbar-thumb,
|
||||||
|
.highlight pre::-webkit-scrollbar-thumb {
|
||||||
|
border-radius: 1rem;
|
||||||
|
border: 5px solid transparent;
|
||||||
|
box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16);
|
||||||
|
}
|
||||||
|
pre.highlight::-webkit-scrollbar-track,
|
||||||
|
.highlight pre::-webkit-scrollbar-track {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
pre.highlight:hover::-webkit-scrollbar-thumb,
|
||||||
|
.highlight pre:hover::-webkit-scrollbar-thumb {
|
||||||
|
box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.32);
|
||||||
|
}
|
||||||
|
pre.highlight::-webkit-scrollbar-corner,
|
||||||
|
.highlight pre::-webkit-scrollbar-corner {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.highlight code > * {
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
.highlight .c, .highlight .c1 {
|
||||||
|
color: #a0aec0;
|
||||||
|
}
|
||||||
|
.highlight .nt, .highlight .nc, .highlight .nx {
|
||||||
|
color: #ff8383;
|
||||||
|
}
|
||||||
|
.highlight .na, .highlight .p {
|
||||||
|
color: #ffe484;
|
||||||
|
}
|
||||||
|
.highlight .s, .highlight .dl, .highlight .s2 {
|
||||||
|
color: #b5f4a5;
|
||||||
|
}
|
||||||
|
.highlight .k {
|
||||||
|
color: #93ddfd;
|
||||||
|
}
|
||||||
|
.highlight .s1, .highlight .mi {
|
||||||
|
color: #d9a9ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example {
|
||||||
|
padding: 2rem;
|
||||||
|
margin: 1rem 0 2rem;
|
||||||
|
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
|
||||||
|
border-radius: 3px 3px 0 0;
|
||||||
|
position: relative;
|
||||||
|
min-height: 12rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-centered {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.example-centered .example-content {
|
||||||
|
flex: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-content {
|
||||||
|
font-size: 0.875rem;
|
||||||
|
line-height: 1.4285714286;
|
||||||
|
color: var(--tblr-body-color);
|
||||||
|
flex: 1;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
.example-content .page-header {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-bg {
|
||||||
|
background: #f6f8fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-code {
|
||||||
|
margin: 2rem 0;
|
||||||
|
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
.example-code pre {
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 0 0 3px 3px;
|
||||||
|
}
|
||||||
|
.example + .example-code {
|
||||||
|
margin-top: -2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-column {
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.example-column > .card:last-of-type {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-column-1 {
|
||||||
|
max-width: 26rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-column-2 {
|
||||||
|
max-width: 52rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-modal-backdrop {
|
||||||
|
background: #182433;
|
||||||
|
opacity: 0.24;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
height: 100%;
|
||||||
|
border-radius: 2px 2px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-sponsor {
|
||||||
|
background: var(--tblr-primary-lt) no-repeat center/100% 100%;
|
||||||
|
border-color: var(--tblr-primary);
|
||||||
|
min-height: 316px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu-demo {
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
margin-bottom: 1rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-icon-preview {
|
||||||
|
position: -webkit-sticky;
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.demo-icon-preview svg,
|
||||||
|
.demo-icon-preview i {
|
||||||
|
width: 15rem;
|
||||||
|
height: 15rem;
|
||||||
|
font-size: 15rem;
|
||||||
|
stroke-width: 1.5;
|
||||||
|
margin: 0 auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
@media (max-width: 575.98px) {
|
||||||
|
.demo-icon-preview svg,
|
||||||
|
.demo-icon-preview i {
|
||||||
|
width: 10rem;
|
||||||
|
height: 10rem;
|
||||||
|
font-size: 10rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-icon-preview-icon pre {
|
||||||
|
margin: 0;
|
||||||
|
-webkit-user-select: all;
|
||||||
|
-moz-user-select: all;
|
||||||
|
user-select: all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-dividers > p {
|
||||||
|
opacity: 0.2;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-icons-list {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 0 -1px -2px;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
.demo-icons-list > * {
|
||||||
|
flex: 1 0 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-icons-list-wrap {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-icons-list-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
aspect-ratio: 1;
|
||||||
|
text-align: center;
|
||||||
|
padding: 0.5rem;
|
||||||
|
border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
|
||||||
|
border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
|
||||||
|
color: inherit;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.demo-icons-list-item .icon {
|
||||||
|
width: 1.5rem;
|
||||||
|
height: 1.5rem;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
.demo-icons-list-item:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-btn {
|
||||||
|
position: fixed;
|
||||||
|
left: -1px;
|
||||||
|
top: 10rem;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-scheme {
|
||||||
|
display: inline-block;
|
||||||
|
border-radius: 50%;
|
||||||
|
height: 3rem;
|
||||||
|
width: 3rem;
|
||||||
|
position: relative;
|
||||||
|
border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
|
||||||
|
box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
|
||||||
|
}
|
||||||
|
.settings-scheme-light {
|
||||||
|
background: linear-gradient(-135deg, #ffffff 50%, #fcfdfe 50%);
|
||||||
|
}
|
||||||
|
.settings-scheme-mixed {
|
||||||
|
background-image: linear-gradient(-135deg, #182433 50%, #fff 50%);
|
||||||
|
}
|
||||||
|
.settings-scheme-transparent {
|
||||||
|
background: #fcfdfe;
|
||||||
|
}
|
||||||
|
.settings-scheme-dark {
|
||||||
|
background: #182433;
|
||||||
|
}
|
||||||
|
.settings-scheme-colored {
|
||||||
|
background-image: linear-gradient(-135deg, var(--tblr-primary) 50%, #fcfdfe 50%);
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
/*!
|
||||||
|
* Tabler v1.0.0-beta20 (https://tabler.io)
|
||||||
|
* @version 1.0.0-beta20
|
||||||
|
* @link https://tabler.io
|
||||||
|
* Copyright 2018-2023 The Tabler Authors
|
||||||
|
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||||||
|
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
.highlight pre,pre.highlight{max-height:30rem;margin:1.5rem 0;overflow:auto;border-radius:var(--tblr-border-radius)}.highlight pre,pre.highlight{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16) transparent}.highlight pre::-webkit-scrollbar,pre.highlight::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion:reduce){.highlight pre::-webkit-scrollbar,pre.highlight::-webkit-scrollbar{-webkit-transition:none;transition:none}}.highlight pre::-webkit-scrollbar-thumb,pre.highlight::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.highlight pre::-webkit-scrollbar-track,pre.highlight::-webkit-scrollbar-track{background:0 0}.highlight pre:hover::-webkit-scrollbar-thumb,pre.highlight:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}.highlight pre::-webkit-scrollbar-corner,pre.highlight::-webkit-scrollbar-corner{background:0 0}.highlight{margin:0}.highlight code>*{margin:0!important;padding:0!important}.highlight .c,.highlight .c1{color:#a0aec0}.highlight .nc,.highlight .nt,.highlight .nx{color:#ff8383}.highlight .na,.highlight .p{color:#ffe484}.highlight .dl,.highlight .s,.highlight .s2{color:#b5f4a5}.highlight .k{color:#93ddfd}.highlight .mi,.highlight .s1{color:#d9a9ff}.example{padding:2rem;margin:1rem 0 2rem;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px 3px 0 0;position:relative;min-height:12rem;display:flex;align-items:center;overflow-x:auto}.example-centered{justify-content:center}.example-centered .example-content{flex:0 auto}.example-content{font-size:.875rem;line-height:1.4285714286;color:var(--tblr-body-color);flex:1;max-width:100%}.example-content .page-header{margin-bottom:0}.example-bg{background:#f6f8fb}.example-code{margin:2rem 0;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-top:none}.example-code pre{margin:0;border:0;border-radius:0 0 3px 3px}.example+.example-code{margin-top:-2rem}.example-column{margin:0 auto}.example-column>.card:last-of-type{margin-bottom:0}.example-column-1{max-width:26rem}.example-column-2{max-width:52rem}.example-modal-backdrop{background:#182433;opacity:.24;position:absolute;width:100%;right:0;top:0;height:100%;border-radius:2px 2px 0 0}.card-sponsor{background:var(--tblr-primary-lt) no-repeat center/100% 100%;border-color:var(--tblr-primary);min-height:316px}.dropdown-menu-demo{display:inline-block;width:100%;position:relative;top:0;margin-bottom:1rem!important}.demo-icon-preview{position:-webkit-sticky;position:sticky;top:0}.demo-icon-preview i,.demo-icon-preview svg{width:15rem;height:15rem;font-size:15rem;stroke-width:1.5;margin:0 auto;display:block}@media (max-width:575.98px){.demo-icon-preview i,.demo-icon-preview svg{width:10rem;height:10rem;font-size:10rem}}.demo-icon-preview-icon pre{margin:0;-webkit-user-select:all;-moz-user-select:all;user-select:all}.demo-dividers>p{opacity:.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.demo-icons-list{display:flex;flex-wrap:wrap;padding:0;margin:0 0 -1px -2px;list-style:none}.demo-icons-list>*{flex:1 0 4rem}.demo-icons-list-wrap{overflow:hidden}.demo-icons-list-item{display:flex;flex-direction:column;align-items:center;justify-content:center;aspect-ratio:1;text-align:center;padding:.5rem;border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:inherit;cursor:pointer}.demo-icons-list-item .icon{width:1.5rem;height:1.5rem;font-size:1.5rem}.demo-icons-list-item:hover{text-decoration:none}.settings-btn{position:fixed;left:-1px;top:10rem;border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0}.settings-scheme{display:inline-block;border-radius:50%;height:3rem;width:3rem;position:relative;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0}.settings-scheme-light{background:linear-gradient(-135deg,#fff 50%,#fcfdfe 50%)}.settings-scheme-mixed{background-image:linear-gradient(-135deg,#182433 50%,#fff 50%)}.settings-scheme-transparent{background:#fcfdfe}.settings-scheme-dark{background:#182433}.settings-scheme-colored{background-image:linear-gradient(-135deg,var(--tblr-primary) 50%,#fcfdfe 50%)}
|
||||||
@@ -0,0 +1,528 @@
|
|||||||
|
/*!
|
||||||
|
* Tabler v1.0.0-beta20 (https://tabler.io)
|
||||||
|
* @version 1.0.0-beta20
|
||||||
|
* @link https://tabler.io
|
||||||
|
* Copyright 2018-2023 The Tabler Authors
|
||||||
|
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||||||
|
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
/* prettier-ignore */
|
||||||
|
/* prettier-ignore */
|
||||||
|
.payment {
|
||||||
|
height: 2.5rem;
|
||||||
|
aspect-ratio: 1.66666;
|
||||||
|
display: inline-block;
|
||||||
|
background: no-repeat center/100% 100%;
|
||||||
|
vertical-align: bottom;
|
||||||
|
font-style: normal;
|
||||||
|
box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-2checkout {
|
||||||
|
background-image: url("../img/payments/2checkout.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-2checkout-dark {
|
||||||
|
background-image: url("../img/payments/2checkout-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-alipay {
|
||||||
|
background-image: url("../img/payments/alipay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-alipay-dark {
|
||||||
|
background-image: url("../img/payments/alipay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-amazon {
|
||||||
|
background-image: url("../img/payments/amazon.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-amazon-dark {
|
||||||
|
background-image: url("../img/payments/amazon-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-americanexpress {
|
||||||
|
background-image: url("../img/payments/americanexpress.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-americanexpress-dark {
|
||||||
|
background-image: url("../img/payments/americanexpress-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-applepay {
|
||||||
|
background-image: url("../img/payments/applepay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-applepay-dark {
|
||||||
|
background-image: url("../img/payments/applepay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bancontact {
|
||||||
|
background-image: url("../img/payments/bancontact.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bancontact-dark {
|
||||||
|
background-image: url("../img/payments/bancontact-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bitcoin {
|
||||||
|
background-image: url("../img/payments/bitcoin.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bitcoin-dark {
|
||||||
|
background-image: url("../img/payments/bitcoin-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bitpay {
|
||||||
|
background-image: url("../img/payments/bitpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bitpay-dark {
|
||||||
|
background-image: url("../img/payments/bitpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-blik {
|
||||||
|
background-image: url("../img/payments/blik.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-blik-dark {
|
||||||
|
background-image: url("../img/payments/blik-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-cirrus {
|
||||||
|
background-image: url("../img/payments/cirrus.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-cirrus-dark {
|
||||||
|
background-image: url("../img/payments/cirrus-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-clickandbuy {
|
||||||
|
background-image: url("../img/payments/clickandbuy.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-clickandbuy-dark {
|
||||||
|
background-image: url("../img/payments/clickandbuy-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-coinkite {
|
||||||
|
background-image: url("../img/payments/coinkite.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-coinkite-dark {
|
||||||
|
background-image: url("../img/payments/coinkite-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dinersclub {
|
||||||
|
background-image: url("../img/payments/dinersclub.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dinersclub-dark {
|
||||||
|
background-image: url("../img/payments/dinersclub-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-directdebit {
|
||||||
|
background-image: url("../img/payments/directdebit.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-directdebit-dark {
|
||||||
|
background-image: url("../img/payments/directdebit-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-discover {
|
||||||
|
background-image: url("../img/payments/discover.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-discover-dark {
|
||||||
|
background-image: url("../img/payments/discover-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dotpay {
|
||||||
|
background-image: url("../img/payments/dotpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dotpay-dark {
|
||||||
|
background-image: url("../img/payments/dotpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dwolla {
|
||||||
|
background-image: url("../img/payments/dwolla.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dwolla-dark {
|
||||||
|
background-image: url("../img/payments/dwolla-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ebay {
|
||||||
|
background-image: url("../img/payments/ebay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ebay-dark {
|
||||||
|
background-image: url("../img/payments/ebay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-epayco {
|
||||||
|
background-image: url("../img/payments/epayco.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-epayco-dark {
|
||||||
|
background-image: url("../img/payments/epayco-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-eway {
|
||||||
|
background-image: url("../img/payments/eway.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-eway-dark {
|
||||||
|
background-image: url("../img/payments/eway-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-giropay {
|
||||||
|
background-image: url("../img/payments/giropay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-giropay-dark {
|
||||||
|
background-image: url("../img/payments/giropay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-googlewallet {
|
||||||
|
background-image: url("../img/payments/googlewallet.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-googlewallet-dark {
|
||||||
|
background-image: url("../img/payments/googlewallet-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ingenico {
|
||||||
|
background-image: url("../img/payments/ingenico.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ingenico-dark {
|
||||||
|
background-image: url("../img/payments/ingenico-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-jcb {
|
||||||
|
background-image: url("../img/payments/jcb.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-jcb-dark {
|
||||||
|
background-image: url("../img/payments/jcb-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-klarna {
|
||||||
|
background-image: url("../img/payments/klarna.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-klarna-dark {
|
||||||
|
background-image: url("../img/payments/klarna-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-laser {
|
||||||
|
background-image: url("../img/payments/laser.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-laser-dark {
|
||||||
|
background-image: url("../img/payments/laser-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-maestro {
|
||||||
|
background-image: url("../img/payments/maestro.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-maestro-dark {
|
||||||
|
background-image: url("../img/payments/maestro-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-mastercard {
|
||||||
|
background-image: url("../img/payments/mastercard.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-mastercard-dark {
|
||||||
|
background-image: url("../img/payments/mastercard-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-mir {
|
||||||
|
background-image: url("../img/payments/mir.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-mir-dark {
|
||||||
|
background-image: url("../img/payments/mir-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-monero {
|
||||||
|
background-image: url("../img/payments/monero.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-monero-dark {
|
||||||
|
background-image: url("../img/payments/monero-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-neteller {
|
||||||
|
background-image: url("../img/payments/neteller.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-neteller-dark {
|
||||||
|
background-image: url("../img/payments/neteller-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ogone {
|
||||||
|
background-image: url("../img/payments/ogone.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ogone-dark {
|
||||||
|
background-image: url("../img/payments/ogone-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-okpay {
|
||||||
|
background-image: url("../img/payments/okpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-okpay-dark {
|
||||||
|
background-image: url("../img/payments/okpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paybox {
|
||||||
|
background-image: url("../img/payments/paybox.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paybox-dark {
|
||||||
|
background-image: url("../img/payments/paybox-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paymill {
|
||||||
|
background-image: url("../img/payments/paymill.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paymill-dark {
|
||||||
|
background-image: url("../img/payments/paymill-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payone {
|
||||||
|
background-image: url("../img/payments/payone.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payone-dark {
|
||||||
|
background-image: url("../img/payments/payone-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payoneer {
|
||||||
|
background-image: url("../img/payments/payoneer.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payoneer-dark {
|
||||||
|
background-image: url("../img/payments/payoneer-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paypal {
|
||||||
|
background-image: url("../img/payments/paypal.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paypal-dark {
|
||||||
|
background-image: url("../img/payments/paypal-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paysafecard {
|
||||||
|
background-image: url("../img/payments/paysafecard.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paysafecard-dark {
|
||||||
|
background-image: url("../img/payments/paysafecard-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payu {
|
||||||
|
background-image: url("../img/payments/payu.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payu-dark {
|
||||||
|
background-image: url("../img/payments/payu-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payza {
|
||||||
|
background-image: url("../img/payments/payza.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payza-dark {
|
||||||
|
background-image: url("../img/payments/payza-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-przelewy24 {
|
||||||
|
background-image: url("../img/payments/przelewy24.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-przelewy24-dark {
|
||||||
|
background-image: url("../img/payments/przelewy24-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ripple {
|
||||||
|
background-image: url("../img/payments/ripple.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ripple-dark {
|
||||||
|
background-image: url("../img/payments/ripple-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-sage {
|
||||||
|
background-image: url("../img/payments/sage.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-sage-dark {
|
||||||
|
background-image: url("../img/payments/sage-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-sepa {
|
||||||
|
background-image: url("../img/payments/sepa.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-sepa-dark {
|
||||||
|
background-image: url("../img/payments/sepa-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-shopify {
|
||||||
|
background-image: url("../img/payments/shopify.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-shopify-dark {
|
||||||
|
background-image: url("../img/payments/shopify-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-skrill {
|
||||||
|
background-image: url("../img/payments/skrill.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-skrill-dark {
|
||||||
|
background-image: url("../img/payments/skrill-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-solo {
|
||||||
|
background-image: url("../img/payments/solo.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-solo-dark {
|
||||||
|
background-image: url("../img/payments/solo-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-square {
|
||||||
|
background-image: url("../img/payments/square.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-square-dark {
|
||||||
|
background-image: url("../img/payments/square-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-stripe {
|
||||||
|
background-image: url("../img/payments/stripe.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-stripe-dark {
|
||||||
|
background-image: url("../img/payments/stripe-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-switch {
|
||||||
|
background-image: url("../img/payments/switch.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-switch-dark {
|
||||||
|
background-image: url("../img/payments/switch-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-tpay {
|
||||||
|
background-image: url("../img/payments/tpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-tpay-dark {
|
||||||
|
background-image: url("../img/payments/tpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ukash {
|
||||||
|
background-image: url("../img/payments/ukash.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ukash-dark {
|
||||||
|
background-image: url("../img/payments/ukash-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-unionpay {
|
||||||
|
background-image: url("../img/payments/unionpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-unionpay-dark {
|
||||||
|
background-image: url("../img/payments/unionpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-verifone {
|
||||||
|
background-image: url("../img/payments/verifone.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-verifone-dark {
|
||||||
|
background-image: url("../img/payments/verifone-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-verisign {
|
||||||
|
background-image: url("../img/payments/verisign.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-verisign-dark {
|
||||||
|
background-image: url("../img/payments/verisign-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-visa {
|
||||||
|
background-image: url("../img/payments/visa.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-visa-dark {
|
||||||
|
background-image: url("../img/payments/visa-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-webmoney {
|
||||||
|
background-image: url("../img/payments/webmoney.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-webmoney-dark {
|
||||||
|
background-image: url("../img/payments/webmoney-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-westernunion {
|
||||||
|
background-image: url("../img/payments/westernunion.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-westernunion-dark {
|
||||||
|
background-image: url("../img/payments/westernunion-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-worldpay {
|
||||||
|
background-image: url("../img/payments/worldpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-worldpay-dark {
|
||||||
|
background-image: url("../img/payments/worldpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-xxs {
|
||||||
|
height: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-xs {
|
||||||
|
height: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-sm {
|
||||||
|
height: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-md {
|
||||||
|
height: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-lg {
|
||||||
|
height: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-xl {
|
||||||
|
height: 5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-2xl {
|
||||||
|
height: 7rem;
|
||||||
|
}
|
||||||
@@ -0,0 +1,528 @@
|
|||||||
|
/*!
|
||||||
|
* Tabler v1.0.0-beta20 (https://tabler.io)
|
||||||
|
* @version 1.0.0-beta20
|
||||||
|
* @link https://tabler.io
|
||||||
|
* Copyright 2018-2023 The Tabler Authors
|
||||||
|
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||||||
|
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
/* prettier-ignore */
|
||||||
|
/* prettier-ignore */
|
||||||
|
.payment {
|
||||||
|
height: 2.5rem;
|
||||||
|
aspect-ratio: 1.66666;
|
||||||
|
display: inline-block;
|
||||||
|
background: no-repeat center/100% 100%;
|
||||||
|
vertical-align: bottom;
|
||||||
|
font-style: normal;
|
||||||
|
box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-2checkout {
|
||||||
|
background-image: url("../img/payments/2checkout.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-2checkout-dark {
|
||||||
|
background-image: url("../img/payments/2checkout-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-alipay {
|
||||||
|
background-image: url("../img/payments/alipay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-alipay-dark {
|
||||||
|
background-image: url("../img/payments/alipay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-amazon {
|
||||||
|
background-image: url("../img/payments/amazon.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-amazon-dark {
|
||||||
|
background-image: url("../img/payments/amazon-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-americanexpress {
|
||||||
|
background-image: url("../img/payments/americanexpress.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-americanexpress-dark {
|
||||||
|
background-image: url("../img/payments/americanexpress-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-applepay {
|
||||||
|
background-image: url("../img/payments/applepay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-applepay-dark {
|
||||||
|
background-image: url("../img/payments/applepay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bancontact {
|
||||||
|
background-image: url("../img/payments/bancontact.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bancontact-dark {
|
||||||
|
background-image: url("../img/payments/bancontact-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bitcoin {
|
||||||
|
background-image: url("../img/payments/bitcoin.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bitcoin-dark {
|
||||||
|
background-image: url("../img/payments/bitcoin-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bitpay {
|
||||||
|
background-image: url("../img/payments/bitpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-bitpay-dark {
|
||||||
|
background-image: url("../img/payments/bitpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-blik {
|
||||||
|
background-image: url("../img/payments/blik.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-blik-dark {
|
||||||
|
background-image: url("../img/payments/blik-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-cirrus {
|
||||||
|
background-image: url("../img/payments/cirrus.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-cirrus-dark {
|
||||||
|
background-image: url("../img/payments/cirrus-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-clickandbuy {
|
||||||
|
background-image: url("../img/payments/clickandbuy.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-clickandbuy-dark {
|
||||||
|
background-image: url("../img/payments/clickandbuy-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-coinkite {
|
||||||
|
background-image: url("../img/payments/coinkite.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-coinkite-dark {
|
||||||
|
background-image: url("../img/payments/coinkite-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dinersclub {
|
||||||
|
background-image: url("../img/payments/dinersclub.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dinersclub-dark {
|
||||||
|
background-image: url("../img/payments/dinersclub-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-directdebit {
|
||||||
|
background-image: url("../img/payments/directdebit.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-directdebit-dark {
|
||||||
|
background-image: url("../img/payments/directdebit-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-discover {
|
||||||
|
background-image: url("../img/payments/discover.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-discover-dark {
|
||||||
|
background-image: url("../img/payments/discover-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dotpay {
|
||||||
|
background-image: url("../img/payments/dotpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dotpay-dark {
|
||||||
|
background-image: url("../img/payments/dotpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dwolla {
|
||||||
|
background-image: url("../img/payments/dwolla.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-dwolla-dark {
|
||||||
|
background-image: url("../img/payments/dwolla-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ebay {
|
||||||
|
background-image: url("../img/payments/ebay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ebay-dark {
|
||||||
|
background-image: url("../img/payments/ebay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-epayco {
|
||||||
|
background-image: url("../img/payments/epayco.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-epayco-dark {
|
||||||
|
background-image: url("../img/payments/epayco-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-eway {
|
||||||
|
background-image: url("../img/payments/eway.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-eway-dark {
|
||||||
|
background-image: url("../img/payments/eway-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-giropay {
|
||||||
|
background-image: url("../img/payments/giropay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-giropay-dark {
|
||||||
|
background-image: url("../img/payments/giropay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-googlewallet {
|
||||||
|
background-image: url("../img/payments/googlewallet.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-googlewallet-dark {
|
||||||
|
background-image: url("../img/payments/googlewallet-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ingenico {
|
||||||
|
background-image: url("../img/payments/ingenico.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ingenico-dark {
|
||||||
|
background-image: url("../img/payments/ingenico-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-jcb {
|
||||||
|
background-image: url("../img/payments/jcb.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-jcb-dark {
|
||||||
|
background-image: url("../img/payments/jcb-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-klarna {
|
||||||
|
background-image: url("../img/payments/klarna.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-klarna-dark {
|
||||||
|
background-image: url("../img/payments/klarna-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-laser {
|
||||||
|
background-image: url("../img/payments/laser.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-laser-dark {
|
||||||
|
background-image: url("../img/payments/laser-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-maestro {
|
||||||
|
background-image: url("../img/payments/maestro.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-maestro-dark {
|
||||||
|
background-image: url("../img/payments/maestro-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-mastercard {
|
||||||
|
background-image: url("../img/payments/mastercard.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-mastercard-dark {
|
||||||
|
background-image: url("../img/payments/mastercard-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-mir {
|
||||||
|
background-image: url("../img/payments/mir.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-mir-dark {
|
||||||
|
background-image: url("../img/payments/mir-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-monero {
|
||||||
|
background-image: url("../img/payments/monero.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-monero-dark {
|
||||||
|
background-image: url("../img/payments/monero-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-neteller {
|
||||||
|
background-image: url("../img/payments/neteller.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-neteller-dark {
|
||||||
|
background-image: url("../img/payments/neteller-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ogone {
|
||||||
|
background-image: url("../img/payments/ogone.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ogone-dark {
|
||||||
|
background-image: url("../img/payments/ogone-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-okpay {
|
||||||
|
background-image: url("../img/payments/okpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-okpay-dark {
|
||||||
|
background-image: url("../img/payments/okpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paybox {
|
||||||
|
background-image: url("../img/payments/paybox.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paybox-dark {
|
||||||
|
background-image: url("../img/payments/paybox-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paymill {
|
||||||
|
background-image: url("../img/payments/paymill.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paymill-dark {
|
||||||
|
background-image: url("../img/payments/paymill-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payone {
|
||||||
|
background-image: url("../img/payments/payone.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payone-dark {
|
||||||
|
background-image: url("../img/payments/payone-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payoneer {
|
||||||
|
background-image: url("../img/payments/payoneer.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payoneer-dark {
|
||||||
|
background-image: url("../img/payments/payoneer-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paypal {
|
||||||
|
background-image: url("../img/payments/paypal.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paypal-dark {
|
||||||
|
background-image: url("../img/payments/paypal-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paysafecard {
|
||||||
|
background-image: url("../img/payments/paysafecard.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-paysafecard-dark {
|
||||||
|
background-image: url("../img/payments/paysafecard-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payu {
|
||||||
|
background-image: url("../img/payments/payu.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payu-dark {
|
||||||
|
background-image: url("../img/payments/payu-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payza {
|
||||||
|
background-image: url("../img/payments/payza.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-payza-dark {
|
||||||
|
background-image: url("../img/payments/payza-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-przelewy24 {
|
||||||
|
background-image: url("../img/payments/przelewy24.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-przelewy24-dark {
|
||||||
|
background-image: url("../img/payments/przelewy24-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ripple {
|
||||||
|
background-image: url("../img/payments/ripple.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ripple-dark {
|
||||||
|
background-image: url("../img/payments/ripple-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-sage {
|
||||||
|
background-image: url("../img/payments/sage.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-sage-dark {
|
||||||
|
background-image: url("../img/payments/sage-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-sepa {
|
||||||
|
background-image: url("../img/payments/sepa.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-sepa-dark {
|
||||||
|
background-image: url("../img/payments/sepa-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-shopify {
|
||||||
|
background-image: url("../img/payments/shopify.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-shopify-dark {
|
||||||
|
background-image: url("../img/payments/shopify-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-skrill {
|
||||||
|
background-image: url("../img/payments/skrill.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-skrill-dark {
|
||||||
|
background-image: url("../img/payments/skrill-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-solo {
|
||||||
|
background-image: url("../img/payments/solo.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-solo-dark {
|
||||||
|
background-image: url("../img/payments/solo-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-square {
|
||||||
|
background-image: url("../img/payments/square.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-square-dark {
|
||||||
|
background-image: url("../img/payments/square-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-stripe {
|
||||||
|
background-image: url("../img/payments/stripe.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-stripe-dark {
|
||||||
|
background-image: url("../img/payments/stripe-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-switch {
|
||||||
|
background-image: url("../img/payments/switch.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-switch-dark {
|
||||||
|
background-image: url("../img/payments/switch-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-tpay {
|
||||||
|
background-image: url("../img/payments/tpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-tpay-dark {
|
||||||
|
background-image: url("../img/payments/tpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ukash {
|
||||||
|
background-image: url("../img/payments/ukash.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-ukash-dark {
|
||||||
|
background-image: url("../img/payments/ukash-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-unionpay {
|
||||||
|
background-image: url("../img/payments/unionpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-unionpay-dark {
|
||||||
|
background-image: url("../img/payments/unionpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-verifone {
|
||||||
|
background-image: url("../img/payments/verifone.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-verifone-dark {
|
||||||
|
background-image: url("../img/payments/verifone-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-verisign {
|
||||||
|
background-image: url("../img/payments/verisign.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-verisign-dark {
|
||||||
|
background-image: url("../img/payments/verisign-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-visa {
|
||||||
|
background-image: url("../img/payments/visa.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-visa-dark {
|
||||||
|
background-image: url("../img/payments/visa-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-webmoney {
|
||||||
|
background-image: url("../img/payments/webmoney.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-webmoney-dark {
|
||||||
|
background-image: url("../img/payments/webmoney-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-westernunion {
|
||||||
|
background-image: url("../img/payments/westernunion.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-westernunion-dark {
|
||||||
|
background-image: url("../img/payments/westernunion-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-worldpay {
|
||||||
|
background-image: url("../img/payments/worldpay.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-provider-worldpay-dark {
|
||||||
|
background-image: url("../img/payments/worldpay-dark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-xxs {
|
||||||
|
height: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-xs {
|
||||||
|
height: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-sm {
|
||||||
|
height: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-md {
|
||||||
|
height: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-lg {
|
||||||
|
height: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-xl {
|
||||||
|
height: 5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment-2xl {
|
||||||
|
height: 7rem;
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
/*!
|
||||||
|
* Tabler v1.0.0-beta20 (https://tabler.io)
|
||||||
|
* @version 1.0.0-beta20
|
||||||
|
* @link https://tabler.io
|
||||||
|
* Copyright 2018-2023 The Tabler Authors
|
||||||
|
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||||||
|
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
/* prettier-ignore */
|
||||||
|
/* prettier-ignore */
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
/*!
|
||||||
|
* Tabler v1.0.0-beta20 (https://tabler.io)
|
||||||
|
* @version 1.0.0-beta20
|
||||||
|
* @link https://tabler.io
|
||||||
|
* Copyright 2018-2023 The Tabler Authors
|
||||||
|
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||||||
|
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
/*!
|
||||||
|
* Tabler v1.0.0-beta20 (https://tabler.io)
|
||||||
|
* @version 1.0.0-beta20
|
||||||
|
* @link https://tabler.io
|
||||||
|
* Copyright 2018-2023 The Tabler Authors
|
||||||
|
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||||||
|
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
/* prettier-ignore */
|
||||||
|
/* prettier-ignore */
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
/*!
|
||||||
|
* Tabler v1.0.0-beta20 (https://tabler.io)
|
||||||
|
* @version 1.0.0-beta20
|
||||||
|
* @link https://tabler.io
|
||||||
|
* Copyright 2018-2023 The Tabler Authors
|
||||||
|
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||||||
|
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
After Width: | Height: | Size: 6.2 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#5EAA22" fill-rule="evenodd" d="M0 0v5h20V0H0z" clip-rule="evenodd"/><path fill="#272727" fill-rule="evenodd" d="M0 10v5h20v-5H0z" clip-rule="evenodd"/><path fill="#E31D1C" d="M0 0h6v15H0z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 507 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#67BD38" fill-rule="evenodd" d="M14 0h6v15h-6V0z" clip-rule="evenodd"/><path fill="#D51700" fill-rule="evenodd" d="M6 0h8v15H6V0z" clip-rule="evenodd"/><path fill="#272727" fill-rule="evenodd" d="M0 0h6v15H0V0z" clip-rule="evenodd"/><path fill="#F7FCFF" fill-rule="evenodd" d="m7.705 4.986.216.135c-.36.607-.602 1.163-.728 1.668a.59.59 0 0 1 .12.15c.098.17.18.334.247.494l-.287.122a3.813 3.813 0 0 0-.16-.333c-.029.246-.027.48.006.698a.586.586 0 0 1 .148.036c.184.066.352.14.506.219l-.142.278a3.968 3.968 0 0 0-.431-.19l.003.01c.134.404.338.775.614 1.115a.595.595 0 0 1 .13-.013c.196 0 .38.011.55.033l-.037.31a3.82 3.82 0 0 0-.37-.028c.247.248.538.476.873.686l-.132.222a5.033 5.033 0 0 1-1.058-.869 4.134 4.134 0 0 0-.143.06l-.022.01c.254.266.554.51.9.734l-.134.22a5.095 5.095 0 0 1-1.029-.86.678.678 0 0 1-.384-.005l.083-.3c.02.006.04.01.06.013a3.883 3.883 0 0 1-.597-1.151 2.486 2.486 0 0 1-.061-.224.666.666 0 0 1-.282-.125l.182-.254a.424.424 0 0 0 .047.03 3.56 3.56 0 0 1 .134-1.24.667.667 0 0 1-.151-.295l.265-.069c.143-.405.346-.834.607-1.286l.218.133a7.228 7.228 0 0 0-.634 1.382c.039.035.086.073.144.116.138-.504.382-1.048.729-1.632zm-.806 1.963a4.984 4.984 0 0 0-.16-.12 3.138 3.138 0 0 0-.086 1.102c.047 0 .1-.002.16-.006l.05-.003A3.035 3.035 0 0 1 6.9 6.95zm-.072 1.287.098-.005c.012.042.024.085.038.126.134.405.334.78.6 1.122l-.052.023c-.044.02-.084.036-.12.05a3.637 3.637 0 0 1-.68-1.31l.116-.006zm5.26-3.25-.216.135c.36.607.602 1.163.727 1.668a.59.59 0 0 0-.12.15 4.33 4.33 0 0 0-.246.494l.287.122a3.79 3.79 0 0 1 .16-.333c.029.246.027.48-.006.698a.586.586 0 0 0-.148.036 4.18 4.18 0 0 0-.506.219l.141.278c.131-.067.275-.13.432-.19l-.003.01a3.494 3.494 0 0 1-.614 1.115.595.595 0 0 0-.13-.013c-.196 0-.38.011-.55.033l.037.31a3.82 3.82 0 0 1 .37-.028 4.92 4.92 0 0 1-.873.686l.132.222c.414-.26.767-.55 1.058-.869l.143.06.022.01a4.97 4.97 0 0 1-.9.734l.134.22c.4-.258.744-.544 1.028-.86.136.035.25.035.385-.005l-.084-.3a.42.42 0 0 1-.06.013c.265-.352.464-.736.598-1.151a2.51 2.51 0 0 0 .06-.224.667.667 0 0 0 .282-.125l-.18-.254a.423.423 0 0 1-.049.03 3.56 3.56 0 0 0-.133-1.24.668.668 0 0 0 .15-.295l-.265-.069a7.762 7.762 0 0 0-.606-1.286l-.218.133c.285.493.496.954.634 1.382a1.893 1.893 0 0 1-.144.116c-.139-.504-.382-1.048-.73-1.632zm.806 1.963a4.821 4.821 0 0 1 .16-.12c.096.398.124.765.085 1.102-.046 0-.099-.002-.16-.006l-.05-.003c.042-.304.03-.628-.035-.973zm.072 1.287a6.322 6.322 0 0 0-.098-.005 3.745 3.745 0 0 1-.637 1.249l.05.022c.045.02.085.036.122.05a3.638 3.638 0 0 0 .679-1.31 3.261 3.261 0 0 1-.116-.006z" clip-rule="evenodd"/><path fill="#F7FCFF" fill-rule="evenodd" d="m8.808 10.165-.698.69s.602.369 1.736.369 1.794-.369 1.794-.369l-.53-.69s-.723.28-1.235.28c-.511 0-1.067-.28-1.067-.28z" clip-rule="evenodd"/><path stroke="#C00001" stroke-width=".5" d="M8.823 10.606s.59.139 1.043.139c.453 0 1.044-.14 1.044-.14"/><path fill="#F7FCFF" fill-rule="evenodd" d="M10.457 5.911c0 .274-.25.495-.557.495-.308 0-.557-.221-.557-.495 0-.273.25-.494.557-.494.308 0 .557.221.557.494zm-.557.495h-.6l-.165.127h-.033v-.99h-.304v.99h-.266v.169h.266v1.786c-.036.285-.12.446-.236.502l-.62.298h3.735l-.268-.268c-.236-.236-.349-.417-.349-.522V6.702h.107v-.17h-.107v-.99h-.304v.99h-.098l-.196-.126H9.9zm-.798.296h1.654v1.796c0 .145.069.302.202.478H8.977a1.44 1.44 0 0 0 .125-.469V6.702zm.849.798h-.66v1.302h1.319L9.95 7.5zm.68-3.652.001.001-.001-.001zm.963.338v.006-.006zm.187.023.001-.003v.003zm-.757.384h.004-.004z" clip-rule="evenodd"/><path fill="#F7FCFF" fill-rule="evenodd" d="m8.02 6.668-.124.09.128.188c-.11.04-.286.14-.286.374 0 .34-.12.62-.12.62l.357.23s.038-.398.135-.624a.365.365 0 0 1 .189-.198l.555.816.125-.09-.958-1.406zm3.8 0 .124.09-.128.188c.11.04.286.14.286.374 0 .34.12.62.12.62l-.357.23s-.038-.398-.135-.624a.365.365 0 0 0-.189-.198l-.555.816-.125-.09.958-1.406z" clip-rule="evenodd"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#1B1B1B" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#F9D313" fill-rule="evenodd" d="m10 8.75-1.39 2.375.034-2.623-2.54 1.657 1.453-2.35-3.188.61 2.584-1.613L3.75 6.25l3.203-.556L4.37 4.08l3.188.61-1.454-2.35 2.541 1.657-.035-2.623L10 3.75l1.39-2.375-.034 2.623 2.54-1.657-1.453 2.35 3.188-.61-2.584 1.613 3.203.556-3.203.556L15.63 8.42l-3.188-.61 1.454 2.35-2.541-1.657.035 2.623L10 8.75z" clip-rule="evenodd"/><path fill="#F1F9FF" d="M3.75 8.75h12.5V15H3.75z"/><path fill="#4A80E8" d="M1.25 6.25h17.5v2.5H1.25z"/><path fill="#E31D1C" fill-rule="evenodd" d="M0 3.75 10 15 20 3.75V15H0V3.75z" clip-rule="evenodd"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 877 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#fff" stroke="#E6E617" stroke-width=".5" d="M16.219 13.477c-.628 0-1.052-.148-1.35-.394-.298-.249-.5-.624-.632-1.14-.132-.52-.186-1.158-.207-1.907a55.84 55.84 0 0 1-.009-1.711l.002-.555h4.453c.079 1.475.1 2.891-.184 3.953-.149.555-.375.99-.7 1.286-.32.291-.758.468-1.373.468z"/><path fill="#82E5FF" fill-rule="evenodd" d="M14.246 12.696c.373.834 1.027 1.25 1.96 1.25.928 0 1.583-.41 1.967-1.233l-3.927-.017z" clip-rule="evenodd"/><path fill="#E18600" fill-rule="evenodd" d="M14.653 9.75c0 .83.675 1.5 1.506 1.5s1.507-.67 1.507-1.5-.676-1.5-1.507-1.5c-.83 0-1.506.67-1.506 1.5zm2.388 0a.878.878 0 0 1-.882.875.878.878 0 0 1-.88-.875c0-.483.394-.875.88-.875.487 0 .882.392.882.875z" clip-rule="evenodd"/><path fill="#E18600" fill-rule="evenodd" d="M15.905 8.041s-.548.249-.429.716c.119.467.253.534.253.534s.194-1.012.976-1.012l-.8-.238zm-.997 2.521s.457.392.83.086c.373-.305.377-.455.377-.455s-1 .252-1.33-.456l.123.825zm2.742-.052s.017-.602-.455-.7c-.472-.098-.591-.007-.591-.007s.824.618.482 1.32l.564-.614z" clip-rule="evenodd"/><path fill="#2E42A5" d="M0 0h11v9H0z"/><mask id="c" width="11" height="9" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h11v9H0z"/></mask><g mask="url(#c)"><path fill="#F7FCFF" d="M-1.253 8.125 1.223 9.21l10.083-8.03 1.306-1.614-2.647-.363-4.113 3.46-3.31 2.332-3.795 3.129z"/><path fill="#F50100" d="m-.914 8.886 1.261.63L12.143-.583h-1.77L-.915 8.886z"/><path fill="#F7FCFF" d="M12.503 8.125 10.306 9.52-.056 1.18-1.362-.434l2.647-.363 4.113 3.46 3.31 2.332 3.795 3.129z"/><path fill="#F50100" d="m12.418 8.67-1.261.63-5.023-4.323-1.489-.483-6.133-4.921H.283l6.13 4.804 1.628.58 4.377 3.714z"/><mask id="d" width="13" height="11" x="-1" y="-1" fill="#000" maskUnits="userSpaceOnUse"><path fill="#fff" d="M-1-1h13v11H-1z"/><path fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/></mask><path fill="#F50100" fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M5 0v-.938h-.938V0H5zm1 0h.938v-.938H6V0zM5 4v.938h.938V4H5zM0 4v-.938h-.938V4H0zm0 1h-.938v.938H0V5zm5 0h.938v-.938H5V5zm0 4h-.938v.938H5V9zm1 0v.938h.938V9H6zm0-4v-.938h-.938V5H6zm5 0v.938h.938V5H11zm0-1h.938v-.938H11V4zM6 4h-.938v.938H6V4zM5 .937h1V-.938H5V.938zM5.938 4V0H4.063v4h1.875zM0 4.938h5V3.063H0v1.874zM.938 5V4H-.938v1H.938zM5 4.062H0v1.875h5V4.063zM5.938 9V5H4.063v4h1.875zM6 8.062H5v1.876h1V8.062zM5.062 5v4h1.875V5H5.063zM11 4.062H6v1.875h5V4.063zM10.062 4v1h1.876V4h-1.876zM6 4.938h5V3.063H6v1.874zM5.062 0v4h1.875V0H5.063z" mask="url(#d)"/></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#E31D1C" d="M0 0v5h20V0H0z"/><path fill="#FECA00" d="M0 10v5h20v-5H0z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 611 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#1D1D1D" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#F50100" d="M0 0v7.5h20V0H0z"/><g filter="url(#c)"><path fill="#FCFF01" d="M9.719 8.37c.484-.599.636-1.373.636-1.856 0-2.573-3.211-3.997-3.211-3.997 2.208 0 4.666 1.79 4.666 3.997 0 .935-.32 1.802-.858 2.492.984.49 1.817.874 1.817.874.309.202.395.742.192 1.052a.67.67 0 0 1-.926.192s-.79-.467-1.271-.783a20.846 20.846 0 0 0-.748-.462 3.932 3.932 0 0 1-2.203.675s-2.936-.36-2.852-1.865c0 0 .71.543 2.802.543.332 0 .625-.046.881-.128-.905-.494-1.673-.886-1.673-.886-.31-.202-1.113-1.23-.91-1.538.202-.31 1.427.04 1.736.242 0 0 .43.59 1.036.951.268.16.57.328.886.497zM8.238 6.127l-.631.42.201-.72-.463-.46.627-.025.266-.712.265.712h.626l-.462.485.232.678-.661-.378z"/><path fill="#FFEA42" d="M9.719 8.37c.484-.599.636-1.373.636-1.856 0-2.573-3.211-3.997-3.211-3.997 2.208 0 4.666 1.79 4.666 3.997 0 .935-.32 1.802-.858 2.492.984.49 1.817.874 1.817.874.309.202.395.742.192 1.052a.67.67 0 0 1-.926.192s-.79-.467-1.271-.783a20.846 20.846 0 0 0-.748-.462 3.932 3.932 0 0 1-2.203.675s-2.936-.36-2.852-1.865c0 0 .71.543 2.802.543.332 0 .625-.046.881-.128-.905-.494-1.673-.886-1.673-.886-.31-.202-1.113-1.23-.91-1.538.202-.31 1.427.04 1.736.242 0 0 .43.59 1.036.951.268.16.57.328.886.497zM8.238 6.127l-.631.42.201-.72-.463-.46.627-.025.266-.712.265.712h.626l-.462.485.232.678-.661-.378z"/></g></g></g><defs><filter id="c" width="8.111" height="8.717" x="4.959" y="2.517" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#5196ED" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="c" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" filter="url(#b)" mask="url(#c)"><path fill="#fff" d="M5.448 4.934s1.29.707 1.47.903c.18.196.467.915.915.508.448-.406.897-.09.897-.738 0-.647.67-2.15 1.64-1.773.972.376 1.77.14 1.995.291.224.151.762.899 1.18.899.419 0 .628.436.658 1.069.03.633-.135.693.254.768.388.076.538.362.344.738-.195.377-.18.211-.15.603.03.391-.388 2.7-1.674 2.927-1.285.225-2.504.105-2.175-.332.33-.437.784-.94.112-1.045-.673-.105-1.097-.195-1.77-.014-.672.18-1.374.467-1.793-.075-.418-.543-.328-.934-.672-1.19-.344-.256-.763-.211-.419-.708.344-.497.628-.311.344-.703-.284-.392-1.356-.562-1.356-.954 0-.391-.681-1.25.2-1.174z"/><path fill="#F5F8FB" d="M5.448 4.934s1.29.707 1.47.903c.18.196.467.915.915.508.448-.406.897-.09.897-.738 0-.647.67-2.15 1.64-1.773.972.376 1.77.14 1.995.291.224.151.762.899 1.18.899.419 0 .628.436.658 1.069.03.633-.135.693.254.768.388.076.538.362.344.738-.195.377-.18.211-.15.603.03.391-.388 2.7-1.674 2.927-1.285.225-2.504.105-2.175-.332.33-.437.784-.94.112-1.045-.673-.105-1.097-.195-1.77-.014-.672.18-1.374.467-1.793-.075-.418-.543-.328-.934-.672-1.19-.344-.256-.763-.211-.419-.708.344-.497.628-.311.344-.703-.284-.392-1.356-.562-1.356-.954 0-.391-.681-1.25.2-1.174z"/></g></g><defs><filter id="b" width="11.889" height="9.466" x="3.997" y="2.774" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation=".5"/><feColorMatrix values="0 0 0 0 0.0941176 0 0 0 0 0.32549 0 0 0 0 0.639216 0 0 0 0.43 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs></svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#58A5FF" d="M0 0v5h20V0H0zm0 10v5h20v-5H0z"/><path fill="#FFD018" stroke="#F19900" stroke-opacity=".98" stroke-width=".5" d="M10.345 9.054s-.638 1.325-1.2 1.596c.243-.607.332-1.846.332-1.846s-1.458.577-1.97.472c.616-.43 1.47-1.226 1.47-1.226s-1.887-.617-1.84-.879c.851.153 2.022-.014 2.022-.014S7.836 5.57 7.97 5.452c.202.196 1.788 1.025 1.788 1.025s.115-1.412.456-1.888c.041.336.52 1.857.52 1.857s.963-.963 1.498-.963c-.235.29-.791 1.57-.791 1.57s1.385-.022 1.912.237c-.638.09-1.756.652-1.756.652s1.456 1.104 1.324 1.334c-.782-.382-1.686-.51-1.686-.51s.25 1.537.048 1.884c-.197-.511-.938-1.596-.938-1.596z"/><path fill="#FFD018" stroke="#F19900" stroke-opacity=".98" stroke-width=".5" d="M10.262 8.339a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#3547A0" stroke="#E31D1C" stroke-width="1.25" d="M0-.625h-.625v7.692L-1.78 7.5l1.155.433v7.692H20l.22-1.21L1.78 7.5 20.22.585 20-.625H0z"/><path fill="#C44800" fill-rule="evenodd" d="M17.556 3.767s-5.04 1.309-5.04 1.51c0 .201-.453.84-.36 1.006.093.166.334.387.532.277.198-.11.668-.554.51-.277-.157.277.85.598.425 1.21 0 0 .51-.294.263 1.377l1.213.346s1.356-.355.737-1.372h.718s-.297-1.318.143-1.561c.44-.244-.449-.429-.449-.429 1.878-1.069 1.308-2.087 1.308-2.087z" clip-rule="evenodd"/><path fill="#FFC221" fill-rule="evenodd" d="m16.722 9.357-3.042-.515-.399-.533-1.727.348 1.516.859.51-.275 3.142.502v-.386z" clip-rule="evenodd"/><path fill="#FFC221" fill-rule="evenodd" d="M17.189 9.824v-.301l-3.41-.208s-.207-.19-.714-.19-.565.398-.565.398.29.58.855.58c.564 0 1.441.135 1.679.414.237.279 1.222-.143 1.222-.143s-.421-.724-.96-.497c-.54.226-1.518-.11-1.518-.232 0-.122 3.411.18 3.411.18zm-5.761-2.44s-.33.709-.21.977c.528.551 1.488-.328 1.488-.328l-1.278-.65z" clip-rule="evenodd"/><path fill="#979797" fill-rule="evenodd" d="M16.642 7.722c.351-.18.53-.515.53-.95 0-.336-.08-.602-.256-.771v-.229l-.31-.003c-2.774-.025-4.336.25-4.789.936-.458.695-.418 1.288.205 1.576l.276-.007c1.347-.702 2.717-.877 4.126-.527l.218-.025zm-4.564-.845c.366-.554 1.874-.82 4.525-.795v.079c.171.082.257.285.257.61s-.12.55-.36.673c-1.484-.369-2.933-.184-4.347.553-.415-.192-.44-.565-.075-1.12z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M16.603 6.082c-2.651-.024-4.16.24-4.525.795-.365.555-.34.928.075 1.12 1.414-.737 2.863-.922 4.346-.553.24-.123.36-.348.36-.673 0-.325-.085-.528-.256-.61v-.08z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill="#C51918" fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path d="M0 0v5h20V0H0zm0 10v5h20v-5H0z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 584 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#2E42A5" d="M0 0h11v9H0z"/><mask id="b" width="11" height="9" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h11v9H0z"/></mask><g mask="url(#b)"><path fill="#F7FCFF" d="M-1.253 8.125 1.223 9.21l10.083-8.03 1.306-1.614-2.647-.363-4.113 3.46-3.31 2.332-3.795 3.129z"/><path fill="#F50100" d="m-.914 8.886 1.261.63L12.143-.583h-1.77L-.915 8.886z"/><path fill="#F7FCFF" d="M12.503 8.125 10.306 9.52-.056 1.18-1.362-.434l2.647-.363 4.113 3.46 3.31 2.332 3.795 3.129z"/><path fill="#F50100" d="m12.418 8.67-1.261.63-5.023-4.323-1.489-.483-6.133-4.921H.283l6.13 4.804 1.628.58 4.377 3.714z"/><mask id="c" width="13" height="11" x="-1" y="-1" fill="#000" maskUnits="userSpaceOnUse"><path fill="#fff" d="M-1-1h13v11H-1z"/><path fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/></mask><path fill="#F50100" fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M5 0v-.938h-.938V0H5zm1 0h.938v-.938H6V0zM5 4v.938h.938V4H5zM0 4v-.938h-.938V4H0zm0 1h-.938v.938H0V5zm5 0h.938v-.938H5V5zm0 4h-.938v.938H5V9zm1 0v.938h.938V9H6zm0-4v-.938h-.938V5H6zm5 0v.938h.938V5H11zm0-1h.938v-.938H11V4zM6 4h-.938v.938H6V4zM5 .937h1V-.938H5V.938zM5.938 4V0H4.063v4h1.875zM0 4.938h5V3.063H0v1.874zM.938 5V4H-.938v1H.938zM5 4.062H0v1.875h5V4.063zM5.938 9V5H4.063v4h1.875zM6 8.062H5v1.876h1V8.062zM5.062 5v4h1.875V5H5.063zM11 4.062H6v1.875h5V4.063zM10.062 4v1h1.876V4h-1.876zM6 4.938h5V3.063H6v1.874zM5.062 0v4h1.875V0H5.063z" mask="url(#c)"/></g></g><path fill="#F7FCFF" d="m5.92 12.278-.82.758.081-1.113-1.104-.17.922-.63-.557-.968 1.068.327.41-1.039.41 1.039 1.068-.327-.557.968.922.63-1.104.17.081 1.113-.82-.758zm7.32-3.981-.547.505.054-.743-.735-.112.614-.42-.371-.646.712.218.273-.692.273.692.712-.218-.37.645.613.421-.735.112.054.743-.547-.505zm1.28-5.334-.547.506.054-.743-.735-.112.614-.42-.371-.646.712.218.273-.693.273.693.712-.218-.37.645.613.42-.735.113.054.743-.547-.506zm3.2 2.667-.547.505.054-.742-.735-.113.614-.42-.371-.646.712.218.273-.692.273.692.712-.218-.37.646.613.42-.735.113.054.742-.547-.505zm-2.56 7.667-.547.505.054-.742-.735-.113.614-.42-.371-.646.712.218.273-.692.273.692.712-.218-.37.646.613.42-.735.113.054.742-.547-.505zM17.4 9.14l-.555.291.106-.618-.45-.438.621-.09.278-.563.278.562.62.09-.449.439.107.618-.556-.292z"/></svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#5BA3DA" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><g filter="url(#c)"><path fill="#EF2929" d="M3.546 4.975.808 4.397l2.772-.549.8-2.868.633 2.845 2.474.575-2.445.575-.706 2.34-.791-2.34z"/><path fill="red" d="M3.546 4.975.808 4.397l2.772-.549.8-2.868.633 2.845 2.474.575-2.445.575-.706 2.34-.791-2.34z"/></g><path fill="#FAD615" d="M20 9H0v1h20V9zm0 2H0v1h20v-1z"/></g></g><defs><filter id="c" width="8.681" height="8.335" x="-.192" y="-.02" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation=".5"/><feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.2 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#0061C1" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#D21034" stroke="#FFCE00" d="M6-.5h-.5v6h-6v4h6v6h4v-6h11v-4h-11v-6H6z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 572 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#AF0100" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#3CA5D9" d="M0 0v5h20V0H0z"/><path fill="#73BE4A" d="M0 10v5h20v-5H0z"/><path fill="#F7FCFF" d="M10.726 9.317c-.842-.194-1.5-.856-1.492-1.828.008-.909.595-1.678 1.52-1.887.927-.209 1.741.232 1.741.232-.255-.567-1.143-.965-1.872-.963-1.357.003-2.804 1.039-2.818 2.62-.015 1.64 1.546 2.571 2.919 2.568 1.1-.003 1.624-.712 1.732-1.013 0 0-.888.465-1.73.27zm.535-.93.735-.51.735.51-.26-.856.714-.54-.895-.019-.294-.845-.294.845-.895.018.713.541-.259.857z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 992 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="21" height="15" fill="none"><mask id="a" width="22" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h21.25v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#2E42A5" d="M0 0h20.25v15H0V0z"/><path fill="#FECA00" d="M6.25 0H19v15L6.25 0z"/><path fill="#F7FCFF" d="m4.443 1.746-.735.386.14-.818-.594-.58.821-.119.368-.744.367.744.821.12-.594.58.14.817-.734-.386zm2.179 2.675-.735.386.14-.818-.594-.58.821-.118.368-.745.367.745.822.119-.595.58.14.817-.734-.386zm2.043 2.603-.735.386.14-.818-.594-.58.821-.119.368-.744.367.744.821.12-.594.58.14.817-.734-.386zm2.001 2.494-.735.387.14-.819-.594-.579.822-.12.367-.744.367.745.822.119-.595.58.14.818-.734-.387zm2.156 2.567-.735.387.14-.818-.594-.58.821-.12.367-.744.368.745.821.12-.594.579.14.818-.734-.387zm2.382 2.485-.735.386.14-.819-.594-.579.822-.12.367-.744.368.745.821.12-.594.579.14.818-.735-.387z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 970 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#2E42A5" d="M14 0h6v15h-6V0z"/><path fill="#FECA00" d="M6 0h8v15H6V0z"/><path fill="#2E42A5" d="M0 0h6v15H0V0z"/><path fill="#000" d="M11.521 9.546c.396-.818.852-2.311.852-2.311l.346-1.028-1.372.497.325.188s-.566 1.131-.85 1.684c-.286.552-.314.187-.314.187l.049-3.855.315-.086-.785-1.507-1.001 1.528.44.012S9.49 8.923 9.43 8.763c-.034-.09-.125.19-.17.081-.278-.681-.658-2.002-.658-2.002l.222-.208-1.492-.307.445.918s.393 1.635.825 2.434c.097.252.566.36.566.36s.23-.233.286 0c.057.233 0 1.172 0 1.172h1.055s-.074-.886 0-1.172c.074-.286.304 0 .304 0s.612-.24.71-.493z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 842 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#38A17E" d="M0 0h20v15H0z"/><path fill="#F72E45" fill-rule="evenodd" d="M7.5 11.25a3.75 3.75 0 1 0 0-7.5 3.75 3.75 0 0 0 0 7.5z" clip-rule="evenodd"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 384 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#FECA00" d="M6 0h8v15H6V0z"/><path fill="#E31D1C" d="M14 0h6v15h-6V0z"/><path fill="#1D1D1D" d="M0 0h6v15H0V0z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 387 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#5EAA22" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#C51918" d="M0 0v7.5h20V0H0z"/><path fill="#FECA00" d="m10.022 9.857-2.94 2.224.941-3.623-2.757-2.206h3.286l1.47-3.216 1.47 3.216h3.285l-2.786 2.209.97 3.62-2.939-2.224z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 711 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#5EAA22" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#F7FCFF" d="M0 0v5h20V0H0z"/><path fill="#E22C18" d="M0 10v5h20v-5H0z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 611 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#E31D1C" d="M0 0h20v15H0z"/><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0h4.25L7.5 1.25 4.25 2.5 7.5 3.75 4.25 5 7.5 6.25 4.25 7.5 7.5 8.75 4.25 10l3.25 1.25-3.25 1.25 3.25 1.25L4.25 15H0V0z" clip-rule="evenodd"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 450 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><rect width="20" height="15" fill="#5EAA22" rx="1.25"/><mask id="b" width="30" height="19" x="-5" y="-2" fill="#000" maskUnits="userSpaceOnUse"><path fill="#fff" d="M-5-2h30v19H-5z"/><path fill-rule="evenodd" d="M10 7.5 20 0H0l10 7.5zm0 0L0 15h20L10 7.5z" clip-rule="evenodd"/></mask><path fill="#DD2C2B" fill-rule="evenodd" d="M10 7.5 20 0H0l10 7.5zm0 0L0 15h20L10 7.5z" clip-rule="evenodd"/><path fill="#fff" d="m20 0 .938 1.25 3.75-2.813H20V0zM0 0v-1.563h-4.688l3.75 2.813L0 0zm0 15-.938-1.25-3.75 2.813H0V15zm20 0v1.563h4.688l-3.75-2.813L20 15zm-.938-16.25-10 7.5 1.876 2.5 10-7.5-1.875-2.5zM0 1.563h20v-3.125H0v3.125zM10.938 6.25l-10-7.5-1.875 2.5 10 7.5 1.874-2.5zm-1.876 0-10 7.5 1.875 2.5 10-7.5-1.874-2.5zM0 16.563h20v-3.125H0v3.124zm20.938-2.813-10-7.5-1.876 2.5 10 7.5 1.875-2.5z" mask="url(#b)"/><path fill="#fff" fill-rule="evenodd" d="M10 11.25a3.75 3.75 0 1 0 0-7.5 3.75 3.75 0 0 0 0 7.5z" clip-rule="evenodd"/><path fill="#DD2C2B" fill-rule="evenodd" d="m10.104 6.518-.734.386.14-.818-.594-.58h.821l.367-.863.368.864h.821l-.594.58.14.817-.735-.386zm-1.753 2.5-.734.386.14-.818-.595-.58h.822l.367-.863.368.864h.821l-.594.58.14.817-.735-.386zm3.5 0-.734.386.14-.818-.595-.58h.822l.367-.863.368.864h.821l-.594.58.14.817-.735-.386z" clip-rule="evenodd"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#DD2C2B" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#FECA00" fill-rule="evenodd" d="M0 0v7.5h20V0H0z" clip-rule="evenodd"/><path fill="#5EAA22" d="M0 0h9v15H0z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 426 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#F50100" d="M14 0h6v15h-6V0z"/><path fill="#2E42A5" d="M0 0h8v15H0V0z"/><path fill="#F7FCFF" d="M6 0h8v15H6V0z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 387 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#AF0100" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#F7FCFF" fill-rule="evenodd" d="M13.755 7.5c0 3.68.348 4.957 2.445 4.957s2.67-1.854 2.494-4.957h-4.94z" clip-rule="evenodd"/><path fill="#AF0100" fill-rule="evenodd" d="M16.313 9.625c.586 0 1.062-.56 1.062-1.25s-.476-1.25-1.063-1.25c-.586 0-1.062.56-1.062 1.25s.476 1.25 1.063 1.25z" clip-rule="evenodd"/><path fill="#5EAA22" fill-rule="evenodd" d="M14.246 11.446c.373.834 1.027 1.25 1.96 1.25.928 0 1.583-.41 1.967-1.233l-3.927-.017z" clip-rule="evenodd"/><path fill="#82B2CB" d="m14.762 9.394-.349-.87c.64-.257 1.258-.387 1.85-.387.594 0 1.211.13 1.852.387l-.35.87c-.533-.214-1.033-.32-1.501-.32-.468 0-.968.106-1.502.32z"/><path fill="#FECA00" fill-rule="evenodd" d="M15.625 10a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25z" clip-rule="evenodd"/><path fill="#8A4E22" fill-rule="evenodd" d="M16 11a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25z" clip-rule="evenodd"/><path fill="#AF0100" fill-rule="evenodd" d="M15 10.5a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25zm2.125 0a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25zm-.437 1.375c.241 0 .437-.28.437-.625s-.196-.625-.438-.625c-.241 0-.437.28-.437.625s.196.625.438.625zm-1.5 0c.241 0 .437-.28.437-.625s-.196-.625-.438-.625c-.241 0-.437.28-.437.625s.196.625.438.625z" clip-rule="evenodd"/><path fill="#2E42A5" d="M0 0h11v9H0z"/><mask id="c" width="11" height="9" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h11v9H0z"/></mask><g mask="url(#c)"><path fill="#fff" d="M-1.253 8.125 1.223 9.21l10.083-8.03 1.306-1.614-2.647-.363-4.113 3.46-3.31 2.332-3.795 3.129z"/><path fill="#F50100" d="m-.914 8.886 1.261.63L12.143-.583h-1.77L-.915 8.886z"/><path fill="#fff" d="M12.503 8.125 10.306 9.52-.056 1.18-1.362-.434l2.647-.363 4.113 3.46 3.31 2.332 3.795 3.129z"/><path fill="#F50100" d="m12.418 8.67-1.261.63-5.023-4.323-1.489-.483-6.133-4.921H.283l6.13 4.804 1.628.58 4.377 3.714z"/><mask id="d" width="13" height="11" x="-1" y="-1" fill="#000" maskUnits="userSpaceOnUse"><path fill="#fff" d="M-1-1h13v11H-1z"/><path fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/></mask><path fill="#F50100" fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M5 0v-.938h-.938V0H5zm1 0h.938v-.938H6V0zM5 4v.938h.938V4H5zM0 4v-.938h-.938V4H0zm0 1h-.938v.938H0V5zm5 0h.938v-.938H5V5zm0 4h-.938v.938H5V9zm1 0v.938h.938V9H6zm0-4v-.938h-.938V5H6zm5 0v.938h.938V5H11zm0-1h.938v-.938H11V4zM6 4h-.938v.938H6V4zM5 .937h1V-.938H5V.938zM5.938 4V0H4.063v4h1.875zM0 4.938h5V3.063H0v1.874zM.938 5V4H-.938v1H.938zM5 4.062H0v1.875h5V4.063zM5.938 9V5H4.063v4h1.875zM6 8.062H5v1.876h1V8.062zM5.062 5v4h1.875V5H5.063zM11 4.062H6v1.875h5V4.063zM10.062 4v1h1.876V4h-1.876zM6 4.938h5V3.063H6v1.874zM5.062 0v4h1.875V0H5.063z" mask="url(#d)"/></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#FECA00" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#DB501C" fill-rule="evenodd" d="M0 0v5h20V0H0z" clip-rule="evenodd"/><path fill="#5EAA22" fill-rule="evenodd" d="M0 10v5h20v-5H0z" clip-rule="evenodd"/><path stroke="#DB501C" stroke-width=".938" d="M7.28 7.038s-.233 2.38 1.883 2.38h1.577s2.226-.145 1.968-2.38"/><path fill="#FECA00" stroke="#68B9E8" stroke-width=".938" d="M11.406 7.375a1.406 1.406 0 1 1-2.812 0 1.406 1.406 0 0 1 2.812 0z"/><path fill="#DB501C" fill-rule="evenodd" d="M10 7.5a.625.625 0 1 0 0-1.25.625.625 0 0 0 0 1.25z" clip-rule="evenodd"/><path fill="#5EAA22" fill-rule="evenodd" d="M10.063 8.5c.586 0 1.062-.224 1.062-.5s-.476-.5-1.063-.5C9.476 7.5 9 7.724 9 8s.476.5 1.063.5z" clip-rule="evenodd"/><path fill="#674F28" fill-rule="evenodd" d="M10.063 6.25c.828 0 1.5-.224 1.5-.5s-.672-.5-1.5-.5c-.829 0-1.5.224-1.5.5s.671.5 1.5.5z" clip-rule="evenodd"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#fff" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#FEDA00" fill-rule="evenodd" d="M0 6.833V0h10L0 6.833z" clip-rule="evenodd"/><path fill="#00268D" fill-rule="evenodd" d="M0 15h20.006V0L0 15z" clip-rule="evenodd"/><mask id="b" fill="#fff"><path fill-rule="evenodd" d="m5.846 3.125.33.707a2.75 2.75 0 0 1 2.419 2.661l.597.299-.652.326A2.752 2.752 0 0 1 6.2 9.29l-.354.71-.355-.71a2.752 2.752 0 0 1-2.34-2.172L2.5 6.792l.597-.299a2.75 2.75 0 0 1 2.397-2.658l.352-.71z" clip-rule="evenodd"/></mask><path fill="#fff" fill-rule="evenodd" d="m5.846 3.125.33.707a2.75 2.75 0 0 1 2.419 2.661l.597.299-.652.326A2.752 2.752 0 0 1 6.2 9.29l-.354.71-.355-.71a2.752 2.752 0 0 1-2.34-2.172L2.5 6.792l.597-.299a2.75 2.75 0 0 1 2.397-2.658l.352-.71z" clip-rule="evenodd"/><path fill="#000" d="m6.175 3.832-.453.211.117.252.277.033.06-.496zm-.33-.707.454-.211-.44-.943-.461.932.448.222zm2.75 3.368-.5.013.008.3.268.135.224-.448zm.597.299.223.447.895-.447-.895-.448-.223.448zm-.652.326-.224-.448-.217.11-.049.237.49.1zM6.2 9.29l-.063-.496-.264.034-.12.238.448.224zm-.354.71-.447.224.447.894.447-.894L5.846 10zm-.355-.71.447-.224-.12-.238-.263-.034-.064.496zM3.15 7.118l.49-.1-.048-.239-.218-.109-.223.448zm-.65-.326-.224-.448-.894.448.894.447.224-.447zm.597-.299.223.448.27-.135.007-.3-.5-.013zm2.397-2.658.063.496.266-.034.12-.24-.449-.222zm1.134-.214L6.3 2.914l-.906.422.329.707.906-.422zm2.467 2.86a3.25 3.25 0 0 0-2.86-3.145l-.12.992a2.25 2.25 0 0 1 1.98 2.178l1-.025zm.32-.137-.596-.298-.448.895.597.298.447-.895zm-.652 1.22.652-.325-.447-.895-.652.326.447.895zM6.265 9.787A3.252 3.252 0 0 0 9.03 7.218l-.98-.2a2.252 2.252 0 0 1-1.913 1.776l.128.992zm-.511-.72-.355.71.894.448.355-.71-.894-.448zm.54.71-.356-.71-.894.447.355.71.894-.447zM2.661 7.218a3.252 3.252 0 0 0 2.765 2.568l.128-.992a2.252 2.252 0 0 1-1.913-1.777l-.98.201zm-.386.02.652.327.447-.895-.651-.326-.448.895zm.597-1.192-.597.298.448.895.596-.298-.447-.895zM5.431 3.34a3.25 3.25 0 0 0-2.834 3.14l1 .025a2.25 2.25 0 0 1 1.96-2.175l-.126-.992zm-.033-.436-.352.71.896.444.352-.71-.896-.444z" mask="url(#b)"/><path fill="#F00A17" fill-rule="evenodd" d="m5.86 5.188-.406.68h-.8l.4.715-.4.686h.8l.406.7.412-.7h.793l-.39-.686.39-.715h-.793l-.412-.68z" clip-rule="evenodd"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.4 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#fff" d="M0 0h20v15H0V0z"/><path fill="#F00000" d="M0 7.29V0h10L0 7.29zm20 0V0H10l10 7.29z"/><path fill="#00268D" d="M0 7.29V15h10L0 7.29zm20 0v7.92L10 15l10-7.71z"/><path fill="#FEDA00" d="m9.821 8.91-2.198 1.567.807-2.588-2.18-1.585h2.715l.856-2.554.907 2.554h2.642L11.21 7.89l.82 2.588L9.822 8.91z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 577 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#00268D" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#00268D" stroke="#E31D1C" stroke-width="1.25" d="M.625.625h18.75v13.75H.625V.625z"/><path fill="#E31D1C" d="M9.375 0h1.25v15h-1.25z"/><path fill="#E31D1C" d="M0 8.125v-1.25h20v1.25z"/><path fill="#fff" stroke="#E31D1C" stroke-width="1.25" d="m10.28 3.816-.28-.14-.28.14-6.25 3.125-1.118.559 1.118.559 6.25 3.125.28.14.28-.14 6.25-3.125 1.117-.559-1.117-.559-6.25-3.125z"/><mask id="b" width="20" height="11" x="0" y="2" maskUnits="userSpaceOnUse"><path fill="#fff" stroke="#fff" stroke-width="1.25" d="m10.28 3.816-.28-.14-.28.14-6.25 3.125-1.118.559 1.118.559 6.25 3.125.28.14.28-.14 6.25-3.125 1.117-.559-1.117-.559-6.25-3.125z"/></mask><g mask="url(#b)"><path fill="#059334" d="M7.256 10h8.369l-.885-.957s-1.77-1.893-1.883-1.98c-.114-.086-.302-.124-.516.152-.215.276-.337-.151-.516-.151-.178 0-.253 0-.512.353l-1.19 1.626H8.755s-.231-.209-.363-.134c-.131.074-.872-.825-1.136-.892-.264-.067-.438.243-.438.49 0 .248-.124-.226-.377-.087-.253.14-.171.489-.171.489S7.087 10 7.256 10z"/><path fill="#FEDA00" fill-rule="evenodd" d="m9.753 7.034-.617.466.226-.77-.612-.47h.763l.24-.76.255.76h.742l-.607.47.23.77-.62-.466z" clip-rule="evenodd"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#093" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><g fill-rule="evenodd" clip-rule="evenodd" filter="url(#c)"><path fill="#FFD221" d="M9.954 2.315 17.58 7.63l-7.73 4.977-7.47-5.08 7.574-5.212z"/><path fill="url(#d)" d="M9.954 2.315 17.58 7.63l-7.73 4.977-7.47-5.08 7.574-5.212z"/></g><path fill="#2E42A5" fill-rule="evenodd" d="M10 10.75a3.125 3.125 0 1 0 0-6.25 3.125 3.125 0 0 0 0 6.25z" clip-rule="evenodd"/><mask id="e" width="8" height="7" x="6" y="4" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M10 10.75a3.125 3.125 0 1 0 0-6.25 3.125 3.125 0 0 0 0 6.25z" clip-rule="evenodd"/></mask><g fill="#F7FCFF" mask="url(#e)"><path fill-rule="evenodd" d="m8.988 9.106-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm1.25 0-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm0 .75-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm-.625-2.625-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm0 1.25-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm-.876-.625-.14.074.028-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm-.875.5-.14.074.028-.156-.113-.11.156-.023.07-.141.07.141.155.023-.113.11.027.156-.14-.074zm2.876-2.125-.14.074.027-.156-.113-.11.156-.023.07-.141.07.141.155.023-.112.11.026.156-.14-.074z" clip-rule="evenodd"/><path d="m6.203 6.873.094-1.246c2.999.226 5.365 1.212 7.07 2.966l-.896.871c-1.478-1.52-3.557-2.386-6.268-2.59z"/></g></g></g><defs><linearGradient id="d" x1="20" x2="20" y1="15" y2="0" gradientUnits="userSpaceOnUse"><stop stop-color="#FFC600"/><stop offset="1" stop-color="#FFDE42"/></linearGradient><filter id="c" width="15.2" height="10.292" x="2.381" y="2.315" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feColorMatrix values="0 0 0 0 0.0313726 0 0 0 0 0.368627 0 0 0 0 0 0 0 0 0.28 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs></svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#FECA00" d="M0 0h20v15H0V0z"/><path fill="#3CB1CF" d="M0 0v5h20V0H0zm0 10v5h20v-5H0z"/><path fill="#272727" d="m0 0 10 7.5L0 15V0z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 407 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#FF6230" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#FECA00" fill-rule="evenodd" d="M0 0v15L20 0H0z" clip-rule="evenodd"/><g filter="url(#b)"><path fill="#fff" fill-rule="evenodd" d="M2.739 10.206s-.94.856-.195.9c.745.046.606.5 1.215.003.61-.496.018.08.83-.034.813-.113 1.22-1.104 1.649-1.036.428.067.18-.09.541.338.361.43.996-.481.657.15-.338.633-.474 1.264.023 1.242.497-.023.7-.316.925-.632.226-.316 1.987.768 1.174-.316-.812-1.083-1.128.119-1.195-.445-.068-.565-.23-.858.155-.587.383.27 1.286.203.586-.474-.7-.678-.602-.858-.806-.678-.203.181-.7-.677 0-.79.7-.112 1.506.271 1.777.474.27.204 1.106-.045 1.287.361.18.407.79.475.947.723.159.248.046 1.467 1.332 1.4 1.287-.068 1.693-.723 1.152-1.242-.542-.52-.497-1.467-1.061-1.016-.565.452-1.377.384-1.377-.158s.248-.632.203-1.06c-.045-.43-.09-.25.745-.227.835.023.541 0 1.15-.293.61-.293 1.017.993 1.265.045s-.09-1.918-.767-1.535c-.678.384-.655 1.332-1.513.587-.857-.745-1.264-.361-.993-.767.27-.407-.068-.7.542-.43.61.272.429.362.948.43.519.067 3.273.406 2.663-.158-.61-.565-1.194-.473-1.284-.834-.09-.36.28-.27.823-.474.541-.203.316-1.241-.204-1.038-.519.203-.474 1.106-1.535.542-1.218.53-1.03.263-1.649-.634-.542-.43-.835-.452-1.76.045-.731.301-1.342.858-.959 1.603.384.745 1.298 2.147.802 2.238-.497.09-2.28-1.242-3.318-.542-1.039.7-1.606 1.38-1.944 2.193-.339.813-1.434 1.286-1.705 1.286-.27 0-.652.478-1.126.84z" clip-rule="evenodd"/></g></g><defs><filter id="b" width="20.429" height="15.551" x="-.743" y="-.782" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation="1.5"/><feColorMatrix values="0 0 0 0 0.866667 0 0 0 0 0.184314 0 0 0 0 0 0 0 0 0.38 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs></svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#E31D1C" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#2E42A5" stroke="#F7FCFF" stroke-width="1.25" d="M6.25-.625h-.625v6.25h-6.25v3.75h6.25v6.25h3.75v-6.25h11.25v-3.75H9.375v-6.25H6.25z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 634 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#42ADDF" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#58A5FF" fill-rule="evenodd" d="M0 0v5h20V0H0z" clip-rule="evenodd"/><path fill="#272727" stroke="#F7FCFF" d="M0 5.5h-.5v4h21v-4H0z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 633 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#73BE4A" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#AF0100" fill-rule="evenodd" d="M0 0v10h20V0H0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M0 0h3.75v15H0z"/><path fill="#D0181A" fill-rule="evenodd" d="M.625 0a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zm2.5 0a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zM1.25 3.125a.625.625 0 1 0-1.25 0 .625.625 0 0 0 1.25 0zM3.125 2.5a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zm0 8.75a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zm-1.875.625a.625.625 0 1 0-1.25 0 .625.625 0 0 0 1.25 0zM.625 13.75a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zm3.125.625a.625.625 0 1 0-1.25 0 .625.625 0 0 0 1.25 0zM1.875 12.5a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zM2.5 1.875a.625.625 0 1 0-1.25 0 .625.625 0 0 0 1.25 0zm.069 5.65L3.75 8.75V10l.027.058-1.845-1.847L.274 10H0V8.75l1.24-1.232L0 6.278V5h.136l1.779 1.846 1.787-1.778L3.75 5v1.25L2.569 7.524zM1.875 3.75a.625.625 0 1 1 0 1.25.625.625 0 0 1 0-1.25zm.625 6.875a.625.625 0 1 0-1.25 0 .625.625 0 0 0 1.25 0z" clip-rule="evenodd"/><path fill="#8F181A" fill-rule="evenodd" d="M0 0h1.25v1.25H0V0zm1.25 2.5H0v1.25h1.25V2.5zM0 5h1.25v1.25H0V5zm1.25 3.75H0V10h1.25V8.75zM0 11.25h1.25v1.25H0v-1.25zm1.25 2.5H0V15h1.25v-1.25zm2.5 0H2.5V15h1.25v-1.25zM3.75 0H2.5v1.25h1.25V0z" clip-rule="evenodd" opacity=".4"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#0168B4" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#E93C43" fill-rule="evenodd" d="M0-1v3h20v-3H0zm0 14v3h20v-3H0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M10 11.25a3.75 3.75 0 1 1 0-7.5 3.75 3.75 0 0 1 0 7.5z"/><path fill="#fff" fill-rule="evenodd" d="M5.625 7.5a4.375 4.375 0 1 0 8.75 0 4.375 4.375 0 0 0-8.75 0zm8.125 0a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0z" clip-rule="evenodd"/><path fill="#5B8C39" fill-rule="evenodd" d="M6.25 7.5a3.75 3.75 0 1 0 7.5 0 3.75 3.75 0 0 0-7.5 0zm6.625 0a2.875 2.875 0 1 1-5.75 0 2.875 2.875 0 0 1 5.75 0z" clip-rule="evenodd"/><path fill="#5B8C39" fill-rule="evenodd" d="m8.125 8.75 1.837-.235 1.913.235v.625L9.962 9.14l-1.837.235V8.75z" clip-rule="evenodd"/><path fill="#769DF1" fill-rule="evenodd" d="M8.75 6.25h2.5S11.427 10 10 10 8.75 6.25 8.75 6.25z" clip-rule="evenodd"/><path fill="#FECA00" d="M10 6.25h1.25V7.5H10z"/><path fill="#F6F7F8" d="M8.75 6.25H10V7.5H8.75z" opacity=".6"/><rect width="2.5" height="1.25" x="8.75" y="5" fill="#5B8C39" opacity=".66" rx=".625"/><path fill="#E9AD35" fill-rule="evenodd" d="M8.625 8c.345 0 .625-.56.625-1.25S8.97 5.5 8.625 5.5 8 6.06 8 6.75 8.28 8 8.625 8z" clip-rule="evenodd"/><path fill="#5C2216" fill-rule="evenodd" d="M11.375 8C11.72 8 12 7.44 12 6.75s-.28-1.25-.625-1.25-.625.56-.625 1.25.28 1.25.625 1.25z" clip-rule="evenodd"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#F7FCFF" d="M5 0h10v15H5V0z"/><path fill="#E31D1C" d="M8.956 5.252 9.983 3.75 10 12.5h-.428l.263-2.165s-2.883.529-2.644.262c.238-.267.375-.757.375-.757L5 8.092s.405-.005.734-.205c.33-.2-.33-1.385-.33-1.385l1.296.192.49-.544.978 1.045h.44l-.44-2.393.788.45zM10 12.5V3.75l1.044 1.502.788-.45-.44 2.393h.44l.977-1.045.49.544 1.296-.192s-.658 1.185-.33 1.385c.33.2.735.205.735.205L12.434 9.84s.137.49.376.757c.238.267-2.645-.262-2.645-.262l.263 2.165H10zM15 0h5v15h-5V0zM0 0h5v15H0V0z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 757 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><g mask="url(#CC_-_Cocos_(Keeling)_Islands__a)"><path fill="#5EAA22" fill-rule="evenodd" d="M0 0h20v15H0V0z" clip-rule="evenodd"/><path fill="#FECA00" fill-rule="evenodd" d="m15 4.375-.625.458.084-.77-.709-.313.709-.313-.084-.77.625.458.625-.458-.084.77.709.313-.709.313.084.77L15 4.375zm-.648 4.175-.625.457.083-.77-.708-.313.708-.312-.083-.77.625.457.625-.457-.084.77.709.312-.709.313.084.77-.625-.458zm1.898 3.325-.625.457.084-.77L15 11.25l.709-.313-.084-.77.625.458.625-.457-.084.77.709.312-.709.313.084.77-.625-.458zm.625-5.937-.313.228.042-.385-.354-.156.354-.156-.041-.385.312.229.313-.23-.042.386.354.156-.354.156.041.385-.312-.229zM4.375 8.75a3.125 3.125 0 1 0 0-6.25 3.125 3.125 0 0 0 0 6.25z" clip-rule="evenodd"/><path fill="#915E2B" d="m4.056 7.492-.224-.158c.496-.65.365-1.558.224-2.155l.912-.215c.21.89-.255 1.668-.912 2.528z"/><path fill="#FECA00" fill-rule="evenodd" d="M12.436 9.34c-.411.707-1.065 1.027-1.94 1.027a2.371 2.371 0 0 1 0-4.742c1 0 1.796.35 2.162 1.302-.29-.287-.738-.484-1.408-.46-1.036 0-1.71.807-1.71 1.498 0 .69.675 1.628 1.71 1.628.52-.007.906-.103 1.186-.252z" clip-rule="evenodd"/><path fill="#5EAA22" fill-rule="evenodd" d="M4.375 5.462c1.036 0 1.696-.28 1.696-.625s-.66-.625-1.696-.625-1.572.28-1.572.625.536.625 1.572.625z" clip-rule="evenodd"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#3195F9" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#E31D1C" stroke="#FECA00" stroke-width="1.563" d="m-1.139 15.9.434.65.65-.434L22.608.988l.65-.433-.434-.65-1.388-2.08-.433-.65-.65.434L-2.31 12.737l-.65.433.434.65 1.387 2.08z"/><path fill="#FECA00" fill-rule="evenodd" d="M3.082 5.379.903 6.89 1.6 4.302 0 2.649l2.165-.09L3.082 0l.916 2.56H6.16L4.564 4.301l.8 2.435L3.081 5.38z" clip-rule="evenodd"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 849 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#3D58DB" d="M0 0h20v3.75H0V0z"/><path fill="#F7FCFF" d="M0 3.75h20V7.5H0V3.75z"/><path fill="#73BE4A" d="M0 7.5h20v3.75H0V7.5z"/><path fill="#FFD018" d="M0 11.25h20V15H0v-3.75z"/><path fill="#FECA00" d="M2.83 3.385 1.317 4.436l.484-1.8-1.113-1.15 1.507-.062.637-1.78.637 1.78h1.504l-1.11 1.212.556 1.694-1.587-.945z"/><path fill="#E11C1B" d="M8 0h4v15H8V0z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 633 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#FA1111" d="M20 0v15H0L20 0z"/><path fill="#07A907" d="M0 15V0h20L0 15z"/><path fill="#FBCD17" d="M18.432-3.625-.625 14.735l3.782 1.883L21.65-.133l-3.218-3.493z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 437 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#E31D1C" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#F1F9FF" fill-rule="evenodd" d="M11.25 3.75h-2.5v2.5h-2.5v2.5h2.5v2.5h2.5v-2.5h2.5v-2.5h-2.5v-2.5z" clip-rule="evenodd"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 620 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#CI_-_Côte_d'Ivoire_(Ivory_Coast)__a)"><path fill="#67BD38" d="M13.75 0H20v15h-6.25V0z"/><path fill="#E47E00" d="M0 0h6.25v15H0V0z"/><path fill="#F7FCFF" d="M6.25 0h7.5v15h-7.5V0z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 321 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#2E42A5" d="M0 0h11v9H0z"/><mask id="c" width="11" height="9" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h11v9H0z"/></mask><g mask="url(#c)"><path fill="#F7FCFF" d="M-1.253 8.125 1.223 9.21l10.083-8.03 1.306-1.614-2.647-.363-4.113 3.46-3.31 2.332-3.795 3.129z"/><path fill="#F50100" d="m-.914 8.886 1.261.63L12.143-.583h-1.77L-.915 8.886z"/><path fill="#F7FCFF" d="M12.503 8.125 10.306 9.52-.056 1.18-1.362-.434l2.647-.363 4.113 3.46 3.31 2.332 3.795 3.129z"/><path fill="#F50100" d="m12.418 8.67-1.261.63-5.023-4.323-1.489-.483-6.133-4.921H.283l6.13 4.804 1.628.58 4.377 3.714z"/><mask id="d" width="13" height="11" x="-1" y="-1" fill="#000" maskUnits="userSpaceOnUse"><path fill="#fff" d="M-1-1h13v11H-1z"/><path fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/></mask><path fill="#F50100" fill-rule="evenodd" d="M6 0H5v4H0v1h5v4h1V5h5V4H6V0z" clip-rule="evenodd"/><path fill="#F7FCFF" d="M5 0v-.938h-.938V0H5zm1 0h.938v-.938H6V0zM5 4v.938h.938V4H5zM0 4v-.938h-.938V4H0zm0 1h-.938v.938H0V5zm5 0h.938v-.938H5V5zm0 4h-.938v.938H5V9zm1 0v.938h.938V9H6zm0-4v-.938h-.938V5H6zm5 0v.938h.938V5H11zm0-1h.938v-.938H11V4zM6 4h-.938v.938H6V4zM5 .937h1V-.938H5V.938zM5.938 4V0H4.063v4h1.875zM0 4.938h5V3.063H0v1.874zM.938 5V4H-.938v1H.938zM5 4.062H0v1.875h5V4.063zM5.938 9V5H4.063v4h1.875zM6 8.062H5v1.876h1V8.062zM5.062 5v4h1.875V5H5.063zM11 4.062H6v1.875h5V4.063zM10.062 4v1h1.876V4h-1.876zM6 4.938h5V3.063H6v1.874zM5.062 0v4h1.875V0H5.063z" mask="url(#d)"/></g><path fill="#fff" fill-rule="evenodd" d="m14.907 9.284.662-.461.641.461-.2-.82.516-.521h-.655l-.303-.67-.258.67h-.768l.588.52-.223.821zm1.758.787.662-.462.391.282-.125.326h-.768l.588.52-.11.401-.075-.169-.258.67h-.768l.588.52-.224.822.663-.462.64.462-.199-.821.515-.52h-.655l-.11-.242.432-.3.64.461-.199-.821.515-.52h-.655l-.302-.67-.006.015-.076-.313.515-.52h-.655l-.303-.67-.258.67H16.3l.588.52-.223.82zm-1.029 3.227-.662.462.223-.822-.535-.473.131.54-.64-.461-.663.461.224-.82-.589-.521h.769l.052-.135-.585-.421-.663.461.224-.82-.588-.521h.768l.258-.67.036.078.097-.357-.588-.52h.768l.258-.67.302.67h.655l-.515.52.2.82-.641-.46-.408.283.138.306h.655l-.514.52.171.707.178-.461.302.67h.655l-.515.52.057.234h.726l.258-.67.302.67h.655l-.514.52.199.822-.641-.462z" clip-rule="evenodd"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#3D58DB" d="M0 0h9v9H0V0z"/><path fill="#F7FCFF" d="M8.75-1.25H20v10H8.75v-10z"/><path fill="#E31D1C" d="M0 8h20v7H0V8z"/><path fill="#F7FCFF" d="m4.384 5.615-2.377 1.42L3.18 4.618l-2.078-1.57 2.399-.025.905-2.142.582 2.142 2.27.01L5.532 4.57l.896 2.465-2.044-1.42z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 542 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#E11C1B" d="M6 0h8v15H6V0z"/><path fill="#FECA00" d="M10.047 9.056 7.87 10.568l.696-2.589-1.6-1.653 2.166-.09.916-2.558.916 2.559h2.162L11.53 7.979l.799 2.436-2.282-1.359z"/><path fill="#FBCD17" d="M14 0h6v15h-6V0z"/><path fill="#0B9E7A" d="M0 0h6v15H0V0z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 532 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#a)"><path fill="#E31D1C" d="M0 0h20v15H0V0z"/><path fill="#FECA00" d="M4.446 6.097 2.013 8.004l.93-2.884-1.624-1.5 2.198-.08.93-2.322.929 2.321h2.193L5.95 5.12l.738 2.884-2.242-1.907zm4.939-2.24-1.02.617.232-1.203-.85-.9 1.151-.049.487-1.123.487 1.123h1.15l-.849.949.256 1.203-1.044-.617z"/><path fill="#FECA00" d="m10.635 6.357-1.02.617.232-1.203-.85-.9 1.151-.049.487-1.123.487 1.123h1.15l-.849.949.256 1.203-1.044-.617z"/><path fill="#FECA00" d="m9.385 8.857-1.02.617.232-1.203-.85-.9 1.151-.049.487-1.123.487 1.123h1.15l-.849.949.256 1.203-1.044-.617z"/><path fill="#FECA00" d="m6.885 10.107-1.02.617.232-1.203-.85-.9 1.151-.049.487-1.123.487 1.123h1.15l-.849.949.256 1.203-1.044-.617z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 950 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#FECA00" d="M0 0v7h20V0H0z"/><path fill="#E31D1C" d="M0 11v4h20v-4H0z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 611 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#2E42A5" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#E31D1C" stroke="#F7FCFF" stroke-width="2" d="M0 5h-1v5h22V5H0z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 565 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><mask id="a" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" d="M0 0h20v15H0z"/></mask><g mask="url(#a)"><path fill="#3D58DB" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><mask id="b" width="20" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/></mask><g mask="url(#b)"><path fill="#3D58DB" stroke="#F7FCFF" stroke-width="2.5" d="M0 5h-1.25v5h22.5V5H0z"/></g><path fill="#E31D1C" fill-rule="evenodd" d="M0 0v15l11.25-7.5L0 0z" clip-rule="evenodd"/><mask id="c" width="12" height="15" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M0 0v15l11.25-7.5L0 0z" clip-rule="evenodd"/></mask><g mask="url(#c)"><path fill="#F7FCFF" fill-rule="evenodd" d="m4.18 8.886-2.295 1.21 1.117-2.433-1.424-1.3 1.758-.065.844-2.2.644 2.2h1.754l-1.17 1.365.931 2.434-2.16-1.211z" clip-rule="evenodd"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |