@imgly/codesign-mcp 0.1.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 (816) hide show
  1. package/LICENSE.md +16 -0
  2. package/README.md +158 -0
  3. package/assets/docs/api/SKILL.md +49 -0
  4. package/assets/docs/api/index.d.ts +10518 -0
  5. package/assets/docs/guide/SKILL.md +142 -0
  6. package/assets/docs/guide/actions.md +1038 -0
  7. package/assets/docs/guide/animation/create/base.md +467 -0
  8. package/assets/docs/guide/animation/create/text.md +453 -0
  9. package/assets/docs/guide/animation/create.md +558 -0
  10. package/assets/docs/guide/animation/edit.md +501 -0
  11. package/assets/docs/guide/animation/overview.md +22 -0
  12. package/assets/docs/guide/animation/types.md +430 -0
  13. package/assets/docs/guide/animation.md +23 -0
  14. package/assets/docs/guide/api/AssetAPI.md +602 -0
  15. package/assets/docs/guide/api/BlockAPI.md +6152 -0
  16. package/assets/docs/guide/api/CreativeEngine.md +180 -0
  17. package/assets/docs/guide/api/EditorAPI.md +1261 -0
  18. package/assets/docs/guide/api/EventAPI.md +25 -0
  19. package/assets/docs/guide/api/SceneAPI.md +729 -0
  20. package/assets/docs/guide/api/VariableAPI.md +59 -0
  21. package/assets/docs/guide/api/types.md +71 -0
  22. package/assets/docs/guide/api-reference/overview.md +20 -0
  23. package/assets/docs/guide/automation/auto-resize.md +412 -0
  24. package/assets/docs/guide/automation/batch-processing.md +474 -0
  25. package/assets/docs/guide/automation/data-merge.md +406 -0
  26. package/assets/docs/guide/automation/design-generation.md +107 -0
  27. package/assets/docs/guide/automation/overview.md +16 -0
  28. package/assets/docs/guide/automation.md +24 -0
  29. package/assets/docs/guide/browser-support.md +38 -0
  30. package/assets/docs/guide/capabilities.md +18 -0
  31. package/assets/docs/guide/colors/adjust.md +551 -0
  32. package/assets/docs/guide/colors/apply.md +349 -0
  33. package/assets/docs/guide/colors/basics.md +440 -0
  34. package/assets/docs/guide/colors/conversion.md +504 -0
  35. package/assets/docs/guide/colors/create-color-palette.md +426 -0
  36. package/assets/docs/guide/colors/for-print/cmyk.md +577 -0
  37. package/assets/docs/guide/colors/for-print/spot.md +751 -0
  38. package/assets/docs/guide/colors/for-print.md +21 -0
  39. package/assets/docs/guide/colors/for-screen/p3.md +60 -0
  40. package/assets/docs/guide/colors/for-screen/srgb.md +463 -0
  41. package/assets/docs/guide/colors/for-screen.md +21 -0
  42. package/assets/docs/guide/colors/overview.md +20 -0
  43. package/assets/docs/guide/colors/replace.md +535 -0
  44. package/assets/docs/guide/colors.md +28 -0
  45. package/assets/docs/guide/compatibility.md +27 -0
  46. package/assets/docs/guide/concepts/architecture.md +99 -0
  47. package/assets/docs/guide/concepts/assets.md +360 -0
  48. package/assets/docs/guide/concepts/blocks.md +750 -0
  49. package/assets/docs/guide/concepts/buffers.md +546 -0
  50. package/assets/docs/guide/concepts/design-units.md +333 -0
  51. package/assets/docs/guide/concepts/edit-modes.md +431 -0
  52. package/assets/docs/guide/concepts/editing-workflow.md +303 -0
  53. package/assets/docs/guide/concepts/events.md +466 -0
  54. package/assets/docs/guide/concepts/headless-mode/browser.md +291 -0
  55. package/assets/docs/guide/concepts/pages.md +396 -0
  56. package/assets/docs/guide/concepts/resources.md +496 -0
  57. package/assets/docs/guide/concepts/scenes.md +443 -0
  58. package/assets/docs/guide/concepts/templating.md +194 -0
  59. package/assets/docs/guide/concepts/terminology.md +296 -0
  60. package/assets/docs/guide/concepts/undo-and-history.md +461 -0
  61. package/assets/docs/guide/concepts.md +38 -0
  62. package/assets/docs/guide/configuration.md +469 -0
  63. package/assets/docs/guide/conversion/overview.md +22 -0
  64. package/assets/docs/guide/conversion/to-base64.md +234 -0
  65. package/assets/docs/guide/conversion/to-pdf.md +616 -0
  66. package/assets/docs/guide/conversion/to-png.md +290 -0
  67. package/assets/docs/guide/conversion.md +23 -0
  68. package/assets/docs/guide/create-audio/audio/add-music.md +430 -0
  69. package/assets/docs/guide/create-audio/audio/add-sound-effects.md +664 -0
  70. package/assets/docs/guide/create-audio/audio/loop.md +370 -0
  71. package/assets/docs/guide/create-audio/audio.md +336 -0
  72. package/assets/docs/guide/create-composition/add-background.md +395 -0
  73. package/assets/docs/guide/create-composition/blend-modes.md +372 -0
  74. package/assets/docs/guide/create-composition/collage.md +432 -0
  75. package/assets/docs/guide/create-composition/group-and-ungroup.md +388 -0
  76. package/assets/docs/guide/create-composition/layer-management.md +503 -0
  77. package/assets/docs/guide/create-composition/layout.md +396 -0
  78. package/assets/docs/guide/create-composition/lock-design.md +362 -0
  79. package/assets/docs/guide/create-composition/multi-page.md +204 -0
  80. package/assets/docs/guide/create-composition/overview.md +18 -0
  81. package/assets/docs/guide/create-composition/programmatic.md +593 -0
  82. package/assets/docs/guide/create-composition.md +30 -0
  83. package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +688 -0
  84. package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +600 -0
  85. package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +647 -0
  86. package/assets/docs/guide/create-templates/add-dynamic-content.md +307 -0
  87. package/assets/docs/guide/create-templates/add-to-template-library.md +297 -0
  88. package/assets/docs/guide/create-templates/edit-or-remove.md +441 -0
  89. package/assets/docs/guide/create-templates/from-scratch.md +558 -0
  90. package/assets/docs/guide/create-templates/import/from-scene-file.md +440 -0
  91. package/assets/docs/guide/create-templates/import.md +244 -0
  92. package/assets/docs/guide/create-templates/lock.md +325 -0
  93. package/assets/docs/guide/create-templates/overview.md +16 -0
  94. package/assets/docs/guide/create-templates.md +32 -0
  95. package/assets/docs/guide/create-video/audio/adjust-speed.md +302 -0
  96. package/assets/docs/guide/create-video/audio/adjust-volume.md +346 -0
  97. package/assets/docs/guide/create-video/control.md +285 -0
  98. package/assets/docs/guide/create-video/limitations.md +396 -0
  99. package/assets/docs/guide/create-video/overview.md +224 -0
  100. package/assets/docs/guide/create-video/timeline-editor.md +622 -0
  101. package/assets/docs/guide/create-video/update-caption-presets.md +676 -0
  102. package/assets/docs/guide/create-video.md +32 -0
  103. package/assets/docs/guide/edit-image/add-watermark.md +497 -0
  104. package/assets/docs/guide/edit-image/overview.md +22 -0
  105. package/assets/docs/guide/edit-image/remove-bg.md +420 -0
  106. package/assets/docs/guide/edit-image/replace-colors.md +680 -0
  107. package/assets/docs/guide/edit-image/transform/crop.md +523 -0
  108. package/assets/docs/guide/edit-image/transform/move.md +279 -0
  109. package/assets/docs/guide/edit-image/transform/resize.md +301 -0
  110. package/assets/docs/guide/edit-image/transform/rotate.md +408 -0
  111. package/assets/docs/guide/edit-image/transform/scale.md +278 -0
  112. package/assets/docs/guide/edit-image/transform.md +24 -0
  113. package/assets/docs/guide/edit-image/vectorize.md +204 -0
  114. package/assets/docs/guide/edit-image.md +25 -0
  115. package/assets/docs/guide/edit-video/add-captions.md +589 -0
  116. package/assets/docs/guide/edit-video/add-watermark.md +429 -0
  117. package/assets/docs/guide/edit-video/join-and-arrange.md +540 -0
  118. package/assets/docs/guide/edit-video/redaction.md +544 -0
  119. package/assets/docs/guide/edit-video/split.md +634 -0
  120. package/assets/docs/guide/edit-video/transform/crop.md +380 -0
  121. package/assets/docs/guide/edit-video/transform/flip.md +182 -0
  122. package/assets/docs/guide/edit-video/transform/move.md +413 -0
  123. package/assets/docs/guide/edit-video/transform/resize.md +534 -0
  124. package/assets/docs/guide/edit-video/transform/rotate.md +312 -0
  125. package/assets/docs/guide/edit-video/transform/scale.md +603 -0
  126. package/assets/docs/guide/edit-video/transform.md +25 -0
  127. package/assets/docs/guide/edit-video/trim.md +773 -0
  128. package/assets/docs/guide/engine-interface.md +108 -0
  129. package/assets/docs/guide/export-save-publish/create-thumbnail.md +292 -0
  130. package/assets/docs/guide/export-save-publish/export/compress.md +639 -0
  131. package/assets/docs/guide/export-save-publish/export/overview.md +576 -0
  132. package/assets/docs/guide/export-save-publish/export/partial-export.md +694 -0
  133. package/assets/docs/guide/export-save-publish/export/size-limits.md +401 -0
  134. package/assets/docs/guide/export-save-publish/export/to-html5.md +474 -0
  135. package/assets/docs/guide/export-save-publish/export/to-jpeg.md +312 -0
  136. package/assets/docs/guide/export-save-publish/export/to-mp4.md +364 -0
  137. package/assets/docs/guide/export-save-publish/export/to-pdf.md +389 -0
  138. package/assets/docs/guide/export-save-publish/export/to-png.md +255 -0
  139. package/assets/docs/guide/export-save-publish/export/to-raw-data.md +303 -0
  140. package/assets/docs/guide/export-save-publish/export/to-webp.md +261 -0
  141. package/assets/docs/guide/export-save-publish/export/with-color-mask.md +278 -0
  142. package/assets/docs/guide/export-save-publish/export.md +36 -0
  143. package/assets/docs/guide/export-save-publish/for-printing.md +423 -0
  144. package/assets/docs/guide/export-save-publish/for-social-media.md +318 -0
  145. package/assets/docs/guide/export-save-publish/pre-export-validation.md +698 -0
  146. package/assets/docs/guide/export-save-publish/save.md +340 -0
  147. package/assets/docs/guide/export-save-publish/store-custom-metadata.md +367 -0
  148. package/assets/docs/guide/file-format-support.md +34 -0
  149. package/assets/docs/guide/fills/color.md +678 -0
  150. package/assets/docs/guide/fills/image.md +539 -0
  151. package/assets/docs/guide/fills/overview.md +144 -0
  152. package/assets/docs/guide/fills/video.md +641 -0
  153. package/assets/docs/guide/fills.md +24 -0
  154. package/assets/docs/guide/filters-and-effects/apply.md +1019 -0
  155. package/assets/docs/guide/filters-and-effects/blur.md +382 -0
  156. package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +445 -0
  157. package/assets/docs/guide/filters-and-effects/create-custom-filters.md +614 -0
  158. package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +426 -0
  159. package/assets/docs/guide/filters-and-effects/distortion.md +527 -0
  160. package/assets/docs/guide/filters-and-effects/duotone.md +602 -0
  161. package/assets/docs/guide/filters-and-effects/gradients.md +1311 -0
  162. package/assets/docs/guide/filters-and-effects/overview.md +22 -0
  163. package/assets/docs/guide/filters-and-effects/support.md +623 -0
  164. package/assets/docs/guide/filters-and-effects.md +28 -0
  165. package/assets/docs/guide/get-started/agent-skills.md +119 -0
  166. package/assets/docs/guide/get-started/build-with-ai.md +45 -0
  167. package/assets/docs/guide/get-started/mcp-server.md +119 -0
  168. package/assets/docs/guide/get-started/overview.md +28 -0
  169. package/assets/docs/guide/get-started/vanilla-js/quickstart.md +175 -0
  170. package/assets/docs/guide/grid-and-rulers.md +222 -0
  171. package/assets/docs/guide/guides/export-save-publish/export/audio.md +224 -0
  172. package/assets/docs/guide/guides/text/rendering-internals.md +796 -0
  173. package/assets/docs/guide/guides.md +49 -0
  174. package/assets/docs/guide/import-media/asset-library.md +23 -0
  175. package/assets/docs/guide/import-media/asset-panel/basics.md +324 -0
  176. package/assets/docs/guide/import-media/asset-panel/customize.md +478 -0
  177. package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +415 -0
  178. package/assets/docs/guide/import-media/asset-panel/thumbnails.md +633 -0
  179. package/assets/docs/guide/import-media/capture-from-camera/record-video.md +137 -0
  180. package/assets/docs/guide/import-media/capture-from-camera.md +20 -0
  181. package/assets/docs/guide/import-media/concepts.md +173 -0
  182. package/assets/docs/guide/import-media/content-json-schema.md +615 -0
  183. package/assets/docs/guide/import-media/default-assets.md +381 -0
  184. package/assets/docs/guide/import-media/edit-or-remove-assets.md +489 -0
  185. package/assets/docs/guide/import-media/file-format-support.md +178 -0
  186. package/assets/docs/guide/import-media/from-local-source/user-upload.md +438 -0
  187. package/assets/docs/guide/import-media/from-local-source.md +20 -0
  188. package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +390 -0
  189. package/assets/docs/guide/import-media/from-remote-source/getty-images.md +627 -0
  190. package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +625 -0
  191. package/assets/docs/guide/import-media/from-remote-source/pexels.md +692 -0
  192. package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +473 -0
  193. package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +497 -0
  194. package/assets/docs/guide/import-media/from-remote-source/third-party.md +51 -0
  195. package/assets/docs/guide/import-media/from-remote-source/unsplash.md +914 -0
  196. package/assets/docs/guide/import-media/from-remote-source/your-server.md +764 -0
  197. package/assets/docs/guide/import-media/from-remote-source.md +28 -0
  198. package/assets/docs/guide/import-media/overview.md +32 -0
  199. package/assets/docs/guide/import-media/retrieve-mimetype.md +274 -0
  200. package/assets/docs/guide/import-media/size-limits.md +20 -0
  201. package/assets/docs/guide/import-media/source-sets.md +476 -0
  202. package/assets/docs/guide/import-media.md +32 -0
  203. package/assets/docs/guide/insert-media/audio.md +291 -0
  204. package/assets/docs/guide/insert-media/images.md +380 -0
  205. package/assets/docs/guide/insert-media/position-and-align.md +734 -0
  206. package/assets/docs/guide/insert-media/shapes-or-stickers.md +799 -0
  207. package/assets/docs/guide/insert-media/videos.md +308 -0
  208. package/assets/docs/guide/insert-media.md +24 -0
  209. package/assets/docs/guide/key-capabilities.md +24 -0
  210. package/assets/docs/guide/key-concepts.md +83 -0
  211. package/assets/docs/guide/licensing.md +45 -0
  212. package/assets/docs/guide/llms-txt.md +53 -0
  213. package/assets/docs/guide/open-the-editor/blank-canvas.md +124 -0
  214. package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +228 -0
  215. package/assets/docs/guide/open-the-editor/from-image.md +205 -0
  216. package/assets/docs/guide/open-the-editor/from-template.md +189 -0
  217. package/assets/docs/guide/open-the-editor/from-video.md +274 -0
  218. package/assets/docs/guide/open-the-editor/import-design/from-archive.md +504 -0
  219. package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +680 -0
  220. package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +865 -0
  221. package/assets/docs/guide/open-the-editor/import-design.md +481 -0
  222. package/assets/docs/guide/open-the-editor/load-scene.md +178 -0
  223. package/assets/docs/guide/open-the-editor/overview.md +20 -0
  224. package/assets/docs/guide/open-the-editor/set-zoom-level.md +303 -0
  225. package/assets/docs/guide/open-the-editor/uri-resolver.md +347 -0
  226. package/assets/docs/guide/open-the-editor.md +29 -0
  227. package/assets/docs/guide/outlines/overview.md +14 -0
  228. package/assets/docs/guide/outlines/shadows-and-glows.md +515 -0
  229. package/assets/docs/guide/outlines/strokes.md +292 -0
  230. package/assets/docs/guide/outlines.md +22 -0
  231. package/assets/docs/guide/overview.md +22 -0
  232. package/assets/docs/guide/performance.md +217 -0
  233. package/assets/docs/guide/plugins/asset-sources.md +553 -0
  234. package/assets/docs/guide/plugins/print-ready-pdf.md +549 -0
  235. package/assets/docs/guide/plugins.md +36 -0
  236. package/assets/docs/guide/rules/asset-handling.md +180 -0
  237. package/assets/docs/guide/rules/common-pitfalls.md +272 -0
  238. package/assets/docs/guide/rules/content-fill-mode.md +29 -0
  239. package/assets/docs/guide/rules/enforce-brand-guidelines.md +672 -0
  240. package/assets/docs/guide/rules/lock-content.md +478 -0
  241. package/assets/docs/guide/rules/moderate-content.md +761 -0
  242. package/assets/docs/guide/rules/overview.md +514 -0
  243. package/assets/docs/guide/rules/silent-init-errors.md +137 -0
  244. package/assets/docs/guide/rules/verify-properties-before-use.md +78 -0
  245. package/assets/docs/guide/rules.md +23 -0
  246. package/assets/docs/guide/security.md +199 -0
  247. package/assets/docs/guide/serve-assets.md +332 -0
  248. package/assets/docs/guide/settings.md +199 -0
  249. package/assets/docs/guide/shapes.md +23 -0
  250. package/assets/docs/guide/starterkits/3d-mockup-editor.md +748 -0
  251. package/assets/docs/guide/starterkits/advanced-editor.md +698 -0
  252. package/assets/docs/guide/starterkits/advanced-video-editor.md +696 -0
  253. package/assets/docs/guide/starterkits/ai-editor.md +749 -0
  254. package/assets/docs/guide/starterkits/airtable-image-editor.md +672 -0
  255. package/assets/docs/guide/starterkits/apparel-ui.md +188 -0
  256. package/assets/docs/guide/starterkits/assets.md +27 -0
  257. package/assets/docs/guide/starterkits/auto-resize.md +586 -0
  258. package/assets/docs/guide/starterkits/automated-video-generation.md +692 -0
  259. package/assets/docs/guide/starterkits/background-removal-editor.md +480 -0
  260. package/assets/docs/guide/starterkits/content-moderation.md +863 -0
  261. package/assets/docs/guide/starterkits/creative-automation.md +28 -0
  262. package/assets/docs/guide/starterkits/custom-built-uis.md +26 -0
  263. package/assets/docs/guide/starterkits/customization.md +29 -0
  264. package/assets/docs/guide/starterkits/cutout-lines-editor.md +470 -0
  265. package/assets/docs/guide/starterkits/data-merge.md +850 -0
  266. package/assets/docs/guide/starterkits/design-editor.md +698 -0
  267. package/assets/docs/guide/starterkits/design-generation.md +719 -0
  268. package/assets/docs/guide/starterkits/design-validation.md +808 -0
  269. package/assets/docs/guide/starterkits/editor-ui-configurations.md +14 -0
  270. package/assets/docs/guide/starterkits/export-options.md +724 -0
  271. package/assets/docs/guide/starterkits/export-using-renderer.md +708 -0
  272. package/assets/docs/guide/starterkits/extensibility.md +28 -0
  273. package/assets/docs/guide/starterkits/force-crop-editor.md +675 -0
  274. package/assets/docs/guide/starterkits/form-based-template-adoption.md +522 -0
  275. package/assets/docs/guide/starterkits/getty-images-editor.md +700 -0
  276. package/assets/docs/guide/starterkits/html5-ads-exporter.md +719 -0
  277. package/assets/docs/guide/starterkits/indesign-template-import.md +580 -0
  278. package/assets/docs/guide/starterkits/layouts-editor.md +724 -0
  279. package/assets/docs/guide/starterkits/mobile-ui.md +185 -0
  280. package/assets/docs/guide/starterkits/mockup-editor.md +745 -0
  281. package/assets/docs/guide/starterkits/multi-image-generation.md +542 -0
  282. package/assets/docs/guide/starterkits/page-sizes-editor.md +657 -0
  283. package/assets/docs/guide/starterkits/pexels-image-editor.md +665 -0
  284. package/assets/docs/guide/starterkits/photo-editor.md +755 -0
  285. package/assets/docs/guide/starterkits/photo-ui.md +186 -0
  286. package/assets/docs/guide/starterkits/photobook-ui.md +188 -0
  287. package/assets/docs/guide/starterkits/placeholders.md +678 -0
  288. package/assets/docs/guide/starterkits/player.md +405 -0
  289. package/assets/docs/guide/starterkits/plugins.md +25 -0
  290. package/assets/docs/guide/starterkits/postcard-editor.md +202 -0
  291. package/assets/docs/guide/starterkits/pptx-template-import.md +581 -0
  292. package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +746 -0
  293. package/assets/docs/guide/starterkits/product-editor.md +773 -0
  294. package/assets/docs/guide/starterkits/psd-template-import.md +580 -0
  295. package/assets/docs/guide/starterkits/qr-code-editor.md +470 -0
  296. package/assets/docs/guide/starterkits/single-page-editor.md +661 -0
  297. package/assets/docs/guide/starterkits/start-with-image.md +684 -0
  298. package/assets/docs/guide/starterkits/start-with-video.md +651 -0
  299. package/assets/docs/guide/starterkits/t-shirt-designer.md +742 -0
  300. package/assets/docs/guide/starterkits/templating.md +23 -0
  301. package/assets/docs/guide/starterkits/theming.md +662 -0
  302. package/assets/docs/guide/starterkits/translation-internationalization.md +662 -0
  303. package/assets/docs/guide/starterkits/unsplash-editor.md +839 -0
  304. package/assets/docs/guide/starterkits/vectorizer-editor.md +466 -0
  305. package/assets/docs/guide/starterkits/version-history.md +745 -0
  306. package/assets/docs/guide/starterkits/video-animations.md +853 -0
  307. package/assets/docs/guide/starterkits/video-captions.md +884 -0
  308. package/assets/docs/guide/starterkits/video-editing.md +25 -0
  309. package/assets/docs/guide/starterkits/video-editor.md +696 -0
  310. package/assets/docs/guide/starterkits/video-export-options.md +676 -0
  311. package/assets/docs/guide/starterkits/viewer.md +400 -0
  312. package/assets/docs/guide/starterkits.md +41 -0
  313. package/assets/docs/guide/stickers-and-shapes/combine.md +743 -0
  314. package/assets/docs/guide/stickers-and-shapes/create-cutout.md +425 -0
  315. package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +794 -0
  316. package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +290 -0
  317. package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +211 -0
  318. package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +362 -0
  319. package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +208 -0
  320. package/assets/docs/guide/stickers.md +21 -0
  321. package/assets/docs/guide/text/add.md +641 -0
  322. package/assets/docs/guide/text/adjust-spacing.md +288 -0
  323. package/assets/docs/guide/text/auto-size.md +404 -0
  324. package/assets/docs/guide/text/custom-fonts.md +401 -0
  325. package/assets/docs/guide/text/decorations.md +330 -0
  326. package/assets/docs/guide/text/edit.md +458 -0
  327. package/assets/docs/guide/text/effects.md +244 -0
  328. package/assets/docs/guide/text/emojis.md +310 -0
  329. package/assets/docs/guide/text/enumerations.md +258 -0
  330. package/assets/docs/guide/text/language-support.md +604 -0
  331. package/assets/docs/guide/text/overview.md +14 -0
  332. package/assets/docs/guide/text/styling.md +390 -0
  333. package/assets/docs/guide/text/text-designs.md +834 -0
  334. package/assets/docs/guide/text.md +33 -0
  335. package/assets/docs/guide/to-v1-10.md +131 -0
  336. package/assets/docs/guide/to-v1-13.md +165 -0
  337. package/assets/docs/guide/to-v1-19.md +315 -0
  338. package/assets/docs/guide/to-v1-32.md +110 -0
  339. package/assets/docs/guide/to-v1-69.md +468 -0
  340. package/assets/docs/guide/to-v1-72.md +193 -0
  341. package/assets/docs/guide/upgrade.md +25 -0
  342. package/assets/docs/guide/use-templates/apply-template.md +279 -0
  343. package/assets/docs/guide/use-templates/generate.md +405 -0
  344. package/assets/docs/guide/use-templates/library.md +450 -0
  345. package/assets/docs/guide/use-templates/overview.md +20 -0
  346. package/assets/docs/guide/use-templates/programmatic.md +482 -0
  347. package/assets/docs/guide/use-templates/replace-content.md +399 -0
  348. package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +428 -0
  349. package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +337 -0
  350. package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +853 -0
  351. package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +1045 -0
  352. package/assets/docs/guide/user-interface/ai-integration/image-generation.md +641 -0
  353. package/assets/docs/guide/user-interface/ai-integration/integrate.md +966 -0
  354. package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +99 -0
  355. package/assets/docs/guide/user-interface/ai-integration/text-generation.md +498 -0
  356. package/assets/docs/guide/user-interface/ai-integration/video-generation.md +493 -0
  357. package/assets/docs/guide/user-interface/ai-integration.md +30 -0
  358. package/assets/docs/guide/user-interface/appearance/change-ui-font.md +316 -0
  359. package/assets/docs/guide/user-interface/appearance/custom-labels.md +509 -0
  360. package/assets/docs/guide/user-interface/appearance/icons.md +373 -0
  361. package/assets/docs/guide/user-interface/appearance/theming.md +665 -0
  362. package/assets/docs/guide/user-interface/appearance.md +23 -0
  363. package/assets/docs/guide/user-interface/build-your-own-ui.md +620 -0
  364. package/assets/docs/guide/user-interface/customization/canvas-menu.md +412 -0
  365. package/assets/docs/guide/user-interface/customization/canvas.md +281 -0
  366. package/assets/docs/guide/user-interface/customization/color-palette.md +413 -0
  367. package/assets/docs/guide/user-interface/customization/crop-presets.md +384 -0
  368. package/assets/docs/guide/user-interface/customization/disable-or-enable.md +676 -0
  369. package/assets/docs/guide/user-interface/customization/dock.md +399 -0
  370. package/assets/docs/guide/user-interface/customization/force-crop.md +289 -0
  371. package/assets/docs/guide/user-interface/customization/inspector-bar.md +371 -0
  372. package/assets/docs/guide/user-interface/customization/navigation-bar.md +516 -0
  373. package/assets/docs/guide/user-interface/customization/page-format.md +436 -0
  374. package/assets/docs/guide/user-interface/customization/panel.md +605 -0
  375. package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +531 -0
  376. package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +358 -0
  377. package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +374 -0
  378. package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +323 -0
  379. package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +294 -0
  380. package/assets/docs/guide/user-interface/customization/quick-start.md +12 -0
  381. package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +519 -0
  382. package/assets/docs/guide/user-interface/customization/reference/component-reference.md +333 -0
  383. package/assets/docs/guide/user-interface/customization/reference.md +12 -0
  384. package/assets/docs/guide/user-interface/customization.md +39 -0
  385. package/assets/docs/guide/user-interface/localization.md +633 -0
  386. package/assets/docs/guide/user-interface/overview.md +167 -0
  387. package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +411 -0
  388. package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +721 -0
  389. package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +331 -0
  390. package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +553 -0
  391. package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +672 -0
  392. package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +415 -0
  393. package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +521 -0
  394. package/assets/docs/guide/user-interface/ui-extensions.md +26 -0
  395. package/assets/docs/guide/user-interface.md +25 -0
  396. package/assets/docs/guide/what-is-cesdk.md +319 -0
  397. package/assets/docs/handbook/SKILL.md +521 -0
  398. package/assets/prompts/evals-assetGenerate.md +12 -0
  399. package/assets/prompts/evals-brutalistCore.md +34 -0
  400. package/assets/prompts/evals-danskCatalogue.md +31 -0
  401. package/assets/prompts/evals-exportRoundTrip.md +12 -0
  402. package/assets/prompts/evals-inspectPriorCode.md +16 -0
  403. package/assets/prompts/evals-listProjectFiles.md +6 -0
  404. package/assets/prompts/evals-readAndExplainScript.md +6 -0
  405. package/assets/prompts/evals-resumeAcrossRestart.md +15 -0
  406. package/assets/prompts/evals-rewindRecovery.md +10 -0
  407. package/assets/prompts/evals-searchAcrossFiles.md +6 -0
  408. package/assets/prompts/evals-weddingCard.md +20 -0
  409. package/assets/prompts/explain.md +6 -0
  410. package/assets/prompts/review.md +6 -0
  411. package/dist/assets/inline.generated.d.ts +2 -0
  412. package/dist/assets/inline.generated.d.ts.map +1 -0
  413. package/dist/assets/inline.generated.js +413 -0
  414. package/dist/assets/inline.generated.js.map +1 -0
  415. package/dist/assets/load-browser.d.ts +8 -0
  416. package/dist/assets/load-browser.d.ts.map +1 -0
  417. package/dist/assets/load-browser.js +11 -0
  418. package/dist/assets/load-browser.js.map +1 -0
  419. package/dist/assets/load-node.d.ts +8 -0
  420. package/dist/assets/load-node.d.ts.map +1 -0
  421. package/dist/assets/load-node.js +11 -0
  422. package/dist/assets/load-node.js.map +1 -0
  423. package/dist/cli/http.d.ts +2 -0
  424. package/dist/cli/http.d.ts.map +1 -0
  425. package/dist/cli/http.js +231 -0
  426. package/dist/cli/http.js.map +1 -0
  427. package/dist/cli/redirect-console.d.ts +10 -0
  428. package/dist/cli/redirect-console.d.ts.map +1 -0
  429. package/dist/cli/redirect-console.js +18 -0
  430. package/dist/cli/redirect-console.js.map +1 -0
  431. package/dist/cli/resolve-license.d.ts +2 -0
  432. package/dist/cli/resolve-license.d.ts.map +1 -0
  433. package/dist/cli/resolve-license.js +13 -0
  434. package/dist/cli/resolve-license.js.map +1 -0
  435. package/dist/cli/stdio.d.ts +2 -0
  436. package/dist/cli/stdio.d.ts.map +1 -0
  437. package/dist/cli/stdio.js +124 -0
  438. package/dist/cli/stdio.js.map +1 -0
  439. package/dist/cli/trial-license.generated.d.ts +2 -0
  440. package/dist/cli/trial-license.generated.d.ts.map +1 -0
  441. package/dist/cli/trial-license.generated.js +4 -0
  442. package/dist/cli/trial-license.generated.js.map +1 -0
  443. package/dist/cli.d.ts +3 -0
  444. package/dist/cli.d.ts.map +1 -0
  445. package/dist/cli.js +64 -0
  446. package/dist/cli.js.map +1 -0
  447. package/dist/config.d.ts +61 -0
  448. package/dist/config.d.ts.map +1 -0
  449. package/dist/config.js +102 -0
  450. package/dist/config.js.map +1 -0
  451. package/dist/cross-ref.d.ts +2 -0
  452. package/dist/cross-ref.d.ts.map +1 -0
  453. package/dist/cross-ref.js +31 -0
  454. package/dist/cross-ref.js.map +1 -0
  455. package/dist/dashboard/router.d.ts +3 -0
  456. package/dist/dashboard/router.d.ts.map +1 -0
  457. package/dist/dashboard/router.js +19 -0
  458. package/dist/dashboard/router.js.map +1 -0
  459. package/dist/dashboard/spa-assets.generated.d.ts +2 -0
  460. package/dist/dashboard/spa-assets.generated.d.ts.map +1 -0
  461. package/dist/dashboard/spa-assets.generated.js +220 -0
  462. package/dist/dashboard/spa-assets.generated.js.map +1 -0
  463. package/dist/engine/asset-sources.d.ts +17 -0
  464. package/dist/engine/asset-sources.d.ts.map +1 -0
  465. package/dist/engine/asset-sources.js +75 -0
  466. package/dist/engine/asset-sources.js.map +1 -0
  467. package/dist/engine/cesdk-adapter.d.ts +10 -0
  468. package/dist/engine/cesdk-adapter.d.ts.map +1 -0
  469. package/dist/engine/cesdk-adapter.js +19 -0
  470. package/dist/engine/cesdk-adapter.js.map +1 -0
  471. package/dist/engine/index.d.ts +3 -0
  472. package/dist/engine/index.d.ts.map +1 -0
  473. package/dist/engine/index.js +3 -0
  474. package/dist/engine/index.js.map +1 -0
  475. package/dist/engine/mutex.d.ts +5 -0
  476. package/dist/engine/mutex.d.ts.map +1 -0
  477. package/dist/engine/mutex.js +42 -0
  478. package/dist/engine/mutex.js.map +1 -0
  479. package/dist/engine/session.d.ts +50 -0
  480. package/dist/engine/session.d.ts.map +1 -0
  481. package/dist/engine/session.js +95 -0
  482. package/dist/engine/session.js.map +1 -0
  483. package/dist/engine/uri-resolver.d.ts +14 -0
  484. package/dist/engine/uri-resolver.d.ts.map +1 -0
  485. package/dist/engine/uri-resolver.js +12 -0
  486. package/dist/engine/uri-resolver.js.map +1 -0
  487. package/dist/frontmatter.d.ts +15 -0
  488. package/dist/frontmatter.d.ts.map +1 -0
  489. package/dist/frontmatter.js +46 -0
  490. package/dist/frontmatter.js.map +1 -0
  491. package/dist/gateway/hosted-stub.d.ts +6 -0
  492. package/dist/gateway/hosted-stub.d.ts.map +1 -0
  493. package/dist/gateway/hosted-stub.js +11 -0
  494. package/dist/gateway/hosted-stub.js.map +1 -0
  495. package/dist/gateway/index.d.ts +4 -0
  496. package/dist/gateway/index.d.ts.map +1 -0
  497. package/dist/gateway/index.js +4 -0
  498. package/dist/gateway/index.js.map +1 -0
  499. package/dist/gateway/local.d.ts +14 -0
  500. package/dist/gateway/local.d.ts.map +1 -0
  501. package/dist/gateway/local.js +41 -0
  502. package/dist/gateway/local.js.map +1 -0
  503. package/dist/gateway/types.d.ts +24 -0
  504. package/dist/gateway/types.d.ts.map +1 -0
  505. package/dist/gateway/types.js +7 -0
  506. package/dist/gateway/types.js.map +1 -0
  507. package/dist/http/server.d.ts +80 -0
  508. package/dist/http/server.d.ts.map +1 -0
  509. package/dist/http/server.js +183 -0
  510. package/dist/http/server.js.map +1 -0
  511. package/dist/http/session-manager.d.ts +42 -0
  512. package/dist/http/session-manager.d.ts.map +1 -0
  513. package/dist/http/session-manager.js +82 -0
  514. package/dist/http/session-manager.js.map +1 -0
  515. package/dist/http/workspace-auth.d.ts +9 -0
  516. package/dist/http/workspace-auth.d.ts.map +1 -0
  517. package/dist/http/workspace-auth.js +29 -0
  518. package/dist/http/workspace-auth.js.map +1 -0
  519. package/dist/index.d.ts +10 -0
  520. package/dist/index.d.ts.map +1 -0
  521. package/dist/index.js +10 -0
  522. package/dist/index.js.map +1 -0
  523. package/dist/metrics/mount.d.ts +11 -0
  524. package/dist/metrics/mount.d.ts.map +1 -0
  525. package/dist/metrics/mount.js +13 -0
  526. package/dist/metrics/mount.js.map +1 -0
  527. package/dist/metrics/recorder.d.ts +55 -0
  528. package/dist/metrics/recorder.d.ts.map +1 -0
  529. package/dist/metrics/recorder.js +97 -0
  530. package/dist/metrics/recorder.js.map +1 -0
  531. package/dist/revisions/hash.d.ts +7 -0
  532. package/dist/revisions/hash.d.ts.map +1 -0
  533. package/dist/revisions/hash.js +24 -0
  534. package/dist/revisions/hash.js.map +1 -0
  535. package/dist/revisions/index.d.ts +4 -0
  536. package/dist/revisions/index.d.ts.map +1 -0
  537. package/dist/revisions/index.js +4 -0
  538. package/dist/revisions/index.js.map +1 -0
  539. package/dist/revisions/store.d.ts +69 -0
  540. package/dist/revisions/store.d.ts.map +1 -0
  541. package/dist/revisions/store.js +196 -0
  542. package/dist/revisions/store.js.map +1 -0
  543. package/dist/revisions/types.d.ts +39 -0
  544. package/dist/revisions/types.d.ts.map +1 -0
  545. package/dist/revisions/types.js +2 -0
  546. package/dist/revisions/types.js.map +1 -0
  547. package/dist/server.d.ts +51 -0
  548. package/dist/server.d.ts.map +1 -0
  549. package/dist/server.js +175 -0
  550. package/dist/server.js.map +1 -0
  551. package/dist/skill-tools.d.ts +3 -0
  552. package/dist/skill-tools.d.ts.map +1 -0
  553. package/dist/skill-tools.js +105 -0
  554. package/dist/skill-tools.js.map +1 -0
  555. package/dist/test/test/cli/dispatcher.test.d.ts +2 -0
  556. package/dist/test/test/cli/dispatcher.test.d.ts.map +1 -0
  557. package/dist/test/test/cli/dispatcher.test.js +47 -0
  558. package/dist/test/test/cli/dispatcher.test.js.map +1 -0
  559. package/dist/test/test/cross-ref.test.d.ts +2 -0
  560. package/dist/test/test/cross-ref.test.d.ts.map +1 -0
  561. package/dist/test/test/cross-ref.test.js +39 -0
  562. package/dist/test/test/cross-ref.test.js.map +1 -0
  563. package/dist/test/test/engine/session.test.d.ts +2 -0
  564. package/dist/test/test/engine/session.test.d.ts.map +1 -0
  565. package/dist/test/test/engine/session.test.js +144 -0
  566. package/dist/test/test/engine/session.test.js.map +1 -0
  567. package/dist/test/test/engine/uri-resolver.test.d.ts +2 -0
  568. package/dist/test/test/engine/uri-resolver.test.d.ts.map +1 -0
  569. package/dist/test/test/engine/uri-resolver.test.js +38 -0
  570. package/dist/test/test/engine/uri-resolver.test.js.map +1 -0
  571. package/dist/test/test/frontmatter.test.d.ts +2 -0
  572. package/dist/test/test/frontmatter.test.d.ts.map +1 -0
  573. package/dist/test/test/frontmatter.test.js +55 -0
  574. package/dist/test/test/frontmatter.test.js.map +1 -0
  575. package/dist/test/test/gateway/hosted-stub.test.d.ts +2 -0
  576. package/dist/test/test/gateway/hosted-stub.test.d.ts.map +1 -0
  577. package/dist/test/test/gateway/hosted-stub.test.js +11 -0
  578. package/dist/test/test/gateway/hosted-stub.test.js.map +1 -0
  579. package/dist/test/test/gateway/local.test.d.ts +2 -0
  580. package/dist/test/test/gateway/local.test.d.ts.map +1 -0
  581. package/dist/test/test/gateway/local.test.js +29 -0
  582. package/dist/test/test/gateway/local.test.js.map +1 -0
  583. package/dist/test/test/handbook-contract.test.d.ts +2 -0
  584. package/dist/test/test/handbook-contract.test.d.ts.map +1 -0
  585. package/dist/test/test/handbook-contract.test.js +71 -0
  586. package/dist/test/test/handbook-contract.test.js.map +1 -0
  587. package/dist/test/test/http/server.test.d.ts +2 -0
  588. package/dist/test/test/http/server.test.d.ts.map +1 -0
  589. package/dist/test/test/http/server.test.js +245 -0
  590. package/dist/test/test/http/server.test.js.map +1 -0
  591. package/dist/test/test/http/session-manager.test.d.ts +2 -0
  592. package/dist/test/test/http/session-manager.test.d.ts.map +1 -0
  593. package/dist/test/test/http/session-manager.test.js +83 -0
  594. package/dist/test/test/http/session-manager.test.js.map +1 -0
  595. package/dist/test/test/revisions/hash.test.d.ts +2 -0
  596. package/dist/test/test/revisions/hash.test.d.ts.map +1 -0
  597. package/dist/test/test/revisions/hash.test.js +33 -0
  598. package/dist/test/test/revisions/hash.test.js.map +1 -0
  599. package/dist/test/test/revisions/store.test.d.ts +2 -0
  600. package/dist/test/test/revisions/store.test.d.ts.map +1 -0
  601. package/dist/test/test/revisions/store.test.js +245 -0
  602. package/dist/test/test/revisions/store.test.js.map +1 -0
  603. package/dist/test/test/server.test.d.ts +2 -0
  604. package/dist/test/test/server.test.d.ts.map +1 -0
  605. package/dist/test/test/server.test.js +157 -0
  606. package/dist/test/test/server.test.js.map +1 -0
  607. package/dist/test/test/skill-tools.test.d.ts +2 -0
  608. package/dist/test/test/skill-tools.test.d.ts.map +1 -0
  609. package/dist/test/test/skill-tools.test.js +84 -0
  610. package/dist/test/test/skill-tools.test.js.map +1 -0
  611. package/dist/test/test/smoke.test.d.ts +2 -0
  612. package/dist/test/test/smoke.test.d.ts.map +1 -0
  613. package/dist/test/test/smoke.test.js +8 -0
  614. package/dist/test/test/smoke.test.js.map +1 -0
  615. package/dist/test/test/tools/asset-generate.test.d.ts +2 -0
  616. package/dist/test/test/tools/asset-generate.test.d.ts.map +1 -0
  617. package/dist/test/test/tools/asset-generate.test.js +66 -0
  618. package/dist/test/test/tools/asset-generate.test.js.map +1 -0
  619. package/dist/test/test/tools/edit.test.d.ts +2 -0
  620. package/dist/test/test/tools/edit.test.d.ts.map +1 -0
  621. package/dist/test/test/tools/edit.test.js +205 -0
  622. package/dist/test/test/tools/edit.test.js.map +1 -0
  623. package/dist/test/test/tools/export.test.d.ts +2 -0
  624. package/dist/test/test/tools/export.test.d.ts.map +1 -0
  625. package/dist/test/test/tools/export.test.js +144 -0
  626. package/dist/test/test/tools/export.test.js.map +1 -0
  627. package/dist/test/test/tools/history.test.d.ts +2 -0
  628. package/dist/test/test/tools/history.test.d.ts.map +1 -0
  629. package/dist/test/test/tools/history.test.js +29 -0
  630. package/dist/test/test/tools/history.test.js.map +1 -0
  631. package/dist/test/test/tools/inspect.test.d.ts +2 -0
  632. package/dist/test/test/tools/inspect.test.d.ts.map +1 -0
  633. package/dist/test/test/tools/inspect.test.js +62 -0
  634. package/dist/test/test/tools/inspect.test.js.map +1 -0
  635. package/dist/test/test/tools/list.test.d.ts +2 -0
  636. package/dist/test/test/tools/list.test.d.ts.map +1 -0
  637. package/dist/test/test/tools/list.test.js +23 -0
  638. package/dist/test/test/tools/list.test.js.map +1 -0
  639. package/dist/test/test/tools/open-editor.test.d.ts +2 -0
  640. package/dist/test/test/tools/open-editor.test.d.ts.map +1 -0
  641. package/dist/test/test/tools/open-editor.test.js +53 -0
  642. package/dist/test/test/tools/open-editor.test.js.map +1 -0
  643. package/dist/test/test/tools/preview.test.d.ts +2 -0
  644. package/dist/test/test/tools/preview.test.d.ts.map +1 -0
  645. package/dist/test/test/tools/preview.test.js +73 -0
  646. package/dist/test/test/tools/preview.test.js.map +1 -0
  647. package/dist/test/test/tools/rename.test.d.ts +2 -0
  648. package/dist/test/test/tools/rename.test.d.ts.map +1 -0
  649. package/dist/test/test/tools/rename.test.js +17 -0
  650. package/dist/test/test/tools/rename.test.js.map +1 -0
  651. package/dist/test/test/viewer/broadcaster.test.d.ts +2 -0
  652. package/dist/test/test/viewer/broadcaster.test.d.ts.map +1 -0
  653. package/dist/test/test/viewer/broadcaster.test.js +53 -0
  654. package/dist/test/test/viewer/broadcaster.test.js.map +1 -0
  655. package/dist/test/test/viewer/resource-route.test.d.ts +2 -0
  656. package/dist/test/test/viewer/resource-route.test.d.ts.map +1 -0
  657. package/dist/test/test/viewer/resource-route.test.js +70 -0
  658. package/dist/test/test/viewer/resource-route.test.js.map +1 -0
  659. package/dist/test/test/viewer/router.test.d.ts +2 -0
  660. package/dist/test/test/viewer/router.test.d.ts.map +1 -0
  661. package/dist/test/test/viewer/router.test.js +171 -0
  662. package/dist/test/test/viewer/router.test.js.map +1 -0
  663. package/dist/test/test/viewer/url-builder.test.d.ts +2 -0
  664. package/dist/test/test/viewer/url-builder.test.d.ts.map +1 -0
  665. package/dist/test/test/viewer/url-builder.test.js +31 -0
  666. package/dist/test/test/viewer/url-builder.test.js.map +1 -0
  667. package/dist/test/test/workspace/hosted-stub.test.d.ts +2 -0
  668. package/dist/test/test/workspace/hosted-stub.test.d.ts.map +1 -0
  669. package/dist/test/test/workspace/hosted-stub.test.js +30 -0
  670. package/dist/test/test/workspace/hosted-stub.test.js.map +1 -0
  671. package/dist/test/test/workspace/in-memory.test.d.ts +2 -0
  672. package/dist/test/test/workspace/in-memory.test.d.ts.map +1 -0
  673. package/dist/test/test/workspace/in-memory.test.js +4 -0
  674. package/dist/test/test/workspace/in-memory.test.js.map +1 -0
  675. package/dist/test/test/workspace/node-fs.test.d.ts +2 -0
  676. package/dist/test/test/workspace/node-fs.test.d.ts.map +1 -0
  677. package/dist/test/test/workspace/node-fs.test.js +20 -0
  678. package/dist/test/test/workspace/node-fs.test.js.map +1 -0
  679. package/dist/test/test/workspace/shared-contract.d.ts +3 -0
  680. package/dist/test/test/workspace/shared-contract.d.ts.map +1 -0
  681. package/dist/test/test/workspace/shared-contract.js +92 -0
  682. package/dist/test/test/workspace/shared-contract.js.map +1 -0
  683. package/dist/test/tsconfig.test.tsbuildinfo +1 -0
  684. package/dist/test/vitest.config.d.ts +3 -0
  685. package/dist/test/vitest.config.d.ts.map +1 -0
  686. package/dist/test/vitest.config.js +8 -0
  687. package/dist/test/vitest.config.js.map +1 -0
  688. package/dist/tools/asset-generate.d.ts +12 -0
  689. package/dist/tools/asset-generate.d.ts.map +1 -0
  690. package/dist/tools/asset-generate.js +112 -0
  691. package/dist/tools/asset-generate.js.map +1 -0
  692. package/dist/tools/asset-search.d.ts +10 -0
  693. package/dist/tools/asset-search.d.ts.map +1 -0
  694. package/dist/tools/asset-search.js +120 -0
  695. package/dist/tools/asset-search.js.map +1 -0
  696. package/dist/tools/content-types.d.ts +11 -0
  697. package/dist/tools/content-types.d.ts.map +1 -0
  698. package/dist/tools/content-types.js +2 -0
  699. package/dist/tools/content-types.js.map +1 -0
  700. package/dist/tools/edit.d.ts +29 -0
  701. package/dist/tools/edit.d.ts.map +1 -0
  702. package/dist/tools/edit.js +165 -0
  703. package/dist/tools/edit.js.map +1 -0
  704. package/dist/tools/engine.d.ts +31 -0
  705. package/dist/tools/engine.d.ts.map +1 -0
  706. package/dist/tools/engine.js +59 -0
  707. package/dist/tools/engine.js.map +1 -0
  708. package/dist/tools/export.d.ts +19 -0
  709. package/dist/tools/export.d.ts.map +1 -0
  710. package/dist/tools/export.js +179 -0
  711. package/dist/tools/export.js.map +1 -0
  712. package/dist/tools/history.d.ts +7 -0
  713. package/dist/tools/history.d.ts.map +1 -0
  714. package/dist/tools/history.js +54 -0
  715. package/dist/tools/history.js.map +1 -0
  716. package/dist/tools/index.d.ts +35 -0
  717. package/dist/tools/index.d.ts.map +1 -0
  718. package/dist/tools/index.js +72 -0
  719. package/dist/tools/index.js.map +1 -0
  720. package/dist/tools/inspect.d.ts +7 -0
  721. package/dist/tools/inspect.d.ts.map +1 -0
  722. package/dist/tools/inspect.js +80 -0
  723. package/dist/tools/inspect.js.map +1 -0
  724. package/dist/tools/list.d.ts +7 -0
  725. package/dist/tools/list.d.ts.map +1 -0
  726. package/dist/tools/list.js +18 -0
  727. package/dist/tools/list.js.map +1 -0
  728. package/dist/tools/metrics.d.ts +11 -0
  729. package/dist/tools/metrics.d.ts.map +1 -0
  730. package/dist/tools/metrics.js +28 -0
  731. package/dist/tools/metrics.js.map +1 -0
  732. package/dist/tools/open-editor.d.ts +10 -0
  733. package/dist/tools/open-editor.d.ts.map +1 -0
  734. package/dist/tools/open-editor.js +62 -0
  735. package/dist/tools/open-editor.js.map +1 -0
  736. package/dist/tools/preview.d.ts +12 -0
  737. package/dist/tools/preview.d.ts.map +1 -0
  738. package/dist/tools/preview.js +104 -0
  739. package/dist/tools/preview.js.map +1 -0
  740. package/dist/tools/rename.d.ts +7 -0
  741. package/dist/tools/rename.d.ts.map +1 -0
  742. package/dist/tools/rename.js +39 -0
  743. package/dist/tools/rename.js.map +1 -0
  744. package/dist/tools/result.d.ts +12 -0
  745. package/dist/tools/result.d.ts.map +1 -0
  746. package/dist/tools/result.js +55 -0
  747. package/dist/tools/result.js.map +1 -0
  748. package/dist/tools/save.d.ts +19 -0
  749. package/dist/tools/save.d.ts.map +1 -0
  750. package/dist/tools/save.js +117 -0
  751. package/dist/tools/save.js.map +1 -0
  752. package/dist/viewer/broadcaster.d.ts +13 -0
  753. package/dist/viewer/broadcaster.d.ts.map +1 -0
  754. package/dist/viewer/broadcaster.js +44 -0
  755. package/dist/viewer/broadcaster.js.map +1 -0
  756. package/dist/viewer/index.d.ts +7 -0
  757. package/dist/viewer/index.d.ts.map +1 -0
  758. package/dist/viewer/index.js +7 -0
  759. package/dist/viewer/index.js.map +1 -0
  760. package/dist/viewer/listener.d.ts +16 -0
  761. package/dist/viewer/listener.d.ts.map +1 -0
  762. package/dist/viewer/listener.js +30 -0
  763. package/dist/viewer/listener.js.map +1 -0
  764. package/dist/viewer/presigned-r2-url-builder.d.ts +30 -0
  765. package/dist/viewer/presigned-r2-url-builder.d.ts.map +1 -0
  766. package/dist/viewer/presigned-r2-url-builder.js +40 -0
  767. package/dist/viewer/presigned-r2-url-builder.js.map +1 -0
  768. package/dist/viewer/resource-route.d.ts +9 -0
  769. package/dist/viewer/resource-route.d.ts.map +1 -0
  770. package/dist/viewer/resource-route.js +59 -0
  771. package/dist/viewer/resource-route.js.map +1 -0
  772. package/dist/viewer/router.d.ts +20 -0
  773. package/dist/viewer/router.d.ts.map +1 -0
  774. package/dist/viewer/router.js +142 -0
  775. package/dist/viewer/router.js.map +1 -0
  776. package/dist/viewer/session-mount.d.ts +10 -0
  777. package/dist/viewer/session-mount.d.ts.map +1 -0
  778. package/dist/viewer/session-mount.js +24 -0
  779. package/dist/viewer/session-mount.js.map +1 -0
  780. package/dist/viewer/spa-assets.generated.d.ts +2 -0
  781. package/dist/viewer/spa-assets.generated.d.ts.map +1 -0
  782. package/dist/viewer/spa-assets.generated.js +989 -0
  783. package/dist/viewer/spa-assets.generated.js.map +1 -0
  784. package/dist/viewer/url-builder.d.ts +48 -0
  785. package/dist/viewer/url-builder.d.ts.map +1 -0
  786. package/dist/viewer/url-builder.js +38 -0
  787. package/dist/viewer/url-builder.js.map +1 -0
  788. package/dist/workspace/hosted-stub.d.ts +28 -0
  789. package/dist/workspace/hosted-stub.d.ts.map +1 -0
  790. package/dist/workspace/hosted-stub.js +44 -0
  791. package/dist/workspace/hosted-stub.js.map +1 -0
  792. package/dist/workspace/in-memory.d.ts +23 -0
  793. package/dist/workspace/in-memory.d.ts.map +1 -0
  794. package/dist/workspace/in-memory.js +161 -0
  795. package/dist/workspace/in-memory.js.map +1 -0
  796. package/dist/workspace/index.d.ts +6 -0
  797. package/dist/workspace/index.d.ts.map +1 -0
  798. package/dist/workspace/index.js +6 -0
  799. package/dist/workspace/index.js.map +1 -0
  800. package/dist/workspace/node-fs.d.ts +23 -0
  801. package/dist/workspace/node-fs.d.ts.map +1 -0
  802. package/dist/workspace/node-fs.js +90 -0
  803. package/dist/workspace/node-fs.js.map +1 -0
  804. package/dist/workspace/s3.d.ts +32 -0
  805. package/dist/workspace/s3.d.ts.map +1 -0
  806. package/dist/workspace/s3.js +191 -0
  807. package/dist/workspace/s3.js.map +1 -0
  808. package/dist/workspace/scoped.d.ts +32 -0
  809. package/dist/workspace/scoped.d.ts.map +1 -0
  810. package/dist/workspace/scoped.js +76 -0
  811. package/dist/workspace/scoped.js.map +1 -0
  812. package/dist/workspace/types.d.ts +75 -0
  813. package/dist/workspace/types.d.ts.map +1 -0
  814. package/dist/workspace/types.js +18 -0
  815. package/dist/workspace/types.js.map +1 -0
  816. package/package.json +80 -0
