diff --git a/.gitignore b/.gitignore index 16d803b56..fbc6e8450 100644 --- a/.gitignore +++ b/.gitignore @@ -82,3 +82,8 @@ db.sqlite3 # Cursor rules .cursorrules + +# Claude +CLAUDE.md +.claude/ +openspec/ diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx b/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx index ad781879c..a827ebad8 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx @@ -7,6 +7,7 @@ import { useTranslation } from 'react-i18next'; import { css } from 'styled-components'; import AddLinkSVG from '@/assets/icons/ui-kit/add_link.svg'; +import CoPresentSVG from '@/assets/icons/ui-kit/co_present.svg'; import ContentCopySVG from '@/assets/icons/ui-kit/content_copy.svg'; import DeleteSVG from '@/assets/icons/ui-kit/delete.svg'; import DownloadSVG from '@/assets/icons/ui-kit/download.svg'; @@ -79,6 +80,14 @@ const ModalExport = ) : null; +const PresenterOverlay = dynamic( + () => + import('@/docs/doc-presenter').then((mod) => ({ + default: mod.PresenterOverlay, + })), + { ssr: false }, +); + interface DocToolBoxProps { doc: Doc; } @@ -93,6 +102,7 @@ export const DocToolBox = ({ doc }: DocToolBoxProps) => { const [isModalRemoveOpen, setIsModalRemoveOpen] = useState(false); const [isModalExportOpen, setIsModalExportOpen] = useState(false); + const [isPresenterOpen, setIsPresenterOpen] = useState(false); const selectHistoryModal = useModal(); const modalShare = useModal(); @@ -176,6 +186,15 @@ export const DocToolBox = ({ doc }: DocToolBoxProps) => { showSeparator: true, show: !emoji && doc.abilities.partial_update && !isTopRoot, }, + { + label: t('Present'), + icon: