diff --git a/apps/web/src/components/pure/contact-modal/affine-text-logo.png b/apps/web/public/imgs/affine-text-logo.png similarity index 100% rename from apps/web/src/components/pure/contact-modal/affine-text-logo.png rename to apps/web/public/imgs/affine-text-logo.png diff --git a/apps/web/src/components/pure/help-island/index.tsx b/apps/web/src/components/pure/help-island/index.tsx index 31fa9c04a..9d0138e89 100644 --- a/apps/web/src/components/pure/help-island/index.tsx +++ b/apps/web/src/components/pure/help-island/index.tsx @@ -1,10 +1,9 @@ -import { Tooltip } from '@affine/component'; -import { MuiFade } from '@affine/component'; +import { MuiFade, Tooltip } from '@affine/component'; import { useTranslation } from '@affine/i18n'; import { CloseIcon } from '@blocksuite/icons'; +import dynamic from 'next/dynamic'; import { useState } from 'react'; -import ContactModal from '../contact-modal'; import { ShortcutsModal } from '../shortcuts-modal'; import { ContactIcon, HelpIcon, KeyboardIcon } from './Icons'; import { @@ -13,6 +12,17 @@ import { StyledIsland, StyledTriggerWrapper, } from './style'; + +const ContactModal = dynamic( + () => + import('@affine/component/contact-modal').then(({ ContactModal }) => ({ + default: ContactModal, + })), + { + ssr: true, + } +); + export type IslandItemNames = 'contact' | 'shortcuts'; export const HelpIsland = ({ showList = ['contact', 'shortcuts'], @@ -93,7 +103,11 @@ export const HelpIsland = ({ - setOpen(false)} /> + setOpen(false)} + logoSrc="/imgs/affine-text-logo.png" + /> setOpenShortCut(false)} diff --git a/packages/component/.storybook/preview.tsx b/packages/component/.storybook/preview.tsx index 2e1eeda73..a4faddf28 100644 --- a/packages/component/.storybook/preview.tsx +++ b/packages/component/.storybook/preview.tsx @@ -1,7 +1,7 @@ import React from 'react'; import '@blocksuite/editor/themes/affine.css'; -import { getDarkTheme, getLightTheme, ThemeProvider } from '../src'; +import { getDarkTheme, getLightTheme, ThemeProvider } from '@affine/component'; import { useDarkMode } from 'storybook-dark-mode-v7'; export const parameters = { actions: { argTypesRegex: '^on[A-Z].*' }, diff --git a/packages/component/.storybook/vite.config.ts b/packages/component/.storybook/vite.config.ts index 2cfe709ed..beeb26b38 100644 --- a/packages/component/.storybook/vite.config.ts +++ b/packages/component/.storybook/vite.config.ts @@ -18,6 +18,9 @@ const config: Pick = { resolve: { alias: { '@': resolve(fileURLToPath(new URL('../src', import.meta.url))), + '@affine/component': resolve( + fileURLToPath(new URL('../src/index.ts', import.meta.url)) + ), '@affine/i18n': resolve( fileURLToPath(new URL('../../i18n/src', import.meta.url)) ), diff --git a/packages/component/package.json b/packages/component/package.json index 73010ce7c..fa87d2d9c 100644 --- a/packages/component/package.json +++ b/packages/component/package.json @@ -10,7 +10,7 @@ }, "exports": { ".": "./src/index.ts", - "./block-suite-editor": "./src/components/block-suite-editor/index.tsx" + "./*": "./src/components/*/index.tsx" }, "dependencies": { "@affine/debug": "workspace:*", diff --git a/apps/web/src/components/pure/contact-modal/Icons.tsx b/packages/component/src/components/contact-modal/Icons.tsx similarity index 100% rename from apps/web/src/components/pure/contact-modal/Icons.tsx rename to packages/component/src/components/contact-modal/Icons.tsx diff --git a/apps/web/src/components/pure/contact-modal/index.tsx b/packages/component/src/components/contact-modal/index.tsx similarity index 89% rename from apps/web/src/components/pure/contact-modal/index.tsx rename to packages/component/src/components/contact-modal/index.tsx index 18ec1fa64..3f2386f5b 100644 --- a/apps/web/src/components/pure/contact-modal/index.tsx +++ b/packages/component/src/components/contact-modal/index.tsx @@ -6,7 +6,6 @@ import { } from '@affine/component'; import { useTranslation } from '@affine/i18n'; -import logo from './affine-text-logo.png'; import { DiscordIcon, DocIcon, @@ -54,15 +53,17 @@ const linkList = [ }, ]; -type TransitionsModalProps = { +export type ContactModalProps = { open: boolean; onClose: () => void; + logoSrc: string; }; export const ContactModal = ({ open, onClose, -}: TransitionsModalProps): JSX.Element => { + logoSrc, +}: ContactModalProps): JSX.Element => { const { t } = useTranslation(); const topLinkList = [ { @@ -84,7 +85,7 @@ export const ContactModal = ({ - + { @@ -124,10 +125,14 @@ export const ContactModal = ({

Copyright © {year} Toeverything

- + Terms - + Privacy @@ -136,5 +141,3 @@ export const ContactModal = ({
); }; - -export default ContactModal; diff --git a/apps/web/src/components/pure/contact-modal/style.ts b/packages/component/src/components/contact-modal/style.ts similarity index 100% rename from apps/web/src/components/pure/contact-modal/style.ts rename to packages/component/src/components/contact-modal/style.ts diff --git a/packages/component/src/stories/ContactModal.stories.tsx b/packages/component/src/stories/ContactModal.stories.tsx new file mode 100644 index 000000000..97d7440de --- /dev/null +++ b/packages/component/src/stories/ContactModal.stories.tsx @@ -0,0 +1,36 @@ +import { Button } from '@affine/component'; +import type { StoryFn } from '@storybook/react'; +import { useState } from 'react'; + +import type { ContactModalProps } from '../components/contact-modal'; +import { ContactModal } from '../components/contact-modal'; + +export default { + title: 'AFFiNE/ContactModal', + component: ContactModal, +}; + +export const Basic: StoryFn = args => { + const [open, setOpen] = useState(false); + return ( + <> + + { + setOpen(false); + }} + /> + + ); +}; +Basic.args = { + logoSrc: '/imgs/affine-text-logo.png', +}; diff --git a/packages/component/tsconfig.json b/packages/component/tsconfig.json index 8a3dc3787..f95ca73cf 100644 --- a/packages/component/tsconfig.json +++ b/packages/component/tsconfig.json @@ -1,4 +1,9 @@ { "extends": "../../tsconfig.json", - "include": ["./src", "./.storybook/*.ts"] + "include": ["./src", "./.storybook/*.ts"], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] } diff --git a/packages/component/tsconfig.node.json b/packages/component/tsconfig.node.json new file mode 100644 index 000000000..ad6c38576 --- /dev/null +++ b/packages/component/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "jsx": "react-jsx", + "moduleResolution": "Node", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true + }, + "include": [".storybook/**/*"] +} diff --git a/tsconfig.json b/tsconfig.json index e5b1af533..83c1964aa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,9 +18,7 @@ "baseUrl": ".", "paths": { "@affine/component": ["./packages/component/src/index"], - "@affine/component/block-suite-editor": [ - "./packages/component/src/components/block-suite-editor/index" - ], + "@affine/component/*": ["./packages/component/src/components/*/index"], "@affine/templates/*": ["./packages/templates/src/*"], "@affine/i18n": ["./packages/i18n/src"], "@affine/debug": ["./packages/debug"],