@pixerate/editor 0.163.0 → 0.165.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 (159) hide show
  1. package/dist/agent/index.cjs +54 -39
  2. package/dist/agent/index.js +24 -9
  3. package/dist/animation/index.cjs +6 -5
  4. package/dist/animation/index.js +5 -4
  5. package/dist/animation-editor/index.cjs +65 -64
  6. package/dist/animation-editor/index.js +8 -7
  7. package/dist/bridge/cli.cjs +3 -3
  8. package/dist/bridge/cli.js +2 -2
  9. package/dist/bridge/index.cjs +3 -3
  10. package/dist/bridge/index.js +2 -2
  11. package/dist/canvas/displacement.d.cts +34 -2
  12. package/dist/canvas/displacement.d.ts +34 -2
  13. package/dist/canvas/explosion-tools.d.cts +43 -0
  14. package/dist/canvas/explosion-tools.d.ts +43 -0
  15. package/dist/canvas/explosionLayout.d.cts +50 -0
  16. package/dist/canvas/explosionLayout.d.ts +50 -0
  17. package/dist/canvas/explosionState.d.cts +52 -0
  18. package/dist/canvas/explosionState.d.ts +52 -0
  19. package/dist/canvas/index.cjs +512 -168
  20. package/dist/canvas/index.d.cts +3 -0
  21. package/dist/canvas/index.d.ts +3 -0
  22. package/dist/canvas/index.js +434 -90
  23. package/dist/canvas/types.d.cts +27 -2
  24. package/dist/canvas/types.d.ts +27 -2
  25. package/dist/chart/controller.d.cts +31 -2
  26. package/dist/chart/controller.d.ts +31 -2
  27. package/dist/chart/index.cjs +504 -132
  28. package/dist/chart/index.d.cts +2 -0
  29. package/dist/chart/index.d.ts +2 -0
  30. package/dist/chart/index.js +386 -14
  31. package/dist/chart/layout-families.d.cts +7 -0
  32. package/dist/chart/layout-families.d.ts +7 -0
  33. package/dist/chart/links.d.cts +34 -0
  34. package/dist/chart/links.d.ts +34 -0
  35. package/dist/chart/mermaid.d.cts +9 -6
  36. package/dist/chart/mermaid.d.ts +9 -6
  37. package/dist/chart/schemas.d.cts +3 -0
  38. package/dist/chart/schemas.d.ts +3 -0
  39. package/dist/chart/spec.d.cts +3 -2
  40. package/dist/chart/spec.d.ts +3 -2
  41. package/dist/chart/style.d.cts +33 -0
  42. package/dist/chart/style.d.ts +33 -0
  43. package/dist/chart/types.d.cts +24 -2
  44. package/dist/chart/types.d.ts +24 -2
  45. package/dist/{chunk-TALQONZ5.js → chunk-2J5VLJHC.js} +3 -3
  46. package/dist/{chunk-3NEZJCBY.js → chunk-2ZRN43IN.js} +340 -201
  47. package/dist/{chunk-ZVNAMTFO.cjs → chunk-3FSUJIXN.cjs} +18 -174
  48. package/dist/{chunk-RQCMSEM5.cjs → chunk-4QUUHTGJ.cjs} +2 -2
  49. package/dist/{chunk-CIPIESX4.cjs → chunk-4ZC5QJE2.cjs} +3 -3
  50. package/dist/{chunk-S6X2QRVU.cjs → chunk-5UEFBM2M.cjs} +1 -138
  51. package/dist/{chunk-YSAGBIRW.cjs → chunk-64VWWR5U.cjs} +16 -16
  52. package/dist/{chunk-QYZGBVNC.js → chunk-7272D3K2.js} +10 -8
  53. package/dist/{chunk-462WGGXX.cjs → chunk-AMX23CSN.cjs} +27 -16
  54. package/dist/{chunk-3VLOOO3G.js → chunk-BDIM6NVW.js} +1 -1
  55. package/dist/{chunk-POR54B55.js → chunk-CRFSQWKQ.js} +4 -1
  56. package/dist/{chunk-GZ2FM3ZB.js → chunk-DKNEQX7T.js} +6 -162
  57. package/dist/{chunk-JCXMJUQO.cjs → chunk-EGZM52EO.cjs} +3 -3
  58. package/dist/{chunk-ES3UEVUT.cjs → chunk-EUIDTZNQ.cjs} +112 -110
  59. package/dist/{chunk-H3OEM3Q2.js → chunk-F6R67I3A.js} +1 -1
  60. package/dist/{chunk-5FNGLV2D.js → chunk-FEU2XVQH.js} +15 -3
  61. package/dist/{chunk-SZA42R4N.js → chunk-FRBRLKNQ.js} +154 -16
  62. package/dist/chunk-HIDFL5LQ.js +484 -0
  63. package/dist/{chunk-MKTDELCD.js → chunk-I5MRJW7B.js} +1 -1
  64. package/dist/{chunk-SDHZG5TF.js → chunk-ILP77UD6.js} +160 -2
  65. package/dist/{chunk-GKNEJ6EN.cjs → chunk-IMRXC7OA.cjs} +241 -103
  66. package/dist/chunk-KGRZMHZB.js +204 -0
  67. package/dist/{chunk-SET6KJOP.js → chunk-LPIKXPBM.js} +1 -1
  68. package/dist/{chunk-BQWGN5WH.js → chunk-M2TPMYJE.js} +1 -1
  69. package/dist/{chunk-GTELFJRE.cjs → chunk-M5GLQQWG.cjs} +2 -2
  70. package/dist/{chunk-4VU4CP7R.js → chunk-MHLU6GRJ.js} +1 -138
  71. package/dist/{chunk-D54JHQK2.cjs → chunk-MKXK6E4O.cjs} +51 -51
  72. package/dist/{chunk-DAPQGA55.js → chunk-N7NBGT2Y.js} +2 -2
  73. package/dist/chunk-O6OGNDND.js +164 -0
  74. package/dist/{chunk-22KLZZGH.cjs → chunk-ODFCS7HF.cjs} +8 -8
  75. package/dist/{chunk-PA3IMPPS.cjs → chunk-OVYQAYGH.cjs} +81 -81
  76. package/dist/{chunk-YXOW456B.js → chunk-PPEDZ5WR.js} +1 -1
  77. package/dist/{chunk-YGG7WDWT.cjs → chunk-Q25WAFTD.cjs} +21 -18
  78. package/dist/{chunk-SBQVEBSU.cjs → chunk-QO2T6KA5.cjs} +165 -67
  79. package/dist/{chunk-24M7VD6M.cjs → chunk-S4EIAIEW.cjs} +7 -7
  80. package/dist/{chunk-M4MIZPQI.cjs → chunk-SJ2CPTQC.cjs} +189 -15
  81. package/dist/chunk-TFF2GTGN.cjs +153 -0
  82. package/dist/chunk-TTCJPX4U.cjs +204 -0
  83. package/dist/{chunk-NZD2MZJC.cjs → chunk-TVQW26AV.cjs} +35 -23
  84. package/dist/{chunk-R3P2M7HU.cjs → chunk-UVXTOZ2B.cjs} +346 -207
  85. package/dist/{chunk-WI7QJA7A.cjs → chunk-UXETV2NC.cjs} +161 -3
  86. package/dist/{chunk-Z4P2RBMJ.js → chunk-V5GSY3NC.js} +101 -3
  87. package/dist/{chunk-QY4KUDMY.js → chunk-VRXXAXUT.js} +2 -2
  88. package/dist/chunk-VU6WQSMB.cjs +164 -0
  89. package/dist/{chunk-OXERWBKE.js → chunk-X5W645RI.js} +3 -3
  90. package/dist/{chunk-NHLYK3AX.js → chunk-XBQX76CT.js} +182 -8
  91. package/dist/{chunk-5AARIS3R.cjs → chunk-XCDGM7TD.cjs} +37 -37
  92. package/dist/{chunk-EVXQNQND.js → chunk-XZB3TJ6K.js} +16 -5
  93. package/dist/chunk-YBAPT7NL.js +153 -0
  94. package/dist/chunk-Z2UQYMPS.cjs +484 -0
  95. package/dist/color/index.cjs +5 -3
  96. package/dist/color/index.js +12 -10
  97. package/dist/diagram/index.cjs +55 -243
  98. package/dist/diagram/index.js +12 -200
  99. package/dist/export/index.cjs +7 -6
  100. package/dist/export/index.js +6 -5
  101. package/dist/extensions/index.cjs +12 -9
  102. package/dist/extensions/index.js +11 -8
  103. package/dist/gradient/index.cjs +29 -27
  104. package/dist/gradient/index.js +6 -4
  105. package/dist/image-editor/index.cjs +644 -643
  106. package/dist/image-editor/index.js +7 -6
  107. package/dist/index.cjs +21 -18
  108. package/dist/index.js +14 -11
  109. package/dist/paint-editor/index.cjs +19 -18
  110. package/dist/paint-editor/index.js +7 -6
  111. package/dist/parameters/index.cjs +2 -2
  112. package/dist/parameters/index.js +1 -1
  113. package/dist/persistence/assetWrites.d.cts +22 -0
  114. package/dist/persistence/assetWrites.d.ts +22 -0
  115. package/dist/persistence/assets.d.cts +71 -0
  116. package/dist/persistence/assets.d.ts +71 -0
  117. package/dist/persistence/documentStore.d.cts +17 -1
  118. package/dist/persistence/documentStore.d.ts +17 -1
  119. package/dist/persistence/documentTools.d.cts +5 -1
  120. package/dist/persistence/documentTools.d.ts +5 -1
  121. package/dist/persistence/editorAutosave.d.cts +7 -0
  122. package/dist/persistence/editorAutosave.d.ts +7 -0
  123. package/dist/persistence/index.cjs +141 -21
  124. package/dist/persistence/index.js +130 -10
  125. package/dist/persistence/storage.d.cts +13 -1
  126. package/dist/persistence/storage.d.ts +13 -1
  127. package/dist/spreadsheet/index.cjs +3 -3
  128. package/dist/spreadsheet/index.js +2 -2
  129. package/dist/tokens/index.cjs +11 -3
  130. package/dist/tokens/index.d.cts +1 -0
  131. package/dist/tokens/index.d.ts +1 -0
  132. package/dist/tokens/index.js +10 -2
  133. package/dist/tokens/style.d.cts +36 -0
  134. package/dist/tokens/style.d.ts +36 -0
  135. package/dist/tools/index.cjs +15 -3
  136. package/dist/tools/index.d.cts +2 -0
  137. package/dist/tools/index.d.ts +2 -0
  138. package/dist/tools/index.js +14 -2
  139. package/dist/tools/style-tools.d.cts +19 -0
  140. package/dist/tools/style-tools.d.ts +19 -0
  141. package/dist/tools/style.d.cts +212 -0
  142. package/dist/tools/style.d.ts +212 -0
  143. package/dist/tools/view.d.cts +6 -0
  144. package/dist/tools/view.d.ts +6 -0
  145. package/dist/typography/index.cjs +8 -6
  146. package/dist/typography/index.js +5 -3
  147. package/dist/vector/index.cjs +953 -952
  148. package/dist/vector/index.js +7 -6
  149. package/dist/video-editor/index.cjs +8 -7
  150. package/dist/video-editor/index.js +6 -5
  151. package/package.json +1 -1
  152. package/skills/README.md +12 -0
  153. package/skills/pixerate-agent-tools/SKILL.md +34 -1
  154. package/skills/pixerate-chart/SKILL.md +41 -9
  155. package/skills/pixerate-image-editor/SKILL.md +2 -0
  156. package/skills/pixerate-paint-editor/SKILL.md +2 -0
  157. package/skills/pixerate-tokens/SKILL.md +5 -0
  158. package/dist/chunk-ERAGQL2N.cjs +0 -68
  159. package/dist/chunk-KMU6QJB7.js +0 -68
