From f2c088fb182dfa1ad52567965811d2403af1cf8b Mon Sep 17 00:00:00 2001 From: 01zulfi <85733202+01zulfi@users.noreply.github.com> Date: Wed, 8 Apr 2026 16:23:01 +0500 Subject: [PATCH 01/10] web: add clear trash option in trash nav item context menu Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com> web: disable clear trash if empty && update confirm message Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com> --- .../__e2e__/models/navigation-menu.model.ts | 13 +- apps/web/__e2e__/trash.test.ts | 49 ++ apps/web/src/components/icons/index.tsx | 4 +- .../src/components/list-container/index.tsx | 9 +- .../src/components/navigation-menu/index.tsx | 39 +- apps/web/src/views/trash.tsx | 5 +- packages/intl/locale/en.po | 684 +++++++++--------- packages/intl/locale/pseudo-LOCALE.po | 684 +++++++++--------- packages/intl/src/strings.ts | 3 +- 9 files changed, 798 insertions(+), 692 deletions(-) create mode 100644 apps/web/__e2e__/trash.test.ts diff --git a/apps/web/__e2e__/models/navigation-menu.model.ts b/apps/web/__e2e__/models/navigation-menu.model.ts index f492d1ab3..189cd1c44 100644 --- a/apps/web/__e2e__/models/navigation-menu.model.ts +++ b/apps/web/__e2e__/models/navigation-menu.model.ts @@ -20,7 +20,7 @@ along with this program. If not, see . import { Locator, Page } from "@playwright/test"; import { getTestId } from "../utils"; import { ContextMenuModel } from "./context-menu.model"; -import { fillItemDialog, iterateList } from "./utils"; +import { confirmDialog, fillItemDialog, iterateList } from "./utils"; export class NavigationMenuModel { protected readonly page: Page; @@ -101,4 +101,15 @@ class NavigationItemModel { await this.menu.open(this.locator); await this.menu.clickOnItem("remove-shortcut"); } + + async clearTrash() { + await this.menu.open(this.locator); + await this.menu.clickOnItem("clear-trash"); + await confirmDialog(this.page.locator(getTestId("confirm-dialog"))); + } + + async getClearTrashItem() { + await this.menu.open(this.locator); + return this.menu.getItem("clear-trash"); + } } diff --git a/apps/web/__e2e__/trash.test.ts b/apps/web/__e2e__/trash.test.ts new file mode 100644 index 000000000..6d4dd4173 --- /dev/null +++ b/apps/web/__e2e__/trash.test.ts @@ -0,0 +1,49 @@ +/* +This file is part of the Notesnook project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +import { AppModel } from "./models/app.model"; +import { expect, NOTE, test } from "./utils"; + +test("clear trash", async ({ page }) => { + const app = new AppModel(page); + await app.goto(); + const notes = await app.goToNotes(); + const note = await notes.createNote(NOTE); + await note?.contextMenu.moveToTrash(); + const trash = await app.goToTrash(); + let trashedNote = await trash.findItem(NOTE.title); + expect(trashedNote).toBeDefined(); + + const trashItem = await app.navigation.findItem("Trash"); + await trashItem?.clearTrash(); + + trashedNote = await trash.findItem(NOTE.title); + expect(trashedNote).toBeUndefined(); +}); + +test("clear trash option should be disabled if trash is empty", async ({ + page +}) => { + const app = new AppModel(page); + await app.goto(); + const trashItem = await app.navigation.findItem("Trash"); + + const clearTrashMenuItem = await trashItem?.getClearTrashItem(); + expect(await clearTrashMenuItem?.isDisabled()).toBe(true); +}); diff --git a/apps/web/src/components/icons/index.tsx b/apps/web/src/components/icons/index.tsx index 734b82e2f..745eb98be 100644 --- a/apps/web/src/components/icons/index.tsx +++ b/apps/web/src/components/icons/index.tsx @@ -228,7 +228,8 @@ import { mdiNoteEditOutline, mdiArrowUp, mdiInbox, - mdiConsoleLine + mdiConsoleLine, + mdiDeleteSweepOutline } from "@mdi/js"; import { useTheme } from "@emotion/react"; import { Theme } from "@notesnook/theme"; @@ -584,3 +585,4 @@ export const ExpandSidebar = createIcon(mdiArrowCollapseRight); export const HamburgerMenu = createIcon(mdiMenu); export const ArrowUp = createIcon(mdiArrowUp); export const Inbox = createIcon(mdiInbox); +export const ClearTrash = createIcon(mdiDeleteSweepOutline); diff --git a/apps/web/src/components/list-container/index.tsx b/apps/web/src/components/list-container/index.tsx index 4ddd98fb8..7e9bb42c7 100644 --- a/apps/web/src/components/list-container/index.tsx +++ b/apps/web/src/components/list-container/index.tsx @@ -20,7 +20,7 @@ along with this program. If not, see . import { forwardRef, useEffect, useRef, useState } from "react"; import { Flex, Button } from "@theme-ui/components"; import { SxProp } from "@theme-ui/core"; -import { Plus } from "../icons"; +import { Plus, Icon } from "../icons"; import { useStore as useSelectionStore, store as selectionStore @@ -76,6 +76,7 @@ type ListContainerProps = { isSearching?: boolean; onDrop?: (e: React.DragEvent) => void; button?: { + Icon?: Icon; onClick: () => void; }; Scroller?: Components["Scroller"]; @@ -275,7 +276,11 @@ function ListContainer(props: ListContainerProps) { height: 45 }} > - + {button.Icon ? ( + + ) : ( + + )} )} diff --git a/apps/web/src/components/navigation-menu/index.tsx b/apps/web/src/components/navigation-menu/index.tsx index 00831a27a..60fd97287 100644 --- a/apps/web/src/components/navigation-menu/index.tsx +++ b/apps/web/src/components/navigation-menu/index.tsx @@ -47,7 +47,8 @@ import { Notebook as NotebookIcon, Plus, SortBy, - Tag as TagIcon + Tag as TagIcon, + ClearTrash } from "../icons"; import { SortableNavigationItem } from "./navigation-item"; import { @@ -93,6 +94,8 @@ import { Color, Notebook, Tag } from "@notesnook/core"; import { handleDrop } from "../../common/drop-handler"; import { Menu, useMenuStore, useMenuTrigger } from "../../hooks/use-menu"; import { RenameColorDialog } from "../../dialogs/item-dialog"; +import { ConfirmDialog } from "../../dialogs/confirm"; +import { showToast } from "../../utils/toast"; import { strings } from "@notesnook/intl"; import Tags from "../../views/tags"; import { Notebooks } from "../../views/notebooks"; @@ -515,6 +518,7 @@ function RouteItem({ context?: { isCollapsed: boolean; collapse: () => void }; }) { const [location] = useLocation(); + const trash = useTrashStore((store) => store.trash); return ( { + const ok = await ConfirmDialog.show({ + title: strings.clearTrash(), + positiveButtonText: strings.clear(), + negativeButtonText: strings.cancel(), + message: strings.clearTrashDesc() + }); + if (!ok) return; + + try { + await useTrashStore.getState().clear(); + showToast("success", strings.trashCleared()); + } catch (e) { + if (e instanceof Error) + showToast( + "error", + `${strings.couldNotClearTrash()} ${strings.error()}: ${ + e.message + }` + ); + } + } + } + ] + : []), { type: "lazy-loader", key: "sidebar-items-loader", diff --git a/apps/web/src/views/trash.tsx b/apps/web/src/views/trash.tsx index a726edb65..3ea40da77 100644 --- a/apps/web/src/views/trash.tsx +++ b/apps/web/src/views/trash.tsx @@ -27,6 +27,7 @@ import { db } from "../common/db"; import { ListLoader } from "../components/loaders/list-loader"; import { ConfirmDialog } from "../dialogs/confirm"; import { strings } from "@notesnook/intl"; +import { ClearTrash } from "../components/icons"; function Trash() { useNavigate("trash", store.refresh); @@ -47,13 +48,13 @@ function Trash() { placeholder={} items={filteredItems || items} button={{ + Icon: ClearTrash, onClick: function () { ConfirmDialog.show({ title: strings.clearTrash(), - subtitle: strings.clearTrashDesc(), positiveButtonText: strings.clear(), negativeButtonText: strings.cancel(), - message: strings.areYouSure() + message: strings.clearTrashDesc() }).then(async (res) => { if (res) { try { diff --git a/packages/intl/locale/en.po b/packages/intl/locale/en.po index e99a73d8c..4c3e1e71c 100644 --- a/packages/intl/locale/en.po +++ b/packages/intl/locale/en.po @@ -13,7 +13,7 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: src/strings.ts:2410 +#: src/strings.ts:2411 msgid " \"Notebook > Notes\"" msgstr " \"Notebook > Notes\"" @@ -288,7 +288,7 @@ msgstr "{count, plural, one {Item restored} other {# items restored}}" msgid "{count, plural, one {Item unpublished} other {# items unpublished}}" msgstr "{count, plural, one {Item unpublished} other {# items unpublished}}" -#: src/strings.ts:2427 +#: src/strings.ts:2428 msgid "{count, plural, one {Move all notes in this notebook to trash} other {Move all notes in these notebooks to trash}}" msgstr "{count, plural, one {Move all notes in this notebook to trash} other {Move all notes in these notebooks to trash}}" @@ -491,7 +491,7 @@ msgstr "{count, plural, one {Unpublish item} other {Unpublish # items}}" msgid "{count, plural, one {Unpublish note} other {Unpublish # notes}}" msgstr "{count, plural, one {Unpublish note} other {Unpublish # notes}}" -#: src/strings.ts:2497 +#: src/strings.ts:2498 msgid "{count} characters" msgstr "{count} characters" @@ -499,7 +499,7 @@ msgstr "{count} characters" msgid "{days, plural, one {1 day} other {# days}}" msgstr "{days, plural, one {1 day} other {# days}}" -#: src/strings.ts:2557 +#: src/strings.ts:2558 msgid "{days} days free" msgstr "{days} days free" @@ -563,7 +563,7 @@ msgstr "{notes, plural, one {Export note} other {Export # notes}}" msgid "{percentage}% updating..." msgstr "{percentage}% updating..." -#: src/strings.ts:2541 +#: src/strings.ts:2542 msgid "{plan} plan" msgstr "{plan} plan" @@ -575,7 +575,7 @@ msgstr "{platform, select, android {{name} saved to selected path} other {{name} msgid "{platform, select, android {Backup file saved in \"Notesnook backups\" folder on your phone.} other {Backup file is saved in File Manager/Notesnook folder}}" msgstr "{platform, select, android {Backup file saved in \"Notesnook backups\" folder on your phone.} other {Backup file is saved in File Manager/Notesnook folder}}" -#: src/strings.ts:2357 +#: src/strings.ts:2358 msgid "{selected} selected" msgstr "{selected} selected" @@ -623,7 +623,7 @@ msgstr "2FA code is required()" msgid "2FA code sent via {method}" msgstr "2FA code sent via {method}" -#: src/strings.ts:2581 +#: src/strings.ts:2582 msgid "5 year plan (One time purchase)" msgstr "5 year plan (One time purchase)" @@ -659,15 +659,15 @@ msgstr "Account" msgid "Account password" msgstr "Account password" -#: src/strings.ts:2452 +#: src/strings.ts:2453 msgid "Actions for note: {title}" msgstr "Actions for note: {title}" -#: src/strings.ts:2453 +#: src/strings.ts:2454 msgid "Actions for notebook: {title}" msgstr "Actions for notebook: {title}" -#: src/strings.ts:2454 +#: src/strings.ts:2455 msgid "Actions for tag: {title}" msgstr "Actions for tag: {title}" @@ -703,7 +703,7 @@ msgstr "Add color" msgid "Add notebook" msgstr "Add notebook" -#: src/strings.ts:2479 +#: src/strings.ts:2480 msgid "Add notes" msgstr "Add notes" @@ -731,15 +731,15 @@ msgstr "Add tags" msgid "Add tags to multiple notes at once" msgstr "Add tags to multiple notes at once" -#: src/strings.ts:2244 +#: src/strings.ts:2245 msgid "Add to dictionary" msgstr "Add to dictionary" -#: src/strings.ts:2614 +#: src/strings.ts:2615 msgid "Add to home" msgstr "Add to home" -#: src/strings.ts:2477 +#: src/strings.ts:2478 msgid "Add to notebook" msgstr "Add to notebook" @@ -751,7 +751,7 @@ msgstr "Add your first note" msgid "Add your first notebook" msgstr "Add your first notebook" -#: src/strings.ts:2617 +#: src/strings.ts:2618 msgid "Adjust the line height of the editor" msgstr "Adjust the line height of the editor" @@ -763,15 +763,15 @@ msgstr "Advanced" msgid "After scanning the QR code image, the app will display a code that you can enter below." msgstr "After scanning the QR code image, the app will display a code that you can enter below." -#: src/strings.ts:2309 +#: src/strings.ts:2310 msgid "Align left" msgstr "Align left" -#: src/strings.ts:2310 +#: src/strings.ts:2311 msgid "Align right" msgstr "Align right" -#: src/strings.ts:2279 +#: src/strings.ts:2280 msgid "Alignment" msgstr "Alignment" @@ -783,7 +783,7 @@ msgstr "All" msgid "All attachments are end-to-end encrypted." msgstr "All attachments are end-to-end encrypted." -#: src/strings.ts:2404 +#: src/strings.ts:2405 msgid "All cached attachments have been cleared." msgstr "All cached attachments have been cleared." @@ -843,7 +843,7 @@ msgstr "Amount" msgid "An error occurred while migrating your data. You can logout of your account and try to relogin. However this is not recommended as it may result in some data loss if your data was not synced." msgstr "An error occurred while migrating your data. You can logout of your account and try to relogin. However this is not recommended as it may result in some data loss if your data was not synced." -#: src/strings.ts:2575 +#: src/strings.ts:2576 msgid "and" msgstr "and" @@ -855,7 +855,7 @@ msgstr "and " msgid "and get a chance to win free promo codes." msgstr "and get a chance to win free promo codes." -#: src/strings.ts:2534 +#: src/strings.ts:2535 msgid "and much more." msgstr "and much more." @@ -863,7 +863,7 @@ msgstr "and much more." msgid "and we will manually confirm your account." msgstr "and we will manually confirm your account." -#: src/strings.ts:2592 +#: src/strings.ts:2593 msgid "ANNOUNCEMENT" msgstr "ANNOUNCEMENT" @@ -914,7 +914,7 @@ msgid "Applying changes" msgstr "Applying changes" #: src/strings.ts:1530 -#: src/strings.ts:2484 +#: src/strings.ts:2485 msgid "Archive" msgstr "Archive" @@ -966,7 +966,7 @@ msgstr "Assign to..." msgid "Atleast 8 characters required" msgstr "Atleast 8 characters required" -#: src/strings.ts:2346 +#: src/strings.ts:2347 msgid "Attach image from URL" msgstr "Attach image from URL" @@ -979,11 +979,11 @@ msgid "attachment" msgstr "attachment" #: src/strings.ts:300 -#: src/strings.ts:2343 +#: src/strings.ts:2344 msgid "Attachment" msgstr "Attachment" -#: src/strings.ts:2447 +#: src/strings.ts:2448 msgid "Attachment manager" msgstr "Attachment manager" @@ -991,11 +991,11 @@ msgstr "Attachment manager" msgid "Attachment preview failed" msgstr "Attachment preview failed" -#: src/strings.ts:2397 +#: src/strings.ts:2398 msgid "Attachment recheck cancelled" msgstr "Attachment recheck cancelled" -#: src/strings.ts:2314 +#: src/strings.ts:2315 msgid "Attachment settings" msgstr "Attachment settings" @@ -1012,7 +1012,7 @@ msgstr "Attachments" msgid "Attachments cache cleared!" msgstr "Attachments cache cleared!" -#: src/strings.ts:2399 +#: src/strings.ts:2400 msgid "Attachments recheck complete" msgstr "Attachments recheck complete" @@ -1105,11 +1105,11 @@ msgstr "Available on iOS" msgid "Available on iOS & Android" msgstr "Available on iOS & Android" -#: src/strings.ts:2640 +#: src/strings.ts:2641 msgid "Back" msgstr "Back" -#: src/strings.ts:2302 +#: src/strings.ts:2303 msgid "Background color" msgstr "Background color" @@ -1197,27 +1197,27 @@ msgstr "Behavior" msgid "Behaviour" msgstr "Behaviour" -#: src/strings.ts:2471 +#: src/strings.ts:2472 msgid "Believer plan" msgstr "Believer plan" -#: src/strings.ts:2578 +#: src/strings.ts:2579 msgid "Best value" msgstr "Best value" -#: src/strings.ts:2460 +#: src/strings.ts:2461 msgid "Beta" msgstr "Beta" -#: src/strings.ts:2260 +#: src/strings.ts:2261 msgid "Bi-directional note link" msgstr "Bi-directional note link" -#: src/strings.ts:2554 +#: src/strings.ts:2555 msgid "billed annually at {price}" msgstr "billed annually at {price}" -#: src/strings.ts:2555 +#: src/strings.ts:2556 msgid "billed monthly at {price}" msgstr "billed monthly at {price}" @@ -1245,11 +1245,11 @@ msgstr "Biometrics authentication failed. Please try again." msgid "Biometrics not enrolled" msgstr "Biometrics not enrolled" -#: src/strings.ts:2256 +#: src/strings.ts:2257 msgid "Bold" msgstr "Bold" -#: src/strings.ts:2409 +#: src/strings.ts:2410 msgid "Boost your productivity with Notebooks and organize your notes." msgstr "Boost your productivity with Notebooks and organize your notes." @@ -1257,7 +1257,7 @@ msgstr "Boost your productivity with Notebooks and organize your notes." msgid "Browse" msgstr "Browse" -#: src/strings.ts:2273 +#: src/strings.ts:2274 msgid "Bullet list" msgstr "Bullet list" @@ -1265,7 +1265,7 @@ msgstr "Bullet list" msgid "By" msgstr "By" -#: src/strings.ts:2573 +#: src/strings.ts:2574 msgid "By joining you agree to our" msgstr "By joining you agree to our" @@ -1273,11 +1273,11 @@ msgstr "By joining you agree to our" msgid "By signing up, you agree to our " msgstr "By signing up, you agree to our " -#: src/strings.ts:2334 +#: src/strings.ts:2335 msgid "Callout" msgstr "Callout" -#: src/strings.ts:2514 +#: src/strings.ts:2515 msgid "Can I cancel my free trial anytime?" msgstr "Can I cancel my free trial anytime?" @@ -1285,11 +1285,11 @@ msgstr "Can I cancel my free trial anytime?" msgid "Cancel" msgstr "Cancel" -#: src/strings.ts:2571 +#: src/strings.ts:2572 msgid "Cancel anytime, subscription auto-renews." msgstr "Cancel anytime, subscription auto-renews." -#: src/strings.ts:2536 +#: src/strings.ts:2537 msgid "Cancel anytime." msgstr "Cancel anytime." @@ -1309,24 +1309,24 @@ msgstr "Cancel subscription" msgid "Cancel upload" msgstr "Cancel upload" -#: src/strings.ts:2301 +#: src/strings.ts:2302 msgid "Cell background color" msgstr "Cell background color" -#: src/strings.ts:2303 +#: src/strings.ts:2304 msgid "Cell border color" msgstr "Cell border color" -#: src/strings.ts:2305 #: src/strings.ts:2306 +#: src/strings.ts:2307 msgid "Cell border width" msgstr "Cell border width" -#: src/strings.ts:2287 +#: src/strings.ts:2288 msgid "Cell properties" msgstr "Cell properties" -#: src/strings.ts:2304 +#: src/strings.ts:2305 msgid "Cell text color" msgstr "Cell text color" @@ -1362,7 +1362,7 @@ msgstr "Change email address" msgid "Change how the app behaves in different situations" msgstr "Change how the app behaves in different situations" -#: src/strings.ts:2352 +#: src/strings.ts:2353 msgid "Change language" msgstr "Change language" @@ -1374,7 +1374,7 @@ msgstr "Change notification sound" msgid "Change password" msgstr "Change password" -#: src/strings.ts:2585 +#: src/strings.ts:2586 msgid "Change plan" msgstr "Change plan" @@ -1414,7 +1414,7 @@ msgstr "Changes from other devices won't be updated in the editor in real-time." msgid "Changing password is an irreversible process. You will be logged out from all your devices. Please make sure you do not close the app while your password is changing and have good internet connection." msgstr "Changing password is an irreversible process. You will be logged out from all your devices. Please make sure you do not close the app while your password is changing and have good internet connection." -#: src/strings.ts:2490 +#: src/strings.ts:2491 msgid "Characters" msgstr "Characters" @@ -1442,7 +1442,7 @@ msgstr "Check roadmap" msgid "Check your spam folder if you haven't received an email yet." msgstr "Check your spam folder if you haven't received an email yet." -#: src/strings.ts:2401 +#: src/strings.ts:2402 msgid "Checking all attachments" msgstr "Checking all attachments" @@ -1454,15 +1454,15 @@ msgstr "Checking for new version" msgid "Checking for updates" msgstr "Checking for updates" -#: src/strings.ts:2400 +#: src/strings.ts:2401 msgid "Checking note attachments" msgstr "Checking note attachments" -#: src/strings.ts:2275 +#: src/strings.ts:2276 msgid "Checklist" msgstr "Checklist" -#: src/strings.ts:2329 +#: src/strings.ts:2330 msgid "Choose a block to insert" msgstr "Choose a block to insert" @@ -1474,7 +1474,7 @@ msgstr "Choose a recovery method" msgid "Choose backup format" msgstr "Choose backup format" -#: src/strings.ts:2365 +#: src/strings.ts:2366 msgid "Choose custom color" msgstr "Choose custom color" @@ -1486,7 +1486,7 @@ msgstr "Choose from pre-built themes or create your own" msgid "Choose how dates are displayed in the app" msgstr "Choose how dates are displayed in the app" -#: src/strings.ts:2620 +#: src/strings.ts:2621 msgid "Choose how day is displayed in the app" msgstr "Choose how day is displayed in the app" @@ -1502,7 +1502,7 @@ msgstr "Choose how time is displayed in the app" msgid "Choose how you want to secure your notes locally." msgstr "Choose how you want to secure your notes locally." -#: src/strings.ts:2625 +#: src/strings.ts:2626 msgid "Choose what day to display as the first day of the week" msgstr "Choose what day to display as the first day of the week" @@ -1526,7 +1526,7 @@ msgstr "Clear" msgid "Clear all cached attachments. Current cache size: {cacheSize}" msgstr "Clear all cached attachments. Current cache size: {cacheSize}" -#: src/strings.ts:2269 +#: src/strings.ts:2270 msgid "Clear all formatting" msgstr "Clear all formatting" @@ -1538,7 +1538,7 @@ msgstr "Clear attachments cache?" msgid "Clear cache" msgstr "Clear cache" -#: src/strings.ts:2363 +#: src/strings.ts:2364 msgid "Clear completed tasks" msgstr "Clear completed tasks" @@ -1596,7 +1596,11 @@ msgstr "" "\n" "**Only use this for troubleshooting purposes. If you are having persistent issues, it is recommended that you reach out to us via support@streetwriters.co so we can help you resolve it permanently.**" -#: src/strings.ts:2607 +#: src/strings.ts:2229 +msgid "Clearing trash will permanently delete all the items in your trash. This action is IRREVERSIBLE." +msgstr "Clearing trash will permanently delete all the items in your trash. This action is IRREVERSIBLE." + +#: src/strings.ts:2608 msgid "Click here to directly claim the promotion." msgstr "Click here to directly claim the promotion." @@ -1612,15 +1616,15 @@ msgstr "Click to preview" msgid "Click to remove" msgstr "Click to remove" -#: src/strings.ts:2392 +#: src/strings.ts:2393 msgid "Click to reset {title}" msgstr "Click to reset {title}" -#: src/strings.ts:2615 +#: src/strings.ts:2616 msgid "Click to save" msgstr "Click to save" -#: src/strings.ts:2611 +#: src/strings.ts:2612 msgid "Click to update" msgstr "Click to update" @@ -1632,11 +1636,11 @@ msgstr "Close" msgid "Close all" msgstr "Close all" -#: src/strings.ts:2450 +#: src/strings.ts:2451 msgid "Close all tabs" msgstr "Close all tabs" -#: src/strings.ts:2449 +#: src/strings.ts:2450 msgid "Close current tab" msgstr "Close current tab" @@ -1656,19 +1660,19 @@ msgstr "Close to the left" msgid "Close to the right" msgstr "Close to the right" -#: src/strings.ts:2528 +#: src/strings.ts:2529 msgid "cloud storage space for storing images and files." msgstr "cloud storage space for storing images and files." -#: src/strings.ts:2267 +#: src/strings.ts:2268 msgid "Code" msgstr "Code" -#: src/strings.ts:2331 +#: src/strings.ts:2332 msgid "Code block" msgstr "Code block" -#: src/strings.ts:2268 +#: src/strings.ts:2269 msgid "Code remove" msgstr "Code remove" @@ -1705,11 +1709,11 @@ msgstr "colors" msgid "Colors" msgstr "Colors" -#: src/strings.ts:2285 +#: src/strings.ts:2286 msgid "Column properties" msgstr "Column properties" -#: src/strings.ts:2441 +#: src/strings.ts:2442 msgid "Command palette" msgstr "Command palette" @@ -1717,7 +1721,7 @@ msgstr "Command palette" msgid "Community" msgstr "Community" -#: src/strings.ts:2548 +#: src/strings.ts:2549 msgid "Compare plans" msgstr "Compare plans" @@ -1737,11 +1741,11 @@ msgstr "Compress images before uploading" msgid "Compressed images are uploaded in Full HD resolution and usually are good enough for most use cases." msgstr "Compressed images are uploaded in Full HD resolution and usually are good enough for most use cases." -#: src/strings.ts:2251 +#: src/strings.ts:2252 msgid "Configure" msgstr "Configure" -#: src/strings.ts:2406 +#: src/strings.ts:2407 msgid "Configure server URLs for Notesnook" msgstr "Configure server URLs for Notesnook" @@ -1765,7 +1769,7 @@ msgstr "Confirm password" msgid "Confirm pin" msgstr "Confirm pin" -#: src/strings.ts:2639 +#: src/strings.ts:2640 msgid "Confirmation email sent" msgstr "Confirmation email sent" @@ -1814,7 +1818,7 @@ msgstr "Copy as{0}" msgid "Copy codes" msgstr "Copy codes" -#: src/strings.ts:2247 +#: src/strings.ts:2248 msgid "Copy image" msgstr "Copy image" @@ -1822,7 +1826,7 @@ msgstr "Copy image" msgid "Copy link" msgstr "Copy link" -#: src/strings.ts:2246 +#: src/strings.ts:2247 msgid "Copy link text" msgstr "Copy link text" @@ -1922,7 +1926,7 @@ msgstr "Create vault" msgid "Create your account" msgstr "Create your account" -#: src/strings.ts:2229 +#: src/strings.ts:2230 msgid "Created at" msgstr "Created at" @@ -1991,7 +1995,7 @@ msgstr "Customize the toolbar in the note editor" msgid "Customize toolbar" msgstr "Customize toolbar" -#: src/strings.ts:2245 +#: src/strings.ts:2246 msgid "Cut" msgstr "Cut" @@ -2052,7 +2056,7 @@ msgstr "Date uploaded" msgid "Day" msgstr "Day" -#: src/strings.ts:2619 +#: src/strings.ts:2620 msgid "Day format" msgstr "Day format" @@ -2076,7 +2080,7 @@ msgstr "Debug logs downloaded" msgid "Debugging" msgstr "Debugging" -#: src/strings.ts:2394 +#: src/strings.ts:2395 msgid "Decrease {title}" msgstr "Decrease {title}" @@ -2109,7 +2113,7 @@ msgstr "Default notebook cleared" msgid "Default screen to open on app launch" msgstr "Default screen to open on app launch" -#: src/strings.ts:2481 +#: src/strings.ts:2482 msgid "Default sidebar tab" msgstr "Default sidebar tab" @@ -2133,11 +2137,11 @@ msgstr "Delete account" msgid "Delete collapsed section" msgstr "Delete collapsed section" -#: src/strings.ts:2292 +#: src/strings.ts:2293 msgid "Delete column" msgstr "Delete column" -#: src/strings.ts:2636 +#: src/strings.ts:2637 msgid "Delete data" msgstr "Delete data" @@ -2145,7 +2149,7 @@ msgstr "Delete data" msgid "Delete group" msgstr "Delete group" -#: src/strings.ts:2366 +#: src/strings.ts:2367 msgid "Delete mode" msgstr "Delete mode" @@ -2157,11 +2161,11 @@ msgstr "Delete notes in this vault" msgid "Delete permanently" msgstr "Delete permanently" -#: src/strings.ts:2299 +#: src/strings.ts:2300 msgid "Delete row" msgstr "Delete row" -#: src/strings.ts:2300 +#: src/strings.ts:2301 msgid "Delete table" msgstr "Delete table" @@ -2241,10 +2245,6 @@ msgstr "Disputed" msgid "Do you enjoy using Notesnook?" msgstr "Do you enjoy using Notesnook?" -#: src/strings.ts:2228 -msgid "Do you want to clear the trash?" -msgstr "Do you want to clear the trash?" - #: src/strings.ts:1263 msgid "Documentation" msgstr "Documentation" @@ -2305,7 +2305,7 @@ msgstr "Download" msgid "Download all attachments" msgstr "Download all attachments" -#: src/strings.ts:2315 +#: src/strings.ts:2316 msgid "Download attachment" msgstr "Download attachment" @@ -2370,7 +2370,7 @@ msgstr "Drop the files here" msgid "Drop your files here to attach" msgstr "Drop your files here to attach" -#: src/strings.ts:2558 +#: src/strings.ts:2559 msgid "Due {date}" msgstr "Due {date}" @@ -2378,7 +2378,7 @@ msgstr "Due {date}" msgid "Due date" msgstr "Due date" -#: src/strings.ts:2556 +#: src/strings.ts:2557 msgid "Due today" msgstr "Due today" @@ -2390,7 +2390,7 @@ msgstr "Duplicate" msgid "Earliest first" msgstr "Earliest first" -#: src/strings.ts:2418 +#: src/strings.ts:2419 msgid "Easy access" msgstr "Easy access" @@ -2398,7 +2398,7 @@ msgstr "Easy access" msgid "Edit" msgstr "Edit" -#: src/strings.ts:2626 +#: src/strings.ts:2627 msgid "Edit creation date" msgstr "Edit creation date" @@ -2406,12 +2406,12 @@ msgstr "Edit creation date" msgid "Edit internal link" msgstr "Edit internal link" -#: src/strings.ts:2234 -#: src/strings.ts:2262 +#: src/strings.ts:2235 +#: src/strings.ts:2263 msgid "Edit link" msgstr "Edit link" -#: src/strings.ts:2474 +#: src/strings.ts:2475 msgid "Edit profile" msgstr "Edit profile" @@ -2428,7 +2428,7 @@ msgstr "Edit your full name" msgid "Editor" msgstr "Editor" -#: src/strings.ts:2582 +#: src/strings.ts:2583 msgid "Education plan" msgstr "Education plan" @@ -2436,7 +2436,7 @@ msgstr "Education plan" msgid "Email" msgstr "Email" -#: src/strings.ts:2431 +#: src/strings.ts:2432 msgid "Email copied" msgstr "Email copied" @@ -2460,15 +2460,15 @@ msgstr "Email support" msgid "Email updated to {email}" msgstr "Email updated to {email}" -#: src/strings.ts:2341 +#: src/strings.ts:2342 msgid "Embed" msgstr "Embed" -#: src/strings.ts:2321 +#: src/strings.ts:2322 msgid "Embed properties" msgstr "Embed properties" -#: src/strings.ts:2317 +#: src/strings.ts:2318 msgid "Embed settings" msgstr "Embed settings" @@ -2488,11 +2488,11 @@ msgstr "Enable app lock" msgid "Enable editor margins" msgstr "Enable editor margins" -#: src/strings.ts:2465 +#: src/strings.ts:2466 msgid "Enable ligatures for common symbols like →, ←, etc" msgstr "Enable ligatures for common symbols like →, ←, etc" -#: src/strings.ts:2381 +#: src/strings.ts:2382 msgid "Enable regex" msgstr "Enable regex" @@ -2512,7 +2512,7 @@ msgstr "Encrypt your backups for added security" msgid "Encrypted and synced" msgstr "Encrypted and synced" -#: src/strings.ts:2241 +#: src/strings.ts:2242 msgid "Encrypted backup" msgstr "Encrypted backup" @@ -2564,7 +2564,7 @@ msgstr "Enter code from authenticator app" msgid "Enter email address" msgstr "Enter email address" -#: src/strings.ts:2369 +#: src/strings.ts:2370 msgid "Enter embed source URL" msgstr "Enter embed source URL" @@ -2608,7 +2608,7 @@ msgstr "Enter the 6 digit code sent to your email to continue logging in" msgid "Enter the 6 digit code sent to your phone number to continue logging in" msgstr "Enter the 6 digit code sent to your phone number to continue logging in" -#: src/strings.ts:2433 +#: src/strings.ts:2434 msgid "Enter the gift code to redeem your subscription." msgstr "Enter the gift code to redeem your subscription." @@ -2616,7 +2616,7 @@ msgstr "Enter the gift code to redeem your subscription." msgid "Enter the recovery code to continue logging in" msgstr "Enter the recovery code to continue logging in" -#: src/strings.ts:2618 +#: src/strings.ts:2619 msgid "Enter title" msgstr "Enter title" @@ -2632,7 +2632,7 @@ msgstr "Enter your new email" msgid "Enter your username" msgstr "Enter your username" -#: src/strings.ts:2425 +#: src/strings.ts:2426 msgid "Error" msgstr "Error" @@ -2668,7 +2668,7 @@ msgstr "Errors" msgid "Errors in {count} attachments" msgstr "Errors in {count} attachments" -#: src/strings.ts:2470 +#: src/strings.ts:2471 msgid "Essential plan" msgstr "Essential plan" @@ -2676,23 +2676,23 @@ msgstr "Essential plan" msgid "Events server" msgstr "Events server" -#: src/strings.ts:2411 +#: src/strings.ts:2412 msgid "Every Notebook can have notes and sub notebooks." msgstr "Every Notebook can have notes and sub notebooks." -#: src/strings.ts:2413 +#: src/strings.ts:2414 msgid "Everything related to my job in one place." msgstr "Everything related to my job in one place." -#: src/strings.ts:2422 +#: src/strings.ts:2423 msgid "Everything related to my school in one place." msgstr "Everything related to my school in one place." -#: src/strings.ts:2439 +#: src/strings.ts:2440 msgid "Execute" msgstr "Execute" -#: src/strings.ts:2438 +#: src/strings.ts:2439 msgid "Execute a command..." msgstr "Execute a command..." @@ -2700,11 +2700,11 @@ msgstr "Execute a command..." msgid "Exit fullscreen" msgstr "Exit fullscreen" -#: src/strings.ts:2373 +#: src/strings.ts:2374 msgid "Expand" msgstr "Expand" -#: src/strings.ts:2466 +#: src/strings.ts:2467 msgid "Expand sidebar" msgstr "Expand sidebar" @@ -2712,11 +2712,11 @@ msgstr "Expand sidebar" msgid "Experience the next level of private note taking\"" msgstr "Experience the next level of private note taking\"" -#: src/strings.ts:2632 +#: src/strings.ts:2633 msgid "Expiry date" msgstr "Expiry date" -#: src/strings.ts:2539 +#: src/strings.ts:2540 msgid "Explore all plans" msgstr "Explore all plans" @@ -2741,7 +2741,7 @@ msgstr "Export all notes as pdf, markdown, html or text in a single zip file" msgid "Export as{0}" msgstr "Export as{0}" -#: src/strings.ts:2633 +#: src/strings.ts:2634 msgid "Export CSV" msgstr "Export CSV" @@ -2765,11 +2765,11 @@ msgstr "EXTREMELY DANGEROUS! This action is irreversible. All your data includin msgid "Faced an issue or have a suggestion? Click here to create a bug report" msgstr "Faced an issue or have a suggestion? Click here to create a bug report" -#: src/strings.ts:2403 +#: src/strings.ts:2404 msgid "Failed" msgstr "Failed" -#: src/strings.ts:2637 +#: src/strings.ts:2638 msgid "Failed to attach file" msgstr "Failed to attach file" @@ -2845,7 +2845,7 @@ msgstr "Failed to zip files" msgid "Fallback method for 2FA enabled" msgstr "Fallback method for 2FA enabled" -#: src/strings.ts:2549 +#: src/strings.ts:2550 msgid "FAQs" msgstr "FAQs" @@ -2858,15 +2858,15 @@ msgstr "Favorite" msgid "Favorites" msgstr "Favorites" -#: src/strings.ts:2547 +#: src/strings.ts:2548 msgid "Featured on" msgstr "Featured on" -#: src/strings.ts:2415 +#: src/strings.ts:2416 msgid "February 2022 Week 2" msgstr "February 2022 Week 2" -#: src/strings.ts:2416 +#: src/strings.ts:2417 msgid "February 2022 Week 3" msgstr "February 2022 Week 3" @@ -2906,7 +2906,7 @@ msgstr "Filter attachments by filename, type or hash" msgid "Filter languages" msgstr "Filter languages" -#: src/strings.ts:2604 +#: src/strings.ts:2605 msgid "Finish your purchase in the browser." msgstr "Finish your purchase in the browser." @@ -2938,19 +2938,19 @@ msgstr "Follow us on X" msgid "Follow us on X for updates and news about Notesnook" msgstr "Follow us on X for updates and news about Notesnook" -#: src/strings.ts:2276 +#: src/strings.ts:2277 msgid "Font family" msgstr "Font family" -#: src/strings.ts:2463 +#: src/strings.ts:2464 msgid "Font ligatures" msgstr "Font ligatures" -#: src/strings.ts:2277 +#: src/strings.ts:2278 msgid "Font size" msgstr "Font size" -#: src/strings.ts:2521 +#: src/strings.ts:2522 msgid "For a monthly subscription, you can get a refund within 7 days of purchase. For a yearly subscription, we offer a full refund within 14 days of purchase. For a 5 year subscription, you can request a refund within 30 days of purchase." msgstr "For a monthly subscription, you can get a refund within 7 days of purchase. For a yearly subscription, we offer a full refund within 14 days of purchase. For a 5 year subscription, you can request a refund within 30 days of purchase." @@ -2962,7 +2962,7 @@ msgstr "For a more integrated user experience, try out Notesnook for {platform}" msgid "for help regarding how to use the Notesnook Importer." msgstr "for help regarding how to use the Notesnook Importer." -#: src/strings.ts:2530 +#: src/strings.ts:2531 msgid "for locking your notes as soon as app enters background" msgstr "for locking your notes as soon as app enters background" @@ -3000,11 +3000,11 @@ msgstr "" msgid "Forgot password?" msgstr "Forgot password?" -#: src/strings.ts:2564 +#: src/strings.ts:2565 msgid "Free {duration} day trial, cancel any time" msgstr "Free {duration} day trial, cancel any time" -#: src/strings.ts:2468 +#: src/strings.ts:2469 msgid "Free plan" msgstr "Free plan" @@ -3016,11 +3016,11 @@ msgstr "Fri" msgid "Friday" msgstr "Friday" -#: src/strings.ts:2371 +#: src/strings.ts:2372 msgid "From code" msgstr "From code" -#: src/strings.ts:2368 +#: src/strings.ts:2369 msgid "From URL" msgstr "From URL" @@ -3032,7 +3032,7 @@ msgstr "Full name updated" msgid "Full offline mode" msgstr "Full offline mode" -#: src/strings.ts:2323 +#: src/strings.ts:2324 msgid "Full screen" msgstr "Full screen" @@ -3064,7 +3064,7 @@ msgstr "Get Notesnook Pro" msgid "Get Notesnook Pro to enable automatic backups" msgstr "Get Notesnook Pro to enable automatic backups" -#: src/strings.ts:2407 +#: src/strings.ts:2408 msgid "Get Priority support" msgstr "Get Priority support" @@ -3076,7 +3076,7 @@ msgstr "Get Pro" msgid "Get started" msgstr "Get started" -#: src/strings.ts:2527 +#: src/strings.ts:2528 msgid "Get this and so much more:" msgstr "Get this and so much more:" @@ -3096,11 +3096,11 @@ msgstr "Getting recovery codes" msgid "GNU GENERAL PUBLIC LICENSE Version 3" msgstr "GNU GENERAL PUBLIC LICENSE Version 3" -#: src/strings.ts:2605 +#: src/strings.ts:2606 msgid "Go back" msgstr "Go back" -#: src/strings.ts:2446 +#: src/strings.ts:2447 msgid "Go back in tab" msgstr "Go back in tab" @@ -3112,7 +3112,7 @@ msgstr "Go back to notebooks" msgid "Go back to tags" msgstr "Go back to tags" -#: src/strings.ts:2445 +#: src/strings.ts:2446 msgid "Go forward in tab" msgstr "Go forward in tab" @@ -3136,11 +3136,11 @@ msgstr "Go to previous page" msgid "Go to web app" msgstr "Go to web app" -#: src/strings.ts:2538 +#: src/strings.ts:2539 msgid "Google will remind you 2 days before your trial ends." msgstr "Google will remind you 2 days before your trial ends." -#: src/strings.ts:2565 +#: src/strings.ts:2566 msgid "Google will remind you before your trial ends" msgstr "Google will remind you before your trial ends" @@ -3168,19 +3168,19 @@ msgstr "Hash copied" msgid "Having problems with sync?" msgstr "Having problems with sync?" -#: src/strings.ts:2553 +#: src/strings.ts:2554 msgid "hdImages" msgstr "hdImages" -#: src/strings.ts:2349 +#: src/strings.ts:2350 msgid "Heading {level}" msgstr "Heading {level}" -#: src/strings.ts:2278 +#: src/strings.ts:2279 msgid "Headings" msgstr "Headings" -#: src/strings.ts:2384 +#: src/strings.ts:2385 msgid "Height" msgstr "Height" @@ -3204,7 +3204,7 @@ msgstr "Hide app contents when you switch to other apps. This will also disable msgid "Hide note title" msgstr "Hide note title" -#: src/strings.ts:2281 +#: src/strings.ts:2282 msgid "Highlight" msgstr "Highlight" @@ -3224,7 +3224,7 @@ msgstr "Homepage" msgid "Homepage changed to {name}" msgstr "Homepage changed to {name}" -#: src/strings.ts:2330 +#: src/strings.ts:2331 msgid "Horizontal rule" msgstr "Horizontal rule" @@ -3240,7 +3240,7 @@ msgstr "How to fix it?" msgid "hr" msgstr "hr" -#: src/strings.ts:2498 +#: src/strings.ts:2499 msgid "I already have an account" msgstr "I already have an account" @@ -3268,7 +3268,7 @@ msgstr "I have a recovery code" msgid "I have saved my key" msgstr "I have saved my key" -#: src/strings.ts:2424 +#: src/strings.ts:2425 msgid "I love cooking and collecting recipes." msgstr "I love cooking and collecting recipes." @@ -3320,7 +3320,7 @@ msgstr "If you face any issue, you can reach out to us anytime." msgid "If you want to ask something in general or need some assistance, we would suggest that you" msgstr "If you want to ask something in general or need some assistance, we would suggest that you" -#: src/strings.ts:2335 +#: src/strings.ts:2336 msgid "Image" msgstr "Image" @@ -3328,11 +3328,11 @@ msgstr "Image" msgid "Image Compression" msgstr "Image Compression" -#: src/strings.ts:2311 +#: src/strings.ts:2312 msgid "Image properties" msgstr "Image properties" -#: src/strings.ts:2307 +#: src/strings.ts:2308 msgid "Image settings" msgstr "Image settings" @@ -3360,7 +3360,7 @@ msgstr "Import & export" msgid "Import completed" msgstr "Import completed" -#: src/strings.ts:2634 +#: src/strings.ts:2635 msgid "Import CSV" msgstr "Import CSV" @@ -3380,47 +3380,47 @@ msgstr "Incoming note" msgid "Incorrect {type}" msgstr "Incorrect {type}" -#: src/strings.ts:2393 +#: src/strings.ts:2394 msgid "Increase {title}" msgstr "Increase {title}" -#: src/strings.ts:2235 +#: src/strings.ts:2236 msgid "Insert" msgstr "Insert" -#: src/strings.ts:2390 +#: src/strings.ts:2391 msgid "Insert a {rows}x{columns} table" msgstr "Insert a {rows}x{columns} table" -#: src/strings.ts:2340 +#: src/strings.ts:2341 msgid "Insert a table" msgstr "Insert a table" -#: src/strings.ts:2342 +#: src/strings.ts:2343 msgid "Insert an embed" msgstr "Insert an embed" -#: src/strings.ts:2336 +#: src/strings.ts:2337 msgid "Insert an image" msgstr "Insert an image" -#: src/strings.ts:2288 +#: src/strings.ts:2289 msgid "Insert column left" msgstr "Insert column left" -#: src/strings.ts:2289 +#: src/strings.ts:2290 msgid "Insert column right" msgstr "Insert column right" -#: src/strings.ts:2233 +#: src/strings.ts:2234 msgid "Insert link" msgstr "Insert link" -#: src/strings.ts:2295 +#: src/strings.ts:2296 msgid "Insert row above" msgstr "Insert row above" -#: src/strings.ts:2296 +#: src/strings.ts:2297 msgid "Insert row below" msgstr "Insert row below" @@ -3448,7 +3448,7 @@ msgstr "Invalid CORS proxy url" msgid "Invalid email" msgstr "Invalid email" -#: src/strings.ts:2642 +#: src/strings.ts:2643 msgid "Invalid recovery key. Make sure to input your account recovery key, not a 2FA recovery code." msgstr "Invalid recovery key. Make sure to input your account recovery key, not a 2FA recovery code." @@ -3469,7 +3469,7 @@ msgstr "It seems that your changes could not be saved. What to do next:" msgid "It took us a year to bring Notesnook to life. Share your experience and suggestions to help us improve it." msgstr "It took us a year to bring Notesnook to life. Share your experience and suggestions to help us improve it." -#: src/strings.ts:2257 +#: src/strings.ts:2258 msgid "Italic" msgstr "Italic" @@ -3538,7 +3538,7 @@ msgstr "Keep your data safe" msgid "Languages" msgstr "Languages" -#: src/strings.ts:2230 +#: src/strings.ts:2231 msgid "Last edited at" msgstr "Last edited at" @@ -3586,7 +3586,7 @@ msgstr "License" msgid "Licensed under {license}" msgstr "Licensed under {license}" -#: src/strings.ts:2326 +#: src/strings.ts:2327 msgid "Lift list item" msgstr "Lift list item" @@ -3594,11 +3594,11 @@ msgstr "Lift list item" msgid "Light" msgstr "Light" -#: src/strings.ts:2356 +#: src/strings.ts:2357 msgid "Line {line}, Column {column}" msgstr "Line {line}, Column {column}" -#: src/strings.ts:2616 +#: src/strings.ts:2617 msgid "Line height" msgstr "Line height" @@ -3606,7 +3606,7 @@ msgstr "Line height" msgid "Line spacing changed" msgstr "Line spacing changed" -#: src/strings.ts:2261 +#: src/strings.ts:2262 msgid "Link" msgstr "Link" @@ -3618,15 +3618,15 @@ msgstr "Link copied" msgid "Link notebooks" msgstr "Link notebooks" -#: src/strings.ts:2475 +#: src/strings.ts:2476 msgid "Link notes" msgstr "Link notes" -#: src/strings.ts:2266 +#: src/strings.ts:2267 msgid "Link settings" msgstr "Link settings" -#: src/strings.ts:2386 +#: src/strings.ts:2387 msgid "Link text" msgstr "Link text" @@ -3771,7 +3771,7 @@ msgstr "Login successful" msgid "Login to encrypt and sync notes" msgstr "Login to encrypt and sync notes" -#: src/strings.ts:2609 +#: src/strings.ts:2610 msgid "Login to upload attachments. [Read more](https://help.notesnook.com/faqs/login-to-upload-attachments)" msgstr "Login to upload attachments. [Read more](https://help.notesnook.com/faqs/login-to-upload-attachments)" @@ -3795,7 +3795,7 @@ msgstr "Logout from this device" msgid "Long press on any item in list to enter multi-select mode." msgstr "Long press on any item in list to enter multi-select mode." -#: src/strings.ts:2361 +#: src/strings.ts:2362 msgid "Make task list readonly" msgstr "Make task list readonly" @@ -3847,19 +3847,19 @@ msgstr "Markdown shortcuts" msgid "Marketing emails" msgstr "Marketing emails" -#: src/strings.ts:2374 +#: src/strings.ts:2375 msgid "Match case" msgstr "Match case" -#: src/strings.ts:2375 +#: src/strings.ts:2376 msgid "Match whole word" msgstr "Match whole word" -#: src/strings.ts:2283 +#: src/strings.ts:2284 msgid "Math (inline)" msgstr "Math (inline)" -#: src/strings.ts:2333 +#: src/strings.ts:2334 msgid "Math & formulas" msgstr "Math & formulas" @@ -3871,7 +3871,7 @@ msgstr "Maximize" msgid "Meet other privacy-minded people & talk to us directly about your concerns, issues and suggestions." msgstr "Meet other privacy-minded people & talk to us directly about your concerns, issues and suggestions." -#: src/strings.ts:2417 +#: src/strings.ts:2418 msgid "Meetings" msgstr "Meetings" @@ -3879,7 +3879,7 @@ msgstr "Meetings" msgid "Member since {date}" msgstr "Member since {date}" -#: src/strings.ts:2294 +#: src/strings.ts:2295 msgid "Merge cells" msgstr "Merge cells" @@ -3956,7 +3956,7 @@ msgstr "Month" msgid "Monthly" msgstr "Monthly" -#: src/strings.ts:2313 +#: src/strings.ts:2314 msgid "More" msgstr "More" @@ -3968,15 +3968,15 @@ msgstr "Most relevant first" msgid "Move" msgstr "Move" -#: src/strings.ts:2362 +#: src/strings.ts:2363 msgid "Move all checked tasks to bottom" msgstr "Move all checked tasks to bottom" -#: src/strings.ts:2290 +#: src/strings.ts:2291 msgid "Move column left" msgstr "Move column left" -#: src/strings.ts:2291 +#: src/strings.ts:2292 msgid "Move column right" msgstr "Move column right" @@ -3988,11 +3988,11 @@ msgstr "Move notebook" msgid "Move notes" msgstr "Move notes" -#: src/strings.ts:2298 +#: src/strings.ts:2299 msgid "Move row down" msgstr "Move row down" -#: src/strings.ts:2297 +#: src/strings.ts:2298 msgid "Move row up" msgstr "Move row up" @@ -4020,7 +4020,7 @@ msgstr "Name" msgid "Native high-performance encryption" msgstr "Native high-performance encryption" -#: src/strings.ts:2442 +#: src/strings.ts:2443 msgid "Navigate" msgstr "Navigate" @@ -4080,7 +4080,7 @@ msgstr "New reminder" msgid "New tab" msgstr "New tab" -#: src/strings.ts:2448 +#: src/strings.ts:2449 msgid "New tag" msgstr "New tag" @@ -4104,11 +4104,11 @@ msgstr "Newly created notes will be uncategorized" msgid "Next" msgstr "Next" -#: src/strings.ts:2378 +#: src/strings.ts:2379 msgid "Next match" msgstr "Next match" -#: src/strings.ts:2443 +#: src/strings.ts:2444 msgid "Next tab" msgstr "Next tab" @@ -4164,7 +4164,7 @@ msgstr "No links found" msgid "No note history available for this device." msgstr "No note history available for this device." -#: src/strings.ts:2492 +#: src/strings.ts:2493 msgid "No notebooks selected to move" msgstr "No notebooks selected to move" @@ -4172,7 +4172,7 @@ msgstr "No notebooks selected to move" msgid "No one can view this {type} except you." msgstr "No one can view this {type} except you." -#: src/strings.ts:2612 +#: src/strings.ts:2613 msgid "No password" msgstr "No password" @@ -4266,7 +4266,7 @@ msgstr "notebook" msgid "Notebook" msgstr "Notebook" -#: src/strings.ts:2478 +#: src/strings.ts:2479 msgid "Notebook added" msgstr "Notebook added" @@ -4284,7 +4284,7 @@ msgstr "Notebooks" msgid "NOTEBOOKS" msgstr "NOTEBOOKS" -#: src/strings.ts:2240 +#: src/strings.ts:2241 msgid "Notebooks are the best way to organize your notes." msgstr "Notebooks are the best way to organize your notes." @@ -4305,15 +4305,15 @@ msgstr "Notes exported as {path} successfully" msgid "notes imported" msgstr "notes imported" -#: src/strings.ts:2542 +#: src/strings.ts:2543 msgid "Notesnook" msgstr "Notesnook" -#: src/strings.ts:2597 +#: src/strings.ts:2598 msgid "Notesnook Circle" msgstr "Notesnook Circle" -#: src/strings.ts:2599 +#: src/strings.ts:2600 msgid "Notesnook Circle brings together trusted partners who share our commitment to privacy, transparency, and user freedom." msgstr "Notesnook Circle brings together trusted partners who share our commitment to privacy, transparency, and user freedom." @@ -4361,7 +4361,7 @@ msgstr "Notifications" msgid "Notifications disabled" msgstr "Notifications disabled" -#: src/strings.ts:2274 +#: src/strings.ts:2275 msgid "Numbered list" msgstr "Numbered list" @@ -4401,7 +4401,7 @@ msgstr "Oldest - newest" msgid "Once your password is changed, please make sure to save the new account recovery key" msgstr "Once your password is changed, please make sure to save the new account recovery key" -#: src/strings.ts:2560 +#: src/strings.ts:2561 msgid "One time purchase, no auto-renewal" msgstr "One time purchase, no auto-renewal" @@ -4425,7 +4425,7 @@ msgstr "Open in browser" msgid "Open in browser to manage subscription" msgstr "Open in browser to manage subscription" -#: src/strings.ts:2324 +#: src/strings.ts:2325 msgid "Open in new tab" msgstr "Open in new tab" @@ -4433,7 +4433,7 @@ msgstr "Open in new tab" msgid "Open issue" msgstr "Open issue" -#: src/strings.ts:2264 +#: src/strings.ts:2265 msgid "Open link" msgstr "Open link" @@ -4445,7 +4445,7 @@ msgstr "Open note" msgid "Open settings" msgstr "Open settings" -#: src/strings.ts:2325 +#: src/strings.ts:2326 msgid "Open source" msgstr "Open source" @@ -4490,15 +4490,15 @@ msgstr "Orphaned" msgid "Other" msgstr "Other" -#: src/strings.ts:2345 +#: src/strings.ts:2346 msgid "Outline list" msgstr "Outline list" -#: src/strings.ts:2348 +#: src/strings.ts:2349 msgid "Paragraph" msgstr "Paragraph" -#: src/strings.ts:2491 +#: src/strings.ts:2492 msgid "Paragraphs" msgstr "Paragraphs" @@ -4510,7 +4510,7 @@ msgstr "Partial backups contain all your data except attachments. They are creat msgid "Partially refunded" msgstr "Partially refunded" -#: src/strings.ts:2402 +#: src/strings.ts:2403 msgid "Passed" msgstr "Passed" @@ -4550,27 +4550,27 @@ msgstr "Password updated" msgid "Password/pin" msgstr "Password/pin" -#: src/strings.ts:2248 +#: src/strings.ts:2249 msgid "Paste" msgstr "Paste" -#: src/strings.ts:2249 +#: src/strings.ts:2250 msgid "Paste and match style" msgstr "Paste and match style" -#: src/strings.ts:2370 +#: src/strings.ts:2371 msgid "Paste embed code here. Only iframes are supported." msgstr "Paste embed code here. Only iframes are supported." -#: src/strings.ts:2385 +#: src/strings.ts:2386 msgid "Paste image URL here" msgstr "Paste image URL here" -#: src/strings.ts:2250 +#: src/strings.ts:2251 msgid "Paste without formatting" msgstr "Paste without formatting" -#: src/strings.ts:2561 +#: src/strings.ts:2562 msgid "Pay once and use for 5 years" msgstr "Pay once and use for 5 years" @@ -4610,11 +4610,11 @@ msgstr "Pin notification" msgid "Pinned" msgstr "Pinned" -#: src/strings.ts:2579 +#: src/strings.ts:2580 msgid "Plan limits" msgstr "Plan limits" -#: src/strings.ts:2542 +#: src/strings.ts:2543 msgid "Plans" msgstr "Plans" @@ -4627,7 +4627,7 @@ msgid "Please confirm your identity by entering a recovery code." msgstr "Please confirm your identity by entering a recovery code." #: src/strings.ts:981 -#: src/strings.ts:2232 +#: src/strings.ts:2233 msgid "Please confirm your identity by entering the authentication code from your authenticator app." msgstr "Please confirm your identity by entering the authentication code from your authenticator app." @@ -4668,7 +4668,7 @@ msgstr "Please enter a valid URL" msgid "Please enter password of this backup file" msgstr "Please enter password of this backup file" -#: src/strings.ts:2243 +#: src/strings.ts:2244 msgid "Please enter the password to decrypt and restore this backup." msgstr "Please enter the password to decrypt and restore this backup." @@ -4728,7 +4728,7 @@ msgstr "Please select the day to repeat the reminder on" msgid "please send us an email from your registered email address" msgstr "please send us an email from your registered email address" -#: src/strings.ts:2391 +#: src/strings.ts:2392 msgid "Please set a table size" msgstr "Please set a table size" @@ -4834,7 +4834,7 @@ msgstr "Pressing \"X\" will hide the app in your system tray." msgid "Prevent note title from appearing in tab/window title." msgstr "Prevent note title from appearing in tab/window title." -#: src/strings.ts:2312 +#: src/strings.ts:2313 msgid "Preview attachment" msgstr "Preview attachment" @@ -4842,11 +4842,11 @@ msgstr "Preview attachment" msgid "Preview not available, content is encrypted." msgstr "Preview not available, content is encrypted." -#: src/strings.ts:2379 +#: src/strings.ts:2380 msgid "Previous match" msgstr "Previous match" -#: src/strings.ts:2444 +#: src/strings.ts:2445 msgid "Previous tab" msgstr "Previous tab" @@ -4874,7 +4874,7 @@ msgstr "Privacy for everyone" msgid "Privacy mode" msgstr "Privacy mode" -#: src/strings.ts:2574 +#: src/strings.ts:2575 msgid "privacy policy" msgstr "privacy policy" @@ -4902,7 +4902,7 @@ msgstr "privileged few" msgid "Pro" msgstr "Pro" -#: src/strings.ts:2469 +#: src/strings.ts:2470 msgid "Pro plan" msgstr "Pro plan" @@ -4946,7 +4946,7 @@ msgstr "Publish" msgid "Publish note" msgstr "Publish note" -#: src/strings.ts:2613 +#: src/strings.ts:2614 msgid "Publish to the web" msgstr "Publish to the web" @@ -4970,7 +4970,7 @@ msgstr "Published note can only be viewed by someone with the password." msgid "Published note link will be automatically deleted once it is viewed by someone." msgstr "Published note link will be automatically deleted once it is viewed by someone." -#: src/strings.ts:2567 +#: src/strings.ts:2568 msgid "Purchase" msgstr "Purchase" @@ -4986,7 +4986,7 @@ msgstr "Quick note notification" msgid "Quick note widgets" msgstr "Quick note widgets" -#: src/strings.ts:2440 +#: src/strings.ts:2441 msgid "Quick open" msgstr "Quick open" @@ -4994,7 +4994,7 @@ msgstr "Quick open" msgid "Quickly create a note from the notification" msgstr "Quickly create a note from the notification" -#: src/strings.ts:2332 +#: src/strings.ts:2333 msgid "Quote" msgstr "Quote" @@ -5034,7 +5034,7 @@ msgstr "Read the terms of service" msgid "Reading backup file..." msgstr "Reading backup file..." -#: src/strings.ts:2544 +#: src/strings.ts:2545 msgid "Ready to take the next step on your private note taking journey?" msgstr "Ready to take the next step on your private note taking journey?" @@ -5046,11 +5046,11 @@ msgstr "Receipt" msgid "RECENT BACKUPS" msgstr "RECENT BACKUPS" -#: src/strings.ts:2455 +#: src/strings.ts:2456 msgid "Recents" msgstr "Recents" -#: src/strings.ts:2398 +#: src/strings.ts:2399 msgid "Recheck all" msgstr "Recheck all" @@ -5058,7 +5058,7 @@ msgstr "Recheck all" msgid "Rechecking failed" msgstr "Rechecking failed" -#: src/strings.ts:2423 +#: src/strings.ts:2424 msgid "Recipes" msgstr "Recipes" @@ -5066,7 +5066,7 @@ msgstr "Recipes" msgid "Recommended" msgstr "Recommended" -#: src/strings.ts:2546 +#: src/strings.ts:2547 msgid "Recommended by Privacy Guides" msgstr "Recommended by Privacy Guides" @@ -5106,19 +5106,19 @@ msgstr "Recovery key text file saved" msgid "Recovery successful!" msgstr "Recovery successful!" -#: src/strings.ts:2435 +#: src/strings.ts:2436 msgid "Redeem" msgstr "Redeem" -#: src/strings.ts:2596 +#: src/strings.ts:2597 msgid "Redeem code" msgstr "Redeem code" -#: src/strings.ts:2432 +#: src/strings.ts:2433 msgid "Redeem gift code" msgstr "Redeem gift code" -#: src/strings.ts:2434 +#: src/strings.ts:2435 msgid "Redeeming gift code" msgstr "Redeeming gift code" @@ -5146,7 +5146,7 @@ msgstr "Register" msgid "Release notes" msgstr "Release notes" -#: src/strings.ts:2457 +#: src/strings.ts:2458 msgid "Release track" msgstr "Release track" @@ -5240,7 +5240,7 @@ msgstr "Remove app lock pin, app lock will be disabled if no other security meth msgid "Remove as default" msgstr "Remove as default" -#: src/strings.ts:2316 +#: src/strings.ts:2317 msgid "Remove attachment" msgstr "Remove attachment" @@ -5252,7 +5252,7 @@ msgstr "Remove from all" msgid "Remove from notebook" msgstr "Remove from notebook" -#: src/strings.ts:2456 +#: src/strings.ts:2457 msgid "Remove from recents" msgstr "Remove from recents" @@ -5260,7 +5260,7 @@ msgstr "Remove from recents" msgid "Remove full name" msgstr "Remove full name" -#: src/strings.ts:2263 +#: src/strings.ts:2264 msgid "Remove link" msgstr "Remove link" @@ -5292,11 +5292,11 @@ msgstr "Reorder" msgid "Repeats daily at {date}" msgstr "Repeats daily at {date}" -#: src/strings.ts:2376 +#: src/strings.ts:2377 msgid "Replace" msgstr "Replace" -#: src/strings.ts:2377 +#: src/strings.ts:2378 msgid "Replace all" msgstr "Replace all" @@ -5333,7 +5333,7 @@ msgstr "Reset" msgid "Reset account password" msgstr "Reset account password" -#: src/strings.ts:2483 +#: src/strings.ts:2484 msgid "Reset homepage" msgstr "Reset homepage" @@ -5385,7 +5385,7 @@ msgstr "Restore" msgid "Restore backup" msgstr "Restore backup" -#: src/strings.ts:2405 +#: src/strings.ts:2406 msgid "Restore backup?" msgstr "Restore backup?" @@ -5465,7 +5465,7 @@ msgstr "Rotate left" msgid "Rotate right" msgstr "Rotate right" -#: src/strings.ts:2286 +#: src/strings.ts:2287 msgid "Row properties" msgstr "Row properties" @@ -5545,11 +5545,11 @@ msgstr "Save your data recovery key in a safe place. You will need it to recover msgid "Save your recovery codes in a safe place. You will need them to recover your account in case you lose access to your two-factor authentication methods." msgstr "Save your recovery codes in a safe place. You will need them to recover your account in case you lose access to your two-factor authentication methods." -#: src/strings.ts:2395 +#: src/strings.ts:2396 msgid "Saved" msgstr "Saved" -#: src/strings.ts:2396 +#: src/strings.ts:2397 msgid "Saving" msgstr "Saving" @@ -5569,15 +5569,15 @@ msgstr "Saving zip file. Please wait..." msgid "Scan the QR code with your authenticator app" msgstr "Scan the QR code with your authenticator app" -#: src/strings.ts:2421 +#: src/strings.ts:2422 msgid "School work" msgstr "School work" -#: src/strings.ts:2494 +#: src/strings.ts:2495 msgid "Scroll to bottom" msgstr "Scroll to bottom" -#: src/strings.ts:2493 +#: src/strings.ts:2494 msgid "Scroll to top" msgstr "Scroll to top" @@ -5594,7 +5594,7 @@ msgstr "Search a note" msgid "Search a note to link to" msgstr "Search a note to link to" -#: src/strings.ts:2437 +#: src/strings.ts:2438 msgid "Search for notes, notebooks, and tags..." msgstr "Search for notes, notebooks, and tags..." @@ -5650,7 +5650,7 @@ msgstr "Search in Tags" msgid "Search in Trash" msgstr "Search in Trash" -#: src/strings.ts:2358 +#: src/strings.ts:2359 msgid "Search languages" msgstr "Search languages" @@ -5698,7 +5698,7 @@ msgstr "Select" msgid "Select a backup file from your device to restore backup" msgstr "Select a backup file from your device to restore backup" -#: src/strings.ts:2488 +#: src/strings.ts:2489 msgid "Select a notebook to move this notebook into, or unselect to move it to the root level." msgstr "Select a notebook to move this notebook into, or unselect to move it to the root level." @@ -5742,7 +5742,7 @@ msgstr "Select folder with backup files" msgid "Select how you would like to recieve the code" msgstr "Select how you would like to recieve the code" -#: src/strings.ts:2353 +#: src/strings.ts:2354 msgid "Select language" msgstr "Select language" @@ -5758,7 +5758,7 @@ msgstr "Select notebooks" msgid "Select notebooks you want to add note(s) to." msgstr "Select notebooks you want to add note(s) to." -#: src/strings.ts:2476 +#: src/strings.ts:2477 msgid "Select notes to link to \"{title}\"" msgstr "Select notes to link to \"{title}\"" @@ -5770,7 +5770,7 @@ msgstr "Select nth day of the month to repeat the reminder." msgid "Select profile picture" msgstr "Select profile picture" -#: src/strings.ts:2482 +#: src/strings.ts:2483 msgid "Select the default sidebar tab" msgstr "Select the default sidebar tab" @@ -5782,7 +5782,7 @@ msgstr "Select the folder that includes your backup files to list them here." msgid "Select the languages the spell checker should check in." msgstr "Select the languages the spell checker should check in." -#: src/strings.ts:2458 +#: src/strings.ts:2459 msgid "Select the release track for Notesnook." msgstr "Select the release track for Notesnook." @@ -5874,7 +5874,7 @@ msgstr "Set as dark theme" msgid "Set as default" msgstr "Set as default" -#: src/strings.ts:2480 +#: src/strings.ts:2481 msgid "Set as homepage" msgstr "Set as homepage" @@ -5886,7 +5886,7 @@ msgstr "Set as light theme" msgid "Set automatic trash cleanup interval from Settings > Behaviour > Clean trash interval." msgstr "Set automatic trash cleanup interval from Settings > Behaviour > Clean trash interval." -#: src/strings.ts:2630 +#: src/strings.ts:2631 msgid "Set expiry" msgstr "Set expiry" @@ -6036,7 +6036,7 @@ msgstr "Signup failed" msgid "Silent" msgstr "Silent" -#: src/strings.ts:2327 +#: src/strings.ts:2328 msgid "Sink list item" msgstr "Sink list item" @@ -6080,11 +6080,11 @@ msgstr "Sort by" msgid "Source code" msgstr "Source code" -#: src/strings.ts:2354 +#: src/strings.ts:2355 msgid "Spaces" msgstr "Spaces" -#: src/strings.ts:2589 +#: src/strings.ts:2590 msgid "Special Offer" msgstr "Special Offer" @@ -6092,11 +6092,11 @@ msgstr "Special Offer" msgid "Spell check" msgstr "Spell check" -#: src/strings.ts:2293 +#: src/strings.ts:2294 msgid "Split cells" msgstr "Split cells" -#: src/strings.ts:2459 +#: src/strings.ts:2460 msgid "Stable" msgstr "Stable" @@ -6140,7 +6140,7 @@ msgstr "Start writing your note..." msgid "Status" msgstr "Status" -#: src/strings.ts:2472 +#: src/strings.ts:2473 msgid "Storage" msgstr "Storage" @@ -6148,7 +6148,7 @@ msgstr "Storage" msgid "Streaming not supported" msgstr "Streaming not supported" -#: src/strings.ts:2259 +#: src/strings.ts:2260 msgid "Strikethrough" msgstr "Strikethrough" @@ -6164,11 +6164,11 @@ msgstr "Subgroup added" msgid "Submit" msgstr "Submit" -#: src/strings.ts:2568 +#: src/strings.ts:2569 msgid "Subscribe" msgstr "Subscribe" -#: src/strings.ts:2569 +#: src/strings.ts:2570 msgid "Subscribe and start free trial" msgstr "Subscribe and start free trial" @@ -6196,7 +6196,7 @@ msgstr "Subscribed on Web" msgid "Subscribed using gift card" msgstr "Subscribed using gift card" -#: src/strings.ts:2270 +#: src/strings.ts:2271 msgid "Subscript" msgstr "Subscript" @@ -6220,7 +6220,7 @@ msgstr "Sun" msgid "Sunday" msgstr "Sunday" -#: src/strings.ts:2271 +#: src/strings.ts:2272 msgid "Superscript" msgstr "Superscript" @@ -6276,7 +6276,7 @@ msgstr "Syncing your data" msgid "Syncing your notes" msgstr "Syncing your notes" -#: src/strings.ts:2339 +#: src/strings.ts:2340 msgid "Table" msgstr "Table" @@ -6284,11 +6284,11 @@ msgstr "Table" msgid "Table of contents" msgstr "Table of contents" -#: src/strings.ts:2284 +#: src/strings.ts:2285 msgid "Table settings" msgstr "Table settings" -#: src/strings.ts:2533 +#: src/strings.ts:2534 msgid "tables, outlines, block level note linking" msgstr "tables, outlines, block level note linking" @@ -6325,7 +6325,7 @@ msgstr "Take a full backup of your data with all attachments" msgid "Take a partial backup of your data that does not include attachments" msgstr "Take a partial backup of your data that does not include attachments" -#: src/strings.ts:2338 +#: src/strings.ts:2339 msgid "Take a photo using camera" msgstr "Take a photo using camera" @@ -6385,11 +6385,11 @@ msgstr "Tap to try again" msgid "Tap twice to confirm you have saved the recovery key." msgstr "Tap twice to confirm you have saved the recovery key." -#: src/strings.ts:2344 +#: src/strings.ts:2345 msgid "Task list" msgstr "Task list" -#: src/strings.ts:2414 +#: src/strings.ts:2415 msgid "Tasks" msgstr "Tasks" @@ -6427,7 +6427,7 @@ msgstr "Terms of service" msgid "Terms of Service " msgstr "Terms of Service " -#: src/strings.ts:2576 +#: src/strings.ts:2577 msgid "terms of use." msgstr "terms of use." @@ -6439,11 +6439,11 @@ msgstr "Test connection" msgid "Test connection before changing server urls" msgstr "Test connection before changing server urls" -#: src/strings.ts:2282 +#: src/strings.ts:2283 msgid "Text color" msgstr "Text color" -#: src/strings.ts:2280 +#: src/strings.ts:2281 msgid "Text direction" msgstr "Text direction" @@ -6455,11 +6455,11 @@ msgstr "Thank you for choosing end-to-end encrypted note taking. Now you can syn msgid "Thank you for reporting!" msgstr "Thank you for reporting!" -#: src/strings.ts:2550 +#: src/strings.ts:2551 msgid "Thank you for subscribing" msgstr "Thank you for subscribing" -#: src/strings.ts:2584 +#: src/strings.ts:2585 msgid "Thank you for the purchase" msgstr "Thank you for the purchase" @@ -6475,7 +6475,7 @@ msgstr "Thank you. You are the proof that privacy always comes first." msgid "The {title} at {url} is not compatible with this client." msgstr "The {title} at {url} is not compatible with this client." -#: src/strings.ts:2629 +#: src/strings.ts:2630 msgid "The incoming note could not be unlocked with the provided password. Enter the correct password for the incoming note" msgstr "The incoming note could not be unlocked with the provided password. Enter the correct password for the incoming note" @@ -6483,7 +6483,7 @@ msgstr "The incoming note could not be unlocked with the provided password. Ente msgid "The information above will be publically available at" msgstr "The information above will be publically available at" -#: src/strings.ts:2603 +#: src/strings.ts:2604 msgid "The Notesnook Circle is exclusive to subscribers. Please consider subscribing to gain access to Notesnook Circle and enjoy additional benefits." msgstr "The Notesnook Circle is exclusive to subscribers. Please consider subscribing to gain access to Notesnook Circle and enjoy additional benefits." @@ -6519,7 +6519,7 @@ msgstr "Themes" msgid "There are no blocks in this note." msgstr "There are no blocks in this note." -#: src/strings.ts:2237 +#: src/strings.ts:2238 msgid "These items will be **kept in your Trash for {interval} days** after which they will be permanently deleted." msgstr "These items will be **kept in your Trash for {interval} days** after which they will be permanently deleted." @@ -6559,7 +6559,7 @@ msgstr "This error usually means the search index is corrupted." msgid "This image cannot be previewed" msgstr "This image cannot be previewed" -#: src/strings.ts:2570 +#: src/strings.ts:2571 msgid "This is a one time purchase, no subscription." msgstr "This is a one time purchase, no subscription." @@ -6572,7 +6572,7 @@ msgstr "This may take a while" msgid "This must only be used for troubleshooting. Using it regularly for sync is not recommended and will lead to unexpected data loss and other issues. If you are having persistent issues with sync, please report them to us at support@streetwriters.co." msgstr "This must only be used for troubleshooting. Using it regularly for sync is not recommended and will lead to unexpected data loss and other issues. If you are having persistent issues with sync, please report them to us at support@streetwriters.co." -#: src/strings.ts:2635 +#: src/strings.ts:2636 msgid "This note is empty" msgstr "This note is empty" @@ -6641,19 +6641,19 @@ msgstr "To use app lock, you must enable biometrics such as Fingerprint lock or msgid "Toggle dark/light mode" msgstr "Toggle dark/light mode" -#: src/strings.ts:2462 +#: src/strings.ts:2463 msgid "Toggle focus mode" msgstr "Toggle focus mode" -#: src/strings.ts:2351 +#: src/strings.ts:2352 msgid "Toggle indentation mode" msgstr "Toggle indentation mode" -#: src/strings.ts:2380 +#: src/strings.ts:2381 msgid "Toggle replace" msgstr "Toggle replace" -#: src/strings.ts:2451 +#: src/strings.ts:2452 msgid "Toggle theme" msgstr "Toggle theme" @@ -6682,7 +6682,7 @@ msgstr "Trash gets automatically cleaned up after {days} days" msgid "Trash gets automatically cleaned up daily" msgstr "Trash gets automatically cleaned up daily" -#: src/strings.ts:2540 +#: src/strings.ts:2541 msgid "Try {plan} for free" msgstr "Try {plan} for free" @@ -6694,7 +6694,7 @@ msgstr "Try compact mode to fit more items on screen" msgid "Try free for 14 days" msgstr "Try free for 14 days" -#: src/strings.ts:2526 +#: src/strings.ts:2527 msgid "Try it for free" msgstr "Try it for free" @@ -6750,11 +6750,11 @@ msgstr "Unable to resolve download url" msgid "Unable to send 2FA code" msgstr "Unable to send 2FA code" -#: src/strings.ts:2486 +#: src/strings.ts:2487 msgid "Unarchive" msgstr "Unarchive" -#: src/strings.ts:2258 +#: src/strings.ts:2259 msgid "Underline" msgstr "Underline" @@ -6766,7 +6766,7 @@ msgstr "Undo" msgid "Unfavorite" msgstr "Unfavorite" -#: src/strings.ts:2580 +#: src/strings.ts:2581 msgid "Unlimited" msgstr "Unlimited" @@ -6782,7 +6782,7 @@ msgstr "Unlink notebook" msgid "Unlock" msgstr "Unlock" -#: src/strings.ts:2627 +#: src/strings.ts:2628 msgid "Unlock incoming note" msgstr "Unlock incoming note" @@ -6799,7 +6799,7 @@ msgstr "Unlock note" msgid "Unlock note to delete it" msgstr "Unlock note to delete it" -#: src/strings.ts:2638 +#: src/strings.ts:2639 msgid "Unlock note to merge conflicts" msgstr "Unlock note to merge conflicts" @@ -6851,12 +6851,12 @@ msgstr "Unpublish notes to delete them" msgid "Unregister" msgstr "Unregister" -#: src/strings.ts:2631 +#: src/strings.ts:2632 msgid "Unset expiry" msgstr "Unset expiry" #: src/strings.ts:210 -#: src/strings.ts:2360 +#: src/strings.ts:2361 msgid "Untitled" msgstr "Untitled" @@ -6872,7 +6872,7 @@ msgstr "Update available" msgid "Update now" msgstr "Update now" -#: src/strings.ts:2500 +#: src/strings.ts:2501 msgid "Upgrade" msgstr "Upgrade" @@ -6880,11 +6880,11 @@ msgstr "Upgrade" msgid "Upgrade now" msgstr "Upgrade now" -#: src/strings.ts:2499 +#: src/strings.ts:2500 msgid "Upgrade plan" msgstr "Upgrade plan" -#: src/strings.ts:2525 +#: src/strings.ts:2526 msgid "Upgrade plan to {plan} to use this feature." msgstr "Upgrade plan to {plan} to use this feature." @@ -6900,7 +6900,7 @@ msgstr "Upgrade to Notesnook Pro to create more tags." msgid "Upgrade to Pro" msgstr "Upgrade to Pro" -#: src/strings.ts:2595 +#: src/strings.ts:2596 msgid "Upgrade to redeem" msgstr "Upgrade to redeem" @@ -6908,7 +6908,7 @@ msgstr "Upgrade to redeem" msgid "Upload" msgstr "Upload" -#: src/strings.ts:2337 +#: src/strings.ts:2338 msgid "Upload from disk" msgstr "Upload from disk" @@ -6934,7 +6934,7 @@ msgstr "Uploads" msgid "Urgent" msgstr "Urgent" -#: src/strings.ts:2387 +#: src/strings.ts:2388 msgid "URL" msgstr "URL" @@ -6958,7 +6958,7 @@ msgstr "Use a data recovery key to reset your account password." msgid "Use account password" msgstr "Use account password" -#: src/strings.ts:2532 +#: src/strings.ts:2533 msgid "Use advanced note taking features like" msgstr "Use advanced note taking features like" @@ -7028,7 +7028,7 @@ msgstr "Use this if changes from other devices are not appearing on this device. msgid "Use this if changes made on this device are not appearing on other devices. This will overwrite the data on the server with the data from this device." msgstr "Use this if changes made on this device are not appearing on other devices. This will overwrite the data on the server with the data from this device." -#: src/strings.ts:2473 +#: src/strings.ts:2474 msgid "used" msgstr "used" @@ -7036,11 +7036,11 @@ msgstr "used" msgid "User verification failed" msgstr "User verification failed" -#: src/strings.ts:2254 +#: src/strings.ts:2255 msgid "Using {instance} (v{version})" msgstr "Using {instance} (v{version})" -#: src/strings.ts:2252 +#: src/strings.ts:2253 msgid "Using official Notesnook instance" msgstr "Using official Notesnook instance" @@ -7136,7 +7136,7 @@ msgstr "View source code" msgid "View your recovery codes to recover your account in case you lose access to your two-factor authentication methods." msgstr "View your recovery codes to recover your account in case you lose access to your two-factor authentication methods." -#: src/strings.ts:2610 +#: src/strings.ts:2611 msgid "Views" msgstr "Views" @@ -7164,7 +7164,7 @@ msgstr "We are sorry, it seems that the app crashed due to an error. You can sub msgid "We have sent you an email confirmation link. Please check your email inbox. If you cannot find the email, check your spam folder." msgstr "We have sent you an email confirmation link. Please check your email inbox. If you cannot find the email, check your spam folder." -#: src/strings.ts:2511 +#: src/strings.ts:2512 msgid "We require credit card details to fight abuse and to make it seamless for you to upgrade. Your credit card is NOT charged until your free trial ends and your subscription starts. You will be notified via email of the upcoming charge before your trial ends." msgstr "We require credit card details to fight abuse and to make it seamless for you to upgrade. Your credit card is NOT charged until your free trial ends and your subscription starts. You will be notified via email of the upcoming charge before your trial ends." @@ -7180,11 +7180,11 @@ msgstr "We will send you occasional promotional offers & product updates on your msgid "We would love to know what you think!" msgstr "We would love to know what you think!" -#: src/strings.ts:2552 +#: src/strings.ts:2553 msgid "We’re setting up your plan right now. We’ll notify you as soon as everything is ready." msgstr "We’re setting up your plan right now. We’ll notify you as soon as everything is ready." -#: src/strings.ts:2322 +#: src/strings.ts:2323 msgid "Web clip settings" msgstr "Web clip settings" @@ -7204,7 +7204,7 @@ msgstr "Wednesday" msgid "Week" msgstr "Week" -#: src/strings.ts:2623 +#: src/strings.ts:2624 msgid "Week format" msgstr "Week format" @@ -7221,7 +7221,7 @@ msgstr "Welcome back, {email}" msgid "Welcome back!" msgstr "Welcome back!" -#: src/strings.ts:2583 +#: src/strings.ts:2584 msgid "Welcome to Notesnook {plan}" msgstr "Welcome to Notesnook {plan}" @@ -7233,11 +7233,11 @@ msgstr "Welcome to Notesnook Pro" msgid "What do I do if I am not getting the email?" msgstr "What do I do if I am not getting the email?" -#: src/strings.ts:2503 +#: src/strings.ts:2504 msgid "What happens to my data if I switch plans?" msgstr "What happens to my data if I switch plans?" -#: src/strings.ts:2519 +#: src/strings.ts:2520 msgid "What is your refund policy?" msgstr "What is your refund policy?" @@ -7245,19 +7245,19 @@ msgstr "What is your refund policy?" msgid "What went wrong?" msgstr "What went wrong?" -#: src/strings.ts:2509 +#: src/strings.ts:2510 msgid "Why do you need my credit card details for a free trial?" msgstr "Why do you need my credit card details for a free trial?" -#: src/strings.ts:2383 +#: src/strings.ts:2384 msgid "Width" msgstr "Width" -#: src/strings.ts:2489 +#: src/strings.ts:2490 msgid "Words" msgstr "Words" -#: src/strings.ts:2412 +#: src/strings.ts:2413 msgid "Work & Office" msgstr "Work & Office" @@ -7290,7 +7290,7 @@ msgstr "Yearly" msgid "Yes" msgstr "Yes" -#: src/strings.ts:2516 +#: src/strings.ts:2517 msgid "Yes, you can cancel your trial anytime. No questions asked." msgstr "Yes, you can cancel your trial anytime. No questions asked." @@ -7298,11 +7298,11 @@ msgstr "Yes, you can cancel your trial anytime. No questions asked." msgid "You also agree to recieve marketing emails from us which you can opt-out of from app settings." msgstr "You also agree to recieve marketing emails from us which you can opt-out of from app settings." -#: src/strings.ts:2588 +#: src/strings.ts:2589 msgid "You are already subscribed to this plan." msgstr "You are already subscribed to this plan." -#: src/strings.ts:2239 +#: src/strings.ts:2240 msgid "You are editing \"{notebookTitle}\"." msgstr "You are editing \"{notebookTitle}\"." @@ -7330,11 +7330,11 @@ msgstr "You can also link a note to multiple Notebooks. Tap and hold any noteboo msgid "You can change the theme at any time from Settings or the side menu." msgstr "You can change the theme at any time from Settings or the side menu." -#: src/strings.ts:2591 +#: src/strings.ts:2592 msgid "You can change your subscription plan from the web app" msgstr "You can change your subscription plan from the web app" -#: src/strings.ts:2420 +#: src/strings.ts:2421 msgid "You can create shortcuts of frequently accessed notebooks in the side menu" msgstr "You can create shortcuts of frequently accessed notebooks in the side menu" @@ -7400,7 +7400,7 @@ msgstr "You have been logged out from all other devices." msgid "You have been logged out." msgstr "You have been logged out." -#: src/strings.ts:2587 +#: src/strings.ts:2588 msgid "You have made a one time purchase. To change your plan please contact support." msgstr "You have made a one time purchase. To change your plan please contact support." @@ -7501,7 +7501,7 @@ msgstr "Your account will be permanently deleted along with all your data, login msgid "Your archive" msgstr "Your archive" -#: src/strings.ts:2485 +#: src/strings.ts:2486 msgid "Your archive is empty" msgstr "Your archive is empty" @@ -7521,7 +7521,7 @@ msgstr "Your changes have been saved and will be reflected after the app has ref msgid "Your current 2FA method is {method}" msgstr "Your current 2FA method is {method}" -#: src/strings.ts:2594 +#: src/strings.ts:2595 msgid "Your current subscription does not allow changing plans" msgstr "Your current subscription does not allow changing plans" @@ -7533,7 +7533,7 @@ msgstr "Your data recovery key is basically a hashed version of your password (p msgid "Your data recovery key will be used to decrypt your data" msgstr "Your data recovery key will be used to decrypt your data" -#: src/strings.ts:2505 +#: src/strings.ts:2506 msgid "Your data remains 100% accessible regardless of what plan you are on. That includes your notes, notebooks, attachments, and anything else you might have created." msgstr "Your data remains 100% accessible regardless of what plan you are on. That includes your notes, notebooks, attachments, and anything else you might have created." @@ -7541,7 +7541,7 @@ msgstr "Your data remains 100% accessible regardless of what plan you are on. Th msgid "Your email has been confirmed." msgstr "Your email has been confirmed." -#: src/strings.ts:2496 +#: src/strings.ts:2497 msgid "Your email has been confirmed. You can now securely sync your encrypted notes across all devices." msgstr "Your email has been confirmed. You can now securely sync your encrypted notes across all devices." @@ -7569,7 +7569,7 @@ msgstr "Your free trial has started" msgid "Your free trial is ending soon" msgstr "Your free trial is ending soon" -#: src/strings.ts:2622 +#: src/strings.ts:2623 msgid "Your free trial is on-going. Your subscription will start on {trialExpiryDate}" msgstr "Your free trial is on-going. Your subscription will start on {trialExpiryDate}" @@ -7653,7 +7653,7 @@ msgstr "Z to A" msgid "Zipping" msgstr "Zipping" -#: src/strings.ts:2461 +#: src/strings.ts:2462 msgid "Zoom" msgstr "Zoom" diff --git a/packages/intl/locale/pseudo-LOCALE.po b/packages/intl/locale/pseudo-LOCALE.po index ce9de4e43..0c5429b7f 100644 --- a/packages/intl/locale/pseudo-LOCALE.po +++ b/packages/intl/locale/pseudo-LOCALE.po @@ -13,7 +13,7 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: src/strings.ts:2410 +#: src/strings.ts:2411 msgid " \"Notebook > Notes\"" msgstr "" @@ -288,7 +288,7 @@ msgstr "" msgid "{count, plural, one {Item unpublished} other {# items unpublished}}" msgstr "" -#: src/strings.ts:2427 +#: src/strings.ts:2428 msgid "{count, plural, one {Move all notes in this notebook to trash} other {Move all notes in these notebooks to trash}}" msgstr "" @@ -491,7 +491,7 @@ msgstr "" msgid "{count, plural, one {Unpublish note} other {Unpublish # notes}}" msgstr "" -#: src/strings.ts:2497 +#: src/strings.ts:2498 msgid "{count} characters" msgstr "" @@ -499,7 +499,7 @@ msgstr "" msgid "{days, plural, one {1 day} other {# days}}" msgstr "" -#: src/strings.ts:2557 +#: src/strings.ts:2558 msgid "{days} days free" msgstr "" @@ -563,7 +563,7 @@ msgstr "" msgid "{percentage}% updating..." msgstr "" -#: src/strings.ts:2541 +#: src/strings.ts:2542 msgid "{plan} plan" msgstr "" @@ -575,7 +575,7 @@ msgstr "" msgid "{platform, select, android {Backup file saved in \"Notesnook backups\" folder on your phone.} other {Backup file is saved in File Manager/Notesnook folder}}" msgstr "" -#: src/strings.ts:2357 +#: src/strings.ts:2358 msgid "{selected} selected" msgstr "" @@ -623,7 +623,7 @@ msgstr "" msgid "2FA code sent via {method}" msgstr "" -#: src/strings.ts:2581 +#: src/strings.ts:2582 msgid "5 year plan (One time purchase)" msgstr "" @@ -659,15 +659,15 @@ msgstr "" msgid "Account password" msgstr "" -#: src/strings.ts:2452 +#: src/strings.ts:2453 msgid "Actions for note: {title}" msgstr "" -#: src/strings.ts:2453 +#: src/strings.ts:2454 msgid "Actions for notebook: {title}" msgstr "" -#: src/strings.ts:2454 +#: src/strings.ts:2455 msgid "Actions for tag: {title}" msgstr "" @@ -703,7 +703,7 @@ msgstr "" msgid "Add notebook" msgstr "" -#: src/strings.ts:2479 +#: src/strings.ts:2480 msgid "Add notes" msgstr "" @@ -731,15 +731,15 @@ msgstr "" msgid "Add tags to multiple notes at once" msgstr "" -#: src/strings.ts:2244 +#: src/strings.ts:2245 msgid "Add to dictionary" msgstr "" -#: src/strings.ts:2614 +#: src/strings.ts:2615 msgid "Add to home" msgstr "" -#: src/strings.ts:2477 +#: src/strings.ts:2478 msgid "Add to notebook" msgstr "" @@ -751,7 +751,7 @@ msgstr "" msgid "Add your first notebook" msgstr "" -#: src/strings.ts:2617 +#: src/strings.ts:2618 msgid "Adjust the line height of the editor" msgstr "" @@ -763,15 +763,15 @@ msgstr "" msgid "After scanning the QR code image, the app will display a code that you can enter below." msgstr "" -#: src/strings.ts:2309 +#: src/strings.ts:2310 msgid "Align left" msgstr "" -#: src/strings.ts:2310 +#: src/strings.ts:2311 msgid "Align right" msgstr "" -#: src/strings.ts:2279 +#: src/strings.ts:2280 msgid "Alignment" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "All attachments are end-to-end encrypted." msgstr "" -#: src/strings.ts:2404 +#: src/strings.ts:2405 msgid "All cached attachments have been cleared." msgstr "" @@ -843,7 +843,7 @@ msgstr "" msgid "An error occurred while migrating your data. You can logout of your account and try to relogin. However this is not recommended as it may result in some data loss if your data was not synced." msgstr "" -#: src/strings.ts:2575 +#: src/strings.ts:2576 msgid "and" msgstr "" @@ -855,7 +855,7 @@ msgstr "" msgid "and get a chance to win free promo codes." msgstr "" -#: src/strings.ts:2534 +#: src/strings.ts:2535 msgid "and much more." msgstr "" @@ -863,7 +863,7 @@ msgstr "" msgid "and we will manually confirm your account." msgstr "" -#: src/strings.ts:2592 +#: src/strings.ts:2593 msgid "ANNOUNCEMENT" msgstr "" @@ -914,7 +914,7 @@ msgid "Applying changes" msgstr "" #: src/strings.ts:1530 -#: src/strings.ts:2484 +#: src/strings.ts:2485 msgid "Archive" msgstr "" @@ -966,7 +966,7 @@ msgstr "" msgid "Atleast 8 characters required" msgstr "" -#: src/strings.ts:2346 +#: src/strings.ts:2347 msgid "Attach image from URL" msgstr "" @@ -979,11 +979,11 @@ msgid "attachment" msgstr "" #: src/strings.ts:300 -#: src/strings.ts:2343 +#: src/strings.ts:2344 msgid "Attachment" msgstr "" -#: src/strings.ts:2447 +#: src/strings.ts:2448 msgid "Attachment manager" msgstr "" @@ -991,11 +991,11 @@ msgstr "" msgid "Attachment preview failed" msgstr "" -#: src/strings.ts:2397 +#: src/strings.ts:2398 msgid "Attachment recheck cancelled" msgstr "" -#: src/strings.ts:2314 +#: src/strings.ts:2315 msgid "Attachment settings" msgstr "" @@ -1012,7 +1012,7 @@ msgstr "" msgid "Attachments cache cleared!" msgstr "" -#: src/strings.ts:2399 +#: src/strings.ts:2400 msgid "Attachments recheck complete" msgstr "" @@ -1105,11 +1105,11 @@ msgstr "" msgid "Available on iOS & Android" msgstr "" -#: src/strings.ts:2640 +#: src/strings.ts:2641 msgid "Back" msgstr "" -#: src/strings.ts:2302 +#: src/strings.ts:2303 msgid "Background color" msgstr "" @@ -1197,27 +1197,27 @@ msgstr "" msgid "Behaviour" msgstr "" -#: src/strings.ts:2471 +#: src/strings.ts:2472 msgid "Believer plan" msgstr "" -#: src/strings.ts:2578 +#: src/strings.ts:2579 msgid "Best value" msgstr "" -#: src/strings.ts:2460 +#: src/strings.ts:2461 msgid "Beta" msgstr "" -#: src/strings.ts:2260 +#: src/strings.ts:2261 msgid "Bi-directional note link" msgstr "" -#: src/strings.ts:2554 +#: src/strings.ts:2555 msgid "billed annually at {price}" msgstr "" -#: src/strings.ts:2555 +#: src/strings.ts:2556 msgid "billed monthly at {price}" msgstr "" @@ -1245,11 +1245,11 @@ msgstr "" msgid "Biometrics not enrolled" msgstr "" -#: src/strings.ts:2256 +#: src/strings.ts:2257 msgid "Bold" msgstr "" -#: src/strings.ts:2409 +#: src/strings.ts:2410 msgid "Boost your productivity with Notebooks and organize your notes." msgstr "" @@ -1257,7 +1257,7 @@ msgstr "" msgid "Browse" msgstr "" -#: src/strings.ts:2273 +#: src/strings.ts:2274 msgid "Bullet list" msgstr "" @@ -1265,7 +1265,7 @@ msgstr "" msgid "By" msgstr "" -#: src/strings.ts:2573 +#: src/strings.ts:2574 msgid "By joining you agree to our" msgstr "" @@ -1273,11 +1273,11 @@ msgstr "" msgid "By signing up, you agree to our " msgstr "" -#: src/strings.ts:2334 +#: src/strings.ts:2335 msgid "Callout" msgstr "" -#: src/strings.ts:2514 +#: src/strings.ts:2515 msgid "Can I cancel my free trial anytime?" msgstr "" @@ -1285,11 +1285,11 @@ msgstr "" msgid "Cancel" msgstr "" -#: src/strings.ts:2571 +#: src/strings.ts:2572 msgid "Cancel anytime, subscription auto-renews." msgstr "" -#: src/strings.ts:2536 +#: src/strings.ts:2537 msgid "Cancel anytime." msgstr "" @@ -1309,24 +1309,24 @@ msgstr "" msgid "Cancel upload" msgstr "" -#: src/strings.ts:2301 +#: src/strings.ts:2302 msgid "Cell background color" msgstr "" -#: src/strings.ts:2303 +#: src/strings.ts:2304 msgid "Cell border color" msgstr "" -#: src/strings.ts:2305 #: src/strings.ts:2306 +#: src/strings.ts:2307 msgid "Cell border width" msgstr "" -#: src/strings.ts:2287 +#: src/strings.ts:2288 msgid "Cell properties" msgstr "" -#: src/strings.ts:2304 +#: src/strings.ts:2305 msgid "Cell text color" msgstr "" @@ -1362,7 +1362,7 @@ msgstr "" msgid "Change how the app behaves in different situations" msgstr "" -#: src/strings.ts:2352 +#: src/strings.ts:2353 msgid "Change language" msgstr "" @@ -1374,7 +1374,7 @@ msgstr "" msgid "Change password" msgstr "" -#: src/strings.ts:2585 +#: src/strings.ts:2586 msgid "Change plan" msgstr "" @@ -1414,7 +1414,7 @@ msgstr "" msgid "Changing password is an irreversible process. You will be logged out from all your devices. Please make sure you do not close the app while your password is changing and have good internet connection." msgstr "" -#: src/strings.ts:2490 +#: src/strings.ts:2491 msgid "Characters" msgstr "" @@ -1442,7 +1442,7 @@ msgstr "" msgid "Check your spam folder if you haven't received an email yet." msgstr "" -#: src/strings.ts:2401 +#: src/strings.ts:2402 msgid "Checking all attachments" msgstr "" @@ -1454,15 +1454,15 @@ msgstr "" msgid "Checking for updates" msgstr "" -#: src/strings.ts:2400 +#: src/strings.ts:2401 msgid "Checking note attachments" msgstr "" -#: src/strings.ts:2275 +#: src/strings.ts:2276 msgid "Checklist" msgstr "" -#: src/strings.ts:2329 +#: src/strings.ts:2330 msgid "Choose a block to insert" msgstr "" @@ -1474,7 +1474,7 @@ msgstr "" msgid "Choose backup format" msgstr "" -#: src/strings.ts:2365 +#: src/strings.ts:2366 msgid "Choose custom color" msgstr "" @@ -1486,7 +1486,7 @@ msgstr "" msgid "Choose how dates are displayed in the app" msgstr "" -#: src/strings.ts:2620 +#: src/strings.ts:2621 msgid "Choose how day is displayed in the app" msgstr "" @@ -1502,7 +1502,7 @@ msgstr "" msgid "Choose how you want to secure your notes locally." msgstr "" -#: src/strings.ts:2625 +#: src/strings.ts:2626 msgid "Choose what day to display as the first day of the week" msgstr "" @@ -1526,7 +1526,7 @@ msgstr "" msgid "Clear all cached attachments. Current cache size: {cacheSize}" msgstr "" -#: src/strings.ts:2269 +#: src/strings.ts:2270 msgid "Clear all formatting" msgstr "" @@ -1538,7 +1538,7 @@ msgstr "" msgid "Clear cache" msgstr "" -#: src/strings.ts:2363 +#: src/strings.ts:2364 msgid "Clear completed tasks" msgstr "" @@ -1585,7 +1585,11 @@ msgid "" "**Only use this for troubleshooting purposes. If you are having persistent issues, it is recommended that you reach out to us via support@streetwriters.co so we can help you resolve it permanently.**" msgstr "" -#: src/strings.ts:2607 +#: src/strings.ts:2229 +msgid "Clearing trash will permanently delete all the items in your trash. This action is IRREVERSIBLE." +msgstr "" + +#: src/strings.ts:2608 msgid "Click here to directly claim the promotion." msgstr "" @@ -1601,15 +1605,15 @@ msgstr "" msgid "Click to remove" msgstr "" -#: src/strings.ts:2392 +#: src/strings.ts:2393 msgid "Click to reset {title}" msgstr "" -#: src/strings.ts:2615 +#: src/strings.ts:2616 msgid "Click to save" msgstr "" -#: src/strings.ts:2611 +#: src/strings.ts:2612 msgid "Click to update" msgstr "" @@ -1621,11 +1625,11 @@ msgstr "" msgid "Close all" msgstr "" -#: src/strings.ts:2450 +#: src/strings.ts:2451 msgid "Close all tabs" msgstr "" -#: src/strings.ts:2449 +#: src/strings.ts:2450 msgid "Close current tab" msgstr "" @@ -1645,19 +1649,19 @@ msgstr "" msgid "Close to the right" msgstr "" -#: src/strings.ts:2528 +#: src/strings.ts:2529 msgid "cloud storage space for storing images and files." msgstr "" -#: src/strings.ts:2267 +#: src/strings.ts:2268 msgid "Code" msgstr "" -#: src/strings.ts:2331 +#: src/strings.ts:2332 msgid "Code block" msgstr "" -#: src/strings.ts:2268 +#: src/strings.ts:2269 msgid "Code remove" msgstr "" @@ -1694,11 +1698,11 @@ msgstr "" msgid "Colors" msgstr "" -#: src/strings.ts:2285 +#: src/strings.ts:2286 msgid "Column properties" msgstr "" -#: src/strings.ts:2441 +#: src/strings.ts:2442 msgid "Command palette" msgstr "" @@ -1706,7 +1710,7 @@ msgstr "" msgid "Community" msgstr "" -#: src/strings.ts:2548 +#: src/strings.ts:2549 msgid "Compare plans" msgstr "" @@ -1726,11 +1730,11 @@ msgstr "" msgid "Compressed images are uploaded in Full HD resolution and usually are good enough for most use cases." msgstr "" -#: src/strings.ts:2251 +#: src/strings.ts:2252 msgid "Configure" msgstr "" -#: src/strings.ts:2406 +#: src/strings.ts:2407 msgid "Configure server URLs for Notesnook" msgstr "" @@ -1754,7 +1758,7 @@ msgstr "" msgid "Confirm pin" msgstr "" -#: src/strings.ts:2639 +#: src/strings.ts:2640 msgid "Confirmation email sent" msgstr "" @@ -1803,7 +1807,7 @@ msgstr "" msgid "Copy codes" msgstr "" -#: src/strings.ts:2247 +#: src/strings.ts:2248 msgid "Copy image" msgstr "" @@ -1811,7 +1815,7 @@ msgstr "" msgid "Copy link" msgstr "" -#: src/strings.ts:2246 +#: src/strings.ts:2247 msgid "Copy link text" msgstr "" @@ -1911,7 +1915,7 @@ msgstr "" msgid "Create your account" msgstr "" -#: src/strings.ts:2229 +#: src/strings.ts:2230 msgid "Created at" msgstr "" @@ -1980,7 +1984,7 @@ msgstr "" msgid "Customize toolbar" msgstr "" -#: src/strings.ts:2245 +#: src/strings.ts:2246 msgid "Cut" msgstr "" @@ -2041,7 +2045,7 @@ msgstr "" msgid "Day" msgstr "" -#: src/strings.ts:2619 +#: src/strings.ts:2620 msgid "Day format" msgstr "" @@ -2065,7 +2069,7 @@ msgstr "" msgid "Debugging" msgstr "" -#: src/strings.ts:2394 +#: src/strings.ts:2395 msgid "Decrease {title}" msgstr "" @@ -2098,7 +2102,7 @@ msgstr "" msgid "Default screen to open on app launch" msgstr "" -#: src/strings.ts:2481 +#: src/strings.ts:2482 msgid "Default sidebar tab" msgstr "" @@ -2122,11 +2126,11 @@ msgstr "" msgid "Delete collapsed section" msgstr "" -#: src/strings.ts:2292 +#: src/strings.ts:2293 msgid "Delete column" msgstr "" -#: src/strings.ts:2636 +#: src/strings.ts:2637 msgid "Delete data" msgstr "" @@ -2134,7 +2138,7 @@ msgstr "" msgid "Delete group" msgstr "" -#: src/strings.ts:2366 +#: src/strings.ts:2367 msgid "Delete mode" msgstr "" @@ -2146,11 +2150,11 @@ msgstr "" msgid "Delete permanently" msgstr "" -#: src/strings.ts:2299 +#: src/strings.ts:2300 msgid "Delete row" msgstr "" -#: src/strings.ts:2300 +#: src/strings.ts:2301 msgid "Delete table" msgstr "" @@ -2230,10 +2234,6 @@ msgstr "" msgid "Do you enjoy using Notesnook?" msgstr "" -#: src/strings.ts:2228 -msgid "Do you want to clear the trash?" -msgstr "" - #: src/strings.ts:1263 msgid "Documentation" msgstr "" @@ -2294,7 +2294,7 @@ msgstr "" msgid "Download all attachments" msgstr "" -#: src/strings.ts:2315 +#: src/strings.ts:2316 msgid "Download attachment" msgstr "" @@ -2359,7 +2359,7 @@ msgstr "" msgid "Drop your files here to attach" msgstr "" -#: src/strings.ts:2558 +#: src/strings.ts:2559 msgid "Due {date}" msgstr "" @@ -2367,7 +2367,7 @@ msgstr "" msgid "Due date" msgstr "" -#: src/strings.ts:2556 +#: src/strings.ts:2557 msgid "Due today" msgstr "" @@ -2379,7 +2379,7 @@ msgstr "" msgid "Earliest first" msgstr "" -#: src/strings.ts:2418 +#: src/strings.ts:2419 msgid "Easy access" msgstr "" @@ -2387,7 +2387,7 @@ msgstr "" msgid "Edit" msgstr "" -#: src/strings.ts:2626 +#: src/strings.ts:2627 msgid "Edit creation date" msgstr "" @@ -2395,12 +2395,12 @@ msgstr "" msgid "Edit internal link" msgstr "" -#: src/strings.ts:2234 -#: src/strings.ts:2262 +#: src/strings.ts:2235 +#: src/strings.ts:2263 msgid "Edit link" msgstr "" -#: src/strings.ts:2474 +#: src/strings.ts:2475 msgid "Edit profile" msgstr "" @@ -2417,7 +2417,7 @@ msgstr "" msgid "Editor" msgstr "" -#: src/strings.ts:2582 +#: src/strings.ts:2583 msgid "Education plan" msgstr "" @@ -2425,7 +2425,7 @@ msgstr "" msgid "Email" msgstr "" -#: src/strings.ts:2431 +#: src/strings.ts:2432 msgid "Email copied" msgstr "" @@ -2449,15 +2449,15 @@ msgstr "" msgid "Email updated to {email}" msgstr "" -#: src/strings.ts:2341 +#: src/strings.ts:2342 msgid "Embed" msgstr "" -#: src/strings.ts:2321 +#: src/strings.ts:2322 msgid "Embed properties" msgstr "" -#: src/strings.ts:2317 +#: src/strings.ts:2318 msgid "Embed settings" msgstr "" @@ -2477,11 +2477,11 @@ msgstr "" msgid "Enable editor margins" msgstr "" -#: src/strings.ts:2465 +#: src/strings.ts:2466 msgid "Enable ligatures for common symbols like →, ←, etc" msgstr "" -#: src/strings.ts:2381 +#: src/strings.ts:2382 msgid "Enable regex" msgstr "" @@ -2501,7 +2501,7 @@ msgstr "" msgid "Encrypted and synced" msgstr "" -#: src/strings.ts:2241 +#: src/strings.ts:2242 msgid "Encrypted backup" msgstr "" @@ -2553,7 +2553,7 @@ msgstr "" msgid "Enter email address" msgstr "" -#: src/strings.ts:2369 +#: src/strings.ts:2370 msgid "Enter embed source URL" msgstr "" @@ -2597,7 +2597,7 @@ msgstr "" msgid "Enter the 6 digit code sent to your phone number to continue logging in" msgstr "" -#: src/strings.ts:2433 +#: src/strings.ts:2434 msgid "Enter the gift code to redeem your subscription." msgstr "" @@ -2605,7 +2605,7 @@ msgstr "" msgid "Enter the recovery code to continue logging in" msgstr "" -#: src/strings.ts:2618 +#: src/strings.ts:2619 msgid "Enter title" msgstr "" @@ -2621,7 +2621,7 @@ msgstr "" msgid "Enter your username" msgstr "" -#: src/strings.ts:2425 +#: src/strings.ts:2426 msgid "Error" msgstr "" @@ -2657,7 +2657,7 @@ msgstr "" msgid "Errors in {count} attachments" msgstr "" -#: src/strings.ts:2470 +#: src/strings.ts:2471 msgid "Essential plan" msgstr "" @@ -2665,23 +2665,23 @@ msgstr "" msgid "Events server" msgstr "" -#: src/strings.ts:2411 +#: src/strings.ts:2412 msgid "Every Notebook can have notes and sub notebooks." msgstr "" -#: src/strings.ts:2413 +#: src/strings.ts:2414 msgid "Everything related to my job in one place." msgstr "" -#: src/strings.ts:2422 +#: src/strings.ts:2423 msgid "Everything related to my school in one place." msgstr "" -#: src/strings.ts:2439 +#: src/strings.ts:2440 msgid "Execute" msgstr "" -#: src/strings.ts:2438 +#: src/strings.ts:2439 msgid "Execute a command..." msgstr "" @@ -2689,11 +2689,11 @@ msgstr "" msgid "Exit fullscreen" msgstr "" -#: src/strings.ts:2373 +#: src/strings.ts:2374 msgid "Expand" msgstr "" -#: src/strings.ts:2466 +#: src/strings.ts:2467 msgid "Expand sidebar" msgstr "" @@ -2701,11 +2701,11 @@ msgstr "" msgid "Experience the next level of private note taking\"" msgstr "" -#: src/strings.ts:2632 +#: src/strings.ts:2633 msgid "Expiry date" msgstr "" -#: src/strings.ts:2539 +#: src/strings.ts:2540 msgid "Explore all plans" msgstr "" @@ -2730,7 +2730,7 @@ msgstr "" msgid "Export as{0}" msgstr "" -#: src/strings.ts:2633 +#: src/strings.ts:2634 msgid "Export CSV" msgstr "" @@ -2754,11 +2754,11 @@ msgstr "" msgid "Faced an issue or have a suggestion? Click here to create a bug report" msgstr "" -#: src/strings.ts:2403 +#: src/strings.ts:2404 msgid "Failed" msgstr "" -#: src/strings.ts:2637 +#: src/strings.ts:2638 msgid "Failed to attach file" msgstr "" @@ -2834,7 +2834,7 @@ msgstr "" msgid "Fallback method for 2FA enabled" msgstr "" -#: src/strings.ts:2549 +#: src/strings.ts:2550 msgid "FAQs" msgstr "" @@ -2847,15 +2847,15 @@ msgstr "" msgid "Favorites" msgstr "" -#: src/strings.ts:2547 +#: src/strings.ts:2548 msgid "Featured on" msgstr "" -#: src/strings.ts:2415 +#: src/strings.ts:2416 msgid "February 2022 Week 2" msgstr "" -#: src/strings.ts:2416 +#: src/strings.ts:2417 msgid "February 2022 Week 3" msgstr "" @@ -2895,7 +2895,7 @@ msgstr "" msgid "Filter languages" msgstr "" -#: src/strings.ts:2604 +#: src/strings.ts:2605 msgid "Finish your purchase in the browser." msgstr "" @@ -2927,19 +2927,19 @@ msgstr "" msgid "Follow us on X for updates and news about Notesnook" msgstr "" -#: src/strings.ts:2276 +#: src/strings.ts:2277 msgid "Font family" msgstr "" -#: src/strings.ts:2463 +#: src/strings.ts:2464 msgid "Font ligatures" msgstr "" -#: src/strings.ts:2277 +#: src/strings.ts:2278 msgid "Font size" msgstr "" -#: src/strings.ts:2521 +#: src/strings.ts:2522 msgid "For a monthly subscription, you can get a refund within 7 days of purchase. For a yearly subscription, we offer a full refund within 14 days of purchase. For a 5 year subscription, you can request a refund within 30 days of purchase." msgstr "" @@ -2951,7 +2951,7 @@ msgstr "" msgid "for help regarding how to use the Notesnook Importer." msgstr "" -#: src/strings.ts:2530 +#: src/strings.ts:2531 msgid "for locking your notes as soon as app enters background" msgstr "" @@ -2982,11 +2982,11 @@ msgstr "" msgid "Forgot password?" msgstr "" -#: src/strings.ts:2564 +#: src/strings.ts:2565 msgid "Free {duration} day trial, cancel any time" msgstr "" -#: src/strings.ts:2468 +#: src/strings.ts:2469 msgid "Free plan" msgstr "" @@ -2998,11 +2998,11 @@ msgstr "" msgid "Friday" msgstr "" -#: src/strings.ts:2371 +#: src/strings.ts:2372 msgid "From code" msgstr "" -#: src/strings.ts:2368 +#: src/strings.ts:2369 msgid "From URL" msgstr "" @@ -3014,7 +3014,7 @@ msgstr "" msgid "Full offline mode" msgstr "" -#: src/strings.ts:2323 +#: src/strings.ts:2324 msgid "Full screen" msgstr "" @@ -3046,7 +3046,7 @@ msgstr "" msgid "Get Notesnook Pro to enable automatic backups" msgstr "" -#: src/strings.ts:2407 +#: src/strings.ts:2408 msgid "Get Priority support" msgstr "" @@ -3058,7 +3058,7 @@ msgstr "" msgid "Get started" msgstr "" -#: src/strings.ts:2527 +#: src/strings.ts:2528 msgid "Get this and so much more:" msgstr "" @@ -3078,11 +3078,11 @@ msgstr "" msgid "GNU GENERAL PUBLIC LICENSE Version 3" msgstr "" -#: src/strings.ts:2605 +#: src/strings.ts:2606 msgid "Go back" msgstr "" -#: src/strings.ts:2446 +#: src/strings.ts:2447 msgid "Go back in tab" msgstr "" @@ -3094,7 +3094,7 @@ msgstr "" msgid "Go back to tags" msgstr "" -#: src/strings.ts:2445 +#: src/strings.ts:2446 msgid "Go forward in tab" msgstr "" @@ -3118,11 +3118,11 @@ msgstr "" msgid "Go to web app" msgstr "" -#: src/strings.ts:2538 +#: src/strings.ts:2539 msgid "Google will remind you 2 days before your trial ends." msgstr "" -#: src/strings.ts:2565 +#: src/strings.ts:2566 msgid "Google will remind you before your trial ends" msgstr "" @@ -3150,19 +3150,19 @@ msgstr "" msgid "Having problems with sync?" msgstr "" -#: src/strings.ts:2553 +#: src/strings.ts:2554 msgid "hdImages" msgstr "" -#: src/strings.ts:2349 +#: src/strings.ts:2350 msgid "Heading {level}" msgstr "" -#: src/strings.ts:2278 +#: src/strings.ts:2279 msgid "Headings" msgstr "" -#: src/strings.ts:2384 +#: src/strings.ts:2385 msgid "Height" msgstr "" @@ -3186,7 +3186,7 @@ msgstr "" msgid "Hide note title" msgstr "" -#: src/strings.ts:2281 +#: src/strings.ts:2282 msgid "Highlight" msgstr "" @@ -3206,7 +3206,7 @@ msgstr "" msgid "Homepage changed to {name}" msgstr "" -#: src/strings.ts:2330 +#: src/strings.ts:2331 msgid "Horizontal rule" msgstr "" @@ -3222,7 +3222,7 @@ msgstr "" msgid "hr" msgstr "" -#: src/strings.ts:2498 +#: src/strings.ts:2499 msgid "I already have an account" msgstr "" @@ -3250,7 +3250,7 @@ msgstr "" msgid "I have saved my key" msgstr "" -#: src/strings.ts:2424 +#: src/strings.ts:2425 msgid "I love cooking and collecting recipes." msgstr "" @@ -3300,7 +3300,7 @@ msgstr "" msgid "If you want to ask something in general or need some assistance, we would suggest that you" msgstr "" -#: src/strings.ts:2335 +#: src/strings.ts:2336 msgid "Image" msgstr "" @@ -3308,11 +3308,11 @@ msgstr "" msgid "Image Compression" msgstr "" -#: src/strings.ts:2311 +#: src/strings.ts:2312 msgid "Image properties" msgstr "" -#: src/strings.ts:2307 +#: src/strings.ts:2308 msgid "Image settings" msgstr "" @@ -3340,7 +3340,7 @@ msgstr "" msgid "Import completed" msgstr "" -#: src/strings.ts:2634 +#: src/strings.ts:2635 msgid "Import CSV" msgstr "" @@ -3360,47 +3360,47 @@ msgstr "" msgid "Incorrect {type}" msgstr "" -#: src/strings.ts:2393 +#: src/strings.ts:2394 msgid "Increase {title}" msgstr "" -#: src/strings.ts:2235 +#: src/strings.ts:2236 msgid "Insert" msgstr "" -#: src/strings.ts:2390 +#: src/strings.ts:2391 msgid "Insert a {rows}x{columns} table" msgstr "" -#: src/strings.ts:2340 +#: src/strings.ts:2341 msgid "Insert a table" msgstr "" -#: src/strings.ts:2342 +#: src/strings.ts:2343 msgid "Insert an embed" msgstr "" -#: src/strings.ts:2336 +#: src/strings.ts:2337 msgid "Insert an image" msgstr "" -#: src/strings.ts:2288 +#: src/strings.ts:2289 msgid "Insert column left" msgstr "" -#: src/strings.ts:2289 +#: src/strings.ts:2290 msgid "Insert column right" msgstr "" -#: src/strings.ts:2233 +#: src/strings.ts:2234 msgid "Insert link" msgstr "" -#: src/strings.ts:2295 +#: src/strings.ts:2296 msgid "Insert row above" msgstr "" -#: src/strings.ts:2296 +#: src/strings.ts:2297 msgid "Insert row below" msgstr "" @@ -3428,7 +3428,7 @@ msgstr "" msgid "Invalid email" msgstr "" -#: src/strings.ts:2642 +#: src/strings.ts:2643 msgid "Invalid recovery key. Make sure to input your account recovery key, not a 2FA recovery code." msgstr "" @@ -3449,7 +3449,7 @@ msgstr "" msgid "It took us a year to bring Notesnook to life. Share your experience and suggestions to help us improve it." msgstr "" -#: src/strings.ts:2257 +#: src/strings.ts:2258 msgid "Italic" msgstr "" @@ -3518,7 +3518,7 @@ msgstr "" msgid "Languages" msgstr "" -#: src/strings.ts:2230 +#: src/strings.ts:2231 msgid "Last edited at" msgstr "" @@ -3566,7 +3566,7 @@ msgstr "" msgid "Licensed under {license}" msgstr "" -#: src/strings.ts:2326 +#: src/strings.ts:2327 msgid "Lift list item" msgstr "" @@ -3574,11 +3574,11 @@ msgstr "" msgid "Light" msgstr "" -#: src/strings.ts:2356 +#: src/strings.ts:2357 msgid "Line {line}, Column {column}" msgstr "" -#: src/strings.ts:2616 +#: src/strings.ts:2617 msgid "Line height" msgstr "" @@ -3586,7 +3586,7 @@ msgstr "" msgid "Line spacing changed" msgstr "" -#: src/strings.ts:2261 +#: src/strings.ts:2262 msgid "Link" msgstr "" @@ -3598,15 +3598,15 @@ msgstr "" msgid "Link notebooks" msgstr "" -#: src/strings.ts:2475 +#: src/strings.ts:2476 msgid "Link notes" msgstr "" -#: src/strings.ts:2266 +#: src/strings.ts:2267 msgid "Link settings" msgstr "" -#: src/strings.ts:2386 +#: src/strings.ts:2387 msgid "Link text" msgstr "" @@ -3751,7 +3751,7 @@ msgstr "" msgid "Login to encrypt and sync notes" msgstr "" -#: src/strings.ts:2609 +#: src/strings.ts:2610 msgid "Login to upload attachments. [Read more](https://help.notesnook.com/faqs/login-to-upload-attachments)" msgstr "" @@ -3775,7 +3775,7 @@ msgstr "" msgid "Long press on any item in list to enter multi-select mode." msgstr "" -#: src/strings.ts:2361 +#: src/strings.ts:2362 msgid "Make task list readonly" msgstr "" @@ -3827,19 +3827,19 @@ msgstr "" msgid "Marketing emails" msgstr "" -#: src/strings.ts:2374 +#: src/strings.ts:2375 msgid "Match case" msgstr "" -#: src/strings.ts:2375 +#: src/strings.ts:2376 msgid "Match whole word" msgstr "" -#: src/strings.ts:2283 +#: src/strings.ts:2284 msgid "Math (inline)" msgstr "" -#: src/strings.ts:2333 +#: src/strings.ts:2334 msgid "Math & formulas" msgstr "" @@ -3851,7 +3851,7 @@ msgstr "" msgid "Meet other privacy-minded people & talk to us directly about your concerns, issues and suggestions." msgstr "" -#: src/strings.ts:2417 +#: src/strings.ts:2418 msgid "Meetings" msgstr "" @@ -3859,7 +3859,7 @@ msgstr "" msgid "Member since {date}" msgstr "" -#: src/strings.ts:2294 +#: src/strings.ts:2295 msgid "Merge cells" msgstr "" @@ -3936,7 +3936,7 @@ msgstr "" msgid "Monthly" msgstr "" -#: src/strings.ts:2313 +#: src/strings.ts:2314 msgid "More" msgstr "" @@ -3948,15 +3948,15 @@ msgstr "" msgid "Move" msgstr "" -#: src/strings.ts:2362 +#: src/strings.ts:2363 msgid "Move all checked tasks to bottom" msgstr "" -#: src/strings.ts:2290 +#: src/strings.ts:2291 msgid "Move column left" msgstr "" -#: src/strings.ts:2291 +#: src/strings.ts:2292 msgid "Move column right" msgstr "" @@ -3968,11 +3968,11 @@ msgstr "" msgid "Move notes" msgstr "" -#: src/strings.ts:2298 +#: src/strings.ts:2299 msgid "Move row down" msgstr "" -#: src/strings.ts:2297 +#: src/strings.ts:2298 msgid "Move row up" msgstr "" @@ -4000,7 +4000,7 @@ msgstr "" msgid "Native high-performance encryption" msgstr "" -#: src/strings.ts:2442 +#: src/strings.ts:2443 msgid "Navigate" msgstr "" @@ -4060,7 +4060,7 @@ msgstr "" msgid "New tab" msgstr "" -#: src/strings.ts:2448 +#: src/strings.ts:2449 msgid "New tag" msgstr "" @@ -4084,11 +4084,11 @@ msgstr "" msgid "Next" msgstr "" -#: src/strings.ts:2378 +#: src/strings.ts:2379 msgid "Next match" msgstr "" -#: src/strings.ts:2443 +#: src/strings.ts:2444 msgid "Next tab" msgstr "" @@ -4144,7 +4144,7 @@ msgstr "" msgid "No note history available for this device." msgstr "" -#: src/strings.ts:2492 +#: src/strings.ts:2493 msgid "No notebooks selected to move" msgstr "" @@ -4152,7 +4152,7 @@ msgstr "" msgid "No one can view this {type} except you." msgstr "" -#: src/strings.ts:2612 +#: src/strings.ts:2613 msgid "No password" msgstr "" @@ -4246,7 +4246,7 @@ msgstr "" msgid "Notebook" msgstr "" -#: src/strings.ts:2478 +#: src/strings.ts:2479 msgid "Notebook added" msgstr "" @@ -4264,7 +4264,7 @@ msgstr "" msgid "NOTEBOOKS" msgstr "" -#: src/strings.ts:2240 +#: src/strings.ts:2241 msgid "Notebooks are the best way to organize your notes." msgstr "" @@ -4285,15 +4285,15 @@ msgstr "" msgid "notes imported" msgstr "" -#: src/strings.ts:2542 +#: src/strings.ts:2543 msgid "Notesnook" msgstr "" -#: src/strings.ts:2597 +#: src/strings.ts:2598 msgid "Notesnook Circle" msgstr "" -#: src/strings.ts:2599 +#: src/strings.ts:2600 msgid "Notesnook Circle brings together trusted partners who share our commitment to privacy, transparency, and user freedom." msgstr "" @@ -4335,7 +4335,7 @@ msgstr "" msgid "Notifications disabled" msgstr "" -#: src/strings.ts:2274 +#: src/strings.ts:2275 msgid "Numbered list" msgstr "" @@ -4375,7 +4375,7 @@ msgstr "" msgid "Once your password is changed, please make sure to save the new account recovery key" msgstr "" -#: src/strings.ts:2560 +#: src/strings.ts:2561 msgid "One time purchase, no auto-renewal" msgstr "" @@ -4399,7 +4399,7 @@ msgstr "" msgid "Open in browser to manage subscription" msgstr "" -#: src/strings.ts:2324 +#: src/strings.ts:2325 msgid "Open in new tab" msgstr "" @@ -4407,7 +4407,7 @@ msgstr "" msgid "Open issue" msgstr "" -#: src/strings.ts:2264 +#: src/strings.ts:2265 msgid "Open link" msgstr "" @@ -4419,7 +4419,7 @@ msgstr "" msgid "Open settings" msgstr "" -#: src/strings.ts:2325 +#: src/strings.ts:2326 msgid "Open source" msgstr "" @@ -4464,15 +4464,15 @@ msgstr "" msgid "Other" msgstr "" -#: src/strings.ts:2345 +#: src/strings.ts:2346 msgid "Outline list" msgstr "" -#: src/strings.ts:2348 +#: src/strings.ts:2349 msgid "Paragraph" msgstr "" -#: src/strings.ts:2491 +#: src/strings.ts:2492 msgid "Paragraphs" msgstr "" @@ -4484,7 +4484,7 @@ msgstr "" msgid "Partially refunded" msgstr "" -#: src/strings.ts:2402 +#: src/strings.ts:2403 msgid "Passed" msgstr "" @@ -4524,27 +4524,27 @@ msgstr "" msgid "Password/pin" msgstr "" -#: src/strings.ts:2248 +#: src/strings.ts:2249 msgid "Paste" msgstr "" -#: src/strings.ts:2249 +#: src/strings.ts:2250 msgid "Paste and match style" msgstr "" -#: src/strings.ts:2370 +#: src/strings.ts:2371 msgid "Paste embed code here. Only iframes are supported." msgstr "" -#: src/strings.ts:2385 +#: src/strings.ts:2386 msgid "Paste image URL here" msgstr "" -#: src/strings.ts:2250 +#: src/strings.ts:2251 msgid "Paste without formatting" msgstr "" -#: src/strings.ts:2561 +#: src/strings.ts:2562 msgid "Pay once and use for 5 years" msgstr "" @@ -4584,11 +4584,11 @@ msgstr "" msgid "Pinned" msgstr "" -#: src/strings.ts:2579 +#: src/strings.ts:2580 msgid "Plan limits" msgstr "" -#: src/strings.ts:2542 +#: src/strings.ts:2543 msgid "Plans" msgstr "" @@ -4601,7 +4601,7 @@ msgid "Please confirm your identity by entering a recovery code." msgstr "" #: src/strings.ts:981 -#: src/strings.ts:2232 +#: src/strings.ts:2233 msgid "Please confirm your identity by entering the authentication code from your authenticator app." msgstr "" @@ -4642,7 +4642,7 @@ msgstr "" msgid "Please enter password of this backup file" msgstr "" -#: src/strings.ts:2243 +#: src/strings.ts:2244 msgid "Please enter the password to decrypt and restore this backup." msgstr "" @@ -4702,7 +4702,7 @@ msgstr "" msgid "please send us an email from your registered email address" msgstr "" -#: src/strings.ts:2391 +#: src/strings.ts:2392 msgid "Please set a table size" msgstr "" @@ -4808,7 +4808,7 @@ msgstr "" msgid "Prevent note title from appearing in tab/window title." msgstr "" -#: src/strings.ts:2312 +#: src/strings.ts:2313 msgid "Preview attachment" msgstr "" @@ -4816,11 +4816,11 @@ msgstr "" msgid "Preview not available, content is encrypted." msgstr "" -#: src/strings.ts:2379 +#: src/strings.ts:2380 msgid "Previous match" msgstr "" -#: src/strings.ts:2444 +#: src/strings.ts:2445 msgid "Previous tab" msgstr "" @@ -4848,7 +4848,7 @@ msgstr "" msgid "Privacy mode" msgstr "" -#: src/strings.ts:2574 +#: src/strings.ts:2575 msgid "privacy policy" msgstr "" @@ -4876,7 +4876,7 @@ msgstr "" msgid "Pro" msgstr "" -#: src/strings.ts:2469 +#: src/strings.ts:2470 msgid "Pro plan" msgstr "" @@ -4920,7 +4920,7 @@ msgstr "" msgid "Publish note" msgstr "" -#: src/strings.ts:2613 +#: src/strings.ts:2614 msgid "Publish to the web" msgstr "" @@ -4944,7 +4944,7 @@ msgstr "" msgid "Published note link will be automatically deleted once it is viewed by someone." msgstr "" -#: src/strings.ts:2567 +#: src/strings.ts:2568 msgid "Purchase" msgstr "" @@ -4960,7 +4960,7 @@ msgstr "" msgid "Quick note widgets" msgstr "" -#: src/strings.ts:2440 +#: src/strings.ts:2441 msgid "Quick open" msgstr "" @@ -4968,7 +4968,7 @@ msgstr "" msgid "Quickly create a note from the notification" msgstr "" -#: src/strings.ts:2332 +#: src/strings.ts:2333 msgid "Quote" msgstr "" @@ -5008,7 +5008,7 @@ msgstr "" msgid "Reading backup file..." msgstr "" -#: src/strings.ts:2544 +#: src/strings.ts:2545 msgid "Ready to take the next step on your private note taking journey?" msgstr "" @@ -5020,11 +5020,11 @@ msgstr "" msgid "RECENT BACKUPS" msgstr "" -#: src/strings.ts:2455 +#: src/strings.ts:2456 msgid "Recents" msgstr "" -#: src/strings.ts:2398 +#: src/strings.ts:2399 msgid "Recheck all" msgstr "" @@ -5032,7 +5032,7 @@ msgstr "" msgid "Rechecking failed" msgstr "" -#: src/strings.ts:2423 +#: src/strings.ts:2424 msgid "Recipes" msgstr "" @@ -5040,7 +5040,7 @@ msgstr "" msgid "Recommended" msgstr "" -#: src/strings.ts:2546 +#: src/strings.ts:2547 msgid "Recommended by Privacy Guides" msgstr "" @@ -5080,19 +5080,19 @@ msgstr "" msgid "Recovery successful!" msgstr "" -#: src/strings.ts:2435 +#: src/strings.ts:2436 msgid "Redeem" msgstr "" -#: src/strings.ts:2596 +#: src/strings.ts:2597 msgid "Redeem code" msgstr "" -#: src/strings.ts:2432 +#: src/strings.ts:2433 msgid "Redeem gift code" msgstr "" -#: src/strings.ts:2434 +#: src/strings.ts:2435 msgid "Redeeming gift code" msgstr "" @@ -5120,7 +5120,7 @@ msgstr "" msgid "Release notes" msgstr "" -#: src/strings.ts:2457 +#: src/strings.ts:2458 msgid "Release track" msgstr "" @@ -5214,7 +5214,7 @@ msgstr "" msgid "Remove as default" msgstr "" -#: src/strings.ts:2316 +#: src/strings.ts:2317 msgid "Remove attachment" msgstr "" @@ -5226,7 +5226,7 @@ msgstr "" msgid "Remove from notebook" msgstr "" -#: src/strings.ts:2456 +#: src/strings.ts:2457 msgid "Remove from recents" msgstr "" @@ -5234,7 +5234,7 @@ msgstr "" msgid "Remove full name" msgstr "" -#: src/strings.ts:2263 +#: src/strings.ts:2264 msgid "Remove link" msgstr "" @@ -5266,11 +5266,11 @@ msgstr "" msgid "Repeats daily at {date}" msgstr "" -#: src/strings.ts:2376 +#: src/strings.ts:2377 msgid "Replace" msgstr "" -#: src/strings.ts:2377 +#: src/strings.ts:2378 msgid "Replace all" msgstr "" @@ -5307,7 +5307,7 @@ msgstr "" msgid "Reset account password" msgstr "" -#: src/strings.ts:2483 +#: src/strings.ts:2484 msgid "Reset homepage" msgstr "" @@ -5359,7 +5359,7 @@ msgstr "" msgid "Restore backup" msgstr "" -#: src/strings.ts:2405 +#: src/strings.ts:2406 msgid "Restore backup?" msgstr "" @@ -5439,7 +5439,7 @@ msgstr "" msgid "Rotate right" msgstr "" -#: src/strings.ts:2286 +#: src/strings.ts:2287 msgid "Row properties" msgstr "" @@ -5519,11 +5519,11 @@ msgstr "" msgid "Save your recovery codes in a safe place. You will need them to recover your account in case you lose access to your two-factor authentication methods." msgstr "" -#: src/strings.ts:2395 +#: src/strings.ts:2396 msgid "Saved" msgstr "" -#: src/strings.ts:2396 +#: src/strings.ts:2397 msgid "Saving" msgstr "" @@ -5543,15 +5543,15 @@ msgstr "" msgid "Scan the QR code with your authenticator app" msgstr "" -#: src/strings.ts:2421 +#: src/strings.ts:2422 msgid "School work" msgstr "" -#: src/strings.ts:2494 +#: src/strings.ts:2495 msgid "Scroll to bottom" msgstr "" -#: src/strings.ts:2493 +#: src/strings.ts:2494 msgid "Scroll to top" msgstr "" @@ -5568,7 +5568,7 @@ msgstr "" msgid "Search a note to link to" msgstr "" -#: src/strings.ts:2437 +#: src/strings.ts:2438 msgid "Search for notes, notebooks, and tags..." msgstr "" @@ -5624,7 +5624,7 @@ msgstr "" msgid "Search in Trash" msgstr "" -#: src/strings.ts:2358 +#: src/strings.ts:2359 msgid "Search languages" msgstr "" @@ -5672,7 +5672,7 @@ msgstr "" msgid "Select a backup file from your device to restore backup" msgstr "" -#: src/strings.ts:2488 +#: src/strings.ts:2489 msgid "Select a notebook to move this notebook into, or unselect to move it to the root level." msgstr "" @@ -5716,7 +5716,7 @@ msgstr "" msgid "Select how you would like to recieve the code" msgstr "" -#: src/strings.ts:2353 +#: src/strings.ts:2354 msgid "Select language" msgstr "" @@ -5732,7 +5732,7 @@ msgstr "" msgid "Select notebooks you want to add note(s) to." msgstr "" -#: src/strings.ts:2476 +#: src/strings.ts:2477 msgid "Select notes to link to \"{title}\"" msgstr "" @@ -5744,7 +5744,7 @@ msgstr "" msgid "Select profile picture" msgstr "" -#: src/strings.ts:2482 +#: src/strings.ts:2483 msgid "Select the default sidebar tab" msgstr "" @@ -5756,7 +5756,7 @@ msgstr "" msgid "Select the languages the spell checker should check in." msgstr "" -#: src/strings.ts:2458 +#: src/strings.ts:2459 msgid "Select the release track for Notesnook." msgstr "" @@ -5848,7 +5848,7 @@ msgstr "" msgid "Set as default" msgstr "" -#: src/strings.ts:2480 +#: src/strings.ts:2481 msgid "Set as homepage" msgstr "" @@ -5860,7 +5860,7 @@ msgstr "" msgid "Set automatic trash cleanup interval from Settings > Behaviour > Clean trash interval." msgstr "" -#: src/strings.ts:2630 +#: src/strings.ts:2631 msgid "Set expiry" msgstr "" @@ -6002,7 +6002,7 @@ msgstr "" msgid "Silent" msgstr "" -#: src/strings.ts:2327 +#: src/strings.ts:2328 msgid "Sink list item" msgstr "" @@ -6046,11 +6046,11 @@ msgstr "" msgid "Source code" msgstr "" -#: src/strings.ts:2354 +#: src/strings.ts:2355 msgid "Spaces" msgstr "" -#: src/strings.ts:2589 +#: src/strings.ts:2590 msgid "Special Offer" msgstr "" @@ -6058,11 +6058,11 @@ msgstr "" msgid "Spell check" msgstr "" -#: src/strings.ts:2293 +#: src/strings.ts:2294 msgid "Split cells" msgstr "" -#: src/strings.ts:2459 +#: src/strings.ts:2460 msgid "Stable" msgstr "" @@ -6106,7 +6106,7 @@ msgstr "" msgid "Status" msgstr "" -#: src/strings.ts:2472 +#: src/strings.ts:2473 msgid "Storage" msgstr "" @@ -6114,7 +6114,7 @@ msgstr "" msgid "Streaming not supported" msgstr "" -#: src/strings.ts:2259 +#: src/strings.ts:2260 msgid "Strikethrough" msgstr "" @@ -6130,11 +6130,11 @@ msgstr "" msgid "Submit" msgstr "" -#: src/strings.ts:2568 +#: src/strings.ts:2569 msgid "Subscribe" msgstr "" -#: src/strings.ts:2569 +#: src/strings.ts:2570 msgid "Subscribe and start free trial" msgstr "" @@ -6162,7 +6162,7 @@ msgstr "" msgid "Subscribed using gift card" msgstr "" -#: src/strings.ts:2270 +#: src/strings.ts:2271 msgid "Subscript" msgstr "" @@ -6186,7 +6186,7 @@ msgstr "" msgid "Sunday" msgstr "" -#: src/strings.ts:2271 +#: src/strings.ts:2272 msgid "Superscript" msgstr "" @@ -6242,7 +6242,7 @@ msgstr "" msgid "Syncing your notes" msgstr "" -#: src/strings.ts:2339 +#: src/strings.ts:2340 msgid "Table" msgstr "" @@ -6250,11 +6250,11 @@ msgstr "" msgid "Table of contents" msgstr "" -#: src/strings.ts:2284 +#: src/strings.ts:2285 msgid "Table settings" msgstr "" -#: src/strings.ts:2533 +#: src/strings.ts:2534 msgid "tables, outlines, block level note linking" msgstr "" @@ -6291,7 +6291,7 @@ msgstr "" msgid "Take a partial backup of your data that does not include attachments" msgstr "" -#: src/strings.ts:2338 +#: src/strings.ts:2339 msgid "Take a photo using camera" msgstr "" @@ -6351,11 +6351,11 @@ msgstr "" msgid "Tap twice to confirm you have saved the recovery key." msgstr "" -#: src/strings.ts:2344 +#: src/strings.ts:2345 msgid "Task list" msgstr "" -#: src/strings.ts:2414 +#: src/strings.ts:2415 msgid "Tasks" msgstr "" @@ -6386,7 +6386,7 @@ msgstr "" msgid "Terms of Service " msgstr "" -#: src/strings.ts:2576 +#: src/strings.ts:2577 msgid "terms of use." msgstr "" @@ -6398,11 +6398,11 @@ msgstr "" msgid "Test connection before changing server urls" msgstr "" -#: src/strings.ts:2282 +#: src/strings.ts:2283 msgid "Text color" msgstr "" -#: src/strings.ts:2280 +#: src/strings.ts:2281 msgid "Text direction" msgstr "" @@ -6414,11 +6414,11 @@ msgstr "" msgid "Thank you for reporting!" msgstr "" -#: src/strings.ts:2550 +#: src/strings.ts:2551 msgid "Thank you for subscribing" msgstr "" -#: src/strings.ts:2584 +#: src/strings.ts:2585 msgid "Thank you for the purchase" msgstr "" @@ -6434,7 +6434,7 @@ msgstr "" msgid "The {title} at {url} is not compatible with this client." msgstr "" -#: src/strings.ts:2629 +#: src/strings.ts:2630 msgid "The incoming note could not be unlocked with the provided password. Enter the correct password for the incoming note" msgstr "" @@ -6442,7 +6442,7 @@ msgstr "" msgid "The information above will be publically available at" msgstr "" -#: src/strings.ts:2603 +#: src/strings.ts:2604 msgid "The Notesnook Circle is exclusive to subscribers. Please consider subscribing to gain access to Notesnook Circle and enjoy additional benefits." msgstr "" @@ -6478,7 +6478,7 @@ msgstr "" msgid "There are no blocks in this note." msgstr "" -#: src/strings.ts:2237 +#: src/strings.ts:2238 msgid "These items will be **kept in your Trash for {interval} days** after which they will be permanently deleted." msgstr "" @@ -6518,7 +6518,7 @@ msgstr "" msgid "This image cannot be previewed" msgstr "" -#: src/strings.ts:2570 +#: src/strings.ts:2571 msgid "This is a one time purchase, no subscription." msgstr "" @@ -6531,7 +6531,7 @@ msgstr "" msgid "This must only be used for troubleshooting. Using it regularly for sync is not recommended and will lead to unexpected data loss and other issues. If you are having persistent issues with sync, please report them to us at support@streetwriters.co." msgstr "" -#: src/strings.ts:2635 +#: src/strings.ts:2636 msgid "This note is empty" msgstr "" @@ -6600,19 +6600,19 @@ msgstr "" msgid "Toggle dark/light mode" msgstr "" -#: src/strings.ts:2462 +#: src/strings.ts:2463 msgid "Toggle focus mode" msgstr "" -#: src/strings.ts:2351 +#: src/strings.ts:2352 msgid "Toggle indentation mode" msgstr "" -#: src/strings.ts:2380 +#: src/strings.ts:2381 msgid "Toggle replace" msgstr "" -#: src/strings.ts:2451 +#: src/strings.ts:2452 msgid "Toggle theme" msgstr "" @@ -6641,7 +6641,7 @@ msgstr "" msgid "Trash gets automatically cleaned up daily" msgstr "" -#: src/strings.ts:2540 +#: src/strings.ts:2541 msgid "Try {plan} for free" msgstr "" @@ -6653,7 +6653,7 @@ msgstr "" msgid "Try free for 14 days" msgstr "" -#: src/strings.ts:2526 +#: src/strings.ts:2527 msgid "Try it for free" msgstr "" @@ -6709,11 +6709,11 @@ msgstr "" msgid "Unable to send 2FA code" msgstr "" -#: src/strings.ts:2486 +#: src/strings.ts:2487 msgid "Unarchive" msgstr "" -#: src/strings.ts:2258 +#: src/strings.ts:2259 msgid "Underline" msgstr "" @@ -6725,7 +6725,7 @@ msgstr "" msgid "Unfavorite" msgstr "" -#: src/strings.ts:2580 +#: src/strings.ts:2581 msgid "Unlimited" msgstr "" @@ -6741,7 +6741,7 @@ msgstr "" msgid "Unlock" msgstr "" -#: src/strings.ts:2627 +#: src/strings.ts:2628 msgid "Unlock incoming note" msgstr "" @@ -6758,7 +6758,7 @@ msgstr "" msgid "Unlock note to delete it" msgstr "" -#: src/strings.ts:2638 +#: src/strings.ts:2639 msgid "Unlock note to merge conflicts" msgstr "" @@ -6810,12 +6810,12 @@ msgstr "" msgid "Unregister" msgstr "" -#: src/strings.ts:2631 +#: src/strings.ts:2632 msgid "Unset expiry" msgstr "" #: src/strings.ts:210 -#: src/strings.ts:2360 +#: src/strings.ts:2361 msgid "Untitled" msgstr "" @@ -6831,7 +6831,7 @@ msgstr "" msgid "Update now" msgstr "" -#: src/strings.ts:2500 +#: src/strings.ts:2501 msgid "Upgrade" msgstr "" @@ -6839,11 +6839,11 @@ msgstr "" msgid "Upgrade now" msgstr "" -#: src/strings.ts:2499 +#: src/strings.ts:2500 msgid "Upgrade plan" msgstr "" -#: src/strings.ts:2525 +#: src/strings.ts:2526 msgid "Upgrade plan to {plan} to use this feature." msgstr "" @@ -6859,7 +6859,7 @@ msgstr "" msgid "Upgrade to Pro" msgstr "" -#: src/strings.ts:2595 +#: src/strings.ts:2596 msgid "Upgrade to redeem" msgstr "" @@ -6867,7 +6867,7 @@ msgstr "" msgid "Upload" msgstr "" -#: src/strings.ts:2337 +#: src/strings.ts:2338 msgid "Upload from disk" msgstr "" @@ -6893,7 +6893,7 @@ msgstr "" msgid "Urgent" msgstr "" -#: src/strings.ts:2387 +#: src/strings.ts:2388 msgid "URL" msgstr "" @@ -6917,7 +6917,7 @@ msgstr "" msgid "Use account password" msgstr "" -#: src/strings.ts:2532 +#: src/strings.ts:2533 msgid "Use advanced note taking features like" msgstr "" @@ -6978,7 +6978,7 @@ msgstr "" msgid "Use this if changes made on this device are not appearing on other devices. This will overwrite the data on the server with the data from this device." msgstr "" -#: src/strings.ts:2473 +#: src/strings.ts:2474 msgid "used" msgstr "" @@ -6986,11 +6986,11 @@ msgstr "" msgid "User verification failed" msgstr "" -#: src/strings.ts:2254 +#: src/strings.ts:2255 msgid "Using {instance} (v{version})" msgstr "" -#: src/strings.ts:2252 +#: src/strings.ts:2253 msgid "Using official Notesnook instance" msgstr "" @@ -7086,7 +7086,7 @@ msgstr "" msgid "View your recovery codes to recover your account in case you lose access to your two-factor authentication methods." msgstr "" -#: src/strings.ts:2610 +#: src/strings.ts:2611 msgid "Views" msgstr "" @@ -7114,7 +7114,7 @@ msgstr "" msgid "We have sent you an email confirmation link. Please check your email inbox. If you cannot find the email, check your spam folder." msgstr "" -#: src/strings.ts:2511 +#: src/strings.ts:2512 msgid "We require credit card details to fight abuse and to make it seamless for you to upgrade. Your credit card is NOT charged until your free trial ends and your subscription starts. You will be notified via email of the upcoming charge before your trial ends." msgstr "" @@ -7130,11 +7130,11 @@ msgstr "" msgid "We would love to know what you think!" msgstr "" -#: src/strings.ts:2552 +#: src/strings.ts:2553 msgid "We’re setting up your plan right now. We’ll notify you as soon as everything is ready." msgstr "" -#: src/strings.ts:2322 +#: src/strings.ts:2323 msgid "Web clip settings" msgstr "" @@ -7154,7 +7154,7 @@ msgstr "" msgid "Week" msgstr "" -#: src/strings.ts:2623 +#: src/strings.ts:2624 msgid "Week format" msgstr "" @@ -7171,7 +7171,7 @@ msgstr "" msgid "Welcome back!" msgstr "" -#: src/strings.ts:2583 +#: src/strings.ts:2584 msgid "Welcome to Notesnook {plan}" msgstr "" @@ -7183,11 +7183,11 @@ msgstr "" msgid "What do I do if I am not getting the email?" msgstr "" -#: src/strings.ts:2503 +#: src/strings.ts:2504 msgid "What happens to my data if I switch plans?" msgstr "" -#: src/strings.ts:2519 +#: src/strings.ts:2520 msgid "What is your refund policy?" msgstr "" @@ -7195,19 +7195,19 @@ msgstr "" msgid "What went wrong?" msgstr "" -#: src/strings.ts:2509 +#: src/strings.ts:2510 msgid "Why do you need my credit card details for a free trial?" msgstr "" -#: src/strings.ts:2383 +#: src/strings.ts:2384 msgid "Width" msgstr "" -#: src/strings.ts:2489 +#: src/strings.ts:2490 msgid "Words" msgstr "" -#: src/strings.ts:2412 +#: src/strings.ts:2413 msgid "Work & Office" msgstr "" @@ -7240,7 +7240,7 @@ msgstr "" msgid "Yes" msgstr "" -#: src/strings.ts:2516 +#: src/strings.ts:2517 msgid "Yes, you can cancel your trial anytime. No questions asked." msgstr "" @@ -7248,11 +7248,11 @@ msgstr "" msgid "You also agree to recieve marketing emails from us which you can opt-out of from app settings." msgstr "" -#: src/strings.ts:2588 +#: src/strings.ts:2589 msgid "You are already subscribed to this plan." msgstr "" -#: src/strings.ts:2239 +#: src/strings.ts:2240 msgid "You are editing \"{notebookTitle}\"." msgstr "" @@ -7280,11 +7280,11 @@ msgstr "" msgid "You can change the theme at any time from Settings or the side menu." msgstr "" -#: src/strings.ts:2591 +#: src/strings.ts:2592 msgid "You can change your subscription plan from the web app" msgstr "" -#: src/strings.ts:2420 +#: src/strings.ts:2421 msgid "You can create shortcuts of frequently accessed notebooks in the side menu" msgstr "" @@ -7345,7 +7345,7 @@ msgstr "" msgid "You have been logged out." msgstr "" -#: src/strings.ts:2587 +#: src/strings.ts:2588 msgid "You have made a one time purchase. To change your plan please contact support." msgstr "" @@ -7446,7 +7446,7 @@ msgstr "" msgid "Your archive" msgstr "" -#: src/strings.ts:2485 +#: src/strings.ts:2486 msgid "Your archive is empty" msgstr "" @@ -7466,7 +7466,7 @@ msgstr "" msgid "Your current 2FA method is {method}" msgstr "" -#: src/strings.ts:2594 +#: src/strings.ts:2595 msgid "Your current subscription does not allow changing plans" msgstr "" @@ -7478,7 +7478,7 @@ msgstr "" msgid "Your data recovery key will be used to decrypt your data" msgstr "" -#: src/strings.ts:2505 +#: src/strings.ts:2506 msgid "Your data remains 100% accessible regardless of what plan you are on. That includes your notes, notebooks, attachments, and anything else you might have created." msgstr "" @@ -7486,7 +7486,7 @@ msgstr "" msgid "Your email has been confirmed." msgstr "" -#: src/strings.ts:2496 +#: src/strings.ts:2497 msgid "Your email has been confirmed. You can now securely sync your encrypted notes across all devices." msgstr "" @@ -7514,7 +7514,7 @@ msgstr "" msgid "Your free trial is ending soon" msgstr "" -#: src/strings.ts:2622 +#: src/strings.ts:2623 msgid "Your free trial is on-going. Your subscription will start on {trialExpiryDate}" msgstr "" @@ -7598,7 +7598,7 @@ msgstr "" msgid "Zipping" msgstr "" -#: src/strings.ts:2461 +#: src/strings.ts:2462 msgid "Zoom" msgstr "" diff --git a/packages/intl/src/strings.ts b/packages/intl/src/strings.ts index ed79434ea..d68a2112b 100644 --- a/packages/intl/src/strings.ts +++ b/packages/intl/src/strings.ts @@ -2225,7 +2225,8 @@ Use this if changes from other devices are not appearing on this device. This wi goBackToNotebooks: () => t`Go back to notebooks`, goBackToTags: () => t`Go back to tags`, okay: () => t`Okay`, - clearTrashDesc: () => t`Do you want to clear the trash?`, + clearTrashDesc: () => + t`Clearing trash will permanently delete all the items in your trash. This action is IRREVERSIBLE.`, createdAt: () => t`Created at`, lastEditedAt: () => t`Last edited at`, enter6DigitCode: () => From cb5a7904d38f334dc1ea02785342983fbdb280b7 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 9 Apr 2026 11:46:10 +0500 Subject: [PATCH 02/10] mobile: add clear trash option in Trash properties mobile: show clear trash success message mobile: add e2e tests mobile: fix clear trash option remains disabled after moving item to trash after login mobile: Disable "Move to trash" for deleted notes. --- .../sheets/menu-item-properties/index.tsx | 41 +++++++++++++- apps/mobile/app/hooks/use-actions.tsx | 13 ++++- apps/mobile/app/screens/trash/index.tsx | 7 ++- apps/mobile/app/utils/functions.ts | 2 + apps/mobile/e2e/tests/trash.e2e.ts | 53 ++++++++++++++++++ apps/mobile/fonts/MaterialCommunityIcons.ttf | Bin 26152 -> 26296 bytes apps/mobile/scripts/optimize-fonts.mjs | 3 +- 7 files changed, 111 insertions(+), 8 deletions(-) create mode 100644 apps/mobile/e2e/tests/trash.e2e.ts diff --git a/apps/mobile/app/components/sheets/menu-item-properties/index.tsx b/apps/mobile/app/components/sheets/menu-item-properties/index.tsx index 88c73678a..5d73269a8 100644 --- a/apps/mobile/app/components/sheets/menu-item-properties/index.tsx +++ b/apps/mobile/app/components/sheets/menu-item-properties/index.tsx @@ -28,7 +28,7 @@ import { ToastManager } from "../../../services/event-manager"; import SettingsService from "../../../services/settings"; -import { eCloseSheet } from "../../../utils/events"; +import { eAfterSync, eCloseSheet } from "../../../utils/events"; import { SideMenuItem } from "../../../utils/menu-items"; import { AppFontSize } from "../../../utils/size"; import { DefaultAppStyles } from "../../../utils/styles"; @@ -37,12 +37,17 @@ import AppIcon from "../../ui/AppIcon"; import { Pressable } from "../../ui/pressable"; import Paragraph from "../../ui/typography/paragraph"; import PaywallSheet from "../paywall"; +import { presentDialog } from "../../dialog/functions"; +import { db } from "../../../common/database"; +import { useTrashStore } from "../../../stores/use-trash-store"; export const MenuItemProperties = ({ item }: { item: SideMenuItem }) => { const { colors } = useThemeColors(); const featuresAvailable = useAreFeaturesAvailable([ "customHomepage", "customizableSidebar" ]); + const trash = useTrashStore((state) => state.items); + return !featuresAvailable ? null : ( { }, icon: "sort-ascending", locked: !featuresAvailable?.customizableSidebar.isAllowed - } + }, + ...(item.id === "Trash" + ? [ + { + title: strings.clearTrash(), + onPress: async () => { + if (!trash || trash?.length === 0) return; + eSendEvent(eCloseSheet); + setTimeout(() => { + presentDialog({ + title: strings.clearTrashConfirm(), + paragraph: strings.clearTrashDesc(), + positiveText: strings.clear(), + positivePress: async () => { + await db.trash.clear(); + useTrashStore.getState().clear(); + eSendEvent(eAfterSync); + ToastManager.show({ + message: strings.trashCleared(), + type: "success" + }); + return true; + } + }); + }, 500); + }, + icon: "delete-sweep-outline", + disabled: !trash || trash?.length === 0 + } + ] + : []) ].map((item) => ( { gap: DefaultAppStyles.GAP_SMALL, borderRadius: 0, paddingHorizontal: DefaultAppStyles.GAP, - opacity: item.locked ? 0.6 : 1 + opacity: item.disabled || item.locked ? 0.6 : 1 }} onPress={() => { item.onPress(); diff --git a/apps/mobile/app/hooks/use-actions.tsx b/apps/mobile/app/hooks/use-actions.tsx index 25e6c0afa..fb24369d0 100644 --- a/apps/mobile/app/hooks/use-actions.tsx +++ b/apps/mobile/app/hooks/use-actions.tsx @@ -382,6 +382,16 @@ export const useActions = ({ } const deleteItem = async () => { + if (isPublished) { + ToastManager.show({ + heading: strings.notePublished(), + message: strings.unpublishToDelete(), + type: "error", + context: "local" + }); + return; + } + close(); await sleep(300); @@ -1237,7 +1247,8 @@ export const useActions = ({ : strings.moveToTrash(), icon: "delete-outline", type: "error", - onPress: deleteItem + onPress: deleteItem, + locked: isPublished }); } diff --git a/apps/mobile/app/screens/trash/index.tsx b/apps/mobile/app/screens/trash/index.tsx index c060312f8..5d6cda5a4 100644 --- a/apps/mobile/app/screens/trash/index.tsx +++ b/apps/mobile/app/screens/trash/index.tsx @@ -36,7 +36,7 @@ import { strings } from "@notesnook/intl"; const onPressFloatingButton = () => { presentDialog({ title: strings.clearTrash(), - paragraph: strings.clearTrashConfirm(), + paragraph: strings.clearTrashDesc(), positiveText: strings.clear(), negativeText: strings.cancel(), positivePress: async () => { @@ -58,8 +58,8 @@ const PLACEHOLDER_DATA = (trashCleanupInterval = 7) => ({ trashCleanupInterval === -1 ? strings.noTrashCleanupInterval() : trashCleanupInterval === 1 - ? strings.trashCleanupIntervalTextDaily() - : strings.trashCleanupIntervalTextDays(trashCleanupInterval), + ? strings.trashCleanupIntervalTextDaily() + : strings.trashCleanupIntervalTextDays(trashCleanupInterval), loading: strings.loadingTrash() }); @@ -107,6 +107,7 @@ export const Trash = ({ navigation, route }: NavigationProps<"Trash">) => { {trash && trash?.placeholders?.length !== 0 ? ( ) : null} diff --git a/apps/mobile/app/utils/functions.ts b/apps/mobile/app/utils/functions.ts index f6f7aca97..21c4b3e56 100644 --- a/apps/mobile/app/utils/functions.ts +++ b/apps/mobile/app/utils/functions.ts @@ -34,6 +34,7 @@ import { useRelationStore } from "../stores/use-relation-store"; import { useTagStore } from "../stores/use-tag-store"; import { eUpdateNoteInEditor } from "./events"; import { unlockVault } from "./unlock-vault"; +import { useTrashStore } from "../stores/use-trash-store"; export const valueLimiter = (value: number, min: number, max: number) => { return value < min ? min : value > max ? max : value; @@ -210,6 +211,7 @@ export const deleteItems = async ( if (type === "notebook") { useNotebookStore.getState().refresh(); } + useTrashStore.getState().refresh(); useMenuStore.getState().setMenuPins(); }; diff --git a/apps/mobile/e2e/tests/trash.e2e.ts b/apps/mobile/e2e/tests/trash.e2e.ts new file mode 100644 index 000000000..a55ced0eb --- /dev/null +++ b/apps/mobile/e2e/tests/trash.e2e.ts @@ -0,0 +1,53 @@ +import { notesnook } from "../test.ids"; +import { TestBuilder } from "./utils"; + +describe("TRASH TESTS", () => { + it("Move a note to trash", async () => { + await TestBuilder.create() + .prepare() + .createNote("Test", "Test note item") + .tapById(notesnook.listitem.menu) + .tapById("icon-trash") + .navigate("Trash") + .wait(500) + .isVisibleByText("Test") + .run(); + }); + + it("Permanently remove a note from trash", async () => { + await TestBuilder.create() + .prepare() + .createNote("Test", "Test note item") + .tapById(notesnook.listitem.menu) + .tapById("icon-trash") + .navigate("Trash") + .wait(500) + .isVisibleByText("Test") + .tapById("trash-clear") + .tapByText("Clear") + .wait(100) + .isNotVisibleByText("Test") + .navigate("Notes") + .isNotVisibleByText("Test") + .run(); + }); + + it("Clear all notes from side menu", async () => { + await TestBuilder.create() + .prepare() + .createNote("Test", "Test note item") + .tapById(notesnook.listitem.menu) + .tapById("icon-trash") + .navigate("Trash") + .wait(500) + .isVisibleByText("Test") + .openSideMenu() + .longPressByText("Trash") + .tapByText("Clear trash") + .wait(500) + .tapByText("Clear") + .tapByText("Trash") + .isNotVisibleByText("Test") + .run(); + }); +}); diff --git a/apps/mobile/fonts/MaterialCommunityIcons.ttf b/apps/mobile/fonts/MaterialCommunityIcons.ttf index f0059a99089f28d0890159c4e3046df898d72d5d..3a5471b8efe3d70c19d2bcd8272f41b60a8f30a9 100644 GIT binary patch delta 645 zcmW;HUuaTM90&04(J^(+o$0){?o;aZDrkFIY(WvpFc`6i9?~^ff#q$|u1!+NAX0jW zSUp5xEg!~O|2DO?b%LTl6xHKm5IBO~VnOsWB7)J&`gIO`_@3{N!{MCy753s2yY4S< z{!zLB)(JSL#;x$11>VWo;A~%^v?K2Aaw!2K$Zsf59~elXVgR4T(M-s))w_I zbjN9H@??6~(t#tu(FFBuE?vsARlEU4n{?iPCY>{_!nd!~R{&cxKUr`WfA#*Z0b?bg zWB+nJs{$8Cq&%bh2{2`~%pUXy^k;9Us`n4`Qc0rx21O2B<^zAOO`D1S)6 zL&^;acm&>kO#<#vzLJ1>a1WEpzyf$rUIOZrRS9TNewKhHxbLb2JO)?0C18=#D*;cy zw_lQgCGZ{eF#^ydwLuAZO1+JMHP{54@Q9l0`QUiF9IesF4hOb@Lqh;Cb}M>6QAmWg zdvwL8?qhue{XKd_cj!uh#goZuwNgn|>MhM%@n~vXO)7DQiC8Ndi=`TkXv?cjgDF2OHH$z^^u5J9f`Bpt-#OVP;e%=u7~xEeno#7>I*G~K87}puwfam wjlbbU_$(N`Qi#2y-)(k5o8VZ6*_aTQk4-t;zKm&^MYFeX&NTDFY5Ez%KfCOgA^-pY delta 493 zcmW;I%}bO~6vy%J9VKT%yHic6E9IGIW+Q@&h!!CtZ46f-qk>3}&gdXB&Y-if2!$3R z=0b?xY*AYIQd2qeKtvKkFSf{BD7a}62tm8VKcG6D3m<;x+b=%B0PW>2* z9D=Ea;N)=T+R#Q}FAt$P=)93mc}cIKZ4wee;Cxy(Dn6PI(zi+Prn7|!^H(YoNtuz( zrLd%4)3A&oLp)g^|GnV_`!GSyC6`^=f-Oa!K=A5&?o1|!*O9~bx?AV_*H7V{WcrLlC-~~2vOF8z@Ok5YB!A8hV*fB*mh diff --git a/apps/mobile/scripts/optimize-fonts.mjs b/apps/mobile/scripts/optimize-fonts.mjs index 8b40705e7..e6263126a 100644 --- a/apps/mobile/scripts/optimize-fonts.mjs +++ b/apps/mobile/scripts/optimize-fonts.mjs @@ -121,7 +121,8 @@ const EXTRA_ICON_NAMES = [ "calendar-today", "bomb", "bomb-off", - "cancel" + "cancel", + "delete-sweep-outline" ]; const __filename = fileURLToPath(import.meta.url); From 3d847ea00cabd011f54d2753a5aaf64cf0ca05ca Mon Sep 17 00:00:00 2001 From: 01zulfi <85733202+01zulfi@users.noreply.github.com> Date: Wed, 15 Apr 2026 12:49:22 +0500 Subject: [PATCH 03/10] web: fix time field not aligning in reminder dialog (#9202) * also capitalize month string Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com> --- apps/web/src/dialogs/add-reminder-dialog.tsx | 22 ++++++++++++++++---- packages/intl/locale/en.po | 5 +---- packages/intl/locale/pseudo-LOCALE.po | 5 +---- packages/intl/src/strings.ts | 2 +- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/apps/web/src/dialogs/add-reminder-dialog.tsx b/apps/web/src/dialogs/add-reminder-dialog.tsx index dbfa1b271..b90d52486 100644 --- a/apps/web/src/dialogs/add-reminder-dialog.tsx +++ b/apps/web/src/dialogs/add-reminder-dialog.tsx @@ -378,7 +378,17 @@ export const AddReminderDialog = DialogManager.register( ) : null} - + {mode === Modes.ONCE ? ( <> ) : recurringMode === RecurringModes.YEAR ? ( - <> + d.date(parseInt(day))); }} /> - + ) : null} ) : ( - {strings.reminderStarts(date.format(db.settings.getDateFormat()), date.format(timeFormat()))} + {strings.reminderStarts( + date.format(db.settings.getDateFormat()), + date.format(timeFormat()) + )} )} diff --git a/packages/intl/locale/en.po b/packages/intl/locale/en.po index 7aade2bf5..9c3f44976 100644 --- a/packages/intl/locale/en.po +++ b/packages/intl/locale/en.po @@ -3943,11 +3943,8 @@ msgstr "Monographs can be encrypted with a secret key and shared with anyone." msgid "Monographs enable you to share your notes in a secure and private way." msgstr "Monographs enable you to share your notes in a secure and private way." -#: src/strings.ts:1840 -msgid "month" -msgstr "month" - #: src/strings.ts:665 +#: src/strings.ts:1840 msgid "Month" msgstr "Month" diff --git a/packages/intl/locale/pseudo-LOCALE.po b/packages/intl/locale/pseudo-LOCALE.po index 75263853e..f5734f6d8 100644 --- a/packages/intl/locale/pseudo-LOCALE.po +++ b/packages/intl/locale/pseudo-LOCALE.po @@ -3923,11 +3923,8 @@ msgstr "" msgid "Monographs enable you to share your notes in a secure and private way." msgstr "" -#: src/strings.ts:1840 -msgid "month" -msgstr "" - #: src/strings.ts:665 +#: src/strings.ts:1840 msgid "Month" msgstr "" diff --git a/packages/intl/src/strings.ts b/packages/intl/src/strings.ts index 4a22c6631..3aecb23d1 100644 --- a/packages/intl/src/strings.ts +++ b/packages/intl/src/strings.ts @@ -1837,7 +1837,7 @@ For example: incomingNote: () => t`Incoming note`, description: () => t`Description`, date: () => t`Date`, - month: () => t`month`, + month: () => t`Month`, day: () => t`Day`, time: () => t`Time`, encryptionKey: () => t`Encryption key`, From a6c1757cf6c66dadb42a9b83d5ce40307b26bbf0 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed <40239442+ammarahm-ed@users.noreply.github.com> Date: Wed, 15 Apr 2026 21:43:45 +0500 Subject: [PATCH 04/10] mobile: fix list-items do not show correct notes count in side menu (#9697) * mobile: fix list-items do not show correct notes count in side menu * mobile: fix notebook note count not updated on deleting note * mobile: fix monograph count does not update on unpublishing note in side-menu * mobile: fix notebook and tag shortcut count does not update in sidemenu --- .../app/components/properties/color-tags.tsx | 8 ++++- .../components/sheets/publish-note/index.tsx | 11 ++++-- .../app/components/side-menu/menu-item.tsx | 34 +++++++++++++++---- .../components/side-menu/notebook-item.tsx | 4 ++- .../side-menu/side-menu-notebooks.tsx | 10 ++---- .../components/side-menu/side-menu-tags.tsx | 4 ++- .../app/screens/link-notebooks/index.tsx | 15 ++++---- apps/mobile/app/screens/manage-tags/index.tsx | 15 +++++--- apps/mobile/app/screens/move-notes/index.tsx | 6 ++-- apps/mobile/app/services/event-manager.ts | 20 ++++++++++- .../app/stores/create-db-collection-store.ts | 4 ++- apps/mobile/app/utils/events.js | 1 + apps/mobile/app/utils/functions.ts | 1 + 13 files changed, 99 insertions(+), 34 deletions(-) diff --git a/apps/mobile/app/components/properties/color-tags.tsx b/apps/mobile/app/components/properties/color-tags.tsx index cdccd9a65..ba04c98c2 100644 --- a/apps/mobile/app/components/properties/color-tags.tsx +++ b/apps/mobile/app/components/properties/color-tags.tsx @@ -27,7 +27,11 @@ import { View } from "react-native"; import Icon from "react-native-vector-icons/MaterialCommunityIcons"; import { notesnook } from "../../../e2e/test.ids"; import { db } from "../../common/database"; -import { eSendEvent, ToastManager } from "../../services/event-manager"; +import { + eSendEvent, + sendItemUpdateEvent, + ToastManager +} from "../../services/event-manager"; import Navigation from "../../services/navigation"; import { useMenuStore } from "../../stores/use-menu-store"; import { useRelationStore } from "../../stores/use-relation-store"; @@ -63,6 +67,7 @@ const ColorItem = ({ item, note }: { item: Color; note: Note }) => { useRelationStore.getState().update(); setColorNotes(); Navigation.queueRoutesForUpdate(); + sendItemUpdateEvent(item.id, "color"); eSendEvent(refreshNotesPage); }; @@ -140,6 +145,7 @@ export const ColorTags = ({ item }: { item: Note }) => { useRelationStore.getState().update(); useMenuStore.getState().setColorNotes(); Navigation.queueRoutesForUpdate(); + sendItemUpdateEvent(color.id, "color"); eSendEvent(refreshNotesPage); }} /> diff --git a/apps/mobile/app/components/sheets/publish-note/index.tsx b/apps/mobile/app/components/sheets/publish-note/index.tsx index 4128ea9cc..5f1c96c85 100644 --- a/apps/mobile/app/components/sheets/publish-note/index.tsx +++ b/apps/mobile/app/components/sheets/publish-note/index.tsx @@ -33,7 +33,11 @@ import Icon from "react-native-vector-icons/MaterialCommunityIcons"; import ToggleSwitch from "toggle-switch-react-native"; import { db } from "../../../common/database"; import { requestInAppReview } from "../../../services/app-review"; -import { presentSheet, ToastManager } from "../../../services/event-manager"; +import { + eSendEvent, + presentSheet, + ToastManager +} from "../../../services/event-manager"; import Navigation from "../../../services/navigation"; import { useAttachmentStore } from "../../../stores/use-attachment-store"; import { openLinkInBrowser } from "../../../utils/functions"; @@ -47,6 +51,7 @@ import Heading from "../../ui/typography/heading"; import Paragraph from "../../ui/typography/paragraph"; import { useAsync } from "react-async-hook"; import { isFeatureAvailable, useIsFeatureAvailable } from "@notesnook/common"; +import { eMenuItemUpdate } from "../../../utils/events"; async function fetchMonographData(noteId: string) { const monographId = db.monographs.monograph(noteId); @@ -55,7 +60,7 @@ async function fetchMonographData(noteId: string) { : undefined; return { monograph, - monographId, + monographId }; } @@ -112,6 +117,7 @@ const PublishNoteSheet = ({ await monographData.execute(); Navigation.queueRoutesForUpdate(); + eSendEvent(eMenuItemUpdate); setPublishLoading(false); } requestInAppReview(); @@ -138,6 +144,7 @@ const PublishNoteSheet = ({ await db.monographs.unpublish(note.id); monographData.execute(); Navigation.queueRoutesForUpdate(); + eSendEvent(eMenuItemUpdate); setPublishLoading(false); } } catch (e) { diff --git a/apps/mobile/app/components/side-menu/menu-item.tsx b/apps/mobile/app/components/side-menu/menu-item.tsx index 37ac890c6..65dc866ac 100644 --- a/apps/mobile/app/components/side-menu/menu-item.tsx +++ b/apps/mobile/app/components/side-menu/menu-item.tsx @@ -24,18 +24,22 @@ import Icon from "react-native-vector-icons/MaterialCommunityIcons"; import { useTotalNotes } from "../../hooks/use-db-item"; import { db } from "../../common/database"; -import { eSubscribeEvent } from "../../services/event-manager"; +import { + eSubscribeEvent, + subscribeToItemUpdate +} from "../../services/event-manager"; import Navigation from "../../services/navigation"; import useNavigationStore, { RouteParams } from "../../stores/use-navigation-store"; -import { eAfterSync } from "../../utils/events"; +import { eAfterSync, eMenuItemUpdate } from "../../utils/events"; import { SideMenuItem } from "../../utils/menu-items"; import { AppFontSize, defaultBorderRadius } from "../../utils/size"; import { DefaultAppStyles } from "../../utils/styles"; import { Pressable } from "../ui/pressable"; import Paragraph from "../ui/typography/paragraph"; import { useSideBarDraggingStore } from "./dragging-store"; +import { useRelationStore } from "../../stores/use-relation-store"; export function MenuItem({ item, @@ -56,13 +60,19 @@ export function MenuItem({ const totalNotes = useTotalNotes( item.dataType as "notebook" | "tag" | "color" ); + const update = useRelationStore((state) => state.updater); const getTotalNotesRef = useRef(totalNotes.getTotalNotes); getTotalNotesRef.current = totalNotes.getTotalNotes; - const menuItemCount = !item.data ? itemCount : totalNotes.totalNotes(item.data.id); + useEffect(() => { + if (item.data) { + getTotalNotesRef.current([item.data?.id]); + } + }, [update]); + useEffect(() => { const onSyncComplete = async () => { try { @@ -94,10 +104,20 @@ export function MenuItem({ /** Empty */ } }; - const event = eSubscribeEvent(eAfterSync, onSyncComplete); + const events = [eSubscribeEvent(eAfterSync, onSyncComplete)]; + + if (!item.data) { + events.push(eSubscribeEvent(eMenuItemUpdate, onSyncComplete)); + } + + if (item.data?.id) { + events.push( + subscribeToItemUpdate(item?.data?.id, item?.data?.type, onSyncComplete) + ); + } onSyncComplete(); return () => { - event?.unsubscribe(); + events?.forEach((e) => e?.unsubscribe()); }; }, [item.data, item.id]); @@ -151,8 +171,8 @@ export function MenuItem({ item.icon === "crown" ? colors.static.yellow : isFocused - ? colors.selected.icon - : colors.secondary.icon + ? colors.selected.icon + : colors.secondary.icon } size={AppFontSize.md} /> diff --git a/apps/mobile/app/components/side-menu/notebook-item.tsx b/apps/mobile/app/components/side-menu/notebook-item.tsx index e6538e0f9..625eba1be 100644 --- a/apps/mobile/app/components/side-menu/notebook-item.tsx +++ b/apps/mobile/app/components/side-menu/notebook-item.tsx @@ -35,6 +35,7 @@ import AppIcon from "../ui/AppIcon"; import { IconButton } from "../ui/icon-button"; import { Pressable } from "../ui/pressable"; import Paragraph from "../ui/typography/paragraph"; +import { useRelationStore } from "../../stores/use-relation-store"; export const NotebookItem = ({ index, @@ -70,13 +71,14 @@ export const NotebookItem = ({ const notebook = item.notebook; const isFocused = focused; const { totalNotes, getTotalNotes } = useTotalNotes("notebook"); + const updater = useRelationStore(state => state.updater); const getTotalNotesRef = React.useRef(getTotalNotes); getTotalNotesRef.current = getTotalNotes; const { colors } = useThemeColors(); useEffect(() => { getTotalNotesRef.current([item.notebook.id]); - }, [item.notebook]); + }, [item.notebook, updater]); useEffect(() => { const onNotebookUpdate = (id?: string) => { diff --git a/apps/mobile/app/components/side-menu/side-menu-notebooks.tsx b/apps/mobile/app/components/side-menu/side-menu-notebooks.tsx index 633251663..350018605 100644 --- a/apps/mobile/app/components/side-menu/side-menu-notebooks.tsx +++ b/apps/mobile/app/components/side-menu/side-menu-notebooks.tsx @@ -40,6 +40,7 @@ import { useSideMenuNotebookTreeStore } from "./stores"; import { LegendList } from "@legendapp/list"; +import { useRelationStore } from "../../stores/use-relation-store"; useSideMenuNotebookSelectionStore.setState({ multiSelect: true }); @@ -52,6 +53,7 @@ export const SideMenuNotebooks = () => { const [filteredNotebooks, setFilteredNotebooks] = React.useState(notebooks); const searchTimer = React.useRef(undefined); const lastQuery = React.useRef(undefined); + const updater = useRelationStore(state => state.updater); const loadRootNotebooks = React.useCallback(async () => { if (!filteredNotebooks) return; const _notebooks: Notebook[] = []; @@ -66,9 +68,6 @@ export const SideMenuNotebooks = () => { const updateNotebooks = React.useCallback(() => { if (lastQuery.current) { - // useSideMenuNotebookTreeStore.setState({ - // isSearching: true - // }); db.lookup .notebooks(lastQuery.current) .sorted(db.settings.getGroupOptions("notebooks")) @@ -76,16 +75,13 @@ export const SideMenuNotebooks = () => { setFilteredNotebooks(filtered); }); } else { - // useSideMenuNotebookTreeStore.setState({ - // isSearching: false - // }); setFilteredNotebooks(notebooks); } }, [notebooks]); useEffect(() => { updateNotebooks(); - }, [updateNotebooks]); + }, [updateNotebooks,updater]); useEffect(() => { (async () => { diff --git a/apps/mobile/app/components/side-menu/side-menu-tags.tsx b/apps/mobile/app/components/side-menu/side-menu-tags.tsx index 7842e6cb2..a7c3e2317 100644 --- a/apps/mobile/app/components/side-menu/side-menu-tags.tsx +++ b/apps/mobile/app/components/side-menu/side-menu-tags.tsx @@ -38,6 +38,7 @@ import { SideMenuHeader } from "./side-menu-header"; import { SideMenuListEmpty } from "./side-menu-list-empty"; import { useSideMenuTagsSelectionStore } from "./stores"; import { LegendList, LegendListRenderItemProps } from "@legendapp/list"; +import { useRelationStore } from "../../stores/use-relation-store"; const TagItem = (props: { tags: VirtualizedGrouping; @@ -55,12 +56,13 @@ const TagItem = (props: { const totalNotes = useTotalNotes("tag"); const totalNotesRef = React.useRef(totalNotes); totalNotesRef.current = totalNotes; + const updater = useRelationStore(state => state.updater); useEffect(() => { if (item?.id) { totalNotesRef.current?.getTotalNotes([item?.id]); } - }, [item]); + }, [item, updater]); return ( ) => { updateNotebook(item.id); } } + sendItemUpdateEvent(id, "notebook"); } Navigation.queueRoutesForUpdate(); @@ -237,9 +241,8 @@ const LinkNotebooks = (props: NavigationProps<"LinkNotebooks">) => { button={{ icon: "plus", onPress: async () => { - const notebooksFeature = await isFeatureAvailable( - "notebooks" - ); + const notebooksFeature = + await isFeatureAvailable("notebooks"); if (!notebooksFeature.isAllowed) { ToastManager.show({ message: notebooksFeature.error, @@ -388,8 +391,8 @@ const NotebookItemWrapper = React.memo( !selected ? "selected" : !state.initialState[item.notebook.id] - ? undefined - : "deselected" + ? undefined + : "deselected" ); }} canDisableSelectionMode={false} diff --git a/apps/mobile/app/screens/manage-tags/index.tsx b/apps/mobile/app/screens/manage-tags/index.tsx index f7144b253..bc3e84d5e 100644 --- a/apps/mobile/app/screens/manage-tags/index.tsx +++ b/apps/mobile/app/screens/manage-tags/index.tsx @@ -33,7 +33,10 @@ import { Pressable } from "../../components/ui/pressable"; import Heading from "../../components/ui/typography/heading"; import Paragraph from "../../components/ui/typography/paragraph"; import { useNavigationFocus } from "../../hooks/use-navigation-focus"; -import { ToastManager } from "../../services/event-manager"; +import { + sendItemUpdateEvent, + ToastManager +} from "../../services/event-manager"; import Navigation, { NavigationProps } from "../../services/navigation"; import { ItemSelection, @@ -199,6 +202,7 @@ const ManageTags = (props: NavigationProps<"ManageTags">) => { } useRelationStore.getState().update(); + sendItemUpdateEvent(id, "tag"); useTagStore.getState().refresh(); setQuery(undefined); } catch (e) { @@ -242,6 +246,7 @@ const ManageTags = (props: NavigationProps<"ManageTags">) => { console.error(e); } } + sendItemUpdateEvent(id, "tag"); useTagStore.getState().refresh(); useRelationStore.getState().update(); refreshTags(); @@ -417,15 +422,15 @@ const TagItem = ({ selection === "selected" ? "check-circle-outline" : selection === "intermediate" - ? "minus-circle-outline" - : "checkbox-blank-circle-outline" + ? "minus-circle-outline" + : "checkbox-blank-circle-outline" } name={ selection === "selected" ? "check-circle-outline" : selection === "intermediate" - ? "minus-circle-outline" - : "checkbox-blank-circle-outline" + ? "minus-circle-outline" + : "checkbox-blank-circle-outline" } /> )} diff --git a/apps/mobile/app/screens/move-notes/index.tsx b/apps/mobile/app/screens/move-notes/index.tsx index 5de830839..37d439ff4 100644 --- a/apps/mobile/app/screens/move-notes/index.tsx +++ b/apps/mobile/app/screens/move-notes/index.tsx @@ -39,6 +39,7 @@ import { createItemSelectionStore } from "../../stores/item-selection-store"; import { updateNotebook } from "../../utils/notebooks"; import { AppFontSize } from "../../utils/size"; import { DefaultAppStyles } from "../../utils/styles"; +import { sendItemUpdateEvent } from "../../services/event-manager"; const useItemSelectionStore = createItemSelectionStore(true); export const MoveNotes = (props: NavigationProps<"MoveNotes">) => { @@ -198,6 +199,7 @@ export const MoveNotes = (props: NavigationProps<"MoveNotes">) => { ); updateNotebook(currentNotebook.id); + sendItemUpdateEvent(currentNotebook.id, "notebook"); Navigation.queueRoutesForUpdate(); Navigation.goBack(); }} @@ -281,8 +283,8 @@ const SelectableNoteItem = React.memo( selected ? colors.selected.icon : exists && !selected - ? colors.static.red - : colors.primary.icon + ? colors.static.red + : colors.primary.icon } /> diff --git a/apps/mobile/app/services/event-manager.ts b/apps/mobile/app/services/event-manager.ts index 4bfcfc395..2342fecfe 100644 --- a/apps/mobile/app/services/event-manager.ts +++ b/apps/mobile/app/services/event-manager.ts @@ -17,7 +17,13 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -import { EventHandler, EventManager, Note, NoteContent } from "@notesnook/core"; +import { + EventHandler, + EventManager, + ItemType, + Note, + NoteContent +} from "@notesnook/core"; import Clipboard from "@react-native-clipboard/clipboard"; import { RefObject } from "react"; import { ActionSheetRef } from "react-native-actions-sheet"; @@ -84,6 +90,18 @@ export const eSubscribeEvent = ( return eventManager.subscribe(eventName, action); }; +export function sendItemUpdateEvent(id: string, type: ItemType) { + eSendEvent(`${type}:${id}`); +} + +export function subscribeToItemUpdate( + id: string, + type: ItemType, + callback: EventHandler +) { + return eSubscribeEvent(`${type}:${id}`, callback); +} + export const eUnSubscribeEvent = ( eventName: string, action: EventHandler diff --git a/apps/mobile/app/stores/create-db-collection-store.ts b/apps/mobile/app/stores/create-db-collection-store.ts index 7d93f51ff..474754754 100644 --- a/apps/mobile/app/stores/create-db-collection-store.ts +++ b/apps/mobile/app/stores/create-db-collection-store.ts @@ -22,7 +22,8 @@ import create, { StoreApi, UseBoundStore } from "zustand"; import { resolveItems } from "@notesnook/common"; import { useSettingStore } from "./use-setting-store"; import { DatabaseLogger } from "../common/database"; -import { ToastManager } from "../services/event-manager"; +import { eSendEvent, ToastManager } from "../services/event-manager"; +import { eMenuItemUpdate } from "../utils/events"; export interface DBCollectionStore { items: VirtualizedGrouping | undefined; @@ -67,6 +68,7 @@ export default function createDBCollectionStore({ items, loading: false }); + eSendEvent(eMenuItemUpdate); } catch (e) { DatabaseLogger.error(e as Error, "useDBCollectionStore.refresh", { useDBCollectionStore: "refresh" diff --git a/apps/mobile/app/utils/events.js b/apps/mobile/app/utils/events.js index 5c4a2de1a..f465dc9f5 100644 --- a/apps/mobile/app/utils/events.js +++ b/apps/mobile/app/utils/events.js @@ -176,3 +176,4 @@ export const eOnEnterEditor = "621"; export const eOnExitEditor = "622"; export const eEditorReset = "623"; export const eAfterSync = "624"; +export const eMenuItemUpdate = "625"; \ No newline at end of file diff --git a/apps/mobile/app/utils/functions.ts b/apps/mobile/app/utils/functions.ts index 21c4b3e56..64de8d014 100644 --- a/apps/mobile/app/utils/functions.ts +++ b/apps/mobile/app/utils/functions.ts @@ -213,6 +213,7 @@ export const deleteItems = async ( } useTrashStore.getState().refresh(); useMenuStore.getState().setMenuPins(); + useRelationStore.getState().update(); }; export const openLinkInBrowser = async (link: string) => { From b6714b559e53f4251174f3baa460f49df0946f1a Mon Sep 17 00:00:00 2001 From: 01zulfi <85733202+01zulfi@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:42:10 +0500 Subject: [PATCH 05/10] web: make dates text reactive to date format setting (#9707) the following dates text are now reactive: * dates in note list item * date in notebook header * dates in properties panel * date in reminder list item Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com> --- apps/web/src/components/note/index.tsx | 14 +++++--- apps/web/src/components/notebook-header.tsx | 9 +++-- apps/web/src/components/properties/index.tsx | 38 ++++++++++++-------- apps/web/src/components/reminder/index.tsx | 11 ++++-- 4 files changed, 48 insertions(+), 24 deletions(-) diff --git a/apps/web/src/components/note/index.tsx b/apps/web/src/components/note/index.tsx index 9f99da8ff..d48ca2df3 100644 --- a/apps/web/src/components/note/index.tsx +++ b/apps/web/src/components/note/index.tsx @@ -21,7 +21,7 @@ import { NoteResolvedData, areFeaturesAvailable, exportContent, - getFormattedDate, + formatDate, getFormattedReminderTime } from "@notesnook/common"; import { @@ -56,6 +56,7 @@ import { store as selectionStore } from "../../stores/selection-store"; import { store as tagStore } from "../../stores/tag-store"; import { store as userstore } from "../../stores/user-store"; import { store as appStore } from "../../stores/app-store"; +import { useStore as useSettingStore } from "../../stores/setting-store"; import { writeToClipboard } from "../../utils/clipboard"; import { showToast } from "../../utils/toast"; import IconTag from "../icon-tag"; @@ -103,7 +104,6 @@ import ListItem from "../list-item"; import { PublishDialog } from "../publish-view"; import TimeAgo from "../time-ago"; import { NoteExpiryDateDialog } from "../../dialogs/note-expiry-date-dialog"; -import { withFeatureCheck } from "../../common"; type NoteProps = NoteResolvedData & { item: NoteType; @@ -129,6 +129,7 @@ function Note(props: NoteProps) { const isOpened = useEditorStore((store) => store.isNoteOpen(item.id)); const primary: SchemeColors = color ? color.colorCode : "accent-selected"; + const dateFormat = useSettingStore((store) => store.dateFormat); return ( - {getFormattedDate(date, "date")} + + {formatDate(date, { type: "date", dateFormat })} + } footer={ @@ -280,7 +283,10 @@ function Note(props: NoteProps) { {note.expiryDate?.value && ( )} diff --git a/apps/web/src/components/notebook-header.tsx b/apps/web/src/components/notebook-header.tsx index 0ed11ccba..be296c6e3 100644 --- a/apps/web/src/components/notebook-header.tsx +++ b/apps/web/src/components/notebook-header.tsx @@ -31,10 +31,10 @@ import { } from "./icons"; import { useStore as useNotebookStore } from "../stores/notebook-store"; import { db } from "../common/db"; -import { getFormattedDate } from "@notesnook/common"; +import { formatDate } from "@notesnook/common"; +import { useStore as useSettingStore } from "../stores/setting-store"; import { strings } from "@notesnook/intl"; import { Notebook } from "@notesnook/core"; -import { TITLE_BAR_HEIGHT } from "./title-bar"; import { Menu } from "../hooks/use-menu"; export function NotebookHeader(props: { @@ -49,6 +49,7 @@ export function NotebookHeader(props: { const [isShortcut, setIsShortcut] = useState(false); const shortcuts = useAppStore((store) => store.shortcuts); const addToShortcuts = useAppStore((store) => store.addToShortcuts); + const dateFormat = useSettingStore((store) => store.dateFormat); useEffect(() => { setIsShortcut(shortcuts.findIndex((p) => p.id === props.notebook.id) > -1); @@ -100,7 +101,9 @@ export function NotebookHeader(props: { {description && {description}} - {getFormattedDate(dateEdited, "date")} + + {formatDate(dateEdited, { type: "date", dateFormat })} + {strings.notes(totalNotes || 0)} diff --git a/apps/web/src/components/properties/index.tsx b/apps/web/src/components/properties/index.tsx index c7c4ac43f..d3e1f9121 100644 --- a/apps/web/src/components/properties/index.tsx +++ b/apps/web/src/components/properties/index.tsx @@ -48,11 +48,12 @@ import Toggle from "./toggle"; import { EditNoteCreationDateDialog } from "../../dialogs/edit-note-creation-date-dialog"; import ScrollContainer from "../scroll-container"; import { - getFormattedDate, + formatDate, usePromise, ResolvedItem, useUnresolvedItem } from "@notesnook/common"; +import { useStore as useSettingStore } from "../../stores/setting-store"; import { ScopedThemeProvider } from "../theme-provider"; import { ListItemWrapper } from "../list-container/list-profiles"; import { VirtualizedList } from "../virtualized-list"; @@ -103,25 +104,34 @@ type MetadataItem = { value: (value: number) => string; }; -const metadataItems = [ - { - key: "dateCreated", - label: strings.createdAt(), - value: (date) => getFormattedDate(date || Date.now()) - } as MetadataItem<"dateCreated">, - { - key: "dateEdited", - label: strings.lastEditedAt(), - value: (date) => (date ? getFormattedDate(date) : "never") - } as MetadataItem<"dateEdited"> -]; - type EditorPropertiesProps = { sessionId: string; }; function EditorProperties(props: EditorPropertiesProps) { const toggleProperties = useEditorStore((store) => store.toggleProperties); const isFocusMode = useAppStore((store) => store.isFocusMode); + const dateFormat = useSettingStore((store) => store.dateFormat); + const timeFormat = useSettingStore((store) => store.timeFormat); + const metadataItems = [ + { + key: "dateCreated", + label: strings.createdAt(), + value: (date: number) => + formatDate(date || Date.now(), { + type: "date-time", + dateFormat, + timeFormat + }) + } as MetadataItem<"dateCreated">, + { + key: "dateEdited", + label: strings.lastEditedAt(), + value: (date: number) => + date + ? formatDate(date, { type: "date-time", dateFormat, timeFormat }) + : "never" + } as MetadataItem<"dateEdited"> + ]; const session = useEditorStore((store) => store.getSession(props.sessionId, [ "default", diff --git a/apps/web/src/components/reminder/index.tsx b/apps/web/src/components/reminder/index.tsx index 128edb8ec..42ce209b0 100644 --- a/apps/web/src/components/reminder/index.tsx +++ b/apps/web/src/components/reminder/index.tsx @@ -32,12 +32,12 @@ import { Trash } from "../icons"; import IconTag from "../icon-tag"; -import { isReminderToday } from "@notesnook/core"; +import { isReminderToday, formatReminderTime } from "@notesnook/core"; import { hashNavigate } from "../../navigation"; import { Multiselect } from "../../common/multi-select"; import { store } from "../../stores/reminder-store"; import { db } from "../../common/db"; -import { getFormattedReminderTime } from "@notesnook/common"; +import { useStore as useSettingStore } from "../../stores/setting-store"; import { MenuItem } from "@notesnook/ui"; import { Reminder as ReminderType } from "@notesnook/core"; import { ConfirmDialog } from "../../dialogs/confirm"; @@ -67,6 +67,8 @@ function Reminder(props: ReminderProps) { const { item, compact } = props; const reminder = item as unknown as ReminderType; const PriorityIcon = PRIORITY_ICON_MAP[reminder.priority]; + const dateFormat = useSettingStore((store) => store.dateFormat); + const timeFormat = useSettingStore((store) => store.timeFormat); return ( From 4ba2e900c5078e6b1178a6e747bf37a0ac6694ef Mon Sep 17 00:00:00 2001 From: Abdullah Atta Date: Fri, 17 Apr 2026 17:07:21 +0500 Subject: [PATCH 06/10] desktop: disable autoInstallOnAppQuit (#9726) --- apps/desktop/src/utils/autoupdater.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/utils/autoupdater.ts b/apps/desktop/src/utils/autoupdater.ts index c0e59009c..7f3255fa9 100644 --- a/apps/desktop/src/utils/autoupdater.ts +++ b/apps/desktop/src/utils/autoupdater.ts @@ -37,7 +37,11 @@ async function configureAutoUpdater() { config.releaseTrack === "stable" && autoUpdater.currentVersion.prerelease.length > 0; autoUpdater.allowPrerelease = false; - autoUpdater.autoInstallOnAppQuit = true; + // Do NOT auto-install on quit. On Windows, if the system shuts down while + // the NSIS installer is running, it first removes all old files and then + // gets killed before copying new ones — leaving an empty install directory. + // Updates should only be installed when the user explicitly triggers it. + autoUpdater.autoInstallOnAppQuit = false; autoUpdater.disableWebInstaller = true; } From 49252e66ce947cb392a610edbbf2f0a06496055d Mon Sep 17 00:00:00 2001 From: 01zulfi <85733202+01zulfi@users.noreply.github.com> Date: Fri, 17 Apr 2026 18:10:06 +0500 Subject: [PATCH 07/10] web: fix RCE via stored XSS in note html export (#9709) * sandbox the export iframe * escape fields when building html template Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com> --- apps/web/src/common/export.ts | 1 + .../core/src/utils/templates/html/template.ts | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/web/src/common/export.ts b/apps/web/src/common/export.ts index df9804f31..b4d03aea4 100644 --- a/apps/web/src/common/export.ts +++ b/apps/web/src/common/export.ts @@ -54,6 +54,7 @@ export async function exportToPDF( iframe.style.height = "0"; iframe.style.border = "0"; iframe.loading = "eager"; + iframe.sandbox.add("allow-same-origin", "allow-modals"); iframe.onload = async () => { if (!iframe.contentWindow) return; diff --git a/packages/core/src/utils/templates/html/template.ts b/packages/core/src/utils/templates/html/template.ts index 6c4b75e99..fba73628f 100644 --- a/packages/core/src/utils/templates/html/template.ts +++ b/packages/core/src/utils/templates/html/template.ts @@ -19,6 +19,7 @@ along with this program. If not, see . import { TemplateData } from "../index.js"; import { formatDate } from "../../date.js"; +import { escapeUTF8 } from "entities"; export function template(data: TemplateData) { return ` @@ -28,19 +29,23 @@ export function template(data: TemplateData) { - ${data.title} + ${escapeUTF8(data.title)} ${data.pinned ? `` : ""} ${ data.favorite ? `` : "" } - ${data.color ? `` : ""} + ${ + data.color + ? `` + : "" + } ${ data.tags && data.tags.length - ? `` + ? `` : "" } @@ -207,7 +212,7 @@ export function template(data: TemplateData) { -

${data.title}

+

${escapeUTF8(data.title)}

${data.content} From 9a21ca1cf4e7f635a163d1221a8f101809557850 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed <40239442+ammarahm-ed@users.noreply.github.com> Date: Sat, 18 Apr 2026 08:40:50 +0500 Subject: [PATCH 08/10] mobile: fix discount value shows as undefined on iOS when buying plan (#9711) * mobile: fix discount value is undefined * mobile: fix discount calculation and price formatting Respect spacing when writing price in a currency. Fix incorrect discount calculation when comparing products of a plan based on int values, use parseFloat to parse correct values for comparision * mobile: fix ui inconsistencies * mobile: conditionally include trial plan conditions based on GitHub release status --- .../app/components/sheets/buy-plan/index.tsx | 56 ++-- apps/mobile/app/hooks/use-pricing-plans.ts | 27 +- packages/intl/locale/en.po | 135 +++++----- packages/intl/locale/pseudo-LOCALE.po | 253 +++++++++--------- packages/intl/src/strings.ts | 5 +- 5 files changed, 247 insertions(+), 229 deletions(-) diff --git a/apps/mobile/app/components/sheets/buy-plan/index.tsx b/apps/mobile/app/components/sheets/buy-plan/index.tsx index b91b86ed5..b729d66e6 100644 --- a/apps/mobile/app/components/sheets/buy-plan/index.tsx +++ b/apps/mobile/app/components/sheets/buy-plan/index.tsx @@ -23,6 +23,7 @@ import dayjs from "dayjs"; import React, { useEffect, useState } from "react"; import { Linking, + Platform, ScrollView, Text, TouchableOpacity, @@ -211,16 +212,19 @@ export const BuyPlan = (props: { ? strings["5yearPlanConditions"]() : [ strings.trialPlanConditions[0]( - billingDuration?.duration as number + billingDuration?.duration as number as never ), - strings.trialPlanConditions[1](0) + ...(isGithubRelease + ? [] + : [strings.trialPlanConditions[1](Platform.OS as never)]) ] ).map((item) => ( @@ -229,7 +233,13 @@ export const BuyPlan = (props: { size={AppFontSize.lg} name="check" /> - {item} + + {item} + ))}
@@ -243,8 +253,8 @@ export const BuyPlan = (props: { is5YearPlanSelected ? strings.purchase() : pricingPlans?.userCanRequestTrial - ? strings.subscribeAndStartTrial() - : strings.subscribe() + ? strings.subscribeAndStartTrial() + : strings.subscribe() } onPress={async () => { if (isGithubRelease) { @@ -380,6 +390,20 @@ const ProductItem = (props: { }); }, []); + const discountValue = + (isAnnual && !isGithubRelease) || + (isGithubRelease && (product as Plan)?.discount?.amount) + ? regionalDiscount + ? regionalDiscount.discount + : isGithubRelease + ? (product as Plan).discount?.amount + : props.pricingPlans.compareProductPrice( + props.pricingPlans.currentPlan?.id as string, + `notesnook.${props.pricingPlans.currentPlan?.id}.yearly`, + `notesnook.${props.pricingPlans.currentPlan?.id}.monthly` + ) + : undefined; + return ( - {(isAnnual && !isGithubRelease) || - (isGithubRelease && (product as Plan)?.discount?.amount) ? ( + {discountValue ? ( - {strings.bestValue()} -{" "} - {strings.percentOff( - (regionalDiscount - ? regionalDiscount.discount - : isGithubRelease - ? (product as Plan).discount?.amount - : props.pricingPlans.compareProductPrice( - props.pricingPlans.currentPlan?.id as string, - `notesnook.${props.pricingPlans.currentPlan?.id}.yearly`, - `notesnook.${props.pricingPlans.currentPlan?.id}.monthly` - )) as string - )} + {strings.bestValue()} - {strings.percentOff(`${discountValue}`)} ) : null} diff --git a/apps/mobile/app/hooks/use-pricing-plans.ts b/apps/mobile/app/hooks/use-pricing-plans.ts index 72deaf64b..1ca7a8422 100644 --- a/apps/mobile/app/hooks/use-pricing-plans.ts +++ b/apps/mobile/app/hooks/use-pricing-plans.ts @@ -276,8 +276,8 @@ const usePricingPlans = (options?: PricingPlansOptions) => { (product as Plan).period === "yearly" ? (product as Plan).price.gross : (product as Plan).period === "5-year" - ? (product as Plan).price.gross - : (product as Plan).price.gross + ? (product as Plan).price.gross + : (product as Plan).price.gross }`; } @@ -432,8 +432,8 @@ const usePricingPlans = (options?: PricingPlansOptions) => { return period.endsWith("W") ? "week" : period.endsWith("M") - ? "month" - : "year"; + ? "month" + : "year"; } else { const unit = (product as RNIap.SubscriptionIOS) ?.subscriptionPeriodUnitIOS; @@ -475,8 +475,8 @@ const usePricingPlans = (options?: PricingPlansOptions) => { type: phase.billingPeriod.endsWith("W") ? "week" : phase.billingPeriod.endsWith("M") - ? "month" - : "year" + ? "month" + : "year" }; } else { const productIos = product as RNIap.SubscriptionIOS; @@ -530,14 +530,15 @@ const usePricingPlans = (options?: PricingPlansOptions) => { const formattedPrice = numberWithCommas(monthlyPrice.toFixed(2)); return isAtLeft - ? `${symbol} ${formattedPrice}` - : `${formattedPrice} ${symbol}`; + ? `${symbol}${formattedPrice}` + : `${formattedPrice}${symbol}`; }; const getDiscountValue = (p1: string, p2: string, splitToMonth?: boolean) => { - let price1 = Platform.OS === "ios" ? parseInt(p1) : parseInt(p1) / 1000000; + let price1 = + Platform.OS === "ios" ? parseFloat(p1) : parseFloat(p1) / 1000000; const price2 = - Platform.OS === "ios" ? parseInt(p2) : parseInt(p2) / 1000000; + Platform.OS === "ios" ? parseFloat(p2) : parseFloat(p2) / 1000000; price1 = splitToMonth ? price1 / 12 : price1; @@ -587,7 +588,7 @@ const usePricingPlans = (options?: PricingPlansOptions) => { } else { priceValue = price / 1000000; } - const priceSymbol = localizedPrice.replace(/[\s\d,.]+/, ""); + const priceSymbol = localizedPrice.replace(/[\d,.]+/, ""); return { priceValue, priceSymbol, localizedPrice }; }; @@ -607,8 +608,8 @@ const usePricingPlans = (options?: PricingPlansOptions) => { (product as Plan).period === "yearly" ? ((product as Plan).price.gross / 12).toFixed(2) : (product as Plan).period === "5-year" - ? ((product as Plan).price.gross / (12 * 5)).toFixed(2) - : (product as Plan).price.gross + ? ((product as Plan).price.gross / (12 * 5)).toFixed(2) + : (product as Plan).price.gross }`; } diff --git a/packages/intl/locale/en.po b/packages/intl/locale/en.po index 9c3f44976..8ce06bc81 100644 --- a/packages/intl/locale/en.po +++ b/packages/intl/locale/en.po @@ -68,6 +68,11 @@ msgstr "{0} downloaded" msgid "{0} Highlights 🎉" msgstr "{0} Highlights 🎉" +#. placeholder {0}: platform === "ios" ? "Apple" : "Google" +#: src/strings.ts:2567 +msgid "{0} will remind you before your trial ends" +msgstr "{0} will remind you before your trial ends" + #: src/strings.ts:1753 msgid "{count, plural, one {# error occured} other {# errors occured}}" msgstr "{count, plural, one {# error occured} other {# errors occured}}" @@ -623,7 +628,7 @@ msgstr "2FA code is required()" msgid "2FA code sent via {method}" msgstr "2FA code sent via {method}" -#: src/strings.ts:2582 +#: src/strings.ts:2585 msgid "5 year plan (One time purchase)" msgstr "5 year plan (One time purchase)" @@ -735,7 +740,7 @@ msgstr "Add tags to multiple notes at once" msgid "Add to dictionary" msgstr "Add to dictionary" -#: src/strings.ts:2615 +#: src/strings.ts:2618 msgid "Add to home" msgstr "Add to home" @@ -751,7 +756,7 @@ msgstr "Add your first note" msgid "Add your first notebook" msgstr "Add your first notebook" -#: src/strings.ts:2618 +#: src/strings.ts:2621 msgid "Adjust the line height of the editor" msgstr "Adjust the line height of the editor" @@ -843,7 +848,7 @@ msgstr "Amount" msgid "An error occurred while migrating your data. You can logout of your account and try to relogin. However this is not recommended as it may result in some data loss if your data was not synced." msgstr "An error occurred while migrating your data. You can logout of your account and try to relogin. However this is not recommended as it may result in some data loss if your data was not synced." -#: src/strings.ts:2576 +#: src/strings.ts:2579 msgid "and" msgstr "and" @@ -863,7 +868,7 @@ msgstr "and much more." msgid "and we will manually confirm your account." msgstr "and we will manually confirm your account." -#: src/strings.ts:2593 +#: src/strings.ts:2596 msgid "ANNOUNCEMENT" msgstr "ANNOUNCEMENT" @@ -1105,7 +1110,7 @@ msgstr "Available on iOS" msgid "Available on iOS & Android" msgstr "Available on iOS & Android" -#: src/strings.ts:2641 +#: src/strings.ts:2644 msgid "Back" msgstr "Back" @@ -1201,7 +1206,7 @@ msgstr "Behaviour" msgid "Believer plan" msgstr "Believer plan" -#: src/strings.ts:2579 +#: src/strings.ts:2582 msgid "Best value" msgstr "Best value" @@ -1265,7 +1270,7 @@ msgstr "Bullet list" msgid "By" msgstr "By" -#: src/strings.ts:2574 +#: src/strings.ts:2577 msgid "By joining you agree to our" msgstr "By joining you agree to our" @@ -1285,7 +1290,7 @@ msgstr "Can I cancel my free trial anytime?" msgid "Cancel" msgstr "Cancel" -#: src/strings.ts:2572 +#: src/strings.ts:2575 msgid "Cancel anytime, subscription auto-renews." msgstr "Cancel anytime, subscription auto-renews." @@ -1374,7 +1379,7 @@ msgstr "Change notification sound" msgid "Change password" msgstr "Change password" -#: src/strings.ts:2586 +#: src/strings.ts:2589 msgid "Change plan" msgstr "Change plan" @@ -1486,7 +1491,7 @@ msgstr "Choose from pre-built themes or create your own" msgid "Choose how dates are displayed in the app" msgstr "Choose how dates are displayed in the app" -#: src/strings.ts:2621 +#: src/strings.ts:2624 msgid "Choose how day is displayed in the app" msgstr "Choose how day is displayed in the app" @@ -1502,7 +1507,7 @@ msgstr "Choose how time is displayed in the app" msgid "Choose how you want to secure your notes locally." msgstr "Choose how you want to secure your notes locally." -#: src/strings.ts:2626 +#: src/strings.ts:2629 msgid "Choose what day to display as the first day of the week" msgstr "Choose what day to display as the first day of the week" @@ -1600,7 +1605,7 @@ msgstr "" msgid "Clearing trash will permanently delete all the items in your trash. This action is IRREVERSIBLE." msgstr "Clearing trash will permanently delete all the items in your trash. This action is IRREVERSIBLE." -#: src/strings.ts:2608 +#: src/strings.ts:2611 msgid "Click here to directly claim the promotion." msgstr "Click here to directly claim the promotion." @@ -1620,11 +1625,11 @@ msgstr "Click to remove" msgid "Click to reset {title}" msgstr "Click to reset {title}" -#: src/strings.ts:2616 +#: src/strings.ts:2619 msgid "Click to save" msgstr "Click to save" -#: src/strings.ts:2612 +#: src/strings.ts:2615 msgid "Click to update" msgstr "Click to update" @@ -1769,7 +1774,7 @@ msgstr "Confirm password" msgid "Confirm pin" msgstr "Confirm pin" -#: src/strings.ts:2640 +#: src/strings.ts:2643 msgid "Confirmation email sent" msgstr "Confirmation email sent" @@ -2056,7 +2061,7 @@ msgstr "Date uploaded" msgid "Day" msgstr "Day" -#: src/strings.ts:2620 +#: src/strings.ts:2623 msgid "Day format" msgstr "Day format" @@ -2141,7 +2146,7 @@ msgstr "Delete collapsed section" msgid "Delete column" msgstr "Delete column" -#: src/strings.ts:2637 +#: src/strings.ts:2640 msgid "Delete data" msgstr "Delete data" @@ -2398,7 +2403,7 @@ msgstr "Easy access" msgid "Edit" msgstr "Edit" -#: src/strings.ts:2627 +#: src/strings.ts:2630 msgid "Edit creation date" msgstr "Edit creation date" @@ -2428,7 +2433,7 @@ msgstr "Edit your full name" msgid "Editor" msgstr "Editor" -#: src/strings.ts:2583 +#: src/strings.ts:2586 msgid "Education plan" msgstr "Education plan" @@ -2616,7 +2621,7 @@ msgstr "Enter the gift code to redeem your subscription." msgid "Enter the recovery code to continue logging in" msgstr "Enter the recovery code to continue logging in" -#: src/strings.ts:2619 +#: src/strings.ts:2622 msgid "Enter title" msgstr "Enter title" @@ -2712,7 +2717,7 @@ msgstr "Expand sidebar" msgid "Experience the next level of private note taking\"" msgstr "Experience the next level of private note taking\"" -#: src/strings.ts:2633 +#: src/strings.ts:2636 msgid "Expiry date" msgstr "Expiry date" @@ -2741,7 +2746,7 @@ msgstr "Export all notes as pdf, markdown, html or text in a single zip file" msgid "Export as{0}" msgstr "Export as{0}" -#: src/strings.ts:2634 +#: src/strings.ts:2637 msgid "Export CSV" msgstr "Export CSV" @@ -2769,7 +2774,7 @@ msgstr "Faced an issue or have a suggestion? Click here to create a bug report" msgid "Failed" msgstr "Failed" -#: src/strings.ts:2638 +#: src/strings.ts:2641 msgid "Failed to attach file" msgstr "Failed to attach file" @@ -2906,7 +2911,7 @@ msgstr "Filter attachments by filename, type or hash" msgid "Filter languages" msgstr "Filter languages" -#: src/strings.ts:2605 +#: src/strings.ts:2608 msgid "Finish your purchase in the browser." msgstr "Finish your purchase in the browser." @@ -3096,7 +3101,7 @@ msgstr "Getting recovery codes" msgid "GNU GENERAL PUBLIC LICENSE Version 3" msgstr "GNU GENERAL PUBLIC LICENSE Version 3" -#: src/strings.ts:2606 +#: src/strings.ts:2609 msgid "Go back" msgstr "Go back" @@ -3140,10 +3145,6 @@ msgstr "Go to web app" msgid "Google will remind you 2 days before your trial ends." msgstr "Google will remind you 2 days before your trial ends." -#: src/strings.ts:2566 -msgid "Google will remind you before your trial ends" -msgstr "Google will remind you before your trial ends" - #: src/strings.ts:586 msgid "Got it" msgstr "Got it" @@ -3360,7 +3361,7 @@ msgstr "Import & export" msgid "Import completed" msgstr "Import completed" -#: src/strings.ts:2635 +#: src/strings.ts:2638 msgid "Import CSV" msgstr "Import CSV" @@ -3448,7 +3449,7 @@ msgstr "Invalid CORS proxy url" msgid "Invalid email" msgstr "Invalid email" -#: src/strings.ts:2643 +#: src/strings.ts:2646 msgid "Invalid recovery key. Make sure to input your account recovery key, not a 2FA recovery code." msgstr "Invalid recovery key. Make sure to input your account recovery key, not a 2FA recovery code." @@ -3598,7 +3599,7 @@ msgstr "Light" msgid "Line {line}, Column {column}" msgstr "Line {line}, Column {column}" -#: src/strings.ts:2617 +#: src/strings.ts:2620 msgid "Line height" msgstr "Line height" @@ -3771,7 +3772,7 @@ msgstr "Login successful" msgid "Login to encrypt and sync notes" msgstr "Login to encrypt and sync notes" -#: src/strings.ts:2610 +#: src/strings.ts:2613 msgid "Login to upload attachments. [Read more](https://help.notesnook.com/faqs/login-to-upload-attachments)" msgstr "Login to upload attachments. [Read more](https://help.notesnook.com/faqs/login-to-upload-attachments)" @@ -4169,7 +4170,7 @@ msgstr "No notebooks selected to move" msgid "No one can view this {type} except you." msgstr "No one can view this {type} except you." -#: src/strings.ts:2613 +#: src/strings.ts:2616 msgid "No password" msgstr "No password" @@ -4306,11 +4307,11 @@ msgstr "notes imported" msgid "Notesnook" msgstr "Notesnook" -#: src/strings.ts:2598 +#: src/strings.ts:2601 msgid "Notesnook Circle" msgstr "Notesnook Circle" -#: src/strings.ts:2600 +#: src/strings.ts:2603 msgid "Notesnook Circle brings together trusted partners who share our commitment to privacy, transparency, and user freedom." msgstr "Notesnook Circle brings together trusted partners who share our commitment to privacy, transparency, and user freedom." @@ -4607,7 +4608,7 @@ msgstr "Pin notification" msgid "Pinned" msgstr "Pinned" -#: src/strings.ts:2580 +#: src/strings.ts:2583 msgid "Plan limits" msgstr "Plan limits" @@ -4871,7 +4872,7 @@ msgstr "Privacy for everyone" msgid "Privacy mode" msgstr "Privacy mode" -#: src/strings.ts:2575 +#: src/strings.ts:2578 msgid "privacy policy" msgstr "privacy policy" @@ -4943,7 +4944,7 @@ msgstr "Publish" msgid "Publish note" msgstr "Publish note" -#: src/strings.ts:2614 +#: src/strings.ts:2617 msgid "Publish to the web" msgstr "Publish to the web" @@ -4967,7 +4968,7 @@ msgstr "Published note can only be viewed by someone with the password." msgid "Published note link will be automatically deleted once it is viewed by someone." msgstr "Published note link will be automatically deleted once it is viewed by someone." -#: src/strings.ts:2568 +#: src/strings.ts:2571 msgid "Purchase" msgstr "Purchase" @@ -5107,7 +5108,7 @@ msgstr "Recovery successful!" msgid "Redeem" msgstr "Redeem" -#: src/strings.ts:2597 +#: src/strings.ts:2600 msgid "Redeem code" msgstr "Redeem code" @@ -5883,7 +5884,7 @@ msgstr "Set as light theme" msgid "Set automatic trash cleanup interval from Settings > Behaviour > Clean trash interval." msgstr "Set automatic trash cleanup interval from Settings > Behaviour > Clean trash interval." -#: src/strings.ts:2631 +#: src/strings.ts:2634 msgid "Set expiry" msgstr "Set expiry" @@ -6081,7 +6082,7 @@ msgstr "Source code" msgid "Spaces" msgstr "Spaces" -#: src/strings.ts:2590 +#: src/strings.ts:2593 msgid "Special Offer" msgstr "Special Offer" @@ -6161,11 +6162,11 @@ msgstr "Subgroup added" msgid "Submit" msgstr "Submit" -#: src/strings.ts:2569 +#: src/strings.ts:2572 msgid "Subscribe" msgstr "Subscribe" -#: src/strings.ts:2570 +#: src/strings.ts:2573 msgid "Subscribe and start free trial" msgstr "Subscribe and start free trial" @@ -6424,7 +6425,7 @@ msgstr "Terms of service" msgid "Terms of Service " msgstr "Terms of Service " -#: src/strings.ts:2577 +#: src/strings.ts:2580 msgid "terms of use." msgstr "terms of use." @@ -6456,7 +6457,7 @@ msgstr "Thank you for reporting!" msgid "Thank you for subscribing" msgstr "Thank you for subscribing" -#: src/strings.ts:2585 +#: src/strings.ts:2588 msgid "Thank you for the purchase" msgstr "Thank you for the purchase" @@ -6472,7 +6473,7 @@ msgstr "Thank you. You are the proof that privacy always comes first." msgid "The {title} at {url} is not compatible with this client." msgstr "The {title} at {url} is not compatible with this client." -#: src/strings.ts:2630 +#: src/strings.ts:2633 msgid "The incoming note could not be unlocked with the provided password. Enter the correct password for the incoming note" msgstr "The incoming note could not be unlocked with the provided password. Enter the correct password for the incoming note" @@ -6480,7 +6481,7 @@ msgstr "The incoming note could not be unlocked with the provided password. Ente msgid "The information above will be publically available at" msgstr "The information above will be publically available at" -#: src/strings.ts:2604 +#: src/strings.ts:2607 msgid "The Notesnook Circle is exclusive to subscribers. Please consider subscribing to gain access to Notesnook Circle and enjoy additional benefits." msgstr "The Notesnook Circle is exclusive to subscribers. Please consider subscribing to gain access to Notesnook Circle and enjoy additional benefits." @@ -6552,7 +6553,7 @@ msgstr "This error usually means the database file is either corrupt or it could msgid "This error usually means the search index is corrupted." msgstr "This error usually means the search index is corrupted." -#: src/strings.ts:2643 +#: src/strings.ts:2647 msgid "This feature is not available on this plan." msgstr "This feature is not available on this plan." @@ -6560,7 +6561,7 @@ msgstr "This feature is not available on this plan." msgid "This image cannot be previewed" msgstr "This image cannot be previewed" -#: src/strings.ts:2571 +#: src/strings.ts:2574 msgid "This is a one time purchase, no subscription." msgstr "This is a one time purchase, no subscription." @@ -6573,7 +6574,7 @@ msgstr "This may take a while" msgid "This must only be used for troubleshooting. Using it regularly for sync is not recommended and will lead to unexpected data loss and other issues. If you are having persistent issues with sync, please report them to us at support@streetwriters.co." msgstr "This must only be used for troubleshooting. Using it regularly for sync is not recommended and will lead to unexpected data loss and other issues. If you are having persistent issues with sync, please report them to us at support@streetwriters.co." -#: src/strings.ts:2636 +#: src/strings.ts:2639 msgid "This note is empty" msgstr "This note is empty" @@ -6767,7 +6768,7 @@ msgstr "Undo" msgid "Unfavorite" msgstr "Unfavorite" -#: src/strings.ts:2581 +#: src/strings.ts:2584 msgid "Unlimited" msgstr "Unlimited" @@ -6783,7 +6784,7 @@ msgstr "Unlink notebook" msgid "Unlock" msgstr "Unlock" -#: src/strings.ts:2628 +#: src/strings.ts:2631 msgid "Unlock incoming note" msgstr "Unlock incoming note" @@ -6800,7 +6801,7 @@ msgstr "Unlock note" msgid "Unlock note to delete it" msgstr "Unlock note to delete it" -#: src/strings.ts:2639 +#: src/strings.ts:2642 msgid "Unlock note to merge conflicts" msgstr "Unlock note to merge conflicts" @@ -6852,7 +6853,7 @@ msgstr "Unpublish notes to delete them" msgid "Unregister" msgstr "Unregister" -#: src/strings.ts:2632 +#: src/strings.ts:2635 msgid "Unset expiry" msgstr "Unset expiry" @@ -6901,7 +6902,7 @@ msgstr "Upgrade to Notesnook Pro to create more tags." msgid "Upgrade to Pro" msgstr "Upgrade to Pro" -#: src/strings.ts:2596 +#: src/strings.ts:2599 msgid "Upgrade to redeem" msgstr "Upgrade to redeem" @@ -7049,7 +7050,7 @@ msgstr "Using official Notesnook instance" msgid "v{version} available" msgstr "v{version} available" -#: src/strings.ts:2644 +#: src/strings.ts:2649 msgid "Value must be between {min} and {max}" msgstr "Value must be between {min} and {max}" @@ -7141,7 +7142,7 @@ msgstr "View source code" msgid "View your recovery codes to recover your account in case you lose access to your two-factor authentication methods." msgstr "View your recovery codes to recover your account in case you lose access to your two-factor authentication methods." -#: src/strings.ts:2611 +#: src/strings.ts:2614 msgid "Views" msgstr "Views" @@ -7209,7 +7210,7 @@ msgstr "Wednesday" msgid "Week" msgstr "Week" -#: src/strings.ts:2624 +#: src/strings.ts:2627 msgid "Week format" msgstr "Week format" @@ -7226,7 +7227,7 @@ msgstr "Welcome back, {email}" msgid "Welcome back!" msgstr "Welcome back!" -#: src/strings.ts:2584 +#: src/strings.ts:2587 msgid "Welcome to Notesnook {plan}" msgstr "Welcome to Notesnook {plan}" @@ -7303,7 +7304,7 @@ msgstr "Yes, you can cancel your trial anytime. No questions asked." msgid "You also agree to recieve marketing emails from us which you can opt-out of from app settings." msgstr "You also agree to recieve marketing emails from us which you can opt-out of from app settings." -#: src/strings.ts:2589 +#: src/strings.ts:2592 msgid "You are already subscribed to this plan." msgstr "You are already subscribed to this plan." @@ -7335,7 +7336,7 @@ msgstr "You can also link a note to multiple Notebooks. Tap and hold any noteboo msgid "You can change the theme at any time from Settings or the side menu." msgstr "You can change the theme at any time from Settings or the side menu." -#: src/strings.ts:2592 +#: src/strings.ts:2595 msgid "You can change your subscription plan from the web app" msgstr "You can change your subscription plan from the web app" @@ -7405,7 +7406,7 @@ msgstr "You have been logged out from all other devices." msgid "You have been logged out." msgstr "You have been logged out." -#: src/strings.ts:2588 +#: src/strings.ts:2591 msgid "You have made a one time purchase. To change your plan please contact support." msgstr "You have made a one time purchase. To change your plan please contact support." @@ -7526,7 +7527,7 @@ msgstr "Your changes have been saved and will be reflected after the app has ref msgid "Your current 2FA method is {method}" msgstr "Your current 2FA method is {method}" -#: src/strings.ts:2595 +#: src/strings.ts:2598 msgid "Your current subscription does not allow changing plans" msgstr "Your current subscription does not allow changing plans" @@ -7574,7 +7575,7 @@ msgstr "Your free trial has started" msgid "Your free trial is ending soon" msgstr "Your free trial is ending soon" -#: src/strings.ts:2623 +#: src/strings.ts:2626 msgid "Your free trial is on-going. Your subscription will start on {trialExpiryDate}" msgstr "Your free trial is on-going. Your subscription will start on {trialExpiryDate}" diff --git a/packages/intl/locale/pseudo-LOCALE.po b/packages/intl/locale/pseudo-LOCALE.po index f5734f6d8..ecebee89a 100644 --- a/packages/intl/locale/pseudo-LOCALE.po +++ b/packages/intl/locale/pseudo-LOCALE.po @@ -68,6 +68,11 @@ msgstr "" msgid "{0} Highlights 🎉" msgstr "" +#. placeholder {0}: platform === "ios" ? "Apple" : "Google" +#: src/strings.ts:2567 +msgid "{0} will remind you before your trial ends" +msgstr "" + #: src/strings.ts:1753 msgid "{count, plural, one {# error occured} other {# errors occured}}" msgstr "" @@ -621,9 +626,9 @@ msgstr "" #: src/strings.ts:1008 msgid "2FA code sent via {method}" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2582 +#: src/strings.ts:2585 msgid "5 year plan (One time purchase)" msgstr "" @@ -733,9 +738,9 @@ msgstr "" #: src/strings.ts:2245 msgid "Add to dictionary" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2615 +#: src/strings.ts:2618 msgid "Add to home" msgstr "" @@ -749,9 +754,9 @@ msgstr "" #: src/strings.ts:975 msgid "Add your first notebook" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2618 +#: src/strings.ts:2621 msgid "Adjust the line height of the editor" msgstr "" @@ -841,9 +846,9 @@ msgstr "" #: src/strings.ts:250 msgid "An error occurred while migrating your data. You can logout of your account and try to relogin. However this is not recommended as it may result in some data loss if your data was not synced." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2576 +#: src/strings.ts:2579 msgid "and" msgstr "" @@ -861,9 +866,9 @@ msgstr "" #: src/strings.ts:1397 msgid "and we will manually confirm your account." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2593 +#: src/strings.ts:2596 msgid "ANNOUNCEMENT" msgstr "" @@ -1103,9 +1108,9 @@ msgstr "" #: src/strings.ts:2155 msgid "Available on iOS & Android" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2641 +#: src/strings.ts:2644 msgid "Back" msgstr "" @@ -1199,9 +1204,9 @@ msgstr "" #: src/strings.ts:2472 msgid "Believer plan" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2579 +#: src/strings.ts:2582 msgid "Best value" msgstr "" @@ -1263,9 +1268,9 @@ msgstr "" #: src/strings.ts:405 msgid "By" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2574 +#: src/strings.ts:2577 msgid "By joining you agree to our" msgstr "" @@ -1283,9 +1288,9 @@ msgstr "" #: src/strings.ts:549 msgid "Cancel" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2572 +#: src/strings.ts:2575 msgid "Cancel anytime, subscription auto-renews." msgstr "" @@ -1372,9 +1377,9 @@ msgstr "" #: src/strings.ts:434 msgid "Change password" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2586 +#: src/strings.ts:2589 msgid "Change plan" msgstr "" @@ -1484,9 +1489,9 @@ msgstr "" #: src/strings.ts:1133 msgid "Choose how dates are displayed in the app" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2621 +#: src/strings.ts:2624 msgid "Choose how day is displayed in the app" msgstr "" @@ -1500,9 +1505,9 @@ msgstr "" #: src/strings.ts:402 msgid "Choose how you want to secure your notes locally." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2626 +#: src/strings.ts:2629 msgid "Choose what day to display as the first day of the week" msgstr "" @@ -1583,13 +1588,13 @@ msgid "" "---\n" "\n" "**Only use this for troubleshooting purposes. If you are having persistent issues, it is recommended that you reach out to us via support@streetwriters.co so we can help you resolve it permanently.**" -msgstr "" +msgstr "<<<<<<< HEAD" #: src/strings.ts:2229 msgid "Clearing trash will permanently delete all the items in your trash. This action is IRREVERSIBLE." msgstr "" -#: src/strings.ts:2608 +#: src/strings.ts:2611 msgid "Click here to directly claim the promotion." msgstr "" @@ -1607,13 +1612,13 @@ msgstr "" #: src/strings.ts:2393 msgid "Click to reset {title}" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2616 +#: src/strings.ts:2619 msgid "Click to save" msgstr "" -#: src/strings.ts:2612 +#: src/strings.ts:2615 msgid "Click to update" msgstr "" @@ -1756,9 +1761,9 @@ msgstr "" #: src/strings.ts:1487 msgid "Confirm pin" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2640 +#: src/strings.ts:2643 msgid "Confirmation email sent" msgstr "" @@ -2043,9 +2048,9 @@ msgstr "" #: src/strings.ts:1841 msgid "Day" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2620 +#: src/strings.ts:2623 msgid "Day format" msgstr "" @@ -2128,9 +2133,9 @@ msgstr "" #: src/strings.ts:2293 msgid "Delete column" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2637 +#: src/strings.ts:2640 msgid "Delete data" msgstr "" @@ -2385,9 +2390,9 @@ msgstr "" #: src/strings.ts:1777 msgid "Edit" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2627 +#: src/strings.ts:2630 msgid "Edit creation date" msgstr "" @@ -2415,9 +2420,9 @@ msgstr "" #: src/strings.ts:1142 #: src/strings.ts:1526 msgid "Editor" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2583 +#: src/strings.ts:2586 msgid "Education plan" msgstr "" @@ -2603,9 +2608,9 @@ msgstr "" #: src/strings.ts:120 msgid "Enter the recovery code to continue logging in" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2619 +#: src/strings.ts:2622 msgid "Enter title" msgstr "" @@ -2699,9 +2704,9 @@ msgstr "" #: src/strings.ts:2072 msgid "Experience the next level of private note taking\"" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2633 +#: src/strings.ts:2636 msgid "Expiry date" msgstr "" @@ -2728,9 +2733,9 @@ msgstr "" #. placeholder {0}: format ? " " + format : "" #: src/strings.ts:2035 msgid "Export as{0}" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2634 +#: src/strings.ts:2637 msgid "Export CSV" msgstr "" @@ -2756,9 +2761,9 @@ msgstr "" #: src/strings.ts:2404 msgid "Failed" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2638 +#: src/strings.ts:2641 msgid "Failed to attach file" msgstr "" @@ -2893,9 +2898,9 @@ msgstr "" #: src/strings.ts:1833 msgid "Filter languages" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2605 +#: src/strings.ts:2608 msgid "Finish your purchase in the browser." msgstr "" @@ -3076,9 +3081,9 @@ msgstr "" #: src/strings.ts:2162 msgid "GNU GENERAL PUBLIC LICENSE Version 3" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2606 +#: src/strings.ts:2609 msgid "Go back" msgstr "" @@ -3120,11 +3125,7 @@ msgstr "" #: src/strings.ts:2539 msgid "Google will remind you 2 days before your trial ends." -msgstr "" - -#: src/strings.ts:2566 -msgid "Google will remind you before your trial ends" -msgstr "" +msgstr "<<<<<<< HEAD" #: src/strings.ts:586 msgid "Got it" @@ -3338,9 +3339,9 @@ msgstr "" #: src/strings.ts:1751 msgid "Import completed" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2635 +#: src/strings.ts:2638 msgid "Import CSV" msgstr "" @@ -3426,9 +3427,9 @@ msgstr "" #: src/strings.ts:1482 msgid "Invalid email" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2643 +#: src/strings.ts:2646 msgid "Invalid recovery key. Make sure to input your account recovery key, not a 2FA recovery code." msgstr "" @@ -3576,9 +3577,9 @@ msgstr "" #: src/strings.ts:2357 msgid "Line {line}, Column {column}" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2617 +#: src/strings.ts:2620 msgid "Line height" msgstr "" @@ -3749,9 +3750,9 @@ msgstr "" #: src/strings.ts:1362 msgid "Login to encrypt and sync notes" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2610 +#: src/strings.ts:2613 msgid "Login to upload attachments. [Read more](https://help.notesnook.com/faqs/login-to-upload-attachments)" msgstr "" @@ -4147,9 +4148,9 @@ msgstr "" #: src/strings.ts:202 msgid "No one can view this {type} except you." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2613 +#: src/strings.ts:2616 msgid "No password" msgstr "" @@ -4284,13 +4285,13 @@ msgstr "" #: src/strings.ts:2543 msgid "Notesnook" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2598 +#: src/strings.ts:2601 msgid "Notesnook Circle" msgstr "" -#: src/strings.ts:2600 +#: src/strings.ts:2603 msgid "Notesnook Circle brings together trusted partners who share our commitment to privacy, transparency, and user freedom." msgstr "" @@ -4579,9 +4580,9 @@ msgstr "" #: src/strings.ts:523 msgid "Pinned" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2580 +#: src/strings.ts:2583 msgid "Plan limits" msgstr "" @@ -4843,9 +4844,9 @@ msgstr "" #: src/strings.ts:1180 msgid "Privacy mode" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2575 +#: src/strings.ts:2578 msgid "privacy policy" msgstr "" @@ -4915,9 +4916,9 @@ msgstr "" #: src/strings.ts:487 msgid "Publish note" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2614 +#: src/strings.ts:2617 msgid "Publish to the web" msgstr "" @@ -4939,9 +4940,9 @@ msgstr "" #: src/strings.ts:271 msgid "Published note link will be automatically deleted once it is viewed by someone." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2568 +#: src/strings.ts:2571 msgid "Purchase" msgstr "" @@ -5079,9 +5080,9 @@ msgstr "" #: src/strings.ts:2436 msgid "Redeem" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2597 +#: src/strings.ts:2600 msgid "Redeem code" msgstr "" @@ -5855,9 +5856,9 @@ msgstr "" #: src/strings.ts:1333 msgid "Set automatic trash cleanup interval from Settings > Behaviour > Clean trash interval." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2631 +#: src/strings.ts:2634 msgid "Set expiry" msgstr "" @@ -6045,9 +6046,9 @@ msgstr "" #: src/strings.ts:2355 msgid "Spaces" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2590 +#: src/strings.ts:2593 msgid "Special Offer" msgstr "" @@ -6125,13 +6126,13 @@ msgstr "" #: src/strings.ts:580 msgid "Submit" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2569 +#: src/strings.ts:2572 msgid "Subscribe" msgstr "" -#: src/strings.ts:2570 +#: src/strings.ts:2573 msgid "Subscribe and start free trial" msgstr "" @@ -6381,9 +6382,9 @@ msgstr "" #: src/strings.ts:102 msgid "Terms of Service " -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2577 +#: src/strings.ts:2580 msgid "terms of use." msgstr "" @@ -6413,9 +6414,9 @@ msgstr "" #: src/strings.ts:2551 msgid "Thank you for subscribing" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2585 +#: src/strings.ts:2588 msgid "Thank you for the purchase" msgstr "" @@ -6429,17 +6430,17 @@ msgstr "" #: src/strings.ts:1643 msgid "The {title} at {url} is not compatible with this client." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2630 +#: src/strings.ts:2633 msgid "The incoming note could not be unlocked with the provided password. Enter the correct password for the incoming note" msgstr "" #: src/strings.ts:231 msgid "The information above will be publically available at" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2604 +#: src/strings.ts:2607 msgid "The Notesnook Circle is exclusive to subscribers. Please consider subscribing to gain access to Notesnook Circle and enjoy additional benefits." msgstr "" @@ -6511,15 +6512,15 @@ msgstr "" msgid "This error usually means the search index is corrupted." msgstr "" -#: src/strings.ts:2643 +#: src/strings.ts:2647 msgid "This feature is not available on this plan." msgstr "" #: src/strings.ts:1934 msgid "This image cannot be previewed" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2571 +#: src/strings.ts:2574 msgid "This is a one time purchase, no subscription." msgstr "" @@ -6530,9 +6531,9 @@ msgstr "" #: src/strings.ts:1101 #: src/strings.ts:1110 msgid "This must only be used for troubleshooting. Using it regularly for sync is not recommended and will lead to unexpected data loss and other issues. If you are having persistent issues with sync, please report them to us at support@streetwriters.co." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2636 +#: src/strings.ts:2639 msgid "This note is empty" msgstr "" @@ -6724,9 +6725,9 @@ msgstr "" #: src/strings.ts:854 msgid "Unfavorite" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2581 +#: src/strings.ts:2584 msgid "Unlimited" msgstr "" @@ -6740,9 +6741,9 @@ msgstr "" #: src/strings.ts:157 msgid "Unlock" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2628 +#: src/strings.ts:2631 msgid "Unlock incoming note" msgstr "" @@ -6757,9 +6758,9 @@ msgstr "" #: src/strings.ts:888 msgid "Unlock note to delete it" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2639 +#: src/strings.ts:2642 msgid "Unlock note to merge conflicts" msgstr "" @@ -6809,9 +6810,9 @@ msgstr "" #: src/strings.ts:2086 msgid "Unregister" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2632 +#: src/strings.ts:2635 msgid "Unset expiry" msgstr "" @@ -6858,9 +6859,9 @@ msgstr "" #: src/strings.ts:749 msgid "Upgrade to Pro" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2596 +#: src/strings.ts:2599 msgid "Upgrade to redeem" msgstr "" @@ -6999,7 +7000,7 @@ msgstr "" msgid "v{version} available" msgstr "" -#: src/strings.ts:2644 +#: src/strings.ts:2649 msgid "Value must be between {min} and {max}" msgstr "" @@ -7089,9 +7090,9 @@ msgstr "" #: src/strings.ts:1062 msgid "View your recovery codes to recover your account in case you lose access to your two-factor authentication methods." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2611 +#: src/strings.ts:2614 msgid "Views" msgstr "" @@ -7157,9 +7158,9 @@ msgstr "" #: src/strings.ts:664 msgid "Week" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2624 +#: src/strings.ts:2627 msgid "Week format" msgstr "" @@ -7174,9 +7175,9 @@ msgstr "" #: src/strings.ts:1888 msgid "Welcome back!" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2584 +#: src/strings.ts:2587 msgid "Welcome to Notesnook {plan}" msgstr "" @@ -7251,9 +7252,9 @@ msgstr "" #: src/strings.ts:106 msgid "You also agree to recieve marketing emails from us which you can opt-out of from app settings." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2589 +#: src/strings.ts:2592 msgid "You are already subscribed to this plan." msgstr "" @@ -7283,9 +7284,9 @@ msgstr "" #: src/strings.ts:2064 msgid "You can change the theme at any time from Settings or the side menu." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2592 +#: src/strings.ts:2595 msgid "You can change your subscription plan from the web app" msgstr "" @@ -7348,9 +7349,9 @@ msgstr "" #: src/strings.ts:2192 msgid "You have been logged out." -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2588 +#: src/strings.ts:2591 msgid "You have made a one time purchase. To change your plan please contact support." msgstr "" @@ -7469,9 +7470,9 @@ msgstr "" #: src/strings.ts:2099 msgid "Your current 2FA method is {method}" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2595 +#: src/strings.ts:2598 msgid "Your current subscription does not allow changing plans" msgstr "" @@ -7517,9 +7518,9 @@ msgstr "" #: src/strings.ts:1403 msgid "Your free trial is ending soon" -msgstr "" +msgstr "<<<<<<< HEAD" -#: src/strings.ts:2623 +#: src/strings.ts:2626 msgid "Your free trial is on-going. Your subscription will start on {trialExpiryDate}" msgstr "" diff --git a/packages/intl/src/strings.ts b/packages/intl/src/strings.ts index 3aecb23d1..23d3d18f2 100644 --- a/packages/intl/src/strings.ts +++ b/packages/intl/src/strings.ts @@ -2563,7 +2563,10 @@ Use this if changes from other devices are not appearing on this device. This wi ], trialPlanConditions: [ (duration: number) => t`Free ${duration} day trial, cancel any time`, - () => t`Google will remind you before your trial ends` + (platform: "ios" | "android") => + t`${ + platform === "ios" ? "Apple" : "Google" + } will remind you before your trial ends` ], purchase: () => t`Purchase`, subscribe: () => t`Subscribe`, From 405adff8f4e30fa622a68c4585569780cff457d6 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed <40239442+ammarahm-ed@users.noreply.github.com> Date: Sat, 18 Apr 2026 08:52:39 +0500 Subject: [PATCH 09/10] mobile: fix linting not working in vscode and fix lint errors (#9710) --- apps/mobile/app/app.tsx | 8 +- apps/mobile/app/common/database/encryption.ts | 6 +- apps/mobile/app/common/database/index.ts | 2 +- .../app/common/database/sqlite.kysely.ts | 4 +- apps/mobile/app/common/filesystem/io.ts | 8 +- .../components/announcements/announcement.tsx | 2 +- .../app/components/announcements/cta.tsx | 2 +- apps/mobile/app/components/app-lock/index.tsx | 5 +- .../app/components/attachments/actions.tsx | 1 - .../app/components/attachments/index.tsx | 1 - .../app/components/auth/forgot-password.tsx | 2 +- apps/mobile/app/components/auth/login.tsx | 11 +- .../app/components/auth/session-expired.tsx | 6 +- apps/mobile/app/components/auth/signup.tsx | 2 +- .../app/components/date-picker/index.tsx | 19 + .../app/components/dialog/base-dialog.tsx | 9 +- .../app/components/dialog/dialog-header.tsx | 1 - .../app/components/dialogs/vault/index.tsx | 252 +- .../app/components/fluid-panels/index.tsx | 2 - apps/mobile/app/components/list/index.tsx | 10 +- .../app/components/list/reorderable-list.tsx | 4 +- .../app/components/merge-conflicts/index.tsx | 8 +- .../app/components/note-history/index.tsx | 37 +- .../app/components/note-history/preview.tsx | 1 - apps/mobile/app/components/paywall/index.tsx | 13 +- .../app/components/properties/color-tags.tsx | 2 +- .../app/components/properties/date-meta.tsx | 2 +- .../app/components/properties/items.tsx | 18 +- .../mobile/app/components/properties/tags.jsx | 2 +- .../app/components/selection-header/index.tsx | 2 - .../app/components/sheets/buy-plan/index.tsx | 43 +- .../components/sheets/export-notes/share.jsx | 1 - .../app/components/sheets/notebooks/index.tsx | 2 +- .../app/components/sheets/paywall/index.tsx | 19 + .../components/sheets/plan-limits/index.tsx | 27 +- .../components/sheets/publish-note/index.tsx | 5 +- .../mobile/app/components/side-menu/index.tsx | 10 +- .../components/side-menu/pinned-section.tsx | 2 +- apps/mobile/app/components/ui/sheet/index.jsx | 7 +- .../components/walkthroughs/walkthroughs.tsx | 25 +- apps/mobile/app/hooks/use-actions.tsx | 11 +- apps/mobile/app/hooks/use-app-events.tsx | 5 +- apps/mobile/app/hooks/use-db-item.ts | 2 +- apps/mobile/app/hooks/use-feature-manager.ts | 25 +- apps/mobile/app/hooks/use-pricing-plans.ts | 7 +- .../app/navigation/fluid-panels-view.tsx | 18 +- .../app/navigation/navigation-stack.tsx | 1 - .../mobile/app/screens/add-reminder/index.tsx | 123 +- .../app/screens/editor/tiptap/picker.ts | 5 +- .../mobile/app/screens/editor/tiptap/types.ts | 1 - .../editor/tiptap/use-editor-events.tsx | 4 +- .../app/screens/editor/tiptap/use-editor.ts | 6 +- .../mobile/app/screens/editor/tiptap/utils.ts | 5 +- apps/mobile/app/screens/manage-tags/index.tsx | 9 +- apps/mobile/app/screens/notebook/index.tsx | 2 +- .../settings/editor/configure-toolbar.tsx | 12 +- apps/mobile/app/screens/settings/group.tsx | 2 +- apps/mobile/app/screens/settings/logout.ts | 18 + .../app/screens/settings/notesnook-circle.tsx | 21 +- .../app/screens/settings/picker/index.tsx | 6 +- .../screens/settings/restore-backup/index.tsx | 8 +- .../app/screens/settings/section-item.tsx | 4 +- apps/mobile/app/services/message.tsx | 4 +- apps/mobile/app/services/premium.ts | 20 +- apps/mobile/app/services/sync.ts | 1 - apps/mobile/app/share/editor.tsx | 2 +- apps/mobile/app/share/share.tsx | 27 +- apps/mobile/app/share/store.ts | 8 +- apps/mobile/app/stores/index.ts | 2 +- apps/mobile/app/utils/unlock-vault.ts | 1 + apps/mobile/package-lock.json | 2394 +---------------- apps/mobile/package.json | 12 +- 72 files changed, 519 insertions(+), 2830 deletions(-) diff --git a/apps/mobile/app/app.tsx b/apps/mobile/app/app.tsx index 7e92c8042..f936316bb 100644 --- a/apps/mobile/app/app.tsx +++ b/apps/mobile/app/app.tsx @@ -23,7 +23,7 @@ import { THEME_COMPATIBILITY_VERSION, useThemeEngineStore } from "@notesnook/theme"; -import React, { useEffect } from "react"; +import React, { PropsWithChildren, useEffect } from "react"; import { Appearance, I18nManager, Linking, StatusBar } from "react-native"; import "react-native-gesture-handler"; import { GestureHandlerRootView } from "react-native-gesture-handler"; @@ -106,8 +106,10 @@ let currTheme = : SettingsService.getProperty("lighTheme"); useThemeEngineStore.getState().setTheme(currTheme); -export const withTheme = (Element: (props: any) => JSX.Element) => { - return function AppWithThemeProvider(props: any) { +export const withTheme = ( + Element: (props: PropsWithChildren) => JSX.Element +) => { + return function AppWithThemeProvider(props: PropsWithChildren) { const [colorScheme, darkTheme, lightTheme] = useThemeStore((state) => [ state.colorScheme, state.darkTheme, diff --git a/apps/mobile/app/common/database/encryption.ts b/apps/mobile/app/common/database/encryption.ts index 051ade492..4f6308d9f 100644 --- a/apps/mobile/app/common/database/encryption.ts +++ b/apps/mobile/app/common/database/encryption.ts @@ -25,7 +25,6 @@ import * as Keychain from "react-native-keychain"; import { MMKVLoader, ProcessingModes } from "react-native-mmkv-storage"; import { generateSecureRandom } from "react-native-securerandom"; import { DatabaseLogger } from "."; -import { ToastManager } from "../../services/event-manager"; import { MMKV } from "./mmkv"; // Database key cipher is persisted across different user sessions hence it has @@ -205,9 +204,8 @@ export async function getDatabaseKey(appLockPassword?: string) { } if (await Keychain.hasInternetCredentials("notesnook")) { - const userKeyCredentials = await Keychain.getInternetCredentials( - "notesnook" - ); + const userKeyCredentials = + await Keychain.getInternetCredentials("notesnook"); if (userKeyCredentials) { const userKeyCipher: Cipher = (await encrypt( diff --git a/apps/mobile/app/common/database/index.ts b/apps/mobile/app/common/database/index.ts index 63731f200..ec65abff6 100644 --- a/apps/mobile/app/common/database/index.ts +++ b/apps/mobile/app/common/database/index.ts @@ -72,7 +72,7 @@ export async function setupDatabase(password?: string) { ({ compress: Gzip.deflate, decompress: Gzip.inflate - } as ICompressor), + }) as ICompressor, batchSize: 50, sqliteOptions: { dialect: (name) => ({ diff --git a/apps/mobile/app/common/database/sqlite.kysely.ts b/apps/mobile/app/common/database/sqlite.kysely.ts index 04a0c4857..64c259816 100644 --- a/apps/mobile/app/common/database/sqlite.kysely.ts +++ b/apps/mobile/app/common/database/sqlite.kysely.ts @@ -109,8 +109,8 @@ class RNSqliteConnection implements DatabaseConnection { query.kind === "SelectQueryNode" ? "query" : query.kind === "RawNode" - ? "raw" - : "exec"; + ? "raw" + : "exec"; const result = await this.db.executeAsync(sql, parameters as any[]); diff --git a/apps/mobile/app/common/filesystem/io.ts b/apps/mobile/app/common/filesystem/io.ts index c3db265aa..37b9d5d48 100644 --- a/apps/mobile/app/common/filesystem/io.ts +++ b/apps/mobile/app/common/filesystem/io.ts @@ -112,8 +112,8 @@ export async function writeEncryptedBase64( async function deleteLocalFile(filename: string) { try { await createCacheDir(); - let path = cacheDir + `/${filename}`; - let exists = await RNFetchBlob.fs.exists(path); + const path = cacheDir + `/${filename}`; + const exists = await RNFetchBlob.fs.exists(path); if (Platform.OS === "ios" && !exists) { const iosAppGroup = Platform.OS === "ios" @@ -309,7 +309,9 @@ export async function deleteDCacheFiles() { }); } } - } catch (e) {} + } catch (e) { + /** Empty */ + } } export async function getCachePathForFile(filename: string) { diff --git a/apps/mobile/app/components/announcements/announcement.tsx b/apps/mobile/app/components/announcements/announcement.tsx index 329ccc282..47ecabdc0 100644 --- a/apps/mobile/app/components/announcements/announcement.tsx +++ b/apps/mobile/app/components/announcements/announcement.tsx @@ -36,7 +36,7 @@ export const Announcement = () => { state.announcements, state.remove ]); - let announcement = announcements.length > 0 ? announcements[0] : null; + const announcement = announcements.length > 0 ? announcements[0] : null; const selectionMode = useSelectionStore((state) => state.selectionMode); return !announcement || selectionMode ? null : ( diff --git a/apps/mobile/app/components/announcements/cta.tsx b/apps/mobile/app/components/announcements/cta.tsx index 7d2c4938b..2feb2ab66 100644 --- a/apps/mobile/app/components/announcements/cta.tsx +++ b/apps/mobile/app/components/announcements/cta.tsx @@ -32,7 +32,7 @@ import { Action } from "../../stores/use-message-store"; export const Cta = (props: BodyItemProps) => { const { colors } = useThemeColors(); - let buttons = + const buttons = props.item.actions.filter((item) => allowedOnPlatform(item.platforms)) || []; diff --git a/apps/mobile/app/components/app-lock/index.tsx b/apps/mobile/app/components/app-lock/index.tsx index b652e4bc5..bcab38b15 100644 --- a/apps/mobile/app/components/app-lock/index.tsx +++ b/apps/mobile/app/components/app-lock/index.tsx @@ -53,7 +53,6 @@ import Heading from "../ui/typography/heading"; import Paragraph from "../ui/typography/paragraph"; import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; import { strings } from "@notesnook/intl"; -import { AppFontSize } from "../../utils/size"; import { editorController } from "../../screens/editor/tiptap/utils"; import { useTabStore } from "../../screens/editor/tiptap/use-tab-store"; @@ -239,8 +238,8 @@ const AppLocked = () => { deviceMode !== "mobile" ? "50%" : Platform.OS == "ios" - ? "95%" - : "100%", + ? "95%" + : "100%", paddingHorizontal: 12, marginBottom: 30, marginTop: 15, diff --git a/apps/mobile/app/components/attachments/actions.tsx b/apps/mobile/app/components/attachments/actions.tsx index 7adf4490e..811c08a0e 100644 --- a/apps/mobile/app/components/attachments/actions.tsx +++ b/apps/mobile/app/components/attachments/actions.tsx @@ -46,7 +46,6 @@ import { eOnLoadNote } from "../../utils/events"; import { AppFontSize } from "../../utils/size"; -import { sleep } from "../../utils/time"; import { Dialog } from "../dialog"; import { presentDialog } from "../dialog/functions"; import { openNote } from "../list-items/note/wrapper"; diff --git a/apps/mobile/app/components/attachments/index.tsx b/apps/mobile/app/components/attachments/index.tsx index 53a2580a7..b5b7b6943 100644 --- a/apps/mobile/app/components/attachments/index.tsx +++ b/apps/mobile/app/components/attachments/index.tsx @@ -17,7 +17,6 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -import { LegendList } from "@legendapp/list"; import { Attachment, FilteredSelector, diff --git a/apps/mobile/app/components/auth/forgot-password.tsx b/apps/mobile/app/components/auth/forgot-password.tsx index 67f82e16e..85ced9c76 100644 --- a/apps/mobile/app/components/auth/forgot-password.tsx +++ b/apps/mobile/app/components/auth/forgot-password.tsx @@ -53,7 +53,7 @@ export const ForgotPassword = ({ userEmail }: { userEmail: string }) => { } setLoading(true); try { - let lastRecoveryEmailTime = SettingsService.get().lastRecoveryEmailTime; + const lastRecoveryEmailTime = SettingsService.get().lastRecoveryEmailTime; if ( lastRecoveryEmailTime && Date.now() - lastRecoveryEmailTime < 60000 * 3 diff --git a/apps/mobile/app/components/auth/login.tsx b/apps/mobile/app/components/auth/login.tsx index e1e2741f4..efa44ba28 100644 --- a/apps/mobile/app/components/auth/login.tsx +++ b/apps/mobile/app/components/auth/login.tsx @@ -22,14 +22,9 @@ import { useThemeColors } from "@notesnook/theme"; import { RouteProp, useRoute } from "@react-navigation/native"; import React, { useEffect, useState } from "react"; import { TouchableOpacity, View, useWindowDimensions } from "react-native"; -import { SheetManager } from "react-native-actions-sheet"; import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; import { DDS } from "../../services/device-detection"; -import { - eSendEvent, - presentSheet, - ToastManager -} from "../../services/event-manager"; +import { eSendEvent, presentSheet } from "../../services/event-manager"; import Navigation from "../../services/navigation"; import PremiumService from "../../services/premium"; import SettingsService from "../../services/settings"; @@ -195,8 +190,8 @@ export const Login = ({ ? "50%" : "49.99%" : focused - ? "100%" - : "99.9%", + ? "100%" + : "99.9%", backgroundColor: colors.primary.background, alignSelf: "center", paddingHorizontal: DDS.isTab ? 0 : DefaultAppStyles.GAP, diff --git a/apps/mobile/app/components/auth/session-expired.tsx b/apps/mobile/app/components/auth/session-expired.tsx index 360f8153e..377bc6d79 100644 --- a/apps/mobile/app/components/auth/session-expired.tsx +++ b/apps/mobile/app/components/auth/session-expired.tsx @@ -92,7 +92,7 @@ export const SessionExpired = () => { const open = React.useCallback(async () => { try { - let res = await db.tokenManager.getToken(); + const res = await db.tokenManager.getToken(); if (!res) throw new Error("no token found"); if (db.tokenManager._isTokenExpired(res)) throw new Error("token expired"); @@ -102,7 +102,7 @@ export const SessionExpired = () => { Sync.run("global", false, "full", async (complete) => { if (!complete) { - let user = await db.user.getUser(); + const user = await db.user.getUser(); if (!user) return; email.current = user.email; setVisible(true); @@ -115,7 +115,7 @@ export const SessionExpired = () => { setVisible(false); }); } catch (e) { - let user = await db.user.getUser(); + const user = await db.user.getUser(); if (!user) return; email.current = user.email; setFocused(false); diff --git a/apps/mobile/app/components/auth/signup.tsx b/apps/mobile/app/components/auth/signup.tsx index f525d4bcf..06f870b21 100644 --- a/apps/mobile/app/components/auth/signup.tsx +++ b/apps/mobile/app/components/auth/signup.tsx @@ -99,7 +99,7 @@ export const Signup = ({ try { setCurrentStep(SignupSteps.createAccount); await db.user.signup(email.current!.toLowerCase(), password.current!); - let user = await db.user.getUser(); + const user = await db.user.getUser(); setUser(user); setLastSynced(await db.lastSynced()); clearMessage(); diff --git a/apps/mobile/app/components/date-picker/index.tsx b/apps/mobile/app/components/date-picker/index.tsx index 7abf8ee47..68f4c14ff 100644 --- a/apps/mobile/app/components/date-picker/index.tsx +++ b/apps/mobile/app/components/date-picker/index.tsx @@ -1,3 +1,22 @@ +/* +This file is part of the Notesnook project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +import React from "react"; import { useThemeColors } from "@notesnook/theme"; import { useRef } from "react"; import { View } from "react-native"; diff --git a/apps/mobile/app/components/dialog/base-dialog.tsx b/apps/mobile/app/components/dialog/base-dialog.tsx index 7712c6d4f..f2b0ce4b2 100644 --- a/apps/mobile/app/components/dialog/base-dialog.tsx +++ b/apps/mobile/app/components/dialog/base-dialog.tsx @@ -23,7 +23,6 @@ import { ColorValue, KeyboardAvoidingView, Modal, - Platform, SafeAreaView, StyleSheet, TouchableOpacity, @@ -136,8 +135,8 @@ const BaseDialog = ({ backgroundColor: background ? background : transparent - ? "transparent" - : "rgba(0,0,0,0.3)" + ? "transparent" + : "rgba(0,0,0,0.3)" }} > diff --git a/apps/mobile/app/components/dialog/dialog-header.tsx b/apps/mobile/app/components/dialog/dialog-header.tsx index 311da4630..eff4dad14 100644 --- a/apps/mobile/app/components/dialog/dialog-header.tsx +++ b/apps/mobile/app/components/dialog/dialog-header.tsx @@ -22,7 +22,6 @@ import { Text, View, ViewStyle } from "react-native"; import { useThemeColors } from "@notesnook/theme"; import { AppFontSize } from "../../utils/size"; import { Button, ButtonProps } from "../ui/button"; -import { PressableProps } from "../ui/pressable"; import Heading from "../ui/typography/heading"; import Paragraph from "../ui/typography/paragraph"; import { DefaultAppStyles } from "../../utils/styles"; diff --git a/apps/mobile/app/components/dialogs/vault/index.tsx b/apps/mobile/app/components/dialogs/vault/index.tsx index bf1d65792..0cfdf7661 100644 --- a/apps/mobile/app/components/dialogs/vault/index.tsx +++ b/apps/mobile/app/components/dialogs/vault/index.tsx @@ -110,61 +110,6 @@ export const VaultDialog: React.FC = () => { const confirmPasswordRef = useRef(null); const newPasswordRef = useRef(null); - const open = useCallback(async (data: Vault) => { - const biometry = await BiometricService.isBiometryAvailable(); - const available = !!biometry; - const fingerprint = await BiometricService.hasInternetCredentials(); - - if (data.item) { - const locked = await db.vaults.itemExists(data.item); - noteLockedRef.current = locked; - if (!locked) { - const content = await db.content.findByNoteId(data.item!.id); - if (content && isEncryptedContent(content)) { - noteLockedRef.current = true; - } - } - } - - // Set refs - noteRef.current = data.item; - titleRef.current = data.title || strings.goToEditor(); - descriptionRef.current = data.description || null; - paragraphRef.current = data.paragraph || null; - buttonTitleRef.current = data.buttonTitle || null; - positiveButtonTypeRef.current = data.positiveButtonType || "transparent"; - customActionTitleRef.current = data.customActionTitle || null; - customActionParagraphRef.current = data.customActionParagraph || null; - onUnlockRef.current = data.onUnlock; - requestTypeRef.current = data.requestType; - - // Set UI state - setIsBiometryAvailable(available); - setIsBiometryEnrolled(fingerprint); - setBiometricUnlock(fingerprint); - setWrongPassword(false); - setPasswordsDontMatch(false); - setDeleteAll(false); - setLoading(false); - - // Auto-unlock with fingerprint if applicable - const canAutoUnlock = - fingerprint && - data.requestType !== VaultRequestType.EnableFingerprint && - data.requestType !== VaultRequestType.RevokeFingerprint && - data.requestType !== VaultRequestType.ChangePassword && - data.requestType !== VaultRequestType.ClearVault && - data.requestType !== VaultRequestType.DeleteVault && - data.requestType !== VaultRequestType.CustomAction && - data.requestType !== VaultRequestType.PermanentUnlock; - - if (canAutoUnlock) { - await onPressFingerprintAuth(data.title, data.description); - } else { - setVisible(true); - } - }, []); - const close = useCallback(() => { if (loading) { ToastManager.show({ @@ -292,6 +237,45 @@ export const VaultDialog: React.FC = () => { setLoading(false); }, [close]); + const enrollFingerprint = useCallback( + async (password: string) => { + setLoading(true); + try { + await db.vault.unlock(password); + await BiometricService.storeCredentials(password); + setLoading(false); + eSendEvent("vaultUpdated"); + ToastManager.show({ + heading: strings.biometricUnlockEnabled(), + type: "success", + context: "global" + }); + close(); + } catch (e) { + close(); + ToastManager.show({ + heading: strings.passwordIncorrect(), + type: "error", + context: "local" + }); + setLoading(false); + } + }, + [close] + ); + + const takeErrorAction = useCallback(() => { + setWrongPassword(true); + setVisible(true); + setTimeout(() => { + ToastManager.show({ + heading: strings.passwordIncorrect(), + type: "error", + context: "local" + }); + }, 500); + }, []); + const lockNote = useCallback(async () => { if (!passwordRef.current || passwordRef.current.trim() === "") { ToastManager.show({ @@ -333,7 +317,13 @@ export const VaultDialog: React.FC = () => { .catch((e) => { takeErrorAction(); }); - }, [close, biometricUnlock, isBiometryEnrolled]); + }, [ + biometricUnlock, + isBiometryEnrolled, + close, + enrollFingerprint, + takeErrorAction + ]); const openInEditor = useCallback( (note: Note & { content?: NoteContent }) => { @@ -387,19 +377,7 @@ export const VaultDialog: React.FC = () => { } catch (e) { takeErrorAction(); } - }, [close]); - - const takeErrorAction = useCallback(() => { - setWrongPassword(true); - setVisible(true); - setTimeout(() => { - ToastManager.show({ - heading: strings.passwordIncorrect(), - type: "error", - context: "local" - }); - }, 500); - }, []); + }, [close, takeErrorAction]); const openNote = useCallback(async () => { try { @@ -440,6 +418,7 @@ export const VaultDialog: React.FC = () => { }, [ biometricUnlock, isBiometryEnrolled, + enrollFingerprint, openInEditor, shareNote, deleteNote, @@ -464,33 +443,6 @@ export const VaultDialog: React.FC = () => { } }, [permanantUnlock, openNote]); - const enrollFingerprint = useCallback( - async (password: string) => { - setLoading(true); - try { - await db.vault.unlock(password); - await BiometricService.storeCredentials(password); - setLoading(false); - eSendEvent("vaultUpdated"); - ToastManager.show({ - heading: strings.biometricUnlockEnabled(), - type: "success", - context: "global" - }); - close(); - } catch (e) { - close(); - ToastManager.show({ - heading: strings.passwordIncorrect(), - type: "error", - context: "local" - }); - setLoading(false); - } - }, - [close] - ); - const createVault = useCallback(async () => { await db.vault.create(passwordRef.current || ""); @@ -536,31 +488,6 @@ export const VaultDialog: React.FC = () => { } }, []); - const onPressFingerprintAuth = useCallback( - async (title?: string, description?: string) => { - try { - const credentials = await BiometricService.getCredentials( - title || titleRef.current, - description || descriptionRef.current || "" - ); - - if (!credentials) throw new Error("Failed to get user credentials"); - - if (credentials?.password) { - passwordRef.current = credentials.password; - onPress(); - } else { - eSendEvent(eCloseActionSheet); - await sleep(300); - setVisible(true); - } - } catch (e) { - console.error(e); - } - }, - [] - ); - const onPress = useCallback(async () => { const requestType = requestTypeRef.current; @@ -689,6 +616,89 @@ export const VaultDialog: React.FC = () => { deleteVault ]); + const onPressFingerprintAuth = useCallback( + async (title?: string, description?: string) => { + try { + const credentials = await BiometricService.getCredentials( + title || titleRef.current, + description || descriptionRef.current || "" + ); + + if (!credentials) throw new Error("Failed to get user credentials"); + + if (credentials?.password) { + passwordRef.current = credentials.password; + onPress(); + } else { + eSendEvent(eCloseActionSheet); + await sleep(300); + setVisible(true); + } + } catch (e) { + console.error(e); + } + }, + [onPress] + ); + + const open = useCallback( + async (data: Vault) => { + const biometry = await BiometricService.isBiometryAvailable(); + const available = !!biometry; + const fingerprint = await BiometricService.hasInternetCredentials(); + + if (data.item) { + const locked = await db.vaults.itemExists(data.item); + noteLockedRef.current = locked; + if (!locked) { + const content = await db.content.findByNoteId(data.item!.id); + if (content && isEncryptedContent(content)) { + noteLockedRef.current = true; + } + } + } + + // Set refs + noteRef.current = data.item; + titleRef.current = data.title || strings.goToEditor(); + descriptionRef.current = data.description || null; + paragraphRef.current = data.paragraph || null; + buttonTitleRef.current = data.buttonTitle || null; + positiveButtonTypeRef.current = data.positiveButtonType || "transparent"; + customActionTitleRef.current = data.customActionTitle || null; + customActionParagraphRef.current = data.customActionParagraph || null; + onUnlockRef.current = data.onUnlock; + requestTypeRef.current = data.requestType; + + // Set UI state + setIsBiometryAvailable(available); + setIsBiometryEnrolled(fingerprint); + setBiometricUnlock(fingerprint); + setWrongPassword(false); + setPasswordsDontMatch(false); + setDeleteAll(false); + setLoading(false); + + // Auto-unlock with fingerprint if applicable + const canAutoUnlock = + fingerprint && + data.requestType !== VaultRequestType.EnableFingerprint && + data.requestType !== VaultRequestType.RevokeFingerprint && + data.requestType !== VaultRequestType.ChangePassword && + data.requestType !== VaultRequestType.ClearVault && + data.requestType !== VaultRequestType.DeleteVault && + data.requestType !== VaultRequestType.CustomAction && + data.requestType !== VaultRequestType.PermanentUnlock; + + if (canAutoUnlock) { + await onPressFingerprintAuth(data.title, data.description); + } else { + setVisible(true); + } + }, + [onPressFingerprintAuth] + ); + useEffect(() => { eSubscribeEvent(eOpenVaultDialog, open); eSubscribeEvent(eCloseVaultDialog, close); diff --git a/apps/mobile/app/components/fluid-panels/index.tsx b/apps/mobile/app/components/fluid-panels/index.tsx index 6d2a75159..c2c0d0372 100644 --- a/apps/mobile/app/components/fluid-panels/index.tsx +++ b/apps/mobile/app/components/fluid-panels/index.tsx @@ -22,7 +22,6 @@ import React, { RefObject, useEffect, useImperativeHandle, - useMemo, useRef, useState } from "react"; @@ -39,7 +38,6 @@ import Animated, { WithSpringConfig, withTiming } from "react-native-reanimated"; -import { useTabStore } from "../../screens/editor/tiptap/use-tab-store"; import { eSendEvent } from "../../services/event-manager"; import { useSettingStore } from "../../stores/use-setting-store"; import { eClearEditor } from "../../utils/events"; diff --git a/apps/mobile/app/components/list/index.tsx b/apps/mobile/app/components/list/index.tsx index 54279e358..d33a48c66 100644 --- a/apps/mobile/app/components/list/index.tsx +++ b/apps/mobile/app/components/list/index.tsx @@ -77,10 +77,10 @@ export default function List(props: ListProps) { props.renderedInRoute === "Notes" ? "home" : props.renderedInRoute === "Favorites" - ? "favorites" - : props.renderedInRoute === "Trash" || props.dataType === "trash" - ? "trash" - : `${props.dataType}s`; + ? "favorites" + : props.renderedInRoute === "Trash" || props.dataType === "trash" + ? "trash" + : `${props.dataType}s`; const groupOptions = useGroupOptions(groupType); @@ -94,7 +94,7 @@ export default function List(props: ListProps) { (item: number | boolean, index: number) => { return props.data?.type(index); }, - [] + [props.data] ); const renderItem = React.useCallback( diff --git a/apps/mobile/app/components/list/reorderable-list.tsx b/apps/mobile/app/components/list/reorderable-list.tsx index 6658e072e..3047d024e 100644 --- a/apps/mobile/app/components/list/reorderable-list.tsx +++ b/apps/mobile/app/components/list/reorderable-list.tsx @@ -30,7 +30,7 @@ import { fluidTabsRef } from "../../utils/global-refs"; import { AppFontSize } from "../../utils/size"; import { useSideBarDraggingStore } from "../side-menu/dragging-store"; import { IconButton } from "../ui/icon-button"; -import { isFeatureAvailable, useIsFeatureAvailable } from "@notesnook/common"; +import { useIsFeatureAvailable } from "@notesnook/common"; import PaywallSheet from "../sheets/paywall"; import { strings } from "@notesnook/intl"; import { ToastManager } from "../../services/event-manager"; @@ -142,7 +142,7 @@ function ReorderableList({ items.push(...data.filter((i) => !itemOrderState.includes(i.id))); return items; - }, [data, customizableSidebarFeature?.isAllowed]); + }, [customizableSidebarFeature?.isAllowed, data, itemOrderState]); return ( diff --git a/apps/mobile/app/components/merge-conflicts/index.tsx b/apps/mobile/app/components/merge-conflicts/index.tsx index 8798ac386..80c50f6a4 100644 --- a/apps/mobile/app/components/merge-conflicts/index.tsx +++ b/apps/mobile/app/components/merge-conflicts/index.tsx @@ -20,7 +20,6 @@ along with this program. If not, see . import { getFormattedDate } from "@notesnook/common"; import { EncryptedContentItem, - isEncryptedContent, Note, UnencryptedContentItem } from "@notesnook/core"; @@ -75,9 +74,9 @@ const MergeConflicts = () => { const { height } = useSettingStore((state) => state.dimensions); const applyChanges = async () => { - let contentToSave = selectedContent; + const contentToSave = selectedContent; if (!contentToSave) return; - let note = await db.notes.note(contentToSave.noteId); + const note = await db.notes.note(contentToSave.noteId); if (!note) return; await db.notes.add({ id: note.id, @@ -462,7 +461,8 @@ const MergeConflicts = () => { { - const note = await db.notes.note(content.current?.noteId!); + if (!content.current?.noteId) return; + const note = await db.notes.note(content.current?.noteId); if (!note) return; loadContent({ id: note.id, diff --git a/apps/mobile/app/components/note-history/index.tsx b/apps/mobile/app/components/note-history/index.tsx index a39cd11b8..4b16c191f 100644 --- a/apps/mobile/app/components/note-history/index.tsx +++ b/apps/mobile/app/components/note-history/index.tsx @@ -63,22 +63,25 @@ const HistoryItem = ({ }${_end_time}`; }; - const preview = useCallback(async (item: HistorySession) => { - const content = await db.noteHistory.content(item.id); - presentSheet({ - component: ( - - ), - context: "note_history" - }); - }, []); + const preview = useCallback( + async (item: HistorySession) => { + const content = await db.noteHistory.content(item.id); + presentSheet({ + component: ( + + ), + context: "note_history" + }); + }, + [note] + ); return ( ( ), - [history] + [history, note] ); return ( diff --git a/apps/mobile/app/components/note-history/preview.tsx b/apps/mobile/app/components/note-history/preview.tsx index 647946eea..9124312bc 100644 --- a/apps/mobile/app/components/note-history/preview.tsx +++ b/apps/mobile/app/components/note-history/preview.tsx @@ -42,7 +42,6 @@ import { isEncryptedContent, Note, NoteContent, - SessionContentItem, TrashOrItem } from "@notesnook/core"; diff --git a/apps/mobile/app/components/paywall/index.tsx b/apps/mobile/app/components/paywall/index.tsx index 609b364f0..e1da6a404 100644 --- a/apps/mobile/app/components/paywall/index.tsx +++ b/apps/mobile/app/components/paywall/index.tsx @@ -19,7 +19,6 @@ along with this program. If not, see . import { getFeaturesTable } from "@notesnook/common"; import { - EV, EVENTS, Plan, SKUResponse, @@ -119,7 +118,7 @@ const PayWall = (props: NavigationProps<"PayWall">) => { } setStep(Steps.buy); } - }, [routeParams.state]); + }, [pricingPlans, routeParams.state]); useEffect(() => { let listener: NativeEventSubscription; @@ -137,7 +136,7 @@ const PayWall = (props: NavigationProps<"PayWall">) => { return () => { listener?.remove(); }; - }, [isFocused, step]); + }, [isFocused, routeParams.context, step]); useEffect(() => { const sub = db.eventManager.subscribe( @@ -154,7 +153,7 @@ const PayWall = (props: NavigationProps<"PayWall">) => { return () => { sub?.unsubscribe(); }; - }, []); + }, [routeParams.context]); const is5YearPlanSelected = ( isGithubRelease @@ -971,7 +970,7 @@ const PricingPlanCard = ({ .then((value) => { setRegionaDiscount(value); }); - }, [annualBilling]); + }, [WebPlan?.period, annualBilling, plan.id, pricingPlans]); useEffect(() => { if (!annualBilling) { @@ -1008,8 +1007,8 @@ const PricingPlanCard = ({ : "monthly" }` : pricingPlans.isGithubRelease - ? (WebPlan?.period as string) - : (product?.productId as string) + ? (WebPlan?.period as string) + : (product?.productId as string) ); setStep(Steps.buy); }} diff --git a/apps/mobile/app/components/properties/color-tags.tsx b/apps/mobile/app/components/properties/color-tags.tsx index ba04c98c2..5bcc1ab47 100644 --- a/apps/mobile/app/components/properties/color-tags.tsx +++ b/apps/mobile/app/components/properties/color-tags.tsx @@ -132,7 +132,7 @@ export const ColorTags = ({ item }: { item: Note }) => { } useSettingStore.getState().setSheetKeyboardHandler(false); setVisible(true); - }, []); + }, [colorFeature]); return ( <> diff --git a/apps/mobile/app/components/properties/date-meta.tsx b/apps/mobile/app/components/properties/date-meta.tsx index 8a5da0cba..ab75cab0a 100644 --- a/apps/mobile/app/components/properties/date-meta.tsx +++ b/apps/mobile/app/components/properties/date-meta.tsx @@ -35,7 +35,7 @@ export const DateMeta = ({ item }: { item: Item }) => { const [dateCreated, setDateCreated] = useState(item.dateCreated); function getDateMeta() { - let keys = Object.keys(item); + const keys = Object.keys(item); if (keys.includes("dateEdited")) keys.splice( keys.findIndex((k) => k === "dateModified"), diff --git a/apps/mobile/app/components/properties/items.tsx b/apps/mobile/app/components/properties/items.tsx index ef28b21bd..9f780eca5 100644 --- a/apps/mobile/app/components/properties/items.tsx +++ b/apps/mobile/app/components/properties/items.tsx @@ -173,15 +173,15 @@ export const Items = ({ DDS.isTab ? AppFontSize.xxl : shouldShrink - ? AppFontSize.xxl - : AppFontSize.lg + ? AppFontSize.xxl + : AppFontSize.lg } color={ item.checked ? item.activeColor || colors.primary.accent : item.id.match(/(delete|trash)/g) - ? colors.error.icon - : colors.secondary.icon + ? colors.error.icon + : colors.secondary.icon } /> @@ -212,8 +212,8 @@ export const Items = ({ text: item.checked ? item.activeColor || colors.primary.accent : item.id === "delete" || item.id === "trash" - ? colors.error.paragraph - : colors.primary.paragraph + ? colors.error.paragraph + : colors.primary.paragraph }} testID={"icon-" + item.id} onPress={item.onPress} @@ -277,8 +277,8 @@ export const Items = ({ item.checked ? item.activeColor || colors.primary.accent : item.id === "delete" || item.id === "trash" - ? colors.error.icon - : colors.secondary.icon + ? colors.error.icon + : colors.secondary.icon } /> @@ -318,7 +318,9 @@ export const Items = ({ [ colors.error.icon, colors.primary.accent, + colors.primary.border, colors.secondary.icon, + colors.static.orange, columnItemWidth, topBarSorting ] diff --git a/apps/mobile/app/components/properties/tags.jsx b/apps/mobile/app/components/properties/tags.jsx index 12a8bb261..8e14ccfd3 100644 --- a/apps/mobile/app/components/properties/tags.jsx +++ b/apps/mobile/app/components/properties/tags.jsx @@ -77,7 +77,7 @@ export const TagStrip = ({ item, close }) => { .then((tags) => { setTags(tags); }); - }, []); + }, [item]); return tags?.length > 0 ? ( { - props.pricingPlans - ?.getRegionalDiscount( - props.pricingPlans.currentPlan?.id as string, - props.pricingPlans.isGithubRelease - ? ((product as Plan)?.period as string) - : props.productId - ) - .then((value) => { - if ( - value && - value.sku?.startsWith( - (props.pricingPlans.selectedProduct as RNIap.Subscription) - ?.productId - ) - ) { - props.pricingPlans.selectProduct(value?.sku as string); - } - setRegionaDiscount(value); - }); - }, []); + if (product) { + props.pricingPlans + ?.getRegionalDiscount( + props.pricingPlans.currentPlan?.id as string, + props.pricingPlans.isGithubRelease + ? ((product as Plan)?.period as string) + : props.productId + ) + .then((value) => { + if ( + value && + value.sku?.startsWith( + (props.pricingPlans.selectedProduct as RNIap.Subscription) + ?.productId + ) + ) { + props.pricingPlans.selectProduct(value?.sku as string); + } + setRegionaDiscount(value); + }); + } + }, [product, props.pricingPlans, props.productId]); const discountValue = (isAnnual && !isGithubRelease) || diff --git a/apps/mobile/app/components/sheets/export-notes/share.jsx b/apps/mobile/app/components/sheets/export-notes/share.jsx index 1291f1a1e..a6204193e 100644 --- a/apps/mobile/app/components/sheets/export-notes/share.jsx +++ b/apps/mobile/app/components/sheets/export-notes/share.jsx @@ -21,7 +21,6 @@ import React from "react"; import { View } from "react-native"; import FileViewer from "react-native-file-viewer"; import { ToastManager } from "../../../services/event-manager"; -import { AppFontSize } from "../../../utils/size"; import { Button } from "../../ui/button"; import { strings } from "@notesnook/intl"; import { DefaultAppStyles } from "../../../utils/styles"; diff --git a/apps/mobile/app/components/sheets/notebooks/index.tsx b/apps/mobile/app/components/sheets/notebooks/index.tsx index 5e35eb5ac..328ce2748 100644 --- a/apps/mobile/app/components/sheets/notebooks/index.tsx +++ b/apps/mobile/app/components/sheets/notebooks/index.tsx @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -import { Notebook, VirtualizedGrouping } from "@notesnook/core"; +import { Notebook } from "@notesnook/core"; import { strings } from "@notesnook/intl"; import { useThemeColors } from "@notesnook/theme"; import React, { useEffect, useState } from "react"; diff --git a/apps/mobile/app/components/sheets/paywall/index.tsx b/apps/mobile/app/components/sheets/paywall/index.tsx index c6c92c82b..1000a2c14 100644 --- a/apps/mobile/app/components/sheets/paywall/index.tsx +++ b/apps/mobile/app/components/sheets/paywall/index.tsx @@ -1,3 +1,22 @@ +/* +This file is part of the Notesnook project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +import React from "react"; import { FeatureId, FeatureResult } from "@notesnook/common"; import { SubscriptionPlan, SubscriptionProvider } from "@notesnook/core"; import { strings } from "@notesnook/intl"; diff --git a/apps/mobile/app/components/sheets/plan-limits/index.tsx b/apps/mobile/app/components/sheets/plan-limits/index.tsx index e6a40140f..91667a0c7 100644 --- a/apps/mobile/app/components/sheets/plan-limits/index.tsx +++ b/apps/mobile/app/components/sheets/plan-limits/index.tsx @@ -1,3 +1,22 @@ +/* +This file is part of the Notesnook project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +import React from "react"; import { FeatureUsage, formatBytes, @@ -76,10 +95,10 @@ export function PlanLimits() { {item.total === Infinity ? strings.unlimited() : item.id === "storage" - ? `${formatBytes(item.used)}/${formatBytes( - item.total - )} ${strings.used()}` - : `${item.used}/${item.total} ${strings.used()}`} + ? `${formatBytes(item.used)}/${formatBytes( + item.total + )} ${strings.used()}` + : `${item.used}/${item.total} ${strings.used()}`} diff --git a/apps/mobile/app/components/sheets/publish-note/index.tsx b/apps/mobile/app/components/sheets/publish-note/index.tsx index 5f1c96c85..16e8c7b81 100644 --- a/apps/mobile/app/components/sheets/publish-note/index.tsx +++ b/apps/mobile/app/components/sheets/publish-note/index.tsx @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -import { hosts, Monograph, Note } from "@notesnook/core"; +import { hosts, Note } from "@notesnook/core"; import { strings } from "@notesnook/intl"; import { useThemeColors } from "@notesnook/theme"; import Clipboard from "@react-native-clipboard/clipboard"; @@ -28,7 +28,6 @@ import { TouchableOpacity, View } from "react-native"; -import Icon from "react-native-vector-icons/MaterialCommunityIcons"; //@ts-ignore import ToggleSwitch from "toggle-switch-react-native"; import { db } from "../../../common/database"; @@ -50,8 +49,8 @@ import Input from "../../ui/input"; import Heading from "../../ui/typography/heading"; import Paragraph from "../../ui/typography/paragraph"; import { useAsync } from "react-async-hook"; -import { isFeatureAvailable, useIsFeatureAvailable } from "@notesnook/common"; import { eMenuItemUpdate } from "../../../utils/events"; +import { useIsFeatureAvailable } from "@notesnook/common"; async function fetchMonographData(noteId: string) { const monographId = db.monographs.monograph(noteId); diff --git a/apps/mobile/app/components/side-menu/index.tsx b/apps/mobile/app/components/side-menu/index.tsx index 4d12c9809..a3b31bc50 100644 --- a/apps/mobile/app/components/side-menu/index.tsx +++ b/apps/mobile/app/components/side-menu/index.tsx @@ -79,6 +79,7 @@ type SimpleTabViewProps = { const createSceneMap = ( scenes: Record> ): ((props: { route: SimpleRoute }) => React.ReactNode) => { + // eslint-disable-next-line react/display-name return ({ route }: { route: SimpleRoute }) => { const SceneComponent = scenes[route.key]; if (!SceneComponent) return null; @@ -136,8 +137,8 @@ const SimpleTabView = ({ {loadedKeysRef.current.has(route.key) ? getSceneForRoute(route) : navigationState.index === routeIndex - ? getSceneForRoute(route) - : null} + ? getSceneForRoute(route) + : null} ))} @@ -435,9 +436,8 @@ const TabBar = (props: SimpleTabBarProps) => { color={colors.primary.icon} onPress={async () => { if (props.navigationState.index === 1) { - const notebooksFeature = await isFeatureAvailable( - "notebooks" - ); + const notebooksFeature = + await isFeatureAvailable("notebooks"); if (!notebooksFeature.isAllowed) { PaywallSheet.present(notebooksFeature); return; diff --git a/apps/mobile/app/components/side-menu/pinned-section.tsx b/apps/mobile/app/components/side-menu/pinned-section.tsx index bab4cbac6..128a626a5 100644 --- a/apps/mobile/app/components/side-menu/pinned-section.tsx +++ b/apps/mobile/app/components/side-menu/pinned-section.tsx @@ -76,7 +76,7 @@ export const PinnedSection = React.memo( onPress: onPress, onLongPress: onLongPress })) as SideMenuItem[], - [menuPins, onPress] + [menuPins, onLongPress, onPress] ); const renderItem = React.useCallback(({ item }: { item: SideMenuItem }) => { diff --git a/apps/mobile/app/components/ui/sheet/index.jsx b/apps/mobile/app/components/ui/sheet/index.jsx index 273adf61b..49cbd2fb0 100644 --- a/apps/mobile/app/components/ui/sheet/index.jsx +++ b/apps/mobile/app/components/ui/sheet/index.jsx @@ -83,12 +83,13 @@ const SheetWrapper = ({ : 0 }; }, [ - colors.primary.background, - colors.primary.border, largeTablet, smallTablet, width, - insets.bottom + colors.primary.background, + colors.primary.border, + bottomInsets, + isGestureNavigationEnabled ]); const _onOpen = () => { diff --git a/apps/mobile/app/components/walkthroughs/walkthroughs.tsx b/apps/mobile/app/components/walkthroughs/walkthroughs.tsx index f42ba58e8..3dc6167e5 100644 --- a/apps/mobile/app/components/walkthroughs/walkthroughs.tsx +++ b/apps/mobile/app/components/walkthroughs/walkthroughs.tsx @@ -17,33 +17,14 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +import { SubscriptionPlan } from "@notesnook/core"; import { strings } from "@notesnook/intl"; -import { useThemeColors } from "@notesnook/theme"; import React from "react"; -import { Linking, View } from "react-native"; -import Icon from "react-native-vector-icons/MaterialCommunityIcons"; -import { - COMMUNITY_SVG, - LAUNCH_ROCKET, - SUPPORT_SVG, - WELCOME_SVG -} from "../../assets/images/assets"; -import useRotator from "../../hooks/use-rotator"; -import { eSendEvent } from "../../services/event-manager"; -import { getContainerBorder } from "../../utils/colors"; -import { getElevationStyle } from "../../utils/elevation"; -import { eOpenAddNotebookDialog } from "../../utils/events"; -import { defaultBorderRadius, AppFontSize } from "../../utils/size"; -import { Button } from "../ui/button"; -import Seperator from "../ui/seperator"; -import { SvgView } from "../ui/svg"; -import Heading from "../ui/typography/heading"; -import Paragraph from "../ui/typography/paragraph"; -import { DefaultAppStyles } from "../../utils/styles"; +import { WELCOME_SVG } from "../../assets/images/assets"; import { useUserStore } from "../../stores/use-user-store"; -import { planToId, SubscriptionPlan } from "@notesnook/core"; import { planToDisplayName } from "../../utils/constants"; import AppIcon from "../ui/AppIcon"; +import { SvgView } from "../ui/svg"; export type TStep = { text?: string; diff --git a/apps/mobile/app/hooks/use-actions.tsx b/apps/mobile/app/hooks/use-actions.tsx index fb24369d0..2e0a685e0 100644 --- a/apps/mobile/app/hooks/use-actions.tsx +++ b/apps/mobile/app/hooks/use-actions.tsx @@ -33,7 +33,7 @@ import { useThemeColors } from "@notesnook/theme"; import { DisplayedNotification } from "@notifee/react-native"; import Clipboard from "@react-native-clipboard/clipboard"; import React, { useEffect, useRef, useState } from "react"; -import { InteractionManager, Platform, View } from "react-native"; +import { InteractionManager, Platform } from "react-native"; import Share from "react-native-share"; import { DatabaseLogger, db } from "../common/database"; import { AttachmentDialog } from "../components/attachments"; @@ -72,8 +72,8 @@ import { useUserStore } from "../stores/use-user-store"; import { eCloseSheet, eUpdateNoteInEditor } from "../utils/events"; import { deleteItems } from "../utils/functions"; import { convertNoteToText } from "../utils/note-to-text"; -import { sleep } from "../utils/time"; import { NotesnookModule } from "../utils/notesnook-module"; +import { sleep } from "../utils/time"; import DatePickerComponent from "../components/date-picker"; @@ -196,7 +196,7 @@ export const useActions = ({ "expiringNotes" ]); const [item, setItem] = useState(propItem); - const { colors, isDark } = useThemeColors(); + const { colors } = useThemeColors(); const setMenuPins = useMenuStore((state) => state.setMenuPins); const [isPinnedToMenu, setIsPinnedToMenu] = useState( db.shortcuts.exists(item.id) @@ -1286,7 +1286,10 @@ export const useActions = ({ (item as Note).headline || (item as Notebook).description || "", (item as Color).colorCode ); - } catch (e) {} + } catch (e) { + /** + empty */ + } } }); } diff --git a/apps/mobile/app/hooks/use-app-events.tsx b/apps/mobile/app/hooks/use-app-events.tsx index ed01aa347..53f1bff0f 100644 --- a/apps/mobile/app/hooks/use-app-events.tsx +++ b/apps/mobile/app/hooks/use-app-events.tsx @@ -352,7 +352,10 @@ async function checkForShareExtensionLaunchedInBackground() { if (note) setTimeout(() => eSendEvent("loadingNote", note), 1); MMKV.removeItem("shareExtensionOpened"); } - } catch (e) {} + } catch (e) { + /** + empty */ + } } const onSuccessfulSubscription = async ( diff --git a/apps/mobile/app/hooks/use-db-item.ts b/apps/mobile/app/hooks/use-db-item.ts index 3c44ca321..6b93a40b5 100644 --- a/apps/mobile/app/hooks/use-db-item.ts +++ b/apps/mobile/app/hooks/use-db-item.ts @@ -135,7 +135,7 @@ export const useNoteLocked = (noteId: string | undefined) => { //@ts-ignore !globalThis["IS_SHARE_EXTENSION"] ) { - let unsub = useSettingStore.subscribe((state) => { + const unsub = useSettingStore.subscribe((state) => { if (!state.isAppLoading) { unsub(); db.vaults diff --git a/apps/mobile/app/hooks/use-feature-manager.ts b/apps/mobile/app/hooks/use-feature-manager.ts index f173477fa..b9db4d6fb 100644 --- a/apps/mobile/app/hooks/use-feature-manager.ts +++ b/apps/mobile/app/hooks/use-feature-manager.ts @@ -1,15 +1,28 @@ +/* +This file is part of the Notesnook project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ import { useAreFeaturesAvailable } from "@notesnook/common"; -import { strings } from "@notesnook/intl"; import { useEffect } from "react"; import { db } from "../common/database"; -import { presentDialog } from "../components/dialog/functions"; import { useDragState } from "../screens/settings/editor/state"; -import { eSendEvent } from "../services/event-manager"; -import Navigation from "../services/navigation"; import Notifications from "../services/notifications"; import SettingsService from "../services/settings"; import { useUserStore } from "../stores/use-user-store"; -import { eCloseSimpleDialog } from "../utils/events"; export default function useFeatureManager() { const features = useAreFeaturesAvailable([ @@ -69,7 +82,7 @@ export default function useFeatureManager() { db.settings.setDefaultTag(undefined); } } - }, [features, plan]); + }, [features, plan, user]); return true; } diff --git a/apps/mobile/app/hooks/use-pricing-plans.ts b/apps/mobile/app/hooks/use-pricing-plans.ts index 1ca7a8422..b52fe8e4b 100644 --- a/apps/mobile/app/hooks/use-pricing-plans.ts +++ b/apps/mobile/app/hooks/use-pricing-plans.ts @@ -255,12 +255,15 @@ const usePricingPlans = (options?: PricingPlansOptions) => { const products = WebPlanCache || (await db.pricing.products()); WebPlanCache = products; setWebPricingPlans(products); - } catch (e) {} + } catch (e) { + /** + empty */ + } } setLoadingPlans(false); }; loadPlans(); - }, [options?.promoOffer, cancelPromo]); + }, [options?.promoOffer, cancelPromo, hasTrialOffer]); function getLocalizedPrice( product: RNIap.Subscription | RNIap.Product | Plan diff --git a/apps/mobile/app/navigation/fluid-panels-view.tsx b/apps/mobile/app/navigation/fluid-panels-view.tsx index aebbd13a8..41eafeac7 100644 --- a/apps/mobile/app/navigation/fluid-panels-view.tsx +++ b/apps/mobile/app/navigation/fluid-panels-view.tsx @@ -139,7 +139,7 @@ export const FluidPanelsView = React.memo( if (deviceMode === "smallTablet") { fluidTabsRef.current?.openDrawer(false); } - }, [deviceMode, dimensions.width, setFullscreen]); + }, [deviceMode, setFullscreen]); const closeFullScreenEditor = useCallback( (current: string) => { @@ -158,7 +158,7 @@ export const FluidPanelsView = React.memo( fluidTabsRef.current?.goToIndex(2, false); } }, - [deviceMode, dimensions.width, setFullscreen] + [deviceMode, setFullscreen] ); const toggleView = useCallback( @@ -215,7 +215,7 @@ export const FluidPanelsView = React.memo( } }, 0); }, - [deviceMode, fullscreen, setDeviceModeState] + [fullscreen, setDeviceModeState] ); const checkDeviceType = React.useCallback( @@ -229,14 +229,14 @@ export const FluidPanelsView = React.memo( : "mobile"; setDeviceMode(nextDeviceMode, size); }, - [orientation, setDeviceMode, setDimensions] + [orientation, setDeviceMode] ); useEffect(() => { if (orientation !== "UNKNOWN") { checkDeviceType(dimensions); } - }, [orientation, dimensions]); + }, [orientation, dimensions, checkDeviceType]); const _onLayout = React.useCallback( (event: LayoutChangeEvent) => { @@ -251,13 +251,7 @@ export const FluidPanelsView = React.memo( setOrientation(OrientationType["PORTRAIT"]); } }, - [ - checkDeviceType, - deviceMode, - dimensions.width, - orientation, - setDeviceMode - ] + [setDimensions] ); const PANE_OFFSET = useMemo( diff --git a/apps/mobile/app/navigation/navigation-stack.tsx b/apps/mobile/app/navigation/navigation-stack.tsx index dc4139f6e..3604bce27 100644 --- a/apps/mobile/app/navigation/navigation-stack.tsx +++ b/apps/mobile/app/navigation/navigation-stack.tsx @@ -16,7 +16,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ - import { useThemeColors } from "@notesnook/theme"; import { NavigationContainer } from "@react-navigation/native"; import { createNativeStackNavigator } from "@react-navigation/native-stack"; diff --git a/apps/mobile/app/screens/add-reminder/index.tsx b/apps/mobile/app/screens/add-reminder/index.tsx index a8c78d930..b88528f72 100644 --- a/apps/mobile/app/screens/add-reminder/index.tsx +++ b/apps/mobile/app/screens/add-reminder/index.tsx @@ -400,17 +400,45 @@ export default function AddReminder(props: NavigationProps<"AddReminder">) { recurringMode === RecurringModes.Year ? null : recurringMode === RecurringModes.Week - ? (weekFormat === "Mon" ? WeekDaysMon : WeekDays).map( - (item) => ( + ? (weekFormat === "Mon" ? WeekDaysMon : WeekDays).map( + (item) => ( +