From ac5d49638a6f7174f9bd21420e6d951f3fbe29a4 Mon Sep 17 00:00:00 2001 From: Anh Nguyen Date: Mon, 25 Aug 2025 20:59:05 +0700 Subject: [PATCH 1/4] feat: Add OverType dark theme integration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Integrate OverType editor theme switching with HeroUI theme system - Use 'cave' theme for dark mode and 'solar' theme for light mode - Add useTheme hook to detect theme changes - Automatically update OverType theme when user toggles dark/light mode - Fix JSX escape character issue in about.tsx 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- debug-screenshot.png | Bin 92126 -> 0 bytes overtype-debug.png | Bin 89508 -> 0 bytes ...95954345a439b256687893049ac883674553e2b.md | 109 +++++++++ ...9d3e2306e7b5c891936f95b76d7e5eedb3e1456.md | 102 +++++++++ ...042bfa46ae587ad74e39d1f083b2c2cf01aeff0.md | 207 ++++++++++++++++++ playwright-report/index.html | 2 +- playwright.config.ts | 20 +- src/components/editor.tsx | 127 ++++++----- src/components/navbar.tsx | 8 +- src/config/site.ts | 3 +- src/pages/about.tsx | 114 +++++++--- src/pages/index.tsx | 17 +- src/utils/vietnamese-input.ts | 45 ++-- test-results/.last-run.json | 8 +- .../error-context.md | 109 +++++++++ .../error-context.md | 102 +++++++++ .../error-context.md | 207 ++++++++++++++++++ 17 files changed, 1051 insertions(+), 129 deletions(-) delete mode 100644 debug-screenshot.png delete mode 100644 overtype-debug.png create mode 100644 playwright-report/data/495954345a439b256687893049ac883674553e2b.md create mode 100644 playwright-report/data/89d3e2306e7b5c891936f95b76d7e5eedb3e1456.md create mode 100644 playwright-report/data/9042bfa46ae587ad74e39d1f083b2c2cf01aeff0.md create mode 100644 test-results/working-dark-theme-OverTyp-38519-namese-input-in-both-themes-chromium/error-context.md create mode 100644 test-results/working-dark-theme-OverTyp-4bd6b-tween-light-and-dark-themes-chromium/error-context.md create mode 100644 test-results/working-dark-theme-OverTyp-f2b15--differences-between-themes-chromium/error-context.md diff --git a/debug-screenshot.png b/debug-screenshot.png deleted file mode 100644 index b7590611ef3f40e095322375b5dd3cf882b68443..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92126 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

Kda= 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

feEa9h+DlZI?==)0BgpduMdsT=+c1gIVYy8 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 G%l`tzAf~7Q diff --git a/playwright-report/data/495954345a439b256687893049ac883674553e2b.md b/playwright-report/data/495954345a439b256687893049ac883674553e2b.md new file mode 100644 index 0000000..3b8b125 --- /dev/null +++ b/playwright-report/data/495954345a439b256687893049ac883674553e2b.md @@ -0,0 +1,109 @@ +# Page snapshot + +```yaml +- generic [ref=e4]: + - navigation [ref=e5]: + - generic [ref=e6]: + - list [ref=e7]: + - link "VinaKey 2" [ref=e9] [cursor=pointer]: + - /url: / + - img [ref=e10] [cursor=pointer] + - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 + - generic [ref=e13]: + - listitem [ref=e14]: + - link "Editor" [ref=e15] [cursor=pointer]: + - /url: / + - listitem [ref=e16]: + - link "About" [ref=e17] [cursor=pointer]: + - /url: /about + - list [ref=e18]: + - listitem [ref=e19]: + - link "Discord" [ref=e20] [cursor=pointer]: + - /url: "#" + - img [ref=e21] [cursor=pointer] + - link "GitHub" [ref=e23] [cursor=pointer]: + - /url: https://github.com/vinakey/vinakey2 + - img [ref=e24] [cursor=pointer] + - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: + - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] + - img [ref=e30] [cursor=pointer] + - listitem + - main [ref=e32]: + - generic [ref=e33]: + - generic [ref=e34]: + - generic [ref=e35]: VinaKey + - generic [ref=e36]: "2" + - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor + - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí + - generic [ref=e40]: + - generic [ref=e41]: + - generic [ref=e42]: + - generic [ref=e43]: + - heading "VinaKey 2 Editor" [level=2] [ref=e44] + - paragraph [ref=e45]: Vietnamese typing with markdown support + - generic [ref=e46]: + - button "Load Sample" [ref=e47] [cursor=pointer] + - button "Copy Text" [ref=e48] [cursor=pointer] + - button "Clear" [ref=e49] [cursor=pointer] + - separator [ref=e50] + - generic [ref=e51]: + - generic [ref=e52]: + - generic [ref=e53]: "Vietnamese Input:" + - button "ON" [ref=e54] [cursor=pointer] + - generic [ref=e55]: + - button "AUTO" [ref=e56] [cursor=pointer] + - button "TELEX" [ref=e57] [cursor=pointer] + - button "VNI" [ref=e58] [cursor=pointer] + - button "VIQR" [ref=e59] [cursor=pointer] + - generic [ref=e60]: + - generic [ref=e62]: + - toolbar "Text formatting" [ref=e63]: + - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: + - img [ref=e65] [cursor=pointer] + - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: + - img [ref=e69] [cursor=pointer] + - separator [ref=e71] + - button "Heading 1" [ref=e72] [cursor=pointer]: + - img [ref=e73] [cursor=pointer] + - button "Heading 2" [ref=e75] [cursor=pointer]: + - img [ref=e76] [cursor=pointer] + - button "Heading 3" [ref=e78] [cursor=pointer]: + - img [ref=e79] [cursor=pointer] + - separator [ref=e81] + - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: + - img [ref=e83] [cursor=pointer] + - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': + - img [ref=e88] [cursor=pointer] + - separator [ref=e92] + - button "Quote" [ref=e93] [cursor=pointer]: + - img [ref=e94] [cursor=pointer] + - separator [ref=e97] + - button "Bullet List" [ref=e98] [cursor=pointer]: + - img [ref=e99] [cursor=pointer] + - button "Numbered List" [ref=e100] [cursor=pointer]: + - img [ref=e101] [cursor=pointer] + - button "Task List" [ref=e105] [cursor=pointer]: + - img [ref=e106] [cursor=pointer] + - separator [ref=e110] + - button "View mode" [ref=e111] [cursor=pointer]: + - img [ref=e112] [cursor=pointer] + - generic [ref=e115]: + - textbox "Bắt đầu viết markdown với tiếng Việt..." [active] [ref=e116]: xin chao + - generic: + - generic: xin chao + - generic [ref=e117]: + - generic [ref=e118]: "Characters: 8 | Words: 2" + - generic [ref=e119]: "Method: AUTO ✓" + - generic [ref=e120]: + - paragraph [ref=e121]: + - strong [ref=e122]: "Tính năng chính:" + - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. + - paragraph [ref=e123]: + - strong [ref=e124]: "Hướng dẫn:" + - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. + - contentinfo [ref=e125]: + - link "Powered by HeroUI" [ref=e126] [cursor=pointer]: + - /url: https://heroui.com + - generic [ref=e127] [cursor=pointer]: Powered by + - paragraph [ref=e128] [cursor=pointer]: HeroUI +``` \ No newline at end of file diff --git a/playwright-report/data/89d3e2306e7b5c891936f95b76d7e5eedb3e1456.md b/playwright-report/data/89d3e2306e7b5c891936f95b76d7e5eedb3e1456.md new file mode 100644 index 0000000..38a9369 --- /dev/null +++ b/playwright-report/data/89d3e2306e7b5c891936f95b76d7e5eedb3e1456.md @@ -0,0 +1,102 @@ +# Page snapshot + +```yaml +- generic [ref=e4]: + - navigation [ref=e5]: + - generic [ref=e6]: + - list [ref=e7]: + - link "VinaKey 2" [ref=e9] [cursor=pointer]: + - /url: / + - img [ref=e10] [cursor=pointer] + - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 + - generic [ref=e13]: + - listitem [ref=e14]: + - link "Editor" [ref=e15] [cursor=pointer]: + - /url: / + - listitem [ref=e16]: + - link "About" [ref=e17] [cursor=pointer]: + - /url: /about + - list [ref=e18]: + - listitem [ref=e19]: + - link "Discord" [ref=e20] [cursor=pointer]: + - /url: "#" + - img [ref=e21] [cursor=pointer] + - link "GitHub" [ref=e23] [cursor=pointer]: + - /url: https://github.com/vinakey/vinakey2 + - img [ref=e24] [cursor=pointer] + - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: + - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] + - img [ref=e30] [cursor=pointer] + - listitem + - main [ref=e32]: + - generic [ref=e33]: + - generic [ref=e34]: + - generic [ref=e35]: VinaKey + - generic [ref=e36]: "2" + - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor + - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí + - generic [ref=e40]: + - generic [ref=e41]: + - generic [ref=e42]: + - generic [ref=e43]: + - heading "VinaKey 2 Editor" [level=2] [ref=e44] + - paragraph [ref=e45]: Vietnamese typing with markdown support + - generic [ref=e46]: + - button "Load Sample" [ref=e47] [cursor=pointer] + - button "Copy Text" [disabled] [ref=e48] [cursor=pointer] + - button "Clear" [ref=e49] [cursor=pointer] + - separator [ref=e50] + - generic [ref=e51]: + - generic [ref=e52]: + - generic [ref=e53]: "Vietnamese Input:" + - button "ON" [ref=e54] [cursor=pointer] + - generic [ref=e55]: + - button "AUTO" [ref=e56] [cursor=pointer] + - button "TELEX" [ref=e57] [cursor=pointer] + - button "VNI" [ref=e58] [cursor=pointer] + - button "VIQR" [ref=e59] [cursor=pointer] + - generic [ref=e62]: + - toolbar "Text formatting" [ref=e63]: + - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: + - img [ref=e65] [cursor=pointer] + - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: + - img [ref=e69] [cursor=pointer] + - separator [ref=e71] + - button "Heading 1" [ref=e72] [cursor=pointer]: + - img [ref=e73] [cursor=pointer] + - button "Heading 2" [ref=e75] [cursor=pointer]: + - img [ref=e76] [cursor=pointer] + - button "Heading 3" [ref=e78] [cursor=pointer]: + - img [ref=e79] [cursor=pointer] + - separator [ref=e81] + - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: + - img [ref=e83] [cursor=pointer] + - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': + - img [ref=e88] [cursor=pointer] + - separator [ref=e92] + - button "Quote" [ref=e93] [cursor=pointer]: + - img [ref=e94] [cursor=pointer] + - separator [ref=e97] + - button "Bullet List" [ref=e98] [cursor=pointer]: + - img [ref=e99] [cursor=pointer] + - button "Numbered List" [ref=e100] [cursor=pointer]: + - img [ref=e101] [cursor=pointer] + - button "Task List" [ref=e105] [cursor=pointer]: + - img [ref=e106] [cursor=pointer] + - separator [ref=e110] + - button "View mode" [ref=e111] [cursor=pointer]: + - img [ref=e112] [cursor=pointer] + - textbox "Bắt đầu viết markdown với tiếng Việt..." [ref=e116] + - generic [ref=e117]: + - paragraph [ref=e118]: + - strong [ref=e119]: "Tính năng chính:" + - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. + - paragraph [ref=e120]: + - strong [ref=e121]: "Hướng dẫn:" + - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. + - contentinfo [ref=e122]: + - link "Powered by HeroUI" [ref=e123] [cursor=pointer]: + - /url: https://heroui.com + - generic [ref=e124] [cursor=pointer]: Powered by + - paragraph [ref=e125] [cursor=pointer]: HeroUI +``` \ No newline at end of file diff --git a/playwright-report/data/9042bfa46ae587ad74e39d1f083b2c2cf01aeff0.md b/playwright-report/data/9042bfa46ae587ad74e39d1f083b2c2cf01aeff0.md new file mode 100644 index 0000000..37d5766 --- /dev/null +++ b/playwright-report/data/9042bfa46ae587ad74e39d1f083b2c2cf01aeff0.md @@ -0,0 +1,207 @@ +# Page snapshot + +```yaml +- generic [ref=e4]: + - navigation [ref=e5]: + - generic [ref=e6]: + - list [ref=e7]: + - link "VinaKey 2" [ref=e9] [cursor=pointer]: + - /url: / + - img [ref=e10] [cursor=pointer] + - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 + - generic [ref=e13]: + - listitem [ref=e14]: + - link "Editor" [ref=e15] [cursor=pointer]: + - /url: / + - listitem [ref=e16]: + - link "About" [ref=e17] [cursor=pointer]: + - /url: /about + - list [ref=e18]: + - listitem [ref=e19]: + - link "Discord" [ref=e20] [cursor=pointer]: + - /url: "#" + - img [ref=e21] [cursor=pointer] + - link "GitHub" [ref=e23] [cursor=pointer]: + - /url: https://github.com/vinakey/vinakey2 + - img [ref=e24] [cursor=pointer] + - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: + - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] + - img [ref=e30] [cursor=pointer] + - listitem + - main [ref=e32]: + - generic [ref=e33]: + - generic [ref=e34]: + - generic [ref=e35]: VinaKey + - generic [ref=e36]: "2" + - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor + - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí + - generic [ref=e40]: + - generic [ref=e41]: + - generic [ref=e42]: + - generic [ref=e43]: + - heading "VinaKey 2 Editor" [level=2] [ref=e44] + - paragraph [ref=e45]: Vietnamese typing with markdown support + - generic [ref=e46]: + - button "Load Sample" [active] [ref=e47] [cursor=pointer] + - button "Copy Text" [ref=e48] [cursor=pointer] + - button "Clear" [ref=e49] [cursor=pointer] + - separator [ref=e50] + - generic [ref=e51]: + - generic [ref=e52]: + - generic [ref=e53]: "Vietnamese Input:" + - button "ON" [ref=e54] [cursor=pointer] + - generic [ref=e55]: + - button "AUTO" [ref=e56] [cursor=pointer] + - button "TELEX" [ref=e57] [cursor=pointer] + - button "VNI" [ref=e58] [cursor=pointer] + - button "VIQR" [ref=e59] [cursor=pointer] + - generic [ref=e60]: + - generic [ref=e62]: + - toolbar "Text formatting" [ref=e63]: + - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: + - img [ref=e65] [cursor=pointer] + - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: + - img [ref=e69] [cursor=pointer] + - separator [ref=e71] + - button "Heading 1" [ref=e72] [cursor=pointer]: + - img [ref=e73] [cursor=pointer] + - button "Heading 2" [ref=e75] [cursor=pointer]: + - img [ref=e76] [cursor=pointer] + - button "Heading 3" [ref=e78] [cursor=pointer]: + - img [ref=e79] [cursor=pointer] + - separator [ref=e81] + - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: + - img [ref=e83] [cursor=pointer] + - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': + - img [ref=e88] [cursor=pointer] + - separator [ref=e92] + - button "Quote" [ref=e93] [cursor=pointer]: + - img [ref=e94] [cursor=pointer] + - separator [ref=e97] + - button "Bullet List" [ref=e98] [cursor=pointer]: + - img [ref=e99] [cursor=pointer] + - button "Numbered List" [ref=e100] [cursor=pointer]: + - img [ref=e101] [cursor=pointer] + - button "Task List" [ref=e105] [cursor=pointer]: + - img [ref=e106] [cursor=pointer] + - separator [ref=e110] + - button "View mode" [ref=e111] [cursor=pointer]: + - img [ref=e112] [cursor=pointer] + - generic [ref=e115]: + - textbox "Bắt đầu viết markdown với tiếng Việt..." [ref=e116]: "# Chào mừng đến với VinaKey 2 ## Tính năng chính - **Gõ tiếng Việt**: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR) - **Markdown Editor**: Soạn thảo markdown với giao diện WYSIWYG - **Toolbar**: Các công cụ định dạng tiện lợi - **Responsive**: Tương thích với mobile và desktop ## Hướng dẫn sử dụng 1. Chọn kiểu gõ tiếng Việt từ các nút bên trên 2. Bắt đầu viết nội dung markdown 3. Sử dụng toolbar để định dạng nhanh 4. Bấm nút \"Copy\" để sao chép nội dung ### Ví dụ văn bản > \"Có công mài sắt có ngày nên kim\" **Danh sách công việc:** - [x] Tích hợp Vietnamese input - [x] Tích hợp Overtype editor - [ ] Thêm tính năng export - [ ] Thêm themes ```javascript // Code example const vietnameseText = \"Xin chào thế giới!\"; console.log(vietnameseText); ``` --- *Tạo bởi [VinaKey](https://github.com/vinakey/vinakey2) - công cụ gõ tiếng Việt hiện đại.*" + - generic: + - generic: + - heading [level=1]: + - generic: "#" + - text: Chào mừng đến với VinaKey 2 + - generic: + - heading [level=2]: + - generic: "##" + - text: Tính năng chính + - list: + - listitem: + - generic: "-" + - strong: + - generic: "**" + - text: Gõ tiếng Việt + - generic: "**" + - text: ": Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR)" + - listitem: + - generic: "-" + - strong: + - generic: "**" + - text: Markdown Editor + - generic: "**" + - text: ": Soạn thảo markdown với giao diện WYSIWYG" + - listitem: + - generic: "-" + - strong: + - generic: "**" + - text: Toolbar + - generic: "**" + - text: ": Các công cụ định dạng tiện lợi" + - listitem: + - generic: "-" + - strong: + - generic: "**" + - text: Responsive + - generic: "**" + - text: ": Tương thích với mobile và desktop" + - generic: + - heading [level=2]: + - generic: "##" + - text: Hướng dẫn sử dụng + - list: + - listitem: + - generic: "1." + - text: Chọn kiểu gõ tiếng Việt từ các nút bên trên + - listitem: + - generic: "2." + - text: Bắt đầu viết nội dung markdown + - listitem: + - generic: "3." + - text: Sử dụng toolbar để định dạng nhanh + - listitem: + - generic: "4." + - text: Bấm nút "Copy" để sao chép nội dung + - generic: + - heading [level=3]: + - generic: "###" + - text: Ví dụ văn bản + - generic: + - generic: + - generic: ">" + - text: "\"Có công mài sắt có ngày nên kim\"" + - generic: + - strong: + - generic: "**" + - text: "Danh sách công việc:" + - generic: "**" + - list: + - listitem: + - generic: "-" + - text: "[x] Tích hợp Vietnamese input" + - listitem: + - generic: "-" + - text: "[x] Tích hợp Overtype editor" + - listitem: + - generic: "-" + - text: "[ ] Thêm tính năng export" + - listitem: + - generic: "-" + - text: "[ ] Thêm themes" + - generic: + - generic: "```javascript" + - generic: + - code: // Code example const vietnameseText = "Xin chào thế giới!"; console.log(vietnameseText); + - generic: + - generic: "```" + - generic: + - generic: "---" + - generic: + - emphasis: + - generic: "*" + - text: Tạo bởi + - link: + - /url: https://github.com/vinakey/vinakey2 + - generic: "[" + - text: VinaKey + - generic: "](https://github.com/vinakey/vinakey2)" + - text: "- công cụ gõ tiếng Việt hiện đại." + - generic: "*" + - generic [ref=e117]: + - generic [ref=e118]: "Characters: 866 | Words: 160" + - generic [ref=e119]: "Method: AUTO ✓" + - generic [ref=e120]: + - paragraph [ref=e121]: + - strong [ref=e122]: "Tính năng chính:" + - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. + - paragraph [ref=e123]: + - strong [ref=e124]: "Hướng dẫn:" + - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. + - contentinfo [ref=e125]: + - link "Powered by HeroUI" [ref=e126] [cursor=pointer]: + - /url: https://heroui.com + - generic [ref=e127] [cursor=pointer]: Powered by + - paragraph [ref=e128] [cursor=pointer]: HeroUI +``` \ No newline at end of file diff --git a/playwright-report/index.html b/playwright-report/index.html index bf8880f..7e7cddf 100644 --- a/playwright-report/index.html +++ b/playwright-report/index.html @@ -73,4 +73,4 @@
- \ No newline at end of file + \ No newline at end of file diff --git a/playwright.config.ts b/playwright.config.ts index 3bb564a..25658bc 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,29 +1,29 @@ -import { defineConfig, devices } from '@playwright/test'; +import { defineConfig, devices } from "@playwright/test"; export default defineConfig({ - testDir: './tests', + testDir: "./tests", timeout: 30 * 1000, expect: { - timeout: 5000 + timeout: 5000, }, fullyParallel: true, forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, workers: process.env.CI ? 1 : undefined, - reporter: 'html', + reporter: "html", use: { - baseURL: 'http://localhost:5176', - trace: 'on-first-retry', + baseURL: "http://localhost:5176", + trace: "on-first-retry", }, projects: [ { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, + name: "chromium", + use: { ...devices["Desktop Chrome"] }, }, ], webServer: { - command: 'yarn dev', + command: "yarn dev", port: 5176, reuseExistingServer: !process.env.CI, }, -}); \ No newline at end of file +}); diff --git a/src/components/editor.tsx b/src/components/editor.tsx index e0cda41..cd2cea6 100644 --- a/src/components/editor.tsx +++ b/src/components/editor.tsx @@ -1,5 +1,7 @@ import { useEffect, useRef, useState } from "react"; import { Button } from "@heroui/button"; +import { useTheme } from "@heroui/use-theme"; + import { vietnameseInput, InputMethod } from "@/utils/vietnamese-input"; // Extend window object to include OverType @@ -19,51 +21,61 @@ interface EditorProps { onContentChange?: (content: string) => void; } -export default function Editor({ initialContent = "", onContentChange }: EditorProps) { +export default function Editor({ + initialContent = "", + onContentChange, +}: EditorProps) { const editorRef = useRef(null); - const [inputMethod, setInputMethod] = useState('AUTO'); + const [inputMethod, setInputMethod] = useState("AUTO"); const [isVietnameseEnabled, setIsVietnameseEnabled] = useState(true); const [editorInstance, setEditorInstance] = useState(null); const [content, setContent] = useState(initialContent); + const { theme } = useTheme(); useEffect(() => { const initializeEditor = () => { if (editorRef.current && window.OverType) { try { // Initialize OverType editor using the default export - const OverTypeClass = (window.OverType as any).default || window.OverType; + const OverTypeClass = + (window.OverType as any).default || window.OverType; const instances = new OverTypeClass(editorRef.current, { value: initialContent, - placeholder: 'Bắt đầu viết markdown với tiếng Việt...', + placeholder: "Bắt đầu viết markdown với tiếng Việt...", toolbar: true, - theme: 'solar', - fontSize: '16px', - padding: '20px', + theme: theme === "dark" ? "cave" : "solar", + fontSize: "16px", + padding: "20px", autoResize: true, - minHeight: '400px', + minHeight: "400px", onChange: (value: string) => { setContent(value); onContentChange?.(value); - } + }, }); if (instances && instances.length > 0) { const instance = instances[0]; + setEditorInstance(instance); // Get the textarea element from OverType and attach Vietnamese input setTimeout(() => { - const textarea = editorRef.current?.querySelector('textarea'); + const textarea = editorRef.current?.querySelector("textarea"); + if (textarea) { vietnameseInput.attach(textarea as HTMLTextAreaElement); - console.log('✓ Vietnamese input attached to textarea'); + console.log("✓ Vietnamese input attached to textarea"); } else { - console.log('❌ No textarea found after OverType initialization'); + console.log( + "❌ No textarea found after OverType initialization", + ); } }, 500); // Increased timeout return () => { - const textarea = editorRef.current?.querySelector('textarea'); + const textarea = editorRef.current?.querySelector("textarea"); + if (textarea) { vietnameseInput.detach(textarea as HTMLTextAreaElement); } @@ -71,7 +83,7 @@ export default function Editor({ initialContent = "", onContentChange }: EditorP }; } } catch (error) { - console.error('Error initializing OverType:', error); + console.error("Error initializing OverType:", error); } } }; @@ -97,6 +109,16 @@ export default function Editor({ initialContent = "", onContentChange }: EditorP vietnameseInput.setEnabled(isVietnameseEnabled); }, [inputMethod, isVietnameseEnabled]); + // Handle theme changes for OverType editor + useEffect(() => { + if (window.OverType) { + const overtypeTheme = theme === "dark" ? "cave" : "solar"; + const OverTypeClass = (window.OverType as any).default || window.OverType; + // Use static method to change theme globally + OverTypeClass.setTheme(overtypeTheme); + } + }, [theme]); + const handleMethodChange = (method: InputMethod) => { setInputMethod(method); }; @@ -107,8 +129,8 @@ export default function Editor({ initialContent = "", onContentChange }: EditorP const handleClear = () => { if (editorInstance) { - editorInstance.setValue(''); - setContent(''); + editorInstance.setValue(""); + setContent(""); } }; @@ -148,7 +170,7 @@ console.log(vietnameseText); --- *Tạo bởi [VinaKey](https://github.com/vinakey/vinakey2) - công cụ gõ tiếng Việt hiện đại.*`; - + if (editorInstance) { editorInstance.setValue(sampleText); setContent(sampleText); @@ -160,9 +182,9 @@ console.log(vietnameseText); try { await navigator.clipboard.writeText(content); // Could add a toast notification here - console.log('Content copied to clipboard'); + console.log("Content copied to clipboard"); } catch (err) { - console.error('Failed to copy content:', err); + console.error("Failed to copy content:", err); } } }; @@ -172,36 +194,38 @@ console.log(vietnameseText);
-

