{
"issue": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"repository_url": "https://api.github.com/repos/laurent22/joplin",
"labels_url": "https://api.github.com/repos/laurent22/joplin/issues/14485/labels{/name}",
"comments_url": "https://api.github.com/repos/laurent22/joplin/issues/14485/comments",
"events_url": "https://api.github.com/repos/laurent22/joplin/issues/14485/events",
"html_url": "https://github.com/laurent22/joplin/pull/14485",
"id": 3998316267,
"node_id": "PR_kwDOBLftOs7Gr7Wz",
"number": 14485,
"title": "Mobile: Add toolbar button reordering with up/down arrows",
"user": {
"login": "Vpatel1093",
"id": 18127758,
"node_id": "MDQ6VXNlcjE4MTI3NzU4",
"avatar_url": "https://avatars.githubusercontent.com/u/18127758?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Vpatel1093",
"html_url": "https://github.com/Vpatel1093",
"followers_url": "https://api.github.com/users/Vpatel1093/followers",
"following_url": "https://api.github.com/users/Vpatel1093/following{/other_user}",
"gists_url": "https://api.github.com/users/Vpatel1093/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Vpatel1093/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Vpatel1093/subscriptions",
"organizations_url": "https://api.github.com/users/Vpatel1093/orgs",
"repos_url": "https://api.github.com/users/Vpatel1093/repos",
"events_url": "https://api.github.com/users/Vpatel1093/events{/privacy}",
"received_events_url": "https://api.github.com/users/Vpatel1093/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": [
{
"id": 1366672371,
"node_id": "MDU6TGFiZWwxMzY2NjcyMzcx",
"url": "https://api.github.com/repos/laurent22/joplin/labels/editor",
"name": "editor",
"color": "91ca55",
"default": false,
"description": ""
}
],
"state": "closed",
"locked": false,
"assignees": [],
"milestone": null,
"comments": 20,
"created_at": "2026-02-26T23:45:30Z",
"updated_at": "2026-04-04T15:23:43Z",
"closed_at": "2026-04-04T15:23:31Z",
"assignee": null,
"author_association": "CONTRIBUTOR",
"active_lock_reason": null,
"draft": false,
"pull_request": {
"url": "https://api.github.com/repos/laurent22/joplin/pulls/14485",
"html_url": "https://github.com/laurent22/joplin/pull/14485",
"diff_url": "https://github.com/laurent22/joplin/pull/14485.diff",
"patch_url": "https://github.com/laurent22/joplin/pull/14485.patch",
"merged_at": "2026-04-04T15:23:30Z"
},
"body": "## What this does\r\n\r\nAdds the ability to reorder enabled toolbar buttons in the mobile editor's toolbar settings dialog. Previously, users could only toggle buttons on/off but had no control over their order. Now, each enabled button has up/down arrow controls to change its position.\r\n\r\n## How it works\r\n\r\n- The toolbar editor dialog (`ToolbarEditorDialog.tsx`) is split into two sections: **enabled buttons** (with up/down arrows) and **available buttons** (disabled, below a divider)\r\n- A new `useToolbarEditorState` hook manages the reorder/toggle/reinitialize logic\r\n- Order is persisted immediately to `editor.toolbarButtons` setting via a `useEffect` (not inside state updaters, to avoid React's \"cannot update while rendering\" warning)\r\n- When the dialog reopens (e.g. after \"Restore defaults\"), state reinitializes from the current Redux props via a `reinitialize()` function\r\n\r\n## Notes on button reordering\r\n\r\nThis PR uses up/down arrow buttons rather than drag-and-drop reordering. Drag-and-drop was kept out of scope to keep the change focused, but happy to add it here or as a follow-up based on maintainer preference (noting that `react-native-gesture-handler` would need to be added as a new dependency).\r\n\r\n## Testing\r\n\r\nAutomated tests: 10 Jest tests covering partitioning, separators, move up/down (including edge cases), toggle, disabled item ordering, and reinitialize. All passing.\r\n\r\nManual testing performed on Android emulator (API 36):\r\n- Reordering buttons updates the toolbar immediately on dialog close ✅\r\n- Order persists across app restarts ✅\r\n- Toggle + reorder interaction works correctly ✅\r\n- Up arrow disabled on first item, down arrow disabled on last item ✅\r\n- Restore defaults resets both the toolbar and the dialog state ✅\r\n\r\n## Screenshots\r\n
",
"closed_by": {
"login": "laurent22",
"id": 1285584,
"node_id": "MDQ6VXNlcjEyODU1ODQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/laurent22",
"html_url": "https://github.com/laurent22",
"followers_url": "https://api.github.com/users/laurent22/followers",
"following_url": "https://api.github.com/users/laurent22/following{/other_user}",
"gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}",
"starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/laurent22/subscriptions",
"organizations_url": "https://api.github.com/users/laurent22/orgs",
"repos_url": "https://api.github.com/users/laurent22/repos",
"events_url": "https://api.github.com/users/laurent22/events{/privacy}",
"received_events_url": "https://api.github.com/users/laurent22/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/14485/reactions",
"total_count": 2,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 2,
"rocket": 0,
"eyes": 0
},
"timeline_url": "https://api.github.com/repos/laurent22/joplin/issues/14485/timeline",
"performed_via_github_app": null,
"state_reason": null
},
"comments": [
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3969895756",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-3969895756",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 3969895756,
"node_id": "IC_kwDOBLftOs7sn81M",
"user": {
"login": "github-actions[bot]",
"id": 41898282,
"node_id": "MDM6Qm90NDE4OTgyODI=",
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
"html_url": "https://github.com/apps/github-actions",
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
"type": "Bot",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-02-26T23:45:42Z",
"updated_at": "2026-04-04T15:23:43Z",
"body": "****CLA Assistant Lite bot**** All contributors have signed the CLA ✍️ ✅",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3969895756/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": {
"id": 15368,
"client_id": "Iv1.05c79e9ad1f6bdfa",
"slug": "github-actions",
"node_id": "MDM6QXBwMTUzNjg=",
"owner": {
"login": "github",
"id": 9919,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjk5MTk=",
"avatar_url": "https://avatars.githubusercontent.com/u/9919?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/github",
"html_url": "https://github.com/github",
"followers_url": "https://api.github.com/users/github/followers",
"following_url": "https://api.github.com/users/github/following{/other_user}",
"gists_url": "https://api.github.com/users/github/gists{/gist_id}",
"starred_url": "https://api.github.com/users/github/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/github/subscriptions",
"organizations_url": "https://api.github.com/users/github/orgs",
"repos_url": "https://api.github.com/users/github/repos",
"events_url": "https://api.github.com/users/github/events{/privacy}",
"received_events_url": "https://api.github.com/users/github/received_events",
"type": "Organization",
"user_view_type": "public",
"site_admin": false
},
"name": "GitHub Actions",
"description": "Automate your workflow from idea to production",
"external_url": "https://help.github.com/en/actions",
"html_url": "https://github.com/apps/github-actions",
"created_at": "2018-07-30T09:30:17Z",
"updated_at": "2026-05-05T14:51:38Z",
"permissions": {
"actions": "write",
"administration": "read",
"artifact_metadata": "write",
"attestations": "write",
"checks": "write",
"code_quality": "write",
"contents": "write",
"copilot_requests": "write",
"deployments": "write",
"discussions": "write",
"issues": "write",
"merge_queues": "write",
"metadata": "read",
"models": "read",
"packages": "write",
"pages": "write",
"pull_requests": "write",
"repository_hooks": "write",
"repository_projects": "write",
"security_events": "write",
"statuses": "write",
"vulnerability_alerts": "read"
},
"events": [
"branch_protection_rule",
"check_run",
"check_suite",
"create",
"delete",
"deployment",
"deployment_status",
"discussion",
"discussion_comment",
"fork",
"gollum",
"issues",
"issue_comment",
"label",
"merge_group",
"milestone",
"page_build",
"public",
"pull_request",
"pull_request_review",
"pull_request_review_comment",
"push",
"registry_package",
"release",
"repository",
"repository_dispatch",
"status",
"watch",
"workflow_dispatch",
"workflow_run"
]
}
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3969896724",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-3969896724",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 3969896724,
"node_id": "IC_kwDOBLftOs7sn9EU",
"user": {
"login": "coderabbitai[bot]",
"id": 136622811,
"node_id": "BOT_kgDOCCSy2w",
"avatar_url": "https://avatars.githubusercontent.com/in/347564?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/coderabbitai%5Bbot%5D",
"html_url": "https://github.com/apps/coderabbitai",
"followers_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/followers",
"following_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/following{/other_user}",
"gists_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/gists{/gist_id}",
"starred_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/subscriptions",
"organizations_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/orgs",
"repos_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/repos",
"events_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/events{/privacy}",
"received_events_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/received_events",
"type": "Bot",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-02-26T23:46:01Z",
"updated_at": "2026-04-02T18:00:20Z",
"body": "\n\n\n\n📝 Walkthrough
\n\n## Walkthrough\n\nAdds two hooks (`useToolbarEditorState`, `useSaveToolbarButtons`), refactors `ToolbarEditorDialog` to drive UI from hook state with enable/disable and reorder behaviour, adds unit tests for the hooks and updates existing toolbar tests, and updates ignore/dictionary files.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Toolbar state hook & tests**
`packages/app-mobile/components/EditorToolbar/utils/useToolbarEditorState.ts`, `packages/app-mobile/components/EditorToolbar/utils/useToolbarEditorState.test.ts`|New hook exporting `ReorderableItem` and related interfaces; derives `enabledItems`/`disabledItems`, supports toggle, move up/down and reinitialise; tests cover init, reorder, toggle and reinitialisation.|\n|**Toolbar persistence hook & tests**
`packages/app-mobile/components/EditorToolbar/utils/useSaveToolbarButtons.ts`, `packages/app-mobile/components/EditorToolbar/utils/useSaveToolbarButtons.test.ts`|New hook persists enabled command order to `Setting` with reinitialisation guard; tests verify mount/write behaviour and reinitialisation suppression.|\n|**Toolbar UI & tests**
`packages/app-mobile/components/EditorToolbar/ToolbarEditorDialog.tsx`, `packages/app-mobile/components/EditorToolbar/EditorToolbar.test.tsx`|Refactors dialog to consume new hook, renders `EnabledItemRow`/`DisabledItemRow`, wires toggle/move handlers, adds focus management for accessibility; test updates wrap interactions in `act` and re-query DOM after state changes.|\n|**Ignore & dictionaries**
`.eslintignore`, `.gitignore`, `packages/tools/cspell/dictionary1.txt`, `packages/tools/cspell/dictionary3.txt`|Adds the new hook and test files to ignore lists; fixes trailing newline in dictionary1 and adds \"Reorderable\" to dictionary3.|\n\n## Sequence Diagram\n\n```mermaid\nsequenceDiagram\n actor User\n participant ToolbarEditorDialog as \"ToolbarEditorDialog\"\n participant Hook as \"useToolbarEditorState\"\n participant PersistHook as \"useSaveToolbarButtons\"\n participant Settings as \"Settings\"\n\n User->>ToolbarEditorDialog: open / toggle / move item\n ToolbarEditorDialog->>Hook: handleToggle(command) / handleMoveUp(index) / handleMoveDown(index) / reinitialize(selection)\n activate Hook\n Hook->>Hook: compute enabledItems / disabledItems\n Hook-->>ToolbarEditorDialog: updated lists\n deactivate Hook\n\n ToolbarEditorDialog->>PersistHook: provide enabledItems, isReinitializing\n activate PersistHook\n alt not initial mount and not reinitializing\n PersistHook->>Settings: setValue(editor.toolbarButtons)\n Settings-->>PersistHook: ack\n else skip write\n PersistHook-->>PersistHook: reset isReinitializing if set\n end\n deactivate PersistHook\n\n ToolbarEditorDialog->>User: re-rendered list, updated focus\n```\n\n## Suggested labels\n\n`editor`\n\n \n\n\n\n\n\n\n\n🚥 Pre-merge checks | ✅ 4
\n\n\n✅ Passed checks (4 passed)
\n\n| Check name | Status | Explanation |\n| :-----------------------------------: | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Title check | ✅ Passed | The title accurately and concisely summarizes the main change: adding toolbar button reordering with up/down arrows in the mobile editor, which is the primary focus of the changeset. |\n| Description check | ✅ Passed | The description is directly related to the changeset, providing clear context on what the PR does, how it works, testing approach, and manual verification performed on Android. |\n| Docstring Coverage | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. |\n| Pr Description Must Follow Guidelines | ✅ Passed | PR description includes problem/user-impact (toolbar button reordering), high-level solution (split sections, useToolbarEditorState hook, persistence logic), and test plan (manual testing with specific verification items on Android emulator). |\n\n \n\n✏️ Tip: You can configure your own custom pre-merge checks in the settings.\n\n \n\n\n\n\n\n\n✨ Finishing Touches
\n\n\n🧪 Generate unit tests (beta)
\n\n- [ ] Create PR with unit tests\n\n \n\n \n\n\n\n\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=laurent22/joplin&utm_content=14485)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.\n\n\n❤️ Share
\n\n- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)\n- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)\n- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)\n- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)\n\n \n\nComment `@coderabbitai help` to get the list of available commands and usage tips.\n\n\n\n\n\n\n\n\n",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3969896724/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": {
"id": 347564,
"client_id": "Iv1.6aaafe4fe882736b",
"slug": "coderabbitai",
"node_id": "A_kwHOB96YWc4ABU2s",
"owner": {
"login": "coderabbitai",
"id": 132028505,
"node_id": "O_kgDOB96YWQ",
"avatar_url": "https://avatars.githubusercontent.com/u/132028505?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/coderabbitai",
"html_url": "https://github.com/coderabbitai",
"followers_url": "https://api.github.com/users/coderabbitai/followers",
"following_url": "https://api.github.com/users/coderabbitai/following{/other_user}",
"gists_url": "https://api.github.com/users/coderabbitai/gists{/gist_id}",
"starred_url": "https://api.github.com/users/coderabbitai/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/coderabbitai/subscriptions",
"organizations_url": "https://api.github.com/users/coderabbitai/orgs",
"repos_url": "https://api.github.com/users/coderabbitai/repos",
"events_url": "https://api.github.com/users/coderabbitai/events{/privacy}",
"received_events_url": "https://api.github.com/users/coderabbitai/received_events",
"type": "Organization",
"user_view_type": "public",
"site_admin": false
},
"name": "coderabbitai",
"description": "# Transforming Code Reviews with AI\r\n\r\n## Features\r\n\r\n**Automated Reviews**: Continuous reviews of the pull requests including incremental commits. \r\n\r\n**Summarization**: Generates high-level summary and a technical walkthrough of the PR changes. \r\n\r\n**Line-by-line review**: Provides line-by-line suggestions committable with one click.\r\n\r\n**Codebase verification**: Verifies the impact on the overall codebase and identifies missing changes.\r\n\r\n**Insights into your code**: Ask any questions on your codebase within the pull request \r\n\r\n**Chat about your code** : Chat with the bot around your code. The more you chat, the smarter it gets.\r\n\r\n**Issue Validation**: Validates the PR against the linked issues and identifies other related issues \r\n\r\n\r\n\r\n",
"external_url": "https://coderabbit.ai?utm_source=cr_app&utm_medium=github",
"html_url": "https://github.com/apps/coderabbitai",
"created_at": "2023-06-14T15:47:27Z",
"updated_at": "2026-03-14T07:58:44Z",
"permissions": {
"actions": "read",
"checks": "write",
"contents": "write",
"discussions": "read",
"issues": "write",
"members": "read",
"metadata": "read",
"pull_requests": "write",
"statuses": "write"
},
"events": [
"issues",
"issue_comment",
"label",
"organization",
"pull_request",
"pull_request_review",
"pull_request_review_comment",
"pull_request_review_thread",
"release",
"repository"
]
}
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3969901311",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-3969901311",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 3969901311,
"node_id": "IC_kwDOBLftOs7sn-L_",
"user": {
"login": "Vpatel1093",
"id": 18127758,
"node_id": "MDQ6VXNlcjE4MTI3NzU4",
"avatar_url": "https://avatars.githubusercontent.com/u/18127758?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Vpatel1093",
"html_url": "https://github.com/Vpatel1093",
"followers_url": "https://api.github.com/users/Vpatel1093/followers",
"following_url": "https://api.github.com/users/Vpatel1093/following{/other_user}",
"gists_url": "https://api.github.com/users/Vpatel1093/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Vpatel1093/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Vpatel1093/subscriptions",
"organizations_url": "https://api.github.com/users/Vpatel1093/orgs",
"repos_url": "https://api.github.com/users/Vpatel1093/repos",
"events_url": "https://api.github.com/users/Vpatel1093/events{/privacy}",
"received_events_url": "https://api.github.com/users/Vpatel1093/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-02-26T23:47:35Z",
"updated_at": "2026-02-26T23:47:35Z",
"body": "I have read the CLA Document and I hereby sign the CLA",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3969901311/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3970066681",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-3970066681",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 3970066681,
"node_id": "IC_kwDOBLftOs7somj5",
"user": {
"login": "personalizedrefrigerator",
"id": 46334387,
"node_id": "MDQ6VXNlcjQ2MzM0Mzg3",
"avatar_url": "https://avatars.githubusercontent.com/u/46334387?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/personalizedrefrigerator",
"html_url": "https://github.com/personalizedrefrigerator",
"followers_url": "https://api.github.com/users/personalizedrefrigerator/followers",
"following_url": "https://api.github.com/users/personalizedrefrigerator/following{/other_user}",
"gists_url": "https://api.github.com/users/personalizedrefrigerator/gists{/gist_id}",
"starred_url": "https://api.github.com/users/personalizedrefrigerator/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/personalizedrefrigerator/subscriptions",
"organizations_url": "https://api.github.com/users/personalizedrefrigerator/orgs",
"repos_url": "https://api.github.com/users/personalizedrefrigerator/repos",
"events_url": "https://api.github.com/users/personalizedrefrigerator/events{/privacy}",
"received_events_url": "https://api.github.com/users/personalizedrefrigerator/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-02-27T00:40:37Z",
"updated_at": "2026-02-27T00:40:37Z",
"body": "Thank you for the pull request!\r\n\r\nNotes:\r\n- If this is for Google Summer of Code, please review [the pull request guidelines](https://github.com/joplin/gsoc/blob/master/pull_request_guidelines.md). In particular,\r\n - AI-assisted contributions must follow the [AI policy](https://github.com/personalizedrefrigerator/gsoc/blob/main/ai_policy.md).\r\n - GSoC pull requests should be for an existing issue (usually one with the `high` or `medium` label).\r\n - GSoC pull requests that do not follow the pull request guidelines may be closed.\r\n- There are a few failing tests. Please make sure that the existing mobile toolbar tests pass.\r\n- Since this change updates the UI, screenshots and/or a screen recording in the pull request description would be helpful.\r\n- > Since react-native-gesture-handler is already in the project, drag-and-drop could be added without a new dependency\r\n \r\n For future reference: I don't think `react-native-gesture-handler` is currently part of the project (based on `yarn.lock` and [`yarn why -R`](https://yarnpkg.com/cli/why)). (I do see it mentioned in the \"exclude\" section of the expo config).\r\n- For unit tests: In general, prefer using the actual `Setting.ts` methods to mocking them. For the necessary setup logic see, for example, [EditorToolbar.test.tsx](https://github.com/laurent22/joplin/blob/eb238efc7bb8a1fdda787196e87fb08f6b170e54/packages/app-mobile/components/EditorToolbar/EditorToolbar.test.tsx#L68).",
"author_association": "COLLABORATOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3970066681/reactions",
"total_count": 1,
"+1": 1,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3971119773",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-3971119773",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 3971119773,
"node_id": "IC_kwDOBLftOs7ssnqd",
"user": {
"login": "Vpatel1093",
"id": 18127758,
"node_id": "MDQ6VXNlcjE4MTI3NzU4",
"avatar_url": "https://avatars.githubusercontent.com/u/18127758?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Vpatel1093",
"html_url": "https://github.com/Vpatel1093",
"followers_url": "https://api.github.com/users/Vpatel1093/followers",
"following_url": "https://api.github.com/users/Vpatel1093/following{/other_user}",
"gists_url": "https://api.github.com/users/Vpatel1093/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Vpatel1093/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Vpatel1093/subscriptions",
"organizations_url": "https://api.github.com/users/Vpatel1093/orgs",
"repos_url": "https://api.github.com/users/Vpatel1093/repos",
"events_url": "https://api.github.com/users/Vpatel1093/events{/privacy}",
"received_events_url": "https://api.github.com/users/Vpatel1093/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-02-27T06:39:59Z",
"updated_at": "2026-02-27T17:06:13Z",
"body": "@personalizedrefrigerator thanks for the feedback, do we want to add that dependency here or in a follow up PR or stick with this?\r\n\r\nAlso was looking at https://github.com/laurent22/joplin/issues/12840 and wondering if adding a \"Go To Bottom\" button (and possibly \"Go To Top\") would be good to add in a follow up? We have the CodeMirror commands already in packages/editor/CodeMirror/editorCommands/editorCommands.ts so it would be pretty trivial to implement",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3971119773/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3972031691",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-3972031691",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 3972031691,
"node_id": "IC_kwDOBLftOs7swGTL",
"user": {
"login": "mrjo118",
"id": 6963004,
"node_id": "MDQ6VXNlcjY5NjMwMDQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/6963004?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mrjo118",
"html_url": "https://github.com/mrjo118",
"followers_url": "https://api.github.com/users/mrjo118/followers",
"following_url": "https://api.github.com/users/mrjo118/following{/other_user}",
"gists_url": "https://api.github.com/users/mrjo118/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mrjo118/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mrjo118/subscriptions",
"organizations_url": "https://api.github.com/users/mrjo118/orgs",
"repos_url": "https://api.github.com/users/mrjo118/repos",
"events_url": "https://api.github.com/users/mrjo118/events{/privacy}",
"received_events_url": "https://api.github.com/users/mrjo118/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-02-27T10:19:24Z",
"updated_at": "2026-02-27T10:19:24Z",
"body": "> @personalizedrefrigerator thanks for the feedback, do we want to add that dependency here or in a follow up PR or stick with this?\r\n> \r\n\r\nWould be better to not increase the size of the PR further, given that this is your first contribution. If this change gets accepted, you can consider adding drag and drop in a followup PR. But to be honest the available button list is not that big, so I would not say its necessary at all",
"author_association": "COLLABORATOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3972031691/reactions",
"total_count": 1,
"+1": 1,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3975826145",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-3975826145",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 3975826145,
"node_id": "IC_kwDOBLftOs7s-krh",
"user": {
"login": "personalizedrefrigerator",
"id": 46334387,
"node_id": "MDQ6VXNlcjQ2MzM0Mzg3",
"avatar_url": "https://avatars.githubusercontent.com/u/46334387?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/personalizedrefrigerator",
"html_url": "https://github.com/personalizedrefrigerator",
"followers_url": "https://api.github.com/users/personalizedrefrigerator/followers",
"following_url": "https://api.github.com/users/personalizedrefrigerator/following{/other_user}",
"gists_url": "https://api.github.com/users/personalizedrefrigerator/gists{/gist_id}",
"starred_url": "https://api.github.com/users/personalizedrefrigerator/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/personalizedrefrigerator/subscriptions",
"organizations_url": "https://api.github.com/users/personalizedrefrigerator/orgs",
"repos_url": "https://api.github.com/users/personalizedrefrigerator/repos",
"events_url": "https://api.github.com/users/personalizedrefrigerator/events{/privacy}",
"received_events_url": "https://api.github.com/users/personalizedrefrigerator/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-02-28T00:18:19Z",
"updated_at": "2026-02-28T00:18:19Z",
"body": "> ### Testing\r\n\r\nSince there are changes to how the list items are reported to accessibility tools, would you be willing to test this with [TalkBack](https://support.google.com/accessibility/android/answer/6283677) to make sure that the new behavior is accessible? (See [Android: Test your app's accessibility](https://developer.android.com/guide/topics/ui/accessibility/testing)) If not, I can do so, but it may take a few days.\r\n\r\nThings to look for include:\r\n- Whether focus is moved to a reasonable location (e.g. the next item) after checking/unchecking a list item's checkbox.\r\n- Whether the text spoken by the screen reader after checking/unchecking an item makes sense.\r\n- Whether the text spoken by the screen reader after moving an item up/down makes sense.\r\n - For example, it should be clear to the user that the item was actually moved up/down.\r\n\r\nThank you again for working on this!",
"author_association": "COLLABORATOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3975826145/reactions",
"total_count": 1,
"+1": 1,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4003322043",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4003322043",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4003322043,
"node_id": "IC_kwDOBLftOs7undi7",
"user": {
"login": "laurent22",
"id": 1285584,
"node_id": "MDQ6VXNlcjEyODU1ODQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/laurent22",
"html_url": "https://github.com/laurent22",
"followers_url": "https://api.github.com/users/laurent22/followers",
"following_url": "https://api.github.com/users/laurent22/following{/other_user}",
"gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}",
"starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/laurent22/subscriptions",
"organizations_url": "https://api.github.com/users/laurent22/orgs",
"repos_url": "https://api.github.com/users/laurent22/repos",
"events_url": "https://api.github.com/users/laurent22/events{/privacy}",
"received_events_url": "https://api.github.com/users/laurent22/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-05T08:38:41Z",
"updated_at": "2026-03-05T08:38:42Z",
"body": "Hello, since this pull request does not appear to be active, we are closing it to keep the PR backlog manageable. If you decide to continue working on it later, just let us know when it’s ready for review and we can reopen it.",
"author_association": "OWNER",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4003322043/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4003423854",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4003423854",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4003423854,
"node_id": "IC_kwDOBLftOs7un2Zu",
"user": {
"login": "Vpatel1093",
"id": 18127758,
"node_id": "MDQ6VXNlcjE4MTI3NzU4",
"avatar_url": "https://avatars.githubusercontent.com/u/18127758?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Vpatel1093",
"html_url": "https://github.com/Vpatel1093",
"followers_url": "https://api.github.com/users/Vpatel1093/followers",
"following_url": "https://api.github.com/users/Vpatel1093/following{/other_user}",
"gists_url": "https://api.github.com/users/Vpatel1093/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Vpatel1093/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Vpatel1093/subscriptions",
"organizations_url": "https://api.github.com/users/Vpatel1093/orgs",
"repos_url": "https://api.github.com/users/Vpatel1093/repos",
"events_url": "https://api.github.com/users/Vpatel1093/events{/privacy}",
"received_events_url": "https://api.github.com/users/Vpatel1093/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-05T08:56:34Z",
"updated_at": "2026-03-05T08:56:34Z",
"body": "> Hello, since this pull request does not appear to be active, we are closing it to keep the PR backlog manageable. If you decide to continue working on it later, just let us know when it’s ready for review and we can reopen it.\r\n\r\n@laurent22 This is ready for review 🙂",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4003423854/reactions",
"total_count": 1,
"+1": 1,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4014657034",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4014657034",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4014657034,
"node_id": "IC_kwDOBLftOs7vSs4K",
"user": {
"login": "personalizedrefrigerator",
"id": 46334387,
"node_id": "MDQ6VXNlcjQ2MzM0Mzg3",
"avatar_url": "https://avatars.githubusercontent.com/u/46334387?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/personalizedrefrigerator",
"html_url": "https://github.com/personalizedrefrigerator",
"followers_url": "https://api.github.com/users/personalizedrefrigerator/followers",
"following_url": "https://api.github.com/users/personalizedrefrigerator/following{/other_user}",
"gists_url": "https://api.github.com/users/personalizedrefrigerator/gists{/gist_id}",
"starred_url": "https://api.github.com/users/personalizedrefrigerator/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/personalizedrefrigerator/subscriptions",
"organizations_url": "https://api.github.com/users/personalizedrefrigerator/orgs",
"repos_url": "https://api.github.com/users/personalizedrefrigerator/repos",
"events_url": "https://api.github.com/users/personalizedrefrigerator/events{/privacy}",
"received_events_url": "https://api.github.com/users/personalizedrefrigerator/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-06T23:05:38Z",
"updated_at": "2026-03-06T23:05:38Z",
"body": "Comments after testing locally:\r\n- **Auto-focus issues** (major): Thank you for adding logic to ensure that the new accessibility focus makes sense after moving an item! This logic needs adjustment to work correctly with web:\r\n - **Current behavior**: The button's **container** is auto-focused, rather than the button's **pressable region**. As a result, neither space nor enter activate the auto-focused button:\r\n \r\n [Screencast from 2026-03-06 14-43-28.webm](https://github.com/user-attachments/assets/efac7eb6-152d-4d79-942f-0acc09b5ab47)\r\n \r\n React Native Paper doesn't seem to expose a ref to the `TouchableRipple` used by its `IconButton`.\r\n - **Possible fix**: Use Joplin's `IconButton`, instead of `react-native-paper`'s `IconButton` ([example-fix.patch](https://github.com/user-attachments/files/25806042/example-patch.patch)). However, Joplin's `IconButton` attempts to display a tooltip on long-press, which doesn't seem to work properly within the toolbar editor modal.\r\n\r\n- **Touchable sizing** (minor): The `TouchableRipple` for disabling items is shorter than the `TouchableRipple` for enabling items (22px vs 42px):\r\n \r\n | Hovering over the TouchableRipple checkbox | TouchableRipple checkbox size |\r\n |---|---|\r\n |
|
|\r\n\r\n- **Saving state** (code structure): Currently, `useToolbarEditorState` is responsible for persisting `enabledItems`. To keep `useToolbarEditorState` focused on updating/calculating local state, consider moving the `Setting.setValue` logic to a separate hook.\r\n",
"author_association": "COLLABORATOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4014657034/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4030882208",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4030882208",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4030882208,
"node_id": "IC_kwDOBLftOs7wQmGg",
"user": {
"login": "laurent22",
"id": 1285584,
"node_id": "MDQ6VXNlcjEyODU1ODQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/laurent22",
"html_url": "https://github.com/laurent22",
"followers_url": "https://api.github.com/users/laurent22/followers",
"following_url": "https://api.github.com/users/laurent22/following{/other_user}",
"gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}",
"starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/laurent22/subscriptions",
"organizations_url": "https://api.github.com/users/laurent22/orgs",
"repos_url": "https://api.github.com/users/laurent22/repos",
"events_url": "https://api.github.com/users/laurent22/events{/privacy}",
"received_events_url": "https://api.github.com/users/laurent22/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-10T12:01:51Z",
"updated_at": "2026-03-10T12:01:51Z",
"body": "@Vpatel1093, please let us know if you want to keep working on this issue",
"author_association": "OWNER",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4030882208/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4031873400",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4031873400",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4031873400,
"node_id": "IC_kwDOBLftOs7wUYF4",
"user": {
"login": "Vpatel1093",
"id": 18127758,
"node_id": "MDQ6VXNlcjE4MTI3NzU4",
"avatar_url": "https://avatars.githubusercontent.com/u/18127758?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Vpatel1093",
"html_url": "https://github.com/Vpatel1093",
"followers_url": "https://api.github.com/users/Vpatel1093/followers",
"following_url": "https://api.github.com/users/Vpatel1093/following{/other_user}",
"gists_url": "https://api.github.com/users/Vpatel1093/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Vpatel1093/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Vpatel1093/subscriptions",
"organizations_url": "https://api.github.com/users/Vpatel1093/orgs",
"repos_url": "https://api.github.com/users/Vpatel1093/repos",
"events_url": "https://api.github.com/users/Vpatel1093/events{/privacy}",
"received_events_url": "https://api.github.com/users/Vpatel1093/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-10T14:33:05Z",
"updated_at": "2026-03-10T14:33:05Z",
"body": "@laurent22 yes, out for a few days but will finish",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4031873400/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4049069099",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4049069099",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4049069099,
"node_id": "IC_kwDOBLftOs7xV-Qr",
"user": {
"login": "laurent22",
"id": 1285584,
"node_id": "MDQ6VXNlcjEyODU1ODQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/laurent22",
"html_url": "https://github.com/laurent22",
"followers_url": "https://api.github.com/users/laurent22/followers",
"following_url": "https://api.github.com/users/laurent22/following{/other_user}",
"gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}",
"starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/laurent22/subscriptions",
"organizations_url": "https://api.github.com/users/laurent22/orgs",
"repos_url": "https://api.github.com/users/laurent22/repos",
"events_url": "https://api.github.com/users/laurent22/events{/privacy}",
"received_events_url": "https://api.github.com/users/laurent22/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-12T18:31:19Z",
"updated_at": "2026-03-12T18:31:19Z",
"body": "Hello, I'm closing the PR for now as I'm trying to clear our backlog. Feel free to let us know if later you'd like to continue",
"author_association": "OWNER",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4049069099/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4084533550",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4084533550",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4084533550,
"node_id": "IC_kwDOBLftOs7zdQku",
"user": {
"login": "Vpatel1093",
"id": 18127758,
"node_id": "MDQ6VXNlcjE4MTI3NzU4",
"avatar_url": "https://avatars.githubusercontent.com/u/18127758?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Vpatel1093",
"html_url": "https://github.com/Vpatel1093",
"followers_url": "https://api.github.com/users/Vpatel1093/followers",
"following_url": "https://api.github.com/users/Vpatel1093/following{/other_user}",
"gists_url": "https://api.github.com/users/Vpatel1093/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Vpatel1093/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Vpatel1093/subscriptions",
"organizations_url": "https://api.github.com/users/Vpatel1093/orgs",
"repos_url": "https://api.github.com/users/Vpatel1093/repos",
"events_url": "https://api.github.com/users/Vpatel1093/events{/privacy}",
"received_events_url": "https://api.github.com/users/Vpatel1093/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-18T17:58:47Z",
"updated_at": "2026-03-18T17:58:47Z",
"body": "@personalizedrefrigerator pushed up a commit to address your feedback - this PR can be reopened",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4084533550/reactions",
"total_count": 1,
"+1": 1,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4111512083",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4111512083",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4111512083,
"node_id": "IC_kwDOBLftOs71ELIT",
"user": {
"login": "personalizedrefrigerator",
"id": 46334387,
"node_id": "MDQ6VXNlcjQ2MzM0Mzg3",
"avatar_url": "https://avatars.githubusercontent.com/u/46334387?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/personalizedrefrigerator",
"html_url": "https://github.com/personalizedrefrigerator",
"followers_url": "https://api.github.com/users/personalizedrefrigerator/followers",
"following_url": "https://api.github.com/users/personalizedrefrigerator/following{/other_user}",
"gists_url": "https://api.github.com/users/personalizedrefrigerator/gists{/gist_id}",
"starred_url": "https://api.github.com/users/personalizedrefrigerator/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/personalizedrefrigerator/subscriptions",
"organizations_url": "https://api.github.com/users/personalizedrefrigerator/orgs",
"repos_url": "https://api.github.com/users/personalizedrefrigerator/repos",
"events_url": "https://api.github.com/users/personalizedrefrigerator/events{/privacy}",
"received_events_url": "https://api.github.com/users/personalizedrefrigerator/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-23T15:28:38Z",
"updated_at": "2026-03-23T15:29:19Z",
"body": "> Touchable sizing (minor): The TouchableRipple for disabling items is shorter than the TouchableRipple for enabling items (22px vs 42px):\r\n\r\nNote: I've re-tested locally and this still seems to be an issue. The up/down arrow buttons should also be slightly larger (see [WCAG 2.2 Target Size: Minimum](https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html)):\r\n
\r\n\r\n(However, I can confirm that the keyboard focus issues have been fixed!)\r\n",
"author_association": "COLLABORATOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4111512083/reactions",
"total_count": 1,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 1
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4136888792",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4136888792",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4136888792,
"node_id": "IC_kwDOBLftOs72k-nY",
"user": {
"login": "Vpatel1093",
"id": 18127758,
"node_id": "MDQ6VXNlcjE4MTI3NzU4",
"avatar_url": "https://avatars.githubusercontent.com/u/18127758?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Vpatel1093",
"html_url": "https://github.com/Vpatel1093",
"followers_url": "https://api.github.com/users/Vpatel1093/followers",
"following_url": "https://api.github.com/users/Vpatel1093/following{/other_user}",
"gists_url": "https://api.github.com/users/Vpatel1093/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Vpatel1093/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Vpatel1093/subscriptions",
"organizations_url": "https://api.github.com/users/Vpatel1093/orgs",
"repos_url": "https://api.github.com/users/Vpatel1093/repos",
"events_url": "https://api.github.com/users/Vpatel1093/events{/privacy}",
"received_events_url": "https://api.github.com/users/Vpatel1093/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-26T17:37:30Z",
"updated_at": "2026-03-26T17:37:30Z",
"body": "> Marking as \"changes requested\" as per comment above.\r\n\r\n@personalizedrefrigerator ready for re-review!",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4136888792/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4136909555",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4136909555",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4136909555,
"node_id": "IC_kwDOBLftOs72lDrz",
"user": {
"login": "personalizedrefrigerator",
"id": 46334387,
"node_id": "MDQ6VXNlcjQ2MzM0Mzg3",
"avatar_url": "https://avatars.githubusercontent.com/u/46334387?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/personalizedrefrigerator",
"html_url": "https://github.com/personalizedrefrigerator",
"followers_url": "https://api.github.com/users/personalizedrefrigerator/followers",
"following_url": "https://api.github.com/users/personalizedrefrigerator/following{/other_user}",
"gists_url": "https://api.github.com/users/personalizedrefrigerator/gists{/gist_id}",
"starred_url": "https://api.github.com/users/personalizedrefrigerator/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/personalizedrefrigerator/subscriptions",
"organizations_url": "https://api.github.com/users/personalizedrefrigerator/orgs",
"repos_url": "https://api.github.com/users/personalizedrefrigerator/repos",
"events_url": "https://api.github.com/users/personalizedrefrigerator/events{/privacy}",
"received_events_url": "https://api.github.com/users/personalizedrefrigerator/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-26T17:40:42Z",
"updated_at": "2026-03-26T17:40:42Z",
"body": "> @personalizedrefrigerator ready for re-review!\r\n\r\nThanks for the reminder! I should have this re-reviewed in the next day or two!",
"author_association": "COLLABORATOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4136909555/reactions",
"total_count": 1,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 1,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4157804742",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4157804742",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4157804742,
"node_id": "IC_kwDOBLftOs730xDG",
"user": {
"login": "personalizedrefrigerator",
"id": 46334387,
"node_id": "MDQ6VXNlcjQ2MzM0Mzg3",
"avatar_url": "https://avatars.githubusercontent.com/u/46334387?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/personalizedrefrigerator",
"html_url": "https://github.com/personalizedrefrigerator",
"followers_url": "https://api.github.com/users/personalizedrefrigerator/followers",
"following_url": "https://api.github.com/users/personalizedrefrigerator/following{/other_user}",
"gists_url": "https://api.github.com/users/personalizedrefrigerator/gists{/gist_id}",
"starred_url": "https://api.github.com/users/personalizedrefrigerator/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/personalizedrefrigerator/subscriptions",
"organizations_url": "https://api.github.com/users/personalizedrefrigerator/orgs",
"repos_url": "https://api.github.com/users/personalizedrefrigerator/repos",
"events_url": "https://api.github.com/users/personalizedrefrigerator/events{/privacy}",
"received_events_url": "https://api.github.com/users/personalizedrefrigerator/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-30T20:00:02Z",
"updated_at": "2026-03-30T20:00:02Z",
"body": "I've tested this on iOS (an iOS 26 simulator) and web. The new UI seems to work well with TalkBack on MacOS.\r\n\r\nA few notes:\r\n- It's difficult to tell whether a \"move up\" or \"move down\" button is disabled or not. In light mode, the disabled and enabled buttons look roughly the same.\r\n
\r\n\r\n- There are a few `useEffect`s directly within React component bodies. For readability, it might (maybe) make sense to extract some of these to separate, named hooks (e.g. `useAutoFocus`).\r\n\r\nTo simplify collecting feedback on this change, I've deployed a version of this pull request to https://personalizedrefrigerator.github.io/joplin/web-client/.",
"author_association": "COLLABORATOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4157804742/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4158325569",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4158325569",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4158325569,
"node_id": "IC_kwDOBLftOs732wNB",
"user": {
"login": "Vpatel1093",
"id": 18127758,
"node_id": "MDQ6VXNlcjE4MTI3NzU4",
"avatar_url": "https://avatars.githubusercontent.com/u/18127758?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Vpatel1093",
"html_url": "https://github.com/Vpatel1093",
"followers_url": "https://api.github.com/users/Vpatel1093/followers",
"following_url": "https://api.github.com/users/Vpatel1093/following{/other_user}",
"gists_url": "https://api.github.com/users/Vpatel1093/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Vpatel1093/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Vpatel1093/subscriptions",
"organizations_url": "https://api.github.com/users/Vpatel1093/orgs",
"repos_url": "https://api.github.com/users/Vpatel1093/repos",
"events_url": "https://api.github.com/users/Vpatel1093/events{/privacy}",
"received_events_url": "https://api.github.com/users/Vpatel1093/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-30T21:34:47Z",
"updated_at": "2026-03-30T21:34:47Z",
"body": "Thanks @personalizedrefrigerator\r\n\r\nGot those comments resolved:\r\n
\r\n",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4158325569/reactions",
"total_count": 1,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 1,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4178769242",
"html_url": "https://github.com/laurent22/joplin/pull/14485#issuecomment-4178769242",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14485",
"id": 4178769242,
"node_id": "IC_kwDOBLftOs75EvVa",
"user": {
"login": "mrjo118",
"id": 6963004,
"node_id": "MDQ6VXNlcjY5NjMwMDQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/6963004?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mrjo118",
"html_url": "https://github.com/mrjo118",
"followers_url": "https://api.github.com/users/mrjo118/followers",
"following_url": "https://api.github.com/users/mrjo118/following{/other_user}",
"gists_url": "https://api.github.com/users/mrjo118/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mrjo118/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mrjo118/subscriptions",
"organizations_url": "https://api.github.com/users/mrjo118/orgs",
"repos_url": "https://api.github.com/users/mrjo118/repos",
"events_url": "https://api.github.com/users/mrjo118/events{/privacy}",
"received_events_url": "https://api.github.com/users/mrjo118/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-04-02T15:42:01Z",
"updated_at": "2026-04-02T15:42:01Z",
"body": "@personalizedrefrigerator Is the requested changes status still relevant?",
"author_association": "COLLABORATOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4178769242/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
}
]
}