@@ -149,12 +149,38 @@ export type DisplacementDirection = 'right' | 'left' | 'down' | 'up' | 'vertical
149
149
  * Options for directional displacement calculation.
150
150
  */
151
151
  export interface DirectionalDisplacementOptions {
152
+ /** Which nodes move and where: `right` / `left` / `up` / `down` push one side; `vertical` opens the row up and down. Default `right`. */
152
153
  direction?: DisplacementDirection;
154
+ /** Clearance between the child cluster and displaced nodes, in canvas units. Default 40. */
153
155
  gap?: number;
156
+ /** With `right`, also push nodes in the origin's column that overlap the cluster up or down. Default false. */
154
157
  spreadSiblingLanes?: boolean;
158
+ /** Distance in canvas units within which a node counts as a sibling (same column for `right`, same row for `row-lane`). Default 50. */
155
159
  siblingTolerance?: number;
160
+ /**
161
+ * Floor for the top edge of nodes moved upward (e.g. below a pinned header). Rows pushed into it
162
+ * stack from `minY` down by `rowSpacing` so they never overlap, and never move below where they started.
163
+ */
156
164
  minY?: number;
165
+ /**
166
+ * Ceiling for the bottom edge of nodes moved downward. Rows pushed into it stack from `maxY` up by
167
+ * `rowSpacing`, and never move above where they started.
168
+ */
169
+ maxY?: number;
170
+ /**
171
+ * `freeform` (default) moves nodes by the exact clearance. `row-lane` treats the canvas as rows
172
+ * `rowSpacing` apart: nodes are bucketed into lanes relative to the origin row, the origin's lane
173
+ * stays put, and vertical deltas are rounded up to whole lanes so rows glide apart by exact lane heights.
174
+ */
175
+ layoutMode?: 'freeform' | 'row-lane';
176
+ /**
177
+ * Lane height in canvas units. Required for `row-lane` (default: the origin's height); also the
178
+ * spacing between rows stacked against `minY` / `maxY` (default: the tallest node in those rows).
179
+ */
180
+ rowSpacing?: number;
157
181
  }
