@weasel-js/core 1.13.0-rc.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +408 -0
- package/README.md +8 -12
- package/dist/affordances/hitAffordanceRegions.js +1 -1
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/animation/clipTargets.js +1 -1
- package/dist/animation/clipTargets.js.map +1 -1
- package/dist/animation/poseTarget.js +5 -32
- package/dist/animation/poseTarget.js.map +1 -1
- package/dist/{autoPoseDescriptor-CZ1eXbzY.d.ts → autoPoseDescriptor-C25QVb0W.d.ts} +1 -1
- package/dist/barrel/canvas.js +8 -8
- package/dist/barrel/chrome.js +9 -9
- package/dist/barrel/input.js +1 -1
- package/dist/barrel/interactions.js +3 -3
- package/dist/barrel/paint.js +2 -2
- package/dist/barrel/paths.js +19 -17
- package/dist/barrel/renderer.js +11 -7
- package/dist/barrel/routing.js +4 -1
- package/dist/barrel/scene.js +16 -12
- package/dist/barrel/text.js +5 -5
- package/dist/barrel/viewport.js +8 -8
- package/dist/canvas/Canvas.js +2 -2
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +20 -14
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/GestureReason.js +64 -0
- package/dist/canvas/GestureReason.js.map +1 -0
- package/dist/canvas/GestureReason.module.js +7 -0
- package/dist/canvas/GestureReason.module.js.map +1 -0
- package/dist/canvas/LeanSceneCanvas.js +3 -1
- package/dist/canvas/LeanSceneCanvas.js.map +1 -1
- package/dist/canvas/NodeShape.js +2 -0
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js +7 -3
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/CanvasKitProviders.js +1 -1
- package/dist/canvas/SceneCanvas/CanvasKitProviders.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +2 -2
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +4 -2
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/SceneCanvasInput.js +3 -1
- package/dist/canvas/SceneCanvas/SceneCanvasInput.js.map +1 -1
- package/dist/canvas/SceneCanvas/brushOverlay.js.map +1 -1
- package/dist/canvas/SceneCanvas/builtinToolSets.js +17 -9
- package/dist/canvas/SceneCanvas/builtinToolSets.js.map +1 -1
- package/dist/canvas/SceneCanvas/canvasPassThrough.js +2 -1
- package/dist/canvas/SceneCanvas/canvasPassThrough.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +75 -19
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +7 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultTextEditor.js +108 -0
- package/dist/canvas/SceneCanvas/defaultTextEditor.js.map +1 -0
- package/dist/canvas/SceneCanvas/describePresets.js +47 -0
- package/dist/canvas/SceneCanvas/describePresets.js.map +1 -0
- package/dist/canvas/SceneCanvas/features.js +57 -16
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/mergeLayers.js +10 -1
- package/dist/canvas/SceneCanvas/mergeLayers.js.map +1 -1
- package/dist/canvas/SceneCanvas/namedPresets.js +52 -24
- package/dist/canvas/SceneCanvas/namedPresets.js.map +1 -1
- package/dist/canvas/SceneCanvas/presets/arrange.js +35 -10
- package/dist/canvas/SceneCanvas/presets/arrange.js.map +1 -1
- package/dist/canvas/SceneCanvas/presets/baseline.js +9 -0
- package/dist/canvas/SceneCanvas/presets/baseline.js.map +1 -0
- package/dist/canvas/SceneCanvas/presets/chrome.js.map +1 -1
- package/dist/canvas/SceneCanvas/presets/composites.js +43 -0
- package/dist/canvas/SceneCanvas/presets/composites.js.map +1 -0
- package/dist/canvas/SceneCanvas/presets/edit.js +79 -26
- package/dist/canvas/SceneCanvas/presets/edit.js.map +1 -1
- package/dist/canvas/SceneCanvas/presets/ingest.js +1 -0
- package/dist/canvas/SceneCanvas/presets/ingest.js.map +1 -1
- package/dist/canvas/SceneCanvas/presets/paths.js +58 -16
- package/dist/canvas/SceneCanvas/presets/paths.js.map +1 -1
- package/dist/canvas/SceneCanvas/presets/select.js +4 -2
- package/dist/canvas/SceneCanvas/presets/select.js.map +1 -1
- package/dist/canvas/SceneCanvas/presets/tools.js +24 -0
- package/dist/canvas/SceneCanvas/presets/tools.js.map +1 -0
- package/dist/canvas/SceneCanvas/presets/transform.js +4 -0
- package/dist/canvas/SceneCanvas/presets/transform.js.map +1 -1
- package/dist/canvas/SceneCanvas/presets/view.js +3 -1
- package/dist/canvas/SceneCanvas/presets/view.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +1 -1
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/toolRegistry.js +5 -4
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -1
- package/dist/canvas/SceneCanvas/useCanvasTools.js +26 -10
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useContributionRoles.js +17 -2
- package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -1
- package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js +5 -4
- package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +1 -1
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +9 -8
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js +2 -2
- package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +4 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneChrome.js +7 -4
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +9 -9
- package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js.map +1 -1
- package/dist/canvas/SceneCanvas/useScenePicking.js +4 -7
- package/dist/canvas/SceneCanvas/useScenePicking.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +2 -1
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +6 -6
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneStandardActions.js +2 -2
- package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +1 -1
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js.map +1 -1
- package/dist/canvas/SceneCanvas/useToolKeybindings.js +2 -2
- package/dist/canvas/SceneCanvas/useToolKeybindings.js.map +1 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js +5 -2
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -1
- package/dist/canvas/SceneCanvas.js +22 -11
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +1 -0
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/ViewMarker.js.map +1 -1
- package/dist/canvas/accentColor.js +14 -1
- package/dist/canvas/accentColor.js.map +1 -1
- package/dist/canvas/affordanceAt.js +2 -2
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +1 -1
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +5 -3
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +6 -2
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +4 -4
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/enteredGroup.js +14 -5
- package/dist/canvas/deps/enteredGroup.js.map +1 -1
- package/dist/canvas/deps/ingestion.js +5 -1
- package/dist/canvas/deps/ingestion.js.map +1 -1
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/insertSite.js +5 -3
- package/dist/canvas/deps/insertSite.js.map +1 -1
- package/dist/canvas/deps/nodeAtPoint.js +1 -12
- package/dist/canvas/deps/nodeAtPoint.js.map +1 -1
- package/dist/canvas/deps/pathEditCommits.js +3 -3
- package/dist/canvas/deps/pathEditCommits.js.map +1 -1
- package/dist/canvas/deps/slice.js +16 -2
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/snap.js +5 -5
- package/dist/canvas/deps/snap.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +5 -6
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/derivedPath.js +8 -3
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +2 -2
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/measurePainter.js +1 -1
- package/dist/canvas/nodeShapes/measurePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/strokedBounds.js +5 -3
- package/dist/canvas/nodeShapes/strokedBounds.js.map +1 -1
- package/dist/canvas/overlayRoleStrokes.js +6 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/pickIndex/scenePickIndex.js +10 -12
- package/dist/canvas/pickIndex/scenePickIndex.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +10 -19
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +17 -4
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +7 -5
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/surfaceContribution.js.map +1 -1
- package/dist/canvas/useCanvasPaint.js +12 -4
- package/dist/canvas/useCanvasPaint.js.map +1 -1
- package/dist/canvas/useHitObserver.js +1 -1
- package/dist/canvas/useHitObserver.js.map +1 -1
- package/dist/canvas/useViewAim.js +1 -1
- package/dist/canvas/useViewAim.js.map +1 -1
- package/dist/canvas/useViewHelpers.js +8 -5
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/useViewNesting.js +39 -12
- package/dist/canvas/useViewNesting.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewMarkers.js +2 -2
- package/dist/canvas/viewMarkers.js.map +1 -1
- package/dist/canvas/viewRegistry.js +2 -2
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/viewSnap.js +67 -0
- package/dist/canvas/viewSnap.js.map +1 -0
- package/dist/clipboard.d.ts +6 -12
- package/dist/{clone-qb2e1F5p.d.ts → clone-Bz4iqGfE.d.ts} +10 -5
- package/dist/clone.d.ts +5 -5
- package/dist/core/geometry/booleanOfPaths.js +23 -0
- package/dist/core/geometry/booleanOfPaths.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +12 -9
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -1
- package/dist/core/geometry/poseDescriptor.js +12 -3
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +2 -13
- package/dist/core/geometry/targetFrame.js.map +1 -1
- package/dist/core/layers/render.js +2 -1
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/layers/retain.js +5 -3
- package/dist/core/layers/retain.js.map +1 -1
- package/dist/core/ops/setPath.js +3 -0
- package/dist/core/ops/setPath.js.map +1 -1
- package/dist/core/paint/meshKindLazy.js.map +1 -1
- package/dist/core/paint/paintKindEntry.js.map +1 -1
- package/dist/core/paint/paintKinds.js +8 -1
- package/dist/core/paint/paintKinds.js.map +1 -1
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/booleanGroup.js +33 -0
- package/dist/core/scene/booleanGroup.js.map +1 -0
- package/dist/core/scene/booleanOfChildren.js +53 -0
- package/dist/core/scene/booleanOfChildren.js.map +1 -0
- package/dist/core/scene/carryDescendants.js +18 -6
- package/dist/core/scene/carryDescendants.js.map +1 -1
- package/dist/core/scene/composeFrame.js +42 -5
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/core/scene/composePose.js +35 -16
- package/dist/core/scene/composePose.js.map +1 -1
- package/dist/core/scene/depMemo.js +36 -18
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedParts.js +2 -23
- package/dist/core/scene/derivedParts.js.map +1 -1
- package/dist/core/scene/effectivePose.js +10 -0
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/historyForm.js +5 -4
- package/dist/core/scene/historyForm.js.map +1 -1
- package/dist/core/scene/kitOps.js +5 -71
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js +5 -0
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerOps.js +82 -0
- package/dist/core/scene/layerOps.js.map +1 -0
- package/dist/core/scene/layoutPass.js +14 -12
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/core/scene/lockGuard.js +9 -3
- package/dist/core/scene/lockGuard.js.map +1 -1
- package/dist/core/scene/nestedHit.js +5 -5
- package/dist/core/scene/nestedHit.js.map +1 -1
- package/dist/core/scene/nodeFlags.js +8 -2
- package/dist/core/scene/nodeFlags.js.map +1 -1
- package/dist/core/scene/nodeGates.js +31 -2
- package/dist/core/scene/nodeGates.js.map +1 -1
- package/dist/core/scene/pathEffects/effects.js +22 -3
- package/dist/core/scene/pathEffects/effects.js.map +1 -1
- package/dist/core/scene/pathEffects/textAlong.js +16 -3
- package/dist/core/scene/pathEffects/textAlong.js.map +1 -1
- package/dist/core/scene/pathEffects/textAlongBands.js +65 -0
- package/dist/core/scene/pathEffects/textAlongBands.js.map +1 -0
- package/dist/core/scene/reconcileSpecs.js +1 -1
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/scene.js +11 -5
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +5 -2
- package/dist/core/scene/sceneEdits.js.map +1 -1
- package/dist/core/scene/scenePoseAdapter.js +10 -1
- package/dist/core/scene/scenePoseAdapter.js.map +1 -1
- package/dist/core/scene/scrollOffsets.js +93 -0
- package/dist/core/scene/scrollOffsets.js.map +1 -0
- package/dist/core/scene/serialization.js +15 -5
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/statedFields.js +2 -1
- package/dist/core/scene/statedFields.js.map +1 -1
- package/dist/core/scene/strategyView.js +35 -0
- package/dist/core/scene/strategyView.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/core/scene/useScene.js +2 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/scene/worldSave.js +87 -0
- package/dist/core/scene/worldSave.js.map +1 -0
- package/dist/core/selection/selectionTarget.js +1 -1
- package/dist/core/selection/selectionTarget.js.map +1 -1
- package/dist/{cornerHandles-CNCb7aTY.d.ts → cornerHandles-DpmQM_z5.d.ts} +1 -1
- package/dist/{depSchema-B1RS-IJx.d.ts → depSchema-C3BwxitB.d.ts} +130 -104
- package/dist/devtools-protocol.d.ts +2 -2
- package/dist/devtools.d.ts +2 -2
- package/dist/{features → domains}/chrome-caps/buildChromeCtx.js +1 -1
- package/dist/domains/chrome-caps/buildChromeCtx.js.map +1 -0
- package/dist/{features → domains}/chrome-caps/conditions.js +1 -1
- package/dist/domains/chrome-caps/conditions.js.map +1 -0
- package/dist/{features → domains}/chrome-caps/defaults.js +1 -1
- package/dist/domains/chrome-caps/defaults.js.map +1 -0
- package/dist/{features → domains}/chrome-caps/resolve.js +1 -1
- package/dist/domains/chrome-caps/resolve.js.map +1 -0
- package/dist/{features → domains}/chrome-caps/useChromeCaps.js +1 -1
- package/dist/domains/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/{features → domains}/chrome-caps/useHoverTracking.js +1 -1
- package/dist/domains/chrome-caps/useHoverTracking.js.map +1 -0
- package/dist/{features → domains}/ingestion/contentHandlers.js +20 -3
- package/dist/domains/ingestion/contentHandlers.js.map +1 -0
- package/dist/domains/ingestion/ghost.js +56 -0
- package/dist/domains/ingestion/ghost.js.map +1 -0
- package/dist/{features → domains}/ingestion/imageHandler.js +1 -1
- package/dist/domains/ingestion/imageHandler.js.map +1 -0
- package/dist/domains/ingestion/kitHandlers.js +22 -0
- package/dist/domains/ingestion/kitHandlers.js.map +1 -0
- package/dist/{features → domains}/ingestion/openFilePicker.js +1 -1
- package/dist/domains/ingestion/openFilePicker.js.map +1 -0
- package/dist/{features → domains}/ingestion/placement.js +1 -1
- package/dist/domains/ingestion/placement.js.map +1 -0
- package/dist/{features → domains}/ingestion/svgHandler.js +1 -1
- package/dist/domains/ingestion/svgHandler.js.map +1 -0
- package/dist/{features → domains}/ingestion/textHandler.js +9 -7
- package/dist/domains/ingestion/textHandler.js.map +1 -0
- package/dist/{features → domains}/ingestion/useCanvasIngestion.js +13 -15
- package/dist/domains/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/{features → domains}/ingestion/weaselJsonHandler.js +1 -1
- package/dist/domains/ingestion/weaselJsonHandler.js.map +1 -0
- package/dist/{features → domains}/longPress/longPressFeedback.js +1 -1
- package/dist/domains/longPress/longPressFeedback.js.map +1 -0
- package/dist/{features → domains}/measure/actionIds.js +1 -1
- package/dist/domains/measure/actionIds.js.map +1 -0
- package/dist/{features → domains}/measure/measureCommands.js +1 -1
- package/dist/domains/measure/measureCommands.js.map +1 -0
- package/dist/{features → domains}/measure/measureContribution.js +1 -1
- package/dist/domains/measure/measureContribution.js.map +1 -0
- package/dist/{features → domains}/measure/measureEdits.js +1 -1
- package/dist/domains/measure/measureEdits.js.map +1 -0
- package/dist/{features → domains}/measure/measureGestures.js +4 -7
- package/dist/domains/measure/measureGestures.js.map +1 -0
- package/dist/{features → domains}/measure/measureHit.js +1 -1
- package/dist/domains/measure/measureHit.js.map +1 -0
- package/dist/{features → domains}/measure/measureLayer.js +1 -1
- package/dist/domains/measure/measureLayer.js.map +1 -0
- package/dist/{features → domains}/measure/measurement.js +1 -1
- package/dist/domains/measure/measurement.js.map +1 -0
- package/dist/{features → domains}/measure/measurements.js +2 -2
- package/dist/domains/measure/measurements.js.map +1 -0
- package/dist/{features → domains}/modes/modeLayers.js +1 -1
- package/dist/domains/modes/modeLayers.js.map +1 -0
- package/dist/{features → domains}/modes/modeTriggers.js +3 -6
- package/dist/domains/modes/modeTriggers.js.map +1 -0
- package/dist/{features → domains}/pathEffects/effectSources.js +1 -1
- package/dist/domains/pathEffects/effectSources.js.map +1 -0
- package/dist/{features → domains}/pathEffects/index.js +1 -1
- package/dist/domains/pathEffects/index.js.map +1 -0
- package/dist/{features → domains}/pathEffects/readSource.js +1 -1
- package/dist/domains/pathEffects/readSource.js.map +1 -0
- package/dist/{features → domains}/pathEffects/textItems.js +11 -2
- package/dist/domains/pathEffects/textItems.js.map +1 -0
- package/dist/{features → domains}/pathEffects/useEffectSourcesLayer.js +1 -1
- package/dist/domains/pathEffects/useEffectSourcesLayer.js.map +1 -0
- package/dist/{features → domains}/paths/anchorData.js +1 -1
- package/dist/domains/paths/anchorData.js.map +1 -0
- package/dist/{features → domains}/paths/anchorMarkers.js +9 -7
- package/dist/domains/paths/anchorMarkers.js.map +1 -0
- package/dist/{features → domains}/paths/editablePath.js +1 -1
- package/dist/domains/paths/editablePath.js.map +1 -0
- package/dist/{features → domains}/paths/index.js +3 -3
- package/dist/{features → domains}/paths/originProjection.js +1 -1
- package/dist/domains/paths/originProjection.js.map +1 -0
- package/dist/{features → domains}/paths/pathEditExtension.js +1 -1
- package/dist/domains/paths/pathEditExtension.js.map +1 -0
- package/dist/{features → domains}/paths/pathEditState.js +1 -1
- package/dist/domains/paths/pathEditState.js.map +1 -0
- package/dist/{features → domains}/paths/pathEditingOverlayLayer.js +1 -1
- package/dist/domains/paths/pathEditingOverlayLayer.js.map +1 -0
- package/dist/{features → domains}/paths/pathLayer.js +1 -1
- package/dist/domains/paths/pathLayer.js.map +1 -0
- package/dist/{features → domains}/paths/pathRepresentation.js +1 -1
- package/dist/domains/paths/pathRepresentation.js.map +1 -0
- package/dist/{features → domains}/paths/pathSnap/glyphs.js +1 -1
- package/dist/domains/paths/pathSnap/glyphs.js.map +1 -0
- package/dist/{features → domains}/paths/pathSnap/pathSnapSource.js +1 -1
- package/dist/domains/paths/pathSnap/pathSnapSource.js.map +1 -0
- package/dist/{features → domains}/paths/pathSnap/sceneIndex.js +1 -1
- package/dist/domains/paths/pathSnap/sceneIndex.js.map +1 -0
- package/dist/{features → domains}/paths/pathSnap/snapGeometry.js +3 -2
- package/dist/domains/paths/pathSnap/snapGeometry.js.map +1 -0
- package/dist/{features → domains}/paths/penPreviewLayer.js +1 -1
- package/dist/domains/paths/penPreviewLayer.js.map +1 -0
- package/dist/{features → domains}/paths/shapeGenerator.js +6 -4
- package/dist/domains/paths/shapeGenerator.js.map +1 -0
- package/dist/{features → domains}/paths/strokeOutline.js +1 -1
- package/dist/domains/paths/strokeOutline.js.map +1 -0
- package/dist/{features → domains}/paths/useAnchorFields.js +1 -1
- package/dist/domains/paths/useAnchorFields.js.map +1 -0
- package/dist/{features → domains}/paths/usePathEdit.js +1 -1
- package/dist/domains/paths/usePathEdit.js.map +1 -0
- package/dist/{features → domains}/poseRun/usePoseRun.js +1 -1
- package/dist/domains/poseRun/usePoseRun.js.map +1 -0
- package/dist/{features → domains}/selection/enteredGroupFrame.js +49 -10
- package/dist/domains/selection/enteredGroupFrame.js.map +1 -0
- package/dist/{features → domains}/selection/enteredGroupScope.js +1 -1
- package/dist/domains/selection/enteredGroupScope.js.map +1 -0
- package/dist/domains/selection/enteredOperands.js +29 -0
- package/dist/domains/selection/enteredOperands.js.map +1 -0
- package/dist/{features → domains}/selection/handleCommands.js +1 -1
- package/dist/domains/selection/handleCommands.js.map +1 -0
- package/dist/{features → domains}/selection/overlay.js +1 -1
- package/dist/domains/selection/overlay.js.map +1 -0
- package/dist/{features → domains}/selection/selectionPose.js +1 -1
- package/dist/domains/selection/selectionPose.js.map +1 -0
- package/dist/{features → domains}/snap/angle2d.js +1 -1
- package/dist/domains/snap/angle2d.js.map +1 -0
- package/dist/{features → domains}/snap/debugCandidates.js +1 -1
- package/dist/domains/snap/debugCandidates.js.map +1 -0
- package/dist/{features → domains}/snap/gather.js +1 -1
- package/dist/domains/snap/gather.js.map +1 -0
- package/dist/{features → domains}/snap/inputSubspace.js +1 -1
- package/dist/domains/snap/inputSubspace.js.map +1 -0
- package/dist/{features → domains}/snap/lazySession.js +1 -1
- package/dist/domains/snap/lazySession.js.map +1 -0
- package/dist/{features → domains}/snap/marks.js +1 -1
- package/dist/domains/snap/marks.js.map +1 -0
- package/dist/{features → domains}/snap/outcomeStore.js +1 -1
- package/dist/domains/snap/outcomeStore.js.map +1 -0
- package/dist/{features → domains}/snap/pointSnap.js +1 -1
- package/dist/domains/snap/pointSnap.js.map +1 -0
- package/dist/{features → domains}/snap/probes2d.js +1 -1
- package/dist/domains/snap/probes2d.js.map +1 -0
- package/dist/{features → domains}/snap/readoutDraw.js +1 -1
- package/dist/domains/snap/readoutDraw.js.map +1 -0
- package/dist/{features → domains}/snap/readoutLayer.js +1 -1
- package/dist/domains/snap/readoutLayer.js.map +1 -0
- package/dist/{features → domains}/snap/registry.js +1 -1
- package/dist/domains/snap/registry.js.map +1 -0
- package/dist/{features → domains}/snap/resizeBox.js +1 -1
- package/dist/domains/snap/resizeBox.js.map +1 -0
- package/dist/{features → domains}/snap/roles.js +1 -1
- package/dist/domains/snap/roles.js.map +1 -0
- package/dist/{features → domains}/snap/rotationSource.js +1 -1
- package/dist/domains/snap/rotationSource.js.map +1 -0
- package/dist/{features → domains}/snap/sceneReads.js +24 -3
- package/dist/domains/snap/sceneReads.js.map +1 -0
- package/dist/{features → domains}/snap/sceneSession2d.js +3 -2
- package/dist/domains/snap/sceneSession2d.js.map +1 -0
- package/dist/{features → domains}/snap/screen.js +1 -1
- package/dist/domains/snap/screen.js.map +1 -0
- package/dist/{features → domains}/snap/session2d.js +3 -2
- package/dist/domains/snap/session2d.js.map +1 -0
- package/dist/{features → domains}/snap/spanSnap.js +1 -1
- package/dist/domains/snap/spanSnap.js.map +1 -0
- package/dist/{features → domains}/snap/stepAngles.js +1 -1
- package/dist/domains/snap/stepAngles.js.map +1 -0
- package/dist/{features → domains}/text/editingDrawOne.js +4 -4
- package/dist/domains/text/editingDrawOne.js.map +1 -0
- package/dist/domains/text/hostTextEditors.js +24 -0
- package/dist/domains/text/hostTextEditors.js.map +1 -0
- package/dist/{features → domains}/text/index.js +1 -1
- package/dist/{features → domains}/text/sceneTextDrafts.js +1 -1
- package/dist/domains/text/sceneTextDrafts.js.map +1 -0
- package/dist/{features → domains}/text/textHitAt.js +18 -2
- package/dist/domains/text/textHitAt.js.map +1 -0
- package/dist/{features → domains}/text/textLayer.js +1 -1
- package/dist/domains/text/textLayer.js.map +1 -0
- package/dist/{features → domains}/text/useSceneTextEdit.js +11 -3
- package/dist/domains/text/useSceneTextEdit.js.map +1 -0
- package/dist/{features → domains}/viewports/aim.js +1 -1
- package/dist/domains/viewports/aim.js.map +1 -0
- package/dist/{features → domains}/viewports/viewMarker.js +23 -5
- package/dist/domains/viewports/viewMarker.js.map +1 -0
- package/dist/{features → domains}/viewports/viewMarkerDrag.js +3 -3
- package/dist/domains/viewports/viewMarkerDrag.js.map +1 -0
- package/dist/{features → domains}/viewports/viewResolver.js +1 -1
- package/dist/domains/viewports/viewResolver.js.map +1 -0
- package/dist/{features → domains}/viewports/viewportLayer.js +3 -2
- package/dist/domains/viewports/viewportLayer.js.map +1 -0
- package/dist/icons.table.js +1 -1
- package/dist/icons.table.js.map +1 -1
- package/dist/icons.table.json +106 -6
- package/dist/index.d.ts +1445 -1053
- package/dist/index.js +90 -77
- package/dist/interactions/actions/admitsChild.js +6 -2
- package/dist/interactions/actions/admitsChild.js.map +1 -1
- package/dist/interactions/actions/align/align.js +1 -4
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/booleanGroupAction.js +66 -0
- package/dist/interactions/actions/booleans/booleanGroupAction.js.map +1 -0
- package/dist/interactions/actions/booleans/keymap.js +52 -0
- package/dist/interactions/actions/booleans/keymap.js.map +1 -0
- package/dist/interactions/actions/booleans/operands.js +1 -1
- package/dist/interactions/actions/booleans/pieces.js +4 -11
- package/dist/interactions/actions/booleans/pieces.js.map +1 -1
- package/dist/interactions/actions/clipboard/action.js +3 -7
- package/dist/interactions/actions/clipboard/action.js.map +1 -1
- package/dist/interactions/actions/clipboard/clipboardOps.js +1 -1
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +6 -6
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
- package/dist/interactions/actions/defaults/containerScroll.js +170 -0
- package/dist/interactions/actions/defaults/containerScroll.js.map +1 -0
- package/dist/interactions/actions/defaults/contextMenu.js +2 -5
- package/dist/interactions/actions/defaults/contextMenu.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +1 -3
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterGroup.js +7 -12
- package/dist/interactions/actions/defaults/enterGroup.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +4 -8
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +12 -24
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +18 -10
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +3 -3
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudgeSteps.js +3 -21
- package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -1
- package/dist/interactions/actions/defaults/pathEditMarks.js.map +1 -1
- package/dist/interactions/actions/defaults/selectDeep.js +2 -2
- package/dist/interactions/actions/defaults/selectDeep.js.map +1 -1
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/dropVerdict.js +9 -0
- package/dist/interactions/actions/dropVerdict.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/action.js +2 -2
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/extensionDrags.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/geometry.js +8 -6
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/handleDrag.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -1
- package/dist/interactions/actions/flip/action.js +3 -2
- package/dist/interactions/actions/flip/action.js.map +1 -1
- package/dist/interactions/actions/geometryProjection.js +8 -3
- package/dist/interactions/actions/geometryProjection.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +1 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +6 -2
- package/dist/interactions/actions/insert/action.js.map +1 -1
- package/dist/interactions/actions/insert/frame.js +1 -1
- package/dist/interactions/actions/insert/frame.js.map +1 -1
- package/dist/interactions/actions/insert/placeAction.js +6 -8
- package/dist/interactions/actions/insert/placeAction.js.map +1 -1
- package/dist/interactions/actions/insert/session.js +2 -2
- package/dist/interactions/actions/insert/session.js.map +1 -1
- package/dist/interactions/actions/move/action.js +6 -15
- package/dist/interactions/actions/move/action.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +12 -2
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +29 -10
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +42 -6
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +4 -8
- package/dist/interactions/actions/move/capture.js.map +1 -1
- package/dist/interactions/actions/move/commit/index.js.map +1 -1
- package/dist/interactions/actions/move/commit/layoutDrop.js +4 -3
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -1
- package/dist/interactions/actions/move/commit/layoutRelease.js +15 -9
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -1
- package/dist/interactions/actions/move/commit/reparent.js +19 -13
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -1
- package/dist/interactions/actions/move/delta.js +51 -5
- package/dist/interactions/actions/move/delta.js.map +1 -1
- package/dist/interactions/actions/move/frame.js +8 -4
- package/dist/interactions/actions/move/frame.js.map +1 -1
- package/dist/interactions/actions/move/layout/container.js +19 -9
- package/dist/interactions/actions/move/layout/container.js.map +1 -1
- package/dist/interactions/actions/move/layout/dragged.js +2 -2
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -1
- package/dist/interactions/actions/move/layout/dropPass.js +36 -18
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -1
- package/dist/interactions/actions/move/layout/exits.js +2 -2
- package/dist/interactions/actions/move/layout/exits.js.map +1 -1
- package/dist/interactions/actions/move/layout/glide.js +5 -5
- package/dist/interactions/actions/move/layout/glide.js.map +1 -1
- package/dist/interactions/actions/move/layout/view.js +55 -0
- package/dist/interactions/actions/move/layout/view.js.map +1 -0
- package/dist/interactions/actions/move/refusal.js +52 -0
- package/dist/interactions/actions/move/refusal.js.map +1 -0
- package/dist/interactions/actions/move/session.js +9 -8
- package/dist/interactions/actions/move/session.js.map +1 -1
- package/dist/interactions/actions/move/translate.js +10 -4
- package/dist/interactions/actions/move/translate.js.map +1 -1
- package/dist/interactions/actions/moveNodes.js +21 -5
- package/dist/interactions/actions/moveNodes.js.map +1 -1
- package/dist/interactions/actions/pathCommands/pathNodes.js +3 -3
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -1
- package/dist/interactions/actions/planeInput.js +14 -13
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +21 -8
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +1 -1
- package/dist/interactions/actions/resize/action.js.map +1 -1
- package/dist/interactions/actions/resize/aspect.js +1 -1
- package/dist/interactions/actions/resize/aspect.js.map +1 -1
- package/dist/interactions/actions/resize/commit.js +10 -1
- package/dist/interactions/actions/resize/commit.js.map +1 -1
- package/dist/interactions/actions/resize/frame.js +3 -2
- package/dist/interactions/actions/resize/frame.js.map +1 -1
- package/dist/interactions/actions/resize/held.js +44 -0
- package/dist/interactions/actions/resize/held.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +3 -1
- package/dist/interactions/actions/resize/session.js.map +1 -1
- package/dist/interactions/actions/resolveOverlays.js +9 -0
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js +23 -7
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +1 -1
- package/dist/interactions/actions/rotate/action.js.map +1 -1
- package/dist/interactions/actions/rotate/frame.js +1 -1
- package/dist/interactions/actions/rotate/frame.js.map +1 -1
- package/dist/interactions/actions/rotate/session.js +2 -2
- package/dist/interactions/actions/rotate/session.js.map +1 -1
- package/dist/interactions/actions/selectionSubtree.js +2 -4
- package/dist/interactions/actions/selectionSubtree.js.map +1 -1
- package/dist/interactions/actions/spatialReference.js +4 -9
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -1
- package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -1
- package/dist/kitSettingsSchema.js +2 -2
- package/dist/kitSettingsSchema.js.map +1 -1
- package/dist/{math-C_elShP_.d.ts → math-B_unOnF4.d.ts} +2 -2
- package/dist/math.d.ts +3 -3
- package/dist/move.d.ts +6 -6
- package/dist/{options-ClEm3SEl.d.ts → options-DAjkhbcs.d.ts} +5 -5
- package/dist/{poseDescriptor-DN2yfnq_.d.ts → poseDescriptor-CvSxVhCd.d.ts} +17 -4
- package/dist/resize.d.ts +6 -6
- package/dist/style.css +14 -0
- package/dist/test-seams.d.ts +11 -15
- package/dist/test-seams.js +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js +3 -6
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/measure/useMeasureTool.js +2 -2
- package/dist/tools/builtin/measure/useMeasureTool.js.map +1 -1
- package/dist/tools/builtin/pen/penHandle.js +2 -2
- package/dist/tools/builtin/pen/penHandle.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +13 -19
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/select/groupEntry.js +1 -1
- package/dist/tools/builtin/select/groupEntry.js.map +1 -1
- package/dist/tools/builtin/select/selectionContributions.js +1 -1
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +7 -7
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +5 -8
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +1 -1
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/index.js +2 -1
- package/dist/{types-49uYJN3j.d.ts → types-A_sNJYRd.d.ts} +8 -0
- package/dist/{types-BEdRIhNc.d.ts → types-DW14eu9B.d.ts} +131 -36
- package/dist/{types-p2alu-R1.d.ts → types-VCtfchp-.d.ts} +4 -6
- package/dist/util/color.js +12 -14
- package/dist/util/color.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +25 -24
- package/dist/canvas/poseCascade.js +0 -65
- package/dist/canvas/poseCascade.js.map +0 -1
- package/dist/features/chrome-caps/buildChromeCtx.js.map +0 -1
- package/dist/features/chrome-caps/conditions.js.map +0 -1
- package/dist/features/chrome-caps/defaults.js.map +0 -1
- package/dist/features/chrome-caps/resolve.js.map +0 -1
- package/dist/features/chrome-caps/useChromeCaps.js.map +0 -1
- package/dist/features/chrome-caps/useHoverTracking.js.map +0 -1
- package/dist/features/ingestion/contentHandlers.js.map +0 -1
- package/dist/features/ingestion/imageHandler.js.map +0 -1
- package/dist/features/ingestion/openFilePicker.js.map +0 -1
- package/dist/features/ingestion/placement.js.map +0 -1
- package/dist/features/ingestion/registerKitHandlers.js +0 -43
- package/dist/features/ingestion/registerKitHandlers.js.map +0 -1
- package/dist/features/ingestion/svgHandler.js.map +0 -1
- package/dist/features/ingestion/textHandler.js.map +0 -1
- package/dist/features/ingestion/useCanvasIngestion.js.map +0 -1
- package/dist/features/ingestion/weaselJsonHandler.js.map +0 -1
- package/dist/features/longPress/longPressFeedback.js.map +0 -1
- package/dist/features/measure/actionIds.js.map +0 -1
- package/dist/features/measure/measureCommands.js.map +0 -1
- package/dist/features/measure/measureContribution.js.map +0 -1
- package/dist/features/measure/measureEdits.js.map +0 -1
- package/dist/features/measure/measureGestures.js.map +0 -1
- package/dist/features/measure/measureHit.js.map +0 -1
- package/dist/features/measure/measureLayer.js.map +0 -1
- package/dist/features/measure/measurement.js.map +0 -1
- package/dist/features/measure/measurements.js.map +0 -1
- package/dist/features/modes/modeLayers.js.map +0 -1
- package/dist/features/modes/modeTriggers.js.map +0 -1
- package/dist/features/pathEffects/effectSources.js.map +0 -1
- package/dist/features/pathEffects/index.js.map +0 -1
- package/dist/features/pathEffects/readSource.js.map +0 -1
- package/dist/features/pathEffects/textItems.js.map +0 -1
- package/dist/features/pathEffects/useEffectSourcesLayer.js.map +0 -1
- package/dist/features/paths/anchorData.js.map +0 -1
- package/dist/features/paths/anchorMarkers.js.map +0 -1
- package/dist/features/paths/editablePath.js.map +0 -1
- package/dist/features/paths/originProjection.js.map +0 -1
- package/dist/features/paths/pathEditExtension.js.map +0 -1
- package/dist/features/paths/pathEditState.js.map +0 -1
- package/dist/features/paths/pathEditingOverlayLayer.js.map +0 -1
- package/dist/features/paths/pathLayer.js.map +0 -1
- package/dist/features/paths/pathRepresentation.js.map +0 -1
- package/dist/features/paths/pathSnap/glyphs.js.map +0 -1
- package/dist/features/paths/pathSnap/pathSnapSource.js.map +0 -1
- package/dist/features/paths/pathSnap/sceneIndex.js.map +0 -1
- package/dist/features/paths/pathSnap/snapGeometry.js.map +0 -1
- package/dist/features/paths/penPreviewLayer.js.map +0 -1
- package/dist/features/paths/shapeGenerator.js.map +0 -1
- package/dist/features/paths/strokeOutline.js.map +0 -1
- package/dist/features/paths/useAnchorFields.js.map +0 -1
- package/dist/features/paths/usePathEdit.js.map +0 -1
- package/dist/features/poseRun/usePoseRun.js.map +0 -1
- package/dist/features/selection/enteredGroupFrame.js.map +0 -1
- package/dist/features/selection/enteredGroupScope.js.map +0 -1
- package/dist/features/selection/handleCommands.js.map +0 -1
- package/dist/features/selection/overlay.js.map +0 -1
- package/dist/features/selection/selectionPose.js.map +0 -1
- package/dist/features/snap/angle2d.js.map +0 -1
- package/dist/features/snap/debugCandidates.js.map +0 -1
- package/dist/features/snap/gather.js.map +0 -1
- package/dist/features/snap/inputSubspace.js.map +0 -1
- package/dist/features/snap/lazySession.js.map +0 -1
- package/dist/features/snap/marks.js.map +0 -1
- package/dist/features/snap/outcomeStore.js.map +0 -1
- package/dist/features/snap/pointSnap.js.map +0 -1
- package/dist/features/snap/probes2d.js.map +0 -1
- package/dist/features/snap/readoutDraw.js.map +0 -1
- package/dist/features/snap/readoutLayer.js.map +0 -1
- package/dist/features/snap/registry.js.map +0 -1
- package/dist/features/snap/resizeBox.js.map +0 -1
- package/dist/features/snap/roles.js.map +0 -1
- package/dist/features/snap/rotationSource.js.map +0 -1
- package/dist/features/snap/sceneReads.js.map +0 -1
- package/dist/features/snap/sceneSession2d.js.map +0 -1
- package/dist/features/snap/screen.js.map +0 -1
- package/dist/features/snap/session2d.js.map +0 -1
- package/dist/features/snap/spanSnap.js.map +0 -1
- package/dist/features/snap/stepAngles.js.map +0 -1
- package/dist/features/text/editingDrawOne.js.map +0 -1
- package/dist/features/text/sceneTextDrafts.js.map +0 -1
- package/dist/features/text/textHitAt.js.map +0 -1
- package/dist/features/text/textLayer.js.map +0 -1
- package/dist/features/text/useSceneTextEdit.js.map +0 -1
- package/dist/features/viewports/aim.js.map +0 -1
- package/dist/features/viewports/viewMarker.js.map +0 -1
- package/dist/features/viewports/viewMarkerDrag.js.map +0 -1
- package/dist/features/viewports/viewResolver.js.map +0 -1
- package/dist/features/viewports/viewportLayer.js.map +0 -1
- /package/dist/{features → domains}/chrome-caps/index.js +0 -0
package/dist/barrel/renderer.js
CHANGED
|
@@ -1,26 +1,30 @@
|
|
|
1
1
|
import { textBoxOf } from "../canvas/nodeShapes/textPainter.js";
|
|
2
2
|
import { rotateAroundAABBCenter } from "../canvas/poseRotation.js";
|
|
3
3
|
import { KIT_SHAPE_KINDS, SHAPE_KINDS } from "../core/shapeKinds.js";
|
|
4
|
-
import { arrangePreset } from "../canvas/SceneCanvas/presets/arrange.js";
|
|
5
|
-
import { editPreset } from "../canvas/SceneCanvas/presets/edit.js";
|
|
4
|
+
import { alignPreset, arrangePreset, distributePreset, flipPreset, reorderPreset } from "../canvas/SceneCanvas/presets/arrange.js";
|
|
5
|
+
import { clipboardPreset, contextMenuPreset, deletePreset, duplicatePreset, editPreset, escapePreset, groupPreset, nudgePreset, selectAllPreset, stylePreset } from "../canvas/SceneCanvas/presets/edit.js";
|
|
6
6
|
import { ingestPreset } from "../canvas/SceneCanvas/presets/ingest.js";
|
|
7
|
-
import { pathsPreset } from "../canvas/SceneCanvas/presets/paths.js";
|
|
7
|
+
import { anchorKeysPreset, outlinesPreset, pathCommandsPreset, pathEditPreset, pathfinderPreset, pathsPreset } from "../canvas/SceneCanvas/presets/paths.js";
|
|
8
|
+
import { BUILTIN_TOOLS, BUILTIN_TOOL_GROUPS, BUILTIN_TOOL_IDS, DRAW_TOOLS, PAGE_TOOLS, SELECT_TOOLS, SHAPE_TOOLS, TOOL_GROUP_ORDER, TYPE_TOOLS, VIEW_TOOLS } from "../canvas/SceneCanvas/builtinToolSets.js";
|
|
9
|
+
import { drawToolsPreset, pageToolsPreset, selectToolsPreset, shapeToolsPreset, typeToolsPreset, viewToolsPreset } from "../canvas/SceneCanvas/presets/tools.js";
|
|
8
10
|
import { selectPreset } from "../canvas/SceneCanvas/presets/select.js";
|
|
9
11
|
import { movePreset, outlinePreset, resizePreset, rotatePreset } from "../canvas/SceneCanvas/presets/transform.js";
|
|
10
12
|
import { viewPreset } from "../canvas/SceneCanvas/presets/view.js";
|
|
11
|
-
import {
|
|
13
|
+
import { drawPreset, pickPreset, transformPreset } from "../canvas/SceneCanvas/presets/composites.js";
|
|
14
|
+
import { BASELINE_ACTIONS } from "../canvas/SceneCanvas/presets/baseline.js";
|
|
15
|
+
import { BASELINE_ACTION_IDS, FEATURE_ACTION_IDS, FEATURE_PRESETS, TOOL_DRIVEN_ACTION_IDS } from "../canvas/SceneCanvas/namedPresets.js";
|
|
12
16
|
import { PAINTED_CURSOR_LAYER_ID, createPaintedCursorLayer } from "../canvas/paintedCursorLayer.js";
|
|
13
17
|
import { useTransformFollower } from "../canvas/deps/transformFollowers.js";
|
|
14
18
|
import { paletteInsertPaint } from "../canvas/deps/insert.js";
|
|
15
19
|
import { KIT_VERSIONS, checkRequirements, satisfiesRange } from "../canvas/kitRequirements.js";
|
|
16
20
|
import { SCENE_CANVAS_FEATURES } from "../canvas/SceneCanvas/features.js";
|
|
17
|
-
import {
|
|
21
|
+
import { describePresets, isAtom } from "../canvas/SceneCanvas/describePresets.js";
|
|
18
22
|
import { mergeContributions as mergeContributions$1 } from "../canvas/surfaceContribution.js";
|
|
19
23
|
import { SPRITE_STRIDE, blur, cullDrawCommands as cullDrawCommands$1, frameRect, mat3 as mat3$1, registerEffect, viewToMat3 as viewToMat3$1, vignette } from "@weasel-js/renderer";
|
|
20
24
|
import { createReflectable as createReflectable$1 } from "@weasel-js/registry";
|
|
21
|
-
import { KEYMAP_HOLD, assembleEntries, captureGesture, captureKey, createKeymapStack, describeKeymap, keymapContribution, keymapLeaderBindingId, keymapLeaderId, keymapShortcuts, liveScope, modeShortcutSpec, modeShortcuts, scopeBindings } from "@weasel-js/routing";
|
|
25
|
+
import { KEYMAP_HOLD, assembleEntries, captureGesture, captureKey, createKeymapStack, describeKeymap, holdPreview as holdPreview$1, holdPreviewId as holdPreviewId$1, keymapContribution as keymapContribution$1, keymapLeaderBindingId, keymapLeaderId, keymapShortcuts, liveScope, modeShortcutSpec, modeShortcuts, scopeBindings } from "@weasel-js/routing";
|
|
22
26
|
import { canQueryLocalFonts, cssFamilyName, cssFontFamily, cssFontFamilyLoading, enableLocalFontOutlines, fontOutlineRegistry, fontRegistry, hasFontOutlines, isCanvasFont, listFontOutlines, loadFontOutlines, outlineStatus, refreshCanvasFont, registerCanvasFont, registerFont, registerFontOutlines, subscribeGlyphReady as subscribeGlyphReady$1, unregisterCanvasFont, unregisterFontOutlines, warmFonts as warmFonts$1 } from "@weasel-js/font";
|
|
23
27
|
import { bindingSpec, held, key, keySpecRoute, unbound } from "@weasel-js/gestures";
|
|
24
28
|
import { CURSOR_ANGLE_STEPS, CURSOR_MAX_CSS_PX, bakeCursor, createCursorSink as createCursorSink$1, createPaintedCursorState as createPaintedCursorState$1, cursorFor as cursorFor$1, resolveCursor, resolveCursorTier as resolveCursorTier$1 } from "@weasel-js/cursor";
|
|
25
29
|
|
|
26
|
-
export { BUILTIN_TOOLS,
|
|
30
|
+
export { BASELINE_ACTIONS, BASELINE_ACTION_IDS, BUILTIN_TOOLS, BUILTIN_TOOL_GROUPS, BUILTIN_TOOL_IDS, CURSOR_ANGLE_STEPS, CURSOR_MAX_CSS_PX, DRAW_TOOLS, FEATURE_ACTION_IDS, FEATURE_PRESETS, KEYMAP_HOLD, KIT_SHAPE_KINDS, KIT_VERSIONS, PAGE_TOOLS, PAINTED_CURSOR_LAYER_ID, SCENE_CANVAS_FEATURES, SELECT_TOOLS, SHAPE_KINDS, SHAPE_TOOLS, SPRITE_STRIDE, TOOL_DRIVEN_ACTION_IDS, TOOL_GROUP_ORDER, TYPE_TOOLS, VIEW_TOOLS, alignPreset, anchorKeysPreset, arrangePreset, assembleEntries, bakeCursor, bindingSpec, blur, canQueryLocalFonts, captureGesture, captureKey, checkRequirements, clipboardPreset, contextMenuPreset, createCursorSink$1 as createCursorSink, createKeymapStack, createPaintedCursorLayer, createPaintedCursorState$1 as createPaintedCursorState, createReflectable$1 as createReflectable, cssFamilyName, cssFontFamily, cssFontFamilyLoading, cullDrawCommands$1 as cullDrawCommands, cursorFor$1 as cursorFor, deletePreset, describeKeymap, describePresets, distributePreset, drawPreset, drawToolsPreset, duplicatePreset, editPreset, enableLocalFontOutlines, escapePreset, flipPreset, fontOutlineRegistry, fontRegistry, frameRect, groupPreset, hasFontOutlines, held, holdPreview$1 as holdPreview, holdPreviewId$1 as holdPreviewId, ingestPreset, isAtom, isCanvasFont, key, keySpecRoute, keymapContribution$1 as keymapContribution, keymapLeaderBindingId, keymapLeaderId, keymapShortcuts, listFontOutlines, liveScope, loadFontOutlines, mat3$1 as mat3, mergeContributions$1 as mergeContributions, modeShortcutSpec, modeShortcuts, movePreset, nudgePreset, outlinePreset, outlineStatus, outlinesPreset, pageToolsPreset, paletteInsertPaint, pathCommandsPreset, pathEditPreset, pathfinderPreset, pathsPreset, pickPreset, refreshCanvasFont, registerCanvasFont, registerEffect, registerFont, registerFontOutlines, reorderPreset, resizePreset, resolveCursor, resolveCursorTier$1 as resolveCursorTier, rotateAroundAABBCenter, rotatePreset, satisfiesRange, scopeBindings, selectAllPreset, selectPreset, selectToolsPreset, shapeToolsPreset, stylePreset, subscribeGlyphReady$1 as subscribeGlyphReady, textBoxOf, transformPreset, typeToolsPreset, unbound, unregisterCanvasFont, unregisterFontOutlines, useTransformFollower, viewPreset, viewToMat3$1 as viewToMat3, viewToolsPreset, vignette, warmFonts$1 as warmFonts };
|
package/dist/barrel/routing.js
CHANGED
|
@@ -3,6 +3,7 @@ import { contextMenuAction, openContextMenu } from "../interactions/actions/defa
|
|
|
3
3
|
import { PATH_GESTURE_TAGS, pathOperationTags } from "../interactions/actions/pathGestureTags.js";
|
|
4
4
|
import { defaultCommitAdapter } from "../interactions/actions/defaultCommitAdapter.js";
|
|
5
5
|
import { editingLayer, inPlane, insertLayer, selectionLayer } from "../interactions/actions/planeInput.js";
|
|
6
|
+
import { refusalOf } from "../interactions/actions/dropVerdict.js";
|
|
6
7
|
import { moveAction } from "../interactions/actions/move/action.js";
|
|
7
8
|
import { flipAction } from "../interactions/actions/flip/action.js";
|
|
8
9
|
import { createResizeAction, resizeAction } from "../interactions/actions/resize/action.js";
|
|
@@ -17,6 +18,7 @@ import { cloneAction } from "../interactions/actions/clone/action.js";
|
|
|
17
18
|
import { viewportDragPanAction } from "../interactions/actions/defaults/viewportDragPan.js";
|
|
18
19
|
import { makeViewportZoomAction, viewportZoomAction } from "../interactions/actions/defaults/viewportZoom.js";
|
|
19
20
|
import { makeViewportWheelPanAction, viewportWheelPanAction } from "../interactions/actions/defaults/viewportWheelPan.js";
|
|
21
|
+
import { containerScrollAction, scrollRange, scrollableAt } from "../interactions/actions/defaults/containerScroll.js";
|
|
20
22
|
import { editAnchorsAction } from "../interactions/actions/edit-anchors/action.js";
|
|
21
23
|
import { deleteAnchorsAction, nudgeAnchorsDownAction, nudgeAnchorsLeftAction, nudgeAnchorsRightAction, nudgeAnchorsUpAction, selectAnchorAction } from "../interactions/actions/defaults/anchorEditing.js";
|
|
22
24
|
import { selectFromLasso } from "../interactions/actions/lasso-select/behaviors/selectFromLasso.js";
|
|
@@ -36,6 +38,7 @@ import { useBooleansAdapterSource } from "../canvas/deps/booleans.js";
|
|
|
36
38
|
import { defineTool, useTools as useTools$1 } from "../tools/overlayBinding.js";
|
|
37
39
|
import { useKeybindings } from "../tools/useKeybindings.js";
|
|
38
40
|
import { pickTopMostHit } from "../tools/builtin/pickTopMostHit.js";
|
|
41
|
+
import { GROUP_ENTRY_ID, createGroupEntryContribution, useGroupEntryContribution } from "../tools/builtin/select/groupEntry.js";
|
|
39
42
|
import { useSelectTool } from "../tools/builtin/select/useSelectTool.js";
|
|
40
43
|
import { useHandTool } from "../tools/builtin/hand/useHandTool.js";
|
|
41
44
|
import { DRAG_PAN_ID, dragPanContribution } from "../tools/builtin/hand/dragPanContribution.js";
|
|
@@ -61,4 +64,4 @@ import { ActionDisabledReason as ActionDisabledReason$1, actionBindings as actio
|
|
|
61
64
|
import { bodyPredicate, hitPredicate as hitPredicate$1 } from "@weasel-js/gestures";
|
|
62
65
|
import { ActionsProvider as ActionsProvider$1, ActiveToolContextProvider as ActiveToolContextProvider$1, ActiveToolContextProviderIfRoot as ActiveToolContextProviderIfRoot$1, DepRegistryProvider as DepRegistryProvider$1, InputScope as InputScope$1, Yoke, useAction, useActionsRegistry as useActionsRegistry$1, useActiveToolContext, useCommand, useDepRegistry as useDepRegistry$1, useDepSource as useDepSource$1, useGestureDispatcher as useGestureDispatcher$1, useMenuHost as useMenuHost$1, useMenus, useOngoingAction, useOpenKeymap, useOptionalActiveToolContext as useOptionalActiveToolContext$1, useOptionalDepRegistry as useOptionalDepRegistry$1, useYoke } from "@weasel-js/routing/react";
|
|
63
66
|
|
|
64
|
-
export { AREA_SELECT_ID, ActionDisabledReason$1 as ActionDisabledReason, ActionsProvider$1 as ActionsProvider, ActiveToolContextProvider$1 as ActiveToolContextProvider, ActiveToolContextProviderIfRoot$1 as ActiveToolContextProviderIfRoot, CORNER_ANCHORS, DRAG_PAN_ID, DepRegistryProvider$1 as DepRegistryProvider, EDGE_HANDLE_MIN_RADII, INSERT_REPOSITION_BINDING, InputScope$1 as InputScope, KIT_STANDARD_ACTION_IDS, PATH_GESTURE_TAGS, RESIZE_HANDLE_ANCHORS, SELECTION_MOVE_ID, SELECTION_RESIZE_ID, SELECTION_ROTATE_ID, SELECTION_TRANSFORM_ID, STICKY_DEFAULTS, Yoke, actionBindings$1 as actionBindings, actionCursor, actionItemTitle, actionItems, actionSettingsParams, actionShortcuts, actionsTagged, areaSelectAction, areaSelectContribution, bindingId, bodyPredicate, buildDepsFromRequires$1 as buildDepsFromRequires, clearSelectionAction, clipboardCopyAction, clipboardCutAction, clipboardPasteAction, clipboardPasteEventAction, cloneAction, commitDeleteToScene, computeSliceOps, contextMenuAction, cornerPoint, createDeleteAction, createDepRegistry, createDispatcher$1 as createDispatcher, createPointerFollower, createResizeAction, defaultCommitAdapter, defineTool, deleteAction, deleteAnchorsAction, deleteScratch, dragPanContribution, editAnchorsAction, editingLayer, enterTextEditAction, evaluateActive$1 as evaluateActive, evaluateEnabled$1 as evaluateEnabled, exitPathEditToolAction, flipAction, getScratch$1 as getScratch, handlePoint, heldKeySpec$1 as heldKeySpec, hiddenSourceDeleteOps, hitPredicate$1 as hitPredicate, inPlane, insertAction, insertLayer, insertRepositionAction, isCornerHandle, isToolSet, keySpecShortcut, keysHeld, lassoSelectAction, makePinchZoomAction, makeViewportWheelPanAction, makeViewportZoomAction, matchActionItem, modifierStateOf, moveAction, nudgeAnchorsDownAction, nudgeAnchorsLeftAction, nudgeAnchorsRightAction, nudgeAnchorsUpAction, onEmptyCanvas, openContextMenu, overlaysOf$1 as overlaysOf, pathEditToolAction, pathEditToolActive, pathOperationTags, pickTopMostHit, pinchZoomAction, placeAction, readActionSettings, resizeAction, resizeHandlesFor, resolveBindingOverrides, resolveParams$1 as resolveParams, resolveSchemaMenu, roleReader$1 as roleReader, rotateAction, scratchKey$1 as scratchKey, selectAnchorAction, selectFromLasso, selectionLayer, selectionMoveBindings, selectionMoveContribution, selectionResizeBindings, selectionResizeContribution, selectionRotateBindings, selectionRotateContribution, selectionTransformBindings, selectionTransformContribution, setScratch$1 as setScratch, sliceAction, specificity, stickyData, stickyNodeFactory, taggedActionItems, toolIdsOf$1 as toolIdsOf, toolSet$1 as toolSet, toolSetHas, tuneAction, useAction, useActionsRegistry$1 as useActionsRegistry, useActiveToolContext, useBooleansAdapterSource, useCommand, useDepRegistry$1 as useDepRegistry, useDepSource$1 as useDepSource, useEllipseTool, useEyedropperTool, useGestureDispatcher$1 as useGestureDispatcher, useHandTool, useImageTool, useKeybindings, useLassoTool, useLatest$1 as useLatest, useLineTool, useMeasureTool, useMenuHost$1 as useMenuHost, useMenus, useOngoingAction, useOpenKeymap, useOptionalActiveToolContext$1 as useOptionalActiveToolContext, useOptionalDepRegistry$1 as useOptionalDepRegistry, usePenTool, usePencilTool, usePolygonTool, usePoseDescriptorDepSource, useRectTool, useResizePolicy, useSelectTool, useSliceDep, useSliceDepSource, useSliceTool, useStandardActions, useStarTool, useStickyTool, useTextTool, useTools$1 as useTools, useYoke, viewportDragPanAction, viewportWheelPanAction, viewportZoomAction, withoutTools };
|
|
67
|
+
export { AREA_SELECT_ID, ActionDisabledReason$1 as ActionDisabledReason, ActionsProvider$1 as ActionsProvider, ActiveToolContextProvider$1 as ActiveToolContextProvider, ActiveToolContextProviderIfRoot$1 as ActiveToolContextProviderIfRoot, CORNER_ANCHORS, DRAG_PAN_ID, DepRegistryProvider$1 as DepRegistryProvider, EDGE_HANDLE_MIN_RADII, GROUP_ENTRY_ID, INSERT_REPOSITION_BINDING, InputScope$1 as InputScope, KIT_STANDARD_ACTION_IDS, PATH_GESTURE_TAGS, RESIZE_HANDLE_ANCHORS, SELECTION_MOVE_ID, SELECTION_RESIZE_ID, SELECTION_ROTATE_ID, SELECTION_TRANSFORM_ID, STICKY_DEFAULTS, Yoke, actionBindings$1 as actionBindings, actionCursor, actionItemTitle, actionItems, actionSettingsParams, actionShortcuts, actionsTagged, areaSelectAction, areaSelectContribution, bindingId, bodyPredicate, buildDepsFromRequires$1 as buildDepsFromRequires, clearSelectionAction, clipboardCopyAction, clipboardCutAction, clipboardPasteAction, clipboardPasteEventAction, cloneAction, commitDeleteToScene, computeSliceOps, containerScrollAction, contextMenuAction, cornerPoint, createDeleteAction, createDepRegistry, createDispatcher$1 as createDispatcher, createGroupEntryContribution, createPointerFollower, createResizeAction, defaultCommitAdapter, defineTool, deleteAction, deleteAnchorsAction, deleteScratch, dragPanContribution, editAnchorsAction, editingLayer, enterTextEditAction, evaluateActive$1 as evaluateActive, evaluateEnabled$1 as evaluateEnabled, exitPathEditToolAction, flipAction, getScratch$1 as getScratch, handlePoint, heldKeySpec$1 as heldKeySpec, hiddenSourceDeleteOps, hitPredicate$1 as hitPredicate, inPlane, insertAction, insertLayer, insertRepositionAction, isCornerHandle, isToolSet, keySpecShortcut, keysHeld, lassoSelectAction, makePinchZoomAction, makeViewportWheelPanAction, makeViewportZoomAction, matchActionItem, modifierStateOf, moveAction, nudgeAnchorsDownAction, nudgeAnchorsLeftAction, nudgeAnchorsRightAction, nudgeAnchorsUpAction, onEmptyCanvas, openContextMenu, overlaysOf$1 as overlaysOf, pathEditToolAction, pathEditToolActive, pathOperationTags, pickTopMostHit, pinchZoomAction, placeAction, readActionSettings, refusalOf, resizeAction, resizeHandlesFor, resolveBindingOverrides, resolveParams$1 as resolveParams, resolveSchemaMenu, roleReader$1 as roleReader, rotateAction, scratchKey$1 as scratchKey, scrollRange, scrollableAt, selectAnchorAction, selectFromLasso, selectionLayer, selectionMoveBindings, selectionMoveContribution, selectionResizeBindings, selectionResizeContribution, selectionRotateBindings, selectionRotateContribution, selectionTransformBindings, selectionTransformContribution, setScratch$1 as setScratch, sliceAction, specificity, stickyData, stickyNodeFactory, taggedActionItems, toolIdsOf$1 as toolIdsOf, toolSet$1 as toolSet, toolSetHas, tuneAction, useAction, useActionsRegistry$1 as useActionsRegistry, useActiveToolContext, useBooleansAdapterSource, useCommand, useDepRegistry$1 as useDepRegistry, useDepSource$1 as useDepSource, useEllipseTool, useEyedropperTool, useGestureDispatcher$1 as useGestureDispatcher, useGroupEntryContribution, useHandTool, useImageTool, useKeybindings, useLassoTool, useLatest$1 as useLatest, useLineTool, useMeasureTool, useMenuHost$1 as useMenuHost, useMenus, useOngoingAction, useOpenKeymap, useOptionalActiveToolContext$1 as useOptionalActiveToolContext, useOptionalDepRegistry$1 as useOptionalDepRegistry, usePenTool, usePencilTool, usePolygonTool, usePoseDescriptorDepSource, useRectTool, useResizePolicy, useSelectTool, useSliceDep, useSliceDepSource, useSliceTool, useStandardActions, useStarTool, useStickyTool, useTextTool, useTools$1 as useTools, useYoke, viewportDragPanAction, viewportWheelPanAction, viewportZoomAction, withoutTools };
|
package/dist/barrel/scene.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { IDENTITY_POSE_COMPOSITION, composeWorldPose, composesFrames, rebaseLocalPose } from "../core/scene/composeFrame.js";
|
|
2
|
-
import { RECT_POSE_COMPOSITION, RIGID_POSE_COMPOSITION, composeRectPose, composeRigidPose, decomposeRectPose, decomposeRigidPose, translateRectPose, worldPoseLookup } from "../core/scene/composePose.js";
|
|
1
|
+
import { IDENTITY_POSE_COMPOSITION, childFrameAt, composeChildFrame, composeWorldPose, composesFrames, rebaseLocalPose } from "../core/scene/composeFrame.js";
|
|
2
|
+
import { RECT_POSE_COMPOSITION, RIGID_POSE_COMPOSITION, composeRectPose, composeRigidPose, decomposeRectPose, decomposeRigidPose, scrollRectPose, scrollRigidPose, translateRectPose, worldPoseLookup } from "../core/scene/composePose.js";
|
|
3
3
|
import { documentOf } from "../core/scene/documentOf.js";
|
|
4
4
|
import { nodeAsShown } from "../core/scene/nodeAsShown.js";
|
|
5
5
|
import { definesFrame, derivedDepOf, derivedPose, documentDepOf, documentPose, effectivePose } from "../core/scene/effectivePose.js";
|
|
6
6
|
import { axisAlignedBounds, unionAABB, unionBounds } from "../core/geometry/unionBounds.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
7
|
+
import { createScrollOffsets, scrolledFrames, viewPoseAdapter } from "../core/scene/scrollOffsets.js";
|
|
8
|
+
import { scenePoseAdapter, sceneViewPoseAdapter } from "../core/scene/scenePoseAdapter.js";
|
|
9
|
+
import { carriedDescendants, heldInFrame, sceneCarrySource } from "../core/scene/carryDescendants.js";
|
|
10
|
+
import { BOOLEAN_OF_CHILDREN, booleanOfChildren, booleanOpOf } from "../core/scene/booleanOfChildren.js";
|
|
11
|
+
import { measureBetween, measureEndsOf, measureNode, measurePose, measurementOf } from "../domains/measure/measurement.js";
|
|
10
12
|
import { asNodeId } from "../core/scene/types.js";
|
|
11
13
|
import { annotationLayerIds, isAnnotationLayer, isAnnotationNode } from "../core/scene/annotation.js";
|
|
12
14
|
import { hidesSubtree, isNodeHidden, isNodeLocked, nodeGates } from "../core/scene/nodeGates.js";
|
|
@@ -27,16 +29,18 @@ import { createSetChildOrderOp } from "../core/ops/reorder/setChildOrder.js";
|
|
|
27
29
|
import { createMoveToIndexOp, createReorderOp } from "../core/ops/reorder/index.js";
|
|
28
30
|
import { CLIP_NOTHING, clipNothing } from "../core/scene/clipNothing.js";
|
|
29
31
|
import { UNION_OF_CHILDREN, unionOfChildren } from "../core/scene/kitRegistry.js";
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
32
|
+
import { booleanGroupFields } from "../core/scene/booleanGroup.js";
|
|
33
|
+
import { createMeasurements, currentMeasureId, measureIds } from "../domains/measure/measurements.js";
|
|
34
|
+
import { measureAt, measureEndSource } from "../domains/measure/measureHit.js";
|
|
35
|
+
import { MEASURE_ACTION_IDS } from "../domains/measure/actionIds.js";
|
|
33
36
|
import { writtenBy } from "../core/ops/writtenBy.js";
|
|
34
37
|
import { createPoseOverrides } from "../core/scene/poseOverrides.js";
|
|
35
38
|
import { createArrangeOp } from "../core/ops/arrange.js";
|
|
36
39
|
import { createHistory as createHistory$1 } from "../core/ops/createHistory.js";
|
|
37
40
|
import { SCENE_HISTORY_FORM } from "../core/scene/historyForm.js";
|
|
38
41
|
import { sceneSelectionStore } from "../core/scene/sceneSelection.js";
|
|
39
|
-
import {
|
|
42
|
+
import { localizeInScene, localizeWorldPoses, worldPosesOf } from "../core/scene/worldSave.js";
|
|
43
|
+
import { isSerializedScene, nodeKindOf, specsFromSerialized } from "../core/scene/serialization.js";
|
|
40
44
|
import { createScene, sceneFromJSON } from "../core/scene/scene.js";
|
|
41
45
|
import { createSetTextOp } from "../core/ops/setText.js";
|
|
42
46
|
import { createSetDependsOnOp } from "../core/ops/setDependsOn.js";
|
|
@@ -49,9 +53,9 @@ import { useScene } from "../core/scene/useScene.js";
|
|
|
49
53
|
import { reconcileSpecs } from "../core/scene/reconcileSpecs.js";
|
|
50
54
|
import { sceneSharedUnitScopes, sceneUnitScopes } from "../core/scene/unitScopes.js";
|
|
51
55
|
import { createPoseFeed } from "../core/scene/poseFeed.js";
|
|
52
|
-
import { MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID } from "../
|
|
53
|
-
import { measurementsContribution } from "../
|
|
56
|
+
import { MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID } from "../domains/measure/measureLayer.js";
|
|
57
|
+
import { measurementsContribution } from "../domains/measure/measureContribution.js";
|
|
54
58
|
import { MIXED } from "@weasel-js/registry";
|
|
55
59
|
import { swapOp } from "@weasel-js/history";
|
|
56
60
|
|
|
57
|
-
export { CLIP_NOTHING, IDENTITY_POSE_COMPOSITION, MEASURE_ACTION_IDS, MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID, MIXED, RECT_POSE_COMPOSITION, RIGID_POSE_COMPOSITION, SCENE_HISTORY_FORM, SceneArrivalRefused, UNION_OF_CHILDREN, annotationLayerIds, applyOpsTo, asNodeId, axisAlignedBounds, canBringForward, canSendBackward, carriedDescendants, clipNothing, composeRectPose, composeRigidPose, composeWorldPose, composesFrames, createArrangeOp, createDeleteOp, createHistory$1 as createHistory, createInsertOp, createMeasurements, createMoveToIndexOp, createPoseFeed, createPoseOverrides, createReorderOp, createReparentOp, createScene, createSetChildOrderOp, createSetDataOp, createSetDependsOnOp, createSetHiddenOp, createSetLayerOp, createSetLayoutOp, createSetLockedOp, createSetPathOp, createSetSelectionOp, createSetTextOp, createTransformOp, currentMeasureId, decomposeRectPose, decomposeRigidPose, definesFrame, derivedDepOf, derivedPose, dispatchApplyBatch, documentDepOf, documentOf, documentPose, effectivePose, hasChildren, hidesSubtree, isAnnotationLayer, isAnnotationNode, isLeaf, isNodeHidden, isNodeLocked, measureAt, measureBetween, measureEndSource, measureEndsOf, measureIds, measureNode, measurePose, measurementOf, measurementsContribution, nestedHitTester, nodeAsShown, nodeGates, nodeKindOf, opFactoryRegistry, rebaseLocalPose, rebuildOp, reconcileSpecs, registerOpFactory, registeredOpNames, sceneCarrySource, sceneFromJSON, scenePoseAdapter, sceneSelectionStore, sceneSharedUnitScopes, sceneUnitScopes, specsFromSerialized, statedFields, swapOp, translateRectPose, unionAABB, unionBounds, unionOfChildren, unionOfChildrenVia, useScene, worldPoseLookup, writtenBy };
|
|
61
|
+
export { BOOLEAN_OF_CHILDREN, CLIP_NOTHING, IDENTITY_POSE_COMPOSITION, MEASURE_ACTION_IDS, MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID, MIXED, RECT_POSE_COMPOSITION, RIGID_POSE_COMPOSITION, SCENE_HISTORY_FORM, SceneArrivalRefused, UNION_OF_CHILDREN, annotationLayerIds, applyOpsTo, asNodeId, axisAlignedBounds, booleanGroupFields, booleanOfChildren, booleanOpOf, canBringForward, canSendBackward, carriedDescendants, childFrameAt, clipNothing, composeChildFrame, composeRectPose, composeRigidPose, composeWorldPose, composesFrames, createArrangeOp, createDeleteOp, createHistory$1 as createHistory, createInsertOp, createMeasurements, createMoveToIndexOp, createPoseFeed, createPoseOverrides, createReorderOp, createReparentOp, createScene, createScrollOffsets, createSetChildOrderOp, createSetDataOp, createSetDependsOnOp, createSetHiddenOp, createSetLayerOp, createSetLayoutOp, createSetLockedOp, createSetPathOp, createSetSelectionOp, createSetTextOp, createTransformOp, currentMeasureId, decomposeRectPose, decomposeRigidPose, definesFrame, derivedDepOf, derivedPose, dispatchApplyBatch, documentDepOf, documentOf, documentPose, effectivePose, hasChildren, heldInFrame, hidesSubtree, isAnnotationLayer, isAnnotationNode, isLeaf, isNodeHidden, isNodeLocked, isSerializedScene, localizeInScene, localizeWorldPoses, measureAt, measureBetween, measureEndSource, measureEndsOf, measureIds, measureNode, measurePose, measurementOf, measurementsContribution, nestedHitTester, nodeAsShown, nodeGates, nodeKindOf, opFactoryRegistry, rebaseLocalPose, rebuildOp, reconcileSpecs, registerOpFactory, registeredOpNames, sceneCarrySource, sceneFromJSON, scenePoseAdapter, sceneSelectionStore, sceneSharedUnitScopes, sceneUnitScopes, sceneViewPoseAdapter, scrollRectPose, scrollRigidPose, scrolledFrames, specsFromSerialized, statedFields, swapOp, translateRectPose, unionAABB, unionBounds, unionOfChildren, unionOfChildrenVia, useScene, viewPoseAdapter, worldPoseLookup, worldPosesOf, writtenBy };
|
package/dist/barrel/text.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { strokeRegion } from "../interactions/actions/outlines/strokeRegion.js";
|
|
2
2
|
import { applyCreateOutlines } from "../interactions/actions/outlines/createOutlines.js";
|
|
3
3
|
import { applyOutlineStroke } from "../interactions/actions/outlines/outlineStroke.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { TEXT_EDIT_FONT_HOLD, TextOutlinesError as TextOutlinesError$1, charOffsetToDomPosition, domPositionToCharOffset, domToRuns, loadTextOutlines as loadTextOutlines$1, runsToDom, textCommand, textCommandFromPose, textCommandFromRuns, textToPath as textToPath$1, textToPathsByPaint as textToPathsByPaint$1, useTextEdit } from "../
|
|
4
|
+
import { useSceneTextEdit } from "../domains/text/useSceneTextEdit.js";
|
|
5
|
+
import { createTextLayer } from "../domains/text/textLayer.js";
|
|
6
|
+
import { TEXT_EDIT_FONT_HOLD, TextOutlinesError as TextOutlinesError$1, charOffsetToDomPosition, domPositionToCharOffset, domToRuns, loadTextOutlines as loadTextOutlines$1, runsToDom, textCommand, textCommandFromPose, textCommandFromRuns, textToPath as textToPath$1, textToPathsByPaint as textToPathsByPaint$1, useTextEdit } from "../domains/text/index.js";
|
|
7
7
|
import { useCreateOutlinesAdapter } from "../interactions/actions/outlines/useCreateOutlinesAdapter.js";
|
|
8
|
-
import { DEFAULT_DECORATION_METRICS, DEFAULT_TEXT_FILL as DEFAULT_TEXT_FILL$1, DEFAULT_TEXT_STYLE, MARKDOWN_RUN_GRAMMAR, SCRIPT_METRICS, SMALL_CAPS_SCALE, applyStyleToRange, cachedLayoutRuns, cachedPaintRuns, caretIndexAt as caretIndexAt$1, createMarkdownRenderer, decorationMetrics, defaultLabelTextRenderer, effectiveRangeStyle, fitTextPose, fontString, isBoldWeight, isSmallCapsLetter, isTextData as isTextData$1, layoutMarkdown, layoutRuns, layoutTextPose, markdownToRuns, measureText, measureTextBounds as measureTextBounds$1, measuredWidth, nodeHasFlag, numericWeight, paintRuns, paragraphDirection, patchRangeStyle, pointInTextPose as pointInTextPose$1, rangeWeight, registerBidi, renderLabel, resolveAlign
|
|
8
|
+
import { DEFAULT_DECORATION_METRICS, DEFAULT_TEXT_FILL as DEFAULT_TEXT_FILL$1, DEFAULT_TEXT_STYLE, MARKDOWN_RUN_GRAMMAR, QUAD_STRIDE, SCRIPT_METRICS, SMALL_CAPS_SCALE, applyStyleToRange, cachedLayoutRuns, cachedPaintRuns, caretIndexAt as caretIndexAt$1, createMarkdownRenderer, decorationMetrics, defaultLabelTextRenderer, dropRuns, effectiveRangeStyle, fitTextPose, fontString, halfLeadingFor, isBoldWeight, isSmallCapsLetter, isTextData as isTextData$1, layoutMarkdown, layoutRuns, layoutTextPose, markdownToRuns, measureText, measureTextBounds as measureTextBounds$1, measuredWidth, nodeHasFlag, numericWeight, paintRuns, paragraphDirection, patchRangeStyle, pointInTextPose as pointInTextPose$1, rangeWeight, registerBidi, registerShaper, renderLabel, resolveAlign, resolveRunFace, resolveRuns, resolveTextStyle, runsToMarkdown, runsToPlainText as runsToPlainText$1, scriptMetrics, scriptMetricsFor, setFlagOverRange, smallCapsScale, smallCapsScaleFor, smallCapsText, styleAtRange, textLineBoxes as textLineBoxes$1, textPoseLayoutInput, toRuns, transformRunTexts, unboldPatch, verticalAlignOffset } from "@weasel-js/text";
|
|
9
9
|
|
|
10
|
-
export { DEFAULT_DECORATION_METRICS, DEFAULT_TEXT_FILL$1 as DEFAULT_TEXT_FILL, DEFAULT_TEXT_STYLE, MARKDOWN_RUN_GRAMMAR, SCRIPT_METRICS, SMALL_CAPS_SCALE, TEXT_EDIT_FONT_HOLD, TextOutlinesError$1 as TextOutlinesError, applyCreateOutlines, applyOutlineStroke, applyStyleToRange, cachedLayoutRuns, cachedPaintRuns, caretIndexAt$1 as caretIndexAt, charOffsetToDomPosition, createMarkdownRenderer, createTextLayer, decorationMetrics, defaultLabelTextRenderer, domPositionToCharOffset, domToRuns, effectiveRangeStyle, fitTextPose, fontString, isBoldWeight, isSmallCapsLetter, isTextData$1 as isTextData, layoutMarkdown, layoutRuns, layoutTextPose, loadTextOutlines$1 as loadTextOutlines, markdownToRuns, measureText, measureTextBounds$1 as measureTextBounds, measuredWidth, nodeHasFlag, numericWeight, paintRuns, paragraphDirection, patchRangeStyle, pointInTextPose$1 as pointInTextPose, rangeWeight, registerBidi, renderLabel, resolveAlign
|
|
10
|
+
export { DEFAULT_DECORATION_METRICS, DEFAULT_TEXT_FILL$1 as DEFAULT_TEXT_FILL, DEFAULT_TEXT_STYLE, MARKDOWN_RUN_GRAMMAR, QUAD_STRIDE, SCRIPT_METRICS, SMALL_CAPS_SCALE, TEXT_EDIT_FONT_HOLD, TextOutlinesError$1 as TextOutlinesError, applyCreateOutlines, applyOutlineStroke, applyStyleToRange, cachedLayoutRuns, cachedPaintRuns, caretIndexAt$1 as caretIndexAt, charOffsetToDomPosition, createMarkdownRenderer, createTextLayer, decorationMetrics, defaultLabelTextRenderer, domPositionToCharOffset, domToRuns, dropRuns, effectiveRangeStyle, fitTextPose, fontString, halfLeadingFor, isBoldWeight, isSmallCapsLetter, isTextData$1 as isTextData, layoutMarkdown, layoutRuns, layoutTextPose, loadTextOutlines$1 as loadTextOutlines, markdownToRuns, measureText, measureTextBounds$1 as measureTextBounds, measuredWidth, nodeHasFlag, numericWeight, paintRuns, paragraphDirection, patchRangeStyle, pointInTextPose$1 as pointInTextPose, rangeWeight, registerBidi, registerShaper, renderLabel, resolveAlign, resolveRunFace, resolveRuns, resolveTextStyle, runsToDom, runsToMarkdown, runsToPlainText$1 as runsToPlainText, scriptMetrics, scriptMetricsFor, setFlagOverRange, smallCapsScale, smallCapsScaleFor, smallCapsText, strokeRegion, styleAtRange, textCommand, textCommandFromPose, textCommandFromRuns, textLineBoxes$1 as textLineBoxes, textPoseLayoutInput, textToPath$1 as textToPath, textToPathsByPaint$1 as textToPathsByPaint, toRuns, transformRunTexts, unboldPatch, useCreateOutlinesAdapter, useSceneTextEdit, useTextEdit, verticalAlignOffset };
|
package/dist/barrel/viewport.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { VERSION } from "../version.js";
|
|
2
2
|
import { DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, ZOOM_FLOOR, normalizeZoom as normalizeZoom$1 } from "../core/viewport/zoomBounds.js";
|
|
3
3
|
import { normalizeView, viewToTransform, viewZoom } from "../core/viewport/view.js";
|
|
4
|
-
import { createViewportLayer } from "../
|
|
5
|
-
import { createViewResolver } from "../
|
|
4
|
+
import { createViewportLayer } from "../domains/viewports/viewportLayer.js";
|
|
5
|
+
import { createViewResolver } from "../domains/viewports/viewResolver.js";
|
|
6
6
|
import { fitViewToBounds } from "../core/viewport/fitViewToBounds.js";
|
|
7
|
-
import { aimSpace2d, isRectAim, rectAim, viewForAim } from "../
|
|
7
|
+
import { aimSpace2d, isRectAim, rectAim, viewForAim } from "../domains/viewports/aim.js";
|
|
8
8
|
import { deriveParallaxView, fromPlane, planeMap, planeMatrix, planeToPlane, rectFromPlane, rectToPlane, toPlane } from "../core/viewport/parallax.js";
|
|
9
|
-
import { usePoseRun } from "../
|
|
9
|
+
import { usePoseRun } from "../domains/poseRun/usePoseRun.js";
|
|
10
10
|
import { watchDevicePixelRatio } from "../core/device/watchDevicePixelRatio.js";
|
|
11
11
|
import { DeviceProfileProvider, useDeviceProfile } from "../core/device/useDeviceProfile.js";
|
|
12
12
|
import { useCanvasSize, useElementSize } from "../core/viewport/useCanvasSize.js";
|
|
@@ -35,10 +35,10 @@ import { useVelocityTracker } from "../core/viewport/useVelocityTracker.js";
|
|
|
35
35
|
import { useDecayLoop } from "../core/viewport/useDecayLoop.js";
|
|
36
36
|
import { interpolateView } from "../core/viewport/interpolateView.js";
|
|
37
37
|
import { VIEW_ANIMATION_KEY, useViewAnimation, useViewAnimationOn, viewAxes } from "../core/viewport/useViewAnimation.js";
|
|
38
|
-
import { VIEW_MARKER_DEFAULT_STYLE, VIEW_MARKER_HIT_SLOP_PX, createViewMarkerLayer, grabViewMarker } from "../
|
|
38
|
+
import { VIEW_MARKER_DEFAULT_STYLE, VIEW_MARKER_HIT_SLOP_PX, createViewMarkerLayer, grabViewMarker } from "../domains/viewports/viewMarker.js";
|
|
39
39
|
import { CanvasView } from "../canvas/CanvasView.js";
|
|
40
40
|
import { ViewMarker } from "../canvas/ViewMarker.js";
|
|
41
|
-
import { VIEW_MARKER_DRAG, createViewMarkerContribution, viewMarkerDragAction } from "../
|
|
41
|
+
import { VIEW_MARKER_DRAG, createViewMarkerContribution, viewMarkerDragAction } from "../domains/viewports/viewMarkerDrag.js";
|
|
42
42
|
import { SceneViewCanvas } from "../canvas/SceneViewCanvas.js";
|
|
43
43
|
import { DrawCanvas } from "../canvas/DrawCanvas.js";
|
|
44
44
|
import { FALLBACK_ACCENT, accentColorOf } from "../canvas/accentColor.js";
|
|
@@ -46,7 +46,7 @@ import { gateLayer } from "../core/layers/gateLayer.js";
|
|
|
46
46
|
import { meanScale as meanScale$1, pxExtent as pxExtent$1, scaleDelta as scaleDelta$1, screenAngleOf as screenAngleOf$1, standoff as standoff$1, withinPxBox, withinPxRadius as withinPxRadius$1 } from "@weasel-js/geom";
|
|
47
47
|
import { DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_VELOCITY_DECAY, createSimulation } from "@weasel-js/simulation";
|
|
48
48
|
import { useSimulation } from "@weasel-js/simulation/react";
|
|
49
|
-
import { useCanvasFocus,
|
|
49
|
+
import { useCanvasFocus, useVisibleRaf as useVisibleRaf$1 } from "@weasel-js/react";
|
|
50
50
|
import { clientToCanvas as clientToCanvas$1 } from "@weasel-js/routing";
|
|
51
51
|
|
|
52
|
-
export { ANCHOR_HIT_BASE_PX, COARSE_TARGET_SCALE, CanvasView, DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_DEVICE_PROFILE$1 as DEFAULT_DEVICE_PROFILE, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, DEFAULT_VELOCITY_DECAY, DeviceProfileProvider, DrawCanvas, FALLBACK_ACCENT, HANDLE_BASE_PX, PAGES_DOC_KEY, ROTATION_HANDLE_BASE_PX, SceneViewCanvas, VERSION, VIEW_ANIMATION_KEY, VIEW_MARKER_DEFAULT_STYLE, VIEW_MARKER_DRAG, VIEW_MARKER_HIT_SLOP_PX, ViewMarker, WHEEL_ZOOM_STEP, ZOOM_FLOOR, accentColorOf, addPage, adjacentPage, aimSpace2d, axisZoomFactor, clampView, clientToCanvas$1 as clientToCanvas, computeFitViewport, computeWheelAction, createSimulation, createVelocityTracker, createViewMarkerContribution, createViewMarkerLayer, createViewResolver, createViewportLayer, deriveParallaxView, fitToBounds, fitViewToBounds, fitViewToPage, fitZoom, fromPlane, gateLayer, grabViewMarker, interpolateView, isPlainObject, isRectAim, layoutPages, meanScale$1 as meanScale, movePage, nextPageId, normalizeView, normalizeZoom$1 as normalizeZoom, pageAt, pageHolding, pageInView, pageMembers, pageName, pageOfBounds, pagesBounds, pagesLayer, pagesOf, placedPagesOf, planeMap, planeMatrix, planeToPlane, pxExtent$1 as pxExtent, rectAim, rectFromPlane, rectToPlane, removePage, renamePage, resizePage, resolveDeviceProfile$1 as resolveDeviceProfile, scaleDelta$1 as scaleDelta, sceneNodeClientRect, screenAngleOf$1 as screenAngleOf, screenToWorld, setPages, stableStringify, standoff$1 as standoff, startThresholdDrag, toPlane, useAutoCenter, useCanvasFocus, useCanvasSize, useDecayLoop, useDeviceProfile, useDragHandle, useDropZone, useElementSize,
|
|
52
|
+
export { ANCHOR_HIT_BASE_PX, COARSE_TARGET_SCALE, CanvasView, DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_DEVICE_PROFILE$1 as DEFAULT_DEVICE_PROFILE, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, DEFAULT_VELOCITY_DECAY, DeviceProfileProvider, DrawCanvas, FALLBACK_ACCENT, HANDLE_BASE_PX, PAGES_DOC_KEY, ROTATION_HANDLE_BASE_PX, SceneViewCanvas, VERSION, VIEW_ANIMATION_KEY, VIEW_MARKER_DEFAULT_STYLE, VIEW_MARKER_DRAG, VIEW_MARKER_HIT_SLOP_PX, ViewMarker, WHEEL_ZOOM_STEP, ZOOM_FLOOR, accentColorOf, addPage, adjacentPage, aimSpace2d, axisZoomFactor, clampView, clientToCanvas$1 as clientToCanvas, computeFitViewport, computeWheelAction, createSimulation, createVelocityTracker, createViewMarkerContribution, createViewMarkerLayer, createViewResolver, createViewportLayer, deriveParallaxView, fitToBounds, fitViewToBounds, fitViewToPage, fitZoom, fromPlane, gateLayer, grabViewMarker, interpolateView, isPlainObject, isRectAim, layoutPages, meanScale$1 as meanScale, movePage, nextPageId, normalizeView, normalizeZoom$1 as normalizeZoom, pageAt, pageHolding, pageInView, pageMembers, pageName, pageOfBounds, pagesBounds, pagesLayer, pagesOf, placedPagesOf, planeMap, planeMatrix, planeToPlane, pxExtent$1 as pxExtent, rectAim, rectFromPlane, rectToPlane, removePage, renamePage, resizePage, resolveDeviceProfile$1 as resolveDeviceProfile, scaleDelta$1 as scaleDelta, sceneNodeClientRect, screenAngleOf$1 as screenAngleOf, screenToWorld, setPages, stableStringify, standoff$1 as standoff, startThresholdDrag, toPlane, useAutoCenter, useCanvasFocus, useCanvasSize, useDecayLoop, useDeviceProfile, useDragHandle, useDropZone, useElementSize, useHandleDrag, useNodeOverlayFrame, usePoseRun, useSimulation, useVelocityTracker, useViewAnimation, useViewAnimationOn, useVisibleRaf$1 as useVisibleRaf, viewAxes, viewForAim, viewMarkerDragAction, viewToTransform, viewZoom, viewportWorldRect, watchDevicePixelRatio, wheelPan, wheelZoom, wheelZoomFactor, withinPxBox, withinPxRadius$1 as withinPxRadius, worldToScreen, zoomAt };
|
package/dist/canvas/Canvas.js
CHANGED
|
@@ -118,7 +118,7 @@ function CanvasInner(props, ref) {
|
|
|
118
118
|
gestureSource: props.gestureSource,
|
|
119
119
|
previewPoseExtra: props.previewPoseExtra,
|
|
120
120
|
getScale: () => viewRef.current.scale,
|
|
121
|
-
selection: props.selection?.current ?? NO_SELECTION,
|
|
121
|
+
selection: () => props.selection?.current ?? NO_SELECTION,
|
|
122
122
|
getIsVisible: () => gateRef.current.getIsVisible?.() ?? alwaysVisible,
|
|
123
123
|
layerIsPainted: useViewLayerGate(layerVisibility, layerOrder, () => layers)
|
|
124
124
|
});
|
|
@@ -166,7 +166,7 @@ function CanvasInner(props, ref) {
|
|
|
166
166
|
...frame,
|
|
167
167
|
inputsRef: paintInputsRef,
|
|
168
168
|
gateRef
|
|
169
|
-
}, markPainted);
|
|
169
|
+
}, markPainted, requestRedraw);
|
|
170
170
|
useEffect(() => clearSubscribers, [clearSubscribers]);
|
|
171
171
|
useToolCursor(cursorSink, tools, detached ? inputElement : null, style?.cursor);
|
|
172
172
|
useSurfaceInput(canvasRef, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Canvas.js","names":[],"sources":["../../src/canvas/Canvas.tsx"],"sourcesContent":["/**\n * Low-level WebGL surface + viewport primitive. Composes layers into a single GL render pass,\n * applies a view transform, and delivers hover to the layers that ask for it. It routes no\n * gesture: `<SceneCanvas>` mounts the gesture dispatcher on this same element. Canvas owns NO\n * scene-shaped state — selection, picking, kind registry, scene-aware overlays all live in\n * `<SceneCanvas>`, which wraps it.\n *\n * The `layers` prop is a map keyed by slot name, every slot already a layer. Standard slots\n * render at a canonical position; custom entries (any other key, value carrying `.layer`) insert\n * at `after`/`before` an existing slot, defaulting to the top.\n *\n * @internal\n * @deprecated Bare `<Canvas>` is not a supported consumer surface.\n * Use `<SceneCanvas>` instead.\n */\n\nimport { forwardRef, useCallback, useEffect, useInsertionEffect, useLayoutEffect, useRef } from 'react';\nimport type React from 'react';\nimport type { CanvasExtensionApi } from './canvasExtension';\nimport { registerMountedCanvas } from './mountedCanvases';\nimport { useViewHelpers } from './useViewHelpers';\nimport { useViewLayerGate } from './useViewLayerGate';\nimport { useSurfaceInput } from './useSurfaceInput';\nimport { useOptionalViewRegistry } from './viewRegistry';\nimport { useCanvasSurface } from './useCanvasSurface';\nimport type { CanvasHelpers } from './useViewHelpers';\nimport type { CanvasProps } from './canvasProps';\nimport { useLatest } from '@weasel-js/react';\nimport { SurfaceCanvas } from './SurfaceCanvas';\nimport { useSurfaceSize } from './useSurfaceSize';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { useDebugSink } from '../debug/useDebugSink';\nimport { useToolCursor } from './useToolCursor';\nimport { useCanvasElements } from './useCanvasElements';\nimport { alwaysVisible, useExtraLayers } from './useExtraLayers';\nimport { usePaintedCursor } from './usePaintedCursor';\nimport { useCanvasHandle } from './useCanvasHandle';\nimport { useComposedLayers, useSlotLayers } from './useLayerStack';\nimport { useViewRegistrySurface } from './useViewRegistrySurface';\nimport { useCanvasPaint, usePaintedVersion } from './useCanvasPaint';\nimport { layerHover } from './layerHover';\nimport { useClientToWorld } from './useClientToWorld';\n\nexport type { CanvasProps, CanvasRetainOptions } from './canvasProps';\n\nconst NO_SELECTION: SelectionApi['current'] = [];\n\nfunction CanvasInner<TPose>(\n props: CanvasProps<TPose>,\n ref: React.ForwardedRef<CanvasExtensionApi>,\n) {\n const {\n paintInto, inputElement, tools, viewState, style, getIsVisible, layerVisibility, layerOrder,\n helpersRef, debugSinkRef,\n poseDescriptor: geometry = AUTO_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>,\n } = props;\n\n const { sink: debugSink, overlay: debugOverlay, frameStats, getDebug } = useDebugSink(props.debug);\n const elements = useCanvasElements(paintInto, inputElement);\n const { canvasRef, ownCanvasRef, detached } = elements;\n const { width, height } = useSurfaceSize(props, ownCanvasRef);\n\n // Read by `hitTestExtras`, which is built once and must see live values.\n const helpersForLayersRef = useRef<CanvasHelpers<TPose> | null>(null);\n const dimsRef = useLatest({ width, height });\n // Which layers reach the screen, and which chrome within them: asked by the\n // paint and by every hit-test.\n const gateRef = useLatest({ getIsVisible, layerVisibility, layerOrder });\n\n // The frame loop paints; a committed render only marks the surface dirty, so\n // no prop can reach the paint without repainting it. The thunk defers to\n // `useCanvasPaint` below, which needs inputs this render has not computed yet.\n const paintRef = useRef<() => boolean>(() => false);\n const { lease, requestRedraw, subscribeFrame, subscribeBeforePaint, subscribeResume } = useCanvasSurface(\n useCallback(() => paintRef.current(), []),\n { syncPaint: props.syncPaint ?? false, target: canvasRef, dpr: props.dpr, redrawOn: props.redrawOn, shaders: props.shaders, onCommit: 'redraw' },\n );\n const { getPaintedVersion, markPainted } = usePaintedVersion(props.contentVersion);\n const { extrasRef, extrasVersion, registerLayer, hitTestExtrasIn } = useExtraLayers(gateRef);\n\n const {\n viewRef, setView, getView, subscribeView,\n adoptControlled, announceControlled, clearSubscribers,\n } = viewState;\n\n const toWorld = useClientToWorld(canvasRef, props.clientToWorld, viewRef);\n\n useLayoutEffect(() => {\n const element = canvasRef.current;\n if (!element) return;\n return registerMountedCanvas({ element, getView });\n }, [canvasRef, detached, inputElement, getView]);\n\n const { paintedCursor, paintedCursorLayer, cursorSink } = usePaintedCursor(canvasRef, requestRedraw);\n\n const frame = { viewRef, dimsRef, helpersRef: helpersForLayersRef };\n useCanvasHandle(ref, { ...elements, inputElement, paintCanvas: paintInto?.canvas }, frame, {\n hitTestExtrasIn, clientToWorld: toWorld, requestRedraw, subscribeFrame, subscribeBeforePaint,\n subscribeResume, registerLayer, getView, setView, subscribeView,\n getPaintedVersion, paintedCursor, cursorSink, getDebug,\n });\n\n const viewRegistry = useOptionalViewRegistry();\n\n // One view's overlay-aware state. A hook, so N views are N components each\n // calling it once — not a loop in this body.\n const layers = useSlotLayers(props.layers, tools, props.backgroundFill, props.decorationLayer);\n const { helpers: viewHelpers } = useViewHelpers<TPose>({\n adapter: props.adapter, geometry, boundsOf: props.boundsOf, boundsOfPose: props.boundsOfPose,\n nodes: props.nodes, gestureSource: props.gestureSource, previewPoseExtra: props.previewPoseExtra,\n getScale: () => viewRef.current.scale,\n selection: props.selection?.current ?? NO_SELECTION,\n getIsVisible: () => gateRef.current.getIsVisible?.() ?? alwaysVisible,\n layerIsPainted: useViewLayerGate(layerVisibility, layerOrder, () => layers),\n });\n const helpersForLayers: CanvasHelpers<TPose> = { ...viewHelpers, getDebug: () => debugSink, viewId: null };\n\n useViewRegistrySurface(viewRegistry, layers, frame, { requestRedraw, hitTestExtrasIn, clientToWorld: toWorld, setView: viewState.setViewFromInput });\n const layersWithDebug = useComposedLayers(layers, {\n viewRegistry, debugOverlay, extrasRef, extrasVersion, cursorLayer: paintedCursorLayer,\n }, requestRedraw);\n\n // Everything the paint, hit-testing and the view registry read that a React\n // render owns. `useLatest` and the insertion effect below publish committed\n // renders only, ahead of every layout effect in the commit, any of which may\n // ask for a sync paint.\n const paintInputsRef = useLatest({\n layers: layersWithDebug, width, height, debugSink, frameStats,\n dpr: props.dpr, layerGroups: props.layerGroups, shaders: props.shaders,\n flattenTolerance: props.flattenTolerance, retain: props.retain, imageMinification: props.imageMinification,\n });\n useInsertionEffect(() => {\n adoptControlled();\n helpersForLayersRef.current = helpersForLayers;\n if (helpersRef) helpersRef.current = helpersForLayers;\n if (debugSinkRef) debugSinkRef.current = debugSink;\n });\n useLayoutEffect(() => {\n announceControlled();\n });\n\n useCanvasPaint(paintRef, lease, elements, { ...frame, inputsRef: paintInputsRef, gateRef }, markPainted);\n useEffect(() => clearSubscribers, [clearSubscribers]);\n\n useToolCursor(cursorSink, tools, detached ? inputElement : null, style?.cursor);\n\n useSurfaceInput(canvasRef, {\n focusOnPress: props.autoFocusOnPointerDown ?? true,\n onFocus: props.onFocus,\n onBlur: props.onBlur,\n ...layerHover(layersWithDebug, {\n viewRef, toWorld, layerVisibility, layerOrder, dims: { width, height },\n }),\n });\n\n if (detached) return null;\n\n return (\n <SurfaceCanvas\n ref={elements.setOwnCanvas}\n width={props.width}\n height={props.height}\n tabIndex={props.tabIndex ?? 0} aria-label={props['aria-label']}\n className={props.className} style={style}\n />\n );\n}\n\n/** Forward-ref'd `<canvas>` wrapper. Generic over the pose type, inferred from the\n * `adapter` prop. */\nexport const Canvas = forwardRef(CanvasInner) as <TPose = unknown>(\n props: CanvasProps<TPose> & { ref?: React.ForwardedRef<CanvasExtensionApi> },\n) => ReturnType<typeof CanvasInner>;\n\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Canvas.js","names":[],"sources":["../../src/canvas/Canvas.tsx"],"sourcesContent":["/**\n * Low-level WebGL surface + viewport primitive. Composes layers into a single GL render pass,\n * applies a view transform, and delivers hover to the layers that ask for it. It routes no\n * gesture: `<SceneCanvas>` mounts the gesture dispatcher on this same element. Canvas owns NO\n * scene-shaped state — selection, picking, kind registry, scene-aware overlays all live in\n * `<SceneCanvas>`, which wraps it.\n *\n * The `layers` prop is a map keyed by slot name, every slot already a layer. Standard slots\n * render at a canonical position; custom entries (any other key, value carrying `.layer`) insert\n * at `after`/`before` an existing slot, defaulting to the top.\n *\n * @internal\n * @deprecated Bare `<Canvas>` is not a supported consumer surface.\n * Use `<SceneCanvas>` instead.\n */\n\nimport { forwardRef, useCallback, useEffect, useInsertionEffect, useLayoutEffect, useRef } from 'react';\nimport type React from 'react';\nimport type { CanvasExtensionApi } from './canvasExtension';\nimport { registerMountedCanvas } from './mountedCanvases';\nimport { useViewHelpers } from './useViewHelpers';\nimport { useViewLayerGate } from './useViewLayerGate';\nimport { useSurfaceInput } from './useSurfaceInput';\nimport { useOptionalViewRegistry } from './viewRegistry';\nimport { useCanvasSurface } from './useCanvasSurface';\nimport type { CanvasHelpers } from './useViewHelpers';\nimport type { CanvasProps } from './canvasProps';\nimport { useLatest } from '@weasel-js/react';\nimport { SurfaceCanvas } from './SurfaceCanvas';\nimport { useSurfaceSize } from './useSurfaceSize';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { useDebugSink } from '../debug/useDebugSink';\nimport { useToolCursor } from './useToolCursor';\nimport { useCanvasElements } from './useCanvasElements';\nimport { alwaysVisible, useExtraLayers } from './useExtraLayers';\nimport { usePaintedCursor } from './usePaintedCursor';\nimport { useCanvasHandle } from './useCanvasHandle';\nimport { useComposedLayers, useSlotLayers } from './useLayerStack';\nimport { useViewRegistrySurface } from './useViewRegistrySurface';\nimport { useCanvasPaint, usePaintedVersion } from './useCanvasPaint';\nimport { layerHover } from './layerHover';\nimport { useClientToWorld } from './useClientToWorld';\n\nexport type { CanvasProps, CanvasRetainOptions } from './canvasProps';\n\nconst NO_SELECTION: SelectionApi['current'] = [];\n\nfunction CanvasInner<TPose>(\n props: CanvasProps<TPose>,\n ref: React.ForwardedRef<CanvasExtensionApi>,\n) {\n const {\n paintInto, inputElement, tools, viewState, style, getIsVisible, layerVisibility, layerOrder,\n helpersRef, debugSinkRef,\n poseDescriptor: geometry = AUTO_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>,\n } = props;\n\n const { sink: debugSink, overlay: debugOverlay, frameStats, getDebug } = useDebugSink(props.debug);\n const elements = useCanvasElements(paintInto, inputElement);\n const { canvasRef, ownCanvasRef, detached } = elements;\n const { width, height } = useSurfaceSize(props, ownCanvasRef);\n\n // Read by `hitTestExtras`, which is built once and must see live values.\n const helpersForLayersRef = useRef<CanvasHelpers<TPose> | null>(null);\n const dimsRef = useLatest({ width, height });\n // Which layers reach the screen, and which chrome within them: asked by the\n // paint and by every hit-test.\n const gateRef = useLatest({ getIsVisible, layerVisibility, layerOrder });\n\n // The frame loop paints; a committed render only marks the surface dirty, so\n // no prop can reach the paint without repainting it. The thunk defers to\n // `useCanvasPaint` below, which needs inputs this render has not computed yet.\n const paintRef = useRef<() => boolean>(() => false);\n const { lease, requestRedraw, subscribeFrame, subscribeBeforePaint, subscribeResume } = useCanvasSurface(\n useCallback(() => paintRef.current(), []),\n { syncPaint: props.syncPaint ?? false, target: canvasRef, dpr: props.dpr, redrawOn: props.redrawOn, shaders: props.shaders, onCommit: 'redraw' },\n );\n const { getPaintedVersion, markPainted } = usePaintedVersion(props.contentVersion);\n const { extrasRef, extrasVersion, registerLayer, hitTestExtrasIn } = useExtraLayers(gateRef);\n\n const {\n viewRef, setView, getView, subscribeView,\n adoptControlled, announceControlled, clearSubscribers,\n } = viewState;\n\n const toWorld = useClientToWorld(canvasRef, props.clientToWorld, viewRef);\n\n useLayoutEffect(() => {\n const element = canvasRef.current;\n if (!element) return;\n return registerMountedCanvas({ element, getView });\n }, [canvasRef, detached, inputElement, getView]);\n\n const { paintedCursor, paintedCursorLayer, cursorSink } = usePaintedCursor(canvasRef, requestRedraw);\n\n const frame = { viewRef, dimsRef, helpersRef: helpersForLayersRef };\n useCanvasHandle(ref, { ...elements, inputElement, paintCanvas: paintInto?.canvas }, frame, {\n hitTestExtrasIn, clientToWorld: toWorld, requestRedraw, subscribeFrame, subscribeBeforePaint,\n subscribeResume, registerLayer, getView, setView, subscribeView,\n getPaintedVersion, paintedCursor, cursorSink, getDebug,\n });\n\n const viewRegistry = useOptionalViewRegistry();\n\n // One view's overlay-aware state. A hook, so N views are N components each\n // calling it once — not a loop in this body.\n const layers = useSlotLayers(props.layers, tools, props.backgroundFill, props.decorationLayer);\n const { helpers: viewHelpers } = useViewHelpers<TPose>({\n adapter: props.adapter, geometry, boundsOf: props.boundsOf, boundsOfPose: props.boundsOfPose,\n nodes: props.nodes, gestureSource: props.gestureSource, previewPoseExtra: props.previewPoseExtra,\n getScale: () => viewRef.current.scale,\n selection: () => props.selection?.current ?? NO_SELECTION,\n getIsVisible: () => gateRef.current.getIsVisible?.() ?? alwaysVisible,\n layerIsPainted: useViewLayerGate(layerVisibility, layerOrder, () => layers),\n });\n const helpersForLayers: CanvasHelpers<TPose> = { ...viewHelpers, getDebug: () => debugSink, viewId: null };\n\n useViewRegistrySurface(viewRegistry, layers, frame, { requestRedraw, hitTestExtrasIn, clientToWorld: toWorld, setView: viewState.setViewFromInput });\n const layersWithDebug = useComposedLayers(layers, {\n viewRegistry, debugOverlay, extrasRef, extrasVersion, cursorLayer: paintedCursorLayer,\n }, requestRedraw);\n\n // Everything the paint, hit-testing and the view registry read that a React\n // render owns. `useLatest` and the insertion effect below publish committed\n // renders only, ahead of every layout effect in the commit, any of which may\n // ask for a sync paint.\n const paintInputsRef = useLatest({\n layers: layersWithDebug, width, height, debugSink, frameStats,\n dpr: props.dpr, layerGroups: props.layerGroups, shaders: props.shaders,\n flattenTolerance: props.flattenTolerance, retain: props.retain, imageMinification: props.imageMinification,\n });\n useInsertionEffect(() => {\n adoptControlled();\n helpersForLayersRef.current = helpersForLayers;\n if (helpersRef) helpersRef.current = helpersForLayers;\n if (debugSinkRef) debugSinkRef.current = debugSink;\n });\n useLayoutEffect(() => {\n announceControlled();\n });\n\n useCanvasPaint(paintRef, lease, elements, { ...frame, inputsRef: paintInputsRef, gateRef }, markPainted, requestRedraw);\n useEffect(() => clearSubscribers, [clearSubscribers]);\n\n useToolCursor(cursorSink, tools, detached ? inputElement : null, style?.cursor);\n\n useSurfaceInput(canvasRef, {\n focusOnPress: props.autoFocusOnPointerDown ?? true,\n onFocus: props.onFocus,\n onBlur: props.onBlur,\n ...layerHover(layersWithDebug, {\n viewRef, toWorld, layerVisibility, layerOrder, dims: { width, height },\n }),\n });\n\n if (detached) return null;\n\n return (\n <SurfaceCanvas\n ref={elements.setOwnCanvas}\n width={props.width}\n height={props.height}\n tabIndex={props.tabIndex ?? 0} aria-label={props['aria-label']}\n className={props.className} style={style}\n />\n );\n}\n\n/** Forward-ref'd `<canvas>` wrapper. Generic over the pose type, inferred from the\n * `adapter` prop. */\nexport const Canvas = forwardRef(CanvasInner) as <TPose = unknown>(\n props: CanvasProps<TPose> & { ref?: React.ForwardedRef<CanvasExtensionApi> },\n) => ReturnType<typeof CanvasInner>;\n\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createViewportLayer } from "../
|
|
1
|
+
import { createViewportLayer } from "../domains/viewports/viewportLayer.js";
|
|
2
2
|
import { useDeviceProfile } from "../core/device/useDeviceProfile.js";
|
|
3
3
|
import { viewportWorldRect } from "../core/viewport/viewportWorldRect.js";
|
|
4
4
|
import { clientToWorld } from "../core/viewport/clientToWorld.js";
|
|
@@ -34,6 +34,7 @@ var NO_INPUTS = {
|
|
|
34
34
|
boundsOf: void 0
|
|
35
35
|
};
|
|
36
36
|
var ALWAYS_VISIBLE = () => true;
|
|
37
|
+
var selectionOverlay = (selection) => selection ? { selection } : {};
|
|
37
38
|
var ALL_LAYERS = (s) => s;
|
|
38
39
|
/**
|
|
39
40
|
* One view on a shared canvas. Owns a camera, contributes the viewport node
|
|
@@ -44,24 +45,25 @@ var ALL_LAYERS = (s) => s;
|
|
|
44
45
|
* drawing. Outside a surface that mounts a view registry it is inert.
|
|
45
46
|
*/
|
|
46
47
|
function CanvasView(props) {
|
|
47
|
-
const { id, parent, bounds, layers = ALL_LAYERS, layerVisibility, layerOrder, background, order = Infinity, label, cameraRef, selection: selectionProp, selectionOptions, interactive = true, paint = true } = props;
|
|
48
|
+
const { id, parent, follows, bounds, layers = ALL_LAYERS, layerVisibility, layerOrder, background, order = Infinity, label, cameraRef, selection: selectionProp, selectionOptions, interactive = true, paint = true } = props;
|
|
48
49
|
const registry = useOptionalViewRegistry();
|
|
49
50
|
const depRegistry = useOptionalDepRegistry();
|
|
50
51
|
const depRegistryRef = useLatest(depRegistry);
|
|
51
52
|
const ownSelection = useSelection(selectionOptions);
|
|
52
53
|
const viewSelection = selectionProp ?? (selectionOptions ? ownSelection : void 0);
|
|
53
54
|
const inputs = useOptionalViewInputs();
|
|
54
|
-
const
|
|
55
|
+
const shared = inputs?.selectionApi ?? ownSelection;
|
|
55
56
|
const live = useLatest({
|
|
56
57
|
parent,
|
|
58
|
+
follows,
|
|
57
59
|
bounds,
|
|
58
60
|
layers,
|
|
59
61
|
layerVisibility,
|
|
60
62
|
layerOrder,
|
|
61
63
|
viewSelection,
|
|
62
|
-
|
|
64
|
+
shared
|
|
63
65
|
});
|
|
64
|
-
const { frameIn, rectAt, derivedAt, drawnLayers, layerIsPainted } = useViewNesting(registry, live);
|
|
66
|
+
const { frameIn, rectAt, derivedAt, drawnLayers, layerIsPainted, ownedSelection, selectionNow } = useViewNesting(registry, live);
|
|
65
67
|
/** The rect for the surface's current frame — what a client point and a
|
|
66
68
|
* clamp are measured against outside a draw call. */
|
|
67
69
|
const rectNow = useCallback(() => {
|
|
@@ -111,6 +113,9 @@ function CanvasView(props) {
|
|
|
111
113
|
},
|
|
112
114
|
get clipboard() {
|
|
113
115
|
return base()?.clipboard;
|
|
116
|
+
},
|
|
117
|
+
get handlers() {
|
|
118
|
+
return base()?.handlers;
|
|
114
119
|
}
|
|
115
120
|
};
|
|
116
121
|
}, [
|
|
@@ -129,10 +134,10 @@ function CanvasView(props) {
|
|
|
129
134
|
/** The chrome-caps context this view answers for: its selection, its camera,
|
|
130
135
|
* its dispatcher's in-flight action. */
|
|
131
136
|
const ruleInputs = useCallback(() => ({
|
|
132
|
-
selection:
|
|
137
|
+
selection: selectionNow().get(),
|
|
133
138
|
view: camera(),
|
|
134
139
|
action: dispatcherRef.current.getActiveAction()
|
|
135
|
-
}), [camera,
|
|
140
|
+
}), [camera, selectionNow]);
|
|
136
141
|
const surfaceBoundsOf = inputs?.boundsOf;
|
|
137
142
|
const boundsOf = useMemo(() => surfaceBoundsOf ? (id) => surfaceBoundsOf(id, camera()) : void 0, [surfaceBoundsOf, camera]);
|
|
138
143
|
const surfaceBoundsOfPose = inputs?.boundsOfPose;
|
|
@@ -142,7 +147,7 @@ function CanvasView(props) {
|
|
|
142
147
|
boundsOf,
|
|
143
148
|
boundsOfPose,
|
|
144
149
|
...own,
|
|
145
|
-
selection:
|
|
150
|
+
selection: () => selectionNow().current,
|
|
146
151
|
layerIsPainted,
|
|
147
152
|
getIsVisible: () => inputsRef.current?.chromeCaps?.isVisible(ruleInputs()) ?? ALWAYS_VISIBLE
|
|
148
153
|
});
|
|
@@ -198,19 +203,19 @@ function CanvasView(props) {
|
|
|
198
203
|
inputs?.resizeHandles,
|
|
199
204
|
helpersRef
|
|
200
205
|
]);
|
|
201
|
-
const classifyTarget = useMemo(() => buildClassifyTarget(() =>
|
|
206
|
+
const classifyTarget = useMemo(() => buildClassifyTarget(() => selectionNow().get(), (world) => {
|
|
202
207
|
const i = inputsRef.current;
|
|
203
208
|
const frame = {
|
|
204
209
|
...camera(),
|
|
205
210
|
layerIsPainted
|
|
206
211
|
};
|
|
207
|
-
if (i?.pickBest) return i.pickBest(
|
|
208
|
-
const ids = i?.pickEvery?.(
|
|
212
|
+
if (i?.pickBest) return i.pickBest(world, frame);
|
|
213
|
+
const ids = i?.pickEvery?.(world, frame) ?? [];
|
|
209
214
|
return ids.length > 0 ? ids[ids.length - 1] : null;
|
|
210
215
|
}, (id) => inputsRef.current?.kindOfNode?.(id), (id) => inputsRef.current?.doubleClickNames?.(id) ?? id), [
|
|
211
216
|
camera,
|
|
212
217
|
layerIsPainted,
|
|
213
|
-
|
|
218
|
+
selectionNow,
|
|
214
219
|
inputsRef
|
|
215
220
|
]);
|
|
216
221
|
const registration = useMemo(() => ({
|
|
@@ -238,6 +243,7 @@ function CanvasView(props) {
|
|
|
238
243
|
}),
|
|
239
244
|
layerIsPainted,
|
|
240
245
|
drawnLayers,
|
|
246
|
+
selection: ownedSelection,
|
|
241
247
|
target: {
|
|
242
248
|
dispatcher: dispatcherRef.current,
|
|
243
249
|
affordanceAt,
|
|
@@ -248,7 +254,7 @@ function CanvasView(props) {
|
|
|
248
254
|
ingestion: ingestionApi,
|
|
249
255
|
hitAt: hitAtOf(classifyTarget),
|
|
250
256
|
dispatcher: { cancelAll: (reason) => dispatcherRef.current.cancelAll(reason) },
|
|
251
|
-
...
|
|
257
|
+
...selectionOverlay(ownedSelection())
|
|
252
258
|
}),
|
|
253
259
|
getRuleCtx: () => inputsRef.current?.chromeCaps?.ruleCtx(ruleInputs())
|
|
254
260
|
}
|
|
@@ -273,7 +279,7 @@ function CanvasView(props) {
|
|
|
273
279
|
ingestionApi,
|
|
274
280
|
drawnLayers,
|
|
275
281
|
layerIsPainted,
|
|
276
|
-
|
|
282
|
+
ownedSelection,
|
|
277
283
|
inputsRef,
|
|
278
284
|
helpersRef,
|
|
279
285
|
frameIn,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasView.js","names":[],"sources":["../../src/canvas/CanvasView.tsx"],"sourcesContent":["/**\n * `<CanvasView>` — a second view on an existing canvas: its own camera over a\n * rect of the surface, with input routed to it.\n *\n * Mount one inside `<SceneCanvas>`, or declare the same thing through the\n * surface's `views` prop, which renders one of these per descriptor.\n */\nimport {\n useCallback, useEffect, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useRef,\n} from 'react';\nimport type { Dims, RenderLayer } from 'core/layers/render';\nimport type { View } from 'core/viewport/view';\nimport { clientToWorld } from 'core/viewport/clientToWorld';\nimport { createViewportLayer } from 'features/viewports/viewportLayer';\nimport { createDispatcher } from '@weasel-js/routing';\nimport type { IngestionDep, ViewApi } from 'interactions/actions/depSchema';\nimport { viewportWorldRect } from 'core/viewport/viewportWorldRect';\nimport { useSelection } from 'core/selection/useSelection';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { useViewHelpers } from './useViewHelpers';\nimport { useViewAim } from './useViewAim';\nimport { hitAtOf } from './deps/dispatchSources';\nimport { anchorStateFrom, buildAffordanceAt, buildClassifyTarget, layerAffordance } from './affordanceAt';\nimport { pathFromPlane } from './planeClips';\nimport { useOptionalDepRegistry } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport { useDeviceProfile } from 'core/device/useDeviceProfile';\nimport {\n createGestureSource,\n createDispatcherPreviewSources,\n} from './SceneCanvas/dispatcherGestureBounds';\nimport { useOptionalViewInputs, type SurfaceViewInputs, type ViewRuleInputs } from './viewInputs';\nimport type { CanvasViewProps, ViewRect } from './canvasViewProps';\nexport type { CanvasViewProps, ViewRect } from './canvasViewProps';\nimport { NO_RECT, sizeOf, useViewNesting } from './useViewNesting';\nimport {\n useOptionalViewRegistry,\n surfaceLocal,\n IDENTITY_VIEW,\n UNMEASURED_DIMS,\n type ViewRegistration,\n} from './viewRegistry';\n\n/** What a view builds its helpers from outside a surface: nothing but the\n * default geometry, which answers `null` for every lookup. */\n// A view outside a surface has no inputs to inherit — including a selection,\n// so it falls back to owning one.\nconst NO_INPUTS: Omit<SurfaceViewInputs, 'selectionApi'> = {\n adapter: undefined,\n geometry: AUTO_POSE_DESCRIPTOR as unknown as PoseDescriptor<unknown>,\n boundsOf: undefined,\n};\n\nconst ALWAYS_VISIBLE = (): boolean => true;\n\nconst ALL_LAYERS = (s: readonly RenderLayer<unknown>[]): readonly RenderLayer<unknown>[] => s;\n\n\n/**\n * One view on a shared canvas. Owns a camera, contributes the viewport node\n * that paints it, and registers the dispatch record that sends gestures inside\n * its rect to that camera rather than to the canvas's.\n *\n * Renders nothing itself — it is a declaration, and the surface does the\n * drawing. Outside a surface that mounts a view registry it is inert.\n */\nexport function CanvasView(props: CanvasViewProps): null {\n const {\n id, parent, bounds,\n layers = ALL_LAYERS, layerVisibility, layerOrder, background, order = Infinity, label, cameraRef,\n selection: selectionProp, selectionOptions, interactive = true, paint = true,\n } = props;\n\n const registry = useOptionalViewRegistry();\n const depRegistry = useOptionalDepRegistry();\n const depRegistryRef = useLatest(depRegistry);\n\n // Hooks run unconditionally; the owned selection goes unused unless this\n // view asked for one.\n const ownSelection = useSelection(selectionOptions);\n const viewSelection = selectionProp ?? (selectionOptions ? ownSelection : undefined);\n\n const inputs = useOptionalViewInputs();\n // The selection this view acts on: its own when it has one, the surface's\n // otherwise.\n const selection = viewSelection ?? inputs?.selectionApi ?? ownSelection;\n\n // Everything the registration reads is behind a ref: the registration object\n // is registered once and must not churn, but what it answers with has to be\n // the last committed render's.\n const live = useLatest({\n parent, bounds, layers, layerVisibility, layerOrder, viewSelection, selection,\n });\n\n const { frameIn, rectAt, derivedAt, drawnLayers, layerIsPainted } = useViewNesting(registry, live);\n\n /** The rect for the surface's current frame — what a client point and a\n * clamp are measured against outside a draw call. */\n const rectNow = useCallback((): ViewRect => {\n const surface = registry?.surface();\n return rectAt(surface?.view() ?? IDENTITY_VIEW, surface?.dims() ?? UNMEASURED_DIMS);\n }, [registry, rectAt]);\n\n const {\n getView: camera, setView, setViewFromInput, subscribeView,\n adoptControlled, announceControlled, clearSubscribers, held, aim, setAim, cameraAt,\n } = useViewAim({ props, id, registry, derivedAt, rectAt, rectNow });\n useInsertionEffect(adoptControlled);\n useLayoutEffect(announceControlled);\n useEffect(() => clearSubscribers, [clearSubscribers]);\n useImperativeHandle(cameraRef, () => ({ getView: camera, setView, subscribeView }), [camera, setView, subscribeView]);\n\n const viewApi = useMemo<ViewApi>(() => ({\n get: camera,\n set: setViewFromInput,\n hostSize: () => sizeOf(rectNow()),\n layerIsPainted,\n }), [camera, rectNow, setViewFromInput, layerIsPainted]);\n\n // Paste placement is a camera question, so it is this view's when the paste\n // routed here. The rest of the dep — `resolveSrc`, `svg`, `clipboard` — is\n // the surface's one wiring, read live off the canvas registry.\n const ingestionApi = useMemo<IngestionDep>(() => {\n const base = (): IngestionDep | undefined => depRegistryRef.current?.get('ingestion');\n return {\n viewportWorldRect: () => viewportWorldRect(camera(), sizeOf(rectNow())),\n get resolveSrc() { return base()?.resolveSrc; },\n get svg() { return base()?.svg; },\n get clipboard() { return base()?.clipboard; },\n };\n }, [camera, rectNow, depRegistryRef]);\n\n // One dispatcher per view: in-flight handles are per-view state, and two\n // views must not be able to see each other's.\n const dispatcherRef = useRef<ReturnType<typeof createDispatcher> | null>(null);\n if (!dispatcherRef.current) dispatcherRef.current = createDispatcher();\n\n // This view's overlay-aware state. The scene half comes from the surface —\n // same adapter, same tools — but everything gesture-shaped is read off this\n // view's own dispatcher, which is where a gesture inside this view lands.\n const rotationBadge = inputs?.rotationBadge ?? null;\n const own = useMemo(() => ({\n gestureSource: createGestureSource(() => dispatcherRef.current),\n ...createDispatcherPreviewSources(() => dispatcherRef.current),\n }), []);\n\n const inputsRef = useLatest(inputs);\n\n /** The chrome-caps context this view answers for: its selection, its camera,\n * its dispatcher's in-flight action. */\n const ruleInputs = useCallback((): ViewRuleInputs => ({\n selection: live.current.selection.get(),\n view: camera(),\n action: dispatcherRef.current!.getActiveAction(),\n }), [camera, live]);\n\n // The surface's resolver, asked for this view's camera.\n const surfaceBoundsOf = inputs?.boundsOf;\n const boundsOf = useMemo(\n () => (surfaceBoundsOf ? (id: string) => surfaceBoundsOf(id, camera()) : undefined),\n [surfaceBoundsOf, camera],\n );\n const surfaceBoundsOfPose = inputs?.boundsOfPose;\n const boundsOfPose = useMemo(\n () => (surfaceBoundsOfPose\n ? (id: string, pose: unknown) => surfaceBoundsOfPose(id, pose, camera())\n : undefined),\n [surfaceBoundsOfPose, camera],\n );\n\n const { helpers } = useViewHelpers<unknown>({\n ...(inputs ?? NO_INPUTS),\n boundsOf,\n boundsOfPose,\n ...own,\n selection: selection.current,\n layerIsPainted,\n getIsVisible: () => inputsRef.current?.chromeCaps?.isVisible(ruleInputs()) ?? ALWAYS_VISIBLE,\n });\n const helpersRef = useLatest(helpers);\n\n /** A client point in this view's world. The rect moves with the outer\n * camera, so it is read per call rather than closed over. */\n const clientToWorldHere = useCallback((cx: number, cy: number): { x: number; y: number } => {\n const local = surfaceLocal(registry?.surface() ?? null, cx, cy);\n const rect = rectNow();\n const [x, y] = clientToWorld(local.x, local.y, { left: rect.x, top: rect.y }, camera());\n return { x, y };\n }, [registry, rectNow, camera]);\n\n // Anchors are hit in this view's camera world, where its plane draws them.\n const getAnchorState = useMemo(() => anchorStateFrom(\n () => depRegistryRef.current,\n (id, path) => pathFromPlane(path, inputsRef.current?.planeOfNode?.(id, camera()) ?? null),\n ), [camera, depRegistryRef, inputsRef]);\n\n const { targetScale } = useDeviceProfile();\n\n // Selection chrome hit-testing for this view: same construction the surface\n // does for its own, against this view's chrome and camera.\n const affordanceAt = useMemo(() => {\n const inner = buildAffordanceAt({\n getChromeState: () => helpersRef.current.getChromeState(),\n getView: camera,\n targetScale,\n rotationBadge, handleHitRadius: inputs?.resizeHandles?.hitRadiusPx, edgeHandles: inputs?.resizeHandles?.edges,\n getAnchorState,\n getIsVisible: () => helpersRef.current.getIsVisible(),\n });\n return (world: { x: number; y: number }) => {\n // A registered layer this view paints gets first refusal, on this\n // view's frame and envelope. One painted over the surface already had\n // its chance: it occludes the view before routing reaches here.\n const extra = registry?.surface()?.hitTestExtras(\n world.x, world.y, camera(), sizeOf(rectNow()), helpersRef.current, drawnLayers(),\n );\n return extra ? layerAffordance(extra.layerId, extra.hit) : registry?.markerAt(id, world) ?? inner(world);\n };\n }, [id, getAnchorState, rectNow, registry, targetScale, camera, drawnLayers, rotationBadge, inputs?.resizeHandles, helpersRef]);\n\n const classifyTarget = useMemo(() => buildClassifyTarget(\n () => live.current.selection.get(),\n (wx, wy) => {\n const i = inputsRef.current;\n // This view's camera: the dispatcher converted with `clientToWorldHere`,\n // and a screen-pixel tolerance needs the scale that produced it. The\n // layer gate is this view's too, never the surface's.\n const frame = { ...camera(), layerIsPainted };\n if (i?.pickBest) return i.pickBest(wx, wy, frame);\n const ids = i?.pickEvery?.(wx, wy, frame) ?? [];\n return ids.length > 0 ? ids[ids.length - 1]! : null;\n },\n (id) => inputsRef.current?.kindOfNode?.(id),\n (id) => inputsRef.current?.doubleClickNames?.(id) ?? id,\n ), [camera, layerIsPainted, live, inputsRef]);\n\n const registration = useMemo<ViewRegistration>(() => ({\n id,\n ...(parent !== undefined ? { parent } : {}),\n order,\n interactive,\n paint,\n held,\n aim,\n setAim,\n layer: createViewportLayer<unknown, unknown>({\n id,\n label: label ?? id,\n source: () => [...drawnLayers(), ...(registry?.markerLayers(id) ?? [])],\n view: cameraAt,\n bounds: (outer, dims) => rectAt(outer, dims),\n ...(parent !== undefined ? { clip: (outer: View, dims: Dims) => frameIn(outer, dims)?.clip ?? NO_RECT } : {}),\n // The surface half of the envelope passes through; the view half is\n // this view's, so its layers paint its chrome rather than the\n // surface's.\n data: (outer) => ({ ...(outer as object), ...helpersRef.current, viewId: id }),\n ...(background !== undefined ? { background } : {}),\n }),\n layerIsPainted,\n drawnLayers,\n target: {\n dispatcher: dispatcherRef.current!,\n affordanceAt,\n classifyTarget,\n clientToWorld: clientToWorldHere,\n deps: () => ({\n view: viewApi, ingestion: ingestionApi, hitAt: hitAtOf(classifyTarget),\n // An Escape here cancels what is in flight here.\n dispatcher: { cancelAll: (reason) => dispatcherRef.current!.cancelAll(reason) },\n // Only a view with its own selection overlays that one; otherwise the\n // surface's answer stands, wrappers (`selectable`) included.\n ...(live.current.viewSelection ? { selection: live.current.viewSelection } : {}),\n }),\n // Action eligibility is chrome-caps evaluated against this view, so a\n // rule that hides an action in one panel cannot decline a gesture in\n // another.\n getRuleCtx: () => inputsRef.current?.chromeCaps?.ruleCtx(ruleInputs()),\n },\n }), [id, parent, order, interactive, paint, held, aim, setAim, label, background, rectAt, cameraAt, viewApi,\n affordanceAt, classifyTarget, clientToWorldHere, ruleInputs, ingestionApi, drawnLayers,\n layerIsPainted, live, inputsRef, helpersRef, frameIn, registry]);\n\n useEffect(() => {\n if (!registry) return;\n return registry.register(registration);\n }, [registry, registration]);\n\n // Apart from the registration, which is replaced whenever a prop it reads\n // changes: only the view going away ends what is in flight over it.\n useEffect(() => () => dispatcherRef.current?.cancelAll('cancel'), []);\n\n // The surface paints this view from `live`, so any committed render of it —\n // a controlled camera, its bounds, its layer gate — needs a frame.\n useEffect(() => {\n registry?.surface()?.requestRedraw();\n });\n\n return null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CanvasView.js","names":[],"sources":["../../src/canvas/CanvasView.tsx"],"sourcesContent":["/**\n * `<CanvasView>` — a second view on an existing canvas: its own camera over a\n * rect of the surface, with input routed to it.\n *\n * Mount one inside `<SceneCanvas>`, or declare the same thing through the\n * surface's `views` prop, which renders one of these per descriptor.\n */\nimport {\n useCallback, useEffect, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useRef,\n} from 'react';\nimport type { Dims, RenderLayer } from 'core/layers/render';\nimport type { View } from 'core/viewport/view';\nimport { clientToWorld } from 'core/viewport/clientToWorld';\nimport { createViewportLayer } from 'domains/viewports/viewportLayer';\nimport { createDispatcher } from '@weasel-js/routing';\nimport type { IngestionDep, ViewApi } from 'interactions/actions/depSchema';\nimport { viewportWorldRect } from 'core/viewport/viewportWorldRect';\nimport { useSelection, type SelectionApi } from 'core/selection/useSelection';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { useViewHelpers } from './useViewHelpers';\nimport { useViewAim } from './useViewAim';\nimport { hitAtOf } from './deps/dispatchSources';\nimport { anchorStateFrom, buildAffordanceAt, buildClassifyTarget, layerAffordance } from './affordanceAt';\nimport { pathFromPlane } from './planeClips';\nimport { useOptionalDepRegistry } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport { useDeviceProfile } from 'core/device/useDeviceProfile';\nimport {\n createGestureSource,\n createDispatcherPreviewSources,\n} from './SceneCanvas/dispatcherGestureBounds';\nimport { useOptionalViewInputs, type SurfaceViewInputs, type ViewRuleInputs } from './viewInputs';\nimport type { CanvasViewProps, ViewRect } from './canvasViewProps';\nexport type { CanvasViewProps, ViewRect } from './canvasViewProps';\nimport { NO_RECT, sizeOf, useViewNesting } from './useViewNesting';\nimport {\n useOptionalViewRegistry,\n surfaceLocal,\n IDENTITY_VIEW,\n UNMEASURED_DIMS,\n type ViewRegistration,\n} from './viewRegistry';\n\n/** What a view builds its helpers from outside a surface: nothing but the\n * default geometry, which answers `null` for every lookup. */\n// A view outside a surface has no inputs to inherit — including a selection,\n// so it falls back to owning one.\nconst NO_INPUTS: Omit<SurfaceViewInputs, 'selectionApi'> = {\n adapter: undefined,\n geometry: AUTO_POSE_DESCRIPTOR as unknown as PoseDescriptor<unknown>,\n boundsOf: undefined,\n};\n\nconst ALWAYS_VISIBLE = (): boolean => true;\n\n// Only a view that owns a selection, or follows one that does, overlays it; otherwise the surface's answer\n// stands, wrappers (`selectable`) included.\nconst selectionOverlay = (selection: SelectionApi | undefined) => (selection ? { selection } : {});\n\nconst ALL_LAYERS = (s: readonly RenderLayer<unknown>[]): readonly RenderLayer<unknown>[] => s;\n\n\n/**\n * One view on a shared canvas. Owns a camera, contributes the viewport node\n * that paints it, and registers the dispatch record that sends gestures inside\n * its rect to that camera rather than to the canvas's.\n *\n * Renders nothing itself — it is a declaration, and the surface does the\n * drawing. Outside a surface that mounts a view registry it is inert.\n */\nexport function CanvasView(props: CanvasViewProps): null {\n const {\n id, parent, follows, bounds,\n layers = ALL_LAYERS, layerVisibility, layerOrder, background, order = Infinity, label, cameraRef,\n selection: selectionProp, selectionOptions, interactive = true, paint = true,\n } = props;\n\n const registry = useOptionalViewRegistry();\n const depRegistry = useOptionalDepRegistry();\n const depRegistryRef = useLatest(depRegistry);\n\n // Hooks run unconditionally; the owned selection goes unused unless this\n // view asked for one.\n const ownSelection = useSelection(selectionOptions);\n const viewSelection = selectionProp ?? (selectionOptions ? ownSelection : undefined);\n\n const inputs = useOptionalViewInputs();\n const shared = inputs?.selectionApi ?? ownSelection;\n\n // Everything the registration reads is behind a ref: the registration object\n // is registered once and must not churn, but what it answers with has to be\n // the last committed render's.\n const live = useLatest({\n parent, follows, bounds, layers, layerVisibility, layerOrder, viewSelection, shared,\n });\n\n const {\n frameIn, rectAt, derivedAt, drawnLayers, layerIsPainted, ownedSelection, selectionNow,\n } = useViewNesting(registry, live);\n\n /** The rect for the surface's current frame — what a client point and a\n * clamp are measured against outside a draw call. */\n const rectNow = useCallback((): ViewRect => {\n const surface = registry?.surface();\n return rectAt(surface?.view() ?? IDENTITY_VIEW, surface?.dims() ?? UNMEASURED_DIMS);\n }, [registry, rectAt]);\n\n const {\n getView: camera, setView, setViewFromInput, subscribeView,\n adoptControlled, announceControlled, clearSubscribers, held, aim, setAim, cameraAt,\n } = useViewAim({ props, id, registry, derivedAt, rectAt, rectNow });\n useInsertionEffect(adoptControlled);\n useLayoutEffect(announceControlled);\n useEffect(() => clearSubscribers, [clearSubscribers]);\n useImperativeHandle(cameraRef, () => ({ getView: camera, setView, subscribeView }), [camera, setView, subscribeView]);\n\n const viewApi = useMemo<ViewApi>(() => ({\n get: camera,\n set: setViewFromInput,\n hostSize: () => sizeOf(rectNow()),\n layerIsPainted,\n }), [camera, rectNow, setViewFromInput, layerIsPainted]);\n\n // Paste placement is a camera question, so it is this view's when the paste\n // routed here. The rest of the dep — `resolveSrc`, `svg`, `clipboard`, `handlers` — is\n // the surface's one wiring, read live off the canvas registry.\n const ingestionApi = useMemo<IngestionDep>(() => {\n const base = (): IngestionDep | undefined => depRegistryRef.current?.get('ingestion');\n return {\n viewportWorldRect: () => viewportWorldRect(camera(), sizeOf(rectNow())),\n get resolveSrc() { return base()?.resolveSrc; },\n get svg() { return base()?.svg; },\n get clipboard() { return base()?.clipboard; }, get handlers() { return base()?.handlers; },\n };\n }, [camera, rectNow, depRegistryRef]);\n\n // One dispatcher per view: in-flight handles are per-view state, and two\n // views must not be able to see each other's.\n const dispatcherRef = useRef<ReturnType<typeof createDispatcher> | null>(null);\n if (!dispatcherRef.current) dispatcherRef.current = createDispatcher();\n\n // This view's overlay-aware state. The scene half comes from the surface —\n // same adapter, same tools — but everything gesture-shaped is read off this\n // view's own dispatcher, which is where a gesture inside this view lands.\n const rotationBadge = inputs?.rotationBadge ?? null;\n const own = useMemo(() => ({\n gestureSource: createGestureSource(() => dispatcherRef.current),\n ...createDispatcherPreviewSources(() => dispatcherRef.current),\n }), []);\n\n const inputsRef = useLatest(inputs);\n\n /** The chrome-caps context this view answers for: its selection, its camera,\n * its dispatcher's in-flight action. */\n const ruleInputs = useCallback((): ViewRuleInputs => ({\n selection: selectionNow().get(),\n view: camera(),\n action: dispatcherRef.current!.getActiveAction(),\n }), [camera, selectionNow]);\n\n // The surface's resolver, asked for this view's camera.\n const surfaceBoundsOf = inputs?.boundsOf;\n const boundsOf = useMemo(\n () => (surfaceBoundsOf ? (id: string) => surfaceBoundsOf(id, camera()) : undefined),\n [surfaceBoundsOf, camera],\n );\n const surfaceBoundsOfPose = inputs?.boundsOfPose;\n const boundsOfPose = useMemo(\n () => (surfaceBoundsOfPose\n ? (id: string, pose: unknown) => surfaceBoundsOfPose(id, pose, camera())\n : undefined),\n [surfaceBoundsOfPose, camera],\n );\n\n const { helpers } = useViewHelpers<unknown>({\n ...(inputs ?? NO_INPUTS),\n boundsOf,\n boundsOfPose,\n ...own,\n selection: () => selectionNow().current,\n layerIsPainted,\n getIsVisible: () => inputsRef.current?.chromeCaps?.isVisible(ruleInputs()) ?? ALWAYS_VISIBLE,\n });\n const helpersRef = useLatest(helpers);\n\n /** A client point in this view's world. The rect moves with the outer\n * camera, so it is read per call rather than closed over. */\n const clientToWorldHere = useCallback((cx: number, cy: number): { x: number; y: number } => {\n const local = surfaceLocal(registry?.surface() ?? null, cx, cy);\n const rect = rectNow();\n const [x, y] = clientToWorld(local.x, local.y, { left: rect.x, top: rect.y }, camera());\n return { x, y };\n }, [registry, rectNow, camera]);\n\n // Anchors are hit in this view's camera world, where its plane draws them.\n const getAnchorState = useMemo(() => anchorStateFrom(\n () => depRegistryRef.current,\n (id, path) => pathFromPlane(path, inputsRef.current?.planeOfNode?.(id, camera()) ?? null),\n ), [camera, depRegistryRef, inputsRef]);\n\n const { targetScale } = useDeviceProfile();\n\n // Selection chrome hit-testing for this view: same construction the surface\n // does for its own, against this view's chrome and camera.\n const affordanceAt = useMemo(() => {\n const inner = buildAffordanceAt({\n getChromeState: () => helpersRef.current.getChromeState(),\n getView: camera,\n targetScale,\n rotationBadge, handleHitRadius: inputs?.resizeHandles?.hitRadiusPx, edgeHandles: inputs?.resizeHandles?.edges,\n getAnchorState,\n getIsVisible: () => helpersRef.current.getIsVisible(),\n });\n return (world: { x: number; y: number }) => {\n // A registered layer this view paints gets first refusal, on this\n // view's frame and envelope. One painted over the surface already had\n // its chance: it occludes the view before routing reaches here.\n const extra = registry?.surface()?.hitTestExtras(\n world.x, world.y, camera(), sizeOf(rectNow()), helpersRef.current, drawnLayers(),\n );\n return extra ? layerAffordance(extra.layerId, extra.hit) : registry?.markerAt(id, world) ?? inner(world);\n };\n }, [id, getAnchorState, rectNow, registry, targetScale, camera, drawnLayers, rotationBadge, inputs?.resizeHandles, helpersRef]);\n\n const classifyTarget = useMemo(() => buildClassifyTarget(\n () => selectionNow().get(),\n (world) => {\n const i = inputsRef.current;\n // This view's camera: the dispatcher converted with `clientToWorldHere`,\n // and a screen-pixel tolerance needs the scale that produced it. The\n // layer gate is this view's too, never the surface's.\n const frame = { ...camera(), layerIsPainted };\n if (i?.pickBest) return i.pickBest(world, frame);\n const ids = i?.pickEvery?.(world, frame) ?? [];\n return ids.length > 0 ? ids[ids.length - 1]! : null;\n },\n (id) => inputsRef.current?.kindOfNode?.(id),\n (id) => inputsRef.current?.doubleClickNames?.(id) ?? id,\n ), [camera, layerIsPainted, selectionNow, inputsRef]);\n\n const registration = useMemo<ViewRegistration>(() => ({\n id,\n ...(parent !== undefined ? { parent } : {}),\n order,\n interactive,\n paint,\n held,\n aim,\n setAim,\n layer: createViewportLayer<unknown, unknown>({\n id,\n label: label ?? id,\n source: () => [...drawnLayers(), ...(registry?.markerLayers(id) ?? [])],\n view: cameraAt,\n bounds: (outer, dims) => rectAt(outer, dims),\n ...(parent !== undefined ? { clip: (outer: View, dims: Dims) => frameIn(outer, dims)?.clip ?? NO_RECT } : {}),\n // The surface half of the envelope passes through; the view half is\n // this view's, so its layers paint its chrome rather than the\n // surface's.\n data: (outer) => ({ ...(outer as object), ...helpersRef.current, viewId: id }),\n ...(background !== undefined ? { background } : {}),\n }),\n layerIsPainted,\n drawnLayers,\n selection: ownedSelection,\n target: {\n dispatcher: dispatcherRef.current!,\n affordanceAt,\n classifyTarget,\n clientToWorld: clientToWorldHere,\n deps: () => ({\n view: viewApi, ingestion: ingestionApi, hitAt: hitAtOf(classifyTarget),\n // An Escape here cancels what is in flight here.\n dispatcher: { cancelAll: (reason) => dispatcherRef.current!.cancelAll(reason) },\n ...selectionOverlay(ownedSelection()),\n }),\n // Action eligibility is chrome-caps evaluated against this view, so a\n // rule that hides an action in one panel cannot decline a gesture in\n // another.\n getRuleCtx: () => inputsRef.current?.chromeCaps?.ruleCtx(ruleInputs()),\n },\n }), [id, parent, order, interactive, paint, held, aim, setAim, label, background, rectAt, cameraAt, viewApi,\n affordanceAt, classifyTarget, clientToWorldHere, ruleInputs, ingestionApi, drawnLayers,\n layerIsPainted, ownedSelection, inputsRef, helpersRef, frameIn, registry]);\n\n useEffect(() => {\n if (!registry) return;\n return registry.register(registration);\n }, [registry, registration]);\n\n // Apart from the registration, which is replaced whenever a prop it reads\n // changes: only the view going away ends what is in flight over it.\n useEffect(() => () => dispatcherRef.current?.cancelAll('cancel'), []);\n\n // The surface paints this view from `live`, so any committed render of it —\n // a controlled camera, its bounds, its layer gate — needs a frame.\n useEffect(() => {\n registry?.surface()?.requestRedraw();\n });\n\n return null;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { viewToTransform } from "../core/viewport/view.js";
|
|
2
|
+
import { worldToScreen } from "../core/viewport/viewTransform.js";
|
|
3
|
+
import { resolveOverlays } from "../interactions/actions/resolveOverlays.js";
|
|
4
|
+
import GestureReason_module_default from "./GestureReason.module.js";
|
|
5
|
+
import { useEffect, useState } from "react";
|
|
6
|
+
import { overlaysOf } from "@weasel-js/routing";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
|
|
9
|
+
//#region src/canvas/GestureReason.tsx
|
|
10
|
+
/**
|
|
11
|
+
* The reason an in-flight gesture cannot land where it is, beside the pointer:
|
|
12
|
+
* the DOM half of the `reason` overlay, which the canvas layers cannot paint
|
|
13
|
+
* as text.
|
|
14
|
+
*/
|
|
15
|
+
/** How far below and right of the pointer the reason sits, in CSS pixels. */
|
|
16
|
+
var OFFSET = 14;
|
|
17
|
+
/** The first `reason` overlay of the dispatcher's in-flight gestures, shown beside the pointer. */
|
|
18
|
+
function GestureReason({ dispatcher, canvasRef, viewRef }) {
|
|
19
|
+
const [shown, setShown] = useState(null);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (!dispatcher) return;
|
|
22
|
+
const read = () => {
|
|
23
|
+
const all = [...dispatcher.getInFlightHandles()].flatMap((h) => [...overlaysOf(h)]);
|
|
24
|
+
const reason = resolveOverlays(all).find((o) => o.kind === "reason");
|
|
25
|
+
const canvas = canvasRef.current;
|
|
26
|
+
const view = viewRef.current;
|
|
27
|
+
if (reason?.kind !== "reason" || !canvas || !view) {
|
|
28
|
+
setShown(null);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const r = canvas.getBoundingClientRect();
|
|
32
|
+
const [sx, sy] = worldToScreen(reason.at.x, reason.at.y, viewToTransform(view));
|
|
33
|
+
setShown({
|
|
34
|
+
left: r.left + sx + OFFSET,
|
|
35
|
+
top: r.top + sy + OFFSET,
|
|
36
|
+
text: reason.text
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
read();
|
|
40
|
+
const off = dispatcher.subscribe(read);
|
|
41
|
+
return () => {
|
|
42
|
+
off();
|
|
43
|
+
setShown(null);
|
|
44
|
+
};
|
|
45
|
+
}, [
|
|
46
|
+
dispatcher,
|
|
47
|
+
canvasRef,
|
|
48
|
+
viewRef
|
|
49
|
+
]);
|
|
50
|
+
if (shown === null) return null;
|
|
51
|
+
return /* @__PURE__ */ jsx("div", {
|
|
52
|
+
role: "status",
|
|
53
|
+
className: GestureReason_module_default.reason,
|
|
54
|
+
style: {
|
|
55
|
+
left: shown.left,
|
|
56
|
+
top: shown.top
|
|
57
|
+
},
|
|
58
|
+
children: shown.text
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
//#endregion
|
|
63
|
+
export { GestureReason };
|
|
64
|
+
//# sourceMappingURL=GestureReason.js.map
|