From 6cfdd445510771b50e85595319bec91897411105 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Fri, 14 Aug 2026 07:26:34 +0200 Subject: [PATCH] FIX - improve Notes action menu visibility --- .../views/apps/NotesApp.menu.contract.test.ts | 31 +++++ frontend/src/views/apps/NotesApp.vue | 109 ++++++++---------- 2 files changed, 80 insertions(+), 60 deletions(-) create mode 100644 frontend/src/views/apps/NotesApp.menu.contract.test.ts diff --git a/frontend/src/views/apps/NotesApp.menu.contract.test.ts b/frontend/src/views/apps/NotesApp.menu.contract.test.ts new file mode 100644 index 0000000..e347608 --- /dev/null +++ b/frontend/src/views/apps/NotesApp.menu.contract.test.ts @@ -0,0 +1,31 @@ +import { readFileSync } from 'node:fs' + +import { describe, expect, it } from 'vitest' + +const source = readFileSync(new URL('./NotesApp.vue', import.meta.url), 'utf8') +const menuSource = source.slice( + source.indexOf('') + ''.length, +) + +describe('NotesApp more menu', () => { + it('uses the shared Feather-style action sheet', () => { + expect(menuSource).toContain( + ':aria-label="phone.t(\'Apps.notes.actions\')"', + ) + expect(menuSource.match(/ { + expect(menuSource).toContain('@click="shareNote"') + expect(menuSource).toContain('@click="togglePinned"') + expect(menuSource).toContain('@click="deleteNote"') + expect(menuSource).toContain('@backdropclick="menuOpened = false"') + expect(menuSource).toContain('@escape="menuOpened = false"') + }) +}) diff --git a/frontend/src/views/apps/NotesApp.vue b/frontend/src/views/apps/NotesApp.vue index 06fd6ea..4e54d72 100644 --- a/frontend/src/views/apps/NotesApp.vue +++ b/frontend/src/views/apps/NotesApp.vue @@ -26,7 +26,7 @@ import NotesRichTextEditor from '@/components/NotesRichTextEditor.vue' import { useNotesStore } from '@/stores/notes' import { useEasyShareStore } from '@/stores/easyshare' import { usePhoneStore } from '@/stores/phone' -import { SkyActionButton, SkyActionGroup, SkyActionSheet } from '@/ui' +import { SkyActionSheet, SkyButton } from '@/ui' import type { Note } from '@/utils/notes' import { noteBodyToPlainText } from '@/utils/noteRichText' @@ -284,46 +284,47 @@ function shareNote(): void { - -

- {{ phone.t('Apps.notes.actions') }} -

- - - - +
+
+ + + + + + +
+ {{ phone.t('Common.cancel') }} - - + +
@@ -348,45 +349,33 @@ function shareNote(): void { flex: 0 0 auto; } -.notes-action-button__content { - display: inline-flex; - align-items: center; - justify-content: center; - gap: 9px; -} - -.notes-action-button--danger { - color: var(--sky-danger); -} - -.notes-action-sheet :deep(.sky-action-sheet__panel) { - padding: 8px var(--sky-page-gutter) - calc(var(--sky-safe-area-bottom) + 10px); +.notes-action-menu { + display: grid; + gap: 8px; + padding: 14px; border: 1px solid var(--sky-hairline); - border-bottom: 0; - border-radius: 30px 30px 0 0; + border-radius: 28px 28px 0 0; background: var(--sky-surface); box-shadow: 0 -18px 50px rgb(0 0 0 / 32%); } -.notes-action-sheet :deep(.sky-action-group) { - margin-top: 9px; - background: var(--sky-surface-muted); +.notes-action-menu__choices { + display: grid; + gap: 8px; } -.notes-action-sheet__handle { - width: 38px; - height: 5px; - margin: 0 auto 7px; - border-radius: 999px; - background: var(--sky-hairline-strong, rgb(142 142 147 / 65%)); +.notes-action-menu :deep(.sky-button) { + justify-content: center; + border-radius: var(--sky-radius-control); } -.notes-action-sheet__title { - margin: 0; - color: var(--sky-muted); - font-size: 12px; - font-weight: 600; - text-align: center; +.notes-action-menu__danger { + color: var(--sky-danger); + background: var(--sky-danger-soft); +} + +.notes-action-sheet :deep(.sky-action-sheet__panel) { + max-height: none; + padding: 0; }