@weasel-js/core 0.8.0 → 1.0.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +413 -0
  2. package/dist/{DrawCommand-BKJ5JPkC.d.ts → DrawCommand-DCmiNkBj.d.ts} +14 -169
  3. package/dist/{chunk-GLZLSPGJ.js → chunk-6SHZHXXR.js} +46 -9
  4. package/dist/chunk-6SHZHXXR.js.map +1 -0
  5. package/dist/{chunk-DLV5F4NY.js → chunk-D2C6K6FO.js} +915 -547
  6. package/dist/chunk-D2C6K6FO.js.map +1 -0
  7. package/dist/chunk-DCIU3SRK.js +505 -0
  8. package/dist/chunk-DCIU3SRK.js.map +1 -0
  9. package/dist/chunk-IO5Z75X4.js +167 -0
  10. package/dist/chunk-IO5Z75X4.js.map +1 -0
  11. package/dist/{chunk-BPRHGTLQ.js → chunk-UB6A6L77.js} +3 -3
  12. package/dist/{chunk-BPRHGTLQ.js.map → chunk-UB6A6L77.js.map} +1 -1
  13. package/dist/{chunk-CMBE45MT.js → chunk-Z3KNFTTS.js} +6 -6
  14. package/dist/chunk-Z3KNFTTS.js.map +1 -0
  15. package/dist/{index-Clf_koyR.d.ts → index-ChM3ZJ2v.d.ts} +103 -90
  16. package/dist/index.d.ts +313 -32
  17. package/dist/index.js +6 -6
  18. package/dist/insert.js +5 -5
  19. package/dist/insert.js.map +1 -1
  20. package/dist/move.js +2 -2
  21. package/dist/paint-types-CnLIzqq1.d.ts +261 -0
  22. package/dist/patterns-builtin.d.ts +57 -2
  23. package/dist/patterns-builtin.js +1 -97
  24. package/dist/patterns-builtin.js.map +1 -1
  25. package/dist/renderer.d.ts +24 -7
  26. package/dist/renderer.js +6 -6
  27. package/dist/resize.js +2 -2
  28. package/dist/routing.d.ts +4 -4
  29. package/dist/routing.js +1 -1
  30. package/dist/{viewToMat3-DFMdZvVl.d.ts → viewToMat3-BvaWCN99.d.ts} +1 -1
  31. package/package.json +6 -6
  32. package/dist/chunk-6DAUIMTO.js +0 -233
  33. package/dist/chunk-6DAUIMTO.js.map +0 -1
  34. package/dist/chunk-CMBE45MT.js.map +0 -1
  35. package/dist/chunk-DLV5F4NY.js.map +0 -1
  36. package/dist/chunk-GLZLSPGJ.js.map +0 -1
  37. package/dist/chunk-Y52N27PF.js +0 -39
  38. package/dist/chunk-Y52N27PF.js.map +0 -1
  39. package/dist/registerTexture-BzHTLhD9.d.ts +0 -25
@@ -4,13 +4,14 @@ import { V as View } from './view-DSQgxBJB.js';
4
4
  import { CapabilityTag } from '@weasel-js/modes';
5
5
  import * as React from 'react';
6
6
  import { MutableRefObject, ReactNode, ReactElement } from 'react';
