Repository navigation
release: version packages (lockstep) - #428
Merged
Merged
Conversation
- docs/README "Current state" leads with v0.20.0 (source-model viewing as a first-class declarative half of the SDK + toolpath dark-capability closure + Feature Lab + two-tier examples, DD-031); v0.19.0 demoted to Prior. Release-history line appended. - RELEASE_REVIEW.md: all seven changed packages reviewed; Product/Docs/Visual markers resolved, with reconciliation notes (incl. the deferred app-UI media + the two-surface parity coverage). RELEASE_NOTES_DRAFT.md folded in and removed. docs:release-check PASS. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to dev, this PR will be updated.
Releases
@chestnutlabs/gcode-model-renderer@0.20.0
Minor Changes
#427
b25ddb6Thanks @sobechestnut-dev! - Make interactive source-model viewing (STL / 3MF) a first-class, declarative half of the SDK —the Prepare side alongside the toolpath Preview side — so consumers no longer have to drop to the
imperative
createModelViewerengine to show a model in a framework (DD-031).New framework-neutral controller (
@chestnutlabs/gcode-model-renderer):createModelPreviewController(options)— the Prepare-side analogue ofgcode-preview-core's toolpathcontroller. It wraps the existing
createModelViewerengine unchanged and adds what a frameworkbinding needs: canvas-deferred construction with
bindCanvas(rebuilding on a canvas swap andreplaying the last source), a reactive
getState()/onStateChange()snapshot derived from theengine's events (
ModelPreviewState:loading/ready/rendererSupported/objectCount/materials/instancedCount/decimationApplied/bounds/plates/hasPlates/cameraState/progress/error),and an op queue for calls made before the canvas binds.
ModelPreviewControlsexposessetSource,setView, get/setCameraState,setBackground,setInteractionQuality,setRenderScope,frame,resize, andcapture.@chestnutlabs/gcode-model-renderer/testingsubpath(
runModelBehavioralSuite) with controls/state completeness parity guards.New
/modeladapter subpath on every framework — thin shells over the one controller, mirroringeach framework's toolpath idiom:
@chestnutlabs/gcode-preview-react/model—useModelViewerhook +<ModelViewer>component.@chestnutlabs/gcode-preview-vue/model—useModelViewercomposable +<ModelViewer>component.@chestnutlabs/gcode-preview-svelte/model—createModelViewerstore/action + the raw@chestnutlabs/gcode-preview-svelte/model/ModelViewer.sveltecomponent.@chestnutlabs/gcode-preview-element/model(+/model/define) — the<gcode-model-viewer>customelement (tag chosen to avoid the reserved
<model-viewer>).All additive — the toolpath surface is unchanged, and toolpath-only consumers don't pull the model
renderer (it lives behind the opt-in
/modelsubpath). Every adapter passes the portable modelbehavioral suite; each package gains
@chestnutlabs/gcode-model-rendereras a dependency.Patch Changes
718d1bd]:@chestnutlabs/gcode-preview-core@0.20.0
Minor Changes
#427
8810ba4Thanks @sobechestnut-dev! - Close the dark-capability gaps so no shipped capability is reachable only through theraw.renderer()escape hatch, with full parity across all four framework adapters (DD-031).New on the public controller (
GcodePreviewControls), so it flows to every adapter'scontrols:getRenderStats()— the DD-027 render-diagnostics snapshot (backend, GPU, geometry mode, buildparallelism, timings), previously reachable only on the Three renderer. Returns
nullon the 2Drenderer (which produces no GPU/geometry diagnostics — never a fabricated stats object).
pickSegment(ndcX, ndcY, threshold?)— source-mapping / segment picking, previously renderer-only.isColorModeAvailable(mode)— the honest per-file color-mode capability gate.New capability-aware state (
GcodePreviewState):availableColorModes,hasRetractions,hasColorChanges— refreshed after each parse, so a UI can offer and explain controls instead ofguessing (e.g. gray out feature coloring on a file with no feature roles, with a reason).
Adapter parity:
hiddenFeatureRolesis now a declarative prop (Vue/React/Svelte) and ahidden-feature-rolesattribute (Web Component) — the declarative form of
setFeatureRoleVisible(hide Skirt/Brim todeclutter a part). Gate it on
capabilities.featureRoles.capture()is now a top-level method on the Vue/React/Svelte handles too, matching the WebComponent's
element.capture().renderer/adjacentLayersgain property accessors; the package now also re-exportsRendererModeandPreviewRenderer.All additive — existing code keeps working unchanged; the 2D renderer honors the widened contract as
documented no-ops / honest
null. The portable behavioral suite is extended (layer-range, color-modegating, diagnostics + picking reachability) and gains a controls-completeness parity guard so a
capability can no longer ship in core and silently vanish from an adapter.
Patch Changes
718d1bd]:@chestnutlabs/gcode-preview-element@0.20.0
Minor Changes
#427
8810ba4Thanks @sobechestnut-dev! - Close the dark-capability gaps so no shipped capability is reachable only through theraw.renderer()escape hatch, with full parity across all four framework adapters (DD-031).New on the public controller (
GcodePreviewControls), so it flows to every adapter'scontrols:getRenderStats()— the DD-027 render-diagnostics snapshot (backend, GPU, geometry mode, buildparallelism, timings), previously reachable only on the Three renderer. Returns
nullon the 2Drenderer (which produces no GPU/geometry diagnostics — never a fabricated stats object).
pickSegment(ndcX, ndcY, threshold?)— source-mapping / segment picking, previously renderer-only.isColorModeAvailable(mode)— the honest per-file color-mode capability gate.New capability-aware state (
GcodePreviewState):availableColorModes,hasRetractions,hasColorChanges— refreshed after each parse, so a UI can offer and explain controls instead ofguessing (e.g. gray out feature coloring on a file with no feature roles, with a reason).
Adapter parity:
hiddenFeatureRolesis now a declarative prop (Vue/React/Svelte) and ahidden-feature-rolesattribute (Web Component) — the declarative form of
setFeatureRoleVisible(hide Skirt/Brim todeclutter a part). Gate it on
capabilities.featureRoles.capture()is now a top-level method on the Vue/React/Svelte handles too, matching the WebComponent's
element.capture().renderer/adjacentLayersgain property accessors; the package now also re-exportsRendererModeandPreviewRenderer.All additive — existing code keeps working unchanged; the 2D renderer honors the widened contract as
documented no-ops / honest
null. The portable behavioral suite is extended (layer-range, color-modegating, diagnostics + picking reachability) and gains a controls-completeness parity guard so a
capability can no longer ship in core and silently vanish from an adapter.
#427
b25ddb6Thanks @sobechestnut-dev! - Make interactive source-model viewing (STL / 3MF) a first-class, declarative half of the SDK —the Prepare side alongside the toolpath Preview side — so consumers no longer have to drop to the
imperative
createModelViewerengine to show a model in a framework (DD-031).New framework-neutral controller (
@chestnutlabs/gcode-model-renderer):createModelPreviewController(options)— the Prepare-side analogue ofgcode-preview-core's toolpathcontroller. It wraps the existing
createModelViewerengine unchanged and adds what a frameworkbinding needs: canvas-deferred construction with
bindCanvas(rebuilding on a canvas swap andreplaying the last source), a reactive
getState()/onStateChange()snapshot derived from theengine's events (
ModelPreviewState:loading/ready/rendererSupported/objectCount/materials/instancedCount/decimationApplied/bounds/plates/hasPlates/cameraState/progress/error),and an op queue for calls made before the canvas binds.
ModelPreviewControlsexposessetSource,setView, get/setCameraState,setBackground,setInteractionQuality,setRenderScope,frame,resize, andcapture.@chestnutlabs/gcode-model-renderer/testingsubpath(
runModelBehavioralSuite) with controls/state completeness parity guards.New
/modeladapter subpath on every framework — thin shells over the one controller, mirroringeach framework's toolpath idiom:
@chestnutlabs/gcode-preview-react/model—useModelViewerhook +<ModelViewer>component.@chestnutlabs/gcode-preview-vue/model—useModelViewercomposable +<ModelViewer>component.@chestnutlabs/gcode-preview-svelte/model—createModelViewerstore/action + the raw@chestnutlabs/gcode-preview-svelte/model/ModelViewer.sveltecomponent.@chestnutlabs/gcode-preview-element/model(+/model/define) — the<gcode-model-viewer>customelement (tag chosen to avoid the reserved
<model-viewer>).All additive — the toolpath surface is unchanged, and toolpath-only consumers don't pull the model
renderer (it lives behind the opt-in
/modelsubpath). Every adapter passes the portable modelbehavioral suite; each package gains
@chestnutlabs/gcode-model-rendereras a dependency.Patch Changes
718d1bd,8810ba4,b25ddb6]:@chestnutlabs/gcode-preview-react@0.20.0
Minor Changes
#427
8810ba4Thanks @sobechestnut-dev! - Close the dark-capability gaps so no shipped capability is reachable only through theraw.renderer()escape hatch, with full parity across all four framework adapters (DD-031).New on the public controller (
GcodePreviewControls), so it flows to every adapter'scontrols:getRenderStats()— the DD-027 render-diagnostics snapshot (backend, GPU, geometry mode, buildparallelism, timings), previously reachable only on the Three renderer. Returns
nullon the 2Drenderer (which produces no GPU/geometry diagnostics — never a fabricated stats object).
pickSegment(ndcX, ndcY, threshold?)— source-mapping / segment picking, previously renderer-only.isColorModeAvailable(mode)— the honest per-file color-mode capability gate.New capability-aware state (
GcodePreviewState):availableColorModes,hasRetractions,hasColorChanges— refreshed after each parse, so a UI can offer and explain controls instead ofguessing (e.g. gray out feature coloring on a file with no feature roles, with a reason).
Adapter parity:
hiddenFeatureRolesis now a declarative prop (Vue/React/Svelte) and ahidden-feature-rolesattribute (Web Component) — the declarative form of
setFeatureRoleVisible(hide Skirt/Brim todeclutter a part). Gate it on
capabilities.featureRoles.capture()is now a top-level method on the Vue/React/Svelte handles too, matching the WebComponent's
element.capture().renderer/adjacentLayersgain property accessors; the package now also re-exportsRendererModeandPreviewRenderer.All additive — existing code keeps working unchanged; the 2D renderer honors the widened contract as
documented no-ops / honest
null. The portable behavioral suite is extended (layer-range, color-modegating, diagnostics + picking reachability) and gains a controls-completeness parity guard so a
capability can no longer ship in core and silently vanish from an adapter.
#427
b25ddb6Thanks @sobechestnut-dev! - Make interactive source-model viewing (STL / 3MF) a first-class, declarative half of the SDK —the Prepare side alongside the toolpath Preview side — so consumers no longer have to drop to the
imperative
createModelViewerengine to show a model in a framework (DD-031).New framework-neutral controller (
@chestnutlabs/gcode-model-renderer):createModelPreviewController(options)— the Prepare-side analogue ofgcode-preview-core's toolpathcontroller. It wraps the existing
createModelViewerengine unchanged and adds what a frameworkbinding needs: canvas-deferred construction with
bindCanvas(rebuilding on a canvas swap andreplaying the last source), a reactive
getState()/onStateChange()snapshot derived from theengine's events (
ModelPreviewState:loading/ready/rendererSupported/objectCount/materials/instancedCount/decimationApplied/bounds/plates/hasPlates/cameraState/progress/error),and an op queue for calls made before the canvas binds.
ModelPreviewControlsexposessetSource,setView, get/setCameraState,setBackground,setInteractionQuality,setRenderScope,frame,resize, andcapture.@chestnutlabs/gcode-model-renderer/testingsubpath(
runModelBehavioralSuite) with controls/state completeness parity guards.New
/modeladapter subpath on every framework — thin shells over the one controller, mirroringeach framework's toolpath idiom:
@chestnutlabs/gcode-preview-react/model—useModelViewerhook +<ModelViewer>component.@chestnutlabs/gcode-preview-vue/model—useModelViewercomposable +<ModelViewer>component.@chestnutlabs/gcode-preview-svelte/model—createModelViewerstore/action + the raw@chestnutlabs/gcode-preview-svelte/model/ModelViewer.sveltecomponent.@chestnutlabs/gcode-preview-element/model(+/model/define) — the<gcode-model-viewer>customelement (tag chosen to avoid the reserved
<model-viewer>).All additive — the toolpath surface is unchanged, and toolpath-only consumers don't pull the model
renderer (it lives behind the opt-in
/modelsubpath). Every adapter passes the portable modelbehavioral suite; each package gains
@chestnutlabs/gcode-model-rendereras a dependency.Patch Changes
718d1bd,8810ba4,b25ddb6]:@chestnutlabs/gcode-preview-svelte@0.20.0
Minor Changes
#427
8810ba4Thanks @sobechestnut-dev! - Close the dark-capability gaps so no shipped capability is reachable only through theraw.renderer()escape hatch, with full parity across all four framework adapters (DD-031).New on the public controller (
GcodePreviewControls), so it flows to every adapter'scontrols:getRenderStats()— the DD-027 render-diagnostics snapshot (backend, GPU, geometry mode, buildparallelism, timings), previously reachable only on the Three renderer. Returns
nullon the 2Drenderer (which produces no GPU/geometry diagnostics — never a fabricated stats object).
pickSegment(ndcX, ndcY, threshold?)— source-mapping / segment picking, previously renderer-only.isColorModeAvailable(mode)— the honest per-file color-mode capability gate.New capability-aware state (
GcodePreviewState):availableColorModes,hasRetractions,hasColorChanges— refreshed after each parse, so a UI can offer and explain controls instead ofguessing (e.g. gray out feature coloring on a file with no feature roles, with a reason).
Adapter parity:
hiddenFeatureRolesis now a declarative prop (Vue/React/Svelte) and ahidden-feature-rolesattribute (Web Component) — the declarative form of
setFeatureRoleVisible(hide Skirt/Brim todeclutter a part). Gate it on
capabilities.featureRoles.capture()is now a top-level method on the Vue/React/Svelte handles too, matching the WebComponent's
element.capture().renderer/adjacentLayersgain property accessors; the package now also re-exportsRendererModeandPreviewRenderer.All additive — existing code keeps working unchanged; the 2D renderer honors the widened contract as
documented no-ops / honest
null. The portable behavioral suite is extended (layer-range, color-modegating, diagnostics + picking reachability) and gains a controls-completeness parity guard so a
capability can no longer ship in core and silently vanish from an adapter.
#427
b25ddb6Thanks @sobechestnut-dev! - Make interactive source-model viewing (STL / 3MF) a first-class, declarative half of the SDK —the Prepare side alongside the toolpath Preview side — so consumers no longer have to drop to the
imperative
createModelViewerengine to show a model in a framework (DD-031).New framework-neutral controller (
@chestnutlabs/gcode-model-renderer):createModelPreviewController(options)— the Prepare-side analogue ofgcode-preview-core's toolpathcontroller. It wraps the existing
createModelViewerengine unchanged and adds what a frameworkbinding needs: canvas-deferred construction with
bindCanvas(rebuilding on a canvas swap andreplaying the last source), a reactive
getState()/onStateChange()snapshot derived from theengine's events (
ModelPreviewState:loading/ready/rendererSupported/objectCount/materials/instancedCount/decimationApplied/bounds/plates/hasPlates/cameraState/progress/error),and an op queue for calls made before the canvas binds.
ModelPreviewControlsexposessetSource,setView, get/setCameraState,setBackground,setInteractionQuality,setRenderScope,frame,resize, andcapture.@chestnutlabs/gcode-model-renderer/testingsubpath(
runModelBehavioralSuite) with controls/state completeness parity guards.New
/modeladapter subpath on every framework — thin shells over the one controller, mirroringeach framework's toolpath idiom:
@chestnutlabs/gcode-preview-react/model—useModelViewerhook +<ModelViewer>component.@chestnutlabs/gcode-preview-vue/model—useModelViewercomposable +<ModelViewer>component.@chestnutlabs/gcode-preview-svelte/model—createModelViewerstore/action + the raw@chestnutlabs/gcode-preview-svelte/model/ModelViewer.sveltecomponent.@chestnutlabs/gcode-preview-element/model(+/model/define) — the<gcode-model-viewer>customelement (tag chosen to avoid the reserved
<model-viewer>).All additive — the toolpath surface is unchanged, and toolpath-only consumers don't pull the model
renderer (it lives behind the opt-in
/modelsubpath). Every adapter passes the portable modelbehavioral suite; each package gains
@chestnutlabs/gcode-model-rendereras a dependency.Patch Changes
718d1bd,8810ba4,b25ddb6]:@chestnutlabs/gcode-preview-vue@0.20.0
Minor Changes
#427
8810ba4Thanks @sobechestnut-dev! - Close the dark-capability gaps so no shipped capability is reachable only through theraw.renderer()escape hatch, with full parity across all four framework adapters (DD-031).New on the public controller (
GcodePreviewControls), so it flows to every adapter'scontrols:getRenderStats()— the DD-027 render-diagnostics snapshot (backend, GPU, geometry mode, buildparallelism, timings), previously reachable only on the Three renderer. Returns
nullon the 2Drenderer (which produces no GPU/geometry diagnostics — never a fabricated stats object).
pickSegment(ndcX, ndcY, threshold?)— source-mapping / segment picking, previously renderer-only.isColorModeAvailable(mode)— the honest per-file color-mode capability gate.New capability-aware state (
GcodePreviewState):availableColorModes,hasRetractions,hasColorChanges— refreshed after each parse, so a UI can offer and explain controls instead ofguessing (e.g. gray out feature coloring on a file with no feature roles, with a reason).
Adapter parity:
hiddenFeatureRolesis now a declarative prop (Vue/React/Svelte) and ahidden-feature-rolesattribute (Web Component) — the declarative form of
setFeatureRoleVisible(hide Skirt/Brim todeclutter a part). Gate it on
capabilities.featureRoles.capture()is now a top-level method on the Vue/React/Svelte handles too, matching the WebComponent's
element.capture().renderer/adjacentLayersgain property accessors; the package now also re-exportsRendererModeandPreviewRenderer.All additive — existing code keeps working unchanged; the 2D renderer honors the widened contract as
documented no-ops / honest
null. The portable behavioral suite is extended (layer-range, color-modegating, diagnostics + picking reachability) and gains a controls-completeness parity guard so a
capability can no longer ship in core and silently vanish from an adapter.
#427
b25ddb6Thanks @sobechestnut-dev! - Make interactive source-model viewing (STL / 3MF) a first-class, declarative half of the SDK —the Prepare side alongside the toolpath Preview side — so consumers no longer have to drop to the
imperative
createModelViewerengine to show a model in a framework (DD-031).New framework-neutral controller (
@chestnutlabs/gcode-model-renderer):createModelPreviewController(options)— the Prepare-side analogue ofgcode-preview-core's toolpathcontroller. It wraps the existing
createModelViewerengine unchanged and adds what a frameworkbinding needs: canvas-deferred construction with
bindCanvas(rebuilding on a canvas swap andreplaying the last source), a reactive
getState()/onStateChange()snapshot derived from theengine's events (
ModelPreviewState:loading/ready/rendererSupported/objectCount/materials/instancedCount/decimationApplied/bounds/plates/hasPlates/cameraState/progress/error),and an op queue for calls made before the canvas binds.
ModelPreviewControlsexposessetSource,setView, get/setCameraState,setBackground,setInteractionQuality,setRenderScope,frame,resize, andcapture.@chestnutlabs/gcode-model-renderer/testingsubpath(
runModelBehavioralSuite) with controls/state completeness parity guards.New
/modeladapter subpath on every framework — thin shells over the one controller, mirroringeach framework's toolpath idiom:
@chestnutlabs/gcode-preview-react/model—useModelViewerhook +<ModelViewer>component.@chestnutlabs/gcode-preview-vue/model—useModelViewercomposable +<ModelViewer>component.@chestnutlabs/gcode-preview-svelte/model—createModelViewerstore/action + the raw@chestnutlabs/gcode-preview-svelte/model/ModelViewer.sveltecomponent.@chestnutlabs/gcode-preview-element/model(+/model/define) — the<gcode-model-viewer>customelement (tag chosen to avoid the reserved
<model-viewer>).All additive — the toolpath surface is unchanged, and toolpath-only consumers don't pull the model
renderer (it lives behind the opt-in
/modelsubpath). Every adapter passes the portable modelbehavioral suite; each package gains
@chestnutlabs/gcode-model-rendereras a dependency.Patch Changes
718d1bd,8810ba4,b25ddb6]:@chestnutlabs/gcode-renderer-three@0.20.0
Minor Changes
718d1bdThanks @sobechestnut-dev! -CaptureOptionsgainsincludeBuildVolume?: boolean(defaulttrue). Set it tofalseto excludethe whole build-volume group (grid + bed surface + origin + cage) from the off-screen capture render
only — so
capture({ background: 'transparent', includeBuildVolume: false })produces a cleantoolpath-only cutout, matching
ModelRendererthumbnails. The live view is untouched (visibility isrestored synchronously, no intermediate frame is painted). The option flows through
GcodePreviewControls.captureto every adapter; it is a no-op where there is no build volume(
ModelViewer) or no capture (the 2D renderer).Patch Changes
@chestnutlabs/gcode-bgcode@0.20.0
Patch Changes
@chestnutlabs/gcode-colors@0.20.0
Patch Changes
@chestnutlabs/gcode-containers@0.20.0
Patch Changes
@chestnutlabs/gcode-dialects@0.20.0
Patch Changes
@chestnutlabs/gcode-parser@0.20.0
Patch Changes
@chestnutlabs/gcode-renderer-2d@0.20.0
Patch Changes
@chestnutlabs/toolpath-core@0.20.0