@dxos/plugin-presenter 0.8.4-main.67995b8 → 0.8.4-main.6fa680abb7
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/CollectionPresenterContainer-IFILQWPJ.mjs +52 -0
- package/dist/lib/browser/CollectionPresenterContainer-IFILQWPJ.mjs.map +7 -0
- package/dist/lib/browser/DocumentPresenterContainer-PMS5FH4A.mjs +28 -0
- package/dist/lib/browser/DocumentPresenterContainer-PMS5FH4A.mjs.map +7 -0
- package/dist/lib/browser/MarkdownSlide-EGVUVP2N.mjs +23 -0
- package/dist/lib/browser/MarkdownSlide-EGVUVP2N.mjs.map +7 -0
- package/dist/lib/browser/PresenterSettings-H3ELNHGX.mjs +31 -0
- package/dist/lib/browser/PresenterSettings-H3ELNHGX.mjs.map +7 -0
- package/dist/lib/browser/app-graph-builder-T2BJ5XUZ.mjs +105 -0
- package/dist/lib/browser/app-graph-builder-T2BJ5XUZ.mjs.map +7 -0
- package/dist/lib/browser/chunk-GQBEHCZW.mjs +42 -0
- package/dist/lib/browser/chunk-GQBEHCZW.mjs.map +7 -0
- package/dist/lib/browser/chunk-PBH33Y3O.mjs +50 -0
- package/dist/lib/browser/chunk-PBH33Y3O.mjs.map +7 -0
- package/dist/lib/browser/chunk-PYBNNNNK.mjs +18 -0
- package/dist/lib/browser/chunk-PYBNNNNK.mjs.map +7 -0
- package/dist/lib/browser/chunk-YNKUN3CU.mjs +485 -0
- package/dist/lib/browser/chunk-YNKUN3CU.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +39 -40
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-surface-XXUUAQNP.mjs +67 -0
- package/dist/lib/browser/react-surface-XXUUAQNP.mjs.map +7 -0
- package/dist/lib/browser/settings-FBHSLR6P.mjs +32 -0
- package/dist/lib/browser/settings-FBHSLR6P.mjs.map +7 -0
- package/dist/types/src/PresenterPlugin.d.ts +2 -1
- package/dist/types/src/PresenterPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +3 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/index.d.ts +7 -0
- package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/settings.d.ts +10 -0
- package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
- package/dist/types/src/components/Markdown/Panel.d.ts +8 -0
- package/dist/types/src/components/Markdown/Panel.d.ts.map +1 -0
- package/dist/types/src/components/Markdown/Panel.stories.d.ts +18 -0
- package/dist/types/src/components/Markdown/Panel.stories.d.ts.map +1 -0
- package/dist/types/src/components/Markdown/Slide.d.ts +1 -3
- package/dist/types/src/components/Markdown/Slide.d.ts.map +1 -1
- package/dist/types/src/components/Markdown/Slide.stories.d.ts +11 -12
- package/dist/types/src/components/Markdown/Slide.stories.d.ts.map +1 -1
- package/dist/types/src/components/Markdown/index.d.ts +1 -1
- package/dist/types/src/components/Markdown/index.d.ts.map +1 -1
- package/dist/types/src/components/Presenter/Pager.d.ts +1 -1
- package/dist/types/src/components/Presenter/Pager.d.ts.map +1 -1
- package/dist/types/src/components/Presenter/Pager.stories.d.ts +12 -4
- package/dist/types/src/components/Presenter/Pager.stories.d.ts.map +1 -1
- package/dist/types/src/components/RevealPlayer/RevealPlayer.d.ts.map +1 -1
- package/dist/types/src/components/RevealPlayer/RevealPlayer.stories.d.ts +18 -2
- package/dist/types/src/components/RevealPlayer/RevealPlayer.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -10
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/CollectionPresenterContainer/CollectionPresenterContainer.d.ts +7 -0
- package/dist/types/src/containers/CollectionPresenterContainer/CollectionPresenterContainer.d.ts.map +1 -0
- package/dist/types/src/containers/CollectionPresenterContainer/index.d.ts +3 -0
- package/dist/types/src/containers/CollectionPresenterContainer/index.d.ts.map +1 -0
- package/dist/types/src/{components/MarkdownSlide.d.ts → containers/DocumentPresenterContainer/DocumentPresenterContainer.d.ts} +2 -3
- package/dist/types/src/containers/DocumentPresenterContainer/DocumentPresenterContainer.d.ts.map +1 -0
- package/dist/types/src/containers/DocumentPresenterContainer/index.d.ts +3 -0
- package/dist/types/src/containers/DocumentPresenterContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/MarkdownSlide/MarkdownSlide.d.ts +8 -0
- package/dist/types/src/containers/MarkdownSlide/MarkdownSlide.d.ts.map +1 -0
- package/dist/types/src/containers/MarkdownSlide/index.d.ts +3 -0
- package/dist/types/src/containers/MarkdownSlide/index.d.ts.map +1 -0
- package/dist/types/src/containers/PresenterSettings/PresenterSettings.d.ts +8 -0
- package/dist/types/src/containers/PresenterSettings/PresenterSettings.d.ts.map +1 -0
- package/dist/types/src/containers/PresenterSettings/index.d.ts +3 -0
- package/dist/types/src/containers/PresenterSettings/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +6 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts +2 -3
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +36 -26
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/useExitPresenter.d.ts +2 -3
- package/dist/types/src/useExitPresenter.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +48 -41
- package/src/PresenterPlugin.tsx +9 -24
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +112 -0
- package/src/capabilities/app-graph-builder/index.ts +7 -0
- package/src/capabilities/index.ts +3 -5
- package/src/capabilities/react-surface/index.ts +7 -0
- package/src/capabilities/react-surface/react-surface.tsx +71 -0
- package/src/capabilities/settings/index.ts +7 -0
- package/src/capabilities/settings/settings.ts +31 -0
- package/src/components/Markdown/{Container.stories.tsx → Panel.stories.tsx} +24 -23
- package/src/components/Markdown/{Container.tsx → Panel.tsx} +5 -5
- package/src/components/Markdown/Slide.stories.tsx +12 -8
- package/src/components/Markdown/Slide.tsx +12 -128
- package/src/components/Markdown/index.ts +1 -1
- package/src/components/Markdown/styles.css +104 -0
- package/src/components/Markdown/theme.ts +5 -5
- package/src/components/Markdown/typings.d.ts +8 -0
- package/src/components/Presenter/Layout.tsx +2 -2
- package/src/components/Presenter/Pager.stories.tsx +10 -10
- package/src/components/Presenter/Pager.tsx +53 -18
- package/src/components/RevealPlayer/RevealPlayer.stories.tsx +8 -6
- package/src/components/RevealPlayer/RevealPlayer.tsx +66 -59
- package/src/components/index.ts +3 -7
- package/src/containers/CollectionPresenterContainer/CollectionPresenterContainer.tsx +43 -0
- package/src/containers/CollectionPresenterContainer/index.ts +7 -0
- package/src/containers/DocumentPresenterContainer/DocumentPresenterContainer.tsx +23 -0
- package/src/containers/DocumentPresenterContainer/index.ts +7 -0
- package/src/{components → containers/MarkdownSlide}/MarkdownSlide.tsx +9 -7
- package/src/containers/MarkdownSlide/index.ts +7 -0
- package/src/containers/PresenterSettings/PresenterSettings.tsx +35 -0
- package/src/containers/PresenterSettings/index.ts +7 -0
- package/src/containers/index.ts +10 -0
- package/src/meta.ts +9 -6
- package/src/translations.ts +1 -0
- package/src/types.ts +18 -10
- package/src/useExitPresenter.ts +26 -24
- package/dist/lib/browser/CollectionPresenterContainer-IPDW4HZR.mjs +0 -191
- package/dist/lib/browser/CollectionPresenterContainer-IPDW4HZR.mjs.map +0 -7
- package/dist/lib/browser/DocumentPresenterContainer-LJBJM5UB.mjs +0 -185
- package/dist/lib/browser/DocumentPresenterContainer-LJBJM5UB.mjs.map +0 -7
- package/dist/lib/browser/MarkdownSlide-KG7ESCSU.mjs +0 -336
- package/dist/lib/browser/MarkdownSlide-KG7ESCSU.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-LURIPUEV.mjs +0 -77
- package/dist/lib/browser/app-graph-builder-LURIPUEV.mjs.map +0 -7
- package/dist/lib/browser/chunk-QWJM3ADC.mjs +0 -37
- package/dist/lib/browser/chunk-QWJM3ADC.mjs.map +0 -7
- package/dist/lib/browser/chunk-TANLITL2.mjs +0 -36
- package/dist/lib/browser/chunk-TANLITL2.mjs.map +0 -7
- package/dist/lib/browser/chunk-VSD5LSE5.mjs +0 -15
- package/dist/lib/browser/chunk-VSD5LSE5.mjs.map +0 -7
- package/dist/lib/browser/chunk-W4IR3DJE.mjs +0 -39
- package/dist/lib/browser/chunk-W4IR3DJE.mjs.map +0 -7
- package/dist/lib/browser/react-surface-3SPF2ANF.mjs +0 -57
- package/dist/lib/browser/react-surface-3SPF2ANF.mjs.map +0 -7
- package/dist/lib/browser/settings-VBRYUIWN.mjs +0 -22
- package/dist/lib/browser/settings-VBRYUIWN.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface.d.ts +0 -4
- package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/settings.d.ts +0 -4
- package/dist/types/src/capabilities/settings.d.ts.map +0 -1
- package/dist/types/src/components/CollectionPresenterContainer.d.ts +0 -7
- package/dist/types/src/components/CollectionPresenterContainer.d.ts.map +0 -1
- package/dist/types/src/components/DocumentPresenterContainer.d.ts +0 -7
- package/dist/types/src/components/DocumentPresenterContainer.d.ts.map +0 -1
- package/dist/types/src/components/Markdown/Container.d.ts +0 -8
- package/dist/types/src/components/Markdown/Container.d.ts.map +0 -1
- package/dist/types/src/components/Markdown/Container.stories.d.ts +0 -26
- package/dist/types/src/components/Markdown/Container.stories.d.ts.map +0 -1
- package/dist/types/src/components/MarkdownSlide.d.ts.map +0 -1
- package/dist/types/src/components/PresenterSettings.d.ts +0 -6
- package/dist/types/src/components/PresenterSettings.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder.ts +0 -82
- package/src/capabilities/react-surface.tsx +0 -53
- package/src/capabilities/settings.ts +0 -19
- package/src/components/CollectionPresenterContainer.tsx +0 -43
- package/src/components/DocumentPresenterContainer.tsx +0 -22
- package/src/components/PresenterSettings.tsx +0 -26
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
// src/components/Markdown/Panel.tsx
|
|
2
|
+
import React, { useState } from "react";
|
|
3
|
+
import { useResizeDetector } from "react-resize-detector";
|
|
4
|
+
import { mx } from "@dxos/ui-theme";
|
|
5
|
+
var Panel = ({ children, classNames }) => {
|
|
6
|
+
const [props, setProps] = useState({});
|
|
7
|
+
const { ref: containerRef, width, height } = useResizeDetector({
|
|
8
|
+
refreshMode: "debounce",
|
|
9
|
+
refreshRate: 200,
|
|
10
|
+
refreshOptions: {
|
|
11
|
+
leading: true
|
|
12
|
+
},
|
|
13
|
+
onResize: ({ width: width2, height: height2 }) => {
|
|
14
|
+
if (width2 && height2) {
|
|
15
|
+
setProps(createLayoutProps({
|
|
16
|
+
width: width2,
|
|
17
|
+
height: height2
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
23
|
+
ref: containerRef,
|
|
24
|
+
className: mx("flex grow relative overflow-hidden bg-attention-surface", classNames)
|
|
25
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
26
|
+
className: mx("flex w-full h-full overflow-hidden absolute"),
|
|
27
|
+
style: props
|
|
28
|
+
}, width && height && children));
|
|
29
|
+
};
|
|
30
|
+
var createLayoutProps = ({ width, height }) => {
|
|
31
|
+
const aspectRatio = 16 / 9;
|
|
32
|
+
const nominalWidth = 2560;
|
|
33
|
+
const nominalHeight = nominalWidth / aspectRatio;
|
|
34
|
+
const scale = Math.min(width / nominalWidth, height / nominalHeight);
|
|
35
|
+
return {
|
|
36
|
+
left: (width - nominalWidth) / 2,
|
|
37
|
+
top: (height - nominalHeight) / 2,
|
|
38
|
+
width: nominalWidth,
|
|
39
|
+
height: nominalHeight,
|
|
40
|
+
transform: `scale(${scale})`
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// src/components/Markdown/Slide.tsx
|
|
45
|
+
import { h } from "hastscript";
|
|
46
|
+
import React2 from "react";
|
|
47
|
+
import ReactMarkdown from "react-markdown";
|
|
48
|
+
import rehypeAddClasses from "rehype-add-classes";
|
|
49
|
+
import rehypeHighlight from "rehype-highlight";
|
|
50
|
+
import remarkFrontmatter from "remark-frontmatter";
|
|
51
|
+
import remarkParseFrontmatter from "remark-parse-frontmatter";
|
|
52
|
+
import "highlight.js/styles/github.css";
|
|
53
|
+
|
|
54
|
+
// raw-loader:/__w/dxos/dxos/packages/plugins/plugin-presenter/src/components/Markdown/styles.css?raw
|
|
55
|
+
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";
|
|
56
|
+
|
|
57
|
+
// src/components/Markdown/theme.ts
|
|
58
|
+
var theme = {
|
|
59
|
+
root: "bg-attention-surface leading-relaxed font-mono",
|
|
60
|
+
padding: "px-40 py-16 gap-8",
|
|
61
|
+
nodes: {
|
|
62
|
+
h1: "text-[80px] text-accent-text",
|
|
63
|
+
h2: "text-[60px] text-accent-text",
|
|
64
|
+
h3: "text-[48px] text-accent-text",
|
|
65
|
+
p: "text-[48px]",
|
|
66
|
+
ul: "my-[16px] ml-12 leading-relaxed list-disc",
|
|
67
|
+
ol: "my-[16px] ml-24 leading-relaxed list-decimal",
|
|
68
|
+
li: "pl-6 text-[48px]",
|
|
69
|
+
pre: "w-full mx-0 my-[32px] p-4 bg-input-surface",
|
|
70
|
+
code: "p-0 text-[40px]"
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// src/components/Markdown/Slide.tsx
|
|
75
|
+
var Slide = ({ content = "", classes = theme.nodes }) => {
|
|
76
|
+
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("style", null, styles_default), /* @__PURE__ */ React2.createElement(ReactMarkdown, {
|
|
77
|
+
components,
|
|
78
|
+
// Markdown to HTML.
|
|
79
|
+
remarkPlugins: [
|
|
80
|
+
[
|
|
81
|
+
remarkFrontmatter,
|
|
82
|
+
"yaml"
|
|
83
|
+
],
|
|
84
|
+
remarkParseFrontmatter
|
|
85
|
+
],
|
|
86
|
+
// HTML processing.
|
|
87
|
+
rehypePlugins: [
|
|
88
|
+
[
|
|
89
|
+
rehypeAddClasses,
|
|
90
|
+
classes
|
|
91
|
+
],
|
|
92
|
+
rehypeHighlight,
|
|
93
|
+
slideLayout
|
|
94
|
+
]
|
|
95
|
+
}, content));
|
|
96
|
+
};
|
|
97
|
+
var slideLayout = (_options = {}) => (tree, file) => {
|
|
98
|
+
const { data: { frontmatter = {} } } = file;
|
|
99
|
+
let content = tree.children;
|
|
100
|
+
const { layout, image } = frontmatter;
|
|
101
|
+
if (image) {
|
|
102
|
+
const img = h("div", {
|
|
103
|
+
class: "flex grow shrink-0 bg-cover bg-center bg-no-repeat",
|
|
104
|
+
style: {
|
|
105
|
+
backgroundImage: `url(${image})`
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
switch (layout) {
|
|
109
|
+
case "fullscreen": {
|
|
110
|
+
content = img;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
case "columns": {
|
|
114
|
+
content = h("div", {
|
|
115
|
+
class: "flex grow grid grid-cols-2"
|
|
116
|
+
}, [
|
|
117
|
+
h("div", {
|
|
118
|
+
class: theme.padding
|
|
119
|
+
}, [
|
|
120
|
+
content
|
|
121
|
+
]),
|
|
122
|
+
img
|
|
123
|
+
]);
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case "rows": {
|
|
127
|
+
content = h("div", {
|
|
128
|
+
class: "flex grow flex-col"
|
|
129
|
+
}, [
|
|
130
|
+
h("div", {
|
|
131
|
+
class: theme.padding
|
|
132
|
+
}, [
|
|
133
|
+
content
|
|
134
|
+
]),
|
|
135
|
+
h("div", {
|
|
136
|
+
class: [
|
|
137
|
+
"flex grow pt-0",
|
|
138
|
+
theme.padding
|
|
139
|
+
]
|
|
140
|
+
}, [
|
|
141
|
+
img
|
|
142
|
+
])
|
|
143
|
+
]);
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
content = h("div", {
|
|
149
|
+
class: [
|
|
150
|
+
"flex grow flex-col",
|
|
151
|
+
theme.padding
|
|
152
|
+
]
|
|
153
|
+
}, [
|
|
154
|
+
content
|
|
155
|
+
]);
|
|
156
|
+
}
|
|
157
|
+
const root = h("div", {
|
|
158
|
+
class: [
|
|
159
|
+
"flex flex-col grow",
|
|
160
|
+
theme.root
|
|
161
|
+
]
|
|
162
|
+
}, [
|
|
163
|
+
content
|
|
164
|
+
]);
|
|
165
|
+
tree.children = [
|
|
166
|
+
root
|
|
167
|
+
];
|
|
168
|
+
};
|
|
169
|
+
var ImageWrapper = ({ node: _, ...props }) => {
|
|
170
|
+
const { alt = "", src } = props;
|
|
171
|
+
return /* @__PURE__ */ React2.createElement("img", {
|
|
172
|
+
alt,
|
|
173
|
+
src
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
var components = {
|
|
177
|
+
img: ({ node, ...props }) => /* @__PURE__ */ React2.createElement(ImageWrapper, {
|
|
178
|
+
node,
|
|
179
|
+
...props
|
|
180
|
+
})
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
// src/components/Presenter/Layout.tsx
|
|
184
|
+
import React3 from "react";
|
|
185
|
+
import { mx as mx2 } from "@dxos/ui-theme";
|
|
186
|
+
var Layout = ({ children, classNames, topLeft, topRight, bottomLeft, bottomRight }) => {
|
|
187
|
+
return /* @__PURE__ */ React3.createElement("div", {
|
|
188
|
+
className: mx2("flex grow relative overflow-hidden bg-attention-surface", classNames)
|
|
189
|
+
}, /* @__PURE__ */ React3.createElement("div", {
|
|
190
|
+
className: mx2("flex flex-col grow overflow-hidden")
|
|
191
|
+
}, children), /* @__PURE__ */ React3.createElement("div", {
|
|
192
|
+
className: "z-[200]"
|
|
193
|
+
}, /* @__PURE__ */ React3.createElement("div", {
|
|
194
|
+
className: "absolute top-4 left-4"
|
|
195
|
+
}, topLeft), /* @__PURE__ */ React3.createElement("div", {
|
|
196
|
+
className: "absolute top-4 right-4"
|
|
197
|
+
}, topRight), /* @__PURE__ */ React3.createElement("div", {
|
|
198
|
+
className: "absolute bottom-4 left-4"
|
|
199
|
+
}, bottomLeft), /* @__PURE__ */ React3.createElement("div", {
|
|
200
|
+
className: "absolute bottom-4 right-4"
|
|
201
|
+
}, bottomRight)));
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// src/components/Presenter/Pager.tsx
|
|
205
|
+
import React4, { useEffect } from "react";
|
|
206
|
+
import { IconButton, useControlledState } from "@dxos/react-ui";
|
|
207
|
+
var Pager = ({ index: indexProp = 0, count = 0, keys, onChange, onExit }) => {
|
|
208
|
+
const [index, setIndex] = useControlledState(indexProp);
|
|
209
|
+
useEffect(() => {
|
|
210
|
+
onChange?.(index);
|
|
211
|
+
}, [
|
|
212
|
+
index
|
|
213
|
+
]);
|
|
214
|
+
const handleChangeIndex = (dir) => {
|
|
215
|
+
setIndex((index2) => {
|
|
216
|
+
const next = index2 + dir;
|
|
217
|
+
return next >= 0 && next < count ? next : index2;
|
|
218
|
+
});
|
|
219
|
+
};
|
|
220
|
+
useEffect(() => {
|
|
221
|
+
if (!keys) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const keydownHandler = (event) => {
|
|
225
|
+
switch (event.key) {
|
|
226
|
+
case "Escape": {
|
|
227
|
+
onExit?.();
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
case "ArrowLeft": {
|
|
231
|
+
if (event.shiftKey) {
|
|
232
|
+
onChange?.(0);
|
|
233
|
+
} else {
|
|
234
|
+
handleChangeIndex(-1);
|
|
235
|
+
}
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
case "ArrowRight": {
|
|
239
|
+
if (event.shiftKey) {
|
|
240
|
+
onChange?.(count - 1);
|
|
241
|
+
} else {
|
|
242
|
+
handleChangeIndex(1);
|
|
243
|
+
}
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
case "ArrowUp": {
|
|
247
|
+
onChange?.(0);
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
case "ArrowDown": {
|
|
251
|
+
onChange?.(count - 1);
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
window.addEventListener("keydown", keydownHandler);
|
|
257
|
+
return () => window.removeEventListener("keydown", keydownHandler);
|
|
258
|
+
}, [
|
|
259
|
+
keys,
|
|
260
|
+
count
|
|
261
|
+
]);
|
|
262
|
+
if (index === void 0 || !count) {
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
return /* @__PURE__ */ React4.createElement("div", {
|
|
266
|
+
className: "flex items-center text-neutral-500"
|
|
267
|
+
}, /* @__PURE__ */ React4.createElement(IconButton, {
|
|
268
|
+
icon: "ph--caret-double-left--regular",
|
|
269
|
+
size: 6,
|
|
270
|
+
label: "Jump to first",
|
|
271
|
+
iconOnly: true,
|
|
272
|
+
noTooltip: true,
|
|
273
|
+
variant: "ghost",
|
|
274
|
+
classNames: "p-0",
|
|
275
|
+
onClick: () => onChange?.(0)
|
|
276
|
+
}), /* @__PURE__ */ React4.createElement(IconButton, {
|
|
277
|
+
icon: "ph--caret-left--regular",
|
|
278
|
+
size: 6,
|
|
279
|
+
label: "Previous",
|
|
280
|
+
iconOnly: true,
|
|
281
|
+
noTooltip: true,
|
|
282
|
+
variant: "ghost",
|
|
283
|
+
classNames: "p-0",
|
|
284
|
+
onClick: () => handleChangeIndex(-1)
|
|
285
|
+
}), /* @__PURE__ */ React4.createElement(IconButton, {
|
|
286
|
+
icon: "ph--caret-right--regular",
|
|
287
|
+
size: 6,
|
|
288
|
+
label: "Next",
|
|
289
|
+
iconOnly: true,
|
|
290
|
+
noTooltip: true,
|
|
291
|
+
variant: "ghost",
|
|
292
|
+
classNames: "p-0",
|
|
293
|
+
onClick: () => handleChangeIndex(1)
|
|
294
|
+
}), /* @__PURE__ */ React4.createElement(IconButton, {
|
|
295
|
+
icon: "ph--caret-double-right--regular",
|
|
296
|
+
size: 6,
|
|
297
|
+
label: "Jump to last",
|
|
298
|
+
iconOnly: true,
|
|
299
|
+
noTooltip: true,
|
|
300
|
+
variant: "ghost",
|
|
301
|
+
classNames: "p-0",
|
|
302
|
+
onClick: () => onChange?.(count - 1)
|
|
303
|
+
}));
|
|
304
|
+
};
|
|
305
|
+
var PageNumber = ({ index = 0, count = 1 }) => {
|
|
306
|
+
if (index === void 0 || !count) {
|
|
307
|
+
return null;
|
|
308
|
+
}
|
|
309
|
+
return /* @__PURE__ */ React4.createElement("div", {
|
|
310
|
+
className: "flex items-center text-neutral-500 text-2xl"
|
|
311
|
+
}, /* @__PURE__ */ React4.createElement("div", null, index + 1, " / ", count));
|
|
312
|
+
};
|
|
313
|
+
var StartButton = ({ running, onClick }) => {
|
|
314
|
+
return /* @__PURE__ */ React4.createElement(IconButton, {
|
|
315
|
+
icon: running ? "ph--x--regular" : "ph--play--regular",
|
|
316
|
+
size: 6,
|
|
317
|
+
label: running ? "Stop" : "Play",
|
|
318
|
+
iconOnly: true,
|
|
319
|
+
noTooltip: true,
|
|
320
|
+
variant: "ghost",
|
|
321
|
+
classNames: "p-0",
|
|
322
|
+
onClick: () => onClick?.(!running)
|
|
323
|
+
});
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
// src/components/RevealPlayer/RevealPlayer.tsx
|
|
327
|
+
import "reveal.js/dist/reveal.css";
|
|
328
|
+
import "reveal.js/dist/theme/black.css";
|
|
329
|
+
import "highlight.js/styles/tokyo-night-dark.css";
|
|
330
|
+
import hljs from "highlight.js";
|
|
331
|
+
import typescript from "highlight.js/lib/languages/typescript";
|
|
332
|
+
import React5, { useRef } from "react";
|
|
333
|
+
import Reveal from "reveal.js";
|
|
334
|
+
import RevealHighlight from "reveal.js/plugin/highlight/highlight";
|
|
335
|
+
import RevealMarkdown from "reveal.js/plugin/markdown/plugin.js";
|
|
336
|
+
import { useAsyncEffect } from "@dxos/react-ui";
|
|
337
|
+
import { mx as mx3 } from "@dxos/ui-theme";
|
|
338
|
+
var styles = `
|
|
339
|
+
<style type="text/css">
|
|
340
|
+
.reveal h1 {
|
|
341
|
+
font-weight: 100;
|
|
342
|
+
font-size: 60px;
|
|
343
|
+
opacity: 0.5;
|
|
344
|
+
}
|
|
345
|
+
.reveal h2 {
|
|
346
|
+
font-weight: 100;
|
|
347
|
+
padding-top: 60px;
|
|
348
|
+
padding-left: 40px;
|
|
349
|
+
font-size: 48px;
|
|
350
|
+
opacity: 0.3;
|
|
351
|
+
}
|
|
352
|
+
.reveal h1, h2, p {
|
|
353
|
+
font-family: "Raleway", sans-serif;
|
|
354
|
+
text-align: left;
|
|
355
|
+
font-weight: 200;
|
|
356
|
+
}
|
|
357
|
+
.reveal ul {
|
|
358
|
+
font-family: "Raleway", sans-serif;
|
|
359
|
+
display: block;
|
|
360
|
+
list-style: "- ";
|
|
361
|
+
}
|
|
362
|
+
.reveal blockquote p {
|
|
363
|
+
text-align: center;
|
|
364
|
+
font-weight: 100;
|
|
365
|
+
padding: 32px;
|
|
366
|
+
}
|
|
367
|
+
.reveal pre {
|
|
368
|
+
margin-left: 0;
|
|
369
|
+
}
|
|
370
|
+
.reveal code {
|
|
371
|
+
font-size: 20px;
|
|
372
|
+
background: #111111;
|
|
373
|
+
color: #eeeeee;
|
|
374
|
+
max-height: unset !important;
|
|
375
|
+
}
|
|
376
|
+
</style>
|
|
377
|
+
`;
|
|
378
|
+
var RevealPlayer = ({ classNames, content, slide, fullscreen = true, onExit }) => {
|
|
379
|
+
const deckDivRef = useRef(null);
|
|
380
|
+
const deckRef = useRef(null);
|
|
381
|
+
useAsyncEffect(async () => {
|
|
382
|
+
if (deckRef.current) {
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
hljs.registerLanguage("typescript", typescript);
|
|
386
|
+
deckRef.current = new Reveal(deckDivRef.current, {
|
|
387
|
+
// view: 'scroll',
|
|
388
|
+
progress: false,
|
|
389
|
+
transition: "none",
|
|
390
|
+
slideNumber: false,
|
|
391
|
+
embedded: true,
|
|
392
|
+
// Disable autoplay to prevent errors in headless environments (e.g., CI).
|
|
393
|
+
autoPlayMedia: false,
|
|
394
|
+
// TODO(burdon): Speaker view requires server to serve popout window.
|
|
395
|
+
// https://revealjs.com/speaker-view
|
|
396
|
+
showNotes: false,
|
|
397
|
+
// width: 1600,
|
|
398
|
+
// height: 900,
|
|
399
|
+
margin: 0.1,
|
|
400
|
+
// center: false,
|
|
401
|
+
// minScale: 0.1,
|
|
402
|
+
// maxScale: 1.4,
|
|
403
|
+
// https://revealjs.com/markdown
|
|
404
|
+
// TODO(burdon): Requires server to serve popout window.
|
|
405
|
+
plugins: [
|
|
406
|
+
RevealMarkdown,
|
|
407
|
+
RevealHighlight
|
|
408
|
+
],
|
|
409
|
+
// See https://marked.js.org/using_advanced#options
|
|
410
|
+
markdown: {
|
|
411
|
+
gfm: true,
|
|
412
|
+
smartypants: true,
|
|
413
|
+
highlight: (code, language) => {
|
|
414
|
+
if (language) {
|
|
415
|
+
return hljs.highlight(code, {
|
|
416
|
+
language
|
|
417
|
+
}).value;
|
|
418
|
+
}
|
|
419
|
+
return hljs.highlightAuto(code).value;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
});
|
|
423
|
+
await deckRef.current.initialize();
|
|
424
|
+
if (slide !== void 0) {
|
|
425
|
+
deckRef.current.slide(slide < 0 ? deckRef.current?.getTotalSlides() + slide : slide - 1);
|
|
426
|
+
}
|
|
427
|
+
deckRef.current.addKeyBinding({
|
|
428
|
+
keyCode: 27,
|
|
429
|
+
key: "Escape",
|
|
430
|
+
description: "Exit full screen"
|
|
431
|
+
}, () => {
|
|
432
|
+
onExit?.();
|
|
433
|
+
});
|
|
434
|
+
return () => {
|
|
435
|
+
try {
|
|
436
|
+
if (deckRef.current) {
|
|
437
|
+
deckRef.current.destroy();
|
|
438
|
+
deckRef.current = null;
|
|
439
|
+
}
|
|
440
|
+
} catch {
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
});
|
|
444
|
+
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)
|
|
446
|
+
}, /* @__PURE__ */ React5.createElement("div", {
|
|
447
|
+
className: "relative aspect-video w-full h-full h-auto max-h-full overflow-hidden"
|
|
448
|
+
}, /* @__PURE__ */ React5.createElement("div", {
|
|
449
|
+
ref: deckDivRef,
|
|
450
|
+
className: "absolute inset-0 reveal"
|
|
451
|
+
}, /* @__PURE__ */ React5.createElement("style", null, /* @__PURE__ */ React5.createElement("link", {
|
|
452
|
+
rel: "preconnect",
|
|
453
|
+
href: "https://fonts.googleapis.com"
|
|
454
|
+
}), /* @__PURE__ */ React5.createElement("link", {
|
|
455
|
+
rel: "preconnect",
|
|
456
|
+
href: "https://fonts.gstatic.com",
|
|
457
|
+
crossOrigin: ""
|
|
458
|
+
}), /* @__PURE__ */ React5.createElement("link", {
|
|
459
|
+
rel: "stylesheet",
|
|
460
|
+
href: "https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100..900;1,100..900&display=swap"
|
|
461
|
+
})), /* @__PURE__ */ React5.createElement("div", {
|
|
462
|
+
className: "slides"
|
|
463
|
+
}, /* @__PURE__ */ React5.createElement("div", {
|
|
464
|
+
className: "text-center!"
|
|
465
|
+
}), /* @__PURE__ */ React5.createElement("section", {
|
|
466
|
+
"data-markdown": []
|
|
467
|
+
}, /* @__PURE__ */ React5.createElement("textarea", {
|
|
468
|
+
"data-template": true,
|
|
469
|
+
defaultValue: [
|
|
470
|
+
styles,
|
|
471
|
+
content
|
|
472
|
+
].join("\n")
|
|
473
|
+
}))))));
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
export {
|
|
477
|
+
Panel,
|
|
478
|
+
Slide,
|
|
479
|
+
Layout,
|
|
480
|
+
Pager,
|
|
481
|
+
PageNumber,
|
|
482
|
+
StartButton,
|
|
483
|
+
RevealPlayer
|
|
484
|
+
};
|
|
485
|
+
//# sourceMappingURL=chunk-YNKUN3CU.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/Markdown/Panel.tsx", "../../../src/components/Markdown/Slide.tsx", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-presenter/src/components/Markdown/styles.css?raw", "../../../src/components/Markdown/theme.ts", "../../../src/components/Presenter/Layout.tsx", "../../../src/components/Presenter/Pager.tsx", "../../../src/components/RevealPlayer/RevealPlayer.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useState } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nexport type PanelProps = ThemedClassName<PropsWithChildren<{}>>;\n\n/**\n * Scaled markdown panel.\n */\nexport const Panel = ({ children, classNames }: PanelProps) => {\n const [props, setProps] = useState({});\n const {\n ref: containerRef,\n width,\n height,\n } = useResizeDetector({\n refreshMode: 'debounce',\n refreshRate: 200,\n refreshOptions: {\n leading: true,\n },\n onResize: ({ width, height }) => {\n if (width && height) {\n setProps(createLayoutProps({ width, height }));\n }\n },\n });\n\n // TODO(burdon): Reconcile highlight colors with markdown editor.\n // https://www.npmjs.com/package/react-markdown\n return (\n <div ref={containerRef} className={mx('flex grow relative overflow-hidden bg-attention-surface', classNames)}>\n <div className={mx('flex w-full h-full overflow-hidden absolute')} style={props}>\n {width && height && children}\n </div>\n </div>\n );\n};\n\n/**\n * Compute CSS properties to transform DIV to be full screen.\n *\n * Display resolutions:\n * window.screen.{availWidth, availHeight}\n * 5K Studio 16.2-inch Macbook Pro\n * Max 5120 x 2880 3456 x 2234\n * Default 2560 x 1440 1728 x 1117 (Actual height 1080 - 37 pixel notch)\n * Aspect 1.77 (16/9) 1.54\n */\nconst createLayoutProps = ({ width, height }: { width: number; height: number }) => {\n // Config.\n const aspectRatio = 16 / 9;\n const nominalWidth = 2560;\n const nominalHeight = nominalWidth / aspectRatio;\n\n // NOTE: Hack to detect full height on Macbook Pro due to notch.\n // const macIntelNotch = 1117 - 1080;\n // const fullscreen =\n // height === screen.availHeight ||\n // (window.navigator.platform === 'MacIntel' && height === screen.availHeight - macIntelNotch);\n\n // If not fullscreen then make scale slightly smaller so there's a natural border.\n // const scaleFactor = fullscreen ? 1 : 0.95;\n\n // Compute scaling factor required.\n const scale = Math.min(width / nominalWidth, height / nominalHeight);\n\n return {\n left: (width - nominalWidth) / 2,\n top: (height - nominalHeight) / 2,\n width: nominalWidth,\n height: nominalHeight,\n transform: `scale(${scale})`,\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { h } from 'hastscript';\nimport React from 'react';\nimport ReactMarkdown, { type Options as ReactMarkdownOptions } from 'react-markdown';\nimport rehypeAddClasses from 'rehype-add-classes';\nimport rehypeHighlight from 'rehype-highlight';\nimport remarkFrontmatter from 'remark-frontmatter';\nimport remarkParseFrontmatter from 'remark-parse-frontmatter';\n\nimport 'highlight.js/styles/github.css';\n\nimport styles from './styles.css?raw';\nimport { theme } from './theme';\n\nexport type SlideProps = {\n content?: string;\n classes?: Record<string, string>;\n};\n\nexport const Slide = ({ content = '', classes = theme.nodes }: SlideProps) => {\n // TODO(thure): `rehype-highlight` ends up using `github.css` from `highlight.js`, but this does not appear to be\n // configurable. Find a way to remove the literal stylesheet here.\n return (\n <>\n <style>{styles}</style>\n <ReactMarkdown\n components={components}\n // Markdown to HTML.\n remarkPlugins={[[remarkFrontmatter, 'yaml'], remarkParseFrontmatter as any]}\n // HTML processing.\n rehypePlugins={[[rehypeAddClasses, classes], rehypeHighlight as any, slideLayout]}\n >\n {content}\n </ReactMarkdown>\n </>\n );\n};\n\n/**\n * Rehype plugin to format DOM based on frontmatter.\n * https://github.com/unifiedjs/unified#plugin\n * TODO(burdon): See tools/presenter: remarkPluginLayout\n * E.g., layout image from front-matter.\n */\nconst slideLayout =\n (_options = {}) =>\n (tree: any, file: any) => {\n const {\n data: { frontmatter = {} },\n } = file;\n\n let content = tree.children;\n const { layout, image } = frontmatter;\n if (image) {\n const img = h('div', {\n class: 'flex grow shrink-0 bg-cover bg-center bg-no-repeat',\n style: {\n backgroundImage: `url(${image})`,\n },\n });\n\n switch (layout) {\n case 'fullscreen': {\n content = img;\n break;\n }\n\n case 'columns': {\n content = h('div', { class: 'flex grow grid grid-cols-2' }, [\n h('div', { class: theme.padding }, [content]),\n img,\n ]);\n break;\n }\n\n case 'rows': {\n content = h('div', { class: 'flex grow flex-col' }, [\n h('div', { class: theme.padding }, [content]),\n h('div', { class: ['flex grow pt-0', theme.padding] }, [img]),\n ]);\n break;\n }\n }\n } else {\n content = h('div', { class: ['flex grow flex-col', theme.padding] }, [content]);\n }\n\n const root = h('div', { class: ['flex flex-col grow', theme.root] }, [content]);\n tree.children = [root];\n };\n\nconst ImageWrapper = ({ node: _, ...props }: { node: any }) => {\n const { alt = '', src } = props as { alt: string; src: string };\n return <img alt={alt} src={src} />;\n};\n\nconst components: ReactMarkdownOptions['components'] = {\n img: ({ node, ...props }) => <ImageWrapper node={node} {...props} />,\n};\n", "/*!\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", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Create theme type and picker.\n\nexport const theme = {\n root: 'bg-attention-surface leading-relaxed font-mono',\n\n padding: 'px-40 py-16 gap-8',\n\n nodes: {\n h1: 'text-[80px] text-accent-text',\n h2: 'text-[60px] text-accent-text',\n h3: 'text-[48px] text-accent-text',\n\n p: 'text-[48px]',\n\n ul: 'my-[16px] ml-12 leading-relaxed list-disc',\n ol: 'my-[16px] ml-24 leading-relaxed list-decimal',\n li: 'pl-6 text-[48px]',\n\n pre: 'w-full mx-0 my-[32px] p-4 bg-input-surface',\n code: 'p-0 text-[40px]',\n },\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type PropsWithChildren, type ReactNode } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nexport type LayoutProps = ThemedClassName<\n PropsWithChildren<{\n className?: string;\n topLeft?: ReactNode;\n topRight?: ReactNode;\n bottomLeft?: ReactNode;\n bottomRight?: ReactNode;\n }>\n>;\n\nexport const Layout = ({ children, classNames, topLeft, topRight, bottomLeft, bottomRight }: LayoutProps) => {\n return (\n <div className={mx('flex grow relative overflow-hidden bg-attention-surface', classNames)}>\n <div className={mx('flex flex-col grow overflow-hidden')}>{children}</div>\n\n <div className='z-[200]'>\n <div className='absolute top-4 left-4'>{topLeft}</div>\n <div className='absolute top-4 right-4'>{topRight}</div>\n <div className='absolute bottom-4 left-4'>{bottomLeft}</div>\n <div className='absolute bottom-4 right-4'>{bottomRight}</div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect } from 'react';\n\nimport { IconButton, useControlledState } from '@dxos/react-ui';\n\nexport type PagerProps = {\n index?: number;\n count?: number;\n keys?: boolean; // TODO(burdon): Rename.\n onChange?: (index: number) => void;\n onExit?: () => void;\n};\n\nexport const Pager = ({ index: indexProp = 0, count = 0, keys, onChange, onExit }: PagerProps) => {\n const [index, setIndex] = useControlledState(indexProp);\n useEffect(() => {\n onChange?.(index);\n }, [index]);\n\n const handleChangeIndex = (dir: number) => {\n setIndex((index) => {\n const next = index + dir;\n return next >= 0 && next < count ? next : index;\n });\n };\n\n // TODO(burdon): Standardize via system key binding.\n useEffect(() => {\n if (!keys) {\n return;\n }\n\n const keydownHandler = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Escape': {\n onExit?.();\n break;\n }\n case 'ArrowLeft': {\n if (event.shiftKey) {\n onChange?.(0);\n } else {\n handleChangeIndex(-1);\n }\n break;\n }\n case 'ArrowRight': {\n if (event.shiftKey) {\n onChange?.(count - 1);\n } else {\n handleChangeIndex(1);\n }\n break;\n }\n case 'ArrowUp': {\n onChange?.(0);\n break;\n }\n case 'ArrowDown': {\n onChange?.(count - 1);\n break;\n }\n }\n };\n\n window.addEventListener('keydown', keydownHandler);\n return () => window.removeEventListener('keydown', keydownHandler);\n }, [keys, count]);\n\n if (index === undefined || !count) {\n return null;\n }\n\n return (\n <div className='flex items-center text-neutral-500'>\n <IconButton\n icon='ph--caret-double-left--regular'\n size={6}\n label='Jump to first'\n iconOnly\n noTooltip\n variant='ghost'\n classNames='p-0'\n onClick={() => onChange?.(0)}\n />\n <IconButton\n icon='ph--caret-left--regular'\n size={6}\n label='Previous'\n iconOnly\n noTooltip\n variant='ghost'\n classNames='p-0'\n onClick={() => handleChangeIndex(-1)}\n />\n <IconButton\n icon='ph--caret-right--regular'\n size={6}\n label='Next'\n iconOnly\n noTooltip\n variant='ghost'\n classNames='p-0'\n onClick={() => handleChangeIndex(1)}\n />\n <IconButton\n icon='ph--caret-double-right--regular'\n size={6}\n label='Jump to last'\n iconOnly\n noTooltip\n variant='ghost'\n classNames='p-0'\n onClick={() => onChange?.(count - 1)}\n />\n </div>\n );\n};\n\nexport type PageNumberProps = {\n index?: number;\n count?: number;\n};\n\nexport const PageNumber = ({ index = 0, count = 1 }: PageNumberProps) => {\n if (index === undefined || !count) {\n return null;\n }\n\n return (\n <div className='flex items-center text-neutral-500 text-2xl'>\n <div>\n {index + 1} / {count}\n </div>\n </div>\n );\n};\n\nexport const StartButton = ({ running, onClick }: { running?: boolean; onClick?: (start: boolean) => void }) => {\n return (\n <IconButton\n icon={running ? 'ph--x--regular' : 'ph--play--regular'}\n size={6}\n label={running ? 'Stop' : 'Play'}\n iconOnly\n noTooltip\n variant='ghost'\n classNames='p-0'\n onClick={() => onClick?.(!running)}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport 'reveal.js/dist/reveal.css';\n\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, { 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\nimport { type ThemedClassName, useAsyncEffect } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nconst styles = `\n<style type=\"text/css\">\n .reveal h1 {\n font-weight: 100;\n font-size: 60px;\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 pre {\n margin-left: 0;\n }\n .reveal code {\n font-size: 20px;\n background: #111111;\n color: #eeeeee;\n max-height: unset !important;\n }\n</style>\n`;\n\nexport type RevealProps = ThemedClassName<{\n content: string;\n slide?: number;\n fullscreen?: boolean;\n onExit?: () => void;\n}>;\n\nexport const RevealPlayer = ({ classNames, content, slide, fullscreen = true, onExit }: RevealProps) => {\n const deckDivRef = useRef<HTMLDivElement>(null);\n const deckRef = useRef<Reveal.Api | null>(null);\n\n useAsyncEffect(async () => {\n if (deckRef.current) {\n return;\n }\n\n // Required for syntax highlighting.\n hljs.registerLanguage('typescript', typescript);\n\n // https://revealjs.com/react\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\n // Disable autoplay to prevent errors in headless environments (e.g., CI).\n autoPlayMedia: false,\n\n // TODO(burdon): Speaker view requires server to serve popout window.\n // https://revealjs.com/speaker-view\n showNotes: false,\n\n // width: 1600,\n // height: 900,\n margin: 0.1,\n // center: false,\n // minScale: 0.1,\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\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 return () => {\n try {\n if (deckRef.current) {\n deckRef.current.destroy();\n deckRef.current = null;\n }\n } catch {\n // Ignore.\n }\n };\n });\n\n // TOOD(burdon): Trap cursor keys (otherwise tabster grabs focus.)\n return (\n <div\n className={mx(\n 'grid place-items-center w-full h-full overflow-hidden bg-black',\n fullscreen && 'absolute inset-0',\n classNames,\n )}\n >\n <div className='relative aspect-video w-full h-full h-auto max-h-full overflow-hidden'>\n <div ref={deckDivRef} className='absolute inset-0 reveal'>\n {/* NOTE: 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 </div>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useState", "useResizeDetector", "mx", "Panel", "children", "classNames", "props", "setProps", "useState", "ref", "containerRef", "width", "height", "useResizeDetector", "refreshMode", "refreshRate", "refreshOptions", "leading", "onResize", "createLayoutProps", "div", "className", "mx", "style", "aspectRatio", "nominalWidth", "nominalHeight", "scale", "Math", "min", "left", "top", "transform", "h", "React", "ReactMarkdown", "rehypeAddClasses", "rehypeHighlight", "remarkFrontmatter", "remarkParseFrontmatter", "theme", "root", "padding", "nodes", "h1", "h2", "h3", "p", "ul", "ol", "li", "pre", "code", "Slide", "content", "classes", "theme", "nodes", "React", "style", "styles", "ReactMarkdown", "components", "remarkPlugins", "remarkFrontmatter", "remarkParseFrontmatter", "rehypePlugins", "rehypeAddClasses", "rehypeHighlight", "slideLayout", "_options", "tree", "file", "data", "frontmatter", "children", "layout", "image", "img", "h", "class", "backgroundImage", "padding", "root", "ImageWrapper", "node", "_", "props", "alt", "src", "React", "mx", "Layout", "children", "classNames", "topLeft", "topRight", "bottomLeft", "bottomRight", "React", "div", "className", "mx", "React", "useEffect", "IconButton", "useControlledState", "Pager", "index", "indexProp", "count", "keys", "onChange", "onExit", "setIndex", "useControlledState", "useEffect", "handleChangeIndex", "dir", "next", "keydownHandler", "event", "key", "shiftKey", "window", "addEventListener", "removeEventListener", "undefined", "React", "div", "className", "IconButton", "icon", "size", "label", "iconOnly", "noTooltip", "variant", "classNames", "onClick", "PageNumber", "StartButton", "running", "hljs", "typescript", "React", "useRef", "Reveal", "RevealHighlight", "RevealMarkdown", "useAsyncEffect", "mx", "styles", "RevealPlayer", "classNames", "content", "slide", "fullscreen", "onExit", "deckDivRef", "useRef", "deckRef", "useAsyncEffect", "current", "hljs", "registerLanguage", "typescript", "Reveal", "progress", "transition", "slideNumber", "embedded", "autoPlayMedia", "showNotes", "margin", "plugins", "RevealMarkdown", "RevealHighlight", "markdown", "gfm", "smartypants", "highlight", "code", "language", "value", "highlightAuto", "initialize", "undefined", "getTotalSlides", "addKeyBinding", "keyCode", "key", "description", "destroy", "React", "div", "className", "mx", "ref", "style", "link", "rel", "href", "crossOrigin", "section", "textarea", "defaultValue", "join"]
|
|
7
|
+
}
|
|
@@ -1,22 +1,31 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
Layout,
|
|
3
|
+
PageNumber,
|
|
4
|
+
Pager,
|
|
5
|
+
Panel,
|
|
6
|
+
RevealPlayer,
|
|
7
|
+
Slide,
|
|
8
|
+
StartButton
|
|
9
|
+
} from "./chunk-YNKUN3CU.mjs";
|
|
7
10
|
import {
|
|
8
|
-
PRESENTER_PLUGIN,
|
|
9
11
|
meta
|
|
10
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-PYBNNNNK.mjs";
|
|
11
13
|
|
|
12
14
|
// src/PresenterPlugin.tsx
|
|
13
|
-
import {
|
|
15
|
+
import { Plugin } from "@dxos/app-framework";
|
|
16
|
+
import { AppPlugin } from "@dxos/app-toolkit";
|
|
14
17
|
|
|
15
|
-
// src/capabilities/index.ts
|
|
16
|
-
import {
|
|
17
|
-
var AppGraphBuilder = lazy(() => import("./app-graph-builder-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
// src/capabilities/app-graph-builder/index.ts
|
|
19
|
+
import { Capability } from "@dxos/app-framework";
|
|
20
|
+
var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("./app-graph-builder-T2BJ5XUZ.mjs"));
|
|
21
|
+
|
|
22
|
+
// src/capabilities/react-surface/index.ts
|
|
23
|
+
import { Capability as Capability2 } from "@dxos/app-framework";
|
|
24
|
+
var ReactSurface = Capability2.lazy("ReactSurface", () => import("./react-surface-XXUUAQNP.mjs"));
|
|
25
|
+
|
|
26
|
+
// src/capabilities/settings/index.ts
|
|
27
|
+
import { Capability as Capability3 } from "@dxos/app-framework";
|
|
28
|
+
var PresenterSettings = Capability3.lazy("PresenterSettings", () => import("./settings-FBHSLR6P.mjs"));
|
|
20
29
|
|
|
21
30
|
// src/translations.ts
|
|
22
31
|
var translations = [
|
|
@@ -24,6 +33,7 @@ var translations = [
|
|
|
24
33
|
"en-US": {
|
|
25
34
|
[meta.id]: {
|
|
26
35
|
"plugin name": "Presenter",
|
|
36
|
+
"settings title": "Presenter settings",
|
|
27
37
|
"toggle presentation label": "Present",
|
|
28
38
|
"present collections label": "Present collections (experimental)"
|
|
29
39
|
}
|
|
@@ -32,35 +42,24 @@ var translations = [
|
|
|
32
42
|
];
|
|
33
43
|
|
|
34
44
|
// src/PresenterPlugin.tsx
|
|
35
|
-
var PresenterPlugin = ()
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
activate: () => contributes(Capabilities.Translations, translations)
|
|
45
|
-
}),
|
|
46
|
-
defineModule({
|
|
47
|
-
id: `${meta.id}/module/react-surface`,
|
|
48
|
-
activatesOn: Events.SetupReactSurface,
|
|
49
|
-
activate: ReactSurface
|
|
50
|
-
}),
|
|
51
|
-
defineModule({
|
|
52
|
-
id: `${meta.id}/module/app-graph-builder`,
|
|
53
|
-
activatesOn: Events.SetupAppGraph,
|
|
54
|
-
activate: AppGraphBuilder
|
|
55
|
-
})
|
|
56
|
-
]);
|
|
45
|
+
var PresenterPlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
|
|
46
|
+
activate: AppGraphBuilder
|
|
47
|
+
}), AppPlugin.addSettingsModule({
|
|
48
|
+
activate: PresenterSettings
|
|
49
|
+
}), AppPlugin.addSurfaceModule({
|
|
50
|
+
activate: ReactSurface
|
|
51
|
+
}), AppPlugin.addTranslationsModule({
|
|
52
|
+
translations
|
|
53
|
+
}), Plugin.make);
|
|
57
54
|
export {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
55
|
+
Layout,
|
|
56
|
+
PageNumber,
|
|
57
|
+
Pager,
|
|
58
|
+
Panel,
|
|
62
59
|
PresenterPlugin,
|
|
63
|
-
|
|
60
|
+
RevealPlayer,
|
|
61
|
+
Slide,
|
|
62
|
+
StartButton,
|
|
64
63
|
meta
|
|
65
64
|
};
|
|
66
65
|
//# sourceMappingURL=index.mjs.map
|