@pixerate/editor 0.133.0 → 0.135.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 (77) hide show
  1. package/dist/animation-editor/index.cjs +55 -55
  2. package/dist/animation-editor/index.d.cts +4 -4
  3. package/dist/animation-editor/index.d.ts +4 -4
  4. package/dist/animation-editor/index.js +2 -2
  5. package/dist/{bezier-DL2wPsFf.d.cts → bezier-J8i4uqSH.d.cts} +1 -1
  6. package/dist/{bezier-BAGdL89w.d.ts → bezier-lNEOp0Jx.d.ts} +1 -1
  7. package/dist/canvas/index.d.cts +7 -7
  8. package/dist/canvas/index.d.ts +7 -7
  9. package/dist/{chunk-VGZSIXX3.js → chunk-7RJ6P7MI.js} +2 -2
  10. package/dist/{chunk-AOCFL7L7.js → chunk-ESIWZMMK.js} +2 -2
  11. package/dist/{chunk-FOBB6AIO.js → chunk-HHTCDFZC.js} +97 -5
  12. package/dist/chunk-HHTCDFZC.js.map +1 -0
  13. package/dist/{chunk-6CTZAGZ2.js → chunk-ILYFOJUN.js} +56 -1
  14. package/dist/chunk-ILYFOJUN.js.map +1 -0
  15. package/dist/{chunk-2QKUD3E2.cjs → chunk-T6TV6HY6.cjs} +36 -36
  16. package/dist/{chunk-2QKUD3E2.cjs.map → chunk-T6TV6HY6.cjs.map} +1 -1
  17. package/dist/{chunk-65GNHOD4.cjs → chunk-YAFS2QFZ.cjs} +82 -82
  18. package/dist/{chunk-65GNHOD4.cjs.map → chunk-YAFS2QFZ.cjs.map} +1 -1
  19. package/dist/{chunk-NVTHUPJ6.cjs → chunk-YT3JL7YM.cjs} +71 -16
  20. package/dist/chunk-YT3JL7YM.cjs.map +1 -0
  21. package/dist/{chunk-F7GGEAO2.cjs → chunk-Z2H7KECK.cjs} +151 -59
  22. package/dist/chunk-Z2H7KECK.cjs.map +1 -0
  23. package/dist/effects/index.d.cts +4 -4
  24. package/dist/effects/index.d.ts +4 -4
  25. package/dist/{export-BICOEM9d.d.cts → export-AZSwX087.d.cts} +13 -5
  26. package/dist/{export-XnuX8FZ2.d.ts → export-BDkyDNM8.d.ts} +13 -5
  27. package/dist/{export-zB4HITwP.d.ts → export-DMeG6E06.d.ts} +1 -1
  28. package/dist/{export-CeFplzAW.d.cts → export-KzubBKo7.d.cts} +1 -1
  29. package/dist/{helpers-cssRNUzH.d.ts → helpers-Coa4e2j_.d.ts} +12 -0
  30. package/dist/{helpers-BuKdqUlM.d.cts → helpers-DHl28yLO.d.cts} +12 -0
  31. package/dist/image-editor/index.cjs +739 -647
  32. package/dist/image-editor/index.cjs.map +1 -1
  33. package/dist/image-editor/index.d.cts +26 -11
  34. package/dist/image-editor/index.d.ts +26 -11
  35. package/dist/image-editor/index.js +104 -12
  36. package/dist/image-editor/index.js.map +1 -1
  37. package/dist/{opentype-C3iyIFRx.d.cts → opentype-BWR7Qv8W.d.cts} +1 -1
  38. package/dist/{opentype-DG5Lkwul.d.ts → opentype-Dfcx6wFx.d.ts} +1 -1
  39. package/dist/paint/index.cjs +10 -2
  40. package/dist/paint/index.cjs.map +1 -1
  41. package/dist/paint/index.d.cts +2 -2
  42. package/dist/paint/index.d.ts +2 -2
  43. package/dist/paint/index.js +9 -1
  44. package/dist/paint-editor/index.cjs +7 -7
  45. package/dist/paint-editor/index.d.cts +7 -7
  46. package/dist/paint-editor/index.d.ts +7 -7
  47. package/dist/paint-editor/index.js +2 -2
  48. package/dist/{pathfinder-DKLt4UDG.d.ts → pathfinder-Celbi3e6.d.ts} +1 -1
  49. package/dist/{pathfinder-8vXik95z.d.cts → pathfinder-D8KQ6blQ.d.cts} +1 -1
  50. package/dist/{pool-C69pkWRz.d.ts → pool-8JZGWHvR.d.ts} +1 -1
  51. package/dist/{pool-VAWcYUbs.d.cts → pool-BfuxBKTd.d.cts} +1 -1
  52. package/dist/{rand-BaqEOs1Y.d.ts → rand-BszBST4s.d.ts} +31 -1
  53. package/dist/{rand-DdpFzCo6.d.cts → rand-DOH_aMvm.d.cts} +31 -1
  54. package/dist/{svg-CEYpvsgH.d.ts → svg-CxxqG3_W.d.ts} +2 -2
  55. package/dist/{svg-BThlZmja.d.cts → svg-pwXWq6s2.d.cts} +2 -2
  56. package/dist/{tools-CRnZJXXr.d.cts → tools-3EBjR91b.d.cts} +1 -1
  57. package/dist/{tools-CVGqEpO8.d.ts → tools-y1M6O3UT.d.ts} +1 -1
  58. package/dist/vector/index.cjs +1292 -1035
  59. package/dist/vector/index.cjs.map +1 -1
  60. package/dist/vector/index.d.cts +183 -91
  61. package/dist/vector/index.d.ts +183 -91
  62. package/dist/vector/index.js +267 -10
  63. package/dist/vector/index.js.map +1 -1
  64. package/dist/video-editor/index.d.cts +4 -4
  65. package/dist/video-editor/index.d.ts +4 -4
  66. package/dist/{warp-mKylbLiF.d.ts → warp-C1gwu2G_.d.ts} +1 -1
  67. package/dist/{warp-ChcFDdlT.d.cts → warp-Ceqdz7kj.d.cts} +1 -1
  68. package/package.json +1 -1
  69. package/skills/pixerate-image-editor/SKILL.md +4 -4
  70. package/skills/pixerate-vector/SKILL.md +18 -54
  71. package/skills/pixerate-vector/references/pitfalls.md +62 -0
  72. package/dist/chunk-6CTZAGZ2.js.map +0 -1
  73. package/dist/chunk-F7GGEAO2.cjs.map +0 -1
  74. package/dist/chunk-FOBB6AIO.js.map +0 -1
  75. package/dist/chunk-NVTHUPJ6.cjs.map +0 -1
  76. /package/dist/{chunk-VGZSIXX3.js.map → chunk-7RJ6P7MI.js.map} +0 -0
  77. /package/dist/{chunk-AOCFL7L7.js.map → chunk-ESIWZMMK.js.map} +0 -0
