@dxos/plugin-markdown 0.7.4 → 0.7.5-main.9cb18ac
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-6OPC5MKP.mjs → MarkdownContainer-XY6NEUOA.mjs} +86 -86
- package/dist/lib/browser/MarkdownContainer-XY6NEUOA.mjs.map +7 -0
- package/dist/lib/browser/{chunk-CMSUKMPM.mjs → chunk-6FIHBJRV.mjs} +27 -7
- package/dist/lib/browser/chunk-6FIHBJRV.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TZN5FGB2.mjs → chunk-R4MG2DP2.mjs} +6 -6
- package/dist/lib/browser/chunk-R4MG2DP2.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +88 -174
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node/{MarkdownContainer-6OKJOHTZ.cjs → MarkdownContainer-EX6YDF6J.cjs} +78 -78
- package/dist/lib/node/MarkdownContainer-EX6YDF6J.cjs.map +7 -0
- package/dist/lib/node/{chunk-YGMWZIIJ.cjs → chunk-CQMXZ54Z.cjs} +28 -8
- package/dist/lib/node/chunk-CQMXZ54Z.cjs.map +7 -0
- package/dist/lib/node/{chunk-KEPAM4JP.cjs → chunk-SXQAPZZU.cjs} +9 -9
- package/dist/lib/node/chunk-SXQAPZZU.cjs.map +7 -0
- package/dist/lib/node/index.cjs +123 -209
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types/index.cjs +5 -5
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/lib/node-esm/{MarkdownContainer-GBNSGROQ.mjs → MarkdownContainer-E7W623A7.mjs} +86 -86
- package/dist/lib/node-esm/MarkdownContainer-E7W623A7.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NUMUUCYF.mjs → chunk-Y76MM22C.mjs} +6 -6
- package/dist/lib/node-esm/chunk-Y76MM22C.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ERJ52KN2.mjs → chunk-ZVFBKBSA.mjs} +27 -7
- package/dist/lib/node-esm/chunk-ZVFBKBSA.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +88 -174
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/types/index.mjs +1 -1
- package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor.d.ts.map +1 -1
- package/dist/types/src/extensions.d.ts +2 -2
- package/dist/types/src/extensions.d.ts.map +1 -1
- package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +1 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +82 -0
- package/dist/types/src/types/schema.d.ts.map +1 -0
- package/dist/types/src/types/types.d.ts +31 -12
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/package.json +30 -29
- package/src/MarkdownPlugin.tsx +84 -149
- package/src/components/MarkdownContainer.tsx +8 -3
- package/src/components/MarkdownEditor.tsx +5 -13
- package/src/extensions.tsx +9 -10
- package/src/hooks/useSelectCurrentThread.tsx +17 -14
- package/src/types/index.ts +1 -1
- package/src/types/{document.ts → schema.ts} +4 -3
- package/src/types/types.ts +21 -15
- package/src/util.tsx +3 -3
- package/dist/lib/browser/MarkdownContainer-6OPC5MKP.mjs.map +0 -7
- package/dist/lib/browser/chunk-CMSUKMPM.mjs.map +0 -7
- package/dist/lib/browser/chunk-TZN5FGB2.mjs.map +0 -7
- package/dist/lib/node/MarkdownContainer-6OKJOHTZ.cjs.map +0 -7
- package/dist/lib/node/chunk-KEPAM4JP.cjs.map +0 -7
- package/dist/lib/node/chunk-YGMWZIIJ.cjs.map +0 -7
- package/dist/lib/node-esm/MarkdownContainer-GBNSGROQ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ERJ52KN2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NUMUUCYF.mjs.map +0 -7
- package/dist/types/src/types/document.d.ts +0 -106
- package/dist/types/src/types/document.d.ts.map +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/MarkdownContainer.tsx", "../../../src/components/MarkdownEditor.tsx", "../../../src/hooks/useSelectCurrentThread.tsx", "../../../src/extensions.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useMemo } from 'react';\n\nimport { useResolvePlugin, parseFileManagerPlugin } from '@dxos/app-framework';\nimport { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';\n\nimport { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';\nimport { useExtensions } from '../extensions';\nimport { DocumentType, type MarkdownSettingsProps } from '../types';\nimport { getFallbackName } from '../util';\n\nexport type MarkdownContainerProps = Pick<\n MarkdownEditorProps,\n 'role' | 'extensionProviders' | 'viewMode' | 'editorStateStore' | 'onViewModeChange'\n> & {\n id: string;\n object: DocumentType | any;\n settings: MarkdownSettingsProps;\n};\n\n// TODO(burdon): Move toolbar here.\n// TODO(burdon): Factor out difference for ECHO and non-ECHO objects; i.e., single component.\nconst MarkdownContainer = ({\n id,\n role,\n object,\n extensionProviders,\n settings,\n viewMode,\n editorStateStore,\n onViewModeChange,\n}: MarkdownContainerProps) => {\n const scrollPastEnd = role === 'article';\n const doc = object instanceof DocumentType ? object : undefined;\n const extensions = useExtensions({ extensionProviders, document: doc, settings, viewMode, editorStateStore });\n\n if (doc) {\n return (\n <DocumentEditor\n id={fullyQualifiedId(object)}\n role={role}\n document={doc}\n extensions={extensions}\n viewMode={viewMode}\n settings={settings}\n scrollPastEnd={scrollPastEnd}\n onViewModeChange={onViewModeChange}\n />\n );\n } else {\n return (\n <MarkdownEditor\n id={id}\n role={role}\n initialValue={object.text}\n extensions={extensions}\n viewMode={viewMode}\n toolbar={settings.toolbar}\n inputMode={settings.editorInputMode}\n scrollPastEnd={scrollPastEnd}\n onViewModeChange={onViewModeChange}\n />\n );\n }\n};\n\ntype DocumentEditorProps = Omit<MarkdownContainerProps, 'object' | 'extensionProviders' | 'editorStateStore'> &\n Pick<MarkdownEditorProps, 'id' | 'scrollPastEnd' | 'extensions'> & {\n document: DocumentType;\n };\n\nexport const DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }: DocumentEditorProps) => {\n const space = getSpace(doc);\n\n // Migrate gradually to `fallbackName`.\n useEffect(() => {\n if (typeof doc.fallbackName === 'string') {\n return;\n }\n\n const fallbackName = doc.content?.target?.content ? getFallbackName(doc.content.target.content) : undefined;\n if (fallbackName) {\n doc.fallbackName = fallbackName;\n }\n }, [doc, doc.content]);\n\n // File dragging.\n const fileManagerPlugin = useResolvePlugin(parseFileManagerPlugin);\n const handleFileUpload = useMemo(() => {\n if (space === undefined || fileManagerPlugin?.provides.file.upload === undefined) {\n return undefined;\n }\n\n // TODO(burdon): Re-order props: space, file.\n return async (file: File) => fileManagerPlugin?.provides?.file?.upload?.(file, space);\n }, [space, fileManagerPlugin]);\n\n return (\n <MarkdownEditor\n id={id}\n initialValue={doc.content?.target?.content}\n viewMode={viewMode}\n toolbar={settings.toolbar}\n inputMode={settings.editorInputMode}\n onFileUpload={handleFileUpload}\n {...props}\n />\n );\n};\n\nexport default MarkdownContainer;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { openSearchPanel } from '@codemirror/search';\nimport { type EditorView } from '@codemirror/view';\nimport React, { useMemo, useEffect, useCallback } from 'react';\n\nimport { createIntent, type FileInfo, LayoutAction, NavigationAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n type Action,\n type DNDOptions,\n type EditorViewMode,\n type EditorInputMode,\n type EditorSelectionState,\n type EditorStateStore,\n Toolbar,\n type UseTextEditorProps,\n createBasicExtensions,\n createMarkdownExtensions,\n createThemeExtensions,\n dropFile,\n editorContent,\n editorGutter,\n processAction,\n useActionHandler,\n useCommentState,\n useCommentClickListener,\n useFormattingState,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx, textBlockWidth } from '@dxos/react-ui-theme';\nimport { isNotFalsy, nonNullable } from '@dxos/util';\n\nimport { useSelectCurrentThread } from '../hooks';\nimport { MARKDOWN_PLUGIN } from '../meta';\nimport { type MarkdownPluginState } from '../types';\n\nconst DEFAULT_VIEW_MODE: EditorViewMode = 'preview';\n\nexport type MarkdownEditorProps = {\n id: string;\n role?: string;\n inputMode?: EditorInputMode;\n scrollPastEnd?: boolean;\n toolbar?: boolean;\n viewMode?: EditorViewMode;\n editorStateStore?: EditorStateStore;\n onViewModeChange?: (id: string, mode: EditorViewMode) => void;\n onFileUpload?: (file: File) => Promise<FileInfo | undefined>;\n} & Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &\n Partial<Pick<MarkdownPluginState, 'extensionProviders'>>;\n\n/**\n * Base markdown editor component.\n *\n * This component provides all the features of the markdown editor that do no depend on ECHO.\n * This allows it to be used as a common editor for markdown content on arbitrary backends (e.g. files).\n */\nexport const MarkdownEditor = ({\n id,\n role = 'article',\n initialValue,\n extensions,\n extensionProviders,\n scrollPastEnd,\n toolbar,\n viewMode,\n editorStateStore,\n onFileUpload,\n onViewModeChange,\n}: MarkdownEditorProps) => {\n const { t } = useTranslation(MARKDOWN_PLUGIN);\n const { themeMode } = useThemeContext();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const [formattingState, formattingObserver] = useFormattingState();\n const { hasAttention } = useAttention(id);\n\n // Restore last selection and scroll point.\n const { scrollTo, selection } = useMemo<EditorSelectionState>(() => editorStateStore?.getState(id) ?? {}, [id]);\n\n // Extensions from other plugins.\n // TODO(burdon): Reconcile with DocumentEditor.useExtensions.\n const providerExtensions = useMemo(\n () => extensionProviders?.flatMap((provider) => provider({})).filter(nonNullable),\n [extensionProviders],\n );\n\n // TODO(Zan): Move these into thread plugin as well?\n const [commentsState, commentObserver] = useCommentState();\n const onCommentClick = useCallback(async () => {\n await dispatch(createIntent(NavigationAction.Open, { activeParts: { complementary: 'comments' } }));\n await dispatch(createIntent(LayoutAction.SetLayout, { element: 'complementary', state: true }));\n }, [dispatch]);\n const commentClickObserver = useCommentClickListener(onCommentClick);\n\n // Drag files.\n const handleDrop: DNDOptions['onDrop'] = async (view, { files }) => {\n const file = files[0];\n const info = file && onFileUpload ? await onFileUpload(file) : undefined;\n if (info) {\n processAction(view, { type: 'image', data: info.url });\n }\n };\n\n const {\n parentRef,\n view: editorView,\n focusAttributes,\n } = useTextEditor(\n () => ({\n initialValue,\n extensions: [\n formattingObserver,\n commentObserver,\n commentClickObserver,\n createBasicExtensions({\n readonly: viewMode === 'readonly',\n placeholder: t('editor placeholder'),\n scrollPastEnd: role === 'section' ? false : scrollPastEnd,\n }),\n createMarkdownExtensions({ themeMode }),\n createThemeExtensions({\n themeMode,\n syntaxHighlighting: true,\n slots: { content: { className: editorContent } },\n }),\n editorGutter,\n role !== 'section' && onFileUpload && dropFile({ onDrop: handleDrop }),\n providerExtensions,\n extensions,\n ].filter(isNotFalsy),\n ...(role !== 'section' && {\n id,\n scrollTo,\n selection,\n // TODO(wittjosiah): Autofocus based on layout is racy.\n // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,\n moveToEndOfLine: true,\n }),\n }),\n [id, formattingObserver, viewMode, themeMode, extensions, providerExtensions],\n );\n\n useTest(editorView);\n useSelectCurrentThread(editorView, id);\n\n // Toolbar handler.\n const handleToolbarAction = useActionHandler(editorView);\n const handleAction = (action: Action) => {\n switch (action.type) {\n case 'search': {\n if (editorView) {\n openSearchPanel(editorView);\n }\n return;\n }\n case 'view-mode': {\n onViewModeChange?.(id, action.data);\n return;\n }\n }\n\n handleToolbarAction?.(action);\n };\n\n return (\n <StackItem.Content toolbar={toolbar}>\n {toolbar && (\n <div\n role='none'\n className={mx(\n 'attention-surface is-full border-be !border-separator',\n role === 'section' && 'sticky block-start-0 z-[1] -mbe-px min-is-0',\n )}\n >\n <Toolbar.Root\n classNames={[textBlockWidth, !hasAttention && 'opacity-20']}\n state={formattingState && { ...formattingState, ...commentsState }}\n onAction={handleAction}\n >\n <Toolbar.Markdown />\n {onFileUpload && <Toolbar.Custom onUpload={onFileUpload} />}\n <Toolbar.Separator />\n <Toolbar.View mode={viewMode ?? DEFAULT_VIEW_MODE} />\n <Toolbar.Actions />\n </Toolbar.Root>\n </div>\n )}\n <div\n role='none'\n ref={parentRef}\n data-testid='composer.markdownRoot'\n data-toolbar={toolbar ? 'enabled' : 'disabled'}\n className={mx(\n 'ch-focus-ring-inset data-[toolbar=disabled]:pbs-2 attention-surface',\n role === 'article' ? 'min-bs-0' : '[&_.cm-scroller]:overflow-hidden [&_.cm-scroller]:min-bs-24',\n )}\n {...focusAttributes}\n />\n </StackItem.Content>\n );\n};\n\n// Expose editor view for playwright tests.\n// TODO(wittjosiah): Find a better way to expose this or find a way to limit it to test runs.\nconst useTest = (view?: EditorView) => {\n useEffect(() => {\n const composer = (window as any).composer;\n if (composer) {\n composer.editorView = view;\n }\n }, [view]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { useMemo } from 'react';\n\nimport { createResolver, LayoutAction, useIntentResolver } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { Cursor, setSelection } from '@dxos/react-ui-editor';\n\nimport { MARKDOWN_PLUGIN } from '../meta';\n\n/**\n * Handle scrolling and selection of the current thread in a markdown editor.\n */\nexport const useSelectCurrentThread = (editorView: EditorView | undefined, documentId: string) => {\n const scrollIntoViewResolver = useMemo(\n () =>\n createResolver(\n LayoutAction.ScrollIntoView,\n ({ cursor }) => {\n invariant(editorView, 'Editor view is not defined.');\n const range = Cursor.getRangeFromCursor(editorView.state, cursor!);\n if (range) {\n const selection = editorView.state.selection.main.from !== range.from ? { anchor: range.from } : undefined;\n const effects = [\n // NOTE: This does not use the DOM scrollIntoView function.\n EditorView.scrollIntoView(range.from, { y: 'start', yMargin: 96 }),\n ];\n if (selection) {\n // Update the editor selection to get bi-directional highlighting.\n effects.push(setSelection.of({ current: documentId }));\n }\n\n editorView.dispatch({\n effects,\n selection: selection ? { anchor: range.from } : undefined,\n });\n }\n },\n {\n disposition: 'hoist',\n filter: (data) => !!editorView && data.id === documentId && !!data.cursor,\n },\n ),\n [documentId, editorView],\n );\n\n useIntentResolver(MARKDOWN_PLUGIN, scrollIntoViewResolver);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { createIntent, NavigationAction, type PromiseIntentDispatcher, useIntentDispatcher } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { createDocAccessor, fullyQualifiedId, getSpace, type Query } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ThemeProvider } from '@dxos/react-ui';\nimport {\n type AutocompleteResult,\n type EditorStateStore,\n type EditorViewMode,\n type Extension,\n InputModeExtensions,\n createDataExtensions,\n autocomplete,\n decorateMarkdown,\n folding,\n formattingKeymap,\n linkTooltip,\n listener,\n selectionState,\n typewriter,\n} from '@dxos/react-ui-editor';\nimport { defaultTx } from '@dxos/react-ui-theme';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { type DocumentType, type MarkdownPluginState, type MarkdownSettingsProps } from './types';\nimport { setFallbackName } from './util';\n\ntype ExtensionsOptions = {\n document?: DocumentType;\n dispatch?: PromiseIntentDispatcher;\n query?: Query<DocumentType>;\n settings: MarkdownSettingsProps;\n viewMode?: EditorViewMode;\n editorStateStore?: EditorStateStore;\n};\n\n// TODO(burdon): Merge with createBaseExtensions below.\nexport const useExtensions = ({\n document,\n settings,\n viewMode,\n editorStateStore,\n extensionProviders,\n}: ExtensionsOptions & Pick<MarkdownPluginState, 'extensionProviders'>): Extension[] => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const identity = useIdentity();\n const space = getSpace(document);\n\n // TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.\n // TODO(burdon): Unsubscribe.\n // const query = space?.db.query(Filter.schema(DocumentType));\n // query?.subscribe();\n const baseExtensions = useMemo(\n () =>\n createBaseExtensions({\n document,\n settings,\n viewMode,\n dispatch,\n // query,\n }),\n [\n document,\n viewMode,\n dispatch,\n settings,\n settings.editorInputMode,\n settings.folding,\n settings.numberedHeadings,\n settings.debug,\n settings.typewriter,\n ],\n );\n\n //\n // External extensions from other plugins.\n //\n const pluginExtensions = useMemo<Extension[] | undefined>(\n () =>\n extensionProviders?.reduce((acc: Extension[], provider) => {\n const extension = typeof provider === 'function' ? provider({ document }) : provider;\n if (extension) {\n acc.push(extension);\n }\n\n return acc;\n }, []),\n [extensionProviders, document],\n );\n\n //\n // Basic plugins.\n //\n return useMemo<Extension[]>(\n () =>\n [\n // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.\n document &&\n createDataExtensions({\n id: document.id,\n text: document.content.target && createDocAccessor(document.content.target, ['content']),\n space,\n identity,\n }),\n selectionState(editorStateStore),\n document &&\n listener({\n onChange: (text) => setFallbackName(document, text),\n }),\n baseExtensions,\n pluginExtensions,\n ].filter(isNotFalsy),\n [baseExtensions, pluginExtensions, document, document?.content?.target, space, identity],\n );\n};\n\n/**\n * Create extension instances for editor.\n */\nconst createBaseExtensions = ({ document, dispatch, settings, query, viewMode }: ExtensionsOptions): Extension[] => {\n const extensions: Extension[] = [\n settings.editorInputMode && InputModeExtensions[settings.editorInputMode],\n settings.folding && folding(),\n ].filter(isNotFalsy);\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 createIntent(NavigationAction.AddToActive, {\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(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(isNotFalsy);\n },\n }),\n );\n }\n\n if (settings.debug) {\n const items = settings.typewriter?.split(/[,\\n]/) ?? '';\n if (items) {\n extensions.push(typewriter({ items }));\n }\n }\n\n return extensions;\n};\n\n// TODO(burdon): Factor out styles.\nconst style = {\n hover: 'rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400',\n icon: 'inline-block leading-none mis-1 cursor-pointer',\n};\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 renderRoot(\n el,\n <a {...options} className={style.hover}>\n <Icon\n icon={isInternal ? 'ph--arrow-square-down--bold' : 'ph--arrow-square-out--bold'}\n size={4}\n classNames={style.icon}\n />\n </a>,\n );\n};\n\nconst renderLinkTooltip = (el: Element, url: string) => {\n const web = new URL(url);\n renderRoot(\n el,\n <a href={url} rel='noreferrer' target='_blank' className={style.hover}>\n {web.origin}\n <Icon icon='ph--arrow-square-out--bold' size={4} classNames={style.icon} />\n </a>,\n );\n};\n\n// TODO(burdon): Remove react rendering; use DOM directly.\nexport const renderRoot = <T extends Element>(root: T, node: ReactNode): T => {\n createRoot(root).render(<ThemeProvider tx={defaultTx}>{node}</ThemeProvider>);\n return root;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useEffect", "useMemo", "useResolvePlugin", "parseFileManagerPlugin", "fullyQualifiedId", "getSpace", "openSearchPanel", "React", "useMemo", "useEffect", "useCallback", "createIntent", "LayoutAction", "NavigationAction", "useIntentDispatcher", "useThemeContext", "useTranslation", "useAttention", "Toolbar", "createBasicExtensions", "createMarkdownExtensions", "createThemeExtensions", "dropFile", "editorContent", "editorGutter", "processAction", "useActionHandler", "useCommentState", "useCommentClickListener", "useFormattingState", "useTextEditor", "StackItem", "mx", "textBlockWidth", "isNotFalsy", "nonNullable", "EditorView", "useMemo", "createResolver", "LayoutAction", "useIntentResolver", "invariant", "Cursor", "setSelection", "useSelectCurrentThread", "editorView", "documentId", "scrollIntoViewResolver", "useMemo", "createResolver", "LayoutAction", "ScrollIntoView", "cursor", "invariant", "range", "Cursor", "getRangeFromCursor", "state", "selection", "main", "from", "anchor", "undefined", "effects", "EditorView", "scrollIntoView", "y", "yMargin", "push", "setSelection", "of", "current", "dispatch", "disposition", "filter", "data", "id", "useIntentResolver", "MARKDOWN_PLUGIN", "DEFAULT_VIEW_MODE", "MarkdownEditor", "id", "role", "initialValue", "extensions", "extensionProviders", "scrollPastEnd", "toolbar", "viewMode", "editorStateStore", "onFileUpload", "onViewModeChange", "t", "useTranslation", "MARKDOWN_PLUGIN", "themeMode", "useThemeContext", "dispatchPromise", "dispatch", "useIntentDispatcher", "formattingState", "formattingObserver", "useFormattingState", "hasAttention", "useAttention", "scrollTo", "selection", "useMemo", "getState", "providerExtensions", "flatMap", "provider", "filter", "nonNullable", "commentsState", "commentObserver", "useCommentState", "onCommentClick", "useCallback", "createIntent", "NavigationAction", "Open", "activeParts", "complementary", "LayoutAction", "SetLayout", "element", "state", "commentClickObserver", "useCommentClickListener", "handleDrop", "view", "files", "file", "info", "undefined", "processAction", "type", "data", "url", "parentRef", "editorView", "focusAttributes", "useTextEditor", "createBasicExtensions", "readonly", "placeholder", "createMarkdownExtensions", "createThemeExtensions", "syntaxHighlighting", "slots", "content", "className", "editorContent", "editorGutter", "dropFile", "onDrop", "isNotFalsy", "moveToEndOfLine", "useTest", "useSelectCurrentThread", "handleToolbarAction", "useActionHandler", "handleAction", "action", "openSearchPanel", "StackItem", "Content", "div", "mx", "Toolbar", "Root", "classNames", "textBlockWidth", "onAction", "Markdown", "Custom", "onUpload", "Separator", "View", "mode", "Actions", "ref", "data-testid", "data-toolbar", "useEffect", "composer", "window", "React", "useMemo", "createRoot", "createIntent", "NavigationAction", "useIntentDispatcher", "invariant", "createDocAccessor", "fullyQualifiedId", "getSpace", "useIdentity", "Icon", "ThemeProvider", "InputModeExtensions", "createDataExtensions", "autocomplete", "decorateMarkdown", "folding", "formattingKeymap", "linkTooltip", "listener", "selectionState", "typewriter", "defaultTx", "isNotFalsy", "useExtensions", "document", "settings", "viewMode", "editorStateStore", "extensionProviders", "dispatchPromise", "dispatch", "useIntentDispatcher", "identity", "useIdentity", "space", "getSpace", "baseExtensions", "useMemo", "createBaseExtensions", "editorInputMode", "folding", "numberedHeadings", "debug", "typewriter", "pluginExtensions", "reduce", "acc", "provider", "extension", "push", "createDataExtensions", "id", "text", "content", "target", "createDocAccessor", "selectionState", "listener", "onChange", "setFallbackName", "filter", "isNotFalsy", "query", "extensions", "InputModeExtensions", "formattingKeymap", "decorateMarkdown", "selectionChangeDelay", "from", "undefined", "renderLinkButton", "onRenderLink", "createIntent", "NavigationAction", "AddToActive", "part", "pivotId", "fullyQualifiedId", "scrollIntoView", "linkTooltip", "renderLinkTooltip", "autocomplete", "onSearch", "objects", "map", "object", "name", "length", "label", "apply", "items", "split", "style", "hover", "icon", "onSelectObject", "el", "url", "isInternal", "startsWith", "window", "location", "origin", "options", "onClick", "qualifiedId", "at", "invariant", "href", "rel", "renderRoot", "React", "a", "className", "Icon", "size", "classNames", "web", "URL", "root", "node", "createRoot", "render", "ThemeProvider", "tx", "defaultTx", "MarkdownContainer", "id", "role", "object", "extensionProviders", "settings", "viewMode", "editorStateStore", "onViewModeChange", "scrollPastEnd", "doc", "DocumentType", "undefined", "extensions", "useExtensions", "document", "React", "DocumentEditor", "fullyQualifiedId", "MarkdownEditor", "initialValue", "text", "toolbar", "inputMode", "editorInputMode", "props", "space", "getSpace", "useEffect", "fallbackName", "content", "target", "getFallbackName", "fileManagerPlugin", "useResolvePlugin", "parseFileManagerPlugin", "handleFileUpload", "useMemo", "provides", "file", "upload", "onFileUpload"]
|
|
7
|
+
}
|
|
@@ -2,11 +2,11 @@ import { createRequire } from 'node:module';const require = createRequire(import
|
|
|
2
2
|
import {
|
|
3
3
|
DocumentType,
|
|
4
4
|
TextType
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ZVFBKBSA.mjs";
|
|
6
6
|
|
|
7
7
|
// packages/plugins/plugin-markdown/src/util.tsx
|
|
8
8
|
import { debounce } from "@dxos/async";
|
|
9
|
-
import { create, createObject, isEchoObject, loadObjectReferences } from "@dxos/react-client/echo";
|
|
9
|
+
import { create, createObject, isEchoObject, loadObjectReferences, makeRef } from "@dxos/react-client/echo";
|
|
10
10
|
var isMarkdownProperties = (data) => isEchoObject(data) ? true : data && typeof data === "object" ? "title" in data && typeof data.title === "string" : false;
|
|
11
11
|
var markdownExtensionPlugins = (plugins) => {
|
|
12
12
|
return plugins.filter((plugin) => Boolean(plugin.provides?.markdown));
|
|
@@ -27,7 +27,7 @@ var serializer = {
|
|
|
27
27
|
return JSON.stringify({
|
|
28
28
|
name: object.name,
|
|
29
29
|
fallbackName: object.fallbackName,
|
|
30
|
-
content: content.content
|
|
30
|
+
content: content.target?.content
|
|
31
31
|
});
|
|
32
32
|
},
|
|
33
33
|
deserialize: async ({ content: serialized }) => {
|
|
@@ -35,9 +35,9 @@ var serializer = {
|
|
|
35
35
|
return createObject(create(DocumentType, {
|
|
36
36
|
name,
|
|
37
37
|
fallbackName,
|
|
38
|
-
content: create(TextType, {
|
|
38
|
+
content: makeRef(create(TextType, {
|
|
39
39
|
content
|
|
40
|
-
}),
|
|
40
|
+
})),
|
|
41
41
|
threads: []
|
|
42
42
|
}));
|
|
43
43
|
}
|
|
@@ -50,4 +50,4 @@ export {
|
|
|
50
50
|
setFallbackName,
|
|
51
51
|
serializer
|
|
52
52
|
};
|
|
53
|
-
//# sourceMappingURL=chunk-
|
|
53
|
+
//# sourceMappingURL=chunk-Y76MM22C.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/util.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { type TypedObjectSerializer } from '@dxos/plugin-space/types';\nimport { create, createObject, isEchoObject, loadObjectReferences, makeRef } from '@dxos/react-client/echo';\n\nimport { DocumentType, type MarkdownProperties, type MarkdownExtensionProvides, TextType } from './types';\n\nexport const isMarkdownProperties = (data: unknown): data is MarkdownProperties =>\n isEchoObject(data)\n ? true\n : data && typeof data === 'object'\n ? 'title' in data && typeof data.title === 'string'\n : false;\n\ntype MarkdownExtensionPlugin = Plugin<MarkdownExtensionProvides>;\n\nexport const markdownExtensionPlugins = (plugins: Plugin[]): MarkdownExtensionPlugin[] => {\n return (plugins as MarkdownExtensionPlugin[]).filter((plugin) => Boolean(plugin.provides?.markdown));\n};\n\nconst nonTitleChars = /[^\\w ]/g;\n\nexport const getFallbackName = (content: string) => {\n return content.substring(0, 31).split('\\n')[0].replaceAll(nonTitleChars, '').trim();\n};\n\nexport const setFallbackName = debounce((doc: DocumentType, content: string) => {\n const name = getFallbackName(content);\n if (doc.fallbackName !== name) {\n doc.fallbackName = name;\n }\n}, 200);\n\nexport const serializer: TypedObjectSerializer<DocumentType> = {\n serialize: async ({ object }): Promise<string> => {\n const content = await loadObjectReferences(object, (doc) => doc.content);\n return JSON.stringify({ name: object.name, fallbackName: object.fallbackName, content: content.target?.content });\n },\n\n deserialize: async ({ content: serialized }) => {\n const { name, fallbackName, content } = JSON.parse(serialized);\n return createObject(\n create(DocumentType, { name, fallbackName, content: makeRef(create(TextType, { content })), threads: [] }),\n );\n },\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAKA,SAASA,gBAAgB;AAEzB,SAASC,QAAQC,cAAcC,cAAcC,sBAAsBC,eAAe;AAI3E,IAAMC,uBAAuB,CAACC,SACnCC,aAAaD,IAAAA,IACT,OACAA,QAAQ,OAAOA,SAAS,WACtB,WAAWA,QAAQ,OAAOA,KAAKE,UAAU,WACzC;AAID,IAAMC,2BAA2B,CAACC,YAAAA;AACvC,SAAQA,QAAsCC,OAAO,CAACC,WAAWC,QAAQD,OAAOE,UAAUC,QAAAA,CAAAA;AAC5F;AAEA,IAAMC,gBAAgB;AAEf,IAAMC,kBAAkB,CAACC,YAAAA;AAC9B,SAAOA,QAAQC,UAAU,GAAG,EAAA,EAAIC,MAAM,IAAA,EAAM,CAAA,EAAGC,WAAWL,eAAe,EAAA,EAAIM,KAAI;AACnF;AAEO,IAAMC,kBAAkBC,SAAS,CAACC,KAAmBP,YAAAA;AAC1D,QAAMQ,OAAOT,gBAAgBC,OAAAA;AAC7B,MAAIO,IAAIE,iBAAiBD,MAAM;AAC7BD,QAAIE,eAAeD;EACrB;AACF,GAAG,GAAA;AAEI,IAAME,aAAkD;EAC7DC,WAAW,OAAO,EAAEC,OAAM,MAAE;AAC1B,UAAMZ,UAAU,MAAMa,qBAAqBD,QAAQ,CAACL,QAAQA,IAAIP,OAAO;AACvE,WAAOc,KAAKC,UAAU;MAAEP,MAAMI,OAAOJ;MAAMC,cAAcG,OAAOH;MAAcT,SAASA,QAAQgB,QAAQhB;IAAQ,CAAA;EACjH;EAEAiB,aAAa,OAAO,EAAEjB,SAASkB,WAAU,MAAE;AACzC,UAAM,EAAEV,MAAMC,cAAcT,QAAO,IAAKc,KAAKK,MAAMD,UAAAA;AACnD,WAAOE,aACLC,OAAOC,cAAc;MAAEd;MAAMC;MAAcT,SAASuB,QAAQF,OAAOG,UAAU;QAAExB;MAAQ,CAAA,CAAA;MAAKyB,SAAS,CAAA;IAAG,CAAA,CAAA;EAE5G;AACF;",
|
|
6
|
+
"names": ["debounce", "create", "createObject", "isEchoObject", "loadObjectReferences", "makeRef", "isMarkdownProperties", "data", "isEchoObject", "title", "markdownExtensionPlugins", "plugins", "filter", "plugin", "Boolean", "provides", "markdown", "nonTitleChars", "getFallbackName", "content", "substring", "split", "replaceAll", "trim", "setFallbackName", "debounce", "doc", "name", "fallbackName", "serializer", "serialize", "object", "loadObjectReferences", "JSON", "stringify", "target", "deserialize", "serialized", "parse", "createObject", "create", "DocumentType", "makeRef", "TextType", "threads"]
|
|
7
|
+
}
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
MARKDOWN_PLUGIN
|
|
4
4
|
} from "./chunk-BABK7FMW.mjs";
|
|
5
5
|
|
|
6
|
-
// packages/plugins/plugin-markdown/src/types/
|
|
7
|
-
import {
|
|
6
|
+
// packages/plugins/plugin-markdown/src/types/schema.ts
|
|
7
|
+
import { Ref, S, TypedObject } from "@dxos/echo-schema";
|
|
8
8
|
import { ThreadType } from "@dxos/plugin-space/types";
|
|
9
9
|
var TextType = class extends TypedObject({
|
|
10
10
|
typename: "dxos.org/type/Text",
|
|
@@ -19,18 +19,38 @@ var DocumentType = class extends TypedObject({
|
|
|
19
19
|
})({
|
|
20
20
|
name: S.optional(S.String),
|
|
21
21
|
fallbackName: S.optional(S.String),
|
|
22
|
-
content:
|
|
23
|
-
threads: S.mutable(S.Array(
|
|
22
|
+
content: Ref(TextType),
|
|
23
|
+
threads: S.mutable(S.Array(Ref(ThreadType)))
|
|
24
24
|
}) {
|
|
25
25
|
};
|
|
26
26
|
var isEditorModel = (data) => data && typeof data === "object" && "id" in data && typeof data.id === "string" && "text" in data && typeof data.text === "string";
|
|
27
27
|
|
|
28
28
|
// packages/plugins/plugin-markdown/src/types/types.ts
|
|
29
|
+
import { S as S2 } from "@dxos/echo-schema";
|
|
30
|
+
import { EditorViewMode } from "@dxos/react-ui-editor";
|
|
29
31
|
var MARKDOWN_ACTION = `${MARKDOWN_PLUGIN}/action`;
|
|
30
32
|
var MarkdownAction;
|
|
31
33
|
(function(MarkdownAction2) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
class Create extends S2.TaggedClass()(MARKDOWN_ACTION, {
|
|
35
|
+
input: S2.Struct({
|
|
36
|
+
name: S2.optional(S2.String),
|
|
37
|
+
content: S2.optional(S2.String)
|
|
38
|
+
}),
|
|
39
|
+
output: S2.Struct({
|
|
40
|
+
object: DocumentType
|
|
41
|
+
})
|
|
42
|
+
}) {
|
|
43
|
+
}
|
|
44
|
+
MarkdownAction2.Create = Create;
|
|
45
|
+
class SetViewMode extends S2.TaggedClass()(`${MARKDOWN_ACTION}/set-view-mode`, {
|
|
46
|
+
input: S2.Struct({
|
|
47
|
+
id: S2.String,
|
|
48
|
+
viewMode: EditorViewMode
|
|
49
|
+
}),
|
|
50
|
+
output: S2.Void
|
|
51
|
+
}) {
|
|
52
|
+
}
|
|
53
|
+
MarkdownAction2.SetViewMode = SetViewMode;
|
|
34
54
|
})(MarkdownAction || (MarkdownAction = {}));
|
|
35
55
|
|
|
36
56
|
export {
|
|
@@ -39,4 +59,4 @@ export {
|
|
|
39
59
|
isEditorModel,
|
|
40
60
|
MarkdownAction
|
|
41
61
|
};
|
|
42
|
-
//# sourceMappingURL=chunk-
|
|
62
|
+
//# sourceMappingURL=chunk-ZVFBKBSA.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/schema.ts", "../../../src/types/types.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Ref, S, TypedObject } from '@dxos/echo-schema';\nimport { ThreadType } from '@dxos/plugin-space/types';\n\n// TODO(burdon): Factor out.\nexport class TextType extends TypedObject({ typename: 'dxos.org/type/Text', version: '0.1.0' })({\n content: S.String,\n}) {}\n\nexport class DocumentType extends TypedObject({ typename: 'dxos.org/type/Document', version: '0.1.0' })({\n name: S.optional(S.String),\n fallbackName: S.optional(S.String),\n content: Ref(TextType),\n threads: S.mutable(S.Array(Ref(ThreadType))),\n}) {}\n\n/**\n * Checks if an object conforms to the interface needed to render an editor.\n */\n// TODO(burdon): Normalize types (from FilesPlugin).\nexport const isEditorModel = (data: any): data is { id: string; text: string } =>\n data &&\n typeof data === 'object' &&\n 'id' in data &&\n typeof data.id === 'string' &&\n 'text' in data &&\n typeof data.text === 'string';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphSerializerProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SettingsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { S } from '@dxos/echo-schema';\nimport { type SchemaProvides } from '@dxos/plugin-space';\nimport { type Extension, type EditorInputMode, EditorViewMode } from '@dxos/react-ui-editor';\n\nimport { DocumentType } from './schema';\nimport { MARKDOWN_PLUGIN } from '../meta';\n\nconst MARKDOWN_ACTION = `${MARKDOWN_PLUGIN}/action`;\n\nexport namespace MarkdownAction {\n export class Create extends S.TaggedClass<Create>()(MARKDOWN_ACTION, {\n input: S.Struct({\n name: S.optional(S.String),\n content: S.optional(S.String),\n }),\n output: S.Struct({\n object: DocumentType,\n }),\n }) {}\n\n export class SetViewMode extends S.TaggedClass<SetViewMode>()(`${MARKDOWN_ACTION}/set-view-mode`, {\n input: S.Struct({\n id: S.String,\n viewMode: EditorViewMode,\n }),\n output: S.Void,\n }) {}\n}\n\nexport type MarkdownProperties = Record<string, any>;\n\n// TODO(burdon): Async.\nexport type MarkdownExtensionProvider = (props: { document?: DocumentType }) => Extension | undefined;\n\nexport type OnChange = (text: string) => void;\n\nexport type MarkdownExtensionProvides = {\n // TODO(burdon): Rename.\n markdown: {\n extensions: MarkdownExtensionProvider;\n };\n};\n\nexport type MarkdownPluginState = {\n // Codemirror extensions provided by other plugins.\n extensionProviders?: MarkdownExtensionProvider[];\n\n // TODO(burdon): Extend view mode per document to include scroll position, etc.\n // View mode per document.\n viewMode: Record<string, EditorViewMode>;\n};\n\nexport type MarkdownSettingsProps = {\n defaultViewMode: EditorViewMode;\n editorInputMode?: EditorInputMode;\n experimental?: boolean;\n debug?: boolean;\n toolbar?: boolean;\n typewriter?: string;\n // TODO(burdon): Per document settings.\n numberedHeadings?: boolean;\n folding?: boolean;\n};\n\n// TODO(Zan): Move this to the plugin-space plugin or another common location when we implement comments in sheets.\ntype ThreadProvides<T> = {\n thread: {\n predicate: (obj: any) => obj is T;\n createSort: (obj: T) => (anchorA: string | undefined, anchorB: string | undefined) => number;\n };\n};\n\nexport type MarkdownPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphSerializerProvides &\n MetadataRecordsProvides &\n SettingsProvides<MarkdownSettingsProps> &\n TranslationsProvides &\n SchemaProvides &\n ThreadProvides<DocumentType>;\n"],
|
|
5
|
+
"mappings": ";;;;;;AAIA,SAASA,KAAKC,GAAGC,mBAAmB;AACpC,SAASC,kBAAkB;AAGpB,IAAMC,WAAN,cAAuBC,YAAY;EAAEC,UAAU;EAAsBC,SAAS;AAAQ,CAAA,EAAG;EAC9FC,SAASC,EAAEC;AACb,CAAA,EAAA;AAAI;AAEG,IAAMC,eAAN,cAA2BN,YAAY;EAAEC,UAAU;EAA0BC,SAAS;AAAQ,CAAA,EAAG;EACtGK,MAAMH,EAAEI,SAASJ,EAAEC,MAAM;EACzBI,cAAcL,EAAEI,SAASJ,EAAEC,MAAM;EACjCF,SAASO,IAAIX,QAAAA;EACbY,SAASP,EAAEQ,QAAQR,EAAES,MAAMH,IAAII,UAAAA,CAAAA,CAAAA;AACjC,CAAA,EAAA;AAAI;AAMG,IAAMC,gBAAgB,CAACC,SAC5BA,QACA,OAAOA,SAAS,YAChB,QAAQA,QACR,OAAOA,KAAKC,OAAO,YACnB,UAAUD,QACV,OAAOA,KAAKE,SAAS;;;ACjBvB,SAASC,KAAAA,UAAS;AAElB,SAA+CC,sBAAsB;AAKrE,IAAMC,kBAAkB,GAAGC,eAAAA;;UAEVC,iBAAAA;EACR,MAAMC,eAAeC,GAAEC,YAAW,EAAWL,iBAAiB;IACnEM,OAAOF,GAAEG,OAAO;MACdC,MAAMJ,GAAEK,SAASL,GAAEM,MAAM;MACzBC,SAASP,GAAEK,SAASL,GAAEM,MAAM;IAC9B,CAAA;IACAE,QAAQR,GAAEG,OAAO;MACfM,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;kBARSX,SAAAA;EAUN,MAAMY,oBAAoBX,GAAEC,YAAW,EAAgB,GAAGL,eAAAA,kBAAiC;IAChGM,OAAOF,GAAEG,OAAO;MACdS,IAAIZ,GAAEM;MACNO,UAAUC;IACZ,CAAA;IACAN,QAAQR,GAAEe;EACZ,CAAA,EAAA;EAAI;kBANSJ,cAAAA;AAOf,GAlBiBb,mBAAAA,iBAAAA,CAAAA,EAAAA;",
|
|
6
|
+
"names": ["Ref", "S", "TypedObject", "ThreadType", "TextType", "TypedObject", "typename", "version", "content", "S", "String", "DocumentType", "name", "optional", "fallbackName", "Ref", "threads", "mutable", "Array", "ThreadType", "isEditorModel", "data", "id", "text", "S", "EditorViewMode", "MARKDOWN_ACTION", "MARKDOWN_PLUGIN", "MarkdownAction", "Create", "S", "TaggedClass", "input", "Struct", "name", "optional", "String", "content", "output", "object", "DocumentType", "SetViewMode", "id", "viewMode", "EditorViewMode", "Void"]
|
|
7
|
+
}
|
|
@@ -5,30 +5,28 @@ import {
|
|
|
5
5
|
markdownExtensionPlugins,
|
|
6
6
|
serializer,
|
|
7
7
|
setFallbackName
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-Y76MM22C.mjs";
|
|
9
9
|
import {
|
|
10
10
|
DocumentType,
|
|
11
11
|
MarkdownAction,
|
|
12
12
|
TextType,
|
|
13
13
|
isEditorModel
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-ZVFBKBSA.mjs";
|
|
15
15
|
import {
|
|
16
16
|
MARKDOWN_PLUGIN,
|
|
17
17
|
meta_default
|
|
18
18
|
} from "./chunk-BABK7FMW.mjs";
|
|
19
19
|
|
|
20
20
|
// packages/plugins/plugin-markdown/src/MarkdownPlugin.tsx
|
|
21
|
-
import {
|
|
21
|
+
import { pipe } from "effect";
|
|
22
22
|
import React2 from "react";
|
|
23
|
-
import { parseIntentPlugin, resolvePlugin,
|
|
24
|
-
import { create } from "@dxos/live-object";
|
|
23
|
+
import { parseIntentPlugin, resolvePlugin, createSurface, createResolver, createIntent, chain } from "@dxos/app-framework";
|
|
24
|
+
import { create, makeRef, RefArray } from "@dxos/live-object";
|
|
25
25
|
import { LocalStorageStore } from "@dxos/local-storage";
|
|
26
|
-
import { parseClientPlugin } from "@dxos/plugin-client";
|
|
27
|
-
import { createExtension, isActionGroup } from "@dxos/plugin-graph";
|
|
28
26
|
import { SpaceAction } from "@dxos/plugin-space";
|
|
29
27
|
import { CollectionType } from "@dxos/plugin-space/types";
|
|
30
|
-
import { createDocAccessor, fullyQualifiedId, getRangeFromCursor, isSpace
|
|
31
|
-
import {
|
|
28
|
+
import { createDocAccessor, fullyQualifiedId, getRangeFromCursor, isSpace } from "@dxos/react-client/echo";
|
|
29
|
+
import { translations as editorTranslations, createEditorStateStore } from "@dxos/react-ui-editor";
|
|
32
30
|
|
|
33
31
|
// packages/plugins/plugin-markdown/src/components/index.ts
|
|
34
32
|
import { lazy } from "react";
|
|
@@ -99,7 +97,7 @@ var MarkdownSettings = ({ settings }) => {
|
|
|
99
97
|
};
|
|
100
98
|
|
|
101
99
|
// packages/plugins/plugin-markdown/src/components/index.ts
|
|
102
|
-
var MarkdownContainer = lazy(() => import("./MarkdownContainer-
|
|
100
|
+
var MarkdownContainer = lazy(() => import("./MarkdownContainer-E7W623A7.mjs"));
|
|
103
101
|
|
|
104
102
|
// packages/plugins/plugin-markdown/src/translations.ts
|
|
105
103
|
var translations_default = [
|
|
@@ -137,7 +135,6 @@ var translations_default = [
|
|
|
137
135
|
];
|
|
138
136
|
|
|
139
137
|
// packages/plugins/plugin-markdown/src/MarkdownPlugin.tsx
|
|
140
|
-
var getDoc = (object) => object instanceof DocumentType ? object : void 0;
|
|
141
138
|
var MarkdownPlugin = () => {
|
|
142
139
|
const settings = new LocalStorageStore(MARKDOWN_PLUGIN, {
|
|
143
140
|
defaultViewMode: "preview",
|
|
@@ -155,7 +152,7 @@ var MarkdownPlugin = () => {
|
|
|
155
152
|
const setViewMode = (id, viewMode) => state.values.viewMode[id] = viewMode;
|
|
156
153
|
return {
|
|
157
154
|
meta: meta_default,
|
|
158
|
-
ready: async (plugins) => {
|
|
155
|
+
ready: async ({ plugins }) => {
|
|
159
156
|
settings.prop({
|
|
160
157
|
key: "defaultViewMode",
|
|
161
158
|
type: LocalStorageStore.enum()
|
|
@@ -209,7 +206,7 @@ var MarkdownPlugin = () => {
|
|
|
209
206
|
metadata: {
|
|
210
207
|
records: {
|
|
211
208
|
[DocumentType.typename]: {
|
|
212
|
-
createObject: MarkdownAction.
|
|
209
|
+
createObject: (props) => createIntent(MarkdownAction.Create, props),
|
|
213
210
|
label: (object) => object instanceof DocumentType ? object.name || object.fallbackName : void 0,
|
|
214
211
|
placeholder: [
|
|
215
212
|
"document title placeholder",
|
|
@@ -222,9 +219,9 @@ var MarkdownPlugin = () => {
|
|
|
222
219
|
managesAutofocus: true
|
|
223
220
|
},
|
|
224
221
|
// TODO(wittjosiah): Move out of metadata.
|
|
225
|
-
loadReferences: (doc) =>
|
|
226
|
-
|
|
227
|
-
...
|
|
222
|
+
loadReferences: async (doc) => await RefArray.loadAll([
|
|
223
|
+
doc.content,
|
|
224
|
+
...doc.threads
|
|
228
225
|
]),
|
|
229
226
|
serializer
|
|
230
227
|
}
|
|
@@ -243,61 +240,8 @@ var MarkdownPlugin = () => {
|
|
|
243
240
|
]
|
|
244
241
|
},
|
|
245
242
|
graph: {
|
|
246
|
-
builder: (plugins) => {
|
|
247
|
-
const client = resolvePlugin(plugins, parseClientPlugin)?.provides.client;
|
|
248
|
-
const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;
|
|
249
|
-
if (!client || !dispatch) {
|
|
250
|
-
return [];
|
|
251
|
-
}
|
|
252
|
-
return createExtension({
|
|
253
|
-
id: MarkdownAction.CREATE,
|
|
254
|
-
filter: (node) => isActionGroup(node) && node.id.startsWith(SpaceAction.ADD_OBJECT),
|
|
255
|
-
actions: ({ node }) => {
|
|
256
|
-
const id = node.id.split("/").at(-1);
|
|
257
|
-
const [spaceId, objectId] = id?.split(":") ?? [];
|
|
258
|
-
const space = client.spaces.get().find((space2) => space2.id === spaceId);
|
|
259
|
-
const object = objectId && space?.db.getObjectById(objectId);
|
|
260
|
-
const target = objectId ? object : space;
|
|
261
|
-
if (!target) {
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
return [
|
|
265
|
-
{
|
|
266
|
-
id: `${MARKDOWN_PLUGIN}/create/${node.id}`,
|
|
267
|
-
data: async () => {
|
|
268
|
-
await dispatch([
|
|
269
|
-
{
|
|
270
|
-
plugin: MARKDOWN_PLUGIN,
|
|
271
|
-
action: MarkdownAction.CREATE
|
|
272
|
-
},
|
|
273
|
-
{
|
|
274
|
-
action: SpaceAction.ADD_OBJECT,
|
|
275
|
-
data: {
|
|
276
|
-
target
|
|
277
|
-
}
|
|
278
|
-
},
|
|
279
|
-
{
|
|
280
|
-
action: NavigationAction.OPEN
|
|
281
|
-
}
|
|
282
|
-
]);
|
|
283
|
-
},
|
|
284
|
-
properties: {
|
|
285
|
-
label: [
|
|
286
|
-
"create document label",
|
|
287
|
-
{
|
|
288
|
-
ns: MARKDOWN_PLUGIN
|
|
289
|
-
}
|
|
290
|
-
],
|
|
291
|
-
icon: "ph--text-aa--regular",
|
|
292
|
-
testId: "markdownPlugin.createObject"
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
];
|
|
296
|
-
}
|
|
297
|
-
});
|
|
298
|
-
},
|
|
299
243
|
serializer: (plugins) => {
|
|
300
|
-
const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.
|
|
244
|
+
const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatchPromise;
|
|
301
245
|
if (!dispatch) {
|
|
302
246
|
return [];
|
|
303
247
|
}
|
|
@@ -308,7 +252,7 @@ var MarkdownPlugin = () => {
|
|
|
308
252
|
// Reconcile with metadata serializers.
|
|
309
253
|
serialize: async (node) => {
|
|
310
254
|
const doc = node.data;
|
|
311
|
-
const content = await
|
|
255
|
+
const content = await doc.content.load();
|
|
312
256
|
return {
|
|
313
257
|
name: doc.name || doc.fallbackName || translations_default[0]["en-US"][MARKDOWN_PLUGIN]["document title placeholder"],
|
|
314
258
|
data: content.content,
|
|
@@ -317,61 +261,26 @@ var MarkdownPlugin = () => {
|
|
|
317
261
|
},
|
|
318
262
|
deserialize: async (data, ancestors) => {
|
|
319
263
|
const space = ancestors.find(isSpace);
|
|
320
|
-
const target = ancestors.findLast((ancestor) => ancestor instanceof CollectionType) ?? space?.properties[CollectionType.typename];
|
|
264
|
+
const target = ancestors.findLast((ancestor) => ancestor instanceof CollectionType) ?? space?.properties[CollectionType.typename]?.target;
|
|
321
265
|
if (!space || !target) {
|
|
322
266
|
return;
|
|
323
267
|
}
|
|
324
|
-
const result = await dispatch(
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
}
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
action: SpaceAction.ADD_OBJECT,
|
|
335
|
-
data: {
|
|
336
|
-
target
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
]);
|
|
340
|
-
return result?.data.object;
|
|
268
|
+
const result = await dispatch(pipe(createIntent(MarkdownAction.Create, {
|
|
269
|
+
name: data.name,
|
|
270
|
+
content: data.data
|
|
271
|
+
}), chain(SpaceAction.AddObject, {
|
|
272
|
+
target
|
|
273
|
+
})));
|
|
274
|
+
return result.data?.object;
|
|
341
275
|
}
|
|
342
276
|
}
|
|
343
277
|
];
|
|
344
278
|
}
|
|
345
279
|
},
|
|
346
|
-
stack: {
|
|
347
|
-
creators: [
|
|
348
|
-
{
|
|
349
|
-
id: "create-stack-section-doc",
|
|
350
|
-
testId: "markdownPlugin.createSection",
|
|
351
|
-
type: [
|
|
352
|
-
"plugin name",
|
|
353
|
-
{
|
|
354
|
-
ns: MARKDOWN_PLUGIN
|
|
355
|
-
}
|
|
356
|
-
],
|
|
357
|
-
label: [
|
|
358
|
-
"create stack section label",
|
|
359
|
-
{
|
|
360
|
-
ns: MARKDOWN_PLUGIN
|
|
361
|
-
}
|
|
362
|
-
],
|
|
363
|
-
icon: (props) => /* @__PURE__ */ React2.createElement(TextAa, props),
|
|
364
|
-
intent: {
|
|
365
|
-
plugin: MARKDOWN_PLUGIN,
|
|
366
|
-
action: MarkdownAction.CREATE
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
]
|
|
370
|
-
},
|
|
371
280
|
thread: {
|
|
372
281
|
predicate: (obj) => obj instanceof DocumentType,
|
|
373
282
|
createSort: (doc) => {
|
|
374
|
-
const accessor = doc.content ? createDocAccessor(doc.content, [
|
|
283
|
+
const accessor = doc.content.target ? createDocAccessor(doc.content.target, [
|
|
375
284
|
"content"
|
|
376
285
|
]) : void 0;
|
|
377
286
|
if (!accessor) {
|
|
@@ -392,68 +301,73 @@ var MarkdownPlugin = () => {
|
|
|
392
301
|
}
|
|
393
302
|
},
|
|
394
303
|
surface: {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
304
|
+
definitions: () => [
|
|
305
|
+
createSurface({
|
|
306
|
+
id: `${MARKDOWN_PLUGIN}/document`,
|
|
307
|
+
role: [
|
|
308
|
+
"article",
|
|
309
|
+
"section"
|
|
310
|
+
],
|
|
311
|
+
filter: (data) => data.subject instanceof DocumentType,
|
|
312
|
+
component: ({ data, role }) => /* @__PURE__ */ React2.createElement(MarkdownContainer, {
|
|
313
|
+
id: fullyQualifiedId(data.subject),
|
|
314
|
+
object: data.subject,
|
|
315
|
+
role,
|
|
316
|
+
settings: settings.values,
|
|
317
|
+
extensionProviders: state.values.extensionProviders,
|
|
318
|
+
viewMode: getViewMode(fullyQualifiedId(data.subject)),
|
|
319
|
+
editorStateStore,
|
|
320
|
+
onViewModeChange: setViewMode
|
|
321
|
+
})
|
|
322
|
+
}),
|
|
323
|
+
createSurface({
|
|
324
|
+
id: `${MARKDOWN_PLUGIN}/editor`,
|
|
325
|
+
role: [
|
|
326
|
+
"article",
|
|
327
|
+
"section"
|
|
328
|
+
],
|
|
329
|
+
filter: (data) => isEditorModel(data.subject),
|
|
330
|
+
component: ({ data, role }) => /* @__PURE__ */ React2.createElement(MarkdownContainer, {
|
|
331
|
+
id: data.subject.id,
|
|
332
|
+
object: data.subject,
|
|
333
|
+
role,
|
|
334
|
+
settings: settings.values,
|
|
335
|
+
extensionProviders: state.values.extensionProviders,
|
|
336
|
+
viewMode: getViewMode(data.subject.id),
|
|
337
|
+
editorStateStore,
|
|
338
|
+
onViewModeChange: setViewMode
|
|
339
|
+
})
|
|
340
|
+
}),
|
|
341
|
+
createSurface({
|
|
342
|
+
id: `${MARKDOWN_PLUGIN}/settings`,
|
|
343
|
+
role: "settings",
|
|
344
|
+
filter: (data) => data.subject === MARKDOWN_PLUGIN,
|
|
345
|
+
component: () => /* @__PURE__ */ React2.createElement(MarkdownSettings, {
|
|
346
|
+
settings: settings.values
|
|
347
|
+
})
|
|
348
|
+
})
|
|
349
|
+
]
|
|
429
350
|
},
|
|
430
351
|
intent: {
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
content:
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
};
|
|
444
|
-
}
|
|
445
|
-
case MarkdownAction.SET_VIEW_MODE: {
|
|
446
|
-
const { id, viewMode } = data ?? {};
|
|
447
|
-
if (typeof id === "string" && EditorViewModes2.includes(viewMode)) {
|
|
448
|
-
state.values.viewMode[id] = viewMode;
|
|
449
|
-
return {
|
|
450
|
-
data: true
|
|
451
|
-
};
|
|
352
|
+
resolvers: () => [
|
|
353
|
+
createResolver(MarkdownAction.Create, ({ name, content }) => {
|
|
354
|
+
const doc = create(DocumentType, {
|
|
355
|
+
name,
|
|
356
|
+
content: makeRef(create(TextType, {
|
|
357
|
+
content: content ?? ""
|
|
358
|
+
})),
|
|
359
|
+
threads: []
|
|
360
|
+
});
|
|
361
|
+
return {
|
|
362
|
+
data: {
|
|
363
|
+
object: doc
|
|
452
364
|
}
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
}
|
|
456
|
-
|
|
365
|
+
};
|
|
366
|
+
}),
|
|
367
|
+
createResolver(MarkdownAction.SetViewMode, ({ id, viewMode }) => {
|
|
368
|
+
state.values.viewMode[id] = viewMode;
|
|
369
|
+
})
|
|
370
|
+
]
|
|
457
371
|
}
|
|
458
372
|
}
|
|
459
373
|
};
|