@pixerate/editor 0.114.0 → 0.116.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 (122) hide show
  1. package/THIRD_PARTY_NOTICES.md +6 -0
  2. package/dist/animation-editor/index.cjs +54 -54
  3. package/dist/animation-editor/index.d.cts +2 -2
  4. package/dist/animation-editor/index.d.ts +2 -2
  5. package/dist/animation-editor/index.js +2 -2
  6. package/dist/{chunk-DFQEX3AM.cjs → chunk-2UT4GXYA.cjs} +133 -8
  7. package/dist/chunk-2UT4GXYA.cjs.map +1 -0
  8. package/dist/{chunk-VXR7XWMF.js → chunk-7LNZAWSJ.js} +437 -41
  9. package/dist/chunk-7LNZAWSJ.js.map +1 -0
  10. package/dist/{chunk-LKCYANMW.js → chunk-ARQ7PQ6Q.js} +129 -4
  11. package/dist/chunk-ARQ7PQ6Q.js.map +1 -0
  12. package/dist/chunk-COAMRKVI.cjs +159 -0
  13. package/dist/chunk-COAMRKVI.cjs.map +1 -0
  14. package/dist/{chunk-C6C5PDKU.js → chunk-D53KSJUV.js} +3 -322
  15. package/dist/chunk-D53KSJUV.js.map +1 -0
  16. package/dist/chunk-D53VQGEJ.js +3262 -0
  17. package/dist/chunk-D53VQGEJ.js.map +1 -0
  18. package/dist/chunk-EJVDBITD.cjs +501 -0
  19. package/dist/chunk-EJVDBITD.cjs.map +1 -0
  20. package/dist/{chunk-LPLCWZTM.cjs → chunk-FODKPD44.cjs} +555 -159
  21. package/dist/chunk-FODKPD44.cjs.map +1 -0
  22. package/dist/chunk-HOCPSFGA.cjs +3262 -0
  23. package/dist/chunk-HOCPSFGA.cjs.map +1 -0
  24. package/dist/chunk-IPFRWILU.js +1908 -0
  25. package/dist/chunk-IPFRWILU.js.map +1 -0
  26. package/dist/{chunk-FV5AXTSF.cjs → chunk-JSSBHMMU.cjs} +36 -188
  27. package/dist/chunk-JSSBHMMU.cjs.map +1 -0
  28. package/dist/chunk-LF4WOZXZ.js +159 -0
  29. package/dist/chunk-LF4WOZXZ.js.map +1 -0
  30. package/dist/{chunk-26PGXHY7.cjs → chunk-M7O4BJRH.cjs} +36 -36
  31. package/dist/{chunk-26PGXHY7.cjs.map → chunk-M7O4BJRH.cjs.map} +1 -1
  32. package/dist/chunk-N3467VD6.js +501 -0
  33. package/dist/chunk-N3467VD6.js.map +1 -0
  34. package/dist/{chunk-ST7E3NEE.cjs → chunk-PAOWHJ5O.cjs} +18 -337
  35. package/dist/chunk-PAOWHJ5O.cjs.map +1 -0
  36. package/dist/{chunk-EUVSQ25B.js → chunk-SEBYNBHW.js} +85 -46
  37. package/dist/chunk-SEBYNBHW.js.map +1 -0
  38. package/dist/chunk-SMJGE7HM.cjs +1908 -0
  39. package/dist/chunk-SMJGE7HM.cjs.map +1 -0
  40. package/dist/{chunk-MMVHBKMM.js → chunk-T2P5TIZ6.js} +2 -2
  41. package/dist/{chunk-FGW5OWJ4.js → chunk-VJUML33I.js} +4 -156
  42. package/dist/chunk-VJUML33I.js.map +1 -0
  43. package/dist/{chunk-5OVJHMZQ.cjs → chunk-ZYZGEILO.cjs} +332 -293
  44. package/dist/chunk-ZYZGEILO.cjs.map +1 -0
  45. package/dist/export/index.cjs +4 -2
  46. package/dist/export/index.cjs.map +1 -1
  47. package/dist/export/index.js +5 -3
  48. package/dist/{export-b6NjCZ5-.d.cts → export-BXxSGBCq.d.cts} +67 -5
  49. package/dist/{export-_1dUKwpF.d.ts → export-Dm44YUvS.d.ts} +67 -5
  50. package/dist/export-Dv0-ZVrV.d.cts +501 -0
  51. package/dist/export-Dv0-ZVrV.d.ts +501 -0
  52. package/dist/{retouch-Do6tBs2H.d.ts → flow-BMtHAmg4.d.ts} +561 -2
  53. package/dist/{retouch-Bxkuc0KH.d.cts → flow-COCB42TP.d.cts} +561 -2
  54. package/dist/image-editor/index.cjs +1227 -934
  55. package/dist/image-editor/index.cjs.map +1 -1
  56. package/dist/image-editor/index.d.cts +18 -10
  57. package/dist/image-editor/index.d.ts +18 -10
  58. package/dist/image-editor/index.js +324 -31
  59. package/dist/image-editor/index.js.map +1 -1
  60. package/dist/index.cjs +4 -2
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.js +5 -3
  63. package/dist/index.js.map +1 -1
  64. package/dist/kernel-wasm-WYCGNZR4.js +10 -0
  65. package/dist/kernel-wasm-WYCGNZR4.js.map +1 -0
  66. package/dist/kernel-wasm-YPVAEMVN.cjs +10 -0
  67. package/dist/kernel-wasm-YPVAEMVN.cjs.map +1 -0
  68. package/dist/paint/index.cjs +165 -3
  69. package/dist/paint/index.cjs.map +1 -1
  70. package/dist/paint/index.d.cts +225 -3
  71. package/dist/paint/index.d.ts +225 -3
  72. package/dist/paint/index.js +166 -4
  73. package/dist/paint-editor/index.cjs +4691 -845
  74. package/dist/paint-editor/index.cjs.map +1 -1
  75. package/dist/paint-editor/index.d.cts +1525 -277
  76. package/dist/paint-editor/index.d.ts +1525 -277
  77. package/dist/paint-editor/index.js +4561 -715
  78. package/dist/paint-editor/index.js.map +1 -1
  79. package/dist/raster/index.cjs +4 -3
  80. package/dist/raster/index.cjs.map +1 -1
  81. package/dist/raster/index.js +10 -9
  82. package/dist/{svg-BnRj0q8i.d.cts → svg-CVdFc80-.d.cts} +2 -2
  83. package/dist/{svg-CmmBFfGT.d.ts → svg-DlEuhwoX.d.ts} +2 -2
  84. package/dist/{types-1SUQKDAw.d.ts → types-CDLGhAZp.d.ts} +40 -2
  85. package/dist/{types-yINF17Ta.d.cts → types-Tfly4Aya.d.cts} +40 -2
  86. package/dist/vector/index.cjs +1897 -975
  87. package/dist/vector/index.cjs.map +1 -1
  88. package/dist/vector/index.d.cts +292 -32
  89. package/dist/vector/index.d.ts +292 -32
  90. package/dist/vector/index.js +928 -6
  91. package/dist/vector/index.js.map +1 -1
  92. package/dist/video-editor/index.cjs +502 -2165
  93. package/dist/video-editor/index.cjs.map +1 -1
  94. package/dist/video-editor/index.d.cts +3 -501
  95. package/dist/video-editor/index.d.ts +3 -501
  96. package/dist/video-editor/index.js +151 -1814
  97. package/dist/video-editor/index.js.map +1 -1
  98. package/package.json +4 -2
  99. package/skills/pixerate-image-editor/SKILL.md +1 -0
  100. package/skills/pixerate-image-editor/references/color-management.md +8 -3
  101. package/skills/pixerate-image-editor/references/photoshop-files.md +15 -9
  102. package/skills/pixerate-paint-editor/SKILL.md +136 -4
  103. package/skills/pixerate-vector/SKILL.md +22 -1
  104. package/dist/chunk-5OVJHMZQ.cjs.map +0 -1
  105. package/dist/chunk-C6C5PDKU.js.map +0 -1
  106. package/dist/chunk-DFQEX3AM.cjs.map +0 -1
  107. package/dist/chunk-EUVSQ25B.js.map +0 -1
  108. package/dist/chunk-FGW5OWJ4.js.map +0 -1
  109. package/dist/chunk-FV5AXTSF.cjs.map +0 -1
  110. package/dist/chunk-GX332W2C.js +0 -181
  111. package/dist/chunk-GX332W2C.js.map +0 -1
  112. package/dist/chunk-LKCYANMW.js.map +0 -1
  113. package/dist/chunk-LPLCWZTM.cjs.map +0 -1
  114. package/dist/chunk-MUUXNRU4.cjs +0 -181
  115. package/dist/chunk-MUUXNRU4.cjs.map +0 -1
  116. package/dist/chunk-ST7E3NEE.cjs.map +0 -1
  117. package/dist/chunk-TCKIXI46.cjs +0 -1136
  118. package/dist/chunk-TCKIXI46.cjs.map +0 -1
  119. package/dist/chunk-UBIXVXPR.js +0 -1136
  120. package/dist/chunk-UBIXVXPR.js.map +0 -1
  121. package/dist/chunk-VXR7XWMF.js.map +0 -1
  122. /package/dist/{chunk-MMVHBKMM.js.map → chunk-T2P5TIZ6.js.map} +0 -0
