@imgly/codesign-mcp 0.1.5 → 0.1.6
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/README.md +51 -1
- package/assets/docs/guide/SKILL.md +45 -53
- package/assets/docs/guide/animation/create/base.md +234 -243
- package/assets/docs/guide/animation/create/text.md +250 -231
- package/assets/docs/guide/animation/create.md +197 -231
- package/assets/docs/guide/animation/edit.md +196 -271
- package/assets/docs/guide/animation/types.md +182 -185
- package/assets/docs/guide/animation.md +9 -6
- package/assets/docs/guide/api/AssetAPI.md +7 -53
- package/assets/docs/guide/api/BlockAPI.md +725 -648
- package/assets/docs/guide/api/CreativeEngine.md +7 -16
- package/assets/docs/guide/api/EditorAPI.md +32 -93
- package/assets/docs/guide/api/EventAPI.md +1 -2
- package/assets/docs/guide/api/SceneAPI.md +47 -98
- package/assets/docs/guide/api/VariableAPI.md +1 -4
- package/assets/docs/guide/api/node/classes/assetapi.md +1090 -0
- package/assets/docs/guide/api/node/classes/blockapi.md +12965 -0
- package/assets/docs/guide/api/node/classes/creativeengine.md +319 -0
- package/assets/docs/guide/api/node/classes/editorapi.md +3417 -0
- package/assets/docs/guide/api/node/classes/engineactions.md +319 -0
- package/assets/docs/guide/api/node/classes/eventapi.md +56 -0
- package/assets/docs/guide/api/node/classes/sceneapi.md +1370 -0
- package/assets/docs/guide/api/node/classes/variableapi.md +143 -0
- package/assets/docs/guide/api/node/enumerations/compressionformat.md +23 -0
- package/assets/docs/guide/api/node/enumerations/compressionlevel.md +24 -0
- package/assets/docs/guide/api/node/functions/iscmykcolor.md +30 -0
- package/assets/docs/guide/api/node/functions/isrgbacolor.md +30 -0
- package/assets/docs/guide/api/node/functions/isspotcolor.md +30 -0
- package/assets/docs/guide/api/node/interfaces/addvideooptions.md +31 -0
- package/assets/docs/guide/api/node/interfaces/applyassetoptions.md +31 -0
- package/assets/docs/guide/api/node/interfaces/asset.md +30 -0
- package/assets/docs/guide/api/node/interfaces/assetbooleanproperty.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetcmykcolor.md +26 -0
- package/assets/docs/guide/api/node/interfaces/assetcolorproperty.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetcontentaspectratio.md +23 -0
- package/assets/docs/guide/api/node/interfaces/assetdefinition.md +31 -0
- package/assets/docs/guide/api/node/interfaces/assetenumproperty.md +26 -0
- package/assets/docs/guide/api/node/interfaces/assetfixedaspectratio.md +24 -0
- package/assets/docs/guide/api/node/interfaces/assetfixedsize.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetfreeaspectratio.md +22 -0
- package/assets/docs/guide/api/node/interfaces/assetnumberproperty.md +28 -0
- package/assets/docs/guide/api/node/interfaces/assetpayload.md +27 -0
- package/assets/docs/guide/api/node/interfaces/assetquerydata.md +32 -0
- package/assets/docs/guide/api/node/interfaces/assetresult.md +46 -0
- package/assets/docs/guide/api/node/interfaces/assetrgbcolor.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetsource.md +111 -0
- package/assets/docs/guide/api/node/interfaces/assetspotcolor.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetsqueryresult.md +31 -0
- package/assets/docs/guide/api/node/interfaces/assetstringproperty.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetstylepreset.md +39 -0
- package/assets/docs/guide/api/node/interfaces/assetstylepresetanimation.md +23 -0
- package/assets/docs/guide/api/node/interfaces/audiotrackinfo.md +32 -0
- package/assets/docs/guide/api/node/interfaces/blockevent.md +26 -0
- package/assets/docs/guide/api/node/interfaces/blockstateerror.md +26 -0
- package/assets/docs/guide/api/node/interfaces/blockstatepending.md +26 -0
- package/assets/docs/guide/api/node/interfaces/blockstateready.md +25 -0
- package/assets/docs/guide/api/node/interfaces/buffer.md +26 -0
- package/assets/docs/guide/api/node/interfaces/characterinkbox.md +29 -0
- package/assets/docs/guide/api/node/interfaces/cmykcolor.md +34 -0
- package/assets/docs/guide/api/node/interfaces/completeassetresult.md +46 -0
- package/assets/docs/guide/api/node/interfaces/configuration.md +38 -0
- package/assets/docs/guide/api/node/interfaces/dominantcolor.md +25 -0
- package/assets/docs/guide/api/node/interfaces/dominantcolorsoptions.md +23 -0
- package/assets/docs/guide/api/node/interfaces/engineactioninfo.md +24 -0
- package/assets/docs/guide/api/node/interfaces/engineactionsregistry.md +18 -0
- package/assets/docs/guide/api/node/interfaces/engineplugin.md +30 -0
- package/assets/docs/guide/api/node/interfaces/font.md +27 -0
- package/assets/docs/guide/api/node/interfaces/fontmetrics.md +32 -0
- package/assets/docs/guide/api/node/interfaces/gradientcolorstop.md +28 -0
- package/assets/docs/guide/api/node/interfaces/logger.md +39 -0
- package/assets/docs/guide/api/node/interfaces/pageduration.md +23 -0
- package/assets/docs/guide/api/node/interfaces/range.md +23 -0
- package/assets/docs/guide/api/node/interfaces/rgbacolor.md +32 -0
- package/assets/docs/guide/api/node/interfaces/rgbcolor.md +30 -0
- package/assets/docs/guide/api/node/interfaces/settings.md +126 -0
- package/assets/docs/guide/api/node/interfaces/size2.md +21 -0
- package/assets/docs/guide/api/node/interfaces/source.md +24 -0
- package/assets/docs/guide/api/node/interfaces/spotcolor.md +30 -0
- package/assets/docs/guide/api/node/interfaces/textdecorationconfig.md +31 -0
- package/assets/docs/guide/api/node/interfaces/textfontsizeoptions.md +24 -0
- package/assets/docs/guide/api/node/interfaces/textruninfo.md +33 -0
- package/assets/docs/guide/api/node/interfaces/transientresource.md +26 -0
- package/assets/docs/guide/api/node/interfaces/typeface.md +23 -0
- package/assets/docs/guide/api/node/interfaces/vec2.md +21 -0
- package/assets/docs/guide/api/node/interfaces/vec3.md +22 -0
- package/assets/docs/guide/api/node/type-aliases/addimageoptions.md +36 -0
- package/assets/docs/guide/api/node/type-aliases/animationbaselinedirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationblockswipetextdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationeasing.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationentry.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/animationgrowdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationjumploopdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationkenburnsdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationmergetextdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationoptions.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/animationspindirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationspinloopdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationtype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/animationtypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/animationtypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationtypewritertextwritingstyle.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationwipedirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/applicationmimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/assetcolor.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/assetfilter.md +47 -0
- package/assets/docs/guide/api/node/type-aliases/assetgroups.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/assetmetadata.md +42 -0
- package/assets/docs/guide/api/node/type-aliases/assetproperty.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/assetpropertyfilter.md +41 -0
- package/assets/docs/guide/api/node/type-aliases/assetpropertypath.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetanimationproperties.md +34 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetproperties.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetpropertyvalue.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetscalableproperty.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/assettransformpreset.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/asyncuriresolver.md +36 -0
- package/assets/docs/guide/api/node/type-aliases/audioexportoptions.md +43 -0
- package/assets/docs/guide/api/node/type-aliases/audiofromvideooptions.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/audiomimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/blendmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/blockenumtype.md +63 -0
- package/assets/docs/guide/api/node/type-aliases/blockstate.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/blurtype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/blurtypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/blurtypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/booleanoperation.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/boolpropertyname.md +79 -0
- package/assets/docs/guide/api/node/type-aliases/cameraclampingovershootmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/captionhorizontalalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/captionverticalalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/cmyk.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/color.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/colorpickercolormode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/colorpropertyname.md +31 -0
- package/assets/docs/guide/api/node/type-aliases/colorspace.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/contentfillmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmomovehandlevisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmoresizehandlesvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmorotatehandlesvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmoscalehandlesvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/createsceneoptions.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/cutoutoperation.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/cutouttype.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/defaultassetsourceid.md +37 -0
- package/assets/docs/guide/api/node/type-aliases/demoassetsourceid.md +33 -0
- package/assets/docs/guide/api/node/type-aliases/designblockid.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/designblocktype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/designblocktypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/designblocktypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/designunit.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/doubleclickselectionmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/doublepropertyname.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/dropshadowoptions.md +32 -0
- package/assets/docs/guide/api/node/type-aliases/editmode.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/effecttype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/effecttypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/effecttypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/engineactionid.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/enginecustomactionfunction.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/engineplugincontext.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/enumpropertyname.md +59 -0
- package/assets/docs/guide/api/node/type-aliases/enumvalues.md +59 -0
- package/assets/docs/guide/api/node/type-aliases/exportoptions.md +57 -0
- package/assets/docs/guide/api/node/type-aliases/fillpixelstreamorientation.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/filltype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/filltypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/filltypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/floatpropertyname.md +184 -0
- package/assets/docs/guide/api/node/type-aliases/fontsizeunit.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/fontstyle.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/fontweight.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/gradientstoprgba.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/heightmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/hexcolorstring.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/historyid.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/historyupdate.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/horizontalblockalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/horizontalcontentfillalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/horizontaltextalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/imagemimetype.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/intpropertyname.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/liststyle.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/locale.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/loglevel.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/mimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/objecttype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/objecttypelonghand.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/objecttypeshorthand.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/optionalprefix.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/pageguidessource.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/palettecolor.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/positionmode.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/positionxmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/positionymode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/propertytype.md +31 -0
- package/assets/docs/guide/api/node/type-aliases/rgba.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/rolestring.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/scenefontsizeunit.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/scenelayout.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/scenemode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/scope.md +50 -0
- package/assets/docs/guide/api/node/type-aliases/settingboolpropertyname.md +62 -0
- package/assets/docs/guide/api/node/type-aliases/settingcolorpropertyname.md +38 -0
- package/assets/docs/guide/api/node/type-aliases/settingenumpropertyname.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/settingenumtype.md +33 -0
- package/assets/docs/guide/api/node/type-aliases/settingenumvalues.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/settingfloatpropertyname.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/settingintpropertyname.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingkey.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/settingsbool.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingscolor.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/settingscolorrgba.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/settingsenum.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingsfloat.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingsint.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingsstring.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingstringpropertyname.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/settingtype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/settingvaluetype.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/shapetype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/shapetypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/shapetypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/shapevectorpathfillrule.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/sizemode.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/sortingorder.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/sourcesetpropertyname.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/splitoptions.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/stringpropertyname.md +43 -0
- package/assets/docs/guide/api/node/type-aliases/strokecap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokecornergeometry.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokedashendcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokedashstartcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokeendcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokeposition.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokestartcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokestyle.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/syncuriresolver.md +31 -0
- package/assets/docs/guide/api/node/type-aliases/textanimationwritingstyle.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/textcase.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/textdecorationline.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/textdecorationstyle.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/textverticalalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/timelinetrackvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/touchpinchaction.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/touchrotateaction.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/typefacedefinition.md +41 -0
- package/assets/docs/guide/api/node/type-aliases/verticalblockalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/verticalcontentfillalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/videoexportoptions.md +54 -0
- package/assets/docs/guide/api/node/type-aliases/videomimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/widthmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/xywh.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/zoomautofitaxis.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/zoomoptions.md +27 -0
- package/assets/docs/guide/api/node/variables/animation_types.md +21 -0
- package/assets/docs/guide/api/node/variables/animationbaselinedirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationblockswipetextdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationeasingvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationgrowdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationjumploopdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationkenburnsdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationmergetextdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationspindirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationspinloopdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationtypewritertextwritingstylevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationwipedirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/blendmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/blur_types.md +21 -0
- package/assets/docs/guide/api/node/variables/cameraclampingovershootmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/captionhorizontalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/captionverticalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/colorpickercolormodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/contentfillmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmomovehandlevisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmoresizehandlesvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmorotatehandlesvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmoscalehandlesvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/cutouttypevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/design_block_types.md +21 -0
- package/assets/docs/guide/api/node/variables/doubleclickselectionmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/effect_types.md +21 -0
- package/assets/docs/guide/api/node/variables/fill_types.md +21 -0
- package/assets/docs/guide/api/node/variables/fillpixelstreamorientationvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/heightmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/horizontalcontentfillalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/loglevel.md +37 -0
- package/assets/docs/guide/api/node/variables/mimetype.md +41 -0
- package/assets/docs/guide/api/node/variables/pageguidessourcevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/positionxmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/positionymodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenedesignunitvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenefontsizeunitvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenelayoutvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenemodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/shape_types.md +21 -0
- package/assets/docs/guide/api/node/variables/shapevectorpathfillrulevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokecapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokecornergeometryvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokedashendcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokedashstartcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokeendcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokepositionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokestartcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokestylevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/textanimationwritingstylevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/texthorizontalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/textverticalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/timelinetrackvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/touchpinchactionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/touchrotateactionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/verticalcontentfillalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/widthmodevalues.md +18 -0
- package/assets/docs/guide/api/types.md +5 -9
- package/assets/docs/guide/api-reference/overview.md +7 -7
- package/assets/docs/guide/automation/auto-resize.md +263 -300
- package/assets/docs/guide/automation/data-merge.md +246 -275
- package/assets/docs/guide/automation/design-generation.md +102 -31
- package/assets/docs/guide/automation/multi-image-generation.md +758 -0
- package/assets/docs/guide/automation/overview.md +21 -4
- package/assets/docs/guide/automation.md +10 -5
- package/assets/docs/guide/capabilities.md +6 -4
- package/assets/docs/guide/colors/adjust.md +247 -249
- package/assets/docs/guide/colors/apply.md +127 -138
- package/assets/docs/guide/colors/basics.md +126 -150
- package/assets/docs/guide/colors/conversion.md +171 -177
- package/assets/docs/guide/colors/create-color-palette.md +244 -245
- package/assets/docs/guide/colors/extract-colors.md +144 -0
- package/assets/docs/guide/colors/for-print/cmyk.md +292 -352
- package/assets/docs/guide/colors/for-print/spot.md +521 -578
- package/assets/docs/guide/colors/for-print.md +9 -4
- package/assets/docs/guide/colors/for-screen/p3.md +12 -10
- package/assets/docs/guide/colors/for-screen/srgb.md +107 -133
- package/assets/docs/guide/colors/for-screen.md +9 -4
- package/assets/docs/guide/colors/overview.md +6 -4
- package/assets/docs/guide/colors/replace.md +381 -419
- package/assets/docs/guide/colors.md +9 -4
- package/assets/docs/guide/compatibility.md +7 -5
- package/assets/docs/guide/concepts/architecture.md +17 -15
- package/assets/docs/guide/concepts/assets.md +152 -140
- package/assets/docs/guide/concepts/blocks.md +227 -323
- package/assets/docs/guide/concepts/buffers.md +147 -276
- package/assets/docs/guide/concepts/design-units.md +95 -145
- package/assets/docs/guide/concepts/editing-workflow.md +69 -183
- package/assets/docs/guide/concepts/events.md +80 -122
- package/assets/docs/guide/concepts/headless-mode.md +237 -0
- package/assets/docs/guide/concepts/pages.md +137 -127
- package/assets/docs/guide/concepts/resources.md +156 -217
- package/assets/docs/guide/concepts/scenes.md +191 -210
- package/assets/docs/guide/concepts/templating.md +118 -74
- package/assets/docs/guide/concepts/terminology.md +49 -47
- package/assets/docs/guide/concepts/undo-and-history.md +229 -303
- package/assets/docs/guide/concepts.md +9 -7
- package/assets/docs/guide/configuration.md +252 -380
- package/assets/docs/guide/conversion/overview.md +33 -4
- package/assets/docs/guide/conversion/to-base64.md +127 -167
- package/assets/docs/guide/conversion/to-pdf.md +24 -474
- package/assets/docs/guide/conversion/to-png.md +168 -211
- package/assets/docs/guide/conversion.md +9 -4
- package/assets/docs/guide/create-audio/audio/add-music.md +301 -327
- package/assets/docs/guide/create-audio/audio/add-sound-effects.md +475 -359
- package/assets/docs/guide/create-audio/audio/loop.md +232 -272
- package/assets/docs/guide/create-composition/add-background.md +237 -239
- package/assets/docs/guide/create-composition/blend-modes.md +118 -209
- package/assets/docs/guide/create-composition/collage.md +538 -320
- package/assets/docs/guide/create-composition/group-and-ungroup.md +216 -261
- package/assets/docs/guide/create-composition/layer-management.md +219 -257
- package/assets/docs/guide/create-composition/layout.md +513 -315
- package/assets/docs/guide/create-composition/lock-design.md +90 -109
- package/assets/docs/guide/create-composition/multi-page.md +133 -113
- package/assets/docs/guide/create-composition/overview.md +16 -4
- package/assets/docs/guide/create-composition/programmatic.md +288 -344
- package/assets/docs/guide/create-composition.md +10 -5
- package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +443 -569
- package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +567 -470
- package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +179 -516
- package/assets/docs/guide/create-templates/add-dynamic-content.md +226 -224
- package/assets/docs/guide/create-templates/add-to-template-library.md +183 -193
- package/assets/docs/guide/create-templates/edit-or-remove.md +297 -303
- package/assets/docs/guide/create-templates/from-scratch.md +207 -268
- package/assets/docs/guide/create-templates/import/from-scene-file.md +158 -236
- package/assets/docs/guide/create-templates/import.md +145 -161
- package/assets/docs/guide/create-templates/lock.md +42 -295
- package/assets/docs/guide/create-templates/overview.md +33 -4
- package/assets/docs/guide/create-templates.md +9 -5
- package/assets/docs/guide/create-video/audio/adjust-speed.md +157 -207
- package/assets/docs/guide/create-video/audio/adjust-volume.md +116 -227
- package/assets/docs/guide/create-video/control.md +352 -193
- package/assets/docs/guide/create-video/limitations.md +175 -280
- package/assets/docs/guide/create-video.md +11 -10
- package/assets/docs/guide/edit-image/add-watermark.md +283 -330
- package/assets/docs/guide/edit-image/overview.md +29 -4
- package/assets/docs/guide/edit-image/remove-bg.md +283 -337
- package/assets/docs/guide/edit-image/replace-colors.md +424 -502
- package/assets/docs/guide/edit-image/transform/crop.md +463 -402
- package/assets/docs/guide/edit-image/transform/flip.md +353 -0
- package/assets/docs/guide/edit-image/transform/move.md +143 -100
- package/assets/docs/guide/edit-image/transform/resize.md +118 -88
- package/assets/docs/guide/edit-image/transform/rotate.md +132 -165
- package/assets/docs/guide/edit-image/transform/scale.md +230 -228
- package/assets/docs/guide/edit-image/transform.md +10 -5
- package/assets/docs/guide/edit-image.md +11 -7
- package/assets/docs/guide/edit-video/add-captions.md +344 -421
- package/assets/docs/guide/edit-video/add-watermark.md +312 -258
- package/assets/docs/guide/edit-video/join-and-arrange.md +237 -371
- package/assets/docs/guide/edit-video/redaction.md +419 -385
- package/assets/docs/guide/edit-video/split.md +243 -493
- package/assets/docs/guide/edit-video/transform/crop.md +21 -352
- package/assets/docs/guide/edit-video/transform/flip.md +102 -76
- package/assets/docs/guide/edit-video/transform/move.md +258 -310
- package/assets/docs/guide/edit-video/transform/resize.md +264 -428
- package/assets/docs/guide/edit-video/transform/rotate.md +265 -228
- package/assets/docs/guide/edit-video/transform/scale.md +320 -417
- package/assets/docs/guide/edit-video/transform.md +10 -6
- package/assets/docs/guide/edit-video/trim.md +448 -494
- package/assets/docs/guide/engine-interface.md +51 -62
- package/assets/docs/guide/export-save-publish/create-thumbnail.md +148 -184
- package/assets/docs/guide/export-save-publish/export/compress.md +161 -559
- package/assets/docs/guide/export-save-publish/export/overview.md +224 -373
- package/assets/docs/guide/export-save-publish/export/partial-export.md +386 -577
- package/assets/docs/guide/export-save-publish/export/size-limits.md +215 -310
- package/assets/docs/guide/export-save-publish/export/to-jpeg.md +132 -213
- package/assets/docs/guide/export-save-publish/export/to-pdf.md +139 -267
- package/assets/docs/guide/export-save-publish/export/to-png.md +121 -165
- package/assets/docs/guide/export-save-publish/export/to-raw-data.md +187 -234
- package/assets/docs/guide/export-save-publish/export/to-webp.md +160 -190
- package/assets/docs/guide/export-save-publish/export/with-color-mask.md +359 -203
- package/assets/docs/guide/export-save-publish/export.md +14 -11
- package/assets/docs/guide/export-save-publish/for-printing.md +141 -237
- package/assets/docs/guide/export-save-publish/for-social-media.md +124 -261
- package/assets/docs/guide/export-save-publish/pre-export-validation.md +436 -522
- package/assets/docs/guide/export-save-publish/save.md +167 -226
- package/assets/docs/guide/export-save-publish/store-custom-metadata.md +97 -162
- package/assets/docs/guide/file-format-support.md +9 -9
- package/assets/docs/guide/fills/color.md +370 -347
- package/assets/docs/guide/fills/image.md +167 -196
- package/assets/docs/guide/fills/overview.md +6 -4
- package/assets/docs/guide/fills/video.md +286 -438
- package/assets/docs/guide/fills.md +12 -8
- package/assets/docs/guide/filters-and-effects/apply.md +598 -664
- package/assets/docs/guide/filters-and-effects/blur.md +261 -159
- package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +194 -293
- package/assets/docs/guide/filters-and-effects/create-custom-filters.md +548 -466
- package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +176 -244
- package/assets/docs/guide/filters-and-effects/distortion.md +317 -384
- package/assets/docs/guide/filters-and-effects/duotone.md +221 -217
- package/assets/docs/guide/filters-and-effects/gradients.md +670 -813
- package/assets/docs/guide/filters-and-effects/overview.md +7 -7
- package/assets/docs/guide/filters-and-effects/support.md +97 -132
- package/assets/docs/guide/filters-and-effects.md +11 -6
- package/assets/docs/guide/get-started/agent-skills.md +20 -18
- package/assets/docs/guide/get-started/build-with-ai.md +7 -4
- package/assets/docs/guide/get-started/bun.md +219 -0
- package/assets/docs/guide/get-started/deno.md +161 -0
- package/assets/docs/guide/get-started/mcp-server.md +6 -4
- package/assets/docs/guide/get-started/overview.md +11 -6
- package/assets/docs/guide/get-started/vanilla-aws-lambda.md +506 -0
- package/assets/docs/guide/get-started/vanilla-clone-github-project.md +124 -0
- package/assets/docs/guide/get-started/vanilla.md +235 -0
- package/assets/docs/guide/guides/export-save-publish/export/audio.md +80 -66
- package/assets/docs/guide/guides.md +10 -9
- package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +259 -288
- package/assets/docs/guide/import-media/concepts.md +20 -38
- package/assets/docs/guide/import-media/content-json-schema.md +145 -125
- package/assets/docs/guide/import-media/default-assets.md +113 -161
- package/assets/docs/guide/import-media/edit-or-remove-assets.md +391 -395
- package/assets/docs/guide/import-media/file-format-support.md +78 -61
- package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +273 -244
- package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +152 -222
- package/assets/docs/guide/import-media/from-remote-source.md +9 -11
- package/assets/docs/guide/import-media/overview.md +5 -5
- package/assets/docs/guide/import-media/retrieve-mimetype.md +216 -108
- package/assets/docs/guide/import-media/size-limits.md +6 -4
- package/assets/docs/guide/import-media/source-sets.md +190 -251
- package/assets/docs/guide/import-media.md +10 -8
- package/assets/docs/guide/insert-media/audio.md +202 -195
- package/assets/docs/guide/insert-media/images.md +190 -188
- package/assets/docs/guide/insert-media/position-and-align.md +284 -551
- package/assets/docs/guide/insert-media/shapes-or-stickers.md +402 -418
- package/assets/docs/guide/insert-media/videos.md +236 -203
- package/assets/docs/guide/insert-media.md +10 -5
- package/assets/docs/guide/key-capabilities.md +36 -4
- package/assets/docs/guide/key-concepts.md +6 -4
- package/assets/docs/guide/licensing.md +6 -4
- package/assets/docs/guide/llms-txt.md +11 -7
- package/assets/docs/guide/open-the-editor/blank-canvas.md +102 -63
- package/assets/docs/guide/open-the-editor/from-image.md +157 -127
- package/assets/docs/guide/open-the-editor/from-template.md +131 -92
- package/assets/docs/guide/open-the-editor/from-video.md +204 -212
- package/assets/docs/guide/open-the-editor/import-design/from-archive.md +310 -360
- package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +716 -513
- package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +667 -695
- package/assets/docs/guide/open-the-editor/import-design.md +228 -266
- package/assets/docs/guide/open-the-editor/load-scene.md +72 -68
- package/assets/docs/guide/open-the-editor/overview.md +6 -4
- package/assets/docs/guide/open-the-editor/uri-resolver.md +160 -251
- package/assets/docs/guide/open-the-editor.md +11 -9
- package/assets/docs/guide/outlines/overview.md +12 -4
- package/assets/docs/guide/outlines/shadows-and-glows.md +105 -410
- package/assets/docs/guide/outlines/strokes.md +218 -166
- package/assets/docs/guide/outlines.md +9 -4
- package/assets/docs/guide/overview.md +14 -6
- package/assets/docs/guide/performance.md +220 -113
- package/assets/docs/guide/plugins/print-ready-pdf.md +273 -368
- package/assets/docs/guide/plugins.md +10 -16
- package/assets/docs/guide/rules/asset-handling.md +7 -18
- package/assets/docs/guide/rules/common-pitfalls.md +25 -42
- package/assets/docs/guide/rules/content-fill-mode.md +4 -4
- package/assets/docs/guide/rules/enforce-brand-guidelines.md +398 -567
- package/assets/docs/guide/rules/lock-content.md +188 -231
- package/assets/docs/guide/rules/moderate-content.md +580 -571
- package/assets/docs/guide/rules/overview.md +345 -380
- package/assets/docs/guide/rules/silent-init-errors.md +4 -1
- package/assets/docs/guide/rules/verify-properties-before-use.md +2 -11
- package/assets/docs/guide/rules.md +10 -5
- package/assets/docs/guide/security.md +7 -5
- package/assets/docs/guide/serve-assets.md +57 -284
- package/assets/docs/guide/settings.md +96 -74
- package/assets/docs/guide/shapes.md +10 -5
- package/assets/docs/guide/stickers-and-shapes/combine.md +397 -583
- package/assets/docs/guide/stickers-and-shapes/create-cutout.md +181 -268
- package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +418 -431
- package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +147 -226
- package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +138 -123
- package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +151 -149
- package/assets/docs/guide/stickers.md +9 -4
- package/assets/docs/guide/text/add.md +470 -482
- package/assets/docs/guide/text/adjust-spacing.md +179 -214
- package/assets/docs/guide/text/auto-size.md +210 -271
- package/assets/docs/guide/text/edit.md +294 -309
- package/assets/docs/guide/text/effects.md +154 -190
- package/assets/docs/guide/text/emojis.md +199 -232
- package/assets/docs/guide/text/language-support.md +369 -382
- package/assets/docs/guide/text/overview.md +41 -4
- package/assets/docs/guide/text/styling.md +239 -273
- package/assets/docs/guide/text/text-designs.md +405 -544
- package/assets/docs/guide/text.md +10 -9
- package/assets/docs/guide/to-v1-19.md +12 -10
- package/assets/docs/guide/upgrade.md +8 -9
- package/assets/docs/guide/use-templates/apply-template.md +174 -163
- package/assets/docs/guide/use-templates/generate.md +171 -152
- package/assets/docs/guide/use-templates/overview.md +32 -4
- package/assets/docs/guide/use-templates/programmatic.md +266 -301
- package/assets/docs/guide/use-templates/replace-content.md +181 -171
- package/assets/docs/guide/what-is-cesdk.md +71 -282
- package/assets/docs/handbook/SKILL.md +24 -0
- package/dist/assets/inline.generated.d.ts.map +1 -1
- package/dist/assets/inline.generated.js +544 -406
- package/dist/assets/inline.generated.js.map +1 -1
- package/dist/assets/load-browser.d.ts +1 -1
- package/dist/assets/load-browser.js +1 -1
- package/dist/assets/load-browser.js.map +1 -1
- package/dist/assets/load-node.d.ts +1 -1
- package/dist/assets/load-node.js +1 -1
- package/dist/assets/load-node.js.map +1 -1
- package/dist/cli/http.d.ts.map +1 -1
- package/dist/cli/http.js +4 -28
- package/dist/cli/http.js.map +1 -1
- package/dist/cli/redirect-console.d.ts +1 -1
- package/dist/cli/redirect-console.d.ts.map +1 -1
- package/dist/cli/redirect-console.js +12 -3
- package/dist/cli/redirect-console.js.map +1 -1
- package/dist/cli/resolve-license.d.ts.map +1 -1
- package/dist/cli/resolve-license.js +8 -6
- package/dist/cli/resolve-license.js.map +1 -1
- package/dist/cli/stdio.d.ts +9 -0
- package/dist/cli/stdio.d.ts.map +1 -1
- package/dist/cli/stdio.js +48 -4
- package/dist/cli/stdio.js.map +1 -1
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +11 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -1
- package/dist/config.js.map +1 -1
- package/dist/diagnostics/bundle.d.ts +10 -0
- package/dist/diagnostics/bundle.d.ts.map +1 -0
- package/dist/diagnostics/bundle.js +148 -0
- package/dist/diagnostics/bundle.js.map +1 -0
- package/dist/diagnostics/compose.d.ts +3 -0
- package/dist/diagnostics/compose.d.ts.map +1 -0
- package/dist/diagnostics/compose.js +15 -0
- package/dist/diagnostics/compose.js.map +1 -0
- package/dist/diagnostics/events.d.ts +34 -0
- package/dist/diagnostics/events.d.ts.map +1 -0
- package/dist/diagnostics/events.js +3 -0
- package/dist/diagnostics/events.js.map +1 -0
- package/dist/diagnostics/file-sink.d.ts +38 -0
- package/dist/diagnostics/file-sink.d.ts.map +1 -0
- package/dist/diagnostics/file-sink.js +157 -0
- package/dist/diagnostics/file-sink.js.map +1 -0
- package/dist/diagnostics/redact.d.ts +7 -0
- package/dist/diagnostics/redact.d.ts.map +1 -0
- package/dist/diagnostics/redact.js +43 -0
- package/dist/diagnostics/redact.js.map +1 -0
- package/dist/diagnostics/tool-call-adapter.d.ts +4 -0
- package/dist/diagnostics/tool-call-adapter.d.ts.map +1 -0
- package/dist/diagnostics/tool-call-adapter.js +21 -0
- package/dist/diagnostics/tool-call-adapter.js.map +1 -0
- package/dist/engine/cesdk-adapter.d.ts +5 -1
- package/dist/engine/cesdk-adapter.d.ts.map +1 -1
- package/dist/engine/cesdk-adapter.js +9 -2
- package/dist/engine/cesdk-adapter.js.map +1 -1
- package/dist/engine/index.d.ts +1 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +4 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/scene-resource-schemes.d.ts +2 -0
- package/dist/engine/scene-resource-schemes.d.ts.map +1 -0
- package/dist/engine/scene-resource-schemes.js +20 -0
- package/dist/engine/scene-resource-schemes.js.map +1 -0
- package/dist/http/server.d.ts +0 -6
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +1 -2
- package/dist/http/server.js.map +1 -1
- package/dist/server.d.ts +0 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -60
- package/dist/server.js.map +1 -1
- package/dist/test/scripts/changelog-add.d.ts +8 -0
- package/dist/test/scripts/changelog-add.d.ts.map +1 -0
- package/dist/test/scripts/changelog-add.js +50 -0
- package/dist/test/scripts/changelog-add.js.map +1 -0
- package/dist/test/scripts/changelog-collate.d.ts +38 -0
- package/dist/test/scripts/changelog-collate.d.ts.map +1 -0
- package/dist/test/scripts/changelog-collate.js +171 -0
- package/dist/test/scripts/changelog-collate.js.map +1 -0
- package/dist/test/test/changelog.test.d.ts +2 -0
- package/dist/test/test/changelog.test.d.ts.map +1 -0
- package/dist/test/test/changelog.test.js +293 -0
- package/dist/test/test/changelog.test.js.map +1 -0
- package/dist/test/test/cli/dispatcher.test.js +10 -3
- package/dist/test/test/cli/dispatcher.test.js.map +1 -1
- package/dist/test/test/cli/redirect-console.test.js +31 -0
- package/dist/test/test/cli/redirect-console.test.js.map +1 -1
- package/dist/test/test/cli/resolve-license.test.js +10 -1
- package/dist/test/test/cli/resolve-license.test.js.map +1 -1
- package/dist/test/test/cli/stdio-diagnostics.test.d.ts +2 -0
- package/dist/test/test/cli/stdio-diagnostics.test.d.ts.map +1 -0
- package/dist/test/test/cli/stdio-diagnostics.test.js +31 -0
- package/dist/test/test/cli/stdio-diagnostics.test.js.map +1 -0
- package/dist/test/test/config.test.js +17 -13
- package/dist/test/test/config.test.js.map +1 -1
- package/dist/test/test/diagnostics/bundle.test.d.ts +2 -0
- package/dist/test/test/diagnostics/bundle.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/bundle.test.js +53 -0
- package/dist/test/test/diagnostics/bundle.test.js.map +1 -0
- package/dist/test/test/diagnostics/compose.test.d.ts +2 -0
- package/dist/test/test/diagnostics/compose.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/compose.test.js +31 -0
- package/dist/test/test/diagnostics/compose.test.js.map +1 -0
- package/dist/test/test/diagnostics/file-sink.test.d.ts +2 -0
- package/dist/test/test/diagnostics/file-sink.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/file-sink.test.js +113 -0
- package/dist/test/test/diagnostics/file-sink.test.js.map +1 -0
- package/dist/test/test/diagnostics/redact.test.d.ts +2 -0
- package/dist/test/test/diagnostics/redact.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/redact.test.js +59 -0
- package/dist/test/test/diagnostics/redact.test.js.map +1 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts +2 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.js +34 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.js.map +1 -0
- package/dist/test/test/engine/cesdk-adapter.test.d.ts +2 -0
- package/dist/test/test/engine/cesdk-adapter.test.d.ts.map +1 -0
- package/dist/test/test/engine/cesdk-adapter.test.js +32 -0
- package/dist/test/test/engine/cesdk-adapter.test.js.map +1 -0
- package/dist/test/test/handbook-contract.test.js +6 -2
- package/dist/test/test/handbook-contract.test.js.map +1 -1
- package/dist/test/test/http/server.test.js +0 -36
- package/dist/test/test/http/server.test.js.map +1 -1
- package/dist/test/test/http/workspace-auth.test.js +0 -1
- package/dist/test/test/http/workspace-auth.test.js.map +1 -1
- package/dist/test/test/server.test.js +0 -40
- package/dist/test/test/server.test.js.map +1 -1
- package/dist/test/test/tools/edit-harness.d.ts +14 -0
- package/dist/test/test/tools/edit-harness.d.ts.map +1 -0
- package/dist/test/test/tools/edit-harness.js +30 -0
- package/dist/test/test/tools/edit-harness.js.map +1 -0
- package/dist/test/test/tools/edit.telemetry.test.d.ts +2 -0
- package/dist/test/test/tools/edit.telemetry.test.d.ts.map +1 -0
- package/dist/test/test/tools/edit.telemetry.test.js +46 -0
- package/dist/test/test/tools/edit.telemetry.test.js.map +1 -0
- package/dist/test/test/tools/export-harness.d.ts +13 -0
- package/dist/test/test/tools/export-harness.d.ts.map +1 -0
- package/dist/test/test/tools/export-harness.js +27 -0
- package/dist/test/test/tools/export-harness.js.map +1 -0
- package/dist/test/test/tools/export.telemetry.test.d.ts +2 -0
- package/dist/test/test/tools/export.telemetry.test.d.ts.map +1 -0
- package/dist/test/test/tools/export.telemetry.test.js +65 -0
- package/dist/test/test/tools/export.telemetry.test.js.map +1 -0
- package/dist/test/test/tools/import.test.d.ts +2 -0
- package/dist/test/test/tools/import.test.d.ts.map +1 -0
- package/dist/test/test/tools/import.test.js +122 -0
- package/dist/test/test/tools/import.test.js.map +1 -0
- package/dist/test/test/tools/index.test.js +78 -16
- package/dist/test/test/tools/index.test.js.map +1 -1
- package/dist/test/test/tools/load.integration.test.d.ts +2 -0
- package/dist/test/test/tools/load.integration.test.d.ts.map +1 -0
- package/dist/test/test/tools/load.integration.test.js +165 -0
- package/dist/test/test/tools/load.integration.test.js.map +1 -0
- package/dist/test/test/tools/load.test.d.ts +2 -0
- package/dist/test/test/tools/load.test.d.ts.map +1 -0
- package/dist/test/test/tools/load.test.js +387 -0
- package/dist/test/test/tools/load.test.js.map +1 -0
- package/dist/test/test/tools/preview-harness.d.ts +9 -0
- package/dist/test/test/tools/preview-harness.d.ts.map +1 -0
- package/dist/test/test/tools/preview-harness.js +23 -0
- package/dist/test/test/tools/preview-harness.js.map +1 -0
- package/dist/test/test/tools/preview.telemetry.test.d.ts +2 -0
- package/dist/test/test/tools/preview.telemetry.test.d.ts.map +1 -0
- package/dist/test/test/tools/preview.telemetry.test.js +36 -0
- package/dist/test/test/tools/preview.telemetry.test.js.map +1 -0
- package/dist/test/test/tools/schema-best-practices.d.ts +13 -0
- package/dist/test/test/tools/schema-best-practices.d.ts.map +1 -0
- package/dist/test/test/tools/schema-best-practices.js +169 -0
- package/dist/test/test/tools/schema-best-practices.js.map +1 -0
- package/dist/test/test/tools/schema-best-practices.test.d.ts +3 -0
- package/dist/test/test/tools/schema-best-practices.test.d.ts.map +1 -0
- package/dist/test/test/tools/schema-best-practices.test.js +194 -0
- package/dist/test/test/tools/schema-best-practices.test.js.map +1 -0
- package/dist/test/test/tools/spans.test.d.ts +2 -0
- package/dist/test/test/tools/spans.test.d.ts.map +1 -0
- package/dist/test/test/tools/spans.test.js +84 -0
- package/dist/test/test/tools/spans.test.js.map +1 -0
- package/dist/test/test/viewer/cesdk-cdn.test.d.ts +2 -0
- package/dist/test/test/viewer/cesdk-cdn.test.d.ts.map +1 -0
- package/dist/test/test/viewer/cesdk-cdn.test.js +19 -0
- package/dist/test/test/viewer/cesdk-cdn.test.js.map +1 -0
- package/dist/test/test/viewer/config-route.test.d.ts +2 -0
- package/dist/test/test/viewer/config-route.test.d.ts.map +1 -0
- package/dist/test/test/viewer/config-route.test.js +28 -0
- package/dist/test/test/viewer/config-route.test.js.map +1 -0
- package/dist/test/test/viewer/spa-version.test.d.ts +2 -0
- package/dist/test/test/viewer/spa-version.test.d.ts.map +1 -0
- package/dist/test/test/viewer/spa-version.test.js +14 -0
- package/dist/test/test/viewer/spa-version.test.js.map +1 -0
- package/dist/test/test/workspace/content-hash.test.d.ts +2 -0
- package/dist/test/test/workspace/content-hash.test.d.ts.map +1 -0
- package/dist/test/test/workspace/content-hash.test.js +17 -0
- package/dist/test/test/workspace/content-hash.test.js.map +1 -0
- package/dist/test/tsconfig.test.tsbuildinfo +1 -1
- package/dist/test/vitest.config.js +1 -1
- package/dist/test/vitest.config.js.map +1 -1
- package/dist/tools/asset-generate.d.ts.map +1 -1
- package/dist/tools/asset-generate.js +1 -8
- package/dist/tools/asset-generate.js.map +1 -1
- package/dist/tools/edit.d.ts +3 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +145 -96
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/export.d.ts +3 -0
- package/dist/tools/export.d.ts.map +1 -1
- package/dist/tools/export.js +146 -108
- package/dist/tools/export.js.map +1 -1
- package/dist/tools/import.d.ts +12 -0
- package/dist/tools/import.d.ts.map +1 -0
- package/dist/tools/import.js +144 -0
- package/dist/tools/import.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +44 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/load.d.ts +26 -0
- package/dist/tools/load.d.ts.map +1 -0
- package/dist/tools/load.js +400 -0
- package/dist/tools/load.js.map +1 -0
- package/dist/tools/preview.d.ts +3 -0
- package/dist/tools/preview.d.ts.map +1 -1
- package/dist/tools/preview.js +79 -44
- package/dist/tools/preview.js.map +1 -1
- package/dist/tools/result.d.ts +1 -1
- package/dist/tools/result.js +2 -2
- package/dist/tools/result.js.map +1 -1
- package/dist/tools/spans.d.ts +45 -0
- package/dist/tools/spans.d.ts.map +1 -0
- package/dist/tools/spans.js +77 -0
- package/dist/tools/spans.js.map +1 -0
- package/dist/tools/telemetry-wrapper.d.ts +4 -0
- package/dist/tools/telemetry-wrapper.d.ts.map +1 -0
- package/dist/tools/telemetry-wrapper.js +43 -0
- package/dist/tools/telemetry-wrapper.js.map +1 -0
- package/dist/viewer/cesdk-cdn.d.ts +16 -0
- package/dist/viewer/cesdk-cdn.d.ts.map +1 -0
- package/dist/viewer/cesdk-cdn.js +30 -0
- package/dist/viewer/cesdk-cdn.js.map +1 -0
- package/dist/viewer/router.d.ts +6 -0
- package/dist/viewer/router.d.ts.map +1 -1
- package/dist/viewer/router.js +4 -1
- package/dist/viewer/router.js.map +1 -1
- package/dist/viewer/spa-assets.generated.d.ts.map +1 -1
- package/dist/viewer/spa-assets.generated.js +2 -3
- package/dist/viewer/spa-assets.generated.js.map +1 -1
- package/dist/workspace/content-hash.d.ts +2 -0
- package/dist/workspace/content-hash.d.ts.map +1 -0
- package/dist/workspace/content-hash.js +15 -0
- package/dist/workspace/content-hash.js.map +1 -0
- package/package.json +18 -9
- package/assets/docs/guide/actions.md +0 -1038
- package/assets/docs/guide/animation/overview.md +0 -22
- package/assets/docs/guide/automation/batch-processing.md +0 -474
- package/assets/docs/guide/browser-support.md +0 -38
- package/assets/docs/guide/concepts/edit-modes.md +0 -431
- package/assets/docs/guide/concepts/headless-mode/browser.md +0 -291
- package/assets/docs/guide/create-audio/audio.md +0 -336
- package/assets/docs/guide/create-video/overview.md +0 -224
- package/assets/docs/guide/create-video/timeline-editor.md +0 -622
- package/assets/docs/guide/create-video/update-caption-presets.md +0 -676
- package/assets/docs/guide/edit-image/vectorize.md +0 -204
- package/assets/docs/guide/export-save-publish/export/to-html5.md +0 -474
- package/assets/docs/guide/export-save-publish/export/to-mp4.md +0 -364
- package/assets/docs/guide/get-started/vanilla-js/quickstart.md +0 -175
- package/assets/docs/guide/grid-and-rulers.md +0 -222
- package/assets/docs/guide/guides/text/rendering-internals.md +0 -796
- package/assets/docs/guide/import-media/asset-library.md +0 -23
- package/assets/docs/guide/import-media/asset-panel/basics.md +0 -324
- package/assets/docs/guide/import-media/asset-panel/customize.md +0 -478
- package/assets/docs/guide/import-media/asset-panel/thumbnails.md +0 -633
- package/assets/docs/guide/import-media/capture-from-camera/record-video.md +0 -137
- package/assets/docs/guide/import-media/capture-from-camera.md +0 -20
- package/assets/docs/guide/import-media/from-local-source/user-upload.md +0 -438
- package/assets/docs/guide/import-media/from-local-source.md +0 -20
- package/assets/docs/guide/import-media/from-remote-source/getty-images.md +0 -627
- package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +0 -625
- package/assets/docs/guide/import-media/from-remote-source/pexels.md +0 -692
- package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +0 -497
- package/assets/docs/guide/import-media/from-remote-source/third-party.md +0 -51
- package/assets/docs/guide/import-media/from-remote-source/unsplash.md +0 -914
- package/assets/docs/guide/import-media/from-remote-source/your-server.md +0 -764
- package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +0 -228
- package/assets/docs/guide/open-the-editor/set-zoom-level.md +0 -303
- package/assets/docs/guide/plugins/asset-sources.md +0 -553
- package/assets/docs/guide/starterkits/3d-mockup-editor.md +0 -748
- package/assets/docs/guide/starterkits/advanced-editor.md +0 -698
- package/assets/docs/guide/starterkits/advanced-video-editor.md +0 -696
- package/assets/docs/guide/starterkits/ai-editor.md +0 -749
- package/assets/docs/guide/starterkits/airtable-image-editor.md +0 -672
- package/assets/docs/guide/starterkits/apparel-ui.md +0 -188
- package/assets/docs/guide/starterkits/assets.md +0 -27
- package/assets/docs/guide/starterkits/auto-resize.md +0 -586
- package/assets/docs/guide/starterkits/automated-video-generation.md +0 -692
- package/assets/docs/guide/starterkits/background-removal-editor.md +0 -480
- package/assets/docs/guide/starterkits/content-moderation.md +0 -863
- package/assets/docs/guide/starterkits/creative-automation.md +0 -28
- package/assets/docs/guide/starterkits/custom-built-uis.md +0 -26
- package/assets/docs/guide/starterkits/customization.md +0 -29
- package/assets/docs/guide/starterkits/cutout-lines-editor.md +0 -470
- package/assets/docs/guide/starterkits/data-merge.md +0 -850
- package/assets/docs/guide/starterkits/design-editor.md +0 -698
- package/assets/docs/guide/starterkits/design-generation.md +0 -719
- package/assets/docs/guide/starterkits/design-validation.md +0 -808
- package/assets/docs/guide/starterkits/editor-ui-configurations.md +0 -14
- package/assets/docs/guide/starterkits/export-options.md +0 -724
- package/assets/docs/guide/starterkits/export-using-renderer.md +0 -708
- package/assets/docs/guide/starterkits/extensibility.md +0 -28
- package/assets/docs/guide/starterkits/force-crop-editor.md +0 -675
- package/assets/docs/guide/starterkits/form-based-template-adoption.md +0 -522
- package/assets/docs/guide/starterkits/getty-images-editor.md +0 -700
- package/assets/docs/guide/starterkits/html5-ads-exporter.md +0 -719
- package/assets/docs/guide/starterkits/indesign-template-import.md +0 -580
- package/assets/docs/guide/starterkits/layouts-editor.md +0 -724
- package/assets/docs/guide/starterkits/mobile-ui.md +0 -185
- package/assets/docs/guide/starterkits/mockup-editor.md +0 -745
- package/assets/docs/guide/starterkits/multi-image-generation.md +0 -542
- package/assets/docs/guide/starterkits/page-sizes-editor.md +0 -657
- package/assets/docs/guide/starterkits/pexels-image-editor.md +0 -665
- package/assets/docs/guide/starterkits/photo-editor.md +0 -755
- package/assets/docs/guide/starterkits/photo-ui.md +0 -186
- package/assets/docs/guide/starterkits/photobook-ui.md +0 -188
- package/assets/docs/guide/starterkits/placeholders.md +0 -678
- package/assets/docs/guide/starterkits/player.md +0 -405
- package/assets/docs/guide/starterkits/plugins.md +0 -25
- package/assets/docs/guide/starterkits/postcard-editor.md +0 -202
- package/assets/docs/guide/starterkits/pptx-template-import.md +0 -581
- package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +0 -746
- package/assets/docs/guide/starterkits/product-editor.md +0 -773
- package/assets/docs/guide/starterkits/psd-template-import.md +0 -580
- package/assets/docs/guide/starterkits/qr-code-editor.md +0 -470
- package/assets/docs/guide/starterkits/single-page-editor.md +0 -661
- package/assets/docs/guide/starterkits/start-with-image.md +0 -684
- package/assets/docs/guide/starterkits/start-with-video.md +0 -651
- package/assets/docs/guide/starterkits/t-shirt-designer.md +0 -742
- package/assets/docs/guide/starterkits/templating.md +0 -23
- package/assets/docs/guide/starterkits/theming.md +0 -662
- package/assets/docs/guide/starterkits/translation-internationalization.md +0 -662
- package/assets/docs/guide/starterkits/unsplash-editor.md +0 -839
- package/assets/docs/guide/starterkits/vectorizer-editor.md +0 -466
- package/assets/docs/guide/starterkits/version-history.md +0 -745
- package/assets/docs/guide/starterkits/video-animations.md +0 -853
- package/assets/docs/guide/starterkits/video-captions.md +0 -884
- package/assets/docs/guide/starterkits/video-editing.md +0 -25
- package/assets/docs/guide/starterkits/video-editor.md +0 -696
- package/assets/docs/guide/starterkits/video-export-options.md +0 -676
- package/assets/docs/guide/starterkits/viewer.md +0 -400
- package/assets/docs/guide/starterkits.md +0 -41
- package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +0 -362
- package/assets/docs/guide/text/custom-fonts.md +0 -401
- package/assets/docs/guide/text/decorations.md +0 -330
- package/assets/docs/guide/text/enumerations.md +0 -258
- package/assets/docs/guide/to-v1-10.md +0 -131
- package/assets/docs/guide/to-v1-13.md +0 -165
- package/assets/docs/guide/to-v1-32.md +0 -110
- package/assets/docs/guide/to-v1-69.md +0 -468
- package/assets/docs/guide/to-v1-72.md +0 -193
- package/assets/docs/guide/use-templates/library.md +0 -450
- package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +0 -428
- package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +0 -337
- package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +0 -853
- package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +0 -1045
- package/assets/docs/guide/user-interface/ai-integration/image-generation.md +0 -641
- package/assets/docs/guide/user-interface/ai-integration/integrate.md +0 -966
- package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +0 -99
- package/assets/docs/guide/user-interface/ai-integration/text-generation.md +0 -498
- package/assets/docs/guide/user-interface/ai-integration/video-generation.md +0 -493
- package/assets/docs/guide/user-interface/ai-integration.md +0 -30
- package/assets/docs/guide/user-interface/appearance/change-ui-font.md +0 -316
- package/assets/docs/guide/user-interface/appearance/custom-labels.md +0 -509
- package/assets/docs/guide/user-interface/appearance/icons.md +0 -373
- package/assets/docs/guide/user-interface/appearance/theming.md +0 -665
- package/assets/docs/guide/user-interface/appearance.md +0 -23
- package/assets/docs/guide/user-interface/build-your-own-ui.md +0 -620
- package/assets/docs/guide/user-interface/customization/canvas-menu.md +0 -412
- package/assets/docs/guide/user-interface/customization/canvas.md +0 -281
- package/assets/docs/guide/user-interface/customization/color-palette.md +0 -413
- package/assets/docs/guide/user-interface/customization/crop-presets.md +0 -384
- package/assets/docs/guide/user-interface/customization/disable-or-enable.md +0 -676
- package/assets/docs/guide/user-interface/customization/dock.md +0 -399
- package/assets/docs/guide/user-interface/customization/force-crop.md +0 -289
- package/assets/docs/guide/user-interface/customization/inspector-bar.md +0 -371
- package/assets/docs/guide/user-interface/customization/navigation-bar.md +0 -516
- package/assets/docs/guide/user-interface/customization/page-format.md +0 -436
- package/assets/docs/guide/user-interface/customization/panel.md +0 -605
- package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +0 -531
- package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +0 -358
- package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +0 -374
- package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +0 -323
- package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +0 -294
- package/assets/docs/guide/user-interface/customization/quick-start.md +0 -12
- package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +0 -519
- package/assets/docs/guide/user-interface/customization/reference/component-reference.md +0 -333
- package/assets/docs/guide/user-interface/customization/reference.md +0 -12
- package/assets/docs/guide/user-interface/customization.md +0 -39
- package/assets/docs/guide/user-interface/localization.md +0 -633
- package/assets/docs/guide/user-interface/overview.md +0 -167
- package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +0 -411
- package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +0 -721
- package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +0 -331
- package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +0 -553
- package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +0 -672
- package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +0 -415
- package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +0 -521
- package/assets/docs/guide/user-interface/ui-extensions.md +0 -26
- package/assets/docs/guide/user-interface.md +0 -25
- package/assets/prompts/evals-assetGenerate.md +0 -12
- package/assets/prompts/evals-brutalistCore.md +0 -34
- package/assets/prompts/evals-danskCatalogue.md +0 -31
- package/assets/prompts/evals-exportRoundTrip.md +0 -12
- package/assets/prompts/evals-inspectPriorCode.md +0 -16
- package/assets/prompts/evals-listProjectFiles.md +0 -6
- package/assets/prompts/evals-readAndExplainScript.md +0 -6
- package/assets/prompts/evals-resumeAcrossRestart.md +0 -15
- package/assets/prompts/evals-rewindRecovery.md +0 -10
- package/assets/prompts/evals-searchAcrossFiles.md +0 -6
- package/assets/prompts/evals-weddingCard.md +0 -20
- package/assets/prompts/explain.md +0 -6
- package/assets/prompts/review.md +0 -6
- package/dist/frontmatter.d.ts +0 -15
- package/dist/frontmatter.d.ts.map +0 -1
- package/dist/frontmatter.js +0 -46
- package/dist/frontmatter.js.map +0 -1
- package/dist/test/test/frontmatter.test.d.ts +0 -2
- package/dist/test/test/frontmatter.test.d.ts.map +0 -1
- package/dist/test/test/frontmatter.test.js +0 -55
- package/dist/test/test/frontmatter.test.js.map +0 -1
|
@@ -1,530 +1,418 @@
|
|
|
1
|
-
> This is one page of the CE.SDK
|
|
1
|
+
> This is one page of the CE.SDK Node.js documentation. For a complete overview, see the [Node.js Documentation Index](https://img.ly/docs/cesdk/node.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).
|
|
2
2
|
|
|
3
3
|
**Navigation:** [Guides](./guides.md) > [Create and Use Templates](./create-templates.md) > [Insert Dynamic Content](./create-templates/add-dynamic-content.md) > [Placeholders](./create-templates/add-dynamic-content/placeholders.md)
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Placeholders turn design blocks into drop-zones that
|
|
8
|
-
|
|
9
|
-

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