@@ -1,9 +1,9 @@
1
- import { E as EffectProvider, d as EffectProviderCapabilities, a as EffectRenderRequest, c as EffectUse, e as EffectValue, f as EffectDescription, b as EffectPixels, g as EffectSummary } from '../helpers-BuKdqUlM.cjs';
2
- export { h as EFFECT_KINDS, i as EFFECT_USES, j as EffectControlSchema, k as EffectImageSource, l as EffectInputSpec, m as EffectKind, n as EffectPreset, o as EffectRenderer, p as EffectRendererOptions, q as EffectSearchOptions, r as EffectSvgAnimation, s as EffectValues, t as EffectVectorMotion, u as EffectVectorTarget, v as EffectsSlot, w as applyEffectMask, x as createEffectPixels, y as effectValueErrors, z as encodeEffectFloat, A as isEffectPixels, B as linearToSrgb, D as resolveEffectValues, F as searchEffectSummaries, G as srgbToLinear } from '../helpers-BuKdqUlM.cjs';
1
+ import { E as EffectProvider, d as EffectProviderCapabilities, a as EffectRenderRequest, c as EffectUse, e as EffectValue, f as EffectDescription, b as EffectPixels, g as EffectSummary } from '../helpers-DHl28yLO.cjs';
2
+ export { h as EFFECT_KINDS, i as EFFECT_USES, j as EffectControlSchema, k as EffectImageSource, l as EffectInputSpec, m as EffectKind, n as EffectPreset, o as EffectRenderer, p as EffectRendererOptions, q as EffectSearchOptions, r as EffectSvgAnimation, s as EffectValues, t as EffectVectorMotion, u as EffectVectorTarget, v as EffectsSlot, w as applyEffectMask, x as createEffectPixels, y as effectValueErrors, z as encodeEffectFloat, A as isEffectPixels, B as linearToSrgb, D as resolveEffectValues, F as searchEffectSummaries, G as srgbToLinear } from '../helpers-DHl28yLO.cjs';
3
3
  import { S as SchemaValidationError, J as JsonSchema } from '../schema-Di0CS6Pe.cjs';
4
- export { A as AppliedEffectInfo, E as EffectChangeResult, a as EffectTargetEffects, b as EffectToolContext, c as EffectToolHost, d as createEffectToolProvider } from '../tools-CRnZJXXr.cjs';
4
+ export { A as AppliedEffectInfo, E as EffectChangeResult, a as EffectTargetEffects, b as EffectToolContext, c as EffectToolHost, d as createEffectToolProvider } from '../tools-3EBjR91b.cjs';
5
5
  import { P as ParameterField, a as ParameterValue } from '../types-DMcf_z4J.cjs';
6
- export { E as EffectRendererPool, a as EffectRendererPoolOptions } from '../pool-VAWcYUbs.cjs';
6
+ export { E as EffectRendererPool, a as EffectRendererPoolOptions } from '../pool-BfuxBKTd.cjs';
7
7
  import '../evaluate-BsxYieLN.cjs';
8
8
  import '../easing-lM0Xo9Ni.cjs';
9
9
  import '../types-CwMPoRMU.cjs';
@@ -1,9 +1,9 @@
1
- import { E as EffectProvider, d as EffectProviderCapabilities, a as EffectRenderRequest, c as EffectUse, e as EffectValue, f as EffectDescription, b as EffectPixels, g as EffectSummary } from '../helpers-cssRNUzH.js';
2
- export { h as EFFECT_KINDS, i as EFFECT_USES, j as EffectControlSchema, k as EffectImageSource, l as EffectInputSpec, m as EffectKind, n as EffectPreset, o as EffectRenderer, p as EffectRendererOptions, q as EffectSearchOptions, r as EffectSvgAnimation, s as EffectValues, t as EffectVectorMotion, u as EffectVectorTarget, v as EffectsSlot, w as applyEffectMask, x as createEffectPixels, y as effectValueErrors, z as encodeEffectFloat, A as isEffectPixels, B as linearToSrgb, D as resolveEffectValues, F as searchEffectSummaries, G as srgbToLinear } from '../helpers-cssRNUzH.js';
1
+ import { E as EffectProvider, d as EffectProviderCapabilities, a as EffectRenderRequest, c as EffectUse, e as EffectValue, f as EffectDescription, b as EffectPixels, g as EffectSummary } from '../helpers-Coa4e2j_.js';
2
+ export { h as EFFECT_KINDS, i as EFFECT_USES, j as EffectControlSchema, k as EffectImageSource, l as EffectInputSpec, m as EffectKind, n as EffectPreset, o as EffectRenderer, p as EffectRendererOptions, q as EffectSearchOptions, r as EffectSvgAnimation, s as EffectValues, t as EffectVectorMotion, u as EffectVectorTarget, v as EffectsSlot, w as applyEffectMask, x as createEffectPixels, y as effectValueErrors, z as encodeEffectFloat, A as isEffectPixels, B as linearToSrgb, D as resolveEffectValues, F as searchEffectSummaries, G as srgbToLinear } from '../helpers-Coa4e2j_.js';
3
3
  import { S as SchemaValidationError, J as JsonSchema } from '../schema-Di0CS6Pe.js';
4
- export { A as AppliedEffectInfo, E as EffectChangeResult, a as EffectTargetEffects, b as EffectToolContext, c as EffectToolHost, d as createEffectToolProvider } from '../tools-CVGqEpO8.js';
4
+ export { A as AppliedEffectInfo, E as EffectChangeResult, a as EffectTargetEffects, b as EffectToolContext, c as EffectToolHost, d as createEffectToolProvider } from '../tools-y1M6O3UT.js';
5
5
  import { P as ParameterField, a as ParameterValue } from '../types-D3-J3TFf.js';
6
- export { E as EffectRendererPool, a as EffectRendererPoolOptions } from '../pool-C69pkWRz.js';
6
+ export { E as EffectRendererPool, a as EffectRendererPoolOptions } from '../pool-8JZGWHvR.js';
7
7
  import '../evaluate-BbCeF6pt.js';
8
8
  import '../easing-lM0Xo9Ni.js';
9
9
  import '../types-CwMPoRMU.js';
