@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,734 @@
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 Compositions](./create-composition.md) > [Position and Align](./insert-media/position-and-align.md)
4
+
5
+ ---
6
+
7
+ Position, align, and distribute design elements precisely using CE.SDK's
8
+ layout APIs and snapping system.
9
+
10
+ ![Positioning and Alignment example showing blocks arranged in a grid layout](https://img.ly/docs/cesdk/./assets/browser.hero.webp)
11
+
12
+ > **Reading time:** 8 minutes
13
+ >
14
+ > **Resources:**
15
+ >
16
+ > - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
17
+ > - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-create-composition-position-and-align-browser)
18
+ > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-composition-position-and-align-browser)
19
+ > - [Live demo](https://img.ly/docs/cesdk/examples/guides-create-composition-position-and-align-browser/)
20
+
21
+ CE.SDK positions blocks relative to their parent container with the origin at the top left. You can set positions using absolute values (design units) or as percentages of the parent's dimensions. For multi-element layouts, alignment and distribution APIs arrange blocks precisely without manual calculations. In the browser, snapping guides provide visual feedback when dragging elements.
22
+
23
+ ```typescript file=@cesdk_web_examples/guides-create-composition-position-and-align-browser/browser.ts reference-only
24
+ import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
25
+
26
+ import {
27
+ BlurAssetSource,
28
+ ColorPaletteAssetSource,
29
+ CropPresetsAssetSource,
30
+ DemoAssetSources,
31
+ EffectsAssetSource,
32
+ FiltersAssetSource,
33
+ PagePresetsAssetSource,
34
+ StickerAssetSource,
35
+ TextAssetSource,
36
+ TextComponentAssetSource,
37
+ TypefaceAssetSource,
38
+ UploadAssetSources,
39
+ VectorShapeAssetSource
40
+ } from '@cesdk/cesdk-js/plugins';
41
+ import { DesignEditorConfig } from './design-editor/plugin';
42
+ import packageJson from './package.json';
43
+
44
+ /**
45
+ * CE.SDK Plugin: Positioning and Alignment Guide
46
+ *
47
+ * Demonstrates positioning, aligning, and distributing design elements:
48
+ * - Setting block positions with absolute and percentage modes
49
+ * - Aligning multiple blocks horizontally and vertically
50
+ * - Aligning a single block within its parent
51
+ * - Distributing blocks with even spacing
52
+ * - Configuring snapping thresholds and guide colors
53
+ */
54
+ class Example implements EditorPlugin {
55
+ name = packageJson.name;
56
+
57
+ version = packageJson.version;
58
+
59
+ private currentDemo = 'position';
60
+
61
+ async initialize({ cesdk }: EditorPluginContext): Promise<void> {
62
+ if (!cesdk) {
63
+ throw new Error('CE.SDK instance is required for this plugin');
64
+ }
65
+
66
+ await cesdk.addPlugin(new DesignEditorConfig());
67
+
68
+ // Add asset source plugins
69
+ await cesdk.addPlugin(new BlurAssetSource());
70
+ await cesdk.addPlugin(new ColorPaletteAssetSource());
71
+ await cesdk.addPlugin(new CropPresetsAssetSource());
72
+ await cesdk.addPlugin(
73
+ new UploadAssetSources({ include: ['ly.img.image.upload'] })
74
+ );
75
+ await cesdk.addPlugin(
76
+ new DemoAssetSources({
77
+ include: [
78
+ 'ly.img.templates.blank.*',
79
+ 'ly.img.templates.presentation.*',
80
+ 'ly.img.templates.print.*',
81
+ 'ly.img.templates.social.*',
82
+ 'ly.img.image.*'
83
+ ]
84
+ })
85
+ );
86
+ await cesdk.addPlugin(new EffectsAssetSource());
87
+ await cesdk.addPlugin(new FiltersAssetSource());
88
+ await cesdk.addPlugin(new PagePresetsAssetSource());
89
+ await cesdk.addPlugin(new StickerAssetSource());
90
+ await cesdk.addPlugin(new TextAssetSource());
91
+ await cesdk.addPlugin(new TextComponentAssetSource());
92
+ await cesdk.addPlugin(new TypefaceAssetSource());
93
+ await cesdk.addPlugin(new VectorShapeAssetSource());
94
+
95
+ await cesdk.actions.run('scene.create', {
96
+ page: { width: 800, height: 600, unit: 'Pixel' }
97
+ });
98
+
99
+ // Create navigation buttons for different demos
100
+ this.addNavigationButtons(cesdk);
101
+
102
+ // Run the initial demo
103
+ await this.runPositionDemo(cesdk);
104
+ }
105
+
106
+ private addNavigationButtons(
107
+ cesdk: NonNullable<EditorPluginContext['cesdk']>
108
+ ) {
109
+ // Register position demo button component
110
+ cesdk.ui.registerComponent('position-demo-btn', ({ builder }) => {
111
+ builder.Button('position-demo', {
112
+ label: 'Position',
113
+ variant: 'regular',
114
+ isActive: this.currentDemo === 'position',
115
+ onClick: async () => {
116
+ this.currentDemo = 'position';
117
+ await this.clearAndRun(cesdk, () => this.runPositionDemo(cesdk));
118
+ }
119
+ });
120
+ });
121
+
122
+ // Register align demo button component
123
+ cesdk.ui.registerComponent('align-demo-btn', ({ builder }) => {
124
+ builder.Button('align-demo', {
125
+ label: 'Align',
126
+ variant: 'regular',
127
+ isActive: this.currentDemo === 'align',
128
+ onClick: async () => {
129
+ this.currentDemo = 'align';
130
+ await this.clearAndRun(cesdk, () => this.runAlignDemo(cesdk));
131
+ }
132
+ });
133
+ });
134
+
135
+ // Register distribute demo button component
136
+ cesdk.ui.registerComponent('distribute-demo-btn', ({ builder }) => {
137
+ builder.Button('distribute-demo', {
138
+ label: 'Distribute',
139
+ variant: 'regular',
140
+ isActive: this.currentDemo === 'distribute',
141
+ onClick: async () => {
142
+ this.currentDemo = 'distribute';
143
+ await this.clearAndRun(cesdk, () => this.runDistributeDemo(cesdk));
144
+ }
145
+ });
146
+ });
147
+
148
+ // Register snapping demo button component
149
+ cesdk.ui.registerComponent('snapping-demo-btn', ({ builder }) => {
150
+ builder.Button('snapping-demo', {
151
+ label: 'Snapping',
152
+ variant: 'regular',
153
+ isActive: this.currentDemo === 'snapping',
154
+ onClick: async () => {
155
+ this.currentDemo = 'snapping';
156
+ await this.clearAndRun(cesdk, () => this.runSnappingDemo(cesdk));
157
+ }
158
+ });
159
+ });
160
+
161
+ // Add buttons to navigation bar
162
+ cesdk.ui.insertOrderComponent(
163
+ { in: 'ly.img.navigation.bar', position: 'end' },
164
+ 'position-demo-btn'
165
+ );
166
+ cesdk.ui.insertOrderComponent(
167
+ { in: 'ly.img.navigation.bar', position: 'end' },
168
+ 'align-demo-btn'
169
+ );
170
+ cesdk.ui.insertOrderComponent(
171
+ { in: 'ly.img.navigation.bar', position: 'end' },
172
+ 'distribute-demo-btn'
173
+ );
174
+ cesdk.ui.insertOrderComponent(
175
+ { in: 'ly.img.navigation.bar', position: 'end' },
176
+ 'snapping-demo-btn'
177
+ );
178
+ }
179
+
180
+ private async clearAndRun(
181
+ cesdk: NonNullable<EditorPluginContext['cesdk']>,
182
+ runDemo: () => Promise<void>
183
+ ) {
184
+ const engine = cesdk.engine;
185
+ const page = engine.block.findByType('page')[0];
186
+
187
+ // Remove all children from the page
188
+ const children = engine.block.getChildren(page);
189
+ children.forEach((child) => {
190
+ engine.block.destroy(child);
191
+ });
192
+
193
+ // Run the new demo
194
+ await runDemo();
195
+ }
196
+
197
+ private async runPositionDemo(
198
+ cesdk: NonNullable<EditorPluginContext['cesdk']>
199
+ ) {
200
+ const engine = cesdk.engine;
201
+ const page = engine.block.findByType('page')[0];
202
+ const pageWidth = engine.block.getWidth(page);
203
+ const pageHeight = engine.block.getHeight(page);
204
+
205
+ // Create image blocks to demonstrate positioning
206
+ const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
207
+ const blockSize = { width: 150, height: 100 };
208
+
209
+ // Block 1: Absolute positioning at specific coordinates
210
+ const block1 = await engine.block.addImage(imageUri, { size: blockSize });
211
+ engine.block.appendChild(page, block1);
212
+
213
+ // Set position using absolute coordinates (in design units)
214
+ engine.block.setPositionX(block1, 50);
215
+ engine.block.setPositionY(block1, 50);
216
+
217
+ // Query the current position
218
+ const x1 = engine.block.getPositionX(block1);
219
+ const y1 = engine.block.getPositionY(block1);
220
+ // eslint-disable-next-line no-console
221
+ console.log(`Block 1 position: (${x1}, ${y1})`);
222
+
223
+ // Block 2: Percentage-based positioning (relative to parent)
224
+ const block2 = await engine.block.addImage(imageUri, { size: blockSize });
225
+ engine.block.appendChild(page, block2);
226
+
227
+ // Set position mode to Percent and use percentage values
228
+ engine.block.setPositionXMode(block2, 'Percent');
229
+ engine.block.setPositionYMode(block2, 'Percent');
230
+ engine.block.setPositionX(block2, 0.5); // 50% from left
231
+ engine.block.setPositionY(block2, 0.5); // 50% from top
232
+
233
+ // Query the position mode
234
+ const xMode = engine.block.getPositionXMode(block2);
235
+ const yMode = engine.block.getPositionYMode(block2);
236
+ // eslint-disable-next-line no-console
237
+ console.log(`Block 2 position modes: X=${xMode}, Y=${yMode}`);
238
+
239
+ // Block 3: Using the convenience method setPosition()
240
+ const block3 = await engine.block.addImage(imageUri, { size: blockSize });
241
+ engine.block.appendChild(page, block3);
242
+
243
+ // Set both X and Y at once with a specific position mode
244
+ engine.block.setPosition(block3, 0.75, 0.25, { positionMode: 'Percent' });
245
+
246
+ // eslint-disable-next-line no-console
247
+ console.log(
248
+ `Block 3 set to 75% horizontal, 25% vertical using setPosition()`
249
+ );
250
+
251
+ // Block 4: Bottom right corner using absolute positioning
252
+ const block4 = await engine.block.addImage(imageUri, { size: blockSize });
253
+ engine.block.appendChild(page, block4);
254
+ engine.block.setPositionX(block4, pageWidth - blockSize.width - 50);
255
+ engine.block.setPositionY(block4, pageHeight - blockSize.height - 50);
256
+
257
+ // eslint-disable-next-line no-console
258
+ console.log(
259
+ 'Position demo initialized. Blocks placed at various positions.'
260
+ );
261
+ }
262
+
263
+ private async runAlignDemo(cesdk: NonNullable<EditorPluginContext['cesdk']>) {
264
+ const engine = cesdk.engine;
265
+ const page = engine.block.findByType('page')[0];
266
+
267
+ // Create multiple blocks for alignment demonstration
268
+ const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
269
+ const blockSize = { width: 100, height: 80 };
270
+
271
+ // Create 4 blocks at random-ish positions
272
+ const blocks: number[] = [];
273
+ const positions = [
274
+ { x: 100, y: 100 },
275
+ { x: 250, y: 150 },
276
+ { x: 180, y: 250 },
277
+ { x: 350, y: 200 }
278
+ ];
279
+
280
+ for (const pos of positions) {
281
+ const block = await engine.block.addImage(imageUri, { size: blockSize });
282
+ engine.block.appendChild(page, block);
283
+ engine.block.setPositionX(block, pos.x);
284
+ engine.block.setPositionY(block, pos.y);
285
+ blocks.push(block);
286
+ }
287
+
288
+ // Check if blocks can be aligned
289
+ const canAlign = engine.block.isAlignable(blocks);
290
+ // eslint-disable-next-line no-console
291
+ console.log('Can align blocks:', canAlign);
292
+
293
+ if (canAlign) {
294
+ // Align blocks horizontally to the left edge of their bounding box
295
+ engine.block.alignHorizontally(blocks, 'Left');
296
+ // eslint-disable-next-line no-console
297
+ console.log('Blocks aligned to left edge');
298
+ }
299
+
300
+ // Create a single block to demonstrate aligning within parent
301
+ const singleBlock = await engine.block.addImage(imageUri, {
302
+ size: { width: 150, height: 100 }
303
+ });
304
+ engine.block.appendChild(page, singleBlock);
305
+
306
+ // Position initially off-center
307
+ engine.block.setPositionX(singleBlock, 500);
308
+ engine.block.setPositionY(singleBlock, 300);
309
+
310
+ // Align single block to center of parent (page)
311
+ if (engine.block.isAlignable([singleBlock])) {
312
+ engine.block.alignHorizontally([singleBlock], 'Center');
313
+ engine.block.alignVertically([singleBlock], 'Center');
314
+ // eslint-disable-next-line no-console
315
+ console.log('Single block centered within parent');
316
+ }
317
+
318
+ // eslint-disable-next-line no-console
319
+ console.log(
320
+ 'Align demo initialized. Left group aligned left, single block centered.'
321
+ );
322
+ }
323
+
324
+ private async runDistributeDemo(
325
+ cesdk: NonNullable<EditorPluginContext['cesdk']>
326
+ ) {
327
+ const engine = cesdk.engine;
328
+ const page = engine.block.findByType('page')[0];
329
+
330
+ // Create multiple blocks for distribution demonstration
331
+ const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
332
+ const blockSize = { width: 100, height: 80 };
333
+
334
+ // Create 4 blocks at uneven horizontal positions
335
+ const blocks: number[] = [];
336
+ const xPositions = [50, 180, 400, 650];
337
+
338
+ for (let i = 0; i < xPositions.length; i++) {
339
+ const block = await engine.block.addImage(imageUri, { size: blockSize });
340
+ engine.block.appendChild(page, block);
341
+ engine.block.setPositionX(block, xPositions[i]);
342
+ engine.block.setPositionY(block, 200); // Same Y for horizontal distribution
343
+ blocks.push(block);
344
+ }
345
+
346
+ // Check if blocks can be distributed
347
+ const canDistribute = engine.block.isDistributable(blocks);
348
+ // eslint-disable-next-line no-console
349
+ console.log('Can distribute blocks:', canDistribute);
350
+
351
+ if (canDistribute) {
352
+ // Distribute blocks horizontally with even spacing
353
+ engine.block.distributeHorizontally(blocks);
354
+ // eslint-disable-next-line no-console
355
+ console.log('Blocks distributed horizontally with even spacing');
356
+ }
357
+
358
+ // Create another set of blocks for vertical distribution
359
+ const verticalBlocks: number[] = [];
360
+ const yPositions = [50, 150, 350, 500];
361
+
362
+ for (let i = 0; i < yPositions.length; i++) {
363
+ const block = await engine.block.addImage(imageUri, { size: blockSize });
364
+ engine.block.appendChild(page, block);
365
+ engine.block.setPositionX(block, 600); // Same X for vertical distribution
366
+ engine.block.setPositionY(block, yPositions[i]);
367
+ verticalBlocks.push(block);
368
+ }
369
+
370
+ if (engine.block.isDistributable(verticalBlocks)) {
371
+ engine.block.distributeVertically(verticalBlocks);
372
+ // eslint-disable-next-line no-console
373
+ console.log('Vertical blocks distributed with even spacing');
374
+ }
375
+
376
+ // eslint-disable-next-line no-console
377
+ console.log(
378
+ 'Distribute demo initialized. Left group horizontal, right group vertical.'
379
+ );
380
+ }
381
+
382
+ private async runSnappingDemo(
383
+ cesdk: NonNullable<EditorPluginContext['cesdk']>
384
+ ) {
385
+ const engine = cesdk.engine;
386
+ const page = engine.block.findByType('page')[0];
387
+
388
+ // Create some blocks to demonstrate snapping
389
+ const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
390
+
391
+ // Create reference blocks (these will act as snap targets)
392
+ const refBlock1 = await engine.block.addImage(imageUri, {
393
+ size: { width: 150, height: 100 }
394
+ });
395
+ engine.block.appendChild(page, refBlock1);
396
+ engine.block.setPositionX(refBlock1, 100);
397
+ engine.block.setPositionY(refBlock1, 100);
398
+
399
+ const refBlock2 = await engine.block.addImage(imageUri, {
400
+ size: { width: 150, height: 100 }
401
+ });
402
+ engine.block.appendChild(page, refBlock2);
403
+ engine.block.setPositionX(refBlock2, 100);
404
+ engine.block.setPositionY(refBlock2, 350);
405
+
406
+ // Create a draggable block
407
+ const dragBlock = await engine.block.addImage(imageUri, {
408
+ size: { width: 120, height: 80 }
409
+ });
410
+ engine.block.appendChild(page, dragBlock);
411
+ engine.block.setPositionX(dragBlock, 400);
412
+ engine.block.setPositionY(dragBlock, 225);
413
+
414
+ // Configure position snapping threshold (pixels)
415
+ // Higher values = snapping activates from further away
416
+ engine.editor.setSettingFloat('positionSnappingThreshold', 10);
417
+
418
+ // Configure rotation snapping threshold (degrees)
419
+ engine.editor.setSettingFloat('rotationSnappingThreshold', 5);
420
+ // eslint-disable-next-line no-console
421
+ console.log('Snapping thresholds configured: position=10px, rotation=5deg');
422
+
423
+ // Customize snapping guide colors
424
+ engine.editor.setSettingColor('snappingGuideColor', {
425
+ r: 0.2,
426
+ g: 0.6,
427
+ b: 1.0,
428
+ a: 1.0
429
+ });
430
+
431
+ engine.editor.setSettingColor('rotationSnappingGuideColor', {
432
+ r: 1.0,
433
+ g: 0.4,
434
+ b: 0.2,
435
+ a: 1.0
436
+ });
437
+
438
+ engine.editor.setSettingColor('ruleOfThirdsLineColor', {
439
+ r: 0.5,
440
+ g: 0.5,
441
+ b: 0.5,
442
+ a: 0.5
443
+ });
444
+ // eslint-disable-next-line no-console
445
+ console.log('Snapping guide colors configured');
446
+
447
+ // Select the draggable block so user can interact with it
448
+ engine.block.setSelected(dragBlock, true);
449
+
450
+ // eslint-disable-next-line no-console
451
+ console.log(
452
+ 'Snapping demo initialized. Drag the selected block to see snapping guides.'
453
+ );
454
+ }
455
+ }
456
+
457
+ export default Example;
458
+ ```
459
+
460
+ This guide covers how to set block positions using different modes, align blocks horizontally and vertically, distribute blocks with even spacing, and configure snapping for interactive editing.
461
+
462
+ ## Coordinate System
463
+
464
+ CE.SDK uses a coordinate system where the origin (0, 0) is at the top-left corner of the parent container. The X axis extends to the right and the Y axis extends downward. All positions are relative to the block's parent.
465
+
466
+ ## Setting Block Positions
467
+
468
+ ### Absolute Positioning
469
+
470
+ We can position blocks using absolute coordinates in design units. This is useful when you need precise control over element placement.
471
+
472
+ ```typescript highlight-absolute-position
473
+ // Set position using absolute coordinates (in design units)
474
+ engine.block.setPositionX(block1, 50);
475
+ engine.block.setPositionY(block1, 50);
476
+
477
+ // Query the current position
478
+ const x1 = engine.block.getPositionX(block1);
479
+ const y1 = engine.block.getPositionY(block1);
480
+ // eslint-disable-next-line no-console
481
+ console.log(`Block 1 position: (${x1}, ${y1})`);
482
+ ```
483
+
484
+ The `engine.block.setPositionX()` and `engine.block.setPositionY()` methods set the block's position relative to its parent. Use `engine.block.getPositionX()` and `engine.block.getPositionY()` to query the current position.
485
+
486
+ ### Percentage-Based Positioning
487
+
488
+ Positions can also be set as percentages of the parent's dimensions. This approach is useful for responsive layouts that adapt to different container sizes.
489
+
490
+ ```typescript highlight-percent-position
491
+ // Block 2: Percentage-based positioning (relative to parent)
492
+ const block2 = await engine.block.addImage(imageUri, { size: blockSize });
493
+ engine.block.appendChild(page, block2);
494
+
495
+ // Set position mode to Percent and use percentage values
496
+ engine.block.setPositionXMode(block2, 'Percent');
497
+ engine.block.setPositionYMode(block2, 'Percent');
498
+ engine.block.setPositionX(block2, 0.5); // 50% from left
499
+ engine.block.setPositionY(block2, 0.5); // 50% from top
500
+
501
+ // Query the position mode
502
+ const xMode = engine.block.getPositionXMode(block2);
503
+ const yMode = engine.block.getPositionYMode(block2);
504
+ // eslint-disable-next-line no-console
505
+ console.log(`Block 2 position modes: X=${xMode}, Y=${yMode}`);
506
+ ```
507
+
508
+ Position modes are set using `engine.block.setPositionXMode()` and `engine.block.setPositionYMode()`. When set to `'Percent'`, position values represent a fraction of the parent's size (0.5 = 50%). Query the current mode with `engine.block.getPositionXMode()` and `engine.block.getPositionYMode()`.
509
+
510
+ ### Using the Convenience Method
511
+
512
+ CE.SDK provides a convenience method that sets both coordinates at once, optionally with a position mode.
513
+
514
+ ```typescript highlight-setPosition-convenience
515
+ // Block 3: Using the convenience method setPosition()
516
+ const block3 = await engine.block.addImage(imageUri, { size: blockSize });
517
+ engine.block.appendChild(page, block3);
518
+
519
+ // Set both X and Y at once with a specific position mode
520
+ engine.block.setPosition(block3, 0.75, 0.25, { positionMode: 'Percent' });
521
+
522
+ // eslint-disable-next-line no-console
523
+ console.log(`Block 3 set to 75% horizontal, 25% vertical using setPosition()`);
524
+ ```
525
+
526
+ The `engine.block.setPosition()` method accepts X and Y values along with an optional `positionMode` parameter. This simplifies code when setting both coordinates simultaneously.
527
+
528
+ ## Aligning Blocks
529
+
530
+ ### Aligning Multiple Blocks
531
+
532
+ Multiple blocks can be aligned within their combined bounding box. This is useful for creating visually organized layouts.
533
+
534
+ ```typescript highlight-check-alignable
535
+ // Check if blocks can be aligned
536
+ const canAlign = engine.block.isAlignable(blocks);
537
+ // eslint-disable-next-line no-console
538
+ console.log('Can align blocks:', canAlign);
539
+ ```
540
+
541
+ Before aligning, we check if the blocks can be aligned using `engine.block.isAlignable()`. This method returns `true` if the blocks support alignment operations.
542
+
543
+ ```typescript highlight-align-horizontal
544
+ // Align blocks horizontally to the left edge of their bounding box
545
+ engine.block.alignHorizontally(blocks, 'Left');
546
+ // eslint-disable-next-line no-console
547
+ console.log('Blocks aligned to left edge');
548
+ ```
549
+
550
+ The `engine.block.alignHorizontally()` method accepts an array of block IDs and an alignment value: `'Left'`, `'Right'`, or `'Center'`. Similarly, `engine.block.alignVertically()` accepts `'Top'`, `'Bottom'`, or `'Center'`.
551
+
552
+ ### Aligning a Single Block to Parent
553
+
554
+ When you pass a single block to the alignment methods, it aligns within its parent container rather than a group bounding box.
555
+
556
+ ```typescript highlight-align-single-block
557
+ // Create a single block to demonstrate aligning within parent
558
+ const singleBlock = await engine.block.addImage(imageUri, {
559
+ size: { width: 150, height: 100 }
560
+ });
561
+ engine.block.appendChild(page, singleBlock);
562
+
563
+ // Position initially off-center
564
+ engine.block.setPositionX(singleBlock, 500);
565
+ engine.block.setPositionY(singleBlock, 300);
566
+
567
+ // Align single block to center of parent (page)
568
+ if (engine.block.isAlignable([singleBlock])) {
569
+ engine.block.alignHorizontally([singleBlock], 'Center');
570
+ engine.block.alignVertically([singleBlock], 'Center');
571
+ // eslint-disable-next-line no-console
572
+ console.log('Single block centered within parent');
573
+ }
574
+ ```
575
+
576
+ This approach is useful for centering elements on a page or positioning them at specific edges of the container.
577
+
578
+ ## Distributing Blocks
579
+
580
+ Distribution spaces blocks evenly within their bounding box. This is ideal for creating consistent spacing in grid layouts or navigation elements.
581
+
582
+ ```typescript highlight-check-distributable
583
+ // Check if blocks can be distributed
584
+ const canDistribute = engine.block.isDistributable(blocks);
585
+ // eslint-disable-next-line no-console
586
+ console.log('Can distribute blocks:', canDistribute);
587
+ ```
588
+
589
+ The `engine.block.isDistributable()` method verifies that the blocks can be distributed.
590
+
591
+ ```typescript highlight-distribute-horizontal
592
+ // Distribute blocks horizontally with even spacing
593
+ engine.block.distributeHorizontally(blocks);
594
+ // eslint-disable-next-line no-console
595
+ console.log('Blocks distributed horizontally with even spacing');
596
+ ```
597
+
598
+ The `engine.block.distributeHorizontally()` method arranges blocks so the horizontal space between them is equal. The first and last blocks remain in place while the middle blocks are repositioned.
599
+
600
+ ```typescript highlight-distribute-vertical
601
+ // Create another set of blocks for vertical distribution
602
+ const verticalBlocks: number[] = [];
603
+ const yPositions = [50, 150, 350, 500];
604
+
605
+ for (let i = 0; i < yPositions.length; i++) {
606
+ const block = await engine.block.addImage(imageUri, { size: blockSize });
607
+ engine.block.appendChild(page, block);
608
+ engine.block.setPositionX(block, 600); // Same X for vertical distribution
609
+ engine.block.setPositionY(block, yPositions[i]);
610
+ verticalBlocks.push(block);
611
+ }
612
+
613
+ if (engine.block.isDistributable(verticalBlocks)) {
614
+ engine.block.distributeVertically(verticalBlocks);
615
+ // eslint-disable-next-line no-console
616
+ console.log('Vertical blocks distributed with even spacing');
617
+ }
618
+ ```
619
+
620
+ Similarly, `engine.block.distributeVertically()` distributes blocks with equal vertical spacing.
621
+
622
+ ## Configuring Snapping
623
+
624
+ Snapping provides visual guides when dragging elements in the editor, helping users align blocks precisely. Configure the snapping sensitivity and appearance using editor settings.
625
+
626
+ ### Setting Snapping Thresholds
627
+
628
+ ```typescript highlight-configure-snapping-threshold
629
+ // Configure position snapping threshold (pixels)
630
+ // Higher values = snapping activates from further away
631
+ engine.editor.setSettingFloat('positionSnappingThreshold', 10);
632
+
633
+ // Configure rotation snapping threshold (degrees)
634
+ engine.editor.setSettingFloat('rotationSnappingThreshold', 5);
635
+ // eslint-disable-next-line no-console
636
+ console.log('Snapping thresholds configured: position=10px, rotation=5deg');
637
+ ```
638
+
639
+ The `positionSnappingThreshold` setting controls how close (in pixels) a block must be to a snap target before snapping activates. Higher values make snapping more "sticky". The `rotationSnappingThreshold` setting controls rotation snapping sensitivity in radians.
640
+
641
+ ### Customizing Snapping Guide Colors
642
+
643
+ ```typescript highlight-configure-snapping-colors
644
+ // Customize snapping guide colors
645
+ engine.editor.setSettingColor('snappingGuideColor', {
646
+ r: 0.2,
647
+ g: 0.6,
648
+ b: 1.0,
649
+ a: 1.0
650
+ });
651
+
652
+ engine.editor.setSettingColor('rotationSnappingGuideColor', {
653
+ r: 1.0,
654
+ g: 0.4,
655
+ b: 0.2,
656
+ a: 1.0
657
+ });
658
+
659
+ engine.editor.setSettingColor('ruleOfThirdsLineColor', {
660
+ r: 0.5,
661
+ g: 0.5,
662
+ b: 0.5,
663
+ a: 0.5
664
+ });
665
+ // eslint-disable-next-line no-console
666
+ console.log('Snapping guide colors configured');
667
+ ```
668
+
669
+ Customize the appearance of snapping guides using color settings. The `snappingGuideColor` controls position snapping lines, `rotationSnappingGuideColor` controls rotation guides, and `ruleOfThirdsLineColor` controls composition guide lines.
670
+
671
+ ## Troubleshooting
672
+
673
+ ### Position Not Updating
674
+
675
+ If a block's position doesn't change after calling the setter methods:
676
+
677
+ - Verify the block's transform is not locked with `engine.block.isTransformLocked()`
678
+ - Check that the block has the `'layer/move'` scope enabled
679
+ - Ensure you're using the correct position mode for your values
680
+
681
+ ### Alignment Not Working
682
+
683
+ If `engine.block.alignHorizontally()` or `engine.block.alignVertically()` has no effect:
684
+
685
+ - Confirm `engine.block.isAlignable()` returns `true` for the blocks
686
+ - Verify all block IDs in the array are valid
687
+ - Check that blocks have the `'layer/move'` scope enabled
688
+
689
+ ### Blocks Cannot Be Distributed
690
+
691
+ If `engine.block.distributeHorizontally()` or `engine.block.distributeVertically()` doesn't work:
692
+
693
+ - Verify `engine.block.isDistributable()` returns `true`
694
+ - Ensure you have at least three blocks in the array
695
+ - Check that all blocks share the same parent
696
+
697
+ ## API Reference
698
+
699
+ | Method | Description |
700
+ | ------------------------------------------------ | ------------------------------------------------ |
701
+ | `engine.block.getPositionX(id)` | Get block's X position |
702
+ | `engine.block.getPositionY(id)` | Get block's Y position |
703
+ | `engine.block.setPositionX(id, value)` | Set block's X position |
704
+ | `engine.block.setPositionY(id, value)` | Set block's Y position |
705
+ | `engine.block.getPositionXMode(id)` | Get X position mode (Absolute/Percent) |
706
+ | `engine.block.getPositionYMode(id)` | Get Y position mode (Absolute/Percent) |
707
+ | `engine.block.setPositionXMode(id, mode)` | Set X position mode |
708
+ | `engine.block.setPositionYMode(id, mode)` | Set Y position mode |
709
+ | `engine.block.setPosition(id, x, y, options)` | Set both coordinates with optional mode |
710
+ | `engine.block.isAlignable(ids)` | Check if blocks can be aligned |
711
+ | `engine.block.alignHorizontally(ids, alignment)` | Align blocks horizontally (Left/Right/Center) |
712
+ | `engine.block.alignVertically(ids, alignment)` | Align blocks vertically (Top/Bottom/Center) |
713
+ | `engine.block.isDistributable(ids)` | Check if blocks can be distributed |
714
+ | `engine.block.distributeHorizontally(ids)` | Distribute blocks horizontally with even spacing |
715
+ | `engine.block.distributeVertically(ids)` | Distribute blocks vertically with even spacing |
716
+ | `engine.editor.setSettingFloat(keypath, value)` | Set float settings (snapping thresholds) |
717
+ | `engine.editor.setSettingColor(keypath, color)` | Set color settings (snapping guide colors) |
718
+
719
+ ## Next Steps
720
+
721
+ Now that you understand positioning and alignment, explore related layout features:
722
+
723
+ - [Layer Management](./create-composition/layer-management.md) - Control the stacking order of elements
724
+ - [Grouping](./create-composition/group-and-ungroup.md) - Group related elements together
725
+ - [Multi-Page Layouts](./create-composition/multi-page.md) - Create multi-page designs with multiple pages in a single scene
726
+
727
+ ---
728
+
729
+ ## More Resources
730
+
731
+ - **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
732
+ - **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
733
+ - **[Web Documentation](./js.md)** - Interactive documentation with examples
734
+ - **[Support](mailto:support@img.ly)** - Contact IMG.LY support