@weasel-js/core 1.11.0 → 1.12.0
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 +611 -0
- package/README.md +1 -1
- package/dist/WeaselProvider.js +1 -1
- package/dist/affordances/pathAnchors.js +10 -6
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/animation/index.js +3 -3
- package/dist/animation/rig/bindRig.js +1 -1
- package/dist/animation/rig/rigNode.js.map +1 -1
- package/dist/barrel/canvas.js +9 -3
- package/dist/barrel/interactions.js +5 -4
- package/dist/barrel/paint.js +4 -4
- package/dist/barrel/paths.js +10 -6
- package/dist/barrel/renderer.js +5 -3
- package/dist/barrel/routing.js +7 -12
- package/dist/barrel/scene.js +9 -5
- package/dist/barrel/text.js +2 -2
- package/dist/barrel/viewport.js +9 -4
- package/dist/canvas/Canvas.js +5 -2
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +23 -34
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/ModalityHud.js +1 -1
- package/dist/canvas/NodeShape.js +4 -1
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +1 -1
- package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +1 -1
- package/dist/canvas/SceneCanvas/SceneCanvasInput.js +17 -3
- package/dist/canvas/SceneCanvas/SceneCanvasInput.js.map +1 -1
- package/dist/canvas/SceneCanvas/SurfaceDeclarations.js +23 -0
- package/dist/canvas/SceneCanvas/SurfaceDeclarations.js.map +1 -0
- package/dist/canvas/SceneCanvas/builtinToolSets.js +30 -0
- package/dist/canvas/SceneCanvas/builtinToolSets.js.map +1 -0
- package/dist/canvas/SceneCanvas/canvasPassThrough.js +2 -0
- package/dist/canvas/SceneCanvas/canvasPassThrough.js.map +1 -1
- package/dist/canvas/SceneCanvas/coordTrace.js +5 -16
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +5 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +45 -5
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js +1 -11
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +7 -3
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -1
- package/dist/canvas/SceneCanvas/toolRegistry.js +8 -4
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -1
- package/dist/canvas/SceneCanvas/useActionTunings.js +6 -1
- package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +1 -11
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +2 -9
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js +94 -0
- package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +7 -2
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -1
- package/dist/canvas/SceneCanvas/useCanvasTools.js +15 -10
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useNodeKinds.js +1 -1
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +9 -3
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +23 -4
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +2 -3
- package/dist/canvas/SceneCanvas/useSceneCanvasTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneChrome.js +6 -7
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +24 -7
- package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js.map +1 -1
- package/dist/canvas/SceneCanvas/useScenePicking.js +2 -3
- package/dist/canvas/SceneCanvas/useScenePicking.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +2 -1
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneStandardActions.js +5 -5
- package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -1
- package/dist/canvas/SceneCanvas.js +27 -24
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +5 -22
- package/dist/canvas/SurfaceCanvas.js.map +1 -1
- package/dist/canvas/ViewMarker.js +35 -0
- package/dist/canvas/ViewMarker.js.map +1 -0
- package/dist/canvas/canvasRenderer.js +9 -5
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/contextAttributes.js +14 -0
- package/dist/canvas/contextAttributes.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +2 -0
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/booleans.js +2 -1
- package/dist/canvas/deps/booleans.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +9 -113
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +2 -2
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +10 -4
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/pathEditCommits.js +189 -0
- package/dist/canvas/deps/pathEditCommits.js.map +1 -0
- package/dist/canvas/deps/snap.js +12 -9
- package/dist/canvas/deps/snap.js.map +1 -1
- package/dist/canvas/deps/transformFollowers.js +20 -0
- package/dist/canvas/deps/transformFollowers.js.map +1 -0
- package/dist/canvas/derivedPath.js +20 -1
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawnBounds.js +38 -4
- package/dist/canvas/drawnBounds.js.map +1 -1
- package/dist/canvas/inheritedPaints.js +44 -0
- package/dist/canvas/inheritedPaints.js.map +1 -0
- package/dist/canvas/nodeShapes/derivedPainter.js +23 -16
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +13 -34
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +12 -10
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +4 -5
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +12 -11
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +13 -12
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/overlayRoleStrokes.js +12 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/pathOverlay.js +27 -7
- package/dist/canvas/pathOverlay.js.map +1 -1
- package/dist/canvas/pickReach.js +3 -3
- package/dist/canvas/pickReach.js.map +1 -1
- package/dist/canvas/pickWalk.js +3 -1
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/renderDebugSnapshot.js +1 -0
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +7 -6
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +2 -1
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +2 -1
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/surfaceContribution.js +12 -8
- package/dist/canvas/surfaceContribution.js.map +1 -1
- package/dist/canvas/useCanvasPaint.js +2 -1
- package/dist/canvas/useCanvasPaint.js.map +1 -1
- package/dist/canvas/useCanvasView.js +4 -2
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useInFlightBounds.js +52 -0
- package/dist/canvas/useInFlightBounds.js.map +1 -0
- package/dist/canvas/useLayerStack.js +6 -2
- package/dist/canvas/useLayerStack.js.map +1 -1
- package/dist/canvas/useViewAim.js +121 -0
- package/dist/canvas/useViewAim.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +7 -9
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/useViewNesting.js +3 -2
- package/dist/canvas/useViewNesting.js.map +1 -1
- package/dist/canvas/useViewRegistrySurface.js +4 -2
- package/dist/canvas/useViewRegistrySurface.js.map +1 -1
- package/dist/canvas/viewMarkers.js +63 -0
- package/dist/canvas/viewMarkers.js.map +1 -0
- package/dist/canvas/viewRegistry.js +27 -1
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/clipboard.d.ts +3 -2
- package/dist/{clone-DZDrfIlU.d.ts → clone-C3e0OTuF.d.ts} +8 -21
- package/dist/clone.d.ts +4 -3
- package/dist/core/geometry/autoPoseDescriptor.js +1 -1
- package/dist/core/ops/setDependsOn.js +37 -0
- package/dist/core/ops/setDependsOn.js.map +1 -0
- package/dist/core/ops/writtenBy.js +53 -0
- package/dist/core/ops/writtenBy.js.map +1 -0
- package/dist/core/pages/fitViewToPage.js +12 -1
- package/dist/core/pages/fitViewToPage.js.map +1 -1
- package/dist/core/pages/pageEdits.js +163 -0
- package/dist/core/pages/pageEdits.js.map +1 -0
- package/dist/core/pages/pages.js +30 -1
- package/dist/core/pages/pages.js.map +1 -1
- package/dist/core/paint/meshKindLazy.js +59 -2
- package/dist/core/paint/meshKindLazy.js.map +1 -1
- package/dist/core/scene/NodeRouting.js +8 -3
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- package/dist/core/scene/carryDescendants.js +51 -0
- package/dist/core/scene/carryDescendants.js.map +1 -0
- package/dist/core/scene/clipNothing.js +13 -0
- package/dist/core/scene/clipNothing.js.map +1 -0
- package/dist/core/scene/depMemo.js +11 -3
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/dependents.js +7 -1
- package/dist/core/scene/dependents.js.map +1 -1
- package/dist/core/scene/derivedParts.js +10 -11
- package/dist/core/scene/derivedParts.js.map +1 -1
- package/dist/core/scene/docValues.js +57 -0
- package/dist/core/scene/docValues.js.map +1 -0
- package/dist/core/scene/editPass.js +111 -0
- package/dist/core/scene/editPass.js.map +1 -0
- package/dist/core/scene/effectivePose.js +13 -2
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +4 -1
- package/dist/core/scene/fieldEdits.js.map +1 -1
- package/dist/core/scene/fontReads.js +37 -0
- package/dist/core/scene/fontReads.js.map +1 -0
- package/dist/core/scene/historyFacade.js +1 -0
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/inheritedPaint.js +75 -0
- package/dist/core/scene/inheritedPaint.js.map +1 -0
- package/dist/core/scene/kitRegistry.js +5 -0
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layoutPass.js +28 -3
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/core/scene/nodeMemo.js +15 -7
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/pathEffects/blend.js.map +1 -1
- package/dist/core/scene/pathEffects/derive.js +7 -2
- package/dist/core/scene/pathEffects/derive.js.map +1 -1
- package/dist/core/scene/pathEffects/effects.js +3 -1
- package/dist/core/scene/pathEffects/effects.js.map +1 -1
- package/dist/core/scene/pathEffects/textAlong.js +95 -0
- package/dist/core/scene/pathEffects/textAlong.js.map +1 -0
- package/dist/core/scene/recorder.js +28 -19
- package/dist/core/scene/recorder.js.map +1 -1
- package/dist/core/scene/scene.js +15 -9
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneChanges.js +13 -0
- package/dist/core/scene/sceneChanges.js.map +1 -0
- package/dist/core/scene/sceneEdits.js +8 -1
- package/dist/core/scene/sceneEdits.js.map +1 -1
- package/dist/core/scene/sceneMutators.js +1 -0
- package/dist/core/scene/sceneMutators.js.map +1 -1
- package/dist/core/scene/sceneRecording.js +20 -3
- package/dist/core/scene/sceneRecording.js.map +1 -1
- package/dist/core/scene/sceneSelection.js +4 -1
- package/dist/core/scene/sceneSelection.js.map +1 -1
- package/dist/core/scene/sceneState.js +11 -5
- package/dist/core/scene/sceneState.js.map +1 -1
- package/dist/core/scene/serialization.js +5 -3
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/types.js.map +1 -1
- package/dist/core/scene/unitScopes.js +19 -1
- package/dist/core/scene/unitScopes.js.map +1 -1
- package/dist/core/selection/usePublishSceneSelection.js +6 -12
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -1
- package/dist/core/shapeKinds.js +25 -11
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/{cornerHandles-Camw_yeu.d.ts → cornerHandles-p8fDIAKt.d.ts} +3 -2
- package/dist/debug/createDebugOverlayLayer.js +16 -111
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js +2 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/defaultTheme.js +4 -2
- package/dist/debug/defaultTheme.js.map +1 -1
- package/dist/debug/features.js +17 -0
- package/dist/debug/features.js.map +1 -0
- package/dist/debug/overlayPanels.js +117 -0
- package/dist/debug/overlayPanels.js.map +1 -0
- package/dist/debug/parseDebugFlags.js +4 -13
- package/dist/debug/parseDebugFlags.js.map +1 -1
- package/dist/{depSchema-Cgfu_G9s.d.ts → depSchema-mG19aEdD.d.ts} +174 -904
- package/dist/devtools/handlers.js +112 -0
- package/dist/devtools/handlers.js.map +1 -0
- package/dist/devtools/history.js +71 -0
- package/dist/devtools/history.js.map +1 -0
- package/dist/devtools/hook.js +74 -0
- package/dist/devtools/hook.js.map +1 -0
- package/dist/devtools/label.js +25 -0
- package/dist/devtools/label.js.map +1 -0
- package/dist/devtools/notices.js +58 -0
- package/dist/devtools/notices.js.map +1 -0
- package/dist/devtools/protocol.js +7 -0
- package/dist/devtools/protocol.js.map +1 -0
- package/dist/devtools/registry.js +90 -0
- package/dist/devtools/registry.js.map +1 -0
- package/dist/devtools/root.js +80 -0
- package/dist/devtools/root.js.map +1 -0
- package/dist/devtools/serialize.js +86 -0
- package/dist/devtools/serialize.js.map +1 -0
- package/dist/devtools/session.js +111 -0
- package/dist/devtools/session.js.map +1 -0
- package/dist/devtools/transport.js +67 -0
- package/dist/devtools/transport.js.map +1 -0
- package/dist/devtools/useDevtoolsRoot.js +81 -0
- package/dist/devtools/useDevtoolsRoot.js.map +1 -0
- package/dist/devtools-protocol.d.ts +435 -0
- package/dist/devtools-protocol.js +7 -0
- package/dist/devtools.d.ts +8 -0
- package/dist/devtools.js +12 -0
- package/dist/devtools.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js +16 -10
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +25 -2
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/measure/measureCommands.js +7 -5
- package/dist/features/measure/measureCommands.js.map +1 -1
- package/dist/features/measure/measureContribution.js +4 -2
- package/dist/features/measure/measureContribution.js.map +1 -1
- package/dist/features/modes/modeTriggers.js +7 -3
- package/dist/features/modes/modeTriggers.js.map +1 -1
- package/dist/features/pathEffects/effectSources.js +60 -0
- package/dist/features/pathEffects/effectSources.js.map +1 -0
- package/dist/features/pathEffects/readSource.js +17 -1
- package/dist/features/pathEffects/readSource.js.map +1 -1
- package/dist/features/pathEffects/textItems.js +53 -0
- package/dist/features/pathEffects/textItems.js.map +1 -0
- package/dist/features/pathEffects/useEffectSourcesLayer.js +57 -0
- package/dist/features/pathEffects/useEffectSourcesLayer.js.map +1 -0
- package/dist/features/paths/index.js +2 -2
- package/dist/features/paths/pathEditExtension.js.map +1 -1
- package/dist/features/paths/pathEditState.js +5 -2
- package/dist/features/paths/pathEditState.js.map +1 -1
- package/dist/features/paths/pathSnap/pathSnapSource.js +5 -5
- package/dist/features/paths/pathSnap/pathSnapSource.js.map +1 -1
- package/dist/features/paths/pathSnap/sceneIndex.js +10 -3
- package/dist/features/paths/pathSnap/sceneIndex.js.map +1 -1
- package/dist/features/selection/selectionPose.js +4 -1
- package/dist/features/selection/selectionPose.js.map +1 -1
- package/dist/features/snap/gather.js +9 -1
- package/dist/features/snap/gather.js.map +1 -1
- package/dist/features/snap/lazySession.js +17 -0
- package/dist/features/snap/lazySession.js.map +1 -0
- package/dist/features/snap/marks.js.map +1 -1
- package/dist/features/snap/probes2d.js +27 -19
- package/dist/features/snap/probes2d.js.map +1 -1
- package/dist/features/snap/readoutLayer.js.map +1 -1
- package/dist/features/snap/roles.js +2 -1
- package/dist/features/snap/roles.js.map +1 -1
- package/dist/features/snap/rotationSource.js +25 -8
- package/dist/features/snap/rotationSource.js.map +1 -1
- package/dist/features/snap/sceneSession2d.js +6 -4
- package/dist/features/snap/sceneSession2d.js.map +1 -1
- package/dist/features/snap/session2d.js +37 -23
- package/dist/features/snap/session2d.js.map +1 -1
- package/dist/features/snap/spanSnap.js +5 -2
- package/dist/features/snap/spanSnap.js.map +1 -1
- package/dist/features/text/sceneTextDrafts.js +65 -0
- package/dist/features/text/sceneTextDrafts.js.map +1 -0
- package/dist/features/text/textHitAt.js +31 -2
- package/dist/features/text/textHitAt.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +22 -18
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/aim.js +105 -0
- package/dist/features/viewports/aim.js.map +1 -0
- package/dist/features/viewports/viewMarker.js +82 -0
- package/dist/features/viewports/viewMarker.js.map +1 -0
- package/dist/features/viewports/viewMarkerDrag.js +55 -0
- package/dist/features/viewports/viewMarkerDrag.js.map +1 -0
- package/dist/icons.table.js +1 -1
- package/dist/icons.table.js.map +1 -1
- package/dist/icons.table.json +0 -10
- package/dist/index.d.ts +1198 -894
- package/dist/index.js +55 -38
- package/dist/interactions/actions/align/action.js +6 -4
- package/dist/interactions/actions/align/action.js.map +1 -1
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +7 -1
- package/dist/interactions/actions/booleans/action.js.map +1 -1
- package/dist/interactions/actions/booleans/booleans.js +2 -1
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +6 -5
- package/dist/interactions/actions/booleans/operands.js.map +1 -1
- package/dist/interactions/actions/clipboard/action.js +27 -17
- package/dist/interactions/actions/clipboard/action.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +1 -1
- package/dist/interactions/actions/clone/behaviors.js +4 -4
- package/dist/interactions/actions/clone/behaviors.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +44 -23
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorJoin.js +12 -6
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +8 -5
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
- package/dist/interactions/actions/defaults/cancelGesture.js +11 -8
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/contextMenu.js +17 -8
- package/dist/interactions/actions/defaults/contextMenu.js.map +1 -1
- package/dist/interactions/actions/defaults/createPaintAction.js +2 -2
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js +64 -41
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +12 -9
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +19 -9
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/escape.js +11 -8
- package/dist/interactions/actions/defaults/escape.js.map +1 -1
- package/dist/interactions/actions/defaults/exitPathEdit.js +7 -4
- package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +21 -15
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +17 -9
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +7 -4
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +21 -40
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pathEditTools.js +11 -8
- package/dist/interactions/actions/defaults/pathEditTools.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +7 -4
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/reorder.js +24 -6
- package/dist/interactions/actions/defaults/reorder.js.map +1 -1
- package/dist/interactions/actions/defaults/selectAll.js +8 -5
- package/dist/interactions/actions/defaults/selectAll.js.map +1 -1
- package/dist/interactions/actions/defaults/setFill.js +7 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +1 -1
- package/dist/interactions/actions/defaults/setStroke.js +12 -11
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js +7 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js +7 -4
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/undoRedo.js +19 -13
- package/dist/interactions/actions/defaults/undoRedo.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js +16 -7
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js +24 -6
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/distribute/action.js +6 -4
- package/dist/interactions/actions/distribute/action.js.map +1 -1
- package/dist/interactions/actions/drawnBoxes.js +2 -1
- package/dist/interactions/actions/drawnBoxes.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +10 -10
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +41 -8
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -1
- package/dist/interactions/actions/flip/action.js +14 -6
- package/dist/interactions/actions/flip/action.js.map +1 -1
- package/dist/interactions/actions/gestureLifecycle.js +5 -2
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +1 -2
- package/dist/interactions/actions/insert/action.js.map +1 -1
- package/dist/interactions/actions/insert/commit.js +1 -1
- package/dist/interactions/actions/insert/parent.js +11 -0
- package/dist/interactions/actions/insert/parent.js.map +1 -0
- package/dist/interactions/actions/insert/placeAction.js +7 -2
- package/dist/interactions/actions/insert/placeAction.js.map +1 -1
- package/dist/interactions/actions/insert/repositionAction.js +2 -1
- package/dist/interactions/actions/insert/repositionAction.js.map +1 -1
- package/dist/interactions/actions/insert/session.js +5 -1
- package/dist/interactions/actions/insert/session.js.map +1 -1
- package/dist/interactions/actions/move/action.js +15 -8
- package/dist/interactions/actions/move/action.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +0 -1
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +1 -1
- package/dist/interactions/actions/move/capture.js +1 -1
- package/dist/interactions/actions/move/commit/index.js +0 -2
- package/dist/interactions/actions/move/commit/index.js.map +1 -1
- package/dist/interactions/actions/move/commit/layoutDrop.js +2 -2
- package/dist/interactions/actions/move/commit/layoutRelease.js +2 -2
- package/dist/interactions/actions/move/commit/reparent.js +11 -5
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -1
- package/dist/interactions/actions/move/frame.js +4 -10
- package/dist/interactions/actions/move/frame.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +20 -17
- package/dist/interactions/actions/move/landedDescendants.js.map +1 -1
- package/dist/interactions/actions/move/layout/container.js +2 -1
- package/dist/interactions/actions/move/layout/container.js.map +1 -1
- package/dist/interactions/actions/move/layout/dragged.js +1 -1
- package/dist/interactions/actions/move/layout/dropPass.js +18 -1
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -1
- package/dist/interactions/actions/move/layout/exits.js +5 -5
- package/dist/interactions/actions/move/layout/exits.js.map +1 -1
- package/dist/interactions/actions/move/session.js +14 -3
- package/dist/interactions/actions/move/session.js.map +1 -1
- package/dist/interactions/actions/move/translate.js +8 -37
- package/dist/interactions/actions/move/translate.js.map +1 -1
- package/dist/interactions/actions/moveNodes.js +87 -0
- package/dist/interactions/actions/moveNodes.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js +8 -5
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -1
- package/dist/interactions/actions/outlines/outlineStroke.js +5 -3
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -1
- package/dist/interactions/actions/pathCommands/cutJoin.js +8 -5
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -1
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +83 -72
- package/dist/interactions/actions/resize/action.js.map +1 -1
- package/dist/interactions/actions/resize/commit.js +2 -1
- package/dist/interactions/actions/resize/commit.js.map +1 -1
- package/dist/interactions/actions/resize/cornerHandles.js +2 -1
- package/dist/interactions/actions/resize/cornerHandles.js.map +1 -1
- package/dist/interactions/actions/resize/session.js +2 -0
- package/dist/interactions/actions/resize/session.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js +3 -3
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +7 -4
- package/dist/interactions/actions/rotate/action.js.map +1 -1
- package/dist/interactions/actions/rotate/commit.js +2 -1
- package/dist/interactions/actions/rotate/commit.js.map +1 -1
- package/dist/interactions/actions/rotate/session.js +2 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -1
- package/dist/interactions/actions/selectionSubtree.js +25 -9
- package/dist/interactions/actions/selectionSubtree.js.map +1 -1
- package/dist/interactions/actions/testUtils.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +13 -11
- package/dist/interactions/actions/transform-again/action.js.map +1 -1
- package/dist/interactions/actions/transformFinish.js +106 -0
- package/dist/interactions/actions/transformFinish.js.map +1 -0
- package/dist/json.d.ts +4 -0
- package/dist/json.js +3 -0
- package/dist/kitSettingsSchema.js +8 -5
- package/dist/kitSettingsSchema.js.map +1 -1
- package/dist/{math-CrJULaZI.d.ts → math-B56zxVs5.d.ts} +10 -1
- package/dist/math.d.ts +1 -1
- package/dist/math.js +2 -1
- package/dist/move.d.ts +5 -4
- package/dist/{options-p9GZMXbY.d.ts → options-DBxEryYq.d.ts} +1 -1
- package/dist/resize.d.ts +4 -3
- package/dist/routing.d.ts +1 -1
- package/dist/routing.js +2 -2
- package/dist/test-hook/createTestHook.js +1 -1
- package/dist/test-hook/createTestHook.js.map +1 -1
- package/dist/test-hook/useTestHook.js +2 -1
- package/dist/test-hook/useTestHook.js.map +1 -1
- package/dist/test-seams.d.ts +9 -5
- package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js +2 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/dragPanContribution.js +4 -1
- package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js +7 -4
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js +1 -0
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js +1 -0
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +1 -0
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/measure/useMeasureTool.js +12 -5
- package/dist/tools/builtin/measure/useMeasureTool.js.map +1 -1
- package/dist/tools/builtin/pen/penHandle.js +3 -5
- package/dist/tools/builtin/pen/penHandle.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +14 -6
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +13 -4
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +1 -0
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +3 -2
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -1
- package/dist/tools/builtin/select/pressDecision.js +32 -0
- package/dist/tools/builtin/select/pressDecision.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +22 -13
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +13 -10
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +22 -8
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +13 -4
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/sticky/stickyNode.js +4 -1
- package/dist/tools/builtin/sticky/stickyNode.js.map +1 -1
- package/dist/tools/builtin/sticky/useStickyTool.js +10 -5
- package/dist/tools/builtin/sticky/useStickyTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +3 -1
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/index.js +26 -0
- package/dist/{types-CHVXGfYm.d.ts → types-7puAuVD2.d.ts} +3 -262
- package/dist/types-BN9hbdMI.d.ts +184 -0
- package/dist/types-CniVctmk.d.ts +949 -0
- package/dist/types-oFeQ5VjV.d.ts +264 -0
- package/dist/util/paint.js +1 -3
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +39 -25
- package/dist/canvas/SceneCanvas/useBuiltinRigTools.js +0 -65
- package/dist/canvas/SceneCanvas/useBuiltinRigTools.js.map +0 -1
- package/dist/tools/builtin/bone/boneActions.js +0 -156
- package/dist/tools/builtin/bone/boneActions.js.map +0 -1
- package/dist/tools/builtin/bone/boneOverlay.js +0 -71
- package/dist/tools/builtin/bone/boneOverlay.js.map +0 -1
- package/dist/tools/builtin/bone/placedRig.js +0 -28
- package/dist/tools/builtin/bone/placedRig.js.map +0 -1
- package/dist/tools/builtin/bone/rigEditState.js +0 -30
- package/dist/tools/builtin/bone/rigEditState.js.map +0 -1
- package/dist/tools/builtin/bone/useBoneTool.js +0 -125
- package/dist/tools/builtin/bone/useBoneTool.js.map +0 -1
- package/dist/tools/builtin/weight/useWeightTool.js +0 -101
- package/dist/tools/builtin/weight/useWeightTool.js.map +0 -1
- package/dist/tools/builtin/weight/weightActions.js +0 -140
- package/dist/tools/builtin/weight/weightActions.js.map +0 -1
- package/dist/tools/builtin/weight/weightOverlay.js +0 -78
- package/dist/tools/builtin/weight/weightOverlay.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,616 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.12.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 13e597d: Text can follow a path. `@weasel-js/geom` adds a `'path'` track shape (`pathShape`), a `side` override on `trackRun`,
|
|
8
|
+
and `placeAlongRun`, which turns item lengths into places along a run, in `RunOrder` `'reading'` or `'track'`.
|
|
9
|
+
`TrackShape` gains a required `closed` member, so a shape implemented outside geom has to add it.
|
|
10
|
+
`runPlaces` and `runLength` moved there from `@weasel-js/ui`, which re-exports `runPlaces` by name, so its curved rows
|
|
11
|
+
come from geom's placement. `measurePath` takes `keepCorners`. `@weasel-js/text` adds `textClusters`, a line's
|
|
12
|
+
grapheme clusters as outlines with their advances. `@weasel-js/core` adds the `textAlong` path effect; every effect
|
|
13
|
+
takes `hideSources`, effect sources can carry a list of items, curved text is derived again when a font loads, a
|
|
14
|
+
hidden source is edited through its effect, and Delete, Cut and Expand now remove an effect's hidden sources with
|
|
15
|
+
it. A committed in-place text edit is labeled "Edit text" in history.
|
|
16
|
+
`@weasel-js/path-tools` adds Text Along Path (Alt+Shift+X), Release and Set Path. `useTextEdit` in
|
|
17
|
+
`@weasel-js/text-dom` gains `onDraft`.
|
|
18
|
+
|
|
19
|
+
<!-- bump-approved: minor: maintainer — 1.12.0 release requested 2026-10-22 -->
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- 0996ce6: `captureGesture` captures the next click, double click, drag, right click or keystroke as a gesture
|
|
24
|
+
spec, for a binding editor that rebinds pointer input as well as keys. It tells a click from a drag
|
|
25
|
+
with the dispatcher's own recognizer and drag threshold, writes the platform's primary modifier as
|
|
26
|
+
`mod`, and takes every event of what it captures from the page; Escape or an abort resolves `null`.
|
|
27
|
+
`captureKey` is now `captureGesture` limited to a keystroke.
|
|
28
|
+
- 3716e73: The dev-time route-conflict check and devtools' registry listing now read contribution bindings under
|
|
29
|
+
their binding overrides, as dispatch does: a binding rebound onto a taken key is reported, and an
|
|
30
|
+
unbound one is no longer listed or reported. The conflict check runs again when the overrides change.
|
|
31
|
+
`overriddenBindings` returns a binding list under the overrides in force, and `findScopedConflicts`
|
|
32
|
+
takes them as `overrides`.
|
|
33
|
+
- b571ad6: A node's `fill: 'inherit'` or `stroke: 'inherit'` now takes its nearest enclosing container's fill or stroke whole. If that container inherits too, the lookup keeps going up, and at the root it is none. A container's fill and stroke are only a source: the built-in `kit:shape` and `kit:path` painters no longer paint a container's own fill or stroke, and its interior is no longer hit for picking.
|
|
34
|
+
|
|
35
|
+
The scene's draw wrapper passes the resolved paint to painters as `ctx.inherited` on `NodePaintCtx`, and pickers pass it on `NodeInkCtx`. A painter's memo has to key on it: `nodeMemo` takes an extra reference-compared key for this, and the paint stays the same object while its sources are unchanged. **A custom painter that does not read `ctx.inherited` paints an `'inherit'` field as none.** Pass the field and `ctx?.inherited?.fill` to `resolveFill` (or `resolveStroke`) to pick it up. `diagram:shape` reads it. Readers outside a painter can use `inheritedPaintIn(scene, node)` and `withInheritedPaint(data, inherited)`, and `paintAbove(scene, node)` says what inheriting would paint.
|
|
36
|
+
|
|
37
|
+
SVG import turns a `<g>`'s fill and stroke into its container's, and a child that sets none of them gets `'inherit'`. A gradient, or a child faded further than its group, is still copied onto the child. Export writes a container's paint on its `<g>` and leaves the attribute off a child that inherits a solid one.
|
|
38
|
+
|
|
39
|
+
`SelectionPanel` adds an Inherit choice beside None for a node's fill and stroke, showing the paint it would take. `PaintField` and `PaintInput` offer it when given `inherit` (`{ paint, onInherit }`); their `value` may be `'inherit'`, and `onChange` is unchanged.
|
|
40
|
+
- 1cc3d07: Pressing a node inside a selected group no longer selects that node on the press. A drag that starts
|
|
41
|
+
there moves the group, and a click that ends without a drag selects the node, as a press on one member
|
|
42
|
+
of a multi-selection already did. It used to select the member on the press, so the drag moved the
|
|
43
|
+
member alone and left the rest of the group behind.
|
|
44
|
+
|
|
45
|
+
A group here is a container whose pose derives from its children (`dependsOn: 'children'` with a
|
|
46
|
+
`derivePose`), which is what the `group` action makes in a scene that composes poses by identity. A
|
|
47
|
+
selected container with a pose of its own, such as a diagram container, still lets a press pick the
|
|
48
|
+
member out of it.
|
|
49
|
+
- 78f29de: Lenses in weaselforge. Alt+L opens the Loupe keymap, and `l` adds a lens: a bubble showing the patch
|
|
50
|
+
of a story under its reticle, magnified, or rendered with a comparison such as the opposite mode, an
|
|
51
|
+
arg or a DPR, as Swap, Split or Difference. A lens shows a Live second render or, from the dev
|
|
52
|
+
server, Pixels captured in headless Chromium; Playwright is a new optional peer of
|
|
53
|
+
`@weasel-js/forge`, and without it a lens offers Live only. Token, Contrast and pixel-grid readouts
|
|
54
|
+
sit in the lens chrome, and Alt+Slash opens a panel listing every key binding the workshop
|
|
55
|
+
registers.
|
|
56
|
+
|
|
57
|
+
Everything below is additive.
|
|
58
|
+
|
|
59
|
+
forge: the shell config takes `capture.allowOrigins`, naming what a capture page may load besides
|
|
60
|
+
the dev server, and `loupe.modeGlobal`, the global an opposite-mode comparison flips. A global
|
|
61
|
+
declaration may give `opposite(value, globals)`, the value that comparison flips it to.
|
|
62
|
+
`<TrialHost>` takes a `copy` prop, which makes the host a second copy of a trial's story, under
|
|
63
|
+
globals of its own. `@weasel-js/forge/shell` exports `followEdits`, and `@weasel-js/forge/frame`
|
|
64
|
+
exports `mountCapture`, which mounts a capture page.
|
|
65
|
+
|
|
66
|
+
labkit: the loupe entry gains `<LensOverlay>` (whose `renderReadouts` is handed `LensReadoutProps`),
|
|
67
|
+
`<LensActions>`, the lens scene and its ops, the `LensSource` contract, `createLoupeKeymap`,
|
|
68
|
+
`probeUnderLens` and `LENS_REST_MS`. A lab has an `overlay` chrome region, rendered over the trials
|
|
69
|
+
inside the lab surface, and `useLabEntries` reads the ambient entries installed on the lab, its
|
|
70
|
+
keymaps among them. Each lab surface gains a `'top'` canvas layer for one tenant above `'over'`,
|
|
71
|
+
made only while a tenant asks for it; a surface owner offers it by publishing `top` and `claimTop`
|
|
72
|
+
in its `SurfaceCanvases`. `surface.scope()` takes a list of elements as well as one
|
|
73
|
+
(`SurfaceScope`).
|
|
74
|
+
|
|
75
|
+
Elsewhere: `@weasel-js/core/json` exports `stableStringify` for Node; paint exports `contrastRatio`
|
|
76
|
+
and `wcagLevels`; svg exports `specificity`, `compareSpecificity` and `splitTopLevel`; an action's
|
|
77
|
+
`enabled` may return a reason as text (`ActionUnavailable` in routing, re-exported by core), which
|
|
78
|
+
the command palette shows as written.
|
|
79
|
+
- 92a0f2d: A keymap's leader triggered without a key can now hold its keymap open:
|
|
80
|
+
`trigger('keymap.<id>', { hold: true })` keeps it open through any number of
|
|
81
|
+
inputs until Escape, where a plain `trigger` still opens it for one input.
|
|
82
|
+
`KEYMAP_HOLD` is the `heldBy` such a level reports.
|
|
83
|
+
- c697535: Every binding the kit ships now declares an id, so a binding override names it by that id rather
|
|
84
|
+
than by its owner and position: `undo.key`, `rect.drag`, `nudge.left.big`, `selection.rotate.handle`,
|
|
85
|
+
`tool.activate.rect`. The scheme is `<owner>.<role>`, the owner being the action for an action's own
|
|
86
|
+
binding and the tool or entry for a contribution's (`docs/taxonomy.md`, "binding override"). An
|
|
87
|
+
override written against a positional id such as `select#3` no longer reaches its binding.
|
|
88
|
+
|
|
89
|
+
An action's `defaultBinding` that was a bare spec is now a one-entry `{ spec, opts: { id } }` array;
|
|
90
|
+
code reading `defaultBinding` as a spec reads it through `actionBindings`.
|
|
91
|
+
- c2fb65c: Keymaps behind a leader key. `keymapContribution` builds a keymap, whose bindings are live only while
|
|
92
|
+
it is open, and the leader that opens it: tap the leader for one input, or hold it to keep the keymap
|
|
93
|
+
open. Escape always closes it; a key it does not bind is ignored, or passed on under the new
|
|
94
|
+
`gestures.keymapUnbound` kit setting. `<KeymapHint>` lists an open keymap's keys, and `formatShortcut`
|
|
95
|
+
draws a key inside one as `Loupe ▸ 2`.
|
|
96
|
+
|
|
97
|
+
Bindings can now be rebound or removed by id, on actions and contributions alike:
|
|
98
|
+
`ActionsRegistry.overrideBindings` and `<SceneCanvas bindingOverrides>`, written as route strings or
|
|
99
|
+
with the new `key()`, `held()` and `unbound()` helpers. `captureKey` reads the next keystroke for a
|
|
100
|
+
binding editor.
|
|
101
|
+
|
|
102
|
+
`modeShortcutSpec` now reads through `key()`, so a mode shortcut written `'Space'` or `'Esc'` names
|
|
103
|
+
the key it says; before, either matched nothing.
|
|
104
|
+
|
|
105
|
+
Additive: `ActionsRegistry` gains `overrideBindings` and `bindingOverrides`, so a hand-written
|
|
106
|
+
registry must implement them.
|
|
107
|
+
- 24f2495: An absent fill or stroke now means none everywhere, read through `resolveFill` and `resolveStroke`. This breaks three things that used to fill in a default:
|
|
108
|
+
|
|
109
|
+
- **A text node built without a `fill` now draws no glyphs.** Write `fill: { paint: solid('#000') }`, or `DEFAULT_TEXT_FILL`, now exported from `@weasel-js/text` and `@weasel-js/core`. `DEFAULT_TEXT_STYLE.fill` is `null`. The text insert, the sticky note and SVG import write black themselves.
|
|
110
|
+
- **A derived part with no `fill` or `stroke` no longer takes its node's.** Write `INHERIT` (`'inherit'`) for that; `DerivedPart` allows it, and `resolvePartPaint` is the one reading of a part's paint.
|
|
111
|
+
- **`diagramShape` drops its `defaultFill` and `defaultStroke` options.** An outline paints what its data names; `diagramScene` already writes the default style onto every node. SVG import writes SVG's initial black onto text that names no fill, and SVG export writes `fill="none"` for text that has none.
|
|
112
|
+
|
|
113
|
+
`setFill` and `setStroke` write None as a record with no `paint` rather than `null`, so a stroke keeps its width and dash; a `paint: null` passed when the gesture starts used to be read as no paint given and painted the default color. The selection panel shows a fill or stroke paint as a paint, None or Mixed, never unset; `nestedPaintValue` is that reading. Booleans, Outline Stroke and the character bar read a fill with no paint as unfilled. Core re-exports `resolveFill`, `resolveStroke`, `INHERIT` and their types.
|
|
114
|
+
- d9fd036: `@weasel-js/pdf` rasterizes a group with effects over the group's bounds grown by how far its effects reach, rather than over the whole page, so a small blurred badge no longer costs a full-page bitmap. An `Effect` can now say how far it reaches with the new optional `reach`, in device pixels; `blur` sets it, and `effectsReach` (`@weasel-js/renderer`) adds up a stack's. An effect without one, such as `vignette`, still covers the whole page. The renderer's retained surfaces use the same bound, and `commandsBounds` takes the scale the commands will be drawn at.
|
|
115
|
+
|
|
116
|
+
`screen`-unit paint inside a rasterized group now lands in the PDF where the vector path puts it, in page points rather than raster pixels. `WeaselRenderer.render` takes `screen` in its options, naming what screen space is when it is not the drawing surface, and `renderSceneToPixels` and a raster session's `render` pass it through as `screen`.
|
|
117
|
+
- f461572: `DiagramView` now draws a node's perimeter port labels. A node's `portLabels` are children of its
|
|
118
|
+
container and sit outside its box, and a container clips its children to its painter's
|
|
119
|
+
silhouette, so every one of them was clipped away. `buildBody` now gives the container a `clipFromPose` that clips nothing.
|
|
120
|
+
|
|
121
|
+
Core exports that clip as `clipNothing` (from `@weasel-js/core` and `@weasel-js/core/math`),
|
|
122
|
+
for any container whose children may draw outside it. Every scene's registry carries it under
|
|
123
|
+
`CLIP_NOTHING`, so a container using it saves and loads with no registry entry of the consumer's.
|
|
124
|
+
A symmetry group now uses it too, and still saves under `SYMMETRY_CLIP_KEY`.
|
|
125
|
+
- 3bf5edb: Add `resolveFill` and `resolveStroke`, the one answer to what a fill or stroke field paints: absent, `null` and a record with no `paint` are none, a paint with alpha 0 is still a paint, and `INHERIT` (`'inherit'`) takes whatever the caller passes as inherited. `fillHasInk` and `strokeHasInk` now go through them, so `fillHasInk({ paint: null })` is `false` where it used to be `true`.
|
|
126
|
+
- 92b8df8: A node with no `data.fill` now paints no fill. It used to paint gray (`#888`) in the built-in
|
|
127
|
+
painters and in `svgLeafFromKit`'s export, so a container from Cmd+G drew a gray box behind its
|
|
128
|
+
members, and a shape inserted without a fill showed up gray. This changes what existing scenes look
|
|
129
|
+
like: a node that relied on the gray default needs an explicit `fill`. `DEFAULT_SHAPE_FILL` is
|
|
130
|
+
removed, since nothing falls back to it any more, and `resolveNodeFill` takes no fallback argument.
|
|
131
|
+
|
|
132
|
+
The rect fallback painter no longer matches containers. A container without `clipFromPose` used to
|
|
133
|
+
take that painter's box as its silhouette and clip its members to it, which cut off the outer half of
|
|
134
|
+
their strokes, since a group's derived pose leaves stroke width out. A container now paints
|
|
135
|
+
nothing, even a `data.fill` it declares, and clips nothing; one that should clip says so with
|
|
136
|
+
`clipFromPose`, and a background behind a group's members is a leaf among them.
|
|
137
|
+
- 91a1d84: `useVisibleRaf`, `defaultStorage` and the deprecated `cornerPoint` now carry a description, which
|
|
138
|
+
editors show on hover and the package pages show beside the name.
|
|
139
|
+
- eec50d7: Views answer what they show: `SceneCanvasApi.aimOf` and `setAim`, and `<CanvasView aim onAimChange>` for a view that holds its aim and derives its camera from it. `<ViewMarker>`, or a contribution's `markers`, draws one view's aim inside another's frame, and dragging the marker moves that view; `actions={null}` turns marker dragging off. kernel3d answers a frustum aim with `aimOf3d`.
|
|
140
|
+
|
|
141
|
+
`CanvasViewProps` is now a union: `aim` cannot be passed together with `view`, `defaultView`, `onViewChange` or `viewBounds`. Code that writes an interface extending `CanvasViewProps` needs a type alias instead. A `Partial<CanvasViewProps>` spread into `<CanvasView>` no longer type-checks, and `Omit<CanvasViewProps, …>` does not distribute over the union; type either over one of the named halves, `CanvasViewCommonProps` with `CameraHeldViewProps` or `AimHeldViewProps`.
|
|
142
|
+
|
|
143
|
+
`SceneCanvasApi` has two new required members, `aimOf` and `setAim`, so a hand-written fake of it needs both.
|
|
144
|
+
- Updated dependencies [dbd6711]
|
|
145
|
+
- Updated dependencies [f6db995]
|
|
146
|
+
- Updated dependencies [0996ce6]
|
|
147
|
+
- Updated dependencies [3716e73]
|
|
148
|
+
- Updated dependencies [b571ad6]
|
|
149
|
+
- Updated dependencies [13e597d]
|
|
150
|
+
- Updated dependencies [400b393]
|
|
151
|
+
- Updated dependencies [40d87f7]
|
|
152
|
+
- Updated dependencies [78f29de]
|
|
153
|
+
- Updated dependencies [2cf7da4]
|
|
154
|
+
- Updated dependencies [92a0f2d]
|
|
155
|
+
- Updated dependencies [448065a]
|
|
156
|
+
- Updated dependencies [c697535]
|
|
157
|
+
- Updated dependencies [c2fb65c]
|
|
158
|
+
- Updated dependencies [2c52cc5]
|
|
159
|
+
- Updated dependencies [94ebd35]
|
|
160
|
+
- Updated dependencies [24f2495]
|
|
161
|
+
- Updated dependencies [929736f]
|
|
162
|
+
- Updated dependencies [d9fd036]
|
|
163
|
+
- Updated dependencies [3bf5edb]
|
|
164
|
+
- Updated dependencies [e9304f4]
|
|
165
|
+
- Updated dependencies [91a1d84]
|
|
166
|
+
- @weasel-js/geom@1.12.0
|
|
167
|
+
- @weasel-js/routing@1.12.0
|
|
168
|
+
- @weasel-js/paint@1.12.0
|
|
169
|
+
- @weasel-js/text@1.12.0
|
|
170
|
+
- @weasel-js/text-dom@1.12.0
|
|
171
|
+
- @weasel-js/stroke@1.12.0
|
|
172
|
+
- @weasel-js/gestures@1.12.0
|
|
173
|
+
- @weasel-js/renderer@1.12.0
|
|
174
|
+
- @weasel-js/react@1.12.0
|
|
175
|
+
- @weasel-js/animator@1.12.0
|
|
176
|
+
- @weasel-js/prefs@1.12.0
|
|
177
|
+
- @weasel-js/simulation@1.12.0
|
|
178
|
+
- @weasel-js/cursor@1.12.0
|
|
179
|
+
- @weasel-js/font@1.12.0
|
|
180
|
+
- @weasel-js/history@1.12.0
|
|
181
|
+
- @weasel-js/icons@1.12.0
|
|
182
|
+
- @weasel-js/modes@1.12.0
|
|
183
|
+
- @weasel-js/quantity@1.12.0
|
|
184
|
+
- @weasel-js/registry@1.12.0
|
|
185
|
+
- @weasel-js/select@1.12.0
|
|
186
|
+
|
|
187
|
+
## 1.11.1
|
|
188
|
+
|
|
189
|
+
### Patch Changes
|
|
190
|
+
|
|
191
|
+
- 70b12d1: An action can carry a settings form: `Action.settings` holds a prefs schema, a `read` that gives
|
|
192
|
+
the selection's current values (and which fields it disagrees on), and an optional `params` that
|
|
193
|
+
turns one field's change into the params the action is triggered with. Every surface that lists
|
|
194
|
+
actions draws such an action as its form instead of a button that triggers it bare: a bar or a
|
|
195
|
+
panel opens it in a popover under the action's button, a menu shows it as a submenu of its fields,
|
|
196
|
+
and the command palette opens it in a dialog. Each change is one trigger, so one undo step. The
|
|
197
|
+
form is disabled while the action's `enabled` says no. `readActionSettings` and
|
|
198
|
+
`actionSettingsParams` are what the surfaces read it through; `useActionSettings`,
|
|
199
|
+
`ActionSettingsPopover` and `ActionSettingsDialog` are in `@weasel-js/ui/components/ActionSettings`.
|
|
200
|
+
`BarActionButton` takes `expanded` for a button that opens a dialog.
|
|
201
|
+
|
|
202
|
+
Warp Settings (`configureWarp`) and Edit Path Effect (`editPathEffect`) carry one each, so Warp
|
|
203
|
+
Settings on a bar now opens Mode, Rows, Columns, Mapping and Tolerance for the selected warps
|
|
204
|
+
rather than doing nothing, and both are disabled with nothing they apply to selected.
|
|
205
|
+
`editPathEffect` takes an optional `kind`, limiting an edit to effects of that kind, and now reads
|
|
206
|
+
`selection`. The forms are exported as `warpSettingsForm` and `pathEffectSettingsForm`.
|
|
207
|
+
- 3b5750f: Set, swap, or release the spine of a blend that already exists. `setBlendSpineAction`
|
|
208
|
+
(`setBlendSpine`) lays the selected blend along the other selected path, in either selection order,
|
|
209
|
+
replacing any spine it had; `releaseBlendSpineAction` (`releaseBlendSpine`) puts each selected
|
|
210
|
+
blend back on a straight run between its two shapes and selects the spines, ordinary paths where
|
|
211
|
+
they were. Both are in `pathEffectsPreset` and the `pathEffects` group, and each is one undo step.
|
|
212
|
+
|
|
213
|
+
Core adds `createSetDependsOnOp`, an undoable retarget of a derived node's `dependsOn`, and the
|
|
214
|
+
`setDependsOn` write it goes through on `SceneMutators` and the scene-backed adapter.
|
|
215
|
+
- 768be71: Depend on `@msb235/blits` 0.11.0, where stopping an animation no longer costs time in step with how many are running. blits' `loop` now defaults to one pass; no voice weasel cues depends on it, since each is either a motion (a tween or a spring) or a patch with no duration, and blits ignores `loop` for both.
|
|
216
|
+
- 9390be4: `CANVAS_CONTEXT_ATTRIBUTES` is the WebGL2 context attributes a weasel canvas is opened with. A
|
|
217
|
+
context keeps the attributes of whoever opens it first and the renderer refuses one without a
|
|
218
|
+
stencil buffer, so anything that may open the canvas before its first paint, such as a pixel reader
|
|
219
|
+
or a tenant sharing the buffer, passes these.
|
|
220
|
+
- 1dd65f5: `<Canvas>` and `<SceneCanvas>` take an `imageMinification` prop, forwarded to the renderer: `'auto'` builds an image's mipmaps the first time a frame draws it at half size or smaller, so a large bitmap drawn small stops aliasing. The default stays `'linear'`. `WeaselRenderer.setImageMinification` changes the strategy after construction; a change frees every image texture, and each re-uploads when next drawn.
|
|
221
|
+
- 411b629: A `carry` spec takes a `target`, matched against what is under the carry the way a click's is: a binding can now say "dropped onto a selected body" or onto an affordance. An immediate action with a target fires only on a release over it; an ongoing one starts on the first step over its target, as the carry comes over or as it moves on. The route grammar reads `carry(lab/*) => selected-body`. A carry's immediate params carry `affordance`, `bodyTarget`, and `bodyKind`.
|
|
222
|
+
|
|
223
|
+
`Action.enabled`'s `carried` argument is now the exported `Carried` type and sees a carry too: `{ items: [], carry: { type, value } }`, so an action can refuse a payload it would not take.
|
|
224
|
+
- 267d5e4: Connectors can route around shapes. The `avoid` router draws a connector orthogonal, with few bends,
|
|
225
|
+
clear of every shape, and with parallel runs spread apart. Its route is computed when the scene is
|
|
226
|
+
edited and stored on the edge as `diagram.route`, so a saved file draws it without rerouting and
|
|
227
|
+
undo restores it exactly; a stored route that no longer fits its ends draws as `orthogonal`.
|
|
228
|
+
`useAvoidRouting(scene)` (or `installAvoidRouting` outside React) reroutes whatever each edit
|
|
229
|
+
disturbed in that edit's own undo entry, and reroutes the connectors near a dragged shape every
|
|
230
|
+
frame. Containers, pools, and group boxes are in the way only of connectors with neither end inside
|
|
231
|
+
them; lane bodies never are; headers always are. Dragging a segment of an `avoid` connector pins
|
|
232
|
+
only that segment. `DiagramView` takes `router="avoid"`, and `createAvoidRouter` — the search alone,
|
|
233
|
+
over plain boxes and ports — is in `@weasel-js/diagram/layout`. New commands set the selected
|
|
234
|
+
connectors' router (`SET_ROUTER_ACTION_IDS`), and layout no longer writes waypoints to an `avoid`
|
|
235
|
+
connector.
|
|
236
|
+
|
|
237
|
+
Core adds scene edit passes: `scene.addEditPass(pass)` hears each live edit's added, removed,
|
|
238
|
+
posed, re-parented, and data-changed ids once its own mutations and the arrival handler have run,
|
|
239
|
+
and its ops join the same undo entry. Passes never re-trigger on their own writes, and undo, redo,
|
|
240
|
+
and history replay never run them. While any pass is added, a bare scene call runs as an edit of
|
|
241
|
+
its own.
|
|
242
|
+
|
|
243
|
+
weaselchart's connector tool draws connectors that route around shapes, and Format › Connector
|
|
244
|
+
picks Around shapes, Orthogonal, Straight, or Curved for the selected connectors. Charts saved
|
|
245
|
+
before keep the router they have.
|
|
246
|
+
- 922cddf: Diagrams get containers and swimlane pools, and core's layouts and drops carry and filter nested nodes.
|
|
247
|
+
|
|
248
|
+
- core: a layout pass that moves a child container now takes that container's descendants along, under absolute poses, in the same edit; so does a layout drop that shifts siblings, in its preview and its commit. `carriedDescendants(source, root, translate)` and `sceneCarrySource(scene)` are the helper behind both. A new optional `canDropInto(parent, ids)` dep (`CanDropIntoDep`) decides which containers a move may drop into: reparent-on-drop passes over a refused container, the layout drop skips it, and a child leaving its layout container does not land in it.
|
|
249
|
+
- diagram: `CONTAINER_STENCILS` offers Container, Pool (rows), and Pool (columns). A container is a titled box whose members move with it and stay put when it is resized; a pool stacks lanes that reorder by their headers, resize by the boundary after each (`diagram.resizeLane`), and grow by the button past the stack (`diagram.addLane`). `diagram.releaseMembers` removes a container and keeps what it holds. `diagramCanDropInto(scene)` is the drop filter, `diagramContainers` returns the lane layer and the contribution, and `diagramContainerLayout` and `laneStackLayout` register through `withDiagramRegistry`. `useStencilInsert` takes `containers`, and a stencil drawn inside a container or a lane becomes its member. Lanes take no connectors, and `diagramResizable` refuses them.
|
|
250
|
+
- core: a container with a layout is arranged again whenever one of its children's poses is written — a nudge, an align, a panel edit — not only when its children or its size change, in the same undo entry as the write.
|
|
251
|
+
- d5a4102: Breaking at the type level for custom `commit` and `canConnect` callbacks: the ends of a `PendingEdge` and the arguments of `CanConnect` are now a `ConnectEnd`, which is a port or a shape's body, where they were always a port.
|
|
252
|
+
|
|
253
|
+
`@weasel-js/diagram` gains editing surface. Edges connect onto a shape's body (`connectBodies`, the `bodies` option, and a connector tool), and a selected edge's ends reconnect by dragging a handle. A label action (`editEdgeLabelAction`, `edgeLabelSpec`, `labelSize`) creates and edits an edge's label. Stencils (`FLOWCHART_STENCILS`) come with `useStencilInsert` and `useStencilTool`. `DiagramView` takes `onReconnect`, `onDelete`, `onEditLabel`, `connectBodies` and `ambient`, and its ref has `worldAt`. `diagramResizable` keeps resize handles off edges and labels. `DataEdge` and `EffectWire` take an optional `id`, and the `ellipse` outline is new. For effect pipelines there is an edit model, stage types with typed params, and `EffectEditor`, an editable node graph.
|
|
254
|
+
|
|
255
|
+
`@weasel-js/core` exports `createDeleteAction` and `commitDeleteToScene`, so a consumer can swap how a delete commits.
|
|
256
|
+
- 9cd12f7: Edge labels are obstacles, and they dodge. An `avoid` connector now routes around every other
|
|
257
|
+
connector's label, 4 world units clear (`labelClearance`), and never around its own; within one
|
|
258
|
+
commit a label is restationed on its connector's new route before the next connector routes.
|
|
259
|
+
`AvoidEdge.label` carries it, filled from the scene and from `DiagramView`'s specs. An obstacle's
|
|
260
|
+
`kind` may now be `'label'`.
|
|
261
|
+
|
|
262
|
+
After any edit, `useLabelPlacement(scene)` (or `installLabelPlacement` outside React) moves a label
|
|
263
|
+
that sits on a shape, another label, or another connector along its own connector, or across it,
|
|
264
|
+
to the nearest clear station, in that edit's own undo entry, and sizes a label to the text an edit
|
|
265
|
+
gives it. The chosen station is stored on the label trait as `placed`, which `labelDerivePose`
|
|
266
|
+
reads before `at` and `offset`; `dodge: false` opts a label out. Labels hold still during a drag
|
|
267
|
+
and settle on release. `DiagramView` takes `labels="dodge"`, `createSpecLabelPlacer` is that step
|
|
268
|
+
on its own, and `placeLabels` — the placement alone, over plain boxes and routes — is in
|
|
269
|
+
`@weasel-js/diagram/layout` with `labelCenter`.
|
|
270
|
+
|
|
271
|
+
Core adds `documentDepOf(scene, id)`: a dependency at the pose and path the document holds, with
|
|
272
|
+
no override counted, for a reader such as an edit pass.
|
|
273
|
+
|
|
274
|
+
weaselchart places edge labels, so a shape dropped on a label moves the label off it on release.
|
|
275
|
+
- e5ba382: Connectors can jump each other. While a scene's `HOPS_DOC_KEY` document value is set, wherever two
|
|
276
|
+
connectors cross, the one later in render order bows over the other in a half circle of the value's
|
|
277
|
+
`size`. A hop bulges toward −y on a horizontal run and toward −x on a vertical one, whichever way the
|
|
278
|
+
connector travels, and to the left of travel on a diagonal. Crossings near either connector's ends
|
|
279
|
+
or a bend, and collinear overlaps, make no hop, and hops closer than twice their radius merge into
|
|
280
|
+
one longer hop. A connector split across pages neither hops nor is hopped over. Each connector stores its hops as `diagram.hops`, so a saved file draws them with no
|
|
281
|
+
pass running, and a hop no longer on its connector's route does not draw.
|
|
282
|
+
|
|
283
|
+
`useHops(scene)` (or `installHops` outside React) recomputes the hops an edit disturbed in that
|
|
284
|
+
edit's own undo entry, and turning the value on or off recomputes or clears them all in the one
|
|
285
|
+
entry that sets it. While a drag is in progress, the connectors it moves, and those hopping over
|
|
286
|
+
them, draw without hops until release. `diagramWaypoints` carries a Line jumps toggle
|
|
287
|
+
(`SET_HOPS_ACTION_ID`), `DiagramView` takes `hops`, a radius, and `edgeHops`, the crossing finder
|
|
288
|
+
over plain polylines, is in `@weasel-js/diagram/layout`.
|
|
289
|
+
|
|
290
|
+
Core's `TransformFollower.preview` gets a second argument: the data the followers before it
|
|
291
|
+
previewed, by id, so a follower can build on a route an earlier one previewed. A follower that
|
|
292
|
+
calls `preview` itself now passes it. `useAvoidRouting`'s drag preview reads the waypoints a
|
|
293
|
+
`waypointFollower` registered before it carried, rather than carrying them itself, so without one
|
|
294
|
+
the preview leaves waypoints where the commit will.
|
|
295
|
+
|
|
296
|
+
weaselchart adds Format › Connector › Line jumps.
|
|
297
|
+
- 8e317f5: Off-page reference markers. On a scene with pages, a connector whose two shapes sit on different
|
|
298
|
+
pages no longer draws across the gap: each end draws a short stub out of its shape, ending at a tag
|
|
299
|
+
that reads the other page's name and a reference letter, such as "Page 2 · A".
|
|
300
|
+
`useOffPageMarkers` (or `installOffPageMarkers` without React) splits and joins connectors as edits
|
|
301
|
+
move their ends or change the pages, in that edit's own undo entry, and writes
|
|
302
|
+
`DiagramEdge.offPage`. The tags are text nodes with a background (`offPageTagSpec`, registry key
|
|
303
|
+
`diagram:offPageTag`), colored by the theme. `diagramOffPage()` binds a double-click on a tag to
|
|
304
|
+
selecting the shape at the far end and fitting the view to its page. `offPageSplits` is the split
|
|
305
|
+
rule as arithmetic, and `offPageOps` runs the pass over named connectors.
|
|
306
|
+
|
|
307
|
+
A split connector's `ResolvedRoute` carries its two `stubs`, it shows no route handles, and the
|
|
308
|
+
`avoid` router leaves it out until it joins again. An edge label on a path with several subpaths
|
|
309
|
+
sits on the first (`subpathOf`).
|
|
310
|
+
|
|
311
|
+
`pageName` (core) is the name a page shows, its own or "Page" and its place, and `PageTabs` uses it.
|
|
312
|
+
- abf41a7: Scenes hold document values, and a document's pages are one of them.
|
|
313
|
+
|
|
314
|
+
- core: `scene.doc` holds named JSON values beside the tree (`get`, `set`, `keys`). A `set` is undoable, joins an enclosing `batch`, is skipped when the value is deep-equal, and notifies subscribers. `SerializedScene.doc` carries them, `sceneFromJSON` and `loadState` read them back, and `createScene` and `useScene` take `doc` for the starting values. The field is additive: a snapshot without it loads as before. New types: `SceneDoc`, `SceneDocValues`, `SerializedDoc`.
|
|
315
|
+
- core: the page list is the `core:pages` document value (`PAGES_DOC_KEY`, `PagesDoc`, `pagesOf`, `placedPagesOf`). `setPages` replaces it and moves each page's root nodes, with their descendants, by however far their page moved, in one undo entry; `addPage`, `removePage` (which deletes what is on the page and what derives from that), `movePage`, `resizePage`, and `renamePage` are built on it, with `pageMembers` and `nextPageId` beside them. `pageInView` answers the page a view shows most of.
|
|
316
|
+
- ui: `PageTabs` is a strip of tabs over any page list, built on `Tabs`: press to go to a page, press twice to rename, drag or Alt+arrow to reorder, + to add, and a right-click reported for a context menu. `useReorderDragList` takes `axis: 'x'` for a row of items, and `TabList` takes a `ref`.
|
|
317
|
+
- 312eb35: Themes can be edited. `forkTheme`, `setThemeValue` (by a `ThemePath` such as
|
|
318
|
+
`['roles', 'accent', 'fill']` or `['series', 2]`), `addThemeRole`, `renameThemeRole`, and
|
|
319
|
+
`removeThemeRole` return a new theme and leave the one given alone, so a shipped theme is never
|
|
320
|
+
changed; `editableTheme` forks a shipped theme and passes a custom one through. `DiagramTheme` takes
|
|
321
|
+
`roleLabels`, the names of roles beyond the shipped six, and `themeRoles(theme)` lists every role
|
|
322
|
+
with its name. A removed role's shapes are drawn in the default role. `parseDiagramTheme` and
|
|
323
|
+
`themeToJson` read and write `.weasel-theme.json` files, and a bad file comes back as errors naming
|
|
324
|
+
each bad value by its path. `applyDiagramTheme` takes `{ coalesceKey, from }`.
|
|
325
|
+
|
|
326
|
+
Applying a theme whose font size differs from the scene's moves existing text by the step between
|
|
327
|
+
them: shape rows, titles, and connector labels keep their offset from the body size.
|
|
328
|
+
`setDiagramFontSize(scene, ids, size)` sets a shape's or connector's text size by hand and records
|
|
329
|
+
it in the trait's new `ownFont` (`FontField`), which a theme's size change then leaves and choosing
|
|
330
|
+
a role keeps. A body whose text changes size is laid out again in the same undo entry: it grows
|
|
331
|
+
to fit its rows and never shrinks. A body built from text rows alone records how it stacks them
|
|
332
|
+
as `DiagramNode.body`, its rows carrying `bodyRow`; `relayoutBodies` lays such bodies out again,
|
|
333
|
+
and `rendererMeasure` measures text from the registered font as the renderer draws it.
|
|
334
|
+
|
|
335
|
+
Core's `scene.batch(label, fn, { coalesceKey })` folds a batch into the undo entry before it when
|
|
336
|
+
that one was recorded under the same key and nothing came between, so a run of batches, such as a
|
|
337
|
+
color dragged, undoes as one entry back to the state before the first. Unlike an op's own key it
|
|
338
|
+
needs no `coalesceWindowMs`; `scene.history.seal()` ends the run. `@weasel-js/history`'s
|
|
339
|
+
`recordEntry` takes the same `coalesceKey`.
|
|
340
|
+
|
|
341
|
+
weaselchart's Format › Theme › Edit Theme… opens a Theme panel: every role's colors, with roles
|
|
342
|
+
added, renamed, and removed (not the default), the connector, label, container, lane, page, and
|
|
343
|
+
series colors, and the font. The Style panel gains Text size. The chart recolors as a color is dragged, and one undo takes back the
|
|
344
|
+
drag. The first edit to a shipped theme copies it into the chart as "<name> (edited)". Import
|
|
345
|
+
Theme… and Export Theme… move a theme between charts.
|
|
346
|
+
- 7ffc196: Connector routes are editable, and whole-node transforms carry other nodes along through one dep.
|
|
347
|
+
|
|
348
|
+
- core: a `transformFollowers` dep holds every `TransformFollower`, `{ preview(frame), finish(ops, label) }`, and each whole-node transform (move, resize, rotate, flip, align, distribute, nudge, transform again) finishes its batch and previews its frame through all of them in order. `useTransformFollower` adds one. Path edit's constraint links are now one of them, so `EditAnchorsDep.transformOps` and `EditAnchorsDep.transformPreview` are gone; that is breaking for anyone who called them. `writtenBy(scene, ops)` reads the pose and data a batch leaves each node it writes.
|
|
349
|
+
- diagram: a selected edge shows handles along its route. Under `straight` and `bezier`, a dot on each waypoint moves it and a hollow dot in each leg inserts one; under `orthogonal`, a bar slides its segment, jogging where it touches a port. A double-click removes a waypoint or straightens a jog. Drags snap into line with neighboring stops and port axes. `diagramWaypoints` returns the handle layer and a contribution carrying the drag, the double-click, and the `diagram.resetRoute` command; the math is exported on its own (`routeHandles`, `dragSegment`, `simplifyStops`, and the rest). `waypointFollower(scene)` carries waypoints along with a move of both ends. `DiagramView` takes `onEditRoute`, and `EffectEditor` keeps wire routes in `EffectDoc.routes` (`setWireRoute`). `edgeRouter` answers an edge's resolved route, as `edgeDerivePath` draws it.
|
|
350
|
+
- 25a112b: Constraint links follow whole-node drags live, and broken ones are drawn.
|
|
351
|
+
|
|
352
|
+
- core: move, resize and rotate preview the nodes a constraint link ties as they will commit, every frame, through the same finishing the commit runs, and `transformPreviewFields` gives a drag its preview fields with them added.
|
|
353
|
+
- path-tools: `createConstraintLinkMarks(style)` is a screen-space layer, carried by `constraintsPreset`, that draws every broken link: its constraint's mark by the anchor it holds and a dashed line to where it wants that anchor, in the conflict color. `brokenConstraintLink(scene, id)` and `brokenConstraintLinks(scene)` read the links that do not hold, `constraintLinkMarks` draws a list of them, and `DEFAULT_CONSTRAINT_STYLE` is exported.
|
|
354
|
+
- 4d99526: Constraint links now hold through whole-node transforms, preview through every path-edit drag, and have a gesture that makes them.
|
|
355
|
+
|
|
356
|
+
- core: `PathEditExtension.finishTransform(ctx: PathTransformFinishCtx)` answers the other nodes a move, resize, rotate, flip, nudge or transform-again changes along with the ones it transforms — align and distribute too — committed in the same history entry; the `editAnchors` dep runs it as `transformOps(ops, label)`, and those actions now declare `editAnchors`. An extension may refuse a transform by answering null.
|
|
357
|
+
- core: `pathEditPreview` finishes each frame itself through the new `finishPathEditFrame`, so bend segment and the path-tools drags preview the node's constraints and linked nodes as they will commit. Breaking: its `current` thunk now answers a `PathEditFrame` (`{ path, origins? }`) instead of a bare path.
|
|
358
|
+
- geom: `PathsEditItem.yields` lets a path the edit left alone give way freely.
|
|
359
|
+
- path-tools: the constraints extension carries linked nodes through whole-node transforms; `constraintLinkConflictsOf(scene, id)` reports the links tying a node that do not hold; `linkAnchorAction` (in `constraintsPreset`) links an anchor Alt-dragged onto another node's anchor (`coincident`) or segment (`onPath`), with `linkTargetAt` and `linkConstraint` beside it.
|
|
360
|
+
- 853ce69: A dep source is handed `below`, which reads the source it displaced, in its own scope or one above, so a source can handle part of a dep and pass the rest to the default (`DepSource`, accepted by `useDepSource` and `DepRegistry.register`). A source taking no argument works as before. `useStencilInsert` uses it: a kind no stencil names goes to the `insert` dep beneath it, so core's rect, ellipse and text tools work beside stencils.
|
|
361
|
+
- 8c1861a: Add a devtools hook. Each mounted `<SceneCanvas>` registers a root on `window.__weaselDevtools__`,
|
|
362
|
+
which serves a panel over a versioned message protocol: the scene tree a level at a time, a node's
|
|
363
|
+
pose and data, selection, view, tools, probes, the dispatch trace and frame stats, plus select,
|
|
364
|
+
highlight, set-tool and debug-overlay commands. A dev build installs the hook itself; a production
|
|
365
|
+
build installs it only when the app imports the new `@weasel-js/core/devtools` subpath, which also
|
|
366
|
+
exports the protocol types and the in-page and `postMessage` transports. See `docs/devtools.md`.
|
|
367
|
+
|
|
368
|
+
The debug overlay gains a `highlight` feature (`debug={{ highlight: ids }}`), and `<Canvas>` and
|
|
369
|
+
`<SceneCanvas>` take an `aria-label`.
|
|
370
|
+
|
|
371
|
+
Breaking: the dispatch trace is per canvas now. `window.__weaselDispatchLog__`,
|
|
372
|
+
`window.__weaselDispatchLive__` and `window.__weaselCoordLog__` are gone, and so are routing's
|
|
373
|
+
`recordModeSwitch` and `publishLiveDispatch`. A dispatcher records into `DispatcherContext.trace`
|
|
374
|
+
(`createDispatchTrace`), which `useGestureDispatcher` creates or takes as its `trace` option and
|
|
375
|
+
publishes as the `dispatchTrace` dep; record a mode switch with
|
|
376
|
+
`deps.get('dispatchTrace')?.recordModeSwitch(…)`.
|
|
377
|
+
- 6440997: Add `<DevtoolsLabel value>`, which names the canvases beneath it in a devtools panel ahead of any
|
|
378
|
+
labeled element nearer to them. A labkit trial wraps its content in one with its title, so a plain
|
|
379
|
+
`<SceneCanvas>` in a trial, a forge story's included, is listed by the trial's title rather than as
|
|
380
|
+
"Content", the pane it sits in.
|
|
381
|
+
- 44cf2c5: The devtools panel fits a narrow container: below 480 px wide its tabs wrap and the Scene and
|
|
382
|
+
Registry tabs stack their list above the detail. Its header keeps the canvas picker at the left and
|
|
383
|
+
the version at the right, a selected tree row is marked in the accent color, and the node detail's
|
|
384
|
+
values line up.
|
|
385
|
+
|
|
386
|
+
A `<SceneCanvas>` with no `aria-label` or id of its own is listed in devtools by the `aria-label` of
|
|
387
|
+
its nearest labeled ancestor. labkit's `TrialSceneCanvas` labels its canvas with the trial's title.
|
|
388
|
+
`Tree` reads the new `--wzl-tree-selected` hook for a selected row's background.
|
|
389
|
+
- 8ff750f: The devtools panel gains a Registry tab, listing a canvas's tools, actions and deps under a name
|
|
390
|
+
filter, each opening to its details and its bindings drawn in the route grammar, and a History tab,
|
|
391
|
+
following the scene's history steps with each entry's ops, where the history stands with whether it
|
|
392
|
+
can undo or redo, and the checkpoint stack on request. `followHistory` reads `get-history` through
|
|
393
|
+
its cursor without React.
|
|
394
|
+
|
|
395
|
+
A scene gains `getContentVersion()`, which moves on every change but one that only changed the
|
|
396
|
+
selection. The devtools hook uses it, so a selection change is no longer also announced as a
|
|
397
|
+
`scene` change.
|
|
398
|
+
- 161c9c4: Add `@weasel-js/devtools`, a panel that reads and steers every `<SceneCanvas>` on a page over the
|
|
399
|
+
devtools hook. `DevtoolsPanel({ transport })` shows a picker for the page's canvases and four tabs:
|
|
400
|
+
Scene (the node tree, loaded a level at a time, and a picked node's parent, pose and data; hovering a
|
|
401
|
+
row outlines the node on the canvas), State (selection, view, active tool, debug overlay flags and
|
|
402
|
+
probes, with the tool and the flags settable), Dispatch (the dispatch trace, newest first, under what
|
|
403
|
+
a press at the pointer would do, filterable by handled and unhandled, each decision opening to its
|
|
404
|
+
path and its fallthrough diagram; coord records behind a toggle), and Frame (the last paint's cost
|
|
405
|
+
while the `fps` overlay is on). `createInPagePanelTransport()` connects it to the page's own hook.
|
|
406
|
+
`connectDevtools` and `followTrace` are the protocol client underneath, without React. Import
|
|
407
|
+
`@weasel-js/devtools/style.css` beside it.
|
|
408
|
+
|
|
409
|
+
Core exports `DEBUG_FEATURES`, every debug overlay feature a `DebugConfig` flag turns on;
|
|
410
|
+
`DebugFeature` is now derived from it.
|
|
411
|
+
- 33fa471: Add `@weasel-js/core/devtools-protocol`: everything `@weasel-js/core/devtools` exports — the
|
|
412
|
+
protocol types, `DEVTOOLS_PROTOCOL`, the envelope tag, the transports, and the hook's constructors —
|
|
413
|
+
without installing a hook on import. `@weasel-js/core/devtools` re-exports it and still installs one.
|
|
414
|
+
`@weasel-js/devtools` now imports from the new entry, so mounting the panel no longer puts a hook in
|
|
415
|
+
the panel's own window; `createInPagePanelTransport()` still installs one when called.
|
|
416
|
+
- 2eb0370: The devtools hook serves two more requests, still under protocol 1. `get-registry` describes what a
|
|
417
|
+
canvas has registered: its tools and preset contributions with their bindings, its actions, the dep
|
|
418
|
+
names its registry answers, and its node routing kinds. `get-history` hands back the scene's history
|
|
419
|
+
steps since a cursor — each push, merge, undo, redo or jump, with the ops it carried and where the
|
|
420
|
+
history stood — from a rolling buffer of 200 that records in dev builds and in production while a
|
|
421
|
+
panel is connected. `changed` reports both as the new `registry` and `history` areas. See
|
|
422
|
+
`docs/devtools.md`.
|
|
423
|
+
|
|
424
|
+
`History` gains `observe(listener)`, which hears what each change to the stacks was, and
|
|
425
|
+
`touchedIdsFromOps` is exported from `@weasel-js/history`. A hand-written `History` implementation
|
|
426
|
+
must add `observe`. `DepRegistry` gains an optional `list()` naming every dep it answers.
|
|
427
|
+
- c726003: A `<SceneCanvas>`'s devtools root no longer announces a `registry` change on every selection
|
|
428
|
+
change. The dep registry also notifies when a source's value changes, which the selection does on
|
|
429
|
+
every change, so the root now announces only when the deps it lists come or go.
|
|
430
|
+
- e30f4df: `DiagramView` can hold DOM against its nodes, groups and edges, report what the pointer is over, and let a group's members be dragged into a new order. All three are additive.
|
|
431
|
+
|
|
432
|
+
- `overlays` places each `DiagramOverlay` against its target after every paint: centered on it, or beside it through geom's `placeRect`, flipping inside the view. An edge's place is the midpoint along its route. The view now renders a box around its canvas to hold them, and `className` goes on that box rather than on the canvas.
|
|
433
|
+
- `onHover` reports the node, group or edge under the pointer; `pickEdges` lets a click or a hover land on an edge whatever editing callbacks are set. `rectOf(id)` and `subscribeFrame` on the ref give a target's client rect and when to read it again.
|
|
434
|
+
- A `DataGroup` with `reorder: 'x' | 'y'` lets `onReorder` drag any member along that axis, carrying everything inside a member that is a group, or step the picked one with Alt and an arrow key. It reports `{ group, order }` and moves nothing. `layered` keeps such a group's members in the order given across every rank instead of sorting them by crossings. `createReorderAction`, `createStepReorderAction`, `reorderBindings` and `reorderContribution` are exported for use outside `DiagramView`.
|
|
435
|
+
|
|
436
|
+
`SceneCanvas` takes `onHover`, called when the topmost pickable node under the pointer changes. `@weasel-js/react` exports `adoptCss`, `adoptCssOnce` and `styleRootOf`, the stylesheet adoption core's canvas and `KitSettingsFromPrefs` now share.
|
|
437
|
+
- 8c2a9a9: `DiagramView` takes `onResize`. With it set, a selected node shows resize handles; the box resizes
|
|
438
|
+
live under the drag, and on release the view reports `{ id, x, y, width, height }` for each resized
|
|
439
|
+
node and changes nothing until the specs follow. Store the box as the data node's `width`, `height`,
|
|
440
|
+
and `at`; the size is a minimum, so a box dragged smaller than its rows grows back to them.
|
|
441
|
+
`diagramResizable` now refuses a group's box, whose size comes from its members.
|
|
442
|
+
|
|
443
|
+
Core adds `createResizeAction({ commit })`, the resize action with its commit swapped: `commit` is
|
|
444
|
+
handed each resized node's pose at release, and the scene is left as it was.
|
|
445
|
+
- 1156d63: A node that shows a derived path is boxed around that path, stroke included, wherever the kit measures a drawn box: selection chrome, its hit regions, and the actions that read `drawnBoxes`. Its zero-size placeholder pose no longer drags the box back to the origin. `DrawnBoundsScene` takes an optional `derivedPathOf`, and `drawnBoundsScene(scene)` supplies it for a `Scene`; pass a scene through it to `useAlign`'s `scene` for the same box there.
|
|
446
|
+
- adadf5e: Scene edit passes now compose. `scene.addEditPass(pass, { order })` runs passes by ascending
|
|
447
|
+
`order` (default 0), ties in the order they were added, and each pass hears the edit's own changes
|
|
448
|
+
plus every write the passes before it made; it still runs once per edit, and undo, redo, and
|
|
449
|
+
history replay still run none. This changes what a second pass hears: it used to miss the first
|
|
450
|
+
pass's writes. `SceneEditSummary.docChanged` lists the document-value keys an edit set.
|
|
451
|
+
|
|
452
|
+
Diagram exports `DIAGRAM_PASS_ORDER`, where each of its passes runs, and avoid routing installs its
|
|
453
|
+
pass at `DIAGRAM_PASS_ORDER.avoid`. The routers (`straight`, `orthogonal`, `bezier`, `avoid`,
|
|
454
|
+
`ROUTERS`) moved to their own module; the package exports them as before.
|
|
455
|
+
- b3aa7cb: `documentFromScene` exports a shape sitting in the gap between pages on the nearest page rather
|
|
456
|
+
than the first, and marks a connector cross-page exactly when the scene's off-page split does. A
|
|
457
|
+
connector from a gap shape to another page stays whole, keeping its waypoints in world
|
|
458
|
+
coordinates. core gains `pageHolding`, the page a box is on, else the nearest one.
|
|
459
|
+
diagram gains `documentBoundsOf`, the box a node has in document space, which off-page splitting and
|
|
460
|
+
export now both read.
|
|
461
|
+
- ee2f0fc: `GroupTransform` is now only `{ kind: 'translate', dx, dy }`. Its `scale` and `rotate` arms are gone: no gesture produced them, and the move and clone actions ignored a behavior that answered one. A move behavior that switched on `kind` to handle them no longer needs those branches; resize and rotate behaviors answer through `ResizeMoveResult` and `RotateMoveResult` as before. Breaking for code that names the removed arms.
|
|
462
|
+
- ee4cf85: A drop or paste now keeps string flavors of any exact MIME a registered content handler names in its `match` or `types`, for as long as it stays registered, so a handler can claim a drag from the app's own UI by a type of its own instead of tagged `text/plain`. Globs and `application/octet-stream` admit nothing. `admitIngestMime(mime)` (routing, re-exported from core's ingestion module) does the same for code outside the handler registry and returns a release. The kit weasel-JSON handler's `application/x-weasel-clipboard+json` flavor now reaches it on paste as well.
|
|
463
|
+
- d892435: A content handler's `IngestCtx` now carries the canvas's `snap` dep as `ctx.snap`, so a handler can place what it inserts where a gesture would: begin a `'point'` session at the would-be position, take `at()`, and `end()` it. The `ingest` and `clipboard.pasteEvent` actions declare `snap` among their `requires`.
|
|
464
|
+
- 1a1bb83: Drawing or click-placing a node into a container with a unit scope now snaps on that scope's grid
|
|
465
|
+
pitch, not the root's.
|
|
466
|
+
|
|
467
|
+
- `SnapBegin` and `SnapCollect` take `parent`: the container a subject not yet in the scene lands
|
|
468
|
+
in. `insertAction` and `placeAction` pass the container the `insertInto` dep names, the same one
|
|
469
|
+
the `insert` dep puts the node in; an id naming no container passes nothing.
|
|
470
|
+
- `gridSnapSource({ scopes })` reads the scope from `ids` when the gesture has a subject, else from
|
|
471
|
+
`parent`, else the root.
|
|
472
|
+
- kernel3d's `createSnap` passes `parent` on to its sources, as it does `ids`.
|
|
473
|
+
- `placeAction` now requires the `insertInto` and `scene` deps, both optional.
|
|
474
|
+
- 0e24110: A key binding can now carry `opts: { over: true }`: it is live while the pointer is over its canvas, whichever canvas holds the keys, and only then. The loupe's peek key uses it, so with two loupes on a page the key peeks the one under the pointer rather than the one last pressed in, or none before anything was pressed. A `<LoupeGestures>` outside a camera now mounts its own input scope, so two of them under one provider no longer stack their actions on one id.
|
|
475
|
+
- 4bf5dec: `moveNodes(deps, ids, { dx, dy }, label?)` moves nodes the way a drag of them commits: derived nodes through what they derive from, every descendant not carried by a moving frame, each translated in the frame it is stored in, finished by the `transformFollowers` and committed as one undo entry (inside an open `scene.batch`, as part of it). `moveNodesOps` builds the same ops without committing them, and `MOVE_NODES_REQUIRES` names the deps an action calling `moveNodes` declares. The move action, nudge, Transform Again and the measure tool's Move By all build their translate ops through it.
|
|
476
|
+
|
|
477
|
+
The ingest action now also requires `poseDescriptor`, `geometryProjection` and `transformFollowers`, so a content handler can move what it inserts with `moveNodes(ctx.deps, …)`.
|
|
478
|
+
- fe2a8c5: A node's kind has one answer: its routing kind. `<SceneCanvas>` now publishes each selected node's
|
|
479
|
+
routing kind with the selection, so the command palette says "3 rects selected" or "2 groups
|
|
480
|
+
selected"; a node its routing table calls `'unknown'` publishes no kind, and the palette says
|
|
481
|
+
"objects". Before, the default label read `'group'` for a container, `'path'` for a pose carrying a
|
|
482
|
+
`kind`, and nothing for anything else. `describeKind` still replaces the label outright.
|
|
483
|
+
|
|
484
|
+
`SelectionPanel`'s `classifyKind` classifies through the new `routeKind` export, the function behind
|
|
485
|
+
`NodeRouting.classify`, and hands each routing entry the node beside its data. It no longer calls a
|
|
486
|
+
container `'group'` on its own: pass a table carrying `groupNodeRouting`, as `inferredNodeRouting`
|
|
487
|
+
does, for that. This changes behavior for a panel given a table without it, such as
|
|
488
|
+
`defaultNodeRouting` alone.
|
|
489
|
+
- b7e6edc: A Pathfinder action's preview now draws each piece in the paint it would wear — its source's paint, or the paint a counted stroke leaves it — with the overlay's outline over it, rather than as a plain outline. `TransientPath` takes an optional `paint` (a `PathPaint`) to do this for any path an overlay shows.
|
|
490
|
+
- 87cded1: `<SceneCanvas tools>` no longer warns when a patch tool replaces one a preset brings — a custom `hand` under the `view` preset, say. That replacement is the documented way to restyle a preset's tool, and the patched tool still takes the preset tool's place in the palette. The dev warning now fires only when the id is also listed in `defaultTools`, where asking for the built-in and replacing it in the same breath is likely a mistake. Since 1.11.0 the warning reached npm consumers in development (earlier builds shipped it disabled), and it logged on every render.
|
|
491
|
+
- 24267d3: `renderSceneToPixels`, `createRasterSession().render` and `planPixelRender` now leave a scene's annotation layers (measurements, notes) out of the raster, as the SVG export does. Pass `annotations: true` to draw them. `renderDebugSnapshot` draws them by default, since it reproduces the canvas; pass `annotations: false` to leave them out.
|
|
492
|
+
- 683dea0: New package, `@weasel-js/rig`: the bone and weight tools, with the actions they bind, moved out of
|
|
493
|
+
core. `useRigTools({ scene })` builds both for `<SceneCanvas tools>`, keyed by the ids `RIG_TOOLS`
|
|
494
|
+
names; they act on the rig the scene's selection names unless given `selection` or `rig`, and take
|
|
495
|
+
`state`, `reach` and `radius` as `toolOptions.rig` and `toolOptions.weight` used to. `useBoneTool`,
|
|
496
|
+
`useWeightTool`, `createRigEditState`, `placedRig`, `rigOfSelection`, the two overlays and
|
|
497
|
+
`weighedPaths` come from it too, and its glyphs are `rig:bone` and `rig:weight`.
|
|
498
|
+
|
|
499
|
+
**Breaking for core:** `<SceneCanvas>` no longer mounts the rig tools. `'bone'` and `'weight'` are
|
|
500
|
+
gone from `BuiltinToolId`, `BUILTIN_TOOLS` and `BUILTIN_TOOL_IDS`, `RIG_TOOLS` and every name above
|
|
501
|
+
are gone from core's barrel, and so are `toolOptions.rig`, `toolOptions.weight` and the
|
|
502
|
+
`core:bone` and `core:weight` glyphs. The kit settings `targets.boneJointRadiusPx` and
|
|
503
|
+
`targets.weightPointRadiusPx` keep their paths, but are declared by `@weasel-js/rig` and listed in
|
|
504
|
+
its `rigKitSettingsSchema` rather than `coreKitSettingsSchema`. Core keeps the rig itself:
|
|
505
|
+
`useRigNode`, `bindRig`, `placeSkeleton` and the rest bind a skeleton from scene data as before.
|
|
506
|
+
- 61e7b0c: `<SceneCanvas selectTool={{ rotate: false }}>` now turns off only the select tool's rotation: the
|
|
507
|
+
selection's rotation handle is hidden and bound to nothing. The `rotate` action stays registered, so a
|
|
508
|
+
tool of your own that binds `rotate` turns the selection, and a partial `actions.rotate` merges onto
|
|
509
|
+
the kit's action as it does on any other canvas. A `chromeVisibility` rule that shows the handle again
|
|
510
|
+
shows a handle a drag does nothing on, with no dispatcher warning. Before, the action was muted on the
|
|
511
|
+
whole canvas, which also stopped a consumer's tool from rotating.
|
|
512
|
+
- 5053f5b: `SnapBegin` takes `sources` and `omit`, so one gesture can ask snap sources the canvas does not list, or skip ones it does (a listed, registered or default source, by id), without changing the canvas. Gesture sources are ranked with the canvas's own, and one sharing an id with a source still asked throws. Gesture sources are 2D: kernel3d's `createSnap` honors `omit` but does not ask a gesture's `sources`, and warns once in dev when it is given some.
|
|
513
|
+
- 2b267d5: Snap pipeline follow-ups.
|
|
514
|
+
|
|
515
|
+
- kernel3d's `createSnap` takes `kitSettings` and reads its reach from `targets.snapPx` there, as a canvas does (`reachPx` still overrides it).
|
|
516
|
+
- Two snap sources sharing an id now throw, on a canvas when a gesture begins and in kernel3d's `createSnap`, where before the later one silently replaced the earlier: a `<SceneCanvas snap>` source and a preset's alignment source were the likely pair, and the page box went with it. A source still replaces one of the canvas's defaults (`'rotation'`, `'path-snap'`) by taking its id. Core exports the check as `assertSnapSourceIds`.
|
|
517
|
+
- The symmetry axis knob and a repeat's step handle turn through a `rotate` session on the `snap` dep: they now snap to quarter turns and other nodes' angles without Shift, Shift keeps the 15° steps, Ctrl suspends snapping, and the angle readout draws. Breaking: `handleChange` takes a `SymmetryHandleSnap` (`{ point, angle }`, new export) in place of its `stepped` flag and point function. Without a `snap` dep the handles do not snap, Shift included.
|
|
518
|
+
- `resolveSnap` keeps every required candidate past `poolSize`, so Shift's steps can no longer be crowded out by 24 nearer targets, and drops a candidate with a non-finite locus direction instead of treating its line as a point.
|
|
519
|
+
- A move begins its snap session once the drag passes its threshold, so a click on a selected body reads nothing for snapping, and its `geometry` probe is placed within the canvas's reach rather than a fixed 8px.
|
|
520
|
+
- ac892f8: `EffectEditor` takes `look`: `'nodeGraph'` (default), `'rack'`, or `'lanes'`, with that look's options. Under rack and lanes, connecting, reconnecting, and deleting work as under node graph, and a stage on the main line drags along it to another place, which rewires the pipeline (`'Reorder'`). Under lanes a lane drags by its label (`'Reorder lanes'`). `editorScene(doc, look, options)` replaces the node-graph-only signature, which is breaking for a caller that passed options second.
|
|
521
|
+
|
|
522
|
+
The effect model gains `chainLinks`, `moveInChain`, and `canMoveInChain`; `EffectDoc.laneOrder` with `setLaneOrder`; `laneTypeOf`; and `order` and `laneOrder` on `EffectLookResult`, which `rack` and `lanes` fill. `@weasel-js/diagram` adds `createSlotReorderAction`, `slotReorderContribution`, and `sequenceSlots`, which drag one item of any drawn sequence along its axis and draw an insertion bar. Core's overlay strokes and routing's `OverlayRole` add the `insert` and `refused` roles that bar draws in.
|
|
523
|
+
- 71d4416: Synthetic-bold text reaches the outline tier. Past the outline threshold, a glyph faked bold from a
|
|
524
|
+
lighter face used to stay on the distance field; it is now drawn as geometry, its outline grown by
|
|
525
|
+
the distance the field's threshold shift moves the edge, so it is as heavy on either side of the
|
|
526
|
+
threshold. A stroked synthetic-bold run, which stayed on the atlas unstroked, is now stroked. A
|
|
527
|
+
grown glyph's `LaidOutOutlineGlyph.d` holds the grown outline, and its `key` names the growth.
|
|
528
|
+
|
|
529
|
+
`@weasel-js/geom` gains `pathToD`, the inverse of `pathFromD`, also exported from `@weasel-js/core`.
|
|
530
|
+
`@weasel-js/svg`'s `serializePathD` is now that function.
|
|
531
|
+
- 1bb4752: Tool sets: a `ToolSet` names a group of tool ids and other sets as one unit (`toolSet`, `toolIdsOf`, `withoutTools`, `toolSetHas`). `<SceneCanvas defaultTools>`, a preset's `tools`, and `ToolPalette`'s `include` each take sets. Core exports one per family, `SELECT_TOOLS`, `VIEW_TOOLS`, `SHAPE_TOOLS`, `DRAW_TOOLS`, `TYPE_TOOLS`, `PAGE_TOOLS` and `RIG_TOOLS`, with `BUILTIN_TOOLS` over them all; `BUILTIN_TOOL_IDS` is derived from it, and a shape kind's new `family` field says which set names it. `@weasel-js/path-tools` exports `WARP_TOOLS`, `RESHAPE_TOOLS`, `PATH_TOOLS_TOOLS`, and `usePathToolsTools()`, which builds every one of its tools keyed by id.
|
|
532
|
+
- e9404d0: A move, resize or rotate keeps its in-flight poses in one place: the scene's pose overrides.
|
|
533
|
+
Their handles no longer answer `previewPose`; `previewIds` still names the nodes in flight, and
|
|
534
|
+
`previewData` still carries what a transform follower previews. The preview ghost
|
|
535
|
+
(`resolvePreviews`) and the selection chrome resolve a previewed id with no `previewPose` through
|
|
536
|
+
`effectivePose`, so they read the same pose picking and derived geometry already did. Code that
|
|
537
|
+
read `previewPose` off one of these handles reads `effectivePose(scene, node)` instead. A
|
|
538
|
+
transform follower that previews a node at a pose other than its own now publishes that pose to
|
|
539
|
+
the overrides too; one answering the node's own pose pins nothing, so a derived node keeps
|
|
540
|
+
deriving.
|
|
541
|
+
- 433540d: A container's unit scope (`ContainerNode.units`) now reaches grid snapping and node property
|
|
542
|
+
fields. A scope converts what is shown, typed and snapped to; every pose is still stored in world
|
|
543
|
+
units, and pose composition does not scale by it.
|
|
544
|
+
|
|
545
|
+
- `gridSnapSource({ scopes: { root, spacing? } })` snaps the subject on the pitch of the unit
|
|
546
|
+
scope its nodes share, so a node inside a millimeter sub-assembly snaps on millimeter spacing.
|
|
547
|
+
`spacing` is read in that scope's units unless `scopes.spacing` gives a pitch per scope.
|
|
548
|
+
`scopedGridPitch` answers the pitch for a chain of scopes.
|
|
549
|
+
- A snap source is told the gesture's subject: `SnapCollect.ids`.
|
|
550
|
+
- `sceneSharedUnitScopes(scene, ids, root)` is the run of unit scopes every node of `ids` sits in.
|
|
551
|
+
- A number leaf takes `measure: 'length'` for a length stored in world units.
|
|
552
|
+
`prefLeafInScopes(leaf, scopes)` gives such a leaf the unit of the scopes it is shown in, built by
|
|
553
|
+
`scopedPrefUnit(scopes)`: shown in the innermost scope's base unit, with every unit of its system
|
|
554
|
+
accepted as typed text. The kit's node schemas mark X, Y, W, H and text padding as lengths.
|
|
555
|
+
- `SelectionPanel` takes `units`, the scene's outermost scope; given it, a length field shows the
|
|
556
|
+
selected nodes' shared scope.
|
|
557
|
+
- Updated dependencies [70b12d1]
|
|
558
|
+
- Updated dependencies [768be71]
|
|
559
|
+
- Updated dependencies [1dd65f5]
|
|
560
|
+
- Updated dependencies [411b629]
|
|
561
|
+
- Updated dependencies [312eb35]
|
|
562
|
+
- Updated dependencies [4d99526]
|
|
563
|
+
- Updated dependencies [853ce69]
|
|
564
|
+
- Updated dependencies [5cdc3d0]
|
|
565
|
+
- Updated dependencies [8c1861a]
|
|
566
|
+
- Updated dependencies [2eb0370]
|
|
567
|
+
- Updated dependencies [e30f4df]
|
|
568
|
+
- Updated dependencies [13fc67f]
|
|
569
|
+
- Updated dependencies [50da815]
|
|
570
|
+
- Updated dependencies [995eac7]
|
|
571
|
+
- Updated dependencies [716561f]
|
|
572
|
+
- Updated dependencies [ee4cf85]
|
|
573
|
+
- Updated dependencies [c497405]
|
|
574
|
+
- Updated dependencies [0e24110]
|
|
575
|
+
- Updated dependencies [c2dfd4e]
|
|
576
|
+
- Updated dependencies [0f455dc]
|
|
577
|
+
- Updated dependencies [15efc86]
|
|
578
|
+
- Updated dependencies [8cd81e7]
|
|
579
|
+
- Updated dependencies [c29ac84]
|
|
580
|
+
- Updated dependencies [07b686c]
|
|
581
|
+
- Updated dependencies [041bc38]
|
|
582
|
+
- Updated dependencies [f819e61]
|
|
583
|
+
- Updated dependencies [2b267d5]
|
|
584
|
+
- Updated dependencies [8f2c044]
|
|
585
|
+
- Updated dependencies [ac892f8]
|
|
586
|
+
- Updated dependencies [71d4416]
|
|
587
|
+
- Updated dependencies [cee04b9]
|
|
588
|
+
- Updated dependencies [e1eeb08]
|
|
589
|
+
- Updated dependencies [f148f50]
|
|
590
|
+
- Updated dependencies [1bb4752]
|
|
591
|
+
- Updated dependencies [e9404d0]
|
|
592
|
+
- Updated dependencies [433540d]
|
|
593
|
+
- @weasel-js/routing@1.11.1
|
|
594
|
+
- @weasel-js/animator@1.11.1
|
|
595
|
+
- @weasel-js/renderer@1.11.1
|
|
596
|
+
- @weasel-js/gestures@1.11.1
|
|
597
|
+
- @weasel-js/history@1.11.1
|
|
598
|
+
- @weasel-js/geom@1.11.1
|
|
599
|
+
- @weasel-js/react@1.11.1
|
|
600
|
+
- @weasel-js/prefs@1.11.1
|
|
601
|
+
- @weasel-js/stroke@1.11.1
|
|
602
|
+
- @weasel-js/font@1.11.1
|
|
603
|
+
- @weasel-js/text@1.11.1
|
|
604
|
+
- @weasel-js/icons@1.11.1
|
|
605
|
+
- @weasel-js/quantity@1.11.1
|
|
606
|
+
- @weasel-js/simulation@1.11.1
|
|
607
|
+
- @weasel-js/text-dom@1.11.1
|
|
608
|
+
- @weasel-js/cursor@1.11.1
|
|
609
|
+
- @weasel-js/modes@1.11.1
|
|
610
|
+
- @weasel-js/paint@1.11.1
|
|
611
|
+
- @weasel-js/registry@1.11.1
|
|
612
|
+
- @weasel-js/select@1.11.1
|
|
613
|
+
|
|
3
614
|
## 1.11.0
|
|
4
615
|
|
|
5
616
|
### Minor Changes
|