Commit Graph

4077 Commits

Author SHA1 Message Date
shanyue
f6fbc8d9ff feat(svgcanvas): Trigger 'changed' event on text attribute modifications (#1085)
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
check each push / build (push) Has been cancelled
* feat(svgcanvas): Trigger 'changed' event on text attribute modifications

This update adds a call to the 'changed' event for various text attribute methods, ensuring that changes to text elements are properly tracked and reflected in the SVG canvas. The methods updated include setBold, setItalic, setTextAnchor, setLetterSpacing, setWordSpacing, setTextLength, setLengthAdjust, setFontFamily, setFontColor, and setFontSize.

* refactor(svgcanvas): Simplify text attribute methods and optimize 'changed' event emission

This update introduces helper functions to streamline the handling of selected text elements and their attribute changes. The methods setBold, setItalic, setTextAnchor, setLetterSpacing, setWordSpacing, and setTextLength now utilize these helpers to filter and notify only modified text elements, improving performance and clarity in event emissions.
2026-03-20 00:23:35 +01:00
shanyue
7c6085e7b9 fix(svgcanvas): Handle 'none' stroke color in SVG elements (#1084)
This update modifies the stroke color handling in both the SvgCanvas and ext-connector modules. When the stroke color is set to 'none', it now correctly assigns an empty string or 'none' instead of a hex value, ensuring proper rendering of SVG elements without strokes.
2026-03-16 16:08:34 +01:00
Geoff Youngs
173dd2607a Fix/rotation recalc compound transforms (#1083)
* Fix rotation recalculation corrupting compound transforms

Two bugs in the rotation center recalculation triggered by attribute
changes on rotated elements:

1. The recalculation fires for ALL attribute changes (stroke-width,
   fill, opacity, etc.) even though only geometric attributes (x, y,
   width, height, d, points, etc.) can change the bbox center. This
   causes unnecessary and incorrect rotation center updates.

2. In undo.js, the center is computed through ALL remaining transforms
   via transformListToTransform(tlist).matrix, but for compound
   transform lists like [translate(tx,ty), rotate(angle)], the
   pre-rotation translate leaks into the center calculation, producing
   rotate(angle, bcx+tx, bcy+ty) instead of the correct
   rotate(angle, bcx, bcy).

3. In history.js (undo/redo), the code replaces the ENTIRE transform
   attribute with just rotate(...), completely destroying any other
   transforms (translate, scale, etc.) in the list.

Fixes:
- Guard recalculation with a BBOX_AFFECTING_ATTRS set so non-geometric
  attribute changes skip the rotation block entirely.
- In undo.js, use transformListToTransform(tlist, n, max) to compute
  the center through only post-rotation transforms.
- In history.js, replace string-based transform replacement with
  transform list API that finds and updates only the rotation entry,
  preserving all other transforms. Extract shared logic into
  relocateRotationCenter() helper.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add tests for rotation recalculation with compound transforms

Tests demonstrate and verify fixes for three bugs:

1. Non-geometric attributes (stroke-width, fill, opacity) no longer
   trigger rotation center recalculation — the transform list is
   left untouched.

2. Geometric attribute changes on elements with compound transforms
   (e.g. translate + rotate) compute the rotation center using only
   post-rotation transforms, preventing the translate from leaking
   into the center calculation.

3. ChangeElementCommand.apply/unapply preserve compound transform
   structure instead of replacing the entire transform attribute
   with just rotate(...).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add visual demo and screenshot for rotation recalculation bug

Includes an HTML demo showing both bugs side-by-side:
- Bug 1: Non-geometric attribute changes (stroke-width) on compound
  transforms corrupt character positions (e.g., word art on curves)
- Bug 2: Rotation center computed through ALL transforms instead of
  only post-rotation transforms, causing translate to leak into center

Each panel shows Original / Buggy / Fixed comparisons with the actual
SVG transform math applied. A Playwright script generates screenshots.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add sample SVG demonstrating compound transform corruption bug

A pinwheel of 6 colored rectangles using translate(200,200) rotate(N).
Loading this into SVG-Edit and changing stroke-width on the group
triggers the rotation recalculation bug on unfixed builds.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix standard linting: object properties on separate lines

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Centralize BBOX_AFFECTING_ATTRS and fix bbox-before-remove safety

Address two code review comments:

1. Export BBOX_AFFECTING_ATTRS from history.js and import it in undo.js
   so the attribute list is defined in one place.

2. Compute getBBox() before calling tlist.removeItem() so that a falsy
   bbox causes an early return/break without having already destroyed
   the rotation transform.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:28:53 +01:00
Namhoon Lee
0be0c3916c fix(text-actions): Calculate accumulated transform matrix for text inside groups (#1082)
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
check each push / build (push) Has been cancelled
When editing text inside a group element, the text cursor was appearing
in the wrong position because only the text element's own transform was
being considered, ignoring transforms from parent groups.

This change:
- Adds a new #getAccumulatedMatrix() method that traverses up the DOM tree
  from the text element to the SVG content element, collecting and multiplying
  all transform matrices along the way
- Updates the init() method to use this accumulated matrix instead of just
  the text element's transform
- Updates test mock to include getSvgContent() method

Fixes the issue where editing text inside a transformed group would show
the cursor at the wrong position.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 14:57:35 +01:00
shanyue
b9149f73cb Update svgWhiteList in sanitize.js to include 'font-stretch' for rele… (#1081)
* Update svgWhiteList in sanitize.js to include 'font-stretch' for relevant SVG elements
* Refactor svgWhiteList in sanitize.js to utilize FONT_ATTRIBUTES for better maintainability and consistency across SVG elements
2026-01-30 15:28:57 +01:00
Anthony Hernandez
70d7a3e0bf Update CodeQL workflow to v4 and replace deprecated LGTM badges (#1079)
* Add CodeQL workflow and replace deprecated LGTM badges
2026-01-20 11:54:29 +01:00
JFH
83d84d1e27 Jan2026 fixes (#1078)
* fix #1074 build issue with using workspace:* syntax.
* fix svgcanvas edge cases
* some js modernization
2026-01-13 18:51:05 +01:00
JFH
97386d20b5 Jan2026 fixes (#1077)
* fix release script
* fix svgcanvas edge cases
* Update path-actions.js
* add modern js
* update deps
* Update CHANGES.md
2026-01-11 00:57:06 +01:00
JFH
9dd1349599 Fix link to SVGEdit V7 editor 2025-12-07 19:54:52 +01:00
JFH
35b3d62df1 Update publish.mjs 2025-12-07 19:49:35 +01:00
JFH
76c8e42cb2 Merge pull request #1073 from SVG-Edit/Vite
Migration to Vite a
2025-12-07 15:40:34 -03:00
JFH
d405708005 added translations 2025-12-07 19:21:56 +01:00
JFH
7ca39b6471 add flip buttons
also update svgedit.css
2025-12-07 18:56:10 +01:00
JFH
370ba56ff0 Simplify publish process 2025-12-07 18:20:29 +01:00
JFH
28fe82b61e fix CI issue 2025-12-07 11:26:25 +01:00
JFH
7fb5a9b866 Editor explicitely uses the package in the workspace
also updated deps.
2025-12-07 11:14:30 +01:00
JFH
fa380402e1 increase test coverage
extend test coverage
2025-12-07 10:56:29 +01:00
JFH
a37fbac749 migration to vite/playwright 2025-11-30 19:10:16 +01:00
JFH
babd3490c9 Nov25 fixes (#1072)
* update deps
* fixes #963 and #1061
* fix the issue #974
* update test
2025-11-27 18:10:49 +01:00
JFH
16a0e0d945 update deps 2025-11-27 17:58:09 +01:00
Qscy
03355487ee Add Alt + Wheel Zoom Shortcut & Fix Localization for Panning & Update zh-CN locale (#1067)
* Add a new shortcut( Alt + wheels ) for zoom in/out

* update zh-CN locale

* Fix a ext-panning problem cound not fit locale

* Style for passing linter
2025-09-11 19:48:42 +02:00
JFH
1dc44cb378 Update dependencies and improve test coverage
Upgraded several dependencies and devDependencies in package.json and package-lock.json, including Babel, core-js, browser-fs-access, i18next, jspdf, cypress, and rollup. Test coverage improved in multiple files as reflected in coverage-summary.json.
2025-08-26 23:53:58 +02:00
JFH
7c69c52209 7.3.8 2025-06-09 17:04:22 +02:00
JFH
3f9d674854 svgcanvas 7.2.7 2025-06-09 17:01:41 +02:00
JFH
865d1bea33 Prefer href to xlink href (#1059) 2025-06-09 16:59:29 +08:00
JFH
887ad2e39f Fix group rotation (#1058)
* Update history.js
- Change `BatchCommand.unapply` to use `[...this.commands].reverse()` so the original array is never mutated.
- This preserves the order of commands and ensures history integrity.
2025-06-09 00:33:39 +08:00
Michael S. Scherotter
c127c3734b Fixed a bug where a rotated text or image did not translate correctly. (#1055) 2025-05-21 08:27:57 +02:00
JFH
ede259ae87 7.3.7 2025-05-12 10:36:09 +02:00
Michael S. Scherotter
f962f9d884 Fixed issue where foreignObject contents styles were getting removed on object moving (#1053) 2025-05-05 08:55:18 +02:00
Michael S. Scherotter
4b822fe190 Fixed issue where svgToString was converting HTML elements to uppercase in svgCanvas.svgToString() (#1051) 2025-05-01 23:02:34 +02:00
szerintem
baa68718c8 fix the order of config() and init() in readme (#1049) 2025-04-21 09:57:58 +02:00
JFH
c22cc05006 fixes #1042 (#1043) 2025-04-01 12:08:06 +02:00
JFH
8b55657c70 add cursors svg 2025-03-30 17:15:55 +02:00
JFH
2550af8353 7.3.6 2025-03-28 20:23:06 +01:00
JFH
1859978590 release 2025-03-28 20:09:29 +01:00
JFH
a7cc873583 update deps 2025-03-28 20:02:17 +01:00
JFH
0a89750036 start tests on components 2025-03-28 19:23:41 +01:00
Michael S. Scherotter
dc0ce52e71 Html elements in foreign object (#1041) 2025-03-28 18:00:19 +01:00
Michael S. Scherotter
5c05fd77bc Fixed bug in Editor.loadFromURL where the promise was not resolving (#1040) 2025-03-26 08:08:41 +01:00
Michael S. Scherotter
f4a66c989c Fixed bug in ext-opensave.js when dropping text. (#1038) 2025-03-23 08:11:39 +01:00
dependabot[bot]
dd6b48779f Bump jspdf from 3.0.0 to 3.0.1 (#1036) 2025-03-22 08:08:55 +01:00
JFH
56296446ba consider pathedit mode when zooming (#1035)
* consider pathedit mode when zooming
* new helper function and style improvements
* update dependencies
2025-03-16 11:58:39 +01:00
S1NJED
1b847fa20c Fix gradient (#1033)
* fix: color picker popup duplicate

Signed-off-by: sinjed <oooguuh@gmail.com>

* removed console log

Signed-off-by: sinjed <oooguuh@gmail.com>

* lint

Signed-off-by: sinjed <oooguuh@gmail.com>

---------

Signed-off-by: sinjed <oooguuh@gmail.com>
2025-03-12 09:22:33 +01:00
JFH
88be19fa59 release 7.3.5
* update react-test to react 19

* release 7.3.5
2025-03-09 22:46:01 +01:00
Michael S. Scherotter
61e8d439c4 Fixed issue in EditorStartup.init() where $qq will not work if the editor is in a Web Component (#1028)
* Added alt tags to img elements.

* fixed lint issues

* Changed the SESpinInput to have a closed shadow DOM to fix the duplicate label id issue reported in browser.

* Fixed code in EditorStartup that fails if the editor is in a Web Component.  $qq will not find the .svg_editor, but this.$container will.

* fix linter issue

* update packages

* remove closed as this causes the test to fail.

---------

Co-authored-by: JFH <20402845+jfhenon@users.noreply.github.com>
2025-03-09 21:41:41 +01:00
S1NJED
25e0d91add Fix: color picker value wont change after selecting a new element (#1030)
* fix: color picker failed to update when selecting a new element
Signed-off-by: S1NJED <oooguuh@gmail.com>
2025-03-09 19:19:43 +01:00
Michael S. Scherotter
5ad039a693 Added alt tags to img elements (#1026) 2025-03-02 14:30:07 +01:00
JFH
42840d51de Update to allow commas (#1023)
* update dependencies
* allow commas for separators
2025-02-23 14:21:25 +01:00
JFH
403237c182 Fix text scale #1008 (#1010)
* update dependencies

* fix #1008 by adjusting font-size

(allowing to keep the text keep his proportions to the font)

* refactor math.js
2024-12-27 21:37:05 +01:00
JFH
f0549e4629 Tspan fix (#1006)
* avoid creating x,y in a moving tspan if they didn't exist

* upgrade deps
2024-11-10 14:29:45 +01:00