* chore: Replace lodash with es-toolkit
Migrate all direct lodash imports to es-toolkit/compat for a smaller,
faster, lodash-compatible utility library. Transitive lodash usage from
other packages remains unchanged.
* fix: Restore isPlainObject semantics in CanCan policy
The lodash migration aliased `isObject` to `lodash/isPlainObject` and
the codemod incorrectly mapped the local name to es-toolkit's `isObject`,
which also returns true for arrays and functions. This caused condition
objects in policy definitions to be skipped, breaking authorization
checks across the codebase.
* fix: Restore unicode-aware length counting in validators
es-toolkit/compat's size() returns string.length, while lodash's _.size()
counts unicode code points. Switch to [...value].length to preserve the
previous behavior so multi-byte characters like emoji count as one.
* fix: include mermaid svgs in lightbox
* Fixes:
1. Focus isn't restored back to mermaid code block when Lightbox is closed
2. Read-only mode requires extra click on to both open and close Lightbox for mermaid SVGs
* fix: `zoom-in` cursor for SVGs
* fix: make SVGs downloadable
* fix: tsc
* fix: graphite
* fix: zoom-in should span the wrapper
* fix: graphite
* fix: name
* fix: no need to re-render mermaid svg within lightbox
fix: rely on `code-block` as the `svg` is updated upon doc change
* fix: graphite
* fix: lightbox crash when mermaid block is deleted
* fix: render mermaid at pos `0`
* fix: graphite
* fix: refactor to simplify Lightbox
* fix: graphite
* fix: when the lightbox active image is deleted in editor, it zooms out to (0, 0) upon closing lightbox
* Update Lightbox.tsx
---------
Co-authored-by: Tom Moor <tom@getoutline.com>
* fix: apply swipe actions on error component
* fix: enable copy and download action btns only when the image is loaded
* Revert "fix: enable copy and download action btns only when the image is loaded"
This reverts commit 9228d5e5df.
* feat: POC
* fix: cleanup
* fix: cleanup
* fix: can use existing `UiStore` in favor of `LightboxStore`
* fix: style dialog overlay and content
* fix: style and position action buttons
* fix: keyboard nav
* fix: display caption
* fix: cleanup
* fix: force `Lightbox` to unmount if `DocumentScene` re-renders
* fix: cleanup
* fix: images going out of bounds–trying `object-fit` for first pass
* fix: making `Figure` a flexbox and setting its size to img dimensions,
gets rid of the `object-fit` "letterboxing" effect
* feat: image transition
* fix: match animation to that of `ImageZoom`
* fix: `fade-in` overlay
* fix: match overlay background to main background
* fix: fade out nav if idle for 3s
* fix: width & height transition in firefox
* fix: move nav buttons sideways
* fix: button sizes
* fix: don't let nav buttons become invisible due to image in backdrop
* feat: download btn
* feat: handle swipe left, right & down on mobile, also double tap to open lightbox
* fix: off-by-one
* fix: for img to be visible, if not animating
* fix: cleanup
* just a showcase commit, it's broken and will be reverted
* Revert "just a showcase commit, it's broken and will be reverted"
This reverts commit 63d7cbda9895f92a530cfb3a8402eaacb2414947.
* feat: `animateOnClose`
* fix: prevent body from shifting horizontally
* Revert "fix: prevent body from shifting horizontally"
This reverts commit fcc2d0d1daaab458325ece880d13903b42560dfd.
* fix: lint
* fix: make lightbox resilient to doc changes
* fix: `VisuallyHidden` `Dialog.Title`
* fix: fade in action and nav buttons too
* fix: `fadeOut` overlay, action & nav buttons upon close
* fix: `dom.querySelector` is not a function
* fix: let `objectFit` compute the img dimensions
* fix: flashing caption
* fix: hide nav keys based on whether it's a first or last img
* fix: tooltip for action buttons
* Fixes:
1. `Space` with the image selected should trigger the lightbox
2. There should be a "Zoom in" cursor on the image when selected so you know you can click to zoom
* fix: fade out on close if there's img loading err
* fix: pull animation duration into a const
* fix: upscaled editor image animating unreliably
* fix: lint
* fixes:
1. Model as state machine
2. Replace `transition` with `animation`
* fix: cleanup
* fix: DRY
* fix: cleanup
* fix: img loading indicator
* fix: swipe
* fix: types
* fix: Incorrect transitions when image nodes are duplicated
* Tweaks, translations, aria
* fix: Incorrect transition if image is added while lightbox is open
* fix: review
* Remove ImageZoom, react-medium-image-zoom
* Tweak styling
* fix: Quick fix for multiple open editors
* refactor: Move active lightbox state into editor
* Apply graphite suggestions
---------
Co-authored-by: Tom Moor <tom@getoutline.com>