@pixerate/editor-react 0.16.0 → 0.17.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 (46) hide show
  1. package/README.md +2 -2
  2. package/dist/canvas/index.cjs +406 -142
  3. package/dist/canvas/index.cjs.map +1 -1
  4. package/dist/canvas/index.d.cts +66 -3
  5. package/dist/canvas/index.d.ts +66 -3
  6. package/dist/canvas/index.js +277 -0
  7. package/dist/canvas/index.js.map +1 -1
  8. package/dist/chunk-I3E4KSA2.js +515 -0
  9. package/dist/chunk-I3E4KSA2.js.map +1 -0
  10. package/dist/chunk-JR5ZBDR7.js +2012 -0
  11. package/dist/chunk-JR5ZBDR7.js.map +1 -0
  12. package/dist/{chunk-XTFR3IMK.js → chunk-ZU54BMDC.js} +473 -160
  13. package/dist/chunk-ZU54BMDC.js.map +1 -0
  14. package/dist/generation/index.cjs +290 -0
  15. package/dist/generation/index.cjs.map +1 -1
  16. package/dist/generation/index.d.cts +66 -2
  17. package/dist/generation/index.d.ts +66 -2
  18. package/dist/generation/index.js +7 -1
  19. package/dist/image-editor/index.cjs +490 -187
  20. package/dist/image-editor/index.cjs.map +1 -1
  21. package/dist/image-editor/index.d.cts +34 -2
  22. package/dist/image-editor/index.d.ts +34 -2
  23. package/dist/image-editor/index.js +5 -1
  24. package/dist/index.cjs +2372 -731
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +88 -6
  27. package/dist/index.d.ts +88 -6
  28. package/dist/index.js +334 -96
  29. package/dist/index.js.map +1 -1
  30. package/dist/spreadsheet/index.cjs +943 -112
  31. package/dist/spreadsheet/index.cjs.map +1 -1
  32. package/dist/spreadsheet/index.d.cts +119 -7
  33. package/dist/spreadsheet/index.d.ts +119 -7
  34. package/dist/spreadsheet/index.js +11 -1
  35. package/dist/tokens/index.cjs +395 -0
  36. package/dist/tokens/index.cjs.map +1 -0
  37. package/dist/tokens/index.d.cts +54 -0
  38. package/dist/tokens/index.d.ts +54 -0
  39. package/dist/tokens/index.js +375 -0
  40. package/dist/tokens/index.js.map +1 -0
  41. package/package.json +10 -2
  42. package/dist/chunk-7SPRQZ6H.js +0 -216
  43. package/dist/chunk-7SPRQZ6H.js.map +0 -1
  44. package/dist/chunk-FYIPXHAE.js +0 -1169
  45. package/dist/chunk-FYIPXHAE.js.map +0 -1
  46. package/dist/chunk-XTFR3IMK.js.map +0 -1
@@ -2,8 +2,9 @@ import * as React$1 from 'react';
2
2
  import React__default from 'react';
3
3
  import { AgentPresence } from '@pixerate/editor/agent';
4
4
  import * as _pixerate_editor_canvas from '@pixerate/editor/canvas';
