fix: resolve chart visibility issues after CSV upload

- Add fixed width to sidebar (w-64) to prevent layout collapse
- Change chart container from flex-1 to w-full h-full for proper sizing
- Chart now properly displays after CSV upload
This commit is contained in:
Marko Djordjevic 2026-02-12 11:50:48 +01:00
parent 9b5bc9b6b3
commit 11f0759b0e
8 changed files with 37633 additions and 52 deletions

18300
EURUSD.csv Normal file

File diff suppressed because it is too large Load diff

18300
EURUSD.csv~ Normal file

File diff suppressed because it is too large Load diff

1000
EURUSD_1000.csv Normal file

File diff suppressed because it is too large Load diff

2
next-env.d.ts vendored
View file

@ -1,6 +1,6 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/image-types/global" /> /// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts"; import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited // NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

78
package-lock.json generated
View file

@ -15,6 +15,7 @@
"@types/react": "^19.2.14", "@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3", "@types/react-dom": "^19.2.3",
"autoprefixer": "^10.4.24", "autoprefixer": "^10.4.24",
"better-sqlite3": "^12.6.2",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"drizzle-orm": "^0.45.1", "drizzle-orm": "^0.45.1",
@ -2833,8 +2834,7 @@
"url": "https://feross.org/support" "url": "https://feross.org/support"
} }
], ],
"license": "MIT", "license": "MIT"
"optional": true
}, },
"node_modules/baseline-browser-mapping": { "node_modules/baseline-browser-mapping": {
"version": "2.9.19", "version": "2.9.19",
@ -2843,6 +2843,21 @@
"baseline-browser-mapping": "dist/cli.js" "baseline-browser-mapping": "dist/cli.js"
} }
}, },
"node_modules/better-sqlite3": {
"version": "12.6.2",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.6.2.tgz",
"integrity": "sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==",
"hasInstallScript": true,
"license": "MIT",
"peer": true,
"dependencies": {
"bindings": "^1.5.0",
"prebuild-install": "^7.1.1"
},
"engines": {
"node": "20.x || 22.x || 23.x || 24.x || 25.x"
}
},
"node_modules/binary-extensions": { "node_modules/binary-extensions": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@ -2859,7 +2874,6 @@
"node_modules/bindings": { "node_modules/bindings": {
"version": "1.5.0", "version": "1.5.0",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"file-uri-to-path": "1.0.0" "file-uri-to-path": "1.0.0"
} }
@ -2867,7 +2881,6 @@
"node_modules/bl": { "node_modules/bl": {
"version": "4.1.0", "version": "4.1.0",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"buffer": "^5.5.0", "buffer": "^5.5.0",
"inherits": "^2.0.4", "inherits": "^2.0.4",
@ -2941,7 +2954,6 @@
} }
], ],
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"base64-js": "^1.3.1", "base64-js": "^1.3.1",
"ieee754": "^1.1.13" "ieee754": "^1.1.13"
@ -3082,8 +3094,7 @@
}, },
"node_modules/chownr": { "node_modules/chownr": {
"version": "1.1.4", "version": "1.1.4",
"license": "ISC", "license": "ISC"
"optional": true
}, },
"node_modules/class-variance-authority": { "node_modules/class-variance-authority": {
"version": "0.7.1", "version": "0.7.1",
@ -3234,7 +3245,6 @@
"node_modules/decompress-response": { "node_modules/decompress-response": {
"version": "6.0.0", "version": "6.0.0",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"mimic-response": "^3.1.0" "mimic-response": "^3.1.0"
}, },
@ -3248,7 +3258,6 @@
"node_modules/deep-extend": { "node_modules/deep-extend": {
"version": "0.6.0", "version": "0.6.0",
"license": "MIT", "license": "MIT",
"optional": true,
"engines": { "engines": {
"node": ">=4.0.0" "node": ">=4.0.0"
} }
@ -3290,7 +3299,6 @@
"node_modules/detect-libc": { "node_modules/detect-libc": {
"version": "2.1.2", "version": "2.1.2",
"license": "Apache-2.0", "license": "Apache-2.0",
"optional": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -3479,7 +3487,6 @@
"node_modules/end-of-stream": { "node_modules/end-of-stream": {
"version": "1.4.5", "version": "1.4.5",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"once": "^1.4.0" "once": "^1.4.0"
} }
@ -4072,7 +4079,6 @@
"node_modules/expand-template": { "node_modules/expand-template": {
"version": "2.0.3", "version": "2.0.3",
"license": "(MIT OR WTFPL)", "license": "(MIT OR WTFPL)",
"optional": true,
"engines": { "engines": {
"node": ">=6" "node": ">=6"
} }
@ -4136,8 +4142,7 @@
}, },
"node_modules/file-uri-to-path": { "node_modules/file-uri-to-path": {
"version": "1.0.0", "version": "1.0.0",
"license": "MIT", "license": "MIT"
"optional": true
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.1.1", "version": "7.1.1",
@ -4204,8 +4209,7 @@
}, },
"node_modules/fs-constants": { "node_modules/fs-constants": {
"version": "1.0.0", "version": "1.0.0",
"license": "MIT", "license": "MIT"
"optional": true
}, },
"node_modules/fsevents": { "node_modules/fsevents": {
"version": "2.3.3", "version": "2.3.3",
@ -4328,8 +4332,7 @@
}, },
"node_modules/github-from-package": { "node_modules/github-from-package": {
"version": "0.0.0", "version": "0.0.0",
"license": "MIT", "license": "MIT"
"optional": true
}, },
"node_modules/glob-parent": { "node_modules/glob-parent": {
"version": "6.0.2", "version": "6.0.2",
@ -4475,8 +4478,7 @@
"url": "https://feross.org/support" "url": "https://feross.org/support"
} }
], ],
"license": "BSD-3-Clause", "license": "BSD-3-Clause"
"optional": true
}, },
"node_modules/ignore": { "node_modules/ignore": {
"version": "5.3.2", "version": "5.3.2",
@ -4508,13 +4510,11 @@
}, },
"node_modules/inherits": { "node_modules/inherits": {
"version": "2.0.4", "version": "2.0.4",
"license": "ISC", "license": "ISC"
"optional": true
}, },
"node_modules/ini": { "node_modules/ini": {
"version": "1.3.8", "version": "1.3.8",
"license": "ISC", "license": "ISC"
"optional": true
}, },
"node_modules/internal-slot": { "node_modules/internal-slot": {
"version": "1.1.0", "version": "1.1.0",
@ -5098,7 +5098,6 @@
"node_modules/mimic-response": { "node_modules/mimic-response": {
"version": "3.1.0", "version": "3.1.0",
"license": "MIT", "license": "MIT",
"optional": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@ -5125,8 +5124,7 @@
}, },
"node_modules/mkdirp-classic": { "node_modules/mkdirp-classic": {
"version": "0.5.3", "version": "0.5.3",
"license": "MIT", "license": "MIT"
"optional": true
}, },
"node_modules/ms": { "node_modules/ms": {
"version": "2.1.3", "version": "2.1.3",
@ -5162,8 +5160,7 @@
}, },
"node_modules/napi-build-utils": { "node_modules/napi-build-utils": {
"version": "2.0.0", "version": "2.0.0",
"license": "MIT", "license": "MIT"
"optional": true
}, },
"node_modules/napi-postinstall": { "node_modules/napi-postinstall": {
"version": "0.3.4", "version": "0.3.4",
@ -5262,7 +5259,6 @@
"node_modules/node-abi": { "node_modules/node-abi": {
"version": "3.87.0", "version": "3.87.0",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"semver": "^7.3.5" "semver": "^7.3.5"
}, },
@ -5273,7 +5269,6 @@
"node_modules/node-abi/node_modules/semver": { "node_modules/node-abi/node_modules/semver": {
"version": "7.7.4", "version": "7.7.4",
"license": "ISC", "license": "ISC",
"optional": true,
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
}, },
@ -5407,7 +5402,6 @@
"node_modules/once": { "node_modules/once": {
"version": "1.4.0", "version": "1.4.0",
"license": "ISC", "license": "ISC",
"optional": true,
"dependencies": { "dependencies": {
"wrappy": "1" "wrappy": "1"
} }
@ -5702,7 +5696,6 @@
"node_modules/prebuild-install": { "node_modules/prebuild-install": {
"version": "7.1.3", "version": "7.1.3",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"detect-libc": "^2.0.0", "detect-libc": "^2.0.0",
"expand-template": "^2.0.3", "expand-template": "^2.0.3",
@ -5743,7 +5736,6 @@
"node_modules/pump": { "node_modules/pump": {
"version": "3.0.3", "version": "3.0.3",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"end-of-stream": "^1.1.0", "end-of-stream": "^1.1.0",
"once": "^1.3.1" "once": "^1.3.1"
@ -5777,7 +5769,6 @@
"node_modules/rc": { "node_modules/rc": {
"version": "1.2.8", "version": "1.2.8",
"license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
"optional": true,
"dependencies": { "dependencies": {
"deep-extend": "^0.6.0", "deep-extend": "^0.6.0",
"ini": "~1.3.0", "ini": "~1.3.0",
@ -5791,7 +5782,6 @@
"node_modules/rc/node_modules/strip-json-comments": { "node_modules/rc/node_modules/strip-json-comments": {
"version": "2.0.1", "version": "2.0.1",
"license": "MIT", "license": "MIT",
"optional": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -5832,7 +5822,6 @@
"node_modules/readable-stream": { "node_modules/readable-stream": {
"version": "3.6.2", "version": "3.6.2",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"inherits": "^2.0.3", "inherits": "^2.0.3",
"string_decoder": "^1.1.1", "string_decoder": "^1.1.1",
@ -5987,8 +5976,7 @@
"url": "https://feross.org/support" "url": "https://feross.org/support"
} }
], ],
"license": "MIT", "license": "MIT"
"optional": true
}, },
"node_modules/safe-push-apply": { "node_modules/safe-push-apply": {
"version": "1.0.0", "version": "1.0.0",
@ -6221,8 +6209,7 @@
"url": "https://feross.org/support" "url": "https://feross.org/support"
} }
], ],
"license": "MIT", "license": "MIT"
"optional": true
}, },
"node_modules/simple-get": { "node_modules/simple-get": {
"version": "4.0.1", "version": "4.0.1",
@ -6241,7 +6228,6 @@
} }
], ],
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"decompress-response": "^6.0.0", "decompress-response": "^6.0.0",
"once": "^1.3.1", "once": "^1.3.1",
@ -6290,7 +6276,6 @@
"node_modules/string_decoder": { "node_modules/string_decoder": {
"version": "1.3.0", "version": "1.3.0",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"safe-buffer": "~5.2.0" "safe-buffer": "~5.2.0"
} }
@ -6550,7 +6535,6 @@
"node_modules/tar-fs": { "node_modules/tar-fs": {
"version": "2.1.4", "version": "2.1.4",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"chownr": "^1.1.1", "chownr": "^1.1.1",
"mkdirp-classic": "^0.5.2", "mkdirp-classic": "^0.5.2",
@ -6561,7 +6545,6 @@
"node_modules/tar-stream": { "node_modules/tar-stream": {
"version": "2.2.0", "version": "2.2.0",
"license": "MIT", "license": "MIT",
"optional": true,
"dependencies": { "dependencies": {
"bl": "^4.0.3", "bl": "^4.0.3",
"end-of-stream": "^1.4.1", "end-of-stream": "^1.4.1",
@ -6690,7 +6673,6 @@
"node_modules/tunnel-agent": { "node_modules/tunnel-agent": {
"version": "0.6.0", "version": "0.6.0",
"license": "Apache-2.0", "license": "Apache-2.0",
"optional": true,
"dependencies": { "dependencies": {
"safe-buffer": "^5.0.1" "safe-buffer": "^5.0.1"
}, },
@ -6896,7 +6878,6 @@
}, },
"node_modules/util-deprecate": { "node_modules/util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/which": { "node_modules/which": {
@ -6998,8 +6979,7 @@
}, },
"node_modules/wrappy": { "node_modules/wrappy": {
"version": "1.0.2", "version": "1.0.2",
"license": "ISC", "license": "ISC"
"optional": true
}, },
"node_modules/yallist": { "node_modules/yallist": {
"version": "3.1.1", "version": "3.1.1",

View file

@ -19,6 +19,7 @@
"@types/react": "^19.2.14", "@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3", "@types/react-dom": "^19.2.3",
"autoprefixer": "^10.4.24", "autoprefixer": "^10.4.24",
"better-sqlite3": "^12.6.2",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"drizzle-orm": "^0.45.1", "drizzle-orm": "^0.45.1",

View file

@ -26,7 +26,7 @@ export default function Home() {
return ( return (
<div className="flex h-screen"> <div className="flex h-screen">
{/* Sidebar */} {/* Sidebar */}
<aside className="flex flex-col"> <aside className="w-64 flex-shrink-0 flex flex-col border-r border-border">
<div className="p-4 border-b border-border"> <div className="p-4 border-b border-border">
<h1 className="text-xl font-bold">Candle Annotator</h1> <h1 className="text-xl font-bold">Candle Annotator</h1>
</div> </div>

View file

@ -266,7 +266,7 @@ const CandleChart = forwardRef<CandleChartHandle, CandleChartProps>(
} }
return ( return (
<div className="flex-1 relative"> <div className="w-full h-full relative">
<div ref={chartContainerRef} className="absolute inset-0" /> <div ref={chartContainerRef} className="absolute inset-0" />
<SvgOverlay <SvgOverlay
chart={chartRef.current} chart={chartRef.current}