@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.
Files changed (72) hide show
  1. package/dist/lib/browser/{PresenterMain-7JXM3QQ7.mjs → PresenterMain-PQPWYIWU.mjs} +3 -3
  2. package/dist/lib/browser/{RevealMain-WPCHJETF.mjs → RevealMain-B2PJXHND.mjs} +23 -12
  3. package/dist/lib/browser/RevealMain-B2PJXHND.mjs.map +7 -0
  4. package/dist/lib/browser/{app-graph-builder-6U7WTJKG.mjs → app-graph-builder-CWMMBJTB.mjs} +5 -4
  5. package/dist/lib/browser/app-graph-builder-CWMMBJTB.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-G3Z6NWTR.mjs → chunk-3VVM67QE.mjs} +6 -6
  7. package/dist/lib/browser/{chunk-G3Z6NWTR.mjs.map → chunk-3VVM67QE.mjs.map} +3 -3
  8. package/dist/lib/browser/{chunk-SFMK6EE3.mjs → chunk-CQR4O6KC.mjs} +2 -2
  9. package/dist/lib/browser/{chunk-MSAMS5TA.mjs → chunk-FK2KJZ73.mjs} +2 -2
  10. package/dist/lib/browser/{chunk-Q5U3VOZB.mjs → chunk-S2S5RFJ4.mjs} +1 -1
  11. package/dist/lib/browser/chunk-S2S5RFJ4.mjs.map +7 -0
  12. package/dist/lib/browser/index.mjs +8 -8
  13. package/dist/lib/browser/{intent-resolver-27OZKSSE.mjs → intent-resolver-TTGJCKQ5.mjs} +4 -4
  14. package/dist/lib/browser/{intent-resolver-27OZKSSE.mjs.map → intent-resolver-TTGJCKQ5.mjs.map} +2 -2
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/{react-surface-BKJWX4FK.mjs → react-surface-6ZX6LL3N.mjs} +9 -8
  17. package/dist/lib/browser/react-surface-6ZX6LL3N.mjs.map +7 -0
  18. package/dist/lib/browser/{settings-L73ZKGLV.mjs → settings-RBF22MVS.mjs} +3 -3
  19. package/dist/lib/browser/{state-IGJRHRIA.mjs → state-KI7F4I6V.mjs} +3 -3
  20. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  21. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  22. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  23. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  24. package/dist/types/src/components/Markdown/Container.d.ts +2 -2
  25. package/dist/types/src/components/Markdown/Container.d.ts.map +1 -1
  26. package/dist/types/src/components/Markdown/Slide.d.ts +2 -1
  27. package/dist/types/src/components/Markdown/Slide.d.ts.map +1 -1
  28. package/dist/types/src/components/Presenter/Layout.d.ts +2 -2
  29. package/dist/types/src/components/Presenter/Layout.d.ts.map +1 -1
  30. package/dist/types/src/components/Presenter/Pager.d.ts +3 -3
  31. package/dist/types/src/components/Presenter/Pager.d.ts.map +1 -1
  32. package/dist/types/src/components/PresenterSettings.d.ts +2 -1
  33. package/dist/types/src/components/PresenterSettings.d.ts.map +1 -1
  34. package/dist/types/src/components/RevealPlayer/RevealPlayer.d.ts +13 -0
  35. package/dist/types/src/components/RevealPlayer/RevealPlayer.d.ts.map +1 -0
  36. package/dist/types/src/components/RevealPlayer/RevealPlayer.stories.d.ts +8 -0
  37. package/dist/types/src/components/RevealPlayer/RevealPlayer.stories.d.ts.map +1 -0
  38. package/dist/types/src/components/RevealPlayer/index.d.ts +2 -0
  39. package/dist/types/src/components/RevealPlayer/index.d.ts.map +1 -0
  40. package/dist/types/src/components/index.d.ts +3 -3
  41. package/dist/types/src/components/index.d.ts.map +1 -1
  42. package/dist/types/src/meta.d.ts +2 -7
  43. package/dist/types/src/meta.d.ts.map +1 -1
  44. package/dist/types/src/types.d.ts +32 -2
  45. package/dist/types/src/types.d.ts.map +1 -1
  46. package/package.json +21 -21
  47. package/src/capabilities/app-graph-builder.ts +3 -2
  48. package/src/capabilities/intent-resolver.ts +0 -1
  49. package/src/capabilities/react-surface.tsx +4 -3
  50. package/src/components/RevealMain.tsx +1 -1
  51. package/src/components/RevealPlayer/RevealPlayer.stories.tsx +39 -0
  52. package/src/components/{Reveal/Reveal.tsx → RevealPlayer/RevealPlayer.tsx} +42 -26
  53. package/src/components/{Reveal → RevealPlayer}/index.ts +1 -1
  54. package/src/components/index.ts +1 -1
  55. package/src/meta.ts +2 -2
  56. package/src/vite-env.d.ts +20 -0
  57. package/dist/lib/browser/RevealMain-WPCHJETF.mjs.map +0 -7
  58. package/dist/lib/browser/app-graph-builder-6U7WTJKG.mjs.map +0 -7
  59. package/dist/lib/browser/chunk-Q5U3VOZB.mjs.map +0 -7
  60. package/dist/lib/browser/react-surface-BKJWX4FK.mjs.map +0 -7
  61. package/dist/types/src/components/Reveal/Reveal.d.ts +0 -10
  62. package/dist/types/src/components/Reveal/Reveal.d.ts.map +0 -1
  63. package/dist/types/src/components/Reveal/index.d.ts +0 -2
  64. package/dist/types/src/components/Reveal/index.d.ts.map +0 -1
  65. package/dist/types/src/components/Reveal.stories.d.ts +0 -6
  66. package/dist/types/src/components/Reveal.stories.d.ts.map +0 -1
  67. package/src/components/Reveal.stories.tsx +0 -36
  68. /package/dist/lib/browser/{PresenterMain-7JXM3QQ7.mjs.map → PresenterMain-PQPWYIWU.mjs.map} +0 -0
  69. /package/dist/lib/browser/{chunk-SFMK6EE3.mjs.map → chunk-CQR4O6KC.mjs.map} +0 -0
  70. /package/dist/lib/browser/{chunk-MSAMS5TA.mjs.map → chunk-FK2KJZ73.mjs.map} +0 -0
  71. /package/dist/lib/browser/{settings-L73ZKGLV.mjs.map → settings-RBF22MVS.mjs.map} +0 -0
  72. /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