7
- import { IngestItem, GestureSpec, InputEvent, ParsedModifiers, GestureName, ChannelRef, DescribeRouteOptions, GESTURE_DESCRIPTORS, GestureArgSpec, GestureDescriptor, ModRequirement, ModifierKey, ParsedRoute, PhaseAtom, RESERVED_ID_NAMES, RESERVED_ID_PREFIXES, ROUTE_FIELD_DEFINITIONS, ROUTE_TERMS, RouteDescriptionPart, RouteFieldName, RouteTermLabel, canonicalModifiers, collapseShiftPairs, describeRoute, describeRouteParts, formatPhaseAtom, formatRoute, getGestureDescriptor, isKnownGestureName, parseRoute } from '@weasel-js/gestures';
8
- import { F as FillStyle, a as Stroke, D as DrawCommand } from './DrawCommand-BKJ5JPkC.js';
7
+ import { GestureSpec, IngestItem, InputEvent, ParsedModifiers, GestureName, ChannelRef, DescribeRouteOptions, GESTURE_DESCRIPTORS, GestureArgSpec, GestureDescriptor, ModRequirement, ModifierKey, ParsedRoute, PhaseAtom, RESERVED_ID_NAMES, RESERVED_ID_PREFIXES, ROUTE_FIELD_DEFINITIONS, ROUTE_TERMS, RouteDescriptionPart, RouteFieldName, RouteTermLabel, canonicalModifiers, collapseShiftPairs, describeRoute, describeRouteParts, formatPhaseAtom, formatRoute, getGestureDescriptor, isKnownGestureName, parseRoute } from '@weasel-js/gestures';
8
+ import { B as Bounds, P as PoseProjection } from './geometry-DVeZ2i-c.js';
9
+ import { F as FillStyle, S as Stroke } from './paint-types-CnLIzqq1.js';
10
+ import { D as DrawCommand } from './DrawCommand-DCmiNkBj.js';
9
11
  import * as react_jsx_runtime from 'react/jsx-runtime';
10
12
  import { P as Path } from './path-B6MMiodD.js';
11
13
  import { Op, History } from '@weasel-js/history';
12
14
  import { L as LayoutStrategy, I as InsertAdapter } from './types-B_-khFM0.js';
13
- import { B as Bounds, P as PoseProjection } from './geometry-DVeZ2i-c.js';
14
15
  import { Mat3 } from '@weasel-js/geom';
15
16
  import { D as DebugSink } from './types-BJ8_cyT7.js';
16
17
 
@@ -239,6 +240,31 @@ interface CommonAffordanceScratch {
239
240
  y: number;
240
241
  };
241
242
  }
243
+ /**
244
+ * What a **registered layer's** `hitTest` returns. Extends `AffordanceBinding`
245
+ * so existing implementations keep typechecking; the added fields are how a
246
+ * consumer's own chrome says the things kit chrome says through
247
+ * `AffordanceRegion` — which cursor to show, and whether it owns the point
248
+ * outright.
249
+ */
250
+ interface LayerHit<TScratch = unknown> extends AffordanceBinding<TScratch> {
251
+ /** CSS cursor while the pointer is over this hit. Reaches the hover-cursor
252
+ * pump as `AffordanceHit.cursor`, the same path kit chrome uses. */
253
+ cursor?: string;
254
+ /** `'exclusive'` bars every binding whose target doesn't consult the
255
+ * affordance. Omitted means `'shared'` — today's behavior. Same name and
256
+ * meaning as `AffordanceHit.strength`, which it becomes. */
257
+ strength?: 'exclusive' | 'shared';
258
+ /** Which gestures an exclusive claim bars. Omitted bars all of them. */
259
+ claimedKinds?: readonly ClaimableGesture[];
260
+ }
261
+ /**
262
+ * Gesture kinds an affordance claim can bar, in the spec vocabulary bindings
263
+ * are written in. `'pointer'` is one token because `pointerDown` / `click` /
264
+ * `drag` are a single press protocol — at the event level the first two are
265
+ * the same `kind: 'pointerdown'`, told apart only by `stage`.
266
+ */
267
+ type ClaimableGesture = 'pointer' | 'doubleClick' | 'contextMenu' | 'longPress' | 'wheel';
242
268
 
243
269
  /**
244
270
  * Canvas size in CSS pixels — passed to `draw` for layers that anchor to
@@ -317,7 +343,7 @@ interface RenderLayer<TData> {
317
343
  /** Chrome-caps visibility predicate. When supplied, the layer must
318
344
  * not return a hit from any chrome element whose id reports
319
345
  * `false`. Absent → every element is hittable. */
320
- isVisible?: (id: string) => boolean) => AffordanceBinding | null;
346
+ isVisible?: (id: string) => boolean) => LayerHit | null;
321
347
  /**
322
348
  * Called on every pointermove when no gesture is currently captured.
323
349
  * Lets layers (e.g. HUD widgets) track hover state without participating
@@ -623,6 +649,15 @@ interface Point2 {
623
649
  interface AffordanceHit {
624
650
  /** Discriminator string, e.g. `'handle:bottom-right'`. */