182
+ /** How existing nodes make room when a node explodes. */
183
+ export type ExplosionDisplacementStrategy = 'directional' | 'dagre' | 'none';
158
184
  /**
159
185
  * Options for Dagre reflow displacement calculation.
160
186
  */
@@ -181,8 +207,7 @@ export interface ExplodeNodeOptions<TNode extends CanvasNode = CanvasNode, TEdge
181
207
  childNodes: TNode[];
182
208
  childEdges?: TEdge[];
183
209
  connectParentToChildren?: boolean | 'first' | 'all';
184
- connectChildrenToDownstream?: boolean;
185
- displacementStrategy?: 'directional' | 'dagre' | 'none';
210
+ displacementStrategy?: ExplosionDisplacementStrategy;
186
211
  directionalOptions?: DirectionalDisplacementOptions;
187
212
  reflowOptions?: Partial<ReflowDisplacementOptions>;
188
213
  trajectory?: TrajectoryFunction;
@@ -149,12 +149,38 @@ export type DisplacementDirection = 'right' | 'left' | 'down' | 'up' | 'vertical
149
149
  * Options for directional displacement calculation.
150
150
  */
151
151
  export interface DirectionalDisplacementOptions {
152
+ /** Which nodes move and where: `right` / `left` / `up` / `down` push one side; `vertical` opens the row up and down. Default `right`. */
152
153
  direction?: DisplacementDirection;
154
+ /** Clearance between the child cluster and displaced nodes, in canvas units. Default 40. */
153
155
  gap?: number;
156
+ /** With `right`, also push nodes in the origin's column that overlap the cluster up or down. Default false. */
154
157
  spreadSiblingLanes?: boolean;
158
+ /** Distance in canvas units within which a node counts as a sibling (same column for `right`, same row for `row-lane`). Default 50. */
155
159
  siblingTolerance?: number;
160
+ /**
161
+ * Floor for the top edge of nodes moved upward (e.g. below a pinned header). Rows pushed into it
162
+ * stack from `minY` down by `rowSpacing` so they never overlap, and never move below where they started.
163
+ */
156
164
  minY?: number;
165
+ /**
166
+ * Ceiling for the bottom edge of nodes moved downward. Rows pushed into it stack from `maxY` up by
167
+ * `rowSpacing`, and never move above where they started.
168
+ */
169
+ maxY?: number;
170
+ /**
171
+ * `freeform` (default) moves nodes by the exact clearance. `row-lane` treats the canvas as rows
172
+ * `rowSpacing` apart: nodes are bucketed into lanes relative to the origin row, the origin's lane
173
+ * stays put, and vertical deltas are rounded up to whole lanes so rows glide apart by exact lane heights.
174
+ */
175
+ layoutMode?: 'freeform' | 'row-lane';
176
+ /**
177
+ * Lane height in canvas units. Required for `row-lane` (default: the origin's height); also the
178
+ * spacing between rows stacked against `minY` / `maxY` (default: the tallest node in those rows).
179
+ */
180
+ rowSpacing?: number;
157
181
  }
