@weasel-js/core 1.9.3 → 1.10.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 +1106 -0
- package/README.md +7 -5
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +91 -93
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +27 -18
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +65 -104
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotationHandle.js +22 -21
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +38 -88
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +93 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +26 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +56 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +32 -24
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -29
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js +13 -0
- package/dist/animation/wrappers/instantPose.js.map +1 -0
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/{autoPoseDescriptor-vCdt55xm.d.ts → autoPoseDescriptor-DHg5KqaJ.d.ts} +1 -1
- package/dist/barrel/canvas.js +31 -0
- package/dist/barrel/chrome.js +16 -0
- package/dist/barrel/input.js +18 -0
- package/dist/barrel/interactions.js +38 -0
- package/dist/barrel/paint.js +11 -0
- package/dist/barrel/paths.js +12 -0
- package/dist/barrel/renderer.js +14 -0
- package/dist/barrel/routing.js +57 -0
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -0
- package/dist/barrel/viewport.js +42 -0
- package/dist/canvas/Canvas.js +280 -559
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +147 -167
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +53 -49
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +40 -51
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +55 -374
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js +50 -47
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +126 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +64 -0
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/coordTrace.js +46 -0
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +138 -85
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +74 -43
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/isDev.js +12 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js +31 -34
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
- package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
- package/dist/canvas/SceneCanvas/props.js +39 -0
- package/dist/canvas/SceneCanvas/props.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +38 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +29 -29
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +48 -48
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +74 -78
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +9 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +311 -969
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +42 -46
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/affordanceAt.js +11 -1
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +111 -0
- package/dist/canvas/buildSceneLayer.js.map +1 -0
- package/dist/canvas/buildSceneTree.js +16 -19
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +67 -55
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/defaultDrawOne.js +12 -12
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/changes.js +13 -0
- package/dist/canvas/deps/changes.js.map +1 -0
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +38 -57
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +31 -26
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +130 -91
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +26 -26
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +6 -5
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +47 -22
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +4 -8
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/kitRequirements.js +2 -2
- package/dist/canvas/kitRequirements.js.map +1 -1
- package/dist/canvas/layerOrder.js +13 -6
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/imagePainter.js +87 -0
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/memo.js +9 -0
- package/dist/canvas/nodeShapes/memo.js.map +1 -0
- package/dist/canvas/nodeShapes/nodePaint.js +68 -0
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
- package/dist/canvas/nodeShapes/pathPainter.js +39 -0
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/poseBox.js +20 -0
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/shapePainter.js +72 -0
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/textPainter.js +55 -0
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +11 -14
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickWalk.js +59 -68
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +9 -23
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +11 -11
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -81
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +68 -214
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +112 -0
- package/dist/canvas/sceneClipboard.js.map +1 -0
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +39 -39
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/surface.module.js +6 -0
- package/dist/canvas/surface.module.js.map +1 -0
- package/dist/canvas/surfaceBox.js +16 -0
- package/dist/canvas/surfaceBox.js.map +1 -0
- package/dist/canvas/useCanvasRenderer.js +26 -6
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +67 -0
- package/dist/canvas/useCanvasView.js.map +1 -0
- package/dist/canvas/useFrameLoop.js +39 -31
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneLayerList.js +11 -0
- package/dist/canvas/useSceneLayerList.js.map +1 -0
- package/dist/canvas/useSurfaceInput.js +42 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +25 -27
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +16 -19
- package/dist/{types-B_9g6hMM.d.ts → clone-2a5hVbBd.d.ts} +123 -74
- package/dist/clone.d.ts +4 -7
- package/dist/clone.js +0 -2
- package/dist/core/device/index.js +5 -4
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +38 -44
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/core/device/watchDevicePixelRatio.js +17 -0
- package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +68 -19
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +31 -34
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +30 -29
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/isPlainObject.js +2 -11
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +1 -1
- package/dist/core/layers/children.js.map +1 -0
- package/dist/core/layers/gateLayer.js +13 -0
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/arrange.js +1 -0
- package/dist/core/ops/arrange.js.map +1 -1
- package/dist/core/ops/create.js +10 -5
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +12 -24
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +43 -40
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +34 -0
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +282 -105
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/appliedLog.js +37 -0
- package/dist/core/scene/appliedLog.js.map +1 -0
- package/dist/core/scene/arrivalWindow.js +102 -0
- package/dist/core/scene/arrivalWindow.js.map +1 -0
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/{features/groups → core/scene}/composePose.js +18 -18
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +38 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +130 -0
- package/dist/core/scene/historyFacade.js.map +1 -0
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +185 -0
- package/dist/core/scene/kitOps.js.map +1 -0
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +131 -0
- package/dist/core/scene/layerStack.js.map +1 -0
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/core/scene/lockGuard.js +37 -0
- package/dist/core/scene/lockGuard.js.map +1 -0
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +10 -11
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js +45 -19
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +127 -0
- package/dist/core/scene/nodeStore.js.map +1 -0
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +66 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseFeed.js +38 -38
- package/dist/core/scene/poseFeed.js.map +1 -1
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -40
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +3 -2
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js +84 -0
- package/dist/core/scene/renderOrder.js.map +1 -0
- package/dist/core/scene/scene.js +80 -1266
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +90 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +71 -0
- package/dist/core/scene/serialization.js.map +1 -0
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeOrder.js +13 -0
- package/dist/core/scene/treeOrder.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +8 -8
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +102 -43
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +9 -9
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomBounds.js +10 -8
- package/dist/core/viewport/zoomBounds.js.map +1 -1
- package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +97 -97
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/flag.js +2 -41
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js +22 -17
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +28 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/registerKitHandlers.js +7 -7
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +22 -14
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +47 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -14
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -52
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +171 -179
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +100 -93
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/index.d.ts +8473 -9141
- package/dist/index.js +269 -307
- package/dist/input/keyState.js +38 -39
- package/dist/input/keyState.js.map +1 -1
- package/dist/input/useKeyModifiers.js +11 -0
- package/dist/input/useKeyModifiers.js.map +1 -0
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +18 -20
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +20 -20
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +69 -78
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +31 -15
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +44 -42
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
- package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +98 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +7 -32
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +60 -84
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/areaSelect.js +35 -38
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +40 -0
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +13 -53
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +40 -50
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +44 -38
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +11 -12
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +40 -69
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
- package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/reorder.js +2 -0
- package/dist/interactions/actions/defaults/reorder.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/setFill.js +14 -8
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +7 -4
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js +12 -12
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
- package/dist/interactions/actions/defaults/sliceOps.js +8 -10
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +37 -26
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/distribute/action.js +66 -0
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +11 -11
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +7 -9
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +30 -27
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +30 -17
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/hitSelection.js +8 -0
- package/dist/interactions/actions/hitSelection.js.map +1 -0
- package/dist/interactions/actions/insert/action.js +72 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +48 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +14 -18
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
- package/dist/interactions/actions/move/action.js +87 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +5 -5
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +39 -27
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +99 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +59 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +22 -30
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +33 -0
- package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +16 -63
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +16 -4
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +25 -20
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +55 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +74 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +49 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +56 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/session.js +92 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/selectionSubtree.js +69 -0
- package/dist/interactions/actions/selectionSubtree.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/useStandardActions.js +87 -78
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
- package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
- package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
- package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +62 -41
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
- package/dist/layout/arrivals.js +20 -23
- package/dist/layout/arrivals.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -3
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +14 -11
- package/dist/{originProjection-DEklpDc_.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/{poseDescriptor-D-OH-tu5.d.ts → poseDescriptor-Bqk-11Rl.d.ts} +26 -36
- package/dist/renderer.d.ts +1 -91
- package/dist/renderer.js +2 -18
- package/dist/resize.d.ts +10 -22
- package/dist/resize.js +6 -6
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js +12 -6
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js +1 -0
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js +11 -11
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +1 -0
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +198 -150
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +1 -0
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +36 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +25 -24
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +42 -67
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js +17 -0
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
- package/dist/tools/builtin/slice/useSliceTool.js +72 -82
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +22 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +9 -0
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +12 -22
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-A37hYkeR.d.ts → types-CIKDwlsP.d.ts} +113 -169
- package/dist/util/color.js +3 -3
- package/dist/util/color.js.map +1 -1
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +28 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -62
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -138
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -106
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -116
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -71
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -378
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/builtins-C-VgUlWI.d.ts +0 -4514
- package/dist/canvas/MinimapCanvas.js +0 -139
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -80
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -85
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/isPlainObject.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/debug/flag.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js +0 -14
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -94
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -236
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -103
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -26
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -156
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -154
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -148
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/index.js +0 -23
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -57
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -46
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -258
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -45
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -135
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -59
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -467
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -63
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -107
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js +0 -66
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -119
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
- package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -288
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -156
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -760
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -335
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -184
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/math-Drrw4ewZ.d.ts +0 -160
- package/dist/registerProgram-BMZRDgrh.d.ts +0 -197
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -331
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -64
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -51
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw.js +0 -1135
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -45
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -9
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -19
- package/dist/renderer/math/color.js +0 -341
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -76
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -30
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/imageFill.js +0 -14
- package/dist/renderer/shaders/imageFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -13
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -24
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -14
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-CuIxe0xY.d.ts +0 -356
- package/dist/tools/prefs.js +0 -62
- package/dist/tools/prefs.js.map +0 -1
package/dist/input/keyState.js
CHANGED
|
@@ -1,76 +1,75 @@
|
|
|
1
1
|
import { isEditableTarget as e } from "@weasel-js/routing";
|
|
2
|
+
import { createEmitter as t } from "@weasel-js/registry";
|
|
2
3
|
//#region src/input/keyState.ts
|
|
3
|
-
var
|
|
4
|
+
var n = {
|
|
4
5
|
shift: ["ShiftLeft", "ShiftRight"],
|
|
5
6
|
ctrl: ["ControlLeft", "ControlRight"],
|
|
6
7
|
alt: ["AltLeft", "AltRight"],
|
|
7
8
|
meta: ["MetaLeft", "MetaRight"]
|
|
8
|
-
},
|
|
9
|
-
function
|
|
10
|
-
let
|
|
9
|
+
}, r = new Set(Object.values(n).flat()), i = (e) => e.length === 1 ? e.toLowerCase() : e, a = (e) => typeof e == "string" ? [e] : e;
|
|
10
|
+
function o() {
|
|
11
|
+
let o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set(), l = {
|
|
11
12
|
shift: !1,
|
|
12
13
|
ctrl: !1,
|
|
13
14
|
alt: !1,
|
|
14
15
|
meta: !1
|
|
15
|
-
}, l =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}, p = (e) => {
|
|
21
|
-
let n = !1, r = {
|
|
16
|
+
}, u = { ...l }, d = t(), f = d.emit, p = (e) => (s.delete(e), o.delete(e)), m = () => {
|
|
17
|
+
let e = o.size > 0 || c.size > 0 || l.shift || l.ctrl || l.alt || l.meta;
|
|
18
|
+
o.clear(), s.clear(), c.clear(), l.shift = l.ctrl = l.alt = l.meta = !1, e && f();
|
|
19
|
+
}, h = (e) => {
|
|
20
|
+
let t = !1, r = {
|
|
22
21
|
shift: e.shiftKey,
|
|
23
22
|
ctrl: e.ctrlKey,
|
|
24
23
|
alt: e.altKey,
|
|
25
24
|
meta: e.metaKey
|
|
26
25
|
};
|
|
27
|
-
for (let e of Object.keys(
|
|
28
|
-
return
|
|
26
|
+
for (let e of Object.keys(n)) if (l[e] !== r[e] && (l[e] = r[e], t = !0), !r[e]) for (let r of n[e]) t = p(r) || t;
|
|
27
|
+
return t;
|
|
29
28
|
};
|
|
30
29
|
return {
|
|
31
|
-
isDown: (e) =>
|
|
30
|
+
isDown: (e) => a(e).some((e) => s.has(e)),
|
|
32
31
|
isKeyDown: (e) => {
|
|
33
|
-
let t = new Set(
|
|
34
|
-
for (let e of
|
|
32
|
+
let t = new Set(a(e).map(i));
|
|
33
|
+
for (let e of o.values()) if (t.has(e)) return !0;
|
|
35
34
|
return !1;
|
|
36
35
|
},
|
|
37
36
|
take: (e) => {
|
|
38
37
|
let t = !1;
|
|
39
|
-
for (let n of
|
|
38
|
+
for (let n of a(e)) t = c.delete(n) || t;
|
|
40
39
|
return t;
|
|
41
40
|
},
|
|
42
|
-
codes: () =>
|
|
43
|
-
modifiers: () => ({ ...
|
|
44
|
-
subscribe:
|
|
45
|
-
release:
|
|
46
|
-
attach: (
|
|
47
|
-
let l =
|
|
41
|
+
codes: () => s,
|
|
42
|
+
modifiers: () => ((u.shift !== l.shift || u.ctrl !== l.ctrl || u.alt !== l.alt || u.meta !== l.meta) && (u = { ...l }), u),
|
|
43
|
+
subscribe: d.subscribe,
|
|
44
|
+
release: m,
|
|
45
|
+
attach: (t, a = {}) => {
|
|
46
|
+
let l = a.skipInEditable ?? !0, u = new Set(a.preventDefault ?? []), d = (t) => {
|
|
48
47
|
let n = t;
|
|
49
48
|
if (l && e(n.target)) return;
|
|
50
|
-
|
|
51
|
-
let
|
|
52
|
-
|
|
49
|
+
u.has(n.code) && n.preventDefault();
|
|
50
|
+
let r = h(n);
|
|
51
|
+
o.has(n.code) || (o.set(n.code, i(n.key)), s.add(n.code), r = !0), !n.repeat && !c.has(n.code) && (c.add(n.code), r = !0), r && f();
|
|
53
52
|
}, g = (e) => {
|
|
54
|
-
let
|
|
55
|
-
|
|
56
|
-
let i =
|
|
57
|
-
if (i =
|
|
58
|
-
i &&
|
|
53
|
+
let t = e;
|
|
54
|
+
u.has(t.code) && t.preventDefault();
|
|
55
|
+
let i = h(t);
|
|
56
|
+
if (i = p(t.code) || i, n.meta.includes(t.code)) for (let e of [...s]) r.has(e) || (i = p(e) || i);
|
|
57
|
+
i && f();
|
|
59
58
|
}, _ = () => {
|
|
60
|
-
document.hidden &&
|
|
59
|
+
document.hidden && m();
|
|
61
60
|
}, v = (e) => {
|
|
62
|
-
let
|
|
63
|
-
(!(
|
|
61
|
+
let n = e.relatedTarget;
|
|
62
|
+
(!(n instanceof Node) || !t.contains(n)) && m();
|
|
64
63
|
};
|
|
65
|
-
|
|
66
|
-
let y =
|
|
67
|
-
return y &&
|
|
68
|
-
|
|
64
|
+
t.addEventListener("keydown", d), t.addEventListener("keyup", g), window.addEventListener("blur", m), document.addEventListener("visibilitychange", _);
|
|
65
|
+
let y = t !== window;
|
|
66
|
+
return y && t.addEventListener("focusout", v), () => {
|
|
67
|
+
t.removeEventListener("keydown", d), t.removeEventListener("keyup", g), window.removeEventListener("blur", m), document.removeEventListener("visibilitychange", _), y && t.removeEventListener("focusout", v), m();
|
|
69
68
|
};
|
|
70
69
|
}
|
|
71
70
|
};
|
|
72
71
|
}
|
|
73
72
|
//#endregion
|
|
74
|
-
export {
|
|
73
|
+
export { o as createKeyState };
|
|
75
74
|
|
|
76
75
|
//# sourceMappingURL=keyState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyState.js","names":["MODIFIER_CODES","MODIFIER_SET","fold","key","list","v","createKeyState","down","codeSet","presses","mods","listeners","notify","l","remove","code","release","changed","reconcile","flags","m","c","want","k","hit","listener","skipInEditable","options","owned","onKeyDown","e","event","isEditableTarget","onKeyUp","onVisibility","onFocusOut","next","target","isElement"],"sources":["../../src/input/keyState.ts"],"sourcesContent":["/**\n * Which physical keys are down right now — the poll a game loop or character\n * controller reads each step. This is raw input state, not routing: it sees\n * every key whether or not a binding claims it, and a binding claiming a key\n * does not hide it from here.\n */\n\nimport { isEditableTarget } from '@weasel-js/routing';\n\n/** Which modifier keys are held, on either side of the keyboard. */\nexport interface KeyModifiers {\n shift: boolean;\n ctrl: boolean;\n alt: boolean;\n meta: boolean;\n}\n\n/** Options for {@link KeyState.attach}. */\nexport interface KeyStateAttachOptions {\n /** Ignore presses whose target is an input, textarea or contenteditable\n * element. Their releases are always taken. Default `true`. */\n skipInEditable?: boolean;\n /** `KeyboardEvent.code`s whose keydown and keyup have their default\n * prevented — the keys a game owns, so Space and the arrows stop scrolling\n * the page. */\n preventDefault?: readonly string[];\n}\n\n/** A poll of which physical keys are down, fed by {@link KeyState.attach}. */\nexport interface KeyState {\n /** Whether any of these physical keys, by `KeyboardEvent.code`\n * (`'KeyA'`, `'Space'`, `'ArrowLeft'`), is down. Codes name positions, so\n * WASD stays in place on any layout. */\n isDown(code: string | readonly string[]): boolean;\n /** Whether a key down produced any of these `KeyboardEvent.key` values when\n * it was pressed. Single characters compare case-insensitively. */\n isKeyDown(key: string | readonly string[]): boolean;\n /** Whether any of these codes was freshly pressed since it was last taken;\n * clears them. Autorepeat is not a press. A press is taken once, so two\n * readers of the same code see it once between them. */\n take(code: string | readonly string[]): boolean;\n /** Every code down. The set is live — copy it to keep it. */\n codes(): ReadonlySet<string>;\n modifiers(): KeyModifiers;\n /** Called on every change of what is down. Returns the unsubscribe. */\n subscribe(listener: () => void): () => void;\n /** Mark everything up and drop untaken presses. */\n release(): void;\n /**\n * Listen on `target` — `window`, or an element whose subtree has focus.\n * Everything is released when the keyups can no longer arrive: the window\n * blurs, the document hides, focus leaves an element target, or Meta is\n * released (macOS delivers no keyup for a key released while Cmd is held).\n * Returns the detach, which also releases.\n */\n attach(target: Window | HTMLElement, options?: KeyStateAttachOptions): () => void;\n}\n\nconst MODIFIER_CODES: Record<keyof KeyModifiers, readonly string[]> = {\n shift: ['ShiftLeft', 'ShiftRight'],\n ctrl: ['ControlLeft', 'ControlRight'],\n alt: ['AltLeft', 'AltRight'],\n meta: ['MetaLeft', 'MetaRight'],\n};\nconst MODIFIER_SET = new Set(Object.values(MODIFIER_CODES).flat());\n\nconst fold = (key: string): string => (key.length === 1 ? key.toLowerCase() : key);\nconst list = (v: string | readonly string[]): readonly string[] => (typeof v === 'string' ? [v] : v);\n\n/** A new {@link KeyState} with nothing down. It hears nothing until attached;\n * in React, `useKeyState` attaches one for a component's lifetime. */\nexport function createKeyState(): KeyState {\n // code → the folded key it produced when pressed\n const down = new Map<string, string>();\n const codeSet = new Set<string>();\n const presses = new Set<string>();\n const mods: KeyModifiers = { shift: false, ctrl: false, alt: false, meta: false };\n const listeners = new Set<() => void>();\n\n const notify = () => {\n for (const l of [...listeners]) l();\n };\n\n const remove = (code: string): boolean => {\n codeSet.delete(code);\n return down.delete(code);\n };\n\n const release = () => {\n const changed = down.size > 0 || presses.size > 0 || mods.shift || mods.ctrl || mods.alt || mods.meta;\n down.clear();\n codeSet.clear();\n presses.clear();\n mods.shift = mods.ctrl = mods.alt = mods.meta = false;\n if (changed) notify();\n };\n\n // A modifier's keyup can land in another window (alt-tab, cmd-tab), so trust\n // the flags every event carries over the keys we saw go down.\n const reconcile = (e: KeyboardEvent): boolean => {\n let changed = false;\n const flags: KeyModifiers = { shift: e.shiftKey, ctrl: e.ctrlKey, alt: e.altKey, meta: e.metaKey };\n for (const m of Object.keys(MODIFIER_CODES) as Array<keyof KeyModifiers>) {\n if (mods[m] !== flags[m]) {\n mods[m] = flags[m];\n changed = true;\n }\n if (!flags[m]) for (const code of MODIFIER_CODES[m]) changed = remove(code) || changed;\n }\n return changed;\n };\n\n const state: KeyState = {\n isDown: (code) => list(code).some((c) => codeSet.has(c)),\n isKeyDown: (key) => {\n const want = new Set(list(key).map(fold));\n for (const k of down.values()) if (want.has(k)) return true;\n return false;\n },\n take: (code) => {\n let hit = false;\n for (const c of list(code)) hit = presses.delete(c) || hit;\n return hit;\n },\n codes: () => codeSet,\n modifiers: () => ({ ...mods }),\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n release,\n attach: (target, options = {}) => {\n const skipInEditable = options.skipInEditable ?? true;\n const owned = new Set(options.preventDefault ?? []);\n\n const onKeyDown = (event: Event) => {\n const e = event as KeyboardEvent;\n if (skipInEditable && isEditableTarget(e.target)) return;\n if (owned.has(e.code)) e.preventDefault();\n let changed = reconcile(e);\n if (!down.has(e.code)) {\n down.set(e.code, fold(e.key));\n codeSet.add(e.code);\n changed = true;\n }\n if (!e.repeat && !presses.has(e.code)) {\n presses.add(e.code);\n changed = true;\n }\n if (changed) notify();\n };\n\n const onKeyUp = (event: Event) => {\n const e = event as KeyboardEvent;\n if (owned.has(e.code)) e.preventDefault();\n let changed = reconcile(e);\n changed = remove(e.code) || changed;\n if (MODIFIER_CODES.meta.includes(e.code)) {\n for (const code of [...codeSet]) if (!MODIFIER_SET.has(code)) changed = remove(code) || changed;\n }\n if (changed) notify();\n };\n\n const onVisibility = () => {\n if (document.hidden) release();\n };\n\n const onFocusOut = (event: Event) => {\n const next = (event as FocusEvent).relatedTarget;\n if (!(next instanceof Node) || !(target as HTMLElement).contains(next)) release();\n };\n\n target.addEventListener('keydown', onKeyDown);\n target.addEventListener('keyup', onKeyUp);\n window.addEventListener('blur', release);\n document.addEventListener('visibilitychange', onVisibility);\n const isElement = target !== window;\n if (isElement) target.addEventListener('focusout', onFocusOut);\n\n return () => {\n target.removeEventListener('keydown', onKeyDown);\n target.removeEventListener('keyup', onKeyUp);\n window.removeEventListener('blur', release);\n document.removeEventListener('visibilitychange', onVisibility);\n if (isElement) target.removeEventListener('focusout', onFocusOut);\n release();\n };\n },\n };\n return state;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keyState.js","names":["MODIFIER_CODES","MODIFIER_SET","fold","key","list","v","createKeyState","down","codeSet","presses","mods","held","listeners","createEmitter","notify","remove","code","release","changed","reconcile","flags","m","c","want","k","hit","skipInEditable","options","owned","onKeyDown","e","event","isEditableTarget","onKeyUp","onVisibility","onFocusOut","next","target","isElement"],"sources":["../../src/input/keyState.ts"],"sourcesContent":["/**\n * Which physical keys are down right now — the poll a game loop or character\n * controller reads each step. This is raw input state, not routing: it sees\n * every key whether or not a binding claims it, and a binding claiming a key\n * does not hide it from here.\n */\n\nimport { createEmitter } from '@weasel-js/registry';\nimport { isEditableTarget } from '@weasel-js/routing';\n\n/** Which modifier keys are held, on either side of the keyboard. */\nexport interface KeyModifiers {\n shift: boolean;\n ctrl: boolean;\n alt: boolean;\n meta: boolean;\n}\n\n/** Options for {@link KeyState.attach}. */\nexport interface KeyStateAttachOptions {\n /** Ignore presses whose target is an input, textarea or contenteditable\n * element. Their releases are always taken. Default `true`. */\n skipInEditable?: boolean;\n /** `KeyboardEvent.code`s whose keydown and keyup have their default\n * prevented — the keys a game owns, so Space and the arrows stop scrolling\n * the page. */\n preventDefault?: readonly string[];\n}\n\n/** A poll of which physical keys are down, fed by {@link KeyState.attach}. */\nexport interface KeyState {\n /** Whether any of these physical keys, by `KeyboardEvent.code`\n * (`'KeyA'`, `'Space'`, `'ArrowLeft'`), is down. Codes name positions, so\n * WASD stays in place on any layout. */\n isDown(code: string | readonly string[]): boolean;\n /** Whether a key down produced any of these `KeyboardEvent.key` values when\n * it was pressed. Single characters compare case-insensitively. */\n isKeyDown(key: string | readonly string[]): boolean;\n /** Whether any of these codes was freshly pressed since it was last taken;\n * clears them. Autorepeat is not a press. A press is taken once, so two\n * readers of the same code see it once between them. */\n take(code: string | readonly string[]): boolean;\n /** Every code down. The set is live — copy it to keep it. */\n codes(): ReadonlySet<string>;\n /** The modifiers held. The same object until one changes, so it serves as\n * a `useSyncExternalStore` snapshot. */\n modifiers(): KeyModifiers;\n /** Called on every change of what is down. Returns the unsubscribe. */\n subscribe(listener: () => void): () => void;\n /** Mark everything up and drop untaken presses. */\n release(): void;\n /**\n * Listen on `target` — `window`, or an element whose subtree has focus.\n * Everything is released when the keyups can no longer arrive: the window\n * blurs, the document hides, focus leaves an element target, or Meta is\n * released (macOS delivers no keyup for a key released while Cmd is held).\n * Returns the detach, which also releases.\n */\n attach(target: Window | HTMLElement, options?: KeyStateAttachOptions): () => void;\n}\n\nconst MODIFIER_CODES: Record<keyof KeyModifiers, readonly string[]> = {\n shift: ['ShiftLeft', 'ShiftRight'],\n ctrl: ['ControlLeft', 'ControlRight'],\n alt: ['AltLeft', 'AltRight'],\n meta: ['MetaLeft', 'MetaRight'],\n};\nconst MODIFIER_SET = new Set(Object.values(MODIFIER_CODES).flat());\n\nconst fold = (key: string): string => (key.length === 1 ? key.toLowerCase() : key);\nconst list = (v: string | readonly string[]): readonly string[] => (typeof v === 'string' ? [v] : v);\n\n/** A new {@link KeyState} with nothing down. It hears nothing until attached;\n * in React, `useKeyState` attaches one for a component's lifetime. */\nexport function createKeyState(): KeyState {\n // code → the folded key it produced when pressed\n const down = new Map<string, string>();\n const codeSet = new Set<string>();\n const presses = new Set<string>();\n const mods: KeyModifiers = { shift: false, ctrl: false, alt: false, meta: false };\n let held: KeyModifiers = { ...mods };\n const listeners = createEmitter();\n const notify = listeners.emit;\n\n const remove = (code: string): boolean => {\n codeSet.delete(code);\n return down.delete(code);\n };\n\n const release = () => {\n const changed = down.size > 0 || presses.size > 0 || mods.shift || mods.ctrl || mods.alt || mods.meta;\n down.clear();\n codeSet.clear();\n presses.clear();\n mods.shift = mods.ctrl = mods.alt = mods.meta = false;\n if (changed) notify();\n };\n\n // A modifier's keyup can land in another window (alt-tab, cmd-tab), so trust\n // the flags every event carries over the keys we saw go down.\n const reconcile = (e: KeyboardEvent): boolean => {\n let changed = false;\n const flags: KeyModifiers = { shift: e.shiftKey, ctrl: e.ctrlKey, alt: e.altKey, meta: e.metaKey };\n for (const m of Object.keys(MODIFIER_CODES) as Array<keyof KeyModifiers>) {\n if (mods[m] !== flags[m]) {\n mods[m] = flags[m];\n changed = true;\n }\n if (!flags[m]) for (const code of MODIFIER_CODES[m]) changed = remove(code) || changed;\n }\n return changed;\n };\n\n const state: KeyState = {\n isDown: (code) => list(code).some((c) => codeSet.has(c)),\n isKeyDown: (key) => {\n const want = new Set(list(key).map(fold));\n for (const k of down.values()) if (want.has(k)) return true;\n return false;\n },\n take: (code) => {\n let hit = false;\n for (const c of list(code)) hit = presses.delete(c) || hit;\n return hit;\n },\n codes: () => codeSet,\n modifiers: () => {\n if (held.shift !== mods.shift || held.ctrl !== mods.ctrl || held.alt !== mods.alt || held.meta !== mods.meta) {\n held = { ...mods };\n }\n return held;\n },\n subscribe: listeners.subscribe,\n release,\n attach: (target, options = {}) => {\n const skipInEditable = options.skipInEditable ?? true;\n const owned = new Set(options.preventDefault ?? []);\n\n const onKeyDown = (event: Event) => {\n const e = event as KeyboardEvent;\n if (skipInEditable && isEditableTarget(e.target)) return;\n if (owned.has(e.code)) e.preventDefault();\n let changed = reconcile(e);\n if (!down.has(e.code)) {\n down.set(e.code, fold(e.key));\n codeSet.add(e.code);\n changed = true;\n }\n if (!e.repeat && !presses.has(e.code)) {\n presses.add(e.code);\n changed = true;\n }\n if (changed) notify();\n };\n\n const onKeyUp = (event: Event) => {\n const e = event as KeyboardEvent;\n if (owned.has(e.code)) e.preventDefault();\n let changed = reconcile(e);\n changed = remove(e.code) || changed;\n if (MODIFIER_CODES.meta.includes(e.code)) {\n for (const code of [...codeSet]) if (!MODIFIER_SET.has(code)) changed = remove(code) || changed;\n }\n if (changed) notify();\n };\n\n const onVisibility = () => {\n if (document.hidden) release();\n };\n\n const onFocusOut = (event: Event) => {\n const next = (event as FocusEvent).relatedTarget;\n if (!(next instanceof Node) || !(target as HTMLElement).contains(next)) release();\n };\n\n target.addEventListener('keydown', onKeyDown);\n target.addEventListener('keyup', onKeyUp);\n window.addEventListener('blur', release);\n document.addEventListener('visibilitychange', onVisibility);\n const isElement = target !== window;\n if (isElement) target.addEventListener('focusout', onFocusOut);\n\n return () => {\n target.removeEventListener('keydown', onKeyDown);\n target.removeEventListener('keyup', onKeyUp);\n window.removeEventListener('blur', release);\n document.removeEventListener('visibilitychange', onVisibility);\n if (isElement) target.removeEventListener('focusout', onFocusOut);\n release();\n };\n },\n };\n return state;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useKeyState as e } from "./useKeyState.js";
|
|
2
|
+
import { useSyncExternalStore as t } from "react";
|
|
3
|
+
//#region src/input/useKeyModifiers.ts
|
|
4
|
+
function n(n = {}) {
|
|
5
|
+
let r = e(n);
|
|
6
|
+
return t(r.subscribe, r.modifiers, r.modifiers);
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { n as useKeyModifiers };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=useKeyModifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyModifiers.js","names":["useKeyModifiers","keys","useKeyState","options","useSyncExternalStore"],"sources":["../../src/input/useKeyModifiers.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\nimport type { KeyModifiers } from './keyState';\nimport { useKeyState, type UseKeyStateOptions } from './useKeyState';\n\n/**\n * Which modifier keys are held, re-rendering the component when that changes.\n * For chrome that draws the modifiers; a frame loop polls\n * {@link useKeyState} instead. The object is the same one between changes.\n */\nexport function useKeyModifiers(options: UseKeyStateOptions = {}): KeyModifiers {\n const keys = useKeyState(options);\n return useSyncExternalStore(keys.subscribe, keys.modifiers, keys.modifiers);\n}\n"],"mappings":";;;AASA,SAAgBA,EAAgB,IAA8B,CAAC,GAAiB;CAC9E,IAAMC,IAAOC,EAAYC,CAAO;CAChC,OAAOC,EAAqBH,EAAK,WAAWA,EAAK,WAAWA,EAAK,SAAS;AAC5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actionShortcuts.js","names":["keySpecShortcut","spec","key","mods","actionShortcuts","out","seen","actionBindings","action","params","paramsMatch","opts","shortcut","token","bound","wanted","k","v"],"sources":["../../../src/interactions/actions/actionShortcuts.ts"],"sourcesContent":["/**\n * Project an action's keyboard bindings into the shape a shortcut chip\n * renders from (`formatShortcut` / `formatShortcutParts` in
|
|
1
|
+
{"version":3,"file":"actionShortcuts.js","names":["keySpecShortcut","spec","key","mods","actionShortcuts","out","seen","actionBindings","action","params","paramsMatch","opts","shortcut","token","bound","wanted","k","v"],"sources":["../../../src/interactions/actions/actionShortcuts.ts"],"sourcesContent":["/**\n * Project an action's keyboard bindings into the shape a shortcut chip\n * renders from (`formatShortcut` / `formatShortcutParts` in `@weasel-js/ui`).\n */\nimport type { GestureSpec } from '../gestures/spec';\nimport type { Action } from '@weasel-js/routing';\nimport { actionBindings } from '@weasel-js/routing';\n\n/** One keyboard shortcut, flattened for display. Structurally the\n * `ShortcutInput` weasel-ui formats — kept local so core doesn't depend on\n * the UI package. */\nexport interface ActionShortcut {\n key: string;\n mod: boolean;\n alt: boolean;\n shift: boolean;\n}\n\n/**\n * The chip form of a single gesture spec, or `undefined` when the spec has\n * none.\n *\n * - A spec's `key` may list spellings of one keycap (`['[', '{']` — the\n * shifted bracket reports as `'{'`). The first is the shortcut's name.\n * - A modifier declared `'optional'` matches held or unheld, so it isn't\n * part of what the user has to press.\n *\n * Non-keyboard specs (drag, wheel, click) have no chip form. Neither does a\n * *required* `ctrl` or `meta`: the display shape carries only `mod`.\n */\nexport function keySpecShortcut(spec: GestureSpec): ActionShortcut | undefined {\n if (spec.kind !== 'key' && spec.kind !== 'key-held') return undefined;\n const key = Array.isArray(spec.key) ? spec.key[0] : spec.key;\n if (typeof key !== 'string' || key.length === 0) return undefined;\n const mods = 'mods' in spec ? spec.mods : undefined;\n return {\n key,\n mod: mods?.mod === true,\n alt: mods?.alt === true,\n shift: mods?.shift === true,\n };\n}\n\n/**\n * Every keyboard shortcut an action answers to, in declaration order.\n * Specs `keySpecShortcut` has no chip for are skipped, and bindings it leaves\n * identical are emitted once; an action bound only to those returns empty.\n *\n * With `params` — an `ActionItem`'s — only the bindings that pass those same\n * values count, so each variant of `flip` gets its own key.\n */\nexport function actionShortcuts(\n action: Action,\n params?: Readonly<Record<string, unknown>>,\n): readonly ActionShortcut[] {\n const out: ActionShortcut[] = [];\n const seen = new Set<string>();\n for (const { spec, opts } of actionBindings(action)) {\n if (params && !paramsMatch(opts?.params, params)) continue;\n const shortcut = keySpecShortcut(spec);\n if (!shortcut) continue;\n const token = `${shortcut.key}|${shortcut.mod}|${shortcut.alt}|${shortcut.shift}`;\n if (seen.has(token)) continue;\n seen.add(token);\n out.push(shortcut);\n }\n return out;\n}\n\nfunction paramsMatch(bound: unknown, wanted: Readonly<Record<string, unknown>>): boolean {\n if (typeof bound !== 'object' || bound === null) return false;\n return Object.entries(wanted).every(([k, v]) => (bound as Record<string, unknown>)[k] === v);\n}\n"],"mappings":";;AA8BA,SAAgBA,EAAgB,GAA+C;CAC7E,IAAIC,EAAK,SAAS,SAASA,EAAK,SAAS,YAAY;CACrD,IAAMC,IAAM,MAAM,QAAQD,EAAK,GAAG,IAAIA,EAAK,IAAI,KAAKA,EAAK;CACzD,IAAI,OAAOC,KAAQ,YAAYA,EAAI,WAAW,GAAG;CACjD,IAAMC,IAAO,UAAUF,IAAOA,EAAK,OAAO,KAAA;CAC1C,OAAO;EACL;EACA,KAAKE,GAAM,QAAQ;EACnB,KAAKA,GAAM,QAAQ;EACnB,OAAOA,GAAM,UAAU;CACzB;AACF;AAUA,SAAgBC,EACd,GACA,GAC2B;CAC3B,IAAMC,IAAwB,CAAC,GACzBC,oBAAO,IAAI,IAAY;CAC7B,KAAK,IAAM,EAAE,SAAM,aAAUC,EAAeC,CAAM,GAAG;EACnD,IAAIC,KAAU,CAACC,EAAYC,GAAM,QAAQF,CAAM,GAAG;EAClD,IAAMG,IAAWZ,EAAgBC,CAAI;EACrC,IAAI,CAACW,GAAU;EACf,IAAMC,IAAQ,GAAGD,EAAS,IAAI,GAAGA,EAAS,IAAI,GAAGA,EAAS,IAAI,GAAGA,EAAS;EAC1E,AAAIN,EAAK,IAAIO,CAAK,MAClBP,EAAK,IAAIO,CAAK,GACdR,EAAI,KAAKO,CAAQ;CACnB;CACA,OAAOP;AACT;AAEA,SAASK,EAAY,GAAgB,GAAoD;CAEvF,OADI,OAAOI,KAAU,aAAYA,IAAuB,KACjD,OAAO,QAAQC,CAAM,CAAC,CAAC,OAAO,CAACC,GAAGC,OAAQH,EAAkCE,OAAOC,CAAC;AAC7F"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { poseDescriptorOf as
|
|
1
|
+
import { visualBoundsViaDescriptor as e } from "../../../core/geometry/poseDescriptor.js";
|
|
2
|
+
import { poseDescriptorOf as t } from "../poseDescriptorDep.js";
|
|
3
|
+
import { translateEach as n } from "../selectionSubtree.js";
|
|
3
4
|
import { scenePoseFrame as r } from "../poseFrame.js";
|
|
4
5
|
import { actionReferenceSources as i } from "../spatialReference.js";
|
|
5
|
-
import { alignDeltaFor as a, alignTargetBounds as o } from "
|
|
6
|
-
import { AlignBottomIcon as s, AlignCenterXIcon as c, AlignCenterYIcon as l, AlignLeftIcon as u, AlignRightIcon as d, AlignTopIcon as f } from "
|
|
6
|
+
import { alignDeltaFor as a, alignTargetBounds as o } from "./align.js";
|
|
7
|
+
import { AlignBottomIcon as s, AlignCenterXIcon as c, AlignCenterYIcon as l, AlignLeftIcon as u, AlignRightIcon as d, AlignTopIcon as f } from "../defaults/icons/alignIcons.js";
|
|
7
8
|
import { ActionDisabledReason as p } from "@weasel-js/routing";
|
|
8
9
|
import { jsx as m } from "react/jsx-runtime";
|
|
9
|
-
//#region src/interactions/actions/
|
|
10
|
+
//#region src/interactions/actions/align/action.tsx
|
|
10
11
|
var h = {
|
|
11
12
|
left: "align.left",
|
|
12
13
|
right: "align.right",
|
|
@@ -29,16 +30,14 @@ var h = {
|
|
|
29
30
|
"center-x": /* @__PURE__ */ m(c, {}),
|
|
30
31
|
"center-y": /* @__PURE__ */ m(l, {})
|
|
31
32
|
};
|
|
32
|
-
function v(
|
|
33
|
-
let
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
});
|
|
33
|
+
function v(t, s, c, l, u, d) {
|
|
34
|
+
let f = t.get(), p = r(s), m = f.map((e) => p.world(e)).map((t) => e(t, l)), h = o(m, u?.to, i(u, d, s, p, l));
|
|
35
|
+
if (h === null) return;
|
|
36
|
+
let g = f.map((e, t) => ({
|
|
37
|
+
id: e,
|
|
38
|
+
...a(m[t], h, c)
|
|
39
|
+
}));
|
|
40
|
+
s.batch("Align", () => n(s, p, l, g));
|
|
42
41
|
}
|
|
43
42
|
function y(e) {
|
|
44
43
|
return {
|
|
@@ -51,14 +50,13 @@ function y(e) {
|
|
|
51
50
|
"selection",
|
|
52
51
|
"scene",
|
|
53
52
|
"poseDescriptor",
|
|
54
|
-
"poseComposition",
|
|
55
53
|
"pointer"
|
|
56
54
|
],
|
|
57
55
|
invoker: {
|
|
58
56
|
timing: "immediate",
|
|
59
|
-
run: (
|
|
60
|
-
let i =
|
|
61
|
-
i && a && v(i, a, e, n
|
|
57
|
+
run: (n, r) => {
|
|
58
|
+
let i = n.selection, a = n.scene;
|
|
59
|
+
i && a && v(i, a, e, t(n.poseDescriptor), r, n.pointer);
|
|
62
60
|
}
|
|
63
61
|
},
|
|
64
62
|
enabled: (e) => ((e?.selection)?.get().length ?? 0) >= 1 || p.SelectionRequired
|
|
@@ -68,4 +66,4 @@ var b = y("left"), x = y("right"), S = y("top"), C = y("bottom"), w = y("center-
|
|
|
68
66
|
//#endregion
|
|
69
67
|
export { C as alignBottomAction, w as alignCenterXAction, T as alignCenterYAction, b as alignLeftAction, x as alignRightAction, S as alignTopAction };
|
|
70
68
|
|
|
71
|
-
//# sourceMappingURL=
|
|
69
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","names":["ID_FOR","\"left\"","\"right\"","\"top\"","\"bottom\"","LABEL_FOR","ICON_FOR","AlignLeftIcon","AlignRightIcon","AlignTopIcon","AlignBottomIcon","AlignCenterXIcon","AlignCenterYIcon","alignSelection","ids","selection","frame","scenePoseFrame","scene","bounds","id","visualBoundsViaDescriptor","p","geom","target","alignTargetBounds","params","actionReferenceSources","pointer","moves","alignDeltaFor","i","edge","translateEach","makeAlignAction","deps","poseDescriptorOf","ActionDisabledReason","alignLeftAction","alignRightAction","alignTopAction","alignBottomAction","alignCenterXAction","alignCenterYAction"],"sources":["../../../../src/interactions/actions/align/action.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type { Scene } from 'core/scene/types';\nimport type { PoseDescriptor } from '../resize/geometry';\nimport { poseDescriptorOf } from '../poseDescriptorDep';\nimport {\n alignDeltaFor,\n alignTargetBounds,\n visualBoundsViaDescriptor,\n type AlignEdge,\n type AlignReference,\n} from './align';\nimport { actionReferenceSources } from '../spatialReference';\nimport type { PointerContextValue } from '@weasel-js/routing/react';\nimport { scenePoseFrame } from '../poseFrame';\nimport { translateEach } from '../selectionSubtree';\nimport type { Action } from '@weasel-js/routing';\nimport { ActionDisabledReason } from '@weasel-js/routing';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport type { ImmediateInvoker } from '@weasel-js/routing';\nimport {\n AlignLeftIcon,\n AlignRightIcon,\n AlignTopIcon,\n AlignBottomIcon,\n AlignCenterXIcon,\n AlignCenterYIcon,\n} from '../defaults/icons/alignIcons';\nconst ID_FOR: Record<AlignEdge, string> = {\n 'left': 'align.left',\n 'right': 'align.right',\n 'top': 'align.top',\n 'bottom': 'align.bottom',\n 'center-x': 'align.centerX',\n 'center-y': 'align.centerY',\n};\nconst LABEL_FOR: Record<AlignEdge, string> = {\n 'left': 'Align Left',\n 'right': 'Align Right',\n 'top': 'Align Top',\n 'bottom': 'Align Bottom',\n 'center-x': 'Align Centers Horizontally',\n 'center-y': 'Align Centers Vertically',\n};\nconst ICON_FOR: Record<AlignEdge, ReactNode> = {\n 'left': <AlignLeftIcon />,\n 'right': <AlignRightIcon />,\n 'top': <AlignTopIcon />,\n 'bottom': <AlignBottomIcon />,\n 'center-x': <AlignCenterXIcon />,\n 'center-y': <AlignCenterYIcon />,\n};\n\n// ---------------------------------------------------------------------------\n// Shared helper for descriptor invokers\n// ---------------------------------------------------------------------------\n\n/**\n * Apply an align operation to the current selection via the Scene API.\n * Reads poses through the `poseDescriptor` dep; what the selection aligns to\n * comes from `params.to` (an `AlignReference`, default `'union'`).\n *\n * The edge every member lines up on is a world edge, so the bounds are read\n * and translated in world and each result is stored back in its own parent's\n * frame.\n */\nfunction alignSelection(\n selection: SelectionApi,\n scene: Scene<unknown, string, unknown>,\n edge: AlignEdge,\n geom: PoseDescriptor<unknown>,\n params: Record<string, unknown> | undefined,\n pointer: PointerContextValue | undefined,\n): void {\n const ids = selection.get();\n const frame = scenePoseFrame(scene);\n const poses = ids.map((id) => frame.world(id));\n const bounds = poses.map((p) => visualBoundsViaDescriptor(p, geom));\n const target = alignTargetBounds(\n bounds,\n params?.to as AlignReference | undefined,\n actionReferenceSources(params, pointer, scene, frame, geom),\n );\n if (target === null) return;\n const moves = ids.map((id, i) => ({ id, ...alignDeltaFor(bounds[i], target, edge) }));\n scene.batch('Align', () => translateEach(scene, frame, geom, moves));\n}\n\n// ---------------------------------------------------------------------------\n// Static descriptors\n// ---------------------------------------------------------------------------\n\nfunction makeAlignAction(edge: AlignEdge): Action {\n return {\n id: ID_FOR[edge],\n label: LABEL_FOR[edge],\n icon: ICON_FOR[edge],\n group: 'align',\n eligible: { capability: 'transforms-selection' },\n requires: ['selection', 'scene', 'poseDescriptor', 'pointer'],\n // No default keybindings — six edges/centers don't fit a clean default\n // chord set. Wire bindings explicitly via the actions registry override map.\n invoker: {\n timing: 'immediate',\n run: (deps, params) => {\n const selection = deps.selection;\n const scene = deps.scene;\n if (!selection || !scene) return;\n alignSelection(\n selection, scene, edge, poseDescriptorOf(deps.poseDescriptor),\n params, deps.pointer,\n );\n },\n } satisfies ImmediateInvoker,\n // One item is enough: `enabled` cannot see the binding's `to`, and every\n // reference but `'union'` aligns a single item. Deps-aware, since a\n // constant disabled reason greys the entry out forever (see\n // `requiresSelection`).\n enabled: (deps) => {\n const selection = deps?.selection;\n const count = selection?.get().length ?? 0;\n return count >= 1 ? true : ActionDisabledReason.SelectionRequired;\n },\n };\n}\n\n/** @experimental Static descriptor for align-left. */\nexport const alignLeftAction = makeAlignAction('left');\n/** @experimental Static descriptor for align-right. */\nexport const alignRightAction = makeAlignAction('right');\n/** @experimental Static descriptor for align-top. */\nexport const alignTopAction = makeAlignAction('top');\n/** @experimental Static descriptor for align-bottom. */\nexport const alignBottomAction = makeAlignAction('bottom');\n/** @experimental Static descriptor for align-center-x. */\nexport const alignCenterXAction = makeAlignAction('center-x');\n/** @experimental Static descriptor for align-center-y. */\nexport const alignCenterYAction = makeAlignAction('center-y');\n\n"],"mappings":";;;;;;;;;;AA2BA,IAAMA,IAAoC;CACxCC,MAAQ;CACRC,OAAS;CACTC,KAAO;CACPC,QAAU;CACV,YAAY;CACZ,YAAY;AACd,GACMC,IAAuC;CAC3CJ,MAAQ;CACRC,OAAS;CACTC,KAAO;CACPC,QAAU;CACV,YAAY;CACZ,YAAY;AACd,GACME,IAAyC;CAC7CL,MAAQ,kBAACM,GAAD,CAAgB,CAAA;CACxBL,OAAS,kBAACM,GAAD,CAAiB,CAAA;CAC1BL,KAAO,kBAACM,GAAD,CAAe,CAAA;CACtBL,QAAU,kBAACM,GAAD,CAAkB,CAAA;CAC5B,YAAY,kBAACC,GAAD,CAAmB,CAAA;CAC/B,YAAY,kBAACC,GAAD,CAAmB,CAAA;AACjC;AAeA,SAASC,EACP,GACA,GACA,GACA,GACA,GACA,GACM;CACN,IAAMC,IAAMC,EAAU,IAAI,GACpBC,IAAQC,EAAeC,CAAK,GAE5BC,IADQL,EAAI,KAAK,MAAOE,EAAM,MAAMI,CAAE,CAC7B,CAAA,CAAM,KAAK,MAAMC,EAA0BC,GAAGC,CAAI,CAAC,GAC5DC,IAASC,EACbN,GACAO,GAAQ,IACRC,EAAuBD,GAAQE,GAASV,GAAOF,GAAOO,CAAI,CAC5D;CACA,IAAIC,MAAW,MAAM;CACrB,IAAMK,IAAQf,EAAI,KAAK,GAAI,OAAO;EAAE;EAAI,GAAGgB,EAAcX,EAAOY,IAAIP,GAAQQ,CAAI;CAAE,EAAE;CACpF,EAAM,MAAM,eAAeC,EAAcf,GAAOF,GAAOO,GAAMM,CAAK,CAAC;AACrE;AAMA,SAASK,EAAgB,GAAyB;CAChD,OAAO;EACL,IAAIlC,EAAOgC;EACX,OAAO3B,EAAU2B;EACjB,MAAM1B,EAAS0B;EACf,OAAO;EACP,UAAU,EAAE,YAAY,uBAAuB;EAC/C,UAAU;GAAC;GAAa;GAAS;GAAkB;EAAS;EAG5D,SAAS;GACP,QAAQ;GACR,MAAM,GAAM,MAAW;IACrB,IAAMjB,IAAYoB,EAAK,WACjBjB,IAAQiB,EAAK;IACnB,AAAKpB,KAAcG,KACnBL,EACEE,GAAWG,GAAOc,GAAMI,EAAiBD,EAAK,cAAc,GAC5DT,GAAQS,EAAK,OACf;GACF;EACF;EAKA,UAAU,QACUA,GAAM,UAAA,EACC,IAAI,CAAC,CAAC,UAAU,MACzB,KAAWE,EAAqB;CAEpD;AACF;AAGA,IAAaC,IAAqBJ,EAAgB,MAAM,GAE3CK,IAAqBL,EAAgB,OAAO,GAE5CM,IAAqBN,EAAgB,KAAK,GAE1CO,IAAqBP,EAAgB,QAAQ,GAE7CQ,IAAqBR,EAAgB,UAAU,GAE/CS,IAAqBT,EAAgB,UAAU"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { IDENTITY_POSE_COMPOSITION as e } from "../../../core/scene/composeFrame.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { unionAABB as t } from "../../../core/geometry/unionBounds.js";
|
|
3
|
+
import { RECT_POSE_DESCRIPTOR as n, translatePoseViaDescriptor as r, visualBoundsViaDescriptor as i } from "../../../core/geometry/poseDescriptor.js";
|
|
4
|
+
import { createTransformOp as a } from "../../../core/ops/transform.js";
|
|
5
5
|
import { poseFrame as o } from "../poseFrame.js";
|
|
6
6
|
import { dispatchApplyBatch as s } from "../../../core/applyOps.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
7
|
+
import { resolveSpatialReference as c } from "../spatialReference.js";
|
|
8
|
+
import { useCallback as l } from "react";
|
|
9
|
+
import { useLatest as u } from "@weasel-js/react";
|
|
10
|
+
import { usePointerContext as d } from "@weasel-js/routing/react";
|
|
11
11
|
//#region src/interactions/actions/align/align.ts
|
|
12
|
-
function f(e,
|
|
13
|
-
return
|
|
12
|
+
function f(e, n, r) {
|
|
13
|
+
return n === void 0 || n === "union" ? e.length < 2 ? null : t([...e]) : e.length === 0 ? null : c(n, r);
|
|
14
14
|
}
|
|
15
15
|
function p(e, t, n) {
|
|
16
16
|
switch (n) {
|
|
@@ -40,13 +40,13 @@ function p(e, t, n) {
|
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
function m(
|
|
44
|
-
let m =
|
|
45
|
-
return { align:
|
|
46
|
-
let l = m.current, u = h.current, d = l.getSelection(), g = u.geometry ??
|
|
43
|
+
function m(t, c = {}) {
|
|
44
|
+
let m = u(t), h = u(c), g = d(), _ = u(g);
|
|
45
|
+
return { align: l((t, c) => {
|
|
46
|
+
let l = m.current, u = h.current, d = l.getSelection(), g = u.geometry ?? n, v = o({
|
|
47
47
|
getPose: (e) => l.getPose(e),
|
|
48
48
|
getParent: (e) => l.getParent?.(e) ?? null
|
|
49
|
-
}, u.composition ?? e), y = d.map((e) => v.world(e)), b = y.map((e) =>
|
|
49
|
+
}, u.composition ?? e), y = d.map((e) => v.world(e)), b = y.map((e) => i(e, g)), x = f(b, c, {
|
|
50
50
|
pointer: () => {
|
|
51
51
|
let e = _.current?.get();
|
|
52
52
|
return e ? {
|
|
@@ -54,15 +54,15 @@ function m(n, l = {}) {
|
|
|
54
54
|
y: e.worldY
|
|
55
55
|
} : null;
|
|
56
56
|
},
|
|
57
|
-
nodeBounds: (e) =>
|
|
57
|
+
nodeBounds: (e) => i(v.world(e), g)
|
|
58
58
|
});
|
|
59
59
|
if (x === null) return;
|
|
60
60
|
let S = [];
|
|
61
61
|
for (let e = 0; e < d.length; e++) {
|
|
62
|
-
let { dx:
|
|
63
|
-
if (
|
|
64
|
-
let o =
|
|
65
|
-
S.push(
|
|
62
|
+
let { dx: n, dy: i } = p(b[e], x, t);
|
|
63
|
+
if (n === 0 && i === 0) continue;
|
|
64
|
+
let o = r(y[e], n, i, g);
|
|
65
|
+
S.push(a({
|
|
66
66
|
id: d[e],
|
|
67
67
|
from: l.getPose(d[e]),
|
|
68
68
|
to: v.local(d[e], o)
|
|
@@ -76,6 +76,6 @@ function m(n, l = {}) {
|
|
|
76
76
|
]) };
|
|
77
77
|
}
|
|
78
78
|
//#endregion
|
|
79
|
-
export { p as alignDeltaFor, f as alignTargetBounds,
|
|
79
|
+
export { p as alignDeltaFor, f as alignTargetBounds, r as translatePoseViaDescriptor, m as useAlign, i as visualBoundsViaDescriptor };
|
|
80
80
|
|
|
81
81
|
//# sourceMappingURL=align.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"align.js","names":["alignTargetBounds","to","bounds","unionAABB","resolveSpatialReference","src","alignDeltaFor","edge","u","b","useAlign","adapterRef","useLatest","adapter","optsRef","options","pointer","usePointerContext","pointerRef","useCallback","a","o","sel","geom","RECT_POSE_DESCRIPTOR","frame","poseFrame","id","IDENTITY_POSE_COMPOSITION","poses","visualBoundsViaDescriptor","p","target","ops","i","dx","dy","translatePoseViaDescriptor","createTransformOp","dispatchApplyBatch"],"sources":["../../../../src/interactions/actions/align/align.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { createTransformOp } from 'core/ops/transform';\nimport type { Op } from 'core/ops/types';\nimport { dispatchApplyBatch } from 'core/applyOps';\nimport type { NodeId } from 'core/scene/types';\nimport { RECT_POSE_DESCRIPTOR, type PoseDescriptor } from '../resize/geometry';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport { unionAABB } from 'core/geometry/unionBounds';\nimport { poseFrame } from '../poseFrame';\nimport { IDENTITY_POSE_COMPOSITION, type PoseComposition } from '
|
|
1
|
+
{"version":3,"file":"align.js","names":["alignTargetBounds","to","bounds","unionAABB","resolveSpatialReference","src","alignDeltaFor","edge","u","b","useAlign","adapterRef","useLatest","adapter","optsRef","options","pointer","usePointerContext","pointerRef","useCallback","a","o","sel","geom","RECT_POSE_DESCRIPTOR","frame","poseFrame","id","IDENTITY_POSE_COMPOSITION","poses","visualBoundsViaDescriptor","p","target","ops","i","dx","dy","translatePoseViaDescriptor","createTransformOp","dispatchApplyBatch"],"sources":["../../../../src/interactions/actions/align/align.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { createTransformOp } from 'core/ops/transform';\nimport type { Op } from 'core/ops/types';\nimport { dispatchApplyBatch } from 'core/applyOps';\nimport type { NodeId } from 'core/scene/types';\nimport { RECT_POSE_DESCRIPTOR, type PoseDescriptor } from '../resize/geometry';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport { unionAABB } from 'core/geometry/unionBounds';\nimport { poseFrame } from '../poseFrame';\nimport { IDENTITY_POSE_COMPOSITION, type PoseComposition } from 'core/scene/composePose';\nimport { usePointerContext } from '@weasel-js/routing/react';\nimport { resolveSpatialReference, type SpatialReference, type SpatialReferenceSources } from '../spatialReference';\n\nexport { visualBoundsViaDescriptor, translatePoseViaDescriptor } from '../resize/geometry';\nimport { visualBoundsViaDescriptor, translatePoseViaDescriptor } from '../resize/geometry';\n\n/** Edge or center the selection should align to within the reference's\n * bounds (rotated members contribute their ink extent). */\nexport type AlignEdge = 'left' | 'right' | 'top' | 'bottom' | 'center-x' | 'center-y';\n\n/** @experimental What the selection aligns to: `'union'` — the selection's\n * own visual union AABB, the default — or a {@link SpatialReference}. */\nexport type AlignReference = 'union' | SpatialReference;\n\n/** @experimental The bounds each member of `bounds` aligns to under `to`, or\n * `null` when there is nothing to align: a union of fewer than two members,\n * an empty selection, or a reference that names nothing right now. */\nexport function alignTargetBounds(\n bounds: readonly Bounds[],\n to: AlignReference | undefined,\n src: SpatialReferenceSources,\n): Bounds | null {\n if (to === undefined || to === 'union') return bounds.length < 2 ? null : unionAABB([...bounds]);\n if (bounds.length === 0) return null;\n return resolveSpatialReference(to, src);\n}\n\n/** Adapter for `useAlign`. */\nexport interface AlignAdapter<TPose> {\n getSelection(): NodeId[];\n /** The pose as stored — local to the node's parent. */\n getPose(id: NodeId): TPose;\n /** The parent chain, for a scene whose container poses define a frame.\n * Omit it (or leave `composition` unset) for an absolute-pose scene. */\n getParent?(id: NodeId): NodeId | null;\n applyOps?(ops: Op[], label?: string): void;\n}\n\n/** Options for `useAlign`. */\nexport interface UseAlignOptions<TPose> {\n /** Projection between `TPose` and bounds. Defaults to `RECT_POSE_DESCRIPTOR`\n * for `{x,y,width,height}` poses. Pass `pathPoseDescriptor` for `Path`\n * poses so polygon coords translate correctly. */\n geometry?: PoseDescriptor<TPose>;\n /** Label passed to applyOps. Default 'Align'. */\n label?: string;\n /** How local poses fold up to world. Default IDENTITY, where the two are\n * the same value and the alignment runs entirely in stored coordinates. */\n composition?: PoseComposition<TPose>;\n}\n\n/** Return shape of `useAlign`. */\nexport interface UseAlignReturn {\n /** Imperative trigger. `to` defaults to `'union'`, which needs two items;\n * any other reference aligns a single item too. `'pointer'` reads the\n * surrounding `<PointerContextProvider>`. */\n align(edge: AlignEdge, to?: AlignReference): void;\n}\n\n/** Compute the (dx, dy) translation that moves AABB `b` so that the requested\n * `edge`/center matches the corresponding feature of the union AABB `u`. */\nexport function alignDeltaFor(b: Bounds, u: Bounds, edge: AlignEdge): { dx: number; dy: number } {\n switch (edge) {\n case 'left': return { dx: u.x - b.x, dy: 0 };\n case 'right': return { dx: (u.x + u.width) - (b.x + b.width), dy: 0 };\n case 'top': return { dx: 0, dy: u.y - b.y };\n case 'bottom': return { dx: 0, dy: (u.y + u.height) - (b.y + b.height) };\n case 'center-x': return { dx: (u.x + u.width / 2) - (b.x + b.width / 2), dy: 0 };\n case 'center-y': return { dx: 0, dy: (u.y + u.height / 2) - (b.y + b.height / 2) };\n }\n}\n\n/** Align the current selection to a shared edge or center of the selection's\n * union AABB, or of another reference. Single batch — one undo step.\n *\n * The edge is a world edge: bounds are measured and translated in world, and\n * each result is stored back in its own parent's frame. */\nexport function useAlign<TPose>(\n adapter: AlignAdapter<TPose>,\n options: UseAlignOptions<TPose> = {},\n): UseAlignReturn {\n const adapterRef = useLatest(adapter);\n const optsRef = useLatest(options);\n const pointer = usePointerContext();\n const pointerRef = useLatest(pointer);\n\n const align = useCallback((edge: AlignEdge, to?: AlignReference): void => {\n const a = adapterRef.current;\n const o = optsRef.current;\n const sel = a.getSelection();\n const geom =\n o.geometry ??\n (RECT_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>);\n const frame = poseFrame<TPose>(\n {\n getPose: (id) => a.getPose(id as NodeId),\n getParent: (id) => (a.getParent?.(id as NodeId) ?? null) as string | null,\n },\n o.composition ?? (IDENTITY_POSE_COMPOSITION as PoseComposition<TPose>),\n );\n const poses = sel.map((id) => frame.world(id));\n const bounds = poses.map((p) => visualBoundsViaDescriptor(p, geom));\n const target = alignTargetBounds(bounds, to, {\n pointer: () => {\n const p = pointerRef.current?.get();\n return p ? { x: p.worldX, y: p.worldY } : null;\n },\n nodeBounds: (id) => visualBoundsViaDescriptor(frame.world(id), geom),\n });\n if (target === null) return;\n const ops: Op[] = [];\n for (let i = 0; i < sel.length; i++) {\n const { dx, dy } = alignDeltaFor(bounds[i], target, edge);\n if (dx === 0 && dy === 0) continue;\n const to = translatePoseViaDescriptor(poses[i], dx, dy, geom);\n ops.push(createTransformOp<TPose>({\n id: sel[i],\n from: a.getPose(sel[i]),\n to: frame.local(sel[i], to),\n }));\n }\n if (ops.length === 0) return;\n dispatchApplyBatch(a, ops, o.label ?? 'Align');\n }, [adapterRef, optsRef, pointerRef]);\n\n return { align };\n}\n"],"mappings":";;;;;;;;;;;AA4BA,SAAgBA,EACd,GACA,GACA,GACe;CAGf,OAFIC,MAAO,KAAA,KAAaA,MAAO,UAAgBC,EAAO,SAAS,IAAI,OAAOC,EAAU,CAAC,GAAGD,CAAM,CAAC,IAC3FA,EAAO,WAAW,IAAU,OACzBE,EAAwBH,GAAII,CAAG;AACxC;AAoCA,SAAgBC,EAAc,GAAW,GAAW,GAA6C;CAC/F,QAAQC,GAAR;EACE,KAAK,QAAY,OAAO;GAAE,IAAIC,EAAE,IAAIC,EAAE;GAAG,IAAI;EAAE;EAC/C,KAAK,SAAY,OAAO;GAAE,IAAKD,EAAE,IAAIA,EAAE,SAAUC,EAAE,IAAIA,EAAE;GAAQ,IAAI;EAAE;EACvE,KAAK,OAAY,OAAO;GAAE,IAAI;GAAG,IAAID,EAAE,IAAIC,EAAE;EAAE;EAC/C,KAAK,UAAY,OAAO;GAAE,IAAI;GAAG,IAAKD,EAAE,IAAIA,EAAE,UAAWC,EAAE,IAAIA,EAAE;EAAQ;EACzE,KAAK,YAAY,OAAO;GAAE,IAAKD,EAAE,IAAIA,EAAE,QAAQ,KAAMC,EAAE,IAAIA,EAAE,QAAQ;GAAI,IAAI;EAAE;EAC/E,KAAK,YAAY,OAAO;GAAE,IAAI;GAAG,IAAKD,EAAE,IAAIA,EAAE,SAAS,KAAMC,EAAE,IAAIA,EAAE,SAAS;EAAG;CACnF;AACF;AAOA,SAAgBC,EACd,GACA,IAAkC,CAAC,GACnB;CAChB,IAAMC,IAAaC,EAAUC,CAAO,GAC9BC,IAAUF,EAAUG,CAAO,GAC3BC,IAAUC,EAAkB,GAC5BC,IAAaN,EAAUI,CAAO;CAyCpC,OAAO,EAAE,OAvCKG,GAAa,GAAiB,MAA8B;EACxE,IAAMC,IAAIT,EAAW,SACfU,IAAIP,EAAQ,SACZQ,IAAMF,EAAE,aAAa,GACrBG,IACJF,EAAE,YACDG,GACGC,IAAQC,EACZ;GACE,UAAU,MAAON,EAAE,QAAQO,CAAY;GACvC,YAAY,MAAQP,EAAE,YAAYO,CAAY,KAAK;EACrD,GACAN,EAAE,eAAgBO,CACpB,GACMC,IAAQP,EAAI,KAAK,MAAOG,EAAM,MAAME,CAAE,CAAC,GACvCzB,IAAS2B,EAAM,KAAK,MAAMC,EAA0BC,GAAGR,CAAI,CAAC,GAC5DS,IAAShC,EAAkBE,GAAQD,GAAI;GAC3C,eAAe;IACb,IAAM8B,IAAIb,EAAW,SAAS,IAAI;IAClC,OAAOa,IAAI;KAAE,GAAGA,EAAE;KAAQ,GAAGA,EAAE;IAAO,IAAI;GAC5C;GACA,aAAa,MAAOD,EAA0BL,EAAM,MAAME,CAAE,GAAGJ,CAAI;EACrE,CAAC;EACD,IAAIS,MAAW,MAAM;EACrB,IAAMC,IAAY,CAAC;EACnB,KAAK,IAAIC,IAAI,GAAGA,IAAIZ,EAAI,QAAQ,KAAK;GACnC,IAAM,EAAE,OAAI,UAAOhB,EAAcJ,EAAOgC,IAAIF,GAAQzB,CAAI;GACxD,IAAI4B,MAAO,KAAKC,MAAO,GAAG;GAC1B,IAAMnC,IAAKoC,EAA2BR,EAAMK,IAAIC,GAAIC,GAAIb,CAAI;GAC5D,EAAI,KAAKe,EAAyB;IAChC,IAAIhB,EAAIY;IACR,MAAMd,EAAE,QAAQE,EAAIY,EAAE;IACtB,IAAIT,EAAM,MAAMH,EAAIY,IAAIjC,CAAE;GAC5B,CAAC,CAAC;EACJ;EACA,AAAIgC,EAAI,WAAW,KACnBM,EAAmBnB,GAAGa,GAAKZ,EAAE,SAAS,OAAO;CAC/C,GAAG;EAACV;EAAYG;EAASI;CAAU,CAE1B,EAAM;AACjB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { applyBooleanOp as e } from "./booleans.js";
|
|
2
|
+
import { CropIcon as t, DivideIcon as n, ExcludeIcon as r, IntersectIcon as i, MergeIcon as a, SubtractIcon as o, TrimIcon as s, UnionIcon as c } from "../defaults/icons/booleanIcons.js";
|
|
3
|
+
import { ActionDisabledReason as l } from "@weasel-js/routing";
|
|
4
|
+
import { jsx as u } from "react/jsx-runtime";
|
|
5
|
+
//#region src/interactions/actions/booleans/action.tsx
|
|
6
|
+
var d = {
|
|
7
|
+
union: "pathfinder.union",
|
|
8
|
+
intersect: "pathfinder.intersect",
|
|
9
|
+
subtract: "pathfinder.subtract",
|
|
10
|
+
exclude: "pathfinder.exclude",
|
|
11
|
+
divide: "pathfinder.divide",
|
|
12
|
+
crop: "pathfinder.crop",
|
|
13
|
+
trim: "pathfinder.trim",
|
|
14
|
+
merge: "pathfinder.merge"
|
|
15
|
+
}, f = {
|
|
16
|
+
union: "Unite",
|
|
17
|
+
intersect: "Intersect",
|
|
18
|
+
subtract: "Minus Front",
|
|
19
|
+
exclude: "Exclude",
|
|
20
|
+
divide: "Divide",
|
|
21
|
+
crop: "Crop",
|
|
22
|
+
trim: "Trim",
|
|
23
|
+
merge: "Merge"
|
|
24
|
+
}, p = {
|
|
25
|
+
union: /* @__PURE__ */ u(c, {}),
|
|
26
|
+
intersect: /* @__PURE__ */ u(i, {}),
|
|
27
|
+
subtract: /* @__PURE__ */ u(o, {}),
|
|
28
|
+
exclude: /* @__PURE__ */ u(r, {}),
|
|
29
|
+
divide: /* @__PURE__ */ u(n, {}),
|
|
30
|
+
crop: /* @__PURE__ */ u(t, {}),
|
|
31
|
+
trim: /* @__PURE__ */ u(s, {}),
|
|
32
|
+
merge: /* @__PURE__ */ u(a, {})
|
|
33
|
+
}, m = "unfilled";
|
|
34
|
+
function h(t) {
|
|
35
|
+
return {
|
|
36
|
+
id: d[t],
|
|
37
|
+
label: f[t],
|
|
38
|
+
icon: p[t],
|
|
39
|
+
group: "pathfinder",
|
|
40
|
+
eligible: { capability: "creates-shapes" },
|
|
41
|
+
requires: [
|
|
42
|
+
"selection",
|
|
43
|
+
"booleansAdapter",
|
|
44
|
+
"view"
|
|
45
|
+
],
|
|
46
|
+
invoker: {
|
|
47
|
+
timing: "immediate",
|
|
48
|
+
run: (n) => {
|
|
49
|
+
let r = n.booleansAdapter;
|
|
50
|
+
if (!r) return;
|
|
51
|
+
let i = n.view?.get().scale, a = e(r, t, {
|
|
52
|
+
strokes: m,
|
|
53
|
+
...i ? { scale: i } : {}
|
|
54
|
+
});
|
|
55
|
+
a.kind === "failed" && console.warn(`[pathfinder] ${a.error.message}`);
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
enabled: (e) => ((e?.selection)?.get().length ?? 0) >= 2 || l.SelectionRequired
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
var g = h("union"), _ = h("subtract"), v = h("intersect"), y = h("exclude"), b = h("divide"), x = h("crop"), S = h("trim"), C = h("merge");
|
|
62
|
+
//#endregion
|
|
63
|
+
export { x as pathfinderCropAction, b as pathfinderDivideAction, y as pathfinderExcludeAction, v as pathfinderIntersectAction, C as pathfinderMergeAction, _ as pathfinderSubtractAction, S as pathfinderTrimAction, g as pathfinderUnionAction };
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","names":["ID_FOR","LABEL_FOR","ICON_FOR","UnionIcon","IntersectIcon","SubtractIcon","ExcludeIcon","DivideIcon","CropIcon","TrimIcon","MergeIcon","PATHFINDER_STROKES","makePathfinderAction","op","adapter","deps","scale","result","applyBooleanOp","ActionDisabledReason","pathfinderUnionAction","pathfinderSubtractAction","pathfinderIntersectAction","pathfinderExcludeAction","pathfinderDivideAction","pathfinderCropAction","pathfinderTrimAction","pathfinderMergeAction"],"sources":["../../../../src/interactions/actions/booleans/action.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { applyBooleanOp, type BooleanOp } from './booleans';\nimport type { BooleanStrokes } from './operands';\nimport type { Action } from '@weasel-js/routing';\nimport { ActionDisabledReason } from '@weasel-js/routing';\nimport type { ImmediateInvoker } from '@weasel-js/routing';\nimport {\n UnionIcon,\n IntersectIcon,\n SubtractIcon,\n ExcludeIcon,\n DivideIcon,\n CropIcon,\n TrimIcon,\n MergeIcon,\n} from '../defaults/icons/booleanIcons';\n\nconst ID_FOR: Record<BooleanOp, string> = {\n union: 'pathfinder.union',\n intersect: 'pathfinder.intersect',\n subtract: 'pathfinder.subtract',\n exclude: 'pathfinder.exclude',\n divide: 'pathfinder.divide',\n crop: 'pathfinder.crop',\n trim: 'pathfinder.trim',\n merge: 'pathfinder.merge',\n};\n\nconst LABEL_FOR: Record<BooleanOp, string> = {\n union: 'Unite',\n intersect: 'Intersect',\n subtract: 'Minus Front',\n exclude: 'Exclude',\n divide: 'Divide',\n crop: 'Crop',\n trim: 'Trim',\n merge: 'Merge',\n};\n\nconst ICON_FOR: Record<BooleanOp, ReactNode> = {\n union: <UnionIcon />,\n intersect: <IntersectIcon />,\n subtract: <SubtractIcon />,\n exclude: <ExcludeIcon />,\n divide: <DivideIcon />,\n crop: <CropIcon />,\n trim: <TrimIcon />,\n merge: <MergeIcon />,\n};\n\n/** What a stroked operand gives the built-in Pathfinder actions. */\nconst PATHFINDER_STROKES: BooleanStrokes = 'unfilled';\n\n// ---------------------------------------------------------------------------\n// Static descriptors\n// ---------------------------------------------------------------------------\n\nfunction makePathfinderAction(op: BooleanOp): Action {\n return {\n id: ID_FOR[op],\n label: LABEL_FOR[op],\n icon: ICON_FOR[op],\n group: 'pathfinder',\n eligible: { capability: 'creates-shapes' },\n requires: ['selection', 'booleansAdapter', 'view'],\n // No default keybindings — there's no industry-standard chord set for\n // boolean ops. Wire bindings explicitly via the actions registry override map.\n invoker: {\n timing: 'immediate',\n run: (deps) => {\n const adapter = deps.booleansAdapter;\n if (!adapter) return;\n const scale = deps.view?.get().scale;\n const result = applyBooleanOp(adapter, op, { strokes: PATHFINDER_STROKES, ...(scale ? { scale } : {}) });\n if (result.kind === 'failed') console.warn(`[pathfinder] ${result.error.message}`);\n },\n } satisfies ImmediateInvoker,\n enabled: (deps) => {\n const selection = deps?.selection;\n const count = selection?.get().length ?? 0;\n return count >= 2 ? true : ActionDisabledReason.SelectionRequired;\n },\n };\n}\n\n/** @experimental Static descriptor for pathfinder-union. */\nexport const pathfinderUnionAction = makePathfinderAction('union');\n/** @experimental Static descriptor for pathfinder-subtract. */\nexport const pathfinderSubtractAction = makePathfinderAction('subtract');\n/** @experimental Static descriptor for pathfinder-intersect. */\nexport const pathfinderIntersectAction = makePathfinderAction('intersect');\n/** @experimental Static descriptor for pathfinder-exclude. */\nexport const pathfinderExcludeAction = makePathfinderAction('exclude');\n/** @experimental Static descriptor for pathfinder-divide. */\nexport const pathfinderDivideAction = makePathfinderAction('divide');\n/** @experimental Static descriptor for pathfinder-crop. */\nexport const pathfinderCropAction = makePathfinderAction('crop');\n/** @experimental Static descriptor for pathfinder-trim. */\nexport const pathfinderTrimAction = makePathfinderAction('trim');\n/** @experimental Static descriptor for pathfinder-merge. */\nexport const pathfinderMergeAction = makePathfinderAction('merge');\n\n"],"mappings":";;;;;AAiBA,IAAMA,IAAoC;CACxC,OAAO;CACP,WAAW;CACX,UAAU;CACV,SAAS;CACT,QAAQ;CACR,MAAM;CACN,MAAM;CACN,OAAO;AACT,GAEMC,IAAuC;CAC3C,OAAO;CACP,WAAW;CACX,UAAU;CACV,SAAS;CACT,QAAQ;CACR,MAAM;CACN,MAAM;CACN,OAAO;AACT,GAEMC,IAAyC;CAC7C,OAAO,kBAACC,GAAD,CAAY,CAAA;CACnB,WAAW,kBAACC,GAAD,CAAgB,CAAA;CAC3B,UAAU,kBAACC,GAAD,CAAe,CAAA;CACzB,SAAS,kBAACC,GAAD,CAAc,CAAA;CACvB,QAAQ,kBAACC,GAAD,CAAa,CAAA;CACrB,MAAM,kBAACC,GAAD,CAAW,CAAA;CACjB,MAAM,kBAACC,GAAD,CAAW,CAAA;CACjB,OAAO,kBAACC,GAAD,CAAY,CAAA;AACrB,GAGMC,IAAqC;AAM3C,SAASC,EAAqB,GAAuB;CACnD,OAAO;EACL,IAAIZ,EAAOa;EACX,OAAOZ,EAAUY;EACjB,MAAMX,EAASW;EACf,OAAO;EACP,UAAU,EAAE,YAAY,iBAAiB;EACzC,UAAU;GAAC;GAAa;GAAmB;EAAM;EAGjD,SAAS;GACP,QAAQ;GACR,MAAM,MAAS;IACb,IAAMC,IAAUC,EAAK;IACrB,IAAI,CAACD,GAAS;IACd,IAAME,IAAQD,EAAK,MAAM,IAAI,CAAC,CAAC,OACzBE,IAASC,EAAeJ,GAASD,GAAI;KAAE,SAASF;KAAoB,GAAIK,IAAQ,EAAE,SAAM,IAAI,CAAC;IAAG,CAAC;IACvG,AAAIC,EAAO,SAAS,YAAU,QAAQ,KAAK,gBAAgBA,EAAO,MAAM,SAAS;GACnF;EACF;EACA,UAAU,QACUF,GAAM,UAAA,EACC,IAAI,CAAC,CAAC,UAAU,MACzB,KAAWI,EAAqB;CAEpD;AACF;AAGA,IAAaC,IAA4BR,EAAqB,OAAO,GAExDS,IAA4BT,EAAqB,UAAU,GAE3DU,IAA4BV,EAAqB,WAAW,GAE5DW,IAA4BX,EAAqB,SAAS,GAE1DY,IAA4BZ,EAAqB,QAAQ,GAEzDa,IAA4Bb,EAAqB,MAAM,GAEvDc,IAA4Bd,EAAqB,MAAM,GAEvDe,IAA4Bf,EAAqB,OAAO"}
|