@@ -2,10 +2,10 @@ import { a2 as RasterLayerBase, a3 as RasterMask$1, a5 as RasterPixelLayer, H as
2
2
  import { c as PixelSurface, a as BlendMode, T as TiledSurface, R as RasterRect } from './surface-1MRncXpF.cjs';
3
3
  import { b as BuiltinProfileId, j as Intent, P as Profile, T as Transform, d as ColorSpace } from './builtin-CY97ppKM.cjs';
4
4
  import { A as AffineMatrix, Q as Quad, a as WarpMesh, V as Vec2, H as Homography } from './types-CwMPoRMU.cjs';
5
- import { B as BezierPath } from './bezier-DL2wPsFf.cjs';
6
- import { b as TextRun, P as ParagraphRun, T as TextShaper, c as ParagraphStyle, d as TextStyle, L as LaidFragment, W as WarpPreset, e as TextLayout } from './warp-ChcFDdlT.cjs';
7
- import { e as EffectValue, a3 as VectorSubpath, v as EffectsSlot, E as EffectProvider, b as EffectPixels, f as EffectDescription, X as Vec2$1 } from './helpers-BuKdqUlM.cjs';
8
- import { B as BrushSettings, P as PaintSource, M as MixerSettings, a as MixerLoad, R as RetouchSettings, S as StrokeCoverage, b as MixerTarget, c as MixerStroke, d as RetouchApply, e as StrokePoint, f as RetouchPaint, C as CoverageMap, g as PaintTileTarget, h as StrokeApply } from './rand-DdpFzCo6.cjs';
5
+ import { B as BezierPath } from './bezier-J8i4uqSH.cjs';
6
+ import { b as TextRun, P as ParagraphRun, T as TextShaper, c as ParagraphStyle, d as TextStyle, L as LaidFragment, W as WarpPreset, e as TextLayout } from './warp-Ceqdz7kj.cjs';
7
+ import { e as EffectValue, a3 as VectorSubpath, v as EffectsSlot, E as EffectProvider, b as EffectPixels, f as EffectDescription, X as Vec2$1 } from './helpers-DHl28yLO.cjs';
8
+ import { B as BrushSettings, P as PaintSource, M as MixerSettings, a as MixerLoad, R as RetouchSettings, C as CloneTransform, S as StrokeCoverage, b as MixerTarget, c as MixerStroke, d as RetouchApply, e as StrokePoint, f as RetouchPaint, g as CoverageMap, h as PaintTileTarget, i as StrokeApply } from './rand-DOH_aMvm.cjs';
9
9
 
10
10
  /**
11
11
  * A selection: one 8-bit coverage value per image pixel (0 = not selected, 255 = fully
@@ -2821,6 +2821,8 @@ interface PaintOptions {
2821
2821
  retouch: RetouchSettings;
2822
2822
  /** The Clone Stamp and Healing Brush source point (Alt-click), or `null` when none is set. */
2823
2823
  cloneSource: CloneSource | null;
2824
+ /** Clone Source panel: how cloned pixels are scaled, flipped and rotated (identity by default). */
2825
+ cloneTransform: CloneTransform;
2824
2826
  }
2825
2827
  /** Where the Clone Stamp and Healing Brush sample from. */
2826
2828
  interface CloneSource {
@@ -3699,7 +3701,7 @@ declare class ImageEditorController {
3699
3701
  mask?: boolean;
3700
3702
  }): string | null;
3701
3703
  /** Brush settings, colours and tool options of the paint tools (view state, no undo). */
