@dxos/plugin-presenter 0.8.0 → 0.8.1-main.81238a8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{PresenterMain-7JXM3QQ7.mjs → PresenterMain-PQPWYIWU.mjs} +3 -3
- package/dist/lib/browser/{RevealMain-WPCHJETF.mjs → RevealMain-B2PJXHND.mjs} +23 -12
- package/dist/lib/browser/RevealMain-B2PJXHND.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-6U7WTJKG.mjs → app-graph-builder-CWMMBJTB.mjs} +5 -4
- package/dist/lib/browser/app-graph-builder-CWMMBJTB.mjs.map +7 -0
- package/dist/lib/browser/{chunk-G3Z6NWTR.mjs → chunk-3VVM67QE.mjs} +6 -6
- package/dist/lib/browser/{chunk-G3Z6NWTR.mjs.map → chunk-3VVM67QE.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-SFMK6EE3.mjs → chunk-CQR4O6KC.mjs} +2 -2
- package/dist/lib/browser/{chunk-MSAMS5TA.mjs → chunk-FK2KJZ73.mjs} +2 -2
- package/dist/lib/browser/{chunk-Q5U3VOZB.mjs → chunk-S2S5RFJ4.mjs} +1 -1
- package/dist/lib/browser/chunk-S2S5RFJ4.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +8 -8
- package/dist/lib/browser/{intent-resolver-27OZKSSE.mjs → intent-resolver-TTGJCKQ5.mjs} +4 -4
- package/dist/lib/browser/{intent-resolver-27OZKSSE.mjs.map → intent-resolver-TTGJCKQ5.mjs.map} +2 -2
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-BKJWX4FK.mjs → react-surface-6ZX6LL3N.mjs} +9 -8
- package/dist/lib/browser/react-surface-6ZX6LL3N.mjs.map +7 -0
- package/dist/lib/browser/{settings-L73ZKGLV.mjs → settings-RBF22MVS.mjs} +3 -3
- package/dist/lib/browser/{state-IGJRHRIA.mjs → state-KI7F4I6V.mjs} +3 -3
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/Markdown/Container.d.ts +2 -2
- package/dist/types/src/components/Markdown/Container.d.ts.map +1 -1
- package/dist/types/src/components/Markdown/Slide.d.ts +2 -1
- package/dist/types/src/components/Markdown/Slide.d.ts.map +1 -1
- package/dist/types/src/components/Presenter/Layout.d.ts +2 -2
- package/dist/types/src/components/Presenter/Layout.d.ts.map +1 -1
- package/dist/types/src/components/Presenter/Pager.d.ts +3 -3
- package/dist/types/src/components/Presenter/Pager.d.ts.map +1 -1
- package/dist/types/src/components/PresenterSettings.d.ts +2 -1
- package/dist/types/src/components/PresenterSettings.d.ts.map +1 -1
- package/dist/types/src/components/RevealPlayer/RevealPlayer.d.ts +13 -0
- package/dist/types/src/components/RevealPlayer/RevealPlayer.d.ts.map +1 -0
- package/dist/types/src/components/RevealPlayer/RevealPlayer.stories.d.ts +8 -0
- package/dist/types/src/components/RevealPlayer/RevealPlayer.stories.d.ts.map +1 -0
- package/dist/types/src/components/RevealPlayer/index.d.ts +2 -0
- package/dist/types/src/components/RevealPlayer/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +3 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -7
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +32 -2
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +21 -21
- package/src/capabilities/app-graph-builder.ts +3 -2
- package/src/capabilities/intent-resolver.ts +0 -1
- package/src/capabilities/react-surface.tsx +4 -3
- package/src/components/RevealMain.tsx +1 -1
- package/src/components/RevealPlayer/RevealPlayer.stories.tsx +39 -0
- package/src/components/{Reveal/Reveal.tsx → RevealPlayer/RevealPlayer.tsx} +42 -26
- package/src/components/{Reveal → RevealPlayer}/index.ts +1 -1
- package/src/components/index.ts +1 -1
- package/src/meta.ts +2 -2
- package/src/vite-env.d.ts +20 -0
- package/dist/lib/browser/RevealMain-WPCHJETF.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-6U7WTJKG.mjs.map +0 -7
- package/dist/lib/browser/chunk-Q5U3VOZB.mjs.map +0 -7
- package/dist/lib/browser/react-surface-BKJWX4FK.mjs.map +0 -7
- package/dist/types/src/components/Reveal/Reveal.d.ts +0 -10
- package/dist/types/src/components/Reveal/Reveal.d.ts.map +0 -1
- package/dist/types/src/components/Reveal/index.d.ts +0 -2
- package/dist/types/src/components/Reveal/index.d.ts.map +0 -1
- package/dist/types/src/components/Reveal.stories.d.ts +0 -6
- package/dist/types/src/components/Reveal.stories.d.ts.map +0 -1
- package/src/components/Reveal.stories.tsx +0 -36
- /package/dist/lib/browser/{PresenterMain-7JXM3QQ7.mjs.map → PresenterMain-PQPWYIWU.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-SFMK6EE3.mjs.map → chunk-CQR4O6KC.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-MSAMS5TA.mjs.map → chunk-FK2KJZ73.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-L73ZKGLV.mjs.map → settings-RBF22MVS.mjs.map} +0 -0
- /package/dist/lib/browser/{state-IGJRHRIA.mjs.map → state-KI7F4I6V.mjs.map} +0 -0
|
@@ -17,13 +17,15 @@ import React, { useEffect, useRef } from 'react';
|
|
|
17
17
|
import Reveal from 'reveal.js';
|
|
18
18
|
import RevealHighlight from 'reveal.js/plugin/highlight/highlight';
|
|
19
19
|
import RevealMarkdown from 'reveal.js/plugin/markdown/plugin.js';
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
import { type ThemedClassName } from '@dxos/react-ui';
|
|
22
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
21
23
|
|
|
22
24
|
const styles = `
|
|
23
25
|
<style type="text/css">
|
|
24
26
|
.reveal h1 {
|
|
25
27
|
font-weight: 100;
|
|
26
|
-
|
|
28
|
+
font-size: 60px;
|
|
27
29
|
opacity: 0.5;
|
|
28
30
|
}
|
|
29
31
|
.reveal h2 {
|
|
@@ -48,21 +50,26 @@ const styles = `
|
|
|
48
50
|
font-weight: 100;
|
|
49
51
|
padding: 32px;
|
|
50
52
|
}
|
|
53
|
+
.reveal pre {
|
|
54
|
+
margin-left: 0;
|
|
55
|
+
}
|
|
51
56
|
.reveal code {
|
|
57
|
+
font-size: 20px;
|
|
52
58
|
background: #111111;
|
|
53
59
|
color: #eeeeee;
|
|
60
|
+
max-height: unset !important;
|
|
54
61
|
}
|
|
55
62
|
</style>
|
|
56
63
|
`;
|
|
57
64
|
|
|
58
|
-
export type RevealProps = {
|
|
65
|
+
export type RevealProps = ThemedClassName<{
|
|
59
66
|
content: string;
|
|
60
67
|
slide?: number;
|
|
68
|
+
fullscreen?: boolean;
|
|
61
69
|
onExit?: () => void;
|
|
62
|
-
}
|
|
70
|
+
}>;
|
|
63
71
|
|
|
64
|
-
|
|
65
|
-
export const RevealPlayer = ({ content, slide, onExit }: RevealProps) => {
|
|
72
|
+
export const RevealPlayer = ({ classNames, content, slide, fullscreen = true, onExit }: RevealProps) => {
|
|
66
73
|
const deckDivRef = useRef<HTMLDivElement>(null);
|
|
67
74
|
const deckRef = useRef<Reveal.Api | null>(null);
|
|
68
75
|
useEffect(() => {
|
|
@@ -70,9 +77,11 @@ export const RevealPlayer = ({ content, slide, onExit }: RevealProps) => {
|
|
|
70
77
|
return;
|
|
71
78
|
}
|
|
72
79
|
|
|
80
|
+
// Required for syntax highlighting.
|
|
73
81
|
hljs.registerLanguage('typescript', typescript);
|
|
74
82
|
|
|
75
83
|
const t = setTimeout(async () => {
|
|
84
|
+
// https://revealjs.com/react
|
|
76
85
|
// https://revealjs.com/config
|
|
77
86
|
// https://github.com/hakimel/reveal.js
|
|
78
87
|
// TODO(burdon): Fragments and scroll view steps 2 at a time (safe mode?)
|
|
@@ -82,13 +91,17 @@ export const RevealPlayer = ({ content, slide, onExit }: RevealProps) => {
|
|
|
82
91
|
transition: 'none',
|
|
83
92
|
slideNumber: false,
|
|
84
93
|
embedded: true,
|
|
94
|
+
|
|
95
|
+
// TODO(burdon): Speaker view requires server to serve popout window.
|
|
85
96
|
// https://revealjs.com/speaker-view
|
|
86
97
|
showNotes: false,
|
|
87
98
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
99
|
+
// width: 1600,
|
|
100
|
+
// height: 900,
|
|
101
|
+
margin: 0.1,
|
|
102
|
+
// center: false,
|
|
103
|
+
// minScale: 0.1,
|
|
104
|
+
// maxScale: 1.4,
|
|
92
105
|
|
|
93
106
|
// https://revealjs.com/markdown
|
|
94
107
|
// TODO(burdon): Requires server to serve popout window.
|
|
@@ -109,6 +122,7 @@ export const RevealPlayer = ({ content, slide, onExit }: RevealProps) => {
|
|
|
109
122
|
});
|
|
110
123
|
|
|
111
124
|
await deckRef.current.initialize();
|
|
125
|
+
|
|
112
126
|
if (slide !== undefined) {
|
|
113
127
|
deckRef.current.slide(slide < 0 ? deckRef.current?.getTotalSlides() + slide : slide - 1);
|
|
114
128
|
}
|
|
@@ -132,22 +146,24 @@ export const RevealPlayer = ({ content, slide, onExit }: RevealProps) => {
|
|
|
132
146
|
});
|
|
133
147
|
|
|
134
148
|
return (
|
|
135
|
-
<div className='absolute
|
|
136
|
-
<div
|
|
137
|
-
{
|
|
138
|
-
|
|
139
|
-
<
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
<div className='
|
|
148
|
-
|
|
149
|
-
<
|
|
150
|
-
|
|
149
|
+
<div className={mx('absolute flex h-full w-full items-center justify-center', fullscreen && 'inset-0', classNames)}>
|
|
150
|
+
<div className='relative aspect-video w-full'>
|
|
151
|
+
<div ref={deckDivRef} className='reveal'>
|
|
152
|
+
{/* TODO(burdon): Must be in head. */}
|
|
153
|
+
<style>
|
|
154
|
+
<link rel='preconnect' href='https://fonts.googleapis.com' />
|
|
155
|
+
<link rel='preconnect' href='https://fonts.gstatic.com' {...{ crossOrigin: '' }} />
|
|
156
|
+
<link
|
|
157
|
+
rel='stylesheet'
|
|
158
|
+
href='https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100..900;1,100..900&display=swap'
|
|
159
|
+
/>
|
|
160
|
+
</style>
|
|
161
|
+
<div className='slides'>
|
|
162
|
+
<div className='!text-center' />
|
|
163
|
+
<section {...{ 'data-markdown': [] }}>
|
|
164
|
+
<textarea {...{ 'data-template': true }} defaultValue={[styles, content].join('\n')}></textarea>
|
|
165
|
+
</section>
|
|
166
|
+
</div>
|
|
151
167
|
</div>
|
|
152
168
|
</div>
|
|
153
169
|
</div>
|
package/src/components/index.ts
CHANGED
|
@@ -6,6 +6,6 @@ import { lazy } from 'react';
|
|
|
6
6
|
|
|
7
7
|
export * from './PresenterSettings';
|
|
8
8
|
|
|
9
|
+
export const MarkdownSlide = lazy(() => import('./MarkdownSlide'));
|
|
9
10
|
export const RevealMain = lazy(() => import('./RevealMain'));
|
|
10
11
|
export const PresenterMain = lazy(() => import('./PresenterMain'));
|
|
11
|
-
export const MarkdownSlide = lazy(() => import('./MarkdownSlide'));
|
package/src/meta.ts
CHANGED
|
@@ -6,10 +6,10 @@ import { type PluginMeta } from '@dxos/app-framework';
|
|
|
6
6
|
|
|
7
7
|
export const PRESENTER_PLUGIN = 'dxos.org/plugin/presenter';
|
|
8
8
|
|
|
9
|
-
export const meta = {
|
|
9
|
+
export const meta: PluginMeta = {
|
|
10
10
|
id: PRESENTER_PLUGIN,
|
|
11
11
|
name: 'Presenter',
|
|
12
12
|
description: 'Present documents as slideshows.',
|
|
13
13
|
icon: 'ph--presentation--regular',
|
|
14
14
|
source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-presenter',
|
|
15
|
-
}
|
|
15
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
2
|
+
|
|
3
|
+
//
|
|
4
|
+
// Copyright 2025 DXOS.org
|
|
5
|
+
//
|
|
6
|
+
|
|
7
|
+
declare module '*.txt?raw' {
|
|
8
|
+
const content: string;
|
|
9
|
+
export default content;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare module '*.md?raw' {
|
|
13
|
+
const content: string;
|
|
14
|
+
export default content;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
declare module '*?raw' {
|
|
18
|
+
const content: string;
|
|
19
|
+
export default content;
|
|
20
|
+
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/RevealMain.tsx", "../../../src/components/Reveal/Reveal.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { createIntent, useLayout, useIntentDispatcher } from '@dxos/app-framework';\nimport { type DocumentType } from '@dxos/plugin-markdown/types';\nimport { Main } from '@dxos/react-ui';\nimport { topbarBlockPaddingStart, fixedInsetFlexLayout, bottombarBlockPaddingEnd } from '@dxos/react-ui-theme';\n\nimport { RevealPlayer } from './Reveal';\nimport { PresenterAction } from '../types';\n\nconst PresenterMain: FC<{ document: DocumentType }> = ({ document }) => {\n const layout = useLayout();\n const fullscreen = layout.mode === 'fullscreen';\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return (\n <Main.Content\n classNames={[\n fixedInsetFlexLayout,\n !fullscreen && topbarBlockPaddingStart,\n !fullscreen && bottombarBlockPaddingEnd,\n ]}\n >\n <RevealPlayer\n content={document.content.target?.content ?? ''}\n onExit={() => {\n void dispatch(createIntent(PresenterAction.TogglePresentation, { object: document, state: false }));\n }}\n />\n </Main.Content>\n );\n};\n\nexport default PresenterMain;\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// eslint-disable-next-line no-restricted-imports\nimport 'reveal.js/dist/reveal.css';\n// eslint-disable-next-line no-restricted-imports\nimport 'reveal.js/dist/theme/black.css';\n\n// https://github.com/highlightjs/highlight.js/tree/main/src/styles\n// import 'highlight.js/styles/github-dark.css';\nimport 'highlight.js/styles/tokyo-night-dark.css';\n\nimport hljs from 'highlight.js';\nimport typescript from 'highlight.js/lib/languages/typescript';\nimport React, { useEffect, useRef } from 'react';\nimport Reveal from 'reveal.js';\nimport RevealHighlight from 'reveal.js/plugin/highlight/highlight';\nimport RevealMarkdown from 'reveal.js/plugin/markdown/plugin.js';\n// import Notes from 'reveal.js/plugin/notes/notes.js';\n\nconst styles = `\n<style type=\"text/css\">\n .reveal h1 {\n font-weight: 100;\n padding-left: 36px;\n opacity: 0.5;\n }\n .reveal h2 {\n font-weight: 100;\n padding-top: 60px;\n padding-left: 40px;\n font-size: 48px;\n opacity: 0.3;\n }\n .reveal h1, h2, p {\n font-family: \"Raleway\", sans-serif;\n text-align: left;\n font-weight: 200;\n }\n .reveal ul {\n font-family: \"Raleway\", sans-serif;\n display: block;\n list-style: \"- \";\n }\n .reveal blockquote p {\n text-align: center;\n font-weight: 100;\n padding: 32px;\n }\n .reveal code {\n background: #111111;\n color: #eeeeee;\n }\n</style>\n`;\n\nexport type RevealProps = {\n content: string;\n slide?: number;\n onExit?: () => void;\n};\n\n// https://revealjs.com/react\nexport const RevealPlayer = ({ content, slide, onExit }: RevealProps) => {\n const deckDivRef = useRef<HTMLDivElement>(null);\n const deckRef = useRef<Reveal.Api | null>(null);\n useEffect(() => {\n if (deckRef.current) {\n return;\n }\n\n hljs.registerLanguage('typescript', typescript);\n\n const t = setTimeout(async () => {\n // https://revealjs.com/config\n // https://github.com/hakimel/reveal.js\n // TODO(burdon): Fragments and scroll view steps 2 at a time (safe mode?)\n deckRef.current = new Reveal(deckDivRef.current!, {\n // view: 'scroll',\n progress: false,\n transition: 'none',\n slideNumber: false,\n embedded: true,\n // https://revealjs.com/speaker-view\n showNotes: false,\n\n center: true,\n margin: 0.01,\n minScale: 0.2,\n maxScale: 1.4,\n\n // https://revealjs.com/markdown\n // TODO(burdon): Requires server to serve popout window.\n plugins: [RevealMarkdown, RevealHighlight],\n\n // See https://marked.js.org/using_advanced#options\n markdown: {\n gfm: true,\n smartypants: true,\n highlight: (code, language) => {\n if (language) {\n return hljs.highlight(code, { language }).value;\n }\n\n return hljs.highlightAuto(code).value;\n },\n },\n });\n\n await deckRef.current.initialize();\n if (slide !== undefined) {\n deckRef.current.slide(slide < 0 ? deckRef.current?.getTotalSlides() + slide : slide - 1);\n }\n\n deckRef.current.addKeyBinding({ keyCode: 27, key: 'Escape', description: 'Exit full screen' }, () => {\n onExit?.();\n });\n });\n\n return () => {\n try {\n clearTimeout(t);\n if (deckRef.current) {\n deckRef.current.destroy();\n deckRef.current = null;\n }\n } catch (err) {\n // Ignore.\n }\n };\n });\n\n return (\n <div className='absolute inset-0 h-full'>\n <div ref={deckDivRef} className='reveal'>\n {/* TODO(burdon): Must be in head. */}\n <style>\n <link rel='preconnect' href='https://fonts.googleapis.com' />\n <link rel='preconnect' href='https://fonts.gstatic.com' {...{ crossOrigin: '' }} />\n <link\n rel='stylesheet'\n href='https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100..900;1,100..900&display=swap'\n />\n </style>\n <div className='slides'>\n <div className='!text-center' />\n <section {...{ 'data-markdown': [] }}>\n <textarea {...{ 'data-template': true }} defaultValue={[styles, content].join('\\n')}></textarea>\n </section>\n </div>\n </div>\n </div>\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "createIntent", "useLayout", "useIntentDispatcher", "Main", "topbarBlockPaddingStart", "fixedInsetFlexLayout", "bottombarBlockPaddingEnd", "hljs", "typescript", "React", "useEffect", "useRef", "Reveal", "RevealHighlight", "RevealMarkdown", "styles", "RevealPlayer", "content", "slide", "onExit", "deckDivRef", "useRef", "deckRef", "useEffect", "current", "hljs", "registerLanguage", "typescript", "t", "setTimeout", "Reveal", "progress", "transition", "slideNumber", "embedded", "showNotes", "center", "margin", "minScale", "maxScale", "plugins", "RevealMarkdown", "RevealHighlight", "markdown", "gfm", "smartypants", "highlight", "code", "language", "value", "highlightAuto", "initialize", "undefined", "getTotalSlides", "addKeyBinding", "keyCode", "key", "description", "clearTimeout", "destroy", "err", "div", "className", "ref", "style", "link", "rel", "href", "crossOrigin", "section", "textarea", "defaultValue", "join", "PresenterMain", "document", "layout", "useLayout", "fullscreen", "mode", "dispatchPromise", "dispatch", "useIntentDispatcher", "React", "Main", "Content", "classNames", "fixedInsetFlexLayout", "topbarBlockPaddingStart", "bottombarBlockPaddingEnd", "RevealPlayer", "content", "target", "onExit", "createIntent", "PresenterAction", "TogglePresentation", "object", "state"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/app-graph-builder.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, type PluginsContext, Capabilities, createIntent } from '@dxos/app-framework';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { CollectionType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\n\nimport { PRESENTER_PLUGIN } from '../meta';\nimport { PresenterAction, type PresenterSettingsProps } from '../types';\n\nexport default (context: PluginsContext) =>\n contributes(\n Capabilities.AppGraphBuilder,\n createExtension({\n id: PRESENTER_PLUGIN,\n filter: (node): node is Node<CollectionType | DocumentType> => {\n const settings = context\n .requestCapabilities(Capabilities.SettingsStore)[0]\n ?.getStore<PresenterSettingsProps>(PRESENTER_PLUGIN)?.value;\n return settings?.presentCollections\n ? node.data instanceof CollectionType || node.data instanceof DocumentType\n : node.data instanceof DocumentType;\n },\n actions: ({ node }) => {\n const object = node.data;\n const id = fullyQualifiedId(object);\n return [\n {\n id: `${PresenterAction.TogglePresentation._tag}/${id}`,\n // TODO(burdon): Allow function so can generate state when activated.\n // So can set explicit fullscreen state coordinated with current presenter state.\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(PresenterAction.TogglePresentation, { object }));\n },\n properties: {\n label: ['toggle presentation label', { ns: PRESENTER_PLUGIN }],\n icon: 'ph--presentation--regular',\n keyBinding: {\n macos: 'shift+meta+p',\n windows: 'shift+alt+p',\n },\n },\n },\n ];\n },\n }),\n );\n"],
|
|
5
|
-
"mappings": ";;;;;;;;AAIA,SAASA,aAAkCC,cAAcC,oBAAoB;AAC7E,SAASC,uBAAkC;AAC3C,SAASC,oBAAoB;AAC7B,SAASC,sBAAsB;AAC/B,SAASC,wBAAwB;AAKjC,IAAA,4BAAe,CAACC,YACdC,YACEC,aAAaC,iBACbC,gBAAgB;EACdC,IAAIC;EACJC,QAAQ,CAACC,SAAAA;AACP,UAAMC,WAAWT,QACdU,oBAAoBR,aAAaS,aAAa,EAAE,CAAA,GAC/CC,SAAiCN,gBAAAA,GAAmBO;AACxD,WAAOJ,UAAUK,qBACbN,KAAKO,gBAAgBC,kBAAkBR,KAAKO,gBAAgBE,eAC5DT,KAAKO,gBAAgBE;EAC3B;EACAC,SAAS,CAAC,EAAEV,KAAI,MAAE;AAChB,UAAMW,SAASX,KAAKO;AACpB,UAAMV,KAAKe,iBAAiBD,MAAAA;AAC5B,WAAO;MACL;QACEd,IAAI,GAAGgB,gBAAgBC,mBAAmBC,IAAI,IAAIlB,EAAAA;;;QAGlDU,MAAM,YAAA;AACJ,gBAAM,EAAES,iBAAiBC,SAAQ,IAAKzB,QAAQ0B,kBAAkBxB,aAAayB,gBAAgB;AAC7F,gBAAMF,SAASG,aAAaP,gBAAgBC,oBAAoB;YAAEH;UAAO,CAAA,CAAA;QAC3E;QACAU,YAAY;UACVC,OAAO;YAAC;YAA6B;cAAEC,IAAIzB;YAAiB;;UAC5D0B,MAAM;UACNC,YAAY;YACVC,OAAO;YACPC,SAAS;UACX;QACF;MACF;;EAEJ;AACF,CAAA,CAAA;",
|
|
6
|
-
"names": ["contributes", "Capabilities", "createIntent", "createExtension", "DocumentType", "CollectionType", "fullyQualifiedId", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "PRESENTER_PLUGIN", "filter", "node", "settings", "requestCapabilities", "SettingsStore", "getStore", "value", "presentCollections", "data", "CollectionType", "DocumentType", "actions", "object", "fullyQualifiedId", "PresenterAction", "TogglePresentation", "_tag", "dispatchPromise", "dispatch", "requestCapability", "IntentDispatcher", "createIntent", "properties", "label", "ns", "icon", "keyBinding", "macos", "windows"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/meta.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const PRESENTER_PLUGIN = 'dxos.org/plugin/presenter';\n\nexport const meta = {\n id: PRESENTER_PLUGIN,\n name: 'Presenter',\n description: 'Present documents as slideshows.',\n icon: 'ph--presentation--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-presenter',\n} satisfies PluginMeta;\n"],
|
|
5
|
-
"mappings": ";AAMO,IAAMA,mBAAmB;AAEzB,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
|
|
6
|
-
"names": ["PRESENTER_PLUGIN", "meta", "id", "name", "description", "icon", "source"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-surface.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface, useCapability } from '@dxos/app-framework';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { CollectionType } from '@dxos/plugin-space/types';\n\nimport { PresenterCapabilities } from './capabilities';\nimport { MarkdownSlide, PresenterSettings, PresenterMain, RevealMain } from '../components';\nimport { PRESENTER_PLUGIN } from '../meta';\nimport { PresenterContext, type PresenterSettingsProps } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${PRESENTER_PLUGIN}/document`,\n role: 'main',\n position: 'hoist',\n filter: (data): data is { subject: DocumentType } => data.subject instanceof DocumentType,\n component: ({ data }) => <RevealMain document={data.subject} />,\n }),\n createSurface({\n id: `${PRESENTER_PLUGIN}/collection`,\n role: 'main',\n position: 'hoist',\n filter: (data): data is { subject: CollectionType } => data.subject instanceof CollectionType,\n component: ({ data }) => {\n const state = useCapability(PresenterCapabilities.MutableState);\n\n return (\n <PresenterContext.Provider\n value={{\n running: state.presenting,\n start: () => (state.presenting = true),\n stop: () => (state.presenting = false),\n }}\n >\n <PresenterMain collection={data.subject} />\n </PresenterContext.Provider>\n );\n },\n }),\n createSurface({\n id: `${PRESENTER_PLUGIN}/slide`,\n role: 'slide',\n filter: (data): data is { subject: DocumentType } => data.subject instanceof DocumentType,\n component: ({ data }) => <MarkdownSlide document={data.subject} />,\n }),\n createSurface({\n id: `${PRESENTER_PLUGIN}/settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<PresenterSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === PRESENTER_PLUGIN,\n component: ({ data: { subject } }) => <PresenterSettings settings={subject.value} />,\n }),\n ]);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,eAAeC,qBAAqB;AACxE,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;AAC7B,SAASC,sBAAsB;AAO/B,IAAA,wBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNC,UAAU;IACVC,QAAQ,CAACC,SAA4CA,KAAKC,mBAAmBC;IAC7EC,WAAW,CAAC,EAAEH,KAAI,MAAO,sBAAA,cAACI,YAAAA;MAAWC,UAAUL,KAAKC;;EACtD,CAAA;EACAP,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNC,UAAU;IACVC,QAAQ,CAACC,SAA8CA,KAAKC,mBAAmBK;IAC/EH,WAAW,CAAC,EAAEH,KAAI,MAAE;AAClB,YAAMO,QAAQC,cAAcC,sBAAsBC,YAAY;AAE9D,aACE,sBAAA,cAACC,iBAAiBC,UAAQ;QACxBC,OAAO;UACLC,SAASP,MAAMQ;UACfC,OAAO,MAAOT,MAAMQ,aAAa;UACjCE,MAAM,MAAOV,MAAMQ,aAAa;QAClC;SAEA,sBAAA,cAACG,eAAAA;QAAcC,YAAYnB,KAAKC;;IAGtC;EACF,CAAA;EACAP,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNE,QAAQ,CAACC,SAA4CA,KAAKC,mBAAmBC;IAC7EC,WAAW,CAAC,EAAEH,KAAI,MAAO,sBAAA,cAACoB,eAAAA;MAAcf,UAAUL,KAAKC;;EACzD,CAAA;EACAP,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNE,QAAQ,CAACC,SACPA,KAAKC,mBAAmBoB,iBAAiBrB,KAAKC,QAAQqB,WAAW1B;IACnEO,WAAW,CAAC,EAAEH,MAAM,EAAEC,QAAO,EAAE,MAAO,sBAAA,cAACsB,mBAAAA;MAAkBC,UAAUvB,QAAQY;;EAC7E,CAAA;CACD;",
|
|
6
|
-
"names": ["React", "Capabilities", "contributes", "createSurface", "useCapability", "SettingsStore", "DocumentType", "CollectionType", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "PRESENTER_PLUGIN", "role", "position", "filter", "data", "subject", "DocumentType", "component", "RevealMain", "document", "CollectionType", "state", "useCapability", "PresenterCapabilities", "MutableState", "PresenterContext", "Provider", "value", "running", "presenting", "start", "stop", "PresenterMain", "collection", "MarkdownSlide", "SettingsStore", "prefix", "PresenterSettings", "settings"]
|
|
7
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import 'reveal.js/dist/reveal.css';
|
|
2
|
-
import 'reveal.js/dist/theme/black.css';
|
|
3
|
-
import 'highlight.js/styles/tokyo-night-dark.css';
|
|
4
|
-
export type RevealProps = {
|
|
5
|
-
content: string;
|
|
6
|
-
slide?: number;
|
|
7
|
-
onExit?: () => void;
|
|
8
|
-
};
|
|
9
|
-
export declare const RevealPlayer: ({ content, slide, onExit }: RevealProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
-
//# sourceMappingURL=Reveal.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Reveal.d.ts","sourceRoot":"","sources":["../../../../../src/components/Reveal/Reveal.tsx"],"names":[],"mappings":"AAKA,OAAO,2BAA2B,CAAC;AAEnC,OAAO,gCAAgC,CAAC;AAIxC,OAAO,0CAA0C,CAAC;AA8ClD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAGF,eAAO,MAAM,YAAY,+BAAgC,WAAW,4CA0FnE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/Reveal/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Reveal.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Reveal.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAsB7C,eAAO,MAAM,OAAO,IAAK,CAAC;AAE1B,QAAA,MAAM,IAAI,EAAE,IAGX,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2023 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
|
-
import { type Meta } from '@storybook/react';
|
|
8
|
-
import React from 'react';
|
|
9
|
-
|
|
10
|
-
// @ts-ignore
|
|
11
|
-
// eslint-disable-next-line import/order
|
|
12
|
-
import CONTENT from '../../testing/deck.md?raw';
|
|
13
|
-
|
|
14
|
-
// eslint-disable-next-line import/order
|
|
15
|
-
import { RevealPlayer } from './Reveal';
|
|
16
|
-
|
|
17
|
-
// https://revealjs.com/markdown
|
|
18
|
-
// https://developer.mozilla.org/en-US/docs/Web/CSS/background-position
|
|
19
|
-
// https://colorhunt.co/palettes/dark
|
|
20
|
-
// https://colorhunt.co/palette/ff204ea0153e5d0e4100224d
|
|
21
|
-
// https://colorhunt.co/palette/27374d526d829db2bfdde6ed
|
|
22
|
-
// https://fontsource.org/fonts
|
|
23
|
-
// https://fonts.google.com
|
|
24
|
-
|
|
25
|
-
const DefaultStory = () => {
|
|
26
|
-
return <RevealPlayer content={CONTENT} />;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const Default = {};
|
|
30
|
-
|
|
31
|
-
const meta: Meta = {
|
|
32
|
-
title: 'plugins/plugin-presenter/Reveal',
|
|
33
|
-
render: DefaultStory,
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export default meta;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|