diff --git a/packages/web/components/elements/StyledText.tsx b/packages/web/components/elements/StyledText.tsx index 34656067f..84d74de37 100644 --- a/packages/web/components/elements/StyledText.tsx +++ b/packages/web/components/elements/StyledText.tsx @@ -106,8 +106,8 @@ const textVariants = { }, shareTitle: { fontSize: '$1', - fontWeight: '600', - color: '$grayText', + fontWeight: '700', + color: '$grayTextContrast', }, shareSubtitle: { fontSize: '$1', diff --git a/packages/web/components/patterns/ReaderDropdownMenu.tsx b/packages/web/components/patterns/ReaderDropdownMenu.tsx index e9366416f..6e776f8a8 100644 --- a/packages/web/components/patterns/ReaderDropdownMenu.tsx +++ b/packages/web/components/patterns/ReaderDropdownMenu.tsx @@ -15,19 +15,19 @@ export function ReaderDropdownMenu(props: DropdownMenuProps): JSX.Element { props.articleActionHandler('archive')} - title="Archive" + title="Archive (e)" /> props.articleActionHandler('setLabels')} - title="Edit Labels" + title="Edit Labels (l)" /> props.articleActionHandler('showEditModal')} - title="Edit Info" + title="Edit Info (i)" /> props.articleActionHandler('delete')} - title="Delete" + title="Remove (#)" /> void } +const libraryItemCommands = () => { + return [ + { + shortcutKeys: ['e'], + actionDescription: 'Toggle archive status', + shortcutKeyDescription: 'e', + callback: () => {}, + }, + { + actionDescription: 'Remove item', + shortcutKeys: ['#'], + shortcutKeyDescription: '#', + callback: () => {}, + }, + { + actionDescription: 'Edit item labels', + shortcutKeys: ['l'], + shortcutKeyDescription: 'l', + callback: () => {}, + }, + { + actionDescription: 'Mark item as read', + shortcutKeys: ['m', 'r'], + shortcutKeyDescription: 'm then r', + callback: () => {}, + }, + { + actionDescription: 'Mark item as unread', + shortcutKeys: ['m', 'u'], + shortcutKeyDescription: 'm then u', + callback: () => {}, + }, + ] +} + +const readerCommands = () => { + return [ + { + shortcutKeys: ['e'], + actionDescription: 'Toggle archive status', + shortcutKeyDescription: 'e', + callback: () => {}, + }, + + { + actionDescription: 'Open original article', + shortcutKeys: ['o'], + shortcutKeyDescription: 'o', + callback: () => {}, + }, + { + actionDescription: 'Return to library', + shortcutKeys: ['u'], + shortcutKeyDescription: 'u', + callback: () => {}, + }, + { + actionDescription: 'Archive current item', + shortcutKeys: ['e'], + shortcutKeyDescription: 'e', + callback: () => {}, + }, + { + actionDescription: 'Mark current item as read', + shortcutKeys: ['m', 'r'], + shortcutKeyDescription: 'm then r', + callback: () => {}, + }, + { + actionDescription: 'Delete current item', + shortcutKeys: ['#'], + shortcutKeyDescription: '#', + callback: () => {}, + }, + { + actionDescription: 'Highlight selected text', + shortcutKeys: ['h'], + shortcutKeyDescription: 'h', + callback: () => {}, + }, + { + actionDescription: 'Scroll to next highlight', + shortcutKeys: ['j'], + shortcutKeyDescription: 'j', + callback: () => {}, + }, + { + actionDescription: 'Scroll to previous highlight', + shortcutKeys: ['k'], + shortcutKeyDescription: 'k', + callback: () => {}, + }, + { + actionDescription: 'Open Notebook', + shortcutKeys: ['t'], + shortcutKeyDescription: 't', + callback: () => {}, + }, + { + actionDescription: 'Edit Info', + shortcutKeys: ['i'], + shortcutKeyDescription: 'i', + callback: () => {}, + }, + ] +} + export function KeyboardShortcutListModal( props: KeyboardShortcutListModalProps ): JSX.Element { return ( - - - { + // remove focus from modal + ;(document.activeElement as HTMLElement).blur() + }} + > + + + - - Keyboard Shortcuts - - - - - {})} - /> - {}).concat( - libraryListCommands(() => {}) - )} - /> - {})} - /> + + {})} + /> + {}) + .concat(libraryListCommands(() => {})) + .concat(libraryItemCommands())} + /> + + {})} + /> + @@ -89,11 +207,10 @@ function ShortcutListSection(props: ShortcutListSectionProps): JSX.Element { {props.title} @@ -102,16 +219,16 @@ function ShortcutListSection(props: ShortcutListSectionProps): JSX.Element { - + {command.actionDescription} - + {command.shortcutKeyDescription} diff --git a/packages/web/components/templates/article/ArticleActionsMenu.tsx b/packages/web/components/templates/article/ArticleActionsMenu.tsx index 15264c7a5..f399b9c51 100644 --- a/packages/web/components/templates/article/ArticleActionsMenu.tsx +++ b/packages/web/components/templates/article/ArticleActionsMenu.tsx @@ -75,7 +75,7 @@ export function ArticleActionsMenu( onClick={() => readerSettings.setShowSetLabelsModal(true)} > @@ -128,7 +128,7 @@ export function ArticleActionsMenu( }} > @@ -173,7 +173,7 @@ export function ArticleActionsMenu( }} > @@ -190,7 +190,7 @@ export function ArticleActionsMenu( }} > props.articleActionHandler('unarchive')} > diff --git a/packages/web/components/templates/article/ReaderSettingsControl.tsx b/packages/web/components/templates/article/ReaderSettingsControl.tsx index d1ef3bd9e..7ef0a47bf 100644 --- a/packages/web/components/templates/article/ReaderSettingsControl.tsx +++ b/packages/web/components/templates/article/ReaderSettingsControl.tsx @@ -228,7 +228,7 @@ function BasicSettings(props: SettingsProps): JSX.Element { props.readerSettings.setMarginWidth(290) props.readerSettings.setLineHeight(150) props.readerSettings.actionHandler('resetReaderSettings') - showSuccessToast('Display settings reset', { + showSuccessToast('Reader Preferences Reset', { position: 'bottom-right', }) }} diff --git a/packages/web/components/templates/article/VerticalArticleActions.tsx b/packages/web/components/templates/article/VerticalArticleActions.tsx index 2d7c175b2..cfdfcdd1e 100644 --- a/packages/web/components/templates/article/VerticalArticleActions.tsx +++ b/packages/web/components/templates/article/VerticalArticleActions.tsx @@ -57,7 +57,7 @@ export function VerticalArticleActionsMenu( }} > @@ -100,7 +100,7 @@ export function VerticalArticleActionsMenu( }} > @@ -117,7 +117,7 @@ export function VerticalArticleActionsMenu( }} > @@ -152,7 +152,7 @@ export function VerticalArticleActionsMenu( }} > diff --git a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx index b1b8a2f4f..31b4f7847 100644 --- a/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx +++ b/packages/web/components/templates/homeFeed/HomeFeedContainer.tsx @@ -78,8 +78,9 @@ export function HomeFeedContainer(): JSX.Element { const gridContainerRef = useRef(null) - const [labelsTarget, setLabelsTarget] = - useState(undefined) + const [labelsTarget, setLabelsTarget] = useState( + undefined + ) const [showAddLinkModal, setShowAddLinkModal] = useState(false) const [showEditTitleModal, setShowEditTitleModal] = useState(false) @@ -460,7 +461,7 @@ export function HomeFeedContainer(): JSX.Element { createAction({ section: 'Library', name: 'Remove item', - shortcut: ['r'], + shortcut: ['#'], perform: () => handleCardAction('delete', activeItem), }), createAction({ @@ -472,13 +473,16 @@ export function HomeFeedContainer(): JSX.Element { createAction({ section: 'Library', name: 'Mark item as read', - shortcut: ['Shift', 'i'], - perform: () => handleCardAction('mark-read', activeItem), + shortcut: ['m', 'r'], + perform: () => { + console.log('mark read action') + handleCardAction('mark-read', activeItem) + }, }), createAction({ section: 'Library', name: 'Mark item as unread', - shortcut: ['Shift', 'u'], + shortcut: ['m', 'u'], perform: () => handleCardAction('mark-unread', activeItem), }), ] diff --git a/packages/web/components/templates/reader/ReaderHeader.tsx b/packages/web/components/templates/reader/ReaderHeader.tsx index c4884c1d3..f09ac5406 100644 --- a/packages/web/components/templates/reader/ReaderHeader.tsx +++ b/packages/web/components/templates/reader/ReaderHeader.tsx @@ -103,7 +103,7 @@ function ControlButtonBox(props: ReaderHeaderProps): JSX.Element { props.showDisplaySettingsModal(true) }} > - + diff --git a/packages/web/lib/hooks/useReaderSettings.tsx b/packages/web/lib/hooks/useReaderSettings.tsx index 98d0430fe..d93b419a9 100644 --- a/packages/web/lib/hooks/useReaderSettings.tsx +++ b/packages/web/lib/hooks/useReaderSettings.tsx @@ -194,7 +194,7 @@ export const useReaderSettings = (): ReaderSettings => { { id: 'display_settings', section: 'Article', - name: 'Display settings', + name: 'Reader Preferences', shortcut: ['d'], perform: () => setShowEditDisplaySettingsModal(true), }, diff --git a/packages/web/pages/[username]/[slug]/index.tsx b/packages/web/pages/[username]/[slug]/index.tsx index 55f6ec7ac..e59f249cb 100644 --- a/packages/web/pages/[username]/[slug]/index.tsx +++ b/packages/web/pages/[username]/[slug]/index.tsx @@ -102,17 +102,34 @@ export default function Home(): JSX.Element { linkId: article.id, archived: true, }).then((res) => { - if (res) { - showSuccessToast('Link archived', { position: 'bottom-right' }) - } else { - // todo: revalidate or put back in cache? - showErrorToast('Error archiving link', { + if (!res) { + showErrorToast('Error archiving', { position: 'bottom-right', }) + } else { + router.push(`/home`) + } + }) + } + break + case 'mark-read': + console.log('marking read: ', article) + if (article) { + articleReadingProgressMutation({ + id: article.id, + readingProgressPercent: 100, + readingProgressTopPercent: 100, + readingProgressAnchorIndex: 0, + }).then((res) => { + if (!res) { + // todo: revalidate or put back in cache? + showErrorToast('Error marking as read', { + position: 'bottom-right', + }) + } else { + router.push(`/home`) } }) - - router.push(`/home`) } break case 'delete': @@ -153,12 +170,18 @@ export default function Home(): JSX.Element { actionHandler('delete') } + const markRead = () => { + actionHandler('mark-read') + } + document.addEventListener('archive', archive) document.addEventListener('delete', deletePage) + document.addEventListener('mark-read', markRead) document.addEventListener('openOriginalArticle', openOriginalArticle) return () => { document.removeEventListener('archive', archive) + document.removeEventListener('mark-read', markRead) document.removeEventListener('openOriginalArticle', openOriginalArticle) } }, [actionHandler]) @@ -224,6 +247,15 @@ export default function Home(): JSX.Element { document.dispatchEvent(new Event('archive')) }, }, + { + id: 'mark_read', + section: 'Article', + name: 'Mark current item as read', + shortcut: ['m', 'r'], + perform: () => { + document.dispatchEvent(new Event('mark-read')) + }, + }, { id: 'delete', section: 'Article', @@ -281,7 +313,7 @@ export default function Home(): JSX.Element { { id: 'edit_title', section: 'Article', - name: 'Edit title and description', + name: 'Edit Info', shortcut: ['i'], perform: () => setShowEditModal(true), },