625
651
  kind: string;
652
+ /** Id of whatever produced this hit — a kit affordance's `id`, or the
653
+ * registered layer's id. Read only by the dispatcher's dead-claim warning today. */
654
+ owner?: string;
655
+ /** `'exclusive'` means no binding may act on this point unless its target
656
+ * consults the affordance. `'shared'` (the default) competes on scope and
657
+ * specificity as bindings always have. */
658
+ strength?: 'exclusive' | 'shared';
659
+ /** Which gestures an exclusive claim bars. Omitted bars all of them. */
660
+ claimedKinds?: readonly ClaimableGesture[];
626
661
  /** World-space fixed/pivot point. For resize: opposite corner. For rotate: pivot. */
627
662
  fixedPoint?: {
628
663
  x: number;
@@ -950,6 +985,20 @@ interface OngoingInvoker {
950
985
  * the `Action` type. */
951
986
  type Invoker = ImmediateInvoker | OngoingInvoker;
952
987
 
988
+ /**
989
+ * GestureBinding — connects a GestureSpec to an Action id (with per-binding
990
+ * options). Tools own arrays of these on their `bindings` field; ambient
991
+ * gesture-bindings are registered globally.
992
+ *
993
+ * See `docs/superpowers/specs/2026-05-16-registry-unification-design.md`.
994
+ */
995
+
996
+ interface GestureBinding {
997
+ spec: GestureSpec;
998
+ actionId: string;
999
+ opts?: BindingOpts;
1000
+ }
1001
+
953
1002
  /**
954
1003
  * Pose composition for hierarchical scene graphs.
955
1004
  *
@@ -2073,17 +2122,35 @@ declare function useOptionalDepRegistry(): DepRegistry | null;
2073
2122
  declare function useDepSource<K extends DepName>(name: K, source: () => DepSchema[K]): void;
2074
2123
 
2075
2124
  /**
2076
- * GestureBinding connects a GestureSpec to an Action id (with per-binding
2077
- * options). Tools own arrays of these on their `bindings` field; ambient
2078
- * gesture-bindings are registered globally.
2079
- *
2080
- * See `docs/superpowers/specs/2026-05-16-registry-unification-design.md`.
2125
+ * When an entry's bindings are live. A set, not one value: the hand tool is
2126
+ * palette-selectable AND engaged by holding space, and both hold at once.
2127
+ */
2128
+ interface Eligibility {
2129
+ /** Selectable as the focused entry — exclusive, one at a time. */
2130
+ focus?: boolean;
2131
+ /** Also live while this key is held. */
2132
+ offhand?: HotkeyTrigger;
2133
+ /** Live regardless of what is focused. */
2134
+ always?: boolean;
2135
+ /** Live only for input this entry's own affordances produced. */
2136
+ claimed?: boolean;
2137
+ /** Modality filter, applied wherever it would otherwise be live. */
2138
+ capabilities?: CapabilityTag[];
2139
+ }
2140
+ /**
2141
+ * A registry entry: what it contributes, and when it is eligible. Every role
2142
+ * is optional and independent — an entry that only routes input declares only
2143
+ * `bindings` and `actions`.
2081
2144
  */
2082
-
2083
- interface GestureBinding {
2084
- spec: GestureSpec;
2085
- actionId: string;
2086
- opts?: BindingOpts;
2145
+ interface Contribution {
2146
+ id: string;
2147
+ eligibility: Eligibility;
2148
+ bindings?: GestureBinding[];
2149
+ actions?: Action[];
2150
+ overlay?: RenderLayer<unknown>;
2151
+ presentation?: ToolPresentation;
2152
+ /** Reflection escape hatch — the authored form, when there was one. */
2153
+ def?: unknown;
2087
2154
  }
2088
2155
 
2089
2156
  /** Modifier-key snapshot at event dispatch time. `space` is included
@@ -2147,8 +2214,8 @@ type ToolBounds = Bounds;
2147
2214
  * tool — consumers that render a palette (`<ToolPalette>`) read these
2148
2215
  * fields to display the tool; consumers that don't can ignore them.
2149
2216
  *
2150
- * Note: cursor is NOT here. The top-level `Tool.cursor` field below is
2151
- * already plumbed through `<Canvas>` to `style.cursor` on the host. */
2217
+ * Note: cursor is NOT here. `Tool.cursor` (inherited from `Contribution`)
2218
+ * is already plumbed through `<Canvas>` to `style.cursor` on the host. */
2152
2219
  interface ToolPresentation<TScratch = unknown> {
2153
2220
  /** Human-readable label, distinct from the `id`. Falls back to `id`. */
2154
2221
  label?: string;
@@ -2163,34 +2230,13 @@ interface ToolPresentation<TScratch = unknown> {
2163
2230
  * derives one from `Tool.keybinding` via its own formatter. */
2164
2231
  shortcut?: string;
2165
2232
  }
2166
- /** Full Tool record. */
2167
- interface Tool<TScratch = unknown> {
2168
- id: string;
2169
- /**
2170
- * App-level capability tags for modality. The `weasel-modes` package's
2171
- * `eligibleForMode(mode, capabilities)` predicate consumes these to decide
2172
- * whether the tool is usable in the active mode. Tags are extensible
2173
- * strings — apps can define their own. Untagged tools are treated as
2174
- * ineligible by all modes except those whose `allows` list includes
2175
- * every implicit-or-declared tag (i.e. `normal` in the default preset).
2176
- */
2177
- capabilities?: CapabilityTag[];
2178
- /**
2179
- * Actions this tool owns and needs registered while it is in the tools
2180
- * registry — e.g. polygon's `polygon.adjustSides`, which its own bindings
2181
- * reference by id.
2182
- *
2183
- * Declared here rather than registered by the hook with `useAction`,
2184
- * because tool hooks run wherever the consumer calls them — for
2185
- * `<SceneCanvas>` that is ABOVE `<ActionsProviderIfRoot>`, where
2186
- * `useActionsRegistry()` returns null and `useAction` silently no-ops. The
2187
- * result was a binding pointing at an action id nothing had registered, so
2188
- * the gesture fell through to whatever matched next (polygon's
2189
- * wheel/arrow-key side adjustment did nothing and `nudge.*` moved the
2190
- * selection instead). `<ToolActionsMounter>` registers these from inside
2191
- * the provider.
2192
- */
2193
- actions?: Action[];
2233
+ /**
2234
+ * The focus-declaring case of a `Contribution`: a mode the user switches
2235
+ * into, plus the hooks that only make sense for one (`initScratch`,
2236
+ * activate/deactivate, live preview, `cursor`). Everything else — bindings,
2237
+ * actions, overlay, presentation is inherited.
2238
+ */
2239
+ interface Tool<TScratch = unknown> extends Contribution {
2194
2240
  /** Optional caller-supplied key. Most built-in tools have their activation
2195
2241
  * key declared in `BUILTIN_SELECT_KEYS` in `useKeybindings.ts`; this field
2196
2242
  * is for tools that want their activation key to be configurable by the
@@ -2200,11 +2246,9 @@ interface Tool<TScratch = unknown> {
2200
2246
  * the invoker knows which tool to switch to). */
2201
2247
  keybinding?: ToolKeybinding;
2202
2248
  initScratch?: () => TScratch;
2249
+ cursor?: string | ((ctx: ToolCtx<TScratch>) => string);
2203
2250
  onActivate?: (ctx: ToolCtx<TScratch>) => void;
2204
2251
  onDeactivate?: (ctx: ToolCtx<TScratch>) => void;
2205
- cursor?: string | ((ctx: ToolCtx<TScratch>) => string);
2206
- /** Presentation metadata for tool palettes. See `ToolPresentation`. */
2207
- presentation?: ToolPresentation<TScratch>;
2208
2252
  /** Returns the in-flight preview pose for `id` if this tool is mid-gesture
2209
2253
  * on it; otherwise `null`. Lets `Canvas.helpersRef.getEffectivePose`
2210
2254
  * reflect live gesture state without reaching into hook internals. The
@@ -2222,26 +2266,6 @@ interface Tool<TScratch = unknown> {
2222
2266
  * consults this alongside `previewPose` to avoid double-rendering. Returns
2223
2267
  * `null` when no gesture is in flight. */
2224
2268
  previewIds?: () => Iterable<string> | null;
2225
- /** Optional overlay layer rendered on top of the scene/chrome whenever
2226
- * this tool is in any active slot (active, hotkey, or ambient).
2227
- * The layer's `draw` function reads from this tool's scratch via React
2228
- * closure (re-evaluated each render). Return early from `draw` to render
2229
- * nothing — typically gated on a scratch field like
2230
- * `if (!scratch.overlay) return`. */
2231
- overlay?: RenderLayer<unknown>;
2232
- /** Declarative gesture bindings — the tool's entire input surface. The
2233
- * gesture dispatcher consults these at active scope while this tool is
2234
- * active, and at hotkey scope while it is held. See
2235
- * `docs/superpowers/specs/2026-05-16-registry-unification-design.md`. */
2236
- bindings?: GestureBinding[];
2237
- /** Reflection escape hatch: when this `Tool` was produced by `defineTool`,
2238
- * the source `ToolDef` is attached here so introspection consumers
2239
- * (`buildRouteRegistry`, `findConflicts`, the toolkit-builder UI, the
2240
- * reflection demo) can read the authored form — `hookName` in particular,
2241
- * which the runtime `Tool` doesn't carry. Tools constructed without
2242
- * `defineTool` may leave this undefined. Typed as `unknown` to keep this
2243
- * file from importing the routing types — consumers cast at the use site. */
2244
- def?: unknown;
2245
2269
  }
2246
2270
  /** Internal — which slot a tool occupies in the dispatch order. */
2247
2271
  type ToolSlot = 'hotkey' | 'active' | 'ambient';
@@ -2334,17 +2358,6 @@ interface DispatcherContext {
2334
2358
  activeToolId: string;
2335
2359
  /** Held-hotkey stack, top of stack last. */
2336
2360
  hotkeyStack: readonly string[];
2337
- /**
2338
- * Ids of always-on tools. Their bindings are assembled at AMBIENT scope, so
2339
- * they lose to the active tool on a tie — which is what "always listening,
2340
- * never in the way" needs. Chrome that floats over the scene lives here:
2341
- * `@weasel-js/hud`'s tool is the worked example.
2342
- *
2343
- * Without this an ambient tool's `bindings` were assembled nowhere at all:
2344
- * the walk covered hotkey and active tools plus actions' `defaultBinding`,
2345
- * and an ambient tool is in neither set.
2346
- */
2347
- ambientToolIds?: readonly string[];
2348
2361
  /** Lookup for tool definitions. */
2349
2362
  toolsById: ReadonlyMap<string, Tool>;
2350
2363
  /** Platform flag for `mod` shorthand resolution. */
@@ -2872,13 +2885,10 @@ interface ToolDef<TScratch = void> {
2872
2885
  * to the consolidated `tool.activate` action (with `opts.params.toolId`
2873
2886
  * set so the invoker knows which tool to switch to). */
2874
2887
  keybinding?: ToolKeybinding;
2875
- /** Declarative held-key trigger (reflection / inspector only). When set,
2876
- * signals to the host that this tool can engage via a held key; the host
2877
- * must register the activation via the consolidated `tool.offhand` action
2878
- * (`makeToolOffhandAction` + `buildToolOffhandBindings`). Built-in tools
2879
- * declare held keys in `BUILTIN_OFFHAND_ACTIONS`; configurable-hotkey
2880
- * tools rely on the host to wire the binding. Setting this field does NOT
2881
- * automatically engage the held-key behavior. */
2888
+ /** Held-key trigger: this tool engages while the key is down and
2889
+ * disengages on release. Carried onto `Tool.eligibility.offhand`, which
2890
+ * assembly reads to register the consolidated `tool.offhand` action — the
2891
+ * declaration is the wiring, with nothing for the host to do. */
2882
2892
  hotkey?: HotkeyTrigger;
2883
2893
  onActivate?: (ctx: ToolCtx<TScratch>) => void;
2884
2894
  onDeactivate?: (ctx: ToolCtx<TScratch>) => void;
@@ -3056,6 +3066,9 @@ interface ToolScopes {
3056
3066
  registry: readonly Tool<unknown>[] | Readonly<Record<string, Tool<unknown>>>;
3057
3067
  /** Always-on tools. Every one of these is live at once. */
3058
3068
  ambient?: readonly Tool<unknown>[];
3069
+ /** Registered actions. Their `defaultBinding`s assemble at ambient scope
3070
+ * (hotkey scope when `Action.scope` says so), alongside the tools above. */
3071
+ actions?: readonly Action[];
3059
3072
  }
3060
3073
  /**
3061
3074
  * Detect the same-tuple overlaps that are *reachable* — the ones where the
@@ -3075,10 +3088,10 @@ interface ToolScopes {
3075
3088
  * ordered only by registration;
3076
3089
  * - two **hotkey-capable** tools, which can stack.
3077
3090
  *
3078
- * Not covered: the actions registry's `defaultBinding`s, which the dispatcher
3079
- * also folds into ambient/hotkey scope. They're assembled somewhere else
3080
- * entirely (`ActionsRegistry`, not `useTools`), so catching tool-vs-action
3081
- * collisions means giving this function a second input it doesn't have yet.
3091
+ * Registered actions join the same two buckets: their `defaultBinding`s
3092
+ * assemble at ambient scope (hotkey scope when `Action.scope` says so), so an
3093
+ * ambient tool and an action claiming one tuple really do fall back on
3094
+ * declaration order.
3082
3095
  */
3083
3096
  declare function findScopedConflicts(scopes: ToolScopes): Conflict[];
3084
3097
  /**
@@ -3155,4 +3168,4 @@ declare namespace index {
3155
3168
  export { index_ChannelRef as ChannelRef, type index_Conflict as Conflict, index_DescribeRouteOptions as DescribeRouteOptions, index_GESTURE_DESCRIPTORS as GESTURE_DESCRIPTORS, index_GestureArgSpec as GestureArgSpec, index_GestureDescriptor as GestureDescriptor, index_GestureName as GestureName, index_ModRequirement as ModRequirement, index_ModifierKey as ModifierKey, index_PREDICATE_TARGET as PREDICATE_TARGET, index_ParsedModifiers as ParsedModifiers, index_ParsedRoute as ParsedRoute, index_PhaseAtom as PhaseAtom, index_RESERVED_ID_NAMES as RESERVED_ID_NAMES, index_RESERVED_ID_PREFIXES as RESERVED_ID_PREFIXES, index_ROUTE_FIELD_DEFINITIONS as ROUTE_FIELD_DEFINITIONS, index_ROUTE_TERMS as ROUTE_TERMS, type index_RegistryEntry as RegistryEntry, index_RouteDescriptionPart as RouteDescriptionPart, index_RouteFieldName as RouteFieldName, index_RouteTermLabel as RouteTermLabel, type index_ToolDef as ToolDef, type index_ToolKeybinding as ToolKeybinding, type index_ToolScopes as ToolScopes, type index_ViewportToolDef as ViewportToolDef, index_buildRouteRegistry as buildRouteRegistry, index_canonicalModifiers as canonicalModifiers, index_collapseShiftPairs as collapseShiftPairs, index_defineTool as defineTool, index_defineViewportTool as defineViewportTool, index_describeRoute as describeRoute, index_describeRouteParts as describeRouteParts, index_findConflicts as findConflicts, index_findScopedConflicts as findScopedConflicts, index_formatConflict as formatConflict, index_formatPhaseAtom as formatPhaseAtom, index_formatRoute as formatRoute, index_getGestureDescriptor as getGestureDescriptor, index_isKnownGestureName as isKnownGestureName, index_parseRoute as parseRoute, index_reportRouteConflicts as reportRouteConflicts };
3156
3169
  }
3157
3170
 
3158
- export { type CustomPaintContext as $, type Action as A, type BooleansAdapter as B, type Condition as C, type Dims as D, type ActionEntry as E, ActionsProvider as F, type GeometryProjection as G, type HotkeyTrigger as H, type InsertExtras as I, ActiveToolContextProvider as J, ActiveToolContextProviderIfRoot as K, type ActiveToolContextProviderProps as L, type ActiveToolContextValue as M, type AreaSelectDep as N, type BindingOpts as O, type BindingScope as P, type BooleanOp as Q, type RenderLayer as R, type SliceDep as S, type Tool as T, type UseSelectionOptions as U, type VisibilityRules as V, type BooleanOpResult as W, type BoundGesture as X, type BuildRuleCtxArgs as Y, type ClipboardDep as Z, type ClipboardIngestCtx as _, type DeviceProfile as a, useAction as a$, type DepName as a0, type DepRegistry as a1, DepRegistryProvider as a2, type DispatcherContext as a3, type DragSample as a4, type EditAnchorsDep as a5, type GestureBinding as a6, IDENTITY_POSE_COMPOSITION as a7, type ImmediateInvoker as a8, type IngestCtx as a9, type SnapDep as aA, type SvgUnpacker as aB, type TextEditDep as aC, type ToolModifiers as aD, type ToolPresentation as aE, type ToolSlot as aF, type UiOngoingControl as aG, type ViewApi as aH, applyBooleanOp as aI, buildRuleCtx as aJ, clipboardCopyAction as aK, clipboardCutAction as aL, composeRectPose as aM, composeWorldPose as aN, createDispatcher as aO, decomposeRectPose as aP, describeRule as aQ, drawLayers as aR, enterTextEditAction as aS, evaluate as aT, evaluateEnabled as aU, rebaseLocalPose as aV, registerContentHandler as aW, index as aX, sliceAction as aY, specificity as aZ, translateRectPose as a_, type IngestionDep as aa, type InsertDep as ab, type InvocationCtx as ac, type Invoker as ad, type LassoSelectDep as ae, type LayoutDep as af, type MatchResult as ag, NEVER as ah, type NodeAtPointDep as ai, type OngoingHandle as aj, type OngoingInvoker as ak, type OngoingOverlay as al, type Point2 as am, PointerContextProvider as an, type PointerContextValue as ao, type PointerWorldPos as ap, type PoseAdapter as aq, type PoseComposition as ar, type ResizePolicy as as, type ResolveAllOptions as at, type ResolveOnlyResult as au, type ResolvedCandidate as av, type ScopedBinding as aw, type SelectionExtendKey as ax, type SelectionMode as ay, type Selector as az, type DetectedDeviceFacts as b, useActionsRegistry as b0, useActiveToolContext as b1, useDepRegistry as b2, useDepSource as b3, useOptionalActiveToolContext as b4, useOptionalDepRegistry as b5, usePointerContext as b6, useSelection as b7, worldPoseLookup as b8, type Conflict as b9, PREDICATE_TARGET as ba, type RegistryEntry as bb, type ToolDef as bc, type ToolScopes as bd, type ViewportToolDef as be, buildRouteRegistry as bf, defineTool as bg, defineViewportTool as bh, findConflicts as bi, findScopedConflicts as bj, formatConflict as bk, reportRouteConflicts as bl, type Rule as c, type RuleCtx as d, type ChromeCtx as e, type ChromeId as f, type DepSchema as g, type ActionsRegistry as h, type AffordanceHit as i, type Dispatcher as j, type AnyTool as k, type ToolCtx as l, type ToolKeybinding as m, type AffordanceBinding as n, type ChromeState as o, type SelectionApi as p, type ContentHandlerEntry as q, type SvgIngestOptions as r, type ActionsProp as s, type Affordance as t, type AffordanceRegion as u, type CommonAffordanceScratch as v, ALWAYS as w, type ActionDeps as x, ActionDisabledReason as y, type ActionEnabledResult as z };
3171
+ export { type BoundGesture as $, type Action as A, type BooleansAdapter as B, type Condition as C, type Dims as D, type Eligibility as E, type ActionDeps as F, type GeometryProjection as G, type HotkeyTrigger as H, type InsertExtras as I, ActionDisabledReason as J, type ActionEnabledResult as K, type LayerHit as L, type ActionEntry as M, ActionsProvider as N, ActiveToolContextProvider as O, ActiveToolContextProviderIfRoot as P, type ActiveToolContextProviderProps as Q, type RenderLayer as R, type SliceDep as S, type Tool as T, type UseSelectionOptions as U, type VisibilityRules as V, type ActiveToolContextValue as W, type AreaSelectDep as X, type BindingOpts as Y, type BooleanOp as Z, type BooleanOpResult as _, type DeviceProfile as a, index as a$, type BuildRuleCtxArgs as a0, type ClaimableGesture as a1, type ClipboardDep as a2, type ClipboardIngestCtx as a3, type CustomPaintContext as a4, type DepName as a5, type DepRegistry as a6, DepRegistryProvider as a7, type DispatcherContext as a8, type DragSample as a9, type ResolvedCandidate as aA, type SelectionExtendKey as aB, type SelectionMode as aC, type Selector as aD, type SnapDep as aE, type SvgUnpacker as aF, type TextEditDep as aG, type ToolModifiers as aH, type ToolPresentation as aI, type ToolSlot as aJ, type UiOngoingControl as aK, type ViewApi as aL, applyBooleanOp as aM, buildRuleCtx as aN, clipboardCopyAction as aO, clipboardCutAction as aP, composeRectPose as aQ, composeWorldPose as aR, createDispatcher as aS, decomposeRectPose as aT, describeRule as aU, drawLayers as aV, enterTextEditAction as aW, evaluate as aX, evaluateEnabled as aY, rebaseLocalPose as aZ, registerContentHandler as a_, type EditAnchorsDep as aa, type GestureBinding as ab, IDENTITY_POSE_COMPOSITION as ac, type ImmediateInvoker as ad, type IngestCtx as ae, type IngestionDep as af, type InsertDep as ag, type InvocationCtx as ah, type Invoker as ai, type LassoSelectDep as aj, type LayoutDep as ak, type MatchResult as al, NEVER as am, type NodeAtPointDep as an, type OngoingHandle as ao, type OngoingInvoker as ap, type OngoingOverlay as aq, type Point2 as ar, PointerContextProvider as as, type PointerContextValue as at, type PointerWorldPos as au, type PoseAdapter as av, type PoseComposition as aw, type ResizePolicy as ax, type ResolveAllOptions as ay, type ResolveOnlyResult as az, type DetectedDeviceFacts as b, sliceAction as b0, specificity as b1, translateRectPose as b2, useAction as b3, useActionsRegistry as b4, useActiveToolContext as b5, useDepRegistry as b6, useDepSource as b7, useOptionalActiveToolContext as b8, useOptionalDepRegistry as b9, usePointerContext as ba, useSelection as bb, worldPoseLookup as bc, type Conflict as bd, PREDICATE_TARGET as be, type RegistryEntry as bf, type ToolDef as bg, type ToolScopes as bh, type ViewportToolDef as bi, buildRouteRegistry as bj, defineTool as bk, defineViewportTool as bl, findConflicts as bm, findScopedConflicts as bn, formatConflict as bo, reportRouteConflicts as bp, type Rule as c, type RuleCtx as d, type ChromeCtx as e, type ChromeId as f, type DepSchema as g, type ActionsRegistry as h, type AffordanceHit as i, type Dispatcher as j, type AnyTool as k, type ToolCtx as l, type ToolKeybinding as m, type ChromeState as n, type SelectionApi as o, type ContentHandlerEntry as p, type SvgIngestOptions as q, type ActionsProp as r, type Affordance as s, type AffordanceBinding as t, type AffordanceRegion as u, type CommonAffordanceScratch as v, type BindingScope as w, type Contribution as x, type ScopedBinding as y, ALWAYS as z };