@@ -0,0 +1,743 @@
1
+ > This is one page of the CE.SDK Vanilla JS/TS documentation. For a complete overview, see the [Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).
2
+
3
+ **Navigation:** [Guides](./guides.md) > [Create and Edit Shapes](./shapes.md) > [Combine](./stickers-and-shapes/combine.md)
4
+
5
+ ---
6
+
7
+ Combine multiple shapes using boolean operations to create custom compound designs programmatically.
8
+
9
+ ![Boolean operations demonstration showing Union, Difference, Intersection, and XOR](https://img.ly/docs/cesdk/./assets/browser.hero.webp)
10
+
11
+ > **Reading time:** 8 minutes
12
+ >
13
+ > **Resources:**
14
+ >
15
+ > - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
16
+ > - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-stickers-and-shapes-combine-browser)
17
+ > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-stickers-and-shapes-combine-browser)
18
+ > - [Live demo](https://img.ly/docs/cesdk/examples/guides-stickers-and-shapes-combine-browser/)
19
+
20
+ CE.SDK provides four boolean operations for combining shapes: _Union_, _Difference_, _Intersection_, and _XOR_. These operations work with graphic blocks and text blocks, allowing you to build complex designs from simple primitives.
21
+
22
+ ```typescript file=@cesdk_web_examples/guides-stickers-and-shapes-combine-browser/browser.ts reference-only
23
+ import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
24
+
25
+ import {
26
+ BlurAssetSource,
27
+ ColorPaletteAssetSource,
28
+ CropPresetsAssetSource,
29
+ DemoAssetSources,
30
+ EffectsAssetSource,
31
+ FiltersAssetSource,
32
+ PagePresetsAssetSource,
33
+ StickerAssetSource,
34
+ TextAssetSource,
35
+ TextComponentAssetSource,
36
+ TypefaceAssetSource,
37
+ UploadAssetSources,
38
+ VectorShapeAssetSource
39
+ } from '@cesdk/cesdk-js/plugins';
40
+ import { DesignEditorConfig } from './design-editor/plugin';
41
+ import { calculateGridLayout } from './utils';
42
+ import packageJson from './package.json';
43
+
44
+ class Example implements EditorPlugin {
45
+ name = packageJson.name;
46
+ version = packageJson.version;
47
+
48
+ async initialize({ cesdk }: EditorPluginContext): Promise<void> {
49
+ if (!cesdk) {
50
+ throw new Error('CE.SDK instance is required for this plugin');
51
+ }
52
+
53
+ await cesdk.addPlugin(new DesignEditorConfig());
54
+
55
+ // Add asset source plugins
56
+ await cesdk.addPlugin(new BlurAssetSource());
57
+ await cesdk.addPlugin(new ColorPaletteAssetSource());
58
+ await cesdk.addPlugin(new CropPresetsAssetSource());
59
+ await cesdk.addPlugin(
60
+ new UploadAssetSources({ include: ['ly.img.image.upload'] })
61
+ );
62
+ await cesdk.addPlugin(
63
+ new DemoAssetSources({
64
+ include: [
65
+ 'ly.img.templates.blank.*',
66
+ 'ly.img.templates.presentation.*',
67
+ 'ly.img.templates.print.*',
68
+ 'ly.img.templates.social.*',
69
+ 'ly.img.image.*'
70
+ ]
71
+ })
72
+ );
73
+ await cesdk.addPlugin(new EffectsAssetSource());
74
+ await cesdk.addPlugin(new FiltersAssetSource());
75
+ await cesdk.addPlugin(new PagePresetsAssetSource());
76
+ await cesdk.addPlugin(new StickerAssetSource());
77
+ await cesdk.addPlugin(new TextAssetSource());
78
+ await cesdk.addPlugin(new TextComponentAssetSource());
79
+ await cesdk.addPlugin(new TypefaceAssetSource());
80
+ await cesdk.addPlugin(new VectorShapeAssetSource());
81
+
82
+ await cesdk.actions.run('scene.create', {
83
+ page: { width: 800, height: 600, unit: 'Pixel' }
84
+ });
85
+
86
+ const engine = cesdk.engine;
87
+ const page = engine.block.findByType('page')[0];
88
+
89
+ // Calculate responsive grid layout for demonstrations
90
+ const pageWidth = engine.block.getWidth(page);
91
+ const pageHeight = engine.block.getHeight(page);
92
+ const layout = calculateGridLayout(pageWidth, pageHeight, {
93
+ cols: 2,
94
+ rows: 2,
95
+ spacing: 20,
96
+ margin: 20
97
+ });
98
+ const { blockWidth, blockHeight, getPosition } = layout;
99
+
100
+ // ===== Demonstration 1: Union Operation =====
101
+ // Create three equal circles for union demonstration
102
+ const circleSize = 120;
103
+ const unionCircle1 = engine.block.create('graphic');
104
+ engine.block.setShape(
105
+ unionCircle1,
106
+ engine.block.createShape('//ly.img.ubq/shape/ellipse')
107
+ );
108
+ const unionFill1 = engine.block.createFill('color');
109
+ engine.block.setColor(unionFill1, 'fill/color/value', {
110
+ r: 1.0,
111
+ g: 0.4,
112
+ b: 0.4,
113
+ a: 1.0
114
+ });
115
+ engine.block.setFill(unionCircle1, unionFill1);
116
+ engine.block.setWidth(unionCircle1, circleSize);
117
+ engine.block.setHeight(unionCircle1, circleSize);
118
+ engine.block.appendChild(page, unionCircle1);
119
+
120
+ const unionCircle2 = engine.block.create('graphic');
121
+ engine.block.setShape(
122
+ unionCircle2,
123
+ engine.block.createShape('//ly.img.ubq/shape/ellipse')
124
+ );
125
+ const unionFill2 = engine.block.createFill('color');
126
+ engine.block.setColor(unionFill2, 'fill/color/value', {
127
+ r: 0.4,
128
+ g: 1.0,
129
+ b: 0.4,
130
+ a: 1.0
131
+ });
132
+ engine.block.setFill(unionCircle2, unionFill2);
133
+ engine.block.setWidth(unionCircle2, circleSize);
134
+ engine.block.setHeight(unionCircle2, circleSize);
135
+ engine.block.appendChild(page, unionCircle2);
136
+
137
+ const unionCircle3 = engine.block.create('graphic');
138
+ engine.block.setShape(
139
+ unionCircle3,
140
+ engine.block.createShape('//ly.img.ubq/shape/ellipse')
141
+ );
142
+ const unionFill3 = engine.block.createFill('color');
143
+ engine.block.setColor(unionFill3, 'fill/color/value', {
144
+ r: 0.4,
145
+ g: 0.4,
146
+ b: 1.0,
147
+ a: 1.0
148
+ });
149
+ engine.block.setFill(unionCircle3, unionFill3);
150
+ engine.block.setWidth(unionCircle3, circleSize);
151
+ engine.block.setHeight(unionCircle3, circleSize);
152
+ engine.block.appendChild(page, unionCircle3);
153
+
154
+ // ===== Demonstration 2: Difference Operation =====
155
+ // Create image block for punch-out effect
156
+ const imageBlock = engine.block.create('graphic');
157
+ engine.block.setShape(
158
+ imageBlock,
159
+ engine.block.createShape('//ly.img.ubq/shape/rect')
160
+ );
161
+ const imageFill = engine.block.createFill('image');
162
+ engine.block.setString(
163
+ imageFill,
164
+ 'fill/image/imageFileURI',
165
+ 'https://img.ly/static/ubq_samples/sample_1.jpg'
166
+ );
167
+ engine.block.setFill(imageBlock, imageFill);
168
+ engine.block.setWidth(imageBlock, blockWidth * 0.9);
169
+ engine.block.setHeight(imageBlock, blockHeight * 0.9);
170
+ engine.block.appendChild(page, imageBlock);
171
+
172
+ // Create text block for punch-out
173
+ const textBlock = engine.block.create('text');
174
+ engine.block.replaceText(textBlock, 'CUTOUT');
175
+ engine.block.setFloat(textBlock, 'text/fontSize', 120);
176
+ engine.block.setWidth(textBlock, blockWidth * 0.9);
177
+ engine.block.appendChild(page, textBlock);
178
+
179
+ // ===== Demonstration 3: Intersection Operation =====
180
+ // Create two overlapping circles for intersection (20% larger)
181
+ const intersectCircleSize = circleSize * 1.2;
182
+ const intersectCircle1 = engine.block.create('graphic');
183
+ engine.block.setShape(
184
+ intersectCircle1,
185
+ engine.block.createShape('//ly.img.ubq/shape/ellipse')
186
+ );
187
+ const intersectFill1 = engine.block.createFill('color');
188
+ engine.block.setColor(intersectFill1, 'fill/color/value', {
189
+ r: 1.0,
190
+ g: 0.6,
191
+ b: 0.2,
192
+ a: 1.0
193
+ });
194
+ engine.block.setFill(intersectCircle1, intersectFill1);
195
+ engine.block.setWidth(intersectCircle1, intersectCircleSize);
196
+ engine.block.setHeight(intersectCircle1, intersectCircleSize);
197
+ engine.block.appendChild(page, intersectCircle1);
198
+
199
+ const intersectCircle2 = engine.block.create('graphic');
200
+ engine.block.setShape(
201
+ intersectCircle2,
202
+ engine.block.createShape('//ly.img.ubq/shape/ellipse')
203
+ );
204
+ const intersectFill2 = engine.block.createFill('color');
205
+ engine.block.setColor(intersectFill2, 'fill/color/value', {
206
+ r: 1.0,
207
+ g: 0.6,
208
+ b: 0.2,
209
+ a: 1.0
210
+ });
211
+ engine.block.setFill(intersectCircle2, intersectFill2);
212
+ engine.block.setWidth(intersectCircle2, intersectCircleSize);
213
+ engine.block.setHeight(intersectCircle2, intersectCircleSize);
214
+ engine.block.appendChild(page, intersectCircle2);
215
+
216
+ // ===== Demonstration 4: XOR Operation =====
217
+ // Create two overlapping circles for XOR
218
+ const xorCircle1 = engine.block.create('graphic');
219
+ engine.block.setShape(
220
+ xorCircle1,
221
+ engine.block.createShape('//ly.img.ubq/shape/ellipse')
222
+ );
223
+ const xorFill1 = engine.block.createFill('color');
224
+ engine.block.setColor(xorFill1, 'fill/color/value', {
225
+ r: 1.0,
226
+ g: 0.8,
227
+ b: 0.2,
228
+ a: 1.0
229
+ });
230
+ engine.block.setFill(xorCircle1, xorFill1);
231
+ engine.block.setWidth(xorCircle1, 140);
232
+ engine.block.setHeight(xorCircle1, 140);
233
+ engine.block.appendChild(page, xorCircle1);
234
+
235
+ const xorCircle2 = engine.block.create('graphic');
236
+ engine.block.setShape(
237
+ xorCircle2,
238
+ engine.block.createShape('//ly.img.ubq/shape/ellipse')
239
+ );
240
+ const xorFill2 = engine.block.createFill('color');
241
+ engine.block.setColor(xorFill2, 'fill/color/value', {
242
+ r: 0.2,
243
+ g: 0.8,
244
+ b: 1.0,
245
+ a: 1.0
246
+ });
247
+ engine.block.setFill(xorCircle2, xorFill2);
248
+ engine.block.setWidth(xorCircle2, 140);
249
+ engine.block.setHeight(xorCircle2, 140);
250
+ engine.block.appendChild(page, xorCircle2);
251
+
252
+ // Position all blocks in grid layout before combining
253
+ // Position union circles at vertices of equilateral triangle in top-left quadrant
254
+ const unionPos = getPosition(0);
255
+ const unionCenterX = unionPos.x + blockWidth / 2;
256
+ const unionCenterY = unionPos.y + blockHeight / 2;
257
+ const triangleRadius = 55; // Distance from center to each vertex
258
+ const halfCircle = circleSize / 2;
259
+ // Top vertex
260
+ engine.block.setPositionX(unionCircle1, unionCenterX - halfCircle);
261
+ engine.block.setPositionY(
262
+ unionCircle1,
263
+ unionCenterY - triangleRadius - halfCircle
264
+ );
265
+ // Bottom-right vertex (angle -30°)
266
+ engine.block.setPositionX(
267
+ unionCircle2,
268
+ unionCenterX + triangleRadius * 0.866 - halfCircle
269
+ );
270
+ engine.block.setPositionY(
271
+ unionCircle2,
272
+ unionCenterY + triangleRadius * 0.5 - halfCircle
273
+ );
274
+ // Bottom-left vertex (angle 210°)
275
+ engine.block.setPositionX(
276
+ unionCircle3,
277
+ unionCenterX - triangleRadius * 0.866 - halfCircle
278
+ );
279
+ engine.block.setPositionY(
280
+ unionCircle3,
281
+ unionCenterY + triangleRadius * 0.5 - halfCircle
282
+ );
283
+
284
+ // Center image in top-right quadrant, then center text on image
285
+ const diffPos = getPosition(1);
286
+ const imageX =
287
+ diffPos.x + (blockWidth - engine.block.getWidth(imageBlock)) / 2;
288
+ const imageY =
289
+ diffPos.y + (blockHeight - engine.block.getHeight(imageBlock)) / 2;
290
+ engine.block.setPositionX(imageBlock, imageX);
291
+ engine.block.setPositionY(imageBlock, imageY);
292
+
293
+ // Center text on the image block (not the quadrant)
294
+ const textX =
295
+ imageX +
296
+ (engine.block.getWidth(imageBlock) - engine.block.getWidth(textBlock)) /
297
+ 2;
298
+ const textY =
299
+ imageY +
300
+ (engine.block.getHeight(imageBlock) - engine.block.getHeight(textBlock)) /
301
+ 2;
302
+ engine.block.setPositionX(textBlock, textX);
303
+ engine.block.setPositionY(textBlock, textY);
304
+
305
+ // Center intersection circles in bottom-left quadrant with vertical overlap
306
+ const intersectPos = getPosition(2);
307
+ const intersectCenterX = intersectPos.x + blockWidth / 2;
308
+ const intersectCenterY = intersectPos.y + blockHeight / 2;
309
+ const halfIntersectCircle = intersectCircleSize / 2;
310
+ // Position circles to overlap vertically by about 50% (72px offset for 144px circles)
311
+ engine.block.setPositionX(
312
+ intersectCircle1,
313
+ intersectCenterX - halfIntersectCircle
314
+ );
315
+ engine.block.setPositionY(
316
+ intersectCircle1,
317
+ intersectCenterY - halfIntersectCircle - 36
318
+ );
319
+ engine.block.setPositionX(
320
+ intersectCircle2,
321
+ intersectCenterX - halfIntersectCircle
322
+ );
323
+ engine.block.setPositionY(
324
+ intersectCircle2,
325
+ intersectCenterY - halfIntersectCircle + 36
326
+ );
327
+
328
+ // Center XOR circles in bottom-right quadrant
329
+ const xorPos = getPosition(3);
330
+ const xorCenterX = xorPos.x + blockWidth / 2;
331
+ const xorCenterY = xorPos.y + blockHeight / 2;
332
+ engine.block.setPositionX(xorCircle1, xorCenterX - 70);
333
+ engine.block.setPositionY(xorCircle1, xorCenterY - 70);
334
+ engine.block.setPositionX(xorCircle2, xorCenterX - 14);
335
+ engine.block.setPositionY(xorCircle2, xorCenterY - 42);
336
+
337
+ // Perform boolean operations
338
+ // Check if blocks can be combined before attempting operations
339
+ const canCombineUnion = engine.block.isCombinable([
340
+ unionCircle1,
341
+ unionCircle2,
342
+ unionCircle3
343
+ ]);
344
+ const canCombineDiff = engine.block.isCombinable([imageBlock, textBlock]);
345
+ const canCombineIntersect = engine.block.isCombinable([
346
+ intersectCircle1,
347
+ intersectCircle2
348
+ ]);
349
+ const canCombineXor = engine.block.isCombinable([xorCircle1, xorCircle2]);
350
+
351
+ // Combine three circles using Union operation
352
+ if (canCombineUnion) {
353
+ engine.block.combine([unionCircle1, unionCircle2, unionCircle3], 'Union');
354
+ }
355
+
356
+ // Create punch-out effect using Difference operation
357
+ // Ensure image is at the bottom (will be the base block)
358
+ if (canCombineDiff) {
359
+ engine.block.sendToBack(imageBlock);
360
+ engine.block.combine([imageBlock, textBlock], 'Difference');
361
+ }
362
+
363
+ // Extract overlapping area using Intersection operation
364
+ if (canCombineIntersect) {
365
+ engine.block.combine(
366
+ [intersectCircle1, intersectCircle2],
367
+ 'Intersection'
368
+ );
369
+ }
370
+
371
+ // Create exclusion pattern using XOR operation
372
+ if (canCombineXor) {
373
+ engine.block.combine([xorCircle1, xorCircle2], 'XOR');
374
+ }
375
+
376
+ // Zoom to fit all demonstrations
377
+ await engine.scene.zoomToBlock(page, { padding: 40 });
378
+ }
379
+ }
380
+
381
+ export default Example;
382
+ ```
383
+
384
+ This guide covers checking combinability, applying the four boolean operations, understanding fill inheritance, and troubleshooting common combination issues.
385
+
386
+ ## Understanding Boolean Operations
387
+
388
+ CE.SDK offers four boolean operations for combining blocks into new shapes. Each operation applies geometric transformations to create unique compound designs.
389
+
390
+ **Union** merges all blocks into a single shape, adding their areas together. **Difference** subtracts overlapping areas from a base block, creating cutouts. **Intersection** keeps only the overlapping regions. **XOR** removes overlaps while preserving non-overlapping parts.
391
+
392
+ The operations use `engine.block.combine(ids, operation)` where `ids` is an array of blocks and `operation` is one of: `'Union'`, `'Difference'`, `'Intersection'`, or `'XOR'`.
393
+
394
+ Combining blocks with the `'Union'`, `'Intersection'`, or `'XOR'` operation results in a new block whose fill is that of the top-most block. The operation is applied pair-wise from the top-most block to the bottom-most block.
395
+
396
+ Combining blocks with the `'Difference'` operation results in a new block whose fill is that of the bottom-most block. The operation is applied pair-wise from the bottom-most block to the top-most block.
397
+
398
+ The combined blocks will be destroyed if the `'lifecycle/destroy'` scope is enabled.
399
+
400
+ > **Note:** **Only the following blocks can be combined\*** A graphics block
401
+ >
402
+ > - A text block
403
+
404
+ ## Checking Combinability
405
+
406
+ Before combining blocks, verify they can be combined using `engine.block.isCombinable(ids)`. Only graphic blocks and text blocks with the `'lifecycle/duplicate'` scope enabled can be combined.
407
+
408
+ ```typescript highlight-check-combinability
409
+ // Check if blocks can be combined before attempting operations
410
+ const canCombineUnion = engine.block.isCombinable([
411
+ unionCircle1,
412
+ unionCircle2,
413
+ unionCircle3
414
+ ]);
415
+ const canCombineDiff = engine.block.isCombinable([imageBlock, textBlock]);
416
+ const canCombineIntersect = engine.block.isCombinable([
417
+ intersectCircle1,
418
+ intersectCircle2
419
+ ]);
420
+ const canCombineXor = engine.block.isCombinable([xorCircle1, xorCircle2]);
421
+ ```
422
+
423
+ The check returns `true` if all blocks meet the requirements. Attempting to combine incompatible blocks will fail.
424
+
425
+ ## Combining with Union
426
+
427
+ Union merges multiple shapes into one compound outline. The result inherits the fill from the top-most block in the z-order.
428
+
429
+ ```typescript highlight-combine-union
430
+ // Combine three circles using Union operation
431
+ if (canCombineUnion) {
432
+ engine.block.combine([unionCircle1, unionCircle2, unionCircle3], 'Union');
433
+ }
434
+ ```
435
+
436
+ We create three circles with different colors. Union combines them into a single block with the blue fill (from the top-most circle).
437
+
438
+ Use Union for merging logos, creating compound icons, and building complex shapes from simple primitives.
439
+
440
+ ## Combining with Difference
441
+
442
+ Difference subtracts overlapping shapes from a base block, creating cutout effects. The result inherits the fill from the bottom-most block.
443
+
444
+ ```typescript highlight-combine-difference
445
+ // Create punch-out effect using Difference operation
446
+ // Ensure image is at the bottom (will be the base block)
447
+ if (canCombineDiff) {
448
+ engine.block.sendToBack(imageBlock);
449
+ engine.block.combine([imageBlock, textBlock], 'Difference');
450
+ }
451
+ ```
452
+
453
+ We position an image as the bottom block and text above it. Difference removes the text shape from the image, creating a punch-out effect where the text was.
454
+
455
+ Use Difference for text punch-outs, logo cutouts, and mask effects. Ensure the base block is at the bottom using `engine.block.sendToBack()`.
456
+
457
+ ## Combining with Intersection
458
+
459
+ Intersection keeps only the overlapping areas of all blocks. The result inherits the fill from the bottom-most block.
460
+
461
+ ```typescript highlight-combine-intersection
462
+ // Extract overlapping area using Intersection operation
463
+ if (canCombineIntersect) {
464
+ engine.block.combine([intersectCircle1, intersectCircle2], 'Intersection');
465
+ }
466
+ ```
467
+
468
+ We create two overlapping circles. Intersection extracts only the area where they overlap, discarding the rest.
469
+
470
+ Use Intersection for lens effects, overlapping patterns, and extracting geometric intersections.
471
+
472
+ ## Combining with XOR
473
+
474
+ XOR (exclusive OR) keeps non-overlapping parts while removing intersections, creating an exclusion or donut effect. The result inherits the fill from the top-most block.
475
+
476
+ ```typescript highlight-combine-xor
477
+ // Create exclusion pattern using XOR operation
478
+ if (canCombineXor) {
479
+ engine.block.combine([xorCircle1, xorCircle2], 'XOR');
480
+ }
481
+ ```
482
+
483
+ We create two overlapping circles. XOR removes the overlapping area while preserving the non-overlapping parts.
484
+
485
+ Use XOR for donut shapes, exclusion patterns, and inverted overlaps.
486
+
487
+ ## Understanding Fill Inheritance
488
+
489
+ Combined blocks inherit properties from a prioritized block based on the operation.
490
+
491
+ **Union, Intersection, XOR**: The new block inherits the fill from the top-most block. Operations are applied pair-wise from highest to lowest sort order.
492
+
493
+ **Difference**: The new block inherits the fill from the bottom-most block. Operations are applied pair-wise from lowest to highest sort order.
494
+
495
+ Original blocks are destroyed after combination if the `'lifecycle/destroy'` scope is enabled. Control which fill is inherited by reordering blocks with `engine.block.bringToFront()` and `engine.block.sendToBack()`.
496
+
497
+ ## Scope Requirements
498
+
499
+ Combining blocks requires specific scopes:
500
+
501
+ **`'lifecycle/duplicate'`**: Required on all blocks. Checked by `engine.block.isCombinable()`. If missing, combination fails.
502
+
503
+ **`'lifecycle/destroy'`**: Required for destroying original blocks. If disabled, original blocks remain after combination.
504
+
505
+ Check scopes with `engine.block.isScopeEnabled(id, scope)` and enable with `engine.block.setScopeEnabled(id, scope, true)`.
506
+
507
+ ## Troubleshooting
508
+
509
+ ### Combination Fails Silently
510
+
511
+ Verify blocks are combinable using `engine.block.isCombinable(ids)` before attempting operations. Only graphic blocks and text blocks can be combined. Check that the `'lifecycle/duplicate'` scope is enabled on all blocks.
512
+
513
+ ### Original Blocks Not Destroyed
514
+
515
+ Ensure the `'lifecycle/destroy'` scope is enabled on input blocks. If disabled, blocks remain after combination. Check with `engine.block.isScopeEnabled(id, 'lifecycle/destroy')`.
516
+
517
+ ### Wrong Fill on Result
518
+
519
+ For Union/Intersection/XOR, the top-most block's fill is inherited. For Difference, the bottom-most block's fill is inherited. Reorder blocks before combining using `engine.block.bringToFront()` or `engine.block.sendToBack()`.
520
+
521
+ ### Unexpected Shape Result
522
+
523
+ Boolean operations are applied pair-wise in specific order. Union/Intersection/XOR start with the highest sort order (top-most). Difference starts with the lowest sort order (bottom-most). Control order with z-order methods.
524
+
525
+ ## Full Code
526
+
527
+ Here's the complete implementation showing all four boolean operations:
528
+
529
+ ```typescript
530
+ import CreativeEditorSDK from '@cesdk/cesdk-js';
531
+ import {
532
+ BlurAssetSource,
533
+ ColorPaletteAssetSource,
534
+ CropPresetsAssetSource,
535
+ DemoAssetSources,
536
+ EffectsAssetSource,
537
+ FiltersAssetSource,
538
+ PagePresetsAssetSource,
539
+ StickerAssetSource,
540
+ TextAssetSource,
541
+ TextComponentAssetSource,
542
+ TypefaceAssetSource,
543
+ UploadAssetSources,
544
+ VectorShapeAssetSource
545
+ } from '@cesdk/cesdk-js/plugins';
546
+
547
+ const config = {
548
+ license: 'YOUR_CESDK_LICENSE_KEY',
549
+ callbacks: {
550
+ onUpload: 'local'
551
+ }
552
+ };
553
+
554
+ const cesdk = await CreativeEditorSDK.create('#cesdk_container', config);
555
+
556
+ // Add default asset source plugins
557
+ await cesdk.addPlugin(new BlurAssetSource());
558
+ await cesdk.addPlugin(new ColorPaletteAssetSource());
559
+ await cesdk.addPlugin(new CropPresetsAssetSource());
560
+ await cesdk.addPlugin(new EffectsAssetSource());
561
+ await cesdk.addPlugin(new FiltersAssetSource());
562
+ await cesdk.addPlugin(new PagePresetsAssetSource());
563
+ await cesdk.addPlugin(new StickerAssetSource());
564
+ await cesdk.addPlugin(new TextAssetSource());
565
+ await cesdk.addPlugin(new TextComponentAssetSource());
566
+ await cesdk.addPlugin(new TypefaceAssetSource());
567
+ await cesdk.addPlugin(new VectorShapeAssetSource());
568
+
569
+ // Add demo and upload sources
570
+ await cesdk.addPlugin(
571
+ new UploadAssetSources({ include: ['ly.img.image.upload'] })
572
+ );
573
+ await cesdk.addPlugin(
574
+ new DemoAssetSources({
575
+ include: [
576
+ 'ly.img.templates.blank.*',
577
+ 'ly.img.templates.presentation.*',
578
+ 'ly.img.templates.print.*',
579
+ 'ly.img.templates.social.*',
580
+ 'ly.img.image.*'
581
+ ]
582
+ })
583
+ );
584
+ await cesdk.actions.run('scene.create');
585
+
586
+ const engine = cesdk.engine;
587
+ const page = engine.block.findByType('page')[0];
588
+
589
+ engine.block.setWidth(page, 800);
590
+ engine.block.setHeight(page, 600);
591
+
592
+ const pageWidth = engine.block.getWidth(page);
593
+ const pageHeight = engine.block.getHeight(page);
594
+ const quadrantWidth = pageWidth / 2;
595
+ const quadrantHeight = pageHeight / 2;
596
+
597
+ // Union: Combine three circles in top-left quadrant (20% larger, centered)
598
+ const circle1 = engine.block.create('graphic');
599
+ engine.block.setShape(
600
+ circle1,
601
+ engine.block.createShape('//ly.img.ubq/shape/ellipse')
602
+ );
603
+ const fill1 = engine.block.createFill('color');
604
+ engine.block.setColor(fill1, 'fill/color/value', {
605
+ r: 1.0,
606
+ g: 0.4,
607
+ b: 0.4,
608
+ a: 1.0
609
+ });
610
+ engine.block.setFill(circle1, fill1);
611
+ engine.block.setWidth(circle1, 96); // 80 * 1.2 = 96
612
+ engine.block.setHeight(circle1, 96);
613
+ engine.block.setPositionX(circle1, quadrantWidth / 2 - 48);
614
+ engine.block.setPositionY(circle1, quadrantHeight / 2 - 48);
615
+ engine.block.appendChild(page, circle1);
616
+
617
+ const circle2 = engine.block.create('graphic');
618
+ engine.block.setShape(
619
+ circle2,
620
+ engine.block.createShape('//ly.img.ubq/shape/ellipse')
621
+ );
622
+ const fill2 = engine.block.createFill('color');
623
+ engine.block.setColor(fill2, 'fill/color/value', {
624
+ r: 0.4,
625
+ g: 1.0,
626
+ b: 0.4,
627
+ a: 1.0
628
+ });
629
+ engine.block.setFill(circle2, fill2);
630
+ engine.block.setWidth(circle2, 96); // 80 * 1.2 = 96
631
+ engine.block.setHeight(circle2, 96);
632
+ engine.block.setPositionX(circle2, quadrantWidth / 2 + 24);
633
+ engine.block.setPositionY(circle2, quadrantHeight / 2 - 48);
634
+ engine.block.appendChild(page, circle2);
635
+
636
+ const circle3 = engine.block.create('graphic');
637
+ engine.block.setShape(
638
+ circle3,
639
+ engine.block.createShape('//ly.img.ubq/shape/ellipse')
640
+ );
641
+ const fill3 = engine.block.createFill('color');
642
+ engine.block.setColor(fill3, 'fill/color/value', {
643
+ r: 0.4,
644
+ g: 0.4,
645
+ b: 1.0,
646
+ a: 1.0
647
+ });
648
+ engine.block.setFill(circle3, fill3);
649
+ engine.block.setWidth(circle3, 120); // 100 * 1.2 = 120
650
+ engine.block.setHeight(circle3, 120);
651
+ engine.block.setPositionX(circle3, quadrantWidth / 2 - 12);
652
+ engine.block.setPositionY(circle3, quadrantHeight / 2 - 12);
653
+ engine.block.appendChild(page, circle3);
654
+
655
+ // Check combinability and perform Union
656
+ if (engine.block.isCombinable([circle1, circle2, circle3])) {
657
+ const unionResult = engine.block.combine(
658
+ [circle1, circle2, circle3],
659
+ 'Union'
660
+ );
661
+ }
662
+
663
+ // Difference: Create punch-out text effect in top-right quadrant
664
+ const imageWidth = 360; // 300 * 1.2 = 360
665
+ const imageHeight = 240; // 200 * 1.2 = 240
666
+ const imageBlock = engine.block.create('graphic');
667
+ engine.block.setShape(
668
+ imageBlock,
669
+ engine.block.createShape('//ly.img.ubq/shape/rect')
670
+ );
671
+ const imageFill = engine.block.createFill('image');
672
+ engine.block.setString(
673
+ imageFill,
674
+ 'fill/image/imageFileURI',
675
+ 'https://img.ly/static/ubq_samples/sample_1.jpg'
676
+ );
677
+ engine.block.setFill(imageBlock, imageFill);
678
+ engine.block.setWidth(imageBlock, imageWidth);
679
+ engine.block.setHeight(imageBlock, imageHeight);
680
+ engine.block.setPositionX(
681
+ imageBlock,
682
+ quadrantWidth + (quadrantWidth - imageWidth) / 2
683
+ );
684
+ engine.block.setPositionY(imageBlock, (quadrantHeight - imageHeight) / 2);
685
+ engine.block.appendChild(page, imageBlock);
686
+
687
+ const textBlock = engine.block.create('text');
688
+ engine.block.replaceText(textBlock, 'CUTOUT');
689
+ engine.block.setFloat(textBlock, 'text/fontSize', 170);
690
+ const textWidth = 300;
691
+ const textHeight = 120;
692
+ engine.block.setWidth(textBlock, textWidth);
693
+ engine.block.setHeight(textBlock, textHeight);
694
+ // Center text on the image
695
+ engine.block.setPositionX(
696
+ textBlock,
697
+ quadrantWidth + (quadrantWidth - textWidth) / 2
698
+ );
699
+ engine.block.setPositionY(textBlock, (quadrantHeight - textHeight) / 2);
700
+ engine.block.appendChild(page, textBlock);
701
+
702
+ // Ensure image is at bottom for Difference operation
703
+ engine.block.sendToBack(imageBlock);
704
+
705
+ if (engine.block.isCombinable([imageBlock, textBlock])) {
706
+ const differenceResult = engine.block.combine(
707
+ [imageBlock, textBlock],
708
+ 'Difference'
709
+ );
710
+ }
711
+
712
+ // Zoom to see all results
713
+ await engine.scene.zoomToBlock(page, { padding: 40 });
714
+ ```
715
+
716
+ ## API Reference
717
+
718
+ | Method | Category | Purpose |
719
+ | -------------------------------------------------- | ----------- | ----------------------------------- |
720
+ | `engine.block.isCombinable(ids)` | Validation | Check if blocks can be combined |
721
+ | `engine.block.combine(ids, op)` | Combination | Perform boolean operation on blocks |
722
+ | `engine.block.create('graphic')` | Creation | Create graphic block for shapes |
723
+ | `engine.block.create('text')` | Creation | Create text block |
724
+ | `engine.block.createShape(type)` | Shapes | Create shape (ellipse, rect, etc.) |
725
+ | `engine.block.setShape(id, shape)` | Shapes | Apply shape to graphic block |
726
+ | `engine.block.createFill(type)` | Fills | Create fill (color, image, etc.) |
727
+ | `engine.block.setFill(id, fill)` | Fills | Apply fill to block |
728
+ | `engine.block.setPositionX/Y(id, val)` | Transform | Position blocks before combining |
729
+ | `engine.block.setWidth/Height(id, val)` | Transform | Size blocks before combining |
730
+ | `engine.block.appendChild(parent, child)` | Hierarchy | Add blocks to scene |
731
+ | `engine.block.isScopeEnabled(id, scope)` | Scope | Check if scope is enabled |
732
+ | `engine.block.setScopeEnabled(id, scope, enabled)` | Scope | Enable/disable scope |
733
+ | `engine.block.bringToFront(id)` | Order | Control stacking order |
734
+ | `engine.block.sendToBack(id)` | Order | Control stacking order |
735
+
736
+ ---
737
+
738
+ ## More Resources
739
+
740
+ - **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
741
+ - **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
742
+ - **[Web Documentation](./js.md)** - Interactive documentation with examples
743
+ - **[Support](mailto:support@img.ly)** - Contact IMG.LY support