VinaKey 2 Editor

+

+ VinaKey 2 Editor +

Vietnamese typing with markdown support

- +
- + - +
- {(['AUTO', 'TELEX', 'VNI', 'VIQR'] as InputMethod[]).map((method) => ( - - ))} + {(["AUTO", "TELEX", "VNI", "VIQR"] as InputMethod[]).map( + (method) => ( + + ), + )}
- +
-
- + {content && (
- Characters: {content.length} | Words: {content.split(/\s+/).filter(Boolean).length} + Characters: {content.length} | Words:{" "} + {content.split(/\s+/).filter(Boolean).length} - Method: {inputMethod} {isVietnameseEnabled ? '✓' : '✗'} + Method: {inputMethod} {isVietnameseEnabled ? "✓" : "✗"}
)}
); -} \ No newline at end of file +} diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index 0bdc62e..8d159fd 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -13,14 +13,10 @@ import clsx from "clsx"; import { siteConfig } from "@/config/site"; import { ThemeSwitch } from "@/components/theme-switch"; -import { - GithubIcon, - DiscordIcon, -} from "@/components/icons"; +import { GithubIcon, DiscordIcon } from "@/components/icons"; import { Logo } from "@/components/icons"; export const Navbar = () => { - return ( @@ -65,7 +61,7 @@ export const Navbar = () => { - + diff --git a/src/config/site.ts b/src/config/site.ts index 1667e16..abecbab 100644 --- a/src/config/site.ts +++ b/src/config/site.ts @@ -2,7 +2,8 @@ export type SiteConfig = typeof siteConfig; export const siteConfig = { name: "VinaKey 2", - description: "Modern Vietnamese typing tool with markdown editor support - online, fast, and free.", + description: + "Modern Vietnamese typing tool with markdown editor support - online, fast, and free.", navItems: [ { label: "Editor", diff --git a/src/pages/about.tsx b/src/pages/about.tsx index 3dc9580..6da884c 100644 --- a/src/pages/about.tsx +++ b/src/pages/about.tsx @@ -1,5 +1,6 @@ -import { title, subtitle } from "@/components/primitives"; import { Link } from "@heroui/link"; + +import { title, subtitle } from "@/components/primitives"; import DefaultLayout from "@/layouts/default"; export default function AboutPage() { @@ -17,9 +18,10 @@ export default function AboutPage() {

Giới thiệu

- VinaKey 2 là phiên bản hiện đại của công cụ gõ tiếng Việt trực tuyến, - kết hợp với markdown editor mạnh mẽ. Được xây dựng với công nghệ web hiện đại, - VinaKey 2 cung cấp trải nghiệm gõ tiếng Việt mượt mà và các tính năng soạn thảo văn bản tiên tiến. + VinaKey 2 là phiên bản hiện đại của công cụ gõ tiếng Việt trực + tuyến, kết hợp với markdown editor mạnh mẽ. Được xây dựng với công + nghệ web hiện đại, VinaKey 2 cung cấp trải nghiệm gõ tiếng Việt + mượt mà và các tính năng soạn thảo văn bản tiên tiến.

@@ -36,7 +38,9 @@ export default function AboutPage() {
-

📝 Markdown Editor

+

+ 📝 Markdown Editor +

  • WYSIWYG editing với overtype
  • Toolbar tiện lợi
  • @@ -71,38 +75,86 @@ export default function AboutPage() { - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + +
    Kiểu gõSắcHuyềnHỏiNgãNặng + Kiểu gõ + + Sắc + + Huyền + + Hỏi + + Ngã + + Nặng +
    TELEXsfrxj + TELEX + + s + + f + + r + + x + + j +
    VNI12345 + VNI + + 1 + + 2 + + 3 + + 4 + + 5 +
    VIQR'`?~. + VIQR + + ' + + ` + + ? + + ~ + + . +
    @@ -110,10 +162,10 @@ export default function AboutPage() {
- 📖 Xem source code trên GitHub diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 80fafed..3b84b5d 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -14,28 +14,31 @@ export default function IndexPage() { Modern Vietnamese Input & Markdown Editor
- Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí + Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn + miễn phí
- { // Save to localStorage or handle content changes - localStorage.setItem('vinakey2-content', content); + localStorage.setItem("vinakey2-content", content); }} />

- Tính năng chính: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), - editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. + Tính năng chính: Hỗ trợ các kiểu gõ phổ biến (AUTO, + TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và + tương thích hoàn toàn với mobile.

- Hướng dẫn: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, - sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. + Hướng dẫn: Chọn kiểu gõ từ thanh công cụ, bắt đầu + viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi + hoàn thành.

diff --git a/src/utils/vietnamese-input.ts b/src/utils/vietnamese-input.ts index 160a84f..c54304d 100644 --- a/src/utils/vietnamese-input.ts +++ b/src/utils/vietnamese-input.ts @@ -1,5 +1,5 @@ // Vietnamese Input Method wrapper for AVIM.js -export type InputMethod = 'OFF' | 'AUTO' | 'TELEX' | 'VNI' | 'VIQR'; +export type InputMethod = "OFF" | "AUTO" | "TELEX" | "VNI" | "VIQR"; // Extend window object to include AVIM declare global { @@ -13,7 +13,7 @@ declare global { class VietnameseInput { private avimInstance: any = null; private attachedElements = new Set(); - private currentMethod: InputMethod = 'AUTO'; + private currentMethod: InputMethod = "AUTO"; private enabled: boolean = true; constructor() { @@ -24,16 +24,17 @@ class VietnameseInput { private async initializeAVIM() { // Wait for AVIM to be loaded let attempts = 0; + while (!window.AVIM && attempts < 50) { - await new Promise(resolve => setTimeout(resolve, 100)); + await new Promise((resolve) => setTimeout(resolve, 100)); attempts++; } if (window.AVIM) { // Create AVIM instance this.avimInstance = new window.AVIM(); - console.log('✓ AVIM initialized successfully'); - + console.log("✓ AVIM initialized successfully"); + // Configure AVIM for TELEX by default if (window.AVIMGlobalConfig) { window.AVIMGlobalConfig.method = 1; // 1 = TELEX @@ -41,63 +42,63 @@ class VietnameseInput { window.AVIMGlobalConfig.showControl = 0; // Don't show the control panel } } else { - console.error('❌ AVIM failed to load'); + console.error("❌ AVIM failed to load"); } } public attach(element: HTMLTextAreaElement | HTMLInputElement): void { if (this.attachedElements.has(element)) return; - + this.attachedElements.add(element); - + // Use AVIM's attach method if available if (this.avimInstance) { try { this.avimInstance.attach(element); - console.log('✓ AVIM attached to element'); + console.log("✓ AVIM attached to element"); } catch (error) { - console.error('Error attaching AVIM:', error); + console.error("Error attaching AVIM:", error); } } } public detach(element: HTMLTextAreaElement | HTMLInputElement): void { if (!this.attachedElements.has(element)) return; - + this.attachedElements.delete(element); - + // Use AVIM's detach method if available if (this.avimInstance) { try { this.avimInstance.detach(element); - console.log('✓ AVIM detached from element'); + console.log("✓ AVIM detached from element"); } catch (error) { - console.error('Error detaching AVIM:', error); + console.error("Error detaching AVIM:", error); } } } public setMethod(method: InputMethod): void { this.currentMethod = method; - + if (window.AVIMGlobalConfig) { switch (method) { - case 'OFF': + case "OFF": window.AVIMGlobalConfig.onOff = 0; break; - case 'AUTO': + case "AUTO": window.AVIMGlobalConfig.method = 0; window.AVIMGlobalConfig.onOff = 1; break; - case 'TELEX': + case "TELEX": window.AVIMGlobalConfig.method = 1; window.AVIMGlobalConfig.onOff = 1; break; - case 'VNI': + case "VNI": window.AVIMGlobalConfig.method = 2; window.AVIMGlobalConfig.onOff = 1; break; - case 'VIQR': + case "VIQR": window.AVIMGlobalConfig.method = 3; window.AVIMGlobalConfig.onOff = 1; break; @@ -107,7 +108,7 @@ class VietnameseInput { public setEnabled(enabled: boolean): void { this.enabled = enabled; - + if (window.AVIMGlobalConfig) { window.AVIMGlobalConfig.onOff = enabled ? 1 : 0; } @@ -123,4 +124,4 @@ class VietnameseInput { } // Export singleton instance -export const vietnameseInput = new VietnameseInput(); \ No newline at end of file +export const vietnameseInput = new VietnameseInput(); diff --git a/test-results/.last-run.json b/test-results/.last-run.json index cbcc1fb..fb5e3b9 100644 --- a/test-results/.last-run.json +++ b/test-results/.last-run.json @@ -1,4 +1,8 @@ { - "status": "passed", - "failedTests": [] + "status": "failed", + "failedTests": [ + "028b77310882b357f9f9-5cfec24c7553c73476c0", + "028b77310882b357f9f9-0a13ebc89c1deb792cb0", + "028b77310882b357f9f9-e7f2812f6e496b5bd874" + ] } \ No newline at end of file diff --git a/test-results/working-dark-theme-OverTyp-38519-namese-input-in-both-themes-chromium/error-context.md b/test-results/working-dark-theme-OverTyp-38519-namese-input-in-both-themes-chromium/error-context.md new file mode 100644 index 0000000..3b8b125 --- /dev/null +++ b/test-results/working-dark-theme-OverTyp-38519-namese-input-in-both-themes-chromium/error-context.md @@ -0,0 +1,109 @@ +# Page snapshot + +```yaml +- generic [ref=e4]: + - navigation [ref=e5]: + - generic [ref=e6]: + - list [ref=e7]: + - link "VinaKey 2" [ref=e9] [cursor=pointer]: + - /url: / + - img [ref=e10] [cursor=pointer] + - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 + - generic [ref=e13]: + - listitem [ref=e14]: + - link "Editor" [ref=e15] [cursor=pointer]: + - /url: / + - listitem [ref=e16]: + - link "About" [ref=e17] [cursor=pointer]: + - /url: /about + - list [ref=e18]: + - listitem [ref=e19]: + - link "Discord" [ref=e20] [cursor=pointer]: + - /url: "#" + - img [ref=e21] [cursor=pointer] + - link "GitHub" [ref=e23] [cursor=pointer]: + - /url: https://github.com/vinakey/vinakey2 + - img [ref=e24] [cursor=pointer] + - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: + - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] + - img [ref=e30] [cursor=pointer] + - listitem + - main [ref=e32]: + - generic [ref=e33]: + - generic [ref=e34]: + - generic [ref=e35]: VinaKey + - generic [ref=e36]: "2" + - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor + - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí + - generic [ref=e40]: + - generic [ref=e41]: + - generic [ref=e42]: + - generic [ref=e43]: + - heading "VinaKey 2 Editor" [level=2] [ref=e44] + - paragraph [ref=e45]: Vietnamese typing with markdown support + - generic [ref=e46]: + - button "Load Sample" [ref=e47] [cursor=pointer] + - button "Copy Text" [ref=e48] [cursor=pointer] + - button "Clear" [ref=e49] [cursor=pointer] + - separator [ref=e50] + - generic [ref=e51]: + - generic [ref=e52]: + - generic [ref=e53]: "Vietnamese Input:" + - button "ON" [ref=e54] [cursor=pointer] + - generic [ref=e55]: + - button "AUTO" [ref=e56] [cursor=pointer] + - button "TELEX" [ref=e57] [cursor=pointer] + - button "VNI" [ref=e58] [cursor=pointer] + - button "VIQR" [ref=e59] [cursor=pointer] + - generic [ref=e60]: + - generic [ref=e62]: + - toolbar "Text formatting" [ref=e63]: + - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: + - img [ref=e65] [cursor=pointer] + - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: + - img [ref=e69] [cursor=pointer] + - separator [ref=e71] + - button "Heading 1" [ref=e72] [cursor=pointer]: + - img [ref=e73] [cursor=pointer] + - button "Heading 2" [ref=e75] [cursor=pointer]: + - img [ref=e76] [cursor=pointer] + - button "Heading 3" [ref=e78] [cursor=pointer]: + - img [ref=e79] [cursor=pointer] + - separator [ref=e81] + - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: + - img [ref=e83] [cursor=pointer] + - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': + - img [ref=e88] [cursor=pointer] + - separator [ref=e92] + - button "Quote" [ref=e93] [cursor=pointer]: + - img [ref=e94] [cursor=pointer] + - separator [ref=e97] + - button "Bullet List" [ref=e98] [cursor=pointer]: + - img [ref=e99] [cursor=pointer] + - button "Numbered List" [ref=e100] [cursor=pointer]: + - img [ref=e101] [cursor=pointer] + - button "Task List" [ref=e105] [cursor=pointer]: + - img [ref=e106] [cursor=pointer] + - separator [ref=e110] + - button "View mode" [ref=e111] [cursor=pointer]: + - img [ref=e112] [cursor=pointer] + - generic [ref=e115]: + - textbox "Bắt đầu viết markdown với tiếng Việt..." [active] [ref=e116]: xin chao + - generic: + - generic: xin chao + - generic [ref=e117]: + - generic [ref=e118]: "Characters: 8 | Words: 2" + - generic [ref=e119]: "Method: AUTO ✓" + - generic [ref=e120]: + - paragraph [ref=e121]: + - strong [ref=e122]: "Tính năng chính:" + - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. + - paragraph [ref=e123]: + - strong [ref=e124]: "Hướng dẫn:" + - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. + - contentinfo [ref=e125]: + - link "Powered by HeroUI" [ref=e126] [cursor=pointer]: + - /url: https://heroui.com + - generic [ref=e127] [cursor=pointer]: Powered by + - paragraph [ref=e128] [cursor=pointer]: HeroUI +``` \ No newline at end of file diff --git a/test-results/working-dark-theme-OverTyp-4bd6b-tween-light-and-dark-themes-chromium/error-context.md b/test-results/working-dark-theme-OverTyp-4bd6b-tween-light-and-dark-themes-chromium/error-context.md new file mode 100644 index 0000000..38a9369 --- /dev/null +++ b/test-results/working-dark-theme-OverTyp-4bd6b-tween-light-and-dark-themes-chromium/error-context.md @@ -0,0 +1,102 @@ +# Page snapshot + +```yaml +- generic [ref=e4]: + - navigation [ref=e5]: + - generic [ref=e6]: + - list [ref=e7]: + - link "VinaKey 2" [ref=e9] [cursor=pointer]: + - /url: / + - img [ref=e10] [cursor=pointer] + - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 + - generic [ref=e13]: + - listitem [ref=e14]: + - link "Editor" [ref=e15] [cursor=pointer]: + - /url: / + - listitem [ref=e16]: + - link "About" [ref=e17] [cursor=pointer]: + - /url: /about + - list [ref=e18]: + - listitem [ref=e19]: + - link "Discord" [ref=e20] [cursor=pointer]: + - /url: "#" + - img [ref=e21] [cursor=pointer] + - link "GitHub" [ref=e23] [cursor=pointer]: + - /url: https://github.com/vinakey/vinakey2 + - img [ref=e24] [cursor=pointer] + - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: + - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] + - img [ref=e30] [cursor=pointer] + - listitem + - main [ref=e32]: + - generic [ref=e33]: + - generic [ref=e34]: + - generic [ref=e35]: VinaKey + - generic [ref=e36]: "2" + - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor + - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí + - generic [ref=e40]: + - generic [ref=e41]: + - generic [ref=e42]: + - generic [ref=e43]: + - heading "VinaKey 2 Editor" [level=2] [ref=e44] + - paragraph [ref=e45]: Vietnamese typing with markdown support + - generic [ref=e46]: + - button "Load Sample" [ref=e47] [cursor=pointer] + - button "Copy Text" [disabled] [ref=e48] [cursor=pointer] + - button "Clear" [ref=e49] [cursor=pointer] + - separator [ref=e50] + - generic [ref=e51]: + - generic [ref=e52]: + - generic [ref=e53]: "Vietnamese Input:" + - button "ON" [ref=e54] [cursor=pointer] + - generic [ref=e55]: + - button "AUTO" [ref=e56] [cursor=pointer] + - button "TELEX" [ref=e57] [cursor=pointer] + - button "VNI" [ref=e58] [cursor=pointer] + - button "VIQR" [ref=e59] [cursor=pointer] + - generic [ref=e62]: + - toolbar "Text formatting" [ref=e63]: + - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: + - img [ref=e65] [cursor=pointer] + - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: + - img [ref=e69] [cursor=pointer] + - separator [ref=e71] + - button "Heading 1" [ref=e72] [cursor=pointer]: + - img [ref=e73] [cursor=pointer] + - button "Heading 2" [ref=e75] [cursor=pointer]: + - img [ref=e76] [cursor=pointer] + - button "Heading 3" [ref=e78] [cursor=pointer]: + - img [ref=e79] [cursor=pointer] + - separator [ref=e81] + - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: + - img [ref=e83] [cursor=pointer] + - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': + - img [ref=e88] [cursor=pointer] + - separator [ref=e92] + - button "Quote" [ref=e93] [cursor=pointer]: + - img [ref=e94] [cursor=pointer] + - separator [ref=e97] + - button "Bullet List" [ref=e98] [cursor=pointer]: + - img [ref=e99] [cursor=pointer] + - button "Numbered List" [ref=e100] [cursor=pointer]: + - img [ref=e101] [cursor=pointer] + - button "Task List" [ref=e105] [cursor=pointer]: + - img [ref=e106] [cursor=pointer] + - separator [ref=e110] + - button "View mode" [ref=e111] [cursor=pointer]: + - img [ref=e112] [cursor=pointer] + - textbox "Bắt đầu viết markdown với tiếng Việt..." [ref=e116] + - generic [ref=e117]: + - paragraph [ref=e118]: + - strong [ref=e119]: "Tính năng chính:" + - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. + - paragraph [ref=e120]: + - strong [ref=e121]: "Hướng dẫn:" + - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. + - contentinfo [ref=e122]: + - link "Powered by HeroUI" [ref=e123] [cursor=pointer]: + - /url: https://heroui.com + - generic [ref=e124] [cursor=pointer]: Powered by + - paragraph [ref=e125] [cursor=pointer]: HeroUI +``` \ No newline at end of file diff --git a/test-results/working-dark-theme-OverTyp-f2b15--differences-between-themes-chromium/error-context.md b/test-results/working-dark-theme-OverTyp-f2b15--differences-between-themes-chromium/error-context.md new file mode 100644 index 0000000..37d5766 --- /dev/null +++ b/test-results/working-dark-theme-OverTyp-f2b15--differences-between-themes-chromium/error-context.md @@ -0,0 +1,207 @@ +# Page snapshot + +```yaml +- generic [ref=e4]: + - navigation [ref=e5]: + - generic [ref=e6]: + - list [ref=e7]: + - link "VinaKey 2" [ref=e9] [cursor=pointer]: + - /url: / + - img [ref=e10] [cursor=pointer] + - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 + - generic [ref=e13]: + - listitem [ref=e14]: + - link "Editor" [ref=e15] [cursor=pointer]: + - /url: / + - listitem [ref=e16]: + - link "About" [ref=e17] [cursor=pointer]: + - /url: /about + - list [ref=e18]: + - listitem [ref=e19]: + - link "Discord" [ref=e20] [cursor=pointer]: + - /url: "#" + - img [ref=e21] [cursor=pointer] + - link "GitHub" [ref=e23] [cursor=pointer]: + - /url: https://github.com/vinakey/vinakey2 + - img [ref=e24] [cursor=pointer] + - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: + - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] + - img [ref=e30] [cursor=pointer] + - listitem + - main [ref=e32]: + - generic [ref=e33]: + - generic [ref=e34]: + - generic [ref=e35]: VinaKey + - generic [ref=e36]: "2" + - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor + - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí + - generic [ref=e40]: + - generic [ref=e41]: + - generic [ref=e42]: + - generic [ref=e43]: + - heading "VinaKey 2 Editor" [level=2] [ref=e44] + - paragraph [ref=e45]: Vietnamese typing with markdown support + - generic [ref=e46]: + - button "Load Sample" [active] [ref=e47] [cursor=pointer] + - button "Copy Text" [ref=e48] [cursor=pointer] + - button "Clear" [ref=e49] [cursor=pointer] + - separator [ref=e50] + - generic [ref=e51]: + - generic [ref=e52]: + - generic [ref=e53]: "Vietnamese Input:" + - button "ON" [ref=e54] [cursor=pointer] + - generic [ref=e55]: + - button "AUTO" [ref=e56] [cursor=pointer] + - button "TELEX" [ref=e57] [cursor=pointer] + - button "VNI" [ref=e58] [cursor=pointer] + - button "VIQR" [ref=e59] [cursor=pointer] + - generic [ref=e60]: + - generic [ref=e62]: + - toolbar "Text formatting" [ref=e63]: + - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: + - img [ref=e65] [cursor=pointer] + - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: + - img [ref=e69] [cursor=pointer] + - separator [ref=e71] + - button "Heading 1" [ref=e72] [cursor=pointer]: + - img [ref=e73] [cursor=pointer] + - button "Heading 2" [ref=e75] [cursor=pointer]: + - img [ref=e76] [cursor=pointer] + - button "Heading 3" [ref=e78] [cursor=pointer]: + - img [ref=e79] [cursor=pointer] + - separator [ref=e81] + - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: + - img [ref=e83] [cursor=pointer] + - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': + - img [ref=e88] [cursor=pointer] + - separator [ref=e92] + - button "Quote" [ref=e93] [cursor=pointer]: + - img [ref=e94] [cursor=pointer] + - separator [ref=e97] + - button "Bullet List" [ref=e98] [cursor=pointer]: + - img [ref=e99] [cursor=pointer] + - button "Numbered List" [ref=e100] [cursor=pointer]: + - img [ref=e101] [cursor=pointer] + - button "Task List" [ref=e105] [cursor=pointer]: + - img [ref=e106] [cursor=pointer] + - separator [ref=e110] + - button "View mode" [ref=e111] [cursor=pointer]: + - img [ref=e112] [cursor=pointer] + - generic [ref=e115]: + - textbox "Bắt đầu viết markdown với tiếng Việt..." [ref=e116]: "# Chào mừng đến với VinaKey 2 ## Tính năng chính - **Gõ tiếng Việt**: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR) - **Markdown Editor**: Soạn thảo markdown với giao diện WYSIWYG - **Toolbar**: Các công cụ định dạng tiện lợi - **Responsive**: Tương thích với mobile và desktop ## Hướng dẫn sử dụng 1. Chọn kiểu gõ tiếng Việt từ các nút bên trên 2. Bắt đầu viết nội dung markdown 3. Sử dụng toolbar để định dạng nhanh 4. Bấm nút \"Copy\" để sao chép nội dung ### Ví dụ văn bản > \"Có công mài sắt có ngày nên kim\" **Danh sách công việc:** - [x] Tích hợp Vietnamese input - [x] Tích hợp Overtype editor - [ ] Thêm tính năng export - [ ] Thêm themes ```javascript // Code example const vietnameseText = \"Xin chào thế giới!\"; console.log(vietnameseText); ``` --- *Tạo bởi [VinaKey](https://github.com/vinakey/vinakey2) - công cụ gõ tiếng Việt hiện đại.*" + - generic: + - generic: + - heading [level=1]: + - generic: "#" + - text: Chào mừng đến với VinaKey 2 + - generic: + - heading [level=2]: + - generic: "##" + - text: Tính năng chính + - list: + - listitem: + - generic: "-" + - strong: + - generic: "**" + - text: Gõ tiếng Việt + - generic: "**" + - text: ": Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR)" + - listitem: + - generic: "-" + - strong: + - generic: "**" + - text: Markdown Editor + - generic: "**" + - text: ": Soạn thảo markdown với giao diện WYSIWYG" + - listitem: + - generic: "-" + - strong: + - generic: "**" + - text: Toolbar + - generic: "**" + - text: ": Các công cụ định dạng tiện lợi" + - listitem: + - generic: "-" + - strong: + - generic: "**" + - text: Responsive + - generic: "**" + - text: ": Tương thích với mobile và desktop" + - generic: + - heading [level=2]: + - generic: "##" + - text: Hướng dẫn sử dụng + - list: + - listitem: + - generic: "1." + - text: Chọn kiểu gõ tiếng Việt từ các nút bên trên + - listitem: + - generic: "2." + - text: Bắt đầu viết nội dung markdown + - listitem: + - generic: "3." + - text: Sử dụng toolbar để định dạng nhanh + - listitem: + - generic: "4." + - text: Bấm nút "Copy" để sao chép nội dung + - generic: + - heading [level=3]: + - generic: "###" + - text: Ví dụ văn bản + - generic: + - generic: + - generic: ">" + - text: "\"Có công mài sắt có ngày nên kim\"" + - generic: + - strong: + - generic: "**" + - text: "Danh sách công việc:" + - generic: "**" + - list: + - listitem: + - generic: "-" + - text: "[x] Tích hợp Vietnamese input" + - listitem: + - generic: "-" + - text: "[x] Tích hợp Overtype editor" + - listitem: + - generic: "-" + - text: "[ ] Thêm tính năng export" + - listitem: + - generic: "-" + - text: "[ ] Thêm themes" + - generic: + - generic: "```javascript" + - generic: + - code: // Code example const vietnameseText = "Xin chào thế giới!"; console.log(vietnameseText); + - generic: + - generic: "```" + - generic: + - generic: "---" + - generic: + - emphasis: + - generic: "*" + - text: Tạo bởi + - link: + - /url: https://github.com/vinakey/vinakey2 + - generic: "[" + - text: VinaKey + - generic: "](https://github.com/vinakey/vinakey2)" + - text: "- công cụ gõ tiếng Việt hiện đại." + - generic: "*" + - generic [ref=e117]: + - generic [ref=e118]: "Characters: 866 | Words: 160" + - generic [ref=e119]: "Method: AUTO ✓" + - generic [ref=e120]: + - paragraph [ref=e121]: + - strong [ref=e122]: "Tính năng chính:" + - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. + - paragraph [ref=e123]: + - strong [ref=e124]: "Hướng dẫn:" + - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. + - contentinfo [ref=e125]: + - link "Powered by HeroUI" [ref=e126] [cursor=pointer]: + - /url: https://heroui.com + - generic [ref=e127] [cursor=pointer]: Powered by + - paragraph [ref=e128] [cursor=pointer]: HeroUI +``` \ No newline at end of file From e5d5fabafe3eb71eb17f104a44e71b5375422f51 Mon Sep 17 00:00:00 2001 From: Anh Nguyen Date: Mon, 25 Aug 2025 21:14:42 +0700 Subject: [PATCH 2/4] chore: Remove test artifacts --- ...95954345a439b256687893049ac883674553e2b.md | 109 --------- ...9d3e2306e7b5c891936f95b76d7e5eedb3e1456.md | 102 --------- ...042bfa46ae587ad74e39d1f083b2c2cf01aeff0.md | 207 ------------------ playwright-report/index.html | 76 ------- test-results/.last-run.json | 8 - .../error-context.md | 109 --------- .../error-context.md | 102 --------- .../error-context.md | 207 ------------------ 8 files changed, 920 deletions(-) delete mode 100644 playwright-report/data/495954345a439b256687893049ac883674553e2b.md delete mode 100644 playwright-report/data/89d3e2306e7b5c891936f95b76d7e5eedb3e1456.md delete mode 100644 playwright-report/data/9042bfa46ae587ad74e39d1f083b2c2cf01aeff0.md delete mode 100644 playwright-report/index.html delete mode 100644 test-results/.last-run.json delete mode 100644 test-results/working-dark-theme-OverTyp-38519-namese-input-in-both-themes-chromium/error-context.md delete mode 100644 test-results/working-dark-theme-OverTyp-4bd6b-tween-light-and-dark-themes-chromium/error-context.md delete mode 100644 test-results/working-dark-theme-OverTyp-f2b15--differences-between-themes-chromium/error-context.md diff --git a/playwright-report/data/495954345a439b256687893049ac883674553e2b.md b/playwright-report/data/495954345a439b256687893049ac883674553e2b.md deleted file mode 100644 index 3b8b125..0000000 --- a/playwright-report/data/495954345a439b256687893049ac883674553e2b.md +++ /dev/null @@ -1,109 +0,0 @@ -# Page snapshot - -```yaml -- generic [ref=e4]: - - navigation [ref=e5]: - - generic [ref=e6]: - - list [ref=e7]: - - link "VinaKey 2" [ref=e9] [cursor=pointer]: - - /url: / - - img [ref=e10] [cursor=pointer] - - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 - - generic [ref=e13]: - - listitem [ref=e14]: - - link "Editor" [ref=e15] [cursor=pointer]: - - /url: / - - listitem [ref=e16]: - - link "About" [ref=e17] [cursor=pointer]: - - /url: /about - - list [ref=e18]: - - listitem [ref=e19]: - - link "Discord" [ref=e20] [cursor=pointer]: - - /url: "#" - - img [ref=e21] [cursor=pointer] - - link "GitHub" [ref=e23] [cursor=pointer]: - - /url: https://github.com/vinakey/vinakey2 - - img [ref=e24] [cursor=pointer] - - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: - - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] - - img [ref=e30] [cursor=pointer] - - listitem - - main [ref=e32]: - - generic [ref=e33]: - - generic [ref=e34]: - - generic [ref=e35]: VinaKey - - generic [ref=e36]: "2" - - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor - - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí - - generic [ref=e40]: - - generic [ref=e41]: - - generic [ref=e42]: - - generic [ref=e43]: - - heading "VinaKey 2 Editor" [level=2] [ref=e44] - - paragraph [ref=e45]: Vietnamese typing with markdown support - - generic [ref=e46]: - - button "Load Sample" [ref=e47] [cursor=pointer] - - button "Copy Text" [ref=e48] [cursor=pointer] - - button "Clear" [ref=e49] [cursor=pointer] - - separator [ref=e50] - - generic [ref=e51]: - - generic [ref=e52]: - - generic [ref=e53]: "Vietnamese Input:" - - button "ON" [ref=e54] [cursor=pointer] - - generic [ref=e55]: - - button "AUTO" [ref=e56] [cursor=pointer] - - button "TELEX" [ref=e57] [cursor=pointer] - - button "VNI" [ref=e58] [cursor=pointer] - - button "VIQR" [ref=e59] [cursor=pointer] - - generic [ref=e60]: - - generic [ref=e62]: - - toolbar "Text formatting" [ref=e63]: - - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: - - img [ref=e65] [cursor=pointer] - - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: - - img [ref=e69] [cursor=pointer] - - separator [ref=e71] - - button "Heading 1" [ref=e72] [cursor=pointer]: - - img [ref=e73] [cursor=pointer] - - button "Heading 2" [ref=e75] [cursor=pointer]: - - img [ref=e76] [cursor=pointer] - - button "Heading 3" [ref=e78] [cursor=pointer]: - - img [ref=e79] [cursor=pointer] - - separator [ref=e81] - - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: - - img [ref=e83] [cursor=pointer] - - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': - - img [ref=e88] [cursor=pointer] - - separator [ref=e92] - - button "Quote" [ref=e93] [cursor=pointer]: - - img [ref=e94] [cursor=pointer] - - separator [ref=e97] - - button "Bullet List" [ref=e98] [cursor=pointer]: - - img [ref=e99] [cursor=pointer] - - button "Numbered List" [ref=e100] [cursor=pointer]: - - img [ref=e101] [cursor=pointer] - - button "Task List" [ref=e105] [cursor=pointer]: - - img [ref=e106] [cursor=pointer] - - separator [ref=e110] - - button "View mode" [ref=e111] [cursor=pointer]: - - img [ref=e112] [cursor=pointer] - - generic [ref=e115]: - - textbox "Bắt đầu viết markdown với tiếng Việt..." [active] [ref=e116]: xin chao - - generic: - - generic: xin chao - - generic [ref=e117]: - - generic [ref=e118]: "Characters: 8 | Words: 2" - - generic [ref=e119]: "Method: AUTO ✓" - - generic [ref=e120]: - - paragraph [ref=e121]: - - strong [ref=e122]: "Tính năng chính:" - - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. - - paragraph [ref=e123]: - - strong [ref=e124]: "Hướng dẫn:" - - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. - - contentinfo [ref=e125]: - - link "Powered by HeroUI" [ref=e126] [cursor=pointer]: - - /url: https://heroui.com - - generic [ref=e127] [cursor=pointer]: Powered by - - paragraph [ref=e128] [cursor=pointer]: HeroUI -``` \ No newline at end of file diff --git a/playwright-report/data/89d3e2306e7b5c891936f95b76d7e5eedb3e1456.md b/playwright-report/data/89d3e2306e7b5c891936f95b76d7e5eedb3e1456.md deleted file mode 100644 index 38a9369..0000000 --- a/playwright-report/data/89d3e2306e7b5c891936f95b76d7e5eedb3e1456.md +++ /dev/null @@ -1,102 +0,0 @@ -# Page snapshot - -```yaml -- generic [ref=e4]: - - navigation [ref=e5]: - - generic [ref=e6]: - - list [ref=e7]: - - link "VinaKey 2" [ref=e9] [cursor=pointer]: - - /url: / - - img [ref=e10] [cursor=pointer] - - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 - - generic [ref=e13]: - - listitem [ref=e14]: - - link "Editor" [ref=e15] [cursor=pointer]: - - /url: / - - listitem [ref=e16]: - - link "About" [ref=e17] [cursor=pointer]: - - /url: /about - - list [ref=e18]: - - listitem [ref=e19]: - - link "Discord" [ref=e20] [cursor=pointer]: - - /url: "#" - - img [ref=e21] [cursor=pointer] - - link "GitHub" [ref=e23] [cursor=pointer]: - - /url: https://github.com/vinakey/vinakey2 - - img [ref=e24] [cursor=pointer] - - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: - - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] - - img [ref=e30] [cursor=pointer] - - listitem - - main [ref=e32]: - - generic [ref=e33]: - - generic [ref=e34]: - - generic [ref=e35]: VinaKey - - generic [ref=e36]: "2" - - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor - - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí - - generic [ref=e40]: - - generic [ref=e41]: - - generic [ref=e42]: - - generic [ref=e43]: - - heading "VinaKey 2 Editor" [level=2] [ref=e44] - - paragraph [ref=e45]: Vietnamese typing with markdown support - - generic [ref=e46]: - - button "Load Sample" [ref=e47] [cursor=pointer] - - button "Copy Text" [disabled] [ref=e48] [cursor=pointer] - - button "Clear" [ref=e49] [cursor=pointer] - - separator [ref=e50] - - generic [ref=e51]: - - generic [ref=e52]: - - generic [ref=e53]: "Vietnamese Input:" - - button "ON" [ref=e54] [cursor=pointer] - - generic [ref=e55]: - - button "AUTO" [ref=e56] [cursor=pointer] - - button "TELEX" [ref=e57] [cursor=pointer] - - button "VNI" [ref=e58] [cursor=pointer] - - button "VIQR" [ref=e59] [cursor=pointer] - - generic [ref=e62]: - - toolbar "Text formatting" [ref=e63]: - - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: - - img [ref=e65] [cursor=pointer] - - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: - - img [ref=e69] [cursor=pointer] - - separator [ref=e71] - - button "Heading 1" [ref=e72] [cursor=pointer]: - - img [ref=e73] [cursor=pointer] - - button "Heading 2" [ref=e75] [cursor=pointer]: - - img [ref=e76] [cursor=pointer] - - button "Heading 3" [ref=e78] [cursor=pointer]: - - img [ref=e79] [cursor=pointer] - - separator [ref=e81] - - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: - - img [ref=e83] [cursor=pointer] - - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': - - img [ref=e88] [cursor=pointer] - - separator [ref=e92] - - button "Quote" [ref=e93] [cursor=pointer]: - - img [ref=e94] [cursor=pointer] - - separator [ref=e97] - - button "Bullet List" [ref=e98] [cursor=pointer]: - - img [ref=e99] [cursor=pointer] - - button "Numbered List" [ref=e100] [cursor=pointer]: - - img [ref=e101] [cursor=pointer] - - button "Task List" [ref=e105] [cursor=pointer]: - - img [ref=e106] [cursor=pointer] - - separator [ref=e110] - - button "View mode" [ref=e111] [cursor=pointer]: - - img [ref=e112] [cursor=pointer] - - textbox "Bắt đầu viết markdown với tiếng Việt..." [ref=e116] - - generic [ref=e117]: - - paragraph [ref=e118]: - - strong [ref=e119]: "Tính năng chính:" - - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. - - paragraph [ref=e120]: - - strong [ref=e121]: "Hướng dẫn:" - - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. - - contentinfo [ref=e122]: - - link "Powered by HeroUI" [ref=e123] [cursor=pointer]: - - /url: https://heroui.com - - generic [ref=e124] [cursor=pointer]: Powered by - - paragraph [ref=e125] [cursor=pointer]: HeroUI -``` \ No newline at end of file diff --git a/playwright-report/data/9042bfa46ae587ad74e39d1f083b2c2cf01aeff0.md b/playwright-report/data/9042bfa46ae587ad74e39d1f083b2c2cf01aeff0.md deleted file mode 100644 index 37d5766..0000000 --- a/playwright-report/data/9042bfa46ae587ad74e39d1f083b2c2cf01aeff0.md +++ /dev/null @@ -1,207 +0,0 @@ -# Page snapshot - -```yaml -- generic [ref=e4]: - - navigation [ref=e5]: - - generic [ref=e6]: - - list [ref=e7]: - - link "VinaKey 2" [ref=e9] [cursor=pointer]: - - /url: / - - img [ref=e10] [cursor=pointer] - - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 - - generic [ref=e13]: - - listitem [ref=e14]: - - link "Editor" [ref=e15] [cursor=pointer]: - - /url: / - - listitem [ref=e16]: - - link "About" [ref=e17] [cursor=pointer]: - - /url: /about - - list [ref=e18]: - - listitem [ref=e19]: - - link "Discord" [ref=e20] [cursor=pointer]: - - /url: "#" - - img [ref=e21] [cursor=pointer] - - link "GitHub" [ref=e23] [cursor=pointer]: - - /url: https://github.com/vinakey/vinakey2 - - img [ref=e24] [cursor=pointer] - - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: - - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] - - img [ref=e30] [cursor=pointer] - - listitem - - main [ref=e32]: - - generic [ref=e33]: - - generic [ref=e34]: - - generic [ref=e35]: VinaKey - - generic [ref=e36]: "2" - - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor - - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí - - generic [ref=e40]: - - generic [ref=e41]: - - generic [ref=e42]: - - generic [ref=e43]: - - heading "VinaKey 2 Editor" [level=2] [ref=e44] - - paragraph [ref=e45]: Vietnamese typing with markdown support - - generic [ref=e46]: - - button "Load Sample" [active] [ref=e47] [cursor=pointer] - - button "Copy Text" [ref=e48] [cursor=pointer] - - button "Clear" [ref=e49] [cursor=pointer] - - separator [ref=e50] - - generic [ref=e51]: - - generic [ref=e52]: - - generic [ref=e53]: "Vietnamese Input:" - - button "ON" [ref=e54] [cursor=pointer] - - generic [ref=e55]: - - button "AUTO" [ref=e56] [cursor=pointer] - - button "TELEX" [ref=e57] [cursor=pointer] - - button "VNI" [ref=e58] [cursor=pointer] - - button "VIQR" [ref=e59] [cursor=pointer] - - generic [ref=e60]: - - generic [ref=e62]: - - toolbar "Text formatting" [ref=e63]: - - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: - - img [ref=e65] [cursor=pointer] - - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: - - img [ref=e69] [cursor=pointer] - - separator [ref=e71] - - button "Heading 1" [ref=e72] [cursor=pointer]: - - img [ref=e73] [cursor=pointer] - - button "Heading 2" [ref=e75] [cursor=pointer]: - - img [ref=e76] [cursor=pointer] - - button "Heading 3" [ref=e78] [cursor=pointer]: - - img [ref=e79] [cursor=pointer] - - separator [ref=e81] - - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: - - img [ref=e83] [cursor=pointer] - - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': - - img [ref=e88] [cursor=pointer] - - separator [ref=e92] - - button "Quote" [ref=e93] [cursor=pointer]: - - img [ref=e94] [cursor=pointer] - - separator [ref=e97] - - button "Bullet List" [ref=e98] [cursor=pointer]: - - img [ref=e99] [cursor=pointer] - - button "Numbered List" [ref=e100] [cursor=pointer]: - - img [ref=e101] [cursor=pointer] - - button "Task List" [ref=e105] [cursor=pointer]: - - img [ref=e106] [cursor=pointer] - - separator [ref=e110] - - button "View mode" [ref=e111] [cursor=pointer]: - - img [ref=e112] [cursor=pointer] - - generic [ref=e115]: - - textbox "Bắt đầu viết markdown với tiếng Việt..." [ref=e116]: "# Chào mừng đến với VinaKey 2 ## Tính năng chính - **Gõ tiếng Việt**: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR) - **Markdown Editor**: Soạn thảo markdown với giao diện WYSIWYG - **Toolbar**: Các công cụ định dạng tiện lợi - **Responsive**: Tương thích với mobile và desktop ## Hướng dẫn sử dụng 1. Chọn kiểu gõ tiếng Việt từ các nút bên trên 2. Bắt đầu viết nội dung markdown 3. Sử dụng toolbar để định dạng nhanh 4. Bấm nút \"Copy\" để sao chép nội dung ### Ví dụ văn bản > \"Có công mài sắt có ngày nên kim\" **Danh sách công việc:** - [x] Tích hợp Vietnamese input - [x] Tích hợp Overtype editor - [ ] Thêm tính năng export - [ ] Thêm themes ```javascript // Code example const vietnameseText = \"Xin chào thế giới!\"; console.log(vietnameseText); ``` --- *Tạo bởi [VinaKey](https://github.com/vinakey/vinakey2) - công cụ gõ tiếng Việt hiện đại.*" - - generic: - - generic: - - heading [level=1]: - - generic: "#" - - text: Chào mừng đến với VinaKey 2 - - generic: - - heading [level=2]: - - generic: "##" - - text: Tính năng chính - - list: - - listitem: - - generic: "-" - - strong: - - generic: "**" - - text: Gõ tiếng Việt - - generic: "**" - - text: ": Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR)" - - listitem: - - generic: "-" - - strong: - - generic: "**" - - text: Markdown Editor - - generic: "**" - - text: ": Soạn thảo markdown với giao diện WYSIWYG" - - listitem: - - generic: "-" - - strong: - - generic: "**" - - text: Toolbar - - generic: "**" - - text: ": Các công cụ định dạng tiện lợi" - - listitem: - - generic: "-" - - strong: - - generic: "**" - - text: Responsive - - generic: "**" - - text: ": Tương thích với mobile và desktop" - - generic: - - heading [level=2]: - - generic: "##" - - text: Hướng dẫn sử dụng - - list: - - listitem: - - generic: "1." - - text: Chọn kiểu gõ tiếng Việt từ các nút bên trên - - listitem: - - generic: "2." - - text: Bắt đầu viết nội dung markdown - - listitem: - - generic: "3." - - text: Sử dụng toolbar để định dạng nhanh - - listitem: - - generic: "4." - - text: Bấm nút "Copy" để sao chép nội dung - - generic: - - heading [level=3]: - - generic: "###" - - text: Ví dụ văn bản - - generic: - - generic: - - generic: ">" - - text: "\"Có công mài sắt có ngày nên kim\"" - - generic: - - strong: - - generic: "**" - - text: "Danh sách công việc:" - - generic: "**" - - list: - - listitem: - - generic: "-" - - text: "[x] Tích hợp Vietnamese input" - - listitem: - - generic: "-" - - text: "[x] Tích hợp Overtype editor" - - listitem: - - generic: "-" - - text: "[ ] Thêm tính năng export" - - listitem: - - generic: "-" - - text: "[ ] Thêm themes" - - generic: - - generic: "```javascript" - - generic: - - code: // Code example const vietnameseText = "Xin chào thế giới!"; console.log(vietnameseText); - - generic: - - generic: "```" - - generic: - - generic: "---" - - generic: - - emphasis: - - generic: "*" - - text: Tạo bởi - - link: - - /url: https://github.com/vinakey/vinakey2 - - generic: "[" - - text: VinaKey - - generic: "](https://github.com/vinakey/vinakey2)" - - text: "- công cụ gõ tiếng Việt hiện đại." - - generic: "*" - - generic [ref=e117]: - - generic [ref=e118]: "Characters: 866 | Words: 160" - - generic [ref=e119]: "Method: AUTO ✓" - - generic [ref=e120]: - - paragraph [ref=e121]: - - strong [ref=e122]: "Tính năng chính:" - - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. - - paragraph [ref=e123]: - - strong [ref=e124]: "Hướng dẫn:" - - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. - - contentinfo [ref=e125]: - - link "Powered by HeroUI" [ref=e126] [cursor=pointer]: - - /url: https://heroui.com - - generic [ref=e127] [cursor=pointer]: Powered by - - paragraph [ref=e128] [cursor=pointer]: HeroUI -``` \ No newline at end of file diff --git a/playwright-report/index.html b/playwright-report/index.html deleted file mode 100644 index 7e7cddf..0000000 --- a/playwright-report/index.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - Playwright Test Report - - - - -
- - - \ No newline at end of file diff --git a/test-results/.last-run.json b/test-results/.last-run.json deleted file mode 100644 index fb5e3b9..0000000 --- a/test-results/.last-run.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "status": "failed", - "failedTests": [ - "028b77310882b357f9f9-5cfec24c7553c73476c0", - "028b77310882b357f9f9-0a13ebc89c1deb792cb0", - "028b77310882b357f9f9-e7f2812f6e496b5bd874" - ] -} \ No newline at end of file diff --git a/test-results/working-dark-theme-OverTyp-38519-namese-input-in-both-themes-chromium/error-context.md b/test-results/working-dark-theme-OverTyp-38519-namese-input-in-both-themes-chromium/error-context.md deleted file mode 100644 index 3b8b125..0000000 --- a/test-results/working-dark-theme-OverTyp-38519-namese-input-in-both-themes-chromium/error-context.md +++ /dev/null @@ -1,109 +0,0 @@ -# Page snapshot - -```yaml -- generic [ref=e4]: - - navigation [ref=e5]: - - generic [ref=e6]: - - list [ref=e7]: - - link "VinaKey 2" [ref=e9] [cursor=pointer]: - - /url: / - - img [ref=e10] [cursor=pointer] - - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 - - generic [ref=e13]: - - listitem [ref=e14]: - - link "Editor" [ref=e15] [cursor=pointer]: - - /url: / - - listitem [ref=e16]: - - link "About" [ref=e17] [cursor=pointer]: - - /url: /about - - list [ref=e18]: - - listitem [ref=e19]: - - link "Discord" [ref=e20] [cursor=pointer]: - - /url: "#" - - img [ref=e21] [cursor=pointer] - - link "GitHub" [ref=e23] [cursor=pointer]: - - /url: https://github.com/vinakey/vinakey2 - - img [ref=e24] [cursor=pointer] - - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: - - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] - - img [ref=e30] [cursor=pointer] - - listitem - - main [ref=e32]: - - generic [ref=e33]: - - generic [ref=e34]: - - generic [ref=e35]: VinaKey - - generic [ref=e36]: "2" - - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor - - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí - - generic [ref=e40]: - - generic [ref=e41]: - - generic [ref=e42]: - - generic [ref=e43]: - - heading "VinaKey 2 Editor" [level=2] [ref=e44] - - paragraph [ref=e45]: Vietnamese typing with markdown support - - generic [ref=e46]: - - button "Load Sample" [ref=e47] [cursor=pointer] - - button "Copy Text" [ref=e48] [cursor=pointer] - - button "Clear" [ref=e49] [cursor=pointer] - - separator [ref=e50] - - generic [ref=e51]: - - generic [ref=e52]: - - generic [ref=e53]: "Vietnamese Input:" - - button "ON" [ref=e54] [cursor=pointer] - - generic [ref=e55]: - - button "AUTO" [ref=e56] [cursor=pointer] - - button "TELEX" [ref=e57] [cursor=pointer] - - button "VNI" [ref=e58] [cursor=pointer] - - button "VIQR" [ref=e59] [cursor=pointer] - - generic [ref=e60]: - - generic [ref=e62]: - - toolbar "Text formatting" [ref=e63]: - - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: - - img [ref=e65] [cursor=pointer] - - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: - - img [ref=e69] [cursor=pointer] - - separator [ref=e71] - - button "Heading 1" [ref=e72] [cursor=pointer]: - - img [ref=e73] [cursor=pointer] - - button "Heading 2" [ref=e75] [cursor=pointer]: - - img [ref=e76] [cursor=pointer] - - button "Heading 3" [ref=e78] [cursor=pointer]: - - img [ref=e79] [cursor=pointer] - - separator [ref=e81] - - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: - - img [ref=e83] [cursor=pointer] - - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': - - img [ref=e88] [cursor=pointer] - - separator [ref=e92] - - button "Quote" [ref=e93] [cursor=pointer]: - - img [ref=e94] [cursor=pointer] - - separator [ref=e97] - - button "Bullet List" [ref=e98] [cursor=pointer]: - - img [ref=e99] [cursor=pointer] - - button "Numbered List" [ref=e100] [cursor=pointer]: - - img [ref=e101] [cursor=pointer] - - button "Task List" [ref=e105] [cursor=pointer]: - - img [ref=e106] [cursor=pointer] - - separator [ref=e110] - - button "View mode" [ref=e111] [cursor=pointer]: - - img [ref=e112] [cursor=pointer] - - generic [ref=e115]: - - textbox "Bắt đầu viết markdown với tiếng Việt..." [active] [ref=e116]: xin chao - - generic: - - generic: xin chao - - generic [ref=e117]: - - generic [ref=e118]: "Characters: 8 | Words: 2" - - generic [ref=e119]: "Method: AUTO ✓" - - generic [ref=e120]: - - paragraph [ref=e121]: - - strong [ref=e122]: "Tính năng chính:" - - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. - - paragraph [ref=e123]: - - strong [ref=e124]: "Hướng dẫn:" - - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. - - contentinfo [ref=e125]: - - link "Powered by HeroUI" [ref=e126] [cursor=pointer]: - - /url: https://heroui.com - - generic [ref=e127] [cursor=pointer]: Powered by - - paragraph [ref=e128] [cursor=pointer]: HeroUI -``` \ No newline at end of file diff --git a/test-results/working-dark-theme-OverTyp-4bd6b-tween-light-and-dark-themes-chromium/error-context.md b/test-results/working-dark-theme-OverTyp-4bd6b-tween-light-and-dark-themes-chromium/error-context.md deleted file mode 100644 index 38a9369..0000000 --- a/test-results/working-dark-theme-OverTyp-4bd6b-tween-light-and-dark-themes-chromium/error-context.md +++ /dev/null @@ -1,102 +0,0 @@ -# Page snapshot - -```yaml -- generic [ref=e4]: - - navigation [ref=e5]: - - generic [ref=e6]: - - list [ref=e7]: - - link "VinaKey 2" [ref=e9] [cursor=pointer]: - - /url: / - - img [ref=e10] [cursor=pointer] - - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 - - generic [ref=e13]: - - listitem [ref=e14]: - - link "Editor" [ref=e15] [cursor=pointer]: - - /url: / - - listitem [ref=e16]: - - link "About" [ref=e17] [cursor=pointer]: - - /url: /about - - list [ref=e18]: - - listitem [ref=e19]: - - link "Discord" [ref=e20] [cursor=pointer]: - - /url: "#" - - img [ref=e21] [cursor=pointer] - - link "GitHub" [ref=e23] [cursor=pointer]: - - /url: https://github.com/vinakey/vinakey2 - - img [ref=e24] [cursor=pointer] - - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: - - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] - - img [ref=e30] [cursor=pointer] - - listitem - - main [ref=e32]: - - generic [ref=e33]: - - generic [ref=e34]: - - generic [ref=e35]: VinaKey - - generic [ref=e36]: "2" - - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor - - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí - - generic [ref=e40]: - - generic [ref=e41]: - - generic [ref=e42]: - - generic [ref=e43]: - - heading "VinaKey 2 Editor" [level=2] [ref=e44] - - paragraph [ref=e45]: Vietnamese typing with markdown support - - generic [ref=e46]: - - button "Load Sample" [ref=e47] [cursor=pointer] - - button "Copy Text" [disabled] [ref=e48] [cursor=pointer] - - button "Clear" [ref=e49] [cursor=pointer] - - separator [ref=e50] - - generic [ref=e51]: - - generic [ref=e52]: - - generic [ref=e53]: "Vietnamese Input:" - - button "ON" [ref=e54] [cursor=pointer] - - generic [ref=e55]: - - button "AUTO" [ref=e56] [cursor=pointer] - - button "TELEX" [ref=e57] [cursor=pointer] - - button "VNI" [ref=e58] [cursor=pointer] - - button "VIQR" [ref=e59] [cursor=pointer] - - generic [ref=e62]: - - toolbar "Text formatting" [ref=e63]: - - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: - - img [ref=e65] [cursor=pointer] - - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: - - img [ref=e69] [cursor=pointer] - - separator [ref=e71] - - button "Heading 1" [ref=e72] [cursor=pointer]: - - img [ref=e73] [cursor=pointer] - - button "Heading 2" [ref=e75] [cursor=pointer]: - - img [ref=e76] [cursor=pointer] - - button "Heading 3" [ref=e78] [cursor=pointer]: - - img [ref=e79] [cursor=pointer] - - separator [ref=e81] - - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: - - img [ref=e83] [cursor=pointer] - - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': - - img [ref=e88] [cursor=pointer] - - separator [ref=e92] - - button "Quote" [ref=e93] [cursor=pointer]: - - img [ref=e94] [cursor=pointer] - - separator [ref=e97] - - button "Bullet List" [ref=e98] [cursor=pointer]: - - img [ref=e99] [cursor=pointer] - - button "Numbered List" [ref=e100] [cursor=pointer]: - - img [ref=e101] [cursor=pointer] - - button "Task List" [ref=e105] [cursor=pointer]: - - img [ref=e106] [cursor=pointer] - - separator [ref=e110] - - button "View mode" [ref=e111] [cursor=pointer]: - - img [ref=e112] [cursor=pointer] - - textbox "Bắt đầu viết markdown với tiếng Việt..." [ref=e116] - - generic [ref=e117]: - - paragraph [ref=e118]: - - strong [ref=e119]: "Tính năng chính:" - - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. - - paragraph [ref=e120]: - - strong [ref=e121]: "Hướng dẫn:" - - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. - - contentinfo [ref=e122]: - - link "Powered by HeroUI" [ref=e123] [cursor=pointer]: - - /url: https://heroui.com - - generic [ref=e124] [cursor=pointer]: Powered by - - paragraph [ref=e125] [cursor=pointer]: HeroUI -``` \ No newline at end of file diff --git a/test-results/working-dark-theme-OverTyp-f2b15--differences-between-themes-chromium/error-context.md b/test-results/working-dark-theme-OverTyp-f2b15--differences-between-themes-chromium/error-context.md deleted file mode 100644 index 37d5766..0000000 --- a/test-results/working-dark-theme-OverTyp-f2b15--differences-between-themes-chromium/error-context.md +++ /dev/null @@ -1,207 +0,0 @@ -# Page snapshot - -```yaml -- generic [ref=e4]: - - navigation [ref=e5]: - - generic [ref=e6]: - - list [ref=e7]: - - link "VinaKey 2" [ref=e9] [cursor=pointer]: - - /url: / - - img [ref=e10] [cursor=pointer] - - paragraph [ref=e12] [cursor=pointer]: VinaKey 2 - - generic [ref=e13]: - - listitem [ref=e14]: - - link "Editor" [ref=e15] [cursor=pointer]: - - /url: / - - listitem [ref=e16]: - - link "About" [ref=e17] [cursor=pointer]: - - /url: /about - - list [ref=e18]: - - listitem [ref=e19]: - - link "Discord" [ref=e20] [cursor=pointer]: - - /url: "#" - - img [ref=e21] [cursor=pointer] - - link "GitHub" [ref=e23] [cursor=pointer]: - - /url: https://github.com/vinakey/vinakey2 - - img [ref=e24] [cursor=pointer] - - generic "Switch to dark mode" [ref=e26] [cursor=pointer]: - - switch "Switch to dark mode" [checked] [ref=e28] [cursor=pointer] - - img [ref=e30] [cursor=pointer] - - listitem - - main [ref=e32]: - - generic [ref=e33]: - - generic [ref=e34]: - - generic [ref=e35]: VinaKey - - generic [ref=e36]: "2" - - generic [ref=e37]: Modern Vietnamese Input & Markdown Editor - - generic [ref=e38]: Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn miễn phí - - generic [ref=e40]: - - generic [ref=e41]: - - generic [ref=e42]: - - generic [ref=e43]: - - heading "VinaKey 2 Editor" [level=2] [ref=e44] - - paragraph [ref=e45]: Vietnamese typing with markdown support - - generic [ref=e46]: - - button "Load Sample" [active] [ref=e47] [cursor=pointer] - - button "Copy Text" [ref=e48] [cursor=pointer] - - button "Clear" [ref=e49] [cursor=pointer] - - separator [ref=e50] - - generic [ref=e51]: - - generic [ref=e52]: - - generic [ref=e53]: "Vietnamese Input:" - - button "ON" [ref=e54] [cursor=pointer] - - generic [ref=e55]: - - button "AUTO" [ref=e56] [cursor=pointer] - - button "TELEX" [ref=e57] [cursor=pointer] - - button "VNI" [ref=e58] [cursor=pointer] - - button "VIQR" [ref=e59] [cursor=pointer] - - generic [ref=e60]: - - generic [ref=e62]: - - toolbar "Text formatting" [ref=e63]: - - button "Bold (Ctrl+B)" [ref=e64] [cursor=pointer]: - - img [ref=e65] [cursor=pointer] - - button "Italic (Ctrl+I)" [ref=e68] [cursor=pointer]: - - img [ref=e69] [cursor=pointer] - - separator [ref=e71] - - button "Heading 1" [ref=e72] [cursor=pointer]: - - img [ref=e73] [cursor=pointer] - - button "Heading 2" [ref=e75] [cursor=pointer]: - - img [ref=e76] [cursor=pointer] - - button "Heading 3" [ref=e78] [cursor=pointer]: - - img [ref=e79] [cursor=pointer] - - separator [ref=e81] - - button "Insert Link (Ctrl+K)" [ref=e82] [cursor=pointer]: - - img [ref=e83] [cursor=pointer] - - 'button "Code (Ctrl+`)" [ref=e87] [cursor=pointer]': - - img [ref=e88] [cursor=pointer] - - separator [ref=e92] - - button "Quote" [ref=e93] [cursor=pointer]: - - img [ref=e94] [cursor=pointer] - - separator [ref=e97] - - button "Bullet List" [ref=e98] [cursor=pointer]: - - img [ref=e99] [cursor=pointer] - - button "Numbered List" [ref=e100] [cursor=pointer]: - - img [ref=e101] [cursor=pointer] - - button "Task List" [ref=e105] [cursor=pointer]: - - img [ref=e106] [cursor=pointer] - - separator [ref=e110] - - button "View mode" [ref=e111] [cursor=pointer]: - - img [ref=e112] [cursor=pointer] - - generic [ref=e115]: - - textbox "Bắt đầu viết markdown với tiếng Việt..." [ref=e116]: "# Chào mừng đến với VinaKey 2 ## Tính năng chính - **Gõ tiếng Việt**: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR) - **Markdown Editor**: Soạn thảo markdown với giao diện WYSIWYG - **Toolbar**: Các công cụ định dạng tiện lợi - **Responsive**: Tương thích với mobile và desktop ## Hướng dẫn sử dụng 1. Chọn kiểu gõ tiếng Việt từ các nút bên trên 2. Bắt đầu viết nội dung markdown 3. Sử dụng toolbar để định dạng nhanh 4. Bấm nút \"Copy\" để sao chép nội dung ### Ví dụ văn bản > \"Có công mài sắt có ngày nên kim\" **Danh sách công việc:** - [x] Tích hợp Vietnamese input - [x] Tích hợp Overtype editor - [ ] Thêm tính năng export - [ ] Thêm themes ```javascript // Code example const vietnameseText = \"Xin chào thế giới!\"; console.log(vietnameseText); ``` --- *Tạo bởi [VinaKey](https://github.com/vinakey/vinakey2) - công cụ gõ tiếng Việt hiện đại.*" - - generic: - - generic: - - heading [level=1]: - - generic: "#" - - text: Chào mừng đến với VinaKey 2 - - generic: - - heading [level=2]: - - generic: "##" - - text: Tính năng chính - - list: - - listitem: - - generic: "-" - - strong: - - generic: "**" - - text: Gõ tiếng Việt - - generic: "**" - - text: ": Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR)" - - listitem: - - generic: "-" - - strong: - - generic: "**" - - text: Markdown Editor - - generic: "**" - - text: ": Soạn thảo markdown với giao diện WYSIWYG" - - listitem: - - generic: "-" - - strong: - - generic: "**" - - text: Toolbar - - generic: "**" - - text: ": Các công cụ định dạng tiện lợi" - - listitem: - - generic: "-" - - strong: - - generic: "**" - - text: Responsive - - generic: "**" - - text: ": Tương thích với mobile và desktop" - - generic: - - heading [level=2]: - - generic: "##" - - text: Hướng dẫn sử dụng - - list: - - listitem: - - generic: "1." - - text: Chọn kiểu gõ tiếng Việt từ các nút bên trên - - listitem: - - generic: "2." - - text: Bắt đầu viết nội dung markdown - - listitem: - - generic: "3." - - text: Sử dụng toolbar để định dạng nhanh - - listitem: - - generic: "4." - - text: Bấm nút "Copy" để sao chép nội dung - - generic: - - heading [level=3]: - - generic: "###" - - text: Ví dụ văn bản - - generic: - - generic: - - generic: ">" - - text: "\"Có công mài sắt có ngày nên kim\"" - - generic: - - strong: - - generic: "**" - - text: "Danh sách công việc:" - - generic: "**" - - list: - - listitem: - - generic: "-" - - text: "[x] Tích hợp Vietnamese input" - - listitem: - - generic: "-" - - text: "[x] Tích hợp Overtype editor" - - listitem: - - generic: "-" - - text: "[ ] Thêm tính năng export" - - listitem: - - generic: "-" - - text: "[ ] Thêm themes" - - generic: - - generic: "```javascript" - - generic: - - code: // Code example const vietnameseText = "Xin chào thế giới!"; console.log(vietnameseText); - - generic: - - generic: "```" - - generic: - - generic: "---" - - generic: - - emphasis: - - generic: "*" - - text: Tạo bởi - - link: - - /url: https://github.com/vinakey/vinakey2 - - generic: "[" - - text: VinaKey - - generic: "](https://github.com/vinakey/vinakey2)" - - text: "- công cụ gõ tiếng Việt hiện đại." - - generic: "*" - - generic [ref=e117]: - - generic [ref=e118]: "Characters: 866 | Words: 160" - - generic [ref=e119]: "Method: AUTO ✓" - - generic [ref=e120]: - - paragraph [ref=e121]: - - strong [ref=e122]: "Tính năng chính:" - - text: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và tương thích hoàn toàn với mobile. - - paragraph [ref=e123]: - - strong [ref=e124]: "Hướng dẫn:" - - text: Chọn kiểu gõ từ thanh công cụ, bắt đầu viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi hoàn thành. - - contentinfo [ref=e125]: - - link "Powered by HeroUI" [ref=e126] [cursor=pointer]: - - /url: https://heroui.com - - generic [ref=e127] [cursor=pointer]: Powered by - - paragraph [ref=e128] [cursor=pointer]: HeroUI -``` \ No newline at end of file From fcdf096022ca83f891fcaab47533abba24a698a1 Mon Sep 17 00:00:00 2001 From: Alan Nguyen Date: Mon, 25 Aug 2025 23:37:37 +0700 Subject: [PATCH 3/4] Consolidate UI controls and implement smart onboarding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Consolidate all control buttons into single row within one card - Move OverType editor into same card as controls for unified interface - Vietnamese input methods (OFF, AUTO, TELEX, VNI, VIQR) on left side - Action buttons (Copy, Clear) on right side with spacer between - Remove Load Sample button - replaced with automatic sample content - Implement first-visit detection for smart onboarding experience - Auto-load sample content for new users using localStorage tracking - Use HeroUI Card components for consistent modern design - Apply custom orange theme to OverType editor matching app theme - Ensure responsive single-row layout with horizontal scroll on mobile 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- package.json | 2 + src/components/editor.tsx | 240 +++++++++++++++++--------------------- src/components/navbar.tsx | 95 ++------------- src/layouts/default.tsx | 17 +-- src/pages/index.tsx | 120 +++++++++++++++---- src/styles/globals.css | 13 ++- tailwind.config.js | 41 ++++++- yarn.lock | 206 +++++++++++++++++++++++++++++++- 8 files changed, 468 insertions(+), 266 deletions(-) diff --git a/package.json b/package.json index 3031d16..1b18fe4 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "@heroui/button": "^2.2.24", + "@heroui/card": "^2.2.23", "@heroui/code": "^2.2.18", "@heroui/dropdown": "^2.3.24", "@heroui/input": "^2.4.25", @@ -20,6 +21,7 @@ "@heroui/snippet": "^2.2.25", "@heroui/switch": "^2.2.22", "@heroui/system": "^2.4.20", + "@heroui/table": "^2.2.24", "@heroui/theme": "^2.4.20", "@heroui/use-theme": "2.1.10", "@react-aria/visually-hidden": "3.8.26", diff --git a/src/components/editor.tsx b/src/components/editor.tsx index cd2cea6..0433f94 100644 --- a/src/components/editor.tsx +++ b/src/components/editor.tsx @@ -1,5 +1,6 @@ import { useEffect, useRef, useState } from "react"; import { Button } from "@heroui/button"; +import { Card, CardBody } from "@heroui/card"; import { useTheme } from "@heroui/use-theme"; import { vietnameseInput, InputMethod } from "@/utils/vietnamese-input"; @@ -31,6 +32,32 @@ export default function Editor({ const [editorInstance, setEditorInstance] = useState(null); const [content, setContent] = useState(initialContent); const { theme } = useTheme(); + + // Check if user is visiting for the first time + const isFirstVisit = !localStorage.getItem("vinakey2-visited"); + + // Modern and elegant custom theme configuration + const customTheme = { + name: 'vinakey-modern', + colors: { + bgPrimary: theme === 'dark' ? '#0f0f23' : '#fefefe', + bgSecondary: theme === 'dark' ? '#1a1a2e' : '#f8fafc', + text: theme === 'dark' ? '#e2e8f0' : '#1e293b', + h1: theme === 'dark' ? '#f97316' : '#f97316', // Orange primary for both themes + h2: theme === 'dark' ? '#fb923c' : '#ea580c', // Orange variants + h3: theme === 'dark' ? '#fdba74' : '#c2410c', + strong: theme === 'dark' ? '#fb923c' : '#ea580c', + em: theme === 'dark' ? '#f97316' : '#f97316', + link: theme === 'dark' ? '#60a5fa' : '#2563eb', // Modern blue + code: theme === 'dark' ? '#a78bfa' : '#7c3aed', // Modern purple + codeBg: theme === 'dark' ? 'rgba(167, 139, 250, 0.1)' : 'rgba(249, 115, 22, 0.1)', + blockquote: theme === 'dark' ? '#64748b' : '#475569', // Modern gray + hr: theme === 'dark' ? '#374151' : '#d1d5db', + syntaxMarker: theme === 'dark' ? 'rgba(226, 232, 240, 0.4)' : 'rgba(30, 41, 59, 0.4)', + cursor: '#f97316', // Orange cursor for both themes + selection: theme === 'dark' ? 'rgba(249, 115, 22, 0.3)' : 'rgba(249, 115, 22, 0.2)' + } + }; useEffect(() => { const initializeEditor = () => { @@ -39,15 +66,26 @@ export default function Editor({ // Initialize OverType editor using the default export const OverTypeClass = (window.OverType as any).default || window.OverType; + const sampleContent = `# Chào mừng đến với VinKey! + +## Hướng dẫn sử dụng + +1. **Chọn kiểu gõ**: OFF, AUTO, TELEX, VNI, hoặc VIQR +2. **Bắt đầu gõ**: Thử gõ "xin chao" hoặc "cam on ban" +3. **Sử dụng markdown**: **in đậm**, *in nghiêng*, [liên kết](https://example.com) +4. **Xóa nội dung này** và bắt đầu viết! + +> **Ví dụ**: Hãy thử gõ "Toi yeu Viet Nam" với TELEX!`; + const instances = new OverTypeClass(editorRef.current, { - value: initialContent, + value: isFirstVisit ? sampleContent : initialContent, placeholder: "Bắt đầu viết markdown với tiếng Việt...", toolbar: true, - theme: theme === "dark" ? "cave" : "solar", + theme: customTheme, fontSize: "16px", - padding: "20px", + padding: "24px", autoResize: true, - minHeight: "400px", + minHeight: "500px", onChange: (value: string) => { setContent(value); onContentChange?.(value); @@ -56,9 +94,14 @@ export default function Editor({ if (instances && instances.length > 0) { const instance = instances[0]; - setEditorInstance(instance); + // Mark user as visited and set initial content + if (isFirstVisit) { + localStorage.setItem("vinakey2-visited", "true"); + setContent(sampleContent); + } + // Get the textarea element from OverType and attach Vietnamese input setTimeout(() => { const textarea = editorRef.current?.querySelector("textarea"); @@ -71,7 +114,7 @@ export default function Editor({ "❌ No textarea found after OverType initialization", ); } - }, 500); // Increased timeout + }, 500); return () => { const textarea = editorRef.current?.querySelector("textarea"); @@ -111,20 +154,20 @@ export default function Editor({ // Handle theme changes for OverType editor useEffect(() => { - if (window.OverType) { - const overtypeTheme = theme === "dark" ? "cave" : "solar"; + if (window.OverType && editorInstance) { const OverTypeClass = (window.OverType as any).default || window.OverType; // Use static method to change theme globally - OverTypeClass.setTheme(overtypeTheme); + OverTypeClass.setTheme(customTheme); } - }, [theme]); + }, [theme, editorInstance]); const handleMethodChange = (method: InputMethod) => { setInputMethod(method); }; - const handleToggleVietnamese = () => { - setIsVietnameseEnabled(!isVietnameseEnabled); + const handleOffClick = () => { + setIsVietnameseEnabled(false); + setInputMethod("AUTO"); // Reset to AUTO when turning off }; const handleClear = () => { @@ -134,48 +177,6 @@ export default function Editor({ } }; - const handleSampleText = () => { - const sampleText = `# Chào mừng đến với VinaKey 2 - -## Tính năng chính - -- **Gõ tiếng Việt**: Hỗ trợ các kiểu gõ phổ biến (AUTO, TELEX, VNI, VIQR) -- **Markdown Editor**: Soạn thảo markdown với giao diện WYSIWYG -- **Toolbar**: Các công cụ định dạng tiện lợi -- **Responsive**: Tương thích với mobile và desktop - -## Hướng dẫn sử dụng - -1. Chọn kiểu gõ tiếng Việt từ các nút bên trên -2. Bắt đầu viết nội dung markdown -3. Sử dụng toolbar để định dạng nhanh -4. Bấm nút "Copy" để sao chép nội dung - -### Ví dụ văn bản - -> "Có công mài sắt có ngày nên kim" - -**Danh sách công việc:** -- [x] Tích hợp Vietnamese input -- [x] Tích hợp Overtype editor -- [ ] Thêm tính năng export -- [ ] Thêm themes - -\`\`\`javascript -// Code example -const vietnameseText = "Xin chào thế giới!"; -console.log(vietnameseText); -\`\`\` - ---- - -*Tạo bởi [VinaKey](https://github.com/vinakey/vinakey2) - công cụ gõ tiếng Việt hiện đại.*`; - - if (editorInstance) { - editorInstance.setValue(sampleText); - setContent(sampleText); - } - }; const handleCopy = async () => { if (content) { @@ -190,105 +191,74 @@ console.log(vietnameseText); }; return ( -
-
-
-
-

- VinaKey 2 Editor -

-

- Vietnamese typing with markdown support -

-
- -
+
+ {/* Consolidated card with controls and editor */} +
+ + {/* Control bar at the top */} + - + {(["AUTO", "TELEX", "VNI", "VIQR"] as InputMethod[]).map( + (method) => ( + + ), + )} + + {/* Spacer to push action buttons to the right */} +
+ - -
-
- -
- -
-
- - Vietnamese Input: - - -
- -
- {(["AUTO", "TELEX", "VNI", "VIQR"] as InputMethod[]).map( - (method) => ( - - ), - )} -
-
-
- -
-
- - {content && ( -
- - Characters: {content.length} | Words:{" "} - {content.split(/\s+/).filter(Boolean).length} - - - Method: {inputMethod} {isVietnameseEnabled ? "✓" : "✗"} - -
- )} + + + {/* Editor container */} +
+
); -} +} \ No newline at end of file diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index 8d159fd..145283c 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -1,98 +1,17 @@ import { Link } from "@heroui/link"; -import { - Navbar as HeroUINavbar, - NavbarBrand, - NavbarContent, - NavbarItem, - NavbarMenuToggle, - NavbarMenu, - NavbarMenuItem, -} from "@heroui/navbar"; -import { link as linkStyles } from "@heroui/theme"; -import clsx from "clsx"; -import { siteConfig } from "@/config/site"; import { ThemeSwitch } from "@/components/theme-switch"; -import { GithubIcon, DiscordIcon } from "@/components/icons"; -import { Logo } from "@/components/icons"; +import { GithubIcon } from "@/components/icons"; export const Navbar = () => { return ( - - - - - -

VinaKey 2

- -
-
- {siteConfig.navItems.map((item) => ( - - - {item.label} - - - ))} -
-
- - - - - - - - - - - - - - - - - + ); }; diff --git a/src/layouts/default.tsx b/src/layouts/default.tsx index 4b12dee..eaad653 100644 --- a/src/layouts/default.tsx +++ b/src/layouts/default.tsx @@ -1,5 +1,3 @@ -import { Link } from "@heroui/link"; - import { Navbar } from "@/components/navbar"; export default function DefaultLayout({ @@ -8,22 +6,11 @@ export default function DefaultLayout({ children: React.ReactNode; }) { return ( -
+
-
+
{children}
-
- - Powered by -

HeroUI

- -
); } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 3b84b5d..7a9dda1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,25 +1,25 @@ -import { title, subtitle } from "@/components/primitives"; import DefaultLayout from "@/layouts/default"; import Editor from "@/components/editor"; +import { Card, CardBody, CardHeader } from "@heroui/card"; +import { Table, TableHeader, TableColumn, TableBody, TableRow, TableCell } from "@heroui/table"; export default function IndexPage() { return ( -
-
- VinaKey  - -
- - Modern Vietnamese Input & Markdown Editor - -
- Gõ tiếng Việt và soạn thảo markdown dễ dàng, nhanh chóng - hoàn toàn - miễn phí -
+
+ {/* Simplified minimal title */} +
+

+ Vin + Key +

+

+ Vietnamese markdown editor +

-
+ {/* Main editor component */} +
{ @@ -29,17 +29,87 @@ export default function IndexPage() { />
-
-

- Tính năng chính: Hỗ trợ các kiểu gõ phổ biến (AUTO, - TELEX, VNI, VIQR), editor markdown với WYSIWYG, toolbar tiện lợi, và - tương thích hoàn toàn với mobile. -

-

- Hướng dẫn: Chọn kiểu gõ từ thanh công cụ, bắt đầu - viết nội dung, sử dụng toolbar để định dạng, và sao chép kết quả khi - hoàn thành. -

+ {/* Input method reference tables */} +
+ {/* Tone marks reference table */} + + +

Bảng dấu thanh

+
+ + + + KIỂU GÕ + Sắc + Huyền + Hỏi + Ngã + Nặng + + + + TELEX + s + f + r + x + j + + + VNI + 1 + 2 + 3 + 4 + 5 + + + VIQR + ' + ` + ? + ~ + . + + +
+
+
+ + {/* Sentence example table */} + + +

Câu ví dụ: Học gõ tiếng Việt thật dễ dàng

+
+ + + + KIỂU GÕ + CÁCH GÕ + + + + TELEX + Hocj gox tieesng Vieetj thaatj deer daafng + + + VIQR + Ho.c go~ tie^'ng Vie^.t tha^.t de^~ da~ng + + + VNI + Ho5c go6 tie61ng Vie65t tha65t de65 da4ng + + +
+
+
diff --git a/src/styles/globals.css b/src/styles/globals.css index e012273..2435d58 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,3 +1,14 @@ @import "tailwindcss"; -@config "../../tailwind.config.js" \ No newline at end of file +@config "../../tailwind.config.js"; + +/* OverType border radius styling */ +.ot-container { + border-radius: 0.75rem !important; /* rounded-xl */ + overflow: hidden !important; +} + +.ot-textarea, +.ot-preview { + border-radius: 0.75rem !important; +} \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js index db470c4..dfa369d 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -13,5 +13,44 @@ export default { extend: {}, }, darkMode: "class", - plugins: [heroui()], + plugins: [heroui({ + themes: { + light: { + colors: { + primary: { + 50: "#fff7ed", + 100: "#ffedd5", + 200: "#fed7aa", + 300: "#fdba74", + 400: "#fb923c", + 500: "#f97316", // Orange-500 as main + 600: "#ea580c", + 700: "#c2410c", + 800: "#9a3412", + 900: "#7c2d12", + DEFAULT: "#f97316", + foreground: "#ffffff" + } + } + }, + dark: { + colors: { + primary: { + 50: "#fff7ed", + 100: "#ffedd5", + 200: "#fed7aa", + 300: "#fdba74", + 400: "#fb923c", + 500: "#f97316", + 600: "#ea580c", + 700: "#c2410c", + 800: "#9a3412", + 900: "#7c2d12", + DEFAULT: "#f97316", + foreground: "#ffffff" + } + } + } + } + })], } diff --git a/yarn.lock b/yarn.lock index 4c152dc..6fd6d65 100644 --- a/yarn.lock +++ b/yarn.lock @@ -462,6 +462,37 @@ "@react-aria/interactions" "3.25.4" "@react-types/shared" "3.31.0" +"@heroui/card@^2.2.23": + version "2.2.23" + resolved "https://registry.yarnpkg.com/@heroui/card/-/card-2.2.23.tgz#fd216d045a6c18d161ea73ebb3a0bc06c5e77863" + integrity sha512-oMmZNr2/mGp/S+Ct8iyzAp4H+tLuT3G0dgHyRie7txj8en79RAy+yRPBYdSt3OpIWM/Zv9un3Dnxgmi/UGCo+A== + dependencies: + "@heroui/react-utils" "2.1.12" + "@heroui/ripple" "2.2.18" + "@heroui/shared-utils" "2.1.10" + "@heroui/use-aria-button" "2.2.18" + "@react-aria/focus" "3.21.0" + "@react-aria/interactions" "3.25.4" + "@react-types/shared" "3.31.0" + +"@heroui/checkbox@2.3.24": + version "2.3.24" + resolved "https://registry.yarnpkg.com/@heroui/checkbox/-/checkbox-2.3.24.tgz#07b1a6ad93c5be7951b9568d375dbd9dfbd0cfa3" + integrity sha512-H/bcpYGeWB9WFhkkOPojO4ONrz5GIMzfAMYdaKOUFtLVl7B9yVca7HaKdNryAFtNSBd/QQAm/an7gh/OFxIgew== + dependencies: + "@heroui/form" "2.1.24" + "@heroui/react-utils" "2.1.12" + "@heroui/shared-utils" "2.1.10" + "@heroui/use-callback-ref" "2.1.8" + "@heroui/use-safe-layout-effect" "2.1.8" + "@react-aria/checkbox" "3.16.0" + "@react-aria/focus" "3.21.0" + "@react-aria/interactions" "3.25.4" + "@react-stately/checkbox" "3.7.0" + "@react-stately/toggle" "3.9.0" + "@react-types/checkbox" "3.10.0" + "@react-types/shared" "3.31.0" + "@heroui/code@^2.2.18": version "2.2.18" resolved "https://registry.yarnpkg.com/@heroui/code/-/code-2.2.18.tgz#4d9156b7e6079f27bbbcde2a63cefdfdcf657b70" @@ -658,6 +689,15 @@ "@heroui/use-clipboard" "2.1.9" "@react-aria/focus" "3.21.0" +"@heroui/spacer@2.2.18": + version "2.2.18" + resolved "https://registry.yarnpkg.com/@heroui/spacer/-/spacer-2.2.18.tgz#d52dcda4b1f22d89ae5d9d4fe17dec34f7e3d3fd" + integrity sha512-EHUIyWt2w0viR7oSqhbZPP4fHuILOdcq7ejAhid7rqhsJSjfixQQ/V4OY7D8vpzi7KmlyrkfpkjAZqAApiEbuA== + dependencies: + "@heroui/react-utils" "2.1.12" + "@heroui/shared-utils" "2.1.10" + "@heroui/system-rsc" "2.3.17" + "@heroui/spinner@2.2.21": version "2.2.21" resolved "https://registry.yarnpkg.com/@heroui/spinner/-/spinner-2.2.21.tgz#ae14523d114764d046d119a9594e5af4be42b73e" @@ -700,6 +740,26 @@ "@react-aria/overlays" "3.28.0" "@react-aria/utils" "3.30.0" +"@heroui/table@^2.2.24": + version "2.2.24" + resolved "https://registry.yarnpkg.com/@heroui/table/-/table-2.2.24.tgz#6dfad181fc25026125c40d00e48f18fa76623b75" + integrity sha512-R3jsgmqGqVAI5rxy0MbcL2lOZwJSbaHSDBEPtDj1UCrPlQC7O+VhKMC9D3I0MaX+bCVDfm0wMYmu5mNjmXGXnQ== + dependencies: + "@heroui/checkbox" "2.3.24" + "@heroui/react-utils" "2.1.12" + "@heroui/shared-icons" "2.1.10" + "@heroui/shared-utils" "2.1.10" + "@heroui/spacer" "2.2.18" + "@react-aria/focus" "3.21.0" + "@react-aria/interactions" "3.25.4" + "@react-aria/table" "3.17.6" + "@react-aria/visually-hidden" "3.8.26" + "@react-stately/table" "3.14.4" + "@react-stately/virtualizer" "4.4.2" + "@react-types/grid" "3.3.4" + "@react-types/table" "3.13.2" + "@tanstack/react-virtual" "3.11.3" + "@heroui/theme@2.4.20", "@heroui/theme@^2.4.20": version "2.4.20" resolved "https://registry.yarnpkg.com/@heroui/theme/-/theme-2.4.20.tgz#bb3bba0fd308be70c98942d730df871cd5b2d33d" @@ -764,6 +824,13 @@ "@react-aria/overlays" "3.28.0" "@react-types/shared" "3.31.0" +"@heroui/use-callback-ref@2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@heroui/use-callback-ref/-/use-callback-ref-2.1.8.tgz#c586a609949b7bb2e358f4458998dfc242e0fc84" + integrity sha512-D1JDo9YyFAprYpLID97xxQvf86NvyWLay30BeVVZT9kWmar6O9MbCRc7ACi7Ngko60beonj6+amTWkTm7QuY/Q== + dependencies: + "@heroui/use-safe-layout-effect" "2.1.8" + "@heroui/use-clipboard@2.1.9": version "2.1.9" resolved "https://registry.yarnpkg.com/@heroui/use-clipboard/-/use-clipboard-2.1.9.tgz#09654698b929560f8dd68d2d87cfaa37ffa0ea55" @@ -946,6 +1013,23 @@ "@react-types/shared" "^3.31.0" "@swc/helpers" "^0.5.0" +"@react-aria/checkbox@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.16.0.tgz#775b3c0bde40bcfa8ab28439ba896088ba489d1b" + integrity sha512-XPaMz1/iVBG6EbJOPYlNtvr+q4f0axJeoIvyzWW3ciIdDSX/3jYuFg/sv/b3OQQl389cbQ/WUBQyWre/uXWVEg== + dependencies: + "@react-aria/form" "^3.1.0" + "@react-aria/interactions" "^3.25.4" + "@react-aria/label" "^3.7.20" + "@react-aria/toggle" "^3.12.0" + "@react-aria/utils" "^3.30.0" + "@react-stately/checkbox" "^3.7.0" + "@react-stately/form" "^3.2.0" + "@react-stately/toggle" "^3.9.0" + "@react-types/checkbox" "^3.10.0" + "@react-types/shared" "^3.31.0" + "@swc/helpers" "^0.5.0" + "@react-aria/dialog@3.5.28": version "3.5.28" resolved "https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.5.28.tgz#0cc8dcec8399d17baa65f4a325e65c3a93f0a5e1" @@ -980,6 +1064,25 @@ "@react-types/shared" "^3.31.0" "@swc/helpers" "^0.5.0" +"@react-aria/grid@^3.14.3": + version "3.14.3" + resolved "https://registry.yarnpkg.com/@react-aria/grid/-/grid-3.14.3.tgz#660a54b78e3c0b75d5330752c21de8b2f69a1133" + integrity sha512-O4Ius5tJqKcMGfQT6IXD4MnEOeq6f/59nKmfCLTXMREFac/oxafqanUx3zrEVYbaqLOjEmONcd8S61ptQM6aPg== + dependencies: + "@react-aria/focus" "^3.21.0" + "@react-aria/i18n" "^3.12.11" + "@react-aria/interactions" "^3.25.4" + "@react-aria/live-announcer" "^3.4.4" + "@react-aria/selection" "^3.25.0" + "@react-aria/utils" "^3.30.0" + "@react-stately/collections" "^3.12.6" + "@react-stately/grid" "^3.11.4" + "@react-stately/selection" "^3.20.4" + "@react-types/checkbox" "^3.10.0" + "@react-types/grid" "^3.3.4" + "@react-types/shared" "^3.31.0" + "@swc/helpers" "^0.5.0" + "@react-aria/i18n@3.12.11", "@react-aria/i18n@^3.12.11": version "3.12.11" resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.12.11.tgz#839b98baf8b298ccc76b98c5d3ba3a889f61baf7" @@ -1014,6 +1117,13 @@ "@react-types/shared" "^3.31.0" "@swc/helpers" "^0.5.0" +"@react-aria/live-announcer@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@react-aria/live-announcer/-/live-announcer-3.4.4.tgz#0e6533940222208b323b71d56ac8e115b2121e6a" + integrity sha512-PTTBIjNRnrdJOIRTDGNifY2d//kA7GUAwRFJNOEwSNG4FW+Bq9awqLiflw0JkpyB0VNIwou6lqKPHZVLsGWOXA== + dependencies: + "@swc/helpers" "^0.5.0" + "@react-aria/menu@3.19.0": version "3.19.0" resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.19.0.tgz#a53d5506545131fbfa4e6848eb7b4fdadec69947" @@ -1082,6 +1192,27 @@ "@react-types/switch" "^3.5.13" "@swc/helpers" "^0.5.0" +"@react-aria/table@3.17.6": + version "3.17.6" + resolved "https://registry.yarnpkg.com/@react-aria/table/-/table-3.17.6.tgz#dc2d645112434371cb50b1a9bcfbfb00f0a49a49" + integrity sha512-PSEaeKOIazVEaykeTLudPbDLytJgOPLZJalS/xXY0/KL+Gi0Olchmz4tvS0WBe87ChmlVi6GQqU+stk23aZVWg== + dependencies: + "@react-aria/focus" "^3.21.0" + "@react-aria/grid" "^3.14.3" + "@react-aria/i18n" "^3.12.11" + "@react-aria/interactions" "^3.25.4" + "@react-aria/live-announcer" "^3.4.4" + "@react-aria/utils" "^3.30.0" + "@react-aria/visually-hidden" "^3.8.26" + "@react-stately/collections" "^3.12.6" + "@react-stately/flags" "^3.1.2" + "@react-stately/table" "^3.14.4" + "@react-types/checkbox" "^3.10.0" + "@react-types/grid" "^3.3.4" + "@react-types/shared" "^3.31.0" + "@react-types/table" "^3.13.2" + "@swc/helpers" "^0.5.0" + "@react-aria/textfield@3.18.0": version "3.18.0" resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.18.0.tgz#fc5e4742559b53b8ec0a5037337743506a6c8071" @@ -1154,6 +1285,17 @@ "@react-types/shared" "^3.31.0" "@swc/helpers" "^0.5.0" +"@react-stately/checkbox@3.7.0", "@react-stately/checkbox@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.7.0.tgz#4464adc16148885a3a8e7fbdfb94eace75ee5887" + integrity sha512-opViVhNvxFVHjXhM4nA/E03uvbLazsIKloXX9JtyBCZAQRUag17dpmkekfIkHvP4o7z7AWFoibD8JBFV1IrMcQ== + dependencies: + "@react-stately/form" "^3.2.0" + "@react-stately/utils" "^3.10.8" + "@react-types/checkbox" "^3.10.0" + "@react-types/shared" "^3.31.0" + "@swc/helpers" "^0.5.0" + "@react-stately/collections@3.12.6", "@react-stately/collections@^3.12.6": version "3.12.6" resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.12.6.tgz#0d8b6d2744dd0c29d31842d39a112d30c27a4387" @@ -1177,6 +1319,17 @@ "@react-types/shared" "^3.31.0" "@swc/helpers" "^0.5.0" +"@react-stately/grid@^3.11.4": + version "3.11.4" + resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.11.4.tgz#ec5eac6a8641d175ebef0f57c666af2cb18dad1f" + integrity sha512-oaXFSk2eM0PJ0GVniGA0ZlTpAA0AL0O4MQ7V3cHqZAQbwSO0n2pT31GM0bSVnYP/qTF5lQHo3ECmRQCz0fVyMw== + dependencies: + "@react-stately/collections" "^3.12.6" + "@react-stately/selection" "^3.20.4" + "@react-types/grid" "^3.3.4" + "@react-types/shared" "^3.31.0" + "@swc/helpers" "^0.5.0" + "@react-stately/menu@3.9.6", "@react-stately/menu@^3.9.6": version "3.9.6" resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.9.6.tgz#5f478f2e2f4dedce30e935f95eae0251b5790e3f" @@ -1206,6 +1359,21 @@ "@react-types/shared" "^3.31.0" "@swc/helpers" "^0.5.0" +"@react-stately/table@3.14.4", "@react-stately/table@^3.14.4": + version "3.14.4" + resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.14.4.tgz#d12eb43bcdcebc0f6b07e26abc19f3330b8dd31a" + integrity sha512-uhwk8z3DemozD+yHBjSa4WyxKczpDkxhJhW7ZVOY+1jNuTYxc9/JxzPsHICrlDVV8EPWwwyMUz8eO/8rKN7DbA== + dependencies: + "@react-stately/collections" "^3.12.6" + "@react-stately/flags" "^3.1.2" + "@react-stately/grid" "^3.11.4" + "@react-stately/selection" "^3.20.4" + "@react-stately/utils" "^3.10.8" + "@react-types/grid" "^3.3.4" + "@react-types/shared" "^3.31.0" + "@react-types/table" "^3.13.2" + "@swc/helpers" "^0.5.0" + "@react-stately/toggle@3.9.0", "@react-stately/toggle@^3.9.0": version "3.9.0" resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.9.0.tgz#f32db5d0ad5cb382add52a77a9025ce3fdf10fd8" @@ -1243,6 +1411,15 @@ dependencies: "@swc/helpers" "^0.5.0" +"@react-stately/virtualizer@4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@react-stately/virtualizer/-/virtualizer-4.4.2.tgz#5b212d6cfc1a69ef86ff9d1137b92bf3b7215602" + integrity sha512-csU/Bbq1+JYCXlF3wKHa690EhV4/uuK5VwZZvi9jTMqjblDiNUwEmIcx78J8aoadjho5wgRw3ddE9NPDGcVElA== + dependencies: + "@react-aria/utils" "^3.30.0" + "@react-types/shared" "^3.31.0" + "@swc/helpers" "^0.5.0" + "@react-types/button@3.13.0", "@react-types/button@^3.13.0": version "3.13.0" resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.13.0.tgz#a92ce8faa26bb27c7b44480b20dd35d732eaec4a" @@ -1250,7 +1427,7 @@ dependencies: "@react-types/shared" "^3.31.0" -"@react-types/checkbox@^3.10.0": +"@react-types/checkbox@3.10.0", "@react-types/checkbox@^3.10.0": version "3.10.0" resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.10.0.tgz#999933ee1b81feea80d2d9f2d0685be248cb5127" integrity sha512-DJ84ilBDvZddE/Sul97Otee4M6psrPRaJm2a1Bc7M3Y5UKo6d6RGXdcDarRRpbnS7BeAbVanKiMS2ygI9QHh9g== @@ -1272,6 +1449,13 @@ dependencies: "@react-types/shared" "^3.31.0" +"@react-types/grid@3.3.4", "@react-types/grid@^3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.3.4.tgz#02f196995a585e650ab9a4d569e20635ba0ddb30" + integrity sha512-8XNn7Czhl+D1b2zRwdO8c3oBJmKgevT/viKJB4qBVFOhK0l/p3HYDZUMdeclvUfSt4wx4ASpI7MD3v1vmN54oA== + dependencies: + "@react-types/shared" "^3.31.0" + "@react-types/link@3.6.3": version "3.6.3" resolved "https://registry.yarnpkg.com/@react-types/link/-/link-3.6.3.tgz#ba223e8a2478c17d344dc286ac7a7a92dc1137d0" @@ -1306,6 +1490,14 @@ dependencies: "@react-types/shared" "^3.31.0" +"@react-types/table@3.13.2", "@react-types/table@^3.13.2": + version "3.13.2" + resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.13.2.tgz#c4becb119e1ecbe35be2ec9e9d198bbeedf120bd" + integrity sha512-3/BpFIWHXTcGgQEfip87gMNCWPtPNsc3gFkW4qtsevQ+V0577KyNyvQgvFrqMZKnvz3NWFKyshBb7PTevsus4Q== + dependencies: + "@react-types/grid" "^3.3.4" + "@react-types/shared" "^3.31.0" + "@react-types/textfield@3.12.4", "@react-types/textfield@^3.12.4": version "3.12.4" resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.12.4.tgz#f95c359c5fef4cd24abf7969d3c28de77c8e1ecf" @@ -1564,6 +1756,18 @@ "@tailwindcss/oxide" "4.1.11" tailwindcss "4.1.11" +"@tanstack/react-virtual@3.11.3": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.11.3.tgz#cd62ecc431043c4a9ca24ea8dfcc2a70f4805380" + integrity sha512-vCU+OTylXN3hdC8RKg68tPlBPjjxtzon7Ys46MgrSLE+JhSjSTPvoQifV6DQJeJmA8Q3KT6CphJbejupx85vFw== + dependencies: + "@tanstack/virtual-core" "3.11.3" + +"@tanstack/virtual-core@3.11.3": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.11.3.tgz#ab92ff899825e2d71fc9914dda2847a099d43862" + integrity sha512-v2mrNSnMwnPJtcVqNvV0c5roGCBqeogN8jDtgtuHCphdwBasOZ17x8UV8qpHUh+u0MLfX43c0uUHKje0s+Zb0w== + "@tybys/wasm-util@^0.10.0": version "0.10.0" resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.0.tgz#2fd3cd754b94b378734ce17058d0507c45c88369" From 74a49e3234c8bf75e8cb52111a6ff4e60c9542ba Mon Sep 17 00:00:00 2001 From: Alan Nguyen Date: Mon, 25 Aug 2025 23:49:52 +0700 Subject: [PATCH 4/4] Enhance UI layout and positioning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move VinKey title to top-left corner for symmetry with GitHub/theme icons - Increase editor card size (max-width to 6xl, min-height to 600px) - Make title italic for Vietnamese markdown editor subtitle - Implement responsive button layout for mobile devices - Vietnamese input buttons (OFF, AUTO, TELEX, VNI, VIQR) on first row - Copy/Clear buttons wrap to second row on small screens - Maintain single-row layout on larger screens with proper spacing 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/components/editor.tsx | 111 +++++++++++++++++++------------------- src/components/navbar.tsx | 32 ++++++++--- src/pages/index.tsx | 13 +---- 3 files changed, 82 insertions(+), 74 deletions(-) diff --git a/src/components/editor.tsx b/src/components/editor.tsx index 0433f94..ae5f539 100644 --- a/src/components/editor.tsx +++ b/src/components/editor.tsx @@ -85,7 +85,7 @@ export default function Editor({ fontSize: "16px", padding: "24px", autoResize: true, - minHeight: "500px", + minHeight: "600px", onChange: (value: string) => { setContent(value); onContentChange?.(value); @@ -191,69 +191,72 @@ export default function Editor({ }; return ( -
+
{/* Consolidated card with controls and editor */}
{/* Control bar at the top */} - - - {(["AUTO", "TELEX", "VNI", "VIQR"] as InputMethod[]).map( - (method) => ( - - ), - )} + + {/* First row: Vietnamese input controls */} +
+ + {(["AUTO", "TELEX", "VNI", "VIQR"] as InputMethod[]).map( + (method) => ( + + ), + )} +
- {/* Spacer to push action buttons to the right */} -
- - - + {/* Second row: Action buttons (hidden on small screens when in single row, shown on mobile) */} +
+ + +
{/* Editor container */}
diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index 145283c..b0d7967 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -5,13 +5,29 @@ import { GithubIcon } from "@/components/icons"; export const Navbar = () => { return ( - + <> + {/* Title on top-left */} + + + {/* Icons on top-right */} + + ); }; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7a9dda1..a8bbd71 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -6,18 +6,7 @@ import { Table, TableHeader, TableColumn, TableBody, TableRow, TableCell } from export default function IndexPage() { return ( -
- {/* Simplified minimal title */} -
-

- Vin - Key -

-

- Vietnamese markdown editor -

-
- +
{/* Main editor component */}