psychedelicious
b9ce1cfc16
chore: release v4.2.9.dev5
2024-09-06 22:56:24 +10:00
psychedelicious
17dd8bb37b
chore(ui): lint
2024-09-06 22:56:24 +10:00
psychedelicious
459d59aac4
feat(ui): generalize mask fill, add to action bar
2024-09-06 22:56:24 +10:00
psychedelicious
5cb26fac9f
feat(ui): implement interaction locking on layers
2024-09-06 22:56:24 +10:00
psychedelicious
3b8c9bb34b
feat(ui): iterate on layer actions
...
- Add lock toggle
- Tweak lock and enabled styles
- Update entity list action bar w/ delete & delete all
- Move add layer menu to action bar
- Adjust opacity slider style
2024-09-06 22:56:24 +10:00
psychedelicious
f9d380107c
feat(ui): collapsible entity groups
2024-09-06 22:56:24 +10:00
psychedelicious
f8b60da938
tidy(ui): rename some classes to be consistent
2024-09-06 22:56:24 +10:00
psychedelicious
f5fd25d235
feat(ui): tuned canvas undo/redo
...
- Throttle pushing to history for actions of the same type, starting with 1000ms throttle.
- History has a limit of 64 items, same as workflow editor
- Add clear history button
- Fix an issue where entity transformers would reset the entity state when the entity is fully transparent, resetting the redo stack. This could happen when you undo to the starting state of a layer
2024-09-06 22:56:24 +10:00
psychedelicious
0097958f62
tidy(ui): move all undoable reducers back to canvas slice
2024-09-06 22:56:24 +10:00
psychedelicious
7f8e0c00d9
fix(ui): dnd image count
2024-09-06 22:56:24 +10:00
psychedelicious
1ef5db035d
fix(ui): canvas entity opacity scale
2024-09-06 22:56:24 +10:00
psychedelicious
89ff9b8b88
perf(ui): optimize all selectors 2
...
Mostly selector optimization. Still a few places to tidy up but I'll get to that later.
2024-09-06 22:56:24 +10:00
psychedelicious
bac0ce1e69
perf(ui): optimize all selectors 1
...
I learned that the inline selector syntax recreates the selector function on every render:
```ts
const val = useAppSelector((s) => s.slice.val)
```
Not good! Better is to create a selector outside the function and use it. Doing that for all selectors now, most of the way through now. Feels snappier.
2024-09-06 22:56:24 +10:00
psychedelicious
04f78a99ad
feat(ui): rough out undo/redo on canvas
2024-09-06 22:56:24 +10:00
psychedelicious
f4d8809758
chore: release v4.2.9.dev4
...
Canvas dev build.
2024-09-06 22:56:24 +10:00
psychedelicious
06dd144c92
fix(ui): handle error from internal konva method
...
We are dipping into konva's private API for preview images and it appears to be unsafe (got an error once). Wrapped in a try/catch.
2024-09-06 22:56:24 +10:00
psychedelicious
9b3ec12a3e
feat(ui): split out loras state from canvas rendering state
2024-09-06 22:56:24 +10:00
psychedelicious
82d50bfcc9
feat(ui): split out session state from canvas rendering state
2024-09-06 22:56:24 +10:00
psychedelicious
7563214a6d
feat(ui): split out settings state from canvas rendering state
2024-09-06 22:56:24 +10:00
psychedelicious
d99dbdfe7c
feat(ui): split out tool state from canvas rendering state
2024-09-06 22:56:24 +10:00
psychedelicious
d9fe16bab4
feat(ui): split out params/compositing state from canvas rendering state
...
First step to restoring undo/redo - the undoable state must be in its own slice. So params and settings must be isolated.
2024-09-06 22:56:24 +10:00
psychedelicious
db50525442
feat(ui): add CanvasModuleBase class to standardize canvas APIs
...
I did this ages ago but undid it for some reason, not sure why. Caught a few issues related to subscriptions.
2024-09-06 22:56:24 +10:00
psychedelicious
e8190f4389
feat(ui): move selected tool and tool buffer out of redux
...
This ephemeral state can live in the canvas classes.
2024-09-06 22:56:24 +10:00
psychedelicious
e5e59bf801
feat(ui): move ephemeral state into canvas classes
...
Things like `$lastCursorPos` are now created within the canvas drawing classes. Consumers in react access them via `useCanvasManager`.
For example:
```tsx
const canvasManager = useCanvasManager();
const lastCursorPos = useStore(canvasManager.stateApi.$lastCursorPos);
```
2024-09-06 22:56:24 +10:00
psychedelicious
dd7d4da5e3
feat(ui): normalize all actions to accept an entityIdentifier
...
Previously, canvas actions specific to an entity type only needed the id of that entity type. This allowed you to pass in the id of an entity of the wrong type.
All actions for a specific entity now take a full entity identifier, and the entity identifier type can be narrowed.
`selectEntity` and `selectEntityOrThrow` now need a full entity identifier, and narrow their return values to a specific entity type _if_ the entity identifier is narrowed.
The types for canvas entities are updated with optional type parameters for this purpose.
All reducers, actions and components have been updated.
2024-09-06 22:56:24 +10:00
psychedelicious
f394584dff
feat(ui): move events into modules who care about them
2024-09-06 22:56:24 +10:00
psychedelicious
1a06b5f1c6
fix(ui): color picker resets brush opacity
2024-09-06 22:56:24 +10:00
psychedelicious
9a089495a1
fix(ui): scaled bbox loses sync
2024-09-06 22:56:24 +10:00
psychedelicious
c5c8859463
feat(ui): add context menu to entity list
2024-09-06 22:56:24 +10:00
psychedelicious
6a6efc4574
chore(ui): bump @invoke-ai/ui-library
2024-09-06 22:56:24 +10:00
psychedelicious
e6bc861ebf
fix(ui): missing vae precision in graph builders
2024-09-06 22:56:24 +10:00
psychedelicious
1499cea82e
chore: release v4.2.9.dev3
...
Instead of using dates, just going to increment.
2024-09-06 22:56:24 +10:00
psychedelicious
f55282f9bf
feat(ui): use new Result utils for enqueueing
2024-09-06 22:56:24 +10:00
psychedelicious
452784068b
fix(ui): graph building issue w/ controlnet
2024-09-06 22:56:24 +10:00
psychedelicious
e6b841126b
feat(ui): add Result type & helpers
...
Wrappers to capture errors and turn into results:
- `withResult` wraps a sync function
- `withResultAsync` wraps an async function
Comments, tests.
2024-09-06 22:56:24 +10:00
psychedelicious
31ce4f9283
chore: release v4.2.9.dev20240824
2024-09-06 22:56:24 +10:00
psychedelicious
60b3dc846e
fix(ui): lint & fix issues with adding regional ip adapters
2024-09-06 22:56:24 +10:00
psychedelicious
7bb2dc0075
feat(ui): add knipignore tag
...
I'm not ready to delete some things but still want to build the app.
2024-09-06 22:56:24 +10:00
psychedelicious
7f437adaba
feat(ui): duplicate entity
2024-09-06 22:56:24 +10:00
psychedelicious
5a1309cf6e
feat(ui): autocomplete on getPrefixeId
2024-09-06 22:56:24 +10:00
psychedelicious
f56648be3c
feat(ui): paste canvas gens back on source in generate mode
2024-09-06 22:56:24 +10:00
psychedelicious
15735dda6e
chore(ui): typegen
2024-09-06 22:56:24 +10:00
psychedelicious
1f1777f7a6
feat(nodes): CanvasV2MaskAndCropInvocation can paste generated image back on source
...
This is needed for `Generate` mode.
2024-09-06 22:56:24 +10:00
psychedelicious
167c8ba4ec
fix(ui): extraneous entity preview updates
2024-09-06 22:56:24 +10:00
psychedelicious
cc7ae42baa
fix(ui): newly-added entities are selected
2024-09-06 22:56:24 +10:00
psychedelicious
5fe844c5d9
feat(ui): add crosshair to color picker
2024-09-06 22:56:24 +10:00
psychedelicious
23248dad90
fix(ui): color picker ignores alpha
2024-09-06 22:56:24 +10:00
psychedelicious
caeefdf2ed
fix(ui): calculate renderable entities correctly in tool module
2024-09-06 22:56:24 +10:00
psychedelicious
d40d6291a0
feat(ui): better color picker
2024-09-06 22:56:24 +10:00
psychedelicious
fd38668f55
feat(ui): colored mask preview image
2024-09-06 22:56:24 +10:00