@dxos/plugin-markdown 0.6.12-main.ed7cda7 → 0.6.12-staging.e11e696
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/MarkdownContainer-OWVU5WMN.mjs +467 -0
- package/dist/lib/browser/MarkdownContainer-OWVU5WMN.mjs.map +7 -0
- package/dist/lib/browser/chunk-7WORDTCY.mjs +50 -0
- package/dist/lib/browser/chunk-7WORDTCY.mjs.map +7 -0
- package/dist/lib/browser/{chunk-R6CSLNWW.mjs → chunk-OUZCML5B.mjs} +3 -1
- package/dist/lib/browser/chunk-OUZCML5B.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +54 -101
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types/index.mjs +5 -3
- package/dist/lib/node/MarkdownContainer-IWMLWI6Z.cjs +482 -0
- package/dist/lib/node/MarkdownContainer-IWMLWI6Z.cjs.map +7 -0
- package/dist/lib/node/{chunk-MCA5BBJR.cjs → chunk-HVDIBL5H.cjs} +9 -6
- package/dist/lib/node/chunk-HVDIBL5H.cjs.map +7 -0
- package/dist/lib/node/chunk-L2FIDO4L.cjs +72 -0
- package/dist/lib/node/chunk-L2FIDO4L.cjs.map +7 -0
- package/dist/lib/node/index.cjs +76 -119
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types/index.cjs +7 -5
- package/dist/lib/node/types/index.cjs.map +2 -2
- package/dist/lib/node-esm/MarkdownContainer-MLTDWWGB.mjs +468 -0
- package/dist/lib/node-esm/MarkdownContainer-MLTDWWGB.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-W525OVFX.mjs → chunk-4AGP7IJE.mjs} +3 -1
- package/dist/lib/node-esm/chunk-4AGP7IJE.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-YOIARYUO.mjs +51 -0
- package/dist/lib/node-esm/chunk-YOIARYUO.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +54 -101
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/types/index.mjs +5 -3
- package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownContainer.d.ts +15 -0
- package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownEditor.d.ts +7 -2
- package/dist/types/src/components/MarkdownEditor.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor.stories.d.ts +3 -3
- package/dist/types/src/components/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +2 -11
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/extensions.d.ts +11 -15
- package/dist/types/src/extensions.d.ts.map +1 -1
- package/dist/types/src/types/document.d.ts +8 -1
- package/dist/types/src/types/document.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +4 -4
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/package.json +32 -31
- package/src/MarkdownPlugin.tsx +31 -86
- package/src/components/MarkdownContainer.tsx +108 -0
- package/src/components/MarkdownEditor.stories.tsx +11 -5
- package/src/components/MarkdownEditor.tsx +25 -35
- package/src/components/index.ts +2 -14
- package/src/extensions.tsx +124 -67
- package/src/types/document.ts +12 -0
- package/src/types/types.ts +5 -3
- package/dist/lib/browser/DocumentCard-RKENHCNE.mjs +0 -11
- package/dist/lib/browser/DocumentCard-RKENHCNE.mjs.map +0 -7
- package/dist/lib/browser/DocumentEditor-FAXQRX37.mjs +0 -11
- package/dist/lib/browser/DocumentEditor-FAXQRX37.mjs.map +0 -7
- package/dist/lib/browser/MarkdownEditor-5EUT7P66.mjs +0 -10
- package/dist/lib/browser/MarkdownEditor-5EUT7P66.mjs.map +0 -7
- package/dist/lib/browser/chunk-354DCID5.mjs +0 -117
- package/dist/lib/browser/chunk-354DCID5.mjs.map +0 -7
- package/dist/lib/browser/chunk-AFWT6Z7B.mjs +0 -86
- package/dist/lib/browser/chunk-AFWT6Z7B.mjs.map +0 -7
- package/dist/lib/browser/chunk-AVGUYNPR.mjs +0 -220
- package/dist/lib/browser/chunk-AVGUYNPR.mjs.map +0 -7
- package/dist/lib/browser/chunk-JDTH4A4I.mjs +0 -166
- package/dist/lib/browser/chunk-JDTH4A4I.mjs.map +0 -7
- package/dist/lib/browser/chunk-R6CSLNWW.mjs.map +0 -7
- package/dist/lib/node/DocumentCard-ECPKHJT7.cjs +0 -32
- package/dist/lib/node/DocumentCard-ECPKHJT7.cjs.map +0 -7
- package/dist/lib/node/DocumentEditor-YVZTTY5L.cjs +0 -29
- package/dist/lib/node/DocumentEditor-YVZTTY5L.cjs.map +0 -7
- package/dist/lib/node/MarkdownEditor-ZD4W4UJ6.cjs +0 -31
- package/dist/lib/node/MarkdownEditor-ZD4W4UJ6.cjs.map +0 -7
- package/dist/lib/node/chunk-2T7LIVPT.cjs +0 -246
- package/dist/lib/node/chunk-2T7LIVPT.cjs.map +0 -7
- package/dist/lib/node/chunk-5ZWOR7JF.cjs +0 -114
- package/dist/lib/node/chunk-5ZWOR7JF.cjs.map +0 -7
- package/dist/lib/node/chunk-KTYIOXL5.cjs +0 -149
- package/dist/lib/node/chunk-KTYIOXL5.cjs.map +0 -7
- package/dist/lib/node/chunk-MCA5BBJR.cjs.map +0 -7
- package/dist/lib/node/chunk-OEWBZFBF.cjs +0 -191
- package/dist/lib/node/chunk-OEWBZFBF.cjs.map +0 -7
- package/dist/lib/node-esm/DocumentCard-RHVY4Z6L.mjs +0 -12
- package/dist/lib/node-esm/DocumentCard-RHVY4Z6L.mjs.map +0 -7
- package/dist/lib/node-esm/DocumentEditor-JBVVPEYE.mjs +0 -12
- package/dist/lib/node-esm/DocumentEditor-JBVVPEYE.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownEditor-OS7YG6MA.mjs +0 -11
- package/dist/lib/node-esm/MarkdownEditor-OS7YG6MA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OE3CMI5X.mjs +0 -87
- package/dist/lib/node-esm/chunk-OE3CMI5X.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-QARGBUBS.mjs +0 -221
- package/dist/lib/node-esm/chunk-QARGBUBS.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RO5FEVW6.mjs +0 -119
- package/dist/lib/node-esm/chunk-RO5FEVW6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UG4MIBCA.mjs +0 -167
- package/dist/lib/node-esm/chunk-UG4MIBCA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-W525OVFX.mjs.map +0 -7
- package/dist/types/src/components/DocumentCard.d.ts +0 -16
- package/dist/types/src/components/DocumentCard.d.ts.map +0 -1
- package/dist/types/src/components/DocumentEditor.d.ts +0 -14
- package/dist/types/src/components/DocumentEditor.d.ts.map +0 -1
- package/dist/types/src/components/HeadingMenu.d.ts +0 -13
- package/dist/types/src/components/HeadingMenu.d.ts.map +0 -1
- package/dist/types/src/components/Layout.d.ts +0 -6
- package/dist/types/src/components/Layout.d.ts.map +0 -1
- package/src/components/DocumentCard.tsx +0 -107
- package/src/components/DocumentEditor.tsx +0 -139
- package/src/components/HeadingMenu.tsx +0 -46
- package/src/components/Layout.tsx +0 -27
package/src/extensions.tsx
CHANGED
|
@@ -2,63 +2,117 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import React, { type AnchorHTMLAttributes, StrictMode } from 'react';
|
|
5
|
+
import React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react';
|
|
7
6
|
import { createRoot } from 'react-dom/client';
|
|
8
7
|
|
|
9
|
-
import { type IntentDispatcher, NavigationAction } from '@dxos/app-framework';
|
|
8
|
+
import { type IntentDispatcher, NavigationAction, useIntentDispatcher } from '@dxos/app-framework';
|
|
10
9
|
import { invariant } from '@dxos/invariant';
|
|
11
|
-
import { fullyQualifiedId, type Query } from '@dxos/react-client/echo';
|
|
10
|
+
import { createDocAccessor, fullyQualifiedId, getSpace, type Query } from '@dxos/react-client/echo';
|
|
11
|
+
import { useIdentity } from '@dxos/react-client/halo';
|
|
12
|
+
import { Icon, ThemeProvider } from '@dxos/react-ui';
|
|
13
|
+
import { createDataExtensions, listener, localStorageStateStoreAdapter, state } from '@dxos/react-ui-editor';
|
|
12
14
|
import {
|
|
13
15
|
type AutocompleteResult,
|
|
14
|
-
type Extension,
|
|
15
16
|
type EditorViewMode,
|
|
17
|
+
type Extension,
|
|
18
|
+
InputModeExtensions,
|
|
16
19
|
autocomplete,
|
|
17
20
|
decorateMarkdown,
|
|
21
|
+
folding,
|
|
22
|
+
formattingKeymap,
|
|
18
23
|
linkTooltip,
|
|
19
24
|
typewriter,
|
|
20
|
-
formattingKeymap,
|
|
21
|
-
InputModeExtensions,
|
|
22
|
-
folding,
|
|
23
25
|
} from '@dxos/react-ui-editor';
|
|
24
|
-
import {
|
|
25
|
-
import { isNotFalsy
|
|
26
|
+
import { defaultTx } from '@dxos/react-ui-theme';
|
|
27
|
+
import { isNotFalsy } from '@dxos/util';
|
|
26
28
|
|
|
27
|
-
import { type DocumentType, type MarkdownSettingsProps } from './types';
|
|
29
|
+
import { type DocumentType, type MarkdownPluginState, type MarkdownSettingsProps } from './types';
|
|
30
|
+
import { setFallbackName } from './util';
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
settings?: MarkdownSettingsProps;
|
|
32
|
-
document?: DocumentType;
|
|
33
|
-
debug?: boolean;
|
|
34
|
-
experimental?: boolean;
|
|
35
|
-
numberedHeadings?: boolean;
|
|
36
|
-
folding?: boolean;
|
|
37
|
-
query?: Query<DocumentType>;
|
|
32
|
+
type ExtensionsOptions = {
|
|
33
|
+
document: DocumentType;
|
|
38
34
|
dispatch?: IntentDispatcher;
|
|
35
|
+
query?: Query<DocumentType>;
|
|
36
|
+
settings: MarkdownSettingsProps;
|
|
37
|
+
viewMode?: EditorViewMode;
|
|
39
38
|
};
|
|
40
39
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
export const createBaseExtensions = ({
|
|
45
|
-
viewMode,
|
|
46
|
-
settings,
|
|
40
|
+
// TODO(burdon): Merge with createBaseExtensions above.
|
|
41
|
+
export const useExtensions = ({
|
|
42
|
+
extensionProviders,
|
|
47
43
|
document,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}: ExtensionsOptions
|
|
51
|
-
|
|
44
|
+
settings,
|
|
45
|
+
viewMode,
|
|
46
|
+
}: Pick<ExtensionsOptions, 'document' | 'settings' | 'viewMode'> &
|
|
47
|
+
Pick<MarkdownPluginState, 'extensionProviders'>): Extension[] => {
|
|
48
|
+
const dispatch = useIntentDispatcher();
|
|
49
|
+
const identity = useIdentity();
|
|
50
|
+
const space = getSpace(document);
|
|
51
|
+
|
|
52
|
+
// TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.
|
|
53
|
+
// TODO(burdon): Unsubscribe.
|
|
54
|
+
// const query = space?.db.query(Filter.schema(DocumentType));
|
|
55
|
+
// query?.subscribe();
|
|
56
|
+
const baseExtensions = useMemo(
|
|
57
|
+
() =>
|
|
58
|
+
createBaseExtensions({
|
|
59
|
+
document,
|
|
60
|
+
settings,
|
|
61
|
+
viewMode,
|
|
62
|
+
dispatch,
|
|
63
|
+
// query,
|
|
64
|
+
}),
|
|
65
|
+
[document, viewMode, dispatch, settings, settings.folding, settings.numberedHeadings],
|
|
66
|
+
);
|
|
52
67
|
|
|
53
68
|
//
|
|
54
|
-
//
|
|
69
|
+
// External extensions from other plugins.
|
|
55
70
|
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
71
|
+
const pluginExtensions = useMemo<Extension[] | undefined>(
|
|
72
|
+
() =>
|
|
73
|
+
extensionProviders?.reduce((acc: Extension[], provider) => {
|
|
74
|
+
const extension = typeof provider === 'function' ? provider({ document }) : provider;
|
|
75
|
+
if (extension) {
|
|
76
|
+
acc.push(extension);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return acc;
|
|
80
|
+
}, []),
|
|
81
|
+
[extensionProviders],
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
//
|
|
85
|
+
// Basic plugins.
|
|
86
|
+
//
|
|
87
|
+
return useMemo<Extension[]>(
|
|
88
|
+
() =>
|
|
89
|
+
[
|
|
90
|
+
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
91
|
+
createDataExtensions({
|
|
92
|
+
id: document.id,
|
|
93
|
+
text: document.content && createDocAccessor(document.content, ['content']),
|
|
94
|
+
space,
|
|
95
|
+
identity,
|
|
96
|
+
}),
|
|
97
|
+
state(localStorageStateStoreAdapter),
|
|
98
|
+
listener({
|
|
99
|
+
onChange: (text) => setFallbackName(document, text),
|
|
100
|
+
}),
|
|
101
|
+
baseExtensions,
|
|
102
|
+
pluginExtensions,
|
|
103
|
+
].filter(isNotFalsy),
|
|
104
|
+
[baseExtensions, pluginExtensions, document, document.content, space, identity],
|
|
105
|
+
);
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Create extension instances for editor.
|
|
110
|
+
*/
|
|
111
|
+
const createBaseExtensions = ({ document, dispatch, settings, query, viewMode }: ExtensionsOptions): Extension[] => {
|
|
112
|
+
const extensions: Extension[] = [
|
|
113
|
+
settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
114
|
+
settings.folding && folding(),
|
|
115
|
+
].filter(isNotFalsy);
|
|
62
116
|
|
|
63
117
|
//
|
|
64
118
|
// Markdown
|
|
@@ -69,7 +123,7 @@ export const createBaseExtensions = ({
|
|
|
69
123
|
formattingKeymap(),
|
|
70
124
|
decorateMarkdown({
|
|
71
125
|
selectionChangeDelay: 100,
|
|
72
|
-
numberedHeadings: settings
|
|
126
|
+
numberedHeadings: settings.numberedHeadings ? { from: 2 } : undefined,
|
|
73
127
|
// TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
|
|
74
128
|
renderLinkButton:
|
|
75
129
|
dispatch && document
|
|
@@ -98,7 +152,6 @@ export const createBaseExtensions = ({
|
|
|
98
152
|
extensions.push(
|
|
99
153
|
autocomplete({
|
|
100
154
|
onSearch: (text: string) => {
|
|
101
|
-
// TODO query
|
|
102
155
|
// TODO(burdon): Specify filter (e.g., stack).
|
|
103
156
|
return query.objects
|
|
104
157
|
.map<AutocompleteResult | undefined>((object) =>
|
|
@@ -110,29 +163,27 @@ export const createBaseExtensions = ({
|
|
|
110
163
|
}
|
|
111
164
|
: undefined,
|
|
112
165
|
)
|
|
113
|
-
.filter(
|
|
166
|
+
.filter(isNotFalsy);
|
|
114
167
|
},
|
|
115
168
|
}),
|
|
116
169
|
);
|
|
117
170
|
}
|
|
118
171
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
if (settings?.debug) {
|
|
127
|
-
const items = settings.typewriter ?? '';
|
|
128
|
-
extensions.push(...[items ? typewriter({ items: items.split(/[,\n]/) }) : undefined].filter(nonNullable));
|
|
172
|
+
if (settings.debug) {
|
|
173
|
+
const items = settings.typewriter?.split(/[,\n]/) ?? '';
|
|
174
|
+
if (items) {
|
|
175
|
+
extensions.push(typewriter({ items }));
|
|
176
|
+
}
|
|
129
177
|
}
|
|
130
178
|
|
|
131
179
|
return extensions;
|
|
132
180
|
};
|
|
133
181
|
|
|
134
|
-
// TODO(burdon): Factor out
|
|
135
|
-
const
|
|
182
|
+
// TODO(burdon): Factor out styles.
|
|
183
|
+
const style = {
|
|
184
|
+
hover: 'rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400',
|
|
185
|
+
icon: 'inline-block leading-none mis-1 cursor-pointer',
|
|
186
|
+
};
|
|
136
187
|
|
|
137
188
|
const onRenderLink = (onSelectObject: (id: string) => void) => (el: Element, url: string) => {
|
|
138
189
|
// TODO(burdon): Formalize/document internal link format.
|
|
@@ -155,25 +206,31 @@ const onRenderLink = (onSelectObject: (id: string) => void) => (el: Element, url
|
|
|
155
206
|
target: '_blank',
|
|
156
207
|
};
|
|
157
208
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
209
|
+
renderRoot(
|
|
210
|
+
el,
|
|
211
|
+
<a {...options} className={style.hover}>
|
|
212
|
+
<Icon
|
|
213
|
+
icon={isInternal ? 'ph--arrow-square-down--bold' : 'ph--arrow-square-out--bold'}
|
|
214
|
+
size={4}
|
|
215
|
+
classNames={style.icon}
|
|
216
|
+
/>
|
|
217
|
+
</a>,
|
|
166
218
|
);
|
|
167
219
|
};
|
|
168
220
|
|
|
169
221
|
const renderLinkTooltip = (el: Element, url: string) => {
|
|
170
222
|
const web = new URL(url);
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
</StrictMode>,
|
|
223
|
+
renderRoot(
|
|
224
|
+
el,
|
|
225
|
+
<a href={url} rel='noreferrer' target='_blank' className={style.hover}>
|
|
226
|
+
{web.origin}
|
|
227
|
+
<Icon icon='ph--arrow-square-out--bold' size={4} classNames={style.icon} />
|
|
228
|
+
</a>,
|
|
178
229
|
);
|
|
179
230
|
};
|
|
231
|
+
|
|
232
|
+
// TODO(burdon): Remove react rendering; use DOM directly.
|
|
233
|
+
export const renderRoot = <T extends Element>(root: T, node: ReactNode): T => {
|
|
234
|
+
createRoot(root).render(<ThemeProvider tx={defaultTx}>{node}</ThemeProvider>);
|
|
235
|
+
return root;
|
|
236
|
+
};
|
package/src/types/document.ts
CHANGED
|
@@ -15,3 +15,15 @@ export class DocumentType extends TypedObject({ typename: 'dxos.org/type/Documen
|
|
|
15
15
|
content: ref(TextType),
|
|
16
16
|
threads: S.mutable(S.Array(ref(ThreadType))),
|
|
17
17
|
}) {}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Checks if an object conforms to the interface needed to render an editor.
|
|
21
|
+
*/
|
|
22
|
+
// TODO(burdon): Normalize types (from FilesPlugin).
|
|
23
|
+
export const isEditorModel = (data: any): data is { id: string; text: string } =>
|
|
24
|
+
data &&
|
|
25
|
+
typeof data === 'object' &&
|
|
26
|
+
'id' in data &&
|
|
27
|
+
typeof data.id === 'string' &&
|
|
28
|
+
'text' in data &&
|
|
29
|
+
typeof data.text === 'string';
|
package/src/types/types.ts
CHANGED
|
@@ -27,13 +27,15 @@ export enum MarkdownAction {
|
|
|
27
27
|
|
|
28
28
|
export type MarkdownProperties = Record<string, any>;
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
// TODO(burdon): Async.
|
|
31
|
+
export type MarkdownExtensionProvider = (props: { document?: DocumentType }) => Extension | undefined;
|
|
31
32
|
|
|
32
33
|
export type OnChange = (text: string) => void;
|
|
33
34
|
|
|
34
35
|
export type MarkdownExtensionProvides = {
|
|
36
|
+
// TODO(burdon): Rename.
|
|
35
37
|
markdown: {
|
|
36
|
-
extensions:
|
|
38
|
+
extensions: MarkdownExtensionProvider;
|
|
37
39
|
};
|
|
38
40
|
};
|
|
39
41
|
|
|
@@ -46,7 +48,7 @@ type StackProvides = {
|
|
|
46
48
|
|
|
47
49
|
export type MarkdownPluginState = {
|
|
48
50
|
// Codemirror extensions provided by other plugins.
|
|
49
|
-
extensionProviders
|
|
51
|
+
extensionProviders?: MarkdownExtensionProvider[];
|
|
50
52
|
|
|
51
53
|
// TODO(burdon): Extend view mode per document to include scroll position, etc.
|
|
52
54
|
// View mode per document.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DocumentCard,
|
|
3
|
-
DocumentCard_default
|
|
4
|
-
} from "./chunk-AFWT6Z7B.mjs";
|
|
5
|
-
import "./chunk-354DCID5.mjs";
|
|
6
|
-
import "./chunk-2SJN46PA.mjs";
|
|
7
|
-
export {
|
|
8
|
-
DocumentCard,
|
|
9
|
-
DocumentCard_default as default
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=DocumentCard-RKENHCNE.mjs.map
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DocumentEditor_default
|
|
3
|
-
} from "./chunk-JDTH4A4I.mjs";
|
|
4
|
-
import "./chunk-R6CSLNWW.mjs";
|
|
5
|
-
import "./chunk-354DCID5.mjs";
|
|
6
|
-
import "./chunk-AVGUYNPR.mjs";
|
|
7
|
-
import "./chunk-2SJN46PA.mjs";
|
|
8
|
-
export {
|
|
9
|
-
DocumentEditor_default as default
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=DocumentEditor-FAXQRX37.mjs.map
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
// packages/plugins/plugin-markdown/src/extensions.tsx
|
|
2
|
-
import { ArrowSquareDown, ArrowSquareOut } from "@phosphor-icons/react";
|
|
3
|
-
import React, { StrictMode } from "react";
|
|
4
|
-
import { createRoot } from "react-dom/client";
|
|
5
|
-
import { NavigationAction } from "@dxos/app-framework";
|
|
6
|
-
import { invariant } from "@dxos/invariant";
|
|
7
|
-
import { fullyQualifiedId } from "@dxos/react-client/echo";
|
|
8
|
-
import { autocomplete, decorateMarkdown, linkTooltip, typewriter, formattingKeymap, InputModeExtensions, folding } from "@dxos/react-ui-editor";
|
|
9
|
-
import { getSize, mx } from "@dxos/react-ui-theme";
|
|
10
|
-
import { isNotFalsy, nonNullable } from "@dxos/util";
|
|
11
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
|
|
12
|
-
var createBaseExtensions = ({ viewMode, settings, document, query, dispatch }) => {
|
|
13
|
-
const extensions = [];
|
|
14
|
-
if (settings?.editorInputMode) {
|
|
15
|
-
const extension = InputModeExtensions[settings.editorInputMode];
|
|
16
|
-
if (extension) {
|
|
17
|
-
extensions.push(extension);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
if (viewMode !== "source") {
|
|
21
|
-
extensions.push(...[
|
|
22
|
-
formattingKeymap(),
|
|
23
|
-
decorateMarkdown({
|
|
24
|
-
selectionChangeDelay: 100,
|
|
25
|
-
numberedHeadings: settings?.numberedHeadings ? {
|
|
26
|
-
from: 2
|
|
27
|
-
} : void 0,
|
|
28
|
-
// TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
|
|
29
|
-
renderLinkButton: dispatch && document ? onRenderLink((id) => {
|
|
30
|
-
void dispatch({
|
|
31
|
-
action: NavigationAction.ADD_TO_ACTIVE,
|
|
32
|
-
data: {
|
|
33
|
-
id,
|
|
34
|
-
part: "main",
|
|
35
|
-
pivotId: fullyQualifiedId(document),
|
|
36
|
-
scrollIntoView: true
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}) : void 0
|
|
40
|
-
}),
|
|
41
|
-
linkTooltip(renderLinkTooltip)
|
|
42
|
-
]);
|
|
43
|
-
}
|
|
44
|
-
if (query) {
|
|
45
|
-
extensions.push(autocomplete({
|
|
46
|
-
onSearch: (text) => {
|
|
47
|
-
return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
|
|
48
|
-
label: object.name,
|
|
49
|
-
// TODO(burdon): Factor out URL builder.
|
|
50
|
-
apply: `[${object.name}](/${fullyQualifiedId(object)})`
|
|
51
|
-
} : void 0).filter(nonNullable);
|
|
52
|
-
}
|
|
53
|
-
}));
|
|
54
|
-
}
|
|
55
|
-
extensions.push(...[
|
|
56
|
-
//
|
|
57
|
-
settings?.folding && folding()
|
|
58
|
-
].filter(isNotFalsy));
|
|
59
|
-
if (settings?.debug) {
|
|
60
|
-
const items = settings.typewriter ?? "";
|
|
61
|
-
extensions.push(...[
|
|
62
|
-
items ? typewriter({
|
|
63
|
-
items: items.split(/[,\n]/)
|
|
64
|
-
}) : void 0
|
|
65
|
-
].filter(nonNullable));
|
|
66
|
-
}
|
|
67
|
-
return extensions;
|
|
68
|
-
};
|
|
69
|
-
var hover = "rounded-sm text-primary-600 hover:text-primary-500 dark:text-primary-300 hover:dark:text-primary-200";
|
|
70
|
-
var onRenderLink = (onSelectObject) => (el, url) => {
|
|
71
|
-
const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
|
|
72
|
-
url.startsWith(window.location.origin);
|
|
73
|
-
const options = isInternal ? {
|
|
74
|
-
onClick: () => {
|
|
75
|
-
const qualifiedId = url.split("/").at(-1);
|
|
76
|
-
invariant(qualifiedId, "Invalid link format.", {
|
|
77
|
-
F: __dxlog_file,
|
|
78
|
-
L: 148,
|
|
79
|
-
S: void 0,
|
|
80
|
-
A: [
|
|
81
|
-
"qualifiedId",
|
|
82
|
-
"'Invalid link format.'"
|
|
83
|
-
]
|
|
84
|
-
});
|
|
85
|
-
onSelectObject(qualifiedId);
|
|
86
|
-
}
|
|
87
|
-
} : {
|
|
88
|
-
href: url,
|
|
89
|
-
rel: "noreferrer",
|
|
90
|
-
target: "_blank"
|
|
91
|
-
};
|
|
92
|
-
const LinkIcon = isInternal ? ArrowSquareDown : ArrowSquareOut;
|
|
93
|
-
createRoot(el).render(/* @__PURE__ */ React.createElement(StrictMode, null, /* @__PURE__ */ React.createElement("a", {
|
|
94
|
-
...options,
|
|
95
|
-
className: hover
|
|
96
|
-
}, /* @__PURE__ */ React.createElement(LinkIcon, {
|
|
97
|
-
weight: "bold",
|
|
98
|
-
className: mx(getSize(4), "inline-block leading-none mis-1 cursor-pointer")
|
|
99
|
-
}))));
|
|
100
|
-
};
|
|
101
|
-
var renderLinkTooltip = (el, url) => {
|
|
102
|
-
const web = new URL(url);
|
|
103
|
-
createRoot(el).render(/* @__PURE__ */ React.createElement(StrictMode, null, /* @__PURE__ */ React.createElement("a", {
|
|
104
|
-
href: url,
|
|
105
|
-
target: "_blank",
|
|
106
|
-
rel: "noreferrer",
|
|
107
|
-
className: hover
|
|
108
|
-
}, web.origin, /* @__PURE__ */ React.createElement(ArrowSquareOut, {
|
|
109
|
-
weight: "bold",
|
|
110
|
-
className: mx(getSize(4), "inline-block leading-none mis-1 cursor-pointer")
|
|
111
|
-
}))));
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
export {
|
|
115
|
-
createBaseExtensions
|
|
116
|
-
};
|
|
117
|
-
//# sourceMappingURL=chunk-354DCID5.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/extensions.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { ArrowSquareDown, ArrowSquareOut, type Icon } from '@phosphor-icons/react';\nimport React, { type AnchorHTMLAttributes, StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { type IntentDispatcher, NavigationAction } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { fullyQualifiedId, type Query } from '@dxos/react-client/echo';\nimport {\n type AutocompleteResult,\n type Extension,\n type EditorViewMode,\n autocomplete,\n decorateMarkdown,\n linkTooltip,\n typewriter,\n formattingKeymap,\n InputModeExtensions,\n folding,\n} from '@dxos/react-ui-editor';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { isNotFalsy, nonNullable } from '@dxos/util';\n\nimport { type DocumentType, type MarkdownSettingsProps } from './types';\n\nexport type ExtensionsOptions = {\n viewMode?: EditorViewMode;\n settings?: MarkdownSettingsProps;\n document?: DocumentType;\n debug?: boolean;\n experimental?: boolean;\n numberedHeadings?: boolean;\n folding?: boolean;\n query?: Query<DocumentType>;\n dispatch?: IntentDispatcher;\n};\n\n/**\n * Create extension instances for editor.\n */\nexport const createBaseExtensions = ({\n viewMode,\n settings,\n document,\n query,\n dispatch,\n}: ExtensionsOptions): Extension[] => {\n const extensions: Extension[] = [];\n\n //\n // Editor mode.\n //\n if (settings?.editorInputMode) {\n const extension = InputModeExtensions[settings.editorInputMode];\n if (extension) {\n extensions.push(extension);\n }\n }\n\n //\n // Markdown\n //\n if (viewMode !== 'source') {\n extensions.push(\n ...[\n formattingKeymap(),\n decorateMarkdown({\n selectionChangeDelay: 100,\n numberedHeadings: settings?.numberedHeadings ? { from: 2 } : undefined,\n // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.\n renderLinkButton:\n dispatch && document\n ? onRenderLink((id: string) => {\n void dispatch({\n action: NavigationAction.ADD_TO_ACTIVE,\n data: {\n id,\n part: 'main',\n pivotId: fullyQualifiedId(document),\n scrollIntoView: true,\n },\n });\n })\n : undefined,\n }),\n linkTooltip(renderLinkTooltip),\n ],\n );\n }\n\n //\n // Autocomplete object links.\n //\n if (query) {\n extensions.push(\n autocomplete({\n onSearch: (text: string) => {\n // TODO query\n // TODO(burdon): Specify filter (e.g., stack).\n return query.objects\n .map<AutocompleteResult | undefined>((object) =>\n object.name?.length && object.id !== document?.id\n ? {\n label: object.name,\n // TODO(burdon): Factor out URL builder.\n apply: `[${object.name}](/${fullyQualifiedId(object)})`,\n }\n : undefined,\n )\n .filter(nonNullable);\n },\n }),\n );\n }\n\n extensions.push(\n ...[\n //\n settings?.folding && folding(),\n ].filter(isNotFalsy),\n );\n\n if (settings?.debug) {\n const items = settings.typewriter ?? '';\n extensions.push(...[items ? typewriter({ items: items.split(/[,\\n]/) }) : undefined].filter(nonNullable));\n }\n\n return extensions;\n};\n\n// TODO(burdon): Factor out style.\nconst hover = 'rounded-sm text-primary-600 hover:text-primary-500 dark:text-primary-300 hover:dark:text-primary-200';\n\nconst onRenderLink = (onSelectObject: (id: string) => void) => (el: Element, url: string) => {\n // TODO(burdon): Formalize/document internal link format.\n const isInternal =\n url.startsWith('/') ||\n // TODO(wittjosiah): This should probably be parsed out on paste?\n url.startsWith(window.location.origin);\n\n const options: AnchorHTMLAttributes<any> = isInternal\n ? {\n onClick: () => {\n const qualifiedId = url.split('/').at(-1);\n invariant(qualifiedId, 'Invalid link format.');\n onSelectObject(qualifiedId);\n },\n }\n : {\n href: url,\n rel: 'noreferrer',\n target: '_blank',\n };\n\n const LinkIcon: Icon = isInternal ? ArrowSquareDown : ArrowSquareOut;\n\n createRoot(el).render(\n <StrictMode>\n <a {...options} className={hover}>\n <LinkIcon weight='bold' className={mx(getSize(4), 'inline-block leading-none mis-1 cursor-pointer')} />\n </a>\n </StrictMode>,\n );\n};\n\nconst renderLinkTooltip = (el: Element, url: string) => {\n const web = new URL(url);\n createRoot(el).render(\n <StrictMode>\n <a href={url} target='_blank' rel='noreferrer' className={hover}>\n {web.origin}\n <ArrowSquareOut weight='bold' className={mx(getSize(4), 'inline-block leading-none mis-1 cursor-pointer')} />\n </a>\n </StrictMode>,\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ArrowSquareDown", "ArrowSquareOut", "React", "StrictMode", "createRoot", "NavigationAction", "invariant", "fullyQualifiedId", "autocomplete", "decorateMarkdown", "linkTooltip", "typewriter", "formattingKeymap", "InputModeExtensions", "folding", "getSize", "mx", "isNotFalsy", "nonNullable", "createBaseExtensions", "viewMode", "settings", "document", "query", "dispatch", "extensions", "editorInputMode", "extension", "push", "selectionChangeDelay", "numberedHeadings", "from", "undefined", "renderLinkButton", "onRenderLink", "id", "action", "ADD_TO_ACTIVE", "data", "part", "pivotId", "scrollIntoView", "renderLinkTooltip", "onSearch", "text", "objects", "map", "object", "name", "length", "label", "apply", "filter", "debug", "items", "split", "hover", "onSelectObject", "el", "url", "isInternal", "startsWith", "window", "location", "origin", "options", "onClick", "qualifiedId", "at", "href", "rel", "target", "LinkIcon", "render", "a", "className", "weight", "web", "URL"]
|
|
7
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createBaseExtensions
|
|
3
|
-
} from "./chunk-354DCID5.mjs";
|
|
4
|
-
import {
|
|
5
|
-
MARKDOWN_PLUGIN
|
|
6
|
-
} from "./chunk-2SJN46PA.mjs";
|
|
7
|
-
|
|
8
|
-
// packages/plugins/plugin-markdown/src/components/DocumentCard.tsx
|
|
9
|
-
import React, { forwardRef } from "react";
|
|
10
|
-
import { createDocAccessor } from "@dxos/react-client/echo";
|
|
11
|
-
import { DropdownMenu, Input, useThemeContext, useTranslation } from "@dxos/react-ui";
|
|
12
|
-
import { Card } from "@dxos/react-ui-card";
|
|
13
|
-
import { createBasicExtensions, createDataExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
|
|
14
|
-
import { focusRing, mx } from "@dxos/react-ui-theme";
|
|
15
|
-
var DocumentCard = /* @__PURE__ */ forwardRef(({ classNames, isDragging, draggableStyle, draggableProps, item: { id, object, color }, grow, settings, onSelect, onAction }, forwardRef2) => {
|
|
16
|
-
const { t } = useTranslation(MARKDOWN_PLUGIN);
|
|
17
|
-
const { themeMode } = useThemeContext();
|
|
18
|
-
const { parentRef, focusAttributes } = useTextEditor(() => ({
|
|
19
|
-
initialValue: object.content?.content,
|
|
20
|
-
extensions: [
|
|
21
|
-
createBasicExtensions({
|
|
22
|
-
placeholder: t("editor placeholder")
|
|
23
|
-
}),
|
|
24
|
-
createThemeExtensions({
|
|
25
|
-
themeMode
|
|
26
|
-
}),
|
|
27
|
-
createDataExtensions({
|
|
28
|
-
id: object.id,
|
|
29
|
-
text: object.content && createDocAccessor(object.content, [
|
|
30
|
-
"content"
|
|
31
|
-
])
|
|
32
|
-
}),
|
|
33
|
-
createBaseExtensions({
|
|
34
|
-
document: object,
|
|
35
|
-
debug: settings.debug,
|
|
36
|
-
experimental: settings.experimental
|
|
37
|
-
})
|
|
38
|
-
]
|
|
39
|
-
}), [
|
|
40
|
-
object,
|
|
41
|
-
object.content,
|
|
42
|
-
themeMode
|
|
43
|
-
]);
|
|
44
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
45
|
-
role: "none",
|
|
46
|
-
ref: forwardRef2,
|
|
47
|
-
className: "flex w-full",
|
|
48
|
-
style: draggableStyle
|
|
49
|
-
}, /* @__PURE__ */ React.createElement(Card.Root, {
|
|
50
|
-
classNames: mx("w-full snap-center", color, isDragging && "opacity-20", classNames),
|
|
51
|
-
grow
|
|
52
|
-
}, /* @__PURE__ */ React.createElement(Card.Header, {
|
|
53
|
-
onDoubleClick: () => onSelect?.()
|
|
54
|
-
}, /* @__PURE__ */ React.createElement(Card.DragHandle, draggableProps), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
|
|
55
|
-
variant: "subdued",
|
|
56
|
-
classNames: "p-0",
|
|
57
|
-
placeholder: t("document title placeholder"),
|
|
58
|
-
value: object.name,
|
|
59
|
-
onChange: (event) => object.name = event.target.value
|
|
60
|
-
})), /* @__PURE__ */ React.createElement(Card.Menu, null, /* @__PURE__ */ React.createElement(DropdownMenu.Item, {
|
|
61
|
-
onClick: () => onAction?.({
|
|
62
|
-
id,
|
|
63
|
-
action: "delete"
|
|
64
|
-
})
|
|
65
|
-
}, /* @__PURE__ */ React.createElement("span", {
|
|
66
|
-
className: "grow"
|
|
67
|
-
}, "Delete")), /* @__PURE__ */ React.createElement(DropdownMenu.Item, {
|
|
68
|
-
onClick: () => onAction?.({
|
|
69
|
-
id,
|
|
70
|
-
action: "set-color"
|
|
71
|
-
})
|
|
72
|
-
}, /* @__PURE__ */ React.createElement("span", {
|
|
73
|
-
className: "grow"
|
|
74
|
-
}, "Change color")))), /* @__PURE__ */ React.createElement(Card.Body, null, /* @__PURE__ */ React.createElement("div", {
|
|
75
|
-
...focusAttributes,
|
|
76
|
-
ref: parentRef,
|
|
77
|
-
className: mx(focusRing, "rounded-sm h-full p-1 text-sm")
|
|
78
|
-
}))));
|
|
79
|
-
});
|
|
80
|
-
var DocumentCard_default = DocumentCard;
|
|
81
|
-
|
|
82
|
-
export {
|
|
83
|
-
DocumentCard,
|
|
84
|
-
DocumentCard_default
|
|
85
|
-
};
|
|
86
|
-
//# sourceMappingURL=chunk-AFWT6Z7B.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/DocumentCard.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { DropdownMenu, Input, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui-card';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport type { MosaicTileComponent } from '@dxos/react-ui-mosaic';\nimport { focusRing, mx } from '@dxos/react-ui-theme';\n\nimport { createBaseExtensions } from '../extensions';\nimport { MARKDOWN_PLUGIN } from '../meta';\nimport { type DocumentType, type MarkdownSettingsProps } from '../types';\n\nexport type DocumentItemProps = {\n id: string;\n object: DocumentType;\n color?: string;\n};\n\nexport type DocumentCardProps = {\n settings: MarkdownSettingsProps;\n};\n\n/**\n * @deprecated\n */\n// TODO(wittjosiah): Unify with DocumentEditor.\nexport const DocumentCard: MosaicTileComponent<DocumentItemProps, HTMLDivElement, DocumentCardProps> = forwardRef(\n (\n {\n classNames,\n isDragging,\n draggableStyle,\n draggableProps,\n item: { id, object, color },\n grow,\n settings,\n onSelect,\n onAction,\n },\n forwardRef,\n ) => {\n const { t } = useTranslation(MARKDOWN_PLUGIN);\n const { themeMode } = useThemeContext();\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n initialValue: object.content?.content,\n extensions: [\n createBasicExtensions({ placeholder: t('editor placeholder') }),\n createThemeExtensions({ themeMode }),\n createDataExtensions({\n id: object.id,\n text: object.content && createDocAccessor(object.content, ['content']),\n }),\n createBaseExtensions({\n document: object,\n debug: settings.debug,\n experimental: settings.experimental,\n }),\n ],\n }),\n [object, object.content, themeMode],\n );\n\n return (\n <div role='none' ref={forwardRef} className='flex w-full' style={draggableStyle}>\n <Card.Root classNames={mx('w-full snap-center', color, isDragging && 'opacity-20', classNames)} grow={grow}>\n <Card.Header onDoubleClick={() => onSelect?.()}>\n <Card.DragHandle {...draggableProps} />\n <Input.Root>\n <Input.TextInput\n variant='subdued'\n classNames='p-0'\n placeholder={t('document title placeholder')}\n value={object.name}\n onChange={(event) => (object.name = event.target.value)}\n />\n </Input.Root>\n <Card.Menu>\n {/* TODO(burdon): Handle events/intents? */}\n <DropdownMenu.Item onClick={() => onAction?.({ id, action: 'delete' })}>\n <span className='grow'>Delete</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => onAction?.({ id, action: 'set-color' })}>\n <span className='grow'>Change color</span>\n </DropdownMenu.Item>\n </Card.Menu>\n </Card.Header>\n <Card.Body>\n <div {...focusAttributes} ref={parentRef} className={mx(focusRing, 'rounded-sm h-full p-1 text-sm')} />\n </Card.Body>\n </Card.Root>\n </div>\n );\n },\n);\n\nexport default DocumentCard;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;AAIA,OAAOA,SAASC,kBAAkB;AAElC,SAASC,yBAAyB;AAClC,SAASC,cAAcC,OAAOC,iBAAiBC,sBAAsB;AACrE,SAASC,YAAY;AACrB,SACEC,uBACAC,sBACAC,uBACAC,qBACK;AAEP,SAASC,WAAWC,UAAU;AAoBvB,IAAMC,eAA0FC,2BACrG,CACE,EACEC,YACAC,YACAC,gBACAC,gBACAC,MAAM,EAAEC,IAAIC,QAAQC,MAAK,GACzBC,MACAC,UACAC,UACAC,SAAQ,GAEVZ,gBAAAA;AAEA,QAAM,EAAEa,EAAC,IAAKC,eAAeC,eAAAA;AAC7B,QAAM,EAAEC,UAAS,IAAKC,gBAAAA;AACtB,QAAM,EAAEC,WAAWC,gBAAe,IAAKC,cACrC,OAAO;IACLC,cAAcd,OAAOe,SAASA;IAC9BC,YAAY;MACVC,sBAAsB;QAAEC,aAAaZ,EAAE,oBAAA;MAAsB,CAAA;MAC7Da,sBAAsB;QAAEV;MAAU,CAAA;MAClCW,qBAAqB;QACnBrB,IAAIC,OAAOD;QACXsB,MAAMrB,OAAOe,WAAWO,kBAAkBtB,OAAOe,SAAS;UAAC;SAAU;MACvE,CAAA;MACAQ,qBAAqB;QACnBC,UAAUxB;QACVyB,OAAOtB,SAASsB;QAChBC,cAAcvB,SAASuB;MACzB,CAAA;;EAEJ,IACA;IAAC1B;IAAQA,OAAOe;IAASN;GAAU;AAGrC,SACE,sBAAA,cAACkB,OAAAA;IAAIC,MAAK;IAAOC,KAAKpC;IAAYqC,WAAU;IAAcC,OAAOnC;KAC/D,sBAAA,cAACoC,KAAKC,MAAI;IAACvC,YAAYwC,GAAG,sBAAsBjC,OAAON,cAAc,cAAcD,UAAAA;IAAaQ;KAC9F,sBAAA,cAAC8B,KAAKG,QAAM;IAACC,eAAe,MAAMhC,WAAAA;KAChC,sBAAA,cAAC4B,KAAKK,YAAexC,cAAAA,GACrB,sBAAA,cAACyC,MAAML,MAAI,MACT,sBAAA,cAACK,MAAMC,WAAS;IACdC,SAAQ;IACR9C,YAAW;IACXwB,aAAaZ,EAAE,4BAAA;IACfmC,OAAOzC,OAAO0C;IACdC,UAAU,CAACC,UAAW5C,OAAO0C,OAAOE,MAAMC,OAAOJ;OAGrD,sBAAA,cAACT,KAAKc,MAAI,MAER,sBAAA,cAACC,aAAaC,MAAI;IAACC,SAAS,MAAM5C,WAAW;MAAEN;MAAImD,QAAQ;IAAS,CAAA;KAClE,sBAAA,cAACC,QAAAA;IAAKrB,WAAU;KAAO,QAAA,CAAA,GAEzB,sBAAA,cAACiB,aAAaC,MAAI;IAACC,SAAS,MAAM5C,WAAW;MAAEN;MAAImD,QAAQ;IAAY,CAAA;KACrE,sBAAA,cAACC,QAAAA;IAAKrB,WAAU;KAAO,cAAA,CAAA,CAAA,CAAA,GAI7B,sBAAA,cAACE,KAAKoB,MAAI,MACR,sBAAA,cAACzB,OAAAA;IAAK,GAAGf;IAAiBiB,KAAKlB;IAAWmB,WAAWI,GAAGmB,WAAW,+BAAA;;AAK7E,CAAA;AAGF,IAAA,uBAAe7D;",
|
|
6
|
-
"names": ["React", "forwardRef", "createDocAccessor", "DropdownMenu", "Input", "useThemeContext", "useTranslation", "Card", "createBasicExtensions", "createDataExtensions", "createThemeExtensions", "useTextEditor", "focusRing", "mx", "DocumentCard", "forwardRef", "classNames", "isDragging", "draggableStyle", "draggableProps", "item", "id", "object", "color", "grow", "settings", "onSelect", "onAction", "t", "useTranslation", "MARKDOWN_PLUGIN", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "initialValue", "content", "extensions", "createBasicExtensions", "placeholder", "createThemeExtensions", "createDataExtensions", "text", "createDocAccessor", "createBaseExtensions", "document", "debug", "experimental", "div", "role", "ref", "className", "style", "Card", "Root", "mx", "Header", "onDoubleClick", "DragHandle", "Input", "TextInput", "variant", "value", "name", "onChange", "event", "target", "Menu", "DropdownMenu", "Item", "onClick", "action", "span", "Body", "focusRing"]
|
|
7
|
-
}
|