@weasel-js/core 1.14.2 → 1.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +251 -0
- package/dist/WeaselProvider.js +4 -5
- package/dist/affordances/composeAffordanceLayer.js +1 -2
- package/dist/affordances/cornerResize.js +4 -5
- package/dist/affordances/hitAffordanceRegions.js +1 -2
- package/dist/affordances/pathAnchors.js +1 -3
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotateCursor.js +1 -2
- package/dist/affordances/rotationHandle.js +2 -3
- package/dist/animation/behaviors/coast.js +1 -2
- package/dist/animation/behaviors/coastByWrite.js +2 -3
- package/dist/animation/behaviors/coastOnTargets.js +2 -3
- package/dist/animation/behaviors/momentum.js +1 -2
- package/dist/animation/clipTargets.js +1 -2
- package/dist/animation/departures.js +2 -3
- package/dist/animation/poseHelpers.js +2 -3
- package/dist/animation/poseTarget.js +2 -3
- package/dist/animation/poseTransition.js +1 -2
- package/dist/animation/reflow.js +2 -3
- package/dist/animation/rewind.js +1 -2
- package/dist/animation/rig/bindRig.js +2 -3
- package/dist/animation/rig/rigNode.js +1 -2
- package/dist/animation/rig/rigSeat.js +1 -2
- package/dist/animation/rig/skinBinding.js +1 -2
- package/dist/animation/rig/useRig.js +2 -3
- package/dist/animation/wrappers/animateLifecycle.js +1 -2
- package/dist/animation/wrappers/animateOnSetPose.js +1 -2
- package/dist/animation/wrappers/instantPose.js +1 -2
- package/dist/animation/writtenPoseTarget.js +1 -2
- package/dist/barrel/interactions.js +2 -1
- package/dist/barrel/paths.js +1 -1
- package/dist/barrel/renderer.js +2 -2
- package/dist/barrel/routing.js +6 -4
- package/dist/barrel/scene.js +2 -2
- package/dist/barrel/text.js +5 -3
- package/dist/canvas/Canvas.js +10 -7
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +6 -7
- package/dist/canvas/CursorCoordsHud.js +2 -3
- package/dist/canvas/DrawCanvas.js +8 -5
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/GestureReason.js +1 -2
- package/dist/canvas/GestureReason.module.js +1 -2
- package/dist/canvas/LeanSceneCanvas.js +2 -3
- package/dist/canvas/ModalityHud.js +2 -3
- package/dist/canvas/NodeShape.js +3 -4
- package/dist/canvas/PickHud.js +2 -3
- package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +1 -2
- package/dist/canvas/SceneCanvas/CanvasKitProviders.js +3 -4
- package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +1 -2
- package/dist/canvas/SceneCanvas/DevHuds.js +1 -2
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +1 -2
- package/dist/canvas/SceneCanvas/SceneCanvasInput.js +8 -5
- package/dist/canvas/SceneCanvas/SceneCanvasInput.js.map +1 -1
- package/dist/canvas/SceneCanvas/SurfaceDeclarations.js +1 -2
- package/dist/canvas/SceneCanvas/brushOverlay.js +1 -2
- package/dist/canvas/SceneCanvas/builtinToolSets.js +7 -5
- package/dist/canvas/SceneCanvas/builtinToolSets.js.map +1 -1
- package/dist/canvas/SceneCanvas/canvasPassThrough.js +1 -2
- package/dist/canvas/SceneCanvas/contributionFrameHooks.js +1 -2
- package/dist/canvas/SceneCanvas/coordTrace.js +1 -2
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +4 -5
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -2
- package/dist/canvas/SceneCanvas/defaultTextEditor.js +4 -5
- package/dist/canvas/SceneCanvas/describePresets.js +1 -2
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +1 -2
- package/dist/canvas/SceneCanvas/features.js +1 -2
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js +1 -2
- package/dist/canvas/SceneCanvas/mergeLayers.js +1 -2
- package/dist/canvas/SceneCanvas/namedPresets.js +5 -6
- package/dist/canvas/SceneCanvas/poseGeometry.js +1 -2
- package/dist/canvas/SceneCanvas/poseRegistrars.js +1 -2
- package/dist/canvas/SceneCanvas/presets/arrange.js +2 -3
- package/dist/canvas/SceneCanvas/presets/baseline.js +1 -2
- package/dist/canvas/SceneCanvas/presets/chrome.js +1 -2
- package/dist/canvas/SceneCanvas/presets/composites.js +1 -2
- package/dist/canvas/SceneCanvas/presets/edit.js +4 -5
- package/dist/canvas/SceneCanvas/presets/ingest.js +1 -2
- package/dist/canvas/SceneCanvas/presets/paths.js +9 -10
- package/dist/canvas/SceneCanvas/presets/paths.js.map +1 -1
- package/dist/canvas/SceneCanvas/presets/select.js +1 -2
- package/dist/canvas/SceneCanvas/presets/toolDriven.js +2 -3
- package/dist/canvas/SceneCanvas/presets/tools.js +1 -2
- package/dist/canvas/SceneCanvas/presets/transform.js +2 -3
- package/dist/canvas/SceneCanvas/presets/view.js +2 -3
- package/dist/canvas/SceneCanvas/props.js +1 -2
- package/dist/canvas/SceneCanvas/scenePointQuery.js +2 -3
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +2 -3
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/toolRegistry.js +2 -3
- package/dist/canvas/SceneCanvas/useActionTunings.js +1 -2
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +1 -2
- package/dist/canvas/SceneCanvas/useBakedScene.js +2 -3
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +7 -8
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +3 -2
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +2 -3
- package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js +1 -2
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +1 -2
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +8 -6
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -1
- package/dist/canvas/SceneCanvas/useCanvasTools.js +2 -3
- package/dist/canvas/SceneCanvas/useChromeAffordances.js +2 -3
- package/dist/canvas/SceneCanvas/useContributionRoles.js +3 -2
- package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -1
- package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js +4 -5
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +2 -3
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +1 -2
- package/dist/canvas/SceneCanvas/useMagnificationCheck.js +41 -0
- package/dist/canvas/SceneCanvas/useMagnificationCheck.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +1 -2
- package/dist/canvas/SceneCanvas/useNodeKinds.js +2 -3
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +10 -11
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +1 -2
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +6 -7
- package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js +1 -2
- package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +1 -2
- package/dist/canvas/SceneCanvas/useSceneChrome.js +22 -11
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +6 -7
- package/dist/canvas/SceneCanvas/useScenePicking.js +5 -6
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +1 -2
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +7 -8
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +2 -3
- package/dist/canvas/SceneCanvas/useSceneStandardActions.js +28 -17
- package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +2 -3
- package/dist/canvas/SceneCanvas/useSurfaceRouting.js +1 -2
- package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js +1 -2
- package/dist/canvas/SceneCanvas/useToolKeybindings.js +1 -2
- package/dist/canvas/SceneCanvas/useViewportActions.js +3 -4
- package/dist/canvas/SceneCanvas/worldPointAt.js +1 -2
- package/dist/canvas/SceneCanvas.js +22 -20
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +7 -4
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +1 -2
- package/dist/canvas/ViewMarker.js +1 -2
- package/dist/canvas/accentColor.js +1 -2
- package/dist/canvas/adapterDerivedPath.js +2 -3
- package/dist/canvas/adapterPickSource.js +1 -2
- package/dist/canvas/affordanceAt.js +2 -4
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +4 -5
- package/dist/canvas/buildSceneTree.js +4 -5
- package/dist/canvas/canvasRenderer.js +1 -2
- package/dist/canvas/colorOverrides.js +1 -2
- package/dist/canvas/contextAttributes.js +1 -2
- package/dist/canvas/copiesAbove.js +1 -2
- package/dist/canvas/defaultDrawOne.js +1 -2
- package/dist/canvas/deps/areaSelect.js +5 -3
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/booleans.js +5 -6
- package/dist/canvas/deps/changes.js +1 -2
- package/dist/canvas/deps/chromeRules.js +36 -0
- package/dist/canvas/deps/chromeRules.js.map +1 -0
- package/dist/canvas/deps/debug.js +1 -2
- package/dist/canvas/deps/dispatchSources.js +1 -2
- package/dist/canvas/deps/dispatcher.js +1 -2
- package/dist/canvas/deps/editAnchors.js +3 -10
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/enteredGroup.js +1 -2
- package/dist/canvas/deps/geometryProjection.js +1 -2
- package/dist/canvas/deps/hitTestArea.js +6 -5
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/ingestion.js +1 -2
- package/dist/canvas/deps/insert.js +3 -4
- package/dist/canvas/deps/insertSite.js +3 -4
- package/dist/canvas/deps/kitSettings.js +1 -2
- package/dist/canvas/deps/lassoSelect.js +5 -3
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/layout.js +1 -2
- package/dist/canvas/deps/modeDefaultTool.js +22 -0
- package/dist/canvas/deps/modeDefaultTool.js.map +1 -0
- package/dist/canvas/deps/nodeAtPoint.js +1 -2
- package/dist/canvas/deps/pathEditCommits.js +3 -4
- package/dist/canvas/deps/pathLeaf.js +1 -2
- package/dist/canvas/deps/pathLeafDeps.js +2 -3
- package/dist/canvas/deps/poseDescriptor.js +1 -2
- package/dist/canvas/deps/previewPaths.js +1 -2
- package/dist/canvas/deps/resizePolicy.js +1 -2
- package/dist/canvas/deps/selectionSnapshot.js +22 -0
- package/dist/canvas/deps/selectionSnapshot.js.map +1 -0
- package/dist/canvas/deps/slice.js +5 -6
- package/dist/canvas/deps/snap.js +4 -4
- package/dist/canvas/deps/snap.js.map +1 -1
- package/dist/canvas/deps/surface.js +1 -2
- package/dist/canvas/deps/textEdit.js +1 -2
- package/dist/canvas/deps/transformFollowers.js +1 -2
- package/dist/canvas/deps/view.js +1 -2
- package/dist/canvas/derivedPath.js +6 -7
- package/dist/canvas/doubleClickTarget.js +1 -2
- package/dist/canvas/drawEnvelope.js +1 -2
- package/dist/canvas/drawnBounds.js +4 -5
- package/dist/canvas/getNodeAtPoint.js +1 -2
- package/dist/canvas/hostAnchor.js +1 -2
- package/dist/canvas/hud.module.js +1 -2
- package/dist/canvas/inheritedPaints.js +1 -2
- package/dist/canvas/insertPreviewExtent.js +1 -2
- package/dist/canvas/kitRequirements.js +1 -2
- package/dist/canvas/layerHover.js +1 -2
- package/dist/canvas/layerOrder.js +1 -2
- package/dist/canvas/layerSlots.js +1 -2
- package/dist/canvas/mountedCanvases.js +1 -2
- package/dist/canvas/nodeShapes/derivedPainter.js +2 -3
- package/dist/canvas/nodeShapes/imagePainter.js +1 -2
- package/dist/canvas/nodeShapes/measurePainter.js +2 -3
- package/dist/canvas/nodeShapes/memo.js +1 -2
- package/dist/canvas/nodeShapes/nodePaint.js +1 -2
- package/dist/canvas/nodeShapes/pathPainter.js +3 -4
- package/dist/canvas/nodeShapes/poseBox.js +1 -2
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +1 -2
- package/dist/canvas/nodeShapes/shapePainter.js +2 -3
- package/dist/canvas/nodeShapes/strokedBounds.js +1 -2
- package/dist/canvas/nodeShapes/textPainter.js +1 -2
- package/dist/canvas/overChildren.js +1 -2
- package/dist/canvas/overlayRoleStrokes.js +1 -2
- package/dist/canvas/ownClip.js +1 -2
- package/dist/canvas/paintCull.js +1 -2
- package/dist/canvas/paintedCursorLayer.js +1 -2
- package/dist/canvas/pathOverlay.js +1 -2
- package/dist/canvas/pickIndex/nodeBroadBox.js +3 -4
- package/dist/canvas/pickIndex/scenePickIndex.js +3 -4
- package/dist/canvas/pickReach.js +13 -10
- package/dist/canvas/pickReach.js.map +1 -1
- package/dist/canvas/pickWalk.js +9 -8
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +1 -2
- package/dist/canvas/poseRotation.js +1 -2
- package/dist/canvas/publishPreviews.js +1 -2
- package/dist/canvas/rasterReadback.js +1 -2
- package/dist/canvas/rasterToPng.js +1 -2
- package/dist/canvas/renderDebugSnapshot.js +1 -2
- package/dist/canvas/renderNeeds.js +1 -2
- package/dist/canvas/renderSceneToPixels.js +5 -6
- package/dist/canvas/sceneAdapter.js +37 -27
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +19 -7
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneLayerPaint.js +1 -2
- package/dist/canvas/scenePickReads.js +1 -2
- package/dist/canvas/scenePickSource.js +7 -8
- package/dist/canvas/scenePickSource.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +2 -3
- package/dist/canvas/sceneViewRender.js +5 -6
- package/dist/canvas/shownNodes.js +1 -2
- package/dist/canvas/slopsDebugLayer.js +1 -2
- package/dist/canvas/surfaceContribution.js +1 -2
- package/dist/canvas/useCanvasElements.js +1 -2
- package/dist/canvas/useCanvasHandle.js +1 -2
- package/dist/canvas/useCanvasPaint.js +2 -3
- package/dist/canvas/useCanvasRenderer.js +1 -2
- package/dist/canvas/useCanvasSurface.js +22 -5
- package/dist/canvas/useCanvasSurface.js.map +1 -1
- package/dist/canvas/useCanvasView.js +2 -3
- package/dist/canvas/useClientToWorld.js +1 -2
- package/dist/canvas/useExtraLayers.js +1 -2
- package/dist/canvas/useFrameLoop.js +7 -9
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHitObserver.js +1 -2
- package/dist/canvas/useHostAnchor.js +1 -2
- package/dist/canvas/useInFlightBounds.js +6 -6
- package/dist/canvas/useInFlightBounds.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +1 -2
- package/dist/canvas/useLayerStack.js +2 -3
- package/dist/canvas/usePaintedCursor.js +1 -2
- package/dist/canvas/useRedrawOn.js +1 -2
- package/dist/canvas/useSceneAdapter.js +1 -2
- package/dist/canvas/useSceneLayerList.js +1 -2
- package/dist/canvas/useSurfaceInput.js +1 -2
- package/dist/canvas/useSurfaceSize.js +5 -5
- package/dist/canvas/useSurfaceSize.js.map +1 -1
- package/dist/canvas/useToolCursor.js +1 -2
- package/dist/canvas/useViewAim.js +2 -3
- package/dist/canvas/useViewHelpers.js +5 -4
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/useViewLayerGate.js +1 -2
- package/dist/canvas/useViewNesting.js +1 -2
- package/dist/canvas/useViewRegistrySurface.js +1 -2
- package/dist/canvas/viewInputs.js +1 -2
- package/dist/canvas/viewMarkers.js +1 -2
- package/dist/canvas/viewRegistry.js +1 -2
- package/dist/canvas/viewSnap.js +1 -2
- package/dist/canvas/watchElementMove.js +1 -2
- package/dist/canvas/wrapNodeOutput.js +1 -2
- package/dist/core/adapters/testing/rootsTree.js +1 -2
- package/dist/core/applyOps.js +1 -2
- package/dist/core/device/targets.js +1 -2
- package/dist/core/device/useDeviceProfile.js +1 -2
- package/dist/core/device/useTargetBasePx.js +1 -2
- package/dist/core/device/watchDevicePixelRatio.js +1 -2
- package/dist/core/geometry/autoPoseDescriptor.js +2 -3
- package/dist/core/geometry/booleanOfPaths.js +1 -2
- package/dist/core/geometry/inkExtents.js +1 -2
- package/dist/core/geometry/pathPoseDescriptor.js +1 -2
- package/dist/core/geometry/poseDescriptor.js +1 -2
- package/dist/core/geometry/regionHit.js +36 -18
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +1 -2
- package/dist/core/geometry/unionBounds.js +1 -2
- package/dist/core/layers/backgroundFill.js +1 -2
- package/dist/core/layers/children.js +1 -2
- package/dist/core/layers/gateLayer.js +1 -2
- package/dist/core/layers/layerGroup.js +1 -2
- package/dist/core/layers/redrawSource.js +1 -2
- package/dist/core/layers/render.js +1 -2
- package/dist/core/layers/retain.js +1 -2
- package/dist/core/ops/arrange.js +1 -2
- package/dist/core/ops/create.js +2 -3
- package/dist/core/ops/createHistory.js +2 -3
- package/dist/core/ops/delete.js +2 -3
- package/dist/core/ops/nodeFlags.js +1 -2
- package/dist/core/ops/registry.js +1 -2
- package/dist/core/ops/reorder/algorithms.js +1 -2
- package/dist/core/ops/reorder/index.js +1 -2
- package/dist/core/ops/reorder/setChildOrder.js +1 -2
- package/dist/core/ops/reparent.js +1 -2
- package/dist/core/ops/select.js +1 -2
- package/dist/core/ops/setData.js +1 -2
- package/dist/core/ops/setDependsOn.js +1 -2
- package/dist/core/ops/setLayer.js +1 -2
- package/dist/core/ops/setLayout.js +1 -2
- package/dist/core/ops/setPath.js +1 -2
- package/dist/core/ops/setText.js +1 -2
- package/dist/core/ops/slot.js +1 -2
- package/dist/core/ops/transform.js +1 -2
- package/dist/core/ops/writtenBy.js +1 -2
- package/dist/core/pages/fitViewToPage.js +1 -2
- package/dist/core/pages/pageEdits.js +3 -4
- package/dist/core/pages/pages.js +1 -2
- package/dist/core/pages/pages.js.map +1 -1
- package/dist/core/pages/pagesLayer.js +1 -2
- package/dist/core/paint/meshKind.js +1 -2
- package/dist/core/paint/meshKindLazy.js +9 -18
- package/dist/core/paint/meshKindLazy.js.map +1 -1
- package/dist/core/paint/paintKindEntry.js +1 -2
- package/dist/core/paint/paintKinds.js +1 -2
- package/dist/core/paint/registerMesh.js +1 -2
- package/dist/core/scene/NodeProperties.js +1 -2
- package/dist/core/scene/NodeRouting.js +1 -2
- package/dist/core/scene/annotation.js +1 -2
- package/dist/core/scene/appliedLog.js +1 -2
- package/dist/core/scene/arrivalWindow.js +2 -3
- package/dist/core/scene/arrivals.js +1 -2
- package/dist/core/scene/booleanGroup.js +1 -2
- package/dist/core/scene/booleanOfChildren.js +1 -2
- package/dist/core/scene/boundOps.js +1 -2
- package/dist/core/scene/carryDescendants.js +2 -3
- package/dist/core/scene/clipNothing.js +1 -2
- package/dist/core/scene/composeFrame.js +1 -2
- package/dist/core/scene/composePose.js +1 -2
- package/dist/core/scene/declaredFieldSetters.js +1 -2
- package/dist/core/scene/depFrame.js +1 -2
- package/dist/core/scene/depMemo.js +1 -2
- package/dist/core/scene/dependents.js +1 -2
- package/dist/core/scene/derivedParts.js +1 -2
- package/dist/core/scene/derivedPath.js +2 -3
- package/dist/core/scene/docValues.js +1 -2
- package/dist/core/scene/documentOf.js +1 -2
- package/dist/core/scene/editMode.js +5 -3
- package/dist/core/scene/editMode.js.map +1 -1
- package/dist/core/scene/editPass.js +1 -2
- package/dist/core/scene/effectivePose.js +3 -4
- package/dist/core/scene/fieldEdits.js +1 -2
- package/dist/core/scene/fontReads.js +1 -2
- package/dist/core/scene/historyFacade.js +8 -52
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/historyForm.js +1 -2
- package/dist/core/scene/inheritedPaint.js +1 -2
- package/dist/core/scene/kitOps.js +16 -15
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js +2 -3
- package/dist/core/scene/layerOps.js +1 -2
- package/dist/core/scene/layerStack.js +1 -2
- package/dist/core/scene/layoutPass.js +4 -5
- package/dist/core/scene/lockGuard.js +1 -2
- package/dist/core/scene/minSize.js +1 -2
- package/dist/core/scene/nestedHit.js +1 -2
- package/dist/core/scene/nodeAsShown.js +1 -2
- package/dist/core/scene/nodeFlags.js +1 -2
- package/dist/core/scene/nodeFnFields.js +1 -2
- package/dist/core/scene/nodeGates.js +3 -4
- package/dist/core/scene/nodeGates.js.map +1 -1
- package/dist/core/scene/nodeMemo.js +1 -2
- package/dist/core/scene/nodeStore.js +2 -3
- package/dist/core/scene/notifier.js +1 -2
- package/dist/core/scene/opTable.js +9 -10
- package/dist/core/scene/opTable.js.map +1 -1
- package/dist/core/scene/outerOps.js +3 -4
- package/dist/core/scene/outerOps.js.map +1 -1
- package/dist/core/scene/pathEffects/blend.js +1 -2
- package/dist/core/scene/pathEffects/derive.js +2 -3
- package/dist/core/scene/pathEffects/effects.js +1 -2
- package/dist/core/scene/pathEffects/foundHidden.js +1 -2
- package/dist/core/scene/pathEffects/textAlong.js +1 -2
- package/dist/core/scene/pathEffects/textAlongBands.js +1 -2
- package/dist/core/scene/plyStacks.js +1 -2
- package/dist/core/scene/poseFeed.js +1 -2
- package/dist/core/scene/poseHold.js +1 -2
- package/dist/core/scene/poseOverrides.js +1 -2
- package/dist/core/scene/posePlies.js +1 -2
- package/dist/core/scene/poseRemovals.js +1 -2
- package/dist/core/scene/poseSnapshot.js +1 -2
- package/dist/core/scene/poseWrites.js +17 -17
- package/dist/core/scene/poseWrites.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +26 -3
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +1 -2
- package/dist/core/scene/renderOrder.js +1 -2
- package/dist/core/scene/sameValue.js +1 -2
- package/dist/core/scene/scene.js +11 -12
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneChanges.js +1 -2
- package/dist/core/scene/sceneEdits.js +1 -2
- package/dist/core/scene/sceneJournals.js +77 -0
- package/dist/core/scene/sceneJournals.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +2 -3
- package/dist/core/scene/scenePoseAdapter.js +1 -2
- package/dist/core/scene/sceneRecording.js +4 -4
- package/dist/core/scene/sceneRecording.js.map +1 -1
- package/dist/core/scene/sceneSelection.js +8 -5
- package/dist/core/scene/sceneSelection.js.map +1 -1
- package/dist/core/scene/sceneState.js +3 -4
- package/dist/core/scene/scrollOffsets.js +1 -2
- package/dist/core/scene/serialization.js +2 -3
- package/dist/core/scene/staleReplay.js +1 -2
- package/dist/core/scene/statedFields.js +1 -2
- package/dist/core/scene/strategyView.js +1 -2
- package/dist/core/scene/treeEdits.js +2 -3
- package/dist/core/scene/treeOrder.js +1 -2
- package/dist/core/scene/treeReads.js +1 -2
- package/dist/core/scene/treeShape.js +1 -2
- package/dist/core/scene/types.js +1 -2
- package/dist/core/scene/types.js.map +1 -1
- package/dist/core/scene/unionOfChildren.js +1 -2
- package/dist/core/scene/unitScopes.js +20 -4
- package/dist/core/scene/unitScopes.js.map +1 -1
- package/dist/core/scene/useScene.js +2 -3
- package/dist/core/scene/worldSave.js +2 -3
- package/dist/core/selection/chromeState.js +1 -2
- package/dist/core/selection/outermostSelection.js +56 -0
- package/dist/core/selection/outermostSelection.js.map +1 -0
- package/dist/core/selection/readOnlySelection.js +1 -2
- package/dist/core/selection/selectionTarget.js +1 -2
- package/dist/core/selection/usePublishSceneSelection.js +1 -2
- package/dist/core/selection/useSelection.js +1 -2
- package/dist/core/shapeKinds.js +1 -2
- package/dist/core/stableStringify.js +1 -2
- package/dist/core/stylus/stylus.js +1 -2
- package/dist/core/stylus/usePointerStylus.js +1 -2
- package/dist/core/usePaintKinds.js +1 -2
- package/dist/core/viewport/clampView.js +1 -2
- package/dist/core/viewport/clientToWorld.js +1 -2
- package/dist/core/viewport/createVelocityTracker.js +1 -2
- package/dist/core/viewport/fitToBounds.js +1 -2
- package/dist/core/viewport/fitViewToBounds.js +1 -2
- package/dist/core/viewport/interpolateView.js +1 -2
- package/dist/core/viewport/parallax.js +1 -2
- package/dist/core/viewport/sceneNodeClientRect.js +1 -2
- package/dist/core/viewport/screenSlop.js +1 -2
- package/dist/core/viewport/useAutoCenter.js +1 -2
- package/dist/core/viewport/useCanvasSize.js +48 -28
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +1 -2
- package/dist/core/viewport/useNodeOverlayFrame.js +1 -2
- package/dist/core/viewport/useVelocityTracker.js +1 -2
- package/dist/core/viewport/useViewAnimation.js +3 -4
- package/dist/core/viewport/view.js +1 -2
- package/dist/core/viewport/viewTransform.js +1 -2
- package/dist/core/viewport/viewportWorldRect.js +1 -2
- package/dist/core/viewport/wheelHandler.js +1 -2
- package/dist/core/viewport/zoomAt.js +2 -3
- package/dist/core/viewport/zoomBounds.js +1 -2
- package/dist/debug/createDebugOverlayLayer.js +1 -2
- package/dist/debug/createDebugSink.js +1 -2
- package/dist/debug/defaultTheme.js +1 -2
- package/dist/debug/features.js +1 -2
- package/dist/debug/frameStats.js +1 -2
- package/dist/debug/overlayPanels.js +1 -2
- package/dist/debug/parseDebugFlags.js +1 -2
- package/dist/debug/useDebugSink.js +2 -3
- package/dist/{depSchema-DD9H89gX.d.ts → depSchema-C7a_OMt-.d.ts} +101 -65
- package/dist/devtools/handlers.js +1 -2
- package/dist/devtools/history.js +1 -2
- package/dist/devtools/hook.js +1 -2
- package/dist/devtools/label.js +1 -2
- package/dist/devtools/notices.js +1 -2
- package/dist/devtools/protocol.js +1 -2
- package/dist/devtools/registry.js +1 -2
- package/dist/devtools/root.js +1 -2
- package/dist/devtools/serialize.js +1 -2
- package/dist/devtools/session.js +2 -3
- package/dist/devtools/transport.js +1 -2
- package/dist/devtools/useDevtoolsRoot.js +1 -2
- package/dist/devtools-protocol.d.ts +1 -1
- package/dist/devtools-protocol.js +2 -2
- package/dist/devtools.d.ts +1 -1
- package/dist/devtools.js +1 -2
- package/dist/domains/chrome-caps/buildChromeCtx.js +1 -2
- package/dist/domains/chrome-caps/conditions.js +1 -2
- package/dist/domains/chrome-caps/defaults.js +1 -2
- package/dist/domains/chrome-caps/resolve.js +3 -3
- package/dist/domains/chrome-caps/resolve.js.map +1 -1
- package/dist/domains/chrome-caps/useChromeCaps.js +5 -4
- package/dist/domains/chrome-caps/useChromeCaps.js.map +1 -1
- package/dist/domains/chrome-caps/useHoverTracking.js +1 -2
- package/dist/domains/ingestion/contentHandlers.js +1 -2
- package/dist/domains/ingestion/ghost.js +2 -3
- package/dist/domains/ingestion/imageHandler.js +1 -2
- package/dist/domains/ingestion/kitHandlers.js +2 -3
- package/dist/domains/ingestion/openFilePicker.js +1 -2
- package/dist/domains/ingestion/placement.js +1 -2
- package/dist/domains/ingestion/svgHandler.js +1 -2
- package/dist/domains/ingestion/textHandler.js +1 -2
- package/dist/domains/ingestion/useCanvasIngestion.js +1 -2
- package/dist/domains/ingestion/weaselJsonHandler.js +2 -3
- package/dist/domains/longPress/longPressFeedback.js +1 -2
- package/dist/domains/measure/actionIds.js +1 -2
- package/dist/domains/measure/measureCommands.js +6 -7
- package/dist/domains/measure/measureContribution.js +3 -4
- package/dist/domains/measure/measureEdits.js +3 -4
- package/dist/domains/measure/measureGestures.js +2 -3
- package/dist/domains/measure/measureHit.js +3 -4
- package/dist/domains/measure/measureLayer.js +3 -4
- package/dist/domains/measure/measurement.js +1 -2
- package/dist/domains/measure/measurements.js +1 -2
- package/dist/domains/modes/modeLayers.js +1 -2
- package/dist/domains/modes/modeTriggers.js +1 -2
- package/dist/domains/pathEffects/effectSources.js +2 -3
- package/dist/domains/pathEffects/index.js +1 -2
- package/dist/domains/pathEffects/readSource.js +3 -4
- package/dist/domains/pathEffects/textItems.js +1 -2
- package/dist/domains/pathEffects/useEffectSourcesLayer.js +3 -4
- package/dist/domains/paths/anchorData.js +1 -2
- package/dist/domains/paths/anchorMarkers.js +1 -2
- package/dist/domains/paths/editablePath.js +3 -4
- package/dist/domains/paths/originProjection.js +1 -2
- package/dist/domains/paths/pathEditExtension.js +1 -2
- package/dist/domains/paths/pathEditState.js +1 -26
- package/dist/domains/paths/pathEditState.js.map +1 -1
- package/dist/domains/paths/pathEditingOverlayLayer.js +2 -3
- package/dist/domains/paths/pathLayer.js +1 -2
- package/dist/domains/paths/pathRepresentation.js +1 -2
- package/dist/domains/paths/pathSnap/glyphs.js +1 -2
- package/dist/domains/paths/pathSnap/pathSnapSource.js +1 -2
- package/dist/domains/paths/pathSnap/sceneIndex.js +1 -2
- package/dist/domains/paths/pathSnap/snapGeometry.js +2 -3
- package/dist/domains/paths/penPreviewLayer.js +1 -2
- package/dist/domains/paths/shapeGenerator.js +1 -2
- package/dist/domains/paths/strokeOutline.js +2 -3
- package/dist/domains/paths/useAnchorFields.js +1 -2
- package/dist/domains/paths/usePathEdit.js +2 -3
- package/dist/domains/poseRun/usePoseRun.js +1 -2
- package/dist/domains/selection/enteredGroupFrame.js +1 -2
- package/dist/domains/selection/enteredGroupScope.js +1 -2
- package/dist/domains/selection/enteredOperands.js +1 -2
- package/dist/domains/selection/handleCommands.js +2 -3
- package/dist/domains/selection/overlay.js +6 -7
- package/dist/domains/selection/selectionPose.js +2 -3
- package/dist/domains/snap/angle2d.js +1 -2
- package/dist/domains/snap/debugCandidates.js +1 -2
- package/dist/domains/snap/gather.js +1 -2
- package/dist/domains/snap/inputSubspace.js +2 -3
- package/dist/domains/snap/lazySession.js +1 -2
- package/dist/domains/snap/marks.js +1 -2
- package/dist/domains/snap/outcomeStore.js +1 -2
- package/dist/domains/snap/pointSnap.js +1 -2
- package/dist/domains/snap/probes2d.js +6 -2
- package/dist/domains/snap/probes2d.js.map +1 -1
- package/dist/domains/snap/readoutDraw.js +1 -2
- package/dist/domains/snap/readoutLayer.js +1 -2
- package/dist/domains/snap/registry.js +1 -2
- package/dist/domains/snap/resizeBox.js +1 -2
- package/dist/domains/snap/roles.js +1 -2
- package/dist/domains/snap/rotationSource.js +1 -2
- package/dist/domains/snap/sceneReads.js +13 -4
- package/dist/domains/snap/sceneReads.js.map +1 -1
- package/dist/domains/snap/sceneSession2d.js +6 -5
- package/dist/domains/snap/sceneSession2d.js.map +1 -1
- package/dist/domains/snap/screen.js +2 -3
- package/dist/domains/snap/session2d.js +4 -5
- package/dist/domains/snap/spanSnap.js +1 -2
- package/dist/domains/snap/stepAngles.js +1 -2
- package/dist/domains/text/editingDrawOne.js +1 -2
- package/dist/domains/text/hostTextEditors.js +1 -2
- package/dist/domains/text/index.js +2 -2
- package/dist/domains/text/sceneTextDrafts.js +1 -2
- package/dist/domains/text/textHitAt.js +4 -5
- package/dist/domains/text/textLayer.js +12 -2
- package/dist/domains/text/textLayer.js.map +1 -1
- package/dist/domains/text/useSceneTextEdit.js +4 -5
- package/dist/domains/viewports/aim.js +3 -4
- package/dist/domains/viewports/viewMarker.js +1 -2
- package/dist/domains/viewports/viewMarkerDrag.js +1 -2
- package/dist/domains/viewports/viewResolver.js +1 -2
- package/dist/domains/viewports/viewportLayer.js +1 -2
- package/dist/iconRegistry/IconRegistryProvider.js +1 -2
- package/dist/iconRegistry/useIconGlyph.js +1 -2
- package/dist/iconRegistry/useIconVariant.js +1 -2
- package/dist/icons.table.js +2 -3
- package/dist/icons.table.js.map +1 -1
- package/dist/icons.table.json +5 -0
- package/dist/icons2.table.js +1 -2
- package/dist/index.d.ts +160 -64
- package/dist/index.js +14 -9
- package/dist/input/keyState.js +1 -2
- package/dist/input/useKeyModifiers.js +1 -2
- package/dist/input/useKeyState.js +1 -2
- package/dist/interactions/actions/admitsChild.js +1 -2
- package/dist/interactions/actions/align/action.js +6 -7
- package/dist/interactions/actions/align/align.js +6 -7
- package/dist/interactions/actions/booleans/action.js +5 -4
- package/dist/interactions/actions/booleans/action.js.map +1 -1
- package/dist/interactions/actions/booleans/booleanGroupAction.js +2 -3
- package/dist/interactions/actions/booleans/booleans.js +1 -2
- package/dist/interactions/actions/booleans/commit.js +4 -5
- package/dist/interactions/actions/booleans/custom.js +2 -3
- package/dist/interactions/actions/booleans/keymap.js +1 -2
- package/dist/interactions/actions/booleans/operands.js +1 -2
- package/dist/interactions/actions/booleans/pieces.js +1 -2
- package/dist/interactions/actions/booleans/placement.js +1 -2
- package/dist/interactions/actions/booleans/useBooleans.js +1 -2
- package/dist/interactions/actions/booleans/useBooleansAdapter.js +1 -2
- package/dist/interactions/actions/clipboard/action.js +2 -3
- package/dist/interactions/actions/clipboard/clipboardOps.js +2 -3
- package/dist/interactions/actions/clipboard/materializePaste.js +1 -2
- package/dist/interactions/actions/clipboard/wireFormat.js +1 -2
- package/dist/interactions/actions/clone/action.js +7 -8
- package/dist/interactions/actions/clone/behaviors.js +4 -5
- package/dist/interactions/actions/defaultCommitAdapter.js +2 -3
- package/dist/interactions/actions/defaults/anchorEditing.js +6 -10
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorFields.js +1 -2
- package/dist/interactions/actions/defaults/anchorHandles.js +2 -3
- package/dist/interactions/actions/defaults/anchorJoin.js +2 -3
- package/dist/interactions/actions/defaults/areaSelect.js +6 -6
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +4 -6
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
- package/dist/interactions/actions/defaults/cancelGesture.js +1 -2
- package/dist/interactions/actions/defaults/clearSelection.js +1 -2
- package/dist/interactions/actions/defaults/containerScroll.js +4 -5
- package/dist/interactions/actions/defaults/contextMenu.js +6 -7
- package/dist/interactions/actions/defaults/copySubtree.js +2 -3
- package/dist/interactions/actions/defaults/createPaintAction.js +3 -4
- package/dist/interactions/actions/defaults/delete.js +2 -3
- package/dist/interactions/actions/defaults/duplicate.js +5 -6
- package/dist/interactions/actions/defaults/enterGroup.js +2 -3
- package/dist/interactions/actions/defaults/enterPathEdit.js +1 -2
- package/dist/interactions/actions/defaults/enterTextEdit.js +1 -2
- package/dist/interactions/actions/defaults/escape.js +1 -2
- package/dist/interactions/actions/defaults/exitPathEdit.js +18 -3
- package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +6 -7
- package/dist/interactions/actions/defaults/ingest.js +3 -4
- package/dist/interactions/actions/defaults/insertPathAnchor.js +2 -3
- package/dist/interactions/actions/defaults/nudge.js +3 -4
- package/dist/interactions/actions/defaults/nudgeSteps.js +2 -3
- package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -1
- package/dist/interactions/actions/defaults/pathEditMarks.js +1 -2
- package/dist/interactions/actions/defaults/pinchZoom.js +3 -4
- package/dist/interactions/actions/defaults/reorder.js +2 -3
- package/dist/interactions/actions/defaults/requiresSelection.js +1 -2
- package/dist/interactions/actions/defaults/segmentUnder.js +1 -2
- package/dist/interactions/actions/defaults/selectAll.js +1 -2
- package/dist/interactions/actions/defaults/selectDeep.js +1 -2
- package/dist/interactions/actions/defaults/setFill.js +1 -2
- package/dist/interactions/actions/defaults/setFillOpacity.js +1 -2
- package/dist/interactions/actions/defaults/setStroke.js +1 -2
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +1 -2
- package/dist/interactions/actions/defaults/slice.js +1 -2
- package/dist/interactions/actions/defaults/sliceOps.js +1 -2
- package/dist/interactions/actions/defaults/toolActivate.js +1 -2
- package/dist/interactions/actions/defaults/toolResetToDefault.js +1 -2
- package/dist/interactions/actions/defaults/undoRedo.js +1 -2
- package/dist/interactions/actions/defaults/viewportDragPan.js +1 -2
- package/dist/interactions/actions/defaults/viewportWheelPan.js +1 -2
- package/dist/interactions/actions/defaults/viewportZoom.js +3 -4
- package/dist/interactions/actions/distribute/action.js +4 -5
- package/dist/interactions/actions/distribute/distribute.js +5 -6
- package/dist/interactions/actions/distribute/plan.js +1 -2
- package/dist/interactions/actions/drawnBoxes.js +4 -5
- package/dist/interactions/actions/dropVerdict.js +1 -2
- package/dist/interactions/actions/edit-anchors/action.js +7 -9
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/extensionDrags.js +1 -2
- package/dist/interactions/actions/edit-anchors/geometry.js +1 -2
- package/dist/interactions/actions/edit-anchors/handleDrag.js +1 -2
- package/dist/interactions/actions/edit-anchors/handles.js +1 -2
- package/dist/interactions/actions/edit-anchors/params.js +1 -2
- package/dist/interactions/actions/edit-anchors/preview.js +1 -2
- package/dist/interactions/actions/edit-anchors/symmetry.js +1 -2
- package/dist/interactions/actions/flip/action.js +8 -9
- package/dist/interactions/actions/flip/helpers.js +1 -2
- package/dist/interactions/actions/geometryProjection.js +1 -2
- package/dist/interactions/actions/gestureFrames.js +3 -4
- package/dist/interactions/actions/gestureLifecycle.js +1 -2
- package/dist/interactions/actions/hitSelection.js +7 -3
- package/dist/interactions/actions/hitSelection.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +27 -9
- package/dist/interactions/actions/insert/action.js.map +1 -1
- package/dist/interactions/actions/insert/commit.js +2 -3
- package/dist/interactions/actions/insert/extras.js +1 -2
- package/dist/interactions/actions/insert/frame.js +1 -2
- package/dist/interactions/actions/insert/geometry.js +1 -2
- package/dist/interactions/actions/insert/params.js +42 -0
- package/dist/interactions/actions/insert/params.js.map +1 -0
- package/dist/interactions/actions/insert/parent.js +1 -2
- package/dist/interactions/actions/insert/placeAction.js +5 -6
- package/dist/interactions/actions/insert/repositionAction.js +1 -2
- package/dist/interactions/actions/insert/rotateAction.js +1 -2
- package/dist/interactions/actions/insert/session.js +5 -6
- package/dist/interactions/actions/insert/shape.js +2 -3
- package/dist/interactions/actions/lasso-select/action.js +9 -9
- package/dist/interactions/actions/lasso-select/action.js.map +1 -1
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +2 -3
- package/dist/interactions/actions/magnification.js +37 -0
- package/dist/interactions/actions/magnification.js.map +1 -0
- package/dist/interactions/actions/move/action.js +2 -3
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +2 -3
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +2 -3
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +1 -2
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +2 -3
- package/dist/interactions/actions/move/capture.js +6 -7
- package/dist/interactions/actions/move/commit/index.js +2 -3
- package/dist/interactions/actions/move/commit/layoutDrop.js +4 -5
- package/dist/interactions/actions/move/commit/layoutRelease.js +7 -8
- package/dist/interactions/actions/move/commit/rebase.js +2 -3
- package/dist/interactions/actions/move/commit/reparent.js +5 -6
- package/dist/interactions/actions/move/delta.js +2 -3
- package/dist/interactions/actions/move/frame.js +2 -3
- package/dist/interactions/actions/move/gestureAdapter.js +1 -2
- package/dist/interactions/actions/move/landedDescendants.js +2 -3
- package/dist/interactions/actions/move/layout/container.js +3 -4
- package/dist/interactions/actions/move/layout/dragged.js +2 -3
- package/dist/interactions/actions/move/layout/dropPass.js +5 -6
- package/dist/interactions/actions/move/layout/exits.js +2 -3
- package/dist/interactions/actions/move/layout/glide.js +2 -3
- package/dist/interactions/actions/move/layout/view.js +1 -2
- package/dist/interactions/actions/move/refusal.js +2 -3
- package/dist/interactions/actions/move/session.js +4 -5
- package/dist/interactions/actions/move/translate.js +2 -3
- package/dist/interactions/actions/moveNodes.js +5 -6
- package/dist/interactions/actions/notices.js +16 -0
- package/dist/interactions/actions/notices.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +9 -8
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +14 -10
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -1
- package/dist/interactions/actions/outlines/outlineStroke.js +2 -3
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +5 -5
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -1
- package/dist/interactions/actions/outlines/replaceWithPaths.js +5 -6
- package/dist/interactions/actions/outlines/strokeRegion.js +1 -2
- package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +1 -2
- package/dist/interactions/actions/pathCommands/cutJoin.js +3 -4
- package/dist/interactions/actions/pathCommands/livePathEdit.js +3 -4
- package/dist/interactions/actions/pathCommands/pathNodes.js +2 -3
- package/dist/interactions/actions/pathCommands/simplifyOffset.js +2 -3
- package/dist/interactions/actions/pathGestureTags.js +1 -2
- package/dist/interactions/actions/planeInput.js +2 -3
- package/dist/interactions/actions/pointerState.js +1 -2
- package/dist/interactions/actions/poseDescriptorDep.js +1 -2
- package/dist/interactions/actions/poseFrame.js +3 -4
- package/dist/interactions/actions/resize/action.js +3 -4
- package/dist/interactions/actions/resize/aspect.js +1 -2
- package/dist/interactions/actions/resize/behaviors/clampMinSize.js +1 -2
- package/dist/interactions/actions/resize/boxFrame.js +1 -2
- package/dist/interactions/actions/resize/capture.js +7 -8
- package/dist/interactions/actions/resize/commit.js +3 -4
- package/dist/interactions/actions/resize/cornerHandles.js +1 -2
- package/dist/interactions/actions/resize/frame.js +7 -8
- package/dist/interactions/actions/resize/held.js +2 -3
- package/dist/interactions/actions/resize/minimum.js +1 -2
- package/dist/interactions/actions/resize/replay.js +1 -2
- package/dist/interactions/actions/resize/ruleBounds.js +1 -2
- package/dist/interactions/actions/resize/session.js +9 -10
- package/dist/interactions/actions/resolveOverlays.js +1 -2
- package/dist/interactions/actions/resolvePreviews.js +3 -4
- package/dist/interactions/actions/rotate/action.js +5 -6
- package/dist/interactions/actions/rotate/commit.js +2 -3
- package/dist/interactions/actions/rotate/frame.js +3 -4
- package/dist/interactions/actions/rotate/geometry.js +1 -2
- package/dist/interactions/actions/rotate/handle.js +2 -3
- package/dist/interactions/actions/rotate/replay.js +2 -3
- package/dist/interactions/actions/rotate/session.js +10 -11
- package/dist/interactions/actions/selectionSubtree.js +7 -22
- package/dist/interactions/actions/selectionSubtree.js.map +1 -1
- package/dist/interactions/actions/spatialReference.js +1 -2
- package/dist/interactions/actions/testUtils.js +1 -9
- package/dist/interactions/actions/testUtils.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +5 -6
- package/dist/interactions/actions/transform-again/memory.js +1 -2
- package/dist/interactions/actions/transformFinish.js +1 -2
- package/dist/interactions/actions/useActionSet.js +1 -2
- package/dist/interactions/actions/useNotices.js +12 -0
- package/dist/interactions/actions/useNotices.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +1 -2
- package/dist/interactions/gestures/dragGesture/dragGesture.js +1 -2
- package/dist/interactions/gestures/dragGesture/dragPointOf.js +1 -2
- package/dist/interactions/gestures/dragRadial/dragRadial.js +2 -3
- package/dist/interactions/gestures/dragRect/dragRect.js +2 -3
- package/dist/interactions/gestures/handleDrag/handleDrag.js +1 -2
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +1 -2
- package/dist/interactions/gestures/shared/originProjection.js +1 -2
- package/dist/interactions/gestures/shared/screenTolerance.js +1 -2
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +1 -2
- package/dist/kitSettingsSchema.js +4 -5
- package/dist/test-hook/createTestHook.js +1 -2
- package/dist/test-hook/install.js +1 -2
- package/dist/test-hook/useTestHook.js +1 -2
- package/dist/test-seams.d.ts +7 -14
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/anchors/anchorsTool.js +30 -0
- package/dist/tools/builtin/anchors/anchorsTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +2 -3
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js +1 -2
- package/dist/tools/builtin/hand/dragPanContribution.js +1 -2
- package/dist/tools/builtin/hand/useHandTool.js +1 -2
- package/dist/tools/builtin/image/useImageTool.js +1 -2
- package/dist/tools/builtin/lasso/useLassoTool.js +1 -2
- package/dist/tools/builtin/line/useLineTool.js +2 -3
- package/dist/tools/builtin/measure/useMeasureTool.js +2 -3
- package/dist/tools/builtin/pen/penHandle.js +1 -2
- package/dist/tools/builtin/pen/usePenTool.js +6 -7
- package/dist/tools/builtin/pencil/usePencilTool.js +1 -2
- package/dist/tools/builtin/pickTopMostHit.js +1 -2
- package/dist/tools/builtin/polygon/usePolygonTool.js +2 -3
- package/dist/tools/builtin/pressTarget.js +1 -2
- package/dist/tools/builtin/rect/useRectTool.js +2 -3
- package/dist/tools/builtin/select/adapterPointQuery.js +3 -4
- package/dist/tools/builtin/select/collapseDeferred.js +1 -2
- package/dist/tools/builtin/select/groupEntry.js +2 -3
- package/dist/tools/builtin/select/pressDecision.js +3 -4
- package/dist/tools/builtin/select/pressDecision.js.map +1 -1
- package/dist/tools/builtin/select/selectionContributions.js +1 -2
- package/dist/tools/builtin/select/useSelectTool.js +5 -6
- package/dist/tools/builtin/shared/insertToolOptions.js +1 -2
- package/dist/tools/builtin/shared/pointerFollower.js +1 -2
- package/dist/tools/builtin/slice/useSliceTool.js +5 -6
- package/dist/tools/builtin/star/useStarTool.js +2 -3
- package/dist/tools/builtin/sticky/stickyNode.js +1 -2
- package/dist/tools/builtin/sticky/useStickyTool.js +2 -3
- package/dist/tools/builtin/text/useTextTool.js +1 -2
- package/dist/tools/index.js +4 -2
- package/dist/tools/overlayBinding.js +1 -2
- package/dist/tools/toolOptions.js +60 -0
- package/dist/tools/toolOptions.js.map +1 -0
- package/dist/tools/useKeybindings.js +1 -2
- package/dist/{types-DW14eu9B.d.ts → types-BUvUXZe5.d.ts} +3 -3
- package/dist/util/color.js +1 -2
- package/dist/util/paint.js +1 -2
- package/dist/version.js +2 -3
- package/package.json +27 -27
- package/dist/interactions/actions/defaults/pathEditTools.js +0 -60
- package/dist/interactions/actions/defaults/pathEditTools.js.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { planeMap } from "../core/viewport/parallax.js";
|
|
2
|
-
import { resolveDerivedPath } from "../core/scene/derivedPath.js";
|
|
3
|
-
import { nodeAsShown, nodesAsShown } from "../core/scene/nodeAsShown.js";
|
|
4
1
|
import { asNodeId } from "../core/scene/types.js";
|
|
2
|
+
import { resolveDerivedPath } from "../core/scene/derivedPath.js";
|
|
5
3
|
import { annotationLayerIds } from "../core/scene/annotation.js";
|
|
6
4
|
import { nodeGates } from "../core/scene/nodeGates.js";
|
|
5
|
+
import { planeMap } from "../core/viewport/parallax.js";
|
|
7
6
|
import { scenePaintedPoseOf } from "./derivedPath.js";
|
|
8
|
-
import { sceneParentsOf, sceneShownPathOf } from "./scenePickReads.js";
|
|
9
7
|
import { indexedCandidates } from "./pickIndex/scenePickIndex.js";
|
|
8
|
+
import { sceneParentsOf, sceneShownPathOf } from "./scenePickReads.js";
|
|
9
|
+
import { nodeAsShown, nodesAsShown } from "../core/scene/nodeAsShown.js";
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
// src/canvas/scenePickSource.ts
|
|
12
12
|
function scenePickSource(scene, opts = {}) {
|
|
13
13
|
const gates = nodeGates(scene);
|
|
14
14
|
const enumerable = typeof scene.overrides?.ids === "function";
|
|
@@ -54,8 +54,8 @@ function scenePickSource(scene, opts = {}) {
|
|
|
54
54
|
poseOf,
|
|
55
55
|
parentsOf: sceneParentsOf(scene),
|
|
56
56
|
...readAlpha ? { alphaOf: readAlpha } : {},
|
|
57
|
-
isLocked: (node) => gates.locked(node
|
|
58
|
-
isHidden: (node) => gates.hidden(node
|
|
57
|
+
isLocked: (node) => gates.locked(node),
|
|
58
|
+
isHidden: (node) => gates.hidden(node),
|
|
59
59
|
...annotations.size > 0 || layerIsPainted ? { layerIsPainted: (layer) => !annotations.has(layer) && (layerIsPainted === void 0 || layerIsPainted(layer)) } : {}
|
|
60
60
|
};
|
|
61
61
|
}
|
|
@@ -69,6 +69,5 @@ function scenePlaneOf(layers, camera) {
|
|
|
69
69
|
return (layer) => found.get(layer) ?? null;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
//#endregion
|
|
73
72
|
export { scenePickSource, scenePlaneOf };
|
|
74
73
|
//# sourceMappingURL=scenePickSource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scenePickSource.js","names":[],"sources":["../../src/canvas/scenePickSource.ts"],"sourcesContent":["/** The pick source over a `Scene`: its render order, painted poses and gates,\n * and, given a descriptor, the pick index that narrows the walk. */\nimport type { Path } from '@weasel-js/geom';\nimport type { DerivedDep, Node, NodeId, Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport { annotationLayerIds } from 'core/scene/annotation';\nimport { nodeGates } from 'core/scene/nodeGates';\nimport { planeMap, type ParallaxOpts, type PlaneMap } from 'core/viewport/parallax';\nimport type { View } from 'core/viewport/view';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { resolveDerivedPath, scenePaintedPoseOf } from './derivedPath';\nimport { indexedCandidates } from './pickIndex/scenePickIndex';\nimport type { PickBroad, PickCandidate, PickSource, ViewPickGates } from './pickWalk';\nimport { sceneParentsOf, sceneShownPathOf } from './scenePickReads';\nimport { nodeAsShown, nodesAsShown } from 'core/scene/nodeAsShown';\n\nexport interface ScenePickSourceOptions<TPose> extends ViewPickGates {\n /** Pose lookup, when the caller holds an adapter that already resolves\n * overrides. Defaults to `effectivePose` against the scene's own. */\n getPose?: (id: string) => TPose;\n /** The asking view's composed alpha — `alphaFor(id)` times override alpha.\n * Defaults to the override alpha alone, which is all a bare scene knows. */\n alphaOf?: (id: string) => number;\n /** The asking view's answer to \"does this scene layer reach the screen\",\n * which is `layerVisibility` and `layerOrder` on top of the scene's own\n * `visible` flag. Consulted after the scene's flag, never instead of it. */\n layerIsPainted?: (layer: string) => boolean;\n /** The asking view's camera. With it, a layer carrying `parallax` is picked\n * through its plane; without it, every layer is taken to move with the\n * camera. */\n camera?: View;\n /** Box every node once per scene change, so a query carrying a `broad` box\n * visits only the nodes it can hit. `descriptor` must be the one the\n * query reads poses through. */\n index?: { descriptor: PoseDescriptor<unknown> };\n}\n\nexport function scenePickSource<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n opts: ScenePickSourceOptions<TPose> = {},\n): PickSource<TPose> {\n // Partial scene stand-ins carry only `layers` and `get`, which is all the gates read.\n const gates = nodeGates(scene as never);\n const enumerable = typeof scene.overrides?.ids === 'function';\n // Pick candidates carry a plain string id; the scene answers them all the same.\n const asShown = <N extends { id: string; data?: unknown }>(node: N): N =>\n (scene.overrides ? nodeAsShown(scene.overrides, node as N & { id: NodeId }) : node);\n const allAsShown = <N extends { id: string; data?: unknown }>(nodes: readonly N[]): readonly N[] =>\n (enumerable ? nodesAsShown(scene.overrides, nodes as readonly (N & { id: NodeId })[]) : nodes.map(asShown));\n const annotations = annotationLayerIds(scene.layers);\n const { getPose, alphaOf, layerIsPainted } = opts;\n\n // Resolved once per walk rather than once per candidate. Needs enumeration — a\n // partial scene stand-in carrying only `read` falls back to reading per node.\n let faded: Set<string> | null = null;\n if (!alphaOf && enumerable) {\n for (const id of scene.overrides.ids()) {\n const a = scene.overrides.read(id)?.alpha;\n if (a !== undefined && a <= 0) (faded ??= new Set()).add(id);\n }\n }\n const readAlpha = alphaOf\n ?? (enumerable\n ? (faded ? (id: string) => (faded.has(id) ? 0 : 1) : undefined)\n : (id: string) => scene.overrides.read(asNodeId(id))?.alpha ?? 1);\n\n // A composing strategy makes a node's own pose local, so picking folds the\n // parent chain the same way the render walk does: one definition of both.\n const paintedPoseOf = scenePaintedPoseOf(scene);\n const poseOf = getPose\n ? (node: PickCandidate<TPose>) => getPose(node.id)\n : (node: PickCandidate<TPose>) => paintedPoseOf(node as never);\n\n // Through `poseOf`, not the document pose: a derived node has to be tested\n // where the renderer draws its dependencies, which is what an override says.\n const childrenOf = (id: NodeId): readonly NodeId[] => scene.childrenOf(id);\n const depOf = (id: NodeId): DerivedDep<TPose> | undefined => {\n const stored = scene.get(id);\n if (stored === undefined) return undefined;\n const dep = asShown(stored);\n return {\n node: dep as Node<unknown, string, TPose>,\n pose: poseOf(dep as never),\n get path(): Path | null {\n return resolveDerivedPath(dep as never, depOf, childrenOf);\n },\n };\n };\n\n const derivedPathOf = getPose\n ? (node: PickCandidate<TPose>): Path | null => {\n const n = node as unknown as Node<TData, TLayer, TPose>;\n return n.dependsOn === undefined ? null : resolveDerivedPath(n, depOf, childrenOf);\n }\n : sceneShownPathOf(scene);\n\n const planeOf = opts.camera ? scenePlaneOf(scene.layers, opts.camera) : null;\n\n // The index boxes nodes at the scene's painted poses; a custom `getPose` must be shown to agree first.\n // A partial stand-in has no versions for it to key on.\n const index = getPose || typeof scene.getVersion !== 'function' ? undefined : opts.index;\n return {\n ...(planeOf ? { planeOf } : {}),\n ...(index ? {\n candidates: (broadFor: (layer: string | undefined) => PickBroad | null | undefined) => {\n const found = indexedCandidates(scene as never, index.descriptor, broadFor) as readonly PickCandidate<TPose>[] | null;\n return found === null ? null : allAsShown(found);\n },\n } : {}),\n order: () => allAsShown(scene.renderOrderNodes() as unknown as readonly PickCandidate<TPose>[]),\n derivedPathOf,\n poseOf,\n parentsOf: sceneParentsOf(scene),\n // Absent entirely when nothing is faded, so the walk skips the gate.\n ...(readAlpha ? { alphaOf: readAlpha } : {}),\n isLocked: (node: PickCandidate<TPose>) => gates.locked(node
|
|
1
|
+
{"version":3,"file":"scenePickSource.js","names":[],"sources":["../../src/canvas/scenePickSource.ts"],"sourcesContent":["/** The pick source over a `Scene`: its render order, painted poses and gates,\n * and, given a descriptor, the pick index that narrows the walk. */\nimport type { Path } from '@weasel-js/geom';\nimport type { DerivedDep, Node, NodeId, Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport { annotationLayerIds } from 'core/scene/annotation';\nimport { nodeGates, type GatedNode } from 'core/scene/nodeGates';\nimport { planeMap, type ParallaxOpts, type PlaneMap } from 'core/viewport/parallax';\nimport type { View } from 'core/viewport/view';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { resolveDerivedPath, scenePaintedPoseOf } from './derivedPath';\nimport { indexedCandidates } from './pickIndex/scenePickIndex';\nimport type { PickBroad, PickCandidate, PickSource, ViewPickGates } from './pickWalk';\nimport { sceneParentsOf, sceneShownPathOf } from './scenePickReads';\nimport { nodeAsShown, nodesAsShown } from 'core/scene/nodeAsShown';\n\nexport interface ScenePickSourceOptions<TPose> extends ViewPickGates {\n /** Pose lookup, when the caller holds an adapter that already resolves\n * overrides. Defaults to `effectivePose` against the scene's own. */\n getPose?: (id: string) => TPose;\n /** The asking view's composed alpha — `alphaFor(id)` times override alpha.\n * Defaults to the override alpha alone, which is all a bare scene knows. */\n alphaOf?: (id: string) => number;\n /** The asking view's answer to \"does this scene layer reach the screen\",\n * which is `layerVisibility` and `layerOrder` on top of the scene's own\n * `visible` flag. Consulted after the scene's flag, never instead of it. */\n layerIsPainted?: (layer: string) => boolean;\n /** The asking view's camera. With it, a layer carrying `parallax` is picked\n * through its plane; without it, every layer is taken to move with the\n * camera. */\n camera?: View;\n /** Box every node once per scene change, so a query carrying a `broad` box\n * visits only the nodes it can hit. `descriptor` must be the one the\n * query reads poses through. */\n index?: { descriptor: PoseDescriptor<unknown> };\n}\n\nexport function scenePickSource<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n opts: ScenePickSourceOptions<TPose> = {},\n): PickSource<TPose> {\n // Partial scene stand-ins carry only `layers` and `get`, which is all the gates read.\n const gates = nodeGates(scene as never);\n const enumerable = typeof scene.overrides?.ids === 'function';\n // Pick candidates carry a plain string id; the scene answers them all the same.\n const asShown = <N extends { id: string; data?: unknown }>(node: N): N =>\n (scene.overrides ? nodeAsShown(scene.overrides, node as N & { id: NodeId }) : node);\n const allAsShown = <N extends { id: string; data?: unknown }>(nodes: readonly N[]): readonly N[] =>\n (enumerable ? nodesAsShown(scene.overrides, nodes as readonly (N & { id: NodeId })[]) : nodes.map(asShown));\n const annotations = annotationLayerIds(scene.layers);\n const { getPose, alphaOf, layerIsPainted } = opts;\n\n // Resolved once per walk rather than once per candidate. Needs enumeration — a\n // partial scene stand-in carrying only `read` falls back to reading per node.\n let faded: Set<string> | null = null;\n if (!alphaOf && enumerable) {\n for (const id of scene.overrides.ids()) {\n const a = scene.overrides.read(id)?.alpha;\n if (a !== undefined && a <= 0) (faded ??= new Set()).add(id);\n }\n }\n const readAlpha = alphaOf\n ?? (enumerable\n ? (faded ? (id: string) => (faded.has(id) ? 0 : 1) : undefined)\n : (id: string) => scene.overrides.read(asNodeId(id))?.alpha ?? 1);\n\n // A composing strategy makes a node's own pose local, so picking folds the\n // parent chain the same way the render walk does: one definition of both.\n const paintedPoseOf = scenePaintedPoseOf(scene);\n const poseOf = getPose\n ? (node: PickCandidate<TPose>) => getPose(node.id)\n : (node: PickCandidate<TPose>) => paintedPoseOf(node as never);\n\n // Through `poseOf`, not the document pose: a derived node has to be tested\n // where the renderer draws its dependencies, which is what an override says.\n const childrenOf = (id: NodeId): readonly NodeId[] => scene.childrenOf(id);\n const depOf = (id: NodeId): DerivedDep<TPose> | undefined => {\n const stored = scene.get(id);\n if (stored === undefined) return undefined;\n const dep = asShown(stored);\n return {\n node: dep as Node<unknown, string, TPose>,\n pose: poseOf(dep as never),\n get path(): Path | null {\n return resolveDerivedPath(dep as never, depOf, childrenOf);\n },\n };\n };\n\n const derivedPathOf = getPose\n ? (node: PickCandidate<TPose>): Path | null => {\n const n = node as unknown as Node<TData, TLayer, TPose>;\n return n.dependsOn === undefined ? null : resolveDerivedPath(n, depOf, childrenOf);\n }\n : sceneShownPathOf(scene);\n\n const planeOf = opts.camera ? scenePlaneOf(scene.layers, opts.camera) : null;\n\n // The index boxes nodes at the scene's painted poses; a custom `getPose` must be shown to agree first.\n // A partial stand-in has no versions for it to key on.\n const index = getPose || typeof scene.getVersion !== 'function' ? undefined : opts.index;\n return {\n ...(planeOf ? { planeOf } : {}),\n ...(index ? {\n candidates: (broadFor: (layer: string | undefined) => PickBroad | null | undefined) => {\n const found = indexedCandidates(scene as never, index.descriptor, broadFor) as readonly PickCandidate<TPose>[] | null;\n return found === null ? null : allAsShown(found);\n },\n } : {}),\n order: () => allAsShown(scene.renderOrderNodes() as unknown as readonly PickCandidate<TPose>[]),\n derivedPathOf,\n poseOf,\n parentsOf: sceneParentsOf(scene),\n // Absent entirely when nothing is faded, so the walk skips the gate.\n ...(readAlpha ? { alphaOf: readAlpha } : {}),\n isLocked: (node: PickCandidate<TPose>) => gates.locked(node as GatedNode),\n isHidden: (node: PickCandidate<TPose>) => gates.hidden(node as GatedNode),\n ...(annotations.size > 0 || layerIsPainted\n ? {\n layerIsPainted: (layer: string) =>\n !annotations.has(layer) && (layerIsPainted === undefined || layerIsPainted(layer)),\n }\n : {}),\n };\n}\n\n/** Each parallax layer's plane map under `camera`, or null when no layer is a\n * plane — which keeps the per-layer lookup off the walk entirely. */\nexport function scenePlaneOf(\n layers: readonly { id: string; parallax?: ParallaxOpts }[] | undefined,\n camera: View,\n): ((layer: string) => PlaneMap | null) | null {\n let maps: Map<string, PlaneMap> | null = null;\n for (const l of layers ?? []) {\n if (l.parallax) (maps ??= new Map()).set(l.id, planeMap(camera, l.parallax));\n }\n if (maps === null) return null;\n const found = maps;\n return (layer) => found.get(layer) ?? null;\n}\n"],"mappings":";;;;;;;;;;;AAqCA,SAAgB,gBACd,OACA,OAAsC,CAAC,GACpB;CAEnB,MAAM,QAAQ,UAAU,KAAc;CACtC,MAAM,aAAa,OAAO,MAAM,WAAW,QAAQ;CAEnD,MAAM,WAAqD,SACxD,MAAM,YAAY,YAAY,MAAM,WAAW,IAA0B,IAAI;CAChF,MAAM,cAAwD,UAC3D,aAAa,aAAa,MAAM,WAAW,KAAwC,IAAI,MAAM,IAAI,OAAO;CAC3G,MAAM,cAAc,mBAAmB,MAAM,MAAM;CACnD,MAAM,EAAE,SAAS,SAAS,mBAAmB;CAI7C,IAAI,QAA4B;CAChC,IAAI,CAAC,WAAW,YACd,KAAK,MAAM,MAAM,MAAM,UAAU,IAAI,GAAG;EACtC,MAAM,IAAI,MAAM,UAAU,KAAK,EAAE,CAAC,EAAE;EACpC,IAAI,MAAM,UAAa,KAAK,GAAG,CAAC,0BAAU,IAAI,IAAI,EAAA,CAAG,IAAI,EAAE;CAC7D;CAEF,MAAM,YAAY,YACZ,aACC,SAAS,OAAgB,MAAM,IAAI,EAAE,IAAI,IAAI,IAAK,UAClD,OAAe,MAAM,UAAU,KAAK,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS;CAInE,MAAM,gBAAgB,mBAAmB,KAAK;CAC9C,MAAM,SAAS,WACV,SAA+B,QAAQ,KAAK,EAAE,KAC9C,SAA+B,cAAc,IAAa;CAI/D,MAAM,cAAc,OAAkC,MAAM,WAAW,EAAE;CACzE,MAAM,SAAS,OAA8C;EAC3D,MAAM,SAAS,MAAM,IAAI,EAAE;EAC3B,IAAI,WAAW,QAAW,OAAO;EACjC,MAAM,MAAM,QAAQ,MAAM;EAC1B,OAAO;GACL,MAAM;GACN,MAAM,OAAO,GAAY;GACzB,IAAI,OAAoB;IACtB,OAAO,mBAAmB,KAAc,OAAO,UAAU;GAC3D;EACF;CACF;CAEA,MAAM,gBAAgB,WACjB,SAA4C;EAC7C,MAAM,IAAI;EACV,OAAO,EAAE,cAAc,SAAY,OAAO,mBAAmB,GAAG,OAAO,UAAU;CACnF,IACE,iBAAiB,KAAK;CAE1B,MAAM,UAAU,KAAK,SAAS,aAAa,MAAM,QAAQ,KAAK,MAAM,IAAI;CAIxE,MAAM,QAAQ,WAAW,OAAO,MAAM,eAAe,aAAa,SAAY,KAAK;CACnF,OAAO;EACL,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;EAC7B,GAAI,QAAQ,EACV,aAAa,aAA0E;GACrF,MAAM,QAAQ,kBAAkB,OAAgB,MAAM,YAAY,QAAQ;GAC1E,OAAO,UAAU,OAAO,OAAO,WAAW,KAAK;EACjD,EACF,IAAI,CAAC;EACL,aAAa,WAAW,MAAM,iBAAiB,CAA+C;EAC9F;EACA;EACA,WAAW,eAAe,KAAK;EAE/B,GAAI,YAAY,EAAE,SAAS,UAAU,IAAI,CAAC;EAC1C,WAAW,SAA+B,MAAM,OAAO,IAAiB;EACxE,WAAW,SAA+B,MAAM,OAAO,IAAiB;EACxE,GAAI,YAAY,OAAO,KAAK,iBACxB,EACA,iBAAiB,UACf,CAAC,YAAY,IAAI,KAAK,MAAM,mBAAmB,UAAa,eAAe,KAAK,GACpF,IACE,CAAC;CACP;AACF;;;AAIA,SAAgB,aACd,QACA,QAC6C;CAC7C,IAAI,OAAqC;CACzC,KAAK,MAAM,KAAK,UAAU,CAAC,GACzB,IAAI,EAAE,UAAU,CAAC,yBAAS,IAAI,IAAI,EAAA,CAAG,IAAI,EAAE,IAAI,SAAS,QAAQ,EAAE,QAAQ,CAAC;CAE7E,IAAI,SAAS,MAAM,OAAO;CAC1B,MAAM,QAAQ;CACd,QAAQ,UAAU,MAAM,IAAI,KAAK,KAAK;AACxC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { nodeAsShown, shownLookup } from "../core/scene/nodeAsShown.js";
|
|
2
1
|
import { withInheritedPaintBounds, withInheritedPaints } from "./inheritedPaints.js";
|
|
3
2
|
import { sceneDerivedPathOf, sceneShownToPose, withDerivedPaths } from "./derivedPath.js";
|
|
4
3
|
import { withColorOverrides } from "./colorOverrides.js";
|
|
4
|
+
import { nodeAsShown, shownLookup } from "../core/scene/nodeAsShown.js";
|
|
5
5
|
import { withShownNode } from "./shownNodes.js";
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
// src/canvas/sceneSlotWiring.ts
|
|
8
8
|
/**
|
|
9
9
|
* The alpha a view paints a node at: the view's own `alphaFor` times any
|
|
10
10
|
* ephemeral override alpha.
|
|
@@ -32,6 +32,5 @@ function wireSceneSlotToScene(slot, scene, alphaFor, colorOverrides) {
|
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
//#endregion
|
|
36
35
|
export { composeAlphaFor, wireSceneSlotToScene };
|
|
37
36
|
//# sourceMappingURL=sceneSlotWiring.js.map
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { nodeAsShown, shownLookup } from "../core/scene/nodeAsShown.js";
|
|
2
|
-
import { withInheritedPaintBounds, withInheritedPaints } from "./inheritedPaints.js";
|
|
3
|
-
import { paintedSceneLayers } from "./sceneLayerPaint.js";
|
|
4
1
|
import { paintCanvas, resolveDpr } from "./canvasRenderer.js";
|
|
5
2
|
import { wrapNodeOutput } from "./wrapNodeOutput.js";
|
|
6
|
-
import { sceneDerivedPathOf, withDerivedPaths } from "./derivedPath.js";
|
|
7
3
|
import { buildSceneTree } from "./buildSceneTree.js";
|
|
8
4
|
import { sceneToAdapter } from "./sceneAdapter.js";
|
|
5
|
+
import { withInheritedPaintBounds, withInheritedPaints } from "./inheritedPaints.js";
|
|
6
|
+
import { sceneDerivedPathOf, withDerivedPaths } from "./derivedPath.js";
|
|
9
7
|
import { withColorOverrides } from "./colorOverrides.js";
|
|
8
|
+
import { paintedSceneLayers } from "./sceneLayerPaint.js";
|
|
10
9
|
import { paintMissesView } from "./paintCull.js";
|
|
11
10
|
import { paintBoundsFor } from "./defaultDrawOne.js";
|
|
11
|
+
import { nodeAsShown, shownLookup } from "../core/scene/nodeAsShown.js";
|
|
12
12
|
import { withShownNode } from "./shownNodes.js";
|
|
13
13
|
import { cullDrawCommands } from "@weasel-js/renderer";
|
|
14
14
|
import { viewToMat3 as viewToMat3$1 } from "@weasel-js/geom";
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
// src/canvas/sceneViewRender.ts
|
|
17
17
|
/**
|
|
18
18
|
* Present a `Scene` as the reading surface `buildSceneTree` walks: the scene
|
|
19
19
|
* adapter's own reads, under this view's layer list.
|
|
@@ -104,6 +104,5 @@ function renderSceneToCanvas(args) {
|
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
//#endregion
|
|
108
107
|
export { buildSceneViewCommands, renderSceneToCanvas, sceneViewFrame };
|
|
109
108
|
//# sourceMappingURL=sceneViewRender.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { nodeAsShown } from "../core/scene/nodeAsShown.js";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// src/canvas/shownNodes.ts
|
|
4
4
|
/**
|
|
5
5
|
* The scene walks' half of `PoseOverride.data`: handing painters and cull
|
|
6
6
|
* bounds each node as the scene shows it, through `nodeAsShown`.
|
|
@@ -10,6 +10,5 @@ function withShownNode(overrides, fn) {
|
|
|
10
10
|
return (node, a, b, c) => fn(nodeAsShown(overrides, node), a, b, c);
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
//#endregion
|
|
14
13
|
export { withShownNode };
|
|
15
14
|
//# sourceMappingURL=shownNodes.js.map
|
|
@@ -2,7 +2,7 @@ import { pointRegionLive, pointRegionScreenQuad, transformOf } from "../affordan
|
|
|
2
2
|
import { chromeStateFrom, isVisibleFrom } from "./drawEnvelope.js";
|
|
3
3
|
import { PATH_L, PATH_M, PATH_Z } from "@weasel-js/geom";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// src/canvas/slopsDebugLayer.ts
|
|
6
6
|
var SLOP_FILL = "rgba(255, 80, 140, 0.18)";
|
|
7
7
|
var SLOP_STROKE = "rgba(255, 80, 140, 0.55)";
|
|
8
8
|
function createSlopsDebugLayer(opts) {
|
|
@@ -65,6 +65,5 @@ function createSlopsDebugLayer(opts) {
|
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
//#endregion
|
|
69
68
|
export { createSlopsDebugLayer };
|
|
70
69
|
//# sourceMappingURL=slopsDebugLayer.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { mergeContributions } from "@weasel-js/routing";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// src/canvas/surfaceContribution.ts
|
|
4
4
|
/**
|
|
5
5
|
* The canvas's unit of extension: a routing `Contribution` plus the roles only
|
|
6
6
|
* a surface can install — views on it, and whatever else needs the mounted
|
|
@@ -26,6 +26,5 @@ function claimIds(entries, kind, of) {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
//#endregion
|
|
30
29
|
export { mergeContributions$1 as mergeContributions };
|
|
31
30
|
//# sourceMappingURL=surfaceContribution.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useCallback, useInsertionEffect, useRef } from "react";
|
|
2
2
|
import { useLatest } from "@weasel-js/react";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/canvas/useCanvasElements.ts
|
|
5
5
|
function useCanvasElements(paintInto, inputElement) {
|
|
6
6
|
const canvasRef = useRef(null);
|
|
7
7
|
const ownCanvasRef = useRef(null);
|
|
@@ -26,6 +26,5 @@ function useCanvasElements(paintInto, inputElement) {
|
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
//#endregion
|
|
30
29
|
export { useCanvasElements };
|
|
31
30
|
//# sourceMappingURL=useCanvasElements.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useImperativeHandle } from "react";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// src/canvas/useCanvasHandle.ts
|
|
4
4
|
/** The bare canvas's imperative handle. Its own-frame members answer against `frame`. */
|
|
5
5
|
function useCanvasHandle(ref, target, frame, api) {
|
|
6
6
|
const { canvasRef, ownCanvasRef, detached, paintRectRef, inputElement, paintCanvas } = target;
|
|
@@ -64,6 +64,5 @@ function useCanvasHandle(ref, target, frame, api) {
|
|
|
64
64
|
]);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
//#endregion
|
|
68
67
|
export { useCanvasHandle };
|
|
69
68
|
//# sourceMappingURL=useCanvasHandle.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { DEFAULT_LAYER_RETAIN } from "../core/layers/retain.js";
|
|
2
2
|
import { drawLayers } from "../core/layers/render.js";
|
|
3
|
-
import { resolveDpr } from "./canvasRenderer.js";
|
|
4
3
|
import { beginDebugFrame } from "../debug/useDebugSink.js";
|
|
4
|
+
import { resolveDpr } from "./canvasRenderer.js";
|
|
5
5
|
import { NO_LAYER_VISIBILITY } from "./useExtraLayers.js";
|
|
6
6
|
import { ViewSnap } from "./viewSnap.js";
|
|
7
7
|
import { viewToMat3 } from "@weasel-js/renderer";
|
|
8
8
|
import { useCallback, useEffect, useInsertionEffect, useRef } from "react";
|
|
9
9
|
import { useLatest } from "@weasel-js/react";
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
// src/canvas/useCanvasPaint.ts
|
|
12
12
|
/**
|
|
13
13
|
* Which content version the last paint showed. `markPainted` records the current one, read
|
|
14
14
|
* from `contentVersion`'s latest committed value.
|
|
@@ -95,6 +95,5 @@ function useCanvasPaint(paintRef, lease, target, frame, markPainted, requestRedr
|
|
|
95
95
|
}, []);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
//#endregion
|
|
99
98
|
export { useCanvasPaint, usePaintedVersion };
|
|
100
99
|
//# sourceMappingURL=useCanvasPaint.js.map
|
|
@@ -3,7 +3,7 @@ import { leaseCanvasRenderer, shaderKeyOf } from "./canvasRenderer.js";
|
|
|
3
3
|
import { getProgramSource, programSourceRegistry } from "@weasel-js/renderer";
|
|
4
4
|
import { useEffect, useState } from "react";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
// src/canvas/useCanvasRenderer.ts
|
|
7
7
|
/**
|
|
8
8
|
* The React lifetime of `leaseCanvasRenderer`: a stable lease for the
|
|
9
9
|
* component's canvas, whose renderer and GL objects are freed on unmount.
|
|
@@ -48,6 +48,5 @@ function useRedrawOnShaderSource(shaders, requestRedraw) {
|
|
|
48
48
|
}, [key, requestRedraw]);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
//#endregion
|
|
52
51
|
export { useCanvasRenderer, useRedrawOnDensityChange, useRedrawOnRestore, useRedrawOnShaderSource };
|
|
53
52
|
//# sourceMappingURL=useCanvasRenderer.js.map
|
|
@@ -4,7 +4,7 @@ import { useLateContentRedraw } from "./useLateContentRedraw.js";
|
|
|
4
4
|
import { useRedrawOn } from "./useRedrawOn.js";
|
|
5
5
|
import { useEffect, useLayoutEffect, useRef } from "react";
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
// src/canvas/useCanvasSurface.ts
|
|
8
8
|
/**
|
|
9
9
|
* Everything a canvas surface in core needs around its paint: the renderer
|
|
10
10
|
* lease, the frame loop, and a repaint for each thing that changes pixels with
|
|
@@ -22,16 +22,34 @@ function useCanvasSurface(paint, options = {}) {
|
|
|
22
22
|
useLateContentRedraw(requestRedraw);
|
|
23
23
|
useRedrawOnShaderSource(options.shaders, requestRedraw);
|
|
24
24
|
useRedrawOn(options.redrawOn, requestRedraw);
|
|
25
|
-
|
|
25
|
+
const resized = usePaintOnResize(options.size, loop.paintNow);
|
|
26
|
+
useRedrawOnCommit(options.onCommit, () => paint(lease), requestRedraw, resized);
|
|
26
27
|
return {
|
|
27
28
|
...loop,
|
|
28
29
|
lease
|
|
29
30
|
};
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
+
/** Paints a commit that resized the surface in place. Returns whether this commit did. */
|
|
33
|
+
function usePaintOnResize(size, paintNow) {
|
|
34
|
+
const last = useRef(null);
|
|
35
|
+
const resized = useRef(false);
|
|
36
|
+
const width = size?.width ?? 0;
|
|
37
|
+
const height = size?.height ?? 0;
|
|
38
|
+
useLayoutEffect(() => {
|
|
39
|
+
const was = last.current;
|
|
40
|
+
last.current = {
|
|
41
|
+
width,
|
|
42
|
+
height
|
|
43
|
+
};
|
|
44
|
+
resized.current = was !== null && (was.width !== width || was.height !== height);
|
|
45
|
+
if (resized.current) paintNow();
|
|
46
|
+
});
|
|
47
|
+
return resized;
|
|
48
|
+
}
|
|
49
|
+
function useRedrawOnCommit(mode, paintNow, requestRedraw, resized) {
|
|
32
50
|
const paintedRef = useRef(false);
|
|
33
51
|
useLayoutEffect(() => {
|
|
34
|
-
if (!mode) return;
|
|
52
|
+
if (!mode || resized.current) return;
|
|
35
53
|
if (mode === "redraw" || paintedRef.current) {
|
|
36
54
|
requestRedraw();
|
|
37
55
|
return;
|
|
@@ -44,6 +62,5 @@ function useRedrawOnCommit(mode, paintNow, requestRedraw) {
|
|
|
44
62
|
}, []);
|
|
45
63
|
}
|
|
46
64
|
|
|
47
|
-
//#endregion
|
|
48
65
|
export { useCanvasSurface };
|
|
49
66
|
//# sourceMappingURL=useCanvasSurface.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCanvasSurface.js","names":[],"sources":["../../src/canvas/useCanvasSurface.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef } from 'react';\nimport type { ShaderProgramHandle } from '@weasel-js/renderer';\nimport type { RedrawSource } from '../core/layers/render';\nimport type { CanvasRendererLease } from './canvasRenderer';\nimport {\n useCanvasRenderer, useRedrawOnDensityChange, useRedrawOnRestore, useRedrawOnShaderSource,\n} from './useCanvasRenderer';\nimport { useFrameLoop, type FrameLoop, type FrameLoopOptions } from './useFrameLoop';\nimport { useLateContentRedraw } from './useLateContentRedraw';\nimport { useRedrawOn } from './useRedrawOn';\n\n/** What a surface tells {@link useCanvasSurface} about itself, beyond its paint. */\nexport interface CanvasSurfaceOptions extends FrameLoopOptions {\n /** The surface's own density. Omit to follow `devicePixelRatio`. */\n dpr?: number;\n /** External state the paint reads; each source repaints when it notifies. */\n redrawOn?: readonly RedrawSource[];\n /** Custom programs the paint draws with; new source for one repaints. */\n shaders?: readonly ShaderProgramHandle[];\n /** Mark the surface dirty on every committed render, so a surface whose\n * paint reads its props cannot paint them stale. `'paint'` also paints the\n * first commit in place, in the caller's stack, so the first frame shown is\n * the content and not a blank canvas. */\n onCommit?: 'redraw' | 'paint';\n}\n\n/** A surface's frame loop and the renderer lease its paint draws through. */\nexport interface CanvasSurface extends FrameLoop {\n lease: CanvasRendererLease;\n}\n\n/**\n * Everything a canvas surface in core needs around its paint: the renderer\n * lease, the frame loop, and a repaint for each thing that changes pixels with\n * no React render behind it — a restored GL context, a density change, late\n * content, a re-registered shader, and the caller's own `redrawOn` sources.\n *\n * @param paint As `useFrameLoop`'s, handed the lease to draw through.\n */\nexport function useCanvasSurface(\n paint: (lease: CanvasRendererLease) => boolean,\n options: CanvasSurfaceOptions = {},\n): CanvasSurface {\n const lease = useCanvasRenderer();\n const loop = useFrameLoop(() => paint(lease), options);\n const { requestRedraw } = loop;\n useRedrawOnRestore(lease, requestRedraw);\n useRedrawOnDensityChange(requestRedraw, options.dpr);\n useLateContentRedraw(requestRedraw);\n useRedrawOnShaderSource(options.shaders, requestRedraw);\n useRedrawOn(options.redrawOn, requestRedraw);\n useRedrawOnCommit(options.onCommit, () => paint(lease), requestRedraw);\n return { ...loop, lease };\n}\n\nfunction useRedrawOnCommit(\n mode: CanvasSurfaceOptions['onCommit'],\n paintNow: () => boolean,\n requestRedraw: () => void,\n): void {\n const paintedRef = useRef(false);\n // No dependency array: the paint reads whatever the render did.\n useLayoutEffect(() => {\n if (!mode) return;\n if (mode === 'redraw' || paintedRef.current) { requestRedraw(); return; }\n paintedRef.current = paintNow();\n if (!paintedRef.current) requestRedraw();\n });\n // The renderer is freed on unmount; a remount (StrictMode) paints its first\n // frame in place again.\n useEffect(() => () => { paintedRef.current = false; }, []);\n}\n"],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useCanvasSurface.js","names":[],"sources":["../../src/canvas/useCanvasSurface.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef } from 'react';\nimport type { ShaderProgramHandle } from '@weasel-js/renderer';\nimport type { RedrawSource } from '../core/layers/render';\nimport type { CanvasRendererLease } from './canvasRenderer';\nimport {\n useCanvasRenderer, useRedrawOnDensityChange, useRedrawOnRestore, useRedrawOnShaderSource,\n} from './useCanvasRenderer';\nimport { useFrameLoop, type FrameLoop, type FrameLoopOptions } from './useFrameLoop';\nimport { useLateContentRedraw } from './useLateContentRedraw';\nimport { useRedrawOn } from './useRedrawOn';\n\n/** What a surface tells {@link useCanvasSurface} about itself, beyond its paint. */\nexport interface CanvasSurfaceOptions extends FrameLoopOptions {\n /** The surface's own density. Omit to follow `devicePixelRatio`. */\n dpr?: number;\n /** External state the paint reads; each source repaints when it notifies. */\n redrawOn?: readonly RedrawSource[];\n /** Custom programs the paint draws with; new source for one repaints. */\n shaders?: readonly ShaderProgramHandle[];\n /** Mark the surface dirty on every committed render, so a surface whose\n * paint reads its props cannot paint them stale. `'paint'` also paints the\n * first commit in place, in the caller's stack, so the first frame shown is\n * the content and not a blank canvas. */\n onCommit?: 'redraw' | 'paint';\n /** The size the surface paints at. A commit that changes it paints in place: React has written the element's\n * new size, which clears its buffer, and a resize committed from a `ResizeObserver` callback has no frame\n * left before the browser paints. */\n size?: { width: number; height: number };\n}\n\n/** A surface's frame loop and the renderer lease its paint draws through. */\nexport interface CanvasSurface extends FrameLoop {\n lease: CanvasRendererLease;\n}\n\n/**\n * Everything a canvas surface in core needs around its paint: the renderer\n * lease, the frame loop, and a repaint for each thing that changes pixels with\n * no React render behind it — a restored GL context, a density change, late\n * content, a re-registered shader, and the caller's own `redrawOn` sources.\n *\n * @param paint As `useFrameLoop`'s, handed the lease to draw through.\n */\nexport function useCanvasSurface(\n paint: (lease: CanvasRendererLease) => boolean,\n options: CanvasSurfaceOptions = {},\n): CanvasSurface {\n const lease = useCanvasRenderer();\n const loop = useFrameLoop(() => paint(lease), options);\n const { requestRedraw } = loop;\n useRedrawOnRestore(lease, requestRedraw);\n useRedrawOnDensityChange(requestRedraw, options.dpr);\n useLateContentRedraw(requestRedraw);\n useRedrawOnShaderSource(options.shaders, requestRedraw);\n useRedrawOn(options.redrawOn, requestRedraw);\n const resized = usePaintOnResize(options.size, loop.paintNow);\n useRedrawOnCommit(options.onCommit, () => paint(lease), requestRedraw, resized);\n return { ...loop, lease };\n}\n\n/** Paints a commit that resized the surface in place. Returns whether this commit did. */\nfunction usePaintOnResize(size: CanvasSurfaceOptions['size'], paintNow: () => void): { readonly current: boolean } {\n const last = useRef<{ width: number; height: number } | null>(null);\n const resized = useRef(false);\n const width = size?.width ?? 0;\n const height = size?.height ?? 0;\n useLayoutEffect(() => {\n const was = last.current;\n last.current = { width, height };\n resized.current = was !== null && (was.width !== width || was.height !== height);\n if (resized.current) paintNow();\n });\n return resized;\n}\n\nfunction useRedrawOnCommit(\n mode: CanvasSurfaceOptions['onCommit'],\n paintNow: () => boolean,\n requestRedraw: () => void,\n resized: { readonly current: boolean },\n): void {\n const paintedRef = useRef(false);\n // No dependency array: the paint reads whatever the render did.\n useLayoutEffect(() => {\n if (!mode || resized.current) return;\n if (mode === 'redraw' || paintedRef.current) { requestRedraw(); return; }\n paintedRef.current = paintNow();\n if (!paintedRef.current) requestRedraw();\n });\n // The renderer is freed on unmount; a remount (StrictMode) paints its first\n // frame in place again.\n useEffect(() => () => { paintedRef.current = false; }, []);\n}\n"],"mappings":";;;;;;;;;;;;;;;AA2CA,SAAgB,iBACd,OACA,UAAgC,CAAC,GAClB;CACf,MAAM,QAAQ,kBAAkB;CAChC,MAAM,OAAO,mBAAmB,MAAM,KAAK,GAAG,OAAO;CACrD,MAAM,EAAE,kBAAkB;CAC1B,mBAAmB,OAAO,aAAa;CACvC,yBAAyB,eAAe,QAAQ,GAAG;CACnD,qBAAqB,aAAa;CAClC,wBAAwB,QAAQ,SAAS,aAAa;CACtD,YAAY,QAAQ,UAAU,aAAa;CAC3C,MAAM,UAAU,iBAAiB,QAAQ,MAAM,KAAK,QAAQ;CAC5D,kBAAkB,QAAQ,gBAAgB,MAAM,KAAK,GAAG,eAAe,OAAO;CAC9E,OAAO;EAAE,GAAG;EAAM;CAAM;AAC1B;;AAGA,SAAS,iBAAiB,MAAoC,UAAqD;CACjH,MAAM,OAAO,OAAiD,IAAI;CAClE,MAAM,UAAU,OAAO,KAAK;CAC5B,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,SAAS,MAAM,UAAU;CAC/B,sBAAsB;EACpB,MAAM,MAAM,KAAK;EACjB,KAAK,UAAU;GAAE;GAAO;EAAO;EAC/B,QAAQ,UAAU,QAAQ,SAAS,IAAI,UAAU,SAAS,IAAI,WAAW;EACzE,IAAI,QAAQ,SAAS,SAAS;CAChC,CAAC;CACD,OAAO;AACT;AAEA,SAAS,kBACP,MACA,UACA,eACA,SACM;CACN,MAAM,aAAa,OAAO,KAAK;CAE/B,sBAAsB;EACpB,IAAI,CAAC,QAAQ,QAAQ,SAAS;EAC9B,IAAI,SAAS,YAAY,WAAW,SAAS;GAAE,cAAc;GAAG;EAAQ;EACxE,WAAW,UAAU,SAAS;EAC9B,IAAI,CAAC,WAAW,SAAS,cAAc;CACzC,CAAC;CAGD,sBAAsB;EAAE,WAAW,UAAU;CAAO,GAAG,CAAC,CAAC;AAC3D"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { normalizeView, sameView } from "../core/viewport/view.js";
|
|
2
1
|
import { clampView } from "../core/viewport/clampView.js";
|
|
2
|
+
import { normalizeView, sameView } from "../core/viewport/view.js";
|
|
3
3
|
import { useCallback, useRef } from "react";
|
|
4
4
|
import { useLatest } from "@weasel-js/react";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
// src/canvas/useCanvasView.ts
|
|
7
7
|
/**
|
|
8
8
|
* A camera: held in a ref when uncontrolled, taken from the `view` option when
|
|
9
9
|
* controlled, with one write path and one subscriber list over both.
|
|
@@ -94,6 +94,5 @@ function useCanvasView(opts) {
|
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
//#endregion
|
|
98
97
|
export { useCanvasView };
|
|
99
98
|
//# sourceMappingURL=useCanvasView.js.map
|
|
@@ -2,7 +2,7 @@ import { clientToWorld } from "../core/viewport/clientToWorld.js";
|
|
|
2
2
|
import { useCallback } from "react";
|
|
3
3
|
import { useLatest } from "@weasel-js/react";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// src/canvas/useClientToWorld.ts
|
|
6
6
|
/**
|
|
7
7
|
* The canvas's one client→world conversion: hover, the view registry and both handles answer
|
|
8
8
|
* with it, so a `clientToWorld` override reaches all of them or none.
|
|
@@ -22,6 +22,5 @@ function useClientToWorld(elementRef, clientToWorld$1, viewRef) {
|
|
|
22
22
|
]);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
//#endregion
|
|
26
25
|
export { useClientToWorld };
|
|
27
26
|
//# sourceMappingURL=useClientToWorld.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isLayerPainted } from "../core/layers/render.js";
|
|
2
2
|
import { useCallback, useRef, useState } from "react";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/canvas/useExtraLayers.ts
|
|
5
5
|
var alwaysVisible = (_id) => true;
|
|
6
6
|
var NO_LAYER_VISIBILITY = {};
|
|
7
7
|
/** Layers attached from outside the `layers` prop (a HUD, a loupe), and hit-testing over them. */
|
|
@@ -40,6 +40,5 @@ function useExtraLayers(gateRef) {
|
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
//#endregion
|
|
44
43
|
export { NO_LAYER_VISIBILITY, alwaysVisible, useExtraLayers };
|
|
45
44
|
//# sourceMappingURL=useExtraLayers.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useCallback, useInsertionEffect, useLayoutEffect, useRef } from "react";
|
|
2
2
|
import { useLatest, useVisibleRaf } from "@weasel-js/react";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/canvas/useFrameLoop.ts
|
|
5
5
|
/**
|
|
6
6
|
* The frame loop behind `<Canvas>`: a dirty flag, one frame in flight at a
|
|
7
7
|
* time, and a subscriber set notified after a paint lands. When frames may run
|
|
@@ -73,18 +73,16 @@ function useFrameLoop(paint, options = {}) {
|
|
|
73
73
|
frame.request();
|
|
74
74
|
};
|
|
75
75
|
});
|
|
76
|
-
const
|
|
76
|
+
const redraw = useCallback((inPlace) => {
|
|
77
77
|
dirtyRef.current = true;
|
|
78
|
-
if (
|
|
78
|
+
if (inPlace && aliveRef.current && !paintingRef.current && frame.isVisible()) {
|
|
79
79
|
runPaint(performance.now());
|
|
80
80
|
return;
|
|
81
81
|
}
|
|
82
82
|
frame.request();
|
|
83
|
-
}, [
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
syncRef
|
|
87
|
-
]);
|
|
83
|
+
}, [frame, runPaint]);
|
|
84
|
+
const requestRedraw = useCallback(() => redraw(syncRef.current), [redraw, syncRef]);
|
|
85
|
+
const paintNow = useCallback(() => redraw(true), [redraw]);
|
|
88
86
|
const subscribeFrame = useCallback((fn) => {
|
|
89
87
|
subsRef.current.add(fn);
|
|
90
88
|
return () => {
|
|
@@ -117,12 +115,12 @@ function useFrameLoop(paint, options = {}) {
|
|
|
117
115
|
}, []);
|
|
118
116
|
return {
|
|
119
117
|
requestRedraw,
|
|
118
|
+
paintNow,
|
|
120
119
|
subscribeFrame,
|
|
121
120
|
subscribeBeforePaint,
|
|
122
121
|
subscribeResume
|
|
123
122
|
};
|
|
124
123
|
}
|
|
125
124
|
|
|
126
|
-
//#endregion
|
|
127
125
|
export { useFrameLoop };
|
|
128
126
|
//# sourceMappingURL=useFrameLoop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFrameLoop.js","names":[],"sources":["../../src/canvas/useFrameLoop.ts"],"sourcesContent":["/**\n * The frame loop behind `<Canvas>`: a dirty flag, one frame in flight at a\n * time, and a subscriber set notified after a paint lands. When frames may run\n * at all is `useVisibleRaf`'s question, not this hook's — a redraw requested\n * while nothing can see the surface is held there and re-armed on resume.\n *\n * @internal Not consumer surface. Canvas exposes `requestRedraw` and\n * `subscribeFrame` on its ref handle; this is how they are implemented.\n */\n\nimport { useCallback, useInsertionEffect, useLayoutEffect, useRef } from 'react';\nimport { useLatest, useVisibleRaf, type VisibleRafTarget } from '@weasel-js/react';\n\nexport interface FrameLoop {\n /** Mark the surface dirty and schedule a frame. Identity is stable for the\n * lifetime of the component — consumers capture it. */\n requestRedraw(): void;\n /** Run `fn` after every landed paint, with the frame's time. Returns an\n * unsubscribe. */\n subscribeFrame(fn: (time: number) => void): () => void;\n /** Run `fn` on every frame just before its paint, with the frame's time.\n * Returns an unsubscribe. */\n subscribeBeforePaint(fn: (time: number) => void): () => void;\n /** Run `fn` when the loop leaves suspension, before the frame that follows.\n * Returns an unsubscribe. */\n subscribeResume(fn: () => void): () => void;\n}\n\nexport interface FrameLoopOptions {\n /** Paint in the caller's own stack — the commit or event that asked for the\n * redraw — instead of on the next animation frame. Read live, so toggling\n * it takes effect from the next `requestRedraw` on. */\n syncPaint?: boolean;\n /** The surface being painted. Given one, the loop also stops while that\n * element sits outside the viewport, not only while the tab is hidden. */\n target?: VisibleRafTarget;\n}\n\n/**\n * @param paint Runs on the frame; returns whether pixels landed. A `false`\n * leaves the surface dirty and notifies nobody, so the next request retries.\n */\nexport function useFrameLoop(paint: () => boolean, options: FrameLoopOptions = {}): FrameLoop {\n const dirtyRef = useRef(true);\n const aliveRef = useRef(true);\n const paintingRef = useRef(false);\n const paintRef = useLatest(paint);\n const syncRef = useLatest(options.syncPaint ?? false);\n const subsRef = useRef<Set<(time: number) => void>>(new Set());\n const beforeRef = useRef<Set<(time: number) => void>>(new Set());\n const resumeRef = useRef<Set<() => void>>(new Set());\n /** The last time handed to subscribers. A sync paint reads the clock at the\n * call and a rAF frame carries its frame's start, so within one animation\n * frame the second can be the earlier of the two. */\n const lastTimeRef = useRef(-Infinity);\n\n /** Set while recovering from a paint that threw, so one bad frame is retried\n * and a permanently throwing one still doesn't spin at frame rate. */\n const retriedRef = useRef(false);\n /** `frame.request`, which doesn't exist until after `runPaint` is built. */\n const rearmRef = useRef<(() => void) | null>(null);\n\n const runPaint = useCallback((at: number) => {\n const time = Math.max(at, lastTimeRef.current);\n lastTimeRef.current = time;\n dirtyRef.current = false;\n paintingRef.current = true;\n let landed = false;\n try {\n for (const fn of beforeRef.current) fn(time);\n landed = paintRef.current();\n if (!landed) {\n dirtyRef.current = true;\n return;\n }\n retriedRef.current = false;\n // Notified inside the guard: a subscriber calling `requestRedraw` under\n // `syncPaint` would otherwise re-enter this synchronously, without bound.\n for (const fn of subsRef.current) fn(time);\n } catch (err) {\n // A throw skips the `!landed` branch above, so without this the surface\n // is left clean but unpainted — the pixels on screen are whatever the\n // last landed frame left, and nothing repaints until something\n // unrelated happens to request a redraw. That is how a single\n // malformed node blanked a whole document until the pointer moved.\n dirtyRef.current = true;\n if (!retriedRef.current) {\n retriedRef.current = true;\n rearmRef.current?.();\n }\n throw err;\n } finally {\n paintingRef.current = false;\n }\n }, [paintRef]);\n\n const frame = useVisibleRaf(\n useCallback((time: number) => {\n if (!aliveRef.current || !dirtyRef.current) return;\n runPaint(time);\n }, [runPaint]),\n {\n target: options.target,\n onResume: useCallback(() => { for (const fn of resumeRef.current) fn(); }, []),\n },\n );\n useInsertionEffect(() => {\n rearmRef.current = () => { frame.request(); };\n });\n\n const
|
|
1
|
+
{"version":3,"file":"useFrameLoop.js","names":[],"sources":["../../src/canvas/useFrameLoop.ts"],"sourcesContent":["/**\n * The frame loop behind `<Canvas>`: a dirty flag, one frame in flight at a\n * time, and a subscriber set notified after a paint lands. When frames may run\n * at all is `useVisibleRaf`'s question, not this hook's — a redraw requested\n * while nothing can see the surface is held there and re-armed on resume.\n *\n * @internal Not consumer surface. Canvas exposes `requestRedraw` and\n * `subscribeFrame` on its ref handle; this is how they are implemented.\n */\n\nimport { useCallback, useInsertionEffect, useLayoutEffect, useRef } from 'react';\nimport { useLatest, useVisibleRaf, type VisibleRafTarget } from '@weasel-js/react';\n\nexport interface FrameLoop {\n /** Mark the surface dirty and schedule a frame. Identity is stable for the\n * lifetime of the component — consumers capture it. */\n requestRedraw(): void;\n /** `requestRedraw`, painting in the caller's stack as `syncPaint` does whatever that is set to. */\n paintNow(): void;\n /** Run `fn` after every landed paint, with the frame's time. Returns an\n * unsubscribe. */\n subscribeFrame(fn: (time: number) => void): () => void;\n /** Run `fn` on every frame just before its paint, with the frame's time.\n * Returns an unsubscribe. */\n subscribeBeforePaint(fn: (time: number) => void): () => void;\n /** Run `fn` when the loop leaves suspension, before the frame that follows.\n * Returns an unsubscribe. */\n subscribeResume(fn: () => void): () => void;\n}\n\nexport interface FrameLoopOptions {\n /** Paint in the caller's own stack — the commit or event that asked for the\n * redraw — instead of on the next animation frame. Read live, so toggling\n * it takes effect from the next `requestRedraw` on. */\n syncPaint?: boolean;\n /** The surface being painted. Given one, the loop also stops while that\n * element sits outside the viewport, not only while the tab is hidden. */\n target?: VisibleRafTarget;\n}\n\n/**\n * @param paint Runs on the frame; returns whether pixels landed. A `false`\n * leaves the surface dirty and notifies nobody, so the next request retries.\n */\nexport function useFrameLoop(paint: () => boolean, options: FrameLoopOptions = {}): FrameLoop {\n const dirtyRef = useRef(true);\n const aliveRef = useRef(true);\n const paintingRef = useRef(false);\n const paintRef = useLatest(paint);\n const syncRef = useLatest(options.syncPaint ?? false);\n const subsRef = useRef<Set<(time: number) => void>>(new Set());\n const beforeRef = useRef<Set<(time: number) => void>>(new Set());\n const resumeRef = useRef<Set<() => void>>(new Set());\n /** The last time handed to subscribers. A sync paint reads the clock at the\n * call and a rAF frame carries its frame's start, so within one animation\n * frame the second can be the earlier of the two. */\n const lastTimeRef = useRef(-Infinity);\n\n /** Set while recovering from a paint that threw, so one bad frame is retried\n * and a permanently throwing one still doesn't spin at frame rate. */\n const retriedRef = useRef(false);\n /** `frame.request`, which doesn't exist until after `runPaint` is built. */\n const rearmRef = useRef<(() => void) | null>(null);\n\n const runPaint = useCallback((at: number) => {\n const time = Math.max(at, lastTimeRef.current);\n lastTimeRef.current = time;\n dirtyRef.current = false;\n paintingRef.current = true;\n let landed = false;\n try {\n for (const fn of beforeRef.current) fn(time);\n landed = paintRef.current();\n if (!landed) {\n dirtyRef.current = true;\n return;\n }\n retriedRef.current = false;\n // Notified inside the guard: a subscriber calling `requestRedraw` under\n // `syncPaint` would otherwise re-enter this synchronously, without bound.\n for (const fn of subsRef.current) fn(time);\n } catch (err) {\n // A throw skips the `!landed` branch above, so without this the surface\n // is left clean but unpainted — the pixels on screen are whatever the\n // last landed frame left, and nothing repaints until something\n // unrelated happens to request a redraw. That is how a single\n // malformed node blanked a whole document until the pointer moved.\n dirtyRef.current = true;\n if (!retriedRef.current) {\n retriedRef.current = true;\n rearmRef.current?.();\n }\n throw err;\n } finally {\n paintingRef.current = false;\n }\n }, [paintRef]);\n\n const frame = useVisibleRaf(\n useCallback((time: number) => {\n if (!aliveRef.current || !dirtyRef.current) return;\n runPaint(time);\n }, [runPaint]),\n {\n target: options.target,\n onResume: useCallback(() => { for (const fn of resumeRef.current) fn(); }, []),\n },\n );\n useInsertionEffect(() => {\n rearmRef.current = () => { frame.request(); };\n });\n\n const redraw = useCallback((inPlace: boolean) => {\n dirtyRef.current = true;\n // The gate suppresses the sync path too: a background tab still commits\n // React updates, and that is the one paint browser throttling does not stop.\n // A request made from inside a draw or a frame subscriber would recurse\n // forever if it painted here, so re-entrant ones fall through to a frame.\n if (inPlace && aliveRef.current && !paintingRef.current && frame.isVisible()) {\n runPaint(performance.now());\n return;\n }\n frame.request();\n }, [frame, runPaint]);\n const requestRedraw = useCallback(() => redraw(syncRef.current), [redraw, syncRef]);\n const paintNow = useCallback(() => redraw(true), [redraw]);\n\n const subscribeFrame = useCallback((fn: (time: number) => void) => {\n subsRef.current.add(fn);\n return () => { subsRef.current.delete(fn); };\n }, []);\n const subscribeBeforePaint = useCallback((fn: (time: number) => void) => {\n beforeRef.current.add(fn);\n return () => { beforeRef.current.delete(fn); };\n }, []);\n\n const subscribeResume = useCallback((fn: () => void) => {\n resumeRef.current.add(fn);\n return () => { resumeRef.current.delete(fn); };\n }, []);\n\n // `requestRedraw` outlives the component: `@weasel-js/hud` calls it from a\n // `.then()`, and `viewRegistry.attachSurface` hands it to the consumer.\n // Re-armed in setup because refs survive StrictMode's simulated remount, and\n // a layout effect so the arming precedes Canvas's own layout effects — the\n // sync-paint path runs in one of those.\n useLayoutEffect(() => {\n aliveRef.current = true;\n const subs = subsRef.current;\n const before = beforeRef.current;\n const resume = resumeRef.current;\n return () => {\n aliveRef.current = false;\n subs.clear();\n before.clear();\n resume.clear();\n };\n }, []);\n\n return { requestRedraw, paintNow, subscribeFrame, subscribeBeforePaint, subscribeResume };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA4CA,SAAgB,aAAa,OAAsB,UAA4B,CAAC,GAAc;CAC5F,MAAM,WAAW,OAAO,IAAI;CAC5B,MAAM,WAAW,OAAO,IAAI;CAC5B,MAAM,cAAc,OAAO,KAAK;CAChC,MAAM,WAAW,UAAU,KAAK;CAChC,MAAM,UAAU,UAAU,QAAQ,aAAa,KAAK;CACpD,MAAM,UAAU,uBAAoC,IAAI,IAAI,CAAC;CAC7D,MAAM,YAAY,uBAAoC,IAAI,IAAI,CAAC;CAC/D,MAAM,YAAY,uBAAwB,IAAI,IAAI,CAAC;;;;CAInD,MAAM,cAAc,OAAO,SAAS;;;CAIpC,MAAM,aAAa,OAAO,KAAK;;CAE/B,MAAM,WAAW,OAA4B,IAAI;CAEjD,MAAM,WAAW,aAAa,OAAe;EAC3C,MAAM,OAAO,KAAK,IAAI,IAAI,YAAY,OAAO;EAC7C,YAAY,UAAU;EACtB,SAAS,UAAU;EACnB,YAAY,UAAU;EACtB,IAAI,SAAS;EACb,IAAI;GACF,KAAK,MAAM,MAAM,UAAU,SAAS,GAAG,IAAI;GAC3C,SAAS,SAAS,QAAQ;GAC1B,IAAI,CAAC,QAAQ;IACX,SAAS,UAAU;IACnB;GACF;GACA,WAAW,UAAU;GAGrB,KAAK,MAAM,MAAM,QAAQ,SAAS,GAAG,IAAI;EAC3C,SAAS,KAAK;GAMZ,SAAS,UAAU;GACnB,IAAI,CAAC,WAAW,SAAS;IACvB,WAAW,UAAU;IACrB,SAAS,UAAU;GACrB;GACA,MAAM;EACR,UAAU;GACR,YAAY,UAAU;EACxB;CACF,GAAG,CAAC,QAAQ,CAAC;CAEb,MAAM,QAAQ,cACZ,aAAa,SAAiB;EAC5B,IAAI,CAAC,SAAS,WAAW,CAAC,SAAS,SAAS;EAC5C,SAAS,IAAI;CACf,GAAG,CAAC,QAAQ,CAAC,GACb;EACE,QAAQ,QAAQ;EAChB,UAAU,kBAAkB;GAAE,KAAK,MAAM,MAAM,UAAU,SAAS,GAAG;EAAG,GAAG,CAAC,CAAC;CAC/E,CACF;CACA,yBAAyB;EACvB,SAAS,gBAAgB;GAAE,MAAM,QAAQ;EAAG;CAC9C,CAAC;CAED,MAAM,SAAS,aAAa,YAAqB;EAC/C,SAAS,UAAU;EAKnB,IAAI,WAAW,SAAS,WAAW,CAAC,YAAY,WAAW,MAAM,UAAU,GAAG;GAC5E,SAAS,YAAY,IAAI,CAAC;GAC1B;EACF;EACA,MAAM,QAAQ;CAChB,GAAG,CAAC,OAAO,QAAQ,CAAC;CACpB,MAAM,gBAAgB,kBAAkB,OAAO,QAAQ,OAAO,GAAG,CAAC,QAAQ,OAAO,CAAC;CAClF,MAAM,WAAW,kBAAkB,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC;CAEzD,MAAM,iBAAiB,aAAa,OAA+B;EACjE,QAAQ,QAAQ,IAAI,EAAE;EACtB,aAAa;GAAE,QAAQ,QAAQ,OAAO,EAAE;EAAG;CAC7C,GAAG,CAAC,CAAC;CACL,MAAM,uBAAuB,aAAa,OAA+B;EACvE,UAAU,QAAQ,IAAI,EAAE;EACxB,aAAa;GAAE,UAAU,QAAQ,OAAO,EAAE;EAAG;CAC/C,GAAG,CAAC,CAAC;CAEL,MAAM,kBAAkB,aAAa,OAAmB;EACtD,UAAU,QAAQ,IAAI,EAAE;EACxB,aAAa;GAAE,UAAU,QAAQ,OAAO,EAAE;EAAG;CAC/C,GAAG,CAAC,CAAC;CAOL,sBAAsB;EACpB,SAAS,UAAU;EACnB,MAAM,OAAO,QAAQ;EACrB,MAAM,SAAS,UAAU;EACzB,MAAM,SAAS,UAAU;EACzB,aAAa;GACX,SAAS,UAAU;GACnB,KAAK,MAAM;GACX,OAAO,MAAM;GACb,OAAO,MAAM;EACf;CACF,GAAG,CAAC,CAAC;CAEL,OAAO;EAAE;EAAe;EAAU;EAAgB;EAAsB;CAAgB;AAC1F"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useMemo } from "react";
|
|
2
2
|
import { useLatest } from "@weasel-js/react";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/canvas/useHitObserver.ts
|
|
5
5
|
/** Turns a consumer's hit callback into the world-point observer the gesture
|
|
6
6
|
* dispatcher takes, resolving the hit with the canvas's own picker. Identity
|
|
7
7
|
* changes only between wired and not, so the dispatcher isn't rebuilt per
|
|
@@ -25,6 +25,5 @@ function useHitObserver(cb, pickerRef) {
|
|
|
25
25
|
]);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
//#endregion
|
|
29
28
|
export { useHitObserver };
|
|
30
29
|
//# sourceMappingURL=useHitObserver.js.map
|
|
@@ -3,7 +3,7 @@ import { watchElementMove } from "./watchElementMove.js";
|
|
|
3
3
|
import { useCallback, useEffect, useState } from "react";
|
|
4
4
|
import { useLatest, useVisibleRaf } from "@weasel-js/react";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
// src/canvas/useHostAnchor.ts
|
|
7
7
|
/**
|
|
8
8
|
* Hold a fixed-position panel against a host element's corner, kept inside the
|
|
9
9
|
* viewport, following it through scrolls, resizes, and reflows, a host moved by
|
|
@@ -98,6 +98,5 @@ function useHostAnchor(resolveHost, options) {
|
|
|
98
98
|
};
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
//#endregion
|
|
102
101
|
export { useHostAnchor };
|
|
103
102
|
//# sourceMappingURL=useHostAnchor.js.map
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import { useCallback, useRef } from "react";
|
|
2
2
|
import { useLatest } from "@weasel-js/react";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/canvas/useInFlightBounds.ts
|
|
5
5
|
/**
|
|
6
6
|
* Where a view boxes the nodes an in-flight gesture names: at the pose a
|
|
7
|
-
* source previews, else at the node's effective pose — a transform's poses
|
|
7
|
+
* source previews, carried to world, else at the node's effective pose — a transform's poses
|
|
8
8
|
* live in the scene's overrides, not on its handle. Boxed through `boxOf`
|
|
9
9
|
* either way, since a consumer `boundsOf` answers for the document pose only.
|
|
10
10
|
*/
|
|
11
11
|
function useInFlightBounds(args) {
|
|
12
|
-
const { gestureSource, boxOf, committedPoseOf } = args;
|
|
12
|
+
const { gestureSource, boxOf, committedPoseOf, worldOfStored } = args;
|
|
13
13
|
const previewPoseExtraRef = useLatest(args.previewPoseExtra);
|
|
14
14
|
const previewPoseOf = useCallback((id) => {
|
|
15
15
|
const p = previewPoseExtraRef.current?.(id);
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
if (p == null) return null;
|
|
17
|
+
return worldOfStored ? worldOfStored(id, p) : p;
|
|
18
|
+
}, [previewPoseExtraRef, worldOfStored]);
|
|
18
19
|
const inFlight = useRef(null);
|
|
19
20
|
const isInFlight = useCallback((id) => {
|
|
20
21
|
if (!gestureSource) return false;
|
|
@@ -47,6 +48,5 @@ function useInFlightBounds(args) {
|
|
|
47
48
|
};
|
|
48
49
|
}
|
|
49
50
|
|
|
50
|
-
//#endregion
|
|
51
51
|
export { useInFlightBounds };
|
|
52
52
|
//# sourceMappingURL=useInFlightBounds.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInFlightBounds.js","names":[],"sources":["../../src/canvas/useInFlightBounds.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { GestureSource } from './gestureBounds';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\n\n/**\n * Where a view boxes the nodes an in-flight gesture names: at the pose a\n * source previews, else at the node's effective pose — a transform's poses\n * live in the scene's overrides, not on its handle. Boxed through `boxOf`\n * either way, since a consumer `boundsOf` answers for the document pose only.\n */\nexport function useInFlightBounds<TPose>(args: {\n gestureSource: GestureSource | undefined;\n /** Read through a ref, so a change mid-gesture rebuilds nothing. */\n previewPoseExtra: ((id: string) => unknown) | undefined;\n boxOf: (id: string, pose: TPose) => Bounds | null;\n /** The node's effective world pose. */\n committedPoseOf: (id: string) => TPose | null;\n}): {\n previewPoseOf: (id: string) => TPose | null;\n previewBoundsOf: (id: string) => Bounds | null;\n} {\n const { gestureSource, boxOf, committedPoseOf } = args;\n const previewPoseExtraRef = useLatest(args.previewPoseExtra);\n const previewPoseOf = useCallback((id: string): TPose | null => {\n const p = previewPoseExtraRef.current?.(id);\n
|
|
1
|
+
{"version":3,"file":"useInFlightBounds.js","names":[],"sources":["../../src/canvas/useInFlightBounds.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { GestureSource } from './gestureBounds';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\n\n/**\n * Where a view boxes the nodes an in-flight gesture names: at the pose a\n * source previews, carried to world, else at the node's effective pose — a transform's poses\n * live in the scene's overrides, not on its handle. Boxed through `boxOf`\n * either way, since a consumer `boundsOf` answers for the document pose only.\n */\nexport function useInFlightBounds<TPose>(args: {\n gestureSource: GestureSource | undefined;\n /** Read through a ref, so a change mid-gesture rebuilds nothing. */\n previewPoseExtra: ((id: string) => unknown) | undefined;\n boxOf: (id: string, pose: TPose) => Bounds | null;\n /** The node's effective world pose. */\n committedPoseOf: (id: string) => TPose | null;\n /** Where `id` is drawn if it stores `stored`: a previewed pose is in the\n * frame the node is stored in, as a published override is. Absent means\n * stored poses are world. */\n worldOfStored?: ((id: string, stored: TPose) => TPose) | undefined;\n}): {\n previewPoseOf: (id: string) => TPose | null;\n previewBoundsOf: (id: string) => Bounds | null;\n} {\n const { gestureSource, boxOf, committedPoseOf, worldOfStored } = args;\n const previewPoseExtraRef = useLatest(args.previewPoseExtra);\n const previewPoseOf = useCallback((id: string): TPose | null => {\n const p = previewPoseExtraRef.current?.(id);\n if (p == null) return null;\n return worldOfStored ? worldOfStored(id, p as TPose) : (p as TPose);\n }, [previewPoseExtraRef, worldOfStored]);\n\n // The source's ids, re-read only when its version moves.\n const inFlight = useRef<{ source: GestureSource; version: number; ids: ReadonlySet<string> } | null>(null);\n const isInFlight = useCallback((id: string): boolean => {\n if (!gestureSource) return false;\n const version = gestureSource.getVersion();\n let entry = inFlight.current;\n if (entry === null || entry.source !== gestureSource || entry.version !== version) {\n entry = { source: gestureSource, version, ids: new Set(gestureSource.ids() ?? []) };\n inFlight.current = entry;\n }\n return entry.ids.has(id);\n }, [gestureSource]);\n\n const previewBoundsOf = useCallback((id: string): Bounds | null => {\n const p = previewPoseOf(id);\n if (p != null) return boxOf(id, p);\n if (!isInFlight(id)) return null;\n const shown = committedPoseOf(id);\n return shown != null ? boxOf(id, shown) : null;\n }, [previewPoseOf, boxOf, isInFlight, committedPoseOf]);\n\n return { previewPoseOf, previewBoundsOf };\n}\n"],"mappings":";;;;;;;;;;AAWA,SAAgB,kBAAyB,MAcvC;CACA,MAAM,EAAE,eAAe,OAAO,iBAAiB,kBAAkB;CACjE,MAAM,sBAAsB,UAAU,KAAK,gBAAgB;CAC3D,MAAM,gBAAgB,aAAa,OAA6B;EAC9D,MAAM,IAAI,oBAAoB,UAAU,EAAE;EAC1C,IAAI,KAAK,MAAM,OAAO;EACtB,OAAO,gBAAgB,cAAc,IAAI,CAAU,IAAK;CAC1D,GAAG,CAAC,qBAAqB,aAAa,CAAC;CAGvC,MAAM,WAAW,OAAoF,IAAI;CACzG,MAAM,aAAa,aAAa,OAAwB;EACtD,IAAI,CAAC,eAAe,OAAO;EAC3B,MAAM,UAAU,cAAc,WAAW;EACzC,IAAI,QAAQ,SAAS;EACrB,IAAI,UAAU,QAAQ,MAAM,WAAW,iBAAiB,MAAM,YAAY,SAAS;GACjF,QAAQ;IAAE,QAAQ;IAAe;IAAS,KAAK,IAAI,IAAI,cAAc,IAAI,KAAK,CAAC,CAAC;GAAE;GAClF,SAAS,UAAU;EACrB;EACA,OAAO,MAAM,IAAI,IAAI,EAAE;CACzB,GAAG,CAAC,aAAa,CAAC;CAUlB,OAAO;EAAE;EAAe,iBARA,aAAa,OAA8B;GACjE,MAAM,IAAI,cAAc,EAAE;GAC1B,IAAI,KAAK,MAAM,OAAO,MAAM,IAAI,CAAC;GACjC,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO;GAC5B,MAAM,QAAQ,gBAAgB,EAAE;GAChC,OAAO,SAAS,OAAO,MAAM,IAAI,KAAK,IAAI;EAC5C,GAAG;GAAC;GAAe;GAAO;GAAY;EAAe,CAE7B;CAAgB;AAC1C"}
|
|
@@ -3,7 +3,7 @@ import { subscribeImageReady } from "@weasel-js/renderer";
|
|
|
3
3
|
import { useEffect } from "react";
|
|
4
4
|
import { subscribeGlyphReady } from "@weasel-js/font";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
// src/canvas/useLateContentRedraw.ts
|
|
7
7
|
/**
|
|
8
8
|
* Repaint whenever something a frame could not draw becomes drawable: an image
|
|
9
9
|
* finishes decoding, a deferred glyph bake or font load lands, or a paint kind
|
|
@@ -23,6 +23,5 @@ function useLateContentRedraw(requestRedraw) {
|
|
|
23
23
|
}, [requestRedraw]);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
//#endregion
|
|
27
26
|
export { useLateContentRedraw };
|
|
28
27
|
//# sourceMappingURL=useLateContentRedraw.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createBackgroundFillLayer } from "../core/layers/backgroundFill.js";
|
|
2
|
-
import { isCustomEntry } from "./layerSlots.js";
|
|
3
2
|
import { composeOrderedLayers, placeToolOverlays } from "./layerOrder.js";
|
|
3
|
+
import { isCustomEntry } from "./layerSlots.js";
|
|
4
4
|
import { useCallback, useEffect, useMemo, useSyncExternalStore } from "react";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
// src/canvas/useLayerStack.ts
|
|
7
7
|
/** The `layers` prop's slots and custom entries in draw order, with the background fill beneath,
|
|
8
8
|
* the decoration layer above, and the active tool's overlays placed among them. */
|
|
9
9
|
function useSlotLayers(layersMap, tools, backgroundFill, decorationLayer) {
|
|
@@ -71,6 +71,5 @@ function useComposedLayers(layers, above, requestRedraw) {
|
|
|
71
71
|
return composed;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
//#endregion
|
|
75
74
|
export { useComposedLayers, useSlotLayers };
|
|
76
75
|
//# sourceMappingURL=useLayerStack.js.map
|
|
@@ -2,7 +2,7 @@ import { createPaintedCursorLayer } from "./paintedCursorLayer.js";
|
|
|
2
2
|
import { useEffect, useMemo } from "react";
|
|
3
3
|
import { createCursorSink, createPaintedCursorState } from "@weasel-js/cursor";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// src/canvas/usePaintedCursor.ts
|
|
6
6
|
/**
|
|
7
7
|
* The painted cursor tier's channel. The canvas owns it because it owns both ends: the tool
|
|
8
8
|
* cursor that feeds it and the frame loop that has to repaint when it changes.
|
|
@@ -23,6 +23,5 @@ function usePaintedCursor(canvasRef, requestRedraw) {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
//#endregion
|
|
27
26
|
export { usePaintedCursor };
|
|
28
27
|
//# sourceMappingURL=usePaintedCursor.js.map
|