@weasel-js/core 1.4.0-pre.0 → 1.4.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 +433 -0
- package/README.md +22 -18
- package/dist/{chunk-IMFXEINV.js → chunk-HYJL7OOJ.js} +219 -48
- package/dist/chunk-HYJL7OOJ.js.map +1 -0
- package/dist/{chunk-H6E6KPTU.js → chunk-UTIFY2UU.js} +2 -2
- package/dist/chunk-UTIFY2UU.js.map +1 -0
- package/dist/index.d.ts +95 -6
- package/dist/index.js +2 -2
- package/dist/{registry-sBLZYWI1.d.ts → registry-CxSEyDka.d.ts} +15 -15
- package/dist/renderer.js +2 -2
- package/dist/routing.d.ts +2 -1
- package/dist/routing.js +1 -1
- package/package.json +9 -8
- package/dist/chunk-H6E6KPTU.js.map +0 -1
- package/dist/chunk-IMFXEINV.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ActionDisabledReason, useOptionalDepRegistry, DepRegistryProvider, useActionsRegistry, ActionsProvider, useDepRegistry, reportRouteConflicts, buildDepsFromRequires, useDepSource, actionBindings } from './chunk-
|
|
1
|
+
import { ActionDisabledReason, useOptionalDepRegistry, DepRegistryProvider, useActionsRegistry, ActionsProvider, useDepRegistry, reportRouteConflicts, buildDepsFromRequires, useDepSource, actionBindings } from './chunk-UTIFY2UU.js';
|
|
2
2
|
import { scratchKey, createTransformOp, snap, getScratch, createReparentOp, setScratch } from './chunk-Y5KS66G7.js';
|
|
3
3
|
import { fixedCornerOf, DEFAULT_RESIZE_BEHAVIORS, CORNER_ANCHORS, cornerPoint } from './chunk-BLJNRMKB.js';
|
|
4
4
|
import { AUTO_POSE_DESCRIPTOR, resolveUnit, polylineFromPoints, starPath, regularPolygonPath, linePath, ellipsePath, rectPath, polygonFromPoints, PATH_M, PATH_L, PATH_Z, RECT_POSE_DESCRIPTOR, pathPoseDescriptor, withinPxRadius, boundsOfPath, PATH_Q, PATH_C, DEFAULT_FLATTEN_TOLERANCE, flattenQuadratic, flattenCubic, PathBuilder, pointInPath, strokeHitTest, transformPath, translatePath, pxExtent, remapRotatedLeaf, withinPxBox, flattenCubicWithArcLen, flattenQuadraticWithArcLen, PATH_CMD_LENGTHS, pointToGridCell } from './chunk-SBFC6J3C.js';
|
|
@@ -6,7 +6,7 @@ import { dispatchApplyBatch, dlog, dwarn, usePointerContext, PointerContextProvi
|
|
|
6
6
|
import { createSetSelectionOp } from './chunk-ZB7UYJVG.js';
|
|
7
7
|
import { registerOpFactory, createDeleteOp, createInsertOp, rebuildOp } from './chunk-2KKYDDDD.js';
|
|
8
8
|
import { getTexture, chunks, dots, crosshatch, hatch } from './chunk-BJN5ZRIJ.js';
|
|
9
|
-
import { createContext, createElement, forwardRef, useMemo, useRef, useCallback, useState, useImperativeHandle, useSyncExternalStore,
|
|
9
|
+
import { createContext, createElement, forwardRef, useMemo, useRef, useCallback, useState, useEffect, useImperativeHandle, useSyncExternalStore, useLayoutEffect, useContext, useId, useReducer } from 'react';
|
|
10
10
|
import { subscribeGlyphReady, DEFAULT_BAKE_BUDGET, TEXT_VERT_SRC, TEXT_FRAG_SRC, TEXT_SDF_UNIFORMS, TEXT_SDF_ATTRIBUTES, TEXT_FRAG_R8_SRC, markAllFontsNotUploaded, resetBakeBudget, syncDynamicPageTexture, ensureFontTexture, dynamicPageTextureId, textureCacheKey } from '@weasel-js/font';
|
|
11
11
|
export { canQueryLocalFonts, canQueryLocalFonts as canQueryLocalFonts2, enableLocalFontOutlines, enableLocalFontOutlines as enableLocalFontOutlines2, hasFontOutlines, hasFontOutlines as hasFontOutlines2, isCanvasFont, isCanvasFont as isCanvasFont2, listFontOutlines, listFontOutlines as listFontOutlines2, outlineStatus, outlineStatus as outlineStatus2, registerCanvasFont, registerCanvasFont as registerCanvasFont2, registerFont, registerFont as registerFont2, registerFontOutlines, registerFontOutlines as registerFontOutlines2, subscribeGlyphReady, subscribeGlyphReady as subscribeGlyphReady2, unregisterCanvasFont, unregisterCanvasFont as unregisterCanvasFont2, unregisterFontOutlines, unregisterFontOutlines as unregisterFontOutlines2 } from '@weasel-js/font';
|
|
12
12
|
import { resolveTextStyle, resolveAlign, resolveRuns, cachedLayoutRuns, verticalAlignOffset, runsToPlainText, toRuns, fontString, textLineBoxes } from '@weasel-js/text';
|
|
@@ -19,11 +19,13 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
|
19
19
|
import polygonClipping from 'polygon-clipping';
|
|
20
20
|
import { matchSpec, RESERVED_ID_PREFIXES, RESERVED_ID_NAMES, parseTargetSpec, mimeMatchesGlob } from '@weasel-js/gestures';
|
|
21
21
|
import { NORMAL, IMPLICIT_TAGS } from '@weasel-js/modes';
|
|
22
|
+
import { GLYPHS, cursorWorldSize, cursorPaintOps, chromeLineWidthScale, cursorPaintMatrix, resolveCursorTier, cursorFor, resolveCursor } from '@weasel-js/cursor';
|
|
23
|
+
export { bakeCursor, cursorFor, resolveCursor, resolveCursorTier } from '@weasel-js/cursor';
|
|
22
24
|
import { createHistory } from '@weasel-js/history';
|
|
23
25
|
export * from '@weasel-js/history';
|
|
24
26
|
|
|
25
27
|
// src/version.ts
|
|
26
|
-
var VERSION = "1.4.0
|
|
28
|
+
var VERSION = "1.4.0" ;
|
|
27
29
|
|
|
28
30
|
// src/features/grid/roundToCell.ts
|
|
29
31
|
function roundToCell(value, cellSize) {
|
|
@@ -6731,8 +6733,8 @@ function runLayoutPass(scratch, moveCtx) {
|
|
|
6731
6733
|
for (const [cid, pose] of srcLayout.childPoses(srcContainer, srcChildren)) {
|
|
6732
6734
|
const cur = composeWorldPose(poseAdapter, cid, pc.compose);
|
|
6733
6735
|
const next = pose;
|
|
6734
|
-
const
|
|
6735
|
-
if (
|
|
6736
|
+
const same2 = cur.x === next.x && cur.y === next.y && cur.width === next.width && cur.height === next.height;
|
|
6737
|
+
if (same2) continue;
|
|
6736
6738
|
sourceReflow.set(cid, pose);
|
|
6737
6739
|
const parent = scene.get(asNodeId(cid))?.parent ?? null;
|
|
6738
6740
|
scratch.previews.set(asNodeId(cid), rebaseLocalPose(poseAdapter, pose, parent, pc.compose, pc.decompose));
|
|
@@ -8125,6 +8127,11 @@ var cloneAction = {
|
|
|
8125
8127
|
id: "clone",
|
|
8126
8128
|
label: "Clone",
|
|
8127
8129
|
defaultBinding: { kind: "drag" },
|
|
8130
|
+
// The platform's duplicate cursor, and the whole reason this field is
|
|
8131
|
+
// modifier-aware: the select tool binds clone behind `mods: { alt: true }`,
|
|
8132
|
+
// so the pump predicts it — and shows this — only while Alt is down.
|
|
8133
|
+
cursor: "copy",
|
|
8134
|
+
activeCursor: "copy",
|
|
8128
8135
|
eligible: { capability: ["edits-page", "creates-selection"] },
|
|
8129
8136
|
requires: ["selection", "scene", "applyOps"],
|
|
8130
8137
|
invoker: {
|
|
@@ -12285,8 +12292,6 @@ function useHoverTracking(args) {
|
|
|
12285
12292
|
}, [canvasRef, enabled]);
|
|
12286
12293
|
return () => hoverRef.current;
|
|
12287
12294
|
}
|
|
12288
|
-
|
|
12289
|
-
// src/interactions/dispatcher/dispatcher.ts
|
|
12290
12295
|
function pointerGestureId(pointerId) {
|
|
12291
12296
|
return `pointer-${pointerId ?? "mouse"}`;
|
|
12292
12297
|
}
|
|
@@ -12791,7 +12796,7 @@ function createDispatcher(opts) {
|
|
|
12791
12796
|
}
|
|
12792
12797
|
function inFlightCursor() {
|
|
12793
12798
|
for (const action of inFlightActions.values()) {
|
|
12794
|
-
const cursor = action.activeCursor ?? action.cursor;
|
|
12799
|
+
const cursor = resolveCursor(action.activeCursor ?? action.cursor);
|
|
12795
12800
|
if (cursor) return cursor;
|
|
12796
12801
|
}
|
|
12797
12802
|
return null;
|
|
@@ -12974,8 +12979,6 @@ function itemsFromClipboardData(cd) {
|
|
|
12974
12979
|
}
|
|
12975
12980
|
return out;
|
|
12976
12981
|
}
|
|
12977
|
-
|
|
12978
|
-
// src/interactions/dispatcher/useGestureDispatcher.tsx
|
|
12979
12982
|
var DROPOVER_CLASS = "weasel-dropover";
|
|
12980
12983
|
function stylusOf(e) {
|
|
12981
12984
|
return {
|
|
@@ -13017,7 +13020,7 @@ function computeMultiTouchGeometry(positions) {
|
|
|
13017
13020
|
return { centroid, spread };
|
|
13018
13021
|
}
|
|
13019
13022
|
function useGestureDispatcher(opts) {
|
|
13020
|
-
const { canvasRef, actions, toolsById, enabled = true, keyboard = true, affordanceAt, classifyTarget, dispatcher: dispatcherOpt, clientToWorld: clientToWorld2, requestRedraw, getRuleCtx, onDoubleClick, views } = opts;
|
|
13023
|
+
const { canvasRef, actions, toolsById, enabled = true, keyboard = true, affordanceAt, classifyTarget, dispatcher: dispatcherOpt, clientToWorld: clientToWorld2, requestRedraw, paintedCursor, getRuleCtx, onDoubleClick, views } = opts;
|
|
13021
13024
|
const onDoubleClickRef = useRef(onDoubleClick);
|
|
13022
13025
|
onDoubleClickRef.current = onDoubleClick;
|
|
13023
13026
|
const activeTool = useActiveToolContext();
|
|
@@ -13066,6 +13069,8 @@ function useGestureDispatcher(opts) {
|
|
|
13066
13069
|
];
|
|
13067
13070
|
const requestRedrawRef = useRef(requestRedraw);
|
|
13068
13071
|
requestRedrawRef.current = requestRedraw;
|
|
13072
|
+
const paintedCursorRef = useRef(paintedCursor);
|
|
13073
|
+
paintedCursorRef.current = paintedCursor;
|
|
13069
13074
|
const lastClickRef = useRef(null);
|
|
13070
13075
|
const prevActiveRef = useRef(activeTool.active);
|
|
13071
13076
|
useEffect(() => {
|
|
@@ -13405,20 +13410,39 @@ function useGestureDispatcher(opts) {
|
|
|
13405
13410
|
let lastHover = null;
|
|
13406
13411
|
let cursorOverridden = false;
|
|
13407
13412
|
const clearHoverCursor = () => {
|
|
13413
|
+
paintedCursorRef.current?.()?.setOverride(null);
|
|
13408
13414
|
if (cursorOverridden && canvas) {
|
|
13409
13415
|
canvas.style.cursor = "";
|
|
13410
13416
|
cursorOverridden = false;
|
|
13411
13417
|
}
|
|
13412
13418
|
};
|
|
13413
|
-
const applyHoverCursor = (
|
|
13414
|
-
|
|
13415
|
-
|
|
13416
|
-
cursorOverridden = true;
|
|
13417
|
-
} else {
|
|
13419
|
+
const applyHoverCursor = (spec) => {
|
|
13420
|
+
const tier = spec === null ? null : resolveCursorTier(spec);
|
|
13421
|
+
if (!tier || !canvas) {
|
|
13418
13422
|
clearHoverCursor();
|
|
13423
|
+
return;
|
|
13419
13424
|
}
|
|
13425
|
+
const painted = tier.kind === "painted" ? tier : null;
|
|
13426
|
+
paintedCursorRef.current?.()?.setOverride(painted);
|
|
13427
|
+
const cursor = tier.kind === "css" ? tier.css : "none";
|
|
13428
|
+
if (!cursor) {
|
|
13429
|
+
clearHoverCursor();
|
|
13430
|
+
return;
|
|
13431
|
+
}
|
|
13432
|
+
canvas.style.cursor = cursor;
|
|
13433
|
+
cursorOverridden = true;
|
|
13420
13434
|
};
|
|
13435
|
+
function pushPaintedPointer() {
|
|
13436
|
+
const painted = paintedCursorRef.current?.();
|
|
13437
|
+
if (!painted?.active() || !canvas || !lastHover) return;
|
|
13438
|
+
const r = canvas.getBoundingClientRect();
|
|
13439
|
+
painted.setPointer(lastHover.clientX - r.left, lastHover.clientY - r.top);
|
|
13440
|
+
}
|
|
13421
13441
|
function refreshHoverCursor() {
|
|
13442
|
+
resolveHoverCursor();
|
|
13443
|
+
pushPaintedPointer();
|
|
13444
|
+
}
|
|
13445
|
+
function resolveHoverCursor() {
|
|
13422
13446
|
if (!canvas || !lastHover) return;
|
|
13423
13447
|
if (activePointers.size > 0 || dispatcherNow().inFlight().size > 0) {
|
|
13424
13448
|
applyHoverCursor(dispatcherNow().inFlightCursor());
|
|
@@ -13470,6 +13494,7 @@ function useGestureDispatcher(opts) {
|
|
|
13470
13494
|
};
|
|
13471
13495
|
const onHoverPointerLeave = () => {
|
|
13472
13496
|
lastHover = null;
|
|
13497
|
+
paintedCursorRef.current?.()?.clearPointer();
|
|
13473
13498
|
clearHoverCursor();
|
|
13474
13499
|
};
|
|
13475
13500
|
const onPointerUp = (e) => {
|
|
@@ -15199,7 +15224,7 @@ function validateId(id, kind) {
|
|
|
15199
15224
|
}
|
|
15200
15225
|
function defineTool(def) {
|
|
15201
15226
|
validateId(def.id, "tool");
|
|
15202
|
-
const
|
|
15227
|
+
const resolveCursor3 = (ctx) => {
|
|
15203
15228
|
if (def.cursor == null) return "";
|
|
15204
15229
|
return typeof def.cursor === "function" ? def.cursor(ctx) : def.cursor;
|
|
15205
15230
|
};
|
|
@@ -15217,7 +15242,7 @@ function defineTool(def) {
|
|
|
15217
15242
|
onActivate: def.onActivate,
|
|
15218
15243
|
onDeactivate: def.onDeactivate,
|
|
15219
15244
|
initScratch: def.initScratch ?? (() => null),
|
|
15220
|
-
cursor:
|
|
15245
|
+
cursor: resolveCursor3,
|
|
15221
15246
|
bindings: def.bindings,
|
|
15222
15247
|
overlay: def.overlay,
|
|
15223
15248
|
overlayPosition: def.overlayPosition
|
|
@@ -17287,6 +17312,9 @@ function transformOf(state, targetId) {
|
|
|
17287
17312
|
identity: false
|
|
17288
17313
|
};
|
|
17289
17314
|
}
|
|
17315
|
+
function angleOf(xf) {
|
|
17316
|
+
return xf.identity ? 0 : Math.atan2(xf.sin, xf.cos);
|
|
17317
|
+
}
|
|
17290
17318
|
function localToWorld(xf, lx, ly) {
|
|
17291
17319
|
if (xf.identity) return { x: lx, y: ly };
|
|
17292
17320
|
const dx = lx - xf.cx;
|
|
@@ -17590,11 +17618,7 @@ var DEFAULT_PAINT = {
|
|
|
17590
17618
|
insetPx: 10
|
|
17591
17619
|
};
|
|
17592
17620
|
function createRotationAffordance(opts = {}) {
|
|
17593
|
-
const {
|
|
17594
|
-
bandPx = 24,
|
|
17595
|
-
paint = DEFAULT_PAINT,
|
|
17596
|
-
cursor = "grab"
|
|
17597
|
-
} = opts;
|
|
17621
|
+
const { bandPx = 24, paint = DEFAULT_PAINT, cursor } = opts;
|
|
17598
17622
|
const annulusPaint = (() => {
|
|
17599
17623
|
if (!paint) return null;
|
|
17600
17624
|
if ("paint" in paint) {
|
|
@@ -17632,7 +17656,14 @@ function createRotationAffordance(opts = {}) {
|
|
|
17632
17656
|
},
|
|
17633
17657
|
...annulusPaint ? { paint: annulusPaint } : {},
|
|
17634
17658
|
hitKind: "rotate-handle",
|
|
17635
|
-
|
|
17659
|
+
// Turned with the target, so the arc follows the selection it rotates.
|
|
17660
|
+
// Resolved per region rather than defaulted in the option list because
|
|
17661
|
+
// the angle is only known once a target is picked.
|
|
17662
|
+
cursor: cursor ?? {
|
|
17663
|
+
glyph: "rotate",
|
|
17664
|
+
angle: angleOf(transformOf(state, target.id)),
|
|
17665
|
+
fallback: "grab"
|
|
17666
|
+
},
|
|
17636
17667
|
bind: () => ({
|
|
17637
17668
|
initialScratch: {
|
|
17638
17669
|
targetId: target.id,
|
|
@@ -17808,8 +17839,6 @@ function constrainTo45(dx, dy) {
|
|
|
17808
17839
|
const snapped = Math.round(angle / step) * step;
|
|
17809
17840
|
return { dx: Math.cos(snapped) * mag, dy: Math.sin(snapped) * mag };
|
|
17810
17841
|
}
|
|
17811
|
-
|
|
17812
|
-
// src/tools/builtin/pen/usePenTool.ts
|
|
17813
17842
|
function freshScratch() {
|
|
17814
17843
|
return {
|
|
17815
17844
|
finishedSubpaths: [],
|
|
@@ -18048,7 +18077,7 @@ function usePenTool(options) {
|
|
|
18048
18077
|
hookName: "usePenTool",
|
|
18049
18078
|
// Reads the tool's own ref rather than a scratch handed in by a
|
|
18050
18079
|
// dispatcher — the pen owns this state and nothing else needs it.
|
|
18051
|
-
cursor: () => scratchRef.current?.closeHintActive ? "pointer" : "crosshair",
|
|
18080
|
+
cursor: () => scratchRef.current?.closeHintActive ? "pointer" : cursorFor("pen", { fallback: "crosshair" }),
|
|
18052
18081
|
presentation: {
|
|
18053
18082
|
label: "Pen",
|
|
18054
18083
|
icon: createElement(PenIcon),
|
|
@@ -18117,7 +18146,7 @@ function useRectTool() {
|
|
|
18117
18146
|
id: "rect",
|
|
18118
18147
|
capabilities: ["creates-shapes"],
|
|
18119
18148
|
hookName: "useRectTool",
|
|
18120
|
-
cursor: "crosshair",
|
|
18149
|
+
cursor: cursorFor("crosshairRect", { fallback: "crosshair" }),
|
|
18121
18150
|
presentation: {
|
|
18122
18151
|
label: "Rectangle",
|
|
18123
18152
|
icon: createElement(RectIcon),
|
|
@@ -18143,7 +18172,7 @@ function useEllipseTool() {
|
|
|
18143
18172
|
id: "ellipse",
|
|
18144
18173
|
capabilities: ["creates-shapes"],
|
|
18145
18174
|
hookName: "useEllipseTool",
|
|
18146
|
-
cursor: "crosshair",
|
|
18175
|
+
cursor: cursorFor("crosshairEllipse", { fallback: "crosshair" }),
|
|
18147
18176
|
presentation: {
|
|
18148
18177
|
label: "Ellipse",
|
|
18149
18178
|
group: "shape",
|
|
@@ -18224,7 +18253,7 @@ function useEyedropperTool(opts) {
|
|
|
18224
18253
|
hookName: "useEyedropperTool",
|
|
18225
18254
|
keybinding,
|
|
18226
18255
|
hotkey,
|
|
18227
|
-
cursor: "crosshair",
|
|
18256
|
+
cursor: cursorFor("eyedropper", { fallback: "crosshair" }),
|
|
18228
18257
|
presentation: {
|
|
18229
18258
|
label: "Eyedropper",
|
|
18230
18259
|
icon: createElement(EyedropperIcon),
|
|
@@ -18251,7 +18280,7 @@ function useLineTool() {
|
|
|
18251
18280
|
id: "line",
|
|
18252
18281
|
capabilities: ["creates-shapes"],
|
|
18253
18282
|
hookName: "useLineTool",
|
|
18254
|
-
cursor: "crosshair",
|
|
18283
|
+
cursor: cursorFor("crosshairLine", { fallback: "crosshair" }),
|
|
18255
18284
|
presentation: {
|
|
18256
18285
|
label: "Line",
|
|
18257
18286
|
group: "shape",
|
|
@@ -18366,7 +18395,7 @@ function usePolygonTool(options = {}) {
|
|
|
18366
18395
|
id: "polygon",
|
|
18367
18396
|
capabilities: ["creates-shapes"],
|
|
18368
18397
|
hookName: "usePolygonTool",
|
|
18369
|
-
cursor: "crosshair",
|
|
18398
|
+
cursor: cursorFor("crosshairPolygon", { fallback: "crosshair" }),
|
|
18370
18399
|
// Registered by <ToolActionsMounter>, inside the ActionsProvider —
|
|
18371
18400
|
// see `ToolDef.actions` for why the hook can't register it itself.
|
|
18372
18401
|
actions: [adjustSidesAction],
|
|
@@ -18466,7 +18495,7 @@ function useStarTool(options = {}) {
|
|
|
18466
18495
|
id: "star",
|
|
18467
18496
|
capabilities: ["creates-shapes"],
|
|
18468
18497
|
hookName: "useStarTool",
|
|
18469
|
-
cursor: "crosshair",
|
|
18498
|
+
cursor: cursorFor("crosshairStar", { fallback: "crosshair" }),
|
|
18470
18499
|
// Registered by <ToolActionsMounter>, inside the ActionsProvider —
|
|
18471
18500
|
// see `ToolDef.actions` for why the hook can't register it itself.
|
|
18472
18501
|
actions: [adjustPointsAction],
|
|
@@ -18522,7 +18551,7 @@ function usePencilTool() {
|
|
|
18522
18551
|
id: "pencil",
|
|
18523
18552
|
capabilities: ["creates-paths"],
|
|
18524
18553
|
hookName: "usePencilTool",
|
|
18525
|
-
cursor: "crosshair",
|
|
18554
|
+
cursor: cursorFor("pencil", { fallback: "crosshair" }),
|
|
18526
18555
|
presentation: {
|
|
18527
18556
|
label: "Pencil",
|
|
18528
18557
|
group: "draw",
|
|
@@ -19593,6 +19622,113 @@ function buildSceneTree(adapter, drawOne, view, forLayer, derivedPathOf) {
|
|
|
19593
19622
|
}
|
|
19594
19623
|
return out;
|
|
19595
19624
|
}
|
|
19625
|
+
|
|
19626
|
+
// src/features/cursor/paintedCursorState.ts
|
|
19627
|
+
function same(a, b) {
|
|
19628
|
+
if (a === b) return true;
|
|
19629
|
+
if (!a || !b) return false;
|
|
19630
|
+
return a.glyph === b.glyph && a.angle === b.angle && a.size === b.size && a.worldRadius === b.worldRadius;
|
|
19631
|
+
}
|
|
19632
|
+
function createPaintedCursorState() {
|
|
19633
|
+
let base = null;
|
|
19634
|
+
let override = null;
|
|
19635
|
+
let at = null;
|
|
19636
|
+
const subs = /* @__PURE__ */ new Set();
|
|
19637
|
+
const notify2 = () => {
|
|
19638
|
+
for (const fn of subs) fn();
|
|
19639
|
+
};
|
|
19640
|
+
return {
|
|
19641
|
+
setBase(cursor) {
|
|
19642
|
+
if (same(base, cursor)) return;
|
|
19643
|
+
base = cursor;
|
|
19644
|
+
notify2();
|
|
19645
|
+
},
|
|
19646
|
+
setOverride(cursor) {
|
|
19647
|
+
if (same(override, cursor)) return;
|
|
19648
|
+
override = cursor;
|
|
19649
|
+
notify2();
|
|
19650
|
+
},
|
|
19651
|
+
setPointer(x, y) {
|
|
19652
|
+
if (at && at.x === x && at.y === y) return;
|
|
19653
|
+
at = { x, y };
|
|
19654
|
+
if (override ?? base) notify2();
|
|
19655
|
+
},
|
|
19656
|
+
clearPointer() {
|
|
19657
|
+
if (at === null) return;
|
|
19658
|
+
at = null;
|
|
19659
|
+
notify2();
|
|
19660
|
+
},
|
|
19661
|
+
active() {
|
|
19662
|
+
return (override ?? base) !== null;
|
|
19663
|
+
},
|
|
19664
|
+
current() {
|
|
19665
|
+
const cursor = override ?? base;
|
|
19666
|
+
if (!cursor || !at) return null;
|
|
19667
|
+
return { cursor, at };
|
|
19668
|
+
},
|
|
19669
|
+
subscribe(fn) {
|
|
19670
|
+
subs.add(fn);
|
|
19671
|
+
return () => {
|
|
19672
|
+
subs.delete(fn);
|
|
19673
|
+
};
|
|
19674
|
+
}
|
|
19675
|
+
};
|
|
19676
|
+
}
|
|
19677
|
+
var PAINTED_CURSOR_LAYER_ID = "painted-cursor";
|
|
19678
|
+
var pathCache = /* @__PURE__ */ new Map();
|
|
19679
|
+
function pathFor(d) {
|
|
19680
|
+
let p = pathCache.get(d);
|
|
19681
|
+
if (p === void 0) {
|
|
19682
|
+
p = pathFromD(d);
|
|
19683
|
+
pathCache.set(d, p);
|
|
19684
|
+
}
|
|
19685
|
+
return p;
|
|
19686
|
+
}
|
|
19687
|
+
function commandFor2(op) {
|
|
19688
|
+
return {
|
|
19689
|
+
kind: "path",
|
|
19690
|
+
path: pathFor(op.d),
|
|
19691
|
+
...op.fill !== void 0 ? { fill: { color: op.fill } } : {},
|
|
19692
|
+
...op.stroke !== void 0 ? {
|
|
19693
|
+
stroke: {
|
|
19694
|
+
paint: { color: op.stroke.color },
|
|
19695
|
+
width: op.stroke.width,
|
|
19696
|
+
cap: "round",
|
|
19697
|
+
join: "round"
|
|
19698
|
+
}
|
|
19699
|
+
} : {}
|
|
19700
|
+
};
|
|
19701
|
+
}
|
|
19702
|
+
function createPaintedCursorLayer(state) {
|
|
19703
|
+
return {
|
|
19704
|
+
id: PAINTED_CURSOR_LAYER_ID,
|
|
19705
|
+
label: "Painted cursor",
|
|
19706
|
+
space: "screen",
|
|
19707
|
+
draw: (_data, view) => {
|
|
19708
|
+
const frame = state.current();
|
|
19709
|
+
if (!frame) return [];
|
|
19710
|
+
const { cursor, at } = frame;
|
|
19711
|
+
const glyph = GLYPHS[cursor.glyph];
|
|
19712
|
+
if (!glyph) return [];
|
|
19713
|
+
const scale2 = (view.scale.x + view.scale.y) / 2;
|
|
19714
|
+
const worldSized = cursor.worldRadius !== void 0;
|
|
19715
|
+
const size = worldSized ? cursorWorldSize(glyph, cursor.worldRadius, scale2) : cursor.size ?? 24;
|
|
19716
|
+
if (!(size > 0) || !Number.isFinite(size)) return [];
|
|
19717
|
+
const ops = cursorPaintOps(
|
|
19718
|
+
glyph,
|
|
19719
|
+
worldSized ? { lineWidthScale: chromeLineWidthScale(glyph, size) } : {}
|
|
19720
|
+
);
|
|
19721
|
+
const [a, b, c, d, e, f] = cursorPaintMatrix(glyph, {
|
|
19722
|
+
size,
|
|
19723
|
+
angle: cursor.angle,
|
|
19724
|
+
at
|
|
19725
|
+
});
|
|
19726
|
+
const transform = new Float32Array([a, b, 0, c, d, 0, e, f, 1]);
|
|
19727
|
+
const children = ops.map(commandFor2);
|
|
19728
|
+
return [{ kind: "group", transform, children }];
|
|
19729
|
+
}
|
|
19730
|
+
};
|
|
19731
|
+
}
|
|
19596
19732
|
function mat3ToRenderMatrix(m) {
|
|
19597
19733
|
return new Float32Array([m[0], m[1], 0, m[2], m[3], 0, m[4], m[5], 1]);
|
|
19598
19734
|
}
|
|
@@ -19973,11 +20109,11 @@ function resolveToolsCursor(tools, ctxBase) {
|
|
|
19973
20109
|
const id = tools.hotkeyEngaged ?? tools.active;
|
|
19974
20110
|
const tool = tools.registry[id];
|
|
19975
20111
|
if (!tool?.cursor) return void 0;
|
|
19976
|
-
if (typeof tool.cursor
|
|
20112
|
+
if (typeof tool.cursor !== "function") return resolveCursorTier(tool.cursor);
|
|
19977
20113
|
if (!ctxBase) return void 0;
|
|
19978
20114
|
try {
|
|
19979
20115
|
const base = ctxBase();
|
|
19980
|
-
return tool.cursor({ ...base, scratch: null });
|
|
20116
|
+
return resolveCursorTier(tool.cursor({ ...base, scratch: null }));
|
|
19981
20117
|
} catch {
|
|
19982
20118
|
return void 0;
|
|
19983
20119
|
}
|
|
@@ -20142,6 +20278,14 @@ function CanvasInner(props, ref) {
|
|
|
20142
20278
|
viewSubsRef.current.delete(fn);
|
|
20143
20279
|
};
|
|
20144
20280
|
}, []);
|
|
20281
|
+
const paintedCursor = useMemo(() => createPaintedCursorState(), []);
|
|
20282
|
+
const paintedCursorLayer = useMemo(
|
|
20283
|
+
() => createPaintedCursorLayer(paintedCursor),
|
|
20284
|
+
[paintedCursor]
|
|
20285
|
+
);
|
|
20286
|
+
useEffect(() => paintedCursor.subscribe(() => {
|
|
20287
|
+
requestRedraw();
|
|
20288
|
+
}), [paintedCursor, requestRedraw]);
|
|
20145
20289
|
useImperativeHandle(ref, () => ({
|
|
20146
20290
|
// Named rather than read off `canvasRef` so the handle rebuilds when a
|
|
20147
20291
|
// detached surface's input element arrives, which is a render later.
|
|
@@ -20154,7 +20298,8 @@ function CanvasInner(props, ref) {
|
|
|
20154
20298
|
getView,
|
|
20155
20299
|
setView,
|
|
20156
20300
|
subscribeView,
|
|
20157
|
-
getPaintedVersion
|
|
20301
|
+
getPaintedVersion,
|
|
20302
|
+
paintedCursor
|
|
20158
20303
|
}), [
|
|
20159
20304
|
canvasRef,
|
|
20160
20305
|
ownCanvasRef,
|
|
@@ -20168,7 +20313,8 @@ function CanvasInner(props, ref) {
|
|
|
20168
20313
|
getView,
|
|
20169
20314
|
setView,
|
|
20170
20315
|
subscribeView,
|
|
20171
|
-
getPaintedVersion
|
|
20316
|
+
getPaintedVersion,
|
|
20317
|
+
paintedCursor
|
|
20172
20318
|
]);
|
|
20173
20319
|
const glRendererRef = useRef(null);
|
|
20174
20320
|
const layerCacheRef = useRef(/* @__PURE__ */ new Map());
|
|
@@ -20432,8 +20578,16 @@ function CanvasInner(props, ref) {
|
|
|
20432
20578
|
const layersWithDebug = useMemo(() => {
|
|
20433
20579
|
const withViews = viewRegistry ? [...layers, ...viewRegistry.list().map((r) => r.layer)] : layers;
|
|
20434
20580
|
const base = debugSink && resolvedDebugConfig ? [...withViews, createDebugOverlayLayer({ sink: debugSink, config: resolvedDebugConfig })] : withViews;
|
|
20435
|
-
return [...base, ...extrasRef.current];
|
|
20436
|
-
}, [
|
|
20581
|
+
return [...base, ...extrasRef.current, paintedCursorLayer];
|
|
20582
|
+
}, [
|
|
20583
|
+
layers,
|
|
20584
|
+
debugSink,
|
|
20585
|
+
resolvedDebugConfig,
|
|
20586
|
+
extrasVersion,
|
|
20587
|
+
viewRegistry,
|
|
20588
|
+
viewRegistryVersion,
|
|
20589
|
+
paintedCursorLayer
|
|
20590
|
+
]);
|
|
20437
20591
|
const shaderIdKey = shaders?.map((h) => h.id).join("|") ?? "";
|
|
20438
20592
|
const paintInputsRef = useRef({
|
|
20439
20593
|
layers: layersWithDebug,
|
|
@@ -20555,8 +20709,14 @@ function CanvasInner(props, ref) {
|
|
|
20555
20709
|
if (!renderer) return;
|
|
20556
20710
|
registerShadersOnRenderer(renderer, shaders);
|
|
20557
20711
|
}, [shaderIdKey]);
|
|
20558
|
-
const
|
|
20712
|
+
const toolsCursorTier = tools ? resolveToolsCursor(tools, toolsCtxBase) : void 0;
|
|
20713
|
+
const toolsCursor = toolsCursorTier === void 0 ? void 0 : toolsCursorTier.kind === "css" ? toolsCursorTier.css : "none";
|
|
20559
20714
|
const effectiveStyle = toolsCursor ? { ...style, cursor: toolsCursor } : style;
|
|
20715
|
+
const toolsPainted = toolsCursorTier?.kind === "painted" ? toolsCursorTier : null;
|
|
20716
|
+
const toolsPaintedKey = toolsPainted ? `${toolsPainted.glyph}|${toolsPainted.angle}|${toolsPainted.size}|${toolsPainted.worldRadius}` : "";
|
|
20717
|
+
useEffect(() => {
|
|
20718
|
+
paintedCursor.setBase(toolsPainted);
|
|
20719
|
+
}, [paintedCursor, toolsPaintedKey]);
|
|
20560
20720
|
const layersForMoveRef = useRef(layersWithDebug);
|
|
20561
20721
|
layersForMoveRef.current = layersWithDebug;
|
|
20562
20722
|
useEffect(() => {
|
|
@@ -21895,10 +22055,16 @@ function createCornerResizeAffordance(opts = {}) {
|
|
|
21895
22055
|
hitKind: c.kind,
|
|
21896
22056
|
// Diagonal by fixed-corner parity: a matched-axis anchor (min-min /
|
|
21897
22057
|
// max-max fixed) means the dragged corner sits on the ↘ diagonal;
|
|
21898
|
-
// mixed axes sit on the ↗ diagonal.
|
|
21899
|
-
//
|
|
21900
|
-
//
|
|
21901
|
-
|
|
22058
|
+
// mixed axes sit on the ↗ diagonal. The glyph is horizontal at angle
|
|
22059
|
+
// 0, so the diagonal is a half-quarter-turn either way, plus the
|
|
22060
|
+
// target's own rotation. The keyword is the fallback rather than the
|
|
22061
|
+
// answer: CSS has four of them, which cannot express a target
|
|
22062
|
+
// rotated to anything but a multiple of 45°.
|
|
22063
|
+
cursor: {
|
|
22064
|
+
glyph: "resize",
|
|
22065
|
+
angle: (c.anchor.x === c.anchor.y ? Math.PI / 4 : -Math.PI / 4) + angleOf(xf),
|
|
22066
|
+
fallback: c.anchor.x === c.anchor.y ? "nwse-resize" : "nesw-resize"
|
|
22067
|
+
},
|
|
21902
22068
|
bind: () => ({
|
|
21903
22069
|
initialScratch: {
|
|
21904
22070
|
anchor: c.anchor,
|
|
@@ -25921,6 +26087,10 @@ function GestureDispatcherMounter({
|
|
|
25921
26087
|
const requestRedraw = useCallback(() => {
|
|
25922
26088
|
canvasApiRef?.current?.requestRedraw?.();
|
|
25923
26089
|
}, [canvasApiRef]);
|
|
26090
|
+
const paintedCursor = useCallback(
|
|
26091
|
+
() => canvasApiRef?.current?.paintedCursor,
|
|
26092
|
+
[canvasApiRef]
|
|
26093
|
+
);
|
|
25924
26094
|
const views = useMemo(() => {
|
|
25925
26095
|
if (!viewRegistry) return void 0;
|
|
25926
26096
|
return {
|
|
@@ -25939,6 +26109,7 @@ function GestureDispatcherMounter({
|
|
|
25939
26109
|
dispatcher,
|
|
25940
26110
|
clientToWorld: clientToWorld2,
|
|
25941
26111
|
requestRedraw,
|
|
26112
|
+
paintedCursor,
|
|
25942
26113
|
getRuleCtx,
|
|
25943
26114
|
onDoubleClick,
|
|
25944
26115
|
...views ? { views } : {}
|
|
@@ -30685,6 +30856,6 @@ function mergeContributions(...bundles) {
|
|
|
30685
30856
|
return out;
|
|
30686
30857
|
}
|
|
30687
30858
|
|
|
30688
|
-
export { ALWAYS, ANCHOR_HIT_BASE_PX, ActionsProviderIfRoot, ActiveToolContextProvider, ActiveToolContextProviderIfRoot, ArrowIcon, BUILTIN_MARKERS, BUNDLE_TOOLS, COARSE_TARGET_SCALE, CURVE_REPS, CanvasView, ColorOverrideRegistry, CropIcon, CursorCoordsHud, DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_DEBUG_STROKES, DEFAULT_DEBUG_THEME, DEFAULT_DEVICE_PROFILE, DEFAULT_FILL_COLOR, DEFAULT_HANDLE_SIZE2 as DEFAULT_HANDLE_SIZE, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, DEFAULT_PALETTE, DEFAULT_ROTATION_HANDLE_DISTANCE, DEFAULT_SHAPE_FILL, DEFAULT_STROKE_COLOR, DEFAULT_VELOCITY_DECAY, DepRegistryProviderIfRoot, DeviceProfileProvider, DivideIcon, EASINGS, EllipseIcon, ExcludeIcon, EyedropperIcon, FALLBACK_FIT_VIEW, GHOST_STROKE, HANDLE_BASE_PX, HandIcon, IDENTITY_COLOR_MATRIX, IDENTITY_JOINT, IDENTITY_POSE_COMPOSITION, ImageIcon, IntersectIcon, KIT_SHAPE_KINDS, LassoIcon, LineIcon, MIXED, MOVE_ANCHORS, MinimapCanvas, NEVER, OUTLINE_MIN_SCREEN_PX, PATH_ANCHOR_CHROME_ID, PenIcon, PencilIcon, PickHud, PointerProviderIfRoot, PolygonIcon, RECT_ALIGN_PROJECTION, ROTATION_HANDLE_BASE_PX, RectIcon, SPRING_PRESETS, SceneCanvas, SceneViewCanvas, SelectIcon, SelectionContextProvider, SelectionContextProviderIfRoot, ShaderCompileError, StarIcon, SubtractIcon, TOOL_PREF_KINDS, TextIcon, UnionIcon, UnknownIcon, VERSION, VIEW_ANIMATION_KEY, WeaselProvider, WeaselRenderer, _resetMarkersForTests, _resetPaintKindsForTests, aabbCenter, actionIs, actionShortcuts, alignDeltaFor, alignInsertBehavior, alignMoveBehavior, alignResizeBehavior, always, and, animateLifecycle, animateOnSetPose, annulusSemiAxes, applyBooleanOp, applyStyleToRange, areaSelectAction, arrayAdapter, asNodeId, asPaint, axisAlignedBounds, bezierCubic, bezierQuadratic, blendPoses, buildChromeCtx, buildGradientRamp, buildRuleCtx, buildSceneViewCommands, canBringForward, canHover, canSendBackward, capabilityAll, capabilityIn, capabilityIs, capabilityNot, caretIndexAt, cellAt, charOffsetToDomPosition, clampView, clearSelectionAction, clientToCanvas, clipboardCopyAction, clipboardCutAction, cloneAction, coarsePointer, composeAffordanceLayer, composePath, composeRectPose, composeSelectionPose, composeWorldPose, computeFitView, computeFitViewport, computeIndicatorCommand, computeWheelAction, cond, constrainTo45, containedThenNearest, countPathAnchors, createCellHighlightLayer, createChildrenLayer, createCornerResizeAffordance, createDebugOverlayLayer, createDebugSink, createDispatcher, createGridLayer, createGuidesLayer, createHistory2 as createHistory, createMoveToIndexOp, createNodeProperties, createNodeRouting, createParallaxLayer, createPathAnchorAffordances, createPathEditingOverlayLayer, createPathLayer, createPenPreviewLayer, createReorderOp, createRotationAffordance, createScene, createSelectionHandlesLayer, createSelectionOutlineLayer, createSelectionOverlayLayer, createSetDataOp, createSetLayerOp, createSetPathOp, createSetTextOp, createTextLayer, createViewResolver, createViewportLayer, cubicBezierEasing, cycleVertexColors, decomposePath, decomposeRectPose, defaultCommitAdapter, defaultDrawOne, defaultLabelTextRenderer, defaultNodeProperties, defaultNodeRouting, defaultVisibilityRules, defineTool, defineViewportTool, deriveAlignmentGuides, deriveParallaxView, describeRule, domPositionToCharOffset, domToRuns, drawLayers, drawOneLayer, easeIn, easeInBack, easeInBounce, easeInCirc, easeInCubic, easeInElastic, easeInExpo, easeInOut, easeInOutBack, easeInOutBounce, easeInOutCirc, easeInOutCubic, easeInOutElastic, easeInOutExpo, easeInOutQuad, easeInOutQuart, easeInOutQuint, easeInOutSine, easeInQuad, easeInQuart, easeInQuint, easeInSine, easeOut, easeOutBack, easeOutBounce, easeOutCirc, easeOutCubic, easeOutElastic, easeOutExpo, easeOutQuad, easeOutQuart, easeOutQuint, easeOutSine, editAnchorsAction, enterTextEditAction, enumerateAnchors, evaluate, fillInPoseFrame, fillToBoundsFrame, findNodeShape, findShapeInk, findShapeSilhouette, fitTextPose, fitToBounds, fitViewToBounds, fitZoom, focused, forEachCoalesced, frameRect, freeform, gateLayer, gesturing, getAlpha01, getImageBitmap, getMarker, getNodeShapes, getPaintKind, getStylusData, gradientForBounds, gradientGeometry, hexToRgba, hitAffordanceRegions, hitAnchor, hitRotationHandle, hostAnchorCss, hostAnchorRect, hovering, hoveringSelected, imageStatus, inferredNodeProperties, inferredNodeRouting, insertAction, interpolateView, isBuiltinToolPref, isEditableTarget2 as isEditableTarget, isGradientFill, isLayerPainted, isLayerVisible, isPatternSpec, keySpecShortcut, lassoSelectAction, lerpColorArray, lerpOklab, lerpOklch, linear, listMarkers, listPaintKinds, liveScope, makePinchZoomAction, makeViewportZoomAction, markerDrawCommands, markerInset, markerKeyOf, markerSites, mat3, matchAlignment, matchesKeyBinding, meanScale, mergeAlphaFromPrev, mergeContributions, modeIn, modeIs, modeNot, modifierHeld, momentum, moveAction, multiActive, nearest, nearestWithin, nestedHitTester, never, nodeHasFlag, none, normalizeHex, not, nurbs, oklabToOklch, oklabToSrgbU8, oklchToOklab, openFilePicker, or, paintAlpha, paintKindOf, paintWithAlpha, paintWithColor, parseColor, parseColorToRgba255, parseDebugFlags, pathContainsPoint, pathContainsPolygon, pathContainsRect, pathDistanceToPoint, pathDivide, pathExclude, pathFromD, pathInPoseFrame, pathInWorld, pathIntersect, pathIntersectsPolygon, pathIntersectsRect, pathOriginProjection, pathSubtract, pathToAnchors, pathUnion, pickTopMostHit, pinchZoomAction, planPixelRender, pointInRotatedRect, pointInTextPose, poseRotationOf, pressureToWidth, rainbowVertexColors, rebaseLocalPose, rectCorners, registerContentHandler, registerMarker, registerNodeShape, registerPaintKind, registerProgram, renderLabel, renderSceneToCanvas, renderSceneToPixels, resizeAction, resolveColor, resolveDeviceProfile, resolveEasing, resolveFillPattern, resolveMarkerSize, resolveParams, resolvePatternSpec, resolveSkeleton, resolveStrokeWidth, resolveVisibility, rgbaToHex, rotateAction, rotateAroundAABBCenter, rotatePathAround, rotatePoint, rotatedRectCorners, rotationDegreesUnit, rotationHandle, roundToCell, runsToDom, sampleGradientStops, sampleTrack, sceneFromJSON, sceneNodeClientRect, sceneSelectionStore, sceneToAdapter, scopeBindings, screenToWorld, selectFromLasso, selectionAtLeast, selectionEmpty, selectionIs, setFlagOverRange, shapeCoversPoint, sliceAction, snapPoint, solid, solidVertexColors, specificity, spiro, splitPathByLine, splitSubpaths, springPose, springVertexColors, srgbU8ToOklab, staggerVertexColors, startThresholdDrag, strokeInsets, strokeOf, strokeWith, styleAtRange, subscribeImageReady, tessellate, tessellateStroke, textCommand, textCommandFromRuns, tileGrid, toHex8, translatePoseViaDescriptor, translateRectPose, trimPolyline, tweenPose, tweenVertexColors, unionAABB, unionBounds, unionBoundsPath, useActiveToolContext, useAlign, useAnimator, useArrayAdapter, useAutoCenter, useBooleans, useBooleansAdapter, useCanvasFocus, useCanvasSize, useDecayLoop, useDeviceProfile, useDistribute, useDragGesture, useDragHandle, useDragRadial, useDragRect, useDropZone, useEllipseTool, useEyedropperTool, useGestureDispatcher, useGridCellHover, useGuides, useHandTool, useHandleDrag, useHostAnchor, useHoverTracking, useImageTool, useKeybindings, useLassoTool, useLineTool, useNodeOverlayFrame, useOptionalActiveToolContext, usePenTool, usePencilTool, usePinchGesture, usePinchZoomTool, usePointerStylus, usePolygonTool, usePublishSelection, useRectTool, useResizePolicy, useRotateTool, useScene, useSceneAdapter, useSceneTextEdit, useSelectTool, useSelection, useSelectionContext, useSimulation, useSliceDep, useStandardActions, useStarTool, useTextEdit, useTextTool, useTools, useVelocityTracker, useViewAnimation, useVisibleRaf, useZoom, viewToMat3, viewToTransform, viewportDragPanAction, viewportZoomAction, viewportsAt, visualBoundsViaDescriptor, when, withAlpha01, withCoord, withGradientKind, worldEditToStorage, worldPoseLookup, worldToScreen, zoomAt, zoomAtLeast };
|
|
30689
|
-
//# sourceMappingURL=chunk-
|
|
30690
|
-
//# sourceMappingURL=chunk-
|
|
30859
|
+
export { ALWAYS, ANCHOR_HIT_BASE_PX, ActionsProviderIfRoot, ActiveToolContextProvider, ActiveToolContextProviderIfRoot, ArrowIcon, BUILTIN_MARKERS, BUNDLE_TOOLS, COARSE_TARGET_SCALE, CURVE_REPS, CanvasView, ColorOverrideRegistry, CropIcon, CursorCoordsHud, DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_DEBUG_STROKES, DEFAULT_DEBUG_THEME, DEFAULT_DEVICE_PROFILE, DEFAULT_FILL_COLOR, DEFAULT_HANDLE_SIZE2 as DEFAULT_HANDLE_SIZE, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, DEFAULT_PALETTE, DEFAULT_ROTATION_HANDLE_DISTANCE, DEFAULT_SHAPE_FILL, DEFAULT_STROKE_COLOR, DEFAULT_VELOCITY_DECAY, DepRegistryProviderIfRoot, DeviceProfileProvider, DivideIcon, EASINGS, EllipseIcon, ExcludeIcon, EyedropperIcon, FALLBACK_FIT_VIEW, GHOST_STROKE, HANDLE_BASE_PX, HandIcon, IDENTITY_COLOR_MATRIX, IDENTITY_JOINT, IDENTITY_POSE_COMPOSITION, ImageIcon, IntersectIcon, KIT_SHAPE_KINDS, LassoIcon, LineIcon, MIXED, MOVE_ANCHORS, MinimapCanvas, NEVER, OUTLINE_MIN_SCREEN_PX, PAINTED_CURSOR_LAYER_ID, PATH_ANCHOR_CHROME_ID, PenIcon, PencilIcon, PickHud, PointerProviderIfRoot, PolygonIcon, RECT_ALIGN_PROJECTION, ROTATION_HANDLE_BASE_PX, RectIcon, SPRING_PRESETS, SceneCanvas, SceneViewCanvas, SelectIcon, SelectionContextProvider, SelectionContextProviderIfRoot, ShaderCompileError, StarIcon, SubtractIcon, TOOL_PREF_KINDS, TextIcon, UnionIcon, UnknownIcon, VERSION, VIEW_ANIMATION_KEY, WeaselProvider, WeaselRenderer, _resetMarkersForTests, _resetPaintKindsForTests, aabbCenter, actionIs, actionShortcuts, alignDeltaFor, alignInsertBehavior, alignMoveBehavior, alignResizeBehavior, always, and, animateLifecycle, animateOnSetPose, annulusSemiAxes, applyBooleanOp, applyStyleToRange, areaSelectAction, arrayAdapter, asNodeId, asPaint, axisAlignedBounds, bezierCubic, bezierQuadratic, blendPoses, buildChromeCtx, buildGradientRamp, buildRuleCtx, buildSceneViewCommands, canBringForward, canHover, canSendBackward, capabilityAll, capabilityIn, capabilityIs, capabilityNot, caretIndexAt, cellAt, charOffsetToDomPosition, clampView, clearSelectionAction, clientToCanvas, clipboardCopyAction, clipboardCutAction, cloneAction, coarsePointer, composeAffordanceLayer, composePath, composeRectPose, composeSelectionPose, composeWorldPose, computeFitView, computeFitViewport, computeIndicatorCommand, computeWheelAction, cond, constrainTo45, containedThenNearest, countPathAnchors, createCellHighlightLayer, createChildrenLayer, createCornerResizeAffordance, createDebugOverlayLayer, createDebugSink, createDispatcher, createGridLayer, createGuidesLayer, createHistory2 as createHistory, createMoveToIndexOp, createNodeProperties, createNodeRouting, createPaintedCursorLayer, createPaintedCursorState, createParallaxLayer, createPathAnchorAffordances, createPathEditingOverlayLayer, createPathLayer, createPenPreviewLayer, createReorderOp, createRotationAffordance, createScene, createSelectionHandlesLayer, createSelectionOutlineLayer, createSelectionOverlayLayer, createSetDataOp, createSetLayerOp, createSetPathOp, createSetTextOp, createTextLayer, createViewResolver, createViewportLayer, cubicBezierEasing, cycleVertexColors, decomposePath, decomposeRectPose, defaultCommitAdapter, defaultDrawOne, defaultLabelTextRenderer, defaultNodeProperties, defaultNodeRouting, defaultVisibilityRules, defineTool, defineViewportTool, deriveAlignmentGuides, deriveParallaxView, describeRule, domPositionToCharOffset, domToRuns, drawLayers, drawOneLayer, easeIn, easeInBack, easeInBounce, easeInCirc, easeInCubic, easeInElastic, easeInExpo, easeInOut, easeInOutBack, easeInOutBounce, easeInOutCirc, easeInOutCubic, easeInOutElastic, easeInOutExpo, easeInOutQuad, easeInOutQuart, easeInOutQuint, easeInOutSine, easeInQuad, easeInQuart, easeInQuint, easeInSine, easeOut, easeOutBack, easeOutBounce, easeOutCirc, easeOutCubic, easeOutElastic, easeOutExpo, easeOutQuad, easeOutQuart, easeOutQuint, easeOutSine, editAnchorsAction, enterTextEditAction, enumerateAnchors, evaluate, fillInPoseFrame, fillToBoundsFrame, findNodeShape, findShapeInk, findShapeSilhouette, fitTextPose, fitToBounds, fitViewToBounds, fitZoom, focused, forEachCoalesced, frameRect, freeform, gateLayer, gesturing, getAlpha01, getImageBitmap, getMarker, getNodeShapes, getPaintKind, getStylusData, gradientForBounds, gradientGeometry, hexToRgba, hitAffordanceRegions, hitAnchor, hitRotationHandle, hostAnchorCss, hostAnchorRect, hovering, hoveringSelected, imageStatus, inferredNodeProperties, inferredNodeRouting, insertAction, interpolateView, isBuiltinToolPref, isEditableTarget2 as isEditableTarget, isGradientFill, isLayerPainted, isLayerVisible, isPatternSpec, keySpecShortcut, lassoSelectAction, lerpColorArray, lerpOklab, lerpOklch, linear, listMarkers, listPaintKinds, liveScope, makePinchZoomAction, makeViewportZoomAction, markerDrawCommands, markerInset, markerKeyOf, markerSites, mat3, matchAlignment, matchesKeyBinding, meanScale, mergeAlphaFromPrev, mergeContributions, modeIn, modeIs, modeNot, modifierHeld, momentum, moveAction, multiActive, nearest, nearestWithin, nestedHitTester, never, nodeHasFlag, none, normalizeHex, not, nurbs, oklabToOklch, oklabToSrgbU8, oklchToOklab, openFilePicker, or, paintAlpha, paintKindOf, paintWithAlpha, paintWithColor, parseColor, parseColorToRgba255, parseDebugFlags, pathContainsPoint, pathContainsPolygon, pathContainsRect, pathDistanceToPoint, pathDivide, pathExclude, pathFromD, pathInPoseFrame, pathInWorld, pathIntersect, pathIntersectsPolygon, pathIntersectsRect, pathOriginProjection, pathSubtract, pathToAnchors, pathUnion, pickTopMostHit, pinchZoomAction, planPixelRender, pointInRotatedRect, pointInTextPose, poseRotationOf, pressureToWidth, rainbowVertexColors, rebaseLocalPose, rectCorners, registerContentHandler, registerMarker, registerNodeShape, registerPaintKind, registerProgram, renderLabel, renderSceneToCanvas, renderSceneToPixels, resizeAction, resolveColor, resolveDeviceProfile, resolveEasing, resolveFillPattern, resolveMarkerSize, resolveParams, resolvePatternSpec, resolveSkeleton, resolveStrokeWidth, resolveVisibility, rgbaToHex, rotateAction, rotateAroundAABBCenter, rotatePathAround, rotatePoint, rotatedRectCorners, rotationDegreesUnit, rotationHandle, roundToCell, runsToDom, sampleGradientStops, sampleTrack, sceneFromJSON, sceneNodeClientRect, sceneSelectionStore, sceneToAdapter, scopeBindings, screenToWorld, selectFromLasso, selectionAtLeast, selectionEmpty, selectionIs, setFlagOverRange, shapeCoversPoint, sliceAction, snapPoint, solid, solidVertexColors, specificity, spiro, splitPathByLine, splitSubpaths, springPose, springVertexColors, srgbU8ToOklab, staggerVertexColors, startThresholdDrag, strokeInsets, strokeOf, strokeWith, styleAtRange, subscribeImageReady, tessellate, tessellateStroke, textCommand, textCommandFromRuns, tileGrid, toHex8, translatePoseViaDescriptor, translateRectPose, trimPolyline, tweenPose, tweenVertexColors, unionAABB, unionBounds, unionBoundsPath, useActiveToolContext, useAlign, useAnimator, useArrayAdapter, useAutoCenter, useBooleans, useBooleansAdapter, useCanvasFocus, useCanvasSize, useDecayLoop, useDeviceProfile, useDistribute, useDragGesture, useDragHandle, useDragRadial, useDragRect, useDropZone, useEllipseTool, useEyedropperTool, useGestureDispatcher, useGridCellHover, useGuides, useHandTool, useHandleDrag, useHostAnchor, useHoverTracking, useImageTool, useKeybindings, useLassoTool, useLineTool, useNodeOverlayFrame, useOptionalActiveToolContext, usePenTool, usePencilTool, usePinchGesture, usePinchZoomTool, usePointerStylus, usePolygonTool, usePublishSelection, useRectTool, useResizePolicy, useRotateTool, useScene, useSceneAdapter, useSceneTextEdit, useSelectTool, useSelection, useSelectionContext, useSimulation, useSliceDep, useStandardActions, useStarTool, useTextEdit, useTextTool, useTools, useVelocityTracker, useViewAnimation, useVisibleRaf, useZoom, viewToMat3, viewToTransform, viewportDragPanAction, viewportZoomAction, viewportsAt, visualBoundsViaDescriptor, when, withAlpha01, withCoord, withGradientKind, worldEditToStorage, worldPoseLookup, worldToScreen, zoomAt, zoomAtLeast };
|
|
30860
|
+
//# sourceMappingURL=chunk-HYJL7OOJ.js.map
|
|
30861
|
+
//# sourceMappingURL=chunk-HYJL7OOJ.js.map
|