182
+ /** How existing nodes make room when a node explodes. */
183
+ export type ExplosionDisplacementStrategy = 'directional' | 'dagre' | 'none';
158
184
  /**
159
185
  * Options for Dagre reflow displacement calculation.
160
186
  */
@@ -181,8 +207,7 @@ export interface ExplodeNodeOptions<TNode extends CanvasNode = CanvasNode, TEdge
181
207
  childNodes: TNode[];
182
208
  childEdges?: TEdge[];
183
209
  connectParentToChildren?: boolean | 'first' | 'all';
184
- connectChildrenToDownstream?: boolean;
185
- displacementStrategy?: 'directional' | 'dagre' | 'none';
210
+ displacementStrategy?: ExplosionDisplacementStrategy;
186
211
  directionalOptions?: DirectionalDisplacementOptions;
187
212
  reflowOptions?: Partial<ReflowDisplacementOptions>;
188
213
  trajectory?: TrajectoryFunction;
@@ -2,7 +2,7 @@ import { HistoryManager } from '../history/HistoryManager.cjs';
2
2
  import { type ChartTrendFit } from './trend.cjs';
3
3
  import { type ChartTreeRow } from './tree.cjs';
4
4
  import { type ChartTableOptions } from './spec.cjs';
5
- import type { ChartAxis, ChartIssue, ChartCurve, ChartErrorBars, ChartLegend, ChartMarker, ChartNumberFormat, ChartReferenceBand, ChartReferenceLine, ChartSelection, ChartSeries, ChartSeriesType, ChartSpec, ChartTrendline, ChartType } from './types.cjs';
5
+ import type { ChartAxis, ChartIssue, ChartCurve, ChartErrorBars, ChartLegend, ChartLink, ChartMarker, ChartNumberFormat, ChartReferenceBand, ChartReferenceLine, ChartSelection, ChartSeries, ChartSeriesType, ChartSpec, ChartTrendline, ChartType } from './types.cjs';
6
6
  export interface ChartControllerOptions {
7
7
  /** Starting chart (any partial or saved spec; problems are reported in `state.issues`). */
8
8
  spec?: Partial<ChartSpec> | unknown;
@@ -220,7 +220,7 @@ export declare class ChartController {
220
220
  }): ChartActionResult & {
221
221
  issues?: ChartIssue[];
222
222
  };
