three-slicer 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.1 — 2026-09-16
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `three-slicer-viewer/settings` (and so `three-slicer/settings`) exports the kernel derivation's own fallbacks:
|
|
8
|
+
`FFF_FALLBACKS`, `SLA_FALLBACKS`, `AUTO_LINE_WIDTH`, `BED_FALLBACK`, `MACHINE_LIMITS`. Frozen; they are the values
|
|
9
|
+
`deriveKernelParams` / `deriveSlaParams` use when neither the settings map nor the schema gives one, and they are
|
|
10
|
+
deliberately not the schema defaults.
|
|
11
|
+
- Theming: both shadow roots take their colours from 43 custom properties (`--vp-accent`, `--vp-dark-surface`,
|
|
12
|
+
`--vp-light-text`, …) a host can set on any ancestor. `VIEWER.md` ("Theming") lists them with their defaults.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- `deriveKernelParams` with an empty or malformed `printable_area` now derives a 200 x 200 bed (the schema's own
|
|
17
|
+
default), not 256 x 256. Every viewer fallback already assumed 200; a well-formed value is unaffected.
|
|
18
|
+
- `buildSegmentData(layers)` without a default line width falls back to 0.42 (the kernel's auto width), not 0.4.
|
|
19
|
+
Callers that pass one, as the viewer does, are unaffected.
|
|
20
|
+
- One grey for "no colour to read": a blank filament slot, a stats swatch past the palette, an unparseable hex in
|
|
21
|
+
the toolpath palette and an unpainted facet (`UNPAINTED_COLOR`) are all `#888888` (were four different greys).
|
|
22
|
+
- The toolpath legend (speed / fan / temperature views) falls back to the schema default for a value the settings
|
|
23
|
+
map holds but cannot parse, instead of literals that disagreed with it (support speed 35 vs 80, nozzle 210 vs 200).
|
|
24
|
+
- The stylesheets carried 152 literal colours, many of them near-identical shades of one role; each group now uses
|
|
25
|
+
its most common member, so a few shades move slightly. Visible: the "advanced" badge is the info blue
|
|
26
|
+
(`#2b6cff`, was `#3673c3`), the "simple" badge the accent green, and the prime-tower card's number inputs are
|
|
27
|
+
light like every other sidebar input (they were styled for the dark viewport).
|
|
28
|
+
- Vendor process presets now carry `support_type`, so applying one sets the support type it was authored with.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- Importing a project that places objects on more than one plate failed with "dropPlateResult is not defined"
|
|
33
|
+
and left every object on the selected plate (since 0.2.5). `test_3mf_project.mjs` now loads a two-plate project
|
|
34
|
+
through the model loader.
|
|
35
|
+
- The Process card's Global|Plate toggle has the ↺ that drops the plate's whole override, like the other settings
|
|
36
|
+
cards; the viewer never passed it the handler.
|
|
37
|
+
- Importing a project kept its filament colours in the viewer but not in the settings map, so a blank entry saved
|
|
38
|
+
back as blank and a list past 16 filaments saved whole.
|
|
39
|
+
- `three-slicer@0.3.0` shipped a tool-state file under `types/.omc/`, and `three-slicer-viewer` would have shipped
|
|
40
|
+
one from `src/settings/.omc/`. Both `files` lists now end in `!**/.omc`, and `pack_check.sh` fails on any
|
|
41
|
+
dot-path in either tarball.
|
|
42
|
+
|
|
3
43
|
## 0.3.0 — 2026-09-08
|
|
4
44
|
|
|
5
45
|
The viewer is its own package. Everything that displays — model loading, G-code parsing, the GPU toolpath
|
|
@@ -33,7 +73,7 @@ split followed is `packages/RELICENSE.md`.
|
|
|
33
73
|
- The two packages publish as a **locked pair**: same version, and `three-slicer` pins `three-slicer-viewer`
|
|
34
74
|
exactly (`test_version_lockstep.mjs`). A release goes through the root `Makefile` (`make publish`), which
|
|
35
75
|
publishes the viewer first — the pin means `three-slicer@0.3.0` cannot be installed before it exists.
|
|
36
|
-
- `
|
|
76
|
+
- `viewer-package/` is mirrored to `github.com/kimgh06/three-slicer-viewer` (a `git subtree split`); the monorepo
|
|
37
77
|
stays the source of truth.
|
|
38
78
|
|
|
39
79
|
### Fixed
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Browser/WASM 3D-printing slicer package derived from [OrcaSlicer](https://github
|
|
|
4
4
|
|
|
5
5
|
The package is published as a single npm package, `three-slicer`, with subpath exports for the engine, viewer, components, worker, and extracted OrcaSlicer data.
|
|
6
6
|
|
|
7
|
-

|
|
8
8
|
|
|
9
9
|
## Links
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ The package is published as a single npm package, `three-slicer`, with subpath e
|
|
|
14
14
|
composition. Which code carries which licence, and why: [`PROVENANCE.md`](PROVENANCE.md).
|
|
15
15
|
|
|
16
16
|
- Package: [npmjs.com/package/three-slicer](https://www.npmjs.com/package/three-slicer)
|
|
17
|
-
- Source: [kimgh06/
|
|
17
|
+
- Source: [kimgh06/Three_Slicer](https://github.com/kimgh06/Three_Slicer)
|
|
18
18
|
- Demo: [slicer.kimgh06.com](https://slicer.kimgh06.com/)
|
|
19
19
|
|
|
20
20
|
## Start Here
|
|
@@ -25,7 +25,7 @@ reading whole; everything else is lookup.
|
|
|
25
25
|
| Your case | Path | Copy this | Then read |
|
|
26
26
|
| --- | --- | --- | --- |
|
|
27
27
|
| "Just the numbers" — quotes, farms, automation. No UI, no React | **Headless** | [Quick Start: Headless Slicing](#quick-start-headless-slicing) | [engine/README](engine/README.md) (134 lines), params via [PARAMS.md](engine/PARAMS.md) as lookup |
|
|
28
|
-
| A slicer inside your existing page | **Embed** | [Quick Start: React Viewer](#quick-start-react-viewer) | [viewer/README](../
|
|
28
|
+
| A slicer inside your existing page | **Embed** | [Quick Start: React Viewer](#quick-start-react-viewer) | [viewer/README](../viewer-package/VIEWER.md) (330 lines — the props contracts live there) |
|
|
29
29
|
| The full slicer UI — viewport + settings panel | **Full UI** | [Full React Example](#full-react-example) | viewer/README + [components/README](components/README.md) |
|
|
30
30
|
|
|
31
31
|
Whichever path: read [Before You Ship](#before-you-ship) before deploying — those traps return plausible
|
|
@@ -172,7 +172,7 @@ export default function App() {
|
|
|
172
172
|
`position: relative` and a real height. In a plain static `<div>` it escapes to the page instead. There is no width
|
|
173
173
|
or height prop.
|
|
174
174
|
|
|
175
|
-
The viewer handles model loading, drag and drop, transform controls, multi-plate layout, worker slicing, GPU toolpath preview, and G-code export. Its keyboard and mouse bindings, the undo boundary, and what a host cannot drive are documented in [../
|
|
175
|
+
The viewer handles model loading, drag and drop, transform controls, multi-plate layout, worker slicing, GPU toolpath preview, and G-code export. Its keyboard and mouse bindings, the undo boundary, and what a host cannot drive are documented in [../viewer-package/VIEWER.md](../viewer-package/VIEWER.md). It supports STL, OBJ, 3MF (including the production extension used by Orca/Bambu/Prusa), AMF, and PLY out of the box; other formats such as STEP can be added with `registerLoader()`. A `.3mf` written by a slicer is treated as a project, not just geometry: its plate layout, project settings, and support/material painting are restored on import (where a facet carries both paint kinds, material paint wins and the dropped support paint is reported). Viewer and component styles are bundled into their Shadow DOM roots, so host app CSS does not need to import package CSS.
|
|
176
176
|
|
|
177
177
|
## Quick Start: Settings Panel
|
|
178
178
|
|
|
@@ -277,7 +277,7 @@ Some of the connections are not imports, and knowing which is which explains mos
|
|
|
277
277
|
| --- | --- | --- |
|
|
278
278
|
| `wasm-core` → `engine` | `build.sh` (emscripten) commits its output into `engine/src/` | not an import — the golden byte-identical gate and the invariant suite verify kernel changes against the engine's output |
|
|
279
279
|
| `data` → `engine`/`components`/`viewer` | `/data` subpath imports | the source of truth is `extract_all.py` over the upstream checkout |
|
|
280
|
-
| `types` → `engine` | the generator **executes** `deriveKernelParams` (probing) and writes `engine/PARAMS.md` + `../
|
|
280
|
+
| `types` → `engine` | the generator **executes** `deriveKernelParams` (probing) and writes `engine/PARAMS.md` + `../viewer-package/src/settings/kernel_setting_keys.js` back into the engine | `test_kernel_params.mjs` is the staleness gate |
|
|
281
281
|
| `types` → `data` | `gen_settings_types.mjs` generates `settings-keys.d.ts` (976 keys) from the schema | run automatically by the build |
|
|
282
282
|
| `viewer` ↔ `components` | **no direct link** | the host shares one settings map with both as props, and mounts `<SettingsPanel embedded/>` into the viewer's panel slots |
|
|
283
283
|
| inside `viewer` | `core` (pure, node-runnable) ← `scene` (three/DOM) ← `actions` ← `ui` | `test_layers.mjs` enforces the boundary |
|
|
@@ -392,7 +392,7 @@ options as arrays of strings — the same shape [3MF Projects](#3mf-projects) us
|
|
|
392
392
|
through the same serializer.
|
|
393
393
|
|
|
394
394
|
The viewer adds the zip forms and a UI: the printer card's **Load** and **Save** read and write these files, and a
|
|
395
|
-
save routes through [`onExport`](../
|
|
395
|
+
save routes through [`onExport`](../viewer-package/VIEWER.md#taking-the-saves) like every other download.
|
|
396
396
|
|
|
397
397
|
## Settings UI: Enable/Disable Rules
|
|
398
398
|
|
|
@@ -787,7 +787,7 @@ the layout by hand.
|
|
|
787
787
|
|
|
788
788
|
## Before You Ship
|
|
789
789
|
|
|
790
|
-
The traps below were all hit while building the [integration demos](https://github.com/kimgh06/
|
|
790
|
+
The traps below were all hit while building the [integration demos](https://github.com/kimgh06/Three_Slicer/tree/main/examples)
|
|
791
791
|
and the live landing embed — each one returns something plausible instead of an error, which is why they
|
|
792
792
|
are listed **in the order they bite**, not by topic. The later a trap fires, the more it costs — and none of
|
|
793
793
|
them fails a build or throws, so nothing surfaces them for you.
|
|
@@ -837,4 +837,4 @@ production while `npm run dev` passed. The no-argument form now emits a real wor
|
|
|
837
837
|
|
|
838
838
|
## License
|
|
839
839
|
|
|
840
|
-
AGPL-3.0-or-later. This package is derived from OrcaSlicer. Source is available at [kimgh06/
|
|
840
|
+
AGPL-3.0-or-later. This package is derived from OrcaSlicer. Source is available at [kimgh06/Three_Slicer](https://github.com/kimgh06/Three_Slicer). If you embed it in a web app, make sure your app complies with the AGPL network-use requirements, including offering source code to users where required.
|