@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,750 @@
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:** [Concepts](./concepts.md) > [Blocks](./concepts/blocks.md)
4
+
5
+ ---
6
+
7
+ Work with blocks—the fundamental building units for all visual elements in
8
+ CE.SDK designs.
9
+
10
+ ![Blocks example showing a scene with graphic and text blocks](https://img.ly/docs/cesdk/./assets/browser.hero.webp)
11
+
12
+ > **Reading time:** 15 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-concepts-blocks-browser)
18
+ > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-concepts-blocks-browser)
19
+ > - [Live demo](https://img.ly/docs/cesdk/examples/guides-concepts-blocks-browser/)
20
+
21
+ Every visual element in CE.SDK—images, text, shapes, and audio—is represented as a block. Blocks are organized in a tree structure within scenes and pages, where parent-child relationships determine rendering order and visibility. Each block has properties you can read and modify, a `Type` that defines its core behavior, and an optional `Kind` for custom categorization.
22
+
23
+ ```typescript file=@cesdk_web_examples/guides-concepts-blocks-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: Blocks Guide
46
+ *
47
+ * Demonstrates working with blocks in CE.SDK:
48
+ * - Block types (graphic, text, audio, page, cutout)
49
+ * - Block hierarchy (parent-child relationships)
50
+ * - Block lifecycle (create, duplicate, destroy)
51
+ * - Block properties and reflection
52
+ * - Selection and visibility
53
+ * - Block state management
54
+ * - Serialization (save/load)
55
+ */
56
+ class Example implements EditorPlugin {
57
+ name = packageJson.name;
58
+
59
+ version = packageJson.version;
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
+ const engine = cesdk.engine;
100
+
101
+ // Get the current scene and page
102
+ const scene = engine.scene.get();
103
+ if (scene === null) {
104
+ throw new Error('No scene available');
105
+ }
106
+
107
+ // Find the page block - pages contain all design elements
108
+ const pages = engine.block.findByType('page');
109
+ const page = pages[0];
110
+
111
+ // Query the block type - returns the full type path
112
+ const pageType = engine.block.getType(page);
113
+ console.log('Page block type:', pageType); // '//ly.img.ubq/page'
114
+
115
+ // Type is immutable, determined at creation
116
+ // Kind is a custom label you can set and change
117
+ engine.block.setKind(page, 'main-canvas');
118
+ const pageKind = engine.block.getKind(page);
119
+ console.log('Page kind:', pageKind); // 'main-canvas'
120
+
121
+ // Find blocks by kind
122
+ const mainCanvasBlocks = engine.block.findByKind('main-canvas');
123
+ console.log('Blocks with kind "main-canvas":', mainCanvasBlocks.length);
124
+
125
+ // Create a graphic block for an image
126
+ const graphic = engine.block.create('graphic');
127
+
128
+ // Duplicate creates a copy with a new UUID
129
+ const graphicCopy = engine.block.duplicate(graphic);
130
+
131
+ // Destroy removes a block - the duplicate is no longer needed
132
+ engine.block.destroy(graphicCopy);
133
+
134
+ // Check if a block ID is still valid after operations
135
+ const isOriginalValid = engine.block.isValid(graphic);
136
+ const isCopyValid = engine.block.isValid(graphicCopy);
137
+ console.log('Original valid:', isOriginalValid); // true
138
+ console.log('Copy valid after destroy:', isCopyValid); // false
139
+
140
+ // Create a rect shape to define the graphic's bounds
141
+ const rectShape = engine.block.createShape('rect');
142
+ engine.block.setShape(graphic, rectShape);
143
+
144
+ // Position and size the graphic (centered horizontally on 800px page)
145
+ engine.block.setPositionX(graphic, 200);
146
+ engine.block.setPositionY(graphic, 100);
147
+ engine.block.setWidth(graphic, 400);
148
+ engine.block.setHeight(graphic, 300);
149
+
150
+ // Create an image fill and attach it to the graphic
151
+ const imageFill = engine.block.createFill('image');
152
+ engine.block.setString(
153
+ imageFill,
154
+ 'fill/image/imageFileURI',
155
+ 'https://img.ly/static/ubq_samples/sample_1.jpg'
156
+ );
157
+ engine.block.setFill(graphic, imageFill);
158
+
159
+ // Set content fill mode so the image fills the block bounds
160
+ engine.block.setEnum(graphic, 'contentFill/mode', 'Cover');
161
+
162
+ // Blocks form a tree: scene > page > elements
163
+ // Append the graphic to the page to make it visible
164
+ engine.block.appendChild(page, graphic);
165
+
166
+ // Query parent-child relationships
167
+ const graphicParent = engine.block.getParent(graphic);
168
+ console.log('Graphic parent is page:', graphicParent === page); // true
169
+
170
+ const pageChildren = engine.block.getChildren(page);
171
+ console.log('Page has children:', pageChildren.length);
172
+
173
+ // Create a text block with content
174
+ const textBlock = engine.block.create('text');
175
+ engine.block.appendChild(page, textBlock);
176
+
177
+ // Position the text block (centered horizontally on 800px page)
178
+ engine.block.setPositionX(textBlock, 200);
179
+ engine.block.setPositionY(textBlock, 450);
180
+ engine.block.setWidth(textBlock, 400);
181
+ engine.block.setHeight(textBlock, 80);
182
+
183
+ // Set text content
184
+ engine.block.setString(
185
+ textBlock,
186
+ 'text/text',
187
+ 'Blocks are the building units of CE.SDK designs'
188
+ );
189
+
190
+ // Set font size to 72pt
191
+ engine.block.setFloat(textBlock, 'text/fontSize', 72);
192
+
193
+ // Center-align the text
194
+ engine.block.setEnum(textBlock, 'text/horizontalAlignment', 'Center');
195
+
196
+ // Check the text block type
197
+ const textType = engine.block.getType(textBlock);
198
+ console.log('Text block type:', textType); // '//ly.img.ubq/text'
199
+
200
+ // Use reflection to discover available properties
201
+ const graphicProperties = engine.block.findAllProperties(graphic);
202
+ console.log('Graphic block has', graphicProperties.length, 'properties');
203
+
204
+ // Get property type information
205
+ const opacityType = engine.block.getPropertyType('opacity');
206
+ console.log('Opacity property type:', opacityType); // 'Float'
207
+
208
+ // Check if properties are readable/writable
209
+ const isOpacityReadable = engine.block.isPropertyReadable('opacity');
210
+ const isOpacityWritable = engine.block.isPropertyWritable('opacity');
211
+ console.log(
212
+ 'Opacity readable:',
213
+ isOpacityReadable,
214
+ 'writable:',
215
+ isOpacityWritable
216
+ );
217
+
218
+ // Use type-specific getters and setters
219
+ // Float properties
220
+ engine.block.setFloat(graphic, 'opacity', 0.9);
221
+ const opacity = engine.block.getFloat(graphic, 'opacity');
222
+ console.log('Graphic opacity:', opacity);
223
+
224
+ // Bool properties
225
+ engine.block.setBool(page, 'page/marginEnabled', false);
226
+ const marginEnabled = engine.block.getBool(page, 'page/marginEnabled');
227
+ console.log('Page margin enabled:', marginEnabled);
228
+
229
+ // Enum properties - get allowed values first
230
+ const blendModes = engine.block.getEnumValues('blend/mode');
231
+ console.log(
232
+ 'Available blend modes:',
233
+ blendModes.slice(0, 3).join(', '),
234
+ '...'
235
+ );
236
+
237
+ engine.block.setEnum(graphic, 'blend/mode', 'Multiply');
238
+ const blendMode = engine.block.getEnum(graphic, 'blend/mode');
239
+ console.log('Graphic blend mode:', blendMode);
240
+
241
+ // Each block has a stable UUID across save/load cycles
242
+ const graphicUUID = engine.block.getUUID(graphic);
243
+ console.log('Graphic UUID:', graphicUUID);
244
+
245
+ // Block names are mutable labels for organization
246
+ engine.block.setName(graphic, 'Hero Image');
247
+ engine.block.setName(textBlock, 'Caption');
248
+
249
+ const graphicName = engine.block.getName(graphic);
250
+ console.log('Graphic name:', graphicName); // 'Hero Image'
251
+
252
+ // Select a block programmatically
253
+ engine.block.select(graphic); // Selects graphic, deselects others
254
+
255
+ // Check selection state
256
+ const isGraphicSelected = engine.block.isSelected(graphic);
257
+ console.log('Graphic is selected:', isGraphicSelected); // true
258
+
259
+ // Add to selection without deselecting others
260
+ engine.block.setSelected(textBlock, true);
261
+
262
+ // Get all selected blocks
263
+ const selectedBlocks = engine.block.findAllSelected();
264
+ console.log('Selected blocks count:', selectedBlocks.length); // 2
265
+
266
+ // Subscribe to selection changes
267
+ const unsubscribeSelection = engine.block.onSelectionChanged(() => {
268
+ const selected = engine.block.findAllSelected();
269
+ console.log(
270
+ 'Selection changed, now selected:',
271
+ selected.length,
272
+ 'blocks'
273
+ );
274
+ });
275
+
276
+ // Control block visibility
277
+ engine.block.setVisible(graphic, true);
278
+ const isVisible = engine.block.isVisible(graphic);
279
+ console.log('Graphic is visible:', isVisible);
280
+
281
+ // Control export inclusion
282
+ engine.block.setIncludedInExport(graphic, true);
283
+ const inExport = engine.block.isIncludedInExport(graphic);
284
+ console.log('Graphic included in export:', inExport);
285
+
286
+ // Control clipping behavior
287
+ engine.block.setClipped(graphic, false);
288
+ const isClipped = engine.block.isClipped(graphic);
289
+ console.log('Graphic is clipped:', isClipped);
290
+
291
+ // Query block state - indicates loading status
292
+ const graphicState = engine.block.getState(graphic);
293
+ console.log('Graphic state:', graphicState.type); // 'Ready', 'Pending', or 'Error'
294
+
295
+ // Subscribe to state changes (useful for loading indicators)
296
+ const unsubscribeState = engine.block.onStateChanged(
297
+ [graphic],
298
+ (changedBlocks) => {
299
+ for (const blockId of changedBlocks) {
300
+ const state = engine.block.getState(blockId);
301
+ console.log(`Block ${blockId} state changed to:`, state.type);
302
+ if (state.type === 'Pending' && state.progress !== undefined) {
303
+ console.log(
304
+ 'Loading progress:',
305
+ Math.round(state.progress * 100) + '%'
306
+ );
307
+ }
308
+ }
309
+ }
310
+ );
311
+
312
+ // Save blocks to a string for persistence
313
+ // Include 'bundle' scheme to allow serialization of blocks with bundled fonts
314
+ const savedString = await engine.block.saveToString(
315
+ [graphic, textBlock],
316
+ ['buffer', 'http', 'https', 'bundle']
317
+ );
318
+ console.log('Blocks saved to string, length:', savedString.length);
319
+
320
+ // Alternatively, blocks can also be saved with their assets to an archive
321
+ // const savedBlocksArchive = await engine.block.saveToArchive([
322
+ // graphic,
323
+ // textBlock
324
+ // ]);
325
+
326
+ // Load blocks from string (creates new blocks, not attached to scene)
327
+ const loadedBlocks = await engine.block.loadFromString(savedString);
328
+ console.log('Loaded blocks from string:', loadedBlocks.length);
329
+
330
+ // Alternatively, blocks can also be loaded from an archive
331
+ // const loadedBlocks = await engine.block.loadFromArchiveURL(
332
+ // 'https://cdn.img.ly/assets/demo/v3/ly.img.template/templates/cesdk_postcard_1_blocks.zip'
333
+ // );
334
+ // console.log('Loaded blocks from archive URL:', loadedBlocks.length);
335
+
336
+ // Alternatively, blocks can be loaded from an extracted zip file created with block.saveToArchive
337
+ // const loadedBlocks = await engine.block.loadFromURL(
338
+ // 'https://cdn.img.ly/assets/v6/ly.img.text.components/box/blocks.blocks'
339
+ // );
340
+ // console.log('Loaded blocks from URL:', loadedBlocks.length);
341
+
342
+ // Loaded blocks must be parented to appear in the scene
343
+ // For demo purposes, we won't add them to avoid duplicates
344
+ for (const block of loadedBlocks) {
345
+ engine.block.destroy(block);
346
+ }
347
+
348
+ // Clean up subscriptions when done
349
+ // In a real application, you'd keep these active as needed
350
+ unsubscribeSelection();
351
+ unsubscribeState();
352
+
353
+ console.log('Blocks guide initialized successfully.');
354
+ console.log('Created graphic block with image fill and text block.');
355
+ console.log(
356
+ 'Demonstrated: types, hierarchy, properties, selection, state, and serialization.'
357
+ );
358
+ }
359
+ }
360
+
361
+ export default Example;
362
+ ```
363
+
364
+ This guide covers block types and their uses, how to create and manage blocks programmatically, how to work with block properties using the reflection system, and how to handle selection, visibility, and state changes.
365
+
366
+ ## Block Types
367
+
368
+ CE.SDK provides several block types, each designed for specific content:
369
+
370
+ - **graphic** (`//ly.img.ubq/graphic`): Visual blocks for images, shapes, and graphics
371
+ - **text** (`//ly.img.ubq/text`): Text content with typography controls
372
+ - **audio** (`//ly.img.ubq/audio`): Audio content for video scenes
373
+ - **page** (`//ly.img.ubq/page`): Container blocks representing canvases or artboards
374
+ - **cutout** (`//ly.img.ubq/cutout`): Blocks for masking operations
375
+
376
+ We query a block's type using `getType()` and find blocks of a specific type with `findByType()`:
377
+
378
+ ```typescript highlight-block-types
379
+ // Get the current scene and page
380
+ const scene = engine.scene.get();
381
+ if (scene === null) {
382
+ throw new Error('No scene available');
383
+ }
384
+
385
+ // Find the page block - pages contain all design elements
386
+ const pages = engine.block.findByType('page');
387
+ const page = pages[0];
388
+
389
+ // Query the block type - returns the full type path
390
+ const pageType = engine.block.getType(page);
391
+ console.log('Page block type:', pageType); // '//ly.img.ubq/page'
392
+ ```
393
+
394
+ Block types are immutable—once created, a block's type cannot change. This distinguishes type from kind.
395
+
396
+ ## Type vs Kind
397
+
398
+ Type and kind serve different purposes. The **type** is determined at creation and defines core behavior. The **kind** is a custom string label you assign for application-specific categorization.
399
+
400
+ ```typescript highlight-type-vs-kind
401
+ // Type is immutable, determined at creation
402
+ // Kind is a custom label you can set and change
403
+ engine.block.setKind(page, 'main-canvas');
404
+ const pageKind = engine.block.getKind(page);
405
+ console.log('Page kind:', pageKind); // 'main-canvas'
406
+
407
+ // Find blocks by kind
408
+ const mainCanvasBlocks = engine.block.findByKind('main-canvas');
409
+ console.log('Blocks with kind "main-canvas":', mainCanvasBlocks.length);
410
+ ```
411
+
412
+ Use kind to tag blocks for your application's logic. You can set it with `setKind()`, query it with `getKind()`, and find blocks by kind with `findByKind()`.
413
+
414
+ ## Block Hierarchy
415
+
416
+ Blocks form a tree structure where scenes contain pages, and pages contain design elements.
417
+
418
+ ```typescript highlight-block-hierarchy
419
+ // Blocks form a tree: scene > page > elements
420
+ // Append the graphic to the page to make it visible
421
+ engine.block.appendChild(page, graphic);
422
+
423
+ // Query parent-child relationships
424
+ const graphicParent = engine.block.getParent(graphic);
425
+ console.log('Graphic parent is page:', graphicParent === page); // true
426
+
427
+ const pageChildren = engine.block.getChildren(page);
428
+ console.log('Page has children:', pageChildren.length);
429
+ ```
430
+
431
+ Only blocks that are direct or indirect children of a page block are rendered. A scene without any page children won't display content in the editor. Use `appendChild()` to add blocks to parents, `getParent()` to query a block's parent, and `getChildren()` to get a block's children.
432
+
433
+ ## Block Lifecycle
434
+
435
+ Create new blocks with `create()`, duplicate existing blocks with `duplicate()`, and remove blocks with `destroy()`. After destroying a block, `isValid()` returns `false` for that block ID.
436
+
437
+ ```typescript highlight-block-lifecycle
438
+ // Create a graphic block for an image
439
+ const graphic = engine.block.create('graphic');
440
+
441
+ // Duplicate creates a copy with a new UUID
442
+ const graphicCopy = engine.block.duplicate(graphic);
443
+
444
+ // Destroy removes a block - the duplicate is no longer needed
445
+ engine.block.destroy(graphicCopy);
446
+
447
+ // Check if a block ID is still valid after operations
448
+ const isOriginalValid = engine.block.isValid(graphic);
449
+ const isCopyValid = engine.block.isValid(graphicCopy);
450
+ console.log('Original valid:', isOriginalValid); // true
451
+ console.log('Copy valid after destroy:', isCopyValid); // false
452
+ ```
453
+
454
+ When duplicating a block, all children are included, and the duplicate receives a new UUID.
455
+
456
+ ## Working with Fills
457
+
458
+ Graphic blocks display content through fills. We create a fill, attach it to a block, and configure its source.
459
+
460
+ ```typescript highlight-fill
461
+ // Create a rect shape to define the graphic's bounds
462
+ const rectShape = engine.block.createShape('rect');
463
+ engine.block.setShape(graphic, rectShape);
464
+
465
+ // Position and size the graphic (centered horizontally on 800px page)
466
+ engine.block.setPositionX(graphic, 200);
467
+ engine.block.setPositionY(graphic, 100);
468
+ engine.block.setWidth(graphic, 400);
469
+ engine.block.setHeight(graphic, 300);
470
+
471
+ // Create an image fill and attach it to the graphic
472
+ const imageFill = engine.block.createFill('image');
473
+ engine.block.setString(
474
+ imageFill,
475
+ 'fill/image/imageFileURI',
476
+ 'https://img.ly/static/ubq_samples/sample_1.jpg'
477
+ );
478
+ engine.block.setFill(graphic, imageFill);
479
+
480
+ // Set content fill mode so the image fills the block bounds
481
+ engine.block.setEnum(graphic, 'contentFill/mode', 'Cover');
482
+ ```
483
+
484
+ CE.SDK supports several fill types including image, video, color, and gradient fills. See the [Fills guide](./filters-and-effects/gradients.md) for details on available fill types.
485
+
486
+ ## Creating Text Blocks
487
+
488
+ Text blocks display formatted text content. We create a text block, position it, and set its content.
489
+
490
+ ```typescript highlight-text-block
491
+ // Create a text block with content
492
+ const textBlock = engine.block.create('text');
493
+ engine.block.appendChild(page, textBlock);
494
+
495
+ // Position the text block (centered horizontally on 800px page)
496
+ engine.block.setPositionX(textBlock, 200);
497
+ engine.block.setPositionY(textBlock, 450);
498
+ engine.block.setWidth(textBlock, 400);
499
+ engine.block.setHeight(textBlock, 80);
500
+
501
+ // Set text content
502
+ engine.block.setString(
503
+ textBlock,
504
+ 'text/text',
505
+ 'Blocks are the building units of CE.SDK designs'
506
+ );
507
+
508
+ // Set font size to 72pt
509
+ engine.block.setFloat(textBlock, 'text/fontSize', 72);
510
+
511
+ // Center-align the text
512
+ engine.block.setEnum(textBlock, 'text/horizontalAlignment', 'Center');
513
+
514
+ // Check the text block type
515
+ const textType = engine.block.getType(textBlock);
516
+ console.log('Text block type:', textType); // '//ly.img.ubq/text'
517
+ ```
518
+
519
+ Text blocks support extensive typography controls covered in the [Text guides](./text.md).
520
+
521
+ ## Block Properties
522
+
523
+ The reflection system lets you discover and manipulate any block property dynamically. Use `findAllProperties()` to get all available properties for a block—they're prefixed by category like `shape/star/points` or `text/fontSize`.
524
+
525
+ ```typescript highlight-block-properties
526
+ // Use reflection to discover available properties
527
+ const graphicProperties = engine.block.findAllProperties(graphic);
528
+ console.log('Graphic block has', graphicProperties.length, 'properties');
529
+
530
+ // Get property type information
531
+ const opacityType = engine.block.getPropertyType('opacity');
532
+ console.log('Opacity property type:', opacityType); // 'Float'
533
+
534
+ // Check if properties are readable/writable
535
+ const isOpacityReadable = engine.block.isPropertyReadable('opacity');
536
+ const isOpacityWritable = engine.block.isPropertyWritable('opacity');
537
+ console.log(
538
+ 'Opacity readable:',
539
+ isOpacityReadable,
540
+ 'writable:',
541
+ isOpacityWritable
542
+ );
543
+ ```
544
+
545
+ Query property types with `getPropertyType()`. Returns include `Bool`, `Int`, `Float`, `Double`, `String`, `Color`, `Enum`, or `Struct`. For enum properties, use `getEnumValues()` to get allowed values.
546
+
547
+ ### Property Accessors
548
+
549
+ Use type-specific getters and setters matching the property type:
550
+
551
+ ```typescript highlight-property-accessors
552
+ // Use type-specific getters and setters
553
+ // Float properties
554
+ engine.block.setFloat(graphic, 'opacity', 0.9);
555
+ const opacity = engine.block.getFloat(graphic, 'opacity');
556
+ console.log('Graphic opacity:', opacity);
557
+
558
+ // Bool properties
559
+ engine.block.setBool(page, 'page/marginEnabled', false);
560
+ const marginEnabled = engine.block.getBool(page, 'page/marginEnabled');
561
+ console.log('Page margin enabled:', marginEnabled);
562
+
563
+ // Enum properties - get allowed values first
564
+ const blendModes = engine.block.getEnumValues('blend/mode');
565
+ console.log('Available blend modes:', blendModes.slice(0, 3).join(', '), '...');
566
+
567
+ engine.block.setEnum(graphic, 'blend/mode', 'Multiply');
568
+ const blendMode = engine.block.getEnum(graphic, 'blend/mode');
569
+ console.log('Graphic blend mode:', blendMode);
570
+ ```
571
+
572
+ Using the wrong accessor type for a property will cause an error. Always check `getPropertyType()` if you're unsure which accessor to use.
573
+
574
+ ## UUID, Names, and Identity
575
+
576
+ Each block has a UUID that remains stable across save and load operations. Block names are mutable labels for organization.
577
+
578
+ ```typescript highlight-uuid-identity
579
+ // Each block has a stable UUID across save/load cycles
580
+ const graphicUUID = engine.block.getUUID(graphic);
581
+ console.log('Graphic UUID:', graphicUUID);
582
+
583
+ // Block names are mutable labels for organization
584
+ engine.block.setName(graphic, 'Hero Image');
585
+ engine.block.setName(textBlock, 'Caption');
586
+
587
+ const graphicName = engine.block.getName(graphic);
588
+ console.log('Graphic name:', graphicName); // 'Hero Image'
589
+ ```
590
+
591
+ Use `getUUID()` when you need a persistent identifier for a block. Names are useful for user-facing labels and can be changed freely with `setName()`.
592
+
593
+ ## Selection
594
+
595
+ Control which blocks are selected programmatically. Use `select()` to select a single block (deselecting others) or `setSelected()` to modify selection without affecting other blocks.
596
+
597
+ ```typescript highlight-selection
598
+ // Select a block programmatically
599
+ engine.block.select(graphic); // Selects graphic, deselects others
600
+
601
+ // Check selection state
602
+ const isGraphicSelected = engine.block.isSelected(graphic);
603
+ console.log('Graphic is selected:', isGraphicSelected); // true
604
+
605
+ // Add to selection without deselecting others
606
+ engine.block.setSelected(textBlock, true);
607
+
608
+ // Get all selected blocks
609
+ const selectedBlocks = engine.block.findAllSelected();
610
+ console.log('Selected blocks count:', selectedBlocks.length); // 2
611
+
612
+ // Subscribe to selection changes
613
+ const unsubscribeSelection = engine.block.onSelectionChanged(() => {
614
+ const selected = engine.block.findAllSelected();
615
+ console.log('Selection changed, now selected:', selected.length, 'blocks');
616
+ });
617
+ ```
618
+
619
+ Subscribe to selection changes with `onSelectionChanged()` to update your UI when the selection state changes.
620
+
621
+ ## Visibility
622
+
623
+ Control whether blocks appear on the canvas and are included in exports.
624
+
625
+ ```typescript highlight-visibility
626
+ // Control block visibility
627
+ engine.block.setVisible(graphic, true);
628
+ const isVisible = engine.block.isVisible(graphic);
629
+ console.log('Graphic is visible:', isVisible);
630
+
631
+ // Control export inclusion
632
+ engine.block.setIncludedInExport(graphic, true);
633
+ const inExport = engine.block.isIncludedInExport(graphic);
634
+ console.log('Graphic included in export:', inExport);
635
+ ```
636
+
637
+ A block with `isVisible()` returning true may still not appear if it hasn't been added to a parent, the parent is hidden, or another block obscures it.
638
+
639
+ ### Clipping
640
+
641
+ Clipping determines whether a block's content is constrained to its parent's bounds. When `setClipped(block, true)` is set, any portion of the block extending beyond its parent's boundaries is hidden. When clipping is disabled, the block renders fully even if it overflows its parent container.
642
+
643
+ ```typescript highlight-clipping
644
+ // Control clipping behavior
645
+ engine.block.setClipped(graphic, false);
646
+ const isClipped = engine.block.isClipped(graphic);
647
+ console.log('Graphic is clipped:', isClipped);
648
+ ```
649
+
650
+ ## Block State
651
+
652
+ Blocks track loading progress and error conditions through a state system with three possible states:
653
+
654
+ - **Ready**: Normal state, no pending operations
655
+ - **Pending**: Operation in progress with optional progress value (0-1)
656
+ - **Error**: Operation failed (`ImageDecoding`, `VideoDecoding`, `FileFetch`, `AudioDecoding`, `Unknown`)
657
+
658
+ ```typescript highlight-block-state
659
+ // Query block state - indicates loading status
660
+ const graphicState = engine.block.getState(graphic);
661
+ console.log('Graphic state:', graphicState.type); // 'Ready', 'Pending', or 'Error'
662
+
663
+ // Subscribe to state changes (useful for loading indicators)
664
+ const unsubscribeState = engine.block.onStateChanged(
665
+ [graphic],
666
+ (changedBlocks) => {
667
+ for (const blockId of changedBlocks) {
668
+ const state = engine.block.getState(blockId);
669
+ console.log(`Block ${blockId} state changed to:`, state.type);
670
+ if (state.type === 'Pending' && state.progress !== undefined) {
671
+ console.log(
672
+ 'Loading progress:',
673
+ Math.round(state.progress * 100) + '%'
674
+ );
675
+ }
676
+ }
677
+ }
678
+ );
679
+ ```
680
+
681
+ Subscribe to state changes with `onStateChanged()` to show loading indicators or handle errors in your UI.
682
+
683
+ ## Serialization
684
+
685
+ Save blocks to strings for persistence and restore them later.
686
+
687
+ ```typescript highlight-serialization
688
+ // Save blocks to a string for persistence
689
+ // Include 'bundle' scheme to allow serialization of blocks with bundled fonts
690
+ const savedString = await engine.block.saveToString(
691
+ [graphic, textBlock],
692
+ ['buffer', 'http', 'https', 'bundle']
693
+ );
694
+ console.log('Blocks saved to string, length:', savedString.length);
695
+
696
+ // Alternatively, blocks can also be saved with their assets to an archive
697
+ // const savedBlocksArchive = await engine.block.saveToArchive([
698
+ // graphic,
699
+ // textBlock
700
+ // ]);
701
+
702
+ // Load blocks from string (creates new blocks, not attached to scene)
703
+ const loadedBlocks = await engine.block.loadFromString(savedString);
704
+ console.log('Loaded blocks from string:', loadedBlocks.length);
705
+
706
+ // Alternatively, blocks can also be loaded from an archive
707
+ // const loadedBlocks = await engine.block.loadFromArchiveURL(
708
+ // 'https://cdn.img.ly/assets/demo/v3/ly.img.template/templates/cesdk_postcard_1_blocks.zip'
709
+ // );
710
+ // console.log('Loaded blocks from archive URL:', loadedBlocks.length);
711
+
712
+ // Alternatively, blocks can be loaded from an extracted zip file created with block.saveToArchive
713
+ // const loadedBlocks = await engine.block.loadFromURL(
714
+ // 'https://cdn.img.ly/assets/v6/ly.img.text.components/box/blocks.blocks'
715
+ // );
716
+ // console.log('Loaded blocks from URL:', loadedBlocks.length);
717
+
718
+ // Loaded blocks must be parented to appear in the scene
719
+ // For demo purposes, we won't add them to avoid duplicates
720
+ for (const block of loadedBlocks) {
721
+ engine.block.destroy(block);
722
+ }
723
+ ```
724
+
725
+ Use `saveToString()` for lightweight serialization or `saveToArchive()` to include all referenced assets.
726
+
727
+ Blocks can be loaded with `loadFromString()`, `loadFromArchiveURL()`, or `loadFromURL()`.
728
+ For `loadFromArchiveURL()`, the URL should point to the zipped archive file previously saved with `saveToArchive()`,
729
+ whereas for `loadFromURL()`, it should point to a blocks file within an unzipped archive directory.
730
+
731
+ Loaded blocks are not automatically attached to the scene—you must parent them with `appendChild()` to make them visible.
732
+
733
+ ## Troubleshooting
734
+
735
+ **Block not visible**: Ensure the block is a child of a page that's a child of the scene.
736
+
737
+ **Property setter fails**: Verify the property type matches the setter method used. Use `getPropertyType()` to check.
738
+
739
+ **Block ID invalid after destroy**: Use `isValid()` before operations on potentially destroyed blocks.
740
+
741
+ **State stuck in Pending**: Check network connectivity for remote resources or use state change events to monitor progress.
742
+
743
+ ---
744
+
745
+ ## More Resources
746
+
747
+ - **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
748
+ - **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
749
+ - **[Web Documentation](./js.md)** - Interactive documentation with examples
750
+ - **[Support](mailto:support@img.ly)** - Contact IMG.LY support