From c1797059016c34a3fda773137e3f5a84e1c561a7 Mon Sep 17 00:00:00 2001 From: ItsBr0dyy <1500forlifejahh@gmail.com> Date: Wed, 26 Aug 2026 20:28:46 -0700 Subject: [PATCH 1/3] feat: add user lookup --- src/router/index.ts | 5 + src/views/user.vue | 656 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 661 insertions(+) create mode 100644 src/views/user.vue diff --git a/src/router/index.ts b/src/router/index.ts index c27a671..1be567b 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -95,6 +95,11 @@ const routes: RouteRecordRaw[] = [ name: 'NotFound', component: () => import('../views/notFound.vue'), }, + { + path: '/user/:username?', + name: 'User', + component: () => import('../views/user.vue'), + }, ]; const router = createRouter({ diff --git a/src/views/user.vue b/src/views/user.vue new file mode 100644 index 0000000..fe00423 --- /dev/null +++ b/src/views/user.vue @@ -0,0 +1,656 @@ + + + + + \ No newline at end of file From ac94cd6e2290f3008c8c9c7bef69fca74c7505e0 Mon Sep 17 00:00:00 2001 From: ItsBr0dyy <1500forlifejahh@gmail.com> Date: Wed, 26 Aug 2026 21:19:59 -0700 Subject: [PATCH 2/3] feat: added to Tools bar and added routes --- src/App.vue | 7 ++ src/views/user.vue | 236 ++++++++++++++++++++++++++------------------- 2 files changed, 143 insertions(+), 100 deletions(-) diff --git a/src/App.vue b/src/App.vue index 7079dc6..3ecb52f 100644 --- a/src/App.vue +++ b/src/App.vue @@ -89,6 +89,13 @@ watch(route, () => { style="margin-bottom: 10px;" >Emote Search +
  • + User Lookup +
  • (null), loading = ref(false), notFound = ref(false), searchQuery = ref(''), -activeTab = ref<'commands' | 'connections' | 'potatoes' | 'settings'>('commands'), +activeTab = ref('connections'), + +defaultTab = (e: Entry | null): Tab => (e?.channel ? 'commands' : 'connections'), + +resolveTab = (e: Entry | null): Tab => tabFromHash(route.hash) ?? defaultTab(e), + +setTab = (tab: Tab) => { + activeTab.value = tab; + router.replace({ path: route.path, hash: `#${tab}` }); +}, fetchUser = async (username: string | undefined) => { entry.value = null; @@ -145,6 +162,7 @@ fetchUser = async (username: string | undefined) => { const res = await fetchBackend(`users/${encodeURIComponent(username)}`); entry.value = res?.data?.[0] ?? null; if (!entry.value) notFound.value = true; + activeTab.value = resolveTab(entry.value); } catch (err) { console.error('[user] Failed to fetch user:', err); notFound.value = true; @@ -183,6 +201,15 @@ watch( (username) => fetchUser(username as string | undefined), { immediate: true }, ); + +watch( + () => route.hash, + (hash) => { + if (!entry.value) return; + const t = tabFromHash(hash as string); + if (t) activeTab.value = resolveTab(entry.value); + }, +); @@ -436,6 +474,10 @@ watch( font-size: 14px; } +.untracked { + font-style: italic; +} + .tabs { display: flex; gap: 6px; @@ -547,23 +589,13 @@ watch( backdrop-filter: blur(var(--panel-blur)); } -.conn-card img, -.conn-placeholder { +.conn-card img { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; } -.conn-placeholder { - background: rgba(255, 255, 255, 0.08); - display: flex; - align-items: center; - justify-content: center; - font-size: 11px; - color: #aaa; -} - .conn-platform { font-size: 11px; color: #aaa; @@ -643,14 +675,18 @@ watch( word-break: break-word; } -.count { - font-size: 12px; - color: #aaa; - font-weight: 400; -} - .empty-text { color: #aaa; font-size: 13px; } + +.no-channel { + background: var(--panel-bg); + border: 1px solid var(--panel-border); + box-shadow: var(--panel-shadow); + border-radius: 15px; + padding: 20px; + backdrop-filter: blur(var(--panel-blur)); + text-align: center; +} \ No newline at end of file From 47448b31a22912299f220dbc525fea7620eeb854 Mon Sep 17 00:00:00 2001 From: ItsBr0dyy <1500forlifejahh@gmail.com> Date: Wed, 26 Aug 2026 21:35:25 -0700 Subject: [PATCH 3/3] fix: made buttons the same as average buttons on the site --- src/views/user.vue | 76 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 20 deletions(-) diff --git a/src/views/user.vue b/src/views/user.vue index b9bde21..01dcb95 100644 --- a/src/views/user.vue +++ b/src/views/user.vue @@ -264,26 +264,32 @@ watch( -
    @@ -392,6 +398,21 @@ watch( text-shadow: none; } +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 1em 1.6em; + font-size: 0.9em; + font-weight: 600; + font-family: inherit; + background-color: #4CAF50; + cursor: pointer; + transition: border-color 0.25s; + text-shadow: -1px -1px 0 #333, 1px -1px 0 #333, -1px 1px 0 #333, 1px 1px 0 #333; + outline: auto -webkit-focus-ring-color; + outline-color: #f4f4f4; +} + .empty-state, .not-found { display: flex; @@ -681,12 +702,27 @@ watch( } .no-channel { + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; background: var(--panel-bg); border: 1px solid var(--panel-border); box-shadow: var(--panel-shadow); border-radius: 15px; - padding: 20px; + padding: 32px 20px; backdrop-filter: blur(var(--panel-blur)); text-align: center; } + +.no-channel-icon { + width: 56px; + height: 56px; +} + +.no-channel p { + margin: 0; + color: #aaa; + font-size: 13px; +} \ No newline at end of file