パッケージ概要
@growi/presentation
- スライドを出力するコンポーネント または プレゼンテーション表示コンポーネントを提供する
@growi/app
- @growi/presentation が提供するコンポーネントをモーダル表示させるコンポーネントを実装している
スライドの出力
コンポーネント概要
@growi/presentation
の Slides コンポーネント
- markdown をインプットとして、複数の
<section>
をレンダリングする - 通常モード
- react-markdown (remark/rehype) を使ってレンダリングを行う
- lsx や katex, drawio など、全ての機能をスライド化できる
- スタイルのみ Marp 出力の css を適用している
- GROWI 本体の light/dark mode に合わせてスタイル (
invert
クラスの付与) を自動で変更する
- react-markdown (remark/rehype) を使ってレンダリングを行う
- (TBD) Marp モード -- 2023.02.13 時点では未実装
- HTML 出力にも本物の Marp を使う
- markdown-it で処理される
- HTML 出力にも本物の Marp を使う
ページ分割について
- 通常モードでは区切り線文字列(
thematicBreak
type)で区切って section タグでラップする extract-sections.ts を自前実装している - (TBD) Marp モードでは Marp に処理が委譲される
プレゼンテーションの出力
@growi/presentation
の Presentation コンポーネント
- markdown をインプットとして、reveal.js で制御されたコンポーネントをレンダリングする
- 前提として reveal.js は
.reveal > .slides > section
という構造の DOM を要求するので、
section エレメント群を Slides で出力し、Presentation はそれを.reveal > .slides
でラップする
- 前提として reveal.js は
アニメーションについて
完全ではない
- reveal.js で初期化すると section に必ず
[hidden]
が付いてしまうが、これのせいで bootstrap がdisplay: none !important
を適用してしまう - ワークアラウンドとして、ready, slidechanged イベントが発火する度に hidden attribute を消して回っている
- しかし
section.past
のアニメーションを再生できない問題は解決できていない
- しかし
スタイルについて
一部、reveal.js によるスタイルが適用されてしまうため、それをキャンセルし Marp のデフォルトテーマに馴染むようなスタイルをあてている
プレゼンテーションの起動
@growi/app
の PagePresentationModal 参照