* 🐛 Fix non-integer row/column values in grid cell position inputs
The numeric-input component allows Alt+arrow key increments of 0.1x the
step value, which could produce float values (e.g. 4.5, 0.5) when users
adjusted grid cell row/column/row-span/column-span positions. The schema
requires these fields to be integers, causing backend validation errors.
Round the input values to integers in the on-grid-coordinates callback
before passing them to update-grid-cell-position.
Signed-off-by: Andrey Antukh <niwi@niwi.nz>
* 🐛 Enforce integer-only values in grid cell numeric inputs
Add an `integer` prop to the legacy `numeric-input*` component that
rounds parsed values in `parse-value`, ensuring all input paths (typed
text, arrow keys, Alt+arrow, mouse wheel, expressions) produce integers.
Use it for all six row/column inputs in the grid cell options panel.
Signed-off-by: Andrey Antukh <niwi@niwi.nz>
---------
Signed-off-by: Andrey Antukh <niwi@niwi.nz>
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>
The previous implementation passed document.body directly as the
React portal containerInfo. During unmount, React's commit phase
(commitUnmountFiberChildrenRecursively, case 4) sets the current
container to containerInfo and then calls container.removeChild()
for every DOM node inside the portal tree.
When two concurrent state updates are processed — e.g. navigating
away from a dashboard section while a file-menu portal is open —
React could attempt document.body.removeChild(node) twice for the
same node, the second time throwing:
NotFoundError: Failed to execute 'removeChild' on 'Node':
The node to be removed is not a child of this node.
The fix allocates a dedicated <div> container per portal instance
via mf/use-memo. The container is appended to body on mount and
removed in the effect cleanup. React then owns an exclusive
containerInfo and its unmount path never races with another
portal or the modal container (which also targets document.body).
Signed-off-by: Andrey Antukh <niwi@niwi.nz>
* 🐛 Fix unable to finish the create account form using keyboard
* 📎 Prefer dom/click over dom/click!
---------
Co-authored-by: Andrey Antukh <niwi@niwi.nz>
* 🎉 Add new form system on border-radius token modals
* ♻️ Create new namespace and separate components
* ♻️ Refactor submit button
---------
Co-authored-by: Andrey Antukh <niwi@niwi.nz>
* 🎉 Add tokens to color row
* 🎉 Add color-token to stroke input
* 🐛 FIx change token on multiselection with groups
* 🔧 Add config flag
* 🐛 Fix comments
* 🐛 Reorder component menu options in assets tab
* ♻️ Use new component syntax
* 📚 Add bugfix to changelog
* ♻️ Code restructuring and SCSS improvements
* ✨ Add shortcut for creating variant to the shortcuts panel
* ♻️ Update components to new rumext syntax
* 🐛 Fix unique "key" prop error for each child in a list
* ♻️ Remove deprecated icons and CSS cleanup
* 📎 PR changes
* ✨ Add token aplication to colorpicker
* 🐛 Change fn name
* 🐛 Change scss from file
* 🐛 Change color for direct-color
* 🐛 Remove vector from fns
* 🐛 Fix CI
* 🐛 Change color-option name
* 🐛 Fix comments
* 🐛 Remove sets without color tokens
* ♻️ Rename old icons as deprecated
* ♻️ Take icons from the namespace for the icon component
* ♻️ Take icons from the namespace for the icon-button component
* 🐛 Fix having multiple dropdown menus opened on dashboard page
* ♻️ Refactor dropdown-menu
Make it follow new standards and make it external api more usable,
not depending on manually provided list of ids.
This also implements the autoclosing of "other" active/open
dropdown-menu (or other similar components).
* 📎 Add PR feedback changes
* 🐛 Fix incorrect event handling on project-menu
* 🐛 Fix unexpected exception
---------
Co-authored-by: Andrey Antukh <niwi@niwi.nz>