@dxos/plugin-presenter 0.8.4-main.c85a9c8dae → 0.8.4-main.d9fc60f731

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 (211) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +309 -0
  3. package/dist/lib/{browser/CollectionPresenterContainer-5RJIT3DA.mjs → neutral/CollectionPresenterArticle-DFREOQTG.mjs} +14 -20
  4. package/dist/lib/neutral/CollectionPresenterArticle-DFREOQTG.mjs.map +7 -0
  5. package/dist/lib/{browser/DocumentPresenterContainer-ISD6N5FM.mjs → neutral/DocumentPresenterContainer-KCDZ2O2C.mjs} +5 -9
  6. package/dist/lib/neutral/DocumentPresenterContainer-KCDZ2O2C.mjs.map +7 -0
  7. package/dist/lib/neutral/MarkdownSlide-WXILOIBE.mjs +18 -0
  8. package/dist/lib/neutral/MarkdownSlide-WXILOIBE.mjs.map +7 -0
  9. package/dist/lib/neutral/PresenterPlugin.mjs +35 -0
  10. package/dist/lib/neutral/PresenterPlugin.mjs.map +7 -0
  11. package/dist/lib/neutral/PresenterPlugin.node.mjs +16 -0
  12. package/dist/lib/neutral/PresenterPlugin.node.mjs.map +7 -0
  13. package/dist/lib/neutral/PresenterPlugin.workerd.mjs +12 -0
  14. package/dist/lib/neutral/PresenterPlugin.workerd.mjs.map +7 -0
  15. package/dist/lib/neutral/PresenterSettings-2G4XD4QY.mjs +25 -0
  16. package/dist/lib/neutral/PresenterSettings-2G4XD4QY.mjs.map +7 -0
  17. package/dist/lib/{browser/app-graph-builder-LNUGLW3H.mjs → neutral/app-graph-builder-DIEDSRPX.mjs} +25 -41
  18. package/dist/lib/neutral/app-graph-builder-DIEDSRPX.mjs.map +7 -0
  19. package/dist/lib/neutral/capabilities/index.mjs +13 -0
  20. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  21. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  22. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  23. package/dist/lib/neutral/chunk-PPL2FF6R.mjs +38 -0
  24. package/dist/lib/neutral/chunk-PPL2FF6R.mjs.map +7 -0
  25. package/dist/lib/{browser/chunk-46CHA6Y5.mjs → neutral/chunk-V323QBC3.mjs} +8 -8
  26. package/dist/lib/neutral/chunk-V323QBC3.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-VVALMI52.mjs +69 -0
  28. package/dist/lib/neutral/chunk-VVALMI52.mjs.map +7 -0
  29. package/dist/lib/{browser/chunk-BHTOR7TG.mjs → neutral/components/index.mjs} +37 -20
  30. package/dist/lib/neutral/components/index.mjs.map +7 -0
  31. package/dist/lib/neutral/containers/index.mjs +13 -0
  32. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  33. package/dist/lib/neutral/index.mjs +18 -0
  34. package/dist/lib/neutral/index.mjs.map +7 -0
  35. package/dist/lib/neutral/meta.json +1 -0
  36. package/dist/lib/neutral/meta.mjs +8 -0
  37. package/dist/lib/neutral/meta.mjs.map +7 -0
  38. package/dist/lib/neutral/plugin.mjs +12 -0
  39. package/dist/lib/neutral/plugin.mjs.map +7 -0
  40. package/dist/lib/neutral/react-surface-SPJGAJIF.mjs +54 -0
  41. package/dist/lib/neutral/react-surface-SPJGAJIF.mjs.map +7 -0
  42. package/dist/lib/{browser/settings-GIQOCH6O.mjs → neutral/settings-R6LRDAAK.mjs} +7 -11
  43. package/dist/lib/neutral/settings-R6LRDAAK.mjs.map +7 -0
  44. package/dist/lib/neutral/translations.mjs +19 -0
  45. package/dist/lib/neutral/translations.mjs.map +7 -0
  46. package/dist/lib/neutral/types/index.mjs +14 -0
  47. package/dist/lib/neutral/types/index.mjs.map +7 -0
  48. package/dist/types/src/PresenterPlugin.d.ts +1 -0
  49. package/dist/types/src/PresenterPlugin.d.ts.map +1 -1
  50. package/dist/types/src/PresenterPlugin.node.d.ts +4 -0
  51. package/dist/types/src/PresenterPlugin.node.d.ts.map +1 -0
  52. package/dist/types/src/PresenterPlugin.test.d.ts +2 -0
  53. package/dist/types/src/PresenterPlugin.test.d.ts.map +1 -0
  54. package/dist/types/src/PresenterPlugin.workerd.d.ts +4 -0
  55. package/dist/types/src/PresenterPlugin.workerd.d.ts.map +1 -0
  56. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  57. package/dist/types/src/capabilities/index.d.ts +4 -3
  58. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  59. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  60. package/dist/types/src/capabilities/{settings/settings.d.ts → settings.d.ts} +2 -5
  61. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  62. package/dist/types/src/components/Markdown/Panel.d.ts +8 -0
  63. package/dist/types/src/components/Markdown/Panel.d.ts.map +1 -0
  64. package/dist/types/src/components/Markdown/{Container.stories.d.ts → Panel.stories.d.ts} +1 -1
  65. package/dist/types/src/components/Markdown/Panel.stories.d.ts.map +1 -0
  66. package/dist/types/src/components/Markdown/Slide.d.ts +1 -1
  67. package/dist/types/src/components/Markdown/Slide.d.ts.map +1 -1
  68. package/dist/types/src/components/Markdown/Slide.stories.d.ts.map +1 -1
  69. package/dist/types/src/components/Markdown/index.d.ts +1 -1
  70. package/dist/types/src/components/Markdown/index.d.ts.map +1 -1
  71. package/dist/types/src/components/Markdown/theme.d.ts.map +1 -1
  72. package/dist/types/src/components/Presenter/Layout.d.ts +5 -5
  73. package/dist/types/src/components/Presenter/Layout.d.ts.map +1 -1
  74. package/dist/types/src/components/Presenter/Pager.d.ts.map +1 -1
  75. package/dist/types/src/components/Presenter/Pager.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/PresenterSettings/PresenterSettings.d.ts +6 -0
  77. package/dist/types/src/components/PresenterSettings/PresenterSettings.d.ts.map +1 -0
  78. package/dist/types/src/components/PresenterSettings/PresenterSettings.stories.d.ts +23 -0
  79. package/dist/types/src/components/PresenterSettings/PresenterSettings.stories.d.ts.map +1 -0
  80. package/dist/types/src/components/PresenterSettings/index.d.ts +2 -0
  81. package/dist/types/src/components/PresenterSettings/index.d.ts.map +1 -0
  82. package/dist/types/src/components/RevealPlayer/RevealPlayer.d.ts +5 -4
  83. package/dist/types/src/components/RevealPlayer/RevealPlayer.d.ts.map +1 -1
  84. package/dist/types/src/components/RevealPlayer/RevealPlayer.stories.d.ts +7 -6
  85. package/dist/types/src/components/RevealPlayer/RevealPlayer.stories.d.ts.map +1 -1
  86. package/dist/types/src/components/index.d.ts +2 -0
  87. package/dist/types/src/components/index.d.ts.map +1 -1
  88. package/dist/types/src/containers/CollectionPresenterArticle/CollectionPresenterArticle.d.ts +6 -0
  89. package/dist/types/src/containers/CollectionPresenterArticle/CollectionPresenterArticle.d.ts.map +1 -0
  90. package/dist/types/src/containers/CollectionPresenterArticle/index.d.ts +2 -0
  91. package/dist/types/src/containers/CollectionPresenterArticle/index.d.ts.map +1 -0
  92. package/dist/types/src/containers/DocumentPresenterContainer/DocumentPresenterContainer.d.ts +1 -1
  93. package/dist/types/src/containers/DocumentPresenterContainer/DocumentPresenterContainer.d.ts.map +1 -1
  94. package/dist/types/src/containers/DocumentPresenterContainer/index.d.ts +1 -2
  95. package/dist/types/src/containers/DocumentPresenterContainer/index.d.ts.map +1 -1
  96. package/dist/types/src/containers/MarkdownSlide/MarkdownSlide.d.ts +1 -1
  97. package/dist/types/src/containers/MarkdownSlide/MarkdownSlide.d.ts.map +1 -1
  98. package/dist/types/src/containers/MarkdownSlide/index.d.ts +1 -2
  99. package/dist/types/src/containers/MarkdownSlide/index.d.ts.map +1 -1
  100. package/dist/types/src/containers/index.d.ts +1 -2
  101. package/dist/types/src/containers/index.d.ts.map +1 -1
  102. package/dist/types/src/index.d.ts +1 -2
  103. package/dist/types/src/index.d.ts.map +1 -1
  104. package/dist/types/src/meta.d.ts +1 -1
  105. package/dist/types/src/meta.d.ts.map +1 -1
  106. package/dist/types/src/plugin.d.ts +3 -0
  107. package/dist/types/src/plugin.d.ts.map +1 -0
  108. package/dist/types/src/testing.d.ts.map +1 -1
  109. package/dist/types/src/translations.d.ts +4 -6
  110. package/dist/types/src/translations.d.ts.map +1 -1
  111. package/dist/types/src/types/PresenterCapabilities.d.ts +4 -0
  112. package/dist/types/src/types/PresenterCapabilities.d.ts.map +1 -0
  113. package/dist/types/src/types/PresenterOperation.d.ts +17 -0
  114. package/dist/types/src/types/PresenterOperation.d.ts.map +1 -0
  115. package/dist/types/src/types/Settings.d.ts +7 -0
  116. package/dist/types/src/types/Settings.d.ts.map +1 -0
  117. package/dist/types/src/types/index.d.ts +11 -0
  118. package/dist/types/src/types/index.d.ts.map +1 -0
  119. package/dist/types/src/useExitPresenter.d.ts +1 -1
  120. package/dist/types/src/useExitPresenter.d.ts.map +1 -1
  121. package/dist/types/tsconfig.tsbuildinfo +1 -1
  122. package/package.json +87 -39
  123. package/src/PresenterPlugin.node.ts +16 -0
  124. package/src/PresenterPlugin.test.ts +23 -0
  125. package/src/PresenterPlugin.tsx +11 -3
  126. package/src/PresenterPlugin.workerd.ts +11 -0
  127. package/src/capabilities/{app-graph-builder/app-graph-builder.ts → app-graph-builder.ts} +24 -28
  128. package/src/capabilities/index.ts +5 -3
  129. package/src/capabilities/react-surface.tsx +67 -0
  130. package/src/capabilities/{settings/settings.ts → settings.ts} +4 -4
  131. package/src/components/Markdown/{Container.stories.tsx → Panel.stories.tsx} +5 -5
  132. package/src/components/Markdown/{Container.tsx → Panel.tsx} +4 -4
  133. package/src/components/Markdown/Slide.stories.tsx +1 -1
  134. package/src/components/Markdown/Slide.tsx +2 -2
  135. package/src/components/Markdown/index.ts +1 -1
  136. package/src/components/Presenter/Layout.tsx +24 -23
  137. package/src/components/PresenterSettings/PresenterSettings.stories.tsx +32 -0
  138. package/src/components/PresenterSettings/PresenterSettings.tsx +31 -0
  139. package/src/components/PresenterSettings/index.ts +5 -0
  140. package/src/components/RevealPlayer/RevealPlayer.stories.tsx +2 -2
  141. package/src/components/RevealPlayer/RevealPlayer.tsx +104 -105
  142. package/src/components/index.ts +4 -0
  143. package/src/containers/{CollectionPresenterContainer/CollectionPresenterContainer.tsx → CollectionPresenterArticle/CollectionPresenterArticle.tsx} +14 -7
  144. package/src/containers/CollectionPresenterArticle/index.ts +5 -0
  145. package/src/containers/DocumentPresenterContainer/DocumentPresenterContainer.tsx +3 -2
  146. package/src/containers/DocumentPresenterContainer/index.ts +1 -3
  147. package/src/containers/MarkdownSlide/MarkdownSlide.tsx +4 -4
  148. package/src/containers/MarkdownSlide/index.ts +1 -3
  149. package/src/containers/index.ts +1 -2
  150. package/src/index.ts +1 -3
  151. package/src/meta.ts +25 -6
  152. package/src/plugin.ts +9 -0
  153. package/src/testing.ts +6 -6
  154. package/src/translations.ts +4 -5
  155. package/src/types/PresenterCapabilities.ts +15 -0
  156. package/src/types/PresenterOperation.ts +29 -0
  157. package/src/types/Settings.ts +20 -0
  158. package/src/types/index.ts +21 -0
  159. package/src/useExitPresenter.ts +9 -8
  160. package/src/vite-env.d.ts +5 -0
  161. package/dist/lib/browser/CollectionPresenterContainer-5RJIT3DA.mjs.map +0 -7
  162. package/dist/lib/browser/DocumentPresenterContainer-ISD6N5FM.mjs.map +0 -7
  163. package/dist/lib/browser/MarkdownSlide-Q2XLZTMW.mjs +0 -23
  164. package/dist/lib/browser/MarkdownSlide-Q2XLZTMW.mjs.map +0 -7
  165. package/dist/lib/browser/PresenterSettings-WGQMXH4I.mjs +0 -31
  166. package/dist/lib/browser/PresenterSettings-WGQMXH4I.mjs.map +0 -7
  167. package/dist/lib/browser/app-graph-builder-LNUGLW3H.mjs.map +0 -7
  168. package/dist/lib/browser/chunk-46CHA6Y5.mjs.map +0 -7
  169. package/dist/lib/browser/chunk-BHTOR7TG.mjs.map +0 -7
  170. package/dist/lib/browser/chunk-PSOOAW44.mjs +0 -50
  171. package/dist/lib/browser/chunk-PSOOAW44.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-VQVZVXPJ.mjs +0 -18
  173. package/dist/lib/browser/chunk-VQVZVXPJ.mjs.map +0 -7
  174. package/dist/lib/browser/index.mjs +0 -65
  175. package/dist/lib/browser/index.mjs.map +0 -7
  176. package/dist/lib/browser/meta.json +0 -1
  177. package/dist/lib/browser/react-surface-UCM2KRSP.mjs +0 -67
  178. package/dist/lib/browser/react-surface-UCM2KRSP.mjs.map +0 -7
  179. package/dist/lib/browser/settings-GIQOCH6O.mjs.map +0 -7
  180. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
  181. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
  182. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
  183. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  184. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  185. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  186. package/dist/types/src/capabilities/settings/index.d.ts +0 -7
  187. package/dist/types/src/capabilities/settings/index.d.ts.map +0 -1
  188. package/dist/types/src/capabilities/settings/settings.d.ts.map +0 -1
  189. package/dist/types/src/components/Markdown/Container.d.ts +0 -8
  190. package/dist/types/src/components/Markdown/Container.d.ts.map +0 -1
  191. package/dist/types/src/components/Markdown/Container.stories.d.ts.map +0 -1
  192. package/dist/types/src/containers/CollectionPresenterContainer/CollectionPresenterContainer.d.ts +0 -7
  193. package/dist/types/src/containers/CollectionPresenterContainer/CollectionPresenterContainer.d.ts.map +0 -1
  194. package/dist/types/src/containers/CollectionPresenterContainer/index.d.ts +0 -3
  195. package/dist/types/src/containers/CollectionPresenterContainer/index.d.ts.map +0 -1
  196. package/dist/types/src/containers/PresenterSettings/PresenterSettings.d.ts +0 -8
  197. package/dist/types/src/containers/PresenterSettings/PresenterSettings.d.ts.map +0 -1
  198. package/dist/types/src/containers/PresenterSettings/index.d.ts +0 -3
  199. package/dist/types/src/containers/PresenterSettings/index.d.ts.map +0 -1
  200. package/dist/types/src/types.d.ts +0 -49
  201. package/dist/types/src/types.d.ts.map +0 -1
  202. package/src/capabilities/app-graph-builder/index.ts +0 -7
  203. package/src/capabilities/react-surface/index.ts +0 -7
  204. package/src/capabilities/react-surface/react-surface.tsx +0 -71
  205. package/src/capabilities/settings/index.ts +0 -7
  206. package/src/containers/CollectionPresenterContainer/index.ts +0 -7
  207. package/src/containers/PresenterSettings/PresenterSettings.tsx +0 -35
  208. package/src/containers/PresenterSettings/index.ts +0 -7
  209. package/src/types.ts +0 -54
  210. /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
  211. /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
