From f02387c19052b7bc292ce3914f27c7ce2316aa61 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Jul 2026 20:20:47 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9B=84=20Sync=202026-07-11=2020:20:47?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- luci-app-passwall/Makefile | 2 +- .../model/cbi/passwall/client/type/ray.lua | 1 + .../luasrc/passwall/util_xray.lua | 14 +- .../.dev/src/assets/icons/search.svg | 4 + .../src/media/components/_float-button.css | 71 +++-- .../.dev/src/media/components/_search.css | 115 ++++++++ .../.dev/src/media/components/_tooltip.css | 45 +++ luci-theme-aurora/.dev/src/media/main.css | 1 + .../.dev/src/resource/menu-aurora.js | 256 ++++++++++++++++++ luci-theme-aurora/Makefile | 4 +- .../htdocs/luci-static/aurora/main.css | 2 +- .../luci-static/resources/menu-aurora.js | 2 +- .../ucode/template/themes/aurora/header.ut | 36 ++- natflow/Makefile | 4 +- tun2socks/Makefile | 4 +- 15 files changed, 521 insertions(+), 40 deletions(-) create mode 100644 luci-theme-aurora/.dev/src/assets/icons/search.svg create mode 100644 luci-theme-aurora/.dev/src/media/components/_search.css diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 63917509..73ba84c6 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall PKG_VERSION:=26.7.1 -PKG_RELEASE:=176 +PKG_RELEASE:=177 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua index a7aa5e1a..2e6c2ab3 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua @@ -514,6 +514,7 @@ o:value("ios") o:value("android") o:value("random") o:value("randomized") +o:value("unsafe") o.default = "chrome" o:depends({ [_n("tls")] = true, [_n("utls")] = true }) o:depends({ [_n("tls")] = true, [_n("reality")] = true }) diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua index b5d154cd..8063196a 100644 --- a/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -14,6 +14,8 @@ local GLOBAL = { local xray_version = api.get_app_version("xray") +local xray_min_version = "26.3.27" + local function get_domain_excluded() local path = string.format("/usr/share/%s/rules/domains_excluded", appname) local content = fs.readfile(path) @@ -789,7 +791,10 @@ function gen_config_server(node) }, -- 传出连接 outbounds = outbounds, - routing = routing + routing = routing, + version = { + min = xray_min_version + } } local alpn = {} @@ -1935,6 +1940,10 @@ function gen_config(var) if inbounds or outbounds then local config = { + env = (function() + local asset_location = uci:get(appname, "@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/" + return { XRAY_LOCATION_ASSET = asset_location } + end)(), log = { -- error = string.format("/tmp/etc/%s/%s.log", appname, node[".name"]), loglevel = loglevel @@ -1968,6 +1977,9 @@ function gen_config(var) -- statsInboundUplink = false, -- statsInboundDownlink = false -- } + }, + version = { + min = xray_min_version } } diff --git a/luci-theme-aurora/.dev/src/assets/icons/search.svg b/luci-theme-aurora/.dev/src/assets/icons/search.svg new file mode 100644 index 00000000..782d85cd --- /dev/null +++ b/luci-theme-aurora/.dev/src/assets/icons/search.svg @@ -0,0 +1,4 @@ + + + + diff --git a/luci-theme-aurora/.dev/src/media/components/_float-button.css b/luci-theme-aurora/.dev/src/media/components/_float-button.css index 2dd3735b..5ac98fb9 100644 --- a/luci-theme-aurora/.dev/src/media/components/_float-button.css +++ b/luci-theme-aurora/.dev/src/media/components/_float-button.css @@ -1,45 +1,80 @@ .floating-toolbar { - @apply fixed right-4 bottom-4 z-40 flex flex-col items-center max-md:right-3 max-md:bottom-3; + /* Detached-bubble speed dial: every shortcut is its own floating circle + (elevation only, no border), collapsing drops the bubbles into the + toggle one after another and the toggle's X rotates into a +. + + All motion is translate/scale/opacity/rotate — compositor-only (R1). + The stagger math runs on custom properties set by header.ut: + --fab-n (on .toolbar-list) item count + --fab-i (on each .toolbar-btn) index, 0 = top bubble + --fab-icon (on each .toolbar-btn) configured icon URL, drawn via + mask + bg-current so it follows the theme text color in both + modes (replaces the old + dark:invert). + Travel per step = bubble 44px + 10px gap = 3.375rem (40px + 8px = + 3rem below md). Expanding pops bottom-first ("jump up"), collapsing + drops top-first; --fab-d only ever delays the motion properties, so + hover color feedback stays instant. */ + /* The stack keeps its layout height when collapsed (the bubbles must + travel a real distance into the toggle), so the container itself must + not catch clicks — only the buttons do. */ + @apply pointer-events-none fixed right-4 bottom-4 z-40 flex flex-col items-center max-md:right-3 max-md:bottom-3; .toolbar-list { - @apply visible mb-2 grid origin-bottom grid-rows-[1fr] opacity-100 transition-[grid-template-rows,transform,opacity,visibility] duration-[250ms] ease-in-out max-md:mb-1.5; - - .toolbar-list-inner { - @apply border-hairline bg-surface-overlay flex min-h-0 flex-col items-center gap-2 overflow-hidden rounded-full border p-1 shadow-sm max-md:gap-1.5 max-md:p-0.5; - } + @apply mb-2.5 flex flex-col items-center gap-2.5 max-md:mb-2 max-md:gap-2; } .toolbar-btn { - @apply flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-full p-2 transition-[background-color,transform,opacity] duration-150 ease-in-out active:scale-95 max-md:h-9 max-md:w-9 max-md:p-1.5; + @apply text-text-muted bg-surface-overlay pointer-events-auto grid size-11 cursor-pointer place-items-center rounded-full shadow-md max-md:size-10; + /* `visibility` rides the same transition so collapsed bubbles leave the + tab order, but only after the drop finishes (it flips at the end of + its transition window, so the motion itself is never clipped). */ + @apply [transition:translate_320ms_cubic-bezier(0.34,1.25,0.5,1),scale_320ms_cubic-bezier(0.34,1.25,0.5,1),opacity_220ms_ease,visibility_320ms_ease,background-color_150ms_ease,color_150ms_ease]; + @apply [transition-delay:var(--fab-d,0s),var(--fab-d,0s),var(--fab-d,0s),var(--fab-d,0s),0s,0s]; - .icon { - @apply h-5 w-5 shrink-0 transition-transform duration-150 ease-in-out max-md:h-4 max-md:w-4; + &:hover { + @apply text-text bg-hover-faint; + } + + &:active { + @apply scale-[0.92]; } &:not(.toggle) { - @apply hover:bg-hover-faint no-underline hover:scale-110; + @apply [--fab-d:calc((var(--fab-n,1)-1-var(--fab-i,0))*60ms)] no-underline; + + /* The stagger delay must not defer press feedback: `scale` shares the + delayed transition channel, so without this a press on the top + bubble would acknowledge (n-1)*60ms late. Nested (not merged into + the base `:active`) so it outranks the delay set just above. */ + &:active { + @apply [--fab-d:0s]; + } + .icon { - @apply object-contain dark:invert; + @apply size-5 shrink-0 bg-current [mask:var(--fab-icon)_center/contain_no-repeat] max-md:size-4.5; } } &.toggle { - @apply bg-surface border-0 shadow-sm; + @apply text-text-subtle hover:text-text border-0; + .icon { - @apply transition-transform duration-150 ease-out; + @apply grid size-5 place-items-center transition-[rotate] duration-[250ms] ease-out max-md:size-4.5; + + svg { + @apply size-full; + } } } } &.collapsed { - .toolbar-list { - @apply pointer-events-none invisible translate-y-2 scale-90 grid-rows-[0fr] opacity-0; - } - .toolbar-btn { &:not(.toggle) { - @apply scale-50 opacity-0; + @apply pointer-events-none invisible scale-[0.35] opacity-0; + @apply [--fab-d:calc(var(--fab-i,0)*60ms)] translate-y-[calc((var(--fab-n,1)-var(--fab-i,0))*3.375rem)] max-md:translate-y-[calc((var(--fab-n,1)-var(--fab-i,0))*3rem)]; } + &.toggle .icon { @apply rotate-45; } diff --git a/luci-theme-aurora/.dev/src/media/components/_search.css b/luci-theme-aurora/.dev/src/media/components/_search.css new file mode 100644 index 00000000..9c5436a4 --- /dev/null +++ b/luci-theme-aurora/.dev/src/media/components/_search.css @@ -0,0 +1,115 @@ +/** + * Header route search — Spotlight-style palette, available in all three nav + * types (sidebar / mega-menu / dropdown). The toggle sits at the header's + * right edge next to #indicators; ⌘K / Ctrl+K toggles the panel globally. + * + * The panel is built lazily by menu-aurora.js on first open; its index is + * the navigation model the menus already render from (no extra requests). + */ + +.header-search-toggle { + @apply text-text relative mr-4 grid size-8 shrink-0 cursor-pointer place-items-center rounded-lg border-0 bg-transparent p-0 shadow-none transition-colors duration-150; + + /* Non-sidebar headers have no mr-auto crumb absorbing the slack — pull the + toggle right so it docks next to #indicators instead of landing in the + middle of the justify-between row. */ + body:not([data-nav-type="sidebar"]) & { + @apply ml-auto; + } + + &::before { + @apply size-4.5 bg-current content-[''] [mask:url('@assets/icons/search.svg')_center/contain_no-repeat]; + } + + &:hover { + @apply bg-hover-faint; + } + + &:focus-visible { + @apply ring-focus-ring ring-2 outline-none; + } +} + +.header-search-panel { + @apply border-hairline bg-surface/85 fixed top-24 left-1/2 z-120 w-[min(36rem,calc(100vw-2.5rem))] -translate-x-1/2 overflow-hidden rounded-2xl border shadow-xl backdrop-blur-xl backdrop-saturate-150 transition-[opacity,translate] duration-150 ease-out starting:-translate-y-2 starting:opacity-0; + + /*