@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,834 @@
|
|
|
1
|
+
> This is one page of the CE.SDK Vanilla JS/TS documentation. For a complete overview, see the [Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).
|
|
2
|
+
|
|
3
|
+
**Navigation:** [Guides](./guides.md) > [Create and Edit Text](./text.md) > [Text Designs](./text/text-designs.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Create and customize text designs (text components) that appear in CE.SDK's asset library for users to insert into their designs.
|
|
8
|
+
|
|
9
|
+

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