@dxos/react-ui-editor 0.8.4-main.406dc2a → 0.8.4-main.548089c
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/index.mjs +1379 -1139
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +1379 -1139
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/Editor/Editor.stories.d.ts +0 -3
- package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +17 -2
- package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/util.d.ts +5 -19
- package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/automerge.d.ts +1 -1
- package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts +1 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/sync.d.ts +1 -1
- package/dist/types/src/extensions/automerge/sync.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/update-automerge.d.ts +1 -1
- package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
- package/dist/types/src/extensions/autoscroll.d.ts +14 -4
- package/dist/types/src/extensions/autoscroll.d.ts.map +1 -1
- package/dist/types/src/extensions/awareness/awareness-provider.d.ts +1 -1
- package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +1 -1
- package/dist/types/src/extensions/blocks.d.ts +2 -0
- package/dist/types/src/extensions/blocks.d.ts.map +1 -0
- package/dist/types/src/extensions/bookmarks.d.ts +12 -0
- package/dist/types/src/extensions/bookmarks.d.ts.map +1 -0
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/factories.d.ts +4 -4
- package/dist/types/src/extensions/factories.d.ts.map +1 -1
- package/dist/types/src/extensions/folding.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +4 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/listener.d.ts +8 -6
- package/dist/types/src/extensions/listener.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts +1 -2
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
- package/dist/types/src/extensions/popover/PopoverMenuProvider.d.ts +1 -1
- package/dist/types/src/extensions/popover/PopoverMenuProvider.d.ts.map +1 -1
- package/dist/types/src/extensions/popover/popover.d.ts.map +1 -1
- package/dist/types/src/extensions/preview/preview.d.ts +6 -2
- package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
- package/dist/types/src/extensions/replacer.d.ts +21 -0
- package/dist/types/src/extensions/replacer.d.ts.map +1 -0
- package/dist/types/src/extensions/replacer.test.d.ts +2 -0
- package/dist/types/src/extensions/replacer.test.d.ts.map +1 -0
- package/dist/types/src/extensions/scrolling.d.ts +78 -0
- package/dist/types/src/extensions/scrolling.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/xml-tags.d.ts +41 -16
- package/dist/types/src/extensions/tags/xml-tags.d.ts.map +1 -1
- package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -1
- package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
- package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
- package/dist/types/src/stories/components/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +41 -38
- package/src/components/Editor/Editor.stories.tsx +4 -7
- package/src/components/EditorToolbar/EditorToolbar.tsx +90 -90
- package/src/components/EditorToolbar/headings.ts +6 -4
- package/src/components/EditorToolbar/util.ts +4 -20
- package/src/extensions/autocomplete/autocomplete.ts +5 -5
- package/src/extensions/automerge/automerge.stories.tsx +1 -1
- package/src/extensions/automerge/automerge.ts +1 -1
- package/src/extensions/automerge/cursor.ts +1 -1
- package/src/extensions/automerge/sync.ts +1 -1
- package/src/extensions/automerge/update-automerge.ts +1 -1
- package/src/extensions/autoscroll.ts +74 -68
- package/src/extensions/awareness/awareness-provider.ts +2 -2
- package/src/extensions/blocks.ts +131 -0
- package/src/extensions/bookmarks.ts +75 -0
- package/src/extensions/comments.ts +2 -1
- package/src/extensions/factories.ts +6 -4
- package/src/extensions/folding.tsx +1 -2
- package/src/extensions/index.ts +4 -0
- package/src/extensions/listener.ts +14 -20
- package/src/extensions/markdown/bundle.ts +12 -2
- package/src/extensions/markdown/decorate.ts +8 -8
- package/src/extensions/markdown/formatting.ts +8 -8
- package/src/extensions/markdown/highlight.ts +1 -1
- package/src/extensions/markdown/image.ts +2 -2
- package/src/extensions/markdown/table.ts +6 -6
- package/src/extensions/popover/PopoverMenuProvider.tsx +2 -3
- package/src/extensions/popover/popover.ts +0 -4
- package/src/extensions/preview/preview.ts +14 -9
- package/src/extensions/replacer.test.ts +75 -0
- package/src/extensions/replacer.ts +93 -0
- package/src/extensions/scrolling.ts +189 -0
- package/src/extensions/selection.ts +1 -1
- package/src/extensions/tags/extended-markdown.test.ts +2 -1
- package/src/extensions/tags/xml-tags.ts +310 -203
- package/src/extensions/typewriter.ts +1 -1
- package/src/stories/CommandDialog.stories.tsx +9 -4
- package/src/stories/Comments.stories.tsx +1 -1
- package/src/stories/EditorToolbar.stories.tsx +4 -5
- package/src/stories/Popover.stories.tsx +4 -6
- package/src/stories/Preview.stories.tsx +15 -8
- package/src/stories/Tags.stories.tsx +19 -5
- package/src/stories/TextEditor.stories.tsx +2 -2
- package/src/stories/components/EditorStory.tsx +3 -3
- package/src/stories/components/util.tsx +39 -6
- package/src/styles/markdown.ts +1 -1
- package/src/styles/theme.ts +1 -1
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React, { type KeyboardEvent, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import { Button,
|
|
8
|
+
import { type Button, IconButton, Input } from '@dxos/react-ui';
|
|
9
9
|
import { withTheme } from '@dxos/react-ui/testing';
|
|
10
10
|
import { mx } from '@dxos/react-ui-theme';
|
|
11
11
|
|
|
@@ -54,9 +54,14 @@ const CommandDialog = ({ onAction }: { onAction: (action?: any) => void }) => {
|
|
|
54
54
|
onKeyDown={handleKeyDown}
|
|
55
55
|
/>
|
|
56
56
|
</Input.Root>
|
|
57
|
-
<
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
<IconButton
|
|
58
|
+
icon='ph--x--regular'
|
|
59
|
+
label='Cancel'
|
|
60
|
+
iconOnly
|
|
61
|
+
variant='ghost'
|
|
62
|
+
classNames='pli-0'
|
|
63
|
+
onClick={() => onAction({ type: 'cancel' })}
|
|
64
|
+
/>
|
|
60
65
|
</div>
|
|
61
66
|
</div>
|
|
62
67
|
);
|
|
@@ -80,7 +80,7 @@ const Key: FC<{ char: string }> = ({ char }) => (
|
|
|
80
80
|
|
|
81
81
|
const CommentTooltip: FC<{ shortcut: string }> = ({ shortcut }) => {
|
|
82
82
|
return (
|
|
83
|
-
<div className='flex items-center gap-2
|
|
83
|
+
<div className='flex items-center gap-2 pli-2 plb-2 bg-neutral-700 text-white text-xs rounded'>
|
|
84
84
|
<div>Create comment</div>
|
|
85
85
|
<div className='flex gap-1'>
|
|
86
86
|
{keySymbols(parseShortcut(shortcut)).map((char) => (
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
createThemeExtensions,
|
|
20
20
|
decorateMarkdown,
|
|
21
21
|
formattingKeymap,
|
|
22
|
-
|
|
22
|
+
formattingListener,
|
|
23
23
|
} from '../extensions';
|
|
24
24
|
import { type UseTextEditorProps, useTextEditor } from '../hooks';
|
|
25
25
|
import { translations } from '../translations';
|
|
@@ -31,7 +31,6 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
|
|
|
31
31
|
const { themeMode } = useThemeContext();
|
|
32
32
|
const toolbarState = useEditorToolbarState({ viewMode: 'source' });
|
|
33
33
|
const viewMode = toolbarState.viewMode;
|
|
34
|
-
const trackFormatting = useFormattingState(toolbarState);
|
|
35
34
|
// TODO(wittjosiah): Provide way to change the input mode.
|
|
36
35
|
const [editorInputMode, _setEditorInputMode] = useState<EditorInputMode>('default');
|
|
37
36
|
const { parentRef, view } = useTextEditor(
|
|
@@ -46,7 +45,7 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
|
|
|
46
45
|
createThemeExtensions({ themeMode, syntaxHighlighting: true }),
|
|
47
46
|
viewMode === 'source' ? [] : decorateMarkdown(),
|
|
48
47
|
formattingKeymap(),
|
|
49
|
-
|
|
48
|
+
formattingListener(() => toolbarState),
|
|
50
49
|
],
|
|
51
50
|
}),
|
|
52
51
|
[editorInputMode, viewMode, themeMode, placeholder],
|
|
@@ -65,7 +64,7 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
|
|
|
65
64
|
// Also not sure if view is even guaranteed to exist at this point.
|
|
66
65
|
return (
|
|
67
66
|
<div role='none' className={mx('fixed inset-0 flex flex-col')}>
|
|
68
|
-
{toolbarState && <EditorToolbar state={toolbarState} getView={getView}
|
|
67
|
+
{toolbarState && <EditorToolbar state={toolbarState} getView={getView} onViewModeChange={handleViewModeChange} />}
|
|
69
68
|
<div role='none' className={mx('grow overflow-hidden', attentionSurface)}>
|
|
70
69
|
<div className={mx(editorWidth)} ref={parentRef} />
|
|
71
70
|
</div>
|
|
@@ -91,6 +90,6 @@ export const Default: Story = {
|
|
|
91
90
|
args: {
|
|
92
91
|
autoFocus: true,
|
|
93
92
|
placeholder: 'Text...',
|
|
94
|
-
initialValue: '# Demo\n\nThis is a document
|
|
93
|
+
initialValue: '# Demo\n\nThis is a **document**.\n\n',
|
|
95
94
|
},
|
|
96
95
|
};
|
|
@@ -42,9 +42,7 @@ const placeholder = (trigger: string[]) =>
|
|
|
42
42
|
.children(
|
|
43
43
|
Domino.of('span').text('Press'),
|
|
44
44
|
...trigger.map((trigger) =>
|
|
45
|
-
Domino.of('span')
|
|
46
|
-
.text(trigger)
|
|
47
|
-
.classNames('border border-separator rounded-sm mx-1 pis-1 pie-1 pbs-[2px] pbe-[3px]'),
|
|
45
|
+
Domino.of('span').text(trigger).classNames('border border-separator rounded-sm mx-1 pli-1 pbs-[2px] pbe-[3px]'),
|
|
48
46
|
),
|
|
49
47
|
Domino.of('span').text('for commands'),
|
|
50
48
|
)
|
|
@@ -78,7 +76,7 @@ const LinkStory = (args: StoryProps) => {
|
|
|
78
76
|
}
|
|
79
77
|
|
|
80
78
|
const name = text?.startsWith('@') ? text.slice(1).toLowerCase() : (text?.toLowerCase() ?? '');
|
|
81
|
-
const result = await space?.db.query(Query.type(Testing.
|
|
79
|
+
const result = await space?.db.query(Query.type(Testing.Person)).run();
|
|
82
80
|
const items = result.objects
|
|
83
81
|
.filter((object) => object.name.toLowerCase().includes(name))
|
|
84
82
|
.map(
|
|
@@ -144,11 +142,11 @@ export const Link: Story = {
|
|
|
144
142
|
withClientProvider({
|
|
145
143
|
createSpace: true,
|
|
146
144
|
onInitialized: async (client) => {
|
|
147
|
-
client.addTypes([Testing.
|
|
145
|
+
client.addTypes([Testing.Person]);
|
|
148
146
|
},
|
|
149
147
|
onCreateSpace: async ({ space }) => {
|
|
150
148
|
const createObjects = createObjectFactory(space.db, generator);
|
|
151
|
-
await createObjects([{ type: Testing.
|
|
149
|
+
await createObjects([{ type: Testing.Person, count: 10 }]);
|
|
152
150
|
await space.db.flush({ indexes: true });
|
|
153
151
|
},
|
|
154
152
|
}),
|
|
@@ -16,7 +16,14 @@ import { Card } from '@dxos/react-ui-stack';
|
|
|
16
16
|
import { hoverableControlItem, hoverableControlItemTransition, hoverableControls } from '@dxos/react-ui-theme';
|
|
17
17
|
import { trim } from '@dxos/util';
|
|
18
18
|
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
type PreviewBlock,
|
|
21
|
+
type PreviewLinkRef,
|
|
22
|
+
type PreviewLinkTarget,
|
|
23
|
+
getLinkRef,
|
|
24
|
+
image,
|
|
25
|
+
preview,
|
|
26
|
+
} from '../extensions';
|
|
20
27
|
import { PreviewPopoverProvider, usePreviewPopover } from '../testing';
|
|
21
28
|
|
|
22
29
|
import { EditorStory } from './components';
|
|
@@ -70,7 +77,7 @@ type PreviewAction =
|
|
|
70
77
|
link: PreviewLinkRef;
|
|
71
78
|
};
|
|
72
79
|
|
|
73
|
-
const
|
|
80
|
+
const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElement; view?: EditorView }) => {
|
|
74
81
|
const target = useRefTarget(link);
|
|
75
82
|
|
|
76
83
|
const handleAction = useCallback(
|
|
@@ -180,16 +187,16 @@ type Story = StoryObj<typeof meta>;
|
|
|
180
187
|
export const Default: Story = {
|
|
181
188
|
render: () => {
|
|
182
189
|
const [view, setView] = useState<EditorView>();
|
|
183
|
-
const [previewBlocks, setPreviewBlocks] = useState<
|
|
190
|
+
const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);
|
|
184
191
|
const extensions = useMemo(() => {
|
|
185
192
|
return [
|
|
186
193
|
image(),
|
|
187
194
|
preview({
|
|
188
|
-
addBlockContainer: (
|
|
189
|
-
setPreviewBlocks((prev) => [...prev,
|
|
195
|
+
addBlockContainer: (block) => {
|
|
196
|
+
setPreviewBlocks((prev) => [...prev, block]);
|
|
190
197
|
},
|
|
191
|
-
removeBlockContainer: (
|
|
192
|
-
setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== link.ref));
|
|
198
|
+
removeBlockContainer: (block) => {
|
|
199
|
+
setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== block.link.ref));
|
|
193
200
|
},
|
|
194
201
|
}),
|
|
195
202
|
];
|
|
@@ -221,7 +228,7 @@ export const Default: Story = {
|
|
|
221
228
|
/>
|
|
222
229
|
<PreviewCard />
|
|
223
230
|
{previewBlocks.map(({ link, el }) => (
|
|
224
|
-
<
|
|
231
|
+
<PreviewBlockComponent key={link.ref} link={link} el={el} view={view} />
|
|
225
232
|
))}
|
|
226
233
|
</PreviewPopoverProvider>
|
|
227
234
|
);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
-
import React, { useState } from 'react';
|
|
6
|
+
import React, { useEffect, useState } from 'react';
|
|
7
7
|
import { createPortal } from 'react-dom';
|
|
8
8
|
|
|
9
9
|
import { useThemeContext } from '@dxos/react-ui';
|
|
@@ -22,10 +22,22 @@ import {
|
|
|
22
22
|
import { useTextEditor } from '../hooks';
|
|
23
23
|
|
|
24
24
|
const registry = {
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Custom tag: <test/>
|
|
27
|
+
*/
|
|
26
28
|
['test' as const]: {
|
|
27
29
|
block: true,
|
|
28
|
-
Component: () =>
|
|
30
|
+
Component: () => {
|
|
31
|
+
const [count, setCount] = useState(0);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
const interval = setInterval(() => {
|
|
34
|
+
setCount((prev) => prev + 1);
|
|
35
|
+
}, 1_000);
|
|
36
|
+
return () => clearInterval(interval);
|
|
37
|
+
}, []);
|
|
38
|
+
|
|
39
|
+
return <div className='p-2 border border-separator rounded'>Test {count}</div>;
|
|
40
|
+
},
|
|
29
41
|
},
|
|
30
42
|
} satisfies XmlWidgetRegistry;
|
|
31
43
|
|
|
@@ -36,7 +48,7 @@ const DefaultStory = ({ text }: { text?: string }) => {
|
|
|
36
48
|
initialValue: text,
|
|
37
49
|
extensions: [
|
|
38
50
|
createThemeExtensions({ themeMode }),
|
|
39
|
-
createBasicExtensions({ lineWrapping: true
|
|
51
|
+
createBasicExtensions({ lineWrapping: true }),
|
|
40
52
|
decorateMarkdown(),
|
|
41
53
|
extendedMarkdown({ registry }),
|
|
42
54
|
xmlTags({ registry, setWidgets }),
|
|
@@ -56,13 +68,15 @@ const DefaultStory = ({ text }: { text?: string }) => {
|
|
|
56
68
|
const text = trim`
|
|
57
69
|
# Tags
|
|
58
70
|
|
|
71
|
+
React widget below.
|
|
72
|
+
|
|
59
73
|
<test id="123" />
|
|
60
74
|
|
|
61
75
|
React widget above.
|
|
62
76
|
`;
|
|
63
77
|
|
|
64
78
|
const meta = {
|
|
65
|
-
title: 'ui/react-ui-editor/
|
|
79
|
+
title: 'ui/react-ui-editor/XmlTags',
|
|
66
80
|
render: DefaultStory,
|
|
67
81
|
decorators: [withTheme],
|
|
68
82
|
parameters: {
|
|
@@ -113,10 +113,10 @@ export const Listener: Story = {
|
|
|
113
113
|
text={str('# Listener', '', content.footer)}
|
|
114
114
|
extensions={[
|
|
115
115
|
listener({
|
|
116
|
-
onFocus: (focusing) => {
|
|
116
|
+
onFocus: ({ focusing }) => {
|
|
117
117
|
log.info('listener', { focusing });
|
|
118
118
|
},
|
|
119
|
-
onChange: (text) => {
|
|
119
|
+
onChange: ({ text }) => {
|
|
120
120
|
log.info('listener', { text });
|
|
121
121
|
},
|
|
122
122
|
}),
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import { type EditorView } from '@codemirror/view';
|
|
6
6
|
import React, { type ReactNode, forwardRef, useEffect, useImperativeHandle, useMemo, useState } from 'react';
|
|
7
7
|
|
|
8
|
+
import { createDocAccessor, createObject } from '@dxos/client/echo';
|
|
8
9
|
import { Expando } from '@dxos/echo/internal';
|
|
9
10
|
import { live } from '@dxos/echo/internal';
|
|
10
11
|
import { invariant } from '@dxos/invariant';
|
|
11
12
|
import { PublicKey } from '@dxos/keys';
|
|
12
|
-
import { createDocAccessor, createObject } from '@dxos/react-client/echo';
|
|
13
13
|
import { useForwardedRef, useThemeContext } from '@dxos/react-ui';
|
|
14
14
|
import { useAttentionAttributes } from '@dxos/react-ui-attention';
|
|
15
15
|
import { JsonFilter } from '@dxos/react-ui-syntax-highlighter';
|
|
@@ -59,12 +59,12 @@ export const EditorStory = forwardRef<EditorView | null, StoryProps>(
|
|
|
59
59
|
|
|
60
60
|
const view = viewRef.current;
|
|
61
61
|
return (
|
|
62
|
-
<div className={mx('
|
|
62
|
+
<div className={mx('is-full bs-full grid overflow-hidden', debug && 'grid-cols-2 lg:grid-cols-[1fr_600px]')}>
|
|
63
63
|
<EditorComponent ref={viewRef} object={object} text={text} extensions={extensions} {...props} />
|
|
64
64
|
|
|
65
65
|
{debug && (
|
|
66
66
|
<div
|
|
67
|
-
className='grid
|
|
67
|
+
className='grid bs-full auto-rows-fr border-l border-separator divide-y divide-separator overflow-hidden'
|
|
68
68
|
{...attentionAttrs}
|
|
69
69
|
>
|
|
70
70
|
{view && debugCustom?.(view)}
|
|
@@ -27,6 +27,7 @@ export const num = () => faker.number.int({ min: 0, max: 9999 }).toLocaleString(
|
|
|
27
27
|
export const img = '';
|
|
28
28
|
|
|
29
29
|
export const code = str(
|
|
30
|
+
// prettier-ignore
|
|
30
31
|
'// Code',
|
|
31
32
|
'const Component = () => {',
|
|
32
33
|
' const x = 100;',
|
|
@@ -38,7 +39,7 @@ export const code = str(
|
|
|
38
39
|
// Content blocks for stories
|
|
39
40
|
export const content = {
|
|
40
41
|
tasks: str(
|
|
41
|
-
//
|
|
42
|
+
// prettier-ignore
|
|
42
43
|
'### TaskList',
|
|
43
44
|
'',
|
|
44
45
|
`- [x] ${faker.lorem.sentences()}`,
|
|
@@ -50,7 +51,7 @@ export const content = {
|
|
|
50
51
|
),
|
|
51
52
|
|
|
52
53
|
bullets: str(
|
|
53
|
-
//
|
|
54
|
+
// prettier-ignore
|
|
54
55
|
'### BulletList',
|
|
55
56
|
'',
|
|
56
57
|
`- ${faker.lorem.sentences()}`,
|
|
@@ -62,7 +63,7 @@ export const content = {
|
|
|
62
63
|
),
|
|
63
64
|
|
|
64
65
|
numbered: str(
|
|
65
|
-
//
|
|
66
|
+
// prettier-ignore
|
|
66
67
|
'### OrderedList (part 1)',
|
|
67
68
|
'',
|
|
68
69
|
`1. ${faker.lorem.sentences()}`,
|
|
@@ -81,11 +82,34 @@ export const content = {
|
|
|
81
82
|
|
|
82
83
|
typescript: code,
|
|
83
84
|
|
|
84
|
-
codeblocks: str(
|
|
85
|
+
codeblocks: str(
|
|
86
|
+
// prettier-ignore
|
|
87
|
+
'### Code',
|
|
88
|
+
'',
|
|
89
|
+
'```bash',
|
|
90
|
+
'$ ls -las',
|
|
91
|
+
'```',
|
|
92
|
+
'',
|
|
93
|
+
'```tsx',
|
|
94
|
+
code,
|
|
95
|
+
'```',
|
|
96
|
+
'',
|
|
97
|
+
),
|
|
85
98
|
|
|
86
|
-
comment: str(
|
|
99
|
+
comment: str(
|
|
100
|
+
// prettier-ignore
|
|
101
|
+
'### Comment',
|
|
102
|
+
'',
|
|
103
|
+
'<!--',
|
|
104
|
+
'A comment',
|
|
105
|
+
'-->',
|
|
106
|
+
'',
|
|
107
|
+
'Partial comment. <!-- comment. -->',
|
|
108
|
+
'',
|
|
109
|
+
),
|
|
87
110
|
|
|
88
111
|
links: str(
|
|
112
|
+
// prettier-ignore
|
|
89
113
|
'### Links',
|
|
90
114
|
'',
|
|
91
115
|
'This is a naked link https://dxos.org within a sentence.',
|
|
@@ -97,6 +121,7 @@ export const content = {
|
|
|
97
121
|
),
|
|
98
122
|
|
|
99
123
|
table: str(
|
|
124
|
+
// prettier-ignore
|
|
100
125
|
'### Tables',
|
|
101
126
|
'',
|
|
102
127
|
`| ${faker.lorem.word().padStart(12)} | ${faker.lorem.word().padStart(12)} | ${faker.lorem.word().padStart(12)} |`,
|
|
@@ -113,9 +138,16 @@ export const content = {
|
|
|
113
138
|
...[1, 2, 3, 4, 5, 6].map((level) => ['#'.repeat(level) + ` Heading ${level}`, faker.lorem.sentences(), '']).flat(),
|
|
114
139
|
),
|
|
115
140
|
|
|
116
|
-
formatting: str(
|
|
141
|
+
formatting: str(
|
|
142
|
+
// prettier-ignore
|
|
143
|
+
'### Formatting',
|
|
144
|
+
'',
|
|
145
|
+
'This this is **bold**, ~~strikethrough~~, _italic_, and `f(INLINE)`.',
|
|
146
|
+
'',
|
|
147
|
+
),
|
|
117
148
|
|
|
118
149
|
blockquotes: str(
|
|
150
|
+
// prettier-ignore
|
|
119
151
|
'### Blockquotes',
|
|
120
152
|
'',
|
|
121
153
|
'> This is a block quote.',
|
|
@@ -154,6 +186,7 @@ export const text = str(
|
|
|
154
186
|
'---',
|
|
155
187
|
'## Misc',
|
|
156
188
|
content.codeblocks,
|
|
189
|
+
content.comment,
|
|
157
190
|
content.table,
|
|
158
191
|
content.image,
|
|
159
192
|
content.footer,
|
package/src/styles/markdown.ts
CHANGED
package/src/styles/theme.ts
CHANGED
|
@@ -74,12 +74,12 @@ export const defaultTheme: ThemeStyles = {
|
|
|
74
74
|
*/
|
|
75
75
|
'.cm-gutters': {
|
|
76
76
|
borderRight: 'none',
|
|
77
|
-
// background: 'transparent',
|
|
78
77
|
},
|
|
79
78
|
'.cm-gutter': {},
|
|
80
79
|
'.cm-gutter.cm-lineNumbers': {
|
|
81
80
|
paddingRight: '4px',
|
|
82
81
|
borderRight: '1px solid var(--dx-subduedSeparator)',
|
|
82
|
+
color: 'var(--dx-subduedText)',
|
|
83
83
|
},
|
|
84
84
|
'.cm-gutter.cm-lineNumbers .cm-gutterElement': {
|
|
85
85
|
minWidth: '40px',
|