- // import Notes from 'reveal.js/plugin/notes/notes.js';
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
- padding-left: 36px;
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
- // https://revealjs.com/react
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
- center: true,
89
- margin: 0.01,
90
- minScale: 0.2,
91
- maxScale: 1.4,
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 inset-0 h-full'>
136
- <div ref={deckDivRef} className='reveal'>
137
- {/* TODO(burdon): Must be in head. */}
138
- <style>
139
- <link rel='preconnect' href='https://fonts.googleapis.com' />
140
- <link rel='preconnect' href='https://fonts.gstatic.com' {...{ crossOrigin: '' }} />
141
- <link
142
- rel='stylesheet'
143
- href='https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100..900;1,100..900&display=swap'
144
- />
145
- </style>
146
- <div className='slides'>
147
- <div className='!text-center' />
148
- <section {...{ 'data-markdown': [] }}>
149
- <textarea {...{ 'data-template': true }} defaultValue={[styles, content].join('\n')}></textarea>
150
- </section>
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>
@@ -2,4 +2,4 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './Reveal';
5
+ export * from './RevealPlayer';
@@ -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
- } satisfies PluginMeta;
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,2 +0,0 @@
1
- export * from './Reveal';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/Reveal/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC"}
@@ -1,6 +0,0 @@
1
- import '@dxos-theme';
2
- import { type Meta } from '@storybook/react';
3
- export declare const Default: {};
4
- declare const meta: Meta;
5
- export default meta;
6
- //# sourceMappingURL=Reveal.stories.d.ts.map
@@ -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;