v0.17.0

abhigyanpatwari/GitNexusv0.17.0Nov 14, 2023by ad1992

AI Summary

A major update that deprecates the Ref API in favor of the new `excalidrawAPI` prop, adds support for programmatic frames and a laser pointer, and introduces Preact compatibility.

Key Highlights

  • Removal of `Ref` support in favor of `excalidrawAPI` prop.
  • Added programmatic support for frames.
  • Introduced a laser pointer feature and new event subscribers.
  • Added support for Preact framework.

Breaking Changes

  • Removed Ref support and discontinued ready/readyPromise APIs.
  • Changed useDevice hook return value to differentiate editor and viewport breakpoints.

New Features

  • Excalidraw API for external access
  • Frame support via programmatic API
  • Laser pointer feature
  • Preact support
  • OnPointerDown and OnPointerUp event subscribers

Full Release Notes

## v0.17.0 (2023-11-14)

### Features

- Added support for disabling `image` tool (also disabling image insertion in general, though keeps support for importing from `.excalidraw` files) [#6320](https://github.com/excalidraw/excalidraw/pull/6320).

  For disabling `image` you need to set 👇

  ```
  UIOptions.tools = {
    image: false
  }
  ```

- Support `excalidrawAPI` prop for accessing the Excalidraw API [#7251](https://github.com/excalidraw/excalidraw/pull/7251).

- Export [`getCommonBounds`](https://docs.excalidraw.com/docs/@excalidraw/excalidraw/api/utils#getcommonbounds) helper from the package [#7247](https://github.com/excalidraw/excalidraw/pull/7247).

- Support frames via programmatic API [#7205](https://github.com/excalidraw/excalidraw/pull/7205).

- Export `elementsOverlappingBBox`, `isElementInsideBBox`, `elementPartiallyOverlapsWithOrContainsBBox` helpers for filtering/checking if elements within bounds. [#6727](https://github.com/excalidraw/excalidraw/pull/6727)

- Regenerate ids by default when using transform api and also update bindings by 0.5px to avoid possible overlapping [#7195](https://github.com/excalidraw/excalidraw/pull/7195)

- Add onChange, onPointerDown, onPointerUp api subscribers [#7154](https://github.com/excalidraw/excalidraw/pull/7154).

- Support props.locked for setActiveTool [#7153](https://github.com/excalidraw/excalidraw/pull/7153).

- Add `selected` prop for `MainMenu.Item` and `MainMenu.ItemCustom` components to indicate active state. [#7078](https://github.com/excalidraw/excalidraw/pull/7078)

### Fixes

- Double image dialog on image insertion [#7152](https://github.com/excalidraw/excalidraw/pull/7152).

### Breaking Changes

- The `Ref` support has been removed in v0.17.0 so if you are using refs, please update the integration to use the [`excalidrawAPI`](http://localhost:3003/docs/@excalidraw/excalidraw/api/props/excalidraw-api) [#7251](https://github.com/excalidraw/excalidraw/pull/7251).

- Additionally `ready` and `readyPromise` from the API have been discontinued. These APIs were found to be superfluous, and as part of the effort to streamline the APIs and maintain simplicity, they were removed in version v0.17.0 [#7251](https://github.com/excalidraw/excalidraw/pull/7251).

- [`useDevice`](https://docs.excalidraw.com/docs/@excalidraw/excalidraw/api/utils#usedevice) hook's return value was changed to differentiate between `editor` and `viewport` breakpoints. [#7243](https://github.com/excalidraw/excalidraw/pull/7243)

### Build

- Support Preact [#7255](https://github.com/excalidraw/excalidraw/pull/7255). The host needs to set `process.env.IS_PREACT` to `true`

  When using `vite` or any build tools, you will have to make sure the `process` is accessible as we are accessing `process.env.IS_PREACT` to decide whether to use the `preact` build.

  Since `Vit`e removes env variables by default, you can update the Vite config to ensure it's available :point_down:

  ```
  define: {
    "process.env.IS_PREACT": process.env.IS_PREACT,
  },
  ```

## Excalidraw Library

**_This section lists the updates made to the excalidraw library and will not affect the integration._**

### Features

- Allow D&D dice app domain for embeds [#7263](https://github.com/excalidraw/excalidraw/pull/7263)

- Remove full screen shortcut [#7222](https://github.com/excalidraw/excalidraw/pull/7222)

- Make adaptive-roughness less aggressive [#7250](https://github.com/excalidraw/excalidraw/pull/7250)

- Render frames on export [#7210](https://github.com/excalidraw/excalidraw/pull/7210)

- Support mermaid flowchart and sequence diagrams to excalidraw diagrams 🥳 [#6920](https://github.com/excalidraw/excalidraw/pull/6920)

- Support frames via programmatic API [#7205](https://github.com/excalidraw/excalidraw/pull/7205)

- Make clipboard more robust and reintroduce contextmenu actions [#7198](https://github.com/excalidraw/excalidraw/pull/7198)

- Support giphy.com embed domain [#7192](https://github.com/excalidraw/excalidraw/pull/7192)

- Renderer tweaks [#6698](https://github.com/excalidraw/excalidraw/pull/6698)

- Closing of "Save to.." Dialog on Save To Disk [#7168](https://github.com/excalidraw/excalidraw/pull/7168)

- Added Copy/Paste from Google Docs [#7136](https://github.com/excalidraw/excalidraw/pull/7136)

- Remove bound-arrows from frames [#7157](https://github.com/excalidraw/excalidraw/pull/7157)

- New dark mode theme & light theme tweaks [#7104](https://github.com/excalidraw/excalidraw/pull/7104)

- Better laser cursor for dark mode [#7132](https://github.com/excalidraw/excalidraw/pull/7132)

- Laser pointer improvements [#7128](https://github.com/excalidraw/excalidraw/pull/7128)

- Initial Laser Pointer MVP [#6739](https://github.com/excalidraw/excalidraw/pull/6739)

- Export `iconFillColor()` [#6996](https://github.com/excalidraw/excalidraw/pull/6996)

- Element alignments - snapping [#6256](https://github.com/excalidraw/excalidraw/pull/6256)

### Fixes

- Image insertion bugs [#7278](https://github.com/excalidraw/excalidraw/pull/7278)

- ExportToSvg to honor frameRendering also for name not only for frame itself [#7270](https://github.com/excalidraw/excalidraw/pull/7270)

- Can't toggle penMode off due to missing typecheck in togglePenMode [#7273](https://github.com/excalidraw/excalidraw/pull/7273)

- Replace hard coded font family with const value in addFrameLabelsAsTextElements [#7269](https://github.com/excalidraw/excalidraw/pull/7269)

- Perf issue when ungrouping elements within frame [#7265](https://github.com/excalidraw/excalidraw/pull/7265)

- Fixes the shortcut collision between "toggleHandTool" and "distributeHorizontally" [#7189](https://github.com/excalidraw/excalidraw/pull/7189)

- Allow pointer events when editing a linear element [#7238](https://github.com/excalidraw/excalidraw/pull/7238)

- Make modal use viewport breakpoints [#7246](https://github.com/excalidraw/excalidraw/pull/7246)

- Align input `:hover`/`:focus` with spec [#7225](https://github.com/excalidraw/excalidraw/pull/7225)

- Dialog remounting on className updates [#7224](https://github.com/excalidraw/excalidraw/pull/7224)

- Don't update label position when dragging labelled arrows [#6891](https://github.com/excalidraw/excalidraw/pull/6891)

- Frame add/remove/z-index ordering changes [#7194](https://github.com/excalidraw/excalidraw/pull/7194)

- Element relative position when dragging multiple elements on grid [#7107](https://github.com/excalidraw/excalidraw/pull/7107)

- Freedraw non-solid bg hitbox not working [#7193](https://github.com/excalidraw/excalidraw/pull/7193)

- Actions panel ux improvement [#6850](https://github.com/excalidraw/excalidraw/pull/6850)

- Better fill rendering with latest RoughJS [#7031](https://github.com/excalidraw/excalidraw/pull/7031)

- Fix for Strange Symbol Appearing on Canvas after Deleting Grouped Graphics (Issue #7116) [#7170](https://github.com/excalidraw/excalidraw/pull/7170)

- Attempt to fix flake in wysiwyg tests [#7173](https://github.com/excalidraw/excalidraw/pull/7173)

- Ensure `ClipboardItem` created in the same tick to fix safari [#7066](https://github.com/excalidraw/excalidraw/pull/7066)

- Wysiwyg left in undefined state on reload [#7123](https://github.com/excalidraw/excalidraw/pull/7123)

- Ensure relative z-index of elements added to frame is retained [#7134](https://github.com/excalidraw/excalidraw/pull/7134)

- Memoize static canvas on `props.renderConfig` [#7131](https://github.com/excalidraw/excalidraw/pull/7131)

- Regression from #6739 preventing redirect link in view mode [#7120](https://github.com/excalidraw/excalidraw/pull/7120)

- Update links to excalidraw-app [#7072](https://github.com/excalidraw/excalidraw/pull/7072)

- Ensure we do not stop laser update prematurely [#7100](https://github.com/excalidraw/excalidraw/pull/7100)

- Remove invisible elements safely [#7083](https://github.com/excalidraw/excalidraw/pull/7083)

- Icon size in manifest [#7073](https://github.com/excalidraw/excalidraw/pull/7073)

- Elements being dropped/duplicated when added to frame [#7057](https://github.com/excalidraw/excalidraw/pull/7057)

- Frame name not editable on dbl-click [#7037](https://github.com/excalidraw/excalidraw/pull/7037)

- Polyfill `Element.replaceChildren` [#7034](https://github.com/excalidraw/excalidraw/pull/7034)

### Refactor

- DRY out tool typing [#7086](https://github.com/excalidraw/excalidraw/pull/7086)

- Refactor event globals to differentiate from `lastPointerUp` [#7084](https://github.com/excalidraw/excalidraw/pull/7084)

- DRY out and simplify setting active tool from toolbar [#7079](https://github.com/excalidraw/excalidraw/pull/7079)

### Performance

- Improve element in frame check [#7124](https://github.com/excalidraw/excalidraw/pull/7124)

---