@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,750 @@
|
|
|
1
|
+
> This is one page of the CE.SDK Vanilla JS/TS documentation. For a complete overview, see the [Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).
|
|
2
|
+
|
|
3
|
+
**Navigation:** [Concepts](./concepts.md) > [Blocks](./concepts/blocks.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Work with blocks—the fundamental building units for all visual elements in
|
|
8
|
+
CE.SDK designs.
|
|
9
|
+
|
|
10
|
+

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