@@ -0,0 +1,16 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/PresenterPlugin.node.ts
4
+ import { Plugin } from "@dxos/app-framework";
5
+ import { AppPlugin } from "@dxos/app-toolkit";
6
+ import { AppGraphBuilder } from "#capabilities";
7
+ import { meta } from "#meta";
8
+ var PresenterPlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
9
+ activate: AppGraphBuilder
10
+ }), Plugin.make);
11
+ var PresenterPlugin_node_default = PresenterPlugin;
12
+ export {
13
+ PresenterPlugin,
14
+ PresenterPlugin_node_default as default
15
+ };
16
+ //# sourceMappingURL=PresenterPlugin.node.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/PresenterPlugin.node.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\n\nimport { AppGraphBuilder } from '#capabilities';\nimport { meta } from '#meta';\n\nexport const PresenterPlugin = Plugin.define(meta).pipe(\n AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),\n Plugin.make,\n);\n\nexport default PresenterPlugin;\n"],
5
+ "mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;AAE1B,SAASC,uBAAuB;AAChC,SAASC,YAAY;AAEd,IAAMC,kBAAkBJ,OAAOK,OAAOF,IAAAA,EAAMG,KACjDL,UAAUM,kBAAkB;EAAEC,UAAUN;AAAgB,CAAA,GACxDF,OAAOS,IAAI;AAGb,IAAA,+BAAeL;",
6
+ "names": ["Plugin", "AppPlugin", "AppGraphBuilder", "meta", "PresenterPlugin", "define", "pipe", "addAppGraphModule", "activate", "make"]
7
+ }
@@ -0,0 +1,12 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/PresenterPlugin.workerd.ts
4
+ import { Plugin } from "@dxos/app-framework";
5
+ import { meta } from "#meta";
6
+ var PresenterPlugin = Plugin.define(meta).pipe(Plugin.make);
7
+ var PresenterPlugin_workerd_default = PresenterPlugin;
8
+ export {
9
+ PresenterPlugin,
10
+ PresenterPlugin_workerd_default as default
11
+ };
12
+ //# sourceMappingURL=PresenterPlugin.workerd.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/PresenterPlugin.workerd.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\n\nimport { meta } from '#meta';\n\nexport const PresenterPlugin = Plugin.define(meta).pipe(Plugin.make);\n\nexport default PresenterPlugin;\n"],
5
+ "mappings": ";;;AAIA,SAASA,cAAc;AAEvB,SAASC,YAAY;AAEd,IAAMC,kBAAkBF,OAAOG,OAAOF,IAAAA,EAAMG,KAAKJ,OAAOK,IAAI;AAEnE,IAAA,kCAAeH;",
6
+ "names": ["Plugin", "meta", "PresenterPlugin", "define", "pipe", "make"]
7
+ }
@@ -0,0 +1,25 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/components/PresenterSettings/PresenterSettings.tsx
4
+ import React from "react";
5
+ import { useTranslation } from "@dxos/react-ui";
6
+ import { Settings as SettingsForm } from "@dxos/react-ui-form";
7
+ import { meta } from "#meta";
8
+ import { Settings } from "#types";
9
+ var PresenterSettings = ({ settings, onSettingsChange }) => {
10
+ const { t } = useTranslation(meta.id);
11
+ return /* @__PURE__ */ React.createElement(SettingsForm.Viewport, null, /* @__PURE__ */ React.createElement(SettingsForm.Section, {
12
+ title: t("settings.title", {
13
+ ns: meta.id
14
+ })
15
+ }, /* @__PURE__ */ React.createElement(SettingsForm.FieldSet, {
16
+ readonly: !onSettingsChange,
17
+ schema: Settings.Settings,
18
+ values: settings,
19
+ onValuesChanged: (values) => onSettingsChange?.(() => values)
20
+ })));
21
+ };
22
+ export {
23
+ PresenterSettings as default
24
+ };
25
+ //# sourceMappingURL=PresenterSettings-2G4XD4QY.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/PresenterSettings/PresenterSettings.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Settings as SettingsForm } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\nimport { Settings } from '#types';\n\nexport type PresenterSettingsProps = AppSurface.SettingsArticleProps<Settings.Settings>;\n\nexport const PresenterSettings = ({ settings, onSettingsChange }: PresenterSettingsProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <SettingsForm.Viewport>\n <SettingsForm.Section title={t('settings.title', { ns: meta.id })}>\n <SettingsForm.FieldSet\n readonly={!onSettingsChange}\n schema={Settings.Settings}\n values={settings}\n onValuesChanged={(values) => onSettingsChange?.(() => values)}\n />\n </SettingsForm.Section>\n </SettingsForm.Viewport>\n );\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,WAAW;AAGlB,SAASC,sBAAsB;AAC/B,SAASC,YAAYC,oBAAoB;AAEzC,SAASC,YAAY;AACrB,SAASF,gBAAgB;AAIlB,IAAMG,oBAAoB,CAAC,EAAEC,UAAUC,iBAAgB,MAA0B;AACtF,QAAM,EAAEC,EAAC,IAAKP,eAAeG,KAAKK,EAAE;AAEpC,SACE,sBAAA,cAACN,aAAaO,UAAQ,MACpB,sBAAA,cAACP,aAAaQ,SAAO;IAACC,OAAOJ,EAAE,kBAAkB;MAAEK,IAAIT,KAAKK;IAAG,CAAA;KAC7D,sBAAA,cAACN,aAAaW,UAAQ;IACpBC,UAAU,CAACR;IACXS,QAAQd,SAASA;IACjBe,QAAQX;IACRY,iBAAiB,CAACD,WAAWV,mBAAmB,MAAMU,MAAAA;;AAKhE;",
6
+ "names": ["React", "useTranslation", "Settings", "SettingsForm", "meta", "PresenterSettings", "settings", "onSettingsChange", "t", "id", "Viewport", "Section", "title", "ns", "FieldSet", "readonly", "schema", "values", "onValuesChanged"]
7
+ }
@@ -1,28 +1,24 @@
1
- import {
2
- PresenterCapabilities,
3
- PresenterOperation
4
- } from "./chunk-PSOOAW44.mjs";
5
- import {
6
- meta
7
- } from "./chunk-VQVZVXPJ.mjs";
1
+ import "./chunk-J5LGTIGS.mjs";
8
2
 
