@dxos/plugin-presenter 0.8.3 → 0.8.4-main.1c7ec43d41
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/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +18 -58
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operations/index.mjs +30 -0
- package/dist/lib/browser/operations/index.mjs.map +7 -0
- package/dist/lib/browser/translations.mjs +19 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/types/src/PresenterPlugin.d.ts +3 -1
- package/dist/types/src/PresenterPlugin.d.ts.map +1 -1
- package/dist/types/src/PresenterPlugin.node.d.ts +4 -0
- package/dist/types/src/PresenterPlugin.node.d.ts.map +1 -0
- package/dist/types/src/PresenterPlugin.test.d.ts +2 -0
- package/dist/types/src/PresenterPlugin.test.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +4 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +3 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +5 -2
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- 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 +2 -4
- 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/Markdown/theme.d.ts.map +1 -1
- package/dist/types/src/components/Presenter/Layout.d.ts +5 -5
- package/dist/types/src/components/Presenter/Layout.d.ts.map +1 -1
- package/dist/types/src/components/Presenter/Pager.d.ts +4 -4
- 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/PresenterSettings/PresenterSettings.d.ts +6 -0
- package/dist/types/src/components/PresenterSettings/PresenterSettings.d.ts.map +1 -0
- package/dist/types/src/components/PresenterSettings/PresenterSettings.stories.d.ts +23 -0
- package/dist/types/src/components/PresenterSettings/PresenterSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/PresenterSettings/index.d.ts +2 -0
- package/dist/types/src/components/PresenterSettings/index.d.ts.map +1 -0
- package/dist/types/src/components/RevealPlayer/RevealPlayer.d.ts +5 -4
- package/dist/types/src/components/RevealPlayer/RevealPlayer.d.ts.map +1 -1
- package/dist/types/src/components/RevealPlayer/RevealPlayer.stories.d.ts +20 -3
- package/dist/types/src/components/RevealPlayer/RevealPlayer.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +5 -10
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/CollectionPresenterContainer/CollectionPresenterContainer.d.ts +6 -0
- package/dist/types/src/containers/CollectionPresenterContainer/CollectionPresenterContainer.d.ts.map +1 -0
- package/dist/types/src/containers/CollectionPresenterContainer/index.d.ts +2 -0
- package/dist/types/src/containers/CollectionPresenterContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/DocumentPresenterContainer/DocumentPresenterContainer.d.ts +6 -0
- package/dist/types/src/containers/DocumentPresenterContainer/DocumentPresenterContainer.d.ts.map +1 -0
- package/dist/types/src/containers/DocumentPresenterContainer/index.d.ts +2 -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 +2 -0
- package/dist/types/src/containers/MarkdownSlide/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +5 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +2 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -3
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/definitions.d.ts +17 -0
- package/dist/types/src/operations/definitions.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +2 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/testing.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +7 -8
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Settings.d.ts +7 -0
- package/dist/types/src/types/Settings.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +15 -0
- package/dist/types/src/types/index.d.ts.map +1 -0
- package/dist/types/src/useExitPresenter.d.ts +3 -4
- package/dist/types/src/useExitPresenter.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +77 -46
- package/src/PresenterPlugin.node.ts +16 -0
- package/src/PresenterPlugin.test.ts +23 -0
- package/src/PresenterPlugin.tsx +14 -27
- package/src/capabilities/app-graph-builder.ts +94 -72
- package/src/capabilities/index.ts +4 -4
- package/src/capabilities/react-surface.tsx +59 -44
- package/src/capabilities/settings.ts +24 -12
- package/src/components/Markdown/Panel.stories.tsx +58 -0
- package/src/components/Markdown/{Container.tsx → Panel.tsx} +6 -6
- package/src/components/Markdown/Slide.stories.tsx +12 -8
- package/src/components/Markdown/Slide.tsx +14 -130
- 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 +24 -23
- package/src/components/Presenter/Pager.stories.tsx +11 -8
- package/src/components/Presenter/Pager.tsx +55 -22
- package/src/components/PresenterSettings/PresenterSettings.stories.tsx +32 -0
- package/src/components/PresenterSettings/PresenterSettings.tsx +31 -0
- package/src/components/PresenterSettings/index.ts +5 -0
- package/src/components/RevealPlayer/RevealPlayer.stories.tsx +9 -7
- package/src/components/RevealPlayer/RevealPlayer.tsx +58 -52
- package/src/components/index.ts +5 -5
- package/src/containers/CollectionPresenterContainer/CollectionPresenterContainer.tsx +50 -0
- package/src/containers/CollectionPresenterContainer/index.ts +5 -0
- package/src/containers/DocumentPresenterContainer/DocumentPresenterContainer.tsx +24 -0
- package/src/containers/DocumentPresenterContainer/index.ts +5 -0
- package/src/containers/MarkdownSlide/MarkdownSlide.tsx +26 -0
- package/src/containers/MarkdownSlide/index.ts +5 -0
- package/src/containers/index.ts +9 -0
- package/src/index.ts +5 -2
- package/src/meta.ts +9 -6
- package/src/operations/definitions.ts +23 -0
- package/src/operations/index.ts +5 -0
- package/src/testing.ts +6 -6
- package/src/translations.ts +9 -7
- package/src/types/Settings.ts +20 -0
- package/src/types/index.ts +30 -0
- package/src/useExitPresenter.ts +26 -24
- package/dist/lib/browser/CollectionPresenterContainer-YEJSMZFR.mjs +0 -189
- package/dist/lib/browser/CollectionPresenterContainer-YEJSMZFR.mjs.map +0 -7
- package/dist/lib/browser/DocumentPresenterContainer-QNXYZ5WX.mjs +0 -185
- package/dist/lib/browser/DocumentPresenterContainer-QNXYZ5WX.mjs.map +0 -7
- package/dist/lib/browser/MarkdownSlide-EI5XTZGO.mjs +0 -336
- package/dist/lib/browser/MarkdownSlide-EI5XTZGO.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-NEAHHOKU.mjs +0 -77
- package/dist/lib/browser/app-graph-builder-NEAHHOKU.mjs.map +0 -7
- package/dist/lib/browser/chunk-2RWWAQZK.mjs +0 -36
- package/dist/lib/browser/chunk-2RWWAQZK.mjs.map +0 -7
- package/dist/lib/browser/chunk-4OPZ2PG6.mjs +0 -37
- package/dist/lib/browser/chunk-4OPZ2PG6.mjs.map +0 -7
- package/dist/lib/browser/chunk-P2I7C2CY.mjs +0 -39
- package/dist/lib/browser/chunk-P2I7C2CY.mjs.map +0 -7
- package/dist/lib/browser/chunk-S2S5RFJ4.mjs +0 -15
- package/dist/lib/browser/chunk-S2S5RFJ4.mjs.map +0 -7
- package/dist/lib/browser/react-surface-6WH4XLTT.mjs +0 -57
- package/dist/lib/browser/react-surface-6WH4XLTT.mjs.map +0 -7
- package/dist/lib/browser/settings-KZGHTWTK.mjs +0 -22
- package/dist/lib/browser/settings-KZGHTWTK.mjs.map +0 -7
- 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 +0 -7
- 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/dist/types/src/types.d.ts +0 -39
- package/dist/types/src/types.d.ts.map +0 -1
- package/src/components/CollectionPresenterContainer.tsx +0 -43
- package/src/components/DocumentPresenterContainer.tsx +0 -22
- package/src/components/Markdown/Container.stories.tsx +0 -57
- package/src/components/MarkdownSlide.tsx +0 -24
- package/src/components/PresenterSettings.tsx +0 -26
- package/src/types.ts +0 -46
|
@@ -6,14 +6,14 @@ import React, { type PropsWithChildren, useState } from 'react';
|
|
|
6
6
|
import { useResizeDetector } from 'react-resize-detector';
|
|
7
7
|
|
|
8
8
|
import { type ThemedClassName } from '@dxos/react-ui';
|
|
9
|
-
import { mx } from '@dxos/
|
|
9
|
+
import { mx } from '@dxos/ui-theme';
|
|
10
10
|
|
|
11
|
-
export type
|
|
11
|
+
export type PanelProps = ThemedClassName<PropsWithChildren<{}>>;
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* Scaled markdown
|
|
14
|
+
* Scaled markdown panel.
|
|
15
15
|
*/
|
|
16
|
-
export const
|
|
16
|
+
export const Panel = ({ children, classNames }: PanelProps) => {
|
|
17
17
|
const [props, setProps] = useState({});
|
|
18
18
|
const {
|
|
19
19
|
ref: containerRef,
|
|
@@ -35,8 +35,8 @@ export const Container = ({ children, classNames }: ContainerProps) => {
|
|
|
35
35
|
// TODO(burdon): Reconcile highlight colors with markdown editor.
|
|
36
36
|
// https://www.npmjs.com/package/react-markdown
|
|
37
37
|
return (
|
|
38
|
-
<div ref={containerRef} className={mx('flex grow relative overflow-hidden bg-attention', classNames)}>
|
|
39
|
-
<div className={mx('
|
|
38
|
+
<div ref={containerRef} className={mx('flex grow relative overflow-hidden bg-attention-surface', classNames)}>
|
|
39
|
+
<div className={mx('dx-container absolute')} style={props}>
|
|
40
40
|
{width && height && children}
|
|
41
41
|
</div>
|
|
42
42
|
</div>
|
|
@@ -2,30 +2,34 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
8
|
+
|
|
9
|
+
import { createSlide } from '#testing';
|
|
8
10
|
|
|
9
11
|
import { Slide } from './Slide';
|
|
10
|
-
import { createSlide } from '../../testing';
|
|
11
12
|
|
|
12
|
-
const meta
|
|
13
|
-
title: 'plugins/plugin-presenter/Slide',
|
|
13
|
+
const meta = {
|
|
14
|
+
title: 'plugins/plugin-presenter/components/Slide',
|
|
14
15
|
component: Slide,
|
|
16
|
+
decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
|
|
15
17
|
parameters: {
|
|
16
18
|
layout: 'fullscreen',
|
|
17
19
|
},
|
|
18
|
-
}
|
|
20
|
+
} satisfies Meta<typeof Slide>;
|
|
19
21
|
|
|
20
22
|
export default meta;
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
type Story = StoryObj<typeof meta>;
|
|
25
|
+
|
|
26
|
+
export const Default: Story = {
|
|
23
27
|
args: {
|
|
24
28
|
content: createSlide(),
|
|
25
29
|
},
|
|
26
30
|
};
|
|
27
31
|
|
|
28
|
-
export const Code = {
|
|
32
|
+
export const Code: Story = {
|
|
29
33
|
args: {
|
|
30
34
|
content: createSlide({ code: true }),
|
|
31
35
|
},
|
|
@@ -2,21 +2,22 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import 'highlight.js/styles/github.css';
|
|
6
|
+
|
|
5
7
|
import { h } from 'hastscript';
|
|
6
8
|
import React from 'react';
|
|
7
|
-
import ReactMarkdown from 'react-markdown';
|
|
8
|
-
import
|
|
9
|
-
import
|
|
9
|
+
import ReactMarkdown, { type Options as ReactMarkdownOptions } from 'react-markdown';
|
|
10
|
+
import rehypeAddClasses from 'rehype-add-classes';
|
|
11
|
+
import rehypeHighlight from 'rehype-highlight';
|
|
10
12
|
import remarkFrontmatter from 'remark-frontmatter';
|
|
11
13
|
import remarkParseFrontmatter from 'remark-parse-frontmatter';
|
|
12
14
|
|
|
13
|
-
import '
|
|
14
|
-
|
|
15
|
+
import styles from './styles.css?raw';
|
|
15
16
|
import { theme } from './theme';
|
|
16
17
|
|
|
17
18
|
export type SlideProps = {
|
|
18
19
|
content?: string;
|
|
19
|
-
classes?:
|
|
20
|
+
classes?: Record<string, string>;
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
export const Slide = ({ content = '', classes = theme.nodes }: SlideProps) => {
|
|
@@ -24,132 +25,13 @@ export const Slide = ({ content = '', classes = theme.nodes }: SlideProps) => {
|
|
|
24
25
|
// configurable. Find a way to remove the literal stylesheet here.
|
|
25
26
|
return (
|
|
26
27
|
<>
|
|
27
|
-
<style>{
|
|
28
|
-
.dark pre code.hljs {
|
|
29
|
-
display: block;
|
|
30
|
-
overflow-x: auto;
|
|
31
|
-
padding: 1em
|
|
32
|
-
}
|
|
33
|
-
.dark code.hljs {
|
|
34
|
-
padding: 3px 5px
|
|
35
|
-
}
|
|
36
|
-
/*!
|
|
37
|
-
Theme: GitHub Dark
|
|
38
|
-
Description: Dark theme as seen on github.com
|
|
39
|
-
Author: github.com
|
|
40
|
-
Maintainer: @Hirse
|
|
41
|
-
Updated: 2021-05-15
|
|
42
|
-
|
|
43
|
-
Outdated base version: https://github.com/primer/github-syntax-dark
|
|
44
|
-
Current colors taken from GitHub's CSS
|
|
45
|
-
*/
|
|
46
|
-
.dark .hljs {
|
|
47
|
-
color: #c9d1d9;
|
|
48
|
-
background: #0d1117
|
|
49
|
-
}
|
|
50
|
-
.dark .hljs-doctag,
|
|
51
|
-
.dark .hljs-keyword,
|
|
52
|
-
.dark .hljs-meta .hljs-keyword,
|
|
53
|
-
.dark .hljs-template-tag,
|
|
54
|
-
.dark .hljs-template-variable,
|
|
55
|
-
.dark .hljs-type,
|
|
56
|
-
.dark .hljs-variable.language_ {
|
|
57
|
-
/* prettylights-syntax-keyword */
|
|
58
|
-
color: #ff7b72
|
|
59
|
-
}
|
|
60
|
-
.dark .hljs-title,
|
|
61
|
-
.dark .hljs-title.class_,
|
|
62
|
-
.dark .hljs-title.class_.inherited__,
|
|
63
|
-
.dark .hljs-title.function_ {
|
|
64
|
-
/* prettylights-syntax-entity */
|
|
65
|
-
color: #d2a8ff
|
|
66
|
-
}
|
|
67
|
-
.dark .hljs-attr,
|
|
68
|
-
.dark .hljs-attribute,
|
|
69
|
-
.dark .hljs-literal,
|
|
70
|
-
.dark .hljs-meta,
|
|
71
|
-
.dark .hljs-number,
|
|
72
|
-
.dark .hljs-operator,
|
|
73
|
-
.dark .hljs-variable,
|
|
74
|
-
.dark .hljs-selector-attr,
|
|
75
|
-
.dark .hljs-selector-class,
|
|
76
|
-
.dark .hljs-selector-id {
|
|
77
|
-
/* prettylights-syntax-constant */
|
|
78
|
-
color: #79c0ff
|
|
79
|
-
}
|
|
80
|
-
.dark .hljs-regexp,
|
|
81
|
-
.dark .hljs-string,
|
|
82
|
-
.dark .hljs-meta .hljs-string {
|
|
83
|
-
/* prettylights-syntax-string */
|
|
84
|
-
color: #a5d6ff
|
|
85
|
-
}
|
|
86
|
-
.dark .hljs-built_in,
|
|
87
|
-
.dark .hljs-symbol {
|
|
88
|
-
/* prettylights-syntax-variable */
|
|
89
|
-
color: #ffa657
|
|
90
|
-
}
|
|
91
|
-
.dark .hljs-comment,
|
|
92
|
-
.dark .hljs-code,
|
|
93
|
-
.dark .hljs-formula {
|
|
94
|
-
/* prettylights-syntax-comment */
|
|
95
|
-
color: #8b949e
|
|
96
|
-
}
|
|
97
|
-
.dark .hljs-name,
|
|
98
|
-
.dark .hljs-quote,
|
|
99
|
-
.dark .hljs-selector-tag,
|
|
100
|
-
.dark .hljs-selector-pseudo {
|
|
101
|
-
/* prettylights-syntax-entity-tag */
|
|
102
|
-
color: #7ee787
|
|
103
|
-
}
|
|
104
|
-
.dark .hljs-subst {
|
|
105
|
-
/* prettylights-syntax-storage-modifier-import */
|
|
106
|
-
color: #c9d1d9
|
|
107
|
-
}
|
|
108
|
-
.dark .hljs-section {
|
|
109
|
-
/* prettylights-syntax-markup-heading */
|
|
110
|
-
color: #1f6feb;
|
|
111
|
-
font-weight: bold
|
|
112
|
-
}
|
|
113
|
-
.dark .hljs-bullet {
|
|
114
|
-
/* prettylights-syntax-markup-list */
|
|
115
|
-
color: #f2cc60
|
|
116
|
-
}
|
|
117
|
-
.dark .hljs-emphasis {
|
|
118
|
-
/* prettylights-syntax-markup-italic */
|
|
119
|
-
color: #c9d1d9;
|
|
120
|
-
font-style: italic
|
|
121
|
-
}
|
|
122
|
-
.dark .hljs-strong {
|
|
123
|
-
/* prettylights-syntax-markup-bold */
|
|
124
|
-
color: #c9d1d9;
|
|
125
|
-
font-weight: bold
|
|
126
|
-
}
|
|
127
|
-
.dark .hljs-addition {
|
|
128
|
-
/* prettylights-syntax-markup-inserted */
|
|
129
|
-
color: #aff5b4;
|
|
130
|
-
background-color: #033a16
|
|
131
|
-
}
|
|
132
|
-
.dark .hljs-deletion {
|
|
133
|
-
/* prettylights-syntax-markup-deleted */
|
|
134
|
-
color: #ffdcd7;
|
|
135
|
-
background-color: #67060c
|
|
136
|
-
}
|
|
137
|
-
.dark .hljs-char.escape_,
|
|
138
|
-
.dark .hljs-link,
|
|
139
|
-
.dark .hljs-params,
|
|
140
|
-
.dark .hljs-property,
|
|
141
|
-
.dark .hljs-punctuation,
|
|
142
|
-
.dark .hljs-tag {
|
|
143
|
-
/* purposely ignored */
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
`}</style>
|
|
28
|
+
<style>{styles}</style>
|
|
147
29
|
<ReactMarkdown
|
|
148
30
|
components={components}
|
|
149
31
|
// Markdown to HTML.
|
|
150
32
|
remarkPlugins={[[remarkFrontmatter, 'yaml'], remarkParseFrontmatter as any]}
|
|
151
33
|
// HTML processing.
|
|
152
|
-
rehypePlugins={[
|
|
34
|
+
rehypePlugins={[[rehypeAddClasses, classes], rehypeHighlight as any, slideLayout]}
|
|
153
35
|
>
|
|
154
36
|
{content}
|
|
155
37
|
</ReactMarkdown>
|
|
@@ -164,7 +46,7 @@ export const Slide = ({ content = '', classes = theme.nodes }: SlideProps) => {
|
|
|
164
46
|
* E.g., layout image from front-matter.
|
|
165
47
|
*/
|
|
166
48
|
const slideLayout =
|
|
167
|
-
(
|
|
49
|
+
(_options = {}) =>
|
|
168
50
|
(tree: any, file: any) => {
|
|
169
51
|
const {
|
|
170
52
|
data: { frontmatter = {} },
|
|
@@ -210,9 +92,11 @@ const slideLayout =
|
|
|
210
92
|
tree.children = [root];
|
|
211
93
|
};
|
|
212
94
|
|
|
213
|
-
const ImageWrapper = ({ node, ...props }: { node: any }) => {
|
|
95
|
+
const ImageWrapper = ({ node: _, ...props }: { node: any }) => {
|
|
214
96
|
const { alt = '', src } = props as { alt: string; src: string };
|
|
215
97
|
return <img alt={alt} src={src} />;
|
|
216
98
|
};
|
|
217
99
|
|
|
218
|
-
const components = {
|
|
100
|
+
const components: ReactMarkdownOptions['components'] = {
|
|
101
|
+
img: ({ node, ...props }) => <ImageWrapper node={node} {...props} />,
|
|
102
|
+
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
Theme: GitHub Dark
|
|
3
|
+
Description: Dark theme as seen on github.com
|
|
4
|
+
Author: github.com
|
|
5
|
+
Maintainer: @Hirse
|
|
6
|
+
Updated: 2021-05-15
|
|
7
|
+
Outdated base version: https://github.com/primer/github-syntax-dark
|
|
8
|
+
Current colors taken from GitHub's CSS
|
|
9
|
+
*/
|
|
10
|
+
/* TODO(burdon): Use tokens. */
|
|
11
|
+
.dark pre code.hljs {
|
|
12
|
+
display: block;
|
|
13
|
+
overflow-x: auto;
|
|
14
|
+
padding: 1em;
|
|
15
|
+
}
|
|
16
|
+
.dark code.hljs {
|
|
17
|
+
padding: 3px 5px;
|
|
18
|
+
}
|
|
19
|
+
.dark .hljs {
|
|
20
|
+
color: #c9d1d9;
|
|
21
|
+
background: #0d1117;
|
|
22
|
+
}
|
|
23
|
+
.dark .hljs-doctag,
|
|
24
|
+
.dark .hljs-keyword,
|
|
25
|
+
.dark .hljs-meta .hljs-keyword,
|
|
26
|
+
.dark .hljs-template-tag,
|
|
27
|
+
.dark .hljs-template-variable,
|
|
28
|
+
.dark .hljs-type,
|
|
29
|
+
.dark .hljs-variable.language_ {
|
|
30
|
+
color: #ff7b72;
|
|
31
|
+
}
|
|
32
|
+
.dark .hljs-title,
|
|
33
|
+
.dark .hljs-title.class_,
|
|
34
|
+
.dark .hljs-title.class_.inherited__,
|
|
35
|
+
.dark .hljs-title.function_ {
|
|
36
|
+
color: #d2a8ff;
|
|
37
|
+
}
|
|
38
|
+
.dark .hljs-attr,
|
|
39
|
+
.dark .hljs-attribute,
|
|
40
|
+
.dark .hljs-literal,
|
|
41
|
+
.dark .hljs-meta,
|
|
42
|
+
.dark .hljs-number,
|
|
43
|
+
.dark .hljs-operator,
|
|
44
|
+
.dark .hljs-variable,
|
|
45
|
+
.dark .hljs-selector-attr,
|
|
46
|
+
.dark .hljs-selector-class,
|
|
47
|
+
.dark .hljs-selector-id {
|
|
48
|
+
color: #79c0ff;
|
|
49
|
+
}
|
|
50
|
+
.dark .hljs-regexp,
|
|
51
|
+
.dark .hljs-string,
|
|
52
|
+
.dark .hljs-meta .hljs-string {
|
|
53
|
+
color: #a5d6ff;
|
|
54
|
+
}
|
|
55
|
+
.dark .hljs-built_in,
|
|
56
|
+
.dark .hljs-symbol {
|
|
57
|
+
color: #ffa657;
|
|
58
|
+
}
|
|
59
|
+
.dark .hljs-comment,
|
|
60
|
+
.dark .hljs-code,
|
|
61
|
+
.dark .hljs-formula {
|
|
62
|
+
color: #8b949e;
|
|
63
|
+
}
|
|
64
|
+
.dark .hljs-name,
|
|
65
|
+
.dark .hljs-quote,
|
|
66
|
+
.dark .hljs-selector-tag,
|
|
67
|
+
.dark .hljs-selector-pseudo {
|
|
68
|
+
color: #7ee787;
|
|
69
|
+
}
|
|
70
|
+
.dark .hljs-subst {
|
|
71
|
+
color: #c9d1d9;
|
|
72
|
+
}
|
|
73
|
+
.dark .hljs-section {
|
|
74
|
+
color: #1f6feb;
|
|
75
|
+
font-weight: bold;
|
|
76
|
+
}
|
|
77
|
+
.dark .hljs-bullet {
|
|
78
|
+
color: #f2cc60;
|
|
79
|
+
}
|
|
80
|
+
.dark .hljs-emphasis {
|
|
81
|
+
color: #c9d1d9;
|
|
82
|
+
font-style: italic;
|
|
83
|
+
}
|
|
84
|
+
.dark .hljs-strong {
|
|
85
|
+
color: #c9d1d9;
|
|
86
|
+
font-weight: bold;
|
|
87
|
+
}
|
|
88
|
+
.dark .hljs-addition {
|
|
89
|
+
color: #aff5b4;
|
|
90
|
+
background-color: #033a16;
|
|
91
|
+
}
|
|
92
|
+
.dark .hljs-deletion {
|
|
93
|
+
color: #ffdcd7;
|
|
94
|
+
background-color: #67060c;
|
|
95
|
+
}
|
|
96
|
+
.dark .hljs-char.escape_,
|
|
97
|
+
.dark .hljs-link,
|
|
98
|
+
.dark .hljs-params,
|
|
99
|
+
.dark .hljs-property,
|
|
100
|
+
.dark .hljs-punctuation,
|
|
101
|
+
.dark .hljs-tag {
|
|
102
|
+
/* purposely ignored */
|
|
103
|
+
all: unset;
|
|
104
|
+
}
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
// TODO(burdon): Create theme type and picker.
|
|
6
6
|
|
|
7
7
|
export const theme = {
|
|
8
|
-
root: 'bg-attention leading-relaxed font-mono',
|
|
8
|
+
root: 'bg-attention-surface leading-relaxed font-mono',
|
|
9
9
|
|
|
10
10
|
padding: 'px-40 py-16 gap-8',
|
|
11
11
|
|
|
12
12
|
nodes: {
|
|
13
|
-
h1: 'text-[80px] text-
|
|
14
|
-
h2: 'text-[60px] text-
|
|
15
|
-
h3: 'text-[48px] text-
|
|
13
|
+
h1: 'text-[80px] text-accent-text',
|
|
14
|
+
h2: 'text-[60px] text-accent-text',
|
|
15
|
+
h3: 'text-[48px] text-accent-text',
|
|
16
16
|
|
|
17
17
|
p: 'text-[48px]',
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@ export const theme = {
|
|
|
20
20
|
ol: 'my-[16px] ml-24 leading-relaxed list-decimal',
|
|
21
21
|
li: 'pl-6 text-[48px]',
|
|
22
22
|
|
|
23
|
-
pre: 'w-full mx-0 my-[32px] p-
|
|
23
|
+
pre: 'w-full mx-0 my-[32px] p-4 bg-input-surface',
|
|
24
24
|
code: 'p-0 text-[40px]',
|
|
25
25
|
},
|
|
26
26
|
};
|
|
@@ -4,30 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { type PropsWithChildren, type ReactNode } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import { mx } from '@dxos/react-ui-theme';
|
|
7
|
+
import { composable, composableProps } from '@dxos/ui-theme';
|
|
9
8
|
|
|
10
|
-
export type LayoutProps =
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
bottomRight?: ReactNode;
|
|
17
|
-
}>
|
|
18
|
-
>;
|
|
9
|
+
export type LayoutProps = PropsWithChildren<{
|
|
10
|
+
topLeft?: ReactNode;
|
|
11
|
+
topRight?: ReactNode;
|
|
12
|
+
bottomLeft?: ReactNode;
|
|
13
|
+
bottomRight?: ReactNode;
|
|
14
|
+
}>;
|
|
19
15
|
|
|
20
|
-
export const Layout =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
<div
|
|
16
|
+
export const Layout = composable<HTMLDivElement, LayoutProps>(
|
|
17
|
+
({ children, topLeft, topRight, bottomLeft, bottomRight, ...props }, forwardedRef) => {
|
|
18
|
+
return (
|
|
19
|
+
<div
|
|
20
|
+
{...composableProps(props, { classNames: 'flex grow relative overflow-hidden bg-attention-surface' })}
|
|
21
|
+
ref={forwardedRef}
|
|
22
|
+
>
|
|
23
|
+
<div className='flex flex-col grow overflow-hidden'>{children}</div>
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
<div className='z-[200]'>
|
|
26
|
+
<div className='absolute top-4 left-4'>{topLeft}</div>
|
|
27
|
+
<div className='absolute top-4 right-4'>{topRight}</div>
|
|
28
|
+
<div className='absolute bottom-4 left-4'>{bottomLeft}</div>
|
|
29
|
+
<div className='absolute bottom-4 right-4'>{bottomRight}</div>
|
|
30
|
+
</div>
|
|
30
31
|
</div>
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
);
|
|
33
|
+
},
|
|
34
|
+
);
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@
|
|
6
|
-
|
|
7
|
-
import { type Meta } from '@storybook/react';
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React, { useState } from 'react';
|
|
9
7
|
|
|
8
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
9
|
+
|
|
10
10
|
import { PageNumber, Pager, type PagerProps, StartButton } from './Pager';
|
|
11
11
|
|
|
12
12
|
const DefaultStory = ({ count = 20 }: PagerProps) => {
|
|
@@ -22,14 +22,17 @@ const DefaultStory = ({ count = 20 }: PagerProps) => {
|
|
|
22
22
|
);
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const meta: Meta<PagerProps> = {
|
|
28
|
-
title: 'plugins/plugin-presenter/Pager',
|
|
25
|
+
const meta = {
|
|
26
|
+
title: 'plugins/plugin-presenter/components/Pager',
|
|
29
27
|
render: DefaultStory,
|
|
28
|
+
decorators: [withTheme()],
|
|
30
29
|
parameters: {
|
|
31
30
|
layout: 'centered',
|
|
32
31
|
},
|
|
33
|
-
}
|
|
32
|
+
} satisfies Meta<typeof DefaultStory>;
|
|
34
33
|
|
|
35
34
|
export default meta;
|
|
35
|
+
|
|
36
|
+
type Story = StoryObj<typeof meta>;
|
|
37
|
+
|
|
38
|
+
export const Default: Story = {};
|
|
@@ -2,11 +2,9 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
import React, { type FC, useEffect } from 'react';
|
|
5
|
+
import React, { useEffect } from 'react';
|
|
7
6
|
|
|
8
|
-
import {
|
|
9
|
-
import { getSize, mx } from '@dxos/react-ui-theme';
|
|
7
|
+
import { IconButton, useControlledState } from '@dxos/react-ui';
|
|
10
8
|
|
|
11
9
|
export type PagerProps = {
|
|
12
10
|
index?: number;
|
|
@@ -16,8 +14,8 @@ export type PagerProps = {
|
|
|
16
14
|
onExit?: () => void;
|
|
17
15
|
};
|
|
18
16
|
|
|
19
|
-
export const Pager = ({ index:
|
|
20
|
-
const [index, setIndex] = useControlledState(
|
|
17
|
+
export const Pager = ({ index: indexProp = 0, count = 0, keys, onChange, onExit }: PagerProps) => {
|
|
18
|
+
const [index, setIndex] = useControlledState(indexProp);
|
|
21
19
|
useEffect(() => {
|
|
22
20
|
onChange?.(index);
|
|
23
21
|
}, [index]);
|
|
@@ -78,18 +76,46 @@ export const Pager = ({ index: controlledIndex = 0, count = 0, keys, onChange, o
|
|
|
78
76
|
|
|
79
77
|
return (
|
|
80
78
|
<div className='flex items-center text-neutral-500'>
|
|
81
|
-
<
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
79
|
+
<IconButton
|
|
80
|
+
icon='ph--caret-double-left--regular'
|
|
81
|
+
size={6}
|
|
82
|
+
label='Jump to first'
|
|
83
|
+
iconOnly
|
|
84
|
+
noTooltip
|
|
85
|
+
variant='ghost'
|
|
86
|
+
classNames='p-0'
|
|
87
|
+
onClick={() => onChange?.(0)}
|
|
88
|
+
/>
|
|
89
|
+
<IconButton
|
|
90
|
+
icon='ph--caret-left--regular'
|
|
91
|
+
size={6}
|
|
92
|
+
label='Previous'
|
|
93
|
+
iconOnly
|
|
94
|
+
noTooltip
|
|
95
|
+
variant='ghost'
|
|
96
|
+
classNames='p-0'
|
|
97
|
+
onClick={() => handleChangeIndex(-1)}
|
|
98
|
+
/>
|
|
99
|
+
<IconButton
|
|
100
|
+
icon='ph--caret-right--regular'
|
|
101
|
+
size={6}
|
|
102
|
+
label='Next'
|
|
103
|
+
iconOnly
|
|
104
|
+
noTooltip
|
|
105
|
+
variant='ghost'
|
|
106
|
+
classNames='p-0'
|
|
107
|
+
onClick={() => handleChangeIndex(1)}
|
|
108
|
+
/>
|
|
109
|
+
<IconButton
|
|
110
|
+
icon='ph--caret-double-right--regular'
|
|
111
|
+
size={6}
|
|
112
|
+
label='Jump to last'
|
|
113
|
+
iconOnly
|
|
114
|
+
noTooltip
|
|
115
|
+
variant='ghost'
|
|
116
|
+
classNames='p-0'
|
|
117
|
+
onClick={() => onChange?.(count - 1)}
|
|
118
|
+
/>
|
|
93
119
|
</div>
|
|
94
120
|
);
|
|
95
121
|
};
|
|
@@ -113,10 +139,17 @@ export const PageNumber = ({ index = 0, count = 1 }: PageNumberProps) => {
|
|
|
113
139
|
);
|
|
114
140
|
};
|
|
115
141
|
|
|
116
|
-
export const StartButton:
|
|
142
|
+
export const StartButton = ({ running, onClick }: { running?: boolean; onClick?: (start: boolean) => void }) => {
|
|
117
143
|
return (
|
|
118
|
-
<
|
|
119
|
-
{
|
|
120
|
-
|
|
144
|
+
<IconButton
|
|
145
|
+
icon={running ? 'ph--x--regular' : 'ph--play--regular'}
|
|
146
|
+
size={6}
|
|
147
|
+
label={running ? 'Stop' : 'Play'}
|
|
148
|
+
iconOnly
|
|
149
|
+
noTooltip
|
|
150
|
+
variant='ghost'
|
|
151
|
+
classNames='p-0'
|
|
152
|
+
onClick={() => onClick?.(!running)}
|
|
153
|
+
/>
|
|
121
154
|
);
|
|
122
155
|
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
|
|
7
|
+
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
8
|
+
|
|
9
|
+
import { translations } from '#translations';
|
|
10
|
+
|
|
11
|
+
import { PresenterSettings } from './PresenterSettings';
|
|
12
|
+
|
|
13
|
+
const meta = {
|
|
14
|
+
title: 'plugins/plugin-presenter/components/PresenterSettings',
|
|
15
|
+
component: PresenterSettings,
|
|
16
|
+
decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
|
|
17
|
+
tags: ['settings'],
|
|
18
|
+
parameters: {
|
|
19
|
+
layout: 'fullscreen',
|
|
20
|
+
translations,
|
|
21
|
+
},
|
|
22
|
+
} satisfies Meta<typeof PresenterSettings>;
|
|
23
|
+
|
|
24
|
+
export default meta;
|
|
25
|
+
|
|
26
|
+
type Story = StoryObj<typeof meta>;
|
|
27
|
+
|
|
28
|
+
export const Default: Story = {
|
|
29
|
+
args: {
|
|
30
|
+
settings: { presentCollections: true },
|
|
31
|
+
},
|
|
32
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React from 'react';
|
|
6
|
+
|
|
7
|
+
import { type AppSurface } from '@dxos/app-toolkit/ui';
|
|
8
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
9
|
+
import { Settings as SettingsForm } from '@dxos/react-ui-form';
|
|
10
|
+
|
|
11
|
+
import { meta } from '#meta';
|
|
12
|
+
import { Settings } from '#types';
|
|
13
|
+
|
|
14
|
+
export type PresenterSettingsProps = AppSurface.SettingsArticleProps<Settings.Settings>;
|
|
15
|
+
|
|
16
|
+
export const PresenterSettings = ({ settings, onSettingsChange }: PresenterSettingsProps) => {
|
|
17
|
+
const { t } = useTranslation(meta.id);
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<SettingsForm.Viewport>
|
|
21
|
+
<SettingsForm.Section title={t('settings.title', { ns: meta.id })}>
|
|
22
|
+
<SettingsForm.FieldSet
|
|
23
|
+
readonly={!onSettingsChange}
|
|
24
|
+
schema={Settings.Settings}
|
|
25
|
+
values={settings}
|
|
26
|
+
onValuesChanged={(values) => onSettingsChange?.(() => values)}
|
|
27
|
+
/>
|
|
28
|
+
</SettingsForm.Section>
|
|
29
|
+
</SettingsForm.Viewport>
|
|
30
|
+
);
|
|
31
|
+
};
|