@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,1311 @@
|
|
|
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) > [Fills](./fills.md) > [Gradient](./filters-and-effects/gradients.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Create smooth color transitions in shapes, text, and design blocks using
|
|
8
|
+
CE.SDK's gradient fill system with support for linear, radial, and conical
|
|
9
|
+
gradients.
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
> **Reading time:** 20 minutes
|
|
14
|
+
>
|
|
15
|
+
> **Resources:**
|
|
16
|
+
>
|
|
17
|
+
> - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
|
|
18
|
+
> - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-fills-gradient-browser)
|
|
19
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-fills-gradient-browser)
|
|
20
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-fills-gradient-browser/)
|
|
21
|
+
|
|
22
|
+
Gradient fills are one of the fundamental fill types in CE.SDK, allowing you to paint design blocks with smooth color transitions. Unlike solid color fills that apply a uniform color or image fills that display photo content, gradient fills create dynamic visual effects with depth and visual interest. The gradient fill system supports three types: linear gradients that transition along a straight line, radial gradients that emanate from a center point, and conical gradients that rotate around a center point like a color wheel.
|
|
23
|
+
|
|
24
|
+
```typescript file=@cesdk_web_examples/guides-fills-gradient-browser/browser.ts reference-only
|
|
25
|
+
import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
|
|
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
|
+
import { calculateGridLayout } from './utils';
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* CE.SDK Plugin: Gradient Fills Guide
|
|
47
|
+
*
|
|
48
|
+
* This example demonstrates:
|
|
49
|
+
* - Creating linear, radial, and conical gradient fills
|
|
50
|
+
* - Configuring gradient color stops
|
|
51
|
+
* - Positioning gradients
|
|
52
|
+
* - Using different color spaces in gradients
|
|
53
|
+
* - Advanced gradient techniques
|
|
54
|
+
*/
|
|
55
|
+
class Example implements EditorPlugin {
|
|
56
|
+
name = packageJson.name;
|
|
57
|
+
|
|
58
|
+
version = packageJson.version;
|
|
59
|
+
|
|
60
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
61
|
+
if (!cesdk) {
|
|
62
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
await cesdk.addPlugin(new DesignEditorConfig());
|
|
66
|
+
// Add asset source plugins
|
|
67
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
68
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
69
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
70
|
+
await cesdk.addPlugin(
|
|
71
|
+
new UploadAssetSources({ include: ['ly.img.image.upload'] })
|
|
72
|
+
);
|
|
73
|
+
await cesdk.addPlugin(
|
|
74
|
+
new DemoAssetSources({
|
|
75
|
+
include: [
|
|
76
|
+
'ly.img.templates.blank.*',
|
|
77
|
+
'ly.img.templates.presentation.*',
|
|
78
|
+
'ly.img.templates.print.*',
|
|
79
|
+
'ly.img.templates.social.*',
|
|
80
|
+
'ly.img.image.*'
|
|
81
|
+
]
|
|
82
|
+
})
|
|
83
|
+
);
|
|
84
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
85
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
86
|
+
await cesdk.addPlugin(new PagePresetsAssetSource());
|
|
87
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
88
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
89
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
90
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
91
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
92
|
+
|
|
93
|
+
// Fill features are enabled by default in CE.SDK
|
|
94
|
+
// You can check and control fill feature availability:
|
|
95
|
+
const engine = cesdk.engine;
|
|
96
|
+
const isFillEnabled = cesdk.feature.isEnabled('ly.img.fill', { engine });
|
|
97
|
+
console.log('Fill feature enabled:', isFillEnabled);
|
|
98
|
+
|
|
99
|
+
// Create a design scene using CE.SDK cesdk method
|
|
100
|
+
await cesdk.actions.run('scene.create', {
|
|
101
|
+
page: { width: 1200, height: 900, unit: 'Pixel' }
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Get the page
|
|
105
|
+
const pages = engine.block.findByType('page');
|
|
106
|
+
const page = pages[0];
|
|
107
|
+
if (!page) {
|
|
108
|
+
throw new Error('No page found');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Set page background to light gray
|
|
112
|
+
const pageFill = engine.block.getFill(page);
|
|
113
|
+
engine.block.setColor(pageFill, 'fill/color/value', {
|
|
114
|
+
r: 0.95,
|
|
115
|
+
g: 0.95,
|
|
116
|
+
b: 0.95,
|
|
117
|
+
a: 1.0
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// Calculate responsive grid layout based on page dimensions
|
|
121
|
+
const pageWidth = engine.block.getWidth(page);
|
|
122
|
+
const pageHeight = engine.block.getHeight(page);
|
|
123
|
+
const layout = calculateGridLayout(pageWidth, pageHeight, 15);
|
|
124
|
+
const { blockWidth, blockHeight, getPosition } = layout;
|
|
125
|
+
|
|
126
|
+
// Helper function to create a shape with a fill
|
|
127
|
+
const createShapeWithFill = (
|
|
128
|
+
fillType: 'gradient/linear' | 'gradient/radial' | 'gradient/conical'
|
|
129
|
+
): { block: number; fill: number } => {
|
|
130
|
+
const block = engine.block.create('graphic');
|
|
131
|
+
const shape = engine.block.createShape('rect');
|
|
132
|
+
engine.block.setShape(block, shape);
|
|
133
|
+
|
|
134
|
+
// Set size
|
|
135
|
+
engine.block.setWidth(block, blockWidth);
|
|
136
|
+
engine.block.setHeight(block, blockHeight);
|
|
137
|
+
|
|
138
|
+
// Append to page
|
|
139
|
+
engine.block.appendChild(page, block);
|
|
140
|
+
|
|
141
|
+
// Check if block supports fills
|
|
142
|
+
const canHaveFill = engine.block.supportsFill(block);
|
|
143
|
+
if (!canHaveFill) {
|
|
144
|
+
throw new Error('Block does not support fills');
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Create gradient fill
|
|
148
|
+
const gradientFill = engine.block.createFill(fillType);
|
|
149
|
+
|
|
150
|
+
// Apply the fill to the block
|
|
151
|
+
engine.block.setFill(block, gradientFill);
|
|
152
|
+
|
|
153
|
+
return { block, fill: gradientFill };
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
// =============================================================================
|
|
157
|
+
// Example 1: Linear Gradient (Vertical)
|
|
158
|
+
// =============================================================================
|
|
159
|
+
const { block: linearVerticalBlock, fill: linearVertical } =
|
|
160
|
+
createShapeWithFill('gradient/linear');
|
|
161
|
+
|
|
162
|
+
engine.block.setGradientColorStops(linearVertical, 'fill/gradient/colors', [
|
|
163
|
+
{ color: { r: 1.0, g: 0.8, b: 0.2, a: 1.0 }, stop: 0 },
|
|
164
|
+
{ color: { r: 0.3, g: 0.4, b: 0.7, a: 1.0 }, stop: 1 }
|
|
165
|
+
]);
|
|
166
|
+
|
|
167
|
+
// Set vertical gradient (top to bottom)
|
|
168
|
+
engine.block.setFloat(
|
|
169
|
+
linearVertical,
|
|
170
|
+
'fill/gradient/linear/startPointX',
|
|
171
|
+
0.5
|
|
172
|
+
);
|
|
173
|
+
engine.block.setFloat(
|
|
174
|
+
linearVertical,
|
|
175
|
+
'fill/gradient/linear/startPointY',
|
|
176
|
+
0
|
|
177
|
+
);
|
|
178
|
+
engine.block.setFloat(
|
|
179
|
+
linearVertical,
|
|
180
|
+
'fill/gradient/linear/endPointX',
|
|
181
|
+
0.5
|
|
182
|
+
);
|
|
183
|
+
engine.block.setFloat(linearVertical, 'fill/gradient/linear/endPointY', 1);
|
|
184
|
+
|
|
185
|
+
// =============================================================================
|
|
186
|
+
// Example 2: Linear Gradient (Horizontal)
|
|
187
|
+
// =============================================================================
|
|
188
|
+
const { block: linearHorizontalBlock, fill: linearHorizontal } =
|
|
189
|
+
createShapeWithFill('gradient/linear');
|
|
190
|
+
|
|
191
|
+
engine.block.setGradientColorStops(
|
|
192
|
+
linearHorizontal,
|
|
193
|
+
'fill/gradient/colors',
|
|
194
|
+
[
|
|
195
|
+
{ color: { r: 0.8, g: 0.2, b: 0.4, a: 1.0 }, stop: 0 },
|
|
196
|
+
{ color: { r: 0.2, g: 0.8, b: 0.6, a: 1.0 }, stop: 1 }
|
|
197
|
+
]
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
// Set horizontal gradient (left to right)
|
|
201
|
+
engine.block.setFloat(
|
|
202
|
+
linearHorizontal,
|
|
203
|
+
'fill/gradient/linear/startPointX',
|
|
204
|
+
0
|
|
205
|
+
);
|
|
206
|
+
engine.block.setFloat(
|
|
207
|
+
linearHorizontal,
|
|
208
|
+
'fill/gradient/linear/startPointY',
|
|
209
|
+
0.5
|
|
210
|
+
);
|
|
211
|
+
engine.block.setFloat(
|
|
212
|
+
linearHorizontal,
|
|
213
|
+
'fill/gradient/linear/endPointX',
|
|
214
|
+
1
|
|
215
|
+
);
|
|
216
|
+
engine.block.setFloat(
|
|
217
|
+
linearHorizontal,
|
|
218
|
+
'fill/gradient/linear/endPointY',
|
|
219
|
+
0.5
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
// =============================================================================
|
|
223
|
+
// Example 3: Linear Gradient (Diagonal)
|
|
224
|
+
// =============================================================================
|
|
225
|
+
const { block: linearDiagonalBlock, fill: linearDiagonal } =
|
|
226
|
+
createShapeWithFill('gradient/linear');
|
|
227
|
+
|
|
228
|
+
engine.block.setGradientColorStops(linearDiagonal, 'fill/gradient/colors', [
|
|
229
|
+
{ color: { r: 0.5, g: 0.2, b: 0.8, a: 1.0 }, stop: 0 },
|
|
230
|
+
{ color: { r: 0.9, g: 0.6, b: 0.2, a: 1.0 }, stop: 1 }
|
|
231
|
+
]);
|
|
232
|
+
|
|
233
|
+
// Set diagonal gradient (top-left to bottom-right)
|
|
234
|
+
engine.block.setFloat(
|
|
235
|
+
linearDiagonal,
|
|
236
|
+
'fill/gradient/linear/startPointX',
|
|
237
|
+
0
|
|
238
|
+
);
|
|
239
|
+
engine.block.setFloat(
|
|
240
|
+
linearDiagonal,
|
|
241
|
+
'fill/gradient/linear/startPointY',
|
|
242
|
+
0
|
|
243
|
+
);
|
|
244
|
+
engine.block.setFloat(linearDiagonal, 'fill/gradient/linear/endPointX', 1);
|
|
245
|
+
engine.block.setFloat(linearDiagonal, 'fill/gradient/linear/endPointY', 1);
|
|
246
|
+
|
|
247
|
+
// =============================================================================
|
|
248
|
+
// Example 4: Multi-Stop Linear Gradient (Aurora Effect)
|
|
249
|
+
// =============================================================================
|
|
250
|
+
const { block: auroraGradientBlock, fill: auroraGradient } =
|
|
251
|
+
createShapeWithFill('gradient/linear');
|
|
252
|
+
|
|
253
|
+
engine.block.setGradientColorStops(auroraGradient, 'fill/gradient/colors', [
|
|
254
|
+
{ color: { r: 0.4, g: 0.1, b: 0.8, a: 1 }, stop: 0 },
|
|
255
|
+
{ color: { r: 0.8, g: 0.2, b: 0.6, a: 1 }, stop: 0.3 },
|
|
256
|
+
{ color: { r: 1.0, g: 0.5, b: 0.3, a: 1 }, stop: 0.6 },
|
|
257
|
+
{ color: { r: 1.0, g: 0.8, b: 0.2, a: 1 }, stop: 1 }
|
|
258
|
+
]);
|
|
259
|
+
|
|
260
|
+
engine.block.setFloat(
|
|
261
|
+
auroraGradient,
|
|
262
|
+
'fill/gradient/linear/startPointX',
|
|
263
|
+
0
|
|
264
|
+
);
|
|
265
|
+
engine.block.setFloat(
|
|
266
|
+
auroraGradient,
|
|
267
|
+
'fill/gradient/linear/startPointY',
|
|
268
|
+
0.5
|
|
269
|
+
);
|
|
270
|
+
engine.block.setFloat(auroraGradient, 'fill/gradient/linear/endPointX', 1);
|
|
271
|
+
engine.block.setFloat(
|
|
272
|
+
auroraGradient,
|
|
273
|
+
'fill/gradient/linear/endPointY',
|
|
274
|
+
0.5
|
|
275
|
+
);
|
|
276
|
+
|
|
277
|
+
// =============================================================================
|
|
278
|
+
// Example 5: Radial Gradient (Centered)
|
|
279
|
+
// =============================================================================
|
|
280
|
+
const { block: radialCenteredBlock, fill: radialCentered } =
|
|
281
|
+
createShapeWithFill('gradient/radial');
|
|
282
|
+
|
|
283
|
+
engine.block.setGradientColorStops(radialCentered, 'fill/gradient/colors', [
|
|
284
|
+
{ color: { r: 1.0, g: 1.0, b: 1.0, a: 0.3 }, stop: 0 },
|
|
285
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1.0 }, stop: 1 }
|
|
286
|
+
]);
|
|
287
|
+
|
|
288
|
+
// Set center point (middle of block)
|
|
289
|
+
engine.block.setFloat(
|
|
290
|
+
radialCentered,
|
|
291
|
+
'fill/gradient/radial/centerPointX',
|
|
292
|
+
0.5
|
|
293
|
+
);
|
|
294
|
+
engine.block.setFloat(
|
|
295
|
+
radialCentered,
|
|
296
|
+
'fill/gradient/radial/centerPointY',
|
|
297
|
+
0.5
|
|
298
|
+
);
|
|
299
|
+
engine.block.setFloat(radialCentered, 'fill/gradient/radial/radius', 0.8);
|
|
300
|
+
|
|
301
|
+
// =============================================================================
|
|
302
|
+
// Example 6: Radial Gradient (Top-Left Highlight)
|
|
303
|
+
// =============================================================================
|
|
304
|
+
const { block: radialHighlightBlock, fill: radialHighlight } =
|
|
305
|
+
createShapeWithFill('gradient/radial');
|
|
306
|
+
|
|
307
|
+
engine.block.setGradientColorStops(
|
|
308
|
+
radialHighlight,
|
|
309
|
+
'fill/gradient/colors',
|
|
310
|
+
[
|
|
311
|
+
{ color: { r: 1.0, g: 1.0, b: 1.0, a: 0.3 }, stop: 0 },
|
|
312
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1.0 }, stop: 1 }
|
|
313
|
+
]
|
|
314
|
+
);
|
|
315
|
+
|
|
316
|
+
// Set top-left highlight
|
|
317
|
+
engine.block.setFloat(
|
|
318
|
+
radialHighlight,
|
|
319
|
+
'fill/gradient/radial/centerPointX',
|
|
320
|
+
0
|
|
321
|
+
);
|
|
322
|
+
engine.block.setFloat(
|
|
323
|
+
radialHighlight,
|
|
324
|
+
'fill/gradient/radial/centerPointY',
|
|
325
|
+
0
|
|
326
|
+
);
|
|
327
|
+
engine.block.setFloat(radialHighlight, 'fill/gradient/radial/radius', 1.0);
|
|
328
|
+
|
|
329
|
+
// =============================================================================
|
|
330
|
+
// Example 7: Radial Gradient (Vignette Effect)
|
|
331
|
+
// =============================================================================
|
|
332
|
+
const { block: radialVignetteBlock, fill: radialVignette } =
|
|
333
|
+
createShapeWithFill('gradient/radial');
|
|
334
|
+
|
|
335
|
+
engine.block.setGradientColorStops(radialVignette, 'fill/gradient/colors', [
|
|
336
|
+
{ color: { r: 0.9, g: 0.9, b: 0.9, a: 1.0 }, stop: 0 },
|
|
337
|
+
{ color: { r: 0.1, g: 0.1, b: 0.1, a: 1.0 }, stop: 1 }
|
|
338
|
+
]);
|
|
339
|
+
|
|
340
|
+
// Centered vignette
|
|
341
|
+
engine.block.setFloat(
|
|
342
|
+
radialVignette,
|
|
343
|
+
'fill/gradient/radial/centerPointX',
|
|
344
|
+
0.5
|
|
345
|
+
);
|
|
346
|
+
engine.block.setFloat(
|
|
347
|
+
radialVignette,
|
|
348
|
+
'fill/gradient/radial/centerPointY',
|
|
349
|
+
0.5
|
|
350
|
+
);
|
|
351
|
+
engine.block.setFloat(radialVignette, 'fill/gradient/radial/radius', 0.6);
|
|
352
|
+
|
|
353
|
+
// =============================================================================
|
|
354
|
+
// Example 8: Conical Gradient (Color Wheel)
|
|
355
|
+
// =============================================================================
|
|
356
|
+
const { block: conicalColorWheelBlock, fill: conicalColorWheel } =
|
|
357
|
+
createShapeWithFill('gradient/conical');
|
|
358
|
+
|
|
359
|
+
engine.block.setGradientColorStops(
|
|
360
|
+
conicalColorWheel,
|
|
361
|
+
'fill/gradient/colors',
|
|
362
|
+
[
|
|
363
|
+
{ color: { r: 1.0, g: 0.0, b: 0.0, a: 1 }, stop: 0 },
|
|
364
|
+
{ color: { r: 1.0, g: 1.0, b: 0.0, a: 1 }, stop: 0.25 },
|
|
365
|
+
{ color: { r: 0.0, g: 1.0, b: 0.0, a: 1 }, stop: 0.5 },
|
|
366
|
+
{ color: { r: 0.0, g: 0.0, b: 1.0, a: 1 }, stop: 0.75 },
|
|
367
|
+
{ color: { r: 1.0, g: 0.0, b: 0.0, a: 1 }, stop: 1 }
|
|
368
|
+
]
|
|
369
|
+
);
|
|
370
|
+
|
|
371
|
+
// Set center point (middle of block)
|
|
372
|
+
engine.block.setFloat(
|
|
373
|
+
conicalColorWheel,
|
|
374
|
+
'fill/gradient/conical/centerPointX',
|
|
375
|
+
0.5
|
|
376
|
+
);
|
|
377
|
+
engine.block.setFloat(
|
|
378
|
+
conicalColorWheel,
|
|
379
|
+
'fill/gradient/conical/centerPointY',
|
|
380
|
+
0.5
|
|
381
|
+
);
|
|
382
|
+
|
|
383
|
+
// =============================================================================
|
|
384
|
+
// Example 9: Conical Gradient (Loading Spinner)
|
|
385
|
+
// =============================================================================
|
|
386
|
+
const { block: conicalSpinnerBlock, fill: conicalSpinner } =
|
|
387
|
+
createShapeWithFill('gradient/conical');
|
|
388
|
+
|
|
389
|
+
engine.block.setGradientColorStops(conicalSpinner, 'fill/gradient/colors', [
|
|
390
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1 }, stop: 0 },
|
|
391
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 0 }, stop: 0.75 },
|
|
392
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1 }, stop: 1 }
|
|
393
|
+
]);
|
|
394
|
+
|
|
395
|
+
engine.block.setFloat(
|
|
396
|
+
conicalSpinner,
|
|
397
|
+
'fill/gradient/conical/centerPointX',
|
|
398
|
+
0.5
|
|
399
|
+
);
|
|
400
|
+
engine.block.setFloat(
|
|
401
|
+
conicalSpinner,
|
|
402
|
+
'fill/gradient/conical/centerPointY',
|
|
403
|
+
0.5
|
|
404
|
+
);
|
|
405
|
+
|
|
406
|
+
// =============================================================================
|
|
407
|
+
// Example 10: Gradient with CMYK Colors
|
|
408
|
+
// =============================================================================
|
|
409
|
+
const { block: cmykGradientBlock, fill: cmykGradient } =
|
|
410
|
+
createShapeWithFill('gradient/linear');
|
|
411
|
+
|
|
412
|
+
// CMYK color stops for print
|
|
413
|
+
engine.block.setGradientColorStops(cmykGradient, 'fill/gradient/colors', [
|
|
414
|
+
{ color: { c: 0.0, m: 1.0, y: 1.0, k: 0.0, tint: 1.0 }, stop: 0 },
|
|
415
|
+
{ color: { c: 1.0, m: 0.0, y: 1.0, k: 0.0, tint: 1.0 }, stop: 1 }
|
|
416
|
+
]);
|
|
417
|
+
|
|
418
|
+
engine.block.setFloat(cmykGradient, 'fill/gradient/linear/startPointX', 0);
|
|
419
|
+
engine.block.setFloat(
|
|
420
|
+
cmykGradient,
|
|
421
|
+
'fill/gradient/linear/startPointY',
|
|
422
|
+
0.5
|
|
423
|
+
);
|
|
424
|
+
engine.block.setFloat(cmykGradient, 'fill/gradient/linear/endPointX', 1);
|
|
425
|
+
engine.block.setFloat(cmykGradient, 'fill/gradient/linear/endPointY', 0.5);
|
|
426
|
+
|
|
427
|
+
// =============================================================================
|
|
428
|
+
// Example 11: Gradient with Spot Colors
|
|
429
|
+
// =============================================================================
|
|
430
|
+
// First define spot colors
|
|
431
|
+
engine.editor.setSpotColorRGB('BrandPrimary', 0.2, 0.4, 0.8);
|
|
432
|
+
engine.editor.setSpotColorRGB('BrandSecondary', 1.0, 0.6, 0.0);
|
|
433
|
+
|
|
434
|
+
const { block: spotGradientBlock, fill: spotGradient } =
|
|
435
|
+
createShapeWithFill('gradient/linear');
|
|
436
|
+
|
|
437
|
+
engine.block.setGradientColorStops(spotGradient, 'fill/gradient/colors', [
|
|
438
|
+
{
|
|
439
|
+
color: { name: 'BrandPrimary', tint: 1.0, externalReference: '' },
|
|
440
|
+
stop: 0
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
color: { name: 'BrandSecondary', tint: 1.0, externalReference: '' },
|
|
444
|
+
stop: 1
|
|
445
|
+
}
|
|
446
|
+
]);
|
|
447
|
+
|
|
448
|
+
engine.block.setFloat(spotGradient, 'fill/gradient/linear/startPointX', 0);
|
|
449
|
+
engine.block.setFloat(spotGradient, 'fill/gradient/linear/startPointY', 0);
|
|
450
|
+
engine.block.setFloat(spotGradient, 'fill/gradient/linear/endPointX', 1);
|
|
451
|
+
engine.block.setFloat(spotGradient, 'fill/gradient/linear/endPointY', 1);
|
|
452
|
+
|
|
453
|
+
// =============================================================================
|
|
454
|
+
// Example 12: Transparency Overlay Gradient
|
|
455
|
+
// =============================================================================
|
|
456
|
+
const { block: overlayGradientBlock, fill: overlayGradient } =
|
|
457
|
+
createShapeWithFill('gradient/linear');
|
|
458
|
+
|
|
459
|
+
engine.block.setGradientColorStops(
|
|
460
|
+
overlayGradient,
|
|
461
|
+
'fill/gradient/colors',
|
|
462
|
+
[
|
|
463
|
+
{ color: { r: 0.0, g: 0.0, b: 0.0, a: 0 }, stop: 0 },
|
|
464
|
+
{ color: { r: 0.0, g: 0.0, b: 0.0, a: 0.7 }, stop: 1 }
|
|
465
|
+
]
|
|
466
|
+
);
|
|
467
|
+
|
|
468
|
+
engine.block.setFloat(
|
|
469
|
+
overlayGradient,
|
|
470
|
+
'fill/gradient/linear/startPointX',
|
|
471
|
+
0.5
|
|
472
|
+
);
|
|
473
|
+
engine.block.setFloat(
|
|
474
|
+
overlayGradient,
|
|
475
|
+
'fill/gradient/linear/startPointY',
|
|
476
|
+
0
|
|
477
|
+
);
|
|
478
|
+
engine.block.setFloat(
|
|
479
|
+
overlayGradient,
|
|
480
|
+
'fill/gradient/linear/endPointX',
|
|
481
|
+
0.5
|
|
482
|
+
);
|
|
483
|
+
engine.block.setFloat(overlayGradient, 'fill/gradient/linear/endPointY', 1);
|
|
484
|
+
|
|
485
|
+
// =============================================================================
|
|
486
|
+
// Example 13: Duotone Gradient
|
|
487
|
+
// =============================================================================
|
|
488
|
+
const { block: duotoneGradientBlock, fill: duotoneGradient } =
|
|
489
|
+
createShapeWithFill('gradient/linear');
|
|
490
|
+
|
|
491
|
+
engine.block.setGradientColorStops(
|
|
492
|
+
duotoneGradient,
|
|
493
|
+
'fill/gradient/colors',
|
|
494
|
+
[
|
|
495
|
+
{ color: { r: 0.8, g: 0.2, b: 0.9, a: 1 }, stop: 0 },
|
|
496
|
+
{ color: { r: 0.2, g: 0.9, b: 0.8, a: 1 }, stop: 1 }
|
|
497
|
+
]
|
|
498
|
+
);
|
|
499
|
+
|
|
500
|
+
engine.block.setFloat(
|
|
501
|
+
duotoneGradient,
|
|
502
|
+
'fill/gradient/linear/startPointX',
|
|
503
|
+
0
|
|
504
|
+
);
|
|
505
|
+
engine.block.setFloat(
|
|
506
|
+
duotoneGradient,
|
|
507
|
+
'fill/gradient/linear/startPointY',
|
|
508
|
+
0
|
|
509
|
+
);
|
|
510
|
+
engine.block.setFloat(duotoneGradient, 'fill/gradient/linear/endPointX', 1);
|
|
511
|
+
engine.block.setFloat(duotoneGradient, 'fill/gradient/linear/endPointY', 1);
|
|
512
|
+
|
|
513
|
+
// =============================================================================
|
|
514
|
+
// Example 14: Shared Gradient Fill
|
|
515
|
+
// =============================================================================
|
|
516
|
+
const block1 = engine.block.create('graphic');
|
|
517
|
+
const shape1 = engine.block.createShape('rect');
|
|
518
|
+
engine.block.setShape(block1, shape1);
|
|
519
|
+
engine.block.setWidth(block1, blockWidth);
|
|
520
|
+
engine.block.setHeight(block1, blockHeight / 2 - 5);
|
|
521
|
+
engine.block.appendChild(page, block1);
|
|
522
|
+
|
|
523
|
+
const block2 = engine.block.create('graphic');
|
|
524
|
+
const shape2 = engine.block.createShape('rect');
|
|
525
|
+
engine.block.setShape(block2, shape2);
|
|
526
|
+
engine.block.setWidth(block2, blockWidth);
|
|
527
|
+
engine.block.setHeight(block2, blockHeight / 2 - 5);
|
|
528
|
+
engine.block.appendChild(page, block2);
|
|
529
|
+
|
|
530
|
+
// Create one gradient fill
|
|
531
|
+
const sharedGradient = engine.block.createFill('gradient/linear');
|
|
532
|
+
engine.block.setGradientColorStops(sharedGradient, 'fill/gradient/colors', [
|
|
533
|
+
{ color: { r: 1, g: 0, b: 0, a: 1 }, stop: 0 },
|
|
534
|
+
{ color: { r: 0, g: 0, b: 1, a: 1 }, stop: 1 }
|
|
535
|
+
]);
|
|
536
|
+
|
|
537
|
+
engine.block.setFloat(
|
|
538
|
+
sharedGradient,
|
|
539
|
+
'fill/gradient/linear/startPointX',
|
|
540
|
+
0
|
|
541
|
+
);
|
|
542
|
+
engine.block.setFloat(
|
|
543
|
+
sharedGradient,
|
|
544
|
+
'fill/gradient/linear/startPointY',
|
|
545
|
+
0.5
|
|
546
|
+
);
|
|
547
|
+
engine.block.setFloat(sharedGradient, 'fill/gradient/linear/endPointX', 1);
|
|
548
|
+
engine.block.setFloat(
|
|
549
|
+
sharedGradient,
|
|
550
|
+
'fill/gradient/linear/endPointY',
|
|
551
|
+
0.5
|
|
552
|
+
);
|
|
553
|
+
|
|
554
|
+
// Apply to both blocks
|
|
555
|
+
engine.block.setFill(block1, sharedGradient);
|
|
556
|
+
engine.block.setFill(block2, sharedGradient);
|
|
557
|
+
|
|
558
|
+
// Change gradient after a delay to show it affects both
|
|
559
|
+
setTimeout(() => {
|
|
560
|
+
engine.block.setGradientColorStops(
|
|
561
|
+
sharedGradient,
|
|
562
|
+
'fill/gradient/colors',
|
|
563
|
+
[
|
|
564
|
+
{ color: { r: 0, g: 1, b: 0, a: 1 }, stop: 0 },
|
|
565
|
+
{ color: { r: 1, g: 1, b: 0, a: 1 }, stop: 1 }
|
|
566
|
+
]
|
|
567
|
+
);
|
|
568
|
+
}, 2000);
|
|
569
|
+
|
|
570
|
+
// =============================================================================
|
|
571
|
+
// Example 15: Get Gradient Properties
|
|
572
|
+
// =============================================================================
|
|
573
|
+
const { block: inspectGradientBlock, fill: inspectGradient } =
|
|
574
|
+
createShapeWithFill('gradient/linear');
|
|
575
|
+
|
|
576
|
+
engine.block.setGradientColorStops(
|
|
577
|
+
inspectGradient,
|
|
578
|
+
'fill/gradient/colors',
|
|
579
|
+
[
|
|
580
|
+
{ color: { r: 0.6, g: 0.3, b: 0.7, a: 1.0 }, stop: 0 },
|
|
581
|
+
{ color: { r: 0.3, g: 0.7, b: 0.6, a: 1.0 }, stop: 1 }
|
|
582
|
+
]
|
|
583
|
+
);
|
|
584
|
+
|
|
585
|
+
// Get current fill from block
|
|
586
|
+
const fillId = engine.block.getFill(block1);
|
|
587
|
+
const fillType = engine.block.getType(fillId);
|
|
588
|
+
// eslint-disable-next-line no-console
|
|
589
|
+
console.log('Fill type:', fillType); // '//ly.img.ubq/fill/gradient/linear'
|
|
590
|
+
|
|
591
|
+
// Get gradient color stops
|
|
592
|
+
const colorStops = engine.block.getGradientColorStops(
|
|
593
|
+
inspectGradient,
|
|
594
|
+
'fill/gradient/colors'
|
|
595
|
+
);
|
|
596
|
+
// eslint-disable-next-line no-console
|
|
597
|
+
console.log('Color stops:', colorStops);
|
|
598
|
+
|
|
599
|
+
// Get linear gradient position
|
|
600
|
+
const startX = engine.block.getFloat(
|
|
601
|
+
inspectGradient,
|
|
602
|
+
'fill/gradient/linear/startPointX'
|
|
603
|
+
);
|
|
604
|
+
const startY = engine.block.getFloat(
|
|
605
|
+
inspectGradient,
|
|
606
|
+
'fill/gradient/linear/startPointY'
|
|
607
|
+
);
|
|
608
|
+
const endX = engine.block.getFloat(
|
|
609
|
+
inspectGradient,
|
|
610
|
+
'fill/gradient/linear/endPointX'
|
|
611
|
+
);
|
|
612
|
+
const endY = engine.block.getFloat(
|
|
613
|
+
inspectGradient,
|
|
614
|
+
'fill/gradient/linear/endPointY'
|
|
615
|
+
);
|
|
616
|
+
// eslint-disable-next-line no-console
|
|
617
|
+
console.log('Linear gradient position:', { startX, startY, endX, endY });
|
|
618
|
+
|
|
619
|
+
// ===== Position all blocks in grid layout =====
|
|
620
|
+
const blocks = [
|
|
621
|
+
linearVerticalBlock, // Position 0
|
|
622
|
+
linearHorizontalBlock, // Position 1
|
|
623
|
+
linearDiagonalBlock, // Position 2
|
|
624
|
+
auroraGradientBlock, // Position 3
|
|
625
|
+
radialCenteredBlock, // Position 4
|
|
626
|
+
radialHighlightBlock, // Position 5
|
|
627
|
+
radialVignetteBlock, // Position 6
|
|
628
|
+
conicalColorWheelBlock, // Position 7
|
|
629
|
+
conicalSpinnerBlock, // Position 8
|
|
630
|
+
cmykGradientBlock, // Position 9
|
|
631
|
+
spotGradientBlock, // Position 10
|
|
632
|
+
overlayGradientBlock, // Position 11
|
|
633
|
+
duotoneGradientBlock, // Position 12
|
|
634
|
+
block1, // Position 13 (top half)
|
|
635
|
+
inspectGradientBlock // Position 14
|
|
636
|
+
];
|
|
637
|
+
|
|
638
|
+
blocks.forEach((block, index) => {
|
|
639
|
+
const pos = getPosition(index);
|
|
640
|
+
engine.block.setPositionX(block, pos.x);
|
|
641
|
+
engine.block.setPositionY(block, pos.y);
|
|
642
|
+
});
|
|
643
|
+
|
|
644
|
+
// Position block2 below block1 in the same grid cell
|
|
645
|
+
const block1Pos = getPosition(13);
|
|
646
|
+
engine.block.setPositionX(block2, block1Pos.x);
|
|
647
|
+
engine.block.setPositionY(block2, block1Pos.y + blockHeight / 2 + 5);
|
|
648
|
+
|
|
649
|
+
// Zoom to fit all content
|
|
650
|
+
await engine.scene.zoomToBlock(page, {
|
|
651
|
+
padding: {
|
|
652
|
+
left: 40,
|
|
653
|
+
top: 40,
|
|
654
|
+
right: 40,
|
|
655
|
+
bottom: 40
|
|
656
|
+
}
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
export default Example;
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
This guide demonstrates how to create, apply, and configure gradient fills programmatically, work with color stops, position gradients, and create modern visual effects like aurora gradients and button highlights.
|
|
665
|
+
|
|
666
|
+
## Understanding Gradient Fills
|
|
667
|
+
|
|
668
|
+
### What is a Gradient Fill?
|
|
669
|
+
|
|
670
|
+
A gradient fill is a fill object that paints a design block with smooth color transitions. Gradient fills are part of the broader fill system in CE.SDK and come in three types, each identified by a unique type string:
|
|
671
|
+
|
|
672
|
+
- **Linear**: `'//ly.img.ubq/fill/gradient/linear'` or `'gradient/linear'`
|
|
673
|
+
- **Radial**: `'//ly.img.ubq/fill/gradient/radial'` or `'gradient/radial'`
|
|
674
|
+
- **Conical**: `'//ly.img.ubq/fill/gradient/conical'` or `'gradient/conical'`
|
|
675
|
+
|
|
676
|
+
Each gradient type contains color stops that define colors at specific positions and positioning properties that control the gradient's direction and coverage.
|
|
677
|
+
|
|
678
|
+
### Gradient Types Comparison
|
|
679
|
+
|
|
680
|
+
#### Linear Gradients
|
|
681
|
+
|
|
682
|
+
Linear gradients transition colors along a straight line defined by start and end points. They're the most common gradient type and create clean, modern looks. Common use cases include hero sections, call-to-action buttons, headers, and banners.
|
|
683
|
+
|
|
684
|
+
```typescript highlight-linear-gradient
|
|
685
|
+
const { block: linearVerticalBlock, fill: linearVertical } =
|
|
686
|
+
createShapeWithFill('gradient/linear');
|
|
687
|
+
|
|
688
|
+
engine.block.setGradientColorStops(linearVertical, 'fill/gradient/colors', [
|
|
689
|
+
{ color: { r: 1.0, g: 0.8, b: 0.2, a: 1.0 }, stop: 0 },
|
|
690
|
+
{ color: { r: 0.3, g: 0.4, b: 0.7, a: 1.0 }, stop: 1 }
|
|
691
|
+
]);
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
#### Radial Gradients
|
|
695
|
+
|
|
696
|
+
Radial gradients emanate from a central point outward, creating circular or elliptical color transitions. They add depth and create focal points or spotlight effects. Common use cases include button highlights, card shadows, vignettes, and circular badges.
|
|
697
|
+
|
|
698
|
+
```typescript highlight-radial-gradient
|
|
699
|
+
engine.block.setGradientColorStops(radialCentered, 'fill/gradient/colors', [
|
|
700
|
+
{ color: { r: 1.0, g: 1.0, b: 1.0, a: 0.3 }, stop: 0 },
|
|
701
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1.0 }, stop: 1 }
|
|
702
|
+
]);
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
#### Conical Gradients
|
|
706
|
+
|
|
707
|
+
Conical gradients transition colors around a center point like a color wheel, starting at the top (12 o'clock) and rotating clockwise. Colors are specified by position rather than angle. Common use cases include pie charts, loading spinners, circular progress indicators, and color picker wheels.
|
|
708
|
+
|
|
709
|
+
```typescript highlight-conical-gradient
|
|
710
|
+
engine.block.setGradientColorStops(conicalColorWheel, 'fill/gradient/colors', [
|
|
711
|
+
{ color: { r: 1.0, g: 0.0, b: 0.0, a: 1 }, stop: 0 },
|
|
712
|
+
{ color: { r: 1.0, g: 1.0, b: 0.0, a: 1 }, stop: 0.25 },
|
|
713
|
+
{ color: { r: 0.0, g: 1.0, b: 0.0, a: 1 }, stop: 0.5 },
|
|
714
|
+
{ color: { r: 0.0, g: 0.0, b: 1.0, a: 1 }, stop: 0.75 },
|
|
715
|
+
{ color: { r: 1.0, g: 0.0, b: 0.0, a: 1 }, stop: 1 }
|
|
716
|
+
]);
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
### Gradient vs Other Fill Types
|
|
720
|
+
|
|
721
|
+
Understanding how gradients differ from other fill types helps you choose the right fill for your design:
|
|
722
|
+
|
|
723
|
+
- **Gradient fills**: Smooth color transitions (linear, radial, conical)
|
|
724
|
+
- **Color fills**: Solid, uniform color
|
|
725
|
+
- **Image fills**: Photo or raster content
|
|
726
|
+
- **Video fills**: Animated video content
|
|
727
|
+
|
|
728
|
+
### Color Stops Explained
|
|
729
|
+
|
|
730
|
+
Color stops define the colors at specific positions in the gradient. Each stop consists of:
|
|
731
|
+
|
|
732
|
+
- `color`: An RGB, CMYK, or Spot color value
|
|
733
|
+
- `stop`: Position value between 0.0 and 1.0 (0% to 100%)
|
|
734
|
+
|
|
735
|
+
A gradient requires a minimum of two color stops. You can add multiple stops to create complex color transitions. Color stops can use any color space supported by CE.SDK, including RGB for screen display, CMYK for print, and Spot Colors for brand consistency.
|
|
736
|
+
|
|
737
|
+
```typescript highlight-color-stops
|
|
738
|
+
engine.block.setGradientColorStops(auroraGradient, 'fill/gradient/colors', [
|
|
739
|
+
{ color: { r: 0.4, g: 0.1, b: 0.8, a: 1 }, stop: 0 },
|
|
740
|
+
{ color: { r: 0.8, g: 0.2, b: 0.6, a: 1 }, stop: 0.3 },
|
|
741
|
+
{ color: { r: 1.0, g: 0.5, b: 0.3, a: 1 }, stop: 0.6 },
|
|
742
|
+
{ color: { r: 1.0, g: 0.8, b: 0.2, a: 1 }, stop: 1 }
|
|
743
|
+
]);
|
|
744
|
+
```
|
|
745
|
+
|
|
746
|
+
## Using the Built-in Gradient UI
|
|
747
|
+
|
|
748
|
+
CE.SDK provides built-in UI controls for working with gradients through the **inspector bar** and **advanced inspector**. Users can switch between solid color and gradient fills, select gradient type (linear, radial, conical), add and remove color stops visually, adjust individual stop colors, and drag gradient control points for positioning.
|
|
749
|
+
|
|
750
|
+
**Note**: Currently, only **linear gradients** are fully supported in the built-in UI. Radial and conical gradients are available programmatically.
|
|
751
|
+
|
|
752
|
+
### Enabling Fill Features
|
|
753
|
+
|
|
754
|
+
Gradient controls are part of the fill feature system. You can check if the fill feature is enabled and control it programmatically:
|
|
755
|
+
|
|
756
|
+
```typescript highlight-enable-fill-feature
|
|
757
|
+
// Fill features are enabled by default in CE.SDK
|
|
758
|
+
// You can check and control fill feature availability:
|
|
759
|
+
const engine = cesdk.engine;
|
|
760
|
+
const isFillEnabled = cesdk.feature.isEnabled('ly.img.fill', { engine });
|
|
761
|
+
console.log('Fill feature enabled:', isFillEnabled);
|
|
762
|
+
```
|
|
763
|
+
|
|
764
|
+
## Checking Gradient Fill Support
|
|
765
|
+
|
|
766
|
+
### Verifying Block Compatibility
|
|
767
|
+
|
|
768
|
+
Before applying gradient fills, verify that the block type supports fills. Not all blocks support fills—for example, scenes and pages typically don't.
|
|
769
|
+
|
|
770
|
+
```typescript highlight-check-fill-support
|
|
771
|
+
// Check if block supports fills
|
|
772
|
+
const canHaveFill = engine.block.supportsFill(block);
|
|
773
|
+
if (!canHaveFill) {
|
|
774
|
+
throw new Error('Block does not support fills');
|
|
775
|
+
}
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
Always check `supportsFill()` before accessing fill APIs. Graphic blocks, shapes, and text typically support fills.
|
|
779
|
+
|
|
780
|
+
## Creating Gradient Fills
|
|
781
|
+
|
|
782
|
+
### Creating a New Linear Gradient
|
|
783
|
+
|
|
784
|
+
Create a new linear gradient fill using the `createFill()` method with the type `'gradient/linear'`:
|
|
785
|
+
|
|
786
|
+
```typescript highlight-create-linear
|
|
787
|
+
const { block: linearVerticalBlock, fill: linearVertical } =
|
|
788
|
+
createShapeWithFill('gradient/linear');
|
|
789
|
+
```
|
|
790
|
+
|
|
791
|
+
### Creating a Radial Gradient
|
|
792
|
+
|
|
793
|
+
Create a radial gradient using the type `'gradient/radial'`:
|
|
794
|
+
|
|
795
|
+
```typescript highlight-create-radial
|
|
796
|
+
const { block: radialCenteredBlock, fill: radialCentered } =
|
|
797
|
+
createShapeWithFill('gradient/radial');
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
### Creating a Conical Gradient
|
|
801
|
+
|
|
802
|
+
Create a conical gradient using the type `'gradient/conical'`:
|
|
803
|
+
|
|
804
|
+
```typescript highlight-create-conical
|
|
805
|
+
const { block: conicalColorWheelBlock, fill: conicalColorWheel } =
|
|
806
|
+
createShapeWithFill('gradient/conical');
|
|
807
|
+
```
|
|
808
|
+
|
|
809
|
+
The `createFill()` method returns a numeric fill ID. The fill exists independently until you attach it to a block. If you create a fill but don't attach it to a block, you must destroy it manually to prevent memory leaks.
|
|
810
|
+
|
|
811
|
+
## Applying Gradient Fills
|
|
812
|
+
|
|
813
|
+
### Setting a Gradient Fill on a Block
|
|
814
|
+
|
|
815
|
+
Once you've created a gradient fill, attach it to a block using `setFill()`:
|
|
816
|
+
|
|
817
|
+
```typescript highlight-apply-gradient
|
|
818
|
+
// Create gradient fill
|
|
819
|
+
const gradientFill = engine.block.createFill(fillType);
|
|
820
|
+
|
|
821
|
+
// Apply the fill to the block
|
|
822
|
+
engine.block.setFill(block, gradientFill);
|
|
823
|
+
```
|
|
824
|
+
|
|
825
|
+
### Getting the Current Fill
|
|
826
|
+
|
|
827
|
+
Retrieve the current fill attached to a block and inspect its type:
|
|
828
|
+
|
|
829
|
+
```typescript highlight-get-fill
|
|
830
|
+
const { block: inspectGradientBlock, fill: inspectGradient } =
|
|
831
|
+
createShapeWithFill('gradient/linear');
|
|
832
|
+
|
|
833
|
+
engine.block.setGradientColorStops(inspectGradient, 'fill/gradient/colors', [
|
|
834
|
+
{ color: { r: 0.6, g: 0.3, b: 0.7, a: 1.0 }, stop: 0 },
|
|
835
|
+
{ color: { r: 0.3, g: 0.7, b: 0.6, a: 1.0 }, stop: 1 }
|
|
836
|
+
]);
|
|
837
|
+
|
|
838
|
+
// Get current fill from block
|
|
839
|
+
const fillId = engine.block.getFill(block1);
|
|
840
|
+
const fillType = engine.block.getType(fillId);
|
|
841
|
+
// eslint-disable-next-line no-console
|
|
842
|
+
console.log('Fill type:', fillType); // '//ly.img.ubq/fill/gradient/linear'
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
## Configuring Gradient Color Stops
|
|
846
|
+
|
|
847
|
+
### Setting Color Stops
|
|
848
|
+
|
|
849
|
+
Set color stops using the `setGradientColorStops()` method with an array of color and position pairs:
|
|
850
|
+
|
|
851
|
+
```typescript highlight-set-color-stops
|
|
852
|
+
engine.block.setGradientColorStops(linearVertical, 'fill/gradient/colors', [
|
|
853
|
+
{ color: { r: 1.0, g: 0.8, b: 0.2, a: 1.0 }, stop: 0 },
|
|
854
|
+
{ color: { r: 0.3, g: 0.4, b: 0.7, a: 1.0 }, stop: 1 }
|
|
855
|
+
]);
|
|
856
|
+
```
|
|
857
|
+
|
|
858
|
+
RGB values are normalized floats from 0.0 to 1.0. Stop positions are normalized where 0.0 represents the start and 1.0 represents the end. The alpha channel controls opacity per color stop.
|
|
859
|
+
|
|
860
|
+
### Getting Color Stops
|
|
861
|
+
|
|
862
|
+
Retrieve the current color stops from a gradient fill:
|
|
863
|
+
|
|
864
|
+
```typescript highlight-get-color-stops
|
|
865
|
+
// Get gradient color stops
|
|
866
|
+
const colorStops = engine.block.getGradientColorStops(
|
|
867
|
+
inspectGradient,
|
|
868
|
+
'fill/gradient/colors'
|
|
869
|
+
);
|
|
870
|
+
// eslint-disable-next-line no-console
|
|
871
|
+
console.log('Color stops:', colorStops);
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
### Using Different Color Spaces
|
|
875
|
+
|
|
876
|
+
Gradient color stops support multiple color spaces:
|
|
877
|
+
|
|
878
|
+
```typescript highlight-color-spaces
|
|
879
|
+
const { block: cmykGradientBlock, fill: cmykGradient } =
|
|
880
|
+
createShapeWithFill('gradient/linear');
|
|
881
|
+
|
|
882
|
+
// CMYK color stops for print
|
|
883
|
+
engine.block.setGradientColorStops(cmykGradient, 'fill/gradient/colors', [
|
|
884
|
+
{ color: { c: 0.0, m: 1.0, y: 1.0, k: 0.0, tint: 1.0 }, stop: 0 },
|
|
885
|
+
{ color: { c: 1.0, m: 0.0, y: 1.0, k: 0.0, tint: 1.0 }, stop: 1 }
|
|
886
|
+
]);
|
|
887
|
+
|
|
888
|
+
engine.block.setFloat(cmykGradient, 'fill/gradient/linear/startPointX', 0);
|
|
889
|
+
engine.block.setFloat(cmykGradient, 'fill/gradient/linear/startPointY', 0.5);
|
|
890
|
+
engine.block.setFloat(cmykGradient, 'fill/gradient/linear/endPointX', 1);
|
|
891
|
+
engine.block.setFloat(cmykGradient, 'fill/gradient/linear/endPointY', 0.5);
|
|
892
|
+
```
|
|
893
|
+
|
|
894
|
+
## Positioning Linear Gradients
|
|
895
|
+
|
|
896
|
+
### Setting Start and End Points
|
|
897
|
+
|
|
898
|
+
Linear gradients are positioned using start and end points with normalized coordinates (0.0 to 1.0) relative to block dimensions:
|
|
899
|
+
|
|
900
|
+
```typescript highlight-linear-position
|
|
901
|
+
// Set vertical gradient (top to bottom)
|
|
902
|
+
engine.block.setFloat(linearVertical, 'fill/gradient/linear/startPointX', 0.5);
|
|
903
|
+
engine.block.setFloat(linearVertical, 'fill/gradient/linear/startPointY', 0);
|
|
904
|
+
engine.block.setFloat(linearVertical, 'fill/gradient/linear/endPointX', 0.5);
|
|
905
|
+
engine.block.setFloat(linearVertical, 'fill/gradient/linear/endPointY', 1);
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
Coordinates are normalized where (0, 0) represents the top-left corner and (1, 1) represents the bottom-right corner.
|
|
909
|
+
|
|
910
|
+
### Common Linear Gradient Directions
|
|
911
|
+
|
|
912
|
+
**Horizontal (Left to Right):**
|
|
913
|
+
|
|
914
|
+
```typescript
|
|
915
|
+
engine.block.setFloat(linearGradient, 'fill/gradient/linear/startPointX', 0);
|
|
916
|
+
engine.block.setFloat(linearGradient, 'fill/gradient/linear/startPointY', 0.5);
|
|
917
|
+
engine.block.setFloat(linearGradient, 'fill/gradient/linear/endPointX', 1);
|
|
918
|
+
engine.block.setFloat(linearGradient, 'fill/gradient/linear/endPointY', 0.5);
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
**Diagonal (Top-Left to Bottom-Right):**
|
|
922
|
+
|
|
923
|
+
```typescript
|
|
924
|
+
engine.block.setFloat(linearGradient, 'fill/gradient/linear/startPointX', 0);
|
|
925
|
+
engine.block.setFloat(linearGradient, 'fill/gradient/linear/startPointY', 0);
|
|
926
|
+
engine.block.setFloat(linearGradient, 'fill/gradient/linear/endPointX', 1);
|
|
927
|
+
engine.block.setFloat(linearGradient, 'fill/gradient/linear/endPointY', 1);
|
|
928
|
+
```
|
|
929
|
+
|
|
930
|
+
### Getting Current Position
|
|
931
|
+
|
|
932
|
+
Retrieve the current position values:
|
|
933
|
+
|
|
934
|
+
```typescript highlight-get-linear-position
|
|
935
|
+
// Get linear gradient position
|
|
936
|
+
const startX = engine.block.getFloat(
|
|
937
|
+
inspectGradient,
|
|
938
|
+
'fill/gradient/linear/startPointX'
|
|
939
|
+
);
|
|
940
|
+
const startY = engine.block.getFloat(
|
|
941
|
+
inspectGradient,
|
|
942
|
+
'fill/gradient/linear/startPointY'
|
|
943
|
+
);
|
|
944
|
+
const endX = engine.block.getFloat(
|
|
945
|
+
inspectGradient,
|
|
946
|
+
'fill/gradient/linear/endPointX'
|
|
947
|
+
);
|
|
948
|
+
const endY = engine.block.getFloat(
|
|
949
|
+
inspectGradient,
|
|
950
|
+
'fill/gradient/linear/endPointY'
|
|
951
|
+
);
|
|
952
|
+
// eslint-disable-next-line no-console
|
|
953
|
+
console.log('Linear gradient position:', { startX, startY, endX, endY });
|
|
954
|
+
```
|
|
955
|
+
|
|
956
|
+
## Positioning Radial Gradients
|
|
957
|
+
|
|
958
|
+
### Setting Center Point and Radius
|
|
959
|
+
|
|
960
|
+
Radial gradients are positioned using a center point and radius:
|
|
961
|
+
|
|
962
|
+
```typescript highlight-radial-position
|
|
963
|
+
// Set center point (middle of block)
|
|
964
|
+
engine.block.setFloat(radialCentered, 'fill/gradient/radial/centerPointX', 0.5);
|
|
965
|
+
engine.block.setFloat(radialCentered, 'fill/gradient/radial/centerPointY', 0.5);
|
|
966
|
+
engine.block.setFloat(radialCentered, 'fill/gradient/radial/radius', 0.8);
|
|
967
|
+
```
|
|
968
|
+
|
|
969
|
+
The `centerPointX/Y` properties use normalized coordinates (0.0 to 1.0) relative to block dimensions. The `radius` property is relative to the smaller side of the block frame, where 1.0 equals full coverage. Default values are centerX = 0.0, centerY = 0.0, and radius = 1.0.
|
|
970
|
+
|
|
971
|
+
### Common Radial Patterns
|
|
972
|
+
|
|
973
|
+
**Centered Circle:**
|
|
974
|
+
|
|
975
|
+
```typescript
|
|
976
|
+
engine.block.setFloat(radialGradient, 'fill/gradient/radial/centerPointX', 0.5);
|
|
977
|
+
engine.block.setFloat(radialGradient, 'fill/gradient/radial/centerPointY', 0.5);
|
|
978
|
+
engine.block.setFloat(radialGradient, 'fill/gradient/radial/radius', 0.7);
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
**Top-Left Highlight:**
|
|
982
|
+
|
|
983
|
+
```typescript
|
|
984
|
+
engine.block.setFloat(radialGradient, 'fill/gradient/radial/centerPointX', 0);
|
|
985
|
+
engine.block.setFloat(radialGradient, 'fill/gradient/radial/centerPointY', 0);
|
|
986
|
+
engine.block.setFloat(radialGradient, 'fill/gradient/radial/radius', 1.0);
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
**Bottom-Right Vignette:**
|
|
990
|
+
|
|
991
|
+
```typescript
|
|
992
|
+
engine.block.setFloat(radialGradient, 'fill/gradient/radial/centerPointX', 1);
|
|
993
|
+
engine.block.setFloat(radialGradient, 'fill/gradient/radial/centerPointY', 1);
|
|
994
|
+
engine.block.setFloat(radialGradient, 'fill/gradient/radial/radius', 1.5);
|
|
995
|
+
```
|
|
996
|
+
|
|
997
|
+
## Positioning Conical Gradients
|
|
998
|
+
|
|
999
|
+
### Setting Center Point
|
|
1000
|
+
|
|
1001
|
+
Conical gradients are positioned using a center point. The rotation starts at the top (12 o'clock) and proceeds clockwise:
|
|
1002
|
+
|
|
1003
|
+
```typescript highlight-conical-position
|
|
1004
|
+
// Set center point (middle of block)
|
|
1005
|
+
engine.block.setFloat(
|
|
1006
|
+
conicalColorWheel,
|
|
1007
|
+
'fill/gradient/conical/centerPointX',
|
|
1008
|
+
0.5
|
|
1009
|
+
);
|
|
1010
|
+
engine.block.setFloat(
|
|
1011
|
+
conicalColorWheel,
|
|
1012
|
+
'fill/gradient/conical/centerPointY',
|
|
1013
|
+
0.5
|
|
1014
|
+
);
|
|
1015
|
+
```
|
|
1016
|
+
|
|
1017
|
+
The `centerPointX/Y` properties use normalized coordinates (0.0 to 1.0) relative to block dimensions. There is no separate rotation or angle property—the gradient always starts at the top. Default values are centerX = 0.0 and centerY = 0.0.
|
|
1018
|
+
|
|
1019
|
+
## Additional Techniques
|
|
1020
|
+
|
|
1021
|
+
### Sharing Gradient Fills
|
|
1022
|
+
|
|
1023
|
+
You can share a single gradient fill between multiple blocks. Changes to the shared gradient affect all blocks using it:
|
|
1024
|
+
|
|
1025
|
+
```typescript highlight-share-gradient
|
|
1026
|
+
const block1 = engine.block.create('graphic');
|
|
1027
|
+
const shape1 = engine.block.createShape('rect');
|
|
1028
|
+
engine.block.setShape(block1, shape1);
|
|
1029
|
+
engine.block.setWidth(block1, blockWidth);
|
|
1030
|
+
engine.block.setHeight(block1, blockHeight / 2 - 5);
|
|
1031
|
+
engine.block.appendChild(page, block1);
|
|
1032
|
+
|
|
1033
|
+
const block2 = engine.block.create('graphic');
|
|
1034
|
+
const shape2 = engine.block.createShape('rect');
|
|
1035
|
+
engine.block.setShape(block2, shape2);
|
|
1036
|
+
engine.block.setWidth(block2, blockWidth);
|
|
1037
|
+
engine.block.setHeight(block2, blockHeight / 2 - 5);
|
|
1038
|
+
engine.block.appendChild(page, block2);
|
|
1039
|
+
|
|
1040
|
+
// Create one gradient fill
|
|
1041
|
+
const sharedGradient = engine.block.createFill('gradient/linear');
|
|
1042
|
+
engine.block.setGradientColorStops(sharedGradient, 'fill/gradient/colors', [
|
|
1043
|
+
{ color: { r: 1, g: 0, b: 0, a: 1 }, stop: 0 },
|
|
1044
|
+
{ color: { r: 0, g: 0, b: 1, a: 1 }, stop: 1 }
|
|
1045
|
+
]);
|
|
1046
|
+
|
|
1047
|
+
engine.block.setFloat(sharedGradient, 'fill/gradient/linear/startPointX', 0);
|
|
1048
|
+
engine.block.setFloat(sharedGradient, 'fill/gradient/linear/startPointY', 0.5);
|
|
1049
|
+
engine.block.setFloat(sharedGradient, 'fill/gradient/linear/endPointX', 1);
|
|
1050
|
+
engine.block.setFloat(sharedGradient, 'fill/gradient/linear/endPointY', 0.5);
|
|
1051
|
+
|
|
1052
|
+
// Apply to both blocks
|
|
1053
|
+
engine.block.setFill(block1, sharedGradient);
|
|
1054
|
+
engine.block.setFill(block2, sharedGradient);
|
|
1055
|
+
|
|
1056
|
+
// Change gradient after a delay to show it affects both
|
|
1057
|
+
setTimeout(() => {
|
|
1058
|
+
engine.block.setGradientColorStops(sharedGradient, 'fill/gradient/colors', [
|
|
1059
|
+
{ color: { r: 0, g: 1, b: 0, a: 1 }, stop: 0 },
|
|
1060
|
+
{ color: { r: 1, g: 1, b: 0, a: 1 }, stop: 1 }
|
|
1061
|
+
]);
|
|
1062
|
+
}, 2000);
|
|
1063
|
+
```
|
|
1064
|
+
|
|
1065
|
+
### Duplicating Gradient Fills
|
|
1066
|
+
|
|
1067
|
+
When you duplicate a block, its gradient fill is automatically duplicated, creating an independent copy. Each duplicate has its own fill instance that can be modified independently without affecting the original.
|
|
1068
|
+
|
|
1069
|
+
## Common Use Cases
|
|
1070
|
+
|
|
1071
|
+
### Modern Hero Background (Aurora Effect)
|
|
1072
|
+
|
|
1073
|
+
Create dreamy multi-color gradient backgrounds for hero sections:
|
|
1074
|
+
|
|
1075
|
+
```typescript highlight-aurora-gradient
|
|
1076
|
+
const { block: auroraGradientBlock, fill: auroraGradient } =
|
|
1077
|
+
createShapeWithFill('gradient/linear');
|
|
1078
|
+
|
|
1079
|
+
engine.block.setGradientColorStops(auroraGradient, 'fill/gradient/colors', [
|
|
1080
|
+
{ color: { r: 0.4, g: 0.1, b: 0.8, a: 1 }, stop: 0 },
|
|
1081
|
+
{ color: { r: 0.8, g: 0.2, b: 0.6, a: 1 }, stop: 0.3 },
|
|
1082
|
+
{ color: { r: 1.0, g: 0.5, b: 0.3, a: 1 }, stop: 0.6 },
|
|
1083
|
+
{ color: { r: 1.0, g: 0.8, b: 0.2, a: 1 }, stop: 1 }
|
|
1084
|
+
]);
|
|
1085
|
+
|
|
1086
|
+
engine.block.setFloat(auroraGradient, 'fill/gradient/linear/startPointX', 0);
|
|
1087
|
+
engine.block.setFloat(auroraGradient, 'fill/gradient/linear/startPointY', 0.5);
|
|
1088
|
+
engine.block.setFloat(auroraGradient, 'fill/gradient/linear/endPointX', 1);
|
|
1089
|
+
engine.block.setFloat(auroraGradient, 'fill/gradient/linear/endPointY', 0.5);
|
|
1090
|
+
```
|
|
1091
|
+
|
|
1092
|
+
### Button Highlight Effect
|
|
1093
|
+
|
|
1094
|
+
Use radial gradients to add depth and highlight effects to buttons:
|
|
1095
|
+
|
|
1096
|
+
```typescript highlight-button-gradient
|
|
1097
|
+
const { block: radialHighlightBlock, fill: radialHighlight } =
|
|
1098
|
+
createShapeWithFill('gradient/radial');
|
|
1099
|
+
|
|
1100
|
+
engine.block.setGradientColorStops(radialHighlight, 'fill/gradient/colors', [
|
|
1101
|
+
{ color: { r: 1.0, g: 1.0, b: 1.0, a: 0.3 }, stop: 0 },
|
|
1102
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1.0 }, stop: 1 }
|
|
1103
|
+
]);
|
|
1104
|
+
|
|
1105
|
+
// Set top-left highlight
|
|
1106
|
+
engine.block.setFloat(radialHighlight, 'fill/gradient/radial/centerPointX', 0);
|
|
1107
|
+
engine.block.setFloat(radialHighlight, 'fill/gradient/radial/centerPointY', 0);
|
|
1108
|
+
engine.block.setFloat(radialHighlight, 'fill/gradient/radial/radius', 1.0);
|
|
1109
|
+
```
|
|
1110
|
+
|
|
1111
|
+
### Loading Spinner (Conical)
|
|
1112
|
+
|
|
1113
|
+
Create circular progress indicators and loading animations with conical gradients:
|
|
1114
|
+
|
|
1115
|
+
```typescript highlight-spinner-gradient
|
|
1116
|
+
const { block: conicalSpinnerBlock, fill: conicalSpinner } =
|
|
1117
|
+
createShapeWithFill('gradient/conical');
|
|
1118
|
+
|
|
1119
|
+
engine.block.setGradientColorStops(conicalSpinner, 'fill/gradient/colors', [
|
|
1120
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1 }, stop: 0 },
|
|
1121
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 0 }, stop: 0.75 },
|
|
1122
|
+
{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1 }, stop: 1 }
|
|
1123
|
+
]);
|
|
1124
|
+
|
|
1125
|
+
engine.block.setFloat(
|
|
1126
|
+
conicalSpinner,
|
|
1127
|
+
'fill/gradient/conical/centerPointX',
|
|
1128
|
+
0.5
|
|
1129
|
+
);
|
|
1130
|
+
engine.block.setFloat(
|
|
1131
|
+
conicalSpinner,
|
|
1132
|
+
'fill/gradient/conical/centerPointY',
|
|
1133
|
+
0.5
|
|
1134
|
+
);
|
|
1135
|
+
```
|
|
1136
|
+
|
|
1137
|
+
### Transparency Overlay
|
|
1138
|
+
|
|
1139
|
+
Create smooth transparency effects with alpha channel transitions:
|
|
1140
|
+
|
|
1141
|
+
```typescript highlight-overlay-gradient
|
|
1142
|
+
const { block: overlayGradientBlock, fill: overlayGradient } =
|
|
1143
|
+
createShapeWithFill('gradient/linear');
|
|
1144
|
+
|
|
1145
|
+
engine.block.setGradientColorStops(overlayGradient, 'fill/gradient/colors', [
|
|
1146
|
+
{ color: { r: 0.0, g: 0.0, b: 0.0, a: 0 }, stop: 0 },
|
|
1147
|
+
{ color: { r: 0.0, g: 0.0, b: 0.0, a: 0.7 }, stop: 1 }
|
|
1148
|
+
]);
|
|
1149
|
+
|
|
1150
|
+
engine.block.setFloat(overlayGradient, 'fill/gradient/linear/startPointX', 0.5);
|
|
1151
|
+
engine.block.setFloat(overlayGradient, 'fill/gradient/linear/startPointY', 0);
|
|
1152
|
+
engine.block.setFloat(overlayGradient, 'fill/gradient/linear/endPointX', 0.5);
|
|
1153
|
+
engine.block.setFloat(overlayGradient, 'fill/gradient/linear/endPointY', 1);
|
|
1154
|
+
```
|
|
1155
|
+
|
|
1156
|
+
### Duotone Effect
|
|
1157
|
+
|
|
1158
|
+
Create modern two-color gradient overlays:
|
|
1159
|
+
|
|
1160
|
+
```typescript highlight-duotone-gradient
|
|
1161
|
+
const { block: duotoneGradientBlock, fill: duotoneGradient } =
|
|
1162
|
+
createShapeWithFill('gradient/linear');
|
|
1163
|
+
|
|
1164
|
+
engine.block.setGradientColorStops(duotoneGradient, 'fill/gradient/colors', [
|
|
1165
|
+
{ color: { r: 0.8, g: 0.2, b: 0.9, a: 1 }, stop: 0 },
|
|
1166
|
+
{ color: { r: 0.2, g: 0.9, b: 0.8, a: 1 }, stop: 1 }
|
|
1167
|
+
]);
|
|
1168
|
+
|
|
1169
|
+
engine.block.setFloat(duotoneGradient, 'fill/gradient/linear/startPointX', 0);
|
|
1170
|
+
engine.block.setFloat(duotoneGradient, 'fill/gradient/linear/startPointY', 0);
|
|
1171
|
+
engine.block.setFloat(duotoneGradient, 'fill/gradient/linear/endPointX', 1);
|
|
1172
|
+
engine.block.setFloat(duotoneGradient, 'fill/gradient/linear/endPointY', 1);
|
|
1173
|
+
```
|
|
1174
|
+
|
|
1175
|
+
## Troubleshooting
|
|
1176
|
+
|
|
1177
|
+
### Gradient Not Visible
|
|
1178
|
+
|
|
1179
|
+
If your gradient doesn't appear:
|
|
1180
|
+
|
|
1181
|
+
- Check if fill is enabled: `engine.block.isFillEnabled(block)`
|
|
1182
|
+
- Verify color stops have visible colors (check alpha channels)
|
|
1183
|
+
- Ensure block has valid dimensions (width and height > 0)
|
|
1184
|
+
- Confirm block is in the scene hierarchy
|
|
1185
|
+
- Check if color stops are properly ordered by stop position
|
|
1186
|
+
|
|
1187
|
+
### Gradient Looks Different Than Expected
|
|
1188
|
+
|
|
1189
|
+
If the gradient doesn't look right:
|
|
1190
|
+
|
|
1191
|
+
- Verify color stop positions are between 0.0 and 1.0
|
|
1192
|
+
- Check gradient direction and positioning properties
|
|
1193
|
+
- Ensure correct gradient type is used (linear vs radial vs conical)
|
|
1194
|
+
- Review color space (RGB vs CMYK) for output medium
|
|
1195
|
+
- Confirm alpha values for transparency effects
|
|
1196
|
+
|
|
1197
|
+
### Gradient Direction Wrong
|
|
1198
|
+
|
|
1199
|
+
If the gradient direction is incorrect:
|
|
1200
|
+
|
|
1201
|
+
- For linear gradients, check `startPointX/Y` and `endPointX/Y` values
|
|
1202
|
+
- Remember coordinates are normalized (0.0 to 1.0), not pixels
|
|
1203
|
+
- Verify the block's coordinate system and transformations
|
|
1204
|
+
- Test with simple horizontal or vertical gradients first
|
|
1205
|
+
|
|
1206
|
+
### Memory Leaks
|
|
1207
|
+
|
|
1208
|
+
To prevent memory leaks:
|
|
1209
|
+
|
|
1210
|
+
- Always destroy replaced gradients: `engine.block.destroy(oldFill)`
|
|
1211
|
+
- Don't create gradient fills without attaching them to blocks
|
|
1212
|
+
- Clean up shared gradients when no longer needed
|
|
1213
|
+
|
|
1214
|
+
### Cannot Apply Gradient to Block
|
|
1215
|
+
|
|
1216
|
+
If you can't apply a gradient fill:
|
|
1217
|
+
|
|
1218
|
+
- Verify block supports fills: `engine.block.supportsFill(block)`
|
|
1219
|
+
- Check if block has a shape: Some blocks require shapes
|
|
1220
|
+
- Ensure gradient fill object is valid and not already destroyed
|
|
1221
|
+
|
|
1222
|
+
### Color Stops Not Updating
|
|
1223
|
+
|
|
1224
|
+
If color stops don't update:
|
|
1225
|
+
|
|
1226
|
+
- Verify you're calling `setGradientColorStops()` not `setColor()`
|
|
1227
|
+
- Ensure property name is exactly `'fill/gradient/colors'`
|
|
1228
|
+
- Check that color stop array is properly formatted
|
|
1229
|
+
- Confirm fill ID is correct and still valid
|
|
1230
|
+
|
|
1231
|
+
## API Reference
|
|
1232
|
+
|
|
1233
|
+
### Core Methods
|
|
1234
|
+
|
|
1235
|
+
| Method | Description |
|
|
1236
|
+
| ---------------------------------------------- | --------------------------------------- |
|
|
1237
|
+
| `createFill('gradient/linear')` | Create a new linear gradient fill |
|
|
1238
|
+
| `createFill('gradient/radial')` | Create a new radial gradient fill |
|
|
1239
|
+
| `createFill('gradient/conical')` | Create a new conical gradient fill |
|
|
1240
|
+
| `setFill(block, fill)` | Assign gradient fill to a block |
|
|
1241
|
+
| `getFill(block)` | Get the fill ID from a block |
|
|
1242
|
+
| `setGradientColorStops(fill, property, stops)` | Set gradient color stops array |
|
|
1243
|
+
| `getGradientColorStops(fill, property)` | Get current gradient color stops |
|
|
1244
|
+
| `setFloat(fill, property, value)` | Set gradient position/radius properties |
|
|
1245
|
+
| `getFloat(fill, property)` | Get gradient position/radius values |
|
|
1246
|
+
| `setFillEnabled(block, enabled)` | Enable or disable fill rendering |
|
|
1247
|
+
| `isFillEnabled(block)` | Check if fill is enabled |
|
|
1248
|
+
| `supportsFill(block)` | Check if block supports fills |
|
|
1249
|
+
|
|
1250
|
+
### Linear Gradient Properties
|
|
1251
|
+
|
|
1252
|
+
| Property | Type | Default | Description |
|
|
1253
|
+
| ---------------------------------- | -------------------- | ------- | ------------------------- |
|
|
1254
|
+
| `fill/gradient/colors` | GradientColorStop\[] | - | Array of color stops |
|
|
1255
|
+
| `fill/gradient/linear/startPointX` | Float (0.0-1.0) | 0.5 | Horizontal start position |
|
|
1256
|
+
| `fill/gradient/linear/startPointY` | Float (0.0-1.0) | 0.0 | Vertical start position |
|
|
1257
|
+
| `fill/gradient/linear/endPointX` | Float (0.0-1.0) | 0.5 | Horizontal end position |
|
|
1258
|
+
| `fill/gradient/linear/endPointY` | Float (0.0-1.0) | 1.0 | Vertical end position |
|
|
1259
|
+
|
|
1260
|
+
### Radial Gradient Properties
|
|
1261
|
+
|
|
1262
|
+
| Property | Type | Default | Description |
|
|
1263
|
+
| ----------------------------------- | -------------------- | ------- | ------------------------------- |
|
|
1264
|
+
| `fill/gradient/colors` | GradientColorStop\[] | - | Array of color stops |
|
|
1265
|
+
| `fill/gradient/radial/centerPointX` | Float (0.0-1.0) | 0.0 | Horizontal center position |
|
|
1266
|
+
| `fill/gradient/radial/centerPointY` | Float (0.0-1.0) | 0.0 | Vertical center position |
|
|
1267
|
+
| `fill/gradient/radial/radius` | Float | 1.0 | Radius relative to smaller side |
|
|
1268
|
+
|
|
1269
|
+
### Conical Gradient Properties
|
|
1270
|
+
|
|
1271
|
+
| Property | Type | Default | Description |
|
|
1272
|
+
| ------------------------------------ | -------------------- | ------- | -------------------------- |
|
|
1273
|
+
| `fill/gradient/colors` | GradientColorStop\[] | - | Array of color stops |
|
|
1274
|
+
| `fill/gradient/conical/centerPointX` | Float (0.0-1.0) | 0.0 | Horizontal center position |
|
|
1275
|
+
| `fill/gradient/conical/centerPointY` | Float (0.0-1.0) | 0.0 | Vertical center position |
|
|
1276
|
+
|
|
1277
|
+
**Note**: Conical gradients rotate clockwise starting from the top (12 o'clock). There is no rotation or angle property.
|
|
1278
|
+
|
|
1279
|
+
### GradientColorStop Interface
|
|
1280
|
+
|
|
1281
|
+
```typescript
|
|
1282
|
+
interface GradientColorStop {
|
|
1283
|
+
color: Color; // RGB, CMYK, or Spot color
|
|
1284
|
+
stop: number; // Position (0.0 to 1.0)
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
// Color formats supported:
|
|
1288
|
+
type Color =
|
|
1289
|
+
| { r: number; g: number; b: number; a: number } // RGB
|
|
1290
|
+
| { c: number; m: number; y: number; k: number; tint: number } // CMYK
|
|
1291
|
+
| { name: string; tint: number; externalReference: string }; // Spot
|
|
1292
|
+
```
|
|
1293
|
+
|
|
1294
|
+
## Next Steps
|
|
1295
|
+
|
|
1296
|
+
Now that you understand gradient fills, explore other fill types and color management features:
|
|
1297
|
+
|
|
1298
|
+
- Learn about Color Fills for solid colors
|
|
1299
|
+
- Explore Image Fills for photo content
|
|
1300
|
+
- Understand Fill Overview for the comprehensive fill system
|
|
1301
|
+
- Review Apply Colors for color management across properties
|
|
1302
|
+
- Study Blocks Concept for understanding the block system
|
|
1303
|
+
|
|
1304
|
+
---
|
|
1305
|
+
|
|
1306
|
+
## More Resources
|
|
1307
|
+
|
|
1308
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
1309
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
1310
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
1311
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|