@@ -358,7 +358,7 @@ import {
358
358
  writePsd,
359
359
  xyToTempTint,
360
360
  xyToUv
361
- } from "../chunk-EUVSQ25B.js";
361
+ } from "../chunk-SEBYNBHW.js";
362
362
  import {
363
363
  loadDocument
364
364
  } from "../chunk-U5HZSFCS.js";
@@ -377,16 +377,13 @@ import {
377
377
  PatternPlacement,
378
378
  PatternTile,
379
379
  TransformTooLargeError,
380
- base64ToBytes,
381
380
  blendTile,
382
381
  builtinPattern,
383
382
  builtinPatternIds,
384
- bytesToBase64,
385
383
  changedTiles,
386
384
  compositeSurfaceOver,
387
385
  convertSurfaceDepth,
388
386
  curveLut,
389
- decodePng,
390
387
  deepBytes,
391
388
  deepTile,
392
389
  defaultEffectGradient,
@@ -397,7 +394,6 @@ import {
397
394
  effectsFingerprint,
398
395
  effectsMargin,
399
396
  effectsScale,
400
- encodePng,
401
397
  findLayer,
402
398
  flattenLayers,
403
399
  gaussianBlur,
@@ -408,7 +404,6 @@ import {
408
404
  isInterpolation,
409
405
  isLayerEffectKind,
410
406
  isLayerLocked,
411
- isPng,
412
407
  keysWeight,
413
408
  layerEffectFields,
414
409
  layerEffectLabel,
@@ -416,9 +411,7 @@ import {
416
411
  mergeLayerEffect,
417
412
  newEffectId,
418
413
  normalizeLayerEffects,
419
- parseDataUrl,
420
414
  parseEffectColor,
421
- pngDataUrl,
422
415
  proxyOf,
423
416
  readDeepRegion,
424
417
  reduceSurface,
@@ -445,16 +438,23 @@ import {
445
438
  warpSurface,
446
439
  workingToSamples,
447
440
  writeDeepRegion
448
- } from "../chunk-C6C5PDKU.js";
441
+ } from "../chunk-D53KSJUV.js";
449
442
  import {
450
443
  applyHomography,
444
+ base64ToBytes,
451
445
  boxQuad,
446
+ bytesToBase64,
447
+ decodePng,
448
+ encodePng,
452
449
  homographyFromAffine,
453
450
  homographyFromPoints,
454
451
  invertHomography,
452
+ isPng,
455
453
  multiplyHomographies,
454
+ parseDataUrl,
455
+ pngDataUrl,
456
456
  rectToQuad
457
- } from "../chunk-GX332W2C.js";
457
+ } from "../chunk-N3467VD6.js";
458
458
  import {
459
459
  DEFAULT_RETOUCH,
460
460
  RETOUCH_SAMPLES,
@@ -473,6 +473,9 @@ import {
473
473
  maskBounds,
474
474
  membraneFill,
475
475
  normalizeRetouch,
476
+ paintPathStroke,
477
+ pathStrokeCoverage,
478
+ pathStrokeDabs,
476
479
  perDabStrength,
477
480
  readSourceRegion,
478
481
  rgbaViewOfGrey,
@@ -485,47 +488,125 @@ import {
485
488
  spotHealPixels,
486
489
  spotHealWindow,
487
490
  toneOf
488
- } from "../chunk-LKCYANMW.js";
491
+ } from "../chunk-ARQ7PQ6Q.js";
489
492
  import {
493
+ BODY_SCATTER,
490
494
  CoverageMap,
491
495
  DEFAULT_BLENDER,
492
496
  DEFAULT_BRUSH,
497
+ DEFAULT_FLOW,
493
498
  DEFAULT_MIXER,
494
499
  DEFAULT_SMUDGE,
500
+ DEFAULT_WET_PAPER,
501
+ DEFAULT_WET_PARAMS,
502
+ DRY_EPS,
495
503
  DabWalker,
496
504
  EMPTY_MIXER_LOAD,
505
+ EX,
506
+ EY,
507
+ FLAG_ALIVE,
508
+ FLAG_BOTTOM,
509
+ FLAG_LEFT,
510
+ FLAG_RIGHT,
511
+ FLAG_TOP,
512
+ FLAG_WET,
513
+ FLAT,
514
+ FREE_INTERVAL,
515
+ HIDE,
516
+ MAX_BATCH,
497
517
  MAX_BRUSH_SIZE,
518
+ MAX_TILT_ACCEL,
519
+ MAX_WET_LANES,
520
+ MAX_WET_SLOTS,
498
521
  MIXER_DRAIN,
499
522
  MIXER_PICKUP_RATE,
500
523
  MIXING_MODELS,
501
524
  MixerStroke,
525
+ OPP,
526
+ PAPER_CAPACITY,
527
+ PARAM,
528
+ PARAM_FLOATS,
529
+ PIGMENT_CHANNELS,
530
+ PIGMENT_UNIT,
531
+ PLANE,
532
+ PLANE_BYTES,
533
+ P_D0,
534
+ P_EDGE,
535
+ P_FX,
536
+ P_FY,
537
+ P_H,
538
+ P_P0,
539
+ P_RHO,
540
+ P_SW,
541
+ P_UX,
542
+ P_UY,
502
543
  PaintExchange,
544
+ SET_PLANES,
545
+ SLOT_BYTES,
546
+ SLOT_PLANES,
547
+ SLOT_SIDE,
548
+ SRGB_TO_LINEAR,
549
+ STRIP,
503
550
  SmudgeTip,
504
551
  StrokeCoverage,
505
552
  TileMedium,
553
+ U_MAX,
554
+ W9,
555
+ WET_FLOW_KINDS,
556
+ WET_PARAM_KEYS,
557
+ WET_TILE,
558
+ WetMedium,
559
+ WetWorkerPool,
560
+ WetWorld,
561
+ WetWorldError,
506
562
  applyStrokeToTile,
507
563
  blendRadius,
508
564
  blenderDab,
565
+ canShareMemory,
509
566
  cleanMixer,
510
567
  coverageTileCoord,
511
568
  createBlenderScratch,
512
569
  createPigmentTools,
513
570
  dabCoverage,
514
571
  dabRect,
572
+ dexp,
573
+ dlog,
574
+ dpow,
575
+ dsincos,
576
+ edgeBits,
515
577
  exchangeRates,
578
+ expNeg,
579
+ filmPixel,
580
+ filmReflectance,
581
+ flowField,
582
+ latticeViscosity,
583
+ linearToSrgb8,
516
584
  loadMixer,
585
+ loadWetKernel,
517
586
  mixerRates,
518
587
  normalizeBlender,
519
588
  normalizeBrush,
589
+ normalizeFlow,
520
590
  normalizeMixer,
521
591
  normalizeSmudge,
592
+ normalizeTilt,
593
+ normalizeWetParams,
594
+ packWetParams,
595
+ pigmentColor,
596
+ pigmentOf,
597
+ pixelPigment,
522
598
  rasterizeDab,
599
+ shadeTile,
523
600
  smoothPoints,
601
+ srgbByteToLinear,
602
+ stepSlotTs,
524
603
  tipFalloff,
525
604
  tipReach,
526
605
  tipShape,
527
- walkDabs
528
- } from "../chunk-UBIXVXPR.js";
606
+ walkDabs,
607
+ wetSimdSupported,
608
+ wetSupport
609
+ } from "../chunk-D53VQGEJ.js";
529
610
  import {
530
611
  BLEND_MODES,
531
612
  PAINTERLY_BLEND_MODES,
@@ -642,7 +723,7 @@ import {
642
723
  warpMeshParamAt,
643
724
  warpMeshRows,
644
725
  warpPresetMesh
645
- } from "../chunk-VXR7XWMF.js";
726
+ } from "../chunk-7LNZAWSJ.js";
646
727
  import "../chunk-YCSFS3GK.js";
647
728
  import "../chunk-ZRJMJIQU.js";
648
729
  import "../chunk-TGD52FEZ.js";
@@ -2168,7 +2249,7 @@ function checkPixels(p) {
2168
2249
  if (p.data.length < n * 4) throw new Error("Pixel data is shorter than width \xD7 height \xD7 4");
2169
2250
  return n;
2170
2251
  }
2171
- var SRGB_TO_LINEAR = (() => {
2252
+ var SRGB_TO_LINEAR2 = (() => {
2172
2253
  const t = new Float32Array(256);
2173
2254
  for (let i = 0; i < 256; i++) {
2174
2255
  const v = i / 255;
@@ -2178,9 +2259,9 @@ var SRGB_TO_LINEAR = (() => {
2178
2259
  })();
2179
2260
  var labF = (t) => t > 216 / 24389 ? Math.cbrt(t) : (24389 / 27 * t + 16) / 116;
2180
2261
  function srgb8ToLab(r, g, b) {
2181
- const rl = SRGB_TO_LINEAR[r & 255];
2182
- const gl = SRGB_TO_LINEAR[g & 255];
2183
- const bl = SRGB_TO_LINEAR[b & 255];
2262
+ const rl = SRGB_TO_LINEAR2[r & 255];
2263
+ const gl = SRGB_TO_LINEAR2[g & 255];
2264
+ const bl = SRGB_TO_LINEAR2[b & 255];
2184
2265
  const x = (0.4124564 * rl + 0.3575761 * gl + 0.1804375 * bl) / 0.95047;
2185
2266
  const y = 0.2126729 * rl + 0.7151522 * gl + 0.072175 * bl;
2186
2267
  const z = (0.0193339 * rl + 0.119192 * gl + 0.9503041 * bl) / 1.08883;
@@ -3098,6 +3179,44 @@ var FreeTransformSession = class {
3098
3179
 
3099
3180
  // src/image-editor/color-management.ts
3100
3181
  var DEFAULT_PROOF = { intent: "relative", bpc: true, simulatePaper: false, gamutWarning: false };
3182
+ function serializeColorMode(m) {
3183
+ return m.mode === "cmyk" ? { mode: "cmyk", profile: serializeColorProfile(m.profile), intent: m.intent } : { mode: "lab" };
3184
+ }
3185
+ function deserializeColorMode(raw, problems) {
3186
+ const r = raw;
3187
+ if (!r || typeof r !== "object") return null;
3188
+ if (r.mode === "lab") return { mode: "lab" };
3189
+ if (r.mode !== "cmyk") return null;
3190
+ const profile = r.profile && deserializeColorProfile(r.profile, problems) || documentProfile("coated-cmyk");
3191
+ const intent = ["perceptual", "relative", "saturation", "absolute"].includes(r.intent) ? r.intent : "relative";
3192
+ return { mode: "cmyk", profile, intent };
3193
+ }
3194
+ function effectiveProof(proof, mode) {
3195
+ if (proof) return proof;
3196
+ if (mode?.mode === "cmyk") return { ...DEFAULT_PROOF, profile: mode.profile, intent: mode.intent };
3197
+ return null;
3198
+ }
3199
+ function colorModePlanes(doc, mode) {
3200
+ const src = resolveProfile(doc);
3201
+ if (mode.mode === "cmyk") {
3202
+ const t2 = Transform.create(src, resolveProfile(mode.profile), { intent: mode.intent, bpc: true });
3203
+ return (rgba, n) => {
3204
+ const ink = new Uint8Array(n * 4);
3205
+ t2.convert8(rgba, 4, ink, 4, false);
3206
+ const planes = [0, 1, 2, 3].map(() => new Uint8Array(n));
3207
+ for (let i = 0; i < n; i++) for (let c = 0; c < 4; c++) planes[c][i] = 255 - ink[i * 4 + c];
3208
+ return planes;
3209
+ };
3210
+ }
3211
+ const t = Transform.create(src, builtinProfile("lab-d50"), { intent: "relative", bpc: false });
3212
+ return (rgba, n) => {
3213
+ const lab = new Uint8Array(n * 4);
3214
+ t.convert8(rgba, 4, lab, 4, false);
3215
+ const planes = [0, 1, 2].map(() => new Uint8Array(n));
3216
+ for (let i = 0; i < n; i++) for (let c = 0; c < 3; c++) planes[c][i] = lab[i * 4 + c];
3217
+ return planes;
3218
+ };
3219
+ }
3101
3220
  var resolved = /* @__PURE__ */ new WeakMap();
3102
3221
  var fromBytes = /* @__PURE__ */ new Map();
3103
3222
  function resolveProfile(doc) {
@@ -3649,13 +3768,14 @@ var ImageEditorController = class {
3649
3768
  this.listeners.forEach((l) => l(currentState));
3650
3769
  }
3651
3770
  displayFor = null;
3652
- /** Keeps the renderer's display transform in step with the document profile and Proof Setup. */
3771
+ /** Keeps the renderer's display transform in step with the document profile, mode and Proof Setup. */
3653
3772
  syncDisplay() {
3654
3773
  const s = this.state;
3655
- if (this.displayFor && this.displayFor[0] === s.colorProfile && this.displayFor[1] === s.proofSetup) return;
3656
- this.displayFor = [s.colorProfile, s.proofSetup];
3774
+ const d = this.displayFor;
3775
+ if (d && d[0] === s.colorProfile && d[1] === s.proofSetup && d[2] === s.colorMode) return;
3776
+ this.displayFor = [s.colorProfile, s.proofSetup, s.colorMode];
3657
3777
  try {
3658
- this.renderer.setDisplayTransform(displayTransform(s.colorProfile, s.proofSetup));
3778
+ this.renderer.setDisplayTransform(displayTransform(s.colorProfile, effectiveProof(s.proofSetup, s.colorMode)));
3659
3779
  } catch {
3660
3780
  this.renderer.setDisplayTransform(null);
3661
3781
  }
@@ -3698,6 +3818,7 @@ var ImageEditorController = class {
3698
3818
  if (s.globalLight) entry.globalLight = { ...s.globalLight };
3699
3819
  if (s.patterns) entry.patterns = s.patterns;
3700
3820
  if (s.colorProfile) entry.colorProfile = s.colorProfile;
3821
+ if (s.colorMode) entry.colorMode = s.colorMode;
3701
3822
  if (s.bitDepth && s.bitDepth !== 8) entry.bitDepth = s.bitDepth;
3702
3823
  return entry;
3703
3824
  }
@@ -3719,6 +3840,8 @@ var ImageEditorController = class {
3719
3840
  else delete s.bitDepth;
3720
3841
  if (entry.colorProfile) s.colorProfile = entry.colorProfile;
3721
3842
  else delete s.colorProfile;
3843
+ if (entry.colorMode) s.colorMode = entry.colorMode;
3844
+ else delete s.colorMode;
3722
3845
  s.selection = entry.selection;
3723
3846
  if (this.imageElement !== entry.source.element && !this.samplePixelsOverride) this.samplePixels = null;
3724
3847
  this.imageElement = entry.source.element;
@@ -6790,11 +6913,45 @@ var ImageEditorController = class {
6790
6913
  }
6791
6914
  // --- PSD ---
6792
6915
  // --- Colour management ---
6793
- /** The document's colour profile: its name, built-in id (or `null` for an embedded profile) and colour space. */
6916
+ /** The document's colour profile: its name, built-in id (or `null` for an embedded profile), colour space, and Image › Mode. */
6794
6917
  getColorProfile() {
6795
6918
  const doc = this.state.colorProfile;
6796
6919
  const p = resolveProfile(doc);
6797
- return { name: doc?.name ?? p.description, builtin: doc ? doc.builtin ?? null : "srgb", colorSpace: p.colorSpace, srgb: isSrgb(doc) };
6920
+ const m = this.state.colorMode;
6921
+ const out = { name: doc?.name ?? p.description, builtin: doc ? doc.builtin ?? null : "srgb", colorSpace: p.colorSpace, srgb: isSrgb(doc), mode: m?.mode ?? "rgb" };
6922
+ if (m?.mode === "cmyk") out.cmykProfile = { name: m.profile.name, builtin: m.profile.builtin ?? null, intent: m.intent };
6923
+ return out;
6924
+ }
6925
+ /**
6926
+ * Image › Mode (one undo step): `rgb`, `cmyk` (with a CMYK `profile`, default the coated
6927
+ * CMYK, and the `intent` RGB is separated with) or `lab`. The pixels stay RGB in the working
6928
+ * space; a CMYK document is soft-proofed through its profile in the viewport, and PSD export
6929
+ * writes CMYK or Lab channels. Returns the profile summary.
6930
+ */
6931
+ setColorMode(mode, options = {}) {
6932
+ let next;
6933
+ if (mode === "rgb") {
6934
+ if (options.profile !== void 0) throw new LayerOperationError("An RGB document takes no CMYK profile; use assign_profile for its working space.");
6935
+ next = null;
6936
+ } else if (mode === "lab") next = { mode: "lab" };
6937
+ else if (mode === "cmyk") {
6938
+ let doc;
6939
+ try {
6940
+ doc = documentProfile(options.profile ?? "coated-cmyk");
6941
+ } catch (e) {
6942
+ throw new LayerOperationError(e instanceof Error ? e.message : String(e));
6943
+ }
6944
+ const cs = resolveProfile(doc).colorSpace;
6945
+ if (cs !== "cmyk") throw new LayerOperationError(`CMYK mode needs a CMYK profile; "${doc.name}" is ${cs.toUpperCase()}.`);
6946
+ const intent = options.intent ?? "relative";
6947
+ if (!INTENTS.includes(intent)) throw new LayerOperationError(`Unknown rendering intent "${String(intent)}"; use ${INTENTS.join(", ")}.`);
6948
+ next = { mode: "cmyk", profile: doc, intent };
6949
+ } else throw new LayerOperationError(`Unknown colour mode "${String(mode)}"; use rgb, cmyk or lab.`);
6950
+ this.recordHistory();
6951
+ if (next) this.state.colorMode = next;
6952
+ else delete this.state.colorMode;
6953
+ this.notify();
6954
+ return this.getColorProfile();
6798
6955
  }
6799
6956
  /** Resolves a profile argument (built-in id or alias, or ICC bytes) as an RGB document profile. */
6800
6957
  rgbProfileArg(profile, action) {
@@ -6945,6 +7102,16 @@ var ImageEditorController = class {
6945
7102
  });
6946
7103
  return { bitDepth: depth, changedLayerIds: changed };
6947
7104
  }
7105
+ /** How `toPsd` writes colour: RGB with the working space, or CMYK / Lab channels for those modes. */
7106
+ psdColorOptions(warnings) {
7107
+ const m = this.state.colorMode;
7108
+ if (!m) return { iccProfile: profileBytes(this.state.colorProfile) };
7109
+ if (flattenLayers(this.state.layers).some((l) => l.type === "adjustment" && l.visible)) {
7110
+ warnings.push(`Adjustment layers were written with their RGB settings; in a ${m.mode.toUpperCase()} file Photoshop applies them to its own channels, so they may look different there.`);
7111
+ }
7112
+ const planes = colorModePlanes(this.state.colorProfile, m);
7113
+ return m.mode === "cmyk" ? { colorMode: "cmyk", colorPlanes: planes, iccProfile: profileBytes(m.profile) } : { colorMode: "lab", colorPlanes: planes };
7114
+ }
6948
7115
  /** Pixels per inch of the last opened PSD (written back by `toPsd`). */
6949
7116
  psdResolution;
6950
7117
  /**
@@ -6980,13 +7147,16 @@ var ImageEditorController = class {
6980
7147
  if (result.bitDepth !== 8) s.bitDepth = result.bitDepth;
6981
7148
  else delete s.bitDepth;
6982
7149
  delete s.colorProfile;
6983
- if (result.iccProfile) {
7150
+ delete s.colorMode;
7151
+ if (result.sourceMode?.mode === "cmyk") s.colorMode = { mode: "cmyk", profile: result.sourceMode.profile, intent: "relative" };
7152
+ else if (result.sourceMode?.mode === "lab") s.colorMode = { mode: "lab" };
7153
+ else if (result.iccProfile) {
6984
7154
  try {
6985
7155
  const doc = documentProfile(result.iccProfile);
6986
7156
  const cs = resolveProfile(doc).colorSpace;
6987
7157
  if (cs === "rgb") {
6988
7158
  if (!isSrgb(doc)) s.colorProfile = doc;
6989
- } else result.warnings.push(`The file's ${cs.toUpperCase()} profile "${doc.name}" was not used; its colours were converted to sRGB numerically.`);
7159
+ } else result.warnings.push(`The file's ${cs.toUpperCase()} profile "${doc.name}" was not used; its colours were read as sRGB.`);
6990
7160
  } catch (e) {
6991
7161
  result.warnings.push(`The embedded ICC profile could not be read (${e instanceof Error ? e.message : String(e)}); colours are read as sRGB.`);
6992
7162
  }
@@ -7152,9 +7322,11 @@ var ImageEditorController = class {
7152
7322
  if (s.legacyOutputBlur) warnings.push("The document-level blur of an old document is not written.");
7153
7323
  for (const [msg, names] of note) warnings.push(`${msg} (${names.length === 1 ? "layer" : "layers"} ${names.map((n) => `"${n}"`).join(", ")}).`);
7154
7324
  const merged = compositor.composite(prepared, canvas, { ...sources, version: `psd:${Date.now()}` });
7155
- const depth = this.bitDepth;
7325
+ const color = this.psdColorOptions(warnings);
7326
+ if (color.colorMode && this.bitDepth !== 8) warnings.push(`${color.colorMode.toUpperCase()} files are written at 8 bits per channel; the ${this.bitDepth}-bit samples were rounded.`);
7327
+ const depth = color.colorMode ? 8 : this.bitDepth;
7156
7328
  const mergedDeep = depth === 8 ? void 0 : workingToSamples(compositeDeep(prepared, canvas, sources, depth), depth);
7157
- const result = exportPsd({ width, height, layers: prepared, merged, mergedDeep, resolution: this.psdResolution, patterns: this.state.patterns, globalLight: this.state.globalLight, depth, iccProfile: profileBytes(this.state.colorProfile) });
7329
+ const result = exportPsd({ width, height, layers: prepared, merged, mergedDeep, resolution: this.psdResolution, patterns: this.state.patterns, globalLight: this.state.globalLight, depth, ...color });
7158
7330
  warnings.push(...result.warnings);
7159
7331
  return { bytes: result.bytes, warnings, psb: result.psb, width, height };
7160
7332
  }
@@ -7305,6 +7477,9 @@ var ImageEditorController = class {
7305
7477
  const profile = data.colorProfile ? deserializeColorProfile(data.colorProfile, problems) : null;
7306
7478
  if (profile) s.colorProfile = profile;
7307
7479
  else delete s.colorProfile;
7480
+ const cmode = data.colorMode ? deserializeColorMode(data.colorMode, problems) : null;
7481
+ if (cmode) s.colorMode = cmode;
7482
+ else delete s.colorMode;
7308
7483
  if (!this.imageElement && typeof data.width === "number" && typeof data.height === "number" && data.width > 0 && data.height > 0) {
7309
7484
  s.imageDimensions = { width: data.width, height: data.height };
7310
7485
  }
@@ -7322,6 +7497,7 @@ var ImageEditorController = class {
7322
7497
  delete s.patterns;
7323
7498
  delete s.bitDepth;
7324
7499
  delete s.colorProfile;
7500
+ delete s.colorMode;
7325
7501
  }
7326
7502
  s.activeTarget = "pixels";
7327
7503
  this.viewKey = [];
@@ -7331,7 +7507,7 @@ var ImageEditorController = class {
7331
7507
  serializeState() {
7332
7508
  const { width, height } = this.naturalSize;
7333
7509
  const view = legacyView(this.stack(), width, height, null);
7334
- if (view.exact && !this.state.globalLight && !this.state.patterns?.length && this.bitDepth === 8 && !this.state.colorProfile) {
7510
+ if (view.exact && !this.state.globalLight && !this.state.patterns?.length && this.bitDepth === 8 && !this.state.colorProfile && !this.state.colorMode) {
7335
7511
  return {
7336
7512
  // States without adjustment layers keep schema 1, so they round-trip unchanged.
7337
7513
  version: view.adjustments.layers?.length ? 2 : 1,
@@ -7363,6 +7539,7 @@ var ImageEditorController = class {
7363
7539
  if (smartContents) out.smartContents = smartContents;
7364
7540
  if (this.state.bitDepth === 16 || this.state.bitDepth === 32) out.bitDepth = this.state.bitDepth;
7365
7541
  if (this.state.colorProfile) out.colorProfile = serializeColorProfile(this.state.colorProfile);
7542
+ if (this.state.colorMode) out.colorMode = serializeColorMode(this.state.colorMode);
7366
7543
  return out;
7367
7544
  }
7368
7545
  };
@@ -10104,7 +10281,7 @@ function createImageColorTools(controller) {
10104
10281
  const getProfile = {
10105
10282
  name: "get_color_profile",
10106
10283
  title: "Get the colour profile",
10107
- description: "Reads the document's colour profile (its working space: name, builtin id or null for an embedded profile, colorSpace, srgb true when it means sRGB), the Proof Setup (profile, intent, bpc, simulatePaper, gamutWarning, or null) and the built-in profiles you can assign, convert to or proof with ({id, description, colorSpace}).",
10284
+ description: "Reads the document's colour profile (its working space: name, builtin id or null for an embedded profile, colorSpace, srgb true when it means sRGB, mode rgb / cmyk / lab and, for cmyk, cmykProfile), the Proof Setup (profile, intent, bpc, simulatePaper, gamutWarning, or null) and the built-in profiles you can assign, convert to or proof with ({id, description, colorSpace}).",
10108
10285
  inputSchema: { type: "object", properties: {}, additionalProperties: false },
10109
10286
  annotations: { title: "Get the colour profile", ...READ5 },
10110
10287
  handler: () => {
@@ -10199,7 +10376,30 @@ function createImageColorTools(controller) {
10199
10376
  })
10200
10377
  })
10201
10378
  };
10202
- return [getProfile, assign, convert, proof, convertColors];
10379
+ const setMode = {
10380
+ name: "set_color_mode",
10381
+ title: "Set the colour mode",
10382
+ description: "Image \u203A Mode: rgb, cmyk (for print: give the press `profile`, default coated-cmyk, and the `intent` RGB is separated with) or lab. The document is still edited as RGB in its working space; a CMYK document is soft-proofed through its profile in the viewport (unless set_proof_setup says otherwise), and export_psd writes CMYK or Lab channels with the profile. Changes no pixels. One undo step. Returns the profile summary with mode and cmykProfile.",
10383
+ inputSchema: {
10384
+ type: "object",
10385
+ properties: {
10386
+ mode: { type: "string", enum: ["rgb", "cmyk", "lab"], description: "The colour mode." },
10387
+ profile: { ...PROFILE, description: `CMYK mode only: the CMYK profile (default coated-cmyk). ${PROFILE.description}` },
10388
+ intent: INTENT
10389
+ },
10390
+ required: ["mode"],
10391
+ additionalProperties: false
10392
+ },
10393
+ annotations: { title: "Set the colour mode", readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
10394
+ handler: (args) => {
10395
+ if (args.mode !== "cmyk" && (args.profile !== void 0 || args.intent !== void 0)) throw new LayerOperationError("profile and intent apply to CMYK mode only.");
10396
+ return controller.setColorMode(args.mode, {
10397
+ ...args.profile !== void 0 ? { profile: profileArg(args.profile) } : {},
10398
+ ...args.intent !== void 0 ? { intent: args.intent } : {}
10399
+ });
10400
+ }
10401
+ };
10402
+ return [getProfile, assign, convert, proof, convertColors, setMode];
10203
10403
  }
10204
10404
 
10205
10405
  // src/image-editor/retouch-tools.ts
@@ -13145,12 +13345,19 @@ var INTENT_OPTIONS = [
13145
13345
  { id: "saturation", label: "Saturation", title: "Keep colours vivid (graphics)" },
13146
13346
  { id: "absolute", label: "Absolute Colorimetric", title: "Keep the source white too (paper proofs)" }
13147
13347
  ];
13348
+ var COLOR_MODE_OPTIONS = [
13349
+ { id: "rgb", label: "RGB", title: "Edit and export RGB in the working space" },
13350
+ { id: "cmyk", label: "CMYK", title: "For print: proof through the CMYK profile and export CMYK" },
13351
+ { id: "lab", label: "Lab", title: "Export Lab channels" }
13352
+ ];
13148
13353
  function colorPanelView(controller) {
13149
13354
  const profile = controller.getColorProfile();
13150
13355
  const proof = controller.getState().proofSetup ?? null;
13151
13356
  return {
13152
13357
  profileName: profile.name,
13153
13358
  workingSpace: profile.builtin,
13359
+ mode: profile.mode,
13360
+ cmykProfileName: profile.cmykProfile?.name ?? null,
13154
13361
  proof: proof ? { id: proof.profile.builtin ?? null, name: proof.profile.name, intent: proof.intent, simulatePaper: proof.simulatePaper, gamutWarning: proof.gamutWarning, bpc: proof.bpc } : null
13155
13362
  };
13156
13363
  }
@@ -13771,8 +13978,10 @@ export {
13771
13978
  BIT_DEPTH_OPTIONS,
13772
13979
  BLEND_MODES,
13773
13980
  BLUR_FILTER_ID,
13981
+ BODY_SCATTER,
13774
13982
  BRUSH_OPTION_CONTROLS,
13775
13983
  BUILTIN_PROFILES,
13984
+ COLOR_MODE_OPTIONS,
13776
13985
  CoverageMap,
13777
13986
  D50,
13778
13987
  D65,
@@ -13781,6 +13990,7 @@ export {
13781
13990
  DEFAULT_BLENDER,
13782
13991
  DEFAULT_BRUSH,
13783
13992
  DEFAULT_DEPTH_MASK,
13993
+ DEFAULT_FLOW,
13784
13994
  DEFAULT_GLOBAL_LIGHT,
13785
13995
  DEFAULT_MITER_LIMIT,
13786
13996
  DEFAULT_MIXER,
@@ -13793,12 +14003,25 @@ export {
13793
14003
  DEFAULT_TEXT_STYLE,
13794
14004
  DEFAULT_TRANSFORM,
13795
14005
  DEFAULT_TYPE_TOOL_OPTIONS,
14006
+ DEFAULT_WET_PAPER,
14007
+ DEFAULT_WET_PARAMS,
13796
14008
  DEPTH_MASK_CONTROLS,
13797
14009
  DEVELOP_FILTER_ID,
13798
14010
  DIRECT_GAUSSIAN_MAX_SIGMA,
14011
+ DRY_EPS,
13799
14012
  DabWalker,
13800
14013
  EMPTY_DISTANCE,
13801
14014
  EMPTY_MIXER_LOAD,
14015
+ EX,
14016
+ EY,
14017
+ FLAG_ALIVE,
14018
+ FLAG_BOTTOM,
14019
+ FLAG_LEFT,
14020
+ FLAG_RIGHT,
14021
+ FLAG_TOP,
14022
+ FLAG_WET,
14023
+ FLAT,
14024
+ FREE_INTERVAL,
13802
14025
  FREE_TRANSFORM_CONTENTS,
13803
14026
  FREE_TRANSFORM_FIELDS,
13804
14027
  FREE_TRANSFORM_MODES,
@@ -13806,6 +14029,7 @@ export {
13806
14029
  FreeTransformSession,
13807
14030
  FreeTransformTool,
13808
14031
  GUIDED_FILTER_EPS,
14032
+ HIDE,
13809
14033
  HISTOGRAM_BINS,
13810
14034
  HUE_RANGE_LABELS,
13811
14035
  IDENTITY_MATRIX3,
@@ -13829,10 +14053,14 @@ export {
13829
14053
  LayerCompositor,
13830
14054
  LayerEffectError,
13831
14055
  LayerOperationError,
14056
+ MAX_BATCH,
13832
14057
  MAX_BRUSH_SIZE,
13833
14058
  MAX_EFFECT_REACH,
13834
14059
  MAX_KELVIN,
14060
+ MAX_TILT_ACCEL,
13835
14061
  MAX_TRANSFORM_PIXELS,
14062
+ MAX_WET_LANES,
14063
+ MAX_WET_SLOTS,
13836
14064
  MIN_KELVIN,
13837
14065
  MIRED_PER_TEMPERATURE_UNIT,
13838
14066
  MIXER_DRAIN,
@@ -13841,17 +14069,35 @@ export {
13841
14069
  MIXER_PICKUP_RATE,
13842
14070
  MIXING_MODELS,
13843
14071
  MixerStroke,
14072
+ OPP,
13844
14073
  PAINTERLY_BLEND_MODES,
13845
14074
  PAINT_TOOLS,
14075
+ PAPER_CAPACITY,
13846
14076
  PARAGRAPH_STYLE_FIELDS,
14077
+ PARAM,
14078
+ PARAM_FLOATS,
13847
14079
  PATTERN_BLOCK_KEYS,
13848
14080
  PIGMENT_BANDS,
14081
+ PIGMENT_CHANNELS,
13849
14082
  PIGMENT_LAMBDA_MIN,
13850
14083
  PIGMENT_LAMBDA_STEP,
14084
+ PIGMENT_UNIT,
13851
14085
  PIGMENT_WAVELENGTHS,
14086
+ PLANE,
14087
+ PLANE_BYTES,
13852
14088
  PROOF_PROFILE_OPTIONS,
13853
14089
  PSD_BLEND_KEYS,
13854
14090
  PSD_FILE_ACCEPT,
14091
+ P_D0,
14092
+ P_EDGE,
14093
+ P_FX,
14094
+ P_FY,
14095
+ P_H,
14096
+ P_P0,
14097
+ P_RHO,
14098
+ P_SW,
14099
+ P_UX,
14100
+ P_UY,
13855
14101
  PaintExchange,
13856
14102
  PaintGesture,
13857
14103
  PaintStrokeSession,
@@ -13870,12 +14116,18 @@ export {
13870
14116
  SELECTION_MODE_LABELS,
13871
14117
  SELECTION_MODIFY_OPS,
13872
14118
  SELECTION_TOOLS,
14119
+ SET_PLANES,
13873
14120
  SHADOW_AMBIENT,
13874
14121
  SHAPE_KIND_LABELS,
13875
14122
  SHAPE_OPERATIONS,
13876
14123
  SHAPE_RENDER_MARGIN,
14124
+ SLOT_BYTES,
14125
+ SLOT_PLANES,
14126
+ SLOT_SIDE,
13877
14127
  SMART_RENDER_MARGIN,
13878
14128
  SPOT_HEAL_TYPES,
14129
+ SRGB_TO_LINEAR,
14130
+ STRIP,
13879
14131
  SUPPORTED_ADJUSTMENT_KEYS,
13880
14132
  SelectionGesture,
13881
14133
  ShapeDrawGesture,
@@ -13898,12 +14150,21 @@ export {
13898
14150
  TiledSurface,
13899
14151
  TransformTooLargeError,
13900
14152
  TypeToolGesture,
14153
+ U_MAX,
13901
14154
  VIBRANCE_GREY,
14155
+ W9,
13902
14156
  WARP_GRID_OPTIONS,
13903
14157
  WARP_STYLES,
13904
14158
  WARP_STYLE_LABELS,
13905
14159
  WARP_STYLE_OPTIONS,
14160
+ WET_FLOW_KINDS,
14161
+ WET_PARAM_KEYS,
14162
+ WET_TILE,
13906
14163
  WORKING_SPACE_OPTIONS,
14164
+ WetMedium,
14165
+ WetWorkerPool,
14166
+ WetWorld,
14167
+ WetWorldError,
13907
14168
  XYZ_D50_TO_SRGB,
13908
14169
  ZlibError,
13909
14170
  activeAdjustmentLayers,
@@ -13968,6 +14229,7 @@ export {
13968
14229
  builtinPatternIds,
13969
14230
  bytesToBase64,
13970
14231
  calculateCropDrag,
14232
+ canShareMemory,
13971
14233
  canvasCompositeOperation,
13972
14234
  canvasToImagePoint,
13973
14235
  caretAt,
@@ -13978,6 +14240,7 @@ export {
13978
14240
  cloneSourceLabel,
13979
14241
  collectTiles,
13980
14242
  colorBalanceChannel,
14243
+ colorModePlanes,
13981
14244
  colorPanelView,
13982
14245
  colorRange,
13983
14246
  combineSelections,
@@ -14057,6 +14320,7 @@ export {
14057
14320
  describeLayerEffects,
14058
14321
  describeSelection,
14059
14322
  describeTransform,
14323
+ deserializeColorMode,
14060
14324
  deserializeColorProfile,
14061
14325
  deserializeEffects,
14062
14326
  deserializeLayer,
@@ -14066,22 +14330,28 @@ export {
14066
14330
  developFilter,
14067
14331
  developFromAdjustments,
14068
14332
  developTarget,
14333
+ dexp,
14069
14334
  dilateMask,
14070
14335
  displayTransform,
14071
14336
  distanceTransform,
14337
+ dlog,
14072
14338
  documentContents,
14073
14339
  documentProfile,
14074
14340
  dodgeBurn,
14075
14341
  dodgeBurnCurve,
14076
14342
  downloadPsd,
14343
+ dpow,
14077
14344
  dragWarpMeshPoint,
14078
14345
  dropPlacement,
14079
14346
  dropZone,
14347
+ dsincos,
14080
14348
  duplicateLayer,
14349
+ edgeBits,
14081
14350
  edgeWidth,
14082
14351
  effectColorHex,
14083
14352
  effectControlChange,
14084
14353
  effectReach,
14354
+ effectiveProof,
14085
14355
  effectsFingerprint,
14086
14356
  effectsMargin,
14087
14357
  effectsScale,
@@ -14097,11 +14367,14 @@ export {
14097
14367
  evalWarpMesh,
14098
14368
  evaluateAdjustmentLayers,
14099
14369
  exchangeRates,
14370
+ expNeg,
14100
14371
  expandCoverage,
14101
14372
  exportPsd,
14102
14373
  extractNormalizedLayerItems,
14103
14374
  featherCoverage,
14104
14375
  fillRect,
14376
+ filmPixel,
14377
+ filmReflectance,
14105
14378
  filterMaskCoverage,
14106
14379
  findAdjustmentControl,
14107
14380
  findLayer,
@@ -14112,6 +14385,7 @@ export {
14112
14385
  flattenLayers,
14113
14386
  flattenPath,
14114
14387
  flipCorners,
14388
+ flowField,
14115
14389
  fontOf,
14116
14390
  formatControlValue,
14117
14391
  fullSelection,
@@ -14191,6 +14465,7 @@ export {
14191
14465
  isValidWarp,
14192
14466
  kelvinToTemperature,
14193
14467
  keysWeight,
14468
+ latticeViscosity,
14194
14469
  layerBadge,
14195
14470
  layerEffectControls,
14196
14471
  layerEffectFields,
@@ -14219,12 +14494,14 @@ export {
14219
14494
  levelsValue,
14220
14495
  linearSrgbToXy,
14221
14496
  linearToSrgb,
14497
+ linearToSrgb8,
14222
14498
  liveComponent,
14223
14499
  liveShapeForDrag,
14224
14500
  liveShapeSubpaths,
14225
14501
  loadImageEditorDocument,
14226
14502
  loadMixer,
14227
14503
  loadOpenTypeFont,
14504
+ loadWetKernel,
14228
14505
  luma,
14229
14506
  magicWand,
14230
14507
  mapCropHandle,
@@ -14261,6 +14538,7 @@ export {
14261
14538
  normalizeBlender,
14262
14539
  normalizeBrush,
14263
14540
  normalizeFilter,
14541
+ normalizeFlow,
14264
14542
  normalizeLayerEffects,
14265
14543
  normalizeLayerMask,
14266
14544
  normalizeLiveShape,
@@ -14277,11 +14555,15 @@ export {
14277
14555
  normalizeStoredAdjustments,
14278
14556
  normalizeSubpaths,
14279
14557
  normalizeText,
14558
+ normalizeTilt,
14559
+ normalizeWetParams,
14280
14560
  offsetLayer,
14281
14561
  offsetShape,
14282
14562
  offsetSmartObject,
14283
14563
  openPsdFile,
14284
14564
  packRgba,
14565
+ packWetParams,
14566
+ paintPathStroke,
14285
14567
  paragraphRanges,
14286
14568
  parseAdjustmentBlock,
14287
14569
  parseBlend,
@@ -14297,11 +14579,16 @@ export {
14297
14579
  parseVersionedDescriptor,
14298
14580
  patchParagraphStyle,
14299
14581
  patchTextStyle,
14582
+ pathStrokeCoverage,
14583
+ pathStrokeDabs,
14300
14584
  perDabStrength,
14301
14585
  photoFilterMatrix,
14302
14586
  pigment8,
14587
+ pigmentColor,
14588
+ pigmentOf,
14303
14589
  pixelLayerBounds,
14304
14590
  pixelLayers,
14591
+ pixelPigment,
14305
14592
  placeContents,
14306
14593
  placeLayer,
14307
14594
  placementAt,
@@ -14396,6 +14683,7 @@ export {
14396
14683
  selectionToCoverage,
14397
14684
  selectionToPixels,
14398
14685
  selectionValueAt,
14686
+ serializeColorMode,
14399
14687
  serializeColorProfile,
14400
14688
  serializeContents,
14401
14689
  serializeEffects,
@@ -14415,6 +14703,7 @@ export {
14415
14703
  setSmartFilterMask,
14416
14704
  setSmartFiltersEnabled,
14417
14705
  setSmartPlacement,
14706
+ shadeTile,
14418
14707
  shapeAsPixelLayer,
14419
14708
  shapeFromAnnotation,
14420
14709
  shapeGeometryBounds,
@@ -14436,10 +14725,12 @@ export {
14436
14725
  spotHealPixels,
14437
14726
  spotHealWindow,
14438
14727
  srgb8ToLab,
14728
+ srgbByteToLinear,
14439
14729
  srgbDecode,
14440
14730
  srgbEncode,
14441
14731
  srgbToLinear,
14442
14732
  standardBlendMode,
14733
+ stepSlotTs,
14443
14734
  styleAt,
14444
14735
  sumHistograms,
14445
14736
  surfaceBytes,
@@ -14513,6 +14804,8 @@ export {
14513
14804
  warpPresetMesh,
14514
14805
  warpSurface,
14515
14806
  wbMatrix,
14807
+ wetSimdSupported,
14808
+ wetSupport,
14516
14809
  whiteBalanceFromSample,
14517
14810
  whiteBalanceMatrix,
14518
14811
  withFilterMaskSurface,