@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.
- package/LICENSE.md +16 -0
- package/README.md +158 -0
- package/assets/docs/api/SKILL.md +49 -0
- package/assets/docs/api/index.d.ts +10518 -0
- package/assets/docs/guide/SKILL.md +142 -0
- package/assets/docs/guide/actions.md +1038 -0
- package/assets/docs/guide/animation/create/base.md +467 -0
- package/assets/docs/guide/animation/create/text.md +453 -0
- package/assets/docs/guide/animation/create.md +558 -0
- package/assets/docs/guide/animation/edit.md +501 -0
- package/assets/docs/guide/animation/overview.md +22 -0
- package/assets/docs/guide/animation/types.md +430 -0
- package/assets/docs/guide/animation.md +23 -0
- package/assets/docs/guide/api/AssetAPI.md +602 -0
- package/assets/docs/guide/api/BlockAPI.md +6152 -0
- package/assets/docs/guide/api/CreativeEngine.md +180 -0
- package/assets/docs/guide/api/EditorAPI.md +1261 -0
- package/assets/docs/guide/api/EventAPI.md +25 -0
- package/assets/docs/guide/api/SceneAPI.md +729 -0
- package/assets/docs/guide/api/VariableAPI.md +59 -0
- package/assets/docs/guide/api/types.md +71 -0
- package/assets/docs/guide/api-reference/overview.md +20 -0
- package/assets/docs/guide/automation/auto-resize.md +412 -0
- package/assets/docs/guide/automation/batch-processing.md +474 -0
- package/assets/docs/guide/automation/data-merge.md +406 -0
- package/assets/docs/guide/automation/design-generation.md +107 -0
- package/assets/docs/guide/automation/overview.md +16 -0
- package/assets/docs/guide/automation.md +24 -0
- package/assets/docs/guide/browser-support.md +38 -0
- package/assets/docs/guide/capabilities.md +18 -0
- package/assets/docs/guide/colors/adjust.md +551 -0
- package/assets/docs/guide/colors/apply.md +349 -0
- package/assets/docs/guide/colors/basics.md +440 -0
- package/assets/docs/guide/colors/conversion.md +504 -0
- package/assets/docs/guide/colors/create-color-palette.md +426 -0
- package/assets/docs/guide/colors/for-print/cmyk.md +577 -0
- package/assets/docs/guide/colors/for-print/spot.md +751 -0
- package/assets/docs/guide/colors/for-print.md +21 -0
- package/assets/docs/guide/colors/for-screen/p3.md +60 -0
- package/assets/docs/guide/colors/for-screen/srgb.md +463 -0
- package/assets/docs/guide/colors/for-screen.md +21 -0
- package/assets/docs/guide/colors/overview.md +20 -0
- package/assets/docs/guide/colors/replace.md +535 -0
- package/assets/docs/guide/colors.md +28 -0
- package/assets/docs/guide/compatibility.md +27 -0
- package/assets/docs/guide/concepts/architecture.md +99 -0
- package/assets/docs/guide/concepts/assets.md +360 -0
- package/assets/docs/guide/concepts/blocks.md +750 -0
- package/assets/docs/guide/concepts/buffers.md +546 -0
- package/assets/docs/guide/concepts/design-units.md +333 -0
- package/assets/docs/guide/concepts/edit-modes.md +431 -0
- package/assets/docs/guide/concepts/editing-workflow.md +303 -0
- package/assets/docs/guide/concepts/events.md +466 -0
- package/assets/docs/guide/concepts/headless-mode/browser.md +291 -0
- package/assets/docs/guide/concepts/pages.md +396 -0
- package/assets/docs/guide/concepts/resources.md +496 -0
- package/assets/docs/guide/concepts/scenes.md +443 -0
- package/assets/docs/guide/concepts/templating.md +194 -0
- package/assets/docs/guide/concepts/terminology.md +296 -0
- package/assets/docs/guide/concepts/undo-and-history.md +461 -0
- package/assets/docs/guide/concepts.md +38 -0
- package/assets/docs/guide/configuration.md +469 -0
- package/assets/docs/guide/conversion/overview.md +22 -0
- package/assets/docs/guide/conversion/to-base64.md +234 -0
- package/assets/docs/guide/conversion/to-pdf.md +616 -0
- package/assets/docs/guide/conversion/to-png.md +290 -0
- package/assets/docs/guide/conversion.md +23 -0
- package/assets/docs/guide/create-audio/audio/add-music.md +430 -0
- package/assets/docs/guide/create-audio/audio/add-sound-effects.md +664 -0
- package/assets/docs/guide/create-audio/audio/loop.md +370 -0
- package/assets/docs/guide/create-audio/audio.md +336 -0
- package/assets/docs/guide/create-composition/add-background.md +395 -0
- package/assets/docs/guide/create-composition/blend-modes.md +372 -0
- package/assets/docs/guide/create-composition/collage.md +432 -0
- package/assets/docs/guide/create-composition/group-and-ungroup.md +388 -0
- package/assets/docs/guide/create-composition/layer-management.md +503 -0
- package/assets/docs/guide/create-composition/layout.md +396 -0
- package/assets/docs/guide/create-composition/lock-design.md +362 -0
- package/assets/docs/guide/create-composition/multi-page.md +204 -0
- package/assets/docs/guide/create-composition/overview.md +18 -0
- package/assets/docs/guide/create-composition/programmatic.md +593 -0
- package/assets/docs/guide/create-composition.md +30 -0
- package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +688 -0
- package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +600 -0
- package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +647 -0
- package/assets/docs/guide/create-templates/add-dynamic-content.md +307 -0
- package/assets/docs/guide/create-templates/add-to-template-library.md +297 -0
- package/assets/docs/guide/create-templates/edit-or-remove.md +441 -0
- package/assets/docs/guide/create-templates/from-scratch.md +558 -0
- package/assets/docs/guide/create-templates/import/from-scene-file.md +440 -0
- package/assets/docs/guide/create-templates/import.md +244 -0
- package/assets/docs/guide/create-templates/lock.md +325 -0
- package/assets/docs/guide/create-templates/overview.md +16 -0
- package/assets/docs/guide/create-templates.md +32 -0
- package/assets/docs/guide/create-video/audio/adjust-speed.md +302 -0
- package/assets/docs/guide/create-video/audio/adjust-volume.md +346 -0
- package/assets/docs/guide/create-video/control.md +285 -0
- package/assets/docs/guide/create-video/limitations.md +396 -0
- package/assets/docs/guide/create-video/overview.md +224 -0
- package/assets/docs/guide/create-video/timeline-editor.md +622 -0
- package/assets/docs/guide/create-video/update-caption-presets.md +676 -0
- package/assets/docs/guide/create-video.md +32 -0
- package/assets/docs/guide/edit-image/add-watermark.md +497 -0
- package/assets/docs/guide/edit-image/overview.md +22 -0
- package/assets/docs/guide/edit-image/remove-bg.md +420 -0
- package/assets/docs/guide/edit-image/replace-colors.md +680 -0
- package/assets/docs/guide/edit-image/transform/crop.md +523 -0
- package/assets/docs/guide/edit-image/transform/move.md +279 -0
- package/assets/docs/guide/edit-image/transform/resize.md +301 -0
- package/assets/docs/guide/edit-image/transform/rotate.md +408 -0
- package/assets/docs/guide/edit-image/transform/scale.md +278 -0
- package/assets/docs/guide/edit-image/transform.md +24 -0
- package/assets/docs/guide/edit-image/vectorize.md +204 -0
- package/assets/docs/guide/edit-image.md +25 -0
- package/assets/docs/guide/edit-video/add-captions.md +589 -0
- package/assets/docs/guide/edit-video/add-watermark.md +429 -0
- package/assets/docs/guide/edit-video/join-and-arrange.md +540 -0
- package/assets/docs/guide/edit-video/redaction.md +544 -0
- package/assets/docs/guide/edit-video/split.md +634 -0
- package/assets/docs/guide/edit-video/transform/crop.md +380 -0
- package/assets/docs/guide/edit-video/transform/flip.md +182 -0
- package/assets/docs/guide/edit-video/transform/move.md +413 -0
- package/assets/docs/guide/edit-video/transform/resize.md +534 -0
- package/assets/docs/guide/edit-video/transform/rotate.md +312 -0
- package/assets/docs/guide/edit-video/transform/scale.md +603 -0
- package/assets/docs/guide/edit-video/transform.md +25 -0
- package/assets/docs/guide/edit-video/trim.md +773 -0
- package/assets/docs/guide/engine-interface.md +108 -0
- package/assets/docs/guide/export-save-publish/create-thumbnail.md +292 -0
- package/assets/docs/guide/export-save-publish/export/compress.md +639 -0
- package/assets/docs/guide/export-save-publish/export/overview.md +576 -0
- package/assets/docs/guide/export-save-publish/export/partial-export.md +694 -0
- package/assets/docs/guide/export-save-publish/export/size-limits.md +401 -0
- package/assets/docs/guide/export-save-publish/export/to-html5.md +474 -0
- package/assets/docs/guide/export-save-publish/export/to-jpeg.md +312 -0
- package/assets/docs/guide/export-save-publish/export/to-mp4.md +364 -0
- package/assets/docs/guide/export-save-publish/export/to-pdf.md +389 -0
- package/assets/docs/guide/export-save-publish/export/to-png.md +255 -0
- package/assets/docs/guide/export-save-publish/export/to-raw-data.md +303 -0
- package/assets/docs/guide/export-save-publish/export/to-webp.md +261 -0
- package/assets/docs/guide/export-save-publish/export/with-color-mask.md +278 -0
- package/assets/docs/guide/export-save-publish/export.md +36 -0
- package/assets/docs/guide/export-save-publish/for-printing.md +423 -0
- package/assets/docs/guide/export-save-publish/for-social-media.md +318 -0
- package/assets/docs/guide/export-save-publish/pre-export-validation.md +698 -0
- package/assets/docs/guide/export-save-publish/save.md +340 -0
- package/assets/docs/guide/export-save-publish/store-custom-metadata.md +367 -0
- package/assets/docs/guide/file-format-support.md +34 -0
- package/assets/docs/guide/fills/color.md +678 -0
- package/assets/docs/guide/fills/image.md +539 -0
- package/assets/docs/guide/fills/overview.md +144 -0
- package/assets/docs/guide/fills/video.md +641 -0
- package/assets/docs/guide/fills.md +24 -0
- package/assets/docs/guide/filters-and-effects/apply.md +1019 -0
- package/assets/docs/guide/filters-and-effects/blur.md +382 -0
- package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +445 -0
- package/assets/docs/guide/filters-and-effects/create-custom-filters.md +614 -0
- package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +426 -0
- package/assets/docs/guide/filters-and-effects/distortion.md +527 -0
- package/assets/docs/guide/filters-and-effects/duotone.md +602 -0
- package/assets/docs/guide/filters-and-effects/gradients.md +1311 -0
- package/assets/docs/guide/filters-and-effects/overview.md +22 -0
- package/assets/docs/guide/filters-and-effects/support.md +623 -0
- package/assets/docs/guide/filters-and-effects.md +28 -0
- package/assets/docs/guide/get-started/agent-skills.md +119 -0
- package/assets/docs/guide/get-started/build-with-ai.md +45 -0
- package/assets/docs/guide/get-started/mcp-server.md +119 -0
- package/assets/docs/guide/get-started/overview.md +28 -0
- package/assets/docs/guide/get-started/vanilla-js/quickstart.md +175 -0
- package/assets/docs/guide/grid-and-rulers.md +222 -0
- package/assets/docs/guide/guides/export-save-publish/export/audio.md +224 -0
- package/assets/docs/guide/guides/text/rendering-internals.md +796 -0
- package/assets/docs/guide/guides.md +49 -0
- package/assets/docs/guide/import-media/asset-library.md +23 -0
- package/assets/docs/guide/import-media/asset-panel/basics.md +324 -0
- package/assets/docs/guide/import-media/asset-panel/customize.md +478 -0
- package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +415 -0
- package/assets/docs/guide/import-media/asset-panel/thumbnails.md +633 -0
- package/assets/docs/guide/import-media/capture-from-camera/record-video.md +137 -0
- package/assets/docs/guide/import-media/capture-from-camera.md +20 -0
- package/assets/docs/guide/import-media/concepts.md +173 -0
- package/assets/docs/guide/import-media/content-json-schema.md +615 -0
- package/assets/docs/guide/import-media/default-assets.md +381 -0
- package/assets/docs/guide/import-media/edit-or-remove-assets.md +489 -0
- package/assets/docs/guide/import-media/file-format-support.md +178 -0
- package/assets/docs/guide/import-media/from-local-source/user-upload.md +438 -0
- package/assets/docs/guide/import-media/from-local-source.md +20 -0
- package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +390 -0
- package/assets/docs/guide/import-media/from-remote-source/getty-images.md +627 -0
- package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +625 -0
- package/assets/docs/guide/import-media/from-remote-source/pexels.md +692 -0
- package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +473 -0
- package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +497 -0
- package/assets/docs/guide/import-media/from-remote-source/third-party.md +51 -0
- package/assets/docs/guide/import-media/from-remote-source/unsplash.md +914 -0
- package/assets/docs/guide/import-media/from-remote-source/your-server.md +764 -0
- package/assets/docs/guide/import-media/from-remote-source.md +28 -0
- package/assets/docs/guide/import-media/overview.md +32 -0
- package/assets/docs/guide/import-media/retrieve-mimetype.md +274 -0
- package/assets/docs/guide/import-media/size-limits.md +20 -0
- package/assets/docs/guide/import-media/source-sets.md +476 -0
- package/assets/docs/guide/import-media.md +32 -0
- package/assets/docs/guide/insert-media/audio.md +291 -0
- package/assets/docs/guide/insert-media/images.md +380 -0
- package/assets/docs/guide/insert-media/position-and-align.md +734 -0
- package/assets/docs/guide/insert-media/shapes-or-stickers.md +799 -0
- package/assets/docs/guide/insert-media/videos.md +308 -0
- package/assets/docs/guide/insert-media.md +24 -0
- package/assets/docs/guide/key-capabilities.md +24 -0
- package/assets/docs/guide/key-concepts.md +83 -0
- package/assets/docs/guide/licensing.md +45 -0
- package/assets/docs/guide/llms-txt.md +53 -0
- package/assets/docs/guide/open-the-editor/blank-canvas.md +124 -0
- package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +228 -0
- package/assets/docs/guide/open-the-editor/from-image.md +205 -0
- package/assets/docs/guide/open-the-editor/from-template.md +189 -0
- package/assets/docs/guide/open-the-editor/from-video.md +274 -0
- package/assets/docs/guide/open-the-editor/import-design/from-archive.md +504 -0
- package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +680 -0
- package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +865 -0
- package/assets/docs/guide/open-the-editor/import-design.md +481 -0
- package/assets/docs/guide/open-the-editor/load-scene.md +178 -0
- package/assets/docs/guide/open-the-editor/overview.md +20 -0
- package/assets/docs/guide/open-the-editor/set-zoom-level.md +303 -0
- package/assets/docs/guide/open-the-editor/uri-resolver.md +347 -0
- package/assets/docs/guide/open-the-editor.md +29 -0
- package/assets/docs/guide/outlines/overview.md +14 -0
- package/assets/docs/guide/outlines/shadows-and-glows.md +515 -0
- package/assets/docs/guide/outlines/strokes.md +292 -0
- package/assets/docs/guide/outlines.md +22 -0
- package/assets/docs/guide/overview.md +22 -0
- package/assets/docs/guide/performance.md +217 -0
- package/assets/docs/guide/plugins/asset-sources.md +553 -0
- package/assets/docs/guide/plugins/print-ready-pdf.md +549 -0
- package/assets/docs/guide/plugins.md +36 -0
- package/assets/docs/guide/rules/asset-handling.md +180 -0
- package/assets/docs/guide/rules/common-pitfalls.md +272 -0
- package/assets/docs/guide/rules/content-fill-mode.md +29 -0
- package/assets/docs/guide/rules/enforce-brand-guidelines.md +672 -0
- package/assets/docs/guide/rules/lock-content.md +478 -0
- package/assets/docs/guide/rules/moderate-content.md +761 -0
- package/assets/docs/guide/rules/overview.md +514 -0
- package/assets/docs/guide/rules/silent-init-errors.md +137 -0
- package/assets/docs/guide/rules/verify-properties-before-use.md +78 -0
- package/assets/docs/guide/rules.md +23 -0
- package/assets/docs/guide/security.md +199 -0
- package/assets/docs/guide/serve-assets.md +332 -0
- package/assets/docs/guide/settings.md +199 -0
- package/assets/docs/guide/shapes.md +23 -0
- package/assets/docs/guide/starterkits/3d-mockup-editor.md +748 -0
- package/assets/docs/guide/starterkits/advanced-editor.md +698 -0
- package/assets/docs/guide/starterkits/advanced-video-editor.md +696 -0
- package/assets/docs/guide/starterkits/ai-editor.md +749 -0
- package/assets/docs/guide/starterkits/airtable-image-editor.md +672 -0
- package/assets/docs/guide/starterkits/apparel-ui.md +188 -0
- package/assets/docs/guide/starterkits/assets.md +27 -0
- package/assets/docs/guide/starterkits/auto-resize.md +586 -0
- package/assets/docs/guide/starterkits/automated-video-generation.md +692 -0
- package/assets/docs/guide/starterkits/background-removal-editor.md +480 -0
- package/assets/docs/guide/starterkits/content-moderation.md +863 -0
- package/assets/docs/guide/starterkits/creative-automation.md +28 -0
- package/assets/docs/guide/starterkits/custom-built-uis.md +26 -0
- package/assets/docs/guide/starterkits/customization.md +29 -0
- package/assets/docs/guide/starterkits/cutout-lines-editor.md +470 -0
- package/assets/docs/guide/starterkits/data-merge.md +850 -0
- package/assets/docs/guide/starterkits/design-editor.md +698 -0
- package/assets/docs/guide/starterkits/design-generation.md +719 -0
- package/assets/docs/guide/starterkits/design-validation.md +808 -0
- package/assets/docs/guide/starterkits/editor-ui-configurations.md +14 -0
- package/assets/docs/guide/starterkits/export-options.md +724 -0
- package/assets/docs/guide/starterkits/export-using-renderer.md +708 -0
- package/assets/docs/guide/starterkits/extensibility.md +28 -0
- package/assets/docs/guide/starterkits/force-crop-editor.md +675 -0
- package/assets/docs/guide/starterkits/form-based-template-adoption.md +522 -0
- package/assets/docs/guide/starterkits/getty-images-editor.md +700 -0
- package/assets/docs/guide/starterkits/html5-ads-exporter.md +719 -0
- package/assets/docs/guide/starterkits/indesign-template-import.md +580 -0
- package/assets/docs/guide/starterkits/layouts-editor.md +724 -0
- package/assets/docs/guide/starterkits/mobile-ui.md +185 -0
- package/assets/docs/guide/starterkits/mockup-editor.md +745 -0
- package/assets/docs/guide/starterkits/multi-image-generation.md +542 -0
- package/assets/docs/guide/starterkits/page-sizes-editor.md +657 -0
- package/assets/docs/guide/starterkits/pexels-image-editor.md +665 -0
- package/assets/docs/guide/starterkits/photo-editor.md +755 -0
- package/assets/docs/guide/starterkits/photo-ui.md +186 -0
- package/assets/docs/guide/starterkits/photobook-ui.md +188 -0
- package/assets/docs/guide/starterkits/placeholders.md +678 -0
- package/assets/docs/guide/starterkits/player.md +405 -0
- package/assets/docs/guide/starterkits/plugins.md +25 -0
- package/assets/docs/guide/starterkits/postcard-editor.md +202 -0
- package/assets/docs/guide/starterkits/pptx-template-import.md +581 -0
- package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +746 -0
- package/assets/docs/guide/starterkits/product-editor.md +773 -0
- package/assets/docs/guide/starterkits/psd-template-import.md +580 -0
- package/assets/docs/guide/starterkits/qr-code-editor.md +470 -0
- package/assets/docs/guide/starterkits/single-page-editor.md +661 -0
- package/assets/docs/guide/starterkits/start-with-image.md +684 -0
- package/assets/docs/guide/starterkits/start-with-video.md +651 -0
- package/assets/docs/guide/starterkits/t-shirt-designer.md +742 -0
- package/assets/docs/guide/starterkits/templating.md +23 -0
- package/assets/docs/guide/starterkits/theming.md +662 -0
- package/assets/docs/guide/starterkits/translation-internationalization.md +662 -0
- package/assets/docs/guide/starterkits/unsplash-editor.md +839 -0
- package/assets/docs/guide/starterkits/vectorizer-editor.md +466 -0
- package/assets/docs/guide/starterkits/version-history.md +745 -0
- package/assets/docs/guide/starterkits/video-animations.md +853 -0
- package/assets/docs/guide/starterkits/video-captions.md +884 -0
- package/assets/docs/guide/starterkits/video-editing.md +25 -0
- package/assets/docs/guide/starterkits/video-editor.md +696 -0
- package/assets/docs/guide/starterkits/video-export-options.md +676 -0
- package/assets/docs/guide/starterkits/viewer.md +400 -0
- package/assets/docs/guide/starterkits.md +41 -0
- package/assets/docs/guide/stickers-and-shapes/combine.md +743 -0
- package/assets/docs/guide/stickers-and-shapes/create-cutout.md +425 -0
- package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +794 -0
- package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +290 -0
- package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +211 -0
- package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +362 -0
- package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +208 -0
- package/assets/docs/guide/stickers.md +21 -0
- package/assets/docs/guide/text/add.md +641 -0
- package/assets/docs/guide/text/adjust-spacing.md +288 -0
- package/assets/docs/guide/text/auto-size.md +404 -0
- package/assets/docs/guide/text/custom-fonts.md +401 -0
- package/assets/docs/guide/text/decorations.md +330 -0
- package/assets/docs/guide/text/edit.md +458 -0
- package/assets/docs/guide/text/effects.md +244 -0
- package/assets/docs/guide/text/emojis.md +310 -0
- package/assets/docs/guide/text/enumerations.md +258 -0
- package/assets/docs/guide/text/language-support.md +604 -0
- package/assets/docs/guide/text/overview.md +14 -0
- package/assets/docs/guide/text/styling.md +390 -0
- package/assets/docs/guide/text/text-designs.md +834 -0
- package/assets/docs/guide/text.md +33 -0
- package/assets/docs/guide/to-v1-10.md +131 -0
- package/assets/docs/guide/to-v1-13.md +165 -0
- package/assets/docs/guide/to-v1-19.md +315 -0
- package/assets/docs/guide/to-v1-32.md +110 -0
- package/assets/docs/guide/to-v1-69.md +468 -0
- package/assets/docs/guide/to-v1-72.md +193 -0
- package/assets/docs/guide/upgrade.md +25 -0
- package/assets/docs/guide/use-templates/apply-template.md +279 -0
- package/assets/docs/guide/use-templates/generate.md +405 -0
- package/assets/docs/guide/use-templates/library.md +450 -0
- package/assets/docs/guide/use-templates/overview.md +20 -0
- package/assets/docs/guide/use-templates/programmatic.md +482 -0
- package/assets/docs/guide/use-templates/replace-content.md +399 -0
- package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +428 -0
- package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +337 -0
- package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +853 -0
- package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +1045 -0
- package/assets/docs/guide/user-interface/ai-integration/image-generation.md +641 -0
- package/assets/docs/guide/user-interface/ai-integration/integrate.md +966 -0
- package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +99 -0
- package/assets/docs/guide/user-interface/ai-integration/text-generation.md +498 -0
- package/assets/docs/guide/user-interface/ai-integration/video-generation.md +493 -0
- package/assets/docs/guide/user-interface/ai-integration.md +30 -0
- package/assets/docs/guide/user-interface/appearance/change-ui-font.md +316 -0
- package/assets/docs/guide/user-interface/appearance/custom-labels.md +509 -0
- package/assets/docs/guide/user-interface/appearance/icons.md +373 -0
- package/assets/docs/guide/user-interface/appearance/theming.md +665 -0
- package/assets/docs/guide/user-interface/appearance.md +23 -0
- package/assets/docs/guide/user-interface/build-your-own-ui.md +620 -0
- package/assets/docs/guide/user-interface/customization/canvas-menu.md +412 -0
- package/assets/docs/guide/user-interface/customization/canvas.md +281 -0
- package/assets/docs/guide/user-interface/customization/color-palette.md +413 -0
- package/assets/docs/guide/user-interface/customization/crop-presets.md +384 -0
- package/assets/docs/guide/user-interface/customization/disable-or-enable.md +676 -0
- package/assets/docs/guide/user-interface/customization/dock.md +399 -0
- package/assets/docs/guide/user-interface/customization/force-crop.md +289 -0
- package/assets/docs/guide/user-interface/customization/inspector-bar.md +371 -0
- package/assets/docs/guide/user-interface/customization/navigation-bar.md +516 -0
- package/assets/docs/guide/user-interface/customization/page-format.md +436 -0
- package/assets/docs/guide/user-interface/customization/panel.md +605 -0
- package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +531 -0
- package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +358 -0
- package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +374 -0
- package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +323 -0
- package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +294 -0
- package/assets/docs/guide/user-interface/customization/quick-start.md +12 -0
- package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +519 -0
- package/assets/docs/guide/user-interface/customization/reference/component-reference.md +333 -0
- package/assets/docs/guide/user-interface/customization/reference.md +12 -0
- package/assets/docs/guide/user-interface/customization.md +39 -0
- package/assets/docs/guide/user-interface/localization.md +633 -0
- package/assets/docs/guide/user-interface/overview.md +167 -0
- package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +411 -0
- package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +721 -0
- package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +331 -0
- package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +553 -0
- package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +672 -0
- package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +415 -0
- package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +521 -0
- package/assets/docs/guide/user-interface/ui-extensions.md +26 -0
- package/assets/docs/guide/user-interface.md +25 -0
- package/assets/docs/guide/what-is-cesdk.md +319 -0
- package/assets/docs/handbook/SKILL.md +521 -0
- package/assets/prompts/evals-assetGenerate.md +12 -0
- package/assets/prompts/evals-brutalistCore.md +34 -0
- package/assets/prompts/evals-danskCatalogue.md +31 -0
- package/assets/prompts/evals-exportRoundTrip.md +12 -0
- package/assets/prompts/evals-inspectPriorCode.md +16 -0
- package/assets/prompts/evals-listProjectFiles.md +6 -0
- package/assets/prompts/evals-readAndExplainScript.md +6 -0
- package/assets/prompts/evals-resumeAcrossRestart.md +15 -0
- package/assets/prompts/evals-rewindRecovery.md +10 -0
- package/assets/prompts/evals-searchAcrossFiles.md +6 -0
- package/assets/prompts/evals-weddingCard.md +20 -0
- package/assets/prompts/explain.md +6 -0
- package/assets/prompts/review.md +6 -0
- package/dist/assets/inline.generated.d.ts +2 -0
- package/dist/assets/inline.generated.d.ts.map +1 -0
- package/dist/assets/inline.generated.js +413 -0
- package/dist/assets/inline.generated.js.map +1 -0
- package/dist/assets/load-browser.d.ts +8 -0
- package/dist/assets/load-browser.d.ts.map +1 -0
- package/dist/assets/load-browser.js +11 -0
- package/dist/assets/load-browser.js.map +1 -0
- package/dist/assets/load-node.d.ts +8 -0
- package/dist/assets/load-node.d.ts.map +1 -0
- package/dist/assets/load-node.js +11 -0
- package/dist/assets/load-node.js.map +1 -0
- package/dist/cli/http.d.ts +2 -0
- package/dist/cli/http.d.ts.map +1 -0
- package/dist/cli/http.js +231 -0
- package/dist/cli/http.js.map +1 -0
- package/dist/cli/redirect-console.d.ts +10 -0
- package/dist/cli/redirect-console.d.ts.map +1 -0
- package/dist/cli/redirect-console.js +18 -0
- package/dist/cli/redirect-console.js.map +1 -0
- package/dist/cli/resolve-license.d.ts +2 -0
- package/dist/cli/resolve-license.d.ts.map +1 -0
- package/dist/cli/resolve-license.js +13 -0
- package/dist/cli/resolve-license.js.map +1 -0
- package/dist/cli/stdio.d.ts +2 -0
- package/dist/cli/stdio.d.ts.map +1 -0
- package/dist/cli/stdio.js +124 -0
- package/dist/cli/stdio.js.map +1 -0
- package/dist/cli/trial-license.generated.d.ts +2 -0
- package/dist/cli/trial-license.generated.d.ts.map +1 -0
- package/dist/cli/trial-license.generated.js +4 -0
- package/dist/cli/trial-license.generated.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +64 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +61 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +102 -0
- package/dist/config.js.map +1 -0
- package/dist/cross-ref.d.ts +2 -0
- package/dist/cross-ref.d.ts.map +1 -0
- package/dist/cross-ref.js +31 -0
- package/dist/cross-ref.js.map +1 -0
- package/dist/dashboard/router.d.ts +3 -0
- package/dist/dashboard/router.d.ts.map +1 -0
- package/dist/dashboard/router.js +19 -0
- package/dist/dashboard/router.js.map +1 -0
- package/dist/dashboard/spa-assets.generated.d.ts +2 -0
- package/dist/dashboard/spa-assets.generated.d.ts.map +1 -0
- package/dist/dashboard/spa-assets.generated.js +220 -0
- package/dist/dashboard/spa-assets.generated.js.map +1 -0
- package/dist/engine/asset-sources.d.ts +17 -0
- package/dist/engine/asset-sources.d.ts.map +1 -0
- package/dist/engine/asset-sources.js +75 -0
- package/dist/engine/asset-sources.js.map +1 -0
- package/dist/engine/cesdk-adapter.d.ts +10 -0
- package/dist/engine/cesdk-adapter.d.ts.map +1 -0
- package/dist/engine/cesdk-adapter.js +19 -0
- package/dist/engine/cesdk-adapter.js.map +1 -0
- package/dist/engine/index.d.ts +3 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +3 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/mutex.d.ts +5 -0
- package/dist/engine/mutex.d.ts.map +1 -0
- package/dist/engine/mutex.js +42 -0
- package/dist/engine/mutex.js.map +1 -0
- package/dist/engine/session.d.ts +50 -0
- package/dist/engine/session.d.ts.map +1 -0
- package/dist/engine/session.js +95 -0
- package/dist/engine/session.js.map +1 -0
- package/dist/engine/uri-resolver.d.ts +14 -0
- package/dist/engine/uri-resolver.d.ts.map +1 -0
- package/dist/engine/uri-resolver.js +12 -0
- package/dist/engine/uri-resolver.js.map +1 -0
- package/dist/frontmatter.d.ts +15 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +46 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/gateway/hosted-stub.d.ts +6 -0
- package/dist/gateway/hosted-stub.d.ts.map +1 -0
- package/dist/gateway/hosted-stub.js +11 -0
- package/dist/gateway/hosted-stub.js.map +1 -0
- package/dist/gateway/index.d.ts +4 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +4 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/local.d.ts +14 -0
- package/dist/gateway/local.d.ts.map +1 -0
- package/dist/gateway/local.js +41 -0
- package/dist/gateway/local.js.map +1 -0
- package/dist/gateway/types.d.ts +24 -0
- package/dist/gateway/types.d.ts.map +1 -0
- package/dist/gateway/types.js +7 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/http/server.d.ts +80 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +183 -0
- package/dist/http/server.js.map +1 -0
- package/dist/http/session-manager.d.ts +42 -0
- package/dist/http/session-manager.d.ts.map +1 -0
- package/dist/http/session-manager.js +82 -0
- package/dist/http/session-manager.js.map +1 -0
- package/dist/http/workspace-auth.d.ts +9 -0
- package/dist/http/workspace-auth.d.ts.map +1 -0
- package/dist/http/workspace-auth.js +29 -0
- package/dist/http/workspace-auth.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics/mount.d.ts +11 -0
- package/dist/metrics/mount.d.ts.map +1 -0
- package/dist/metrics/mount.js +13 -0
- package/dist/metrics/mount.js.map +1 -0
- package/dist/metrics/recorder.d.ts +55 -0
- package/dist/metrics/recorder.d.ts.map +1 -0
- package/dist/metrics/recorder.js +97 -0
- package/dist/metrics/recorder.js.map +1 -0
- package/dist/revisions/hash.d.ts +7 -0
- package/dist/revisions/hash.d.ts.map +1 -0
- package/dist/revisions/hash.js +24 -0
- package/dist/revisions/hash.js.map +1 -0
- package/dist/revisions/index.d.ts +4 -0
- package/dist/revisions/index.d.ts.map +1 -0
- package/dist/revisions/index.js +4 -0
- package/dist/revisions/index.js.map +1 -0
- package/dist/revisions/store.d.ts +69 -0
- package/dist/revisions/store.d.ts.map +1 -0
- package/dist/revisions/store.js +196 -0
- package/dist/revisions/store.js.map +1 -0
- package/dist/revisions/types.d.ts +39 -0
- package/dist/revisions/types.d.ts.map +1 -0
- package/dist/revisions/types.js +2 -0
- package/dist/revisions/types.js.map +1 -0
- package/dist/server.d.ts +51 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +175 -0
- package/dist/server.js.map +1 -0
- package/dist/skill-tools.d.ts +3 -0
- package/dist/skill-tools.d.ts.map +1 -0
- package/dist/skill-tools.js +105 -0
- package/dist/skill-tools.js.map +1 -0
- package/dist/test/test/cli/dispatcher.test.d.ts +2 -0
- package/dist/test/test/cli/dispatcher.test.d.ts.map +1 -0
- package/dist/test/test/cli/dispatcher.test.js +47 -0
- package/dist/test/test/cli/dispatcher.test.js.map +1 -0
- package/dist/test/test/cross-ref.test.d.ts +2 -0
- package/dist/test/test/cross-ref.test.d.ts.map +1 -0
- package/dist/test/test/cross-ref.test.js +39 -0
- package/dist/test/test/cross-ref.test.js.map +1 -0
- package/dist/test/test/engine/session.test.d.ts +2 -0
- package/dist/test/test/engine/session.test.d.ts.map +1 -0
- package/dist/test/test/engine/session.test.js +144 -0
- package/dist/test/test/engine/session.test.js.map +1 -0
- package/dist/test/test/engine/uri-resolver.test.d.ts +2 -0
- package/dist/test/test/engine/uri-resolver.test.d.ts.map +1 -0
- package/dist/test/test/engine/uri-resolver.test.js +38 -0
- package/dist/test/test/engine/uri-resolver.test.js.map +1 -0
- package/dist/test/test/frontmatter.test.d.ts +2 -0
- package/dist/test/test/frontmatter.test.d.ts.map +1 -0
- package/dist/test/test/frontmatter.test.js +55 -0
- package/dist/test/test/frontmatter.test.js.map +1 -0
- package/dist/test/test/gateway/hosted-stub.test.d.ts +2 -0
- package/dist/test/test/gateway/hosted-stub.test.d.ts.map +1 -0
- package/dist/test/test/gateway/hosted-stub.test.js +11 -0
- package/dist/test/test/gateway/hosted-stub.test.js.map +1 -0
- package/dist/test/test/gateway/local.test.d.ts +2 -0
- package/dist/test/test/gateway/local.test.d.ts.map +1 -0
- package/dist/test/test/gateway/local.test.js +29 -0
- package/dist/test/test/gateway/local.test.js.map +1 -0
- package/dist/test/test/handbook-contract.test.d.ts +2 -0
- package/dist/test/test/handbook-contract.test.d.ts.map +1 -0
- package/dist/test/test/handbook-contract.test.js +71 -0
- package/dist/test/test/handbook-contract.test.js.map +1 -0
- package/dist/test/test/http/server.test.d.ts +2 -0
- package/dist/test/test/http/server.test.d.ts.map +1 -0
- package/dist/test/test/http/server.test.js +245 -0
- package/dist/test/test/http/server.test.js.map +1 -0
- package/dist/test/test/http/session-manager.test.d.ts +2 -0
- package/dist/test/test/http/session-manager.test.d.ts.map +1 -0
- package/dist/test/test/http/session-manager.test.js +83 -0
- package/dist/test/test/http/session-manager.test.js.map +1 -0
- package/dist/test/test/revisions/hash.test.d.ts +2 -0
- package/dist/test/test/revisions/hash.test.d.ts.map +1 -0
- package/dist/test/test/revisions/hash.test.js +33 -0
- package/dist/test/test/revisions/hash.test.js.map +1 -0
- package/dist/test/test/revisions/store.test.d.ts +2 -0
- package/dist/test/test/revisions/store.test.d.ts.map +1 -0
- package/dist/test/test/revisions/store.test.js +245 -0
- package/dist/test/test/revisions/store.test.js.map +1 -0
- package/dist/test/test/server.test.d.ts +2 -0
- package/dist/test/test/server.test.d.ts.map +1 -0
- package/dist/test/test/server.test.js +157 -0
- package/dist/test/test/server.test.js.map +1 -0
- package/dist/test/test/skill-tools.test.d.ts +2 -0
- package/dist/test/test/skill-tools.test.d.ts.map +1 -0
- package/dist/test/test/skill-tools.test.js +84 -0
- package/dist/test/test/skill-tools.test.js.map +1 -0
- package/dist/test/test/smoke.test.d.ts +2 -0
- package/dist/test/test/smoke.test.d.ts.map +1 -0
- package/dist/test/test/smoke.test.js +8 -0
- package/dist/test/test/smoke.test.js.map +1 -0
- package/dist/test/test/tools/asset-generate.test.d.ts +2 -0
- package/dist/test/test/tools/asset-generate.test.d.ts.map +1 -0
- package/dist/test/test/tools/asset-generate.test.js +66 -0
- package/dist/test/test/tools/asset-generate.test.js.map +1 -0
- package/dist/test/test/tools/edit.test.d.ts +2 -0
- package/dist/test/test/tools/edit.test.d.ts.map +1 -0
- package/dist/test/test/tools/edit.test.js +205 -0
- package/dist/test/test/tools/edit.test.js.map +1 -0
- package/dist/test/test/tools/export.test.d.ts +2 -0
- package/dist/test/test/tools/export.test.d.ts.map +1 -0
- package/dist/test/test/tools/export.test.js +144 -0
- package/dist/test/test/tools/export.test.js.map +1 -0
- package/dist/test/test/tools/history.test.d.ts +2 -0
- package/dist/test/test/tools/history.test.d.ts.map +1 -0
- package/dist/test/test/tools/history.test.js +29 -0
- package/dist/test/test/tools/history.test.js.map +1 -0
- package/dist/test/test/tools/inspect.test.d.ts +2 -0
- package/dist/test/test/tools/inspect.test.d.ts.map +1 -0
- package/dist/test/test/tools/inspect.test.js +62 -0
- package/dist/test/test/tools/inspect.test.js.map +1 -0
- package/dist/test/test/tools/list.test.d.ts +2 -0
- package/dist/test/test/tools/list.test.d.ts.map +1 -0
- package/dist/test/test/tools/list.test.js +23 -0
- package/dist/test/test/tools/list.test.js.map +1 -0
- package/dist/test/test/tools/open-editor.test.d.ts +2 -0
- package/dist/test/test/tools/open-editor.test.d.ts.map +1 -0
- package/dist/test/test/tools/open-editor.test.js +53 -0
- package/dist/test/test/tools/open-editor.test.js.map +1 -0
- package/dist/test/test/tools/preview.test.d.ts +2 -0
- package/dist/test/test/tools/preview.test.d.ts.map +1 -0
- package/dist/test/test/tools/preview.test.js +73 -0
- package/dist/test/test/tools/preview.test.js.map +1 -0
- package/dist/test/test/tools/rename.test.d.ts +2 -0
- package/dist/test/test/tools/rename.test.d.ts.map +1 -0
- package/dist/test/test/tools/rename.test.js +17 -0
- package/dist/test/test/tools/rename.test.js.map +1 -0
- package/dist/test/test/viewer/broadcaster.test.d.ts +2 -0
- package/dist/test/test/viewer/broadcaster.test.d.ts.map +1 -0
- package/dist/test/test/viewer/broadcaster.test.js +53 -0
- package/dist/test/test/viewer/broadcaster.test.js.map +1 -0
- package/dist/test/test/viewer/resource-route.test.d.ts +2 -0
- package/dist/test/test/viewer/resource-route.test.d.ts.map +1 -0
- package/dist/test/test/viewer/resource-route.test.js +70 -0
- package/dist/test/test/viewer/resource-route.test.js.map +1 -0
- package/dist/test/test/viewer/router.test.d.ts +2 -0
- package/dist/test/test/viewer/router.test.d.ts.map +1 -0
- package/dist/test/test/viewer/router.test.js +171 -0
- package/dist/test/test/viewer/router.test.js.map +1 -0
- package/dist/test/test/viewer/url-builder.test.d.ts +2 -0
- package/dist/test/test/viewer/url-builder.test.d.ts.map +1 -0
- package/dist/test/test/viewer/url-builder.test.js +31 -0
- package/dist/test/test/viewer/url-builder.test.js.map +1 -0
- package/dist/test/test/workspace/hosted-stub.test.d.ts +2 -0
- package/dist/test/test/workspace/hosted-stub.test.d.ts.map +1 -0
- package/dist/test/test/workspace/hosted-stub.test.js +30 -0
- package/dist/test/test/workspace/hosted-stub.test.js.map +1 -0
- package/dist/test/test/workspace/in-memory.test.d.ts +2 -0
- package/dist/test/test/workspace/in-memory.test.d.ts.map +1 -0
- package/dist/test/test/workspace/in-memory.test.js +4 -0
- package/dist/test/test/workspace/in-memory.test.js.map +1 -0
- package/dist/test/test/workspace/node-fs.test.d.ts +2 -0
- package/dist/test/test/workspace/node-fs.test.d.ts.map +1 -0
- package/dist/test/test/workspace/node-fs.test.js +20 -0
- package/dist/test/test/workspace/node-fs.test.js.map +1 -0
- package/dist/test/test/workspace/shared-contract.d.ts +3 -0
- package/dist/test/test/workspace/shared-contract.d.ts.map +1 -0
- package/dist/test/test/workspace/shared-contract.js +92 -0
- package/dist/test/test/workspace/shared-contract.js.map +1 -0
- package/dist/test/tsconfig.test.tsbuildinfo +1 -0
- package/dist/test/vitest.config.d.ts +3 -0
- package/dist/test/vitest.config.d.ts.map +1 -0
- package/dist/test/vitest.config.js +8 -0
- package/dist/test/vitest.config.js.map +1 -0
- package/dist/tools/asset-generate.d.ts +12 -0
- package/dist/tools/asset-generate.d.ts.map +1 -0
- package/dist/tools/asset-generate.js +112 -0
- package/dist/tools/asset-generate.js.map +1 -0
- package/dist/tools/asset-search.d.ts +10 -0
- package/dist/tools/asset-search.d.ts.map +1 -0
- package/dist/tools/asset-search.js +120 -0
- package/dist/tools/asset-search.js.map +1 -0
- package/dist/tools/content-types.d.ts +11 -0
- package/dist/tools/content-types.d.ts.map +1 -0
- package/dist/tools/content-types.js +2 -0
- package/dist/tools/content-types.js.map +1 -0
- package/dist/tools/edit.d.ts +29 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +165 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/engine.d.ts +31 -0
- package/dist/tools/engine.d.ts.map +1 -0
- package/dist/tools/engine.js +59 -0
- package/dist/tools/engine.js.map +1 -0
- package/dist/tools/export.d.ts +19 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +179 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/history.d.ts +7 -0
- package/dist/tools/history.d.ts.map +1 -0
- package/dist/tools/history.js +54 -0
- package/dist/tools/history.js.map +1 -0
- package/dist/tools/index.d.ts +35 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +72 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inspect.d.ts +7 -0
- package/dist/tools/inspect.d.ts.map +1 -0
- package/dist/tools/inspect.js +80 -0
- package/dist/tools/inspect.js.map +1 -0
- package/dist/tools/list.d.ts +7 -0
- package/dist/tools/list.d.ts.map +1 -0
- package/dist/tools/list.js +18 -0
- package/dist/tools/list.js.map +1 -0
- package/dist/tools/metrics.d.ts +11 -0
- package/dist/tools/metrics.d.ts.map +1 -0
- package/dist/tools/metrics.js +28 -0
- package/dist/tools/metrics.js.map +1 -0
- package/dist/tools/open-editor.d.ts +10 -0
- package/dist/tools/open-editor.d.ts.map +1 -0
- package/dist/tools/open-editor.js +62 -0
- package/dist/tools/open-editor.js.map +1 -0
- package/dist/tools/preview.d.ts +12 -0
- package/dist/tools/preview.d.ts.map +1 -0
- package/dist/tools/preview.js +104 -0
- package/dist/tools/preview.js.map +1 -0
- package/dist/tools/rename.d.ts +7 -0
- package/dist/tools/rename.d.ts.map +1 -0
- package/dist/tools/rename.js +39 -0
- package/dist/tools/rename.js.map +1 -0
- package/dist/tools/result.d.ts +12 -0
- package/dist/tools/result.d.ts.map +1 -0
- package/dist/tools/result.js +55 -0
- package/dist/tools/result.js.map +1 -0
- package/dist/tools/save.d.ts +19 -0
- package/dist/tools/save.d.ts.map +1 -0
- package/dist/tools/save.js +117 -0
- package/dist/tools/save.js.map +1 -0
- package/dist/viewer/broadcaster.d.ts +13 -0
- package/dist/viewer/broadcaster.d.ts.map +1 -0
- package/dist/viewer/broadcaster.js +44 -0
- package/dist/viewer/broadcaster.js.map +1 -0
- package/dist/viewer/index.d.ts +7 -0
- package/dist/viewer/index.d.ts.map +1 -0
- package/dist/viewer/index.js +7 -0
- package/dist/viewer/index.js.map +1 -0
- package/dist/viewer/listener.d.ts +16 -0
- package/dist/viewer/listener.d.ts.map +1 -0
- package/dist/viewer/listener.js +30 -0
- package/dist/viewer/listener.js.map +1 -0
- package/dist/viewer/presigned-r2-url-builder.d.ts +30 -0
- package/dist/viewer/presigned-r2-url-builder.d.ts.map +1 -0
- package/dist/viewer/presigned-r2-url-builder.js +40 -0
- package/dist/viewer/presigned-r2-url-builder.js.map +1 -0
- package/dist/viewer/resource-route.d.ts +9 -0
- package/dist/viewer/resource-route.d.ts.map +1 -0
- package/dist/viewer/resource-route.js +59 -0
- package/dist/viewer/resource-route.js.map +1 -0
- package/dist/viewer/router.d.ts +20 -0
- package/dist/viewer/router.d.ts.map +1 -0
- package/dist/viewer/router.js +142 -0
- package/dist/viewer/router.js.map +1 -0
- package/dist/viewer/session-mount.d.ts +10 -0
- package/dist/viewer/session-mount.d.ts.map +1 -0
- package/dist/viewer/session-mount.js +24 -0
- package/dist/viewer/session-mount.js.map +1 -0
- package/dist/viewer/spa-assets.generated.d.ts +2 -0
- package/dist/viewer/spa-assets.generated.d.ts.map +1 -0
- package/dist/viewer/spa-assets.generated.js +989 -0
- package/dist/viewer/spa-assets.generated.js.map +1 -0
- package/dist/viewer/url-builder.d.ts +48 -0
- package/dist/viewer/url-builder.d.ts.map +1 -0
- package/dist/viewer/url-builder.js +38 -0
- package/dist/viewer/url-builder.js.map +1 -0
- package/dist/workspace/hosted-stub.d.ts +28 -0
- package/dist/workspace/hosted-stub.d.ts.map +1 -0
- package/dist/workspace/hosted-stub.js +44 -0
- package/dist/workspace/hosted-stub.js.map +1 -0
- package/dist/workspace/in-memory.d.ts +23 -0
- package/dist/workspace/in-memory.d.ts.map +1 -0
- package/dist/workspace/in-memory.js +161 -0
- package/dist/workspace/in-memory.js.map +1 -0
- package/dist/workspace/index.d.ts +6 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +6 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/node-fs.d.ts +23 -0
- package/dist/workspace/node-fs.d.ts.map +1 -0
- package/dist/workspace/node-fs.js +90 -0
- package/dist/workspace/node-fs.js.map +1 -0
- package/dist/workspace/s3.d.ts +32 -0
- package/dist/workspace/s3.d.ts.map +1 -0
- package/dist/workspace/s3.js +191 -0
- package/dist/workspace/s3.js.map +1 -0
- package/dist/workspace/scoped.d.ts +32 -0
- package/dist/workspace/scoped.d.ts.map +1 -0
- package/dist/workspace/scoped.js +76 -0
- package/dist/workspace/scoped.js.map +1 -0
- package/dist/workspace/types.d.ts +75 -0
- package/dist/workspace/types.d.ts.map +1 -0
- package/dist/workspace/types.js +18 -0
- package/dist/workspace/types.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,558 @@
|
|
|
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 Use Templates](./create-templates.md) > [Create From Scratch](./create-templates/from-scratch.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Build reusable design templates entirely through code using CE.SDK's programmatic APIs for automation, batch generation, and custom template creation tools.
|
|
8
|
+
|
|
9
|
+

|
|
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-create-templates-from-scratch-browser)
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-templates-from-scratch-browser)
|
|
18
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-create-templates-from-scratch-browser/)
|
|
19
|
+
|
|
20
|
+
CE.SDK provides a complete API for building design templates through code. Instead of starting from an existing template, you can create a blank scene, define page dimensions, add text and graphic blocks, configure placeholders for swappable media, add text variables for dynamic content, apply editing constraints to protect layout integrity, and save the template for reuse. This approach enables automation workflows, batch template generation, and integration with custom template creation tools.
|
|
21
|
+
|
|
22
|
+
```typescript file=@cesdk_web_examples/guides-create-templates-from-scratch-browser/browser.ts reference-only
|
|
23
|
+
import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
|
|
24
|
+
|
|
25
|
+
import { DesignEditorConfig } from './design-editor/plugin';
|
|
26
|
+
import packageJson from './package.json';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* CE.SDK Plugin: Create Templates From Scratch Guide
|
|
30
|
+
*
|
|
31
|
+
* Demonstrates building a reusable promotional card template entirely in code:
|
|
32
|
+
* - Creating a blank scene with print-ready dimensions (1200x1600)
|
|
33
|
+
* - Adding text blocks with variable tokens and proper font styling
|
|
34
|
+
* - Adding graphic blocks as image placeholders using addImage()
|
|
35
|
+
* - Configuring placeholder behavior for swappable media
|
|
36
|
+
* - Applying editing constraints (scopes) to protect layout integrity
|
|
37
|
+
* - Saving the template in multiple formats
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
class Example implements EditorPlugin {
|
|
41
|
+
name = packageJson.name;
|
|
42
|
+
|
|
43
|
+
version = packageJson.version;
|
|
44
|
+
|
|
45
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
46
|
+
if (!cesdk) {
|
|
47
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
await cesdk.addPlugin(new DesignEditorConfig());
|
|
51
|
+
const engine = cesdk.engine;
|
|
52
|
+
|
|
53
|
+
// Template layout constants for a promotional card
|
|
54
|
+
const CANVAS_WIDTH = 800;
|
|
55
|
+
const CANVAS_HEIGHT = 1000;
|
|
56
|
+
const PADDING = 40;
|
|
57
|
+
const CONTENT_WIDTH = CANVAS_WIDTH - PADDING * 2;
|
|
58
|
+
|
|
59
|
+
// Create a blank scene with custom dimensions
|
|
60
|
+
engine.scene.create('Free', {
|
|
61
|
+
page: { size: { width: CANVAS_WIDTH, height: CANVAS_HEIGHT } }
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Set design unit to Pixel for precise coordinate mapping
|
|
65
|
+
engine.scene.setDesignUnit('Pixel');
|
|
66
|
+
|
|
67
|
+
// Get the page that was automatically created
|
|
68
|
+
const page = engine.block.findByType('page')[0];
|
|
69
|
+
|
|
70
|
+
// Set a gradient background for the template
|
|
71
|
+
const backgroundFill = engine.block.createFill('gradient/linear');
|
|
72
|
+
engine.block.setGradientColorStops(backgroundFill, 'fill/gradient/colors', [
|
|
73
|
+
{ color: { r: 0.4, g: 0.2, b: 0.6, a: 1.0 }, stop: 0 }, // Purple
|
|
74
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1.0 }, stop: 1 } // Blue
|
|
75
|
+
]);
|
|
76
|
+
engine.block.setFill(page, backgroundFill);
|
|
77
|
+
|
|
78
|
+
// Font URIs for consistent typography
|
|
79
|
+
const FONT_BOLD =
|
|
80
|
+
'https://cdn.img.ly/packages/imgly/cesdk-js/latest/assets/extensions/ly.img.cesdk.fonts/fonts/Roboto/Roboto-Bold.ttf';
|
|
81
|
+
const FONT_REGULAR =
|
|
82
|
+
'https://cdn.img.ly/packages/imgly/cesdk-js/latest/assets/extensions/ly.img.cesdk.fonts/fonts/Roboto/Roboto-Regular.ttf';
|
|
83
|
+
|
|
84
|
+
// Create headline text block with {{title}} variable
|
|
85
|
+
const headline = engine.block.create('text');
|
|
86
|
+
engine.block.replaceText(headline, '{{title}}');
|
|
87
|
+
|
|
88
|
+
// Set font with proper typeface for consistent rendering
|
|
89
|
+
engine.block.setFont(headline, FONT_BOLD, {
|
|
90
|
+
name: 'Roboto',
|
|
91
|
+
fonts: [{ uri: FONT_BOLD, subFamily: 'Bold', weight: 'bold' }]
|
|
92
|
+
});
|
|
93
|
+
engine.block.setFloat(headline, 'text/fontSize', 28);
|
|
94
|
+
engine.block.setTextColor(headline, { r: 1.0, g: 1.0, b: 1.0, a: 1.0 });
|
|
95
|
+
|
|
96
|
+
// Position and size the headline
|
|
97
|
+
engine.block.setWidthMode(headline, 'Absolute');
|
|
98
|
+
engine.block.setHeightMode(headline, 'Auto');
|
|
99
|
+
engine.block.setWidth(headline, CONTENT_WIDTH);
|
|
100
|
+
engine.block.setPositionX(headline, PADDING);
|
|
101
|
+
engine.block.setPositionY(headline, 50);
|
|
102
|
+
engine.block.setEnum(headline, 'text/horizontalAlignment', 'Center');
|
|
103
|
+
engine.block.appendChild(page, headline);
|
|
104
|
+
|
|
105
|
+
// Set default value for the title variable
|
|
106
|
+
engine.variable.setString('title', 'Summer Sale');
|
|
107
|
+
|
|
108
|
+
// Create subheadline text block with {{subtitle}} variable
|
|
109
|
+
const subheadline = engine.block.create('text');
|
|
110
|
+
engine.block.replaceText(subheadline, '{{subtitle}}');
|
|
111
|
+
|
|
112
|
+
engine.block.setFont(subheadline, FONT_REGULAR, {
|
|
113
|
+
name: 'Roboto',
|
|
114
|
+
fonts: [{ uri: FONT_REGULAR, subFamily: 'Regular', weight: 'normal' }]
|
|
115
|
+
});
|
|
116
|
+
engine.block.setFloat(subheadline, 'text/fontSize', 14);
|
|
117
|
+
engine.block.setTextColor(subheadline, { r: 0.9, g: 0.9, b: 0.95, a: 1.0 });
|
|
118
|
+
|
|
119
|
+
engine.block.setWidthMode(subheadline, 'Absolute');
|
|
120
|
+
engine.block.setHeightMode(subheadline, 'Auto');
|
|
121
|
+
engine.block.setWidth(subheadline, CONTENT_WIDTH);
|
|
122
|
+
engine.block.setPositionX(subheadline, PADDING);
|
|
123
|
+
engine.block.setPositionY(subheadline, 175);
|
|
124
|
+
engine.block.setEnum(subheadline, 'text/horizontalAlignment', 'Center');
|
|
125
|
+
engine.block.appendChild(page, subheadline);
|
|
126
|
+
|
|
127
|
+
engine.variable.setString('subtitle', 'Up to 50% off all items');
|
|
128
|
+
|
|
129
|
+
// Create image placeholder in the center of the card
|
|
130
|
+
const imageBlock = engine.block.create('graphic');
|
|
131
|
+
const imageShape = engine.block.createShape('rect');
|
|
132
|
+
engine.block.setShape(imageBlock, imageShape);
|
|
133
|
+
|
|
134
|
+
const imageFill = engine.block.createFill('image');
|
|
135
|
+
engine.block.setString(
|
|
136
|
+
imageFill,
|
|
137
|
+
'fill/image/imageFileURI',
|
|
138
|
+
'https://img.ly/static/ubq_samples/sample_1.jpg'
|
|
139
|
+
);
|
|
140
|
+
engine.block.setFill(imageBlock, imageFill);
|
|
141
|
+
|
|
142
|
+
engine.block.setWidth(imageBlock, CONTENT_WIDTH);
|
|
143
|
+
engine.block.setHeight(imageBlock, 420);
|
|
144
|
+
engine.block.setPositionX(imageBlock, PADDING);
|
|
145
|
+
engine.block.setPositionY(imageBlock, 295);
|
|
146
|
+
engine.block.appendChild(page, imageBlock);
|
|
147
|
+
|
|
148
|
+
// Enable placeholder behavior on the image fill
|
|
149
|
+
const fill = engine.block.getFill(imageBlock);
|
|
150
|
+
if (fill !== null && engine.block.supportsPlaceholderBehavior(fill)) {
|
|
151
|
+
engine.block.setPlaceholderBehaviorEnabled(fill, true);
|
|
152
|
+
}
|
|
153
|
+
engine.block.setPlaceholderEnabled(imageBlock, true);
|
|
154
|
+
|
|
155
|
+
// Enable visual controls for the placeholder
|
|
156
|
+
engine.block.setPlaceholderControlsOverlayEnabled(imageBlock, true);
|
|
157
|
+
engine.block.setPlaceholderControlsButtonEnabled(imageBlock, true);
|
|
158
|
+
|
|
159
|
+
// Create CTA (call-to-action) text block with {{cta}} variable
|
|
160
|
+
const cta = engine.block.create('text');
|
|
161
|
+
engine.block.replaceText(cta, '{{cta}}');
|
|
162
|
+
|
|
163
|
+
engine.block.setFont(cta, FONT_BOLD, {
|
|
164
|
+
name: 'Roboto',
|
|
165
|
+
fonts: [{ uri: FONT_BOLD, subFamily: 'Bold', weight: 'bold' }]
|
|
166
|
+
});
|
|
167
|
+
engine.block.setFloat(cta, 'text/fontSize', 8.4);
|
|
168
|
+
engine.block.setTextColor(cta, { r: 1.0, g: 1.0, b: 1.0, a: 1.0 });
|
|
169
|
+
|
|
170
|
+
engine.block.setWidthMode(cta, 'Absolute');
|
|
171
|
+
engine.block.setHeightMode(cta, 'Auto');
|
|
172
|
+
engine.block.setWidth(cta, CONTENT_WIDTH);
|
|
173
|
+
engine.block.setPositionX(cta, PADDING);
|
|
174
|
+
engine.block.setPositionY(cta, 765);
|
|
175
|
+
engine.block.setEnum(cta, 'text/horizontalAlignment', 'Center');
|
|
176
|
+
engine.block.appendChild(page, cta);
|
|
177
|
+
|
|
178
|
+
engine.variable.setString('cta', 'Learn More');
|
|
179
|
+
|
|
180
|
+
// Set global scope to 'Defer' for per-block control
|
|
181
|
+
engine.editor.setGlobalScope('layer/move', 'Defer');
|
|
182
|
+
engine.editor.setGlobalScope('layer/resize', 'Defer');
|
|
183
|
+
|
|
184
|
+
// Lock all text block positions but allow text editing
|
|
185
|
+
const textBlocks = [headline, subheadline, cta];
|
|
186
|
+
textBlocks.forEach((block) => {
|
|
187
|
+
engine.block.setScopeEnabled(block, 'layer/move', false);
|
|
188
|
+
engine.block.setScopeEnabled(block, 'layer/resize', false);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// Lock image position but allow fill replacement
|
|
192
|
+
engine.block.setScopeEnabled(imageBlock, 'layer/move', false);
|
|
193
|
+
engine.block.setScopeEnabled(imageBlock, 'layer/resize', false);
|
|
194
|
+
engine.block.setScopeEnabled(imageBlock, 'fill/change', true);
|
|
195
|
+
|
|
196
|
+
// Register role toggle component for switching between Creator and Adopter
|
|
197
|
+
cesdk.ui.registerComponent('role.toggle', ({ builder }) => {
|
|
198
|
+
const role = engine.editor.getRole();
|
|
199
|
+
builder.ButtonGroup('role-toggle', {
|
|
200
|
+
children: () => {
|
|
201
|
+
builder.Button('creator-btn', {
|
|
202
|
+
label: 'Creator',
|
|
203
|
+
isActive: role === 'Creator',
|
|
204
|
+
onClick: () => engine.editor.setRole('Creator')
|
|
205
|
+
});
|
|
206
|
+
builder.Button('adopter-btn', {
|
|
207
|
+
label: 'Adopter',
|
|
208
|
+
isActive: role === 'Adopter',
|
|
209
|
+
onClick: () => engine.editor.setRole('Adopter')
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// Register button component for saving template as string
|
|
216
|
+
cesdk.ui.registerComponent('save.string', ({ builder }) => {
|
|
217
|
+
builder.Button('save-string-btn', {
|
|
218
|
+
label: 'Save String',
|
|
219
|
+
icon: '@imgly/Download',
|
|
220
|
+
variant: 'regular',
|
|
221
|
+
onClick: async () => {
|
|
222
|
+
const templateString = await engine.scene.saveToString();
|
|
223
|
+
console.log(
|
|
224
|
+
'Template saved as string:',
|
|
225
|
+
templateString.substring(0, 100) + '...'
|
|
226
|
+
);
|
|
227
|
+
// Download the string as a file
|
|
228
|
+
const blob = new Blob([templateString], { type: 'text/plain' });
|
|
229
|
+
const url = URL.createObjectURL(blob);
|
|
230
|
+
const link = document.createElement('a');
|
|
231
|
+
link.href = url;
|
|
232
|
+
link.download = 'template.scene';
|
|
233
|
+
link.click();
|
|
234
|
+
URL.revokeObjectURL(url);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
// Register button component for saving template as archive
|
|
240
|
+
cesdk.ui.registerComponent('save.archive', ({ builder }) => {
|
|
241
|
+
builder.Button('save-archive-btn', {
|
|
242
|
+
label: 'Save Archive',
|
|
243
|
+
icon: '@imgly/Download',
|
|
244
|
+
variant: 'regular',
|
|
245
|
+
onClick: async () => {
|
|
246
|
+
const templateArchive = await engine.scene.saveToArchive();
|
|
247
|
+
console.log(
|
|
248
|
+
'Template saved as archive:',
|
|
249
|
+
templateArchive.size,
|
|
250
|
+
'bytes'
|
|
251
|
+
);
|
|
252
|
+
// Download the archive as a file
|
|
253
|
+
const url = URL.createObjectURL(templateArchive);
|
|
254
|
+
const link = document.createElement('a');
|
|
255
|
+
link.href = url;
|
|
256
|
+
link.download = 'template.zip';
|
|
257
|
+
link.click();
|
|
258
|
+
URL.revokeObjectURL(url);
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
// Add role toggle and save buttons to the navigation bar
|
|
264
|
+
cesdk.ui.insertOrderComponent(
|
|
265
|
+
{ in: 'ly.img.navigation.bar', position: 'end' },
|
|
266
|
+
'role.toggle'
|
|
267
|
+
);
|
|
268
|
+
cesdk.ui.insertOrderComponent(
|
|
269
|
+
{ in: 'ly.img.navigation.bar', position: 'end' },
|
|
270
|
+
'save.string'
|
|
271
|
+
);
|
|
272
|
+
cesdk.ui.insertOrderComponent(
|
|
273
|
+
{ in: 'ly.img.navigation.bar', position: 'end' },
|
|
274
|
+
'save.archive'
|
|
275
|
+
);
|
|
276
|
+
|
|
277
|
+
// Enable auto-fit zoom to continuously fit the page with padding
|
|
278
|
+
engine.scene.enableZoomAutoFit(page, 'Both', 40, 40, 40, 40);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export default Example;
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
This guide covers how to create a blank scene, add text blocks with variables, add image placeholders, apply editing constraints, and save the template.
|
|
286
|
+
|
|
287
|
+
## Initialize CE.SDK
|
|
288
|
+
|
|
289
|
+
We start by initializing CE.SDK and loading the asset sources. The asset source plugins (imported from `@cesdk/cesdk-js/plugins`) provide access to fonts, images, and other assets.
|
|
290
|
+
|
|
291
|
+
```typescript highlight=highlight-setup
|
|
292
|
+
const engine = cesdk.engine;
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## Create a Blank Scene
|
|
296
|
+
|
|
297
|
+
We create the foundation of our template with custom page dimensions. The `engine.scene.create()` method accepts page options to set width, height, and background color.
|
|
298
|
+
|
|
299
|
+
```typescript highlight=highlight-create-scene
|
|
300
|
+
// Template layout constants for a promotional card
|
|
301
|
+
const CANVAS_WIDTH = 800;
|
|
302
|
+
const CANVAS_HEIGHT = 1000;
|
|
303
|
+
const PADDING = 40;
|
|
304
|
+
const CONTENT_WIDTH = CANVAS_WIDTH - PADDING * 2;
|
|
305
|
+
|
|
306
|
+
// Create a blank scene with custom dimensions
|
|
307
|
+
engine.scene.create('Free', {
|
|
308
|
+
page: { size: { width: CANVAS_WIDTH, height: CANVAS_HEIGHT } }
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
// Set design unit to Pixel for precise coordinate mapping
|
|
312
|
+
engine.scene.setDesignUnit('Pixel');
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
The scene creation method accepts a layout mode and optional page configuration. When options are provided, the scene automatically includes a page with the specified dimensions.
|
|
316
|
+
|
|
317
|
+
## Set Page Background
|
|
318
|
+
|
|
319
|
+
We set a light background color to give the template a consistent base appearance.
|
|
320
|
+
|
|
321
|
+
```typescript highlight=highlight-add-background
|
|
322
|
+
// Set a gradient background for the template
|
|
323
|
+
const backgroundFill = engine.block.createFill('gradient/linear');
|
|
324
|
+
engine.block.setGradientColorStops(backgroundFill, 'fill/gradient/colors', [
|
|
325
|
+
{ color: { r: 0.4, g: 0.2, b: 0.6, a: 1.0 }, stop: 0 }, // Purple
|
|
326
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1.0 }, stop: 1 } // Blue
|
|
327
|
+
]);
|
|
328
|
+
engine.block.setFill(page, backgroundFill);
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
We create a color fill using `engine.block.createFill('color')`, set the color via `engine.block.setColor()` with the `fill/color/value` property, then assign the fill to the page using `engine.block.setFill()`.
|
|
332
|
+
|
|
333
|
+
## Add Text Blocks
|
|
334
|
+
|
|
335
|
+
Text blocks allow you to add styled text content. We create a headline that includes a variable token for dynamic content.
|
|
336
|
+
|
|
337
|
+
```typescript highlight=highlight-add-text
|
|
338
|
+
// Create headline text block with {{title}} variable
|
|
339
|
+
const headline = engine.block.create('text');
|
|
340
|
+
engine.block.replaceText(headline, '{{title}}');
|
|
341
|
+
|
|
342
|
+
// Set font with proper typeface for consistent rendering
|
|
343
|
+
engine.block.setFont(headline, FONT_BOLD, {
|
|
344
|
+
name: 'Roboto',
|
|
345
|
+
fonts: [{ uri: FONT_BOLD, subFamily: 'Bold', weight: 'bold' }]
|
|
346
|
+
});
|
|
347
|
+
engine.block.setFloat(headline, 'text/fontSize', 28);
|
|
348
|
+
engine.block.setTextColor(headline, { r: 1.0, g: 1.0, b: 1.0, a: 1.0 });
|
|
349
|
+
|
|
350
|
+
// Position and size the headline
|
|
351
|
+
engine.block.setWidthMode(headline, 'Absolute');
|
|
352
|
+
engine.block.setHeightMode(headline, 'Auto');
|
|
353
|
+
engine.block.setWidth(headline, CONTENT_WIDTH);
|
|
354
|
+
engine.block.setPositionX(headline, PADDING);
|
|
355
|
+
engine.block.setPositionY(headline, 50);
|
|
356
|
+
engine.block.setEnum(headline, 'text/horizontalAlignment', 'Center');
|
|
357
|
+
engine.block.appendChild(page, headline);
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
We create a text block using `engine.block.create('text')`, set its content with `engine.block.replaceText()`, configure dimensions and position, and append it to the page using `engine.block.appendChild()`.
|
|
361
|
+
|
|
362
|
+
## Add Text Variables
|
|
363
|
+
|
|
364
|
+
Text variables enable data-driven personalization. By using `{{variableName}}` tokens in text blocks, you can populate content programmatically.
|
|
365
|
+
|
|
366
|
+
```typescript highlight=highlight-add-variable
|
|
367
|
+
// Set default value for the title variable
|
|
368
|
+
engine.variable.setString('title', 'Summer Sale');
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
The `engine.variable.setString()` method sets the default value for the variable. When the template is used, this value can be changed to personalize the content.
|
|
372
|
+
|
|
373
|
+
## Add Graphic Blocks
|
|
374
|
+
|
|
375
|
+
Graphic blocks serve as containers for images. We create an image block that will become a placeholder for swappable media.
|
|
376
|
+
|
|
377
|
+
```typescript highlight=highlight-add-graphic
|
|
378
|
+
// Create image placeholder in the center of the card
|
|
379
|
+
const imageBlock = engine.block.create('graphic');
|
|
380
|
+
const imageShape = engine.block.createShape('rect');
|
|
381
|
+
engine.block.setShape(imageBlock, imageShape);
|
|
382
|
+
|
|
383
|
+
const imageFill = engine.block.createFill('image');
|
|
384
|
+
engine.block.setString(
|
|
385
|
+
imageFill,
|
|
386
|
+
'fill/image/imageFileURI',
|
|
387
|
+
'https://img.ly/static/ubq_samples/sample_1.jpg'
|
|
388
|
+
);
|
|
389
|
+
engine.block.setFill(imageBlock, imageFill);
|
|
390
|
+
|
|
391
|
+
engine.block.setWidth(imageBlock, CONTENT_WIDTH);
|
|
392
|
+
engine.block.setHeight(imageBlock, 420);
|
|
393
|
+
engine.block.setPositionX(imageBlock, PADDING);
|
|
394
|
+
engine.block.setPositionY(imageBlock, 295);
|
|
395
|
+
engine.block.appendChild(page, imageBlock);
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
We create a graphic block with `engine.block.create('graphic')`, assign a rectangle shape using `engine.block.createShape('rect')` and `engine.block.setShape()`, create an image fill with `engine.block.createFill('image')`, set the image URI via `engine.block.setString()`, and position it on the page.
|
|
399
|
+
|
|
400
|
+
## Configure Placeholders
|
|
401
|
+
|
|
402
|
+
Placeholders turn design blocks into drop-zones where users can swap content while maintaining layout integrity. We enable placeholder behavior on the image fill and configure visual controls.
|
|
403
|
+
|
|
404
|
+
```typescript highlight=highlight-configure-placeholder
|
|
405
|
+
// Enable placeholder behavior on the image fill
|
|
406
|
+
const fill = engine.block.getFill(imageBlock);
|
|
407
|
+
if (fill !== null && engine.block.supportsPlaceholderBehavior(fill)) {
|
|
408
|
+
engine.block.setPlaceholderBehaviorEnabled(fill, true);
|
|
409
|
+
}
|
|
410
|
+
engine.block.setPlaceholderEnabled(imageBlock, true);
|
|
411
|
+
|
|
412
|
+
// Enable visual controls for the placeholder
|
|
413
|
+
engine.block.setPlaceholderControlsOverlayEnabled(imageBlock, true);
|
|
414
|
+
engine.block.setPlaceholderControlsButtonEnabled(imageBlock, true);
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
Placeholder behavior is enabled on the fill (not the block) for graphic blocks. We also enable the overlay pattern and replace button for visual guidance.
|
|
418
|
+
|
|
419
|
+
## Apply Editing Constraints
|
|
420
|
+
|
|
421
|
+
Editing constraints protect template elements by restricting what users can modify. We use scopes to lock position and size while allowing content changes.
|
|
422
|
+
|
|
423
|
+
```typescript highlight=highlight-apply-constraints
|
|
424
|
+
// Set global scope to 'Defer' for per-block control
|
|
425
|
+
engine.editor.setGlobalScope('layer/move', 'Defer');
|
|
426
|
+
engine.editor.setGlobalScope('layer/resize', 'Defer');
|
|
427
|
+
|
|
428
|
+
// Lock all text block positions but allow text editing
|
|
429
|
+
const textBlocks = [headline, subheadline, cta];
|
|
430
|
+
textBlocks.forEach((block) => {
|
|
431
|
+
engine.block.setScopeEnabled(block, 'layer/move', false);
|
|
432
|
+
engine.block.setScopeEnabled(block, 'layer/resize', false);
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
// Lock image position but allow fill replacement
|
|
436
|
+
engine.block.setScopeEnabled(imageBlock, 'layer/move', false);
|
|
437
|
+
engine.block.setScopeEnabled(imageBlock, 'layer/resize', false);
|
|
438
|
+
engine.block.setScopeEnabled(imageBlock, 'fill/change', true);
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
Setting global scope to `'Defer'` enables per-block control. We then disable movement and resizing for both blocks while enabling fill changes for the image placeholder.
|
|
442
|
+
|
|
443
|
+
## Save the Template
|
|
444
|
+
|
|
445
|
+
We persist the template in two formats: a lightweight string for CDN-hosted assets and a self-contained archive with embedded assets.
|
|
446
|
+
|
|
447
|
+
```typescript highlight=highlight-save-template
|
|
448
|
+
// Register button component for saving template as string
|
|
449
|
+
cesdk.ui.registerComponent('save.string', ({ builder }) => {
|
|
450
|
+
builder.Button('save-string-btn', {
|
|
451
|
+
label: 'Save String',
|
|
452
|
+
icon: '@imgly/Download',
|
|
453
|
+
variant: 'regular',
|
|
454
|
+
onClick: async () => {
|
|
455
|
+
const templateString = await engine.scene.saveToString();
|
|
456
|
+
console.log(
|
|
457
|
+
'Template saved as string:',
|
|
458
|
+
templateString.substring(0, 100) + '...'
|
|
459
|
+
);
|
|
460
|
+
// Download the string as a file
|
|
461
|
+
const blob = new Blob([templateString], { type: 'text/plain' });
|
|
462
|
+
const url = URL.createObjectURL(blob);
|
|
463
|
+
const link = document.createElement('a');
|
|
464
|
+
link.href = url;
|
|
465
|
+
link.download = 'template.scene';
|
|
466
|
+
link.click();
|
|
467
|
+
URL.revokeObjectURL(url);
|
|
468
|
+
}
|
|
469
|
+
});
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
// Register button component for saving template as archive
|
|
473
|
+
cesdk.ui.registerComponent('save.archive', ({ builder }) => {
|
|
474
|
+
builder.Button('save-archive-btn', {
|
|
475
|
+
label: 'Save Archive',
|
|
476
|
+
icon: '@imgly/Download',
|
|
477
|
+
variant: 'regular',
|
|
478
|
+
onClick: async () => {
|
|
479
|
+
const templateArchive = await engine.scene.saveToArchive();
|
|
480
|
+
console.log('Template saved as archive:', templateArchive.size, 'bytes');
|
|
481
|
+
// Download the archive as a file
|
|
482
|
+
const url = URL.createObjectURL(templateArchive);
|
|
483
|
+
const link = document.createElement('a');
|
|
484
|
+
link.href = url;
|
|
485
|
+
link.download = 'template.zip';
|
|
486
|
+
link.click();
|
|
487
|
+
URL.revokeObjectURL(url);
|
|
488
|
+
}
|
|
489
|
+
});
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
// Add role toggle and save buttons to the navigation bar
|
|
493
|
+
cesdk.ui.insertOrderComponent(
|
|
494
|
+
{ in: 'ly.img.navigation.bar', position: 'end' },
|
|
495
|
+
'role.toggle'
|
|
496
|
+
);
|
|
497
|
+
cesdk.ui.insertOrderComponent(
|
|
498
|
+
{ in: 'ly.img.navigation.bar', position: 'end' },
|
|
499
|
+
'save.string'
|
|
500
|
+
);
|
|
501
|
+
cesdk.ui.insertOrderComponent(
|
|
502
|
+
{ in: 'ly.img.navigation.bar', position: 'end' },
|
|
503
|
+
'save.archive'
|
|
504
|
+
);
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
The `engine.scene.saveToString()` method creates a compact string format suitable for storage when assets are hosted externally. The `engine.scene.saveToArchive()` method creates a ZIP bundle containing all assets, ideal for offline use or distribution.
|
|
508
|
+
|
|
509
|
+
## Troubleshooting
|
|
510
|
+
|
|
511
|
+
- **Blocks not appearing**: Verify that `engine.block.appendChild()` attaches blocks to the page. Blocks must be part of the scene hierarchy to render.
|
|
512
|
+
- **Variables not resolving**: Verify the variable name in the text matches exactly, including curly braces syntax `{{variableName}}`.
|
|
513
|
+
- **Placeholder not interactive**: Ensure `engine.block.setPlaceholderEnabled()` is called on the block and the appropriate scope (`fill/change`) is enabled.
|
|
514
|
+
- **Constraints not enforced**: Verify `engine.editor.setGlobalScope()` is set to `'Defer'` before setting per-block scopes.
|
|
515
|
+
|
|
516
|
+
## API Reference
|
|
517
|
+
|
|
518
|
+
| Method | Description |
|
|
519
|
+
| ----------------------------------------------------- | ------------------------------------------------- |
|
|
520
|
+
| `engine.scene.create()` | Create a new design scene with optional page size |
|
|
521
|
+
| `engine.scene.setDesignUnit()` | Set the design unit (Pixel, Millimeter, Inch) |
|
|
522
|
+
| `engine.scene.saveToString()` | Save scene to string format |
|
|
523
|
+
| `engine.scene.saveToArchive()` | Save scene to ZIP archive |
|
|
524
|
+
| `engine.block.create()` | Create a design block (page, text, graphic) |
|
|
525
|
+
| `engine.block.appendChild()` | Append a child block to a parent |
|
|
526
|
+
| `engine.block.findByType()` | Find blocks by their type |
|
|
527
|
+
| `engine.block.createFill()` | Create a fill (color, image, etc.) |
|
|
528
|
+
| `engine.block.setFill()` | Assign a fill to a block |
|
|
529
|
+
| `engine.block.getFill()` | Get the fill of a block |
|
|
530
|
+
| `engine.block.createShape()` | Create a shape (rect, ellipse, etc.) |
|
|
531
|
+
| `engine.block.setShape()` | Assign a shape to a graphic block |
|
|
532
|
+
| `engine.block.setString()` | Set a string property on a block |
|
|
533
|
+
| `engine.block.setColor()` | Set a color property |
|
|
534
|
+
| `engine.block.replaceText()` | Set text content |
|
|
535
|
+
| `engine.block.setFont()` | Set font with typeface |
|
|
536
|
+
| `engine.block.setPlaceholderBehaviorEnabled()` | Enable placeholder behavior on fill |
|
|
537
|
+
| `engine.block.setPlaceholderEnabled()` | Enable placeholder interaction on block |
|
|
538
|
+
| `engine.block.setPlaceholderControlsOverlayEnabled()` | Enable overlay visual control |
|
|
539
|
+
| `engine.block.setPlaceholderControlsButtonEnabled()` | Enable button visual control |
|
|
540
|
+
| `engine.variable.setString()` | Set a text variable value |
|
|
541
|
+
| `engine.editor.setGlobalScope()` | Set global scope permission |
|
|
542
|
+
| `engine.block.setScopeEnabled()` | Enable/disable scope on a block |
|
|
543
|
+
|
|
544
|
+
## Next Steps
|
|
545
|
+
|
|
546
|
+
- [Placeholders](./create-templates/add-dynamic-content/placeholders.md) - Configure placeholder behavior and visual controls in depth
|
|
547
|
+
- [Text Variables](./create-templates/add-dynamic-content/text-variables.md) - Implement dynamic text personalization with variables
|
|
548
|
+
- [Set Editing Constraints](./create-templates/add-dynamic-content/set-editing-constraints.md) - Lock layout properties to protect design integrity
|
|
549
|
+
- [Add to Template Library](./create-templates/add-to-template-library.md) - Register templates in the asset library for users to discover
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
## More Resources
|
|
554
|
+
|
|
555
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
556
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
557
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
558
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|