diff --git a/packages/app/public/globals.css b/packages/app/public/globals.css index 7388399c01..5a33ec99f6 100644 --- a/packages/app/public/globals.css +++ b/packages/app/public/globals.css @@ -158,6 +158,9 @@ a, a:hover { color: var(--affine-link-color); } +a:visited { + color: var(--affine-link-visited-color); +} input { border: none; diff --git a/packages/app/src/components/Header/index.tsx b/packages/app/src/components/Header/index.tsx index b6eb961fb4..4acf8b415e 100644 --- a/packages/app/src/components/Header/index.tsx +++ b/packages/app/src/components/Header/index.tsx @@ -14,7 +14,7 @@ import { useEditor } from '@/components/editor-provider'; import EditorModeSwitch from '@/components/editor-mode-switch'; import { EdgelessIcon, PaperIcon } from '../editor-mode-switch/icons'; import ThemeModeSwitch from '@/components/theme-mode-switch'; -import ContactModal from '@/components/contact-modal'; +import { useModal } from '@/components/global-modal-provider'; const PopoverContent = () => { const { editor, mode, setMode } = useEditor(); @@ -51,8 +51,7 @@ const PopoverContent = () => { export const Header = () => { const [title, setTitle] = useState(''); const [isHover, setIsHover] = useState(false); - const [showContactModal, setShowContactModal] = useState(false); - + const { contactModalHandler } = useModal(); const { editor } = useEditor(); useEffect(() => { @@ -66,15 +65,11 @@ export const Header = () => { return ( <> - setShowContactModal(false)} - /> { - setShowContactModal(true); + contactModalHandler(true); }} /> diff --git a/packages/app/src/components/contact-modal/index.tsx b/packages/app/src/components/contact-modal/index.tsx index cebe9f790c..78b9adbdff 100644 --- a/packages/app/src/components/contact-modal/index.tsx +++ b/packages/app/src/components/contact-modal/index.tsx @@ -79,7 +79,7 @@ export const ContactModal = ({ open, onClose }: TransitionsModalProps) => { - 2.0 + Alpha live demo { - const [openModal, setOpenModal] = useState(false); - return ( - <> - setOpenModal(false)} /> - - { - setOpenModal(true); - }} - > - - - - - ); -}; +import { useEditor } from '@/components/editor-provider'; +import { useModal } from '@/components/global-modal-provider'; +import { useTheme } from '@/styles'; -const Shortcuts = () => { - const [openModal, setOpenModal] = useState(false); - return ( - <> - { - setOpenModal(false); - }} - /> - - - { - setOpenModal(true); - }} - > - - - - - ); -}; export const FAQ = () => { const [showContent, setShowContent] = useState(false); + const { mode } = useTheme(); + const { mode: editorMode } = useEditor(); + const { shortcutsModalHandler, contactModalHandler } = useModal(); + const isEdgelessDark = mode === 'dark' && editorMode === 'edgeless'; + return ( <> { > - - + + { + contactModalHandler(true); + }} + > + + + + + { + shortcutsModalHandler(true); + }} + > + + +
- + diff --git a/packages/app/src/components/faq/style.ts b/packages/app/src/components/faq/style.ts index f82ed8ccba..e6959906dc 100644 --- a/packages/app/src/components/faq/style.ts +++ b/packages/app/src/components/faq/style.ts @@ -10,10 +10,6 @@ export const StyledFAQ = styled('div')(({ theme }) => { bottom: '30px', borderRadius: '50%', zIndex: theme.zIndex.popover, - ':hover': { - backgroundColor: theme.colors.popoverBackground, - color: theme.colors.primaryColor, - }, }; }); export const StyledTransformIcon = styled.div<{ in: boolean }>( @@ -36,26 +32,34 @@ export const StyledTransformIcon = styled.div<{ in: boolean }>( : theme.colors.pageBackground, }) ); -export const StyledIconWrapper = styled('div')(({ theme }) => { - return { - color: theme.colors.iconColor, - marginBottom: '24px', - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - cursor: 'pointer', - backgroundColor: theme.colors.pageBackground, - borderRadius: '50%', - width: '32px', - height: '32px', - transition: 'background-color 0.3s', - position: 'relative', - ':hover': { - color: theme.colors.primaryColor, - backgroundColor: theme.colors.hoverBackground, - }, - }; -}); +export const StyledIconWrapper = styled('div')<{ isEdgelessDark: boolean }>( + ({ theme, isEdgelessDark }) => { + return { + color: isEdgelessDark + ? theme.colors.popoverBackground + : theme.colors.iconColor, + marginBottom: '24px', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + cursor: 'pointer', + backgroundColor: isEdgelessDark + ? 'transparent' + : theme.colors.pageBackground, + borderRadius: '50%', + width: '32px', + height: '32px', + transition: 'background-color 0.3s', + position: 'relative', + ':hover': { + color: isEdgelessDark + ? theme.colors.iconColor + : theme.colors.primaryColor, + backgroundColor: theme.colors.hoverBackground, + }, + }; + } +); export const StyledFAQWrapper = styled('div')(({ theme }) => { return { diff --git a/packages/app/src/components/global-modal-provider.tsx b/packages/app/src/components/global-modal-provider.tsx new file mode 100644 index 0000000000..fe4851f197 --- /dev/null +++ b/packages/app/src/components/global-modal-provider.tsx @@ -0,0 +1,53 @@ +import { createContext, useContext, useState } from 'react'; +import type { PropsWithChildren } from 'react'; +import ShortcutsModal from './shortcuts-modal'; +import ContactModal from '@/components/contact-modal'; + +type ModalContextValue = { + shortcutsModalHandler: (visible: boolean) => void; + contactModalHandler: (visible: boolean) => void; +}; +type ModalContextProps = PropsWithChildren<{}>; + +export const ModalContext = createContext({ + shortcutsModalHandler: () => {}, + contactModalHandler: () => {}, +}); + +export const useModal = () => useContext(ModalContext); + +export const ModalProvider = ({ + children, +}: PropsWithChildren) => { + const [openContactModal, setOpenContactModal] = useState(false); + const [openShortcutsModal, setOpenShortcutsModal] = useState(false); + + return ( + { + setOpenShortcutsModal(visible); + }, + contactModalHandler: visible => { + setOpenContactModal(visible); + }, + }} + > + { + setOpenContactModal(false); + }} + > + { + setOpenShortcutsModal(false); + }} + > + {children} + + ); +}; + +export default ModalProvider; diff --git a/packages/app/src/components/shortcuts-modal/index.tsx b/packages/app/src/components/shortcuts-modal/index.tsx index 2d079525f7..cd78b316c4 100644 --- a/packages/app/src/components/shortcuts-modal/index.tsx +++ b/packages/app/src/components/shortcuts-modal/index.tsx @@ -50,7 +50,9 @@ export const ShortcutsModal = ({ open, onClose }: ModalProps) => { - Keyboard shortcuts + + Keyboard shortcuts + {Object.entries(keyboardShortcuts).map(([title, shortcuts]) => { return ( diff --git a/packages/app/src/components/shortcuts-modal/style.ts b/packages/app/src/components/shortcuts-modal/style.ts index e1924b513f..cb51b31b05 100644 --- a/packages/app/src/components/shortcuts-modal/style.ts +++ b/packages/app/src/components/shortcuts-modal/style.ts @@ -35,6 +35,7 @@ export const StyledSubTitle = styled.div(({ theme }) => ({ fontSize: '12px', height: '36px', lineHeight: '36px', + marginTop: '28px', })); export const StyledModalHeader = styled.div(({ theme }) => ({ display: 'flex', diff --git a/packages/app/src/components/tooltip/Tooltip.tsx b/packages/app/src/components/tooltip/Tooltip.tsx index 8b33bb9b35..6fabed3f6d 100644 --- a/packages/app/src/components/tooltip/Tooltip.tsx +++ b/packages/app/src/components/tooltip/Tooltip.tsx @@ -26,11 +26,14 @@ export const placementToContainerDirection: Record< }; const useTooltipStyle = (): CSSProperties => { - const { theme } = useTheme(); + const { theme, mode } = useTheme(); return { boxShadow: '1px 1px 4px rgba(0, 0, 0, 0.14)', padding: '4px 12px', - backgroundColor: theme.colors.primaryColor, + backgroundColor: + mode === 'dark' + ? theme.colors.popoverBackground + : theme.colors.primaryColor, color: '#fff', fontSize: theme.font.xs, }; diff --git a/packages/app/src/pages/_app.tsx b/packages/app/src/pages/_app.tsx index b56c143a59..baaaba3d38 100644 --- a/packages/app/src/pages/_app.tsx +++ b/packages/app/src/pages/_app.tsx @@ -4,6 +4,7 @@ import '../../public/globals.css'; import '../../public/variable.css'; import './temporary.css'; import { EditorProvider } from '@/components/editor-provider'; +import { ModalProvider } from '@/components/global-modal-provider'; const ThemeProvider = dynamic(() => import('@/styles/themeProvider'), { ssr: false, @@ -12,9 +13,11 @@ const ThemeProvider = dynamic(() => import('@/styles/themeProvider'), { function MyApp({ Component, pageProps }: AppProps) { return ( - - - + + + + + ); } diff --git a/packages/app/src/pages/_document.tsx b/packages/app/src/pages/_document.tsx index 7bc23a3892..d84f7f8604 100644 --- a/packages/app/src/pages/_document.tsx +++ b/packages/app/src/pages/_document.tsx @@ -42,7 +42,12 @@ export default class AppDocument extends Document { render() { return ( - + + +
diff --git a/packages/app/src/pages/index.tsx b/packages/app/src/pages/index.tsx index 5089d75b1b..f098b3c4f7 100644 --- a/packages/app/src/pages/index.tsx +++ b/packages/app/src/pages/index.tsx @@ -34,30 +34,6 @@ const Home: NextPage = () => { - {/**/} - {/**/} - {/*

current mode {mode}

*/} - {/* {*/} - {/* changeMode('light');*/} - {/* }}*/} - {/*>*/} - {/* light*/} - {/**/} - {/* {*/} - {/* changeMode('dark');*/} - {/* }}*/} - {/*>*/} - {/* dark*/} - {/**/} - {/* {*/} - {/* changeMode('auto');*/} - {/* }}*/} - {/*>*/} - {/* auto*/} - {/**/} ); diff --git a/packages/app/src/pages/temporary.css b/packages/app/src/pages/temporary.css index de63ef2492..aed5f0bb6b 100644 --- a/packages/app/src/pages/temporary.css +++ b/packages/app/src/pages/temporary.css @@ -1,44 +1,7 @@ debug-menu { display: none !important; } -/*.affine-editor-container {*/ -/* height: 100%;*/ -/* padding: 0 !important;*/ -/*}*/ -/*.affine-default-page-block-container {*/ -/* width: 720px;*/ -/* height: 100%;*/ -/* margin: 0 auto;*/ -/*}*/ +.affine-block-children-container.edgeless { + background-color: #fff; +} -/*u {*/ -/* text-decoration: none;*/ -/* border-bottom: 1px solid #4c6275 !important;*/ -/*}*/ -/*u::after {*/ -/* display: none;*/ -/*}*/ - -/*.affine-paragraph-block-container.text {*/ -/* margin-top: 18px !important;*/ -/*}*/ - -/*.affine-default-page-block-title {*/ -/* width: 100%;*/ -/*}*/ -/*s {*/ -/* text-decoration: line-through !important;*/ -/*}*/ - -/*.affine-edgeless-page-block-container {*/ -/* height: 100% !important;*/ -/*}*/ -/*.affine-block-children-container.edgeless {*/ -/* height: 100% !important;*/ -/*}*/ -/*.affine-list-rich-text-wrapper > div {*/ -/* box-sizing: content-box;*/ -/* color: var(--affine-highlight-color);*/ -/* min-width: unset !important;*/ -/* max-width: 26px;*/ -/*}*/ diff --git a/packages/app/src/styles/theme.ts b/packages/app/src/styles/theme.ts index 0d7aaadb79..acf8685e34 100644 --- a/packages/app/src/styles/theme.ts +++ b/packages/app/src/styles/theme.ts @@ -29,7 +29,7 @@ export const lightTheme: AffineTheme = { sm: '16px', base: '18px', family: `Avenir Next, ${basicFontFamily}`, - family2: `Roboto Mono, ${basicFontFamily}`, + family2: `Roboto, ${basicFontFamily}`, }, zIndex: { modal: 1000, @@ -55,8 +55,8 @@ export const darkTheme: AffineTheme = { textColor: '#fff', iconColor: '#9096A5', - linkColor: '#6880FF', - linkColor2: '#7D91FF', + linkColor: '#7D91FF', + linkColor2: '#6880FF', linkVisitedColor: '#505FAB', popoverColor: '#A9B1C6', codeColor: '#BDDBFD',