223
- /** A refusal while the data is a tree (cell edits would be overwritten by its totals), else null. */
223
+ /** A refusal while the data is a tree or flows (cell edits would be overwritten by their totals), else null. */
224
224
  private treeLocked;
225
225
  /** Replaces the grouped data (an empty list goes back to the table, keeping the totals as values). One undo step. */
226
226
  setTree(tree: unknown, options?: ChartEditOptions): ChartActionResult;
@@ -268,6 +268,35 @@ export declare class ChartController {
268
268
  };
269
269
  /** Removes a node (with everything under it). A group left empty becomes an item with value 0. */
270
270
  removeTreeNode(path: readonly string[]): ChartActionResult;
271
+ /**
272
+ * Replaces the flows (and, when given, the node order). An empty list goes back to the
273
+ * table, keeping how much passed through each node as values. One undo step, all-or-nothing.
274
+ */
275
+ setLinks(links: unknown, options?: ChartEditOptions & {
276
+ nodes?: readonly string[];
277
+ }): ChartActionResult;
278
+ /** Replaces the data with flows from a table of source, target and value columns. */
279
+ importLinksTable(rows: ReadonlyArray<ReadonlyArray<unknown>>, options?: {
280
+ header?: boolean | 'auto';
281
+ }): ChartActionResult;
282
+ private badLink;
283
+ /** Adds a flow and returns its index. */
284
+ addLink(link: ChartLink): {
285
+ ok: true;
286
+ index: number;
287
+ } | {
288
+ ok: false;
289
+ message: string;
290
+ issues?: ChartIssue[];
291
+ };
292
+ /** Changes a flow's source, target, value or colour (`color: null` goes back to the default). */
293
+ updateLink(index: number, patch: {
294
+ source?: string;
295
+ target?: string;
296
+ value?: number;
297
+ color?: string | null;
298
+ }): ChartActionResult;
299
+ removeLink(index: number): ChartActionResult;
271
300
  /** Sets the note written under the chart ("" removes it). */