9
- // src/capabilities/app-graph-builder/app-graph-builder.ts
3
+ // src/capabilities/app-graph-builder.ts
10
4
  import * as Effect from "effect/Effect";
11
5
  import * as Option from "effect/Option";
12
6
  import { Capabilities, Capability } from "@dxos/app-framework";
13
- import { AppCapabilities, LayoutOperation } from "@dxos/app-toolkit";
14
- import { Obj } from "@dxos/echo";
15
- import { Collection } from "@dxos/echo";
16
- import { Operation } from "@dxos/operation";
17
- import { DeckCapabilities } from "@dxos/plugin-deck";
18
- import { ATTENDABLE_PATH_SEPARATOR, DeckOperation } from "@dxos/plugin-deck/types";
7
+ import { AppCapabilities, AppNode, LayoutOperation, getObjectPathFromObject, getSpacePath } from "@dxos/app-toolkit";
8
+ import { Operation } from "@dxos/compute";
9
+ import { Collection, Obj } from "@dxos/echo";
10
+ import { DeckCapabilities, DeckOperation } from "@dxos/plugin-deck";
19
11
  import { GraphBuilder, NodeMatcher } from "@dxos/plugin-graph";
20
- import { Markdown } from "@dxos/plugin-markdown/types";
12
+ import { Markdown } from "@dxos/plugin-markdown";
13
+ import { linkedSegment } from "@dxos/react-ui-attention";
14
+ import { meta } from "#meta";
15
+ import { PresenterOperation } from "#types";
16
+ import { PresenterCapabilities } from "#types";
21
17
  var whenPresentable = (node) => Option.orElse(NodeMatcher.whenEchoType(Collection.Collection)(node), () => NodeMatcher.whenEchoType(Markdown.Document)(node));
