From 3f6eb96bb5efa732ca9720eca4f605a0c5d10ba0 Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Tue, 30 Jun 2026 22:28:35 +0200 Subject: [PATCH 1/6] feat(tiptap): add text alignment controls --- packages/web-pkg/package.json | 1 + .../src/editor/composables/strategies/html.ts | 14 +++ .../editor/composables/useEditorActions.ts | 36 ++++++ pnpm-lock.yaml | 106 +++++++++++++----- 4 files changed, 131 insertions(+), 26 deletions(-) diff --git a/packages/web-pkg/package.json b/packages/web-pkg/package.json index 039b467ede1..355be1a13a4 100644 --- a/packages/web-pkg/package.json +++ b/packages/web-pkg/package.json @@ -66,6 +66,7 @@ "@tiptap/extension-task-item": "^3.20.4", "@tiptap/extension-task-list": "^3.20.4", "@tiptap/extension-underline": "^3.20.4", + "@tiptap/extension-text-align": "^3.20.4", "@tiptap/markdown": "^3.20.4", "@tiptap/pm": "^3.20.4", "@tiptap/starter-kit": "^3.20.4", diff --git a/packages/web-pkg/src/editor/composables/strategies/html.ts b/packages/web-pkg/src/editor/composables/strategies/html.ts index d4f27475e44..bfee7622b50 100644 --- a/packages/web-pkg/src/editor/composables/strategies/html.ts +++ b/packages/web-pkg/src/editor/composables/strategies/html.ts @@ -9,6 +9,8 @@ import Image from '@tiptap/extension-image' import { Table, TableRow, TableHeader, TableCell } from '@tiptap/extension-table' import TaskList from '@tiptap/extension-task-list' import TaskItem from '@tiptap/extension-task-item' +import TextAlign from '@tiptap/extension-text-align' + import { TextStyle, FontFamily, @@ -51,6 +53,9 @@ export const useStrategyHtml = (editorState: TextEditorState): ContentTypeStrate TableHeader, TaskList, TaskItem.configure({ nested: true }), + TextAlign.configure({ + types: ['heading', 'paragraph'] + }), FontFamily, TextStyle, Underline, @@ -78,6 +83,10 @@ export const useStrategyHtml = (editorState: TextEditorState): ContentTypeStrate heading2, heading3, heading4, + alignLeft, + alignCenter, + alignRight, + alignJustify, bulletList, orderedList, taskList, @@ -124,6 +133,11 @@ export const useStrategyHtml = (editorState: TextEditorState): ContentTypeStrate strikethrough() ] }, + { + id: 'text-align', + title: $gettext('Text align'), + actions: [alignLeft(), alignCenter(), alignRight(), alignJustify()] + }, { id: 'lists', title: $gettext('Lists'), diff --git a/packages/web-pkg/src/editor/composables/useEditorActions.ts b/packages/web-pkg/src/editor/composables/useEditorActions.ts index 7c33b766a77..26b3a16513f 100644 --- a/packages/web-pkg/src/editor/composables/useEditorActions.ts +++ b/packages/web-pkg/src/editor/composables/useEditorActions.ts @@ -109,6 +109,38 @@ export function useEditorActions( })) }) + const alignLeft = (): EditorAction => ({ + id: 'align-left', + title: $gettext('Align left'), + icon: 'align-left', + toolbarAction: (editor) => editor.chain().focus().setTextAlign('left').run(), + isActive: (editor) => editor.isActive({ textAlign: 'left' }) + }) + + const alignCenter = (): EditorAction => ({ + id: 'align-center', + title: $gettext('Align center'), + icon: 'align-center', + toolbarAction: (editor) => editor.chain().focus().setTextAlign('center').run(), + isActive: (editor) => editor.isActive({ textAlign: 'center' }) + }) + + const alignRight = (): EditorAction => ({ + id: 'align-right', + title: $gettext('Align right'), + icon: 'align-right', + toolbarAction: (editor) => editor.chain().focus().setTextAlign('right').run(), + isActive: (editor) => editor.isActive({ textAlign: 'right' }) + }) + + const alignJustify = (): EditorAction => ({ + id: 'align-justify', + title: $gettext('Align justify'), + icon: 'align-justify', + toolbarAction: (editor) => editor.chain().focus().setTextAlign('justify').run(), + isActive: (editor) => editor.isActive({ textAlign: 'justify' }) + }) + const textColor = (): EditorAction => ({ id: 'text-color', title: $gettext('Text color'), @@ -653,6 +685,10 @@ export function useEditorActions( heading4, fontSize, textColor, + alignLeft, + alignCenter, + alignRight, + alignJustify, backgroundColor, bold, italic, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f91c3497364..e9e48a4b1cd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -90,7 +90,7 @@ importers: version: 4.1.4(browserslist@4.28.1) eslint: specifier: 10.6.0 - version: 10.6.0(jiti@2.7.0) + version: 10.6.0(jiti@2.7.0)(supports-color@8.1.1) franc-min: specifier: ^6.2.0 version: 6.2.0 @@ -99,7 +99,7 @@ importers: version: 20.10.6 license-checker-rseidelsohn: specifier: 4.4.2 - version: 4.4.2 + version: 4.4.2(supports-color@8.1.1) node-fetch: specifier: 3.3.2 version: 3.3.2 @@ -235,7 +235,7 @@ importers: dependencies: '@typescript-eslint/parser': specifier: ^8.57.2 - version: 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + version: 8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3) eslint: specifier: ^9.0.0 || ^10.0.0 version: 10.6.0(jiti@2.7.0) @@ -244,10 +244,10 @@ importers: version: 10.1.8(eslint@10.6.0(jiti@2.7.0)) eslint-plugin-unused-imports: specifier: ^4.4.1 - version: 4.4.1(@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0)) + version: 4.4.1(@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0)) eslint-plugin-vue: specifier: ^10.8.0 - version: 10.9.2(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.6.0(jiti@2.7.0))) + version: 10.9.2(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.6.0(jiti@2.7.0))) typescript: specifier: ^6.0.0 version: 6.0.3 @@ -904,6 +904,9 @@ importers: '@tiptap/extension-text': specifier: ^3.20.4 version: 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1)) + '@tiptap/extension-text-align': + specifier: ^3.20.4 + version: 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1)) '@tiptap/extension-text-style': specifier: ^3.20.4 version: 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1)) @@ -2429,6 +2432,11 @@ packages: peerDependencies: '@tiptap/extension-list': 3.27.1 + '@tiptap/extension-text-align@3.27.1': + resolution: {integrity: sha512-EXawuJBO55wd8WcTbHTMoPhv0CGQxza4yCCPB5Hqz4ZPQwahIr3ej+8yp/kimIl0xokabwZ0/Fu8STQ4AkZv5g==} + peerDependencies: + '@tiptap/core': 3.27.1 + '@tiptap/extension-text-style@3.27.1': resolution: {integrity: sha512-J48WIl+6YDYTFPhWXUBQk+u7+AKVUqTdvrZOQyPYCGuQMgHrYzgWrI5+HeEifUgXJ5rMIWWP3qytp7KhVVqpDQ==} peerDependencies: @@ -6188,6 +6196,11 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0)(supports-color@8.1.1))': + dependencies: + eslint: 10.6.0(jiti@2.7.0)(supports-color@8.1.1) + eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))': dependencies: eslint: 10.6.0(jiti@2.7.0) @@ -6195,7 +6208,7 @@ snapshots: '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.5': + '@eslint/config-array@0.23.5(supports-color@8.1.1)': dependencies: '@eslint/object-schema': 3.0.5 debug: 4.4.3(supports-color@8.1.1) @@ -6883,6 +6896,10 @@ snapshots: dependencies: '@tiptap/extension-list': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1) + '@tiptap/extension-text-align@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))': + dependencies: + '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1) + '@tiptap/extension-text-style@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))': dependencies: '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1) @@ -7053,10 +7070,10 @@ snapshots: dependencies: '@types/node': 25.9.4 - '@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.62.1 '@typescript-eslint/type-utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) @@ -7069,11 +7086,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.62.1 '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.62.1(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.62.1 debug: 4.4.3(supports-color@8.1.1) eslint: 10.6.0(jiti@2.7.0) @@ -7081,7 +7098,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.62.1(typescript@6.0.3)': + '@typescript-eslint/project-service@8.62.1(supports-color@8.1.1)(typescript@6.0.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3) '@typescript-eslint/types': 8.62.1 @@ -7102,7 +7119,7 @@ snapshots: '@typescript-eslint/type-utils@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.62.1(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3(supports-color@8.1.1) eslint: 10.6.0(jiti@2.7.0) @@ -7113,9 +7130,9 @@ snapshots: '@typescript-eslint/types@8.62.1': {} - '@typescript-eslint/typescript-estree@8.62.1(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.62.1(supports-color@8.1.1)(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.62.1(typescript@6.0.3) + '@typescript-eslint/project-service': 8.62.1(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3) '@typescript-eslint/types': 8.62.1 '@typescript-eslint/visitor-keys': 8.62.1 @@ -7133,7 +7150,7 @@ snapshots: '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.62.1 '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.62.1(supports-color@8.1.1)(typescript@6.0.3) eslint: 10.6.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: @@ -8123,13 +8140,13 @@ snapshots: dependencies: eslint: 10.6.0(jiti@2.7.0) - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0)): dependencies: eslint: 10.6.0(jiti@2.7.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - eslint-plugin-vue@10.9.2(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.6.0(jiti@2.7.0))): + eslint-plugin-vue@10.9.2(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.6.0(jiti@2.7.0))): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) eslint: 10.6.0(jiti@2.7.0) @@ -8140,7 +8157,7 @@ snapshots: vue-eslint-parser: 10.4.0(eslint@10.6.0(jiti@2.7.0)) xml-name-validator: 4.0.0 optionalDependencies: - '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3) eslint-scope@9.1.2: dependencies: @@ -8157,7 +8174,44 @@ snapshots: dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 + '@eslint/config-array': 0.23.5(supports-color@8.1.1) + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + + eslint@10.6.0(jiti@2.7.0)(supports-color@8.1.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)(supports-color@8.1.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5(supports-color@8.1.1) '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 @@ -8730,14 +8784,14 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - license-checker-rseidelsohn@4.4.2: + license-checker-rseidelsohn@4.4.2(supports-color@8.1.1): dependencies: chalk: 4.1.2 debug: 4.4.3(supports-color@8.1.1) lodash.clonedeep: 4.5.0 mkdirp: 1.0.4 nopt: 7.2.1 - read-installed-packages: 2.0.1 + read-installed-packages: 2.0.1(supports-color@8.1.1) semver: 7.8.5 spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 @@ -9474,7 +9528,7 @@ snapshots: randombytes: 2.1.0 safe-buffer: 5.2.1 - read-installed-packages@2.0.1: + read-installed-packages@2.0.1(supports-color@8.1.1): dependencies: '@npmcli/fs': 3.1.1 debug: 4.4.3(supports-color@8.1.1) @@ -9985,9 +10039,9 @@ snapshots: typescript-eslint@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.62.1(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint: 10.6.0(jiti@2.7.0) typescript: 6.0.3 From b745ac5523508691aae4c5187409328917675e4f Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Tue, 30 Jun 2026 22:32:15 +0200 Subject: [PATCH 2/6] add unit tests --- .../tests/unit/editor/composables/helpers.ts | 1 + .../composables/useEditorActions.spec.ts | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/packages/web-pkg/tests/unit/editor/composables/helpers.ts b/packages/web-pkg/tests/unit/editor/composables/helpers.ts index 9148e78055d..4a454f0c2a5 100644 --- a/packages/web-pkg/tests/unit/editor/composables/helpers.ts +++ b/packages/web-pkg/tests/unit/editor/composables/helpers.ts @@ -67,6 +67,7 @@ export function createMockEditor(options: MockEditorOptions = {}) { 'setLineHeight', 'setColor', 'setBackgroundColor', + 'setTextAlign', 'addRowBefore', 'addRowAfter', 'addColumnBefore', diff --git a/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts b/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts index 2bcd0082816..74a4d614539 100644 --- a/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts +++ b/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts @@ -244,6 +244,33 @@ describe('useEditorActions', () => { }) }) + describe('text align actions', () => { + const alignActions = [ + { name: 'alignLeft', alignment: 'left' }, + { name: 'alignCenter', alignment: 'center' }, + { name: 'alignRight', alignment: 'right' }, + { name: 'alignJustify', alignment: 'justify' } + ] as const + + for (const { name, alignment } of alignActions) { + describe(name, () => { + it('toolbarAction sets the correct text alignment', () => { + const editor = createMockEditor() + actions[name]().toolbarAction!(editor) + expect(editor._chain.setTextAlign).toHaveBeenCalledWith(alignment) + expect(editor._chain.run).toHaveBeenCalled() + }) + + it('isActive checks the correct alignment', () => { + const editor = createMockEditor({ + isActive: (attrs) => attrs && attrs.textAlign === alignment + }) + expect(actions[name]().isActive!(editor)).toBe(true) + }) + }) + } + }) + describe('list actions', () => { const listActions = [ { name: 'bulletList', toggleMethod: 'toggleBulletList', markName: 'bulletList' }, From 278f96e6f8fd944120cd7f2fc08a047c9bc7ab87 Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Tue, 30 Jun 2026 22:44:14 +0200 Subject: [PATCH 3/6] fix types --- .../tests/unit/editor/composables/useEditorActions.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts b/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts index 74a4d614539..ea65fec040d 100644 --- a/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts +++ b/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts @@ -263,7 +263,7 @@ describe('useEditorActions', () => { it('isActive checks the correct alignment', () => { const editor = createMockEditor({ - isActive: (attrs) => attrs && attrs.textAlign === alignment + isActive: (_type, attrs) => attrs && attrs.textAlign === alignment }) expect(actions[name]().isActive!(editor)).toBe(true) }) From e06060cfa8fc64be4bbdbb6db5e3615f1bcc3695 Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Tue, 30 Jun 2026 23:10:39 +0200 Subject: [PATCH 4/6] fix tests --- .../tests/unit/editor/composables/useEditorActions.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts b/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts index ea65fec040d..5797e90968a 100644 --- a/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts +++ b/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts @@ -263,7 +263,7 @@ describe('useEditorActions', () => { it('isActive checks the correct alignment', () => { const editor = createMockEditor({ - isActive: (_type, attrs) => attrs && attrs.textAlign === alignment + isActive: (attrs) => attrs && typeof attrs === 'object' && attrs.textAlign === alignment }) expect(actions[name]().isActive!(editor)).toBe(true) }) From c1c1fa31042fed602fbea1f2f27bb574b8d684c2 Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Wed, 1 Jul 2026 01:30:11 +0200 Subject: [PATCH 5/6] fix types --- .../unit/editor/composables/useEditorActions.spec.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts b/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts index 5797e90968a..c09e96c8c84 100644 --- a/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts +++ b/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts @@ -263,7 +263,13 @@ describe('useEditorActions', () => { it('isActive checks the correct alignment', () => { const editor = createMockEditor({ - isActive: (attrs) => attrs && typeof attrs === 'object' && attrs.textAlign === alignment + isActive: (attrs) => { + if (!attrs || typeof attrs !== 'object') { + return false + } + + return (attrs as { textAlign?: string }).textAlign === alignment + } }) expect(actions[name]().isActive!(editor)).toBe(true) }) From c9966ef82db553ef1ee91516be43285917488296 Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Wed, 1 Jul 2026 01:33:24 +0200 Subject: [PATCH 6/6] fix types --- .../unit/editor/composables/useEditorActions.spec.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts b/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts index c09e96c8c84..51bfe944481 100644 --- a/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts +++ b/packages/web-pkg/tests/unit/editor/composables/useEditorActions.spec.ts @@ -263,13 +263,7 @@ describe('useEditorActions', () => { it('isActive checks the correct alignment', () => { const editor = createMockEditor({ - isActive: (attrs) => { - if (!attrs || typeof attrs !== 'object') { - return false - } - - return (attrs as { textAlign?: string }).textAlign === alignment - } + isActive: (attrs) => (attrs as { textAlign?: string } | null)?.textAlign === alignment }) expect(actions[name]().isActive!(editor)).toBe(true) })