3702
- setPaintOptions(options: Partial<Omit<PaintOptions, 'brush' | 'mixer' | 'mixerLoad' | 'retouch' | 'cloneSource'>> & {
3704
+ setPaintOptions(options: Partial<Omit<PaintOptions, 'brush' | 'mixer' | 'mixerLoad' | 'retouch' | 'cloneSource' | 'cloneTransform'>> & {
3703
3705
  brush?: Partial<BrushSettings>;
3704
3706
  mixer?: Partial<MixerSettings>;
3705
3707
  retouch?: Partial<RetouchSettings>;
@@ -3721,6 +3723,12 @@ declare class ImageEditorController {
3721
3723
  x: number;
3722
3724
  y: number;
3723
3725
  } | null): CloneSource | null;
3726
+ /**
3727
+ * The Clone Source panel's transform for the Clone Stamp and Healing Brush: `scaleX` / `scaleY`
3728
+ * (factors, 0.01..10 in size; negative flips) and `rotate` (degrees, clockwise), merged into the
3729
+ * current one; `null` resets it. View state, no undo. Returns the transform.
3730
+ */
3731
+ setCloneTransform(t: Partial<CloneTransform> | null): CloneTransform;
3724
3732
  /** D: black foreground, white background. */
3725
3733
  resetPaintColors(): void;
3726
3734
  /** X: swaps the foreground and background colours. */
@@ -2,10 +2,10 @@ import { a2 as RasterLayerBase, a3 as RasterMask$1, a5 as RasterPixelLayer, H as
2
2
  import { c as PixelSurface, a as BlendMode, T as TiledSurface, R as RasterRect } from './surface-1MRncXpF.js';
3
3
  import { b as BuiltinProfileId, j as Intent, P as Profile, T as Transform, d as ColorSpace } from './builtin-CY97ppKM.js';
4
4
  import { A as AffineMatrix, Q as Quad, a as WarpMesh, V as Vec2, H as Homography } from './types-CwMPoRMU.js';
5
- import { B as BezierPath } from './bezier-BAGdL89w.js';
6
- import { b as TextRun, P as ParagraphRun, T as TextShaper, c as ParagraphStyle, d as TextStyle, L as LaidFragment, W as WarpPreset, e as TextLayout } from './warp-mKylbLiF.js';
7
- import { e as EffectValue, a3 as VectorSubpath, v as EffectsSlot, E as EffectProvider, b as EffectPixels, f as EffectDescription, X as Vec2$1 } from './helpers-cssRNUzH.js';
8
- import { B as BrushSettings, P as PaintSource, M as MixerSettings, a as MixerLoad, R as RetouchSettings, S as StrokeCoverage, b as MixerTarget, c as MixerStroke, d as RetouchApply, e as StrokePoint, f as RetouchPaint, C as CoverageMap, g as PaintTileTarget, h as StrokeApply } from './rand-BaqEOs1Y.js';
5
+ import { B as BezierPath } from './bezier-lNEOp0Jx.js';
6
+ import { b as TextRun, P as ParagraphRun, T as TextShaper, c as ParagraphStyle, d as TextStyle, L as LaidFragment, W as WarpPreset, e as TextLayout } from './warp-C1gwu2G_.js';
7
+ import { e as EffectValue, a3 as VectorSubpath, v as EffectsSlot, E as EffectProvider, b as EffectPixels, f as EffectDescription, X as Vec2$1 } from './helpers-Coa4e2j_.js';
8
+ import { B as BrushSettings, P as PaintSource, M as MixerSettings, a as MixerLoad, R as RetouchSettings, C as CloneTransform, S as StrokeCoverage, b as MixerTarget, c as MixerStroke, d as RetouchApply, e as StrokePoint, f as RetouchPaint, g as CoverageMap, h as PaintTileTarget, i as StrokeApply } from './rand-BszBST4s.js';
9
9
 
10
10
  /**
11
11
  * A selection: one 8-bit coverage value per image pixel (0 = not selected, 255 = fully
@@ -2821,6 +2821,8 @@ interface PaintOptions {
2821
2821
  retouch: RetouchSettings;
2822
2822
  /** The Clone Stamp and Healing Brush source point (Alt-click), or `null` when none is set. */
2823
2823
  cloneSource: CloneSource | null;
2824
+ /** Clone Source panel: how cloned pixels are scaled, flipped and rotated (identity by default). */
2825
+ cloneTransform: CloneTransform;
2824
2826
  }
2825
2827
  /** Where the Clone Stamp and Healing Brush sample from. */
2826
2828
  interface CloneSource {
@@ -3699,7 +3701,7 @@ declare class ImageEditorController {
3699
3701
  mask?: boolean;
3700
3702
  }): string | null;
3701
3703
  /** Brush settings, colours and tool options of the paint tools (view state, no undo). */
3702
- setPaintOptions(options: Partial<Omit<PaintOptions, 'brush' | 'mixer' | 'mixerLoad' | 'retouch' | 'cloneSource'>> & {
3704
+ setPaintOptions(options: Partial<Omit<PaintOptions, 'brush' | 'mixer' | 'mixerLoad' | 'retouch' | 'cloneSource' | 'cloneTransform'>> & {
3703
3705
  brush?: Partial<BrushSettings>;
3704
3706
  mixer?: Partial<MixerSettings>;
3705
3707
  retouch?: Partial<RetouchSettings>;
@@ -3721,6 +3723,12 @@ declare class ImageEditorController {
3721
3723
  x: number;
3722
3724
  y: number;
3723
3725
  } | null): CloneSource | null;
3726
+ /**
3727
+ * The Clone Source panel's transform for the Clone Stamp and Healing Brush: `scaleX` / `scaleY`
3728
+ * (factors, 0.01..10 in size; negative flips) and `rotate` (degrees, clockwise), merged into the
3729
+ * current one; `null` resets it. View state, no undo. Returns the transform.
3730
+ */
3731
+ setCloneTransform(t: Partial<CloneTransform> | null): CloneTransform;
3724
3732
  /** D: black foreground, white background. */
3725
3733
  resetPaintColors(): void;
3726
3734
  /** X: swaps the foreground and background colours. */
@@ -1,4 +1,4 @@
1
- import { e as EffectValue, v as EffectsSlot, b as EffectPixels, E as EffectProvider, f as EffectDescription } from './helpers-cssRNUzH.js';
1
+ import { e as EffectValue, v as EffectsSlot, b as EffectPixels, E as EffectProvider, f as EffectDescription } from './helpers-Coa4e2j_.js';
2
2
 
3
3
  /**
4
4
  * Keyframes for a clip's opacity, volume and transform. A property is either a plain number or
@@ -1,4 +1,4 @@
1
- import { e as EffectValue, v as EffectsSlot, b as EffectPixels, E as EffectProvider, f as EffectDescription } from './helpers-BuKdqUlM.cjs';
1
+ import { e as EffectValue, v as EffectsSlot, b as EffectPixels, E as EffectProvider, f as EffectDescription } from './helpers-DHl28yLO.cjs';
2
2
 
3
3
  /**
4
4
  * Keyframes for a clip's opacity, volume and transform. A property is either a plain number or
@@ -814,6 +814,13 @@ interface VectorFrame {
814
814
  fill?: VectorPaint;
815
815
  /** Clip the children to the frame (default true). */
816
816
  clip?: boolean;
817
+ /**
818
+ * A top-level frame with `master` set is a master page: it is not a page itself (not numbered
819
+ * or exported as one), and its children are drawn on every page that uses it.
820
+ */
821
+ master?: boolean;
822
+ /** The master page (a top-level master frame's id) this page draws under its own art, or null. */
823
+ masterId?: string | null;
817
824
  }
818
825
  /** A shape made of one or more subpaths (holes and compound shapes included). */
819
826
  interface VectorPathNode extends VectorNodeBase, VectorStyle {
@@ -971,6 +978,11 @@ interface VectorGroupNode extends VectorNodeBase {
971
978
  * when resized. Ignored on blends, live booleans and mask groups.
972
979
  */
973
980
  frame?: VectorFrame | null;
981
+ /**
982
+ * Derived, not stored: a page's master art (its master page's children laid out on it), brought
983
+ * up to date after every edit (`resolveVectorMasterPages`) and drawn under the page's children.
984
+ */
985
+ masterArt?: VectorNode[];
974
986
  /**
975
987
  * Makes the group a live symmetry group: it draws its children and their mirrored (or rotated)
976
988
  * copies, regenerated whenever a child changes. Ignored on blends, live booleans, mask groups
@@ -814,6 +814,13 @@ interface VectorFrame {
814
814
  fill?: VectorPaint;
815
815
  /** Clip the children to the frame (default true). */
816
816
  clip?: boolean;
817
+ /**
818
+ * A top-level frame with `master` set is a master page: it is not a page itself (not numbered
819
+ * or exported as one), and its children are drawn on every page that uses it.
820
+ */
821
+ master?: boolean;
822
+ /** The master page (a top-level master frame's id) this page draws under its own art, or null. */
823
+ masterId?: string | null;
817
824
  }
818
825
  /** A shape made of one or more subpaths (holes and compound shapes included). */
819
826
  interface VectorPathNode extends VectorNodeBase, VectorStyle {
@@ -971,6 +978,11 @@ interface VectorGroupNode extends VectorNodeBase {
971
978
  * when resized. Ignored on blends, live booleans and mask groups.
972
979
  */
973
980
  frame?: VectorFrame | null;
981
+ /**
982
+ * Derived, not stored: a page's master art (its master page's children laid out on it), brought
983
+ * up to date after every edit (`resolveVectorMasterPages`) and drawn under the page's children.
984
+ */
985
+ masterArt?: VectorNode[];
974
986
  /**
975
987
  * Makes the group a live symmetry group: it draws its children and their mirrored (or rotated)
976
988
  * copies, regenerated whenever a child changes. Ignored on blends, live booleans, mask groups