v1.19.0 Changelog
December 13, 2023
Check our migration guide for more details on the changes.
Breaking Changes
- The editor now sets all scopes directly for the selected target block. (Previously, the scope
content/replace
was set for the associated fill block instead.) - Use of the following scopes is being deprecated in favor of new, more granular scopes:
content/replace
- Use a combination offill/change
andtext/edit
instead.design/arrange
- Use a combination oflayer/move
,layer/resize
,layer/flip
, andlayer/rotate
instead.design/arrange/move
- Uselayer/move
instead.design/arrange/resize
- Uselayer/resize
instead.design/arrange/flip
- Uselayer/flip
instead.design/arrange/rotate
- Uselayer/rotate
instead.design/style
- Use a combination oflayer/opacity
,layer/blendMode
,appearance/adjustments
,appearance/blur
,appearance/effect
,appearance/filter
,appearance/shadow
,shape/change
,stroke/change
,fill/change
, andtext/character
instead.
- Translations have been updated:
- Removed the following keys:
scope.content.replace
scope.design.arrange
scope.design.style
- Renamed the following keys:
scope.design.arrange.flip
is nowscope.layer.flip
scope.design.arrange.move
is nowscope.layer.move
scope.design.arrange.resize
is nowscope.layer.resize
scope.design.arrange.rotate
is nowscope.layer.rotate
- Added the following keys:
component.placeholder.appearance.description
component.placeholder.appearance
component.placeholder.arrange.description
component.placeholder.arrange
component.placeholder.disableAll
component.placeholder.enableAll
component.placeholder.fill.description
component.placeholder.fill
component.placeholder.general.description
component.placeholder.general
component.placeholder.shape.description
component.placeholder.shape
component.placeholder.stroke.description
component.placeholder.stroke
component.placeholder.text.description
component.placeholder.text
scope.appearance.adjustments
scope.appearance.blur
scope.appearance.effect
scope.appearance.filter
scope.appearance.shadow
scope.fill.change
scope.layer.blendMode
scope.layer.opacity
scope.shape.change
scope.stroke.change
scope.text.character
scope.text.edit
- Removed the following keys:
- Editor: Switched to using the new Graphic block for images, videos, shapes, etc… for a more unified experience across different design elements
- Editor: Introduced a new Content Fill Inspector that allows switching the fill of Graphic blocks between video, image, and color
- Editor: All of the Graphic blocks (shapes, images, videos, etc…) now support filters, effects, blurs and adjustments
- Editor: UX/UI Improvements for both the Advanced and Default UI, as well as for the canvas actions
- Engine: Replaced
image
,sticker
,shapes/rect
,shapes/line
,shapes/ellipse
,shapes/polygon
,shapes/star
, andvector_path
blocks with a new, more composablegraphic
design block. Old scenes are automatically migrated when they get loaded. For a full list and detailed description of how to adapt to these changes, check out our documentation - Engine: Added optional
shapeType
,fillType
andkind
keys to our asset definitions. Fill type ids may not be set as the value of theblockType
property any more. E.g. in order to create a video asset,blockType
should now be set to//ly.img.ubq/graphic
andfillType
should be set to//ly.img.ubq/fill/video
. - Engine/Web: Introduced new union types:
DesignBlockTypesShorthand
,DesignBlockTypesLonghand
,DesignBlockTypes
for top-level design blocks.ShapeTypesShorthand
,ShapeTypesLonghand
,ShapeTypes
for shape blocks.FillTypesShorthand
,FillTypesLonghand
,FillTypes
for fill blocks.EffectTypesShorthand
,EffectTypesLonghand
,EffectTypes
for effect blocks.BlurTypesShorthand
,BlurTypesLonghand
,BlurTypes
for blur blocks.BlockTypesShorthand
,BlockTypesLonghand
,BlockTypes
for all blocks combined.
- Engine/Web: The
create
API now expects an ID of typeDesignBlockTypes
insteadDesignBlockType
. - Engine/Web: The
createFill
API now expects an ID of typeFillTypes
instead ofstring
. - Engine/Web: The
getType
API now returns an ID of typeBlockTypesLonghand
instead ofDesignBlockType
. - Engine/Web: The
findByType
API now expects an ID of typeBlockTypes
instead ofDesignBlockType
. - Engine/Web: The
createShape
API now expects and ID of typeShapeTypes
instead ofstring
. - Engine/Web: The
createEffect
API now expects and ID of typeEffectTypes
instead ofstring
. - Engine/Web: The
createBlur
API now expects and ID of typeBlurTypes
instead ofstring
. - Engine/Web: The
DesignBlockType
enum is now removed in favor of introducing a new alternative string-literal types that are more representative of our API signature.
Non Breaking Changes
- UBQ: Add
BlockAPI.isIncludedInExport
andBlockAPI.setIncludedInExport
to allow blocks to be excluded from the export process without having to rely on the properties API. - UBQ: All Cutouts have the always on top attribute by default.
- Engine: Added
createShape
,hasShape
,getShape
,setShape
APIs for changing the shape of a design block. - Engine: Added the
graphic
design block with support for the new shape APIs. - Engine: Added
setKind
,getKind
andfindByKind
APIs for categorizing different design blocks of the same type with custom string tags. - Engine: Added the
fill/changeType
scope to prevent unwanted fill type changes. - Placeholder Settings now feature more granular options.
- Editor: Clickable area of a cutout is a stroke 6 pixels wide centered on its offset path.
- Editor/Web: Fixed double clicks for entering crop mode and text edit mode not recognized on mobile browsers.
- Editor: DPI input is available for pixel design unit as well
- Engine: Add
BlockAPI.isTransformLocked
,BlockAPI.setTransformLocked
, and thetransformLocked
property. - Engine: Fixed the image edge handles to scale the image around the center opposite handle instead of the corners.
- Engine: Prevented crop edits via edge handles if cropping is not allowed for adopters.
- Engine: Fixed color fill leak when duplicating
Text
elements resulting in massive scene file sizes. - Engine: When
DoubleClickSelectionMode
is set toDirect
, hovering/clicking in the empty space within a group highlights/selects that group. - Editor: Fixed performance issue when playing back videos
- Engine: Fix video support detection on Chrome for Windows.
- Engine: Legal symbols (©, ®, ™) are no longer rendered as their emoji counterpart.
- Editor: Pause video playback when selecting an element in the scene.
- Engine: Lower memory usage when downscaling images to
maxImageSize
. - Engine: Fix MP4 videos that make use of edts and elst atoms.
- Engine: Added mousewheel support
The CreativeEngine canvas now supports mouse wheel events on the canvas to
scroll and zoom the scene. The CreativeEngine instance gained a new method,
setWheelEventTarget
, which can be used to reinstall the event listener on another DOM element. This can be useful for situations where custom DOM elments are positioned on top of the canvas. Two engine settings have been added to enable/disable scrolling and zooming:mouse/enableZoom
andmouse/enableScroll
, both default to true. - Engine: Removed arbitrary strings for engine settings from the TypeScript
definitions. Passing arbitrary strings to methods such as
setSettingBool
orsetSettingString
was never actually supported. The types have been adjusted to reflect that fact. - Editor/Engine: The Typescript types of the
getSetting
/setSetting
methods in the EditorAPI have been made more strict:- Previously, Typescript allowed arbitrary strings as keys, which would have led to an error at runtime. These have been removed.
- Support for prefixing settings keys with
ubq://
will be removed in a future version. The function signatures have been updates to provide a deprecation warning. - A few boolean settings not meant for public use have been removed.