Releases: zsviczian/obsidian-excalidraw-plugin
Releases · zsviczian/obsidian-excalidraw-plugin
Excalidraw 2.7.5-beta-1
Fixed
- PDF export scenario described in #2184
- Elbow arrows do not work within frames #2187
- Embedding images into Excalidraw with areaRef links did not work as expected due to conflicting SVG viewbox and width and height values
- Can't exit full-screen mode in popout windows using the Command Palette toggle action #2188
- If the image mask extended beyond the image in "Mask and Crop" image mode, the mask got misaligned from the image.
- PDF image embedding fixes that impacted some PDF files (not all):
- When cropping the PDF page in the scene (by double-clicking the image to crop), the size and position of the PDF cutout drifted.
- Using PDF++ there was a small offset in the position of the cutout in PDF++ and the image in Excalidraw.
New in ExcalidrawAutomate
/**
* Add, modify, or delete keys in element.customData and preserve existing keys.
* Creates customData={} if it does not exist.
* Takes the element id for an element in ea.elementsDict and the newData to add or modify.
* To delete keys set key value in newData to undefined. So {keyToBeDeleted:undefined} will be deleted.
* @param id
* @param newData
* @returns undefined if element does not exist in elementsDict, returns the modified element otherwise.
*/
public addAppendUpdateCustomData(id:string, newData: Partial<Record<string, unknown>>);
Minor code refactoring
- Replaced some instances of
any
with proper type - Removed few instances of
//@ts-ignore
- Updated javadoc-style documentation of ExcalidrawAutomate
- Updated ExcalidrawAutomate lib
Excalidraw 2.7.5
Fixed
- PDF export scenario described in #2184
- Elbow arrows do not work within frames #2187
- Embedding images into Excalidraw with areaRef links did not work as expected due to conflicting SVG viewbox and width and height values
- Can't exit full-screen mode in popout windows using the Command Palette toggle action #2188
- If the image mask extended beyond the image in "Mask and Crop" image mode, the mask got misaligned from the image.
- PDF image embedding fixes that impacted some PDF files (not all):
- When cropping the PDF page in the scene (by double-clicking the image to crop), the size and position of the PDF cutout drifted.
- Using PDF++ there was a small offset in the position of the cutout in PDF++ and the image in Excalidraw.
- Images cropped from PDF++ before Excalidraw's new cropping feature was introduced did not load.
- Updated a number of scripts including Split Ellipse, Select Similar Elements, and Concatenate Lines
New in ExcalidrawAutomate
/**
* Add, modify, or delete keys in element.customData and preserve existing keys.
* Creates customData={} if it does not exist.
* Takes the element id for an element in ea.elementsDict and the newData to add or modify.
* To delete keys set key value in newData to undefined. So {keyToBeDeleted:undefined} will be deleted.
* @param id
* @param newData
* @returns undefined if element does not exist in elementsDict, returns the modified element otherwise.
*/
public addAppendUpdateCustomData(id:string, newData: Partial<Record<string, unknown>>);
Minor code refactoring
- Replaced some instances of
any
with proper type - Removed few instances of
//@ts-ignore
- Updated javadoc-style documentation of ExcalidrawAutomate
- Updated ExcalidrawAutomate lib
Excalidraw 2.7.4
Fixed
- Regression from 2.7.3 where image fileId got overwritten in some cases
- White flash when opening a dark drawing #2178
Excalidraw 2.7.3
New
- Shade Master Script: A new script that allows you to modify the color lightness, hue, saturation, and transparency of selected Excalidraw elements, SVG images, and nested Excalidraw drawings. When a single image is selected, you can map colors individually. The original image remains unchanged, and a mapping table is added under
## Embedded Files
for SVG and nested drawings. This helps maintain links between drawings while allowing different color themes. - New Command Palette Command: "Duplicate selected image with a different image ID". Creates a copy of the selected image with a new image ID. This allows you to add multiple color mappings to the same image. In the scene, the image will be treated as if a different image, but loaded from the same file in the Vault.
QoL Improvements
- New setting under
Embedding Excalidraw into your notes and Exporting
>Image Caching and rendering optimization
. You can now set the number of concurrent workers that render your embedded images. Increasing the number will increase the speed but temporarily reduce the responsiveness of your system in case of large drawings. - Moved pen-related settings under
Excalidraw appearance and behavior
to their sub-heading calledPen
. - Minor error fixing and performance optimizations when loading and updating embedded images.
- Color maps in
## Embedded Files
may now include color keys "stroke" and "fill". If set, these will change the fill and stroke attributes of the SVG root element of the relevant file.
Fixed
- Toggling image size anchoring on and off by modifying the image link did not update the image in the view until the user forced saved it or closed and opened the drawing again. This was a side-effect of the less frequent view save introduced in 2.7.1
New in ExcalidrawAutomate
// Updates the color map of an SVG image element in the view. If a ColorMap is provided, it will be used directly.
// If an SVGColorInfo is provided, it will be converted to a ColorMap.
// The view will be marked as dirty and the image will be reset using the color map.
updateViewSVGImageColorMap(
elements: ExcalidrawImageElement | ExcalidrawImageElement[],
colors: ColorMap | SVGColorInfo | ColorMap[] | SVGColorInfo[]
): Promise<void>;
// Retrieves the color map for an image element.
// The color map contains information about the mapping of colors used in the image.
// If the element already has a color map, it will be returned.
getColorMapForImageElement(el: ExcalidrawElement): ColorMap;
// Retrieves the color map for an SVG image element.
// The color map contains information about the fill and stroke colors used in the SVG.
// If the element already has a color map, it will be merged with the colors extracted from the SVG.
getColorMapForImgElement(el: ExcalidrawElement): Promise<SVGColorInfo>;
// Extracts the fill (background) and stroke colors from an Excalidraw file and returns them as an SVGColorInfo.
getColosFromExcalidrawFile(file:TFile, img: ExcalidrawImageElement): Promise<SVGColorInfo>;
// Extracts the fill and stroke colors from an SVG string and returns them as an SVGColorInfo.
getColorsFromSVGString(svgString: string): SVGColorInfo;
// upgraded the addImage function.
// 1. It now accepts an object as the input parameter, making your scripts more readable
// 2. AddImageOptions now includes colorMap as an optional parameter, this will only have an effect in case of SVGs and nested Excalidraws
// 3. The API function is backwards compatible, but I recommend new implementations to use the object based input
addImage(opts: AddImageOptions}): Promise<string>;
interface AddImageOptions {
topX: number;
topY: number;
imageFile: TFile | string;
scale?: boolean;
anchor?: boolean;
colorMap?: ColorMap;
}
type SVGColorInfo = Map<string, {
mappedTo: string;
fill: boolean;
stroke: boolean;
}>;
interface ColorMap {
[color: string]: string;
};
Excalidraw 2.7.2
Fixed
- The plugin did not load on iOS 16 and older. #2170
- Added empty line between
# Excalidraw Data
and## Text Elements
. This will now follow correct markdown linting. #2168 - Adding an embeddable to view did not honor the element background and element stroke colors, even if it was configured in plugin settings. #2172
- Deconstruct selected elements script did not copy URLs and URIs for images embedded from outside Obsidian. Please update your script from the script library.
- When rearranging tabs in Obsidian, e.g. having two tabs side by side, and moving one of them to another location, if the tab was an Excalidraw tab, it appeared as non-responsive after the move, until the tab was resized.
Source Code Refactoring
- Updated filenames, file locations, and file name letter-casing across the project
- Extracted onDrop, onDragover, etc. handlers to DropManger in ExcalidrawView
Excalidraw 2.7.0-beta-x (debugging)
this is a debugging release
function minifyCode(code) {
const minified = minify(code, {
compress: {
arrows: false,
keep_fargs: true,
keep_fnames: true,
keep_infinity: true,
reduce_vars: false,
toplevel: false,
typeofs: false,
pure_getters: false,
unsafe: false
},
mangle: {
keep_fnames: true,
reserved: [
// Array methods
'reduce', 'map', 'filter', 'forEach', 'some', 'every',
'find', 'findIndex', 'includes', 'indexOf', 'slice',
'splice', 'concat', 'join', 'push', 'pop', 'shift',
'unshift',
// Core objects
'Array', 'Object', 'String', 'Number', 'Boolean',
'Function', 'Promise', 'Symbol', 'Set', 'Map',
// React
'React', 'ReactDOM'
]
},
output: {
comments: false,
beautify: false,
webkit: true
}
});
if (minified.error) {
throw new Error(minified.error);
}
return minified.code;
}
Excalidraw 2.7.1
Fixed
- Deleting excalidraw file from file system while it is open in fullscreen mode in Obsidian causes Obsidian to be stuck in full-screen view #2161
- Chinese fonts are not rendered in LaTeX statements #2162
- Since Electron 32 (newer Obsidian Desktop installers) drag and drop links from Finder or OS File Explorer did not work. Electron breaking change. This is now fixed
- Addressed unnecessary image reloads when changing windows in Obsidian
Excalidraw 2.7.0
Fixed
- Various Markdown embeddable "fuzziness":
- Fixed issues with appearance settings and edit mode toggling when single-click editing is enabled.
- Ensured embeddable file editing no longer gets interrupted unexpectedly.
- Hover Preview: Disabled hover preview for back-of-the-note cards to reduce distractions.
- Settings Save: Fixed an issue where plugin settings unnecessarily saved on every startup.
New Features
- Image Cropping Snaps to Objects: When snapping is enabled in the scene, image cropping now aligns to nearby objects.
- Session Persistence for Pen Mode: Excalidraw remembers the last pen mode when switching between drawings within the same session.
Refactoring
- Mermaid Diagrams: Excalidraw now uses its own Mermaid package, breaking future dependencies on Obsidian's Mermaid updates. This ensures stability and includes all fixes and improvements made to Excalidraw Mermaid since February 2024. The plugin file size has increased slightly, but this change significantly improves maintainability while remaining invisible to users.
- MathJax Optimization: MathJax (LaTeX equation SVG image generation) now loads only on demand, with the package compressed to minimize the startup and file size impact caused by the inclusion of Mermaid.
- On-Demand Language Loading: Non-English language files are now compressed and load only when needed, counterbalancing the increase in file size due to Mermaid and improving load speeds.
- Codebase Restructuring: Improved type safety by removing many
//@ts-ignore
commands and enhancing modularity. Introduced new management classes: CommandManager, EventManager, PluginFileManager, ObserverManager, and PackageManager. Further restructuring is planned for upcoming releases to improve maintainability and stability.
Excalidraw 2.7.0-beta-7
Fixed
- Excalidraw does not open in Obsidian popout windows
- Implemented shared mermaid instance to avoid each Excalidraw popout window instantiating a new Mermaid (assuming the user uses mermaid in all the windows)
Excalidraw 2.7.0-beta-6
QoL
- I compressed non-English language files and load them only on demand.
Refactoring
- Moved event handlers to EventManager class
- Removed many (not yet all) //@ ts-ignore instructions, thus improving type safety of the code