6390 Commits

Author SHA1 Message Date
Andrey Antukh
56f1fcdb53 🐛 Fix crash when pasting image into text editor
When pasting an image (with no text content) into the text editor,
Draft.js calls handlePastedText with null/empty text. The previous fix
guarded splitTextIntoTextBlocks against null, but insertText still
attempted to build a fragment from an empty block array, causing
Modifier.replaceWithFragment to crash with 'Cannot read properties of
undefined (reading getLength)'.

Fix insertText to return the original state unchanged when there are no
text blocks to insert. Also guard handle-pasted-text in the ClojureScript
editor to skip the insert-text call entirely when text is nil or empty.

Signed-off-by: Andrey Antukh <niwi@niwi.nz>
2026-03-24 13:00:28 +00:00
Alejandro Alonso
ca427bcd4e
Merge pull request #8728 from penpot/niwinz-staging-dom-remove-child-issue
🐛 Fix removeChild crash on all portal components
2026-03-24 13:16:32 +01:00
Luis de Dios
5f722d9183
🐛 Fix show red bullet in workspace menu if mcp key is expired (#8727) 2026-03-24 12:27:09 +01:00
alonso.torres
937032c790 ✨ Allow for reconnections to MCP server 2026-03-24 11:32:47 +01:00
Eva Marco
dd6a3c291a
🐛 Fix tooltip shown on tab change (#8719) 2026-03-24 11:22:52 +01:00
Marina López
be437fbfa1 💄 Fix styles from select organization 2026-03-24 10:22:09 +01:00
Marina López
65ea27cbac
💄 Fix styles between grid layout inputs (#8673) 2026-03-23 20:05:13 +01:00
Renzo
852f9ce07f
🎉 Add drag-to-change for numeric inputs (#8536)
Signed-off-by: RenzoMXD <170978465+RenzoMXD@users.noreply.github.com>
2026-03-23 19:01:32 +01:00
Eva Marco
7adac6df40
🐛 Fix review comments (#8708)
* 🐛 Fix focus option only on arrowdown not at open

* 🐛 Fix focus on input when visible focus should be on options

* ♻️ Improve nativation, adding tab control and moving throught options is now cyclic

* ✨ Add selected option when inside cursor is inside option

* 🐛 Dropdown is positioned nex to the input alwais
2026-03-23 16:06:23 +01:00
Andrey Antukh
2905905a9f ♻️ Extract use-portal-container hook to reduce duplication
The dedicated-container portal pattern was repeated across 7 components.
Extract it into a reusable use-portal-container hook under app.main.ui.hooks.

Signed-off-by: Andrey Antukh <niwi@niwi.nz>
2026-03-23 13:47:33 +00:00
Andrey Antukh
ff60503ce6 🐛 Fix removeChild crash on all portal components
The previous fix (80b64c440c) only addressed portal-on-document* but
there were 6 additional components that portaled directly to
document.body, causing the same race condition when React attempted
to remove a node that had already been detached during concurrent
state updates (e.g. navigating away while a context menu is open).

Apply the dedicated-container pattern consistently to all portal
sites: modal, context menus, combobox dropdown, theme selector, and
tooltip. Each component now creates a dedicated <div> container
appended to body on mount and removed on cleanup, giving React an
exclusive containerInfo for each portal instance.

Signed-off-by: Andrey Antukh <niwi@niwi.nz>
2026-03-23 14:19:57 +01:00
Pablo Alba
11ed09f431 🐛 Fix link to nitrate create org 2026-03-23 12:32:50 +01:00
Eva Marco
4345cfaec7
🎉 Add natural sort on token names (#8672) 2026-03-23 11:24:59 +01:00
Eva Marco
72fd637ec2
♻️ Refactor small numeric inputs (#8660)
* ♻️ Refactor individual border radius inputs

* ♻️ Refactor layer opacity input

* ♻️ Refactor stroke width inputs and add icon only selects

* ♻️ Fix comments on PR
2026-03-23 11:00:29 +01:00
Pablo Alba
8406b5e9f8
✨ Add nitrate api for notify org deletion (#8697) 2026-03-23 09:59:57 +01:00
Juanfran
e53ff6d20b ✨ Open create org modal in Nitrate 2026-03-20 16:19:29 +01:00
Alejandro Alonso
02afd805ca Merge remote-tracking branch 'origin/staging' into develop 2026-03-20 16:00:24 +01:00
María Valderrama
9c3fbc59b9
🐛 Fix visibility of go to nitrate cc option 2026-03-20 13:42:45 +01:00
Alejandro Alonso
f068842a6c Merge remote-tracking branch 'origin/staging' into develop 2026-03-20 10:20:43 +01:00
alonso.torres
7a8824b826 ✨ Add support for export with wasm engine 2026-03-20 09:46:19 +01:00
Eva Marco
fb5ac5cd8b
🐛 Add box shadow to token dropdowns (#8685) 2026-03-20 09:02:27 +01:00
Xaviju
ee1dd80b6e
✨ Copy token name from contextual menu (#8566) 2026-03-19 23:22:44 +01:00
Xaviju
8ad62c6800
🐛 Add export menu to inspect styles tab (#8645)
* 🐛 Add export menu to inspect styles tab

* 📎 Add to CHANGES
2026-03-19 23:20:18 +01:00
Xaviju
f8913c755d
🎉 Rename token group (#8275)
* 🎉 Rename token group

* 📎 Add to CHANGES
2026-03-19 22:54:21 +01:00
Eva Marco
8e7e6ffc2f
♻️ Design review for numeric inputs (#8630)
* ♻️ Update tooltip position on icon buttons

* ♻️ Sort token groups by priority not alphabetically

* ♻️ Add proper padding on text-icon-inputs

* ♻️ Hide detach button when dropdown is open

* 🐛 Fix detach stroke width

* 🐛 Fix strokes applied on all rows

* 🐛 Fix nillable inputs

* 🐛 Fix comments on PR
2026-03-19 16:46:18 +01:00
Luis de Dios
9e9c28fe3c 🐛 Fix MCP notifications when there is only one tab 2026-03-19 16:39:29 +01:00
Eva Marco
4abaae4f80
🐛 Fix open tooltip on tab change (#8680) 2026-03-19 13:41:33 +01:00
Alejandro Alonso
d59aa03924
Merge pull request #8593 from penpot/azazeln28-feat-text-editor-composition-update
🎉 Feat add text editor composition update
2026-03-19 12:27:26 +01:00
Elena Torro
5ba53f7296 🎉 Add background blur for wasm render 2026-03-18 17:43:27 +01:00
BitToby
b876417d5b
✨ Add copy and paste for grid layout rows and columns via co… (#8498)
* ✨ Add copy and paste for grid layout rows and columns via context menu

* 🔧 Use grid-id instead of grid in context menu deps

---------

Co-authored-by: bittoby <bittoby@users.noreply.github.com>
2026-03-18 16:19:15 +01:00
alonso.torres
4e1b940e04 ✨ Remap token properties for usability 2026-03-18 15:30:04 +01:00
Aitor Moreno
72f5ecfe56 🎉 Feat add text editor composition update 2026-03-18 14:41:54 +01:00
Eva Marco
df8194acf5
🐛 Fix several bugs (#8604)
* 🐛 Fix console warning

* ♻️ Use DS buttons and remove deprecated CSS

* 🐛 Fix copy on update library message

* 🐛 Fix id prop on switch component

* 🐛 Fix tooltip shown after tab change
2026-03-18 12:52:58 +01:00
Pablo Alba
04a3e236fe
✨ Add a callback-url parameter to login (#8655) 2026-03-18 10:15:31 +01:00
Andrey Antukh
4da332a5e2 Merge remote-tracking branch 'origin/staging' into develop 2026-03-17 18:29:08 +01:00
Andrey Antukh
de03f3883b Merge remote-tracking branch 'origin/main' into staging 2026-03-17 18:28:39 +01:00
Andrey Antukh
ab4e195cca
✨ Add protection for stale cache of js assets loading issues (#8638)
* ✨ Use update-when for update dashboard state

This make updates more consistent and reduces possible eventual
consistency issues in out of order events execution.

* 🐛 Detect stale JS modules at boot and force reload

When the browser serves cached JS files from a previous deployment
alongside a fresh index.html, code-split modules reference keyword
constants that do not exist in the stale shared.js, causing TypeError
crashes.

This adds a compile-time version tag (via goog-define / closure-defines)
that is baked into the JS bundle. At boot, it is compared against the
runtime version tag from index.html (which is always fresh due to
no-cache headers). If they differ, the app forces a hard page reload
before initializing, ensuring all JS modules come from the same build.

* 📎 Ensure consistent version across builds on github e2e test workflow

---------

Signed-off-by: Andrey Antukh <niwi@niwi.nz>
2026-03-17 15:04:06 +01:00
Andrey Antukh
2d5392327e 🐛 Add minor improvements on wasm-render error handling 2026-03-17 10:58:43 +01:00
Luis de Dios
a5f09e18a8
🎉 Make the mcp plugin switching between tabs work correctly (#8597)
* ✨ Make the MCP plugin switching between tabs work correctly

* 🎉 Show notification when the plugin is loaded in another tab

* 📎 PR changes

* ✨ Add events
2026-03-17 10:17:02 +01:00
Andrey Antukh
e730e9ee64
🐛 Fix subscribe to undefined stream error in use-stream hook (#8633)
Add a nil guard before subscribing to the stream in the use-stream
hook. When a nil/undefined stream is passed (e.g., from a conditional
expression or timing edge case during React rendering), the subscribe
call on undefined causes a TypeError. The guard ensures we only
subscribe when the stream is defined.

Signed-off-by: Andrey Antukh <niwi@niwi.nz>
2026-03-17 10:06:16 +01:00
Marina López
1b8871df8e ✨ Update image nitrate modal 2026-03-16 14:23:23 +01:00
Dream
ce04780b6c
🐛 Make collapsible sidebar titles clickable to toggle (#8547)
Fixes #5168
2026-03-16 11:03:49 +01:00
Pablo Alba
8f35e451e6
✨ Add notification for nitrate when creating a team inside an organization (#8639) 2026-03-16 10:36:32 +01:00
Andrey Antukh
4c9775e182 Merge remote-tracking branch 'origin/staging-render' into develop 2026-03-16 09:35:12 +01:00
Andrey Antukh
328b7739e0
📎 Prepare changes and flags for next release (#8624) 2026-03-13 13:07:24 +01:00
Elena Torró
a68e06ffe9
Merge pull request #8587 from penpot/azazeln28-feat-word-boundary-cursor-navigation
🎉 Feat word boundary cursor navigation
2026-03-13 12:49:09 +01:00
Belén Albeza
fc64dfe9d6 Revert "✨ Add regression test for token highlight bug (13302) (#8573)"
This reverts commit d8249cc3db6283c12ba983d4b44a8c322aaffb6b.
2026-03-13 12:12:15 +01:00
Andrey Antukh
6d30989a2d Merge remote-tracking branch 'origin/staging-render' into develop 2026-03-13 11:54:04 +01:00
Andrey Antukh
50ce8c4739 Merge remote-tracking branch 'origin/staging' into staging-render 2026-03-13 11:53:20 +01:00
Andrey Antukh
cf94b56154 Merge remote-tracking branch 'origin/staging' into develop 2026-03-13 11:41:56 +01:00