Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
585a694
feat: clicking user icon in sidebar opens profile settings (#351)
alfredorubin96 Apr 5, 2026
f1fcf07
fix: bar chart blank render on initial widget placement (#332)
alfredorubin96 Apr 5, 2026
2e47ff7
feat: responsive bar chart label rotation based on widget width (#337)
alfredorubin96 Apr 5, 2026
558f1dc
feat: scrollable pie chart legend with better controls (#338)
alfredorubin96 Apr 5, 2026
4704a42
feat: connect nulls and end labels for line chart (#146)
alfredorubin96 Apr 5, 2026
8ee8404
fix: show ID and entity type in graph inspection panel (#352)
alfredorubin96 Apr 5, 2026
7c1f17f
feat: dual Y-axis support for line chart (#159)
alfredorubin96 Apr 5, 2026
a42cd1a
feat: select dropdown field type for form widget (#151)
alfredorubin96 Apr 5, 2026
4d6c357
feat: onboarding guide on empty dashboards page (#333)
alfredorubin96 Apr 5, 2026
bc6bb76
feat: field validation for form widget (#150)
alfredorubin96 Apr 5, 2026
ec6360e
perf: memoize graph callbacks and consolidate state updates (#353)
alfredorubin96 Apr 5, 2026
1f9bc5d
fix: add rawValue to static options for type compatibility
alfredorubin96 Apr 5, 2026
fa893c2
test: increase chart options panel test timeout for slow CI
alfredorubin96 Apr 5, 2026
942dfcc
fix: rename profile button aria-label to avoid E2E selector collision
alfredorubin96 Apr 5, 2026
bb7ca6f
fix: rename onboarding step-3 button to avoid E2E collision
alfredorubin96 Apr 5, 2026
6d13d1f
fix: use 'Account menu' aria-label to avoid Profile selector collision
alfredorubin96 Apr 5, 2026
1651c97
fix: remove cursor-pointer class from profile button (E2E selector co…
alfredorubin96 Apr 5, 2026
b4cd411
test: increase chart options panel test timeout for slow CI
alfredorubin96 Apr 5, 2026
b610910
ci: re-trigger flaky graph chart E2E
alfredorubin96 Apr 5, 2026
a04f62d
ci: another re-trigger attempt
alfredorubin96 Apr 5, 2026
ed082fc
Merge pull request #361 from alfredo1996/fix/issue-351-user-icon-click
alfredo1996 Apr 5, 2026
4490099
Merge pull request #362 from alfredo1996/fix/issue-332-bar-chart-blank
alfredo1996 Apr 5, 2026
0e662ef
Merge pull request #364 from alfredo1996/feat/issue-338-pie-legend-sc…
alfredo1996 Apr 5, 2026
3466c10
Merge pull request #363 from alfredo1996/feat/issue-337-bar-label-rot…
alfredo1996 Apr 5, 2026
6d6c62f
Merge pull request #365 from alfredo1996/feat/issue-146-line-nulls-la…
alfredo1996 Apr 5, 2026
78ebc07
Merge pull request #366 from alfredo1996/fix/issue-352-graph-inspecti…
alfredo1996 Apr 5, 2026
85dcedb
Merge pull request #367 from alfredo1996/feat/issue-159-line-dual-y-axis
alfredo1996 Apr 5, 2026
2f743a0
Merge pull request #368 from alfredo1996/feat/issue-151-form-select-v2
alfredo1996 Apr 5, 2026
617ecb3
Merge pull request #369 from alfredo1996/feat/issue-333-onboarding-em…
alfredo1996 Apr 5, 2026
bb367ec
Merge pull request #370 from alfredo1996/feat/issue-150-form-validati…
alfredo1996 Apr 5, 2026
f5246e3
Merge pull request #371 from alfredo1996/perf/issue-353-graph-rendering
alfredo1996 Apr 5, 2026
cfbfb16
feat: click-to-drill-down for sunburst and treemap (#147)
alfredorubin96 Apr 5, 2026
3c11a79
feat: enable click action for gauge widgets (#152)
alfredorubin96 Apr 5, 2026
2466760
feat: zoom controls and node count for graph chart (#149)
alfredorubin96 Apr 5, 2026
48bbfcd
fix: scope graph-node-count locators with .first() to avoid strict mo…
alfredorubin96 Apr 5, 2026
65a352c
Merge pull request #372 from alfredo1996/feat/issue-147-drill-down
alfredo1996 Apr 5, 2026
098f95e
Merge pull request #373 from alfredo1996/feat/issue-152-gauge-click-a…
alfredo1996 Apr 5, 2026
551c84e
Merge pull request #374 from alfredo1996/feat/issue-149-graph-controls
alfredo1996 Apr 5, 2026
4c5a367
Merge remote-tracking branch 'origin/dev' into release/1.1
alfredorubin96 Apr 5, 2026
4e7cc1a
feat(app): chart plugin registry — contract + registry primitives (#220)
alfredorubin96 Apr 5, 2026
9b43772
ci: re-trigger flaky data-grid test
alfredorubin96 Apr 5, 2026
43e4839
feat(app): plugin-driven chart renderer + markdown plugin migration (…
alfredorubin96 Apr 5, 2026
3faedc5
Merge pull request #377 from alfredo1996/feat/chart-plugin-registry
alfredo1996 Apr 5, 2026
bc9a47f
ci: trigger workflow after base change
alfredorubin96 Apr 5, 2026
249feb7
Merge pull request #378 from alfredo1996/feat/chart-plugin-renderer
alfredo1996 Apr 5, 2026
b181847
feat(app): migrate bar/line/pie charts to plugin system (#220)
alfredorubin96 Apr 5, 2026
0c1ae54
ci: trigger after base rebase
alfredorubin96 Apr 5, 2026
41f80dd
Merge pull request #379 from alfredo1996/feat/chart-plugin-migrate-si…
alfredo1996 Apr 5, 2026
e5248f1
feat(app): migrate all 13 remaining charts to plugin system (#220)
alfredorubin96 Apr 5, 2026
d7972f5
fix: switch from Turbopack to webpack for dev/E2E (#220)
alfredorubin96 Apr 5, 2026
262e4a3
ci: re-trigger flaky graph E2E
alfredorubin96 Apr 6, 2026
a87a3db
refactor: unify plugin callback — single onChartClick, shared PluginP…
alfredorubin96 Apr 6, 2026
22815d5
Merge pull request #380 from alfredo1996/feat/chart-plugin-migrate-all
alfredo1996 Apr 6, 2026
184593f
feat(connection): connector plugin registry + neo4j/postgres plugins …
alfredorubin96 Apr 6, 2026
4d6f306
Merge pull request #393 from alfredo1996/feat/connector-plugin-registry
alfredo1996 Apr 6, 2026
1d3e10d
docs: add chart plugin + connector plugin developer guides
alfredorubin96 Apr 6, 2026
295fffa
Merge pull request #395 from alfredo1996/docs/plugin-guides
alfredo1996 Apr 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions app/e2e/charts.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -733,7 +733,7 @@ test.describe("Graph chart exploration", () => {
await expect(statusBar).toBeVisible({ timeout: 15_000 });

// Status bar should show node and edge counts
const nodeCount = page.locator("[data-testid='graph-node-count']");
const nodeCount = page.locator("[data-testid='graph-node-count']").first();
await expect(nodeCount).toBeVisible();
await expect(nodeCount).toContainText("nodes");

Expand Down Expand Up @@ -778,7 +778,9 @@ test.describe("Graph chart exploration", () => {
await expect(exploration).toBeVisible({ timeout: 15_000 });

// Record initial node count text
const nodeCountEl = page.locator("[data-testid='graph-node-count']");
const nodeCountEl = page
.locator("[data-testid='graph-node-count']")
.first();
await expect(nodeCountEl).toBeVisible({ timeout: 10_000 });

// NVL renders overlay divs, so force: true is needed for canvas clicks
Expand Down Expand Up @@ -823,7 +825,9 @@ test.describe("Graph chart exploration", () => {
await expect(exploration).toBeVisible({ timeout: 15_000 });

// Record initial node count
const nodeCountEl = page.locator("[data-testid='graph-node-count']");
const nodeCountEl = page
.locator("[data-testid='graph-node-count']")
.first();
await expect(nodeCountEl).toBeVisible({ timeout: 10_000 });
const initialText = await nodeCountEl.textContent();

Expand Down Expand Up @@ -1001,7 +1005,9 @@ test.describe("Graph chart exploration", () => {
const exploration = page.locator("[data-testid='graph-exploration']");
await expect(exploration).toBeVisible({ timeout: 15_000 });

const nodeCountEl = page.locator("[data-testid='graph-node-count']");
const nodeCountEl = page
.locator("[data-testid='graph-node-count']")
.first();
await expect(nodeCountEl).toBeVisible({ timeout: 10_000 });
const initialText = await nodeCountEl.textContent();

Expand Down
4 changes: 3 additions & 1 deletion app/e2e/global-setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,9 @@ export default async function globalSetup() {
`⏳ Starting Next.js ${serverCmd} server on port ${serverPort}...`,
);
const args = ["next", serverCmd, "--port", String(serverPort)];
if (serverCmd === "dev") args.push("--turbopack");
// Use webpack explicitly — Turbopack (Next.js 16 default) doesn't correctly
// resolve CJS/ESM interop for the @neoboard/connection package at runtime.
if (serverCmd === "dev") args.push("--webpack");
const server = spawn("npx", args, {
cwd: appDir,
stdio: "pipe",
Expand Down
9 changes: 7 additions & 2 deletions app/next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,13 @@ const nextConfig: NextConfig = {
// Enable source maps in production for E2E coverage collection (nextcov).
productionBrowserSourceMaps: process.env.E2E_COVERAGE === "1",
outputFileTracingRoot: resolve(import.meta.dirname, ".."),
transpilePackages: ["@neoboard/components"],
serverExternalPackages: ["connection", "postgres", "pg"],
transpilePackages: ["@neoboard/components", "@neoboard/connection"],
serverExternalPackages: [
"postgres",
"pg",
"neo4j-driver",
"neo4j-driver-core",
],
webpack: (config, { isServer }) => {
if (isServer) {
// The instrumentation file is compiled in a separate webpack pass that does
Expand Down
2 changes: 1 addition & 1 deletion app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"version": "0.0.1",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
"dev": "next dev --webpack",
"build": "next build --webpack",
"start": "next start",
"lint": "next lint",
Expand Down
9 changes: 6 additions & 3 deletions app/src/app/(dashboard)/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,11 @@ export default function DashboardLayout({
footer={
<>
{userName && (
<div
className={`flex items-center gap-2 px-3 py-2 text-sm ${collapsed ? "justify-center" : ""}`}
<button
type="button"
onClick={() => router.push("/settings/profile")}
aria-label="Account menu"
className={`flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm hover:bg-accent hover:text-accent-foreground transition-colors ${collapsed ? "justify-center" : ""}`}
>
<User className="h-4 w-4 shrink-0 text-muted-foreground" />
{!collapsed && (
Expand All @@ -103,7 +106,7 @@ export default function DashboardLayout({
)}
</span>
)}
</div>
</button>
)}
<DropdownMenu>
<DropdownMenuTrigger asChild>
Expand Down
Loading
Loading