@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,393 +1,355 @@
|
|
|
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) > [Set Editing Constraints](./create-templates/add-dynamic-content/set-editing-constraints.md)
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Control what users can edit in templates by setting fine-grained permissions on individual blocks or globally across your scene using CE.SDK's Scope system.
|
|
8
|
-
|
|
9
|
-

|
|
7
|
+
Control what users can edit in templates by setting fine-grained permissions on individual blocks or globally across your scene using CE.SDK's Scope system in headless Node.js environments.
|
|
10
8
|
|
|
11
9
|
> **Reading time:** 15 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
|
-
import
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
FiltersAssetSource,
|
|
31
|
-
PagePresetsAssetSource,
|
|
32
|
-
StickerAssetSource,
|
|
33
|
-
TextAssetSource,
|
|
34
|
-
TextComponentAssetSource,
|
|
35
|
-
TypefaceAssetSource,
|
|
36
|
-
UploadAssetSources,
|
|
37
|
-
VectorShapeAssetSource
|
|
38
|
-
} from '@cesdk/cesdk-js/plugins';
|
|
39
|
-
import { DesignEditorConfig } from './design-editor/plugin';
|
|
40
|
-
import packageJson from './package.json';
|
|
14
|
+
>
|
|
15
|
+
> - [View source on GitHub](https://github.com/imgly/cesdk-web-examples)
|
|
16
|
+
>
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples)
|
|
18
|
+
|
|
19
|
+
Editing constraints in CE.SDK allow you to lock specific properties of design elements programmatically from your server or Node.js application. The Scope system provides granular control over 20+ editing capabilities including movement, resizing, rotation, fill changes, text editing, and lifecycle operations.
|
|
20
|
+
|
|
21
|
+
```typescript file=@cesdk_web_examples/guides-create-templates-dynamic-content-set-editing-constraints-server-js/server-js.ts reference-only
|
|
22
|
+
import CreativeEngine from '@cesdk/node';
|
|
23
|
+
import { config } from 'dotenv';
|
|
24
|
+
import { writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
25
|
+
|
|
26
|
+
// Load environment variables
|
|
27
|
+
config();
|
|
41
28
|
|
|
42
29
|
/**
|
|
43
|
-
* CE.SDK
|
|
30
|
+
* CE.SDK Server Guide: Set Editing Constraints
|
|
44
31
|
*
|
|
45
|
-
*
|
|
32
|
+
* Demonstrates how to use CE.SDK's Scope system to control editing capabilities:
|
|
46
33
|
* - Setting global scopes to respect block-level settings
|
|
47
34
|
* - Disabling move scope to lock position
|
|
48
35
|
* - Disabling lifecycle scopes to prevent deletion
|
|
36
|
+
* - Checking scope states
|
|
37
|
+
* - Saving constrained scenes
|
|
49
38
|
*/
|
|
50
|
-
class Example implements EditorPlugin {
|
|
51
|
-
name = packageJson.name;
|
|
52
39
|
|
|
53
|
-
|
|
40
|
+
// Initialize CE.SDK engine in headless mode
|
|
41
|
+
const engine = await CreativeEngine.init({
|
|
42
|
+
baseURL: process.env.IMGLY_LOCAL_ASSETS_URL,
|
|
43
|
+
});
|
|
54
44
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
45
|
+
try {
|
|
46
|
+
// Create a design scene with specific page dimensions
|
|
47
|
+
engine.scene.create('VerticalStack', {
|
|
48
|
+
page: { size: { width: 1920, height: 1080 } },
|
|
49
|
+
});
|
|
59
50
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
// Create a design scene
|
|
89
|
-
await cesdk.actions.run('scene.create', {
|
|
90
|
-
page: { width: 1200, height: 600, unit: 'Pixel' }
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
const engine = cesdk.engine;
|
|
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 background color
|
|
103
|
-
const pageFill = engine.block.getFill(page);
|
|
104
|
-
engine.block.setColor(pageFill, 'fill/color/value', {
|
|
105
|
-
r: 0.95,
|
|
106
|
-
g: 0.95,
|
|
107
|
-
b: 0.95,
|
|
108
|
-
a: 1.0
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
// ===== Configure Global Scopes =====
|
|
112
|
-
// Set global scopes to 'Defer' to respect block-level scope settings
|
|
113
|
-
// Without this, global 'Allow' settings might override block-level restrictions
|
|
114
|
-
engine.editor.setGlobalScope('layer/move', 'Defer');
|
|
115
|
-
engine.editor.setGlobalScope('layer/resize', 'Defer');
|
|
116
|
-
engine.editor.setGlobalScope('lifecycle/destroy', 'Defer');
|
|
117
|
-
engine.editor.setGlobalScope('lifecycle/duplicate', 'Defer');
|
|
118
|
-
|
|
119
|
-
// Global scope modes:
|
|
120
|
-
// - 'Allow': Always allow (overrides block-level settings)
|
|
121
|
-
// - 'Deny': Always deny (overrides block-level settings)
|
|
122
|
-
// - 'Defer': Use block-level settings (respects setScopeEnabled)
|
|
123
|
-
|
|
124
|
-
// Calculate layout for 4 examples (2x2 grid)
|
|
125
|
-
const pageWidth = engine.block.getWidth(page);
|
|
126
|
-
const pageHeight = engine.block.getHeight(page);
|
|
127
|
-
const margin = 40;
|
|
128
|
-
const spacing = 20;
|
|
129
|
-
const blockWidth = (pageWidth - margin * 2 - spacing) / 2;
|
|
130
|
-
const blockHeight = (pageHeight - margin * 2 - spacing) / 2;
|
|
131
|
-
|
|
132
|
-
const getPosition = (index: number) => {
|
|
133
|
-
const col = index % 2;
|
|
134
|
-
const row = Math.floor(index / 2);
|
|
135
|
-
return {
|
|
136
|
-
x: margin + col * (blockWidth + spacing),
|
|
137
|
-
y: margin + row * (blockHeight + spacing)
|
|
138
|
-
};
|
|
139
|
-
};
|
|
51
|
+
const page = engine.block.findByType('page')[0];
|
|
52
|
+
if (!page) {
|
|
53
|
+
throw new Error('No page found');
|
|
54
|
+
}
|
|
140
55
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
engine.block.setPositionX(textBlock, (blockWidth - textWidth) / 2);
|
|
177
|
-
engine.block.setPositionY(textBlock, (blockHeight - textHeight) / 2);
|
|
178
|
-
|
|
179
|
-
// Set text color to white
|
|
180
|
-
const textFill = engine.block.createFill('color');
|
|
181
|
-
engine.block.setFill(textBlock, textFill);
|
|
182
|
-
engine.block.setColor(textFill, 'fill/color/value', {
|
|
183
|
-
r: 1.0,
|
|
184
|
-
g: 1.0,
|
|
185
|
-
b: 1.0,
|
|
186
|
-
a: 1.0
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
// Apply scope configuration to both blocks
|
|
190
|
-
if (applyScopesCallback) {
|
|
191
|
-
applyScopesCallback(block);
|
|
192
|
-
applyScopesCallback(textBlock);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// Append container to page
|
|
196
|
-
engine.block.appendChild(page, block);
|
|
197
|
-
|
|
198
|
-
return block;
|
|
56
|
+
// Set page background color
|
|
57
|
+
const pageFill = engine.block.getFill(page);
|
|
58
|
+
engine.block.setColor(pageFill, 'fill/color/value', {
|
|
59
|
+
r: 0.95,
|
|
60
|
+
g: 0.95,
|
|
61
|
+
b: 0.95,
|
|
62
|
+
a: 1.0,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// Set global scopes to 'Defer' to respect block-level scope settings
|
|
66
|
+
// Without this, global 'Allow' settings might override block-level restrictions
|
|
67
|
+
engine.editor.setGlobalScope('layer/move', 'Defer');
|
|
68
|
+
engine.editor.setGlobalScope('layer/resize', 'Defer');
|
|
69
|
+
engine.editor.setGlobalScope('lifecycle/destroy', 'Defer');
|
|
70
|
+
engine.editor.setGlobalScope('lifecycle/duplicate', 'Defer');
|
|
71
|
+
|
|
72
|
+
// Global scope modes:
|
|
73
|
+
// - 'Allow': Always allow (overrides block-level settings)
|
|
74
|
+
// - 'Deny': Always deny (overrides block-level settings)
|
|
75
|
+
// - 'Defer': Use block-level settings (respects setScopeEnabled)
|
|
76
|
+
|
|
77
|
+
// Calculate layout for 4 examples (2x2 grid)
|
|
78
|
+
const pageWidth = engine.block.getWidth(page);
|
|
79
|
+
const pageHeight = engine.block.getHeight(page);
|
|
80
|
+
const margin = 40;
|
|
81
|
+
const spacing = 20;
|
|
82
|
+
const blockWidth = (pageWidth - margin * 2 - spacing) / 2;
|
|
83
|
+
const blockHeight = (pageHeight - margin * 2 - spacing) / 2;
|
|
84
|
+
|
|
85
|
+
const getPosition = (index: number) => {
|
|
86
|
+
const col = index % 2;
|
|
87
|
+
const row = Math.floor(index / 2);
|
|
88
|
+
return {
|
|
89
|
+
x: margin + col * (blockWidth + spacing),
|
|
90
|
+
y: margin + row * (blockHeight + spacing),
|
|
199
91
|
};
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// Helper function to create a labeled example block
|
|
95
|
+
const createExampleBlock = (
|
|
96
|
+
labelText: string,
|
|
97
|
+
backgroundColor: { r: number; g: number; b: number },
|
|
98
|
+
applyScopesCallback?: (blockId: number) => void
|
|
99
|
+
): number => {
|
|
100
|
+
// Create container block
|
|
101
|
+
const block = engine.block.create('graphic');
|
|
102
|
+
const shape = engine.block.createShape('rect');
|
|
103
|
+
engine.block.setShape(block, shape);
|
|
104
|
+
engine.block.setWidth(block, blockWidth);
|
|
105
|
+
engine.block.setHeight(block, blockHeight);
|
|
106
|
+
|
|
107
|
+
// Set background color
|
|
108
|
+
const fill = engine.block.createFill('color');
|
|
109
|
+
engine.block.setFill(block, fill);
|
|
110
|
+
engine.block.setColor(fill, 'fill/color/value', {
|
|
111
|
+
...backgroundColor,
|
|
112
|
+
a: 1.0,
|
|
113
|
+
});
|
|
200
114
|
|
|
201
|
-
//
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
115
|
+
// Add label text
|
|
116
|
+
const textBlock = engine.block.create('text');
|
|
117
|
+
engine.block.setWidth(textBlock, blockWidth * 0.85);
|
|
118
|
+
engine.block.setHeightMode(textBlock, 'Auto');
|
|
119
|
+
engine.block.setString(textBlock, 'text/text', labelText);
|
|
120
|
+
engine.block.setEnum(textBlock, 'text/horizontalAlignment', 'Center');
|
|
121
|
+
engine.block.setFloat(textBlock, 'text/fontSize', 16);
|
|
122
|
+
|
|
123
|
+
// Append text to get dimensions
|
|
124
|
+
engine.block.appendChild(block, textBlock);
|
|
125
|
+
|
|
126
|
+
// Center text in container
|
|
127
|
+
const textWidth = engine.block.getWidth(textBlock);
|
|
128
|
+
const textHeight = engine.block.getHeight(textBlock);
|
|
129
|
+
engine.block.setPositionX(textBlock, (blockWidth - textWidth) / 2);
|
|
130
|
+
engine.block.setPositionY(textBlock, (blockHeight - textHeight) / 2);
|
|
131
|
+
|
|
132
|
+
// Set text color to white
|
|
133
|
+
const textFill = engine.block.createFill('color');
|
|
134
|
+
engine.block.setFill(textBlock, textFill);
|
|
135
|
+
engine.block.setColor(textFill, 'fill/color/value', {
|
|
136
|
+
r: 1.0,
|
|
137
|
+
g: 1.0,
|
|
138
|
+
b: 1.0,
|
|
139
|
+
a: 1.0,
|
|
140
|
+
});
|
|
215
141
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
b: 0.9
|
|
222
|
-
},
|
|
223
|
-
disableMoveScope
|
|
224
|
-
);
|
|
225
|
-
// Block position is locked - users cannot move or reposition it
|
|
226
|
-
// Other scopes are explicitly enabled: resizing, rotation, flipping, deletion, duplication
|
|
227
|
-
|
|
228
|
-
// ===== Example 2: Prevent Deletion (Disable Lifecycle Scopes) =====
|
|
229
|
-
const disableLifecycleScopes = (block: number) => {
|
|
230
|
-
// Disable lifecycle scopes
|
|
231
|
-
engine.block.setScopeEnabled(block, 'lifecycle/destroy', false);
|
|
232
|
-
engine.block.setScopeEnabled(block, 'lifecycle/duplicate', false);
|
|
233
|
-
|
|
234
|
-
// Explicitly enable transform scopes
|
|
235
|
-
engine.block.setScopeEnabled(block, 'layer/move', true);
|
|
236
|
-
engine.block.setScopeEnabled(block, 'layer/resize', true);
|
|
237
|
-
engine.block.setScopeEnabled(block, 'layer/rotate', true);
|
|
238
|
-
engine.block.setScopeEnabled(block, 'layer/flip', true);
|
|
239
|
-
};
|
|
142
|
+
// Apply scope configuration to both blocks
|
|
143
|
+
if (applyScopesCallback) {
|
|
144
|
+
applyScopesCallback(block);
|
|
145
|
+
applyScopesCallback(textBlock);
|
|
146
|
+
}
|
|
240
147
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
148
|
+
// Append container to page
|
|
149
|
+
engine.block.appendChild(page, block);
|
|
150
|
+
|
|
151
|
+
return block;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
// ===== Example 1: All Scopes Enabled =====
|
|
155
|
+
const enableAllScopes = (block: number) => {
|
|
156
|
+
// Explicitly enable all transform scopes
|
|
157
|
+
engine.block.setScopeEnabled(block, 'layer/move', true);
|
|
158
|
+
engine.block.setScopeEnabled(block, 'layer/resize', true);
|
|
159
|
+
engine.block.setScopeEnabled(block, 'layer/rotate', true);
|
|
160
|
+
engine.block.setScopeEnabled(block, 'layer/flip', true);
|
|
161
|
+
|
|
162
|
+
// Explicitly enable lifecycle scopes
|
|
163
|
+
engine.block.setScopeEnabled(block, 'lifecycle/destroy', true);
|
|
164
|
+
engine.block.setScopeEnabled(block, 'lifecycle/duplicate', true);
|
|
165
|
+
|
|
166
|
+
// Explicitly enable fill scopes
|
|
167
|
+
engine.block.setScopeEnabled(block, 'fill/change', true);
|
|
168
|
+
engine.block.setScopeEnabled(block, 'fill/changeType', true);
|
|
169
|
+
|
|
170
|
+
// Explicitly enable text scopes
|
|
171
|
+
engine.block.setScopeEnabled(block, 'text/edit', true);
|
|
172
|
+
engine.block.setScopeEnabled(block, 'text/character', true);
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
const fullyEditableBlock = createExampleBlock(
|
|
176
|
+
'Fully\neditable',
|
|
177
|
+
{
|
|
178
|
+
r: 0.5,
|
|
179
|
+
g: 0.85,
|
|
180
|
+
b: 0.5,
|
|
181
|
+
},
|
|
182
|
+
enableAllScopes
|
|
183
|
+
);
|
|
184
|
+
// All scopes are explicitly enabled - users have full editing capabilities
|
|
185
|
+
// This is the default behavior, but explicitly enabling shows clear intent
|
|
186
|
+
|
|
187
|
+
// ===== Example 2: Lock Position (Disable Move Scope) =====
|
|
188
|
+
const disableMoveScope = (block: number) => {
|
|
189
|
+
// Disable move scope
|
|
190
|
+
engine.block.setScopeEnabled(block, 'layer/move', false);
|
|
191
|
+
|
|
192
|
+
// Explicitly enable other transform scopes
|
|
193
|
+
engine.block.setScopeEnabled(block, 'layer/resize', true);
|
|
194
|
+
engine.block.setScopeEnabled(block, 'layer/rotate', true);
|
|
195
|
+
engine.block.setScopeEnabled(block, 'layer/flip', true);
|
|
196
|
+
|
|
197
|
+
// Explicitly enable lifecycle scopes
|
|
198
|
+
engine.block.setScopeEnabled(block, 'lifecycle/destroy', true);
|
|
199
|
+
engine.block.setScopeEnabled(block, 'lifecycle/duplicate', true);
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
const moveLockedBlock = createExampleBlock(
|
|
203
|
+
'Locked\nposition',
|
|
204
|
+
{
|
|
205
|
+
r: 0.5,
|
|
206
|
+
g: 0.75,
|
|
207
|
+
b: 0.9,
|
|
208
|
+
},
|
|
209
|
+
disableMoveScope
|
|
210
|
+
);
|
|
211
|
+
// Block position is locked - users cannot move or reposition it
|
|
212
|
+
// Other scopes are explicitly enabled: resizing, rotation, flipping, deletion, duplication
|
|
213
|
+
|
|
214
|
+
// ===== Example 3: Prevent Deletion (Disable Lifecycle Scopes) =====
|
|
215
|
+
const disableLifecycleScopes = (block: number) => {
|
|
216
|
+
// Disable lifecycle scopes
|
|
217
|
+
engine.block.setScopeEnabled(block, 'lifecycle/destroy', false);
|
|
218
|
+
engine.block.setScopeEnabled(block, 'lifecycle/duplicate', false);
|
|
219
|
+
|
|
220
|
+
// Explicitly enable transform scopes
|
|
221
|
+
engine.block.setScopeEnabled(block, 'layer/move', true);
|
|
222
|
+
engine.block.setScopeEnabled(block, 'layer/resize', true);
|
|
223
|
+
engine.block.setScopeEnabled(block, 'layer/rotate', true);
|
|
224
|
+
engine.block.setScopeEnabled(block, 'layer/flip', true);
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
const lifecycleLockedBlock = createExampleBlock(
|
|
228
|
+
'Cannot\ndelete',
|
|
229
|
+
{
|
|
230
|
+
r: 0.75,
|
|
231
|
+
g: 0.75,
|
|
232
|
+
b: 0.75,
|
|
233
|
+
},
|
|
234
|
+
disableLifecycleScopes
|
|
235
|
+
);
|
|
236
|
+
// Block cannot be deleted or duplicated
|
|
237
|
+
// Other scopes are explicitly enabled: moving, resizing, rotation, flipping
|
|
238
|
+
|
|
239
|
+
// ===== Example 4: All Scopes Disabled =====
|
|
240
|
+
const disableAllScopes = (block: number) => {
|
|
241
|
+
// Disable all transform scopes
|
|
242
|
+
engine.block.setScopeEnabled(block, 'layer/move', false);
|
|
243
|
+
engine.block.setScopeEnabled(block, 'layer/resize', false);
|
|
244
|
+
engine.block.setScopeEnabled(block, 'layer/rotate', false);
|
|
245
|
+
engine.block.setScopeEnabled(block, 'layer/flip', false);
|
|
246
|
+
engine.block.setScopeEnabled(block, 'layer/crop', false);
|
|
247
|
+
|
|
248
|
+
// Disable lifecycle scopes
|
|
249
|
+
engine.block.setScopeEnabled(block, 'lifecycle/destroy', false);
|
|
250
|
+
engine.block.setScopeEnabled(block, 'lifecycle/duplicate', false);
|
|
251
|
+
|
|
252
|
+
// Disable fill scopes
|
|
253
|
+
engine.block.setScopeEnabled(block, 'fill/change', false);
|
|
254
|
+
engine.block.setScopeEnabled(block, 'fill/changeType', false);
|
|
255
|
+
engine.block.setScopeEnabled(block, 'stroke/change', false);
|
|
256
|
+
|
|
257
|
+
// Disable text scopes
|
|
258
|
+
engine.block.setScopeEnabled(block, 'text/edit', false);
|
|
259
|
+
engine.block.setScopeEnabled(block, 'text/character', false);
|
|
260
|
+
|
|
261
|
+
// Disable shape scopes
|
|
262
|
+
engine.block.setScopeEnabled(block, 'shape/change', false);
|
|
263
|
+
|
|
264
|
+
// Disable editor scopes
|
|
265
|
+
engine.block.setScopeEnabled(block, 'editor/select', false);
|
|
266
|
+
|
|
267
|
+
// Disable appearance scopes
|
|
268
|
+
engine.block.setScopeEnabled(block, 'layer/opacity', false);
|
|
269
|
+
engine.block.setScopeEnabled(block, 'layer/blendMode', false);
|
|
270
|
+
engine.block.setScopeEnabled(block, 'layer/visibility', false);
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
const fullyLockedBlock = createExampleBlock(
|
|
274
|
+
'Fully\nlocked',
|
|
275
|
+
{
|
|
276
|
+
r: 0.9,
|
|
277
|
+
g: 0.5,
|
|
278
|
+
b: 0.5,
|
|
279
|
+
},
|
|
280
|
+
disableAllScopes
|
|
281
|
+
);
|
|
282
|
+
// All scopes are disabled - block is completely locked and cannot be edited
|
|
283
|
+
// Useful for watermarks, logos, or legal disclaimers
|
|
284
|
+
|
|
285
|
+
// ===== Block-Level Scope Setting Example =====
|
|
286
|
+
// Check if a scope is enabled for a specific block
|
|
287
|
+
const canMove = engine.block.isScopeEnabled(moveLockedBlock, 'layer/move');
|
|
288
|
+
const canDelete = engine.block.isScopeEnabled(
|
|
289
|
+
lifecycleLockedBlock,
|
|
290
|
+
'lifecycle/destroy'
|
|
291
|
+
);
|
|
292
|
+
const canEditFully = engine.block.isScopeEnabled(
|
|
293
|
+
fullyEditableBlock,
|
|
294
|
+
'layer/move'
|
|
295
|
+
);
|
|
296
|
+
const canEditLocked = engine.block.isScopeEnabled(
|
|
297
|
+
fullyLockedBlock,
|
|
298
|
+
'layer/move'
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
// eslint-disable-next-line no-console
|
|
302
|
+
console.log('Move-locked block - layer/move enabled:', canMove); // false
|
|
303
|
+
// eslint-disable-next-line no-console
|
|
304
|
+
console.log('Lifecycle-locked block - lifecycle/destroy enabled:', canDelete); // false
|
|
305
|
+
// eslint-disable-next-line no-console
|
|
306
|
+
console.log('Fully editable block - layer/move enabled:', canEditFully); // true
|
|
307
|
+
// eslint-disable-next-line no-console
|
|
308
|
+
console.log('Fully locked block - layer/move enabled:', canEditLocked); // false
|
|
309
|
+
|
|
310
|
+
// Position blocks in 2x2 grid
|
|
311
|
+
const blocks = [
|
|
312
|
+
fullyEditableBlock,
|
|
313
|
+
moveLockedBlock,
|
|
314
|
+
lifecycleLockedBlock,
|
|
315
|
+
fullyLockedBlock,
|
|
316
|
+
];
|
|
317
|
+
|
|
318
|
+
blocks.forEach((block, index) => {
|
|
319
|
+
const pos = getPosition(index);
|
|
320
|
+
engine.block.setPositionX(block, pos.x);
|
|
321
|
+
engine.block.setPositionY(block, pos.y);
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
// Save the scene with all scope constraints preserved
|
|
325
|
+
const outputDir = './output';
|
|
326
|
+
if (!existsSync(outputDir)) {
|
|
327
|
+
mkdirSync(outputDir, { recursive: true });
|
|
328
|
+
}
|
|
273
329
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
r: 0.5,
|
|
278
|
-
g: 0.85,
|
|
279
|
-
b: 0.5
|
|
280
|
-
},
|
|
281
|
-
enableAllScopes
|
|
282
|
-
);
|
|
283
|
-
// All scopes are explicitly enabled - users have full editing capabilities
|
|
284
|
-
// This is the default behavior, but explicitly enabling shows clear intent
|
|
285
|
-
|
|
286
|
-
// ===== Example 4: All Scopes Disabled =====
|
|
287
|
-
const disableAllScopes = (block: number) => {
|
|
288
|
-
// Disable all transform scopes
|
|
289
|
-
engine.block.setScopeEnabled(block, 'layer/move', false);
|
|
290
|
-
engine.block.setScopeEnabled(block, 'layer/resize', false);
|
|
291
|
-
engine.block.setScopeEnabled(block, 'layer/rotate', false);
|
|
292
|
-
engine.block.setScopeEnabled(block, 'layer/flip', false);
|
|
293
|
-
engine.block.setScopeEnabled(block, 'layer/crop', false);
|
|
294
|
-
|
|
295
|
-
// Disable lifecycle scopes
|
|
296
|
-
engine.block.setScopeEnabled(block, 'lifecycle/destroy', false);
|
|
297
|
-
engine.block.setScopeEnabled(block, 'lifecycle/duplicate', false);
|
|
298
|
-
|
|
299
|
-
// Disable fill scopes
|
|
300
|
-
engine.block.setScopeEnabled(block, 'fill/change', false);
|
|
301
|
-
engine.block.setScopeEnabled(block, 'fill/changeType', false);
|
|
302
|
-
engine.block.setScopeEnabled(block, 'stroke/change', false);
|
|
303
|
-
|
|
304
|
-
// Disable text scopes
|
|
305
|
-
engine.block.setScopeEnabled(block, 'text/edit', false);
|
|
306
|
-
engine.block.setScopeEnabled(block, 'text/character', false);
|
|
307
|
-
|
|
308
|
-
// Disable shape scopes
|
|
309
|
-
engine.block.setScopeEnabled(block, 'shape/change', false);
|
|
310
|
-
|
|
311
|
-
// Disable editor scopes
|
|
312
|
-
engine.block.setScopeEnabled(block, 'editor/select', false);
|
|
313
|
-
|
|
314
|
-
// Disable appearance scopes
|
|
315
|
-
engine.block.setScopeEnabled(block, 'layer/opacity', false);
|
|
316
|
-
engine.block.setScopeEnabled(block, 'layer/blendMode', false);
|
|
317
|
-
engine.block.setScopeEnabled(block, 'layer/visibility', false);
|
|
318
|
-
};
|
|
330
|
+
// Save scene to file
|
|
331
|
+
const sceneData = await engine.scene.saveToString();
|
|
332
|
+
writeFileSync(`${outputDir}/constrained-scene.scene`, sceneData);
|
|
319
333
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
g: 0.5,
|
|
325
|
-
b: 0.5
|
|
326
|
-
},
|
|
327
|
-
disableAllScopes
|
|
328
|
-
);
|
|
329
|
-
// All scopes are disabled - block is completely locked and cannot be edited
|
|
330
|
-
// Useful for watermarks, logos, or legal disclaimers
|
|
331
|
-
|
|
332
|
-
// ===== Block-Level Scope Setting Example =====
|
|
333
|
-
// Check if a scope is enabled for a specific block
|
|
334
|
-
const canMove = engine.block.isScopeEnabled(moveLockedBlock, 'layer/move');
|
|
335
|
-
const canDelete = engine.block.isScopeEnabled(
|
|
336
|
-
lifecycleLockedBlock,
|
|
337
|
-
'lifecycle/destroy'
|
|
338
|
-
);
|
|
339
|
-
const canEditFully = engine.block.isScopeEnabled(
|
|
340
|
-
fullyEditableBlock,
|
|
341
|
-
'layer/move'
|
|
342
|
-
);
|
|
343
|
-
const canEditLocked = engine.block.isScopeEnabled(
|
|
344
|
-
fullyLockedBlock,
|
|
345
|
-
'layer/move'
|
|
346
|
-
);
|
|
347
|
-
|
|
348
|
-
// eslint-disable-next-line no-console
|
|
349
|
-
console.log('Move-locked block - layer/move enabled:', canMove); // false
|
|
350
|
-
// eslint-disable-next-line no-console
|
|
351
|
-
console.log(
|
|
352
|
-
'Lifecycle-locked block - lifecycle/destroy enabled:',
|
|
353
|
-
canDelete
|
|
354
|
-
); // false
|
|
355
|
-
// eslint-disable-next-line no-console
|
|
356
|
-
console.log('Fully editable block - layer/move enabled:', canEditFully); // true
|
|
357
|
-
// eslint-disable-next-line no-console
|
|
358
|
-
console.log('Fully locked block - layer/move enabled:', canEditLocked); // false
|
|
359
|
-
|
|
360
|
-
// Position blocks in 2x2 grid
|
|
361
|
-
const blocks = [
|
|
362
|
-
fullyEditableBlock,
|
|
363
|
-
moveLockedBlock,
|
|
364
|
-
lifecycleLockedBlock,
|
|
365
|
-
fullyLockedBlock
|
|
366
|
-
];
|
|
367
|
-
|
|
368
|
-
blocks.forEach((block, index) => {
|
|
369
|
-
const pos = getPosition(index);
|
|
370
|
-
engine.block.setPositionX(block, pos.x);
|
|
371
|
-
engine.block.setPositionY(block, pos.y);
|
|
372
|
-
});
|
|
334
|
+
// eslint-disable-next-line no-console
|
|
335
|
+
console.log('✓ Scene saved to output/constrained-scene.scene');
|
|
336
|
+
// eslint-disable-next-line no-console
|
|
337
|
+
console.log(' All scope constraints are preserved in the scene file');
|
|
373
338
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
339
|
+
// Export the result to PNG
|
|
340
|
+
const blob = await engine.block.export(page, { mimeType: 'image/png' });
|
|
341
|
+
const buffer = Buffer.from(await blob.arrayBuffer());
|
|
342
|
+
writeFileSync(`${outputDir}/editing-constraints-result.png`, buffer);
|
|
378
343
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
padding: 50,
|
|
382
|
-
animate: false
|
|
383
|
-
});
|
|
344
|
+
// eslint-disable-next-line no-console
|
|
345
|
+
console.log('✓ Exported result to output/editing-constraints-result.png');
|
|
384
346
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
347
|
+
// Log instructions
|
|
348
|
+
// eslint-disable-next-line no-console
|
|
349
|
+
console.log(`
|
|
388
350
|
=== Editing Constraints Demo ===
|
|
389
351
|
|
|
390
|
-
|
|
352
|
+
Created 4 examples demonstrating scope constraints (arranged in 2x2 grid):
|
|
391
353
|
|
|
392
354
|
Top row:
|
|
393
355
|
1. "Fully editable" (green): All scopes enabled - complete editing freedom
|
|
@@ -398,14 +360,18 @@ Bottom row:
|
|
|
398
360
|
4. "Fully locked" (red): All scopes disabled - completely locked
|
|
399
361
|
|
|
400
362
|
Note: Global scopes are set to 'Defer' to respect block-level settings.
|
|
401
|
-
`);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
363
|
|
|
405
|
-
|
|
364
|
+
Files created:
|
|
365
|
+
- output/constrained-scene.scene (scene with constraints)
|
|
366
|
+
- output/editing-constraints-result.png (visual result)
|
|
367
|
+
`);
|
|
368
|
+
} finally {
|
|
369
|
+
// Always dispose the engine to free resources
|
|
370
|
+
engine.dispose();
|
|
371
|
+
}
|
|
406
372
|
```
|
|
407
373
|
|
|
408
|
-
This guide demonstrates how to apply editing constraints to create
|
|
374
|
+
This guide demonstrates how to apply editing constraints in a headless environment to create templates that can be adopted and used with predefined limitations, ensuring brand consistency and design integrity.
|
|
409
375
|
|
|
410
376
|
## Understanding Scopes
|
|
411
377
|
|
|
@@ -422,16 +388,16 @@ Scopes exist at two levels:
|
|
|
422
388
|
|
|
423
389
|
CE.SDK provides scopes organized into logical categories:
|
|
424
390
|
|
|
425
|
-
| Category
|
|
426
|
-
|
|
|
427
|
-
| **Text Editing**
|
|
428
|
-
| **Fill & Stroke**
|
|
429
|
-
| **Shape**
|
|
430
|
-
| **Layer Transform**
|
|
431
|
-
| **Layer Appearance**
|
|
432
|
-
| **Effects & Filters** | Apply visual effects
|
|
433
|
-
| **Lifecycle**
|
|
434
|
-
| **Editor**
|
|
391
|
+
| Category | Purpose | Example Scopes |
|
|
392
|
+
| --- | --- | --- |
|
|
393
|
+
| **Text Editing** | Control text content and formatting | `text/edit`, `text/character` |
|
|
394
|
+
| **Fill & Stroke** | Manage colors and gradients | `fill/change`, `fill/changeType`, `stroke/change` |
|
|
395
|
+
| **Shape** | Modify shape properties | `shape/change` |
|
|
396
|
+
| **Layer Transform** | Control position and dimensions | `layer/move`, `layer/resize`, `layer/rotate`, `layer/flip`, `layer/crop` |
|
|
397
|
+
| **Layer Appearance** | Manage visual properties | `layer/opacity`, `layer/blendMode`, `layer/visibility` |
|
|
398
|
+
| **Effects & Filters** | Apply visual effects | `appearance/adjustments`, `appearance/filter`, `appearance/effect`, `appearance/blur`, `appearance/shadow` |
|
|
399
|
+
| **Lifecycle** | Control creation and deletion | `lifecycle/destroy`, `lifecycle/duplicate` |
|
|
400
|
+
| **Editor** | Manage scene-level actions | `editor/add`, `editor/select` |
|
|
435
401
|
|
|
436
402
|
## Scope Configuration
|
|
437
403
|
|
|
@@ -443,23 +409,7 @@ Global scopes set the default behavior for all blocks in the scene. They have th
|
|
|
443
409
|
- **Deny**: Always deny the action, overriding block-level settings
|
|
444
410
|
- **Defer**: Use block-level settings (default mode)
|
|
445
411
|
|
|
446
|
-
To ensure block-level scope settings are respected, set relevant global scopes to 'Defer'
|
|
447
|
-
|
|
448
|
-
```typescript highlight=highlight-global-scopes
|
|
449
|
-
// Set global scopes to 'Defer' to respect block-level scope settings
|
|
450
|
-
// Without this, global 'Allow' settings might override block-level restrictions
|
|
451
|
-
engine.editor.setGlobalScope('layer/move', 'Defer');
|
|
452
|
-
engine.editor.setGlobalScope('layer/resize', 'Defer');
|
|
453
|
-
engine.editor.setGlobalScope('lifecycle/destroy', 'Defer');
|
|
454
|
-
engine.editor.setGlobalScope('lifecycle/duplicate', 'Defer');
|
|
455
|
-
|
|
456
|
-
// Global scope modes:
|
|
457
|
-
// - 'Allow': Always allow (overrides block-level settings)
|
|
458
|
-
// - 'Deny': Always deny (overrides block-level settings)
|
|
459
|
-
// - 'Defer': Use block-level settings (respects setScopeEnabled)
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
Without setting global scopes to 'Defer', default 'Allow' settings might override your block-level restrictions. This is essential when applying fine-grained constraints.
|
|
412
|
+
To ensure block-level scope settings are respected, set relevant global scopes to 'Defer'. Without setting global scopes to 'Defer', default 'Allow' settings might override your block-level restrictions. This is essential when applying fine-grained constraints.
|
|
463
413
|
|
|
464
414
|
### Scope Resolution Priority
|
|
465
415
|
|
|
@@ -476,31 +426,31 @@ When both global and block-level scopes are set, they resolve in this order:
|
|
|
476
426
|
Prevent users from moving or repositioning a block while allowing other edits:
|
|
477
427
|
|
|
478
428
|
```typescript highlight=highlight-disable-move-scope
|
|
479
|
-
const disableMoveScope = (block: number) => {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
};
|
|
492
|
-
|
|
493
|
-
const moveLockedBlock = createExampleBlock(
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
);
|
|
502
|
-
// Block position is locked - users cannot move or reposition it
|
|
503
|
-
// Other scopes are explicitly enabled: resizing, rotation, flipping, deletion, duplication
|
|
429
|
+
const disableMoveScope = (block: number) => {
|
|
430
|
+
// Disable move scope
|
|
431
|
+
engine.block.setScopeEnabled(block, 'layer/move', false);
|
|
432
|
+
|
|
433
|
+
// Explicitly enable other transform scopes
|
|
434
|
+
engine.block.setScopeEnabled(block, 'layer/resize', true);
|
|
435
|
+
engine.block.setScopeEnabled(block, 'layer/rotate', true);
|
|
436
|
+
engine.block.setScopeEnabled(block, 'layer/flip', true);
|
|
437
|
+
|
|
438
|
+
// Explicitly enable lifecycle scopes
|
|
439
|
+
engine.block.setScopeEnabled(block, 'lifecycle/destroy', true);
|
|
440
|
+
engine.block.setScopeEnabled(block, 'lifecycle/duplicate', true);
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
const moveLockedBlock = createExampleBlock(
|
|
444
|
+
'Locked\nposition',
|
|
445
|
+
{
|
|
446
|
+
r: 0.5,
|
|
447
|
+
g: 0.75,
|
|
448
|
+
b: 0.9,
|
|
449
|
+
},
|
|
450
|
+
disableMoveScope
|
|
451
|
+
);
|
|
452
|
+
// Block position is locked - users cannot move or reposition it
|
|
453
|
+
// Other scopes are explicitly enabled: resizing, rotation, flipping, deletion, duplication
|
|
504
454
|
```
|
|
505
455
|
|
|
506
456
|
The block position is locked—users cannot move or reposition it. Other scopes remain enabled, allowing resizing, editing, and deletion. This pattern maintains layout integrity while allowing content updates.
|
|
@@ -510,61 +460,178 @@ The block position is locked—users cannot move or reposition it. Other scopes
|
|
|
510
460
|
Protect blocks from being deleted or duplicated:
|
|
511
461
|
|
|
512
462
|
```typescript highlight=highlight-disable-lifecycle-scopes
|
|
513
|
-
const disableLifecycleScopes = (block: number) => {
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
};
|
|
524
|
-
|
|
525
|
-
const lifecycleLockedBlock = createExampleBlock(
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
);
|
|
534
|
-
// Block cannot be deleted or duplicated
|
|
535
|
-
// Other scopes are explicitly enabled: moving, resizing, rotation, flipping
|
|
463
|
+
const disableLifecycleScopes = (block: number) => {
|
|
464
|
+
// Disable lifecycle scopes
|
|
465
|
+
engine.block.setScopeEnabled(block, 'lifecycle/destroy', false);
|
|
466
|
+
engine.block.setScopeEnabled(block, 'lifecycle/duplicate', false);
|
|
467
|
+
|
|
468
|
+
// Explicitly enable transform scopes
|
|
469
|
+
engine.block.setScopeEnabled(block, 'layer/move', true);
|
|
470
|
+
engine.block.setScopeEnabled(block, 'layer/resize', true);
|
|
471
|
+
engine.block.setScopeEnabled(block, 'layer/rotate', true);
|
|
472
|
+
engine.block.setScopeEnabled(block, 'layer/flip', true);
|
|
473
|
+
};
|
|
474
|
+
|
|
475
|
+
const lifecycleLockedBlock = createExampleBlock(
|
|
476
|
+
'Cannot\ndelete',
|
|
477
|
+
{
|
|
478
|
+
r: 0.75,
|
|
479
|
+
g: 0.75,
|
|
480
|
+
b: 0.75,
|
|
481
|
+
},
|
|
482
|
+
disableLifecycleScopes
|
|
483
|
+
);
|
|
484
|
+
// Block cannot be deleted or duplicated
|
|
485
|
+
// Other scopes are explicitly enabled: moving, resizing, rotation, flipping
|
|
536
486
|
```
|
|
537
487
|
|
|
538
488
|
Users cannot delete or duplicate the block but can still move, resize, and edit it. Use this for essential template elements that must remain present.
|
|
539
489
|
|
|
540
|
-
###
|
|
490
|
+
### Enabling All Scopes
|
|
491
|
+
|
|
492
|
+
Allow complete editing freedom by explicitly enabling all scopes:
|
|
493
|
+
|
|
494
|
+
```typescript highlight=highlight-enable-all-scopes
|
|
495
|
+
const enableAllScopes = (block: number) => {
|
|
496
|
+
// Explicitly enable all transform scopes
|
|
497
|
+
engine.block.setScopeEnabled(block, 'layer/move', true);
|
|
498
|
+
engine.block.setScopeEnabled(block, 'layer/resize', true);
|
|
499
|
+
engine.block.setScopeEnabled(block, 'layer/rotate', true);
|
|
500
|
+
engine.block.setScopeEnabled(block, 'layer/flip', true);
|
|
501
|
+
|
|
502
|
+
// Explicitly enable lifecycle scopes
|
|
503
|
+
engine.block.setScopeEnabled(block, 'lifecycle/destroy', true);
|
|
504
|
+
engine.block.setScopeEnabled(block, 'lifecycle/duplicate', true);
|
|
505
|
+
|
|
506
|
+
// Explicitly enable fill scopes
|
|
507
|
+
engine.block.setScopeEnabled(block, 'fill/change', true);
|
|
508
|
+
engine.block.setScopeEnabled(block, 'fill/changeType', true);
|
|
509
|
+
|
|
510
|
+
// Explicitly enable text scopes
|
|
511
|
+
engine.block.setScopeEnabled(block, 'text/edit', true);
|
|
512
|
+
engine.block.setScopeEnabled(block, 'text/character', true);
|
|
513
|
+
};
|
|
514
|
+
|
|
515
|
+
const fullyEditableBlock = createExampleBlock(
|
|
516
|
+
'Fully\neditable',
|
|
517
|
+
{
|
|
518
|
+
r: 0.5,
|
|
519
|
+
g: 0.85,
|
|
520
|
+
b: 0.5,
|
|
521
|
+
},
|
|
522
|
+
enableAllScopes
|
|
523
|
+
);
|
|
524
|
+
// All scopes are explicitly enabled - users have full editing capabilities
|
|
525
|
+
// This is the default behavior, but explicitly enabling shows clear intent
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
All scopes are explicitly enabled, providing users with full editing capabilities. While this is the default behavior, explicitly enabling shows clear intent.
|
|
529
|
+
|
|
530
|
+
### Disabling All Scopes
|
|
531
|
+
|
|
532
|
+
Create completely locked blocks by disabling all editing capabilities:
|
|
533
|
+
|
|
534
|
+
```typescript highlight=highlight-disable-all-scopes
|
|
535
|
+
const disableAllScopes = (block: number) => {
|
|
536
|
+
// Disable all transform scopes
|
|
537
|
+
engine.block.setScopeEnabled(block, 'layer/move', false);
|
|
538
|
+
engine.block.setScopeEnabled(block, 'layer/resize', false);
|
|
539
|
+
engine.block.setScopeEnabled(block, 'layer/rotate', false);
|
|
540
|
+
engine.block.setScopeEnabled(block, 'layer/flip', false);
|
|
541
|
+
engine.block.setScopeEnabled(block, 'layer/crop', false);
|
|
542
|
+
|
|
543
|
+
// Disable lifecycle scopes
|
|
544
|
+
engine.block.setScopeEnabled(block, 'lifecycle/destroy', false);
|
|
545
|
+
engine.block.setScopeEnabled(block, 'lifecycle/duplicate', false);
|
|
546
|
+
|
|
547
|
+
// Disable fill scopes
|
|
548
|
+
engine.block.setScopeEnabled(block, 'fill/change', false);
|
|
549
|
+
engine.block.setScopeEnabled(block, 'fill/changeType', false);
|
|
550
|
+
engine.block.setScopeEnabled(block, 'stroke/change', false);
|
|
551
|
+
|
|
552
|
+
// Disable text scopes
|
|
553
|
+
engine.block.setScopeEnabled(block, 'text/edit', false);
|
|
554
|
+
engine.block.setScopeEnabled(block, 'text/character', false);
|
|
555
|
+
|
|
556
|
+
// Disable shape scopes
|
|
557
|
+
engine.block.setScopeEnabled(block, 'shape/change', false);
|
|
558
|
+
|
|
559
|
+
// Disable editor scopes
|
|
560
|
+
engine.block.setScopeEnabled(block, 'editor/select', false);
|
|
561
|
+
|
|
562
|
+
// Disable appearance scopes
|
|
563
|
+
engine.block.setScopeEnabled(block, 'layer/opacity', false);
|
|
564
|
+
engine.block.setScopeEnabled(block, 'layer/blendMode', false);
|
|
565
|
+
engine.block.setScopeEnabled(block, 'layer/visibility', false);
|
|
566
|
+
};
|
|
567
|
+
|
|
568
|
+
const fullyLockedBlock = createExampleBlock(
|
|
569
|
+
'Fully\nlocked',
|
|
570
|
+
{
|
|
571
|
+
r: 0.9,
|
|
572
|
+
g: 0.5,
|
|
573
|
+
b: 0.5,
|
|
574
|
+
},
|
|
575
|
+
disableAllScopes
|
|
576
|
+
);
|
|
577
|
+
// All scopes are disabled - block is completely locked and cannot be edited
|
|
578
|
+
// Useful for watermarks, logos, or legal disclaimers
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
All scopes are disabled, making the block completely locked and uneditable. Useful for watermarks, logos, or legal disclaimers that must remain unchanged.
|
|
582
|
+
|
|
583
|
+
## Configuring Global Scopes
|
|
584
|
+
|
|
585
|
+
### Setting Global Scope Modes
|
|
586
|
+
|
|
587
|
+
Configure global scopes to control default behavior across all blocks:
|
|
588
|
+
|
|
589
|
+
```typescript highlight=highlight-global-scopes
|
|
590
|
+
// Set global scopes to 'Defer' to respect block-level scope settings
|
|
591
|
+
// Without this, global 'Allow' settings might override block-level restrictions
|
|
592
|
+
engine.editor.setGlobalScope('layer/move', 'Defer');
|
|
593
|
+
engine.editor.setGlobalScope('layer/resize', 'Defer');
|
|
594
|
+
engine.editor.setGlobalScope('lifecycle/destroy', 'Defer');
|
|
595
|
+
engine.editor.setGlobalScope('lifecycle/duplicate', 'Defer');
|
|
596
|
+
|
|
597
|
+
// Global scope modes:
|
|
598
|
+
// - 'Allow': Always allow (overrides block-level settings)
|
|
599
|
+
// - 'Deny': Always deny (overrides block-level settings)
|
|
600
|
+
// - 'Defer': Use block-level settings (respects setScopeEnabled)
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
Setting global scopes to 'Defer' ensures block-level scope settings are respected. Without this, default 'Allow' settings might override your block-level restrictions.
|
|
604
|
+
|
|
605
|
+
## Checking Scope State
|
|
606
|
+
|
|
607
|
+
### Checking Block-Level Scopes
|
|
541
608
|
|
|
542
609
|
Query the current state of any scope for a block:
|
|
543
610
|
|
|
544
611
|
```typescript highlight=highlight-block-level-scope-check
|
|
545
|
-
// Check if a scope is enabled for a specific block
|
|
546
|
-
const canMove = engine.block.isScopeEnabled(moveLockedBlock, 'layer/move');
|
|
547
|
-
const canDelete = engine.block.isScopeEnabled(
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
);
|
|
551
|
-
const canEditFully = engine.block.isScopeEnabled(
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
);
|
|
555
|
-
const canEditLocked = engine.block.isScopeEnabled(
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
);
|
|
559
|
-
|
|
560
|
-
// eslint-disable-next-line no-console
|
|
561
|
-
console.log('Move-locked block - layer/move enabled:', canMove); // false
|
|
562
|
-
// eslint-disable-next-line no-console
|
|
563
|
-
console.log('Lifecycle-locked block - lifecycle/destroy enabled:', canDelete); // false
|
|
564
|
-
// eslint-disable-next-line no-console
|
|
565
|
-
console.log('Fully editable block - layer/move enabled:', canEditFully); // true
|
|
566
|
-
// eslint-disable-next-line no-console
|
|
567
|
-
console.log('Fully locked block - layer/move enabled:', canEditLocked); // false
|
|
612
|
+
// Check if a scope is enabled for a specific block
|
|
613
|
+
const canMove = engine.block.isScopeEnabled(moveLockedBlock, 'layer/move');
|
|
614
|
+
const canDelete = engine.block.isScopeEnabled(
|
|
615
|
+
lifecycleLockedBlock,
|
|
616
|
+
'lifecycle/destroy'
|
|
617
|
+
);
|
|
618
|
+
const canEditFully = engine.block.isScopeEnabled(
|
|
619
|
+
fullyEditableBlock,
|
|
620
|
+
'layer/move'
|
|
621
|
+
);
|
|
622
|
+
const canEditLocked = engine.block.isScopeEnabled(
|
|
623
|
+
fullyLockedBlock,
|
|
624
|
+
'layer/move'
|
|
625
|
+
);
|
|
626
|
+
|
|
627
|
+
// eslint-disable-next-line no-console
|
|
628
|
+
console.log('Move-locked block - layer/move enabled:', canMove); // false
|
|
629
|
+
// eslint-disable-next-line no-console
|
|
630
|
+
console.log('Lifecycle-locked block - lifecycle/destroy enabled:', canDelete); // false
|
|
631
|
+
// eslint-disable-next-line no-console
|
|
632
|
+
console.log('Fully editable block - layer/move enabled:', canEditFully); // true
|
|
633
|
+
// eslint-disable-next-line no-console
|
|
634
|
+
console.log('Fully locked block - layer/move enabled:', canEditLocked); // false
|
|
568
635
|
```
|
|
569
636
|
|
|
570
637
|
Use `isScopeEnabled()` to check the block-level setting. This returns whether the scope is enabled at the block level, but doesn't consider global scope settings.
|
|
@@ -580,21 +647,51 @@ const moveAllowed = engine.block.isAllowedByScope(block, 'layer/move');
|
|
|
580
647
|
|
|
581
648
|
`isAllowedByScope()` returns the final permission after resolving block-level and global scope settings. Use this when you need to know if an action is actually permitted.
|
|
582
649
|
|
|
650
|
+
## Saving Constrained Scenes
|
|
651
|
+
|
|
652
|
+
Scope constraints are preserved when saving scenes:
|
|
653
|
+
|
|
654
|
+
```typescript highlight=highlight-save-constrained-scene
|
|
655
|
+
// Save the scene with all scope constraints preserved
|
|
656
|
+
const outputDir = './output';
|
|
657
|
+
if (!existsSync(outputDir)) {
|
|
658
|
+
mkdirSync(outputDir, { recursive: true });
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
// Save scene to file
|
|
662
|
+
const sceneData = await engine.scene.saveToString();
|
|
663
|
+
writeFileSync(`${outputDir}/constrained-scene.scene`, sceneData);
|
|
664
|
+
|
|
665
|
+
// eslint-disable-next-line no-console
|
|
666
|
+
console.log('✓ Scene saved to output/constrained-scene.scene');
|
|
667
|
+
// eslint-disable-next-line no-console
|
|
668
|
+
console.log(' All scope constraints are preserved in the scene file');
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
When this scene is loaded in a browser or client application, all scope constraints will be maintained. This allows you to:
|
|
672
|
+
|
|
673
|
+
1. Create templates server-side with predefined constraints
|
|
674
|
+
2. Save them to your storage/database
|
|
675
|
+
3. Load them client-side with constraints already applied
|
|
676
|
+
4. Ensure users can only edit allowed properties
|
|
677
|
+
|
|
583
678
|
## API Reference
|
|
584
679
|
|
|
585
|
-
| Method
|
|
586
|
-
|
|
|
587
|
-
| `engine.block.setScopeEnabled()`
|
|
588
|
-
| `engine.block.isScopeEnabled()`
|
|
680
|
+
| Method | Description |
|
|
681
|
+
| --- | --- |
|
|
682
|
+
| `engine.block.setScopeEnabled()` | Enable or disable a scope for a specific block |
|
|
683
|
+
| `engine.block.isScopeEnabled()` | Check if a scope is enabled at the block level |
|
|
589
684
|
| `engine.block.isAllowedByScope()` | Check if a scope is allowed considering both block and global settings |
|
|
590
|
-
| `engine.editor.setGlobalScope()`
|
|
591
|
-
| `engine.editor.findAllScopes()`
|
|
685
|
+
| `engine.editor.setGlobalScope()` | Set global scope policy (`'Allow'`, `'Deny'`, or `'Defer'`) |
|
|
686
|
+
| `engine.editor.findAllScopes()` | List all available scope keys |
|
|
687
|
+
|
|
688
|
+
|
|
592
689
|
|
|
593
690
|
---
|
|
594
691
|
|
|
595
692
|
## More Resources
|
|
596
693
|
|
|
597
|
-
- **[
|
|
694
|
+
- **[Node.js Documentation Index](https://img.ly/docs/cesdk/node.md)** - Browse all Node.js documentation
|
|
598
695
|
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
599
|
-
- **[Web Documentation](./
|
|
600
|
-
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|
|
696
|
+
- **[Web Documentation](./node.md)** - Interactive documentation with examples
|
|
697
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|