5
- import { CanvasNode, CanvasEdge, IncrementalLayoutOptions, XYPosition, GraphDifferences, Rect, CanvasLayoutOptions, Side, PlaceBesideOptions, getCenteredNodePosition, CanvasDockingCallbacks, DockStrategy, ExplodeNodeOptions, CollapseNodeOptions, ExplosionSnapshot, ArrangeHistoryTarget, SnapGuidesOptions, NodeRectOptions, AutoLayoutOptions, GuideLine, CanvasArrangeAction, ArrangeShortcutBinding, CanvasScenesOptions, CanvasViewport, CanvasScenesStore, CanvasScene, FitViewportOptions, ShapeDescription, AutoLayoutMeasure } from '@pixerate/editor/canvas';
6
- export { AUTO_LAYOUT_DATA_KEY, AlignEdge, ArrangeShortcutBinding, AutoLayout, AutoLayoutAlignContent, AutoLayoutAlignCross, AutoLayoutAlignMain, AutoLayoutCellAlign, AutoLayoutChild, AutoLayoutConstraints, AutoLayoutGrid, AutoLayoutGridArea, AutoLayoutGridCell, AutoLayoutGridGeometry, AutoLayoutGridTrack, AutoLayoutHorizontalConstraint, AutoLayoutInsertTarget, AutoLayoutMeasure, AutoLayoutMode, AutoLayoutOptions, AutoLayoutPadding, AutoLayoutSize, AutoLayoutSizing, AutoLayoutSizingPair, AutoLayoutVerticalConstraint, CHILD_LAYOUT_DATA_KEY, CONNECTION_LINE_TYPES, CanvasArrangeAction, CanvasAutoLayoutController, CanvasAutoLayoutControllerOptions, CanvasClipboardPayload, CanvasConnectionLineType, CanvasDockingCallbacks, CanvasEdge, CanvasHeightOptions, CanvasLayoutOptions, CanvasNode, CanvasNodeUpdate, CanvasScene, CanvasScenesState, CanvasScenesStore, CanvasViewport, Clock, CollapseNodeOptions, CombineShapeNodesOptions, CombineShapeNodesRefusal, CombineShapeNodesResult, ConnectorSnap, ConnectorSnapTarget, CubicSegment, DEFAULT_ARRANGE_SHORTCUTS, DirectionalDisplacementOptions, DisplacementDirection, DistributeAxis, DistributeMode, DockStrategy, EllipseShape, ExplodeNodeOptions, ExplosionSnapshot, FanOutTrajectoryOptions, FitCubicsOptions, FitPathDataOptions, FlattenOptions, GraphDifferences, GuideIndex, GuideLine, IncrementalLayoutOptions, ManualClock, MeasureGuide, MeasureSelectionOptions, MeasureSelectionResult, MultiPolygon, NodeTransition, PathCommand, PathShape, PlaceBesideOptions, Point, PolygonBooleanOperation, PolygonBooleanOptions, PolygonFillRule, PolygonInput, PolygonOperand, PolygonPiece, PolygonRing, PolygonToPathOptions, PolygonWithHoles, Position, RESIZE_HANDLES, Rect, RectShape, ReflowDisplacementOptions, RegularPolygonShape, ResizeHandle, SHAPE_DATA_KEY, SHAPE_KINDS, SHAPE_NODE_TYPE, SHAPE_OPERATIONS, ShapeDescription, ShapeKind, ShapeNodePolygonOptions, ShapeOperation, ShapePaint, ShapeRenderData, ShapeSize, Side, SizeDimension, SnapGuidesOptions, SnapNodeResizeOptions, SnapNodeResizeResult, SnapResizeOptions, SnapResizeResult, SnapResult, StarShape, TrajectoryFunction, TrajectoryPoint, XYPosition, ZOrderOperation, alignNodes, applyConstraints, applyNodeUpdates, applyShapeCombination, blendLayout, boundsOf, calculateDagreReflowDisplacement, calculateDirectionalDisplacement, canCombineShapeNodes, canvasHeight, centerNodes, centre, clampLayoutSize, combineShapeNodes, computeNodesBoundingBox, computeSnapGuides, connectedOnly, createBezierTrajectory, createCanvasAutoLayoutController, createCanvasScenesStore, createFanOutTrajectory, createGuideIndex, createNodeGuideIndex, cubicPointAt, cubicsToPathData, defaultEasing, distributeNodes, dividePolygons, ensureLayout, estimateCanvasHeight, estimateNodeSize, findConnectorSnap, fitCubicRun, fitCubics, fitFreehandPath, fitPathData, fitViewportToNodes, fitViewportToRect, flattenSvgPath, flowSide, getAbsolutePosition, getAutoLayout, getAutoLayoutGrid, getAutoLayoutInsertTarget, getCenteredNodePosition, getChildLayout, getFlowChildren, getLayoutParent, getLayoutSizing, getLayoutedNodes, getNodeRect, getNodeShape, getNodeSize, getResizingNodeRect, getShapeRenderData, getShapeSvg, handlePoint, inferResizeHandle, intersectPolygons, invertNodeUpdates, isAutoLayoutFrame, isEventFromTextInput, isLocked, isMeasureModifierHeld, isShapeDescription, isShapeNode, isStraightCubic, isValidCanvasNode, isValidUrl, layoutAll, layoutBounds, layoutFrame, layoutUp, layoutUpMany, linearPositionTrajectory, linearTrajectory, lockNodes, makeSizingCoherent, matchArrangeShortcut, matchSize, measureBetween, measureLabel, measureSelection, measureToLine, mergeNodeUpdates, moveLayoutChild, multiPolygonArea, multiPolygonBounds, nearestHandlePositions, oppositePosition, overlaps, parseCanvasClipboardData, parseCanvasScenes, parseSvgPath, placeBeside, pointInMultiPolygon, pointInRings, polygonArea, polygonBoolean, polygonToSvgPath, positionToSide, readStyleSize, realClock, relayoutUpdates, remapPastedNodes, reorderNodes, repositionNodesTo, resizeHandleAxes, resolvePadding, revertShapeCombination, ringSignedArea, runMultiNodeTransition, serializeCanvasNodes, shapeNodeToPolygon, shapeToPolygon, sideToPosition, simplifyRing, snapNodeDrag, snapNodeResize, snapResize, snapToGrid, subtractPolygons, toggleLockNodes, unionPolygons, unlockNodes, withStyleSize, xorPolygons } from '@pixerate/editor/canvas';
5
+ import { CanvasNode, CanvasEdge, IncrementalLayoutOptions, XYPosition, GraphDifferences, Rect, CanvasLayoutOptions, Side, PlaceBesideOptions, getCenteredNodePosition, CanvasDockingCallbacks, DockStrategy, ExplodeNodeOptions, CollapseNodeOptions, ExplosionSnapshot, ArrangeHistoryTarget, SnapGuidesOptions, NodeRectOptions, AutoLayoutOptions, GuideLine, CanvasArrangeAction, ArrangeShortcutBinding, CanvasScenesOptions, CanvasViewport, CanvasScenesStore, CanvasScene, FitViewportOptions, ShapeDescription, AutoLayoutMeasure, CanvasTokenOptions } from '@pixerate/editor/canvas';
6
+ export { AUTO_LAYOUT_DATA_KEY, AlignEdge, ArrangeShortcutBinding, AutoLayout, AutoLayoutAlignContent, AutoLayoutAlignCross, AutoLayoutAlignMain, AutoLayoutCellAlign, AutoLayoutChild, AutoLayoutConstraints, AutoLayoutGrid, AutoLayoutGridArea, AutoLayoutGridCell, AutoLayoutGridGeometry, AutoLayoutGridTrack, AutoLayoutHorizontalConstraint, AutoLayoutInsertTarget, AutoLayoutMeasure, AutoLayoutMode, AutoLayoutOptions, AutoLayoutPadding, AutoLayoutSize, AutoLayoutSizing, AutoLayoutSizingPair, AutoLayoutVerticalConstraint, BezierCommand, BezierPath, BezierPathInput, CANVAS_TOKEN_PROPERTIES, CHILD_LAYOUT_DATA_KEY, CONNECTION_LINE_TYPES, CanvasArrangeAction, CanvasAutoLayoutController, CanvasAutoLayoutControllerOptions, CanvasClipboardPayload, CanvasConnectionLineType, CanvasDockingCallbacks, CanvasEdge, CanvasHeightOptions, CanvasLayoutOptions, CanvasNode, CanvasNodeUpdate, CanvasScene, CanvasScenesState, CanvasScenesStore, CanvasTokenBindingInfo, CanvasTokenOptions, CanvasTokenProperty, CanvasViewport, Clock, CollapseNodeOptions, CombineShapeNodesOptions, CombineShapeNodesRefusal, CombineShapeNodesResult, ConnectorSnap, ConnectorSnapTarget, CubicSegment, DEFAULT_ARRANGE_SHORTCUTS, DirectionalDisplacementOptions, DisplacementDirection, DistributeAxis, DistributeMode, DividePathsResult, DockStrategy, EllipseShape, ExplodeNodeOptions, ExplosionSnapshot, FanOutTrajectoryOptions, FitCubicsOptions, FitPathDataOptions, FlattenOptions, GraphDifferences, GuideIndex, GuideLine, IncrementalLayoutOptions, ManualClock, MeasureGuide, MeasureSelectionOptions, MeasureSelectionResult, MultiPolygon, NodeTransition, OffsetPathOptions, OffsetShapeNodesOptions, OutlineShapeStrokesOptions, OutlineStrokeOptions, PathBooleanResult, PathCommand, PathOperand, PathOperandInput, PathOpsOptions, PathShape, PlaceBesideOptions, Point, PolygonBooleanOperation, PolygonBooleanOptions, PolygonFillRule, PolygonInput, PolygonOperand, PolygonPiece, PolygonRing, PolygonToPathOptions, PolygonWithHoles, Position, RESIZE_HANDLES, Rect, RectShape, ReflowDisplacementOptions, RegularPolygonShape, ResizeHandle, SHAPE_DATA_KEY, SHAPE_KINDS, SHAPE_NODE_TYPE, SHAPE_OPERATIONS, ShapeDescription, ShapeKind, ShapeNodePolygonOptions, ShapeOperation, ShapePaint, ShapePathEditOperation, ShapePathEditRefusal, ShapePathEditResult, ShapeRenderData, ShapeSize, Side, SizeDimension, SnapGuidesOptions, SnapNodeResizeOptions, SnapNodeResizeResult, SnapResizeOptions, SnapResizeResult, SnapResult, StarShape, StrokeCap, StrokeJoin, TOKEN_BINDINGS_DATA_KEY, TOKEN_MODES_DATA_KEY, TrajectoryFunction, TrajectoryPoint, XYPosition, ZOrderOperation, alignNodes, applyConstraints, applyNodeUpdates, applyShapeCombination, applyShapeReplacement, bezierPathArea, bezierPathBounds, bezierPathLength, bezierPathPointAtLength, bezierPathSignedArea, bezierPathToSvg, bindCanvasToken, blendLayout, boundsOf, calculateDagreReflowDisplacement, calculateDirectionalDisplacement, canCombineShapeNodes, canOffsetShapeNodes, canOutlineShapeNodeStrokes, canvasHeight, centerNodes, centre, clampLayoutSize, combineShapeNodes, computeNodesBoundingBox, computeSnapGuides, connectedOnly, countPathSegments, createBezierTrajectory, createCanvasAutoLayoutController, createCanvasScenesStore, createFanOutTrajectory, createGuideIndex, createNodeGuideIndex, cubicPointAt, cubicsToPathData, dashContours, defaultEasing, detachTokenBindings, distanceToBezierPath, distributeNodes, dividePaths, dividePolygons, ensureLayout, estimateCanvasHeight, estimateNodeSize, excludePaths, findConnectorSnap, fitCubicRun, fitCubics, fitFreehandPath, fitPathData, fitViewportToNodes, fitViewportToRect, flattenSvgPath, flowSide, getAbsolutePosition, getAutoLayout, getAutoLayoutGrid, getAutoLayoutInsertTarget, getBindableTokenProperties, getCanvasTokenProperty, getCenteredNodePosition, getChildLayout, getEffectiveTokenModes, getFlowChildren, getLayoutParent, getLayoutSizing, getLayoutedNodes, getNodeRect, getNodeShape, getNodeSize, getNodeTokenBindings, getNodeTokenModes, getResizingNodeRect, getShapeRenderData, getShapeSvg, getTokenPropertyScope, getTokensForProperty, handlePoint, hasVisibleStroke, inferResizeHandle, inspectNodeTokens, intersectPaths, intersectPolygons, invertNodeUpdates, isAutoLayoutFrame, isEventFromTextInput, isLocked, isMeasureModifierHeld, isShapeDescription, isShapeNode, isStraightCubic, isValidCanvasNode, isValidUrl, layoutAll, layoutBounds, layoutFrame, layoutUp, layoutUpMany, linearPositionTrajectory, linearTrajectory, lockNodes, makeSizingCoherent, matchArrangeShortcut, matchSize, measureBetween, measureLabel, measureSelection, measureToLine, mergeNodeUpdates, moveLayoutChild, multiPolygonArea, multiPolygonBounds, nearestHandlePositions, normalizeBezierPath, offsetPath, offsetShapeNodes, oppositePosition, outlineShapeNodeStrokes, outlineStroke, overlaps, parseCanvasClipboardData, parseCanvasScenes, parseSvgPath, pathBoolean, placeBeside, pointInBezierPath, pointInMultiPolygon, pointInRings, polygonArea, polygonBoolean, polygonToSvgPath, positionToSide, pruneCanvasTokenModes, readNodeStyleProperty, readStyleSize, realClock, relayoutUpdates, remapPastedNodes, reorderNodes, repositionNodesTo, resizeHandleAxes, resolveCanvasTokens, resolvePadding, revertShapeCombination, ringSignedArea, runMultiNodeTransition, serializeCanvasNodes, setCanvasTokenMode, shapeNodeToBezierPath, shapeNodeToPolygon, shapeToBezierPath, shapeToPolygon, sideToPosition, simplifyRing, snapNodeDrag, snapNodeResize, snapResize, snapToGrid, strokeOutlineRings, subtractPaths, subtractPolygons, toBezierPath, toggleLockNodes, transformBezierPath, unionPolygons, unitePaths, unlockNodes, withStyleSize, writeNodeStyleProperty, xorPolygons } from '@pixerate/editor/canvas';
7
+ import { TokenState, TokenStore, TokenModeContext } from '@pixerate/editor/tokens';
7
8
 
8
9
  interface AgentPresenceLayerProps {
9
10
  presences: AgentPresence[];
@@ -197,6 +198,10 @@ declare function useCanvasArrange<TNode extends CanvasNode = CanvasNode>(options
197
198
  exclude: (ids?: Iterable<string>, o?: _pixerate_editor_canvas.CombineShapeNodesOptions) => _pixerate_editor_canvas.CombineShapeNodesResult<TNode>;
198
199
  divide: (ids?: Iterable<string>, o?: _pixerate_editor_canvas.CombineShapeNodesOptions) => _pixerate_editor_canvas.CombineShapeNodesResult<TNode>;
199
200
  canCombineShapes: (ids?: Iterable<string>) => boolean;
201
+ offsetShapes(distance: number, ids?: Iterable<string>, offsetOptions?: _pixerate_editor_canvas.OffsetShapeNodesOptions): _pixerate_editor_canvas.ShapePathEditResult<TNode>;
202
+ canOffsetShapes: (ids?: Iterable<string>) => boolean;
203
+ outlineStroke(ids?: Iterable<string>, outlineOptions?: _pixerate_editor_canvas.OutlineShapeStrokesOptions): _pixerate_editor_canvas.ShapePathEditResult<TNode>;
204
+ canOutlineStroke: (ids?: Iterable<string>) => boolean;
200
205
  runAction(action: CanvasArrangeAction): boolean;
201
206
  beginDrag(ids?: Iterable<string>): void;
202
207
  drag(ids?: Iterable<string>): _pixerate_editor_canvas.SnapNodeDragResult | null;
@@ -415,4 +420,62 @@ declare function useCanvasAutoLayout<TNode extends CanvasNode = CanvasNode>(opti
415
420
  };
416
421
  type CanvasAutoLayout = ReturnType<typeof useCanvasAutoLayout>;
417
422
 
418
- export { AgentPresenceLayer, type AgentPresenceLayerProps, type CanvasArrange, type CanvasAutoLayout, type CanvasGraphTarget, CanvasGuidesLayer, type CanvasGuidesLayerProps, type CanvasMeasure, type CanvasScenes, ShapeNode, type ShapeNodeProps, type UseCanvasArrangeOptions, type UseCanvasArrangeShortcutsOptions, type UseCanvasAutoLayoutOptions, type UseCanvasClipboardOptions, type UseCanvasDockingOptions, type UseCanvasGraphOptions, type UseCanvasLayoutOptions, type UseCanvasMeasureOptions, type UseCanvasScenesOptions, type UseCanvasShortcutsOptions, type UseStreamingCanvasOptions, useCanvasArrange, useCanvasArrangeShortcuts, useCanvasAutoLayout, useCanvasClipboard, useCanvasDocking, useCanvasExplosion, useCanvasGraph, useCanvasLayout, useCanvasMeasure, useCanvasScenes, useCanvasShortcuts, useStreamingCanvas };
423
+ interface UseCanvasTokensOptions<TNode extends CanvasNode> extends Omit<CanvasTokenOptions, 'modes'> {
424
+ store: TokenStore;
425
+ nodes: TNode[];
426
+ setNodes: (update: TNode[] | ((nodes: TNode[]) => TNode[])) => void;
427
+ /** Modes for nodes without an explicit mode up their tree (e.g. the page's). */
428
+ modes?: TokenModeContext;
429
+ }
430
+ interface CanvasTokens {
431
+ state: TokenState;
432
+ /** Binds (or with `null` unbinds) a property of the nodes; throws `TokenError` when refused. */
433
+ bind: (ids: Iterable<string>, propertyKey: string, variableId: string | null) => void;
434
+ /** Sets (or with `null` clears) an explicit mode on frames / groups; descendants follow. */
435
+ setMode: (ids: Iterable<string>, collectionId: string, modeId: string | null) => void;
436
+ /** The modes a node is in (its own, inherited, then the root `modes`). */
437
+ modesOf: (nodeId: string) => Record<string, string>;
438
+ }
439
+ /**
440
+ * Keeps token-bound node properties resolved: whenever the token store, the nodes or the root
441
+ * modes change, bound values are written into the nodes (only when something changed, so it
442
+ * does not loop). Deleting a variable detaches the nodes bound to it, keeping their values.
443
+ */
444
+ declare function useCanvasTokens<TNode extends CanvasNode>(options: UseCanvasTokensOptions<TNode>): CanvasTokens;
445
+
446
+ interface TokenBindingPickerProps<TNode extends CanvasNode = CanvasNode> {
447
+ state: TokenState;
448
+ nodes: TNode[];
449
+ /** Nodes to bind (the first one decides which properties are listed). */
450
+ selectedIds: readonly string[];
451
+ /** Receives the nodes with the binding applied and resolved. */
452
+ onChange: (nodes: TNode[]) => void;
453
+ options?: CanvasTokenOptions;
454
+ /** Limit to these property keys (in this order). */
455
+ properties?: readonly string[];
456
+ onError?: (error: Error) => void;
457
+ className?: string;
458
+ }
459
+ /**
460
+ * Inspector rows that bind node properties (fill, stroke, opacity, radius, gap, padding, text
461
+ * colour / size, …) to variables of the right type and scope, showing each resolved value.
462
+ */
463
+ declare function TokenBindingPicker<TNode extends CanvasNode = CanvasNode>({ state, nodes, selectedIds, onChange, options, properties, onError, className, }: TokenBindingPickerProps<TNode>): React__default.JSX.Element | null;
464
+ interface TokenModeSwitcherProps<TNode extends CanvasNode = CanvasNode> {
465
+ state: TokenState;
466
+ nodes: TNode[];
467
+ /** Frames / groups whose explicit mode is set (the first one's choice is shown). */
468
+ nodeIds: readonly string[];
469
+ onChange: (nodes: TNode[]) => void;
470
+ options?: CanvasTokenOptions;
471
+ /** Show collections with a single mode too (default `false`). */
472
+ showSingleMode?: boolean;
473
+ className?: string;
474
+ }
475
+ /**
476
+ * Per-collection mode pickers for the selected frames: "Auto" (inherit from the parent, then
477
+ * the root modes, then the default mode) or an explicit mode that descendants inherit.
478
+ */
479
+ declare function TokenModeSwitcher<TNode extends CanvasNode = CanvasNode>({ state, nodes, nodeIds, onChange, options, showSingleMode, className, }: TokenModeSwitcherProps<TNode>): React__default.JSX.Element | null;
480
+
481
+ export { AgentPresenceLayer, type AgentPresenceLayerProps, type CanvasArrange, type CanvasAutoLayout, type CanvasGraphTarget, CanvasGuidesLayer, type CanvasGuidesLayerProps, type CanvasMeasure, type CanvasScenes, type CanvasTokens, ShapeNode, type ShapeNodeProps, TokenBindingPicker, type TokenBindingPickerProps, TokenModeSwitcher, type TokenModeSwitcherProps, type UseCanvasArrangeOptions, type UseCanvasArrangeShortcutsOptions, type UseCanvasAutoLayoutOptions, type UseCanvasClipboardOptions, type UseCanvasDockingOptions, type UseCanvasGraphOptions, type UseCanvasLayoutOptions, type UseCanvasMeasureOptions, type UseCanvasScenesOptions, type UseCanvasShortcutsOptions, type UseCanvasTokensOptions, type UseStreamingCanvasOptions, useCanvasArrange, useCanvasArrangeShortcuts, useCanvasAutoLayout, useCanvasClipboard, useCanvasDocking, useCanvasExplosion, useCanvasGraph, useCanvasLayout, useCanvasMeasure, useCanvasScenes, useCanvasShortcuts, useCanvasTokens, useStreamingCanvas };
@@ -1171,6 +1171,38 @@ import {
1171
1171
  pointInRings,
1172
1172
  pointInMultiPolygon
1173
1173
  } from "@pixerate/editor/canvas";
1174
+ import {
1175
+ offsetShapeNodes,
1176
+ outlineShapeNodeStrokes,
1177
+ canOffsetShapeNodes,
1178
+ canOutlineShapeNodeStrokes,
1179
+ applyShapeReplacement,
1180
+ hasVisibleStroke,
1181
+ shapeToBezierPath,
1182
+ shapeNodeToBezierPath,
1183
+ pathBoolean,
1184
+ unitePaths,
1185
+ intersectPaths,
1186
+ subtractPaths,
1187
+ excludePaths,
1188
+ dividePaths,
1189
+ normalizeBezierPath,
1190
+ bezierPathArea,
1191
+ offsetPath,
1192
+ outlineStroke,
1193
+ strokeOutlineRings,
1194
+ dashContours,
1195
+ toBezierPath,
1196
+ bezierPathToSvg,
1197
+ transformBezierPath,
1198
+ bezierPathBounds,
1199
+ bezierPathSignedArea,
1200
+ bezierPathLength,
1201
+ bezierPathPointAtLength,
1202
+ pointInBezierPath,
1203
+ distanceToBezierPath,
1204
+ countPathSegments
1205
+ } from "@pixerate/editor/canvas";
1174
1206
  import {
1175
1207
  getLayoutedNodes as getLayoutedNodes2,
1176
1208
  ensureLayout as ensureLayout2,
@@ -1283,9 +1315,204 @@ function useCanvasAutoLayout(options) {
1283
1315
  [controller, guides]
1284
1316
  );
1285
1317
  }
1318
+
1319
+ // src/canvas/useCanvasTokens.ts
1320
+ import { useCallback as useCallback8, useEffect as useEffect5, useRef as useRef9, useSyncExternalStore as useSyncExternalStore2 } from "react";
1321
+ import {
1322
+ bindCanvasToken,
1323
+ detachTokenBindings,
1324
+ getEffectiveTokenModes,
1325
+ resolveCanvasTokens,
1326
+ setCanvasTokenMode
1327
+ } from "@pixerate/editor/canvas";
1328
+ function useCanvasTokens(options) {
1329
+ const { store, nodes, setNodes, modes, properties } = options;
1330
+ const state = useSyncExternalStore2(store.subscribe, store.getState, store.getState);
1331
+ const latest = useRef9({ nodes, setNodes, modes, properties });
1332
+ latest.current = { nodes, setNodes, modes, properties };
1333
+ const opts = () => ({ modes: latest.current.modes, properties: latest.current.properties });
1334
+ useEffect5(
1335
+ () => store.subscribe((event) => {
1336
+ if (event.deletedVariableIds.length === 0) return;
1337
+ latest.current.setNodes((prev) => detachTokenBindings(prev, event.previous, event.deletedVariableIds, opts()));
1338
+ }),
1339
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1340
+ [store]
1341
+ );
1342
+ const modesKey = JSON.stringify(modes ?? {});
1343
+ useEffect5(() => {
1344
+ const next = resolveCanvasTokens(nodes, state, opts());
1345
+ if (next !== nodes) setNodes(next);
1346
+ }, [nodes, state, modesKey, properties]);
1347
+ const bind = useCallback8(
1348
+ (ids, propertyKey, variableId) => {
1349
+ const next = bindCanvasToken(latest.current.nodes, ids, propertyKey, variableId, store.getState(), opts());
1350
+ if (next !== latest.current.nodes) latest.current.setNodes(next);
1351
+ },
1352
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1353
+ [store]
1354
+ );
1355
+ const setMode = useCallback8(
1356
+ (ids, collectionId, modeId) => {
1357
+ const next = setCanvasTokenMode(latest.current.nodes, ids, collectionId, modeId, store.getState(), opts());
1358
+ if (next !== latest.current.nodes) latest.current.setNodes(next);
1359
+ },
1360
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1361
+ [store]
1362
+ );
1363
+ const modesOf = useCallback8(
1364
+ (nodeId) => {
1365
+ const node = latest.current.nodes.find((n) => n.id === nodeId);
1366
+ return node ? getEffectiveTokenModes(node, latest.current.nodes, store.getState(), opts()) : {};
1367
+ },
1368
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1369
+ [store]
1370
+ );
1371
+ return { state, bind, setMode, modesOf };
1372
+ }
1373
+
1374
+ // src/canvas/TokenBindingPicker.tsx
1375
+ import {
1376
+ bindCanvasToken as bindCanvasToken2,
1377
+ getBindableTokenProperties,
1378
+ getEffectiveTokenModes as getEffectiveTokenModes2,
1379
+ getNodeTokenBindings,
1380
+ getNodeTokenModes,
1381
+ setCanvasTokenMode as setCanvasTokenMode2,
1382
+ getTokensForProperty
1383
+ } from "@pixerate/editor/canvas";
1384
+ import { getCurrentMode, resolveToken } from "@pixerate/editor/tokens";
1385
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
1386
+ function TokenBindingPicker({
1387
+ state,
1388
+ nodes,
1389
+ selectedIds,
1390
+ onChange,
1391
+ options = {},
1392
+ properties,
1393
+ onError,
1394
+ className = ""
1395
+ }) {
1396
+ const selected = nodes.filter((n) => selectedIds.includes(n.id));
1397
+ const first = selected[0];
1398
+ if (!first) return null;
1399
+ let rows = getBindableTokenProperties(first, options);
1400
+ if (properties) rows = properties.map((key) => rows.find((p) => p.key === key)).filter((p) => !!p);
1401
+ const modes = getEffectiveTokenModes2(first, nodes, state, options);
1402
+ return /* @__PURE__ */ jsxs4("div", { "data-token-binding-picker": "", className: `flex flex-col gap-1 text-xs text-foreground ${className}`, children: [
1403
+ rows.map((property) => {
1404
+ const ids = new Set(selected.map((n) => getNodeTokenBindings(n)[property.key] ?? ""));
1405
+ const value = ids.size === 1 ? [...ids][0] : "__mixed";
1406
+ const candidates = getTokensForProperty(state, property, first);
1407
+ const resolved = value && value !== "__mixed" ? resolveToken(state, value, modes) : null;
1408
+ return /* @__PURE__ */ jsxs4("label", { className: "flex items-center gap-2", "data-token-property": property.key, children: [
1409
+ /* @__PURE__ */ jsx4("span", { className: "w-28 shrink-0 text-muted-foreground", children: property.label }),
1410
+ /* @__PURE__ */ jsxs4(
1411
+ "select",
1412
+ {
1413
+ "aria-label": `${property.label} variable`,
1414
+ className: "min-w-0 flex-1 rounded border border-border bg-background px-1 py-0.5 text-xs",
1415
+ value,
1416
+ onChange: (e) => {
1417
+ const id = e.currentTarget.value || null;
1418
+ try {
1419
+ onChange(bindCanvasToken2(nodes, selectedIds, property.key, id, state, options));
1420
+ } catch (error) {
1421
+ onError?.(error);
1422
+ }
1423
+ },
1424
+ children: [
1425
+ value === "__mixed" ? /* @__PURE__ */ jsx4("option", { value: "__mixed", children: "Mixed" }) : null,
1426
+ /* @__PURE__ */ jsx4("option", { value: "", children: "None" }),
1427
+ candidates.map((v) => {
1428
+ const collection = state.collections.find((c) => c.id === v.collectionId);
1429
+ return /* @__PURE__ */ jsxs4("option", { value: v.id, children: [
1430
+ v.name,
1431
+ collection && state.collections.length > 1 ? ` (${collection.name})` : ""
1432
+ ] }, v.id);
1433
+ })
1434
+ ]
1435
+ }
1436
+ ),
1437
+ /* @__PURE__ */ jsx4("span", { className: "w-16 shrink-0 truncate text-right text-muted-foreground", "data-token-resolved": "", children: resolved?.ok ? property.type === "color" ? /* @__PURE__ */ jsx4(
1438
+ "span",
1439
+ {
1440
+ className: "inline-block h-3 w-3 rounded border border-border align-middle",
1441
+ style: { background: String(resolved.value) },
1442
+ title: String(resolved.value)
1443
+ }
1444
+ ) : String(resolved.value) : resolved ? /* @__PURE__ */ jsx4("span", { title: resolved.message, children: "\u26A0" }) : null })
1445
+ ] }, property.key);
1446
+ }),
1447
+ state.collections.length === 0 ? /* @__PURE__ */ jsx4("p", { className: "text-muted-foreground", children: "No variables yet." }) : null
1448
+ ] });
1449
+ }
1450
+ function TokenModeSwitcher({
1451
+ state,
1452
+ nodes,
1453
+ nodeIds,
1454
+ onChange,
1455
+ options = {},
1456
+ showSingleMode = false,
1457
+ className = ""
1458
+ }) {
1459
+ const first = nodes.find((n) => nodeIds.includes(n.id));
1460
+ if (!first) return null;
1461
+ const own = getNodeTokenModes(first);
1462
+ const parent = first.parentId ? nodes.find((n) => n.id === first.parentId) : void 0;
1463
+ const inherited = parent ? getEffectiveTokenModes2(parent, nodes, state, options) : { ...options.modes };
1464
+ const collections = state.collections.filter((c) => showSingleMode || c.modes.length > 1);
1465
+ return /* @__PURE__ */ jsx4("div", { "data-token-mode-switcher": "", className: `flex flex-col gap-1 text-xs text-foreground ${className}`, children: collections.map((collection) => {
1466
+ const auto = getCurrentMode(collection, inherited);
1467
+ const explicit = collection.modes.some((m) => m.id === own[collection.id]) ? own[collection.id] : "";
1468
+ return /* @__PURE__ */ jsxs4("label", { className: "flex items-center gap-2", "data-token-collection": collection.id, children: [
1469
+ /* @__PURE__ */ jsx4("span", { className: "w-28 shrink-0 truncate text-muted-foreground", children: collection.name }),
1470
+ /* @__PURE__ */ jsxs4(
1471
+ "select",
1472
+ {
1473
+ "aria-label": `${collection.name} mode`,
1474
+ className: "min-w-0 flex-1 rounded border border-border bg-background px-1 py-0.5 text-xs",
1475
+ value: explicit,
1476
+ onChange: (e) => onChange(setCanvasTokenMode2(nodes, nodeIds, collection.id, e.currentTarget.value || null, state, options)),
1477
+ children: [
1478
+ /* @__PURE__ */ jsxs4("option", { value: "", children: [
1479
+ "Auto (",
1480
+ auto.name,
1481
+ ")"
1482
+ ] }),
1483
+ collection.modes.map((m) => /* @__PURE__ */ jsx4("option", { value: m.id, children: m.name }, m.id))
1484
+ ]
1485
+ }
1486
+ )
1487
+ ] }, collection.id);
1488
+ }) });
1489
+ }
1490
+
1491
+ // src/canvas/index.ts
1492
+ import {
1493
+ bindCanvasToken as bindCanvasToken3,
1494
+ setCanvasTokenMode as setCanvasTokenMode3,
1495
+ resolveCanvasTokens as resolveCanvasTokens2,
1496
+ detachTokenBindings as detachTokenBindings2,
1497
+ pruneCanvasTokenModes,
1498
+ inspectNodeTokens,
1499
+ getNodeTokenBindings as getNodeTokenBindings2,
1500
+ getNodeTokenModes as getNodeTokenModes2,
1501
+ getEffectiveTokenModes as getEffectiveTokenModes3,
1502
+ getBindableTokenProperties as getBindableTokenProperties2,
1503
+ getCanvasTokenProperty,
1504
+ getTokenPropertyScope,
1505
+ getTokensForProperty as getTokensForProperty2,
1506
+ readNodeStyleProperty,
1507
+ writeNodeStyleProperty,
1508
+ CANVAS_TOKEN_PROPERTIES,
1509
+ TOKEN_BINDINGS_DATA_KEY,
1510
+ TOKEN_MODES_DATA_KEY
1511
+ } from "@pixerate/editor/canvas";
1286
1512
  export {
1287
1513
  AUTO_LAYOUT_DATA_KEY,
1288
1514
  AgentPresenceLayer,
1515
+ CANVAS_TOKEN_PROPERTIES,
1289
1516
  CHILD_LAYOUT_DATA_KEY,
1290
1517
  CONNECTION_LINE_TYPES,
1291
1518
  CanvasGuidesLayer,
@@ -1298,15 +1525,29 @@ export {
1298
1525
  SHAPE_NODE_TYPE,
1299
1526
  SHAPE_OPERATIONS,
1300
1527
  ShapeNode,
1528
+ TOKEN_BINDINGS_DATA_KEY,
1529
+ TOKEN_MODES_DATA_KEY,
1530
+ TokenBindingPicker,
1531
+ TokenModeSwitcher,
1301
1532
  alignNodes,
1302
1533
  applyConstraints,
1303
1534
  applyNodeUpdates,
1304
1535
  applyShapeCombination,
1536
+ applyShapeReplacement,
1537
+ bezierPathArea,
1538
+ bezierPathBounds,
1539
+ bezierPathLength,
1540
+ bezierPathPointAtLength,
1541
+ bezierPathSignedArea,
1542
+ bezierPathToSvg,
1543
+ bindCanvasToken3 as bindCanvasToken,
1305
1544
  blendLayout,
1306
1545
  boundsOf,
1307
1546
  calculateDagreReflowDisplacement,
1308
1547
  calculateDirectionalDisplacement2 as calculateDirectionalDisplacement,
1309
1548
  canCombineShapeNodes,
1549
+ canOffsetShapeNodes,
1550
+ canOutlineShapeNodeStrokes,
1310
1551
  canvasHeight,
1311
1552
  centerNodes2 as centerNodes,
1312
1553
  centre,
@@ -1315,6 +1556,7 @@ export {
1315
1556
  computeNodesBoundingBox,
1316
1557
  computeSnapGuides,
1317
1558
  connectedOnly,
1559
+ countPathSegments,
1318
1560
  createBezierTrajectory,
1319
1561
  createCanvasAutoLayoutController2 as createCanvasAutoLayoutController,
1320
1562
  createCanvasScenesStore,
@@ -1323,12 +1565,17 @@ export {
1323
1565
  createNodeGuideIndex,
1324
1566
  cubicPointAt,
1325
1567
  cubicsToPathData,
1568
+ dashContours,
1326
1569
  defaultEasing,
1570
+ detachTokenBindings2 as detachTokenBindings,
1571
+ distanceToBezierPath,
1327
1572
  distributeNodes,
1573
+ dividePaths,
1328
1574
  dividePolygons,
1329
1575
  ensureLayout2 as ensureLayout,
1330
1576
  estimateCanvasHeight,
1331
1577
  estimateNodeSize,
1578
+ excludePaths,
1332
1579
  findConnectorSnap,
1333
1580
  fitCubicRun,
1334
1581
  fitCubics,
@@ -1342,8 +1589,11 @@ export {
1342
1589
  getAutoLayout,
1343
1590
  getAutoLayoutGrid,
1344
1591
  getAutoLayoutInsertTarget,
1592
+ getBindableTokenProperties2 as getBindableTokenProperties,
1593
+ getCanvasTokenProperty,
1345
1594
  getCenteredNodePosition2 as getCenteredNodePosition,
1346
1595
  getChildLayout,
1596
+ getEffectiveTokenModes3 as getEffectiveTokenModes,
1347
1597
  getFlowChildren,
1348
1598
  getLayoutParent,
1349
1599
  getLayoutSizing,
@@ -1351,11 +1601,18 @@ export {
1351
1601
  getNodeRect,
1352
1602
  getNodeShape,
1353
1603
  getNodeSize,
1604
+ getNodeTokenBindings2 as getNodeTokenBindings,
1605
+ getNodeTokenModes2 as getNodeTokenModes,
1354
1606
  getResizingNodeRect,
1355
1607
  getShapeRenderData2 as getShapeRenderData,
1356
1608
  getShapeSvg,
1609
+ getTokenPropertyScope,
1610
+ getTokensForProperty2 as getTokensForProperty,
1357
1611
  handlePoint,
1612
+ hasVisibleStroke,
1358
1613
  inferResizeHandle,
1614
+ inspectNodeTokens,
1615
+ intersectPaths,
1359
1616
  intersectPolygons,
1360
1617
  invertNodeUpdates,
1361
1618
  isAutoLayoutFrame,
@@ -1387,18 +1644,27 @@ export {
1387
1644
  multiPolygonArea,
1388
1645
  multiPolygonBounds,
1389
1646
  nearestHandlePositions,
1647
+ normalizeBezierPath,
1648
+ offsetPath,
1649
+ offsetShapeNodes,
1390
1650
  oppositePosition,
1651
+ outlineShapeNodeStrokes,
1652
+ outlineStroke,
1391
1653
  overlaps,
1392
1654
  parseCanvasClipboardData2 as parseCanvasClipboardData,
1393
1655
  parseCanvasScenes,
1394
1656
  parseSvgPath,
1657
+ pathBoolean,
1395
1658
  placeBeside2 as placeBeside,
1659
+ pointInBezierPath,
1396
1660
  pointInMultiPolygon,
1397
1661
  pointInRings,
1398
1662
  polygonArea,
1399
1663
  polygonBoolean,
1400
1664
  polygonToSvgPath,
1401
1665
  positionToSide,
1666
+ pruneCanvasTokenModes,
1667
+ readNodeStyleProperty,
1402
1668
  readStyleSize,
1403
1669
  realClock,
1404
1670
  relayoutUpdates,
@@ -1406,12 +1672,16 @@ export {
1406
1672
  reorderNodes,
1407
1673
  repositionNodesTo,
1408
1674
  resizeHandleAxes,
1675
+ resolveCanvasTokens2 as resolveCanvasTokens,
1409
1676
  resolvePadding,
1410
1677
  revertShapeCombination,
1411
1678
  ringSignedArea,
1412
1679
  runMultiNodeTransition2 as runMultiNodeTransition,
1413
1680
  serializeCanvasNodes2 as serializeCanvasNodes,
1681
+ setCanvasTokenMode3 as setCanvasTokenMode,
1682
+ shapeNodeToBezierPath,
1414
1683
  shapeNodeToPolygon,
1684
+ shapeToBezierPath,
1415
1685
  shapeToPolygon,
1416
1686
  sideToPosition,
1417
1687
  simplifyRing,
@@ -1419,9 +1689,14 @@ export {
1419
1689
  snapNodeResize,
1420
1690
  snapResize,
1421
1691
  snapToGrid,
1692
+ strokeOutlineRings,
1693
+ subtractPaths,
1422
1694
  subtractPolygons,
1695
+ toBezierPath,
1423
1696
  toggleLockNodes,
1697
+ transformBezierPath,
1424
1698
  unionPolygons,
1699
+ unitePaths,
1425
1700
  unlockNodes,
1426
1701
  useCanvasArrange,
1427
1702
  useCanvasArrangeShortcuts,
@@ -1434,8 +1709,10 @@ export {
1434
1709
  useCanvasMeasure,
1435
1710
  useCanvasScenes,
1436
1711
  useCanvasShortcuts,
1712
+ useCanvasTokens,
1437
1713
  useStreamingCanvas,
1438
1714
  withStyleSize,
1715
+ writeNodeStyleProperty,
1439
1716
  xorPolygons
1440
1717
  };
1441
1718
  //# sourceMappingURL=index.js.map