Conversation
…xports Signed-off-by: Brice Johnson <1939015+Bjohnson131@users.noreply.github.com>
…d delimiters Signed-off-by: Brice Johnson <1939015+Bjohnson131@users.noreply.github.com>
Signed-off-by: Brice Johnson <1939015+Bjohnson131@users.noreply.github.com>
Signed-off-by: Brice Johnson <1939015+Bjohnson131@users.noreply.github.com>
Add CSV import capability
Add auto-paint detail controls and optimizer tiers Replace the repeated-swaps toggle with an Off/2/4/6/8/12 selector and add a transition-detail selector (80/90/95% opacity) so stack height vs color resolution is an explicit trade-off. Expand the optimizer menu to five effort tiers (Fast/Balanced/Thorough/Deep/Exact base order) and score sequences against the already-processed palette with an added detail- coverage term. Polish the panel UI: a determinate progress bar, fixed-width label column so controls align, a quality/speed meter under the algorithm picker, and nesting the enhanced-matching sub-options under their gate toggle. @
Replace the repeated-swaps toggle with an Off/2/4/6/8/12 selector and add a transition-detail selector (80/90/95% opacity) so stack height vs color resolution is an explicit trade-off. Expand the optimizer menu to five effort tiers (Fast/Balanced/Thorough/Deep/Exact base order) and score sequences against the already-processed palette with an added detail- coverage term. Polish the panel UI: a determinate progress bar, fixed-width label column so controls align, a quality/speed meter under the algorithm picker, and nesting the enhanced-matching sub-options under their gate toggle.
…omacut into autopaint-improvements
Improve auto-paint reliability and 3MF exports
…aded, Transparent, and Wireframe modes for inspecting surfaces, layers, and mesh edges. Wireframe uses thin, layer-colored feature edges, and the selected view is remembered without changing print settings or STL/3MF export content.
…fers a Simulated/Physical color toggle for Auto-paint results, switching between the estimated blended appearance and the real physical filament colors stacked at each layer without a model rebuild. Only shown for Auto-paint models, the selection is remembered, and it never changes STL/3MF export content.
…rd-edged pixel tools (Brush, Eraser, Fill, Text, and color picker) for direct image editing with palette-safe colors, an on-canvas text box you type into directly with live move, resize, and word wrap, one undo/redo step per edit, and live non-blocking drawing with adjustments staying non-destructive.
…mproved filament calibration understanding Signed-off-by: Brice Johnson <1939015+Bjohnson131@users.noreply.github.com>
remove multi head ref
feat: add calibration theory documentation
…ted in the 3MF exporter's exact integer coordinate units instead of epsilon-compared floats, so faces that would collapse at serialized precision get re-triangulated during meshing rather than silently dropped at export. This removes the pinhole open/non-manifold edges slicers flagged on large smooth-meshed 3MF exports (STL exports were never affected).
Saving a calibration run required every selected filament to have complete, valid reads, so a wedge printed for eight filaments could not be saved until all eight were read in one sitting. The save path was already partial-aware: handleSave only writes entries with a complete input and an ok result, and onApply touches only the IDs it is given, so unread filaments were never at risk. The gate was the blocker. Save now enables on the first usable filament and reports how many will be written. The session JND fit previously bailed if any entry was incomplete, which would have quietly dropped a partially-filled Accurate run to the default JND. It now fits over the complete entries and ignores blanks. Discarding stays visible. A filament nobody touched is marked "Not entered" and dropped silently, which is fine. Anything typed that still cannot be saved -- an Accurate filament with some of its bases read, or a value below 1 -- is marked "Won't save" with a reason, tracked by whether a field was touched rather than whether it parsed. Scoped to whole filaments: a filament is saved once all of its base reads are in. That keeps handleSave's non-null read assertion valid, which saving from a subset of bases would break by admitting null opacity layers into stored calibration records. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat: add landing page and app route
Signed-off-by: Brice Johnson <1939015+Bjohnson131@users.noreply.github.com>
Signed-off-by: Brice Johnson <1939015+Bjohnson131@users.noreply.github.com>
…mponent Signed-off-by: Brice Johnson <1939015+Bjohnson131@users.noreply.github.com>
…tionality Signed-off-by: Brice Johnson <1939015+Bjohnson131@users.noreply.github.com>
Signed-off-by: Brice Johnson <1939015+Bjohnson131@users.noreply.github.com>
Add Bifrucation for multiplate mode
feat: allow partial calibration entry
Fixes #42. parseHueForgeCSV() matches column names literally against the header row (e.g. "Color", "TD", "Brand"). Spreadsheet tools such as Excel commonly prepend a UTF-8 byte-order mark (U+FEFF) when saving a file as CSV/TSV. When that happens, the first header cell decodes as "\uFEFFColor" instead of "Color", so the column lookup for the first header never matches. If the export happens to lead with the Color column (a common HueForge spool layout: "Color,TD,..."), every row then looks like it's missing a color and gets silently skipped, and the import produces nothing. Fix Strip a single leading U+FEFF code unit from the CSV/TSV string before any parsing happens, so the header row is decoded the same way whether or not the source file carried a BOM. This only touches the very first character of the input and has no effect on files without a BOM. Testing npm ci npm run test # 341/341 pass, 0 fail (full existing suite + 2 new tests) npx eslint . --ext .ts,.tsx --max-warnings=0 src/lib/profileManager.ts tests/profileManager.test.ts npx tsc -b --noEmit Added two regression tests in tests/profileManager.test.ts, both against the develop branch's parseHueForgeCSV (introduced in #37): - "strips a leading UTF-8 BOM before parsing the header" - CSV whose header begins with "\uFEFFColor,TD,Name" now imports the row correctly, matching the exact failure mode described in #42. - "strips a leading UTF-8 BOM from TSV input as well" - same fix verified for the tab-delimited path, since detectDelimiter/parseCSV are shared between CSV and TSV.
fix(profiles): strip UTF-8 BOM before parsing HueForge CSV/TSV imports
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
developintomain./approute, and experimental multi-plate support.Why
This promotes the completed v3.2.0 integration work to the release branch while keeping final release preparation visible and reviewable before merge.
User impact
Users gain a more accurate filament-calibration and auto-paint workflow, richer image and preview controls, improved web navigation, and more reliable STL/3MF output.
Validation
npm test— 339 tests passednpm run lintnpm run buildnpm run test:e2eRelease checklist
CHANGELOG.md