272
301
  setNote(note: string): ChartActionResult;
273
302
  /**
@@ -2,7 +2,7 @@ import { HistoryManager } from '../history/HistoryManager.js';
2
2
  import { type ChartTrendFit } from './trend.js';
3
3
  import { type ChartTreeRow } from './tree.js';
4
4
  import { type ChartTableOptions } from './spec.js';
5
- import type { ChartAxis, ChartIssue, ChartCurve, ChartErrorBars, ChartLegend, ChartMarker, ChartNumberFormat, ChartReferenceBand, ChartReferenceLine, ChartSelection, ChartSeries, ChartSeriesType, ChartSpec, ChartTrendline, ChartType } from './types.js';
5
+ import type { ChartAxis, ChartIssue, ChartCurve, ChartErrorBars, ChartLegend, ChartLink, ChartMarker, ChartNumberFormat, ChartReferenceBand, ChartReferenceLine, ChartSelection, ChartSeries, ChartSeriesType, ChartSpec, ChartTrendline, ChartType } from './types.js';
6
6
  export interface ChartControllerOptions {
7
7
  /** Starting chart (any partial or saved spec; problems are reported in `state.issues`). */
8
8
  spec?: Partial<ChartSpec> | unknown;
@@ -220,7 +220,7 @@ export declare class ChartController {
220
220
  }): ChartActionResult & {
221
221
  issues?: ChartIssue[];
222
222
  };
223
- /** A refusal while the data is a tree (cell edits would be overwritten by its totals), else null. */
223
+ /** A refusal while the data is a tree or flows (cell edits would be overwritten by their totals), else null. */
224
224
  private treeLocked;
225
225
  /** Replaces the grouped data (an empty list goes back to the table, keeping the totals as values). One undo step. */
226
226
  setTree(tree: unknown, options?: ChartEditOptions): ChartActionResult;
@@ -268,6 +268,35 @@ export declare class ChartController {
268
268
  };
269
269
  /** Removes a node (with everything under it). A group left empty becomes an item with value 0. */
270
270
  removeTreeNode(path: readonly string[]): ChartActionResult;
271
+ /**
272
+ * Replaces the flows (and, when given, the node order). An empty list goes back to the
273
+ * table, keeping how much passed through each node as values. One undo step, all-or-nothing.
274
+ */
275
+ setLinks(links: unknown, options?: ChartEditOptions & {
276
+ nodes?: readonly string[];
277
+ }): ChartActionResult;
278
+ /** Replaces the data with flows from a table of source, target and value columns. */
279
+ importLinksTable(rows: ReadonlyArray<ReadonlyArray<unknown>>, options?: {
280
+ header?: boolean | 'auto';
281
+ }): ChartActionResult;
282
+ private badLink;
283
+ /** Adds a flow and returns its index. */
284
+ addLink(link: ChartLink): {
285
+ ok: true;
286
+ index: number;
287
+ } | {
288
+ ok: false;
289
+ message: string;
290
+ issues?: ChartIssue[];
291
+ };
292
+ /** Changes a flow's source, target, value or colour (`color: null` goes back to the default). */
293
+ updateLink(index: number, patch: {
294
+ source?: string;
295
+ target?: string;
296
+ value?: number;
297
+ color?: string | null;
298
+ }): ChartActionResult;
299
+ removeLink(index: number): ChartActionResult;
271
300
  /** Sets the note written under the chart ("" removes it). */
272
301
  setNote(note: string): ChartActionResult;
273
302
  /**