diff --git a/.github/update.log b/.github/update.log index aaea275469..1294170851 100644 --- a/.github/update.log +++ b/.github/update.log @@ -744,3 +744,4 @@ Update On Wed Aug 21 20:32:11 CEST 2024 Update On Thu Aug 22 20:34:16 CEST 2024 Update On Fri Aug 23 20:31:39 CEST 2024 Update On Sat Aug 24 20:31:41 CEST 2024 +Update On Sun Aug 25 20:30:10 CEST 2024 diff --git a/clash-meta/docs/config.yaml b/clash-meta/docs/config.yaml index 647cf14c61..b67880f77b 100644 --- a/clash-meta/docs/config.yaml +++ b/clash-meta/docs/config.yaml @@ -1005,6 +1005,9 @@ listeners: # rule: sub-rule-name1 # 默认使用 rules,如果未找到 sub-rule 则直接使用 rules # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 # udp: false # 默认 true + # users: # 如果不填写users项,则遵从全局authentication设置,如果填写会忽略全局设置, 如想跳过该入站的验证可填写 users: [] + # - username: aaa + # password: aaa - name: http-in-1 type: http @@ -1012,6 +1015,9 @@ listeners: listen: 0.0.0.0 # rule: sub-rule-name1 # 默认使用 rules,如果未找到 sub-rule 则直接使用 rules # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 (当 proxy 不为空时,这里的 proxy 名称必须合法,否则会出错) + # users: # 如果不填写users项,则遵从全局authentication设置,如果填写会忽略全局设置, 如想跳过该入站的验证可填写 users: [] + # - username: aaa + # password: aaa - name: mixed-in-1 type: mixed # HTTP(S) 和 SOCKS 代理混合 @@ -1020,6 +1026,9 @@ listeners: # rule: sub-rule-name1 # 默认使用 rules,如果未找到 sub-rule 则直接使用 rules # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 (当 proxy 不为空时,这里的 proxy 名称必须合法,否则会出错) # udp: false # 默认 true + # users: # 如果不填写users项,则遵从全局authentication设置,如果填写会忽略全局设置, 如想跳过该入站的验证可填写 users: [] + # - username: aaa + # password: aaa - name: reidr-in-1 type: redir diff --git a/clash-meta/listener/auth/auth.go b/clash-meta/listener/auth/auth.go index 46f552b80c..772be3bdd7 100644 --- a/clash-meta/listener/auth/auth.go +++ b/clash-meta/listener/auth/auth.go @@ -13,3 +13,5 @@ func Authenticator() auth.Authenticator { func SetAuthenticator(au auth.Authenticator) { authenticator = au } + +func Nil() auth.Authenticator { return nil } diff --git a/clash-meta/listener/http/proxy.go b/clash-meta/listener/http/proxy.go index b2f312a578..04ab98eb8c 100644 --- a/clash-meta/listener/http/proxy.go +++ b/clash-meta/listener/http/proxy.go @@ -30,7 +30,7 @@ func (b *bodyWrapper) Read(p []byte) (n int, err error) { return n, err } -func HandleConn(c net.Conn, tunnel C.Tunnel, authenticator auth.Authenticator, additions ...inbound.Addition) { +func HandleConn(c net.Conn, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) { additions = append(additions, inbound.Placeholder) // Add a placeholder for InUser inUserIdx := len(additions) - 1 client := newClient(c, tunnel, additions) @@ -41,6 +41,7 @@ func HandleConn(c net.Conn, tunnel C.Tunnel, authenticator auth.Authenticator, a conn := N.NewBufferedConn(c) + authenticator := getAuth() keepAlive := true trusted := authenticator == nil // disable authenticate if lru is nil lastUser := "" @@ -146,9 +147,6 @@ func HandleConn(c net.Conn, tunnel C.Tunnel, authenticator auth.Authenticator, a } func authenticate(request *http.Request, authenticator auth.Authenticator) (resp *http.Response, user string) { - if inbound.SkipAuthRemoteAddress(request.RemoteAddr) { - authenticator = nil - } credential := parseBasicProxyAuthorization(request) if credential == "" && authenticator != nil { resp = responseWith(request, http.StatusProxyAuthRequired) diff --git a/clash-meta/listener/http/server.go b/clash-meta/listener/http/server.go index f61dd03609..74e117f265 100644 --- a/clash-meta/listener/http/server.go +++ b/clash-meta/listener/http/server.go @@ -33,20 +33,20 @@ func (l *Listener) Close() error { } func New(addr string, tunnel C.Tunnel, additions ...inbound.Addition) (*Listener, error) { - return NewWithAuthenticator(addr, tunnel, authStore.Authenticator(), additions...) + return NewWithAuthenticator(addr, tunnel, authStore.Authenticator, additions...) } // NewWithAuthenticate // never change type traits because it's used in CFMA func NewWithAuthenticate(addr string, tunnel C.Tunnel, authenticate bool, additions ...inbound.Addition) (*Listener, error) { - authenticator := authStore.Authenticator() + getAuth := authStore.Authenticator if !authenticate { - authenticator = nil + getAuth = authStore.Nil } - return NewWithAuthenticator(addr, tunnel, authenticator, additions...) + return NewWithAuthenticator(addr, tunnel, getAuth, additions...) } -func NewWithAuthenticator(addr string, tunnel C.Tunnel, authenticator auth.Authenticator, additions ...inbound.Addition) (*Listener, error) { +func NewWithAuthenticator(addr string, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) (*Listener, error) { isDefault := false if len(additions) == 0 { isDefault = true @@ -75,13 +75,18 @@ func NewWithAuthenticator(addr string, tunnel C.Tunnel, authenticator auth.Authe continue } N.TCPKeepAlive(conn) + + getAuth := getAuth if isDefault { // only apply on default listener if !inbound.IsRemoteAddrDisAllowed(conn.RemoteAddr()) { _ = conn.Close() continue } + if inbound.SkipAuthRemoteAddr(conn.RemoteAddr()) { + getAuth = authStore.Nil + } } - go HandleConn(conn, tunnel, authenticator, additions...) + go HandleConn(conn, tunnel, getAuth, additions...) } }() diff --git a/clash-meta/listener/inbound/auth.go b/clash-meta/listener/inbound/auth.go new file mode 100644 index 0000000000..41f18fc089 --- /dev/null +++ b/clash-meta/listener/inbound/auth.go @@ -0,0 +1,31 @@ +package inbound + +import ( + "github.com/metacubex/mihomo/component/auth" + authStore "github.com/metacubex/mihomo/listener/auth" +) + +type AuthUser struct { + Username string `inbound:"username"` + Password string `inbound:"password"` +} + +type AuthUsers []AuthUser + +func (a AuthUsers) GetAuth() func() auth.Authenticator { + if a != nil { // structure's Decode will ensure value not nil when input has value even it was set an empty array + if len(a) == 0 { + return authStore.Nil + } + users := make([]auth.AuthUser, len(a)) + for i, user := range a { + users[i] = auth.AuthUser{ + User: user.Username, + Pass: user.Password, + } + } + authenticator := auth.NewAuthenticator(users) + return func() auth.Authenticator { return authenticator } + } + return authStore.Authenticator +} diff --git a/clash-meta/listener/inbound/http.go b/clash-meta/listener/inbound/http.go index f5301f46c9..c78abefd5f 100644 --- a/clash-meta/listener/inbound/http.go +++ b/clash-meta/listener/inbound/http.go @@ -8,6 +8,7 @@ import ( type HTTPOption struct { BaseOption + Users AuthUsers `inbound:"users,omitempty"` } func (o HTTPOption) Equal(config C.InboundConfig) bool { @@ -44,7 +45,7 @@ func (h *HTTP) Address() string { // Listen implements constant.InboundListener func (h *HTTP) Listen(tunnel C.Tunnel) error { var err error - h.l, err = http.New(h.RawAddress(), tunnel, h.Additions()...) + h.l, err = http.NewWithAuthenticator(h.RawAddress(), tunnel, h.config.Users.GetAuth(), h.Additions()...) if err != nil { return err } diff --git a/clash-meta/listener/inbound/mixed.go b/clash-meta/listener/inbound/mixed.go index fc64382199..443a256452 100644 --- a/clash-meta/listener/inbound/mixed.go +++ b/clash-meta/listener/inbound/mixed.go @@ -12,7 +12,8 @@ import ( type MixedOption struct { BaseOption - UDP bool `inbound:"udp,omitempty"` + Users AuthUsers `inbound:"users,omitempty"` + UDP bool `inbound:"udp,omitempty"` } func (o MixedOption) Equal(config C.InboundConfig) bool { @@ -52,7 +53,7 @@ func (m *Mixed) Address() string { // Listen implements constant.InboundListener func (m *Mixed) Listen(tunnel C.Tunnel) error { var err error - m.l, err = mixed.New(m.RawAddress(), tunnel, m.Additions()...) + m.l, err = mixed.NewWithAuthenticator(m.RawAddress(), tunnel, m.config.Users.GetAuth(), m.Additions()...) if err != nil { return err } diff --git a/clash-meta/listener/inbound/socks.go b/clash-meta/listener/inbound/socks.go index 7e10d93afb..cf6d1ce433 100644 --- a/clash-meta/listener/inbound/socks.go +++ b/clash-meta/listener/inbound/socks.go @@ -9,7 +9,8 @@ import ( type SocksOption struct { BaseOption - UDP bool `inbound:"udp,omitempty"` + Users AuthUsers `inbound:"users,omitempty"` + UDP bool `inbound:"udp,omitempty"` } func (o SocksOption) Equal(config C.InboundConfig) bool { @@ -70,7 +71,7 @@ func (s *Socks) Address() string { // Listen implements constant.InboundListener func (s *Socks) Listen(tunnel C.Tunnel) error { var err error - if s.stl, err = socks.New(s.RawAddress(), tunnel, s.Additions()...); err != nil { + if s.stl, err = socks.NewWithAuthenticator(s.RawAddress(), tunnel, s.config.Users.GetAuth(), s.Additions()...); err != nil { return err } if s.udp { diff --git a/clash-meta/listener/mixed/mixed.go b/clash-meta/listener/mixed/mixed.go index 773cabe3f1..12390061c0 100644 --- a/clash-meta/listener/mixed/mixed.go +++ b/clash-meta/listener/mixed/mixed.go @@ -5,6 +5,7 @@ import ( "github.com/metacubex/mihomo/adapter/inbound" N "github.com/metacubex/mihomo/common/net" + "github.com/metacubex/mihomo/component/auth" C "github.com/metacubex/mihomo/constant" authStore "github.com/metacubex/mihomo/listener/auth" "github.com/metacubex/mihomo/listener/http" @@ -36,6 +37,10 @@ func (l *Listener) Close() error { } func New(addr string, tunnel C.Tunnel, additions ...inbound.Addition) (*Listener, error) { + return NewWithAuthenticator(addr, tunnel, authStore.Authenticator, additions...) +} + +func NewWithAuthenticator(addr string, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) (*Listener, error) { isDefault := false if len(additions) == 0 { isDefault = true @@ -62,20 +67,24 @@ func New(addr string, tunnel C.Tunnel, additions ...inbound.Addition) (*Listener } continue } + getAuth := getAuth if isDefault { // only apply on default listener if !inbound.IsRemoteAddrDisAllowed(c.RemoteAddr()) { _ = c.Close() continue } + if inbound.SkipAuthRemoteAddr(c.RemoteAddr()) { + getAuth = authStore.Nil + } } - go handleConn(c, tunnel, additions...) + go handleConn(c, tunnel, getAuth, additions...) } }() return ml, nil } -func handleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { +func handleConn(conn net.Conn, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) { N.TCPKeepAlive(conn) bufConn := N.NewBufferedConn(conn) @@ -86,10 +95,10 @@ func handleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { switch head[0] { case socks4.Version: - socks.HandleSocks4(bufConn, tunnel, additions...) + socks.HandleSocks4(bufConn, tunnel, getAuth, additions...) case socks5.Version: - socks.HandleSocks5(bufConn, tunnel, additions...) + socks.HandleSocks5(bufConn, tunnel, getAuth, additions...) default: - http.HandleConn(bufConn, tunnel, authStore.Authenticator(), additions...) + http.HandleConn(bufConn, tunnel, getAuth, additions...) } } diff --git a/clash-meta/listener/socks/tcp.go b/clash-meta/listener/socks/tcp.go index f2696e3fc1..3e98a60276 100644 --- a/clash-meta/listener/socks/tcp.go +++ b/clash-meta/listener/socks/tcp.go @@ -6,6 +6,7 @@ import ( "github.com/metacubex/mihomo/adapter/inbound" N "github.com/metacubex/mihomo/common/net" + "github.com/metacubex/mihomo/component/auth" C "github.com/metacubex/mihomo/constant" authStore "github.com/metacubex/mihomo/listener/auth" "github.com/metacubex/mihomo/transport/socks4" @@ -35,6 +36,10 @@ func (l *Listener) Close() error { } func New(addr string, tunnel C.Tunnel, additions ...inbound.Addition) (*Listener, error) { + return NewWithAuthenticator(addr, tunnel, authStore.Authenticator, additions...) +} + +func NewWithAuthenticator(addr string, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) (*Listener, error) { isDefault := false if len(additions) == 0 { isDefault = true @@ -61,20 +66,24 @@ func New(addr string, tunnel C.Tunnel, additions ...inbound.Addition) (*Listener } continue } + getAuth := getAuth if isDefault { // only apply on default listener if !inbound.IsRemoteAddrDisAllowed(c.RemoteAddr()) { _ = c.Close() continue } + if inbound.SkipAuthRemoteAddr(c.RemoteAddr()) { + getAuth = authStore.Nil + } } - go handleSocks(c, tunnel, additions...) + go handleSocks(c, tunnel, getAuth, additions...) } }() return sl, nil } -func handleSocks(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { +func handleSocks(conn net.Conn, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) { N.TCPKeepAlive(conn) bufConn := N.NewBufferedConn(conn) head, err := bufConn.Peek(1) @@ -85,19 +94,16 @@ func handleSocks(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) switch head[0] { case socks4.Version: - HandleSocks4(bufConn, tunnel, additions...) + HandleSocks4(bufConn, tunnel, getAuth, additions...) case socks5.Version: - HandleSocks5(bufConn, tunnel, additions...) + HandleSocks5(bufConn, tunnel, getAuth, additions...) default: conn.Close() } } -func HandleSocks4(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { - authenticator := authStore.Authenticator() - if inbound.SkipAuthRemoteAddr(conn.RemoteAddr()) { - authenticator = nil - } +func HandleSocks4(conn net.Conn, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) { + authenticator := getAuth() addr, _, user, err := socks4.ServerHandshake(conn, authenticator) if err != nil { conn.Close() @@ -107,11 +113,8 @@ func HandleSocks4(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) tunnel.HandleTCPConn(inbound.NewSocket(socks5.ParseAddr(addr), conn, C.SOCKS4, additions...)) } -func HandleSocks5(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { - authenticator := authStore.Authenticator() - if inbound.SkipAuthRemoteAddr(conn.RemoteAddr()) { - authenticator = nil - } +func HandleSocks5(conn net.Conn, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) { + authenticator := getAuth() target, command, user, err := socks5.ServerHandshake(conn, authenticator) if err != nil { conn.Close() diff --git a/clash-nyanpasu/.github/workflows/publish.yml b/clash-nyanpasu/.github/workflows/publish.yml index 665ae4b01b..e2e24b9388 100644 --- a/clash-nyanpasu/.github/workflows/publish.yml +++ b/clash-nyanpasu/.github/workflows/publish.yml @@ -20,6 +20,7 @@ jobs: # Give the default GITHUB_TOKEN write permission to commit and push the # added or changed files to the repository. contents: write + discussions: write runs-on: ubuntu-latest steps: - name: Checkout @@ -48,7 +49,8 @@ jobs: ${{ runner.os }}-pnpm-store- - name: Install run: pnpm i - + - name: Install git-cliff + uses: taiki-e/install-action@git-cliff - id: update-version shell: bash name: Bump version @@ -56,30 +58,40 @@ jobs: run: | echo "version=$(pnpm run publish ${{ inputs.versionType }} | tail -n1)" >> $GITHUB_OUTPUT git add . - - name: Conventional Changelog Action + - name: Generate a changelog for the new version + shell: bash id: build-changelog - uses: TriPSs/conventional-changelog-action@v5 - with: - github-token: ${{ secrets.github_token }} - git-message: "chore(release): {version} 🤖" - git-user-name: "github-actions[bot]" - git-user-email: "41898282+github-actions[bot]@users.noreply.github.com" - preset: "conventionalcommits" - tag-prefix: "v" - # output-file: "UPDATELOG.md" # Since v1.4.3, using conventional-changelog-cli@v2.1.0 - release-count: "10" - pre-changelog-generation: ".github/conventional-changelog/pre-changelog-generation.cjs" - config-file-path: ".github/conventional-changelog/config.cjs" - git-branch: "main" + run: | + touch /tmp/changelog.md + git-cliff --config cliff.toml --verbose --strip header --unreleased --tag v${{ steps.update-version.outputs.version }} > /tmp/changelog.md + if [ $? -eq 0 ]; then + CONTENT=$(cat /tmp/changelog.md) + cat /tmp/changelog.md >> ./CHANGELOG.md + { + echo 'content<> $GITHUB_OUTPUT + echo "version=${{ steps.update-version.outputs.version }}" >> $GITHUB_OUTPUT + else + echo "Failed to generate changelog" + exit 1 + fi env: - NYANPASU_VERSION: ${{ steps.update-version.outputs.version }} - GITHUB_TOKEN: ${{ secrets.github_token }} - + GITHUB_REPO: ${{ github.repository }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "chore: bump version to v${{ steps.update-version.outputs.version }}" + commit_user_name: "github-actions[bot]" + commit_user_email: "41898282+github-actions[bot]@users.noreply.github.com" + tagging_message: "v${{ steps.update-version.outputs.version }}" - name: Release uses: softprops/action-gh-release@v2 with: draft: true - body: ${{steps.build-changelog.outputs.clean_changelog}} + body: ${{steps.build-changelog.outputs.content}} name: Clash Nyanpasu v${{steps.update-version.outputs.version}} - tag_name: ${{steps.build-changelog.outputs.tag}} + tag_name: "v${{ steps.update-version.outputs.version }}" # target_commitish: ${{ steps.tag.outputs.sha }} diff --git a/clash-nyanpasu/CHANGELOG.md b/clash-nyanpasu/CHANGELOG.md index 5af7ced04b..4c18c32ba7 100644 --- a/clash-nyanpasu/CHANGELOG.md +++ b/clash-nyanpasu/CHANGELOG.md @@ -1,1886 +1,1930 @@ -## [1.5.1](https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.5.0...v1.5.1) (2024-04-08) +## [1.5.1] - 2024-04-08 ### ✨ Features -- **backend:** allow to hide tray selector ([#626](https://github.com/LibNyanpasu/clash-nyanpasu/issues/626)) ([4e45b98](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4e45b98d997dbb4e289215629bdb648103986a76)) by @greenhat616 -- **config:** support custom app dir in windows ([#582](https://github.com/LibNyanpasu/clash-nyanpasu/issues/582)) ([2e48df0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2e48df023067d78c886416fcca4a532a08d68da5)) by @greenhat616 -- **custom-schema:** add support for name and desc fields ([6121545](https://github.com/LibNyanpasu/clash-nyanpasu/commit/61215450f14d3426b42355cb8d71595bb9901939)) by @greenhat616 -- improve WebSocket reconnection in useWebsocket hook ([8039a56](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8039a56262ac3160c8bb09e5e9a7c5a007ddb6ee)) by @keiko233 -- lock rustup toolchain to stable channel ([076fe21](https://github.com/LibNyanpasu/clash-nyanpasu/commit/076fe21bb4286bd426142bf0b6783e26b74a45f6)) by @4o3F -- new desigin rules page ([81a7e1b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/81a7e1bea42bae4fed4923a073b19c48fa24dfa4)) by @keiko233 -- new design log page ([5674788](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5674788de96f9eb18094fd563d2b6a87e60aff9c)) by @keiko233 -- perf motion transition ([d9b8585](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d9b8585615dec1fb209ab835de76cfaee9a5fc00)) by @keiko233 +- **backend:** Allow to hide tray selector (#626) by @greenhat616 in [#626](https://github.com/LibNyanpasu/clash-nyanpasu/pull/626) + +- **config:** Support custom app dir in windows (#582) by @greenhat616 in [#582](https://github.com/LibNyanpasu/clash-nyanpasu/pull/582) + +- **custom-schema:** Add support for name and desc fields by @greenhat616 + +- Perf motion transition by @keiko233 + +- Lock rustup toolchain to stable channel by @4o3F + +- New design log page by @keiko233 + +- New desigin rules page by @keiko233 + +- Improve WebSocket reconnection in useWebsocket hook by @keiko233 ### 🐛 Bug Fixes -- build ([2284ebf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2284ebfaa752a0838714005b726d95f40873c382)) by @keiko233 -- **bundler/nsis:** don't use /R flag on installation dir ([45e1905](https://github.com/LibNyanpasu/clash-nyanpasu/commit/45e1905aa89a1934cb7c671cb34673a53d6e5c63)) by @keiko233 -- **chains:** only guard fields should be overwritten ([#629](https://github.com/LibNyanpasu/clash-nyanpasu/issues/629)) ([9046a1f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9046a1f6d6ff4c54ef2af46dcf8143517cf1b34d)) by @greenhat616 -- **cmds:** `path` in changing app dir call ([#591](https://github.com/LibNyanpasu/clash-nyanpasu/issues/591)) ([82865bb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/82865bb1fea5a124586f17394b0232e05eafdf81)) by @greenhat616 -- **cmds:** migrate custom app dir typo ([#628](https://github.com/LibNyanpasu/clash-nyanpasu/issues/628)) ([a3e99c3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a3e99c3f3f6dc021b41ebb8a8c0428bdcbcfc88e)) by @greenhat616 -- command path ([70c03cc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/70c03ccd6433cbd83e9454decf3280764b172cae)) by @greenhat616 -- connection page NaN and first enter animation ([20e3897](https://github.com/LibNyanpasu/clash-nyanpasu/commit/20e38973c2d916024ef536e053772744c65ba7a9)) by @greenhat616 -- **deps:** pin dependency @generouted/react-router to 1.18.5 ([0aa9aca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0aa9acafd98add066b322319c60150957076de50)) by @renovate[bot] -- **deps:** update dependency @emotion/styled to v11.11.5 ([af75e29](https://github.com/LibNyanpasu/clash-nyanpasu/commit/af75e2983bfdc12f699166bbdeaf622c69398207)) by @renovate[bot] -- **deps:** update dependency @generouted/react-router to v1.18.6 ([18d98a8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/18d98a8f9375288140f2f686b9e24604c851c11e)) by @renovate[bot] -- **deps:** update dependency @generouted/react-router to v1.18.7 ([4106a8e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4106a8eba4232e9dfa459c6f4e6c51bc190abf58)) by @renovate[bot] -- **deps:** update dependency @mui/x-data-grid to v6.19.8 ([#651](https://github.com/LibNyanpasu/clash-nyanpasu/issues/651)) ([d622ca2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d622ca203a45735ffd3e3085419920e4ed573696)) by @renovate[bot] -- **deps:** update dependency @mui/x-data-grid to v7 ([#659](https://github.com/LibNyanpasu/clash-nyanpasu/issues/659)) ([f16e5c0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f16e5c09596a124759b53edf79fe509b0412f3a7)) by @renovate[bot] -- **deps:** update dependency @mui/x-data-grid to v7.1.0 ([685af5a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/685af5ad5022f43469258d478f071d7eaaf52bc2)) by @renovate[bot] -- **deps:** update dependency @mui/x-data-grid to v7.1.1 ([4fdaf63](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4fdaf63a69074fad1f0e02245cd9c3528f6b8e0d)) by @renovate[bot] -- **deps:** update dependency ahooks to v3.7.11 ([#700](https://github.com/LibNyanpasu/clash-nyanpasu/issues/700)) ([ed0a7bd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ed0a7bd1875b905b970179a85bb8b6e9d6accf37)) by @renovate[bot] -- **deps:** update dependency axios to v1.6.8 ([c06ad64](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c06ad646f3ecd1ea25c42f9b058f4b5b229f38cf)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.12 ([8c984c3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8c984c3f8a9d43a4505fdb5c910c58d5646c8e6d)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.13 ([45e0b93](https://github.com/LibNyanpasu/clash-nyanpasu/commit/45e0b9339f9cb24c80d6b7addc6a50a09dc85d83)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.14 ([#616](https://github.com/LibNyanpasu/clash-nyanpasu/issues/616)) ([80c0a5a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/80c0a5afcfb1e6bcae77465f445807fdcad4c847)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.15 ([#641](https://github.com/LibNyanpasu/clash-nyanpasu/issues/641)) ([19acea3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/19acea37c232472837f9f939c67e13ed55f9356b)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.18 ([#647](https://github.com/LibNyanpasu/clash-nyanpasu/issues/647)) ([e6cebc7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e6cebc7f151c0a346ce96aceb2af62266c5d73d8)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.20 ([61e3578](https://github.com/LibNyanpasu/clash-nyanpasu/commit/61e35783a6ed5314792b7674c4f4dbb9d493dbfe)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.21 ([#676](https://github.com/LibNyanpasu/clash-nyanpasu/issues/676)) ([aad12ca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aad12cad77eeb50815892be53511f0d30fe22075)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.22 ([57d3379](https://github.com/LibNyanpasu/clash-nyanpasu/commit/57d33794825921fd485566077581b3cadfd13742)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.23 ([07e97af](https://github.com/LibNyanpasu/clash-nyanpasu/commit/07e97af9ba166d46e26b9a8293a64a27c0fc3915)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.24 ([769f295](https://github.com/LibNyanpasu/clash-nyanpasu/commit/769f295c8e8a6f403cfa695fe83fd61a26800b03)) by @renovate[bot] -- **deps:** update dependency framer-motion to v11.0.25 ([71f2ca5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/71f2ca55551c7c5097d2728668c2a2b7bb9561ec)) by @renovate[bot] -- **deps:** update dependency i18next to v23.10.1 ([30b093c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/30b093c3962fd771250647e4378dfbd65d5942fd)) by @renovate[bot] -- **deps:** update dependency monaco-editor to v0.47.0 ([d2a26f2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d2a26f29500f1b36472dc2b6955a45f6d77127b8)) by @renovate[bot] -- **deps:** update dependency react-hook-form to v7.51.1 ([2964754](https://github.com/LibNyanpasu/clash-nyanpasu/commit/29647548ec023c275ef222029f6be6e5d96a8cdd)) by @renovate[bot] -- **deps:** update dependency react-hook-form to v7.51.2 ([6c4d59b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6c4d59bdc57211bf12b029e228edd6bc5037ae94)) by @renovate[bot] -- **deps:** update dependency react-i18next to v14.0.8 ([1cc73e1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1cc73e1d4a9924fec856c49c4164a1c5cc7609cb)) by @renovate[bot] -- **deps:** update dependency react-i18next to v14.1.0 ([c9a3cfc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c9a3cfc6fe2a25cb453501d1ed7ab1b771a7c97d)) by @renovate[bot] -- **deps:** update dependency react-router-dom to v6.22.3 ([f3bd189](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f3bd189a0a84a1d8e95c2b71a45f373bb7a658a7)) by @renovate[bot] -- **deps:** update dependency react-virtuoso to v4.7.2 ([086c89f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/086c89fcf43265f671d37058e218b4eff17465d4)) by @renovate[bot] -- **deps:** update dependency react-virtuoso to v4.7.3 ([40a7540](https://github.com/LibNyanpasu/clash-nyanpasu/commit/40a75403d50d668e549cd880c5d8f5a431e0eec3)) by @renovate[bot] -- **deps:** update dependency react-virtuoso to v4.7.4 ([#648](https://github.com/LibNyanpasu/clash-nyanpasu/issues/648)) ([2ccffa9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2ccffa9ebddab7904e827df7e51d83bfaa8e2508)) by @renovate[bot] -- **deps:** update dependency react-virtuoso to v4.7.5 ([7bab4e1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7bab4e14efd7f8fdca1e1f69910a4cd2d6696ecb)) by @renovate[bot] -- **deps:** update dependency react-virtuoso to v4.7.6 ([6dbc077](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6dbc0771ecc603d42c12b33df187cb2f1f6df56f)) by @renovate[bot] -- **deps:** update dependency react-virtuoso to v4.7.7 ([087a695](https://github.com/LibNyanpasu/clash-nyanpasu/commit/087a6956f7dc7b08f47dadbd3dbf8bda9b154938)) by @renovate[bot] -- **deps:** update dependency react-virtuoso to v4.7.8 ([#724](https://github.com/LibNyanpasu/clash-nyanpasu/issues/724)) ([b5ce1c6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b5ce1c65bc025f209ed0f7f6e20ade143ee93cb5)) by @renovate[bot] -- **deps:** update material-ui monorepo ([#562](https://github.com/LibNyanpasu/clash-nyanpasu/issues/562)) ([eb82b2e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eb82b2e91d22b7488257df118f74e71e3f9c0753)) by @renovate[bot] -- **deps:** update material-ui monorepo ([#607](https://github.com/LibNyanpasu/clash-nyanpasu/issues/607)) ([5611fc4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5611fc4907c51812fe5a976eadef184bd36ab793)) by @renovate[bot] -- **deps:** update material-ui monorepo ([#638](https://github.com/LibNyanpasu/clash-nyanpasu/issues/638)) ([b233a2f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b233a2f7bbc452033db306c9686f587114adc470)) by @renovate[bot] -- **deps:** update material-ui monorepo ([#715](https://github.com/LibNyanpasu/clash-nyanpasu/issues/715)) ([c8ae4ae](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c8ae4ae58cad628c2120c272e5aa1a0ccc0e07e5)) by @renovate[bot] -- **deps:** update rust crate anyhow to v1.0.81 ([e7171ed](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e7171edd04a8d7dceac610ec9e36ddbfc4ac73f9)) by @renovate[bot] -- **deps:** update rust crate async-trait to v0.1.79 ([fce9925](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fce9925f67f3b943dd5c6217550a4c0b563f84a5)) by @renovate[bot] -- **deps:** update rust crate backon to v0.4.3 ([#578](https://github.com/LibNyanpasu/clash-nyanpasu/issues/578)) ([356b99e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/356b99ec2dff2b32fb241621023e79d8768584ee)) by @renovate[bot] -- **deps:** update rust crate backon to v0.4.4 ([#731](https://github.com/LibNyanpasu/clash-nyanpasu/issues/731)) ([7732e6c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7732e6cab33e8177d0d06990333db6406b636dc4)) by @renovate[bot] -- **deps:** update rust crate chrono to v0.4.35 ([90f8e44](https://github.com/LibNyanpasu/clash-nyanpasu/commit/90f8e445637b9ea33da2a29fe0dbaf8ca4d2438c)) by @renovate[bot] -- **deps:** update rust crate chrono to v0.4.37 ([4a3e697](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4a3e697679a4d207acea29ba58b4bb688c889f2e)) by @renovate[bot] -- **deps:** update rust crate ctrlc to v3.4.4 ([d9a5417](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d9a5417022f963f0db8c3b2a9a85f7d424bcbd1b)) by @renovate[bot] -- **deps:** update rust crate image to v0.25.1 ([c79020e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c79020ef39a583ffbf4f84688998b24d8af68700)) by @renovate[bot] -- **deps:** update rust crate indexmap to v2.2.6 ([#663](https://github.com/LibNyanpasu/clash-nyanpasu/issues/663)) ([0f4b646](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0f4b64633c49888c0aaa6000855c971a2e140dd1)) by @renovate[bot] -- **deps:** update rust crate open to v5.1.2 ([e6a35d1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e6a35d10865aba21dc18048535fd7b73a46d31b3)) by @renovate[bot] -- **deps:** update rust crate reqwest to v0.11.25 ([#581](https://github.com/LibNyanpasu/clash-nyanpasu/issues/581)) ([6522392](https://github.com/LibNyanpasu/clash-nyanpasu/commit/65223927ec4d0f532b91b547931ec40553366188)) by @renovate[bot] -- **deps:** update rust crate reqwest to v0.11.26 ([4a2f052](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4a2f052bdf82a51c986aa6be039af011419ebc4e)) by @renovate[bot] -- **deps:** update rust crate reqwest to v0.11.27 ([#645](https://github.com/LibNyanpasu/clash-nyanpasu/issues/645)) ([1c1441a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1c1441aa207f6602aaf35a64ce39fd6246bb2163)) by @renovate[bot] -- **deps:** update rust crate serde_json to v1.0.115 ([#677](https://github.com/LibNyanpasu/clash-nyanpasu/issues/677)) ([cffe3f5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cffe3f584dc518f30d70f3895e3ba973a72e6ad8)) by @renovate[bot] -- **deps:** update rust crate serde_yaml to v0.9.33 ([#624](https://github.com/LibNyanpasu/clash-nyanpasu/issues/624)) ([98e34fa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/98e34fa62acb6f5eb466db7506bcb85ebea58c7d)) by @renovate[bot] -- **deps:** update rust crate serde_yaml to v0.9.34 ([e56b0ed](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e56b0ed5cc71cb2c89b891c14d138946cbb4cdda)) by @renovate[bot] -- **deps:** update rust crate sysinfo to v0.30.7 ([#567](https://github.com/LibNyanpasu/clash-nyanpasu/issues/567)) ([0617256](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0617256bce6c2ef2eaf3968116ddfec03b1a7332)) by @renovate[bot] -- **deps:** update rust crate sysinfo to v0.30.8 ([dda3280](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dda3280cb647dce441f515a94681d6b62f8fda90)) by @renovate[bot] -- **deps:** update rust crate tokio to v1.37.0 ([780b6d4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/780b6d414c50bdcd7c676a63ab972732a0388e1d)) by @renovate[bot] -- **deps:** update rust crate uuid to v1.8.0 ([0edb4ad](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0edb4ad808fc2e3062bb15ec9e275e213ae6907a)) by @renovate[bot] -- **deps:** update rust crate warp to v0.3.7 ([da083a8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/da083a82cad7c8f4d35af37ecd7b69bf37a912cb)) by @renovate[bot] -- **deps:** update rust crate which to v6.0.1 ([f966d5a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f966d5a17df6065fadd843c64c264e0654b81bb4)) by @renovate[bot] -- disable webview2 SwipeNavigation ([b1d83aa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b1d83aa0e416e56ebf7ecb38db331a386dc226fb)) by @keiko233 -- **docs:** fix url typos ([07c72f3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/07c72f30eefd73ad4239105bfe53fa45e6fb9ce1)) by @keiko233 -- draft patch to resolve custom app config migration ([8cc9e8c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8cc9e8c653fc10f3a22e945699800fa6a0fe21a5)) by @greenhat616 -- fix migration child process issue ([363bb4b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/363bb4bae8391954b213a26bfa2da6bf6cd64dc5)) by @4o3F -- fix migration issue for path with space ([0bfcb04](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0bfcb04a39c3f6a2f2fb33d2a864cb8543451439)) by @4o3F -- fix misinterprete of tauri's application args ([bc769ac](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bc769ac34c2c140f515aca0fa847d5dced961d4e)) by @4o3F -- fix rename permission issue ([dd8dc58](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dd8dc58a1d06bf14592a9f16db716d527384f29d)) by @4o3F -- fix single instance check failing on macos ([6a48cf3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6a48cf3ca1e678f6fc380f814fa49c991b3816dd)) by @4o3F -- fix wrong window size and position ([072d030](https://github.com/LibNyanpasu/clash-nyanpasu/commit/072d03086ff42a40b71651394bf38d099ecb032c)) by @4o3F -- lint ([34f4d9a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/34f4d9adae676fd71c5c819bfe53f47c09bb299b)) by @greenhat616 -- MDYSwitch-thumb size ([1928442](https://github.com/LibNyanpasu/clash-nyanpasu/commit/192844293a5230a9a214b0100adc4072041ebaa1)) by @keiko233 -- missing github repo context ([8c99542](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8c995424e4ea8dbe79dcc6ca366366a8099027f0)) by @keiko233 -- **notification:** unexpected `}` ([#563](https://github.com/LibNyanpasu/clash-nyanpasu/issues/563)) ([7f53253](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7f53253d25e1e949197ca45facd476052a3488d3)) by @WOSHIZHAZHA120 -- panic while quit application ([818dd0e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/818dd0ec4a861b43743e90f305d9f73d10dd4972)) by @greenhat616 -- profile-box border radius value ([51f2547](https://github.com/LibNyanpasu/clash-nyanpasu/commit/51f25479409539a0e3e07e111cbbccf5fee3ba05)) by @keiko233 -- profiles when drag sort container scroll style ([ed71c42](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ed71c42361c6c9e2f28682402922c6612c0474a9)) by @keiko233 -- proxy groups virtuoso also overscan ([e16c2e4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e16c2e4715d0deec69d1d6528726c10967265d8e)) by @keiko233 -- restart application not work ([61662f9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/61662f92a18276fdc7e5fa8a7f06c27ef87fdffe)) by @greenhat616 -- revert previous commit ([d361bec](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d361bec812d292ebf097321343f2afeeb9cdc003)) by @greenhat616 -- slinet start get_window err ([41fdd90](https://github.com/LibNyanpasu/clash-nyanpasu/commit/41fdd906ddd89ae62787fbba48362792e50fce2b)) by @keiko233 -- subscription info parse issue, closing [#729](https://github.com/LibNyanpasu/clash-nyanpasu/issues/729) ([88ccfcd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/88ccfcd8705cf192bd73f12f1e51b77accf46f7e)) by @greenhat616 -- top item no padding ([9c0a95d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9c0a95da37028a6df6d47da971b5f133de6f0d7a)) by @keiko233 -- try to add a launch command to make restart application work ([02d7847](https://github.com/LibNyanpasu/clash-nyanpasu/commit/02d784714f0636a913fd8a581057ac7e4a968a86)) by @greenhat616 -- try to use delayed singleton check to make restart app work ([e4a0582](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e4a05826171e65bbd2cd308089678ed634c7e8b6)) by @greenhat616 -- use clash verge rev patch to resolve Content-Disposition Filename issue, closing [#703](https://github.com/LibNyanpasu/clash-nyanpasu/issues/703) ([5bc9001](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5bc90015759b187cbeb8e2c22024206d2c890316)) by @greenhat616 -- use overscan to prevent blank scrolling ([de28211](https://github.com/LibNyanpasu/clash-nyanpasu/commit/de2821162864ab59dfb2ae2a170cae2acdc8f09c)) by @keiko233 -- use shiki intead of shikiji ([a5fb9e4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a5fb9e433e913ebbb927e200c5aa706116ce7caf)) by @greenhat616 +- **bundler/nsis:** Don't use /R flag on installation dir by @keiko233 -### 🧹 Maintenance +- **chains:** Only guard fields should be overwritten (#629) by @greenhat616 in [#629](https://github.com/LibNyanpasu/clash-nyanpasu/pull/629) -- add scss dts for better DX ([9609863](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9609863b18edc7240438056e0e375b3a9541b3f4)) by @greenhat616 -- add send-release:nightly script & trigger when nightly build ([103b174](https://github.com/LibNyanpasu/clash-nyanpasu/commit/103b1748d843dfa8c011909fd8638a691e073312)) by @keiko233 -- bump rust crates ([94d3863](https://github.com/LibNyanpasu/clash-nyanpasu/commit/94d3863c14472f22fea081e30bca14dedd397aef)) by @greenhat616 -- **deps:** pin dependencies ([d07d0be](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d07d0be6c85b196988129a1981d75f5a48a85d46)) by @renovate[bot] -- **deps:** update dependency @commitlint/cli to v19.2.0 ([#613](https://github.com/LibNyanpasu/clash-nyanpasu/issues/613)) ([18aa6dc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/18aa6dcd86b0fb3e40aeef885cc051c3120d0f21)) by @renovate[bot] -- **deps:** update dependency @commitlint/cli to v19.2.1 ([2ff8f22](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2ff8f220d0e35effebb5ce06a135e33d2b9a7d50)) by @renovate[bot] -- **deps:** update dependency @tauri-apps/cli to v1.5.11 ([7a89e7c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7a89e7c93d792d973f377c054144b948b45e8fd1)) by @renovate[bot] -- **deps:** update dependency @types/node to v20.11.28 ([#615](https://github.com/LibNyanpasu/clash-nyanpasu/issues/615)) ([fbc046a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fbc046a132504715138db0c6e3df9f99b4780e75)) by @renovate[bot] -- **deps:** update dependency @types/node to v20.11.30 ([#640](https://github.com/LibNyanpasu/clash-nyanpasu/issues/640)) ([bcace64](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bcace646910c920946559fc41d6a227d860dc7ed)) by @renovate[bot] -- **deps:** update dependency @types/node to v20.12.2 ([09a0ecc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/09a0ecc5145804fd905afb108fbdc22f4a2ea10d)) by @renovate[bot] -- **deps:** update dependency @types/node to v20.12.3 ([#708](https://github.com/LibNyanpasu/clash-nyanpasu/issues/708)) ([664c057](https://github.com/LibNyanpasu/clash-nyanpasu/commit/664c05745c3a4df727954a9ee2ac87a7824f1386)) by @renovate[bot] -- **deps:** update dependency @types/node to v20.12.5 ([#722](https://github.com/LibNyanpasu/clash-nyanpasu/issues/722)) ([4a97015](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4a9701589ed78453c8f9c07902443af0d0d9a0c0)) by @renovate[bot] -- **deps:** update dependency @types/react to v18.2.62 ([6893702](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6893702e4a6da7645b8e076ad58f58417a5bfcf4)) by @renovate[bot] -- **deps:** update dependency @types/react to v18.2.63 ([c6b20f5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c6b20f56306901dcacbfc7f3d84537db1fbe698c)) by @renovate[bot] -- **deps:** update dependency @types/react to v18.2.66 ([#612](https://github.com/LibNyanpasu/clash-nyanpasu/issues/612)) ([9e5322f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9e5322fc38b5ca0fdde3ca2e19a4debf2710dbc2)) by @renovate[bot] -- **deps:** update dependency @types/react to v18.2.69 ([#661](https://github.com/LibNyanpasu/clash-nyanpasu/issues/661)) ([1afa4c4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1afa4c47146384406816327591a42c2d91f770df)) by @renovate[bot] -- **deps:** update dependency @types/react to v18.2.70 ([a4ac46e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a4ac46e9e37ca8be359eb3c97ca0970958b32f5c)) by @renovate[bot] -- **deps:** update dependency @types/react to v18.2.71 ([#675](https://github.com/LibNyanpasu/clash-nyanpasu/issues/675)) ([2642ed8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2642ed8645a17d0193fd91edda19d0b5c6e609ac)) by @renovate[bot] -- **deps:** update dependency @types/react to v18.2.72 ([cb82b6f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cb82b6f31662294efe84b76546aa356cac60c8c4)) by @renovate[bot] -- **deps:** update dependency @types/react to v18.2.73 ([a9fe452](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a9fe452b1a9ae074151a13972058a5daec6c90a4)) by @renovate[bot] -- **deps:** update dependency @types/react to v18.2.74 ([96003b9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/96003b9b8ad2914acaeabd353e053c776883c676)) by @renovate[bot] -- **deps:** update dependency @types/react-dom to v18.2.20 ([0f4be95](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0f4be953ad53c641717dd37730fac3fffe26d82d)) by @renovate[bot] -- **deps:** update dependency @types/react-dom to v18.2.21 ([7ee63eb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7ee63eb3cc9b8f0565861f80d40ee5d5f3f01994)) by @renovate[bot] -- **deps:** update dependency @types/react-dom to v18.2.23 ([9560652](https://github.com/LibNyanpasu/clash-nyanpasu/commit/956065220b2ae3ce50bd011f4aee6bf965cb9529)) by @renovate[bot] -- **deps:** update dependency adm-zip to v0.5.11 ([#606](https://github.com/LibNyanpasu/clash-nyanpasu/issues/606)) ([ea773d3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ea773d3dce69b871ab125c4dea45d3299c26fae4)) by @renovate[bot] -- **deps:** update dependency adm-zip to v0.5.12 ([#609](https://github.com/LibNyanpasu/clash-nyanpasu/issues/609)) ([62b3cda](https://github.com/LibNyanpasu/clash-nyanpasu/commit/62b3cda7b9e09da96677da89d2414ba993ff3fd2)) by @renovate[bot] -- **deps:** update dependency autoprefixer to v10.4.19 ([9868716](https://github.com/LibNyanpasu/clash-nyanpasu/commit/986871668fdd43d6d67255df3ad8900360909550)) by @renovate[bot] -- **deps:** update dependency eslint-plugin-react to v7.34.0 ([9d7698e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9d7698e3a83ed62d0ad9f6ef095f812cc415e7c8)) by @renovate[bot] -- **deps:** update dependency eslint-plugin-react to v7.34.1 ([347ce03](https://github.com/LibNyanpasu/clash-nyanpasu/commit/347ce039965f2a6f780e18cfc29489d81c2b4b94)) by @renovate[bot] -- **deps:** update dependency postcss to v8.4.36 ([#630](https://github.com/LibNyanpasu/clash-nyanpasu/issues/630)) ([e602753](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e602753706c76f07494096f7e8e2bf70c0151ef2)) by @renovate[bot] -- **deps:** update dependency postcss to v8.4.37 ([edc556f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/edc556f3be06e75c9c171406dc029bdb49ea7110)) by @renovate[bot] -- **deps:** update dependency postcss to v8.4.38 ([#653](https://github.com/LibNyanpasu/clash-nyanpasu/issues/653)) ([8ab7a76](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8ab7a76bc436592ff079bbbfbd994b455c9e1775)) by @renovate[bot] -- **deps:** update dependency postcss-import to v16.1.0 ([dd7a174](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dd7a174fe51b45301efe5bdf609243badcbdd110)) by @renovate[bot] -- **deps:** update dependency sass to v1.72.0 ([#608](https://github.com/LibNyanpasu/clash-nyanpasu/issues/608)) ([cbd0f22](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cbd0f22ef924de32564dfd5d2536863c6ff6f41a)) by @renovate[bot] -- **deps:** update dependency sass to v1.74.1 ([#713](https://github.com/LibNyanpasu/clash-nyanpasu/issues/713)) ([3258ec0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3258ec000fd2da4898a249f55aed45348a1c38ce)) by @renovate[bot] -- **deps:** update dependency shiki to v1.2.4 ([#709](https://github.com/LibNyanpasu/clash-nyanpasu/issues/709)) ([6e905a2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6e905a2142b5ed338c559eaeaa969f75cfeac1b9)) by @renovate[bot] -- **deps:** update dependency stylelint to v16.3.0 ([9c6f6eb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9c6f6eb041a329c9ccfef67aa509b19a0637421d)) by @renovate[bot] -- **deps:** update dependency stylelint to v16.3.1 ([#678](https://github.com/LibNyanpasu/clash-nyanpasu/issues/678)) ([ddd4d13](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ddd4d132934b3ecf3c11bd6eab13689fd19f02b1)) by @renovate[bot] -- **deps:** update dependency stylelint-config-recess-order to v5 ([#546](https://github.com/LibNyanpasu/clash-nyanpasu/issues/546)) ([9f2b781](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9f2b78194c36f9c8759305923ac75a5abaff4acb)) by @renovate[bot] -- **deps:** update dependency stylelint-scss to v6.2.0 ([a39772d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a39772d7a4e11b08186e5bee4b501c3b610fcf01)) by @renovate[bot] -- **deps:** update dependency stylelint-scss to v6.2.1 ([ed66085](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ed66085e70f55c1ca4da0395377f85504e231c31)) by @renovate[bot] -- **deps:** update dependency tsx to v4.7.2 ([#714](https://github.com/LibNyanpasu/clash-nyanpasu/issues/714)) ([c4f93d2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c4f93d28868011e85e983b3d654ed624814e06d6)) by @renovate[bot] -- **deps:** update dependency typescript to v5.4.3 ([#654](https://github.com/LibNyanpasu/clash-nyanpasu/issues/654)) ([6671f80](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6671f80757baefdf3a65e7a76b59158b89fcd35e)) by @renovate[bot] -- **deps:** update dependency typescript to v5.4.4 ([1cbf98b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1cbf98b2507e363be6d1dd257d489094e299422c)) by @renovate[bot] -- **deps:** update dependency vite to v5.1.5 ([c501fa1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c501fa143aa70a7e915057b24418cfdd26a2bfd2)) by @renovate[bot] -- **deps:** update dependency vite to v5.1.6 ([ad3269e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ad3269e87c4142a8257741688acf6e576c3aa3a2)) by @renovate[bot] -- **deps:** update dependency vite to v5.2.2 ([#649](https://github.com/LibNyanpasu/clash-nyanpasu/issues/649)) ([5cfc153](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5cfc1535a28c5c5eafdee2b662806276c88e048c)) by @renovate[bot] -- **deps:** update dependency vite to v5.2.3 ([70aabf9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/70aabf95ff4fda56c5e1f99b8e218c8ec3b88b38)) by @renovate[bot] -- **deps:** update dependency vite to v5.2.4 ([5061365](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5061365864dc0befc72b1e943bec6b5722ae6d10)) by @renovate[bot] -- **deps:** update dependency vite to v5.2.5 ([#669](https://github.com/LibNyanpasu/clash-nyanpasu/issues/669)) ([5231fef](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5231fef5223fc58f037a130bc72dc2fc014499cc)) by @renovate[bot] -- **deps:** update dependency vite to v5.2.6 ([11e4ccc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/11e4ccceadea41709f9b9cf4ee8ddbb53ee7a1a3)) by @renovate[bot] -- **deps:** update dependency vite to v5.2.7 ([745a13a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/745a13a1ab8a36d743a1fe1c0e147fd0a4402d56)) by @renovate[bot] -- **deps:** update dependency vite to v5.2.8 ([#710](https://github.com/LibNyanpasu/clash-nyanpasu/issues/710)) ([299c6e6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/299c6e60b46160e636e237dbfb3e5991d68b2ecb)) by @renovate[bot] -- **deps:** update lint packages to v19.1.0 ([1f4c04f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1f4c04fee2184f04407f0e8cd30d8f92b152ffbd)) by @renovate[bot] -- **deps:** update lint packages to v7.1.1 ([#556](https://github.com/LibNyanpasu/clash-nyanpasu/issues/556)) ([07cef3e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/07cef3e7673908d61f0704c5b662ecd8a69aba25)) by @renovate[bot] -- **deps:** update lint packages to v7.2.0 ([685179b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/685179b239dd974d05d6fb1bbc2189bc17e7fa0d)) by @renovate[bot] -- **deps:** update lint packages to v7.3.1 ([d351341](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d3513413f75641de6b5d8a6fd25f6439407d4857)) by @renovate[bot] -- **deps:** update lint packages to v7.4.0 ([d0acb3d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d0acb3dbfa82b7b28f5d802e264a94d12b320008)) by @renovate[bot] -- **deps:** update lint packages to v7.5.0 ([#701](https://github.com/LibNyanpasu/clash-nyanpasu/issues/701)) ([593a2ed](https://github.com/LibNyanpasu/clash-nyanpasu/commit/593a2ed7b9d10e9cac6d9ab310694e8251981a68)) by @renovate[bot] -- **deps:** update rust crate simd-json to v0.13.9 ([1b9a0c4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1b9a0c439c3ae55cc5b0216a608cbdc2029b172b)) by @renovate[bot] -- **deps:** update rust crate thiserror to v1.0.58 ([d958bb0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d958bb0639ed0d9aa4ebc5eb688cf3dfa2c682aa)) by @renovate[bot] -- **deps:** update softprops/action-gh-release action to v2 ([#580](https://github.com/LibNyanpasu/clash-nyanpasu/issues/580)) ([acf772f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/acf772f69b8fb4b9b68265ed6ca57066a5420273)) by @renovate[bot] -- **deps:** update typescript packages ([8be72ca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8be72ca31ac593b4f066121625043cc4854362ab)) by @renovate[bot] -- **deps:** update typescript packages ([14056fc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/14056fcbc2ec0d8eed505bbe3a2fb20c77ffa0b5)) by @renovate[bot] -- **deps:** update typescript packages ([d16e13e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d16e13e135e65cfb730bc0d472aa4bc00f5e613c)) by @renovate[bot] -- **deps:** update typescript packages ([c151161](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c1511616138237ff9fb0dc5917936219cfd358be)) by @renovate[bot] -- **deps:** update typescript packages ([#604](https://github.com/LibNyanpasu/clash-nyanpasu/issues/604)) ([06cf427](https://github.com/LibNyanpasu/clash-nyanpasu/commit/06cf4276fb5a89c7917763811f89b02b885cb873)) by @renovate[bot] -- drop unused scss ([12d8026](https://github.com/LibNyanpasu/clash-nyanpasu/commit/12d8026bbd8f76e1206cad269efb7c7c1db7ae9c)) by @keiko233 -- enable devtools in nightly build ([20d4943](https://github.com/LibNyanpasu/clash-nyanpasu/commit/20d4943d3b2b5709a9bfd09a8a7fe1bbec860fb8)) by @greenhat616 -- fix issues template typos ([b395c6f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b395c6f9bd799c78cf8029f72a6ce52eb5314bfa)) by @keiko233 -- fix nsis installer empty dir check ([78b18de](https://github.com/LibNyanpasu/clash-nyanpasu/commit/78b18dec1a3b620749607a80078845c6ec7a4c99)) by @keiko233 -- fix version escape & version get err ([89d5bd7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/89d5bd77e1bd4d506c1c986ef4df5800b21b5932)) by @keiko233 -- **manifest:** update manifest [skip ci] ([b60d680](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b60d680188f35cfb9e5b992b142dec37bca98c30)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([fc6a7af](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fc6a7af628538b09440b36f6df53b8b46ba6ccf8)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([cf1b561](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cf1b561e75efa614c20abcae1e4756d6a4d4aef1)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([7d76a12](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7d76a12430a67e16b8d02943f34e927b48b201e8)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([34c209e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/34c209e31722b9f10edbfc273a60b174b13b11aa)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([08a5319](https://github.com/LibNyanpasu/clash-nyanpasu/commit/08a53194ba033bedea4ca80428271be1541c984d)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([28e40d8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/28e40d8a091effbf80fa6b1e89bc3cd3971cb2bf)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([9ce8b52](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9ce8b5291171235d348955808ca15b9794e7dfec)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([269e396](https://github.com/LibNyanpasu/clash-nyanpasu/commit/269e396d28c01de988a4319bf9a9f6f500042469)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([5d07fa3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5d07fa38e3e4019aa0245554884ec3d2b945b7a2)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([6343984](https://github.com/LibNyanpasu/clash-nyanpasu/commit/63439844d951f21b177b6ef4d4953329eff619db)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([bf8315e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bf8315edc1b423289c8583a721b1c881592b37ee)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([6d47859](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6d47859122ba5ebbea9dff1c508d867f0b313dc6)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([0b4d3a7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0b4d3a75ca044fff5b23e57863ac894824164c06)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([f36e968](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f36e9682f59cad1cc71144fc7b98d186688da3c5)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([d444e87](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d444e87a304c3815b372aedabdb119017de3592e)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([552df74](https://github.com/LibNyanpasu/clash-nyanpasu/commit/552df74c868ddb876498b36f06b63426ca8829fa)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([702aece](https://github.com/LibNyanpasu/clash-nyanpasu/commit/702aece6843911fa0dc9c562b25665ba41248f62)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([860c016](https://github.com/LibNyanpasu/clash-nyanpasu/commit/860c0161a4c41f4b378cd3b797102acbaf946d18)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([08cce9e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/08cce9e0b316cda0749023fd4f1e2a972e0070e7)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([013be16](https://github.com/LibNyanpasu/clash-nyanpasu/commit/013be16db133c42574f8fd0c649219e78736f036)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([a675d97](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a675d97f6b085318420b1c1a14ba7c455596bb2b)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([cf14653](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cf14653b959eeb56b476bd8efd7f323f1fd623ed)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([88ecd5a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/88ecd5a39bdf5e0d1767238dd4e8c717153b5822)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([14ed833](https://github.com/LibNyanpasu/clash-nyanpasu/commit/14ed8338dc5c1b58b6d841ecd1325fa1d7d82b59)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([7dbd1e2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7dbd1e266d22368ae998c6fd5c19f74e6730661a)) by @github-actions[bot] -- **manifest:** update manifest [skip ci] ([68896fe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/68896feb488cf6f69a377f2ea82e245c5de1c5c3)) by @github-actions[bot] -- post tweet when release ([62fe6bc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/62fe6bc01566767ff8872436d2acbaeefecdd1de)) by @keiko233 -- rename copyright ([7772167](https://github.com/LibNyanpasu/clash-nyanpasu/commit/777216762379a6ec5fbcb3812c4db0b317e855ef)) by @keiko233 -- rm global scss dts ([03ecc37](https://github.com/LibNyanpasu/clash-nyanpasu/commit/03ecc379f9f4d5bd64eea60bad88083478b1a5c1)) by @greenhat616 -- send nightly build to telegram channel ([0207ee0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0207ee0603d5300e8463138b29427ece50bbd59c)) by @keiko233 -- update deps ([68e1ad2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/68e1ad264bbd47b42145b351855501525e4af1f8)) by @greenhat616 -- update rust crates ([2768ec9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2768ec949781eb30b943d557791748600bb4b1fb)) by @greenhat616 +- **cmds:** Migrate custom app dir typo (#628) by @greenhat616 in [#628](https://github.com/LibNyanpasu/clash-nyanpasu/pull/628) + +- **cmds:** `path` in changing app dir call (#591) by @greenhat616 in [#591](https://github.com/LibNyanpasu/clash-nyanpasu/pull/591) + +- **docs:** Fix url typos by @keiko233 + +- **notification:** Unexpected `}` (#563) by @WOSHIZHAZHA120 in [#563](https://github.com/LibNyanpasu/clash-nyanpasu/pull/563) + +- Revert previous commit by @greenhat616 + +- Subscription info parse issue, closing #729 by @greenhat616 + +- Fix misinterprete of tauri's application args by @4o3F + +- Missing github repo context by @keiko233 + +- Try to add a launch command to make restart application work by @greenhat616 + +- Try to use delayed singleton check to make restart app work by @greenhat616 + +- Panic while quit application by @greenhat616 + +- Restart application not work by @greenhat616 + +- Fix migration issue for path with space by @4o3F + +- Fix migration child process issue by @4o3F + +- Fix rename permission issue by @4o3F + +- Connection page NaN and first enter animation by @greenhat616 + +- Use shiki intead of shikiji by @greenhat616 + +- Use clash verge rev patch to resolve Content-Disposition Filename issue, closing #703 by @greenhat616 + +- Lint by @greenhat616 + +- Command path by @greenhat616 + +- Draft patch to resolve custom app config migration by @greenhat616 + +- Proxy groups virtuoso also overscan by @keiko233 + +- Top item no padding by @keiko233 + +- Use overscan to prevent blank scrolling by @keiko233 + +- Profiles when drag sort container scroll style by @keiko233 + +- Profile-box border radius value by @keiko233 + +- Slinet start get_window err by @keiko233 + +- MDYSwitch-thumb size by @keiko233 + +- Build by @keiko233 + +- Disable webview2 SwipeNavigation by @keiko233 + +- Fix wrong window size and position by @4o3F + +- Fix single instance check failing on macos by @4o3F ### 📚 Documentation -- add clash-verge-rev acknowledgement ([4c33749](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4c33749dcd9ba97fecff4de56d989a02a61275fb)) by @greenhat616 -- add license img tag ([c0f0797](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c0f0797fa78be3b577d6d03a22f40927e5b09282)) by @keiko233 -- add twitter img tag ([d7bb676](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d7bb676d347e28f2c080bfa2546659ced9d0c90a)) by @keiko233 -- align center tag imgs ([ec77c8c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ec77c8c6b2b5babc0de0ece916254773ecdf830a)) by @keiko233 -- update issues template ([92b6199](https://github.com/LibNyanpasu/clash-nyanpasu/commit/92b6199c47c62354f8284878da975102d5d6e247)) by @greenhat616 -- update readme ([16a3b3d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/16a3b3da926d4f1ad6cd1bef4d44fd39a4968176)) by @keiko233 +- Add clash-verge-rev acknowledgement by @greenhat616 -### 🔨 Refactoring +- Add twitter img tag by @keiko233 -- use lazy load routes to improve performance ([cd06026](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cd060266fcf322b55d0a1c36a22fbdbb3375bc3a)) by @greenhat616 +- Add license img tag by @keiko233 -## [1.5.0](https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.5...v1.5.0) (2024-03-03) +- Align center tag imgs by @keiko233 -### ⚠ BREAKING CHANGES +- Update readme by @keiko233 -- **clash:** add default core secret and impl port checker before clash start (#533) -- **bundler:** remove msi target -- **config:** modify default external-controller port (#436) -- **backend:** add tray proxies selector support (#417) -- **frontend:** migrate to `esm` (#407) +- Update issues template by @greenhat616 + +### 🔨 Refactor + +- Use lazy load routes to improve performance by @greenhat616 + +--- + +## New Contributors + +- @WOSHIZHAZHA120 made their first contribution in [#563](https://github.com/LibNyanpasu/clash-nyanpasu/pull/563) + +**Full Changelog**: https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.5.0...v1.5.1 + +## [1.5.0] - 2024-03-03 + +### 💥 Breaking Changes + +- **backend:** Add tray proxies selector support (#417) by @greenhat616 in [#417](https://github.com/LibNyanpasu/clash-nyanpasu/pull/417) + +- **clash:** Add default core secret and impl port checker before clash start (#533) by @greenhat616 in [#533](https://github.com/LibNyanpasu/clash-nyanpasu/pull/533) ### ✨ Features -- add Auto Check Updates Switch ([a17510a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a17510a84c495d24d227f663ba1e8932f3309703)) by @ -- add margin for SettingItem extra element ([fa1dcdd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fa1dcdd42b7a0e1108b3850958074af061a3771d)) by @ -- add MDYSwitch & replace all Switches with MDYSwitch ([0c86b80](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0c86b807ccd4ffc0782b74cd0297b5366074790a)) by @ -- add useMessage hook ([1da9951](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1da9951edc47911ff3b8b4bb7ea56aefbe0bbf24)) by @ -- **backend:** add tray proxies selector support ([#417](https://github.com/LibNyanpasu/clash-nyanpasu/issues/417)) ([17f9319](https://github.com/LibNyanpasu/clash-nyanpasu/commit/17f931963aff892434287c27e532b9b1dc83e202)) by @ -- **clash:** add default core secret and impl port checker before clash start ([#533](https://github.com/LibNyanpasu/clash-nyanpasu/issues/533)) ([29c1d9c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/29c1d9c0473564423a2c92e32f68a630d583fb52)) by @ -- color select use MuiColorInput ([6ade58c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6ade58cacc1beca25c82172ea70ff4fd84de0193)) by @ -- **config:** add migration for old config dir ([#419](https://github.com/LibNyanpasu/clash-nyanpasu/issues/419)) ([4688334](https://github.com/LibNyanpasu/clash-nyanpasu/commit/468833467f8bee72903a5b9e1d1eeba858348b33)) by @ -- **connection:** allow filter out process name ([d277e47](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d277e477dfeb3faac9c07bd289d8e71d7d4df1cf)) by @ -- custom schema support ([#516](https://github.com/LibNyanpasu/clash-nyanpasu/issues/516)) ([24617aa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/24617aa8f364161f6f38b27a7c87e9ee68af6f93)) by @ -- **locale:** use system locale as default ([#437](https://github.com/LibNyanpasu/clash-nyanpasu/issues/437)) ([331996a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/331996a1f3269d145803b1d03ef4d6e018e9b335)) by @ -- make profile material you ([5be21a9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5be21a9d76f6d277f9725445f49333f3e6e534d1)) by @ -- MDYSwitch support loading prop ([a48aa09](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a48aa09475bcf3722df7b0d50e22766ca30337fd)) by @ -- new style design profile item drag sort ([3745d4b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3745d4bf0c13ecf1cfce257316dace7e7d1abf4e)) by @ -- onCheckUpdate button supports loading animation & refactoring error removal notification using dialog ([9f0afb7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9f0afb78ad67f705b58c51b70f5f542ac40f8349)) by @ -- refactor GuardStatus & support loading status ([f2a08d9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f2a08d90cb784405d83a600af7c2fe95a07067f4)) by @ -- refactor UpdateViewer ([94fff23](https://github.com/LibNyanpasu/clash-nyanpasu/commit/94fff23a2278c8b42ab28aad3c12e96c1477b734)) by @ -- **tray:** add diff check for system tray partial update ([#477](https://github.com/LibNyanpasu/clash-nyanpasu/issues/477)) ([0e38ee9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0e38ee929ba669842ef88ed6a8b14a115115f6cc)) by @ -- **tray:** add tray icon resize logic to improve icon rendering ([#540](https://github.com/LibNyanpasu/clash-nyanpasu/issues/540)) ([9f4bd55](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9f4bd5564d28e646f51c22f1f2cf52d6fc7a46d4)) by @ +- **config:** Add migration for old config dir (#419) by @4o3F in [#419](https://github.com/LibNyanpasu/clash-nyanpasu/pull/419) + +- **connection:** Allow filter out process name by @greenhat616 + +- **locale:** Use system locale as default (#437) by @greenhat616 in [#437](https://github.com/LibNyanpasu/clash-nyanpasu/pull/437) + +- **tray:** Add tray icon resize logic to improve icon rendering (#540) by @greenhat616 in [#540](https://github.com/LibNyanpasu/clash-nyanpasu/pull/540) + +- **tray:** Add diff check for system tray partial update (#477) by @4o3F in [#477](https://github.com/LibNyanpasu/clash-nyanpasu/pull/477) + +- Custom schema support (#516) by @4o3F in [#516](https://github.com/LibNyanpasu/clash-nyanpasu/pull/516) + +- Add Auto Check Updates Switch by @keiko233 + +- Refactor UpdateViewer by @keiko233 + +- OnCheckUpdate button supports loading animation & refactoring error removal notification using dialog by @keiko233 + +- Add margin for SettingItem extra element by @keiko233 + +- Add useMessage hook by @keiko233 + +- Refactor GuardStatus & support loading status by @keiko233 + +- MDYSwitch support loading prop by @keiko233 + +- Add MDYSwitch & replace all Switches with MDYSwitch by @keiko233 + +- Color select use MuiColorInput by @keiko233 + +- Make profile material you by @keiko233 + +- New style design profile item drag sort by @keiko233 ### 🐛 Bug Fixes -- build issue ([d68b0be](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d68b0be688ebc9ffb8afc4e996f90c4157840e23)) by @ -- ci ([83d8bf4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/83d8bf467145285a100d65c345c61123ac825ee8)) by @ -- **ci:** replace github workflow token ([5bf4775](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5bf47755ac71a4fbe2dc8ca69776c82962982f25)) by @ -- config migration issue ([5772101](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5772101b630d8a3835253b94f7dbf3e2bd1783a5)) by @ -- **config:** fix config migration ([#433](https://github.com/LibNyanpasu/clash-nyanpasu/issues/433)) ([ecfd51a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ecfd51adcfb8880ea0bac413c6eec7b8f0232f08)) by @ -- **custom-schema:** fix schema not working for new opening and dialog not showing with certain route ([#534](https://github.com/LibNyanpasu/clash-nyanpasu/issues/534)) ([f8e58f1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f8e58f1cac58525dacfa35199e0a0be91f3a1a88)) by @ -- **deps:** pin dependency mui-color-input to 2.0.3 ([#473](https://github.com/LibNyanpasu/clash-nyanpasu/issues/473)) ([a7b6c0a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a7b6c0a10345b6c3481d027bf87d9809039f0142)) by @ -- **deps:** pin dependency react-markdown to 9.0.1 ([46d33a0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/46d33a052c6b2cd123f5be44838e7f4d47700053)) by @ -- **deps:** update dependency @emotion/react to v11.11.4 ([233a709](https://github.com/LibNyanpasu/clash-nyanpasu/commit/233a709852f1e53b6b078e2cb1f394215445340a)) by @ -- **deps:** update dependency @mui/x-data-grid to v6.19.4 ([bb04958](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bb0495800075fff571d3c8593f45f7ddb3146b05)) by @ -- **deps:** update dependency @mui/x-data-grid to v6.19.5 ([#476](https://github.com/LibNyanpasu/clash-nyanpasu/issues/476)) ([b9da95f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b9da95f871f0c7ffd3ec7f8c6a2cf740f79c57ef)) by @ -- **deps:** update dependency @mui/x-data-grid to v6.19.6 ([6ad5149](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6ad5149ad2d8b243789945a4734f925fac3039e0)) by @ -- **deps:** update dependency framer-motion to v11.0.4 ([#427](https://github.com/LibNyanpasu/clash-nyanpasu/issues/427)) ([dce4267](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dce42670716ec201c08d21629693559fa065118b)) by @ -- **deps:** update dependency framer-motion to v11.0.5 ([#429](https://github.com/LibNyanpasu/clash-nyanpasu/issues/429)) ([5ac56ef](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5ac56efbe842f09cacfd6a7e34cc0013eacde97e)) by @ -- **deps:** update dependency framer-motion to v11.0.6 ([#475](https://github.com/LibNyanpasu/clash-nyanpasu/issues/475)) ([7a0719c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7a0719cc3ea1926deb768ee1c1f2047d1f0d93db)) by @ -- **deps:** update dependency framer-motion to v11.0.7 ([d7a097c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d7a097c15640e20ad94ef0d4342891844ad67bbe)) by @ -- **deps:** update dependency framer-motion to v11.0.8 ([511af58](https://github.com/LibNyanpasu/clash-nyanpasu/commit/511af5885558da7c08cca025703b276c147e4c86)) by @ -- **deps:** update dependency i18next to v23.10.0 ([#471](https://github.com/LibNyanpasu/clash-nyanpasu/issues/471)) ([63bb5ea](https://github.com/LibNyanpasu/clash-nyanpasu/commit/63bb5ea38446010b374ab4f0179cbacba271eebf)) by @ -- **deps:** update dependency i18next to v23.8.3 ([2f25bc7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2f25bc746f20e4bb880c350f3a7d0d3ed1deae15)) by @ -- **deps:** update dependency i18next to v23.9.0 ([2a19c35](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2a19c3598dd9884be7db0eb4bc02518fc5dc855f)) by @ -- **deps:** update dependency monaco-editor to v0.46.0 ([#405](https://github.com/LibNyanpasu/clash-nyanpasu/issues/405)) ([a85d462](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a85d4626eae392c88beb97d7d98dba03cac50579)) by @ -- **deps:** update dependency react-error-boundary to v4.0.13 ([#529](https://github.com/LibNyanpasu/clash-nyanpasu/issues/529)) ([7d72707](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7d727074ca852737a0299d0cce21ebcd716c4b36)) by @ -- **deps:** update dependency react-hook-form to v7.51.0 ([0cce088](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0cce088f3c9ee4fe0f1c946ee843d09c27d220b9)) by @ -- **deps:** update dependency react-router-dom to v6.22.1 ([b72d9ad](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b72d9ad0ca4cbe10f3c945aafb4458589b23fe30)) by @ -- **deps:** update dependency react-router-dom to v6.22.2 ([0cee569](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0cee569792dfb3455af121ee520785460e22999c)) by @ -- **deps:** update dependency react-virtuoso to v4.7.0 ([c537b56](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c537b56067d4618e3625a8386c0e851a36116ffc)) by @ -- **deps:** update dependency react-virtuoso to v4.7.1 ([#480](https://github.com/LibNyanpasu/clash-nyanpasu/issues/480)) ([277920f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/277920ff2ae1733a8297348cd6e662ef5a42cdb5)) by @ -- **deps:** update dependency swr to v2.2.5 ([c40e78b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c40e78bf7ebf37a587682bed076050bf4df213db)) by @ -- **deps:** update material-ui monorepo ([dfa2059](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dfa2059c8393f559128314b35844885feeeff484)) by @ -- **deps:** update material-ui monorepo ([6c4e349](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6c4e3492b911aac1bcf6041d5486b5f042aea925)) by @ -- **deps:** update material-ui monorepo to v5.15.10 ([8b8ee13](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8b8ee1351c2c5c03b0b92491b5a549af7e8f2021)) by @ -- **deps:** update rust crate anyhow to v1.0.80 ([ca84032](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ca84032637e7941f0a9b47182c536af3691a123a)) by @ -- **deps:** update rust crate base64 to 0.22 ([b981d5f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b981d5f849b6c1eee716a7d2a37589bd35bb09d3)) by @ -- **deps:** update rust crate chrono to v0.4.34 ([#418](https://github.com/LibNyanpasu/clash-nyanpasu/issues/418)) ([eee6b46](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eee6b46da3a9aa61a769a2cf6ce5afef7567a769)) by @ -- **deps:** update rust crate dyn-clone to v1.0.17 ([22ec542](https://github.com/LibNyanpasu/clash-nyanpasu/commit/22ec542b9dc18dec4918f40038dc99fa3ac97b27)) by @ -- **deps:** update rust crate indexmap to v2.2.4 ([aae5cc2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aae5cc25aef13bd0ccc684e2792f873a7d55b955)) by @ -- **deps:** update rust crate indexmap to v2.2.5 ([#527](https://github.com/LibNyanpasu/clash-nyanpasu/issues/527)) ([02a2b28](https://github.com/LibNyanpasu/clash-nyanpasu/commit/02a2b28995af0ea79720628c7ed80fcb1ffb96a7)) by @ -- **deps:** update rust crate log to v0.4.21 ([d30887c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d30887c9a3e8afeb416dd4eff3c534c57ed29567)) by @ -- **deps:** update rust crate log4rs to v1.3.0 ([#416](https://github.com/LibNyanpasu/clash-nyanpasu/issues/416)) ([cd138f8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cd138f8baab01e6c2151905a6399412f6aee09a5)) by @ -- **deps:** update rust crate objc2 to 0.5.0 ([#528](https://github.com/LibNyanpasu/clash-nyanpasu/issues/528)) ([2d0302d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2d0302df21f33fc58e23462b7d51f8f71c35016a)) by @ -- **deps:** update rust crate open to v5.0.2 ([8b7bc08](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8b7bc08e94a9be2a5273a6f385f905bf9bcbf49e)) by @ -- **deps:** update rust crate open to v5.1.0 ([1c054f6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1c054f6bce6dc65feb9e08a73245dfd172ca22d4)) by @ -- **deps:** update rust crate open to v5.1.1 ([#542](https://github.com/LibNyanpasu/clash-nyanpasu/issues/542)) ([3c06936](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3c0693684880860f11be92d1ae60423f6aa09b2b)) by @ -- **deps:** update rust crate rocksdb to 0.22 ([#428](https://github.com/LibNyanpasu/clash-nyanpasu/issues/428)) ([55bbd12](https://github.com/LibNyanpasu/clash-nyanpasu/commit/55bbd125a20acb687083dfba664ef7e2cbae1819)) by @ -- **deps:** update rust crate rquickjs to 0.5.0 ([d0ebebc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d0ebebc1c4827ccb9e152003b85862fbdb8c4560)) by @ -- **deps:** update rust crate rquickjs to v0.5.1 ([#469](https://github.com/LibNyanpasu/clash-nyanpasu/issues/469)) ([72b439b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/72b439bfe4bf9b7c2392bbdd4740099419dee7ac)) by @ -- **deps:** update rust crate runas to v1.2.0 ([#465](https://github.com/LibNyanpasu/clash-nyanpasu/issues/465)) ([2fd4dd1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2fd4dd1d64156a5b500bd092f888a71ed6dfe093)) by @ -- **deps:** update rust crate semver to v1.0.22 ([#456](https://github.com/LibNyanpasu/clash-nyanpasu/issues/456)) ([40f80cb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/40f80cb41054203d8a36245e591a2e6f4465086f)) by @ -- **deps:** update rust crate serde_json to v1.0.114 ([#462](https://github.com/LibNyanpasu/clash-nyanpasu/issues/462)) ([eeea0ee](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eeea0eefd128c35aa6a49332c89daa7bf18c73b3)) by @ -- **deps:** update rust crate serde_yaml to v0.9.32 ([#457](https://github.com/LibNyanpasu/clash-nyanpasu/issues/457)) ([6d77854](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6d778545bdc6d63be5bc24d5dbebf7c4c596eec7)) by @ -- **deps:** update rust crate sysinfo to v0.30.6 ([db6a3c4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/db6a3c4c6021405cff47289555e543f8481ddb68)) by @ -- **deps:** update rust crate tauri to v1.6.0 ([1b17c6c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1b17c6c4c7058d2d6d3cd8c16b6593308e30d80e)) by @ -- **deps:** update rust crate tauri to v1.6.1 ([#504](https://github.com/LibNyanpasu/clash-nyanpasu/issues/504)) ([9cdd5aa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9cdd5aae0aefae8e9435c2ee5a944255cbe5335d)) by @ -- **deps:** update rust crate tempfile to v3.10.1 ([ea90044](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ea9004488968f048c102156405d69a53cb5e3a98)) by @ -- **deps:** update rust crates ([1a75f5f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1a75f5f7615f01c0df6f7c40bcfd7d15147b4bed)) by @ -- fix wrong window position and size with multiple screen ([6a3acb3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6a3acb3225ddf600497edeec8871e957bbda2f05)) by @ -- fmt ([c33c552](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c33c5527a49517bee6a9dc673a9d2fea14e2d9cf)) by @ -- layout error when window width is small ([3fd4619](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3fd461922344264f5debfc74e6a508248bc7591c)) by @ -- line breaks typos ([e3aa529](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e3aa529fef36227ffafef14c9d24ee99bc592cee)) by @ -- lint ([978872b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/978872b3b8895057d2858ba5119ff2f1026b9775)) by @ -- lint ([3169708](https://github.com/LibNyanpasu/clash-nyanpasu/commit/316970899d41fab79cb839f005bdfe82c81672bb)) by @ -- **macos:** use rfd to prevent panic ([f0aa74d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f0aa74d9fd3cd2046cbe045553903e28c5f4e485)) by @ -- MDYSwitch switchBase padding value ([5482861](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5482861055118a27c67382c3b64200032976ab08)) by @ -- media screen value typos ([bf6c1b3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bf6c1b3f86a807a205cece0429ba2b3501132fe7)) by @ -- **nsis:** should not stop verge service while updating ([36abd6f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/36abd6fed84d16b1b6d92a7e28ca6f314f794f72)) by @ -- **proxies:** reduce tray updating interval ([13b8dac](https://github.com/LibNyanpasu/clash-nyanpasu/commit/13b8dac4a8b0002a48c13ee986a60bc5705cb7b4)) by @ -- **proxies:** use indexmap instead to correct order ([e0db001](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e0db0015f21f3e1a36ac8e9cb18ea2076841ae3b)) by @ -- proxy item box-shadow err ([ad8b2a0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ad8b2a004a1faade6842612ba19da7c90d181110)) by @ -- release ci ([33e4087](https://github.com/LibNyanpasu/clash-nyanpasu/commit/33e4087eddac946d396745821c7e1a6cc9477ea1)) by @ -- release ci ([71503a4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/71503a4aa631601870c8b031bda78ed772437ccd)) by @ -- resolve save windows state event ([80fd7dd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/80fd7ddc57dc28caddbfaa57d0910751e8fd8bae)) by @ -- **tray:** proxies updating deadlock ([9ae958e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9ae958e42ea135842f041259407ac09559b60dd7)) by @ -- **tray:** should disable click expect Selector and Fallback type ([f61ba52](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f61ba52a2d200c248795cfcebda49d394a12bf69)) by @ -- **tray:** use base64 encoded id to fix item not found issue ([46a91db](https://github.com/LibNyanpasu/clash-nyanpasu/commit/46a91db394a9daebbf2ee3553695512e903654f4)) by @ +- **ci:** Replace github workflow token by @keiko233 -### 🧹 Maintenance +- **config:** Fix config migration (#433) by @4o3F in [#433](https://github.com/LibNyanpasu/clash-nyanpasu/pull/433) -- **bundler:** drop console and debugger in prod ([ef9673b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ef9673bac3321879a3fa56697182d4f71587a911)) by @ -- **bundler:** remove msi target ([c63d846](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c63d8463b0810ee46c96ada4fd5f40e093928fab)) by @ -- **config:** modify default external-controller port ([#436](https://github.com/LibNyanpasu/clash-nyanpasu/issues/436)) ([0ac8ca8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0ac8ca89885feef393bae0a16de1fa7895f89443)) by @ -- **deps:** pin dependency @types/node to 20.11.21 ([755cff8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/755cff8fd6c4283042adace7c853ae1bb8fa7ce2)) by @ -- **deps:** pin dependency telegraf to 4.15.3 ([#446](https://github.com/LibNyanpasu/clash-nyanpasu/issues/446)) ([3ddd7b8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3ddd7b80025a7d7cae82143548994286a9add60a)) by @ -- **deps:** update dependency @commitlint/cli to v19.0.1 ([d8ea303](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d8ea3031dc5923849fbf5dc89e0f9c237bd4c4b5)) by @ -- **deps:** update dependency @commitlint/config-conventional to v18.6.2 ([e1597c7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e1597c7a234e491f0bed9a9830ebe93ea8f133d5)) by @ -- **deps:** update dependency @tauri-apps/cli to v1.5.10 ([522e7bf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/522e7bf8ed7fd6def7329e7d6234a2ad776850c1)) by @ -- **deps:** update dependency @types/node to v20.11.22 ([805dc92](https://github.com/LibNyanpasu/clash-nyanpasu/commit/805dc92bf7d0f3c74026a3abc481024f7a3ac119)) by @ -- **deps:** update dependency @types/node to v20.11.24 ([#525](https://github.com/LibNyanpasu/clash-nyanpasu/issues/525)) ([e30f3ec](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e30f3ec25c36bc06e52464714536985321fe897d)) by @ -- **deps:** update dependency @types/react to v18.2.56 ([e4c5b17](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e4c5b1752f2e04d6393a9857a9a9d39bde0e7711)) by @ -- **deps:** update dependency @types/react to v18.2.57 ([968bf60](https://github.com/LibNyanpasu/clash-nyanpasu/commit/968bf60443f4772989c3133cbd25f8f48beabb19)) by @ -- **deps:** update dependency @types/react to v18.2.58 ([f297ac1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f297ac1c40783045363d192bdd5b727e9eef98d1)) by @ -- **deps:** update dependency @types/react to v18.2.59 ([4a816d7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4a816d75cb00b94caff4824b16917d7f044d6427)) by @ -- **deps:** update dependency @types/react to v18.2.60 ([8f97457](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8f974573e957ce946f62519895bbc90120c23d86)) by @ -- **deps:** update dependency autoprefixer to v10.4.18 ([5cd3cde](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5cd3cded24a62ee58a808bb8e95140ba91d5ec18)) by @ -- **deps:** update dependency eslint to v8.57.0 ([73f9b73](https://github.com/LibNyanpasu/clash-nyanpasu/commit/73f9b734b12697b8ac359b8fdda95f79083279fc)) by @ -- **deps:** update dependency eslint-plugin-html to v8 ([#413](https://github.com/LibNyanpasu/clash-nyanpasu/issues/413)) ([fecf28f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fecf28f7cbb12871d221b36bcdc8830200558bb8)) by @ -- **deps:** update dependency https-proxy-agent to v7.0.3 ([4efd512](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4efd512ff9dafce3d4d50809d52f3c74e71449f8)) by @ -- **deps:** update dependency https-proxy-agent to v7.0.4 ([cc9537e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cc9537e4bb6cf4e0369479d9f5eee8058b672b8b)) by @ -- **deps:** update dependency husky to v9.0.11 ([9755aee](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9755aee92123f37e3ef61ea3935ae917b13b86b8)) by @ -- **deps:** update dependency postcss-import to v16.0.1 ([4586801](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4586801216f9e79b57fcfadfda7f3de582d09d7a)) by @ -- **deps:** update dependency sass to v1.71.0 ([7385e5d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7385e5de1a6ef15b9db6f7e2e92c925c4e3158a8)) by @ -- **deps:** update dependency sass to v1.71.1 ([#466](https://github.com/LibNyanpasu/clash-nyanpasu/issues/466)) ([30f7aac](https://github.com/LibNyanpasu/clash-nyanpasu/commit/30f7aac24997702586e7097d26a09317ca3879f9)) by @ -- **deps:** update dependency telegraf to v4.16.0 ([5a51834](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5a5183464d006d2ac04a7414e4fbf3058af1ded2)) by @ -- **deps:** update dependency telegraf to v4.16.1 ([acbbe8b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/acbbe8b2cf48abca51450aae58eca4e05063cb10)) by @ -- **deps:** update dependency telegraf to v4.16.2 ([8614088](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8614088b7e480cf3f8fd6ffc8632155d6ff5fd2c)) by @ -- **deps:** update dependency telegraf to v4.16.3 ([4bddfde](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4bddfde12bfc54495f536206392871d83d620a8e)) by @ -- **deps:** update dependency tsx to v4.7.1 ([42a3ce8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/42a3ce8d39a232282a0d52b02ce30313cf89e8cb)) by @ -- **deps:** update dependency vite to v5.1.0 ([#404](https://github.com/LibNyanpasu/clash-nyanpasu/issues/404)) ([5fcbd43](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5fcbd43c84bd0fe6ab4bd0767d98f7b3c42a821c)) by @ -- **deps:** update dependency vite to v5.1.1 ([7b100b8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7b100b868a1b5899276d9bf3aa547593539da612)) by @ -- **deps:** update dependency vite to v5.1.2 ([f8bd9bd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f8bd9bdfec5704224ae92e1c0dfc6fe819931c48)) by @ -- **deps:** update dependency vite to v5.1.3 ([79aef4c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/79aef4c3889f901664b64ae5cfd18048cd8d66af)) by @ -- **deps:** update dependency vite to v5.1.4 ([#467](https://github.com/LibNyanpasu/clash-nyanpasu/issues/467)) ([a3c5f9e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a3c5f9ededf59f73116759e87f93987869b70b3e)) by @ -- **deps:** update lint packages to v18.6.1 ([83c166f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/83c166f4bc8c9a6b9fb523281d87af57680add65)) by @ -- **deps:** update lint packages to v19 ([#498](https://github.com/LibNyanpasu/clash-nyanpasu/issues/498)) ([67cfe88](https://github.com/LibNyanpasu/clash-nyanpasu/commit/67cfe889ee8404f031bc64c8cffa111800228b9f)) by @ -- **deps:** update lint packages to v19.0.3 ([2ce75a8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2ce75a8b663bf828a2dd9bd82d2c54f3355b35c7)) by @ -- **deps:** update lint packages to v7 ([#423](https://github.com/LibNyanpasu/clash-nyanpasu/issues/423)) ([8e15824](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8e158246b29acee50c68a4bb50ef81af642dd95e)) by @ -- **deps:** update lint packages to v7.0.2 ([9d7e93f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9d7e93fa6114c94a47f9a69509534c268ee2da6c)) by @ -- **deps:** update lint packages to v7.1.0 ([9529dbf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9529dbfadda37e9ea10ac1f84d6a098639979f9d)) by @ -- **deps:** update orhun/git-cliff-action action to v3 ([#530](https://github.com/LibNyanpasu/clash-nyanpasu/issues/530)) ([69b7b99](https://github.com/LibNyanpasu/clash-nyanpasu/commit/69b7b999e87cc14596a532609f2c69a31173f7d2)) by @ -- **deps:** update rust crate serde to v1.0.197 ([e9b5303](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e9b53032846a2b4e972d44d3e2acc21fbaa5f52f)) by @ -- **deps:** update rust crate thiserror to v1.0.57 ([#420](https://github.com/LibNyanpasu/clash-nyanpasu/issues/420)) ([7a483b9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7a483b9afe71ecc88ca9ceec5abd1ad3cd3653e6)) by @ -- **deps:** update typescript packages ([4aa830b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4aa830be15d83880990a50ab2e284bcd847d6cb8)) by @ -- **fix!:** import missing dependencies ([eca7b78](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eca7b7854025c64fe32e477e51af00c0907dd7e0)) by @ -- **frontend:** migrate to `esm` ([#407](https://github.com/LibNyanpasu/clash-nyanpasu/issues/407)) ([472bba8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/472bba8f8c70ac20ade0a8f9949a7a87842b4c36)) by @ -- **manifest:** update manifest [skip ci] ([cf61d23](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cf61d239dd6285742c421b4f848101f88da15ad3)) by @ -- **manifest:** update manifest [skip ci] ([e932205](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e932205513aa25d017dbc6ef24358861ae430bb6)) by @ -- **manifest:** update manifest [skip ci] ([0bb2ad3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0bb2ad395e709d2482f4c9a5d39f425a3d3a560e)) by @ -- **manifest:** update manifest [skip ci] ([33c28db](https://github.com/LibNyanpasu/clash-nyanpasu/commit/33c28db6de0119190e1dcb1fe92506d6953042e2)) by @ -- **manifest:** update manifest [skip ci] ([064ca02](https://github.com/LibNyanpasu/clash-nyanpasu/commit/064ca02847d31cc2621c6d4121f800474091f5a4)) by @ -- **manifest:** update manifest [skip ci] ([9c65dde](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9c65ddef9bb9b0b4c7342786268ccc5665099d26)) by @ -- **manifest:** update manifest [skip ci] ([d4d9ba6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d4d9ba63730f6949efd29b6e9ef699938949c1d8)) by @ -- **manifest:** update manifest [skip ci] ([5a80b40](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5a80b409d162565c1c21aebd0f758a185f68e237)) by @ -- **manifest:** update manifest [skip ci] ([76bbd23](https://github.com/LibNyanpasu/clash-nyanpasu/commit/76bbd23bcc40a69596b0cb8bec64c6feb2e254b3)) by @ -- **manifest:** update manifest [skip ci] ([dad2441](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dad244144ef442671c4f600ca23f4921c78b8348)) by @ -- **manifest:** update manifest [skip ci] ([6939399](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6939399cd9f9333a27304b3ca8eabc94a7d811e8)) by @ -- **release:** v1.5.0 🤖 [skip ci] ([0a915bf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0a915bf96a86ed61f5ed5034632c0b8c620747f1)) by @ -- remove console and debugger when not in dev mode ([d884426](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d8844269c4c57b708204c1df44aae1ab03d58888)) by @ -- send release notify to telegram channel ([e66e38e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e66e38e5b5e59d5e643f4d14cc2c6ceec05654c5)) by @ -- update deps ([3743406](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3743406eb975b69f3827f37e507f628ae4af762d)) by @ -- update deps ([aca1ef5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aca1ef57bbd2a7c0bae06ab60045a426aad41f41)) by @ -- use debug as default app log level when debugging ([e6b3356](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e6b33568b6faf71e22a79cdb6fd3bab9b3f3ade4)) by @ +- **custom-schema:** Fix schema not working for new opening and dialog not showing with certain route (#534) by @4o3F in [#534](https://github.com/LibNyanpasu/clash-nyanpasu/pull/534) -### 🔨 Refactoring +- **deps:** Update rust crates by @greenhat616 -- **clash:** move api and core manager into one mod ([#411](https://github.com/LibNyanpasu/clash-nyanpasu/issues/411)) ([6720ac1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6720ac16c9cc5efd338cb0b203f354bb2782059c)) by @ -- **i18n:** change backend localization to rust-i18n ([#425](https://github.com/LibNyanpasu/clash-nyanpasu/issues/425)) ([f7296db](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f7296dbd51e3a7dcb309519406f6a0fa41704ad6)) by @ -- **logging:** use `tracing` instead of `log4rs` ([#486](https://github.com/LibNyanpasu/clash-nyanpasu/issues/486)) ([791baa5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/791baa56cc4688da3dce51e4791f43de339e840c)) by @ -- **proxies:** proxies hash and diff logic ([483335d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/483335df5c8665ee5e6d9e6da688355c04c37621)) by @ -- **single-instance:** refactor single instance check ([#499](https://github.com/LibNyanpasu/clash-nyanpasu/issues/499)) ([11d7241](https://github.com/LibNyanpasu/clash-nyanpasu/commit/11d7241ae8af0e85d6e7c80c35f36839159b2378)) by @ +- **macos:** Use rfd to prevent panic by @greenhat616 -## [1.4.5](https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.4...v1.4.5) (2024-02-08) +- **nsis:** Should not stop verge service while updating by @greenhat616 -### ⚠ BREAKING CHANGES +- **proxies:** Use indexmap instead to correct order by @greenhat616 -- **updater:** use nsis instead of msi -- **nsis:** switch to both installMode +- **proxies:** Reduce tray updating interval by @greenhat616 -### ✨ Features +- **tray:** Use base64 encoded id to fix item not found issue by @greenhat616 -- **nsis:** switch to both installMode ([ce3c138](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ce3c1388a5d09bb677f63e99efef300c932ee79f)) by @ -- **updater:** use nsis instead of msi ([c0cde77](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c0cde77ef3dc356639deb855ef8b8e9916abd026)) by @ +- **tray:** Should disable click expect Selector and Fallback type by @greenhat616 + +- **tray:** Proxies updating deadlock by @greenhat616 + +- Release ci by @greenhat616 + +- Release ci by @greenhat616 + +- Fix wrong window position and size with multiple screen by @4o3F + +- Resolve save windows state event by @greenhat616 + +- Media screen value typos by @keiko233 + +- Layout error when window width is small by @keiko233 + +- Lint by @greenhat616 + +- Line breaks typos by @keiko233 + +- MDYSwitch switchBase padding value by @keiko233 + +- Lint by @greenhat616 + +- Fmt by @greenhat616 + +- Build issue by @greenhat616 + +- Config migration issue by @greenhat616 + +- Ci by @greenhat616 + +- Proxy item box-shadow err by @keiko233 + +### 🔨 Refactor + +- **clash:** Move api and core manager into one mod (#411) by @greenhat616 in [#411](https://github.com/LibNyanpasu/clash-nyanpasu/pull/411) + +- **i18n:** Change backend localization to rust-i18n (#425) by @4o3F in [#425](https://github.com/LibNyanpasu/clash-nyanpasu/pull/425) + +- **logging:** Use `tracing` instead of `log4rs` (#486) by @greenhat616 in [#486](https://github.com/LibNyanpasu/clash-nyanpasu/pull/486) + +- **proxies:** Proxies hash and diff logic by @greenhat616 + +- **single-instance:** Refactor single instance check (#499) by @4o3F in [#499](https://github.com/LibNyanpasu/clash-nyanpasu/pull/499) + +--- + +**Full Changelog**: https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.5...v1.5.0 + +## [1.4.5] - 2024-02-08 + +### 💥 Breaking Changes + +- **nsis:** Switch to both installMode by @greenhat616 + +- **updater:** Use nsis instead of msi by @greenhat616 ### 🐛 Bug Fixes -- **bundle:** instance is running while updating app ([#393](https://github.com/LibNyanpasu/clash-nyanpasu/issues/393)) ([7cb2b5c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7cb2b5ce26338db79aa217e306bae0d917cae51e)) by @ -- **bundler:** kill processes while updating in windows ([cffd388](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cffd3887dd53d92f392a461083f12fee3150b02a)), closes [#397](https://github.com/LibNyanpasu/clash-nyanpasu/issues/397) by @ -- **ci:** daily updater issue ([#392](https://github.com/LibNyanpasu/clash-nyanpasu/issues/392)) ([c6017cc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c6017cc89931e60b95b0c98e794630124100b067)) by @ -- **ci:** nightly updater issue ([4a05f77](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4a05f770562f8ee57df4cd5bbb741593fdeaa9df)) by @ -- **deps:** update dependency @mui/x-data-grid to v6.19.3 ([c75cac4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c75cac41062f0e1d623b4eeb006c9f70a4c9c414)) by @ -- **deps:** update dependency ahooks to v3.7.10 ([a8635d5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a8635d56f758e59c74170cdd1fdcd209b3f98dcb)) by @ -- **deps:** update dependency i18next to v23.8.2 ([6506e28](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6506e289f1fb1610057c2042911095ea6aa10ce0)) by @ -- **deps:** update dependency react-hook-form to v7.50.0 ([909afdf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/909afdfafc56c53e4b0b151d84f253db20be77f9)) by @ -- **deps:** update dependency react-hook-form to v7.50.1 ([#387](https://github.com/LibNyanpasu/clash-nyanpasu/issues/387)) ([10505fa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/10505fa1dd01c77aa83c0c0afa94f238bbb03190)) by @ -- **deps:** update dependency react-i18next to v14.0.2 ([78765a0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/78765a06ff7343092c70aa37b2367940c658444a)) by @ -- **deps:** update dependency react-i18next to v14.0.3 ([b1e22f7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b1e22f70913984c8590b0ff6e633c1321cbd6306)) by @ -- **deps:** update dependency react-i18next to v14.0.4 ([3b3083c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3b3083c4b30c226bea0a9ed28dec0b2d4fc21831)) by @ -- **deps:** update dependency react-i18next to v14.0.5 ([9841f26](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9841f26678b3f2edb894fd47eaca04fe393d90c4)) by @ -- **deps:** update dependency react-router-dom to v6.22.0 ([f7ce206](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f7ce206209746bfa85f4e28cd06f4b969152652a)) by @ -- **deps:** update material-ui monorepo ([98bb347](https://github.com/LibNyanpasu/clash-nyanpasu/commit/98bb3479ac5035726eb9a746d72a1cb8f8e95c13)) by @ -- **deps:** update material-ui monorepo ([260f539](https://github.com/LibNyanpasu/clash-nyanpasu/commit/260f539a614338e59a1559da56a9f1678e9ca00b)) by @ -- **deps:** update rust crate reqwest to v0.11.24 ([08f6abc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/08f6abc6954025f92383673e30c63eedd647a843)) by @ -- **deps:** update rust crate rquickjs to v0.4.3 ([d6f6a30](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d6f6a30c678d0cdc82bf6701971bc88cefad9575)) by @ -- **deps:** update rust crate tempfile to v3.10.0 ([cb80a1e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cb80a1ecb0189d35799580b296f43b8712987dc8)) by @ -- **deps:** update rust crate tokio to v1.36.0 ([5036611](https://github.com/LibNyanpasu/clash-nyanpasu/commit/503661141afae5d6332c9dec124072dac76f2cd5)) by @ -- **deps:** update rust crate window-vibrancy to 0.5.0 ([#401](https://github.com/LibNyanpasu/clash-nyanpasu/issues/401)) ([ddce748](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ddce74884bff3f7dc68f086500b0ef4562223d79)) by @ -- minimize icon is wrong while resize window ([#394](https://github.com/LibNyanpasu/clash-nyanpasu/issues/394)) ([3517d87](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3517d87e63b31aaf6caaccb2d941092cb786e009)) by @ -- **nsis:** kill nyanpasu processes while updating ([#403](https://github.com/LibNyanpasu/clash-nyanpasu/issues/403)) ([40ae424](https://github.com/LibNyanpasu/clash-nyanpasu/commit/40ae424042565aefa9f0ad8976025d67379bb5a8)) by @ -- portable issues ([#395](https://github.com/LibNyanpasu/clash-nyanpasu/issues/395)) ([b249ba9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b249ba9c2b342cd28c59b561397766d849135492)) by @ -- resources missing ([52e0760](https://github.com/LibNyanpasu/clash-nyanpasu/commit/52e07601cbf1420dc72b3d4716cb49f5f648383a)) by @ -- sort connection in numerical comparison for `Download`, `DL Speed`, etc ([#367](https://github.com/LibNyanpasu/clash-nyanpasu/issues/367)) ([11195fc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/11195fcf22d8abb7ba7b65d823cfe892750a3633)) by @ +- **bundle:** Instance is running while updating app (#393) by @greenhat616 in [#393](https://github.com/LibNyanpasu/clash-nyanpasu/pull/393) -### 🧹 Maintenance +- **bundler:** Kill processes while updating in windows by @greenhat616 -- **deps:** update dependency @types/react to v18.2.51 ([f6124d7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f6124d7b7e9b031a3a02a3b23bcf5f4f07f0c092)) by @ -- **deps:** update dependency @types/react to v18.2.52 ([eb61d94](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eb61d9483e9b9522350fa5cf785f479e60b64835)) by @ -- **deps:** update dependency @types/react to v18.2.53 ([23e866d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/23e866d2d6f1de3787cca034f475495bd45671f6)) by @ -- **deps:** update dependency @types/react to v18.2.54 ([030e454](https://github.com/LibNyanpasu/clash-nyanpasu/commit/030e454a598e2c5d870faec01779e7c20eddf814)) by @ -- **deps:** update dependency @types/react to v18.2.55 ([69acbb0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/69acbb0c5df2b3276a541ab650c4d42202166f94)) by @ -- **deps:** update dependency @types/react-dom to v18.2.19 ([3930db9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3930db97ce602e644181be9434a2610a4657c295)) by @ -- **deps:** update dependency lint-staged to v15.2.1 ([06e4fe5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/06e4fe5b897fc033384e43ee5d998d3566db5a88)) by @ -- **deps:** update dependency npm-run-all2 to v6.1.2 ([8f97bb7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8f97bb71f6d32c8ca018e1429771981047acf0c0)) by @ -- **deps:** update dependency postcss to v8.4.34 ([585dd12](https://github.com/LibNyanpasu/clash-nyanpasu/commit/585dd128daa83b8a1f968ca40d07a01abeb6e17b)) by @ -- **deps:** update dependency postcss to v8.4.35 ([7d4c5f4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7d4c5f4c579593ebc1e78fa70deb21803400c3ab)) by @ -- **deps:** update dependency stylelint-config-recess-order to v4.6.0 ([8c012d8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8c012d889229498dbbcc60e9d93d53339f9fc010)) by @ -- **deps:** update lint packages ([798c65e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/798c65ee31a4da44363c8f52471896345e157425)) by @ -- **deps:** update lint packages ([b4d5ef0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b4d5ef0ecfbf7cca8b3ab9f31b03d0f716cb5963)) by @ -- **deps:** update lint packages ([#375](https://github.com/LibNyanpasu/clash-nyanpasu/issues/375)) ([7ded812](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7ded8120a5ce8357b99f64c3bed46c292e5096e4)) by @ -- **manifest:** update manifest [skip ci] ([fa52f94](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fa52f941debc03ed306d7488f14cff89b8f06863)) by @ -- **manifest:** update manifest [skip ci] ([26722d3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/26722d38039c64ac37b62ce3b519f06e4f4d8f32)) by @ -- **manifest:** update manifest [skip ci] ([f8e69a3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f8e69a325d24f3fb6708fb382805a198fa371024)) by @ -- **release:** v1.4.5 🤖 [skip ci] ([2e94b33](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2e94b339986781a3eba342d8f74e810e33663c84)) by @ +- **ci:** Daily updater issue (#392) by @greenhat616 in [#392](https://github.com/LibNyanpasu/clash-nyanpasu/pull/392) -## [1.4.4](https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.3...v1.4.4) (2024-01-29) +- **ci:** Nightly updater issue by @greenhat616 + +- **nsis:** Kill nyanpasu processes while updating (#403) by @greenhat616 in [#403](https://github.com/LibNyanpasu/clash-nyanpasu/pull/403) + +- Portable issues (#395) by @greenhat616 in [#395](https://github.com/LibNyanpasu/clash-nyanpasu/pull/395) + +- Minimize icon is wrong while resize window (#394) by @greenhat616 in [#394](https://github.com/LibNyanpasu/clash-nyanpasu/pull/394) + +- Sort connection in numerical comparison for `Download`, `DL Speed`, etc (#367) by @Jeremy-Hibiki in [#367](https://github.com/LibNyanpasu/clash-nyanpasu/pull/367) + +- Resources missing by @greenhat616 in [#354](https://github.com/LibNyanpasu/clash-nyanpasu/pull/354) + +--- + +## New Contributors + +- @Jeremy-Hibiki made their first contribution in [#367](https://github.com/LibNyanpasu/clash-nyanpasu/pull/367) + +**Full Changelog**: https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.4...v1.4.5 + +## [1.4.4] - 2024-01-29 ### 🐛 Bug Fixes -- **backend:** fix deadlock issue on config ([#312](https://github.com/LibNyanpasu/clash-nyanpasu/issues/312)) ([23ced3b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/23ced3b6937b9105f2b047c15b13dd45f9324d4e)) by @ -- **ci:** publish & updater ([a715241](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a715241c48d0479ffec14c2bb3f875547835a1c0)) by @ -- **ci:** should generate manifest in dev branch for compatible with <= 1.4.3 ([#292](https://github.com/LibNyanpasu/clash-nyanpasu/issues/292)) ([ffeb6d7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ffeb6d7e11d62c8cdaa288968c00d4ceec9a0a02)) by @ -- **deps:** update dependency @mui/x-data-grid to v6.19.2 ([b5b96f3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b5b96f353308d5b737d96d3b4a945076440fb497)) by @ -- **deps:** update dependency ahooks to v3.7.9 ([a9da0a9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a9da0a976a28bf332c9094186cf02ab8dd370c06)) by @ -- **deps:** update dependency axios to v1.6.6 ([47f6e71](https://github.com/LibNyanpasu/clash-nyanpasu/commit/47f6e7159efa05fc7817b52fbf6291bf01a1253a)) by @ -- **deps:** update dependency axios to v1.6.7 ([c0d5258](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c0d5258ff4a7e07e30a3eace91f077df67490248)) by @ -- **deps:** update dependency framer-motion to v11 ([#316](https://github.com/LibNyanpasu/clash-nyanpasu/issues/316)) ([97093c5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/97093c5a05c22ba057aed03effb6528a6adbda27)) by @ -- **deps:** update dependency framer-motion to v11.0.2 ([4c11f7d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4c11f7dfd3d91f7624326630687910c406dc4fbb)) by @ -- **deps:** update dependency framer-motion to v11.0.3 ([4b899ef](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4b899ef0f404023ab02fd78ce83c952e19c3fcc5)) by @ -- **deps:** update dependency i18next to v23.7.19 ([56669df](https://github.com/LibNyanpasu/clash-nyanpasu/commit/56669df6426b47f9b463931f2e69f3ea98f68c1d)) by @ -- **deps:** update dependency i18next to v23.7.20 ([348c908](https://github.com/LibNyanpasu/clash-nyanpasu/commit/348c908850edec5e284ec23b434b14a3476464aa)) by @ -- **deps:** update dependency i18next to v23.8.0 ([a91312b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a91312bc6b93cfc61c1e71c52a84960ce5197227)) by @ -- **deps:** update dependency i18next to v23.8.1 ([#343](https://github.com/LibNyanpasu/clash-nyanpasu/issues/343)) ([c9ee088](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c9ee088edbc3639a3fa0605f3463b30d4777e4cc)) by @ -- **deps:** update dependency react-virtuoso to v4.6.3 ([a6d867b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a6d867bdae710472a97ac59076be810d27ada96c)) by @ -- **deps:** update deps ([#294](https://github.com/LibNyanpasu/clash-nyanpasu/issues/294)) ([42ec60b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/42ec60b90bc78a39cb6b0060464860dabf1ba886)) by @ -- **deps:** update material-ui monorepo ([d251cf2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d251cf2c48f427dfe0208301216d17cc98321ec2)) by @ -- **deps:** update rust crate iptools to 0.2.5 ([#299](https://github.com/LibNyanpasu/clash-nyanpasu/issues/299)) ([4371160](https://github.com/LibNyanpasu/clash-nyanpasu/commit/43711603cf2b5ece46e32ad65bde6fddd638b1ef)) by @ -- **deps:** update rust crate rquickjs to 0.4.2 ([#300](https://github.com/LibNyanpasu/clash-nyanpasu/issues/300)) ([77f9ae8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/77f9ae877fa1087868e7ed840f693fe16deaaa06)) by @ -- **deps:** update rust crate serde_json to v1.0.113 ([#344](https://github.com/LibNyanpasu/clash-nyanpasu/issues/344)) ([286b0b8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/286b0b853b6f57df4678b2ece30e5ad02fccfb5c)) by @ -- **deps:** update rust crate serde_yaml to v0.9.31 ([#345](https://github.com/LibNyanpasu/clash-nyanpasu/issues/345)) ([397c7a3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/397c7a38da989b2ae1b0bd1d84ecc7f6a740889d)) by @ -- **deps:** update rust crate simd-json to 0.13.8 ([#301](https://github.com/LibNyanpasu/clash-nyanpasu/issues/301)) ([5fc147a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5fc147a834782bb5d9ddda29763c0cdd4a092ffc)) by @ -- **deps:** update rust crate simd-json to 0.13.8 ([#302](https://github.com/LibNyanpasu/clash-nyanpasu/issues/302)) ([29f6046](https://github.com/LibNyanpasu/clash-nyanpasu/commit/29f6046654ec904bb4c23f1b3ca1c5f1fd735f32)) by @ -- **portable:** do not use system notification api while app is portable ([#334](https://github.com/LibNyanpasu/clash-nyanpasu/issues/334)) ([e9abc47](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e9abc47cad9cf322355b97122e9b4af9182edbfe)) by @ -- **portable:** portable bundle issue ([#335](https://github.com/LibNyanpasu/clash-nyanpasu/issues/335)) ([c9ea3cd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c9ea3cda4412f8993eaef86c665c4a6708bb0511)) by @ -- **updater:** use release body as updater note ([#333](https://github.com/LibNyanpasu/clash-nyanpasu/issues/333)) ([9db0bac](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9db0bacbc2ea6ee8f7206bfe1408eb8baf7b25eb)) by @ -- use if let instead ([#309](https://github.com/LibNyanpasu/clash-nyanpasu/issues/309)) ([390bf62](https://github.com/LibNyanpasu/clash-nyanpasu/commit/390bf624709125df513ae0008c0557789f55b9e8)) by @ +- **backend:** Fix deadlock issue on config (#312) by @4o3F in [#312](https://github.com/LibNyanpasu/clash-nyanpasu/pull/312) -### 🧹 Maintenance +- **ci:** Publish & updater by @greenhat616 -- **deps:** pin dependencies ([#295](https://github.com/LibNyanpasu/clash-nyanpasu/issues/295)) ([a920469](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a92046906f3d7360227ec96a6ca969cdf5973fd6)) by @ -- **deps:** pin dependencies ([#296](https://github.com/LibNyanpasu/clash-nyanpasu/issues/296)) ([0d147b3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0d147b3dd3dc7348e3ebd0f296d1aac94b80ee2b)) by @ -- **deps:** pin dependencies ([#297](https://github.com/LibNyanpasu/clash-nyanpasu/issues/297)) ([8620b3a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8620b3af236debaf7cbb40cfcb7bdecf7363104d)) by @ -- **deps:** pin dependencies ([#298](https://github.com/LibNyanpasu/clash-nyanpasu/issues/298)) ([d413980](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d413980d32ebc6922f81e3e98ee9109d28090c43)) by @ -- **deps:** replace dependency npm-run-all with npm-run-all2 5.0.0 ([#337](https://github.com/LibNyanpasu/clash-nyanpasu/issues/337)) ([e091bf3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e091bf32868d53a979ddc1422ee5949c965434b0)) by @ -- **deps:** update backend deps ([#332](https://github.com/LibNyanpasu/clash-nyanpasu/issues/332)) ([506e1df](https://github.com/LibNyanpasu/clash-nyanpasu/commit/506e1df6c89b2e7b43383c374d3f1a5f3e05efa9)) by @ -- **deps:** update dependency husky to v9 ([#322](https://github.com/LibNyanpasu/clash-nyanpasu/issues/322)) ([6eb6a1a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6eb6a1a836fd38e94d3232669a878ee50210fdac)) by @ -- **deps:** update dependency npm-run-all2 to v5.0.2 ([d6e6536](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d6e653606db65f416769033c010774da862f2247)) by @ -- **deps:** update dependency npm-run-all2 to v6 ([#342](https://github.com/LibNyanpasu/clash-nyanpasu/issues/342)) ([a92959c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a92959c53719f37ee507609cae3f37a121b9c540)) by @ -- **deps:** update dependency shikiji to v0.10.0 ([9d8483a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9d8483aeddd1cf5e102262f1ecc7a9503d307fb9)) by @ -- **deps:** update dependency shikiji to v0.10.1 ([b54c881](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b54c88124f1ffbae58bda5f0762160b6ff7e6c4a)) by @ -- **deps:** update dependency shikiji to v0.10.2 ([45f3662](https://github.com/LibNyanpasu/clash-nyanpasu/commit/45f3662dcbb8f0ca6d0732d76249160664e530e9)) by @ -- **deps:** update dependency stylelint-scss to v6.1.0 ([005f745](https://github.com/LibNyanpasu/clash-nyanpasu/commit/005f745f35050f96367ce0612d12c5c16ffb4401)) by @ -- **deps:** update lint packages to v18.5.0 ([#308](https://github.com/LibNyanpasu/clash-nyanpasu/issues/308)) ([9c9293b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9c9293ba8e391fae719e8ddb01baf461a32bbcf3)) by @ -- **deps:** update lint packages to v18.6.0 ([d9c3566](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d9c356617734695ac2dbb553c7c7c52d7916ac30)) by @ -- **deps:** update lint packages to v6.19.1 ([4fe3458](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4fe3458dd60f65e8b9f2dfdf7d20bf49e0e0f822)) by @ -- **manifest:** update manifest [skip ci] ([e716aa5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e716aa559b88bc593bd69c5dd5f7348b0109085e)) by @ -- **manifest:** update manifest [skip ci] ([1764847](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1764847ec46b8b23e9a7d800ac0fe3e52489e085)) by @ -- **manifest:** update manifest [skip ci] ([d13a76e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d13a76e5bb3ecb540009ab13bb872f342fceeb58)) by @ -- **release:** v1.4.4 🤖 [skip ci] ([9874b01](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9874b01db4392376789f7cb6252a5c109bfb4280)) by @ +- **ci:** Should generate manifest in dev branch for compatible with <= 1.4.3 (#292) by @greenhat616 in [#292](https://github.com/LibNyanpasu/clash-nyanpasu/pull/292) + +- **deps:** Update deps (#294) by @greenhat616 in [#294](https://github.com/LibNyanpasu/clash-nyanpasu/pull/294) + +- **portable:** Portable bundle issue (#335) by @greenhat616 in [#335](https://github.com/LibNyanpasu/clash-nyanpasu/pull/335) + +- **portable:** Do not use system notification api while app is portable (#334) by @greenhat616 in [#334](https://github.com/LibNyanpasu/clash-nyanpasu/pull/334) + +- **updater:** Use release body as updater note (#333) by @greenhat616 in [#333](https://github.com/LibNyanpasu/clash-nyanpasu/pull/333) + +- Use if let instead (#309) by @greenhat616 in [#309](https://github.com/LibNyanpasu/clash-nyanpasu/pull/309) ### 📚 Documentation -- add ArchLinux AUR install suggestion ([#293](https://github.com/LibNyanpasu/clash-nyanpasu/issues/293)) ([a7893cb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a7893cbd3ed8b03617f94737d3ab637714ce6851)) by @ +- Add ArchLinux AUR install suggestion (#293) by @Kimiblock in [#293](https://github.com/LibNyanpasu/clash-nyanpasu/pull/293) -### 🔨 Refactoring +### 🔨 Refactor -- **backend:** improve code robustness ([#303](https://github.com/LibNyanpasu/clash-nyanpasu/issues/303)) ([ba24602](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ba24602fff6c22b0d98396c4a55afced1efc58b1)) by @ +- **backend:** Improve code robustness (#303) by @greenhat616 in [#303](https://github.com/LibNyanpasu/clash-nyanpasu/pull/303) -## [1.4.3](https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.2...v1.4.3) (2024-01-20) +--- + +**Full Changelog**: https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.3...v1.4.4 + +## [1.4.3] - 2024-01-20 ### ✨ Features -- make proxies material you ([2600772](https://github.com/LibNyanpasu/clash-nyanpasu/commit/26007724765f051490fd223d2e023089049153a2)) by @ -- new release workflow ([#284](https://github.com/LibNyanpasu/clash-nyanpasu/issues/284)) ([21e17b4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/21e17b454fd4a8bddab65ea0e5d15b53ed3b8ef0)) by @ -- proxies ui minor tweaks ([8c56e0f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8c56e0fc263cbfb86ab59664e7ea0b9b6c1826c2)) by @ +- New release workflow (#284) by @greenhat616 in [#284](https://github.com/LibNyanpasu/clash-nyanpasu/pull/284) + +- Proxies ui minor tweaks by @keiko233 + +- Make proxies material you by @keiko233 ### 🐛 Bug Fixes -- [#212](https://github.com/LibNyanpasu/clash-nyanpasu/issues/212) ([190a36a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/190a36a98fde570c7bb04155a3c682ec1b8b9431)) by @ -- add a panic hook to collect logs and show a dialog ([#191](https://github.com/LibNyanpasu/clash-nyanpasu/issues/191)) ([f23eb73](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f23eb738521443856746fe55ba2ee3cc35748aa0)) by @ -- **ci:** pin rust version to 1.74.1 ([#213](https://github.com/LibNyanpasu/clash-nyanpasu/issues/213)) ([86ff2d4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/86ff2d40144556eeb698db81903011f4b54d5f23)) by @ -- **ci:** use dev commit hash when schedule dispatch ([50c777b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/50c777b97bac97555a6ee967bf8a57b99b92e8f8)) by @ -- **ci:** use latest action ([9e1d76e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9e1d76ec9795ddb553ddcf8199cd57d3f221395b)) by @ -- dark mode flash in win ([ffe2bde](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ffe2bde3b69c9a2ecba1494045f8dbac135d0b49)) by @ -- **deps:** update dependency framer-motion to v10.17.0 ([051c7fb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/051c7fbd677880c06373381309e42569b8be80cf)) by @ -- **deps:** update dependency framer-motion to v10.17.4 ([c6c438e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c6c438e3e9dbea5de3822cb621c64c8d690ab9f4)) by @ -- **deps:** update dependency framer-motion to v10.17.6 ([42df02e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/42df02ea5c2ba232a20b327c3fe94b488919a57d)) by @ -- **deps:** update dependency framer-motion to v10.17.8 ([cbb7df4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cbb7df4536eb4bb9da096efb50d266a352ed30ec)) by @ -- **deps:** update dependency framer-motion to v10.17.9 ([63a7431](https://github.com/LibNyanpasu/clash-nyanpasu/commit/63a743162cfa148c55d4ef6cd4bf8d6c6b32083c)) by @ -- **deps:** update dependency framer-motion to v10.18.0 ([d243e8f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d243e8f623e0bccbffd40860b76c879003fdd66a)) by @ -- **deps:** update rust crate async-trait to 0.1.75 ([6722174](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6722174d66dc81b6e01e91d8cc947ad4046a1625)) by @ -- **deps:** update rust crate async-trait to 0.1.77 ([#249](https://github.com/LibNyanpasu/clash-nyanpasu/issues/249)) ([fffc081](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fffc081a219df3be91f30ee79d9eaf7965384c0b)) by @ -- **deps:** update rust crate ctrlc to 3.4.2 ([0362463](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0362463b6de35bf926a77ad9ec2a07e780243ace)) by @ -- **deps:** update rust crate delay_timer to 0.11.5 ([#250](https://github.com/LibNyanpasu/clash-nyanpasu/issues/250)) ([48ace4f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/48ace4fde690ff200e37290667fe5c380151657e)) by @ -- **deps:** update rust crate rquickjs to 0.4.0 ([#131](https://github.com/LibNyanpasu/clash-nyanpasu/issues/131)) ([00c99ca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/00c99ca93699537843e5ec97726f337d96582e13)), closes [#243](https://github.com/LibNyanpasu/clash-nyanpasu/issues/243) by @ -- **deps:** update rust crate simd-json to 0.13.6 ([#251](https://github.com/LibNyanpasu/clash-nyanpasu/issues/251)) ([36bda5a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/36bda5aa4ef60da1f0baa5219f5d5b6976d67a2b)) by @ -- **deps:** update rust crate tauri to 1.5.4 ([8b3e420](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8b3e4207b86d733b5ace853cce73bee0d979f2ec)) by @ -- **deps:** update rust crate tempfile to 3.9.0 ([b3404bf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b3404bf3984dc9e9c9be9923bdc6715272469a9a)) by @ -- enable_tun block the process ([#232](https://github.com/LibNyanpasu/clash-nyanpasu/issues/232)) ([de1c4a0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/de1c4a05f93c1ee2772ef248c8e8679ac242f31e)) by @ -- lint ([46071c6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/46071c662798473d0ddec54c8952ee2ac41ba188)) by @ -- **log:** incorrect color in light mode ([211bc44](https://github.com/LibNyanpasu/clash-nyanpasu/commit/211bc44793a80a51f52700544c538006fd602365)) by @ -- notification fallback ([#262](https://github.com/LibNyanpasu/clash-nyanpasu/issues/262)) ([ce0224d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ce0224d779296515157479276599d157b2e16e52)) by @ -- notification premission check ([#263](https://github.com/LibNyanpasu/clash-nyanpasu/issues/263)) ([c1f8c54](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c1f8c54df7420509bd588f36abd5011242dcc2ed)) by @ -- open file, closing [#197](https://github.com/LibNyanpasu/clash-nyanpasu/issues/197) ([4345dc2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4345dc26c7c91ea981e5daa7a5f16bca2b77e7ce)) by @ -- publish ci ([a518542](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a518542f97d3aa60c4f3668d5ce4987749a834fc)) by @ -- release ci ([c9ae02a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c9ae02a6bb3ffc5c2968a06bc57d87fc20b3fd95)) by @ -- **rocksdb:** use TransactionDB instead of OptimisticTransactionDB ([#194](https://github.com/LibNyanpasu/clash-nyanpasu/issues/194)) ([8373913](https://github.com/LibNyanpasu/clash-nyanpasu/commit/83739131fd53e0a59798db986f441d10d6faea33)) by @ -- same text color for `REJECT-DROP` policy as `REJECT` ([#236](https://github.com/LibNyanpasu/clash-nyanpasu/issues/236)) ([c78dff4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c78dff4fcb1750629a4218405a9ef8ffdda95396)) by @ -- stable channel build issue ([#248](https://github.com/LibNyanpasu/clash-nyanpasu/issues/248)) ([13d7bc4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/13d7bc4e0ef40f725483f458f3b2cc566957f5b5)) by @ -- updater ([ca1ed25](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ca1ed25d3b252da7fd7a8a50ee31fc316b4ccadf)) by @ -- **updater:** should use nyanpasu proxy or system proxy when performing request ([#273](https://github.com/LibNyanpasu/clash-nyanpasu/issues/273)) ([dc582b4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dc582b4adc959eb292dcaa1c10074119c67bd05a)) by @ -- **updater:** add status code judge ([67e26bc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/67e26bc0c63d7e87f60b6c872ad3f50d05a94f61)) by @ -- **updater:** allow to use elevated permission to copy and override core ([6c992b7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6c992b7c5fb9221376c30aae8ff004297c14315d)) by @ -- virtuoso scroller bottom not padding ([be3d99c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/be3d99cd0f22947cb52fdd87b1e8e1bc21ae7863)) by @ -- **vite:** rm useless shikiji langs support ([#267](https://github.com/LibNyanpasu/clash-nyanpasu/issues/267)) ([7768255](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7768255b863be4a141d0c551cd3425faee19238e)) by @ -- windrag err ([a7ddd3a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a7ddd3a4dec8ea72e24696009601431ec26646bf)) by @ +- **ci:** Pin rust version to 1.74.1 (#213) by @greenhat616 in [#213](https://github.com/LibNyanpasu/clash-nyanpasu/pull/213) -### 🧹 Maintenance +- **ci:** Use latest action by @greenhat616 -- **backend:** update peer deps ([969a061](https://github.com/LibNyanpasu/clash-nyanpasu/commit/969a06159d4b17f0fa96d3cbb86188e667bd21b8)) by @ -- **deps:** update actions/cache action to v4 ([#277](https://github.com/LibNyanpasu/clash-nyanpasu/issues/277)) ([a6d1025](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a6d1025c4f9ff155c8875f27fb97f8a7a58cb2c2)) by @ -- **deps:** update dependency autoprefixer to v10.4.17 ([5e8eaa2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5e8eaa200d406b1a59399d7f17ecf3f2d49cb6ac)) by @ -- **deps:** update dependency eslint-plugin-n to v16.6.0 ([7e7b645](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7e7b64586893dfee2dce3d7a1a30a1abc579bf15)) by @ -- **deps:** update dependency eslint-plugin-n to v16.6.1 ([51049b8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/51049b83419c0c2574c979ec2515e302031ca8cc)) by @ -- **deps:** update dependency eslint-plugin-prettier to v5.1.3 ([3659b7a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3659b7aba7f56ee223377cb056df8e42ca9afe79)) by @ -- **deps:** update dependency postcss to v8.4.33 ([884a531](https://github.com/LibNyanpasu/clash-nyanpasu/commit/884a53111305de7fc0a50b63dafa3a5b3d3f09ff)) by @ -- **deps:** update dependency postcss-html to v1.6.0 ([7ff9013](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7ff9013314a4ae0f3033d1cac33af77986a77687)) by @ -- **deps:** update dependency postcss-import to v16 ([#229](https://github.com/LibNyanpasu/clash-nyanpasu/issues/229)) ([eacfcf3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eacfcf323434835779bf94c380ddce341d759293)) by @ -- **deps:** update dependency shikiji to v0.9.12 ([0c7e12f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0c7e12fe60c2161aa8aca16da39b79f11932c3e2)) by @ -- **deps:** update dependency shikiji to v0.9.15 ([fee3885](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fee3885b736954889cc67d8dfd02a4905ec03933)) by @ -- **deps:** update dependency shikiji to v0.9.16 ([1bca8fa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1bca8faded9252b359c43ac67b48b1c3a2e5ab65)) by @ -- **deps:** update dependency shikiji to v0.9.17 ([add3d3e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/add3d3e1aa1f6a39fb10cb607d34a037b7a43ef0)) by @ -- **deps:** update dependency shikiji to v0.9.18 ([ae18c31](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ae18c31990500bc9d4ce61d4d6a8915c3caf3fa7)) by @ -- **deps:** update dependency shikiji to v0.9.19 ([a16e3ad](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a16e3adc90c040f12584140f4a8ddc8f86838a90)) by @ -- **deps:** update dependency stylelint to v16.1.0 ([1dbd52e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1dbd52e09bd8d9a826d0e32058ba04d6436c0045)) by @ -- **deps:** update dependency stylelint to v16.2.0 ([28a4a81](https://github.com/LibNyanpasu/clash-nyanpasu/commit/28a4a815c0bc8df06ee82a24093a4b1a7669889d)) by @ -- **deps:** update dependency stylelint-config-standard to v36 ([#193](https://github.com/LibNyanpasu/clash-nyanpasu/issues/193)) ([1901dca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1901dcabb69a4f125f1202a22885da0474178f45)) by @ -- **deps:** update dependency stylelint-declaration-block-no-ignored-properties to v2.8.0 ([c4cd00f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c4cd00faec7d2e0e3406e9c5c59f1913d0041e17)) by @ -- **deps:** update lint packages ([#246](https://github.com/LibNyanpasu/clash-nyanpasu/issues/246)) ([fcc4bb2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fcc4bb29475193bb51cb4596d83a6c623d1efe2b)) by @ -- **deps:** update lint packages to v18.4.4 ([3ef72a0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3ef72a03de36f0d57833ea945448e2f624e303df)) by @ -- **deps:** update lint packages to v6.16.0 ([41752d9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/41752d9c16ac8cdad6afcaebc072ec704f5f9de7)) by @ -- **deps:** update lint packages to v6.17.0 ([1e3be59](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1e3be5908faec268ddcd24f1ad06359c40af8feb)) by @ -- **deps:** update lint packages to v6.18.0 ([cb752c3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cb752c371edc3b0a25075df38f63343d56348e6d)) by @ -- **deps:** update lint packages to v6.19.0 ([4301ec6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4301ec6838a5b2414ec6f71bc3972555c346a4be)) by @ -- fix build ([85bc278](https://github.com/LibNyanpasu/clash-nyanpasu/commit/85bc278c62768ee2758a05abb36e77d30e076fdc)) by @ -- fix build tag typos ([bd7656f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bd7656f4d6231c441e4a960e2869dbbaec4ddeac)) by @ -- fix script consola columns ([4298483](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4298483c670e4c6d4b8eefe49d38d479e6417f9c)) by @ -- **manifest:** update manifest [skip ci] ([71e759a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/71e759a8bfa999bce949f1a7f5643e25588d0925)) by @ -- **manifest:** update manifest [skip ci] ([738906c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/738906c68c81632c9522d19722f4bab67ce1b11b)) by @ -- **manifest:** update manifest [skip ci] ([bbccc15](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bbccc15cdfc77bdbef5c08da95fced042a557f9c)) by @ -- **manifest:** update manifest [skip ci] ([76fc8f9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/76fc8f970897d18ec2a9a391c541f7952244bdda)) by @ -- **manifest:** update manifest [skip ci] ([04cb5c4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/04cb5c40a7238efdf6ffe708db7537859df422d6)) by @ -- **manifest:** update manifest [skip ci] ([10cccc1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/10cccc12ced284fdd3ee2465b416f0b98f23b428)) by @ -- **manifest:** update manifest [skip ci] ([2e8e881](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2e8e881f170996034b4676db51d34e726dd92097)) by @ -- **manifest:** update manifest [skip ci] ([abd787b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/abd787b8927108635fca53fbae5eed355b0a7c47)) by @ -- **manifest:** update manifest [skip ci] ([35d5296](https://github.com/LibNyanpasu/clash-nyanpasu/commit/35d5296ee088751d75880011a7fa70b70251cf48)) by @ -- **manifest:** update manifest [skip ci] ([aeeca77](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aeeca7761944d7dad67b78f44ef04bc3fe94b0c1)) by @ -- **manifest:** update manifest [skip ci] ([6584023](https://github.com/LibNyanpasu/clash-nyanpasu/commit/658402332f91cd3cd6dfb5e29042d6c452632d19)) by @ -- **manifest:** update manifest [skip ci] ([01c4bfe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/01c4bfed68e23fe97258e649430ed611775bfe52)) by @ -- **manifest:** update manifest [skip ci] ([5c486df](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5c486df13af2e955e3599b7a7794e69add0180f0)) by @ -- **manifest:** update manifest [skip ci] ([ba7a06a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ba7a06a9c6910a729017193f5e2532aae5dc5ffd)) by @ -- **manifest:** update manifest [skip ci] ([0e64c0d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0e64c0dc1cb73b12e53155ad3f9f77a7e22b97c7)) by @ -- **manifest:** update manifest [skip ci] ([bd1d4be](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bd1d4bea2ef0d6649d5b396b9363c85d46500c24)) by @ -- **manifest:** update manifest [skip ci] ([3d3f631](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3d3f631368d22f34a5ac499e769d288dbbace827)) by @ -- **manifest:** update manifest [skip ci] ([450b285](https://github.com/LibNyanpasu/clash-nyanpasu/commit/450b285c1e6ee4d368fe625280a40a101c9a82eb)) by @ -- **manifest:** update manifest [skip ci] ([020e3f7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/020e3f72595aff9cd45911413106e617649100d1)) by @ -- **manifest:** update manifest [skip ci] ([a732623](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a7326234663453b300b2aeef631bbc0cd798b9a6)) by @ -- **manifest:** update manifest [skip ci] ([3d53aa3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3d53aa377dba5219c394e8bf60e133be8f926091)) by @ -- **manifest:** update manifest [skip ci] ([a04fbb9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a04fbb9917d71cc97d1dac90d4b1bac34a2e09f9)) by @ -- **manifest:** update manifest [skip ci] ([333560a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/333560ab3600452e3a2c8efbf475085c691fde2a)) by @ -- **manifest:** update manifest [skip ci] ([5cd919e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5cd919e569392ce64ba1b9cec09b50c577189c5b)) by @ -- **manifest:** update manifest [skip ci] ([41fdc22](https://github.com/LibNyanpasu/clash-nyanpasu/commit/41fdc22f6830dfd9d234d538b415d298b47fdf7c)) by @ -- **manifest:** update manifest [skip ci] ([2e27c9a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2e27c9adbbc9410ddcf9877c75173f8441e26a1e)) by @ -- **manifest:** update manifest [skip ci] ([3c48bb6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3c48bb6edc2d5503614c5859efc0ff96beed5b07)) by @ -- port dev build action to release build ([2a39be3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2a39be37faea84939ade033897071b9fa2800161)) by @ -- **release:** v1.4.3 🤖 [skip ci] ([20bc733](https://github.com/LibNyanpasu/clash-nyanpasu/commit/20bc7335c6e162b165010df3830ef5f15d8eb258)) by @ -- update change log ([16f9154](https://github.com/LibNyanpasu/clash-nyanpasu/commit/16f9154cfed8a7d135a1f1a78c0287c659572444)) by @ +- **ci:** Use dev commit hash when schedule dispatch by @greenhat616 -## [1.4.2](https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.1...v1.4.2) (2023-12-24) +- **log:** Incorrect color in light mode by @greenhat616 + +- **rocksdb:** Use TransactionDB instead of OptimisticTransactionDB (#194) by @greenhat616 in [#194](https://github.com/LibNyanpasu/clash-nyanpasu/pull/194) + +- **updater:** Should use nyanpasu proxy or system proxy when performing request (#273) by @greenhat616 in [#273](https://github.com/LibNyanpasu/clash-nyanpasu/pull/273) + +- **updater:** Add status code judge by @greenhat616 + +- **updater:** Allow to use elevated permission to copy and override core by @greenhat616 + +- **vite:** Rm useless shikiji langs support (#267) by @greenhat616 in [#267](https://github.com/LibNyanpasu/clash-nyanpasu/pull/267) + +- Release ci by @greenhat616 + +- Publish ci by @greenhat616 + +- Notification premission check (#263) by @greenhat616 in [#263](https://github.com/LibNyanpasu/clash-nyanpasu/pull/263) + +- Notification fallback (#262) by @greenhat616 in [#262](https://github.com/LibNyanpasu/clash-nyanpasu/pull/262) + +- Stable channel build issue (#248) by @greenhat616 in [#248](https://github.com/LibNyanpasu/clash-nyanpasu/pull/248) + +- Virtuoso scroller bottom not padding by @keiko233 + +- Windrag err by @keiko233 + +- Same text color for `REJECT-DROP` policy as `REJECT` (#236) by @xkww3n in [#236](https://github.com/LibNyanpasu/clash-nyanpasu/pull/236) + +- Enable_tun block the process (#232) by @dyxushuai + +- #212 by @greenhat616 + +- Lint by @greenhat616 + +- Updater by @greenhat616 + +- Dark mode flash in win by @greenhat616 + +- Open file, closing #197 by @greenhat616 + +- Add a panic hook to collect logs and show a dialog (#191) by @greenhat616 in [#191](https://github.com/LibNyanpasu/clash-nyanpasu/pull/191) + +--- + +## New Contributors + +- @xkww3n made their first contribution in [#236](https://github.com/LibNyanpasu/clash-nyanpasu/pull/236) + +**Full Changelog**: https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.2...v1.4.3 + +## [1.4.2] - 2023-12-24 ### ✨ Features -- auto add dns according this method ([a509863](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a509863cb6b726ef34738fc14492c8ca858c40c7)) by @ -- auto log clear ([a320219](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a320219f003c90504d4249d4faee68499d7f811b)) by @ -- backport concurrency of latency test ([63f324b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/63f324b80c09cdffdf3198f14af5171149d24739)) by @ -- bundled mihomo alpha ([4b46eb5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4b46eb56d4039d8f94cf2e54c28b358e5bbb5d69)) by @ -- improve animations ([6495f4d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6495f4d489c9309de186840bfe9b42c10d640652)) by @ -- **manifest:** latest version generator ([9dfbc07](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9dfbc072f17415b58f32a1ab38007a131da84776)) by @ -- new style win tray icon & add blue icon when tun enable ([79c7107](https://github.com/LibNyanpasu/clash-nyanpasu/commit/79c710750a713f47fe202af64a18f1d5c7a79861)) by @ -- nightly build with updater ([a76203b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a76203befa9330f59fd04e78f6dc5232200139ac)) by @ -- quick logs collect ([b264720](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b2647208eb162b893f7e48ada9214aa343a893ac)) by @ -- rules providers ([59424f4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/59424f421a8e85fda35e70c92373a67634ee8e2e)) by @ -- **updater:** finish core updater backend ([6215531](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6215531bc234ddeab4ad277102531f99f55c1142)) by @ -- **updater:** finish ui ([aa4e30b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aa4e30b47f49b732c1ceda3addf674928d29573d)) by @ -- use christmas logo ([a7e0f8e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a7e0f8e44e57b9dc4f957f2d5f72a96c4d8db533)) by @ +- **updater:** Finish ui by @greenhat616 + +- **updater:** Finish core updater backend by @greenhat616 + +- Use christmas logo by @keiko233 + +- Auto add dns according this method by @yswtrue + +- Backport concurrency of latency test by @greenhat616 + +- Auto log clear by @greenhat616 + +- Nightly build with updater by @greenhat616 + +- Rules providers by @greenhat616 + +- Improve animations by @greenhat616 + +- Quick logs collect by @greenhat616 + +- Bundled mihomo alpha by @greenhat616 + +- New style win tray icon & add blue icon when tun enable by @keiko233 ### 🐛 Bug Fixes -- [#92](https://github.com/LibNyanpasu/clash-nyanpasu/issues/92) ([c7afb45](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c7afb457496fc8347bc70e160907ac52ec8d8f4b)) by @ -- [#96](https://github.com/LibNyanpasu/clash-nyanpasu/issues/96) ([f047b7c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f047b7c9c2b574ad5b9abd714ab667549c07bacd)) by @ -- bump nightly version after publish ([6a554b6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6a554b694072008d85656d36433881c888e5aafa)) by @ -- ci ([f4b5670](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f4b5670985abc00d426720090aea2f4789cd782a)) by @ -- ci ([e100219](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e100219a4fe906133bb4eb4019dff90eea3dbcc3)) by @ -- ci ([8712ff9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8712ff9466affdf213618d285420dfe4492a7d62)) by @ -- **ci:** release build ([27920de](https://github.com/LibNyanpasu/clash-nyanpasu/commit/27920de55ac2dedc58411b910327f81e4aea2543)) by @ -- **ci:** updater and dev build ([163ab81](https://github.com/LibNyanpasu/clash-nyanpasu/commit/163ab81ca89729a8016719c50b5caae1ab188070)) by @ -- dark shikiji display color err ([050a6f0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/050a6f00e826a1e338cbe0c383b74fe380f0d9ef)) by @ -- delay color, closing [#124](https://github.com/LibNyanpasu/clash-nyanpasu/issues/124) ([5dd0d6c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5dd0d6c5270137a76e668853ff8ef479b74dc4da)) by @ -- **deps:** update dependency @mui/lab to v5.0.0-alpha.155 ([8be9582](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8be95827c656b9f1ad95468056abcfb737444ba4)) by @ -- **deps:** update dependency dayjs to v1.11.10 ([#119](https://github.com/LibNyanpasu/clash-nyanpasu/issues/119)) ([4fcbb2d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4fcbb2dcc8f12f6f08f8daebd70df9aee06c2fd6)) by @ -- **deps:** update dependency framer-motion to v10.16.16 ([e0f62e0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e0f62e037bbcddfcf4dc5fc14cff3921ff508251)) by @ -- **deps:** update dependency i18next to v23 ([#75](https://github.com/LibNyanpasu/clash-nyanpasu/issues/75)) ([ebea511](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ebea51154023558b8d9814cbb4ce389141f80585)) by @ -- **deps:** update dependency monaco-editor to ^0.45.0 ([#128](https://github.com/LibNyanpasu/clash-nyanpasu/issues/128)) ([e1916d7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e1916d79d579c67a60941adda3d452944a3ea86e)) by @ -- **deps:** update dependency react-error-boundary to v4 ([#147](https://github.com/LibNyanpasu/clash-nyanpasu/issues/147)) ([a72443c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a72443c3ea45310898e03dc2b3beb263843337a2)) by @ -- **deps:** update dependency react-i18next to v13 ([#149](https://github.com/LibNyanpasu/clash-nyanpasu/issues/149)) ([0d719e1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0d719e153364324599b1fc15ba0c2f2c8c821dd5)) by @ -- **deps:** update dependency react-i18next to v14 ([#183](https://github.com/LibNyanpasu/clash-nyanpasu/issues/183)) ([e0b7520](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e0b75205556a241a19f467f2cee5da56cd732fb9)) by @ -- **deps:** update dependency react-virtuoso to v4 ([#150](https://github.com/LibNyanpasu/clash-nyanpasu/issues/150)) ([165291f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/165291f9aafff16e8f63c13308334a392b3b29b1)) by @ -- **deps:** update dependency swr to v2 ([#151](https://github.com/LibNyanpasu/clash-nyanpasu/issues/151)) ([584c8fa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/584c8fa35127893b1927f5437c7901c236d0bb84)) by @ -- **deps:** update rust crate chrono to 0.4.31 ([#104](https://github.com/LibNyanpasu/clash-nyanpasu/issues/104)) ([dad9f68](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dad9f686712f81370e9c6283846d29e3a426ce09)) by @ -- **deps:** update rust crate ctrlc to 3.4.1 ([#108](https://github.com/LibNyanpasu/clash-nyanpasu/issues/108)) ([f74b6d4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f74b6d490ce0489231ae0972ab4f94a89daa2057)) by @ -- **deps:** update rust crate dirs to 5.0.1 ([#110](https://github.com/LibNyanpasu/clash-nyanpasu/issues/110)) ([b340e04](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b340e04ef886f83dd1a22c1de1367f6ccc6e5351)) by @ -- **deps:** update rust crate dunce to 1.0.4 ([0d12a5d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0d12a5d12e89439f34120a904bcdc344d222500f)) by @ -- **deps:** update rust crate interfaces to 0.0.9 ([#111](https://github.com/LibNyanpasu/clash-nyanpasu/issues/111)) ([ffd7a8e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ffd7a8e287fef309e3ddf076171537f69b503404)) by @ -- **deps:** update rust crate log to 0.4.20 ([e92ee5d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e92ee5d175eb2b3f6bd2115caa59f605b48790e6)) by @ -- **deps:** update rust crate log4rs to 1.2.0 ([#125](https://github.com/LibNyanpasu/clash-nyanpasu/issues/125)) ([7759075](https://github.com/LibNyanpasu/clash-nyanpasu/commit/77590758eb7e935af1e9e0ac31cce3b8cc24d8c2)) by @ -- **deps:** update rust crate once_cell to 1.18.0 ([#129](https://github.com/LibNyanpasu/clash-nyanpasu/issues/129)) ([2944745](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2944745c3cf7542b99e72aa8afbb7203a7212ab7)) by @ -- **deps:** update rust crate once_cell to 1.19.0 ([8574388](https://github.com/LibNyanpasu/clash-nyanpasu/commit/857438815fb47d805e488af1343fcc9e1a061147)) by @ -- **deps:** update rust crate open to 4.2.0 ([#126](https://github.com/LibNyanpasu/clash-nyanpasu/issues/126)) ([a30f56c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a30f56cbae8bb4c688eb5c9ccad6b62bc44d2ba1)) by @ -- **deps:** update rust crate open to 5.0.1 ([8beb165](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8beb16583428f46afbe957815d3be33e5b7e933e)) by @ -- **deps:** update rust crate open to v5 ([#152](https://github.com/LibNyanpasu/clash-nyanpasu/issues/152)) ([b54e6b5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b54e6b59c05b50eb1b34c0b9c41dee46dfa856bd)) by @ -- **deps:** update rust crate parking_lot to 0.12.1 ([65efbcf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/65efbcfa8b564d15f8af0946b5dd75a5b377ed68)) by @ -- **deps:** update rust crate runas to v1.1.0 ([#133](https://github.com/LibNyanpasu/clash-nyanpasu/issues/133)) ([0d1eb27](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0d1eb27440fe23e81c05d27200f8ec11b6894483)) by @ -- **deps:** update rust crate which to 4.4.2 ([b34ee0d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b34ee0d188dc97c6b42a23d0bde08292b85e8213)) by @ -- **deps:** update rust crate window-vibrancy to 0.4.0 ([#134](https://github.com/LibNyanpasu/clash-nyanpasu/issues/134)) ([bf3679c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bf3679c886e7e6867b3ed20c66f2a8c8e5eee3b2)) by @ -- **deps:** update rust crate window-vibrancy to 0.4.3 ([#138](https://github.com/LibNyanpasu/clash-nyanpasu/issues/138)) ([e6db194](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e6db194361f8e7ab17ac1250097d5fc78316fdcc)) by @ -- dev build branch issue ([ddeb76b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ddeb76bbd79d4eff87d78196df82d46097a1d755)) by @ -- **dialog:** align center and overflow issue ([e0430e1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e0430e15070458221a0a5856485332a51e8d7dd5)) by @ -- format ansi in log viewer ([181c905](https://github.com/LibNyanpasu/clash-nyanpasu/commit/181c905687439a05634bfb32f16387d51ea158de)) by @ -- i18n resources ([de64cb8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/de64cb80d254e92ee5fec385a2b978a8833f994c)) by @ -- icon issues, close [#55](https://github.com/LibNyanpasu/clash-nyanpasu/issues/55) ([21b9f75](https://github.com/LibNyanpasu/clash-nyanpasu/commit/21b9f7522131495e9d7cb5e6586f06be40c0d55e)) by @ -- lint ([04cc627](https://github.com/LibNyanpasu/clash-nyanpasu/commit/04cc627a7c42b7fdb5d5aa0d833818d8a1da7da7)) by @ -- lint ([4e51ff3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4e51ff31578c405a8e7056790655eb09b79d2983)) by @ -- **lint:** toml fmt ([c174064](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c174064eeb0ea57385587bf70406dd6858d2e5ba)) by @ -- **manifest:** mihomo alpha arch template ([fd821ea](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fd821ea7ad98c2e8de46e61020dec1c0c7567ad7)) by @ -- minor tweak base-content width ([63c4176](https://github.com/LibNyanpasu/clash-nyanpasu/commit/63c4176ccd7a67abc3d3053aa6fcd60fc7003da4)) by @ -- pin runas to v1.0.0 ([05b84f2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/05b84f2ca1f53f6cabdc07f543e15d695a726a61)) by @ -- **resources:** win service support and mihomo alpha version proxy ([3a1a124](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3a1a124a2e7ef2f5affcdd48f2c8b8c04a371236)) by @ -- shikiji text wrapping err ([ae4371f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ae4371f2ce596747eee3b25fafa93ea3d9f6da91)) by @ -- **updater:** copy logic ([d349ca0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d349ca0a1a4ee64da01ee87ea6f5e58a8d89d2f3)) by @ -- use a workaroud to reduce [#59](https://github.com/LibNyanpasu/clash-nyanpasu/issues/59) ([4afa67b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4afa67bfaa44886e88e03acf2035ea70200ae4c8)) by @ -- win state ([46ac762](https://github.com/LibNyanpasu/clash-nyanpasu/commit/46ac762bc4ff660eda53318071d1b3e08a4fa386)) by @ -- **window:** add a workaround for close event in windows ([81f6d28](https://github.com/LibNyanpasu/clash-nyanpasu/commit/81f6d28bcc93826f4ec9c1c154400cc894e26161)) by @ -- **window:** preserve window state before window minimized ([5127f77](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5127f77e744882e408e1bceaa0b3eff0252bbf54)) by @ +- **ci:** Release build by @greenhat616 -### 🧹 Maintenance +- **ci:** Updater and dev build by @greenhat616 -- bump clash-rs to v0.1.10 ([3a449d3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3a449d37203e3624232452803cd6c99cab619df1)) by @ -- Bump Version 1.4.2 ([517e166](https://github.com/LibNyanpasu/clash-nyanpasu/commit/517e16645abdf3f969d682522693342a883265ad)) by @ -- change manifest upsteram ([12fc695](https://github.com/LibNyanpasu/clash-nyanpasu/commit/12fc6951cb62feea59641f8b8a6e2e5e240a3b30)) by @ -- **deps:** update actions/checkout action to v4 ([#140](https://github.com/LibNyanpasu/clash-nyanpasu/issues/140)) ([30a2f5c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/30a2f5c5307add0768ddf31fb9c1aa0c41d19954)) by @ -- **deps:** update actions/setup-node action to v4 ([#141](https://github.com/LibNyanpasu/clash-nyanpasu/issues/141)) ([5a1e776](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5a1e7761cb57197239df144f7d69a0e6ebc0935d)) by @ -- **deps:** update dependency @actions/github to v6 ([#143](https://github.com/LibNyanpasu/clash-nyanpasu/issues/143)) ([17eee56](https://github.com/LibNyanpasu/clash-nyanpasu/commit/17eee56401b4923e77a8a8c45959b8bc575446f6)) by @ -- **deps:** update dependency @types/fs-extra to v11 ([#144](https://github.com/LibNyanpasu/clash-nyanpasu/issues/144)) ([fe8bb32](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fe8bb321c4c628f44824d1c440adfb56decb7913)) by @ -- **deps:** update dependency eslint to v8.56.0 ([#163](https://github.com/LibNyanpasu/clash-nyanpasu/issues/163)) ([a17e9eb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a17e9eb2db87b0a69b955a60a7db845da7c7d5a8)) by @ -- **deps:** update dependency eslint-plugin-import to v2.29.1 ([1f6bafe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1f6bafef7b681ea6a0d71b7f52e78b499dda0b37)) by @ -- **deps:** update dependency eslint-plugin-n to v16.5.0 ([59a0901](https://github.com/LibNyanpasu/clash-nyanpasu/commit/59a090107a117c4bc72559f733e53f03871c1444)) by @ -- **deps:** update dependency eslint-plugin-prettier to v5.1.0 ([71dca60](https://github.com/LibNyanpasu/clash-nyanpasu/commit/71dca6041474192d6ad22c7d6880adf6e2cf3fe8)) by @ -- **deps:** update dependency eslint-plugin-prettier to v5.1.1 ([61a2746](https://github.com/LibNyanpasu/clash-nyanpasu/commit/61a2746d1d1c8e8fca400ffaf04982694e6cd227)) by @ -- **deps:** update dependency eslint-plugin-prettier to v5.1.2 ([680882f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/680882f9a396655a01a8988c2fc266c435e6c636)) by @ -- **deps:** update dependency fs-extra to v11 ([#109](https://github.com/LibNyanpasu/clash-nyanpasu/issues/109)) ([8009e3b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8009e3b0c7021532303cf9def1c84242b32fb478)) by @ -- **deps:** update dependency https-proxy-agent to v7 ([#145](https://github.com/LibNyanpasu/clash-nyanpasu/issues/145)) ([8673b6a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8673b6a1fe5f7c56b5c9428651534efdd8fd493e)) by @ -- **deps:** update dependency postcss to v8.4.32 ([772928b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/772928b73d4f264c17af97733ce505275ffd799a)) by @ -- **deps:** update dependency shikiji to v0.9.10 ([4828c19](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4828c197cf2cabf531f01b753b14dcf154d3e6b6)) by @ -- **deps:** update dependency shikiji to v0.9.11 ([d840c51](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d840c51a64ed335799ffd295b440ee2d8cf61bc0)) by @ -- **deps:** update dependency shikiji to v0.9.2 ([a1c4632](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a1c463214ff76f20afee179fb0a10ffec8c0fb7a)) by @ -- **deps:** update dependency shikiji to v0.9.3 ([2cd9ac1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2cd9ac1276d8c6279b606ae3ef0637b3ab8c327a)) by @ -- **deps:** update dependency shikiji to v0.9.4 ([5423492](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5423492555c81005c2f1817006afa9059f2ae818)) by @ -- **deps:** update dependency shikiji to v0.9.6 ([0cf6c61](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0cf6c615276f08d098a883dc8ccf29b4095eda95)) by @ -- **deps:** update dependency shikiji to v0.9.7 ([90cabc7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/90cabc73add4856f41b534ec8c053a5f879c7d2d)) by @ -- **deps:** update dependency shikiji to v0.9.9 ([4b2624b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4b2624b2b5e5a17bbc7b869e7ab16b6d7ba9efa6)) by @ -- **deps:** update dependency tsx to v4.6.2 ([3e8fb15](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3e8fb15fa5d41df2a4ab4bbdc3b35924ecf7e703)) by @ -- **deps:** update dependency tsx to v4.7.0 ([75ea834](https://github.com/LibNyanpasu/clash-nyanpasu/commit/75ea8345f7924d354e36a250e1cec3d237eed549)) by @ -- **deps:** update dependency vite to v5 ([#72](https://github.com/LibNyanpasu/clash-nyanpasu/issues/72)) ([cd0c874](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cd0c874e25739de5d94ba681abd7544d0d6b8df1)) by @ -- **deps:** update lint packages ([1802620](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1802620be5016a62faf250f5a2f00abb821b2a3a)) by @ -- **deps:** update lint packages ([#146](https://github.com/LibNyanpasu/clash-nyanpasu/issues/146)) ([153ccf1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/153ccf1c20ff420854aff3bde901ef4165457017)) by @ -- **deps:** update lint packages to v6.14.0 ([#127](https://github.com/LibNyanpasu/clash-nyanpasu/issues/127)) ([dc109a9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dc109a9ead678ff2d2e520dcefc22aae87756ad8)) by @ -- **deps:** update lint packages to v6.15.0 ([ec3df1e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ec3df1e81a66148506aa7f33fcdc920e24a2c6d2)) by @ -- fix missing macOS aarch64 build ([a3cb48b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a3cb48b62c242047a073049ed20d381011eaabf5)) by @ -- rename clash-meta to mihomo ([072b3f6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/072b3f6f26b7a65f9be696de33d7f25ed77b64f6)) by @ -- update deps ([1fcd126](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1fcd126d109b5fe76028e19245ffb78977cedd31)) by @ -- update issue templates ([#77](https://github.com/LibNyanpasu/clash-nyanpasu/issues/77)) ([ec94eba](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ec94eba07177186bef1cd760ebb1d7e05de2bd57)) by @ -- use gh-actions user ([60fae64](https://github.com/LibNyanpasu/clash-nyanpasu/commit/60fae64f4fb691f8637a620b72bcbb0335e09d6c)) by @ +- **dialog:** Align center and overflow issue by @greenhat616 + +- **lint:** Toml fmt by @greenhat616 + +- **resources:** Win service support and mihomo alpha version proxy by @greenhat616 + +- **updater:** Copy logic by @greenhat616 + +- **window:** Preserve window state before window minimized by @greenhat616 + +- **window:** Add a workaround for close event in windows by @greenhat616 + +- Minor tweak base-content width by @keiko233 + +- Shikiji text wrapping err by @keiko233 + +- Dark shikiji display color err by @keiko233 + +- Pin runas to v1.0.0 by @greenhat616 + +- Lint by @greenhat616 + +- Bump nightly version after publish by @greenhat616 + +- I18n resources by @greenhat616 + +- Format ansi in log viewer by @greenhat616 + +- Delay color, closing #124 by @greenhat616 + +- #96 by @greenhat616 + +- #92 by @greenhat616 + +- Lint by @greenhat616 + +- Ci by @greenhat616 + +- Ci by @greenhat616 + +- Ci by @greenhat616 + +- Dev build branch issue by @greenhat616 + +- Icon issues, close #55 by @greenhat616 + +- Use a workaroud to reduce #59 by @greenhat616 + +- Win state by @greenhat616 ### 📚 Documentation -- put issue config into effect ([#148](https://github.com/LibNyanpasu/clash-nyanpasu/issues/148)) ([fddb447](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fddb447800d52cededd6e2692708bb5b7b6492da)) by @ -- update issues template & upload ISSUE.md ([259e348](https://github.com/LibNyanpasu/clash-nyanpasu/commit/259e348e4d451a4fa4cbe7709f5a043ccfc06ea9)) by @ -- upload missing issue config ([b5902b7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b5902b7e57621cfa350005c94f8c92c3f1b137b8)) by @ +- Put issue config into effect (#148) by @txyyh in [#148](https://github.com/LibNyanpasu/clash-nyanpasu/pull/148) -### 🔨 Refactoring +- Upload missing issue config by @txyyh -- profile updater ([b141f2a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b141f2a8d4fc10e9774b5ab4776907452e73e5ef)) by @ -- **tasks:** provide a universal abstract layer for task managing ([#15](https://github.com/LibNyanpasu/clash-nyanpasu/issues/15)) ([ad82b58](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ad82b58d0bddeaa171ecb46bc4c5cc41d68e92e2)), closes [#48](https://github.com/LibNyanpasu/clash-nyanpasu/issues/48) by @ +- Update issues template & upload ISSUE.md by @keiko233 -## [1.4.1](https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.0...v1.4.1) (2023-12-06) +### 🔨 Refactor + +- **tasks:** Provide a universal abstract layer for task managing (#15) by @greenhat616 + +- Profile updater by @greenhat616 + +--- + +## New Contributors + +- @yswtrue made their first contribution +- @txyyh made their first contribution in [#148](https://github.com/LibNyanpasu/clash-nyanpasu/pull/148) + +**Full Changelog**: https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.1...v1.4.2 + +## [1.4.1] - 2023-12-06 ### ✨ Features -- add page transition duration options ([83b9660](https://github.com/LibNyanpasu/clash-nyanpasu/commit/83b966051fbfe3e1b9d44db9982b3f9a3b07f49d)) by @ -- add page transition mode switch ([41fbbb7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/41fbbb7726428c9fb3b370e749cb5e59fe196502)) by @ -- add tooltip for tray ([#24](https://github.com/LibNyanpasu/clash-nyanpasu/issues/24)) ([e6cc440](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e6cc44064cfdfa28e3b46999f4dcf0bdd1c2e5cc)) by @ -- Add UWP tool support, fix install service bug ([#19](https://github.com/LibNyanpasu/clash-nyanpasu/issues/19)) ([b09331e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b09331e251673b3c45f54dae70de0719fd371f74)) by @ -- experimental support `clash-rs` ([#23](https://github.com/LibNyanpasu/clash-nyanpasu/issues/23)) ([7e7ce41](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7e7ce414aac22ed96fdde7ae5f2ef851d33237cc)) by @ -- new style win tray icon ([4015cb3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4015cb345b3e79f5504d826431406b53230105fd)) by @ -- support drag profile item ([#36](https://github.com/LibNyanpasu/clash-nyanpasu/issues/36)) ([0b8f9ed](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0b8f9ed6244b3ac573be58a0ad91a1fe810cf7e6)) by @ -- support new clash field ([87e0f5e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/87e0f5ea426674c0c382d538c801bf1c8d44d909)) by @ -- support random mixed port ([#29](https://github.com/LibNyanpasu/clash-nyanpasu/issues/29)) ([86e29ee](https://github.com/LibNyanpasu/clash-nyanpasu/commit/86e29ee75f44ed9b9a040fd195e6ed4ec17b15bd)) by @ -- **transition:** add none and transparent variants ([9087b9a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9087b9a204791a757d1922f0875c4646f0a80943)) by @ -- update new clash.meta close [#20](https://github.com/LibNyanpasu/clash-nyanpasu/issues/20) ([#30](https://github.com/LibNyanpasu/clash-nyanpasu/issues/30)) ([858de14](https://github.com/LibNyanpasu/clash-nyanpasu/commit/858de148feac19ce2491c7aa61e96a2af474a3f9)) by @ -- use framer-motion for smooth page transition ([45aa11e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/45aa11e4dfb41875df8586376b978cefac1a6983)) by @ -- use tauri notification api ([d54ae01](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d54ae01c7e29e0270c70b6b5e674fcc467b42c15)) by @ -- use twemoji to display flags in win ([#48](https://github.com/LibNyanpasu/clash-nyanpasu/issues/48)) ([83dcf47](https://github.com/LibNyanpasu/clash-nyanpasu/commit/83dcf47e95964e11351085f261e1c652dd2c1e5b)) by @ -- use workspace in backend ([11ae5ef](https://github.com/LibNyanpasu/clash-nyanpasu/commit/11ae5ef4a9d94fe5c812c11a65b2ed8e667a9dc4)) by @ +- **transition:** Add none and transparent variants by @greenhat616 + +- Use twemoji to display flags in win (#48) by @greenhat616 in [#48](https://github.com/LibNyanpasu/clash-nyanpasu/pull/48) + +- Add page transition mode and duration options by @keiko233 in [#42](https://github.com/LibNyanpasu/clash-nyanpasu/pull/42) + +- Add page transition duration options by @greenhat616 + +- Add page transition mode switch by @greenhat616 + +- Use framer-motion for smooth page transition by @greenhat616 + +- Support new clash field by @greenhat616 + +- Support drag profile item (#36) by @Kuingsmile in [#36](https://github.com/LibNyanpasu/clash-nyanpasu/pull/36) + +- Use tauri notification api by @keiko233 + +- Update new clash.meta close #20 (#30) by @Kuingsmile in [#30](https://github.com/LibNyanpasu/clash-nyanpasu/pull/30) + +- Support random mixed port (#29) by @Kuingsmile in [#29](https://github.com/LibNyanpasu/clash-nyanpasu/pull/29) + +- Use workspace in backend by @greenhat616 + +- New style win tray icon by @keiko233 + +- Add tooltip for tray (#24) by @Kuingsmile in [#24](https://github.com/LibNyanpasu/clash-nyanpasu/pull/24) + +- Experimental support `clash-rs` (#23) by @greenhat616 in [#23](https://github.com/LibNyanpasu/clash-nyanpasu/pull/23) + +- Add UWP tool support, fix install service bug (#19) by @Kuingsmile in [#19](https://github.com/LibNyanpasu/clash-nyanpasu/pull/19) ### 🐛 Bug Fixes -- i18n typos ([7459e41](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7459e41c0c311a2a15ce1c3fb44454a97edad29b)) by @ -- item col width too narrow ([341f76f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/341f76fdc1498e2fa4732665a55fe8afaa02879e)) by @ -- lint ([fd972d2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fd972d24afdd75122beec2a5c7195ded9cc5627c)) by @ -- lint ([98a647d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/98a647dfe651407249b64f758e21ec145b8e83d1)) by @ -- missing scss import ([af006fa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/af006fa0f95cd19529124bc191434f3d0fef0bcf)) by @ -- osx-aarch64-upload bundlePath typos ([bb354a9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bb354a9de089e16974142f2136cc7013d15cb7ad)) by @ -- portable missing clash-rs core ([3f962e7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3f962e77017998acc4004989eee3c2b6c30c7858)) by @ -- Portable target dir ([b14325f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b14325f3dfad120197dbaaf0b797f42e9795d362)) by @ -- taskbar maximize toggle icon state ([#46](https://github.com/LibNyanpasu/clash-nyanpasu/issues/46)) ([8d76f7a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8d76f7a446cf8dc1d1c6f9cd2341031962db49a8)) by @ -- workflow script typos ([3fe3cd1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3fe3cd1c3efeddc7435fa0fa5bab969c6488e064)) by @ +- Taskbar maximize toggle icon state (#46) by @greenhat616 in [#46](https://github.com/LibNyanpasu/clash-nyanpasu/pull/46) -### 🧹 Maintenance +- Missing scss import by @greenhat616 -- add rustfmt check ([a0c16ef](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a0c16ef1c0cc178deb4a9d9ab917fb3b8a113d56)) by @ -- add stylelint ([542cf32](https://github.com/LibNyanpasu/clash-nyanpasu/commit/542cf32cecb4d535e6fd7eb23a835c2289e04a5d)) by @ -- add test scripts ([bb44f65](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bb44f65439f9f6788d6f6443418a024d3d0b051d)) by @ -- add updater workflow ([0820d6d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0820d6d6fbd91e6c2e6c7f605bdeeed99586ada3)) by @ -- Bump Version to 1.4.1 ([4dbe309](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4dbe309d8e6b889b6301dbef1bebb83817f757f8)) by @ -- clean up workflows ([5402214](https://github.com/LibNyanpasu/clash-nyanpasu/commit/540221467a35d90c48cb27dd182c8f173523a1fb)) by @ -- commitlint ([8e68421](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8e684215b2ea717230fc8b3c1854fd322bf4fbc8)) by @ -- configure eslint ([3b2b489](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3b2b489d1e369bfe95fdc5b2c46d201529b2ee5d)) by @ -- configure renovate ([43f1828](https://github.com/LibNyanpasu/clash-nyanpasu/commit/43f18283337ca77862085f0c72ded374e2a0373e)) by @ -- dev build support macOS aarch64 ([60e36b4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/60e36b480387f858fe33a21045f4c227678b0ee2)) by @ -- fix missing assets type ([2322733](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2322733427e9b9c1fe5bbf1027007df97421fcf6)) by @ -- fix typos ([3f2ce3c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3f2ce3cb8058e972db5bc00f43f43e2ae0415d3e)) by @ -- fix typos ([0c2e4fe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0c2e4fe34a4ae19d98a703ebbdcff99461c21211)) by @ -- fmt ([1554ed7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1554ed7cc35a902158969a2e6cd8fcc463847b0c)) by @ -- fmt ([35aa063](https://github.com/LibNyanpasu/clash-nyanpasu/commit/35aa063d44eee2aa66e182b96ffb624c70d5cd4e)) by @ -- **lint:** ignore extra cargo fmt job ([ef06e59](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ef06e59fee4e4100da13fdd256a53de6f14fbe76)) by @ -- no need for second build ([d58c299](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d58c29907d105eadf7d4aa89beb18f6929cf7225)) by @ -- remove un supported platform ([a8c74e3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a8c74e39c210d5259312fefea63e5a8f20ebab42)) by @ -- remove un supported platform ([d76e8fe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d76e8fe85a2886e2b1fb7847fd8801e6cdcddf63)) by @ -- tauri modify desc ([d6960e7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d6960e7f21396cfbee3407b1ad724667d71cec60)) by @ -- test: fix missing env & upload to release ([9e2ae31](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9e2ae311cd47f7b6fb60e77283955b21c9bbb846)) by @ -- test: macos aarch64 build ([0c9a9f0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0c9a9f01f59b4384cd102371b2b5b7315b651e16)) by @ -- **transition:** reduce slide animation duration ([4bc980f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4bc980fbedc82fce3ba8c7a91d5f43d0f300238d)) by @ -- try fix lint-stage color issue ([419efc3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/419efc36d7b6d8cfa53ba3401544cda511071df2)) by @ -- use clash meta v1.17.0 ([93fe0ca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/93fe0cada158f9d6d064eddf30e662600477800d)) by @ -- use lint-staged instead of pretty-quick ([a48cb6d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a48cb6d98a17a6e1e5ede9348ea899a5bc54e70c)) by @ +- Lint by @greenhat616 + +- Lint by @greenhat616 + +- Workflow script typos by @keiko233 + +- Osx-aarch64-upload bundlePath typos by @keiko233 + +- Portable target dir by @keiko233 + +- Portable missing clash-rs core by @keiko233 + +- Item col width too narrow by @keiko233 + +- I18n typos by @keiko233 ### 📚 Documentation -- add preview gif ([30b6c87](https://github.com/LibNyanpasu/clash-nyanpasu/commit/30b6c87a49ce651d961bf2d10c8026d260989e14)) by @ +- Add preview gif by @keiko233 -### 🔨 Refactoring +### 🔨 Refactor -- **scripts:** use ts and consola instead ([cd2fcea](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cd2fcea55f4c6b90ffb580abeb38a59021835ad1)) by @ +- **scripts:** Use ts and consola instead by @greenhat616 -## [1.4.0](https://github.com/LibNyanpasu/clash-nyanpasu/compare/1afaa4c51ea0cc79c2e2ecb225dc4ea78864080c...v1.4.0) (2023-11-15) +- Use `workspace` in backend by @keiko233 in [#28](https://github.com/LibNyanpasu/clash-nyanpasu/pull/28) + +--- + +## New Contributors + +- @Kuingsmile made their first contribution in [#36](https://github.com/LibNyanpasu/clash-nyanpasu/pull/36) + +**Full Changelog**: https://github.com/LibNyanpasu/clash-nyanpasu/compare/v1.4.0...v1.4.1 + +## [1.4.0] - 2023-11-15 + +### ✅ Testing + +- Windows service by @zzzgydi ### ✨ Features -- add animation ([eb28ec8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eb28ec866ae64ccfbf03af7bd3a5761c69980d6b)) by @ -- add animation to ProfileNew component ([#252](https://github.com/LibNyanpasu/clash-nyanpasu/issues/252)) ([a45dc6e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a45dc6efda76c293d90ea0d63cb8907c1d3462e8)) by @ -- add baseContentIn animation ([34cb796](https://github.com/LibNyanpasu/clash-nyanpasu/commit/34cb796505bc1d90ea32128e5b14e55cc58912be)) by @ -- add chains[0] and process to connections display ([#205](https://github.com/LibNyanpasu/clash-nyanpasu/issues/205)) ([6423a29](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6423a296008aa82875d4dc50350261ace1b2cc74)) by @ -- add check for updates button, close [#766](https://github.com/LibNyanpasu/clash-nyanpasu/issues/766) ([f4c7b17](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f4c7b17a87ae853ad67fdcea727e93266babf779)) by @ -- add Connections Info to ConnectionsPage ([88d3bba](https://github.com/LibNyanpasu/clash-nyanpasu/commit/88d3bba30033c49b760628b974cc12b907ae1496)) by @ -- add default user agent ([b74696a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b74696adbad1c213b0b9a3e8be4dd87628e2a105)) by @ -- add draft ([09965f1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/09965f1cc675aea6af74dc225398cf47bfa4c76b)) by @ -- add empty ui ([b915f3b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b915f3b1a936b76b684ddf5ff5340b1b9539f1b3)) by @ -- add error boundary ([9d2017e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9d2017e598a7821cbd83ada66ade3d8b84fa790d)) by @ -- add error boundary to the app root ([6a97451](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6a9745171ea4796d7961db8802cdcbbe4e62156e)) by @ -- add favicon ([3be2f5c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3be2f5c4049290575d59c01e856ea89b918a2e0f)) by @ -- add Linux open dir support ([cb94d84](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cb94d8414f05ce04915ae4fb230096d9f0f8ab31)) by @ -- add meta feature ([c51e9e6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c51e9e6b2cf6d9c3edb6931e3bba8e699c4c5080)) by @ -- add Open Dashboard to the hotkey, close [#723](https://github.com/LibNyanpasu/clash-nyanpasu/issues/723) ([3efd575](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3efd575dd206c32b15c4187ee53916fddfeda6ba)) by @ -- add paste and clear icon ([ad228d5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ad228d53b710a6c4aa3da4065a7a0abd115dc818)) by @ -- add pre-dev script ([023e771](https://github.com/LibNyanpasu/clash-nyanpasu/commit/023e7715941011e0bbf7c734afc3172cc14a543e)) by @ -- add proxy item check loading ([a2cf26e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a2cf26e7ed35744f60b012d28f9dd7a524652e27)) by @ -- add put_profiles cmd ([0c23845](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0c238459708032116e5a3c83881e7d560b314709)) by @ -- add repo link ([2bcaf90](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2bcaf90fc842cb904c80d5b8582b0659f451811f)) by @ -- add restart core button ([9a29c9a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9a29c9abddc7e60301aeea36d7159e694cd5a265)) by @ -- add route transition ([1eb34e0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1eb34e0662379e473ffee5993c506f451cfbf68b)) by @ -- add rule page ([b23d3f7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b23d3f7c8b6cfadfee507df016a94ec4bc3bb3ef)) by @ -- Add Russian Language ([#697](https://github.com/LibNyanpasu/clash-nyanpasu/issues/697)) ([2c48ea3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2c48ea35083fb16d47d2585703d318995f5a60c8)) by @ -- add serval commands ([13ceb1e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/13ceb1e44596c7b6907f01159c2015a9134ad6b7)) by @ -- add some clash api ([4bb9e10](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4bb9e10946878d36a8652fbb40bd2c150a0e3ed2)) by @ -- add some commands ([2d0b63c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2d0b63c29d9ee99841fdfd2d951b16859694f247)) by @ -- add sub-rules ([7f65c50](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7f65c501c684bd949a31000435071badfa008f6f)) by @ -- add text color ([c009026](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c009026961949973eb0bed2847912120b80fc00d)) by @ -- add text color ([3ec2b46](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3ec2b46d28b11e01604a52a9fec79d4feef5a351)) by @ -- add theme setting ([aec30b8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aec30b89e0100a93605f61307948a967bb66a854)) by @ -- add unified-delay field ([416e788](https://github.com/LibNyanpasu/clash-nyanpasu/commit/416e7884f5e0b825a6853f0c50c62a2c8201c145)) by @ -- add update interval ([cb661aa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cb661aaebde80e8c6dcca1eba996053fc81de25e)) by @ -- add use clash hook ([28d3691](https://github.com/LibNyanpasu/clash-nyanpasu/commit/28d3691e0b7f7155a3bf322b4baf1d68ba123627)) by @ -- add use-notice hook ([97f2bc8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/97f2bc876149c2b4ab294c7888a88572752c4fd2)) by @ -- add version on tray ([56fe7b3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/56fe7b35965d2a2335656cd09f5fe7574cd0eaf7)) by @ -- add wintun.dll by default ([7074bbc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7074bbc4055cdf59c642c32d9dc6a8b0858a1d71)) by @ -- adjust builtin script and support meta guard script ([fe81687](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fe8168784f0504c2ac26cfbc65051305cabe9486)) by @ -- adjust clash info parsing logs ([7f321c8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7f321c89cbeb0f735fd8d15b871163e6dd52ec7c)) by @ -- adjust clash log ([f425fba](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f425fbaf9db8bff6766f56bac448443b49709a14)) by @ -- adjust clash version display ([f6e821b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f6e821ba6b2b8dae508744d4571b0d2c7dd45cf4)) by @ -- adjust code ([694a776](https://github.com/LibNyanpasu/clash-nyanpasu/commit/694a7760b7ae24959d6f96252d1f78f4f7025514)) by @ -- adjust connection page ui ([a6b2db1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a6b2db182d4b30a704adc77b53500405d95e8aab)) by @ -- adjust control ui ([3480d50](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3480d50f61977177c78ee3555ba94961406cd64d)) by @ -- adjust fetch profile url ([c60578f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c60578f5b53c23d45bf3efe1c3a2e05797c058ca)) by @ -- adjust macOS window style ([23b728a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/23b728a762917931d29c73641f6a2f7b34fcca05)) by @ -- adjust profile item menu ([f2c0462](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f2c04621a5134710488873207be6b5219e5d6518)) by @ -- adjust profile item ui ([794d376](https://github.com/LibNyanpasu/clash-nyanpasu/commit/794d37634827dbc261efe94a633228374c72429a)) by @ -- adjust profiles page ui ([7338838](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7338838b0e9e43f793321e7af4133412c0656aa3)) by @ -- adjust proxy page ([5fcd255](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5fcd25506efef7d0777f9c0490d17144d4736c30)) by @ -- adjust runtime config ([78f97ce](https://github.com/LibNyanpasu/clash-nyanpasu/commit/78f97ce4dfb78cbfffb86f5c3da5addd2e564a57)) by @ -- adjust setting page style ([0891b5e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0891b5e7b7eb109a5a527797a690ed1a5eae84bf)) by @ -- adjust setting typography ([4097778](https://github.com/LibNyanpasu/clash-nyanpasu/commit/40977785c3d3ca1c4360ffdc592e8a331556319c)) by @ -- adjust theme ([5e2271b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5e2271b2373c39928f9d5d762bd394ad3f7d3356)) by @ -- adjust tun mode config ([178fd8e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/178fd8e82853ba04b9b32e9f9780d125765af8b4)) by @ -- app log level add silent ([6b0ca29](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6b0ca2966ebb1a24ec9f6df5ca9b2ef15633f79a)) by @ -- auto close connection when proxy changed ([0cfd718](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0cfd718d8a178b17cd97f33c77bcd01c00772b76)) by @ -- auto proxy layout column ([024db43](https://github.com/LibNyanpasu/clash-nyanpasu/commit/024db4358b4d5aab701301005396c4efd7466c67)) by @ -- auto restart core after grand permission ([4ae409c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4ae409c7f45efadb8ad89a428c11788f76e2a9ce)) by @ -- auto update profiles ([f72536b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f72536bce017532faea8d159a75f2e6f5fc6c655)) by @ -- base-dialog: okBtn use LoadingButton ([f57c49c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f57c49ce3a77e7eee76bc86dd4018320433e2ab0)) by @ -- center window when out of monitor ([af70468](https://github.com/LibNyanpasu/clash-nyanpasu/commit/af704681d99c1c554eec9b6d01b31d0908bfe9e2)) by @ -- change allow list ([22b11db](https://github.com/LibNyanpasu/clash-nyanpasu/commit/22b11db16e657baf0f3502c9c1ba5b8077ba84c0)) by @ -- change clash port in dialog ([ff2c1bf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ff2c1bf8ed23405e0a97098024311efd91a744cc)) by @ -- change default latency test url ([8c8171e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8c8171e7746e3d46f08cf52630e3df2454f0082a)) by @ -- change default singleton port and support to change the port ([c058c29](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c058c29755419c16df6492bbbacc1e5c26f85bc3)) by @ -- change global mode ui, close [#226](https://github.com/LibNyanpasu/clash-nyanpasu/issues/226) ([f062f7f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f062f7f9feadf75e5fc8ee128f6cff71ff3e11e6)) by @ -- change log file format ([bf5680d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bf5680da6133aab5123f25290848111f84dc342f)) by @ -- change rule page ([03b3a0b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/03b3a0b8b30d46c48de9436819b78f58462acd63)) by @ -- change system porxy when changed port ([47155a4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/47155a4a29188f6bba5fcfe2f543a0c25635472e)) by @ -- change the log level order ([8738fa3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8738fa3d4f70ef1b8d7b1f6257d8cff8a2be6d74)) by @ -- change the naming strategy ([ef3b10f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ef3b10fa8f76bcc244c238680a8ea160a998c04b)) by @ -- change type ([d982b83](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d982b83e14b2fb1f439ca9a7273a908e492a5683)) by @ -- change window style ([97ec5ea](https://github.com/LibNyanpasu/clash-nyanpasu/commit/97ec5eabf7c559b4d77b15427cef098d200d736e)) by @ -- check config when change core ([48e14b3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/48e14b36b8d39d28b30cb39409a831ad97d8f69e)) by @ -- check remote profile field ([5504994](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5504994cb92f8b15f88241d9e0a262656c57b92e)) by @ -- check the remote profile ([9694af8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9694af82f4dcf99243f926a79d1d8512789aceaf)) by @ -- clash field viewer wip ([066b080](https://github.com/LibNyanpasu/clash-nyanpasu/commit/066b08040a884cfc0b110b2b5d6253235fe32597)) by @ -- clash meta core support (wip) ([b3a72d5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b3a72d55aecf16829384467b8177fb18589bf776)) by @ -- clash meta core supports ([be9ea4e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/be9ea4ea8ef236528f0eee2ad3788cc898daee64)) by @ -- clash tun mode supports ([d7c5ce0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d7c5ce0750e69b9368e80da73fc4d796b683a0f5)) by @ -- ClashFieldViewer BaseDialog maxHeight usage percentage ([#813](https://github.com/LibNyanpasu/clash-nyanpasu/issues/813)) ([f5ee6f3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f5ee6f3537a6577c30eff9a2535a02881de1400c)) by @ -- compatible profile config ([19c7b59](https://github.com/LibNyanpasu/clash-nyanpasu/commit/19c7b59883922cd7622aeff75a84cdddba4ee736)) by @ -- compatible with macos(wip) ([2b84bbf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2b84bbf3a871f0dd948a1a75c92ce23df2d373e5)) by @ -- compatible with proxy providers health check ([71e6900](https://github.com/LibNyanpasu/clash-nyanpasu/commit/71e69003757201207cfbd35fdb0ddea0faf172a3)) by @ -- complete i18n ([ab58968](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ab58968f4d66604343d2dbc5f27a065d7b8128c2)) by @ -- connections page simply support ([5b886fe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5b886fe6be6db5acc6705e78e4fd53229287dc0a)) by @ -- connections page supports filter ([41b0e05](https://github.com/LibNyanpasu/clash-nyanpasu/commit/41b0e05f624752a5d6a5df5c7869147aed798f92)) by @ -- control final tun config ([cde1738](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cde17385b4b3378757de5ddd7d89736c089bf966)) by @ -- create local profile with selected file ([98fa4d5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/98fa4d5e6551991dd76d183d56e76484b1508886)) by @ -- custom window decorations ([e86d192](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e86d192db7876c8f0ffffcbc006b15b0931db2c5)) by @ -- dayjs i18n ([ed3fc50](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ed3fc50858f898761d80640dca3b2b6db89a8cb0)) by @ -- default disable ipv6 ([ae8197b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ae8197be8b079d5b9fc744838c980df8b7d19a90)) by @ -- default enable unified-delay & tcp-concurrent with use meta core ([eafb027](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eafb0274a7736211cc74b93bcd3a6accc8a6e6ab)) by @ -- default use meta core ([2981bb3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2981bb3f1941ebdb7c8dcf5d16210ae1995020d5)) by @ -- default user agent same with app version ([f683780](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f68378041f90fe6d1bdc56d2cbadb361d414e688)) by @ -- delay put profiles and retry ([b3cd207](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b3cd207444508c4b2b5e8c71084a304127fc4892)) by @ -- delete file ([30dd298](https://github.com/LibNyanpasu/clash-nyanpasu/commit/30dd298fcaf21152a36e9751a2b787d23b512e32)) by @ -- disable script mode when use clash meta ([8086b6d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8086b6d78c8d8591a13f312e1584a75531ebe96c)) by @ -- disable user select ([8548373](https://github.com/LibNyanpasu/clash-nyanpasu/commit/85483737426f97a220dcd79e7267fe6c46ddbb41)) by @ -- display clash core version ([6e3cc57](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6e3cc57f480900098bb4963cc8aac886c8399226)) by @ -- display delay check result timely ([a6ac75e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a6ac75e97bc8057de0e2a98cd8a059b4937f2718)) by @ -- display proxy group type ([2f9bf7f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2f9bf7f063aa834fb48cca0c9eab75f65618590f)) by @ -- display version ([61b9670](https://github.com/LibNyanpasu/clash-nyanpasu/commit/61b9670b457e9257509d8b9cbc6e0bcc284cc237)) by @ -- distinguish level notice ([83c0bde](https://github.com/LibNyanpasu/clash-nyanpasu/commit/83c0bde22ba560fb8f4f04d8136c146b7f0a025f)) by @ -- edit profile item ([17f1c48](https://github.com/LibNyanpasu/clash-nyanpasu/commit/17f1c487a84f16ca885fb73ef622fc1658eb78dc)) by @ -- edit system proxy bypass ([78a0cfd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/78a0cfd052d6ecf428786a67a4de8ccf17d312cc)) by @ -- enable change mixed port ([d0b87fd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d0b87fd7c39de00bec9bee489e9ca29888681d3b)) by @ -- enable change proxy mode ([6a8ffe1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6a8ffe164292088c49dd7fc88ea9b161ce031db7)) by @ -- enable customize guard duration ([4ff625f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4ff625f23be3c43c13e0ed6380655a3b6588130a)) by @ -- enable force select profile ([5eddf4f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5eddf4f1aa0b13383654726a66fbf88fbf6b12d2)) by @ -- enable show or hide traffic graph ([0245baf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0245baf1b67bfea2c5d236b5b9a913fb1041af1d)) by @ -- enable update clash info ([65fb2ca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/65fb2ca2d521385ba376cfeb479bc555480b83a6)) by @ -- enhance clash caller & support more commands ([881a955](https://github.com/LibNyanpasu/clash-nyanpasu/commit/881a95520a83fb7e692b5080e1b4205cf506e4cd)) by @ -- enhance connections display order ([4b6189a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4b6189af5feabe08214d6d1de012ca7362795810)) by @ -- enhance log data ([dd15455](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dd15455031a5fe2eec6573e018123cae2be4fb6f)) by @ -- enhance profile status ([d63d49f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d63d49f246494cf707e6f09102604e5c51d937fe)) by @ -- enhance system proxy setting ([013dc5f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/013dc5f4b5b8fa63bc6395b8088b4cb5fe4d17fd)) by @ -- enhanced mode supports more fields ([c9649ac](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c9649ac50156e0a432a1b2e94d16662ffc0bec19)) by @ -- enhanced profile (wip) ([f260d5d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f260d5df49a2e0eb8b7bac38e7059f28aa04a784)) by @ -- event emit when clash config update ([c1eb539](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c1eb539a5ce8553e3dda2916fe55985e7ba694b9)) by @ -- fill i18n ([7439633](https://github.com/LibNyanpasu/clash-nyanpasu/commit/743963318f2755cde031ab771a98dc1ca3b7e299)) by @ -- fill verge template ([e12e3a3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e12e3a3f2d4d94f5a9478d2803b3f7938716a7d8)) by @ -- filter proxy and display type ([9df3619](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9df361935f757108d7bdc23abcfb351d808a4700)) by @ -- finish clash field control ([99c4668](https://github.com/LibNyanpasu/clash-nyanpasu/commit/99c46685ac58820a0de2dcf7f82ce4c3382dae35)) by @ -- finish main layout ([a1e99e5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a1e99e53036c206fe7660ee4ced637d4923f80ef)) by @ -- finish some features ([c13a755](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c13a755eb656172b8763f1c97053ce41f4f8457c)) by @ -- fix typo ([a2320b3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a2320b3f8d76f1d40a57781801e8743fdb633952)) by @ -- get profile file name from response ([1bff7d5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1bff7d5b0becfb168f2acf0102162c9e7064c9c4)) by @ -- github actions support ([fc0df7b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fc0df7b5773c2b4a63b94ca0d1c1228ac860b1ed)) by @ -- global proxies use virtual list ([f0f45e0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f0f45e007df8b6cf0ec757ae0ced6c9680b0d512)) by @ -- guard state supports debounce guard ([8606af3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8606af3616350ef16ba7ff72e03350646406703e)) by @ -- guard the mixed-port and external-controller ([f95ddd5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f95ddd594eec4bcfa57ea6cb7356ce92ac2c8be4)) by @ -- handle remote clash config fields ([fd99ba6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fd99ba6255731e8019d5eb4e25a968db4f45bf93)) by @ -- hide command window ([e8dbcf8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e8dbcf819b24bb921bd7f351abc46dc9d78009b1)) by @ -- hide window on macos ([7597d33](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7597d335b9bd67862f4f68719087d9bc7a98c846)) by @ -- hotkey viewer ([f8d9e5e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f8d9e5e0276854dfe9013485f5e6a176875d7d7b)) by @ -- i18n supports ([4991f7f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4991f7ff39626156077674f2ef932ea9467d6e89)) by @ -- implement a simple singleton process ([34725b5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/34725b517b249b3b341fe02459457f77ca24df1d)) by @ -- import profile support ([b0dabbe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b0dabbe55a8980fabe00467d0fe4d9645c2969b3)) by @ -- improve log rule ([4f6fceb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4f6fceb87f7ac351ecd7b8efd3739fd88da86674)) by @ -- improve yaml file error log ([b428eff](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b428eff10e5faaeaf0a91de9911331e2d5e11755)) by @ -- init verge config struct ([5b826a3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5b826a3767d272dc9a6eb6742c364f69719ab942)) by @ -- inline config file template ([3a9a392](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3a9a392a772b8e7c350e329f72fb74bb1648e6b7)) by @ -- interval update from now field ([18a6bfd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/18a6bfd73ab8e670e748b7345aadbede8aaa1597)) by @ -- kill clash by pid ([fcee41f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fcee41f00dff127dd50531bfd8496c29b247723f)) by @ -- kill sidecars when update app ([f709117](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f709117cc40a9c2a96a9008ada04c8cadcc819a9)) by @ -- **layout:** add logo & update style ([0028bef](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0028bef559cf93fe777a4a86ab82db3611319527)) by @ -- light mode wip ([#96](https://github.com/LibNyanpasu/clash-nyanpasu/issues/96)) ([5164aec](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5164aec37b2c6fe92d7fc43762058f7019337558)) by @ -- linux system proxy ([7877431](https://github.com/LibNyanpasu/clash-nyanpasu/commit/78774315cbd4d44baba07a14ecd852aa0eb65dc6)) by @ -- lock profiles file and support more cmds ([d75fb15](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d75fb152c21d98701efa1f9192933e92483f1a15)) by @ -- lock some async functions ([0ff8bb8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0ff8bb8090e55c8da9bfed5516df952191c457d5)) by @ -- log info ([9e7c7ac](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9e7c7ac16355fa60d6521b4fca7aa6612a16584a)) by @ -- log page supports filter ([847d5f1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/847d5f1b3b18219454979420241f39a608c87e04)) by @ -- **macOS:** support cmd+w and cmd+q ([22c2382](https://github.com/LibNyanpasu/clash-nyanpasu/commit/22c2382765edb97eac9167bfa8dcec2863d3d2d3)) by @ -- manage clash config ([d49fd37](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d49fd37656f611bfab2fbb17d9a46eebe8c78fdc)) by @ -- manage clash mode ([ab1b589](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ab1b5897a6dda9d59a80e5d34bf45edaa03dbe22)) by @ -- Material You! ([01d6310](https://github.com/LibNyanpasu/clash-nyanpasu/commit/01d631033f47bdf305d9e0bdb8361681a95beb7e)) by @ -- menu item refresh enhanced mode ([dad94ed](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dad94edb20a793ea0856a1ab3fbb1644ce82115b)) by @ -- minor tweaks ([575a14e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/575a14e1f306b109b26800b2a008f8db96cba592)) by @ -- more trace logs ([0cf3bba](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0cf3bba118cbd6da6f4fbab770e8d5f0817eff23)) by @ -- native menu supports ([d05d8d6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d05d8d6a9e7276f04c962a728646c6ebb8cfb0b6)) by @ -- new profile able to edit name and desc ([5b779b4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5b779b4f14d2c09a30edd5dfe573bb4e2f28d61d)) by @ -- new setting page ([adc634e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/adc634e5ea66efa7dcf51f845a0ea88766179117)) by @ -- Nyanpasu Misc ([91074be](https://github.com/LibNyanpasu/clash-nyanpasu/commit/91074bebd6133382b89952289dc68ad341618cda)) by @ -- Nyanpasu Misc ([49f41ab](https://github.com/LibNyanpasu/clash-nyanpasu/commit/49f41abfdb226077a024f51c688acff4397ed9fe)) by @ -- only put some fields ([cb8c705](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cb8c7057ee7229e019f23b3b1a4333961da254c5)) by @ -- open dir on the tray ([b374b9b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b374b9b91ca770ca41d1a65e71625fac01932a5a)) by @ -- optimize config feedback ([e30ba07](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e30ba072853d6e523587c1ce6665824fd35b6d88)) by @ -- optimize delay checker concurrency strategy ([3001c78](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3001c780bd3694941eb89350bd7c7db8dedf784b)) by @ -- optimize profile page ([33ce235](https://github.com/LibNyanpasu/clash-nyanpasu/commit/33ce23571382f7f7c4959f50aab0a1e5abd4a42f)) by @ -- optimize proxy page ui ([a4ce7a4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a4ce7a4037537369ecfca70e696a1b0ed3771156)) by @ -- optimize the animation of the traffic graph ([1b8d703](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1b8d70322b01f0f362b4eec69170e93002b0cda3)) by @ -- optimize the proxy group order ([433716c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/433716cf33f007179786c4379df16575957a2449)) by @ -- optimize traffic graph quadratic curve ([ab7313c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ab7313cbc4874b8cac6eb11cda6d9332acb72cd9)) by @ -- overwrite resource file according to file modified ([aadfaf7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aadfaf7150640120910748d158785ffeef1841a2)) by @ -- parse update log ([e585e87](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e585e87bec51b00b662b58f9cff7a1405a89d1be)) by @ -- press esc hide the window ([4979a47](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4979a472def9c22163e8a9717cde3a1bb87ed70a)) by @ -- prevent click same ([6b3e7cb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6b3e7cbc08a771dbfad84de3158edfa5c31f8ec8)) by @ -- prevent context menu on Windows close [#22](https://github.com/LibNyanpasu/clash-nyanpasu/issues/22) ([4ce1557](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4ce15577cd7cd6bd1f460f5f25856c380ead6767)) by @ -- profile enhanced mode ([ef47a74](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ef47a74920eae3d71b8dd656d06f6265ed772da9)) by @ -- profile enhanced ui ([a43dab8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a43dab80571f4c21540aca6db231941fb7420a68)) by @ -- profile item adjust ([f44039b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f44039b628b06c60636387c60a8b3894b5dffd8f)) by @ -- profile item support display updated time ([9d62462](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9d62462a96b6ec95cbc593cf88c9e213808f1bda)) by @ -- profile item ui ([99fec25](https://github.com/LibNyanpasu/clash-nyanpasu/commit/99fec25ed5bca63a9059d138a2eb62f97a739393)) by @ -- profile loading animation ([2fdcc9c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2fdcc9c5847691b296285c032720b8c72a0dc79c)) by @ -- profile page ui ([ab34044](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ab3404419696e29d7ea2f29a06d68cc504da5c02)) by @ -- profile-viewer: handleOk with loading state ([2c2c174](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2c2c174874924f5a464d4ec720267a4950d51fde)) by @ -- profiles add menu and delete button ([ea8f1c5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ea8f1c52f95f27606435779c00f99f56d26b0442)) by @ -- profiles ui and put profile support ([ad60013](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ad60013f52590ecf4eb09f3f81dfe37d06910ad3)) by @ -- profiles: import btn with loading state ([ee79bcf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ee79bcfc445bec84b716feedc602755e18fbc81c)) by @ -- proxy group auto scroll to current ([5280f1d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5280f1d74589ce8275b62dc3eea6a5de8dacfc0a)) by @ -- proxy page use swr ([81aef73](https://github.com/LibNyanpasu/clash-nyanpasu/commit/81aef736d663850b67f82a58680691d854614b05)) by @ -- **proxy:** finish proxy page ui and api support ([5b3f63e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5b3f63ef02a15e4c260cc67e1bde127fbe476d0e)) by @ -- pus_clash_profile support `secret` field ([48f1b27](https://github.com/LibNyanpasu/clash-nyanpasu/commit/48f1b27d93799b79c59b4d41eea787b3589bf372)) by @ -- put new profile to clash by default ([b5bb39e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b5bb39ef3d80d306713f4231d9ea0636a17ed3ba)) by @ -- put profile works ([f736951](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f736951fc845e0e9edbace2a6af92f34af6a797a)) by @ -- read clash config ([2a986a3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2a986a3d2fa19840e47eca78296cd3fde57663d7)) by @ -- record selected proxy ([14bda4f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/14bda4f3a5515aecabc26a9680946d9bc6e54008)) by @ -- recover core after panic, close [#353](https://github.com/LibNyanpasu/clash-nyanpasu/issues/353) ([453c230](https://github.com/LibNyanpasu/clash-nyanpasu/commit/453c2307163c93208b4a9dc030006a77cb59b97a)) by @ -- reduce gpu usage when hidden ([0be4b12](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0be4b1222d2c3a8faea9772e3f5fc2845813a0c7)) by @ -- reduce the impact of the enhanced mode ([7fe9407](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7fe94076c703c608cd6b4a4cd4779e9bec88a989)) by @ -- refactor ([7f6dac4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7f6dac4271d1d5999cfffd26719a23ee1abaec44)) by @ -- refactor and adjust ui ([d6c3bc5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d6c3bc57c06c7aa5020b8f39ed2798ac74de6b14)) by @ -- refactor commands and support update profile ([98378e6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/98378e626150c281c443d97c533b9bec86439a14)) by @ -- refactor proxy page ([c723252](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c7232522eeb363d721c7ccb9fc4ed12afabdcd3e)) by @ -- refactor system proxy config ([1e176c4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1e176c43166674daaa398dd31bff8419c0542dca)) by @ -- refresh ui when hotkey clicked ([8fa7fb3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8fa7fb3b1f0fb3a49237b0e8f416f37323ce797d)) by @ -- reimplement enhanced mode ([1641e02](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1641e02a7d5eff2b940aaf8110c97067f662995d)) by @ -- reimplement enhanced mode ([38effaf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/38effaf740ce8439761aecf3e30d8c77ed2de138)) by @ -- remove outdated config ([68adf6d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/68adf6dc2f76894e2ec27ec6a6f5796523001564)) by @ -- remove sec field ([8d7ef0d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8d7ef0dc9412e702519f88b77425d61a94313d88)) by @ -- remove trailing comma ([ae12853](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ae12853ad02c6d1ec252061fad31c9f9852583cc)) by @ -- rename edit as view ([0d5bfc0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0d5bfc0997367436a103554408bca9fc6c812902)) by @ -- rename page ([a842586](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a8425862f0bb8d6bc84fdfdc4ce6d150c2c596e8)) by @ -- rename profile page ([4bf0c0d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4bf0c0d19a5ce468b4aa73dcc3fe00d23e35186b)) by @ -- rm some commands ([59c09f9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/59c09f90f9dc73829260cb4d142219f980946528)) by @ -- runtime config viewer ([a9bf329](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a9bf32919e8c6c10ae9c84e117f584447802e38c)) by @ -- save global selected ([b09b7b1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b09b7b11a187a23b9d19f47d1a4dc9ec68bc14dc)) by @ -- save proxy page state ([7fa3c1e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7fa3c1e12a23f5e2e12eec6efeb107a671c11f6c)) by @ -- save some fields in the runtime config, close [#292](https://github.com/LibNyanpasu/clash-nyanpasu/issues/292) ([c62dddd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c62dddd5b9f1ac8c6f1827f981508bcb3a7e57ff)) by @ -- save window size and position ([177a22d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/177a22df59f355bf2952ee0452b220168ff0bcdf)) by @ -- script mode ([61e7df7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/61e7df77a72db73a9aace95b911152c95225d3c8)) by @ -- scroll to proxy item ([4934a24](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4934a2429363c856b42da9eac2c3d8471af3967d)) by @ -- scroller stable ([4dc3cf6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4dc3cf6c6b8f7eb292cc9be520df9c834030d271)) by @ -- set min windows ([396b11c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/396b11cc3dd8c081bfd8db5379ddfb30dc514b1c)) by @ -- setting page ([2b89b5f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2b89b5fe7320a7b2bbc3f90a36dd2cd6e10b4b4c)) by @ -- settings use Grid layout ([b060b4b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b060b4b9bf567a35de78a0aa56b66af42b58ec79)) by @ -- show connections with table layout ([5a74377](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5a743779e29ca543787a2393053bf9bae7890efb)) by @ -- show loading on proxy group delay check ([0beaa94](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0beaa94068984a8c48d4ae86c3d32dcb6c4e1d83)) by @ -- show loading when change profile ([741abc0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/741abc03668bf739fe5093ad8511c2ddd567db13)) by @ -- show system proxy info ([7fc9631](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7fc9631434d6583d8324ce87f53c3e2152dd06f0)) by @ -- show tray icon variants in different status ([#537](https://github.com/LibNyanpasu/clash-nyanpasu/issues/537)) ([ef5adab](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ef5adab6387438afc2b30e9a600130c535d9dcbd)) by @ -- sort groups ([1e2e6ca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1e2e6ca8a60edf8c5d28189bcfaf6f9c50bfb8ec)) by @ -- **style:** adjust style impl ([3b1a816](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3b1a816b3bfd0b1e917f8a01d4a13571276a482c)) by @ -- Subscription URL TextField use multiline ([#761](https://github.com/LibNyanpasu/clash-nyanpasu/issues/761)) ([15ee1e5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/15ee1e531b55a86ed81ffd6bec97243d2d7779df)) by @ -- support app log level settings ([b307b9a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b307b9a66b28fc6e035a3ecf5a078c46251ac4df)) by @ -- support blur window ([df5953d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/df5953dd7b3d9be8f732cb5e0f09a240cc61eb9c)) by @ -- support builtin script for enhanced mode ([bd0e932](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bd0e932910283154d2e7f391723859c0438b87d4)) by @ -- support check delay ([d0e678b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d0e678b5e9dd8aa76521087a5fb91257fe7ec781)) by @ -- support clash fields filter in ui ([ab429df](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ab429dfeb626c1193de631edba1f0bcb2317092c)) by @ -- support clash meta memory usage display ([96ffbe2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/96ffbe2f84ad2a3ffb5916fa5e64d767e29faa0b)) by @ -- support copy CMD & PowerShell proxy env ([26fd90d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/26fd90dfa347103af742813569e0c5de89c97b97)) by @ -- support copy environment variable ([02ba04b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/02ba04b5d80f763d7ecdfc532bca9b9bf573de57)) by @ -- support css injection ([0290d9d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0290d9ddfc23ec00bbe8523e29a0da536036d5f1)) by @ -- support dark mode ([c501898](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c501898d5fa4ec68f2330c8b618cdf31e0f5a69c)) by @ -- support edit profile item ([99a8e25](https://github.com/LibNyanpasu/clash-nyanpasu/commit/99a8e25411a64faec43587c8ee50dbc5a7614574)) by @ -- support hotkey (wip) ([509d833](https://github.com/LibNyanpasu/clash-nyanpasu/commit/509d83365e2616ff18548ac63d608971204d396c)) by @ -- support macos proxy config ([fe44a7b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fe44a7b3bc4c4ba594b22a1c137fdc1fdee3f5ff)) by @ -- support more options for remote profile ([fe1fea6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fe1fea671c2862d3fb28715f7801486150c18e13)) by @ -- support new profile ([c53fe0e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c53fe0ed1f983fd9b01f02c022c34464b3fd3eec)) by @ -- support open command for viewing ([6082c2b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6082c2bcac746538f9d3c5736a8ab704e7a22310)) by @ -- support open dir ([3c79238](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3c79238a449677572966a89d99614665f8fbb2f9)) by @ -- support proxy provider update ([b4cce23](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b4cce23ef41c8eb2fe8254812e9ab8df463e1cb3)) by @ -- support restart app on tray ([66ccbf7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/66ccbf70f8d51153ef097fb62deae833c683b26c)) by @ -- support restart sidecar tray event ([cb816e9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cb816e9653b71a5cade2193da489fa973dc2d511)) by @ -- support set system proxy command ([3a9734e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3a9734e97daf53142da23783911fb50272c981bf)) by @ -- support sort proxy node and custom test url ([68ad5e2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/68ad5e23201f6f0728ef3d4e429d3ddea1d28893)) by @ -- support theme setting ([f9a96ff](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f9a96ff91476cf3909bd1ac848dc82968f10e34d)) by @ -- support to change external controller ([e66a892](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e66a89208d1041a9a3eebc62cabe891a92dba4dc)) by @ -- support to change proxy layout column ([4d2b35e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4d2b35e09d34427dc663093d2dfbe07ba24e8a21)) by @ -- support to disable clash fields filter ([027295d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/027295d99560bed7206f17fd56936a73240339ad)) by @ -- support to grant permission to clash core ([54a5007](https://github.com/LibNyanpasu/clash-nyanpasu/commit/54a5007c0105cc0cdbc61b6d1a755d7fbdbd0346)) by @ -- support to open core dir ([5c5177e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5c5177ec574f612e9d85f2c822f5fae4fc6486d6)) by @ -- support update all profiles ([6c0066d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6c0066dbfbd5e2ddb37dd5066b60edb53a75549c)) by @ -- support update checker ([66340a2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/66340a27fa66cb2b42e008e5b4836c96ef1e05dd)) by @ -- support web ui ([5564c96](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5564c966a5903b3d660864aadea31981f944f772)) by @ -- supports auto launch on macos and windows ([cc0e930](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cc0e930d34db00bdc50264507f94e7afac6b2df1)) by @ -- supports change config dir ([f726e8a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f726e8a7b3535c7db7fd30a0cf56e058efc786d0)) by @ -- supports cron update profiles ([4de944b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4de944b41efdc1a2cfcb740b091aac5bb3d0795a)) by @ -- supports edit profile file ([f31349e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f31349eaa06eaa4a2f0d16576cb9253de1947861)) by @ -- supports more remote headers close [#81](https://github.com/LibNyanpasu/clash-nyanpasu/issues/81) ([0e68c5e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0e68c5e8bc5f4f3022ed2eeffcca5272c7322d77)) by @ -- supports show connection detail ([54e491d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/54e491d8bf1552151dd5f253f3918b6cb4c79897)) by @ -- supports silent start ([9d44668](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9d44668d5f370d9c6a563d42e05483bd5724f85a)) by @ -- supprt log ui ([1a51062](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1a51062aa13e581debd8d86d487a05c01149e482)) by @ -- system proxy command demo ([c1bcfc6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c1bcfc67858a385b360dade83b4fb574f24ca196)) by @ -- system proxy guard ([e38dcd8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e38dcd85ac0f50ebcca3f119c4e85ffa9ddda153)) by @ -- system proxy setting ([f9b91fa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f9b91fa18962ee27b71aa5cb144762c21e117111)) by @ -- system tray add tun mode ([1a91249](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1a91249da2bcc21c85f7a7561e38aa1bf474c282)) by @ -- system tray support zh language ([e11b403](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e11b4038a3653a93b5735ac3902f912fe414b9c9)) by @ -- system tray supports system proxy setting ([acc6e05](https://github.com/LibNyanpasu/clash-nyanpasu/commit/acc6e05bdccda78752e8c10e003047410db5e939)) by @ -- **system tray:** support switch rule/global/direct/script mode in system tray ([fbb17a0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fbb17a0ba5d10bc9bd144344fe2e3e5cd1613ee9)) by @ -- test auto gen update.json ci ([46a8dec](https://github.com/LibNyanpasu/clash-nyanpasu/commit/46a8dec6557c25ca1c5f5410bffc89d7cb64da18)) by @ -- theme mode support follows system ([8bce2ce](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8bce2ce040069df05ec65a586007e430dc7faa58)) by @ -- Theme support modify --background-color ([70fcfe6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/70fcfe6d6c8f4e318f461ad62577fda420b40e7c)) by @ -- theme: change color ([dd5e46a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dd5e46a8a7a3157f0ebfa70b45699b737f8ec1b4)) by @ -- toggle log ws ([4213ee6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4213ee660fd1bee9ec3ccb2a90c27f2304c1c6ad)) by @ -- traffic line graph ([457655b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/457655b4164d8bb4200fe0b3e6852de35e38fd6d)) by @ -- **traffic:** api support & adjust ([0a3c594](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0a3c59450b9d6650492c27637c77ddfd72a889ff)) by @ -- update Clash Default bypass addrs ([6e9f05a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6e9f05abb1f4e9d0aa6e168472d673eb083b2f08)) by @ -- update connection table with wider process column and click to show full detail ([#696](https://github.com/LibNyanpasu/clash-nyanpasu/issues/696)) ([a552e44](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a552e444833857dbc82a78f3b79f3249d42b24c3)) by @ -- update icons ([c413d93](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c413d93bb0bfc93d59d7ca7d2318a66a1a4dff58)) by @ -- update layout style ([ce42e6e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ce42e6ed49056348af6ebb90c602dc448946a87b)) by @ -- update profile supports noproxy ([43af552](https://github.com/LibNyanpasu/clash-nyanpasu/commit/43af55252d3d0dd34c0eeb31ad3e278f9348eb0f)) by @ -- update profile with system proxy/clash proxy ([90eeaba](https://github.com/LibNyanpasu/clash-nyanpasu/commit/90eeabae7b80e88f4263504847d35675e494ca04)) by @ -- update rule page ([1c3ae5c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1c3ae5c4bc0153c8400c91d8cf751bda9f10753c)) by @ -- update styles ([3a73868](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3a73868c10a9d4e1166840f852141170916f0bdc)) by @ -- update tauri version ([6193a84](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6193a842f4b83e47efda0648b95f26370a950f9e)) by @ -- use crate open ([a12f58c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a12f58c1c7ad7534d5704a3ef67d2ae1ef2446ec)) by @ -- use decorations in Linux, close [#354](https://github.com/LibNyanpasu/clash-nyanpasu/issues/354) ([fb7a36e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fb7a36eb738a83d873c58db38ba717d2bf1e7535)) by @ -- use enhanced guard-state ([9ccc66c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9ccc66ca1ec75a3b5f12d5f4df28c0c0d3255414)) by @ -- use external controller field ([da41ac5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/da41ac5b8b4da5712629a540a9092ea9c7ce0963)) by @ -- use lock fn ([98b8a12](https://github.com/LibNyanpasu/clash-nyanpasu/commit/98b8a122b6a483a8e171c1072ab1f52f618fa01f)) by @ -- use nanoid ([1880363](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1880363aeb5f11645ee6123e3efba477ac9b7532)) by @ -- use paper for list bg ([7cf8fd8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7cf8fd800fbbc9c9333af414792ac10d0b5cfd6a)) by @ -- Use polkit to elevate permission instaed of sudo ([#678](https://github.com/LibNyanpasu/clash-nyanpasu/issues/678)) ([6c1ab60](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6c1ab6002d21aba22dde5a96b52dd9d5693dbb56)) by @ -- use resources dir to save files ([1500162](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1500162a9c1e46b3c2ba52d07866ec0050857c28)) by @ -- use rquickjs crate ([cfd04e9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cfd04e9bb47505a970483dcbfbef7140bfe43098)) by @ -- use tauri updater ([08e4d72](https://github.com/LibNyanpasu/clash-nyanpasu/commit/08e4d72758698e0b41ad970e6ec1903cd739d85d)) by @ -- use vite ([efc1669](https://github.com/LibNyanpasu/clash-nyanpasu/commit/efc1669b3e8e62dbbcebd642f15e9200fda2d13f)) by @ -- window self startup ([79aad6b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/79aad6b5c2e7a2d1f61b3368b6ee1d58e77a6669)) by @ -- Window Send and Sync ([e32bfd9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e32bfd9aaba8959c0ed625ebb3e3b65bcf02086f)) by @ -- windows portable version do not check update ([d5192e2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d5192e2244810fbcb28bbdc04a000efbad5f2295)) by @ -- windows service mode ([34e941c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/34e941c8cbc7605e5aece219bcd318e60705408b)) by @ -- windows service mode ui ([6b36895](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6b368953f42208224440ce6d0b130d48403e58bb)) by @ -- windows support startup ([6113898](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6113898b69aeca1d6abbee3ffbd08ccfa2aa8f97)) by @ -- yaml merge key ([6331447](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6331447dcd34632023d90e35fb13e725f27922f0)) by @ +- **layout:** Add logo & update style by @zzzgydi + +- **macOS:** Support cmd+w and cmd+q by @zzzgydi + +- **proxy:** Finish proxy page ui and api support by @zzzgydi + +- **style:** Adjust style impl by @zzzgydi + +- **system tray:** Support switch rule/global/direct/script mode in system tray by @Limsanity + +- **traffic:** Api support & adjust by @zzzgydi + +- Minor tweaks by @keiko233 + +- Nyanpasu Misc by @keiko233 + +- Add baseContentIn animation by @keiko233 + +- Add route transition by @keiko233 + +- Material You! by @keiko233 + +- Default disable ipv6 by @keiko233 + +- Default enable unified-delay & tcp-concurrent with use meta core by @keiko233 + +- Support copy CMD & PowerShell proxy env by @keiko233 + +- Default use meta core by @keiko233 + +- Update Clash Default bypass addrs by @keiko233 + +- Theme: change color by @keiko233 + +- Profiles: import btn with loading state by @keiko233 + +- Profile-viewer: handleOk with loading state by @keiko233 + +- Base-dialog: okBtn use LoadingButton by @keiko233 + +- Nyanpasu Misc by @keiko233 + +- Theme support modify --background-color by @keiko233 + +- Settings use Grid layout by @keiko233 + +- Add Connections Info to ConnectionsPage by @keiko233 + +- ClashFieldViewer BaseDialog maxHeight usage percentage (#813) by @keiko233 + +- Add Open Dashboard to the hotkey, close #723 by @zzzgydi + +- Add check for updates button, close #766 by @zzzgydi + +- Add paste and clear icon by @zzzgydi + +- Subscription URL TextField use multiline (#761) by @keiko233 + +- Show loading when change profile by @zzzgydi + +- Support proxy provider update by @zzzgydi + +- Add repo link by @zzzgydi + +- Support clash meta memory usage display by @zzzgydi + +- Supports show connection detail by @zzzgydi + +- Update connection table with wider process column and click to show full detail (#696) by @whitemirror33 + +- More trace logs by @zzzgydi + +- Add Russian Language (#697) by @shvchk + +- Center window when out of monitor by @zzzgydi + +- Support copy environment variable by @zzzgydi + +- Save window size and position by @zzzgydi + +- App log level add silent by @zzzgydi + +- Overwrite resource file according to file modified by @zzzgydi + +- Support app log level settings by @zzzgydi + +- Use polkit to elevate permission instaed of sudo (#678) by @Kimiblock + +- Add unified-delay field by @zzzgydi + +- Add error boundary to the app root by @zzzgydi + +- Show tray icon variants in different status (#537) by @w568w + +- Auto restart core after grand permission by @zzzgydi + +- Add restart core button by @zzzgydi + +- Support update all profiles by @zzzgydi + +- Support to grant permission to clash core by @zzzgydi + +- Support clash fields filter in ui by @zzzgydi + +- Open dir on the tray by @zzzgydi + +- Support to disable clash fields filter by @zzzgydi + +- Adjust macOS window style by @zzzgydi + +- Recover core after panic, close #353 by @zzzgydi + +- Use decorations in Linux, close #354 by @zzzgydi + +- Auto proxy layout column by @zzzgydi + +- Support to change proxy layout column by @zzzgydi + +- Support to open core dir by @zzzgydi + +- Profile page ui by @zzzgydi + +- Save some fields in the runtime config, close #292 by @zzzgydi + +- Add meta feature by @zzzgydi + +- Display proxy group type by @zzzgydi + +- Add use clash hook by @zzzgydi + +- Guard the mixed-port and external-controller by @zzzgydi + +- Adjust builtin script and support meta guard script by @zzzgydi + +- Disable script mode when use clash meta by @zzzgydi + +- Check config when change core by @zzzgydi + +- Support builtin script for enhanced mode by @zzzgydi + +- Adjust profiles page ui by @zzzgydi + +- Optimize proxy page ui by @zzzgydi + +- Add error boundary by @zzzgydi + +- Adjust clash log by @zzzgydi + +- Add draft by @zzzgydi + +- Change default latency test url by @zzzgydi + +- Auto close connection when proxy changed by @zzzgydi + +- Support to change external controller by @zzzgydi + +- Add sub-rules by @zzzgydi + +- Add version on tray by @zzzgydi + +- Add animation by @zzzgydi + +- Add animation to ProfileNew component (#252) by @angryLid + +- Check remote profile field by @zzzgydi + +- System tray support zh language by @zzzgydi + +- Display delay check result timely by @zzzgydi + +- Update profile with system proxy/clash proxy by @zzzgydi + +- Change global mode ui, close #226 by @zzzgydi + +- Default user agent same with app version by @zzzgydi + +- Optimize config feedback by @zzzgydi + +- Show connections with table layout by @zzzgydi + +- Show loading on proxy group delay check by @zzzgydi + +- Add chains[0] and process to connections display (#205) by @riverscn + +- Adjust connection page ui by @zzzgydi + +- Yaml merge key by @zzzgydi + +- Toggle log ws by @zzzgydi + +- Add rule page by @zzzgydi + +- Hotkey viewer by @zzzgydi + +- Refresh ui when hotkey clicked by @zzzgydi + +- Support hotkey (wip) by @zzzgydi + +- Hide window on macos by @zzzgydi + +- System proxy setting by @zzzgydi + +- Change default singleton port and support to change the port by @zzzgydi + +- Log info by @zzzgydi + +- Kill clash by pid by @zzzgydi + +- Change clash port in dialog by @zzzgydi + +- Add proxy item check loading by @zzzgydi + +- Compatible with proxy providers health check by @zzzgydi + +- Add empty ui by @zzzgydi + +- Complete i18n by @zzzgydi + +- Windows portable version do not check update by @zzzgydi + +- Adjust clash info parsing logs by @zzzgydi + +- Adjust runtime config by @zzzgydi + +- Support restart app on tray by @zzzgydi + +- Optimize profile page by @zzzgydi + +- Refactor by @zzzgydi + +- Adjust tun mode config by @zzzgydi + +- Reimplement enhanced mode by @zzzgydi + +- Use rquickjs crate by @zzzgydi + +- Reimplement enhanced mode by @zzzgydi + +- Finish clash field control by @zzzgydi + +- Clash field viewer wip by @zzzgydi + +- Support web ui by @zzzgydi + +- Adjust setting page style by @zzzgydi + +- Runtime config viewer by @zzzgydi + +- Improve log rule by @zzzgydi + +- Theme mode support follows system by @zzzgydi + +- Improve yaml file error log by @zzzgydi + +- Save proxy page state by @zzzgydi + +- Light mode wip (#96) by @ctaoist + +- Clash meta core supports by @zzzgydi + +- Script mode by @zzzgydi + +- Clash meta core support (wip) by @zzzgydi + +- Reduce gpu usage when hidden by @zzzgydi + +- Interval update from now field by @zzzgydi + +- Adjust theme by @zzzgydi + +- Supports more remote headers close #81 by @zzzgydi + +- Check the remote profile by @zzzgydi + +- Fix typo by tianyoulan + +- Remove trailing comma by tianyoulan + +- Remove outdated config by tianyoulan + +- Windows service mode ui by @zzzgydi + +- Add some commands by @zzzgydi + +- Windows service mode by @zzzgydi + +- Add update interval by @zzzgydi + +- Refactor and supports cron tasks by @zzzgydi + +- Supports cron update profiles by @zzzgydi + +- Optimize traffic graph quadratic curve by @zzzgydi + +- Optimize the animation of the traffic graph by @zzzgydi + +- System tray add tun mode by @zzzgydi + +- Supports change config dir by @zzzgydi + +- Add default user agent by @zzzgydi + +- Connections page supports filter by @zzzgydi + +- Log page supports filter by @zzzgydi + +- Optimize delay checker concurrency strategy by @zzzgydi + +- Support sort proxy node and custom test url by @zzzgydi + +- Handle remote clash config fields by @zzzgydi + +- Add text color by @zzzgydi + +- Control final tun config by @zzzgydi + +- Support css injection by @zzzgydi + +- Support theme setting by @zzzgydi + +- Add text color by @zzzgydi + +- Add theme setting by @zzzgydi + +- Enhanced mode supports more fields by @zzzgydi + +- Supports edit profile file by @zzzgydi + +- Supports silent start by @zzzgydi + +- Use crate open by @zzzgydi + +- Enhance connections display order by @zzzgydi + +- Save global selected by @zzzgydi + +- System tray supports system proxy setting by @zzzgydi + +- Prevent context menu on Windows close #22 by @zzzgydi + +- Create local profile with selected file by @zzzgydi + +- Reduce the impact of the enhanced mode by @zzzgydi + +- Parse update log by @zzzgydi + +- Fill i18n by @zzzgydi + +- Dayjs i18n by @zzzgydi + +- Connections page simply support by @zzzgydi + +- Add wintun.dll by default by @zzzgydi + +- Event emit when clash config update by @zzzgydi + +- I18n supports by @zzzgydi + +- Change open command on linux by @zzzgydi + +- Support more options for remote profile by @zzzgydi + +- Linux system proxy by @zzzgydi + +- Enhance profile status by @zzzgydi + +- Menu item refresh enhanced mode by @zzzgydi + +- Profile enhanced mode by @zzzgydi + +- Profile enhanced ui by @zzzgydi + +- Profile item adjust by @zzzgydi + +- Enhanced profile (wip) by @zzzgydi + +- Edit profile item by @zzzgydi + +- Use nanoid by @zzzgydi + +- Compatible profile config by @zzzgydi + +- Native menu supports by @zzzgydi + +- Filter proxy and display type by @zzzgydi + +- Use lock fn by @zzzgydi + +- Refactor proxy page by @zzzgydi + +- Proxy group auto scroll to current by @zzzgydi + +- Clash tun mode supports by @zzzgydi + +- Use enhanced guard-state by @zzzgydi + +- Guard state supports debounce guard by @zzzgydi + +- Adjust clash version display by @zzzgydi + +- Hide command window by @zzzgydi + +- Enhance log data by @zzzgydi + +- Change window style by @zzzgydi + +- Fill verge template by @zzzgydi + +- Enable customize guard duration by @zzzgydi + +- System proxy guard by @zzzgydi + +- Enable show or hide traffic graph by @zzzgydi + +- Traffic line graph by @zzzgydi + +- Adjust profile item ui by @zzzgydi + +- Adjust fetch profile url by @zzzgydi + +- Inline config file template by @zzzgydi + +- Kill sidecars when update app by @zzzgydi + +- Delete file by @zzzgydi + +- Lock some async functions by @zzzgydi + +- Support open dir by @zzzgydi + +- Change allow list by @zzzgydi + +- Support check delay by @zzzgydi + +- Scroll to proxy item by @zzzgydi + +- Edit system proxy bypass by @zzzgydi + +- Disable user select by @zzzgydi + +- New profile able to edit name and desc by @zzzgydi + +- Update tauri version by @zzzgydi + +- Display clash core version by @zzzgydi + +- Adjust profile item menu by @zzzgydi + +- Profile item ui by @zzzgydi + +- Support new profile by @zzzgydi + +- Support open command for viewing by @zzzgydi + +- Global proxies use virtual list by @zzzgydi + +- Enable change proxy mode by @zzzgydi + +- Update styles by @zzzgydi + +- Manage clash mode by @zzzgydi + +- Change system porxy when changed port by @zzzgydi + +- Enable change mixed port by @zzzgydi + +- Manage clash config by @zzzgydi + +- Enable update clash info by @zzzgydi + +- Rename edit as view by @zzzgydi + +- Test auto gen update.json ci by @zzzgydi + +- Adjust setting typography by @zzzgydi + +- Enable force select profile by @zzzgydi + +- Support edit profile item by @zzzgydi + +- Adjust control ui by @zzzgydi + +- Update profile supports noproxy by @zzzgydi + +- Rename page by @zzzgydi + +- Refactor and adjust ui by @zzzgydi + +- Rm some commands by @zzzgydi + +- Change type by @zzzgydi + +- Supports auto launch on macos and windows by @zzzgydi + +- Adjust proxy page by @zzzgydi + +- Press esc hide the window by @zzzgydi + +- Show system proxy info by @zzzgydi + +- Support blur window by @zzzgydi + +- Windows support startup by @zzzgydi + +- Window self startup by @zzzgydi + +- Use tauri updater by @zzzgydi + +- Support update checker by @zzzgydi + +- Support macos proxy config by @zzzgydi + +- Custom window decorations by @zzzgydi + +- Profiles add menu and delete button by @zzzgydi + +- Delay put profiles and retry by @zzzgydi + +- Window Send and Sync by @zzzgydi + +- Support restart sidecar tray event by @zzzgydi + +- Prevent click same by @zzzgydi + +- Scroller stable by @zzzgydi + +- Compatible with macos(wip) by @zzzgydi + +- Record selected proxy by @zzzgydi + +- Display version by @zzzgydi + +- Enhance system proxy setting by @zzzgydi + +- Profile loading animation by @zzzgydi + +- Github actions support by @zzzgydi + +- Rename profile page by @zzzgydi + +- Add pre-dev script by @zzzgydi + +- Implement a simple singleton process by @zzzgydi + +- Use paper for list bg by @zzzgydi + +- Supprt log ui by @zzzgydi + +- Auto update profiles by @zzzgydi + +- Proxy page use swr by @zzzgydi + +- Profile item support display updated time by @zzzgydi + +- Change the log level order by @zzzgydi + +- Only put some fields by @zzzgydi + +- Setting page by @zzzgydi + +- Add serval commands by @zzzgydi + +- Change log file format by @zzzgydi + +- Adjust code by @zzzgydi + +- Refactor commands and support update profile by @zzzgydi + +- System proxy command demo by @zzzgydi + +- Support set system proxy command by @zzzgydi + +- Profiles ui and put profile support by @zzzgydi + +- Remove sec field by @zzzgydi + +- Put profile works by @zzzgydi + +- Distinguish level notice by @zzzgydi + +- Add use-notice hook by @zzzgydi + +- Pus_clash_profile support `secret` field by @zzzgydi + +- Add put_profiles cmd by @zzzgydi + +- Update rule page by @zzzgydi + +- Use external controller field by @zzzgydi + +- Lock profiles file and support more cmds by @zzzgydi + +- Put new profile to clash by default by @zzzgydi + +- Enhance clash caller & support more commands by @zzzgydi + +- Read clash config by @zzzgydi + +- Get profile file name from response by @zzzgydi + +- Change the naming strategy by @zzzgydi + +- Change rule page by @zzzgydi + +- Import profile support by @zzzgydi + +- Init verge config struct by @zzzgydi + +- Add some clash api by @zzzgydi + +- Optimize the proxy group order by @zzzgydi + +- Refactor system proxy config by @zzzgydi + +- Use resources dir to save files by @zzzgydi + +- New setting page by @zzzgydi + +- Sort groups by @zzzgydi + +- Add favicon by @zzzgydi + +- Update icons by @zzzgydi + +- Update layout style by @zzzgydi + +- Support dark mode by @zzzgydi + +- Set min windows by @zzzgydi + +- Finish some features by @zzzgydi + +- Finish main layout by @zzzgydi + +- Use vite by @zzzgydi ### 🐛 Bug Fixes -- add clash fields ([e1c8f1f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e1c8f1fed9b4df36d40b082f5afe2d6a8cadded9)) by @ -- add https proxy ([33a5fb8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/33a5fb88373493027bff6a42f5c75731dff3e153)) by @ -- add meta fields ([91b77e5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/91b77e5237367875fa392ef7ced4fafd189b4c96)) by @ -- add meta fields ([780ab20](https://github.com/LibNyanpasu/clash-nyanpasu/commit/780ab20aeb01d601fb5c690a61042f6b51ac8a01)) by @ -- add os platform value ([1b44ae0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1b44ae098cbf0e056c7c51b80d75c8f3c3c32e48)) by @ -- add target os linux ([5265888](https://github.com/LibNyanpasu/clash-nyanpasu/commit/52658886e75cd2f06fb125fcb74da5a3452275e5)) by @ -- add tray separator ([cbc184e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cbc184e953958443a6ef044acc2f0b7539b2ae46)) by @ -- add valid clash field ([35de233](https://github.com/LibNyanpasu/clash-nyanpasu/commit/35de2334fb3ce8165fc65085a15695bdbbe67996)) by @ -- adjsut open cmd error ([2d1780b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2d1780b1cf37ae4a7f3597d7c44ee53c9dc7cfd1)) by @ -- adjust code ([8bad2c2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8bad2c211389b5b091a2e86cb033694dfd2b7933)) by @ -- adjust code ([20a194b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/20a194b49a878c541a44691c353b159e967cac22)) by @ -- adjust code ([557abd4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/557abd42850e638116fb19a641c2381e29a05eae)) by @ -- adjust connection scroll ([423a7f9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/423a7f951a5925525374b580f1277697a17427e8)) by @ -- adjust debounce wait time ([5308970](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5308970ad8ddf79e4f81859e9a480d336df277ad)) by @ -- adjust delay check concurrency ([2bcf6fb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2bcf6fb3eb424c079d013c0901bc82dbe1a0d632)) by @ -- adjust dialog action button variant ([cb48600](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cb48600b405bae61d74c0edf951ead2a5d4d0efd)) by @ -- adjust dns config ([9e3c080](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9e3c0809090c36fa89a52485c2b13e300857fb5f)) by @ -- adjust fields order ([7909cf4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7909cf4067c25d8c171315517f2fd0a75958ea1f)) by @ -- adjust init launch on dev ([1b336d9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1b336d973dfd1411e3c5867a03ef86583af097e7)) by @ -- adjust item ui ([790d832](https://github.com/LibNyanpasu/clash-nyanpasu/commit/790d832155620edecc3de2ea9ce54d82f89039aa)) by @ -- adjust log ([b9162f9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b9162f9576f3953fa03e6ccb5d0d2b7fd683a604)) by @ -- adjust log text ([3f58d05](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3f58d05aa7b33a9250fde77129b93da690024539)) by @ -- adjust log ui ([132f914](https://github.com/LibNyanpasu/clash-nyanpasu/commit/132f914b0de23ee2376a796269f71a85721a9446)) by @ -- adjust notice ([e19fe5c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e19fe5ce1cdc40bf95d0a70a6671508b51b2933d)) by @ -- adjust notice ([f5c6fa8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f5c6fa842aefe0b4d796a9d255bbf46cc97e7ffd)) by @ -- adjust reset proxy ([b635e64](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b635e64803c75c6ae99ae26476be480b568d27ec)) by @ -- adjust rule ui ([bfe4f08](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bfe4f08232ab1bbfefef9d19c9eaf74a4d70c80f)) by @ -- adjust service mode ui ([06dabf1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/06dabf1e4ed05d06d574b15297e8944d3b9b9311)) by @ -- adjust singleton detect ([be81cd7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/be81cd72afc8381fa7cc8696239cd4a7767d3311)) by @ -- adjust something ([557f5fe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/557f5fe364df76484947711b6340989db230227b)) by @ -- adjust style ([e7841c6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e7841c60df248baf3e914f170383734df5e8d1ea)) by @ -- adjust style ([ffa21fb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ffa21fbfd2eab267571dedd8ca44f949bb605360)) by @ -- adjust swr option ([630249d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/630249d22a45907264fbaec717463b1c6ad06896)) by @ -- adjust ui ([ce61309](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ce613098db7f4c5a10ac93e235a5230451908e10)) by @ -- adjust ui ([2ce7624](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2ce7624c1434a990df4f27b79c5a72ca7dcacf83)) by @ -- adjust update profile notice error ([a4fb2df](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a4fb2dfcf825bade055e71dc9e480dba948ffdf9)) by @ -- adjust web ui item style ([bd576ca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bd576ca80864b8f7d649a2e81717b2e3858f7f05)) by @ -- adjust windows style ([b8b0c8f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b8b0c8fa63f1ea686cc345b04c5157dad8b41d2e)) by @ -- api error handle ([38d1fde](https://github.com/LibNyanpasu/clash-nyanpasu/commit/38d1fde84f4d732d354022078674d6d23e577df7)) by @ -- api loading delay ([36d8fa7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/36d8fa7de4d26d4ddd61067d3ced2b5538185e52)) by @ -- app version to string ([35d0438](https://github.com/LibNyanpasu/clash-nyanpasu/commit/35d0438261027b86ab79db01b402f6b673ffa115)) by @ -- app_handle as_ref ([c9b7ecc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c9b7eccbc1260702f67e569eb388564a6c10b46c)) by @ -- appimage auto launch, close [#403](https://github.com/LibNyanpasu/clash-nyanpasu/issues/403) ([692f8c8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/692f8c845425f9a9d604ff8f15ba3a7e2fc3d0c9)) by @ -- appimage path unwrap panic ([2b6aced](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2b6acedae1fa29646e10cee4483105fa3479a2d6)) by @ -- apply_blur parameter ([3afbb56](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3afbb5664014d637882a0b171c417a8062120f66)) by @ -- auto launch path ([2d95f2b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2d95f2b0d663e59b082eb73a8bf68a492105bece)) by @ -- auto scroll into view when sorted proxies changed ([59dae64](https://github.com/LibNyanpasu/clash-nyanpasu/commit/59dae640db6179f1106076529d250b24bcae982e)) by @ -- avoid setting login item repeatedly, close [#326](https://github.com/LibNyanpasu/clash-nyanpasu/issues/326) ([051be92](https://github.com/LibNyanpasu/clash-nyanpasu/commit/051be927cdeef4311b1b347915a4706f87abed42)) by @ -- badge color error ([fa65f60](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fa65f606b83ff6fd9375be6b078dd0218e456be9)) by @ -- blurry tray icon in Windows ([5d5ab57](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5d5ab5746982bf660dce717054583885a3bf2b82)) by @ -- break loop when core terminated ([515af47](https://github.com/LibNyanpasu/clash-nyanpasu/commit/515af472ce064f674310a6f4175e379aa89173dc)) by @ -- button color ([929c840](https://github.com/LibNyanpasu/clash-nyanpasu/commit/929c84000675202cab22ede7434486028bf02e09)) by @ -- change default app version ([8385050](https://github.com/LibNyanpasu/clash-nyanpasu/commit/838505080417a4593bffbf3043c82072c64a5083)) by @ -- change default column to auto ([6e421e6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6e421e60c53728ef81ed8dd8fe6c6669a6b576eb)) by @ -- change default tun dns-hijack ([7ef4b7e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7ef4b7eeb8ab1ce4c46600eb3ebd6dc49f019683)) by @ -- change dev log level ([f5f2fe3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f5f2fe3472e962885308f8845fc6323f3cab7b79)) by @ -- change fields ([c02990e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c02990ef980eceb99d1cea75b966c6b24907dc07)) by @ -- change log file format ([0d8114c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0d8114c9f468da6dd43a443128133aba00a9a8b5)) by @ -- change mixed port error ([ef314c1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ef314c1707c8a4b42427b59b8eb7c293f2abbf51)) by @ -- change proxy bypass on mac ([40a8186](https://github.com/LibNyanpasu/clash-nyanpasu/commit/40a818630df8d34baf97cf88ae052770438992f8)) by @ -- change service installer and uninstaller ([f88989b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f88989bd4bcd0eea614b7b1cb8bfab51e2c450b4)) by @ -- change template ([4ae0071](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4ae00714d252558490810278a8f8c6f22351726a)) by @ -- change to deep copy ([0a9c817](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0a9c81772fcb32e4ac1f32b07b0297ec5908d38c)) by @ -- change window default size ([28a4386](https://github.com/LibNyanpasu/clash-nyanpasu/commit/28a43869753c5070c143f4fb2ce941664c74c96e)) by @ -- check button hover style ([0445f9d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0445f9dfc24b96e95af41ccee9149e59891147a9)) by @ -- check config ([3cd2be5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3cd2be5081e1cd2d81e6a92558a3bb64a9bbd9cd)) by @ -- check hotkey and optimize hotkey input, close [#287](https://github.com/LibNyanpasu/clash-nyanpasu/issues/287) ([db02866](https://github.com/LibNyanpasu/clash-nyanpasu/commit/db028665fd65c5b700d85f420be329c7ea61da5e)) by @ -- check remote profile ([4ea5bb2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4ea5bb2390566d74e5600bd53e2cac7c187ce23e)) by @ -- check script run on all OS ([db0230e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/db0230ed753e2de696a13ca62e007e2da407097f)) by @ -- ci strategy ([6b2172d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6b2172d873a0c73bbd837391ec7001ccc1a88391)) by @ -- clash field state error ([2f8146b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2f8146b11f8f2e28cc9c5919cac5bceee0cd7c32)) by @ -- clash meta not load geoip, close [#212](https://github.com/LibNyanpasu/clash-nyanpasu/issues/212) ([dd78670](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dd78670a4b7c8a425af76f622902642b4bca4e8e)) by @ -- close all connections when change mode ([60046ab](https://github.com/LibNyanpasu/clash-nyanpasu/commit/60046abec3d29a9d67a1812d8d7ff545d3f186e1)) by @ -- close connections when profile change ([e031389](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e031389021694ba437f4d89579bf284468a19a65)) by @ -- close dialog after save ([2ad771e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2ad771e7fdad189570ae921a02c2e994d6ddca74)) by @ -- cmds params ([d759f48](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d759f48ee845380ffd64ca35aff96e78a1dfa360)) by @ -- compatible with UTF8 BOM, close [#283](https://github.com/LibNyanpasu/clash-nyanpasu/issues/283) ([bba03d1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bba03d14d4acbb9efdc1ac52649a9623c0f1cf5e)) by @ -- component warning ([b91daeb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b91daebd92d38cadefb07e3fb3b11fe1858aa31c)) by @ -- config file case close [#18](https://github.com/LibNyanpasu/clash-nyanpasu/issues/18) ([c73b354](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c73b3543860059be0a777a417bf5de12cdf8c9eb)) by @ -- connections is null ([aba0826](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aba0826c380a4a8ba48e0e98f02b6043308f4f9e)) by @ -- console warning ([eab671d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eab671d10276f17be8734d7839883682d98c237e)) by @ -- copy resource file ([e64103e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e64103e5f2666377b12e9a809e4e7f88074dc432)) by @ -- cover profile extra ([8dc2c1a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8dc2c1a38fc5c85da58caef362bf32e706235d1f)) by @ -- create dir panic ([8ea3e6f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8ea3e6fa26e2a747374e0cd2d79e316a26a78dbf)) by @ -- create main window ([ae94993](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ae94993b09b871a2f5cca5638f428d51624fd582)) by @ -- create theme error, close [#294](https://github.com/LibNyanpasu/clash-nyanpasu/issues/294) ([9b18bd0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9b18bd0b4836cce1297a2373c3082ac02bba9b2d)) by @ -- create window correctly ([41b19f6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/41b19f69de7abede82d48843a275d86a47367f35)) by @ -- csp image data ([4bd9409](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4bd94092f147402d32500942a1f9567d1dc40652)) by @ -- default dns config ([2f740b5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2f740b570d6e261c3098b9f25870a6b7d13e5af1)) by @ -- delay show window ([8bf78fe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8bf78fef108174343107a287121ff611f14f543d)) by @ -- delay update config ([ab53ab2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ab53ab21e2f769718d490e42a03690247d8627ad)) by @ -- delete profile item command ([a4c1573](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a4c1573c45ea99482f9a978cf2535c3e84c042a8)) by @ -- direct mode hide proxies ([d20b745](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d20b745ae5731be18765e74ac810b4f2ecbe930e)) by @ -- disable auto scroll to proxy ([6e5a2f8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6e5a2f85a1ddfe7a948cc9407dca5d245feac42e)) by @ -- disable spell check ([6c6b405](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6c6b40548f576bd87a0add8365afbd4a500a524b)) by @ -- display menu only on macos ([ade34f5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ade34f52170d92bcfcc481102fdb3276aa38664a)) by @ -- do not kill sidecar during updating ([f32c5ba](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f32c5ba2441044625d32fe1b21c42a4944520792)) by @ -- do not parse log except the clash core ([e25a455](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e25a45569838cd7c0505ad5457443e3d403ba1cc)) by @ -- Do not render div as a descendant of p ([#494](https://github.com/LibNyanpasu/clash-nyanpasu/issues/494)) ([66f3f0b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/66f3f0ba07a4274f9715c5c1d74d2ac91478decc)) by @ -- do not reset system proxy when consistent ([7eb5951](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7eb595170fdd476e8a5a038790caf807cf1cc10b)) by @ -- download clash core from backup repo ([cad8748](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cad87484c7bb3502c9c35e2aa2c4ac80dcbfad6f)) by @ -- edit profile info ([798999d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/798999d490d31aed2856aa4fb0d0068b38eb58ff)) by @ -- enable context menu in editable element ([4c24363](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4c243638cbc4d0ad0276650b1cff433e0e9e2a6a)) by @ -- encode controller secret, close [#601](https://github.com/LibNyanpasu/clash-nyanpasu/issues/601) ([f9a68e8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f9a68e8b234102b69db7b623f63d596b17d8a0a4)) by @ -- encodeURIComponent secret ([6cf174c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6cf174c5ed4fa8ae440ef651305643919f5f0290)) by @ -- enhanced profile consistency ([7108d5f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7108d5f3abf96b3b4df933449a5926aa8a76390e)) by @ -- error boundary with key ([3557a77](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3557a776450bdc87086d31168a55ef0929c6c887)) by @ -- error log ([3113585](https://github.com/LibNyanpasu/clash-nyanpasu/commit/311358544e0cfa580b9f62f80423ea8f80155e2b)) by @ -- error message null ([fb653ff](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fb653ff99dabc1ceb89322a9a5aedd9be98988ef)) by @ -- escape path space ([fc5ca96](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fc5ca965ba92c60128cdd05b72d760512aea0eb9)) by @ -- escape the space in path ([#451](https://github.com/LibNyanpasu/clash-nyanpasu/issues/451)) ([9c4a46b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9c4a46bcdb7ec57c405f3bf5a3e610fca58a9838)) by @ -- external controller allow lan ([a120c8c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a120c8cf988d4e9c8a90966eadc5fb7d67034e6e)) by @ -- external-controller ([4c5aa70](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4c5aa7084e3529321c409f2a9c1946a499138dd7)) by @ -- fetch profile panic ([c046a19](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c046a1993e087b03bc93de28959dc577356e48c7)) by @ -- fetch profile with system proxy, close [#249](https://github.com/LibNyanpasu/clash-nyanpasu/issues/249) ([600134a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/600134a3ac6e2c3159958116970e9d007590f539)) by @ -- field sort for filter ([c5289dc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c5289dc0e86e5c7ed6dcfea9019ec5829432a63f)) by @ -- fill button title attr ([a7ba9f1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a7ba9f18864f7f9c6b8eb97d6048c4ee85e94ab5)) by @ -- fix page undefined exception, close [#770](https://github.com/LibNyanpasu/clash-nyanpasu/issues/770) ([16d8071](https://github.com/LibNyanpasu/clash-nyanpasu/commit/16d80718cbbc00fb030b342a29f2e3971d9f4a51)) by @ -- font family not works in some interfaces, close [#639](https://github.com/LibNyanpasu/clash-nyanpasu/issues/639) ([f032228](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f032228d0eea1fdb2acb5a5eb71a2178f2f06045)) by @ -- get proxies multiple times ([72c2b30](https://github.com/LibNyanpasu/clash-nyanpasu/commit/72c2b306cf294ca1c02ae36b85e823a9a54a0eeb)) by @ -- group proxies render list is null ([b3c1c56](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b3c1c565794f5eedcf1a0f84eca5bc6d0f8899d4)) by @ -- handle is none ([2d2fdf0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2d2fdf0b1efb1cbf76df6aa6c9e9a01ced5e56b5)) by @ -- i18n ([9987dc1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9987dc1eb4abad320064b8697dafc3a1eeebd3b1)) by @ -- i18n ([5ebd9be](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5ebd9be89a1bb6555d4a8d0d8aa3442ccce1b357)) by @ -- i18n add value ([51cf442](https://github.com/LibNyanpasu/clash-nyanpasu/commit/51cf442fa53481691efcf085165e462f19e61233)) by @ -- icon button color ([9e56b9f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9e56b9fbb57dc19964776aed5b7e686b0236c497)) by @ -- icon button color inherit ([910846f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/910846f2ce2e1457c34e8c4bb2627ef9e30c57b0)) by @ -- icon button color inherit ([6ade0b2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6ade0b2b1ab599297bae2d439067bbfed3a4c257)) by @ -- icon button title ([0a3402f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0a3402ff439901703cc2b60854f3f63ee1a8fb5c)) by @ -- icon issue ([363e28f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/363e28f3236d391393fe86f9c2dfdfd7f2d82549)) by @ -- icon path ([c382ad1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c382ad1cc89ded4cd0763a0867f7bd02bea1c0eb)) by @ -- icon style ([bf0dafa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bf0dafabe2d5696240a390736071de4f10bce343)) by @ -- **icon:** change ico file to fix windows tray ([0f99add](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0f99addca71b6d31a92e9714be733fd11e8fe6da)) by @ -- ignore disable auto launch error ([5e429c7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5e429c7a94a06d1f945b086af3ded6b68dddaa51)) by @ -- import error ([e7bba96](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e7bba968b3777f7be62afdadfada5af8e973927e)) by @ -- import mod ([659fdd1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/659fdd1d376ad782108dd8671b5a4c007db53888)) by @ -- import url error ([#543](https://github.com/LibNyanpasu/clash-nyanpasu/issues/543)) ([3eeaee1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3eeaee154f8774220e9a823a274aa9acc4e05bf4)) by @ -- improve external-controller parse and log ([6d0625c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6d0625c409e0e41e483d216fdb20346a9463dbf1)) by @ -- increase delay checker concurrency ([820d1e7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/820d1e75707f76ba28ac27c724dd87024ee841c2)) by @ -- infinite retry when websocket error ([db99b4c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/db99b4cb54838f5a2ca1e36b51038dfb80167dd9)) by @ -- init config error ([f7dab3c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f7dab3ca560f027f7370d5114f9e7adbf40c0974)) by @ -- init config file ([40c0410](https://github.com/LibNyanpasu/clash-nyanpasu/commit/40c041031efcb02034e2b876eefa724d8dd67175)) by @ -- init system proxy correctly ([acff6d0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/acff6d043218b1dbaa52c1cdc56836e3dbb84924)) by @ -- initialize profiles state ([774c6f7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/774c6f7e053e0739ee36ae82e738b4547817a934)) by @ -- instantiate core after init app, close [#122](https://github.com/LibNyanpasu/clash-nyanpasu/issues/122) ([150f0cf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/150f0cf48616d60053484be904b79fcab971c1f5)) by @ -- item header bgcolor ([db4993a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/db4993ae9b478f81770328c65db64af509b15c4f)) by @ -- keep delay data ([97d82b0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/97d82b03aba822858006f82e690bdd5727ab3bd1)) by @ -- kill clash when exit in service mode, close [#241](https://github.com/LibNyanpasu/clash-nyanpasu/issues/241) ([294d980](https://github.com/LibNyanpasu/clash-nyanpasu/commit/294d980b5237535f2eb24cb81e890d0766576beb)) by @ -- kill sidecars after install still in test ([568511a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/568511a4cfec43e9b38d43947878a70fbdb118dc)) by @ -- label text ([e0943ce](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e0943ce905d6a06f0badf63f69b084a60774f98f)) by @ -- limit enhanced profile range ([c0ad84a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c0ad84a491f61e869c55c04903316c86ce8494ad)) by @ -- limit theme mode value ([c1734a0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c1734a094cd6896ec48e630662fbeeac1ae92da5)) by @ -- lint ([e00f826](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e00f826eb885ebb923ec6b2941ce2e533324819f)) by @ -- linux DEFAULT_BYPASS ([#503](https://github.com/LibNyanpasu/clash-nyanpasu/issues/503)) ([fb7b180](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fb7b1800cced2bf13426f9ca85647f1b41410b10)) by @ -- linux not change icon ([6e391df](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6e391df5ee8ff796519e612e2260102f65a036e3)) by @ -- list compare wrong ([aed1bdf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aed1bdff5a25fe05361d4257be325697a6108d42)) by @ -- list key ([e62eaa6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e62eaa6b4bedcf47838c035d6c1738b5f8f6e1cc)) by @ -- log file ([18f9d6d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/18f9d6dec5f7a7881fff645d34989930fa69a6bd)) by @ -- log level warn value ([e94a07b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e94a07b6779cac26fc546b761f6e66d64183c732)) by @ -- log some error ([109fb39](https://github.com/LibNyanpasu/clash-nyanpasu/commit/109fb39e094db8c744e9d712bb5a87c7bbca3933)) by @ -- macos auto launch fail ([76081f8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/76081f8d89090cb714af48cbf5c5a498c8916aec)) by @ -- macOS disable transparent ([6d3f837](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6d3f8378204dc6193376878e07fd296df552b12b)) by @ -- macos not change icon ([cafc206](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cafc2060b880affc0a213dec754bc724fd2918ce)) by @ -- macOS transition flickers close [#47](https://github.com/LibNyanpasu/clash-nyanpasu/issues/47) ([db3b634](https://github.com/LibNyanpasu/clash-nyanpasu/commit/db3b634e6233b3ef8ba20d17d939aed60b7ce51f)) by @ -- **macos:** set auto launch path to application ([57d23eb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/57d23eb043e7874de144ef507d46341c3070cf72)) by @ -- manage global proxy correctly ([5027069](https://github.com/LibNyanpasu/clash-nyanpasu/commit/502706931e9fee8507290fc2b51a83318a84483f)) by @ -- matchMedia().addEventListener [#258](https://github.com/LibNyanpasu/clash-nyanpasu/issues/258) ([#296](https://github.com/LibNyanpasu/clash-nyanpasu/issues/296)) ([4046f14](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4046f143f6c802c9cc5c8332f293a460774bdde3)) by @ -- MediaQueryList addEventListener polyfill ([fd6633f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fd6633f536870b11eda2b907d998eaa594700ed7)) by @ -- menu without fragment ([2b52584](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2b525845479a9940df6178e1ae467ed0e15c6755)) by @ -- mutate at the same time may be wrong ([aa29e18](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aa29e185e4b39a3d0b18b2239434e4a6afaf553f)) by @ -- mutex dead lock ([6bc83d9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6bc83d9f2737ea1fb625d235283b2691966e21f9)) by @ -- not create windows when enable slient start ([2d09893](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2d0989342f188152412dc8ee8693ee78420811ea)) by @ -- not open file when new profile ([66bf4ba](https://github.com/LibNyanpasu/clash-nyanpasu/commit/66bf4ba3ada161a2c44606f06730537bec692f59)) by @ -- notice ui blocking ([d695656](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d695656b8ce6b01097a9b77280b603f00aea1539)) by @ -- null type error ([4f56c38](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4f56c385998c737bb33f963313c0cd661c80d1a1)) by @ -- only error when selected ([c7e7be4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c7e7be4379a82778c882e5216709aa37cb1bfc15)) by @ -- only script profile can display console ([c611a51](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c611a5157598d62f13053c9e4ecc66cb6b94160b)) by @ -- open file ([eea9cb7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eea9cb7c5b3684e04c3931409215e83d682f1733)) by @ -- open file with vscode ([0a33bb8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0a33bb861e5cc30fd0bf8536035cfa6633ceb446)) by @ -- optimize clash launch ([844ffab](https://github.com/LibNyanpasu/clash-nyanpasu/commit/844ffab4edd54424feb4e543edae475d6fb2eb95)) by @ -- optimize traffic graph high CPU usage when hidden ([9e9c4ad](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9e9c4ad5873bf354c5a80cb38d4bc573216ce287)) by @ -- parse bytes base 1024 ([f76890c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f76890cc56f4a5c1e8ca1f37fdd83568a288540b)) by @ -- parse bytes precision, close [#334](https://github.com/LibNyanpasu/clash-nyanpasu/issues/334) ([e7f294a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e7f294a065cf7a9bbe0c9b723e9ce584e4445689)) by @ -- parse external-controller ([a393b8b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a393b8b1224667242580b74949374b45fcfcffb3)) by @ -- parse log cause panic ([e901588](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e90158809a9b4e2d732faa136be824cd9fe22b17)) by @ -- parse logger time ([33b1a11](https://github.com/LibNyanpasu/clash-nyanpasu/commit/33b1a11d858d85543765b307a989a740fc0ef4b1)) by @ -- patch clash config ([b7c3863](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b7c386388296069bc57fe2823f6c82e5d9a48c88)) by @ -- patch item option ([8890051](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8890051c1709813a0cdff45ee20daae7e760bebc)) by @ -- patch verge config ([10b55c0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/10b55c043c29a2da74534526ea7076da82b2fe44)) by @ -- port value not rerender ([9a85b28](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9a85b28b1827ac72038d9e5629bc4b54494f82bc)) by @ -- pretty bytes ([d21bb01](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d21bb015e875ab0fcc563e0887b2a83eeeb70898)) by @ -- profile can not edit ([1a31fa9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1a31fa90679ffb79c867ad34ecb87d01b09ae236)) by @ -- profile data undefined error, close [#566](https://github.com/LibNyanpasu/clash-nyanpasu/issues/566) ([6114af4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6114af4f933f3cf82d203bd6b75680a972eac879)) by @ -- profile field check ([7437881](https://github.com/LibNyanpasu/clash-nyanpasu/commit/743788135f71be0b06315b59a4ebb8109afe8fc0)) by @ -- profile item loading state ([3cde019](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3cde019208e21e4cfa6a20c6ea805ab7ea8440fe)) by @ -- profile item menu ui dense ([5f486d0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5f486d0f51666e5c495d6dc44b7550f6ad6597d2)) by @ -- profile updated field ([e9b7ec7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e9b7ec735f47cf292545c846d5e655d77bf0c63c)) by @ -- provider proxy sort by delay ([0bb1790](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0bb1790206beec655a3f50e88b356a1596c7b4bd)) by @ -- proxy bypass add ([2a7cabb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2a7cabb06dd9e41021bf75f61a28e48c3a935476)) by @ -- proxy global showType ([e896077](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e89607799abc6b59029b738b85210c39d4fd8c4d)) by @ -- proxy item style ([6337788](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6337788a2231bcee397a2792e4b5169147fe99c2)) by @ -- proxy list error ([73758ad](https://github.com/LibNyanpasu/clash-nyanpasu/commit/73758ad1fd7dac151f446fc07f7bb69f5a881eef)) by @ -- proxy page first render ([954e355](https://github.com/LibNyanpasu/clash-nyanpasu/commit/954e3553eebe294567cb3971b0ccddffde31e79e)) by @ -- put profile request with no proxy ([9ec7184](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9ec7184aa1252262a5b59b15995491f782258d7e)) by @ -- reconnect traffic websocket ([43dee3e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/43dee3ef764d10a59a415e3c8b4ce7f9f9c8e762)) by @ -- reconnect websocket when restart clash ([1a55cca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1a55cca8af0d32b8cf54935d19e4140da6e770dc)) by @ -- reduce logo size ([acfe5db](https://github.com/LibNyanpasu/clash-nyanpasu/commit/acfe5dbb49a6cde97cdc8349d7879727b3f506e7)) by @ -- reduce proxy item height ([08587d8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/08587d8f2f0568ef8281f038d1a3025571a2b34f)) by @ -- reduce unsafe unwrap ([3242efb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3242efb1a29f1bfada2f3775268f67c746a51bdb)) by @ -- reduce unwrap ([60f6587](https://github.com/LibNyanpasu/clash-nyanpasu/commit/60f658716903fc87af341e669b5f7bc87c571ed8)) by @ -- refresh clash ui await patch ([96e7666](https://github.com/LibNyanpasu/clash-nyanpasu/commit/96e76665d68cc638bb947be925ffb9b27772844c)) by @ -- refresh proxies interval, close [#235](https://github.com/LibNyanpasu/clash-nyanpasu/issues/235) ([cc5b33a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cc5b33a8ec6e05e697b4c7a5f69ec21c96d8db9c)) by @ -- refresh websocket ([376011e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/376011ea0836f9b646747bbaf0b2bd271df4f8d1)) by @ -- regenerate config before change core ([f477cec](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f477cecdebc4b9b556abb5a5f29c9c403cd71444)) by @ -- remove cargo test ([b5c4175](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b5c41750f76f64d876ad6016bca059c20eead2c5)) by @ -- remove dead code ([d6ab73c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d6ab73c9054ea17bdcb52aaea110c2e6bf5b2e88)) by @ -- remove div ([7854775](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7854775de5c259e2d598713d63cd9ac1e8ce02d9)) by @ -- remove esc key listener in macOS ([66d93ea](https://github.com/LibNyanpasu/clash-nyanpasu/commit/66d93ea037dd7cbc62ae454e92e3e5bb0b208c87)) by @ -- remove fallback group select status, close [#659](https://github.com/LibNyanpasu/clash-nyanpasu/issues/659) ([ce23143](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ce231431b96fd898de2c7b13f48d74a54fdfac39)) by @ -- remove smoother ([4649454](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4649454282550c93c86a4f886bddfefaadc9a6a9)) by @ -- remove the lonely zero ([9902003](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9902003da9d606cf9b9253c2326b9e2d565d0f62)) by @ -- remove useless optimizations ([e72ad1f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e72ad1f030ce33c54a791a9be671ff80c56168cb)) by @ -- reset after exit ([f5d0513](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f5d0513d1f02b8efc4859c36ecef9b325f941bed)) by @ -- reset proxy ([c0ddddf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c0ddddfb1f457895750ded9444f5e374bcdaa477)) by @ -- reset value correctly ([2dfd725](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2dfd725ee005cb2a70a37a217430e081fcd41985)) by @ -- restart clash should update something ([4b5b62c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4b5b62c8aee383a96607fc763cacfb7022de748b)) by @ -- result ([bcdae11](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bcdae1169eba6fae0e615f131617c4e119206c90)) by @ -- rm debug code ([b6d50ba](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b6d50ba6a40028267c91450972e035f7cc5e5a4b)) by @ -- rm macOS transition props ([2f3b6b2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2f3b6b29ae03395010720d49f9b18c3f1f48ccbe)) by @ -- rm unwrap ([8cdbb31](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8cdbb31dbe785bbb6bd484097937f7fcf186f900)) by @ -- root background color ([15ff9b0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/15ff9b06a1228c8f86ecb56c856d7406dab0d9c7)) by @ -- runtime config user select ([4037171](https://github.com/LibNyanpasu/clash-nyanpasu/commit/403717117e58a8a14d7d52d1a21a02fbbb94700f)) by @ -- rust lint ([84d3c3f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/84d3c3f7ebdf16bda28dd7df7d8b2d64e6e377bc)) by @ -- save enable log on localstorage ([d522191](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d522191f69efd9db32e8c9ed9f8b31ab4b3eccc9)) by @ -- save profile when update ([4942b0f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4942b0fca5c6859a6e729afc28f6009aed02412c)) by @ -- save window size and pos in Windows ([4f158a4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4f158a482932f2176af8850f6e25171da19bb1c1)) by @ -- script code error ([f1a68ec](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f1a68ece01c10e42cb861587656d86926157f85d)) by @ -- script error ([82ba604](https://github.com/LibNyanpasu/clash-nyanpasu/commit/82ba604b9966e7e2da8294a033ec4bf11abe7918)) by @ -- script error... ([209a5b1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/209a5b12079a16385efc1642ae22498b46a5cbee)) by @ -- script exception handle ([dd56336](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dd563360afab5b7bc9d273e5404b86e5ce26b860)) by @ -- service mode error ([31c6cbc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/31c6cbc0a255267bd5c641767c668b7b01f9cf1e)) by @ -- service mode error and fallback to sidecar ([5098f14](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5098f14aabeae8ab5553a3edc154080d30b38a53)) by @ -- service mode viewer ui ([a355a9c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a355a9c85e598db68951dfc10e8aca495b76eb7e)) by @ -- service ref error ([020bd12](https://github.com/LibNyanpasu/clash-nyanpasu/commit/020bd129fb43d1af4f972d6963766b842784cba1)) by @ -- service viewer ref ([781c67b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/781c67b31afaf353ca2c44c1a542769be90a94fd)) by @ -- set min window size, close [#734](https://github.com/LibNyanpasu/clash-nyanpasu/issues/734) ([8647866](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8647866a32a280ac72629a0c6bc0238caaf5aeaf)) by @ -- set_activation_policy ([f2bd6f1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f2bd6f1fce58325af292206694b7f3032fbf2e37)) by @ -- show global when no rule groups ([c935997](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c9359978f96eb21b3cd08019bdc4e8d65dab1f7c)) by @ -- show windows on click ([a092da1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a092da194388944e06b53ef387ea84469bf51517)) by @ -- sidecar dir ([e737bb4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e737bb4cea1062a9fa91ca3a8c6300288004d188)) by @ -- silent start ([#150](https://github.com/LibNyanpasu/clash-nyanpasu/issues/150)) ([5aa7d5f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5aa7d5ffe9b31d6358ae16588579f14741b82c49)) by @ -- simply compatible with proxy providers ([08fa520](https://github.com/LibNyanpasu/clash-nyanpasu/commit/08fa5205b02077410b198424e531dfa84429c52a)) by @ -- something ([a211fc7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a211fc7c975209d031bda202e428f93e5a28c930)) by @ -- something ([eb86b47](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eb86b471fee1ab20f209b4e5e068ba0c509541b6)) by @ -- something ([7d8fa4d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7d8fa4d78a6aaee4f3b4b105852e8243aefcfb87)) by @ -- sort proxy during loading, close [#221](https://github.com/LibNyanpasu/clash-nyanpasu/issues/221) ([b8a8190](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b8a8190a4358a587e63a1c7f7959e1abfdd7dc1b)) by @ -- spawn command ([0aa2565](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0aa2565df3c70a4206e5fdb90c554d227cd98796)) by @ -- style ([6e1a627](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6e1a627b8490d400f29f947d5f9496f228e62bf7)) by @ -- style ([0495062](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0495062110b286d8f92c451bb8d41337dd97573b)) by @ -- style ([5a93ba0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5a93ba05d55a20ff7e919827bfc5fb1024681cd8)) by @ -- style ([02fdb87](https://github.com/LibNyanpasu/clash-nyanpasu/commit/02fdb8778ba2b6e255c3b13b427a1c66d803921e)) by @ -- style issue on mac ([ba16ec0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ba16ec02e5941346e4fd6be73e4a4ce1f6fc5bb8)) by @ -- **style:** reduce my ([ebff652](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ebff65282492bf42018ec798fbe7c69a7a055446)) by @ -- tag error ([95349ea](https://github.com/LibNyanpasu/clash-nyanpasu/commit/95349eacab00b5fc59656226a8d0ca4f81943861)) by @ -- tauri csp ([57c4112](https://github.com/LibNyanpasu/clash-nyanpasu/commit/57c411288fa193ebb4c5e137690218a98c0fdc1d)) by @ -- text ([6da7757](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6da7757d36049d5e2f8e3ec04734b32414d1f2f0)) by @ -- The profile is replaced when the request fails. ([#246](https://github.com/LibNyanpasu/clash-nyanpasu/issues/246)) ([df14af7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/df14af7337c41097e2c071e9683f1d4e401e9c4a)) by @ -- timer restore at app launch ([30f9f1a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/30f9f1a021f5a2f6df11016fe31c182cdffbc0a1)) by @ -- touchpad scrolling causes blank area to appear ([84b2c07](https://github.com/LibNyanpasu/clash-nyanpasu/commit/84b2c07340aa23d718677f8f490deb720f72e4ba)) by @ -- traffic graph adapt to different fps ([fac437b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fac437b8c1eb4dcd38ae795a159d42c7d308f241)) by @ -- trigger new profile dialog, close [#356](https://github.com/LibNyanpasu/clash-nyanpasu/issues/356) ([d5037f1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d5037f180ee50650faa6b392c3e9487b49646b3f)) by @ -- try fix blank error ([f5edca9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f5edca94d3ce1ae0c33bfda9ee35b94def43b9f7)) by @ -- try fix undefined error ([b9b6212](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b9b6212b75999adece9c132d3fd57db4d66eaf2a)) by @ -- tun mode config ([ec41bb9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ec41bb9c7021a1ade26f6e2e4f6be60111f1e574)) by @ -- type error ([c77db23](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c77db23586ea3fb4f2bdfda8aed92af408748696)) by @ -- type error ([b6c58f7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b6c58f74c03ff3acf5c8906117a1739b540a3fc9)) by @ -- typo in api.ts ([#207](https://github.com/LibNyanpasu/clash-nyanpasu/issues/207)) ([bbbdc8b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bbbdc8b7a6e9c41590e72c6cf6c10cf5e8baa75b)) by @ -- typos ([bcf40dd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bcf40dde8c4e666af4b52711d882a0f2dcace189)) by @ -- unused ([cf96622](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cf9662226131a5dd2500e381db76d4c13fd4ac34)) by @ -- update profile after restart clash ([579f36a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/579f36a1ddad3f3e43143977fca44c8e4873dc55)) by @ -- update state ([dd605e2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dd605e26108c43851282827540eb12083da2b430)) by @ -- use crate ([2b6d934](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2b6d9348cd1319fc16afca702996bef876a85f06)) by @ -- use full clash config ([bbe2ef4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bbe2ef4e8e03d2a75ffd1baa1cbed5f8e60c4752)) by @ -- use io ([9b8f5c4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9b8f5c4fcf6c5d7a27d3e4a7e5ef978656d800d1)) by @ -- use list item button ([f06fa3f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f06fa3f9b73f7fd652f6fe104dec7adf24ad5969)) by @ -- use meta Country.mmdb ([e393ebe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e393ebede2769dc409d47ec1c6c3509bfb222511)) by @ -- use replace instead ([533dc99](https://github.com/LibNyanpasu/clash-nyanpasu/commit/533dc99e7dfcf2b58e9696059c1faf12ce2b5af3)) by @ -- use selected proxy after profile changed ([819c520](https://github.com/LibNyanpasu/clash-nyanpasu/commit/819c5207d28daa7bfdf4ba64d1a204130039fb18)) by @ -- use sudo when pkexec not found ([38a9a92](https://github.com/LibNyanpasu/clash-nyanpasu/commit/38a9a9240df0aad888a1764b7b407fa929e5378c)) by @ -- use verge hook ([572d81e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/572d81ecef1521a0c8d7b4c6277121109ed3ac9a)) by @ -- user agent not works ([cf00c94](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cf00c9476ff0b29c5dfd397deaec6dadc6144a74)) by @ -- valid with unified-delay & tcp-concurrent ([88c9b68](https://github.com/LibNyanpasu/clash-nyanpasu/commit/88c9b6849f867db15c3f4f4405a4381eef067ac6)) by @ -- version update error ([4e8d4f4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4e8d4f45918703dab8d24ecaaf40ee761a5c7563)) by @ -- Virtuoso no work in legacy browsers ([#318](https://github.com/LibNyanpasu/clash-nyanpasu/issues/318)) ([39ade59](https://github.com/LibNyanpasu/clash-nyanpasu/commit/39ade591746ef8e37d23ec325291afffc28537b3)) by @ -- web resource outDir ([eddf10e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eddf10e740c458f10d8757b2f66346f50adebac7)) by @ -- web ui port value error ([7a3285a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7a3285adaf29ecce08805079e370e62d55179f47)) by @ -- websocket disconnect when window focus ([6f5acee](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6f5acee1c340299221ee92b391eff0fa44bdcc37)) by @ -- when updater failed ([650e017](https://github.com/LibNyanpasu/clash-nyanpasu/commit/650e017b723b5eef759edbb2577011d31139d8b3)) by @ -- win11 drag lag ([6596fb0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6596fb00c7e46d19669f82b0ac7215eb52e2f3c6)) by @ -- window center ([2462e68](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2462e68ba18f913706367165066ae4b92e36b130)) by @ -- window style close [#45](https://github.com/LibNyanpasu/clash-nyanpasu/issues/45) ([b5283ea](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b5283eaaed884d7a9d6bedc156c864e723a1f365)) by @ -- window transparent and can not get hwnd ([98b8bd9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/98b8bd90eab77d93c0dd0c87df676600df815d36)) by @ -- windows issue ([bcc5ec8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bcc5ec897aa6748755ffb5321e53efb1a396b11e)) by @ -- windows logo size ([6bed7f0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6bed7f0e669fd76fb2e75d6a3f9d25124aefcd59)) by @ -- windows service mode ([1550d52](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1550d528bd331e876abcf90084d2bc40c242afec)) by @ -- windows style ([bd0a959](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bd0a959e18c74f4b62e6dfd90828937183389689)) by @ -- wrong exe path ([c9c06f8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c9c06f8a3de282dc90856b45633085589a296e47)) by @ +- **icon:** Change ico file to fix windows tray by @zzzgydi -### 🧹 Maintenance +- **macos:** Set auto launch path to application by @zzzgydi -- aarch script ([2643e85](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2643e853af43d9cbfa503e5aa67b696f1f28014e)) by @ -- aarch upload script ([aaa4fbc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aaa4fbcdbdeb46d179b718249eed4e9571825f73)) by @ -- add ahooks ([0bd29d7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0bd29d71be73a0f9038d22ca5248462b1af0e9ec)) by @ -- add api ([9c0276f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9c0276f97b057eafacec497a024f932f4817abab)) by @ -- add auto-launch ([3c3d77f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3c3d77fbea5ebdfd98396fa6604e157d87c58ed8)) by @ -- add ci ([cb9d309](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cb9d3098de3a8ca609b85c8192f4d86e7f206c47)) by @ -- add debug feature ([5b9e078](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5b9e078061d7777d19996a4019da33898836bfb4)) by @ -- add default bypass ([42fbee0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/42fbee0cdb26966e8a2ffa97461199c88ed93dec)) by @ -- add dev feature ([a3e7626](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a3e7626dd9bddbc1c6348ecef3a8f7387e01d565)) by @ -- add dev workflow ([b8ad641](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b8ad641ed605240cb815013365f93d1d63f1af41)) by @ -- add faq and download link ([5138a45](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5138a45b0fd7acc4f0a3881d65c41db21cfbd4ca)) by @ -- add husky ([afa56e9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/afa56e916eb199d34e45022732c164e59d2aa36f)) by @ -- add item template yaml ([069abed](https://github.com/LibNyanpasu/clash-nyanpasu/commit/069abed784e14872eabc53cd2e1f85352c120412)) by @ -- add linux link ([6293318](https://github.com/LibNyanpasu/clash-nyanpasu/commit/629331870bb5765371754fe265e440341df24d9a)) by @ -- add log level ([f714b30](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f714b30ead382c40f82a5a927e0d3462b2cbe3df)) by @ -- add macos startup todo ([8f5b2b4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8f5b2b4a0e52fd96f95e8a0de03a49b670a800b6)) by @ -- add openssl depend ([#395](https://github.com/LibNyanpasu/clash-nyanpasu/issues/395)) ([6783355](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6783355c4d9064393464dc2db4d0015cb2702dea)) by @ -- add promotion ([b224d4f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b224d4fa8a7fbf695219308fddd4b5b016a4fbef)) by @ -- add pubkey ([2e82eaf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2e82eaf59af633e05811fb4db55b9c22dfd97983)) by @ -- add release build ([595554f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/595554f18a70db429fc517b0885bd4f9855ce8fc)) by @ -- add support for windows arm64, close [#216](https://github.com/LibNyanpasu/clash-nyanpasu/issues/216) ([#209](https://github.com/LibNyanpasu/clash-nyanpasu/issues/209)) ([a9d6167](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a9d6167a9fe1b76fd9cc7a2ed9f6448883d54777)) by @ -- add support linux arm64 ([#215](https://github.com/LibNyanpasu/clash-nyanpasu/issues/215)) ([a916d88](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a916d88e85a681eb89dcbf17282ed6cb09670a2d)) by @ -- add test ci os version ([e1c869a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e1c869a3585116beed61b7fa1936074025b5cb6f)) by @ -- add updater script ([ae8c30f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ae8c30fe57416109d85c55abae0ce840c1a10db9)) by @ -- add x ([7e5999e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7e5999e86227681f00ba70ce75deaad5bf5a6172)) by @ -- adjust ([5735719](https://github.com/LibNyanpasu/clash-nyanpasu/commit/573571978cfa59602b8b9fb4afbf99ee5eed310d)) by @ -- adjust ci ([4f02c37](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4f02c373c21b6e095374c74df75a79c71c0cfb94)) by @ -- adjust ci and script ([936b213](https://github.com/LibNyanpasu/clash-nyanpasu/commit/936b2131e001dc4389fec80a9ca38b7cd6da3ea7)) by @ -- adjust code ([d1ba0ed](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d1ba0ed2b2d9ee1b233030ee5b00d210b2e4fd26)) by @ -- adjust code ([a32c77c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a32c77c5f18807c7f8f231134afecf3a5ec1fd2b)) by @ -- adjust code ([5225c84](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5225c841ae5b9c86a0826aff006247f036e170c6)) by @ -- adjust error log ([4e806e2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4e806e21a625c74e9c91cace4960a801d4b09ea3)) by @ -- adjust files ([fc48aa7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fc48aa71556a4e4cb112d9ffdb80b499a0f8abf0)) by @ -- adjust guard log ([e67b50b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e67b50b97617101596eeb76b27afc951667ab71c)) by @ -- adjust icon ([754c22c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/754c22c84e244e8a19de8565475c50dfaad6fb6c)) by @ -- adjust log field ([220a494](https://github.com/LibNyanpasu/clash-nyanpasu/commit/220a49469252a0acbc9eeb3418ce97e70ec2ff93)) by @ -- adjust style ([5d0ffbe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5d0ffbe4539733aa97f439ec056882f201ec1463)) by @ -- adjust type ([6eafb15](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6eafb15cf9a97bc6ef1380d90d0ee82b9f17e94d)) by @ -- allow unused ([439d885](https://github.com/LibNyanpasu/clash-nyanpasu/commit/439d885ee153c43b65f439abdfadcc3836861a1e)) by @ -- alpha ([10f6bc0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/10f6bc092acc4f26f3e6cea066c3c783dddca25a)) by @ -- alpha ci ([b978aae](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b978aaec211c6a64c5ab8c2a611feed155e0141e)) by @ -- alpha ci ([e6c36ad](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e6c36ad6028fcc044312fb137ad2a16fd8271019)) by @ -- alpha ci ([1b7a52d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1b7a52d5afbc64bba761068d55d0d6140795ac9a)) by @ -- alpha ci ([e510978](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e5109789bf9a18fcdfab17c0b82390cb381435bb)) by @ -- alpha ci ([490ba9f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/490ba9f140207e8b7e951cf58b60b0bf9ef20c8c)) by @ -- alpha ci ([10f3ba4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/10f3ba4ff42d9d28a98ac34eebe5623e83d8f757)) by @ -- alpha ci ([70bcd24](https://github.com/LibNyanpasu/clash-nyanpasu/commit/70bcd2428f713e8b4688409bdac61443bcc1e17c)) by @ -- alpha ci ([ff6b119](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ff6b119f27e08d7b704fc1a8a8f53d53a2ef6366)) by @ -- alpha ci ([536e3ff](https://github.com/LibNyanpasu/clash-nyanpasu/commit/536e3ffb111c6746059a8df8a732bd76b79241ed)) by @ -- alpha ci ([f24f6ea](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f24f6ead92a60224875c05469ea13faf8b47a64e)) by @ -- alpha release add portable ([e4e1699](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e4e16999c8d4c93642ddbe67b66f8af6711d4e70)) by @ -- cargo update ([aa7df42](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aa7df4282efc86918738e06e4356788aaec4b3d2)) by @ -- cargo update ([43c63ff](https://github.com/LibNyanpasu/clash-nyanpasu/commit/43c63ffa7007d6cf7733e379b70db9b00edcf29b)) by @ -- cargo update ([e08032c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e08032c0fa5eefdd6b05cccf664a640fb22b0be7)) by @ -- change ci ([9ca83d3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9ca83d32916721bf7af6349d9e2fcf37977e1a66)) by @ -- change default height ([df0b5a8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/df0b5a80dc24d86e1ff8937d32e03b0418b26f1e)) by @ -- change default user agent ([75ba162](https://github.com/LibNyanpasu/clash-nyanpasu/commit/75ba16281be2f45571865745993254876c5c7e85)) by @ -- change tauri to git repo ([26ef4c9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/26ef4c996159529adb8a7fa4df7bfdbe8ddd3625)) by @ -- change tray icon ([3b460ab](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3b460ab91fa79b13b6df160543bbd29e48e3e70b)) by @ -- change ubuntu ci version ([23351c4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/23351c4f1cdadf803efd6aab96600474f4854dc4)) by @ -- check script proxy agent supports ([d83b404](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d83b404fc3d91f1eb85e1b8a780ddcdb8eefefef)) by @ -- ci ([4480ecc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4480ecc96d631626bded0d1171cfaa91eaef36d9)) by @ -- ci ([73119bb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/73119bb7c524593ce5ac04ff340137527123ffd4)) by @ -- ci ([6e19a4a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6e19a4ab8bf437fb4f736f7116d30b027cc08f47)) by @ -- ci ([b156523](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b156523a7fb46d8de7afc5d1e5eabfeb33795cdf)) by @ -- ci ([558b849](https://github.com/LibNyanpasu/clash-nyanpasu/commit/558b8499af6262e007ed84e1f44104e4d324e121)) by @ -- ci ([770d5cd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/770d5cd11cdb63a07d44000c9f86b21afbe5171c)) by @ -- ci ([49e37a1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/49e37a19a58f21a3072132043cbced3b6a60ad1d)) by @ -- ci ([f981a44](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f981a44861e585c2d9e17777f1b81453e17f83b8)) by @ -- ci add macos ([4c1a50a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4c1a50a3cacbf5c5e574c859a2ea3fb335a0f55b)) by @ -- ci support linux ([b756ae3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b756ae39d0fd5cc92f2249e552a880e457ef0b5a)) by @ -- clash meta compatible and geosite.dat ([f7500f4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f7500f4cad1df8e7a38fed24274cf7650589e17f)) by @ -- clash meta linux use compatible version ([ab2f054](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ab2f0548a38360981e0781fc398316519a154633)) by @ -- compatible ci ([5f5cc55](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5f5cc5533176267b42164cdb077cb89cacbf1a46)) by @ -- compatible with macos ([f320d51](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f320d515d5e7cf4915eef744d0ef3b5351db3f12)) by @ -- continue on error ([91c1421](https://github.com/LibNyanpasu/clash-nyanpasu/commit/91c14211c6facb648f31306f16042af497369036)) by @ -- correct verge temp config ([7808a04](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7808a0436702f833e17a5ac57d6c78e705943712)) by @ -- default release body ([b615bda](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b615bda17ebc3a13e512159d4d4e3d742ff686dc)) by @ -- delete current release assets ([d87bb25](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d87bb25bafce6942a4d38d87da3b120d13058bf7)) by @ -- deps ([17f7247](https://github.com/LibNyanpasu/clash-nyanpasu/commit/17f724748fcc3b6f832cf699d4ff83041c3cd7c4)) by @ -- dev support macos ([240f4dc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/240f4dcfb16e36bc39e88aad9b154503497e633a)) by @ -- do not save clash bin ([e224709](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e22470969e51f695b48915a9306335878ad4c539)) by @ -- do something ([f095d1b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f095d1bf84c7507778bd0b171795f599b0fa02fe)) by @ -- drop upload-artifact & use prerelease ([a86eeb6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a86eeb636da74b19c85a7167ea9f4e63ae5ee721)) by @ -- emptyOutDir ([38e55be](https://github.com/LibNyanpasu/clash-nyanpasu/commit/38e55be7aa57466846d1194018df49922ddb3bb4)) by @ -- enable meta by default ([aaef6a9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aaef6a9e9cb0ccdc7b61d36b1561a48e60c1df53)) by @ -- enhance ci ([1a5d9f7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1a5d9f7dad7a610ff46b2377a913b3868b9226f7)) by @ -- enhance ci ([327b9a1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/327b9a175762602f34b8687063f8e302de498919)) by @ -- enhance publish ci ([81ee989](https://github.com/LibNyanpasu/clash-nyanpasu/commit/81ee989f1f817c2da69f0c71f3fc4a8232f306b6)) by @ -- enhance wip ([0f5923a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0f5923a10a55dc4fde7a251c1b0312d496f2343c)) by @ -- error text ([d610319](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d6103191ba6b28dd5519ca967153d2ee302aeace)) by @ -- evaluate error context lazily ([#447](https://github.com/LibNyanpasu/clash-nyanpasu/issues/447)) ([94f647b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/94f647b24ade77be1eaf6bdb6df3ab4086a66ddb)) by @ -- fix alpha ci ([d02431e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d02431e260810e627aab16579947578c980f16e1)) by @ -- fix check script ([e8eb68b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e8eb68bf245b81be7f81b8cb17fc9809e98f0e76)) by @ -- fix check script ([24f4e8a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/24f4e8ab997cea32328c8610c98460c1579d7110)) by @ -- fix ci ([8174ab7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8174ab7616175790356d0a55acc5ea7b2b8622a9)) by @ -- fix ci ([8caf363](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8caf36349fae32ffe6cd739aa02d0e5cff3d80c5)) by @ -- fix ci ([6934de5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6934de58e5ca0023bee948d91a37474fac34fcdf)) by @ -- fix ci ([ebccf40](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ebccf401ddb379e1e6ff71eadb0c1dbb84dbbc5d)) by @ -- fix ci ([6649484](https://github.com/LibNyanpasu/clash-nyanpasu/commit/66494845b7a742b50c98e97344a2f154db5c64a9)) by @ -- fix ci ([173f354](https://github.com/LibNyanpasu/clash-nyanpasu/commit/173f35487e9f2d60e4655c20618d86e7be6fec32)) by @ -- fix ci ([74cbe82](https://github.com/LibNyanpasu/clash-nyanpasu/commit/74cbe82dd1be949bdb2153b0d281ebc6de39deda)) by @ -- fix ci ([a8c30d3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a8c30d30a91e2c0466e4d27cf9539e2790e07adb)) by @ -- fix ci ([320ac81](https://github.com/LibNyanpasu/clash-nyanpasu/commit/320ac81f482cb4153aac703aea2ec7b3a9c77a8f)) by @ -- fix ci ([aab5141](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aab5141404351e7b1a1e550d6a7707aa5a77cef7)) by @ -- fix ci ([8db554b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8db554b377a65842325341da538f2ec18f2e536b)) by @ -- fix ci ([bef4033](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bef4033d94da9ff754bee0019279668827113e0e)) by @ -- fix ci ([2dcf8ac](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2dcf8ac96f78bf449a46399a3f52afaa549bcb15)) by @ -- fix ci ([e1793f5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e1793f57efcc8e341d166a8f8a93403cc645080a)) by @ -- fix ci env ([d9ce998](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d9ce99887c13ff91e4e00fa1ec9f3a8b4ecaad14)) by @ -- fix clash map, close [#736](https://github.com/LibNyanpasu/clash-nyanpasu/issues/736) ([c843bdd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c843bddbfe7804fbb465707566ebf10b5008e601)) by @ -- fix faq ([2fda4c9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2fda4c9f670e4ed3ec20e53ccf5bd7098af3f0bc)) by @ -- fix linux build ci ([b93284b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b93284bc2fc852de62deba656f8797f897ca1451)) by @ -- fix mmdb url ([3e555ec](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3e555ec9f1197ddf0cab551712cf1f11252071e0)) by @ -- fix mod ([db802e9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/db802e959d4dc44f0211c5f6daa79cdd52c7b62d)) by @ -- fix rust lint ([74252cb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/74252cb66bf8bc0cf0f67a9f311604760e6110e3)) by @ -- fix test ci ([1443ddf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1443ddfe6c89fea24d903bee28ecf072d37d3edd)) by @ -- fix test ci ([54457a3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/54457a3e1be1a2bf25a734cc45c196e3afed9c35)) by @ -- fix test ci ([64216cb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/64216cba6756f7c39acb5a9107108e897936e517)) by @ -- fix updater ([74d0957](https://github.com/LibNyanpasu/clash-nyanpasu/commit/74d095774d95a679928713b2d0244b4e79168d2e)) by @ -- fix updater ([17a2722](https://github.com/LibNyanpasu/clash-nyanpasu/commit/17a2722e6ddddc12274de75a9a0f42b166f8db4e)) by @ -- fix updater script ([7633f9f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7633f9f88b69b65f70ee43776c30f39ac98e6a16)) by @ -- fix: typos ([417a5a8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/417a5a8214d031feba8f20838c059fcdccbb13bc)) by @ -- fixed tauri rev ([771af6a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/771af6ae08835c9ae7cc0e3f291c4dcb214c9d28)) by @ -- format ([a68eb4a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a68eb4a73e362396cc6199f90debf241519ace4a)) by @ -- format rust code ([4668be6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4668be6e24dbc36fc07074f2854ce5953fbc6b11)) by @ -- green version bundle ([0d189ca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0d189ca617cfaeca50d84793525982112deff099)) by @ -- ignore update json ([dbb3cb8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dbb3cb8cc8711cea001af0064b8358093c53cd10)) by @ -- import MUI Lab ([06121ac](https://github.com/LibNyanpasu/clash-nyanpasu/commit/06121acfac09d915075e4dfea0503a4d69c00e44)) by @ -- init connections page ([65dd6bc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/65dd6bc6a6b346e993fe2117cf7658bafea70d5a)) by @ -- init project ([1afaa4c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1afaa4c51ea0cc79c2e2ecb225dc4ea78864080c)) by @ -- lock version ([71f5ada](https://github.com/LibNyanpasu/clash-nyanpasu/commit/71f5ada0a3b97ce7388842968fbd7a60729c1036)) by @ -- meta ([b7bdb7a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b7bdb7ae50c5829d16322041c009a334e5c65bbe)) by @ -- meta ci ([ac66c08](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ac66c086f88c657383a7b24cd352b00c2c36a2bc)) by @ -- new logo for mac ([43ef3cc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/43ef3cc562891922d2e043377d2c76675d2381a1)) by @ -- new rule page ([74b5150](https://github.com/LibNyanpasu/clash-nyanpasu/commit/74b51509b6a938b1c194fc20889ddfb934f47568)) by @ -- portable script ([3b59936](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3b5993652f7ff9f3e9a274da3e90e276f3d646f9)) by @ -- post version script ([92fc094](https://github.com/LibNyanpasu/clash-nyanpasu/commit/92fc09493e0e41272b9291e599ba6e613de4a224)) by @ -- profile release ([6ea5677](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6ea567742b4f0daeda0a618d47164e9fbb7b9a46)) by @ -- readme ([0ff2fca](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0ff2fcac11955944ce224f4bdbe08a6bc07b4a38)) by @ -- readme ([cac1ce6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cac1ce68956b021e8e00f466d14def81ae8eeb36)) by @ -- readme ([c15c38e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c15c38ea8ffdc74f49cdb5a4a7b852cbc0c4d16f)) by @ -- readme ([#43](https://github.com/LibNyanpasu/clash-nyanpasu/issues/43)) ([9910f6b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9910f6b817348760450d3da704f59e83f09c86d9)) by @ -- readme remove ad ([7daa322](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7daa3224415d1736012a3f099e35d7fb8a315a1f)) by @ -- reduce icon size on macOS ([04c754c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/04c754c0acaa94b2feab0140df2d412e0e5eba2c)) by @ -- rename file ([ee26bb3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ee26bb3b5d9058ea606605fbf95cdda7b3c33028)) by @ -- rename green to portable ([c2449e5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c2449e53c4de65f3da74dba6d2f5ee5a09961cb0)) by @ -- rename productName ([68450d2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/68450d20425c88619f484b0dfd0e26b4355d9194)) by @ -- rename script ([18c48db](https://github.com/LibNyanpasu/clash-nyanpasu/commit/18c48db7f72604e1d4cec8288950b21d082ce35f)) by @ -- rename temp dir ([5cb5d74](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5cb5d74eed704d623147d2d963e009e7d5b1dc69)) by @ -- resolve wintun.dll ([6eee10d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6eee10d46d7c60fd2cbead717365743362f2edb7)) by @ -- rm aarch64 ci ([ec94218](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ec94218a4b46f58829b4340762eacaa4430c4838)) by @ -- rm code ([58366c0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/58366c0b870f9578f9dddd4668641f943f198d32)) by @ -- rm code ([57aef1d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/57aef1d3c206507664e207969e61b17277375ce8)) by @ -- rm code ([fcf570e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fcf570e96ef49b7ca85f060699b3fff9f8969b6d)) by @ -- rm console ([c8ccba0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c8ccba0192c998ef5bfe2447675dfb2bc0f180e7)) by @ -- rm dead code ([72ff9c0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/72ff9c096404e102e52c3d9de8036d93460dba60)) by @ -- rm dead code ([45fc84d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/45fc84d8be35e5653dfd4cc31b7c149b7ea880ca)) by @ -- rm dead code ([732a1f4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/732a1f46940c6beb0e7146ee741be2c131485388)) by @ -- rm file ([4fde644](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4fde64473314ce92f78d938de8079dc6a0a859cc)) by @ -- rm file ([9327006](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9327006e618c4c0dc03abdd1e5ab42b9f0d4bee1)) by @ -- rm file ([db6bc10](https://github.com/LibNyanpasu/clash-nyanpasu/commit/db6bc101966966d74c27912421d4802f5c1752db)) by @ -- rm polyfill ([f33c419](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f33c419ed9bf6edba186b24ae4e456a5510b9299)) by @ -- rm some files ([359b82c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/359b82c29cc3982e864d121d2346f379a617aa9e)) by @ -- rm then ([dc9bcc4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dc9bcc40ee35892be18015561422086ca5fd9a8c)) by @ -- rust cache ([b54171b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b54171bc2cd0e49d8324a1fb5ff3167442ac83a1)) by @ -- save lock file ([01e8db3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/01e8db317ee27476374e7f8928d0921ccbf595ca)) by @ -- show open app and log dir failed message ([bae721c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bae721c49eb85b590fde3b2d1158f79086d44c9f)) by @ -- something ([7d878d2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7d878d25519e30bdeb0f7e2df4685554edde37ff)) by @ -- someting ([860c44e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/860c44e93df067e9ad1558ba20fcd30d1284ec5e)) by @ -- switch updater endpoints ([3459a16](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3459a16b48caa5e379e03395277cf3062442db7d)) by @ -- tag name ([1f20845](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1f208454aea793b368fe267ecfc9f71cffc24366)) by @ -- tauri allowList ([2f6efbe](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2f6efbed637ccf3c8558a231dff1bbe7aa47afe6)) by @ -- tauri feature ([991897a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/991897aff4432adb43cfc6e5e65db1e83f0779fb)) by @ -- tauri updater env ([74bbd3c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/74bbd3c3a2ba10bf064c08c80c6d6e3b7a5ab3a0)) by @ -- temp ([182bf49](https://github.com/LibNyanpasu/clash-nyanpasu/commit/182bf49ad0c327a9c9e65c1b81924b9220d521cc)) by @ -- test ci ([bf180e6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bf180e6a2c2ca84b8fb5077b023ab3e7c4e31204)) by @ -- test ci ([864a582](https://github.com/LibNyanpasu/clash-nyanpasu/commit/864a5820c9cc9dd4401d5510733f71260ac8ae9e)) by @ -- test ci ([a3a724e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a3a724e2e6ad37dc65abc45e5ce26880be87d1e8)) by @ -- test ci ([73235c8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/73235c86993997dd0d34672973e2a497e298b613)) by @ -- test ci ([c2e5c7c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c2e5c7cf385a5d1326eb2481d6a2431440e2255c)) by @ -- test ci ([bac5734](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bac57345277aef33292d896716a08042afbadfa7)) by @ -- test ci ([a173624](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a17362437ac55d5c042723a4acfa3051b794a144)) by @ -- test ci ([5421c94](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5421c94853c710ef1bdd112e703a2caea1e481d5)) by @ -- test ci ([a543436](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a5434360bcf5a681d800a7ca9e557a9a19f44008)) by @ -- test ci ([99c855b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/99c855b01bc42a853617640ca1f5946227a392b3)) by @ -- test ci ([c2eaedc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c2eaedc959c0fddabcf5579f23aed322f31cd4bf)) by @ -- test ci ([66fccd3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/66fccd3c68c3a9dff2e45f4e1bdcee390714d3a5)) by @ -- test ci ([9a4ebf4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9a4ebf4daab3c13d6245e06093377998af41494d)) by @ -- test ci ([591add6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/591add6e0c2741ccbbeefeef34b54a1ccf6e69a4)) by @ -- test ci fix deps ([a631cd6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a631cd67ecbbb655a508bb5ee75205c63a155de4)) by @ -- test linux ([1ea07c4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1ea07c458bf7ffc637d2c54daac25ef05b8f7b61)) by @ -- test: use pnpm ([890f55c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/890f55c9dc62ab99bdde9e4d338e92d3021804ea)) by @ -- tmpl add clash core ([f0ab03a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f0ab03a9fb4832411dd8c537b66b660decd0a0ac)) by @ -- try fix missing libssl3 ([#378](https://github.com/LibNyanpasu/clash-nyanpasu/issues/378)) ([2637918](https://github.com/LibNyanpasu/clash-nyanpasu/commit/26379182db635772fde72e12c74af461baf3ed4d)) by @ -- tsconfig: skip Lib Check ([ae25ade](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ae25ade3186b33dd1e6a27ae0f6488485d04760d)) by @ -- update aarch rule ([5e8dfe7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5e8dfe7267dcb780bd7eb028b65276321ddba596)) by @ -- update actions ([cc96b5a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cc96b5ad0425d71f52943808fd02b193ad9a1bc4)) by @ -- update alpha ci ([0477744](https://github.com/LibNyanpasu/clash-nyanpasu/commit/047774475cba12a2e0951402718ec2015601b2a0)) by @ -- update auto launch ([de90c95](https://github.com/LibNyanpasu/clash-nyanpasu/commit/de90c959e09717d9787c6bafe55c3f6fce92550c)) by @ -- update auto launch ([db324f5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/db324f54eb67951c3c4a0d219f9aeb0f5e8d3410)) by @ -- update check script ([9638eef](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9638eefc91cca295eb9bb1fd24fe36a1e2a92396)) by @ -- update check script ([e7db2a8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e7db2a85739680496a97996b5b0569e4bf5f7190)) by @ -- update check script ([76cf007](https://github.com/LibNyanpasu/clash-nyanpasu/commit/76cf007fff15e7fc30bcf1238e46b3757cdb5c90)) by @ -- update check script ([a13d469](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a13d4698be964e7c7aebe272dd5425e749a528b0)) by @ -- update ci ([241b22a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/241b22a46585f7dc4e474f781de395b549888968)) by @ -- update ci ([525e5f8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/525e5f88ae47c45270ec44ff94cc484fdc447322)) by @ -- update ci ([2f8b391](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2f8b39186fdfee3500e805578647bb907b764822)) by @ -- update ci ([1ac1d6e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1ac1d6e9030460f8a2dae42795dfbc2dee52cf0e)) by @ -- update ci ([664be2d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/664be2d0ba30ca23aa0bb4c59b1042413b891c13)) by @ -- update ci node version ([005eeb0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/005eeb0e0b9e4b8eb9a0fadcacec924448ddf0c9)) by @ -- update clash ([1367c30](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1367c304cfd79ba420ce113b920c413b248b9b5a)) by @ -- update clash ([06e1e14](https://github.com/LibNyanpasu/clash-nyanpasu/commit/06e1e14e02d926348329804f08895a8b2a2830e0)) by @ -- update clash ([ed17551](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ed17551170accc1364fa249a563e788e4eb9074d)) by @ -- update clash ([d00e8f6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d00e8f6e193c1d7aea93dd742944ce8531a04256)) by @ -- update clash ([5b8c246](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5b8c246d5372f46a9e47bfc7c897b1a3734db3b1)) by @ -- update clash ([b79456e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b79456e91b636dd658b0d5dca9d9fb7e5546c69f)) by @ -- update clash ([8643dc4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8643dc43b1026cbd24956e42bdba24d8483658bf)) by @ -- update clash & clash meta ([c2109d2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c2109d245f1c7a2695e852d45afd099cf6d053cd)) by @ -- update clash core ([31978d8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/31978d8de0cc5918c77e5d3e470fa03d5516ac50)) by @ -- update clash core ([8c31629](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8c3162965568b428c9c7d0969fc130a6883a993a)) by @ -- update clash core ([4a74bae](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4a74bae8c74c547469032f70e9c393e04772d589)) by @ -- update clash core ([9f492fa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9f492fad49f52fdb1d58b4e71bd3f5dea544446c)) by @ -- update clash core version ([#476](https://github.com/LibNyanpasu/clash-nyanpasu/issues/476)) ([af5e0d5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/af5e0d589ec0825ba50485fb5414d88e87fb7cf1)) by @ -- update clash meta ([8a5f12b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8a5f12b97cc3997962896816a7e801e44e88a202)) by @ -- update clash meta ([b0d651e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b0d651ece1db949c7bfb5ddbb6653de8db5bae38)) by @ -- update clash meta ([97be286](https://github.com/LibNyanpasu/clash-nyanpasu/commit/97be28638b872c26b6b9d287051b4931124037f1)) by @ -- update clash meta ([56ccd3a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/56ccd3a0ac1ca6cb59f4834972edc7193bad62ae)) by @ -- update clash meta ([f20f0f0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f20f0f064e8bd27d96f0799ef760234c572464fd)) by @ -- update clash meta ([0cb802e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0cb802ed9a9cc2f2c080600dd114b5cebfc49816)) by @ -- update clash meta ([38e1a4f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/38e1a4febf206cb2a1eae00b76cd778c631e5633)) by @ -- update clash meta version ([5a35ea1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5a35ea116f7ca76a079afe7c0958d6c9a8c955f3)) by @ -- update clash version ([f3a917b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f3a917b5e7b6b11403c599f76c7e1bf3db45f37a)) by @ -- update clash version ([d717fe7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d717fe7e8c43c6192561a44af1d10bbe9b152e68)) by @ -- update clash version ([711b220](https://github.com/LibNyanpasu/clash-nyanpasu/commit/711b220a05c668901d646bbc50f983ea8791c0ba)) by @ -- update clash version ([b5432c3](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b5432c372886075ed1f59d0842cd3b49c40fe451)) by @ -- update clash version ([1581e9b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1581e9b1cd31bb4da5f619dd9830c663462daafe)) by @ -- update clash version ([dc492a2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dc492a2a0a4fc246022339e87ddbcdfcf301ec50)) by @ -- update clash version ([2f284cf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2f284cfdc961564d33b073d181d8d9db6c9fa4d8)) by @ -- update clash version ([5cff4e2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5cff4e299bd4baf49c0bb947dad1fdf9fd94201b)) by @ -- update clash version ([0ef1d5d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0ef1d5d0deaa9bd49ef16b0ef36aa2eb30a72514)) by @ -- update clash version ([72ff261](https://github.com/LibNyanpasu/clash-nyanpasu/commit/72ff261fe38dc1c58d34a79a3751dba268689cb6)) by @ -- update comments ([b5d0c2b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b5d0c2b78bacf3676a771d750aa6f85d9b0c39e8)) by @ -- update config ([a35cd28](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a35cd28562a5507eb8bc6d4d5a5a344e562d4364)) by @ -- update copyright ([9cd6c5c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9cd6c5c6245fe179af18cdc0d6541ad61de9e7a7)) by @ -- update dep ([359812b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/359812b7ed13b3a60db8d9bb85db2063ecb30cda)) by @ -- update dependencies ([89bdc8e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/89bdc8ec75c481bef66d973bd30234f1281794f1)) by @ -- Update dependencies ([2078ce7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2078ce7446d647fdd10a212d4ec9e0d927d5fdd7)) by @ -- update deps ([b1f4575](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b1f45752cf95970b7b7129d565aa8b9700326d5d)) by @ -- update deps ([03c8a8e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/03c8a8edb28eeade7080396db88df8aa59151855)) by @ -- update deps ([ff573bf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ff573bf377d450ef6d98d9b57c0e29bb53ab5dad)) by @ -- update deps ([7287562](https://github.com/LibNyanpasu/clash-nyanpasu/commit/728756289b458ff22abdbdf234c7cffa4ab0d718)) by @ -- update deps ([daf66bc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/daf66bcec4ce64066eaaa5794df459e3bd017315)) by @ -- update deps ([4d97916](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4d979160c21078019d1f65736508571e605d34ff)) by @ -- update deps ([c71ba6f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c71ba6ff8d948a60c5116b04621f245daecb4c9f)) by @ -- update deps ([d93b00c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d93b00cd15f14cfa576611fd2ad3027fd9b19209)) by @ -- update deps ([0309c81](https://github.com/LibNyanpasu/clash-nyanpasu/commit/0309c815b96d7f23dd023faee84436fa655b504f)) by @ -- update deps ([54af0b6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/54af0b675d8b3babdcb857f3217d2932a3301b5b)) by @ -- update deps ([62d4c65](https://github.com/LibNyanpasu/clash-nyanpasu/commit/62d4c65e1c79ab24bd62c932b19b1a33c6994178)) by @ -- update deps ([3bd9287](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3bd9287c5db1922b94f22cdbbf03b08a4678ec5b)) by @ -- update deps ([acf47ac](https://github.com/LibNyanpasu/clash-nyanpasu/commit/acf47ac9475863287b0f0a59eac1f1cbd6ec0585)) by @ -- update deps ([fda24e5](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fda24e5f5a06a384dc3b794fb66149d98e6a0510)) by @ -- update deps ([55cc83a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/55cc83a5d4bb73cd4b0709b2eab327c68a2221c0)) by @ -- update deps ([8637a98](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8637a9823e5a896c16e96a6e72dd6032d3c82779)) by @ -- update deps ([b615c48](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b615c485f78fd9b3ad8e4c228dd60cbda66e0827)) by @ -- update deps ([7aecd83](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7aecd83c4a1a6af92cf1ec304cbc35a5f86770af)) by @ -- update deps ([35aee15](https://github.com/LibNyanpasu/clash-nyanpasu/commit/35aee15b6d9fff055c84ae3bb7d38676b2591724)) by @ -- update deps ([8464e31](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8464e319fd172d30a4eb2fd9d014f56a8aa6ba4a)) by @ -- update deps ([72f10aa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/72f10aaed13ab951ed4f3bfb9e7e9ab0bd6ce532)) by @ -- update deps ([ba29c66](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ba29c66e3b8658dfb796b69a28bff186cc876478)) by @ -- update deps ([a238f7b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a238f7beba4075027ff1106bf76ea6b4973a3f3b)) by @ -- update deps ([b5e229b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b5e229b19c9bc75a134d47d19573e2b8df4ab50b)) by @ -- update deps ([40bcb22](https://github.com/LibNyanpasu/clash-nyanpasu/commit/40bcb229771b83a9e5d1b52b8b905c52dc879098)) by @ -- update deps ([36b9c07](https://github.com/LibNyanpasu/clash-nyanpasu/commit/36b9c079283e535f0928d00e4904ab37c73f935c)) by @ -- update deps ([c72f176](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c72f17605cd2f2674eb95039c1b816ee1702a648)) by @ -- update deps ([f7c7cd1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f7c7cd1d3ca4bd05a5af340aa16127c53ceb49b6)) by @ -- update deps ([4df6571](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4df6571ad916c52adff9acf3fdb0ec08821ad807)) by @ -- update deps ([b6aa50d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b6aa50d3dccd9c64a5cc418b52b4a8c9436bbf0a)) by @ -- update deps ([7e4506c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7e4506c8603f8cd38848f8ebb0a34c7119f00c5f)) by @ -- update deps ([ccb68bc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ccb68bcda9c34f7423c9d8f955d9d326d21b6610)) by @ -- update deps and app name ([5ef4285](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5ef428555896e33417b01616f88ab69f7dfb3cb3)) by @ -- update geo data to meta, close [#707](https://github.com/LibNyanpasu/clash-nyanpasu/issues/707) ([ab6374e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ab6374e27885acd92c44de66ea8da90f84aa769c)) by @ -- update gh proxy ([78fc47a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/78fc47a9c44d7aa3b1dce5220b1a6e71affb6f76)) by @ -- update issue templates ([9ea08f4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9ea08f4fede0daf1f1259016adc7798b6c8aaa09)) by @ -- update license ([1cd7ae7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1cd7ae7db2a4cbe0ed78a911a509c8266707f62e)) by @ -- update log ([7af2ffc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7af2ffcebf8fe784ecaba9fefafdee92fea479df)) by @ -- update log ([f39a5ac](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f39a5ac9c2b123e6f9e1049574faf6fc22a0544c)) by @ -- update log ([c49c3cf](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c49c3cf7f08680506a8fd3463169f91e23ebe6b2)) by @ -- update log ([6193395](https://github.com/LibNyanpasu/clash-nyanpasu/commit/61933954f395c6ac0f336e845d26a473091a2244)) by @ -- update log ([30243c8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/30243c84cd21e0011c2dece0bf2a17d1d14a4143)) by @ -- update log ([4c7cc56](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4c7cc563dccb337021905ac2f2ce7c257e488a8b)) by @ -- update log ([6b4f6fc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6b4f6fc71e7371afea507e0907b6ae02d49ca629)) by @ -- update log ([88aa270](https://github.com/LibNyanpasu/clash-nyanpasu/commit/88aa27072863fbd49e97613b88b6a4238aaa38e2)) by @ -- update log ([eb770ed](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eb770ede1a1086e69e651e7af5c719887c82552d)) by @ -- update log ([99adfb4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/99adfb4a9e8d0b4f1c90e53e17effe485d498720)) by @ -- update log ([351cb39](https://github.com/LibNyanpasu/clash-nyanpasu/commit/351cb391e546b9fc9493ea51a51e134b294018fa)) by @ -- update log ([446d2ab](https://github.com/LibNyanpasu/clash-nyanpasu/commit/446d2ab3af95080b3e83548f39518fea9efd2188)) by @ -- update log ([e545d55](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e545d552f684184022a13961292459c7243fa963)) by @ -- update log ([48f3a93](https://github.com/LibNyanpasu/clash-nyanpasu/commit/48f3a934c94a24643ae10387b53247cc4daa6fbf)) by @ -- update log ([eedc4ab](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eedc4ab6488acfbf29a2902206c48f72193d9bfd)) by @ -- update log ([68d2a6e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/68d2a6e951b9f7c7b4ddf5c91dfcd924b2becb68)) by @ -- update log ([23ebeb1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/23ebeb1cc05a0f59a9d1a9b79e275fba71d8264b)) by @ -- update log ([6507426](https://github.com/LibNyanpasu/clash-nyanpasu/commit/65074264b8d98e6d042d950294e90da624685dfb)) by @ -- update log ([f4a1f1f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f4a1f1fdc819dbafcb4efd29fe1a32464462db7d)) by @ -- update log ([aa0740f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/aa0740ff94d413be29e6f273a8e407066e0905bc)) by @ -- update log ([f54ba05](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f54ba05b00401d731bdbac9f6b279ea7d71430f2)) by @ -- update log ([b829183](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b8291837fce95215dff1bbde1ddf895e8a0e136b)) by @ -- update log ([74e10dc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/74e10dc01258af360020319b2002736cf42e2162)) by @ -- update log ([d298bda](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d298bda92c84c6c16c0177176011e4672a462864)) by @ -- update log ([fe0ad0f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/fe0ad0f5cb8aa8b996e3a0219142976ba59b5496)) by @ -- update log ([4140fc8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4140fc86ee83935db16b00a2b290e4bb26d53633)) by @ -- update log ([4678fc7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4678fc7dde9354f2d759ecf53a9b4794703c1065)) by @ -- update log ([366c465](https://github.com/LibNyanpasu/clash-nyanpasu/commit/366c465cade5eb5f845f4bcd46cc10dacea15916)) by @ -- update log supports ([6a4924b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6a4924bb16550c896ed503e8f16b597c0208fb18)) by @ -- update macos icon ([2f1ea08](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2f1ea08b8a63aaf6158f4d732d99c2ce09c10fdb)) by @ -- update mmdb ([1c8fb33](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1c8fb3392ad5c7aea71dbfc2781b3acba62f483d)) by @ -- update mmdb ([c9d9909](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c9d9909d74ed94a72fd22a34051758edbae918bc)) by @ -- update product name ([5cfe5a4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5cfe5a4939a1b37d587c85ca8a5e6ed333d38894)) by @ -- update profuct name ([584d490](https://github.com/LibNyanpasu/clash-nyanpasu/commit/584d490856b50c6053bec4e4dd7da5ea78bf7b54)) by @ -- update publish script ([b6543bd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b6543bd87f6f31eb6b4d648cbab46c5db64ca574)) by @ -- update readme ([afc77e7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/afc77e7adc1c3685a16358c1f02c45c076610ac4)) by @ -- update readme ([024f42f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/024f42fce6b1f32531328a426d820beb6911e0d1)) by @ -- update readme ([954b21c](https://github.com/LibNyanpasu/clash-nyanpasu/commit/954b21cf39e4da320a3c5624fa04499f5e003814)) by @ -- update readme ([12ac7bb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/12ac7bb338c0ef310329bd2ab77f4a3d2bf7680b)) by @ -- update readme ([f94734a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f94734a5c80126762b57834ab8da4b87ccc5df9d)) by @ -- update readme ([1fba903](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1fba9039afd60222f1cb9f597ebfa0ce5307f789)) by @ -- update README ([#435](https://github.com/LibNyanpasu/clash-nyanpasu/issues/435)) ([d191877](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d19187700231c27204e2b22af1716ea51be04556)) by @ -- update README.md ([f7218aa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f7218aaa9e276d9bab437ec43c20c2675618e696)) by @ -- update release link ([26d6bcb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/26d6bcb074ab2c6b173f717c98c89d9074d1064c)) by @ -- update resource ([019b2a1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/019b2a1681c7702689b896c8370ba7fb3a51d22f)) by @ -- update tauri ([91b8504](https://github.com/LibNyanpasu/clash-nyanpasu/commit/91b8504df55fe9c70bde77a453cd4731d3ac77ee)) by @ -- update tauri ([bd82308](https://github.com/LibNyanpasu/clash-nyanpasu/commit/bd82308024971bc8c91b6de3398a49e2f6e642e9)) by @ -- update tauri ([7e47f8f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/7e47f8f8939ae3f978295777de46bdb74cd4e481)) by @ -- update tauri action ([dbd09a8](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dbd09a87434b6ea8b7f9a1301ca44bb25accc1e1)) by @ -- update tauri version ([8a052bb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8a052bbed61d5cb346b5039100f65d0b07f7ab58)) by @ -- update toml file ([98bc9b0](https://github.com/LibNyanpasu/clash-nyanpasu/commit/98bc9b07b8d24195de9a7f37e7550c3b948a5828)) by @ -- update version ([55b7af2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/55b7af26236eeaed00993ddc462d063449ed2537)) by @ -- update version ([18750f2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/18750f275aee44c5136e0ca58fea460317f61d17)) by @ -- update version ([d686a85](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d686a853f4cad9b0bbfa2efd62fff971a4eda916)) by @ -- update version ([b286b8f](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b286b8f8c16de3486e0ff29d405607a07ec852bb)) by @ -- updater json supports arch field ([ab82db9](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ab82db9e22b704ffb536a00541cc6c004fb76ddd)) by @ -- updater proxy ([ab0d516](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ab0d516d911fa8308a22c7d6348800cd6581f7b1)) by @ -- updater script ([be4ad89](https://github.com/LibNyanpasu/clash-nyanpasu/commit/be4ad8947f6770c9c6f3d171b85e71734cda4807)) by @ -- Upgrade to React 18 ([#495](https://github.com/LibNyanpasu/clash-nyanpasu/issues/495)) ([30c2680](https://github.com/LibNyanpasu/clash-nyanpasu/commit/30c2680b6f9f7c6980c3ee40a1e3dcd04e89ddbb)) by @ -- use log crate ([df435fc](https://github.com/LibNyanpasu/clash-nyanpasu/commit/df435fc9dfe51a35cc3530721b4fe0a23317ebf7)) by @ -- use tauri cli ([7212797](https://github.com/LibNyanpasu/clash-nyanpasu/commit/72127979c360cdc303237b5880d4a53da9a04831)) by @ -- use ubuntu 18.04 ([05eca8e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/05eca8e4d8f282ff3c1e8860cc740459b9ef992f)) by @ -- use ubuntu latest ([c00ed8a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c00ed8aa5a9dbdc4dd025706090ff7095a5a7508)) by @ -- Use your own update endpoints and public keys ([ee2135b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ee2135bfb3f609ea80aea5a4bdf16d2fccdcfc7d)) by @ +- **style:** Reduce my by @zzzgydi + +- Rust lint by @keiko233 + +- Valid with unified-delay & tcp-concurrent by @keiko233 + +- Touchpad scrolling causes blank area to appear by @keiko233 + +- Typos by @keiko233 + +- Download clash core from backup repo by @keiko233 + +- Use meta Country.mmdb by @keiko233 + +- I18n by @zzzgydi + +- Fix page undefined exception, close #770 by @zzzgydi + +- Set min window size, close #734 by @zzzgydi + +- Rm debug code by @zzzgydi + +- Use sudo when pkexec not found by @zzzgydi + +- Remove div by @zzzgydi + +- List key by @zzzgydi + +- Websocket disconnect when window focus by @zzzgydi + +- Try fix undefined error by @zzzgydi + +- Blurry tray icon in Windows by @zzzgydi + +- Enable context menu in editable element by @zzzgydi + +- Save window size and pos in Windows by @zzzgydi + +- Optimize traffic graph high CPU usage when hidden by @zzzgydi + +- Remove fallback group select status, close #659 by @zzzgydi + +- Error boundary with key by @zzzgydi + +- Connections is null by @zzzgydi + +- Font family not works in some interfaces, close #639 by @zzzgydi + +- EncodeURIComponent secret by @zzzgydi + +- Encode controller secret, close #601 by @zzzgydi + +- Linux not change icon by @zzzgydi + +- Try fix blank error by @zzzgydi + +- Close all connections when change mode by @zzzgydi + +- Macos not change icon by @zzzgydi + +- Error message null by @zzzgydi + +- Profile data undefined error, close #566 by @zzzgydi + +- Import url error (#543) by @yettera765 + +- Linux DEFAULT_BYPASS (#503) by @Mr-Spade + +- Open file with vscode by @zzzgydi + +- Do not render div as a descendant of p (#494) by @tatiustaitus + +- Use replace instead by @zzzgydi + +- Escape path space by @zzzgydi + +- Escape the space in path (#451) by @dyxushuai + +- Add target os linux by @zzzgydi + +- Appimage path unwrap panic by @zzzgydi + +- Remove esc key listener in macOS by @zzzgydi + +- Adjust style by @zzzgydi + +- Adjust swr option by @zzzgydi + +- Infinite retry when websocket error by @zzzgydi + +- Type error by @zzzgydi + +- Do not parse log except the clash core by @zzzgydi + +- Field sort for filter by @zzzgydi + +- Add meta fields by @zzzgydi + +- Runtime config user select by @zzzgydi + +- App_handle as_ref by @zzzgydi + +- Use crate by @zzzgydi + +- Appimage auto launch, close #403 by @zzzgydi + +- Compatible with UTF8 BOM, close #283 by @zzzgydi + +- Use selected proxy after profile changed by @zzzgydi + +- Error log by @zzzgydi + +- Adjust fields order by @zzzgydi + +- Add meta fields by @zzzgydi + +- Add os platform value by @zzzgydi + +- Reconnect traffic websocket by @zzzgydi + +- Parse bytes precision, close #334 by @zzzgydi + +- Trigger new profile dialog, close #356 by @zzzgydi + +- Parse log cause panic by @zzzgydi + +- Avoid setting login item repeatedly, close #326 by @zzzgydi + +- Adjust code by @zzzgydi + +- Adjust delay check concurrency by @zzzgydi + +- Change default column to auto by @zzzgydi + +- Change default app version by @zzzgydi + +- Adjust rule ui by @zzzgydi + +- Adjust log ui by @zzzgydi + +- Keep delay data by @zzzgydi + +- Use list item button by @zzzgydi + +- Proxy item style by @zzzgydi + +- Virtuoso no work in legacy browsers (#318) by @moeshin + +- Adjust ui by @zzzgydi + +- Refresh websocket by @zzzgydi + +- Adjust ui by @zzzgydi + +- Parse bytes base 1024 by @zzzgydi + +- Add clash fields by @zzzgydi + +- Direct mode hide proxies by @zzzgydi + +- Profile can not edit by @zzzgydi + +- Parse logger time by @zzzgydi + +- Adjust service mode ui by @zzzgydi + +- Adjust style by @zzzgydi + +- Check hotkey and optimize hotkey input, close #287 by @zzzgydi + +- Mutex dead lock by @zzzgydi + +- Adjust item ui by @zzzgydi + +- Regenerate config before change core by @zzzgydi + +- Close connections when profile change by @zzzgydi + +- Lint by @zzzgydi + +- Windows service mode by @zzzgydi + +- Init config file by @zzzgydi + +- Service mode error and fallback to sidecar by @zzzgydi + +- Service mode viewer ui by @zzzgydi + +- Create theme error, close #294 by @zzzgydi + +- MatchMedia().addEventListener #258 (#296) by @moeshin + +- Check config by @zzzgydi + +- Show global when no rule groups by @zzzgydi + +- Service viewer ref by @zzzgydi + +- Service ref error by @zzzgydi + +- Group proxies render list is null by @zzzgydi + +- Pretty bytes by @zzzgydi + +- Use verge hook by @zzzgydi + +- Adjust notice by @zzzgydi + +- Windows issue by @zzzgydi + +- Change dev log level by @zzzgydi + +- Patch clash config by @zzzgydi + +- Cmds params by @zzzgydi + +- Adjust singleton detect by @zzzgydi + +- Change template by @zzzgydi + +- Copy resource file by @zzzgydi + +- MediaQueryList addEventListener polyfill by @zzzgydi + +- Change default tun dns-hijack by @zzzgydi + +- Something by @zzzgydi + +- Provider proxy sort by delay by @zzzgydi + +- Profile item menu ui dense by @zzzgydi + +- Disable auto scroll to proxy by @zzzgydi + +- Check remote profile by @zzzgydi + +- Remove smoother by @zzzgydi + +- Icon button color by @zzzgydi + +- Init system proxy correctly by @zzzgydi + +- Open file by @zzzgydi + +- Reset proxy by @zzzgydi + +- Init config error by @zzzgydi + +- Adjust reset proxy by @zzzgydi + +- Adjust code by @zzzgydi + +- Add https proxy by @zzzgydi + +- Auto scroll into view when sorted proxies changed by @zzzgydi + +- Refresh proxies interval, close #235 by @zzzgydi + +- Style by @zzzgydi + +- Fetch profile with system proxy, close #249 by @zzzgydi + +- The profile is replaced when the request fails. (#246) by @loosheng + +- Default dns config by @zzzgydi + +- Kill clash when exit in service mode, close #241 by @zzzgydi + +- Icon button color inherit by @zzzgydi + +- App version to string by @zzzgydi + +- Break loop when core terminated by @zzzgydi + +- Api error handle by @zzzgydi + +- Clash meta not load geoip, close #212 by @zzzgydi + +- Sort proxy during loading, close #221 by @zzzgydi + +- Not create windows when enable slient start by @zzzgydi + +- Root background color by @zzzgydi + +- Create window correctly by @zzzgydi + +- Set_activation_policy by @zzzgydi + +- Disable spell check by @zzzgydi + +- Adjust init launch on dev by @zzzgydi + +- Ignore disable auto launch error by @zzzgydi + +- I18n by @zzzgydi + +- Style by @zzzgydi + +- Save enable log on localstorage by @zzzgydi + +- Typo in api.ts (#207) by @Priestch + +- Refresh clash ui await patch by @zzzgydi + +- Remove dead code by @zzzgydi + +- Style by @zzzgydi + +- Handle is none by @zzzgydi + +- Unused by @zzzgydi + +- Style by @zzzgydi + +- Windows logo size by @zzzgydi + +- Do not kill sidecar during updating by @zzzgydi + +- Delay update config by @zzzgydi + +- Reduce logo size by @zzzgydi + +- Window center by @zzzgydi + +- Log level warn value by @zzzgydi + +- Increase delay checker concurrency by @zzzgydi + +- External controller allow lan by @zzzgydi + +- Remove useless optimizations by @zzzgydi + +- Reduce unsafe unwrap by @zzzgydi + +- Timer restore at app launch by @FoundTheWOUT + +- Adjust log text by @zzzgydi + +- Only script profile can display console by @zzzgydi + +- Fill button title attr by @zzzgydi + +- Do not reset system proxy when consistent by @zzzgydi + +- Adjust web ui item style by @zzzgydi + +- Clash field state error by @zzzgydi + +- Badge color error by @zzzgydi + +- Web ui port value error by @zzzgydi + +- Delay show window by @zzzgydi + +- Adjust dialog action button variant by @zzzgydi + +- Script code error by @zzzgydi + +- Script exception handle by @zzzgydi + +- Change fields by @zzzgydi + +- Silent start (#150) by @FoundTheWOUT + +- Save profile when update by @zzzgydi + +- List compare wrong by @zzzgydi + +- Button color by @zzzgydi + +- Limit theme mode value by @zzzgydi + +- Add valid clash field by @zzzgydi + +- Icon style by @zzzgydi + +- Reduce unwrap by @zzzgydi + +- Import mod by @zzzgydi + +- Add tray separator by @zzzgydi + +- Instantiate core after init app, close #122 by @zzzgydi + +- Rm macOS transition props by @zzzgydi + +- Improve external-controller parse and log by @zzzgydi + +- Show windows on click by @zzzgydi + +- Adjust update profile notice error by @zzzgydi + +- Style issue on mac by @zzzgydi + +- Check script run on all OS by @FoundTheWOUT + +- MacOS disable transparent by @zzzgydi + +- Window transparent and can not get hwnd by @zzzgydi + +- Create main window by @zzzgydi + +- Adjust notice by @zzzgydi + +- Label text by @zzzgydi + +- Icon path by @zzzgydi + +- Icon issue by @zzzgydi + +- Notice ui blocking by @zzzgydi + +- Service mode error by @zzzgydi + +- Win11 drag lag by @zzzgydi + +- Rm unwrap by @zzzgydi + +- Edit profile info by @zzzgydi + +- Change window default size by @zzzgydi + +- Change service installer and uninstaller by @zzzgydi + +- Adjust connection scroll by @zzzgydi + +- Adjust something by @zzzgydi + +- Adjust debounce wait time by @zzzgydi + +- Adjust dns config by @zzzgydi + +- Traffic graph adapt to different fps by @zzzgydi + +- Optimize clash launch by @zzzgydi + +- Reset after exit by @zzzgydi + +- Adjust code by @zzzgydi + +- Adjust log by @zzzgydi + +- Check button hover style by @zzzgydi + +- Icon button color inherit by @zzzgydi + +- Remove the lonely zero by @zzzgydi + +- I18n add value by @zzzgydi + +- Proxy page first render by @zzzgydi + +- Console warning by @zzzgydi + +- Icon button title by @zzzgydi + +- MacOS transition flickers close #47 by @zzzgydi + +- Csp image data by @zzzgydi + +- Close dialog after save by @zzzgydi + +- Change to deep copy by @zzzgydi + +- Window style close #45 by @zzzgydi + +- Manage global proxy correctly by @zzzgydi + +- Tauri csp by @zzzgydi + +- Windows style by @zzzgydi + +- Update state by @zzzgydi + +- Profile item loading state by @zzzgydi + +- Adjust windows style by @zzzgydi + +- Change mixed port error by @zzzgydi + +- Auto launch path by @zzzgydi + +- Tun mode config by @zzzgydi + +- Adjsut open cmd error by @zzzgydi + +- Parse external-controller by @zzzgydi + +- Config file case close #18 by @zzzgydi + +- Patch item option by @zzzgydi + +- User agent not works by @zzzgydi + +- External-controller by @zzzgydi + +- Change proxy bypass on mac by @zzzgydi + +- Kill sidecars after install still in test by @zzzgydi + +- Log some error by @zzzgydi + +- Apply_blur parameter by @zzzgydi + +- Limit enhanced profile range by @zzzgydi + +- Profile updated field by @zzzgydi + +- Profile field check by @zzzgydi + +- Create dir panic by @zzzgydi + +- Only error when selected by @zzzgydi + +- Enhanced profile consistency by @zzzgydi + +- Simply compatible with proxy providers by @zzzgydi + +- Component warning by @zzzgydi + +- When updater failed by @zzzgydi + +- Log file by @zzzgydi + +- Result by @zzzgydi + +- Cover profile extra by @zzzgydi + +- Display menu only on macos by @zzzgydi + +- Proxy global showType by @zzzgydi + +- Use full clash config by @zzzgydi + +- Reconnect websocket when restart clash by @zzzgydi + +- Wrong exe path by @zzzgydi + +- Patch verge config by @zzzgydi + +- Fetch profile panic by @zzzgydi + +- Spawn command by @zzzgydi + +- Import error by @zzzgydi + +- Not open file when new profile by @zzzgydi + +- Reset value correctly by @zzzgydi + +- Something by @zzzgydi + +- Menu without fragment by @zzzgydi + +- Proxy list error by @zzzgydi + +- Something by @zzzgydi + +- Macos auto launch fail by @zzzgydi + +- Type error by @zzzgydi + +- Restart clash should update something by @zzzgydi + +- Script error... by @zzzgydi + +- Tag error by @zzzgydi + +- Script error by @zzzgydi + +- Remove cargo test by @zzzgydi + +- Reduce proxy item height by @zzzgydi + +- Put profile request with no proxy by @zzzgydi + +- Ci strategy by @zzzgydi + +- Version update error by @zzzgydi + +- Text by @zzzgydi + +- Update profile after restart clash by @zzzgydi + +- Get proxies multiple times by @zzzgydi + +- Delete profile item command by @zzzgydi + +- Initialize profiles state by @zzzgydi + +- Item header bgcolor by @zzzgydi + +- Null type error by @zzzgydi + +- Api loading delay by @zzzgydi + +- Mutate at the same time may be wrong by @zzzgydi + +- Port value not rerender by @zzzgydi + +- Change log file format by @zzzgydi + +- Proxy bypass add by @zzzgydi + +- Sidecar dir by @zzzgydi + +- Web resource outDir by @zzzgydi + +- Use io by @zzzgydi + +### 💅 Styling + +- Resolve formatting problem by @Limsanity ### 📚 Documentation -- fix img width ([c2673cd](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c2673cd396bf3228f2a87b476c11ebb9d1f1d088)) by @ -- update ([8eb1528](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8eb152816ab0e12e30027a029bf8590540571747)) by @ +- Fix img width by @zzzgydi -### 💅 Styles +- Update by @zzzgydi -- resolve formatting problem ([c278f1a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c278f1af00816e80bcc673871eaaa386d0787549)) by @ +### 🔨 Refactor -### 🔨 Refactoring +- **hotkey:** Use tauri global shortcut by @zzzgydi -- adjust all path methods and reduce unwrap ([34daffb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/34daffbc966755568153130052c7d3219847e770)) by @ -- adjust base components export ([8bb4803](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8bb4803ff96b9238257d0ba3a90decbf1c88c49d)) by @ -- adjust dirs structure ([4719649](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4719649bf4a880bd0eb6a7c2ced93a067b5eca55)) by @ -- adjust setting dialog component ([892b919](https://github.com/LibNyanpasu/clash-nyanpasu/commit/892b919cf3ce0dd3b376218acbfcfa2e201b296b)) by @ -- api and command ([e76855a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e76855ad0eafc29de95f2471dd59362ee5bdc7f9)) by @ -- copy_clash_env ([71a23a4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/71a23a4e0216e7b77d4e640fa0db25b9beeca5e4)) by @ -- done ([2667ed1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/2667ed13f15fc10f8a99473e54b7743027aeb9fe)) by @ -- enhanced mode ui component ([c927419](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c927419c9915bfb3e558ec6df0af30618b09dc19)) by @ -- fix ([5a35c5b](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5a35c5b92850db9fa632fac97e63360ac4fc6dbd)) by @ -- fix ([dc94157](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dc941575fee2cd0524e1e5e65c85eb079949afdd)) by @ -- fix ([d2852bb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/d2852bb34a79ea4742058ef457db9d10eb8c10c3)) by @ -- for windows ([df93cb1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/df93cb103c2f22090deb8e6db70c550a334d19e4)) by @ -- **hotkey:** use tauri global shortcut ([8bddf30](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8bddf30dcf1603ad7eb0959d912e497d2bbff8db)) by @ -- impl as struct methods ([03f9fa4](https://github.com/LibNyanpasu/clash-nyanpasu/commit/03f9fa4bc26241a361c99ae2598756c40b19ca4f)) by @ -- impl structs methods ([e369311](https://github.com/LibNyanpasu/clash-nyanpasu/commit/e369311fc261ce4ebbd7ddb7e17caa441e7f5b34)) by @ -- import profile ([eb3daf7](https://github.com/LibNyanpasu/clash-nyanpasu/commit/eb3daf7b3ed513b930de5e3fd703e3a4ffc718d3)) by @ -- mode manage on tray ([6a51e93](https://github.com/LibNyanpasu/clash-nyanpasu/commit/6a51e93ded3b5cb5cb0c5c0636fbba0b2ff87c8c)) by @ -- mutex ([3076fd1](https://github.com/LibNyanpasu/clash-nyanpasu/commit/3076fd19c175a2f07635f4ed70adb4ac7454acf0)) by @ -- notice caller ([4e2cb30](https://github.com/LibNyanpasu/clash-nyanpasu/commit/4e2cb30db74eeb2d90b403df24b49294943acb00)) by @ -- optimize ([47c8ccb](https://github.com/LibNyanpasu/clash-nyanpasu/commit/47c8ccb0e54fa0c792600389d5b2cea3d20e84ff)) by @ -- optimize enhance mode strategy ([5a38468](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5a38468144ff9d3b06776dc82b2b172a541d861f)) by @ -- profile config ([749df89](https://github.com/LibNyanpasu/clash-nyanpasu/commit/749df8922993364a5321d1e9fb8e22bee5c2aaa8)) by @ -- proxy head ([453d798](https://github.com/LibNyanpasu/clash-nyanpasu/commit/453d798fcfbee2d67db55023513126ad76787f07)) by @ -- rename ([9ad8f71](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9ad8f71d7c41188503e6aac458f5996c7d5b703d)) by @ -- rename profiles & command state ([8d7ab9d](https://github.com/LibNyanpasu/clash-nyanpasu/commit/8d7ab9d05e9b44384bf6fb976f118f45306d6c94)) by @ -- rm code ([f24cbb6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f24cbb6692b2576001ef204834dfc1bcdff4e46e)) by @ -- rm dead code ([1880da6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/1880da63516f9bba32cf4ca7a6934dbf23081e6c)) by @ -- rm update item block_on ([c8e6f3a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c8e6f3a627e8dcc421d8c586e143056f3816a417)) by @ -- setting page ([a3a3db6](https://github.com/LibNyanpasu/clash-nyanpasu/commit/a3a3db6abbea703c05aaae95cdc4a3325dac1b50)) by @ -- something ([9c43b31](https://github.com/LibNyanpasu/clash-nyanpasu/commit/9c43b31fc08022564f562e62854d0864a654f0c0)) by @ -- ts path alias ([f3341f2](https://github.com/LibNyanpasu/clash-nyanpasu/commit/f3341f201fdc5fa21cd0ed7df6deb8dde4b61f86)) by @ -- ui theme ([309c33e](https://github.com/LibNyanpasu/clash-nyanpasu/commit/309c33e190537ca921298211a19561cfe64cd13e)) by @ -- update profile menu ([cb8e162](https://github.com/LibNyanpasu/clash-nyanpasu/commit/cb8e162f4ea57af3b6ed25ee028d607e7142b8b5)) by @ -- use anyhow to handle error ([dbf380a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/dbf380a0d14ded0672378eb5f162b62556f62e46)) by @ -- verge ([5f7a1fa](https://github.com/LibNyanpasu/clash-nyanpasu/commit/5f7a1fa5cd22497d5c769c74bc6495f331394e08)) by @ -- wip ([63b474a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/63b474a32c7338d67eaf56223ac532b90ecc620b)) by @ -- wip ([abdbf15](https://github.com/LibNyanpasu/clash-nyanpasu/commit/abdbf158d1700a77dbc2ee1a0bb18dcc2b0edc75)) by @ -- wip ([ee68d80](https://github.com/LibNyanpasu/clash-nyanpasu/commit/ee68d80d0a876dd9216b8248d8668e2bdfe28a3b)) by @ -- wip ([b03c52a](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b03c52a501200a0049d3d4a64d2549b601e4930a)) by @ -- wip ([b8ad328](https://github.com/LibNyanpasu/clash-nyanpasu/commit/b8ad328cdea286013df532ac358a4034ea03f5aa)) by @ -- wip ([697c250](https://github.com/LibNyanpasu/clash-nyanpasu/commit/697c25015e08bb6e207e6733622fe018f923c558)) by @ +- Copy_clash_env by @keiko233 -### ✅ Tests +- Adjust base components export by @zzzgydi -- windows service ([c733bda](https://github.com/LibNyanpasu/clash-nyanpasu/commit/c733bda6c31619f67ae39fc9ed1c0254ede03d9d)) by @ +- Adjust setting dialog component by @zzzgydi + +- Done by @zzzgydi + +- Adjust all path methods and reduce unwrap by @zzzgydi + +- Rm code by @zzzgydi + +- Fix by @zzzgydi + +- Rm dead code by @zzzgydi + +- For windows by @zzzgydi + +- Wip by @zzzgydi + +- Wip by @zzzgydi + +- Wip by @zzzgydi + +- Rm update item block_on by @zzzgydi + +- Fix by @zzzgydi + +- Fix by @zzzgydi + +- Wip by @zzzgydi + +- Optimize by @zzzgydi + +- Ts path alias by @zzzgydi + +- Mode manage on tray by @zzzgydi + +- Verge by @zzzgydi + +- Wip by @zzzgydi + +- Mutex by @zzzgydi + +- Wip by @zzzgydi + +- Proxy head by @zzzgydi + +- Update profile menu by @zzzgydi + +- Enhanced mode ui component by @zzzgydi + +- Ui theme by @zzzgydi + +- Optimize enhance mode strategy by @zzzgydi + +- Profile config by @zzzgydi + +- Use anyhow to handle error by @zzzgydi + +- Rename profiles & command state by @zzzgydi + +- Something by @zzzgydi + +- Notice caller by @zzzgydi + +- Setting page by @zzzgydi + +- Rename by @zzzgydi + +- Impl structs methods by @zzzgydi + +- Impl as struct methods by @zzzgydi + +- Api and command by @zzzgydi + +- Import profile by @zzzgydi + +- Adjust dirs structure by @zzzgydi + +--- + +## New Contributors + +- @zzzgydi made their first contribution +- @whitemirror33 made their first contribution +- @shvchk made their first contribution +- @w568w made their first contribution +- @yettera765 made their first contribution +- @tatiustaitus made their first contribution +- @Mr-Spade made their first contribution +- @solancer made their first contribution +- @me1ting made their first contribution +- @boatrainlsz made their first contribution +- @inRm3D made their first contribution +- @moeshin made their first contribution +- @angryLid made their first contribution +- @loosheng made their first contribution +- @ParticleG made their first contribution +- @HougeLangley made their first contribution +- @Priestch made their first contribution +- @riverscn made their first contribution +- @FoundTheWOUT made their first contribution +- @Limsanity made their first contribution +- @ctaoist made their first contribution +- @ made their first contribution +- @ttys3 made their first contribution diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index 348b284c4a..2e04bf4f7c 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -17,6 +17,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "aes" version = "0.8.4" @@ -614,13 +620,11 @@ dependencies = [ [[package]] name = "backon" -version = "0.4.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d67782c3f868daa71d3533538e98a8e13713231969def7536e8039606fc46bf0" +checksum = "33e5b65cc81d81fbb8488f36458ab4771be35a722967bbc959df28b47397e3ff" dependencies = [ "fastrand 2.1.0", - "futures-core", - "pin-project", "tokio", ] @@ -634,7 +638,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.7.4", "object", "rustc-demangle", ] @@ -681,7 +685,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.12.1", + "itertools 0.11.0", "lazy_static 1.5.0", "lazycell", "log 0.4.22", @@ -921,9 +925,9 @@ dependencies = [ [[package]] name = "brotli" -version = "3.5.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -932,9 +936,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.5.1" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1304,7 +1308,7 @@ dependencies = [ "sha2 0.10.8", "simd-json", "single-instance", - "sysinfo 0.30.13", + "sysinfo", "sysproxy", "tauri", "tauri-build", @@ -1331,7 +1335,7 @@ dependencies = [ "windows-sys 0.59.0", "winreg 0.52.0", "wry", - "zip 2.1.6", + "zip 2.2.0", "zip-extensions", ] @@ -2312,7 +2316,7 @@ dependencies = [ "flume", "half", "lebe", - "miniz_oxide", + "miniz_oxide 0.7.4", "rayon-core", "smallvec", "zune-inflate", @@ -2401,12 +2405,12 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.31" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -2418,6 +2422,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "fluent-uri" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "flume" version = "0.11.0" @@ -3573,15 +3586,6 @@ version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" -[[package]] -name = "infer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f178e61cdbfe084aa75a2f4f7a25a5bb09701a47ae1753608f194b15783c937a" -dependencies = [ - "cfb", -] - [[package]] name = "infer" version = "0.13.0" @@ -3857,15 +3861,27 @@ dependencies = [ [[package]] name = "json-patch" -version = "1.4.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b" +checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc" dependencies = [ + "jsonptr", "serde", "serde_json", "thiserror", ] +[[package]] +name = "jsonptr" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c6e529149475ca0b2820835d3dce8fcc41c6b943ca608d32f35b449255e4627" +dependencies = [ + "fluent-uri", + "serde", + "serde_json", +] + [[package]] name = "kill_tree" version = "0.2.4" @@ -4386,6 +4402,15 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "mio" version = "1.0.2" @@ -4799,7 +4824,7 @@ dependencies = [ "parking_lot", "serde", "shared_child", - "sysinfo 0.31.2", + "sysinfo", "thiserror", "tokio", "tracing", @@ -5110,9 +5135,9 @@ checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f" [[package]] name = "oxc_allocator" -version = "0.24.3" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20afc1d4a7b0b878d28f7b7f9f1f7ab670a7c7e8feb29101fb49eac1faa483fa" +checksum = "466379b9ab2e05996bfedfae9c96753a633bb5a53aaf0898eb0e0ab09e169514" dependencies = [ "allocator-api2", "bumpalo", @@ -5120,9 +5145,9 @@ dependencies = [ [[package]] name = "oxc_ast" -version = "0.24.3" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1599f878d8ac6fcc229be06426f04134f7663dcd5c71046414d8ddd12a20ad3b" +checksum = "34bd4f56fe32adea489153f6d681d9ee01f0336b9b6a89f062611488d8f80797" dependencies = [ "bitflags 2.6.0", "num-bigint", @@ -5134,9 +5159,9 @@ dependencies = [ [[package]] name = "oxc_ast_macros" -version = "0.24.3" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a07c44bbe07756ba25605059fa4a94543f6a75730fd8bd1105795d0b3d668d" +checksum = "197b36739db0e80919e19a90785233eea5664697d4cd829bd49af34838ec43d2" dependencies = [ "proc-macro2", "quote", @@ -5145,9 +5170,9 @@ dependencies = [ [[package]] name = "oxc_diagnostics" -version = "0.24.3" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c53d201660e8accd6e53f1af7efda36967316aa4263d0a6847c631bdd8705e0f" +checksum = "2cd4bb48b9527f5825c84acb688ec1485df4a5edadc17b3582626bb49736752b" dependencies = [ "miette", "owo-colors", @@ -5157,15 +5182,15 @@ dependencies = [ [[package]] name = "oxc_index" -version = "0.24.3" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa1d58c483b1ec74c7219b1525648b4b6beea7ff4685b02ad74693190df43308" +checksum = "bc9aa9446f6d2a64d0baa02fe20dc3d64e3e112083854b84fdacb82261be2b84" [[package]] name = "oxc_parser" -version = "0.24.3" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce38833b8b0d1121779b2ceaa9aa07d4142105ccc6941f73112a8d836b87cd" +checksum = "8f3432e80a58cfb38f9a138203e64d0f9a621d4c4e9d18e3e3bd870b51ce1f0e" dependencies = [ "assert-unchecked", "bitflags 2.6.0", @@ -5175,6 +5200,7 @@ dependencies = [ "oxc_allocator", "oxc_ast", "oxc_diagnostics", + "oxc_regular_expression", "oxc_span", "oxc_syntax", "rustc-hash 2.0.0", @@ -5182,10 +5208,24 @@ dependencies = [ ] [[package]] -name = "oxc_span" -version = "0.24.3" +name = "oxc_regular_expression" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a4f6e525a64e61bcfa256e4707e46be54f3261e0b524670d0a1c6827c28931" +checksum = "8fc6d05fec98ad6cc864ba8cfe7ece2e258106059a9a57e35b02450650b06979" +dependencies = [ + "oxc_allocator", + "oxc_diagnostics", + "oxc_span", + "phf 0.11.2", + "rustc-hash 2.0.0", + "unicode-id-start", +] + +[[package]] +name = "oxc_span" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a862a896ac3abd269863a19d4f77302b019458d90513705c7a017b138c8449b" dependencies = [ "compact_str", "miette", @@ -5195,9 +5235,9 @@ dependencies = [ [[package]] name = "oxc_syntax" -version = "0.24.3" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcb27d1a7e00a63e5d490fa4ee9a008d45e45db3d505ca21f0e63de2097cf743" +checksum = "d50c7ea034fb12f65376cfffc8ae4bfde3cda0a1e14407f82ffba1d26431703d" dependencies = [ "bitflags 2.6.0", "dashmap 6.0.1", @@ -5549,7 +5589,7 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.7.4", ] [[package]] @@ -6291,9 +6331,9 @@ dependencies = [ [[package]] name = "rust-i18n" -version = "3.1.1" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86c962de4e085155073c9ea6b00d8a8049f7dadfb63c62677615a248dd7b0443" +checksum = "039f57d22229db401af3458ca939300178e99e88b938573cea12b7c2b0f09724" dependencies = [ "globwalk", "once_cell", @@ -6305,9 +6345,9 @@ dependencies = [ [[package]] name = "rust-i18n-macro" -version = "3.1.1" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b727e4fde7339b901ed0a0d494c6ea576b5273c9692ff18db716b147b08dc68" +checksum = "dde5c022360a2e54477882843d56b6f9bcb4bc62f504b651a2f497f0028d174f" dependencies = [ "glob", "once_cell", @@ -6322,9 +6362,9 @@ dependencies = [ [[package]] name = "rust-i18n-support" -version = "3.1.1" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33410d4f5d19e193c2f34c4210c6646dcbc68cd823f147a790556e53ad7d13b7" +checksum = "75d2844d36f62b5d6b66f9cf8f8cbdbbbdcdb5fd37a473a9cc2fb45fdcf485d2" dependencies = [ "arc-swap", "base62", @@ -6597,9 +6637,9 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.208" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] @@ -6616,9 +6656,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.208" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", @@ -6627,9 +6667,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.125" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" +checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" dependencies = [ "indexmap 2.4.0", "itoa 1.0.11", @@ -6742,9 +6782,9 @@ dependencies = [ [[package]] name = "serialize-to-javascript" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" dependencies = [ "serde", "serde_json", @@ -6753,13 +6793,13 @@ dependencies = [ [[package]] name = "serialize-to-javascript-impl" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.75", ] [[package]] @@ -7184,44 +7224,25 @@ dependencies = [ [[package]] name = "sys-locale" -version = "0.2.4" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a11bd9c338fdba09f7881ab41551932ad42e405f61d01e8406baea71c07aee" +checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0" dependencies = [ - "js-sys", "libc", - "wasm-bindgen", - "web-sys", - "windows-sys 0.45.0", ] [[package]] name = "sysinfo" -version = "0.30.13" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" -dependencies = [ - "cfg-if", - "core-foundation-sys", - "libc", - "ntapi", - "once_cell", - "rayon", - "windows 0.52.0", -] - -[[package]] -name = "sysinfo" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4115055da5f572fff541dd0c4e61b0262977f453cc9fe04be83aba25a89bdab" +checksum = "2b92e0bdf838cbc1c4c9ba14f9c97a7ec6cdcd1ae66b10e1e42775a25553f45d" dependencies = [ "core-foundation-sys", "libc", "memchr", "ntapi", "rayon", - "windows 0.57.0", + "windows 0.56.0", ] [[package]] @@ -7391,12 +7412,12 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "336bc661a3f3250853fa83c6e5245449ed1c26dce5dcb28bdee7efedf6278806" +checksum = "0e33e3ba00a3b05eb6c57ef135781717d33728b48acf914bb05629e74d897d29" dependencies = [ "anyhow", - "base64 0.21.7", + "base64 0.22.1", "bytes", "cocoa 0.24.1", "dirs-next", @@ -7413,7 +7434,7 @@ dependencies = [ "http 0.2.12", "ignore", "indexmap 1.9.3", - "infer 0.9.0", + "infer", "minisign-verify", "nix 0.26.4", "notify-rust", @@ -7456,9 +7477,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "1.5.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c6ec7a5c3296330c7818478948b422967ce4649094696c985f61d50076d29c" +checksum = "d5fb5a90a64241ddb7217d3210d844149070a911e87e8a107a707a1d4973f164" dependencies = [ "anyhow", "cargo_toml", @@ -7475,9 +7496,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "1.4.4" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1aed706708ff1200ec12de9cfbf2582b5d8ec05f6a7293911091effbd22036b" +checksum = "93a9e3f5cebf779a63bf24903e714ec91196c307d8249a0008b882424328bcda" dependencies = [ "base64 0.21.7", "brotli", @@ -7501,9 +7522,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88f831d2973ae4f81a706a0004e67dac87f2e4439973bbe98efbd73825d8ede" +checksum = "d1d0e989f54fe06c5ef0875c5e19cf96453d099a0a774d5192ab47e80471cdab" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -7530,9 +7551,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "0.14.4" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3068ed62b63dedc705558f4248c7ecbd5561f0f8050949859ea0db2326f26012" +checksum = "f33fda7d213e239077fad52e96c6b734cecedb30c2382118b64f94cb5103ff3a" dependencies = [ "gtk", "http 0.2.12", @@ -7551,9 +7572,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "0.14.9" +version = "0.14.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c3db170233096aa30330feadcd895bf9317be97e624458560a20e814db7955" +checksum = "18c447dcd9b0f09c7dc4b752cc33e72788805bfd761fbda5692d30c48289efec" dependencies = [ "arboard", "cocoa 0.24.1", @@ -7572,9 +7593,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2826db448309d382dac14d520f0c0a40839b87b57b977e59cf5f296b3ace6a93" +checksum = "83a0c939e88d82903a0a7dfb28388b12a3c03504d6bd6086550edaa3b6d8beaa" dependencies = [ "brotli", "ctor", @@ -7582,7 +7603,7 @@ dependencies = [ "glob", "heck 0.5.0", "html5ever", - "infer 0.13.0", + "infer", "json-patch", "kuchikiki", "log 0.4.22", @@ -8865,7 +8886,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -8955,16 +8976,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" -dependencies = [ - "windows-core 0.57.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows" version = "0.58.0" @@ -9006,18 +9017,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-core" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" -dependencies = [ - "windows-implement 0.57.0", - "windows-interface 0.57.0", - "windows-result 0.1.2", - "windows-targets 0.52.6", -] - [[package]] name = "windows-core" version = "0.58.0" @@ -9052,17 +9051,6 @@ dependencies = [ "syn 2.0.75", ] -[[package]] -name = "windows-implement" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.75", -] - [[package]] name = "windows-implement" version = "0.58.0" @@ -9085,17 +9073,6 @@ dependencies = [ "syn 2.0.75", ] -[[package]] -name = "windows-interface" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.75", -] - [[package]] name = "windows-interface" version = "0.58.0" @@ -9167,15 +9144,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -9203,21 +9171,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-targets" version = "0.48.5" @@ -9850,9 +9803,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.1.6" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40dd8c92efc296286ce1fbd16657c5dbefff44f1b4ca01cc5f517d8b7b3d3e2e" +checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" dependencies = [ "aes", "arbitrary", @@ -9883,7 +9836,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "386508a00aae1d8218b9252a41f59bba739ccee3f8e420bb90bcb1c30d960d4a" dependencies = [ - "zip 2.1.6", + "zip 2.2.0", ] [[package]] diff --git a/clash-nyanpasu/backend/tauri-plugin-deep-link/src/windows.rs b/clash-nyanpasu/backend/tauri-plugin-deep-link/src/windows.rs index 9ed6ea594a..27cf83c0db 100644 --- a/clash-nyanpasu/backend/tauri-plugin-deep-link/src/windows.rs +++ b/clash-nyanpasu/backend/tauri-plugin-deep-link/src/windows.rs @@ -1,4 +1,5 @@ use std::{ + os::windows::thread, path::Path, sync::atomic::{AtomicU16, Ordering}, }; @@ -10,6 +11,9 @@ use interprocess::{ traits::tokio::{Listener, Stream}, GenericNamespaced, ListenerNonblockingMode, ListenerOptions, Name, ToNsName, }, + os::windows::{ + local_socket::ListenerOptionsExt, security_descriptor::SecurityDescriptor, ToWtf16, + }, }; use std::io::Result; use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader}; @@ -85,9 +89,12 @@ pub fn listen(mut handler: F) -> Result<()> { .build() .expect("failed to create tokio runtime") .block_on(async move { + let sdsf = "D:(A;;GA;;;WD)".to_wtf_16().unwrap(); + let sd = SecurityDescriptor::deserialize(&sdsf).expect("Failed to deserialize SD"); let listener = ListenerOptions::new() .name(name) .nonblocking(ListenerNonblockingMode::Both) + .security_descriptor(sd) .create_tokio() .expect("Can't create listener"); @@ -127,6 +134,7 @@ pub fn listen(mut handler: F) -> Result<()> { Ok(()) } +#[inline(never)] pub fn prepare(identifier: &str) { let name: Name = identifier .to_ns_name::() @@ -137,50 +145,58 @@ pub fn prepare(identifier: &str) { .build() .expect("failed to create tokio runtime") .block_on(async move { - if let Ok(conn) = LocalSocketStream::connect(name).await { - // We are the secondary instance. - // Prep to activate primary instance by allowing another process to take focus. + for _ in 0..3 { + match LocalSocketStream::connect(name.clone()).await { + Ok(conn) => { + // We are the secondary instance. + // Prep to activate primary instance by allowing another process to take focus. - // A workaround to allow AllowSetForegroundWindow to succeed - press a key. - // This was originally used by Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=837796 - // dummy_keypress(); + // A workaround to allow AllowSetForegroundWindow to succeed - press a key. + // This was originally used by Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=837796 + // dummy_keypress(); - // let primary_instance_pid = conn.peer_pid().unwrap_or(ASFW_ANY); - // unsafe { - // let success = AllowSetForegroundWindow(primary_instance_pid) != 0; - // if !success { - // log::warn!("AllowSetForegroundWindow failed."); - // } - // } - let (socket_rx, mut socket_tx) = conn.split(); - let mut socket_rx = socket_rx.as_tokio_async_read(); - let url = std::env::args().nth(1).expect("URL not provided"); - socket_tx - .write_all(url.as_bytes()) - .await - .expect("Failed to write to socket"); - socket_tx - .write_all(b"\n") - .await - .expect("Failed to write to socket"); - socket_tx.flush().await.expect("Failed to flush socket"); + // let primary_instance_pid = conn.peer_pid().unwrap_or(ASFW_ANY); + // unsafe { + // let success = AllowSetForegroundWindow(primary_instance_pid) != 0; + // if !success { + // log::warn!("AllowSetForegroundWindow failed."); + // } + // } + let (socket_rx, mut socket_tx) = conn.split(); + let mut socket_rx = socket_rx.as_tokio_async_read(); + let url = std::env::args().nth(1).expect("URL not provided"); + socket_tx + .write_all(url.as_bytes()) + .await + .expect("Failed to write to socket"); + socket_tx + .write_all(b"\n") + .await + .expect("Failed to write to socket"); + socket_tx.flush().await.expect("Failed to flush socket"); - let mut reader = BufReader::new(&mut socket_rx); - let mut buf = String::new(); - if let Err(e) = reader.read_line(&mut buf).await { - eprintln!("Error reading from connection: {}", e); - } - buf.pop(); - dummy_keypress(); - let pid = buf.parse::().unwrap_or(ASFW_ANY); - unsafe { - let success = AllowSetForegroundWindow(pid) != 0; - if !success { - eprintln!("AllowSetForegroundWindow failed."); + let mut reader = BufReader::new(&mut socket_rx); + let mut buf = String::new(); + if let Err(e) = reader.read_line(&mut buf).await { + eprintln!("Error reading from connection: {}", e); + } + buf.pop(); + dummy_keypress(); + let pid = buf.parse::().unwrap_or(ASFW_ANY); + unsafe { + let success = AllowSetForegroundWindow(pid) != 0; + if !success { + eprintln!("AllowSetForegroundWindow failed."); + } + } + std::process::exit(0); } - } - std::process::exit(0); - }; + Err(e) => { + eprintln!("Failed to connect to local socket: {}", e); + std::thread::sleep(std::time::Duration::from_millis(1)); + } + }; + } }); ID.set(identifier.to_string()) diff --git a/clash-nyanpasu/backend/tauri/Cargo.toml b/clash-nyanpasu/backend/tauri/Cargo.toml index 278a59b8a1..d7f6cc785e 100644 --- a/clash-nyanpasu/backend/tauri/Cargo.toml +++ b/clash-nyanpasu/backend/tauri/Cargo.toml @@ -32,7 +32,7 @@ ctrlc = "3.4.2" dunce = "1.0.4" nanoid = "0.4.0" chrono = "0.4.31" -sysinfo = "0.30" +sysinfo = "0.31" sysproxy = { git = "https://github.com/zzzgydi/sysproxy-rs.git", version = "0.3" } serde_json = "1.0" serde_yaml = "0.9" @@ -46,6 +46,7 @@ serde = { version = "1.0", features = ["derive"] } reqwest = { version = "0.12", features = ["json", "rustls-tls", "stream"] } relative-path = "1.9" tauri = { version = "1.5.4", features = [ + "updater", "fs-all", "clipboard-all", "os-all", @@ -55,7 +56,6 @@ tauri = { version = "1.5.4", features = [ "shell-all", "system-tray", "window-all", - "updater", ] } window-vibrancy = { version = "0.5.0" } window-shadows = { version = "0.2.2" } @@ -76,7 +76,7 @@ rs-snowflake = "0.6" thiserror = { workspace = true } simd-json = "0.13.8" runas = "1.2.0" -backon = "0.4.1" +backon = { version = "0.5", features = ["tokio-sleep"] } rust-i18n = "3" adler = "1.0.2" rfd = "0.10" # should bump to v0.14 when clarify why the rfd v0.10 from tauri breaks build @@ -122,11 +122,11 @@ os_pipe = "1.2.0" whoami = "1.5.1" atomic_enum = "0.3.0" boa_engine.workspace = true -oxc_parser = "0.24" -oxc_allocator = "0.24" -oxc_span = "0.24" -oxc_ast = "0.24" -oxc_syntax = "0.24" +oxc_parser = "0.25" +oxc_allocator = "0.25" +oxc_span = "0.25" +oxc_ast = "0.25" +oxc_syntax = "0.25" mlua = { version = "0.9", features = [ "lua54", "async", diff --git a/clash-nyanpasu/backend/tauri/src/cmds/migrate.rs b/clash-nyanpasu/backend/tauri/src/cmds/migrate.rs index 065007732e..ad664c5efd 100644 --- a/clash-nyanpasu/backend/tauri/src/cmds/migrate.rs +++ b/clash-nyanpasu/backend/tauri/src/cmds/migrate.rs @@ -91,7 +91,7 @@ pub fn migrate_home_dir_handler(target_path: &str) -> anyhow::Result<()> { use crate::utils::{self, dirs}; use anyhow::Context; use deelevate::{PrivilegeLevel, Token}; - use std::{path::PathBuf, process::Command, str::FromStr, thread, time::Duration}; + use std::{borrow::Cow, path::PathBuf, process::Command, str::FromStr, thread, time::Duration}; use sysinfo::System; use tauri::utils::platform::current_exe; println!("target path {}", target_path); @@ -129,10 +129,12 @@ pub fn migrate_home_dir_handler(target_path: &str) -> anyhow::Result<()> { ]; let sys = System::new_all(); 'outer: for process in sys.processes().values() { - let mut process_name = process.name(); - if process_name.ends_with(".exe") { - process_name = &process_name[..process_name.len() - 4]; // remove .exe - } + let process_name = process.name().to_string_lossy(); // TODO: check if it's utf-8 + let process_name = if let Some(name) = process_name.strip_suffix(".exe") { + Cow::Borrowed(name) + } else { + process_name + }; for name in related_names.iter() { if process_name.ends_with(name) { println!( diff --git a/clash-nyanpasu/cliff.toml b/clash-nyanpasu/cliff.toml index 4597d3fee2..ad95e83e4f 100644 --- a/clash-nyanpasu/cliff.toml +++ b/clash-nyanpasu/cliff.toml @@ -10,19 +10,46 @@ All notable changes to this project will be documented in this file.\n # template for the changelog body # https://keats.github.io/tera/docs/#introduction body = """ +{% set whitespace = " " %} {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} {% else %}\ ## [unreleased] {% endif %}\ -{% for group, commits in commits | group_by(attribute="group") %} +{% for group, commits in commits | filter(attribute="breaking", value=true) | group_by(attribute="group") %} ### {{ group | upper_first }} - {% for commit in commits %} - - {{ commit.message | upper_first | trim_end }}\ + {% for commit in commits | filter(attribute="scope") | sort(attribute="scope") %} + - **{{ commit.scope | trim_end}}:**{{ whitespace }}{{ commit.message | upper_first | trim_end }}\ {% if commit.github.username %} by @{{ commit.github.username }} {% else %} by {{ commit.author.name }} {%- endif -%} {% if commit.github.pr_number %} in \ [#{{ commit.github.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.github.pr_number }}) \ {%- endif %} + {% endfor %}\ + {% for commit in commits %}{% if not commit.scope %} + - {{ commit.message | upper_first | trim_end }}\ + {% if commit.github.username %} by @{{ commit.github.username }} {% else %} by {{ commit.author.name }} {%- endif -%} + {% if commit.github.pr_number %} in \ + [#{{ commit.github.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.github.pr_number }}) \ + {%- endif %} + {% else %}{%- endif -%} + {% endfor %} +{% endfor %} +{% for group, commits in commits | filter(attribute="breaking", value=false) | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits | filter(attribute="scope") | sort(attribute="scope") %} + - **{{ commit.scope | trim_end}}:**{{ whitespace }}{{ commit.message | upper_first | trim_end }}\ + {% if commit.github.username %} by @{{ commit.github.username }} {% else %} by {{ commit.author.name }} {%- endif -%} + {% if commit.github.pr_number %} in \ + [#{{ commit.github.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.github.pr_number }}) \ + {%- endif %} + {% endfor %}\ + {% for commit in commits %}{% if not commit.scope %} + - {{ commit.message | upper_first | trim_end }}\ + {% if commit.github.username %} by @{{ commit.github.username }} {% else %} by {{ commit.author.name }} {%- endif -%} + {% if commit.github.pr_number %} in \ + [#{{ commit.github.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.github.pr_number }}) \ + {%- endif %} + {% else %}{%- endif -%} {% endfor %} {% endfor %}\n @@ -68,6 +95,9 @@ filter_unconventional = false split_commits = false # regex for parsing and grouping commits commit_parsers = [ + { field = "author.name", pattern = "renovate\\[bot\\]", group = "Renovate", skip = true }, + { field = "scope", pattern = "manifest", message = "^chore", skip = true }, + { field = "breaking", pattern = "true", group = "💥 Breaking Changes" }, { message = "^feat", group = "✨ Features" }, { message = "^fix", group = "🐛 Bug Fixes" }, { message = "^doc", group = "📚 Documentation" }, diff --git a/clash-nyanpasu/frontend/interface/package.json b/clash-nyanpasu/frontend/interface/package.json index 7ac5bb71e6..7395be43a9 100644 --- a/clash-nyanpasu/frontend/interface/package.json +++ b/clash-nyanpasu/frontend/interface/package.json @@ -18,6 +18,6 @@ "swr": "2.2.5" }, "devDependencies": { - "@types/react": "18.3.3" + "@types/react": "18.3.4" } } diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index cb83e13bae..dd187b7603 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -25,12 +25,12 @@ "ahooks": "3.8.1", "allotment": "1.20.2", "country-code-emoji": "2.3.0", - "dayjs": "1.11.12", + "dayjs": "1.11.13", "framer-motion": "12.0.0-alpha.0", "i18next": "23.14.0", "jotai": "2.9.3", "material-react-table": "2.13.1", - "monaco-editor": "0.50.0", + "monaco-editor": "0.51.0", "mui-color-input": "3.0.0", "react": "18.3.1", "react-dom": "18.3.1", @@ -47,9 +47,9 @@ }, "devDependencies": { "@emotion/babel-plugin": "11.12.0", - "@emotion/react": "11.13.0", - "@iconify/json": "2.2.238", - "@types/react": "18.3.3", + "@emotion/react": "11.13.3", + "@iconify/json": "2.2.241", + "@types/react": "18.3.4", "@types/react-dom": "18.3.0", "@vitejs/plugin-react": "4.3.1", "@vitejs/plugin-react-swc": "3.7.0", @@ -59,7 +59,7 @@ "tailwindcss-textshadow": "2.1.3", "unplugin-auto-import": "0.18.2", "unplugin-icons": "0.19.2", - "vite": "5.4.1", + "vite": "5.4.2", "vite-plugin-monaco-editor": "1.1.3", "vite-plugin-sass-dts": "1.3.25", "vite-plugin-svgr": "4.2.0", diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/setting/setting-nyanpasu-version.tsx b/clash-nyanpasu/frontend/nyanpasu/src/components/setting/setting-nyanpasu-version.tsx index 3b6168cc2f..a71480d445 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/components/setting/setting-nyanpasu-version.tsx +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/setting/setting-nyanpasu-version.tsx @@ -1,8 +1,11 @@ import { version } from "~/package.json"; import { useLockFn } from "ahooks"; +import { useSetAtom } from "jotai"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import LogoSvg from "@/assets/image/logo.svg?react"; +import { UpdaterManifestAtom } from "@/store/updater"; +import { formatError } from "@/utils"; import { message } from "@/utils/notification"; import LoadingButton from "@mui/lab/LoadingButton"; import { @@ -45,7 +48,7 @@ export const SettingNyanpasuVersion = () => { const [loading, setLoading] = useState(false); const { nyanpasuConfig, setNyanpasuConfig } = useNyanpasu(); - + const setUpdaterManifest = useSetAtom(UpdaterManifestAtom); const onCheckUpdate = useLockFn(async () => { try { setLoading(true); @@ -58,16 +61,16 @@ export const SettingNyanpasuVersion = () => { type: "info", }); } else { - message(`New Version: ${info.manifest?.version}`, { - title: t("New Version"), - type: "info", - }); + setUpdaterManifest(info.manifest || null); } } catch (e) { - message("Update check failed. Please verify your network connection.", { - title: t("Error"), - type: "error", - }); + message( + `Update check failed. Please verify your network connection.\n\n${formatError(e)}`, + { + title: t("Error"), + type: "error", + }, + ); } finally { setLoading(false); } diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog-wrapper.tsx b/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog-wrapper.tsx new file mode 100644 index 0000000000..136f87232c --- /dev/null +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog-wrapper.tsx @@ -0,0 +1,25 @@ +import { useAtom } from "jotai"; +import { lazy, Suspense, useState } from "react"; +import { UpdaterManifestAtom } from "@/store/updater"; + +const UpdaterDialog = lazy(() => import("./updater-dialog")); + +export const UpdaterDialogWrapper = () => { + const [open, setOpen] = useState(true); + const [manifest, setManifest] = useAtom(UpdaterManifestAtom); + if (!manifest) return null; + return ( + + { + setOpen(false); + setManifest(null); + }} + manifest={manifest} + /> + + ); +}; + +export default UpdaterDialogWrapper; diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog.module.scss b/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog.module.scss new file mode 100644 index 0000000000..c462d52e38 --- /dev/null +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog.module.scss @@ -0,0 +1,44 @@ +.UpdaterDialog { + .MarkdownContent { + h1 { + @apply pb-2 text-3xl font-bold; + } + + h2 { + @apply pb-2 text-2xl font-bold; + } + + h3 { + @apply pb-2 text-xl font-bold; + } + + h4 { + @apply text-lg font-bold; + } + + h5 { + @apply text-base font-bold; + } + + h6 { + @apply text-sm font-bold; + } + + p, + li { + @apply text-base; + } + + a { + @apply text-blue-500 underline underline-offset-2; + } + + ul { + @apply list-inside list-disc pb-4; + } + + ol { + @apply list-inside list-decimal; + } + } +} diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog.module.scss.d.ts b/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog.module.scss.d.ts new file mode 100644 index 0000000000..17eb5c902d --- /dev/null +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog.module.scss.d.ts @@ -0,0 +1,5 @@ +declare const classNames: { + readonly UpdaterDialog: "UpdaterDialog"; + readonly MarkdownContent: "MarkdownContent"; +}; +export default classNames; diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog.tsx b/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog.tsx new file mode 100644 index 0000000000..0870ca7f95 --- /dev/null +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/updater/updater-dialog.tsx @@ -0,0 +1,100 @@ +import { useLockFn } from "ahooks"; +import dayjs from "dayjs"; +import { useSetAtom } from "jotai"; +import { lazy, Suspense } from "react"; +import { useTranslation } from "react-i18next"; +import { UpdaterIgnoredAtom } from "@/store/updater"; +import { formatError } from "@/utils"; +import { message } from "@/utils/notification"; +import { BaseDialog, BaseDialogProps, cn } from "@nyanpasu/ui"; +import { relaunch } from "@tauri-apps/api/process"; +import { open as openThat } from "@tauri-apps/api/shell"; +import { installUpdate, type UpdateManifest } from "@tauri-apps/api/updater"; +import styles from "./updater-dialog.module.scss"; + +const Markdown = lazy(() => import("react-markdown")); + +export interface UpdaterDialogProps extends Omit { + manifest: UpdateManifest; +} + +export default function UpdaterDialog({ + open, + manifest, + onClose, + ...others +}: UpdaterDialogProps) { + const { t } = useTranslation(); + const setUpdaterIgnore = useSetAtom(UpdaterIgnoredAtom); + + const handleUpdate = useLockFn(async () => { + try { + // Install the update. This will also restart the app on Windows! + await installUpdate(); + + // On macOS and Linux you will need to restart the app manually. + // You could use this step to display another confirmation dialog. + await relaunch(); + } catch (e) { + console.error(e); + message(formatError(e), { type: "error", title: t("Error") }); + } + }); + + return ( + { + setUpdaterIgnore(manifest.version); // TODO: control this behavior + onClose?.(); + }} + onOk={handleUpdate} + close={t("updater.close")} + ok={t("updater.update")} + divider + > +
+
+ {manifest.version} + + {dayjs(manifest.date).format("YYYY-MM-DD HH:mm:ss")} + +
+
+ {t("loading")}
}> + { + e.preventDefault(); + e.stopPropagation(); + openThat(node.properties.href); + }} + > + {children} + + ); + }, + }} + > + {manifest.body} + + +
+ +
+ ); +} diff --git a/clash-nyanpasu/frontend/nyanpasu/src/hooks/use-updater.ts b/clash-nyanpasu/frontend/nyanpasu/src/hooks/use-updater.ts new file mode 100644 index 0000000000..e1ae71d879 --- /dev/null +++ b/clash-nyanpasu/frontend/nyanpasu/src/hooks/use-updater.ts @@ -0,0 +1,23 @@ +import { useAtomValue, useSetAtom } from "jotai"; +import { useMount } from "react-use"; +import { UpdaterIgnoredAtom, UpdaterManifestAtom } from "@/store/updater"; +import { useNyanpasu } from "@nyanpasu/interface"; +import { checkUpdate } from "@tauri-apps/api/updater"; + +export default function useUpdater() { + const { nyanpasuConfig } = useNyanpasu(); + const updaterIgnored = useAtomValue(UpdaterIgnoredAtom); + const setUpdaterManifest = useSetAtom(UpdaterManifestAtom); + + useMount(() => { + const run = async () => { + if (nyanpasuConfig?.enable_auto_check_update) { + const info = await checkUpdate(); + if (info?.shouldUpdate && updaterIgnored !== info.manifest?.version) { + setUpdaterManifest(info.manifest || null); + } + } + }; + run().catch(console.error); + }); +} diff --git a/clash-nyanpasu/frontend/nyanpasu/src/locales/en.json b/clash-nyanpasu/frontend/nyanpasu/src/locales/en.json index 06c145bf71..092601cc18 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/locales/en.json +++ b/clash-nyanpasu/frontend/nyanpasu/src/locales/en.json @@ -171,5 +171,10 @@ "Proxy takeover Status": "Proxy takeover Status", "Subscription Expires In": "Expires {{time}}", "Subscription Updated At": "Updated at {{time}}", - "Select file to import or leave blank to touch new one.": "Select file to import or leave blank to touch new one." + "Select file to import or leave blank to touch new one.": "Select file to import or leave blank to touch new one.", + "updater": { + "title": "New version available", + "close": "Ignore", + "update": "Update Now" + } } diff --git a/clash-nyanpasu/frontend/nyanpasu/src/locales/ru.json b/clash-nyanpasu/frontend/nyanpasu/src/locales/ru.json index 0bfd136a22..1c45b0190b 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/locales/ru.json +++ b/clash-nyanpasu/frontend/nyanpasu/src/locales/ru.json @@ -154,5 +154,10 @@ "system_proxy": "Системный прокси", "Subscription Expires In": "Подписка истекает через {{time}}", "Subscription Updated At": "Подписка обновлена {{time}}", - "Select file to import or leave blank to touch new one.": "Выберите файл для импорта или оставьте пустым, чтобы создать новый." + "Select file to import or leave blank to touch new one.": "Выберите файл для импорта или оставьте пустым, чтобы создать новый.", + "updater": { + "title": "Доступно обновление", + "close": "Закрыть", + "update": "Обновить" + } } diff --git a/clash-nyanpasu/frontend/nyanpasu/src/locales/zh.json b/clash-nyanpasu/frontend/nyanpasu/src/locales/zh.json index ececac7c26..b6730da503 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/locales/zh.json +++ b/clash-nyanpasu/frontend/nyanpasu/src/locales/zh.json @@ -173,5 +173,10 @@ "Proxy takeover Status": "代理接管状态", "Subscription Expires In": "{{time}}到期", "Subscription Updated At": "{{time}}更新", - "Select file to import or leave blank to touch new one.": "选择文件导入或留空新建。" + "Select file to import or leave blank to touch new one.": "选择文件导入或留空新建。", + "updater": { + "title": "发现新版本", + "close": "忽略", + "update": "立即更新" + } } diff --git a/clash-nyanpasu/frontend/nyanpasu/src/pages/_app.tsx b/clash-nyanpasu/frontend/nyanpasu/src/pages/_app.tsx index 99ab3b207e..1035ca0442 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/pages/_app.tsx +++ b/clash-nyanpasu/frontend/nyanpasu/src/pages/_app.tsx @@ -11,6 +11,8 @@ import { useCustomTheme, } from "@/components/layout/use-custom-theme"; import LogProvider from "@/components/logs/log-provider"; +import UpdaterDialog from "@/components/updater/updater-dialog-wrapper"; +import useUpdater from "@/hooks/use-updater"; import { atomIsDrawer } from "@/store"; import { classNames } from "@/utils"; import { useTheme } from "@mui/material"; @@ -35,6 +37,8 @@ export default function App() { const [isDrawer, setIsDrawer] = useAtom(atomIsDrawer); + useUpdater(); + useEffect(() => { setIsDrawer(breakpoint === "sm" || breakpoint === "xs"); }, [breakpoint, setIsDrawer]); @@ -65,6 +69,7 @@ export default function App() { + (null); diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index c6ecc31694..a95d26125a 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -22,7 +22,7 @@ "@radix-ui/react-scroll-area": "1.1.0", "@tauri-apps/api": "1.6.0", "@types/d3": "7.4.3", - "@types/react": "18.3.3", + "@types/react": "18.3.4", "@vitejs/plugin-react": "4.3.1", "ahooks": "3.8.1", "d3": "7.9.0", @@ -31,11 +31,11 @@ "react-error-boundary": "4.0.13", "react-i18next": "15.0.1", "react-use": "17.5.1", - "vite": "5.4.1", + "vite": "5.4.2", "vite-tsconfig-paths": "5.0.1" }, "devDependencies": { - "@emotion/react": "11.13.0", + "@emotion/react": "11.13.3", "@types/d3-interpolate-path": "2.0.3", "clsx": "2.1.1", "d3-interpolate-path": "2.3.0", diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index 379c675c31..6d6db41293 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -2,7 +2,7 @@ "manifest_version": 1, "latest": { "mihomo": "v1.18.7", - "mihomo_alpha": "alpha-16c95fc", + "mihomo_alpha": "alpha-27bcb26", "clash_rs": "v0.2.0", "clash_premium": "2023-09-05-gdcc8d87" }, @@ -36,5 +36,5 @@ "darwin-x64": "clash-darwin-amd64-n{}.gz" } }, - "updated_at": "2024-08-23T22:20:19.190Z" + "updated_at": "2024-08-24T22:19:55.791Z" } diff --git a/clash-nyanpasu/package.json b/clash-nyanpasu/package.json index e4ee1959ee..15bb84c8b3 100644 --- a/clash-nyanpasu/package.json +++ b/clash-nyanpasu/package.json @@ -97,14 +97,14 @@ "stylelint-config-standard": "36.0.1", "stylelint-declaration-block-no-ignored-properties": "2.8.0", "stylelint-order": "6.0.4", - "stylelint-scss": "6.5.0", + "stylelint-scss": "6.5.1", "tailwindcss": "3.4.10", - "tsx": "4.17.1", + "tsx": "4.18.0", "typescript": "5.5.4" }, "packageManager": "pnpm@9.8.0", "engines": { - "node": "22.6.0" + "node": "22.7.0" }, "pnpm": { "overrides": { diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 0b2d7bef39..94e2162fee 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -149,14 +149,14 @@ importers: specifier: 6.0.4 version: 6.0.4(stylelint@16.8.2(typescript@5.5.4)) stylelint-scss: - specifier: 6.5.0 - version: 6.5.0(stylelint@16.8.2(typescript@5.5.4)) + specifier: 6.5.1 + version: 6.5.1(stylelint@16.8.2(typescript@5.5.4)) tailwindcss: specifier: 3.4.10 version: 3.4.10 tsx: - specifier: 4.17.1 - version: 4.17.1 + specifier: 4.18.0 + version: 4.18.0 typescript: specifier: 5.5.4 version: 5.5.4 @@ -196,10 +196,10 @@ importers: version: 3.2.2(react@19.0.0-rc-e948a5ac-20240807) '@emotion/styled': specifier: 11.13.0 - version: 11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + version: 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@generouted/react-router': specifier: 1.19.6 - version: 1.19.6(react-router-dom@6.26.1(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) + version: 1.19.6(react-router-dom@6.26.1(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) '@juggle/resize-observer': specifier: 3.4.0 version: 3.4.0 @@ -208,13 +208,13 @@ importers: version: 0.3.0 '@mui/icons-material': specifier: 5.16.7 - version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@mui/lab': specifier: 5.0.0-alpha.173 - version: 5.0.0-alpha.173(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + version: 5.0.0-alpha.173(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@mui/material': specifier: 5.16.7 - version: 5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + version: 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@nyanpasu/interface': specifier: workspace:^ version: link:../interface @@ -234,8 +234,8 @@ importers: specifier: 2.3.0 version: 2.3.0 dayjs: - specifier: 1.11.12 - version: 1.11.12 + specifier: 1.11.13 + version: 1.11.13 framer-motion: specifier: 12.0.0-alpha.0 version: 12.0.0-alpha.0(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807) @@ -247,13 +247,13 @@ importers: version: 2.9.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) material-react-table: specifier: 2.13.1 - version: 2.13.1(zikvz2olh6trlppkve56bpaqvi) + version: 2.13.1(px6672jbssk23ndlae6ak2yfga) monaco-editor: - specifier: 0.50.0 - version: 0.50.0 + specifier: 0.51.0 + version: 0.51.0 mui-color-input: specifier: 3.0.0 - version: 3.0.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + version: 3.0.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) react: specifier: npm:react@rc version: 19.0.0-rc-e948a5ac-20240807 @@ -268,7 +268,7 @@ importers: version: 1.6.5(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807) react-hook-form-mui: specifier: 7.0.1 - version: 7.0.1(lz7u4tf6gn2dl5jquupqms4fd4) + version: 7.0.1(iu76xnqkigikcfzs5anmurkpse) react-i18next: specifier: 15.0.1 version: 15.0.1(i18next@23.14.0)(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807) @@ -295,11 +295,11 @@ importers: specifier: 11.12.0 version: 11.12.0 '@emotion/react': - specifier: 11.13.0 - version: 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + specifier: 11.13.3 + version: 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@iconify/json': - specifier: 2.2.238 - version: 2.2.238 + specifier: 2.2.241 + version: 2.2.241 '@types/react': specifier: npm:types-react@rc version: types-react@19.0.0-rc.1 @@ -308,10 +308,10 @@ importers: version: types-react-dom@19.0.0-rc.1 '@vitejs/plugin-react': specifier: 4.3.1 - version: 4.3.1(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) + version: 4.3.1(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) '@vitejs/plugin-react-swc': specifier: 3.7.0 - version: 3.7.0(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) + version: 3.7.0(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) clsx: specifier: 2.1.1 version: 2.1.1 @@ -326,25 +326,25 @@ importers: version: 2.1.3 unplugin-auto-import: specifier: 0.18.2 - version: 0.18.2(rollup@4.17.2) + version: 0.18.2(rollup@4.21.0) unplugin-icons: specifier: 0.19.2 version: 0.19.2(@svgr/core@8.1.0(typescript@5.5.4)) vite: - specifier: 5.4.1 - version: 5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) + specifier: 5.4.2 + version: 5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) vite-plugin-monaco-editor: specifier: npm:vite-plugin-monaco-editor-new@1.1.3 - version: vite-plugin-monaco-editor-new@1.1.3(monaco-editor@0.50.0) + version: vite-plugin-monaco-editor-new@1.1.3(monaco-editor@0.51.0) vite-plugin-sass-dts: specifier: 1.3.25 - version: 1.3.25(postcss@8.4.41)(prettier@3.3.3)(sass@1.77.8)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) + version: 1.3.25(postcss@8.4.41)(prettier@3.3.3)(sass@1.77.8)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) vite-plugin-svgr: specifier: 4.2.0 - version: 4.2.0(rollup@4.17.2)(typescript@5.5.4)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) + version: 4.2.0(rollup@4.21.0)(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) vite-tsconfig-paths: specifier: 5.0.1 - version: 5.0.1(typescript@5.5.4)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) + version: 5.0.1(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) frontend/ui: dependencies: @@ -353,13 +353,13 @@ importers: version: 0.3.0 '@mui/icons-material': specifier: 5.16.7 - version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@mui/lab': specifier: 5.0.0-alpha.173 - version: 5.0.0-alpha.173(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + version: 5.0.0-alpha.173(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@mui/material': specifier: 5.16.7 - version: 5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + version: 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@radix-ui/react-portal': specifier: 1.1.1 version: 1.1.1(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) @@ -377,7 +377,7 @@ importers: version: types-react@19.0.0-rc.1 '@vitejs/plugin-react': specifier: 4.3.1 - version: 4.3.1(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) + version: 4.3.1(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) ahooks: specifier: 3.8.1 version: 3.8.1(react@19.0.0-rc-e948a5ac-20240807) @@ -400,15 +400,15 @@ importers: specifier: 17.5.1 version: 17.5.1(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807) vite: - specifier: 5.4.1 - version: 5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) + specifier: 5.4.2 + version: 5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) vite-tsconfig-paths: specifier: 5.0.1 - version: 5.0.1(typescript@5.5.4)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) + version: 5.0.1(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) devDependencies: '@emotion/react': - specifier: 11.13.0 - version: 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + specifier: 11.13.3 + version: 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@types/d3-interpolate-path': specifier: 2.0.3 version: 2.0.3 @@ -429,7 +429,7 @@ importers: version: 5.1.0(typescript@5.5.4) vite-plugin-dts: specifier: 4.0.3 - version: 4.0.3(@types/node@22.5.0)(rollup@4.17.2)(typescript@5.5.4)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) + version: 4.0.3(@types/node@22.5.0)(rollup@4.21.0)(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) scripts: dependencies: @@ -477,8 +477,8 @@ importers: specifier: 7.4.3 version: 7.4.3 telegram: - specifier: 2.23.10 - version: 2.23.10 + specifier: 2.24.11 + version: 2.24.11 undici: specifier: 6.19.8 version: 6.19.8 @@ -849,8 +849,8 @@ packages: '@emotion/memoize@0.9.0': resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - '@emotion/react@11.13.0': - resolution: {integrity: sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==} + '@emotion/react@11.13.3': + resolution: {integrity: sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==} peerDependencies: '@types/react': '*' react: npm:react@rc @@ -861,6 +861,9 @@ packages: '@emotion/serialize@1.3.0': resolution: {integrity: sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==} + '@emotion/serialize@1.3.1': + resolution: {integrity: sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==} + '@emotion/sheet@1.4.0': resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} @@ -874,6 +877,9 @@ packages: '@types/react': optional: true + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + '@emotion/unitless@0.9.0': resolution: {integrity: sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==} @@ -1377,8 +1383,8 @@ packages: '@vue/compiler-sfc': optional: true - '@iconify/json@2.2.238': - resolution: {integrity: sha512-wtsUtPGeHH4Jy0Z+oIKyD9ldrFISAEzfGs1SM+PthhHRywDDiZsP2iVn6d2Vzn03wVTB7b8882zoztWWPl1ZmA==} + '@iconify/json@2.2.241': + resolution: {integrity: sha512-zpeIjmIrTjl0ra6BYTYDfoK/hXn++xT5Hllc87K5SQwnqKs9RJeToSBzjF1gAsrxia+ilkhtGCcqbFF0ppDXiw==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -1934,92 +1940,83 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.17.2': - resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} + '@rollup/rollup-android-arm-eabi@4.21.0': + resolution: {integrity: sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.17.2': - resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} + '@rollup/rollup-android-arm64@4.21.0': + resolution: {integrity: sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.17.2': - resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} + '@rollup/rollup-darwin-arm64@4.21.0': + resolution: {integrity: sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.17.2': - resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} + '@rollup/rollup-darwin-x64@4.21.0': + resolution: {integrity: sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': - resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} + '@rollup/rollup-linux-arm-gnueabihf@4.21.0': + resolution: {integrity: sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==} cpu: [arm] os: [linux] - libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.17.2': - resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} + '@rollup/rollup-linux-arm-musleabihf@4.21.0': + resolution: {integrity: sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==} cpu: [arm] os: [linux] - libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.17.2': - resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} + '@rollup/rollup-linux-arm64-gnu@4.21.0': + resolution: {integrity: sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==} cpu: [arm64] os: [linux] - libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.17.2': - resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} + '@rollup/rollup-linux-arm64-musl@4.21.0': + resolution: {integrity: sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==} cpu: [arm64] os: [linux] - libc: [musl] - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': - resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': + resolution: {integrity: sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==} cpu: [ppc64] os: [linux] - libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.17.2': - resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} + '@rollup/rollup-linux-riscv64-gnu@4.21.0': + resolution: {integrity: sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==} cpu: [riscv64] os: [linux] - libc: [glibc] - '@rollup/rollup-linux-s390x-gnu@4.17.2': - resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} + '@rollup/rollup-linux-s390x-gnu@4.21.0': + resolution: {integrity: sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==} cpu: [s390x] os: [linux] - libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.17.2': - resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} + '@rollup/rollup-linux-x64-gnu@4.21.0': + resolution: {integrity: sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==} cpu: [x64] os: [linux] - libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.17.2': - resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} + '@rollup/rollup-linux-x64-musl@4.21.0': + resolution: {integrity: sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==} cpu: [x64] os: [linux] - libc: [musl] - '@rollup/rollup-win32-arm64-msvc@4.17.2': - resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} + '@rollup/rollup-win32-arm64-msvc@4.21.0': + resolution: {integrity: sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.17.2': - resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} + '@rollup/rollup-win32-ia32-msvc@4.21.0': + resolution: {integrity: sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.17.2': - resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} + '@rollup/rollup-win32-x64-msvc@4.21.0': + resolution: {integrity: sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==} cpu: [x64] os: [win32] @@ -2148,28 +2145,24 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [glibc] '@swc/core-linux-arm64-musl@1.6.1': resolution: {integrity: sha512-dr6YbLBg/SsNxs1hDqJhxdcrS8dGMlOXJwXIrUvACiA8jAd6S5BxYCaqsCefLYXtaOmu0bbx1FB/evfodqB70Q==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [musl] '@swc/core-linux-x64-gnu@1.6.1': resolution: {integrity: sha512-A0b/3V+yFy4LXh3O9umIE7LXPC7NBWdjl6AQYqymSMcMu0EOb1/iygA6s6uWhz9y3e172Hpb9b/CGsuD8Px/bg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [glibc] '@swc/core-linux-x64-musl@1.6.1': resolution: {integrity: sha512-5dJjlzZXhC87nZZZWbpiDP8kBIO0ibis893F/rtPIQBI5poH+iJuA32EU3wN4/WFHeK4et8z6SGSVghPtWyk4g==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [musl] '@swc/core-win32-arm64-msvc@1.6.1': resolution: {integrity: sha512-HBi1ZlwvfcUibLtT3g/lP57FaDPC799AD6InolB2KSgkqyBbZJ9wAXM8/CcH67GLIP0tZ7FqblrJTzGXxetTJQ==} @@ -2265,28 +2258,24 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@tauri-apps/cli-linux-arm64-musl@1.6.1': resolution: {integrity: sha512-gyMgNZ8fwQFYzrIiHwhmKECkbuAZtzsRyl+bi1Ua11XVWYVUpY8+cNp7Y5ilMJ9AwNFI/HFKjzzua9r+e9FNzw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@tauri-apps/cli-linux-x64-gnu@1.6.1': resolution: {integrity: sha512-aYLjLXEBcOf4GUrLBZRQcoLSL3KgCKHwfAyGmTilH4juAw42ZaAYWIZwa59hp2kC4w1XrlmwAzGpi1RESBr5Mw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@tauri-apps/cli-linux-x64-musl@1.6.1': resolution: {integrity: sha512-j1M7ovICUrBDbrH8CNUwbMe0zk0/IAR7MXRv5PEanktAZ1w/LG3nlO/AhY5/Cbqqo3ziKTcMpe6x0j3aE8jYOA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@tauri-apps/cli-win32-arm64-msvc@1.6.1': resolution: {integrity: sha512-yCGT1jXHvZtu+yYPDmDOJDfgsj5EKdBPvya+kmN03BmLfOF+8EWHA9s6yXUdk9pSr6M9OQS0SXocbGDOu5AkMw==} @@ -3348,6 +3337,9 @@ packages: dayjs@1.11.12: resolution: {integrity: sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} @@ -4971,8 +4963,8 @@ packages: mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} - monaco-editor@0.50.0: - resolution: {integrity: sha512-8CclLCmrRRh+sul7C08BmPBP3P8wVWfBHomsTcndxg5NRCEPfu/mc2AGU8k37ajjDVXcXFc12ORAMUkmk+lkFA==} + monaco-editor@0.51.0: + resolution: {integrity: sha512-xaGwVV1fq343cM7aOYB6lVE4Ugf0UyimdD/x5PWcWBMKENwectaEu77FAN7c5sFiyumqeJdX1RPTh1ocioyDjw==} ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -5392,9 +5384,6 @@ packages: peerDependencies: postcss: ^8.2.14 - postcss-resolve-nested-selector@0.1.4: - resolution: {integrity: sha512-R6vHqZWgVnTAPq0C+xjyHfEZqfIYboCBVSy24MjxEDm+tIh1BU4O6o7DP7AA7kHzf136d+Qc5duI4tlpHjixDw==} - postcss-resolve-nested-selector@0.1.6: resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} @@ -5814,8 +5803,8 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup@4.17.2: - resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} + rollup@4.21.0: + resolution: {integrity: sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -6149,8 +6138,8 @@ packages: peerDependencies: stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 - stylelint-scss@6.5.0: - resolution: {integrity: sha512-yOnYlr71wrTPT3rYyUurgTj6Rw7JUtzsZQsiPEjvs+k/yqoYHdweqpw6XN/ARpxjAuvJpddoMUvV8aAIpvUwTg==} + stylelint-scss@6.5.1: + resolution: {integrity: sha512-ZLqdqihm6uDYkrsOeD6YWb+stZI8Wn92kUNDhE4M+g9g1aCnRv0JlOrttFiAJJwaNzpdQgX3YJb5vDQXVuO9Ww==} engines: {node: '>=18.12.0'} peerDependencies: stylelint: ^16.0.2 @@ -6249,8 +6238,8 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} - telegram@2.23.10: - resolution: {integrity: sha512-ofn6Jhig83GW0wHxpDPoP4EffNKMloZMOhSdN6ltgWUSi3rE6+KWQDi2Gcvem2Xp+sodUw9uBDyq71aLcE3iKA==} + telegram@2.24.11: + resolution: {integrity: sha512-d4rqMeOI7itNzLXRIcRHdZrCXXV8K6h/aFiJXdMVNWhl0PsCePytsdtjpgmgAuO1tQ8k6jW+aR/DoZk5nE0x9g==} term-size@1.2.0: resolution: {integrity: sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==} @@ -6334,8 +6323,8 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsx@4.17.1: - resolution: {integrity: sha512-s+poJ84lg23SPBvxQbPmyJd/tlpeBKbOnOYmhKO54L6CR/NyCF8Sw7dqLUWLuscDnKkD31h1qqX0A4FIa9ysaA==} + tsx@4.18.0: + resolution: {integrity: sha512-a1jaKBSVQkd6yEc1/NI7G6yHFfefIcuf3QJST7ZEyn4oQnxLYrZR5uZAM8UrwUa3Ge8suiZHcNS1gNrEvmobqg==} engines: {node: '>=18.0.0'} hasBin: true @@ -6612,8 +6601,8 @@ packages: vite: optional: true - vite@5.4.1: - resolution: {integrity: sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==} + vite@5.4.2: + resolution: {integrity: sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -7325,12 +7314,12 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': + '@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.24.8 '@emotion/babel-plugin': 11.12.0 '@emotion/cache': 11.13.0 - '@emotion/serialize': 1.3.0 + '@emotion/serialize': 1.3.1 '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-e948a5ac-20240807) '@emotion/utils': 1.4.0 '@emotion/weak-memoize': 0.4.0 @@ -7347,14 +7336,22 @@ snapshots: '@emotion/utils': 1.4.0 csstype: 3.1.3 + '@emotion/serialize@1.3.1': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.0 + csstype: 3.1.3 + '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': + '@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.24.8 '@emotion/babel-plugin': 11.12.0 '@emotion/is-prop-valid': 1.3.0 - '@emotion/react': 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@emotion/serialize': 1.3.0 '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-e948a5ac-20240807) '@emotion/utils': 1.4.0 @@ -7362,6 +7359,8 @@ snapshots: optionalDependencies: '@types/react': types-react@19.0.0-rc.1 + '@emotion/unitless@0.10.0': {} + '@emotion/unitless@0.9.0': {} '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@19.0.0-rc-e948a5ac-20240807)': @@ -7629,13 +7628,13 @@ snapshots: postcss: 7.0.32 purgecss: 2.3.0 - '@generouted/react-router@1.19.6(react-router-dom@6.26.1(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0))': + '@generouted/react-router@1.19.6(react-router-dom@6.26.1(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0))': dependencies: fast-glob: 3.3.2 - generouted: 1.19.6(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) + generouted: 1.19.6(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)) react: 19.0.0-rc-e948a5ac-20240807 react-router-dom: 6.26.1(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807) - vite: 5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) + vite: 5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) '@humanwhocodes/config-array@0.11.14': dependencies: @@ -7661,7 +7660,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@iconify/json@2.2.238': + '@iconify/json@2.2.241': dependencies: '@iconify/types': 2.0.0 pathe: 1.1.2 @@ -7772,20 +7771,20 @@ snapshots: '@mui/core-downloads-tracker@5.16.7': {} - '@mui/icons-material@5.16.7(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': + '@mui/icons-material@5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.24.8 - '@mui/material': 5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/material': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) react: 19.0.0-rc-e948a5ac-20240807 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/lab@5.0.0-alpha.173(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': + '@mui/lab@5.0.0-alpha.173(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.24.8 '@mui/base': 5.0.0-beta.40(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/material': 5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/system': 5.16.5(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/material': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/system': 5.16.5(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@mui/types': 7.2.15(types-react@19.0.0-rc.1) '@mui/utils': 5.16.5(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) clsx: 2.1.1 @@ -7793,15 +7792,15 @@ snapshots: react: 19.0.0-rc-e948a5ac-20240807 react-dom: 19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807) optionalDependencies: - '@emotion/react': 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 - '@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': + '@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.24.8 '@mui/core-downloads-tracker': 5.16.7 - '@mui/system': 5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@mui/types': 7.2.15(types-react@19.0.0-rc.1) '@mui/utils': 5.16.6(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@popperjs/core': 2.11.8 @@ -7814,8 +7813,8 @@ snapshots: react-is: 18.3.1 react-transition-group: 4.4.5(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807) optionalDependencies: - '@emotion/react': 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 '@mui/private-theming@5.16.5(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': @@ -7836,7 +7835,7 @@ snapshots: optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/styled-engine@5.16.4(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)': + '@mui/styled-engine@5.16.4(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)': dependencies: '@babel/runtime': 7.24.8 '@emotion/cache': 11.13.0 @@ -7844,10 +7843,10 @@ snapshots: prop-types: 15.8.1 react: 19.0.0-rc-e948a5ac-20240807 optionalDependencies: - '@emotion/react': 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/styled-engine@5.16.6(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)': + '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)': dependencies: '@babel/runtime': 7.24.8 '@emotion/cache': 11.13.0 @@ -7855,14 +7854,14 @@ snapshots: prop-types: 15.8.1 react: 19.0.0-rc-e948a5ac-20240807 optionalDependencies: - '@emotion/react': 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/system@5.16.5(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': + '@mui/system@5.16.5(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.24.8 '@mui/private-theming': 5.16.5(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/styled-engine': 5.16.4(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807) + '@mui/styled-engine': 5.16.4(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807) '@mui/types': 7.2.15(types-react@19.0.0-rc.1) '@mui/utils': 5.16.5(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) clsx: 2.1.1 @@ -7870,15 +7869,15 @@ snapshots: prop-types: 15.8.1 react: 19.0.0-rc-e948a5ac-20240807 optionalDependencies: - '@emotion/react': 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 - '@mui/system@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': + '@mui/system@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.24.8 '@mui/private-theming': 5.16.6(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/styled-engine': 5.16.6(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807) + '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807) '@mui/types': 7.2.15(types-react@19.0.0-rc.1) '@mui/utils': 5.16.6(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) clsx: 2.1.1 @@ -7886,8 +7885,8 @@ snapshots: prop-types: 15.8.1 react: 19.0.0-rc-e948a5ac-20240807 optionalDependencies: - '@emotion/react': 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 '@mui/types@7.2.15(types-react@19.0.0-rc.1)': @@ -7918,12 +7917,12 @@ snapshots: optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/x-date-pickers@7.9.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(dayjs@1.11.12)(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': + '@mui/x-date-pickers@7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.24.8 '@mui/base': 5.0.0-beta.40(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/material': 5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/system': 5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/material': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@mui/utils': 5.16.6(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@types/react-transition-group': 4.4.10 clsx: 2.1.1 @@ -7932,9 +7931,9 @@ snapshots: react-dom: 19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807) react-transition-group: 4.4.5(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807) optionalDependencies: - '@emotion/react': 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - dayjs: 1.11.12 + '@emotion/react': 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + dayjs: 1.11.13 transitivePeerDependencies: - '@types/react' @@ -8237,60 +8236,60 @@ snapshots: '@remix-run/router@1.19.1': {} - '@rollup/pluginutils@5.1.0(rollup@4.17.2)': + '@rollup/pluginutils@5.1.0(rollup@4.21.0)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.17.2 + rollup: 4.21.0 - '@rollup/rollup-android-arm-eabi@4.17.2': + '@rollup/rollup-android-arm-eabi@4.21.0': optional: true - '@rollup/rollup-android-arm64@4.17.2': + '@rollup/rollup-android-arm64@4.21.0': optional: true - '@rollup/rollup-darwin-arm64@4.17.2': + '@rollup/rollup-darwin-arm64@4.21.0': optional: true - '@rollup/rollup-darwin-x64@4.17.2': + '@rollup/rollup-darwin-x64@4.21.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': + '@rollup/rollup-linux-arm-gnueabihf@4.21.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.17.2': + '@rollup/rollup-linux-arm-musleabihf@4.21.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.17.2': + '@rollup/rollup-linux-arm64-gnu@4.21.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.17.2': + '@rollup/rollup-linux-arm64-musl@4.21.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': + '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.17.2': + '@rollup/rollup-linux-riscv64-gnu@4.21.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.17.2': + '@rollup/rollup-linux-s390x-gnu@4.21.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.17.2': + '@rollup/rollup-linux-x64-gnu@4.21.0': optional: true - '@rollup/rollup-linux-x64-musl@4.17.2': + '@rollup/rollup-linux-x64-musl@4.21.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.17.2': + '@rollup/rollup-win32-arm64-msvc@4.21.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.17.2': + '@rollup/rollup-win32-ia32-msvc@4.21.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.17.2': + '@rollup/rollup-win32-x64-msvc@4.21.0': optional: true '@rushstack/node-core-library@5.5.1(@types/node@22.5.0)': @@ -8875,21 +8874,21 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react-swc@3.7.0(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0))': + '@vitejs/plugin-react-swc@3.7.0(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0))': dependencies: '@swc/core': 1.6.1 - vite: 5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) + vite: 5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.3.1(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0))': + '@vitejs/plugin-react@4.3.1(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0))': dependencies: '@babel/core': 7.24.5 '@babel/plugin-transform-react-jsx-self': 7.24.5(@babel/core@7.24.5) '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.5) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) + vite: 5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) transitivePeerDependencies: - supports-color @@ -9715,6 +9714,8 @@ snapshots: dayjs@1.11.12: {} + dayjs@1.11.13: {} + de-indent@1.0.2: {} debug@2.6.9: @@ -10536,9 +10537,9 @@ snapshots: functions-have-names@1.2.3: {} - generouted@1.19.6(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)): + generouted@1.19.6(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)): dependencies: - vite: 5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) + vite: 5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) gensync@1.0.0-beta.2: {} @@ -11326,13 +11327,13 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - material-react-table@2.13.1(zikvz2olh6trlppkve56bpaqvi): + material-react-table@2.13.1(px6672jbssk23ndlae6ak2yfga): dependencies: - '@emotion/react': 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/icons-material': 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/material': 5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(dayjs@1.11.12)(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/icons-material': 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/material': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) '@tanstack/match-sorter-utils': 8.15.1 '@tanstack/react-table': 8.19.3(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807) '@tanstack/react-virtual': 3.8.3(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807) @@ -11632,7 +11633,7 @@ snapshots: pkg-types: 1.1.3 ufo: 1.5.3 - monaco-editor@0.50.0: {} + monaco-editor@0.51.0: {} ms@2.0.0: {} @@ -11642,12 +11643,12 @@ snapshots: muggle-string@0.4.1: {} - mui-color-input@3.0.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1): + mui-color-input@3.0.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1): dependencies: '@ctrl/tinycolor': 4.1.0 - '@emotion/react': 11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/material': 5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/material': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) react: 19.0.0-rc-e948a5ac-20240807 react-dom: 19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807) optionalDependencies: @@ -12029,14 +12030,12 @@ snapshots: postcss-nested@4.2.3: dependencies: postcss: 7.0.39 - postcss-selector-parser: 6.1.1 + postcss-selector-parser: 6.1.2 postcss-nested@6.0.1(postcss@8.4.41): dependencies: postcss: 8.4.41 - postcss-selector-parser: 6.1.1 - - postcss-resolve-nested-selector@0.1.4: {} + postcss-selector-parser: 6.1.2 postcss-resolve-nested-selector@0.1.6: {} @@ -12164,7 +12163,7 @@ snapshots: commander: 5.1.0 glob: 7.2.3 postcss: 7.0.32 - postcss-selector-parser: 6.1.1 + postcss-selector-parser: 6.1.2 queue-microtask@1.2.3: {} @@ -12215,14 +12214,14 @@ snapshots: react: 19.0.0-rc-e948a5ac-20240807 react-dom: 19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807) - react-hook-form-mui@7.0.1(lz7u4tf6gn2dl5jquupqms4fd4): + react-hook-form-mui@7.0.1(iu76xnqkigikcfzs5anmurkpse): dependencies: - '@mui/material': 5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/material': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) react: 19.0.0-rc-e948a5ac-20240807 react-hook-form: 7.52.1(react@19.0.0-rc-e948a5ac-20240807) optionalDependencies: - '@mui/icons-material': 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) - '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(dayjs@1.11.12)(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/icons-material': 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) + '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@mui/material@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807))(react@19.0.0-rc-e948a5ac-20240807)(types-react@19.0.0-rc.1) react-hook-form@7.52.1(react@19.0.0-rc-e948a5ac-20240807): dependencies: @@ -12441,26 +12440,26 @@ snapshots: robust-predicates@3.0.2: {} - rollup@4.17.2: + rollup@4.21.0: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.17.2 - '@rollup/rollup-android-arm64': 4.17.2 - '@rollup/rollup-darwin-arm64': 4.17.2 - '@rollup/rollup-darwin-x64': 4.17.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 - '@rollup/rollup-linux-arm-musleabihf': 4.17.2 - '@rollup/rollup-linux-arm64-gnu': 4.17.2 - '@rollup/rollup-linux-arm64-musl': 4.17.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 - '@rollup/rollup-linux-riscv64-gnu': 4.17.2 - '@rollup/rollup-linux-s390x-gnu': 4.17.2 - '@rollup/rollup-linux-x64-gnu': 4.17.2 - '@rollup/rollup-linux-x64-musl': 4.17.2 - '@rollup/rollup-win32-arm64-msvc': 4.17.2 - '@rollup/rollup-win32-ia32-msvc': 4.17.2 - '@rollup/rollup-win32-x64-msvc': 4.17.2 + '@rollup/rollup-android-arm-eabi': 4.21.0 + '@rollup/rollup-android-arm64': 4.21.0 + '@rollup/rollup-darwin-arm64': 4.21.0 + '@rollup/rollup-darwin-x64': 4.21.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.0 + '@rollup/rollup-linux-arm-musleabihf': 4.21.0 + '@rollup/rollup-linux-arm64-gnu': 4.21.0 + '@rollup/rollup-linux-arm64-musl': 4.21.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.0 + '@rollup/rollup-linux-riscv64-gnu': 4.21.0 + '@rollup/rollup-linux-s390x-gnu': 4.21.0 + '@rollup/rollup-linux-x64-gnu': 4.21.0 + '@rollup/rollup-linux-x64-musl': 4.21.0 + '@rollup/rollup-win32-arm64-msvc': 4.21.0 + '@rollup/rollup-win32-ia32-msvc': 4.21.0 + '@rollup/rollup-win32-x64-msvc': 4.21.0 fsevents: 2.3.3 rtl-css-js@1.16.1: @@ -12785,14 +12784,14 @@ snapshots: postcss-sorting: 8.0.2(postcss@8.4.41) stylelint: 16.8.2(typescript@5.5.4) - stylelint-scss@6.5.0(stylelint@16.8.2(typescript@5.5.4)): + stylelint-scss@6.5.1(stylelint@16.8.2(typescript@5.5.4)): dependencies: css-tree: 2.3.1 is-plain-object: 5.0.0 known-css-properties: 0.34.0 postcss-media-query-parser: 0.2.3 - postcss-resolve-nested-selector: 0.1.4 - postcss-selector-parser: 6.1.1 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 stylelint: 16.8.2(typescript@5.5.4) @@ -12988,7 +12987,7 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - telegram@2.23.10: + telegram@2.24.11: dependencies: '@cryptography/aes': 0.1.1 async-mutex: 0.3.2 @@ -13073,7 +13072,7 @@ snapshots: tslib@2.6.2: {} - tsx@4.17.1: + tsx@4.18.0: dependencies: esbuild: 0.23.0 get-tsconfig: 4.7.5 @@ -13195,9 +13194,9 @@ snapshots: trough: 2.2.0 vfile: 6.0.1 - unimport@3.9.1(rollup@4.17.2): + unimport@3.9.1(rollup@4.21.0): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + '@rollup/pluginutils': 5.1.0(rollup@4.21.0) acorn: 8.12.1 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 @@ -13255,15 +13254,15 @@ snapshots: universalify@2.0.1: {} - unplugin-auto-import@0.18.2(rollup@4.17.2): + unplugin-auto-import@0.18.2(rollup@4.21.0): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + '@rollup/pluginutils': 5.1.0(rollup@4.21.0) fast-glob: 3.3.2 local-pkg: 0.5.0 magic-string: 0.30.11 minimatch: 9.0.5 - unimport: 3.9.1(rollup@4.17.2) + unimport: 3.9.1(rollup@4.21.0) unplugin: 1.12.0 transitivePeerDependencies: - rollup @@ -13356,10 +13355,10 @@ snapshots: react: 19.0.0-rc-e948a5ac-20240807 react-dom: 19.0.0-rc-e948a5ac-20240807(react@19.0.0-rc-e948a5ac-20240807) - vite-plugin-dts@4.0.3(@types/node@22.5.0)(rollup@4.17.2)(typescript@5.5.4)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)): + vite-plugin-dts@4.0.3(@types/node@22.5.0)(rollup@4.21.0)(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)): dependencies: '@microsoft/api-extractor': 7.47.4(@types/node@22.5.0) - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + '@rollup/pluginutils': 5.1.0(rollup@4.21.0) '@volar/typescript': 2.4.0 '@vue/language-core': 2.0.29(typescript@5.5.4) compare-versions: 6.1.1 @@ -13370,52 +13369,52 @@ snapshots: typescript: 5.5.4 vue-tsc: 2.0.29(typescript@5.5.4) optionalDependencies: - vite: 5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) + vite: 5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-monaco-editor-new@1.1.3(monaco-editor@0.50.0): + vite-plugin-monaco-editor-new@1.1.3(monaco-editor@0.51.0): dependencies: esbuild: 0.19.12 - monaco-editor: 0.50.0 + monaco-editor: 0.51.0 - vite-plugin-sass-dts@1.3.25(postcss@8.4.41)(prettier@3.3.3)(sass@1.77.8)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)): + vite-plugin-sass-dts@1.3.25(postcss@8.4.41)(prettier@3.3.3)(sass@1.77.8)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)): dependencies: postcss: 8.4.41 postcss-js: 4.0.1(postcss@8.4.41) prettier: 3.3.3 sass: 1.77.8 - vite: 5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) + vite: 5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) - vite-plugin-svgr@4.2.0(rollup@4.17.2)(typescript@5.5.4)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)): + vite-plugin-svgr@4.2.0(rollup@4.21.0)(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + '@rollup/pluginutils': 5.1.0(rollup@4.21.0) '@svgr/core': 8.1.0(typescript@5.5.4) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.5.4)) - vite: 5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) + vite: 5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) transitivePeerDependencies: - rollup - supports-color - typescript - vite-tsconfig-paths@5.0.1(typescript@5.5.4)(vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)): + vite-tsconfig-paths@5.0.1(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0)): dependencies: debug: 4.3.6 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.5.4) optionalDependencies: - vite: 5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) + vite: 5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.1(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0): + vite@5.4.2(@types/node@22.5.0)(less@4.2.0)(sass@1.77.8)(stylus@0.62.0): dependencies: esbuild: 0.21.5 postcss: 8.4.41 - rollup: 4.17.2 + rollup: 4.21.0 optionalDependencies: '@types/node': 22.5.0 fsevents: 2.3.3 diff --git a/clash-nyanpasu/scripts/package.json b/clash-nyanpasu/scripts/package.json index 5b1bb9ea0a..36b471ead2 100644 --- a/clash-nyanpasu/scripts/package.json +++ b/clash-nyanpasu/scripts/package.json @@ -19,7 +19,7 @@ "octokit": "4.0.2", "picocolors": "1.0.1", "tar": "7.4.3", - "telegram": "2.23.10", + "telegram": "2.24.11", "undici": "6.19.8" } } diff --git a/hysteria/app/cmd/server.go b/hysteria/app/cmd/server.go index b45fb15135..3da748d7bd 100644 --- a/hysteria/app/cmd/server.go +++ b/hysteria/app/cmd/server.go @@ -83,8 +83,9 @@ type serverConfigObfs struct { } type serverConfigTLS struct { - Cert string `mapstructure:"cert"` - Key string `mapstructure:"key"` + Cert string `mapstructure:"cert"` + Key string `mapstructure:"key"` + SNIGuard string `mapstructure:"sniGuard"` // "disable", "dns-san", "strict" } type serverConfigACME struct { @@ -291,30 +292,45 @@ func (c *serverConfig) fillTLSConfig(hyConfig *server.Config) error { return configError{Field: "tls", Err: errors.New("cannot set both tls and acme")} } if c.TLS != nil { + // SNI guard + var sniGuard utils.SNIGuardFunc + switch strings.ToLower(c.TLS.SNIGuard) { + case "", "dns-san": + sniGuard = utils.SNIGuardDNSSAN + case "strict": + sniGuard = utils.SNIGuardStrict + case "disable": + sniGuard = nil + default: + return configError{Field: "tls.sniGuard", Err: errors.New("unsupported SNI guard")} + } // Local TLS cert if c.TLS.Cert == "" || c.TLS.Key == "" { return configError{Field: "tls", Err: errors.New("empty cert or key path")} } + certLoader := &utils.LocalCertificateLoader{ + CertFile: c.TLS.Cert, + KeyFile: c.TLS.Key, + SNIGuard: sniGuard, + } // Try loading the cert-key pair here to catch errors early // (e.g. invalid files or insufficient permissions) - certPEMBlock, err := os.ReadFile(c.TLS.Cert) + err := certLoader.InitializeCache() if err != nil { - return configError{Field: "tls.cert", Err: err} - } - keyPEMBlock, err := os.ReadFile(c.TLS.Key) - if err != nil { - return configError{Field: "tls.key", Err: err} - } - _, err = tls.X509KeyPair(certPEMBlock, keyPEMBlock) - if err != nil { - return configError{Field: "tls", Err: fmt.Errorf("invalid cert-key pair: %w", err)} + var pathErr *os.PathError + if errors.As(err, &pathErr) { + if pathErr.Path == c.TLS.Cert { + return configError{Field: "tls.cert", Err: pathErr} + } + if pathErr.Path == c.TLS.Key { + return configError{Field: "tls.key", Err: pathErr} + } + } + return configError{Field: "tls", Err: err} } // Use GetCertificate instead of Certificates so that // users can update the cert without restarting the server. - hyConfig.TLSConfig.GetCertificate = func(info *tls.ClientHelloInfo) (*tls.Certificate, error) { - cert, err := tls.LoadX509KeyPair(c.TLS.Cert, c.TLS.Key) - return &cert, err - } + hyConfig.TLSConfig.GetCertificate = certLoader.GetCertificate } else { // ACME dataDir := c.ACME.Dir diff --git a/hysteria/app/cmd/server_test.go b/hysteria/app/cmd/server_test.go index bb2d12a82c..f35edfbd81 100644 --- a/hysteria/app/cmd/server_test.go +++ b/hysteria/app/cmd/server_test.go @@ -26,8 +26,9 @@ func TestServerConfig(t *testing.T) { }, }, TLS: &serverConfigTLS{ - Cert: "some.crt", - Key: "some.key", + Cert: "some.crt", + Key: "some.key", + SNIGuard: "strict", }, ACME: &serverConfigACME{ Domains: []string{ diff --git a/hysteria/app/cmd/server_test.yaml b/hysteria/app/cmd/server_test.yaml index ff0bf52068..b7d1a3e7b9 100644 --- a/hysteria/app/cmd/server_test.yaml +++ b/hysteria/app/cmd/server_test.yaml @@ -8,6 +8,7 @@ obfs: tls: cert: some.crt key: some.key + sniGuard: strict acme: domains: diff --git a/hysteria/app/internal/utils/certloader.go b/hysteria/app/internal/utils/certloader.go new file mode 100644 index 0000000000..fb41a3c57e --- /dev/null +++ b/hysteria/app/internal/utils/certloader.go @@ -0,0 +1,198 @@ +package utils + +import ( + "crypto/tls" + "crypto/x509" + "fmt" + "net" + "os" + "strings" + "sync" + "sync/atomic" + "time" +) + +type LocalCertificateLoader struct { + CertFile string + KeyFile string + SNIGuard SNIGuardFunc + + lock sync.Mutex + cache atomic.Pointer[localCertificateCache] +} + +type SNIGuardFunc func(info *tls.ClientHelloInfo, cert *tls.Certificate) error + +// localCertificateCache holds the certificate and its mod times. +// this struct is designed to be read-only. +// +// to update the cache, use LocalCertificateLoader.makeCache and +// update the LocalCertificateLoader.cache field. +type localCertificateCache struct { + certificate *tls.Certificate + certModTime time.Time + keyModTime time.Time +} + +func (l *LocalCertificateLoader) InitializeCache() error { + l.lock.Lock() + defer l.lock.Unlock() + + cache, err := l.makeCache() + if err != nil { + return err + } + + l.cache.Store(cache) + return nil +} + +func (l *LocalCertificateLoader) GetCertificate(info *tls.ClientHelloInfo) (*tls.Certificate, error) { + cert, err := l.getCertificateWithCache() + if err != nil { + return nil, err + } + + if l.SNIGuard == nil { + return cert, nil + } + err = l.SNIGuard(info, cert) + if err != nil { + return nil, err + } + + return cert, nil +} + +func (l *LocalCertificateLoader) checkModTime() (certModTime, keyModTime time.Time, err error) { + fi, err := os.Stat(l.CertFile) + if err != nil { + err = fmt.Errorf("failed to stat certificate file: %w", err) + return + } + certModTime = fi.ModTime() + + fi, err = os.Stat(l.KeyFile) + if err != nil { + err = fmt.Errorf("failed to stat key file: %w", err) + return + } + keyModTime = fi.ModTime() + return +} + +func (l *LocalCertificateLoader) makeCache() (cache *localCertificateCache, err error) { + c := &localCertificateCache{} + + c.certModTime, c.keyModTime, err = l.checkModTime() + if err != nil { + return + } + + cert, err := tls.LoadX509KeyPair(l.CertFile, l.KeyFile) + if err != nil { + return + } + c.certificate = &cert + if c.certificate.Leaf == nil { + // certificate.Leaf was left nil by tls.LoadX509KeyPair before Go 1.23 + c.certificate.Leaf, err = x509.ParseCertificate(cert.Certificate[0]) + if err != nil { + return + } + } + + cache = c + return +} + +func (l *LocalCertificateLoader) getCertificateWithCache() (*tls.Certificate, error) { + cache := l.cache.Load() + + certModTime, keyModTime, terr := l.checkModTime() + if terr != nil { + if cache != nil { + // use cache when file is temporarily unavailable + return cache.certificate, nil + } + return nil, terr + } + + if cache != nil && cache.certModTime.Equal(certModTime) && cache.keyModTime.Equal(keyModTime) { + // cache is up-to-date + return cache.certificate, nil + } + + if cache != nil { + if !l.lock.TryLock() { + // another goroutine is updating the cache + return cache.certificate, nil + } + } else { + l.lock.Lock() + } + defer l.lock.Unlock() + + if l.cache.Load() != cache { + // another goroutine updated the cache + return l.cache.Load().certificate, nil + } + + newCache, err := l.makeCache() + if err != nil { + if cache != nil { + // use cache when loading failed + return cache.certificate, nil + } + return nil, err + } + + l.cache.Store(newCache) + return newCache.certificate, nil +} + +// getNameFromClientHello returns a normalized form of hello.ServerName. +// If hello.ServerName is empty (i.e. client did not use SNI), then the +// associated connection's local address is used to extract an IP address. +// +// ref: https://github.com/caddyserver/certmagic/blob/3bad5b6bb595b09c14bd86ff0b365d302faaf5e2/handshake.go#L838 +func getNameFromClientHello(hello *tls.ClientHelloInfo) string { + normalizedName := func(serverName string) string { + return strings.ToLower(strings.TrimSpace(serverName)) + } + localIPFromConn := func(c net.Conn) string { + if c == nil { + return "" + } + localAddr := c.LocalAddr().String() + ip, _, err := net.SplitHostPort(localAddr) + if err != nil { + ip = localAddr + } + if scopeIDStart := strings.Index(ip, "%"); scopeIDStart > -1 { + ip = ip[:scopeIDStart] + } + return ip + } + + if name := normalizedName(hello.ServerName); name != "" { + return name + } + return localIPFromConn(hello.Conn) +} + +func SNIGuardDNSSAN(info *tls.ClientHelloInfo, cert *tls.Certificate) error { + if len(cert.Leaf.DNSNames) == 0 { + return nil + } + return SNIGuardStrict(info, cert) +} + +func SNIGuardStrict(info *tls.ClientHelloInfo, cert *tls.Certificate) error { + hostname := getNameFromClientHello(info) + err := cert.Leaf.VerifyHostname(hostname) + if err != nil { + return fmt.Errorf("sni guard: %w", err) + } + return nil +} diff --git a/hysteria/app/internal/utils/certloader_test.go b/hysteria/app/internal/utils/certloader_test.go new file mode 100644 index 0000000000..3a8e26bff8 --- /dev/null +++ b/hysteria/app/internal/utils/certloader_test.go @@ -0,0 +1,139 @@ +package utils + +import ( + "crypto/tls" + "log" + "net/http" + "os" + "os/exec" + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +const ( + testListen = "127.82.39.147:12947" + testCAFile = "./testcerts/ca" + testCertFile = "./testcerts/cert" + testKeyFile = "./testcerts/key" +) + +func TestCertificateLoaderPathError(t *testing.T) { + assert.NoError(t, os.RemoveAll(testCertFile)) + assert.NoError(t, os.RemoveAll(testKeyFile)) + loader := LocalCertificateLoader{ + CertFile: testCertFile, + KeyFile: testKeyFile, + SNIGuard: SNIGuardStrict, + } + err := loader.InitializeCache() + var pathErr *os.PathError + assert.ErrorAs(t, err, &pathErr) +} + +func TestCertificateLoaderFullChain(t *testing.T) { + assert.NoError(t, generateTestCertificate([]string{"example.com"}, "fullchain")) + + loader := LocalCertificateLoader{ + CertFile: testCertFile, + KeyFile: testKeyFile, + SNIGuard: SNIGuardStrict, + } + assert.NoError(t, loader.InitializeCache()) + + lis, err := tls.Listen("tcp", testListen, &tls.Config{ + GetCertificate: loader.GetCertificate, + }) + assert.NoError(t, err) + defer lis.Close() + go http.Serve(lis, nil) + + assert.Error(t, runTestTLSClient("unmatched-sni.example.com")) + assert.Error(t, runTestTLSClient("")) + assert.NoError(t, runTestTLSClient("example.com")) +} + +func TestCertificateLoaderNoSAN(t *testing.T) { + assert.NoError(t, generateTestCertificate(nil, "selfsign")) + + loader := LocalCertificateLoader{ + CertFile: testCertFile, + KeyFile: testKeyFile, + SNIGuard: SNIGuardDNSSAN, + } + assert.NoError(t, loader.InitializeCache()) + + lis, err := tls.Listen("tcp", testListen, &tls.Config{ + GetCertificate: loader.GetCertificate, + }) + assert.NoError(t, err) + defer lis.Close() + go http.Serve(lis, nil) + + assert.NoError(t, runTestTLSClient("")) +} + +func TestCertificateLoaderReplaceCertificate(t *testing.T) { + assert.NoError(t, generateTestCertificate([]string{"example.com"}, "fullchain")) + + loader := LocalCertificateLoader{ + CertFile: testCertFile, + KeyFile: testKeyFile, + SNIGuard: SNIGuardStrict, + } + assert.NoError(t, loader.InitializeCache()) + + lis, err := tls.Listen("tcp", testListen, &tls.Config{ + GetCertificate: loader.GetCertificate, + }) + assert.NoError(t, err) + defer lis.Close() + go http.Serve(lis, nil) + + assert.NoError(t, runTestTLSClient("example.com")) + assert.Error(t, runTestTLSClient("2.example.com")) + + assert.NoError(t, generateTestCertificate([]string{"2.example.com"}, "fullchain")) + + assert.Error(t, runTestTLSClient("example.com")) + assert.NoError(t, runTestTLSClient("2.example.com")) +} + +func generateTestCertificate(dnssan []string, certType string) error { + args := []string{ + "certloader_test_gencert.py", + "--ca", testCAFile, + "--cert", testCertFile, + "--key", testKeyFile, + "--type", certType, + } + if len(dnssan) > 0 { + args = append(args, "--dnssan", strings.Join(dnssan, ",")) + } + cmd := exec.Command("python", args...) + out, err := cmd.CombinedOutput() + if err != nil { + log.Printf("Failed to generate test certificate: %s", out) + return err + } + return nil +} + +func runTestTLSClient(sni string) error { + args := []string{ + "certloader_test_tlsclient.py", + "--server", testListen, + "--ca", testCAFile, + } + if sni != "" { + args = append(args, "--sni", sni) + } + cmd := exec.Command("python", args...) + out, err := cmd.CombinedOutput() + if err != nil { + log.Printf("Failed to run test TLS client: %s", out) + return err + } + return nil +} diff --git a/hysteria/app/internal/utils/certloader_test_gencert.py b/hysteria/app/internal/utils/certloader_test_gencert.py new file mode 100644 index 0000000000..d4d569598c --- /dev/null +++ b/hysteria/app/internal/utils/certloader_test_gencert.py @@ -0,0 +1,134 @@ +import argparse +import datetime +from cryptography import x509 +from cryptography.x509.oid import NameOID +from cryptography.hazmat.primitives import hashes +from cryptography.hazmat.primitives.asymmetric import ec +from cryptography.hazmat.primitives.serialization import Encoding, PrivateFormat, NoEncryption + + +def create_key(): + return ec.generate_private_key(ec.SECP256R1()) + + +def create_certificate(cert_type, subject, issuer, private_key, public_key, dns_san=None): + serial_number = x509.random_serial_number() + not_valid_before = datetime.datetime.now(datetime.UTC) + not_valid_after = not_valid_before + datetime.timedelta(days=365) + + subject_name = x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, subject.get('C', 'ZZ')), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, subject.get('O', 'No Organization')), + x509.NameAttribute(NameOID.COMMON_NAME, subject.get('CN', 'No CommonName')), + ]) + issuer_name = x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, issuer.get('C', 'ZZ')), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, issuer.get('O', 'No Organization')), + x509.NameAttribute(NameOID.COMMON_NAME, issuer.get('CN', 'No CommonName')), + ]) + builder = x509.CertificateBuilder() + builder = builder.subject_name(subject_name) + builder = builder.issuer_name(issuer_name) + builder = builder.public_key(public_key) + builder = builder.serial_number(serial_number) + builder = builder.not_valid_before(not_valid_before) + builder = builder.not_valid_after(not_valid_after) + if cert_type == 'root': + builder = builder.add_extension( + x509.BasicConstraints(ca=True, path_length=None), critical=True + ) + elif cert_type == 'intermediate': + builder = builder.add_extension( + x509.BasicConstraints(ca=True, path_length=0), critical=True + ) + elif cert_type == 'leaf': + builder = builder.add_extension( + x509.BasicConstraints(ca=False, path_length=None), critical=True + ) + else: + raise ValueError(f'Invalid cert_type: {cert_type}') + if dns_san: + builder = builder.add_extension( + x509.SubjectAlternativeName([x509.DNSName(d) for d in dns_san.split(',')]), + critical=False + ) + return builder.sign(private_key=private_key, algorithm=hashes.SHA256()) + + +def main(): + parser = argparse.ArgumentParser(description='Generate HTTPS server certificate.') + parser.add_argument('--ca', required=True, + help='Path to write the X509 CA certificate in PEM format') + parser.add_argument('--cert', required=True, + help='Path to write the X509 certificate in PEM format') + parser.add_argument('--key', required=True, + help='Path to write the private key in PEM format') + parser.add_argument('--dnssan', required=False, default=None, + help='Comma-separated list of DNS SANs') + parser.add_argument('--type', required=True, choices=['selfsign', 'fullchain'], + help='Type of certificate to generate') + + args = parser.parse_args() + + key = create_key() + public_key = key.public_key() + + if args.type == 'selfsign': + subject = {"C": "ZZ", "O": "Certificate", "CN": "Certificate"} + cert = create_certificate( + cert_type='root', + subject=subject, + issuer=subject, + private_key=key, + public_key=public_key, + dns_san=args.dnssan) + with open(args.ca, 'wb') as f: + f.write(cert.public_bytes(Encoding.PEM)) + with open(args.cert, 'wb') as f: + f.write(cert.public_bytes(Encoding.PEM)) + with open(args.key, 'wb') as f: + f.write( + key.private_bytes(Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption())) + + elif args.type == 'fullchain': + ca_key = create_key() + ca_public_key = ca_key.public_key() + ca_subject = {"C": "ZZ", "O": "Root CA", "CN": "Root CA"} + ca_cert = create_certificate( + cert_type='root', + subject=ca_subject, + issuer=ca_subject, + private_key=ca_key, + public_key=ca_public_key) + + intermediate_key = create_key() + intermediate_public_key = intermediate_key.public_key() + intermediate_subject = {"C": "ZZ", "O": "Intermediate CA", "CN": "Intermediate CA"} + intermediate_cert = create_certificate( + cert_type='intermediate', + subject=intermediate_subject, + issuer=ca_subject, + private_key=ca_key, + public_key=intermediate_public_key) + + leaf_subject = {"C": "ZZ", "O": "Leaf Certificate", "CN": "Leaf Certificate"} + cert = create_certificate( + cert_type='leaf', + subject=leaf_subject, + issuer=intermediate_subject, + private_key=intermediate_key, + public_key=public_key, + dns_san=args.dnssan) + + with open(args.ca, 'wb') as f: + f.write(ca_cert.public_bytes(Encoding.PEM)) + with open(args.cert, 'wb') as f: + f.write(cert.public_bytes(Encoding.PEM)) + f.write(intermediate_cert.public_bytes(Encoding.PEM)) + with open(args.key, 'wb') as f: + f.write( + key.private_bytes(Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption())) + + +if __name__ == "__main__": + main() diff --git a/hysteria/app/internal/utils/certloader_test_tlsclient.py b/hysteria/app/internal/utils/certloader_test_tlsclient.py new file mode 100644 index 0000000000..3b7efd63b5 --- /dev/null +++ b/hysteria/app/internal/utils/certloader_test_tlsclient.py @@ -0,0 +1,60 @@ +import argparse +import ssl +import socket +import sys + + +def check_tls(server, ca_cert, sni, alpn): + try: + host, port = server.split(":") + port = int(port) + + if ca_cert: + context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile=ca_cert) + context.check_hostname = sni is not None + context.verify_mode = ssl.CERT_REQUIRED + else: + context = ssl.create_default_context() + context.check_hostname = False + context.verify_mode = ssl.CERT_NONE + + if alpn: + context.set_alpn_protocols([p for p in alpn.split(",")]) + + with socket.create_connection((host, port)) as sock: + with context.wrap_socket(sock, server_hostname=sni) as ssock: + # Verify handshake and certificate + print(f'Connected to {ssock.version()} using {ssock.cipher()}') + print(f'Server certificate validated and details: {ssock.getpeercert()}') + print("OK") + return 0 + except Exception as e: + print(f"Error: {e}") + return 1 + + +def main(): + parser = argparse.ArgumentParser(description="Test TLS Server") + parser.add_argument("--server", required=True, + help="Server address to test (e.g., 127.1.2.3:8443)") + parser.add_argument("--ca", required=False, default=None, + help="CA certificate file used to validate the server certificate" + "Omit to use insecure connection") + parser.add_argument("--sni", required=False, default=None, + help="SNI to send in ClientHello") + parser.add_argument("--alpn", required=False, default='h2', + help="ALPN to send in ClientHello") + + args = parser.parse_args() + + exit_status = check_tls( + server=args.server, + ca_cert=args.ca, + sni=args.sni, + alpn=args.alpn) + + sys.exit(exit_status) + + +if __name__ == "__main__": + main() diff --git a/hysteria/app/internal/utils/testcerts/.gitignore b/hysteria/app/internal/utils/testcerts/.gitignore new file mode 100644 index 0000000000..082821a007 --- /dev/null +++ b/hysteria/app/internal/utils/testcerts/.gitignore @@ -0,0 +1,3 @@ +# This directory is used for certificate generation in certloader_test.go +/* +!/.gitignore diff --git a/hysteria/requirements.txt b/hysteria/requirements.txt new file mode 100644 index 0000000000..44ee651ae0 --- /dev/null +++ b/hysteria/requirements.txt @@ -0,0 +1,11 @@ +blinker==1.8.2 +cffi==1.17.0 +click==8.1.7 +cryptography==43.0.0 +Flask==3.0.3 +itsdangerous==2.2.0 +Jinja2==3.1.4 +MarkupSafe==2.1.5 +pycparser==2.22 +PySocks==1.7.1 +Werkzeug==3.0.4 diff --git a/mihomo/docs/config.yaml b/mihomo/docs/config.yaml index 647cf14c61..b67880f77b 100644 --- a/mihomo/docs/config.yaml +++ b/mihomo/docs/config.yaml @@ -1005,6 +1005,9 @@ listeners: # rule: sub-rule-name1 # 默认使用 rules,如果未找到 sub-rule 则直接使用 rules # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 # udp: false # 默认 true + # users: # 如果不填写users项,则遵从全局authentication设置,如果填写会忽略全局设置, 如想跳过该入站的验证可填写 users: [] + # - username: aaa + # password: aaa - name: http-in-1 type: http @@ -1012,6 +1015,9 @@ listeners: listen: 0.0.0.0 # rule: sub-rule-name1 # 默认使用 rules,如果未找到 sub-rule 则直接使用 rules # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 (当 proxy 不为空时,这里的 proxy 名称必须合法,否则会出错) + # users: # 如果不填写users项,则遵从全局authentication设置,如果填写会忽略全局设置, 如想跳过该入站的验证可填写 users: [] + # - username: aaa + # password: aaa - name: mixed-in-1 type: mixed # HTTP(S) 和 SOCKS 代理混合 @@ -1020,6 +1026,9 @@ listeners: # rule: sub-rule-name1 # 默认使用 rules,如果未找到 sub-rule 则直接使用 rules # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 (当 proxy 不为空时,这里的 proxy 名称必须合法,否则会出错) # udp: false # 默认 true + # users: # 如果不填写users项,则遵从全局authentication设置,如果填写会忽略全局设置, 如想跳过该入站的验证可填写 users: [] + # - username: aaa + # password: aaa - name: reidr-in-1 type: redir diff --git a/mihomo/listener/auth/auth.go b/mihomo/listener/auth/auth.go index 46f552b80c..772be3bdd7 100644 --- a/mihomo/listener/auth/auth.go +++ b/mihomo/listener/auth/auth.go @@ -13,3 +13,5 @@ func Authenticator() auth.Authenticator { func SetAuthenticator(au auth.Authenticator) { authenticator = au } + +func Nil() auth.Authenticator { return nil } diff --git a/mihomo/listener/http/proxy.go b/mihomo/listener/http/proxy.go index b2f312a578..04ab98eb8c 100644 --- a/mihomo/listener/http/proxy.go +++ b/mihomo/listener/http/proxy.go @@ -30,7 +30,7 @@ func (b *bodyWrapper) Read(p []byte) (n int, err error) { return n, err } -func HandleConn(c net.Conn, tunnel C.Tunnel, authenticator auth.Authenticator, additions ...inbound.Addition) { +func HandleConn(c net.Conn, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) { additions = append(additions, inbound.Placeholder) // Add a placeholder for InUser inUserIdx := len(additions) - 1 client := newClient(c, tunnel, additions) @@ -41,6 +41,7 @@ func HandleConn(c net.Conn, tunnel C.Tunnel, authenticator auth.Authenticator, a conn := N.NewBufferedConn(c) + authenticator := getAuth() keepAlive := true trusted := authenticator == nil // disable authenticate if lru is nil lastUser := "" @@ -146,9 +147,6 @@ func HandleConn(c net.Conn, tunnel C.Tunnel, authenticator auth.Authenticator, a } func authenticate(request *http.Request, authenticator auth.Authenticator) (resp *http.Response, user string) { - if inbound.SkipAuthRemoteAddress(request.RemoteAddr) { - authenticator = nil - } credential := parseBasicProxyAuthorization(request) if credential == "" && authenticator != nil { resp = responseWith(request, http.StatusProxyAuthRequired) diff --git a/mihomo/listener/http/server.go b/mihomo/listener/http/server.go index f61dd03609..74e117f265 100644 --- a/mihomo/listener/http/server.go +++ b/mihomo/listener/http/server.go @@ -33,20 +33,20 @@ func (l *Listener) Close() error { } func New(addr string, tunnel C.Tunnel, additions ...inbound.Addition) (*Listener, error) { - return NewWithAuthenticator(addr, tunnel, authStore.Authenticator(), additions...) + return NewWithAuthenticator(addr, tunnel, authStore.Authenticator, additions...) } // NewWithAuthenticate // never change type traits because it's used in CFMA func NewWithAuthenticate(addr string, tunnel C.Tunnel, authenticate bool, additions ...inbound.Addition) (*Listener, error) { - authenticator := authStore.Authenticator() + getAuth := authStore.Authenticator if !authenticate { - authenticator = nil + getAuth = authStore.Nil } - return NewWithAuthenticator(addr, tunnel, authenticator, additions...) + return NewWithAuthenticator(addr, tunnel, getAuth, additions...) } -func NewWithAuthenticator(addr string, tunnel C.Tunnel, authenticator auth.Authenticator, additions ...inbound.Addition) (*Listener, error) { +func NewWithAuthenticator(addr string, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) (*Listener, error) { isDefault := false if len(additions) == 0 { isDefault = true @@ -75,13 +75,18 @@ func NewWithAuthenticator(addr string, tunnel C.Tunnel, authenticator auth.Authe continue } N.TCPKeepAlive(conn) + + getAuth := getAuth if isDefault { // only apply on default listener if !inbound.IsRemoteAddrDisAllowed(conn.RemoteAddr()) { _ = conn.Close() continue } + if inbound.SkipAuthRemoteAddr(conn.RemoteAddr()) { + getAuth = authStore.Nil + } } - go HandleConn(conn, tunnel, authenticator, additions...) + go HandleConn(conn, tunnel, getAuth, additions...) } }() diff --git a/mihomo/listener/inbound/auth.go b/mihomo/listener/inbound/auth.go new file mode 100644 index 0000000000..41f18fc089 --- /dev/null +++ b/mihomo/listener/inbound/auth.go @@ -0,0 +1,31 @@ +package inbound + +import ( + "github.com/metacubex/mihomo/component/auth" + authStore "github.com/metacubex/mihomo/listener/auth" +) + +type AuthUser struct { + Username string `inbound:"username"` + Password string `inbound:"password"` +} + +type AuthUsers []AuthUser + +func (a AuthUsers) GetAuth() func() auth.Authenticator { + if a != nil { // structure's Decode will ensure value not nil when input has value even it was set an empty array + if len(a) == 0 { + return authStore.Nil + } + users := make([]auth.AuthUser, len(a)) + for i, user := range a { + users[i] = auth.AuthUser{ + User: user.Username, + Pass: user.Password, + } + } + authenticator := auth.NewAuthenticator(users) + return func() auth.Authenticator { return authenticator } + } + return authStore.Authenticator +} diff --git a/mihomo/listener/inbound/http.go b/mihomo/listener/inbound/http.go index f5301f46c9..c78abefd5f 100644 --- a/mihomo/listener/inbound/http.go +++ b/mihomo/listener/inbound/http.go @@ -8,6 +8,7 @@ import ( type HTTPOption struct { BaseOption + Users AuthUsers `inbound:"users,omitempty"` } func (o HTTPOption) Equal(config C.InboundConfig) bool { @@ -44,7 +45,7 @@ func (h *HTTP) Address() string { // Listen implements constant.InboundListener func (h *HTTP) Listen(tunnel C.Tunnel) error { var err error - h.l, err = http.New(h.RawAddress(), tunnel, h.Additions()...) + h.l, err = http.NewWithAuthenticator(h.RawAddress(), tunnel, h.config.Users.GetAuth(), h.Additions()...) if err != nil { return err } diff --git a/mihomo/listener/inbound/mixed.go b/mihomo/listener/inbound/mixed.go index fc64382199..443a256452 100644 --- a/mihomo/listener/inbound/mixed.go +++ b/mihomo/listener/inbound/mixed.go @@ -12,7 +12,8 @@ import ( type MixedOption struct { BaseOption - UDP bool `inbound:"udp,omitempty"` + Users AuthUsers `inbound:"users,omitempty"` + UDP bool `inbound:"udp,omitempty"` } func (o MixedOption) Equal(config C.InboundConfig) bool { @@ -52,7 +53,7 @@ func (m *Mixed) Address() string { // Listen implements constant.InboundListener func (m *Mixed) Listen(tunnel C.Tunnel) error { var err error - m.l, err = mixed.New(m.RawAddress(), tunnel, m.Additions()...) + m.l, err = mixed.NewWithAuthenticator(m.RawAddress(), tunnel, m.config.Users.GetAuth(), m.Additions()...) if err != nil { return err } diff --git a/mihomo/listener/inbound/socks.go b/mihomo/listener/inbound/socks.go index 7e10d93afb..cf6d1ce433 100644 --- a/mihomo/listener/inbound/socks.go +++ b/mihomo/listener/inbound/socks.go @@ -9,7 +9,8 @@ import ( type SocksOption struct { BaseOption - UDP bool `inbound:"udp,omitempty"` + Users AuthUsers `inbound:"users,omitempty"` + UDP bool `inbound:"udp,omitempty"` } func (o SocksOption) Equal(config C.InboundConfig) bool { @@ -70,7 +71,7 @@ func (s *Socks) Address() string { // Listen implements constant.InboundListener func (s *Socks) Listen(tunnel C.Tunnel) error { var err error - if s.stl, err = socks.New(s.RawAddress(), tunnel, s.Additions()...); err != nil { + if s.stl, err = socks.NewWithAuthenticator(s.RawAddress(), tunnel, s.config.Users.GetAuth(), s.Additions()...); err != nil { return err } if s.udp { diff --git a/mihomo/listener/mixed/mixed.go b/mihomo/listener/mixed/mixed.go index 773cabe3f1..12390061c0 100644 --- a/mihomo/listener/mixed/mixed.go +++ b/mihomo/listener/mixed/mixed.go @@ -5,6 +5,7 @@ import ( "github.com/metacubex/mihomo/adapter/inbound" N "github.com/metacubex/mihomo/common/net" + "github.com/metacubex/mihomo/component/auth" C "github.com/metacubex/mihomo/constant" authStore "github.com/metacubex/mihomo/listener/auth" "github.com/metacubex/mihomo/listener/http" @@ -36,6 +37,10 @@ func (l *Listener) Close() error { } func New(addr string, tunnel C.Tunnel, additions ...inbound.Addition) (*Listener, error) { + return NewWithAuthenticator(addr, tunnel, authStore.Authenticator, additions...) +} + +func NewWithAuthenticator(addr string, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) (*Listener, error) { isDefault := false if len(additions) == 0 { isDefault = true @@ -62,20 +67,24 @@ func New(addr string, tunnel C.Tunnel, additions ...inbound.Addition) (*Listener } continue } + getAuth := getAuth if isDefault { // only apply on default listener if !inbound.IsRemoteAddrDisAllowed(c.RemoteAddr()) { _ = c.Close() continue } + if inbound.SkipAuthRemoteAddr(c.RemoteAddr()) { + getAuth = authStore.Nil + } } - go handleConn(c, tunnel, additions...) + go handleConn(c, tunnel, getAuth, additions...) } }() return ml, nil } -func handleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { +func handleConn(conn net.Conn, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) { N.TCPKeepAlive(conn) bufConn := N.NewBufferedConn(conn) @@ -86,10 +95,10 @@ func handleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { switch head[0] { case socks4.Version: - socks.HandleSocks4(bufConn, tunnel, additions...) + socks.HandleSocks4(bufConn, tunnel, getAuth, additions...) case socks5.Version: - socks.HandleSocks5(bufConn, tunnel, additions...) + socks.HandleSocks5(bufConn, tunnel, getAuth, additions...) default: - http.HandleConn(bufConn, tunnel, authStore.Authenticator(), additions...) + http.HandleConn(bufConn, tunnel, getAuth, additions...) } } diff --git a/mihomo/listener/socks/tcp.go b/mihomo/listener/socks/tcp.go index f2696e3fc1..3e98a60276 100644 --- a/mihomo/listener/socks/tcp.go +++ b/mihomo/listener/socks/tcp.go @@ -6,6 +6,7 @@ import ( "github.com/metacubex/mihomo/adapter/inbound" N "github.com/metacubex/mihomo/common/net" + "github.com/metacubex/mihomo/component/auth" C "github.com/metacubex/mihomo/constant" authStore "github.com/metacubex/mihomo/listener/auth" "github.com/metacubex/mihomo/transport/socks4" @@ -35,6 +36,10 @@ func (l *Listener) Close() error { } func New(addr string, tunnel C.Tunnel, additions ...inbound.Addition) (*Listener, error) { + return NewWithAuthenticator(addr, tunnel, authStore.Authenticator, additions...) +} + +func NewWithAuthenticator(addr string, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) (*Listener, error) { isDefault := false if len(additions) == 0 { isDefault = true @@ -61,20 +66,24 @@ func New(addr string, tunnel C.Tunnel, additions ...inbound.Addition) (*Listener } continue } + getAuth := getAuth if isDefault { // only apply on default listener if !inbound.IsRemoteAddrDisAllowed(c.RemoteAddr()) { _ = c.Close() continue } + if inbound.SkipAuthRemoteAddr(c.RemoteAddr()) { + getAuth = authStore.Nil + } } - go handleSocks(c, tunnel, additions...) + go handleSocks(c, tunnel, getAuth, additions...) } }() return sl, nil } -func handleSocks(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { +func handleSocks(conn net.Conn, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) { N.TCPKeepAlive(conn) bufConn := N.NewBufferedConn(conn) head, err := bufConn.Peek(1) @@ -85,19 +94,16 @@ func handleSocks(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) switch head[0] { case socks4.Version: - HandleSocks4(bufConn, tunnel, additions...) + HandleSocks4(bufConn, tunnel, getAuth, additions...) case socks5.Version: - HandleSocks5(bufConn, tunnel, additions...) + HandleSocks5(bufConn, tunnel, getAuth, additions...) default: conn.Close() } } -func HandleSocks4(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { - authenticator := authStore.Authenticator() - if inbound.SkipAuthRemoteAddr(conn.RemoteAddr()) { - authenticator = nil - } +func HandleSocks4(conn net.Conn, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) { + authenticator := getAuth() addr, _, user, err := socks4.ServerHandshake(conn, authenticator) if err != nil { conn.Close() @@ -107,11 +113,8 @@ func HandleSocks4(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) tunnel.HandleTCPConn(inbound.NewSocket(socks5.ParseAddr(addr), conn, C.SOCKS4, additions...)) } -func HandleSocks5(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { - authenticator := authStore.Authenticator() - if inbound.SkipAuthRemoteAddr(conn.RemoteAddr()) { - authenticator = nil - } +func HandleSocks5(conn net.Conn, tunnel C.Tunnel, getAuth func() auth.Authenticator, additions ...inbound.Addition) { + authenticator := getAuth() target, command, user, err := socks5.ServerHandshake(conn, authenticator) if err != nil { conn.Close() diff --git a/openwrt-packages/luci-theme-design/LICENSE b/openwrt-packages/luci-theme-design/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/openwrt-packages/luci-theme-design/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/openwrt-packages/luci-theme-design/Makefile b/openwrt-packages/luci-theme-design/Makefile new file mode 100644 index 0000000000..87dba76a2d --- /dev/null +++ b/openwrt-packages/luci-theme-design/Makefile @@ -0,0 +1,14 @@ +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Design Theme +LUCI_DEPENDS:= +PKG_VERSION:=5.8.0-20240106 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/openwrt-packages/luci-theme-design/README.md b/openwrt-packages/luci-theme-design/README.md new file mode 100644 index 0000000000..966fefbbd1 --- /dev/null +++ b/openwrt-packages/luci-theme-design/README.md @@ -0,0 +1,107 @@ +
+

+ LuCI design theme for OpenWrt +

+ + + + + + + + + + + + +
+
+ +
简体中文 | [English](README_en.md) + +# luci-theme-design + + luci-theme-design 是一个针对移动端和PC端的沉浸式WebApp体验和优化的OpenWrt LuCI主题 +- **luci-theme-design**基于luci-theme-neobird二次开发, 适用于[lede](https://github.com/coolsnowwolf/lede) +- main支持lede源码的lua版本 +- js分支开始由[papagaye744](https://github.com/papagaye744)维护 + +- 你可以使用[插件](https://github.com/gngpp/luci-app-design-config)定义一些设置 + - 支持更改主题深色/浅色模式 + - 支持显示/隐藏导航栏 + - 支持更换常用的代理图标 + +- 感谢 [JetBrains](https://www.jetbrains.com/) 提供的非商业开源软件开发授权! + + +### 主要特点 + +- 适配移动端响应式优化,适合手机端做为WebApp使用 +- 修改和优化了很多插件显示,完善的设备icon图标,视觉统一 +- 简洁的登录界面,底部导航栏,类App的沉浸式体验 +- 适配深色模式,适配系统自动切换,插件式自定义模式 +- 支持插件式配置主题 +- 流畅度比肩bootstrap + +### 体验WebApp方法 + +- 在移动端(iOS/iPadOS、Android谷歌)浏览器打开设置管理,添加到主屏幕即可。 + +### 优化 + +- 修复安装package提示信息背景泛白 +- 优化菜单折叠和缩放 +- 优化显示网口down状态显示图标 +- 优化logo显示 +- 新增各设备状态图标显示 +- 更换logo显示为字体"OpenWrt",支持以主机名显示logo +- 修复部分插件显示bug +- 修复vssr状态bar +- 修复诸多bug +- 修复兼容部分插件样式 +- 修复aliyundrive-webdav样式 +- 修复vssr在iOS/iPadOS WebApp模式下显示异常 +- 修复openclash插件在iOS/iPadOS WebApp 模式下env(safe-area-inset-bottom) = 0 +- 优化菜单hover action状态分辨 +- 支持luci-app-wizard向导菜单 +- Update header box-shadow style +- Update uci-change overflow +- Fix nlbw component +- 支持QWRT(QSDK)、iStore向导导航 +- 适配OpenWrt 21/22 +... + +### 编译 + +``` +git clone https://github.com/kenzok78/luci-theme-design.git package/luci-theme-design +make menuconfig # choose LUCI->Theme->Luci-theme-design +make V=s +``` + +### Q&A + +- 有bug欢迎提issue +- 主题个人配色可能会不符合大众胃口,欢迎提配色建议 + +### 预览 + +
iOS + + +
+ +
iPadOS + + +
+ + + + + + + + + + diff --git a/openwrt-packages/luci-theme-design/README_en.md b/openwrt-packages/luci-theme-design/README_en.md new file mode 100644 index 0000000000..54edc2eab3 --- /dev/null +++ b/openwrt-packages/luci-theme-design/README_en.md @@ -0,0 +1,98 @@ +
+

+ LuCI design theme for OpenWrt +

+ + + + + + + + + + + + +
+
+ +
English | [简体中文](README.md) + +# luci-theme-design + +### luci-theme-design is an OpenWrt LuCI theme for immersive WebApp experience and optimization on mobile and PC +- **luci-theme-design** based on luci-theme-neobird, for [lede](https://github.com/coolsnowwolf/lede) / [OpenWrt](https://github.com/openwrt/ openwrt) +- The default branch only supports the lua version of the lede source code. If you use openwrt 21/22, please pull the [js](https://github.com/gngpp/luci-theme-design/tree/js) version (development stage). + +- You can define some settings using [plugin](https://github.com/gngpp/luci-app-design-config) + - Support changing theme dark/light mode + - Support show/hide navigation bar + - Support replacing commonly used proxy icons + +### If you find it useful, please click a star, your support is the driving force for my long-term updates, thank you. + +- Thanks for non-commercial open source development authorization by [JetBrains](https://www.jetbrains.com/)! + + +### Release version + +- Lua version select 5.x version +- JS version select 6.x version + +### Features + +- Adapt to the responsive optimization of the mobile terminal, suitable for use as a WebApp on the mobile terminal +- Modified and optimized the display of many plug-ins, improved icon icons, and unified visuals as much as possible +- Simple login interface, bottom navigation bar, immersive app-like experience +- Adapt to dark mode, adapt to system automatic switching, support custom mode +- Adapt to openwrt 21/22, lede + +### Experience WebApp method + +- Open the settings management in the mobile browser (iOS/iPadOS, Android Google) and add it to the home screen. +- If the SSL certificate is not used, iOS/iPadOS will display the menu bar at the top of the browser after opening a new page for security reasons. + +### Optimization + +- Optimize menu collapsing and zooming +- Optimized to display network port down state display icon +- Support QWRT (QSDK), iStore wizard navigation +- Adapt to OpenWrt 21/22 +- Adapt to linkease series icons + +### Compile + +``` +git clone https://github.com/gngpp/luci-theme-design.git package/luci-theme-design +make menuconfig # choose LUCI->Theme->Luci-theme-design +make V=s +``` + +### Q&A + +- The resource interface icon is not perfect. If you have the ability to draw a picture, you are welcome to pr, but please make sure it is consistent with the existing icon color style +- If there is a bug, please raise an issue +- The theme's personal color matching may not meet the public's appetite, welcome to provide color matching suggestions + +### Preview + +
iOS + + +
+ +
iPadOS + + +
+ + + + + + + + + + diff --git a/openwrt-packages/luci-theme-design/dev/design.js b/openwrt-packages/luci-theme-design/dev/design.js new file mode 100644 index 0000000000..044b4d7896 --- /dev/null +++ b/openwrt-packages/luci-theme-design/dev/design.js @@ -0,0 +1,266 @@ +/* + * xhr.js - XMLHttpRequest helper class + * (c) 2008-2010 Jo-Philipp Wich + */ + +XHR = function() +{ + this.reinit = function() + { + if (window.XMLHttpRequest) { + this._xmlHttp = new XMLHttpRequest(); + } + else if (window.ActiveXObject) { + this._xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + else { + alert("xhr.js: XMLHttpRequest is not supported by this browser!"); + } + } + + this.busy = function() { + if (!this._xmlHttp) + return false; + + switch (this._xmlHttp.readyState) + { + case 1: + case 2: + case 3: + return true; + + default: + return false; + } + } + + this.abort = function() { + if (this.busy()) + this._xmlHttp.abort(); + } + + this.get = function(url,data,callback) + { + this.reinit(); + + var xhr = this._xmlHttp; + var code = this._encode(data); + + url = location.protocol + '//' + location.host + url; + + if (code) + if (url.substr(url.length-1,1) == '&') + url += code; + else + url += '?' + code; + + xhr.open('GET', url, true); + + xhr.onreadystatechange = function() + { + if (xhr.readyState == 4) { + var json = null; + if (xhr.getResponseHeader("Content-Type") == "application/json") { + try { + json = eval('(' + xhr.responseText + ')'); + } + catch(e) { + json = null; + } + } + + callback(xhr, json); + } + } + + xhr.send(null); + } + + this.post = function(url,data,callback) + { + this.reinit(); + + var xhr = this._xmlHttp; + var code = this._encode(data); + + xhr.onreadystatechange = function() + { + if (xhr.readyState == 4) + callback(xhr); + } + + xhr.open('POST', url, true); + xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + xhr.send(code); + } + + this.cancel = function() + { + this._xmlHttp.onreadystatechange = function(){}; + this._xmlHttp.abort(); + } + + this.send_form = function(form,callback,extra_values) + { + var code = ''; + + for (var i = 0; i < form.elements.length; i++) + { + var e = form.elements[i]; + + if (e.options) + { + code += (code ? '&' : '') + + form.elements[i].name + '=' + encodeURIComponent( + e.options[e.selectedIndex].value + ); + } + else if (e.length) + { + for (var j = 0; j < e.length; j++) + if (e[j].name) { + code += (code ? '&' : '') + + e[j].name + '=' + encodeURIComponent(e[j].value); + } + } + else + { + code += (code ? '&' : '') + + e.name + '=' + encodeURIComponent(e.value); + } + } + + if (typeof extra_values == 'object') + for (var key in extra_values) + code += (code ? '&' : '') + + key + '=' + encodeURIComponent(extra_values[key]); + + return( + (form.method == 'get') + ? this.get(form.getAttribute('action'), code, callback) + : this.post(form.getAttribute('action'), code, callback) + ); + } + + this._encode = function(obj) + { + obj = obj ? obj : { }; + obj['_'] = Math.random(); + + if (typeof obj == 'object') + { + var code = ''; + var self = this; + + for (var k in obj) + code += (code ? '&' : '') + + k + '=' + encodeURIComponent(obj[k]); + + return code; + } + + return obj; + } +} + +XHR.get = function(url, data, callback) +{ + (new XHR()).get(url, data, callback); +} + +XHR.poll = function(interval, url, data, callback) +{ + if (isNaN(interval) || interval < 1) + interval = 5; + + if (!XHR._q) + { + XHR._t = 0; + XHR._q = [ ]; + XHR._r = function() { + for (var i = 0, e = XHR._q[0]; i < XHR._q.length; e = XHR._q[++i]) + { + if (!(XHR._t % e.interval) && !e.xhr.busy()) + e.xhr.get(e.url, e.data, e.callback); + } + + XHR._t++; + }; + } + + XHR._q.push({ + interval: interval, + callback: callback, + url: url, + data: data, + xhr: new XHR() + }); + + XHR.run(); +} + +XHR.halt = function() +{ + if (XHR._i) + { + /* show & set poll indicator */ + try { + document.getElementById('xhr_poll_status').style.display = ''; + document.getElementById('xhr_poll_status_on').style.display = 'none'; + document.getElementById('xhr_poll_status_off').style.display = ''; + document.getElementById('notice_status').style.marginRight = '30px' + } catch(e) { } + + window.clearInterval(XHR._i); + XHR._i = null; + } +} + +XHR.run = function() +{ + if (XHR._r && !XHR._i) + { + /* show & set poll indicator */ + try { + document.getElementById('xhr_poll_status').style.display = ''; + document.getElementById('xhr_poll_status_on').style.display = ''; + document.getElementById('xhr_poll_status_off').style.display = 'none'; + document.getElementById('notice_status').style.marginRight = '30px' + } catch(e) { } + + /* kick first round manually to prevent one second lag when setting up + * the poll interval */ + XHR._r(); + XHR._i = window.setInterval(XHR._r, 1000); + } +} + +XHR.running = function() +{ + return !!(XHR._r && XHR._i); +} + +;(function ($) { + // Fixed status realtime table overflow style + function settingsStatusRealtimeOverflow() { + if (self.location.pathname.includes("status/realtime")) { + const nodeStatusRealtime = $('.node-status-realtime'); + const selectorValues = ['bandwidth', 'wifirate', 'wireless']; + // .node-status-realtime embed[src="/luci-static/resources/bandwidth.svg"] + div + br + table + // .node-status-realtime embed[src="/luci-static/resources/wifirate.svg"] + div + br + table + // .node-status-realtime embed[src="/luci-static/resources/wireless.svg"] + div + br + table + for (let i = 0; i < selectorValues.length; i++) { + const value = selectorValues[i]; + const target = nodeStatusRealtime.find(`embed[src="/luci-static/resources/${value}.svg"] + div + br + table`); + if (target.length) { + target.wrap('
'); + } + } + } + } + + $(document).ready(() => { + settingsStatusRealtimeOverflow(); + }); + +})(jQuery); diff --git a/openwrt-packages/luci-theme-design/dev/script.js b/openwrt-packages/luci-theme-design/dev/script.js new file mode 100644 index 0000000000..6fd5052fd7 --- /dev/null +++ b/openwrt-packages/luci-theme-design/dev/script.js @@ -0,0 +1,247 @@ +/** + * Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI + * + * luci-theme-argon + * Copyright 2023 gngpp + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/LuttyYang/luci-theme-material/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * luci-theme-material: + * https://github.com/LuttyYang/luci-theme-material/ + * + * + * Licensed to the public under the Apache License 2.0 + */ +(function ($) { + + $(".main > .loading").fadeOut(); + + /** + * trim text, Remove spaces, wrap + * @param text + * @returns {string} + */ + function trimText(text) { + return text.replace(/[ \t\n\r]+/g, " "); + } + + var lastNode = undefined; + var mainNodeName = undefined; + + var nodeUrl = ""; + (function (node) { + if (node[0] == "admin") { + luciLocation = [node[1], node[2]]; + } else { + luciLocation = node; + } + + for (var i in luciLocation) { + nodeUrl += luciLocation[i]; + if (i != luciLocation.length - 1) { + nodeUrl += "/"; + } + } + })(luciLocation); + + /** + * get the current node by Burl (primary) + * @returns {boolean} success? + */ + function getCurrentNodeByUrl() { + if (!$('body').hasClass('logged-in')) { + luciLocation = ["Main", "Login"]; + return true; + } + const urlReg = new RegExp(nodeUrl + "$") + var ret = false; + $(".main > .main-left > .nav > .slide > .active").next(".slide-menu").stop(true).slideUp("fast"); + $(".main > .main-left > .nav > .slide > .menu").removeClass("active"); + $(".main > .main-left > .nav > .slide > .menu").each(function () { + var ulNode = $(this); + + ulNode.next().find("a").each(function () { + var that = $(this); + var href = that.attr("href"); + + if (urlReg.test(href)) { + ulNode.click(); + ulNode.next(".slide-menu").stop(true, true); + lastNode = that.parent(); + lastNode.addClass("active"); + ret = true; + return true; + } + }); + }); + return ret; + } + + /** + * menu click + */ + $(".main > .main-left > .nav > .slide > .menu").click(function () { + var ul = $(this).next(".slide-menu"); + var menu = $(this); + if (!menu.hasClass("exit")) { + $(".main > .main-left > .nav > .slide > .active").next(".slide-menu").stop(true).slideUp("fast"); + $(".main > .main-left > .nav > .slide > .menu").removeClass("active"); + if (!ul.is(":visible")) { + menu.addClass("active"); + ul.addClass("active"); + ul.stop(true).slideDown("fast"); + } else { + ul.stop(true).slideUp("fast", function () { + menu.removeClass("active"); + ul.removeClass("active"); + }); + } + + return false; + } + }); + + /** + * hook menu click and add the hash + */ + $(".main > .main-left > .nav > .slide > .slide-menu > li > a").click(function () { + if (lastNode != undefined) + lastNode.removeClass("active"); + $(this).parent().addClass("active"); + $(".main > .loading").fadeIn("fast"); + return true; + }); + + /** + * fix menu click + */ + $(".main > .main-left > .nav > .slide > .slide-menu > li").click(function () { + if (lastNode != undefined) + lastNode.removeClass("active"); + $(this).addClass("active"); + $(".main > .loading").fadeIn("fast"); + window.location = $($(this).find("a")[0]).attr("href"); + return false; + }); + + /** + * get current node and open it + */ + if (getCurrentNodeByUrl()) { + mainNodeName = "node-" + luciLocation[0] + "-" + luciLocation[1]; + mainNodeName = mainNodeName.replace(/[ \t\n\r\/]+/g, "_").toLowerCase(); + $("body").addClass(mainNodeName); + } + + /** + * hook other "A Label" and add hash to it. + */ + $("#maincontent > .container").find("a").each(function () { + var that = $(this); + var onclick = that.attr("onclick"); + if (onclick == undefined || onclick == "") { + that.click(function () { + var href = that.attr("href"); + if (href.indexOf("#") == -1) { + $(".main > .loading").fadeIn("fast"); + return true; + } + }); + } + }); + + /** + * Sidebar expand + */ + var showSide = false; + + $(".showSide").click(function () { + if (showSide) { + $(".darkMask").stop(true).fadeOut("fast"); + $(".main-left").stop(true).animate({ + width: "0" + }, "fast"); + $(".main-right").css("overflow-y", "auto"); + $("header>.container>.brand").css("padding", "0 4.5rem") + showSide = false; + } else { + $(".darkMask").stop(true).fadeIn("fast"); + $(".main-left").stop(true).animate({ + width: "18rem" + }, "fast"); + $(".main-right").css("overflow-y", "hidden"); + $(".showSide").css("display", "none"); + $("header").css("box-shadow", "18rem 2px 4px rgb(0 0 0 / 8%)") + $("header>.container>.brand").css("padding", '0rem') + showSide = true; + } + }); + + $(".darkMask").click(function () { + if (showSide) { + $(".darkMask").stop(true).fadeOut("fast"); + $(".main-left").stop(true).animate({ + width: "0" + }, "fast"); + $(".main-right").css("overflow-y", "auto"); + $(".showSide").css("display", ""); + $("header").css("box-shadow", "0 2px 4px rgb(0 0 0 / 8%)") + $("header>.container>.brand").css("padding", "0 4.5rem") + showSide = false; + } + }); + + $(window).resize(function () { + if ($(window).width() > 992) { + showSide = false; + $(".showSide").css("display", ""); + $(".main-left").css("width", ""); + $(".darkMask").stop(true); + $(".darkMask").css("display", "none"); + $("header").css("box-shadow", "18rem 2px 4px rgb(0 0 0 / 8%)") + $("header>.container>.brand").css("padding", '0rem') + } else { + $("header").css("box-shadow", "0 2px 4px rgb(0 0 0 / 8%)") + $("header>.container>.brand").css("padding", "0 4.5rem") + } + if (showSide) { + $("header").css("box-shadow", "18rem 2px 4px rgb(0 0 0 / 8%)") + $("header>.container>.brand").css("padding", '0rem') + } + }); + + $(".main-right").focus(); + $(".main-right").blur(); + $("input").attr("size", "0"); + + if (mainNodeName != undefined) { + switch (mainNodeName) { + case "node-status-system_log": + case "node-status-kernel_log": + $("#syslog").focus(function () { + $("#syslog").blur(); + $(".main-right").focus(); + $(".main-right").blur(); + }); + break; + case "node-status-firewall": + var button = $(".node-status-firewall > .main fieldset li > a"); + button.addClass("cbi-button cbi-button-reset a-to-btn"); + break; + case "node-system-reboot": + var button = $(".node-system-reboot > .main > .main-right p > a"); + button.addClass("cbi-button cbi-input-reset a-to-btn"); + break; + } + } + +})(jQuery); diff --git a/openwrt-packages/luci-theme-design/dev/style.css b/openwrt-packages/luci-theme-design/dev/style.css new file mode 100644 index 0000000000..c77147dd7f --- /dev/null +++ b/openwrt-packages/luci-theme-design/dev/style.css @@ -0,0 +1,3522 @@ +/** + * Design is a clean HTML5 theme for LuCI. It is based on luci-theme-material and luci-theme-neobird + * + * luci-theme-material + * Copyright 2015 Lutty Yang + * + * luci-theme-Neobird + * Copyright 2021 2smile + * + * Licensed to the public under the Apache License 2.0 + */ + :root { + --commonRadius0: 8px; + --commonRadius1: 5px + } + + [data-theme='light'] { + --bg: #f1f4f5; + --mainbg: #fff; + --bgwhite: #fff; + --activeColor: #5ea69b; + --activeBottom: #5ea69b 2px solid; + --textColor: rgb(132,119,116); + --borderColor: rgba(0,0,0,.15); + --navbgColor: rgba(255, 255, 255, .7); + --navBorder: 1px solid #f2f2f2; + --sectionbgColor: #fff; + --sectionbgColor2: #fff; + --sectionShaddow: 3px 3px 3px rgba(0,0,0,.05); + --sectionBorder: none; + --sectiontabBorder: none; + --tabmenuBorderLR: none; + --tabmenubgColor: none; + --tabmenuBottom: #e4eaec 1px solid; + --tabmenuRadius: 6px 6px 0 0; + --sectionnodeBorder: #f7f7f7 1px solid; + --cbilineColor: #f7f7f7 1px solid; + --tabbgColor: #fff; + --inputbgColor: #f8f8f8; + --inputtextColor: #76838f; + --inputBorder: 1px solid #e4eaec; + --mainleftbgColor: rgb(255,255,255); + --bttextColor: #fff; + --badgebgColor: #f7f7f7; + --badgeBorder: #e4eaec 1px solid; + --progressbarColor: #c8c8c8; + --progressbar: #5ea69b; + --progressbartxtColor: #fff; + /* --logo: url('/luci-static/design/images/logo.png'); + --mlogo: url('/luci-static/design/images/mlogo.png'); */ + --logo_color: #222b36; + --alertColor: #000000; + --alertBackground: rgb(230 230 230); + --scrollbarColor:#c5c5c5; + --ifaceboxBorderColor: #b8b8b8bd; + --ifaceboxFontColor: #404040; + --liSelectedColor: #c5c5c5; + --vssrStatusColor: #525f7f; + --vssrBoxShadow: 0 0 2rem 0 rgb(136 152 170 / 30%); +} + +[data-theme='dark'] { + --bg: #000; + --bgwhite: #000; + --textColor: #fefefe; + --activeColor: #5ea69b; + --activeBottom: #5ea69b 2px solid; + --borderColor: #2C2C3A; + --navbgColor: hsla(0, 0%, 7%, .8); + --navBorder: 1px solid #1c1c1e; + --sectionbgColor: #1c1c1e; + --sectionbgColor2: #1c1c1e; + --sectionShaddow: 3px 3px 3px rgba(0,0,0,.05); + --sectionBorder: none; + --sectiontabBorder: none; + --sectionnodeBorder: #3d3d41 1px solid; + --cbilineColor: #2d2d2d 1px solid; + --tabbgColor: #1c1c1e; + --tabmenuBorderLR: none; + --tabmenubgColor: none; + --tabmenuBottom: #2d2d2d 1px solid; + --tabmenuRadius: 6px 6px 0 0; + --inputbgColor: #2f2f2f; + --inputtextColor: #fefefe; + --inputBorder: 1px solid #4d4d4d; + --mainleftbgColor: #000; + --bttextColor: #fefefe; + --badgebgColor: #fefefe; + --badgeBorder: #3d3d40 1px solid; + --progressbarColor: #6d6d6d; + --progressbar: #5ea69b; + --progressbartxtColor: #fefefe; + /* --logo: url('/luci-static/design/images/logod.png'); + --mlogo: url('/luci-static/design/images/mlogod.png'); */ + --logo_color: #fefefe; + --alertColor: #ffffff; + --alertBackground: rgb(30 30 30); + --scrollbarColor:#2f2f2f; + --ifaceboxBorderColor: #636363bd; + --ifaceboxFontColor: #404040; + --liSelectedColor: #2f2f2f; + --vssrStatusColor: rgb(204, 204, 204); + --vssrBoxShadow: 0 0 1rem 0 rgb(0 0 0 / 30%); +} + +@font-face { + font-family: 'icomoon'; + src: url('../fonts/font.eot'); + src: url('../fonts/font.eot') format('embedded-opentype'), + url('../fonts/font.ttf') format('truetype'), + url('../fonts/font.woff') format('woff'), + url('../fonts/font.svg') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'design'; + src: url(''); + src: url('?#iefix') format('embedded-opentype'), + url('../fonts/iconfont-Regular.woff2') format('woff2'), + url('../fonts/iconfont-Regular.woff') format('woff'), + url('../fonts/iconfont-Regular.ttf') format('truetype'), + url('#iconfont') format('svg'); +} + +@font-face{ + font-family: 'GenJyuuGothic-Medium'; + src : url('../fonts/GenJyuuGothic-Medium.otf') format('opentype'); +} + +*::-webkit-scrollbar { + width: 5px; + height: 5px; + } + *::-webkit-scrollbar-thumb { + background: var(--scrollbarColor) ; + border-radius: 2px; + } + +div{ + font-family: 'HYk2gj'; +} + +html { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +html, body { + margin: 0px; + padding: 0px; + height: 100%; + font-family: -apple-system, 'Microsoft Yahei' !important; + font-size: 0.92rem; + line-height: 150%; + background-color: var(--bg); + color:var(--textColor); +} + +body div { + line-height:150%; +} + +a { + color: var(--textColor); + text-decoration: none; +} + +em { + font-style:normal !important; + line-height: 1.5; + padding-left: 10px; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; + -webkit-tap-highlight-color: transparent; +} + +select { + overflow: hidden !important; + width: 100%; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + padding: 0 25px 0 10px !important; + background-size: 24px 16px; + background-repeat: no-repeat; + background-position: right center; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABGCAYAAAA6hjFpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMS1jMDAwIDc5LmRhYmFjYmIsIDIwMjEvMDQvMTQtMDA6Mzk6NDQgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDNzA0QUE0NjE2QTExRUNCMjJFQkQyRkIyNURDNjE3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDNzA0QUEzNjE2QTExRUNCMjJFQkQyRkIyNURDNjE3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMi41IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzNBNTYzNTY2MTUxMTFFQ0IyMkVCRDJGQjI1REM2MTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QzNBNTYzNTc2MTUxMTFFQ0IyMkVCRDJGQjI1REM2MTciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6YjzxlAAACsklEQVR42uyaXUsVURSG51T0U/obfUvhhYF0U0HQhZQVIWVJCAkiSUXfRRcaBFbXQVBBRCASFCJBpQQipw+RREkpCa9aG95gs0DMOp6Z7TwvvAxnzczaa6/nzDnzVTndfSVDxdE6WgAQBBCAIIAABAEEIAggAEEAQQABCAIIQBBAAIIAAhAEEAQQgCCAAAStGSAbzA/N+wvSiwPmB6or16bkoY2afLN5r+q4l2MfDpr7zetV2z7zYpmOkAHByNSE0IxDOdUSxr2rOjLVNVC2n6z77hsYmtFnbqlzHS0aN+7DouorFZBH+ibGUCrmO+YjdaqhVeNVHIxm1Ve6P/XH5ibzLwfllvn4Ko8d8t90MEIde1RXaU97n6oJCw7KNXPbKo3ZpvwxjAXV8YTrkCx7piPFQ7lsbq/xWO3K62E0qQ4uDKXn5kbzTxe/YO6o0Rgdypc5GI0anyt1p5fm3eYfLn7e3PmfuTuVJ1YYZ5fG5Up9CQ2qSfMu3m3u+secXdo/1rzGGeTWyfIaUrPmXPycuWeFuXq0X6w55R8q4NwLe3PxlXmn+buLnzX3/mWOXm0fK+RrUP4MICvTG/MO86yLnzFfWmbfi9ou1qzyvS7wnAt/+31YTZxx8ZPmq+709c/pcoifcvEZ5Rku+HyTeB4yYt5unnbxE+YbEZSwvK54rGntP5LAXJN5QPXWvNX8zcWPmm9rHmF5zK0P22/T/hlAaqv35i3mKRc/bB7VMtaUIL5LaI7JPcIdVZMnXXyT+zyp7T4kNr8kn6mPqdlfllj/VevHEpxbsi85fNTP1ycX/2zerPUZQOqrcUGp6nNVMMYTnlPyrwFNCMILLScSn0++r7zUSFVdZ6wJ8aIcQBBAAIIAAhAEEIAggAAEAQQBBCAIIABBAAEIAghAEEAQQJLQbwEGAK/reX2gh5gQAAAAAElFTkSuQmCC'); +} + +select, +input { + color: var(--inputtextColor); + padding: 5px 10px; + font-size: 0.92rem; + font-family: -apple-system, 'Microsoft Yahei', sans-serif, Helvetica, Arial, sans-serif; + border: var(--inputBorder); + background-color: var(--inputbgColor); + transition: color 100ms ease, border-color 100ms ease, opacity 100ms ease; + -webkit-transition: color 100ms ease, border-color 100ms ease, opacity 100ms ease; + outline-style: none; + vertical-align: middle; + border-radius: var(--commonRadius0); + margin: 3px 3px 3px 0; + height: 2.8rem; + line-height: 2.8rem; + max-width: 550px; +} + +select:not([multiple="multiple"]):focus, +input:focus { + border-color: #948FE1; + box-shadow:0 0 6px #948FE1; + -webkit-box-shadow:0 0 6px #948FE1; + -moz-box-shadow:0 0 6px #948FE1; +} + +input[type='file'] { + border: none; + background: none; + height: auto; + line-height: 1rem; +} + +input[type='checkbox'] { + height: 1.2rem; + width: 1.2rem; +} +input[type='radio'] { + height: 1.2rem; + width: 1.2rem; + box-shadow: var(--bg); +} + +select[multiple="multiple"] { + height: auto; +} + +.node-docker-images input[type='text'] { + width: auto !important; +} + +input[type='text'],input[type='password'] { + width: 100%; +} + +code { + color: #0099CC; +} + +/* img[src*="/images/logo.png"] + { + height: 60px; + background-image: var(--logo); + background-size: 220px; + background-repeat: no-repeat; + padding: 0 0 0 250px; + width: 0; + background-position-x: 10px; + background-position-y: 10px; + background-color: var(--mainleftbgColor); +} */ + +abbr { + text-decoration: underline; + cursor: help; +} + +br { + display: block; + margin-bottom: 0.2px; + content: ''; +} + +hr{ + margin: 1rem 0; + border-color: #EEE; + opacity: 0.1; +} + +/* .cbi-section-table-cell br, #cbi-system br, #cbi-dropbear br, .node-status-routes br { + display: none; +} */ + +header, .main { + width: 100%; + position: absolute; +} + +header { + background-color: var(--bgwhite); + box-shadow: 18rem 2px 4px rgba(0, 0, 0, 0.08); + transition: box-shadow 0.1s; + height: 55px; + float: left; + position: fixed; + z-index: 101; +} + +footer { + text-align: right; + padding: 1rem; + color: #aaa; + font-size: 11px; + height: 80px; + visibility:hidden; + /*text-shadow: 0px 0px 2px #BBB;*/ +} + +footer > a { + color: rgb(154,37,143); + text-decoration: none; +} + +text, line { + font-family: Verdana !important; +} + +.cbi-button-up, +.cbi-button-down, +.cbi-value-helpicon, +.showSide, +.main > .loading > span { + font-family: 'icomoon' !important; + font-size:10px; + speak: none; + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none !important; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* fix luci-app-passwall2 button style */ +.node-services-passwall2 #cbi-passwall2 { + text-align: center; +} +.node-services-passwall2 input.cbi-button.cbi-button { + max-width: unset; +} +/* fix luci-app-passwall/luci-app-passwall2 node_div style */ +.node-services-passwall #set_node_div, +.node-services-passwall2 #set_node_div, +.node-services-passwall #add_link_div, +.node-services-passwall2 #add_link_div { + background: var(--sectionbgColor); + border-radius: var(--commonRadius0); +} +.node-services-passwall #add_link_div #nodes_link, +.node-services-passwall2 #add_link_div #nodes_link { + width: 100% !important; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: -apple-system, 'Microsoft Yahei'; + font-weight: 600; + line-height: 1.1; + color: inherit; + clear:both; + text-transform: capitalize; +} + +label.zonebadge.zonebadge-empty { + background-color: #03abe8 !important; +} + +label.zonebadge{ + border-radius: var(--commonRadius1); + padding: 2px 5px 2px 5px !important; + /* background-color: #5bdeae !important; */ + display: inline-block; + cursor: pointer; + color: #666666; +} +.zonebadge { + /* background-color: var(--tabmenubgColor) !important; */ + border-radius: 6px; + padding: 5px; +} + +.zonebadge em { + padding:3px; +} + +svg { + background-color: var(--sectionbgColor); +} + +/* fix .cbi-section .cbi-section */ +.cbi-section .cbi-section { + margin: 10px; +} + +/* fix node-services-vssr */ +.node-services-vssr .status-bar { + bottom:calc(var(--vssrBottom) + constant(safe-area-inset-bottom)); + bottom:calc(var(--vssrBottom) + env(safe-area-inset-bottom)); + background-color: var(--navbgColor); + box-shadow: var(--vssrBoxShadow) !important; + color: var(--vssrStatusColor) !important; +} +.node-services-vssr .container { + padding-bottom:calc(var(--vssrBottom) + constant(safe-area-inset-bottom)); + padding-bottom:calc(var(--vssrBottom) + env(safe-area-inset-bottom)); +} + +.node-services-vssr .ssr-button { + min-width: 30px; +} +.node-services-vssr #cbi-vssr .panel-title { + padding: 10px 0 10px 10px !important; + letter-spacing: 0 !important; +} + +.node-services-vssr .status .block { + border-radius: 10px !important; + box-shadow: none !important; + background-color: var(--sectionbgColor) !important; +} + +.node-services-vssr button { + border-radius: 10px !important; + } + +#cbi-vssr-servers .cbi-section-table-row { + position: relative; + margin: 10px !important; + padding: 8px 15px 8px 70px; + box-shadow: none !important; + border-radius: 10px !important; + border: 0; + color: var(--textColor) !important; + text-align: left; + line-height: 1.7em; + overflow: hidden; + letter-spacing: normal; + background-color: var(--inputbgColor) !important; +} +.cbi-section-table-row.fast { + background-color: #add8e6 !important; +} +.incon .tp { + text-transform: uppercase; + color: var(--bg) !important; +} + +/* file selector upload button */ +::file-selector-button { + transition: all .1s ease-in-out; + border-radius: var(--commonRadius1); + border: 3px solid #337ab7!important; + color: #fff!important; + background-color: #337ab7!important; + box-sizing: border-box; + cursor: pointer; +} +::file-selector-button:hover, +::file-selector-button:focus, +::file-selector-button:active { + color: #fff!important; + background-color: #6a65d6!important; + border-color: #6a65d6!important +} + +/** img retina **/ +img[src*="/luci-static/resources/icons/port_up.png"] { + background-image: url(../images/port_up.png); + background-size: 32px 32px; + height: 32px; + padding: 0 0 0 32px; + width: 0; +} + +img[src*="/luci-static/resources/icons/port_down.png"] { + background-image: url(../images/port_down.png); + background-size: 32px 32px; + height: 32px; + padding: 0 0 0 32px; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/ethernet.png"], +#wan6_i img[src*="/luci-static/resources/icons/ethernet.png"], +img[src*="/luci-static/resources/icons/ethernet.png"] { + background-image: url(../images/ethernet.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/ethernet.png"], +#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/ethernet.png"], +.ifacebadge img[src*="/luci-static/resources/icons/ethernet.png"], +li img[src*="/luci-static/resources/icons/ethernet.png"] + { + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/ethernet.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/ethernet_disabled.png"], +#wan6_i img[src*="/luci-static/resources/icons/ethernet_disabled.png"], +img[src*="/luci-static/resources/icons/ethernet_disabled.png"] { + background-image: url(../images/ethernet_disabled.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/ethernet_disabled.png"], +#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/ethernet_disabled.png"], +.ifacebadge img[src*="/luci-static/resources/icons/ethernet_disabled.png"], +li img[src*="/luci-static/resources/icons/ethernet_disabled.png"] +{ + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/ethernet_disabled.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/switch.png"], +#wan6_i img[src*="/luci-static/resources/icons/switch.png"], +img[src*="/luci-static/resources/icons/switch.png"] { + background-image: url(../images/switch.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/switch.png"], +#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/switch.png"], +.ifacebadge img[src*="/luci-static/resources/icons/switch.png"], +li img[src*="/luci-static/resources/icons/switch.png"] + { + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/switch.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/switch_disabled.png"], +#wan6_i img[src*="/luci-static/resources/icons/switch_disabled.png"], +img[src*="/luci-static/resources/icons/switch_disabled.png"] { + background-image: url(../images/switch_disabled.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/switch_disabled.png"], +#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/switch_disabled.png"], +.ifacebadge img[src*="/luci-static/resources/icons/switch_disabled.png"], +li img[src*="/luci-static/resources/icons/switch_disabled.png"] + { + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/switch_disabled.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/wifi.png"], +#wan6_i img[src*="/luci-static/resources/icons/wifi.png"], +img[src*="/luci-static/resources/icons/wifi.png"] { + background-image: url(../images/wifi.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/wifi.png"], +#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/wifi.png"], +.ifacebadge img[src*="/luci-static/resources/icons/wifi.png"], +li img[src*="/luci-static/resources/icons/wifi.png"] +{ + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/wifi.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/wifi_disabled.png"], +#wan6_i img[src*="/luci-static/resources/icons/wifi_disabled.png"], +img[src*="/luci-static/resources/icons/wifi_disabled.png"] { + background-image: url(../images/wifi_disabled.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/wifi_disabled.png"], +#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/wifi_disabled.png"], +.ifacebadge img[src*="/luci-static/resources/icons/wifi_disabled.png"], +li img[src*="/luci-static/resources/icons/wifi_disabled.png"] +{ + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/wifi_disabled.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/vlan.png"], +#wan6_i img[src*="/luci-static/resources/icons/vlan.png"], +img[src*="/luci-static/resources/icons/vlan.png"] { + background-image: url(../images/vlan.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +.ifacebadge img[src*="/luci-static/resources/icons/vlan.png"], +li img[src*="/luci-static/resources/icons/vlan.png"] +{ + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/vlan.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/vlan_disabled.png"], +#wan6_i img[src*="/luci-static/resources/icons/vlan_disabled.png"], +img[src*="/luci-static/resources/icons/vlan_disabled.png"] { + background-image: url(../images/vlan_disabled.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +.ifacebadge img[src*="/luci-static/resources/icons/vlan_disabled.png"], +li img[src*="/luci-static/resources/icons/vlan_disabled.png"] +{ + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/vlan_disabled.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/bridge.png"], +#wan6_i img[src*="/luci-static/resources/icons/bridge.png"], +img[src*="/luci-static/resources/icons/bridge.png"] { + background-image: url(../images/bridge.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +.ifacebadge img[src*="/luci-static/resources/icons/bridge.png"], +li img[src*="/luci-static/resources/icons/bridge.png"] { + background-image: url(../images/bridge.png); + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; + width: 0; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/bridge.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/bridge_disabled.png"], +#wan6_i img[src*="/luci-static/resources/icons/bridge_disabled.png"], +img[src*="/luci-static/resources/icons/bridge_disabled.png"] { + background-image: url(../images/bridge_disabled.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +.ifacebadge img[src*="/luci-static/resources/icons/bridge_disabled.png"], +li img[src*="/luci-static/resources/icons/bridge_disabled.png"] { + background-image: url(../images/bridge_disabled.png); + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; + width: 0; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/bridge_disabled.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/tunnel.png"], +#wan6_i img[src*="/luci-static/resources/icons/tunnel.png"], +img[src*="/luci-static/resources/icons/tunnel.png"] { + background-image: url(../images/tunnel.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +.ifacebadge img[src*="/luci-static/resources/icons/tunnel.png"], +li img[src*="/luci-static/resources/icons/tunnel.png"] +{ + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/tunnel.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +#wan4_i img[src*="/luci-static/resources/icons/tunnel_disabled.png"], +#wan6_i img[src*="/luci-static/resources/icons/tunnel_disabled.png"], +img[src*="/luci-static/resources/icons/tunnel_disabled.png"] { + background-image: url(../images/tunnel_disabled.png); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} +.ifacebadge img[src*="/luci-static/resources/icons/tunnel_disabled.png"], +li img[src*="/luci-static/resources/icons/tunnel_disabled.png"] +{ + background-size: 16px 16px; + height: 16px; + width: 16px; + padding: 0 0 0 16px; +} +#__status-ifc-signal img[src*="/luci-static/resources/icons/tunnel_disabled.png"] +{ + background-size: 32px 32px!important; + height: 32px !important; + width: 32px!important; + padding: 0 0 0 32px!important; + width: 0; +} + +img[src*="/luci-static/resources/icons/wifi_big.png"] { + background-image: url(../images/wifi_big.png); + background-size: 64px 64px; + height: 64px; + padding: 0 0 0 64px; + width: 0; +} + +img[src*="/luci-static/resources/icons/wifi_big_disabled.png"] { + background-image: url(../images/wifi_big_disabled.png); + background-size: 64px 64px; + height: 64px; + padding: 0 0 0 64px; + width: 0; +} + +img[src*="/luci-static/resources/icons/loading.gif"] { + background-image: url(../images/loading.gif); + background-size: 32px 32px; + height: 32px; + width: 32px; + padding: 0 0 0 32px; + width: 0; +} + +.ifacebox-body img { + background-size: 20px 20px; + width:20px !important; + height:20px !important; + padding: 0 0 0 20px !important; +} +.ifacebox-head { + /* background-color: #337ab7 !important; */ + border-radius: 4px 4px 0 0; +} + + +img[src*="/luci-static/resources/cbi/add.gif"] { + background-image: url(../images/add.png); + background-size: 20px 20px; + height: 20px; + padding: 0 0 0 20px; + width: 0; + z-index: 2; + +} +img[src*="/luci-static/resources/cbi/remove.gif"] { + background-image: url(../images/remove.png); + background-size: 20px 20px; + height: 20px; + padding: 0 0 0 20px; + width: 0; + z-index: 2; +} + +img[src*="/luci-static/resources/cbi/reload.gif"] { + background-image: url(../images/reload.png); + background-size: 20px 20px; + height: 20px; + padding: 0 0 0 20px; + width: 0; + z-index: 2; +} + +img[src*="/luci-static/resources/icons/signal-75-100.png"] +{ + background-image: url(../images/signal-75-100.png); + image-rendering: pixelated; + background-size: 24px 24px; + height: 24px; + width: 24px; + padding: 0 0 0 24px; + z-index: 2; +} + +img[src*="/luci-static/resources/icons/signal-50-75.png"] +{ + background-image: url(../images/signal-50-75.png); + image-rendering: pixelated; + background-size: 24px 24px; + height: 24px; + width: 24px; + padding: 0 0 0 24px; + z-index: 2; +} + +img[src*="/luci-static/resources/icons/signal-25-50.png"] +{ + background-image: url(../images/signal-25-50.png); + image-rendering: pixelated; + background-size: 24px 24px; + height: 24px; + width: 24px; + padding: 0 0 0 24px; + z-index: 2; +} + +img[src*="/luci-static/resources/icons/signal-0-25.png"] +{ + background-image: url(../images/signal-0-25.png); + image-rendering: pixelated; + background-size: 24px 24px; + height: 24px; + width: 24px; + padding: 0 0 0 24px; + z-index: 2; +} + +img[src*="/luci-static/resources/icons/signal-0.png"] +{ + background-image: url(../images/signal-0.png); + image-rendering: pixelated; + background-size: 24px 24px; + height: 24px; + width: 24px; + padding: 0 0 0 24px; + z-index: 2; +} + +img[src*="/luci-static/resources/icons/signal-none.png"] +{ + background-image: url(../images/signal-none.png); + image-rendering: pixelated; + background-size: 24px 24px; + height: 24px; + width: 24px; + padding: 0 0 0 24px; + z-index: 2; +} + + +.myIcon{ + font-family: "design" !important; + font-style: normal !important; + font-variant: normal !important; + text-transform: none !important; +} + +.myIcon-logout:after{ + content: "\e005"; +} + +.myIcon-reboot:after{ + content: "\e02a"; +} + +.myIcon-wifi:after{ + content: "\e00c"; +} + +.main { + top: 50px; + bottom: 0rem; + position: relative; + height: 100%; + height: calc(100% - 4rem); +} + +.main > .loading { + position: fixed; + width: 100%; + height: 100%; + z-index: 1000; + display: block; + background-color: rgb(240, 240, 240); + top: 0; +} + +.main > .loading > span { + display: block; + text-align: center; + margin-top: 2rem; + color: #888; + font-size: 1rem; +} + +.main > .loading > span > .loading-img:before { + content: "\e603"; +} + +.main > .loading > span > .loading-img { + animation: anim-rotate 2s infinite linear; + margin-right: 0.2rem; + display: inline-block; +} + +/* fix Main Login*/ + +.node-main-login { + text-align: center; + background-color: var(--bgwhite) !important; +} +.node-main-login .cbi-section-node > .cbi-value:nth-of-type(2n) { + background: none; +} +.node-main-login h2 { + font-size: 1.5rem; +} + +.node-main-login header { + display: none; +} +.node-main-login > .main > .main-left { + display: none; +} + +.node-main-login > .main > .main-right { + width: 100%; +} + +.node-main-login > .main fieldset { + padding: 0px !important; + margin-bottom: 1rem; + display: inline; + background: none; + border: none; + box-shadow: none; + overflow: hidden; +} + +.node-main-login > .main fieldset .cbi-value-title { + display: none !important; +} + +.node-main-login > .main .cbi-section { + margin-top: 10px !important; +} + +.node-main-login > .main .cbi-map { +} + +.node-main-login > .main fieldset .cbi-value { +} + +.node-main-login > .main fieldset .cbi-value-title { + padding: 10px 0 10px 5px !important; +} + +.node-main-login > .main .cbi-value { + border: none; +} + +.node-main-login > .main .cbi-value-title { + width: 7rem; +} + +.node-main-login > .main #maincontent { + display: flex; + height: 100%; + text-align: center; + align-items: center; + align-content: center; + justify-content: center; +} + +/* .node-main-login > .main .container { + background-image: var(--logo); + background-repeat: no-repeat; + background-size: 300px auto; + width: 300px; + padding: 80px 0 0 0; +} */ + +.node-main-login > .main form > div:nth-last-child(1) { +} + +.node-main-login > .main .cbi-value > * { + display: inline-block !important; +} + +.node-main-login > .main .cbi-input-user, +.node-main-login > .main .cbi-input-password { + appearance: none; + outline: 0; + padding: 0 0 0 35px; + background-repeat: no-repeat; + background-position: 10px 10px; + background-size: 18px 18px; + min-width: 15rem; +} + +.node-main-login > .main .cbi-input-user { + background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="24" height="24" viewBox="0 0 24 24"%3E%3Cpath fill="%23627386" d="M12 4a4 4 0 0 1 4 4a4 4 0 0 1-4 4a4 4 0 0 1-4-4a4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"%2F%3E%3C%2Fsvg%3E'); +} +.node-main-login > .main .cbi-input-password { + background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="24" height="24" viewBox="0 0 24 24"%3E%3Cpath fill="%23627386" d="M12 17a2 2 0 0 0 2-2a2 2 0 0 0-2-2a2 2 0 0 0-2 2a2 2 0 0 0 2 2m6-9a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V10a2 2 0 0 1 2-2h1V6a5 5 0 0 1 5-5a5 5 0 0 1 5 5v2h1m-6-5a3 3 0 0 0-3 3v2h6V6a3 3 0 0 0-3-3Z"%2F%3E%3C%2Fsvg%3E'); +} +.node-main-login footer { + bottom: 0; + position: absolute; + width: 100%; +} + +.navbar { + overflow: hidden; + position: fixed; + bottom: 0; + width: 100%; + border-top: var(--navBorder); + text-align: center; + height:calc(50px + constant(safe-area-inset-bottom)); + height:calc(50px + env(safe-area-inset-bottom)); + background-color: var(--navbgColor); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); +} + +.navbar a { + float: left; + text-align: center; + padding: 8px 0; + width: 20%; + text-decoration: none; + max-width: 100px; +} + +.cbi-map { + margin-top: 10px; +} + +#cbi-shadowsocksr .cbi-map-descr { + display: none; +} + +.navbar a img { + width: 28px; +} + +@keyframes anim-rotate { + 0% { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg) + } +} + + +.main-left { + float: left; + width: 18rem; + background-color: var(--mainleftbgColor); + overflow-x: auto; + height: calc(100% - 3.5rem); + position: fixed; + padding-top: 15px; + box-shadow: 0 0px 4px rgb(0 0 0 / 8%); + transition: visibility 100ms, width 100ms; +} + +.main-right { + width: 85%; + width: calc(100% - 18rem); + float: right; + height: 100%; + border-left: var(--sectionBorder); +} + +.main-right > #maincontent { +} + +.pull-right { + position: absolute; + top: -2px; + right: 30px; + cursor: pointer; +} + +.pull-left { + float: left; +} + + +header > .container { +margin:0; +padding:0; +} + +header > .container > .brand { + font-size: 25px; + font-family: "GenJyuuGothic-Medium"; + /*font-weight:bold;*/ + line-height:60px; + /*color: white;*/ + color: var(--logo_color); + cursor: default; + /*background: #51c291;*/ + display:block; + width:18rem; + /* padding-left: 30px; */ + height:60px; + text-align:center; + float:left; + font-weight:900; + letter-spacing:1px; + padding: 0 4.5rem; + transition: 0.1s ease-in-out; + position: absolute; +} +header > .container > a[class="brand"]:after { + content:""; + font-size:14px; + font-family:Tahoma; + position: absolute; + top:-10px; + font-weight:normal !important; +} + +header > .container > .brand-hostname { + font-size: 14px; + line-height:60px; + color: #555555; + cursor: default; + display:block; + width:18rem; + padding-right: 10px; + height:60px; + text-align:left; + float:left; + margin-top: 7px; + font-weight:300; + margin-left: -15px; +} + +.warning { + background-color: #FF7D60 !important; + color: #FFF; +} + +.errorbox, +.alert-message { + margin: 0 0 10px 0; + padding: 20px; + line-height: 1.5; + font-family: inherit; + min-width: inherit; + overflow: auto; + border-radius: 10px; + color: var(--alertColor); + background-color: var(--alertBackground); +} + +.errorbox { + color: #fff; + background-color: #ff6767; + border-radius: 10px; +} + +.error { + color: red; +} +p#shadowsocksr_status { + padding: 3px; +} + + +#maincontent > .container > div:nth-child(1).alert-message.warning > a { + font: inherit; + overflow: visible; + text-transform: none; + display: inline-block; + margin-bottom: 0; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + min-width: 6rem; + padding: 0.5rem 1rem; + font-size: 14px; + line-height: 1.42857143; + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; + margin-top: 2rem; + text-decoration: inherit; +} + +.main > .main-left > .nav { + overflow-y: visible !important; + font-size: 1rem; + width: 90%; + margin: auto; + margin-bottom: 90px; +} + +.main > .main-left > .nav > li a { + color: var(--activeColor); + display: block; + border-radius: 6px; + cursor: pointer; + font-weight: bold; + font-size: 1.1rem; + transition: all 0.1s; +} + +/* +.main > .main-left > .nav > li:nth-last-child(1) { + font-size: 11pt; + height:40px; + padding-top:6px; +} +*/ + +.main > .main-left > .nav > li { + cursor: pointer; + padding-top:6px; +} + +.main > .main-left > .nav > .slide { + padding: 0; + padding-top:8px; +} + +.main > .main-left > .nav > .slide > a:before { + display: inline-block; + left:-10px; + top: 1px; + position: relative; + font-family: "design" !important; + font-weight: bold !important; + text-transform: none !important; + speak: none; + font-size: 1.2rem !important; + -webkit-font-smoothing: antialiased; +} + +.main > .main-left > .nav > .slide > .menu::after { + right: 0.5rem; + top: 0.8rem; + font-family: "design" !important; + font-style: normal !important; + font-variant: normal !important; + content: "\eb03"; + float: right; + padding-right: 5px; + line-height: 1.6; + /* Better Font Rendering =========== */ + -moz-osx-font-smoothing: grayscale; + transition: all 0.1s ease; + text-rendering: auto; + -webkit-font-smoothing: antialiased; +} + +.main .main-left .nav li.slide .menu.active::after { + transform: rotate(90deg); +} + +.main > .main-left > .nav > .slide > a[data-title="Status"]:before { + content: "\e6b8"; +} + +.main > .main-left > .nav > .slide > a[data-title="System"]:before { + content: "\e645"; +} + +.main>.main-left>.nav>.slide>a[data-title=Modem]:before { + content: "\e67e" +} + +.main > .main-left > .nav > .slide > a[data-title="Services"]:before { + content: "\e6cb"; +} + +.main > .main-left > .nav > .slide > a[data-title="Docker"]:before { + content: "\44"; +} + +.main > .main-left > .nav > .slide > a[data-title="NAS"]:before { + content: "\eb04"; +} + +.main > .main-left > .nav > .slide > a[data-title="VPN"]:before { + content: "\56"; +} + +.main > .main-left > .nav > .slide > a[data-title="Network"]:before { + content: "\72"; +} + +.main > .main-left > .nav > .slide > a[data-title="Bandwidth Monitor"]:before { + content: "\e764"; +} +.main .main-left .nav li.slide .menu[data-title="Statistics"]:before { + content: "\e604"; +} + +.main .main-left .nav li.slide .menu[data-title="Control"]:before { + content: "\e67a"; +} + +.main .main-left .nav li.slide .menu[data-title="Asterisk"]:before { + content: "\e7dd"; +} + +.main > .main-left > .nav > .slide > a[data-title="QuickStart"]:before, +.main > .main-left > .nav > li > a[data-title="Inital Setup"]:before, +.main > .main-left > .nav > li > a[data-title="NetworkGuide"]:before, +.main > .main-left > .nav > li > a[href="/cgi-bin/luci//admin/wizard"]:before { + content: "\e719"; +} + +.main > .main-left > .nav > li > a[data-title="iStore"]:before { + content: "\e676"; +} + + +.main > .main-left > .nav > li > a[data-title="Logout"] { + padding: 0.675rem 0 0.675rem 2.5rem; +} + +.main > .main-left > .nav > li > a[data-title="Logout"]:before { + content: "\e641"; +} + +.main > .main-left > .nav > li > a[data-title="Reboot"] { + padding: 6px 25px; +} +.main > .main-left > .nav > li > a[data-title="Reboot"]:before { + content: "\e004"; +} + +.main > .main-left > .nav > .slide > ul { + display: none; + list-style:dotted; +} + +.main > .main-left > .nav > .slide > .menu { + display: block; + padding: 0.675rem 0 0.675rem 2.5rem; + text-decoration: none; + cursor: pointer;; +} + +.main > .main-left > .nav > .slide > .menu2 { + display: block; + padding: 0.675rem 0 0.675rem 2.5rem; + text-decoration: none; + cursor: pointer;; +} +.main > .main-left > .nav > li:hover, +.main > .main-left > .nav > .slide > .menu:hover { + background: var(--activeColor); + color:white; +} +.main > .main-left > .nav > .slide > .menu2:hover { + background: var(--activeColor); + color:white; +} + +.main > .main-left > .nav > .slide:hover { + background: none; +} +.slide-menu { + overflow:hidden; + } +.main > .main-left > .nav > .slide > .slide-menu > li { + margin-top: 8px; + border-radius: 6px; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active { + background-color: var(--activeColor); +} + +.main > .main-left > .nav > .slide > .slide-menu > li > a { + position: relative; + display: block; + color: var(--textColor); + vertical-align: middle; + background:none !important; + border: none !important; + text-transform: capitalize; + font-size: 1rem; + margin: 0.1rem 0.5rem 0.1rem 0.5rem; + padding: 0.675rem 0 0.675rem 3.2rem; +} +.main .main-left .nav li.slide .slide-menu .active a { + color: #000; + } + +.main > .main-left > .nav > .slide > .slide-menu > li > a:hover { + color:white; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active > a { + color: white; +} + +.main > .main-left > .nav > .slide > .slide-menu > li:hover { + background: var(--activeColor); + color:white !important; + transition: all 0.1s; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active:hover { + background-color: var(--activeColor); + cursor: pointer; +} + +.cbi-tab-descr { + padding:10px; +} + +li { + list-style-type: none; +} + +#maincontent > .container { + margin:30px 30px 50px 30px; +} + +h1 { + color: var(--activeColor); + font-size: 20px; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +h2 { + color: var(--activeColor); + padding: 0 12px 6px 12px; + text-transform: capitalize; +} + +h3 { + font-size: 1.2rem; + color: var(--activeColor); + font-weight:bold; + padding: 0 12px 10px 12px; +} + +h4 { + +} + +label { + display: inline-block; + vertical-align: middle; +} +fieldset { + /* margin: 10px 0 0 0; */ + padding: 10px; + border: 1px; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + text-align: left; + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + background-color: var(--sectionbgColor); + /* box-shadow: var(--sectionShaddow); */ + -webkit-overflow-scrolling: touch; +} + +fieldset > legend { + display: none !important; +} + +fieldset > fieldset { + /* margin: 0; */ + padding: 0; + /* border: none; */ + /* box-shadow: none; */ +} + +.panel-title { + width: 100%; + display: block; + padding: 10px; + font-weight: bold; + font-size: 1rem; +} + +table { + border-spacing: 0; + border-collapse: collapse; + width: 100%; + border: 0px solid #eee !important; + margin: 0 !important; +} + +strong { + font-weight: bold; + padding: 2px; +} + +#lb_load01_cur, +#lb_load01_peak, +#lb_load05_cur, +#lb_load15_cur{ + text-align:right !important; +} + +#lb_load01_peak { + text-align:left !important; + } +#lb_load01_cur { + +} + +table > tbody > tr > td, table > tbody > tr > th, table > tfoot > tr > td, table > tfoot > tr > th, table > thead > tr > td, table > thead > tr > th { + padding: 12px; + white-space: nowrap; + line-height:1.5; + vertical-align: middle !important; +} + +.node-services-appfilter table > tbody > tr > th, +.node-services-appfilter table > tbody > tr > td, +.node-nlbw-usage table > tbody > tr > th, +.node-nlbw-usage table > tbody > tr > td { + text-align: center; +} + + +table > tbody > tr { + border-bottom: var(--cbilineColor) !important; +} + +table > tbody > tr:last-child { + border-bottom: none !important; +} + +.cbi-section-table-cell { + text-align: center; +} + +.cbi-section-table-row { + text-align: center; +} + +.cbi-section-remove{ + margin-bottom: 2px; +} +.cbi-section-remove > input { + background-color: #cc0066; +} +fieldset > table > tbody > tr:nth-of-type(odd) { + background-color: var(--sectionbgColor2); +} + +/* fixed DHCPv6 lease table host names incorrectly displayed */ +#lease6_status_table > tbody > .cbi-section-table-row.cbi-rowstyle-1 div, +#lease6_status_table > tbody > .cbi-section-table-row.cbi-rowstyle-2 div{ + min-width:100%; +} + +/* fix status overview */ +.node-status-overview > .main fieldset:nth-child(6) td:nth-child(2), +.node-status-overview table[id="wifi_status_table"] > tbody > tr > td { + white-space: normal; +} + +/* fix progress bar */ +#swaptotal > div, +#swapfree > div, +#swapcache > div, +#memfree > div, +#membuff > div, +#conns > div, +#memcache > div, +#memtotal > div { + width: 100% !important; + border-color: var(--progressbarColor) !important; + background-color:var(--progressbarColor) !important; + border-radius: 3px; +} + +#swaptotal > div > div, +#swapfree > div > div, +#swapcache > div > div, +#memfree > div > div, +#membuff > div > div, +#conns > div > div, +#memcache > div > div, +#memtotal > div > div { + background-color: var(--progressbar) !important; + color: var(--progressbartxtColor) !important; + border-radius: 3px; +} + +#swaptotal div div, +#swapfree div div, +#swapcache div div, +#memfree div div, +#membuff div div, +#conns div div, +#memcache div div, +#memtotal div div { + align-items: center; + align-content: center; + justify-content: center; + display: flex; +} + +#swaptotal div div small, +#swapfree div div small, +#swapcache div div small, +#memfree div div small, +#membuff div div small, +#conns div div small, +#memcache div div small, +#memtotal div div small{ + font-size: 0.75rem !important; + line-height: 130%; + color: var(--progressbartxtColor) !important; +} + +.cbi-value-field { + width: 65%; +} +/* fix node-system-admin */ +.node-system-admin .cbi-value-field li div { + padding: 0 !important; +} + +.node-system-admin em { + padding: 0 !important; +} + +/* fix node-nlbw-display */ +.node-nlbw-display hr { + display: none; +} + +.node-nlbw-display p { + line-height: 1.5; + padding: 0 10px 5px 10px; +} + + +/* fix node-network-network */ + +/* #cbi-network-lan-__status table { + width: auto; +} + +#cbi-network-lan-__status table td { + width: 0; + padding: 0; + +} +#cbi-network-lan-__status table td small { + font-size: 11px; + white-space: nowrap; +} */ + +/* node-network-network ul list overflow */ +#cbi-network .cbi-value-field ul, +#cbi-wireless .cbi-value-field ul, +#cbi-firewall .cbi-value-field ul { + overflow-x: auto; + white-space: nowrap; +} + +#cbi-network .cbi-value-field ul input[type="text"], +#cbi-wireless .cbi-value-field ul input[type="text"], +#cbi-firewall .cbi-value-field ul input[type="text"] { + max-width: 10rem; + width: 100% !important; +} + +div [id*="cbi-network-"] [id*="-__status"] table, +div [id*="cbi-wireless"] [id*="-__status"] table { + width: auto; +} + +div [id*="cbi-network-"] [id*="-__status"] table td, +div [id*="cbi-wireless"] [id*="-__status"] table td { + width: auto; + padding: 0 !important; +} +div [id*="cbi-network-"] [id*="-__status"] table td small, +div [id*="cbi-wireless"] [id*="-__status"] table td small { + width: auto; +} + +/* adapt to mt798x series closed source wireless driver page */ +/* open source wireless style */ +.node-network-wifi .cbi-section-table tr .cbi-value-field, +.node-network-wireless .cbi-section-table tr .cbi-value-field { + width: unset !important; + text-align: right; +} +.node-network-wireless #iw-assoclist .cbi-section-table-row td[colspan="6"], +.node-network-wireless .cbi-section-table .cbi-section-table-row td[colspan="6"], +.node-network-wifi .cbi-section-table .cbi-section-table-row td[colspan="8"] { + text-align: center !important; +} +.node-network-wireless #iw-assoclist .cbi-section-table-row td div { + max-width: unset !important; +} +.node-network-wifi table, td, th { + border-top: unset !important; +} +.node-network-wifi .cbi-section-table td[colspan="2"] { + padding-left: unset !important +} + +/* fix node-status-routes */ +.node-status-routes .cbi-section-node{ + max-height: 500px; + overflow-y: auto; + overflow-x: auto; +} + +/* fix multiple table */ +table table { + border: none; +} + +.cbi-value-field table { + border: none; +} +.cbi-value-field label { + padding: 0 ; +} +td > table > tbody > tr > td { + border: none; +} + +.cbi-value-field > table > tbody > tr > td { + border: none; +} + +#container\.nlbw\.traffic th, +#container\.nlbw\.traffic td, +#container\.nlbw\.layer7 th, +#container\.nlbw\.layer7 td, +#container\.nlbw\.ipv6 th, +#container\.nlbw\.ipv6 td, +#container\.nlbw\.export th, +#container\.nlbw\.export td { + padding: 12px !important; + border-top: none; + border: unset; + text-align: center; + /* border-left: #ccc 1px solid; + border-right: #ccc 1px solid; + border-bottom: #ccc 1px solid; */ + } + + #container\.nlbw\.traffic tr td:nth-child(4), + #container\.nlbw\.layer7 tr td:nth-child(3), + #container\.nlbw\.ipv6 tr td:nth-child(4), + #container\.nlbw\.export tr td:nth-child(4), + #container\.nlbw\.traffic tr td:nth-child(6), + #container\.nlbw\.layer7 tr td:nth-child(5), + #container\.nlbw\.ipv6 tr td:nth-child(6), + #container\.nlbw\.export tr td:nth-child(6) { + text-align: right !important; +} + + #container\.nlbw\.traffic tr td:nth-child(5), + #container\.nlbw\.layer7 tr td:nth-child(4), + #container\.nlbw\.ipv6 tr td:nth-child(5), + #container\.nlbw\.export tr td:nth-child(5), + #container\.nlbw\.traffic tr td:nth-child(7), + #container\.nlbw\.layer7 tr td:nth-child(6), + #container\.nlbw\.ipv6 tr td:nth-child(7), + #container\.nlbw\.export tr td:nth-child(7){ + text-align: left !important; +} + +td#__status-ifc-signal { + width: 60px !important; +} + +/* button style */ + +.cbi-button { + -webkit-appearance: none; + text-transform: uppercase; + color: #fff; + background-color: #337ab7; + transition: all 0.1s ease-in-out; + display: inline-block; + border: none; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + width: auto !important; + min-width: 80px; + padding: 0px 8px 0px 8px; + /* max-width: 160px; */ + border-radius: var(--commonRadius0); + height: 35px; + line-height: 35px; +} + +.cbi-button:hover, +.cbi-button:focus, +.cbi-button:active { + color: #fff; + outline: 0; + text-decoration: none; + background-color: rgb(106,101,214); +} + +.cbi-button:hover, +.cbi-button:focus { + box-shadow: 0 1px 1px rgba(0,0,0,.05); +} + +.cbi-button:active { + box-shadow: 0 1px 1px rgba(0,0,0,.05); +} + +.cbi-button:disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +form.inline + form.inline, +.cbi-button + .cbi-button { +} + +.cbi-button-reset, +.cbi-input-remove { + color: #fff !important; + background-color: #617486 !important; +} + +.cbi-button-reset:hover, +.cbi-input-remove:hover, +.cbi-button-remove:hover{ + color: #fff !important; + background-color: rgb(83,100,115) !important; +} + +.cbi-button-link, +.cbi-input-find, +.cbi-input-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-find, +.cbi-input-reload, +.cbi-button-reload { + color: var(--bttextColor); + background-color: #337ab7 !important; + border-color: #337ab7 !important; +} + +.cbi-button-link:hover, +.cbi-input-find:hover, +.cbi-input-save:hover, +.cbi-button-add:hover, +.cbi-button-save:hover, +.cbi-button-find:hover, +.cbi-input-reload:hover, +.cbi-button-reload:hover{ + color: #fff !important; + background-color: #6A82AE!important; + border-color: #6A82AE !important; +} + + +.cbi-input-apply, +.cbi-button-apply, +.cbi-button-edit { + color: #fff !important; + background-color: var(--activeColor); +} + +.cbi-input-reset, +.cbi-button-remove { + color: #fff !important; + background: #617486; +} + + +.a-to-btn { + text-decoration: none; +} + +/* table */ +.tabs { + margin: 15px 0; + overflow-x: auto; +} + +.cbi-tabmenu > li, +.tabs > li { + display: table-cell; +} + +.cbi-tabmenu > li { + border-radius: var(--tabmenuRadius); +} + +.tabs > li > a { + text-decoration: none; + padding: 0 6px 0 6px; + float: left; + display: block; + white-space: nowrap; + height: 2.5rem; + line-height: 2.5rem; + font-size: 0.92rem; +} + +.cbi-tabmenu > li > a { + text-decoration: none; + float: left; + display: block; + white-space: nowrap; + height: 2.5rem; + line-height: 2.5rem; + font-size: 0.92rem; + margin: 0 10px; +} + +.tabs > li[class~="active"], +.tabs > li:hover{ + cursor: pointer; + +} + +.tabs > li[class~="active"] > a { + color: var(--activeColor) !important; + padding-bottom: 8px; + border-bottom: var(--activeColor) 2px solid; +} + +.tabs > li:hover { + /*border-bottom: 0.18751rem solid rgb(133,129,216);*/ +} + +.cbi-tabmenu { + border-top: var(--sectiontabBorder); + border-left: var(--tabmenuBorderLR); + border-right: var(--tabmenuBorderLR); + border-bottom: var(--tabmenuBottom); + background-color: var(--tabmenubgColor); + width: 100%; + overflow-x: auto; + margin-top: 5px; + margin-bottom: 10px; +} + +.cbi-tabmenu > li:hover { + background-color: none; +} + +.cbi-tabmenu > li[class~="cbi-tab"] { + background-color: none; +} + +.cbi-tabmenu > li[class~="cbi-tab"] a { + color: var(--activeColor) !important; + border-bottom: 2px solid var(--activeColor) !important; +} + +.cbi-section-node-tabbed { + margin-top: 0; + border-bottom: var(--sectiontabBorder); + border-left: var(--sectiontabBorder); + border-right: var(--sectiontabBorder); + border-radius: 0 0; +} + + +.cbi-tabcontainer { + clear:both; +} +.cbi-tabcontainer > .cbi-value:nth-of-type(2n) { + background-color: var(--sectionbgColor2); +} + +.cbi-section-node > .cbi-value:nth-of-type(2n) { + background-color: var(--sectionbgColor2); +} +div > .cbi-value:nth-of-type(2n) { + background-color: var(--sectionbgColor2); +} + +.cbi-value-field, +.cbi-value-description { + display: table-cell; +} + +.cbi-value-field { + /* padding: 10px 10px 10px 0; */ +} + +.cbi-value-helpicon > img { + display: none; +} + +.cbi-value-helpicon:before { + content: "\f059"; +} + +.cbi-value-description { + opacity: 0.6; + padding-left: 4px; +} + +.cbi-value-title { + word-wrap: break-word; + display: table-cell; + width: 35%; + float: left; + padding: 13px 10px 5px 3px; +} + +.cbi-value { + display: flex; + width: 100%; + align-items: center; + align-content: center; + justify-content: flex-start; + min-height: 40px; + padding: 8px 10px; + flex-flow:row wrap; + border-bottom: var(--cbilineColor); +} + +.cbi-value:last-child { + border-bottom: none; +} + +.cbi-value strong { + font-weight: normal; +} + +.cbi-section-table-descr > .cbi-section-table-cell, +.cbi-section-table-titles > .cbi-section-table-cell { + border: none; +} + +.cbi-rowstyle-2 { + background-color: var(--sectionbgColor2); +} + +.cbi-rowstyle-2 .cbi-button-up, +.cbi-rowstyle-2 .cbi-button-down{ +} + +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + width: auto !important; +} +.cbi-section-table tr .cbi-value-field { + text-align: center ; + width: 20% !important; + padding: 10px !important; +} +.cbi-section-table tr .cbi-value-field input { + width: auto; +} +.cbi-section-table tr .cbi-value-field .ifacebox { + margin: auto; + width: fit-content; + min-width: 60px; +} + +/* desc */ +.cbi-section-descr { + padding: 3px 10px; +} + +.cbi-map-descr { + padding: 5px 5px 5px 12px; +} + +.cbi-map-descr h3 { + font-size: 0.92rem; + font-weight: normal; + color: #666; +} + +#cbi-vsftpd .cbi-map-descr { + color: var(--activeColor); + padding: 0 12px 0px 12px; + font-size: 1.2rem; + font-weight: bold; +} + + +/* luci */ + +.hidden { + display: none +} + +.left { + text-align: left !important; +} + +.right { + text-align: right !important; +} + +.right .cbi-button { + height: 20px; + line-height: 20px; + min-width: 60px; + /* padding: 0; */ + margin: 0; +} + +.inline { + display: inline; +} + +.cbi-page-actions { + text-align: center; +} + +/* input */ +.cbi-value input[type="password"], +.cbi-value input[type="text"] { + +} + +/* select */ + + +.ifacebadge { + display: inline-flex; + padding: 5px; + background-color: var(--badgebgColor); + align-content: center; + align-items: center; + border-radius: var(--commonRadius1); + border: var(--badgeBorder); + color: #666666 +} + +#content_syslog { + padding: 5px; + margin-top:10px; + border-radius: 10px; + background-color: var(--sectionbgColor); + box-shadow: 3px 3px 3px rgb(0 0 0 / 5%); +} + +.ifacebadge > img { + float: right; + margin-left: 0.3rem; +} + +img.cbi-image-button { + vertical-align: middle; + +} + +fieldset.cbi-section{ + border: var(--sectionBorder); + margin-bottom: 20px; + border-radius: 10px; + margin-top: 5px; +} + +/*textarea*/ + +.cbi-input-textarea, textarea { + color: var(--inputtextColor); + padding: 10px; + line-height: normal; + border: var(--sectionBorder); + background-color: var(--inputbgColor); + transition: color 150ms ease, border-color 150ms ease, opacity 150ms ease; + -webkit-transition: color 150ms ease, border-color 150ms ease, opacity 150ms ease; + outline-style: none; + vertical-align: baseline; + border-radius: 10px; + font-family: Menlo, Mono; + font-size: 0.9rem; + white-space: pre; + margin-bottom: 5px; +} + +#syslog { + width: 100%; + min-height: 15rem; + padding: 10px; + margin-bottom: 20px; + border-radius: 0; + background-color: var(--sectionbgColor); + border: none; +} + +/* change */ +#wan4_i, #wan6_i { +width:50px !important; +} + +.uci-change-list { + font-family: monospace; +} + +.uci-change-list *:first-child { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} + +.uci-change-list *:nth-last-child(2) { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + text-decoration: none; + border: 1px solid #00FF00; + background-color: #CCFFCC; + display: block; + padding: 2px; + color: black; + overflow-x: auto; +} +.uci-change-legend .uci-change-legend-label ins { + overflow-x: unset; + border-radius: var(--commonRadius1); +} + +.uci-change-list del, +.uci-change-legend-label del { + text-decoration: none; + border: 1px solid #FF0000; + background-color: #FFCCCC; + display: block; + font-style: normal; + padding: 2px; + color:black; + overflow-x: auto; +} +.uci-change-legend .uci-change-legend-label del { + overflow-x: unset; + border-radius: var(--commonRadius1); +} + +.uci-change-list var, +.uci-change-legend-label var { + text-decoration: none; + border: 1px solid #CCCCCC; + background-color: #EEEEEE; + display: block; + font-style: normal; + padding: 2px; + color:black; + + overflow-x: auto; +} +.uci-change-legend .uci-change-legend-label var { + overflow-x: unset; + border-radius: var(--commonRadius1); +} + +.uci-change-list var ins, +.uci-change-list var del { + border: none; + white-space: pre; + font-style: normal; + padding: 0px; + color:black; + /* border-radius: var(--commonRadius1); */ + overflow-x: auto; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + width: 150px; + float: left; + display: flex; + /* align-content: center; */ + align-items: center; +} + +.uci-change-legend-label > ins, +.uci-change-legend-label > del, +.uci-change-legend-label > var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + border: none; + height: 10px; + width: 10px; +} + +.uci-change-list var, +.uci-change-list del, +.uci-change-list ins { + padding: 0.5rem; +} + +/* other fix */ +#iwsvg, +#iwsvg2, +#bwsvg { + border: var(--sectionBorder) !important; + font-family: -apple-system; + background: none !important; +} + +.ifacebox { + border: var(--ifaceboxBorderColor) 1px solid; + border-radius: var(--commonRadius1); + font-size:0.92rem; + font-weight:normal; +} +.ifacebox-head { + color:#fff; +} +.ifacebox-body small { + font-size:0.8rem !important; + padding: 5px +} + +.ifacebox-body strong { + color:#f7f7f7; + font-size: 0px !important; +} + +.cbi-image-button { + +} + + +.zonebadge > .ifacebadge { + padding: 3px 5px; + margin: 5px; +} + +.zonebadge > input[type="text"] { + padding: 0.16rem 1rem; + min-width: 10rem; + margin-top: 0.3rem; +} + +.cbi-value-field .cbi-input-checkbox, +.cbi-value-field .cbi-input-radio { + vertical-align: middle; +} + +.cbi-section-table-row > .cbi-value-field .cbi-input-select { + min-width: 7rem; +} + +.cbi-section-create { + padding: 0 10px; +} +.cbi-section-create > .cbi-button-add { + margin: 10px 0 10px 0 +} + +div.cbi-value var, td.cbi-value-field var { + font-style: italic; + color: #0069D6; +} + +small { + font-size: small; + font-weight: normal !important; + white-space: normal; +} + +.cbi-button-up, +.cbi-button-down { + display: inline-block; + min-width: 0; + font-size: 0.9rem; +} + +.cbi-optionals { + padding: 1rem 1rem 0 1rem; + border-top: 1px solid #CCC; +} + +#diag-rc-output > pre { + display: block; + padding: 10px; + line-height: 1.5rem; + -moz-border-radius: 3px; + white-space: pre-wrap; + word-wrap: break-word; + color: #76838f; +} + +input[name="ping"], +input[name="traceroute"], +input[name="nslookup"] { + width: 80%; +} + +table.cbi-section-table select { + width: auto !important; +} + +header > .container > .pull-right > * { + +} + +#xhr_poll_status > .label.success { + padding: 0.7rem 0; + border-radius: 20px; +} + +#xhr_poll_status_off { + padding: 0.7rem 0; + border-radius: 20px; +} + +.label { + padding: 0 3px 0 3px; + white-space: nowrap; + border-radius: 3px; + position: absolute; + right: 5px; + top: 15px; + line-height: 150%; +} + +.notice { + color: var(--activeColor); + font-size: .8rem; + /* padding: 0.15rem; */ + padding-right: 0.5rem; + border-radius: 10px; + z-index: 10; + /* top: 1.45rem; */ + font-size: 1.8rem; + font-family: design; +} + +#refresh_on, #refresh_off { + font-size: 1.5rem; + font-family: design; +} + +#refresh_on { + color: var(--activeColor); +} +#refresh_off { + color: var(--progressbarColor); +} + +.darkMask { + width: 100%; + height: 100%; + position: fixed; + background-color: rgba(0, 0, 0, 0.56); + content: ""; + z-index: 99; + display: none; +} + +/* fix node-services-shadowsocksr */ + +.node-services-shadowsocksr .cbi-input-textarea, +.node-nlbw-config .cbi-input-textarea { + /* margin: 10px; */ +} + +.node-services-shadowsocksr #cbi-logview .cbi-section { + padding: 0; +} + +/* fix node-network-diagnostics */ +.node-network-diagnostics .cbi-section { + border-radius: 10px; +} + +/* fix status processes */ +.node-status-processes > .main table tr td:nth-child(3) { + white-space: normal; +} + +.cbi-map fieldset h3 { + } + +.cbi-map fieldset ul li { + margin-right:0 !important; +} +/* fix system reboot */ + +.node-system-reboot > .main > .main-right p, +.node-system-reboot > .main > .main-right h3 { + margin-left: 12px; +} + +.node-system-reboot #maincontent { +} + +/* fix Services Network Shares*/ +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-title { + margin-bottom: 1rem; +} + +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-field { + display: list-item; +} + +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-description { + padding-top: 1rem; + line-height:150%; +} + +/* fix System Software*/ +.node-system-packages > .main table tr td:nth-child(1) { + width: auto !important; +} + +.node-system-packages .cbi-section-node .cbi-value-last { + /* padding: 8px 12px; */ +} + +.node-system-packages .cbi-section-node .cbi-value-last > div { + border: none !important; + border-radius: 3px; +} + +.node-system-packages .cbi-section-node .cbi-value-last > div > div { + border: none !important; + border-radius: 3px; +} + +.node-system-packages .cbi-section-node .cbi-value-last:nth-last-child(1) { + padding: auto; +} + +.node-system-packages > .main table tr td:nth-last-child(1) { + white-space: normal; + font-size: small; + color: #76838f; +} + +.node-system-packages > .main .cbi-value > pre { + /* background-color: var(--inputbgColor); */ + padding: 10px; + overflow: auto; + /* border: var(--inputBorder); */ + border-radius: 10px; +} + +.node-system-packages #cbi-distfeedconf .cbi-section, +.node-system-packages #cbi-customfeedconf .cbi-section { + border-radius: 10px; +} + +.node-system-packages .cbi-value-field { + width: 58%; +} + +#container\.nlbw\.traffic, #container\.nlbw\.layer7, #container\.nlbw\.ipv6, #container\.nlbw\.export { + margin-top: 0; + margin-top: 0; + padding: 10px; + text-align: center; + border-bottom: var(--sectionBorder); + border-left: var(--sectionBorder); + border-right: var(--sectionBorder); + background-color: var(--sectionbgColor); + border-radius: 10px; +} + +#container\.nlbw\.export ul li { + + padding: 5px; + width: 150px; + margin: 10px; + border-radius: var(--commonRadius1); + border: #ccc 1px solid; + +} + +.cbi-tabmenu + .cbi-section ul { + text-align: left; +} + +/* fix network firewall*/ +.node-network-firewall > .main .cbi-section-table-row > .cbi-value-field .cbi-input-select { + min-width: 4rem; +} + +.node-status-iptables > .main div > .cbi-map > form { + position: static !important; + margin: 10px 0 20px 0; + padding: 12px; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + box-shadow: 3px 3px 3px rgb(0 0 0 / 5%); + border-radius: 10px; + background-color: var(--bgwhite); + -webkit-overflow-scrolling: touch; +} + + + +/** fix system packages +.node-system-packages .cbi-section { + border-radius: 0 0 10px 10px; +} + + +#cbi-ipkgconf .cbi-section { + border-radius: 0 0 10px 10px; +} + +**/ + + +.node-system-flashops fieldset fieldset { + border: none; +} +.node-system-flashops br { + display: none; +} + +.node-system-flashops .cbi-section { + /* padding: 0; */ +} +.node-system-flashops .cbi-section-descr { + padding: 12px; + line-height: 1.5; + border-radius: 6px; + /* border: var(--sectiontabBorder); + background-color: var(--sectionbgColor2); */ +} + + +.node-status-iptables .cbi-tabmenu, +.node-system-packages .cbi-tabmenu, +.node-system-flashops .cbi-tabmenu { + /* border: none; **/ +} + +#cbi-firewall-redirect .cbi-section-table-titles .cbi-section-table-cell { + text-align: left; +} + +#cbi-firewall-redirect table *, +#cbi-network-switch_vlan table *, +#cbi-firewall-zone table *{ + font-size: small; +} + +#cbi-firewall-redirect table input[type="text"], +#cbi-network-switch_vlan table input[type="text"], +#cbi-firewall-zone table input[type="text"]{ + width: 5rem; +} + +#cbi-firewall-redirect table select, +#cbi-network-switch_vlan table select, +#cbi-firewall-zone table select{ + min-width: 3.5rem; +} + +/** fix node-status-realtime **/ +.node-status-realtime table > tbody > tr > td { + text-align: left !important; + padding: 10px 3px 10px 3px; +} +.node-status-realtime table[id=connections] > tbody > tr > td { + padding: 10px 3px 10px 3px; + text-align: center !important; +} + +.node-status-realtime table { + table-layout: auto !important; +} +/* fix node-status-realtime connections */ +.node-status-realtime fieldset[id="cbi-table-table"] { + background-color: unset !important; +} +.node-status-realtime fieldset[id="cbi-table-table"] > table > tbody > tr:nth-of-type(odd), +.node-status-realtime fieldset[id="cbi-table-table"] table[id="connections"] tr.cbi-section-table-row.cbi-rowstyle-2 { + background-color: unset; +} +/* fix luci-app-appfilter table overflow style */ +/* fix node-nas-fileassistant table overflow style */ +/* fix node-status-realtime table style */ +.node-services-appfilter .cbi-section.cbi-tblsection, +.node-nas-fileassistant #list-content, +.node-status-realtime fieldset[id="cbi-table-table"] .cbi-section-node { + overflow: auto; +} + +select#cbi\.combobox\.cbid\.shadowsocksr\.cfg013fd6\.tunnel_forward { + overflow: hidden; + +} + +/* language fix */ +body.lang_pl.node-main-login .cbi-value-title { + width: 12rem; +} + +/* fix nlbw component */ +#detail-bubble { + /* left: unset !important; */ + width: unset!important; +} +#detail-bubble.in { + color: #000; + padding-bottom: calc(60px + env(safe-area-inset-bottom)); + left: 19rem !important; + width: calc(100vw - 21.25rem)!important; +} +#detail-bubble .head { + display: block; + overflow: auto; +} +#detail-bubble #bubble-table { + display: inline-table; + overflow: auto; +} + +@media screen and (max-width: 1280px) { + header { + /*height: 3.5rem;*/ + } + + header > .container { + /*margin-top: 0.25rem;*/ + } + + .main { + height: calc(100% - 3.5rem); + } + + .main-left { + width: calc(0% + 18rem); + top: 50px; + } + + .main-right { + width: calc(100% - 18rem); + } + + + table { + font-size: 0.9rem !important; + width: 100% !important; + } + + .main > .main-left > .nav > li, + .main > .main-left > .nav > li a, + .main > .main-left > .nav > .slide > .menu { + font-size: 1.1rem; + } + + .main > .main-left > .nav > .slide > .slide-menu > li > a { + font-size: 1rem; + text-transform: capitalize; + } + + img[src*="/luci-static/resources/cbi/add.gif"] { + right: 55px; + display: block; + position: absolute; + margin-top: -34px; + } + img[src*="/luci-static/resources/cbi/remove.gif"] { + right: 55px; + display: block; + position: absolute; + margin-top: -34px; + } + + img[src*="/luci-static/resources/cbi/reload.gif"] { + right: 55px; + display: block; + position: absolute; + margin-top: -34px; + } + /* fix nlbw component */ + #detail-bubble { + /* left: unset !important; */ + width: unset!important; + } + #detail-bubble.in { + color: #000; + padding-bottom: calc(60px + env(safe-area-inset-bottom)); + left: 19rem !important; + width: calc(100vw - 21.25rem)!important; + } + #detail-bubble .head { + display: block; + overflow: auto; + } + #detail-bubble #bubble-table { + display: inline-table; + overflow: auto; + } + .node-nlbw-usage table { + display: block; + overflow: auto; + } + #container\.nlbw\.traffic table, + #container\.nlbw\.layer7 table, + #container\.nlbw\.ipv6 table, + #container\.nlbw\.export table { + display: block; + overflow: auto; + } +} + +@media screen and (max-width: 992px) { + + /* img[src*="/images/logo.png"] { + background-color: var(--mainleftbgColor); + height: 50px; + background-image: var(--mlogo); + background-size: 310px; + background-repeat: no-repeat; + padding: 0 0 0 310px; + width: 0; + margin: 0; + background-position: 0; + } */ + + .main-left { + width: 0; + position: fixed; + z-index: 100; + } + + .main-right { + width: 100%; + } + + .showSide { + margin: 0; + padding: 0; + display: inline-block; + position: absolute; + width: 18.75rem; + height: 2.8125rem; + padding: 1.15rem 2rem; + z-index: 100; + } + + .showSide:before { + content: "\e20e"; + font-size: 1.7rem; + } + + #maincontent > .container { + margin: 20px 20px; + } + + .node-main-login .showSide { + display: none !important; + } + + .cbi-value-title { + width:35%; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div * { + width: 100% !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div input[type="text"] { + } + + .node-network-diagnostics > .main .cbi-map fieldset > div:nth-child(4) input[type="text"] { + margin: 0 !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div select, + .node-network-diagnostics > .main .cbi-map fieldset > div input[type="button"] { + margin: 1rem 0 0 0; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div { + width: 100% !important; + } + + .node-main-login > .main .cbi-value-title { + text-align: left; + } + + img[src*="/luci-static/resources/cbi/add.gif"] { + right: 45px; + display: block; + position: absolute; + margin-top: -34px; + } + img[src*="/luci-static/resources/cbi/remove.gif"] { + right: 45px; + display: block; + position: absolute; + margin-top: -34px; + } + + img[src*="/luci-static/resources/cbi/reload.gif"] { + right: 45px; + display: block; + position: absolute; + margin-top: -34px; + } + /* fix nlbw component */ + #detail-bubble { + left: unset !important; + width: unset!important; + } + #detail-bubble.in { + color: #000; + padding-bottom: calc(60px + env(safe-area-inset-bottom)); + left: unset !important; + width: calc(100vw)!important; + } + #detail-bubble .head { + display: block; + overflow: auto; + /* text-align: unset !important; */ + } + #detail-bubble #bubble-table { + display: inline-table; + overflow: auto; + } + header { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08); + } +} + +@media screen and (max-width: 700px) { + + #cbi-vssr-servers .cbi-button-add { + position: static !important; + width: auto !important; + height: 2rem !important; + line-height: 2rem !important; + color: #fff; + display: block; + padding: 0 !important; + font-size: 0.92rem; + border-radius: 10px !important; + box-shadow: none ; + background-image: none; + } + #cbi-vssr-servers .cbi-section-table-row { + margin:10px 0 !important; + } + #cbi-vssr-servers .p-in5 { + padding-bottom: 10px !important; + margin: 0 !important; + } + + #cbi-vssr-servers .cbi-page-actions { + padding-bottom: 10px !important; + } + + #maincontent > .container { + margin: 20px 20px; + } + /* fix nlbw component */ + #detail-bubble { + left: unset !important; + width: unset!important; + } + #detail-bubble.in { + color: #000; + padding-bottom: calc(60px + env(safe-area-inset-bottom)); + left: unset !important; + width: calc(100vw)!important; + } + #detail-bubble .head { + display: block; + overflow: auto; + /* text-align: unset !important; */ + } + #detail-bubble #bubble-table { + display: inline-table; + overflow: auto; + } +} + +@media screen and (max-width: 470px) { + /* fix nlbw component */ + #detail-bubble { + left: unset !important; + width: unset!important; + } + #detail-bubble.in { + color: #000; + padding-bottom: calc(60px + env(safe-area-inset-bottom)); + left: unset !important; + width: calc(100vw)!important; + } + #detail-bubble .head { + display: block; + overflow: auto; + /* text-align: unset !important; */ + } + #detail-bubble #bubble-table { + display: block; + overflow: auto; + } + /* fix node-status-realtime table */ + .main-right > #maincontent { + overflow: auto; + } + /* network and wireless table status icon */ + div [id*="cbi-network-"] [id*="-__status"] table td, + div [id*="cbi-wireless"] [id*="-__status"] table td { + white-space: normal; + } + + .node-system-leds .cbi-section em, + .node-network-network #cbi-network .cbi-map .cbi-section-table cbi-section-table-row, + .node-network-network #cbi-network .cbi-map .cbi-section-table td { + display: block; + } + .node-network-network #cbi-network .cbi-map .cbi-section-table td { + width: 100%!important; + text-align: center!important; + white-space: normal; + } + .node-network-network #cbi-network .cbi-map .cbi-button { + min-width: 60px !important; + } + .node-network-network .cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + flex: 1!important + } + .node-network-network .cbi-section-table .cbi-section-table-titles th:nth-child(2) { + text-align: center !important; + } + .node-network-network .cbi-section-table .cbi-section-table-titles { + display: flex + } + .node-network-wireless fieldset:nth-child(1) table > tbody > tr > td, + .node-network-wireless fieldset:nth-child(2) table > tbody > tr > td { + white-space: normal; + } +} + +@media screen and (max-width: 370px) { + + fieldset { + /* overflow-x: auto; */ + } + + select { + width: 100%; + } + + header { + height: 55px; + } + + h3 { + padding: 0 10px 10px 10px; + } + + /* img[src*="/images/logo.png"] + { + height: 45px; + background-image: var(--mlogo); + background-size: 310px; + background-repeat: no-repeat; + padding: 0 0 0 310px; + width: 0; + margin: 0; + background-position: 0; + } */ + + .showSide { + height: 45px; + } + + #maincontent > .container { + margin: 20px 20px; + } + + .main { + top: 45px; + } + + .main-left{ + top: 45px; + } + .main > .main-left > .nav > .slide > .menu { + } + + .main > .main-left > .nav > .slide > .slide-menu > li > a { + } + + .cbi-value { + margin-bottom: 20px; + display: table; + padding: 0px; + border-bottom: none; + } + + .cbi-value-title { + width: 100%; + font-weight: 700; + float: left; + padding: 0; + margin: 0; + margin-bottom: .25rem; + } + + .cbi-section-node { + padding: 10px !important; + } + + .cbi-value-description { + width: 100%; + display: block; + } + + .cbi-value > .cbi-value-field { + display: block; + float: left; + width: 100%; + } + img[src*="/luci-static/resources/cbi/add.gif"] { + right: 45px; + display: block; + position: absolute; + margin-top: -34px; + } + img[src*="/luci-static/resources/cbi/remove.gif"] { + right: 45px; + display: block; + position: absolute; + margin-top: -34px; + } + + img[src*="/luci-static/resources/cbi/reload.gif"] { + right: 45px; + display: block; + position: absolute; + margin-top: -34px; + } + .cbi-section-node > .cbi-value:nth-of-type(2n) { + background-color: var(--sectionbgColor); + } + + .cbi-tabcontainer > .cbi-value:nth-of-type(2n) { + background-color: var(--sectionbgColor); + } + + div > .cbi-value:nth-of-type(2n) { + background-color: var(--sectionbgColor); + } + + .node-main-login > .main .cbi-value { + padding: 0; + } + + .node-main-login > .main form > div:nth-last-child(1) { + margin-top: 2rem; + } + + .node-main-login > .main fieldset { + margin: 0; + padding: 0.5rem; + } + + #container\.network\.lan\.physical .cbi-value-title, + #cbi-network-1-_ifname .cbi-value-title + { + width: 35%; + } + #cbi-network-1-_ifname .cbi-value-field + { + width: 65%; + } + + h2 { + font-size: 1.2rem; + text-transform: capitalize; + } + + select, + input { + /* max-width: 200px; */ + } + + input[type='checkbox'] { + height: 1.2rem !important; + width: 1.2rem !important; + } + + #swaptotal div div small, + #swapfree div div small, + #swapcache div div small, + #memfree div div small, + #membuff div div small, + #conns div div small, + #memcache div div small, + #memtotal div div small{ + } + #swaptotal div div, + #swapfree div div, + #swapcache div div, + #memfree div div, + #membuff div div, + #conns div div, + #memcache div div, + #memtotal div div{ + } + + .node-status-iptables > .main div > .cbi-map > form input[type="submit"]{ + margin: 0; + } + + #cbi-samba-cfg010f89-_tmpl .cbi-value-title{ + width: 15%; + + } + #cbi-samba-cfg010f89-_tmpl .cbi-value-field{ + width: 95%; + } + /* fix nlbw component */ + #detail-bubble { + left: unset !important; + width: unset!important; + } + #detail-bubble.in { + color: #000; + padding-bottom: calc(60px + env(safe-area-inset-bottom)); + left: unset !important; + width: calc(100vw)!important; + } + #detail-bubble .head { + display: block; + overflow: auto; + /* text-align: unset !important; */ + } + #detail-bubble #bubble-table { + display: block; + overflow: auto; + } +} + +@media screen and (max-width: 315px) { + .label { + position: absolute; + right: 5px; + top: -70px; + } +} + +/* fix http://192.168.2.1/cgi-bin/luci/admin/nlbw/usage */ +#intervalSelect { + height: 40px !important; +} + +/* fix luci-app-commands */ +.commandbox div { + position: unset !important; +} + +/* fix luci-app-netspeedtest */ +#cbi-netspeedtest-homebox- { + display: unset !important; +} + +/* fix node-status-realtime */ +.node-status-realtime .container { + overflow:auto +} + +/* fix node-network-network */ +.node-network-network div[onclick*="document.getElementById('cbid.network."], +#cbi-network div[onclick*="document.getElementById('cbid.network."] { + background-color: unset !important; +} + +/* fix wireless_join list button */ +form[action="/cgi-bin/luci/admin/network/wireless"] input[class="cbi-button cbi-button-reset"], +form[action="/cgi-bin/luci/admin/network/wireless_join"] input[class="cbi-button cbi-input-find"] { + height: 25px; + min-width: 80px; +} +/* fix node-services-aliyundrive-webdav mask-box background style */ +.node-services-aliyundrive-webdav #mask-box { + background: rgb(64 64 64 / 0%); +} +/* fix node-servces-ddns input style */ +.node-services-ddns #cbi-ddns-service input { + width: unset; +} +.node-services-ddns .cbi-value input[type="password"], +.node-services-ddns .cbi-value input[type="text"] { + width: 100% !important; +} +/* fix luci-app-fileassistant botton style */ +.fb-container .cbi-button { + border-radius: var(--commonRadius0); + margin: 3px 3px 3px 0; + height: unset !important; +} +/* update node-system-commands style */ +.node-system-commands h3 { + text-transform: unset; +} +.node-system-commands .commandbox { + width: auto; + display: inline-block; + float: none; +} +.node-system-commands .commandbox p { + word-break:keep-all; + white-space:nowrap; +} +.node-system-commands div.cbi-map fieldset.cbi-section { + align-items: center; + text-align: center; +} +.node-system-commands #cbi-luci.cbi-map fieldset.cbi-section { + align-items: unset; + text-align: unset; +} +/* network */ +.node-network-network .ifacebox strong{ + color: var(--ifaceboxFontColor); + padding: 5px; +} +.node-network-firewall .zonebadge strong, +.node-network-firewall label strong { + color: var(--ifaceboxFontColor); +} + +/* fix new version luci-app-openclash style */ +.node-services-openclash ul li.selected { + background-color: var(--liSelectedColor) !important; +} +.node-services-openclash .cbi-button-reset, +.node-services-openclash .cbi-input-remove { + max-width: unset !important; +} +.node-services-openclash #tab-header ul li.selected, +.node-services-openclash #tab-header ul li { + color: black !important; + background-color: unset !important +} +/* fix qBittorrent status style*/ +.node-nas-qbittorrent p#qBittorrent_status input { + line-height: unset; +} + +/* fix node-system-diskman dialog-format-active */ +.node-system-diskman.dialog-format-active #dialog_format .dialog_box { + background: var(--alertBackground); + border-radius: var(--commonRadius1); +} +/* adaption plug-in luci-app-watchcat-plus */ +.node-services-watchcat-plus select[id*="cbi.opt.watchcat"] { + width: auto; +} +/* fix node-nas-fileassistant table cell style */ +.node-nas-fileassistant .fb-container .cbi-value-owner, +.node-nas-fileassistant .fb-container .cbi-value-perm { + display: table-cell; +} +/* fix luci-app-adguardhome style */ +.node-services-adguardhome input[onclick*="window.open('http://'+window.location.hostname+':"] { + line-height: 0; +} diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/css/style.css b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/css/style.css new file mode 100644 index 0000000000..03a1f550e1 --- /dev/null +++ b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/css/style.css @@ -0,0 +1,2 @@ +:root{--commonRadius0: 8px;--commonRadius1: 5px + }[data-theme=light]{--bg: #f1f4f5;--mainbg: #fff;--bgwhite: #fff;--activeColor: #5ea69b;--activeBottom: #5ea69b 2px solid;--textColor: rgb(132,119,116);--borderColor: rgba(0,0,0,.15);--navbgColor: rgba(255, 255, 255, .7);--navBorder: 1px solid #f2f2f2;--sectionbgColor: #fff;--sectionbgColor2: #fff;--sectionShaddow: 3px 3px 3px rgba(0,0,0,.05);--sectionBorder: none;--sectiontabBorder: none;--tabmenuBorderLR: none;--tabmenubgColor: none;--tabmenuBottom: #e4eaec 1px solid;--tabmenuRadius: 6px 6px 0 0;--sectionnodeBorder: #f7f7f7 1px solid;--cbilineColor: #f7f7f7 1px solid;--tabbgColor: #fff;--inputbgColor: #f8f8f8;--inputtextColor: #76838f;--inputBorder: 1px solid #e4eaec;--mainleftbgColor: rgb(255,255,255);--bttextColor: #fff;--badgebgColor: #f7f7f7;--badgeBorder: #e4eaec 1px solid;--progressbarColor: #c8c8c8;--progressbar: #5ea69b;--progressbartxtColor: #fff;--logo_color: #222b36;--alertColor: #000000;--alertBackground: rgb(230 230 230);--scrollbarColor:#c5c5c5;--ifaceboxBorderColor: #b8b8b8bd;--ifaceboxFontColor: #404040;--liSelectedColor: #c5c5c5;--vssrStatusColor: #525f7f;--vssrBoxShadow: 0 0 2rem 0 rgb(136 152 170 / 30%)}[data-theme=dark]{--bg: #000;--bgwhite: #000;--textColor: #fefefe;--activeColor: #5ea69b;--activeBottom: #5ea69b 2px solid;--borderColor: #2C2C3A;--navbgColor: hsla(0, 0%, 7%, .8);--navBorder: 1px solid #1c1c1e;--sectionbgColor: #1c1c1e;--sectionbgColor2: #1c1c1e;--sectionShaddow: 3px 3px 3px rgba(0,0,0,.05);--sectionBorder: none;--sectiontabBorder: none;--sectionnodeBorder: #3d3d41 1px solid;--cbilineColor: #2d2d2d 1px solid;--tabbgColor: #1c1c1e;--tabmenuBorderLR: none;--tabmenubgColor: none;--tabmenuBottom: #2d2d2d 1px solid;--tabmenuRadius: 6px 6px 0 0;--inputbgColor: #2f2f2f;--inputtextColor: #fefefe;--inputBorder: 1px solid #4d4d4d;--mainleftbgColor: #000;--bttextColor: #fefefe;--badgebgColor: #fefefe;--badgeBorder: #3d3d40 1px solid;--progressbarColor: #6d6d6d;--progressbar: #5ea69b;--progressbartxtColor: #fefefe;--logo_color: #fefefe;--alertColor: #ffffff;--alertBackground: rgb(30 30 30);--scrollbarColor:#2f2f2f;--ifaceboxBorderColor: #636363bd;--ifaceboxFontColor: #404040;--liSelectedColor: #2f2f2f;--vssrStatusColor: rgb(204, 204, 204);--vssrBoxShadow: 0 0 1rem 0 rgb(0 0 0 / 30%)}@font-face{font-family:icomoon;src:url(../fonts/font.eot);src:url(../fonts/font.eot) format('embedded-opentype'),url(../fonts/font.ttf) format('truetype'),url(../fonts/font.woff) format('woff'),url(../fonts/font.svg) format('svg');font-weight:400;font-style:normal}@font-face{font-family:design;src:url('');src:url(?#iefix) format('embedded-opentype'),url(../fonts/iconfont-Regular.woff2) format('woff2'),url(../fonts/iconfont-Regular.woff) format('woff'),url(../fonts/iconfont-Regular.ttf) format('truetype'),url(#iconfont) format('svg')}@font-face{font-family:genjyuugothic-medium;src:url(../fonts/GenJyuuGothic-Medium.otf) format('opentype')}*::-webkit-scrollbar{width:5px;height:5px}*::-webkit-scrollbar-thumb{background:var(--scrollbarColor);border-radius:2px}div{font-family:hyk2gj}html{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}html,body{margin:0;padding:0;height:100%;font-family:-apple-system,microsoft yahei!important;font-size:.92rem;line-height:150%;background-color:var(--bg);color:var(--textColor)}body div{line-height:150%}a{color:var(--textColor);text-decoration:none}em{font-style:normal!important;line-height:1.5;padding-left:10px}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}select{overflow:hidden!important;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0 25px 0 10px!important;background-size:24px 16px;background-repeat:no-repeat;background-position:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABGCAYAAAA6hjFpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMS1jMDAwIDc5LmRhYmFjYmIsIDIwMjEvMDQvMTQtMDA6Mzk6NDQgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDNzA0QUE0NjE2QTExRUNCMjJFQkQyRkIyNURDNjE3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDNzA0QUEzNjE2QTExRUNCMjJFQkQyRkIyNURDNjE3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMi41IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzNBNTYzNTY2MTUxMTFFQ0IyMkVCRDJGQjI1REM2MTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QzNBNTYzNTc2MTUxMTFFQ0IyMkVCRDJGQjI1REM2MTciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6YjzxlAAACsklEQVR42uyaXUsVURSG51T0U/obfUvhhYF0U0HQhZQVIWVJCAkiSUXfRRcaBFbXQVBBRCASFCJBpQQipw+RREkpCa9aG95gs0DMOp6Z7TwvvAxnzczaa6/nzDnzVTndfSVDxdE6WgAQBBCAIIAABAEEIAggAEEAQQABCAIIQBBAAIIAAhAEEAQQgCCAAAStGSAbzA/N+wvSiwPmB6or16bkoY2afLN5r+q4l2MfDpr7zetV2z7zYpmOkAHByNSE0IxDOdUSxr2rOjLVNVC2n6z77hsYmtFnbqlzHS0aN+7DouorFZBH+ibGUCrmO+YjdaqhVeNVHIxm1Ve6P/XH5ibzLwfllvn4Ko8d8t90MEIde1RXaU97n6oJCw7KNXPbKo3ZpvwxjAXV8YTrkCx7piPFQ7lsbq/xWO3K62E0qQ4uDKXn5kbzTxe/YO6o0Rgdypc5GI0anyt1p5fm3eYfLn7e3PmfuTuVJ1YYZ5fG5Up9CQ2qSfMu3m3u+secXdo/1rzGGeTWyfIaUrPmXPycuWeFuXq0X6w55R8q4NwLe3PxlXmn+buLnzX3/mWOXm0fK+RrUP4MICvTG/MO86yLnzFfWmbfi9ou1qzyvS7wnAt/+31YTZxx8ZPmq+709c/pcoifcvEZ5Rku+HyTeB4yYt5unnbxE+YbEZSwvK54rGntP5LAXJN5QPXWvNX8zcWPmm9rHmF5zK0P22/T/hlAaqv35i3mKRc/bB7VMtaUIL5LaI7JPcIdVZMnXXyT+zyp7T4kNr8kn6mPqdlfllj/VevHEpxbsi85fNTP1ycX/2zerPUZQOqrcUGp6nNVMMYTnlPyrwFNCMILLScSn0++r7zUSFVdZ6wJ8aIcQBBAAIIAAhAEEIAggAAEAQQBBCAIIABBAAEIAghAEEAQQJLQbwEGAK/reX2gh5gQAAAAAElFTkSuQmCC)}select,input{color:var(--inputtextColor);padding:5px 10px;font-size:.92rem;font-family:-apple-system,microsoft yahei,sans-serif,Helvetica,Arial,sans-serif;border:var(--inputBorder);background-color:var(--inputbgColor);transition:color 100ms ease,border-color 100ms ease,opacity 100ms ease;-webkit-transition:color 100ms ease,border-color 100ms ease,opacity 100ms ease;outline-style:none;vertical-align:middle;border-radius:var(--commonRadius0);margin:3px 3px 3px 0;height:2.8rem;line-height:2.8rem;max-width:550px}select:not([multiple=multiple]):focus,input:focus{border-color:#948fe1;box-shadow:0 0 6px #948fe1;-webkit-box-shadow:0 0 6px #948fe1;-moz-box-shadow:0 0 6px #948fe1}input[type=file]{border:none;background:0 0;height:auto;line-height:1rem}input[type=checkbox]{height:1.2rem;width:1.2rem}input[type=radio]{height:1.2rem;width:1.2rem;box-shadow:var(--bg)}select[multiple=multiple]{height:auto}.node-docker-images input[type=text]{width:auto!important}input[type=text],input[type=password]{width:100%}code{color:#09c}abbr{text-decoration:underline;cursor:help}br{display:block;margin-bottom:.2px;content:''}hr{margin:1rem 0;border-color:#eee;opacity:.1}header,.main{width:100%;position:absolute}header{background-color:var(--bgwhite);box-shadow:18rem 2px 4px rgba(0,0,0,.08);transition:box-shadow .1s;height:55px;float:left;position:fixed;z-index:101}footer{text-align:right;padding:1rem;color:#aaa;font-size:11px;height:80px;visibility:hidden}footer>a{color:#9a258f;text-decoration:none}text,line{font-family:Verdana!important}.cbi-button-up,.cbi-button-down,.cbi-value-helpicon,.showSide,.main>.loading>span{font-family:icomoon!important;font-size:10px;speak:none;font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.node-services-passwall2 #cbi-passwall2{text-align:center}.node-services-passwall2 input.cbi-button.cbi-button{max-width:unset}.node-services-passwall #set_node_div,.node-services-passwall2 #set_node_div,.node-services-passwall #add_link_div,.node-services-passwall2 #add_link_div{background:var(--sectionbgColor);border-radius:var(--commonRadius0)}.node-services-passwall #add_link_div #nodes_link,.node-services-passwall2 #add_link_div #nodes_link{width:100%!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:-apple-system,microsoft yahei;font-weight:600;line-height:1.1;color:inherit;clear:both;text-transform:capitalize}label.zonebadge.zonebadge-empty{background-color:#03abe8!important}label.zonebadge{border-radius:var(--commonRadius1);padding:2px 5px!important;display:inline-block;cursor:pointer;color:#666}.zonebadge{border-radius:6px;padding:5px}.zonebadge em{padding:3px}svg{background-color:var(--sectionbgColor)}.cbi-section .cbi-section{margin:10px}.node-services-vssr .status-bar{bottom:calc(var(--vssrBottom) + constant(safe-area-inset-bottom));bottom:calc(var(--vssrBottom) + env(safe-area-inset-bottom));background-color:var(--navbgColor);box-shadow:var(--vssrBoxShadow)!important;color:var(--vssrStatusColor)!important}.node-services-vssr .container{padding-bottom:calc(var(--vssrBottom) + constant(safe-area-inset-bottom));padding-bottom:calc(var(--vssrBottom) + env(safe-area-inset-bottom))}.node-services-vssr .ssr-button{min-width:30px}.node-services-vssr #cbi-vssr .panel-title{padding:10px 0 10px 10px!important;letter-spacing:0!important}.node-services-vssr .status .block{border-radius:10px!important;box-shadow:none!important;background-color:var(--sectionbgColor)!important}.node-services-vssr button{border-radius:10px!important}#cbi-vssr-servers .cbi-section-table-row{position:relative;margin:10px!important;padding:8px 15px 8px 70px;box-shadow:none!important;border-radius:10px!important;border:0;color:var(--textColor)!important;text-align:left;line-height:1.7em;overflow:hidden;letter-spacing:normal;background-color:var(--inputbgColor)!important}.cbi-section-table-row.fast{background-color:#add8e6!important}.incon .tp{text-transform:uppercase;color:var(--bg)!important}::file-selector-button{transition:all .1s ease-in-out;border-radius:var(--commonRadius1);border:3px solid #337ab7!important;color:#fff!important;background-color:#337ab7!important;box-sizing:border-box;cursor:pointer}::file-selector-button:hover,::file-selector-button:focus,::file-selector-button:active{color:#fff!important;background-color:#6a65d6!important;border-color:#6a65d6!important}img[src*="/luci-static/resources/icons/port_up.png"]{background-image:url(../images/port_up.png);background-size:32px 32px;height:32px;padding:0 0 0 32px;width:0}img[src*="/luci-static/resources/icons/port_down.png"]{background-image:url(../images/port_down.png);background-size:32px 32px;height:32px;padding:0 0 0 32px;width:0}#wan4_i img[src*="/luci-static/resources/icons/ethernet.png"],#wan6_i img[src*="/luci-static/resources/icons/ethernet.png"],img[src*="/luci-static/resources/icons/ethernet.png"]{background-image:url(../images/ethernet.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/ethernet.png"],#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/ethernet.png"],.ifacebadge img[src*="/luci-static/resources/icons/ethernet.png"],li img[src*="/luci-static/resources/icons/ethernet.png"]{background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px}#__status-ifc-signal img[src*="/luci-static/resources/icons/ethernet.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/ethernet_disabled.png"],#wan6_i img[src*="/luci-static/resources/icons/ethernet_disabled.png"],img[src*="/luci-static/resources/icons/ethernet_disabled.png"]{background-image:url(../images/ethernet_disabled.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/ethernet_disabled.png"],#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/ethernet_disabled.png"],.ifacebadge img[src*="/luci-static/resources/icons/ethernet_disabled.png"],li img[src*="/luci-static/resources/icons/ethernet_disabled.png"]{background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px}#__status-ifc-signal img[src*="/luci-static/resources/icons/ethernet_disabled.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/switch.png"],#wan6_i img[src*="/luci-static/resources/icons/switch.png"],img[src*="/luci-static/resources/icons/switch.png"]{background-image:url(../images/switch.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/switch.png"],#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/switch.png"],.ifacebadge img[src*="/luci-static/resources/icons/switch.png"],li img[src*="/luci-static/resources/icons/switch.png"]{background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px}#__status-ifc-signal img[src*="/luci-static/resources/icons/switch.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/switch_disabled.png"],#wan6_i img[src*="/luci-static/resources/icons/switch_disabled.png"],img[src*="/luci-static/resources/icons/switch_disabled.png"]{background-image:url(../images/switch_disabled.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/switch_disabled.png"],#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/switch_disabled.png"],.ifacebadge img[src*="/luci-static/resources/icons/switch_disabled.png"],li img[src*="/luci-static/resources/icons/switch_disabled.png"]{background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px}#__status-ifc-signal img[src*="/luci-static/resources/icons/switch_disabled.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/wifi.png"],#wan6_i img[src*="/luci-static/resources/icons/wifi.png"],img[src*="/luci-static/resources/icons/wifi.png"]{background-image:url(../images/wifi.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/wifi.png"],#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/wifi.png"],.ifacebadge img[src*="/luci-static/resources/icons/wifi.png"],li img[src*="/luci-static/resources/icons/wifi.png"]{background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px}#__status-ifc-signal img[src*="/luci-static/resources/icons/wifi.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/wifi_disabled.png"],#wan6_i img[src*="/luci-static/resources/icons/wifi_disabled.png"],img[src*="/luci-static/resources/icons/wifi_disabled.png"]{background-image:url(../images/wifi_disabled.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}#cbi-network-lan-ifname_multi img[src*="/luci-static/resources/icons/wifi_disabled.png"],#cbi-network-1-_ifname img[src*="/luci-static/resources/icons/wifi_disabled.png"],.ifacebadge img[src*="/luci-static/resources/icons/wifi_disabled.png"],li img[src*="/luci-static/resources/icons/wifi_disabled.png"]{background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px}#__status-ifc-signal img[src*="/luci-static/resources/icons/wifi_disabled.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/vlan.png"],#wan6_i img[src*="/luci-static/resources/icons/vlan.png"],img[src*="/luci-static/resources/icons/vlan.png"]{background-image:url(../images/vlan.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}.ifacebadge img[src*="/luci-static/resources/icons/vlan.png"],li img[src*="/luci-static/resources/icons/vlan.png"]{background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px}#__status-ifc-signal img[src*="/luci-static/resources/icons/vlan.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/vlan_disabled.png"],#wan6_i img[src*="/luci-static/resources/icons/vlan_disabled.png"],img[src*="/luci-static/resources/icons/vlan_disabled.png"]{background-image:url(../images/vlan_disabled.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}.ifacebadge img[src*="/luci-static/resources/icons/vlan_disabled.png"],li img[src*="/luci-static/resources/icons/vlan_disabled.png"]{background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px}#__status-ifc-signal img[src*="/luci-static/resources/icons/vlan_disabled.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/bridge.png"],#wan6_i img[src*="/luci-static/resources/icons/bridge.png"],img[src*="/luci-static/resources/icons/bridge.png"]{background-image:url(../images/bridge.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}.ifacebadge img[src*="/luci-static/resources/icons/bridge.png"],li img[src*="/luci-static/resources/icons/bridge.png"]{background-image:url(../images/bridge.png);background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px;width:0}#__status-ifc-signal img[src*="/luci-static/resources/icons/bridge.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/bridge_disabled.png"],#wan6_i img[src*="/luci-static/resources/icons/bridge_disabled.png"],img[src*="/luci-static/resources/icons/bridge_disabled.png"]{background-image:url(../images/bridge_disabled.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}.ifacebadge img[src*="/luci-static/resources/icons/bridge_disabled.png"],li img[src*="/luci-static/resources/icons/bridge_disabled.png"]{background-image:url(../images/bridge_disabled.png);background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px;width:0}#__status-ifc-signal img[src*="/luci-static/resources/icons/bridge_disabled.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/tunnel.png"],#wan6_i img[src*="/luci-static/resources/icons/tunnel.png"],img[src*="/luci-static/resources/icons/tunnel.png"]{background-image:url(../images/tunnel.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}.ifacebadge img[src*="/luci-static/resources/icons/tunnel.png"],li img[src*="/luci-static/resources/icons/tunnel.png"]{background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px}#__status-ifc-signal img[src*="/luci-static/resources/icons/tunnel.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}#wan4_i img[src*="/luci-static/resources/icons/tunnel_disabled.png"],#wan6_i img[src*="/luci-static/resources/icons/tunnel_disabled.png"],img[src*="/luci-static/resources/icons/tunnel_disabled.png"]{background-image:url(../images/tunnel_disabled.png);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}.ifacebadge img[src*="/luci-static/resources/icons/tunnel_disabled.png"],li img[src*="/luci-static/resources/icons/tunnel_disabled.png"]{background-size:16px 16px;height:16px;width:16px;padding:0 0 0 16px}#__status-ifc-signal img[src*="/luci-static/resources/icons/tunnel_disabled.png"]{background-size:32px 32px!important;height:32px!important;width:32px!important;padding:0 0 0 32px!important;width:0}img[src*="/luci-static/resources/icons/wifi_big.png"]{background-image:url(../images/wifi_big.png);background-size:64px 64px;height:64px;padding:0 0 0 64px;width:0}img[src*="/luci-static/resources/icons/wifi_big_disabled.png"]{background-image:url(../images/wifi_big_disabled.png);background-size:64px 64px;height:64px;padding:0 0 0 64px;width:0}img[src*="/luci-static/resources/icons/loading.gif"]{background-image:url(../images/loading.gif);background-size:32px 32px;height:32px;width:32px;padding:0 0 0 32px;width:0}.ifacebox-body img{background-size:20px 20px;width:20px!important;height:20px!important;padding:0 0 0 20px!important}.ifacebox-head{border-radius:4px 4px 0 0}img[src*="/luci-static/resources/cbi/add.gif"]{background-image:url(../images/add.png);background-size:20px 20px;height:20px;padding:0 0 0 20px;width:0;z-index:2}img[src*="/luci-static/resources/cbi/remove.gif"]{background-image:url(../images/remove.png);background-size:20px 20px;height:20px;padding:0 0 0 20px;width:0;z-index:2}img[src*="/luci-static/resources/cbi/reload.gif"]{background-image:url(../images/reload.png);background-size:20px 20px;height:20px;padding:0 0 0 20px;width:0;z-index:2}img[src*="/luci-static/resources/icons/signal-75-100.png"]{background-image:url(../images/signal-75-100.png);image-rendering:pixelated;background-size:24px 24px;height:24px;width:24px;padding:0 0 0 24px;z-index:2}img[src*="/luci-static/resources/icons/signal-50-75.png"]{background-image:url(../images/signal-50-75.png);image-rendering:pixelated;background-size:24px 24px;height:24px;width:24px;padding:0 0 0 24px;z-index:2}img[src*="/luci-static/resources/icons/signal-25-50.png"]{background-image:url(../images/signal-25-50.png);image-rendering:pixelated;background-size:24px 24px;height:24px;width:24px;padding:0 0 0 24px;z-index:2}img[src*="/luci-static/resources/icons/signal-0-25.png"]{background-image:url(../images/signal-0-25.png);image-rendering:pixelated;background-size:24px 24px;height:24px;width:24px;padding:0 0 0 24px;z-index:2}img[src*="/luci-static/resources/icons/signal-0.png"]{background-image:url(../images/signal-0.png);image-rendering:pixelated;background-size:24px 24px;height:24px;width:24px;padding:0 0 0 24px;z-index:2}img[src*="/luci-static/resources/icons/signal-none.png"]{background-image:url(../images/signal-none.png);image-rendering:pixelated;background-size:24px 24px;height:24px;width:24px;padding:0 0 0 24px;z-index:2}.myIcon{font-family:design!important;font-style:normal!important;font-variant:normal!important;text-transform:none!important}.myIcon-logout:after{content:"\e005"}.myIcon-reboot:after{content:"\e02a"}.myIcon-wifi:after{content:"\e00c"}.main{top:50px;bottom:0;position:relative;height:100%;height:calc(100% - 4rem)}.main>.loading{position:fixed;width:100%;height:100%;z-index:1000;display:block;background-color:#f0f0f0;top:0}.main>.loading>span{display:block;text-align:center;margin-top:2rem;color:#888;font-size:1rem}.main>.loading>span>.loading-img:before{content:"\e603"}.main>.loading>span>.loading-img{animation:anim-rotate 2s infinite linear;margin-right:.2rem;display:inline-block}.node-main-login{text-align:center;background-color:var(--bgwhite)!important}.node-main-login .cbi-section-node>.cbi-value:nth-of-type(2n){background:0 0}.node-main-login h2{font-size:1.5rem}.node-main-login header{display:none}.node-main-login>.main>.main-left{display:none}.node-main-login>.main>.main-right{width:100%}.node-main-login>.main fieldset{padding:0!important;margin-bottom:1rem;display:inline;background:0 0;border:none;box-shadow:none;overflow:hidden}.node-main-login>.main fieldset .cbi-value-title{display:none!important}.node-main-login>.main .cbi-section{margin-top:10px!important}.node-main-login>.main .cbi-map{}.node-main-login>.main fieldset .cbi-value{}.node-main-login>.main fieldset .cbi-value-title{padding:10px 0 10px 5px!important}.node-main-login>.main .cbi-value{border:none}.node-main-login>.main .cbi-value-title{width:7rem}.node-main-login>.main #maincontent{display:flex;height:100%;text-align:center;align-items:center;align-content:center;justify-content:center}.node-main-login>.main form>div:nth-last-child(1){}.node-main-login>.main .cbi-value>*{display:inline-block!important}.node-main-login>.main .cbi-input-user,.node-main-login>.main .cbi-input-password{appearance:none;outline:0;padding:0 0 0 35px;background-repeat:no-repeat;background-position:10px 10px;background-size:18px 18px;min-width:15rem}.node-main-login>.main .cbi-input-user{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjNjI3Mzg2IiBkPSJNMTIgNGE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMS00IDQgNCA0IDAgMCAxLTQtNCA0IDQgMCAwIDEgNC00bTAgMTBjNC40Mi4wIDggMS43OSA4IDR2Mkg0di0yYzAtMi4yMSAzLjU4LTQgOC00eiIvPjwvc3ZnPg==)}.node-main-login>.main .cbi-input-password{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjNjI3Mzg2IiBkPSJNMTIgMTdhMiAyIDAgMCAwIDItMiAyIDIgMCAwIDAtMi0yIDIgMiAwIDAgMC0yIDIgMiAyIDAgMCAwIDIgMm02LTlhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlYxMGEyIDIgMCAwIDEgMi0yaDFWNmE1IDUgMCAwIDEgNS01IDUgNSAwIDAgMSA1IDV2MmgxbS02LTVhMyAzIDAgMCAwLTMgM3YyaDZWNmEzIDMgMCAwIDAtMy0zeiIvPjwvc3ZnPg==)}.node-main-login footer{bottom:0;position:absolute;width:100%}.navbar{overflow:hidden;position:fixed;bottom:0;width:100%;border-top:var(--navBorder);text-align:center;height:calc(50px + constant(safe-area-inset-bottom));height:calc(50px + env(safe-area-inset-bottom));background-color:var(--navbgColor);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.navbar a{float:left;text-align:center;padding:8px 0;width:20%;text-decoration:none;max-width:100px}.cbi-map{margin-top:10px}#cbi-shadowsocksr .cbi-map-descr{display:none}.navbar a img{width:28px}@keyframes anim-rotate{0%{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}.main-left{float:left;width:18rem;background-color:var(--mainleftbgColor);overflow-x:auto;height:calc(100% - 3.5rem);position:fixed;padding-top:15px;box-shadow:0 0 4px transparent;transition:visibility 100ms,width 100ms}.main-right{width:85%;width:calc(100% - 18rem);float:right;height:100%;border-left:var(--sectionBorder)}.main-right>#maincontent{}.pull-right{position:absolute;top:-2px;right:30px;cursor:pointer}.pull-left{float:left}header>.container{margin:0;padding:0}header>.container>.brand{font-size:25px;font-family:genjyuugothic-medium;line-height:60px;color:var(--logo_color);cursor:default;display:block;width:18rem;height:60px;text-align:center;float:left;font-weight:900;letter-spacing:1px;padding:0 4.5rem;transition:.1s ease-in-out;position:absolute}header>.container>a[class=brand]:after{content:"";font-size:14px;font-family:Tahoma;position:absolute;top:-10px;font-weight:400!important}header>.container>.brand-hostname{font-size:14px;line-height:60px;color:#555;cursor:default;display:block;width:18rem;padding-right:10px;height:60px;text-align:left;float:left;margin-top:7px;font-weight:300;margin-left:-15px}.warning{background-color:#ff7d60!important;color:#fff}.errorbox,.alert-message{margin:0 0 10px;padding:20px;line-height:1.5;font-family:inherit;min-width:inherit;overflow:auto;border-radius:10px;color:var(--alertColor);background-color:var(--alertBackground)}.errorbox{color:#fff;background-color:#ff6767;border-radius:10px}.error{color:red}p#shadowsocksr_status{padding:3px}#maincontent>.container>div:nth-child(1).alert-message.warning>a{font:inherit;overflow:visible;text-transform:none;display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;min-width:6rem;padding:.5rem 1rem;font-size:14px;line-height:1.42857143;color:#fff;background-color:#5bc0de;border-color:#46b8da;margin-top:2rem;text-decoration:inherit}.main>.main-left>.nav{overflow-y:visible!important;font-size:1rem;width:90%;margin:auto;margin-bottom:90px}.main>.main-left>.nav>li a{color:var(--activeColor);display:block;border-radius:6px;cursor:pointer;font-weight:700;font-size:1.1rem;transition:all .1s}.main>.main-left>.nav>li{cursor:pointer;padding-top:6px}.main>.main-left>.nav>.slide{padding:0;padding-top:8px}.main>.main-left>.nav>.slide>a:before{display:inline-block;left:-10px;top:1px;position:relative;font-family:design!important;font-weight:700!important;text-transform:none!important;speak:none;font-size:1.2rem!important;-webkit-font-smoothing:antialiased}.main>.main-left>.nav>.slide>.menu::after{right:.5rem;top:.8rem;font-family:design!important;font-style:normal!important;font-variant:normal!important;content:"\eb03";float:right;padding-right:5px;line-height:1.6;-moz-osx-font-smoothing:grayscale;transition:all .1s ease;text-rendering:auto;-webkit-font-smoothing:antialiased}.main .main-left .nav li.slide .menu.active::after{transform:rotate(90deg)}.main>.main-left>.nav>.slide>a[data-title=Status]:before{content:"\e6b8"}.main>.main-left>.nav>.slide>a[data-title=System]:before{content:"\e645"}.main>.main-left>.nav>.slide>a[data-title=Modem]:before{content:"\e67e"}.main>.main-left>.nav>.slide>a[data-title=Services]:before{content:"\e6cb"}.main>.main-left>.nav>.slide>a[data-title=Docker]:before{content:"\44"}.main>.main-left>.nav>.slide>a[data-title=NAS]:before{content:"\eb04"}.main>.main-left>.nav>.slide>a[data-title=VPN]:before{content:"\56"}.main>.main-left>.nav>.slide>a[data-title=Network]:before{content:"\72"}.main>.main-left>.nav>.slide>a[data-title="Bandwidth Monitor"]:before{content:"\e764"}.main .main-left .nav li.slide .menu[data-title=Statistics]:before{content:"\e604"}.main .main-left .nav li.slide .menu[data-title=Control]:before{content:"\e67a"}.main .main-left .nav li.slide .menu[data-title=Asterisk]:before{content:"\e7dd"}.main>.main-left>.nav>.slide>a[data-title=QuickStart]:before,.main>.main-left>.nav>li>a[data-title="Inital Setup"]:before,.main>.main-left>.nav>li>a[data-title=NetworkGuide]:before,.main>.main-left>.nav>li>a[href="/cgi-bin/luci//admin/wizard"]:before{content:"\e719"}.main>.main-left>.nav>li>a[data-title=iStore]:before{content:"\e676"}.main>.main-left>.nav>li>a[data-title=Logout]{padding:.675rem 0 .675rem 2.5rem}.main>.main-left>.nav>li>a[data-title=Logout]:before{content:"\e641"}.main>.main-left>.nav>li>a[data-title=Reboot]{padding:6px 25px}.main>.main-left>.nav>li>a[data-title=Reboot]:before{content:"\e004"}.main>.main-left>.nav>.slide>ul{display:none;list-style:dotted}.main>.main-left>.nav>.slide>.menu{display:block;padding:.675rem 0 .675rem 2.5rem;text-decoration:none;cursor:pointer}.main>.main-left>.nav>.slide>.menu2{display:block;padding:.675rem 0 .675rem 2.5rem;text-decoration:none;cursor:pointer}.main>.main-left>.nav>li:hover,.main>.main-left>.nav>.slide>.menu:hover{background:var(--activeColor);color:#fff}.main>.main-left>.nav>.slide>.menu2:hover{background:var(--activeColor);color:#fff}.main>.main-left>.nav>.slide:hover{background:0 0}.slide-menu{overflow:hidden}.main>.main-left>.nav>.slide>.slide-menu>li{margin-top:8px;border-radius:6px}.main>.main-left>.nav>.slide>.slide-menu>.active{background-color:var(--activeColor)}.main>.main-left>.nav>.slide>.slide-menu>li>a{position:relative;display:block;color:var(--textColor);vertical-align:middle;background:0 0!important;border:none!important;text-transform:capitalize;font-size:1rem;margin:.1rem .5rem;padding:.675rem 0 .675rem 3.2rem}.main .main-left .nav li.slide .slide-menu .active a{color:#000}.main>.main-left>.nav>.slide>.slide-menu>li>a:hover{color:#fff}.main>.main-left>.nav>.slide>.slide-menu>.active>a{color:#fff}.main>.main-left>.nav>.slide>.slide-menu>li:hover{background:var(--activeColor);color:#fff!important;transition:all .1s}.main>.main-left>.nav>.slide>.slide-menu>.active:hover{background-color:var(--activeColor);cursor:pointer}.cbi-tab-descr{padding:10px}li{list-style-type:none}#maincontent>.container{margin:30px 30px 50px}h1{color:var(--activeColor);font-size:20px;padding-bottom:10px;border-bottom:1px solid #eee}h2{color:var(--activeColor);padding:0 12px 6px;text-transform:capitalize}h3{font-size:1.2rem;color:var(--activeColor);font-weight:700;padding:0 12px 10px}h4{}label{display:inline-block;vertical-align:middle}fieldset{padding:10px;border:1px;font-weight:400;font-style:normal;line-height:1;font-family:inherit;text-align:left;min-width:inherit;overflow-x:auto;overflow-y:hidden;background-color:var(--sectionbgColor);-webkit-overflow-scrolling:touch}fieldset>legend{display:none!important}fieldset>fieldset{padding:0}.panel-title{width:100%;display:block;padding:10px;font-weight:700;font-size:1rem}table{border-spacing:0;border-collapse:collapse;width:100%;border:0 solid #eee!important;margin:0!important}strong{font-weight:700;padding:2px}#lb_load01_cur,#lb_load01_peak,#lb_load05_cur,#lb_load15_cur{text-align:right!important}#lb_load01_peak{text-align:left!important}#lb_load01_cur{}table>tbody>tr>td,table>tbody>tr>th,table>tfoot>tr>td,table>tfoot>tr>th,table>thead>tr>td,table>thead>tr>th{padding:12px;white-space:nowrap;line-height:1.5;vertical-align:middle!important}.node-services-appfilter table>tbody>tr>th,.node-services-appfilter table>tbody>tr>td,.node-nlbw-usage table>tbody>tr>th,.node-nlbw-usage table>tbody>tr>td{text-align:center}table>tbody>tr{border-bottom:var(--cbilineColor)!important}table>tbody>tr:last-child{border-bottom:none!important}.cbi-section-table-cell{text-align:center}.cbi-section-table-row{text-align:center}.cbi-section-remove{margin-bottom:2px}.cbi-section-remove>input{background-color:#c06}fieldset>table>tbody>tr:nth-of-type(odd){background-color:var(--sectionbgColor2)}#lease6_status_table>tbody>.cbi-section-table-row.cbi-rowstyle-1 div,#lease6_status_table>tbody>.cbi-section-table-row.cbi-rowstyle-2 div{min-width:100%}.node-status-overview>.main fieldset:nth-child(6) td:nth-child(2),.node-status-overview table[id=wifi_status_table]>tbody>tr>td{white-space:normal}#swaptotal>div,#swapfree>div,#swapcache>div,#memfree>div,#membuff>div,#conns>div,#memcache>div,#memtotal>div{width:100%!important;border-color:var(--progressbarColor)!important;background-color:var(--progressbarColor)!important;border-radius:3px}#swaptotal>div>div,#swapfree>div>div,#swapcache>div>div,#memfree>div>div,#membuff>div>div,#conns>div>div,#memcache>div>div,#memtotal>div>div{background-color:var(--progressbar)!important;color:var(--progressbartxtColor)!important;border-radius:3px}#swaptotal div div,#swapfree div div,#swapcache div div,#memfree div div,#membuff div div,#conns div div,#memcache div div,#memtotal div div{align-items:center;align-content:center;justify-content:center;display:flex}#swaptotal div div small,#swapfree div div small,#swapcache div div small,#memfree div div small,#membuff div div small,#conns div div small,#memcache div div small,#memtotal div div small{font-size:.75rem!important;line-height:130%;color:var(--progressbartxtColor)!important}.cbi-value-field{width:65%}.node-system-admin .cbi-value-field li div{padding:0!important}.node-system-admin em{padding:0!important}.node-nlbw-display hr{display:none}.node-nlbw-display p{line-height:1.5;padding:0 10px 5px}#cbi-network .cbi-value-field ul,#cbi-wireless .cbi-value-field ul,#cbi-firewall .cbi-value-field ul{overflow-x:auto;white-space:nowrap}#cbi-network .cbi-value-field ul input[type=text],#cbi-wireless .cbi-value-field ul input[type=text],#cbi-firewall .cbi-value-field ul input[type=text]{max-width:10rem;width:100%!important}div [id*=cbi-network-] [id*=-__status] table,div [id*=cbi-wireless] [id*=-__status] table{width:auto}div [id*=cbi-network-] [id*=-__status] table td,div [id*=cbi-wireless] [id*=-__status] table td{width:auto;padding:0!important}div [id*=cbi-network-] [id*=-__status] table td small,div [id*=cbi-wireless] [id*=-__status] table td small{width:auto}.node-network-wifi .cbi-section-table tr .cbi-value-field,.node-network-wireless .cbi-section-table tr .cbi-value-field{width:unset!important;text-align:right}.node-network-wireless #iw-assoclist .cbi-section-table-row td[colspan="6"],.node-network-wireless .cbi-section-table .cbi-section-table-row td[colspan="6"],.node-network-wifi .cbi-section-table .cbi-section-table-row td[colspan="8"]{text-align:center!important}.node-network-wireless #iw-assoclist .cbi-section-table-row td div{max-width:unset!important}.node-network-wifi table,td,th{border-top:unset!important}.node-network-wifi .cbi-section-table td[colspan="2"]{padding-left:unset!important}.node-status-routes .cbi-section-node{max-height:500px;overflow-y:auto;overflow-x:auto}table table{border:none}.cbi-value-field table{border:none}.cbi-value-field label{padding:0}td>table>tbody>tr>td{border:none}.cbi-value-field>table>tbody>tr>td{border:none}#container\.nlbw\.traffic th,#container\.nlbw\.traffic td,#container\.nlbw\.layer7 th,#container\.nlbw\.layer7 td,#container\.nlbw\.ipv6 th,#container\.nlbw\.ipv6 td,#container\.nlbw\.export th,#container\.nlbw\.export td{padding:12px!important;border-top:none;border:unset;text-align:center}#container\.nlbw\.traffic tr td:nth-child(4),#container\.nlbw\.layer7 tr td:nth-child(3),#container\.nlbw\.ipv6 tr td:nth-child(4),#container\.nlbw\.export tr td:nth-child(4),#container\.nlbw\.traffic tr td:nth-child(6),#container\.nlbw\.layer7 tr td:nth-child(5),#container\.nlbw\.ipv6 tr td:nth-child(6),#container\.nlbw\.export tr td:nth-child(6){text-align:right!important}#container\.nlbw\.traffic tr td:nth-child(5),#container\.nlbw\.layer7 tr td:nth-child(4),#container\.nlbw\.ipv6 tr td:nth-child(5),#container\.nlbw\.export tr td:nth-child(5),#container\.nlbw\.traffic tr td:nth-child(7),#container\.nlbw\.layer7 tr td:nth-child(6),#container\.nlbw\.ipv6 tr td:nth-child(7),#container\.nlbw\.export tr td:nth-child(7){text-align:left!important}td#__status-ifc-signal{width:60px!important}.cbi-button{-webkit-appearance:none;text-transform:uppercase;color:#fff;background-color:#337ab7;transition:all .1s ease-in-out;display:inline-block;border:none;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:auto!important;min-width:80px;padding:0 8px;border-radius:var(--commonRadius0);height:35px;line-height:35px}.cbi-button:hover,.cbi-button:focus,.cbi-button:active{color:#fff;outline:0;text-decoration:none;background-color:#6a65d6}.cbi-button:hover,.cbi-button:focus{box-shadow:0 1px 1px rgba(0,0,0,.05)}.cbi-button:active{box-shadow:0 1px 1px rgba(0,0,0,.05)}.cbi-button:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}form.inline+form.inline,.cbi-button+.cbi-button{}.cbi-button-reset,.cbi-input-remove{color:#fff!important;background-color:#617486!important}.cbi-button-reset:hover,.cbi-input-remove:hover,.cbi-button-remove:hover{color:#fff!important;background-color:#536473!important}.cbi-button-link,.cbi-input-find,.cbi-input-save,.cbi-button-add,.cbi-button-save,.cbi-button-find,.cbi-input-reload,.cbi-button-reload{color:var(--bttextColor);background-color:#337ab7!important;border-color:#337ab7!important}.cbi-button-link:hover,.cbi-input-find:hover,.cbi-input-save:hover,.cbi-button-add:hover,.cbi-button-save:hover,.cbi-button-find:hover,.cbi-input-reload:hover,.cbi-button-reload:hover{color:#fff!important;background-color:#6a82ae!important;border-color:#6a82ae!important}.cbi-input-apply,.cbi-button-apply,.cbi-button-edit{color:#fff!important;background-color:var(--activeColor)}.cbi-input-reset,.cbi-button-remove{color:#fff!important;background:#617486}.a-to-btn{text-decoration:none}.tabs{margin:15px 0;overflow-x:auto}.cbi-tabmenu>li,.tabs>li{display:table-cell}.cbi-tabmenu>li{border-radius:var(--tabmenuRadius)}.tabs>li>a{text-decoration:none;padding:0 6px;float:left;display:block;white-space:nowrap;height:2.5rem;line-height:2.5rem;font-size:.92rem}.cbi-tabmenu>li>a{text-decoration:none;float:left;display:block;white-space:nowrap;height:2.5rem;line-height:2.5rem;font-size:.92rem;margin:0 10px}.tabs>li[class~=active],.tabs>li:hover{cursor:pointer}.tabs>li[class~=active]>a{color:var(--activeColor)!important;padding-bottom:8px;border-bottom:var(--activeColor) 2px solid}.tabs>li:hover{}.cbi-tabmenu{border-top:var(--sectiontabBorder);border-left:var(--tabmenuBorderLR);border-right:var(--tabmenuBorderLR);border-bottom:var(--tabmenuBottom);background-color:var(--tabmenubgColor);width:100%;overflow-x:auto;margin-top:5px;margin-bottom:10px}.cbi-tabmenu>li:hover{background-color:none}.cbi-tabmenu>li[class~=cbi-tab]{background-color:none}.cbi-tabmenu>li[class~=cbi-tab] a{color:var(--activeColor)!important;border-bottom:2px solid var(--activeColor)!important}.cbi-section-node-tabbed{margin-top:0;border-bottom:var(--sectiontabBorder);border-left:var(--sectiontabBorder);border-right:var(--sectiontabBorder);border-radius:0 0}.cbi-tabcontainer{clear:both}.cbi-tabcontainer>.cbi-value:nth-of-type(2n){background-color:var(--sectionbgColor2)}.cbi-section-node>.cbi-value:nth-of-type(2n){background-color:var(--sectionbgColor2)}div>.cbi-value:nth-of-type(2n){background-color:var(--sectionbgColor2)}.cbi-value-field,.cbi-value-description{display:table-cell}.cbi-value-field{}.cbi-value-helpicon>img{display:none}.cbi-value-helpicon:before{content:"\f059"}.cbi-value-description{opacity:.6;padding-left:4px}.cbi-value-title{word-wrap:break-word;display:table-cell;width:35%;float:left;padding:13px 10px 5px 3px}.cbi-value{display:flex;width:100%;align-items:center;align-content:center;justify-content:flex-start;min-height:40px;padding:8px 10px;flex-flow:row wrap;border-bottom:var(--cbilineColor)}.cbi-value:last-child{border-bottom:none}.cbi-value strong{font-weight:400}.cbi-section-table-descr>.cbi-section-table-cell,.cbi-section-table-titles>.cbi-section-table-cell{border:none}.cbi-rowstyle-2{background-color:var(--sectionbgColor2)}.cbi-rowstyle-2 .cbi-button-up,.cbi-rowstyle-2 .cbi-button-down{}.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell{width:auto!important}.cbi-section-table tr .cbi-value-field{text-align:center;width:20%!important;padding:10px!important}.cbi-section-table tr .cbi-value-field input{width:auto}.cbi-section-table tr .cbi-value-field .ifacebox{margin:auto;width:fit-content;min-width:60px}.cbi-section-descr{padding:3px 10px}.cbi-map-descr{padding:5px 5px 5px 12px}.cbi-map-descr h3{font-size:.92rem;font-weight:400;color:#666}#cbi-vsftpd .cbi-map-descr{color:var(--activeColor);padding:0 12px 0;font-size:1.2rem;font-weight:700}.hidden{display:none}.left{text-align:left!important}.right{text-align:right!important}.right .cbi-button{height:20px;line-height:20px;min-width:60px;margin:0}.inline{display:inline}.cbi-page-actions{text-align:center}.cbi-value input[type=password],.cbi-value input[type=text]{}.ifacebadge{display:inline-flex;padding:5px;background-color:var(--badgebgColor);align-content:center;align-items:center;border-radius:var(--commonRadius1);border:var(--badgeBorder);color:#666}#content_syslog{padding:5px;margin-top:10px;border-radius:10px;background-color:var(--sectionbgColor);box-shadow:3px 3px 3px transparent}.ifacebadge>img{float:right;margin-left:.3rem}img.cbi-image-button{vertical-align:middle}fieldset.cbi-section{border:var(--sectionBorder);margin-bottom:20px;border-radius:10px;margin-top:5px}.cbi-input-textarea,textarea{color:var(--inputtextColor);padding:10px;line-height:normal;border:var(--sectionBorder);background-color:var(--inputbgColor);transition:color 150ms ease,border-color 150ms ease,opacity 150ms ease;-webkit-transition:color 150ms ease,border-color 150ms ease,opacity 150ms ease;outline-style:none;vertical-align:baseline;border-radius:10px;font-family:Menlo,Mono;font-size:.9rem;white-space:pre;margin-bottom:5px}#syslog{width:100%;min-height:15rem;padding:10px;margin-bottom:20px;border-radius:0;background-color:var(--sectionbgColor);border:none}#wan4_i,#wan6_i{width:50px!important}.uci-change-list{font-family:monospace}.uci-change-list *:first-child{border-top-left-radius:5px;border-top-right-radius:5px}.uci-change-list *:nth-last-child(2){border-bottom-left-radius:5px;border-bottom-right-radius:5px}.uci-change-list ins,.uci-change-legend-label ins{text-decoration:none;border:1px solid #0f0;background-color:#cfc;display:block;padding:2px;color:#000;overflow-x:auto}.uci-change-legend .uci-change-legend-label ins{overflow-x:unset;border-radius:var(--commonRadius1)}.uci-change-list del,.uci-change-legend-label del{text-decoration:none;border:1px solid red;background-color:#fcc;display:block;font-style:normal;padding:2px;color:#000;overflow-x:auto}.uci-change-legend .uci-change-legend-label del{overflow-x:unset;border-radius:var(--commonRadius1)}.uci-change-list var,.uci-change-legend-label var{text-decoration:none;border:1px solid #ccc;background-color:#eee;display:block;font-style:normal;padding:2px;color:#000;overflow-x:auto}.uci-change-legend .uci-change-legend-label var{overflow-x:unset;border-radius:var(--commonRadius1)}.uci-change-list var ins,.uci-change-list var del{border:none;white-space:pre;font-style:normal;padding:0;color:#000;overflow-x:auto}.uci-change-legend{padding:5px}.uci-change-legend-label{width:150px;float:left;display:flex;align-items:center}.uci-change-legend-label>ins,.uci-change-legend-label>del,.uci-change-legend-label>var{float:left;margin-right:4px;width:10px;height:10px;display:block}.uci-change-legend-label var ins,.uci-change-legend-label var del{border:none;height:10px;width:10px}.uci-change-list var,.uci-change-list del,.uci-change-list ins{padding:.5rem}#iwsvg,#iwsvg2,#bwsvg{border:var(--sectionBorder)!important;font-family:-apple-system;background:0 0!important}.ifacebox{border:var(--ifaceboxBorderColor) 1px solid;border-radius:var(--commonRadius1);font-size:.92rem;font-weight:400}.ifacebox-head{color:#fff}.ifacebox-body small{font-size:.8rem!important;padding:5px}.ifacebox-body strong{color:#f7f7f7;font-size:0!important}.cbi-image-button{}.zonebadge>.ifacebadge{padding:3px 5px;margin:5px}.zonebadge>input[type=text]{padding:.16rem 1rem;min-width:10rem;margin-top:.3rem}.cbi-value-field .cbi-input-checkbox,.cbi-value-field .cbi-input-radio{vertical-align:middle}.cbi-section-table-row>.cbi-value-field .cbi-input-select{min-width:7rem}.cbi-section-create{padding:0 10px}.cbi-section-create>.cbi-button-add{margin:10px 0}div.cbi-value var,td.cbi-value-field var{font-style:italic;color:#0069d6}small{font-size:small;font-weight:400!important;white-space:normal}.cbi-button-up,.cbi-button-down{display:inline-block;min-width:0;font-size:.9rem}.cbi-optionals{padding:1rem 1rem 0;border-top:1px solid #ccc}#diag-rc-output>pre{display:block;padding:10px;line-height:1.5rem;-moz-border-radius:3px;white-space:pre-wrap;word-wrap:break-word;color:#76838f}input[name=ping],input[name=traceroute],input[name=nslookup]{width:80%}table.cbi-section-table select{width:auto!important}header>.container>.pull-right>*{}#xhr_poll_status>.label.success{padding:.7rem 0;border-radius:20px}#xhr_poll_status_off{padding:.7rem 0;border-radius:20px}.label{padding:0 3px;white-space:nowrap;border-radius:3px;position:absolute;right:5px;top:15px;line-height:150%}.notice{color:var(--activeColor);font-size:.8rem;padding-right:.5rem;border-radius:10px;z-index:10;font-size:1.8rem;font-family:design}#refresh_on,#refresh_off{font-size:1.5rem;font-family:design}#refresh_on{color:var(--activeColor)}#refresh_off{color:var(--progressbarColor)}.darkMask{width:100%;height:100%;position:fixed;background-color:rgba(0,0,0,.56);content:"";z-index:99;display:none}.node-services-shadowsocksr .cbi-input-textarea,.node-nlbw-config .cbi-input-textarea{}.node-services-shadowsocksr #cbi-logview .cbi-section{padding:0}.node-network-diagnostics .cbi-section{border-radius:10px}.node-status-processes>.main table tr td:nth-child(3){white-space:normal}.cbi-map fieldset h3{}.cbi-map fieldset ul li{margin-right:0!important}.node-system-reboot>.main>.main-right p,.node-system-reboot>.main>.main-right h3{margin-left:12px}.node-system-reboot #maincontent{}.node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-title{margin-bottom:1rem}.node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-field{display:list-item}.node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-description{padding-top:1rem;line-height:150%}.node-system-packages>.main table tr td:nth-child(1){width:auto!important}.node-system-packages .cbi-section-node .cbi-value-last{}.node-system-packages .cbi-section-node .cbi-value-last>div{border:none!important;border-radius:3px}.node-system-packages .cbi-section-node .cbi-value-last>div>div{border:none!important;border-radius:3px}.node-system-packages .cbi-section-node .cbi-value-last:nth-last-child(1){padding:auto}.node-system-packages>.main table tr td:nth-last-child(1){white-space:normal;font-size:small;color:#76838f}.node-system-packages>.main .cbi-value>pre{padding:10px;overflow:auto;border-radius:10px}.node-system-packages #cbi-distfeedconf .cbi-section,.node-system-packages #cbi-customfeedconf .cbi-section{border-radius:10px}.node-system-packages .cbi-value-field{width:58%}#container\.nlbw\.traffic,#container\.nlbw\.layer7,#container\.nlbw\.ipv6,#container\.nlbw\.export{margin-top:0;margin-top:0;padding:10px;text-align:center;border-bottom:var(--sectionBorder);border-left:var(--sectionBorder);border-right:var(--sectionBorder);background-color:var(--sectionbgColor);border-radius:10px}#container\.nlbw\.export ul li{padding:5px;width:150px;margin:10px;border-radius:var(--commonRadius1);border:#ccc 1px solid}.cbi-tabmenu+.cbi-section ul{text-align:left}.node-network-firewall>.main .cbi-section-table-row>.cbi-value-field .cbi-input-select{min-width:4rem}.node-status-iptables>.main div>.cbi-map>form{position:static!important;margin:10px 0 20px;padding:12px;border:0;font-weight:400;font-style:normal;line-height:1;font-family:inherit;min-width:inherit;overflow-x:auto;overflow-y:hidden;box-shadow:3px 3px 3px transparent;border-radius:10px;background-color:var(--bgwhite);-webkit-overflow-scrolling:touch}.node-system-flashops fieldset fieldset{border:none}.node-system-flashops br{display:none}.node-system-flashops .cbi-section{}.node-system-flashops .cbi-section-descr{padding:12px;line-height:1.5;border-radius:6px}.node-status-iptables .cbi-tabmenu,.node-system-packages .cbi-tabmenu,.node-system-flashops .cbi-tabmenu{}#cbi-firewall-redirect .cbi-section-table-titles .cbi-section-table-cell{text-align:left}#cbi-firewall-redirect table *,#cbi-network-switch_vlan table *,#cbi-firewall-zone table *{font-size:small}#cbi-firewall-redirect table input[type=text],#cbi-network-switch_vlan table input[type=text],#cbi-firewall-zone table input[type=text]{width:5rem}#cbi-firewall-redirect table select,#cbi-network-switch_vlan table select,#cbi-firewall-zone table select{min-width:3.5rem}.node-status-realtime table>tbody>tr>td{text-align:left!important;padding:10px 3px}.node-status-realtime table[id=connections]>tbody>tr>td{padding:10px 3px;text-align:center!important}.node-status-realtime table{table-layout:auto!important}.node-status-realtime fieldset[id=cbi-table-table]{background-color:unset!important}.node-status-realtime fieldset[id=cbi-table-table]>table>tbody>tr:nth-of-type(odd),.node-status-realtime fieldset[id=cbi-table-table] table[id=connections] tr.cbi-section-table-row.cbi-rowstyle-2{background-color:unset}.node-services-appfilter .cbi-section.cbi-tblsection,.node-nas-fileassistant #list-content,.node-status-realtime fieldset[id=cbi-table-table] .cbi-section-node{overflow:auto}select#cbi\.combobox\.cbid\.shadowsocksr\.cfg013fd6\.tunnel_forward{overflow:hidden}body.lang_pl.node-main-login .cbi-value-title{width:12rem}#detail-bubble{width:unset!important}#detail-bubble.in{color:#000;padding-bottom:calc(60px + env(safe-area-inset-bottom));left:19rem!important;width:calc(100vw - 21.25rem)!important}#detail-bubble .head{display:block;overflow:auto}#detail-bubble #bubble-table{display:inline-table;overflow:auto}@media screen and (max-width:1280px){header{}header>.container{}.main{height:calc(100% - 3.5rem)}.main-left{width:calc(0% + 18rem);top:50px}.main-right{width:calc(100% - 18rem)}table{font-size:.9rem!important;width:100%!important}.main>.main-left>.nav>li,.main>.main-left>.nav>li a,.main>.main-left>.nav>.slide>.menu{font-size:1.1rem}.main>.main-left>.nav>.slide>.slide-menu>li>a{font-size:1rem;text-transform:capitalize}img[src*="/luci-static/resources/cbi/add.gif"]{right:55px;display:block;position:absolute;margin-top:-34px}img[src*="/luci-static/resources/cbi/remove.gif"]{right:55px;display:block;position:absolute;margin-top:-34px}img[src*="/luci-static/resources/cbi/reload.gif"]{right:55px;display:block;position:absolute;margin-top:-34px}#detail-bubble{width:unset!important}#detail-bubble.in{color:#000;padding-bottom:calc(60px + env(safe-area-inset-bottom));left:19rem!important;width:calc(100vw - 21.25rem)!important}#detail-bubble .head{display:block;overflow:auto}#detail-bubble #bubble-table{display:inline-table;overflow:auto}.node-nlbw-usage table{display:block;overflow:auto}#container\.nlbw\.traffic table,#container\.nlbw\.layer7 table,#container\.nlbw\.ipv6 table,#container\.nlbw\.export table{display:block;overflow:auto}}@media screen and (max-width:992px){.main-left{width:0;position:fixed;z-index:100}.main-right{width:100%}.showSide{margin:0;padding:0;display:inline-block;position:absolute;width:18.75rem;height:2.8125rem;padding:1.15rem 2rem;z-index:100}.showSide:before{content:"\e20e";font-size:1.7rem}#maincontent>.container{margin:20px}.node-main-login .showSide{display:none!important}.cbi-value-title{width:35%}.node-network-diagnostics>.main .cbi-map fieldset>div *{width:100%!important}.node-network-diagnostics>.main .cbi-map fieldset>div input[type=text]{}.node-network-diagnostics>.main .cbi-map fieldset>div:nth-child(4) input[type=text]{margin:0!important}.node-network-diagnostics>.main .cbi-map fieldset>div select,.node-network-diagnostics>.main .cbi-map fieldset>div input[type=button]{margin:1rem 0 0}.node-network-diagnostics>.main .cbi-map fieldset>div{width:100%!important}.node-main-login>.main .cbi-value-title{text-align:left}img[src*="/luci-static/resources/cbi/add.gif"]{right:45px;display:block;position:absolute;margin-top:-34px}img[src*="/luci-static/resources/cbi/remove.gif"]{right:45px;display:block;position:absolute;margin-top:-34px}img[src*="/luci-static/resources/cbi/reload.gif"]{right:45px;display:block;position:absolute;margin-top:-34px}#detail-bubble{left:unset!important;width:unset!important}#detail-bubble.in{color:#000;padding-bottom:calc(60px + env(safe-area-inset-bottom));left:unset!important;width:calc(100vw)!important}#detail-bubble .head{display:block;overflow:auto}#detail-bubble #bubble-table{display:inline-table;overflow:auto}header{box-shadow:0 2px 4px rgba(0,0,0,.08)}}@media screen and (max-width:700px){#cbi-vssr-servers .cbi-button-add{position:static!important;width:auto!important;height:2rem!important;line-height:2rem!important;color:#fff;display:block;padding:0!important;font-size:.92rem;border-radius:10px!important;box-shadow:none;background-image:none}#cbi-vssr-servers .cbi-section-table-row{margin:10px 0!important}#cbi-vssr-servers .p-in5{padding-bottom:10px!important;margin:0!important}#cbi-vssr-servers .cbi-page-actions{padding-bottom:10px!important}#maincontent>.container{margin:20px}#detail-bubble{left:unset!important;width:unset!important}#detail-bubble.in{color:#000;padding-bottom:calc(60px + env(safe-area-inset-bottom));left:unset!important;width:calc(100vw)!important}#detail-bubble .head{display:block;overflow:auto}#detail-bubble #bubble-table{display:inline-table;overflow:auto}}@media screen and (max-width:470px){#detail-bubble{left:unset!important;width:unset!important}#detail-bubble.in{color:#000;padding-bottom:calc(60px + env(safe-area-inset-bottom));left:unset!important;width:calc(100vw)!important}#detail-bubble .head{display:block;overflow:auto}#detail-bubble #bubble-table{display:block;overflow:auto}.main-right>#maincontent{overflow:auto}div [id*=cbi-network-] [id*=-__status] table td,div [id*=cbi-wireless] [id*=-__status] table td{white-space:normal}.node-system-leds .cbi-section em,.node-network-network #cbi-network .cbi-map .cbi-section-table cbi-section-table-row,.node-network-network #cbi-network .cbi-map .cbi-section-table td{display:block}.node-network-network #cbi-network .cbi-map .cbi-section-table td{width:100%!important;text-align:center!important;white-space:normal}.node-network-network #cbi-network .cbi-map .cbi-button{min-width:60px!important}.node-network-network .cbi-section-table .cbi-section-table-titles .cbi-section-table-cell{flex:1!important}.node-network-network .cbi-section-table .cbi-section-table-titles th:nth-child(2){text-align:center!important}.node-network-network .cbi-section-table .cbi-section-table-titles{display:flex}.node-network-wireless fieldset:nth-child(1) table>tbody>tr>td,.node-network-wireless fieldset:nth-child(2) table>tbody>tr>td{white-space:normal}}@media screen and (max-width:370px){fieldset{}select{width:100%}header{height:55px}h3{padding:0 10px 10px}.showSide{height:45px}#maincontent>.container{margin:20px}.main{top:45px}.main-left{top:45px}.main>.main-left>.nav>.slide>.menu{}.main>.main-left>.nav>.slide>.slide-menu>li>a{}.cbi-value{margin-bottom:20px;display:table;padding:0;border-bottom:none}.cbi-value-title{width:100%;font-weight:700;float:left;padding:0;margin:0;margin-bottom:.25rem}.cbi-section-node{padding:10px!important}.cbi-value-description{width:100%;display:block}.cbi-value>.cbi-value-field{display:block;float:left;width:100%}img[src*="/luci-static/resources/cbi/add.gif"]{right:45px;display:block;position:absolute;margin-top:-34px}img[src*="/luci-static/resources/cbi/remove.gif"]{right:45px;display:block;position:absolute;margin-top:-34px}img[src*="/luci-static/resources/cbi/reload.gif"]{right:45px;display:block;position:absolute;margin-top:-34px}.cbi-section-node>.cbi-value:nth-of-type(2n){background-color:var(--sectionbgColor)}.cbi-tabcontainer>.cbi-value:nth-of-type(2n){background-color:var(--sectionbgColor)}div>.cbi-value:nth-of-type(2n){background-color:var(--sectionbgColor)}.node-main-login>.main .cbi-value{padding:0}.node-main-login>.main form>div:nth-last-child(1){margin-top:2rem}.node-main-login>.main fieldset{margin:0;padding:.5rem}#container\.network\.lan\.physical .cbi-value-title,#cbi-network-1-_ifname .cbi-value-title{width:35%}#cbi-network-1-_ifname .cbi-value-field{width:65%}h2{font-size:1.2rem;text-transform:capitalize}select,input{}input[type=checkbox]{height:1.2rem!important;width:1.2rem!important}#swaptotal div div small,#swapfree div div small,#swapcache div div small,#memfree div div small,#membuff div div small,#conns div div small,#memcache div div small,#memtotal div div small{}#swaptotal div div,#swapfree div div,#swapcache div div,#memfree div div,#membuff div div,#conns div div,#memcache div div,#memtotal div div{}.node-status-iptables>.main div>.cbi-map>form input[type=submit]{margin:0}#cbi-samba-cfg010f89-_tmpl .cbi-value-title{width:15%}#cbi-samba-cfg010f89-_tmpl .cbi-value-field{width:95%}#detail-bubble{left:unset!important;width:unset!important}#detail-bubble.in{color:#000;padding-bottom:calc(60px + env(safe-area-inset-bottom));left:unset!important;width:calc(100vw)!important}#detail-bubble .head{display:block;overflow:auto}#detail-bubble #bubble-table{display:block;overflow:auto}}@media screen and (max-width:315px){.label{position:absolute;right:5px;top:-70px}}#intervalSelect{height:40px!important}.commandbox div{position:unset!important}#cbi-netspeedtest-homebox-{display:unset!important}.node-status-realtime .container{overflow:auto}.node-network-network div[onclick*="document.getElementById('cbid.network."],#cbi-network div[onclick*="document.getElementById('cbid.network."]{background-color:unset!important}form[action="/cgi-bin/luci/admin/network/wireless"] input[class="cbi-button cbi-button-reset"],form[action="/cgi-bin/luci/admin/network/wireless_join"] input[class="cbi-button cbi-input-find"]{height:25px;min-width:80px}.node-services-aliyundrive-webdav #mask-box{background:transparent}.node-services-ddns #cbi-ddns-service input{width:unset}.node-services-ddns .cbi-value input[type=password],.node-services-ddns .cbi-value input[type=text]{width:100%!important}.fb-container .cbi-button{border-radius:var(--commonRadius0);margin:3px 3px 3px 0;height:unset!important}.node-system-commands h3{text-transform:unset}.node-system-commands .commandbox{width:auto;display:inline-block;float:none}.node-system-commands .commandbox p{word-break:keep-all;white-space:nowrap}.node-system-commands div.cbi-map fieldset.cbi-section{align-items:center;text-align:center}.node-system-commands #cbi-luci.cbi-map fieldset.cbi-section{align-items:unset;text-align:unset}.node-network-network .ifacebox strong{color:var(--ifaceboxFontColor);padding:5px}.node-network-firewall .zonebadge strong,.node-network-firewall label strong{color:var(--ifaceboxFontColor)}.node-services-openclash ul li.selected{background-color:var(--liSelectedColor)!important}.node-services-openclash .cbi-button-reset,.node-services-openclash .cbi-input-remove{max-width:unset!important}.node-services-openclash #tab-header ul li.selected,.node-services-openclash #tab-header ul li{color:#000!important;background-color:unset!important}.node-nas-qbittorrent p#qBittorrent_status input{line-height:unset}.node-system-diskman.dialog-format-active #dialog_format .dialog_box{background:var(--alertBackground);border-radius:var(--commonRadius1)}.node-services-watchcat-plus select[id*="cbi.opt.watchcat"]{width:auto}.node-nas-fileassistant .fb-container .cbi-value-owner,.node-nas-fileassistant .fb-container .cbi-value-perm{display:table-cell}.node-services-adguardhome input[onclick*="window.open('http://'+window.location.hostname+':"]{line-height:0} diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/favicon.ico b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/favicon.ico new file mode 100644 index 0000000000..e65f203106 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/favicon.ico differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/GenJyuuGothic-Medium.otf b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/GenJyuuGothic-Medium.otf new file mode 100644 index 0000000000..916b4a11d0 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/GenJyuuGothic-Medium.otf differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.eot b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.eot new file mode 100644 index 0000000000..9e6ffc9b82 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.eot differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.svg b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.svg new file mode 100644 index 0000000000..d38d057da3 --- /dev/null +++ b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.svg @@ -0,0 +1,16 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + \ No newline at end of file diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.ttf b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.ttf new file mode 100644 index 0000000000..84669323e9 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.ttf differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.woff b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.woff new file mode 100644 index 0000000000..00cf84ea03 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/font.woff differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/iconfont-Regular.ttf b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/iconfont-Regular.ttf new file mode 100644 index 0000000000..033794e517 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/iconfont-Regular.ttf differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/iconfont-Regular.woff b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/iconfont-Regular.woff new file mode 100644 index 0000000000..45714f9e96 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/iconfont-Regular.woff differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/iconfont-Regular.woff2 b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/iconfont-Regular.woff2 new file mode 100644 index 0000000000..1de5ca5090 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/fonts/iconfont-Regular.woff2 differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/add.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/add.png new file mode 100644 index 0000000000..c85ee10a09 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/add.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/apple-touch-icon.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/apple-touch-icon.png new file mode 100644 index 0000000000..1baa5c7e45 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/apple-touch-icon.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/bridge.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/bridge.png new file mode 100644 index 0000000000..cd0ce109b7 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/bridge.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/bridge_disabled.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/bridge_disabled.png new file mode 100644 index 0000000000..c603b970e2 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/bridge_disabled.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/ethernet.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/ethernet.png new file mode 100644 index 0000000000..eae05cc5f5 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/ethernet.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/ethernet_disabled.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/ethernet_disabled.png new file mode 100644 index 0000000000..6624680987 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/ethernet_disabled.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/home.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/home.png new file mode 100644 index 0000000000..c8e900a937 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/home.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/icon.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/icon.png new file mode 100644 index 0000000000..c98e8883df Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/icon.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/link.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/link.png new file mode 100644 index 0000000000..e5307d9bcc Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/link.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/loading.gif b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/loading.gif new file mode 100644 index 0000000000..a84d1cac20 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/loading.gif differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/openclash.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/openclash.png new file mode 100644 index 0000000000..8aed32abd0 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/openclash.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/port_down.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/port_down.png new file mode 100644 index 0000000000..7e9edacba5 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/port_down.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/port_up.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/port_up.png new file mode 100644 index 0000000000..2cca1be8b4 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/port_up.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/rank.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/rank.png new file mode 100644 index 0000000000..eccc5c1053 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/rank.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/reload.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/reload.png new file mode 100644 index 0000000000..192b9addbe Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/reload.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/remove.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/remove.png new file mode 100644 index 0000000000..fce54d92aa Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/remove.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-0-25.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-0-25.png new file mode 100644 index 0000000000..00eaf3d4e0 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-0-25.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-0.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-0.png new file mode 100644 index 0000000000..a24d883c74 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-0.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-25-50.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-25-50.png new file mode 100644 index 0000000000..ab12b5ef1f Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-25-50.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-50-75.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-50-75.png new file mode 100644 index 0000000000..0329cc6550 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-50-75.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-75-100.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-75-100.png new file mode 100644 index 0000000000..d033ab1cad Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-75-100.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-none.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-none.png new file mode 100644 index 0000000000..a03e99b76d Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/signal-none.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/ssr.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/ssr.png new file mode 100644 index 0000000000..ee9dfd7192 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/ssr.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/switch.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/switch.png new file mode 100644 index 0000000000..ade12a538e Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/switch.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/switch_disabled.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/switch_disabled.png new file mode 100644 index 0000000000..346d752789 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/switch_disabled.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/tunnel.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/tunnel.png new file mode 100644 index 0000000000..b5ff65a638 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/tunnel.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/tunnel_disabled.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/tunnel_disabled.png new file mode 100644 index 0000000000..ae4a60bbc1 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/tunnel_disabled.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/user.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/user.png new file mode 100644 index 0000000000..a0ffe2b489 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/user.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/vlan.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/vlan.png new file mode 100644 index 0000000000..5df3667c7c Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/vlan.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/vlan_disabled.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/vlan_disabled.png new file mode 100644 index 0000000000..c0cef94f27 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/vlan_disabled.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi.png new file mode 100644 index 0000000000..4897d4a017 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi_big.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi_big.png new file mode 100644 index 0000000000..f63c29acaa Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi_big.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi_big_disabled.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi_big_disabled.png new file mode 100644 index 0000000000..c0556b9a57 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi_big_disabled.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi_disabled.png b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi_disabled.png new file mode 100644 index 0000000000..b511e9bc04 Binary files /dev/null and b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/images/wifi_disabled.png differ diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/js/design.js b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/js/design.js new file mode 100644 index 0000000000..3bf754f275 --- /dev/null +++ b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/js/design.js @@ -0,0 +1,69 @@ +XHR=function() +{this.reinit=function() +{if(window.XMLHttpRequest){this._xmlHttp=new XMLHttpRequest();} +else if(window.ActiveXObject){this._xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");} +else{alert("xhr.js: XMLHttpRequest is not supported by this browser!");}} +this.busy=function(){if(!this._xmlHttp) +return false;switch(this._xmlHttp.readyState) +{case 1:case 2:case 3:return true;default:return false;}} +this.abort=function(){if(this.busy()) +this._xmlHttp.abort();} +this.get=function(url,data,callback) +{this.reinit();var xhr=this._xmlHttp;var code=this._encode(data);url=location.protocol+'//'+location.host+url;if(code) +if(url.substr(url.length-1,1)=='&') +url+=code;else +url+='?'+code;xhr.open('GET',url,true);xhr.onreadystatechange=function() +{if(xhr.readyState==4){var json=null;if(xhr.getResponseHeader("Content-Type")=="application/json"){try{json=eval('('+xhr.responseText+')');} +catch(e){json=null;}} +callback(xhr,json);}} +xhr.send(null);} +this.post=function(url,data,callback) +{this.reinit();var xhr=this._xmlHttp;var code=this._encode(data);xhr.onreadystatechange=function() +{if(xhr.readyState==4) +callback(xhr);} +xhr.open('POST',url,true);xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');xhr.send(code);} +this.cancel=function() +{this._xmlHttp.onreadystatechange=function(){};this._xmlHttp.abort();} +this.send_form=function(form,callback,extra_values) +{var code='';for(var i=0;i');}}}} +$(document).ready(()=>{settingsStatusRealtimeOverflow();});})(jQuery); diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/js/jquery.min.js b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/js/jquery.min.js new file mode 100644 index 0000000000..fde8714283 --- /dev/null +++ b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.4 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.4",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssHas=ce(function(){try{return C.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssHas||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",v.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 .loading").fadeOut();function trimText(text){return text.replace(/[ \t\n\r]+/g," ");} +var lastNode=undefined;var mainNodeName=undefined;var nodeUrl="";(function(node){if(node[0]=="admin"){luciLocation=[node[1],node[2]];}else{luciLocation=node;} +for(var i in luciLocation){nodeUrl+=luciLocation[i];if(i!=luciLocation.length-1){nodeUrl+="/";}}})(luciLocation);function getCurrentNodeByUrl(){if(!$('body').hasClass('logged-in')){luciLocation=["Main","Login"];return true;} +const urlReg=new RegExp(nodeUrl+"$") +var ret=false;$(".main > .main-left > .nav > .slide > .active").next(".slide-menu").stop(true).slideUp("fast");$(".main > .main-left > .nav > .slide > .menu").removeClass("active");$(".main > .main-left > .nav > .slide > .menu").each(function(){var ulNode=$(this);ulNode.next().find("a").each(function(){var that=$(this);var href=that.attr("href");if(urlReg.test(href)){ulNode.click();ulNode.next(".slide-menu").stop(true,true);lastNode=that.parent();lastNode.addClass("active");ret=true;return true;}});});return ret;} +$(".main > .main-left > .nav > .slide > .menu").click(function(){var ul=$(this).next(".slide-menu");var menu=$(this);if(!menu.hasClass("exit")){$(".main > .main-left > .nav > .slide > .active").next(".slide-menu").stop(true).slideUp("fast");$(".main > .main-left > .nav > .slide > .menu").removeClass("active");if(!ul.is(":visible")){menu.addClass("active");ul.addClass("active");ul.stop(true).slideDown("fast");}else{ul.stop(true).slideUp("fast",function(){menu.removeClass("active");ul.removeClass("active");});} +return false;}});$(".main > .main-left > .nav > .slide > .slide-menu > li > a").click(function(){if(lastNode!=undefined) +lastNode.removeClass("active");$(this).parent().addClass("active");$(".main > .loading").fadeIn("fast");return true;});$(".main > .main-left > .nav > .slide > .slide-menu > li").click(function(){if(lastNode!=undefined) +lastNode.removeClass("active");$(this).addClass("active");$(".main > .loading").fadeIn("fast");window.location=$($(this).find("a")[0]).attr("href");return false;});if(getCurrentNodeByUrl()){mainNodeName="node-"+luciLocation[0]+"-"+luciLocation[1];mainNodeName=mainNodeName.replace(/[ \t\n\r\/]+/g,"_").toLowerCase();$("body").addClass(mainNodeName);} +$("#maincontent > .container").find("a").each(function(){var that=$(this);var onclick=that.attr("onclick");if(onclick==undefined||onclick==""){that.click(function(){var href=that.attr("href");if(href.indexOf("#")==-1){$(".main > .loading").fadeIn("fast");return true;}});}});var showSide=false;$(".showSide").click(function(){if(showSide){$(".darkMask").stop(true).fadeOut("fast");$(".main-left").stop(true).animate({width:"0"},"fast");$(".main-right").css("overflow-y","auto");$("header>.container>.brand").css("padding","0 4.5rem") +showSide=false;}else{$(".darkMask").stop(true).fadeIn("fast");$(".main-left").stop(true).animate({width:"18rem"},"fast");$(".main-right").css("overflow-y","hidden");$(".showSide").css("display","none");$("header").css("box-shadow","18rem 2px 4px rgb(0 0 0 / 8%)") +$("header>.container>.brand").css("padding",'0rem') +showSide=true;}});$(".darkMask").click(function(){if(showSide){$(".darkMask").stop(true).fadeOut("fast");$(".main-left").stop(true).animate({width:"0"},"fast");$(".main-right").css("overflow-y","auto");$(".showSide").css("display","");$("header").css("box-shadow","0 2px 4px rgb(0 0 0 / 8%)") +$("header>.container>.brand").css("padding","0 4.5rem") +showSide=false;}});$(window).resize(function(){if($(window).width()>992){showSide=false;$(".showSide").css("display","");$(".main-left").css("width","");$(".darkMask").stop(true);$(".darkMask").css("display","none");$("header").css("box-shadow","18rem 2px 4px rgb(0 0 0 / 8%)") +$("header>.container>.brand").css("padding",'0rem')}else{$("header").css("box-shadow","0 2px 4px rgb(0 0 0 / 8%)") +$("header>.container>.brand").css("padding","0 4.5rem")} +if(showSide){$("header").css("box-shadow","18rem 2px 4px rgb(0 0 0 / 8%)") +$("header>.container>.brand").css("padding",'0rem')}});$(".main-right").focus();$(".main-right").blur();$("input").attr("size","0");if(mainNodeName!=undefined){switch(mainNodeName){case "node-status-system_log":case "node-status-kernel_log":$("#syslog").focus(function(){$("#syslog").blur();$(".main-right").focus();$(".main-right").blur();});break;case "node-status-firewall":var button=$(".node-status-firewall > .main fieldset li > a");button.addClass("cbi-button cbi-button-reset a-to-btn");break;case "node-system-reboot":var button=$(".node-system-reboot > .main > .main-right p > a");button.addClass("cbi-button cbi-input-reset a-to-btn");break;}}})(jQuery); diff --git a/openwrt-packages/luci-theme-design/htdocs/luci-static/design/manifest.json b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/manifest.json new file mode 100644 index 0000000000..ab331a61d4 --- /dev/null +++ b/openwrt-packages/luci-theme-design/htdocs/luci-static/design/manifest.json @@ -0,0 +1,25 @@ +{ +"name":"Design", +"short_name":"Design", +"description":"Design for OpenWRT by gngpp.", +"start_url":"/", +"scope": "/", +"orientation":"portrait", +"display":"standalone", +"prompt_message":"在主屏幕添加图标,以便快速访问 Design", +"icons":[ +{ +"src":"images/icon.png", +"sizes":"144x144", +"type":"image/png" +}, +{ +"src":"images/icon.png", +"sizes":"192x192", +"type":"image/png" +} +], +"gcm_sender_id":"524223308106", +"gcm_user_visible_only":true, +"status":"ok" +} \ No newline at end of file diff --git a/openwrt-packages/luci-theme-design/luasrc/view/themes/design/footer.htm b/openwrt-packages/luci-theme-design/luasrc/view/themes/design/footer.htm new file mode 100644 index 0000000000..d7df2075ca --- /dev/null +++ b/openwrt-packages/luci-theme-design/luasrc/view/themes/design/footer.htm @@ -0,0 +1,69 @@ +<%# + Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI + + luci-theme-material + Copyright 2015 Lutty Yang + + luci-theme-neobird + Copyright 2021 2smile + + luci-theme-design + Copyright 2023 gngpp + + Have a bug? Please create an issue here on GitHub! + https://github.com/LuttyYang/luci-theme-material/issues + + luci-theme-bootstrap: + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2012 David Menting + + MUI: + https://github.com/muicss/mui + + Licensed to the public under the Apache License 2.0 +-%> + +<% + local ver = require "luci.version" + local disp = require "luci.dispatcher" + local request = disp.context.path + local category = request[1] + local tree = disp.node() + local categories = disp.node_childs(tree) +%> + + + + + + + + diff --git a/openwrt-packages/luci-theme-design/luasrc/view/themes/design/header.htm b/openwrt-packages/luci-theme-design/luasrc/view/themes/design/header.htm new file mode 100644 index 0000000000..d491c4a802 --- /dev/null +++ b/openwrt-packages/luci-theme-design/luasrc/view/themes/design/header.htm @@ -0,0 +1,323 @@ +<%# + Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI + + luci-theme-material + Copyright 2015 Lutty Yang + + luci-theme-neobird + Copyright 2021 2smile + + luci-theme-design + Copyright 2023 2smile + + Have a bug? Please create an issue here on GitHub! + https://github.com/gngpp/luci-theme-design + + luci-theme-bootstrap: + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2012 David Menting + + MUI: + https://github.com/muicss/mui + + Licensed to the public under the Apache License 2.0 +-%> + +<% + local ver = require "luci.version" + local sys = require "luci.sys" + local util = require "luci.util" + local http = require "luci.http" + local disp = require "luci.dispatcher" + local uci = require 'luci.model.uci'.cursor() + local fs = require "nixio.fs" + + local boardinfo = util.ubus("system", "board") + local boardinfo={} + boardinfo.hostname=sys.hostname() + + local request = disp.context.path + local request2 = disp.context.request + + local category = request[1] + local cattree = category and disp.node(category) + + local leaf = request2[#request2] + + local tree = disp.node() + local node = disp.context.dispatched + + local categories = disp.node_childs(tree) + + local c = tree + local i, r + + -- tag all nodes leading to this page + for i, r in ipairs(request) do + if c.nodes and c.nodes[r] then + c = c.nodes[r] + c._menu_selected = true + end + end + + -- send as HTML5 + http.prepare_content("text/html") + + local function nodeurl(prefix, name, query) + local url = controller .. prefix .. name .. "/" + if query then + url = url .. http.build_querystring(query) + end + return pcdata(url) + end + + local function subtree(prefix, node, level) + if not level then + level = 1 + end + + local childs = disp.node_childs(node) + if #childs > 0 then + + if level > 2 then +%> +
    + <% + end + + local selected_node + local selected_name + local i, v + + for i, v in ipairs(childs) do + local nnode = node.nodes[v] + if nnode._menu_selected then + selected_node = nnode + selected_name = v + end + if level > 2 then + %> +
  • + <%=striptags(translate(nnode.title))%> +
  • + <% end + end + + if level > 2 then + %> +
+<% end + + if selected_node then + subtree(prefix .. selected_name .. "/", selected_node, level + 1) + end + end + + end + + -- Custom settings + local mode = 'normal' + local navbar = 'display' + local navbar_proxy = 'shadowsocksr' + if fs.access('/etc/config/design') then + mode = uci:get_first('design', 'global', 'mode') + navbar = uci:get_first('design', 'global', 'navbar') + navbar_proxy = uci:get_first('design', 'global', 'navbar_proxy') + end +-%> + + + + + + + <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI + + + + + + + + "> + "> + + + + + + + + + + + + <% if node and node.css then %> + + <% end -%> + <% if css then %> + + <% end -%> + + + + + + data-theme = "<%= mode %>" + <% end -%> + > + +
+ <% if mode == 'normal' then %> + + <% end -%> + +<% if navbar == 'display' then %> + +
+ +
+
+ +
+
+
+
+
+ <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> +
+

<%:No password set!%>

+ <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%>
+ "><%:Go to password configuration...%> +
+ <%- end -%> + <% if category then subtree("/" .. category .. "/", cattree) end %> + + + \ No newline at end of file diff --git a/openwrt-packages/luci-theme-design/preview/IMG_0328.PNG b/openwrt-packages/luci-theme-design/preview/IMG_0328.PNG new file mode 100644 index 0000000000..598e7b7ae7 Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/IMG_0328.PNG differ diff --git a/openwrt-packages/luci-theme-design/preview/IMG_0329.PNG b/openwrt-packages/luci-theme-design/preview/IMG_0329.PNG new file mode 100644 index 0000000000..86bb01ed13 Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/IMG_0329.PNG differ diff --git a/openwrt-packages/luci-theme-design/preview/firewall.png b/openwrt-packages/luci-theme-design/preview/firewall.png new file mode 100644 index 0000000000..a7e9af839a Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/firewall.png differ diff --git a/openwrt-packages/luci-theme-design/preview/home.png b/openwrt-packages/luci-theme-design/preview/home.png new file mode 100644 index 0000000000..5922ac04f1 Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/home.png differ diff --git a/openwrt-packages/luci-theme-design/preview/home1.png b/openwrt-packages/luci-theme-design/preview/home1.png new file mode 100644 index 0000000000..3a727e1ef2 Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/home1.png differ diff --git a/openwrt-packages/luci-theme-design/preview/iface.png b/openwrt-packages/luci-theme-design/preview/iface.png new file mode 100644 index 0000000000..91f7f7c587 Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/iface.png differ diff --git a/openwrt-packages/luci-theme-design/preview/light.png b/openwrt-packages/luci-theme-design/preview/light.png new file mode 100644 index 0000000000..834de3718d Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/light.png differ diff --git a/openwrt-packages/luci-theme-design/preview/login.png b/openwrt-packages/luci-theme-design/preview/login.png new file mode 100644 index 0000000000..bfd402f120 Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/login.png differ diff --git a/openwrt-packages/luci-theme-design/preview/login1.png b/openwrt-packages/luci-theme-design/preview/login1.png new file mode 100644 index 0000000000..c76eee65cc Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/login1.png differ diff --git a/openwrt-packages/luci-theme-design/preview/page.png b/openwrt-packages/luci-theme-design/preview/page.png new file mode 100644 index 0000000000..e20a579d40 Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/page.png differ diff --git a/openwrt-packages/luci-theme-design/preview/webapp_home.PNG b/openwrt-packages/luci-theme-design/preview/webapp_home.PNG new file mode 100644 index 0000000000..90c0a44336 Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/webapp_home.PNG differ diff --git a/openwrt-packages/luci-theme-design/preview/webapp_vssr.PNG b/openwrt-packages/luci-theme-design/preview/webapp_vssr.PNG new file mode 100644 index 0000000000..4214d2da34 Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/webapp_vssr.PNG differ diff --git a/openwrt-packages/luci-theme-design/preview/wifi.png b/openwrt-packages/luci-theme-design/preview/wifi.png new file mode 100644 index 0000000000..76dd255a60 Binary files /dev/null and b/openwrt-packages/luci-theme-design/preview/wifi.png differ diff --git a/openwrt-packages/luci-theme-design/root/etc/uci-defaults/30_luci-theme-design b/openwrt-packages/luci-theme-design/root/etc/uci-defaults/30_luci-theme-design new file mode 100644 index 0000000000..15ada67141 --- /dev/null +++ b/openwrt-packages/luci-theme-design/root/etc/uci-defaults/30_luci-theme-design @@ -0,0 +1,11 @@ +#!/bin/sh + +if [ "$PKG_UPGRADE" != 1 ]; then + uci batch <<-EOF + set luci.themes.Design=/luci-static/design + set luci.main.mediaurlbase=/luci-static/design + commit luci + EOF +fi + +exit 0 \ No newline at end of file diff --git a/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/subscribe.lua index 4229d607dd..0847dcbe7f 100755 --- a/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ b/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/subscribe.lua @@ -515,6 +515,7 @@ local function processData(szType, content, add_mode, add_from) --ss://2022-blake3-aes-256-gcm:YctPZ6U7xPPcU%2Bgp3u%2B0tx%2FtRizJN9K8y%2BuKlW2qjlI%3D@192.168.100.1:8888#Example3 --ss://2022-blake3-aes-256-gcm:YctPZ6U7xPPcU%2Bgp3u%2B0tx%2FtRizJN9K8y%2BuKlW2qjlI%3D@192.168.100.1:8888/?plugin=v2ray-plugin%3Bserver#Example3 --ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTp0ZXN0@xxxxxx.com:443?type=ws&path=%2Ftestpath&host=xxxxxx.com&security=tls&fp=&alpn=h3%2Ch2%2Chttp%2F1.1&sni=xxxxxx.com#test-1%40ss + --ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTp4eHh4eHhAeHh4eC54eHh4eC5jb206NTYwMDE#Hong%20Kong-01 local idx_sp = 0 local alias = "" @@ -549,7 +550,7 @@ local function processData(szType, content, add_mode, add_from) info = info:sub(1, find_index - 1) end - local hostInfo = split(UrlDecode(info), "@") + local hostInfo = split(base64Decode(info), "@") if hostInfo and #hostInfo > 0 then local host_port = hostInfo[#hostInfo] -- [2001:4860:4860::8888]:443 diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua index 07b3dfd83b..cc36546020 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua @@ -244,6 +244,16 @@ node_socks_bind_local:depends({ node = "nil", ["!reverse"] = true }) s:tab("DNS", translate("DNS")) +o = s:taboption("DNS", ListValue, "direct_dns_query_strategy", translate("Direct Query Strategy")) +o.default = "UseIP" +o:value("UseIP") +o:value("UseIPv4") +o:value("UseIPv6") + +o = s:taboption("DNS", Flag, "write_ipset_direct", translate("Direct DNS result write to IPSet"), translate("Perform the matching direct domain name rules into IP to IPSet/NFTSet, and then connect directly (not entering the core). Maybe conflict with some special circumstances.")) +o.default = "1" +o.rmempty = false + o = s:taboption("DNS", ListValue, "remote_dns_protocol", translate("Remote DNS Protocol")) o:value("tcp", "TCP") o:value("doh", "DoH") @@ -315,10 +325,6 @@ o.remove = function(self, section) end end -o = s:taboption("DNS", Flag, "write_ipset_direct", translate("Direct DNS result write to IPSet"), translate("Perform the matching direct domain name rules into IP to IPSet/NFTSet, and then connect directly (not entering the core). Maybe conflict with some special circumstances.")) -o.default = "1" -o.rmempty = false - o = s:taboption("DNS", Button, "clear_ipset", translate("Clear IPSet"), translate("Try this feature if the rule modification does not take effect.")) o.inputstyle = "remove" function o.write(e, e) @@ -331,6 +337,8 @@ for k, v in pairs(nodes_table) do s.fields["remote_dns_client_ip"]:depends({ node = v.id, remote_dns_protocol = "tcp" }) s.fields["remote_dns_client_ip"]:depends({ node = v.id, remote_dns_protocol = "doh" }) s.fields["dns_hosts"]:depends({ node = v.id }) + elseif v.type == "sing-box" then + s.fields["direct_dns_query_strategy"]:depends({ node = v.id }) end end diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua index 887857e9bc..cc0f31f492 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua @@ -334,7 +334,15 @@ if singbox_tags:find("with_quic") then o.default = "3" o:depends({ [option_name("protocol")] = "tuic" }) - o = s:option(Value, option_name("tuic_alpn"), translate("QUIC TLS ALPN")) + o = s:option(ListValue, option_name("tuic_alpn"), translate("QUIC TLS ALPN")) + o.default = "default" + o:value("default", translate("Default")) + o:value("h3") + o:value("h2") + o:value("h3,h2") + o:value("http/1.1") + o:value("h2,http/1.1") + o:value("h3,h2,http/1.1") o:depends({ [option_name("protocol")] = "tuic" }) end diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm index 56c4335959..8297c5968c 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm @@ -413,6 +413,27 @@ local api = require "luci.passwall2.api" if (v_password) { url = encodeURIComponent(v_password.value) + "@" + url } + } else if (v_type === "sing-box" && opt.get(dom_prefix + "protocol").value === "tuic") { + protocol = "tuic"; + var v_username = opt.get(dom_prefix + "uuid"); + var v_password = opt.get(dom_prefix + "password"); + var v_port = opt.get(dom_prefix + "port"); + url = encodeURIComponent(v_username.value) + + ":" + encodeURIComponent(v_password.value) + + "@" + _address + + ":" + v_port.value + "?"; + + var params = ""; + params += opt.query("sni", dom_prefix + "tls_serverName"); + params += opt.query("alpn", dom_prefix + "tuic_alpn"); + params += opt.query("congestion_control", dom_prefix + "tuic_congestion_control"); + params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure"); + + params += "#" + encodeURI(v_alias.value); + if (params[0] == "&") { + params = params.substring(1); + } + url += params; } if (url) { url = protocol.toLowerCase() + "://" + url; @@ -980,6 +1001,45 @@ local api = require "luci.passwall2.api" opt.set('remarks', decodeURI(m.hash.substr(1))); } } + if (ssu[0] === "tuic") { + if (has_singbox) { + dom_prefix = "singbox_" + opt.set('type', "sing-box"); + } + opt.set(dom_prefix + 'protocol', "tuic"); + var _parsedUrl = new URL("http://" + ssu[1]); + var username = _parsedUrl.username; + var password = _parsedUrl.password; + var hostname = _parsedUrl.hostname; + var port = _parsedUrl.port; + var search = _parsedUrl.search; + var hash = _parsedUrl.hash; + opt.set(dom_prefix + 'uuid', decodeURIComponent(username)); + opt.set(dom_prefix + 'password', decodeURIComponent(password)); + opt.set(dom_prefix + 'address', hostname); + opt.set(dom_prefix + 'port', port || "443"); + var queryParam = {}; + if (search.length > 1) { + var query = search.split('?') + var queryParams = query[1]; + var queryArray = queryParams.split('&'); + var params; + for (i = 0; i < queryArray.length; i++) { + params = queryArray[i].split('='); + queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || ''); + } + } + opt.set(dom_prefix + 'tuic_congestion_control', queryParam.congestion_control || 'cubic'); + opt.set(dom_prefix + 'tuic_alpn', queryParam.alpn || 'default'); + opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); + opt.set(dom_prefix + 'tls_allowInsecure', true); + if (queryParam.allowinsecure === '0') { + opt.set(dom_prefix + 'tls_allowInsecure', false); + } + if (hash) { + opt.set('remarks', decodeURIComponent(hash.substr(1))); + } + } if (dom_prefix && dom_prefix != null) { if (opt.get(dom_prefix + 'port').value) { opt.get(dom_prefix + 'port').focus(); diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/app.sh b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/app.sh index 92c98d1281..3b41dbc8d2 100644 --- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/app.sh +++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/app.sh @@ -286,7 +286,7 @@ lua_api() { run_xray() { local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password - local dns_listen_port remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache write_ipset_direct + local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache write_ipset_direct local loglevel log_file config_file local _extra_param="" eval_set_val $@ @@ -394,7 +394,7 @@ run_xray() { run_singbox() { local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password - local dns_listen_port remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache write_ipset_direct + local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache write_ipset_direct local loglevel log_file config_file local _extra_param="" eval_set_val $@ @@ -449,7 +449,7 @@ run_singbox() { [ -n "${direct_ipset}" ] && _extra_param="${_extra_param} -direct_ipset ${direct_ipset}" [ -n "${direct_nftset}" ] && _extra_param="${_extra_param} -direct_nftset ${direct_nftset}" } - _extra_param="${_extra_param} -direct_dns_udp_port ${DIRECT_DNS_UDP_PORT} -direct_dns_udp_server ${DIRECT_DNS_UDP_SERVER} -direct_dns_query_strategy UseIP" + _extra_param="${_extra_param} -direct_dns_udp_port ${DIRECT_DNS_UDP_PORT} -direct_dns_udp_server ${DIRECT_DNS_UDP_SERVER} -direct_dns_query_strategy ${direct_dns_query_strategy}" case "$remote_dns_protocol" in udp) @@ -656,7 +656,7 @@ run_global() { PROXY_IPV6_UDP=1 fi V2RAY_ARGS="flag=global node=$NODE redir_port=$REDIR_PORT" - V2RAY_ARGS="${V2RAY_ARGS} dns_listen_port=${TUN_DNS_PORT} remote_dns_query_strategy=${REMOTE_DNS_QUERY_STRATEGY} dns_cache=${DNS_CACHE}" + V2RAY_ARGS="${V2RAY_ARGS} dns_listen_port=${TUN_DNS_PORT} direct_dns_query_strategy=${DIRECT_DNS_QUERY_STRATEGY} remote_dns_query_strategy=${REMOTE_DNS_QUERY_STRATEGY} dns_cache=${DNS_CACHE}" local msg="${TUN_DNS} (直连DNS:${AUTO_DNS}" [ -n "$REMOTE_DNS_PROTOCOL" ] && { @@ -946,7 +946,7 @@ acl_app() { dnsmasq_port=11400 for item in $items; do index=$(expr $index + 1) - local enabled sid remarks sources node remote_dns_protocol remote_dns remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy + local enabled sid remarks sources node direct_dns_query_strategy remote_dns_protocol remote_dns remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy local _ip _mac _iprange _ipset _ip_or_mac rule_list config_file sid=$(uci -q show "${CONFIG}.${item}" | grep "=acl_rule" | awk -F '=' '{print $1}' | awk -F '.' '{print $2}') eval $(uci -q show "${CONFIG}.${item}" | cut -d'.' -sf 3-) @@ -975,6 +975,7 @@ acl_app() { tcp_proxy_mode="global" udp_proxy_mode="global" node=${node:-default} + direct_dns_query_strategy=${direct_dns_query_strategy:-UseIP} remote_dns_protocol=${remote_dns_protocol:-tcp} remote_dns=${remote_dns:-1.1.1.1} [ "$remote_dns_protocol" = "doh" ] && remote_dns=${remote_dns_doh:-https://1.1.1.1/dns-query} @@ -1009,7 +1010,7 @@ acl_app() { elif [ "${type}" = "sing-box" ] && [ -n "${SINGBOX_BIN}" ]; then run_func="run_singbox" fi - ${run_func} flag=acl_$sid node=$node redir_port=$redir_port socks_address=127.0.0.1 socks_port=$acl_socks_port dns_listen_port=${dns_port} direct_dns_query_strategy=UseIP remote_dns_protocol=${remote_dns_protocol} remote_dns_tcp_server=${remote_dns} remote_dns_udp_server=${remote_dns} remote_dns_doh="${remote_dns}" remote_dns_client_ip=${remote_dns_client_ip} remote_dns_detour=${remote_dns_detour} remote_fakedns=${remote_fakedns} remote_dns_query_strategy=${remote_dns_query_strategy} write_ipset_direct=${write_ipset_direct} config_file=${config_file} + ${run_func} flag=acl_$sid node=$node redir_port=$redir_port socks_address=127.0.0.1 socks_port=$acl_socks_port dns_listen_port=${dns_port} direct_dns_query_strategy=${direct_dns_query_strategy} remote_dns_protocol=${remote_dns_protocol} remote_dns_tcp_server=${remote_dns} remote_dns_udp_server=${remote_dns} remote_dns_doh="${remote_dns}" remote_dns_client_ip=${remote_dns_client_ip} remote_dns_detour=${remote_dns_detour} remote_fakedns=${remote_fakedns} remote_dns_query_strategy=${remote_dns_query_strategy} write_ipset_direct=${write_ipset_direct} config_file=${config_file} fi dnsmasq_port=$(get_new_port $(expr $dnsmasq_port + 1)) redirect_dns_port=$dnsmasq_port @@ -1040,7 +1041,7 @@ acl_app() { echo "${redir_port}" > $TMP_ACL_PATH/$sid/var_port } [ -n "$redirect_dns_port" ] && echo "${redirect_dns_port}" > $TMP_ACL_PATH/$sid/var_redirect_dns_port - unset enabled sid remarks sources node remote_dns_protocol remote_dns remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy + unset enabled sid remarks sources node direct_dns_query_strategy remote_dns_protocol remote_dns remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy unset _ip _mac _iprange _ipset _ip_or_mac rule_list config_file unset redirect_dns_port done @@ -1147,6 +1148,7 @@ TCP_PROXY_MODE="global" UDP_PROXY_MODE="global" LOCALHOST_PROXY=$(config_t_get global localhost_proxy '1') CLIENT_PROXY=$(config_t_get global client_proxy '1') +DIRECT_DNS_QUERY_STRATEGY=$(config_t_get global direct_dns_query_strategy UseIP) REMOTE_DNS_PROTOCOL=$(config_t_get global remote_dns_protocol tcp) REMOTE_DNS_DETOUR=$(config_t_get global remote_dns_detour remote) REMOTE_DNS=$(config_t_get global remote_dns 1.1.1.1:53 | sed 's/#/:/g' | sed -E 's/\:([^:]+)$/#\1/g') diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua index 0391c6f907..58018462c8 100755 --- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua +++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua @@ -480,6 +480,10 @@ local function processData(szType, content, add_mode, add_from) if info.net == 'grpc' then result.grpc_serviceName = info.path end + if info.net == 'splithttp' then + result.splithttp_host = info.host + result.splithttp_path = info.path + end if not info.security then result.security = "auto" end if info.tls == "tls" or info.tls == "1" then result.tls = "1" @@ -488,6 +492,11 @@ local function processData(szType, content, add_mode, add_from) else result.tls = "0" end + + if result.type == "sing-box" and (result.transport == "mkcp" or result.transport == "splithttp") then + log("跳过节点:" .. result.remarks ..",因Sing-Box不支持" .. szType .. "协议的" .. result.transport .. "传输方式,需更换Xray。") + return nil + end elseif szType == "ss" then result.type = "SS" @@ -737,10 +746,19 @@ local function processData(szType, content, add_mode, add_from) if params.serviceName then result.grpc_serviceName = params.serviceName end result.grpc_mode = params.mode end + if params.type == 'splithttp' then + result.splithttp_host = params.host + result.splithttp_path = params.path + end result.encryption = params.encryption or "none" result.flow = params.flow or nil + + if result.type == "sing-box" and (result.transport == "mkcp" or result.transport == "splithttp") then + log("跳过节点:" .. result.remarks ..",因Sing-Box不支持" .. szType .. "协议的" .. result.transport .. "传输方式,需更换Xray。") + return nil + end end elseif szType == "ssd" then result.type = "SS" @@ -884,6 +902,11 @@ local function processData(szType, content, add_mode, add_from) result.port = port result.tls_allowInsecure = allowInsecure_default and "1" or "0" + + if result.type == "sing-box" and (result.transport == "mkcp" or result.transport == "splithttp") then + log("跳过节点:" .. result.remarks ..",因Sing-Box不支持" .. szType .. "协议的" .. result.transport .. "传输方式,需更换Xray。") + return nil + end end elseif szType == 'hysteria' then local alias = "" @@ -991,6 +1014,59 @@ local function processData(szType, content, add_mode, add_from) result.hysteria2_obfs_password = params["obfs-password"] end end + elseif szType == 'tuic' then + local alias = "" + if content:find("#") then + local idx_sp = content:find("#") + alias = content:sub(idx_sp + 1, -1) + content = content:sub(0, idx_sp - 1) + end + result.remarks = UrlDecode(alias) + local Info = content + if content:find("@") then + local contents = split(content, "@") + if contents[1]:find(":") then + local userinfo = split(contents[1], ":") + result.uuid = UrlDecode(userinfo[1]) + result.password = UrlDecode(userinfo[2]) + end + Info = (contents[2] or ""):gsub("/%?", "?") + end + local query = split(Info, "?") + local host_port = query[1] + local params = {} + for _, v in pairs(split(query[2], '&')) do + local t = split(v, '=') + if #t > 1 then + params[string.lower(t[1])] = UrlDecode(t[2]) + end + end + if host_port:find(":") then + local sp = split(host_port, ":") + result.port = sp[#sp] + if api.is_ipv6addrport(host_port) then + result.address = api.get_ipv6_only(host_port) + else + result.address = sp[1] + end + else + result.address = host_port + end + result.tls_serverName = params.sni + result.tuic_alpn = params.alpn or "default" + result.tuic_congestion_control = params.congestion_control or "cubic" + if params.allowinsecure then + if params.allowinsecure == "1" or params.allowinsecure == "0" then + result.tls_allowInsecure = params.allowinsecure + else + result.tls_allowInsecure = string.lower(params.allowinsecure) == "true" and "1" or "0" + end + --log(result.remarks .. ' 使用节点AllowInsecure设定: '.. result.tls_allowInsecure) + else + result.tls_allowInsecure = allowInsecure_default and "1" or "0" + end + result.type = 'sing-box' + result.protocol = "tuic" else log('暂时不支持' .. szType .. "类型的节点订阅,跳过此节点。") return nil diff --git a/sing-box/go.mod b/sing-box/go.mod index 727d10f08a..fd9d9cd438 100644 --- a/sing-box/go.mod +++ b/sing-box/go.mod @@ -33,7 +33,7 @@ require ( github.com/sagernet/sing-shadowsocks v0.2.7 github.com/sagernet/sing-shadowsocks2 v0.2.0 github.com/sagernet/sing-shadowtls v0.1.4 - github.com/sagernet/sing-tun v0.4.0-beta.13.0.20240703164908-1f043289199d + github.com/sagernet/sing-tun v0.4.0-beta.13.0.20240825005607-c836de60c779 github.com/sagernet/sing-vmess v0.1.12 github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 github.com/sagernet/tfo-go v0.0.0-20231209031829-7b5343ac1dc6 diff --git a/sing-box/go.sum b/sing-box/go.sum index e30307962b..5ee6e5a95f 100644 --- a/sing-box/go.sum +++ b/sing-box/go.sum @@ -129,8 +129,8 @@ github.com/sagernet/sing-shadowsocks2 v0.2.0 h1:wpZNs6wKnR7mh1wV9OHwOyUr21VkS3wK github.com/sagernet/sing-shadowsocks2 v0.2.0/go.mod h1:RnXS0lExcDAovvDeniJ4IKa2IuChrdipolPYWBv9hWQ= github.com/sagernet/sing-shadowtls v0.1.4 h1:aTgBSJEgnumzFenPvc+kbD9/W0PywzWevnVpEx6Tw3k= github.com/sagernet/sing-shadowtls v0.1.4/go.mod h1:F8NBgsY5YN2beQavdgdm1DPlhaKQlaL6lpDdcBglGK4= -github.com/sagernet/sing-tun v0.4.0-beta.13.0.20240703164908-1f043289199d h1:2nBM9W9fOCM45hjlu1Fh9qyzBCgKEkq+SOuRCbCCs7c= -github.com/sagernet/sing-tun v0.4.0-beta.13.0.20240703164908-1f043289199d/go.mod h1:81JwnnYw8X9W9XvmZetSTTiPgIE3SbAbnc+EHKwPJ5U= +github.com/sagernet/sing-tun v0.4.0-beta.13.0.20240825005607-c836de60c779 h1:t8DtNP52S6n0nS1Iug+iPDPu+Tkje80reB0wLN6hJ5E= +github.com/sagernet/sing-tun v0.4.0-beta.13.0.20240825005607-c836de60c779/go.mod h1:81JwnnYw8X9W9XvmZetSTTiPgIE3SbAbnc+EHKwPJ5U= github.com/sagernet/sing-vmess v0.1.12 h1:2gFD8JJb+eTFMoa8FIVMnknEi+vCSfaiTXTfEYAYAPg= github.com/sagernet/sing-vmess v0.1.12/go.mod h1:luTSsfyBGAc9VhtCqwjR+dt1QgqBhuYBCONB/POhF8I= github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 h1:DImB4lELfQhplLTxeq2z31Fpv8CQqqrUwTbrIRumZqQ= diff --git a/small/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/small/luci-app-passwall/root/usr/share/passwall/subscribe.lua index 4229d607dd..0847dcbe7f 100755 --- a/small/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ b/small/luci-app-passwall/root/usr/share/passwall/subscribe.lua @@ -515,6 +515,7 @@ local function processData(szType, content, add_mode, add_from) --ss://2022-blake3-aes-256-gcm:YctPZ6U7xPPcU%2Bgp3u%2B0tx%2FtRizJN9K8y%2BuKlW2qjlI%3D@192.168.100.1:8888#Example3 --ss://2022-blake3-aes-256-gcm:YctPZ6U7xPPcU%2Bgp3u%2B0tx%2FtRizJN9K8y%2BuKlW2qjlI%3D@192.168.100.1:8888/?plugin=v2ray-plugin%3Bserver#Example3 --ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTp0ZXN0@xxxxxx.com:443?type=ws&path=%2Ftestpath&host=xxxxxx.com&security=tls&fp=&alpn=h3%2Ch2%2Chttp%2F1.1&sni=xxxxxx.com#test-1%40ss + --ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTp4eHh4eHhAeHh4eC54eHh4eC5jb206NTYwMDE#Hong%20Kong-01 local idx_sp = 0 local alias = "" @@ -549,7 +550,7 @@ local function processData(szType, content, add_mode, add_from) info = info:sub(1, find_index - 1) end - local hostInfo = split(UrlDecode(info), "@") + local hostInfo = split(base64Decode(info), "@") if hostInfo and #hostInfo > 0 then local host_port = hostInfo[#hostInfo] -- [2001:4860:4860::8888]:443 diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua index 07b3dfd83b..cc36546020 100644 --- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua +++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua @@ -244,6 +244,16 @@ node_socks_bind_local:depends({ node = "nil", ["!reverse"] = true }) s:tab("DNS", translate("DNS")) +o = s:taboption("DNS", ListValue, "direct_dns_query_strategy", translate("Direct Query Strategy")) +o.default = "UseIP" +o:value("UseIP") +o:value("UseIPv4") +o:value("UseIPv6") + +o = s:taboption("DNS", Flag, "write_ipset_direct", translate("Direct DNS result write to IPSet"), translate("Perform the matching direct domain name rules into IP to IPSet/NFTSet, and then connect directly (not entering the core). Maybe conflict with some special circumstances.")) +o.default = "1" +o.rmempty = false + o = s:taboption("DNS", ListValue, "remote_dns_protocol", translate("Remote DNS Protocol")) o:value("tcp", "TCP") o:value("doh", "DoH") @@ -315,10 +325,6 @@ o.remove = function(self, section) end end -o = s:taboption("DNS", Flag, "write_ipset_direct", translate("Direct DNS result write to IPSet"), translate("Perform the matching direct domain name rules into IP to IPSet/NFTSet, and then connect directly (not entering the core). Maybe conflict with some special circumstances.")) -o.default = "1" -o.rmempty = false - o = s:taboption("DNS", Button, "clear_ipset", translate("Clear IPSet"), translate("Try this feature if the rule modification does not take effect.")) o.inputstyle = "remove" function o.write(e, e) @@ -331,6 +337,8 @@ for k, v in pairs(nodes_table) do s.fields["remote_dns_client_ip"]:depends({ node = v.id, remote_dns_protocol = "tcp" }) s.fields["remote_dns_client_ip"]:depends({ node = v.id, remote_dns_protocol = "doh" }) s.fields["dns_hosts"]:depends({ node = v.id }) + elseif v.type == "sing-box" then + s.fields["direct_dns_query_strategy"]:depends({ node = v.id }) end end diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua index 887857e9bc..cc0f31f492 100644 --- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua +++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua @@ -334,7 +334,15 @@ if singbox_tags:find("with_quic") then o.default = "3" o:depends({ [option_name("protocol")] = "tuic" }) - o = s:option(Value, option_name("tuic_alpn"), translate("QUIC TLS ALPN")) + o = s:option(ListValue, option_name("tuic_alpn"), translate("QUIC TLS ALPN")) + o.default = "default" + o:value("default", translate("Default")) + o:value("h3") + o:value("h2") + o:value("h3,h2") + o:value("http/1.1") + o:value("h2,http/1.1") + o:value("h3,h2,http/1.1") o:depends({ [option_name("protocol")] = "tuic" }) end diff --git a/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm b/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm index 56c4335959..8297c5968c 100644 --- a/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm +++ b/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm @@ -413,6 +413,27 @@ local api = require "luci.passwall2.api" if (v_password) { url = encodeURIComponent(v_password.value) + "@" + url } + } else if (v_type === "sing-box" && opt.get(dom_prefix + "protocol").value === "tuic") { + protocol = "tuic"; + var v_username = opt.get(dom_prefix + "uuid"); + var v_password = opt.get(dom_prefix + "password"); + var v_port = opt.get(dom_prefix + "port"); + url = encodeURIComponent(v_username.value) + + ":" + encodeURIComponent(v_password.value) + + "@" + _address + + ":" + v_port.value + "?"; + + var params = ""; + params += opt.query("sni", dom_prefix + "tls_serverName"); + params += opt.query("alpn", dom_prefix + "tuic_alpn"); + params += opt.query("congestion_control", dom_prefix + "tuic_congestion_control"); + params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure"); + + params += "#" + encodeURI(v_alias.value); + if (params[0] == "&") { + params = params.substring(1); + } + url += params; } if (url) { url = protocol.toLowerCase() + "://" + url; @@ -980,6 +1001,45 @@ local api = require "luci.passwall2.api" opt.set('remarks', decodeURI(m.hash.substr(1))); } } + if (ssu[0] === "tuic") { + if (has_singbox) { + dom_prefix = "singbox_" + opt.set('type', "sing-box"); + } + opt.set(dom_prefix + 'protocol', "tuic"); + var _parsedUrl = new URL("http://" + ssu[1]); + var username = _parsedUrl.username; + var password = _parsedUrl.password; + var hostname = _parsedUrl.hostname; + var port = _parsedUrl.port; + var search = _parsedUrl.search; + var hash = _parsedUrl.hash; + opt.set(dom_prefix + 'uuid', decodeURIComponent(username)); + opt.set(dom_prefix + 'password', decodeURIComponent(password)); + opt.set(dom_prefix + 'address', hostname); + opt.set(dom_prefix + 'port', port || "443"); + var queryParam = {}; + if (search.length > 1) { + var query = search.split('?') + var queryParams = query[1]; + var queryArray = queryParams.split('&'); + var params; + for (i = 0; i < queryArray.length; i++) { + params = queryArray[i].split('='); + queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || ''); + } + } + opt.set(dom_prefix + 'tuic_congestion_control', queryParam.congestion_control || 'cubic'); + opt.set(dom_prefix + 'tuic_alpn', queryParam.alpn || 'default'); + opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); + opt.set(dom_prefix + 'tls_allowInsecure', true); + if (queryParam.allowinsecure === '0') { + opt.set(dom_prefix + 'tls_allowInsecure', false); + } + if (hash) { + opt.set('remarks', decodeURIComponent(hash.substr(1))); + } + } if (dom_prefix && dom_prefix != null) { if (opt.get(dom_prefix + 'port').value) { opt.get(dom_prefix + 'port').focus(); diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/app.sh b/small/luci-app-passwall2/root/usr/share/passwall2/app.sh index 92c98d1281..3b41dbc8d2 100644 --- a/small/luci-app-passwall2/root/usr/share/passwall2/app.sh +++ b/small/luci-app-passwall2/root/usr/share/passwall2/app.sh @@ -286,7 +286,7 @@ lua_api() { run_xray() { local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password - local dns_listen_port remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache write_ipset_direct + local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache write_ipset_direct local loglevel log_file config_file local _extra_param="" eval_set_val $@ @@ -394,7 +394,7 @@ run_xray() { run_singbox() { local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password - local dns_listen_port remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache write_ipset_direct + local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache write_ipset_direct local loglevel log_file config_file local _extra_param="" eval_set_val $@ @@ -449,7 +449,7 @@ run_singbox() { [ -n "${direct_ipset}" ] && _extra_param="${_extra_param} -direct_ipset ${direct_ipset}" [ -n "${direct_nftset}" ] && _extra_param="${_extra_param} -direct_nftset ${direct_nftset}" } - _extra_param="${_extra_param} -direct_dns_udp_port ${DIRECT_DNS_UDP_PORT} -direct_dns_udp_server ${DIRECT_DNS_UDP_SERVER} -direct_dns_query_strategy UseIP" + _extra_param="${_extra_param} -direct_dns_udp_port ${DIRECT_DNS_UDP_PORT} -direct_dns_udp_server ${DIRECT_DNS_UDP_SERVER} -direct_dns_query_strategy ${direct_dns_query_strategy}" case "$remote_dns_protocol" in udp) @@ -656,7 +656,7 @@ run_global() { PROXY_IPV6_UDP=1 fi V2RAY_ARGS="flag=global node=$NODE redir_port=$REDIR_PORT" - V2RAY_ARGS="${V2RAY_ARGS} dns_listen_port=${TUN_DNS_PORT} remote_dns_query_strategy=${REMOTE_DNS_QUERY_STRATEGY} dns_cache=${DNS_CACHE}" + V2RAY_ARGS="${V2RAY_ARGS} dns_listen_port=${TUN_DNS_PORT} direct_dns_query_strategy=${DIRECT_DNS_QUERY_STRATEGY} remote_dns_query_strategy=${REMOTE_DNS_QUERY_STRATEGY} dns_cache=${DNS_CACHE}" local msg="${TUN_DNS} (直连DNS:${AUTO_DNS}" [ -n "$REMOTE_DNS_PROTOCOL" ] && { @@ -946,7 +946,7 @@ acl_app() { dnsmasq_port=11400 for item in $items; do index=$(expr $index + 1) - local enabled sid remarks sources node remote_dns_protocol remote_dns remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy + local enabled sid remarks sources node direct_dns_query_strategy remote_dns_protocol remote_dns remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy local _ip _mac _iprange _ipset _ip_or_mac rule_list config_file sid=$(uci -q show "${CONFIG}.${item}" | grep "=acl_rule" | awk -F '=' '{print $1}' | awk -F '.' '{print $2}') eval $(uci -q show "${CONFIG}.${item}" | cut -d'.' -sf 3-) @@ -975,6 +975,7 @@ acl_app() { tcp_proxy_mode="global" udp_proxy_mode="global" node=${node:-default} + direct_dns_query_strategy=${direct_dns_query_strategy:-UseIP} remote_dns_protocol=${remote_dns_protocol:-tcp} remote_dns=${remote_dns:-1.1.1.1} [ "$remote_dns_protocol" = "doh" ] && remote_dns=${remote_dns_doh:-https://1.1.1.1/dns-query} @@ -1009,7 +1010,7 @@ acl_app() { elif [ "${type}" = "sing-box" ] && [ -n "${SINGBOX_BIN}" ]; then run_func="run_singbox" fi - ${run_func} flag=acl_$sid node=$node redir_port=$redir_port socks_address=127.0.0.1 socks_port=$acl_socks_port dns_listen_port=${dns_port} direct_dns_query_strategy=UseIP remote_dns_protocol=${remote_dns_protocol} remote_dns_tcp_server=${remote_dns} remote_dns_udp_server=${remote_dns} remote_dns_doh="${remote_dns}" remote_dns_client_ip=${remote_dns_client_ip} remote_dns_detour=${remote_dns_detour} remote_fakedns=${remote_fakedns} remote_dns_query_strategy=${remote_dns_query_strategy} write_ipset_direct=${write_ipset_direct} config_file=${config_file} + ${run_func} flag=acl_$sid node=$node redir_port=$redir_port socks_address=127.0.0.1 socks_port=$acl_socks_port dns_listen_port=${dns_port} direct_dns_query_strategy=${direct_dns_query_strategy} remote_dns_protocol=${remote_dns_protocol} remote_dns_tcp_server=${remote_dns} remote_dns_udp_server=${remote_dns} remote_dns_doh="${remote_dns}" remote_dns_client_ip=${remote_dns_client_ip} remote_dns_detour=${remote_dns_detour} remote_fakedns=${remote_fakedns} remote_dns_query_strategy=${remote_dns_query_strategy} write_ipset_direct=${write_ipset_direct} config_file=${config_file} fi dnsmasq_port=$(get_new_port $(expr $dnsmasq_port + 1)) redirect_dns_port=$dnsmasq_port @@ -1040,7 +1041,7 @@ acl_app() { echo "${redir_port}" > $TMP_ACL_PATH/$sid/var_port } [ -n "$redirect_dns_port" ] && echo "${redirect_dns_port}" > $TMP_ACL_PATH/$sid/var_redirect_dns_port - unset enabled sid remarks sources node remote_dns_protocol remote_dns remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy + unset enabled sid remarks sources node direct_dns_query_strategy remote_dns_protocol remote_dns remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy unset _ip _mac _iprange _ipset _ip_or_mac rule_list config_file unset redirect_dns_port done @@ -1147,6 +1148,7 @@ TCP_PROXY_MODE="global" UDP_PROXY_MODE="global" LOCALHOST_PROXY=$(config_t_get global localhost_proxy '1') CLIENT_PROXY=$(config_t_get global client_proxy '1') +DIRECT_DNS_QUERY_STRATEGY=$(config_t_get global direct_dns_query_strategy UseIP) REMOTE_DNS_PROTOCOL=$(config_t_get global remote_dns_protocol tcp) REMOTE_DNS_DETOUR=$(config_t_get global remote_dns_detour remote) REMOTE_DNS=$(config_t_get global remote_dns 1.1.1.1:53 | sed 's/#/:/g' | sed -E 's/\:([^:]+)$/#\1/g') diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua index 0391c6f907..58018462c8 100755 --- a/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua +++ b/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua @@ -480,6 +480,10 @@ local function processData(szType, content, add_mode, add_from) if info.net == 'grpc' then result.grpc_serviceName = info.path end + if info.net == 'splithttp' then + result.splithttp_host = info.host + result.splithttp_path = info.path + end if not info.security then result.security = "auto" end if info.tls == "tls" or info.tls == "1" then result.tls = "1" @@ -488,6 +492,11 @@ local function processData(szType, content, add_mode, add_from) else result.tls = "0" end + + if result.type == "sing-box" and (result.transport == "mkcp" or result.transport == "splithttp") then + log("跳过节点:" .. result.remarks ..",因Sing-Box不支持" .. szType .. "协议的" .. result.transport .. "传输方式,需更换Xray。") + return nil + end elseif szType == "ss" then result.type = "SS" @@ -737,10 +746,19 @@ local function processData(szType, content, add_mode, add_from) if params.serviceName then result.grpc_serviceName = params.serviceName end result.grpc_mode = params.mode end + if params.type == 'splithttp' then + result.splithttp_host = params.host + result.splithttp_path = params.path + end result.encryption = params.encryption or "none" result.flow = params.flow or nil + + if result.type == "sing-box" and (result.transport == "mkcp" or result.transport == "splithttp") then + log("跳过节点:" .. result.remarks ..",因Sing-Box不支持" .. szType .. "协议的" .. result.transport .. "传输方式,需更换Xray。") + return nil + end end elseif szType == "ssd" then result.type = "SS" @@ -884,6 +902,11 @@ local function processData(szType, content, add_mode, add_from) result.port = port result.tls_allowInsecure = allowInsecure_default and "1" or "0" + + if result.type == "sing-box" and (result.transport == "mkcp" or result.transport == "splithttp") then + log("跳过节点:" .. result.remarks ..",因Sing-Box不支持" .. szType .. "协议的" .. result.transport .. "传输方式,需更换Xray。") + return nil + end end elseif szType == 'hysteria' then local alias = "" @@ -991,6 +1014,59 @@ local function processData(szType, content, add_mode, add_from) result.hysteria2_obfs_password = params["obfs-password"] end end + elseif szType == 'tuic' then + local alias = "" + if content:find("#") then + local idx_sp = content:find("#") + alias = content:sub(idx_sp + 1, -1) + content = content:sub(0, idx_sp - 1) + end + result.remarks = UrlDecode(alias) + local Info = content + if content:find("@") then + local contents = split(content, "@") + if contents[1]:find(":") then + local userinfo = split(contents[1], ":") + result.uuid = UrlDecode(userinfo[1]) + result.password = UrlDecode(userinfo[2]) + end + Info = (contents[2] or ""):gsub("/%?", "?") + end + local query = split(Info, "?") + local host_port = query[1] + local params = {} + for _, v in pairs(split(query[2], '&')) do + local t = split(v, '=') + if #t > 1 then + params[string.lower(t[1])] = UrlDecode(t[2]) + end + end + if host_port:find(":") then + local sp = split(host_port, ":") + result.port = sp[#sp] + if api.is_ipv6addrport(host_port) then + result.address = api.get_ipv6_only(host_port) + else + result.address = sp[1] + end + else + result.address = host_port + end + result.tls_serverName = params.sni + result.tuic_alpn = params.alpn or "default" + result.tuic_congestion_control = params.congestion_control or "cubic" + if params.allowinsecure then + if params.allowinsecure == "1" or params.allowinsecure == "0" then + result.tls_allowInsecure = params.allowinsecure + else + result.tls_allowInsecure = string.lower(params.allowinsecure) == "true" and "1" or "0" + end + --log(result.remarks .. ' 使用节点AllowInsecure设定: '.. result.tls_allowInsecure) + else + result.tls_allowInsecure = allowInsecure_default and "1" or "0" + end + result.type = 'sing-box' + result.protocol = "tuic" else log('暂时不支持' .. szType .. "类型的节点订阅,跳过此节点。") return nil diff --git a/small/v2ray-core/Makefile b/small/v2ray-core/Makefile index 2b06194c8e..0a299ff3ee 100644 --- a/small/v2ray-core/Makefile +++ b/small/v2ray-core/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2ray-core -PKG_VERSION:=5.17.0 +PKG_VERSION:=5.17.1 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/v2fly/v2ray-core/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=a321b60e215885393283a6e61c257b0d6218311acdb330dd9cb36726f2961e37 +PKG_HASH:=e6798d1a29f6a52a3c0cc7176803b73e292427bc7858d534d0529a278936b8b0 PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE