@pixerate/editor 0.141.0 → 0.143.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 (75) hide show
  1. package/dist/agent/index.cjs +107 -48
  2. package/dist/agent/index.js +76 -17
  3. package/dist/agent/planner.d.cts +7 -2
  4. package/dist/agent/planner.d.ts +7 -2
  5. package/dist/agent/providers.d.cts +4 -1
  6. package/dist/agent/providers.d.ts +4 -1
  7. package/dist/animation-editor/index.cjs +69 -19
  8. package/dist/animation-editor/index.d.cts +1 -0
  9. package/dist/animation-editor/index.d.ts +1 -0
  10. package/dist/animation-editor/index.js +54 -4
  11. package/dist/animation-editor/playback.d.cts +10 -0
  12. package/dist/animation-editor/playback.d.ts +10 -0
  13. package/dist/canvas/index.cjs +103 -101
  14. package/dist/canvas/index.js +3 -1
  15. package/dist/canvas/layout.d.cts +15 -2
  16. package/dist/canvas/layout.d.ts +15 -2
  17. package/dist/chart/index.cjs +254 -170
  18. package/dist/chart/index.d.cts +1 -0
  19. package/dist/chart/index.d.ts +1 -0
  20. package/dist/chart/index.js +243 -159
  21. package/dist/chart/playback.d.cts +22 -0
  22. package/dist/chart/playback.d.ts +22 -0
  23. package/dist/{chunk-MFFE55CS.js → chunk-54GVEVXS.js} +6 -4
  24. package/dist/{chunk-E747F3D5.js → chunk-CC6WKVIH.js} +86 -5
  25. package/dist/{chunk-UBRYHNRU.cjs → chunk-EL4PSKFT.cjs} +46 -4
  26. package/dist/{chunk-VTY64I6H.cjs → chunk-QSM3MDDJ.cjs} +85 -85
  27. package/dist/{chunk-2RUNJYOX.cjs → chunk-QZFEX2N4.cjs} +86 -5
  28. package/dist/{chunk-DW4CV5H4.js → chunk-U4VE4UI2.js} +45 -3
  29. package/dist/{chunk-LMSFXRAJ.js → chunk-VGJTUCWM.js} +1 -1
  30. package/dist/{chunk-6SFREX6H.cjs → chunk-X2HQP7DF.cjs} +6 -4
  31. package/dist/chunk-XH32BATE.cjs +68 -0
  32. package/dist/chunk-Y6SGC6KO.js +68 -0
  33. package/dist/commands/index.cjs +2 -2
  34. package/dist/commands/index.js +1 -1
  35. package/dist/index.cjs +7 -3
  36. package/dist/index.js +6 -2
  37. package/dist/paint-editor/index.cjs +67 -19
  38. package/dist/paint-editor/index.d.cts +1 -0
  39. package/dist/paint-editor/index.d.ts +1 -0
  40. package/dist/paint-editor/index.js +67 -19
  41. package/dist/paint-editor/playback.d.cts +16 -0
  42. package/dist/paint-editor/playback.d.ts +16 -0
  43. package/dist/parameters/index.cjs +32 -8
  44. package/dist/parameters/index.d.cts +1 -0
  45. package/dist/parameters/index.d.ts +1 -0
  46. package/dist/parameters/index.js +28 -4
  47. package/dist/parameters/playback.d.cts +10 -0
  48. package/dist/parameters/playback.d.ts +10 -0
  49. package/dist/spreadsheet/index.cjs +7 -3
  50. package/dist/spreadsheet/index.d.cts +1 -0
  51. package/dist/spreadsheet/index.d.ts +1 -0
  52. package/dist/spreadsheet/index.js +6 -2
  53. package/dist/spreadsheet/playback.d.cts +15 -0
  54. package/dist/spreadsheet/playback.d.ts +15 -0
  55. package/dist/tools/index.cjs +10 -3
  56. package/dist/tools/index.d.cts +1 -0
  57. package/dist/tools/index.d.ts +1 -0
  58. package/dist/tools/index.js +9 -2
  59. package/dist/tools/script.d.cts +77 -0
  60. package/dist/tools/script.d.ts +77 -0
  61. package/dist/video-editor/index.cjs +81 -28
  62. package/dist/video-editor/index.d.cts +1 -0
  63. package/dist/video-editor/index.d.ts +1 -0
  64. package/dist/video-editor/index.js +58 -5
  65. package/dist/video-editor/playback.d.cts +20 -0
  66. package/dist/video-editor/playback.d.ts +20 -0
  67. package/package.json +1 -1
  68. package/skills/pixerate-animation-editor/SKILL.md +1 -0
  69. package/skills/pixerate-chart/SKILL.md +1 -0
  70. package/skills/pixerate-paint-editor/SKILL.md +1 -0
  71. package/skills/pixerate-parameters/SKILL.md +1 -0
  72. package/skills/pixerate-spreadsheet/SKILL.md +1 -0
  73. package/skills/pixerate-video-editor/SKILL.md +1 -0
  74. package/dist/chunk-PLKIYNJZ.js +0 -0
  75. package/dist/chunk-TNCWKC5M.cjs +0 -1
package/dist/index.js CHANGED
@@ -448,7 +448,7 @@ import {
448
448
  validateCellInput,
449
449
  validateDefinedName,
450
450
  validateSheetName
451
- } from "./chunk-LMSFXRAJ.js";
451
+ } from "./chunk-VGJTUCWM.js";
452
452
  import {
453
453
  FormulaEvaluator,
454
454
  FormulaLambda,
@@ -477,6 +477,8 @@ import {
477
477
  parseCriteria,
478
478
  parseFormula,
479
479
  parseRange,
480
+ parseSpreadsheetPlaybackRef,
481
+ planSpreadsheetToolPlayback,
480
482
  rangeContains,
481
483
  rangeContainsRange,
482
484
  rangesIntersect,
@@ -487,7 +489,7 @@ import {
487
489
  tokenizeFormula,
488
490
  unregisterFormulaFunction,
489
491
  wildcardToRegExp
490
- } from "./chunk-E747F3D5.js";
492
+ } from "./chunk-CC6WKVIH.js";
491
493
  import {
492
494
  FORMULA_ERRORS,
493
495
  MAX_NUMBER_FORMAT_CODE_CHARS,
@@ -2696,6 +2698,7 @@ export {
2696
2698
  parseReplacement,
2697
2699
  parseRichClipboardPayload,
2698
2700
  parseRuleRanges,
2701
+ parseSpreadsheetPlaybackRef,
2699
2702
  parseTsv,
2700
2703
  parseVariableBody,
2701
2704
  pdfLayoutBlocksToHtml,
@@ -2707,6 +2710,7 @@ export {
2707
2710
  plainTextToParagraphHtml,
2708
2711
  plainTextToSlice,
2709
2712
  plainTextToTipTapHtml,
2713
+ planSpreadsheetToolPlayback,
2710
2714
  preprocessMarkdownFileLinks,
2711
2715
  preprocessMarkdownMentions,
2712
2716
  quoteSheetName,
@@ -6051,6 +6051,51 @@ var PaintDirector = class {
6051
6051
  }
6052
6052
  };
6053
6053
 
6054
+ // src/paint-editor/playback.ts
6055
+ var WET = /^(advance_wet_paint|dry_paint|wet_paper|set_wet_settings|set_flow_map|set_canvas_tilt|pause_wet_paint|set_wet_engine|set_water_overlay)$/;
6056
+ var PAPER = /^(set_paper|set_lighting|flatten_relief|set_instant_dry)$/;
6057
+ var LAYERS = /^(add_layer|update_layer|set_active_layer|remove_layer|duplicate_layer|move_layer|merge_layer_down|clear_layer|update_sticker|arrange_stickers|remove_stickers)$/;
6058
+ var PAD = /^(mixing_pad_stroke|pick_mixing_pad_color|clear_mixing_pad|mix_on_pad|save_mixing_pad|load_mixing_pad|remove_mixing_pad|mix_colors)$/;
6059
+ var COLOR = /^(set_color|set_paint|color_harmony|add_swatch|remove_swatch|load_mixer_brush|clean_mixer_brush)$/;
6060
+ var EFFECTS = /effect/;
6061
+ function paintPlaybackPanel(tool) {
6062
+ if (WET.test(tool)) return "wet";
6063
+ if (PAPER.test(tool)) return "paper";
6064
+ if (LAYERS.test(tool)) return "layers";
6065
+ if (PAD.test(tool) || COLOR.test(tool)) return "color";
6066
+ if (EFFECTS.test(tool)) return "effects";
6067
+ return null;
6068
+ }
6069
+ function controlOf(tool) {
6070
+ if (PAD.test(tool)) return { kind: "control", id: "mixing-pad" };
6071
+ if (tool === "set_lighting" || tool === "flatten_relief") return { kind: "control", id: "lighting" };
6072
+ if (tool === "set_symmetry" || tool === "set_perspective_guide") return { kind: "control", id: "symmetry" };
6073
+ const panel = paintPlaybackPanel(tool);
6074
+ return panel ? { kind: "panel-body", id: panel } : null;
6075
+ }
6076
+ function planPaintToolPlayback(tool, _args) {
6077
+ const steps = [];
6078
+ const panel = paintPlaybackPanel(tool);
6079
+ if (panel) steps.push({ type: "open", ref: { kind: "panel", id: panel } });
6080
+ const control = controlOf(tool);
6081
+ if (control) steps.push({ type: "target", ref: control }, { type: "press" }, { type: "release" });
6082
+ return steps.length ? steps : null;
6083
+ }
6084
+ var DIRECTED = /* @__PURE__ */ new Set(["paint_stroke", "fill_layer", "replay_strokes"]);
6085
+ function withPaintPlayback(provider, options) {
6086
+ const plan = (tool) => {
6087
+ if (tool.plan || tool.playback !== void 0) return tool;
6088
+ if (options.director && DIRECTED.has(tool.name)) return { ...tool, playback: "self" };
6089
+ return { ...tool, plan: (args) => planPaintToolPlayback(tool.name, args) };
6090
+ };
6091
+ const tools = provider.tools;
6092
+ return {
6093
+ ...provider,
6094
+ playbackSurface: _nullishCoalesce(_nullishCoalesce(provider.playbackSurface, () => ( options.surface)), () => ( "paint")),
6095
+ tools: typeof tools === "function" ? () => tools().map(plan) : tools.map(plan)
6096
+ };
6097
+ }
6098
+
6054
6099
  // src/paint-editor/sticker-tools.ts
6055
6100
  var READ = { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false };
6056
6101
  var WRITE = { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false };
@@ -6123,7 +6168,7 @@ var WRITE2 = { readOnlyHint: false, destructiveHint: false, idempotentHint: fals
6123
6168
  var SET = { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false };
6124
6169
  var DESTRUCTIVE2 = { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false };
6125
6170
  var EMPTY = { type: "object", properties: {}, additionalProperties: false };
6126
- var COLOR = { type: "string", pattern: "^#[0-9a-fA-F]{6}$", description: "Colour #rrggbb." };
6171
+ var COLOR2 = { type: "string", pattern: "^#[0-9a-fA-F]{6}$", description: "Colour #rrggbb." };
6127
6172
  var POINT = {
6128
6173
  type: "object",
6129
6174
  properties: { x: { type: "number", description: "x in document pixels." }, y: { type: "number", description: "y in document pixels." } },
@@ -6346,7 +6391,7 @@ function createPaintGuideTools(c) {
6346
6391
  type: "object",
6347
6392
  properties: {
6348
6393
  kind: { type: "string", enum: [...HARMONY_KINDS], description: "The harmony." },
6349
- color: { ...COLOR, description: "Base colour #rrggbb (default the paint colour)." },
6394
+ color: { ...COLOR2, description: "Base colour #rrggbb (default the paint colour)." },
6350
6395
  wheel: { type: "string", enum: ["ryb", "rgb"], description: "ryb (painter\u2019s wheel, default) or rgb." },
6351
6396
  spread: { type: "number", minimum: 5, maximum: 90, description: "Analogous and split-complementary spread in degrees (default 30)." }
6352
6397
  },
@@ -6371,7 +6416,7 @@ function createPaintGuideTools(c) {
6371
6416
  inputSchema: {
6372
6417
  type: "object",
6373
6418
  properties: {
6374
- color: { ...COLOR, description: "A colour #rrggbb." },
6419
+ color: { ...COLOR2, description: "A colour #rrggbb." },
6375
6420
  paint: { ..._chunkLRRCMRSLcjs.PAINT_SOURCE_JSON_SCHEMA, description: "Gradient paint (or a colour) for the swatch, instead of color." },
6376
6421
  name: { type: "string", minLength: 1, description: "Optional name." }
6377
6422
  },
@@ -6411,7 +6456,7 @@ function createPaintGuideTools(c) {
6411
6456
  }
6412
6457
  },
6413
6458
  tool: { type: "string", enum: ["paint", "knife"], description: "paint (default) or knife." },
6414
- color: { ...COLOR, description: "Paint colour (default the paint colour; ignored by the knife)." },
6459
+ color: { ...COLOR2, description: "Paint colour (default the paint colour; ignored by the knife)." },
6415
6460
  size: { type: "number", minimum: 1, maximum: 200, description: "Tool size in pad pixels (default 28 paint, 34 knife)." }
6416
6461
  },
6417
6462
  required: ["points"],
@@ -6464,7 +6509,7 @@ function createPaintGuideTools(c) {
6464
6509
  items: {
6465
6510
  type: "object",
6466
6511
  properties: {
6467
- color: { ...COLOR, description: "Paint colour #rrggbb." },
6512
+ color: { ...COLOR2, description: "Paint colour #rrggbb." },
6468
6513
  parts: { type: "number", minimum: 0, description: "Parts of this paint, any scale (1 and 3 for a 1:3 mix); at least one above 0." }
6469
6514
  },
6470
6515
  required: ["color", "parts"],
@@ -6871,7 +6916,7 @@ var WRITE5 = { readOnlyHint: false, destructiveHint: false, idempotentHint: fals
6871
6916
  var SET4 = { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false };
6872
6917
  var DESTRUCTIVE3 = { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false };
6873
6918
  var EMPTY3 = { type: "object", properties: {}, additionalProperties: false };
6874
- var COLOR2 = { type: "string", pattern: "^#[0-9a-fA-F]{6}$", description: 'Colour #rrggbb, e.g. "#2a4b8d".' };
6919
+ var COLOR3 = { type: "string", pattern: "^#[0-9a-fA-F]{6}$", description: 'Colour #rrggbb, e.g. "#2a4b8d".' };
6875
6920
  var LAYER_ID4 = { type: "string", description: "Layer id from list_layers (default the active layer)." };
6876
6921
  var TIP = {
6877
6922
  type: "object",
@@ -6940,7 +6985,7 @@ var BEHAVIOR = {
6940
6985
  description: "Multi-coloured brush (the older form of paint, the brush's own gradient: tip is across-tip, dab is distance in dabs or random). Read back from paint when it has a multi-colour equivalent. Missing fields keep their current values.",
6941
6986
  properties: {
6942
6987
  mode: { type: "string", enum: [..._chunkBXMIBMVGcjs.MULTI_COLOR_MODES], description: "off; tip: the colours lie side by side across the tip (stripes along the stroke, like a brush loaded with several paints); dab: the colour changes along the stroke." },
6943
- colors: { type: "array", maxItems: 8, items: { ...COLOR2 }, description: "2..8 colours #rrggbb; fewer than 2 uses the paint colour and the secondary colour." },
6988
+ colors: { type: "array", maxItems: 8, items: { ...COLOR3 }, description: "2..8 colours #rrggbb; fewer than 2 uses the paint colour and the secondary colour." },
6944
6989
  order: { type: "string", enum: ["sequence", "random"], description: "dab mode: sequence runs through the colours in order, blending between them; random picks one per run of dabs (seeded)." },
6945
6990
  length: { type: "integer", minimum: 1, maximum: 500, description: "dab mode: dabs per colour (default 12)." },
6946
6991
  softness: { type: "number", minimum: 0, maximum: 1, description: "How softly neighbouring colours blend: 0 hard stripes or steps, 1 a smooth gradient." }
@@ -7238,7 +7283,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7238
7283
  type: "object",
7239
7284
  properties: {
7240
7285
  preset: { type: "string", description: "Paper id from list_papers (its settings, then the other fields here on top)." },
7241
- color: { ...COLOR2, description: "Paper colour #rrggbb." },
7286
+ color: { ...COLOR3, description: "Paper colour #rrggbb." },
7242
7287
  depth: { type: "number", minimum: 0, maximum: 1, description: "Grain depth 0..1 (0: brushes ignore the grain)." },
7243
7288
  scale: { type: "number", minimum: 0.25, maximum: 8, description: "Grain scale: 1 natural, 2 twice as coarse." },
7244
7289
  seed: { type: "integer", minimum: 0, description: "Grain seed: another sheet of the same paper." },
@@ -7394,7 +7439,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7394
7439
  type: "object",
7395
7440
  properties: {
7396
7441
  layerId: LAYER_ID4,
7397
- color: { ...COLOR2, description: "Fill colour #rrggbb (default the paint colour)." },
7442
+ color: { ...COLOR3, description: "Fill colour #rrggbb (default the paint colour)." },
7398
7443
  opacity: { type: "number", minimum: 0, maximum: 1, description: "Opacity 0..1 (default 1)." },
7399
7444
  grain: { type: "number", minimum: 0, maximum: 1, description: "Paper grain response 0..1 (default 0: flat)." },
7400
7445
  pressure: { type: "number", minimum: 0, maximum: 1, description: "With grain: how far into the valleys, 0..1 (default 0.5)." },
@@ -7511,7 +7556,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7511
7556
  id: { type: "string", description: "Brush id from list_brushes (default the active brush)." },
7512
7557
  width: { type: "integer", minimum: 16, maximum: 512, description: "Width in pixels (default 160)." },
7513
7558
  height: { type: "integer", minimum: 16, maximum: 512, description: "Height in pixels (default 48)." },
7514
- color: { ...COLOR2, description: "Stroke colour (default the paint colour)." }
7559
+ color: { ...COLOR3, description: "Stroke colour (default the paint colour)." }
7515
7560
  },
7516
7561
  additionalProperties: false
7517
7562
  },
@@ -7532,7 +7577,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7532
7577
  description: "Sets the paint colour (and optionally the second colour) that strokes and fills use by default. Editor state, not an undo step. Returns both colours.",
7533
7578
  inputSchema: {
7534
7579
  type: "object",
7535
- properties: { color: { ...COLOR2, description: "Paint colour #rrggbb." }, secondaryColor: { ...COLOR2, description: "Second colour #rrggbb." } },
7580
+ properties: { color: { ...COLOR3, description: "Paint colour #rrggbb." }, secondaryColor: { ...COLOR3, description: "Second colour #rrggbb." } },
7536
7581
  additionalProperties: false
7537
7582
  },
7538
7583
  annotations: { title: "Set the paint colour", ...SET4 },
@@ -7584,7 +7629,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7584
7629
  name: "load_mixer_brush",
7585
7630
  title: "Load the Mixer Brush",
7586
7631
  description: "Fills the Mixer Brush reservoir with a colour (amount 1), keeping what it picked up. Editor state, not an undo step. Returns the load.",
7587
- inputSchema: { type: "object", properties: { color: { ...COLOR2, description: "Colour #rrggbb (default the paint colour)." } }, additionalProperties: false },
7632
+ inputSchema: { type: "object", properties: { color: { ...COLOR3, description: "Colour #rrggbb (default the paint colour)." } }, additionalProperties: false },
7588
7633
  annotations: { title: "Load the Mixer Brush", ...SET4 },
7589
7634
  handler: ({ color }) => loadResult(c.loadMixerBrush(color))
7590
7635
  });
@@ -7607,7 +7652,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7607
7652
  layerId: LAYER_ID4,
7608
7653
  brushId: { type: "string", description: "Brush id from list_brushes (default the active brush)." },
7609
7654
  brush: { type: "object", description: "Brush changes for this stroke only.", properties: BRUSH_FIELDS, additionalProperties: false },
7610
- color: { ...COLOR2, description: "Paint colour #rrggbb (default the paint colour)." },
7655
+ color: { ...COLOR3, description: "Paint colour #rrggbb (default the paint colour)." },
7611
7656
  paint: { ..._chunkLRRCMRSLcjs.PAINT_SOURCE_JSON_SCHEMA, description: "What this stroke paints with instead of the editor's paint: a colour, or gradient paint that changes colour as the stroke goes (by distance, pressure, tilt, speed, direction, time, across the tip or at random). Wins over the brush's own gradient." },
7612
7657
  seed: { type: "integer", minimum: 0, description: "Jitter seed (default a new one); the same seed and points give the same marks." },
7613
7658
  snapToPerspective: { type: "boolean", description: "Snap the points to the perspective guide, as a pen stroke would (default false)." }
@@ -7684,7 +7729,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7684
7729
  additionalProperties: false
7685
7730
  },
7686
7731
  pressureScale: { type: "number", minimum: 0, maximum: 4, description: "Multiply every pressure (default 1)." },
7687
- color: { ...COLOR2, description: "Recolour (default each stroke\u2019s colour)." },
7732
+ color: { ...COLOR3, description: "Recolour (default each stroke\u2019s colour)." },
7688
7733
  brushId: { type: "string", description: "Replay with this brush from list_brushes (default each stroke\u2019s brush)." },
7689
7734
  layerId: { type: "string", description: "Paint on this layer (default each stroke\u2019s layer)." },
7690
7735
  repeat: { type: "integer", minimum: 1, maximum: 100, description: "How many copies (default 1)." }
@@ -7829,14 +7874,14 @@ function createPaintEditorToolProvider(controller, options = {}) {
7829
7874
  tools.push(...createPaintReplayTools(c));
7830
7875
  tools.push(...createPaintStickerTools(c));
7831
7876
  tools.push(..._chunkGNK7SESQcjs.createPigmentTools.call(void 0, ));
7832
- return {
7877
+ return withPaintPlayback({
7833
7878
  id: _nullishCoalesce(options.id, () => ( "paint-editor")),
7834
7879
  namespace: options.namespace,
7835
7880
  title: "Paint editor",
7836
7881
  description: "Natural-media painting: paper and grain, dry and wet brushes, the brush library, strokes as data, pigment mixing, stencils, guides, layers and export.",
7837
7882
  skill: "pixerate-paint-editor",
7838
7883
  tools
7839
- };
7884
+ }, { director: !!options.director });
7840
7885
  }
7841
7886
 
7842
7887
  // src/paint-editor/ui.ts
@@ -8424,7 +8469,7 @@ function createPaintEffectsToolProvider(controller, options = {}) {
8424
8469
  if (changes.enabled !== void 0) throw new Error("enabled does not apply here: hide an effect layer with update_layer visible false, or remove the effect paper.");
8425
8470
  };
8426
8471
  const values = (v) => v;
8427
- return _chunkRUZQMYXHcjs.createEffectToolProvider.call(void 0, {
8472
+ return withPaintPlayback(_chunkRUZQMYXHcjs.createEffectToolProvider.call(void 0, {
8428
8473
  id: _nullishCoalesce(options.id, () => ( "paint-effects")),
8429
8474
  namespace: options.namespace,
8430
8475
  title: "Paint effects",
@@ -8554,7 +8599,7 @@ function createPaintEffectsToolProvider(controller, options = {}) {
8554
8599
  }
8555
8600
  }
8556
8601
  ]
8557
- });
8602
+ }), { director: false });
8558
8603
  }
8559
8604
 
8560
8605
 
@@ -8857,4 +8902,7 @@ function createPaintEffectsToolProvider(controller, options = {}) {
8857
8902
 
8858
8903
 
8859
8904
 
8860
- exports.BLEND_MENU_GROUPS = BLEND_MENU_GROUPS; exports.BLEND_MODES = _chunkCWM3CUUXcjs.BLEND_MODES; exports.BRUSH_ID = _chunkBXMIBMVGcjs.BRUSH_ID; exports.BRUSH_ROTATIONS = _chunkBXMIBMVGcjs.BRUSH_ROTATIONS; exports.BRUSH_SLIDERS = BRUSH_SLIDERS; exports.BUILTIN_BRUSHES = _chunkBXMIBMVGcjs.BUILTIN_BRUSHES; exports.BristleStroke = _chunkBXMIBMVGcjs.BristleStroke; exports.DEFAULT_BEHAVIOR = _chunkBXMIBMVGcjs.DEFAULT_BEHAVIOR; exports.DEFAULT_BRISTLE = _chunkBXMIBMVGcjs.DEFAULT_BRISTLE; exports.DEFAULT_BRUSH_ID = _chunkBXMIBMVGcjs.DEFAULT_BRUSH_ID; exports.DEFAULT_DPI = DEFAULT_DPI; exports.DEFAULT_DYNAMICS = _chunkBXMIBMVGcjs.DEFAULT_DYNAMICS; exports.DEFAULT_FLOW = _chunkGNK7SESQcjs.DEFAULT_FLOW; exports.DEFAULT_IMPASTO = _chunkBXMIBMVGcjs.DEFAULT_IMPASTO; exports.DEFAULT_LIGHTING = DEFAULT_LIGHTING; exports.DEFAULT_MULTI_COLOR = _chunkBXMIBMVGcjs.DEFAULT_MULTI_COLOR; exports.DEFAULT_PAINT_GRADIENT = _chunkLRRCMRSLcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkLRRCMRSLcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_PAPER = _chunkBXMIBMVGcjs.DEFAULT_PAPER; exports.DEFAULT_PARTICLE = _chunkBXMIBMVGcjs.DEFAULT_PARTICLE; exports.DEFAULT_STICKER = _chunkBXMIBMVGcjs.DEFAULT_STICKER; exports.DEFAULT_SWATCHES = DEFAULT_SWATCHES; exports.DEFAULT_VIEW = DEFAULT_VIEW; exports.DEFAULT_WET_BRUSH = _chunkBXMIBMVGcjs.DEFAULT_WET_BRUSH; exports.DEFAULT_WET_PARAMS = _chunkGNK7SESQcjs.DEFAULT_WET_PARAMS; exports.DryStroke = _chunkBXMIBMVGcjs.DryStroke; exports.GPU_LEAD = GPU_LEAD; exports.GRAIN_PATTERNS = _chunkLRRCMRSLcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkLRRCMRSLcjs.GRAIN_TILE; exports.HARMONY_KINDS = HARMONY_KINDS; exports.IDENTITY_AFFINE = IDENTITY_AFFINE; exports.IDENTITY_COPY = _chunkBXMIBMVGcjs.IDENTITY_COPY; exports.IMPASTO_TOOLS = _chunkBXMIBMVGcjs.IMPASTO_TOOLS; exports.IMPASTO_TOOL_LABELS = IMPASTO_TOOL_LABELS; exports.LIGHT_SLIDERS = LIGHT_SLIDERS; exports.LitCache = LitCache; exports.MAX_BRUSH_SIZE = _chunkLRRCMRSLcjs.MAX_BRUSH_SIZE; exports.MAX_CANVAS_SIDE = MAX_CANVAS_SIDE; exports.MAX_COORDINATE = MAX_COORDINATE; exports.MAX_IMAGE_SIDE = MAX_IMAGE_SIDE; exports.MAX_ZOOM = MAX_ZOOM; exports.MIN_CANVAS_SIDE = MIN_CANVAS_SIDE; exports.MIN_ZOOM = MIN_ZOOM; exports.MIXING_PAD_HEIGHT = MIXING_PAD_HEIGHT; exports.MIXING_PAD_WIDTH = MIXING_PAD_WIDTH; exports.MULTI_COLOR_MODES = _chunkBXMIBMVGcjs.MULTI_COLOR_MODES; exports.MixingPad = MixingPad; exports.PAD_SAMPLE_SIZES = PAD_SAMPLE_SIZES; exports.PAINTERLY_BLEND_MODES = _chunkCWM3CUUXcjs.PAINTERLY_BLEND_MODES; exports.PAINT_BRUSH_CATEGORIES = _chunkBXMIBMVGcjs.PAINT_BRUSH_CATEGORIES; exports.PAINT_BRUSH_ENGINES = _chunkBXMIBMVGcjs.PAINT_BRUSH_ENGINES; exports.PAINT_COLOR_JSON_SCHEMA = _chunkLRRCMRSLcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_EFFECT_PLACES = PAINT_EFFECT_PLACES; exports.PAINT_FORMAT = PAINT_FORMAT; exports.PAINT_GRADIENT_FULL_SPEED = _chunkLRRCMRSLcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkLRRCMRSLcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkLRRCMRSLcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkLRRCMRSLcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SCHEMA_VERSION = PAINT_SCHEMA_VERSION; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkLRRCMRSLcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAINT_TOOLS = PAINT_TOOLS; exports.PAPER_EFFECT_BLENDS = PAPER_EFFECT_BLENDS; exports.PAPER_EFFECT_NODE_ID = PAPER_EFFECT_NODE_ID; exports.PAPER_FAMILIES = _chunkBXMIBMVGcjs.PAPER_FAMILIES; exports.PAPER_LIBRARY = _chunkBXMIBMVGcjs.PAPER_LIBRARY; exports.PAPER_NODE_ID = PAPER_NODE_ID; exports.PAPER_SLIDERS = PAPER_SLIDERS; exports.PAPER_TARGET = PAPER_TARGET; exports.PARTICLE_KINDS = _chunkBXMIBMVGcjs.PARTICLE_KINDS; exports.PARTICLE_KIND_LABELS = PARTICLE_KIND_LABELS; exports.PARTICLE_RENDERS = _chunkBXMIBMVGcjs.PARTICLE_RENDERS; exports.PARTICLE_RENDER_LABELS = PARTICLE_RENDER_LABELS; exports.PaintCanvasPresenter = PaintCanvasPresenter; exports.PaintDabStroke = PaintDabStroke; exports.PaintDirector = PaintDirector; exports.PaintDocumentError = PaintDocumentError; exports.PaintEditorController = PaintEditorController; exports.PaintEditorError = PaintEditorError; exports.PaintEffectsRenderer = PaintEffectsRenderer; exports.PaintGesture = PaintGesture; exports.PaintGradientSampler = _chunkLRRCMRSLcjs.PaintGradientSampler; exports.PaintPresence = PaintPresence; exports.PaintSourceError = _chunkLRRCMRSLcjs.PaintSourceError; exports.PaintStrokeSession = PaintStrokeSession; exports.PaintWetLayers = PaintWetLayers; exports.PaperGrain = _chunkLRRCMRSLcjs.PaperGrain; exports.ParticleStroke = _chunkBXMIBMVGcjs.ParticleStroke; exports.PenDabWalker = _chunkBXMIBMVGcjs.PenDabWalker; exports.PenSmoother = _chunkBXMIBMVGcjs.PenSmoother; exports.PerspectiveSnapper = PerspectiveSnapper; exports.SNAP_DECIDE_DISTANCE = SNAP_DECIDE_DISTANCE; exports.STAMP_KINDS = _chunkBXMIBMVGcjs.STAMP_KINDS; exports.STAMP_LABELS = STAMP_LABELS; exports.STENCIL_KINDS = STENCIL_KINDS; exports.STENCIL_SHAPES = STENCIL_SHAPES; exports.STICKER_SLIDERS = STICKER_SLIDERS; exports.SYMMETRY_MODES = SYMMETRY_MODES; exports.StencilSnapper = StencilSnapper; exports.StickerSpray = _chunkBXMIBMVGcjs.StickerSpray; exports.TRACING_NODE_ID = TRACING_NODE_ID; exports.ThickStrokeDriver = ThickStrokeDriver; exports.TileableNoise = _chunkLRRCMRSLcjs.TileableNoise; exports.WET_FLOW_KINDS = _chunkGNK7SESQcjs.WET_FLOW_KINDS; exports.WET_GPU_MODES = WET_GPU_MODES; exports.WET_GPU_OPTIONS = WET_GPU_OPTIONS; exports.WET_MEDIA = _chunkBXMIBMVGcjs.WET_MEDIA; exports.WET_MEDIUM_LABELS = WET_MEDIUM_LABELS; exports.WET_MEDIUM_PARAMS = WET_MEDIUM_PARAMS; exports.WET_PARAM_KEYS = _chunkGNK7SESQcjs.WET_PARAM_KEYS; exports.WET_PARAM_SCHEMA = WET_PARAM_SCHEMA; exports.WET_PARAM_SLIDERS = WET_PARAM_SLIDERS; exports.WET_SPEED_SLIDER = WET_SPEED_SLIDER; exports.WET_TILT_SLIDERS = WET_TILT_SLIDERS; exports.WET_TOOLS = _chunkBXMIBMVGcjs.WET_TOOLS; exports.WET_TOOL_LABELS = WET_TOOL_LABELS; exports.WetStrokeDriver = WetStrokeDriver; exports.addPaintGradientStop = _chunkLRRCMRSLcjs.addPaintGradientStop; exports.affineCopy = affineCopy; exports.applyAffine = applyAffine; exports.brushEngineControls = brushEngineControls; exports.brushLoadColor = brushLoadColor; exports.brushLoadForStroke = brushLoadForStroke; exports.brushTakesPaint = _chunkBXMIBMVGcjs.brushTakesPaint; exports.brushToJSON = _chunkBXMIBMVGcjs.brushToJSON; exports.buildTimeLapse = buildTimeLapse; exports.checkPaintEffectPlace = checkPaintEffectPlace; exports.clonePaper = _chunkBXMIBMVGcjs.clonePaper; exports.colorHarmony = colorHarmony; exports.composeAffine = composeAffine; exports.contactSheet = contactSheet; exports.createPaintCompositor = createPaintCompositor; exports.createPaintDocument = createPaintDocument; exports.createPaintEditorToolProvider = createPaintEditorToolProvider; exports.createPaintEffectsToolProvider = createPaintEffectsToolProvider; exports.createPaintLayer = createPaintLayer; exports.createPaintReplayTools = createPaintReplayTools; exports.createPaintStickerTools = createPaintStickerTools; exports.createPaintThickTools = createPaintThickTools; exports.createPaintWetTools = createPaintWetTools; exports.decodeImageBlob = decodeImageBlob; exports.defaultGuides = defaultGuides; exports.defaultImageEncoder = defaultImageEncoder; exports.deserializePaintDocument = deserializePaintDocument; exports.deserializePaintDocumentAsync = deserializePaintDocumentAsync; exports.documentExtensions = documentExtensions; exports.documentToScreen = documentToScreen; exports.downloadBytes = downloadBytes; exports.downsampleRgba = downsampleRgba; exports.drawSticker = _chunkBXMIBMVGcjs.drawSticker; exports.drawWaterOverlay = drawWaterOverlay; exports.effectLayersToJSON = effectLayersToJSON; exports.emptiedLayers = emptiedLayers; exports.emptyThickChannels = emptyThickChannels; exports.fitZoom = fitZoom; exports.grainCatch = _chunkLRRCMRSLcjs.grainCatch; exports.grainHeights = _chunkLRRCMRSLcjs.grainHeights; exports.guideOverlay = guideOverlay; exports.handlePaintShortcut = handlePaintShortcut; exports.hash2 = _chunkLRRCMRSLcjs.hash2; exports.hexToPaintRgb = _chunkLRRCMRSLcjs.hexToPaintRgb; exports.hexToRgb8 = _chunkBXMIBMVGcjs.hexToRgb8; exports.hslToRgb = hslToRgb; exports.hsvToRgb = hsvToRgb; exports.hueToWheel = hueToWheel; exports.invertAffine = invertAffine; exports.isBlendMode = _chunkCWM3CUUXcjs.isBlendMode; exports.isGradientPaint = _chunkLRRCMRSLcjs.isGradientPaint; exports.isPainterlyBlendMode = _chunkCWM3CUUXcjs.isPainterlyBlendMode; exports.isPalmTouch = isPalmTouch; exports.isWetBrush = _chunkBXMIBMVGcjs.isWetBrush; exports.isWetCapable = _chunkBXMIBMVGcjs.isWetCapable; exports.lightTile = lightTile; exports.lightingKey = lightingKey; exports.mapPenPoint = mapPenPoint; exports.mix32 = _chunkLRRCMRSLcjs.mix32; exports.mixPixels = mixPixels; exports.mixerLoadForStroke = mixerLoadForStroke; exports.mixerTip = _chunkBXMIBMVGcjs.mixerTip; exports.multiColorForDab = multiColorForDab; exports.multiColorGradient = multiColorGradient; exports.multiColorPalette = multiColorPalette; exports.multiColorSliders = multiColorSliders; exports.multiColorToPaint = _chunkBXMIBMVGcjs.multiColorToPaint; exports.newPaintLayerId = newPaintLayerId; exports.nextPaperEffectVersion = nextPaperEffectVersion; exports.normalizeBehavior = _chunkBXMIBMVGcjs.normalizeBehavior; exports.normalizeBristle = _chunkBXMIBMVGcjs.normalizeBristle; exports.normalizeBrushStroke = normalizeBrushStroke; exports.normalizeCanvas = normalizeCanvas; exports.normalizeDynamics = _chunkBXMIBMVGcjs.normalizeDynamics; exports.normalizeFlow = _chunkGNK7SESQcjs.normalizeFlow; exports.normalizeHexColor = _chunkLRRCMRSLcjs.normalizeHexColor; exports.normalizeImpasto = _chunkBXMIBMVGcjs.normalizeImpasto; exports.normalizeLighting = normalizeLighting; exports.normalizeMultiColor = _chunkBXMIBMVGcjs.normalizeMultiColor; exports.normalizePaintBrush = _chunkBXMIBMVGcjs.normalizePaintBrush; exports.normalizePaper = _chunkBXMIBMVGcjs.normalizePaper; exports.normalizeParticle = _chunkBXMIBMVGcjs.normalizeParticle; exports.normalizePerspective = normalizePerspective; exports.normalizeRotation = normalizeRotation; exports.normalizeStencil = normalizeStencil; exports.normalizeStickerSettings = _chunkBXMIBMVGcjs.normalizeStickerSettings; exports.normalizeStickerUpdate = _chunkBXMIBMVGcjs.normalizeStickerUpdate; exports.normalizeSymmetry = normalizeSymmetry; exports.normalizeView = normalizeView; exports.normalizeWetBrush = _chunkBXMIBMVGcjs.normalizeWetBrush; exports.normalizeWetParams = _chunkGNK7SESQcjs.normalizeWetParams; exports.overPixels = overPixels; exports.padSampleRadius = padSampleRadius; exports.paintGradientMappingFor = _chunkLRRCMRSLcjs.paintGradientMappingFor; exports.paintSourceColor = _chunkLRRCMRSLcjs.paintSourceColor; exports.paintSourceCss = _chunkLRRCMRSLcjs.paintSourceCss; exports.paintToMultiColor = _chunkBXMIBMVGcjs.paintToMultiColor; exports.paperEffectFromJSON = paperEffectFromJSON; exports.paperEffectToJSON = paperEffectToJSON; exports.paperGrain = paperGrain; exports.paperKey = paperKey; exports.paperNode = paperNode; exports.paperPreset = _chunkBXMIBMVGcjs.paperPreset; exports.parseBrushLibrary = _chunkBXMIBMVGcjs.parseBrushLibrary; exports.parseHexColor = parseHexColor; exports.parsePaintSource = _chunkLRRCMRSLcjs.parsePaintSource; exports.patchBrushValue = patchBrushValue; exports.patchPath = patchPath; exports.penOrientation = _chunkBXMIBMVGcjs.penOrientation; exports.perspectiveDirections = perspectiveDirections; exports.perspectiveGuideLines = perspectiveGuideLines; exports.pointerToPenPoint = pointerToPenPoint; exports.quickStencil = quickStencil; exports.rand01 = _chunkLRRCMRSLcjs.rand01; exports.randSigned = _chunkLRRCMRSLcjs.randSigned; exports.readPaintEffectSource = readPaintEffectSource; exports.readPaintSource = _chunkLRRCMRSLcjs.readPaintSource; exports.readPath = readPath; exports.readSwatch = readSwatch; exports.reliefInfo = reliefInfo; exports.removePaintGradientStop = _chunkLRRCMRSLcjs.removePaintGradientStop; exports.renderBrushThumbnail = renderBrushThumbnail; exports.renderColorWheel = renderColorWheel; exports.renderPaper = _chunkBXMIBMVGcjs.renderPaper; exports.renderStickers = _chunkBXMIBMVGcjs.renderStickers; exports.replayFrame = replayFrame; exports.replayItems = replayItems; exports.replayPainting = replayPainting; exports.resolvePaintGradient = _chunkLRRCMRSLcjs.resolvePaintGradient; exports.reversePaintGradient = _chunkLRRCMRSLcjs.reversePaintGradient; exports.rgbToHexColor = rgbToHexColor; exports.rgbToHsl = rgbToHsl; exports.rgbToHsv = rgbToHsv; exports.samplePressure = samplePressure; exports.scalePaintGradient = _chunkLRRCMRSLcjs.scalePaintGradient; exports.scaleStencil = scaleStencil; exports.screenToDocument = screenToDocument; exports.seedFromString = _chunkLRRCMRSLcjs.seedFromString; exports.serializePaintDocument = serializePaintDocument; exports.serializePaintDocumentExternal = serializePaintDocumentExternal; exports.solidPaint = _chunkLRRCMRSLcjs.solidPaint; exports.stampCoverage = _chunkBXMIBMVGcjs.stampCoverage; exports.standardBlendMode = _chunkCWM3CUUXcjs.standardBlendMode; exports.startWetClock = startWetClock; exports.stencilMask = stencilMask; exports.stencilOutline = stencilOutline; exports.stickerRect = _chunkBXMIBMVGcjs.stickerRect; exports.stickerSurface = _chunkBXMIBMVGcjs.stickerSurface; exports.strokeBounds = strokeBounds; exports.strokeDuration = strokeDuration; exports.strokeSchedule = strokeSchedule; exports.sweepPath = sweepPath; exports.symmetryAxisAngles = symmetryAxisAngles; exports.symmetryAxisSegments = symmetryAxisSegments; exports.symmetryCopies = symmetryCopies; exports.thickFromJSON = thickFromJSON; exports.thickToJSON = thickToJSON; exports.thumbnailStroke = thumbnailStroke; exports.tiltToOrientation = _chunkBXMIBMVGcjs.tiltToOrientation; exports.timeLapseVideo = timeLapseVideo; exports.timeLapseZip = timeLapseZip; exports.toStrokePoint = _chunkBXMIBMVGcjs.toStrokePoint; exports.toggleStamp = toggleStamp; exports.updatePaintGradientStop = _chunkLRRCMRSLcjs.updatePaintGradientStop; exports.usesPaintExchange = _chunkBXMIBMVGcjs.usesPaintExchange; exports.variationAffine = variationAffine; exports.varyStroke = varyStroke; exports.viewCssTransform = viewCssTransform; exports.viewMatrix = viewMatrix; exports.viewPenToDocument = viewPenToDocument; exports.wetEngineSummary = wetEngineSummary; exports.wetPaperInput = wetPaperInput; exports.wetPigmentOf = wetPigmentOf; exports.wetSupport = _chunkGNK7SESQcjs.wetSupport; exports.wheelAngle = wheelAngle; exports.wheelPick = wheelPick; exports.wheelPoint = wheelPoint; exports.wheelToHue = wheelToHue;
8905
+
8906
+
8907
+
8908
+ exports.BLEND_MENU_GROUPS = BLEND_MENU_GROUPS; exports.BLEND_MODES = _chunkCWM3CUUXcjs.BLEND_MODES; exports.BRUSH_ID = _chunkBXMIBMVGcjs.BRUSH_ID; exports.BRUSH_ROTATIONS = _chunkBXMIBMVGcjs.BRUSH_ROTATIONS; exports.BRUSH_SLIDERS = BRUSH_SLIDERS; exports.BUILTIN_BRUSHES = _chunkBXMIBMVGcjs.BUILTIN_BRUSHES; exports.BristleStroke = _chunkBXMIBMVGcjs.BristleStroke; exports.DEFAULT_BEHAVIOR = _chunkBXMIBMVGcjs.DEFAULT_BEHAVIOR; exports.DEFAULT_BRISTLE = _chunkBXMIBMVGcjs.DEFAULT_BRISTLE; exports.DEFAULT_BRUSH_ID = _chunkBXMIBMVGcjs.DEFAULT_BRUSH_ID; exports.DEFAULT_DPI = DEFAULT_DPI; exports.DEFAULT_DYNAMICS = _chunkBXMIBMVGcjs.DEFAULT_DYNAMICS; exports.DEFAULT_FLOW = _chunkGNK7SESQcjs.DEFAULT_FLOW; exports.DEFAULT_IMPASTO = _chunkBXMIBMVGcjs.DEFAULT_IMPASTO; exports.DEFAULT_LIGHTING = DEFAULT_LIGHTING; exports.DEFAULT_MULTI_COLOR = _chunkBXMIBMVGcjs.DEFAULT_MULTI_COLOR; exports.DEFAULT_PAINT_GRADIENT = _chunkLRRCMRSLcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkLRRCMRSLcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_PAPER = _chunkBXMIBMVGcjs.DEFAULT_PAPER; exports.DEFAULT_PARTICLE = _chunkBXMIBMVGcjs.DEFAULT_PARTICLE; exports.DEFAULT_STICKER = _chunkBXMIBMVGcjs.DEFAULT_STICKER; exports.DEFAULT_SWATCHES = DEFAULT_SWATCHES; exports.DEFAULT_VIEW = DEFAULT_VIEW; exports.DEFAULT_WET_BRUSH = _chunkBXMIBMVGcjs.DEFAULT_WET_BRUSH; exports.DEFAULT_WET_PARAMS = _chunkGNK7SESQcjs.DEFAULT_WET_PARAMS; exports.DryStroke = _chunkBXMIBMVGcjs.DryStroke; exports.GPU_LEAD = GPU_LEAD; exports.GRAIN_PATTERNS = _chunkLRRCMRSLcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkLRRCMRSLcjs.GRAIN_TILE; exports.HARMONY_KINDS = HARMONY_KINDS; exports.IDENTITY_AFFINE = IDENTITY_AFFINE; exports.IDENTITY_COPY = _chunkBXMIBMVGcjs.IDENTITY_COPY; exports.IMPASTO_TOOLS = _chunkBXMIBMVGcjs.IMPASTO_TOOLS; exports.IMPASTO_TOOL_LABELS = IMPASTO_TOOL_LABELS; exports.LIGHT_SLIDERS = LIGHT_SLIDERS; exports.LitCache = LitCache; exports.MAX_BRUSH_SIZE = _chunkLRRCMRSLcjs.MAX_BRUSH_SIZE; exports.MAX_CANVAS_SIDE = MAX_CANVAS_SIDE; exports.MAX_COORDINATE = MAX_COORDINATE; exports.MAX_IMAGE_SIDE = MAX_IMAGE_SIDE; exports.MAX_ZOOM = MAX_ZOOM; exports.MIN_CANVAS_SIDE = MIN_CANVAS_SIDE; exports.MIN_ZOOM = MIN_ZOOM; exports.MIXING_PAD_HEIGHT = MIXING_PAD_HEIGHT; exports.MIXING_PAD_WIDTH = MIXING_PAD_WIDTH; exports.MULTI_COLOR_MODES = _chunkBXMIBMVGcjs.MULTI_COLOR_MODES; exports.MixingPad = MixingPad; exports.PAD_SAMPLE_SIZES = PAD_SAMPLE_SIZES; exports.PAINTERLY_BLEND_MODES = _chunkCWM3CUUXcjs.PAINTERLY_BLEND_MODES; exports.PAINT_BRUSH_CATEGORIES = _chunkBXMIBMVGcjs.PAINT_BRUSH_CATEGORIES; exports.PAINT_BRUSH_ENGINES = _chunkBXMIBMVGcjs.PAINT_BRUSH_ENGINES; exports.PAINT_COLOR_JSON_SCHEMA = _chunkLRRCMRSLcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_EFFECT_PLACES = PAINT_EFFECT_PLACES; exports.PAINT_FORMAT = PAINT_FORMAT; exports.PAINT_GRADIENT_FULL_SPEED = _chunkLRRCMRSLcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkLRRCMRSLcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkLRRCMRSLcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkLRRCMRSLcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkLRRCMRSLcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SCHEMA_VERSION = PAINT_SCHEMA_VERSION; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkLRRCMRSLcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAINT_TOOLS = PAINT_TOOLS; exports.PAPER_EFFECT_BLENDS = PAPER_EFFECT_BLENDS; exports.PAPER_EFFECT_NODE_ID = PAPER_EFFECT_NODE_ID; exports.PAPER_FAMILIES = _chunkBXMIBMVGcjs.PAPER_FAMILIES; exports.PAPER_LIBRARY = _chunkBXMIBMVGcjs.PAPER_LIBRARY; exports.PAPER_NODE_ID = PAPER_NODE_ID; exports.PAPER_SLIDERS = PAPER_SLIDERS; exports.PAPER_TARGET = PAPER_TARGET; exports.PARTICLE_KINDS = _chunkBXMIBMVGcjs.PARTICLE_KINDS; exports.PARTICLE_KIND_LABELS = PARTICLE_KIND_LABELS; exports.PARTICLE_RENDERS = _chunkBXMIBMVGcjs.PARTICLE_RENDERS; exports.PARTICLE_RENDER_LABELS = PARTICLE_RENDER_LABELS; exports.PaintCanvasPresenter = PaintCanvasPresenter; exports.PaintDabStroke = PaintDabStroke; exports.PaintDirector = PaintDirector; exports.PaintDocumentError = PaintDocumentError; exports.PaintEditorController = PaintEditorController; exports.PaintEditorError = PaintEditorError; exports.PaintEffectsRenderer = PaintEffectsRenderer; exports.PaintGesture = PaintGesture; exports.PaintGradientSampler = _chunkLRRCMRSLcjs.PaintGradientSampler; exports.PaintPresence = PaintPresence; exports.PaintSourceError = _chunkLRRCMRSLcjs.PaintSourceError; exports.PaintStrokeSession = PaintStrokeSession; exports.PaintWetLayers = PaintWetLayers; exports.PaperGrain = _chunkLRRCMRSLcjs.PaperGrain; exports.ParticleStroke = _chunkBXMIBMVGcjs.ParticleStroke; exports.PenDabWalker = _chunkBXMIBMVGcjs.PenDabWalker; exports.PenSmoother = _chunkBXMIBMVGcjs.PenSmoother; exports.PerspectiveSnapper = PerspectiveSnapper; exports.SNAP_DECIDE_DISTANCE = SNAP_DECIDE_DISTANCE; exports.STAMP_KINDS = _chunkBXMIBMVGcjs.STAMP_KINDS; exports.STAMP_LABELS = STAMP_LABELS; exports.STENCIL_KINDS = STENCIL_KINDS; exports.STENCIL_SHAPES = STENCIL_SHAPES; exports.STICKER_SLIDERS = STICKER_SLIDERS; exports.SYMMETRY_MODES = SYMMETRY_MODES; exports.StencilSnapper = StencilSnapper; exports.StickerSpray = _chunkBXMIBMVGcjs.StickerSpray; exports.TRACING_NODE_ID = TRACING_NODE_ID; exports.ThickStrokeDriver = ThickStrokeDriver; exports.TileableNoise = _chunkLRRCMRSLcjs.TileableNoise; exports.WET_FLOW_KINDS = _chunkGNK7SESQcjs.WET_FLOW_KINDS; exports.WET_GPU_MODES = WET_GPU_MODES; exports.WET_GPU_OPTIONS = WET_GPU_OPTIONS; exports.WET_MEDIA = _chunkBXMIBMVGcjs.WET_MEDIA; exports.WET_MEDIUM_LABELS = WET_MEDIUM_LABELS; exports.WET_MEDIUM_PARAMS = WET_MEDIUM_PARAMS; exports.WET_PARAM_KEYS = _chunkGNK7SESQcjs.WET_PARAM_KEYS; exports.WET_PARAM_SCHEMA = WET_PARAM_SCHEMA; exports.WET_PARAM_SLIDERS = WET_PARAM_SLIDERS; exports.WET_SPEED_SLIDER = WET_SPEED_SLIDER; exports.WET_TILT_SLIDERS = WET_TILT_SLIDERS; exports.WET_TOOLS = _chunkBXMIBMVGcjs.WET_TOOLS; exports.WET_TOOL_LABELS = WET_TOOL_LABELS; exports.WetStrokeDriver = WetStrokeDriver; exports.addPaintGradientStop = _chunkLRRCMRSLcjs.addPaintGradientStop; exports.affineCopy = affineCopy; exports.applyAffine = applyAffine; exports.brushEngineControls = brushEngineControls; exports.brushLoadColor = brushLoadColor; exports.brushLoadForStroke = brushLoadForStroke; exports.brushTakesPaint = _chunkBXMIBMVGcjs.brushTakesPaint; exports.brushToJSON = _chunkBXMIBMVGcjs.brushToJSON; exports.buildTimeLapse = buildTimeLapse; exports.checkPaintEffectPlace = checkPaintEffectPlace; exports.clonePaper = _chunkBXMIBMVGcjs.clonePaper; exports.colorHarmony = colorHarmony; exports.composeAffine = composeAffine; exports.contactSheet = contactSheet; exports.createPaintCompositor = createPaintCompositor; exports.createPaintDocument = createPaintDocument; exports.createPaintEditorToolProvider = createPaintEditorToolProvider; exports.createPaintEffectsToolProvider = createPaintEffectsToolProvider; exports.createPaintLayer = createPaintLayer; exports.createPaintReplayTools = createPaintReplayTools; exports.createPaintStickerTools = createPaintStickerTools; exports.createPaintThickTools = createPaintThickTools; exports.createPaintWetTools = createPaintWetTools; exports.decodeImageBlob = decodeImageBlob; exports.defaultGuides = defaultGuides; exports.defaultImageEncoder = defaultImageEncoder; exports.deserializePaintDocument = deserializePaintDocument; exports.deserializePaintDocumentAsync = deserializePaintDocumentAsync; exports.documentExtensions = documentExtensions; exports.documentToScreen = documentToScreen; exports.downloadBytes = downloadBytes; exports.downsampleRgba = downsampleRgba; exports.drawSticker = _chunkBXMIBMVGcjs.drawSticker; exports.drawWaterOverlay = drawWaterOverlay; exports.effectLayersToJSON = effectLayersToJSON; exports.emptiedLayers = emptiedLayers; exports.emptyThickChannels = emptyThickChannels; exports.fitZoom = fitZoom; exports.grainCatch = _chunkLRRCMRSLcjs.grainCatch; exports.grainHeights = _chunkLRRCMRSLcjs.grainHeights; exports.guideOverlay = guideOverlay; exports.handlePaintShortcut = handlePaintShortcut; exports.hash2 = _chunkLRRCMRSLcjs.hash2; exports.hexToPaintRgb = _chunkLRRCMRSLcjs.hexToPaintRgb; exports.hexToRgb8 = _chunkBXMIBMVGcjs.hexToRgb8; exports.hslToRgb = hslToRgb; exports.hsvToRgb = hsvToRgb; exports.hueToWheel = hueToWheel; exports.invertAffine = invertAffine; exports.isBlendMode = _chunkCWM3CUUXcjs.isBlendMode; exports.isGradientPaint = _chunkLRRCMRSLcjs.isGradientPaint; exports.isPainterlyBlendMode = _chunkCWM3CUUXcjs.isPainterlyBlendMode; exports.isPalmTouch = isPalmTouch; exports.isWetBrush = _chunkBXMIBMVGcjs.isWetBrush; exports.isWetCapable = _chunkBXMIBMVGcjs.isWetCapable; exports.lightTile = lightTile; exports.lightingKey = lightingKey; exports.mapPenPoint = mapPenPoint; exports.mix32 = _chunkLRRCMRSLcjs.mix32; exports.mixPixels = mixPixels; exports.mixerLoadForStroke = mixerLoadForStroke; exports.mixerTip = _chunkBXMIBMVGcjs.mixerTip; exports.multiColorForDab = multiColorForDab; exports.multiColorGradient = multiColorGradient; exports.multiColorPalette = multiColorPalette; exports.multiColorSliders = multiColorSliders; exports.multiColorToPaint = _chunkBXMIBMVGcjs.multiColorToPaint; exports.newPaintLayerId = newPaintLayerId; exports.nextPaperEffectVersion = nextPaperEffectVersion; exports.normalizeBehavior = _chunkBXMIBMVGcjs.normalizeBehavior; exports.normalizeBristle = _chunkBXMIBMVGcjs.normalizeBristle; exports.normalizeBrushStroke = normalizeBrushStroke; exports.normalizeCanvas = normalizeCanvas; exports.normalizeDynamics = _chunkBXMIBMVGcjs.normalizeDynamics; exports.normalizeFlow = _chunkGNK7SESQcjs.normalizeFlow; exports.normalizeHexColor = _chunkLRRCMRSLcjs.normalizeHexColor; exports.normalizeImpasto = _chunkBXMIBMVGcjs.normalizeImpasto; exports.normalizeLighting = normalizeLighting; exports.normalizeMultiColor = _chunkBXMIBMVGcjs.normalizeMultiColor; exports.normalizePaintBrush = _chunkBXMIBMVGcjs.normalizePaintBrush; exports.normalizePaper = _chunkBXMIBMVGcjs.normalizePaper; exports.normalizeParticle = _chunkBXMIBMVGcjs.normalizeParticle; exports.normalizePerspective = normalizePerspective; exports.normalizeRotation = normalizeRotation; exports.normalizeStencil = normalizeStencil; exports.normalizeStickerSettings = _chunkBXMIBMVGcjs.normalizeStickerSettings; exports.normalizeStickerUpdate = _chunkBXMIBMVGcjs.normalizeStickerUpdate; exports.normalizeSymmetry = normalizeSymmetry; exports.normalizeView = normalizeView; exports.normalizeWetBrush = _chunkBXMIBMVGcjs.normalizeWetBrush; exports.normalizeWetParams = _chunkGNK7SESQcjs.normalizeWetParams; exports.overPixels = overPixels; exports.padSampleRadius = padSampleRadius; exports.paintGradientMappingFor = _chunkLRRCMRSLcjs.paintGradientMappingFor; exports.paintPlaybackPanel = paintPlaybackPanel; exports.paintSourceColor = _chunkLRRCMRSLcjs.paintSourceColor; exports.paintSourceCss = _chunkLRRCMRSLcjs.paintSourceCss; exports.paintToMultiColor = _chunkBXMIBMVGcjs.paintToMultiColor; exports.paperEffectFromJSON = paperEffectFromJSON; exports.paperEffectToJSON = paperEffectToJSON; exports.paperGrain = paperGrain; exports.paperKey = paperKey; exports.paperNode = paperNode; exports.paperPreset = _chunkBXMIBMVGcjs.paperPreset; exports.parseBrushLibrary = _chunkBXMIBMVGcjs.parseBrushLibrary; exports.parseHexColor = parseHexColor; exports.parsePaintSource = _chunkLRRCMRSLcjs.parsePaintSource; exports.patchBrushValue = patchBrushValue; exports.patchPath = patchPath; exports.penOrientation = _chunkBXMIBMVGcjs.penOrientation; exports.perspectiveDirections = perspectiveDirections; exports.perspectiveGuideLines = perspectiveGuideLines; exports.planPaintToolPlayback = planPaintToolPlayback; exports.pointerToPenPoint = pointerToPenPoint; exports.quickStencil = quickStencil; exports.rand01 = _chunkLRRCMRSLcjs.rand01; exports.randSigned = _chunkLRRCMRSLcjs.randSigned; exports.readPaintEffectSource = readPaintEffectSource; exports.readPaintSource = _chunkLRRCMRSLcjs.readPaintSource; exports.readPath = readPath; exports.readSwatch = readSwatch; exports.reliefInfo = reliefInfo; exports.removePaintGradientStop = _chunkLRRCMRSLcjs.removePaintGradientStop; exports.renderBrushThumbnail = renderBrushThumbnail; exports.renderColorWheel = renderColorWheel; exports.renderPaper = _chunkBXMIBMVGcjs.renderPaper; exports.renderStickers = _chunkBXMIBMVGcjs.renderStickers; exports.replayFrame = replayFrame; exports.replayItems = replayItems; exports.replayPainting = replayPainting; exports.resolvePaintGradient = _chunkLRRCMRSLcjs.resolvePaintGradient; exports.reversePaintGradient = _chunkLRRCMRSLcjs.reversePaintGradient; exports.rgbToHexColor = rgbToHexColor; exports.rgbToHsl = rgbToHsl; exports.rgbToHsv = rgbToHsv; exports.samplePressure = samplePressure; exports.scalePaintGradient = _chunkLRRCMRSLcjs.scalePaintGradient; exports.scaleStencil = scaleStencil; exports.screenToDocument = screenToDocument; exports.seedFromString = _chunkLRRCMRSLcjs.seedFromString; exports.serializePaintDocument = serializePaintDocument; exports.serializePaintDocumentExternal = serializePaintDocumentExternal; exports.solidPaint = _chunkLRRCMRSLcjs.solidPaint; exports.stampCoverage = _chunkBXMIBMVGcjs.stampCoverage; exports.standardBlendMode = _chunkCWM3CUUXcjs.standardBlendMode; exports.startWetClock = startWetClock; exports.stencilMask = stencilMask; exports.stencilOutline = stencilOutline; exports.stickerRect = _chunkBXMIBMVGcjs.stickerRect; exports.stickerSurface = _chunkBXMIBMVGcjs.stickerSurface; exports.strokeBounds = strokeBounds; exports.strokeDuration = strokeDuration; exports.strokeSchedule = strokeSchedule; exports.sweepPath = sweepPath; exports.symmetryAxisAngles = symmetryAxisAngles; exports.symmetryAxisSegments = symmetryAxisSegments; exports.symmetryCopies = symmetryCopies; exports.thickFromJSON = thickFromJSON; exports.thickToJSON = thickToJSON; exports.thumbnailStroke = thumbnailStroke; exports.tiltToOrientation = _chunkBXMIBMVGcjs.tiltToOrientation; exports.timeLapseVideo = timeLapseVideo; exports.timeLapseZip = timeLapseZip; exports.toStrokePoint = _chunkBXMIBMVGcjs.toStrokePoint; exports.toggleStamp = toggleStamp; exports.updatePaintGradientStop = _chunkLRRCMRSLcjs.updatePaintGradientStop; exports.usesPaintExchange = _chunkBXMIBMVGcjs.usesPaintExchange; exports.variationAffine = variationAffine; exports.varyStroke = varyStroke; exports.viewCssTransform = viewCssTransform; exports.viewMatrix = viewMatrix; exports.viewPenToDocument = viewPenToDocument; exports.wetEngineSummary = wetEngineSummary; exports.wetPaperInput = wetPaperInput; exports.wetPigmentOf = wetPigmentOf; exports.wetSupport = _chunkGNK7SESQcjs.wetSupport; exports.wheelAngle = wheelAngle; exports.wheelPick = wheelPick; exports.wheelPoint = wheelPoint; exports.wheelToHue = wheelToHue; exports.withPaintPlayback = withPaintPlayback;
@@ -45,3 +45,4 @@ export { DEFAULT_WET_PARAMS, WET_PARAM_KEYS, normalizeWetParams, type WetParams,
45
45
  export { wetSupport, type WetSupport } from '../paint/wet/wasm.cjs';
46
46
  export type { WetBackendInfo } from '../paint/wet/world.cjs';
47
47
  export * from '../paint/gradient-paint.cjs';
48
+ export * from './playback.cjs';
@@ -45,3 +45,4 @@ export { DEFAULT_WET_PARAMS, WET_PARAM_KEYS, normalizeWetParams, type WetParams,
45
45
  export { wetSupport, type WetSupport } from '../paint/wet/wasm.js';
46
46
  export type { WetBackendInfo } from '../paint/wet/world.js';
47
47
  export * from '../paint/gradient-paint.js';
48
+ export * from './playback.js';
@@ -6051,6 +6051,51 @@ var PaintDirector = class {
6051
6051
  }
6052
6052
  };
6053
6053
 
6054
+ // src/paint-editor/playback.ts
6055
+ var WET = /^(advance_wet_paint|dry_paint|wet_paper|set_wet_settings|set_flow_map|set_canvas_tilt|pause_wet_paint|set_wet_engine|set_water_overlay)$/;
6056
+ var PAPER = /^(set_paper|set_lighting|flatten_relief|set_instant_dry)$/;
6057
+ var LAYERS = /^(add_layer|update_layer|set_active_layer|remove_layer|duplicate_layer|move_layer|merge_layer_down|clear_layer|update_sticker|arrange_stickers|remove_stickers)$/;
6058
+ var PAD = /^(mixing_pad_stroke|pick_mixing_pad_color|clear_mixing_pad|mix_on_pad|save_mixing_pad|load_mixing_pad|remove_mixing_pad|mix_colors)$/;
6059
+ var COLOR = /^(set_color|set_paint|color_harmony|add_swatch|remove_swatch|load_mixer_brush|clean_mixer_brush)$/;
6060
+ var EFFECTS = /effect/;
6061
+ function paintPlaybackPanel(tool) {
6062
+ if (WET.test(tool)) return "wet";
6063
+ if (PAPER.test(tool)) return "paper";
6064
+ if (LAYERS.test(tool)) return "layers";
6065
+ if (PAD.test(tool) || COLOR.test(tool)) return "color";
6066
+ if (EFFECTS.test(tool)) return "effects";
6067
+ return null;
6068
+ }
6069
+ function controlOf(tool) {
6070
+ if (PAD.test(tool)) return { kind: "control", id: "mixing-pad" };
6071
+ if (tool === "set_lighting" || tool === "flatten_relief") return { kind: "control", id: "lighting" };
6072
+ if (tool === "set_symmetry" || tool === "set_perspective_guide") return { kind: "control", id: "symmetry" };
6073
+ const panel = paintPlaybackPanel(tool);
6074
+ return panel ? { kind: "panel-body", id: panel } : null;
6075
+ }
6076
+ function planPaintToolPlayback(tool, _args) {
6077
+ const steps = [];
6078
+ const panel = paintPlaybackPanel(tool);
6079
+ if (panel) steps.push({ type: "open", ref: { kind: "panel", id: panel } });
6080
+ const control = controlOf(tool);
6081
+ if (control) steps.push({ type: "target", ref: control }, { type: "press" }, { type: "release" });
6082
+ return steps.length ? steps : null;
6083
+ }
6084
+ var DIRECTED = /* @__PURE__ */ new Set(["paint_stroke", "fill_layer", "replay_strokes"]);
6085
+ function withPaintPlayback(provider, options) {
6086
+ const plan = (tool) => {
6087
+ if (tool.plan || tool.playback !== void 0) return tool;
6088
+ if (options.director && DIRECTED.has(tool.name)) return { ...tool, playback: "self" };
6089
+ return { ...tool, plan: (args) => planPaintToolPlayback(tool.name, args) };
6090
+ };
6091
+ const tools = provider.tools;
6092
+ return {
6093
+ ...provider,
6094
+ playbackSurface: provider.playbackSurface ?? options.surface ?? "paint",
6095
+ tools: typeof tools === "function" ? () => tools().map(plan) : tools.map(plan)
6096
+ };
6097
+ }
6098
+
6054
6099
  // src/paint-editor/sticker-tools.ts
6055
6100
  var READ = { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false };
6056
6101
  var WRITE = { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false };
@@ -6123,7 +6168,7 @@ var WRITE2 = { readOnlyHint: false, destructiveHint: false, idempotentHint: fals
6123
6168
  var SET = { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false };
6124
6169
  var DESTRUCTIVE2 = { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false };
6125
6170
  var EMPTY = { type: "object", properties: {}, additionalProperties: false };
6126
- var COLOR = { type: "string", pattern: "^#[0-9a-fA-F]{6}$", description: "Colour #rrggbb." };
6171
+ var COLOR2 = { type: "string", pattern: "^#[0-9a-fA-F]{6}$", description: "Colour #rrggbb." };
6127
6172
  var POINT = {
6128
6173
  type: "object",
6129
6174
  properties: { x: { type: "number", description: "x in document pixels." }, y: { type: "number", description: "y in document pixels." } },
@@ -6346,7 +6391,7 @@ function createPaintGuideTools(c) {
6346
6391
  type: "object",
6347
6392
  properties: {
6348
6393
  kind: { type: "string", enum: [...HARMONY_KINDS], description: "The harmony." },
6349
- color: { ...COLOR, description: "Base colour #rrggbb (default the paint colour)." },
6394
+ color: { ...COLOR2, description: "Base colour #rrggbb (default the paint colour)." },
6350
6395
  wheel: { type: "string", enum: ["ryb", "rgb"], description: "ryb (painter\u2019s wheel, default) or rgb." },
6351
6396
  spread: { type: "number", minimum: 5, maximum: 90, description: "Analogous and split-complementary spread in degrees (default 30)." }
6352
6397
  },
@@ -6371,7 +6416,7 @@ function createPaintGuideTools(c) {
6371
6416
  inputSchema: {
6372
6417
  type: "object",
6373
6418
  properties: {
6374
- color: { ...COLOR, description: "A colour #rrggbb." },
6419
+ color: { ...COLOR2, description: "A colour #rrggbb." },
6375
6420
  paint: { ...PAINT_SOURCE_JSON_SCHEMA, description: "Gradient paint (or a colour) for the swatch, instead of color." },
6376
6421
  name: { type: "string", minLength: 1, description: "Optional name." }
6377
6422
  },
@@ -6411,7 +6456,7 @@ function createPaintGuideTools(c) {
6411
6456
  }
6412
6457
  },
6413
6458
  tool: { type: "string", enum: ["paint", "knife"], description: "paint (default) or knife." },
6414
- color: { ...COLOR, description: "Paint colour (default the paint colour; ignored by the knife)." },
6459
+ color: { ...COLOR2, description: "Paint colour (default the paint colour; ignored by the knife)." },
6415
6460
  size: { type: "number", minimum: 1, maximum: 200, description: "Tool size in pad pixels (default 28 paint, 34 knife)." }
6416
6461
  },
6417
6462
  required: ["points"],
@@ -6464,7 +6509,7 @@ function createPaintGuideTools(c) {
6464
6509
  items: {
6465
6510
  type: "object",
6466
6511
  properties: {
6467
- color: { ...COLOR, description: "Paint colour #rrggbb." },
6512
+ color: { ...COLOR2, description: "Paint colour #rrggbb." },
6468
6513
  parts: { type: "number", minimum: 0, description: "Parts of this paint, any scale (1 and 3 for a 1:3 mix); at least one above 0." }
6469
6514
  },
6470
6515
  required: ["color", "parts"],
@@ -6871,7 +6916,7 @@ var WRITE5 = { readOnlyHint: false, destructiveHint: false, idempotentHint: fals
6871
6916
  var SET4 = { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false };
6872
6917
  var DESTRUCTIVE3 = { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false };
6873
6918
  var EMPTY3 = { type: "object", properties: {}, additionalProperties: false };
6874
- var COLOR2 = { type: "string", pattern: "^#[0-9a-fA-F]{6}$", description: 'Colour #rrggbb, e.g. "#2a4b8d".' };
6919
+ var COLOR3 = { type: "string", pattern: "^#[0-9a-fA-F]{6}$", description: 'Colour #rrggbb, e.g. "#2a4b8d".' };
6875
6920
  var LAYER_ID4 = { type: "string", description: "Layer id from list_layers (default the active layer)." };
6876
6921
  var TIP = {
6877
6922
  type: "object",
@@ -6940,7 +6985,7 @@ var BEHAVIOR = {
6940
6985
  description: "Multi-coloured brush (the older form of paint, the brush's own gradient: tip is across-tip, dab is distance in dabs or random). Read back from paint when it has a multi-colour equivalent. Missing fields keep their current values.",
6941
6986
  properties: {
6942
6987
  mode: { type: "string", enum: [...MULTI_COLOR_MODES], description: "off; tip: the colours lie side by side across the tip (stripes along the stroke, like a brush loaded with several paints); dab: the colour changes along the stroke." },
6943
- colors: { type: "array", maxItems: 8, items: { ...COLOR2 }, description: "2..8 colours #rrggbb; fewer than 2 uses the paint colour and the secondary colour." },
6988
+ colors: { type: "array", maxItems: 8, items: { ...COLOR3 }, description: "2..8 colours #rrggbb; fewer than 2 uses the paint colour and the secondary colour." },
6944
6989
  order: { type: "string", enum: ["sequence", "random"], description: "dab mode: sequence runs through the colours in order, blending between them; random picks one per run of dabs (seeded)." },
6945
6990
  length: { type: "integer", minimum: 1, maximum: 500, description: "dab mode: dabs per colour (default 12)." },
6946
6991
  softness: { type: "number", minimum: 0, maximum: 1, description: "How softly neighbouring colours blend: 0 hard stripes or steps, 1 a smooth gradient." }
@@ -7238,7 +7283,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7238
7283
  type: "object",
7239
7284
  properties: {
7240
7285
  preset: { type: "string", description: "Paper id from list_papers (its settings, then the other fields here on top)." },
7241
- color: { ...COLOR2, description: "Paper colour #rrggbb." },
7286
+ color: { ...COLOR3, description: "Paper colour #rrggbb." },
7242
7287
  depth: { type: "number", minimum: 0, maximum: 1, description: "Grain depth 0..1 (0: brushes ignore the grain)." },
7243
7288
  scale: { type: "number", minimum: 0.25, maximum: 8, description: "Grain scale: 1 natural, 2 twice as coarse." },
7244
7289
  seed: { type: "integer", minimum: 0, description: "Grain seed: another sheet of the same paper." },
@@ -7394,7 +7439,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7394
7439
  type: "object",
7395
7440
  properties: {
7396
7441
  layerId: LAYER_ID4,
7397
- color: { ...COLOR2, description: "Fill colour #rrggbb (default the paint colour)." },
7442
+ color: { ...COLOR3, description: "Fill colour #rrggbb (default the paint colour)." },
7398
7443
  opacity: { type: "number", minimum: 0, maximum: 1, description: "Opacity 0..1 (default 1)." },
7399
7444
  grain: { type: "number", minimum: 0, maximum: 1, description: "Paper grain response 0..1 (default 0: flat)." },
7400
7445
  pressure: { type: "number", minimum: 0, maximum: 1, description: "With grain: how far into the valleys, 0..1 (default 0.5)." },
@@ -7511,7 +7556,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7511
7556
  id: { type: "string", description: "Brush id from list_brushes (default the active brush)." },
7512
7557
  width: { type: "integer", minimum: 16, maximum: 512, description: "Width in pixels (default 160)." },
7513
7558
  height: { type: "integer", minimum: 16, maximum: 512, description: "Height in pixels (default 48)." },
7514
- color: { ...COLOR2, description: "Stroke colour (default the paint colour)." }
7559
+ color: { ...COLOR3, description: "Stroke colour (default the paint colour)." }
7515
7560
  },
7516
7561
  additionalProperties: false
7517
7562
  },
@@ -7532,7 +7577,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7532
7577
  description: "Sets the paint colour (and optionally the second colour) that strokes and fills use by default. Editor state, not an undo step. Returns both colours.",
7533
7578
  inputSchema: {
7534
7579
  type: "object",
7535
- properties: { color: { ...COLOR2, description: "Paint colour #rrggbb." }, secondaryColor: { ...COLOR2, description: "Second colour #rrggbb." } },
7580
+ properties: { color: { ...COLOR3, description: "Paint colour #rrggbb." }, secondaryColor: { ...COLOR3, description: "Second colour #rrggbb." } },
7536
7581
  additionalProperties: false
7537
7582
  },
7538
7583
  annotations: { title: "Set the paint colour", ...SET4 },
@@ -7584,7 +7629,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7584
7629
  name: "load_mixer_brush",
7585
7630
  title: "Load the Mixer Brush",
7586
7631
  description: "Fills the Mixer Brush reservoir with a colour (amount 1), keeping what it picked up. Editor state, not an undo step. Returns the load.",
7587
- inputSchema: { type: "object", properties: { color: { ...COLOR2, description: "Colour #rrggbb (default the paint colour)." } }, additionalProperties: false },
7632
+ inputSchema: { type: "object", properties: { color: { ...COLOR3, description: "Colour #rrggbb (default the paint colour)." } }, additionalProperties: false },
7588
7633
  annotations: { title: "Load the Mixer Brush", ...SET4 },
7589
7634
  handler: ({ color }) => loadResult(c.loadMixerBrush(color))
7590
7635
  });
@@ -7607,7 +7652,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7607
7652
  layerId: LAYER_ID4,
7608
7653
  brushId: { type: "string", description: "Brush id from list_brushes (default the active brush)." },
7609
7654
  brush: { type: "object", description: "Brush changes for this stroke only.", properties: BRUSH_FIELDS, additionalProperties: false },
7610
- color: { ...COLOR2, description: "Paint colour #rrggbb (default the paint colour)." },
7655
+ color: { ...COLOR3, description: "Paint colour #rrggbb (default the paint colour)." },
7611
7656
  paint: { ...PAINT_SOURCE_JSON_SCHEMA, description: "What this stroke paints with instead of the editor's paint: a colour, or gradient paint that changes colour as the stroke goes (by distance, pressure, tilt, speed, direction, time, across the tip or at random). Wins over the brush's own gradient." },
7612
7657
  seed: { type: "integer", minimum: 0, description: "Jitter seed (default a new one); the same seed and points give the same marks." },
7613
7658
  snapToPerspective: { type: "boolean", description: "Snap the points to the perspective guide, as a pen stroke would (default false)." }
@@ -7684,7 +7729,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
7684
7729
  additionalProperties: false
7685
7730
  },
7686
7731
  pressureScale: { type: "number", minimum: 0, maximum: 4, description: "Multiply every pressure (default 1)." },
7687
- color: { ...COLOR2, description: "Recolour (default each stroke\u2019s colour)." },
7732
+ color: { ...COLOR3, description: "Recolour (default each stroke\u2019s colour)." },
7688
7733
  brushId: { type: "string", description: "Replay with this brush from list_brushes (default each stroke\u2019s brush)." },
7689
7734
  layerId: { type: "string", description: "Paint on this layer (default each stroke\u2019s layer)." },
7690
7735
  repeat: { type: "integer", minimum: 1, maximum: 100, description: "How many copies (default 1)." }
@@ -7829,14 +7874,14 @@ function createPaintEditorToolProvider(controller, options = {}) {
7829
7874
  tools.push(...createPaintReplayTools(c));
7830
7875
  tools.push(...createPaintStickerTools(c));
7831
7876
  tools.push(...createPigmentTools());
7832
- return {
7877
+ return withPaintPlayback({
7833
7878
  id: options.id ?? "paint-editor",
7834
7879
  namespace: options.namespace,
7835
7880
  title: "Paint editor",
7836
7881
  description: "Natural-media painting: paper and grain, dry and wet brushes, the brush library, strokes as data, pigment mixing, stencils, guides, layers and export.",
7837
7882
  skill: "pixerate-paint-editor",
7838
7883
  tools
7839
- };
7884
+ }, { director: !!options.director });
7840
7885
  }
7841
7886
 
7842
7887
  // src/paint-editor/ui.ts
@@ -8424,7 +8469,7 @@ function createPaintEffectsToolProvider(controller, options = {}) {
8424
8469
  if (changes.enabled !== void 0) throw new Error("enabled does not apply here: hide an effect layer with update_layer visible false, or remove the effect paper.");
8425
8470
  };
8426
8471
  const values = (v) => v;
8427
- return createEffectToolProvider({
8472
+ return withPaintPlayback(createEffectToolProvider({
8428
8473
  id: options.id ?? "paint-effects",
8429
8474
  namespace: options.namespace,
8430
8475
  title: "Paint effects",
@@ -8554,7 +8599,7 @@ function createPaintEffectsToolProvider(controller, options = {}) {
8554
8599
  }
8555
8600
  }
8556
8601
  ]
8557
- });
8602
+ }), { director: false });
8558
8603
  }
8559
8604
  export {
8560
8605
  BLEND_MENU_GROUPS,
@@ -8773,6 +8818,7 @@ export {
8773
8818
  overPixels,
8774
8819
  padSampleRadius,
8775
8820
  paintGradientMappingFor,
8821
+ paintPlaybackPanel,
8776
8822
  paintSourceColor,
8777
8823
  paintSourceCss,
8778
8824
  paintToMultiColor,
@@ -8790,6 +8836,7 @@ export {
8790
8836
  penOrientation,
8791
8837
  perspectiveDirections,
8792
8838
  perspectiveGuideLines,
8839
+ planPaintToolPlayback,
8793
8840
  pointerToPenPoint,
8794
8841
  quickStencil,
8795
8842
  rand01,
@@ -8856,5 +8903,6 @@ export {
8856
8903
  wheelAngle,
8857
8904
  wheelPick,
8858
8905
  wheelPoint,
8859
- wheelToHue
8906
+ wheelToHue,
8907
+ withPaintPlayback
8860
8908
  };
@@ -0,0 +1,16 @@
1
+ import type { AgentToolProvider } from '../tools/registry.cjs';
2
+ import type { PlaybackStep } from '../tools/playback.cjs';
3
+ /** The paint editor's side panels, as `{ kind: 'panel', id }` refs. */
4
+ export type PaintPlaybackPanel = 'color' | 'wet' | 'paper' | 'layers' | 'effects';
5
+ /** The panel a paint write shows in (by its bare name), or null. */
6
+ export declare function paintPlaybackPanel(tool: string): PaintPlaybackPanel | null;
7
+ /** The cursor steps for one paint tool call (by bare name), or null to fall back to the ids it names. */
8
+ export declare function planPaintToolPlayback(tool: string, _args: Record<string, any>): PlaybackStep[] | null;
9
+ /**
10
+ * Gives a paint tool provider agent playback on `surface` (default `paint`, where `PaintEditor`
11
+ * attaches). With a director, strokes, fills and replays play through it (`playback: 'self'`).
12
+ */
13
+ export declare function withPaintPlayback(provider: AgentToolProvider, options: {
14
+ director: boolean;
15
+ surface?: string;
16
+ }): AgentToolProvider;
@@ -0,0 +1,16 @@
1
+ import type { AgentToolProvider } from '../tools/registry.js';
2
+ import type { PlaybackStep } from '../tools/playback.js';
3
+ /** The paint editor's side panels, as `{ kind: 'panel', id }` refs. */
4
+ export type PaintPlaybackPanel = 'color' | 'wet' | 'paper' | 'layers' | 'effects';
5
+ /** The panel a paint write shows in (by its bare name), or null. */
6
+ export declare function paintPlaybackPanel(tool: string): PaintPlaybackPanel | null;
7
+ /** The cursor steps for one paint tool call (by bare name), or null to fall back to the ids it names. */
8
+ export declare function planPaintToolPlayback(tool: string, _args: Record<string, any>): PlaybackStep[] | null;
9
+ /**
10
+ * Gives a paint tool provider agent playback on `surface` (default `paint`, where `PaintEditor`
11
+ * attaches). With a director, strokes, fills and replays play through it (`playback: 'self'`).
12
+ */
13
+ export declare function withPaintPlayback(provider: AgentToolProvider, options: {
14
+ director: boolean;
15
+ surface?: string;
16
+ }): AgentToolProvider;