From 62f9844cbf923c4f86f8486c4ff903704c3a8261 Mon Sep 17 00:00:00 2001 From: dj-oyu <68707227+dj-oyu@users.noreply.github.com> Date: Sun, 22 Feb 2026 12:49:05 +0900 Subject: [PATCH] refactor: extract glass/hidden utilities, fix listener leaks in MiniApp - Extract .glass/.glass-interactive CSS utility from 6 selectors - Add .hidden utility class, replace all style.display toggling - Fix setupSlideApprove() listener leak with AbortController - Convert skill-item click handlers to event delegation - Extract loadTab() helper from loadPlan/loadSkills/loadSession - Skip API fetch on tab switch when SSE delivered within 5s - Convert render functions to template literals Co-Authored-By: Claude Opus 4.6 --- pkg/miniapp/static/index.html | 492 ++++++++++++++++++++-------------- 1 file changed, 294 insertions(+), 198 deletions(-) diff --git a/pkg/miniapp/static/index.html b/pkg/miniapp/static/index.html index 91176378d..a892f15cb 100644 --- a/pkg/miniapp/static/index.html +++ b/pkg/miniapp/static/index.html @@ -113,18 +113,24 @@ font-weight: 600; } + .hidden { display: none !important; } + + .glass { + background: var(--glass-bg); + border: 1px solid var(--glass-border); + border-radius: 16px; + box-shadow: 0 1px 3px var(--glass-shadow); + -webkit-backdrop-filter: blur(12px); + backdrop-filter: blur(12px); + } + .glass-interactive { border-color: var(--glass-border-interactive); } + .panel { display: none; padding: 16px; } .panel.active { display: block; } .card { - background: var(--glass-bg); - border: 1px solid var(--glass-border); - border-radius: 16px; padding: 16px; margin-bottom: 12px; - box-shadow: 0 1px 3px var(--glass-shadow); - -webkit-backdrop-filter: blur(12px); - backdrop-filter: blur(12px); } .card-title { @@ -239,19 +245,13 @@ /* Skills */ .skill-item { - background: var(--glass-bg); - border-radius: 16px; padding: 14px 14px 14px 16px; margin-bottom: 10px; cursor: pointer; transition: transform 0.2s cubic-bezier(0.25, 1, 0.5, 1), box-shadow 0.2s, border-color 0.2s; - border: 1px solid var(--glass-border-interactive); display: flex; align-items: center; gap: 12px; - box-shadow: 0 1px 3px var(--glass-shadow); - -webkit-backdrop-filter: blur(12px); - backdrop-filter: blur(12px); -webkit-tap-highlight-color: transparent; } @@ -327,8 +327,6 @@ flex: 1; padding: 10px 16px; border-radius: 20px; - border: 1px solid var(--glass-border-interactive); - background: var(--glass-bg); color: var(--text); font-size: 14px; outline: none; @@ -379,17 +377,12 @@ .cmd-tile { padding: 16px 14px; border-radius: 14px; - border: 1px solid var(--glass-border-interactive); - background: var(--glass-bg); color: var(--text); font-size: 15px; font-weight: 600; cursor: pointer; transition: transform 0.2s cubic-bezier(0.25, 1, 0.5, 1), background 0.15s; text-align: center; - box-shadow: 0 1px 3px var(--glass-shadow); - -webkit-backdrop-filter: blur(12px); - backdrop-filter: blur(12px); -webkit-tap-highlight-color: transparent; } @@ -411,12 +404,6 @@ white-space: pre-wrap; word-break: break-word; padding: 14px 16px; - background: var(--glass-bg); - border: 1px solid var(--glass-border); - border-radius: 16px; - box-shadow: 0 1px 3px var(--glass-shadow); - -webkit-backdrop-filter: blur(12px); - backdrop-filter: blur(12px); } .memory-view .md-h1 { @@ -493,6 +480,73 @@ color: var(--hint); } + /* Slide to Approve */ + .slide-approve-wrap { + margin-top: 16px; + } + + .slide-approve-track { + position: relative; + height: 52px; + border-radius: 26px; + overflow: hidden; + touch-action: none; + transition: background 0.3s, border-color 0.3s; + } + + .slide-approve-track.approved { + background: var(--done); + border-color: var(--done); + } + + .slide-approve-thumb { + position: absolute; + top: 2px; + left: 2px; + width: 48px; + height: 48px; + border-radius: 50%; + background: var(--btn); + color: var(--btn-text); + display: flex; + align-items: center; + justify-content: center; + font-size: 16px; + font-weight: 700; + cursor: grab; + transition: left 0.3s cubic-bezier(0.25, 1, 0.5, 1); + z-index: 1; + user-select: none; + -webkit-user-select: none; + } + + .slide-approve-thumb.dragging { + transition: none; + cursor: grabbing; + } + + .slide-approve-label { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + color: var(--hint); + font-size: 14px; + font-weight: 600; + pointer-events: none; + user-select: none; + -webkit-user-select: none; + transition: color 0.3s; + } + + .slide-approve-track.approved .slide-approve-label { + color: #fff; + } + @@ -509,39 +563,39 @@
Loading plan...
- +
Loading skills...
- +
Loading session...
- +
-
+
Quick Commands
- - - + + +
-
+
Custom Command
- +
-