22
18
  var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
23
19
  const capabilities = yield* Capability.Service;
24
20
  const extensions = yield* GraphBuilder.createExtension({
25
- id: `${meta.id}/root`,
21
+ id: "root",
26
22
  // TODO(wittjosiah): This is a hack to work around presenter previously relying on "variant". Remove.
27
23
  match: whenPresentable,
28
24
  connector: (object, get) => {
@@ -32,48 +28,36 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
32
28
  if (!isPresentable) {
33
29
  return Effect.succeed([]);
34
30
  }
35
- const id = Obj.getDXN(object).toString();
36
31
  return Effect.succeed([
37
- {
38
- id: [
39
- id,
40
- "presenter"
41
- ].join(ATTENDABLE_PATH_SEPARATOR),
32
+ AppNode.makeCompanion({
33
+ id: linkedSegment("presenter"),
34
+ label: "Presenter",
35
+ icon: "ph--presentation--regular",
42
36
  data: {
43
37
  type: meta.id,
44
38
  object
45
- },
46
- type: meta.id,
47
- properties: {
48
- label: "Presenter",
49
- icon: "ph--presentation--regular",
50
- disposition: "hidden"
51
39
  }
52
- }
40
+ })
53
41
  ]);
54
42
  },
55
43
  actions: (object, get) => {
56
44
  const settingsAtom = capabilities.get(PresenterCapabilities.Settings);
57
45
  const settings = get(settingsAtom);
58
46
  const isPresentable = settings?.presentCollections ? Obj.instanceOf(Collection.Collection, object) || Obj.instanceOf(Markdown.Document, object) : Obj.instanceOf(Markdown.Document, object);
59
- if (!isPresentable) {
47
+ const db = Obj.getDatabase(object);
48
+ if (!isPresentable || !db) {
60
49
  return Effect.succeed([]);
61
50
  }
62
- const dxn = Obj.getDXN(object);
63
- const id = dxn.toString();
64
- const { spaceId } = dxn.asEchoDXN();
51
+ const objectPath = getObjectPathFromObject(object);
65
52
  return Effect.succeed([
66
53
  {
67
- id: `${PresenterOperation.TogglePresentation.meta.key}/${id}`,
54
+ id: PresenterOperation.TogglePresentation.meta.key,
68
55
  // TODO(burdon): Allow function so can generate state when activated.
69
56
  // So can set explicit fullscreen state coordinated with current presenter state.
70
57
  data: Effect.fnUntraced(function* () {
71
58
  const deckState = yield* Capabilities.getAtomValue(DeckCapabilities.State);
72
59
  const deck = deckState.decks[deckState.activeDeck];
73
- const presenterId = [
74
- id,
75
- "presenter"
76
- ].join(ATTENDABLE_PATH_SEPARATOR);
60
+ const presenterId = `${objectPath}/${linkedSegment("presenter")}`;
77
61
  if (!deck?.fullscreen) {
78
62
  yield* Operation.invoke(DeckOperation.Adjust, {
79
63
  type: "solo--fullscreen",
@@ -84,12 +68,12 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
84
68
  subject: [
85
69
  presenterId
86
70
  ],
87
- workspace: spaceId
71
+ workspace: getSpacePath(db.spaceId)
88
72
  });
89
73
  }),
90
74
  properties: {
91
75
  label: [
92
- "toggle presentation label",
76
+ "toggle-presentation.label",
93
77
  {
94
78
  ns: meta.id
95
79
  }
@@ -110,4 +94,4 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
110
94
  export {
111
95
  app_graph_builder_default as default
112
96
  };
113
- //# sourceMappingURL=app-graph-builder-LNUGLW3H.mjs.map
97
+ //# sourceMappingURL=app-graph-builder-DIEDSRPX.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities, AppNode, LayoutOperation, getObjectPathFromObject, getSpacePath } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { Collection, Obj } from '@dxos/echo';\nimport { DeckCapabilities, DeckOperation } from '@dxos/plugin-deck';\nimport { GraphBuilder, type Node, NodeMatcher } from '@dxos/plugin-graph';\nimport { Markdown } from '@dxos/plugin-markdown';\nimport { linkedSegment } from '@dxos/react-ui-attention';\n\nimport { meta } from '#meta';\nimport { PresenterOperation } from '#types';\nimport { PresenterCapabilities } from '#types';\n\n/** Match nodes that can be presented (Collection or Document). */\nconst whenPresentable = (node: Node.Node) =>\n Option.orElse(NodeMatcher.whenEchoType(Collection.Collection)(node), () =>\n NodeMatcher.whenEchoType(Markdown.Document)(node),\n );\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n const extensions = yield* GraphBuilder.createExtension({\n id: 'root',\n // TODO(wittjosiah): This is a hack to work around presenter previously relying on \"variant\". Remove.\n match: whenPresentable,\n connector: (object, get) => {\n const settingsAtom = capabilities.get(PresenterCapabilities.Settings);\n const settings = get(settingsAtom);\n const isPresentable = settings?.presentCollections\n ? Obj.instanceOf(Collection.Collection, object) || Obj.instanceOf(Markdown.Document, object)\n : Obj.instanceOf(Markdown.Document, object);\n if (!isPresentable) {\n return Effect.succeed([]);\n }\n\n return Effect.succeed([\n AppNode.makeCompanion({\n id: linkedSegment('presenter'),\n label: 'Presenter',\n icon: 'ph--presentation--regular',\n data: { type: meta.id, object },\n }),\n ]);\n },\n actions: (object, get) => {\n const settingsAtom = capabilities.get(PresenterCapabilities.Settings);\n const settings = get(settingsAtom);\n const isPresentable = settings?.presentCollections\n ? Obj.instanceOf(Collection.Collection, object) || Obj.instanceOf(Markdown.Document, object)\n : Obj.instanceOf(Markdown.Document, object);\n const db = Obj.getDatabase(object);\n if (!isPresentable || !db) {\n return Effect.succeed([]);\n }\n const objectPath = getObjectPathFromObject(object);\n\n return Effect.succeed([\n {\n id: PresenterOperation.TogglePresentation.meta.key,\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: Effect.fnUntraced(function* () {\n const deckState = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n const deck = deckState.decks[deckState.activeDeck];\n const presenterId = `${objectPath}/${linkedSegment('presenter')}`;\n if (!deck?.fullscreen) {\n yield* Operation.invoke(DeckOperation.Adjust, {\n type: 'solo--fullscreen' as const,\n id: presenterId,\n });\n }\n yield* Operation.invoke(LayoutOperation.Open, {\n subject: [presenterId],\n workspace: getSpacePath(db.spaceId),\n });\n }),\n properties: {\n label: ['toggle-presentation.label', { ns: meta.id }],\n icon: 'ph--presentation--regular',\n disposition: 'list-item',\n keyBinding: {\n macos: 'shift+meta+p',\n windows: 'shift+alt+p',\n },\n },\n },\n ]);\n },\n });\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
5
+ "mappings": ";;;AAIA,YAAYA,YAAY;AACxB,YAAYC,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,iBAAiBC,SAASC,iBAAiBC,yBAAyBC,oBAAoB;AACjG,SAASC,iBAAiB;AAC1B,SAASC,YAAYC,WAAW;AAChC,SAASC,kBAAkBC,qBAAqB;AAChD,SAASC,cAAyBC,mBAAmB;AACrD,SAASC,gBAAgB;AACzB,SAASC,qBAAqB;AAE9B,SAASC,YAAY;AACrB,SAASC,0BAA0B;AACnC,SAASC,6BAA6B;AAGtC,IAAMC,kBAAkB,CAACC,SAChBC,cAAOR,YAAYS,aAAad,WAAWA,UAAU,EAAEY,IAAAA,GAAO,MACnEP,YAAYS,aAAaR,SAASS,QAAQ,EAAEH,IAAAA,CAAAA;AAGhD,IAAA,4BAAenB,WAAWuB,WACjBC,kBAAW,aAAA;AAChB,QAAMC,eAAe,OAAOzB,WAAW0B;AAEvC,QAAMC,aAAa,OAAOhB,aAAaiB,gBAAgB;IACrDC,IAAI;;IAEJC,OAAOZ;IACPa,WAAW,CAACC,QAAQC,QAAAA;AAClB,YAAMC,eAAeT,aAAaQ,IAAIhB,sBAAsBkB,QAAQ;AACpE,YAAMC,WAAWH,IAAIC,YAAAA;AACrB,YAAMG,gBAAgBD,UAAUE,qBAC5B9B,IAAI+B,WAAWhC,WAAWA,YAAYyB,MAAAA,KAAWxB,IAAI+B,WAAW1B,SAASS,UAAUU,MAAAA,IACnFxB,IAAI+B,WAAW1B,SAASS,UAAUU,MAAAA;AACtC,UAAI,CAACK,eAAe;AAClB,eAAcG,eAAQ,CAAA,CAAE;MAC1B;AAEA,aAAcA,eAAQ;QACpBtC,QAAQuC,cAAc;UACpBZ,IAAIf,cAAc,WAAA;UAClB4B,OAAO;UACPC,MAAM;UACNC,MAAM;YAAEC,MAAM9B,KAAKc;YAAIG;UAAO;QAChC,CAAA;OACD;IACH;IACAc,SAAS,CAACd,QAAQC,QAAAA;AAChB,YAAMC,eAAeT,aAAaQ,IAAIhB,sBAAsBkB,QAAQ;AACpE,YAAMC,WAAWH,IAAIC,YAAAA;AACrB,YAAMG,gBAAgBD,UAAUE,qBAC5B9B,IAAI+B,WAAWhC,WAAWA,YAAYyB,MAAAA,KAAWxB,IAAI+B,WAAW1B,SAASS,UAAUU,MAAAA,IACnFxB,IAAI+B,WAAW1B,SAASS,UAAUU,MAAAA;AACtC,YAAMe,KAAKvC,IAAIwC,YAAYhB,MAAAA;AAC3B,UAAI,CAACK,iBAAiB,CAACU,IAAI;AACzB,eAAcP,eAAQ,CAAA,CAAE;MAC1B;AACA,YAAMS,aAAa7C,wBAAwB4B,MAAAA;AAE3C,aAAcQ,eAAQ;QACpB;UACEX,IAAIb,mBAAmBkC,mBAAmBnC,KAAKoC;;;UAG/CP,MAAapB,kBAAW,aAAA;AACtB,kBAAM4B,YAAY,OAAOrD,aAAasD,aAAa5C,iBAAiB6C,KAAK;AACzE,kBAAMC,OAAOH,UAAUI,MAAMJ,UAAUK,UAAU;AACjD,kBAAMC,cAAc,GAAGT,UAAAA,IAAcnC,cAAc,WAAA,CAAA;AACnD,gBAAI,CAACyC,MAAMI,YAAY;AACrB,qBAAOrD,UAAUsD,OAAOlD,cAAcmD,QAAQ;gBAC5ChB,MAAM;gBACNhB,IAAI6B;cACN,CAAA;YACF;AACA,mBAAOpD,UAAUsD,OAAOzD,gBAAgB2D,MAAM;cAC5CC,SAAS;gBAACL;;cACVM,WAAW3D,aAAa0C,GAAGkB,OAAO;YACpC,CAAA;UACF,CAAA;UACAC,YAAY;YACVxB,OAAO;cAAC;cAA6B;gBAAEyB,IAAIpD,KAAKc;cAAG;;YACnDc,MAAM;YACNyB,aAAa;YACbC,YAAY;cACVC,OAAO;cACPC,SAAS;YACX;UACF;QACF;OACD;IACH;EACF,CAAA;AAEA,SAAOvE,WAAWwE,YAAYvE,gBAAgBwE,iBAAiB9C,UAAAA;AACjE,CAAA,CAAA;",
6
+ "names": ["Effect", "Option", "Capabilities", "Capability", "AppCapabilities", "AppNode", "LayoutOperation", "getObjectPathFromObject", "getSpacePath", "Operation", "Collection", "Obj", "DeckCapabilities", "DeckOperation", "GraphBuilder", "NodeMatcher", "Markdown", "linkedSegment", "meta", "PresenterOperation", "PresenterCapabilities", "whenPresentable", "node", "orElse", "whenEchoType", "Document", "makeModule", "fnUntraced", "capabilities", "Service", "extensions", "createExtension", "id", "match", "connector", "object", "get", "settingsAtom", "Settings", "settings", "isPresentable", "presentCollections", "instanceOf", "succeed", "makeCompanion", "label", "icon", "data", "type", "actions", "db", "getDatabase", "objectPath", "TogglePresentation", "key", "deckState", "getAtomValue", "State", "deck", "decks", "activeDeck", "presenterId", "fullscreen", "invoke", "Adjust", "Open", "subject", "workspace", "spaceId", "properties", "ns", "disposition", "keyBinding", "macos", "windows", "contributes", "AppGraphBuilder"]
7
+ }
@@ -0,0 +1,13 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/capabilities/index.ts
4
+ import { Capability } from "@dxos/app-framework";
5
+ var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("../app-graph-builder-DIEDSRPX.mjs"));
6
+ var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-SPJGAJIF.mjs"));
7
+ var PresenterSettings = Capability.lazy("PresenterSettings", () => import("../settings-R6LRDAAK.mjs"));
8
+ export {
9
+ AppGraphBuilder,
10
+ PresenterSettings,
11
+ ReactSurface
12
+ };
13
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\nexport const PresenterSettings = Capability.lazy('PresenterSettings', () => import('./settings'));\n"],
5
+ "mappings": ";;;AAIA,SAASA,kBAAkB;AAEpB,IAAMC,kBAAkBD,WAAWE,KAAK,mBAAmB,MAAM,OAAO,mCAAA,CAAA;AACxE,IAAMC,eAAeH,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAME,oBAAoBJ,WAAWE,KAAK,qBAAqB,MAAM,OAAO,0BAAA,CAAA;",
6
+ "names": ["Capability", "AppGraphBuilder", "lazy", "ReactSurface", "PresenterSettings"]
7
+ }
@@ -0,0 +1,10 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ export {
8
+ __export
9
+ };
10
+ //# sourceMappingURL=chunk-J5LGTIGS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,38 @@
1
+ // src/meta.ts
2
+ import { Plugin } from "@dxos/app-framework";
3
+ import { DXN } from "@dxos/keys";
4
+ import { trim } from "@dxos/util";
5
+ var meta = Plugin.makeMeta({
6
+ key: DXN.make("org.dxos.plugin.presenter"),
7
+ name: "Presenter",
8
+ author: "DXOS",
9
+ description: trim`
10
+ Transform existing workspace objects into interactive presentation slideshows without
11
+ duplicating content. Markdown documents are split into slides on horizontal \`---\`
12
+ separators and rendered with Reveal.js, giving authors a familiar authoring surface
13
+ with full Markdown syntax. Collections can optionally be presented slide-by-slide,
14
+ with each member object rendered by its own plugin surface.
15
+
16
+ Activate presentation mode for any supported object via the action menu or the
17
+ Shift+Cmd+P (macOS) / Shift+Alt+P (Windows/Linux) keyboard shortcut. The presenter
18
+ opens in a solo fullscreen layout managed by the Deck plugin, keeping the rest of the
19
+ workspace undisturbed.
20
+
21
+ Navigation controls and a page-number indicator are shown during collection
22
+ slideshows. Pressing Escape exits fullscreen and returns to the originating document
23
+ or collection view. All navigation is keyboard-accessible.
24
+
25
+ Collaboration is inherent: because slides are backed by live ECHO objects, edits made
26
+ by any peer in the workspace are immediately reflected in an open presentation without
27
+ any manual refresh.
28
+ `,
29
+ icon: "ph--presentation--regular",
30
+ iconHue: "indigo",
31
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-presenter",
32
+ spec: "PLUGIN.mdl"
33
+ });
34
+
35
+ export {
36
+ meta
37
+ };
38
+ //# sourceMappingURL=chunk-PPL2FF6R.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { DXN } from '@dxos/keys';\nimport { trim } from '@dxos/util';\n\nexport const meta = Plugin.makeMeta({\n key: DXN.make('org.dxos.plugin.presenter'),\n name: 'Presenter',\n author: 'DXOS',\n description: trim`\n Transform existing workspace objects into interactive presentation slideshows without\n duplicating content. Markdown documents are split into slides on horizontal \\`---\\`\n separators and rendered with Reveal.js, giving authors a familiar authoring surface\n with full Markdown syntax. Collections can optionally be presented slide-by-slide,\n with each member object rendered by its own plugin surface.\n\n Activate presentation mode for any supported object via the action menu or the\n Shift+Cmd+P (macOS) / Shift+Alt+P (Windows/Linux) keyboard shortcut. The presenter\n opens in a solo fullscreen layout managed by the Deck plugin, keeping the rest of the\n workspace undisturbed.\n\n Navigation controls and a page-number indicator are shown during collection\n slideshows. Pressing Escape exits fullscreen and returns to the originating document\n or collection view. All navigation is keyboard-accessible.\n\n Collaboration is inherent: because slides are backed by live ECHO objects, edits made\n by any peer in the workspace are immediately reflected in an open presentation without\n any manual refresh.\n `,\n icon: 'ph--presentation--regular',\n iconHue: 'indigo',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-presenter',\n spec: 'PLUGIN.mdl',\n});\n"],
5
+ "mappings": ";AAIA,SAASA,cAAc;AACvB,SAASC,WAAW;AACpB,SAASC,YAAY;AAEd,IAAMC,OAAOH,OAAOI,SAAS;EAClCC,KAAKJ,IAAIK,KAAK,2BAAA;EACdC,MAAM;EACNC,QAAQ;EACRC,aAAaP;;;;;;;;;;;;;;;;;;;;EAoBbQ,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;AACR,CAAA;",
6
+ "names": ["Plugin", "DXN", "trim", "meta", "makeMeta", "key", "make", "name", "author", "description", "icon", "iconHue", "source", "spec"]
7
+ }
@@ -2,10 +2,9 @@
2
2
  import { useAtomValue } from "@effect-atom/atom-react";
3
3
  import { useCallback, useMemo } from "react";
4
4
  import { useCapability, useOperationInvoker } from "@dxos/app-framework/ui";
5
- import { LayoutOperation } from "@dxos/app-toolkit";
5
+ import { LayoutOperation, getObjectPathFromObject, getSpacePath } from "@dxos/app-toolkit";
6
6
  import { Obj } from "@dxos/echo";
7
- import { DeckCapabilities } from "@dxos/plugin-deck";
8
- import { DeckOperation } from "@dxos/plugin-deck/types";
7
+ import { DeckCapabilities, DeckOperation } from "@dxos/plugin-deck";
9
8
  var useExitPresenter = (object) => {
10
9
  const { invokePromise } = useOperationInvoker();
11
10
  const stateAtom = useCapability(DeckCapabilities.State);
@@ -15,18 +14,19 @@ var useExitPresenter = (object) => {
15
14
  state.activeDeck
16
15
  ]);
17
16
  return useCallback(() => {
18
- const objectId = Obj.getDXN(object).toString();
17
+ const objectPath = getObjectPathFromObject(object);
18
+ const db = Obj.getDatabase(object);
19
19
  if (deck?.fullscreen) {
20
20
  void invokePromise(DeckOperation.Adjust, {
21
21
  type: "solo--fullscreen",
22
- id: objectId
22
+ id: objectPath
23
23
  });
24
24
  }
25
25
  return invokePromise(LayoutOperation.Open, {
26
26
  subject: [
27
- objectId
27
+ objectPath
28
28
  ],
29
- workspace: Obj.getDatabase(object)?.spaceId
29
+ workspace: db ? getSpacePath(db.spaceId) : void 0
30
30
  });
31
31
  }, [
32
32
  invokePromise,
@@ -38,4 +38,4 @@ var useExitPresenter = (object) => {
38
38
  export {
39
39
  useExitPresenter
40
40
  };
41
- //# sourceMappingURL=chunk-46CHA6Y5.mjs.map
41
+ //# sourceMappingURL=chunk-V323QBC3.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/useExitPresenter.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport { useCallback, useMemo } from 'react';\n\nimport { useCapability, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation, getObjectPathFromObject, getSpacePath } from '@dxos/app-toolkit';\nimport { Obj } from '@dxos/echo';\nimport { DeckCapabilities, DeckOperation } from '@dxos/plugin-deck';\n\nexport const useExitPresenter = (object: any) => {\n const { invokePromise } = useOperationInvoker();\n const stateAtom = useCapability(DeckCapabilities.State);\n const state = useAtomValue(stateAtom);\n\n // Compute deck from decks[activeDeck] since the getter doesn't survive spread operations.\n const deck = useMemo(() => state.decks[state.activeDeck], [state.decks, state.activeDeck]);\n\n return useCallback(() => {\n const objectPath = getObjectPathFromObject(object);\n const db = Obj.getDatabase(object);\n if (deck?.fullscreen) {\n void invokePromise(DeckOperation.Adjust, {\n type: 'solo--fullscreen' as const,\n id: objectPath,\n });\n }\n\n return invokePromise(LayoutOperation.Open, {\n subject: [objectPath],\n workspace: db ? getSpacePath(db.spaceId) : undefined,\n });\n }, [invokePromise, object, deck]);\n};\n"],
5
+ "mappings": ";AAIA,SAASA,oBAAoB;AAC7B,SAASC,aAAaC,eAAe;AAErC,SAASC,eAAeC,2BAA2B;AACnD,SAASC,iBAAiBC,yBAAyBC,oBAAoB;AACvE,SAASC,WAAW;AACpB,SAASC,kBAAkBC,qBAAqB;AAEzC,IAAMC,mBAAmB,CAACC,WAAAA;AAC/B,QAAM,EAAEC,cAAa,IAAKT,oBAAAA;AAC1B,QAAMU,YAAYX,cAAcM,iBAAiBM,KAAK;AACtD,QAAMC,QAAQhB,aAAac,SAAAA;AAG3B,QAAMG,OAAOf,QAAQ,MAAMc,MAAME,MAAMF,MAAMG,UAAU,GAAG;IAACH,MAAME;IAAOF,MAAMG;GAAW;AAEzF,SAAOlB,YAAY,MAAA;AACjB,UAAMmB,aAAad,wBAAwBM,MAAAA;AAC3C,UAAMS,KAAKb,IAAIc,YAAYV,MAAAA;AAC3B,QAAIK,MAAMM,YAAY;AACpB,WAAKV,cAAcH,cAAcc,QAAQ;QACvCC,MAAM;QACNC,IAAIN;MACN,CAAA;IACF;AAEA,WAAOP,cAAcR,gBAAgBsB,MAAM;MACzCC,SAAS;QAACR;;MACVS,WAAWR,KAAKd,aAAac,GAAGS,OAAO,IAAIC;IAC7C,CAAA;EACF,GAAG;IAAClB;IAAeD;IAAQK;GAAK;AAClC;",
6
+ "names": ["useAtomValue", "useCallback", "useMemo", "useCapability", "useOperationInvoker", "LayoutOperation", "getObjectPathFromObject", "getSpacePath", "Obj", "DeckCapabilities", "DeckOperation", "useExitPresenter", "object", "invokePromise", "stateAtom", "State", "state", "deck", "decks", "activeDeck", "objectPath", "db", "getDatabase", "fullscreen", "Adjust", "type", "id", "Open", "subject", "workspace", "spaceId", "undefined"]
7
+ }
@@ -0,0 +1,69 @@
1
+ import {
2
+ __export
3
+ } from "./chunk-J5LGTIGS.mjs";
4
+
5
+ // src/types/index.ts
6
+ import { createContext } from "react";
7
+
8
+ // src/types/PresenterCapabilities.ts
9
+ var PresenterCapabilities_exports = {};
10
+ __export(PresenterCapabilities_exports, {
11
+ Settings: () => Settings
12
+ });
13
+ import { Capability } from "@dxos/app-framework";
14
+ import { meta } from "#meta";
15
+ var Settings = Capability.make(`${meta.id}.capability.settings`);
16
+
17
+ // src/types/PresenterOperation.ts
18
+ var PresenterOperation_exports = {};
19
+ __export(PresenterOperation_exports, {
20
+ TogglePresentation: () => TogglePresentation
21
+ });
22
+ import * as Schema from "effect/Schema";
23
+ import { Operation } from "@dxos/compute";
24
+ import { Collection, Type, DXN } from "@dxos/echo";
25
+ import { Markdown } from "@dxos/plugin-markdown";
26
+ import { meta as meta2 } from "#meta";
27
+ var makeKey = (name) => DXN.make(`${meta2.id}.operation.${name}`);
28
+ var TogglePresentation = Operation.make({
29
+ meta: {
30
+ key: makeKey("togglePresentation"),
31
+ name: "Toggle Presentation",
32
+ icon: "ph--presentation--regular"
33
+ },
34
+ input: Schema.Struct({
35
+ object: Schema.Union(Type.getSchema(Markdown.Document), Type.getSchema(Collection.Collection)),
36
+ state: Schema.optional(Schema.Boolean)
37
+ }),
38
+ output: Schema.Void
39
+ });
40
+
41
+ // src/types/Settings.ts
42
+ var Settings_exports = {};
43
+ __export(Settings_exports, {
44
+ Settings: () => Settings2
45
+ });
46
+ import * as Schema2 from "effect/Schema";
47
+ var Settings2 = Schema2.mutable(Schema2.Struct({
48
+ presentCollections: Schema2.optional(Schema2.Boolean.annotations({
49
+ title: "Present collections (experimental)",
50
+ description: "Enable presenting collections of documents as a slideshow."
51
+ }))
52
+ }));
53
+
54
+ // src/types/index.ts
55
+ var PresenterContext = createContext({
56
+ running: false,
57
+ start: () => {
58
+ },
59
+ stop: () => {
60
+ }
61
+ });
62
+
63
+ export {
64
+ PresenterCapabilities_exports,
65
+ PresenterOperation_exports,
66
+ Settings_exports,
67
+ PresenterContext
68
+ };
69
+ //# sourceMappingURL=chunk-VVALMI52.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/index.ts", "../../../src/types/PresenterCapabilities.ts", "../../../src/types/PresenterOperation.ts", "../../../src/types/Settings.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Context, createContext } from 'react';\n\nexport type PresenterContextType = {\n running: boolean;\n start: () => void;\n stop: () => void;\n};\n\nexport const PresenterContext: Context<PresenterContextType> = createContext<PresenterContextType>({\n running: false,\n start: () => {},\n stop: () => {},\n});\n\nexport * as PresenterCapabilities from './PresenterCapabilities';\nexport * as PresenterOperation from './PresenterOperation';\nexport * as Settings from './Settings';\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type Atom } from '@effect-atom/atom-react';\n\nimport { Capability } from '@dxos/app-framework';\n\nimport { meta } from '#meta';\n\n// Inline import to avoid `Settings` namespace alias colliding with the\n// `Settings` capability export below.\nexport const Settings = Capability.make<Atom.Writable<import('./Settings').Settings>>(`${meta.id}.capability.settings`);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { Operation } from '@dxos/compute';\nimport { Collection, Type, DXN } from '@dxos/echo';\nimport { Markdown } from '@dxos/plugin-markdown';\n\nimport { meta } from '#meta';\n\nconst makeKey = (name: string) => DXN.make(`${meta.id}.operation.${name}`);\n\n// TODO(wittjosiah): This appears to be unused.\nexport const TogglePresentation = Operation.make({\n meta: {\n key: makeKey('togglePresentation'),\n name: 'Toggle Presentation',\n icon: 'ph--presentation--regular',\n },\n input: Schema.Struct({\n object: Schema.Union(Type.getSchema(Markdown.Document), Type.getSchema(Collection.Collection)),\n state: Schema.optional(Schema.Boolean),\n }),\n output: Schema.Void,\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nexport const Settings = Schema.mutable(\n Schema.Struct({\n presentCollections: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Present collections (experimental)',\n description: 'Enable presenting collections of documents as a slideshow.',\n }),\n ),\n }),\n);\n\nexport interface Settings extends Schema.Schema.Type<typeof Settings> {}\n"],
5
+ "mappings": ";;;;;AAIA,SAAuBA,qBAAqB;;;ACJ5C;;;;AAQA,SAASC,kBAAkB;AAE3B,SAASC,YAAY;AAId,IAAMC,WAAWF,WAAWG,KAAmD,GAAGF,KAAKG,EAAE,sBAAsB;;;ACdtH;;;;AAMA,YAAYC,YAAY;AAExB,SAASC,iBAAiB;AAC1B,SAASC,YAAYC,MAAMC,WAAW;AACtC,SAASC,gBAAgB;AAEzB,SAASC,QAAAA,aAAY;AAErB,IAAMC,UAAU,CAACC,SAAiBJ,IAAIK,KAAK,GAAGH,MAAKI,EAAE,cAAcF,IAAAA,EAAM;AAGlE,IAAMG,qBAAqBV,UAAUQ,KAAK;EAC/CH,MAAM;IACJM,KAAKL,QAAQ,oBAAA;IACbC,MAAM;IACNK,MAAM;EACR;EACAC,OAAcC,cAAO;IACnBC,QAAeC,aAAMd,KAAKe,UAAUb,SAASc,QAAQ,GAAGhB,KAAKe,UAAUhB,WAAWA,UAAU,CAAA;IAC5FkB,OAAcC,gBAAgBC,cAAO;EACvC,CAAA;EACAC,QAAeC;AACjB,CAAA;;;AC5BA;;kBAAAC;;AAMA,YAAYC,aAAY;AAEjB,IAAMD,YAAkBE,gBACtBC,eAAO;EACZC,oBAA2BC,iBAClBC,gBAAQC,YAAY;IACzBC,OAAO;IACPC,aAAa;EACf,CAAA,CAAA;AAEJ,CAAA,CAAA;;;AHJK,IAAMC,mBAAkDC,cAAoC;EACjGC,SAAS;EACTC,OAAO,MAAA;EAAO;EACdC,MAAM,MAAA;EAAO;AACf,CAAA;",
6
+ "names": ["createContext", "Capability", "meta", "Settings", "make", "id", "Schema", "Operation", "Collection", "Type", "DXN", "Markdown", "meta", "makeKey", "name", "make", "id", "TogglePresentation", "key", "icon", "input", "Struct", "object", "Union", "getSchema", "Document", "state", "optional", "Boolean", "output", "Void", "Settings", "Schema", "mutable", "Struct", "presentCollections", "optional", "Boolean", "annotations", "title", "description", "PresenterContext", "createContext", "running", "start", "stop"]
7
+ }
@@ -1,8 +1,13 @@
1
- // src/components/Markdown/Container.tsx
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/components/index.ts
4
+ import { lazy } from "react";
5
+
6
+ // src/components/Markdown/Panel.tsx
2
7
  import React, { useState } from "react";
3
8
  import { useResizeDetector } from "react-resize-detector";
4
9
  import { mx } from "@dxos/ui-theme";
5
- var Container = ({ children, classNames }) => {
10
+ var Panel = ({ children, classNames }) => {
6
11
  const [props, setProps] = useState({});
7
12
  const { ref: containerRef, width, height } = useResizeDetector({
8
13
  refreshMode: "debounce",
@@ -23,7 +28,7 @@ var Container = ({ children, classNames }) => {
23
28
  ref: containerRef,
24
29
  className: mx("flex grow relative overflow-hidden bg-attention-surface", classNames)
25
30
  }, /* @__PURE__ */ React.createElement("div", {
26
- className: mx("flex w-full h-full overflow-hidden absolute"),
31
+ className: mx("dx-container absolute"),
27
32
  style: props
28
33
  }, width && height && children));
29
34
  };
@@ -42,6 +47,7 @@ var createLayoutProps = ({ width, height }) => {
42
47
  };
43
48
 
44
49
  // src/components/Markdown/Slide.tsx
50
+ import "highlight.js/styles/github.css";
45
51
  import { h } from "hastscript";
46
52
  import React2 from "react";
47
53
  import ReactMarkdown from "react-markdown";
@@ -49,7 +55,6 @@ import rehypeAddClasses from "rehype-add-classes";
49
55
  import rehypeHighlight from "rehype-highlight";
50
56
  import remarkFrontmatter from "remark-frontmatter";
51
57
  import remarkParseFrontmatter from "remark-parse-frontmatter";
52
- import "highlight.js/styles/github.css";
53
58
 
54
59
  // raw-loader:/__w/dxos/dxos/packages/plugins/plugin-presenter/src/components/Markdown/styles.css?raw
55
60
  var styles_default = "/*!\n Theme: GitHub Dark\n Description: Dark theme as seen on github.com\n Author: github.com\n Maintainer: @Hirse\n Updated: 2021-05-15\n Outdated base version: https://github.com/primer/github-syntax-dark\n Current colors taken from GitHub's CSS\n*/\n/* TODO(burdon): Use tokens. */\n.dark pre code.hljs {\n display: block;\n overflow-x: auto;\n padding: 1em;\n}\n.dark code.hljs {\n padding: 3px 5px;\n}\n.dark .hljs {\n color: #c9d1d9;\n background: #0d1117;\n}\n.dark .hljs-doctag,\n.dark .hljs-keyword,\n.dark .hljs-meta .hljs-keyword,\n.dark .hljs-template-tag,\n.dark .hljs-template-variable,\n.dark .hljs-type,\n.dark .hljs-variable.language_ {\n color: #ff7b72;\n}\n.dark .hljs-title,\n.dark .hljs-title.class_,\n.dark .hljs-title.class_.inherited__,\n.dark .hljs-title.function_ {\n color: #d2a8ff;\n}\n.dark .hljs-attr,\n.dark .hljs-attribute,\n.dark .hljs-literal,\n.dark .hljs-meta,\n.dark .hljs-number,\n.dark .hljs-operator,\n.dark .hljs-variable,\n.dark .hljs-selector-attr,\n.dark .hljs-selector-class,\n.dark .hljs-selector-id {\n color: #79c0ff;\n}\n.dark .hljs-regexp,\n.dark .hljs-string,\n.dark .hljs-meta .hljs-string {\n color: #a5d6ff;\n}\n.dark .hljs-built_in,\n.dark .hljs-symbol {\n color: #ffa657;\n}\n.dark .hljs-comment,\n.dark .hljs-code,\n.dark .hljs-formula {\n color: #8b949e;\n}\n.dark .hljs-name,\n.dark .hljs-quote,\n.dark .hljs-selector-tag,\n.dark .hljs-selector-pseudo {\n color: #7ee787;\n}\n.dark .hljs-subst {\n color: #c9d1d9;\n}\n.dark .hljs-section {\n color: #1f6feb;\n font-weight: bold;\n}\n.dark .hljs-bullet {\n color: #f2cc60;\n}\n.dark .hljs-emphasis {\n color: #c9d1d9;\n font-style: italic;\n}\n.dark .hljs-strong {\n color: #c9d1d9;\n font-weight: bold;\n}\n.dark .hljs-addition {\n color: #aff5b4;\n background-color: #033a16;\n}\n.dark .hljs-deletion {\n color: #ffdcd7;\n background-color: #67060c;\n}\n.dark .hljs-char.escape_,\n.dark .hljs-link,\n.dark .hljs-params,\n.dark .hljs-property,\n.dark .hljs-punctuation,\n.dark .hljs-tag {\n /* purposely ignored */\n all: unset;\n}\n";
@@ -182,12 +187,15 @@ var components = {
182
187
 
183
188
  // src/components/Presenter/Layout.tsx
184
189
  import React3 from "react";
185
- import { mx as mx2 } from "@dxos/ui-theme";
186
- var Layout = ({ children, classNames, topLeft, topRight, bottomLeft, bottomRight }) => {
190
+ import { composable, composableProps } from "@dxos/react-ui";
191
+ var Layout = composable(({ children, topLeft, topRight, bottomLeft, bottomRight, ...props }, forwardedRef) => {
187
192
  return /* @__PURE__ */ React3.createElement("div", {
188
- className: mx2("flex grow relative overflow-hidden bg-attention-surface", classNames)
193
+ ...composableProps(props, {
194
+ classNames: "flex grow relative overflow-hidden bg-attention-surface"
195
+ }),
196
+ ref: forwardedRef
189
197
  }, /* @__PURE__ */ React3.createElement("div", {
190
- className: mx2("flex flex-col grow overflow-hidden")
198
+ className: "flex flex-col grow overflow-hidden"
191
199
  }, children), /* @__PURE__ */ React3.createElement("div", {
192
200
  className: "z-[200]"
193
201
  }, /* @__PURE__ */ React3.createElement("div", {
@@ -199,7 +207,7 @@ var Layout = ({ children, classNames, topLeft, topRight, bottomLeft, bottomRight
199
207
  }, bottomLeft), /* @__PURE__ */ React3.createElement("div", {
200
208
  className: "absolute bottom-4 right-4"
201
209
  }, bottomRight)));
202
- };
210
+ });
203
211
 
204
212
  // src/components/Presenter/Pager.tsx
205
213
  import React4, { useEffect } from "react";
@@ -334,7 +342,7 @@ import Reveal from "reveal.js";
334
342
  import RevealHighlight from "reveal.js/plugin/highlight/highlight";
335
343
  import RevealMarkdown from "reveal.js/plugin/markdown/plugin.js";
336
344
  import { useAsyncEffect } from "@dxos/react-ui";
337
- import { mx as mx3 } from "@dxos/ui-theme";
345
+ import { composable as composable2, composableProps as composableProps2 } from "@dxos/react-ui";
338
346
  var styles = `
339
347
  <style type="text/css">
340
348
  .reveal h1 {
@@ -375,7 +383,7 @@ var styles = `
375
383
  }
376
384
  </style>
377
385
  `;
378
- var RevealPlayer = ({ classNames, content, slide, fullscreen = true, onExit }) => {
386
+ var RevealPlayer = composable2(({ content, slide, fullscreen = true, onExit, children, ...props }, forwardedRef) => {
379
387
  const deckDivRef = useRef(null);
380
388
  const deckRef = useRef(null);
381
389
  useAsyncEffect(async () => {
@@ -442,9 +450,15 @@ var RevealPlayer = ({ classNames, content, slide, fullscreen = true, onExit }) =
442
450
  };
443
451
  });
444
452
  return /* @__PURE__ */ React5.createElement("div", {
445
- className: mx3("grid place-items-center w-full h-full overflow-hidden bg-black", fullscreen && "absolute inset-0", classNames)
453
+ ...composableProps2(props, {
454
+ classNames: [
455
+ "dx-container grid place-items-center bg-black",
456
+ fullscreen && "absolute inset-0"
457
+ ]
458
+ }),
459
+ ref: forwardedRef
446
460
  }, /* @__PURE__ */ React5.createElement("div", {
447
- className: "relative aspect-video w-full h-full h-auto max-h-full overflow-hidden"
461
+ className: "relative aspect-video h-full w-full h-auto max-h-full overflow-hidden"
448
462
  }, /* @__PURE__ */ React5.createElement("div", {
449
463
  ref: deckDivRef,
450
464
  className: "absolute inset-0 reveal"
@@ -471,15 +485,18 @@ var RevealPlayer = ({ classNames, content, slide, fullscreen = true, onExit }) =
471
485
  content
472
486
  ].join("\n")
473
487
  }))))));
474
- };
488
+ });
475
489
 
490
+ // src/components/index.ts
491
+ var PresenterSettings = lazy(() => import("../PresenterSettings-2G4XD4QY.mjs"));
476
492
  export {
477
- Container,
478
- Slide,
479
493
  Layout,
480
- Pager,
481
494
  PageNumber,
482
- StartButton,
483
- RevealPlayer
495
+ Pager,
496
+ Panel,
497
+ PresenterSettings,
498
+ RevealPlayer,
499
+ Slide,
500
+ StartButton
484
501
  };
485
- //# sourceMappingURL=chunk-BHTOR7TG.mjs.map
502
+ //# sourceMappingURL=index.mjs.map