@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,688 @@
|
|
|
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) > [Insert Dynamic Content](./create-templates/add-dynamic-content.md) > [Placeholders](./create-templates/add-dynamic-content/placeholders.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Placeholders turn design blocks into drop-zones that users can swap content into while maintaining full control over layout and styling.
|
|
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-dynamic-content-placeholders-browser)
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-templates-dynamic-content-placeholders-browser)
|
|
18
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-create-templates-dynamic-content-placeholders-browser/)
|
|
19
|
+
|
|
20
|
+
```typescript file=@cesdk_web_examples/guides-create-templates-dynamic-content-placeholders-browser/browser.ts reference-only
|
|
21
|
+
import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
|
|
22
|
+
|
|
23
|
+
import {
|
|
24
|
+
BlurAssetSource,
|
|
25
|
+
ColorPaletteAssetSource,
|
|
26
|
+
CropPresetsAssetSource,
|
|
27
|
+
DemoAssetSources,
|
|
28
|
+
EffectsAssetSource,
|
|
29
|
+
FiltersAssetSource,
|
|
30
|
+
PagePresetsAssetSource,
|
|
31
|
+
StickerAssetSource,
|
|
32
|
+
TextAssetSource,
|
|
33
|
+
TextComponentAssetSource,
|
|
34
|
+
TypefaceAssetSource,
|
|
35
|
+
UploadAssetSources,
|
|
36
|
+
VectorShapeAssetSource
|
|
37
|
+
} from '@cesdk/cesdk-js/plugins';
|
|
38
|
+
import { DesignEditorConfig } from './design-editor/plugin';
|
|
39
|
+
import packageJson from './package.json';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* CE.SDK Plugin: Dynamic Content Placeholders
|
|
43
|
+
*
|
|
44
|
+
* This example demonstrates three different placeholder configurations:
|
|
45
|
+
* 1. All placeholder controls enabled (all scopes + behavior + controls)
|
|
46
|
+
* 2. Fill properties only (fill scopes + behavior + controls)
|
|
47
|
+
* 3. No placeholder features (default state)
|
|
48
|
+
*/
|
|
49
|
+
class Example implements EditorPlugin {
|
|
50
|
+
name = packageJson.name;
|
|
51
|
+
|
|
52
|
+
version = packageJson.version;
|
|
53
|
+
|
|
54
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
55
|
+
if (!cesdk) {
|
|
56
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
await cesdk.addPlugin(new DesignEditorConfig());
|
|
60
|
+
|
|
61
|
+
// Add asset source plugins
|
|
62
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
63
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
64
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
65
|
+
await cesdk.addPlugin(
|
|
66
|
+
new UploadAssetSources({ include: ['ly.img.image.upload'] })
|
|
67
|
+
);
|
|
68
|
+
await cesdk.addPlugin(
|
|
69
|
+
new DemoAssetSources({
|
|
70
|
+
include: [
|
|
71
|
+
'ly.img.templates.blank.*',
|
|
72
|
+
'ly.img.templates.presentation.*',
|
|
73
|
+
'ly.img.templates.print.*',
|
|
74
|
+
'ly.img.templates.social.*',
|
|
75
|
+
'ly.img.image.*'
|
|
76
|
+
]
|
|
77
|
+
})
|
|
78
|
+
);
|
|
79
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
80
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
81
|
+
await cesdk.addPlugin(new PagePresetsAssetSource());
|
|
82
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
83
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
84
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
85
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
86
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
87
|
+
|
|
88
|
+
await cesdk.actions.run('scene.create', {
|
|
89
|
+
page: { width: 1200, height: 800, unit: 'Pixel' }
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
const engine = cesdk.engine;
|
|
93
|
+
engine.editor.setRole('Adopter');
|
|
94
|
+
|
|
95
|
+
// Get the page
|
|
96
|
+
const pages = engine.block.findByType('page');
|
|
97
|
+
const page = pages[0];
|
|
98
|
+
if (!page) {
|
|
99
|
+
throw new Error('No page found');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Set page dimensions for horizontal layout
|
|
103
|
+
const pageWidth = engine.block.getWidth(page);
|
|
104
|
+
const pageHeight = engine.block.getHeight(page);
|
|
105
|
+
|
|
106
|
+
// Set page background to light gray
|
|
107
|
+
const pageFill = engine.block.getFill(page);
|
|
108
|
+
engine.block.setColor(pageFill, 'fill/color/value', {
|
|
109
|
+
r: 0.95,
|
|
110
|
+
g: 0.95,
|
|
111
|
+
b: 0.95,
|
|
112
|
+
a: 1.0
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// Layout configuration for 3 blocks horizontally
|
|
116
|
+
const blockWidth = 300;
|
|
117
|
+
const blockHeight = 300;
|
|
118
|
+
const spacing = 50;
|
|
119
|
+
const startX = (pageWidth - blockWidth * 3 - spacing * 2) / 2;
|
|
120
|
+
const blockY = (pageHeight - blockHeight) / 2 + 40; // Offset for labels
|
|
121
|
+
const labelY = blockY - 50;
|
|
122
|
+
|
|
123
|
+
// Sample images
|
|
124
|
+
const imageUri1 = 'https://img.ly/static/ubq_samples/sample_1.jpg';
|
|
125
|
+
const imageUri2 = 'https://img.ly/static/ubq_samples/sample_2.jpg';
|
|
126
|
+
const imageUri3 = 'https://img.ly/static/ubq_samples/sample_3.jpg';
|
|
127
|
+
|
|
128
|
+
// Define ALL available scopes for reference
|
|
129
|
+
const allScopes: Array<
|
|
130
|
+
| 'text/edit'
|
|
131
|
+
| 'text/character'
|
|
132
|
+
| 'fill/change'
|
|
133
|
+
| 'fill/changeType'
|
|
134
|
+
| 'stroke/change'
|
|
135
|
+
| 'shape/change'
|
|
136
|
+
| 'layer/move'
|
|
137
|
+
| 'layer/resize'
|
|
138
|
+
| 'layer/rotate'
|
|
139
|
+
| 'layer/flip'
|
|
140
|
+
| 'layer/crop'
|
|
141
|
+
| 'layer/opacity'
|
|
142
|
+
| 'layer/blendMode'
|
|
143
|
+
| 'layer/visibility'
|
|
144
|
+
| 'layer/clipping'
|
|
145
|
+
| 'appearance/adjustments'
|
|
146
|
+
| 'appearance/filter'
|
|
147
|
+
| 'appearance/effect'
|
|
148
|
+
| 'appearance/blur'
|
|
149
|
+
| 'appearance/shadow'
|
|
150
|
+
| 'appearance/animation'
|
|
151
|
+
| 'lifecycle/destroy'
|
|
152
|
+
| 'lifecycle/duplicate'
|
|
153
|
+
| 'editor/add'
|
|
154
|
+
| 'editor/select'
|
|
155
|
+
> = [
|
|
156
|
+
'text/edit',
|
|
157
|
+
'text/character',
|
|
158
|
+
'fill/change',
|
|
159
|
+
'fill/changeType',
|
|
160
|
+
'stroke/change',
|
|
161
|
+
'shape/change',
|
|
162
|
+
'layer/move',
|
|
163
|
+
'layer/resize',
|
|
164
|
+
'layer/rotate',
|
|
165
|
+
'layer/flip',
|
|
166
|
+
'layer/crop',
|
|
167
|
+
'layer/opacity',
|
|
168
|
+
'layer/blendMode',
|
|
169
|
+
'layer/visibility',
|
|
170
|
+
'layer/clipping',
|
|
171
|
+
'appearance/adjustments',
|
|
172
|
+
'appearance/filter',
|
|
173
|
+
'appearance/effect',
|
|
174
|
+
'appearance/blur',
|
|
175
|
+
'appearance/shadow',
|
|
176
|
+
'appearance/animation',
|
|
177
|
+
'lifecycle/destroy',
|
|
178
|
+
'lifecycle/duplicate',
|
|
179
|
+
'editor/add',
|
|
180
|
+
'editor/select'
|
|
181
|
+
];
|
|
182
|
+
|
|
183
|
+
// Block 1: All Placeholder Controls Enabled
|
|
184
|
+
const block1 = await engine.block.addImage(imageUri1, {
|
|
185
|
+
size: {
|
|
186
|
+
width: blockWidth,
|
|
187
|
+
height: blockHeight
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
engine.block.appendChild(page, block1);
|
|
191
|
+
engine.block.setPositionX(block1, startX);
|
|
192
|
+
engine.block.setPositionY(block1, blockY);
|
|
193
|
+
|
|
194
|
+
// Step 1: Explicitly disable ALL scopes first
|
|
195
|
+
allScopes.forEach((scope) => {
|
|
196
|
+
engine.block.setScopeEnabled(block1, scope, false);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
// Step 2: Enable specific scopes for full placeholder functionality
|
|
200
|
+
// General/Layer options
|
|
201
|
+
engine.block.setScopeEnabled(block1, 'layer/opacity', true);
|
|
202
|
+
engine.block.setScopeEnabled(block1, 'layer/blendMode', true);
|
|
203
|
+
engine.block.setScopeEnabled(block1, 'lifecycle/duplicate', true);
|
|
204
|
+
engine.block.setScopeEnabled(block1, 'lifecycle/destroy', true);
|
|
205
|
+
|
|
206
|
+
// Arrange scopes
|
|
207
|
+
engine.block.setScopeEnabled(block1, 'layer/move', true);
|
|
208
|
+
engine.block.setScopeEnabled(block1, 'layer/resize', true);
|
|
209
|
+
engine.block.setScopeEnabled(block1, 'layer/rotate', true);
|
|
210
|
+
engine.block.setScopeEnabled(block1, 'layer/flip', true);
|
|
211
|
+
|
|
212
|
+
// Fill scopes (for image replacement and cropping)
|
|
213
|
+
engine.block.setScopeEnabled(block1, 'fill/change', true);
|
|
214
|
+
engine.block.setScopeEnabled(block1, 'fill/changeType', true);
|
|
215
|
+
engine.block.setScopeEnabled(block1, 'layer/crop', true);
|
|
216
|
+
|
|
217
|
+
// Appearance scopes
|
|
218
|
+
engine.block.setScopeEnabled(block1, 'appearance/adjustments', true);
|
|
219
|
+
engine.block.setScopeEnabled(block1, 'appearance/filter', true);
|
|
220
|
+
engine.block.setScopeEnabled(block1, 'appearance/effect', true);
|
|
221
|
+
engine.block.setScopeEnabled(block1, 'appearance/blur', true);
|
|
222
|
+
engine.block.setScopeEnabled(block1, 'appearance/shadow', true);
|
|
223
|
+
engine.block.setScopeEnabled(block1, 'appearance/animation', true);
|
|
224
|
+
engine.block.setScopeEnabled(block1, 'editor/select', true);
|
|
225
|
+
|
|
226
|
+
// Step 3: Enable placeholder behavior ("Act as a placeholder")
|
|
227
|
+
// This makes the block interactive in Adopter mode
|
|
228
|
+
engine.block.setPlaceholderEnabled(block1, true);
|
|
229
|
+
|
|
230
|
+
// Step 4: Check if block/fill supports placeholder features
|
|
231
|
+
const fill1 = engine.block.getFill(block1);
|
|
232
|
+
const supportsBehavior = engine.block.supportsPlaceholderBehavior(fill1);
|
|
233
|
+
const supportsControls = engine.block.supportsPlaceholderControls(block1);
|
|
234
|
+
|
|
235
|
+
// Enable placeholder behavior on the fill (for graphic blocks)
|
|
236
|
+
if (supportsBehavior) {
|
|
237
|
+
engine.block.setPlaceholderBehaviorEnabled(fill1, true);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Enable placeholder overlay pattern
|
|
241
|
+
if (supportsControls) {
|
|
242
|
+
engine.block.setPlaceholderControlsOverlayEnabled(block1, true);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Enable placeholder button
|
|
246
|
+
if (supportsControls) {
|
|
247
|
+
engine.block.setPlaceholderControlsButtonEnabled(block1, true);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Complete "Act as Placeholder" setup
|
|
251
|
+
const fillForConfig = engine.block.getFill(block1);
|
|
252
|
+
if (engine.block.supportsPlaceholderBehavior(fillForConfig)) {
|
|
253
|
+
engine.block.setPlaceholderBehaviorEnabled(fillForConfig, true);
|
|
254
|
+
}
|
|
255
|
+
if (supportsControls) {
|
|
256
|
+
engine.block.setPlaceholderControlsOverlayEnabled(block1, true);
|
|
257
|
+
engine.block.setPlaceholderControlsButtonEnabled(block1, true);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Block 2: Fill Properties Only
|
|
261
|
+
const block2 = await engine.block.addImage(imageUri2, {
|
|
262
|
+
size: {
|
|
263
|
+
width: blockWidth,
|
|
264
|
+
height: blockHeight
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
engine.block.appendChild(page, block2);
|
|
268
|
+
engine.block.setPositionX(block2, startX + blockWidth + spacing);
|
|
269
|
+
engine.block.setPositionY(block2, blockY);
|
|
270
|
+
|
|
271
|
+
// Batch operation: Apply settings to multiple blocks
|
|
272
|
+
const graphicBlocks = [block1, block2];
|
|
273
|
+
graphicBlocks.forEach((block) => {
|
|
274
|
+
// Enable placeholder for each block
|
|
275
|
+
engine.block.setPlaceholderEnabled(block, true);
|
|
276
|
+
|
|
277
|
+
const fill = engine.block.getFill(block);
|
|
278
|
+
if (engine.block.supportsPlaceholderBehavior(fill)) {
|
|
279
|
+
engine.block.setPlaceholderBehaviorEnabled(fill, true);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
// Step 1: Explicitly disable ALL scopes first
|
|
284
|
+
allScopes.forEach((scope) => {
|
|
285
|
+
engine.block.setScopeEnabled(block2, scope, false);
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
// Step 2: Enable ONLY fill-related scopes
|
|
289
|
+
engine.block.setScopeEnabled(block2, 'fill/change', true);
|
|
290
|
+
engine.block.setScopeEnabled(block2, 'fill/changeType', true);
|
|
291
|
+
engine.block.setScopeEnabled(block2, 'layer/crop', true);
|
|
292
|
+
engine.block.setScopeEnabled(block2, 'editor/select', true);
|
|
293
|
+
|
|
294
|
+
// Step 3: Enable placeholder behavior ("Act as a placeholder")
|
|
295
|
+
engine.block.setPlaceholderEnabled(block2, true);
|
|
296
|
+
|
|
297
|
+
// Step 4: Enable fill-based placeholder behavior and visual controls
|
|
298
|
+
const fill2 = engine.block.getFill(block2);
|
|
299
|
+
if (engine.block.supportsPlaceholderBehavior(fill2)) {
|
|
300
|
+
engine.block.setPlaceholderBehaviorEnabled(fill2, true);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (engine.block.supportsPlaceholderControls(block2)) {
|
|
304
|
+
engine.block.setPlaceholderControlsOverlayEnabled(block2, true);
|
|
305
|
+
engine.block.setPlaceholderControlsButtonEnabled(block2, true);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// Block 3: No Placeholder Features (Default State)
|
|
309
|
+
const block3 = await engine.block.addImage(imageUri3, {
|
|
310
|
+
size: {
|
|
311
|
+
width: blockWidth,
|
|
312
|
+
height: blockHeight
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
engine.block.appendChild(page, block3);
|
|
316
|
+
engine.block.setPositionX(block3, startX + (blockWidth + spacing) * 2);
|
|
317
|
+
engine.block.setPositionY(block3, blockY);
|
|
318
|
+
|
|
319
|
+
// Explicitly disable ALL scopes to ensure default state
|
|
320
|
+
allScopes.forEach((scope) => {
|
|
321
|
+
engine.block.setScopeEnabled(block3, scope, false);
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
// No placeholder behavior enabled - this block remains non-interactive
|
|
325
|
+
|
|
326
|
+
// Add descriptive labels above each block
|
|
327
|
+
const labelConfig = {
|
|
328
|
+
height: 40,
|
|
329
|
+
fontSize: 34,
|
|
330
|
+
fontUri:
|
|
331
|
+
'https://cdn.img.ly/packages/imgly/cesdk-js/latest/assets/extensions/ly.img.cesdk.fonts/fonts/Roboto/Roboto-Bold.ttf',
|
|
332
|
+
fontFamily: 'Roboto'
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
// Label for Block 1
|
|
336
|
+
const label1 = engine.block.create('text');
|
|
337
|
+
engine.block.appendChild(page, label1);
|
|
338
|
+
engine.block.setPositionX(label1, startX);
|
|
339
|
+
engine.block.setPositionY(label1, labelY);
|
|
340
|
+
engine.block.setWidth(label1, blockWidth);
|
|
341
|
+
engine.block.setHeight(label1, labelConfig.height);
|
|
342
|
+
engine.block.replaceText(label1, 'All Controls');
|
|
343
|
+
engine.block.setTextColor(label1, {
|
|
344
|
+
r: 0.2,
|
|
345
|
+
g: 0.2,
|
|
346
|
+
b: 0.2,
|
|
347
|
+
a: 1.0
|
|
348
|
+
});
|
|
349
|
+
engine.block.setFont(label1, labelConfig.fontUri, {
|
|
350
|
+
name: labelConfig.fontFamily,
|
|
351
|
+
fonts: [
|
|
352
|
+
{
|
|
353
|
+
uri: labelConfig.fontUri,
|
|
354
|
+
subFamily: 'Bold'
|
|
355
|
+
}
|
|
356
|
+
]
|
|
357
|
+
});
|
|
358
|
+
engine.block.setFloat(label1, 'text/fontSize', labelConfig.fontSize);
|
|
359
|
+
engine.block.setEnum(label1, 'text/horizontalAlignment', 'Center');
|
|
360
|
+
|
|
361
|
+
// Label for Block 2
|
|
362
|
+
const label2 = engine.block.create('text');
|
|
363
|
+
engine.block.appendChild(page, label2);
|
|
364
|
+
engine.block.setPositionX(label2, startX + blockWidth + spacing);
|
|
365
|
+
engine.block.setPositionY(label2, labelY);
|
|
366
|
+
engine.block.setWidth(label2, blockWidth);
|
|
367
|
+
engine.block.setHeight(label2, labelConfig.height);
|
|
368
|
+
engine.block.replaceText(label2, 'Fill Only');
|
|
369
|
+
engine.block.setTextColor(label2, {
|
|
370
|
+
r: 0.2,
|
|
371
|
+
g: 0.2,
|
|
372
|
+
b: 0.2,
|
|
373
|
+
a: 1.0
|
|
374
|
+
});
|
|
375
|
+
engine.block.setFont(label2, labelConfig.fontUri, {
|
|
376
|
+
name: labelConfig.fontFamily,
|
|
377
|
+
fonts: [
|
|
378
|
+
{
|
|
379
|
+
uri: labelConfig.fontUri,
|
|
380
|
+
subFamily: 'Bold'
|
|
381
|
+
}
|
|
382
|
+
]
|
|
383
|
+
});
|
|
384
|
+
engine.block.setFloat(label2, 'text/fontSize', labelConfig.fontSize);
|
|
385
|
+
engine.block.setEnum(label2, 'text/horizontalAlignment', 'Center');
|
|
386
|
+
|
|
387
|
+
// Label for Block 3
|
|
388
|
+
const label3 = engine.block.create('text');
|
|
389
|
+
engine.block.appendChild(page, label3);
|
|
390
|
+
engine.block.setPositionX(label3, startX + (blockWidth + spacing) * 2);
|
|
391
|
+
engine.block.setPositionY(label3, labelY);
|
|
392
|
+
engine.block.setWidth(label3, blockWidth);
|
|
393
|
+
engine.block.setHeight(label3, labelConfig.height);
|
|
394
|
+
engine.block.replaceText(label3, 'Disabled');
|
|
395
|
+
engine.block.setTextColor(label3, {
|
|
396
|
+
r: 0.2,
|
|
397
|
+
g: 0.2,
|
|
398
|
+
b: 0.2,
|
|
399
|
+
a: 1.0
|
|
400
|
+
});
|
|
401
|
+
engine.block.setFont(label3, labelConfig.fontUri, {
|
|
402
|
+
name: labelConfig.fontFamily,
|
|
403
|
+
fonts: [
|
|
404
|
+
{
|
|
405
|
+
uri: labelConfig.fontUri,
|
|
406
|
+
subFamily: 'Bold'
|
|
407
|
+
}
|
|
408
|
+
]
|
|
409
|
+
});
|
|
410
|
+
engine.block.setFloat(label3, 'text/fontSize', labelConfig.fontSize);
|
|
411
|
+
engine.block.setEnum(label3, 'text/horizontalAlignment', 'Center');
|
|
412
|
+
|
|
413
|
+
// Verify configurations
|
|
414
|
+
// eslint-disable-next-line no-console
|
|
415
|
+
console.log('Block 1 - All Controls:');
|
|
416
|
+
// eslint-disable-next-line no-console
|
|
417
|
+
console.log(
|
|
418
|
+
' Placeholder enabled:',
|
|
419
|
+
engine.block.isPlaceholderEnabled(block1)
|
|
420
|
+
);
|
|
421
|
+
// eslint-disable-next-line no-console
|
|
422
|
+
console.log(' Scopes enabled:');
|
|
423
|
+
// eslint-disable-next-line no-console
|
|
424
|
+
console.log(
|
|
425
|
+
' - layer/move:',
|
|
426
|
+
engine.block.isScopeEnabled(block1, 'layer/move')
|
|
427
|
+
);
|
|
428
|
+
// eslint-disable-next-line no-console
|
|
429
|
+
console.log(
|
|
430
|
+
' - layer/resize:',
|
|
431
|
+
engine.block.isScopeEnabled(block1, 'layer/resize')
|
|
432
|
+
);
|
|
433
|
+
// eslint-disable-next-line no-console
|
|
434
|
+
console.log(
|
|
435
|
+
' - fill/change:',
|
|
436
|
+
engine.block.isScopeEnabled(block1, 'fill/change')
|
|
437
|
+
);
|
|
438
|
+
// eslint-disable-next-line no-console
|
|
439
|
+
console.log(
|
|
440
|
+
' - layer/crop:',
|
|
441
|
+
engine.block.isScopeEnabled(block1, 'layer/crop')
|
|
442
|
+
);
|
|
443
|
+
// eslint-disable-next-line no-console
|
|
444
|
+
console.log(
|
|
445
|
+
' - appearance/adjustments:',
|
|
446
|
+
engine.block.isScopeEnabled(block1, 'appearance/adjustments')
|
|
447
|
+
);
|
|
448
|
+
|
|
449
|
+
// eslint-disable-next-line no-console
|
|
450
|
+
console.log('\nBlock 2 - Fill Only:');
|
|
451
|
+
// eslint-disable-next-line no-console
|
|
452
|
+
console.log(
|
|
453
|
+
' Placeholder enabled:',
|
|
454
|
+
engine.block.isPlaceholderEnabled(block2)
|
|
455
|
+
);
|
|
456
|
+
// eslint-disable-next-line no-console
|
|
457
|
+
console.log(' Scopes enabled:');
|
|
458
|
+
// eslint-disable-next-line no-console
|
|
459
|
+
console.log(
|
|
460
|
+
' - layer/move:',
|
|
461
|
+
engine.block.isScopeEnabled(block2, 'layer/move')
|
|
462
|
+
);
|
|
463
|
+
// eslint-disable-next-line no-console
|
|
464
|
+
console.log(
|
|
465
|
+
' - fill/change:',
|
|
466
|
+
engine.block.isScopeEnabled(block2, 'fill/change')
|
|
467
|
+
);
|
|
468
|
+
// eslint-disable-next-line no-console
|
|
469
|
+
console.log(
|
|
470
|
+
' - fill/changeType:',
|
|
471
|
+
engine.block.isScopeEnabled(block2, 'fill/changeType')
|
|
472
|
+
);
|
|
473
|
+
// eslint-disable-next-line no-console
|
|
474
|
+
console.log(
|
|
475
|
+
' - layer/crop:',
|
|
476
|
+
engine.block.isScopeEnabled(block2, 'layer/crop')
|
|
477
|
+
);
|
|
478
|
+
|
|
479
|
+
// eslint-disable-next-line no-console
|
|
480
|
+
console.log('\nBlock 3 - Disabled:');
|
|
481
|
+
// eslint-disable-next-line no-console
|
|
482
|
+
console.log(
|
|
483
|
+
' Placeholder enabled:',
|
|
484
|
+
engine.block.isPlaceholderEnabled(block3)
|
|
485
|
+
);
|
|
486
|
+
// eslint-disable-next-line no-console
|
|
487
|
+
console.log(' Scopes enabled:');
|
|
488
|
+
// eslint-disable-next-line no-console
|
|
489
|
+
console.log(
|
|
490
|
+
' - layer/move:',
|
|
491
|
+
engine.block.isScopeEnabled(block3, 'layer/move')
|
|
492
|
+
);
|
|
493
|
+
// eslint-disable-next-line no-console
|
|
494
|
+
console.log(
|
|
495
|
+
' - fill/change:',
|
|
496
|
+
engine.block.isScopeEnabled(block3, 'fill/change')
|
|
497
|
+
);
|
|
498
|
+
|
|
499
|
+
// eslint-disable-next-line no-console
|
|
500
|
+
console.log('\nPlaceholder configurations initialized successfully');
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
export default Example;
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
This guide covers placeholder fundamentals, checking support, enabling behavior, and configuring visual controls for graphic and text blocks.
|
|
508
|
+
|
|
509
|
+
## Placeholder Fundamentals
|
|
510
|
+
|
|
511
|
+
Placeholders convert design blocks into interactive drop-zones where users can swap content while maintaining layout and styling control.
|
|
512
|
+
|
|
513
|
+
### Two Distinct Features
|
|
514
|
+
|
|
515
|
+
**Placeholder behavior** enables drag-and-drop replacement and exposes scope checks for content validation.
|
|
516
|
+
|
|
517
|
+
**Placeholder controls** provide visual affordances: an overlay pattern and a "Replace" button for guided interaction.
|
|
518
|
+
|
|
519
|
+
### Block-Level vs Fill-Level Behavior
|
|
520
|
+
|
|
521
|
+
The key distinction in placeholder implementation depends on block type:
|
|
522
|
+
|
|
523
|
+
**For graphic blocks** (images/videos): Placeholder behavior is enabled on the **fill**, while controls are enabled on the **block**. This pattern reflects how graphic blocks contain fills that can be replaced.
|
|
524
|
+
|
|
525
|
+
**For text blocks**: Placeholder behavior and controls are both enabled directly on the **block**.
|
|
526
|
+
|
|
527
|
+
We can check support with `supportsPlaceholderBehavior()` for both blocks and fills, and `supportsPlaceholderControls()` for blocks.
|
|
528
|
+
|
|
529
|
+
## Checking Placeholder Support
|
|
530
|
+
|
|
531
|
+
Before enabling placeholder features, check if a block supports them:
|
|
532
|
+
|
|
533
|
+
```typescript highlight-check-support
|
|
534
|
+
// Step 4: Check if block/fill supports placeholder features
|
|
535
|
+
const fill1 = engine.block.getFill(block1);
|
|
536
|
+
const supportsBehavior = engine.block.supportsPlaceholderBehavior(fill1);
|
|
537
|
+
const supportsControls = engine.block.supportsPlaceholderControls(block1);
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
The `supportsPlaceholderBehavior()` method indicates whether a block can become a drop-zone. The `supportsPlaceholderControls()` method shows if visual controls (overlay and button) are available.
|
|
541
|
+
|
|
542
|
+
## Enabling Placeholder Behavior
|
|
543
|
+
|
|
544
|
+
To convert a block into a placeholder drop-zone, enable placeholder behavior. The approach differs based on block type.
|
|
545
|
+
|
|
546
|
+
### For Graphic Blocks (Images/Videos)
|
|
547
|
+
|
|
548
|
+
For graphic blocks, placeholder behavior must be enabled on the **fill**, not the block itself:
|
|
549
|
+
|
|
550
|
+
```typescript highlight-enable-behavior
|
|
551
|
+
// Enable placeholder behavior on the fill (for graphic blocks)
|
|
552
|
+
if (supportsBehavior) {
|
|
553
|
+
engine.block.setPlaceholderBehaviorEnabled(fill1, true);
|
|
554
|
+
}
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
This pattern is critical: `setPlaceholderBehaviorEnabled()` is called on the fill obtained from `block.getFill()`. This reflects the underlying architecture where graphic blocks contain replaceable fills.
|
|
558
|
+
|
|
559
|
+
### For Text Blocks
|
|
560
|
+
|
|
561
|
+
For text blocks, placeholder behavior is enabled directly on the block, as text blocks don't use fills in the same way.
|
|
562
|
+
|
|
563
|
+
We can verify placeholder behavior state with `isPlaceholderBehaviorEnabled()` on the appropriate target (fill for graphics, block for text).
|
|
564
|
+
|
|
565
|
+
## Enabling Adopter Mode Interaction
|
|
566
|
+
|
|
567
|
+
Placeholder behavior alone isn't enough - blocks must also be enabled for interaction in Adopter mode:
|
|
568
|
+
|
|
569
|
+
```typescript highlight-enable-adopter-mode
|
|
570
|
+
// Step 3: Enable placeholder behavior ("Act as a placeholder")
|
|
571
|
+
// This makes the block interactive in Adopter mode
|
|
572
|
+
engine.block.setPlaceholderEnabled(block1, true);
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
The `setPlaceholderEnabled()` method controls whether the placeholder is interactive for users in Adopter role. CE.SDK distinguishes Creator (full access) and Adopter (replace-only) roles.
|
|
576
|
+
|
|
577
|
+
### Automatic Management
|
|
578
|
+
|
|
579
|
+
In practice, `setPlaceholderEnabled()` is typically managed automatically by the editor: when you enable relevant scopes (like `fill/change` for graphics or `text/edit` for text), the placeholder interaction is automatically enabled. When all scopes are disabled, placeholder interaction is automatically disabled. This automatic behavior simplifies template creation workflows.
|
|
580
|
+
|
|
581
|
+
## Configuring Visual Feedback
|
|
582
|
+
|
|
583
|
+
Placeholders can display visual indicators to guide users through the replacement workflow.
|
|
584
|
+
|
|
585
|
+
### Combined Setup: The "Act as Placeholder" Pattern
|
|
586
|
+
|
|
587
|
+
In the CE.SDK UI, the "Act as Placeholder" checkbox enables placeholder behavior and both visual controls simultaneously. This combined pattern is the recommended approach:
|
|
588
|
+
|
|
589
|
+
```typescript highlight-full-configuration
|
|
590
|
+
// Complete "Act as Placeholder" setup
|
|
591
|
+
const fillForConfig = engine.block.getFill(block1);
|
|
592
|
+
if (engine.block.supportsPlaceholderBehavior(fillForConfig)) {
|
|
593
|
+
engine.block.setPlaceholderBehaviorEnabled(fillForConfig, true);
|
|
594
|
+
}
|
|
595
|
+
if (supportsControls) {
|
|
596
|
+
engine.block.setPlaceholderControlsOverlayEnabled(block1, true);
|
|
597
|
+
engine.block.setPlaceholderControlsButtonEnabled(block1, true);
|
|
598
|
+
}
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
This pattern ensures placeholder behavior is enabled on the appropriate target (fill for graphics, block for text) along with both visual controls on the block.
|
|
602
|
+
|
|
603
|
+
### Individual Control Options
|
|
604
|
+
|
|
605
|
+
Visual controls can also be managed independently if needed:
|
|
606
|
+
|
|
607
|
+
**Overlay Pattern** - The overlay shows a dotted surface indicating a drop-zone:
|
|
608
|
+
|
|
609
|
+
```typescript highlight-enable-overlay
|
|
610
|
+
// Enable placeholder overlay pattern
|
|
611
|
+
if (supportsControls) {
|
|
612
|
+
engine.block.setPlaceholderControlsOverlayEnabled(block1, true);
|
|
613
|
+
}
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
**Replace Button** - The button provides a single-tap entry point for touch devices:
|
|
617
|
+
|
|
618
|
+
```typescript highlight-enable-button
|
|
619
|
+
// Enable placeholder button
|
|
620
|
+
if (supportsControls) {
|
|
621
|
+
engine.block.setPlaceholderControlsButtonEnabled(block1, true);
|
|
622
|
+
}
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
Individual control is useful when you want specific visual feedback without the full placeholder workflow.
|
|
626
|
+
|
|
627
|
+
## Scope Requirements and Dependencies
|
|
628
|
+
|
|
629
|
+
Placeholders depend on specific scopes being enabled to function correctly. Understanding these dependencies prevents common configuration errors.
|
|
630
|
+
|
|
631
|
+
For graphic blocks (images/videos), the `fill/change` scope must be enabled before placeholder behavior will work. When you disable `fill/change`, the editor automatically disables placeholder behavior and controls to maintain consistency.
|
|
632
|
+
|
|
633
|
+
For text blocks, the `text/edit` scope must be enabled before placeholder behavior can function.
|
|
634
|
+
|
|
635
|
+
**Optional related scopes** that enhance placeholder functionality:
|
|
636
|
+
|
|
637
|
+
- `fill/changeType` - Allows changing between image, video, and solid color fills
|
|
638
|
+
- `layer/crop` - Enables cropping replacement images
|
|
639
|
+
- `text/character` - Allows font and character formatting for text placeholders
|
|
640
|
+
|
|
641
|
+
## Working with Multiple Placeholders
|
|
642
|
+
|
|
643
|
+
When creating templates with multiple placeholders, apply settings systematically:
|
|
644
|
+
|
|
645
|
+
```typescript highlight-batch-operation
|
|
646
|
+
// Batch operation: Apply settings to multiple blocks
|
|
647
|
+
const graphicBlocks = [block1, block2];
|
|
648
|
+
graphicBlocks.forEach((block) => {
|
|
649
|
+
// Enable placeholder for each block
|
|
650
|
+
engine.block.setPlaceholderEnabled(block, true);
|
|
651
|
+
|
|
652
|
+
const fill = engine.block.getFill(block);
|
|
653
|
+
if (engine.block.supportsPlaceholderBehavior(fill)) {
|
|
654
|
+
engine.block.setPlaceholderBehaviorEnabled(fill, true);
|
|
655
|
+
}
|
|
656
|
+
});
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
This pattern works well for collage templates, product showcases, or any layout requiring multiple content slots.
|
|
660
|
+
|
|
661
|
+
## API Reference
|
|
662
|
+
|
|
663
|
+
| Method | Description |
|
|
664
|
+
| ----------------------------------------------------- | ----------------------------------------------------------- |
|
|
665
|
+
| `engine.block.supportsPlaceholderBehavior()` | Checks whether the block supports placeholder behavior |
|
|
666
|
+
| `engine.block.setPlaceholderBehaviorEnabled()` | Enables or disables placeholder behavior for a block |
|
|
667
|
+
| `engine.block.isPlaceholderBehaviorEnabled()` | Queries whether placeholder behavior is enabled |
|
|
668
|
+
| `engine.block.setPlaceholderEnabled()` | Enables or disables placeholder interaction in Adopter mode |
|
|
669
|
+
| `engine.block.isPlaceholderEnabled()` | Queries whether placeholder interaction is enabled |
|
|
670
|
+
| `engine.block.supportsPlaceholderControls()` | Checks whether the block supports placeholder controls |
|
|
671
|
+
| `engine.block.setPlaceholderControlsOverlayEnabled()` | Enables or disables the placeholder overlay pattern |
|
|
672
|
+
| `engine.block.isPlaceholderControlsOverlayEnabled()` | Queries whether the overlay pattern is shown |
|
|
673
|
+
| `engine.block.setPlaceholderControlsButtonEnabled()` | Enables or disables the placeholder button |
|
|
674
|
+
| `engine.block.isPlaceholderControlsButtonEnabled()` | Queries whether the placeholder button is shown |
|
|
675
|
+
|
|
676
|
+
## Next Steps
|
|
677
|
+
|
|
678
|
+
- [Lock the Template](./create-templates/lock.md) - Restrict editing access to specific elements or properties to enforce design rules
|
|
679
|
+
- [Text Variables](./create-templates/add-dynamic-content/text-variables.md) - Define dynamic text elements that can be populated with custom values
|
|
680
|
+
|
|
681
|
+
---
|
|
682
|
+
|
|
683
|
+
## More Resources
|
|
684
|
+
|
|
685
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
686
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
687
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
688
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|