698 Commits

Author SHA1 Message Date
Igor Zinken
53ec6ca471 Prevent rendering and caching blended layers for occluded layers 2026-08-01 14:32:39 +02:00
Igor Zinken
5fb1e209a1 Fix compatability issue with Image2 class for Photoshop layer images 2026-08-01 13:16:36 +02:00
Igor Zinken
2844addf48 Set missing LICENSE header to white balance process 2026-08-01 12:59:51 +02:00
Igor Zinken
a5bd3fb7a5 Set Layer transparency flags when importing Photoshop documents 2026-08-01 12:59:15 +02:00
Igor Zinken
643f3b6e8a Added utility to determine whether a Layer occludes a lower Layers visibility 2026-08-01 12:16:46 +02:00
Igor Zinken
afd9311689 Minor styling updates to form elements in shared space 2026-08-01 09:52:55 +02:00
Igor Zinken
3019934d9b Implemented white balance filter, grouped quick adjustments into their own fieldset 2026-08-01 09:21:35 +02:00
Igor Zinken
b8bc421424 Added hue, saturation and lightness colour adjustments 2026-08-01 08:28:43 +02:00
Igor Zinken
4b23eb55be Add utility to expand and shrink selections 2026-07-29 12:42:04 +02:00
Igor Zinken
07de22851b Update DocumentFactory constructor to not accept arguments for runtime properties 2026-07-29 12:36:41 +02:00
dependabot[bot]
c863e65d1f Bump fast-xml-builder in the npm_and_yarn group across 1 directory (#100)
Bumps the npm_and_yarn group with 1 update in the / directory: [fast-xml-builder](https://github.com/NaturalIntelligence/fast-xml-builder).


Updates `fast-xml-builder` from 1.1.5 to 1.2.0
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-builder/blob/main/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-builder/compare/v1.1.5...v1.2.0)

---
updated-dependencies:
- dependency-name: fast-xml-builder
  dependency-version: 1.2.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-17 21:24:32 +02:00
Igor Zinken
b0994e9d81 Update dockerfile to use secure non-root user (#102)
* Update dockerfile to use secure non-root user
2026-06-17 21:23:11 +02:00
formless63
c96e42ceab Upgrade Node.js base image to version 24-alpine (#101)
* Upgrade Node.js base image to version 24-alpine

Current dockerfile fails to build. Updating Node.js base image from version 20 to 24 brings it to the current LTS and builds successfully for me.

* removed unnecessary yarn install step
2026-06-17 20:02:56 +02:00
Igor Zinken
cad9e49e67 Update package.json
Bump app version
1.2.0
2026-05-02 20:40:07 +02:00
Igor Zinken
3f94cc548b Address issues when filling or stroking out-of-visual-bounds Selections (#99)
When zooming in and panning the Viewport while a Selection is active, if a bucket fill or stroke operation is used, only the visible area of the Selection is filled.

This should be updated to fill the full area, even the out of visual bounds area.

This changeset also fixes an issue where stroke width would be applied differently at different zoom levels.
2026-05-01 21:33:03 +02:00
dependabot[bot]
c8d1a2df95 Bump the npm_and_yarn group across 1 directory with 2 updates (#96)
Bumps the npm_and_yarn group with 2 updates in the / directory: [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) and [postcss](https://github.com/postcss/postcss).


Updates `fast-xml-parser` from 5.5.8 to 5.7.1
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.5.8...v5.7.1)

Updates `postcss` from 8.5.6 to 8.5.10
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.6...8.5.10)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.7.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: postcss
  dependency-version: 8.5.10
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-26 12:18:08 +02:00
Igor Zinken
057425a1e8 Keeping track of sensible z indices 2026-04-26 12:10:34 +02:00
Igor Zinken
801c8b01c4 Cleanups to touch decorator 2026-04-26 11:53:09 +02:00
Igor Zinken
6584c86633 Add feather and threshold control to smart fill tool 2026-04-26 11:46:29 +02:00
Igor Zinken
fc0e708738 Use popper to position select boxes (#98)
Select boxes are fine to use in desktop / large screen modes, but on mobile the select boxes in the docked bottom panel will extend beyond the visible page range, obscuring their contents.
2026-04-26 11:23:25 +02:00
dependabot[bot]
8e1952f1eb Bump vite in the npm_and_yarn group across 1 directory (#86)
Bumps the npm_and_yarn group with 1 update in the / directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.4.1 to 6.4.2
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.4.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.4.2
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-25 10:54:06 +02:00
Igor Zinken
a4a86acb64 Fix issue where drag-to-cut-selection action would move the original Layer on long async operations 2026-04-25 10:45:46 +02:00
Igor Zinken
1277ba49d4 Small quality of life improvements
Fixed issue where shift clicking to select a Layer range was broken
Moved text tool position before transform tools
Fixed issue where corner handles would render in the wrong color
2026-04-25 10:30:41 +02:00
Igor Zinken
7029671a7a Fix issue with low memory mode paint operations 2026-04-24 21:31:52 +02:00
Igor Zinken
68cbf42a45 Address issue with drawing selections on touch screen devices 2026-04-24 19:31:18 +02:00
Igor Zinken
c13cd6812d Add corner handles to rectangular selections to allow pointer based resizing (#95)
Working with selections on touch screen devices (especially phones) is very cumbersome to get right.

This changeset introduces corner handles for rectangular selections. Once a selection is created, each corner has a handle from which the selection can be resized.

This also addresses a state history bug when stepping through changes to selections.
2026-04-24 19:18:11 +02:00
Igor Zinken
9c1388c199 Optimise toolbox display on mobile screens 2026-04-24 18:54:41 +02:00
Igor Zinken
d711cc4e99 Fix issue where conflicting keyboard shortcuts would prevent layer panel navigation (#89)
When the pan or drag tools are selected (or a selection is active) the keyboard shortcuts in the layer panel would not allow navigating the layers list.

When the layer panel is focused no outside keyboard shortcuts should be captured.
2026-04-24 08:11:02 +02:00
Igor Zinken
224c4390a1 Fix issue where cutting a selection by drag using the keyboard would not respect the Layer offset 2026-04-24 08:00:52 +02:00
Igor Zinken
36ee3ba712 Add to-timeline support to grid slicing window 2026-04-22 23:05:54 +02:00
Igor Zinken
601f70716d Improve keyboard accessibility of slider component 2026-04-22 23:02:51 +02:00
Igor Zinken
abc5c7f1a3 When dragging a Layer with an active Selection, the Selection content should be cut and dragged as a new Layer (#94)
When the DRAG tool is active while there is an active selection, when dragging starts, the contents of the selection should be cut from the currently active Layer and be pasted as a new Layer, which will continue the drag.
2026-04-22 18:24:07 +02:00
Igor Zinken
a6f67ad7c5 Image export settings are now stored inside the Document 2026-04-19 21:28:38 +02:00
Igor Zinken
b205a553d9 Restructure document model, factories and actions (#93)
Split `definitions/document.ts` into unique files per actor type.
Create `model` folder to store the above types, their factories and the state changing actions.
2026-04-19 20:34:06 +02:00
Igor Zinken
fe34448cbd Unset carbon copy on first tile 2026-04-19 13:30:49 +02:00
Igor Zinken
10b2ae0d46 Address issue where carbon copy on reshuffled timeline tiles would show wrong content 2026-04-19 13:23:57 +02:00
Igor Zinken
ed03c0b745 Address issue when merging and flattening Layers in a Timeline Document (#92)
When merging a layer down / flattening the layers in a Timeline Document, it is more logical if this is done for the currently active Tile group, instead of the whole Document.
2026-04-19 09:20:25 +02:00
Igor Zinken
638dfb4aac Fix issue where spritesheets exported from timelines would not appear in right tile order 2026-04-18 11:21:58 +02:00
Igor Zinken
e916c9bd4b Allow reorder of timeline tiles using drag (#91)
Tiles in a timeline cannot be reordered after creation, which can be a little cumbersome.
Implement draggable tiles allowing the user to reorder tiles at any moment.
2026-04-18 11:04:28 +02:00
Igor Zinken
d8e3e3957c Fix issues with state history for text value and color 2026-04-18 07:51:29 +02:00
Igor Zinken
da3ae37dbd Add blur filter to Layer filters (#90)
Any good photo editing software should have a gaussian blur filter.
2026-04-12 20:00:55 +02:00
Igor Zinken
6eeed8c2bd Add support for unique state history per Document (#88)
Long overdue.

State history would only work for the active Document. When opening a new Document (without closing the existing one), the state history would be flushed and initiated anew for every change made in the currently focused Document.

This changeset introduces a state history unique to the Document, meaning you can switch between open Documents and maintain the history associated with your changes.
2026-04-11 12:30:57 +02:00
Igor Zinken
6baaaff871 Allow copy/cut/paste operations on multiple selected Layers (#87)
Simple copy/cut/paste operations were not supported for selected Layers. Further more, only a single selected Layer at a time was supported.

We now support multi select using shift + click. Copy pasting content now also works across timeline tiles for easier editing.
2026-04-08 21:39:20 +02:00
Igor Zinken
12bc99687a Fix issue with outside-initiated drag events leaving brush operations in the wrong state 2026-04-07 21:50:21 +02:00
Igor Zinken
6dcb7607e4 Pixel brushes now draw directly on pointer down for single click paint operations 2026-04-07 21:49:31 +02:00
Igor Zinken
1faf450c7c Fixed issue where export to spritesheet was not always available when switching output file types 2026-04-04 13:11:09 +02:00
Igor Zinken
f085e19716 Add support for custom swatches 2026-04-04 12:36:47 +02:00
Igor Zinken
94b6a3c263 Update unit test mocks 2026-04-04 09:13:25 +02:00
Igor Zinken
1c39d482a6 Slight optimization to export window 2026-04-04 09:11:52 +02:00
Igor Zinken
b347321c89 Create new pixel brush, fill and draw operations on pixel art now no longer have aliased edges 2026-04-04 09:08:50 +02:00