-
Notifications
You must be signed in to change notification settings - Fork 178
feat: signals UI enhancement #1383
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
31 commits
Select commit
Hold shift + click to select a range
a185903
initial commit
kolbeyang efb07a2
feat: cluster chart fills height, scrollable list, WITH FILL for zero…
kolbeyang 8ef021a
wip
kolbeyang 3f8252e
feat: clusters table styling and animations
kolbeyang cfa0055
feat: two-layer breadcrumb animation and fix unclustered count
kolbeyang 4bb6bba
wip
kolbeyang a3f5759
feat: split ClusterItem into own file and add delayed hover tooltip
kolbeyang 42085a9
feat: event detail drawer, fix cluster queries to use query engine, r…
kolbeyang fddecfc
fix: remove debug logs, fix type safety, race conditions, and cleanup
kolbeyang c86ce46
refactor: claude refactor state into store
kolbeyang bdf6eb2
feat: replace selectedClusterId with nuqs URL state, fix chart/list b…
kolbeyang 5075106
refactor: restructure manage-signal-sheet, add size variants to Input…
kolbeyang 9a72aec
fix: update imports for manage-signal-sheet folder restructure and ad…
kolbeyang ca80b5b
fix: cache cluster tree in store, use AbortController for stale fetch…
kolbeyang c6c9a6c
feat: redesign signal detail header with tab dropdown popover
kolbeyang 3a2948e
fix: reset isClusterStatsLoading on abort and early return paths
kolbeyang 2cf4b1e
fix: parse ClickHouse count values and stabilize useEffect deps
kolbeyang fb49384
feat: replace signal popover with tooltip, simplify trace picker, reu…
kolbeyang 0b7c8a6
refactor: extract signals list redesign, trace-picker, and manage-sig…
kolbeyang 4395a6d
refactor: consolidate cluster stats into single getClusterEventCounts…
kolbeyang 62fdf79
Add .agent-browser to .gitignore
kolbeyang 3234a93
feat: add optional dataType field to filter schema for type-aware Cli…
kolbeyang eaceee0
refactor: remove redundant parseInt loops for ClickHouse count results
kolbeyang f58f68c
refactor: fix store selectors, type cluster integer fields as number
kolbeyang b51af8a
refactor: add shallow equality to array-returning store selectors
kolbeyang 48338c1
Merge remote-tracking branch 'origin/dev' into feat/signals-visualiza…
kolbeyang 19524e5
fix: resolve merge conflicts from dev (duplicate prompt field, remove…
kolbeyang badd838
fix: add shallow equality to array/map-returning store selectors
kolbeyang a64250d
feat: show created and updated timestamps on cluster item hover
kolbeyang 1ec2f99
fix: guard against invalid cluster timestamps in hover tooltip
kolbeyang 3dfe965
fix: apply WITH FILL per-column to prevent cross-cluster gap filling
kolbeyang File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5,3 +5,4 @@ | |
| .idea | ||
| target/ | ||
| .claude/ | ||
| .agent-browser/ | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 5 additions & 6 deletions
11
...ectId]/signals/[id]/events/stats/route.ts → ...gnals/[id]/events/clusters/stats/route.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,7 @@ | ||
| import { type NextRequest } from "next/server"; | ||
| import { prettifyError, z, ZodError } from "zod/v4"; | ||
|
|
||
| import { generateSql } from "@/lib/actions/sql"; | ||
| import { generateSql } from "@/lib/actions/sql/generate"; | ||
|
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm generateSql actually isn't exported from |
||
|
|
||
| const GenerateSchema = z.object({ | ||
| prompt: z.string().min(1, "Prompt is required"), | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
91 changes: 91 additions & 0 deletions
91
frontend/components/signal/clusters-section/cluster-breadcrumb.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,91 @@ | ||
| "use client"; | ||
|
|
||
| import { AnimatePresence, motion } from "framer-motion"; | ||
|
|
||
| import { type ClusterNode } from "./utils"; | ||
|
|
||
| interface ClusterBreadcrumbProps { | ||
| breadcrumb: ClusterNode[]; | ||
| selectedClusterId: string | null; | ||
| onNavigateToBreadcrumb: (index: number) => void; | ||
| } | ||
|
|
||
| const slideIn = { | ||
| initial: { opacity: 0.3, x: -45 }, | ||
| animate: { opacity: 1, x: 0, transition: { type: "spring", stiffness: 300, damping: 30, mass: 0.3 } }, | ||
| exit: { | ||
| opacity: 0.3, | ||
| x: -20, | ||
| transition: { duration: 0.1, ease: "easeOut" }, | ||
| }, | ||
| }; | ||
|
|
||
| const slashSlideIn = { | ||
| initial: { opacity: 0.3, x: -12 }, | ||
| animate: { opacity: 1, x: 0, transition: { type: "spring", stiffness: 300, damping: 30, mass: 0.8 } }, | ||
| exit: { | ||
| opacity: 0.3, | ||
| x: -8, | ||
| transition: { duration: 0.1, ease: "easeOut" }, | ||
| }, | ||
| }; | ||
|
|
||
| const levelTransition = { | ||
| initial: { opacity: 0, width: 0 }, | ||
| animate: { opacity: 1, width: "auto" }, | ||
| exit: { opacity: 0, width: 0 }, | ||
| transition: { type: "spring", stiffness: 300, damping: 30, mass: 0.3 }, | ||
| }; | ||
|
|
||
| // Slash width (~6px at text-sm) + gap to match parent's gap-2 (8px) on each side | ||
| const SLASH_CONTAINER_PL = "pl-[22px]"; | ||
|
|
||
| export default function ClusterBreadcrumb({ | ||
| breadcrumb, | ||
| selectedClusterId, | ||
| onNavigateToBreadcrumb, | ||
| }: ClusterBreadcrumbProps) { | ||
| return ( | ||
| <div className="flex items-center text-sm min-w-0 pl-1"> | ||
| <button | ||
| className={`hover:underline shrink-0 ${!selectedClusterId ? "text-secondary-foreground" : "text-muted-foreground"}`} | ||
| onClick={() => onNavigateToBreadcrumb(-1)} | ||
| > | ||
| Event clusters | ||
| </button> | ||
|
|
||
| {/* Outer: handles levels appearing/disappearing */} | ||
| <AnimatePresence initial={false}> | ||
| {breadcrumb.map((node, index) => { | ||
| const isLast = index === breadcrumb.length - 1; | ||
| return ( | ||
| <motion.div | ||
| key={index} | ||
cursor[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| className={`relative min-w-0 flex-shrink overflow-hidden ${SLASH_CONTAINER_PL}`} | ||
| style={{ maskImage: "linear-gradient(to right, transparent, black 12px, black)" }} | ||
| {...levelTransition} | ||
| > | ||
| {/* Inner: handles swaps within this level (e.g. sibling leaf selection) */} | ||
| <AnimatePresence initial={false} mode="wait"> | ||
| <motion.div key={node.id} className="flex"> | ||
| <motion.span className="absolute left-[8px] top-0 text-muted-foreground" {...slashSlideIn}> | ||
| / | ||
| </motion.span> | ||
| <motion.button | ||
| className={`hover:underline truncate block max-w-full text-left ${ | ||
| isLast ? "text-secondary-foreground" : "text-muted-foreground" | ||
| }`} | ||
| onClick={() => onNavigateToBreadcrumb(index)} | ||
| {...slideIn} | ||
| > | ||
| {node.name} | ||
| </motion.button> | ||
| </motion.div> | ||
| </AnimatePresence> | ||
| </motion.div> | ||
| ); | ||
| })} | ||
| </AnimatePresence> | ||
| </div> | ||
| ); | ||
| } | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here, this is the correct import because it's not exported from
actions/sql/index.ts