@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,834 @@
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 Text](./text.md) > [Text Designs](./text/text-designs.md)
4
+
5
+ ---
6
+
7
+ Create and customize text designs (text components) that appear in CE.SDK's asset library for users to insert into their designs.
8
+
9
+ ![Text Designs example showing custom text components with styling](https://img.ly/docs/cesdk/./assets/browser.hero.webp)
10
+
11
+ > **Reading time:** 10 minutes
12
+ >
13
+ > **Resources:**
14
+ >
15
+ > - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
16
+ > - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-text-text-designs-browser)
17
+ > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-text-text-designs-browser)
18
+ > - [Live demo](https://img.ly/docs/cesdk/examples/guides-text-text-designs-browser/)
19
+
20
+ Text designs (also known as text components) are pre-designed text layouts stored as serialized blocks in the asset library. Users click on these components to insert them into their designs. CE.SDK ships with over 20 default components; this guide shows how to create custom ones programmatically.
21
+
22
+ ```typescript file=@cesdk_web_examples/guides-text-text-designs-browser/browser.ts reference-only
23
+ import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
24
+
25
+ import {
26
+ BlurAssetSource,
27
+ ColorPaletteAssetSource,
28
+ CropPresetsAssetSource,
29
+ DemoAssetSources,
30
+ EffectsAssetSource,
31
+ FiltersAssetSource,
32
+ PagePresetsAssetSource,
33
+ StickerAssetSource,
34
+ TextAssetSource,
35
+ TextComponentAssetSource,
36
+ TypefaceAssetSource,
37
+ UploadAssetSources,
38
+ VectorShapeAssetSource
39
+ } from '@cesdk/cesdk-js/plugins';
40
+ import { DesignEditorConfig } from './design-editor/plugin';
41
+ import packageJson from './package.json';
42
+ // Import the pre-generated thumbnail for the asset library
43
+ import customTitleThumbnail from './assets/custom-title-thumbnail.png';
44
+
45
+ /**
46
+ * CE.SDK Plugin: Text Designs Guide
47
+ *
48
+ * Demonstrates how to create and register custom text designs (text components):
49
+ * - Create styled text blocks programmatically
50
+ * - Serialize text components with saveToArchive()
51
+ * - Generate thumbnails with block.export()
52
+ * - Register custom asset sources for the text components library
53
+ *
54
+ * The saveToArchive() method creates a zip archive containing the blocks.blocks file
55
+ * and all referenced resources (fonts, images). For production, extract this archive
56
+ * and host the files. Use block.loadFromURL() pointing to the blocks.blocks file.
57
+ */
58
+ class Example implements EditorPlugin {
59
+ name = packageJson.name;
60
+
61
+ version = packageJson.version;
62
+
63
+ async initialize({ cesdk }: EditorPluginContext): Promise<void> {
64
+ if (!cesdk) {
65
+ throw new Error('CE.SDK instance is required for this plugin');
66
+ }
67
+
68
+ await cesdk.addPlugin(new DesignEditorConfig());
69
+
70
+ // Add asset source plugins
71
+ await cesdk.addPlugin(new BlurAssetSource());
72
+ await cesdk.addPlugin(new ColorPaletteAssetSource());
73
+ await cesdk.addPlugin(new CropPresetsAssetSource());
74
+ await cesdk.addPlugin(
75
+ new UploadAssetSources({ include: ['ly.img.image.upload'] })
76
+ );
77
+ await cesdk.addPlugin(
78
+ new DemoAssetSources({
79
+ include: [
80
+ 'ly.img.templates.blank.*',
81
+ 'ly.img.templates.presentation.*',
82
+ 'ly.img.templates.print.*',
83
+ 'ly.img.templates.social.*',
84
+ 'ly.img.image.*'
85
+ ]
86
+ })
87
+ );
88
+ await cesdk.addPlugin(new EffectsAssetSource());
89
+ await cesdk.addPlugin(new FiltersAssetSource());
90
+ await cesdk.addPlugin(new PagePresetsAssetSource());
91
+ await cesdk.addPlugin(new StickerAssetSource());
92
+ await cesdk.addPlugin(new TextAssetSource());
93
+ await cesdk.addPlugin(new TextComponentAssetSource());
94
+ await cesdk.addPlugin(new TypefaceAssetSource());
95
+ await cesdk.addPlugin(new VectorShapeAssetSource());
96
+
97
+ await cesdk.actions.run('scene.create', {
98
+ page: { width: 800, height: 600, unit: 'Pixel' }
99
+ });
100
+
101
+ const engine = cesdk.engine;
102
+ const page = engine.block.findByType('page')[0];
103
+
104
+ // Create a styled text block that will become our custom component
105
+ const textComponent = engine.block.create('text');
106
+ engine.block.appendChild(page, textComponent);
107
+
108
+ // Set text content and styling
109
+ engine.block.replaceText(textComponent, 'Custom Title');
110
+ engine.block.setFloat(textComponent, 'text/fontSize', 72);
111
+
112
+ // Set text color to a brand color
113
+ engine.block.setTextColor(textComponent, {
114
+ r: 0.2,
115
+ g: 0.4,
116
+ b: 0.8,
117
+ a: 1.0
118
+ });
119
+
120
+ // Configure dimensions - use fixed frame with clipping
121
+ engine.block.setWidthMode(textComponent, 'Absolute');
122
+ engine.block.setHeightMode(textComponent, 'Absolute');
123
+ engine.block.setWidth(textComponent, 400);
124
+ engine.block.setHeight(textComponent, 100);
125
+ engine.block.setBool(textComponent, 'clipped', true);
126
+
127
+ // Position the component on the page
128
+ engine.block.setPositionX(textComponent, 50);
129
+ engine.block.setPositionY(textComponent, 50);
130
+
131
+ // Define a custom typeface
132
+ // With saveToArchive(), fonts are automatically bundled in the archive
133
+ // You can use any font - CDN URLs, bundle:// URIs, or custom fonts
134
+ const caveatTypeface = {
135
+ name: 'Caveat',
136
+ fonts: [
137
+ {
138
+ uri: 'https://cdn.img.ly/assets/v3/ly.img.typeface/fonts/Caveat/Caveat-Regular.ttf',
139
+ subFamily: 'Regular'
140
+ },
141
+ {
142
+ uri: 'https://cdn.img.ly/assets/v3/ly.img.typeface/fonts/Caveat/Caveat-Bold.ttf',
143
+ subFamily: 'Bold'
144
+ }
145
+ ]
146
+ };
147
+
148
+ // Set the font - saveToArchive() will include the font files in the archive
149
+ engine.block.setFont(
150
+ textComponent,
151
+ caveatTypeface.fonts[0].uri,
152
+ caveatTypeface
153
+ );
154
+
155
+ // Configure constraints for flexible resizing
156
+ // These ensure the component maintains proper proportions when resized
157
+
158
+ // Enable automatic font sizing within constraints
159
+ engine.block.setBool(textComponent, 'text/automaticFontSizeEnabled', true);
160
+ engine.block.setFloat(textComponent, 'text/minAutomaticFontSize', 24);
161
+ engine.block.setFloat(textComponent, 'text/maxAutomaticFontSize', 120);
162
+
163
+ // Add a background to visualize the text frame
164
+ engine.block.setBool(textComponent, 'backgroundColor/enabled', true);
165
+ engine.block.setColor(textComponent, 'backgroundColor/color', {
166
+ r: 0.95,
167
+ g: 0.95,
168
+ b: 1.0,
169
+ a: 1.0
170
+ });
171
+
172
+ // Serialize the text component using saveToArchive()
173
+ // This creates a zip archive containing blocks.blocks and all resources (fonts, images)
174
+ const archiveBlob = await engine.block.saveToArchive([textComponent]);
175
+ console.log('Archive size:', archiveBlob.size, 'bytes');
176
+
177
+ // Create a Blob URL for in-memory loading
178
+ // In production, you would extract the archive and host the files on your server
179
+ const archiveUrl = URL.createObjectURL(archiveBlob);
180
+
181
+ // In production, generate thumbnails using block.export():
182
+ //
183
+ // const thumbnailBlob = await engine.block.export(textComponent, {
184
+ // mimeType: 'image/png',
185
+ // targetWidth: 400,
186
+ // targetHeight: 320
187
+ // });
188
+ //
189
+ // For this example, we use a pre-generated thumbnail to avoid
190
+ // watermarks when running without a license key.
191
+ // Prepend origin to make it an absolute URL (CE.SDK prepends its base URL to relative paths)
192
+ const thumbnailUri = window.location.origin + customTitleThumbnail;
193
+
194
+ // Create the content.json structure for the custom component
195
+ // In production, you would host the serialized component and thumbnail on your server
196
+ const contentJson = {
197
+ version: '3.0.0',
198
+ id: 'my.custom.textComponents',
199
+ assets: [
200
+ {
201
+ id: '//my.custom.textComponents/customTitle',
202
+ label: {
203
+ en: 'Custom Title'
204
+ },
205
+ meta: {
206
+ // In production, these would be URLs to your hosted files
207
+ // uri: 'https://your-server.com/textComponents/data/CustomTitle.blocks',
208
+ // thumbUri: 'https://your-server.com/textComponents/thumbnails/customTitle.png',
209
+ mimeType: 'application/ubq-blocks-string'
210
+ }
211
+ }
212
+ ],
213
+ blocks: []
214
+ };
215
+ console.log(
216
+ 'Content.json structure:',
217
+ JSON.stringify(contentJson, null, 2)
218
+ );
219
+
220
+ // Register a custom asset source with an apply callback
221
+ // The callback handles loading and inserting blocks when clicked
222
+
223
+ // Store archive URLs in a Map for lookup when applying
224
+ const archiveUrls = new Map<string, string>();
225
+ archiveUrls.set('customTitle', archiveUrl);
226
+
227
+ // Create local source with custom apply callback
228
+ engine.asset.addLocalSource(
229
+ 'custom.textComponents',
230
+ undefined, // No MIME type filter
231
+ async (asset) => {
232
+ // Get the archive URL for this asset
233
+ const assetArchiveUrl = archiveUrls.get(asset.id);
234
+ if (!assetArchiveUrl) return undefined;
235
+
236
+ // Load the block from the archive using loadFromArchiveURL()
237
+ const loadedBlocks =
238
+ await engine.block.loadFromArchiveURL(assetArchiveUrl);
239
+ const newBlock = loadedBlocks[0];
240
+ if (!newBlock) return undefined;
241
+
242
+ // Add to the current page and center it
243
+ const currentPage = engine.scene.getCurrentPage();
244
+ if (currentPage) {
245
+ engine.block.appendChild(currentPage, newBlock);
246
+ // Center the block on the page
247
+ const pageWidth = engine.block.getWidth(currentPage);
248
+ const pageHeight = engine.block.getHeight(currentPage);
249
+ const blockWidth = engine.block.getWidth(newBlock);
250
+ const blockHeight = engine.block.getHeight(newBlock);
251
+ engine.block.setPositionX(newBlock, (pageWidth - blockWidth) / 2);
252
+ engine.block.setPositionY(newBlock, (pageHeight - blockHeight) / 2);
253
+ }
254
+
255
+ engine.editor.addUndoStep();
256
+ return newBlock;
257
+ }
258
+ );
259
+
260
+ // Add the text component asset to the source
261
+ engine.asset.addAssetToSource('custom.textComponents', {
262
+ id: 'customTitle',
263
+ label: { en: 'Custom Title' },
264
+ meta: {
265
+ thumbUri: thumbnailUri,
266
+ mimeType: 'application/ubq-blocks-string'
267
+ }
268
+ });
269
+ console.log('Custom text components asset source registered');
270
+
271
+ // Configure the asset library to display the custom text components
272
+ // Add translation for the library entry label
273
+ cesdk.i18n.setTranslations({
274
+ en: { 'libraries.text-components-entry.label': 'Text Components' }
275
+ });
276
+
277
+ // Add the text components source to the asset library
278
+ cesdk.ui.addAssetLibraryEntry({
279
+ id: 'text-components-entry',
280
+ sourceIds: ['custom.textComponents'],
281
+ previewLength: 2,
282
+ previewBackgroundType: 'contain',
283
+ gridBackgroundType: 'contain',
284
+ gridColumns: 2,
285
+ cardLabelPosition: () => 'below'
286
+ });
287
+
288
+ // Add text components library to the dock for easy access
289
+ cesdk.ui.setComponentOrder({ in: 'ly.img.dock' }, [
290
+ ...cesdk.ui.getComponentOrder({ in: 'ly.img.dock' }),
291
+ 'ly.img.spacer',
292
+ {
293
+ id: 'ly.img.assetLibrary.dock',
294
+ key: 'text-components-dock',
295
+ label: 'Text Components',
296
+ icon: '@imgly/Type',
297
+ entries: ['text-components-entry']
298
+ }
299
+ ]);
300
+
301
+ // Open the text components panel to showcase the result
302
+ cesdk.ui.openPanel('//ly.img.panel/assetLibrary', {
303
+ payload: { entries: ['text-components-entry'] }
304
+ });
305
+
306
+ // Add a label explaining what this example demonstrates
307
+ const label = engine.block.create('text');
308
+ engine.block.appendChild(page, label);
309
+ engine.block.setWidthMode(label, 'Auto');
310
+ engine.block.setHeightMode(label, 'Auto');
311
+ engine.block.replaceText(
312
+ label,
313
+ 'This example creates a custom text component,\nserializes it, and registers it as an asset source.'
314
+ );
315
+ engine.block.setFloat(label, 'text/fontSize', 54);
316
+ engine.block.setTextColor(label, { r: 0.4, g: 0.4, b: 0.4, a: 1.0 });
317
+ engine.block.setPositionX(label, 50);
318
+ engine.block.setPositionY(label, 200);
319
+
320
+ // Create a second example component with different styling
321
+ const promoComponent = engine.block.create('text');
322
+ engine.block.appendChild(page, promoComponent);
323
+
324
+ engine.block.replaceText(promoComponent, 'SALE');
325
+ engine.block.setFloat(promoComponent, 'text/fontSize', 96);
326
+
327
+ // Use a bold red color for the promo text
328
+ engine.block.setTextColor(promoComponent, {
329
+ r: 0.9,
330
+ g: 0.2,
331
+ b: 0.2,
332
+ a: 1.0
333
+ });
334
+
335
+ // Set a bold font for the promo component
336
+ const robotoTypeface = {
337
+ name: 'Roboto',
338
+ fonts: [
339
+ {
340
+ uri: 'https://cdn.img.ly/assets/v3/ly.img.typeface/fonts/Roboto/Roboto-Bold.ttf',
341
+ subFamily: 'Bold'
342
+ }
343
+ ]
344
+ };
345
+ engine.block.setFont(
346
+ promoComponent,
347
+ robotoTypeface.fonts[0].uri,
348
+ robotoTypeface
349
+ );
350
+
351
+ engine.block.setWidthMode(promoComponent, 'Absolute');
352
+ engine.block.setHeightMode(promoComponent, 'Absolute');
353
+ engine.block.setWidth(promoComponent, 300);
354
+ engine.block.setHeight(promoComponent, 120);
355
+ engine.block.setBool(promoComponent, 'clipped', true);
356
+
357
+ // Add background
358
+ engine.block.setBool(promoComponent, 'backgroundColor/enabled', true);
359
+ engine.block.setColor(promoComponent, 'backgroundColor/color', {
360
+ r: 1.0,
361
+ g: 0.95,
362
+ b: 0.9,
363
+ a: 1.0
364
+ });
365
+
366
+ engine.block.setPositionX(promoComponent, 50);
367
+ engine.block.setPositionY(promoComponent, 350);
368
+
369
+ // Select the first text component to show it in the inspector
370
+ engine.block.select(textComponent);
371
+ }
372
+ }
373
+
374
+ export default Example;
375
+ ```
376
+
377
+ This guide covers creating styled text components, serializing them for storage, generating thumbnails, and registering them as custom asset sources.
378
+
379
+ ## Setting Up the Editor
380
+
381
+ We initialize CE.SDK with asset sources and create a design scene. The page provides a canvas where we build our text components.
382
+
383
+ ```typescript highlight=highlight-setup
384
+ await cesdk.addPlugin(new DesignEditorConfig());
385
+
386
+ // Add asset source plugins
387
+ await cesdk.addPlugin(new BlurAssetSource());
388
+ await cesdk.addPlugin(new ColorPaletteAssetSource());
389
+ await cesdk.addPlugin(new CropPresetsAssetSource());
390
+ await cesdk.addPlugin(
391
+ new UploadAssetSources({ include: ['ly.img.image.upload'] })
392
+ );
393
+ await cesdk.addPlugin(
394
+ new DemoAssetSources({
395
+ include: [
396
+ 'ly.img.templates.blank.*',
397
+ 'ly.img.templates.presentation.*',
398
+ 'ly.img.templates.print.*',
399
+ 'ly.img.templates.social.*',
400
+ 'ly.img.image.*'
401
+ ]
402
+ })
403
+ );
404
+ await cesdk.addPlugin(new EffectsAssetSource());
405
+ await cesdk.addPlugin(new FiltersAssetSource());
406
+ await cesdk.addPlugin(new PagePresetsAssetSource());
407
+ await cesdk.addPlugin(new StickerAssetSource());
408
+ await cesdk.addPlugin(new TextAssetSource());
409
+ await cesdk.addPlugin(new TextComponentAssetSource());
410
+ await cesdk.addPlugin(new TypefaceAssetSource());
411
+ await cesdk.addPlugin(new VectorShapeAssetSource());
412
+
413
+ await cesdk.actions.run('scene.create', {
414
+ page: { width: 800, height: 600, unit: 'Pixel' }
415
+ });
416
+
417
+ const engine = cesdk.engine;
418
+ const page = engine.block.findByType('page')[0];
419
+ ```
420
+
421
+ With the editor ready, we can create text blocks and configure them as reusable components.
422
+
423
+ ## Creating a Text Component
424
+
425
+ We create a text block and configure its styling, dimensions, and position. The component uses fixed frame dimensions with clipping enabled to ensure consistent display. We set an explicit font using the `setFont()` API.
426
+
427
+ ```typescript highlight=highlight-create-text-component
428
+ // Create a styled text block that will become our custom component
429
+ const textComponent = engine.block.create('text');
430
+ engine.block.appendChild(page, textComponent);
431
+
432
+ // Set text content and styling
433
+ engine.block.replaceText(textComponent, 'Custom Title');
434
+ engine.block.setFloat(textComponent, 'text/fontSize', 72);
435
+
436
+ // Set text color to a brand color
437
+ engine.block.setTextColor(textComponent, {
438
+ r: 0.2,
439
+ g: 0.4,
440
+ b: 0.8,
441
+ a: 1.0
442
+ });
443
+
444
+ // Configure dimensions - use fixed frame with clipping
445
+ engine.block.setWidthMode(textComponent, 'Absolute');
446
+ engine.block.setHeightMode(textComponent, 'Absolute');
447
+ engine.block.setWidth(textComponent, 400);
448
+ engine.block.setHeight(textComponent, 100);
449
+ engine.block.setBool(textComponent, 'clipped', true);
450
+
451
+ // Position the component on the page
452
+ engine.block.setPositionX(textComponent, 50);
453
+ engine.block.setPositionY(textComponent, 50);
454
+
455
+ // Define a custom typeface
456
+ // With saveToArchive(), fonts are automatically bundled in the archive
457
+ // You can use any font - CDN URLs, bundle:// URIs, or custom fonts
458
+ const caveatTypeface = {
459
+ name: 'Caveat',
460
+ fonts: [
461
+ {
462
+ uri: 'https://cdn.img.ly/assets/v3/ly.img.typeface/fonts/Caveat/Caveat-Regular.ttf',
463
+ subFamily: 'Regular'
464
+ },
465
+ {
466
+ uri: 'https://cdn.img.ly/assets/v3/ly.img.typeface/fonts/Caveat/Caveat-Bold.ttf',
467
+ subFamily: 'Bold'
468
+ }
469
+ ]
470
+ };
471
+
472
+ // Set the font - saveToArchive() will include the font files in the archive
473
+ engine.block.setFont(
474
+ textComponent,
475
+ caveatTypeface.fonts[0].uri,
476
+ caveatTypeface
477
+ );
478
+ ```
479
+
480
+ The text block now has custom styling including font size, color, and fixed dimensions. The `clipped` property ensures text that exceeds the frame boundaries is hidden. With `saveToArchive()`, fonts are automatically bundled in the archive, so you can use any font source.
481
+
482
+ ## Configuring Constraints
483
+
484
+ We configure the text component with automatic font sizing and constraints. This ensures the component adapts gracefully when users resize it while maintaining readability.
485
+
486
+ ```typescript highlight=highlight-configure-constraints
487
+ // Configure constraints for flexible resizing
488
+ // These ensure the component maintains proper proportions when resized
489
+
490
+ // Enable automatic font sizing within constraints
491
+ engine.block.setBool(textComponent, 'text/automaticFontSizeEnabled', true);
492
+ engine.block.setFloat(textComponent, 'text/minAutomaticFontSize', 24);
493
+ engine.block.setFloat(textComponent, 'text/maxAutomaticFontSize', 120);
494
+
495
+ // Add a background to visualize the text frame
496
+ engine.block.setBool(textComponent, 'backgroundColor/enabled', true);
497
+ engine.block.setColor(textComponent, 'backgroundColor/color', {
498
+ r: 0.95,
499
+ g: 0.95,
500
+ b: 1.0,
501
+ a: 1.0
502
+ });
503
+ ```
504
+
505
+ The automatic font sizing scales text between 24pt and 120pt as the frame is resized.
506
+
507
+ ## Serializing the Component
508
+
509
+ We serialize the text component using `saveToArchive()`. This creates a zip archive containing the `blocks.blocks` file and all referenced resources (fonts, images). The archive is self-contained and portable.
510
+
511
+ ```typescript highlight=highlight-serialize-component
512
+ // Serialize the text component using saveToArchive()
513
+ // This creates a zip archive containing blocks.blocks and all resources (fonts, images)
514
+ const archiveBlob = await engine.block.saveToArchive([textComponent]);
515
+ console.log('Archive size:', archiveBlob.size, 'bytes');
516
+
517
+ // Create a Blob URL for in-memory loading
518
+ // In production, you would extract the archive and host the files on your server
519
+ const archiveUrl = URL.createObjectURL(archiveBlob);
520
+ ```
521
+
522
+ For production, extract the archive and host the files on your server. Use `loadFromURL()` pointing to the `blocks.blocks` file. In this example, we create a Blob URL for in-memory loading to demonstrate the workflow.
523
+
524
+ ## Legacy: Using saveToString()
525
+
526
+ For backward compatibility, you can use `saveToString()` instead of `saveToArchive()`. This approach serializes the block as a string but requires external font URLs to remain accessible.
527
+
528
+ ```typescript
529
+ // Legacy approach - requires external font URLs
530
+ const serializedComponent = await engine.block.saveToString(
531
+ [textComponent],
532
+ ['bundle', 'buffer', 'http', 'https'] // Allowed resource schemes
533
+ );
534
+
535
+ // Load with loadFromString()
536
+ const loadedBlocks = await engine.block.loadFromString(serializedComponent);
537
+ ```
538
+
539
+ **Limitations of saveToString():**
540
+
541
+ - Font URLs must remain accessible at load time
542
+ - No automatic resource bundling
543
+ - Requires `allowedResourceSchemes` configuration
544
+
545
+ We recommend `saveToArchive()` for new implementations as it bundles all resources automatically.
546
+
547
+ ## Hosting for Production
548
+
549
+ For production deployments, extract the archive and host the files on your web server. Maintain the following directory structure:
550
+
551
+ ```
552
+ /ly.img.text.components/
553
+ ├── content.json
554
+ ├── data/
555
+ │ ├── customTitle/
556
+ │ │ └── blocks.blocks
557
+ │ ├── customHeading/
558
+ │ │ ├── blocks.blocks
559
+ │ │ ├── fonts/
560
+ │ │ │ └── 59251598.ttf
561
+ │ │ └── images/
562
+ │ │ └── 3255389386.jpeg
563
+ │ └── ...
564
+ └── thumbnails/
565
+ ├── customTitle.png
566
+ ├── customHeading.png
567
+ └── ...
568
+ ```
569
+
570
+ Simple components contain only `blocks.blocks`. Components with custom fonts or images include additional subdirectories. The archive structure mirrors this layout - extract it directly to your server.
571
+
572
+ Update the `uri` paths in `content.json` to point to your hosted files:
573
+
574
+ ```json
575
+ {
576
+ "uri": "https://your-server.com/ly.img.text.components/data/customTitle/blocks.blocks",
577
+ "thumbUri": "https://your-server.com/ly.img.text.components/thumbnails/customTitle.png"
578
+ }
579
+ ```
580
+
581
+ ## Generating a Thumbnail
582
+
583
+ Thumbnails help users preview components before inserting them. In production, generate 400x320px thumbnails using `block.export()` and host them on your server.
584
+
585
+ ```typescript highlight=highlight-generate-thumbnail
586
+ // In production, generate thumbnails using block.export():
587
+ //
588
+ // const thumbnailBlob = await engine.block.export(textComponent, {
589
+ // mimeType: 'image/png',
590
+ // targetWidth: 400,
591
+ // targetHeight: 320
592
+ // });
593
+ //
594
+ // For this example, we use a pre-generated thumbnail to avoid
595
+ // watermarks when running without a license key.
596
+ // Prepend origin to make it an absolute URL (CE.SDK prepends its base URL to relative paths)
597
+ const thumbnailUri = window.location.origin + customTitleThumbnail;
598
+ ```
599
+
600
+ For this example, we use a pre-generated thumbnail imported as a static asset. In your production code, you would generate thumbnails dynamically or host them alongside your `.blocks` files.
601
+
602
+ ## Creating the Content.json Structure
603
+
604
+ We create the content.json structure that defines the asset source. This file lists all components with their metadata, including paths to the serialized blocks and thumbnails.
605
+
606
+ ```typescript highlight=highlight-create-content-json
607
+ // Create the content.json structure for the custom component
608
+ // In production, you would host the serialized component and thumbnail on your server
609
+ const contentJson = {
610
+ version: '3.0.0',
611
+ id: 'my.custom.textComponents',
612
+ assets: [
613
+ {
614
+ id: '//my.custom.textComponents/customTitle',
615
+ label: {
616
+ en: 'Custom Title'
617
+ },
618
+ meta: {
619
+ // In production, these would be URLs to your hosted files
620
+ // uri: 'https://your-server.com/textComponents/data/CustomTitle.blocks',
621
+ // thumbUri: 'https://your-server.com/textComponents/thumbnails/customTitle.png',
622
+ mimeType: 'application/ubq-blocks-string'
623
+ }
624
+ }
625
+ ],
626
+ blocks: []
627
+ };
628
+ console.log('Content.json structure:', JSON.stringify(contentJson, null, 2));
629
+ ```
630
+
631
+ In production, the `uri` and `thumbUri` fields point to your hosted files. The `mimeType` must be `"application/ubq-blocks-string"` for text components.
632
+
633
+ ## Registering the Asset Source
634
+
635
+ We register a custom asset source using `addLocalSource()` with a custom apply callback. The callback handles loading the block from the archive and inserting it into the scene when users click on a component.
636
+
637
+ ```typescript highlight=highlight-register-asset-source
638
+ // Register a custom asset source with an apply callback
639
+ // The callback handles loading and inserting blocks when clicked
640
+
641
+ // Store archive URLs in a Map for lookup when applying
642
+ const archiveUrls = new Map<string, string>();
643
+ archiveUrls.set('customTitle', archiveUrl);
644
+
645
+ // Create local source with custom apply callback
646
+ engine.asset.addLocalSource(
647
+ 'custom.textComponents',
648
+ undefined, // No MIME type filter
649
+ async (asset) => {
650
+ // Get the archive URL for this asset
651
+ const assetArchiveUrl = archiveUrls.get(asset.id);
652
+ if (!assetArchiveUrl) return undefined;
653
+
654
+ // Load the block from the archive using loadFromArchiveURL()
655
+ const loadedBlocks = await engine.block.loadFromArchiveURL(assetArchiveUrl);
656
+ const newBlock = loadedBlocks[0];
657
+ if (!newBlock) return undefined;
658
+
659
+ // Add to the current page and center it
660
+ const currentPage = engine.scene.getCurrentPage();
661
+ if (currentPage) {
662
+ engine.block.appendChild(currentPage, newBlock);
663
+ // Center the block on the page
664
+ const pageWidth = engine.block.getWidth(currentPage);
665
+ const pageHeight = engine.block.getHeight(currentPage);
666
+ const blockWidth = engine.block.getWidth(newBlock);
667
+ const blockHeight = engine.block.getHeight(newBlock);
668
+ engine.block.setPositionX(newBlock, (pageWidth - blockWidth) / 2);
669
+ engine.block.setPositionY(newBlock, (pageHeight - blockHeight) / 2);
670
+ }
671
+
672
+ engine.editor.addUndoStep();
673
+ return newBlock;
674
+ }
675
+ );
676
+
677
+ // Add the text component asset to the source
678
+ engine.asset.addAssetToSource('custom.textComponents', {
679
+ id: 'customTitle',
680
+ label: { en: 'Custom Title' },
681
+ meta: {
682
+ thumbUri: thumbnailUri,
683
+ mimeType: 'application/ubq-blocks-string'
684
+ }
685
+ });
686
+ console.log('Custom text components asset source registered');
687
+ ```
688
+
689
+ The apply callback uses `loadFromArchiveURL()` to load the block from the archive and then appends it to the current page. This pattern provides custom handling for inserting text components with their bundled resources.
690
+
691
+ ## Displaying in the Asset Library
692
+
693
+ After registering the asset source, we configure the UI to display the text components in an accessible panel. This involves adding translations, creating a library entry, and adding it to the dock navigation.
694
+
695
+ ```typescript highlight=highlight-configure-asset-library
696
+ // Configure the asset library to display the custom text components
697
+ // Add translation for the library entry label
698
+ cesdk.i18n.setTranslations({
699
+ en: { 'libraries.text-components-entry.label': 'Text Components' }
700
+ });
701
+
702
+ // Add the text components source to the asset library
703
+ cesdk.ui.addAssetLibraryEntry({
704
+ id: 'text-components-entry',
705
+ sourceIds: ['custom.textComponents'],
706
+ previewLength: 2,
707
+ previewBackgroundType: 'contain',
708
+ gridBackgroundType: 'contain',
709
+ gridColumns: 2,
710
+ cardLabelPosition: () => 'below'
711
+ });
712
+
713
+ // Add text components library to the dock for easy access
714
+ cesdk.ui.setComponentOrder({ in: 'ly.img.dock' }, [
715
+ ...cesdk.ui.getComponentOrder({ in: 'ly.img.dock' }),
716
+ 'ly.img.spacer',
717
+ {
718
+ id: 'ly.img.assetLibrary.dock',
719
+ key: 'text-components-dock',
720
+ label: 'Text Components',
721
+ icon: '@imgly/Type',
722
+ entries: ['text-components-entry']
723
+ }
724
+ ]);
725
+
726
+ // Open the text components panel to showcase the result
727
+ cesdk.ui.openPanel('//ly.img.panel/assetLibrary', {
728
+ payload: { entries: ['text-components-entry'] }
729
+ });
730
+ ```
731
+
732
+ The `addAssetLibraryEntry()` method creates a panel that displays the components with their thumbnails. The `setComponentOrder({ in: 'ly.img.dock' }, order)` method adds a button to the dock so users can access the library. Finally, `openPanel()` opens the library to showcase the result.
733
+
734
+ ## Creating Additional Components
735
+
736
+ We create a second component with different styling to demonstrate building a library of text components.
737
+
738
+ ```typescript highlight=highlight-create-second-component
739
+ const promoComponent = engine.block.create('text');
740
+ engine.block.appendChild(page, promoComponent);
741
+
742
+ engine.block.replaceText(promoComponent, 'SALE');
743
+ engine.block.setFloat(promoComponent, 'text/fontSize', 96);
744
+
745
+ // Use a bold red color for the promo text
746
+ engine.block.setTextColor(promoComponent, {
747
+ r: 0.9,
748
+ g: 0.2,
749
+ b: 0.2,
750
+ a: 1.0
751
+ });
752
+
753
+ // Set a bold font for the promo component
754
+ const robotoTypeface = {
755
+ name: 'Roboto',
756
+ fonts: [
757
+ {
758
+ uri: 'https://cdn.img.ly/assets/v3/ly.img.typeface/fonts/Roboto/Roboto-Bold.ttf',
759
+ subFamily: 'Bold'
760
+ }
761
+ ]
762
+ };
763
+ engine.block.setFont(
764
+ promoComponent,
765
+ robotoTypeface.fonts[0].uri,
766
+ robotoTypeface
767
+ );
768
+
769
+ engine.block.setWidthMode(promoComponent, 'Absolute');
770
+ engine.block.setHeightMode(promoComponent, 'Absolute');
771
+ engine.block.setWidth(promoComponent, 300);
772
+ engine.block.setHeight(promoComponent, 120);
773
+ engine.block.setBool(promoComponent, 'clipped', true);
774
+
775
+ // Add background
776
+ engine.block.setBool(promoComponent, 'backgroundColor/enabled', true);
777
+ engine.block.setColor(promoComponent, 'backgroundColor/color', {
778
+ r: 1.0,
779
+ g: 0.95,
780
+ b: 0.9,
781
+ a: 1.0
782
+ });
783
+
784
+ engine.block.setPositionX(promoComponent, 50);
785
+ engine.block.setPositionY(promoComponent, 350);
786
+ ```
787
+
788
+ Each component can have unique styling, dimensions, and behavior. Build a library by creating multiple components and adding them to your content.json.
789
+
790
+ ## Troubleshooting
791
+
792
+ **Archive fails to load**: Ensure the Blob URL is valid and the archive was created successfully. Check browser console for errors.
793
+
794
+ **Components not appearing in library**: Verify content.json structure, check that mimeType is "application/ubq-blocks-string", and ensure the asset source is registered.
795
+
796
+ **Thumbnails not loading**: Confirm thumbUri paths are correct and accessible. Verify CORS settings if loading from a different origin.
797
+
798
+ **Component scales incorrectly when inserted**: Review constraint configuration. Ensure automatic font sizing is enabled with appropriate min/max values.
799
+
800
+ **Fonts missing when component loads**: With `saveToArchive()`, fonts are bundled automatically. If issues persist, verify the archive was created correctly.
801
+
802
+ ## API Reference
803
+
804
+ | Method | Purpose |
805
+ | ---------------------------------------------------------- | ----------------------------------------------------------- |
806
+ | `engine.block.create()` | Create a new block of specified type |
807
+ | `engine.block.replaceText()` | Set text content on a text block |
808
+ | `engine.block.setFloat()` | Set numeric properties like font size |
809
+ | `engine.block.setFont()` | Set font with typeface definition and URI |
810
+ | `engine.block.setTextColor()` | Set text color with RGBA values |
811
+ | `engine.block.setWidthMode()` | Set width mode: 'Absolute', 'Percent', 'Auto' |
812
+ | `engine.block.setHeightMode()` | Set height mode: 'Absolute', 'Percent', 'Auto' |
813
+ | `engine.block.setBool()` | Enable/disable boolean properties |
814
+ | `engine.block.setColor()` | Set color properties like background |
815
+ | `engine.block.saveToArchive()` | Save blocks to zip archive with all resources |
816
+ | `engine.block.loadFromArchiveURL()` | Load blocks from archive URL |
817
+ | `engine.block.saveToString()` | Legacy: Save blocks as string (requires external resources) |
818
+ | `engine.block.loadFromString()` | Legacy: Load blocks from string |
819
+ | `engine.block.export()` | Export block as image blob |
820
+ | `engine.asset.addLocalSource()` | Create asset source with custom apply callback |
821
+ | `engine.asset.addAssetToSource()` | Add individual assets to a local source |
822
+ | `cesdk.ui.addAssetLibraryEntry()` | Add custom entry to asset library UI |
823
+ | `cesdk.ui.setComponentOrder({ in: 'ly.img.dock' }, order)` | Configure dock navigation buttons |
824
+ | `cesdk.ui.openPanel()` | Open a panel programmatically |
825
+ | `cesdk.i18n.setTranslations()` | Add translations for UI labels |
826
+
827
+ ---
828
+
829
+ ## More Resources
830
+
831
+ - **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
832
+ - **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
833
+ - **[Web Documentation](./js.md)** - Interactive documentation with examples
834
+ - **[Support](mailto:support@img.ly)** - Contact IMG.LY support